diff --git a/dist/AjaxLogin/AjaxLogin.js b/dist/AjaxLogin/AjaxLogin.js index fa22eb20..1661b2e1 100644 --- a/dist/AjaxLogin/AjaxLogin.js +++ b/dist/AjaxLogin/AjaxLogin.js @@ -574,7 +574,7 @@ var ajaxLogin = (toastifyInstance, isAgreeTos = false) => { pwdInput } = generateElements(isAgreeTos); let loginToken = ""; - const login = /* @__PURE__ */ function() { + const _login = /* @__PURE__ */ function() { var _ref6 = _asyncToGenerator(function* ({ loginContinue = false, retypePassword = false @@ -619,7 +619,7 @@ var ajaxLogin = (toastifyInstance, isAgreeTos = false) => { text: getMessage("EmptyPassword"), duration: -1 }, "warning"); - void login({ + void _login({ retypePassword: true }); } else { @@ -627,7 +627,7 @@ var ajaxLogin = (toastifyInstance, isAgreeTos = false) => { text: getMessage("Empty2FA"), duration: -1 }, "warning"); - void login({ + void _login({ loginContinue: true }); } @@ -663,7 +663,7 @@ var ajaxLogin = (toastifyInstance, isAgreeTos = false) => { }, "error"); break; case "oathauth-auth-ui": - void login({ + void _login({ loginContinue: true }); break; @@ -672,7 +672,7 @@ var ajaxLogin = (toastifyInstance, isAgreeTos = false) => { text: getMessage("Invalid 2FA verification code"), duration: -1 }, "warning"); - void login({ + void _login({ loginContinue: true }); break; @@ -681,7 +681,7 @@ var ajaxLogin = (toastifyInstance, isAgreeTos = false) => { text: getMessage("New password is required"), duration: -1 }, "warning"); - void login({ + void _login({ retypePassword: true }); break; @@ -707,7 +707,7 @@ var ajaxLogin = (toastifyInstance, isAgreeTos = false) => { void redirectOriginLoginPage(); } }); - return function login2() { + return function login() { return _ref6.apply(this, arguments); }; }(); @@ -720,7 +720,7 @@ var ajaxLogin = (toastifyInstance, isAgreeTos = false) => { } = yield checkValid([agreeTosCheckbox, nameInput, pwdInput], toastifyInstance); toastifyInstance = lastToastifyInstance; if (isValid) { - void login(); + void _login(); } else { ajaxLogin(toastifyInstance, lastIsAgreeTos); } @@ -792,4 +792,4 @@ void (0, import_ext_gadget13.getBody)().then(function initAutoLogin($body) { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL0FqYXhMb2dpbi9vcHRpb25zLmpzb24iLCAic3JjL0FqYXhMb2dpbi9BamF4TG9naW4udHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL2FkZExpc3RlbmVyLnRzIiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy9hcGkudHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL2NvcmUudHN4IiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy91dGlsL2NoZWNrVmFsaWQudHN4IiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy9pMThuLnRzIiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy9pbml0V2luZG93TWFuYWdlci50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9vb3VpQ29uZmlybS50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9nZW5lcmF0ZUVsZW1lbnRzLnRzeCIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9vb3VpUHJvbXB0LnRzeCIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9yZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyLnRzIiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy91dGlsL3F1ZXJ5TG9naW5Ub2tlbi50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9yZWRpcmVjdE9yaWdpbkxvZ2luUGFnZS50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9zaG93RXJyb3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIntcblx0XCJsb2dpbkVsZW1lbnRTZWxlY3RvclwiOiBcImE6aGFzKC5hamF4bG9naW4tbW91bnQtcG9pbnQpLCNwdC1sb2dpbj5hLC52ZWN0b3ItdXNlci1tZW51LWxvZ2luPmEsI3VzZXItdG9vbHM+YVtocmVmKj1cXFwiU3BlY2lhbFxcXCJdLC5tYWlucGFnZS10b3AtbWVudT5saTpudGgtY2hpbGQoMikgYVwiLFxuXHRcInZlcnNpb25cIjogXCI0LjBcIlxufVxuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtjaGVja0ExMXlDb25maXJtS2V5LCBnZXRCb2R5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuaW1wb3J0IHthZGRMaXN0ZW5lcn0gZnJvbSAnLi9tb2R1bGVzL2FkZExpc3RlbmVyJztcbmltcG9ydCB7YWpheExvZ2lufSBmcm9tICcuL21vZHVsZXMvY29yZSc7XG5pbXBvcnQge3dpbmRvd01hbmFnZXJ9IGZyb20gJy4vbW9kdWxlcy9pbml0V2luZG93TWFuYWdlcic7XG5cbnZvaWQgZ2V0Qm9keSgpLnRoZW4oZnVuY3Rpb24gaW5pdEF1dG9Mb2dpbigkYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4pOiB2b2lkIHtcblx0Y29uc3Qge3dnVXNlck5hbWV9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5cdGlmICh3Z1VzZXJOYW1lKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgJGxvZ2luRWxlbWVudDogSlF1ZXJ5PEhUTUxBbmNob3JFbGVtZW50PiA9ICRib2R5LmZpbmQ8SFRNTEFuY2hvckVsZW1lbnQ+KE9QVElPTlMubG9naW5FbGVtZW50U2VsZWN0b3IpO1xuXHRpZiAoISRsb2dpbkVsZW1lbnQubGVuZ3RoKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0d2luZG93TWFuYWdlci4kZWxlbWVudC5hcHBlbmRUbygkYm9keSk7XG5cblx0Y29uc3QgZmFrZVRvYXN0aWZ5SW5zdGFuY2U6IFRvYXN0aWZ5SW5zdGFuY2UgPSB7XG5cdFx0aGlkZVRvYXN0OiAoKSA9PiB7fSxcblx0fTtcblxuXHRjb25zdCBldmVudExpc3RlbmVyID0gKGV2ZW50OiBKUXVlcnkuQ2xpY2tFdmVudCB8IEpRdWVyeS5LZXlEb3duRXZlbnQpOiB2b2lkID0+IHtcblx0XHRpZiAoIWNoZWNrQTExeUNvbmZpcm1LZXkoZXZlbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRhamF4TG9naW4oZmFrZVRvYXN0aWZ5SW5zdGFuY2UpO1xuXHR9O1xuXHRhZGRMaXN0ZW5lcigkbG9naW5FbGVtZW50LCBldmVudExpc3RlbmVyKTtcbn0pO1xuIiwgImltcG9ydCB7ZmlsdGVyQWx0ZXJlZENsaWNrc30gZnJvbSAnZXh0LmdhZGdldC5GaWx0ZXJBbHRlcmVkQ2xpY2tzJztcblxuY29uc3QgYWRkTGlzdGVuZXIgPSAoXG5cdCRlbGVtZW50OiBKUXVlcnksXG5cdGV2ZW50TGlzdGVuZXI6IChldmVudDogSlF1ZXJ5LkNsaWNrRXZlbnQgfCBKUXVlcnkuS2V5RG93bkV2ZW50KSA9PiB2b2lkXG4pOiB2b2lkID0+IHtcblx0JGVsZW1lbnQub24oJ2NsaWNrJywgZmlsdGVyQWx0ZXJlZENsaWNrcyhldmVudExpc3RlbmVyKSk7XG5cdCRlbGVtZW50Lm9uKCdrZXlkb3duJywgZXZlbnRMaXN0ZW5lcik7XG59O1xuXG5leHBvcnQge2FkZExpc3RlbmVyfTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxudHlwZSBDbGllbnRMb2dpblBhcmFtcyA9IEFwaUNsaWVudExvZ2luUGFyYW1zICYge1xuXHR1c2VybmFtZT86IHN0cmluZztcblx0cGFzc3dvcmQ/OiBzdHJpbmc7XG5cdHJlbWVtYmVyTWU/OiBib29sZWFuO1xuXHRyZXR5cGU/OiBzdHJpbmc7XG5cdE9BVEhUb2tlbj86IHN0cmluZztcbn07XG5cbmNvbnN0IGFwaTogbXcuQXBpID0gaW5pdE13QXBpKGBBamF4TG9naW4vJHtPUFRJT05TLnZlcnNpb259YCk7XG5cbmV4cG9ydCB7dHlwZSBDbGllbnRMb2dpblBhcmFtcywgYXBpfTtcbiIsICJpbXBvcnQge3R5cGUgQ2xpZW50TG9naW5QYXJhbXMsIGFwaX0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHtjaGVja1ZhbGlkfSBmcm9tICcuL3V0aWwvY2hlY2tWYWxpZCc7XG5pbXBvcnQge2dlbmVyYXRlRWxlbWVudHN9IGZyb20gJy4vdXRpbC9nZW5lcmF0ZUVsZW1lbnRzJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB7b291aVByb21wdH0gZnJvbSAnLi91dGlsL29vdWlQcm9tcHQnO1xuaW1wb3J0IHtxdWVyeUxvZ2luVG9rZW59IGZyb20gJy4vdXRpbC9xdWVyeUxvZ2luVG9rZW4nO1xuaW1wb3J0IHtyZWRpcmVjdE9yaWdpbkxvZ2luUGFnZX0gZnJvbSAnLi91dGlsL3JlZGlyZWN0T3JpZ2luTG9naW5QYWdlJztcbmltcG9ydCB7cmVtb3ZlV2luZG93UmVzaXplSGFuZGxlcn0gZnJvbSAnLi91dGlsL3JlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXInO1xuaW1wb3J0IHtzaG93RXJyb3J9IGZyb20gJy4vdXRpbC9zaG93RXJyb3InO1xuaW1wb3J0IHt0b2FzdGlmeX0gZnJvbSAnZXh0LmdhZGdldC5Ub2FzdGlmeSc7XG5pbXBvcnQge3dpbmRvd01hbmFnZXJ9IGZyb20gJy4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCBhamF4TG9naW4gPSAodG9hc3RpZnlJbnN0YW5jZTogVG9hc3RpZnlJbnN0YW5jZSwgaXNBZ3JlZVRvczogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XG5cdGNvbnN0IHtcblx0XHQkYWdyZWVUb3MsXG5cdFx0JGZvcmdvdFBhc3N3b3JkLFxuXHRcdCRpbnB1dEJveCxcblx0XHQkcmVtZW1iZXJNZSxcblx0XHQkdG9zTGFiZWwsXG5cdFx0YWdyZWVUb3NDaGVja2JveCxcblx0XHRrZWVwTG9naW5DaGVja2JveCxcblx0XHRtZXNzYWdlRGlhbG9nLFxuXHRcdG5hbWVJbnB1dCxcblx0XHRwd2RJbnB1dCxcblx0fSA9IGdlbmVyYXRlRWxlbWVudHMoaXNBZ3JlZVRvcyk7XG5cblx0bGV0IGxvZ2luVG9rZW46IHN0cmluZyA9ICcnO1xuXHRjb25zdCBsb2dpbiA9IGFzeW5jICh7bG9naW5Db250aW51ZSA9IGZhbHNlLCByZXR5cGVQYXNzd29yZCA9IGZhbHNlfSA9IHt9KTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghbG9naW5Db250aW51ZSkge1xuXHRcdFx0XHQoe2xvZ2luVG9rZW4sIHRvYXN0aWZ5SW5zdGFuY2V9ID0gYXdhaXQgcXVlcnlMb2dpblRva2VuKHRvYXN0aWZ5SW5zdGFuY2UpKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGFyYW1zOiBDbGllbnRMb2dpblBhcmFtcyA9IHtcblx0XHRcdFx0YWN0aW9uOiAnY2xpZW50bG9naW4nLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRsb2dpbnRva2VuOiBsb2dpblRva2VuLFxuXHRcdFx0XHRsb2dpbnJldHVybnVybDogbG9jYXRpb24uaHJlZixcblx0XHRcdFx0dXNlcm5hbWU6IG5hbWVJbnB1dC5nZXRWYWx1ZSgpLFxuXHRcdFx0XHRwYXNzd29yZDogcHdkSW5wdXQuZ2V0VmFsdWUoKSxcblx0XHRcdH07XG5cdFx0XHRpZiAoa2VlcExvZ2luQ2hlY2tib3guaXNTZWxlY3RlZCgpKSB7XG5cdFx0XHRcdHBhcmFtcy5yZW1lbWJlck1lID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChsb2dpbkNvbnRpbnVlIHx8IHJldHlwZVBhc3N3b3JkKSB7XG5cdFx0XHRcdGF3YWl0IHdpbmRvd01hbmFnZXIuY2xlYXJXaW5kb3dzKCk7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXMubG9naW5yZXR1cm51cmw7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXMudXNlcm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXMucGFzc3dvcmQ7XG5cdFx0XHRcdHBhcmFtcy5sb2dpbmNvbnRpbnVlID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCB2YWx1ZTogc3RyaW5nIHwgbnVsbCA9IGF3YWl0IG9vdWlQcm9tcHQocmV0eXBlUGFzc3dvcmQpO1xuXG5cdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UuaGlkZVRvYXN0KCk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dG9hc3RpZnkoXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0xvZ2luIGNhbmNlbGxlZCcpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdpbmZvJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dm9pZCB3aW5kb3dNYW5hZ2VyLmNsZWFyV2luZG93cygpO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSAnJykge1xuXHRcdFx0XHRcdGlmIChyZXR5cGVQYXNzd29yZCkge1xuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnRW1wdHlQYXNzd29yZCcpLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J3dhcm5pbmcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dm9pZCBsb2dpbih7XG5cdFx0XHRcdFx0XHRcdHJldHlwZVBhc3N3b3JkOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0VtcHR5MkZBJyksXG5cdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IC0xLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnd2FybmluZydcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR2b2lkIGxvZ2luKHtcblx0XHRcdFx0XHRcdFx0bG9naW5Db250aW51ZTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChyZXR5cGVQYXNzd29yZCkge1xuXHRcdFx0XHRcdHBhcmFtcy5wYXNzd29yZCA9IHZhbHVlO1xuXHRcdFx0XHRcdHBhcmFtcy5yZXR5cGUgPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYXJhbXMuT0FUSFRva2VuID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dG9hc3RpZnlJbnN0YW5jZS5oaWRlVG9hc3QoKTtcblx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0xvZ2dpbmcgaW4nKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2luZm8nXG5cdFx0XHQpO1xuXG5cdFx0XHRjb25zdCByZXNwb25zZSA9IChhd2FpdCBhcGkucG9zdChwYXJhbXMpKSBhcyB7XG5cdFx0XHRcdGNsaWVudGxvZ2luOiB7XG5cdFx0XHRcdFx0c3RhdHVzPzogc3RyaW5nO1xuXHRcdFx0XHRcdG1lc3NhZ2Vjb2RlPzogc3RyaW5nO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdFx0dG9hc3RpZnlJbnN0YW5jZS5oaWRlVG9hc3QoKTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlWydjbGllbnRsb2dpbiddPy5zdGF0dXMgPT09ICdQQVNTJykge1xuXHRcdFx0XHR0b2FzdGlmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdMb2dpbiBzdWNjZWVkJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnc3VjY2Vzcydcblx0XHRcdFx0KTtcblx0XHRcdFx0bG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2UgaWYgKHJlc3BvbnNlWydjbGllbnRsb2dpbiddPy5tZXNzYWdlY29kZSkge1xuXHRcdFx0XHRjb25zdCB7bWVzc2FnZWNvZGV9ID0gcmVzcG9uc2VbJ2NsaWVudGxvZ2luJ107XG5cdFx0XHRcdHN3aXRjaCAobWVzc2FnZWNvZGUpIHtcblx0XHRcdFx0XHRjYXNlICdsb2dpbi10aHJvdHRsZWQnOlxuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnVG9vRnJlcXVlbnQnKSxcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCdlcnJvcidcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdvYXRoYXV0aC1hdXRoLXVpJzpcblx0XHRcdFx0XHRcdHZvaWQgbG9naW4oe1xuXHRcdFx0XHRcdFx0XHRsb2dpbkNvbnRpbnVlOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdvYXRoYXV0aC1sb2dpbi1mYWlsZWQnOlxuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnSW52YWxpZCAyRkEgdmVyaWZpY2F0aW9uIGNvZGUnKSxcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCd3YXJuaW5nJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZvaWQgbG9naW4oe1xuXHRcdFx0XHRcdFx0XHRsb2dpbkNvbnRpbnVlOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdyZXNldHBhc3MtdGVtcC1lbWFpbGVkJzpcblx0XHRcdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ05ldyBwYXNzd29yZCBpcyByZXF1aXJlZCcpLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J3dhcm5pbmcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dm9pZCBsb2dpbih7XG5cdFx0XHRcdFx0XHRcdHJldHlwZVBhc3N3b3JkOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd3cm9uZ3Bhc3N3b3JkJzpcblx0XHRcdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0ludmFsaWQgdXNlcnVhbWUgb3IgcGFzc3dvcmQnKSxcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCd3YXJuaW5nJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGF3YWl0IHdpbmRvd01hbmFnZXIuY2xlYXJXaW5kb3dzKCk7XG5cdFx0XHRcdFx0XHRhamF4TG9naW4odG9hc3RpZnlJbnN0YW5jZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dG9hc3RpZnkoXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdVbmV4cGVjdGVkIEFQSSByZXNwb25zZScpLnJlcGxhY2UoJyQxJywgbWVzc2FnZWNvZGUpLFxuXHRcdFx0XHRcdFx0XHRcdGNsb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J2Vycm9yJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZvaWQgcmVkaXJlY3RPcmlnaW5Mb2dpblBhZ2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRzaG93RXJyb3IoZXJyb3IsIHRvYXN0aWZ5SW5zdGFuY2UpO1xuXHRcdFx0dm9pZCByZWRpcmVjdE9yaWdpbkxvZ2luUGFnZSgpO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCBjaGVjayA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCB7XG5cdFx0XHRpc1ZhbGlkLFxuXHRcdFx0aXNBZ3JlZVRvczogbGFzdElzQWdyZWVUb3MsXG5cdFx0XHR0b2FzdGlmeUluc3RhbmNlOiBsYXN0VG9hc3RpZnlJbnN0YW5jZSxcblx0XHR9ID0gYXdhaXQgY2hlY2tWYWxpZChbYWdyZWVUb3NDaGVja2JveCwgbmFtZUlucHV0LCBwd2RJbnB1dF0sIHRvYXN0aWZ5SW5zdGFuY2UpO1xuXG5cdFx0dG9hc3RpZnlJbnN0YW5jZSA9IGxhc3RUb2FzdGlmeUluc3RhbmNlO1xuXG5cdFx0aWYgKGlzVmFsaWQpIHtcblx0XHRcdHZvaWQgbG9naW4oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWpheExvZ2luKHRvYXN0aWZ5SW5zdGFuY2UsIGxhc3RJc0FncmVlVG9zKTtcblx0XHR9XG5cdH07XG5cblx0cHdkSW5wdXQub24oJ2VudGVyJywgKCk6IHZvaWQgPT4ge1xuXHRcdHZvaWQgY2hlY2soKTtcblx0fSk7XG5cdG1lc3NhZ2VEaWFsb2cuZ2V0QWN0aW9uUHJvY2VzcyA9IChhY3Rpb24pOiBPTy51aS5Qcm9jZXNzID0+XG5cdFx0bmV3IE9PLnVpLlByb2Nlc3MoKCk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKGFjdGlvbiA9PT0gJ2xvZ2luJykge1xuXHRcdFx0XHR2b2lkIGNoZWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHRcdFx0XHR2b2lkIHdpbmRvd01hbmFnZXIuY2xlYXJXaW5kb3dzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0d2luZG93TWFuYWdlci5hZGRXaW5kb3dzKFttZXNzYWdlRGlhbG9nXSk7XG5cdHZvaWQgd2luZG93TWFuYWdlci5vcGVuV2luZG93KG1lc3NhZ2VEaWFsb2csIHtcblx0XHRhY3Rpb25zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdGFjdGlvbjogJ2xvZ2luJyxcblx0XHRcdFx0ZmxhZ3M6IFsncHJpbWFyeScsICdwcm9ncmVzc2l2ZSddLFxuXHRcdFx0XHRsYWJlbDogJCg8Yj57Z2V0TWVzc2FnZSgnTG9naW4nKX08L2I+KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGFjdGlvbjogJ2NhbmNlbCcsXG5cdFx0XHRcdGZsYWdzOiBbJ3NhZmUnLCAnY2xvc2UnXSxcblx0XHRcdFx0bGFiZWw6ICQoPGI+e2dldE1lc3NhZ2UoJ0NhbmNlbCcpfTwvYj4pLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdG1lc3NhZ2U6ICQoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm9vLXVpLXdpbmRvdy1mb290XCI+e1skaW5wdXRCb3gsICRmb3Jnb3RQYXNzd29yZCwgJHJlbWVtYmVyTWUsICRhZ3JlZVRvcywgJHRvc0xhYmVsXX08L2Rpdj5cblx0XHQpLFxuXHRcdHRpdGxlOiAkKDxiIGNsYXNzTmFtZT1cIm9vLXVpLXdpbmRvdy1oZWFkXCI+e2dldE1lc3NhZ2UoJ0xvZ2luJyl9PC9iPiksXG5cdFx0c2l6ZTogJ3NtYWxsJyxcblx0fSk7XG5cdHJlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXIoKTtcbn07XG5cbmV4cG9ydCB7YWpheExvZ2lufTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAnZXh0LmdhZGdldC5SZWFjdCc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHtvb3VpQ29uZmlybX0gZnJvbSAnLi9vb3VpQ29uZmlybSc7XG5pbXBvcnQge3RvYXN0aWZ5fSBmcm9tICdleHQuZ2FkZ2V0LlRvYXN0aWZ5JztcbmltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCBjaGVja1ZhbGlkID0gYXN5bmMgKFxuXHRbYWdyZWVUb3NDaGVja2JveCwgbmFtZUlucHV0LCBwd2RJbnB1dF06IFtPTy51aS5DaGVja2JveElucHV0V2lkZ2V0LCBPTy51aS5UZXh0SW5wdXRXaWRnZXQsIE9PLnVpLlRleHRJbnB1dFdpZGdldF0sXG5cdHRvYXN0aWZ5SW5zdGFuY2U6IFRvYXN0aWZ5SW5zdGFuY2Vcbik6IFByb21pc2U8e1xuXHRpc0FncmVlVG9zOiBib29sZWFuO1xuXHRpc1ZhbGlkOiBib29sZWFuO1xuXHR0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlO1xufT4gPT4ge1xuXHRsZXQgaXNBZ3JlZVRvczogYm9vbGVhbiA9IGFncmVlVG9zQ2hlY2tib3guaXNTZWxlY3RlZCgpO1xuXHRjb25zdCBpc0ZpbGw6IGJvb2xlYW4gPSAhW25hbWVJbnB1dC5nZXRWYWx1ZSgpLnRyaW0oKSwgcHdkSW5wdXQuZ2V0VmFsdWUoKS50cmltKCldLmluY2x1ZGVzKCcnKTtcblxuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHRhd2FpdCB3aW5kb3dNYW5hZ2VyLmNsZWFyV2luZG93cygpO1xuXG5cdGlmICghaXNBZ3JlZVRvcykge1xuXHRcdGlzQWdyZWVUb3MgPSBhd2FpdCBvb3VpQ29uZmlybSh7XG5cdFx0XHRtZXNzYWdlOiAkKDxzcGFuIGlubmVySFRNTD17Z2V0TWVzc2FnZSgnRG91YmxlQ2hlY2tBZ3JlZWRPck5vdCcpfSAvPikgYXMgSlF1ZXJ5LFxuXHRcdFx0YWN0aW9uczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQoPGI+e2dldE1lc3NhZ2UoJ0NhbmNlbCcpfTwvYj4pLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2NhbmNlbCcsXG5cdFx0XHRcdFx0ZmxhZ3M6IFsnc2FmZScsICdjbG9zZSddLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQoPGI+e2dldE1lc3NhZ2UoJ0kgYWdyZWUnKX08L2I+KSxcblx0XHRcdFx0XHRhY3Rpb246ICdhY2NlcHQnLFxuXHRcdFx0XHRcdGZsYWdzOiBbJ3ByaW1hcnknLCAncHJvZ3Jlc3NpdmUnXSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzQWdyZWVUb3MpIHtcblx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0FncmVlZE9yTm90JyksXG5cdFx0XHRcdFx0ZHVyYXRpb246IC0xLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW5mbydcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCFpc0ZpbGwpIHtcblx0XHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoXG5cdFx0XHR7XG5cdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0VtcHR5VXNlcm5hbWVPclBhc3N3b3JkJyksXG5cdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdH0sXG5cdFx0XHQnaW5mbydcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgaXNWYWxpZDogYm9vbGVhbiA9IGlzQWdyZWVUb3MgJiYgaXNGaWxsO1xuXG5cdHJldHVybiB7XG5cdFx0aXNBZ3JlZVRvcyxcblx0XHRpc1ZhbGlkLFxuXHRcdHRvYXN0aWZ5SW5zdGFuY2UsXG5cdH07XG59O1xuXG5leHBvcnQge2NoZWNrVmFsaWR9O1xuIiwgImltcG9ydCB7bG9jYWxpemV9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cbmNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0cmV0dXJuIHtcblx0XHQnNi1kaWdpdCBudW1iZXInOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJzYtZGlnaXQgbnVtYmVyJyxcblx0XHRcdGphOiAnNuahgeOBruaVsOWtlycsXG5cdFx0XHQnemgtaGFucyc6ICc25L2N5pWw5a2XJyxcblx0XHRcdCd6aC1oYW50JzogJzbkvY3mlbjlrZcnLFxuXHRcdH0pLFxuXHRcdENhbmNlbDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdDYW5jZWwnLFxuXHRcdFx0amE6ICfjgq3jg6Pjg7Pjgrvjg6snLFxuXHRcdFx0emg6ICflj5bmtognLFxuXHRcdH0pLFxuXHRcdCdFbnRlciBwYXNzd29yZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRW50ZXIgcGFzc3dvcmQnLFxuXHRcdFx0amE6ICfjg5Hjgrnjg6/jg7zjg4knLFxuXHRcdFx0J3poLWhhbnMnOiAn6K+36L6T5YWl5a+G56CBJyxcblx0XHRcdCd6aC1oYW50JzogJ+iri+i8uOWFpeWvhueivCcsXG5cdFx0fSksXG5cdFx0J0VudGVyIDJGQSB2ZXJpZmljYXRpb24gY29kZSc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnMkZBIHZlcmlmaWNhdGlvbiBjb2RlJyxcblx0XHRcdGphOiAnMkZB6KqN6Ki844Kz44O844OJJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ivt+i+k+WFpTJGQemqjOivgeeggScsXG5cdFx0XHQnemgtaGFudCc6ICfoq4vovLjlhaUyRkHpqZforYnnorwnLFxuXHRcdH0pLFxuXHRcdCdGb3Jnb3QgcGFzc3dvcmQ/JzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdGb3Jnb3QgcGFzc3dvcmQ/Jyxcblx0XHRcdGphOiAn44OR44K544Ov44O844OJ44KS44GK5b+Y44KM44Gn44GZ44GL77yfJyxcblx0XHRcdCd6aC1oYW5zJzogJ+W/mOiusOWvhuegge+8nycsXG5cdFx0XHQnemgtaGFudCc6ICflv5joqJjlr4bnorzvvJ8nLFxuXHRcdH0pLFxuXHRcdCdHZXR0aW5nIGxvZ2luIHRva2VuJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdHZXR0aW5nIGxvZ2luIHRva2VuJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44OI44O844Kv44Oz44KS5Y+W5b6X44GX44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ato+WcqOiOt+WPlueZu+W9leS7pOeJjCcsXG5cdFx0XHQnemgtaGFudCc6ICfmraPlnKjnjbLlj5bnmbvlhaXmrIrmnZYnLFxuXHRcdH0pLFxuXHRcdCdoZWxwIGZvciBJIGFncmVlIHdpdGggdGhlIHJlbGV2YW50IHRlcm1zJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdXaGVuIHlvdSBsb2dpbiwgaXQgbWVhbnMgdGhhdCB5b3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCwgZnVsbHkgdW5kZXJzdG9vZCBhbmQgYWdyZWVkIHRvIGNvbXBseSB3aXRoIHRoZSA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6VE9TXCIgdGl0bGU9XCJUZXJtcyBvZiBTZXJ2aWNlXCI+VGVybXMgb2YgU2VydmljZTwvYT4sIDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpQSVBQXCIgdGl0bGU9XCJQZXJzb25hbCBJbmZvcm1hdGlvbiBQcm90ZWN0aW9uIFBvbGljeVwiPlBlcnNvbmFsIEluZm9ybWF0aW9uIFByb3RlY3Rpb24gUG9saWN5PC9hPiBhbmQgPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOkRBR1pDXCIgdGl0bGU9XCJZc0FyY2hpdmVzIEFzc29jaWF0aW9uXCI+WXNBcmNoaXZlcyBBc3NvY2lhdGlvbjwvYT4uJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44KS44GZ44KL44Go44CB44GC44Gq44Gf44Gv5pys44K144Kk44OI44Gu44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlRPU1wiIHRpdGxlPVwi5Yip55So6KaP57SEXCI+5Yip55So6KaP57SEPC9hPuOAj+OAjjxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpQSVBQXCIgdGl0bGU9XCLlgIvkurrmg4XloLHkv53orbfmnaHkvotcIj7lgIvkurrmg4XloLHkv53orbfmnaHkvos8L2E+44CP44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOkdQXCIgdGl0bGU9XCLmoaPmoYjppobnq6DnqItcIj7moaPmoYjppobnq6DnqIs8L2E+44CP44KS5Y2B5YiG44Gr55CG6Kej44GX44CB5ZCM5oSP44GX44Gf44GT44Go44Gr44Gq44KK44G+44GZ44CCJyxcblx0XHRcdCd6aC1oYW5zJzpcblx0XHRcdFx0J+eZu+W9leaXtu+8jOWNs+S7o+ihqOaCqOW3suS7lOe7humYheivu+OAgeWFheWIhuS6huino+W5tuWQjOaEj+mBteWuiOacrOe9keermeeahOOAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpUT1NcIiB0aXRsZT1cIueUqOaIt+WNj+iurlwiPueUqOaIt+WNj+iurjwvYT7jgIvjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6UElQUFwiIHRpdGxlPVwi5Liq5Lq65L+h5oGv5L+d5oqk5p2h5L6LXCI+5Liq5Lq65L+h5oGv5L+d5oqk5p2h5L6LPC9hPuOAi+OAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpHUFwiIHRpdGxlPVwi5qGj5qGI6aaG56ug56iLXCI+5qGj5qGI6aaG56ug56iLPC9hPuOAi+OAgicsXG5cdFx0XHQnemgtaGFudCc6XG5cdFx0XHRcdCfnmbvpjITmmYLvvIzljbPku6Pooajmgqjlt7Lku5TntLDplrHoroDjgIHlhYXliIbkuobop6PkuKblkIzmhI/pgbXlrojmnKzntrLnq5nnmoTjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6VE9TXCIgdGl0bGU9XCLnlKjmiLbljZTorbBcIj7nlKjmiLbljZTorbA8L2E+44CL44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlBJUFBcIiB0aXRsZT1cIuWAi+S6uuS/oeaBr+S/neitt+adoeS+i1wiPuWAi+S6uuS/oeaBr+S/neitt+adoeS+izwvYT7jgIvjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6R1BcIiB0aXRsZT1cIuaho+ahiOmmhueroOeoi1wiPuaho+ahiOmmhueroOeoizwvYT7jgIvjgIInLFxuXHRcdH0pLFxuXHRcdCdJIGFncmVlJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJIGFncmVlJyxcblx0XHRcdGphOiAn5ZCM5oSP44GZ44KLJyxcblx0XHRcdHpoOiAn5oiR5ZCM5oSPJyxcblx0XHR9KSxcblx0XHQnSSBhZ3JlZSB3aXRoIHRoZSByZWxldmFudCB0ZXJtcyc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnSSBhZ3JlZSB3aXRoIHRoZSByZWxldmFudCB0ZXJtcycsXG5cdFx0XHRqYTogJ+mWoumAo+OBmeOCi+imj+e0hOOCkuiqreOBv+OAgeWQjOaEjycsXG5cdFx0XHQnemgtaGFucyc6ICfmiJHlt7LpmIXor7vlubblkIzmhI/nm7jlhbPmnaHmrL4nLFxuXHRcdFx0J3poLWhhbnQnOiAn5oiR5bey6Zay6K6A5Lim5ZCM5oSP55u46Zec5qKd5qy+Jyxcblx0XHR9KSxcblx0XHQnSW52YWxpZCAyRkEgdmVyaWZpY2F0aW9uIGNvZGUnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0ludmFsaWQgMkZBIHZlcmlmaWNhdGlvbiBjb2RlJyxcblx0XHRcdGphOiAnMkZB6KqN6Ki844Kz44O844OJ44GM6ZaT6YGV44Gj44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1oYW5zJzogJzJGQemqjOivgeeggemUmeivrycsXG5cdFx0XHQnemgtaGFudCc6ICcyRkHpqZforYnnorzpjK/oqqQnLFxuXHRcdH0pLFxuXHRcdCdJbnZhbGlkIHVzZXJ1YW1lIG9yIHBhc3N3b3JkJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJbnZhbGlkIHVzZXJ1YW1lIG9yIHBhc3N3b3JkJyxcblx0XHRcdGphOiAn5Yip55So6ICF5ZCN44G+44Gf44Gv44OR44K544Ov44O844OJ44GM6ZaT6YGV44Gj44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1jbic6ICfnlKjmiLflkI3miJblr4bnoIHplJnor68nLFxuXHRcdFx0J3poLWhrJzogJ+eUqOaItuWQjeeoseaIluWvhueivOmMr+iqpCcsXG5cdFx0XHQnemgtdHcnOiAn5L2/55So6ICF5ZCN56ix5oiW5a+G56K86Yyv6KqkJyxcblx0XHR9KSxcblx0XHQnS2VlcCBtZSBsb2dnZWQgaW4nOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0tlZXAgbWUgbG9nZ2VkIGluJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz54q25oWL44KS5L+d5oyBJyxcblx0XHRcdCd6aC1oYW5zJzogJ+iusOS9j+aIkeeahOeZu+W9leeKtuaAgScsXG5cdFx0XHQnemgtaGFudCc6ICfoqJjkvY/miJHnmoTnmbvlhaXni4DmhYsnLFxuXHRcdH0pLFxuXHRcdCdMb2dnaW5nIGluJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdMb2dnaW5nIGluJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44GX44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ato+WcqOeZu+W9lScsXG5cdFx0XHQnemgtaGFudCc6ICfmraPlnKjnmbvlhaUnLFxuXHRcdH0pLFxuXHRcdExvZ2luOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0xvZ2luJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44OzJyxcblx0XHRcdCd6aC1oYW5zJzogJ+eZu+W9lScsXG5cdFx0XHQnemgtaGFudCc6ICfnmbvlhaUnLFxuXHRcdH0pLFxuXHRcdCdMb2dpbiBjYW5jZWxsZWQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0xvZ2luIGNhbmNlbGxlZCcsXG5cdFx0XHRqYTogJ+ODreOCsOOCpOODs+OCreODo+ODs+OCu+ODqycsXG5cdFx0XHQnemgtaGFucyc6ICfnmbvlvZXlj5bmtognLFxuXHRcdFx0J3poLWhhbnQnOiAn55m75YWl5Y+W5raIJyxcblx0XHR9KSxcblx0XHQnTG9naW4gc3VjY2VlZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTG9naW4gc3VjY2VlZCcsXG5cdFx0XHRqYTogJ+ODreOCsOOCpOODs+OBq+aIkOWKn+OBl+OBvuOBl+OBnycsXG5cdFx0XHQnemgtaGFucyc6ICfnmbvlvZXmiJDlip8nLFxuXHRcdFx0J3poLWhhbnQnOiAn55m75YWl5oiQ5YqfJyxcblx0XHR9KSxcblx0XHQnTG9naW4gdG9rZW4gZ2V0dGVkJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdMb2dpbiB0b2tlbiBnZXR0ZWQnLFxuXHRcdFx0amE6ICfjg63jgrDjgqTjg7Pjg4jjg7zjgq/jg7Pjga7lj5blvpfjgavmiJDlip/jgZfjgb7jgZfjgZ8nLFxuXHRcdFx0J3poLWhhbnMnOiAn6I635Y+W55m75b2V5Luk54mM5oiQ5YqfJyxcblx0XHRcdCd6aC1oYW50JzogJ+eNsuWPlueZu+WFpeasiuadluaIkOWKnycsXG5cdFx0fSksXG5cdFx0J05ldyBwYXNzd29yZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTmV3IHBhc3N3b3JkJyxcblx0XHRcdGphOiAn5paw44GX44GE44OR44K544Ov44O844OJJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aWsOWvhueggScsXG5cdFx0XHQnemgtaGFudCc6ICfmlrDlr4bnorwnLFxuXHRcdH0pLFxuXHRcdCdOZXcgcGFzc3dvcmQgaXMgcmVxdWlyZWQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ05ldyBwYXNzd29yZCBpcyByZXF1aXJlZCcsXG5cdFx0XHRqYTogJ+aWsOOBl+OBhOODkeOCueODr+ODvOODieOCkuioreWumuOBl+OBpuOBj+OBoOOBleOBhCcsXG5cdFx0XHQnemgtaGFucyc6ICfpnIDopoHorr7nva7mlrDlr4bnoIEnLFxuXHRcdFx0J3poLWhhbnQnOiAn6ZyA6KaB6Kit572u5paw5a+G56K8Jyxcblx0XHR9KSxcblx0XHRQYXNzd29yZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdQYXNzd29yZCcsXG5cdFx0XHRqYTogJ+ODkeOCueODr+ODvOODiScsXG5cdFx0XHQnemgtaGFucyc6ICflr4bnoIEnLFxuXHRcdFx0J3poLWhhbnQnOiAn5a+G56K8Jyxcblx0XHR9KSxcblx0XHQnUmVzZXQgcGFzc3dvcmQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1Jlc2V0IHBhc3N3b3JkJyxcblx0XHRcdGphOiAn44OR44K544Ov44O844OJ44KS44Oq44K744OD44OIJyxcblx0XHRcdCd6aC1oYW5zJzogJ+mHjee9ruWvhueggScsXG5cdFx0XHQnemgtaGFudCc6ICfph43mlrDoqK3lrprlr4bnorwnLFxuXHRcdH0pLFxuXHRcdFVzZXJuYW1lOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1VzZXJuYW1lJyxcblx0XHRcdGphOiAn5Yip55So6ICF5ZCNJyxcblx0XHRcdCd6aC1jbic6ICfnlKjmiLflkI0nLFxuXHRcdFx0J3poLWhrJzogJ+eUqOaItuWQjeeosScsXG5cdFx0XHQnemgtdHcnOiAn5L2/55So6ICF5ZCN56ixJyxcblx0XHR9KSxcblx0XHRBZ3JlZWRPck5vdDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdQbGVhc2UgcmVhZCB0aGUgcmVsZXZhbnQgdGVybXMuIElmIHlvdSBhZ3JlZSwgY2hlY2sgdGhlIGNoZWNrYm94IHRvIGNvbmZpcm0nLFxuXHRcdFx0amE6ICfplqLpgKPjgZnjgovopo/ntITjgpLjgYroqq3jgb/jgYTjgZ/jgaDjgY3jgIHlkIzmhI/jgZXjgozjgovloLTlkIjjga/jgIHjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjgavjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgabnorroqo3jgZfjgabjgY/jgaDjgZXjgYQnLFxuXHRcdFx0J3poLWhhbnMnOiAn6K+36ZiF6K+755u45YWz5p2h5qy+44CC6Iul5ZCM5oSP77yM5Yu+6YCJ5aSN6YCJ5qGG5Lul56Gu6K6kJyxcblx0XHRcdCd6aC1oYW50JzogJ+iri+mWsuiugOebuOmXnOaineasvuOAguiLpeWQjOaEj++8jOWLvumBuOikh+mBuOahhuS7peeiuuiqjScsXG5cdFx0fSksXG5cdFx0RG91YmxlQ2hlY2tBZ3JlZWRPck5vdDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdZb3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCwgZnVsbHkgdW5kZXJzdG9vZCBhbmQgYWdyZWVkIHRvIGNvbXBseSB3aXRoIG91ciA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6VE9TXCIgdGl0bGU9XCJUZXJtcyBvZiBTZXJ2aWNlXCI+VGVybXMgb2YgU2VydmljZTwvYT4sIDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpQSVBQXCIgdGl0bGU9XCJQZXJzb25hbCBJbmZvcm1hdGlvbiBQcm90ZWN0aW9uIFBvbGljeVwiPlBlcnNvbmFsIEluZm9ybWF0aW9uIFByb3RlY3Rpb24gUG9saWN5PC9hPiBhbmQgPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOkRBR1pDXCIgdGl0bGU9XCJZc0FyY2hpdmVzIEFzc29jaWF0aW9uXCI+WXNBcmNoaXZlcyBBc3NvY2lhdGlvbjwvYT4uJyxcblx0XHRcdGphOiAn44GC44Gq44Gf44Gv5pys44K144Kk44OI44Gu44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlRPU1wiIHRpdGxlPVwi5Yip55So6KaP57SEXCI+5Yip55So6KaP57SEPC9hPuOAj+OAjjxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpQSVBQXCIgdGl0bGU9XCLlgIvkurrmg4XloLHkv53orbfmnaHkvotcIj7lgIvkurrmg4XloLHkv53orbfmnaHkvos8L2E+44CP44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOkdQXCIgdGl0bGU9XCLmoaPmoYjppobnq6DnqItcIj7moaPmoYjppobnq6DnqIs8L2E+44CP44KS5Y2B5YiG44Gr55CG6Kej44GX44CB5ZCM5oSP44GX44Gf44GT44Go44Gr44Gq44KK44G+44GZ44CCJyxcblx0XHRcdCd6aC1oYW5zJzpcblx0XHRcdFx0J+aCqOW3suS7lOe7humYheivu+OAgeWFheWIhuS6huino+W5tuWQjOaEj+mBteWuiOacrOe9keermeeahOOAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpUT1NcIiB0aXRsZT1cIueUqOaIt+WNj+iurlwiPueUqOaIt+WNj+iurjwvYT7jgIvjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6UElQUFwiIHRpdGxlPVwi5Liq5Lq65L+h5oGv5L+d5oqk5p2h5L6LXCI+5Liq5Lq65L+h5oGv5L+d5oqk5p2h5L6LPC9hPuOAi+OAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpHUFwiIHRpdGxlPVwi5qGj5qGI6aaG56ug56iLXCI+5qGj5qGI6aaG56ug56iLPC9hPuOAi+OAgicsXG5cdFx0XHQnemgtaGFudCc6XG5cdFx0XHRcdCfmgqjlt7Lku5TntLDplrHoroDjgIHlhYXliIbkuobop6PkuKblkIzmhI/pgbXlrojmnKzntrLnq5nnmoTjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6VE9TXCIgdGl0bGU9XCLnlKjmiLbljZTorbBcIj7nlKjmiLbljZTorbA8L2E+44CL44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlBJUFBcIiB0aXRsZT1cIuWAi+S6uuS/oeaBr+S/neitt+adoeS+i1wiPuWAi+S6uuS/oeaBr+S/neitt+adoeS+izwvYT7jgIvjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6R1BcIiB0aXRsZT1cIuaho+ahiOmmhueroOeoi1wiPuaho+ahiOmmhueroOeoizwvYT7jgIvjgIInLFxuXHRcdH0pLFxuXHRcdEVtcHR5MkZBOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1RoZSAyRkEgdmVyaWZpY2F0aW9uIGNvZGUgY2Fubm90IGJlIGVtcHR5Jyxcblx0XHRcdGphOiAnMkZB6KqN6Ki844Kz44O844OJ44GM5YWl5Yqb44GV44KM44Gm44GE44G+44Gb44KTJyxcblx0XHRcdCd6aC1oYW5zJzogJzJGQemqjOivgeeggeS4jeiDveS4uuepuicsXG5cdFx0XHQnemgtaGFudCc6ICcyRkHpqZforYnnorzkuI3og73niLLnqbonLFxuXHRcdH0pLFxuXHRcdEVtcHR5UGFzc3dvcmQ6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHBhc3N3b3JkIGNhbm5vdCBiZSBlbXB0eScsXG5cdFx0XHRqYTogJ+ODkeOCueODr+ODvOODieOBjOWFpeWKm+OBleOCjOOBpuOBhOOBvuOBm+OCkycsXG5cdFx0XHQnemgtaGFucyc6ICflr4bnoIHkuI3og73kuLrnqbonLFxuXHRcdFx0J3poLWhhbnQnOiAn5a+G56K85LiN6IO954iy56m6Jyxcblx0XHR9KSxcblx0XHRFbXB0eVVzZXJuYW1lT3JQYXNzd29yZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdUaGUgdXNlcm5hbWUgb3IgcGFzc3dvcmQgY2Fubm90IGJlIGVtcHR5Jyxcblx0XHRcdGphOiAn5Yip55So6ICF5ZCN44G+44Gf44Gv44OR44K544Ov44O844OJ44GM5YWl5Yqb44GV44KM44Gm44GE44G+44Gb44KTJyxcblx0XHRcdCd6aC1jbic6ICfnlKjmiLflkI3miJblr4bnoIHkuI3og73kuLrnqbonLFxuXHRcdFx0J3poLWhrJzogJ+eUqOaItuWQjeeoseaIluWvhueivOS4jeiDveeIsuepuicsXG5cdFx0XHQnemgtdHcnOiAn5L2/55So6ICF5ZCN56ix5oiW5a+G56K85LiN6IO954iy56m6Jyxcblx0XHR9KSxcblx0XHQnTmV0d29yayBlcnJvcic6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTmV0d29yayBlcnJvci4gUmVkaXJlY3RpbmcuLi4nLFxuXHRcdFx0amE6ICfjg43jg4Pjg4jjg6/jg7zjgq/jgqjjg6njg7zjgIHjg6rjg4DjgqTjg6zjgq/jg4jkuK0uLi4nLFxuXHRcdFx0J3poLWhhbnMnOiAn572R57uc5byC5bi444CC6YeN5a6a5ZCR5Lit4oCm4oCmJyxcblx0XHRcdCd6aC1oYW50JzogJ+e2sui3r+eVsOW4uOOAgumHjeaWsOWwjuWQkeS4reKApuKApicsXG5cdFx0fSksXG5cdFx0U2VsZWN0ZWRPck5vdDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJZiBzZWxlY3RlZCwgdGhlIGxvZ2luIHN0YXR1cyB3aWxsIGJlIGtlcHQgZm9yIDYgbW9udGhzLiBJZiBub3Qgc2VsZWN0ZWQsIGl0IHdpbGwgYmUga2VwdCBmb3IgMSBtb250aC4nLFxuXHRcdFx0amE6ICfjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgovjgajjg63jgrDjgqTjg7PnirbmhYvjgYw244O25pyI6ZaT5L+d5oyB44GV44KM44CB5YWl44KM44Gq44GE5aC05ZCI44GvMeODtuaciOmWk+S/neaMgeOBleOCjOOBvuOBmeOAgicsXG5cdFx0XHQnemgtaGFucyc6ICfli77pgInliJnkv53mjIHnmbvlvZXnirbmgIE25Liq5pyI77yM5LiN5Yu+6YCJ5YiZ5L+d5oyBMeS4quaciOOAgicsXG5cdFx0XHQnemgtaGFudCc6ICfli77pgbjliJnkv53mjIHnmbvlhaXni4DmhYs25YCL5pyI77yM5LiN5Yu+6YG45YmH5L+d5oyBMeWAi+aciOOAgicsXG5cdFx0fSksXG5cdFx0VG9vRnJlcXVlbnQ6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHVzZXIgbG9naW4gaXMgdG9vIGZyZXF1ZW50LCBwbGVhc2UgdHJ5IGFnYWluIGluIGZpdmUgbWludXRlcycsXG5cdFx0XHRqYTogJ+WIqeeUqOiAheOBjOmgu+e5geOBmeOBjuOCi+OBn+OCgeOAgTXliIblvozjgavlho3oqabooYzjgZfjgabjgY/jgaDjgZXjgYQnLFxuXHRcdFx0J3poLWNuJzogJ+eUqOaIt+eZu+W9lei/h+S6jumikee5ge+8jOivt+S6lOWIhumSn+WQjuWGjeivlScsXG5cdFx0XHQnemgtaGsnOiAn55So5oi255m75YWl6YGO5pa86aC757mB77yM6KuL5LqU5YiG6ZCY5b6M5YaN6KmmJyxcblx0XHRcdCd6aC10dyc6ICfkvb/nlKjogIXnmbvlhaXov4fkuo7popHnuYHvvIzor7fkupTliIbpkp/lkI7lho3or5UnLFxuXHRcdH0pLFxuXHRcdCdVbmV4cGVjdGVkIEFQSSByZXNwb25zZSc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVW5leHBlY3RlZCBBUEkgcmVzcG9uc2U6ICQxLiBSZWRpcmVjdGluZy4uLicsXG5cdFx0XHRqYTogJ+S6iOacn+OBm+OBrEFQSeOBruW/nOetlO+8miQx44CB44Oq44OA44Kk44Os44Kv44OI5LitLi4uJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aEj+WklueahEFQSeWTjeW6lO+8miQx44CC6YeN5a6a5ZCR5Lit4oCm4oCmJyxcblx0XHRcdCd6aC1oYW50JzogJ+aEj+WklueahEFQSemfv+aHie+8miQx44CC6YeN5paw5bCO5ZCR5Lit4oCm4oCmJyxcblx0XHR9KSxcblx0fTtcbn07XG5jb25zdCBpMThuTWVzc2FnZXMgPSBnZXRJMThuTWVzc2FnZXMoKTtcblxuY29uc3QgZ2V0TWVzc2FnZTogR2V0TWVzc2FnZXM8dHlwZW9mIGkxOG5NZXNzYWdlcz4gPSAoa2V5KSA9PiB7XG5cdHJldHVybiBpMThuTWVzc2FnZXNba2V5XSB8fCBrZXk7XG59O1xuXG5leHBvcnQge2dldE1lc3NhZ2V9O1xuIiwgImNvbnN0IGluaXRXaW5kb3dNYW5hZ2VyID0gKCk6IE9PLnVpLldpbmRvd01hbmFnZXIgPT4ge1xuXHRyZXR1cm4gbmV3IE9PLnVpLldpbmRvd01hbmFnZXIoKTtcbn07XG5cbmNvbnN0IHdpbmRvd01hbmFnZXI6IE9PLnVpLldpbmRvd01hbmFnZXIgPSBpbml0V2luZG93TWFuYWdlcigpO1xuXG5leHBvcnQge3dpbmRvd01hbmFnZXJ9O1xuIiwgImltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCBvb3VpQ29uZmlybSA9IGFzeW5jIChvcHRpb25zOiBPTy51aS5NZXNzYWdlRGlhbG9nLlNldHVwRGF0YU1hcCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuXHRjb25zdCBtZXNzYWdlRGlhbG9nOiBPTy51aS5NZXNzYWdlRGlhbG9nID0gbmV3IE9PLnVpLk1lc3NhZ2VEaWFsb2coKTtcblx0d2luZG93TWFuYWdlci5hZGRXaW5kb3dzKFttZXNzYWdlRGlhbG9nXSk7XG5cblx0Y29uc3QgaW5zdGFuY2U6IE9PLnVpLldpbmRvd0luc3RhbmNlID0gd2luZG93TWFuYWdlci5vcGVuV2luZG93KG1lc3NhZ2VEaWFsb2csIG9wdGlvbnMpO1xuXG5cdGNvbnN0IGRhdGE6IHZvaWQgPSBhd2FpdCBpbnN0YW5jZS5jbG9zZWQ7XG5cdGNvbnN0IF9kYXRhID0gZGF0YSBhcyB7YWN0aW9uOiBzdHJpbmd9IHwgdm9pZDtcblxuXHRyZXR1cm4gISEoX2RhdGE/LmFjdGlvbiA9PT0gJ2FjY2VwdCcpO1xufTtcblxuZXhwb3J0IHtvb3VpQ29uZmlybX07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuLi9pMThuJztcblxuY29uc3QgZ2VuZXJhdGVFbGVtZW50cyA9IChpc0FncmVlVG9zOiBib29sZWFuKSA9PiB7XG5cdGNvbnN0IG1lc3NhZ2VEaWFsb2c6IE9PLnVpLk1lc3NhZ2VEaWFsb2cgPSBuZXcgT08udWkuTWVzc2FnZURpYWxvZygpO1xuXG5cdGNvbnN0IG5hbWVJbnB1dDogT08udWkuVGV4dElucHV0V2lkZ2V0ID0gbmV3IE9PLnVpLlRleHRJbnB1dFdpZGdldCh7XG5cdFx0aWNvbjogJ3VzZXJBdmF0YXInLFxuXHRcdHBsYWNlaG9sZGVyOiBnZXRNZXNzYWdlKCdVc2VybmFtZScpLFxuXHRcdHZhbGlkYXRlOiAnbm9uLWVtcHR5Jyxcblx0fSk7XG5cblx0Y29uc3QgcHdkSW5wdXQ6IE9PLnVpLlRleHRJbnB1dFdpZGdldCA9IG5ldyBPTy51aS5UZXh0SW5wdXRXaWRnZXQoe1xuXHRcdGljb246ICdrZXknLFxuXHRcdHBsYWNlaG9sZGVyOiBnZXRNZXNzYWdlKCdQYXNzd29yZCcpLFxuXHRcdHR5cGU6ICdwYXNzd29yZCcsXG5cdFx0dmFsaWRhdGU6ICdub24tZW1wdHknLFxuXHR9KTtcblxuXHRjb25zdCBhZ3JlZVRvc0NoZWNrYm94OiBPTy51aS5DaGVja2JveElucHV0V2lkZ2V0ID0gbmV3IE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQoe1xuXHRcdHNlbGVjdGVkOiBpc0FncmVlVG9zLFxuXHR9KTtcblx0Y29uc3QgYWdyZWVUb3NMYXlvdXQ6IE9PLnVpLkZpZWxkTGF5b3V0PE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQ+ID0gbmV3IE9PLnVpLkZpZWxkTGF5b3V0KGFncmVlVG9zQ2hlY2tib3gsIHtcblx0XHRhbGlnbjogJ2lubGluZScsXG5cdFx0bGFiZWw6IGdldE1lc3NhZ2UoJ0kgYWdyZWUgd2l0aCB0aGUgcmVsZXZhbnQgdGVybXMnKSxcblx0fSk7XG5cblx0Y29uc3Qga2VlcExvZ2luQ2hlY2tib3g6IE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQgPSBuZXcgT08udWkuQ2hlY2tib3hJbnB1dFdpZGdldCgpO1xuXHRjb25zdCBrZWVwTG9naW5MYXlvdXQ6IE9PLnVpLkZpZWxkTGF5b3V0PE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQ+ID0gbmV3IE9PLnVpLkZpZWxkTGF5b3V0KGtlZXBMb2dpbkNoZWNrYm94LCB7XG5cdFx0YWxpZ246ICdpbmxpbmUnLFxuXHRcdGhlbHA6IGdldE1lc3NhZ2UoJ1NlbGVjdGVkT3JOb3QnKSxcblx0XHRsYWJlbDogZ2V0TWVzc2FnZSgnS2VlcCBtZSBsb2dnZWQgaW4nKSxcblx0fSk7XG5cblx0Y29uc3QgbGFiZWwgPSAoXG5cdFx0PGxhYmVsXG5cdFx0XHRjbGFzc05hbWU9e1snb28tdWktbGFiZWxXaWRnZXQnLCAnb28tdWktbGFiZWxFbGVtZW50LWxhYmVsJ119XG5cdFx0XHRzdHlsZT17e2ZvbnRTaXplOiAnOTAlJywgdGV4dEFsaWduOiAnanVzdGlmeSd9fVxuXHRcdC8+XG5cdCk7XG5cdGNvbnN0ICRsYWJlbCA9ICQobGFiZWwpIGFzIEpRdWVyeTtcblxuXHRjb25zdCAkYWdyZWVUb3M6IEpRdWVyeSA9ICRsYWJlbC5jbG9uZSgpLmFwcGVuZChhZ3JlZVRvc0xheW91dC4kZWxlbWVudCk7XG5cdGNvbnN0ICRmb3Jnb3RQYXNzd29yZDogSlF1ZXJ5ID0gJGxhYmVsXG5cdFx0LmNsb25lKClcblx0XHQuY3NzKCdmbG9hdCcsICdyaWdodCcpXG5cdFx0LmFwcGVuZChcblx0XHRcdDxhIGhyZWY9e213LnV0aWwuZ2V0VXJsKCdTcGVjaWFsOlBhc3N3b3JkUmVzZXQnKX0gdGl0bGU9e2dldE1lc3NhZ2UoJ1Jlc2V0IHBhc3N3b3JkJyl9PlxuXHRcdFx0XHR7Z2V0TWVzc2FnZSgnRm9yZ290IHBhc3N3b3JkPycpfVxuXHRcdFx0PC9hPlxuXHRcdCk7XG5cdGNvbnN0ICRpbnB1dEJveDogSlF1ZXJ5ID0gJGxhYmVsXG5cdFx0LmNsb25lKClcblx0XHQuY3NzKHtcblx0XHRcdGRpc3BsYXk6ICdibG9jaycsXG5cdFx0XHQnZm9udC1zaXplJzogJ2luaGVyaXQnLFxuXHRcdFx0cGFkZGluZzogJzZweCAwJyxcblx0XHR9KVxuXHRcdC5hcHBlbmQobmFtZUlucHV0LiRlbGVtZW50LmNzcygnbWFyZ2luLWJvdHRvbScsICc2cHgnKSwgcHdkSW5wdXQuJGVsZW1lbnQpO1xuXHRjb25zdCAkdG9zTGFiZWw6IEpRdWVyeSA9ICRsYWJlbC5jbG9uZSgpLmh0bWwoZ2V0TWVzc2FnZSgnaGVscCBmb3IgSSBhZ3JlZSB3aXRoIHRoZSByZWxldmFudCB0ZXJtcycpKTtcblx0Y29uc3QgJHJlbWVtYmVyTWU6IEpRdWVyeSA9ICRsYWJlbC5jbG9uZSgpLmFwcGVuZChrZWVwTG9naW5MYXlvdXQuJGVsZW1lbnQuY3NzKCdtYXJnaW4tdG9wJywgJzZweCcpKTtcblxuXHRyZXR1cm4ge1xuXHRcdCRhZ3JlZVRvcyxcblx0XHQkZm9yZ290UGFzc3dvcmQsXG5cdFx0JGlucHV0Qm94LFxuXHRcdCRyZW1lbWJlck1lLFxuXHRcdCR0b3NMYWJlbCxcblx0XHRhZ3JlZVRvc0NoZWNrYm94LFxuXHRcdGtlZXBMb2dpbkNoZWNrYm94LFxuXHRcdG1lc3NhZ2VEaWFsb2csXG5cdFx0bmFtZUlucHV0LFxuXHRcdHB3ZElucHV0LFxuXHR9O1xufTtcblxuZXhwb3J0IHtnZW5lcmF0ZUVsZW1lbnRzfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAnZXh0LmdhZGdldC5SZWFjdCc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHtyZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyfSBmcm9tICcuL3JlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXInO1xuaW1wb3J0IHt3aW5kb3dNYW5hZ2VyfSBmcm9tICcuLi9pbml0V2luZG93TWFuYWdlcic7XG5cbmNvbnN0IG9vdWlQcm9tcHQgPSBhc3luYyAocmV0eXBlUGFzc3dvcmQ6IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcblx0Y29uc3QgY29kZURpYWxvZzogT08udWkuTWVzc2FnZURpYWxvZyA9IG5ldyBPTy51aS5NZXNzYWdlRGlhbG9nKCk7XG5cdGNvbnN0IGNvZGVJbnB1dDogT08udWkuVGV4dElucHV0V2lkZ2V0ID0gbmV3IE9PLnVpLlRleHRJbnB1dFdpZGdldCh7XG5cdFx0aWNvbjogJ2tleScsXG5cdFx0cGxhY2Vob2xkZXI6IHJldHlwZVBhc3N3b3JkID8gZ2V0TWVzc2FnZSgnTmV3IHBhc3N3b3JkJykgOiBnZXRNZXNzYWdlKCc2LWRpZ2l0IG51bWJlcicpLFxuXHRcdHZhbGlkYXRlOiAnaW50ZWdlcicsXG5cdH0pO1xuXG5cdGNvbnN0IGNvZGVMYXlvdXQ6IE9PLnVpLkZpZWxkTGF5b3V0PE9PLnVpLlRleHRJbnB1dFdpZGdldD4gPSBuZXcgT08udWkuRmllbGRMYXlvdXQoY29kZUlucHV0LCB7XG5cdFx0YWxpZ246ICd0b3AnLFxuXHRcdGxhYmVsOiAkKFxuXHRcdFx0PGIgY2xhc3NOYW1lPXtbJ29vLXVpLW1lc3NhZ2VEaWFsb2ctdGl0bGUnLCAnb28tdWktd2luZG93LWhlYWQnXX0+XG5cdFx0XHRcdHtyZXR5cGVQYXNzd29yZCA/IGdldE1lc3NhZ2UoJ0VudGVyIHBhc3N3b3JkJykgOiBnZXRNZXNzYWdlKCdFbnRlciAyRkEgdmVyaWZpY2F0aW9uIGNvZGUnKX1cblx0XHRcdDwvYj5cblx0XHQpLFxuXHR9KTtcblxuXHR3aW5kb3dNYW5hZ2VyLmFkZFdpbmRvd3MoW2NvZGVEaWFsb2ddKTtcblxuXHRjb25zdCBpbnN0YW5jZTogT08udWkuV2luZG93SW5zdGFuY2UgPSB3aW5kb3dNYW5hZ2VyLm9wZW5XaW5kb3coY29kZURpYWxvZywge1xuXHRcdG1lc3NhZ2U6IGNvZGVMYXlvdXQuJGVsZW1lbnQsXG5cdH0pO1xuXG5cdHJlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXIoKTtcblxuXHR2b2lkIGluc3RhbmNlLm9wZW5lZC50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRjb2RlSW5wdXQub24oJ2VudGVyJywgKCk6IHZvaWQgPT4ge1xuXHRcdFx0KHdpbmRvd01hbmFnZXIuZ2V0Q3VycmVudFdpbmRvdygpIGFzIE9PLnVpLldpbmRvdykuY2xvc2Uoe1xuXHRcdFx0XHRhY3Rpb246ICdhY2NlcHQnLFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0Y29kZUlucHV0LmZvY3VzKCk7XG5cdH0pO1xuXG5cdGNvbnN0IGRhdGE6IHZvaWQgPSBhd2FpdCBpbnN0YW5jZS5jbG9zZWQ7XG5cdGNvbnN0IF9kYXRhID0gZGF0YSBhcyB7YWN0aW9uOiBzdHJpbmd9IHwgdm9pZDtcblxuXHRyZXR1cm4gX2RhdGE/LmFjdGlvbiA9PT0gJ2FjY2VwdCcgPyBjb2RlSW5wdXQuZ2V0VmFsdWUoKSA6IG51bGw7XG59O1xuXG5leHBvcnQge29vdWlQcm9tcHR9O1xuIiwgImltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCByZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuXHQkKHdpbmRvdykub2ZmKHtcblx0XHQnb3JpZW50YXRpb25jaGFuZ2UgcmVzaXplJzogKHdpbmRvd01hbmFnZXIgYXMgdW5rbm93biBhcyB7b25XaW5kb3dSZXNpemVIYW5kbGVyOiAoKSA9PiB2b2lkfSlcblx0XHRcdC5vbldpbmRvd1Jlc2l6ZUhhbmRsZXIsXG5cdH0pO1xufTtcblxuZXhwb3J0IHtyZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyfTtcbiIsICJpbXBvcnQge2FwaX0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQge3RvYXN0aWZ5fSBmcm9tICdleHQuZ2FkZ2V0LlRvYXN0aWZ5JztcblxuY29uc3QgcXVlcnlMb2dpblRva2VuID0gYXN5bmMgKFxuXHR0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlXG4pOiBQcm9taXNlPHtcblx0bG9naW5Ub2tlbjogc3RyaW5nO1xuXHR0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlO1xufT4gPT4ge1xuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoe1xuXHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0dldHRpbmcgbG9naW4gdG9rZW4nKSxcblx0fSk7XG5cblx0Y29uc3QgbG9naW5Ub2tlbjogc3RyaW5nID0gYXdhaXQgYXBpLmdldFRva2VuKCdsb2dpbicpO1xuXG5cdHRvYXN0aWZ5SW5zdGFuY2UuaGlkZVRvYXN0KCk7XG5cdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeSh7XG5cdFx0dGV4dDogZ2V0TWVzc2FnZSgnTG9naW4gdG9rZW4gZ2V0dGVkJyksXG5cdFx0ZHVyYXRpb246IC0xLFxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGxvZ2luVG9rZW4sXG5cdFx0dG9hc3RpZnlJbnN0YW5jZSxcblx0fTtcbn07XG5cbmV4cG9ydCB7cXVlcnlMb2dpblRva2VufTtcbiIsICJpbXBvcnQge2RlbGF5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuaW1wb3J0IHt3aW5kb3dNYW5hZ2VyfSBmcm9tICcuLi9pbml0V2luZG93TWFuYWdlcic7XG5cbmNvbnN0IHJlZGlyZWN0T3JpZ2luTG9naW5QYWdlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRhd2FpdCB3aW5kb3dNYW5hZ2VyLmNsZWFyV2luZG93cygpO1xuXHRhd2FpdCBkZWxheSgzICogMTAwMCk7XG5cdGxvY2F0aW9uLmhyZWYgPSBtdy51dGlsLmdldFVybCgnU3BlY2lhbDpVc2VybG9naW4nKTtcbn07XG5cbmV4cG9ydCB7cmVkaXJlY3RPcmlnaW5Mb2dpblBhZ2V9O1xuIiwgImltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQge3RvYXN0aWZ5fSBmcm9tICdleHQuZ2FkZ2V0LlRvYXN0aWZ5JztcblxuY29uc3Qgc2hvd0Vycm9yID0gKGVycm9yOiB1bmtub3duLCB0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlKTogdm9pZCA9PiB7XG5cdGNvbnNvbGUuZXJyb3IoJ1tBamF4TG9naW5dIEFqYXggZXJyb3I6JywgZXJyb3IpO1xuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHR0b2FzdGlmeShcblx0XHR7XG5cdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdOZXR3b3JrIGVycm9yJyksXG5cdFx0XHRjbG9zZTogdHJ1ZSxcblx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHR9LFxuXHRcdCdlcnJvcidcblx0KTtcbn07XG5cbmV4cG9ydCB7c2hvd0Vycm9yfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNDLElBQUFBLHVCQUF3QjtBQUN4QixJQUFBQyxVQUFXOztBQ0RaLElBQUFDLHNCQUEyQ0MsUUFBQSxpQkFBQTs7QUNEM0MsSUFBQUMsb0JBQWtDRCxRQUFBLGdDQUFBO0FBRWxDLElBQU1FLGNBQWNBLENBQ25CQyxVQUNBQyxrQkFDVTtBQUNWRCxXQUFTRSxHQUFHLFVBQUEsR0FBU0osa0JBQUFLLHFCQUFvQkYsYUFBYSxDQUFDO0FBQ3ZERCxXQUFTRSxHQUFHLFdBQVdELGFBQWE7QUFDckM7O0FDUEEsSUFBQUcscUJBQXdCUCxRQUFBLGlCQUFBO0FBVXhCLElBQU1RLE9BQUEsR0FBY0QsbUJBQUFFLFdBQUEsYUFBQUMsT0FBK0JaLE9BQU8sQ0FBRTs7QUNWNUQsSUFBQWEsc0JBQWtCQyxRQUFBWixRQUFBLGtCQUFBLEdBQUEsQ0FBQTs7QUNEbEIsSUFBQWEscUJBQWtCRCxRQUFBWixRQUFBLGtCQUFBLEdBQUEsQ0FBQTs7QUNBbEIsSUFBQWMscUJBQXVCZCxRQUFBLGlCQUFBO0FBRXZCLElBQU1lLGtCQUFrQkEsTUFBTTtBQUM3QixTQUFPO0lBQ04sbUJBQUEsR0FBa0JELG1CQUFBRSxVQUFTO01BQzFCQyxJQUFJO01BQ0pDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDREMsU0FBQSxHQUFRTCxtQkFBQUUsVUFBUztNQUNoQkMsSUFBSTtNQUNKQyxJQUFJO01BQ0pFLElBQUk7SUFDTCxDQUFD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O0lBQzlDOUgsV0FBV0EsTUFBTTtJQUFDO0VBQ25CO0FBRUEsUUFBTWhFLGdCQUFpQitMLFdBQXlEO0FBQy9FLFFBQUksRUFBQSxHQUFDcE0sb0JBQUFxTSxxQkFBb0JELEtBQUssR0FBRztBQUNoQztJQUNEO0FBRUFBLFVBQU1FLGVBQWU7QUFDckI1QyxjQUFVeUMsb0JBQW9CO0VBQy9CO0FBQ0FoTSxjQUFZNEwsZUFBZTFMLGFBQWE7QUFDekMsQ0FBQzsiLAogICJuYW1lcyI6IFsibG9naW5FbGVtZW50U2VsZWN0b3IiLCAidmVyc2lvbiIsICJpbXBvcnRfZXh0X2dhZGdldDEzIiwgInJlcXVpcmUiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiYWRkTGlzdGVuZXIiLCAiJGVsZW1lbnQiLCAiZXZlbnRMaXN0ZW5lciIsICJvbiIsICJmaWx0ZXJBbHRlcmVkQ2xpY2tzIiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJhcGkiLCAiaW5pdE13QXBpIiwgImNvbmNhdCIsICJpbXBvcnRfZXh0X2dhZGdldDExIiwgIl9fdG9FU00iLCAiaW1wb3J0X2V4dF9nYWRnZXQ0IiwgImltcG9ydF9leHRfZ2FkZ2V0MyIsICJnZXRJMThuTWVzc2FnZXMiLCAibG9jYWxpemUiLCAiZW4iLCAiamEiLCAiQ2FuY2VsIiwgInpoIiwgIkxvZ2luIiwgIlBhc3N3b3JkIiwgIlVzZXJuYW1lIiwgIkFncmVlZE9yTm90IiwgIkRvdWJsZUNoZWNrQWdyZWVkT3JOb3QiLCAiRW1wdHkyRkEiLCAiRW1wdHlQYXNzd29yZCIsICJFbXB0eVVzZXJuYW1lT3JQYXNzd29yZCIsICJTZWxlY3RlZE9yTm90IiwgIlRvb0ZyZXF1ZW50IiwgImkxOG5NZXNzYWdlcyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJpbml0V2luZG93TWFuYWdlciIsICJPTyIsICJ1aSIsICJXaW5kb3dNYW5hZ2VyIiwgIndpbmRvd01hbmFnZXIiLCAib291aUNvbmZpcm0iLCAiX3JlZiIsICJfYXN5bmNUb0dlbmVyYXRvciIsICJvcHRpb25zIiwgIm1lc3NhZ2VEaWFsb2ciLCAiTWVzc2FnZURpYWxvZyIsICJhZGRXaW5kb3dzIiwgImluc3RhbmNlIiwgIm9wZW5XaW5kb3ciLCAiZGF0YSIsICJjbG9zZWQiLCAiX2RhdGEiLCAiYWN0aW9uIiwgIl94IiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJpbXBvcnRfZXh0X2dhZGdldDUiLCAiY2hlY2tWYWxpZCIsICJfcmVmMiIsICJhZ3JlZVRvc0NoZWNrYm94IiwgIm5hbWVJbnB1dCIsICJwd2RJbnB1dCIsICJ0b2FzdGlmeUluc3RhbmNlIiwgImlzQWdyZWVUb3MiLCAiaXNTZWxlY3RlZCIsICJpc0ZpbGwiLCAiZ2V0VmFsdWUiLCAidHJpbSIsICJpbmNsdWRlcyIsICJoaWRlVG9hc3QiLCAiY2xlYXJXaW5kb3dzIiwgIm1lc3NhZ2UiLCAiJCIsICJkZWZhdWx0IiwgImNyZWF0ZUVsZW1lbnQiLCAiaW5uZXJIVE1MIiwgImFjdGlvbnMiLCAibGFiZWwiLCAiZmxhZ3MiLCAidG9hc3RpZnkiLCAidGV4dCIsICJkdXJhdGlvbiIsICJpc1ZhbGlkIiwgIl94MiIsICJfeDMiLCAiaW1wb3J0X2V4dF9nYWRnZXQ2IiwgImdlbmVyYXRlRWxlbWVudHMiLCAiVGV4dElucHV0V2lkZ2V0IiwgImljb24iLCAicGxhY2Vob2xkZXIiLCAidmFsaWRhdGUiLCAidHlwZSIsICJDaGVja2JveElucHV0V2lkZ2V0IiwgInNlbGVjdGVkIiwgImFncmVlVG9zTGF5b3V0IiwgIkZpZWxkTGF5b3V0IiwgImFsaWduIiwgImtlZXBMb2dpbkNoZWNrYm94IiwgImtlZXBMb2dpbkxheW91dCIsICJoZWxwIiwgImNsYXNzTmFtZSIsICJzdHlsZSIsICJmb250U2l6ZSIsICJ0ZXh0QWxpZ24iLCAiJGxhYmVsIiwgIiRhZ3JlZVRvcyIsICJjbG9uZSIsICJhcHBlbmQiLCAiJGZvcmdvdFBhc3N3b3JkIiwgImNzcyIsICJocmVmIiwgIm13IiwgInV0aWwiLCAiZ2V0VXJsIiwgInRpdGxlIiwgIiRpbnB1dEJveCIsICJkaXNwbGF5IiwgInBhZGRpbmciLCAiJHRvc0xhYmVsIiwgImh0bWwiLCAiJHJlbWVtYmVyTWUiLCAiaW1wb3J0X2V4dF9nYWRnZXQ3IiwgInJlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXIiLCAid2luZG93IiwgIm9mZiIsICJvbldpbmRvd1Jlc2l6ZUhhbmRsZXIiLCAib291aVByb21wdCIsICJfcmVmMyIsICJyZXR5cGVQYXNzd29yZCIsICJjb2RlRGlhbG9nIiwgImNvZGVJbnB1dCIsICJjb2RlTGF5b3V0IiwgIm9wZW5lZCIsICJ0aGVuIiwgImdldEN1cnJlbnRXaW5kb3ciLCAiY2xvc2UiLCAiZm9jdXMiLCAiX3g0IiwgImltcG9ydF9leHRfZ2FkZ2V0OCIsICJxdWVyeUxvZ2luVG9rZW4iLCAiX3JlZjQiLCAibG9naW5Ub2tlbiIsICJnZXRUb2tlbiIsICJfeDUiLCAiaW1wb3J0X2V4dF9nYWRnZXQ5IiwgInJlZGlyZWN0T3JpZ2luTG9naW5QYWdlIiwgIl9yZWY1IiwgImRlbGF5IiwgImxvY2F0aW9uIiwgImltcG9ydF9leHRfZ2FkZ2V0MTAiLCAic2hvd0Vycm9yIiwgImVycm9yIiwgImNvbnNvbGUiLCAiaW1wb3J0X2V4dF9nYWRnZXQxMiIsICJhamF4TG9naW4iLCAibG9naW4iLCAiX3JlZjYiLCAibG9naW5Db250aW51ZSIsICJfcmVzcG9uc2UkY2xpZW50bG9naW4iLCAiX3Jlc3BvbnNlJGNsaWVudGxvZ2luMiIsICJwYXJhbXMiLCAiZm9ybWF0IiwgImZvcm1hdHZlcnNpb24iLCAibG9naW50b2tlbiIsICJsb2dpbnJldHVybnVybCIsICJ1c2VybmFtZSIsICJwYXNzd29yZCIsICJyZW1lbWJlck1lIiwgImxvZ2luY29udGludWUiLCAidmFsdWUiLCAicmV0eXBlIiwgIk9BVEhUb2tlbiIsICJyZXNwb25zZSIsICJwb3N0IiwgInN0YXR1cyIsICJyZWxvYWQiLCAibWVzc2FnZWNvZGUiLCAicmVwbGFjZSIsICJjaGVjayIsICJfcmVmNyIsICJsYXN0SXNBZ3JlZVRvcyIsICJsYXN0VG9hc3RpZnlJbnN0YW5jZSIsICJnZXRBY3Rpb25Qcm9jZXNzIiwgIlByb2Nlc3MiLCAic2l6ZSIsICJnZXRCb2R5IiwgImluaXRBdXRvTG9naW4iLCAiJGJvZHkiLCAid2dVc2VyTmFtZSIsICJjb25maWciLCAiZ2V0IiwgIiRsb2dpbkVsZW1lbnQiLCAiZmluZCIsICJsZW5ndGgiLCAiYXBwZW5kVG8iLCAiZmFrZVRvYXN0aWZ5SW5zdGFuY2UiLCAiZXZlbnQiLCAiY2hlY2tBMTF5Q29uZmlybUtleSIsICJwcmV2ZW50RGVmYXVsdCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL0FqYXhMb2dpbi9vcHRpb25zLmpzb24iLCAic3JjL0FqYXhMb2dpbi9BamF4TG9naW4udHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL2FkZExpc3RlbmVyLnRzIiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy9hcGkudHMiLCAic3JjL0FqYXhMb2dpbi9tb2R1bGVzL2NvcmUudHN4IiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy91dGlsL2NoZWNrVmFsaWQudHN4IiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy9pMThuLnRzIiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy9pbml0V2luZG93TWFuYWdlci50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9vb3VpQ29uZmlybS50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9nZW5lcmF0ZUVsZW1lbnRzLnRzeCIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9vb3VpUHJvbXB0LnRzeCIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9yZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyLnRzIiwgInNyYy9BamF4TG9naW4vbW9kdWxlcy91dGlsL3F1ZXJ5TG9naW5Ub2tlbi50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9yZWRpcmVjdE9yaWdpbkxvZ2luUGFnZS50cyIsICJzcmMvQWpheExvZ2luL21vZHVsZXMvdXRpbC9zaG93RXJyb3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIntcblx0XCJsb2dpbkVsZW1lbnRTZWxlY3RvclwiOiBcImE6aGFzKC5hamF4bG9naW4tbW91bnQtcG9pbnQpLCNwdC1sb2dpbj5hLC52ZWN0b3ItdXNlci1tZW51LWxvZ2luPmEsI3VzZXItdG9vbHM+YVtocmVmKj1cXFwiU3BlY2lhbFxcXCJdLC5tYWlucGFnZS10b3AtbWVudT5saTpudGgtY2hpbGQoMikgYVwiLFxuXHRcInZlcnNpb25cIjogXCI0LjBcIlxufVxuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtjaGVja0ExMXlDb25maXJtS2V5LCBnZXRCb2R5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuaW1wb3J0IHthZGRMaXN0ZW5lcn0gZnJvbSAnLi9tb2R1bGVzL2FkZExpc3RlbmVyJztcbmltcG9ydCB7YWpheExvZ2lufSBmcm9tICcuL21vZHVsZXMvY29yZSc7XG5pbXBvcnQge3dpbmRvd01hbmFnZXJ9IGZyb20gJy4vbW9kdWxlcy9pbml0V2luZG93TWFuYWdlcic7XG5cbnZvaWQgZ2V0Qm9keSgpLnRoZW4oZnVuY3Rpb24gaW5pdEF1dG9Mb2dpbigkYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4pOiB2b2lkIHtcblx0Y29uc3Qge3dnVXNlck5hbWV9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5cdGlmICh3Z1VzZXJOYW1lKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgJGxvZ2luRWxlbWVudDogSlF1ZXJ5PEhUTUxBbmNob3JFbGVtZW50PiA9ICRib2R5LmZpbmQ8SFRNTEFuY2hvckVsZW1lbnQ+KE9QVElPTlMubG9naW5FbGVtZW50U2VsZWN0b3IpO1xuXHRpZiAoISRsb2dpbkVsZW1lbnQubGVuZ3RoKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0d2luZG93TWFuYWdlci4kZWxlbWVudC5hcHBlbmRUbygkYm9keSk7XG5cblx0Y29uc3QgZmFrZVRvYXN0aWZ5SW5zdGFuY2U6IFRvYXN0aWZ5SW5zdGFuY2UgPSB7XG5cdFx0aGlkZVRvYXN0OiAoKSA9PiB7fSxcblx0fTtcblxuXHRjb25zdCBldmVudExpc3RlbmVyID0gKGV2ZW50OiBKUXVlcnkuQ2xpY2tFdmVudCB8IEpRdWVyeS5LZXlEb3duRXZlbnQpOiB2b2lkID0+IHtcblx0XHRpZiAoIWNoZWNrQTExeUNvbmZpcm1LZXkoZXZlbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRhamF4TG9naW4oZmFrZVRvYXN0aWZ5SW5zdGFuY2UpO1xuXHR9O1xuXHRhZGRMaXN0ZW5lcigkbG9naW5FbGVtZW50LCBldmVudExpc3RlbmVyKTtcbn0pO1xuIiwgImltcG9ydCB7ZmlsdGVyQWx0ZXJlZENsaWNrc30gZnJvbSAnZXh0LmdhZGdldC5GaWx0ZXJBbHRlcmVkQ2xpY2tzJztcblxuY29uc3QgYWRkTGlzdGVuZXIgPSAoXG5cdCRlbGVtZW50OiBKUXVlcnksXG5cdGV2ZW50TGlzdGVuZXI6IChldmVudDogSlF1ZXJ5LkNsaWNrRXZlbnQgfCBKUXVlcnkuS2V5RG93bkV2ZW50KSA9PiB2b2lkXG4pOiB2b2lkID0+IHtcblx0JGVsZW1lbnQub24oJ2NsaWNrJywgZmlsdGVyQWx0ZXJlZENsaWNrcyhldmVudExpc3RlbmVyKSk7XG5cdCRlbGVtZW50Lm9uKCdrZXlkb3duJywgZXZlbnRMaXN0ZW5lcik7XG59O1xuXG5leHBvcnQge2FkZExpc3RlbmVyfTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxudHlwZSBDbGllbnRMb2dpblBhcmFtcyA9IEFwaUNsaWVudExvZ2luUGFyYW1zICYge1xuXHR1c2VybmFtZT86IHN0cmluZztcblx0cGFzc3dvcmQ/OiBzdHJpbmc7XG5cdHJlbWVtYmVyTWU/OiBib29sZWFuO1xuXHRyZXR5cGU/OiBzdHJpbmc7XG5cdE9BVEhUb2tlbj86IHN0cmluZztcbn07XG5cbmNvbnN0IGFwaTogbXcuQXBpID0gaW5pdE13QXBpKGBBamF4TG9naW4vJHtPUFRJT05TLnZlcnNpb259YCk7XG5cbmV4cG9ydCB7dHlwZSBDbGllbnRMb2dpblBhcmFtcywgYXBpfTtcbiIsICJpbXBvcnQge3R5cGUgQ2xpZW50TG9naW5QYXJhbXMsIGFwaX0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHtjaGVja1ZhbGlkfSBmcm9tICcuL3V0aWwvY2hlY2tWYWxpZCc7XG5pbXBvcnQge2dlbmVyYXRlRWxlbWVudHN9IGZyb20gJy4vdXRpbC9nZW5lcmF0ZUVsZW1lbnRzJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB7b291aVByb21wdH0gZnJvbSAnLi91dGlsL29vdWlQcm9tcHQnO1xuaW1wb3J0IHtxdWVyeUxvZ2luVG9rZW59IGZyb20gJy4vdXRpbC9xdWVyeUxvZ2luVG9rZW4nO1xuaW1wb3J0IHtyZWRpcmVjdE9yaWdpbkxvZ2luUGFnZX0gZnJvbSAnLi91dGlsL3JlZGlyZWN0T3JpZ2luTG9naW5QYWdlJztcbmltcG9ydCB7cmVtb3ZlV2luZG93UmVzaXplSGFuZGxlcn0gZnJvbSAnLi91dGlsL3JlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXInO1xuaW1wb3J0IHtzaG93RXJyb3J9IGZyb20gJy4vdXRpbC9zaG93RXJyb3InO1xuaW1wb3J0IHt0b2FzdGlmeX0gZnJvbSAnZXh0LmdhZGdldC5Ub2FzdGlmeSc7XG5pbXBvcnQge3dpbmRvd01hbmFnZXJ9IGZyb20gJy4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCBhamF4TG9naW4gPSAodG9hc3RpZnlJbnN0YW5jZTogVG9hc3RpZnlJbnN0YW5jZSwgaXNBZ3JlZVRvczogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XG5cdGNvbnN0IHtcblx0XHQkYWdyZWVUb3MsXG5cdFx0JGZvcmdvdFBhc3N3b3JkLFxuXHRcdCRpbnB1dEJveCxcblx0XHQkcmVtZW1iZXJNZSxcblx0XHQkdG9zTGFiZWwsXG5cdFx0YWdyZWVUb3NDaGVja2JveCxcblx0XHRrZWVwTG9naW5DaGVja2JveCxcblx0XHRtZXNzYWdlRGlhbG9nLFxuXHRcdG5hbWVJbnB1dCxcblx0XHRwd2RJbnB1dCxcblx0fSA9IGdlbmVyYXRlRWxlbWVudHMoaXNBZ3JlZVRvcyk7XG5cblx0bGV0IGxvZ2luVG9rZW46IHN0cmluZyA9ICcnO1xuXHRjb25zdCBsb2dpbiA9IGFzeW5jICh7bG9naW5Db250aW51ZSA9IGZhbHNlLCByZXR5cGVQYXNzd29yZCA9IGZhbHNlfSA9IHt9KTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghbG9naW5Db250aW51ZSkge1xuXHRcdFx0XHQoe2xvZ2luVG9rZW4sIHRvYXN0aWZ5SW5zdGFuY2V9ID0gYXdhaXQgcXVlcnlMb2dpblRva2VuKHRvYXN0aWZ5SW5zdGFuY2UpKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGFyYW1zOiBDbGllbnRMb2dpblBhcmFtcyA9IHtcblx0XHRcdFx0YWN0aW9uOiAnY2xpZW50bG9naW4nLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRsb2dpbnRva2VuOiBsb2dpblRva2VuLFxuXHRcdFx0XHRsb2dpbnJldHVybnVybDogbG9jYXRpb24uaHJlZixcblx0XHRcdFx0dXNlcm5hbWU6IG5hbWVJbnB1dC5nZXRWYWx1ZSgpLFxuXHRcdFx0XHRwYXNzd29yZDogcHdkSW5wdXQuZ2V0VmFsdWUoKSxcblx0XHRcdH07XG5cdFx0XHRpZiAoa2VlcExvZ2luQ2hlY2tib3guaXNTZWxlY3RlZCgpKSB7XG5cdFx0XHRcdHBhcmFtcy5yZW1lbWJlck1lID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChsb2dpbkNvbnRpbnVlIHx8IHJldHlwZVBhc3N3b3JkKSB7XG5cdFx0XHRcdGF3YWl0IHdpbmRvd01hbmFnZXIuY2xlYXJXaW5kb3dzKCk7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXMubG9naW5yZXR1cm51cmw7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXMudXNlcm5hbWU7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXMucGFzc3dvcmQ7XG5cdFx0XHRcdHBhcmFtcy5sb2dpbmNvbnRpbnVlID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCB2YWx1ZTogc3RyaW5nIHwgbnVsbCA9IGF3YWl0IG9vdWlQcm9tcHQocmV0eXBlUGFzc3dvcmQpO1xuXG5cdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UuaGlkZVRvYXN0KCk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dG9hc3RpZnkoXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0xvZ2luIGNhbmNlbGxlZCcpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdpbmZvJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dm9pZCB3aW5kb3dNYW5hZ2VyLmNsZWFyV2luZG93cygpO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSAnJykge1xuXHRcdFx0XHRcdGlmIChyZXR5cGVQYXNzd29yZCkge1xuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnRW1wdHlQYXNzd29yZCcpLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J3dhcm5pbmcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dm9pZCBsb2dpbih7XG5cdFx0XHRcdFx0XHRcdHJldHlwZVBhc3N3b3JkOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0VtcHR5MkZBJyksXG5cdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IC0xLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnd2FybmluZydcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR2b2lkIGxvZ2luKHtcblx0XHRcdFx0XHRcdFx0bG9naW5Db250aW51ZTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChyZXR5cGVQYXNzd29yZCkge1xuXHRcdFx0XHRcdHBhcmFtcy5wYXNzd29yZCA9IHZhbHVlO1xuXHRcdFx0XHRcdHBhcmFtcy5yZXR5cGUgPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYXJhbXMuT0FUSFRva2VuID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dG9hc3RpZnlJbnN0YW5jZS5oaWRlVG9hc3QoKTtcblx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0xvZ2dpbmcgaW4nKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2luZm8nXG5cdFx0XHQpO1xuXG5cdFx0XHRjb25zdCByZXNwb25zZSA9IChhd2FpdCBhcGkucG9zdChwYXJhbXMpKSBhcyB7XG5cdFx0XHRcdGNsaWVudGxvZ2luOiB7XG5cdFx0XHRcdFx0c3RhdHVzPzogc3RyaW5nO1xuXHRcdFx0XHRcdG1lc3NhZ2Vjb2RlPzogc3RyaW5nO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdFx0dG9hc3RpZnlJbnN0YW5jZS5oaWRlVG9hc3QoKTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlWydjbGllbnRsb2dpbiddPy5zdGF0dXMgPT09ICdQQVNTJykge1xuXHRcdFx0XHR0b2FzdGlmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdMb2dpbiBzdWNjZWVkJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnc3VjY2Vzcydcblx0XHRcdFx0KTtcblx0XHRcdFx0bG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2UgaWYgKHJlc3BvbnNlWydjbGllbnRsb2dpbiddPy5tZXNzYWdlY29kZSkge1xuXHRcdFx0XHRjb25zdCB7bWVzc2FnZWNvZGV9ID0gcmVzcG9uc2VbJ2NsaWVudGxvZ2luJ107XG5cdFx0XHRcdHN3aXRjaCAobWVzc2FnZWNvZGUpIHtcblx0XHRcdFx0XHRjYXNlICdsb2dpbi10aHJvdHRsZWQnOlxuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnVG9vRnJlcXVlbnQnKSxcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCdlcnJvcidcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdvYXRoYXV0aC1hdXRoLXVpJzpcblx0XHRcdFx0XHRcdHZvaWQgbG9naW4oe1xuXHRcdFx0XHRcdFx0XHRsb2dpbkNvbnRpbnVlOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdvYXRoYXV0aC1sb2dpbi1mYWlsZWQnOlxuXHRcdFx0XHRcdFx0dG9hc3RpZnlJbnN0YW5jZSA9IHRvYXN0aWZ5KFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogZ2V0TWVzc2FnZSgnSW52YWxpZCAyRkEgdmVyaWZpY2F0aW9uIGNvZGUnKSxcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCd3YXJuaW5nJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZvaWQgbG9naW4oe1xuXHRcdFx0XHRcdFx0XHRsb2dpbkNvbnRpbnVlOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdyZXNldHBhc3MtdGVtcC1lbWFpbGVkJzpcblx0XHRcdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ05ldyBwYXNzd29yZCBpcyByZXF1aXJlZCcpLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J3dhcm5pbmcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dm9pZCBsb2dpbih7XG5cdFx0XHRcdFx0XHRcdHJldHlwZVBhc3N3b3JkOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd3cm9uZ3Bhc3N3b3JkJzpcblx0XHRcdFx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0ludmFsaWQgdXNlcnVhbWUgb3IgcGFzc3dvcmQnKSxcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCd3YXJuaW5nJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGF3YWl0IHdpbmRvd01hbmFnZXIuY2xlYXJXaW5kb3dzKCk7XG5cdFx0XHRcdFx0XHRhamF4TG9naW4odG9hc3RpZnlJbnN0YW5jZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dG9hc3RpZnkoXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdVbmV4cGVjdGVkIEFQSSByZXNwb25zZScpLnJlcGxhY2UoJyQxJywgbWVzc2FnZWNvZGUpLFxuXHRcdFx0XHRcdFx0XHRcdGNsb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J2Vycm9yJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZvaWQgcmVkaXJlY3RPcmlnaW5Mb2dpblBhZ2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRzaG93RXJyb3IoZXJyb3IsIHRvYXN0aWZ5SW5zdGFuY2UpO1xuXHRcdFx0dm9pZCByZWRpcmVjdE9yaWdpbkxvZ2luUGFnZSgpO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCBjaGVjayA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCB7XG5cdFx0XHRpc1ZhbGlkLFxuXHRcdFx0aXNBZ3JlZVRvczogbGFzdElzQWdyZWVUb3MsXG5cdFx0XHR0b2FzdGlmeUluc3RhbmNlOiBsYXN0VG9hc3RpZnlJbnN0YW5jZSxcblx0XHR9ID0gYXdhaXQgY2hlY2tWYWxpZChbYWdyZWVUb3NDaGVja2JveCwgbmFtZUlucHV0LCBwd2RJbnB1dF0sIHRvYXN0aWZ5SW5zdGFuY2UpO1xuXG5cdFx0dG9hc3RpZnlJbnN0YW5jZSA9IGxhc3RUb2FzdGlmeUluc3RhbmNlO1xuXG5cdFx0aWYgKGlzVmFsaWQpIHtcblx0XHRcdHZvaWQgbG9naW4oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWpheExvZ2luKHRvYXN0aWZ5SW5zdGFuY2UsIGxhc3RJc0FncmVlVG9zKTtcblx0XHR9XG5cdH07XG5cblx0cHdkSW5wdXQub24oJ2VudGVyJywgKCk6IHZvaWQgPT4ge1xuXHRcdHZvaWQgY2hlY2soKTtcblx0fSk7XG5cdG1lc3NhZ2VEaWFsb2cuZ2V0QWN0aW9uUHJvY2VzcyA9IChhY3Rpb24pOiBPTy51aS5Qcm9jZXNzID0+XG5cdFx0bmV3IE9PLnVpLlByb2Nlc3MoKCk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKGFjdGlvbiA9PT0gJ2xvZ2luJykge1xuXHRcdFx0XHR2b2lkIGNoZWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHRcdFx0XHR2b2lkIHdpbmRvd01hbmFnZXIuY2xlYXJXaW5kb3dzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0d2luZG93TWFuYWdlci5hZGRXaW5kb3dzKFttZXNzYWdlRGlhbG9nXSk7XG5cdHZvaWQgd2luZG93TWFuYWdlci5vcGVuV2luZG93KG1lc3NhZ2VEaWFsb2csIHtcblx0XHRhY3Rpb25zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdGFjdGlvbjogJ2xvZ2luJyxcblx0XHRcdFx0ZmxhZ3M6IFsncHJpbWFyeScsICdwcm9ncmVzc2l2ZSddLFxuXHRcdFx0XHRsYWJlbDogJCg8Yj57Z2V0TWVzc2FnZSgnTG9naW4nKX08L2I+KSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGFjdGlvbjogJ2NhbmNlbCcsXG5cdFx0XHRcdGZsYWdzOiBbJ3NhZmUnLCAnY2xvc2UnXSxcblx0XHRcdFx0bGFiZWw6ICQoPGI+e2dldE1lc3NhZ2UoJ0NhbmNlbCcpfTwvYj4pLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdG1lc3NhZ2U6ICQoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm9vLXVpLXdpbmRvdy1mb290XCI+e1skaW5wdXRCb3gsICRmb3Jnb3RQYXNzd29yZCwgJHJlbWVtYmVyTWUsICRhZ3JlZVRvcywgJHRvc0xhYmVsXX08L2Rpdj5cblx0XHQpLFxuXHRcdHRpdGxlOiAkKDxiIGNsYXNzTmFtZT1cIm9vLXVpLXdpbmRvdy1oZWFkXCI+e2dldE1lc3NhZ2UoJ0xvZ2luJyl9PC9iPiksXG5cdFx0c2l6ZTogJ3NtYWxsJyxcblx0fSk7XG5cdHJlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXIoKTtcbn07XG5cbmV4cG9ydCB7YWpheExvZ2lufTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAnZXh0LmdhZGdldC5SZWFjdCc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHtvb3VpQ29uZmlybX0gZnJvbSAnLi9vb3VpQ29uZmlybSc7XG5pbXBvcnQge3RvYXN0aWZ5fSBmcm9tICdleHQuZ2FkZ2V0LlRvYXN0aWZ5JztcbmltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCBjaGVja1ZhbGlkID0gYXN5bmMgKFxuXHRbYWdyZWVUb3NDaGVja2JveCwgbmFtZUlucHV0LCBwd2RJbnB1dF06IFtPTy51aS5DaGVja2JveElucHV0V2lkZ2V0LCBPTy51aS5UZXh0SW5wdXRXaWRnZXQsIE9PLnVpLlRleHRJbnB1dFdpZGdldF0sXG5cdHRvYXN0aWZ5SW5zdGFuY2U6IFRvYXN0aWZ5SW5zdGFuY2Vcbik6IFByb21pc2U8e1xuXHRpc0FncmVlVG9zOiBib29sZWFuO1xuXHRpc1ZhbGlkOiBib29sZWFuO1xuXHR0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlO1xufT4gPT4ge1xuXHRsZXQgaXNBZ3JlZVRvczogYm9vbGVhbiA9IGFncmVlVG9zQ2hlY2tib3guaXNTZWxlY3RlZCgpO1xuXHRjb25zdCBpc0ZpbGw6IGJvb2xlYW4gPSAhW25hbWVJbnB1dC5nZXRWYWx1ZSgpLnRyaW0oKSwgcHdkSW5wdXQuZ2V0VmFsdWUoKS50cmltKCldLmluY2x1ZGVzKCcnKTtcblxuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHRhd2FpdCB3aW5kb3dNYW5hZ2VyLmNsZWFyV2luZG93cygpO1xuXG5cdGlmICghaXNBZ3JlZVRvcykge1xuXHRcdGlzQWdyZWVUb3MgPSBhd2FpdCBvb3VpQ29uZmlybSh7XG5cdFx0XHRtZXNzYWdlOiAkKDxzcGFuIGlubmVySFRNTD17Z2V0TWVzc2FnZSgnRG91YmxlQ2hlY2tBZ3JlZWRPck5vdCcpfSAvPikgYXMgSlF1ZXJ5LFxuXHRcdFx0YWN0aW9uczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQoPGI+e2dldE1lc3NhZ2UoJ0NhbmNlbCcpfTwvYj4pLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2NhbmNlbCcsXG5cdFx0XHRcdFx0ZmxhZ3M6IFsnc2FmZScsICdjbG9zZSddLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQoPGI+e2dldE1lc3NhZ2UoJ0kgYWdyZWUnKX08L2I+KSxcblx0XHRcdFx0XHRhY3Rpb246ICdhY2NlcHQnLFxuXHRcdFx0XHRcdGZsYWdzOiBbJ3ByaW1hcnknLCAncHJvZ3Jlc3NpdmUnXSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzQWdyZWVUb3MpIHtcblx0XHRcdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0FncmVlZE9yTm90JyksXG5cdFx0XHRcdFx0ZHVyYXRpb246IC0xLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW5mbydcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCFpc0ZpbGwpIHtcblx0XHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoXG5cdFx0XHR7XG5cdFx0XHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0VtcHR5VXNlcm5hbWVPclBhc3N3b3JkJyksXG5cdFx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHRcdH0sXG5cdFx0XHQnaW5mbydcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgaXNWYWxpZDogYm9vbGVhbiA9IGlzQWdyZWVUb3MgJiYgaXNGaWxsO1xuXG5cdHJldHVybiB7XG5cdFx0aXNBZ3JlZVRvcyxcblx0XHRpc1ZhbGlkLFxuXHRcdHRvYXN0aWZ5SW5zdGFuY2UsXG5cdH07XG59O1xuXG5leHBvcnQge2NoZWNrVmFsaWR9O1xuIiwgImltcG9ydCB7bG9jYWxpemV9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cbmNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0cmV0dXJuIHtcblx0XHQnNi1kaWdpdCBudW1iZXInOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJzYtZGlnaXQgbnVtYmVyJyxcblx0XHRcdGphOiAnNuahgeOBruaVsOWtlycsXG5cdFx0XHQnemgtaGFucyc6ICc25L2N5pWw5a2XJyxcblx0XHRcdCd6aC1oYW50JzogJzbkvY3mlbjlrZcnLFxuXHRcdH0pLFxuXHRcdENhbmNlbDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdDYW5jZWwnLFxuXHRcdFx0amE6ICfjgq3jg6Pjg7Pjgrvjg6snLFxuXHRcdFx0emg6ICflj5bmtognLFxuXHRcdH0pLFxuXHRcdCdFbnRlciBwYXNzd29yZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRW50ZXIgcGFzc3dvcmQnLFxuXHRcdFx0amE6ICfjg5Hjgrnjg6/jg7zjg4knLFxuXHRcdFx0J3poLWhhbnMnOiAn6K+36L6T5YWl5a+G56CBJyxcblx0XHRcdCd6aC1oYW50JzogJ+iri+i8uOWFpeWvhueivCcsXG5cdFx0fSksXG5cdFx0J0VudGVyIDJGQSB2ZXJpZmljYXRpb24gY29kZSc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnMkZBIHZlcmlmaWNhdGlvbiBjb2RlJyxcblx0XHRcdGphOiAnMkZB6KqN6Ki844Kz44O844OJJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ivt+i+k+WFpTJGQemqjOivgeeggScsXG5cdFx0XHQnemgtaGFudCc6ICfoq4vovLjlhaUyRkHpqZforYnnorwnLFxuXHRcdH0pLFxuXHRcdCdGb3Jnb3QgcGFzc3dvcmQ/JzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdGb3Jnb3QgcGFzc3dvcmQ/Jyxcblx0XHRcdGphOiAn44OR44K544Ov44O844OJ44KS44GK5b+Y44KM44Gn44GZ44GL77yfJyxcblx0XHRcdCd6aC1oYW5zJzogJ+W/mOiusOWvhuegge+8nycsXG5cdFx0XHQnemgtaGFudCc6ICflv5joqJjlr4bnorzvvJ8nLFxuXHRcdH0pLFxuXHRcdCdHZXR0aW5nIGxvZ2luIHRva2VuJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdHZXR0aW5nIGxvZ2luIHRva2VuJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44OI44O844Kv44Oz44KS5Y+W5b6X44GX44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ato+WcqOiOt+WPlueZu+W9leS7pOeJjCcsXG5cdFx0XHQnemgtaGFudCc6ICfmraPlnKjnjbLlj5bnmbvlhaXmrIrmnZYnLFxuXHRcdH0pLFxuXHRcdCdoZWxwIGZvciBJIGFncmVlIHdpdGggdGhlIHJlbGV2YW50IHRlcm1zJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdXaGVuIHlvdSBsb2dpbiwgaXQgbWVhbnMgdGhhdCB5b3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCwgZnVsbHkgdW5kZXJzdG9vZCBhbmQgYWdyZWVkIHRvIGNvbXBseSB3aXRoIHRoZSA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6VE9TXCIgdGl0bGU9XCJUZXJtcyBvZiBTZXJ2aWNlXCI+VGVybXMgb2YgU2VydmljZTwvYT4sIDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpQSVBQXCIgdGl0bGU9XCJQZXJzb25hbCBJbmZvcm1hdGlvbiBQcm90ZWN0aW9uIFBvbGljeVwiPlBlcnNvbmFsIEluZm9ybWF0aW9uIFByb3RlY3Rpb24gUG9saWN5PC9hPiBhbmQgPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOkRBR1pDXCIgdGl0bGU9XCJZc0FyY2hpdmVzIEFzc29jaWF0aW9uXCI+WXNBcmNoaXZlcyBBc3NvY2lhdGlvbjwvYT4uJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44KS44GZ44KL44Go44CB44GC44Gq44Gf44Gv5pys44K144Kk44OI44Gu44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlRPU1wiIHRpdGxlPVwi5Yip55So6KaP57SEXCI+5Yip55So6KaP57SEPC9hPuOAj+OAjjxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpQSVBQXCIgdGl0bGU9XCLlgIvkurrmg4XloLHkv53orbfmnaHkvotcIj7lgIvkurrmg4XloLHkv53orbfmnaHkvos8L2E+44CP44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOkdQXCIgdGl0bGU9XCLmoaPmoYjppobnq6DnqItcIj7moaPmoYjppobnq6DnqIs8L2E+44CP44KS5Y2B5YiG44Gr55CG6Kej44GX44CB5ZCM5oSP44GX44Gf44GT44Go44Gr44Gq44KK44G+44GZ44CCJyxcblx0XHRcdCd6aC1oYW5zJzpcblx0XHRcdFx0J+eZu+W9leaXtu+8jOWNs+S7o+ihqOaCqOW3suS7lOe7humYheivu+OAgeWFheWIhuS6huino+W5tuWQjOaEj+mBteWuiOacrOe9keermeeahOOAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpUT1NcIiB0aXRsZT1cIueUqOaIt+WNj+iurlwiPueUqOaIt+WNj+iurjwvYT7jgIvjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6UElQUFwiIHRpdGxlPVwi5Liq5Lq65L+h5oGv5L+d5oqk5p2h5L6LXCI+5Liq5Lq65L+h5oGv5L+d5oqk5p2h5L6LPC9hPuOAi+OAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpHUFwiIHRpdGxlPVwi5qGj5qGI6aaG56ug56iLXCI+5qGj5qGI6aaG56ug56iLPC9hPuOAi+OAgicsXG5cdFx0XHQnemgtaGFudCc6XG5cdFx0XHRcdCfnmbvpjITmmYLvvIzljbPku6Pooajmgqjlt7Lku5TntLDplrHoroDjgIHlhYXliIbkuobop6PkuKblkIzmhI/pgbXlrojmnKzntrLnq5nnmoTjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6VE9TXCIgdGl0bGU9XCLnlKjmiLbljZTorbBcIj7nlKjmiLbljZTorbA8L2E+44CL44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlBJUFBcIiB0aXRsZT1cIuWAi+S6uuS/oeaBr+S/neitt+adoeS+i1wiPuWAi+S6uuS/oeaBr+S/neitt+adoeS+izwvYT7jgIvjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6R1BcIiB0aXRsZT1cIuaho+ahiOmmhueroOeoi1wiPuaho+ahiOmmhueroOeoizwvYT7jgIvjgIInLFxuXHRcdH0pLFxuXHRcdCdJIGFncmVlJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJIGFncmVlJyxcblx0XHRcdGphOiAn5ZCM5oSP44GZ44KLJyxcblx0XHRcdHpoOiAn5oiR5ZCM5oSPJyxcblx0XHR9KSxcblx0XHQnSSBhZ3JlZSB3aXRoIHRoZSByZWxldmFudCB0ZXJtcyc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnSSBhZ3JlZSB3aXRoIHRoZSByZWxldmFudCB0ZXJtcycsXG5cdFx0XHRqYTogJ+mWoumAo+OBmeOCi+imj+e0hOOCkuiqreOBv+OAgeWQjOaEjycsXG5cdFx0XHQnemgtaGFucyc6ICfmiJHlt7LpmIXor7vlubblkIzmhI/nm7jlhbPmnaHmrL4nLFxuXHRcdFx0J3poLWhhbnQnOiAn5oiR5bey6Zay6K6A5Lim5ZCM5oSP55u46Zec5qKd5qy+Jyxcblx0XHR9KSxcblx0XHQnSW52YWxpZCAyRkEgdmVyaWZpY2F0aW9uIGNvZGUnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0ludmFsaWQgMkZBIHZlcmlmaWNhdGlvbiBjb2RlJyxcblx0XHRcdGphOiAnMkZB6KqN6Ki844Kz44O844OJ44GM6ZaT6YGV44Gj44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1oYW5zJzogJzJGQemqjOivgeeggemUmeivrycsXG5cdFx0XHQnemgtaGFudCc6ICcyRkHpqZforYnnorzpjK/oqqQnLFxuXHRcdH0pLFxuXHRcdCdJbnZhbGlkIHVzZXJ1YW1lIG9yIHBhc3N3b3JkJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJbnZhbGlkIHVzZXJ1YW1lIG9yIHBhc3N3b3JkJyxcblx0XHRcdGphOiAn5Yip55So6ICF5ZCN44G+44Gf44Gv44OR44K544Ov44O844OJ44GM6ZaT6YGV44Gj44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1jbic6ICfnlKjmiLflkI3miJblr4bnoIHplJnor68nLFxuXHRcdFx0J3poLWhrJzogJ+eUqOaItuWQjeeoseaIluWvhueivOmMr+iqpCcsXG5cdFx0XHQnemgtdHcnOiAn5L2/55So6ICF5ZCN56ix5oiW5a+G56K86Yyv6KqkJyxcblx0XHR9KSxcblx0XHQnS2VlcCBtZSBsb2dnZWQgaW4nOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0tlZXAgbWUgbG9nZ2VkIGluJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz54q25oWL44KS5L+d5oyBJyxcblx0XHRcdCd6aC1oYW5zJzogJ+iusOS9j+aIkeeahOeZu+W9leeKtuaAgScsXG5cdFx0XHQnemgtaGFudCc6ICfoqJjkvY/miJHnmoTnmbvlhaXni4DmhYsnLFxuXHRcdH0pLFxuXHRcdCdMb2dnaW5nIGluJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdMb2dnaW5nIGluJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44Oz44GX44Gm44GE44G+44GZJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ato+WcqOeZu+W9lScsXG5cdFx0XHQnemgtaGFudCc6ICfmraPlnKjnmbvlhaUnLFxuXHRcdH0pLFxuXHRcdExvZ2luOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0xvZ2luJyxcblx0XHRcdGphOiAn44Ot44Kw44Kk44OzJyxcblx0XHRcdCd6aC1oYW5zJzogJ+eZu+W9lScsXG5cdFx0XHQnemgtaGFudCc6ICfnmbvlhaUnLFxuXHRcdH0pLFxuXHRcdCdMb2dpbiBjYW5jZWxsZWQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0xvZ2luIGNhbmNlbGxlZCcsXG5cdFx0XHRqYTogJ+ODreOCsOOCpOODs+OCreODo+ODs+OCu+ODqycsXG5cdFx0XHQnemgtaGFucyc6ICfnmbvlvZXlj5bmtognLFxuXHRcdFx0J3poLWhhbnQnOiAn55m75YWl5Y+W5raIJyxcblx0XHR9KSxcblx0XHQnTG9naW4gc3VjY2VlZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTG9naW4gc3VjY2VlZCcsXG5cdFx0XHRqYTogJ+ODreOCsOOCpOODs+OBq+aIkOWKn+OBl+OBvuOBl+OBnycsXG5cdFx0XHQnemgtaGFucyc6ICfnmbvlvZXmiJDlip8nLFxuXHRcdFx0J3poLWhhbnQnOiAn55m75YWl5oiQ5YqfJyxcblx0XHR9KSxcblx0XHQnTG9naW4gdG9rZW4gZ2V0dGVkJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdMb2dpbiB0b2tlbiBnZXR0ZWQnLFxuXHRcdFx0amE6ICfjg63jgrDjgqTjg7Pjg4jjg7zjgq/jg7Pjga7lj5blvpfjgavmiJDlip/jgZfjgb7jgZfjgZ8nLFxuXHRcdFx0J3poLWhhbnMnOiAn6I635Y+W55m75b2V5Luk54mM5oiQ5YqfJyxcblx0XHRcdCd6aC1oYW50JzogJ+eNsuWPlueZu+WFpeasiuadluaIkOWKnycsXG5cdFx0fSksXG5cdFx0J05ldyBwYXNzd29yZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTmV3IHBhc3N3b3JkJyxcblx0XHRcdGphOiAn5paw44GX44GE44OR44K544Ov44O844OJJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aWsOWvhueggScsXG5cdFx0XHQnemgtaGFudCc6ICfmlrDlr4bnorwnLFxuXHRcdH0pLFxuXHRcdCdOZXcgcGFzc3dvcmQgaXMgcmVxdWlyZWQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ05ldyBwYXNzd29yZCBpcyByZXF1aXJlZCcsXG5cdFx0XHRqYTogJ+aWsOOBl+OBhOODkeOCueODr+ODvOODieOCkuioreWumuOBl+OBpuOBj+OBoOOBleOBhCcsXG5cdFx0XHQnemgtaGFucyc6ICfpnIDopoHorr7nva7mlrDlr4bnoIEnLFxuXHRcdFx0J3poLWhhbnQnOiAn6ZyA6KaB6Kit572u5paw5a+G56K8Jyxcblx0XHR9KSxcblx0XHRQYXNzd29yZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdQYXNzd29yZCcsXG5cdFx0XHRqYTogJ+ODkeOCueODr+ODvOODiScsXG5cdFx0XHQnemgtaGFucyc6ICflr4bnoIEnLFxuXHRcdFx0J3poLWhhbnQnOiAn5a+G56K8Jyxcblx0XHR9KSxcblx0XHQnUmVzZXQgcGFzc3dvcmQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1Jlc2V0IHBhc3N3b3JkJyxcblx0XHRcdGphOiAn44OR44K544Ov44O844OJ44KS44Oq44K744OD44OIJyxcblx0XHRcdCd6aC1oYW5zJzogJ+mHjee9ruWvhueggScsXG5cdFx0XHQnemgtaGFudCc6ICfph43mlrDoqK3lrprlr4bnorwnLFxuXHRcdH0pLFxuXHRcdFVzZXJuYW1lOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1VzZXJuYW1lJyxcblx0XHRcdGphOiAn5Yip55So6ICF5ZCNJyxcblx0XHRcdCd6aC1jbic6ICfnlKjmiLflkI0nLFxuXHRcdFx0J3poLWhrJzogJ+eUqOaItuWQjeeosScsXG5cdFx0XHQnemgtdHcnOiAn5L2/55So6ICF5ZCN56ixJyxcblx0XHR9KSxcblx0XHRBZ3JlZWRPck5vdDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdQbGVhc2UgcmVhZCB0aGUgcmVsZXZhbnQgdGVybXMuIElmIHlvdSBhZ3JlZSwgY2hlY2sgdGhlIGNoZWNrYm94IHRvIGNvbmZpcm0nLFxuXHRcdFx0amE6ICfplqLpgKPjgZnjgovopo/ntITjgpLjgYroqq3jgb/jgYTjgZ/jgaDjgY3jgIHlkIzmhI/jgZXjgozjgovloLTlkIjjga/jgIHjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjgavjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgabnorroqo3jgZfjgabjgY/jgaDjgZXjgYQnLFxuXHRcdFx0J3poLWhhbnMnOiAn6K+36ZiF6K+755u45YWz5p2h5qy+44CC6Iul5ZCM5oSP77yM5Yu+6YCJ5aSN6YCJ5qGG5Lul56Gu6K6kJyxcblx0XHRcdCd6aC1oYW50JzogJ+iri+mWsuiugOebuOmXnOaineasvuOAguiLpeWQjOaEj++8jOWLvumBuOikh+mBuOahhuS7peeiuuiqjScsXG5cdFx0fSksXG5cdFx0RG91YmxlQ2hlY2tBZ3JlZWRPck5vdDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdZb3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCwgZnVsbHkgdW5kZXJzdG9vZCBhbmQgYWdyZWVkIHRvIGNvbXBseSB3aXRoIG91ciA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6VE9TXCIgdGl0bGU9XCJUZXJtcyBvZiBTZXJ2aWNlXCI+VGVybXMgb2YgU2VydmljZTwvYT4sIDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpQSVBQXCIgdGl0bGU9XCJQZXJzb25hbCBJbmZvcm1hdGlvbiBQcm90ZWN0aW9uIFBvbGljeVwiPlBlcnNvbmFsIEluZm9ybWF0aW9uIFByb3RlY3Rpb24gUG9saWN5PC9hPiBhbmQgPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOkRBR1pDXCIgdGl0bGU9XCJZc0FyY2hpdmVzIEFzc29jaWF0aW9uXCI+WXNBcmNoaXZlcyBBc3NvY2lhdGlvbjwvYT4uJyxcblx0XHRcdGphOiAn44GC44Gq44Gf44Gv5pys44K144Kk44OI44Gu44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlRPU1wiIHRpdGxlPVwi5Yip55So6KaP57SEXCI+5Yip55So6KaP57SEPC9hPuOAj+OAjjxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpQSVBQXCIgdGl0bGU9XCLlgIvkurrmg4XloLHkv53orbfmnaHkvotcIj7lgIvkurrmg4XloLHkv53orbfmnaHkvos8L2E+44CP44COPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOkdQXCIgdGl0bGU9XCLmoaPmoYjppobnq6DnqItcIj7moaPmoYjppobnq6DnqIs8L2E+44CP44KS5Y2B5YiG44Gr55CG6Kej44GX44CB5ZCM5oSP44GX44Gf44GT44Go44Gr44Gq44KK44G+44GZ44CCJyxcblx0XHRcdCd6aC1oYW5zJzpcblx0XHRcdFx0J+aCqOW3suS7lOe7humYheivu+OAgeWFheWIhuS6huino+W5tuWQjOaEj+mBteWuiOacrOe9keermeeahOOAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpUT1NcIiB0aXRsZT1cIueUqOaIt+WNj+iurlwiPueUqOaIt+WNj+iurjwvYT7jgIvjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6UElQUFwiIHRpdGxlPVwi5Liq5Lq65L+h5oGv5L+d5oqk5p2h5L6LXCI+5Liq5Lq65L+h5oGv5L+d5oqk5p2h5L6LPC9hPuOAi+OAijxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpHUFwiIHRpdGxlPVwi5qGj5qGI6aaG56ug56iLXCI+5qGj5qGI6aaG56ug56iLPC9hPuOAi+OAgicsXG5cdFx0XHQnemgtaGFudCc6XG5cdFx0XHRcdCfmgqjlt7Lku5TntLDplrHoroDjgIHlhYXliIbkuobop6PkuKblkIzmhI/pgbXlrojmnKzntrLnq5nnmoTjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6VE9TXCIgdGl0bGU9XCLnlKjmiLbljZTorbBcIj7nlKjmiLbljZTorbA8L2E+44CL44CKPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlBJUFBcIiB0aXRsZT1cIuWAi+S6uuS/oeaBr+S/neitt+adoeS+i1wiPuWAi+S6uuS/oeaBr+S/neitt+adoeS+izwvYT7jgIvjgIo8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIvd2lraS9MSUI6R1BcIiB0aXRsZT1cIuaho+ahiOmmhueroOeoi1wiPuaho+ahiOmmhueroOeoizwvYT7jgIvjgIInLFxuXHRcdH0pLFxuXHRcdEVtcHR5MkZBOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1RoZSAyRkEgdmVyaWZpY2F0aW9uIGNvZGUgY2Fubm90IGJlIGVtcHR5Jyxcblx0XHRcdGphOiAnMkZB6KqN6Ki844Kz44O844OJ44GM5YWl5Yqb44GV44KM44Gm44GE44G+44Gb44KTJyxcblx0XHRcdCd6aC1oYW5zJzogJzJGQemqjOivgeeggeS4jeiDveS4uuepuicsXG5cdFx0XHQnemgtaGFudCc6ICcyRkHpqZforYnnorzkuI3og73niLLnqbonLFxuXHRcdH0pLFxuXHRcdEVtcHR5UGFzc3dvcmQ6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHBhc3N3b3JkIGNhbm5vdCBiZSBlbXB0eScsXG5cdFx0XHRqYTogJ+ODkeOCueODr+ODvOODieOBjOWFpeWKm+OBleOCjOOBpuOBhOOBvuOBm+OCkycsXG5cdFx0XHQnemgtaGFucyc6ICflr4bnoIHkuI3og73kuLrnqbonLFxuXHRcdFx0J3poLWhhbnQnOiAn5a+G56K85LiN6IO954iy56m6Jyxcblx0XHR9KSxcblx0XHRFbXB0eVVzZXJuYW1lT3JQYXNzd29yZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdUaGUgdXNlcm5hbWUgb3IgcGFzc3dvcmQgY2Fubm90IGJlIGVtcHR5Jyxcblx0XHRcdGphOiAn5Yip55So6ICF5ZCN44G+44Gf44Gv44OR44K544Ov44O844OJ44GM5YWl5Yqb44GV44KM44Gm44GE44G+44Gb44KTJyxcblx0XHRcdCd6aC1jbic6ICfnlKjmiLflkI3miJblr4bnoIHkuI3og73kuLrnqbonLFxuXHRcdFx0J3poLWhrJzogJ+eUqOaItuWQjeeoseaIluWvhueivOS4jeiDveeIsuepuicsXG5cdFx0XHQnemgtdHcnOiAn5L2/55So6ICF5ZCN56ix5oiW5a+G56K85LiN6IO954iy56m6Jyxcblx0XHR9KSxcblx0XHQnTmV0d29yayBlcnJvcic6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTmV0d29yayBlcnJvci4gUmVkaXJlY3RpbmcuLi4nLFxuXHRcdFx0amE6ICfjg43jg4Pjg4jjg6/jg7zjgq/jgqjjg6njg7zjgIHjg6rjg4DjgqTjg6zjgq/jg4jkuK0uLi4nLFxuXHRcdFx0J3poLWhhbnMnOiAn572R57uc5byC5bi444CC6YeN5a6a5ZCR5Lit4oCm4oCmJyxcblx0XHRcdCd6aC1oYW50JzogJ+e2sui3r+eVsOW4uOOAgumHjeaWsOWwjuWQkeS4reKApuKApicsXG5cdFx0fSksXG5cdFx0U2VsZWN0ZWRPck5vdDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJZiBzZWxlY3RlZCwgdGhlIGxvZ2luIHN0YXR1cyB3aWxsIGJlIGtlcHQgZm9yIDYgbW9udGhzLiBJZiBub3Qgc2VsZWN0ZWQsIGl0IHdpbGwgYmUga2VwdCBmb3IgMSBtb250aC4nLFxuXHRcdFx0amE6ICfjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgovjgajjg63jgrDjgqTjg7PnirbmhYvjgYw244O25pyI6ZaT5L+d5oyB44GV44KM44CB5YWl44KM44Gq44GE5aC05ZCI44GvMeODtuaciOmWk+S/neaMgeOBleOCjOOBvuOBmeOAgicsXG5cdFx0XHQnemgtaGFucyc6ICfli77pgInliJnkv53mjIHnmbvlvZXnirbmgIE25Liq5pyI77yM5LiN5Yu+6YCJ5YiZ5L+d5oyBMeS4quaciOOAgicsXG5cdFx0XHQnemgtaGFudCc6ICfli77pgbjliJnkv53mjIHnmbvlhaXni4DmhYs25YCL5pyI77yM5LiN5Yu+6YG45YmH5L+d5oyBMeWAi+aciOOAgicsXG5cdFx0fSksXG5cdFx0VG9vRnJlcXVlbnQ6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHVzZXIgbG9naW4gaXMgdG9vIGZyZXF1ZW50LCBwbGVhc2UgdHJ5IGFnYWluIGluIGZpdmUgbWludXRlcycsXG5cdFx0XHRqYTogJ+WIqeeUqOiAheOBjOmgu+e5geOBmeOBjuOCi+OBn+OCgeOAgTXliIblvozjgavlho3oqabooYzjgZfjgabjgY/jgaDjgZXjgYQnLFxuXHRcdFx0J3poLWNuJzogJ+eUqOaIt+eZu+W9lei/h+S6jumikee5ge+8jOivt+S6lOWIhumSn+WQjuWGjeivlScsXG5cdFx0XHQnemgtaGsnOiAn55So5oi255m75YWl6YGO5pa86aC757mB77yM6KuL5LqU5YiG6ZCY5b6M5YaN6KmmJyxcblx0XHRcdCd6aC10dyc6ICfkvb/nlKjogIXnmbvlhaXov4fkuo7popHnuYHvvIzor7fkupTliIbpkp/lkI7lho3or5UnLFxuXHRcdH0pLFxuXHRcdCdVbmV4cGVjdGVkIEFQSSByZXNwb25zZSc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVW5leHBlY3RlZCBBUEkgcmVzcG9uc2U6ICQxLiBSZWRpcmVjdGluZy4uLicsXG5cdFx0XHRqYTogJ+S6iOacn+OBm+OBrEFQSeOBruW/nOetlO+8miQx44CB44Oq44OA44Kk44Os44Kv44OI5LitLi4uJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aEj+WklueahEFQSeWTjeW6lO+8miQx44CC6YeN5a6a5ZCR5Lit4oCm4oCmJyxcblx0XHRcdCd6aC1oYW50JzogJ+aEj+WklueahEFQSemfv+aHie+8miQx44CC6YeN5paw5bCO5ZCR5Lit4oCm4oCmJyxcblx0XHR9KSxcblx0fTtcbn07XG5jb25zdCBpMThuTWVzc2FnZXMgPSBnZXRJMThuTWVzc2FnZXMoKTtcblxuY29uc3QgZ2V0TWVzc2FnZTogR2V0TWVzc2FnZXM8dHlwZW9mIGkxOG5NZXNzYWdlcz4gPSAoa2V5KSA9PiB7XG5cdHJldHVybiBpMThuTWVzc2FnZXNba2V5XSB8fCBrZXk7XG59O1xuXG5leHBvcnQge2dldE1lc3NhZ2V9O1xuIiwgImNvbnN0IGluaXRXaW5kb3dNYW5hZ2VyID0gKCk6IE9PLnVpLldpbmRvd01hbmFnZXIgPT4ge1xuXHRyZXR1cm4gbmV3IE9PLnVpLldpbmRvd01hbmFnZXIoKTtcbn07XG5cbmNvbnN0IHdpbmRvd01hbmFnZXI6IE9PLnVpLldpbmRvd01hbmFnZXIgPSBpbml0V2luZG93TWFuYWdlcigpO1xuXG5leHBvcnQge3dpbmRvd01hbmFnZXJ9O1xuIiwgImltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCBvb3VpQ29uZmlybSA9IGFzeW5jIChvcHRpb25zOiBPTy51aS5NZXNzYWdlRGlhbG9nLlNldHVwRGF0YU1hcCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuXHRjb25zdCBtZXNzYWdlRGlhbG9nOiBPTy51aS5NZXNzYWdlRGlhbG9nID0gbmV3IE9PLnVpLk1lc3NhZ2VEaWFsb2coKTtcblx0d2luZG93TWFuYWdlci5hZGRXaW5kb3dzKFttZXNzYWdlRGlhbG9nXSk7XG5cblx0Y29uc3QgaW5zdGFuY2U6IE9PLnVpLldpbmRvd0luc3RhbmNlID0gd2luZG93TWFuYWdlci5vcGVuV2luZG93KG1lc3NhZ2VEaWFsb2csIG9wdGlvbnMpO1xuXG5cdGNvbnN0IGRhdGE6IHZvaWQgPSBhd2FpdCBpbnN0YW5jZS5jbG9zZWQ7XG5cdGNvbnN0IF9kYXRhID0gZGF0YSBhcyB7YWN0aW9uOiBzdHJpbmd9IHwgdm9pZDtcblxuXHRyZXR1cm4gISEoX2RhdGE/LmFjdGlvbiA9PT0gJ2FjY2VwdCcpO1xufTtcblxuZXhwb3J0IHtvb3VpQ29uZmlybX07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuLi9pMThuJztcblxuY29uc3QgZ2VuZXJhdGVFbGVtZW50cyA9IChpc0FncmVlVG9zOiBib29sZWFuKSA9PiB7XG5cdGNvbnN0IG1lc3NhZ2VEaWFsb2c6IE9PLnVpLk1lc3NhZ2VEaWFsb2cgPSBuZXcgT08udWkuTWVzc2FnZURpYWxvZygpO1xuXG5cdGNvbnN0IG5hbWVJbnB1dDogT08udWkuVGV4dElucHV0V2lkZ2V0ID0gbmV3IE9PLnVpLlRleHRJbnB1dFdpZGdldCh7XG5cdFx0aWNvbjogJ3VzZXJBdmF0YXInLFxuXHRcdHBsYWNlaG9sZGVyOiBnZXRNZXNzYWdlKCdVc2VybmFtZScpLFxuXHRcdHZhbGlkYXRlOiAnbm9uLWVtcHR5Jyxcblx0fSk7XG5cblx0Y29uc3QgcHdkSW5wdXQ6IE9PLnVpLlRleHRJbnB1dFdpZGdldCA9IG5ldyBPTy51aS5UZXh0SW5wdXRXaWRnZXQoe1xuXHRcdGljb246ICdrZXknLFxuXHRcdHBsYWNlaG9sZGVyOiBnZXRNZXNzYWdlKCdQYXNzd29yZCcpLFxuXHRcdHR5cGU6ICdwYXNzd29yZCcsXG5cdFx0dmFsaWRhdGU6ICdub24tZW1wdHknLFxuXHR9KTtcblxuXHRjb25zdCBhZ3JlZVRvc0NoZWNrYm94OiBPTy51aS5DaGVja2JveElucHV0V2lkZ2V0ID0gbmV3IE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQoe1xuXHRcdHNlbGVjdGVkOiBpc0FncmVlVG9zLFxuXHR9KTtcblx0Y29uc3QgYWdyZWVUb3NMYXlvdXQ6IE9PLnVpLkZpZWxkTGF5b3V0PE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQ+ID0gbmV3IE9PLnVpLkZpZWxkTGF5b3V0KGFncmVlVG9zQ2hlY2tib3gsIHtcblx0XHRhbGlnbjogJ2lubGluZScsXG5cdFx0bGFiZWw6IGdldE1lc3NhZ2UoJ0kgYWdyZWUgd2l0aCB0aGUgcmVsZXZhbnQgdGVybXMnKSxcblx0fSk7XG5cblx0Y29uc3Qga2VlcExvZ2luQ2hlY2tib3g6IE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQgPSBuZXcgT08udWkuQ2hlY2tib3hJbnB1dFdpZGdldCgpO1xuXHRjb25zdCBrZWVwTG9naW5MYXlvdXQ6IE9PLnVpLkZpZWxkTGF5b3V0PE9PLnVpLkNoZWNrYm94SW5wdXRXaWRnZXQ+ID0gbmV3IE9PLnVpLkZpZWxkTGF5b3V0KGtlZXBMb2dpbkNoZWNrYm94LCB7XG5cdFx0YWxpZ246ICdpbmxpbmUnLFxuXHRcdGhlbHA6IGdldE1lc3NhZ2UoJ1NlbGVjdGVkT3JOb3QnKSxcblx0XHRsYWJlbDogZ2V0TWVzc2FnZSgnS2VlcCBtZSBsb2dnZWQgaW4nKSxcblx0fSk7XG5cblx0Y29uc3QgbGFiZWwgPSAoXG5cdFx0PGxhYmVsXG5cdFx0XHRjbGFzc05hbWU9e1snb28tdWktbGFiZWxXaWRnZXQnLCAnb28tdWktbGFiZWxFbGVtZW50LWxhYmVsJ119XG5cdFx0XHRzdHlsZT17e2ZvbnRTaXplOiAnOTAlJywgdGV4dEFsaWduOiAnanVzdGlmeSd9fVxuXHRcdC8+XG5cdCk7XG5cdGNvbnN0ICRsYWJlbCA9ICQobGFiZWwpIGFzIEpRdWVyeTtcblxuXHRjb25zdCAkYWdyZWVUb3M6IEpRdWVyeSA9ICRsYWJlbC5jbG9uZSgpLmFwcGVuZChhZ3JlZVRvc0xheW91dC4kZWxlbWVudCk7XG5cdGNvbnN0ICRmb3Jnb3RQYXNzd29yZDogSlF1ZXJ5ID0gJGxhYmVsXG5cdFx0LmNsb25lKClcblx0XHQuY3NzKCdmbG9hdCcsICdyaWdodCcpXG5cdFx0LmFwcGVuZChcblx0XHRcdDxhIGhyZWY9e213LnV0aWwuZ2V0VXJsKCdTcGVjaWFsOlBhc3N3b3JkUmVzZXQnKX0gdGl0bGU9e2dldE1lc3NhZ2UoJ1Jlc2V0IHBhc3N3b3JkJyl9PlxuXHRcdFx0XHR7Z2V0TWVzc2FnZSgnRm9yZ290IHBhc3N3b3JkPycpfVxuXHRcdFx0PC9hPlxuXHRcdCk7XG5cdGNvbnN0ICRpbnB1dEJveDogSlF1ZXJ5ID0gJGxhYmVsXG5cdFx0LmNsb25lKClcblx0XHQuY3NzKHtcblx0XHRcdGRpc3BsYXk6ICdibG9jaycsXG5cdFx0XHQnZm9udC1zaXplJzogJ2luaGVyaXQnLFxuXHRcdFx0cGFkZGluZzogJzZweCAwJyxcblx0XHR9KVxuXHRcdC5hcHBlbmQobmFtZUlucHV0LiRlbGVtZW50LmNzcygnbWFyZ2luLWJvdHRvbScsICc2cHgnKSwgcHdkSW5wdXQuJGVsZW1lbnQpO1xuXHRjb25zdCAkdG9zTGFiZWw6IEpRdWVyeSA9ICRsYWJlbC5jbG9uZSgpLmh0bWwoZ2V0TWVzc2FnZSgnaGVscCBmb3IgSSBhZ3JlZSB3aXRoIHRoZSByZWxldmFudCB0ZXJtcycpKTtcblx0Y29uc3QgJHJlbWVtYmVyTWU6IEpRdWVyeSA9ICRsYWJlbC5jbG9uZSgpLmFwcGVuZChrZWVwTG9naW5MYXlvdXQuJGVsZW1lbnQuY3NzKCdtYXJnaW4tdG9wJywgJzZweCcpKTtcblxuXHRyZXR1cm4ge1xuXHRcdCRhZ3JlZVRvcyxcblx0XHQkZm9yZ290UGFzc3dvcmQsXG5cdFx0JGlucHV0Qm94LFxuXHRcdCRyZW1lbWJlck1lLFxuXHRcdCR0b3NMYWJlbCxcblx0XHRhZ3JlZVRvc0NoZWNrYm94LFxuXHRcdGtlZXBMb2dpbkNoZWNrYm94LFxuXHRcdG1lc3NhZ2VEaWFsb2csXG5cdFx0bmFtZUlucHV0LFxuXHRcdHB3ZElucHV0LFxuXHR9O1xufTtcblxuZXhwb3J0IHtnZW5lcmF0ZUVsZW1lbnRzfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAnZXh0LmdhZGdldC5SZWFjdCc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHtyZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyfSBmcm9tICcuL3JlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXInO1xuaW1wb3J0IHt3aW5kb3dNYW5hZ2VyfSBmcm9tICcuLi9pbml0V2luZG93TWFuYWdlcic7XG5cbmNvbnN0IG9vdWlQcm9tcHQgPSBhc3luYyAocmV0eXBlUGFzc3dvcmQ6IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcblx0Y29uc3QgY29kZURpYWxvZzogT08udWkuTWVzc2FnZURpYWxvZyA9IG5ldyBPTy51aS5NZXNzYWdlRGlhbG9nKCk7XG5cdGNvbnN0IGNvZGVJbnB1dDogT08udWkuVGV4dElucHV0V2lkZ2V0ID0gbmV3IE9PLnVpLlRleHRJbnB1dFdpZGdldCh7XG5cdFx0aWNvbjogJ2tleScsXG5cdFx0cGxhY2Vob2xkZXI6IHJldHlwZVBhc3N3b3JkID8gZ2V0TWVzc2FnZSgnTmV3IHBhc3N3b3JkJykgOiBnZXRNZXNzYWdlKCc2LWRpZ2l0IG51bWJlcicpLFxuXHRcdHZhbGlkYXRlOiAnaW50ZWdlcicsXG5cdH0pO1xuXG5cdGNvbnN0IGNvZGVMYXlvdXQ6IE9PLnVpLkZpZWxkTGF5b3V0PE9PLnVpLlRleHRJbnB1dFdpZGdldD4gPSBuZXcgT08udWkuRmllbGRMYXlvdXQoY29kZUlucHV0LCB7XG5cdFx0YWxpZ246ICd0b3AnLFxuXHRcdGxhYmVsOiAkKFxuXHRcdFx0PGIgY2xhc3NOYW1lPXtbJ29vLXVpLW1lc3NhZ2VEaWFsb2ctdGl0bGUnLCAnb28tdWktd2luZG93LWhlYWQnXX0+XG5cdFx0XHRcdHtyZXR5cGVQYXNzd29yZCA/IGdldE1lc3NhZ2UoJ0VudGVyIHBhc3N3b3JkJykgOiBnZXRNZXNzYWdlKCdFbnRlciAyRkEgdmVyaWZpY2F0aW9uIGNvZGUnKX1cblx0XHRcdDwvYj5cblx0XHQpLFxuXHR9KTtcblxuXHR3aW5kb3dNYW5hZ2VyLmFkZFdpbmRvd3MoW2NvZGVEaWFsb2ddKTtcblxuXHRjb25zdCBpbnN0YW5jZTogT08udWkuV2luZG93SW5zdGFuY2UgPSB3aW5kb3dNYW5hZ2VyLm9wZW5XaW5kb3coY29kZURpYWxvZywge1xuXHRcdG1lc3NhZ2U6IGNvZGVMYXlvdXQuJGVsZW1lbnQsXG5cdH0pO1xuXG5cdHJlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXIoKTtcblxuXHR2b2lkIGluc3RhbmNlLm9wZW5lZC50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRjb2RlSW5wdXQub24oJ2VudGVyJywgKCk6IHZvaWQgPT4ge1xuXHRcdFx0KHdpbmRvd01hbmFnZXIuZ2V0Q3VycmVudFdpbmRvdygpIGFzIE9PLnVpLldpbmRvdykuY2xvc2Uoe1xuXHRcdFx0XHRhY3Rpb246ICdhY2NlcHQnLFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0Y29kZUlucHV0LmZvY3VzKCk7XG5cdH0pO1xuXG5cdGNvbnN0IGRhdGE6IHZvaWQgPSBhd2FpdCBpbnN0YW5jZS5jbG9zZWQ7XG5cdGNvbnN0IF9kYXRhID0gZGF0YSBhcyB7YWN0aW9uOiBzdHJpbmd9IHwgdm9pZDtcblxuXHRyZXR1cm4gX2RhdGE/LmFjdGlvbiA9PT0gJ2FjY2VwdCcgPyBjb2RlSW5wdXQuZ2V0VmFsdWUoKSA6IG51bGw7XG59O1xuXG5leHBvcnQge29vdWlQcm9tcHR9O1xuIiwgImltcG9ydCB7d2luZG93TWFuYWdlcn0gZnJvbSAnLi4vaW5pdFdpbmRvd01hbmFnZXInO1xuXG5jb25zdCByZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuXHQkKHdpbmRvdykub2ZmKHtcblx0XHQnb3JpZW50YXRpb25jaGFuZ2UgcmVzaXplJzogKHdpbmRvd01hbmFnZXIgYXMgdW5rbm93biBhcyB7b25XaW5kb3dSZXNpemVIYW5kbGVyOiAoKSA9PiB2b2lkfSlcblx0XHRcdC5vbldpbmRvd1Jlc2l6ZUhhbmRsZXIsXG5cdH0pO1xufTtcblxuZXhwb3J0IHtyZW1vdmVXaW5kb3dSZXNpemVIYW5kbGVyfTtcbiIsICJpbXBvcnQge2FwaX0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQge3RvYXN0aWZ5fSBmcm9tICdleHQuZ2FkZ2V0LlRvYXN0aWZ5JztcblxuY29uc3QgcXVlcnlMb2dpblRva2VuID0gYXN5bmMgKFxuXHR0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlXG4pOiBQcm9taXNlPHtcblx0bG9naW5Ub2tlbjogc3RyaW5nO1xuXHR0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlO1xufT4gPT4ge1xuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoe1xuXHRcdHRleHQ6IGdldE1lc3NhZ2UoJ0dldHRpbmcgbG9naW4gdG9rZW4nKSxcblx0fSk7XG5cblx0Y29uc3QgbG9naW5Ub2tlbjogc3RyaW5nID0gYXdhaXQgYXBpLmdldFRva2VuKCdsb2dpbicpO1xuXG5cdHRvYXN0aWZ5SW5zdGFuY2UuaGlkZVRvYXN0KCk7XG5cdHRvYXN0aWZ5SW5zdGFuY2UgPSB0b2FzdGlmeSh7XG5cdFx0dGV4dDogZ2V0TWVzc2FnZSgnTG9naW4gdG9rZW4gZ2V0dGVkJyksXG5cdFx0ZHVyYXRpb246IC0xLFxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGxvZ2luVG9rZW4sXG5cdFx0dG9hc3RpZnlJbnN0YW5jZSxcblx0fTtcbn07XG5cbmV4cG9ydCB7cXVlcnlMb2dpblRva2VufTtcbiIsICJpbXBvcnQge2RlbGF5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuaW1wb3J0IHt3aW5kb3dNYW5hZ2VyfSBmcm9tICcuLi9pbml0V2luZG93TWFuYWdlcic7XG5cbmNvbnN0IHJlZGlyZWN0T3JpZ2luTG9naW5QYWdlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRhd2FpdCB3aW5kb3dNYW5hZ2VyLmNsZWFyV2luZG93cygpO1xuXHRhd2FpdCBkZWxheSgzICogMTAwMCk7XG5cdGxvY2F0aW9uLmhyZWYgPSBtdy51dGlsLmdldFVybCgnU3BlY2lhbDpVc2VybG9naW4nKTtcbn07XG5cbmV4cG9ydCB7cmVkaXJlY3RPcmlnaW5Mb2dpblBhZ2V9O1xuIiwgImltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQge3RvYXN0aWZ5fSBmcm9tICdleHQuZ2FkZ2V0LlRvYXN0aWZ5JztcblxuY29uc3Qgc2hvd0Vycm9yID0gKGVycm9yOiB1bmtub3duLCB0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlKTogdm9pZCA9PiB7XG5cdGNvbnNvbGUuZXJyb3IoJ1tBamF4TG9naW5dIEFqYXggZXJyb3I6JywgZXJyb3IpO1xuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHR0b2FzdGlmeShcblx0XHR7XG5cdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdOZXR3b3JrIGVycm9yJyksXG5cdFx0XHRjbG9zZTogdHJ1ZSxcblx0XHRcdGR1cmF0aW9uOiAtMSxcblx0XHR9LFxuXHRcdCdlcnJvcidcblx0KTtcbn07XG5cbmV4cG9ydCB7c2hvd0Vycm9yfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNDLElBQUFBLHVCQUF3QjtBQUN4QixJQUFBQyxVQUFXOztBQ0RaLElBQUFDLHNCQUEyQ0MsUUFBQSxpQkFBQTs7QUNEM0MsSUFBQUMsb0JBQWtDRCxRQUFBLGdDQUFBO0FBRWxDLElBQU1FLGNBQWNBLENBQ25CQyxVQUNBQyxrQkFDVTtBQUNWRCxXQUFTRSxHQUFHLFVBQUEsR0FBU0osa0JBQUFLLHFCQUFvQkYsYUFBYSxDQUFDO0FBQ3ZERCxXQUFTRSxHQUFHLFdBQVdELGFBQWE7QUFDckM7O0FDUEEsSUFBQUcscUJBQXdCUCxRQUFBLGlCQUFBO0FBVXhCLElBQU1RLE9BQUEsR0FBY0QsbUJBQUFFLFdBQUEsYUFBQUMsT0FBK0JaLE9BQU8sQ0FBRTs7QUNWNUQsSUFBQWEsc0JBQWtCQyxRQUFBWixRQUFBLGtCQUFBLEdBQUEsQ0FBQTs7QUNEbEIsSUFBQWEscUJBQWtCRCxRQUFBWixRQUFBLGtCQUFBLEdBQUEsQ0FBQTs7QUNBbEIsSUFBQWMscUJBQXVCZCxRQUFBLGlCQUFBO0FBRXZCLElBQU1lLGtCQUFrQkEsTUFBTTtBQUM3QixTQUFPO0lBQ04sbUJBQUEsR0FBa0JELG1CQUFBRSxVQUFTO01BQzFCQyxJQUFJO01BQ0pDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDREMsU0FBQSxHQUFRTCxtQkFBQUUsVUFBUztNQUNoQkMsSUFBSTtNQUNKQyxJQUFJO01BQ0pFLElBQUk7SUFDTCxDQUFD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O0lBQzlDOUgsV0FBV0EsTUFBTTtJQUFDO0VBQ25CO0FBRUEsUUFBTWhFLGdCQUFpQitMLFdBQXlEO0FBQy9FLFFBQUksRUFBQSxHQUFDcE0sb0JBQUFxTSxxQkFBb0JELEtBQUssR0FBRztBQUNoQztJQUNEO0FBRUFBLFVBQU1FLGVBQWU7QUFDckI1QyxjQUFVeUMsb0JBQW9CO0VBQy9CO0FBQ0FoTSxjQUFZNEwsZUFBZTFMLGFBQWE7QUFDekMsQ0FBQzsiLAogICJuYW1lcyI6IFsibG9naW5FbGVtZW50U2VsZWN0b3IiLCAidmVyc2lvbiIsICJpbXBvcnRfZXh0X2dhZGdldDEzIiwgInJlcXVpcmUiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiYWRkTGlzdGVuZXIiLCAiJGVsZW1lbnQiLCAiZXZlbnRMaXN0ZW5lciIsICJvbiIsICJmaWx0ZXJBbHRlcmVkQ2xpY2tzIiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJhcGkiLCAiaW5pdE13QXBpIiwgImNvbmNhdCIsICJpbXBvcnRfZXh0X2dhZGdldDExIiwgIl9fdG9FU00iLCAiaW1wb3J0X2V4dF9nYWRnZXQ0IiwgImltcG9ydF9leHRfZ2FkZ2V0MyIsICJnZXRJMThuTWVzc2FnZXMiLCAibG9jYWxpemUiLCAiZW4iLCAiamEiLCAiQ2FuY2VsIiwgInpoIiwgIkxvZ2luIiwgIlBhc3N3b3JkIiwgIlVzZXJuYW1lIiwgIkFncmVlZE9yTm90IiwgIkRvdWJsZUNoZWNrQWdyZWVkT3JOb3QiLCAiRW1wdHkyRkEiLCAiRW1wdHlQYXNzd29yZCIsICJFbXB0eVVzZXJuYW1lT3JQYXNzd29yZCIsICJTZWxlY3RlZE9yTm90IiwgIlRvb0ZyZXF1ZW50IiwgImkxOG5NZXNzYWdlcyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJpbml0V2luZG93TWFuYWdlciIsICJPTyIsICJ1aSIsICJXaW5kb3dNYW5hZ2VyIiwgIndpbmRvd01hbmFnZXIiLCAib291aUNvbmZpcm0iLCAiX3JlZiIsICJfYXN5bmNUb0dlbmVyYXRvciIsICJvcHRpb25zIiwgIm1lc3NhZ2VEaWFsb2ciLCAiTWVzc2FnZURpYWxvZyIsICJhZGRXaW5kb3dzIiwgImluc3RhbmNlIiwgIm9wZW5XaW5kb3ciLCAiZGF0YSIsICJjbG9zZWQiLCAiX2RhdGEiLCAiYWN0aW9uIiwgIl94IiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJpbXBvcnRfZXh0X2dhZGdldDUiLCAiY2hlY2tWYWxpZCIsICJfcmVmMiIsICJhZ3JlZVRvc0NoZWNrYm94IiwgIm5hbWVJbnB1dCIsICJwd2RJbnB1dCIsICJ0b2FzdGlmeUluc3RhbmNlIiwgImlzQWdyZWVUb3MiLCAiaXNTZWxlY3RlZCIsICJpc0ZpbGwiLCAiZ2V0VmFsdWUiLCAidHJpbSIsICJpbmNsdWRlcyIsICJoaWRlVG9hc3QiLCAiY2xlYXJXaW5kb3dzIiwgIm1lc3NhZ2UiLCAiJCIsICJkZWZhdWx0IiwgImNyZWF0ZUVsZW1lbnQiLCAiaW5uZXJIVE1MIiwgImFjdGlvbnMiLCAibGFiZWwiLCAiZmxhZ3MiLCAidG9hc3RpZnkiLCAidGV4dCIsICJkdXJhdGlvbiIsICJpc1ZhbGlkIiwgIl94MiIsICJfeDMiLCAiaW1wb3J0X2V4dF9nYWRnZXQ2IiwgImdlbmVyYXRlRWxlbWVudHMiLCAiVGV4dElucHV0V2lkZ2V0IiwgImljb24iLCAicGxhY2Vob2xkZXIiLCAidmFsaWRhdGUiLCAidHlwZSIsICJDaGVja2JveElucHV0V2lkZ2V0IiwgInNlbGVjdGVkIiwgImFncmVlVG9zTGF5b3V0IiwgIkZpZWxkTGF5b3V0IiwgImFsaWduIiwgImtlZXBMb2dpbkNoZWNrYm94IiwgImtlZXBMb2dpbkxheW91dCIsICJoZWxwIiwgImNsYXNzTmFtZSIsICJzdHlsZSIsICJmb250U2l6ZSIsICJ0ZXh0QWxpZ24iLCAiJGxhYmVsIiwgIiRhZ3JlZVRvcyIsICJjbG9uZSIsICJhcHBlbmQiLCAiJGZvcmdvdFBhc3N3b3JkIiwgImNzcyIsICJocmVmIiwgIm13IiwgInV0aWwiLCAiZ2V0VXJsIiwgInRpdGxlIiwgIiRpbnB1dEJveCIsICJkaXNwbGF5IiwgInBhZGRpbmciLCAiJHRvc0xhYmVsIiwgImh0bWwiLCAiJHJlbWVtYmVyTWUiLCAiaW1wb3J0X2V4dF9nYWRnZXQ3IiwgInJlbW92ZVdpbmRvd1Jlc2l6ZUhhbmRsZXIiLCAid2luZG93IiwgIm9mZiIsICJvbldpbmRvd1Jlc2l6ZUhhbmRsZXIiLCAib291aVByb21wdCIsICJfcmVmMyIsICJyZXR5cGVQYXNzd29yZCIsICJjb2RlRGlhbG9nIiwgImNvZGVJbnB1dCIsICJjb2RlTGF5b3V0IiwgIm9wZW5lZCIsICJ0aGVuIiwgImdldEN1cnJlbnRXaW5kb3ciLCAiY2xvc2UiLCAiZm9jdXMiLCAiX3g0IiwgImltcG9ydF9leHRfZ2FkZ2V0OCIsICJxdWVyeUxvZ2luVG9rZW4iLCAiX3JlZjQiLCAibG9naW5Ub2tlbiIsICJnZXRUb2tlbiIsICJfeDUiLCAiaW1wb3J0X2V4dF9nYWRnZXQ5IiwgInJlZGlyZWN0T3JpZ2luTG9naW5QYWdlIiwgIl9yZWY1IiwgImRlbGF5IiwgImxvY2F0aW9uIiwgImltcG9ydF9leHRfZ2FkZ2V0MTAiLCAic2hvd0Vycm9yIiwgImVycm9yIiwgImNvbnNvbGUiLCAiaW1wb3J0X2V4dF9nYWRnZXQxMiIsICJhamF4TG9naW4iLCAibG9naW4iLCAiX3JlZjYiLCAibG9naW5Db250aW51ZSIsICJfcmVzcG9uc2UkY2xpZW50bG9naW4iLCAiX3Jlc3BvbnNlJGNsaWVudGxvZ2luMiIsICJwYXJhbXMiLCAiZm9ybWF0IiwgImZvcm1hdHZlcnNpb24iLCAibG9naW50b2tlbiIsICJsb2dpbnJldHVybnVybCIsICJ1c2VybmFtZSIsICJwYXNzd29yZCIsICJyZW1lbWJlck1lIiwgImxvZ2luY29udGludWUiLCAidmFsdWUiLCAicmV0eXBlIiwgIk9BVEhUb2tlbiIsICJyZXNwb25zZSIsICJwb3N0IiwgInN0YXR1cyIsICJyZWxvYWQiLCAibWVzc2FnZWNvZGUiLCAicmVwbGFjZSIsICJjaGVjayIsICJfcmVmNyIsICJsYXN0SXNBZ3JlZVRvcyIsICJsYXN0VG9hc3RpZnlJbnN0YW5jZSIsICJnZXRBY3Rpb25Qcm9jZXNzIiwgIlByb2Nlc3MiLCAic2l6ZSIsICJnZXRCb2R5IiwgImluaXRBdXRvTG9naW4iLCAiJGJvZHkiLCAid2dVc2VyTmFtZSIsICJjb25maWciLCAiZ2V0IiwgIiRsb2dpbkVsZW1lbnQiLCAiZmluZCIsICJsZW5ndGgiLCAiYXBwZW5kVG8iLCAiZmFrZVRvYXN0aWZ5SW5zdGFuY2UiLCAiZXZlbnQiLCAiY2hlY2tBMTF5Q29uZmlybUtleSIsICJwcmV2ZW50RGVmYXVsdCJdCn0K diff --git a/dist/Clipboard/Clipboard.js b/dist/Clipboard/Clipboard.js index 8eff5e48..3a2a1634 100644 --- a/dist/Clipboard/Clipboard.js +++ b/dist/Clipboard/Clipboard.js @@ -26,9 +26,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports2, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -42,9 +42,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports2, module2) { "use strict"; module2.exports = function(exec) { try { @@ -56,9 +56,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -69,9 +69,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -82,9 +82,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -94,9 +94,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -108,9 +108,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -123,9 +123,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -139,9 +139,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -152,9 +152,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -169,9 +169,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -179,9 +179,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -192,9 +192,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -204,9 +204,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports2, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -217,9 +217,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -228,9 +228,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -243,18 +243,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -263,9 +263,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -290,9 +290,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -306,18 +306,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -333,9 +333,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -348,9 +348,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -362,9 +362,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports2, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -375,9 +375,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -393,17 +393,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports2, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -418,9 +418,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports2, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -428,18 +428,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports2, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -448,9 +448,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports2, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -460,9 +460,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -473,9 +473,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -487,9 +487,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -509,9 +509,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -537,9 +537,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -550,9 +550,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -564,9 +564,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -581,9 +581,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -606,9 +606,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -622,9 +622,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports2, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -636,9 +636,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -682,9 +682,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -698,9 +698,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -718,9 +718,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -735,9 +735,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -746,9 +746,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports2, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -759,17 +759,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports2, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -842,9 +842,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -897,9 +897,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -932,9 +932,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports2, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -945,9 +945,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -957,9 +957,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -971,9 +971,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports2, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -984,9 +984,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -995,9 +995,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports2, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1030,9 +1030,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1054,9 +1054,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) { "use strict"; module2.exports = [ "constructor", @@ -1070,9 +1070,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1083,17 +1083,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) { "use strict"; exports2.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1109,9 +1109,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1131,9 +1131,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports2, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1152,9 +1152,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1195,9 +1195,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports2, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1206,9 +1206,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1233,9 +1233,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports2, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1246,9 +1246,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $ = require_export(); var toObject = require_to_object(); @@ -2055,4 +2055,4 @@ var import_clipboard = __toESM(require_clipboard()); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jbGlwYm9hcmRAMi4wLjExL25vZGVfbW9kdWxlcy9jbGlwYm9hcmQvZGlzdC9jbGlwYm9hcmQuanMiLCAic3JjL0NsaXBib2FyZC9DbGlwYm9hcmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggPD0gMTIxIGFuZCBTYWZhcmkgPD0gMTUuNDsgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIi8qIVxuICogY2xpcGJvYXJkLmpzIHYyLjAuMTFcbiAqIGh0dHBzOi8vY2xpcGJvYXJkanMuY29tL1xuICpcbiAqIExpY2Vuc2VkIE1JVCDCqSBaZW5vIFJvY2hhXG4gKi9cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkNsaXBib2FyZEpTXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkNsaXBib2FyZEpTXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKCkgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKHtcblxuLyoqKi8gNjg2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xuICBcImRlZmF1bHRcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIGNsaXBib2FyZDsgfVxufSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdGlueS1lbWl0dGVyL2luZGV4LmpzXG52YXIgdGlueV9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzkpO1xudmFyIHRpbnlfZW1pdHRlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih0aW55X2VtaXR0ZXIpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9nb29kLWxpc3RlbmVyL3NyYy9saXN0ZW4uanNcbnZhciBsaXN0ZW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3MCk7XG52YXIgbGlzdGVuX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGxpc3Rlbik7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3NlbGVjdC9zcmMvc2VsZWN0LmpzXG52YXIgc3JjX3NlbGVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oODE3KTtcbnZhciBzZWxlY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc3JjX3NlbGVjdCk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tbW9uL2NvbW1hbmQuanNcbi8qKlxuICogRXhlY3V0ZXMgYSBnaXZlbiBvcGVyYXRpb24gdHlwZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBjb21tYW5kKHR5cGUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZXhlY0NvbW1hbmQodHlwZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2FjdGlvbnMvY3V0LmpzXG5cblxuLyoqXG4gKiBDdXQgYWN0aW9uIHdyYXBwZXIuXG4gKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gdGFyZ2V0XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxudmFyIENsaXBib2FyZEFjdGlvbkN1dCA9IGZ1bmN0aW9uIENsaXBib2FyZEFjdGlvbkN1dCh0YXJnZXQpIHtcbiAgdmFyIHNlbGVjdGVkVGV4dCA9IHNlbGVjdF9kZWZhdWx0KCkodGFyZ2V0KTtcbiAgY29tbWFuZCgnY3V0Jyk7XG4gIHJldHVybiBzZWxlY3RlZFRleHQ7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhY3Rpb25zX2N1dCA9IChDbGlwYm9hcmRBY3Rpb25DdXQpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvbW1vbi9jcmVhdGUtZmFrZS1lbGVtZW50LmpzXG4vKipcbiAqIENyZWF0ZXMgYSBmYWtlIHRleHRhcmVhIGVsZW1lbnQgd2l0aCBhIHZhbHVlLlxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFrZUVsZW1lbnQodmFsdWUpIHtcbiAgdmFyIGlzUlRMID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJykgPT09ICdydGwnO1xuICB2YXIgZmFrZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOyAvLyBQcmV2ZW50IHpvb21pbmcgb24gaU9TXG5cbiAgZmFrZUVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTJwdCc7IC8vIFJlc2V0IGJveCBtb2RlbFxuXG4gIGZha2VFbGVtZW50LnN0eWxlLmJvcmRlciA9ICcwJztcbiAgZmFrZUVsZW1lbnQuc3R5bGUucGFkZGluZyA9ICcwJztcbiAgZmFrZUVsZW1lbnQuc3R5bGUubWFyZ2luID0gJzAnOyAvLyBNb3ZlIGVsZW1lbnQgb3V0IG9mIHNjcmVlbiBob3Jpem9udGFsbHlcblxuICBmYWtlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIGZha2VFbGVtZW50LnN0eWxlW2lzUlRMID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSAnLTk5OTlweCc7IC8vIE1vdmUgZWxlbWVudCB0byB0aGUgc2FtZSBwb3NpdGlvbiB2ZXJ0aWNhbGx5XG5cbiAgdmFyIHlQb3NpdGlvbiA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICBmYWtlRWxlbWVudC5zdHlsZS50b3AgPSBcIlwiLmNvbmNhdCh5UG9zaXRpb24sIFwicHhcIik7XG4gIGZha2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XG4gIGZha2VFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gIHJldHVybiBmYWtlRWxlbWVudDtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9hY3Rpb25zL2NvcHkuanNcblxuXG5cbi8qKlxuICogQ3JlYXRlIGZha2UgY29weSBhY3Rpb24gd3JhcHBlciB1c2luZyBhIGZha2UgZWxlbWVudC5cbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxudmFyIGZha2VDb3B5QWN0aW9uID0gZnVuY3Rpb24gZmFrZUNvcHlBY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIGZha2VFbGVtZW50ID0gY3JlYXRlRmFrZUVsZW1lbnQodmFsdWUpO1xuICBvcHRpb25zLmNvbnRhaW5lci5hcHBlbmRDaGlsZChmYWtlRWxlbWVudCk7XG4gIHZhciBzZWxlY3RlZFRleHQgPSBzZWxlY3RfZGVmYXVsdCgpKGZha2VFbGVtZW50KTtcbiAgY29tbWFuZCgnY29weScpO1xuICBmYWtlRWxlbWVudC5yZW1vdmUoKTtcbiAgcmV0dXJuIHNlbGVjdGVkVGV4dDtcbn07XG4vKipcbiAqIENvcHkgYWN0aW9uIHdyYXBwZXIuXG4gKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5cblxudmFyIENsaXBib2FyZEFjdGlvbkNvcHkgPSBmdW5jdGlvbiBDbGlwYm9hcmRBY3Rpb25Db3B5KHRhcmdldCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keVxuICB9O1xuICB2YXIgc2VsZWN0ZWRUZXh0ID0gJyc7XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgc2VsZWN0ZWRUZXh0ID0gZmFrZUNvcHlBY3Rpb24odGFyZ2V0LCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmICFbJ3RleHQnLCAnc2VhcmNoJywgJ3VybCcsICd0ZWwnLCAncGFzc3dvcmQnXS5pbmNsdWRlcyh0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQudHlwZSkpIHtcbiAgICAvLyBJZiBpbnB1dCB0eXBlIGRvZXNuJ3Qgc3VwcG9ydCBgc2V0U2VsZWN0aW9uUmFuZ2VgLiBTaW11bGF0ZSBpdC4gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2V0U2VsZWN0aW9uUmFuZ2VcbiAgICBzZWxlY3RlZFRleHQgPSBmYWtlQ29weUFjdGlvbih0YXJnZXQudmFsdWUsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlbGVjdGVkVGV4dCA9IHNlbGVjdF9kZWZhdWx0KCkodGFyZ2V0KTtcbiAgICBjb21tYW5kKCdjb3B5Jyk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWRUZXh0O1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYWN0aW9uc19jb3B5ID0gKENsaXBib2FyZEFjdGlvbkNvcHkpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2FjdGlvbnMvZGVmYXVsdC5qc1xuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5cblxuLyoqXG4gKiBJbm5lciBmdW5jdGlvbiB3aGljaCBwZXJmb3JtcyBzZWxlY3Rpb24gZnJvbSBlaXRoZXIgYHRleHRgIG9yIGB0YXJnZXRgXG4gKiBwcm9wZXJ0aWVzIGFuZCB0aGVuIGV4ZWN1dGVzIGNvcHkgb3IgY3V0IG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbnZhciBDbGlwYm9hcmRBY3Rpb25EZWZhdWx0ID0gZnVuY3Rpb24gQ2xpcGJvYXJkQWN0aW9uRGVmYXVsdCgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAvLyBEZWZpbmVzIGJhc2UgcHJvcGVydGllcyBwYXNzZWQgZnJvbSBjb25zdHJ1Y3Rvci5cbiAgdmFyIF9vcHRpb25zJGFjdGlvbiA9IG9wdGlvbnMuYWN0aW9uLFxuICAgICAgYWN0aW9uID0gX29wdGlvbnMkYWN0aW9uID09PSB2b2lkIDAgPyAnY29weScgOiBfb3B0aW9ucyRhY3Rpb24sXG4gICAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgIHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0LFxuICAgICAgdGV4dCA9IG9wdGlvbnMudGV4dDsgLy8gU2V0cyB0aGUgYGFjdGlvbmAgdG8gYmUgcGVyZm9ybWVkIHdoaWNoIGNhbiBiZSBlaXRoZXIgJ2NvcHknIG9yICdjdXQnLlxuXG4gIGlmIChhY3Rpb24gIT09ICdjb3B5JyAmJiBhY3Rpb24gIT09ICdjdXQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwiYWN0aW9uXCIgdmFsdWUsIHVzZSBlaXRoZXIgXCJjb3B5XCIgb3IgXCJjdXRcIicpO1xuICB9IC8vIFNldHMgdGhlIGB0YXJnZXRgIHByb3BlcnR5IHVzaW5nIGFuIGVsZW1lbnQgdGhhdCB3aWxsIGJlIGhhdmUgaXRzIGNvbnRlbnQgY29waWVkLlxuXG5cbiAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRhcmdldCAmJiBfdHlwZW9mKHRhcmdldCkgPT09ICdvYmplY3QnICYmIHRhcmdldC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2NvcHknICYmIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwidGFyZ2V0XCIgYXR0cmlidXRlLiBQbGVhc2UgdXNlIFwicmVhZG9ubHlcIiBpbnN0ZWFkIG9mIFwiZGlzYWJsZWRcIiBhdHRyaWJ1dGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2N1dCcgJiYgKHRhcmdldC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHwgdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwidGFyZ2V0XCIgYXR0cmlidXRlLiBZb3UgY2FuXFwndCBjdXQgdGV4dCBmcm9tIGVsZW1lbnRzIHdpdGggXCJyZWFkb25seVwiIG9yIFwiZGlzYWJsZWRcIiBhdHRyaWJ1dGVzJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBcInRhcmdldFwiIHZhbHVlLCB1c2UgYSB2YWxpZCBFbGVtZW50Jyk7XG4gICAgfVxuICB9IC8vIERlZmluZSBzZWxlY3Rpb24gc3RyYXRlZ3kgYmFzZWQgb24gYHRleHRgIHByb3BlcnR5LlxuXG5cbiAgaWYgKHRleHQpIHtcbiAgICByZXR1cm4gYWN0aW9uc19jb3B5KHRleHQsIHtcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyXG4gICAgfSk7XG4gIH0gLy8gRGVmaW5lcyB3aGljaCBzZWxlY3Rpb24gc3RyYXRlZ3kgYmFzZWQgb24gYHRhcmdldGAgcHJvcGVydHkuXG5cblxuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGFjdGlvbiA9PT0gJ2N1dCcgPyBhY3Rpb25zX2N1dCh0YXJnZXQpIDogYWN0aW9uc19jb3B5KHRhcmdldCwge1xuICAgICAgY29udGFpbmVyOiBjb250YWluZXJcbiAgICB9KTtcbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYWN0aW9uc19kZWZhdWx0ID0gKENsaXBib2FyZEFjdGlvbkRlZmF1bHQpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NsaXBib2FyZC5qc1xuZnVuY3Rpb24gY2xpcGJvYXJkX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgY2xpcGJvYXJkX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBjbGlwYm9hcmRfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIGNsaXBib2FyZF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKGNsaXBib2FyZF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5cblxuXG5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtTdHJpbmd9IHN1ZmZpeFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlVmFsdWUoc3VmZml4LCBlbGVtZW50KSB7XG4gIHZhciBhdHRyaWJ1dGUgPSBcImRhdGEtY2xpcGJvYXJkLVwiLmNvbmNhdChzdWZmaXgpO1xuXG4gIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIHdoaWNoIHRha2VzIG9uZSBvciBtb3JlIGVsZW1lbnRzLCBhZGRzIGV2ZW50IGxpc3RlbmVycyB0byB0aGVtLFxuICogYW5kIGluc3RhbnRpYXRlcyBhIG5ldyBgQ2xpcGJvYXJkQWN0aW9uYCBvbiBlYWNoIGNsaWNrLlxuICovXG5cblxudmFyIENsaXBib2FyZCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0VtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKENsaXBib2FyZCwgX0VtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ2xpcGJvYXJkKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IHRyaWdnZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIENsaXBib2FyZCh0cmlnZ2VyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsaXBib2FyZCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgX3RoaXMucmVzb2x2ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBfdGhpcy5saXN0ZW5DbGljayh0cmlnZ2VyKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogRGVmaW5lcyBpZiBhdHRyaWJ1dGVzIHdvdWxkIGJlIHJlc29sdmVkIHVzaW5nIGludGVybmFsIHNldHRlciBmdW5jdGlvbnNcbiAgICogb3IgY3VzdG9tIGZ1bmN0aW9ucyB0aGF0IHdlcmUgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoQ2xpcGJvYXJkLCBbe1xuICAgIGtleTogXCJyZXNvbHZlT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlT3B0aW9ucygpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHRoaXMuYWN0aW9uID0gdHlwZW9mIG9wdGlvbnMuYWN0aW9uID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5hY3Rpb24gOiB0aGlzLmRlZmF1bHRBY3Rpb247XG4gICAgICB0aGlzLnRhcmdldCA9IHR5cGVvZiBvcHRpb25zLnRhcmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMudGFyZ2V0IDogdGhpcy5kZWZhdWx0VGFyZ2V0O1xuICAgICAgdGhpcy50ZXh0ID0gdHlwZW9mIG9wdGlvbnMudGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMudGV4dCA6IHRoaXMuZGVmYXVsdFRleHQ7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGNsaXBib2FyZF90eXBlb2Yob3B0aW9ucy5jb250YWluZXIpID09PSAnb2JqZWN0JyA/IG9wdGlvbnMuY29udGFpbmVyIDogZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNsaWNrIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBwYXNzZWQgdHJpZ2dlci5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudHxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gdHJpZ2dlclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwibGlzdGVuQ2xpY2tcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuQ2xpY2sodHJpZ2dlcikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5fZGVmYXVsdCgpKHRyaWdnZXIsICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub25DbGljayhlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgbmV3IGBDbGlwYm9hcmRBY3Rpb25gIG9uIGVhY2ggY2xpY2sgZXZlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwib25DbGlja1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHZhciB0cmlnZ2VyID0gZS5kZWxlZ2F0ZVRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb24odHJpZ2dlcikgfHwgJ2NvcHknO1xuICAgICAgdmFyIHRleHQgPSBhY3Rpb25zX2RlZmF1bHQoe1xuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldCh0cmlnZ2VyKSxcbiAgICAgICAgdGV4dDogdGhpcy50ZXh0KHRyaWdnZXIpXG4gICAgICB9KTsgLy8gRmlyZXMgYW4gZXZlbnQgYmFzZWQgb24gdGhlIGNvcHkgb3BlcmF0aW9uIHJlc3VsdC5cblxuICAgICAgdGhpcy5lbWl0KHRleHQgPyAnc3VjY2VzcycgOiAnZXJyb3InLCB7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgICAgICBjbGVhclNlbGVjdGlvbjogZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXIuZm9jdXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGBhY3Rpb25gIGxvb2t1cCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRyaWdnZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRlZmF1bHRBY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVmYXVsdEFjdGlvbih0cmlnZ2VyKSB7XG4gICAgICByZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoJ2FjdGlvbicsIHRyaWdnZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGB0YXJnZXRgIGxvb2t1cCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRyaWdnZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRlZmF1bHRUYXJnZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVmYXVsdFRhcmdldCh0cmlnZ2VyKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBnZXRBdHRyaWJ1dGVWYWx1ZSgndGFyZ2V0JywgdHJpZ2dlcik7XG5cbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93IGZpcmUgcHJvZ3JhbW1hdGljYWxseSBhIGNvcHkgYWN0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR9IHRhcmdldFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHJldHVybnMgVGV4dCBjb3BpZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkZWZhdWx0VGV4dFwiLFxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBgdGV4dGAgbG9va3VwIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdHJpZ2dlclxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBkZWZhdWx0VGV4dCh0cmlnZ2VyKSB7XG4gICAgICByZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoJ3RleHQnLCB0cmlnZ2VyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBsaWZlY3ljbGUuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJjb3B5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvcHkodGFyZ2V0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgICBjb250YWluZXI6IGRvY3VtZW50LmJvZHlcbiAgICAgIH07XG4gICAgICByZXR1cm4gYWN0aW9uc19jb3B5KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93IGZpcmUgcHJvZ3JhbW1hdGljYWxseSBhIGN1dCBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gdGFyZ2V0XG4gICAgICogQHJldHVybnMgVGV4dCBjdXR0ZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJjdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3V0KHRhcmdldCkge1xuICAgICAgcmV0dXJuIGFjdGlvbnNfY3V0KHRhcmdldCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN1cHBvcnQgb2YgdGhlIGdpdmVuIGFjdGlvbiwgb3IgYWxsIGFjdGlvbnMgaWYgbm8gYWN0aW9uIGlzXG4gICAgICogZ2l2ZW4uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFthY3Rpb25dXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJpc1N1cHBvcnRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1N1cHBvcnRlZCgpIHtcbiAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFsnY29weScsICdjdXQnXTtcbiAgICAgIHZhciBhY3Rpb25zID0gdHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycgPyBbYWN0aW9uXSA6IGFjdGlvbjtcbiAgICAgIHZhciBzdXBwb3J0ID0gISFkb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQ7XG4gICAgICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBzdXBwb3J0ID0gc3VwcG9ydCAmJiAhIWRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3VwcG9ydDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ2xpcGJvYXJkO1xufSgodGlueV9lbWl0dGVyX2RlZmF1bHQoKSkpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjbGlwYm9hcmQgPSAoQ2xpcGJvYXJkKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDgyODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxudmFyIERPQ1VNRU5UX05PREVfVFlQRSA9IDk7XG5cbi8qKlxuICogQSBwb2x5ZmlsbCBmb3IgRWxlbWVudC5tYXRjaGVzKClcbiAqL1xuaWYgKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcykge1xuICAgIHZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8ubWF0Y2hlcyA9IHByb3RvLm1hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBwcm90by5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG8ub01hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBwcm90by53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGNsb3Nlc3QgcGFyZW50IHRoYXQgbWF0Y2hlcyBhIHNlbGVjdG9yLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY2xvc2VzdCAoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSBET0NVTUVOVF9OT0RFX1RZUEUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50Lm1hdGNoZXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9zZXN0O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0Mzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNsb3Nlc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyOCk7XG5cbi8qKlxuICogRGVsZWdhdGVzIGV2ZW50IHRvIGEgc2VsZWN0b3IuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIF9kZWxlZ2F0ZShlbGVtZW50LCBzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHtcbiAgICB2YXIgbGlzdGVuZXJGbiA9IGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXJGbiwgdXNlQ2FwdHVyZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lckZuLCB1c2VDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBEZWxlZ2F0ZXMgZXZlbnQgdG8gYSBzZWxlY3Rvci5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR8U3RyaW5nfEFycmF5fSBbZWxlbWVudHNdXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGRlbGVnYXRlKGVsZW1lbnRzLCBzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHtcbiAgICAvLyBIYW5kbGUgdGhlIHJlZ3VsYXIgRWxlbWVudCB1c2FnZVxuICAgIGlmICh0eXBlb2YgZWxlbWVudHMuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gX2RlbGVnYXRlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEVsZW1lbnQtbGVzcyB1c2FnZSwgaXQgZGVmYXVsdHMgdG8gZ2xvYmFsIGRlbGVnYXRpb25cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVXNlIGBkb2N1bWVudGAgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciwgdGhlbiBhcHBseSBhcmd1bWVudHNcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0IHdheSB0byAudW5zaGlmdCBgYXJndW1lbnRzYCB3aXRob3V0IHJ1bm5pbmcgaW50byBkZW9wdGltaXphdGlvbnNcbiAgICAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5iaW5kKG51bGwsIGRvY3VtZW50KS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBTZWxlY3Rvci1iYXNlZCB1c2FnZVxuICAgIGlmICh0eXBlb2YgZWxlbWVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGVtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEFycmF5LWxpa2UgYmFzZWQgdXNhZ2VcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGVsZW1lbnRzLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gX2RlbGVnYXRlKGVsZW1lbnQsIHNlbGVjdG9yLCB0eXBlLCBjYWxsYmFjaywgdXNlQ2FwdHVyZSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgY2xvc2VzdCBtYXRjaCBhbmQgaW52b2tlcyBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gbGlzdGVuZXIoZWxlbWVudCwgc2VsZWN0b3IsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5kZWxlZ2F0ZVRhcmdldCA9IGNsb3Nlc3QoZS50YXJnZXQsIHNlbGVjdG9yKTtcblxuICAgICAgICBpZiAoZS5kZWxlZ2F0ZVRhcmdldCkge1xuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWxlZ2F0ZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODc5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cbi8qKlxuICogQ2hlY2sgaWYgYXJndW1lbnQgaXMgYSBIVE1MIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLm5vZGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcbiAgICAgICAgJiYgdmFsdWUubm9kZVR5cGUgPT09IDE7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBIVE1MIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0cy5ub2RlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgKHR5cGUgPT09ICdbb2JqZWN0IE5vZGVMaXN0XScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgSFRNTENvbGxlY3Rpb25dJylcbiAgICAgICAgJiYgKCdsZW5ndGgnIGluIHZhbHVlKVxuICAgICAgICAmJiAodmFsdWUubGVuZ3RoID09PSAwIHx8IGV4cG9ydHMubm9kZSh2YWx1ZVswXSkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhcmd1bWVudCBpcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuc3RyaW5nID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYXJndW1lbnQgaXMgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuZm4gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuICAgIHJldHVybiB0eXBlID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzcwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpcyA9IF9fd2VicGFja19yZXF1aXJlX18oODc5KTtcbnZhciBkZWxlZ2F0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDM4KTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYWxsIHBhcmFtcyBhbmQgY2FsbHMgdGhlIHJpZ2h0XG4gKiBsaXN0ZW5lciBmdW5jdGlvbiBiYXNlZCBvbiBpdHMgdGFyZ2V0IHR5cGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGxpc3Rlbih0YXJnZXQsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0YXJnZXQgJiYgIXR5cGUgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudHMnKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzLnN0cmluZyh0eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIFN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghaXMuZm4oY2FsbGJhY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSBGdW5jdGlvbicpO1xuICAgIH1cblxuICAgIGlmIChpcy5ub2RlKHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Rlbk5vZGUodGFyZ2V0LCB0eXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzLm5vZGVMaXN0KHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Rlbk5vZGVMaXN0KHRhcmdldCwgdHlwZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBlbHNlIGlmIChpcy5zdHJpbmcodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm4gbGlzdGVuU2VsZWN0b3IodGFyZ2V0LCB0eXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgU3RyaW5nLCBIVE1MRWxlbWVudCwgSFRNTENvbGxlY3Rpb24sIG9yIE5vZGVMaXN0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gYSBIVE1MIGVsZW1lbnRcbiAqIGFuZCByZXR1cm5zIGEgcmVtb3ZlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBsaXN0ZW5Ob2RlKG5vZGUsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIgdG8gYSBsaXN0IG9mIEhUTUwgZWxlbWVudHNcbiAqIGFuZCByZXR1cm5zIGEgcmVtb3ZlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Tm9kZUxpc3R8SFRNTENvbGxlY3Rpb259IG5vZGVMaXN0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbGlzdGVuTm9kZUxpc3Qobm9kZUxpc3QsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChub2RlTGlzdCwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKG5vZGVMaXN0LCBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byBhIHNlbGVjdG9yXG4gKiBhbmQgcmV0dXJucyBhIHJlbW92ZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBsaXN0ZW5TZWxlY3RvcihzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZGVsZWdhdGUoZG9jdW1lbnQuYm9keSwgc2VsZWN0b3IsIHR5cGUsIGNhbGxiYWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0ZW47XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgxNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuZnVuY3Rpb24gc2VsZWN0KGVsZW1lbnQpIHtcbiAgICB2YXIgc2VsZWN0ZWRUZXh0O1xuXG4gICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdTRUxFQ1QnKSB7XG4gICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChlbGVtZW50Lm5vZGVOYW1lID09PSAnSU5QVVQnIHx8IGVsZW1lbnQubm9kZU5hbWUgPT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgdmFyIGlzUmVhZE9ubHkgPSBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKTtcblxuICAgICAgICBpZiAoIWlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgZWxlbWVudC52YWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGlmICghaXNSZWFkT25seSkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSkge1xuICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRUZXh0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbGVjdDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjc5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5mdW5jdGlvbiBFICgpIHtcbiAgLy8gS2VlcCB0aGlzIGVtcHR5IHNvIGl0J3MgZWFzaWVyIHRvIGluaGVyaXQgZnJvbVxuICAvLyAodmlhIGh0dHBzOi8vZ2l0aHViLmNvbS9saXBzbWFjayBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvaXNzdWVzLzMpXG59XG5cbkUucHJvdG90eXBlID0ge1xuICBvbjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHtcbiAgICB2YXIgZSA9IHRoaXMuZSB8fCAodGhpcy5lID0ge30pO1xuXG4gICAgKGVbbmFtZV0gfHwgKGVbbmFtZV0gPSBbXSkpLnB1c2goe1xuICAgICAgZm46IGNhbGxiYWNrLFxuICAgICAgY3R4OiBjdHhcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIG9uY2U6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY3R4KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGxpc3RlbmVyICgpIHtcbiAgICAgIHNlbGYub2ZmKG5hbWUsIGxpc3RlbmVyKTtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KGN0eCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIuXyA9IGNhbGxiYWNrXG4gICAgcmV0dXJuIHRoaXMub24obmFtZSwgbGlzdGVuZXIsIGN0eCk7XG4gIH0sXG5cbiAgZW1pdDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgZGF0YSA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgZXZ0QXJyID0gKCh0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KSlbbmFtZV0gfHwgW10pLnNsaWNlKCk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBsZW4gPSBldnRBcnIubGVuZ3RoO1xuXG4gICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGV2dEFycltpXS5mbi5hcHBseShldnRBcnJbaV0uY3R4LCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBvZmY6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG4gICAgdmFyIGV2dHMgPSBlW25hbWVdO1xuICAgIHZhciBsaXZlRXZlbnRzID0gW107XG5cbiAgICBpZiAoZXZ0cyAmJiBjYWxsYmFjaykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGV2dHNbaV0uZm4gIT09IGNhbGxiYWNrICYmIGV2dHNbaV0uZm4uXyAhPT0gY2FsbGJhY2spXG4gICAgICAgICAgbGl2ZUV2ZW50cy5wdXNoKGV2dHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBldmVudCBmcm9tIHF1ZXVlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICAvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2xhemRcbiAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvY29tbWl0L2M2ZWJmYWE5YmM5NzNiMzNkMTEwYTg0YTMwNzc0MmI3Y2Y5NGM5NTMjY29tbWl0Y29tbWVudC01MDI0OTEwXG5cbiAgICAobGl2ZUV2ZW50cy5sZW5ndGgpXG4gICAgICA/IGVbbmFtZV0gPSBsaXZlRXZlbnRzXG4gICAgICA6IGRlbGV0ZSBlW25hbWVdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRTtcbm1vZHVsZS5leHBvcnRzLlRpbnlFbWl0dGVyID0gRTtcblxuXG4vKioqLyB9KVxuXG4vKioqKioqLyBcdH0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0ICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi9cbi8qKioqKiovIFx0IWZ1bmN0aW9uKCkge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG4vKioqKioqLyBcdFx0XHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9XG4vKioqKioqLyBcdH0oKTtcbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLyoqKioqKi8gXHQvLyBzdGFydHVwXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODYpO1xuLyoqKioqKi8gfSkoKVxuLmRlZmF1bHQ7XG59KTsiLCAiZXhwb3J0IHtkZWZhdWx0IGFzIENsaXBib2FyZH0gZnJvbSAnY2xpcGJvYXJkJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxvRkFBQUEsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1BQU0sT0FBT0QsWUFBUSxZQUFZQSxRQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSw4RUFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxN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QUN2RyxFQUFFO0FBTUYsaUJBQU9QLG9CQUFvQixHQUFHO1FBQy9CLEVBQUcsRUFDWFM7O0lBQ0QsQ0FBQztFQUFBO0FBQUEsQ0FBQTs7QUN6M0JELElBQUFDLG9CQUFBLENBQUE7QUFBQUMsU0FBQUQsbUJBQUE7RUFBQXhHLFdBQUFBLE1BQUEwRyxpQkFBQUg7QUFBQSxDQUFBO0FBQUFJLE9BQUF0UCxVQUFBdVAsYUFBQUosaUJBQUE7QUFBQSxJQUFBRSxtQkFBbUNHLFFBQUExUCxrQkFBQSxDQUFBOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jbGlwYm9hcmQiLCAiX19jb21tb25KUyIsICJleHBvcnRzIiwgIm1vZHVsZTIiLCAid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCAicm9vdCIsICJmYWN0b3J5IiwgImRlZmluZSIsICJhbWQiLCAiX193ZWJwYWNrX21vZHVsZXNfXyIsICJfX3VudXNlZF93ZWJwYWNrX21vZHVsZSIsICJfX3dlYnBhY2tfZXhwb3J0c19fIiwgIl9fd2VicGFja19yZXF1aXJlX18yIiwgImQiLCAiY2xpcGJvYXJkIiwgInRpbnlfZW1pdHRlciIsICJ0aW55X2VtaXR0ZXJfZGVmYXVsdCIsICJuIiwgImxpc3RlbiIsICJsaXN0ZW5fZGVmYXVsdCIsICJzcmNfc2VsZWN0IiwgInNlbGVjdF9kZWZhdWx0IiwgImNvbW1hbmQiLCAidHlwZSIsICJkb2N1bWVudCIsICJleGVjQ29tbWFuZCIsICJlcnIiLCAiQ2xpcGJvYXJkQWN0aW9uQ3V0IiwgIkNsaXBib2FyZEFjdGlvbkN1dDIiLCAidGFyZ2V0IiwgInNlbGVjdGVkVGV4dCIsICJhY3Rpb25zX2N1dCIsICJjcmVhdGVGYWtlRWxlbWVudCIsICJ2YWx1ZSIsICJpc1JUTCIsICJkb2N1bWVudEVsZW1lbnQiLCAiZ2V0QXR0cmlidXRlIiwgImZha2VFbGVtZW50IiwgImNyZWF0ZUVsZW1lbnQiLCAic3R5bGUiLCAiZm9udFNpemUiLCAiYm9yZGVyIiwgInBhZGRpbmciLCAibWFyZ2luIiwgInBvc2l0aW9uIiwgInlQb3NpdGlvbiIsICJ3aW5kb3ciLCAicGFnZVlPZmZzZXQiLCAic2Nyb2xsVG9wIiwgInRvcCIsICJjb25jYXQiLCAic2V0QXR0cmlidXRlIiwgImZha2VDb3B5QWN0aW9uIiwgImZha2VDb3B5QWN0aW9uMiIsICJvcHRpb25zIiwgImNvbnRhaW5lciIsICJhcHBlbmRDaGlsZCIsICJyZW1vdmUiLCAiQ2xpcGJvYXJkQWN0aW9uQ29weSIsICJDbGlwYm9hcmRBY3Rpb25Db3B5MiIsICJhcmd1bWVudHMiLCAibGVuZ3RoIiwgImJvZHkiLCAiSFRNTElucHV0RWxlbWVudCIsICJpbmNsdWRlcyIsICJhY3Rpb25zX2NvcHkiLCAiX3R5cGVvZiIsICJvYmoiLCAiU3ltYm9sIiwgIml0ZXJhdG9yIiwgIl90eXBlb2YyIiwgIm9iajIiLCAiY29uc3RydWN0b3IiLCAicHJvdG90eXBlIiwgIkNsaXBib2FyZEFjdGlvbkRlZmF1bHQiLCAiQ2xpcGJvYXJkQWN0aW9uRGVmYXVsdDIiLCAiX29wdGlvbnMkYWN0aW9uIiwgImFjdGlvbiIsICJ0ZXh0IiwgIkVycm9yIiwgIm5vZGVUeXBlIiwgImhhc0F0dHJpYnV0ZSIsICJhY3Rpb25zX2RlZmF1bHQiLCAiY2xpcGJvYXJkX3R5cGVvZiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiaW5zdGFuY2UiLCAiQ29uc3RydWN0b3IiLCAiVHlwZUVycm9yIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgInByb3BzIiwgImkiLCAiZGVzY3JpcHRvciIsICJlbnVtZXJhYmxlIiwgImNvbmZpZ3VyYWJsZSIsICJ3cml0YWJsZSIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAia2V5IiwgIl9jcmVhdGVDbGFzcyIsICJwcm90b1Byb3BzIiwgInN0YXRpY1Byb3BzIiwgIl9pbmhlcml0cyIsICJzdWJDbGFzcyIsICJzdXBlckNsYXNzIiwgImNyZWF0ZSIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgInNldFByb3RvdHlwZU9mIiwgIl9zZXRQcm90b3R5cGVPZjIiLCAibzIiLCAicDIiLCAiX19wcm90b19fIiwgIl9jcmVhdGVTdXBlciIsICJEZXJpdmVkIiwgImhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfY3JlYXRlU3VwZXJJbnRlcm5hbCIsICJTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAicmVzdWx0IiwgIk5ld1RhcmdldCIsICJSZWZsZWN0IiwgImNvbnN0cnVjdCIsICJhcHBseSIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgImNhbGwiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJSZWZlcmVuY2VFcnJvciIsICJzaGFtIiwgIlByb3h5IiwgIkRhdGUiLCAidG9TdHJpbmciLCAiZSIsICJnZXRQcm90b3R5cGVPZiIsICJfZ2V0UHJvdG90eXBlT2YyIiwgImdldEF0dHJpYnV0ZVZhbHVlIiwgInN1ZmZpeCIsICJlbGVtZW50IiwgImF0dHJpYnV0ZSIsICJDbGlwYm9hcmQiLCAiX0VtaXR0ZXIiLCAiQ2xpcGJvYXJkMiIsICJfc3VwZXIiLCAidHJpZ2dlciIsICJfdGhpcyIsICJyZXNvbHZlT3B0aW9ucyIsICJsaXN0ZW5DbGljayIsICJkZWZhdWx0QWN0aW9uIiwgImRlZmF1bHRUYXJnZXQiLCAiZGVmYXVsdFRleHQiLCAiX3RoaXMyIiwgImxpc3RlbmVyIiwgIm9uQ2xpY2siLCAiZGVsZWdhdGVUYXJnZXQiLCAiY3VycmVudFRhcmdldCIsICJlbWl0IiwgImNsZWFyU2VsZWN0aW9uIiwgImZvY3VzIiwgImdldFNlbGVjdGlvbiIsICJyZW1vdmVBbGxSYW5nZXMiLCAic2VsZWN0b3IiLCAicXVlcnlTZWxlY3RvciIsICJkZXN0cm95IiwgImNvcHkiLCAiY3V0IiwgImlzU3VwcG9ydGVkIiwgImFjdGlvbnMiLCAic3VwcG9ydCIsICJxdWVyeUNvbW1hbmRTdXBwb3J0ZWQiLCAiZm9yRWFjaCIsICJhY3Rpb24yIiwgIm1vZHVsZTMiLCAiRE9DVU1FTlRfTk9ERV9UWVBFIiwgIkVsZW1lbnQiLCAibWF0Y2hlcyIsICJwcm90byIsICJtYXRjaGVzU2VsZWN0b3IiLCAibW96TWF0Y2hlc1NlbGVjdG9yIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIm9NYXRjaGVzU2VsZWN0b3IiLCAid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwgImNsb3Nlc3QiLCAicGFyZW50Tm9kZSIsICJfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMiLCAiX2RlbGVnYXRlIiwgImNhbGxiYWNrIiwgInVzZUNhcHR1cmUiLCAibGlzdGVuZXJGbiIsICJhZGRFdmVudExpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiZGVsZWdhdGUiLCAiZWxlbWVudHMiLCAiYmluZCIsICJxdWVyeVNlbGVjdG9yQWxsIiwgIkFycmF5IiwgIm1hcCIsICJleHBvcnRzMiIsICJub2RlIiwgIkhUTUxFbGVtZW50IiwgIm5vZGVMaXN0IiwgInN0cmluZyIsICJTdHJpbmciLCAiZm4iLCAiaXMiLCAibGlzdGVuTm9kZSIsICJsaXN0ZW5Ob2RlTGlzdCIsICJsaXN0ZW5TZWxlY3RvciIsICJzZWxlY3QiLCAibm9kZU5hbWUiLCAiaXNSZWFkT25seSIsICJzZXRTZWxlY3Rpb25SYW5nZSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAic2VsZWN0aW9uIiwgInJhbmdlIiwgImNyZWF0ZVJhbmdlIiwgInNlbGVjdE5vZGVDb250ZW50cyIsICJhZGRSYW5nZSIsICJFIiwgIm9uIiwgIm5hbWUiLCAiY3R4IiwgInB1c2giLCAib25jZSIsICJvZmYiLCAiXyIsICJkYXRhIiwgInNsaWNlIiwgImV2dEFyciIsICJsZW4iLCAiZXZ0cyIsICJsaXZlRXZlbnRzIiwgIlRpbnlFbWl0dGVyIiwgIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsICJfX3dlYnBhY2tfcmVxdWlyZV9fIiwgIm1vZHVsZUlkIiwgImdldHRlciIsICJfX2VzTW9kdWxlIiwgImEiLCAiZGVmaW5pdGlvbiIsICJnZXQiLCAicHJvcCIsICJoYXNPd25Qcm9wZXJ0eSIsICJkZWZhdWx0IiwgIkNsaXBib2FyZF9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImltcG9ydF9jbGlwYm9hcmQiLCAibW9kdWxlIiwgIl9fdG9Db21tb25KUyIsICJfX3RvRVNNIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jbGlwYm9hcmRAMi4wLjExL25vZGVfbW9kdWxlcy9jbGlwYm9hcmQvZGlzdC9jbGlwYm9hcmQuanMiLCAic3JjL0NsaXBib2FyZC9DbGlwYm9hcmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggPD0gMTIxIGFuZCBTYWZhcmkgPD0gMTUuNDsgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIi8qIVxuICogY2xpcGJvYXJkLmpzIHYyLjAuMTFcbiAqIGh0dHBzOi8vY2xpcGJvYXJkanMuY29tL1xuICpcbiAqIExpY2Vuc2VkIE1JVCDCqSBaZW5vIFJvY2hhXG4gKi9cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkNsaXBib2FyZEpTXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkNsaXBib2FyZEpTXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKCkgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKHtcblxuLyoqKi8gNjg2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xuICBcImRlZmF1bHRcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIGNsaXBib2FyZDsgfVxufSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdGlueS1lbWl0dGVyL2luZGV4LmpzXG52YXIgdGlueV9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzkpO1xudmFyIHRpbnlfZW1pdHRlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih0aW55X2VtaXR0ZXIpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9nb29kLWxpc3RlbmVyL3NyYy9saXN0ZW4uanNcbnZhciBsaXN0ZW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3MCk7XG52YXIgbGlzdGVuX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGxpc3Rlbik7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3NlbGVjdC9zcmMvc2VsZWN0LmpzXG52YXIgc3JjX3NlbGVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oODE3KTtcbnZhciBzZWxlY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc3JjX3NlbGVjdCk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tbW9uL2NvbW1hbmQuanNcbi8qKlxuICogRXhlY3V0ZXMgYSBnaXZlbiBvcGVyYXRpb24gdHlwZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBjb21tYW5kKHR5cGUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZXhlY0NvbW1hbmQodHlwZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2FjdGlvbnMvY3V0LmpzXG5cblxuLyoqXG4gKiBDdXQgYWN0aW9uIHdyYXBwZXIuXG4gKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gdGFyZ2V0XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxudmFyIENsaXBib2FyZEFjdGlvbkN1dCA9IGZ1bmN0aW9uIENsaXBib2FyZEFjdGlvbkN1dCh0YXJnZXQpIHtcbiAgdmFyIHNlbGVjdGVkVGV4dCA9IHNlbGVjdF9kZWZhdWx0KCkodGFyZ2V0KTtcbiAgY29tbWFuZCgnY3V0Jyk7XG4gIHJldHVybiBzZWxlY3RlZFRleHQ7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhY3Rpb25zX2N1dCA9IChDbGlwYm9hcmRBY3Rpb25DdXQpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvbW1vbi9jcmVhdGUtZmFrZS1lbGVtZW50LmpzXG4vKipcbiAqIENyZWF0ZXMgYSBmYWtlIHRleHRhcmVhIGVsZW1lbnQgd2l0aCBhIHZhbHVlLlxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFrZUVsZW1lbnQodmFsdWUpIHtcbiAgdmFyIGlzUlRMID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJykgPT09ICdydGwnO1xuICB2YXIgZmFrZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOyAvLyBQcmV2ZW50IHpvb21pbmcgb24gaU9TXG5cbiAgZmFrZUVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTJwdCc7IC8vIFJlc2V0IGJveCBtb2RlbFxuXG4gIGZha2VFbGVtZW50LnN0eWxlLmJvcmRlciA9ICcwJztcbiAgZmFrZUVsZW1lbnQuc3R5bGUucGFkZGluZyA9ICcwJztcbiAgZmFrZUVsZW1lbnQuc3R5bGUubWFyZ2luID0gJzAnOyAvLyBNb3ZlIGVsZW1lbnQgb3V0IG9mIHNjcmVlbiBob3Jpem9udGFsbHlcblxuICBmYWtlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIGZha2VFbGVtZW50LnN0eWxlW2lzUlRMID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSAnLTk5OTlweCc7IC8vIE1vdmUgZWxlbWVudCB0byB0aGUgc2FtZSBwb3NpdGlvbiB2ZXJ0aWNhbGx5XG5cbiAgdmFyIHlQb3NpdGlvbiA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICBmYWtlRWxlbWVudC5zdHlsZS50b3AgPSBcIlwiLmNvbmNhdCh5UG9zaXRpb24sIFwicHhcIik7XG4gIGZha2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XG4gIGZha2VFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gIHJldHVybiBmYWtlRWxlbWVudDtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9hY3Rpb25zL2NvcHkuanNcblxuXG5cbi8qKlxuICogQ3JlYXRlIGZha2UgY29weSBhY3Rpb24gd3JhcHBlciB1c2luZyBhIGZha2UgZWxlbWVudC5cbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxudmFyIGZha2VDb3B5QWN0aW9uID0gZnVuY3Rpb24gZmFrZUNvcHlBY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIGZha2VFbGVtZW50ID0gY3JlYXRlRmFrZUVsZW1lbnQodmFsdWUpO1xuICBvcHRpb25zLmNvbnRhaW5lci5hcHBlbmRDaGlsZChmYWtlRWxlbWVudCk7XG4gIHZhciBzZWxlY3RlZFRleHQgPSBzZWxlY3RfZGVmYXVsdCgpKGZha2VFbGVtZW50KTtcbiAgY29tbWFuZCgnY29weScpO1xuICBmYWtlRWxlbWVudC5yZW1vdmUoKTtcbiAgcmV0dXJuIHNlbGVjdGVkVGV4dDtcbn07XG4vKipcbiAqIENvcHkgYWN0aW9uIHdyYXBwZXIuXG4gKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5cblxudmFyIENsaXBib2FyZEFjdGlvbkNvcHkgPSBmdW5jdGlvbiBDbGlwYm9hcmRBY3Rpb25Db3B5KHRhcmdldCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keVxuICB9O1xuICB2YXIgc2VsZWN0ZWRUZXh0ID0gJyc7XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgc2VsZWN0ZWRUZXh0ID0gZmFrZUNvcHlBY3Rpb24odGFyZ2V0LCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmICFbJ3RleHQnLCAnc2VhcmNoJywgJ3VybCcsICd0ZWwnLCAncGFzc3dvcmQnXS5pbmNsdWRlcyh0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQudHlwZSkpIHtcbiAgICAvLyBJZiBpbnB1dCB0eXBlIGRvZXNuJ3Qgc3VwcG9ydCBgc2V0U2VsZWN0aW9uUmFuZ2VgLiBTaW11bGF0ZSBpdC4gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2V0U2VsZWN0aW9uUmFuZ2VcbiAgICBzZWxlY3RlZFRleHQgPSBmYWtlQ29weUFjdGlvbih0YXJnZXQudmFsdWUsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlbGVjdGVkVGV4dCA9IHNlbGVjdF9kZWZhdWx0KCkodGFyZ2V0KTtcbiAgICBjb21tYW5kKCdjb3B5Jyk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWRUZXh0O1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYWN0aW9uc19jb3B5ID0gKENsaXBib2FyZEFjdGlvbkNvcHkpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2FjdGlvbnMvZGVmYXVsdC5qc1xuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5cblxuLyoqXG4gKiBJbm5lciBmdW5jdGlvbiB3aGljaCBwZXJmb3JtcyBzZWxlY3Rpb24gZnJvbSBlaXRoZXIgYHRleHRgIG9yIGB0YXJnZXRgXG4gKiBwcm9wZXJ0aWVzIGFuZCB0aGVuIGV4ZWN1dGVzIGNvcHkgb3IgY3V0IG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbnZhciBDbGlwYm9hcmRBY3Rpb25EZWZhdWx0ID0gZnVuY3Rpb24gQ2xpcGJvYXJkQWN0aW9uRGVmYXVsdCgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAvLyBEZWZpbmVzIGJhc2UgcHJvcGVydGllcyBwYXNzZWQgZnJvbSBjb25zdHJ1Y3Rvci5cbiAgdmFyIF9vcHRpb25zJGFjdGlvbiA9IG9wdGlvbnMuYWN0aW9uLFxuICAgICAgYWN0aW9uID0gX29wdGlvbnMkYWN0aW9uID09PSB2b2lkIDAgPyAnY29weScgOiBfb3B0aW9ucyRhY3Rpb24sXG4gICAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgIHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0LFxuICAgICAgdGV4dCA9IG9wdGlvbnMudGV4dDsgLy8gU2V0cyB0aGUgYGFjdGlvbmAgdG8gYmUgcGVyZm9ybWVkIHdoaWNoIGNhbiBiZSBlaXRoZXIgJ2NvcHknIG9yICdjdXQnLlxuXG4gIGlmIChhY3Rpb24gIT09ICdjb3B5JyAmJiBhY3Rpb24gIT09ICdjdXQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwiYWN0aW9uXCIgdmFsdWUsIHVzZSBlaXRoZXIgXCJjb3B5XCIgb3IgXCJjdXRcIicpO1xuICB9IC8vIFNldHMgdGhlIGB0YXJnZXRgIHByb3BlcnR5IHVzaW5nIGFuIGVsZW1lbnQgdGhhdCB3aWxsIGJlIGhhdmUgaXRzIGNvbnRlbnQgY29waWVkLlxuXG5cbiAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRhcmdldCAmJiBfdHlwZW9mKHRhcmdldCkgPT09ICdvYmplY3QnICYmIHRhcmdldC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2NvcHknICYmIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwidGFyZ2V0XCIgYXR0cmlidXRlLiBQbGVhc2UgdXNlIFwicmVhZG9ubHlcIiBpbnN0ZWFkIG9mIFwiZGlzYWJsZWRcIiBhdHRyaWJ1dGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2N1dCcgJiYgKHRhcmdldC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHwgdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwidGFyZ2V0XCIgYXR0cmlidXRlLiBZb3UgY2FuXFwndCBjdXQgdGV4dCBmcm9tIGVsZW1lbnRzIHdpdGggXCJyZWFkb25seVwiIG9yIFwiZGlzYWJsZWRcIiBhdHRyaWJ1dGVzJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBcInRhcmdldFwiIHZhbHVlLCB1c2UgYSB2YWxpZCBFbGVtZW50Jyk7XG4gICAgfVxuICB9IC8vIERlZmluZSBzZWxlY3Rpb24gc3RyYXRlZ3kgYmFzZWQgb24gYHRleHRgIHByb3BlcnR5LlxuXG5cbiAgaWYgKHRleHQpIHtcbiAgICByZXR1cm4gYWN0aW9uc19jb3B5KHRleHQsIHtcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyXG4gICAgfSk7XG4gIH0gLy8gRGVmaW5lcyB3aGljaCBzZWxlY3Rpb24gc3RyYXRlZ3kgYmFzZWQgb24gYHRhcmdldGAgcHJvcGVydHkuXG5cblxuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGFjdGlvbiA9PT0gJ2N1dCcgPyBhY3Rpb25zX2N1dCh0YXJnZXQpIDogYWN0aW9uc19jb3B5KHRhcmdldCwge1xuICAgICAgY29udGFpbmVyOiBjb250YWluZXJcbiAgICB9KTtcbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYWN0aW9uc19kZWZhdWx0ID0gKENsaXBib2FyZEFjdGlvbkRlZmF1bHQpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NsaXBib2FyZC5qc1xuZnVuY3Rpb24gY2xpcGJvYXJkX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgY2xpcGJvYXJkX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBjbGlwYm9hcmRfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIGNsaXBib2FyZF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKGNsaXBib2FyZF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5cblxuXG5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtTdHJpbmd9IHN1ZmZpeFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlVmFsdWUoc3VmZml4LCBlbGVtZW50KSB7XG4gIHZhciBhdHRyaWJ1dGUgPSBcImRhdGEtY2xpcGJvYXJkLVwiLmNvbmNhdChzdWZmaXgpO1xuXG4gIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIHdoaWNoIHRha2VzIG9uZSBvciBtb3JlIGVsZW1lbnRzLCBhZGRzIGV2ZW50IGxpc3RlbmVycyB0byB0aGVtLFxuICogYW5kIGluc3RhbnRpYXRlcyBhIG5ldyBgQ2xpcGJvYXJkQWN0aW9uYCBvbiBlYWNoIGNsaWNrLlxuICovXG5cblxudmFyIENsaXBib2FyZCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0VtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKENsaXBib2FyZCwgX0VtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ2xpcGJvYXJkKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IHRyaWdnZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIENsaXBib2FyZCh0cmlnZ2VyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsaXBib2FyZCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgX3RoaXMucmVzb2x2ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBfdGhpcy5saXN0ZW5DbGljayh0cmlnZ2VyKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogRGVmaW5lcyBpZiBhdHRyaWJ1dGVzIHdvdWxkIGJlIHJlc29sdmVkIHVzaW5nIGludGVybmFsIHNldHRlciBmdW5jdGlvbnNcbiAgICogb3IgY3VzdG9tIGZ1bmN0aW9ucyB0aGF0IHdlcmUgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoQ2xpcGJvYXJkLCBbe1xuICAgIGtleTogXCJyZXNvbHZlT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlT3B0aW9ucygpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHRoaXMuYWN0aW9uID0gdHlwZW9mIG9wdGlvbnMuYWN0aW9uID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5hY3Rpb24gOiB0aGlzLmRlZmF1bHRBY3Rpb247XG4gICAgICB0aGlzLnRhcmdldCA9IHR5cGVvZiBvcHRpb25zLnRhcmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMudGFyZ2V0IDogdGhpcy5kZWZhdWx0VGFyZ2V0O1xuICAgICAgdGhpcy50ZXh0ID0gdHlwZW9mIG9wdGlvbnMudGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMudGV4dCA6IHRoaXMuZGVmYXVsdFRleHQ7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGNsaXBib2FyZF90eXBlb2Yob3B0aW9ucy5jb250YWluZXIpID09PSAnb2JqZWN0JyA/IG9wdGlvbnMuY29udGFpbmVyIDogZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNsaWNrIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBwYXNzZWQgdHJpZ2dlci5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudHxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gdHJpZ2dlclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwibGlzdGVuQ2xpY2tcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuQ2xpY2sodHJpZ2dlcikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5fZGVmYXVsdCgpKHRyaWdnZXIsICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub25DbGljayhlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgbmV3IGBDbGlwYm9hcmRBY3Rpb25gIG9uIGVhY2ggY2xpY2sgZXZlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwib25DbGlja1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHZhciB0cmlnZ2VyID0gZS5kZWxlZ2F0ZVRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb24odHJpZ2dlcikgfHwgJ2NvcHknO1xuICAgICAgdmFyIHRleHQgPSBhY3Rpb25zX2RlZmF1bHQoe1xuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldCh0cmlnZ2VyKSxcbiAgICAgICAgdGV4dDogdGhpcy50ZXh0KHRyaWdnZXIpXG4gICAgICB9KTsgLy8gRmlyZXMgYW4gZXZlbnQgYmFzZWQgb24gdGhlIGNvcHkgb3BlcmF0aW9uIHJlc3VsdC5cblxuICAgICAgdGhpcy5lbWl0KHRleHQgPyAnc3VjY2VzcycgOiAnZXJyb3InLCB7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgICAgICBjbGVhclNlbGVjdGlvbjogZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXIuZm9jdXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGBhY3Rpb25gIGxvb2t1cCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRyaWdnZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRlZmF1bHRBY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVmYXVsdEFjdGlvbih0cmlnZ2VyKSB7XG4gICAgICByZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoJ2FjdGlvbicsIHRyaWdnZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGB0YXJnZXRgIGxvb2t1cCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRyaWdnZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRlZmF1bHRUYXJnZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVmYXVsdFRhcmdldCh0cmlnZ2VyKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBnZXRBdHRyaWJ1dGVWYWx1ZSgndGFyZ2V0JywgdHJpZ2dlcik7XG5cbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93IGZpcmUgcHJvZ3JhbW1hdGljYWxseSBhIGNvcHkgYWN0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR9IHRhcmdldFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHJldHVybnMgVGV4dCBjb3BpZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkZWZhdWx0VGV4dFwiLFxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBgdGV4dGAgbG9va3VwIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdHJpZ2dlclxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBkZWZhdWx0VGV4dCh0cmlnZ2VyKSB7XG4gICAgICByZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoJ3RleHQnLCB0cmlnZ2VyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBsaWZlY3ljbGUuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJjb3B5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvcHkodGFyZ2V0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgICBjb250YWluZXI6IGRvY3VtZW50LmJvZHlcbiAgICAgIH07XG4gICAgICByZXR1cm4gYWN0aW9uc19jb3B5KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93IGZpcmUgcHJvZ3JhbW1hdGljYWxseSBhIGN1dCBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gdGFyZ2V0XG4gICAgICogQHJldHVybnMgVGV4dCBjdXR0ZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJjdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3V0KHRhcmdldCkge1xuICAgICAgcmV0dXJuIGFjdGlvbnNfY3V0KHRhcmdldCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN1cHBvcnQgb2YgdGhlIGdpdmVuIGFjdGlvbiwgb3IgYWxsIGFjdGlvbnMgaWYgbm8gYWN0aW9uIGlzXG4gICAgICogZ2l2ZW4uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFthY3Rpb25dXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJpc1N1cHBvcnRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1N1cHBvcnRlZCgpIHtcbiAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFsnY29weScsICdjdXQnXTtcbiAgICAgIHZhciBhY3Rpb25zID0gdHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycgPyBbYWN0aW9uXSA6IGFjdGlvbjtcbiAgICAgIHZhciBzdXBwb3J0ID0gISFkb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQ7XG4gICAgICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBzdXBwb3J0ID0gc3VwcG9ydCAmJiAhIWRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3VwcG9ydDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ2xpcGJvYXJkO1xufSgodGlueV9lbWl0dGVyX2RlZmF1bHQoKSkpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjbGlwYm9hcmQgPSAoQ2xpcGJvYXJkKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDgyODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxudmFyIERPQ1VNRU5UX05PREVfVFlQRSA9IDk7XG5cbi8qKlxuICogQSBwb2x5ZmlsbCBmb3IgRWxlbWVudC5tYXRjaGVzKClcbiAqL1xuaWYgKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcykge1xuICAgIHZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8ubWF0Y2hlcyA9IHByb3RvLm1hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBwcm90by5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG8ub01hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBwcm90by53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGNsb3Nlc3QgcGFyZW50IHRoYXQgbWF0Y2hlcyBhIHNlbGVjdG9yLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY2xvc2VzdCAoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSBET0NVTUVOVF9OT0RFX1RZUEUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50Lm1hdGNoZXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9zZXN0O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0Mzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNsb3Nlc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyOCk7XG5cbi8qKlxuICogRGVsZWdhdGVzIGV2ZW50IHRvIGEgc2VsZWN0b3IuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIF9kZWxlZ2F0ZShlbGVtZW50LCBzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHtcbiAgICB2YXIgbGlzdGVuZXJGbiA9IGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXJGbiwgdXNlQ2FwdHVyZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lckZuLCB1c2VDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBEZWxlZ2F0ZXMgZXZlbnQgdG8gYSBzZWxlY3Rvci5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR8U3RyaW5nfEFycmF5fSBbZWxlbWVudHNdXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGRlbGVnYXRlKGVsZW1lbnRzLCBzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHtcbiAgICAvLyBIYW5kbGUgdGhlIHJlZ3VsYXIgRWxlbWVudCB1c2FnZVxuICAgIGlmICh0eXBlb2YgZWxlbWVudHMuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gX2RlbGVnYXRlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEVsZW1lbnQtbGVzcyB1c2FnZSwgaXQgZGVmYXVsdHMgdG8gZ2xvYmFsIGRlbGVnYXRpb25cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVXNlIGBkb2N1bWVudGAgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciwgdGhlbiBhcHBseSBhcmd1bWVudHNcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0IHdheSB0byAudW5zaGlmdCBgYXJndW1lbnRzYCB3aXRob3V0IHJ1bm5pbmcgaW50byBkZW9wdGltaXphdGlvbnNcbiAgICAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5iaW5kKG51bGwsIGRvY3VtZW50KS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBTZWxlY3Rvci1iYXNlZCB1c2FnZVxuICAgIGlmICh0eXBlb2YgZWxlbWVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGVtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEFycmF5LWxpa2UgYmFzZWQgdXNhZ2VcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGVsZW1lbnRzLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gX2RlbGVnYXRlKGVsZW1lbnQsIHNlbGVjdG9yLCB0eXBlLCBjYWxsYmFjaywgdXNlQ2FwdHVyZSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgY2xvc2VzdCBtYXRjaCBhbmQgaW52b2tlcyBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gbGlzdGVuZXIoZWxlbWVudCwgc2VsZWN0b3IsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5kZWxlZ2F0ZVRhcmdldCA9IGNsb3Nlc3QoZS50YXJnZXQsIHNlbGVjdG9yKTtcblxuICAgICAgICBpZiAoZS5kZWxlZ2F0ZVRhcmdldCkge1xuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWxlZ2F0ZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODc5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cbi8qKlxuICogQ2hlY2sgaWYgYXJndW1lbnQgaXMgYSBIVE1MIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLm5vZGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcbiAgICAgICAgJiYgdmFsdWUubm9kZVR5cGUgPT09IDE7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBIVE1MIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0cy5ub2RlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgKHR5cGUgPT09ICdbb2JqZWN0IE5vZGVMaXN0XScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgSFRNTENvbGxlY3Rpb25dJylcbiAgICAgICAgJiYgKCdsZW5ndGgnIGluIHZhbHVlKVxuICAgICAgICAmJiAodmFsdWUubGVuZ3RoID09PSAwIHx8IGV4cG9ydHMubm9kZSh2YWx1ZVswXSkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhcmd1bWVudCBpcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuc3RyaW5nID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYXJndW1lbnQgaXMgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuZm4gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuICAgIHJldHVybiB0eXBlID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzcwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpcyA9IF9fd2VicGFja19yZXF1aXJlX18oODc5KTtcbnZhciBkZWxlZ2F0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDM4KTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYWxsIHBhcmFtcyBhbmQgY2FsbHMgdGhlIHJpZ2h0XG4gKiBsaXN0ZW5lciBmdW5jdGlvbiBiYXNlZCBvbiBpdHMgdGFyZ2V0IHR5cGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGxpc3Rlbih0YXJnZXQsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0YXJnZXQgJiYgIXR5cGUgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudHMnKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzLnN0cmluZyh0eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIFN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghaXMuZm4oY2FsbGJhY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSBGdW5jdGlvbicpO1xuICAgIH1cblxuICAgIGlmIChpcy5ub2RlKHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Rlbk5vZGUodGFyZ2V0LCB0eXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzLm5vZGVMaXN0KHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Rlbk5vZGVMaXN0KHRhcmdldCwgdHlwZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBlbHNlIGlmIChpcy5zdHJpbmcodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm4gbGlzdGVuU2VsZWN0b3IodGFyZ2V0LCB0eXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgU3RyaW5nLCBIVE1MRWxlbWVudCwgSFRNTENvbGxlY3Rpb24sIG9yIE5vZGVMaXN0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gYSBIVE1MIGVsZW1lbnRcbiAqIGFuZCByZXR1cm5zIGEgcmVtb3ZlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBsaXN0ZW5Ob2RlKG5vZGUsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIgdG8gYSBsaXN0IG9mIEhUTUwgZWxlbWVudHNcbiAqIGFuZCByZXR1cm5zIGEgcmVtb3ZlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Tm9kZUxpc3R8SFRNTENvbGxlY3Rpb259IG5vZGVMaXN0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbGlzdGVuTm9kZUxpc3Qobm9kZUxpc3QsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChub2RlTGlzdCwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKG5vZGVMaXN0LCBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byBhIHNlbGVjdG9yXG4gKiBhbmQgcmV0dXJucyBhIHJlbW92ZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBsaXN0ZW5TZWxlY3RvcihzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZGVsZWdhdGUoZG9jdW1lbnQuYm9keSwgc2VsZWN0b3IsIHR5cGUsIGNhbGxiYWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0ZW47XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgxNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuZnVuY3Rpb24gc2VsZWN0KGVsZW1lbnQpIHtcbiAgICB2YXIgc2VsZWN0ZWRUZXh0O1xuXG4gICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdTRUxFQ1QnKSB7XG4gICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChlbGVtZW50Lm5vZGVOYW1lID09PSAnSU5QVVQnIHx8IGVsZW1lbnQubm9kZU5hbWUgPT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgdmFyIGlzUmVhZE9ubHkgPSBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKTtcblxuICAgICAgICBpZiAoIWlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgZWxlbWVudC52YWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGlmICghaXNSZWFkT25seSkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSkge1xuICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRUZXh0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbGVjdDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjc5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5mdW5jdGlvbiBFICgpIHtcbiAgLy8gS2VlcCB0aGlzIGVtcHR5IHNvIGl0J3MgZWFzaWVyIHRvIGluaGVyaXQgZnJvbVxuICAvLyAodmlhIGh0dHBzOi8vZ2l0aHViLmNvbS9saXBzbWFjayBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvaXNzdWVzLzMpXG59XG5cbkUucHJvdG90eXBlID0ge1xuICBvbjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHtcbiAgICB2YXIgZSA9IHRoaXMuZSB8fCAodGhpcy5lID0ge30pO1xuXG4gICAgKGVbbmFtZV0gfHwgKGVbbmFtZV0gPSBbXSkpLnB1c2goe1xuICAgICAgZm46IGNhbGxiYWNrLFxuICAgICAgY3R4OiBjdHhcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIG9uY2U6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY3R4KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGxpc3RlbmVyICgpIHtcbiAgICAgIHNlbGYub2ZmKG5hbWUsIGxpc3RlbmVyKTtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KGN0eCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIuXyA9IGNhbGxiYWNrXG4gICAgcmV0dXJuIHRoaXMub24obmFtZSwgbGlzdGVuZXIsIGN0eCk7XG4gIH0sXG5cbiAgZW1pdDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgZGF0YSA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgZXZ0QXJyID0gKCh0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KSlbbmFtZV0gfHwgW10pLnNsaWNlKCk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBsZW4gPSBldnRBcnIubGVuZ3RoO1xuXG4gICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGV2dEFycltpXS5mbi5hcHBseShldnRBcnJbaV0uY3R4LCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBvZmY6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG4gICAgdmFyIGV2dHMgPSBlW25hbWVdO1xuICAgIHZhciBsaXZlRXZlbnRzID0gW107XG5cbiAgICBpZiAoZXZ0cyAmJiBjYWxsYmFjaykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGV2dHNbaV0uZm4gIT09IGNhbGxiYWNrICYmIGV2dHNbaV0uZm4uXyAhPT0gY2FsbGJhY2spXG4gICAgICAgICAgbGl2ZUV2ZW50cy5wdXNoKGV2dHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBldmVudCBmcm9tIHF1ZXVlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICAvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2xhemRcbiAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvY29tbWl0L2M2ZWJmYWE5YmM5NzNiMzNkMTEwYTg0YTMwNzc0MmI3Y2Y5NGM5NTMjY29tbWl0Y29tbWVudC01MDI0OTEwXG5cbiAgICAobGl2ZUV2ZW50cy5sZW5ndGgpXG4gICAgICA/IGVbbmFtZV0gPSBsaXZlRXZlbnRzXG4gICAgICA6IGRlbGV0ZSBlW25hbWVdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRTtcbm1vZHVsZS5leHBvcnRzLlRpbnlFbWl0dGVyID0gRTtcblxuXG4vKioqLyB9KVxuXG4vKioqKioqLyBcdH0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0ICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi9cbi8qKioqKiovIFx0IWZ1bmN0aW9uKCkge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG4vKioqKioqLyBcdFx0XHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9XG4vKioqKioqLyBcdH0oKTtcbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLyoqKioqKi8gXHQvLyBzdGFydHVwXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODYpO1xuLyoqKioqKi8gfSkoKVxuLmRlZmF1bHQ7XG59KTsiLCAiZXhwb3J0IHtkZWZhdWx0IGFzIENsaXBib2FyZH0gZnJvbSAnY2xpcGJvYXJkJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxvRkFBQUEsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1BQU0sT0FBT0QsWUFBUSxZQUFZQSxRQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSw4RUFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxN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QUN2RyxFQUFFO0FBTUYsaUJBQU9QLG9CQUFvQixHQUFHO1FBQy9CLEVBQUcsRUFDWFM7O0lBQ0QsQ0FBQztFQUFBO0FBQUEsQ0FBQTs7QUN6M0JELElBQUFDLG9CQUFBLENBQUE7QUFBQUMsU0FBQUQsbUJBQUE7RUFBQXhHLFdBQUFBLE1BQUEwRyxpQkFBQUg7QUFBQSxDQUFBO0FBQUFJLE9BQUF0UCxVQUFBdVAsYUFBQUosaUJBQUE7QUFBQSxJQUFBRSxtQkFBbUNHLFFBQUExUCxrQkFBQSxDQUFBOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jbGlwYm9hcmQiLCAiX19jb21tb25KUyIsICJleHBvcnRzIiwgIm1vZHVsZTIiLCAid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCAicm9vdCIsICJmYWN0b3J5IiwgImRlZmluZSIsICJhbWQiLCAiX193ZWJwYWNrX21vZHVsZXNfXyIsICJfX3VudXNlZF93ZWJwYWNrX21vZHVsZSIsICJfX3dlYnBhY2tfZXhwb3J0c19fIiwgIl9fd2VicGFja19yZXF1aXJlX18yIiwgImQiLCAiY2xpcGJvYXJkIiwgInRpbnlfZW1pdHRlciIsICJ0aW55X2VtaXR0ZXJfZGVmYXVsdCIsICJuIiwgImxpc3RlbiIsICJsaXN0ZW5fZGVmYXVsdCIsICJzcmNfc2VsZWN0IiwgInNlbGVjdF9kZWZhdWx0IiwgImNvbW1hbmQiLCAidHlwZSIsICJkb2N1bWVudCIsICJleGVjQ29tbWFuZCIsICJlcnIiLCAiQ2xpcGJvYXJkQWN0aW9uQ3V0IiwgIkNsaXBib2FyZEFjdGlvbkN1dDIiLCAidGFyZ2V0IiwgInNlbGVjdGVkVGV4dCIsICJhY3Rpb25zX2N1dCIsICJjcmVhdGVGYWtlRWxlbWVudCIsICJ2YWx1ZSIsICJpc1JUTCIsICJkb2N1bWVudEVsZW1lbnQiLCAiZ2V0QXR0cmlidXRlIiwgImZha2VFbGVtZW50IiwgImNyZWF0ZUVsZW1lbnQiLCAic3R5bGUiLCAiZm9udFNpemUiLCAiYm9yZGVyIiwgInBhZGRpbmciLCAibWFyZ2luIiwgInBvc2l0aW9uIiwgInlQb3NpdGlvbiIsICJ3aW5kb3ciLCAicGFnZVlPZmZzZXQiLCAic2Nyb2xsVG9wIiwgInRvcCIsICJjb25jYXQiLCAic2V0QXR0cmlidXRlIiwgImZha2VDb3B5QWN0aW9uIiwgImZha2VDb3B5QWN0aW9uMiIsICJvcHRpb25zIiwgImNvbnRhaW5lciIsICJhcHBlbmRDaGlsZCIsICJyZW1vdmUiLCAiQ2xpcGJvYXJkQWN0aW9uQ29weSIsICJDbGlwYm9hcmRBY3Rpb25Db3B5MiIsICJhcmd1bWVudHMiLCAibGVuZ3RoIiwgImJvZHkiLCAiSFRNTElucHV0RWxlbWVudCIsICJpbmNsdWRlcyIsICJhY3Rpb25zX2NvcHkiLCAiX3R5cGVvZiIsICJvYmoiLCAiU3ltYm9sIiwgIml0ZXJhdG9yIiwgIl90eXBlb2YyIiwgIm9iajIiLCAiY29uc3RydWN0b3IiLCAicHJvdG90eXBlIiwgIkNsaXBib2FyZEFjdGlvbkRlZmF1bHQiLCAiQ2xpcGJvYXJkQWN0aW9uRGVmYXVsdDIiLCAiX29wdGlvbnMkYWN0aW9uIiwgImFjdGlvbiIsICJ0ZXh0IiwgIkVycm9yIiwgIm5vZGVUeXBlIiwgImhhc0F0dHJpYnV0ZSIsICJhY3Rpb25zX2RlZmF1bHQiLCAiY2xpcGJvYXJkX3R5cGVvZiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiaW5zdGFuY2UiLCAiQ29uc3RydWN0b3IiLCAiVHlwZUVycm9yIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgInByb3BzIiwgImkiLCAiZGVzY3JpcHRvciIsICJlbnVtZXJhYmxlIiwgImNvbmZpZ3VyYWJsZSIsICJ3cml0YWJsZSIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAia2V5IiwgIl9jcmVhdGVDbGFzcyIsICJwcm90b1Byb3BzIiwgInN0YXRpY1Byb3BzIiwgIl9pbmhlcml0cyIsICJzdWJDbGFzcyIsICJzdXBlckNsYXNzIiwgImNyZWF0ZSIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgInNldFByb3RvdHlwZU9mIiwgIl9zZXRQcm90b3R5cGVPZjIiLCAibzIiLCAicDIiLCAiX19wcm90b19fIiwgIl9jcmVhdGVTdXBlciIsICJEZXJpdmVkIiwgImhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfY3JlYXRlU3VwZXJJbnRlcm5hbCIsICJTdXBlciIsICJfZ2V0UHJvdG90eXBlT2YiLCAicmVzdWx0IiwgIk5ld1RhcmdldCIsICJSZWZsZWN0IiwgImNvbnN0cnVjdCIsICJhcHBseSIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgImNhbGwiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJSZWZlcmVuY2VFcnJvciIsICJzaGFtIiwgIlByb3h5IiwgIkRhdGUiLCAidG9TdHJpbmciLCAiZSIsICJnZXRQcm90b3R5cGVPZiIsICJfZ2V0UHJvdG90eXBlT2YyIiwgImdldEF0dHJpYnV0ZVZhbHVlIiwgInN1ZmZpeCIsICJlbGVtZW50IiwgImF0dHJpYnV0ZSIsICJDbGlwYm9hcmQiLCAiX0VtaXR0ZXIiLCAiQ2xpcGJvYXJkMiIsICJfc3VwZXIiLCAidHJpZ2dlciIsICJfdGhpcyIsICJyZXNvbHZlT3B0aW9ucyIsICJsaXN0ZW5DbGljayIsICJkZWZhdWx0QWN0aW9uIiwgImRlZmF1bHRUYXJnZXQiLCAiZGVmYXVsdFRleHQiLCAiX3RoaXMyIiwgImxpc3RlbmVyIiwgIm9uQ2xpY2siLCAiZGVsZWdhdGVUYXJnZXQiLCAiY3VycmVudFRhcmdldCIsICJlbWl0IiwgImNsZWFyU2VsZWN0aW9uIiwgImZvY3VzIiwgImdldFNlbGVjdGlvbiIsICJyZW1vdmVBbGxSYW5nZXMiLCAic2VsZWN0b3IiLCAicXVlcnlTZWxlY3RvciIsICJkZXN0cm95IiwgImNvcHkiLCAiY3V0IiwgImlzU3VwcG9ydGVkIiwgImFjdGlvbnMiLCAic3VwcG9ydCIsICJxdWVyeUNvbW1hbmRTdXBwb3J0ZWQiLCAiZm9yRWFjaCIsICJhY3Rpb24yIiwgIm1vZHVsZTMiLCAiRE9DVU1FTlRfTk9ERV9UWVBFIiwgIkVsZW1lbnQiLCAibWF0Y2hlcyIsICJwcm90byIsICJtYXRjaGVzU2VsZWN0b3IiLCAibW96TWF0Y2hlc1NlbGVjdG9yIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIm9NYXRjaGVzU2VsZWN0b3IiLCAid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwgImNsb3Nlc3QiLCAicGFyZW50Tm9kZSIsICJfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMiLCAiX2RlbGVnYXRlIiwgImNhbGxiYWNrIiwgInVzZUNhcHR1cmUiLCAibGlzdGVuZXJGbiIsICJhZGRFdmVudExpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiZGVsZWdhdGUiLCAiZWxlbWVudHMiLCAiYmluZCIsICJxdWVyeVNlbGVjdG9yQWxsIiwgIkFycmF5IiwgIm1hcCIsICJleHBvcnRzMiIsICJub2RlIiwgIkhUTUxFbGVtZW50IiwgIm5vZGVMaXN0IiwgInN0cmluZyIsICJTdHJpbmciLCAiZm4iLCAiaXMiLCAibGlzdGVuTm9kZSIsICJsaXN0ZW5Ob2RlTGlzdCIsICJsaXN0ZW5TZWxlY3RvciIsICJzZWxlY3QiLCAibm9kZU5hbWUiLCAiaXNSZWFkT25seSIsICJzZXRTZWxlY3Rpb25SYW5nZSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAic2VsZWN0aW9uIiwgInJhbmdlIiwgImNyZWF0ZVJhbmdlIiwgInNlbGVjdE5vZGVDb250ZW50cyIsICJhZGRSYW5nZSIsICJFIiwgIm9uIiwgIm5hbWUiLCAiY3R4IiwgInB1c2giLCAib25jZSIsICJvZmYiLCAiXyIsICJkYXRhIiwgInNsaWNlIiwgImV2dEFyciIsICJsZW4iLCAiZXZ0cyIsICJsaXZlRXZlbnRzIiwgIlRpbnlFbWl0dGVyIiwgIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsICJfX3dlYnBhY2tfcmVxdWlyZV9fIiwgIm1vZHVsZUlkIiwgImdldHRlciIsICJfX2VzTW9kdWxlIiwgImEiLCAiZGVmaW5pdGlvbiIsICJnZXQiLCAicHJvcCIsICJoYXNPd25Qcm9wZXJ0eSIsICJkZWZhdWx0IiwgIkNsaXBib2FyZF9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImltcG9ydF9jbGlwYm9hcmQiLCAibW9kdWxlIiwgIl9fdG9Db21tb25KUyIsICJfX3RvRVNNIl0KfQo= diff --git a/dist/DisamAssist/DisamAssist.js b/dist/DisamAssist/DisamAssist.js index 3fd3702c..2b508a79 100644 --- a/dist/DisamAssist/DisamAssist.js +++ b/dist/DisamAssist/DisamAssist.js @@ -28,9 +28,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -44,9 +44,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -58,9 +58,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -71,9 +71,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -84,9 +84,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -96,9 +96,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -110,9 +110,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -125,9 +125,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -141,9 +141,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -154,9 +154,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -171,9 +171,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -181,9 +181,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -194,9 +194,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -206,9 +206,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -219,9 +219,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -230,9 +230,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -245,18 +245,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -265,9 +265,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -292,9 +292,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -308,18 +308,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -335,9 +335,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -350,9 +350,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -364,9 +364,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -377,9 +377,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -395,17 +395,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -420,9 +420,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -430,18 +430,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -450,9 +450,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -462,9 +462,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -475,9 +475,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -489,9 +489,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -511,9 +511,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -539,9 +539,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -552,9 +552,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -566,9 +566,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -583,9 +583,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -608,9 +608,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -624,9 +624,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -638,9 +638,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -684,9 +684,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -700,9 +700,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -720,9 +720,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -737,9 +737,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -748,9 +748,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -761,17 +761,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -844,9 +844,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -899,9 +899,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -934,9 +934,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -947,9 +947,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -959,9 +959,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -973,9 +973,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -986,9 +986,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -997,9 +997,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1032,9 +1032,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1056,9 +1056,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1072,9 +1072,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1085,17 +1085,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1111,9 +1111,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1133,9 +1133,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1154,9 +1154,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1197,9 +1197,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1208,9 +1208,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1235,9 +1235,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/delete-property-or-throw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/delete-property-or-throw.js var require_delete_property_or_throw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/delete-property-or-throw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/delete-property-or-throw.js"(exports, module2) { "use strict"; var tryToString = require_try_to_string(); var $TypeError = TypeError; @@ -1247,9 +1247,9 @@ var require_delete_property_or_throw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1260,9 +1260,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.unshift.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.unshift.js var require_es_array_unshift = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.unshift.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.unshift.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -2318,4 +2318,4 @@ $(install); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS51bnNoaWZ0LmpzIiwgInNyYy9EaXNhbUFzc2lzdC9tb2R1bGVzL2FwaS50cyIsICJzcmMvRGlzYW1Bc3Npc3QvbW9kdWxlcy9jb25maWcudHMiLCAic3JjL0Rpc2FtQXNzaXN0L21vZHVsZXMvbWVzc2FnZXMuanMiLCAic3JjL0Rpc2FtQXNzaXN0L21vZHVsZXMvY29yZS5qcyIsICJzcmMvRGlzYW1Bc3Npc3QvRGlzYW1Bc3Npc3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcblxuLy8gSUU4LVxudmFyIElOQ09SUkVDVF9SRVNVTFQgPSBbXS51bnNoaWZ0KDApICE9PSAxO1xuXG4vLyBWOCB+IENocm9tZSA8IDcxIGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS51bnNoaWZ0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1JFU1VMVCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUudW5zaGlmdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS51bnNoaWZ0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdW5zaGlmdDogZnVuY3Rpb24gdW5zaGlmdChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnQ291bnQpIHtcbiAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgICB2YXIgayA9IGxlbjtcbiAgICAgIHdoaWxlIChrLS0pIHtcbiAgICAgICAgdmFyIHRvID0gayArIGFyZ0NvdW50O1xuICAgICAgICBpZiAoayBpbiBPKSBPW3RvXSA9IE9ba107XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJnQ291bnQ7IGorKykge1xuICAgICAgICBPW2pdID0gYXJndW1lbnRzW2pdO1xuICAgICAgfVxuICAgIH0gcmV0dXJuIHNldEFycmF5TGVuZ3RoKE8sIGxlbiArIGFyZ0NvdW50KTtcbiAgfVxufSk7XG4iLCAiaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmNvbnN0IGFwaTogbXcuQXBpID0gaW5pdE13QXBpKCdEaXNhbUFzc2lzdC8xLjEnKTtcblxuZXhwb3J0IHthcGl9O1xuIiwgImNvbnN0IGNmZyA9IHtcblx0LyogQ2F0ZWdvcmllcyB3aGVyZSBkaXNhbWJpZ3VhdGlvbiBwYWdlcyBhcmUgYWRkZWQgKHVzdWFsbHkgYnkgYSB0ZW1wbGF0ZSBsaWtlIHt7RGlzYW1iaWd1YXRpb259fSAqL1xuXHRkaXNhbUNhdGVnb3JpZXM6IFsn5YWo6YOo5raI5q2n5LmJ6aG16Z2iJ10sXG5cdC8qIFwiQ2Fub25pY2FsIG5hbWVzXCIgb2YgdGhlIHRlbXBsYXRlcyB0aGF0IG1heSBhcHBlYXIgYWZ0ZXIgYW1iaWd1b3VzIGxpbmtzIGFuZCB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIGZpeGluZyB0aG9zZSBsaW5rcyAqL1xuXHRkaXNhbUxpbmtUZW1wbGF0ZXM6IFtcblx0XHQnRGlzYW1iaWd1YXRpb24gbmVlZGVkJyxcblx0XHQnQW1iaWd1b3VzIGxpbmsnLFxuXHRcdCdBbWJsaW5rJyxcblx0XHQnRGFiIG5lZWRlZCcsXG5cdFx0J0Rpc2FtYi1saW5rJyxcblx0XHQnRGlzYW1iaWcgbmVlZGVkJyxcblx0XHQnRGlzYW1iaWd1YXRlJyxcblx0XHQnRG4nLFxuXHRcdCdOZWVkZGFiJyxcblx0XSxcblx0LyogXCJDYW5vbmljYWwgbmFtZXNcIiBvZiB0aGUgdGVtcGxhdGVzIHRoYXQgZGVzaWduYXRlIGludGVudGlvbmFsIGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VzICovXG5cdGRpc2FtTGlua0lnbm9yZVRlbXBsYXRlczogWydSIGZyb20gYW1iaWd1b3VzIHBhZ2UnLCAnUiB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlJywgJ1IgZnJvbSBpbmNvbXBsZXRlIGRpc2FtYmlndWF0aW9uJ10sXG5cdC8qIEZvcm1hdCBzdHJpbmcgZm9yIFwiRm9vIChkaXNhbWJpZ3VhdGlvbilcIi1zdHlsZSBwYWdlcyAqL1xuXHRkaXNhbUZvcm1hdDogJyQx77yI5raI5q2n5LmJ77yJJyxcblx0LyogUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSB0aXRsZXMgb2YgZGlzYW1iaWd1YXRpb24gcGFnZXMgKHdoZW4gdGhleSBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHRpdGxlcyBvZiB0aGUgcHJpbWFyeSB0b3BpY3MpICovXG5cdGRpc2FtUmVnRXhwOiAnXiguKinvvIgo5raI5q2n5LmJfOa2iOatp+e+qSnvvIkkJyxcblx0LyogVGV4dCB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGxpbmsgaWYgdGhlIHVzZXIgcmVxdWVzdHMgaGVscC4gSWYgdGhlIHZhbHVlIGlzIG51bGwsIHRoZSBvcHRpb24gdG8gcmVxdWVzdCBoZWxwIHdvbid0IGJlIG9mZmVyZWQgKi9cblx0ZGlzYW1OZWVkZWRUZXh0OiAne3tkbnxkYXRlPXt7Jy5jb25jYXQoJ3N1YnN0OicsICdDVVJSRU5UTU9OVEhOQU1FJywgJ319IHt7JywgJ3N1YnN0OicsICdDVVJSRU5UWUVBUn19fX0nKSxcblx0LyogQ29udGVudCBvZiB0aGUgXCJGb28gKGRpc2FtYmlndWF0aW9uKVwiIHBhZ2VzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2luZyBEaXNhbUFzc2lzdCBmcm9tIGEgXCJGb29cIiBwYWdlICovXG5cdHJlZGlyZWN0VG9EaXNhbTogJyPph43lrprlkJEgW1skMV1dJy5jb25jYXQoJ3t7UiB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlfX0nKSxcblx0LyogV2hldGhlciBpbnRlbnRpb25hbCBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlcyBjYW4gYmUgZXhwbGljaXRseSBtYXJrZWQgYnkgYWRkaW5nIFwiIChkaXNhbWJpZ3VhdGlvbilcIiAqL1xuXHRpbnRlbnRpb25hbExpbmtPcHRpb246IGZhbHNlLFxuXHQvKiBOYW1lc3BhY2VzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZCBmb3IgaW5jb21pbmcgbGlua3MgdG8gdGhlIGRpc2FtYmlndWF0aW9uIHBhZ2UgKHBhZ2VzIGluIG90aGVyIG5hbWVzcGFjZXMgd2lsbCBiZSBpZ25vcmVkKSAqL1xuXHR0YXJnZXROYW1lc3BhY2VzOiBbNiwgMTAsIDE0LCAxMTgsIDBdLFxuXHQvKiBOdW1iZXIgb2YgYmFja2xpbmtzIHRoYXQgd2lsbCBiZSBkb3dubG9hZGVkIGF0IG9uY2UgV2hlbiB1c2luZyBibHJlZGlyZWN0LCB0aGUgbWF4aW11bSBsaW1pdCBpcyBzdXBwb3NlZGx5IGhhbHZlZCAoc2VlIGh0dHA6Ly93d3cubWVkaWF3aWtpLm9yZy93aWtpL0FQSTpCYWNrbGlua3MpICovXG5cdGJhY2tsaW5rTGltaXQ6IDI1MCxcblx0LyogTnVtYmVyIG9mIHRpdGxlcyB3ZSBjYW4gcXVlcnkgZm9yIGF0IG9uY2UgKi9cblx0cXVlcnlUaXRsZUxpbWl0OiA1MCxcblx0LyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgaW5jb21pbmcgbGluayB0aGF0IHdpbGwgYmUgZGlzcGxheWVkICovXG5cdHJhZGl1czogMzAwLFxuXHQvKiBIZWlnaHQgb2YgdGhlIGNvbnRleHQgYm94LCBpbiBsaW5lcyAqL1xuXHRudW1Db250ZXh0TGluZXM6IDQsXG5cdC8qIE51bWJlciBvZiBwYWdlcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGJlZm9yZSBzYXZpbmcsIHNvIHRoYXQgY2hhbmdlcyB0byB0aGVtIGNhbiBiZSB1bmRvbmUgaWYgbmVlZCBiZSAqL1xuXHRoaXN0b3J5U2l6ZTogMixcblx0LyogTWluaW11bSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGxhc3QgY2hhbmdlIHdhcyBzYXZlZCBiZWZvcmUgYSBuZXcgZWRpdCBjYW4gYmUgbWFkZS4gQSBuZWdhdGl2ZSB2YWx1ZSBvciAwIGRpc2FibGVzIHRoZSBjb29sZG93bi4gVXNlcnMgd2l0aCB0aGUgXCJib3RcIiByaWdodCB3b24ndCBiZSBhZmZlY3RlZCBieSB0aGUgY29vbGRvd24gKi9cblx0ZWRpdENvb2xkb3duOiAwLFxuXHQvKiBTcGVjaWZ5IGhvdyB0aGUgd2F0Y2hsaXN0IGlzIGFmZmVjdGVkIGJ5IERpc2FtQXNzaXN0IGVkaXRzLiBQb3NzaWJsZSB2YWx1ZXM6IFwid2F0Y2hcIiwgXCJ1bndhdGNoXCIsIFwicHJlZmVyZW5jZXNcIiwgXCJub2NoYW5nZVwiICovXG5cdHdhdGNoOiAnbm9jaGFuZ2UnLFxufTtcblxuZXhwb3J0IHtjZmd9O1xuIiwgImNvbnN0IG1lc3NhZ2VzID0ge1xuXHRzdGFydDogJ+S4uumTvuaOpea2iOatp+S5iScsXG5cdHN0YXJ0TWFpbjogJ+S4uumTvuiHs+S4u+adoeebrueahOmTvuaOpea2iOatp+S5iScsXG5cdHN0YXJ0U2FtZTogJ+S4uumTvuiHs+a2iOatp+S5iemhteeahOmTvuaOpea2iOatp+S5iScsXG5cdGNsb3NlOiAn5YWz6ZetJyxcblx0dW5kbzogJ+WkjeWOnycsXG5cdG9taXQ6ICfot7Pov4cnLFxuXHRyZWZyZXNoOiAn6YeN5paw5pW055CGJyxcblx0dGl0bGVBc1RleHQ6ICflhbblroPnm67moIcnLFxuXHRkaXNhbU5lZWRlZDogJ+agh+ekunt7ZG59fScsXG5cdGludGVudGlvbmFsTGluazogJ+acieaEj+mTvuWIsOa2iOatp+S5iemhteeahOmTvuaOpScsXG5cdHRpdGxlQXNUZXh0UHJvbXB0OiAn6K+36L6T5YWl5paw55qE6ZO+5o6l55uu5qCH77yaJyxcblx0cmVtb3ZlTGluazogJ+WOu+mZpOmTvuaOpScsXG5cdG9wdGlvbk1hcmtlcjogJyBb6ZO+5o6l5Yiw6L+Z6YeMXScsXG5cdHRhcmdldE9wdGlvbk1hcmtlcjogJyBb5b2T5YmN55uu5qCHXScsXG5cdHJlZGlyZWN0T3B0aW9uTWFya2VyOiAnIFvlvZPliY3nm67moIfvvIjph43lrprlkJHvvIldJyxcblx0cGFnZVRpdGxlTGluZTogJzxhIGhyZWY9XCIkMVwiPiQyPC9hPu+8micsXG5cdG5vTW9yZUxpbmtzOiAn5rKh5pyJ6ZyA6KaB5raI5q2n5LmJ55qE6ZO+5o6l5LqG44CCJyxcblx0cGVuZGluZ0VkaXRDb3VudGVyOiAn5bey5L+d5a2YJDHkuKrvvIzlt7LnvJbovpEkMuS4qicsXG5cdHBlbmRpbmdFZGl0Qm94OiAnRGlzYW1Bc3Npc3TmraPlnKjlgqjlrZjmgqjnmoTnvJbovpHvvIgkMe+8ieOAgicsXG5cdHBlbmRpbmdFZGl0Qm94VGltZUVzdGltYXRpb246ICckMe+8m+WJqeS9meaXtumXtO+8miQyJyxcblx0cGVuZGluZ0VkaXRCb3hMaW1pdGVkOlxuXHRcdCflnKjmiYDmnInmm7TmlLnkv53lrZjliY3vvIzor7fkuI3opoHlhbPpl63pobXpnaLvvJvkvaDlj6/ku6XlnKjlj6bkuIDkuKrpobXpnaLnvJbovpHmsYLpl7vnmb7np5HvvIzkvYbmmK/or7fli7/lkIzml7bkvb/nlKjlpJrkuKpEaXNhbUFzc2lzdOOAgicsXG5cdGVycm9yOiAn6ZSZ6K+v77yaJDEnLFxuXHRmZXRjaFJlZGlyZWN0c0Vycm9yOiAn6I635Y+W6YeN5a6a5ZCR5aSx6LSl77yaXCIkMVwiLicsXG5cdGdldEJhY2tsaW5rc0Vycm9yOiAn5LiL6L295Y+N5ZCR6ZO+5o6l5aSx6LSl77yaXCIkMVwiLicsXG5cdGZldGNoUmlnaHRzRXJyb3I6ICfojrflj5bnlKjmiLfmnYPpmZDlpLHotKXvvJpcIiQxXCIsJyxcblx0bG9hZFBhZ2VFcnJvcjogJ+WKoOi9vSQx5aSx6LSl77yaXCIkMlwiLicsXG5cdHNhdmVQYWdlRXJyb3I6ICfkv53lrZjoh7MkMeWksei0pe+8mlwiJDJcIi4nLFxuXHRkaXNtaXNzRXJyb3I6ICdEaXNtaXNzJyxcblx0cGVuZGluZzogJ0Rpc2FtQXNzaXN05bCa5pyJ5pyq5YKo5a2Y55qE57yW6L6R44CC5aaC5qyy5YKo5a2Y5LmL77yM6K+35oyJ4oCc5YWz6Zet4oCd44CCJyxcblx0ZWRpdEluUHJvZ3Jlc3M6ICdEaXNhbUFzc2lzdOato+WcqOi/m+ihjOe8lui+keOAguiLpeaCqOWwhuacrOWIhumhteWFs+mXre+8jOWPr+iDveS8muS4p+WkseaCqOeahOe8lui+keOAgicsXG5cdGVsbGlwc2lzOiAn4oCm4oCmJyxcblx0bm90aWZ5Q2hhcmFjdGVyOiAn4pyUJyxcblx0c3VtbWFyeTogJ+S9v+eUqFtbTWVkaWFXaWtpOkdhZGdldC1EaXNhbUFzc2lzdC5qc3xEaXNhbUFzc2lzdF1d5riF55CGW1tRVzpEQUJ85raI5q2n5LmJXV3pk77mjqXvvJpbWyQxXV3vvIgkMu+8ieOAgicsXG5cdHN1bW1hcnlDaGFuZ2VkOiAn5pS56ZO+5o6l6IezW1skMV1dJyxcblx0c3VtbWFyeU9taXR0ZWQ6ICfpk77mjqXlt7Lot7Pov4cnLFxuXHRzdW1tYXJ5UmVtb3ZlZDogJ+mTvuaOpeW3suenu+mZpCcsXG5cdHN1bW1hcnlJbnRlbnRpb25hbDogJ+WIu+aEj+mTvuaOpeiHs+a2iOatp+S5iemhtemdoicsXG5cdHN1bW1hcnlIZWxwTmVlZGVkOiAn6ZyA6KaB5biu5YqpJyxcblx0c3VtbWFyeVNlcGFyYXRvcjogJzsgJyxcblx0cmVkaXJlY3RTdW1tYXJ5OiAn5L2/55SoW1tNZWRpYVdpa2k6R2FkZ2V0LURpc2FtQXNzaXN0LmpzfERpc2FtQXNzaXN0XV3liJvlu7rnm67moIfkuLpbWyQxXV3nmoTph43lrprlkJHjgIInLFxufTtcblxuZXhwb3J0IHttZXNzYWdlc307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge2NmZ30gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHttZXNzYWdlc30gZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmxldCBzdGFydExpbms7XG5sZXQgdWk7XG5sZXQgbGlua3M7XG5sZXQgcGFnZUNoYW5nZXM7XG5sZXQgY3VycmVudFBhZ2VUaXRsZTtcbmxldCBjdXJyZW50UGFnZVBhcmFtZXRlcnM7XG5sZXQgY3VycmVudExpbms7XG5sZXQgcG9zc2libGVCYWNrbGlua0Rlc3RpbmF0aW9ucztcbmxldCBmb3JjZVNhbWVQYWdlID0gZmFsc2U7XG5sZXQgcnVubmluZyA9IGZhbHNlO1xubGV0IGNob29zaW5nID0gZmFsc2U7XG5sZXQgY2FuTWFya0ludGVudGlvbmFsTGlua3MgPSBmYWxzZTtcbmxldCBkaXNwbGF5ZWRQYWdlcyA9IHt9O1xubGV0IGVkaXRDb3VudCA9IDA7XG5sZXQgZWRpdExpbWl0O1xuY29uc3QgcGVuZGluZ1NhdmVzID0gW107XG5sZXQgcGVuZGluZ0VkaXRCb3g7XG5sZXQgcGVuZGluZ0VkaXRCb3hUZXh0O1xubGV0IGxhc3RFZGl0TWlsbGlzID0gMDtcbmxldCBydW5uaW5nU2F2ZXMgPSBmYWxzZTtcblxuLyogRW50cnkgcG9pbnQuIENoZWNrIHdoZXRoZXIgd2UgYXJlIGluIGEgZGlzYW1iaWd1YXRpb24gcGFnZS4gSWYgc28sIGFkZCBhIGxpbmsgdG8gc3RhcnQgdGhlIHRvb2wgKi9cbmNvbnN0IGluc3RhbGwgPSAoKSA9PiB7XG5cdGNvbnN0IHt3Z0FjdGlvbn0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdGlmICh3Z0FjdGlvbiAhPT0gJ3ZpZXcnIHx8ICFpc0Rpc2FtKCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0JCgoKSA9PiB7XG5cdFx0Y29uc3QgcG9ydGxldElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3AtY2FjdGlvbnMnKSA/ICdwLWNhY3Rpb25zJyA6ICdwLXRiJztcblx0XHQvLyBUaGlzIGlzIGEgXCIgKGRpc2FtYmlndWF0aW9uKVwiIHBhZ2Vcblx0XHRpZiAobmV3IFJlZ0V4cChjZmcuZGlzYW1SZWdFeHApLnRlc3QoZ2V0VGl0bGUoKSkpIHtcblx0XHRcdGNvbnN0IHN0YXJ0TWFpbkxpbmsgPSAkKFxuXHRcdFx0XHRtdy51dGlsLmFkZFBvcnRsZXRMaW5rKHBvcnRsZXRJZCwgJyMnLCBtZXNzYWdlcy5zdGFydE1haW4sICdjYS1kaXNhbWFzc2lzdC1tYWluJylcblx0XHRcdCkub24oJ2NsaWNrJywgc3RhcnRNYWluKTtcblx0XHRcdGNvbnN0IHN0YXJ0U2FtZUxpbmsgPSAkKFxuXHRcdFx0XHRtdy51dGlsLmFkZFBvcnRsZXRMaW5rKHBvcnRsZXRJZCwgJyMnLCBtZXNzYWdlcy5zdGFydFNhbWUsICdjYS1kaXNhbWFzc2lzdC1zYW1lJylcblx0XHRcdCkub24oJ2NsaWNrJywgc3RhcnRTYW1lKTtcblx0XHRcdHN0YXJ0TGluayA9IHN0YXJ0TWFpbkxpbmsuYWRkKHN0YXJ0U2FtZUxpbmspO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFydExpbmsgPSAkKG13LnV0aWwuYWRkUG9ydGxldExpbmsocG9ydGxldElkLCAnIycsIG1lc3NhZ2VzLnN0YXJ0LCAnY2EtZGlzYW1hc3Npc3QtcGFnZScpKS5vbihcblx0XHRcdFx0J2NsaWNrJyxcblx0XHRcdFx0c3RhcnRcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qIFN0YXJ0IHRoZSB0b29sLiBEaXNwbGF5IHRoZSBVSSBhbmQgYmVnaW4gbG9va2luZyBmb3IgbGlua3MgdG8gZml4ICovXG5jb25zdCBzdGFydCA9ICgpID0+IHtcblx0aWYgKHJ1bm5pbmcpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRydW5uaW5nID0gdHJ1ZTtcblx0bGlua3MgPSBbXTtcblx0cGFnZUNoYW5nZXMgPSBbXTtcblx0ZGlzcGxheWVkUGFnZXMgPSB7fTtcblx0ZW5zdXJlREFCRXhpc3RzKCkudGhlbigoY2FuTWFyaykgPT4ge1xuXHRcdGNhbk1hcmtJbnRlbnRpb25hbExpbmtzID0gY2FuTWFyaztcblx0XHRjcmVhdGVVSSgpO1xuXHRcdGFkZFVubG9hZENvbmZpcm0oKTtcblx0XHRtYXJrRGlzYW1PcHRpb25zKCk7XG5cdFx0Y2hlY2tFZGl0TGltaXQoKS50aGVuKCgpID0+IHtcblx0XHRcdHRvZ2dsZVBlbmRpbmdFZGl0Qm94KGZhbHNlKTtcblx0XHRcdGRvUGFnZSgpO1xuXHRcdH0pO1xuXHR9KTtcbn07XG5cbi8qIFN0YXJ0IERpc2FtQXNzaXN0LiBEaXNhbWJpZ3VhdGUgaW5jb21pbmcgbGlua3MgdG8gdGhlIGN1cnJlbnQgcGFnZSwgcmVnYXJkbGVzcyBvZiB0aGUgdGl0bGUuICovXG5jb25zdCBzdGFydFNhbWUgPSAoKSA9PiB7XG5cdGZvcmNlU2FtZVBhZ2UgPSB0cnVlO1xuXHRzdGFydCgpO1xufTtcblxuLyogU3RhcnQgRGlzYW1Bc3Npc3QuIElmIHRoZSBwYWdlIHRpdGxlIGVuZHMgd2l0aCBcIiAoZGlzYW1iaWd1YXRpb24pXCIsIGRpc2FtYmlndWF0ZSBsaW5rcyB0byB0aGUgcHJpbWFyeSB0b3BpYyBhcnRpY2xlLiBPdGhlcndpc2UsIGRpc2FtYmlndWF0ZSBsaW5rcyB0byB0aGUgY3VycmVudCBwYWdlLiAqL1xuY29uc3Qgc3RhcnRNYWluID0gKCkgPT4ge1xuXHRmb3JjZVNhbWVQYWdlID0gZmFsc2U7XG5cdHN0YXJ0KCk7XG59O1xuXG4vKiBDcmVhdGUgYW5kIHNob3cgdGhlIHVzZXIgaW50ZXJmYWNlLiAqL1xuY29uc3QgY3JlYXRlVUkgPSAoKSA9PiB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHR1aSA9IHtcblx0XHRkaXNwbGF5OiAkKCc8ZGl2PicpLmFkZENsYXNzKCdkaXNhbWFzc2lzdC1ib3ggZGlzYW1hc3Npc3QtbWFpbmJveCcpLFxuXHRcdGZpbmlzaGVkTWVzc2FnZTogJCgnPGRpdj4nKS50ZXh0KG1lc3NhZ2VzLm5vTW9yZUxpbmtzKS5oaWRlKCksXG5cdFx0cGFnZVRpdGxlTGluZTogJCgnPHNwYW4+JykuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LXBhZ2V0aXRsZWxpbmUnKSxcblx0XHRwZW5kaW5nRWRpdENvdW50ZXI6ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LWVkaXRjb3VudGVyJyksXG5cdFx0Y29udGV4dDogJCgnPHNwYW4+JykuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LWNvbnRleHQnKSxcblx0XHR1bmRvQnV0dG9uOiBjcmVhdGVCdXR0b24obWVzc2FnZXMudW5kbywgdW5kbyksXG5cdFx0b21pdEJ1dHRvbjogY3JlYXRlQnV0dG9uKG1lc3NhZ2VzLm9taXQsIG9taXQpLFxuXHRcdGVuZEJ1dHRvbjogY3JlYXRlQnV0dG9uKG1lc3NhZ2VzLmNsb3NlLCBzYXZlQW5kRW5kKSxcblx0XHRyZWZyZXNoQnV0dG9uOiBjcmVhdGVCdXR0b24obWVzc2FnZXMucmVmcmVzaCwgcmVmcmVzaCksXG5cdFx0dGl0bGVBc1RleHRCdXR0b246IGNyZWF0ZUJ1dHRvbihtZXNzYWdlcy50aXRsZUFzVGV4dCwgY2hvb3NlVGl0bGVGcm9tUHJvbXB0KSxcblx0XHRpbnRlbnRpb25hbExpbmtCdXR0b246IGNhbk1hcmtJbnRlbnRpb25hbExpbmtzXG5cdFx0XHQ/IGNyZWF0ZUJ1dHRvbihtZXNzYWdlcy5pbnRlbnRpb25hbExpbmssIGNob29zZUludGVudGlvbmFsTGluaylcblx0XHRcdDogJCgnPHNwYW4+JyksXG5cdFx0ZGlzYW1OZWVkZWRCdXR0b246IGNmZy5kaXNhbU5lZWRlZFRleHQgPyBjcmVhdGVCdXR0b24obWVzc2FnZXMuZGlzYW1OZWVkZWQsIGNob29zZURpc2FtTmVlZGVkKSA6ICQoJzxzcGFuPicpLFxuXHRcdHJlbW92ZUxpbmtCdXR0b246IGNyZWF0ZUJ1dHRvbihtZXNzYWdlcy5yZW1vdmVMaW5rLCBjaG9vc2VMaW5rUmVtb3ZhbCksXG5cdH07XG5cdGNvbnN0IHRvcCA9ICQoJzxkaXY+Jylcblx0XHQuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LXRvcCcpXG5cdFx0LmFwcGVuZChbdWkucGVuZGluZ0VkaXRDb3VudGVyLCB1aS5maW5pc2hlZE1lc3NhZ2UsIHVpLnBhZ2VUaXRsZUxpbmVdKTtcblx0Y29uc3QgbGVmdEJ1dHRvbnMgPSAkKCc8ZGl2PicpXG5cdFx0LmFkZENsYXNzKCdkaXNhbWFzc2lzdC1sZWZ0YnV0dG9ucycpXG5cdFx0LmFwcGVuZChbXG5cdFx0XHR1aS50aXRsZUFzVGV4dEJ1dHRvbixcblx0XHRcdHVpLnJlbW92ZUxpbmtCdXR0b24sXG5cdFx0XHR1aS5pbnRlbnRpb25hbExpbmtCdXR0b24sXG5cdFx0XHR1aS5kaXNhbU5lZWRlZEJ1dHRvbixcblx0XHRcdHVpLm9taXRCdXR0b24sXG5cdFx0XSk7XG5cdGNvbnN0IHJpZ2h0QnV0dG9ucyA9ICQoJzxkaXY+Jylcblx0XHQuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LXJpZ2h0YnV0dG9ucycpXG5cdFx0LmFwcGVuZChbdWkudW5kb0J1dHRvbiwgdWkucmVmcmVzaEJ1dHRvbiwgdWkuZW5kQnV0dG9uXSk7XG5cdGNvbnN0IGFsbEJ1dHRvbnMgPSAkKCc8ZGl2PicpLmFkZENsYXNzKCdkaXNhbWFzc2lzdC1hbGxidXR0b25zJykuYXBwZW5kKFtsZWZ0QnV0dG9ucywgcmlnaHRCdXR0b25zXSk7XG5cdHVpLmRpc3BsYXkuYXBwZW5kKFt0b3AsIHVpLmNvbnRleHQsIGFsbEJ1dHRvbnNdKTtcblx0dXBkYXRlRWRpdENvdW50ZXIoKTtcblx0dG9nZ2xlQWN0aW9uQnV0dG9ucyhmYWxzZSk7XG5cdC8vIEluc2VydCB0aGUgVUkgaW4gdGhlIHBhZ2Vcblx0JGJvZHkuZmluZCgnI213LWNvbnRlbnQtdGV4dCcpLmJlZm9yZSh1aS5kaXNwbGF5KTtcblx0dWkuZGlzcGxheS5oaWRlKCkuZmFkZUluKCk7XG59O1xuXG4vKiBJZiB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzLCBzaG93IGEgY29uZmlybSBkaWFsb2cgYmVmb3JlIGNsb3NpbmcgKi9cbmNvbnN0IGFkZFVubG9hZENvbmZpcm0gPSAoKSA9PiB7XG5cdCQod2luZG93KS5vbignYmVmb3JldW5sb2FkJywgKCkgPT4ge1xuXHRcdGlmIChydW5uaW5nICYmIGNoZWNrQWN0dWFsQ2hhbmdlcygpKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZXMucGVuZGluZztcblx0XHR9IGVsc2UgaWYgKGVkaXRDb3VudCAhPT0gMCkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLmVkaXRJblByb2dyZXNzO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKiBNYXJrIHRoZSBkaXNhbWJpZ3VhdGlvbiBvcHRpb25zIGFzIHN1Y2ggKi9cbmNvbnN0IG1hcmtEaXNhbU9wdGlvbnMgPSAoKSA9PiB7XG5cdGNvbnN0IG9wdGlvblBhZ2VUaXRsZXMgPSBbXTtcblx0Y29uc3Qgb3B0aW9uTWFya2VycyA9IFtdO1xuXHRnZXREaXNhbU9wdGlvbnMoKS5lYWNoKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBsaW5rID0gJChlbGVtZW50KTtcblx0XHRjb25zdCB0aXRsZSA9IGV4dHJhY3RQYWdlTmFtZShsaW5rKTtcblx0XHRjb25zdCBvcHRpb25NYXJrZXIgPSAkKCc8YT4nKVxuXHRcdFx0LmF0dHIoJ2hyZWYnLCAnIycpXG5cdFx0XHQuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LW9wdGlvbm1hcmtlcicpXG5cdFx0XHQudGV4dChtZXNzYWdlcy5vcHRpb25NYXJrZXIpXG5cdFx0XHQub24oJ2NsaWNrJywgKGV2KSA9PiB7XG5cdFx0XHRcdGV2LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGNob29zZVJlcGxhY2VtZW50KHRpdGxlKTtcblx0XHRcdH0pO1xuXHRcdGxpbmsuYWZ0ZXIob3B0aW9uTWFya2VyKTtcblx0XHRvcHRpb25NYXJrZXJzW29wdGlvbk1hcmtlcnMubGVuZ3RoXSA9IG9wdGlvbk1hcmtlcjtcblx0XHRvcHRpb25QYWdlVGl0bGVzW29wdGlvblBhZ2VUaXRsZXMubGVuZ3RoXSA9IHRpdGxlO1xuXHR9KTtcblx0Ly8gTm93IGNoZWNrIHRoZSBkaXNhbWJpZ3VhdGlvbiBvcHRpb25zIGFuZCBkaXNwbGF5IGEgZGlmZmVyZW50IG1lc3NhZ2UgZm9yIHRob3NlIHRoYXQgYXJlXG5cdC8vIGFjdHVhbGx5IHRoZSBzYW1lIGFzIHRoZSB0YXJnZXQgcGFnZSB3aGVyZSB0aGUgbGlua3MgZ28sIGFzIGNob29zaW5nIHRob3NlIG9wdGlvbnMgZG9lc24ndCByZWFsbHlcblx0Ly8gYWNjb21wbGlzaCBhbnl0aGluZyAoZXhjZXB0IGJ5cGFzc2luZyByZWRpcmVjdHMsIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bCBpbiBzb21lIGNhc2VzKVxuXHRjb25zdCB0YXJnZXRQYWdlID0gZ2V0VGFyZ2V0UGFnZSgpO1xuXHRmZXRjaFJlZGlyZWN0cyhbLi4ub3B0aW9uUGFnZVRpdGxlcywgLi4udGFyZ2V0UGFnZV0pXG5cdFx0LmRvbmUoKHJlZGlyZWN0cykgPT4ge1xuXHRcdFx0Y29uc3QgZW5kVGFyZ2V0UGFnZSA9IHJlc29sdmVSZWRpcmVjdCh0YXJnZXRQYWdlLCByZWRpcmVjdHMpO1xuXHRcdFx0Zm9yIChjb25zdCBbaWksIG9wdGlvblBhZ2VUaXRsZV0gb2Ygb3B0aW9uUGFnZVRpdGxlcy5lbnRyaWVzKCkpIHtcblx0XHRcdFx0Y29uc3QgZW5kT3B0aW9uVGl0bGUgPSByZXNvbHZlUmVkaXJlY3Qob3B0aW9uUGFnZVRpdGxlLCByZWRpcmVjdHMpO1xuXHRcdFx0XHRpZiAoaXNTYW1lUGFnZShvcHRpb25QYWdlVGl0bGUsIHRhcmdldFBhZ2UpKSB7XG5cdFx0XHRcdFx0b3B0aW9uTWFya2Vyc1tpaV0udGV4dChtZXNzYWdlcy50YXJnZXRPcHRpb25NYXJrZXIpLmFkZENsYXNzKCdkaXNhbWFzc2lzdC1jdXJyb3B0aW9ubWFya2VyJyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNTYW1lUGFnZShlbmRPcHRpb25UaXRsZSwgZW5kVGFyZ2V0UGFnZSkpIHtcblx0XHRcdFx0XHRvcHRpb25NYXJrZXJzW2lpXS50ZXh0KG1lc3NhZ2VzLnJlZGlyZWN0T3B0aW9uTWFya2VyKS5hZGRDbGFzcygnZGlzYW1hc3Npc3QtY3Vycm9wdGlvbm1hcmtlcicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuZmFpbChlcnJvcik7XG59O1xuXG4vKiBDaGVjayB3aGV0aGVyIGludGVudGlvbmFsIGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VzIGNhbiBiZSBleHBsaWNpdGx5IG1hcmtlZC8qICogYXMgc3VjaCBpbiB0aGlzIHdpa2kuIElmIHNvLCBlbnN1cmUgdGhhdCBhIFwiRm9vIChkaXNhbWJpZ3VhdGlvbilcIiBwYWdlIGV4aXN0cy4vKiAqIFJldHVybnMgYSBqUXVlcnkgcHJvbWlzZSAqL1xuY29uc3QgZW5zdXJlREFCRXhpc3RzID0gKCkgPT4ge1xuXHRjb25zdCBkZWZlcnJlZCA9IG5ldyAkLkRlZmVycmVkKCk7XG5cdGNvbnN0IHRpdGxlID0gZ2V0VGl0bGUoKTtcblx0Ly8gVGhhdCBjb25jZXB0IGRvZXNuJ3QgZXhpc3QgaW4gdGhpcyB3aWtpLlxuXHRpZiAoIWNmZy5pbnRlbnRpb25hbExpbmtPcHRpb24pIHtcblx0XHRkZWZlcnJlZC5yZXNvbHZlKGZhbHNlKTtcblx0XHQvLyBcIkZvbyAoZGlzYW1iaWd1YXRpb24pXCIgZXhpc3RzOiBpdCdzIHRoZSBjdXJyZW50IHBhZ2UuXG5cdH0gZWxzZSBpZiAobmV3IFJlZ0V4cChjZmcuZGlzYW1SZWdFeHApLmV4ZWModGl0bGUpKSB7XG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBkaXNhbVRpdGxlID0gY2ZnLmRpc2FtRm9ybWF0LnJlcGxhY2UoJyQxJywgdGl0bGUpO1xuXHRcdGxvYWRQYWdlKGRpc2FtVGl0bGUpXG5cdFx0XHQuZG9uZSgocGFnZSkgPT4ge1xuXHRcdFx0XHQvLyBcIkZvbyAoZGlzYW1iaWd1YXRpb24pXCIgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0aWYgKHBhZ2UubWlzc2luZykge1xuXHRcdFx0XHRcdC8vIFdlIHRyeSB0byBjcmVhdGUgaXRcblx0XHRcdFx0XHRwYWdlLmNvbnRlbnQgPSBjZmcucmVkaXJlY3RUb0Rpc2FtLnJlcGxhY2UoJyQxJywgdGl0bGUpO1xuXHRcdFx0XHRcdGNvbnN0IHN1bW1hcnkgPSBtZXNzYWdlcy5yZWRpcmVjdFN1bW1hcnkucmVwbGFjZSgnJDEnLCB0aXRsZSk7XG5cdFx0XHRcdFx0c2F2ZVBhZ2UoZGlzYW1UaXRsZSwgcGFnZSwgc3VtbWFyeSwgZmFsc2UsIHRydWUpXG5cdFx0XHRcdFx0XHQuZG9uZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0LmZhaWwoKGRlc2NyaXB0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGVycm9yKGRlc2NyaXB0aW9uKTtcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBJdCBkb2VzIGV4aXN0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5mYWlsKChkZXNjcmlwdGlvbikgPT4ge1xuXHRcdFx0XHRlcnJvcihkZXNjcmlwdGlvbik7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fSk7XG5cdH1cblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbi8qIENoZWNrIHdoZXRoZXIgdGhlIGVkaXQgY29vbGRvd24gYXBwbGllcyBhbmQgc2V0cyBlZGl0TGltaXQgYWNjb3JkaW5nbHkuLyogKiBSZXR1cm5zIGEgalF1ZXJ5IHByb21pc2UgKi9cbmNvbnN0IGNoZWNrRWRpdExpbWl0ID0gKCkgPT4ge1xuXHRjb25zdCBkZWZlcnJlZCA9IG5ldyAkLkRlZmVycmVkKCk7XG5cdGlmIChjZmcuZWRpdENvb2xkb3duIDw9IDApIHtcblx0XHRlZGl0TGltaXQgPSBmYWxzZTtcblx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0ZmV0Y2hSaWdodHMoKVxuXHRcdFx0LmRvbmUoKHJpZ2h0cykgPT4ge1xuXHRcdFx0XHRlZGl0TGltaXQgPSAhcmlnaHRzLmluY2x1ZGVzKCdib3QnKTtcblx0XHRcdH0pXG5cdFx0XHQuZmFpbCgoZGVzY3JpcHRpb24pID0+IHtcblx0XHRcdFx0ZXJyb3IoZGVzY3JpcHRpb24pO1xuXHRcdFx0XHRlZGl0TGltaXQgPSB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5hbHdheXMoKCkgPT4ge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cdFx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxuLyogRmluZCBhbmQgYXNrIHRoZSB1c2VyIHRvIGZpeCBhbGwgdGhlIGluY29taW5nIGxpbmtzIHRvIHRoZSBkaXNhbWJpZ3VhdGlvbiAoXCJ0YXJnZXRcIikvKiAqIHBhZ2UgZnJvbSBhIHNpbmdsZSBcIm9yaWdpblwiIHBhZ2UgKi9cbmNvbnN0IGRvUGFnZSA9ICgpID0+IHtcblx0aWYgKHBhZ2VDaGFuZ2VzLmxlbmd0aCA+IGNmZy5oaXN0b3J5U2l6ZSkge1xuXHRcdGFwcGx5Q2hhbmdlKHBhZ2VDaGFuZ2VzLnNoaWZ0KCkpO1xuXHR9XG5cdGlmIChsaW5rcy5sZW5ndGgpIHtcblx0XHRjdXJyZW50UGFnZVRpdGxlID0gbGlua3Muc2hpZnQoKTtcblx0XHRkaXNwbGF5ZWRQYWdlc1tjdXJyZW50UGFnZVRpdGxlXSA9IHRydWU7XG5cdFx0dG9nZ2xlQWN0aW9uQnV0dG9ucyhmYWxzZSk7XG5cdFx0bG9hZFBhZ2UoY3VycmVudFBhZ2VUaXRsZSlcblx0XHRcdC5kb25lKChkYXRhKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRQYWdlUGFyYW1ldGVycyA9IGRhdGE7XG5cdFx0XHRcdGN1cnJlbnRMaW5rID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRkb0xpbmsoKTtcblx0XHRcdH0pXG5cdFx0XHQuZmFpbChlcnJvcik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgdGFyZ2V0UGFnZSA9IGdldFRhcmdldFBhZ2UoKTtcblx0XHRnZXRCYWNrbGlua3ModGFyZ2V0UGFnZSlcblx0XHRcdC5kb25lKChiYWNrbGlua3MsIHBhZ2VUaXRsZXMpID0+IHtcblx0XHRcdFx0Y29uc3QgcGVuZGluZyA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHBlbmRpbmdTYXZlcykge1xuXHRcdFx0XHRcdHBlbmRpbmdbZWxbMF1dID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwb3NzaWJsZUJhY2tsaW5rRGVzdGluYXRpb25zID0gcGFnZVRpdGxlcy5maWx0ZXIoKHQpID0+IHtcblx0XHRcdFx0XHRpZiAodCA9PT0gdGFyZ2V0UGFnZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZW1vdmVEaXNhbSh0KSAhPT0gdGFyZ2V0UGFnZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIE9ubHkgaW5jb21pbmcgbGlua3MgZnJvbSBwYWdlcyB3ZSBoYXZlbid0IHNlZW4geWV0IGFuZCB3ZSBhcmVuJ3QgY3VycmVudGx5XG5cdFx0XHRcdC8vIHNhdmluZyAoZGlzcGxheWVkUGFnZXMgaXMgcmVzZXQgd2hlbiB0aGUgdG9vbCBpcyBjbG9zZWQgYW5kIG9wZW5lZCBhZ2Fpbixcblx0XHRcdFx0Ly8gd2hpbGUgdGhlIGxpc3Qgb2YgcGVuZGluZyBjaGFuZ2VzIGlzbid0OyBpZiB0aGUgZWRpdCBjb29sZG93biBpcyBkaXNhYmxlZCxcblx0XHRcdFx0Ly8gaXQgd2lsbCBiZSBlbXB0eSlcblx0XHRcdFx0bGlua3MgPSBiYWNrbGlua3MuZmlsdGVyKChlbCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAhZGlzcGxheWVkUGFnZXNbZWxdICYmICFwZW5kaW5nW2VsXTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChsaW5rcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRkb1BhZ2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1cGRhdGVDb250ZXh0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZmFpbChlcnJvcik7XG5cdH1cbn07XG5cbi8qIEZpbmQgYW5kIGFzayB0aGUgdXNlciB0byBmaXggYSBzaW5nbGUgaW5jb21pbmcgbGluayB0byB0aGUgZGlzYW1iaWd1YXRpb24gKFwidGFyZ2V0XCIpLyogKiBwYWdlICovXG5jb25zdCBkb0xpbmsgPSAoKSA9PiB7XG5cdGN1cnJlbnRMaW5rID0gZXh0cmFjdExpbmtUb1BhZ2UoXG5cdFx0Y3VycmVudFBhZ2VQYXJhbWV0ZXJzLmNvbnRlbnQsXG5cdFx0cG9zc2libGVCYWNrbGlua0Rlc3RpbmF0aW9ucyxcblx0XHRjdXJyZW50TGluayA/IGN1cnJlbnRMaW5rLmVuZCA6IDBcblx0KTtcblx0aWYgKGN1cnJlbnRMaW5rKSB7XG5cdFx0dXBkYXRlQ29udGV4dCgpO1xuXHR9IGVsc2Uge1xuXHRcdGRvUGFnZSgpO1xuXHR9XG59O1xuXG4vKiBSZXBsYWNlIHRoZSB0YXJnZXQgb2YgYSBsaW5rIHdpdGggYSBkaWZmZXJlbnQgb25lLyogKiBwYWdlVGl0bGU6IE5ldyBsaW5rIHRhcmdldC8qICogZXh0cmE6IEFkZGl0aW9uYWwgdGV4dCBhZnRlciB0aGUgbGluayAob3B0aW9uYWwpLyogKiBzdW1tYXJ5OiBDaGFuZ2Ugc3VtbWFyeSAob3B0aW9uYWwpICovXG5jb25zdCBjaG9vc2VSZXBsYWNlbWVudCA9IChwYWdlVGl0bGUsIGV4dHJhLCBzdW1tYXJ5KSA9PiB7XG5cdGlmIChjaG9vc2luZykge1xuXHRcdGNob29zaW5nID0gZmFsc2U7XG5cdFx0c3VtbWFyeSB8fD0gcGFnZVRpdGxlID8gbWVzc2FnZXMuc3VtbWFyeUNoYW5nZWQucmVwbGFjZSgnJDEnLCBwYWdlVGl0bGUpIDogbWVzc2FnZXMuc3VtbWFyeU9taXR0ZWQ7XG5cdFx0YWRkQ2hhbmdlKGN1cnJlbnRQYWdlVGl0bGUsIGN1cnJlbnRQYWdlUGFyYW1ldGVycywgY3VycmVudFBhZ2VQYXJhbWV0ZXJzLmNvbnRlbnQsIGN1cnJlbnRMaW5rLCBzdW1tYXJ5KTtcblx0XHRpZiAocGFnZVRpdGxlICYmIChwYWdlVGl0bGUgIT09IGdldFRhcmdldFBhZ2UoKSB8fCBleHRyYSkpIHtcblx0XHRcdGN1cnJlbnRQYWdlUGFyYW1ldGVycy5jb250ZW50ID0gcmVwbGFjZUxpbmsoXG5cdFx0XHRcdGN1cnJlbnRQYWdlUGFyYW1ldGVycy5jb250ZW50LFxuXHRcdFx0XHRwYWdlVGl0bGUsXG5cdFx0XHRcdGN1cnJlbnRMaW5rLFxuXHRcdFx0XHRleHRyYSB8fCAnJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0ZG9MaW5rKCk7XG5cdH1cbn07XG5cbi8qIFJlcGxhY2UgdGhlIGxpbmsgd2l0aCBhbiBleHBsaWNpdCBsaW5rIHRvIHRoZSBkaXNhbWJpZ3VhdGlvbiBwYWdlICovXG5jb25zdCBjaG9vc2VJbnRlbnRpb25hbExpbmsgPSAoKSA9PiB7XG5cdGNvbnN0IGRpc2FtVGl0bGUgPSBjZmcuZGlzYW1Gb3JtYXQucmVwbGFjZSgnJDEnLCBnZXRUYXJnZXRQYWdlKCkpO1xuXHRjaG9vc2VSZXBsYWNlbWVudChkaXNhbVRpdGxlLCAnJywgbWVzc2FnZXMuc3VtbWFyeUludGVudGlvbmFsKTtcbn07XG5cbi8qIFByb21wdCBmb3IgYW4gYWx0ZXJuYXRpdmUgbGluayB0YXJnZXQgYW5kIHVzZSBpdCBhcyBhIHJlcGxhY2VtZW50ICovXG5jb25zdCBjaG9vc2VUaXRsZUZyb21Qcm9tcHQgPSAoKSA9PiB7XG5cdGNvbnN0IHRpdGxlID0gcHJvbXB0KG1lc3NhZ2VzLnRpdGxlQXNUZXh0UHJvbXB0KTtcblx0aWYgKHRpdGxlICE9PSBudWxsKSB7XG5cdFx0Y2hvb3NlUmVwbGFjZW1lbnQodGl0bGUpO1xuXHR9XG59O1xuXG4vKiBSZW1vdmUgdGhlIGN1cnJlbnQgbGluaywgbGVhdmluZyB0aGUgdGV4dCB1bmNoYW5nZWQgKi9cbmNvbnN0IGNob29zZUxpbmtSZW1vdmFsID0gKCkgPT4ge1xuXHRpZiAoY2hvb3NpbmcpIHtcblx0XHRjb25zdCBzdW1tYXJ5ID0gbWVzc2FnZXMuc3VtbWFyeVJlbW92ZWQ7XG5cdFx0YWRkQ2hhbmdlKGN1cnJlbnRQYWdlVGl0bGUsIGN1cnJlbnRQYWdlUGFyYW1ldGVycywgY3VycmVudFBhZ2VQYXJhbWV0ZXJzLmNvbnRlbnQsIGN1cnJlbnRMaW5rLCBzdW1tYXJ5KTtcblx0XHRjdXJyZW50UGFnZVBhcmFtZXRlcnMuY29udGVudCA9IHJlbW92ZUxpbmsoY3VycmVudFBhZ2VQYXJhbWV0ZXJzLmNvbnRlbnQsIGN1cnJlbnRMaW5rKTtcblx0XHRkb0xpbmsoKTtcblx0fVxufTtcblxuLyogQWRkIGEgXCJkaXNhbWJpZ3VhdGlvbiBuZWVkZWRcIiB0ZW1wbGF0ZSBhZnRlciB0aGUgbGluayAqL1xuY29uc3QgY2hvb3NlRGlzYW1OZWVkZWQgPSAoKSA9PiB7XG5cdGNob29zZVJlcGxhY2VtZW50KGN1cnJlbnRMaW5rLnRpdGxlLCBjZmcuZGlzYW1OZWVkZWRUZXh0LCBtZXNzYWdlcy5zdW1tYXJ5SGVscE5lZWRlZCk7XG59O1xuXG4vKiBVbmRvIHRoZSBsYXN0IGNoYW5nZSAqL1xuY29uc3QgdW5kbyA9ICgpID0+IHtcblx0aWYgKHBhZ2VDaGFuZ2VzLmxlbmd0aCkge1xuXHRcdGNvbnN0IGxhc3RQYWdlID0gcGFnZUNoYW5nZXMuYXQoLTEpO1xuXHRcdGlmIChjdXJyZW50UGFnZVRpdGxlICE9PSBsYXN0UGFnZS50aXRsZSkge1xuXHRcdFx0bGlua3MudW5zaGlmdChjdXJyZW50UGFnZVRpdGxlKTtcblx0XHRcdGN1cnJlbnRQYWdlVGl0bGUgPSBsYXN0UGFnZS50aXRsZTtcblx0XHR9XG5cdFx0Y3VycmVudFBhZ2VQYXJhbWV0ZXJzID0gbGFzdFBhZ2UucGFnZTtcblx0XHRjdXJyZW50UGFnZVBhcmFtZXRlcnMuY29udGVudCA9IGxhc3RQYWdlLmNvbnRlbnRCZWZvcmUucG9wKCk7XG5cdFx0Y3VycmVudExpbmsgPSBsYXN0UGFnZS5saW5rcy5wb3AoKTtcblx0XHRsYXN0UGFnZS5zdW1tYXJ5LnBvcCgpO1xuXHRcdGlmICghbGFzdFBhZ2UuY29udGVudEJlZm9yZS5sZW5ndGgpIHtcblx0XHRcdHBhZ2VDaGFuZ2VzLnBvcCgpO1xuXHRcdH1cblx0XHR1cGRhdGVDb250ZXh0KCk7XG5cdH1cbn07XG5cbi8qIE9taXQgdGhlIGN1cnJlbnQgbGluayB3aXRob3V0IG1ha2luZyBhIGNoYW5nZSAqL1xuY29uc3Qgb21pdCA9ICgpID0+IHtcblx0Y2hvb3NlUmVwbGFjZW1lbnQoKTtcbn07XG5cbi8qIFNhdmUgYWxsIHRoZSBwZW5kaW5nIGNoYW5nZXMgYW5kIHJlc3RhcnQgdGhlIHRvb2wuICovXG5jb25zdCByZWZyZXNoID0gKCkgPT4ge1xuXHRzYXZlQW5kRW5kKCk7XG5cdHN0YXJ0KCk7XG59O1xuXG4vKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgYnV0dG9ucyB0aGF0IGNhbiBwZXJmb3JtIGFjdGlvbnMgb24gYSBwYWdlIG9yIGNoYW5nZSB0aGUgY3VycmVudCBsaW5rLi8qICogZW5hYmxlZDogV2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgYnV0dG9ucyAqL1xuY29uc3QgdG9nZ2xlQWN0aW9uQnV0dG9ucyA9IChlbmFibGVkKSA9PiB7XG5cdGNvbnN0IGFmZmVjdGVkQnV0dG9ucyA9IFtcblx0XHR1aS5vbWl0QnV0dG9uLFxuXHRcdHVpLnRpdGxlQXNUZXh0QnV0dG9uLFxuXHRcdHVpLnJlbW92ZUxpbmtCdXR0b24sXG5cdFx0dWkuaW50ZW50aW9uYWxMaW5rQnV0dG9uLFxuXHRcdHVpLmRpc2FtTmVlZGVkQnV0dG9uLFxuXHRcdHVpLnVuZG9CdXR0b24sXG5cdF07XG5cdGZvciAoY29uc3QgYnV0dG9uIG9mIGFmZmVjdGVkQnV0dG9ucykge1xuXHRcdGJ1dHRvbi5wcm9wKCdkaXNhYmxlZCcsICFlbmFibGVkKTtcblx0fVxufTtcblxuLyogU2hvdyBvciBoaWRlIHRoZSAnbm8gbW9yZSBsaW5rcycgbWVzc2FnZS8qICogc2hvdzogV2hldGhlciB0byBzaG93IG9yIGhpZGUgdGhlIG1lc3NhZ2UgKi9cbmNvbnN0IHRvZ2dsZUZpbmlzaGVkTWVzc2FnZSA9IChzaG93KSA9PiB7XG5cdHRvZ2dsZUFjdGlvbkJ1dHRvbnMoIXNob3cpO1xuXHR1aS51bmRvQnV0dG9uLnByb3AoJ2Rpc2FibGVkJywgIXBhZ2VDaGFuZ2VzLmxlbmd0aCk7XG5cdHVpLmZpbmlzaGVkTWVzc2FnZS50b2dnbGUoc2hvdyk7XG5cdHVpLnBhZ2VUaXRsZUxpbmUudG9nZ2xlKCFzaG93KTtcblx0dWkuY29udGV4dC50b2dnbGUoIXNob3cpO1xufTtcblxuY29uc3QgdG9nZ2xlUGVuZGluZ0VkaXRCb3ggPSAoc2hvdykgPT4ge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0aWYgKCFwZW5kaW5nRWRpdEJveCkge1xuXHRcdHBlbmRpbmdFZGl0Qm94ID0gJCgnPGRpdj4nKS5hZGRDbGFzcygnZGlzYW1hc3Npc3QtYm94IGRpc2FtYXNzaXN0LXBlbmRpbmdlZGl0Ym94Jyk7XG5cdFx0cGVuZGluZ0VkaXRCb3hUZXh0ID0gJCgnPGRpdj4nKTtcblx0XHRwZW5kaW5nRWRpdEJveC5hcHBlbmQocGVuZGluZ0VkaXRCb3hUZXh0KS5oaWRlKCk7XG5cdFx0aWYgKGVkaXRMaW1pdCkge1xuXHRcdFx0cGVuZGluZ0VkaXRCb3guYXBwZW5kKCQoJzxkaXY+JykudGV4dChtZXNzYWdlcy5wZW5kaW5nRWRpdEJveExpbWl0ZWQpLmFkZENsYXNzKCdkaXNhbWFzc2lzdC1zdWJ0aXRsZScpKTtcblx0XHR9XG5cdFx0JGJvZHkuZmluZCgnI213LWNvbnRlbnQtdGV4dCcpLmJlZm9yZShwZW5kaW5nRWRpdEJveCk7XG5cdFx0dXBkYXRlRWRpdENvdW50ZXIoKTtcblx0fVxuXHRpZiAoc2hvdykge1xuXHRcdHBlbmRpbmdFZGl0Qm94LmZhZGVJbigpO1xuXHR9IGVsc2Uge1xuXHRcdHBlbmRpbmdFZGl0Qm94LmZhZGVPdXQoKTtcblx0fVxufTtcblxuY29uc3Qgbm90aWZ5Q29tcGxldGlvbiA9ICgpID0+IHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdGNvbnN0IG9sZFRpdGxlID0gZG9jdW1lbnQudGl0bGU7XG5cdGRvY3VtZW50LnRpdGxlID0gbWVzc2FnZXMubm90aWZ5Q2hhcmFjdGVyICsgZG9jdW1lbnQudGl0bGU7XG5cdCRib2R5Lm9uZSgnbW91c2Vtb3ZlJywgKCkgPT4ge1xuXHRcdGRvY3VtZW50LnRpdGxlID0gb2xkVGl0bGU7XG5cdH0pO1xufTtcblxuLyogVXBkYXRlIHRoZSBkaXNwbGF5ZWQgaW5mb3JtYXRpb24gdG8gbWF0Y2ggdGhlIGN1cnJlbnQgbGluay8qICogb3IgbGFjayB0aGVyZW9mICovXG5jb25zdCB1cGRhdGVDb250ZXh0ID0gKCkgPT4ge1xuXHR1cGRhdGVFZGl0Q291bnRlcigpO1xuXHRpZiAoY3VycmVudExpbmspIHtcblx0XHR1aS5wYWdlVGl0bGVMaW5lLmh0bWwoXG5cdFx0XHRtZXNzYWdlcy5wYWdlVGl0bGVMaW5lXG5cdFx0XHRcdC5yZXBsYWNlKFxuXHRcdFx0XHRcdCckMScsXG5cdFx0XHRcdFx0bXcudXRpbC5nZXRVcmwoY3VycmVudFBhZ2VUaXRsZSwge1xuXHRcdFx0XHRcdFx0cmVkaXJlY3Q6ICdubycsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KVxuXHRcdFx0XHQucmVwbGFjZSgnJDInLCBtdy5odG1sLmVzY2FwZShjdXJyZW50UGFnZVRpdGxlKSlcblx0XHQpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBleHRyYWN0Q29udGV4dChjdXJyZW50UGFnZVBhcmFtZXRlcnMuY29udGVudCwgY3VycmVudExpbmspO1xuXHRcdHVpLmNvbnRleHRcblx0XHRcdC5lbXB0eSgpXG5cdFx0XHQuYXBwZW5kKCQoJzxzcGFuPicpLnRleHQoY29udGV4dFswXSkpXG5cdFx0XHQuYXBwZW5kKCQoJzxzcGFuPicpLnRleHQoY29udGV4dFsxXSkuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LWluY2xpbmsnKSlcblx0XHRcdC5hcHBlbmQoJCgnPHNwYW4+JykudGV4dChjb250ZXh0WzJdKSk7XG5cdFx0Y29uc3QgbnVtTGluZXMgPSBNYXRoLmNlaWwodWkuY29udGV4dC5oZWlnaHQoKSAvIE51bWJlci5wYXJzZUZsb2F0KHVpLmNvbnRleHQuY3NzKCdsaW5lLWhlaWdodCcpKSk7XG5cdFx0aWYgKG51bUxpbmVzIDwgY2ZnLm51bUNvbnRleHRMaW5lcykge1xuXHRcdFx0Ly8gQWRkIGNmZy5udW1Db250ZXh0TGluZXMgLSBudW1MaW5lcyArIDEgbGluZSBicmVha3MsIHNvIHRoYXQgdGhlIHRvdGFsIG51bWJlclxuXHRcdFx0Ly8gb2YgbGluZXMgaXMgY2ZnLm51bUNvbnRleHRMaW5lc1xuXHRcdFx0dWkuY29udGV4dC5hcHBlbmQoXG5cdFx0XHRcdEFycmF5LmZyb20oe1xuXHRcdFx0XHRcdGxlbmd0aDogY2ZnLm51bUNvbnRleHRMaW5lcyAtIG51bUxpbmVzICsgMixcblx0XHRcdFx0fSkuam9pbignPGJyPicpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR0b2dnbGVGaW5pc2hlZE1lc3NhZ2UoZmFsc2UpO1xuXHRcdHVpLnVuZG9CdXR0b24ucHJvcCgnZGlzYWJsZWQnLCAhcGFnZUNoYW5nZXMubGVuZ3RoKTtcblx0XHR1aS5yZW1vdmVMaW5rQnV0dG9uLnByb3AoJ2Rpc2FibGVkJywgY3VycmVudFBhZ2VQYXJhbWV0ZXJzLnJlZGlyZWN0KTtcblx0XHR1aS5pbnRlbnRpb25hbExpbmtCdXR0b24ucHJvcCgnZGlzYWJsZWQnLCBjdXJyZW50UGFnZVBhcmFtZXRlcnMucmVkaXJlY3QpO1xuXHRcdHVpLmRpc2FtTmVlZGVkQnV0dG9uLnByb3AoJ2Rpc2FibGVkJywgY3VycmVudFBhZ2VQYXJhbWV0ZXJzLnJlZGlyZWN0IHx8IGN1cnJlbnRMaW5rLmhhc0Rpc2FtVGVtcGxhdGUpO1xuXHRcdGNob29zaW5nID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHR0b2dnbGVGaW5pc2hlZE1lc3NhZ2UodHJ1ZSk7XG5cdH1cbn07XG5cbi8qIFVwZGF0ZSB0aGUgY291bnQgb2YgcGVuZGluZyBjaGFuZ2VzICovXG5jb25zdCB1cGRhdGVFZGl0Q291bnRlciA9ICgpID0+IHtcblx0aWYgKHVpLnBlbmRpbmdFZGl0Q291bnRlcikge1xuXHRcdHVpLnBlbmRpbmdFZGl0Q291bnRlci50ZXh0KFxuXHRcdFx0bWVzc2FnZXMucGVuZGluZ0VkaXRDb3VudGVyLnJlcGxhY2UoJyQxJywgZWRpdENvdW50KS5yZXBsYWNlKCckMicsIGNvdW50QWN0dWFsbHlDaGFuZ2VkRnVsbHlDaGVja2VkUGFnZXMoKSlcblx0XHQpO1xuXHR9XG5cdGlmIChwZW5kaW5nRWRpdEJveCkge1xuXHRcdGlmIChlZGl0Q291bnQgPT09IDAgJiYgIXJ1bm5pbmcpIHtcblx0XHRcdHRvZ2dsZVBlbmRpbmdFZGl0Qm94KGZhbHNlKTtcblx0XHRcdG5vdGlmeUNvbXBsZXRpb24oKTtcblx0XHR9XG5cdFx0bGV0IHRleHRDb250ZW50ID0gZWRpdENvdW50O1xuXHRcdGlmIChlZGl0TGltaXQpIHtcblx0XHRcdHRleHRDb250ZW50ID0gbWVzc2FnZXMucGVuZGluZ0VkaXRCb3hUaW1lRXN0aW1hdGlvblxuXHRcdFx0XHQucmVwbGFjZSgnJDEnLCBlZGl0Q291bnQpXG5cdFx0XHRcdC5yZXBsYWNlKCckMicsIHNlY29uZHNUb0hITU1TUyhjZmcuZWRpdENvb2xkb3duICogZWRpdENvdW50KSk7XG5cdFx0fVxuXHRcdHBlbmRpbmdFZGl0Qm94VGV4dC50ZXh0KG1lc3NhZ2VzLnBlbmRpbmdFZGl0Qm94LnJlcGxhY2UoJyQxJywgdGV4dENvbnRlbnQpKTtcblx0fVxufTtcblxuLyogQXBwbHkgdGhlIGNoYW5nZXMgbWFkZSB0byBhbiBcIm9yaWdpblwiIHBhZ2UvKiAqIHBhZ2VDaGFuZ2U6IENoYW5nZSB0aGF0IHdpbGwgYmUgc2F2ZWQgKi9cbmNvbnN0IGFwcGx5Q2hhbmdlID0gKHBhZ2VDaGFuZ2UpID0+IHtcblx0aWYgKHBhZ2VDaGFuZ2UucGFnZS5jb250ZW50ICE9PSBwYWdlQ2hhbmdlLmNvbnRlbnRCZWZvcmVbMF0pIHtcblx0XHRlZGl0Q291bnQrKztcblx0XHRjb25zdCBjaGFuZ2VTdW1tYXJpZXMgPSBwYWdlQ2hhbmdlLnN1bW1hcnkuam9pbihtZXNzYWdlcy5zdW1tYXJ5U2VwYXJhdG9yKTtcblx0XHRjb25zdCBzdW1tYXJ5ID0gbWVzc2FnZXMuc3VtbWFyeS5yZXBsYWNlKCckMScsIGdldFRhcmdldFBhZ2UoKSkucmVwbGFjZSgnJDInLCBjaGFuZ2VTdW1tYXJpZXMpO1xuXHRcdGNvbnN0IHNhdmUgPSBlZGl0TGltaXQgPyBzYXZlV2l0aENvb2xkb3duIDogc2F2ZVBhZ2U7XG5cdFx0c2F2ZShwYWdlQ2hhbmdlLnRpdGxlLCBwYWdlQ2hhbmdlLnBhZ2UsIHN1bW1hcnksIHRydWUsIHRydWUpXG5cdFx0XHQuYWx3YXlzKCgpID0+IHtcblx0XHRcdFx0aWYgKGVkaXRDb3VudCA+IDApIHtcblx0XHRcdFx0XHRlZGl0Q291bnQtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHR1cGRhdGVFZGl0Q291bnRlcigpO1xuXHRcdFx0fSlcblx0XHRcdC5mYWlsKGVycm9yKTtcblx0XHR1cGRhdGVFZGl0Q291bnRlcigpO1xuXHR9XG59O1xuXG4vKiBTYXZlIGFsbCB0aGUgcGVuZGluZyBjaGFuZ2VzICovXG5jb25zdCBhcHBseUFsbENoYW5nZXMgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgcGFnZUNoYW5nZSBvZiBwYWdlQ2hhbmdlcykge1xuXHRcdGFwcGx5Q2hhbmdlKHBhZ2VDaGFuZ2UpO1xuXHR9XG5cdHBhZ2VDaGFuZ2VzID0gW107XG59O1xuXG4vKiBSZWNvcmQgYSBuZXcgcGVuZGluZyBjaGFuZ2UvKiAqIHBhZ2VUaXRsZTogVGl0bGUgb2YgdGhlIHBhZ2UvKiAqIHBhZ2U6IENvbnRlbnQgb2YgdGhlIHBhZ2UvKiAqIG9sZENvbnRlbnQ6IENvbnRlbnQgb2YgdGhlIHBhZ2UgYmVmb3JlIHRoZSBjaGFuZ2UvKiAqIGxpbms6IExpbmsgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLyogKiBzdW1tYXJ5OiBDaGFuZ2Ugc3VtbWFyeSAqL1xuY29uc3QgYWRkQ2hhbmdlID0gKHBhZ2VUaXRsZSwgcGFnZSwgb2xkQ29udGVudCwgbGluaywgc3VtbWFyeSkgPT4ge1xuXHRpZiAoIXBhZ2VDaGFuZ2VzLmxlbmd0aCB8fCBwYWdlQ2hhbmdlcy5hdCgtMSkudGl0bGUgIT09IHBhZ2VUaXRsZSkge1xuXHRcdHBhZ2VDaGFuZ2VzW3BhZ2VDaGFuZ2VzLmxlbmd0aF0gPSB7XG5cdFx0XHR0aXRsZTogcGFnZVRpdGxlLFxuXHRcdFx0cGFnZSxcblx0XHRcdGNvbnRlbnRCZWZvcmU6IFtdLFxuXHRcdFx0bGlua3M6IFtdLFxuXHRcdFx0c3VtbWFyeTogW10sXG5cdFx0fTtcblx0fVxuXHRjb25zdCBsYXN0UGFnZUNoYW5nZSA9IHBhZ2VDaGFuZ2VzLmF0KC0xKTtcblx0bGFzdFBhZ2VDaGFuZ2UuY29udGVudEJlZm9yZVtsYXN0UGFnZUNoYW5nZS5jb250ZW50QmVmb3JlLmxlbmd0aF0gPSBvbGRDb250ZW50O1xuXHRsYXN0UGFnZUNoYW5nZS5saW5rc1tsYXN0UGFnZUNoYW5nZS5saW5rcy5sZW5ndGhdID0gbGluaztcblx0bGFzdFBhZ2VDaGFuZ2Uuc3VtbWFyeVtsYXN0UGFnZUNoYW5nZS5zdW1tYXJ5Lmxlbmd0aF0gPSBzdW1tYXJ5O1xufTtcblxuLyogQ2hlY2sgd2hldGhlciBhY3R1YWwgY2hhbmdlcyBhcmUgc3RvcmVkIGluIHRoZSBoaXN0b3J5IGFycmF5ICovXG5jb25zdCBjaGVja0FjdHVhbENoYW5nZXMgPSAoKSA9PiB7XG5cdHJldHVybiBjb3VudEFjdHVhbENoYW5nZXMoKSAhPT0gMDtcbn07XG5cbi8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGhpc3RvcnkgYXJyYXkgdGhhdCByZXByZXNlbnQgYWN0dWFsIGNoYW5nZXMgKi9cbmNvbnN0IGNvdW50QWN0dWFsQ2hhbmdlcyA9ICgpID0+IHtcblx0bGV0IGNoYW5nZUNvdW50ID0gMDtcblx0Zm9yIChjb25zdCBwYWdlQ2hhbmdlIG9mIHBhZ2VDaGFuZ2VzKSB7XG5cdFx0aWYgKHBhZ2VDaGFuZ2UucGFnZS5jb250ZW50ICE9PSBwYWdlQ2hhbmdlLmNvbnRlbnRCZWZvcmVbMF0pIHtcblx0XHRcdGNoYW5nZUNvdW50Kys7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjaGFuZ2VDb3VudDtcbn07XG5cbi8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYW5nZWQgcGFnZXMgaW4gdGhlIGhpc3RvcnkgYXJyYXksIGlnbm9yaW5nIHRoZSBsYXN0IGVudHJ5LyogKiBpZiB3ZSBhcmVuJ3QgZG9uZSB3aXRoIHRoYXQgcGFnZSB5ZXQgKi9cbmNvbnN0IGNvdW50QWN0dWFsbHlDaGFuZ2VkRnVsbHlDaGVja2VkUGFnZXMgPSAoKSA9PiB7XG5cdGxldCBjaGFuZ2VDb3VudCA9IGNvdW50QWN0dWFsQ2hhbmdlcygpO1xuXHRpZiAocGFnZUNoYW5nZXMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgbGFzdENoYW5nZSA9IHBhZ2VDaGFuZ2VzLmF0KC0xKTtcblx0XHRpZiAoXG5cdFx0XHRsYXN0Q2hhbmdlLnRpdGxlID09PSBjdXJyZW50UGFnZVRpdGxlICYmXG5cdFx0XHRjdXJyZW50TGluayAmJlxuXHRcdFx0bGFzdENoYW5nZS5wYWdlLmNvbnRlbnQgIT09IGxhc3RDaGFuZ2UuY29udGVudEJlZm9yZVswXVxuXHRcdCkge1xuXHRcdFx0Y2hhbmdlQ291bnQtLTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNoYW5nZUNvdW50O1xufTtcblxuLyogRmluZCB0aGUgbGlua3MgdG8gZGlzYW1iaWd1YXRpb24gb3B0aW9ucyBpbiBhIGRpc2FtYmlndWF0aW9uIHBhZ2UgKi9cbmNvbnN0IGdldERpc2FtT3B0aW9ucyA9ICgpID0+IHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdHJldHVybiAkYm9keS5maW5kKCcjbXctY29udGVudC10ZXh0IGEnKS5maWx0ZXIoKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdHJldHVybiAhIWV4dHJhY3RQYWdlTmFtZSgkKGVsZW1lbnQpKTtcblx0fSk7XG59O1xuXG4vKiBTYXZlIGFsbCB0aGUgcGVuZGluZyBjaGFuZ2VzIGFuZCBjbG9zZSB0aGUgdG9vbCAqL1xuY29uc3Qgc2F2ZUFuZEVuZCA9ICgpID0+IHtcblx0YXBwbHlBbGxDaGFuZ2VzKCk7XG5cdGVuZCgpO1xufTtcblxuLyogQ2xvc2UgdGhlIHRvb2wgKi9cbmNvbnN0IGVuZCA9ICgpID0+IHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdGNvbnN0IGN1cnJlbnRUb29sVUkgPSB1aS5kaXNwbGF5O1xuXHRjaG9vc2luZyA9IGZhbHNlO1xuXHRydW5uaW5nID0gZmFsc2U7XG5cdHN0YXJ0TGluay5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcblx0JGJvZHkuZmluZCgnLmRpc2FtYXNzaXN0LW9wdGlvbm1hcmtlcicpLnJlbW92ZSgpO1xuXHRjdXJyZW50VG9vbFVJLmZhZGVPdXQoe1xuXHRcdGNvbXBsZXRlKCkge1xuXHRcdFx0Y3VycmVudFRvb2xVSS5yZW1vdmUoKTtcblx0XHRcdGlmIChlZGl0Q291bnQpIHtcblx0XHRcdFx0dG9nZ2xlUGVuZGluZ0VkaXRCb3godHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0fSk7XG59O1xuXG4vKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgKi9cbmNvbnN0IGVycm9yID0gKGVycm9yRGVzY3JpcHRpb24pID0+IHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdGNvbnN0IGVycm9yQm94ID0gJCgnPGRpdj4nKS5hZGRDbGFzcygnZGlzYW1hc3Npc3QtYm94IGRpc2FtYXNzaXN0LWVycm9yYm94Jyk7XG5cdGVycm9yQm94LnRleHQobWVzc2FnZXMuZXJyb3IucmVwbGFjZSgnJDEnLCBlcnJvckRlc2NyaXB0aW9uKSk7XG5cdGVycm9yQm94LmFwcGVuZChcblx0XHRjcmVhdGVCdXR0b24obWVzc2FnZXMuZGlzbWlzc0Vycm9yLCAoKSA9PiB7XG5cdFx0XHRlcnJvckJveC5mYWRlT3V0KCk7XG5cdFx0fSkuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LWVycm9yYnV0dG9uJylcblx0KTtcblx0Y29uc3QgdWlJc0luUGxhY2UgPSB1aSAmJiAkLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdWkuZGlzcGxheVswXSk7XG5cdGNvbnN0IG5leHRFbGVtZW50ID0gdWlJc0luUGxhY2UgPyB1aS5kaXNwbGF5IDogJGJvZHkuZmluZCgnI213LWNvbnRlbnQtdGV4dCcpO1xuXHRuZXh0RWxlbWVudC5iZWZvcmUoZXJyb3JCb3gpO1xuXHRlcnJvckJveC5oaWRlKCkuZmFkZUluKCk7XG59O1xuXG4vKiBDaGFuZ2UgYSBsaW5rIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSB0aXRsZS8qICogdGV4dDogVGhlIHdpa2l0ZXh0IG9mIHRoZSB3aG9sZSBwYWdlLyogKiB0aXRsZTogVGhlIG5ldyBkZXN0aW5hdGlvbiBvZiB0aGUgbGluay8qICogbGluazogVGhlIGxpbmsgdGhhdCB3aWxsIGJlIG1vZGlmaWVkLyogKiBleHRyYTogVGV4dCB0aGF0IHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIGxpbmsgKG9wdGlvbmFsKSAqL1xuY29uc3QgcmVwbGFjZUxpbmsgPSAodGV4dCwgdGl0bGUsIGxpbmssIGV4dHJhKSA9PiB7XG5cdGxldCBuZXdDb250ZW50O1xuXHRpZiAoaXNTYW1lUGFnZSh0aXRsZSwgbGluay5kZXNjcmlwdGlvbikpIHtcblx0XHRuZXdDb250ZW50ID0gbGluay5kZXNjcmlwdGlvbjtcblx0fSBlbHNlIHtcblx0XHRuZXdDb250ZW50ID0gYCR7dGl0bGV9fCR7bGluay5kZXNjcmlwdGlvbn1gO1xuXHR9XG5cdGNvbnN0IGxpbmtTdGFydCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGluay5zdGFydCkpO1xuXHRjb25zdCBsaW5rRW5kID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBsaW5rLmVuZCkpO1xuXHRyZXR1cm4gYCR7bGlua1N0YXJ0fVtbJHtuZXdDb250ZW50fV1dJHtsaW5rLmFmdGVyRGVzY3JpcHRpb259JHtleHRyYSB8fCAnJ30ke2xpbmtFbmR9YDtcbn07XG5cbi8qIFJlbW92ZSBhIGxpbmsgZnJvbSB0aGUgdGV4dC8qICogdGV4dDogVGhlIHdpa2l0ZXh0IG9mIHRoZSB3aG9sZSBwYWdlLyogKiBsaW5rOiBUaGUgbGluayB0aGF0IHdpbGwgYmUgcmVtb3ZlZCAqL1xuY29uc3QgcmVtb3ZlTGluayA9ICh0ZXh0LCBsaW5rKSA9PiB7XG5cdGNvbnN0IGxpbmtTdGFydCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGluay5zdGFydCkpO1xuXHRjb25zdCBsaW5rRW5kID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBsaW5rLmVuZCkpO1xuXHRyZXR1cm4gbGlua1N0YXJ0ICsgbGluay5kZXNjcmlwdGlvbiArIGxpbmsuYWZ0ZXJEZXNjcmlwdGlvbiArIGxpbmtFbmQ7XG59O1xuXG4vKiBFeHRyYWN0IGEgbGluayBmcm9tIGEgc3RyaW5nIGluIHdpa2kgZm9ybWF0LC8qICogc3RhcnRpbmcgZnJvbSBhIGdpdmVuIGluZGV4LiBSZXR1cm4gYSBsaW5rIGlmIG9uZSBjYW4gYmUgZm91bmQsLyogKiBvdGhlcndpc2UgcmV0dXJuIG51bGwuIFRoZSBcImxpbmtcIiBpbmNsdWRlcyBcImRpc2FtYmlndWF0aW9uIG5lZWRlZFwiLyogKiB0ZW1wbGF0ZXMgaW5tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBsaW5rIHByb3Blci8qICogdGV4dDogVGV4dCBmcm9tIHdoaWNoIHRoZSBsaW5rIHdpbGwgYmUgZXh0cmFjdGVkLyogKiBsYXN0SW5kZXg6IEluZGV4IGZyb20gd2hpY2ggdGhlIHNlYXJjaCB3aWxsIHN0YXJ0ICovXG5jb25zdCBleHRyYWN0TGluayA9ICh0ZXh0LCBsYXN0SW5kZXgpID0+IHtcblx0Ly8gRklYTUU6IE5vdCBhbiBhY3R1YWwgdGl0bGUgcmVnZXggKGxvdHMgb2YgZmFsc2UgcG9zaXRpdmVzXG5cdC8vIGFuZCBzb21lIGZhbHNlIG5lZ2F0aXZlcyksIGJ1dCBob3BlZnVsbHkgZ29vZCBlbm91Z2guXG5cdGNvbnN0IHRpdGxlUmVnZXggPSAvXFxbXFxbKC4qPykoPzpcXHwoLio/KSk/XV0vZztcblx0Ly8gRGl0dG8gZm9yIHRoZSB0ZW1wbGF0ZSByZWdleC4gRGlzYW1iaWd1YXRpb24gbGluayB0ZW1wbGF0ZXNcblx0Ly8gc2hvdWxkIGJlIHNpbXBsZSBlbm91Z2ggZm9yIHRoaXMgbm90IHRvIG1hdHRlciwgdGhvdWdoLlxuXHRjb25zdCB0ZW1wbGF0ZVJlZ2V4ID0gL14oXFx3KltcXHMhKSwuOjs/fV0qKXt7XFxzKihbXnt8fV0rPylcXHMqKD86XFx8W157XSo/KT99fS87XG5cdHRpdGxlUmVnZXgubGFzdEluZGV4ID0gbGFzdEluZGV4O1xuXHRjb25zdCBtYXRjaCA9IHRpdGxlUmVnZXguZXhlYyh0ZXh0KTtcblx0aWYgKG1hdGNoICYmIG1hdGNoLmluZGV4ICE9PSAtMSkge1xuXHRcdGxldCBwb3NzaWJseUFtYmlndW91cyA9IHRydWU7XG5cdFx0bGV0IGhhc0Rpc2FtVGVtcGxhdGUgPSBmYWxzZTtcblx0XHRsZXQgX2VuZCA9IG1hdGNoLmluZGV4ICsgNCArIG1hdGNoWzFdLmxlbmd0aCArIChtYXRjaFsyXSA/IDEgKyBtYXRjaFsyXS5sZW5ndGggOiAwKTtcblx0XHRsZXQgYWZ0ZXJEZXNjcmlwdGlvbiA9ICcnO1xuXHRcdGNvbnN0IHJlc3QgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIF9lbmQpKTtcblx0XHRjb25zdCB0ZW1wbGF0ZU1hdGNoID0gdGVtcGxhdGVSZWdleC5leGVjKHJlc3QpO1xuXHRcdGlmICh0ZW1wbGF0ZU1hdGNoKSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVRpdGxlID0gZ2V0Q2Fub25pY2FsVGl0bGUodGVtcGxhdGVNYXRjaFsyXSk7XG5cdFx0XHRjb25zdCB7ZGlzYW1MaW5rVGVtcGxhdGVzfSA9IGNmZztcblx0XHRcdGNvbnN0IHtkaXNhbUxpbmtJZ25vcmVUZW1wbGF0ZXN9ID0gY2ZnO1xuXHRcdFx0aWYgKGRpc2FtTGlua1RlbXBsYXRlcy5pbmNsdWRlcyh0ZW1wbGF0ZVRpdGxlKSkge1xuXHRcdFx0XHRfZW5kICs9IHRlbXBsYXRlTWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdFx0XHRhZnRlckRlc2NyaXB0aW9uID0gdGVtcGxhdGVNYXRjaFsxXS5yZXBsYWNlKC9cXHMkLywgJycpO1xuXHRcdFx0XHRoYXNEaXNhbVRlbXBsYXRlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGlzYW1MaW5rSWdub3JlVGVtcGxhdGVzLmluY2x1ZGVzKHRlbXBsYXRlVGl0bGUpKSB7XG5cdFx0XHRcdHBvc3NpYmx5QW1iaWd1b3VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRzdGFydDogbWF0Y2guaW5kZXgsXG5cdFx0XHRlbmQ6IF9lbmQsXG5cdFx0XHRwb3NzaWJseUFtYmlndW91cyxcblx0XHRcdGhhc0Rpc2FtVGVtcGxhdGUsXG5cdFx0XHR0aXRsZTogbWF0Y2hbMV0sXG5cdFx0XHRkZXNjcmlwdGlvbjogbWF0Y2hbMl0gPz8gbWF0Y2hbMV0sXG5cdFx0XHRhZnRlckRlc2NyaXB0aW9uLFxuXHRcdH07XG5cdH1cbn07XG5cbi8qIEV4dHJhY3QgYSBsaW5rIHRvIG9uZSBvZiBhIG51bWJlciBvZiBkZXN0aW5hdGlvbiBwYWdlcyBmcm9tIGEgc3RyaW5nLyogKiAoXCJ0ZXh0XCIpIGluIHdpa2kgZm9ybWF0LCBzdGFydGluZyBmcm9tIGEgZ2l2ZW4gaW5kZXggKFwibGFzdEluZGV4XCIpLi8qICogXCJEaXNhbWJpZ3VhdGlvbiBuZWVkZWRcIiB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGxpbmtzLi8qICogdGV4dDogUGFnZSBpbiB3aWtpIGZvcm1hdC8qICogZGVzdGluYXRpb25zOiBBcnJheSBvZiBwYWdlIHRpdGxlcyB0byBsb29rIGZvci8qICogbGFzdEluZGV4OiBJbmRleCBmcm9tIHdoaWNoIHRoZSBzZWFyY2ggd2lsbCBzdGFydCAqL1xuY29uc3QgZXh0cmFjdExpbmtUb1BhZ2UgPSAodGV4dCwgZGVzdGluYXRpb25zLCBsYXN0SW5kZXgpID0+IHtcblx0bGV0IGxpbms7XG5cdGxldCB0aXRsZTtcblx0ZG8ge1xuXHRcdGxpbmsgPSBleHRyYWN0TGluayh0ZXh0LCBsYXN0SW5kZXgpO1xuXHRcdGlmIChsaW5rKSB7XG5cdFx0XHRsYXN0SW5kZXggPSBsaW5rLmVuZDtcblx0XHRcdHRpdGxlID0gZ2V0Q2Fub25pY2FsVGl0bGUobGluay50aXRsZSk7XG5cdFx0fVxuXHR9IHdoaWxlIChsaW5rICYmICghbGluay5wb3NzaWJseUFtYmlndW91cyB8fCAhZGVzdGluYXRpb25zPy5pbmNsdWRlcyh0aXRsZSkpKTtcblx0cmV0dXJuIGxpbms7XG59O1xuXG4vKiBGaW5kIHRoZSBcInRhcmdldFwiIHBhZ2U6IGVpdGhlciB0aGUgb25lIHdlIGFyZSBpbiBvciB0aGUgXCJtYWluXCIgb25lIGZvdW5kIGJ5IGV4dHJhY3RpbmcvKiAqIHRoZSB0aXRsZSBmcm9tIFwiLiogKGRpc2FtYmlndWF0aW9uKVwiIG9yIHdoYXRldmVyIHRoZSBhcHByb3BpYXRlIGxvY2FsIGZvcm1hdCBpcyAqL1xuY29uc3QgZ2V0VGFyZ2V0UGFnZSA9ICgpID0+IHtcblx0Y29uc3QgdGl0bGUgPSBnZXRUaXRsZSgpO1xuXHRyZXR1cm4gZm9yY2VTYW1lUGFnZSA/IHRpdGxlIDogcmVtb3ZlRGlzYW0odGl0bGUpO1xufTtcblxuLyogR2V0IHRoZSBwYWdlIHRpdGxlLCB3aXRoIHRoZSBuYW1lc3BhY2UgcHJlZml4IGlmIGFueS4gKi9cbmNvbnN0IGdldFRpdGxlID0gKCkgPT4ge1xuXHRjb25zdCB7d2dQYWdlTmFtZX0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdHJldHVybiB3Z1BhZ2VOYW1lLnJlcGxhY2UoL18vZywgJyAnKTtcbn07XG5cbi8qIEV4dHJhY3QgYSBcIm1haW5cIiB0aXRsZSBmcm9tIFwiLiogKGRpc2FtYmlndWF0aW9uKVwiIG9yIHdoYXRldmVyIHRoZSBhcHByb3BpYXRlIGxvY2FsIGZvcm1hdCBpcyAqL1xuY29uc3QgcmVtb3ZlRGlzYW0gPSAodGl0bGUpID0+IHtcblx0Y29uc3QgbWF0Y2ggPSBuZXcgUmVnRXhwKGNmZy5kaXNhbVJlZ0V4cCkuZXhlYyh0aXRsZSk7XG5cdHJldHVybiBtYXRjaD8uWzFdID8/IHRpdGxlO1xufTtcblxuLyogQ2hlY2sgd2hldGhlciB0d28gcGFnZSB0aXRsZXMgYXJlIHRoZSBzYW1lICovXG5jb25zdCBpc1NhbWVQYWdlID0gKHRpdGxlMSwgdGl0bGUyKSA9PiB7XG5cdHJldHVybiBnZXRDYW5vbmljYWxUaXRsZSh0aXRsZTEpID09PSBnZXRDYW5vbmljYWxUaXRsZSh0aXRsZTIpO1xufTtcblxuLyogUmV0dXJuIHRoZSAnY2Fub25pY2FsIHRpdGxlJyBvZiBhIHBhZ2UgKi9cbmNvbnN0IGdldENhbm9uaWNhbFRpdGxlID0gKHRpdGxlKSA9PiB7XG5cdHRyeSB7XG5cdFx0Ly8gbXcuVGl0bGUgc2VlbXMgdG8gYmUgYnVnZ3ksIGFuZCBzb21lIHZhbGlkIHRpdGxlcyBhcmUgcmVqZWN0ZWRcblx0XHQvLyBGSVhNRTogVGhpcyBtYXkgY2F1c2UgZmFsc2UgbmVnYXRpdmVzXG5cdFx0dGl0bGUgPSBuZXcgbXcuVGl0bGUodGl0bGUpLmdldFByZWZpeGVkVGV4dCgpO1xuXHR9IGNhdGNoIHtcblx0XHQvKiBlbXB0eSAqL1xuXHR9XG5cdHJldHVybiB0aXRsZTtcbn07XG5cbi8qIEV4dHJhY3QgdGhlIGNvbnRleHQgYXJvdW5kIGEgZ2l2ZW4gbGluayBpbiBhIHRleHQgc3RyaW5nICovXG5jb25zdCBleHRyYWN0Q29udGV4dCA9ICh0ZXh0LCBsaW5rKSA9PiB7XG5cdGNvbnN0IGNvbnRleHRTdGFydCA9IGxpbmsuc3RhcnQgLSBjZmcucmFkaXVzO1xuXHRjb25zdCBjb250ZXh0RW5kID0gbGluay5lbmQgKyBjZmcucmFkaXVzO1xuXHRsZXQgY29udGV4dFByZXYgPSB0ZXh0LnNsaWNlKGNvbnRleHRTdGFydCwgbGluay5zdGFydCk7XG5cdGlmIChjb250ZXh0U3RhcnQgPiAwKSB7XG5cdFx0Y29udGV4dFByZXYgPSBtZXNzYWdlcy5lbGxpcHNpcyArIGNvbnRleHRQcmV2O1xuXHR9XG5cdGxldCBjb250ZXh0TmV4dCA9IHRleHQuc2xpY2UobGluay5lbmQsIGNvbnRleHRFbmQpO1xuXHRpZiAoY29udGV4dEVuZCA8IHRleHQubGVuZ3RoKSB7XG5cdFx0Y29udGV4dE5leHQgKz0gbWVzc2FnZXMuZWxsaXBzaXM7XG5cdH1cblx0cmV0dXJuIFtjb250ZXh0UHJldiwgdGV4dC5zbGljZShsaW5rLnN0YXJ0LCBsaW5rLmVuZCksIGNvbnRleHROZXh0XTtcbn07XG5cbi8qIEV4dHJhY3QgdGhlIHByZWZpeGVkIHBhZ2UgbmFtZSBmcm9tIGEgbGluayAqL1xuY29uc3QgZXh0cmFjdFBhZ2VOYW1lID0gKGxpbmspID0+IHtcblx0bGV0IHBhZ2VOYW1lID0gZXh0cmFjdFBhZ2VOYW1lUmF3KGxpbmspO1xuXHRpZiAocGFnZU5hbWUpIHtcblx0XHRjb25zdCBzZWN0aW9uUG9zID0gcGFnZU5hbWUuaW5kZXhPZignIycpO1xuXHRcdGxldCBzZWN0aW9uID0gJyc7XG5cdFx0aWYgKHNlY3Rpb25Qb3MgIT09IC0xKSB7XG5cdFx0XHRzZWN0aW9uID0gcGFnZU5hbWUuc2xpY2UoTWF0aC5tYXgoMCwgc2VjdGlvblBvcykpO1xuXHRcdFx0cGFnZU5hbWUgPSBwYWdlTmFtZS5zbGljZSgwLCBNYXRoLm1heCgwLCBzZWN0aW9uUG9zKSk7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRDYW5vbmljYWxUaXRsZShwYWdlTmFtZSkgKyBzZWN0aW9uO1xuXHR9XG59O1xuXG4vKiBFeHRyYWN0IHRoZSBwYWdlIG5hbWUgZnJvbSBhIGxpbmssIGFzIGlzICovXG5jb25zdCBleHRyYWN0UGFnZU5hbWVSYXcgPSAobGluaykgPT4ge1xuXHRjb25zdCB7d2dTY3JpcHQsIHdnQXJ0aWNsZVBhdGh9ID0gbXcuY29uZmlnLmdldCgpO1xuXHRpZiAoIWxpbmsuaGFzQ2xhc3MoJ2ltYWdlJykpIHtcblx0XHRjb25zdCBocmVmID0gbGluay5hdHRyKCdocmVmJyk7XG5cdFx0aWYgKGxpbmsuaGFzQ2xhc3MoJ25ldycpKSB7XG5cdFx0XHQvLyBcIlJlZFwiIGxpbmtcblx0XHRcdGlmIChocmVmLmluY2x1ZGVzKHdnU2NyaXB0KSkge1xuXHRcdFx0XHRyZXR1cm4gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd0aXRsZScsIGhyZWYpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZWdleCA9IHdnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCAnKC4qKScpO1xuXHRcdFx0Y29uc3QgcmVnZXhSZXN1bHQgPSBuZXcgUmVnRXhwKGBeJHtyZWdleH0kYCkuZXhlYyhocmVmKTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHJlZ2V4UmVzdWx0KSAmJiByZWdleFJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZWdleFJlc3VsdFsxXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKiBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBkaXNhbWJpZ3VhdGlvbiBwYWdlICovXG5jb25zdCBpc0Rpc2FtID0gKCkgPT4ge1xuXHRjb25zdCB7d2dDYXRlZ29yaWVzfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0Y29uc3QgY2F0ZWdvcmllcyA9IHdnQ2F0ZWdvcmllcyA/PyBbXTtcblx0Zm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG5cdFx0Y29uc3Qge2Rpc2FtQ2F0ZWdvcmllc30gPSBjZmc7XG5cdFx0aWYgKGRpc2FtQ2F0ZWdvcmllcy5pbmNsdWRlcyhjYXRlZ29yeSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBzZWNvbmRzVG9ISE1NU1MgPSAodG90YWxTZWNvbmRzKSA9PiB7XG5cdGxldCBoaG1tc3MgPSAnJztcblx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xuXHRjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodG90YWxTZWNvbmRzICUgMzYwMCkgLyA2MCk7XG5cdGNvbnN0IHNlY29uZHMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAlIDYwKTtcblx0aWYgKGhvdXJzID49IDEpIHtcblx0XHRoaG1tc3MgPSBgJHtwYWQoaG91cnMsICcwJywgMil9OmA7XG5cdH1cblx0aGhtbXNzICs9IGAke3BhZChtaW51dGVzLCAnMCcsIDIpfToke3BhZChzZWNvbmRzLCAnMCcsIDIpfWA7XG5cdHJldHVybiBoaG1tc3M7XG59O1xuXG5jb25zdCBwYWQgPSAoc3RyLCB6LCB3aWR0aCkgPT4ge1xuXHRzdHIgPSBzdHIudG9TdHJpbmcoKTtcblx0aWYgKHN0ci5sZW5ndGggPj0gd2lkdGgpIHtcblx0XHRyZXR1cm4gc3RyO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0QXJyYXkuZnJvbSh7XG5cdFx0XHRsZW5ndGg6IHdpZHRoIC0gc3RyLmxlbmd0aCArIDEsXG5cdFx0fSkuam9pbih6KSArIHN0clxuXHQpO1xufTtcblxuLyogQ3JlYXRlIGEgbmV3IGJ1dHRvblxuICogdGV4dDogVGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSBidXR0b25cbiAqIG9uQ2xpY2s6IEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGVcbiAqIGJ1dHRvbiBpcyBjbGlja2VkXG4gKi9cbmNvbnN0IGNyZWF0ZUJ1dHRvbiA9ICh0ZXh0LCBvbkNsaWNrKSA9PiB7XG5cdGNvbnN0IGJ1dHRvbiA9ICQoJzxpbnB1dD4nKS5hdHRyKHtcblx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHR2YWx1ZTogdGV4dCxcblx0fSk7XG5cdGJ1dHRvbi5hZGRDbGFzcygnZGlzYW1hc3Npc3QtYnV0dG9uJykub24oJ2NsaWNrJywgb25DbGljayk7XG5cdHJldHVybiBidXR0b247XG59O1xuXG4vKiBHaXZlbiBhIHBhZ2UgdGl0bGUgYW5kIGFuIGFycmF5IG9mIHBvc3NpYmxlIHJlZGlyZWN0cyB7ZnJvbSwgdG99IChcImNhbm9uaWNhbCB0aXRsZXNcIiksIGZpbmQgdGhlIHBhZ2UvKiAqIGF0IHRoZSBlbmQgb2YgdGhlIHJlZGlyZWN0IGNoYWluLCBpZiB0aGVyZSBpcyBvbmUuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBwYWdlIHRpdGxlIHRoYXQgd2FzIHBhc3NlZCAqL1xuY29uc3QgcmVzb2x2ZVJlZGlyZWN0ID0gKHBhZ2VUaXRsZSwgcG9zc2libGVSZWRpcmVjdHMpID0+IHtcblx0bGV0IGFwcGxpZWRSZWRpcmVjdCA9IHRydWU7XG5cdGNvbnN0IHZpc2l0ZWRQYWdlcyA9IHt9O1xuXHRsZXQgY3VycmVudFBhZ2UgPSBnZXRDYW5vbmljYWxUaXRsZShwYWdlVGl0bGUpO1xuXHR3aGlsZSAoYXBwbGllZFJlZGlyZWN0KSB7XG5cdFx0YXBwbGllZFJlZGlyZWN0ID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBwb3NzaWJsZVJlZGlyZWN0IG9mIHBvc3NpYmxlUmVkaXJlY3RzKSB7XG5cdFx0XHRpZiAocG9zc2libGVSZWRpcmVjdC5mcm9tID09PSBjdXJyZW50UGFnZSkge1xuXHRcdFx0XHRpZiAodmlzaXRlZFBhZ2VzW3Bvc3NpYmxlUmVkaXJlY3QudG9dKSB7XG5cdFx0XHRcdFx0Ly8gUmVkaXJlY3QgY2hhaW4gZGV0ZWN0ZWRcblx0XHRcdFx0XHRyZXR1cm4gcGFnZVRpdGxlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZpc2l0ZWRQYWdlc1tjdXJyZW50UGFnZV0gPSB0cnVlO1xuXHRcdFx0XHRhcHBsaWVkUmVkaXJlY3QgPSB0cnVlO1xuXHRcdFx0XHRjdXJyZW50UGFnZSA9IHBvc3NpYmxlUmVkaXJlY3QudG87XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIE5vIHJlZGlyZWN0IHJ1bGVzIGFwcGxpZWQgZm9yIGFuIGl0ZXJhdGlvbiBvZiB0aGUgb3V0ZXIgbG9vcDpcblx0Ly8gbm8gbW9yZSByZWRpcmVjdHMuIFdlIGFyZSBkb25lXG5cdHJldHVybiBjdXJyZW50UGFnZTtcbn07XG5cbi8qIEZldGNoIHRoZSBpbmNvbWluZyBsaW5rcyB0byBhIHBhZ2UuIFJldHVybnMgYSBqUXVlcnkgcHJvbWlzZS8qICogKHN1Y2Nlc3MgLSBhcnJheSBvZiB0aXRsZXMgb2YgcGFnZXMgdGhhdCBjb250YWluIGxpbmtzIHRvIHRoZSB0YXJnZXQgcGFnZSBhbmQvKiAqIGFycmF5IG9mIFwiY2Fub25pY2FsIHRpdGxlc1wiIG9mIHBvc3NpYmxlIGRlc3RpbmF0aW9ucyBvZiB0aGUgYmFja2xpbmtzIChlaXRoZXIvKiAqIHRoZSB0YXJnZXQgcGFnZSBvciByZWRpcmVjdHMgdG8gdGhlIHRhcmdldCBwYWdlKSwgZmFpbHVyZSAtIGVycm9yIGRlc2NyaXB0aW9uKS8qICogcGFnZTogVGFyZ2V0IHBhZ2UgKi9cbmNvbnN0IGdldEJhY2tsaW5rcyA9IChwYWdlKSA9PiB7XG5cdGNvbnN0IGRlZmVycmVkID0gbmV3ICQuRGVmZXJyZWQoKTtcblx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRsaXN0OiAnYmFja2xpbmtzJyxcblx0XHRibHRpdGxlOiBwYWdlLFxuXHRcdGJscmVkaXJlY3Q6IHRydWUsXG5cdFx0YmxsaW1pdDogY2ZnLmJhY2tsaW5rTGltaXQsXG5cdFx0YmxuYW1lc3BhY2U6IGNmZy50YXJnZXROYW1lc3BhY2VzLmpvaW4oJ3wnKSxcblx0fTtcblx0YXBpLmdldChwYXJhbXMpXG5cdFx0LmRvbmUoKHtxdWVyeX0pID0+IHtcblx0XHRcdC8vIFRoZXJlIG1pZ2h0IGJlIGR1cGxpY2F0ZSBlbnRyaWVzIGluIHNvbWUgY29ybmVyIGNhc2VzLiBXZSBkb24ndCBjYXJlLFxuXHRcdFx0Ly8gc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGNoZWNrIGxhdGVyLCBhbnl3YXlcblx0XHRcdGNvbnN0IGJhY2tsaW5rcyA9IFtdO1xuXHRcdFx0Y29uc3QgbGlua1RpdGxlcyA9IFtnZXRDYW5vbmljYWxUaXRsZShwYWdlKV07XG5cdFx0XHRjb25zdCBiYWNrbGlua3NRdWVyeSA9IHF1ZXJ5LmJhY2tsaW5rcztcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBiYWNrbGlua3NRdWVyeSkge1xuXHRcdFx0XHRiYWNrbGlua3NbYmFja2xpbmtzLmxlbmd0aF0gPSBlbGVtZW50LnRpdGxlO1xuXHRcdFx0XHRpZiAoIWVsZW1lbnQucmVkaXJsaW5rcykge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpbmtUaXRsZXNbbGlua1RpdGxlcy5sZW5ndGhdID0gZWxlbWVudC50aXRsZTtcblx0XHRcdFx0Y29uc3Qge3JlZGlybGlua3N9ID0gZWxlbWVudDtcblx0XHRcdFx0Zm9yIChjb25zdCB7dGl0bGV9IG9mIHJlZGlybGlua3MpIHtcblx0XHRcdFx0XHRiYWNrbGlua3NbYmFja2xpbmtzLmxlbmd0aF0gPSB0aXRsZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShiYWNrbGlua3MsIGxpbmtUaXRsZXMpO1xuXHRcdH0pXG5cdFx0LmZhaWwoKGNvZGUpID0+IHtcblx0XHRcdGRlZmVycmVkLnJlamVjdChtZXNzYWdlcy5nZXRCYWNrbGlua3NFcnJvci5yZXBsYWNlKCckMScsIGNvZGUpKTtcblx0XHR9KTtcblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbi8qIERvd25sb2FkIGEgbGlzdCBvZiByZWRpcmVjdHMgZm9yIHNvbWUgcGFnZXMuIFJldHVybnMgYSBqUXVlcnkgY2FsbGJhY2sgKHN1Y2Nlc3MgLS8qICogYXJyYXkgb2YgcmVkaXJlY3RzICh7ZnJvbSwgdG99KSwgZmFpbHVyZSAtIGVycm9yIGRlc2NyaXB0aW9uICkvKiAqIHBhZ2VUaXRsZXM6IEFycmF5IG9mIHBhZ2UgdGl0bGVzICovXG5jb25zdCBmZXRjaFJlZGlyZWN0cyA9IChwYWdlVGl0bGVzKSA9PiB7XG5cdGNvbnN0IGRlZmVycmVkID0gbmV3ICQuRGVmZXJyZWQoKTtcblx0Y29uc3QgY3VycmVudFRpdGxlcyA9IHBhZ2VUaXRsZXMuc2xpY2UoMCwgY2ZnLnF1ZXJ5VGl0bGVMaW1pdCk7XG5cdGNvbnN0IHJlc3RUaXRsZXMgPSBwYWdlVGl0bGVzLnNsaWNlKGNmZy5xdWVyeVRpdGxlTGltaXQpO1xuXHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdHRpdGxlczogY3VycmVudFRpdGxlcy5qb2luKCd8JyksXG5cdFx0cmVkaXJlY3RzOiB0cnVlLFxuXHR9O1xuXHRhcGkuZ2V0KHBhcmFtcylcblx0XHQuZG9uZSgoe3F1ZXJ5fSkgPT4ge1xuXHRcdFx0Y29uc3QgdGhlc2VSZWRpcmVjdHMgPSBxdWVyeS5yZWRpcmVjdHMgPz8gW107XG5cdFx0XHRpZiAocmVzdFRpdGxlcy5sZW5ndGgpIHtcblx0XHRcdFx0ZmV0Y2hSZWRpcmVjdHMocmVzdFRpdGxlcylcblx0XHRcdFx0XHQuZG9uZSgocmVkaXJlY3RzKSA9PiB7XG5cdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKFsuLi50aGVzZVJlZGlyZWN0cywgLi4ucmVkaXJlY3RzXSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZmFpbCgoZGVzY3JpcHRpb24pID0+IHtcblx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdChkZXNjcmlwdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoZXNlUmVkaXJlY3RzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5mYWlsKChjb2RlKSA9PiB7XG5cdFx0XHRkZWZlcnJlZC5yZWplY3QobWVzc2FnZXMuZmV0Y2hSZWRpcmVjdHNFcnJvci5yZXBsYWNlKCckMScsIGNvZGUpKTtcblx0XHR9KTtcblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbi8qIERvd25sb2FkIHRoZSBsaXN0IG9mIHVzZXIgcmlnaHRzIGZvciB0aGUgY3VycmVudCB1c2VyLiBSZXR1cm5zIGEvKiAqIGpRdWVyeSBwcm9taXNlIChzdWNjZXNzIC0gYXJyYXkgb2YgcmlnaHQgbmFtZXMsIGVycm9yIC0gZXJyb3IgZGVzY3JpcHRpb24pICovXG5jb25zdCBmZXRjaFJpZ2h0cyA9ICgpID0+IHtcblx0Y29uc3QgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0bWV0YTogJ3VzZXJpbmZvJyxcblx0XHR1aXByb3A6ICdyaWdodHMnLFxuXHR9O1xuXHRhcGkuZ2V0KHBhcmFtcylcblx0XHQuZG9uZSgoe3F1ZXJ5fSkgPT4ge1xuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShxdWVyeS51c2VyaW5mby5yaWdodHMpO1xuXHRcdH0pXG5cdFx0LmZhaWwoKGNvZGUpID0+IHtcblx0XHRcdGRlZmVycmVkLnJlamVjdChtZXNzYWdlcy5mZXRjaFJpZ2h0c0Vycm9yLnJlcGxhY2UoJyQxJywgY29kZSkpO1xuXHRcdH0pO1xuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxuLyogTG9hZCB0aGUgcmF3IHBhZ2UgdGV4dCBmb3IgYSBnaXZlbiB0aXRsZS4gUmV0dXJucyBhIGpRdWVyeSBwcm9taXNlIChzdWNjZXNzIC0gcGFnZS8qICogY29udGVudCwgZmFpbHVyZSAtIGVycm9yIGRlc2NyaXB0aW9uKS8qICogcGFnZVRpdGxlOiBUaXRsZSBvZiB0aGUgcGFnZSAqL1xuY29uc3QgbG9hZFBhZ2UgPSAocGFnZVRpdGxlKSA9PiB7XG5cdGNvbnN0IGRlZmVycmVkID0gbmV3ICQuRGVmZXJyZWQoKTtcblx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0dGl0bGVzOiBwYWdlVGl0bGUsXG5cdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0cnZwcm9wOiAndGltZXN0YW1wfGNvbnRlbnQnLFxuXHRcdG1ldGE6ICd0b2tlbnMnLFxuXHRcdHR5cGU6ICdjc3JmJyxcblx0fTtcblx0YXBpLmdldChwYXJhbXMpXG5cdFx0LmRvbmUoKHtxdWVyeX0pID0+IHtcblx0XHRcdGNvbnN0IFtyYXdQYWdlXSA9IHF1ZXJ5LnBhZ2VzO1xuXHRcdFx0Y29uc3QgcGFnZSA9IHt9O1xuXHRcdFx0cGFnZS5yZWRpcmVjdCA9IHJhd1BhZ2UucmVkaXJlY3QgIT09IHVuZGVmaW5lZDtcblx0XHRcdHBhZ2UubWlzc2luZyA9IHJhd1BhZ2UubWlzc2luZyAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHJhd1BhZ2UucmV2aXNpb25zKSB7XG5cdFx0XHRcdHBhZ2UuY29udGVudCA9IHJhd1BhZ2UucmV2aXNpb25zWzBdLmNvbnRlbnQ7XG5cdFx0XHRcdHBhZ2UuYmFzZVRpbWVTdGFtcCA9IHJhd1BhZ2UucmV2aXNpb25zWzBdLnRpbWVzdGFtcDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhZ2UuY29udGVudCA9ICcnO1xuXHRcdFx0XHRwYWdlLmJhc2VUaW1lU3RhbXAgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRwYWdlLnN0YXJ0VGltZVN0YW1wID0gcmF3UGFnZS5zdGFydHRpbWVzdGFtcDtcblx0XHRcdHBhZ2UuZWRpdFRva2VuID0gcXVlcnkudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHRcdGRlZmVycmVkLnJlc29sdmUocGFnZSk7XG5cdFx0fSlcblx0XHQuZmFpbCgoY29kZSkgPT4ge1xuXHRcdFx0ZGVmZXJyZWQucmVqZWN0KG1lc3NhZ2VzLmxvYWRQYWdlRXJyb3IucmVwbGFjZSgnJDEnLCBwYWdlVGl0bGUpLnJlcGxhY2UoJyQyJywgY29kZSkpO1xuXHRcdH0pO1xuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxuLyogUmVnaXN0ZXIgY2hhbmdlcyB0byBhIHBhZ2UsIHRvIGJlIHNhdmVkIGxhdGVyLiBSZXR1cm5zIGEgalF1ZXJ5IHByb21pc2UvKiAqIChzdWNjZXNzIC0gbm8gcGFyYW1zLCBmYWlsdXJlIC0gZXJyb3IgZGVzY3JpcHRpb24pLiBUYWtlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzLyogKiBhcyBzYXZlUGFnZSAqL1xuY29uc3Qgc2F2ZVdpdGhDb29sZG93biA9ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGRlZmVycmVkID0gbmV3ICQuRGVmZXJyZWQoKTtcblx0cGVuZGluZ1NhdmVzW3BlbmRpbmdTYXZlcy5sZW5ndGhdID0ge1xuXHRcdGFyZ3MsXG5cdFx0ZGZkOiBkZWZlcnJlZCxcblx0fTtcblx0aWYgKCFydW5uaW5nU2F2ZXMpIHtcblx0XHRjaGVja0FuZFNhdmUoKTtcblx0fVxuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxuLyogU2F2ZSB0aGUgZmlyc3Qgc2V0IG9mIGNoYW5nZXMgaW4gdGhlIGxpc3Qgb2YgcGVuZGluZyBjaGFuZ2VzLCBwcm92aWRpbmcgdGhhdC8qICogZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCBlZGl0ICovXG5jb25zdCBjaGVja0FuZFNhdmUgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICghcGVuZGluZ1NhdmVzLmxlbmd0aCkge1xuXHRcdHJ1bm5pbmdTYXZlcyA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXHRydW5uaW5nU2F2ZXMgPSB0cnVlO1xuXHRjb25zdCBtaWxsaXNTaW5jZUxhc3QgPSBEYXRlLm5vdygpIC0gbGFzdEVkaXRNaWxsaXM7XG5cdGlmIChtaWxsaXNTaW5jZUxhc3QgPCBjZmcuZWRpdENvb2xkb3duICogMTAwMCkge1xuXHRcdHNldFRpbWVvdXQoY2hlY2tBbmRTYXZlLCBjZmcuZWRpdENvb2xkb3duICogMTAwMCAtIG1pbGxpc1NpbmNlTGFzdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVGhlIGxhc3QgZWRpdCBzdGFydGVkIGF0IGxlYXN0IGNmZy5lZGl0Q29vbGRvd24gc2Vjb25kcyBhZ29cblx0XHRjb25zdCBzYXZlID0gcGVuZGluZ1NhdmVzLnNoaWZ0KCk7XG5cdFx0c2F2ZVBhZ2Vcblx0XHRcdC5hcHBseSh0aGlzLCBzYXZlLmFyZ3MpXG5cdFx0XHQuZG9uZSgoKSA9PiB7XG5cdFx0XHRcdGNoZWNrQW5kU2F2ZSgpO1xuXHRcdFx0XHRzYXZlLmRmZC5yZXNvbHZlKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZhaWwoKGRlc2NyaXB0aW9uKSA9PiB7XG5cdFx0XHRcdGNoZWNrQW5kU2F2ZSgpO1xuXHRcdFx0XHRzYXZlLmRmZC5yZWplY3QoZGVzY3JpcHRpb24pO1xuXHRcdFx0fSk7XG5cdFx0Ly8gV2UnbGwgdXNlIHRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IGVkaXQgc3RhcnRlZFxuXHRcdGxhc3RFZGl0TWlsbGlzID0gRGF0ZS5ub3coKTtcblx0fVxufTtcblxuLyogU2F2ZSB0aGUgY2hhbmdlcyBtYWRlIHRvIGEgcGFnZS4gUmV0dXJucyBhIGpRdWVyeSBwcm9taXNlIChzdWNjZXNzIC0gbm8gcGFyYW1zLC8qICogZmFpbHVyZSAtIGVycm9yIGRlc2NyaXB0aW9uKS8qICogcGFnZVRpdGxlOiBUaXRsZSBvZiB0aGUgcGFnZS8qICogcGFnZTogUGFnZSBkYXRhLyogKiBzdW1tYXJ5OiBTdW1tYXJ5IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIHBhZ2UvKiAqIG1pbm9yRWRpdDogV2hldGhlciB0byBtYXJrIHRoZSBlZGl0IGFzICdtaW5vcicvKiAqIGJvdEVkaXQ6IFdoZXRoZXIgdG8gbWFyayB0aGUgZWRpdCBhcyAnYm90JyAqL1xuY29uc3Qgc2F2ZVBhZ2UgPSAocGFnZVRpdGxlLCB7ZWRpdFRva2VuLCBjb250ZW50LCBiYXNlVGltZVN0YW1wLCBzdGFydFRpbWVTdGFtcH0sIHN1bW1hcnksIG1pbm9yRWRpdCwgYm90RWRpdCkgPT4ge1xuXHRjb25zdCBkZWZlcnJlZCA9IG5ldyAkLkRlZmVycmVkKCk7XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRhY3Rpb246ICdlZGl0Jyxcblx0XHR0aXRsZTogcGFnZVRpdGxlLFxuXHRcdHRva2VuOiBlZGl0VG9rZW4sXG5cdFx0dGV4dDogY29udGVudCxcblx0XHRiYXNldGltZXN0YW1wOiBiYXNlVGltZVN0YW1wLFxuXHRcdHN0YXJ0dGltZXN0YW1wOiBzdGFydFRpbWVTdGFtcCxcblx0XHRzdW1tYXJ5LFxuXHRcdHdhdGNobGlzdDogY2ZnLndhdGNoLFxuXHRcdG1pbm9yOiBtaW5vckVkaXQsXG5cdFx0Ym90OiBib3RFZGl0LFxuXHR9O1xuXHRhcGkucG9zdChwYXJhbXMpXG5cdFx0LmRvbmUoKCkgPT4ge1xuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZSgpO1xuXHRcdH0pXG5cdFx0LmZhaWwoKGNvZGUpID0+IHtcblx0XHRcdGRlZmVycmVkLnJlamVjdChtZXNzYWdlcy5zYXZlUGFnZUVycm9yLnJlcGxhY2UoJyQxJywgcGFnZVRpdGxlKS5yZXBsYWNlKCckMicsIGNvZGUpKTtcblx0XHR9KTtcblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbmV4cG9ydCB7aW5zdGFsbH07XG4iLCAiLyoqXG4gKiBEaXNhbUFzc2lzdDogYSB0b29sIGZvciByZXBhaXJpbmcgbGlua3MgZnJvbSBhcnRpY2xlcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlcy5cbiAqIOeUsVF3ZXJ0eXl0cmV3cXF3ZXJ0eeacgOWIneiuvuiuoe+8mkNDIEJZLVNBIDMuMFxuICog55SxR1pXRGVy5pys5Zyw5YyW77yaMjAyMC0wOC0xOSBDQyBCWS1TQSAzLjBcbiAqIOeUseWSjOW5s+Wli+aWl+aVkeWcsOeQg+eojeS9nOe/u+ivkSAyMDIxLTA1LTE1IENDIEJZLVNBIDMuMFxuICog5rGC6Ze755m+56eRTmp6anrnroDkvZPljJYgMjAyMi0yLTE0IENDIEJZLVNBIDQuMFxuICovXG5pbXBvcnQgJy4vRGlzYW1Bc3Npc3QubGVzcyc7XG5cbmltcG9ydCB7aW5zdGFsbH0gZnJvbSAnLi9tb2R1bGVzL2NvcmUnO1xuXG4kKGluc3RhbGwpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxR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TixlQUFlbEI7SUFDZkcsZ0JBQWdCRDtJQUNoQnhVO0lBQ0F5VixXQUFXNVksSUFBSWlCO0lBQ2Y0WCxPQUFPTDtJQUNQTSxLQUFLTDtFQUNOO0FBQ0EzWSxNQUFJaVosS0FBS3JELE1BQU0sRUFDYjdMLEtBQUssTUFBTTtBQUNYbUIsYUFBU0UsUUFBUTtFQUNsQixDQUFDLEVBQ0FILEtBQU0wTCxVQUFTO0FBQ2Z6TCxhQUFTMEwsT0FBT3hWLFNBQVMyQixjQUFjd0ksUUFBUSxNQUFNNEIsU0FBUyxFQUFFNUIsUUFBUSxNQUFNb0wsSUFBSSxDQUFDO0VBQ3BGLENBQUM7QUFDRixTQUFPekwsU0FBU1ksUUFBUTtBQUN6Qjs7QUNwZ0NBeEcsRUFBRU4sT0FBTzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1vZHVsZSIsICJlcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImVycm9yIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAiZXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJlcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAiZXJyb3IiLCAibW9kdWxlIiwgImVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJlcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAiZXJyb3IiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAicmVxdWlyZSIsICJhcGkiLCAiaW5pdE13QXBpIiwgImNmZyIsICJkaXNhbUNhdGVnb3JpZXMiLCAiZGlzYW1MaW5rVGVtcGxhdGVzIiwgImRpc2FtTGlua0lnbm9yZVRlbXBsYXRlcyIsICJkaXNhbUZvcm1hdCIsICJkaXNhbVJlZ0V4cCIsICJkaXNhbU5lZWRlZFRleHQiLCAiY29uY2F0IiwgInJlZGlyZWN0VG9EaXNhbSIsICJpbnRlbnRpb25hbExpbmtPcHRpb24iLCAidGFyZ2V0TmFtZXNwYWNlcyIsICJiYWNrbGlua0xpbWl0IiwgInF1ZXJ5VGl0bGVMaW1pdCIsICJyYWRpdXMiLCAibnVtQ29udGV4dExpbmVzIiwgImhpc3RvcnlTaXplIiwgImVkaXRDb29sZG93biIsICJ3YXRjaCIsICJtZXNzYWdlcyIsICJzdGFydCIsICJzdGFydE1haW4iLCAic3RhcnRTYW1lIiwgImNsb3NlIiwgInVuZG8iLCAib21pdCIsICJyZWZyZXNoIiwgInRpdGxlQXNUZXh0IiwgImRpc2FtTmVlZGVkIiwgImludGVudGlvbmFsTGluayIsICJ0aXRsZUFzVGV4dFByb21wdCIsICJyZW1vdmVMaW5rIiwgIm9wdGlvbk1hcmtlciIsICJ0YXJnZXRPcHRpb25NYXJrZXIiLCAicmVkaXJlY3RPcHRpb25NYXJrZXIiLCAicGFnZVRpdGxlTGluZSIsICJub01vcmVMaW5rcyIsICJwZW5kaW5nRWRpdENvdW50ZXIiLCAicGVuZGluZ0VkaXRCb3giLCAicGVuZGluZ0VkaXRCb3hUaW1lRXN0aW1hdGlvbiIsICJwZW5kaW5nRWRpdEJveExpbWl0ZWQiLCAiZXJyb3IiLCAiZmV0Y2hSZWRpcmVjdHNFcnJvciIsICJnZXRCYWNrbGlua3NFcnJvciIsICJmZXRjaFJpZ2h0c0Vycm9yIiwgImxvYWRQYWdlRXJyb3IiLCAic2F2ZVBhZ2VFcnJvciIsICJkaXNtaXNzRXJyb3IiLCAicGVuZGluZyIsICJlZGl0SW5Qcm9ncmVzcyIsICJlbGxpcHNpcyIsICJub3RpZnlDaGFyYWN0ZXIiLCAic3VtbWFyeSIsICJzdW1tYXJ5Q2hhbmdlZCIsICJzdW1tYXJ5T21pdHRlZCIsICJzdW1tYXJ5UmVtb3ZlZCIsICJzdW1tYXJ5SW50ZW50aW9uYWwiLCAic3VtbWFyeUhlbHBOZWVkZWQiLCAic3VtbWFyeVNlcGFyYXRvciIsICJyZWRpcmVjdFN1bW1hcnkiLCAic3RhcnRMaW5rIiwgInVpIiwgImxpbmtzIiwgInBhZ2VDaGFuZ2VzIiwgImN1cnJlbnRQYWdlVGl0bGUiLCAiY3VycmVudFBhZ2VQYXJhbWV0ZXJzIiwgImN1cnJlbnRMaW5rIiwgInBvc3NpYmxlQmFja2xpbmtEZXN0aW5hdGlvbnMiLCAiZm9yY2VTYW1lUGFnZSIsICJydW5uaW5nIiwgImNob29zaW5nIiwgImNhbk1hcmtJbnRlbnRpb25hbExpbmtzIiwgImRpc3BsYXllZFBhZ2VzIiwgImVkaXRDb3VudCIsICJlZGl0TGltaXQiLCAicGVuZGluZ1NhdmVzIiwgInBlbmRpbmdFZGl0Qm94VGV4dCIsICJsYXN0RWRpdE1pbGxpcyIsICJydW5uaW5nU2F2ZXMiLCAiaW5zdGFsbCIsICJ3Z0FjdGlvbiIsICJtdyIsICJjb25maWciLCAiZ2V0IiwgImlzRGlzYW0iLCAiJCIsICJwb3J0bGV0SWQiLCAiZG9jdW1lbnQiLCAicXVlcnlTZWxlY3RvciIsICJSZWdFeHAiLCAidGVzdCIsICJnZXRUaXRsZSIsICJzdGFydE1haW5MaW5rIiwgInV0aWwiLCAiYWRkUG9ydGxldExpbmsiLCAib24iLCAic3RhcnRTYW1lTGluayIsICJhZGQiLCAiZW5zdXJlREFCRXhpc3RzIiwgInRoZW4iLCAiY2FuTWFyayIsICJjcmVhdGVVSSIsICJhZGRVbmxvYWRDb25maXJtIiwgIm1hcmtEaXNhbU9wdGlvbnMiLCAiY2hlY2tFZGl0TGltaXQiLCAidG9nZ2xlUGVuZGluZ0VkaXRCb3giLCAiZG9QYWdlIiwgIiRib2R5IiwgImRpc3BsYXkiLCAiYWRkQ2xhc3MiLCAiZmluaXNoZWRNZXNzYWdlIiwgInRleHQiLCAiaGlkZSIsICJjb250ZXh0IiwgInVuZG9CdXR0b24iLCAiY3JlYXRlQnV0dG9uIiwgIm9taXRCdXR0b24iLCAiZW5kQnV0dG9uIiwgInNhdmVBbmRFbmQiLCAicmVmcmVzaEJ1dHRvbiIsICJ0aXRsZUFzVGV4dEJ1dHRvbiIsICJjaG9vc2VUaXRsZUZyb21Qcm9tcHQiLCAiaW50ZW50aW9uYWxMaW5rQnV0dG9uIiwgImNob29zZUludGVudGlvbmFsTGluayIsICJkaXNhbU5lZWRlZEJ1dHRvbiIsICJjaG9vc2VEaXNhbU5lZWRlZCIsICJyZW1vdmVMaW5rQnV0dG9uIiwgImNob29zZUxpbmtSZW1vdmFsIiwgInRvcCIsICJhcHBlbmQiLCAibGVmdEJ1dHRvbnMiLCAicmlnaHRCdXR0b25zIiwgImFsbEJ1dHRvbnMiLCAidXBkYXRlRWRpdENvdW50ZXIiLCAidG9nZ2xlQWN0aW9uQnV0dG9ucyIsICJmaW5kIiwgImJlZm9yZSIsICJmYWRlSW4iLCAid2luZG93IiwgImNoZWNrQWN0dWFsQ2hhbmdlcyIsICJvcHRpb25QYWdlVGl0bGVzIiwgIm9wdGlvbk1hcmtlcnMiLCAiZ2V0RGlzYW1PcHRpb25zIiwgImVhY2giLCAiX2luZGV4IiwgImVsZW1lbnQiLCAibGluayIsICJ0aXRsZSIsICJleHRyYWN0UGFnZU5hbWUiLCAiYXR0ciIsICJldiIsICJwcmV2ZW50RGVmYXVsdCIsICJjaG9vc2VSZXBsYWNlbWVudCIsICJhZnRlciIsICJsZW5ndGgiLCAidGFyZ2V0UGFnZSIsICJnZXRUYXJnZXRQYWdlIiwgImZldGNoUmVkaXJlY3RzIiwgImRvbmUiLCAicmVkaXJlY3RzIiwgImVuZFRhcmdldFBhZ2UiLCAicmVzb2x2ZVJlZGlyZWN0IiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJlbnRyaWVzIiwgIl9zdGVwIiwgInMiLCAibiIsICJpaSIsICJvcHRpb25QYWdlVGl0bGUiLCAidmFsdWUiLCAiZW5kT3B0aW9uVGl0bGUiLCAiaXNTYW1lUGFnZSIsICJlcnIiLCAiZSIsICJmIiwgImZhaWwiLCAiZGVmZXJyZWQiLCAiRGVmZXJyZWQiLCAicmVzb2x2ZSIsICJleGVjIiwgImRpc2FtVGl0bGUiLCAicmVwbGFjZSIsICJsb2FkUGFnZSIsICJwYWdlIiwgIm1pc3NpbmciLCAiY29udGVudCIsICJzYXZlUGFnZSIsICJkZXNjcmlwdGlvbiIsICJwcm9taXNlIiwgImZldGNoUmlnaHRzIiwgInJpZ2h0cyIsICJpbmNsdWRlcyIsICJhbHdheXMiLCAiYXBwbHlDaGFuZ2UiLCAic2hpZnQiLCAiZGF0YSIsICJkb0xpbmsiLCAiZ2V0QmFja2xpbmtzIiwgImJhY2tsaW5rcyIsICJwYWdlVGl0bGVzIiwgIl9pIiwgIl9wZW5kaW5nU2F2ZXMiLCAiZWwiLCAiZmlsdGVyIiwgInQiLCAicmVtb3ZlRGlzYW0iLCAidXBkYXRlQ29udGV4dCIsICJleHRyYWN0TGlua1RvUGFnZSIsICJlbmQiLCAicGFnZVRpdGxlIiwgImV4dHJhIiwgImFkZENoYW5nZSIsICJyZXBsYWNlTGluayIsICJwcm9tcHQiLCAibGFzdFBhZ2UiLCAiYXQiLCAidW5zaGlmdCIsICJjb250ZW50QmVmb3JlIiwgInBvcCIsICJlbmFibGVkIiwgImFmZmVjdGVkQnV0dG9ucyIsICJfaTIiLCAiX2FmZmVjdGVkQnV0dG9ucyIsICJidXR0b24iLCAicHJvcCIsICJ0b2dnbGVGaW5pc2hlZE1lc3NhZ2UiLCAic2hvdyIsICJ0b2dnbGUiLCAiZmFkZU91dCIsICJub3RpZnlDb21wbGV0aW9uIiwgIm9sZFRpdGxlIiwgIm9uZSIsICJodG1sIiwgImdldFVybCIsICJyZWRpcmVjdCIsICJlc2NhcGUiLCAiZXh0cmFjdENvbnRleHQiLCAiZW1wdHkiLCAibnVtTGluZXMiLCAiTWF0aCIsICJjZWlsIiwgImhlaWdodCIsICJOdW1iZXIiLCAicGFyc2VGbG9hdCIsICJjc3MiLCAiQXJyYXkiLCAiZnJvbSIsICJqb2luIiwgImhhc0Rpc2FtVGVtcGxhdGUiLCAiY291bnRBY3R1YWxseUNoYW5nZWRGdWxseUNoZWNrZWRQYWdlcyIsICJ0ZXh0Q29udGVudCIsICJzZWNvbmRzVG9ISE1NU1MiLCAicGFnZUNoYW5nZSIsICJjaGFuZ2VTdW1tYXJpZXMiLCAic2F2ZSIsICJzYXZlV2l0aENvb2xkb3duIiwgImFwcGx5QWxsQ2hhbmdlcyIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJvbGRDb250ZW50IiwgImxhc3RQYWdlQ2hhbmdlIiwgImNvdW50QWN0dWFsQ2hhbmdlcyIsICJjaGFuZ2VDb3VudCIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJsYXN0Q2hhbmdlIiwgImN1cnJlbnRUb29sVUkiLCAicmVtb3ZlQ2xhc3MiLCAicmVtb3ZlIiwgImNvbXBsZXRlIiwgImVycm9yRGVzY3JpcHRpb24iLCAiZXJyb3JCb3giLCAidWlJc0luUGxhY2UiLCAiY29udGFpbnMiLCAiZG9jdW1lbnRFbGVtZW50IiwgIm5leHRFbGVtZW50IiwgIm5ld0NvbnRlbnQiLCAibGlua1N0YXJ0IiwgInNsaWNlIiwgIm1heCIsICJsaW5rRW5kIiwgImFmdGVyRGVzY3JpcHRpb24iLCAiZXh0cmFjdExpbmsiLCAibGFzdEluZGV4IiwgInRpdGxlUmVnZXgiLCAidGVtcGxhdGVSZWdleCIsICJtYXRjaCIsICJpbmRleCIsICJfbWF0Y2gkIiwgInBvc3NpYmx5QW1iaWd1b3VzIiwgIl9lbmQiLCAicmVzdCIsICJ0ZW1wbGF0ZU1hdGNoIiwgInRlbXBsYXRlVGl0bGUiLCAiZ2V0Q2Fub25pY2FsVGl0bGUiLCAiZGVzdGluYXRpb25zIiwgIndnUGFnZU5hbWUiLCAiX21hdGNoJDIiLCAidGl0bGUxIiwgInRpdGxlMiIsICJUaXRsZSIsICJnZXRQcmVmaXhlZFRleHQiLCAiY29udGV4dFN0YXJ0IiwgImNvbnRleHRFbmQiLCAiY29udGV4dFByZXYiLCAiY29udGV4dE5leHQiLCAicGFnZU5hbWUiLCAiZXh0cmFjdFBhZ2VOYW1lUmF3IiwgInNlY3Rpb25Qb3MiLCAiaW5kZXhPZiIsICJzZWN0aW9uIiwgIndnU2NyaXB0IiwgIndnQXJ0aWNsZVBhdGgiLCAiaGFzQ2xhc3MiLCAiaHJlZiIsICJnZXRQYXJhbVZhbHVlIiwgInJlZ2V4IiwgInJlZ2V4UmVzdWx0IiwgImlzQXJyYXkiLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwgIndnQ2F0ZWdvcmllcyIsICJjYXRlZ29yaWVzIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgImNhdGVnb3J5IiwgInRvdGFsU2Vjb25kcyIsICJoaG1tc3MiLCAiaG91cnMiLCAiZmxvb3IiLCAibWludXRlcyIsICJzZWNvbmRzIiwgInBhZCIsICJzdHIiLCAieiIsICJ3aWR0aCIsICJ0b1N0cmluZyIsICJvbkNsaWNrIiwgInR5cGUiLCAicG9zc2libGVSZWRpcmVjdHMiLCAiYXBwbGllZFJlZGlyZWN0IiwgInZpc2l0ZWRQYWdlcyIsICJjdXJyZW50UGFnZSIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSIsICJwb3NzaWJsZVJlZGlyZWN0IiwgInRvIiwgInBhcmFtcyIsICJhY3Rpb24iLCAibGlzdCIsICJibHRpdGxlIiwgImJscmVkaXJlY3QiLCAiYmxsaW1pdCIsICJibG5hbWVzcGFjZSIsICJxdWVyeSIsICJsaW5rVGl0bGVzIiwgImJhY2tsaW5rc1F1ZXJ5IiwgIl9pdGVyYXRvcjYiLCAiX3N0ZXA2IiwgInJlZGlybGlua3MiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAiY29kZSIsICJyZWplY3QiLCAiY3VycmVudFRpdGxlcyIsICJyZXN0VGl0bGVzIiwgInRpdGxlcyIsICJfcXVlcnkkcmVkaXJlY3RzIiwgInRoZXNlUmVkaXJlY3RzIiwgIm1ldGEiLCAidWlwcm9wIiwgInVzZXJpbmZvIiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgInJ2cHJvcCIsICJyYXdQYWdlIiwgInBhZ2VzIiwgInJldmlzaW9ucyIsICJiYXNlVGltZVN0YW1wIiwgInRpbWVzdGFtcCIsICJzdGFydFRpbWVTdGFtcCIsICJzdGFydHRpbWVzdGFtcCIsICJlZGl0VG9rZW4iLCAidG9rZW5zIiwgImNzcmZ0b2tlbiIsICJhcmdzIiwgImRmZCIsICJjaGVja0FuZFNhdmUiLCAibWlsbGlzU2luY2VMYXN0IiwgIkRhdGUiLCAibm93IiwgInNldFRpbWVvdXQiLCAiYXBwbHkiLCAibWlub3JFZGl0IiwgImJvdEVkaXQiLCAidG9rZW4iLCAiYmFzZXRpbWVzdGFtcCIsICJ3YXRjaGxpc3QiLCAibWlub3IiLCAiYm90IiwgInBvc3QiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS51bnNoaWZ0LmpzIiwgInNyYy9EaXNhbUFzc2lzdC9tb2R1bGVzL2FwaS50cyIsICJzcmMvRGlzYW1Bc3Npc3QvbW9kdWxlcy9jb25maWcudHMiLCAic3JjL0Rpc2FtQXNzaXN0L21vZHVsZXMvbWVzc2FnZXMuanMiLCAic3JjL0Rpc2FtQXNzaXN0L21vZHVsZXMvY29yZS5qcyIsICJzcmMvRGlzYW1Bc3Npc3QvRGlzYW1Bc3Npc3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcblxuLy8gSUU4LVxudmFyIElOQ09SUkVDVF9SRVNVTFQgPSBbXS51bnNoaWZ0KDApICE9PSAxO1xuXG4vLyBWOCB+IENocm9tZSA8IDcxIGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS51bnNoaWZ0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1JFU1VMVCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUudW5zaGlmdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS51bnNoaWZ0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdW5zaGlmdDogZnVuY3Rpb24gdW5zaGlmdChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnQ291bnQpIHtcbiAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgICB2YXIgayA9IGxlbjtcbiAgICAgIHdoaWxlIChrLS0pIHtcbiAgICAgICAgdmFyIHRvID0gayArIGFyZ0NvdW50O1xuICAgICAgICBpZiAoayBpbiBPKSBPW3RvXSA9IE9ba107XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJnQ291bnQ7IGorKykge1xuICAgICAgICBPW2pdID0gYXJndW1lbnRzW2pdO1xuICAgICAgfVxuICAgIH0gcmV0dXJuIHNldEFycmF5TGVuZ3RoKE8sIGxlbiArIGFyZ0NvdW50KTtcbiAgfVxufSk7XG4iLCAiaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmNvbnN0IGFwaTogbXcuQXBpID0gaW5pdE13QXBpKCdEaXNhbUFzc2lzdC8xLjEnKTtcblxuZXhwb3J0IHthcGl9O1xuIiwgImNvbnN0IGNmZyA9IHtcblx0LyogQ2F0ZWdvcmllcyB3aGVyZSBkaXNhbWJpZ3VhdGlvbiBwYWdlcyBhcmUgYWRkZWQgKHVzdWFsbHkgYnkgYSB0ZW1wbGF0ZSBsaWtlIHt7RGlzYW1iaWd1YXRpb259fSAqL1xuXHRkaXNhbUNhdGVnb3JpZXM6IFsn5YWo6YOo5raI5q2n5LmJ6aG16Z2iJ10sXG5cdC8qIFwiQ2Fub25pY2FsIG5hbWVzXCIgb2YgdGhlIHRlbXBsYXRlcyB0aGF0IG1heSBhcHBlYXIgYWZ0ZXIgYW1iaWd1b3VzIGxpbmtzIGFuZCB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIGZpeGluZyB0aG9zZSBsaW5rcyAqL1xuXHRkaXNhbUxpbmtUZW1wbGF0ZXM6IFtcblx0XHQnRGlzYW1iaWd1YXRpb24gbmVlZGVkJyxcblx0XHQnQW1iaWd1b3VzIGxpbmsnLFxuXHRcdCdBbWJsaW5rJyxcblx0XHQnRGFiIG5lZWRlZCcsXG5cdFx0J0Rpc2FtYi1saW5rJyxcblx0XHQnRGlzYW1iaWcgbmVlZGVkJyxcblx0XHQnRGlzYW1iaWd1YXRlJyxcblx0XHQnRG4nLFxuXHRcdCdOZWVkZGFiJyxcblx0XSxcblx0LyogXCJDYW5vbmljYWwgbmFtZXNcIiBvZiB0aGUgdGVtcGxhdGVzIHRoYXQgZGVzaWduYXRlIGludGVudGlvbmFsIGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VzICovXG5cdGRpc2FtTGlua0lnbm9yZVRlbXBsYXRlczogWydSIGZyb20gYW1iaWd1b3VzIHBhZ2UnLCAnUiB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlJywgJ1IgZnJvbSBpbmNvbXBsZXRlIGRpc2FtYmlndWF0aW9uJ10sXG5cdC8qIEZvcm1hdCBzdHJpbmcgZm9yIFwiRm9vIChkaXNhbWJpZ3VhdGlvbilcIi1zdHlsZSBwYWdlcyAqL1xuXHRkaXNhbUZvcm1hdDogJyQx77yI5raI5q2n5LmJ77yJJyxcblx0LyogUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSB0aXRsZXMgb2YgZGlzYW1iaWd1YXRpb24gcGFnZXMgKHdoZW4gdGhleSBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHRpdGxlcyBvZiB0aGUgcHJpbWFyeSB0b3BpY3MpICovXG5cdGRpc2FtUmVnRXhwOiAnXiguKinvvIgo5raI5q2n5LmJfOa2iOatp+e+qSnvvIkkJyxcblx0LyogVGV4dCB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGxpbmsgaWYgdGhlIHVzZXIgcmVxdWVzdHMgaGVscC4gSWYgdGhlIHZhbHVlIGlzIG51bGwsIHRoZSBvcHRpb24gdG8gcmVxdWVzdCBoZWxwIHdvbid0IGJlIG9mZmVyZWQgKi9cblx0ZGlzYW1OZWVkZWRUZXh0OiAne3tkbnxkYXRlPXt7Jy5jb25jYXQoJ3N1YnN0OicsICdDVVJSRU5UTU9OVEhOQU1FJywgJ319IHt7JywgJ3N1YnN0OicsICdDVVJSRU5UWUVBUn19fX0nKSxcblx0LyogQ29udGVudCBvZiB0aGUgXCJGb28gKGRpc2FtYmlndWF0aW9uKVwiIHBhZ2VzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2luZyBEaXNhbUFzc2lzdCBmcm9tIGEgXCJGb29cIiBwYWdlICovXG5cdHJlZGlyZWN0VG9EaXNhbTogJyPph43lrprlkJEgW1skMV1dJy5jb25jYXQoJ3t7UiB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlfX0nKSxcblx0LyogV2hldGhlciBpbnRlbnRpb25hbCBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlcyBjYW4gYmUgZXhwbGljaXRseSBtYXJrZWQgYnkgYWRkaW5nIFwiIChkaXNhbWJpZ3VhdGlvbilcIiAqL1xuXHRpbnRlbnRpb25hbExpbmtPcHRpb246IGZhbHNlLFxuXHQvKiBOYW1lc3BhY2VzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZCBmb3IgaW5jb21pbmcgbGlua3MgdG8gdGhlIGRpc2FtYmlndWF0aW9uIHBhZ2UgKHBhZ2VzIGluIG90aGVyIG5hbWVzcGFjZXMgd2lsbCBiZSBpZ25vcmVkKSAqL1xuXHR0YXJnZXROYW1lc3BhY2VzOiBbNiwgMTAsIDE0LCAxMTgsIDBdLFxuXHQvKiBOdW1iZXIgb2YgYmFja2xpbmtzIHRoYXQgd2lsbCBiZSBkb3dubG9hZGVkIGF0IG9uY2UgV2hlbiB1c2luZyBibHJlZGlyZWN0LCB0aGUgbWF4aW11bSBsaW1pdCBpcyBzdXBwb3NlZGx5IGhhbHZlZCAoc2VlIGh0dHA6Ly93d3cubWVkaWF3aWtpLm9yZy93aWtpL0FQSTpCYWNrbGlua3MpICovXG5cdGJhY2tsaW5rTGltaXQ6IDI1MCxcblx0LyogTnVtYmVyIG9mIHRpdGxlcyB3ZSBjYW4gcXVlcnkgZm9yIGF0IG9uY2UgKi9cblx0cXVlcnlUaXRsZUxpbWl0OiA1MCxcblx0LyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgaW5jb21pbmcgbGluayB0aGF0IHdpbGwgYmUgZGlzcGxheWVkICovXG5cdHJhZGl1czogMzAwLFxuXHQvKiBIZWlnaHQgb2YgdGhlIGNvbnRleHQgYm94LCBpbiBsaW5lcyAqL1xuXHRudW1Db250ZXh0TGluZXM6IDQsXG5cdC8qIE51bWJlciBvZiBwYWdlcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGJlZm9yZSBzYXZpbmcsIHNvIHRoYXQgY2hhbmdlcyB0byB0aGVtIGNhbiBiZSB1bmRvbmUgaWYgbmVlZCBiZSAqL1xuXHRoaXN0b3J5U2l6ZTogMixcblx0LyogTWluaW11bSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGxhc3QgY2hhbmdlIHdhcyBzYXZlZCBiZWZvcmUgYSBuZXcgZWRpdCBjYW4gYmUgbWFkZS4gQSBuZWdhdGl2ZSB2YWx1ZSBvciAwIGRpc2FibGVzIHRoZSBjb29sZG93bi4gVXNlcnMgd2l0aCB0aGUgXCJib3RcIiByaWdodCB3b24ndCBiZSBhZmZlY3RlZCBieSB0aGUgY29vbGRvd24gKi9cblx0ZWRpdENvb2xkb3duOiAwLFxuXHQvKiBTcGVjaWZ5IGhvdyB0aGUgd2F0Y2hsaXN0IGlzIGFmZmVjdGVkIGJ5IERpc2FtQXNzaXN0IGVkaXRzLiBQb3NzaWJsZSB2YWx1ZXM6IFwid2F0Y2hcIiwgXCJ1bndhdGNoXCIsIFwicHJlZmVyZW5jZXNcIiwgXCJub2NoYW5nZVwiICovXG5cdHdhdGNoOiAnbm9jaGFuZ2UnLFxufTtcblxuZXhwb3J0IHtjZmd9O1xuIiwgImNvbnN0IG1lc3NhZ2VzID0ge1xuXHRzdGFydDogJ+S4uumTvuaOpea2iOatp+S5iScsXG5cdHN0YXJ0TWFpbjogJ+S4uumTvuiHs+S4u+adoeebrueahOmTvuaOpea2iOatp+S5iScsXG5cdHN0YXJ0U2FtZTogJ+S4uumTvuiHs+a2iOatp+S5iemhteeahOmTvuaOpea2iOatp+S5iScsXG5cdGNsb3NlOiAn5YWz6ZetJyxcblx0dW5kbzogJ+WkjeWOnycsXG5cdG9taXQ6ICfot7Pov4cnLFxuXHRyZWZyZXNoOiAn6YeN5paw5pW055CGJyxcblx0dGl0bGVBc1RleHQ6ICflhbblroPnm67moIcnLFxuXHRkaXNhbU5lZWRlZDogJ+agh+ekunt7ZG59fScsXG5cdGludGVudGlvbmFsTGluazogJ+acieaEj+mTvuWIsOa2iOatp+S5iemhteeahOmTvuaOpScsXG5cdHRpdGxlQXNUZXh0UHJvbXB0OiAn6K+36L6T5YWl5paw55qE6ZO+5o6l55uu5qCH77yaJyxcblx0cmVtb3ZlTGluazogJ+WOu+mZpOmTvuaOpScsXG5cdG9wdGlvbk1hcmtlcjogJyBb6ZO+5o6l5Yiw6L+Z6YeMXScsXG5cdHRhcmdldE9wdGlvbk1hcmtlcjogJyBb5b2T5YmN55uu5qCHXScsXG5cdHJlZGlyZWN0T3B0aW9uTWFya2VyOiAnIFvlvZPliY3nm67moIfvvIjph43lrprlkJHvvIldJyxcblx0cGFnZVRpdGxlTGluZTogJzxhIGhyZWY9XCIkMVwiPiQyPC9hPu+8micsXG5cdG5vTW9yZUxpbmtzOiAn5rKh5pyJ6ZyA6KaB5raI5q2n5LmJ55qE6ZO+5o6l5LqG44CCJyxcblx0cGVuZGluZ0VkaXRDb3VudGVyOiAn5bey5L+d5a2YJDHkuKrvvIzlt7LnvJbovpEkMuS4qicsXG5cdHBlbmRpbmdFZGl0Qm94OiAnRGlzYW1Bc3Npc3TmraPlnKjlgqjlrZjmgqjnmoTnvJbovpHvvIgkMe+8ieOAgicsXG5cdHBlbmRpbmdFZGl0Qm94VGltZUVzdGltYXRpb246ICckMe+8m+WJqeS9meaXtumXtO+8miQyJyxcblx0cGVuZGluZ0VkaXRCb3hMaW1pdGVkOlxuXHRcdCflnKjmiYDmnInmm7TmlLnkv53lrZjliY3vvIzor7fkuI3opoHlhbPpl63pobXpnaLvvJvkvaDlj6/ku6XlnKjlj6bkuIDkuKrpobXpnaLnvJbovpHmsYLpl7vnmb7np5HvvIzkvYbmmK/or7fli7/lkIzml7bkvb/nlKjlpJrkuKpEaXNhbUFzc2lzdOOAgicsXG5cdGVycm9yOiAn6ZSZ6K+v77yaJDEnLFxuXHRmZXRjaFJlZGlyZWN0c0Vycm9yOiAn6I635Y+W6YeN5a6a5ZCR5aSx6LSl77yaXCIkMVwiLicsXG5cdGdldEJhY2tsaW5rc0Vycm9yOiAn5LiL6L295Y+N5ZCR6ZO+5o6l5aSx6LSl77yaXCIkMVwiLicsXG5cdGZldGNoUmlnaHRzRXJyb3I6ICfojrflj5bnlKjmiLfmnYPpmZDlpLHotKXvvJpcIiQxXCIsJyxcblx0bG9hZFBhZ2VFcnJvcjogJ+WKoOi9vSQx5aSx6LSl77yaXCIkMlwiLicsXG5cdHNhdmVQYWdlRXJyb3I6ICfkv53lrZjoh7MkMeWksei0pe+8mlwiJDJcIi4nLFxuXHRkaXNtaXNzRXJyb3I6ICdEaXNtaXNzJyxcblx0cGVuZGluZzogJ0Rpc2FtQXNzaXN05bCa5pyJ5pyq5YKo5a2Y55qE57yW6L6R44CC5aaC5qyy5YKo5a2Y5LmL77yM6K+35oyJ4oCc5YWz6Zet4oCd44CCJyxcblx0ZWRpdEluUHJvZ3Jlc3M6ICdEaXNhbUFzc2lzdOato+WcqOi/m+ihjOe8lui+keOAguiLpeaCqOWwhuacrOWIhumhteWFs+mXre+8jOWPr+iDveS8muS4p+WkseaCqOeahOe8lui+keOAgicsXG5cdGVsbGlwc2lzOiAn4oCm4oCmJyxcblx0bm90aWZ5Q2hhcmFjdGVyOiAn4pyUJyxcblx0c3VtbWFyeTogJ+S9v+eUqFtbTWVkaWFXaWtpOkdhZGdldC1EaXNhbUFzc2lzdC5qc3xEaXNhbUFzc2lzdF1d5riF55CGW1tRVzpEQUJ85raI5q2n5LmJXV3pk77mjqXvvJpbWyQxXV3vvIgkMu+8ieOAgicsXG5cdHN1bW1hcnlDaGFuZ2VkOiAn5pS56ZO+5o6l6IezW1skMV1dJyxcblx0c3VtbWFyeU9taXR0ZWQ6ICfpk77mjqXlt7Lot7Pov4cnLFxuXHRzdW1tYXJ5UmVtb3ZlZDogJ+mTvuaOpeW3suenu+mZpCcsXG5cdHN1bW1hcnlJbnRlbnRpb25hbDogJ+WIu+aEj+mTvuaOpeiHs+a2iOatp+S5iemhtemdoicsXG5cdHN1bW1hcnlIZWxwTmVlZGVkOiAn6ZyA6KaB5biu5YqpJyxcblx0c3VtbWFyeVNlcGFyYXRvcjogJzsgJyxcblx0cmVkaXJlY3RTdW1tYXJ5OiAn5L2/55SoW1tNZWRpYVdpa2k6R2FkZ2V0LURpc2FtQXNzaXN0LmpzfERpc2FtQXNzaXN0XV3liJvlu7rnm67moIfkuLpbWyQxXV3nmoTph43lrprlkJHjgIInLFxufTtcblxuZXhwb3J0IHttZXNzYWdlc307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge2NmZ30gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHttZXNzYWdlc30gZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmxldCBzdGFydExpbms7XG5sZXQgdWk7XG5sZXQgbGlua3M7XG5sZXQgcGFnZUNoYW5nZXM7XG5sZXQgY3VycmVudFBhZ2VUaXRsZTtcbmxldCBjdXJyZW50UGFnZVBhcmFtZXRlcnM7XG5sZXQgY3VycmVudExpbms7XG5sZXQgcG9zc2libGVCYWNrbGlua0Rlc3RpbmF0aW9ucztcbmxldCBmb3JjZVNhbWVQYWdlID0gZmFsc2U7XG5sZXQgcnVubmluZyA9IGZhbHNlO1xubGV0IGNob29zaW5nID0gZmFsc2U7XG5sZXQgY2FuTWFya0ludGVudGlvbmFsTGlua3MgPSBmYWxzZTtcbmxldCBkaXNwbGF5ZWRQYWdlcyA9IHt9O1xubGV0IGVkaXRDb3VudCA9IDA7XG5sZXQgZWRpdExpbWl0O1xuY29uc3QgcGVuZGluZ1NhdmVzID0gW107XG5sZXQgcGVuZGluZ0VkaXRCb3g7XG5sZXQgcGVuZGluZ0VkaXRCb3hUZXh0O1xubGV0IGxhc3RFZGl0TWlsbGlzID0gMDtcbmxldCBydW5uaW5nU2F2ZXMgPSBmYWxzZTtcblxuLyogRW50cnkgcG9pbnQuIENoZWNrIHdoZXRoZXIgd2UgYXJlIGluIGEgZGlzYW1iaWd1YXRpb24gcGFnZS4gSWYgc28sIGFkZCBhIGxpbmsgdG8gc3RhcnQgdGhlIHRvb2wgKi9cbmNvbnN0IGluc3RhbGwgPSAoKSA9PiB7XG5cdGNvbnN0IHt3Z0FjdGlvbn0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdGlmICh3Z0FjdGlvbiAhPT0gJ3ZpZXcnIHx8ICFpc0Rpc2FtKCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0JCgoKSA9PiB7XG5cdFx0Y29uc3QgcG9ydGxldElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3AtY2FjdGlvbnMnKSA/ICdwLWNhY3Rpb25zJyA6ICdwLXRiJztcblx0XHQvLyBUaGlzIGlzIGEgXCIgKGRpc2FtYmlndWF0aW9uKVwiIHBhZ2Vcblx0XHRpZiAobmV3IFJlZ0V4cChjZmcuZGlzYW1SZWdFeHApLnRlc3QoZ2V0VGl0bGUoKSkpIHtcblx0XHRcdGNvbnN0IHN0YXJ0TWFpbkxpbmsgPSAkKFxuXHRcdFx0XHRtdy51dGlsLmFkZFBvcnRsZXRMaW5rKHBvcnRsZXRJZCwgJyMnLCBtZXNzYWdlcy5zdGFydE1haW4sICdjYS1kaXNhbWFzc2lzdC1tYWluJylcblx0XHRcdCkub24oJ2NsaWNrJywgc3RhcnRNYWluKTtcblx0XHRcdGNvbnN0IHN0YXJ0U2FtZUxpbmsgPSAkKFxuXHRcdFx0XHRtdy51dGlsLmFkZFBvcnRsZXRMaW5rKHBvcnRsZXRJZCwgJyMnLCBtZXNzYWdlcy5zdGFydFNhbWUsICdjYS1kaXNhbWFzc2lzdC1zYW1lJylcblx0XHRcdCkub24oJ2NsaWNrJywgc3RhcnRTYW1lKTtcblx0XHRcdHN0YXJ0TGluayA9IHN0YXJ0TWFpbkxpbmsuYWRkKHN0YXJ0U2FtZUxpbmspO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFydExpbmsgPSAkKG13LnV0aWwuYWRkUG9ydGxldExpbmsocG9ydGxldElkLCAnIycsIG1lc3NhZ2VzLnN0YXJ0LCAnY2EtZGlzYW1hc3Npc3QtcGFnZScpKS5vbihcblx0XHRcdFx0J2NsaWNrJyxcblx0XHRcdFx0c3RhcnRcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qIFN0YXJ0IHRoZSB0b29sLiBEaXNwbGF5IHRoZSBVSSBhbmQgYmVnaW4gbG9va2luZyBmb3IgbGlua3MgdG8gZml4ICovXG5jb25zdCBzdGFydCA9ICgpID0+IHtcblx0aWYgKHJ1bm5pbmcpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRydW5uaW5nID0gdHJ1ZTtcblx0bGlua3MgPSBbXTtcblx0cGFnZUNoYW5nZXMgPSBbXTtcblx0ZGlzcGxheWVkUGFnZXMgPSB7fTtcblx0ZW5zdXJlREFCRXhpc3RzKCkudGhlbigoY2FuTWFyaykgPT4ge1xuXHRcdGNhbk1hcmtJbnRlbnRpb25hbExpbmtzID0gY2FuTWFyaztcblx0XHRjcmVhdGVVSSgpO1xuXHRcdGFkZFVubG9hZENvbmZpcm0oKTtcblx0XHRtYXJrRGlzYW1PcHRpb25zKCk7XG5cdFx0Y2hlY2tFZGl0TGltaXQoKS50aGVuKCgpID0+IHtcblx0XHRcdHRvZ2dsZVBlbmRpbmdFZGl0Qm94KGZhbHNlKTtcblx0XHRcdGRvUGFnZSgpO1xuXHRcdH0pO1xuXHR9KTtcbn07XG5cbi8qIFN0YXJ0IERpc2FtQXNzaXN0LiBEaXNhbWJpZ3VhdGUgaW5jb21pbmcgbGlua3MgdG8gdGhlIGN1cnJlbnQgcGFnZSwgcmVnYXJkbGVzcyBvZiB0aGUgdGl0bGUuICovXG5jb25zdCBzdGFydFNhbWUgPSAoKSA9PiB7XG5cdGZvcmNlU2FtZVBhZ2UgPSB0cnVlO1xuXHRzdGFydCgpO1xufTtcblxuLyogU3RhcnQgRGlzYW1Bc3Npc3QuIElmIHRoZSBwYWdlIHRpdGxlIGVuZHMgd2l0aCBcIiAoZGlzYW1iaWd1YXRpb24pXCIsIGRpc2FtYmlndWF0ZSBsaW5rcyB0byB0aGUgcHJpbWFyeSB0b3BpYyBhcnRpY2xlLiBPdGhlcndpc2UsIGRpc2FtYmlndWF0ZSBsaW5rcyB0byB0aGUgY3VycmVudCBwYWdlLiAqL1xuY29uc3Qgc3RhcnRNYWluID0gKCkgPT4ge1xuXHRmb3JjZVNhbWVQYWdlID0gZmFsc2U7XG5cdHN0YXJ0KCk7XG59O1xuXG4vKiBDcmVhdGUgYW5kIHNob3cgdGhlIHVzZXIgaW50ZXJmYWNlLiAqL1xuY29uc3QgY3JlYXRlVUkgPSAoKSA9PiB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHR1aSA9IHtcblx0XHRkaXNwbGF5OiAkKCc8ZGl2PicpLmFkZENsYXNzKCdkaXNhbWFzc2lzdC1ib3ggZGlzYW1hc3Npc3QtbWFpbmJveCcpLFxuXHRcdGZpbmlzaGVkTWVzc2FnZTogJCgnPGRpdj4nKS50ZXh0KG1lc3NhZ2VzLm5vTW9yZUxpbmtzKS5oaWRlKCksXG5cdFx0cGFnZVRpdGxlTGluZTogJCgnPHNwYW4+JykuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LXBhZ2V0aXRsZWxpbmUnKSxcblx0XHRwZW5kaW5nRWRpdENvdW50ZXI6ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LWVkaXRjb3VudGVyJyksXG5cdFx0Y29udGV4dDogJCgnPHNwYW4+JykuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LWNvbnRleHQnKSxcblx0XHR1bmRvQnV0dG9uOiBjcmVhdGVCdXR0b24obWVzc2FnZXMudW5kbywgdW5kbyksXG5cdFx0b21pdEJ1dHRvbjogY3JlYXRlQnV0dG9uKG1lc3NhZ2VzLm9taXQsIG9taXQpLFxuXHRcdGVuZEJ1dHRvbjogY3JlYXRlQnV0dG9uKG1lc3NhZ2VzLmNsb3NlLCBzYXZlQW5kRW5kKSxcblx0XHRyZWZyZXNoQnV0dG9uOiBjcmVhdGVCdXR0b24obWVzc2FnZXMucmVmcmVzaCwgcmVmcmVzaCksXG5cdFx0dGl0bGVBc1RleHRCdXR0b246IGNyZWF0ZUJ1dHRvbihtZXNzYWdlcy50aXRsZUFzVGV4dCwgY2hvb3NlVGl0bGVGcm9tUHJvbXB0KSxcblx0XHRpbnRlbnRpb25hbExpbmtCdXR0b246IGNhbk1hcmtJbnRlbnRpb25hbExpbmtzXG5cdFx0XHQ/IGNyZWF0ZUJ1dHRvbihtZXNzYWdlcy5pbnRlbnRpb25hbExpbmssIGNob29zZUludGVudGlvbmFsTGluaylcblx0XHRcdDogJCgnPHNwYW4+JyksXG5cdFx0ZGlzYW1OZWVkZWRCdXR0b246IGNmZy5kaXNhbU5lZWRlZFRleHQgPyBjcmVhdGVCdXR0b24obWVzc2FnZXMuZGlzYW1OZWVkZWQsIGNob29zZURpc2FtTmVlZGVkKSA6ICQoJzxzcGFuPicpLFxuXHRcdHJlbW92ZUxpbmtCdXR0b246IGNyZWF0ZUJ1dHRvbihtZXNzYWdlcy5yZW1vdmVMaW5rLCBjaG9vc2VMaW5rUmVtb3ZhbCksXG5cdH07XG5cdGNvbnN0IHRvcCA9ICQoJzxkaXY+Jylcblx0XHQuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LXRvcCcpXG5cdFx0LmFwcGVuZChbdWkucGVuZGluZ0VkaXRDb3VudGVyLCB1aS5maW5pc2hlZE1lc3NhZ2UsIHVpLnBhZ2VUaXRsZUxpbmVdKTtcblx0Y29uc3QgbGVmdEJ1dHRvbnMgPSAkKCc8ZGl2PicpXG5cdFx0LmFkZENsYXNzKCdkaXNhbWFzc2lzdC1sZWZ0YnV0dG9ucycpXG5cdFx0LmFwcGVuZChbXG5cdFx0XHR1aS50aXRsZUFzVGV4dEJ1dHRvbixcblx0XHRcdHVpLnJlbW92ZUxpbmtCdXR0b24sXG5cdFx0XHR1aS5pbnRlbnRpb25hbExpbmtCdXR0b24sXG5cdFx0XHR1aS5kaXNhbU5lZWRlZEJ1dHRvbixcblx0XHRcdHVpLm9taXRCdXR0b24sXG5cdFx0XSk7XG5cdGNvbnN0IHJpZ2h0QnV0dG9ucyA9ICQoJzxkaXY+Jylcblx0XHQuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LXJpZ2h0YnV0dG9ucycpXG5cdFx0LmFwcGVuZChbdWkudW5kb0J1dHRvbiwgdWkucmVmcmVzaEJ1dHRvbiwgdWkuZW5kQnV0dG9uXSk7XG5cdGNvbnN0IGFsbEJ1dHRvbnMgPSAkKCc8ZGl2PicpLmFkZENsYXNzKCdkaXNhbWFzc2lzdC1hbGxidXR0b25zJykuYXBwZW5kKFtsZWZ0QnV0dG9ucywgcmlnaHRCdXR0b25zXSk7XG5cdHVpLmRpc3BsYXkuYXBwZW5kKFt0b3AsIHVpLmNvbnRleHQsIGFsbEJ1dHRvbnNdKTtcblx0dXBkYXRlRWRpdENvdW50ZXIoKTtcblx0dG9nZ2xlQWN0aW9uQnV0dG9ucyhmYWxzZSk7XG5cdC8vIEluc2VydCB0aGUgVUkgaW4gdGhlIHBhZ2Vcblx0JGJvZHkuZmluZCgnI213LWNvbnRlbnQtdGV4dCcpLmJlZm9yZSh1aS5kaXNwbGF5KTtcblx0dWkuZGlzcGxheS5oaWRlKCkuZmFkZUluKCk7XG59O1xuXG4vKiBJZiB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzLCBzaG93IGEgY29uZmlybSBkaWFsb2cgYmVmb3JlIGNsb3NpbmcgKi9cbmNvbnN0IGFkZFVubG9hZENvbmZpcm0gPSAoKSA9PiB7XG5cdCQod2luZG93KS5vbignYmVmb3JldW5sb2FkJywgKCkgPT4ge1xuXHRcdGlmIChydW5uaW5nICYmIGNoZWNrQWN0dWFsQ2hhbmdlcygpKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZXMucGVuZGluZztcblx0XHR9IGVsc2UgaWYgKGVkaXRDb3VudCAhPT0gMCkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLmVkaXRJblByb2dyZXNzO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKiBNYXJrIHRoZSBkaXNhbWJpZ3VhdGlvbiBvcHRpb25zIGFzIHN1Y2ggKi9cbmNvbnN0IG1hcmtEaXNhbU9wdGlvbnMgPSAoKSA9PiB7XG5cdGNvbnN0IG9wdGlvblBhZ2VUaXRsZXMgPSBbXTtcblx0Y29uc3Qgb3B0aW9uTWFya2VycyA9IFtdO1xuXHRnZXREaXNhbU9wdGlvbnMoKS5lYWNoKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBsaW5rID0gJChlbGVtZW50KTtcblx0XHRjb25zdCB0aXRsZSA9IGV4dHJhY3RQYWdlTmFtZShsaW5rKTtcblx0XHRjb25zdCBvcHRpb25NYXJrZXIgPSAkKCc8YT4nKVxuXHRcdFx0LmF0dHIoJ2hyZWYnLCAnIycpXG5cdFx0XHQuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LW9wdGlvbm1hcmtlcicpXG5cdFx0XHQudGV4dChtZXNzYWdlcy5vcHRpb25NYXJrZXIpXG5cdFx0XHQub24oJ2NsaWNrJywgKGV2KSA9PiB7XG5cdFx0XHRcdGV2LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGNob29zZVJlcGxhY2VtZW50KHRpdGxlKTtcblx0XHRcdH0pO1xuXHRcdGxpbmsuYWZ0ZXIob3B0aW9uTWFya2VyKTtcblx0XHRvcHRpb25NYXJrZXJzW29wdGlvbk1hcmtlcnMubGVuZ3RoXSA9IG9wdGlvbk1hcmtlcjtcblx0XHRvcHRpb25QYWdlVGl0bGVzW29wdGlvblBhZ2VUaXRsZXMubGVuZ3RoXSA9IHRpdGxlO1xuXHR9KTtcblx0Ly8gTm93IGNoZWNrIHRoZSBkaXNhbWJpZ3VhdGlvbiBvcHRpb25zIGFuZCBkaXNwbGF5IGEgZGlmZmVyZW50IG1lc3NhZ2UgZm9yIHRob3NlIHRoYXQgYXJlXG5cdC8vIGFjdHVhbGx5IHRoZSBzYW1lIGFzIHRoZSB0YXJnZXQgcGFnZSB3aGVyZSB0aGUgbGlua3MgZ28sIGFzIGNob29zaW5nIHRob3NlIG9wdGlvbnMgZG9lc24ndCByZWFsbHlcblx0Ly8gYWNjb21wbGlzaCBhbnl0aGluZyAoZXhjZXB0IGJ5cGFzc2luZyByZWRpcmVjdHMsIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bCBpbiBzb21lIGNhc2VzKVxuXHRjb25zdCB0YXJnZXRQYWdlID0gZ2V0VGFyZ2V0UGFnZSgpO1xuXHRmZXRjaFJlZGlyZWN0cyhbLi4ub3B0aW9uUGFnZVRpdGxlcywgLi4udGFyZ2V0UGFnZV0pXG5cdFx0LmRvbmUoKHJlZGlyZWN0cykgPT4ge1xuXHRcdFx0Y29uc3QgZW5kVGFyZ2V0UGFnZSA9IHJlc29sdmVSZWRpcmVjdCh0YXJnZXRQYWdlLCByZWRpcmVjdHMpO1xuXHRcdFx0Zm9yIChjb25zdCBbaWksIG9wdGlvblBhZ2VUaXRsZV0gb2Ygb3B0aW9uUGFnZVRpdGxlcy5lbnRyaWVzKCkpIHtcblx0XHRcdFx0Y29uc3QgZW5kT3B0aW9uVGl0bGUgPSByZXNvbHZlUmVkaXJlY3Qob3B0aW9uUGFnZVRpdGxlLCByZWRpcmVjdHMpO1xuXHRcdFx0XHRpZiAoaXNTYW1lUGFnZShvcHRpb25QYWdlVGl0bGUsIHRhcmdldFBhZ2UpKSB7XG5cdFx0XHRcdFx0b3B0aW9uTWFya2Vyc1tpaV0udGV4dChtZXNzYWdlcy50YXJnZXRPcHRpb25NYXJrZXIpLmFkZENsYXNzKCdkaXNhbWFzc2lzdC1jdXJyb3B0aW9ubWFya2VyJyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNTYW1lUGFnZShlbmRPcHRpb25UaXRsZSwgZW5kVGFyZ2V0UGFnZSkpIHtcblx0XHRcdFx0XHRvcHRpb25NYXJrZXJzW2lpXS50ZXh0KG1lc3NhZ2VzLnJlZGlyZWN0T3B0aW9uTWFya2VyKS5hZGRDbGFzcygnZGlzYW1hc3Npc3QtY3Vycm9wdGlvbm1hcmtlcicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuZmFpbChlcnJvcik7XG59O1xuXG4vKiBDaGVjayB3aGV0aGVyIGludGVudGlvbmFsIGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VzIGNhbiBiZSBleHBsaWNpdGx5IG1hcmtlZC8qICogYXMgc3VjaCBpbiB0aGlzIHdpa2kuIElmIHNvLCBlbnN1cmUgdGhhdCBhIFwiRm9vIChkaXNhbWJpZ3VhdGlvbilcIiBwYWdlIGV4aXN0cy4vKiAqIFJldHVybnMgYSBqUXVlcnkgcHJvbWlzZSAqL1xuY29uc3QgZW5zdXJlREFCRXhpc3RzID0gKCkgPT4ge1xuXHRjb25zdCBkZWZlcnJlZCA9IG5ldyAkLkRlZmVycmVkKCk7XG5cdGNvbnN0IHRpdGxlID0gZ2V0VGl0bGUoKTtcblx0Ly8gVGhhdCBjb25jZXB0IGRvZXNuJ3QgZXhpc3QgaW4gdGhpcyB3aWtpLlxuXHRpZiAoIWNmZy5pbnRlbnRpb25hbExpbmtPcHRpb24pIHtcblx0XHRkZWZlcnJlZC5yZXNvbHZlKGZhbHNlKTtcblx0XHQvLyBcIkZvbyAoZGlzYW1iaWd1YXRpb24pXCIgZXhpc3RzOiBpdCdzIHRoZSBjdXJyZW50IHBhZ2UuXG5cdH0gZWxzZSBpZiAobmV3IFJlZ0V4cChjZmcuZGlzYW1SZWdFeHApLmV4ZWModGl0bGUpKSB7XG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBkaXNhbVRpdGxlID0gY2ZnLmRpc2FtRm9ybWF0LnJlcGxhY2UoJyQxJywgdGl0bGUpO1xuXHRcdGxvYWRQYWdlKGRpc2FtVGl0bGUpXG5cdFx0XHQuZG9uZSgocGFnZSkgPT4ge1xuXHRcdFx0XHQvLyBcIkZvbyAoZGlzYW1iaWd1YXRpb24pXCIgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0aWYgKHBhZ2UubWlzc2luZykge1xuXHRcdFx0XHRcdC8vIFdlIHRyeSB0byBjcmVhdGUgaXRcblx0XHRcdFx0XHRwYWdlLmNvbnRlbnQgPSBjZmcucmVkaXJlY3RUb0Rpc2FtLnJlcGxhY2UoJyQxJywgdGl0bGUpO1xuXHRcdFx0XHRcdGNvbnN0IHN1bW1hcnkgPSBtZXNzYWdlcy5yZWRpcmVjdFN1bW1hcnkucmVwbGFjZSgnJDEnLCB0aXRsZSk7XG5cdFx0XHRcdFx0c2F2ZVBhZ2UoZGlzYW1UaXRsZSwgcGFnZSwgc3VtbWFyeSwgZmFsc2UsIHRydWUpXG5cdFx0XHRcdFx0XHQuZG9uZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0LmZhaWwoKGRlc2NyaXB0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGVycm9yKGRlc2NyaXB0aW9uKTtcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBJdCBkb2VzIGV4aXN0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5mYWlsKChkZXNjcmlwdGlvbikgPT4ge1xuXHRcdFx0XHRlcnJvcihkZXNjcmlwdGlvbik7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fSk7XG5cdH1cblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbi8qIENoZWNrIHdoZXRoZXIgdGhlIGVkaXQgY29vbGRvd24gYXBwbGllcyBhbmQgc2V0cyBlZGl0TGltaXQgYWNjb3JkaW5nbHkuLyogKiBSZXR1cm5zIGEgalF1ZXJ5IHByb21pc2UgKi9cbmNvbnN0IGNoZWNrRWRpdExpbWl0ID0gKCkgPT4ge1xuXHRjb25zdCBkZWZlcnJlZCA9IG5ldyAkLkRlZmVycmVkKCk7XG5cdGlmIChjZmcuZWRpdENvb2xkb3duIDw9IDApIHtcblx0XHRlZGl0TGltaXQgPSBmYWxzZTtcblx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0ZmV0Y2hSaWdodHMoKVxuXHRcdFx0LmRvbmUoKHJpZ2h0cykgPT4ge1xuXHRcdFx0XHRlZGl0TGltaXQgPSAhcmlnaHRzLmluY2x1ZGVzKCdib3QnKTtcblx0XHRcdH0pXG5cdFx0XHQuZmFpbCgoZGVzY3JpcHRpb24pID0+IHtcblx0XHRcdFx0ZXJyb3IoZGVzY3JpcHRpb24pO1xuXHRcdFx0XHRlZGl0TGltaXQgPSB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5hbHdheXMoKCkgPT4ge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cdFx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxuLyogRmluZCBhbmQgYXNrIHRoZSB1c2VyIHRvIGZpeCBhbGwgdGhlIGluY29taW5nIGxpbmtzIHRvIHRoZSBkaXNhbWJpZ3VhdGlvbiAoXCJ0YXJnZXRcIikvKiAqIHBhZ2UgZnJvbSBhIHNpbmdsZSBcIm9yaWdpblwiIHBhZ2UgKi9cbmNvbnN0IGRvUGFnZSA9ICgpID0+IHtcblx0aWYgKHBhZ2VDaGFuZ2VzLmxlbmd0aCA+IGNmZy5oaXN0b3J5U2l6ZSkge1xuXHRcdGFwcGx5Q2hhbmdlKHBhZ2VDaGFuZ2VzLnNoaWZ0KCkpO1xuXHR9XG5cdGlmIChsaW5rcy5sZW5ndGgpIHtcblx0XHRjdXJyZW50UGFnZVRpdGxlID0gbGlua3Muc2hpZnQoKTtcblx0XHRkaXNwbGF5ZWRQYWdlc1tjdXJyZW50UGFnZVRpdGxlXSA9IHRydWU7XG5cdFx0dG9nZ2xlQWN0aW9uQnV0dG9ucyhmYWxzZSk7XG5cdFx0bG9hZFBhZ2UoY3VycmVudFBhZ2VUaXRsZSlcblx0XHRcdC5kb25lKChkYXRhKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRQYWdlUGFyYW1ldGVycyA9IGRhdGE7XG5cdFx0XHRcdGN1cnJlbnRMaW5rID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRkb0xpbmsoKTtcblx0XHRcdH0pXG5cdFx0XHQuZmFpbChlcnJvcik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgdGFyZ2V0UGFnZSA9IGdldFRhcmdldFBhZ2UoKTtcblx0XHRnZXRCYWNrbGlua3ModGFyZ2V0UGFnZSlcblx0XHRcdC5kb25lKChiYWNrbGlua3MsIHBhZ2VUaXRsZXMpID0+IHtcblx0XHRcdFx0Y29uc3QgcGVuZGluZyA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHBlbmRpbmdTYXZlcykge1xuXHRcdFx0XHRcdHBlbmRpbmdbZWxbMF1dID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwb3NzaWJsZUJhY2tsaW5rRGVzdGluYXRpb25zID0gcGFnZVRpdGxlcy5maWx0ZXIoKHQpID0+IHtcblx0XHRcdFx0XHRpZiAodCA9PT0gdGFyZ2V0UGFnZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZW1vdmVEaXNhbSh0KSAhPT0gdGFyZ2V0UGFnZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIE9ubHkgaW5jb21pbmcgbGlua3MgZnJvbSBwYWdlcyB3ZSBoYXZlbid0IHNlZW4geWV0IGFuZCB3ZSBhcmVuJ3QgY3VycmVudGx5XG5cdFx0XHRcdC8vIHNhdmluZyAoZGlzcGxheWVkUGFnZXMgaXMgcmVzZXQgd2hlbiB0aGUgdG9vbCBpcyBjbG9zZWQgYW5kIG9wZW5lZCBhZ2Fpbixcblx0XHRcdFx0Ly8gd2hpbGUgdGhlIGxpc3Qgb2YgcGVuZGluZyBjaGFuZ2VzIGlzbid0OyBpZiB0aGUgZWRpdCBjb29sZG93biBpcyBkaXNhYmxlZCxcblx0XHRcdFx0Ly8gaXQgd2lsbCBiZSBlbXB0eSlcblx0XHRcdFx0bGlua3MgPSBiYWNrbGlua3MuZmlsdGVyKChlbCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAhZGlzcGxheWVkUGFnZXNbZWxdICYmICFwZW5kaW5nW2VsXTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChsaW5rcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRkb1BhZ2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1cGRhdGVDb250ZXh0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZmFpbChlcnJvcik7XG5cdH1cbn07XG5cbi8qIEZpbmQgYW5kIGFzayB0aGUgdXNlciB0byBmaXggYSBzaW5nbGUgaW5jb21pbmcgbGluayB0byB0aGUgZGlzYW1iaWd1YXRpb24gKFwidGFyZ2V0XCIpLyogKiBwYWdlICovXG5jb25zdCBkb0xpbmsgPSAoKSA9PiB7XG5cdGN1cnJlbnRMaW5rID0gZXh0cmFjdExpbmtUb1BhZ2UoXG5cdFx0Y3VycmVudFBhZ2VQYXJhbWV0ZXJzLmNvbnRlbnQsXG5cdFx0cG9zc2libGVCYWNrbGlua0Rlc3RpbmF0aW9ucyxcblx0XHRjdXJyZW50TGluayA/IGN1cnJlbnRMaW5rLmVuZCA6IDBcblx0KTtcblx0aWYgKGN1cnJlbnRMaW5rKSB7XG5cdFx0dXBkYXRlQ29udGV4dCgpO1xuXHR9IGVsc2Uge1xuXHRcdGRvUGFnZSgpO1xuXHR9XG59O1xuXG4vKiBSZXBsYWNlIHRoZSB0YXJnZXQgb2YgYSBsaW5rIHdpdGggYSBkaWZmZXJlbnQgb25lLyogKiBwYWdlVGl0bGU6IE5ldyBsaW5rIHRhcmdldC8qICogZXh0cmE6IEFkZGl0aW9uYWwgdGV4dCBhZnRlciB0aGUgbGluayAob3B0aW9uYWwpLyogKiBzdW1tYXJ5OiBDaGFuZ2Ugc3VtbWFyeSAob3B0aW9uYWwpICovXG5jb25zdCBjaG9vc2VSZXBsYWNlbWVudCA9IChwYWdlVGl0bGUsIGV4dHJhLCBzdW1tYXJ5KSA9PiB7XG5cdGlmIChjaG9vc2luZykge1xuXHRcdGNob29zaW5nID0gZmFsc2U7XG5cdFx0c3VtbWFyeSB8fD0gcGFnZVRpdGxlID8gbWVzc2FnZXMuc3VtbWFyeUNoYW5nZWQucmVwbGFjZSgnJDEnLCBwYWdlVGl0bGUpIDogbWVzc2FnZXMuc3VtbWFyeU9taXR0ZWQ7XG5cdFx0YWRkQ2hhbmdlKGN1cnJlbnRQYWdlVGl0bGUsIGN1cnJlbnRQYWdlUGFyYW1ldGVycywgY3VycmVudFBhZ2VQYXJhbWV0ZXJzLmNvbnRlbnQsIGN1cnJlbnRMaW5rLCBzdW1tYXJ5KTtcblx0XHRpZiAocGFnZVRpdGxlICYmIChwYWdlVGl0bGUgIT09IGdldFRhcmdldFBhZ2UoKSB8fCBleHRyYSkpIHtcblx0XHRcdGN1cnJlbnRQYWdlUGFyYW1ldGVycy5jb250ZW50ID0gcmVwbGFjZUxpbmsoXG5cdFx0XHRcdGN1cnJlbnRQYWdlUGFyYW1ldGVycy5jb250ZW50LFxuXHRcdFx0XHRwYWdlVGl0bGUsXG5cdFx0XHRcdGN1cnJlbnRMaW5rLFxuXHRcdFx0XHRleHRyYSB8fCAnJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0ZG9MaW5rKCk7XG5cdH1cbn07XG5cbi8qIFJlcGxhY2UgdGhlIGxpbmsgd2l0aCBhbiBleHBsaWNpdCBsaW5rIHRvIHRoZSBkaXNhbWJpZ3VhdGlvbiBwYWdlICovXG5jb25zdCBjaG9vc2VJbnRlbnRpb25hbExpbmsgPSAoKSA9PiB7XG5cdGNvbnN0IGRpc2FtVGl0bGUgPSBjZmcuZGlzYW1Gb3JtYXQucmVwbGFjZSgnJDEnLCBnZXRUYXJnZXRQYWdlKCkpO1xuXHRjaG9vc2VSZXBsYWNlbWVudChkaXNhbVRpdGxlLCAnJywgbWVzc2FnZXMuc3VtbWFyeUludGVudGlvbmFsKTtcbn07XG5cbi8qIFByb21wdCBmb3IgYW4gYWx0ZXJuYXRpdmUgbGluayB0YXJnZXQgYW5kIHVzZSBpdCBhcyBhIHJlcGxhY2VtZW50ICovXG5jb25zdCBjaG9vc2VUaXRsZUZyb21Qcm9tcHQgPSAoKSA9PiB7XG5cdGNvbnN0IHRpdGxlID0gcHJvbXB0KG1lc3NhZ2VzLnRpdGxlQXNUZXh0UHJvbXB0KTtcblx0aWYgKHRpdGxlICE9PSBudWxsKSB7XG5cdFx0Y2hvb3NlUmVwbGFjZW1lbnQodGl0bGUpO1xuXHR9XG59O1xuXG4vKiBSZW1vdmUgdGhlIGN1cnJlbnQgbGluaywgbGVhdmluZyB0aGUgdGV4dCB1bmNoYW5nZWQgKi9cbmNvbnN0IGNob29zZUxpbmtSZW1vdmFsID0gKCkgPT4ge1xuXHRpZiAoY2hvb3NpbmcpIHtcblx0XHRjb25zdCBzdW1tYXJ5ID0gbWVzc2FnZXMuc3VtbWFyeVJlbW92ZWQ7XG5cdFx0YWRkQ2hhbmdlKGN1cnJlbnRQYWdlVGl0bGUsIGN1cnJlbnRQYWdlUGFyYW1ldGVycywgY3VycmVudFBhZ2VQYXJhbWV0ZXJzLmNvbnRlbnQsIGN1cnJlbnRMaW5rLCBzdW1tYXJ5KTtcblx0XHRjdXJyZW50UGFnZVBhcmFtZXRlcnMuY29udGVudCA9IHJlbW92ZUxpbmsoY3VycmVudFBhZ2VQYXJhbWV0ZXJzLmNvbnRlbnQsIGN1cnJlbnRMaW5rKTtcblx0XHRkb0xpbmsoKTtcblx0fVxufTtcblxuLyogQWRkIGEgXCJkaXNhbWJpZ3VhdGlvbiBuZWVkZWRcIiB0ZW1wbGF0ZSBhZnRlciB0aGUgbGluayAqL1xuY29uc3QgY2hvb3NlRGlzYW1OZWVkZWQgPSAoKSA9PiB7XG5cdGNob29zZVJlcGxhY2VtZW50KGN1cnJlbnRMaW5rLnRpdGxlLCBjZmcuZGlzYW1OZWVkZWRUZXh0LCBtZXNzYWdlcy5zdW1tYXJ5SGVscE5lZWRlZCk7XG59O1xuXG4vKiBVbmRvIHRoZSBsYXN0IGNoYW5nZSAqL1xuY29uc3QgdW5kbyA9ICgpID0+IHtcblx0aWYgKHBhZ2VDaGFuZ2VzLmxlbmd0aCkge1xuXHRcdGNvbnN0IGxhc3RQYWdlID0gcGFnZUNoYW5nZXMuYXQoLTEpO1xuXHRcdGlmIChjdXJyZW50UGFnZVRpdGxlICE9PSBsYXN0UGFnZS50aXRsZSkge1xuXHRcdFx0bGlua3MudW5zaGlmdChjdXJyZW50UGFnZVRpdGxlKTtcblx0XHRcdGN1cnJlbnRQYWdlVGl0bGUgPSBsYXN0UGFnZS50aXRsZTtcblx0XHR9XG5cdFx0Y3VycmVudFBhZ2VQYXJhbWV0ZXJzID0gbGFzdFBhZ2UucGFnZTtcblx0XHRjdXJyZW50UGFnZVBhcmFtZXRlcnMuY29udGVudCA9IGxhc3RQYWdlLmNvbnRlbnRCZWZvcmUucG9wKCk7XG5cdFx0Y3VycmVudExpbmsgPSBsYXN0UGFnZS5saW5rcy5wb3AoKTtcblx0XHRsYXN0UGFnZS5zdW1tYXJ5LnBvcCgpO1xuXHRcdGlmICghbGFzdFBhZ2UuY29udGVudEJlZm9yZS5sZW5ndGgpIHtcblx0XHRcdHBhZ2VDaGFuZ2VzLnBvcCgpO1xuXHRcdH1cblx0XHR1cGRhdGVDb250ZXh0KCk7XG5cdH1cbn07XG5cbi8qIE9taXQgdGhlIGN1cnJlbnQgbGluayB3aXRob3V0IG1ha2luZyBhIGNoYW5nZSAqL1xuY29uc3Qgb21pdCA9ICgpID0+IHtcblx0Y2hvb3NlUmVwbGFjZW1lbnQoKTtcbn07XG5cbi8qIFNhdmUgYWxsIHRoZSBwZW5kaW5nIGNoYW5nZXMgYW5kIHJlc3RhcnQgdGhlIHRvb2wuICovXG5jb25zdCByZWZyZXNoID0gKCkgPT4ge1xuXHRzYXZlQW5kRW5kKCk7XG5cdHN0YXJ0KCk7XG59O1xuXG4vKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgYnV0dG9ucyB0aGF0IGNhbiBwZXJmb3JtIGFjdGlvbnMgb24gYSBwYWdlIG9yIGNoYW5nZSB0aGUgY3VycmVudCBsaW5rLi8qICogZW5hYmxlZDogV2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgYnV0dG9ucyAqL1xuY29uc3QgdG9nZ2xlQWN0aW9uQnV0dG9ucyA9IChlbmFibGVkKSA9PiB7XG5cdGNvbnN0IGFmZmVjdGVkQnV0dG9ucyA9IFtcblx0XHR1aS5vbWl0QnV0dG9uLFxuXHRcdHVpLnRpdGxlQXNUZXh0QnV0dG9uLFxuXHRcdHVpLnJlbW92ZUxpbmtCdXR0b24sXG5cdFx0dWkuaW50ZW50aW9uYWxMaW5rQnV0dG9uLFxuXHRcdHVpLmRpc2FtTmVlZGVkQnV0dG9uLFxuXHRcdHVpLnVuZG9CdXR0b24sXG5cdF07XG5cdGZvciAoY29uc3QgYnV0dG9uIG9mIGFmZmVjdGVkQnV0dG9ucykge1xuXHRcdGJ1dHRvbi5wcm9wKCdkaXNhYmxlZCcsICFlbmFibGVkKTtcblx0fVxufTtcblxuLyogU2hvdyBvciBoaWRlIHRoZSAnbm8gbW9yZSBsaW5rcycgbWVzc2FnZS8qICogc2hvdzogV2hldGhlciB0byBzaG93IG9yIGhpZGUgdGhlIG1lc3NhZ2UgKi9cbmNvbnN0IHRvZ2dsZUZpbmlzaGVkTWVzc2FnZSA9IChzaG93KSA9PiB7XG5cdHRvZ2dsZUFjdGlvbkJ1dHRvbnMoIXNob3cpO1xuXHR1aS51bmRvQnV0dG9uLnByb3AoJ2Rpc2FibGVkJywgIXBhZ2VDaGFuZ2VzLmxlbmd0aCk7XG5cdHVpLmZpbmlzaGVkTWVzc2FnZS50b2dnbGUoc2hvdyk7XG5cdHVpLnBhZ2VUaXRsZUxpbmUudG9nZ2xlKCFzaG93KTtcblx0dWkuY29udGV4dC50b2dnbGUoIXNob3cpO1xufTtcblxuY29uc3QgdG9nZ2xlUGVuZGluZ0VkaXRCb3ggPSAoc2hvdykgPT4ge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0aWYgKCFwZW5kaW5nRWRpdEJveCkge1xuXHRcdHBlbmRpbmdFZGl0Qm94ID0gJCgnPGRpdj4nKS5hZGRDbGFzcygnZGlzYW1hc3Npc3QtYm94IGRpc2FtYXNzaXN0LXBlbmRpbmdlZGl0Ym94Jyk7XG5cdFx0cGVuZGluZ0VkaXRCb3hUZXh0ID0gJCgnPGRpdj4nKTtcblx0XHRwZW5kaW5nRWRpdEJveC5hcHBlbmQocGVuZGluZ0VkaXRCb3hUZXh0KS5oaWRlKCk7XG5cdFx0aWYgKGVkaXRMaW1pdCkge1xuXHRcdFx0cGVuZGluZ0VkaXRCb3guYXBwZW5kKCQoJzxkaXY+JykudGV4dChtZXNzYWdlcy5wZW5kaW5nRWRpdEJveExpbWl0ZWQpLmFkZENsYXNzKCdkaXNhbWFzc2lzdC1zdWJ0aXRsZScpKTtcblx0XHR9XG5cdFx0JGJvZHkuZmluZCgnI213LWNvbnRlbnQtdGV4dCcpLmJlZm9yZShwZW5kaW5nRWRpdEJveCk7XG5cdFx0dXBkYXRlRWRpdENvdW50ZXIoKTtcblx0fVxuXHRpZiAoc2hvdykge1xuXHRcdHBlbmRpbmdFZGl0Qm94LmZhZGVJbigpO1xuXHR9IGVsc2Uge1xuXHRcdHBlbmRpbmdFZGl0Qm94LmZhZGVPdXQoKTtcblx0fVxufTtcblxuY29uc3Qgbm90aWZ5Q29tcGxldGlvbiA9ICgpID0+IHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdGNvbnN0IG9sZFRpdGxlID0gZG9jdW1lbnQudGl0bGU7XG5cdGRvY3VtZW50LnRpdGxlID0gbWVzc2FnZXMubm90aWZ5Q2hhcmFjdGVyICsgZG9jdW1lbnQudGl0bGU7XG5cdCRib2R5Lm9uZSgnbW91c2Vtb3ZlJywgKCkgPT4ge1xuXHRcdGRvY3VtZW50LnRpdGxlID0gb2xkVGl0bGU7XG5cdH0pO1xufTtcblxuLyogVXBkYXRlIHRoZSBkaXNwbGF5ZWQgaW5mb3JtYXRpb24gdG8gbWF0Y2ggdGhlIGN1cnJlbnQgbGluay8qICogb3IgbGFjayB0aGVyZW9mICovXG5jb25zdCB1cGRhdGVDb250ZXh0ID0gKCkgPT4ge1xuXHR1cGRhdGVFZGl0Q291bnRlcigpO1xuXHRpZiAoY3VycmVudExpbmspIHtcblx0XHR1aS5wYWdlVGl0bGVMaW5lLmh0bWwoXG5cdFx0XHRtZXNzYWdlcy5wYWdlVGl0bGVMaW5lXG5cdFx0XHRcdC5yZXBsYWNlKFxuXHRcdFx0XHRcdCckMScsXG5cdFx0XHRcdFx0bXcudXRpbC5nZXRVcmwoY3VycmVudFBhZ2VUaXRsZSwge1xuXHRcdFx0XHRcdFx0cmVkaXJlY3Q6ICdubycsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KVxuXHRcdFx0XHQucmVwbGFjZSgnJDInLCBtdy5odG1sLmVzY2FwZShjdXJyZW50UGFnZVRpdGxlKSlcblx0XHQpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBleHRyYWN0Q29udGV4dChjdXJyZW50UGFnZVBhcmFtZXRlcnMuY29udGVudCwgY3VycmVudExpbmspO1xuXHRcdHVpLmNvbnRleHRcblx0XHRcdC5lbXB0eSgpXG5cdFx0XHQuYXBwZW5kKCQoJzxzcGFuPicpLnRleHQoY29udGV4dFswXSkpXG5cdFx0XHQuYXBwZW5kKCQoJzxzcGFuPicpLnRleHQoY29udGV4dFsxXSkuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LWluY2xpbmsnKSlcblx0XHRcdC5hcHBlbmQoJCgnPHNwYW4+JykudGV4dChjb250ZXh0WzJdKSk7XG5cdFx0Y29uc3QgbnVtTGluZXMgPSBNYXRoLmNlaWwodWkuY29udGV4dC5oZWlnaHQoKSAvIE51bWJlci5wYXJzZUZsb2F0KHVpLmNvbnRleHQuY3NzKCdsaW5lLWhlaWdodCcpKSk7XG5cdFx0aWYgKG51bUxpbmVzIDwgY2ZnLm51bUNvbnRleHRMaW5lcykge1xuXHRcdFx0Ly8gQWRkIGNmZy5udW1Db250ZXh0TGluZXMgLSBudW1MaW5lcyArIDEgbGluZSBicmVha3MsIHNvIHRoYXQgdGhlIHRvdGFsIG51bWJlclxuXHRcdFx0Ly8gb2YgbGluZXMgaXMgY2ZnLm51bUNvbnRleHRMaW5lc1xuXHRcdFx0dWkuY29udGV4dC5hcHBlbmQoXG5cdFx0XHRcdEFycmF5LmZyb20oe1xuXHRcdFx0XHRcdGxlbmd0aDogY2ZnLm51bUNvbnRleHRMaW5lcyAtIG51bUxpbmVzICsgMixcblx0XHRcdFx0fSkuam9pbignPGJyPicpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR0b2dnbGVGaW5pc2hlZE1lc3NhZ2UoZmFsc2UpO1xuXHRcdHVpLnVuZG9CdXR0b24ucHJvcCgnZGlzYWJsZWQnLCAhcGFnZUNoYW5nZXMubGVuZ3RoKTtcblx0XHR1aS5yZW1vdmVMaW5rQnV0dG9uLnByb3AoJ2Rpc2FibGVkJywgY3VycmVudFBhZ2VQYXJhbWV0ZXJzLnJlZGlyZWN0KTtcblx0XHR1aS5pbnRlbnRpb25hbExpbmtCdXR0b24ucHJvcCgnZGlzYWJsZWQnLCBjdXJyZW50UGFnZVBhcmFtZXRlcnMucmVkaXJlY3QpO1xuXHRcdHVpLmRpc2FtTmVlZGVkQnV0dG9uLnByb3AoJ2Rpc2FibGVkJywgY3VycmVudFBhZ2VQYXJhbWV0ZXJzLnJlZGlyZWN0IHx8IGN1cnJlbnRMaW5rLmhhc0Rpc2FtVGVtcGxhdGUpO1xuXHRcdGNob29zaW5nID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHR0b2dnbGVGaW5pc2hlZE1lc3NhZ2UodHJ1ZSk7XG5cdH1cbn07XG5cbi8qIFVwZGF0ZSB0aGUgY291bnQgb2YgcGVuZGluZyBjaGFuZ2VzICovXG5jb25zdCB1cGRhdGVFZGl0Q291bnRlciA9ICgpID0+IHtcblx0aWYgKHVpLnBlbmRpbmdFZGl0Q291bnRlcikge1xuXHRcdHVpLnBlbmRpbmdFZGl0Q291bnRlci50ZXh0KFxuXHRcdFx0bWVzc2FnZXMucGVuZGluZ0VkaXRDb3VudGVyLnJlcGxhY2UoJyQxJywgZWRpdENvdW50KS5yZXBsYWNlKCckMicsIGNvdW50QWN0dWFsbHlDaGFuZ2VkRnVsbHlDaGVja2VkUGFnZXMoKSlcblx0XHQpO1xuXHR9XG5cdGlmIChwZW5kaW5nRWRpdEJveCkge1xuXHRcdGlmIChlZGl0Q291bnQgPT09IDAgJiYgIXJ1bm5pbmcpIHtcblx0XHRcdHRvZ2dsZVBlbmRpbmdFZGl0Qm94KGZhbHNlKTtcblx0XHRcdG5vdGlmeUNvbXBsZXRpb24oKTtcblx0XHR9XG5cdFx0bGV0IHRleHRDb250ZW50ID0gZWRpdENvdW50O1xuXHRcdGlmIChlZGl0TGltaXQpIHtcblx0XHRcdHRleHRDb250ZW50ID0gbWVzc2FnZXMucGVuZGluZ0VkaXRCb3hUaW1lRXN0aW1hdGlvblxuXHRcdFx0XHQucmVwbGFjZSgnJDEnLCBlZGl0Q291bnQpXG5cdFx0XHRcdC5yZXBsYWNlKCckMicsIHNlY29uZHNUb0hITU1TUyhjZmcuZWRpdENvb2xkb3duICogZWRpdENvdW50KSk7XG5cdFx0fVxuXHRcdHBlbmRpbmdFZGl0Qm94VGV4dC50ZXh0KG1lc3NhZ2VzLnBlbmRpbmdFZGl0Qm94LnJlcGxhY2UoJyQxJywgdGV4dENvbnRlbnQpKTtcblx0fVxufTtcblxuLyogQXBwbHkgdGhlIGNoYW5nZXMgbWFkZSB0byBhbiBcIm9yaWdpblwiIHBhZ2UvKiAqIHBhZ2VDaGFuZ2U6IENoYW5nZSB0aGF0IHdpbGwgYmUgc2F2ZWQgKi9cbmNvbnN0IGFwcGx5Q2hhbmdlID0gKHBhZ2VDaGFuZ2UpID0+IHtcblx0aWYgKHBhZ2VDaGFuZ2UucGFnZS5jb250ZW50ICE9PSBwYWdlQ2hhbmdlLmNvbnRlbnRCZWZvcmVbMF0pIHtcblx0XHRlZGl0Q291bnQrKztcblx0XHRjb25zdCBjaGFuZ2VTdW1tYXJpZXMgPSBwYWdlQ2hhbmdlLnN1bW1hcnkuam9pbihtZXNzYWdlcy5zdW1tYXJ5U2VwYXJhdG9yKTtcblx0XHRjb25zdCBzdW1tYXJ5ID0gbWVzc2FnZXMuc3VtbWFyeS5yZXBsYWNlKCckMScsIGdldFRhcmdldFBhZ2UoKSkucmVwbGFjZSgnJDInLCBjaGFuZ2VTdW1tYXJpZXMpO1xuXHRcdGNvbnN0IHNhdmUgPSBlZGl0TGltaXQgPyBzYXZlV2l0aENvb2xkb3duIDogc2F2ZVBhZ2U7XG5cdFx0c2F2ZShwYWdlQ2hhbmdlLnRpdGxlLCBwYWdlQ2hhbmdlLnBhZ2UsIHN1bW1hcnksIHRydWUsIHRydWUpXG5cdFx0XHQuYWx3YXlzKCgpID0+IHtcblx0XHRcdFx0aWYgKGVkaXRDb3VudCA+IDApIHtcblx0XHRcdFx0XHRlZGl0Q291bnQtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHR1cGRhdGVFZGl0Q291bnRlcigpO1xuXHRcdFx0fSlcblx0XHRcdC5mYWlsKGVycm9yKTtcblx0XHR1cGRhdGVFZGl0Q291bnRlcigpO1xuXHR9XG59O1xuXG4vKiBTYXZlIGFsbCB0aGUgcGVuZGluZyBjaGFuZ2VzICovXG5jb25zdCBhcHBseUFsbENoYW5nZXMgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgcGFnZUNoYW5nZSBvZiBwYWdlQ2hhbmdlcykge1xuXHRcdGFwcGx5Q2hhbmdlKHBhZ2VDaGFuZ2UpO1xuXHR9XG5cdHBhZ2VDaGFuZ2VzID0gW107XG59O1xuXG4vKiBSZWNvcmQgYSBuZXcgcGVuZGluZyBjaGFuZ2UvKiAqIHBhZ2VUaXRsZTogVGl0bGUgb2YgdGhlIHBhZ2UvKiAqIHBhZ2U6IENvbnRlbnQgb2YgdGhlIHBhZ2UvKiAqIG9sZENvbnRlbnQ6IENvbnRlbnQgb2YgdGhlIHBhZ2UgYmVmb3JlIHRoZSBjaGFuZ2UvKiAqIGxpbms6IExpbmsgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLyogKiBzdW1tYXJ5OiBDaGFuZ2Ugc3VtbWFyeSAqL1xuY29uc3QgYWRkQ2hhbmdlID0gKHBhZ2VUaXRsZSwgcGFnZSwgb2xkQ29udGVudCwgbGluaywgc3VtbWFyeSkgPT4ge1xuXHRpZiAoIXBhZ2VDaGFuZ2VzLmxlbmd0aCB8fCBwYWdlQ2hhbmdlcy5hdCgtMSkudGl0bGUgIT09IHBhZ2VUaXRsZSkge1xuXHRcdHBhZ2VDaGFuZ2VzW3BhZ2VDaGFuZ2VzLmxlbmd0aF0gPSB7XG5cdFx0XHR0aXRsZTogcGFnZVRpdGxlLFxuXHRcdFx0cGFnZSxcblx0XHRcdGNvbnRlbnRCZWZvcmU6IFtdLFxuXHRcdFx0bGlua3M6IFtdLFxuXHRcdFx0c3VtbWFyeTogW10sXG5cdFx0fTtcblx0fVxuXHRjb25zdCBsYXN0UGFnZUNoYW5nZSA9IHBhZ2VDaGFuZ2VzLmF0KC0xKTtcblx0bGFzdFBhZ2VDaGFuZ2UuY29udGVudEJlZm9yZVtsYXN0UGFnZUNoYW5nZS5jb250ZW50QmVmb3JlLmxlbmd0aF0gPSBvbGRDb250ZW50O1xuXHRsYXN0UGFnZUNoYW5nZS5saW5rc1tsYXN0UGFnZUNoYW5nZS5saW5rcy5sZW5ndGhdID0gbGluaztcblx0bGFzdFBhZ2VDaGFuZ2Uuc3VtbWFyeVtsYXN0UGFnZUNoYW5nZS5zdW1tYXJ5Lmxlbmd0aF0gPSBzdW1tYXJ5O1xufTtcblxuLyogQ2hlY2sgd2hldGhlciBhY3R1YWwgY2hhbmdlcyBhcmUgc3RvcmVkIGluIHRoZSBoaXN0b3J5IGFycmF5ICovXG5jb25zdCBjaGVja0FjdHVhbENoYW5nZXMgPSAoKSA9PiB7XG5cdHJldHVybiBjb3VudEFjdHVhbENoYW5nZXMoKSAhPT0gMDtcbn07XG5cbi8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGhpc3RvcnkgYXJyYXkgdGhhdCByZXByZXNlbnQgYWN0dWFsIGNoYW5nZXMgKi9cbmNvbnN0IGNvdW50QWN0dWFsQ2hhbmdlcyA9ICgpID0+IHtcblx0bGV0IGNoYW5nZUNvdW50ID0gMDtcblx0Zm9yIChjb25zdCBwYWdlQ2hhbmdlIG9mIHBhZ2VDaGFuZ2VzKSB7XG5cdFx0aWYgKHBhZ2VDaGFuZ2UucGFnZS5jb250ZW50ICE9PSBwYWdlQ2hhbmdlLmNvbnRlbnRCZWZvcmVbMF0pIHtcblx0XHRcdGNoYW5nZUNvdW50Kys7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjaGFuZ2VDb3VudDtcbn07XG5cbi8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYW5nZWQgcGFnZXMgaW4gdGhlIGhpc3RvcnkgYXJyYXksIGlnbm9yaW5nIHRoZSBsYXN0IGVudHJ5LyogKiBpZiB3ZSBhcmVuJ3QgZG9uZSB3aXRoIHRoYXQgcGFnZSB5ZXQgKi9cbmNvbnN0IGNvdW50QWN0dWFsbHlDaGFuZ2VkRnVsbHlDaGVja2VkUGFnZXMgPSAoKSA9PiB7XG5cdGxldCBjaGFuZ2VDb3VudCA9IGNvdW50QWN0dWFsQ2hhbmdlcygpO1xuXHRpZiAocGFnZUNoYW5nZXMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgbGFzdENoYW5nZSA9IHBhZ2VDaGFuZ2VzLmF0KC0xKTtcblx0XHRpZiAoXG5cdFx0XHRsYXN0Q2hhbmdlLnRpdGxlID09PSBjdXJyZW50UGFnZVRpdGxlICYmXG5cdFx0XHRjdXJyZW50TGluayAmJlxuXHRcdFx0bGFzdENoYW5nZS5wYWdlLmNvbnRlbnQgIT09IGxhc3RDaGFuZ2UuY29udGVudEJlZm9yZVswXVxuXHRcdCkge1xuXHRcdFx0Y2hhbmdlQ291bnQtLTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNoYW5nZUNvdW50O1xufTtcblxuLyogRmluZCB0aGUgbGlua3MgdG8gZGlzYW1iaWd1YXRpb24gb3B0aW9ucyBpbiBhIGRpc2FtYmlndWF0aW9uIHBhZ2UgKi9cbmNvbnN0IGdldERpc2FtT3B0aW9ucyA9ICgpID0+IHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdHJldHVybiAkYm9keS5maW5kKCcjbXctY29udGVudC10ZXh0IGEnKS5maWx0ZXIoKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdHJldHVybiAhIWV4dHJhY3RQYWdlTmFtZSgkKGVsZW1lbnQpKTtcblx0fSk7XG59O1xuXG4vKiBTYXZlIGFsbCB0aGUgcGVuZGluZyBjaGFuZ2VzIGFuZCBjbG9zZSB0aGUgdG9vbCAqL1xuY29uc3Qgc2F2ZUFuZEVuZCA9ICgpID0+IHtcblx0YXBwbHlBbGxDaGFuZ2VzKCk7XG5cdGVuZCgpO1xufTtcblxuLyogQ2xvc2UgdGhlIHRvb2wgKi9cbmNvbnN0IGVuZCA9ICgpID0+IHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdGNvbnN0IGN1cnJlbnRUb29sVUkgPSB1aS5kaXNwbGF5O1xuXHRjaG9vc2luZyA9IGZhbHNlO1xuXHRydW5uaW5nID0gZmFsc2U7XG5cdHN0YXJ0TGluay5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcblx0JGJvZHkuZmluZCgnLmRpc2FtYXNzaXN0LW9wdGlvbm1hcmtlcicpLnJlbW92ZSgpO1xuXHRjdXJyZW50VG9vbFVJLmZhZGVPdXQoe1xuXHRcdGNvbXBsZXRlKCkge1xuXHRcdFx0Y3VycmVudFRvb2xVSS5yZW1vdmUoKTtcblx0XHRcdGlmIChlZGl0Q291bnQpIHtcblx0XHRcdFx0dG9nZ2xlUGVuZGluZ0VkaXRCb3godHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0fSk7XG59O1xuXG4vKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgKi9cbmNvbnN0IGVycm9yID0gKGVycm9yRGVzY3JpcHRpb24pID0+IHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdGNvbnN0IGVycm9yQm94ID0gJCgnPGRpdj4nKS5hZGRDbGFzcygnZGlzYW1hc3Npc3QtYm94IGRpc2FtYXNzaXN0LWVycm9yYm94Jyk7XG5cdGVycm9yQm94LnRleHQobWVzc2FnZXMuZXJyb3IucmVwbGFjZSgnJDEnLCBlcnJvckRlc2NyaXB0aW9uKSk7XG5cdGVycm9yQm94LmFwcGVuZChcblx0XHRjcmVhdGVCdXR0b24obWVzc2FnZXMuZGlzbWlzc0Vycm9yLCAoKSA9PiB7XG5cdFx0XHRlcnJvckJveC5mYWRlT3V0KCk7XG5cdFx0fSkuYWRkQ2xhc3MoJ2Rpc2FtYXNzaXN0LWVycm9yYnV0dG9uJylcblx0KTtcblx0Y29uc3QgdWlJc0luUGxhY2UgPSB1aSAmJiAkLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdWkuZGlzcGxheVswXSk7XG5cdGNvbnN0IG5leHRFbGVtZW50ID0gdWlJc0luUGxhY2UgPyB1aS5kaXNwbGF5IDogJGJvZHkuZmluZCgnI213LWNvbnRlbnQtdGV4dCcpO1xuXHRuZXh0RWxlbWVudC5iZWZvcmUoZXJyb3JCb3gpO1xuXHRlcnJvckJveC5oaWRlKCkuZmFkZUluKCk7XG59O1xuXG4vKiBDaGFuZ2UgYSBsaW5rIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSB0aXRsZS8qICogdGV4dDogVGhlIHdpa2l0ZXh0IG9mIHRoZSB3aG9sZSBwYWdlLyogKiB0aXRsZTogVGhlIG5ldyBkZXN0aW5hdGlvbiBvZiB0aGUgbGluay8qICogbGluazogVGhlIGxpbmsgdGhhdCB3aWxsIGJlIG1vZGlmaWVkLyogKiBleHRyYTogVGV4dCB0aGF0IHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIGxpbmsgKG9wdGlvbmFsKSAqL1xuY29uc3QgcmVwbGFjZUxpbmsgPSAodGV4dCwgdGl0bGUsIGxpbmssIGV4dHJhKSA9PiB7XG5cdGxldCBuZXdDb250ZW50O1xuXHRpZiAoaXNTYW1lUGFnZSh0aXRsZSwgbGluay5kZXNjcmlwdGlvbikpIHtcblx0XHRuZXdDb250ZW50ID0gbGluay5kZXNjcmlwdGlvbjtcblx0fSBlbHNlIHtcblx0XHRuZXdDb250ZW50ID0gYCR7dGl0bGV9fCR7bGluay5kZXNjcmlwdGlvbn1gO1xuXHR9XG5cdGNvbnN0IGxpbmtTdGFydCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGluay5zdGFydCkpO1xuXHRjb25zdCBsaW5rRW5kID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBsaW5rLmVuZCkpO1xuXHRyZXR1cm4gYCR7bGlua1N0YXJ0fVtbJHtuZXdDb250ZW50fV1dJHtsaW5rLmFmdGVyRGVzY3JpcHRpb259JHtleHRyYSB8fCAnJ30ke2xpbmtFbmR9YDtcbn07XG5cbi8qIFJlbW92ZSBhIGxpbmsgZnJvbSB0aGUgdGV4dC8qICogdGV4dDogVGhlIHdpa2l0ZXh0IG9mIHRoZSB3aG9sZSBwYWdlLyogKiBsaW5rOiBUaGUgbGluayB0aGF0IHdpbGwgYmUgcmVtb3ZlZCAqL1xuY29uc3QgcmVtb3ZlTGluayA9ICh0ZXh0LCBsaW5rKSA9PiB7XG5cdGNvbnN0IGxpbmtTdGFydCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGluay5zdGFydCkpO1xuXHRjb25zdCBsaW5rRW5kID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBsaW5rLmVuZCkpO1xuXHRyZXR1cm4gbGlua1N0YXJ0ICsgbGluay5kZXNjcmlwdGlvbiArIGxpbmsuYWZ0ZXJEZXNjcmlwdGlvbiArIGxpbmtFbmQ7XG59O1xuXG4vKiBFeHRyYWN0IGEgbGluayBmcm9tIGEgc3RyaW5nIGluIHdpa2kgZm9ybWF0LC8qICogc3RhcnRpbmcgZnJvbSBhIGdpdmVuIGluZGV4LiBSZXR1cm4gYSBsaW5rIGlmIG9uZSBjYW4gYmUgZm91bmQsLyogKiBvdGhlcndpc2UgcmV0dXJuIG51bGwuIFRoZSBcImxpbmtcIiBpbmNsdWRlcyBcImRpc2FtYmlndWF0aW9uIG5lZWRlZFwiLyogKiB0ZW1wbGF0ZXMgaW5tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBsaW5rIHByb3Blci8qICogdGV4dDogVGV4dCBmcm9tIHdoaWNoIHRoZSBsaW5rIHdpbGwgYmUgZXh0cmFjdGVkLyogKiBsYXN0SW5kZXg6IEluZGV4IGZyb20gd2hpY2ggdGhlIHNlYXJjaCB3aWxsIHN0YXJ0ICovXG5jb25zdCBleHRyYWN0TGluayA9ICh0ZXh0LCBsYXN0SW5kZXgpID0+IHtcblx0Ly8gRklYTUU6IE5vdCBhbiBhY3R1YWwgdGl0bGUgcmVnZXggKGxvdHMgb2YgZmFsc2UgcG9zaXRpdmVzXG5cdC8vIGFuZCBzb21lIGZhbHNlIG5lZ2F0aXZlcyksIGJ1dCBob3BlZnVsbHkgZ29vZCBlbm91Z2guXG5cdGNvbnN0IHRpdGxlUmVnZXggPSAvXFxbXFxbKC4qPykoPzpcXHwoLio/KSk/XV0vZztcblx0Ly8gRGl0dG8gZm9yIHRoZSB0ZW1wbGF0ZSByZWdleC4gRGlzYW1iaWd1YXRpb24gbGluayB0ZW1wbGF0ZXNcblx0Ly8gc2hvdWxkIGJlIHNpbXBsZSBlbm91Z2ggZm9yIHRoaXMgbm90IHRvIG1hdHRlciwgdGhvdWdoLlxuXHRjb25zdCB0ZW1wbGF0ZVJlZ2V4ID0gL14oXFx3KltcXHMhKSwuOjs/fV0qKXt7XFxzKihbXnt8fV0rPylcXHMqKD86XFx8W157XSo/KT99fS87XG5cdHRpdGxlUmVnZXgubGFzdEluZGV4ID0gbGFzdEluZGV4O1xuXHRjb25zdCBtYXRjaCA9IHRpdGxlUmVnZXguZXhlYyh0ZXh0KTtcblx0aWYgKG1hdGNoICYmIG1hdGNoLmluZGV4ICE9PSAtMSkge1xuXHRcdGxldCBwb3NzaWJseUFtYmlndW91cyA9IHRydWU7XG5cdFx0bGV0IGhhc0Rpc2FtVGVtcGxhdGUgPSBmYWxzZTtcblx0XHRsZXQgX2VuZCA9IG1hdGNoLmluZGV4ICsgNCArIG1hdGNoWzFdLmxlbmd0aCArIChtYXRjaFsyXSA/IDEgKyBtYXRjaFsyXS5sZW5ndGggOiAwKTtcblx0XHRsZXQgYWZ0ZXJEZXNjcmlwdGlvbiA9ICcnO1xuXHRcdGNvbnN0IHJlc3QgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIF9lbmQpKTtcblx0XHRjb25zdCB0ZW1wbGF0ZU1hdGNoID0gdGVtcGxhdGVSZWdleC5leGVjKHJlc3QpO1xuXHRcdGlmICh0ZW1wbGF0ZU1hdGNoKSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVRpdGxlID0gZ2V0Q2Fub25pY2FsVGl0bGUodGVtcGxhdGVNYXRjaFsyXSk7XG5cdFx0XHRjb25zdCB7ZGlzYW1MaW5rVGVtcGxhdGVzfSA9IGNmZztcblx0XHRcdGNvbnN0IHtkaXNhbUxpbmtJZ25vcmVUZW1wbGF0ZXN9ID0gY2ZnO1xuXHRcdFx0aWYgKGRpc2FtTGlua1RlbXBsYXRlcy5pbmNsdWRlcyh0ZW1wbGF0ZVRpdGxlKSkge1xuXHRcdFx0XHRfZW5kICs9IHRlbXBsYXRlTWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdFx0XHRhZnRlckRlc2NyaXB0aW9uID0gdGVtcGxhdGVNYXRjaFsxXS5yZXBsYWNlKC9cXHMkLywgJycpO1xuXHRcdFx0XHRoYXNEaXNhbVRlbXBsYXRlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGlzYW1MaW5rSWdub3JlVGVtcGxhdGVzLmluY2x1ZGVzKHRlbXBsYXRlVGl0bGUpKSB7XG5cdFx0XHRcdHBvc3NpYmx5QW1iaWd1b3VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRzdGFydDogbWF0Y2guaW5kZXgsXG5cdFx0XHRlbmQ6IF9lbmQsXG5cdFx0XHRwb3NzaWJseUFtYmlndW91cyxcblx0XHRcdGhhc0Rpc2FtVGVtcGxhdGUsXG5cdFx0XHR0aXRsZTogbWF0Y2hbMV0sXG5cdFx0XHRkZXNjcmlwdGlvbjogbWF0Y2hbMl0gPz8gbWF0Y2hbMV0sXG5cdFx0XHRhZnRlckRlc2NyaXB0aW9uLFxuXHRcdH07XG5cdH1cbn07XG5cbi8qIEV4dHJhY3QgYSBsaW5rIHRvIG9uZSBvZiBhIG51bWJlciBvZiBkZXN0aW5hdGlvbiBwYWdlcyBmcm9tIGEgc3RyaW5nLyogKiAoXCJ0ZXh0XCIpIGluIHdpa2kgZm9ybWF0LCBzdGFydGluZyBmcm9tIGEgZ2l2ZW4gaW5kZXggKFwibGFzdEluZGV4XCIpLi8qICogXCJEaXNhbWJpZ3VhdGlvbiBuZWVkZWRcIiB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGxpbmtzLi8qICogdGV4dDogUGFnZSBpbiB3aWtpIGZvcm1hdC8qICogZGVzdGluYXRpb25zOiBBcnJheSBvZiBwYWdlIHRpdGxlcyB0byBsb29rIGZvci8qICogbGFzdEluZGV4OiBJbmRleCBmcm9tIHdoaWNoIHRoZSBzZWFyY2ggd2lsbCBzdGFydCAqL1xuY29uc3QgZXh0cmFjdExpbmtUb1BhZ2UgPSAodGV4dCwgZGVzdGluYXRpb25zLCBsYXN0SW5kZXgpID0+IHtcblx0bGV0IGxpbms7XG5cdGxldCB0aXRsZTtcblx0ZG8ge1xuXHRcdGxpbmsgPSBleHRyYWN0TGluayh0ZXh0LCBsYXN0SW5kZXgpO1xuXHRcdGlmIChsaW5rKSB7XG5cdFx0XHRsYXN0SW5kZXggPSBsaW5rLmVuZDtcblx0XHRcdHRpdGxlID0gZ2V0Q2Fub25pY2FsVGl0bGUobGluay50aXRsZSk7XG5cdFx0fVxuXHR9IHdoaWxlIChsaW5rICYmICghbGluay5wb3NzaWJseUFtYmlndW91cyB8fCAhZGVzdGluYXRpb25zPy5pbmNsdWRlcyh0aXRsZSkpKTtcblx0cmV0dXJuIGxpbms7XG59O1xuXG4vKiBGaW5kIHRoZSBcInRhcmdldFwiIHBhZ2U6IGVpdGhlciB0aGUgb25lIHdlIGFyZSBpbiBvciB0aGUgXCJtYWluXCIgb25lIGZvdW5kIGJ5IGV4dHJhY3RpbmcvKiAqIHRoZSB0aXRsZSBmcm9tIFwiLiogKGRpc2FtYmlndWF0aW9uKVwiIG9yIHdoYXRldmVyIHRoZSBhcHByb3BpYXRlIGxvY2FsIGZvcm1hdCBpcyAqL1xuY29uc3QgZ2V0VGFyZ2V0UGFnZSA9ICgpID0+IHtcblx0Y29uc3QgdGl0bGUgPSBnZXRUaXRsZSgpO1xuXHRyZXR1cm4gZm9yY2VTYW1lUGFnZSA/IHRpdGxlIDogcmVtb3ZlRGlzYW0odGl0bGUpO1xufTtcblxuLyogR2V0IHRoZSBwYWdlIHRpdGxlLCB3aXRoIHRoZSBuYW1lc3BhY2UgcHJlZml4IGlmIGFueS4gKi9cbmNvbnN0IGdldFRpdGxlID0gKCkgPT4ge1xuXHRjb25zdCB7d2dQYWdlTmFtZX0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdHJldHVybiB3Z1BhZ2VOYW1lLnJlcGxhY2UoL18vZywgJyAnKTtcbn07XG5cbi8qIEV4dHJhY3QgYSBcIm1haW5cIiB0aXRsZSBmcm9tIFwiLiogKGRpc2FtYmlndWF0aW9uKVwiIG9yIHdoYXRldmVyIHRoZSBhcHByb3BpYXRlIGxvY2FsIGZvcm1hdCBpcyAqL1xuY29uc3QgcmVtb3ZlRGlzYW0gPSAodGl0bGUpID0+IHtcblx0Y29uc3QgbWF0Y2ggPSBuZXcgUmVnRXhwKGNmZy5kaXNhbVJlZ0V4cCkuZXhlYyh0aXRsZSk7XG5cdHJldHVybiBtYXRjaD8uWzFdID8/IHRpdGxlO1xufTtcblxuLyogQ2hlY2sgd2hldGhlciB0d28gcGFnZSB0aXRsZXMgYXJlIHRoZSBzYW1lICovXG5jb25zdCBpc1NhbWVQYWdlID0gKHRpdGxlMSwgdGl0bGUyKSA9PiB7XG5cdHJldHVybiBnZXRDYW5vbmljYWxUaXRsZSh0aXRsZTEpID09PSBnZXRDYW5vbmljYWxUaXRsZSh0aXRsZTIpO1xufTtcblxuLyogUmV0dXJuIHRoZSAnY2Fub25pY2FsIHRpdGxlJyBvZiBhIHBhZ2UgKi9cbmNvbnN0IGdldENhbm9uaWNhbFRpdGxlID0gKHRpdGxlKSA9PiB7XG5cdHRyeSB7XG5cdFx0Ly8gbXcuVGl0bGUgc2VlbXMgdG8gYmUgYnVnZ3ksIGFuZCBzb21lIHZhbGlkIHRpdGxlcyBhcmUgcmVqZWN0ZWRcblx0XHQvLyBGSVhNRTogVGhpcyBtYXkgY2F1c2UgZmFsc2UgbmVnYXRpdmVzXG5cdFx0dGl0bGUgPSBuZXcgbXcuVGl0bGUodGl0bGUpLmdldFByZWZpeGVkVGV4dCgpO1xuXHR9IGNhdGNoIHtcblx0XHQvKiBlbXB0eSAqL1xuXHR9XG5cdHJldHVybiB0aXRsZTtcbn07XG5cbi8qIEV4dHJhY3QgdGhlIGNvbnRleHQgYXJvdW5kIGEgZ2l2ZW4gbGluayBpbiBhIHRleHQgc3RyaW5nICovXG5jb25zdCBleHRyYWN0Q29udGV4dCA9ICh0ZXh0LCBsaW5rKSA9PiB7XG5cdGNvbnN0IGNvbnRleHRTdGFydCA9IGxpbmsuc3RhcnQgLSBjZmcucmFkaXVzO1xuXHRjb25zdCBjb250ZXh0RW5kID0gbGluay5lbmQgKyBjZmcucmFkaXVzO1xuXHRsZXQgY29udGV4dFByZXYgPSB0ZXh0LnNsaWNlKGNvbnRleHRTdGFydCwgbGluay5zdGFydCk7XG5cdGlmIChjb250ZXh0U3RhcnQgPiAwKSB7XG5cdFx0Y29udGV4dFByZXYgPSBtZXNzYWdlcy5lbGxpcHNpcyArIGNvbnRleHRQcmV2O1xuXHR9XG5cdGxldCBjb250ZXh0TmV4dCA9IHRleHQuc2xpY2UobGluay5lbmQsIGNvbnRleHRFbmQpO1xuXHRpZiAoY29udGV4dEVuZCA8IHRleHQubGVuZ3RoKSB7XG5cdFx0Y29udGV4dE5leHQgKz0gbWVzc2FnZXMuZWxsaXBzaXM7XG5cdH1cblx0cmV0dXJuIFtjb250ZXh0UHJldiwgdGV4dC5zbGljZShsaW5rLnN0YXJ0LCBsaW5rLmVuZCksIGNvbnRleHROZXh0XTtcbn07XG5cbi8qIEV4dHJhY3QgdGhlIHByZWZpeGVkIHBhZ2UgbmFtZSBmcm9tIGEgbGluayAqL1xuY29uc3QgZXh0cmFjdFBhZ2VOYW1lID0gKGxpbmspID0+IHtcblx0bGV0IHBhZ2VOYW1lID0gZXh0cmFjdFBhZ2VOYW1lUmF3KGxpbmspO1xuXHRpZiAocGFnZU5hbWUpIHtcblx0XHRjb25zdCBzZWN0aW9uUG9zID0gcGFnZU5hbWUuaW5kZXhPZignIycpO1xuXHRcdGxldCBzZWN0aW9uID0gJyc7XG5cdFx0aWYgKHNlY3Rpb25Qb3MgIT09IC0xKSB7XG5cdFx0XHRzZWN0aW9uID0gcGFnZU5hbWUuc2xpY2UoTWF0aC5tYXgoMCwgc2VjdGlvblBvcykpO1xuXHRcdFx0cGFnZU5hbWUgPSBwYWdlTmFtZS5zbGljZSgwLCBNYXRoLm1heCgwLCBzZWN0aW9uUG9zKSk7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRDYW5vbmljYWxUaXRsZShwYWdlTmFtZSkgKyBzZWN0aW9uO1xuXHR9XG59O1xuXG4vKiBFeHRyYWN0IHRoZSBwYWdlIG5hbWUgZnJvbSBhIGxpbmssIGFzIGlzICovXG5jb25zdCBleHRyYWN0UGFnZU5hbWVSYXcgPSAobGluaykgPT4ge1xuXHRjb25zdCB7d2dTY3JpcHQsIHdnQXJ0aWNsZVBhdGh9ID0gbXcuY29uZmlnLmdldCgpO1xuXHRpZiAoIWxpbmsuaGFzQ2xhc3MoJ2ltYWdlJykpIHtcblx0XHRjb25zdCBocmVmID0gbGluay5hdHRyKCdocmVmJyk7XG5cdFx0aWYgKGxpbmsuaGFzQ2xhc3MoJ25ldycpKSB7XG5cdFx0XHQvLyBcIlJlZFwiIGxpbmtcblx0XHRcdGlmIChocmVmLmluY2x1ZGVzKHdnU2NyaXB0KSkge1xuXHRcdFx0XHRyZXR1cm4gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd0aXRsZScsIGhyZWYpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZWdleCA9IHdnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCAnKC4qKScpO1xuXHRcdFx0Y29uc3QgcmVnZXhSZXN1bHQgPSBuZXcgUmVnRXhwKGBeJHtyZWdleH0kYCkuZXhlYyhocmVmKTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHJlZ2V4UmVzdWx0KSAmJiByZWdleFJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZWdleFJlc3VsdFsxXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKiBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBkaXNhbWJpZ3VhdGlvbiBwYWdlICovXG5jb25zdCBpc0Rpc2FtID0gKCkgPT4ge1xuXHRjb25zdCB7d2dDYXRlZ29yaWVzfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0Y29uc3QgY2F0ZWdvcmllcyA9IHdnQ2F0ZWdvcmllcyA/PyBbXTtcblx0Zm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG5cdFx0Y29uc3Qge2Rpc2FtQ2F0ZWdvcmllc30gPSBjZmc7XG5cdFx0aWYgKGRpc2FtQ2F0ZWdvcmllcy5pbmNsdWRlcyhjYXRlZ29yeSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBzZWNvbmRzVG9ISE1NU1MgPSAodG90YWxTZWNvbmRzKSA9PiB7XG5cdGxldCBoaG1tc3MgPSAnJztcblx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xuXHRjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodG90YWxTZWNvbmRzICUgMzYwMCkgLyA2MCk7XG5cdGNvbnN0IHNlY29uZHMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAlIDYwKTtcblx0aWYgKGhvdXJzID49IDEpIHtcblx0XHRoaG1tc3MgPSBgJHtwYWQoaG91cnMsICcwJywgMil9OmA7XG5cdH1cblx0aGhtbXNzICs9IGAke3BhZChtaW51dGVzLCAnMCcsIDIpfToke3BhZChzZWNvbmRzLCAnMCcsIDIpfWA7XG5cdHJldHVybiBoaG1tc3M7XG59O1xuXG5jb25zdCBwYWQgPSAoc3RyLCB6LCB3aWR0aCkgPT4ge1xuXHRzdHIgPSBzdHIudG9TdHJpbmcoKTtcblx0aWYgKHN0ci5sZW5ndGggPj0gd2lkdGgpIHtcblx0XHRyZXR1cm4gc3RyO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0QXJyYXkuZnJvbSh7XG5cdFx0XHRsZW5ndGg6IHdpZHRoIC0gc3RyLmxlbmd0aCArIDEsXG5cdFx0fSkuam9pbih6KSArIHN0clxuXHQpO1xufTtcblxuLyogQ3JlYXRlIGEgbmV3IGJ1dHRvblxuICogdGV4dDogVGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSBidXR0b25cbiAqIG9uQ2xpY2s6IEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGVcbiAqIGJ1dHRvbiBpcyBjbGlja2VkXG4gKi9cbmNvbnN0IGNyZWF0ZUJ1dHRvbiA9ICh0ZXh0LCBvbkNsaWNrKSA9PiB7XG5cdGNvbnN0IGJ1dHRvbiA9ICQoJzxpbnB1dD4nKS5hdHRyKHtcblx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHR2YWx1ZTogdGV4dCxcblx0fSk7XG5cdGJ1dHRvbi5hZGRDbGFzcygnZGlzYW1hc3Npc3QtYnV0dG9uJykub24oJ2NsaWNrJywgb25DbGljayk7XG5cdHJldHVybiBidXR0b247XG59O1xuXG4vKiBHaXZlbiBhIHBhZ2UgdGl0bGUgYW5kIGFuIGFycmF5IG9mIHBvc3NpYmxlIHJlZGlyZWN0cyB7ZnJvbSwgdG99IChcImNhbm9uaWNhbCB0aXRsZXNcIiksIGZpbmQgdGhlIHBhZ2UvKiAqIGF0IHRoZSBlbmQgb2YgdGhlIHJlZGlyZWN0IGNoYWluLCBpZiB0aGVyZSBpcyBvbmUuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBwYWdlIHRpdGxlIHRoYXQgd2FzIHBhc3NlZCAqL1xuY29uc3QgcmVzb2x2ZVJlZGlyZWN0ID0gKHBhZ2VUaXRsZSwgcG9zc2libGVSZWRpcmVjdHMpID0+IHtcblx0bGV0IGFwcGxpZWRSZWRpcmVjdCA9IHRydWU7XG5cdGNvbnN0IHZpc2l0ZWRQYWdlcyA9IHt9O1xuXHRsZXQgY3VycmVudFBhZ2UgPSBnZXRDYW5vbmljYWxUaXRsZShwYWdlVGl0bGUpO1xuXHR3aGlsZSAoYXBwbGllZFJlZGlyZWN0KSB7XG5cdFx0YXBwbGllZFJlZGlyZWN0ID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBwb3NzaWJsZVJlZGlyZWN0IG9mIHBvc3NpYmxlUmVkaXJlY3RzKSB7XG5cdFx0XHRpZiAocG9zc2libGVSZWRpcmVjdC5mcm9tID09PSBjdXJyZW50UGFnZSkge1xuXHRcdFx0XHRpZiAodmlzaXRlZFBhZ2VzW3Bvc3NpYmxlUmVkaXJlY3QudG9dKSB7XG5cdFx0XHRcdFx0Ly8gUmVkaXJlY3QgY2hhaW4gZGV0ZWN0ZWRcblx0XHRcdFx0XHRyZXR1cm4gcGFnZVRpdGxlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZpc2l0ZWRQYWdlc1tjdXJyZW50UGFnZV0gPSB0cnVlO1xuXHRcdFx0XHRhcHBsaWVkUmVkaXJlY3QgPSB0cnVlO1xuXHRcdFx0XHRjdXJyZW50UGFnZSA9IHBvc3NpYmxlUmVkaXJlY3QudG87XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIE5vIHJlZGlyZWN0IHJ1bGVzIGFwcGxpZWQgZm9yIGFuIGl0ZXJhdGlvbiBvZiB0aGUgb3V0ZXIgbG9vcDpcblx0Ly8gbm8gbW9yZSByZWRpcmVjdHMuIFdlIGFyZSBkb25lXG5cdHJldHVybiBjdXJyZW50UGFnZTtcbn07XG5cbi8qIEZldGNoIHRoZSBpbmNvbWluZyBsaW5rcyB0byBhIHBhZ2UuIFJldHVybnMgYSBqUXVlcnkgcHJvbWlzZS8qICogKHN1Y2Nlc3MgLSBhcnJheSBvZiB0aXRsZXMgb2YgcGFnZXMgdGhhdCBjb250YWluIGxpbmtzIHRvIHRoZSB0YXJnZXQgcGFnZSBhbmQvKiAqIGFycmF5IG9mIFwiY2Fub25pY2FsIHRpdGxlc1wiIG9mIHBvc3NpYmxlIGRlc3RpbmF0aW9ucyBvZiB0aGUgYmFja2xpbmtzIChlaXRoZXIvKiAqIHRoZSB0YXJnZXQgcGFnZSBvciByZWRpcmVjdHMgdG8gdGhlIHRhcmdldCBwYWdlKSwgZmFpbHVyZSAtIGVycm9yIGRlc2NyaXB0aW9uKS8qICogcGFnZTogVGFyZ2V0IHBhZ2UgKi9cbmNvbnN0IGdldEJhY2tsaW5rcyA9IChwYWdlKSA9PiB7XG5cdGNvbnN0IGRlZmVycmVkID0gbmV3ICQuRGVmZXJyZWQoKTtcblx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRsaXN0OiAnYmFja2xpbmtzJyxcblx0XHRibHRpdGxlOiBwYWdlLFxuXHRcdGJscmVkaXJlY3Q6IHRydWUsXG5cdFx0YmxsaW1pdDogY2ZnLmJhY2tsaW5rTGltaXQsXG5cdFx0YmxuYW1lc3BhY2U6IGNmZy50YXJnZXROYW1lc3BhY2VzLmpvaW4oJ3wnKSxcblx0fTtcblx0YXBpLmdldChwYXJhbXMpXG5cdFx0LmRvbmUoKHtxdWVyeX0pID0+IHtcblx0XHRcdC8vIFRoZXJlIG1pZ2h0IGJlIGR1cGxpY2F0ZSBlbnRyaWVzIGluIHNvbWUgY29ybmVyIGNhc2VzLiBXZSBkb24ndCBjYXJlLFxuXHRcdFx0Ly8gc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGNoZWNrIGxhdGVyLCBhbnl3YXlcblx0XHRcdGNvbnN0IGJhY2tsaW5rcyA9IFtdO1xuXHRcdFx0Y29uc3QgbGlua1RpdGxlcyA9IFtnZXRDYW5vbmljYWxUaXRsZShwYWdlKV07XG5cdFx0XHRjb25zdCBiYWNrbGlua3NRdWVyeSA9IHF1ZXJ5LmJhY2tsaW5rcztcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBiYWNrbGlua3NRdWVyeSkge1xuXHRcdFx0XHRiYWNrbGlua3NbYmFja2xpbmtzLmxlbmd0aF0gPSBlbGVtZW50LnRpdGxlO1xuXHRcdFx0XHRpZiAoIWVsZW1lbnQucmVkaXJsaW5rcykge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpbmtUaXRsZXNbbGlua1RpdGxlcy5sZW5ndGhdID0gZWxlbWVudC50aXRsZTtcblx0XHRcdFx0Y29uc3Qge3JlZGlybGlua3N9ID0gZWxlbWVudDtcblx0XHRcdFx0Zm9yIChjb25zdCB7dGl0bGV9IG9mIHJlZGlybGlua3MpIHtcblx0XHRcdFx0XHRiYWNrbGlua3NbYmFja2xpbmtzLmxlbmd0aF0gPSB0aXRsZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShiYWNrbGlua3MsIGxpbmtUaXRsZXMpO1xuXHRcdH0pXG5cdFx0LmZhaWwoKGNvZGUpID0+IHtcblx0XHRcdGRlZmVycmVkLnJlamVjdChtZXNzYWdlcy5nZXRCYWNrbGlua3NFcnJvci5yZXBsYWNlKCckMScsIGNvZGUpKTtcblx0XHR9KTtcblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbi8qIERvd25sb2FkIGEgbGlzdCBvZiByZWRpcmVjdHMgZm9yIHNvbWUgcGFnZXMuIFJldHVybnMgYSBqUXVlcnkgY2FsbGJhY2sgKHN1Y2Nlc3MgLS8qICogYXJyYXkgb2YgcmVkaXJlY3RzICh7ZnJvbSwgdG99KSwgZmFpbHVyZSAtIGVycm9yIGRlc2NyaXB0aW9uICkvKiAqIHBhZ2VUaXRsZXM6IEFycmF5IG9mIHBhZ2UgdGl0bGVzICovXG5jb25zdCBmZXRjaFJlZGlyZWN0cyA9IChwYWdlVGl0bGVzKSA9PiB7XG5cdGNvbnN0IGRlZmVycmVkID0gbmV3ICQuRGVmZXJyZWQoKTtcblx0Y29uc3QgY3VycmVudFRpdGxlcyA9IHBhZ2VUaXRsZXMuc2xpY2UoMCwgY2ZnLnF1ZXJ5VGl0bGVMaW1pdCk7XG5cdGNvbnN0IHJlc3RUaXRsZXMgPSBwYWdlVGl0bGVzLnNsaWNlKGNmZy5xdWVyeVRpdGxlTGltaXQpO1xuXHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdHRpdGxlczogY3VycmVudFRpdGxlcy5qb2luKCd8JyksXG5cdFx0cmVkaXJlY3RzOiB0cnVlLFxuXHR9O1xuXHRhcGkuZ2V0KHBhcmFtcylcblx0XHQuZG9uZSgoe3F1ZXJ5fSkgPT4ge1xuXHRcdFx0Y29uc3QgdGhlc2VSZWRpcmVjdHMgPSBxdWVyeS5yZWRpcmVjdHMgPz8gW107XG5cdFx0XHRpZiAocmVzdFRpdGxlcy5sZW5ndGgpIHtcblx0XHRcdFx0ZmV0Y2hSZWRpcmVjdHMocmVzdFRpdGxlcylcblx0XHRcdFx0XHQuZG9uZSgocmVkaXJlY3RzKSA9PiB7XG5cdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKFsuLi50aGVzZVJlZGlyZWN0cywgLi4ucmVkaXJlY3RzXSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZmFpbCgoZGVzY3JpcHRpb24pID0+IHtcblx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdChkZXNjcmlwdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoZXNlUmVkaXJlY3RzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5mYWlsKChjb2RlKSA9PiB7XG5cdFx0XHRkZWZlcnJlZC5yZWplY3QobWVzc2FnZXMuZmV0Y2hSZWRpcmVjdHNFcnJvci5yZXBsYWNlKCckMScsIGNvZGUpKTtcblx0XHR9KTtcblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbi8qIERvd25sb2FkIHRoZSBsaXN0IG9mIHVzZXIgcmlnaHRzIGZvciB0aGUgY3VycmVudCB1c2VyLiBSZXR1cm5zIGEvKiAqIGpRdWVyeSBwcm9taXNlIChzdWNjZXNzIC0gYXJyYXkgb2YgcmlnaHQgbmFtZXMsIGVycm9yIC0gZXJyb3IgZGVzY3JpcHRpb24pICovXG5jb25zdCBmZXRjaFJpZ2h0cyA9ICgpID0+IHtcblx0Y29uc3QgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0bWV0YTogJ3VzZXJpbmZvJyxcblx0XHR1aXByb3A6ICdyaWdodHMnLFxuXHR9O1xuXHRhcGkuZ2V0KHBhcmFtcylcblx0XHQuZG9uZSgoe3F1ZXJ5fSkgPT4ge1xuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShxdWVyeS51c2VyaW5mby5yaWdodHMpO1xuXHRcdH0pXG5cdFx0LmZhaWwoKGNvZGUpID0+IHtcblx0XHRcdGRlZmVycmVkLnJlamVjdChtZXNzYWdlcy5mZXRjaFJpZ2h0c0Vycm9yLnJlcGxhY2UoJyQxJywgY29kZSkpO1xuXHRcdH0pO1xuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxuLyogTG9hZCB0aGUgcmF3IHBhZ2UgdGV4dCBmb3IgYSBnaXZlbiB0aXRsZS4gUmV0dXJucyBhIGpRdWVyeSBwcm9taXNlIChzdWNjZXNzIC0gcGFnZS8qICogY29udGVudCwgZmFpbHVyZSAtIGVycm9yIGRlc2NyaXB0aW9uKS8qICogcGFnZVRpdGxlOiBUaXRsZSBvZiB0aGUgcGFnZSAqL1xuY29uc3QgbG9hZFBhZ2UgPSAocGFnZVRpdGxlKSA9PiB7XG5cdGNvbnN0IGRlZmVycmVkID0gbmV3ICQuRGVmZXJyZWQoKTtcblx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0dGl0bGVzOiBwYWdlVGl0bGUsXG5cdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0cnZwcm9wOiAndGltZXN0YW1wfGNvbnRlbnQnLFxuXHRcdG1ldGE6ICd0b2tlbnMnLFxuXHRcdHR5cGU6ICdjc3JmJyxcblx0fTtcblx0YXBpLmdldChwYXJhbXMpXG5cdFx0LmRvbmUoKHtxdWVyeX0pID0+IHtcblx0XHRcdGNvbnN0IFtyYXdQYWdlXSA9IHF1ZXJ5LnBhZ2VzO1xuXHRcdFx0Y29uc3QgcGFnZSA9IHt9O1xuXHRcdFx0cGFnZS5yZWRpcmVjdCA9IHJhd1BhZ2UucmVkaXJlY3QgIT09IHVuZGVmaW5lZDtcblx0XHRcdHBhZ2UubWlzc2luZyA9IHJhd1BhZ2UubWlzc2luZyAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHJhd1BhZ2UucmV2aXNpb25zKSB7XG5cdFx0XHRcdHBhZ2UuY29udGVudCA9IHJhd1BhZ2UucmV2aXNpb25zWzBdLmNvbnRlbnQ7XG5cdFx0XHRcdHBhZ2UuYmFzZVRpbWVTdGFtcCA9IHJhd1BhZ2UucmV2aXNpb25zWzBdLnRpbWVzdGFtcDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhZ2UuY29udGVudCA9ICcnO1xuXHRcdFx0XHRwYWdlLmJhc2VUaW1lU3RhbXAgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRwYWdlLnN0YXJ0VGltZVN0YW1wID0gcmF3UGFnZS5zdGFydHRpbWVzdGFtcDtcblx0XHRcdHBhZ2UuZWRpdFRva2VuID0gcXVlcnkudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHRcdGRlZmVycmVkLnJlc29sdmUocGFnZSk7XG5cdFx0fSlcblx0XHQuZmFpbCgoY29kZSkgPT4ge1xuXHRcdFx0ZGVmZXJyZWQucmVqZWN0KG1lc3NhZ2VzLmxvYWRQYWdlRXJyb3IucmVwbGFjZSgnJDEnLCBwYWdlVGl0bGUpLnJlcGxhY2UoJyQyJywgY29kZSkpO1xuXHRcdH0pO1xuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxuLyogUmVnaXN0ZXIgY2hhbmdlcyB0byBhIHBhZ2UsIHRvIGJlIHNhdmVkIGxhdGVyLiBSZXR1cm5zIGEgalF1ZXJ5IHByb21pc2UvKiAqIChzdWNjZXNzIC0gbm8gcGFyYW1zLCBmYWlsdXJlIC0gZXJyb3IgZGVzY3JpcHRpb24pLiBUYWtlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzLyogKiBhcyBzYXZlUGFnZSAqL1xuY29uc3Qgc2F2ZVdpdGhDb29sZG93biA9ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGRlZmVycmVkID0gbmV3ICQuRGVmZXJyZWQoKTtcblx0cGVuZGluZ1NhdmVzW3BlbmRpbmdTYXZlcy5sZW5ndGhdID0ge1xuXHRcdGFyZ3MsXG5cdFx0ZGZkOiBkZWZlcnJlZCxcblx0fTtcblx0aWYgKCFydW5uaW5nU2F2ZXMpIHtcblx0XHRjaGVja0FuZFNhdmUoKTtcblx0fVxuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxuLyogU2F2ZSB0aGUgZmlyc3Qgc2V0IG9mIGNoYW5nZXMgaW4gdGhlIGxpc3Qgb2YgcGVuZGluZyBjaGFuZ2VzLCBwcm92aWRpbmcgdGhhdC8qICogZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCBlZGl0ICovXG5jb25zdCBjaGVja0FuZFNhdmUgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICghcGVuZGluZ1NhdmVzLmxlbmd0aCkge1xuXHRcdHJ1bm5pbmdTYXZlcyA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXHRydW5uaW5nU2F2ZXMgPSB0cnVlO1xuXHRjb25zdCBtaWxsaXNTaW5jZUxhc3QgPSBEYXRlLm5vdygpIC0gbGFzdEVkaXRNaWxsaXM7XG5cdGlmIChtaWxsaXNTaW5jZUxhc3QgPCBjZmcuZWRpdENvb2xkb3duICogMTAwMCkge1xuXHRcdHNldFRpbWVvdXQoY2hlY2tBbmRTYXZlLCBjZmcuZWRpdENvb2xkb3duICogMTAwMCAtIG1pbGxpc1NpbmNlTGFzdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVGhlIGxhc3QgZWRpdCBzdGFydGVkIGF0IGxlYXN0IGNmZy5lZGl0Q29vbGRvd24gc2Vjb25kcyBhZ29cblx0XHRjb25zdCBzYXZlID0gcGVuZGluZ1NhdmVzLnNoaWZ0KCk7XG5cdFx0c2F2ZVBhZ2Vcblx0XHRcdC5hcHBseSh0aGlzLCBzYXZlLmFyZ3MpXG5cdFx0XHQuZG9uZSgoKSA9PiB7XG5cdFx0XHRcdGNoZWNrQW5kU2F2ZSgpO1xuXHRcdFx0XHRzYXZlLmRmZC5yZXNvbHZlKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZhaWwoKGRlc2NyaXB0aW9uKSA9PiB7XG5cdFx0XHRcdGNoZWNrQW5kU2F2ZSgpO1xuXHRcdFx0XHRzYXZlLmRmZC5yZWplY3QoZGVzY3JpcHRpb24pO1xuXHRcdFx0fSk7XG5cdFx0Ly8gV2UnbGwgdXNlIHRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IGVkaXQgc3RhcnRlZFxuXHRcdGxhc3RFZGl0TWlsbGlzID0gRGF0ZS5ub3coKTtcblx0fVxufTtcblxuLyogU2F2ZSB0aGUgY2hhbmdlcyBtYWRlIHRvIGEgcGFnZS4gUmV0dXJucyBhIGpRdWVyeSBwcm9taXNlIChzdWNjZXNzIC0gbm8gcGFyYW1zLC8qICogZmFpbHVyZSAtIGVycm9yIGRlc2NyaXB0aW9uKS8qICogcGFnZVRpdGxlOiBUaXRsZSBvZiB0aGUgcGFnZS8qICogcGFnZTogUGFnZSBkYXRhLyogKiBzdW1tYXJ5OiBTdW1tYXJ5IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIHBhZ2UvKiAqIG1pbm9yRWRpdDogV2hldGhlciB0byBtYXJrIHRoZSBlZGl0IGFzICdtaW5vcicvKiAqIGJvdEVkaXQ6IFdoZXRoZXIgdG8gbWFyayB0aGUgZWRpdCBhcyAnYm90JyAqL1xuY29uc3Qgc2F2ZVBhZ2UgPSAocGFnZVRpdGxlLCB7ZWRpdFRva2VuLCBjb250ZW50LCBiYXNlVGltZVN0YW1wLCBzdGFydFRpbWVTdGFtcH0sIHN1bW1hcnksIG1pbm9yRWRpdCwgYm90RWRpdCkgPT4ge1xuXHRjb25zdCBkZWZlcnJlZCA9IG5ldyAkLkRlZmVycmVkKCk7XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRhY3Rpb246ICdlZGl0Jyxcblx0XHR0aXRsZTogcGFnZVRpdGxlLFxuXHRcdHRva2VuOiBlZGl0VG9rZW4sXG5cdFx0dGV4dDogY29udGVudCxcblx0XHRiYXNldGltZXN0YW1wOiBiYXNlVGltZVN0YW1wLFxuXHRcdHN0YXJ0dGltZXN0YW1wOiBzdGFydFRpbWVTdGFtcCxcblx0XHRzdW1tYXJ5LFxuXHRcdHdhdGNobGlzdDogY2ZnLndhdGNoLFxuXHRcdG1pbm9yOiBtaW5vckVkaXQsXG5cdFx0Ym90OiBib3RFZGl0LFxuXHR9O1xuXHRhcGkucG9zdChwYXJhbXMpXG5cdFx0LmRvbmUoKCkgPT4ge1xuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZSgpO1xuXHRcdH0pXG5cdFx0LmZhaWwoKGNvZGUpID0+IHtcblx0XHRcdGRlZmVycmVkLnJlamVjdChtZXNzYWdlcy5zYXZlUGFnZUVycm9yLnJlcGxhY2UoJyQxJywgcGFnZVRpdGxlKS5yZXBsYWNlKCckMicsIGNvZGUpKTtcblx0XHR9KTtcblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbmV4cG9ydCB7aW5zdGFsbH07XG4iLCAiLyoqXG4gKiBEaXNhbUFzc2lzdDogYSB0b29sIGZvciByZXBhaXJpbmcgbGlua3MgZnJvbSBhcnRpY2xlcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlcy5cbiAqIOeUsVF3ZXJ0eXl0cmV3cXF3ZXJ0eeacgOWIneiuvuiuoe+8mkNDIEJZLVNBIDMuMFxuICog55SxR1pXRGVy5pys5Zyw5YyW77yaMjAyMC0wOC0xOSBDQyBCWS1TQSAzLjBcbiAqIOeUseWSjOW5s+Wli+aWl+aVkeWcsOeQg+eojeS9nOe/u+ivkSAyMDIxLTA1LTE1IENDIEJZLVNBIDMuMFxuICog5rGC6Ze755m+56eRTmp6anrnroDkvZPljJYgMjAyMi0yLTE0IENDIEJZLVNBIDQuMFxuICovXG5pbXBvcnQgJy4vRGlzYW1Bc3Npc3QubGVzcyc7XG5cbmltcG9ydCB7aW5zdGFsbH0gZnJvbSAnLi9tb2R1bGVzL2NvcmUnO1xuXG4kKGluc3RhbGwpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxR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TixlQUFlbEI7SUFDZkcsZ0JBQWdCRDtJQUNoQnhVO0lBQ0F5VixXQUFXNVksSUFBSWlCO0lBQ2Y0WCxPQUFPTDtJQUNQTSxLQUFLTDtFQUNOO0FBQ0EzWSxNQUFJaVosS0FBS3JELE1BQU0sRUFDYjdMLEtBQUssTUFBTTtBQUNYbUIsYUFBU0UsUUFBUTtFQUNsQixDQUFDLEVBQ0FILEtBQU0wTCxVQUFTO0FBQ2Z6TCxhQUFTMEwsT0FBT3hWLFNBQVMyQixjQUFjd0ksUUFBUSxNQUFNNEIsU0FBUyxFQUFFNUIsUUFBUSxNQUFNb0wsSUFBSSxDQUFDO0VBQ3BGLENBQUM7QUFDRixTQUFPekwsU0FBU1ksUUFBUTtBQUN6Qjs7QUNwZ0NBeEcsRUFBRU4sT0FBTzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1vZHVsZSIsICJlcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImVycm9yIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAiZXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJlcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAiZXJyb3IiLCAibW9kdWxlIiwgImVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJlcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAiZXJyb3IiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAicmVxdWlyZSIsICJhcGkiLCAiaW5pdE13QXBpIiwgImNmZyIsICJkaXNhbUNhdGVnb3JpZXMiLCAiZGlzYW1MaW5rVGVtcGxhdGVzIiwgImRpc2FtTGlua0lnbm9yZVRlbXBsYXRlcyIsICJkaXNhbUZvcm1hdCIsICJkaXNhbVJlZ0V4cCIsICJkaXNhbU5lZWRlZFRleHQiLCAiY29uY2F0IiwgInJlZGlyZWN0VG9EaXNhbSIsICJpbnRlbnRpb25hbExpbmtPcHRpb24iLCAidGFyZ2V0TmFtZXNwYWNlcyIsICJiYWNrbGlua0xpbWl0IiwgInF1ZXJ5VGl0bGVMaW1pdCIsICJyYWRpdXMiLCAibnVtQ29udGV4dExpbmVzIiwgImhpc3RvcnlTaXplIiwgImVkaXRDb29sZG93biIsICJ3YXRjaCIsICJtZXNzYWdlcyIsICJzdGFydCIsICJzdGFydE1haW4iLCAic3RhcnRTYW1lIiwgImNsb3NlIiwgInVuZG8iLCAib21pdCIsICJyZWZyZXNoIiwgInRpdGxlQXNUZXh0IiwgImRpc2FtTmVlZGVkIiwgImludGVudGlvbmFsTGluayIsICJ0aXRsZUFzVGV4dFByb21wdCIsICJyZW1vdmVMaW5rIiwgIm9wdGlvbk1hcmtlciIsICJ0YXJnZXRPcHRpb25NYXJrZXIiLCAicmVkaXJlY3RPcHRpb25NYXJrZXIiLCAicGFnZVRpdGxlTGluZSIsICJub01vcmVMaW5rcyIsICJwZW5kaW5nRWRpdENvdW50ZXIiLCAicGVuZGluZ0VkaXRCb3giLCAicGVuZGluZ0VkaXRCb3hUaW1lRXN0aW1hdGlvbiIsICJwZW5kaW5nRWRpdEJveExpbWl0ZWQiLCAiZXJyb3IiLCAiZmV0Y2hSZWRpcmVjdHNFcnJvciIsICJnZXRCYWNrbGlua3NFcnJvciIsICJmZXRjaFJpZ2h0c0Vycm9yIiwgImxvYWRQYWdlRXJyb3IiLCAic2F2ZVBhZ2VFcnJvciIsICJkaXNtaXNzRXJyb3IiLCAicGVuZGluZyIsICJlZGl0SW5Qcm9ncmVzcyIsICJlbGxpcHNpcyIsICJub3RpZnlDaGFyYWN0ZXIiLCAic3VtbWFyeSIsICJzdW1tYXJ5Q2hhbmdlZCIsICJzdW1tYXJ5T21pdHRlZCIsICJzdW1tYXJ5UmVtb3ZlZCIsICJzdW1tYXJ5SW50ZW50aW9uYWwiLCAic3VtbWFyeUhlbHBOZWVkZWQiLCAic3VtbWFyeVNlcGFyYXRvciIsICJyZWRpcmVjdFN1bW1hcnkiLCAic3RhcnRMaW5rIiwgInVpIiwgImxpbmtzIiwgInBhZ2VDaGFuZ2VzIiwgImN1cnJlbnRQYWdlVGl0bGUiLCAiY3VycmVudFBhZ2VQYXJhbWV0ZXJzIiwgImN1cnJlbnRMaW5rIiwgInBvc3NpYmxlQmFja2xpbmtEZXN0aW5hdGlvbnMiLCAiZm9yY2VTYW1lUGFnZSIsICJydW5uaW5nIiwgImNob29zaW5nIiwgImNhbk1hcmtJbnRlbnRpb25hbExpbmtzIiwgImRpc3BsYXllZFBhZ2VzIiwgImVkaXRDb3VudCIsICJlZGl0TGltaXQiLCAicGVuZGluZ1NhdmVzIiwgInBlbmRpbmdFZGl0Qm94VGV4dCIsICJsYXN0RWRpdE1pbGxpcyIsICJydW5uaW5nU2F2ZXMiLCAiaW5zdGFsbCIsICJ3Z0FjdGlvbiIsICJtdyIsICJjb25maWciLCAiZ2V0IiwgImlzRGlzYW0iLCAiJCIsICJwb3J0bGV0SWQiLCAiZG9jdW1lbnQiLCAicXVlcnlTZWxlY3RvciIsICJSZWdFeHAiLCAidGVzdCIsICJnZXRUaXRsZSIsICJzdGFydE1haW5MaW5rIiwgInV0aWwiLCAiYWRkUG9ydGxldExpbmsiLCAib24iLCAic3RhcnRTYW1lTGluayIsICJhZGQiLCAiZW5zdXJlREFCRXhpc3RzIiwgInRoZW4iLCAiY2FuTWFyayIsICJjcmVhdGVVSSIsICJhZGRVbmxvYWRDb25maXJtIiwgIm1hcmtEaXNhbU9wdGlvbnMiLCAiY2hlY2tFZGl0TGltaXQiLCAidG9nZ2xlUGVuZGluZ0VkaXRCb3giLCAiZG9QYWdlIiwgIiRib2R5IiwgImRpc3BsYXkiLCAiYWRkQ2xhc3MiLCAiZmluaXNoZWRNZXNzYWdlIiwgInRleHQiLCAiaGlkZSIsICJjb250ZXh0IiwgInVuZG9CdXR0b24iLCAiY3JlYXRlQnV0dG9uIiwgIm9taXRCdXR0b24iLCAiZW5kQnV0dG9uIiwgInNhdmVBbmRFbmQiLCAicmVmcmVzaEJ1dHRvbiIsICJ0aXRsZUFzVGV4dEJ1dHRvbiIsICJjaG9vc2VUaXRsZUZyb21Qcm9tcHQiLCAiaW50ZW50aW9uYWxMaW5rQnV0dG9uIiwgImNob29zZUludGVudGlvbmFsTGluayIsICJkaXNhbU5lZWRlZEJ1dHRvbiIsICJjaG9vc2VEaXNhbU5lZWRlZCIsICJyZW1vdmVMaW5rQnV0dG9uIiwgImNob29zZUxpbmtSZW1vdmFsIiwgInRvcCIsICJhcHBlbmQiLCAibGVmdEJ1dHRvbnMiLCAicmlnaHRCdXR0b25zIiwgImFsbEJ1dHRvbnMiLCAidXBkYXRlRWRpdENvdW50ZXIiLCAidG9nZ2xlQWN0aW9uQnV0dG9ucyIsICJmaW5kIiwgImJlZm9yZSIsICJmYWRlSW4iLCAid2luZG93IiwgImNoZWNrQWN0dWFsQ2hhbmdlcyIsICJvcHRpb25QYWdlVGl0bGVzIiwgIm9wdGlvbk1hcmtlcnMiLCAiZ2V0RGlzYW1PcHRpb25zIiwgImVhY2giLCAiX2luZGV4IiwgImVsZW1lbnQiLCAibGluayIsICJ0aXRsZSIsICJleHRyYWN0UGFnZU5hbWUiLCAiYXR0ciIsICJldiIsICJwcmV2ZW50RGVmYXVsdCIsICJjaG9vc2VSZXBsYWNlbWVudCIsICJhZnRlciIsICJsZW5ndGgiLCAidGFyZ2V0UGFnZSIsICJnZXRUYXJnZXRQYWdlIiwgImZldGNoUmVkaXJlY3RzIiwgImRvbmUiLCAicmVkaXJlY3RzIiwgImVuZFRhcmdldFBhZ2UiLCAicmVzb2x2ZVJlZGlyZWN0IiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJlbnRyaWVzIiwgIl9zdGVwIiwgInMiLCAibiIsICJpaSIsICJvcHRpb25QYWdlVGl0bGUiLCAidmFsdWUiLCAiZW5kT3B0aW9uVGl0bGUiLCAiaXNTYW1lUGFnZSIsICJlcnIiLCAiZSIsICJmIiwgImZhaWwiLCAiZGVmZXJyZWQiLCAiRGVmZXJyZWQiLCAicmVzb2x2ZSIsICJleGVjIiwgImRpc2FtVGl0bGUiLCAicmVwbGFjZSIsICJsb2FkUGFnZSIsICJwYWdlIiwgIm1pc3NpbmciLCAiY29udGVudCIsICJzYXZlUGFnZSIsICJkZXNjcmlwdGlvbiIsICJwcm9taXNlIiwgImZldGNoUmlnaHRzIiwgInJpZ2h0cyIsICJpbmNsdWRlcyIsICJhbHdheXMiLCAiYXBwbHlDaGFuZ2UiLCAic2hpZnQiLCAiZGF0YSIsICJkb0xpbmsiLCAiZ2V0QmFja2xpbmtzIiwgImJhY2tsaW5rcyIsICJwYWdlVGl0bGVzIiwgIl9pIiwgIl9wZW5kaW5nU2F2ZXMiLCAiZWwiLCAiZmlsdGVyIiwgInQiLCAicmVtb3ZlRGlzYW0iLCAidXBkYXRlQ29udGV4dCIsICJleHRyYWN0TGlua1RvUGFnZSIsICJlbmQiLCAicGFnZVRpdGxlIiwgImV4dHJhIiwgImFkZENoYW5nZSIsICJyZXBsYWNlTGluayIsICJwcm9tcHQiLCAibGFzdFBhZ2UiLCAiYXQiLCAidW5zaGlmdCIsICJjb250ZW50QmVmb3JlIiwgInBvcCIsICJlbmFibGVkIiwgImFmZmVjdGVkQnV0dG9ucyIsICJfaTIiLCAiX2FmZmVjdGVkQnV0dG9ucyIsICJidXR0b24iLCAicHJvcCIsICJ0b2dnbGVGaW5pc2hlZE1lc3NhZ2UiLCAic2hvdyIsICJ0b2dnbGUiLCAiZmFkZU91dCIsICJub3RpZnlDb21wbGV0aW9uIiwgIm9sZFRpdGxlIiwgIm9uZSIsICJodG1sIiwgImdldFVybCIsICJyZWRpcmVjdCIsICJlc2NhcGUiLCAiZXh0cmFjdENvbnRleHQiLCAiZW1wdHkiLCAibnVtTGluZXMiLCAiTWF0aCIsICJjZWlsIiwgImhlaWdodCIsICJOdW1iZXIiLCAicGFyc2VGbG9hdCIsICJjc3MiLCAiQXJyYXkiLCAiZnJvbSIsICJqb2luIiwgImhhc0Rpc2FtVGVtcGxhdGUiLCAiY291bnRBY3R1YWxseUNoYW5nZWRGdWxseUNoZWNrZWRQYWdlcyIsICJ0ZXh0Q29udGVudCIsICJzZWNvbmRzVG9ISE1NU1MiLCAicGFnZUNoYW5nZSIsICJjaGFuZ2VTdW1tYXJpZXMiLCAic2F2ZSIsICJzYXZlV2l0aENvb2xkb3duIiwgImFwcGx5QWxsQ2hhbmdlcyIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJvbGRDb250ZW50IiwgImxhc3RQYWdlQ2hhbmdlIiwgImNvdW50QWN0dWFsQ2hhbmdlcyIsICJjaGFuZ2VDb3VudCIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJsYXN0Q2hhbmdlIiwgImN1cnJlbnRUb29sVUkiLCAicmVtb3ZlQ2xhc3MiLCAicmVtb3ZlIiwgImNvbXBsZXRlIiwgImVycm9yRGVzY3JpcHRpb24iLCAiZXJyb3JCb3giLCAidWlJc0luUGxhY2UiLCAiY29udGFpbnMiLCAiZG9jdW1lbnRFbGVtZW50IiwgIm5leHRFbGVtZW50IiwgIm5ld0NvbnRlbnQiLCAibGlua1N0YXJ0IiwgInNsaWNlIiwgIm1heCIsICJsaW5rRW5kIiwgImFmdGVyRGVzY3JpcHRpb24iLCAiZXh0cmFjdExpbmsiLCAibGFzdEluZGV4IiwgInRpdGxlUmVnZXgiLCAidGVtcGxhdGVSZWdleCIsICJtYXRjaCIsICJpbmRleCIsICJfbWF0Y2gkIiwgInBvc3NpYmx5QW1iaWd1b3VzIiwgIl9lbmQiLCAicmVzdCIsICJ0ZW1wbGF0ZU1hdGNoIiwgInRlbXBsYXRlVGl0bGUiLCAiZ2V0Q2Fub25pY2FsVGl0bGUiLCAiZGVzdGluYXRpb25zIiwgIndnUGFnZU5hbWUiLCAiX21hdGNoJDIiLCAidGl0bGUxIiwgInRpdGxlMiIsICJUaXRsZSIsICJnZXRQcmVmaXhlZFRleHQiLCAiY29udGV4dFN0YXJ0IiwgImNvbnRleHRFbmQiLCAiY29udGV4dFByZXYiLCAiY29udGV4dE5leHQiLCAicGFnZU5hbWUiLCAiZXh0cmFjdFBhZ2VOYW1lUmF3IiwgInNlY3Rpb25Qb3MiLCAiaW5kZXhPZiIsICJzZWN0aW9uIiwgIndnU2NyaXB0IiwgIndnQXJ0aWNsZVBhdGgiLCAiaGFzQ2xhc3MiLCAiaHJlZiIsICJnZXRQYXJhbVZhbHVlIiwgInJlZ2V4IiwgInJlZ2V4UmVzdWx0IiwgImlzQXJyYXkiLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwgIndnQ2F0ZWdvcmllcyIsICJjYXRlZ29yaWVzIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgImNhdGVnb3J5IiwgInRvdGFsU2Vjb25kcyIsICJoaG1tc3MiLCAiaG91cnMiLCAiZmxvb3IiLCAibWludXRlcyIsICJzZWNvbmRzIiwgInBhZCIsICJzdHIiLCAieiIsICJ3aWR0aCIsICJ0b1N0cmluZyIsICJvbkNsaWNrIiwgInR5cGUiLCAicG9zc2libGVSZWRpcmVjdHMiLCAiYXBwbGllZFJlZGlyZWN0IiwgInZpc2l0ZWRQYWdlcyIsICJjdXJyZW50UGFnZSIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSIsICJwb3NzaWJsZVJlZGlyZWN0IiwgInRvIiwgInBhcmFtcyIsICJhY3Rpb24iLCAibGlzdCIsICJibHRpdGxlIiwgImJscmVkaXJlY3QiLCAiYmxsaW1pdCIsICJibG5hbWVzcGFjZSIsICJxdWVyeSIsICJsaW5rVGl0bGVzIiwgImJhY2tsaW5rc1F1ZXJ5IiwgIl9pdGVyYXRvcjYiLCAiX3N0ZXA2IiwgInJlZGlybGlua3MiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAiY29kZSIsICJyZWplY3QiLCAiY3VycmVudFRpdGxlcyIsICJyZXN0VGl0bGVzIiwgInRpdGxlcyIsICJfcXVlcnkkcmVkaXJlY3RzIiwgInRoZXNlUmVkaXJlY3RzIiwgIm1ldGEiLCAidWlwcm9wIiwgInVzZXJpbmZvIiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgInJ2cHJvcCIsICJyYXdQYWdlIiwgInBhZ2VzIiwgInJldmlzaW9ucyIsICJiYXNlVGltZVN0YW1wIiwgInRpbWVzdGFtcCIsICJzdGFydFRpbWVTdGFtcCIsICJzdGFydHRpbWVzdGFtcCIsICJlZGl0VG9rZW4iLCAidG9rZW5zIiwgImNzcmZ0b2tlbiIsICJhcmdzIiwgImRmZCIsICJjaGVja0FuZFNhdmUiLCAibWlsbGlzU2luY2VMYXN0IiwgIkRhdGUiLCAibm93IiwgInNldFRpbWVvdXQiLCAiYXBwbHkiLCAibWlub3JFZGl0IiwgImJvdEVkaXQiLCAidG9rZW4iLCAiYmFzZXRpbWVzdGFtcCIsICJ3YXRjaGxpc3QiLCAibWlub3IiLCAiYm90IiwgInBvc3QiXQp9Cg== diff --git a/dist/Edittools-refToolbar/Edittools-refToolbar.js b/dist/Edittools-refToolbar/Edittools-refToolbar.js index c7561bf1..5de3d420 100644 --- a/dist/Edittools-refToolbar/Edittools-refToolbar.js +++ b/dist/Edittools-refToolbar/Edittools-refToolbar.js @@ -64,9 +64,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -80,9 +80,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -94,9 +94,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -107,9 +107,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -120,9 +120,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -132,9 +132,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -146,9 +146,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -161,9 +161,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -177,9 +177,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -190,9 +190,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -207,9 +207,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -217,9 +217,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -230,9 +230,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -242,9 +242,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -255,9 +255,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -266,9 +266,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -281,18 +281,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -301,9 +301,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -328,9 +328,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -344,18 +344,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -371,9 +371,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -386,9 +386,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -400,9 +400,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -413,9 +413,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -431,17 +431,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -456,9 +456,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -466,18 +466,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -486,9 +486,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -498,9 +498,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -511,9 +511,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -525,9 +525,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -547,9 +547,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -575,9 +575,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -588,9 +588,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -602,9 +602,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -619,9 +619,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -644,9 +644,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -660,9 +660,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -674,9 +674,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -720,9 +720,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -736,9 +736,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -756,9 +756,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -773,9 +773,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -784,9 +784,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -797,17 +797,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -880,9 +880,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -935,9 +935,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -970,9 +970,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -983,9 +983,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -995,9 +995,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -1009,9 +1009,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -1022,9 +1022,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -1033,9 +1033,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1068,9 +1068,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1092,9 +1092,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1108,9 +1108,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1121,17 +1121,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1147,9 +1147,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1169,9 +1169,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1190,9 +1190,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1233,9 +1233,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1244,9 +1244,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1271,9 +1271,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1284,9 +1284,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -3422,4 +3422,4 @@ var refToolbarMesages = () => { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgInNyYy9FZGl0dG9vbHMtcmVmVG9vbGJhci9FZGl0dG9vbHMtcmVmVG9vbGJhci50cyIsICJzcmMvRWRpdHRvb2xzLXJlZlRvb2xiYXIvbW9kdWxlcy91dGlsL2FwaS50cyIsICJzcmMvRWRpdHRvb2xzLXJlZlRvb2xiYXIvbW9kdWxlcy91dGlsL2dldE1lc3NhZ2UudHMiLCAic3JjL0VkaXR0b29scy1yZWZUb29sYmFyL21vZHVsZXMvUmVmVG9vbGJhckNvbmZpZy5qcyIsICJzcmMvRWRpdHRvb2xzLXJlZlRvb2xiYXIvbW9kdWxlcy9SZWZUb29sYmFyMi4wLmpzIiwgInNyYy9FZGl0dG9vbHMtcmVmVG9vbGJhci9tb2R1bGVzL1JlZlRvb2xiYXJCYXNlLmpzIiwgInNyYy9FZGl0dG9vbHMtcmVmVG9vbGJhci9tb2R1bGVzL21lc3NhZ2VzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICJpbXBvcnQgJy4vRWRpdHRvb2xzLXJlZlRvb2xiYXIubGVzcyc7XG5pbXBvcnQge2dldEJvZHl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5pbXBvcnQge3JlZlRvb2xiYXIyfSBmcm9tICcuL21vZHVsZXMvUmVmVG9vbGJhcjIuMCc7XG5pbXBvcnQge3JlZlRvb2xiYXJCYXNlfSBmcm9tICcuL21vZHVsZXMvUmVmVG9vbGJhckJhc2UnO1xuaW1wb3J0IHtyZWZUb29sYmFyTWVzYWdlc30gZnJvbSAnLi9tb2R1bGVzL21lc3NhZ2VzJztcblxuLyoqXG4gKiBSZWZUb29sYmFyXG4gKlxuICogQWRkcyB0b29scyBmb3IgY2l0aW5nIHJlZmVyZW5jZXMgdG8gdGhlIGVkaXQgdG9vbGJhci5cbiAqIE9uZSBvZiB0d28gcG9zc2libGUgdmVyc2lvbnMgd2lsbCBsb2FkIChSZWZ0b29sYmFyIDEuMCBvciBSZWZ0b29sYmFyIDEuMClcbiAqIGRlcGVuZGluZyBvbiB0aGUgdXNlciBwcmVmZXJlbmNlcyAodGhlIHVzZWJldGF0b29sYmFyIHByZWZlcmVuY2UpLlxuICpcbiAqIEBhdXRob3IgTXIuWi1tYW4sIEthbGRhcmlcbiAqL1xuKCgpOiB2b2lkID0+IHtcblx0Y29uc3Qge3dnQWN0aW9uLCB3Z1BhZ2VDb250ZW50TW9kZWx9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5cdC8vIE9ubHkgZXhlY3V0ZSB3aGVuIGVkaXRpbmcvcHJldmlld2luZyB3aWtpdGV4dCBwYWdlc1xuXHRpZiAoIVsnZWRpdCcsICdzdWJtaXQnXS5pbmNsdWRlcyh3Z0FjdGlvbikgfHwgd2dQYWdlQ29udGVudE1vZGVsICE9PSAnd2lraXRleHQnKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFtdy51c2VyLm9wdGlvbnMuZ2V0KCd1c2ViZXRhdG9vbGJhcicpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhW25hbWU9d3BUZXh0Ym94MV1bcmVhZG9ubHldJykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBMb2FkIGxvY2FsIG1lc3NhZ2VzLlxuXHRyZWZUb29sYmFyTWVzYWdlcygpO1xuXHQvLyBMb2FkIG1haW4gZnVuY3Rpb25zXG5cdHJlZlRvb2xiYXJCYXNlKCk7XG5cdHZvaWQgZ2V0Qm9keSgpLnRoZW4ocmVmVG9vbGJhcjIpO1xufSkoKTtcbiIsICJpbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoJ1JlZlRvb2xiYXIvMi4wJyk7XG5cbmV4cG9ydCB7YXBpfTtcbiIsICJjb25zdCBnZXRNZXNzYWdlID0gKGtleTogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZyA9PiB7XG5cdC8vIE1lc3NhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZTpcblx0Ly8gKiBzZWUgbWVzc2FnZXMudHNcblx0Ly8gKiBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXHRyZXR1cm4gYXJncy5sZW5ndGggPyBtdy5tZXNzYWdlKGtleSwgLi4uYXJncykucGFyc2UoKSA6IG13Lm1lc3NhZ2Uoa2V5KS5wbGFpbigpO1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICIvKiBnbG9iYWwgQ2l0ZVRCICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UsIG5vLW5ldywgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4vLyBAdHMtbm9jaGVja1xuLyoqXG4gKiBTaXRld2lkZSBvcHRpb25zIGZvciB0aGUgdGhlIENpdGUgdG9vbGJhciBidXR0b246XG4gKiBBbGwgb3B0aW9ucyBzaG91bGQgYmUgc3BlY2lmaWVkXG4gKlxuICogXCJkYXRlIGZvcm1hdFwiIHNldHMgdGhlIGRhdGUgZm9ybWF0IHVzZWQgZm9yIHRoZSBmdW5jdGlvbiB0byBpbnNlcnQgdGhlIGN1cnJlbnQgZGF0ZVxuICogQ3VycmVudCBhdmFpbGFibGUgb3B0aW9uczpcbiAqIGRhdGUgLSB0aGUgZGF5IG9mIHRoZSBtb250aFxuICogemRhdGUgLSBkYXkgb2YgdGhlIG1vbnRoLCB6ZXJvIHBhZGRlZCB0byAyIGRpZ2l0c1xuICogbW9udGhuYW1lIC0gVGhlIG1vbnRoIG5hbWVcbiAqIG1vbnRoIC0gVGhlIG51bWJlcmljIG1vbnRoICgxLTEyKVxuICogem1vbnRoIC0gbnVtZXJpYyBtb250aCwgemVybyBwYWRkZWQgdG8gMiBkaWdpdHNcbiAqIHllYXIgLSBUaGUgZnVsbCB5ZWFyICg0IGRpZ2l0cylcbiAqXG4gKiBcImF1dG9kYXRlIGZpZWxkc1wiIGlzIGEgbGlzdCBvZiB0ZW1wbGF0ZSBmaWVsZHMgdGhhdCBzaG91bGQgaGF2ZSBhIGJ1dHRvbiB0byBpbnNlcnQgdGhlIGN1cnJlbnQgZGF0ZVxuICpcbiAqIFwibW9udGhzXCIgaXMgYSBsaXN0IG9mIGxvY2FsaXplZCBtb250aCBuYW1lc1xuICpcbiAqIFwibW9kYWxcIiAtIGlmIHRydWUsIHRoZSBkaWFsb2dzIHdpbGwgYmUgbW9kYWwgd2luZG93cywgYmxvY2tpbmcgYWNjZXNzIHRvIHRoZSByZXN0IG9mIHRoZSB3aW5kb3cuXG4gKiBBbGwgZGlhbG9ncyBpbiB0aGUgdG9vbGJhciBhcmUgbW9kYWwgYnkgZGVmYXVsdFxuICpcbiAqIFwiYXV0b3BhcnNlXCIgLSBpZiB0cnVlLCBwcmV2aWV3aW5nIGEgcmVmIHdpbGwgYXV0b21hdGljYWxseSB0cmlnZ2VyIGEgcHJldmlldyBvZiB0aGUgcGFyc2VkIHdpa2l0ZXh0LlxuICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHNldCB0aGlzIHRvIHRydWUgYXMgYSBnbG9iYWwgc2V0dGluZyBhcyBpdCBtYXkgc2xvdyB0aGUgc2NyaXB0IGRvd24gZm9yXG4gKiBwZW9wbGUgd2l0aCBzbG93IGNvbm5lY3Rpb25zLlxuICpcbiAqIFwiZXhwYW5kdGVtcGxhdGVzXCIgLSBpZiB0cnVlLCB0ZW1wbGF0ZXMgYW5kIHBhcnNlciBmdW5jdGlvbnMgd2lsbCBiZSBleHBhbmRlZCB3aGVuIGdldHRpbmcgcGFnZSB0ZXh0XG4gKiAodGVtcGxhdGVzIGluc2lkZSBvZiByZWYgdGFncyB3aWxsIG5vdCBiZSBleHBhbmRlZCkuIFRoaXMgd2lsbCBhbGxvdyByZWZlcmVuY2VzIGluc2lkZSBvZiB0ZW1wbGF0ZXMgb3JcbiAqIHJlZmVyZW5jZXMgdXNpbmcge3sjdGFnOnJlZn19IHRvIGJlIGxpc3RlZCBpbiB0aGUgbmFtZWQgcmVmcyBkaWFsb2cgYW5kIHNlYXJjaGVkIGJ5IGVycm9yIGNoZWNrcy5cbiAqIFRoaXMgbWF5IHNsb3cgbG9hZGluZyB0aGUgbmFtZWQgcmVmcyBhbmQgZXJyb3IgY2hlY2sgZGlhbG9ncy5cbiAqL1xuY29uc3QgcmVmVG9vbGJhckNvbmZpZyA9ICgpID0+IHtcblx0Y29uc3Qge0NpdGVUZW1wbGF0ZX0gPSB3aW5kb3c7XG5cblx0Q2l0ZVRCLk9wdGlvbnMgPSB7XG5cdFx0J2RhdGUgZm9ybWF0JzogJzx5ZWFyPi08em1vbnRoPi08emRhdGU+Jyxcblx0XHQnYXV0b2RhdGUgZmllbGRzJzogWydhY2Nlc3NkYXRlJ10sXG5cdFx0bW9udGhzOiBbJzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc25pyIJywgJzfmnIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sXG5cdFx0bW9kYWw6IHRydWUsXG5cdFx0YXV0b3BhcnNlOiB0cnVlLFxuXHRcdGV4cGFuZHRlbXBsYXRlczogZmFsc2UsXG5cdH07XG5cblx0Ly8gQ2l0ZSB0ZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHRuZXcgQ2l0ZVRlbXBsYXRlKFxuXHRcdCdjaXRlIHdlYicsXG5cdFx0J3dlYicsXG5cdFx0W1xuXHRcdFx0Ly8gQmFzaWMgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9yPE4+Jyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9yX2FsdCcsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3RpdGxlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAndGl0bGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd1cmwnLFxuXHRcdFx0XHRhdXRvZmlsbGlkOiAndXJsJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnd2Vic2l0ZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2pvdXJuYWwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwdWJsaXNoZXInLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdwdWJsaXNoZXInLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhY2Nlc3NkYXRlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncmVmJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcmVmLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdC8vIEV4cGFuZGVkIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2F1dGhvcmxpbms8Tj4nLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1hdXRob3JsaW5rLXRvb2x0aXAnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3JsaW5rJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFzdDxOPicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhc3QtaW5jcicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2ZpcnN0PE4+Jyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZmlyc3QtaW5jcicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcicsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZScsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBhZ2UtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3BhZ2VzJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAncGFnZXMnLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1wYWdlcy10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFuZ3VhZ2UnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYW5ndWFnZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Zvcm1hdCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2RvaScsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICdkb2knLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdkb2knLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkYXRlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZGF0ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3F1b3RlJyxcblx0XHRcdH0sXG5cdFx0XVxuXHQpO1xuXHRuZXcgQ2l0ZVRlbXBsYXRlKFxuXHRcdCdjaXRlIG5ld3MnLFxuXHRcdCduZXdzJyxcblx0XHRbXG5cdFx0XHQvLyBCYXNpYyBmaWVsZHNcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhdXRob3I8Tj4nLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3JfYWx0Jyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAndGl0bGUnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICd0aXRsZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3VybCcsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICd1cmwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhY2Nlc3NkYXRlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnd29yaycsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXdvcmstdG9vbHRpcCcsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2pvdXJuYWwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhZ2VuY3knLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpc3N1ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3B1Ymxpc2hlcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3B1Ymxpc2hlcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2RhdGUnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdkYXRlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncmVmJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcmVmLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdC8vIEV4cGFuZGVkIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2F1dGhvcmxpbms8Tj4nLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1hdXRob3JsaW5rLXRvb2x0aXAnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3JsaW5rJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFzdDxOPicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhc3QtaW5jcicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2ZpcnN0PE4+Jyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZmlyc3QtaW5jcicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcicsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZScsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBhZ2UtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3BhZ2VzJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAncGFnZXMnLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1wYWdlcy10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFuZ3VhZ2UnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYW5ndWFnZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Zvcm1hdCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2RvaScsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICdkb2knLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdkb2knLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdxdW90ZScsXG5cdFx0XHR9LFxuXHRcdF1cblx0KTtcblx0bmV3IENpdGVUZW1wbGF0ZShcblx0XHQnY2l0ZSBib29rJyxcblx0XHQnYm9vaycsXG5cdFx0W1xuXHRcdFx0Ly8gQmFzaWMgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9yPE4+Jyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9yX2FsdCcsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2NvYXV0aG9ycycsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2NvYXV0aG9ycycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VkaXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3RpdGxlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAndGl0bGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkYXRlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAneWVhcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3B1Ymxpc2hlcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3B1Ymxpc2hlcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnbG9jYXRpb24nLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpc2JuJyxcblx0XHRcdFx0LyogXCJhdXRvZmlsbGlkXCI6XCJpc2JuXCIsICovIGF1dG9maWxscHJvcDogJ2lzYm4nLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwYWdlJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcGFnZS10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZXMnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdwYWdlcycsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBhZ2VzLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdlZGl0aW9uJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZWRpdGlvbicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3VybCcsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICd1cmwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhY2Nlc3NkYXRlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncmVmJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcmVmLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdC8vIEV4cGFuZGVkIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xhc3Q8Tj4nLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYXN0LWluY3InLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3InLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdmaXJzdDxOPicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2ZpcnN0LWluY3InLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3InLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhdXRob3JsaW5rPE4+Jyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtYXV0aG9ybGluay10b29sdGlwJyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9ybGluaycsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VkaXRvcjxOPi1sYXN0Jyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnZWRpdG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdG9yPE4+LWZpcnN0Jyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnZWRpdG9yJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdG9yPE4+LWxpbmsnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdlZGl0b3JsaW5rJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFuZ3VhZ2UnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYW5ndWFnZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Zvcm1hdCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2NoYXB0ZXInLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdjaGFwdGVyJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncXVvdGUnLFxuXHRcdFx0fSxcblx0XHRdXG5cdCk7XG5cdG5ldyBDaXRlVGVtcGxhdGUoXG5cdFx0J2NpdGUgam91cm5hbCcsXG5cdFx0J2pvdXJuYWwnLFxuXHRcdFtcblx0XHRcdC8vIEJhc2ljIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2F1dGhvcjxOPicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcl9hbHQnLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdjb2F1dGhvcnMnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdjb2F1dGhvcnMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd0aXRsZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3RpdGxlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnam91cm5hbCcsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2pvdXJuYWwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkYXRlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZGF0ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3ZvbHVtZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3ZvbHVtZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2lzc3VlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnaXNzdWUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwYWdlJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcGFnZS10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZXMnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdwYWdlcycsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBhZ2VzLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkb2knLFxuXHRcdFx0XHRhdXRvZmlsbGlkOiAnZG9pJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZG9pJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncG1pZCcsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICdwbWlkJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAndXJsJyxcblx0XHRcdFx0YXV0b2ZpbGxpZDogJ3VybCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2FjY2Vzc2RhdGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdyZWYnLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1yZWYtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0Ly8gRXhwYW5kZWQgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9ybGluazxOPicsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWF1dGhvcmxpbmstdG9vbHRpcCcsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcmxpbmsnLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdsYXN0PE4+Jyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnbGFzdC1pbmNyJyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZmlyc3Q8Tj4nLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdmaXJzdC1pbmNyJyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9yJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdG9yPE4+LWxhc3QnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdlZGl0b3InLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdlZGl0b3I8Tj4tZmlyc3QnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdlZGl0b3InLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdlZGl0b3I8Tj4tbGluaycsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2VkaXRvcmxpbmsnLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdzZXJpZXMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhdCcsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWF0LXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd0cmFucy10aXRsZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3B1Ymxpc2hlcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3B1Ymxpc2hlcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFuZ3VhZ2UnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYW5ndWFnZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Zvcm1hdCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2lzc24nLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdpc3NuJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncG1jJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnb2NsYycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2JpYmNvZGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpZCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3F1b3RlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncG9zdHNjcmlwdCcsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBvc3RzY3JpcHQtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdF1cblx0KTtcblx0bmV3IENpdGVUZW1wbGF0ZShcblx0XHQnY2l0ZSBjb25mZXJlbmNlJyxcblx0XHQnY29uZmVyZW5jZScsXG5cdFx0W1xuXHRcdFx0Ly8gQmFzaWMgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9yJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnYXV0aG9yMScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2NvYXV0aG9ycycsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2NvYXV0aG9ycycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3RpdGxlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAndGl0bGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdjb25mZXJlbmNlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnY29uZmVyZW5jZXVybCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Jvb2t0aXRsZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2pvdXJuYWwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkYXRlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZGF0ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3llYXInLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdtb250aCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3ZvbHVtZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3ZvbHVtZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3B1Ymxpc2hlcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3B1Ymxpc2hlcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnbG9jYXRpb24nLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpc2JuJyAvKiAsIFwiYXV0b2ZpbGxpZFwiOlwiaXNiblwiICovLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwYWdlcycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2RvaScsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICdkb2knLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdkb2knLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwbWlkJyxcblx0XHRcdFx0YXV0b2ZpbGxpZDogJ3BtaWQnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd1cmwnLFxuXHRcdFx0XHRhdXRvZmlsbGlkOiAndXJsJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYWNjZXNzZGF0ZScsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWFjY2Vzc2RhdGUtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0Ly8gRXhwYW5kZWQgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFzdCcsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhc3QxJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZmlyc3QnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdmaXJzdDEnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhdXRob3JsaW5rJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtYXV0aG9ybGluay10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnb3RoZXJzJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdGlvbicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2VkaXRpb24nLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdsYW5ndWFnZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhbmd1YWdlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZm9ybWF0Jyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnaXNzbicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ29jbGMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpZCcsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWlkLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdxdW90ZScsXG5cdFx0XHR9LFxuXHRcdF1cblx0KTtcblx0bmV3IENpdGVUZW1wbGF0ZShcblx0XHQnY2l0ZSBlbmN5Y2xvcGVkaWEnLFxuXHRcdCdlbmN5Y2xvcGVkaWEnLFxuXHRcdFtcblx0XHRcdC8vIEJhc2ljIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2F1dGhvcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2F1dGhvcjEnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd0aXRsZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VkaXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VuY3ljbG9wZWRpYScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3RpdGxlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAndm9sdW1lJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAneWVhcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3llYXInLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwdWJsaXNoZXInLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdwdWJsaXNoZXInLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdsb2NhdGlvbicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xvY2F0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnaXNibicgLyogLCBcImF1dG9maWxsaWRcIjpcImlzYm5cIiAqLyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZXMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd1cmwnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdC8vIEV4cGFuZGVkIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xhc3QnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYXN0MScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2ZpcnN0Jyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZmlyc3QxJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9ybGluaycsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWF1dGhvcmxpbmstdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2NvYXV0aG9ycycsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2NvYXV0aG9ycycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ290aGVycycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VkaXRpb24nLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdlZGl0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnb2NsYycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2lkJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtaWQtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2FjY2Vzc2RhdGUnLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1hY2Nlc3NkYXRlLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdsYW5ndWFnZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhbmd1YWdlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZm9ybWF0Jyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZGF0ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ21vbnRoJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncXVvdGUnLFxuXHRcdFx0fSxcblx0XHRdXG5cdCk7XG5cblx0Ly8gZXhlY3V0ZSBtYWluIGZ1bmN0aW9uXG5cdENpdGVUQi5pbml0KCk7XG59O1xuXG5leHBvcnQge3JlZlRvb2xiYXJDb25maWd9O1xuIiwgIi8qIGdsb2JhbCBDaXRlVEIgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7YXBpfSBmcm9tICcuL3V0aWwvYXBpJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi91dGlsL2dldE1lc3NhZ2UnO1xuaW1wb3J0IHtyZWZUb29sYmFyQ29uZmlnfSBmcm9tICcuL1JlZlRvb2xiYXJDb25maWcnO1xuXG4vLyBUT0RPOiBtYWtlIGF1dG9kYXRlIGFuIG9wdGlvbiBpbiB0aGUgQ2l0ZVRlbXBsYXRlIG9iamVjdCwgbm90IGEgcHJlZmVyZW5jZVxuY29uc3QgcmVmVG9vbGJhcjIgPSAoJGJvZHkpID0+IHtcblx0Ly8gRGVmYXVsdCBvcHRpb25zLCB0aGVzZSBtYWlubHkgZXhpc3Qgc28gdGhlIHNjcmlwdCB3b24ndCBicmVhayBpZiBhIG5ldyBvcHRpb24gaXMgYWRkZWRcblx0Q2l0ZVRCLkRlZmF1bHRPcHRpb25zID0ge1xuXHRcdCdkYXRlIGZvcm1hdCc6ICc8eWVhcj4tPHptb250aD4tPHpkYXRlPicsXG5cdFx0J2F1dG9kYXRlIGZpZWxkcyc6IFtdLFxuXHRcdG1vbnRoczogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuXHRcdG1vZGFsOiB0cnVlLFxuXHRcdGF1dG9wYXJzZTogZmFsc2UsXG5cdFx0ZXhwYW5kdGVtcGxhdGVzOiBmYWxzZSxcblx0fTtcblxuXHQvLyBHZXQgYW4gb3B0aW9uIC0gdXNlciBzZXR0aW5ncyBvdmVycmlkZSBnbG9iYWwgd2hpY2ggb3ZlcnJpZGUgZGVmYXVsdHNcblx0Q2l0ZVRCLmdldE9wdGlvbiA9IChvcHQpID0+IHtcblx0XHRpZiAoQ2l0ZVRCLlVzZXJPcHRpb25zW29wdF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIENpdGVUQi5Vc2VyT3B0aW9uc1tvcHRdO1xuXHRcdH0gZWxzZSBpZiAoQ2l0ZVRCLk9wdGlvbnNbb3B0XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gQ2l0ZVRCLk9wdGlvbnNbb3B0XTtcblx0XHR9XG5cdFx0cmV0dXJuIENpdGVUQi5EZWZhdWx0T3B0aW9uc1tvcHRdO1xuXHR9O1xuXG5cdENpdGVUQi5pbml0ID0gKCkgPT4ge1xuXHRcdC8qIE1haW4gc3R1ZmYsIGJ1aWxkIHRoZSBhY3R1YWwgdG9vbGJhciBzdHJ1Y3R1cmVcblx0XHQgKiAxLiBnZXQgdGhlIHRlbXBsYXRlIGxpc3QsIG1ha2UgdGhlIGRyb3Bkb3duIGxpc3QgYW5kIHNldCB1cCB0aGUgdGVtcGxhdGUgZGlhbG9nIGJveGVzXG5cdFx0ICogMi4gYWN0dWFsbHkgYnVpbGQgdGhlIHRvb2xiYXI6XG5cdFx0ICogLSBBIHNlY3Rpb24gZm9yIGNpdGVzXG5cdFx0ICogLS0gZHJvcGRvd24gZm9yIHRoZSB0ZW1wbGF0ZXMgKHByZXZpb3VzbHkgZGVmaW5lZClcblx0XHQgKiAtLSBidXR0b24gZm9yIG5hbWVkIHJlZnMgd2l0aCBhIGRpYWxvZyBib3hcblx0XHQgKiAzLiBhZGQgdGhlIHdob2xlIHRoaW5nIHRvIHRoZSBtYWluIHRvb2xiYXJcblx0XHQgKi9cblxuXHRcdCQoZG9jdW1lbnQpLmZpbmQoJ2hlYWQnKS50cmlnZ2VyKCdyZWZ0b29sYmFyYmFzZScpO1xuXHRcdGNvbnN0ICR0YXJnZXQgPSAkYm9keS5maW5kKCd0ZXh0YXJlYVtuYW1lPXdwVGV4dGJveDFdJyk7XG5cdFx0Y29uc3QgdGVtbGlzdCA9IHt9O1xuXHRcdGZvciAoY29uc3QgdCBpbiBDaXRlVEIuVGVtcGxhdGVzKSB7XG5cdFx0XHRpZiAoT2JqZWN0Lmhhc093bihDaXRlVEIuVGVtcGxhdGVzLCB0KSkge1xuXHRcdFx0XHRjb25zdCB0ZW0gPSBDaXRlVEIuVGVtcGxhdGVzW3RdO1xuXHRcdFx0XHRjb25zdCBzZm9ybSA9IENpdGVUQi5lc2NTdHIodGVtLnNob3J0Zm9ybSk7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbm9iaiA9IHtcblx0XHRcdFx0XHR0eXBlOiAnZGlhbG9nJyxcblx0XHRcdFx0XHRtb2R1bGU6IGBjaXRlLWRpYWxvZy0ke3Nmb3JtfWAsXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGRpYWxvZ29iaiA9IHt9O1xuXHRcdFx0XHRkaWFsb2dvYmpbYGNpdGUtZGlhbG9nLSR7c2Zvcm19YF0gPSB7XG5cdFx0XHRcdFx0cmVzaXplbWU6IGZhbHNlLFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtZWRpYXdpa2kvbXNnLWRvY1xuXHRcdFx0XHRcdHRpdGxlOiBtdy5tZXNzYWdlKGBjaXRlLWRpYWxvZy0ke3Nmb3JtfWApLnBhcnNlKCksXG5cdFx0XHRcdFx0aWQ6IGBjaXRldG9vbGJhci0ke3Nmb3JtfWAsXG5cdFx0XHRcdFx0aW5pdDogKCkgPT4ge30sXG5cdFx0XHRcdFx0aHRtbDogdGVtLmdldEluaXRpYWwoKSxcblx0XHRcdFx0XHRkaWFsb2c6IHtcblx0XHRcdFx0XHRcdHdpZHRoOiBNYXRoLnJvdW5kKCQod2luZG93KS53aWR0aCgpID8/IDAgKiAwLjgpLFxuXHRcdFx0XHRcdFx0b3BlbigpIHtcblx0XHRcdFx0XHRcdFx0JCh0aGlzKS5odG1sKENpdGVUQi5nZXRPcGVuVGVtcGxhdGUoKS5nZXRGb3JtKCkpO1xuXHRcdFx0XHRcdFx0XHQvKiogQHBhcmFtIHtqUXVlcnkuRXZlbnR9IGUgKi9cblx0XHRcdFx0XHRcdFx0JGJvZHkuZmluZCgnLmNpdGUtcHJldi1wYXJzZScpLm9uKCdjbGljaycsIChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdENpdGVUQi5wcmV2UGFyc2VDbGljaygpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRidXR0b25zOiB7XG5cdFx0XHRcdFx0XHRcdCdjaXRlLWZvcm0tc3VibWl0JygpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCByZWYgPSBDaXRlVEIuZ2V0UmVmKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHQkKHRoaXMpLmRpYWxvZygnY2xvc2UnKTtcblx0XHRcdFx0XHRcdFx0XHQkLndpa2lFZGl0b3IubW9kdWxlcy50b29sYmFyLmZuLmRvQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0JCh0aGlzKS5kYXRhKCdjb250ZXh0JyksXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdlbmNhcHN1bGF0ZScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwb3N0OiByZWYsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0JCh0aGlzKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCdjaXRlLWZvcm0tc2hvd2hpZGUnOiBDaXRlVEIuc2hvd0hpZGVFeHRyYSxcblx0XHRcdFx0XHRcdFx0J2NpdGUtcmVmcHJldmlldycoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgcmVmID0gQ2l0ZVRCLmdldFJlZihmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRlbXBsYXRlID0gQ2l0ZVRCLmdldE9wZW5UZW1wbGF0ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRpdiA9ICQoYCNjaXRldG9vbGJhci0ke0NpdGVUQi5lc2NTdHIodGVtcGxhdGUuc2hvcnRmb3JtKX1gKTtcblx0XHRcdFx0XHRcdFx0XHRkaXYuZmluZCgnLmNpdGUtcHJldmlldy1sYWJlbCcpLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRkaXYuZmluZCgnLmNpdGUtcmVmLXByZXZpZXcnKS50ZXh0KHJlZikuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChDaXRlVEIuZ2V0T3B0aW9uKCdhdXRvcGFyc2UnKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Q2l0ZVRCLnByZXZQYXJzZUNsaWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpdi5maW5kKCcuY2l0ZS1wcmV2LXBhcnNlJykuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGl2LmZpbmQoJy5jaXRlLXByZXYtcGFyc2VkLWxhYmVsJykuaGlkZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGl2LmZpbmQoJy5jaXRlLXByZXZpZXctcGFyc2VkJykuaHRtbCgnJyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnd2lraWVkaXRvci10b29sYmFyLXRvb2wtbGluay1jYW5jZWwnKCkge1xuXHRcdFx0XHRcdFx0XHRcdCQodGhpcykuZGlhbG9nKCdjbG9zZScpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnY2l0ZS1mb3JtLXJlc2V0JygpIHtcblx0XHRcdFx0XHRcdFx0XHRDaXRlVEIucmVzZXRGb3JtKCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0JHRhcmdldC53aWtpRWRpdG9yKCdhZGREaWFsb2cnLCBkaWFsb2dvYmopO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHQvKiBUeXBlRXJyb3I6IHJhbmdlIGlzIG51bGwgKi9cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBpZiAoIUNpdGVUQi5nZXRPcHRpb24oJ21vZGFsJykpIHtcblx0XHRcdFx0Ly8gXHQkYm9keS5maW5kKGAjY2l0ZXRvb2xiYXItJHtzZm9ybX1gKS5kaWFsb2coJ29wdGlvbicsICdtb2RhbCcsIGZhbHNlKTtcblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHR0ZW1saXN0W3Nmb3JtXSA9IHtcblx0XHRcdFx0XHRsYWJlbDogdGVtLnRlbXBsYXRlbmFtZSxcblx0XHRcdFx0XHRhY3Rpb246IGFjdGlvbm9iaixcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCByZWZzZWN0aW9uID0ge1xuXHRcdFx0c2VjdGlvbnM6IHtcblx0XHRcdFx0Y2l0ZXM6IHtcblx0XHRcdFx0XHR0eXBlOiAndG9vbGJhcicsXG5cdFx0XHRcdFx0bGFiZWw6IGdldE1lc3NhZ2UoJ2NpdGUtc2VjdGlvbi1sYWJlbCcpLFxuXHRcdFx0XHRcdGdyb3Vwczoge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGU6IHtcblx0XHRcdFx0XHRcdFx0dG9vbHM6IHtcblx0XHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogZ2V0TWVzc2FnZSgnY2l0ZS10ZW1wbGF0ZS1saXN0JyksXG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0OiB0ZW1saXN0LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bmFtZWRyZWZzOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBnZXRNZXNzYWdlKCdjaXRlLW5hbWVkLXJlZnMtbGFiZWwnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHM6IHtcblx0XHRcdFx0XHRcdFx0XHRucmVmczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2RpYWxvZycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZTogJ2NpdGUtdG9vbGJhci1uYW1lZHJlZnMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdGljb246ICdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvdGh1bWIvYi9iZS9OdXZvbGFfY2xpcGJvYXJkX2xpbmVkLnN2Zy8yMnB4LU51dm9sYV9jbGlwYm9hcmRfbGluZWQuc3ZnLnBuZycsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZWN0aW9uOiAnY2l0ZXMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Z3JvdXA6ICduYW1lZHJlZnMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGdldE1lc3NhZ2UoJ2NpdGUtbmFtZWQtcmVmcy1idXR0b24nKSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9O1xuXG5cdFx0Y29uc3QgZGVmYXVsdGRpYWxvZ3MgPSB7XG5cdFx0XHQnY2l0ZS10b29sYmFyLW5hbWVkcmVmcyc6IHtcblx0XHRcdFx0dGl0bGU6IG13Lm1lc3NhZ2UoJ2NpdGUtbmFtZWQtcmVmcy10aXRsZScpLnBhcnNlKCksXG5cdFx0XHRcdHJlc2l6ZW1lOiBmYWxzZSxcblx0XHRcdFx0aWQ6ICdjaXRldG9vbGJhci1uYW1lZHJlZnMnLFxuXHRcdFx0XHRodG1sOiBgPGRpdiBpZD1cImNpdGUtbmFtZWRyZWYtbG9hZGluZ1wiPiA8aW1nIHNyYz1cImh0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy9iL2IxL0xvYWRpbmdfaWNvbi5naWZcIiAvPiAmbmJzcDske2dldE1lc3NhZ2UoXG5cdFx0XHRcdFx0J2NpdGUtbG9hZGluZydcblx0XHRcdFx0KX08L2Rpdj5gLFxuXHRcdFx0XHRpbml0OiAoKSA9PiB7fSxcblx0XHRcdFx0ZGlhbG9nOiB7XG5cdFx0XHRcdFx0d2lkdGg6IE1hdGgucm91bmQoJCh3aW5kb3cpLndpZHRoKCkgPz8gMCAqIDAuOCksXG5cdFx0XHRcdFx0b3BlbigpIHtcblx0XHRcdFx0XHRcdENpdGVUQi5sb2FkUmVmcygpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YnV0dG9uczoge1xuXHRcdFx0XHRcdFx0J2NpdGUtZm9ybS1zdWJtaXQnKCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZWZuYW1lID0gJGJvZHkuZmluZCgnI2NpdGUtbmFtZWRyZWYtc2VsZWN0JykudmFsKCk7XG5cdFx0XHRcdFx0XHRcdGlmIChyZWZuYW1lID09PSAnJykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLmRpYWxvZygnY2xvc2UnKTtcblx0XHRcdFx0XHRcdFx0JC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5kb0FjdGlvbihcblx0XHRcdFx0XHRcdFx0XHQkKHRoaXMpLmRhdGEoJ2NvbnRleHQnKSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnZW5jYXBzdWxhdGUnLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwb3N0OiBDaXRlVEIuZ2V0TmFtZWRSZWYocmVmbmFtZSwgdHJ1ZSksXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0JCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCd3aWtpZWRpdG9yLXRvb2xiYXItdG9vbC1saW5rLWNhbmNlbCcoKSB7XG5cdFx0XHRcdFx0XHRcdCQodGhpcykuZGlhbG9nKCdjbG9zZScpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdCR0YXJnZXQud2lraUVkaXRvcignYWRkRGlhbG9nJywgZGVmYXVsdGRpYWxvZ3MpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gZXJyb3Igb2NjdXJyZWQgc2V0dGluZyB1cCB3aWtpZWRpdG9yLlxuXHRcdH1cblx0XHQkYm9keS5maW5kKCcjY2l0ZXRvb2xiYXItbmFtZWRyZWZzJykub2ZmKCdkaWFsb2dvcGVuJyk7XG5cdFx0aWYgKCFDaXRlVEIuZ2V0T3B0aW9uKCdtb2RhbCcpKSB7XG5cdFx0XHQvLyAkYm9keS5maW5kKCcjY2l0ZXRvb2xiYXItbmFtZWRyZWZzJykuZGlhbG9nKCdvcHRpb24nLCAnbW9kYWwnLCBmYWxzZSk7XG5cdFx0XHRtdy51dGlsLmFkZENTUygnLnVpLXdpZGdldC1vdmVybGF5e2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fScpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0JHRhcmdldC53aWtpRWRpdG9yKCdhZGRUb1Rvb2xiYXInLCByZWZzZWN0aW9uKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIGVycm9yIG9jY3VycmVkIHNldHRpbmcgdXAgd2lraWVkaXRvci5cblx0XHR9XG5cdH07XG5cblx0Ly8gU2V0dXAgdGhlIG1haW4gb2JqZWN0XG5cdENpdGVUQi5tYWluUmVmTGlzdCA9IFtdO1xuXHRDaXRlVEIucmVmc0xvYWRlZCA9IGZhbHNlO1xuXG5cdC8vIFJFRiBGVU5DVElPTlNcblx0Ly8gQWN0dWFsbHkgYXNzZW1ibGUgYSByZWYgZnJvbSB1c2VyIGlucHV0XG5cdENpdGVUQi5nZXRSZWYgPSAoaW5uZXJvbmx5LCBmb3JpbnNlcnQpID0+IHtcblx0XHRsZXQgaSwgaiwgZywgZ3JvdXA7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBDaXRlVEIuZ2V0T3BlblRlbXBsYXRlKCk7XG5cdFx0Y29uc3Qge3RlbXBsYXRlbmFtZX0gPSB0ZW1wbGF0ZTtcblx0XHRsZXQgcmVzID0gJyc7XG5cdFx0Y29uc3QgcmVmb2JqID0ge1xuXHRcdFx0c2hvcnR0YWc6IGZhbHNlLFxuXHRcdH07XG5cdFx0aWYgKCFpbm5lcm9ubHkpIHtcblx0XHRcdGdyb3VwID0gJChgI2NpdGUtJHtDaXRlVEIuZXNjU3RyKHRlbXBsYXRlLnNob3J0Zm9ybSl9LWdyb3VwYCkudmFsKCk7XG5cdFx0XHRsZXQgcmVmbmFtZSA9ICQoYCNjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfS1uYW1lYCkudmFsKCk7XG5cdFx0XHRyZXMgKz0gJzxyZWYnO1xuXHRcdFx0aWYgKHJlZm5hbWUpIHtcblx0XHRcdFx0cmVmbmFtZSA9IFN0cmluZyhyZWZuYW1lKS50cmltKCk7XG5cdFx0XHRcdHJlcyArPSBgIG5hbWU9JHtDaXRlVEIuZ2V0UXVvdGVkU3RyaW5nKHJlZm5hbWUpfWA7XG5cdFx0XHRcdHJlZm9iai5yZWZuYW1lID0gcmVmbmFtZTtcblx0XHRcdH1cblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRncm91cCA9IFN0cmluZyhncm91cCkudHJpbSgpO1xuXHRcdFx0XHRyZXMgKz0gYCBncm91cD0ke0NpdGVUQi5nZXRRdW90ZWRTdHJpbmcoZ3JvdXApfWA7XG5cdFx0XHRcdHJlZm9iai5yZWZncm91cCA9IGdyb3VwO1xuXHRcdFx0fVxuXHRcdFx0cmVzICs9ICc+Jztcblx0XHR9XG5cdFx0bGV0IGNvbnRlbnQgPSBge3ske3RlbXBsYXRlbmFtZX1gO1xuXHRcdGZvciAoZyBpbiB0ZW1wbGF0ZS5pbmNyZW1lbnRhYmxlcykge1xuXHRcdFx0aWYgKE9iamVjdC5oYXNPd24odGVtcGxhdGUuaW5jcmVtZW50YWJsZXMsIGcpKSB7XG5cdFx0XHRcdGdyb3VwID0gdGVtcGxhdGUuaW5jcmVtZW50YWJsZXNbZ107XG5cdFx0XHRcdGZvciAoaSA9IDE7IGkgPD0gZ3JvdXAudmFsOyBpKyspIHtcblx0XHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgZ3JvdXAuZmllbGRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZG5hbWUgPSBncm91cC5maWVsZHNbal0uZmllbGQ7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZGlkID0gZmllbGRuYW1lLnJlcGxhY2UoJzxOPicsIGkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZCA9ICQoYCNjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfS0ke2ZpZWxkaWR9YCkudmFsKCk7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGQpIHtcblx0XHRcdFx0XHRcdFx0Y29udGVudCArPSBgIHwke2ZpZWxkaWR9PWA7XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQgKz0gU3RyaW5nKGZpZWxkKS50cmltKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoaSA9IDA7IGkgPCB0ZW1wbGF0ZS5iYXNpYy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRlbXBsYXRlLmJhc2ljW2ldLmluY3JlbWVudF9ncm91cCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZpZWxkbmFtZSA9IHRlbXBsYXRlLmJhc2ljW2ldLmZpZWxkO1xuXHRcdFx0Y29uc3QgZmllbGQgPSAkKGAjY2l0ZS0ke0NpdGVUQi5lc2NTdHIodGVtcGxhdGUuc2hvcnRmb3JtKX0tJHtmaWVsZG5hbWV9YCkudmFsKCk7XG5cdFx0XHRpZiAoZmllbGQpIHtcblx0XHRcdFx0Y29udGVudCArPSBgIHwke2ZpZWxkbmFtZX09YDtcblx0XHRcdFx0Y29udGVudCArPSBTdHJpbmcoZmllbGQpLnRyaW0oKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCRib2R5LmZpbmQoJyNjaXRlLWZvcm0tc3RhdHVzJykudmFsKCkgIT09ICdjbG9zZWQnKSB7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdGVtcGxhdGUuZXh0cmEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHRlbXBsYXRlLmV4dHJhW2ldLmluY3JlbWVudF9ncm91cCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZpZWxkbmFtZSA9IHRlbXBsYXRlLmV4dHJhW2ldLmZpZWxkO1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9ICQoYCNjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfS0ke2ZpZWxkbmFtZX1gKS52YWwoKTtcblx0XHRcdFx0aWYgKGZpZWxkKSB7XG5cdFx0XHRcdFx0Y29udGVudCArPSBgIHwke2ZpZWxkbmFtZX09YDtcblx0XHRcdFx0XHRjb250ZW50ICs9IFN0cmluZyhmaWVsZCkudHJpbSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnRlbnQgKz0gJ319Jztcblx0XHRyZXMgKz0gY29udGVudDtcblx0XHRyZWZvYmouY29udGVudCA9IGNvbnRlbnQ7XG5cdFx0aWYgKCFpbm5lcm9ubHkpIHtcblx0XHRcdHJlcyArPSAnPC9yZWY+Jztcblx0XHR9XG5cdFx0aWYgKGZvcmluc2VydCkge1xuXHRcdFx0Q2l0ZVRCLm1haW5SZWZMaXN0LnB1c2gocmVmb2JqKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlcztcblx0fTtcblxuXHQvLyBNYWtlIGEgcmVmZXJlbmNlIHRvIGEgbmFtZWQgcmVmXG5cdENpdGVUQi5nZXROYW1lZFJlZiA9IChyZWZuYW1lLCBmb3JpbnNlcnQpID0+IHtcblx0XHRpZiAoZm9yaW5zZXJ0KSB7XG5cdFx0XHRDaXRlVEIubWFpblJlZkxpc3QucHVzaCh7XG5cdFx0XHRcdHNob3J0dGFnOiB0cnVlLFxuXHRcdFx0XHRyZWZuYW1lLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBgPHJlZiBuYW1lPSR7Q2l0ZVRCLmdldFF1b3RlZFN0cmluZyhyZWZuYW1lKX0gLz5gO1xuXHR9O1xuXG5cdC8vIEZ1bmN0aW9uIHRvIGxvYWQgdGhlIHJlZiBsaXN0XG5cdENpdGVUQi5sb2FkUmVmcyA9ICgpID0+IHtcblx0XHRpZiAoQ2l0ZVRCLnJlZnNMb2FkZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Q2l0ZVRCLmdldFBhZ2VUZXh0KENpdGVUQi5sb2FkUmVmc0ludGVybmFsKTtcblx0fTtcblxuXHQvLyBGdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGxvYWRzIHRoZSBsaXN0IGZyb20gdGhlIHBhZ2UgdGV4dFxuXHRDaXRlVEIubG9hZFJlZnNJbnRlcm5hbCA9ICh0ZXh0KSA9PiB7XG5cdFx0Ly8gV2hhdCB0aGlzIGRvZXM6ICAgICAgICAgICAgIGV4dHJhY3QgZmlyc3QgbmFtZS9ncm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0IHNlY29uZCBuYW1lL2dyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnR0YWcgICBpbm5lciBjb250ZW50XG5cdFx0Y29uc3QgcmVmc3JlZ2V4ID1cblx0XHRcdC88ICpyZWYoPzogKyhuYW1lfGdyb3VwKSAqPSAqKD86XCIoW15cIl0qPylcInwnKFteJ10qPyknfChbXiAnXCIvPl0qPykpICopPyAqKD86ICsobmFtZXxncm91cCkgKj0gKig/OlwiKFteXCJdKj8pXCJ8JyhbXiddKj8pJ3woW14gJ1wiLz5dKj8pKSAqKT8gKig/OlxcLyAqPnw+KCg/Oi58XFxuKSo/KTwgKlxcLyAqcmVmICo+KS9naW07XG5cdFx0Ly8gVGhpcyBzaG91bGQgd29yayByZWdhcmRsZXNzIG9mIHRoZSBxdW90aW5nIHVzZWQgZm9yIG5hbWVzL2dyb3VwcyBhbmQgZm9yIGxpbmVicmVha3MgaW4gdGhlIGlubmVyIGNvbnRlbnRcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0Y29uc3QgcmVmID0gcmVmc3JlZ2V4LmV4ZWModGV4dCk7XG5cdFx0XHRpZiAocmVmID09PSBudWxsKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVmb2JqID0ge307XG5cdFx0XHRpZiAocmVmWzldKSB7XG5cdFx0XHRcdC8vIENvbnRlbnQgKyBzaG9ydCB0YWcgY2hlY2tcblx0XHRcdFx0Ly8gbXcubm90aWZ5KGBcIiR7cmVmWzldfVwiYCwge3RhZzogJ1JlZlRvb2xiYXIyLjAnLCB0eXBlOiAnd2Fybid9KTtcblx0XHRcdFx0WywgLCAsICwgLCAsICwgLCAsIHJlZm9iai5jb250ZW50XSA9IHJlZjtcblx0XHRcdFx0cmVmb2JqLnNob3J0dGFnID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZWZvYmouc2hvcnR0YWcgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlZlsxXSAhPT0gJycpIHtcblx0XHRcdFx0Ly8gRmlyc3QgbmFtZS9ncm91cFxuXHRcdFx0XHRpZiAocmVmWzJdKSB7XG5cdFx0XHRcdFx0WywgLCByZWZvYmpbYHJlZiR7cmVmWzFdfWBdXSA9IHJlZjtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWZbM10pIHtcblx0XHRcdFx0XHRbLCAsICwgcmVmb2JqW2ByZWYke3JlZlsxXX1gXV0gPSByZWY7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0WywgLCAsICwgcmVmb2JqW2ByZWYke3JlZlsxXX1gXV0gPSByZWY7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChyZWZbNV0gIT09ICcnKSB7XG5cdFx0XHRcdC8vIFNlY29uZCBuYW1lL2dyb3VwXG5cdFx0XHRcdGlmIChyZWZbNl0pIHtcblx0XHRcdFx0XHRbLCAsICwgLCAsICwgcmVmb2JqW2ByZWYke3JlZls1XX1gXV0gPSByZWY7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmVmWzddKSB7XG5cdFx0XHRcdFx0WywgLCAsICwgLCAsICwgcmVmb2JqW2ByZWYke3JlZls1XX1gXV0gPSByZWY7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0WywgLCAsICwgLCAsICwgLCByZWZvYmpbYHJlZiR7cmVmWzVdfWBdXSA9IHJlZjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Q2l0ZVRCLm1haW5SZWZMaXN0LnB1c2gocmVmb2JqKTtcblx0XHR9XG5cdFx0Q2l0ZVRCLnJlZnNMb2FkZWQgPSB0cnVlO1xuXHRcdENpdGVUQi5zZXR1cE5hbWVkUmVmcygpO1xuXHR9O1xuXG5cdC8vIEFKQVggRlVOQ1RJT05TXG5cdC8vIFBhcnNlIHNvbWUgd2lraXRleHQgYW5kIGhhbmQgaXQgb2ZmIHRvIGEgY2FsbGJhY2sgZnVuY3Rpb25cblx0Q2l0ZVRCLnBhcnNlID0gKHRleHQsIGNhbGxiYWNrKSA9PiB7XG5cdFx0Y29uc3QgcG9zdGRhdGEgPSB7XG5cdFx0XHRhY3Rpb246ICdwYXJzZScsXG5cdFx0XHR0aXRsZTogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0dGV4dCxcblx0XHRcdHByb3A6ICd0ZXh0Jyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdH07XG5cdFx0YXBpLnBvc3QocG9zdGRhdGEpLnRoZW4oKHtwYXJzZX0pID0+IHtcblx0XHRcdGNvbnN0IGh0bWwgPSBwYXJzZS50ZXh0O1xuXHRcdFx0Y2FsbGJhY2soaHRtbCk7XG5cdFx0fSk7XG5cdH07XG5cblx0Ly8gVXNlIHRoZSBBUEkgdG8gZXhwYW5kIHRlbXBsYXRlcyBvbiBzb21lIHRleHRcblx0Q2l0ZVRCLmV4cGFuZHRlbXBsYXRlcyA9ICh0ZXh0LCBjYWxsYmFjaykgPT4ge1xuXHRcdGNvbnN0IHBvc3RkYXRhID0ge1xuXHRcdFx0YWN0aW9uOiAnZXhwYW5kdGVtcGxhdGVzJyxcblx0XHRcdHRpdGxlOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHR0ZXh0LFxuXHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0fTtcblx0XHRhcGkucG9zdChwb3N0ZGF0YSkudGhlbigoe2V4cGFuZHRlbXBsYXRlc30pID0+IHtcblx0XHRcdGNvbnN0IHJlc3RleHQgPSBleHBhbmR0ZW1wbGF0ZXMud2lraXRleHQ7XG5cdFx0XHRjYWxsYmFjayhyZXN0ZXh0KTtcblx0XHR9KTtcblx0fTtcblxuXHQvLyBGdW5jdGlvbiB0byBnZXQgdGhlIHBhZ2UgdGV4dFxuXHRDaXRlVEIuZ2V0UGFnZVRleHQgPSAoY2FsbGJhY2spID0+IHtcblx0XHRjb25zdCBzZWN0aW9uID0gJGJvZHkuZmluZCgnaW5wdXRbbmFtZT13cFNlY3Rpb25dJykudmFsKCk7XG5cdFx0aWYgKHNlY3Rpb24gPT09ICcnKSB7XG5cdFx0XHRpZiAoQ2l0ZVRCLmdldE9wdGlvbignZXhwYW5kdGVtcGxhdGVzJykpIHtcblx0XHRcdFx0Q2l0ZVRCLmV4cGFuZHRlbXBsYXRlcyhcblx0XHRcdFx0XHQkYm9keS5maW5kKCd0ZXh0YXJlYVtuYW1lPXdwVGV4dGJveDFdJykud2lraUVkaXRvcignZ2V0Q29udGVudHMnKS50ZXh0KCksXG5cdFx0XHRcdFx0Y2FsbGJhY2tcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGxiYWNrKCRib2R5LmZpbmQoJ3RleHRhcmVhW25hbWU9d3BUZXh0Ym94MV0nKS53aWtpRWRpdG9yKCdnZXRDb250ZW50cycpLnRleHQoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHt3Z0FydGljbGVJZH0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdFx0XHRjb25zdCBwb3N0ZGF0YSA9IHtcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRwcm9wOiAncmV2aXNpb25zJyxcblx0XHRcdFx0cnZwcm9wOiAnY29udGVudCcsXG5cdFx0XHRcdHBhZ2VpZHM6IHdnQXJ0aWNsZUlkLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0fTtcblx0XHRcdGlmIChDaXRlVEIuZ2V0T3B0aW9uKCdleHBhbmR0ZW1wbGF0ZXMnKSkge1xuXHRcdFx0XHRwb3N0ZGF0YS5ydmV4cGFuZHRlbXBsYXRlcyA9ICcxJztcblx0XHRcdH1cblx0XHRcdGFwaS5nZXQocG9zdGRhdGEpLnRoZW4oKHtxdWVyeX0pID0+IHtcblx0XHRcdFx0Y29uc3QgcGFnZXRleHQgPSBxdWVyeS5wYWdlc1swXS5yZXZpc2lvbnNbMF0uY29udGVudDtcblx0XHRcdFx0Y2FsbGJhY2socGFnZXRleHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIFNhZmUgdmVyc2lvbiBvZiBkZWNvZGVVUklDb21wb25lbnQoKSB0aGF0IGRvZXNuJ3QgdGhyb3cgZXhjZXB0aW9ucy5cblx0Ly8gSWYgdGhlIG5hdGl2ZSBkZWNvZGVVUklDb21wb25lbnQoKSB0aHJldyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZC5cblx0Q2l0ZVRCLnNhZmVEZWNvZGVVUklDb21wb25lbnQgPSAocykgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzID0gZGVjb2RlVVJJQ29tcG9uZW50KHMpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0LyogZW1wdHkgKi9cblx0XHR9XG5cdFx0cmV0dXJuIHM7XG5cdH07XG5cblx0Ly8gQXV0b2ZpbGwgYSB0ZW1wbGF0ZSBmcm9tIGFuIElEIChJU0JOLCBET0ksIFBNSUQsIFVSTClcblx0Q2l0ZVRCLmluaXRBdXRvZmlsbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRjb25zdCBlbGVtaWQgPSAkKHRoaXMpLmF0dHIoJ2lkJykgPz8gJyc7XG5cdFx0Y29uc3QgcmVzID0gL15jaXRlLWF1dG8tKC4qPyktKC4qKS0oLiopJC8uZXhlYyhlbGVtaWQpO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IFssIHRlbSwgZmllbGQsIGF1dG90eXBlXSA9IHJlcztcblx0XHRsZXQgaWQgPSAkKGAjY2l0ZS0ke3RlbX0tJHtmaWVsZH1gKS52YWwoKTtcblx0XHRpZiAoIWlkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGxldCB1cmwgPSAnaHR0cHM6Ly9jaXRvaWQucWl1d2VuLm5ldC5jbi9sb29rdXAucGhwPyc7XG5cdFx0Ly8gQ2l0b2lkIGV4cGVjdHMgbWluaW1hbGx5IGVuY29kZWQgaW5wdXQsIHNvIGRvIHNvbWUgc3BlY3VsYXRpdmUgZGVjb2RpbmcgaGVyZSB0byBhdm9pZFxuXHRcdC8vIDQwNCBmZXRjaGVzLiBodHRwczovL3BoYWJyaWNhdG9yLndpa2ltZWRpYS5vcmcvVDE0NjUzOVxuXHRcdGlkID0gQ2l0ZVRCLnNhZmVEZWNvZGVVUklDb21wb25lbnQoaWQpO1xuXHRcdHVybCArPSBgJHthdXRvdHlwZX09JHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWA7XG5cdFx0dXJsICs9IGAmdGVtcGxhdGU9JHtlbmNvZGVVUklDb21wb25lbnQodGVtKX1gO1xuXHRcdGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzLnNldEF0dHJpYnV0ZSgnc3JjJywgdXJsKTtcblx0XHRzLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChzKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gQ2FsbGJhY2sgZm9yIGF1dG9maWxsXG5cdC8vIFRPRE86IEF1dG9maWxsIHRoZSBVUkwsIGF0IGxlYXN0IGZvciBET0lcblx0Q2l0ZVRCLmF1dG9GaWxsID0gKGRhdGEsIHRlbXBsYXRlLCB0eXBlKSA9PiB7XG5cdFx0Y29uc3QgY2wgPSBgY2l0ZS0ke3RlbXBsYXRlfS1gO1xuXHRcdGxldCBpLCBqO1xuXHRcdGxldCBjb2F1dGhvcnM7XG5cdFx0JChgLiR7Y2x9dGl0bGVgKS52YWwoZGF0YS50aXRsZSk7XG5cdFx0Ly8gRmlsbCBpbiBhdXRob3JzXG5cdFx0aWYgKGRhdGEuYXV0aG9ycyAmJiBkYXRhLmF1dGhvcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKCQoYC4ke2NsfWxhc3QtaW5jci0xYCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBjbGFzc2VzID0gJChgLiR7Y2x9bGFzdC1pbmNyLTFgKS5lcSgwKS5hdHRyKCdjbGFzcycpPy5zcGxpdCgvXFxzKy8pO1xuXHRcdFx0XHRpZiAoIWNsYXNzZXMpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IGdyb3VwID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IHBhdHQgPSAvY2l0ZS1bXi1dKj8taW5jci0oLiopLztcblx0XHRcdFx0Zm9yIChjb25zdCBjbGFzc18gb2YgY2xhc3Nlcykge1xuXHRcdFx0XHRcdGlmIChwYXR0LmV4ZWMoY2xhc3NfKSkge1xuXHRcdFx0XHRcdFx0WywgZ3JvdXBdID0gcGF0dC5leGVjKGNsYXNzXyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0JChgLiR7Y2x9bGFzdC1pbmNyLTFgKS52YWwoZGF0YS5hdXRob3JzWzBdWzBdKTtcblx0XHRcdFx0JChgLiR7Y2x9Zmlyc3QtaW5jci0xYCkudmFsKGRhdGEuYXV0aG9yc1swXVsxXSk7XG5cdFx0XHRcdGNvbnN0IGVsZW1pZCA9IGAjY2l0ZS1pbmNyLSR7dGVtcGxhdGV9LSR7Z3JvdXB9YDtcblx0XHRcdFx0Zm9yIChpID0gMjsgaSA8IGRhdGEuYXV0aG9ycy5sZW5ndGggKyAxOyBpKyspIHtcblx0XHRcdFx0XHQkKGVsZW1pZCkudHJpZ2dlcignY2xpY2snKTtcblx0XHRcdFx0XHQkKGAuJHtjbH1sYXN0LWluY3ItJHtpLnRvU3RyaW5nKCl9YCkudmFsKGRhdGEuYXV0aG9yc1tpIC0gMV1bMF0pO1xuXHRcdFx0XHRcdCQoYC4ke2NsfWZpcnN0LWluY3ItJHtpLnRvU3RyaW5nKCl9YCkudmFsKGRhdGEuYXV0aG9yc1tpIC0gMV1bMV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCQoYC4ke2NsfWF1dGhvci1pbmNyLTFgKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGNsYXNzZXMgPSAkKGAuJHtjbH1hdXRob3ItaW5jci0xYCkuZXEoMCkuYXR0cignY2xhc3MnKT8uc3BsaXQoL1xccysvKTtcblx0XHRcdFx0aWYgKCFjbGFzc2VzKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBncm91cCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBwYXR0ID0gL2NpdGUtW14tXSo/LWluY3ItKC4qKS87XG5cdFx0XHRcdGZvciAoY29uc3QgY2xhc3NfIG9mIGNsYXNzZXMpIHtcblx0XHRcdFx0XHRpZiAocGF0dC5leGVjKGNsYXNzXykpIHtcblx0XHRcdFx0XHRcdFssIGdyb3VwXSA9IHBhdHQuZXhlYyhjbGFzc18pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdCQoYC4ke2NsfWF1dGhvci1pbmNyLTFgKS52YWwoZGF0YS5hdXRob3JzWzBdLmpvaW4oJywgJykpO1xuXHRcdFx0XHRjb25zdCBlbGVtaWQgPSBgI2NpdGUtaW5jci0ke3RlbXBsYXRlfS0ke2dyb3VwfWA7XG5cdFx0XHRcdGZvciAoaSA9IDI7IGkgPCBkYXRhLmF1dGhvcnMubGVuZ3RoICsgMTsgaSsrKSB7XG5cdFx0XHRcdFx0JChlbGVtaWQpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdFx0XHRcdFx0JChgLiR7Y2x9YXV0aG9yLWluY3ItJHtpLnRvU3RyaW5nKCl9YCkudmFsKGRhdGEuYXV0aG9yc1tpIC0gMV0uam9pbignLCAnKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJChgLiR7Y2x9bGFzdDFgKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGRhdGEuYXV0aG9ycyAmJiBpIDwgZGF0YS5hdXRob3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKCQoYC4ke2NsfWxhc3Qke2kgKyAxfWApLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0JChgLiR7Y2x9bGFzdCR7aSArIDF9YCkudmFsKGRhdGEuYXV0aG9yc1tpXVswXSk7XG5cdFx0XHRcdFx0XHQkKGAuJHtjbH1maXJzdCR7aSArIDF9YCkudmFsKGRhdGEuYXV0aG9yc1tpXVsxXSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvYXV0aG9ycyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yIChqID0gaTsgaiA8IGRhdGEuYXV0aG9ycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRjb2F1dGhvcnMucHVzaChkYXRhLmF1dGhvcnNbal0uam9pbignLCAnKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQkKGAuJHtjbH1jb2F1dGhvcnNgKS52YWwoY29hdXRob3JzLmpvaW4oJzsgJykpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCQoYC4ke2NsfWF1dGhvcjFgKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgYXV0aG9ycyA9IFtdO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBkYXRhLmF1dGhvcnMgJiYgaSA8IGRhdGEuYXV0aG9ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGF1dGhvcnMucHVzaChkYXRhLmF1dGhvcnNbaV0uam9pbignLCAnKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JChgLiR7Y2x9YXV0aG9yc2ApLnZhbChhdXRob3JzLmpvaW4oJzsgJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChpID0gMDsgZGF0YS5hdXRob3JzICYmIGkgPCBkYXRhLmF1dGhvcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoJChgLiR7Y2x9YXV0aG9yJHtpICsgMX1gKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdCQoYC4ke2NsfWF1dGhvciR7aSArIDF9YCkudmFsKGRhdGEuYXV0aG9yc1tpXS5qb2luKCcsICcpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29hdXRob3JzID0gW107XG5cdFx0XHRcdFx0XHRmb3IgKGogPSBpOyBqIDwgZGF0YS5hdXRob3JzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdGNvYXV0aG9ycy5wdXNoKGRhdGEuYXV0aG9yc1tqXS5qb2luKCcsICcpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCQoYC4ke2NsfWNvYXV0aG9yc2ApLnZhbChjb2F1dGhvcnMuam9pbignOyAnKSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGb3JtYXQgcGFydGlhbCBkYXRlcyBvZiB0aGUgZm9ybWF0IFlZWVktTU0sIFlZWVktTU0tWFgsIG9yIFlZWVktTU0tREQgY29ycmVjdGx5XG5cdFx0aWYgKGRhdGEuZGF0ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgRFQgPSBuZXcgRGF0ZShkYXRhLmRhdGUpO1xuXHRcdFx0XHRpZiAoL15cXGR7NH0tXFxkezJ9KC1YWCk/JC9pLnRlc3QoZGF0YS5kYXRlKSkge1xuXHRcdFx0XHRcdGRhdGEuZGF0ZSA9IGRhdGEuZGF0ZS5yZXBsYWNlKCctWFgnLCAnJyk7XG5cdFx0XHRcdFx0JChgLiR7Y2x9ZGF0ZWApLnZhbChDaXRlVEIuZm9ybWF0RGF0ZShEVCwgZmFsc2UsIHRydWUpKTtcblx0XHRcdFx0fSBlbHNlIGlmICgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Py9pLnRlc3QoZGF0YS5kYXRlKSkge1xuXHRcdFx0XHRcdCQoYC4ke2NsfWRhdGVgKS52YWwoQ2l0ZVRCLmZvcm1hdERhdGUoRFQsIHRydWUsIHRydWUpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKGAuJHtjbH1kYXRlYCkudmFsKGRhdGEuZGF0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHQvKiBlbXB0eSAqL1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKGAuJHtjbH1kYXRlYCkudmFsKGRhdGEuZGF0ZSk7XG5cdFx0fVxuXG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlICdwbWlkJzpcblx0XHRcdGNhc2UgJ2RvaSc6XG5cdFx0XHRcdCQoYC4ke2NsfWpvdXJuYWxgKS52YWwoZGF0YS5qb3VybmFsKTtcblx0XHRcdFx0JChgLiR7Y2x9dm9sdW1lYCkudmFsKGRhdGEudm9sdW1lKTtcblx0XHRcdFx0JChgLiR7Y2x9aXNzdWVgKS52YWwoZGF0YS5pc3N1ZSk7XG5cdFx0XHRcdCQoYC4ke2NsfXBhZ2VzYCkudmFsKGRhdGEucGFnZXMpO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ3BtaWQnICYmIGRhdGEuZG9pKSB7XG5cdFx0XHRcdFx0JChgLiR7Y2x9ZG9pYCkudmFsKGRhdGEuZG9pKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdpc2JuJzpcblx0XHRcdFx0JChgLiR7Y2x9cHVibGlzaGVyYCkudmFsKGRhdGEucHVibGlzaGVyKTtcblx0XHRcdFx0JChgLiR7Y2x9bG9jYXRpb25gKS52YWwoZGF0YS5sb2NhdGlvbik7XG5cdFx0XHRcdCQoYC4ke2NsfWVkaXRpb25gKS52YWwoZGF0YS5lZGl0aW9uKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdFx0JChgLiR7Y2x9am91cm5hbGApLnZhbChkYXRhLmpvdXJuYWwpO1xuXHRcdFx0XHQkKGAuJHtjbH12b2x1bWVgKS52YWwoZGF0YS52b2x1bWUpO1xuXHRcdFx0XHQkKGAuJHtjbH1pc3N1ZWApLnZhbChkYXRhLmlzc3VlKTtcblx0XHRcdFx0JChgLiR7Y2x9cGFnZXNgKS52YWwoZGF0YS5wYWdlcyk7XG5cdFx0XHRcdCQoYC4ke2NsfXB1Ymxpc2hlcmApLnZhbChkYXRhLnB1Ymxpc2hlcik7XG5cdFx0XHRcdCQoYC4ke2NsfWVkaXRpb25gKS52YWwoZGF0YS5lZGl0aW9uKTtcblx0XHRcdFx0JChgLiR7Y2x9aXNibmApLnZhbChkYXRhLmlzYm4pO1xuXHRcdFx0XHQkKGAuJHtjbH1pc3NuYCkudmFsKGRhdGEuaXNzbik7XG5cdFx0XHRcdCQoYC4ke2NsfWRvaWApLnZhbChkYXRhLmRvaSk7XG5cdFx0XHRcdC8vIFwiZW4tVVNcIiBpc24ndCBhIHZhbGlkIHZhbHVlIGZvciB0aGUgbGFuZ3VhZ2UgcGFyYW1ldGVyXG5cdFx0XHRcdGlmIChkYXRhLmxhbmd1YWdlICYmIGRhdGEubGFuZ3VhZ2UgIT09ICdlbi1VUycgJiYgZGF0YS5sYW5ndWFnZSAhPT0gJ2VuLUdCJykge1xuXHRcdFx0XHRcdCQoYC4ke2NsfWxhbmd1YWdlYCkudmFsKGRhdGEubGFuZ3VhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQoYC4ke2NsfWNoYXB0ZXJgKS52YWwoZGF0YS5jaGFwdGVyKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fTtcblxuXHQvLyBGT1JNIERJQUxPRyBGVU5DVElPTlNcblx0Ly8gQWRkIG5ldyBpbmNyZW1lbnRhYmxlIGZpZWxkc1xuXHRDaXRlVEIuaW5jcmVtZW50RmllbGRzID0gZnVuY3Rpb24gKCkge1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gQ2l0ZVRCLmdldE9wZW5UZW1wbGF0ZSgpO1xuXHRcdGNvbnN0IFtjdXJyZW50cm93XSA9ICQodGhpcykucGFyZW50cygndHInKTtcblx0XHQkKHRoaXMpLnByZXYoKS5jc3MoJ3dpZHRoJywgJzEwMCUnKTtcblx0XHQkKHRoaXMpLmRldGFjaCgpO1xuXHRcdGNvbnN0IGVsZW1pZCA9ICQodGhpcykuYXR0cignaWQnKSA/PyAnJztcblx0XHRjb25zdCByZXMgPSAvXmNpdGUtaW5jci0oLio/KS0oLiopJC8uZXhlYyhlbGVtaWQpO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IFssICwgZ3JvdXBdID0gcmVzO1xuXHRcdGNvbnN0IGluY3JlbWVudHMgPSB0ZW1wbGF0ZS5pbmNyZW1lbnRhYmxlc1tncm91cF07XG5cdFx0Y29uc3Qge2ZpZWxkc30gPSBpbmNyZW1lbnRzO1xuXHRcdHRlbXBsYXRlLmluY3JlbWVudGFibGVzW2dyb3VwXS52YWwgKz0gMTtcblx0XHRjb25zdCB0cnMgPSB0ZW1wbGF0ZS5tYWtlRm9ybUlubmVyKGZpZWxkcywgZmFsc2UpO1xuXHRcdHRycy5yZXZlcnNlKCk7XG5cdFx0Zm9yIChjb25zdCB0ciBvZiB0cnMpIHtcblx0XHRcdCQoY3VycmVudHJvdykuYWZ0ZXIodHIpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBmaWxsIHRoZSBhY2Nlc3NkYXRlIHBhcmFtIHdpdGggdGhlIGN1cnJlbnQgZGF0ZVxuXHRDaXRlVEIuZmlsbEFjY2Vzc2RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Y29uc3QgZWxlbWlkID0gJCh0aGlzKS5hdHRyKCdpZCcpID8/ICcnO1xuXHRcdGNvbnN0IHJlcyA9IC9eY2l0ZS1kYXRlLSguKj8pLSguKikkLy5leGVjKGVsZW1pZCk7XG5cdFx0Y29uc3QgWywgaWRdID0gcmVzO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IFssICwgZmllbGRdID0gcmVzO1xuXHRcdGNvbnN0IERUID0gbmV3IERhdGUoKTtcblx0XHRjb25zdCBkYXRlc3RyID0gQ2l0ZVRCLmZvcm1hdERhdGUoRFQpO1xuXHRcdCQoYCNjaXRlLSR7aWR9LSR7ZmllbGR9YCkudmFsKGRhdGVzdHIpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHRDaXRlVEIuZm9ybWF0RGF0ZSA9IChEVCwgdXNlZGF5LCB1c2Vtb250aCkgPT4ge1xuXHRcdGlmICh1c2VkYXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dXNlZGF5ID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHVzZW1vbnRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHVzZW1vbnRoID0gdHJ1ZTtcblx0XHR9XG5cdFx0bGV0IGRhdGVzdHIgPSBDaXRlVEIuZ2V0T3B0aW9uKCdkYXRlIGZvcm1hdCcpO1xuXHRcdGxldCB6bW9udGggPSAnJztcblx0XHRsZXQgbW9udGggPSBEVC5nZXRVVENNb250aCgpICsgMTtcblx0XHRpZiAobW9udGggPCAxMCkge1xuXHRcdFx0em1vbnRoID0gYDAke21vbnRoLnRvU3RyaW5nKCl9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0em1vbnRoID0gbW9udGgudG9TdHJpbmcoKTtcblx0XHR9XG5cdFx0bW9udGggPSBtb250aC50b1N0cmluZygpO1xuXHRcdGxldCB6ZGF0ZSA9ICcnO1xuXHRcdGxldCBkYXRlID0gRFQuZ2V0VVRDRGF0ZSgpO1xuXHRcdGlmIChkYXRlIDwgMTApIHtcblx0XHRcdHpkYXRlID0gYDAke2RhdGUudG9TdHJpbmcoKX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR6ZGF0ZSA9IGRhdGUudG9TdHJpbmcoKTtcblx0XHR9XG5cdFx0ZGF0ZSA9IGRhdGUudG9TdHJpbmcoKTtcblx0XHRpZiAodXNlZGF5KSB7XG5cdFx0XHRkYXRlc3RyID0gZGF0ZXN0ci5yZXBsYWNlKCc8ZGF0ZT4nLCBkYXRlKTtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzx6ZGF0ZT4nLCB6ZGF0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzxkYXRlPicsICcnKTtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzx6ZGF0ZT4nLCAnJyk7XG5cdFx0fVxuXHRcdGlmICh1c2Vtb250aCkge1xuXHRcdFx0ZGF0ZXN0ciA9IGRhdGVzdHIucmVwbGFjZSgnPG1vbnRoPicsIG1vbnRoKTtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzx6bW9udGg+Jywgem1vbnRoKTtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzxtb250aG5hbWU+JywgQ2l0ZVRCLmdldE9wdGlvbignbW9udGhzJylbRFQuZ2V0VVRDTW9udGgoKV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRlc3RyID0gZGF0ZXN0ci5yZXBsYWNlKCc8bW9udGg+JywgJycpO1xuXHRcdFx0ZGF0ZXN0ciA9IGRhdGVzdHIucmVwbGFjZSgnPHptb250aD4nLCAnJyk7XG5cdFx0XHRkYXRlc3RyID0gZGF0ZXN0ci5yZXBsYWNlKCc8bW9udGhuYW1lPicsICcnKTtcblx0XHR9XG5cdFx0ZGF0ZXN0ciA9IGRhdGVzdHIucmVwbGFjZSgnPHllYXI+JywgRFQuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpKTtcblx0XHRyZXR1cm4gZGF0ZXN0ci5yZXBsYWNlKC9eWyAvXFwtLC5dKiguKj8pWyAvXFwtLC5dKiQvZywgJyQxJyk7IC8vIENsZWFudXAgYW55IGRhbmdsaW5nIHNwYWNlcyBvciBjb25uZWN0b3JzIHRoYXQgbWlnaHQgcmVzdWx0IGZyb20gb21pdHRpbmcgZGF0ZS9tb250aFxuXHR9O1xuXG5cdC8vIEZ1bmN0aW9uIGNhbGxlZCBhZnRlciB0aGUgcmVmIGxpc3QgaXMgbG9hZGVkLCB0byBhY3R1YWxseSBzZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBuYW1lZCByZWYgZGlhbG9nXG5cdC8vIFVudGlsIHRoZSBsaXN0IGlzIGxvYWRlZCwgaXRzIGp1c3QgYSBcIkxvYWRpbmdcIiBwbGFjZWhvbGRlclxuXHRDaXRlVEIuc2V0dXBOYW1lZFJlZnMgPSAoKSA9PiB7XG5cdFx0Y29uc3QgbmFtZXMgPSBbXTtcblx0XHRsZXQgaTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgQ2l0ZVRCLm1haW5SZWZMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoIUNpdGVUQi5tYWluUmVmTGlzdFtpXS5zaG9ydHRhZyAmJiBDaXRlVEIubWFpblJlZkxpc3RbaV0ucmVmbmFtZSkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKENpdGVUQi5tYWluUmVmTGlzdFtpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHN0dWZmID0gJCgnPGRpdj4nKTtcblx0XHQkYm9keS5maW5kKCcjY2l0ZXRvb2xiYXItbmFtZWRyZWZzJykuaHRtbChzdHVmZik7XG5cdFx0aWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0c3R1ZmYuaHRtbChnZXRNZXNzYWdlKCdjaXRlLW5vLW5hbWVkcmVmcycpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R1ZmYuaHRtbChnZXRNZXNzYWdlKCdjaXRlLW5hbWVkcmVmcy1pbnRybycpKTtcblx0XHRcdGNvbnN0IHNlbGVjdCA9ICQoJzxzZWxlY3Q+JykuYXR0cignaWQnLCAnY2l0ZS1uYW1lZHJlZi1zZWxlY3QnKTtcblx0XHRcdHNlbGVjdC5hcHBlbmQoJCgnPG9wdGlvbj4nKS5hdHRyKCd2YWx1ZScsICcnKS50ZXh0KGdldE1lc3NhZ2UoJ2NpdGUtbmFtZWQtcmVmcy1kcm9wZG93bicpKSk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c2VsZWN0LmFwcGVuZCgkKCc8b3B0aW9uPicpLnRleHQobmFtZXNbaV0ucmVmbmFtZSkpO1xuXHRcdFx0fVxuXHRcdFx0c3R1ZmYuYWZ0ZXIoc2VsZWN0KTtcblx0XHRcdHNlbGVjdC5iZWZvcmUoJzxicj4nKTtcblx0XHRcdGNvbnN0IHByZXZsYWJlbCA9ICQoJzxkaXY+Jylcblx0XHRcdFx0LmF0dHIoJ2lkJywgJ2NpdGUtbnJlZi1wcmV2aWV3LWxhYmVsJylcblx0XHRcdFx0LmNzcygnZGlzcGxheScsICdub25lJylcblx0XHRcdFx0Lmh0bWwoZ2V0TWVzc2FnZSgnY2l0ZS1yYXctcHJldmlldycpKTtcblx0XHRcdHNlbGVjdC5hZnRlcihwcmV2bGFiZWwpO1xuXHRcdFx0cHJldmxhYmVsLmJlZm9yZSgnPGJyPjxicj4nKTtcblx0XHRcdHByZXZsYWJlbC5hZnRlcignPGRpdiBpZD1cImNpdGUtbmFtZWRyZWYtcHJldmlld1wiIHN0eWxlPVwicGFkZGluZzowLjVlbTsgZm9udC1zaXplOjExMCVcIiAvPicpO1xuXHRcdFx0Y29uc3QgcGFyc2VsYWJlbCA9ICQoJzxzcGFuPicpXG5cdFx0XHRcdC5hdHRyKCdpZCcsICdjaXRlLXBhcnNlZC1sYWJlbCcpXG5cdFx0XHRcdC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpXG5cdFx0XHRcdC5odG1sKGdldE1lc3NhZ2UoJ2NpdGUtcGFyc2VkLWxhYmVsJykpO1xuXHRcdFx0JGJvZHkuZmluZCgnI2NpdGUtbmFtZWRyZWYtcHJldmlldycpLmFmdGVyKHBhcnNlbGFiZWwpO1xuXHRcdFx0cGFyc2VsYWJlbC5hZnRlcignPGRpdiBpZD1cImNpdGUtbmFtZWRyZWYtcGFyc2VkXCIgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTowLjVlbTsgZm9udC1zaXplOjExMCVcIiAvPicpO1xuXHRcdFx0Y29uc3QgbGluayA9ICQoJzxhPicpXG5cdFx0XHRcdC5hdHRyKHtcblx0XHRcdFx0XHRocmVmOiAnIycsXG5cdFx0XHRcdFx0aWQ6ICdjaXRlLW5yZWYtcGFyc2UnLFxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRtYXJnaW46ICcwIDFlbSAwIDFlbScsXG5cdFx0XHRcdFx0ZGlzcGxheTogJ25vbmUnLFxuXHRcdFx0XHRcdGNvbG9yOiAnIzAwMDA4YicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0bGluay5odG1sKGdldE1lc3NhZ2UoJ2NpdGUtZm9ybS1wYXJzZScpKTtcblx0XHRcdCRib2R5LmZpbmQoJyNjaXRlLW5hbWVkcmVmLXBhcnNlZCcpLmFmdGVyKGxpbmspO1xuXG5cdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1zZWxlY3QnKS5vbignY2hhbmdlJywgQ2l0ZVRCLm5hbWVkUmVmU2VsZWN0Q2xpY2spO1xuXHRcdFx0JGJvZHkuZmluZCgnI2NpdGUtbnJlZi1wYXJzZScpLm9uKCdjbGljaycsIENpdGVUQi5ucmVmUGFyc2VDbGljayk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBwYXJzZWQgcHJldmlld1xuXHRDaXRlVEIuZmlsbE5yZWZQcmV2aWV3ID0gKHBhcnNlZCkgPT4ge1xuXHRcdCRib2R5LmZpbmQoJyNjaXRlLXBhcnNlZC1sYWJlbCcpLnNob3coKTtcblx0XHQkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1wYXJzZWQnKS5odG1sKHBhcnNlZCk7XG5cdH07XG5cblx0Ly8gQ2xpY2sgaGFuZGxlciBmb3IgdGhlIG5hbWVkLXJlZiBwYXJzZWQgcHJldmlld1xuXHRDaXRlVEIubnJlZlBhcnNlQ2xpY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgY2hvaWNlID0gJGJvZHkuZmluZCgnI2NpdGUtbmFtZWRyZWYtc2VsZWN0JykudmFsKCk7XG5cdFx0aWYgKGNob2ljZSA9PT0gJycpIHtcblx0XHRcdCRib2R5LmZpbmQoJyNjaXRlLXBhcnNlZC1sYWJlbCcpLmhpZGUoKTtcblx0XHRcdCRib2R5LmZpbmQoJyNjaXRlLW5hbWVkcmVmLXBhcnNlZCcpLnRleHQoJycpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHQkYm9keS5maW5kKCcjY2l0ZS1ucmVmLXBhcnNlJykuaGlkZSgpO1xuXHRcdGZvciAoY29uc3QgcmVmIG9mIENpdGVUQi5tYWluUmVmTGlzdCkge1xuXHRcdFx0aWYgKCFyZWYuc2hvcnR0YWcgJiYgcmVmLnJlZm5hbWUgPT09IGNob2ljZSkge1xuXHRcdFx0XHRDaXRlVEIucGFyc2UocmVmLmNvbnRlbnQsIENpdGVUQi5maWxsTnJlZlByZXZpZXcpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8vIENsaWNrIGhhbmRsZXIgZm9yIHRoZSBuYW1lZC1yZWYgZHJvcGRvd25cblx0Q2l0ZVRCLmxhc3RuYW1lZHJlZmNob2ljZSA9ICcnO1xuXHRDaXRlVEIubmFtZWRSZWZTZWxlY3RDbGljayA9ICgpID0+IHtcblx0XHRjb25zdCBjaG9pY2UgPSAkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1zZWxlY3QnKS52YWwoKTtcblx0XHRpZiAoQ2l0ZVRCLmxhc3RuYW1lZHJlZmNob2ljZSA9PT0gY2hvaWNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdENpdGVUQi5sYXN0bmFtZWRyZWZjaG9pY2UgPSBjaG9pY2U7XG5cdFx0JGJvZHkuZmluZCgnI2NpdGUtcGFyc2VkLWxhYmVsJykuaGlkZSgpO1xuXHRcdCRib2R5LmZpbmQoJyNjaXRlLW5hbWVkcmVmLXBhcnNlZCcpLnRleHQoJycpO1xuXHRcdGlmIChjaG9pY2UgPT09ICcnKSB7XG5cdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1ucmVmLXByZXZpZXctbGFiZWwnKS5oaWRlKCk7XG5cdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1wcmV2aWV3JykudGV4dCgnJyk7XG5cdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1ucmVmLXBhcnNlJykuaGlkZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHJlZiBvZiBDaXRlVEIubWFpblJlZkxpc3QpIHtcblx0XHRcdGlmICghcmVmLnNob3J0dGFnICYmIHJlZi5yZWZuYW1lID09PSBjaG9pY2UpIHtcblx0XHRcdFx0JGJvZHkuZmluZCgnI2NpdGUtbnJlZi1wcmV2aWV3LWxhYmVsJykuc2hvdygpO1xuXHRcdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1wcmV2aWV3JykudGV4dChyZWYuY29udGVudCk7XG5cdFx0XHRcdGlmIChDaXRlVEIuZ2V0T3B0aW9uKCdhdXRvcGFyc2UnKSkge1xuXHRcdFx0XHRcdENpdGVUQi5ucmVmUGFyc2VDbGljaygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCRib2R5LmZpbmQoJyNjaXRlLW5yZWYtcGFyc2UnKS5zaG93KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Ly8gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBhcnNlZCBwcmV2aWV3XG5cdENpdGVUQi5maWxsVGVtcGxhdGVQcmV2aWV3ID0gKHRleHQpID0+IHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IENpdGVUQi5nZXRPcGVuVGVtcGxhdGUoKTtcblx0XHRjb25zdCBkaXYgPSAkKGAjY2l0ZXRvb2xiYXItJHtDaXRlVEIuZXNjU3RyKHRlbXBsYXRlLnNob3J0Zm9ybSl9YCk7XG5cdFx0ZGl2LmZpbmQoJy5jaXRlLXByZXYtcGFyc2VkLWxhYmVsJykuc2hvdygpO1xuXHRcdGRpdi5maW5kKCcuY2l0ZS1wcmV2aWV3LXBhcnNlZCcpLmh0bWwodGV4dCk7XG5cdH07XG5cblx0Ly8gQ2xpY2sgaGFuZGxlciBmb3IgdGVtcGxhdGUgcGFyc2VkIHByZXZpZXdcblx0Q2l0ZVRCLnByZXZQYXJzZUNsaWNrID0gKCkgPT4ge1xuXHRcdGNvbnN0IHJlZiA9IENpdGVUQi5nZXRSZWYodHJ1ZSwgZmFsc2UpO1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gQ2l0ZVRCLmdldE9wZW5UZW1wbGF0ZSgpO1xuXHRcdGNvbnN0IGRpdiA9ICQoYCNjaXRldG9vbGJhci0ke0NpdGVUQi5lc2NTdHIodGVtcGxhdGUuc2hvcnRmb3JtKX1gKTtcblx0XHRkaXYuZmluZCgnLmNpdGUtcHJldi1wYXJzZScpLmhpZGUoKTtcblx0XHRDaXRlVEIucGFyc2UocmVmLCBDaXRlVEIuZmlsbFRlbXBsYXRlUHJldmlldyk7XG5cdH07XG5cblx0Ly8gU2hvdy9oaWRlIHRoZSBleHRyYSBmaWVsZHMgaW4gdGhlIGRpYWxvZyBib3hcblx0Q2l0ZVRCLnNob3dIaWRlRXh0cmEgPSAoKSA9PiB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBDaXRlVEIuZ2V0T3BlblRlbXBsYXRlKCk7XG5cdFx0Y29uc3QgZGl2ID0gJChgI2NpdGV0b29sYmFyLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfWApO1xuXHRcdGNvbnN0IHNldHRpbmcgPSBkaXYuZmluZCgnLmNpdGUtZm9ybS1zdGF0dXMnKS52YWwoKTtcblx0XHRpZiAoc2V0dGluZyA9PT0gJ2Nsb3NlZCcpIHtcblx0XHRcdGRpdi5maW5kKCcuY2l0ZS1mb3JtLXN0YXR1cycpLnZhbCgnb3BlbicpO1xuXHRcdFx0ZGl2LmZpbmQoJy5jaXRlLWV4dHJhLWZpZWxkcycpLnNob3coMSwgKCkgPT4ge1xuXHRcdFx0XHQvLyBqUXVlcnkgYWRkcyBgZGlzcGxheTogYmxvY2tgLCB3aGljaCBzY3Jld3MgdGhpbmdzIHVwXG5cdFx0XHRcdGRpdi5maW5kKCcuY2l0ZS1leHRyYS1maWVsZHMnKS5jc3Moe1xuXHRcdFx0XHRcdHdpZHRoOiAnMTAwJScsXG5cdFx0XHRcdFx0J2JhY2tncm91bmQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXYuZmluZCgnLmNpdGUtZm9ybS1zdGF0dXMnKS52YWwoJ2Nsb3NlZCcpO1xuXHRcdFx0ZGl2LmZpbmQoJy5jaXRlLWV4dHJhLWZpZWxkcycpLmhpZGUoKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gUmVzZXRzIGZvcm0gZmllbGRzIGFuZCBwcmV2aWV3c1xuXHQvLyBSZXNldHMgZm9ybSBmaWVsZHMgYW5kIHByZXZpZXdzXG5cdENpdGVUQi5yZXNldEZvcm0gPSAoKSA9PiB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBDaXRlVEIuZ2V0T3BlblRlbXBsYXRlKCk7XG5cdFx0Y29uc3QgZGl2ID0gJChgI2NpdGV0b29sYmFyLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfWApO1xuXHRcdGRpdi5odG1sKHRlbXBsYXRlLmdldEZvcm0oKSk7XG5cdH07XG5cblx0Ly8gU1RSSU5HIFVUSUxJVFkgRlVOQ1RJT05TXG5cdC8vIFJldHVybnMgYSBzdHJpbmcgcXVvdGVkIGFzIG5lY2Vzc2FyeSBmb3IgbmFtZS9ncm91cCBhdHRyaWJ1dGVzXG5cdENpdGVUQi5nZXRRdW90ZWRTdHJpbmcgPSAocykgPT4ge1xuXHRcdGNvbnN0IHNxID0gLycvLnRlc3Qocyk7IC8vIHNpbmdsZSBxdW90ZXNcblx0XHRjb25zdCBkcSA9IC9cIi8udGVzdChzKTsgLy8gZG91YmxlIHF1b3Rlc1xuXHRcdGlmICghc3EgJiYgIWRxKSB7XG5cdFx0XHQvLyBBbHdheXMgcXVvdGVzIGZvciBub24tbGF0aW4gYWxwaGFiZXRcblx0XHRcdHJldHVybiBgXCIke3N9XCJgO1xuXHRcdH0gZWxzZSBpZiAoIWRxKSB7XG5cdFx0XHQvLyBDYW4gdXNlIGRvdWJsZSBxdW90ZXNcblx0XHRcdHJldHVybiBgXCIke3N9XCJgO1xuXHRcdH0gZWxzZSBpZiAoIXNxKSB7XG5cdFx0XHQvLyBDYW4gdXNlIHNpbmdsZSBxdW90ZXNcblx0XHRcdHJldHVybiBgJyR7c30nYDtcblx0XHR9XG5cdFx0Ly8gSGFzIGRvdWJsZSBhbmQgc2luZ2xlIHF1b3Rlc1xuXHRcdHMgPSBzLnJlcGxhY2UoL1wiL2csIFwiJ1wiKTtcblx0XHRyZXR1cm4gYFwiJHtzfVwiYDtcblx0fTtcblxuXHQvLyBGaXggdXAgc3RyaW5ncyBmb3Igb3V0cHV0IC0gY2FwaXRhbGl6ZSBmaXJzdCBjaGFyLCByZXBsYWNlIHVuZGVyc2NvcmVzIHdpdGggc3BhY2VzXG5cdENpdGVUQi5maXhTdHIgPSAocykgPT4ge1xuXHRcdHMgPSBzLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpO1xuXHRcdHMgPSBzLnJlcGxhY2UoJ18nLCAnICcpO1xuXHRcdHJldHVybiBzO1xuXHR9O1xuXG5cdC8vIEVzY2FwZSBzcGFjZXMgYW5kIHF1b3RlcyBmb3IgdXNlIGluIEhUTUwgY2xhc3Nlcy9pZHNcblx0Q2l0ZVRCLmVzY1N0ciA9IChzKSA9PiB7XG5cdFx0cmV0dXJuIHNcblx0XHRcdC5yZXBsYWNlKC9cXHMvZywgJy0nKVxuXHRcdFx0LnJlcGxhY2UoLycvZywgU3RyaW5nLnJhd2BcXCdgKVxuXHRcdFx0LnJlcGxhY2UoL1wiL2csIFN0cmluZy5yYXdgXFxcImApO1xuXHR9O1xuXG5cdC8vIE1JU0MgRlVOQ1RJT05TXG5cdC8vIERldGVybWluZSB3aGljaCB0ZW1wbGF0ZSBmb3JtIGlzIG9wZW4sIGFuZCBnZXQgdGhlIHRlbXBsYXRlIG9iamVjdCBmb3IgaXRcblx0Q2l0ZVRCLmdldE9wZW5UZW1wbGF0ZSA9ICgpID0+IHtcblx0XHRjb25zdCBkaWFsb2dzID0gJGJvZHkuZmluZCgnLnVpLWRpYWxvZy1jb250ZW50LnVpLXdpZGdldC1jb250ZW50OnZpc2libGUnKTtcblx0XHRjb25zdCB0ZW1wbGF0ZW5hbWUgPSAkKGRpYWxvZ3NbMF0pLmZpbmQoJy5jaXRlLXRlbXBsYXRlJykudmFsKCk7XG5cdFx0cmV0dXJuIENpdGVUQi5UZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcblx0fTtcblxuXHQvLyBEaXNwbGF5IHRoZSByZXBvcnQgZm9yIHRoZSBlcnJvciBjaGVja3Ncblx0Q2l0ZVRCLmRpc3BsYXlFcnJvcnMgPSAoZXJyb3JzKSA9PiB7XG5cdFx0JGJvZHkuZmluZCgnI2NpdGUtZXJyLXJlcG9ydCcpLnJlbW92ZSgpO1xuXHRcdGNvbnN0IHRhYmxlID0gJCgnPHRhYmxlPicpLmF0dHIoJ2lkJywgJ2NpdGUtZXJyLXJlcG9ydCcpLmNzcyh7XG5cdFx0XHR3aWR0aDogJzEwMCUnLFxuXHRcdFx0Ym9yZGVyOiAnMXB4IHNvbGlkICNBOUE5QTknLFxuXHRcdFx0J2JhY2tncm91bmQtY29sb3InOiAnI0ZGRUZENScsXG5cdFx0XHRwYWRkaW5nOiAnMC4yNWVtJyxcblx0XHRcdCdtYXJnaW4tdG9wJzogJzAuNWVtJyxcblx0XHR9KTtcblx0XHQkYm9keS5maW5kKCcjZWRpdHBhZ2UtY29weXdhcm4nKS5iZWZvcmUodGFibGUpO1xuXHRcdGxldCB0cjtcblx0XHRjb25zdCB0cjEgPSAkKCc8dHI+JykuY3NzKCd3aWR0aCcsICcxMDAlJyk7XG5cdFx0Y29uc3QgdGgxID0gJCgnPHRoPicpLmNzcygnd2lkdGgnLCAnNjAlJykuY3NzKCdmb250LXNpemUnLCAnMTEwJScpLmh0bWwoZ2V0TWVzc2FnZSgnY2l0ZS1lcnItcmVwb3J0LWhlYWRpbmcnKSk7XG5cdFx0Y29uc3QgdGgyID0gJCgnPHRoPicpLmNzcygnd2lkdGgnLCAnNDAlJykuY3NzKCd0ZXh0LWFsaWduJywgJ3JpZ2h0OycpO1xuXHRcdGNvbnN0IGltID0gJCgnPGltZz4nKS5hdHRyKCdzcmMnLCAnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzL3RodW1iLzUvNTUvR3RrLXN0b3Auc3ZnLzIwcHgtR3RrLXN0b3Auc3ZnLnBuZycpO1xuXHRcdGltLmF0dHIoJ2FsdCcsIGdldE1lc3NhZ2UoJ2NpdGUtZXJyLXJlcG9ydC1jbG9zZScpKS5hdHRyKCd0aXRsZScsIGdldE1lc3NhZ2UoJ2NpdGUtZXJyLXJlcG9ydC1jbG9zZScpKTtcblx0XHRjb25zdCBhZCA9ICQoJzxhPicpLmF0dHIoe1xuXHRcdFx0aWQ6ICdjaXRlLWVyci1jaGVjay1jbG9zZScsXG5cdFx0XHRocmVmOiAnIycsXG5cdFx0fSk7XG5cdFx0YWQuYXBwZW5kKGltKTtcblx0XHR0aDIuYXBwZW5kKGFkKTtcblx0XHR0cjEuYXBwZW5kKHRoMSkuYXBwZW5kKHRoMik7XG5cdFx0dGFibGUuYXBwZW5kKHRyMSk7XG5cdFx0JGJvZHkuZmluZCgnI2NpdGUtZXJyLWNoZWNrLWNsb3NlJykub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0JGJvZHkuZmluZCgnI2NpdGUtZXJyLXJlcG9ydCcpLnJlbW92ZSgpO1xuXHRcdH0pO1xuXHRcdGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0ciA9ICQoJzx0cj4nKS5jc3MoJ3dpZHRoJywgJzEwMCUnKTtcblx0XHRcdGNvbnN0IHRkID0gJCgnPHRkPicpXG5cdFx0XHRcdC5jc3MoJ3RleHQtYWxpZ24nLCAnY2VudGVyJylcblx0XHRcdFx0LmNzcygnbWFyZ2luJywgJzEuNXB4Jylcblx0XHRcdFx0Lmh0bWwoZ2V0TWVzc2FnZSgnY2l0ZS1lcnItcmVwb3J0LWVtcHR5JykpO1xuXHRcdFx0dHIuYXBwZW5kKHRkKTtcblx0XHRcdHRhYmxlLmFwcGVuZCh0cik7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBlcnJvciBpbiBlcnJvcnMpIHtcblx0XHRcdGlmIChPYmplY3QuaGFzT3duKGVycm9ycywgZXJyb3IpKSB7XG5cdFx0XHRcdGNvbnN0IGVyciA9IGVycm9yc1tlcnJvcl07XG5cdFx0XHRcdHRyID0gJCgnPHRyPicpLmNzcygnd2lkdGgnLCAnMTAwJScpO1xuXHRcdFx0XHRjb25zdCB0ZDEgPSAkKCc8dGQ+Jylcblx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdGJvcmRlcjogJzFweCBzb2xpZCAjMDAwJyxcblx0XHRcdFx0XHRcdG1hcmdpbjogJzEuNXB4Jyxcblx0XHRcdFx0XHRcdHdpZHRoOiAnNjAlJyxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5odG1sKGVyci5lcnIpO1xuXHRcdFx0XHRjb25zdCB0ZDIgPSAkKCc8dGQ+Jylcblx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdGJvcmRlcjogJzFweCBzb2xpZCAjMDAwJyxcblx0XHRcdFx0XHRcdG1hcmdpbjogJzEuNXB4Jyxcblx0XHRcdFx0XHRcdHdpZHRoOiAnNDAlJyxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5odG1sKGdldE1lc3NhZ2UoZXJyLm1zZykpO1xuXHRcdFx0XHR0ci5hcHBlbmQodGQxKS5hcHBlbmQodGQyKTtcblx0XHRcdFx0dGFibGUuYXBwZW5kKHRyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Ly8gTG9hZCBjb25maWd1cmF0aW9uIGZvciBzaXRlXG5cdHJlZlRvb2xiYXJDb25maWcoKTtcblxuXHQvLyBFbmQgb2YgY29kZSBsb2FkZWQgb25seSBvbiBlZGl0XG59O1xuXG5leHBvcnQge3JlZlRvb2xiYXIyfTtcbiIsICIvKiBnbG9iYWwgQ2l0ZVRCICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4vdXRpbC9nZXRNZXNzYWdlJztcblxuY29uc3QgcmVmVG9vbGJhckJhc2UgPSAoKSA9PiB7XG5cdHdpbmRvdy5DaXRlVEIgfHw9IHtcblx0XHRUZW1wbGF0ZXM6IHt9LCAvLyBBbGwgdGVtcGxhdGVzXG5cdFx0T3B0aW9uczoge30sIC8vIEdsb2JhbCBvcHRpb25zXG5cdFx0VXNlck9wdGlvbnM6IHt9LCAvLyBVc2VyIG9wdGlvbnNcblx0XHREZWZhdWx0T3B0aW9uczoge30sIC8vIFNjcmlwdCBkZWZhdWx0c1xuXHR9O1xuXG5cdC8vIENsYXNzIGZvciBjaXRlIHRlbXBsYXRlc1xuXHR3aW5kb3cuQ2l0ZVRlbXBsYXRlID0gY2xhc3MgQ2l0ZVRlbXBsYXRlIHtcblx0XHRjb25zdHJ1Y3Rvcih0ZW1wbGF0ZW5hbWUsIHNob3J0Zm9ybSwgYmFzaWNmaWVsZHMsIGV4cGFuZGVkZmllbGRzKSB7XG5cdFx0XHQvLyBQcm9wZXJ0aWVzXG5cdFx0XHR0aGlzLnRlbXBsYXRlbmFtZSA9IHRlbXBsYXRlbmFtZTsgLy8gVGhlIHRlbXBsYXRlIG5hbWUgLSBcImNpdGUgd2ViXCIsIFwiY2l0ZSBib29rXCIsIGV0Yy5cblx0XHRcdHRoaXMuc2hvcnRmb3JtID0gc2hvcnRmb3JtOyAvLyBBIHNob3J0IGZvcm0sIHVzZWQgZm9yIHRoZSBkcm9wZG93biBib3hcblx0XHRcdHRoaXMuYmFzaWMgPSBiYXNpY2ZpZWxkczsgLy8gQmFzaWMgZmllbGRzIC0gYXV0aG9yLCB0aXRsZSwgcHVibGlzaGVyLi4uXG5cblx0XHRcdC8vIExlc3MgY29tbW9uIC0gcXVvdGUsIGFyY2hpdmV1cmwgLSBzaG91bGQgYmUgZXZlcnl0aGluZyB0aGUgdGVtcGxhdGUgc3VwcG9ydHMgbWludXMgdGhlIGJhc2ljIG9uZXNcblx0XHRcdHRoaXMuZXh0cmEgPSBleHBhbmRlZGZpZWxkcztcblx0XHRcdHRoaXMuaW5jcmVtZW50YWJsZXMgPSB7fTtcblxuXHRcdFx0Ly8gQWRkIGl0IHRvIHRoZSBsaXN0XG5cdFx0XHRDaXRlVEIuVGVtcGxhdGVzW3RoaXMudGVtcGxhdGVuYW1lXSA9IHRoaXM7XG5cdFx0fVxuXHRcdG1ha2VGb3JtSW5uZXIoZmllbGRzLCBpbmNyc2V0dXApIHtcblx0XHRcdGNvbnN0IHRycyA9IFtdO1xuXHRcdFx0Y29uc3QgYXV0b2ZpbGxzID0gW107XG5cdFx0XHRsZXQgdHI7XG5cdFx0XHRmb3IgKGNvbnN0IFtpLCBmaWVsZG9ial0gb2YgZmllbGRzLmVudHJpZXMoKSkge1xuXHRcdFx0XHRsZXQge2ZpZWxkfSA9IGZpZWxkb2JqO1xuXHRcdFx0XHRsZXQgbGFiZWxmaWVsZCA9IGZpZWxkb2JqLmZpZWxkO1xuXHRcdFx0XHRsZXQgYWQgPSBmYWxzZTtcblx0XHRcdFx0bGV0IGltO1xuXHRcdFx0XHRpZiAoaW5jcnNldHVwICYmIGZpZWxkb2JqLmluY3JlbWVudF9ncm91cCkge1xuXHRcdFx0XHRcdGZpZWxkID0gZmllbGRvYmouZmllbGQucmVwbGFjZSgnPE4+JywgJzEnKTtcblx0XHRcdFx0XHRsYWJlbGZpZWxkID0gZmllbGRvYmouZmllbGQucmVwbGFjZSgnPE4+JywgJycpO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXSAmJlxuXHRcdFx0XHRcdFx0IXRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXS5zZXR1cFxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgbm90IGZ1bGx5IGluaXRpYWxpemVkXG5cdFx0XHRcdFx0XHR0aGlzLmluY3JlbWVudGFibGVzW2ZpZWxkb2JqLmluY3JlbWVudF9ncm91cF0uZmllbGRzLnB1c2goZmllbGRvYmopO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXSkge1xuXHRcdFx0XHRcdFx0Ly8gT2JqZWN0IG5vdCB5ZXQgY3JlYXRlZFxuXHRcdFx0XHRcdFx0dGhpcy5pbmNyZW1lbnRhYmxlc1tmaWVsZG9iai5pbmNyZW1lbnRfZ3JvdXBdID0ge1xuXHRcdFx0XHRcdFx0XHRmaWVsZHM6IFtmaWVsZG9ial0sXG5cdFx0XHRcdFx0XHRcdHZhbDogMSxcblx0XHRcdFx0XHRcdFx0c2V0dXA6IGZhbHNlLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0dGhpcy5pbmNyZW1lbnRhYmxlc1tmaWVsZG9iai5pbmNyZW1lbnRfZ3JvdXBdICYmXG5cdFx0XHRcdFx0XHR0aGlzLmluY3JlbWVudGFibGVzW2ZpZWxkb2JqLmluY3JlbWVudF9ncm91cF0uc2V0dXBcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIEZ1bGx5IGluaXRpYWxpemVkIGZyb20gYSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mIHRoaXMgZnVuY3Rpb24sIGp1c3QgcmVzZXR0aW5nIHRoZSBudW1iZXJcblx0XHRcdFx0XHRcdHRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXS52YWwgPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChmaWVsZG9iai5pbmNyZW1lbnRfZ3JvdXApIHtcblx0XHRcdFx0XHQvLyBBZGRpbmcgYSBuZXcgcm93XG5cdFx0XHRcdFx0Y29uc3QgaW5jcnZhbCA9IHRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXS52YWw7XG5cdFx0XHRcdFx0ZmllbGQgPSBmaWVsZG9iai5maWVsZC5yZXBsYWNlKCc8Tj4nLCBpbmNydmFsLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGxhYmVsZmllbGQgPSBmaWVsZG9iai5maWVsZC5yZXBsYWNlKCc8Tj4nLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYXV0b2RhdGVGaWVsZHMgPSBDaXRlVEIuZ2V0T3B0aW9uKCdhdXRvZGF0ZSBmaWVsZHMnKTtcblx0XHRcdFx0aWYgKGF1dG9kYXRlRmllbGRzLmluY2x1ZGVzKGZpZWxkKSkge1xuXHRcdFx0XHRcdGltID0gJCgnPGltZz4nKS5hdHRyKFxuXHRcdFx0XHRcdFx0J3NyYycsXG5cdFx0XHRcdFx0XHQnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzL3RodW1iLzcvN2IvTnV2b2xhX2FwcHNfZGF0ZS5zdmcvMjBweC1OdXZvbGFfYXBwc19kYXRlLnN2Zy5wbmcnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpbS5hdHRyKCdhbHQnLCBnZXRNZXNzYWdlKCdjaXRlLWluc2VydC1kYXRlJykpLmF0dHIoJ3RpdGxlJywgZ2V0TWVzc2FnZSgnY2l0ZS1pbnNlcnQtZGF0ZScpKTtcblx0XHRcdFx0XHRhZCA9ICQoJzxhPicpLmF0dHIoJ2hyZWYnLCAnIycpO1xuXHRcdFx0XHRcdGFkLmFwcGVuZChpbSk7XG5cdFx0XHRcdFx0YWQuYXR0cignaWQnLCBgY2l0ZS1kYXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7ZmllbGR9YCk7XG5cdFx0XHRcdFx0JChkb2N1bWVudCkub24oXG5cdFx0XHRcdFx0XHQnY2xpY2snLFxuXHRcdFx0XHRcdFx0YCNjaXRlLWRhdGUtJHtDaXRlVEIuZXNjU3RyKHRoaXMuc2hvcnRmb3JtKX0tJHtmaWVsZH1gLFxuXHRcdFx0XHRcdFx0Q2l0ZVRCLmZpbGxBY2Nlc3NkYXRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmllbGRvYmouYXV0b2ZpbGxpZCkge1xuXHRcdFx0XHRcdGNvbnN0IGF1dG90eXBlID0gZmllbGRvYmouYXV0b2ZpbGxpZDtcblx0XHRcdFx0XHRpbSA9ICQoJzxpbWc+JykuYXR0cihcblx0XHRcdFx0XHRcdCdzcmMnLFxuXHRcdFx0XHRcdFx0J2h0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy90aHVtYi8xLzE3L1N5c3RlbS1zZWFyY2guc3ZnLzIwcHgtU3lzdGVtLXNlYXJjaC5zdmcucG5nJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aW0uYXR0cignYWx0JywgZ2V0TWVzc2FnZSgnY2l0ZS1hdXRvZmlsbC1hbHQnKSkuYXR0cigndGl0bGUnLCBnZXRNZXNzYWdlKCdjaXRlLWF1dG9maWxsLWFsdCcpKTtcblx0XHRcdFx0XHRhZCA9ICQoJzxhPicpLmF0dHIoJ2hyZWYnLCAnIycpO1xuXHRcdFx0XHRcdGFkLmFwcGVuZChpbSk7XG5cdFx0XHRcdFx0YWQuYXR0cignaWQnLCBgY2l0ZS1hdXRvLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7ZmllbGR9LSR7YXV0b3R5cGV9YCk7XG5cdFx0XHRcdFx0YXV0b2ZpbGxzLnB1c2goYCNjaXRlLWF1dG8tJHtDaXRlVEIuZXNjU3RyKHRoaXMuc2hvcnRmb3JtKX0tJHtmaWVsZH0tJHthdXRvdHlwZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmllbGRvYmouaW5jcmVtZW50X2J1dHRvbikge1xuXHRcdFx0XHRcdGNvbnN0IGluY3J0eXBlID0gZmllbGRvYmouaW5jcmVtZW50X2dyb3VwO1xuXHRcdFx0XHRcdGltID0gJCgnPGltZz4nKS5hdHRyKFxuXHRcdFx0XHRcdFx0J3NyYycsXG5cdFx0XHRcdFx0XHQnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzL3RodW1iL2IvYjkvTnV2b2xhX2FjdGlvbl9lZGl0X2FkZC5zdmcvMjBweC1OdXZvbGFfYWN0aW9uX2VkaXRfYWRkLnN2Zy5wbmcnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpbS5hdHRyKCdhbHQnLCBnZXRNZXNzYWdlKCdjaXRlLWluY3JlbWVudC1hbHQnKSkuYXR0cigndGl0bGUnLCBnZXRNZXNzYWdlKCdjaXRlLWluY3JlbWVudC1hbHQnKSk7XG5cdFx0XHRcdFx0YWQgPSAkKCc8YT4nKS5hdHRyKCdocmVmJywgJyMnKTtcblx0XHRcdFx0XHRhZC5hcHBlbmQoaW0pO1xuXHRcdFx0XHRcdGFkLmF0dHIoJ2lkJywgYGNpdGUtaW5jci0ke0NpdGVUQi5lc2NTdHIodGhpcy5zaG9ydGZvcm0pfS0ke2luY3J0eXBlfWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGRpc3BsYXkgPSBnZXRNZXNzYWdlKGBjaXRlLSR7bGFiZWxmaWVsZH0tbGFiZWxgKTtcblx0XHRcdFx0aWYgKHR5cGVvZiBkaXNwbGF5ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdGRpc3BsYXkgPSBmaWVsZG9iai5sYWJlbCA/IENpdGVUQi5maXhTdHIoZmllbGRvYmoubGFiZWwpIDogQ2l0ZVRCLmZpeFN0cihsYWJlbGZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0b29sdGlwID0gZmllbGRvYmoudG9vbHRpcFxuXHRcdFx0XHRcdD8gJCgnPGFiYnI+JykuYXR0cigndGl0bGUnLCBnZXRNZXNzYWdlKGZpZWxkb2JqLnRvb2x0aXApKS5odG1sKCQoJzxzdXA+JykudGV4dCgnPycpKVxuXHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRcdGxldCBpbnB1dCA9ICcnO1xuXHRcdFx0XHRpbnB1dCA9ICQoJzxpbnB1dD4nKS5hdHRyKHtcblx0XHRcdFx0XHR0YWJpbmRleDogJzEnLFxuXHRcdFx0XHRcdHN0eWxlOiBhZCA/ICd3aWR0aDogODUlJyA6ICd3aWR0aDogMTAwJScsXG5cdFx0XHRcdFx0dHlwZTogJ3RleHQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aW5wdXQuYXR0cignaWQnLCBgY2l0ZS0ke0NpdGVUQi5lc2NTdHIodGhpcy5zaG9ydGZvcm0pfS0ke2ZpZWxkfWApO1xuXHRcdFx0XHRpZiAoZmllbGRvYmouYXV0b2ZpbGxwcm9wKSB7XG5cdFx0XHRcdFx0bGV0IGNsYXNzbmFtZSA9IGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7ZmllbGRvYmouYXV0b2ZpbGxwcm9wfWA7XG5cdFx0XHRcdFx0aWYgKGZpZWxkb2JqLmluY3JlbWVudF9ncm91cCkge1xuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1lZGlhd2lraS9jbGFzcy1kb2Ncblx0XHRcdFx0XHRcdGlucHV0LmFkZENsYXNzKGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LWluY3ItJHtmaWVsZG9iai5pbmNyZW1lbnRfZ3JvdXB9YCk7XG5cdFx0XHRcdFx0XHRjbGFzc25hbWUgKz0gYC0ke3RoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXS52YWwudG9TdHJpbmcoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWVkaWF3aWtpL2NsYXNzLWRvY1xuXHRcdFx0XHRcdGlucHV0LmFkZENsYXNzKGNsYXNzbmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbGFiZWwgPSAkKCc8bGFiZWw+Jyk7XG5cdFx0XHRcdGxhYmVsLmF0dHIoJ2ZvcicsIGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7ZmllbGR9YCkudGV4dChkaXNwbGF5KTtcblx0XHRcdFx0aWYgKHRvb2x0aXApIHtcblx0XHRcdFx0XHRsYWJlbC5hcHBlbmQodG9vbHRpcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IHN0eWxlID0gJ3RleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMjAlOyc7XG5cdFx0XHRcdGlmIChpICUgMiA9PT0gMSkge1xuXHRcdFx0XHRcdHN0eWxlICs9ICcgcGFkZGluZy1sZWZ0OiAxZW07Jztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0ciA9ICQoJzx0cj4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0ZDEgPSAkKCc8dGQ+JykuYWRkQ2xhc3MoJ2NpdGUtZm9ybS10ZCcpLmF0dHIoe1xuXHRcdFx0XHRcdHN0eWxlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGQxLmFwcGVuZChsYWJlbCk7XG5cdFx0XHRcdHRyLmFwcGVuZCh0ZDEpO1xuXHRcdFx0XHRjb25zdCB0ZDIgPSAkKCc8dGQ+JykuYWRkQ2xhc3MoJ2NpdGUtZm9ybS10ZCcpLmNzcygnd2lkdGgnLCAnMzAlJyk7XG5cdFx0XHRcdHRkMi5hcHBlbmQoaW5wdXQpO1xuXHRcdFx0XHRpZiAoYWQpIHtcblx0XHRcdFx0XHR0ZDIuYXBwZW5kKGFkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0ci5hcHBlbmQodGQyKTtcblx0XHRcdFx0aWYgKGkgJSAyID09PSAwKSB7XG5cdFx0XHRcdFx0dHJzLnB1c2godHIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgbmVlZHNldHVwID0gZmFsc2U7XG5cdFx0XHRmb3IgKGNvbnN0IGcgaW4gdGhpcy5pbmNyZW1lbnRhYmxlcykge1xuXHRcdFx0XHRpZiAoIXRoaXMuaW5jcmVtZW50YWJsZXNbZ10uc2V0dXApIHtcblx0XHRcdFx0XHRuZWVkc2V0dXAgPSB0cnVlO1xuXHRcdFx0XHRcdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsIGAjY2l0ZS1pbmNyLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7Z31gLCBDaXRlVEIuaW5jcmVtZW50RmllbGRzKTtcblx0XHRcdFx0XHR0aGlzLmluY3JlbWVudGFibGVzW2ddLnNldHVwID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG5lZWRzZXR1cCB8fCBPYmplY3Qua2V5cyh0aGlzLmluY3JlbWVudGFibGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Zm9yIChjb25zdCBhdXRvZmlsbCBvZiBhdXRvZmlsbHMpIHtcblx0XHRcdFx0XHQkKGRvY3VtZW50KS5vbignY2xpY2snLCBhdXRvZmlsbCwgQ2l0ZVRCLmluaXRBdXRvZmlsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnM7XG5cdFx0fVxuXHRcdC8vIGdpdmVzIGEgbGl0dGxlIGJpdCBvZiBIVE1MIHNvIHRoZSBvcGVuIGZvcm0gY2FuIGJlIGlkZW50aWZpZWRcblx0XHRnZXRJbml0aWFsKCkge1xuXHRcdFx0Y29uc3QgaGlkZGVuID0gJCgnPGlucHV0PicpLmFkZENsYXNzKCdjaXRlLXRlbXBsYXRlJykuYXR0cih7XG5cdFx0XHRcdHR5cGU6ICdoaWRkZW4nLFxuXHRcdFx0XHR2YWx1ZTogdGhpcy50ZW1wbGF0ZW5hbWUsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBoaWRkZW47XG5cdFx0fVxuXHRcdC8vIG1ha2VzIHRoZSBmb3JtIHVzZWQgaW4gdGhlIGRpYWxvZyBib3hlc1xuXHRcdGdldEZvcm0oKSB7XG5cdFx0XHRjb25zdCBtYWluID0gJCgnPGRpdj4nKS5hZGRDbGFzcygnY2l0ZS1mb3JtLWNvbnRhaW5lcicpO1xuXHRcdFx0Y29uc3QgZm9ybTEgPSAkKCc8dGFibGU+JykuYWRkQ2xhc3MoJ2NpdGUtYmFzaWMtZmllbGRzJykuY3NzKHtcblx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0J2JhY2tncm91bmQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuXHRcdFx0fSk7XG5cdFx0XHRsZXQgdHJzID0gdGhpcy5tYWtlRm9ybUlubmVyKHRoaXMuYmFzaWMsIHRydWUpO1xuXHRcdFx0Zm9yIChjb25zdCB0ciBvZiB0cnMpIHtcblx0XHRcdFx0Zm9ybTEuYXBwZW5kKHRyKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZvcm0yID0gJCgnPHRhYmxlPicpLmFkZENsYXNzKCdjaXRlLWV4dHJhLWZpZWxkcycpLmNzcyh7XG5cdFx0XHRcdHdpZHRoOiAnMTAwJScsXG5cdFx0XHRcdCdiYWNrZ3JvdW5kLWNvbG9yJzogJ3RyYW5zcGFyZW50Jyxcblx0XHRcdFx0ZGlzcGxheTogJ25vbmUnLFxuXHRcdFx0fSk7XG5cdFx0XHR0cnMgPSB0aGlzLm1ha2VGb3JtSW5uZXIodGhpcy5leHRyYSwgdHJ1ZSk7XG5cdFx0XHRmb3IgKGNvbnN0IHRyIG9mIHRycykge1xuXHRcdFx0XHRmb3JtMi5hcHBlbmQodHIpO1xuXHRcdFx0fVxuXHRcdFx0bWFpbi5hcHBlbmQoZm9ybTEpLmFwcGVuZChmb3JtMik7XG5cdFx0XHRjb25zdCBmb3JtMyA9ICQoJzx0YWJsZT4nKS5hZGRDbGFzcygnY2l0ZS1vdGhlci1maWVsZHMnKS5jc3Moe1xuXHRcdFx0XHR3aWR0aDogJzEwMCUnLFxuXHRcdFx0XHQnYmFja2dyb3VuZC1jb2xvcic6ICd0cmFuc3BhcmVudCcsXG5cdFx0XHRcdCdwYWRkaW5nLXRvcCc6ICcxZW0nLFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCAkdHIgPSAkKCc8dHI+Jyk7XG5cdFx0XHRjb25zdCAkdGQxID0gJCgnPHRkPicpLmFkZENsYXNzKCdjaXRlLWZvcm0tdGQnKS5jc3Moe1xuXHRcdFx0XHQndGV4dC1hbGlnbic6ICdyaWdodCcsXG5cdFx0XHRcdHdpZHRoOiAnMjAlJyxcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgJGxhYmVsMSA9ICQoJzxsYWJlbD4nKTtcblx0XHRcdCRsYWJlbDEuYXR0cignZm9yJywgYGNpdGUtJHtDaXRlVEIuZXNjU3RyKHRoaXMuc2hvcnRmb3JtKX0tbmFtZWApLnRleHQoZ2V0TWVzc2FnZSgnY2l0ZS1uYW1lLWxhYmVsJykpO1xuXHRcdFx0JHRkMS5hcHBlbmQoJGxhYmVsMSk7XG5cdFx0XHRjb25zdCB0ZDIgPSAkKCc8dGQ+JykuYWRkQ2xhc3MoJ2NpdGUtZm9ybS10ZCcpLmNzcygnd2lkdGgnLCAnMzAlJyk7XG5cdFx0XHRjb25zdCBpbnB1dDEgPSAkKCc8aW5wdXQ+JykuYXR0cih7XG5cdFx0XHRcdHRhYmluZGV4OiAnMScsXG5cdFx0XHRcdHN0eWxlOiAnd2lkdGg6IDEwMCUnLFxuXHRcdFx0XHR0eXBlOiAndGV4dCcsXG5cdFx0XHR9KTtcblx0XHRcdGlucHV0MS5hdHRyKCdpZCcsIGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LW5hbWVgKTtcblx0XHRcdHRkMi5hcHBlbmQoaW5wdXQxKTtcblx0XHRcdGNvbnN0IHRkMyA9ICQoJzx0ZD4nKS5hZGRDbGFzcygnY2l0ZS1mb3JtLXRkJykuY3NzKHtcblx0XHRcdFx0J3RleHQtYWxpZ24nOiAncmlnaHQnLFxuXHRcdFx0XHQncGFkZGluZy1sZWZ0JzogJzFlbScsXG5cdFx0XHRcdHdpZHRoOiAnMjAlJyxcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbGFiZWwyID0gJCgnPGxhYmVsPicpO1xuXHRcdFx0bGFiZWwyLmF0dHIoJ2ZvcicsIGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LWdyb3VwYCkudGV4dChnZXRNZXNzYWdlKCdjaXRlLWdyb3VwLWxhYmVsJykpO1xuXHRcdFx0dGQzLmFwcGVuZChsYWJlbDIpO1xuXHRcdFx0Y29uc3QgdGQ0ID0gJCgnPHRkPicpLmFkZENsYXNzKCdjaXRlLWZvcm0tdGQnKS5jc3MoJ3dpZHRoJywgJzMwJScpO1xuXHRcdFx0Y29uc3QgaW5wdXQyID0gJCgnPGlucHV0PicpLmF0dHIoe1xuXHRcdFx0XHR0YWJpbmRleDogJzEnLFxuXHRcdFx0XHRzdHlsZTogJ3dpZHRoOiAxMDAlJyxcblx0XHRcdFx0dHlwZTogJ3RleHQnLFxuXHRcdFx0fSk7XG5cdFx0XHRpbnB1dDIuYXR0cignaWQnLCBgY2l0ZS0ke0NpdGVUQi5lc2NTdHIodGhpcy5zaG9ydGZvcm0pfS1ncm91cGApO1xuXHRcdFx0dGQ0LmFwcGVuZChpbnB1dDIpO1xuXHRcdFx0JHRyLmFwcGVuZCgkdGQxKS5hcHBlbmQodGQyKS5hcHBlbmQodGQzKS5hcHBlbmQodGQ0KTtcblx0XHRcdGZvcm0zLmFwcGVuZCgkdHIpO1xuXHRcdFx0bWFpbi5hcHBlbmQoZm9ybTMpO1xuXHRcdFx0Y29uc3QgZXh0cmFzID0gJCgnPGRpdj4nKTtcblx0XHRcdGV4dHJhcy5hcHBlbmQoXG5cdFx0XHRcdCQoJzxpbnB1dD4nKS5hZGRDbGFzcygnY2l0ZS1mb3JtLXN0YXR1cycpLmF0dHIoe1xuXHRcdFx0XHRcdHR5cGU6ICdoaWRkZW4nLFxuXHRcdFx0XHRcdHZhbHVlOiAnY2xvc2VkJyxcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBoaWRkZW4gPSAkKCc8aW5wdXQ+JykuYWRkQ2xhc3MoJ2NpdGUtdGVtcGxhdGUnKS5hdHRyKCd0eXBlJywgJ2hpZGRlbicpO1xuXHRcdFx0aGlkZGVuLnZhbCh0aGlzLnRlbXBsYXRlbmFtZSk7XG5cdFx0XHRleHRyYXMuYXBwZW5kKGhpZGRlbik7XG5cdFx0XHRjb25zdCBzcGFuMSA9ICQoJzxzcGFuPicpLmFkZENsYXNzKCdjaXRlLXByZXZpZXctbGFiZWwnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXHRcdFx0c3BhbjEudGV4dChnZXRNZXNzYWdlKCdjaXRlLXJhdy1wcmV2aWV3JykpO1xuXHRcdFx0ZXh0cmFzLmFwcGVuZChzcGFuMSkuYXBwZW5kKFxuXHRcdFx0XHQkKCc8ZGl2PicpLmFkZENsYXNzKCdjaXRlLXJlZi1wcmV2aWV3JykuY3NzKHtcblx0XHRcdFx0XHRwYWRkaW5nOiAnMC41ZW0nLFxuXHRcdFx0XHRcdCdmb250LXNpemUnOiAnMTEwJScsXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc3BhbjIgPSAkKCc8c3Bhbj4nKS5hZGRDbGFzcygnY2l0ZS1wcmV2LXBhcnNlZC1sYWJlbCcpLmNzcygnZGlzcGxheScsICdub25lJyk7XG5cdFx0XHRzcGFuMi50ZXh0KGdldE1lc3NhZ2UoJ2NpdGUtcGFyc2VkLWxhYmVsJykpO1xuXHRcdFx0ZXh0cmFzLmFwcGVuZChzcGFuMikuYXBwZW5kKFxuXHRcdFx0XHQkKCc8ZGl2PicpLmFkZENsYXNzKCdjaXRlLXByZXZpZXctcGFyc2VkJykuY3NzKHtcblx0XHRcdFx0XHQncGFkZGluZy1ib3R0b20nOiAnMC41ZW0nLFxuXHRcdFx0XHRcdCdmb250LXNpemUnOiAnMTEwJScsXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgbGluayA9ICQoJzxhPicpLmFkZENsYXNzKCdjaXRlLXByZXYtcGFyc2UnKS5hdHRyKCdocmVmJywgJyMnKS5jc3Moe1xuXHRcdFx0XHRtYXJnaW46ICcwIDFlbScsXG5cdFx0XHRcdGRpc3BsYXk6ICdub25lJyxcblx0XHRcdFx0Y29sb3I6ICcjMDAwMDhiJyxcblx0XHRcdH0pO1xuXHRcdFx0bGluay50ZXh0KGdldE1lc3NhZ2UoJ2NpdGUtZm9ybS1wYXJzZScpKTtcblx0XHRcdGV4dHJhcy5hcHBlbmQobGluayk7XG5cdFx0XHRtYWluLmFwcGVuZChleHRyYXMpO1xuXHRcdFx0cmV0dXJuIG1haW47XG5cdFx0fVxuXHR9O1xuXG5cdCQoZG9jdW1lbnQpLmZpbmQoJ2hlYWQnKS50cmlnZ2VyKCdyZWZ0b29sYmFyYmFzZScpO1xufTtcblxuZXhwb3J0IHtyZWZUb29sYmFyQmFzZX07XG4iLCAiY29uc3QgcmVmVG9vbGJhck1lc2FnZXMgPSAoKTogdm9pZCA9PiB7XG5cdGNvbnN0IHt3Z1VzZXJMYW5ndWFnZX0gPSBtdy5jb25maWcuZ2V0KCk7XG5cblx0aWYgKHdnVXNlckxhbmd1YWdlID09PSAnZW4nKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdC8vIEFsbCB1c2VyLWZhY2luZyBtZXNzYWdlc1xuXHQvLyBUT0RPOiBEb2N1bWVudCB1c2FnZVxuXHRpZiAoWyd6aC1oYW50JywgJ3poLWhrJywgJ3poLW1vJywgJ3poLXR3J10uaW5jbHVkZXMod2dVc2VyTGFuZ3VhZ2UpKSB7XG5cdFx0bXcubWVzc2FnZXMuc2V0KHtcblx0XHRcdCdjaXRlLXNlY3Rpb24tbGFiZWwnOiAn5byV55SoJyxcblx0XHRcdCdjaXRlLXRlbXBsYXRlLWxpc3QnOiAn5qih5p2/Jyxcblx0XHRcdCdjaXRlLW5hbWVkLXJlZnMtbGFiZWwnOiAn5ZCM5ZCN5paH5427Jyxcblx0XHRcdCdjaXRlLW5hbWVkLXJlZnMtdGl0bGUnOiAn5o+S5YWl5ZCM5ZCN5paH5427Jyxcblx0XHRcdCdjaXRlLW5hbWVkLXJlZnMtYnV0dG9uJzogJ+W3suWRveWQjeWPg+iAg+aWh+eNuycsXG5cdFx0XHQnY2l0ZS1uYW1lZC1yZWZzLWRyb3Bkb3duJzogJ+WQjOWQjeaWh+eNuycsXG5cdFx0XHQvLyBVc2VkIG9uIHRoZSB0b3Agb2YgdGhlIG5hbWVkIHJlZnMgbGlzdCBkcm9wc293blxuXHRcdFx0J2NpdGUtZGlhbG9nLWJhc2UnOiAn5byV55SoJyxcblx0XHRcdCdjaXRlLWZvcm0tc3VibWl0JzogJ+aPkuWFpScsXG5cdFx0XHQnY2l0ZS1mb3JtLXNob3doaWRlJzogJ+mhr+ekui/pmrHol4/poY3lpJbljYDln58nLFxuXHRcdFx0J2NpdGUtbm8tbmFtZWRyZWZzJzogJ+WcqOacrOmggeaJvuS4jeWIsOS7u+S9leWQjOWQjeaWh+eNuycsXG5cdFx0XHQnY2l0ZS1uYW1lZHJlZnMtaW50cm8nOiAn5b6e5YiX5Ye655qE5Y+D6ICD5paH542755uu6YyE5Lit6YG45pOH5LiA5YCL5ZCN5a2X44CC6bue5pOK44CM5o+S5YWl44CN5o+S5YWl5LiA5YCL5Y+D6ICD5paH54275Yiw5paH5pys5Lit44CCJyxcblx0XHRcdCdjaXRlLXJhdy1wcmV2aWV3JzogJ+WOn+Wni+eivO+8micsXG5cdFx0XHQnY2l0ZS1wYXJzZWQtbGFiZWwnOiAn6Kej5p6Q5b6M55qE5Y6f5aeL56K877yaJyxcblx0XHRcdCdjaXRlLWZvcm0tcGFyc2UnOiAn6aGv56S66Kej5p6Q5b6M55qE6aCQ6Ka9Jyxcblx0XHRcdCdjaXRlLXJlZnByZXZpZXcnOiAn6aCQ6Ka9Jyxcblx0XHRcdCdjaXRlLW5hbWUtbGFiZWwnOiAncmVm5ZCNJyxcblx0XHRcdCdjaXRlLWdyb3VwLWxhYmVsJzogJ3JlZue1hCcsXG5cdFx0XHQnY2l0ZS1mb3JtLXJlc2V0JzogJ+mHjeioreihqOWWricsXG5cdFx0XHQnY2l0ZS1sb2FkaW5nJzogJ+i8ieWFpeaVuOaTmicsXG5cdFx0XHQvLyBTaG93biB3aGlsZSBwYWdldGV4dCBpcyBiZWluZyBkb3dubG9hZGVkIGZyb20gdGhlIEFQSVxuXHRcdFx0J2NpdGUtaW5zZXJ0LWRhdGUnOiAn5o+S5YWl55W25YmN5pel5pyfJyxcblx0XHRcdC8vIEFsdC90aXRsZSB0ZXh0IGZvciBcImluc2VydCBkYXRlXCIgaWNvblxuXHRcdFx0J2NpdGUtZXJyLXJlcG9ydC1oZWFkaW5nJzogJ+W8leeUqOmMr+iqpOWgseWRiicsXG5cdFx0XHQvLyBIZWFkaW5nIGZvciBlcnJvciByZXBvcnQgdGFibGVcblx0XHRcdCdjaXRlLWVyci1yZXBvcnQtY2xvc2UnOiAn6Zec6ZaJJyxcblx0XHRcdC8vIEFsdC90aXRsZSB0ZXh0IGZvciBcImNsb3NlXCIgaWNvbiBvbiBlcnJvciByZXBvcnRcblx0XHRcdCdjaXRlLWVyci1yZXBvcnQtZW1wdHknOiAn5pyq5om+5Yiw6Yyv6KqkJyxcblx0XHRcdC8vIE1lc3NhZ2UgZGlzcGxheWVkIGluIHRoZSBlcnJvciByZXBvcnQgbGlzdCBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzXG5cdFx0XHQnY2l0ZS1hdXRvZmlsbC1hbHQnOiAn6Ieq5YuV5aGr5YWFJyxcblx0XHRcdC8vIEFsdCB0ZXh0IGZvciBhdXRvZmlsbCBidXR0b24gaW1hZ2Vcblx0XHRcdCdjaXRlLXJlZi10b29sdGlwJzogJ+mMqOm7nueahOaomeitmOespu+8iOS9v+ipsuW8leeUqOWPr+S7peaIkOeCuuWFp+mDqOmAo+e1kOeahOebruaome+8iScsXG5cdFx0XHQnY2l0ZS1wb3N0c2NyaXB0LXRvb2x0aXAnOiAn5aaC5p6c6Kit5a6a6YCZ5LiA5Y+D5pW477yM5YmH6KaG6JOL5L2/55So5Y+l6bue57WC5q2i5byV5paH55qE6buY6KqN6KGM54iyJyxcblx0XHRcdCdjaXRlLWRpYWxvZy13ZWInOiAn57ay6aCB5byV55SoJyxcblx0XHRcdCdjaXRlLWRpYWxvZy1uZXdzJzogJ+aWsOiBnuW8leeUqCcsXG5cdFx0XHQnY2l0ZS1kaWFsb2ctYm9vayc6ICfmm7jnsY3lvJXnlKgnLFxuXHRcdFx0J2NpdGUtZGlhbG9nLWpvdXJuYWwnOiAn5pyf5YiK5byV55SoJyxcblx0XHRcdCdjaXRlLWRpYWxvZy1jb25mZXJlbmNlJzogJ+acg+itsOW8leeUqCcsXG5cdFx0XHQnY2l0ZS1kaWFsb2ctZW5jeWNsb3BlZGlhJzogJ+eZvuenkeWFqOabuOW8leeUqCcsXG5cdFx0XHQnY2l0ZS1hdXRob3ItbGFiZWwnOiAn5L2c6ICFJyxcblx0XHRcdCdjaXRlLXRpdGxlLWxhYmVsJzogJ+aomemhjCcsXG5cdFx0XHQnY2l0ZS11cmwtbGFiZWwnOiAn57ay5Z2AJyxcblx0XHRcdCdjaXRlLXdlYnNpdGUtbGFiZWwnOiAn57ay56uZ5ZCN56ixJyxcblx0XHRcdCdjaXRlLXdvcmstbGFiZWwnOiAn5aCx57SZ5oiW6Zuc6KqMJyxcblx0XHRcdCdjaXRlLWFnZW5jeS1sYWJlbCc6ICfpgJroqIrnpL4nLFxuXHRcdFx0J2NpdGUtcHVibGlzaGVyLWxhYmVsJzogJ+WHuueJiOiAhScsXG5cdFx0XHQnY2l0ZS1hY2Nlc3NkYXRlLWxhYmVsJzogJ+WtmOWPluaXpeacnycsXG5cdFx0XHQnY2l0ZS1sYXN0LWxhYmVsJzogJ+WnkycsXG5cdFx0XHQnY2l0ZS1maXJzdC1sYWJlbCc6ICflkI0nLFxuXHRcdFx0J2NpdGUtYXV0aG9ybGluay1sYWJlbCc6ICfkvZzogIXmop3nm64nLFxuXHRcdFx0J2NpdGUtY29hdXRob3JzLWxhYmVsJzogJ+WFtuS7luS9nOiAhScsXG5cdFx0XHQnY2l0ZS1sb2NhdGlvbi1sYWJlbCc6ICflh7rniYjlnLAnLFxuXHRcdFx0J2NpdGUtcGFnZS1sYWJlbCc6ICfmiYDlnKjpoIEnLFxuXHRcdFx0J2NpdGUtcGFnZXMtbGFiZWwnOiAn6aCB56+E5ZyNJyxcblx0XHRcdCdjaXRlLWF0LWxhYmVsJzogJ+abuOWFp+mDqOWIhicsXG5cdFx0XHQnY2l0ZS1sYW5ndWFnZS1sYWJlbCc6ICfoqp7oqIAnLFxuXHRcdFx0J2NpdGUtZm9ybWF0LWxhYmVsJzogJ+aWh+S7tuagvOW8jycsXG5cdFx0XHQnY2l0ZS1kb2ktbGFiZWwnOiAnRE9JJyxcblx0XHRcdCdjaXRlLWRhdGUtbGFiZWwnOiAn5pel5pyfJyxcblx0XHRcdCdjaXRlLW1vbnRoLWxhYmVsJzogJ+aciOS7vScsXG5cdFx0XHQnY2l0ZS15ZWFyLWxhYmVsJzogJ+W5tOS7vScsXG5cdFx0XHQnY2l0ZS1xdW90ZS1sYWJlbCc6ICfmkZjpjIQnLFxuXHRcdFx0J2NpdGUtbmV3c3BhcGVyLWxhYmVsJzogJ+aWsOiBnuWqkumrlCcsXG5cdFx0XHQnY2l0ZS1hdXRob3IyLWxhYmVsJzogJ+esrDLkvZzogIUnLFxuXHRcdFx0J2NpdGUtYXV0aG9yMy1sYWJlbCc6ICfnrKwz5L2c6ICFJyxcblx0XHRcdCdjaXRlLWF1dGhvcjQtbGFiZWwnOiAn56ysNOS9nOiAhScsXG5cdFx0XHQnY2l0ZS1hdXRob3I1LWxhYmVsJzogJ+esrDXkvZzogIUnLFxuXHRcdFx0J2NpdGUtYWdlbmN5JzogJ+mAmuioiuekvicsXG5cdFx0XHQnY2l0ZS1pc3NuLWxhYmVsJzogJ0lTU04nLFxuXHRcdFx0J2NpdGUtb2NsYy1sYWJlbCc6ICdPQ0xDJyxcblx0XHRcdCdjaXRlLWJpYmNvZGUtbGFiZWwnOiAnQmliY29kZScsXG5cdFx0XHQnY2l0ZS1pc2JuLWxhYmVsJzogJ0lTQk4nLFxuXHRcdFx0J2NpdGUtb3RoZXJzLWxhYmVsJzogJ+itr+iAhScsXG5cdFx0XHQnY2l0ZS1lZGl0aW9uLWxhYmVsJzogJ+eJiOacrCcsXG5cdFx0XHQnY2l0ZS10cmFucy10aXRsZS1sYWJlbCc6ICfnv7vora/lvozmqJnpoYwnLFxuXHRcdFx0J2NpdGUtcmVmLWxhYmVsJzogJ+mMqOm7nuaomeitmOespicsXG5cdFx0XHQnY2l0ZS1wb3N0c2NyaXB0LWxhYmVsJzogJ+e7k+WwvuespicsXG5cdFx0XHQnY2l0ZS1zZXJpZXMtbGFiZWwnOiAn57O75YiXJyxcblx0XHRcdCdjaXRlLXZvbHVtZS1sYWJlbCc6ICfljbcnLFxuXHRcdFx0J2NpdGUtdW5pZmllZC1sYWJlbCc6ICfntbHkuIDmm7jomZ8nLFxuXHRcdFx0J2NpdGUtY2hhcHRlci1sYWJlbCc6ICfnq6Dnr4AnLFxuXHRcdFx0J2NpdGUtam91cm5hbC1sYWJlbCc6ICfpm5zoqowv5pyf5YiKJyxcblx0XHRcdCdjaXRlLWlzc3VlLWxhYmVsJzogJ+acnycsXG5cdFx0XHQnY2l0ZS1wbWlkLWxhYmVsJzogJ1BNSUQnLFxuXHRcdFx0J2NpdGUtZWRpdG9yLWxhYmVsJzogJ+e3qOi8rycsXG5cdFx0XHQnY2l0ZS1lZGl0b3IxLWZpcnN0LWxhYmVsJzogJ+e3qOi8r+WQjScsXG5cdFx0XHQnY2l0ZS1lZGl0b3IxLWxhc3QtbGFiZWwnOiAn57eo6Lyv5aeTJyxcblx0XHRcdCdjaXRlLWVkaXRvcjEtbGluay1sYWJlbCc6ICfnt6jovK/mop3nm64nLFxuXHRcdFx0J2NpdGUtZWRpdG9yLWZpcnN0LWxhYmVsJzogJ+e3qOi8r+WQjScsXG5cdFx0XHQnY2l0ZS1lZGl0b3ItbGFzdC1sYWJlbCc6ICfnt6jovK/lp5MnLFxuXHRcdFx0J2NpdGUtZWRpdG9yLWxpbmstbGFiZWwnOiAn57eo6Lyv5qKd55uuJyxcblx0XHRcdCdjaXRlLXBtYy1sYWJlbCc6ICdQTUMnLFxuXHRcdFx0J2NpdGUtaWQtbGFiZWwnOiAnSUQnLFxuXHRcdFx0J2NpdGUtbGF5c3VtbWFyeS1sYWJlbCc6ICfnsKHmmI7mkZjopoEnLFxuXHRcdFx0J2NpdGUtbGF5c291cmNlLWxhYmVsJzogJ+ewoeaYjuaRmOimgeS+hua6kCcsXG5cdFx0XHQnY2l0ZS1sYXlkYXRlLWxhYmVsJzogJ+ewoeaYjuaRmOimgeaXpeacnycsXG5cdFx0XHQnY2l0ZS1jb25mZXJlbmNlLWxhYmVsJzogJ+acg+itsOWQjeeosScsXG5cdFx0XHQnY2l0ZS1jb25mZXJlbmNldXJsLWxhYmVsJzogJ+acg+itsOe2suWdgCcsXG5cdFx0XHQnY2l0ZS1ib29rdGl0bGUtbGFiZWwnOiAn6KuW5paH6ZuGJyxcblx0XHRcdCdjaXRlLWVuY3ljbG9wZWRpYS1sYWJlbCc6ICfnmb7np5Hlhajmm7jlkI0nLFxuXHRcdFx0J2NpdGUtYXV0aG9ybGluay10b29sdGlwJzogJ+iLpeipsuS9nOiAheacieaineebru+8jOWhq+Wvq+aineebruWQjeeosScsXG5cdFx0XHQnY2l0ZS1hdC10b29sdGlwJzogJ+WFp+WuueWcqOS+hua6kOS4reeahOS9jee9ru+8iOeVtuaMiemggeeivOW8leeUqOS4jemBqeeVtuaZgu+8iScsXG5cdFx0XHQnY2l0ZS1hY2Nlc3NkYXRlLXRvb2x0aXAnOiAn6Kiq5ZWP6YCZ5YCL5byV55So5L6G5rqQ5pmC55qE5pel5pyfJyxcblx0XHRcdCdjaXRlLWlkLXRvb2x0aXAnOiAn5YW25LuW55qE5paH56ug57eo6JmfJyxcblx0XHRcdCdjaXRlLXNhbWVjb250ZW50LWRlc2MnOiAn5qqi5p+l5ZCr5pyJ55u45ZCM5YWn5a6555qE5aSa5YCL5Y+D6ICD5paH5427Jyxcblx0XHRcdCdjaXRlLXNhbWVjb250ZW50LWVycm9yJzogJ+WkmuWAi+WPg+iAg+aWh+eNu+WMheWQq+acieebuOWQjOWFp+WuuScsXG5cdFx0XHQnY2l0ZS1yZXBlYXRlZC1kZXNjJzogJ+S9v+eUqOebuOWQjOWQjeWtl+eahOWkmuWAi+WPg+iAg+aWh+eNuycsXG5cdFx0XHQnY2l0ZS1yZXBlYXRlZC1lcnJvcic6ICflpJrlgIvlj4PogIPmlofnjbvkvb/nlKjkuobnm7jlkIzlkI3lrZcnLFxuXHRcdFx0J2NpdGUtdW5kZWZpbmVkLWRlc2MnOiAn5pyq5a6a576p55qE5Y+D6ICD5paH5427Jyxcblx0XHRcdCdjaXRlLXVuZGVmaW5lZC1lcnJvcic6ICfkuIDlgIvlt7Llkb3lkI3nmoTlj4PogIPmlofnjbvlt7LntpPkvb/nlKjkvYbmmK/mspLmnInlrprnvqknLFxuXHRcdFx0J2NpdGUtd29yay10b29sdGlwJzogJ+WIiueZu+ipsuS9nOWTgeeahOWHuueJiOeJqeeahOWQjeeoseOAguiri+S4jeimgeS9v+eUqOaWnOmrlCcsXG5cdFx0XHQnY2l0ZS1uZXdzcGFwZXItdG9vbHRpcCc6ICfliIrnmbvoqbLmlrDogZ7nmoTlh7rniYjnianlkI3nqLEnLFxuXHRcdFx0J2NpdGUtc2VyaWVzLXRvb2x0aXAnOiAn55W25pu457GN5piv5LiA57O75YiX5Ye654mI5ZOB5Lit55qE5YW25Lit5LiA6YOo5Lu95pmC5L2/55SoJyxcblx0XHRcdCdjaXRlLXVuaWZpZWQtdG9vbHRpcCc6ICcxOTgw5bm05Luj5LmL5YmN5Lit5ZyL5omA5L2/55So55qE5pu457GN57eo6JmfJyxcblx0XHRcdCdjaXRlLWxheXN1bW1hcnktdG9vbHRpcCc6ICfoqbLmlofnjbvnm7jpl5znmoTmlrDogZ7loLHpgZPnmoRVUkwnLFxuXHRcdFx0J2NpdGUtbGF5c291cmNlLXRvb2x0aXAnOiAn6Kmy5paH542755u46Zec55qE5paw6IGe5aCx6YGT55qE5Ye66JmVJyxcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRtdy5tZXNzYWdlcy5zZXQoe1xuXHRcdFx0J2NpdGUtc2VjdGlvbi1sYWJlbCc6ICflvJXnlKgnLFxuXHRcdFx0J2NpdGUtdGVtcGxhdGUtbGlzdCc6ICfmqKHmnb8nLFxuXHRcdFx0J2NpdGUtbmFtZWQtcmVmcy1sYWJlbCc6ICflkIzlkI3mlofnjK4nLFxuXHRcdFx0J2NpdGUtbmFtZWQtcmVmcy10aXRsZSc6ICfmj5LlhaXlkIzlkI3mlofnjK4nLFxuXHRcdFx0J2NpdGUtbmFtZWQtcmVmcy1idXR0b24nOiAn5bey5ZG95ZCN5Y+C6ICD5paH54yuJyxcblx0XHRcdCdjaXRlLW5hbWVkLXJlZnMtZHJvcGRvd24nOiAn5ZCM5ZCN5paH54yuJyxcblx0XHRcdC8vIFVzZWQgb24gdGhlIHRvcCBvZiB0aGUgbmFtZWQgcmVmcyBsaXN0IGRyb3Bzb3duXG5cdFx0XHQnY2l0ZS1kaWFsb2ctYmFzZSc6ICflvJXnlKgnLFxuXHRcdFx0J2NpdGUtZm9ybS1zdWJtaXQnOiAn5o+S5YWlJyxcblx0XHRcdCdjaXRlLWZvcm0tc2hvd2hpZGUnOiAn5pi+56S6L+makOiXj+mineWkluWMuuWfnycsXG5cdFx0XHQnY2l0ZS1uby1uYW1lZHJlZnMnOiAn5Zyo5pys6aG15om+5LiN5Yiw5Lu75L2V5ZCM5ZCN5paH54yuJyxcblx0XHRcdCdjaXRlLW5hbWVkcmVmcy1pbnRybyc6ICfku47liJflh7rnmoTlj4LogIPmlofnjK7nm67lvZXkuK3pgInmi6nkuIDkuKrlkI3lrZfjgILngrnlh7vigJzmj5LlhaXigJ3mj5LlhaXkuIDkuKrlj4LogIPmlofnjK7liLDmlofmnKzkuK3jgIInLFxuXHRcdFx0J2NpdGUtcmF3LXByZXZpZXcnOiAn5rqQ5Luj56CB77yaJyxcblx0XHRcdCdjaXRlLXBhcnNlZC1sYWJlbCc6ICfop6PmnpDlkI7nmoTmupDku6PnoIHvvJonLFxuXHRcdFx0J2NpdGUtZm9ybS1wYXJzZSc6ICfmmL7npLrop6PmnpDlkI7nmoTpooTop4gnLFxuXHRcdFx0J2NpdGUtcmVmcHJldmlldyc6ICfpooTop4gnLFxuXHRcdFx0J2NpdGUtbmFtZS1sYWJlbCc6ICdyZWblkI0nLFxuXHRcdFx0J2NpdGUtZ3JvdXAtbGFiZWwnOiAncmVm57uEJyxcblx0XHRcdCdjaXRlLWZvcm0tcmVzZXQnOiAn6YeN6K6+6KGo5Y2VJyxcblx0XHRcdCdjaXRlLWxvYWRpbmcnOiAn6L295YWl5pWw5o2uJyxcblx0XHRcdC8vIFNob3duIHdoaWxlIHBhZ2V0ZXh0IGlzIGJlaW5nIGRvd25sb2FkZWQgZnJvbSB0aGUgQVBJXG5cdFx0XHQnY2l0ZS1pbnNlcnQtZGF0ZSc6ICfmj5LlhaXlvZPliY3ml6XmnJ8nLFxuXHRcdFx0Ly8gQWx0L3RpdGxlIHRleHQgZm9yIFwiaW5zZXJ0IGRhdGVcIiBpY29uXG5cdFx0XHQnY2l0ZS1lcnItcmVwb3J0LWhlYWRpbmcnOiAn5byV55So6ZSZ6K+v5oql5ZGKJyxcblx0XHRcdC8vIEhlYWRpbmcgZm9yIGVycm9yIHJlcG9ydCB0YWJsZVxuXHRcdFx0J2NpdGUtZXJyLXJlcG9ydC1jbG9zZSc6ICflhbPpl60nLFxuXHRcdFx0Ly8gQWx0L3RpdGxlIHRleHQgZm9yIFwiY2xvc2VcIiBpY29uIG9uIGVycm9yIHJlcG9ydFxuXHRcdFx0J2NpdGUtZXJyLXJlcG9ydC1lbXB0eSc6ICfmnKrmib7liLDplJnor68nLFxuXHRcdFx0Ly8gTWVzc2FnZSBkaXNwbGF5ZWQgaW4gdGhlIGVycm9yIHJlcG9ydCBsaXN0IGlmIHRoZXJlIGFyZSBubyBlcnJvcnNcblx0XHRcdCdjaXRlLWF1dG9maWxsLWFsdCc6ICfoh6rliqjloavlhYUnLFxuXHRcdFx0Ly8gQWx0IHRleHQgZm9yIGF1dG9maWxsIGJ1dHRvbiBpbWFnZVxuXHRcdFx0J2NpdGUtcmVmLXRvb2x0aXAnOiAn6ZSa54K555qE5qCH6K+G56ym77yI5L2/6K+l5byV55So5Y+v5Lul5oiQ5Li65YaF6YOo6ZO+5o6l55qE55uu5qCH77yJJyxcblx0XHRcdCdjaXRlLXBvc3RzY3JpcHQtdG9vbHRpcCc6ICflpoLmnpzorr7lrprov5nkuIDlj4LmlbDvvIzliJnopobnm5bkvb/nlKjlj6Xngrnnu4jmraLlvJXmlofnmoTpu5jorqTooYzkuLonLFxuXHRcdFx0J2NpdGUtZGlhbG9nLXdlYic6ICfnvZHpobXlvJXnlKgnLFxuXHRcdFx0J2NpdGUtZGlhbG9nLW5ld3MnOiAn5paw6Ze75byV55SoJyxcblx0XHRcdCdjaXRlLWRpYWxvZy1ib29rJzogJ+S5puexjeW8leeUqCcsXG5cdFx0XHQnY2l0ZS1kaWFsb2ctam91cm5hbCc6ICfmnJ/liIrlvJXnlKgnLFxuXHRcdFx0J2NpdGUtZGlhbG9nLWNvbmZlcmVuY2UnOiAn5Lya6K6u5byV55SoJyxcblx0XHRcdCdjaXRlLWRpYWxvZy1lbmN5Y2xvcGVkaWEnOiAn55m+56eR5YWo5Lmm5byV55SoJyxcblx0XHRcdCdjaXRlLWF1dGhvci1sYWJlbCc6ICfkvZzogIUnLFxuXHRcdFx0J2NpdGUtdGl0bGUtbGFiZWwnOiAn5qCH6aKYJyxcblx0XHRcdCdjaXRlLXVybC1sYWJlbCc6ICfnvZHlnYAnLFxuXHRcdFx0J2NpdGUtd2Vic2l0ZS1sYWJlbCc6ICfnvZHnq5nlkI3np7AnLFxuXHRcdFx0J2NpdGUtd29yay1sYWJlbCc6ICfmiqXnurjmiJbmnYLlv5cnLFxuXHRcdFx0J2NpdGUtYWdlbmN5LWxhYmVsJzogJ+mAmuiur+ekvicsXG5cdFx0XHQnY2l0ZS1wdWJsaXNoZXItbGFiZWwnOiAn5Ye654mI6ICFJyxcblx0XHRcdCdjaXRlLWFjY2Vzc2RhdGUtbGFiZWwnOiAn6K6/6Zeu5pel5pyfJyxcblx0XHRcdCdjaXRlLWxhc3QtbGFiZWwnOiAn5aeTJyxcblx0XHRcdCdjaXRlLWZpcnN0LWxhYmVsJzogJ+WQjScsXG5cdFx0XHQnY2l0ZS1hdXRob3JsaW5rLWxhYmVsJzogJ+S9nOiAheadoeebricsXG5cdFx0XHQnY2l0ZS1jb2F1dGhvcnMtbGFiZWwnOiAn5YW25LuW5L2c6ICFJyxcblx0XHRcdCdjaXRlLWxvY2F0aW9uLWxhYmVsJzogJ+WHuueJiOWcsCcsXG5cdFx0XHQnY2l0ZS1wYWdlLWxhYmVsJzogJ+aJgOWcqOmhtScsXG5cdFx0XHQnY2l0ZS1wYWdlcy1sYWJlbCc6ICfpobXojIPlm7QnLFxuXHRcdFx0J2NpdGUtYXQtbGFiZWwnOiAn5Lmm5YaF6YOo5YiGJyxcblx0XHRcdCdjaXRlLWxhbmd1YWdlLWxhYmVsJzogJ+ivreiogCcsXG5cdFx0XHQnY2l0ZS1mb3JtYXQtbGFiZWwnOiAn5paH5qGj5qC85byPJyxcblx0XHRcdCdjaXRlLWRvaS1sYWJlbCc6ICdET0knLFxuXHRcdFx0J2NpdGUtZGF0ZS1sYWJlbCc6ICfml6XmnJ8nLFxuXHRcdFx0J2NpdGUtbW9udGgtbGFiZWwnOiAn5pyI5Lu9Jyxcblx0XHRcdCdjaXRlLXllYXItbGFiZWwnOiAn5bm05Lu9Jyxcblx0XHRcdCdjaXRlLXF1b3RlLWxhYmVsJzogJ+aRmOW9lScsXG5cdFx0XHQnY2l0ZS1uZXdzcGFwZXItbGFiZWwnOiAn5paw6Ze75aqS5L2TJyxcblx0XHRcdCdjaXRlLWF1dGhvcjItbGFiZWwnOiAn56ysMuS9nOiAhScsXG5cdFx0XHQnY2l0ZS1hdXRob3IzLWxhYmVsJzogJ+esrDPkvZzogIUnLFxuXHRcdFx0J2NpdGUtYXV0aG9yNC1sYWJlbCc6ICfnrKw05L2c6ICFJyxcblx0XHRcdCdjaXRlLWF1dGhvcjUtbGFiZWwnOiAn56ysNeS9nOiAhScsXG5cdFx0XHQnY2l0ZS1hZ2VuY3knOiAn6YCa6K6v56S+Jyxcblx0XHRcdCdjaXRlLWlzc24tbGFiZWwnOiAnSVNTTicsXG5cdFx0XHQnY2l0ZS1vY2xjLWxhYmVsJzogJ09DTEMnLFxuXHRcdFx0J2NpdGUtYmliY29kZS1sYWJlbCc6ICdCaWJjb2RlJyxcblx0XHRcdCdjaXRlLWlzYm4tbGFiZWwnOiAnSVNCTicsXG5cdFx0XHQnY2l0ZS1vdGhlcnMtbGFiZWwnOiAn6K+R6ICFJyxcblx0XHRcdCdjaXRlLWVkaXRpb24tbGFiZWwnOiAn54mI5pysJyxcblx0XHRcdCdjaXRlLXRyYW5zLXRpdGxlLWxhYmVsJzogJ+e/u+ivkeWQjuagh+mimCcsXG5cdFx0XHQnY2l0ZS1yZWYtbGFiZWwnOiAn6ZSa54K55qCH6K+G56ymJyxcblx0XHRcdCdjaXRlLXBvc3RzY3JpcHQtbGFiZWwnOiAn57uT5bC+56ymJyxcblx0XHRcdCdjaXRlLXNlcmllcy1sYWJlbCc6ICfns7vliJcnLFxuXHRcdFx0J2NpdGUtdm9sdW1lLWxhYmVsJzogJ+WNtycsXG5cdFx0XHQnY2l0ZS11bmlmaWVkLWxhYmVsJzogJ+e7n+S4gOS5puWPtycsXG5cdFx0XHQnY2l0ZS1jaGFwdGVyLWxhYmVsJzogJ+eroOiKgicsXG5cdFx0XHQnY2l0ZS1qb3VybmFsLWxhYmVsJzogJ+adguW/ly/mnJ/liIonLFxuXHRcdFx0J2NpdGUtaXNzdWUtbGFiZWwnOiAn5pyfJyxcblx0XHRcdCdjaXRlLXBtaWQtbGFiZWwnOiAnUE1JRCcsXG5cdFx0XHQnY2l0ZS1lZGl0b3ItbGFiZWwnOiAn57yW6L6RJyxcblx0XHRcdCdjaXRlLWVkaXRvcjEtZmlyc3QtbGFiZWwnOiAn57yW6L6R5ZCNJyxcblx0XHRcdCdjaXRlLWVkaXRvcjEtbGFzdC1sYWJlbCc6ICfnvJbovpHlp5MnLFxuXHRcdFx0J2NpdGUtZWRpdG9yMS1saW5rLWxhYmVsJzogJ+e8lui+keadoeebricsXG5cdFx0XHQnY2l0ZS1lZGl0b3ItZmlyc3QtbGFiZWwnOiAn57yW6L6R5ZCNJyxcblx0XHRcdCdjaXRlLWVkaXRvci1sYXN0LWxhYmVsJzogJ+e8lui+keWnkycsXG5cdFx0XHQnY2l0ZS1lZGl0b3ItbGluay1sYWJlbCc6ICfnvJbovpHmnaHnm64nLFxuXHRcdFx0J2NpdGUtcG1jLWxhYmVsJzogJ1BNQycsXG5cdFx0XHQnY2l0ZS1pZC1sYWJlbCc6ICdJRCcsXG5cdFx0XHQnY2l0ZS1sYXlzdW1tYXJ5LWxhYmVsJzogJ+eugOaYjuaRmOimgScsXG5cdFx0XHQnY2l0ZS1sYXlzb3VyY2UtbGFiZWwnOiAn566A5piO5pGY6KaB5p2l5rqQJyxcblx0XHRcdCdjaXRlLWxheWRhdGUtbGFiZWwnOiAn566A5piO5pGY6KaB5pel5pyfJyxcblx0XHRcdCdjaXRlLWNvbmZlcmVuY2UtbGFiZWwnOiAn5Lya6K6u5ZCN56ewJyxcblx0XHRcdCdjaXRlLWNvbmZlcmVuY2V1cmwtbGFiZWwnOiAn5Lya6K6u572R5Z2AJyxcblx0XHRcdCdjaXRlLWJvb2t0aXRsZS1sYWJlbCc6ICforrrmlofpm4YnLFxuXHRcdFx0J2NpdGUtZW5jeWNsb3BlZGlhLWxhYmVsJzogJ+eZvuenkeWFqOS5puWQjScsXG5cdFx0XHQnY2l0ZS1hdXRob3JsaW5rLXRvb2x0aXAnOiAn6Iul6K+l5L2c6ICF5pyJ5p2h55uu77yM5aGr5YaZ5p2h55uu5ZCN56ewJyxcblx0XHRcdCdjaXRlLWF0LXRvb2x0aXAnOiAn5YaF5a655Zyo5p2l5rqQ5Lit55qE5L2N572u77yI5b2T5oyJ6aG156CB5byV55So5LiN6YCC5b2T5pe277yJJyxcblx0XHRcdCdjaXRlLWFjY2Vzc2RhdGUtdG9vbHRpcCc6ICforr/pl67ov5nkuKrlvJXnlKjmnaXmupDml7bnmoTml6XmnJ8nLFxuXHRcdFx0J2NpdGUtaWQtdG9vbHRpcCc6ICflhbbku5bnmoTmlofnq6DnvJblj7cnLFxuXHRcdFx0J2NpdGUtc2FtZWNvbnRlbnQtZGVzYyc6ICfmo4Dmn6XlkKvmnInnm7jlkIzlhoXlrrnnmoTlpJrkuKrlj4LogIPmlofnjK4nLFxuXHRcdFx0J2NpdGUtc2FtZWNvbnRlbnQtZXJyb3InOiAn5aSa5Liq5Y+C6ICD5paH54yu5YyF5ZCr5pyJ55u45ZCM5YaF5a65Jyxcblx0XHRcdCdjaXRlLXJlcGVhdGVkLWRlc2MnOiAn5L2/55So55u45ZCM5ZCN5a2X55qE5aSa5Liq5Y+C6ICD5paH54yuJyxcblx0XHRcdCdjaXRlLXJlcGVhdGVkLWVycm9yJzogJ+WkmuS4quWPguiAg+aWh+eMruS9v+eUqOS6huebuOWQjOWQjeWtlycsXG5cdFx0XHQnY2l0ZS11bmRlZmluZWQtZGVzYyc6ICfmnKrlrprkuYnnmoTlj4LogIPmlofnjK4nLFxuXHRcdFx0J2NpdGUtdW5kZWZpbmVkLWVycm9yJzogJ+S4gOS4quW3suWRveWQjeeahOWPguiAg+aWh+eMruW3sue7j+S9v+eUqOS9huaYr+ayoeacieWumuS5iScsXG5cdFx0XHQnY2l0ZS13b3JrLXRvb2x0aXAnOiAn5YiK55m76K+l5L2c5ZOB55qE5Ye654mI54mp55qE5ZCN56ew44CC6K+35LiN6KaB5L2/55So5pac5L2TJyxcblx0XHRcdCdjaXRlLW5ld3NwYXBlci10b29sdGlwJzogJ+WIiueZu+ipsuaWsOiBnueahOWHuueJiOeJqeWQjeensCcsXG5cdFx0XHQnY2l0ZS1zZXJpZXMtdG9vbHRpcCc6ICflvZPkuabnsY3mmK/kuIDns7vliJflh7rniYjlk4HkuK3nmoTlhbbkuK3kuIDpg6jku73ml7bkvb/nlKgnLFxuXHRcdFx0J2NpdGUtdW5pZmllZC10b29sdGlwJzogJzE5ODDlubTku6PkuYvliY3kuK3lm73miYDkvb/nlKjnmoTkuabnsY3nvJblj7cnLFxuXHRcdFx0J2NpdGUtbGF5c3VtbWFyeS10b29sdGlwJzogJ+ivpeaWh+eMruebuOWFs+eahOaWsOmXu+aKpemBk+eahFVSTCcsXG5cdFx0XHQnY2l0ZS1sYXlzb3VyY2UtdG9vbHRpcCc6ICfor6XmlofnjK7nm7jlhbPnmoTmlrDpl7vmiqXpgZPnmoTlh7rlpIQnLFxuXHRcdH0pO1xuXHR9XG59O1xuXG5leHBvcnQge3JlZlRvb2xiYXJNZXNhZ2VzfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJ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aUI7TUFDakIseUJBQXlCO01BQ3pCLHdCQUF3QjtNQUN4QixzQkFBc0I7TUFDdEIseUJBQXlCO01BQ3pCLDRCQUE0QjtNQUM1Qix3QkFBd0I7TUFDeEIsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQixtQkFBbUI7TUFDbkIsMkJBQTJCO01BQzNCLG1CQUFtQjtNQUNuQix5QkFBeUI7TUFDekIsMEJBQTBCO01BQzFCLHNCQUFzQjtNQUN0Qix1QkFBdUI7TUFDdkIsdUJBQXVCO01BQ3ZCLHdCQUF3QjtNQUN4QixxQkFBcUI7TUFDckIsMEJBQTBCO01BQzFCLHVCQUF1QjtNQUN2Qix3QkFBd0I7TUFDeEIsMkJBQTJCO01BQzNCLDBCQUEwQjtJQUMzQixDQUFDO0VBQ0Y7QUFDRDs7Q054T0MsTUFBWTtBQUNaLFFBQU07SUFBQ0M7SUFBVUM7RUFBa0IsSUFBSXpVLEdBQUdzSSxPQUFPQyxJQUFJO0FBR3JELE1BQUksQ0FBQyxDQUFDLFFBQVEsUUFBUSxFQUFFNkosU0FBU29DLFFBQVEsS0FBS0MsdUJBQXVCLFlBQVk7QUFDaEY7RUFDRDtBQUVBLE1BQUksQ0FBQ3pVLEdBQUcwVSxLQUFLbFEsUUFBUStELElBQUksZ0JBQWdCLEdBQUc7QUFDM0M7RUFDRDtBQUVBLE1BQUkzRyxTQUFTK1MsY0FBYyxxQ0FBcUMsR0FBRztBQUNsRTtFQUNEO0FBR0FQLG9CQUFrQjtBQUVsQi9DLGlCQUFlO0FBQ2YsUUFBQSxHQUFLOVIsbUJBQUFxVixTQUFRLEVBQUVqTSxLQUFLdkgsV0FBVztBQUNoQyxHQUFHOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJyZXF1aXJlIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgImFwaSIsICJpbml0TXdBcGkiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAiYXJncyIsICJsZW5ndGgiLCAibXciLCAibWVzc2FnZSIsICJwYXJzZSIsICJwbGFpbiIsICJyZWZUb29sYmFyQ29uZmlnIiwgIkNpdGVUZW1wbGF0ZSIsICJ3aW5kb3ciLCAiQ2l0ZVRCIiwgIk9wdGlvbnMiLCAibW9udGhzIiwgIm1vZGFsIiwgImF1dG9wYXJzZSIsICJleHBhbmR0ZW1wbGF0ZXMiLCAiZmllbGQiLCAiaW5jcmVtZW50X2dyb3VwIiwgImluY3JlbWVudF9idXR0b24iLCAiYXV0b2ZpbGxwcm9wIiwgImF1dG9maWxsaWQiLCAidG9vbHRpcCIsICJpbml0IiwgInJlZlRvb2xiYXIyIiwgIiRib2R5IiwgIkRlZmF1bHRPcHRpb25zIiwgImdldE9wdGlvbiIsICJvcHQiLCAiVXNlck9wdGlvbnMiLCAiXyQkd2lkdGgyIiwgIiQiLCAiZG9jdW1lbnQiLCAiZmluZCIsICJ0cmlnZ2VyIiwgIiR0YXJnZXQiLCAidGVtbGlzdCIsICJ0IiwgIlRlbXBsYXRlcyIsICJPYmplY3QiLCAiaGFzT3duIiwgIl8kJHdpZHRoIiwgInRlbSIsICJzZm9ybSIsICJlc2NTdHIiLCAic2hvcnRmb3JtIiwgImFjdGlvbm9iaiIsICJ0eXBlIiwgIm1vZHVsZSIsICJjb25jYXQiLCAiZGlhbG9nb2JqIiwgInJlc2l6ZW1lIiwgInRpdGxlIiwgImlkIiwgImh0bWwiLCAiZ2V0SW5pdGlhbCIsICJkaWFsb2ciLCAid2lkdGgiLCAiTWF0aCIsICJyb3VuZCIsICJvcGVuIiwgImdldE9wZW5UZW1wbGF0ZSIsICJnZXRGb3JtIiwgIm9uIiwgImUiLCAicHJldmVudERlZmF1bHQiLCAicHJldlBhcnNlQ2xpY2siLCAiYnV0dG9ucyIsICJyZWYiLCAiZ2V0UmVmIiwgIndpa2lFZGl0b3IiLCAibW9kdWxlcyIsICJ0b29sYmFyIiwgImZuIiwgImRvQWN0aW9uIiwgImRhdGEiLCAib3B0aW9ucyIsICJwb3N0IiwgInNob3dIaWRlRXh0cmEiLCAidGVtcGxhdGUiLCAiZGl2IiwgInNob3ciLCAidGV4dCIsICJoaWRlIiwgInJlc2V0Rm9ybSIsICJsYWJlbCIsICJ0ZW1wbGF0ZW5hbWUiLCAiYWN0aW9uIiwgInJlZnNlY3Rpb24iLCAic2VjdGlvbnMiLCAiY2l0ZXMiLCAiZ3JvdXBzIiwgInRvb2xzIiwgImxpc3QiLCAibmFtZWRyZWZzIiwgIm5yZWZzIiwgImljb24iLCAic2VjdGlvbiIsICJncm91cCIsICJkZWZhdWx0ZGlhbG9ncyIsICJsb2FkUmVmcyIsICJyZWZuYW1lIiwgInZhbCIsICJnZXROYW1lZFJlZiIsICJvZmYiLCAidXRpbCIsICJhZGRDU1MiLCAibWFpblJlZkxpc3QiLCAicmVmc0xvYWRlZCIsICJpbm5lcm9ubHkiLCAiZm9yaW5zZXJ0IiwgImkiLCAiaiIsICJnIiwgInJlcyIsICJyZWZvYmoiLCAic2hvcnR0YWciLCAiU3RyaW5nIiwgInRyaW0iLCAiZ2V0UXVvdGVkU3RyaW5nIiwgInJlZmdyb3VwIiwgImNvbnRlbnQiLCAiaW5jcmVtZW50YWJsZXMiLCAiZmllbGRzIiwgImZpZWxkbmFtZSIsICJmaWVsZGlkIiwgInJlcGxhY2UiLCAidG9TdHJpbmciLCAiYmFzaWMiLCAiZXh0cmEiLCAicHVzaCIsICJnZXRQYWdlVGV4dCIsICJsb2FkUmVmc0ludGVybmFsIiwgInJlZnNyZWdleCIsICJleGVjIiwgInNldHVwTmFtZWRSZWZzIiwgImNhbGxiYWNrIiwgInBvc3RkYXRhIiwgImNvbmZpZyIsICJnZXQiLCAicHJvcCIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJ0aGVuIiwgInJlc3RleHQiLCAid2lraXRleHQiLCAid2dBcnRpY2xlSWQiLCAicnZwcm9wIiwgInBhZ2VpZHMiLCAicnZleHBhbmR0ZW1wbGF0ZXMiLCAicXVlcnkiLCAicGFnZXRleHQiLCAicGFnZXMiLCAicmV2aXNpb25zIiwgInNhZmVEZWNvZGVVUklDb21wb25lbnQiLCAicyIsICJkZWNvZGVVUklDb21wb25lbnQiLCAiaW5pdEF1dG9maWxsIiwgIl8kJGF0dHIiLCAiZWxlbWlkIiwgImF0dHIiLCAiYXV0b3R5cGUiLCAidXJsIiwgImVuY29kZVVSSUNvbXBvbmVudCIsICJjcmVhdGVFbGVtZW50IiwgInNldEF0dHJpYnV0ZSIsICJoZWFkIiwgImFwcGVuZCIsICJhdXRvRmlsbCIsICJjbCIsICJjb2F1dGhvcnMiLCAiYXV0aG9ycyIsICJfJCRlcSRhdHRyIiwgImNsYXNzZXMiLCAiZXEiLCAic3BsaXQiLCAicGF0dCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAiLCAibiIsICJkb25lIiwgImNsYXNzXyIsICJ2YWx1ZSIsICJlcnIiLCAiZiIsICJfJCRlcSRhdHRyMiIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJqb2luIiwgImRhdGUiLCAiRFQiLCAiRGF0ZSIsICJ0ZXN0IiwgImZvcm1hdERhdGUiLCAiam91cm5hbCIsICJ2b2x1bWUiLCAiaXNzdWUiLCAiZG9pIiwgInB1Ymxpc2hlciIsICJsb2NhdGlvbiIsICJlZGl0aW9uIiwgImlzYm4iLCAiaXNzbiIsICJsYW5ndWFnZSIsICJjaGFwdGVyIiwgImluY3JlbWVudEZpZWxkcyIsICJfJCRhdHRyMiIsICJjdXJyZW50cm93IiwgInBhcmVudHMiLCAicHJldiIsICJjc3MiLCAiZGV0YWNoIiwgImluY3JlbWVudHMiLCAidHJzIiwgIm1ha2VGb3JtSW5uZXIiLCAicmV2ZXJzZSIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJ0ciIsICJhZnRlciIsICJmaWxsQWNjZXNzZGF0ZSIsICJfJCRhdHRyMyIsICJkYXRlc3RyIiwgInVzZWRheSIsICJ1c2Vtb250aCIsICJ6bW9udGgiLCAibW9udGgiLCAiZ2V0VVRDTW9udGgiLCAiemRhdGUiLCAiZ2V0VVRDRGF0ZSIsICJnZXRVVENGdWxsWWVhciIsICJuYW1lcyIsICJzdHVmZiIsICJzZWxlY3QiLCAiYmVmb3JlIiwgInByZXZsYWJlbCIsICJwYXJzZWxhYmVsIiwgImxpbmsiLCAiaHJlZiIsICJtYXJnaW4iLCAiZGlzcGxheSIsICJjb2xvciIsICJuYW1lZFJlZlNlbGVjdENsaWNrIiwgIm5yZWZQYXJzZUNsaWNrIiwgImZpbGxOcmVmUHJldmlldyIsICJwYXJzZWQiLCAiY2hvaWNlIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgImxhc3RuYW1lZHJlZmNob2ljZSIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSIsICJmaWxsVGVtcGxhdGVQcmV2aWV3IiwgInNldHRpbmciLCAic3EiLCAiZHEiLCAiZml4U3RyIiwgInNsaWNlIiwgInRvVXBwZXJDYXNlIiwgInJhdyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJfdGVtcGxhdGVPYmplY3QyIiwgImRpYWxvZ3MiLCAiZGlzcGxheUVycm9ycyIsICJlcnJvcnMiLCAicmVtb3ZlIiwgInRhYmxlIiwgImJvcmRlciIsICJwYWRkaW5nIiwgInRyMSIsICJ0aDEiLCAidGgyIiwgImltIiwgImFkIiwgInRkIiwgImVycm9yIiwgInRkMSIsICJ0ZDIiLCAibXNnIiwgInJlZlRvb2xiYXJCYXNlIiwgIl93aW5kb3ciLCAiY29uc3RydWN0b3IiLCAiYmFzaWNmaWVsZHMiLCAiZXhwYW5kZWRmaWVsZHMiLCAiaW5jcnNldHVwIiwgImF1dG9maWxscyIsICJfaXRlcmF0b3I2IiwgImVudHJpZXMiLCAiX3N0ZXA2IiwgImZpZWxkb2JqIiwgImxhYmVsZmllbGQiLCAic2V0dXAiLCAiaW5jcnZhbCIsICJhdXRvZGF0ZUZpZWxkcyIsICJpbmNsdWRlcyIsICJpbmNydHlwZSIsICJpbnB1dCIsICJ0YWJpbmRleCIsICJzdHlsZSIsICJjbGFzc25hbWUiLCAiYWRkQ2xhc3MiLCAibmVlZHNldHVwIiwgImtleXMiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAiYXV0b2ZpbGwiLCAiaGlkZGVuIiwgIm1haW4iLCAiZm9ybTEiLCAiX2l0ZXJhdG9yOCIsICJfc3RlcDgiLCAiZm9ybTIiLCAiX2l0ZXJhdG9yOSIsICJfc3RlcDkiLCAiZm9ybTMiLCAiJHRyIiwgIiR0ZDEiLCAiJGxhYmVsMSIsICJpbnB1dDEiLCAidGQzIiwgImxhYmVsMiIsICJ0ZDQiLCAiaW5wdXQyIiwgImV4dHJhcyIsICJzcGFuMSIsICJzcGFuMiIsICJyZWZUb29sYmFyTWVzYWdlcyIsICJ3Z1VzZXJMYW5ndWFnZSIsICJtZXNzYWdlcyIsICJzZXQiLCAid2dBY3Rpb24iLCAid2dQYWdlQ29udGVudE1vZGVsIiwgInVzZXIiLCAicXVlcnlTZWxlY3RvciIsICJnZXRCb2R5Il0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgInNyYy9FZGl0dG9vbHMtcmVmVG9vbGJhci9FZGl0dG9vbHMtcmVmVG9vbGJhci50cyIsICJzcmMvRWRpdHRvb2xzLXJlZlRvb2xiYXIvbW9kdWxlcy91dGlsL2FwaS50cyIsICJzcmMvRWRpdHRvb2xzLXJlZlRvb2xiYXIvbW9kdWxlcy91dGlsL2dldE1lc3NhZ2UudHMiLCAic3JjL0VkaXR0b29scy1yZWZUb29sYmFyL21vZHVsZXMvUmVmVG9vbGJhckNvbmZpZy5qcyIsICJzcmMvRWRpdHRvb2xzLXJlZlRvb2xiYXIvbW9kdWxlcy9SZWZUb29sYmFyMi4wLmpzIiwgInNyYy9FZGl0dG9vbHMtcmVmVG9vbGJhci9tb2R1bGVzL1JlZlRvb2xiYXJCYXNlLmpzIiwgInNyYy9FZGl0dG9vbHMtcmVmVG9vbGJhci9tb2R1bGVzL21lc3NhZ2VzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICJpbXBvcnQgJy4vRWRpdHRvb2xzLXJlZlRvb2xiYXIubGVzcyc7XG5pbXBvcnQge2dldEJvZHl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5pbXBvcnQge3JlZlRvb2xiYXIyfSBmcm9tICcuL21vZHVsZXMvUmVmVG9vbGJhcjIuMCc7XG5pbXBvcnQge3JlZlRvb2xiYXJCYXNlfSBmcm9tICcuL21vZHVsZXMvUmVmVG9vbGJhckJhc2UnO1xuaW1wb3J0IHtyZWZUb29sYmFyTWVzYWdlc30gZnJvbSAnLi9tb2R1bGVzL21lc3NhZ2VzJztcblxuLyoqXG4gKiBSZWZUb29sYmFyXG4gKlxuICogQWRkcyB0b29scyBmb3IgY2l0aW5nIHJlZmVyZW5jZXMgdG8gdGhlIGVkaXQgdG9vbGJhci5cbiAqIE9uZSBvZiB0d28gcG9zc2libGUgdmVyc2lvbnMgd2lsbCBsb2FkIChSZWZ0b29sYmFyIDEuMCBvciBSZWZ0b29sYmFyIDEuMClcbiAqIGRlcGVuZGluZyBvbiB0aGUgdXNlciBwcmVmZXJlbmNlcyAodGhlIHVzZWJldGF0b29sYmFyIHByZWZlcmVuY2UpLlxuICpcbiAqIEBhdXRob3IgTXIuWi1tYW4sIEthbGRhcmlcbiAqL1xuKCgpOiB2b2lkID0+IHtcblx0Y29uc3Qge3dnQWN0aW9uLCB3Z1BhZ2VDb250ZW50TW9kZWx9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5cdC8vIE9ubHkgZXhlY3V0ZSB3aGVuIGVkaXRpbmcvcHJldmlld2luZyB3aWtpdGV4dCBwYWdlc1xuXHRpZiAoIVsnZWRpdCcsICdzdWJtaXQnXS5pbmNsdWRlcyh3Z0FjdGlvbikgfHwgd2dQYWdlQ29udGVudE1vZGVsICE9PSAnd2lraXRleHQnKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFtdy51c2VyLm9wdGlvbnMuZ2V0KCd1c2ViZXRhdG9vbGJhcicpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhW25hbWU9d3BUZXh0Ym94MV1bcmVhZG9ubHldJykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBMb2FkIGxvY2FsIG1lc3NhZ2VzLlxuXHRyZWZUb29sYmFyTWVzYWdlcygpO1xuXHQvLyBMb2FkIG1haW4gZnVuY3Rpb25zXG5cdHJlZlRvb2xiYXJCYXNlKCk7XG5cdHZvaWQgZ2V0Qm9keSgpLnRoZW4ocmVmVG9vbGJhcjIpO1xufSkoKTtcbiIsICJpbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoJ1JlZlRvb2xiYXIvMi4wJyk7XG5cbmV4cG9ydCB7YXBpfTtcbiIsICJjb25zdCBnZXRNZXNzYWdlID0gKGtleTogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZyA9PiB7XG5cdC8vIE1lc3NhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZTpcblx0Ly8gKiBzZWUgbWVzc2FnZXMudHNcblx0Ly8gKiBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXHRyZXR1cm4gYXJncy5sZW5ndGggPyBtdy5tZXNzYWdlKGtleSwgLi4uYXJncykucGFyc2UoKSA6IG13Lm1lc3NhZ2Uoa2V5KS5wbGFpbigpO1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICIvKiBnbG9iYWwgQ2l0ZVRCICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UsIG5vLW5ldywgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4vLyBAdHMtbm9jaGVja1xuLyoqXG4gKiBTaXRld2lkZSBvcHRpb25zIGZvciB0aGUgdGhlIENpdGUgdG9vbGJhciBidXR0b246XG4gKiBBbGwgb3B0aW9ucyBzaG91bGQgYmUgc3BlY2lmaWVkXG4gKlxuICogXCJkYXRlIGZvcm1hdFwiIHNldHMgdGhlIGRhdGUgZm9ybWF0IHVzZWQgZm9yIHRoZSBmdW5jdGlvbiB0byBpbnNlcnQgdGhlIGN1cnJlbnQgZGF0ZVxuICogQ3VycmVudCBhdmFpbGFibGUgb3B0aW9uczpcbiAqIGRhdGUgLSB0aGUgZGF5IG9mIHRoZSBtb250aFxuICogemRhdGUgLSBkYXkgb2YgdGhlIG1vbnRoLCB6ZXJvIHBhZGRlZCB0byAyIGRpZ2l0c1xuICogbW9udGhuYW1lIC0gVGhlIG1vbnRoIG5hbWVcbiAqIG1vbnRoIC0gVGhlIG51bWJlcmljIG1vbnRoICgxLTEyKVxuICogem1vbnRoIC0gbnVtZXJpYyBtb250aCwgemVybyBwYWRkZWQgdG8gMiBkaWdpdHNcbiAqIHllYXIgLSBUaGUgZnVsbCB5ZWFyICg0IGRpZ2l0cylcbiAqXG4gKiBcImF1dG9kYXRlIGZpZWxkc1wiIGlzIGEgbGlzdCBvZiB0ZW1wbGF0ZSBmaWVsZHMgdGhhdCBzaG91bGQgaGF2ZSBhIGJ1dHRvbiB0byBpbnNlcnQgdGhlIGN1cnJlbnQgZGF0ZVxuICpcbiAqIFwibW9udGhzXCIgaXMgYSBsaXN0IG9mIGxvY2FsaXplZCBtb250aCBuYW1lc1xuICpcbiAqIFwibW9kYWxcIiAtIGlmIHRydWUsIHRoZSBkaWFsb2dzIHdpbGwgYmUgbW9kYWwgd2luZG93cywgYmxvY2tpbmcgYWNjZXNzIHRvIHRoZSByZXN0IG9mIHRoZSB3aW5kb3cuXG4gKiBBbGwgZGlhbG9ncyBpbiB0aGUgdG9vbGJhciBhcmUgbW9kYWwgYnkgZGVmYXVsdFxuICpcbiAqIFwiYXV0b3BhcnNlXCIgLSBpZiB0cnVlLCBwcmV2aWV3aW5nIGEgcmVmIHdpbGwgYXV0b21hdGljYWxseSB0cmlnZ2VyIGEgcHJldmlldyBvZiB0aGUgcGFyc2VkIHdpa2l0ZXh0LlxuICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHNldCB0aGlzIHRvIHRydWUgYXMgYSBnbG9iYWwgc2V0dGluZyBhcyBpdCBtYXkgc2xvdyB0aGUgc2NyaXB0IGRvd24gZm9yXG4gKiBwZW9wbGUgd2l0aCBzbG93IGNvbm5lY3Rpb25zLlxuICpcbiAqIFwiZXhwYW5kdGVtcGxhdGVzXCIgLSBpZiB0cnVlLCB0ZW1wbGF0ZXMgYW5kIHBhcnNlciBmdW5jdGlvbnMgd2lsbCBiZSBleHBhbmRlZCB3aGVuIGdldHRpbmcgcGFnZSB0ZXh0XG4gKiAodGVtcGxhdGVzIGluc2lkZSBvZiByZWYgdGFncyB3aWxsIG5vdCBiZSBleHBhbmRlZCkuIFRoaXMgd2lsbCBhbGxvdyByZWZlcmVuY2VzIGluc2lkZSBvZiB0ZW1wbGF0ZXMgb3JcbiAqIHJlZmVyZW5jZXMgdXNpbmcge3sjdGFnOnJlZn19IHRvIGJlIGxpc3RlZCBpbiB0aGUgbmFtZWQgcmVmcyBkaWFsb2cgYW5kIHNlYXJjaGVkIGJ5IGVycm9yIGNoZWNrcy5cbiAqIFRoaXMgbWF5IHNsb3cgbG9hZGluZyB0aGUgbmFtZWQgcmVmcyBhbmQgZXJyb3IgY2hlY2sgZGlhbG9ncy5cbiAqL1xuY29uc3QgcmVmVG9vbGJhckNvbmZpZyA9ICgpID0+IHtcblx0Y29uc3Qge0NpdGVUZW1wbGF0ZX0gPSB3aW5kb3c7XG5cblx0Q2l0ZVRCLk9wdGlvbnMgPSB7XG5cdFx0J2RhdGUgZm9ybWF0JzogJzx5ZWFyPi08em1vbnRoPi08emRhdGU+Jyxcblx0XHQnYXV0b2RhdGUgZmllbGRzJzogWydhY2Nlc3NkYXRlJ10sXG5cdFx0bW9udGhzOiBbJzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc25pyIJywgJzfmnIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sXG5cdFx0bW9kYWw6IHRydWUsXG5cdFx0YXV0b3BhcnNlOiB0cnVlLFxuXHRcdGV4cGFuZHRlbXBsYXRlczogZmFsc2UsXG5cdH07XG5cblx0Ly8gQ2l0ZSB0ZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHRuZXcgQ2l0ZVRlbXBsYXRlKFxuXHRcdCdjaXRlIHdlYicsXG5cdFx0J3dlYicsXG5cdFx0W1xuXHRcdFx0Ly8gQmFzaWMgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9yPE4+Jyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9yX2FsdCcsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3RpdGxlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAndGl0bGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd1cmwnLFxuXHRcdFx0XHRhdXRvZmlsbGlkOiAndXJsJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnd2Vic2l0ZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2pvdXJuYWwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwdWJsaXNoZXInLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdwdWJsaXNoZXInLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhY2Nlc3NkYXRlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncmVmJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcmVmLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdC8vIEV4cGFuZGVkIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2F1dGhvcmxpbms8Tj4nLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1hdXRob3JsaW5rLXRvb2x0aXAnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3JsaW5rJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFzdDxOPicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhc3QtaW5jcicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2ZpcnN0PE4+Jyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZmlyc3QtaW5jcicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcicsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZScsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBhZ2UtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3BhZ2VzJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAncGFnZXMnLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1wYWdlcy10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFuZ3VhZ2UnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYW5ndWFnZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Zvcm1hdCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2RvaScsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICdkb2knLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdkb2knLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkYXRlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZGF0ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3F1b3RlJyxcblx0XHRcdH0sXG5cdFx0XVxuXHQpO1xuXHRuZXcgQ2l0ZVRlbXBsYXRlKFxuXHRcdCdjaXRlIG5ld3MnLFxuXHRcdCduZXdzJyxcblx0XHRbXG5cdFx0XHQvLyBCYXNpYyBmaWVsZHNcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhdXRob3I8Tj4nLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3JfYWx0Jyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAndGl0bGUnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICd0aXRsZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3VybCcsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICd1cmwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhY2Nlc3NkYXRlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnd29yaycsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXdvcmstdG9vbHRpcCcsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2pvdXJuYWwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhZ2VuY3knLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpc3N1ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3B1Ymxpc2hlcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3B1Ymxpc2hlcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2RhdGUnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdkYXRlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncmVmJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcmVmLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdC8vIEV4cGFuZGVkIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2F1dGhvcmxpbms8Tj4nLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1hdXRob3JsaW5rLXRvb2x0aXAnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3JsaW5rJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFzdDxOPicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhc3QtaW5jcicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2ZpcnN0PE4+Jyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZmlyc3QtaW5jcicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcicsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZScsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBhZ2UtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3BhZ2VzJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAncGFnZXMnLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1wYWdlcy10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFuZ3VhZ2UnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYW5ndWFnZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Zvcm1hdCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2RvaScsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICdkb2knLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdkb2knLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdxdW90ZScsXG5cdFx0XHR9LFxuXHRcdF1cblx0KTtcblx0bmV3IENpdGVUZW1wbGF0ZShcblx0XHQnY2l0ZSBib29rJyxcblx0XHQnYm9vaycsXG5cdFx0W1xuXHRcdFx0Ly8gQmFzaWMgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9yPE4+Jyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9yX2FsdCcsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2NvYXV0aG9ycycsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2NvYXV0aG9ycycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VkaXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3RpdGxlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAndGl0bGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkYXRlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAneWVhcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3B1Ymxpc2hlcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3B1Ymxpc2hlcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnbG9jYXRpb24nLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpc2JuJyxcblx0XHRcdFx0LyogXCJhdXRvZmlsbGlkXCI6XCJpc2JuXCIsICovIGF1dG9maWxscHJvcDogJ2lzYm4nLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwYWdlJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcGFnZS10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZXMnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdwYWdlcycsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBhZ2VzLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdlZGl0aW9uJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZWRpdGlvbicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3VybCcsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICd1cmwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhY2Nlc3NkYXRlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncmVmJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcmVmLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdC8vIEV4cGFuZGVkIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xhc3Q8Tj4nLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYXN0LWluY3InLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3InLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdmaXJzdDxOPicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2ZpcnN0LWluY3InLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdhdXRob3InLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhdXRob3JsaW5rPE4+Jyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtYXV0aG9ybGluay10b29sdGlwJyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9ybGluaycsXG5cdFx0XHRcdGluY3JlbWVudF9idXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VkaXRvcjxOPi1sYXN0Jyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnZWRpdG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdG9yPE4+LWZpcnN0Jyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnZWRpdG9yJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdG9yPE4+LWxpbmsnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdlZGl0b3JsaW5rJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFuZ3VhZ2UnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYW5ndWFnZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Zvcm1hdCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2NoYXB0ZXInLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdjaGFwdGVyJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncXVvdGUnLFxuXHRcdFx0fSxcblx0XHRdXG5cdCk7XG5cdG5ldyBDaXRlVGVtcGxhdGUoXG5cdFx0J2NpdGUgam91cm5hbCcsXG5cdFx0J2pvdXJuYWwnLFxuXHRcdFtcblx0XHRcdC8vIEJhc2ljIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2F1dGhvcjxOPicsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcl9hbHQnLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdjb2F1dGhvcnMnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdjb2F1dGhvcnMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd0aXRsZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3RpdGxlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnam91cm5hbCcsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2pvdXJuYWwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkYXRlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZGF0ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3ZvbHVtZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3ZvbHVtZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2lzc3VlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnaXNzdWUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwYWdlJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtcGFnZS10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZXMnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdwYWdlcycsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBhZ2VzLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkb2knLFxuXHRcdFx0XHRhdXRvZmlsbGlkOiAnZG9pJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZG9pJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncG1pZCcsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICdwbWlkJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAndXJsJyxcblx0XHRcdFx0YXV0b2ZpbGxpZDogJ3VybCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2FjY2Vzc2RhdGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdyZWYnLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1yZWYtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0Ly8gRXhwYW5kZWQgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9ybGluazxOPicsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWF1dGhvcmxpbmstdG9vbHRpcCcsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2F1dGhvcmxpbmsnLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdsYXN0PE4+Jyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnbGFzdC1pbmNyJyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZmlyc3Q8Tj4nLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdmaXJzdC1pbmNyJyxcblx0XHRcdFx0aW5jcmVtZW50X2dyb3VwOiAnYXV0aG9yJyxcblx0XHRcdFx0aW5jcmVtZW50X2J1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdG9yPE4+LWxhc3QnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdlZGl0b3InLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdlZGl0b3I8Tj4tZmlyc3QnLFxuXHRcdFx0XHRpbmNyZW1lbnRfZ3JvdXA6ICdlZGl0b3InLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdlZGl0b3I8Tj4tbGluaycsXG5cdFx0XHRcdGluY3JlbWVudF9ncm91cDogJ2VkaXRvcmxpbmsnLFxuXHRcdFx0XHRpbmNyZW1lbnRfYnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdzZXJpZXMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhdCcsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWF0LXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd0cmFucy10aXRsZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3B1Ymxpc2hlcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3B1Ymxpc2hlcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFuZ3VhZ2UnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYW5ndWFnZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Zvcm1hdCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2lzc24nLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdpc3NuJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncG1jJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnb2NsYycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2JpYmNvZGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpZCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3F1b3RlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncG9zdHNjcmlwdCcsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLXBvc3RzY3JpcHQtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdF1cblx0KTtcblx0bmV3IENpdGVUZW1wbGF0ZShcblx0XHQnY2l0ZSBjb25mZXJlbmNlJyxcblx0XHQnY29uZmVyZW5jZScsXG5cdFx0W1xuXHRcdFx0Ly8gQmFzaWMgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9yJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnYXV0aG9yMScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2NvYXV0aG9ycycsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2NvYXV0aG9ycycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3RpdGxlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAndGl0bGUnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdjb25mZXJlbmNlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnY29uZmVyZW5jZXVybCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2Jvb2t0aXRsZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2pvdXJuYWwnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdkYXRlJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZGF0ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3llYXInLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdtb250aCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3ZvbHVtZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3ZvbHVtZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ3B1Ymxpc2hlcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3B1Ymxpc2hlcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xvY2F0aW9uJyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnbG9jYXRpb24nLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpc2JuJyAvKiAsIFwiYXV0b2ZpbGxpZFwiOlwiaXNiblwiICovLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwYWdlcycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2RvaScsXG5cdFx0XHRcdGF1dG9maWxsaWQ6ICdkb2knLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdkb2knLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwbWlkJyxcblx0XHRcdFx0YXV0b2ZpbGxpZDogJ3BtaWQnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd1cmwnLFxuXHRcdFx0XHRhdXRvZmlsbGlkOiAndXJsJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYWNjZXNzZGF0ZScsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWFjY2Vzc2RhdGUtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0Ly8gRXhwYW5kZWQgZmllbGRzXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnbGFzdCcsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhc3QxJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZmlyc3QnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdmaXJzdDEnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdhdXRob3JsaW5rJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtYXV0aG9ybGluay10b29sdGlwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnb3RoZXJzJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZWRpdGlvbicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2VkaXRpb24nLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdsYW5ndWFnZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhbmd1YWdlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZm9ybWF0Jyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnaXNzbicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ29jbGMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdpZCcsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWlkLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdxdW90ZScsXG5cdFx0XHR9LFxuXHRcdF1cblx0KTtcblx0bmV3IENpdGVUZW1wbGF0ZShcblx0XHQnY2l0ZSBlbmN5Y2xvcGVkaWEnLFxuXHRcdCdlbmN5Y2xvcGVkaWEnLFxuXHRcdFtcblx0XHRcdC8vIEJhc2ljIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2F1dGhvcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2F1dGhvcjEnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd0aXRsZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VkaXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VuY3ljbG9wZWRpYScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3RpdGxlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAndm9sdW1lJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAneWVhcicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ3llYXInLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdwdWJsaXNoZXInLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdwdWJsaXNoZXInLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdsb2NhdGlvbicsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xvY2F0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnaXNibicgLyogLCBcImF1dG9maWxsaWRcIjpcImlzYm5cIiAqLyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncGFnZXMnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICd1cmwnLFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdC8vIEV4cGFuZGVkIGZpZWxkc1xuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2xhc3QnLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdsYXN0MScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2ZpcnN0Jyxcblx0XHRcdFx0YXV0b2ZpbGxwcm9wOiAnZmlyc3QxJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnYXV0aG9ybGluaycsXG5cdFx0XHRcdHRvb2x0aXA6ICdjaXRlLWF1dGhvcmxpbmstdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2NvYXV0aG9ycycsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2NvYXV0aG9ycycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ290aGVycycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2VkaXRpb24nLFxuXHRcdFx0XHRhdXRvZmlsbHByb3A6ICdlZGl0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnb2NsYycsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2lkJyxcblx0XHRcdFx0dG9vbHRpcDogJ2NpdGUtaWQtdG9vbHRpcCcsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ2FjY2Vzc2RhdGUnLFxuXHRcdFx0XHR0b29sdGlwOiAnY2l0ZS1hY2Nlc3NkYXRlLXRvb2x0aXAnLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmllbGQ6ICdsYW5ndWFnZScsXG5cdFx0XHRcdGF1dG9maWxscHJvcDogJ2xhbmd1YWdlJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZm9ybWF0Jyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAnZGF0ZScsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZDogJ21vbnRoJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkOiAncXVvdGUnLFxuXHRcdFx0fSxcblx0XHRdXG5cdCk7XG5cblx0Ly8gZXhlY3V0ZSBtYWluIGZ1bmN0aW9uXG5cdENpdGVUQi5pbml0KCk7XG59O1xuXG5leHBvcnQge3JlZlRvb2xiYXJDb25maWd9O1xuIiwgIi8qIGdsb2JhbCBDaXRlVEIgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7YXBpfSBmcm9tICcuL3V0aWwvYXBpJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi91dGlsL2dldE1lc3NhZ2UnO1xuaW1wb3J0IHtyZWZUb29sYmFyQ29uZmlnfSBmcm9tICcuL1JlZlRvb2xiYXJDb25maWcnO1xuXG4vLyBUT0RPOiBtYWtlIGF1dG9kYXRlIGFuIG9wdGlvbiBpbiB0aGUgQ2l0ZVRlbXBsYXRlIG9iamVjdCwgbm90IGEgcHJlZmVyZW5jZVxuY29uc3QgcmVmVG9vbGJhcjIgPSAoJGJvZHkpID0+IHtcblx0Ly8gRGVmYXVsdCBvcHRpb25zLCB0aGVzZSBtYWlubHkgZXhpc3Qgc28gdGhlIHNjcmlwdCB3b24ndCBicmVhayBpZiBhIG5ldyBvcHRpb24gaXMgYWRkZWRcblx0Q2l0ZVRCLkRlZmF1bHRPcHRpb25zID0ge1xuXHRcdCdkYXRlIGZvcm1hdCc6ICc8eWVhcj4tPHptb250aD4tPHpkYXRlPicsXG5cdFx0J2F1dG9kYXRlIGZpZWxkcyc6IFtdLFxuXHRcdG1vbnRoczogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuXHRcdG1vZGFsOiB0cnVlLFxuXHRcdGF1dG9wYXJzZTogZmFsc2UsXG5cdFx0ZXhwYW5kdGVtcGxhdGVzOiBmYWxzZSxcblx0fTtcblxuXHQvLyBHZXQgYW4gb3B0aW9uIC0gdXNlciBzZXR0aW5ncyBvdmVycmlkZSBnbG9iYWwgd2hpY2ggb3ZlcnJpZGUgZGVmYXVsdHNcblx0Q2l0ZVRCLmdldE9wdGlvbiA9IChvcHQpID0+IHtcblx0XHRpZiAoQ2l0ZVRCLlVzZXJPcHRpb25zW29wdF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIENpdGVUQi5Vc2VyT3B0aW9uc1tvcHRdO1xuXHRcdH0gZWxzZSBpZiAoQ2l0ZVRCLk9wdGlvbnNbb3B0XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gQ2l0ZVRCLk9wdGlvbnNbb3B0XTtcblx0XHR9XG5cdFx0cmV0dXJuIENpdGVUQi5EZWZhdWx0T3B0aW9uc1tvcHRdO1xuXHR9O1xuXG5cdENpdGVUQi5pbml0ID0gKCkgPT4ge1xuXHRcdC8qIE1haW4gc3R1ZmYsIGJ1aWxkIHRoZSBhY3R1YWwgdG9vbGJhciBzdHJ1Y3R1cmVcblx0XHQgKiAxLiBnZXQgdGhlIHRlbXBsYXRlIGxpc3QsIG1ha2UgdGhlIGRyb3Bkb3duIGxpc3QgYW5kIHNldCB1cCB0aGUgdGVtcGxhdGUgZGlhbG9nIGJveGVzXG5cdFx0ICogMi4gYWN0dWFsbHkgYnVpbGQgdGhlIHRvb2xiYXI6XG5cdFx0ICogLSBBIHNlY3Rpb24gZm9yIGNpdGVzXG5cdFx0ICogLS0gZHJvcGRvd24gZm9yIHRoZSB0ZW1wbGF0ZXMgKHByZXZpb3VzbHkgZGVmaW5lZClcblx0XHQgKiAtLSBidXR0b24gZm9yIG5hbWVkIHJlZnMgd2l0aCBhIGRpYWxvZyBib3hcblx0XHQgKiAzLiBhZGQgdGhlIHdob2xlIHRoaW5nIHRvIHRoZSBtYWluIHRvb2xiYXJcblx0XHQgKi9cblxuXHRcdCQoZG9jdW1lbnQpLmZpbmQoJ2hlYWQnKS50cmlnZ2VyKCdyZWZ0b29sYmFyYmFzZScpO1xuXHRcdGNvbnN0ICR0YXJnZXQgPSAkYm9keS5maW5kKCd0ZXh0YXJlYVtuYW1lPXdwVGV4dGJveDFdJyk7XG5cdFx0Y29uc3QgdGVtbGlzdCA9IHt9O1xuXHRcdGZvciAoY29uc3QgdCBpbiBDaXRlVEIuVGVtcGxhdGVzKSB7XG5cdFx0XHRpZiAoT2JqZWN0Lmhhc093bihDaXRlVEIuVGVtcGxhdGVzLCB0KSkge1xuXHRcdFx0XHRjb25zdCB0ZW0gPSBDaXRlVEIuVGVtcGxhdGVzW3RdO1xuXHRcdFx0XHRjb25zdCBzZm9ybSA9IENpdGVUQi5lc2NTdHIodGVtLnNob3J0Zm9ybSk7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbm9iaiA9IHtcblx0XHRcdFx0XHR0eXBlOiAnZGlhbG9nJyxcblx0XHRcdFx0XHRtb2R1bGU6IGBjaXRlLWRpYWxvZy0ke3Nmb3JtfWAsXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGRpYWxvZ29iaiA9IHt9O1xuXHRcdFx0XHRkaWFsb2dvYmpbYGNpdGUtZGlhbG9nLSR7c2Zvcm19YF0gPSB7XG5cdFx0XHRcdFx0cmVzaXplbWU6IGZhbHNlLFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtZWRpYXdpa2kvbXNnLWRvY1xuXHRcdFx0XHRcdHRpdGxlOiBtdy5tZXNzYWdlKGBjaXRlLWRpYWxvZy0ke3Nmb3JtfWApLnBhcnNlKCksXG5cdFx0XHRcdFx0aWQ6IGBjaXRldG9vbGJhci0ke3Nmb3JtfWAsXG5cdFx0XHRcdFx0aW5pdDogKCkgPT4ge30sXG5cdFx0XHRcdFx0aHRtbDogdGVtLmdldEluaXRpYWwoKSxcblx0XHRcdFx0XHRkaWFsb2c6IHtcblx0XHRcdFx0XHRcdHdpZHRoOiBNYXRoLnJvdW5kKCQod2luZG93KS53aWR0aCgpID8/IDAgKiAwLjgpLFxuXHRcdFx0XHRcdFx0b3BlbigpIHtcblx0XHRcdFx0XHRcdFx0JCh0aGlzKS5odG1sKENpdGVUQi5nZXRPcGVuVGVtcGxhdGUoKS5nZXRGb3JtKCkpO1xuXHRcdFx0XHRcdFx0XHQvKiogQHBhcmFtIHtqUXVlcnkuRXZlbnR9IGUgKi9cblx0XHRcdFx0XHRcdFx0JGJvZHkuZmluZCgnLmNpdGUtcHJldi1wYXJzZScpLm9uKCdjbGljaycsIChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdENpdGVUQi5wcmV2UGFyc2VDbGljaygpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRidXR0b25zOiB7XG5cdFx0XHRcdFx0XHRcdCdjaXRlLWZvcm0tc3VibWl0JygpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCByZWYgPSBDaXRlVEIuZ2V0UmVmKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHQkKHRoaXMpLmRpYWxvZygnY2xvc2UnKTtcblx0XHRcdFx0XHRcdFx0XHQkLndpa2lFZGl0b3IubW9kdWxlcy50b29sYmFyLmZuLmRvQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0JCh0aGlzKS5kYXRhKCdjb250ZXh0JyksXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdlbmNhcHN1bGF0ZScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwb3N0OiByZWYsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0JCh0aGlzKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCdjaXRlLWZvcm0tc2hvd2hpZGUnOiBDaXRlVEIuc2hvd0hpZGVFeHRyYSxcblx0XHRcdFx0XHRcdFx0J2NpdGUtcmVmcHJldmlldycoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgcmVmID0gQ2l0ZVRCLmdldFJlZihmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRlbXBsYXRlID0gQ2l0ZVRCLmdldE9wZW5UZW1wbGF0ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRpdiA9ICQoYCNjaXRldG9vbGJhci0ke0NpdGVUQi5lc2NTdHIodGVtcGxhdGUuc2hvcnRmb3JtKX1gKTtcblx0XHRcdFx0XHRcdFx0XHRkaXYuZmluZCgnLmNpdGUtcHJldmlldy1sYWJlbCcpLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRkaXYuZmluZCgnLmNpdGUtcmVmLXByZXZpZXcnKS50ZXh0KHJlZikuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChDaXRlVEIuZ2V0T3B0aW9uKCdhdXRvcGFyc2UnKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Q2l0ZVRCLnByZXZQYXJzZUNsaWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpdi5maW5kKCcuY2l0ZS1wcmV2LXBhcnNlJykuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGl2LmZpbmQoJy5jaXRlLXByZXYtcGFyc2VkLWxhYmVsJykuaGlkZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGl2LmZpbmQoJy5jaXRlLXByZXZpZXctcGFyc2VkJykuaHRtbCgnJyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnd2lraWVkaXRvci10b29sYmFyLXRvb2wtbGluay1jYW5jZWwnKCkge1xuXHRcdFx0XHRcdFx0XHRcdCQodGhpcykuZGlhbG9nKCdjbG9zZScpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnY2l0ZS1mb3JtLXJlc2V0JygpIHtcblx0XHRcdFx0XHRcdFx0XHRDaXRlVEIucmVzZXRGb3JtKCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0JHRhcmdldC53aWtpRWRpdG9yKCdhZGREaWFsb2cnLCBkaWFsb2dvYmopO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHQvKiBUeXBlRXJyb3I6IHJhbmdlIGlzIG51bGwgKi9cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBpZiAoIUNpdGVUQi5nZXRPcHRpb24oJ21vZGFsJykpIHtcblx0XHRcdFx0Ly8gXHQkYm9keS5maW5kKGAjY2l0ZXRvb2xiYXItJHtzZm9ybX1gKS5kaWFsb2coJ29wdGlvbicsICdtb2RhbCcsIGZhbHNlKTtcblx0XHRcdFx0Ly8gfVxuXHRcdFx0XHR0ZW1saXN0W3Nmb3JtXSA9IHtcblx0XHRcdFx0XHRsYWJlbDogdGVtLnRlbXBsYXRlbmFtZSxcblx0XHRcdFx0XHRhY3Rpb246IGFjdGlvbm9iaixcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCByZWZzZWN0aW9uID0ge1xuXHRcdFx0c2VjdGlvbnM6IHtcblx0XHRcdFx0Y2l0ZXM6IHtcblx0XHRcdFx0XHR0eXBlOiAndG9vbGJhcicsXG5cdFx0XHRcdFx0bGFiZWw6IGdldE1lc3NhZ2UoJ2NpdGUtc2VjdGlvbi1sYWJlbCcpLFxuXHRcdFx0XHRcdGdyb3Vwczoge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGU6IHtcblx0XHRcdFx0XHRcdFx0dG9vbHM6IHtcblx0XHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogZ2V0TWVzc2FnZSgnY2l0ZS10ZW1wbGF0ZS1saXN0JyksXG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0OiB0ZW1saXN0LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bmFtZWRyZWZzOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBnZXRNZXNzYWdlKCdjaXRlLW5hbWVkLXJlZnMtbGFiZWwnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHM6IHtcblx0XHRcdFx0XHRcdFx0XHRucmVmczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2RpYWxvZycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZTogJ2NpdGUtdG9vbGJhci1uYW1lZHJlZnMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdGljb246ICdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvdGh1bWIvYi9iZS9OdXZvbGFfY2xpcGJvYXJkX2xpbmVkLnN2Zy8yMnB4LU51dm9sYV9jbGlwYm9hcmRfbGluZWQuc3ZnLnBuZycsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZWN0aW9uOiAnY2l0ZXMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Z3JvdXA6ICduYW1lZHJlZnMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGdldE1lc3NhZ2UoJ2NpdGUtbmFtZWQtcmVmcy1idXR0b24nKSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9O1xuXG5cdFx0Y29uc3QgZGVmYXVsdGRpYWxvZ3MgPSB7XG5cdFx0XHQnY2l0ZS10b29sYmFyLW5hbWVkcmVmcyc6IHtcblx0XHRcdFx0dGl0bGU6IG13Lm1lc3NhZ2UoJ2NpdGUtbmFtZWQtcmVmcy10aXRsZScpLnBhcnNlKCksXG5cdFx0XHRcdHJlc2l6ZW1lOiBmYWxzZSxcblx0XHRcdFx0aWQ6ICdjaXRldG9vbGJhci1uYW1lZHJlZnMnLFxuXHRcdFx0XHRodG1sOiBgPGRpdiBpZD1cImNpdGUtbmFtZWRyZWYtbG9hZGluZ1wiPiA8aW1nIHNyYz1cImh0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy9iL2IxL0xvYWRpbmdfaWNvbi5naWZcIiAvPiAmbmJzcDske2dldE1lc3NhZ2UoXG5cdFx0XHRcdFx0J2NpdGUtbG9hZGluZydcblx0XHRcdFx0KX08L2Rpdj5gLFxuXHRcdFx0XHRpbml0OiAoKSA9PiB7fSxcblx0XHRcdFx0ZGlhbG9nOiB7XG5cdFx0XHRcdFx0d2lkdGg6IE1hdGgucm91bmQoJCh3aW5kb3cpLndpZHRoKCkgPz8gMCAqIDAuOCksXG5cdFx0XHRcdFx0b3BlbigpIHtcblx0XHRcdFx0XHRcdENpdGVUQi5sb2FkUmVmcygpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YnV0dG9uczoge1xuXHRcdFx0XHRcdFx0J2NpdGUtZm9ybS1zdWJtaXQnKCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZWZuYW1lID0gJGJvZHkuZmluZCgnI2NpdGUtbmFtZWRyZWYtc2VsZWN0JykudmFsKCk7XG5cdFx0XHRcdFx0XHRcdGlmIChyZWZuYW1lID09PSAnJykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLmRpYWxvZygnY2xvc2UnKTtcblx0XHRcdFx0XHRcdFx0JC53aWtpRWRpdG9yLm1vZHVsZXMudG9vbGJhci5mbi5kb0FjdGlvbihcblx0XHRcdFx0XHRcdFx0XHQkKHRoaXMpLmRhdGEoJ2NvbnRleHQnKSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnZW5jYXBzdWxhdGUnLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwb3N0OiBDaXRlVEIuZ2V0TmFtZWRSZWYocmVmbmFtZSwgdHJ1ZSksXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0JCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCd3aWtpZWRpdG9yLXRvb2xiYXItdG9vbC1saW5rLWNhbmNlbCcoKSB7XG5cdFx0XHRcdFx0XHRcdCQodGhpcykuZGlhbG9nKCdjbG9zZScpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdCR0YXJnZXQud2lraUVkaXRvcignYWRkRGlhbG9nJywgZGVmYXVsdGRpYWxvZ3MpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gZXJyb3Igb2NjdXJyZWQgc2V0dGluZyB1cCB3aWtpZWRpdG9yLlxuXHRcdH1cblx0XHQkYm9keS5maW5kKCcjY2l0ZXRvb2xiYXItbmFtZWRyZWZzJykub2ZmKCdkaWFsb2dvcGVuJyk7XG5cdFx0aWYgKCFDaXRlVEIuZ2V0T3B0aW9uKCdtb2RhbCcpKSB7XG5cdFx0XHQvLyAkYm9keS5maW5kKCcjY2l0ZXRvb2xiYXItbmFtZWRyZWZzJykuZGlhbG9nKCdvcHRpb24nLCAnbW9kYWwnLCBmYWxzZSk7XG5cdFx0XHRtdy51dGlsLmFkZENTUygnLnVpLXdpZGdldC1vdmVybGF5e2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fScpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0JHRhcmdldC53aWtpRWRpdG9yKCdhZGRUb1Rvb2xiYXInLCByZWZzZWN0aW9uKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIGVycm9yIG9jY3VycmVkIHNldHRpbmcgdXAgd2lraWVkaXRvci5cblx0XHR9XG5cdH07XG5cblx0Ly8gU2V0dXAgdGhlIG1haW4gb2JqZWN0XG5cdENpdGVUQi5tYWluUmVmTGlzdCA9IFtdO1xuXHRDaXRlVEIucmVmc0xvYWRlZCA9IGZhbHNlO1xuXG5cdC8vIFJFRiBGVU5DVElPTlNcblx0Ly8gQWN0dWFsbHkgYXNzZW1ibGUgYSByZWYgZnJvbSB1c2VyIGlucHV0XG5cdENpdGVUQi5nZXRSZWYgPSAoaW5uZXJvbmx5LCBmb3JpbnNlcnQpID0+IHtcblx0XHRsZXQgaSwgaiwgZywgZ3JvdXA7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBDaXRlVEIuZ2V0T3BlblRlbXBsYXRlKCk7XG5cdFx0Y29uc3Qge3RlbXBsYXRlbmFtZX0gPSB0ZW1wbGF0ZTtcblx0XHRsZXQgcmVzID0gJyc7XG5cdFx0Y29uc3QgcmVmb2JqID0ge1xuXHRcdFx0c2hvcnR0YWc6IGZhbHNlLFxuXHRcdH07XG5cdFx0aWYgKCFpbm5lcm9ubHkpIHtcblx0XHRcdGdyb3VwID0gJChgI2NpdGUtJHtDaXRlVEIuZXNjU3RyKHRlbXBsYXRlLnNob3J0Zm9ybSl9LWdyb3VwYCkudmFsKCk7XG5cdFx0XHRsZXQgcmVmbmFtZSA9ICQoYCNjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfS1uYW1lYCkudmFsKCk7XG5cdFx0XHRyZXMgKz0gJzxyZWYnO1xuXHRcdFx0aWYgKHJlZm5hbWUpIHtcblx0XHRcdFx0cmVmbmFtZSA9IFN0cmluZyhyZWZuYW1lKS50cmltKCk7XG5cdFx0XHRcdHJlcyArPSBgIG5hbWU9JHtDaXRlVEIuZ2V0UXVvdGVkU3RyaW5nKHJlZm5hbWUpfWA7XG5cdFx0XHRcdHJlZm9iai5yZWZuYW1lID0gcmVmbmFtZTtcblx0XHRcdH1cblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRncm91cCA9IFN0cmluZyhncm91cCkudHJpbSgpO1xuXHRcdFx0XHRyZXMgKz0gYCBncm91cD0ke0NpdGVUQi5nZXRRdW90ZWRTdHJpbmcoZ3JvdXApfWA7XG5cdFx0XHRcdHJlZm9iai5yZWZncm91cCA9IGdyb3VwO1xuXHRcdFx0fVxuXHRcdFx0cmVzICs9ICc+Jztcblx0XHR9XG5cdFx0bGV0IGNvbnRlbnQgPSBge3ske3RlbXBsYXRlbmFtZX1gO1xuXHRcdGZvciAoZyBpbiB0ZW1wbGF0ZS5pbmNyZW1lbnRhYmxlcykge1xuXHRcdFx0aWYgKE9iamVjdC5oYXNPd24odGVtcGxhdGUuaW5jcmVtZW50YWJsZXMsIGcpKSB7XG5cdFx0XHRcdGdyb3VwID0gdGVtcGxhdGUuaW5jcmVtZW50YWJsZXNbZ107XG5cdFx0XHRcdGZvciAoaSA9IDE7IGkgPD0gZ3JvdXAudmFsOyBpKyspIHtcblx0XHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgZ3JvdXAuZmllbGRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZG5hbWUgPSBncm91cC5maWVsZHNbal0uZmllbGQ7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZGlkID0gZmllbGRuYW1lLnJlcGxhY2UoJzxOPicsIGkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZCA9ICQoYCNjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfS0ke2ZpZWxkaWR9YCkudmFsKCk7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGQpIHtcblx0XHRcdFx0XHRcdFx0Y29udGVudCArPSBgIHwke2ZpZWxkaWR9PWA7XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQgKz0gU3RyaW5nKGZpZWxkKS50cmltKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoaSA9IDA7IGkgPCB0ZW1wbGF0ZS5iYXNpYy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRlbXBsYXRlLmJhc2ljW2ldLmluY3JlbWVudF9ncm91cCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZpZWxkbmFtZSA9IHRlbXBsYXRlLmJhc2ljW2ldLmZpZWxkO1xuXHRcdFx0Y29uc3QgZmllbGQgPSAkKGAjY2l0ZS0ke0NpdGVUQi5lc2NTdHIodGVtcGxhdGUuc2hvcnRmb3JtKX0tJHtmaWVsZG5hbWV9YCkudmFsKCk7XG5cdFx0XHRpZiAoZmllbGQpIHtcblx0XHRcdFx0Y29udGVudCArPSBgIHwke2ZpZWxkbmFtZX09YDtcblx0XHRcdFx0Y29udGVudCArPSBTdHJpbmcoZmllbGQpLnRyaW0oKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCRib2R5LmZpbmQoJyNjaXRlLWZvcm0tc3RhdHVzJykudmFsKCkgIT09ICdjbG9zZWQnKSB7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdGVtcGxhdGUuZXh0cmEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHRlbXBsYXRlLmV4dHJhW2ldLmluY3JlbWVudF9ncm91cCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZpZWxkbmFtZSA9IHRlbXBsYXRlLmV4dHJhW2ldLmZpZWxkO1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9ICQoYCNjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfS0ke2ZpZWxkbmFtZX1gKS52YWwoKTtcblx0XHRcdFx0aWYgKGZpZWxkKSB7XG5cdFx0XHRcdFx0Y29udGVudCArPSBgIHwke2ZpZWxkbmFtZX09YDtcblx0XHRcdFx0XHRjb250ZW50ICs9IFN0cmluZyhmaWVsZCkudHJpbSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnRlbnQgKz0gJ319Jztcblx0XHRyZXMgKz0gY29udGVudDtcblx0XHRyZWZvYmouY29udGVudCA9IGNvbnRlbnQ7XG5cdFx0aWYgKCFpbm5lcm9ubHkpIHtcblx0XHRcdHJlcyArPSAnPC9yZWY+Jztcblx0XHR9XG5cdFx0aWYgKGZvcmluc2VydCkge1xuXHRcdFx0Q2l0ZVRCLm1haW5SZWZMaXN0LnB1c2gocmVmb2JqKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlcztcblx0fTtcblxuXHQvLyBNYWtlIGEgcmVmZXJlbmNlIHRvIGEgbmFtZWQgcmVmXG5cdENpdGVUQi5nZXROYW1lZFJlZiA9IChyZWZuYW1lLCBmb3JpbnNlcnQpID0+IHtcblx0XHRpZiAoZm9yaW5zZXJ0KSB7XG5cdFx0XHRDaXRlVEIubWFpblJlZkxpc3QucHVzaCh7XG5cdFx0XHRcdHNob3J0dGFnOiB0cnVlLFxuXHRcdFx0XHRyZWZuYW1lLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBgPHJlZiBuYW1lPSR7Q2l0ZVRCLmdldFF1b3RlZFN0cmluZyhyZWZuYW1lKX0gLz5gO1xuXHR9O1xuXG5cdC8vIEZ1bmN0aW9uIHRvIGxvYWQgdGhlIHJlZiBsaXN0XG5cdENpdGVUQi5sb2FkUmVmcyA9ICgpID0+IHtcblx0XHRpZiAoQ2l0ZVRCLnJlZnNMb2FkZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Q2l0ZVRCLmdldFBhZ2VUZXh0KENpdGVUQi5sb2FkUmVmc0ludGVybmFsKTtcblx0fTtcblxuXHQvLyBGdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGxvYWRzIHRoZSBsaXN0IGZyb20gdGhlIHBhZ2UgdGV4dFxuXHRDaXRlVEIubG9hZFJlZnNJbnRlcm5hbCA9ICh0ZXh0KSA9PiB7XG5cdFx0Ly8gV2hhdCB0aGlzIGRvZXM6ICAgICAgICAgICAgIGV4dHJhY3QgZmlyc3QgbmFtZS9ncm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0IHNlY29uZCBuYW1lL2dyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnR0YWcgICBpbm5lciBjb250ZW50XG5cdFx0Y29uc3QgcmVmc3JlZ2V4ID1cblx0XHRcdC88ICpyZWYoPzogKyhuYW1lfGdyb3VwKSAqPSAqKD86XCIoW15cIl0qPylcInwnKFteJ10qPyknfChbXiAnXCIvPl0qPykpICopPyAqKD86ICsobmFtZXxncm91cCkgKj0gKig/OlwiKFteXCJdKj8pXCJ8JyhbXiddKj8pJ3woW14gJ1wiLz5dKj8pKSAqKT8gKig/OlxcLyAqPnw+KCg/Oi58XFxuKSo/KTwgKlxcLyAqcmVmICo+KS9naW07XG5cdFx0Ly8gVGhpcyBzaG91bGQgd29yayByZWdhcmRsZXNzIG9mIHRoZSBxdW90aW5nIHVzZWQgZm9yIG5hbWVzL2dyb3VwcyBhbmQgZm9yIGxpbmVicmVha3MgaW4gdGhlIGlubmVyIGNvbnRlbnRcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0Y29uc3QgcmVmID0gcmVmc3JlZ2V4LmV4ZWModGV4dCk7XG5cdFx0XHRpZiAocmVmID09PSBudWxsKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVmb2JqID0ge307XG5cdFx0XHRpZiAocmVmWzldKSB7XG5cdFx0XHRcdC8vIENvbnRlbnQgKyBzaG9ydCB0YWcgY2hlY2tcblx0XHRcdFx0Ly8gbXcubm90aWZ5KGBcIiR7cmVmWzldfVwiYCwge3RhZzogJ1JlZlRvb2xiYXIyLjAnLCB0eXBlOiAnd2Fybid9KTtcblx0XHRcdFx0WywgLCAsICwgLCAsICwgLCAsIHJlZm9iai5jb250ZW50XSA9IHJlZjtcblx0XHRcdFx0cmVmb2JqLnNob3J0dGFnID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZWZvYmouc2hvcnR0YWcgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlZlsxXSAhPT0gJycpIHtcblx0XHRcdFx0Ly8gRmlyc3QgbmFtZS9ncm91cFxuXHRcdFx0XHRpZiAocmVmWzJdKSB7XG5cdFx0XHRcdFx0WywgLCByZWZvYmpbYHJlZiR7cmVmWzFdfWBdXSA9IHJlZjtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWZbM10pIHtcblx0XHRcdFx0XHRbLCAsICwgcmVmb2JqW2ByZWYke3JlZlsxXX1gXV0gPSByZWY7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0WywgLCAsICwgcmVmb2JqW2ByZWYke3JlZlsxXX1gXV0gPSByZWY7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChyZWZbNV0gIT09ICcnKSB7XG5cdFx0XHRcdC8vIFNlY29uZCBuYW1lL2dyb3VwXG5cdFx0XHRcdGlmIChyZWZbNl0pIHtcblx0XHRcdFx0XHRbLCAsICwgLCAsICwgcmVmb2JqW2ByZWYke3JlZls1XX1gXV0gPSByZWY7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmVmWzddKSB7XG5cdFx0XHRcdFx0WywgLCAsICwgLCAsICwgcmVmb2JqW2ByZWYke3JlZls1XX1gXV0gPSByZWY7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0WywgLCAsICwgLCAsICwgLCByZWZvYmpbYHJlZiR7cmVmWzVdfWBdXSA9IHJlZjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Q2l0ZVRCLm1haW5SZWZMaXN0LnB1c2gocmVmb2JqKTtcblx0XHR9XG5cdFx0Q2l0ZVRCLnJlZnNMb2FkZWQgPSB0cnVlO1xuXHRcdENpdGVUQi5zZXR1cE5hbWVkUmVmcygpO1xuXHR9O1xuXG5cdC8vIEFKQVggRlVOQ1RJT05TXG5cdC8vIFBhcnNlIHNvbWUgd2lraXRleHQgYW5kIGhhbmQgaXQgb2ZmIHRvIGEgY2FsbGJhY2sgZnVuY3Rpb25cblx0Q2l0ZVRCLnBhcnNlID0gKHRleHQsIGNhbGxiYWNrKSA9PiB7XG5cdFx0Y29uc3QgcG9zdGRhdGEgPSB7XG5cdFx0XHRhY3Rpb246ICdwYXJzZScsXG5cdFx0XHR0aXRsZTogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0dGV4dCxcblx0XHRcdHByb3A6ICd0ZXh0Jyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdH07XG5cdFx0YXBpLnBvc3QocG9zdGRhdGEpLnRoZW4oKHtwYXJzZX0pID0+IHtcblx0XHRcdGNvbnN0IGh0bWwgPSBwYXJzZS50ZXh0O1xuXHRcdFx0Y2FsbGJhY2soaHRtbCk7XG5cdFx0fSk7XG5cdH07XG5cblx0Ly8gVXNlIHRoZSBBUEkgdG8gZXhwYW5kIHRlbXBsYXRlcyBvbiBzb21lIHRleHRcblx0Q2l0ZVRCLmV4cGFuZHRlbXBsYXRlcyA9ICh0ZXh0LCBjYWxsYmFjaykgPT4ge1xuXHRcdGNvbnN0IHBvc3RkYXRhID0ge1xuXHRcdFx0YWN0aW9uOiAnZXhwYW5kdGVtcGxhdGVzJyxcblx0XHRcdHRpdGxlOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHR0ZXh0LFxuXHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0fTtcblx0XHRhcGkucG9zdChwb3N0ZGF0YSkudGhlbigoe2V4cGFuZHRlbXBsYXRlc30pID0+IHtcblx0XHRcdGNvbnN0IHJlc3RleHQgPSBleHBhbmR0ZW1wbGF0ZXMud2lraXRleHQ7XG5cdFx0XHRjYWxsYmFjayhyZXN0ZXh0KTtcblx0XHR9KTtcblx0fTtcblxuXHQvLyBGdW5jdGlvbiB0byBnZXQgdGhlIHBhZ2UgdGV4dFxuXHRDaXRlVEIuZ2V0UGFnZVRleHQgPSAoY2FsbGJhY2spID0+IHtcblx0XHRjb25zdCBzZWN0aW9uID0gJGJvZHkuZmluZCgnaW5wdXRbbmFtZT13cFNlY3Rpb25dJykudmFsKCk7XG5cdFx0aWYgKHNlY3Rpb24gPT09ICcnKSB7XG5cdFx0XHRpZiAoQ2l0ZVRCLmdldE9wdGlvbignZXhwYW5kdGVtcGxhdGVzJykpIHtcblx0XHRcdFx0Q2l0ZVRCLmV4cGFuZHRlbXBsYXRlcyhcblx0XHRcdFx0XHQkYm9keS5maW5kKCd0ZXh0YXJlYVtuYW1lPXdwVGV4dGJveDFdJykud2lraUVkaXRvcignZ2V0Q29udGVudHMnKS50ZXh0KCksXG5cdFx0XHRcdFx0Y2FsbGJhY2tcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGxiYWNrKCRib2R5LmZpbmQoJ3RleHRhcmVhW25hbWU9d3BUZXh0Ym94MV0nKS53aWtpRWRpdG9yKCdnZXRDb250ZW50cycpLnRleHQoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHt3Z0FydGljbGVJZH0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdFx0XHRjb25zdCBwb3N0ZGF0YSA9IHtcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRwcm9wOiAncmV2aXNpb25zJyxcblx0XHRcdFx0cnZwcm9wOiAnY29udGVudCcsXG5cdFx0XHRcdHBhZ2VpZHM6IHdnQXJ0aWNsZUlkLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0fTtcblx0XHRcdGlmIChDaXRlVEIuZ2V0T3B0aW9uKCdleHBhbmR0ZW1wbGF0ZXMnKSkge1xuXHRcdFx0XHRwb3N0ZGF0YS5ydmV4cGFuZHRlbXBsYXRlcyA9ICcxJztcblx0XHRcdH1cblx0XHRcdGFwaS5nZXQocG9zdGRhdGEpLnRoZW4oKHtxdWVyeX0pID0+IHtcblx0XHRcdFx0Y29uc3QgcGFnZXRleHQgPSBxdWVyeS5wYWdlc1swXS5yZXZpc2lvbnNbMF0uY29udGVudDtcblx0XHRcdFx0Y2FsbGJhY2socGFnZXRleHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIFNhZmUgdmVyc2lvbiBvZiBkZWNvZGVVUklDb21wb25lbnQoKSB0aGF0IGRvZXNuJ3QgdGhyb3cgZXhjZXB0aW9ucy5cblx0Ly8gSWYgdGhlIG5hdGl2ZSBkZWNvZGVVUklDb21wb25lbnQoKSB0aHJldyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZC5cblx0Q2l0ZVRCLnNhZmVEZWNvZGVVUklDb21wb25lbnQgPSAocykgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzID0gZGVjb2RlVVJJQ29tcG9uZW50KHMpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0LyogZW1wdHkgKi9cblx0XHR9XG5cdFx0cmV0dXJuIHM7XG5cdH07XG5cblx0Ly8gQXV0b2ZpbGwgYSB0ZW1wbGF0ZSBmcm9tIGFuIElEIChJU0JOLCBET0ksIFBNSUQsIFVSTClcblx0Q2l0ZVRCLmluaXRBdXRvZmlsbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRjb25zdCBlbGVtaWQgPSAkKHRoaXMpLmF0dHIoJ2lkJykgPz8gJyc7XG5cdFx0Y29uc3QgcmVzID0gL15jaXRlLWF1dG8tKC4qPyktKC4qKS0oLiopJC8uZXhlYyhlbGVtaWQpO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IFssIHRlbSwgZmllbGQsIGF1dG90eXBlXSA9IHJlcztcblx0XHRsZXQgaWQgPSAkKGAjY2l0ZS0ke3RlbX0tJHtmaWVsZH1gKS52YWwoKTtcblx0XHRpZiAoIWlkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGxldCB1cmwgPSAnaHR0cHM6Ly9jaXRvaWQucWl1d2VuLm5ldC5jbi9sb29rdXAucGhwPyc7XG5cdFx0Ly8gQ2l0b2lkIGV4cGVjdHMgbWluaW1hbGx5IGVuY29kZWQgaW5wdXQsIHNvIGRvIHNvbWUgc3BlY3VsYXRpdmUgZGVjb2RpbmcgaGVyZSB0byBhdm9pZFxuXHRcdC8vIDQwNCBmZXRjaGVzLiBodHRwczovL3BoYWJyaWNhdG9yLndpa2ltZWRpYS5vcmcvVDE0NjUzOVxuXHRcdGlkID0gQ2l0ZVRCLnNhZmVEZWNvZGVVUklDb21wb25lbnQoaWQpO1xuXHRcdHVybCArPSBgJHthdXRvdHlwZX09JHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWA7XG5cdFx0dXJsICs9IGAmdGVtcGxhdGU9JHtlbmNvZGVVUklDb21wb25lbnQodGVtKX1gO1xuXHRcdGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRzLnNldEF0dHJpYnV0ZSgnc3JjJywgdXJsKTtcblx0XHRzLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChzKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0Ly8gQ2FsbGJhY2sgZm9yIGF1dG9maWxsXG5cdC8vIFRPRE86IEF1dG9maWxsIHRoZSBVUkwsIGF0IGxlYXN0IGZvciBET0lcblx0Q2l0ZVRCLmF1dG9GaWxsID0gKGRhdGEsIHRlbXBsYXRlLCB0eXBlKSA9PiB7XG5cdFx0Y29uc3QgY2wgPSBgY2l0ZS0ke3RlbXBsYXRlfS1gO1xuXHRcdGxldCBpLCBqO1xuXHRcdGxldCBjb2F1dGhvcnM7XG5cdFx0JChgLiR7Y2x9dGl0bGVgKS52YWwoZGF0YS50aXRsZSk7XG5cdFx0Ly8gRmlsbCBpbiBhdXRob3JzXG5cdFx0aWYgKGRhdGEuYXV0aG9ycyAmJiBkYXRhLmF1dGhvcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKCQoYC4ke2NsfWxhc3QtaW5jci0xYCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBjbGFzc2VzID0gJChgLiR7Y2x9bGFzdC1pbmNyLTFgKS5lcSgwKS5hdHRyKCdjbGFzcycpPy5zcGxpdCgvXFxzKy8pO1xuXHRcdFx0XHRpZiAoIWNsYXNzZXMpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IGdyb3VwID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IHBhdHQgPSAvY2l0ZS1bXi1dKj8taW5jci0oLiopLztcblx0XHRcdFx0Zm9yIChjb25zdCBjbGFzc18gb2YgY2xhc3Nlcykge1xuXHRcdFx0XHRcdGlmIChwYXR0LmV4ZWMoY2xhc3NfKSkge1xuXHRcdFx0XHRcdFx0WywgZ3JvdXBdID0gcGF0dC5leGVjKGNsYXNzXyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0JChgLiR7Y2x9bGFzdC1pbmNyLTFgKS52YWwoZGF0YS5hdXRob3JzWzBdWzBdKTtcblx0XHRcdFx0JChgLiR7Y2x9Zmlyc3QtaW5jci0xYCkudmFsKGRhdGEuYXV0aG9yc1swXVsxXSk7XG5cdFx0XHRcdGNvbnN0IGVsZW1pZCA9IGAjY2l0ZS1pbmNyLSR7dGVtcGxhdGV9LSR7Z3JvdXB9YDtcblx0XHRcdFx0Zm9yIChpID0gMjsgaSA8IGRhdGEuYXV0aG9ycy5sZW5ndGggKyAxOyBpKyspIHtcblx0XHRcdFx0XHQkKGVsZW1pZCkudHJpZ2dlcignY2xpY2snKTtcblx0XHRcdFx0XHQkKGAuJHtjbH1sYXN0LWluY3ItJHtpLnRvU3RyaW5nKCl9YCkudmFsKGRhdGEuYXV0aG9yc1tpIC0gMV1bMF0pO1xuXHRcdFx0XHRcdCQoYC4ke2NsfWZpcnN0LWluY3ItJHtpLnRvU3RyaW5nKCl9YCkudmFsKGRhdGEuYXV0aG9yc1tpIC0gMV1bMV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCQoYC4ke2NsfWF1dGhvci1pbmNyLTFgKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGNsYXNzZXMgPSAkKGAuJHtjbH1hdXRob3ItaW5jci0xYCkuZXEoMCkuYXR0cignY2xhc3MnKT8uc3BsaXQoL1xccysvKTtcblx0XHRcdFx0aWYgKCFjbGFzc2VzKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBncm91cCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBwYXR0ID0gL2NpdGUtW14tXSo/LWluY3ItKC4qKS87XG5cdFx0XHRcdGZvciAoY29uc3QgY2xhc3NfIG9mIGNsYXNzZXMpIHtcblx0XHRcdFx0XHRpZiAocGF0dC5leGVjKGNsYXNzXykpIHtcblx0XHRcdFx0XHRcdFssIGdyb3VwXSA9IHBhdHQuZXhlYyhjbGFzc18pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdCQoYC4ke2NsfWF1dGhvci1pbmNyLTFgKS52YWwoZGF0YS5hdXRob3JzWzBdLmpvaW4oJywgJykpO1xuXHRcdFx0XHRjb25zdCBlbGVtaWQgPSBgI2NpdGUtaW5jci0ke3RlbXBsYXRlfS0ke2dyb3VwfWA7XG5cdFx0XHRcdGZvciAoaSA9IDI7IGkgPCBkYXRhLmF1dGhvcnMubGVuZ3RoICsgMTsgaSsrKSB7XG5cdFx0XHRcdFx0JChlbGVtaWQpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdFx0XHRcdFx0JChgLiR7Y2x9YXV0aG9yLWluY3ItJHtpLnRvU3RyaW5nKCl9YCkudmFsKGRhdGEuYXV0aG9yc1tpIC0gMV0uam9pbignLCAnKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJChgLiR7Y2x9bGFzdDFgKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGRhdGEuYXV0aG9ycyAmJiBpIDwgZGF0YS5hdXRob3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKCQoYC4ke2NsfWxhc3Qke2kgKyAxfWApLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0JChgLiR7Y2x9bGFzdCR7aSArIDF9YCkudmFsKGRhdGEuYXV0aG9yc1tpXVswXSk7XG5cdFx0XHRcdFx0XHQkKGAuJHtjbH1maXJzdCR7aSArIDF9YCkudmFsKGRhdGEuYXV0aG9yc1tpXVsxXSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvYXV0aG9ycyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yIChqID0gaTsgaiA8IGRhdGEuYXV0aG9ycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRjb2F1dGhvcnMucHVzaChkYXRhLmF1dGhvcnNbal0uam9pbignLCAnKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQkKGAuJHtjbH1jb2F1dGhvcnNgKS52YWwoY29hdXRob3JzLmpvaW4oJzsgJykpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCQoYC4ke2NsfWF1dGhvcjFgKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgYXV0aG9ycyA9IFtdO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBkYXRhLmF1dGhvcnMgJiYgaSA8IGRhdGEuYXV0aG9ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGF1dGhvcnMucHVzaChkYXRhLmF1dGhvcnNbaV0uam9pbignLCAnKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JChgLiR7Y2x9YXV0aG9yc2ApLnZhbChhdXRob3JzLmpvaW4oJzsgJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChpID0gMDsgZGF0YS5hdXRob3JzICYmIGkgPCBkYXRhLmF1dGhvcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoJChgLiR7Y2x9YXV0aG9yJHtpICsgMX1gKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdCQoYC4ke2NsfWF1dGhvciR7aSArIDF9YCkudmFsKGRhdGEuYXV0aG9yc1tpXS5qb2luKCcsICcpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29hdXRob3JzID0gW107XG5cdFx0XHRcdFx0XHRmb3IgKGogPSBpOyBqIDwgZGF0YS5hdXRob3JzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdGNvYXV0aG9ycy5wdXNoKGRhdGEuYXV0aG9yc1tqXS5qb2luKCcsICcpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCQoYC4ke2NsfWNvYXV0aG9yc2ApLnZhbChjb2F1dGhvcnMuam9pbignOyAnKSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGb3JtYXQgcGFydGlhbCBkYXRlcyBvZiB0aGUgZm9ybWF0IFlZWVktTU0sIFlZWVktTU0tWFgsIG9yIFlZWVktTU0tREQgY29ycmVjdGx5XG5cdFx0aWYgKGRhdGEuZGF0ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgRFQgPSBuZXcgRGF0ZShkYXRhLmRhdGUpO1xuXHRcdFx0XHRpZiAoL15cXGR7NH0tXFxkezJ9KC1YWCk/JC9pLnRlc3QoZGF0YS5kYXRlKSkge1xuXHRcdFx0XHRcdGRhdGEuZGF0ZSA9IGRhdGEuZGF0ZS5yZXBsYWNlKCctWFgnLCAnJyk7XG5cdFx0XHRcdFx0JChgLiR7Y2x9ZGF0ZWApLnZhbChDaXRlVEIuZm9ybWF0RGF0ZShEVCwgZmFsc2UsIHRydWUpKTtcblx0XHRcdFx0fSBlbHNlIGlmICgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Py9pLnRlc3QoZGF0YS5kYXRlKSkge1xuXHRcdFx0XHRcdCQoYC4ke2NsfWRhdGVgKS52YWwoQ2l0ZVRCLmZvcm1hdERhdGUoRFQsIHRydWUsIHRydWUpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKGAuJHtjbH1kYXRlYCkudmFsKGRhdGEuZGF0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHQvKiBlbXB0eSAqL1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKGAuJHtjbH1kYXRlYCkudmFsKGRhdGEuZGF0ZSk7XG5cdFx0fVxuXG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlICdwbWlkJzpcblx0XHRcdGNhc2UgJ2RvaSc6XG5cdFx0XHRcdCQoYC4ke2NsfWpvdXJuYWxgKS52YWwoZGF0YS5qb3VybmFsKTtcblx0XHRcdFx0JChgLiR7Y2x9dm9sdW1lYCkudmFsKGRhdGEudm9sdW1lKTtcblx0XHRcdFx0JChgLiR7Y2x9aXNzdWVgKS52YWwoZGF0YS5pc3N1ZSk7XG5cdFx0XHRcdCQoYC4ke2NsfXBhZ2VzYCkudmFsKGRhdGEucGFnZXMpO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ3BtaWQnICYmIGRhdGEuZG9pKSB7XG5cdFx0XHRcdFx0JChgLiR7Y2x9ZG9pYCkudmFsKGRhdGEuZG9pKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdpc2JuJzpcblx0XHRcdFx0JChgLiR7Y2x9cHVibGlzaGVyYCkudmFsKGRhdGEucHVibGlzaGVyKTtcblx0XHRcdFx0JChgLiR7Y2x9bG9jYXRpb25gKS52YWwoZGF0YS5sb2NhdGlvbik7XG5cdFx0XHRcdCQoYC4ke2NsfWVkaXRpb25gKS52YWwoZGF0YS5lZGl0aW9uKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdFx0JChgLiR7Y2x9am91cm5hbGApLnZhbChkYXRhLmpvdXJuYWwpO1xuXHRcdFx0XHQkKGAuJHtjbH12b2x1bWVgKS52YWwoZGF0YS52b2x1bWUpO1xuXHRcdFx0XHQkKGAuJHtjbH1pc3N1ZWApLnZhbChkYXRhLmlzc3VlKTtcblx0XHRcdFx0JChgLiR7Y2x9cGFnZXNgKS52YWwoZGF0YS5wYWdlcyk7XG5cdFx0XHRcdCQoYC4ke2NsfXB1Ymxpc2hlcmApLnZhbChkYXRhLnB1Ymxpc2hlcik7XG5cdFx0XHRcdCQoYC4ke2NsfWVkaXRpb25gKS52YWwoZGF0YS5lZGl0aW9uKTtcblx0XHRcdFx0JChgLiR7Y2x9aXNibmApLnZhbChkYXRhLmlzYm4pO1xuXHRcdFx0XHQkKGAuJHtjbH1pc3NuYCkudmFsKGRhdGEuaXNzbik7XG5cdFx0XHRcdCQoYC4ke2NsfWRvaWApLnZhbChkYXRhLmRvaSk7XG5cdFx0XHRcdC8vIFwiZW4tVVNcIiBpc24ndCBhIHZhbGlkIHZhbHVlIGZvciB0aGUgbGFuZ3VhZ2UgcGFyYW1ldGVyXG5cdFx0XHRcdGlmIChkYXRhLmxhbmd1YWdlICYmIGRhdGEubGFuZ3VhZ2UgIT09ICdlbi1VUycgJiYgZGF0YS5sYW5ndWFnZSAhPT0gJ2VuLUdCJykge1xuXHRcdFx0XHRcdCQoYC4ke2NsfWxhbmd1YWdlYCkudmFsKGRhdGEubGFuZ3VhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQoYC4ke2NsfWNoYXB0ZXJgKS52YWwoZGF0YS5jaGFwdGVyKTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fTtcblxuXHQvLyBGT1JNIERJQUxPRyBGVU5DVElPTlNcblx0Ly8gQWRkIG5ldyBpbmNyZW1lbnRhYmxlIGZpZWxkc1xuXHRDaXRlVEIuaW5jcmVtZW50RmllbGRzID0gZnVuY3Rpb24gKCkge1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gQ2l0ZVRCLmdldE9wZW5UZW1wbGF0ZSgpO1xuXHRcdGNvbnN0IFtjdXJyZW50cm93XSA9ICQodGhpcykucGFyZW50cygndHInKTtcblx0XHQkKHRoaXMpLnByZXYoKS5jc3MoJ3dpZHRoJywgJzEwMCUnKTtcblx0XHQkKHRoaXMpLmRldGFjaCgpO1xuXHRcdGNvbnN0IGVsZW1pZCA9ICQodGhpcykuYXR0cignaWQnKSA/PyAnJztcblx0XHRjb25zdCByZXMgPSAvXmNpdGUtaW5jci0oLio/KS0oLiopJC8uZXhlYyhlbGVtaWQpO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IFssICwgZ3JvdXBdID0gcmVzO1xuXHRcdGNvbnN0IGluY3JlbWVudHMgPSB0ZW1wbGF0ZS5pbmNyZW1lbnRhYmxlc1tncm91cF07XG5cdFx0Y29uc3Qge2ZpZWxkc30gPSBpbmNyZW1lbnRzO1xuXHRcdHRlbXBsYXRlLmluY3JlbWVudGFibGVzW2dyb3VwXS52YWwgKz0gMTtcblx0XHRjb25zdCB0cnMgPSB0ZW1wbGF0ZS5tYWtlRm9ybUlubmVyKGZpZWxkcywgZmFsc2UpO1xuXHRcdHRycy5yZXZlcnNlKCk7XG5cdFx0Zm9yIChjb25zdCB0ciBvZiB0cnMpIHtcblx0XHRcdCQoY3VycmVudHJvdykuYWZ0ZXIodHIpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBmaWxsIHRoZSBhY2Nlc3NkYXRlIHBhcmFtIHdpdGggdGhlIGN1cnJlbnQgZGF0ZVxuXHRDaXRlVEIuZmlsbEFjY2Vzc2RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Y29uc3QgZWxlbWlkID0gJCh0aGlzKS5hdHRyKCdpZCcpID8/ICcnO1xuXHRcdGNvbnN0IHJlcyA9IC9eY2l0ZS1kYXRlLSguKj8pLSguKikkLy5leGVjKGVsZW1pZCk7XG5cdFx0Y29uc3QgWywgaWRdID0gcmVzO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IFssICwgZmllbGRdID0gcmVzO1xuXHRcdGNvbnN0IERUID0gbmV3IERhdGUoKTtcblx0XHRjb25zdCBkYXRlc3RyID0gQ2l0ZVRCLmZvcm1hdERhdGUoRFQpO1xuXHRcdCQoYCNjaXRlLSR7aWR9LSR7ZmllbGR9YCkudmFsKGRhdGVzdHIpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHRDaXRlVEIuZm9ybWF0RGF0ZSA9IChEVCwgdXNlZGF5LCB1c2Vtb250aCkgPT4ge1xuXHRcdGlmICh1c2VkYXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dXNlZGF5ID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHVzZW1vbnRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHVzZW1vbnRoID0gdHJ1ZTtcblx0XHR9XG5cdFx0bGV0IGRhdGVzdHIgPSBDaXRlVEIuZ2V0T3B0aW9uKCdkYXRlIGZvcm1hdCcpO1xuXHRcdGxldCB6bW9udGggPSAnJztcblx0XHRsZXQgbW9udGggPSBEVC5nZXRVVENNb250aCgpICsgMTtcblx0XHRpZiAobW9udGggPCAxMCkge1xuXHRcdFx0em1vbnRoID0gYDAke21vbnRoLnRvU3RyaW5nKCl9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0em1vbnRoID0gbW9udGgudG9TdHJpbmcoKTtcblx0XHR9XG5cdFx0bW9udGggPSBtb250aC50b1N0cmluZygpO1xuXHRcdGxldCB6ZGF0ZSA9ICcnO1xuXHRcdGxldCBkYXRlID0gRFQuZ2V0VVRDRGF0ZSgpO1xuXHRcdGlmIChkYXRlIDwgMTApIHtcblx0XHRcdHpkYXRlID0gYDAke2RhdGUudG9TdHJpbmcoKX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR6ZGF0ZSA9IGRhdGUudG9TdHJpbmcoKTtcblx0XHR9XG5cdFx0ZGF0ZSA9IGRhdGUudG9TdHJpbmcoKTtcblx0XHRpZiAodXNlZGF5KSB7XG5cdFx0XHRkYXRlc3RyID0gZGF0ZXN0ci5yZXBsYWNlKCc8ZGF0ZT4nLCBkYXRlKTtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzx6ZGF0ZT4nLCB6ZGF0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzxkYXRlPicsICcnKTtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzx6ZGF0ZT4nLCAnJyk7XG5cdFx0fVxuXHRcdGlmICh1c2Vtb250aCkge1xuXHRcdFx0ZGF0ZXN0ciA9IGRhdGVzdHIucmVwbGFjZSgnPG1vbnRoPicsIG1vbnRoKTtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzx6bW9udGg+Jywgem1vbnRoKTtcblx0XHRcdGRhdGVzdHIgPSBkYXRlc3RyLnJlcGxhY2UoJzxtb250aG5hbWU+JywgQ2l0ZVRCLmdldE9wdGlvbignbW9udGhzJylbRFQuZ2V0VVRDTW9udGgoKV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRlc3RyID0gZGF0ZXN0ci5yZXBsYWNlKCc8bW9udGg+JywgJycpO1xuXHRcdFx0ZGF0ZXN0ciA9IGRhdGVzdHIucmVwbGFjZSgnPHptb250aD4nLCAnJyk7XG5cdFx0XHRkYXRlc3RyID0gZGF0ZXN0ci5yZXBsYWNlKCc8bW9udGhuYW1lPicsICcnKTtcblx0XHR9XG5cdFx0ZGF0ZXN0ciA9IGRhdGVzdHIucmVwbGFjZSgnPHllYXI+JywgRFQuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpKTtcblx0XHRyZXR1cm4gZGF0ZXN0ci5yZXBsYWNlKC9eWyAvXFwtLC5dKiguKj8pWyAvXFwtLC5dKiQvZywgJyQxJyk7IC8vIENsZWFudXAgYW55IGRhbmdsaW5nIHNwYWNlcyBvciBjb25uZWN0b3JzIHRoYXQgbWlnaHQgcmVzdWx0IGZyb20gb21pdHRpbmcgZGF0ZS9tb250aFxuXHR9O1xuXG5cdC8vIEZ1bmN0aW9uIGNhbGxlZCBhZnRlciB0aGUgcmVmIGxpc3QgaXMgbG9hZGVkLCB0byBhY3R1YWxseSBzZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBuYW1lZCByZWYgZGlhbG9nXG5cdC8vIFVudGlsIHRoZSBsaXN0IGlzIGxvYWRlZCwgaXRzIGp1c3QgYSBcIkxvYWRpbmdcIiBwbGFjZWhvbGRlclxuXHRDaXRlVEIuc2V0dXBOYW1lZFJlZnMgPSAoKSA9PiB7XG5cdFx0Y29uc3QgbmFtZXMgPSBbXTtcblx0XHRsZXQgaTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgQ2l0ZVRCLm1haW5SZWZMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoIUNpdGVUQi5tYWluUmVmTGlzdFtpXS5zaG9ydHRhZyAmJiBDaXRlVEIubWFpblJlZkxpc3RbaV0ucmVmbmFtZSkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKENpdGVUQi5tYWluUmVmTGlzdFtpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHN0dWZmID0gJCgnPGRpdj4nKTtcblx0XHQkYm9keS5maW5kKCcjY2l0ZXRvb2xiYXItbmFtZWRyZWZzJykuaHRtbChzdHVmZik7XG5cdFx0aWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0c3R1ZmYuaHRtbChnZXRNZXNzYWdlKCdjaXRlLW5vLW5hbWVkcmVmcycpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R1ZmYuaHRtbChnZXRNZXNzYWdlKCdjaXRlLW5hbWVkcmVmcy1pbnRybycpKTtcblx0XHRcdGNvbnN0IHNlbGVjdCA9ICQoJzxzZWxlY3Q+JykuYXR0cignaWQnLCAnY2l0ZS1uYW1lZHJlZi1zZWxlY3QnKTtcblx0XHRcdHNlbGVjdC5hcHBlbmQoJCgnPG9wdGlvbj4nKS5hdHRyKCd2YWx1ZScsICcnKS50ZXh0KGdldE1lc3NhZ2UoJ2NpdGUtbmFtZWQtcmVmcy1kcm9wZG93bicpKSk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c2VsZWN0LmFwcGVuZCgkKCc8b3B0aW9uPicpLnRleHQobmFtZXNbaV0ucmVmbmFtZSkpO1xuXHRcdFx0fVxuXHRcdFx0c3R1ZmYuYWZ0ZXIoc2VsZWN0KTtcblx0XHRcdHNlbGVjdC5iZWZvcmUoJzxicj4nKTtcblx0XHRcdGNvbnN0IHByZXZsYWJlbCA9ICQoJzxkaXY+Jylcblx0XHRcdFx0LmF0dHIoJ2lkJywgJ2NpdGUtbnJlZi1wcmV2aWV3LWxhYmVsJylcblx0XHRcdFx0LmNzcygnZGlzcGxheScsICdub25lJylcblx0XHRcdFx0Lmh0bWwoZ2V0TWVzc2FnZSgnY2l0ZS1yYXctcHJldmlldycpKTtcblx0XHRcdHNlbGVjdC5hZnRlcihwcmV2bGFiZWwpO1xuXHRcdFx0cHJldmxhYmVsLmJlZm9yZSgnPGJyPjxicj4nKTtcblx0XHRcdHByZXZsYWJlbC5hZnRlcignPGRpdiBpZD1cImNpdGUtbmFtZWRyZWYtcHJldmlld1wiIHN0eWxlPVwicGFkZGluZzowLjVlbTsgZm9udC1zaXplOjExMCVcIiAvPicpO1xuXHRcdFx0Y29uc3QgcGFyc2VsYWJlbCA9ICQoJzxzcGFuPicpXG5cdFx0XHRcdC5hdHRyKCdpZCcsICdjaXRlLXBhcnNlZC1sYWJlbCcpXG5cdFx0XHRcdC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpXG5cdFx0XHRcdC5odG1sKGdldE1lc3NhZ2UoJ2NpdGUtcGFyc2VkLWxhYmVsJykpO1xuXHRcdFx0JGJvZHkuZmluZCgnI2NpdGUtbmFtZWRyZWYtcHJldmlldycpLmFmdGVyKHBhcnNlbGFiZWwpO1xuXHRcdFx0cGFyc2VsYWJlbC5hZnRlcignPGRpdiBpZD1cImNpdGUtbmFtZWRyZWYtcGFyc2VkXCIgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTowLjVlbTsgZm9udC1zaXplOjExMCVcIiAvPicpO1xuXHRcdFx0Y29uc3QgbGluayA9ICQoJzxhPicpXG5cdFx0XHRcdC5hdHRyKHtcblx0XHRcdFx0XHRocmVmOiAnIycsXG5cdFx0XHRcdFx0aWQ6ICdjaXRlLW5yZWYtcGFyc2UnLFxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRtYXJnaW46ICcwIDFlbSAwIDFlbScsXG5cdFx0XHRcdFx0ZGlzcGxheTogJ25vbmUnLFxuXHRcdFx0XHRcdGNvbG9yOiAnIzAwMDA4YicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0bGluay5odG1sKGdldE1lc3NhZ2UoJ2NpdGUtZm9ybS1wYXJzZScpKTtcblx0XHRcdCRib2R5LmZpbmQoJyNjaXRlLW5hbWVkcmVmLXBhcnNlZCcpLmFmdGVyKGxpbmspO1xuXG5cdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1zZWxlY3QnKS5vbignY2hhbmdlJywgQ2l0ZVRCLm5hbWVkUmVmU2VsZWN0Q2xpY2spO1xuXHRcdFx0JGJvZHkuZmluZCgnI2NpdGUtbnJlZi1wYXJzZScpLm9uKCdjbGljaycsIENpdGVUQi5ucmVmUGFyc2VDbGljayk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBwYXJzZWQgcHJldmlld1xuXHRDaXRlVEIuZmlsbE5yZWZQcmV2aWV3ID0gKHBhcnNlZCkgPT4ge1xuXHRcdCRib2R5LmZpbmQoJyNjaXRlLXBhcnNlZC1sYWJlbCcpLnNob3coKTtcblx0XHQkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1wYXJzZWQnKS5odG1sKHBhcnNlZCk7XG5cdH07XG5cblx0Ly8gQ2xpY2sgaGFuZGxlciBmb3IgdGhlIG5hbWVkLXJlZiBwYXJzZWQgcHJldmlld1xuXHRDaXRlVEIubnJlZlBhcnNlQ2xpY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgY2hvaWNlID0gJGJvZHkuZmluZCgnI2NpdGUtbmFtZWRyZWYtc2VsZWN0JykudmFsKCk7XG5cdFx0aWYgKGNob2ljZSA9PT0gJycpIHtcblx0XHRcdCRib2R5LmZpbmQoJyNjaXRlLXBhcnNlZC1sYWJlbCcpLmhpZGUoKTtcblx0XHRcdCRib2R5LmZpbmQoJyNjaXRlLW5hbWVkcmVmLXBhcnNlZCcpLnRleHQoJycpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHQkYm9keS5maW5kKCcjY2l0ZS1ucmVmLXBhcnNlJykuaGlkZSgpO1xuXHRcdGZvciAoY29uc3QgcmVmIG9mIENpdGVUQi5tYWluUmVmTGlzdCkge1xuXHRcdFx0aWYgKCFyZWYuc2hvcnR0YWcgJiYgcmVmLnJlZm5hbWUgPT09IGNob2ljZSkge1xuXHRcdFx0XHRDaXRlVEIucGFyc2UocmVmLmNvbnRlbnQsIENpdGVUQi5maWxsTnJlZlByZXZpZXcpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8vIENsaWNrIGhhbmRsZXIgZm9yIHRoZSBuYW1lZC1yZWYgZHJvcGRvd25cblx0Q2l0ZVRCLmxhc3RuYW1lZHJlZmNob2ljZSA9ICcnO1xuXHRDaXRlVEIubmFtZWRSZWZTZWxlY3RDbGljayA9ICgpID0+IHtcblx0XHRjb25zdCBjaG9pY2UgPSAkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1zZWxlY3QnKS52YWwoKTtcblx0XHRpZiAoQ2l0ZVRCLmxhc3RuYW1lZHJlZmNob2ljZSA9PT0gY2hvaWNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdENpdGVUQi5sYXN0bmFtZWRyZWZjaG9pY2UgPSBjaG9pY2U7XG5cdFx0JGJvZHkuZmluZCgnI2NpdGUtcGFyc2VkLWxhYmVsJykuaGlkZSgpO1xuXHRcdCRib2R5LmZpbmQoJyNjaXRlLW5hbWVkcmVmLXBhcnNlZCcpLnRleHQoJycpO1xuXHRcdGlmIChjaG9pY2UgPT09ICcnKSB7XG5cdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1ucmVmLXByZXZpZXctbGFiZWwnKS5oaWRlKCk7XG5cdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1wcmV2aWV3JykudGV4dCgnJyk7XG5cdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1ucmVmLXBhcnNlJykuaGlkZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHJlZiBvZiBDaXRlVEIubWFpblJlZkxpc3QpIHtcblx0XHRcdGlmICghcmVmLnNob3J0dGFnICYmIHJlZi5yZWZuYW1lID09PSBjaG9pY2UpIHtcblx0XHRcdFx0JGJvZHkuZmluZCgnI2NpdGUtbnJlZi1wcmV2aWV3LWxhYmVsJykuc2hvdygpO1xuXHRcdFx0XHQkYm9keS5maW5kKCcjY2l0ZS1uYW1lZHJlZi1wcmV2aWV3JykudGV4dChyZWYuY29udGVudCk7XG5cdFx0XHRcdGlmIChDaXRlVEIuZ2V0T3B0aW9uKCdhdXRvcGFyc2UnKSkge1xuXHRcdFx0XHRcdENpdGVUQi5ucmVmUGFyc2VDbGljaygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCRib2R5LmZpbmQoJyNjaXRlLW5yZWYtcGFyc2UnKS5zaG93KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Ly8gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBhcnNlZCBwcmV2aWV3XG5cdENpdGVUQi5maWxsVGVtcGxhdGVQcmV2aWV3ID0gKHRleHQpID0+IHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IENpdGVUQi5nZXRPcGVuVGVtcGxhdGUoKTtcblx0XHRjb25zdCBkaXYgPSAkKGAjY2l0ZXRvb2xiYXItJHtDaXRlVEIuZXNjU3RyKHRlbXBsYXRlLnNob3J0Zm9ybSl9YCk7XG5cdFx0ZGl2LmZpbmQoJy5jaXRlLXByZXYtcGFyc2VkLWxhYmVsJykuc2hvdygpO1xuXHRcdGRpdi5maW5kKCcuY2l0ZS1wcmV2aWV3LXBhcnNlZCcpLmh0bWwodGV4dCk7XG5cdH07XG5cblx0Ly8gQ2xpY2sgaGFuZGxlciBmb3IgdGVtcGxhdGUgcGFyc2VkIHByZXZpZXdcblx0Q2l0ZVRCLnByZXZQYXJzZUNsaWNrID0gKCkgPT4ge1xuXHRcdGNvbnN0IHJlZiA9IENpdGVUQi5nZXRSZWYodHJ1ZSwgZmFsc2UpO1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gQ2l0ZVRCLmdldE9wZW5UZW1wbGF0ZSgpO1xuXHRcdGNvbnN0IGRpdiA9ICQoYCNjaXRldG9vbGJhci0ke0NpdGVUQi5lc2NTdHIodGVtcGxhdGUuc2hvcnRmb3JtKX1gKTtcblx0XHRkaXYuZmluZCgnLmNpdGUtcHJldi1wYXJzZScpLmhpZGUoKTtcblx0XHRDaXRlVEIucGFyc2UocmVmLCBDaXRlVEIuZmlsbFRlbXBsYXRlUHJldmlldyk7XG5cdH07XG5cblx0Ly8gU2hvdy9oaWRlIHRoZSBleHRyYSBmaWVsZHMgaW4gdGhlIGRpYWxvZyBib3hcblx0Q2l0ZVRCLnNob3dIaWRlRXh0cmEgPSAoKSA9PiB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBDaXRlVEIuZ2V0T3BlblRlbXBsYXRlKCk7XG5cdFx0Y29uc3QgZGl2ID0gJChgI2NpdGV0b29sYmFyLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfWApO1xuXHRcdGNvbnN0IHNldHRpbmcgPSBkaXYuZmluZCgnLmNpdGUtZm9ybS1zdGF0dXMnKS52YWwoKTtcblx0XHRpZiAoc2V0dGluZyA9PT0gJ2Nsb3NlZCcpIHtcblx0XHRcdGRpdi5maW5kKCcuY2l0ZS1mb3JtLXN0YXR1cycpLnZhbCgnb3BlbicpO1xuXHRcdFx0ZGl2LmZpbmQoJy5jaXRlLWV4dHJhLWZpZWxkcycpLnNob3coMSwgKCkgPT4ge1xuXHRcdFx0XHQvLyBqUXVlcnkgYWRkcyBgZGlzcGxheTogYmxvY2tgLCB3aGljaCBzY3Jld3MgdGhpbmdzIHVwXG5cdFx0XHRcdGRpdi5maW5kKCcuY2l0ZS1leHRyYS1maWVsZHMnKS5jc3Moe1xuXHRcdFx0XHRcdHdpZHRoOiAnMTAwJScsXG5cdFx0XHRcdFx0J2JhY2tncm91bmQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXYuZmluZCgnLmNpdGUtZm9ybS1zdGF0dXMnKS52YWwoJ2Nsb3NlZCcpO1xuXHRcdFx0ZGl2LmZpbmQoJy5jaXRlLWV4dHJhLWZpZWxkcycpLmhpZGUoKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gUmVzZXRzIGZvcm0gZmllbGRzIGFuZCBwcmV2aWV3c1xuXHQvLyBSZXNldHMgZm9ybSBmaWVsZHMgYW5kIHByZXZpZXdzXG5cdENpdGVUQi5yZXNldEZvcm0gPSAoKSA9PiB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBDaXRlVEIuZ2V0T3BlblRlbXBsYXRlKCk7XG5cdFx0Y29uc3QgZGl2ID0gJChgI2NpdGV0b29sYmFyLSR7Q2l0ZVRCLmVzY1N0cih0ZW1wbGF0ZS5zaG9ydGZvcm0pfWApO1xuXHRcdGRpdi5odG1sKHRlbXBsYXRlLmdldEZvcm0oKSk7XG5cdH07XG5cblx0Ly8gU1RSSU5HIFVUSUxJVFkgRlVOQ1RJT05TXG5cdC8vIFJldHVybnMgYSBzdHJpbmcgcXVvdGVkIGFzIG5lY2Vzc2FyeSBmb3IgbmFtZS9ncm91cCBhdHRyaWJ1dGVzXG5cdENpdGVUQi5nZXRRdW90ZWRTdHJpbmcgPSAocykgPT4ge1xuXHRcdGNvbnN0IHNxID0gLycvLnRlc3Qocyk7IC8vIHNpbmdsZSBxdW90ZXNcblx0XHRjb25zdCBkcSA9IC9cIi8udGVzdChzKTsgLy8gZG91YmxlIHF1b3Rlc1xuXHRcdGlmICghc3EgJiYgIWRxKSB7XG5cdFx0XHQvLyBBbHdheXMgcXVvdGVzIGZvciBub24tbGF0aW4gYWxwaGFiZXRcblx0XHRcdHJldHVybiBgXCIke3N9XCJgO1xuXHRcdH0gZWxzZSBpZiAoIWRxKSB7XG5cdFx0XHQvLyBDYW4gdXNlIGRvdWJsZSBxdW90ZXNcblx0XHRcdHJldHVybiBgXCIke3N9XCJgO1xuXHRcdH0gZWxzZSBpZiAoIXNxKSB7XG5cdFx0XHQvLyBDYW4gdXNlIHNpbmdsZSBxdW90ZXNcblx0XHRcdHJldHVybiBgJyR7c30nYDtcblx0XHR9XG5cdFx0Ly8gSGFzIGRvdWJsZSBhbmQgc2luZ2xlIHF1b3Rlc1xuXHRcdHMgPSBzLnJlcGxhY2UoL1wiL2csIFwiJ1wiKTtcblx0XHRyZXR1cm4gYFwiJHtzfVwiYDtcblx0fTtcblxuXHQvLyBGaXggdXAgc3RyaW5ncyBmb3Igb3V0cHV0IC0gY2FwaXRhbGl6ZSBmaXJzdCBjaGFyLCByZXBsYWNlIHVuZGVyc2NvcmVzIHdpdGggc3BhY2VzXG5cdENpdGVUQi5maXhTdHIgPSAocykgPT4ge1xuXHRcdHMgPSBzLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpO1xuXHRcdHMgPSBzLnJlcGxhY2UoJ18nLCAnICcpO1xuXHRcdHJldHVybiBzO1xuXHR9O1xuXG5cdC8vIEVzY2FwZSBzcGFjZXMgYW5kIHF1b3RlcyBmb3IgdXNlIGluIEhUTUwgY2xhc3Nlcy9pZHNcblx0Q2l0ZVRCLmVzY1N0ciA9IChzKSA9PiB7XG5cdFx0cmV0dXJuIHNcblx0XHRcdC5yZXBsYWNlKC9cXHMvZywgJy0nKVxuXHRcdFx0LnJlcGxhY2UoLycvZywgU3RyaW5nLnJhd2BcXCdgKVxuXHRcdFx0LnJlcGxhY2UoL1wiL2csIFN0cmluZy5yYXdgXFxcImApO1xuXHR9O1xuXG5cdC8vIE1JU0MgRlVOQ1RJT05TXG5cdC8vIERldGVybWluZSB3aGljaCB0ZW1wbGF0ZSBmb3JtIGlzIG9wZW4sIGFuZCBnZXQgdGhlIHRlbXBsYXRlIG9iamVjdCBmb3IgaXRcblx0Q2l0ZVRCLmdldE9wZW5UZW1wbGF0ZSA9ICgpID0+IHtcblx0XHRjb25zdCBkaWFsb2dzID0gJGJvZHkuZmluZCgnLnVpLWRpYWxvZy1jb250ZW50LnVpLXdpZGdldC1jb250ZW50OnZpc2libGUnKTtcblx0XHRjb25zdCB0ZW1wbGF0ZW5hbWUgPSAkKGRpYWxvZ3NbMF0pLmZpbmQoJy5jaXRlLXRlbXBsYXRlJykudmFsKCk7XG5cdFx0cmV0dXJuIENpdGVUQi5UZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcblx0fTtcblxuXHQvLyBEaXNwbGF5IHRoZSByZXBvcnQgZm9yIHRoZSBlcnJvciBjaGVja3Ncblx0Q2l0ZVRCLmRpc3BsYXlFcnJvcnMgPSAoZXJyb3JzKSA9PiB7XG5cdFx0JGJvZHkuZmluZCgnI2NpdGUtZXJyLXJlcG9ydCcpLnJlbW92ZSgpO1xuXHRcdGNvbnN0IHRhYmxlID0gJCgnPHRhYmxlPicpLmF0dHIoJ2lkJywgJ2NpdGUtZXJyLXJlcG9ydCcpLmNzcyh7XG5cdFx0XHR3aWR0aDogJzEwMCUnLFxuXHRcdFx0Ym9yZGVyOiAnMXB4IHNvbGlkICNBOUE5QTknLFxuXHRcdFx0J2JhY2tncm91bmQtY29sb3InOiAnI0ZGRUZENScsXG5cdFx0XHRwYWRkaW5nOiAnMC4yNWVtJyxcblx0XHRcdCdtYXJnaW4tdG9wJzogJzAuNWVtJyxcblx0XHR9KTtcblx0XHQkYm9keS5maW5kKCcjZWRpdHBhZ2UtY29weXdhcm4nKS5iZWZvcmUodGFibGUpO1xuXHRcdGxldCB0cjtcblx0XHRjb25zdCB0cjEgPSAkKCc8dHI+JykuY3NzKCd3aWR0aCcsICcxMDAlJyk7XG5cdFx0Y29uc3QgdGgxID0gJCgnPHRoPicpLmNzcygnd2lkdGgnLCAnNjAlJykuY3NzKCdmb250LXNpemUnLCAnMTEwJScpLmh0bWwoZ2V0TWVzc2FnZSgnY2l0ZS1lcnItcmVwb3J0LWhlYWRpbmcnKSk7XG5cdFx0Y29uc3QgdGgyID0gJCgnPHRoPicpLmNzcygnd2lkdGgnLCAnNDAlJykuY3NzKCd0ZXh0LWFsaWduJywgJ3JpZ2h0OycpO1xuXHRcdGNvbnN0IGltID0gJCgnPGltZz4nKS5hdHRyKCdzcmMnLCAnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzL3RodW1iLzUvNTUvR3RrLXN0b3Auc3ZnLzIwcHgtR3RrLXN0b3Auc3ZnLnBuZycpO1xuXHRcdGltLmF0dHIoJ2FsdCcsIGdldE1lc3NhZ2UoJ2NpdGUtZXJyLXJlcG9ydC1jbG9zZScpKS5hdHRyKCd0aXRsZScsIGdldE1lc3NhZ2UoJ2NpdGUtZXJyLXJlcG9ydC1jbG9zZScpKTtcblx0XHRjb25zdCBhZCA9ICQoJzxhPicpLmF0dHIoe1xuXHRcdFx0aWQ6ICdjaXRlLWVyci1jaGVjay1jbG9zZScsXG5cdFx0XHRocmVmOiAnIycsXG5cdFx0fSk7XG5cdFx0YWQuYXBwZW5kKGltKTtcblx0XHR0aDIuYXBwZW5kKGFkKTtcblx0XHR0cjEuYXBwZW5kKHRoMSkuYXBwZW5kKHRoMik7XG5cdFx0dGFibGUuYXBwZW5kKHRyMSk7XG5cdFx0JGJvZHkuZmluZCgnI2NpdGUtZXJyLWNoZWNrLWNsb3NlJykub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0JGJvZHkuZmluZCgnI2NpdGUtZXJyLXJlcG9ydCcpLnJlbW92ZSgpO1xuXHRcdH0pO1xuXHRcdGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0ciA9ICQoJzx0cj4nKS5jc3MoJ3dpZHRoJywgJzEwMCUnKTtcblx0XHRcdGNvbnN0IHRkID0gJCgnPHRkPicpXG5cdFx0XHRcdC5jc3MoJ3RleHQtYWxpZ24nLCAnY2VudGVyJylcblx0XHRcdFx0LmNzcygnbWFyZ2luJywgJzEuNXB4Jylcblx0XHRcdFx0Lmh0bWwoZ2V0TWVzc2FnZSgnY2l0ZS1lcnItcmVwb3J0LWVtcHR5JykpO1xuXHRcdFx0dHIuYXBwZW5kKHRkKTtcblx0XHRcdHRhYmxlLmFwcGVuZCh0cik7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBlcnJvciBpbiBlcnJvcnMpIHtcblx0XHRcdGlmIChPYmplY3QuaGFzT3duKGVycm9ycywgZXJyb3IpKSB7XG5cdFx0XHRcdGNvbnN0IGVyciA9IGVycm9yc1tlcnJvcl07XG5cdFx0XHRcdHRyID0gJCgnPHRyPicpLmNzcygnd2lkdGgnLCAnMTAwJScpO1xuXHRcdFx0XHRjb25zdCB0ZDEgPSAkKCc8dGQ+Jylcblx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdGJvcmRlcjogJzFweCBzb2xpZCAjMDAwJyxcblx0XHRcdFx0XHRcdG1hcmdpbjogJzEuNXB4Jyxcblx0XHRcdFx0XHRcdHdpZHRoOiAnNjAlJyxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5odG1sKGVyci5lcnIpO1xuXHRcdFx0XHRjb25zdCB0ZDIgPSAkKCc8dGQ+Jylcblx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdGJvcmRlcjogJzFweCBzb2xpZCAjMDAwJyxcblx0XHRcdFx0XHRcdG1hcmdpbjogJzEuNXB4Jyxcblx0XHRcdFx0XHRcdHdpZHRoOiAnNDAlJyxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5odG1sKGdldE1lc3NhZ2UoZXJyLm1zZykpO1xuXHRcdFx0XHR0ci5hcHBlbmQodGQxKS5hcHBlbmQodGQyKTtcblx0XHRcdFx0dGFibGUuYXBwZW5kKHRyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Ly8gTG9hZCBjb25maWd1cmF0aW9uIGZvciBzaXRlXG5cdHJlZlRvb2xiYXJDb25maWcoKTtcblxuXHQvLyBFbmQgb2YgY29kZSBsb2FkZWQgb25seSBvbiBlZGl0XG59O1xuXG5leHBvcnQge3JlZlRvb2xiYXIyfTtcbiIsICIvKiBnbG9iYWwgQ2l0ZVRCICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4vdXRpbC9nZXRNZXNzYWdlJztcblxuY29uc3QgcmVmVG9vbGJhckJhc2UgPSAoKSA9PiB7XG5cdHdpbmRvdy5DaXRlVEIgfHw9IHtcblx0XHRUZW1wbGF0ZXM6IHt9LCAvLyBBbGwgdGVtcGxhdGVzXG5cdFx0T3B0aW9uczoge30sIC8vIEdsb2JhbCBvcHRpb25zXG5cdFx0VXNlck9wdGlvbnM6IHt9LCAvLyBVc2VyIG9wdGlvbnNcblx0XHREZWZhdWx0T3B0aW9uczoge30sIC8vIFNjcmlwdCBkZWZhdWx0c1xuXHR9O1xuXG5cdC8vIENsYXNzIGZvciBjaXRlIHRlbXBsYXRlc1xuXHR3aW5kb3cuQ2l0ZVRlbXBsYXRlID0gY2xhc3MgQ2l0ZVRlbXBsYXRlIHtcblx0XHRjb25zdHJ1Y3Rvcih0ZW1wbGF0ZW5hbWUsIHNob3J0Zm9ybSwgYmFzaWNmaWVsZHMsIGV4cGFuZGVkZmllbGRzKSB7XG5cdFx0XHQvLyBQcm9wZXJ0aWVzXG5cdFx0XHR0aGlzLnRlbXBsYXRlbmFtZSA9IHRlbXBsYXRlbmFtZTsgLy8gVGhlIHRlbXBsYXRlIG5hbWUgLSBcImNpdGUgd2ViXCIsIFwiY2l0ZSBib29rXCIsIGV0Yy5cblx0XHRcdHRoaXMuc2hvcnRmb3JtID0gc2hvcnRmb3JtOyAvLyBBIHNob3J0IGZvcm0sIHVzZWQgZm9yIHRoZSBkcm9wZG93biBib3hcblx0XHRcdHRoaXMuYmFzaWMgPSBiYXNpY2ZpZWxkczsgLy8gQmFzaWMgZmllbGRzIC0gYXV0aG9yLCB0aXRsZSwgcHVibGlzaGVyLi4uXG5cblx0XHRcdC8vIExlc3MgY29tbW9uIC0gcXVvdGUsIGFyY2hpdmV1cmwgLSBzaG91bGQgYmUgZXZlcnl0aGluZyB0aGUgdGVtcGxhdGUgc3VwcG9ydHMgbWludXMgdGhlIGJhc2ljIG9uZXNcblx0XHRcdHRoaXMuZXh0cmEgPSBleHBhbmRlZGZpZWxkcztcblx0XHRcdHRoaXMuaW5jcmVtZW50YWJsZXMgPSB7fTtcblxuXHRcdFx0Ly8gQWRkIGl0IHRvIHRoZSBsaXN0XG5cdFx0XHRDaXRlVEIuVGVtcGxhdGVzW3RoaXMudGVtcGxhdGVuYW1lXSA9IHRoaXM7XG5cdFx0fVxuXHRcdG1ha2VGb3JtSW5uZXIoZmllbGRzLCBpbmNyc2V0dXApIHtcblx0XHRcdGNvbnN0IHRycyA9IFtdO1xuXHRcdFx0Y29uc3QgYXV0b2ZpbGxzID0gW107XG5cdFx0XHRsZXQgdHI7XG5cdFx0XHRmb3IgKGNvbnN0IFtpLCBmaWVsZG9ial0gb2YgZmllbGRzLmVudHJpZXMoKSkge1xuXHRcdFx0XHRsZXQge2ZpZWxkfSA9IGZpZWxkb2JqO1xuXHRcdFx0XHRsZXQgbGFiZWxmaWVsZCA9IGZpZWxkb2JqLmZpZWxkO1xuXHRcdFx0XHRsZXQgYWQgPSBmYWxzZTtcblx0XHRcdFx0bGV0IGltO1xuXHRcdFx0XHRpZiAoaW5jcnNldHVwICYmIGZpZWxkb2JqLmluY3JlbWVudF9ncm91cCkge1xuXHRcdFx0XHRcdGZpZWxkID0gZmllbGRvYmouZmllbGQucmVwbGFjZSgnPE4+JywgJzEnKTtcblx0XHRcdFx0XHRsYWJlbGZpZWxkID0gZmllbGRvYmouZmllbGQucmVwbGFjZSgnPE4+JywgJycpO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXSAmJlxuXHRcdFx0XHRcdFx0IXRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXS5zZXR1cFxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgbm90IGZ1bGx5IGluaXRpYWxpemVkXG5cdFx0XHRcdFx0XHR0aGlzLmluY3JlbWVudGFibGVzW2ZpZWxkb2JqLmluY3JlbWVudF9ncm91cF0uZmllbGRzLnB1c2goZmllbGRvYmopO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXSkge1xuXHRcdFx0XHRcdFx0Ly8gT2JqZWN0IG5vdCB5ZXQgY3JlYXRlZFxuXHRcdFx0XHRcdFx0dGhpcy5pbmNyZW1lbnRhYmxlc1tmaWVsZG9iai5pbmNyZW1lbnRfZ3JvdXBdID0ge1xuXHRcdFx0XHRcdFx0XHRmaWVsZHM6IFtmaWVsZG9ial0sXG5cdFx0XHRcdFx0XHRcdHZhbDogMSxcblx0XHRcdFx0XHRcdFx0c2V0dXA6IGZhbHNlLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0dGhpcy5pbmNyZW1lbnRhYmxlc1tmaWVsZG9iai5pbmNyZW1lbnRfZ3JvdXBdICYmXG5cdFx0XHRcdFx0XHR0aGlzLmluY3JlbWVudGFibGVzW2ZpZWxkb2JqLmluY3JlbWVudF9ncm91cF0uc2V0dXBcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIEZ1bGx5IGluaXRpYWxpemVkIGZyb20gYSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mIHRoaXMgZnVuY3Rpb24sIGp1c3QgcmVzZXR0aW5nIHRoZSBudW1iZXJcblx0XHRcdFx0XHRcdHRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXS52YWwgPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChmaWVsZG9iai5pbmNyZW1lbnRfZ3JvdXApIHtcblx0XHRcdFx0XHQvLyBBZGRpbmcgYSBuZXcgcm93XG5cdFx0XHRcdFx0Y29uc3QgaW5jcnZhbCA9IHRoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXS52YWw7XG5cdFx0XHRcdFx0ZmllbGQgPSBmaWVsZG9iai5maWVsZC5yZXBsYWNlKCc8Tj4nLCBpbmNydmFsLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGxhYmVsZmllbGQgPSBmaWVsZG9iai5maWVsZC5yZXBsYWNlKCc8Tj4nLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYXV0b2RhdGVGaWVsZHMgPSBDaXRlVEIuZ2V0T3B0aW9uKCdhdXRvZGF0ZSBmaWVsZHMnKTtcblx0XHRcdFx0aWYgKGF1dG9kYXRlRmllbGRzLmluY2x1ZGVzKGZpZWxkKSkge1xuXHRcdFx0XHRcdGltID0gJCgnPGltZz4nKS5hdHRyKFxuXHRcdFx0XHRcdFx0J3NyYycsXG5cdFx0XHRcdFx0XHQnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzL3RodW1iLzcvN2IvTnV2b2xhX2FwcHNfZGF0ZS5zdmcvMjBweC1OdXZvbGFfYXBwc19kYXRlLnN2Zy5wbmcnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpbS5hdHRyKCdhbHQnLCBnZXRNZXNzYWdlKCdjaXRlLWluc2VydC1kYXRlJykpLmF0dHIoJ3RpdGxlJywgZ2V0TWVzc2FnZSgnY2l0ZS1pbnNlcnQtZGF0ZScpKTtcblx0XHRcdFx0XHRhZCA9ICQoJzxhPicpLmF0dHIoJ2hyZWYnLCAnIycpO1xuXHRcdFx0XHRcdGFkLmFwcGVuZChpbSk7XG5cdFx0XHRcdFx0YWQuYXR0cignaWQnLCBgY2l0ZS1kYXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7ZmllbGR9YCk7XG5cdFx0XHRcdFx0JChkb2N1bWVudCkub24oXG5cdFx0XHRcdFx0XHQnY2xpY2snLFxuXHRcdFx0XHRcdFx0YCNjaXRlLWRhdGUtJHtDaXRlVEIuZXNjU3RyKHRoaXMuc2hvcnRmb3JtKX0tJHtmaWVsZH1gLFxuXHRcdFx0XHRcdFx0Q2l0ZVRCLmZpbGxBY2Nlc3NkYXRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmllbGRvYmouYXV0b2ZpbGxpZCkge1xuXHRcdFx0XHRcdGNvbnN0IGF1dG90eXBlID0gZmllbGRvYmouYXV0b2ZpbGxpZDtcblx0XHRcdFx0XHRpbSA9ICQoJzxpbWc+JykuYXR0cihcblx0XHRcdFx0XHRcdCdzcmMnLFxuXHRcdFx0XHRcdFx0J2h0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy90aHVtYi8xLzE3L1N5c3RlbS1zZWFyY2guc3ZnLzIwcHgtU3lzdGVtLXNlYXJjaC5zdmcucG5nJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aW0uYXR0cignYWx0JywgZ2V0TWVzc2FnZSgnY2l0ZS1hdXRvZmlsbC1hbHQnKSkuYXR0cigndGl0bGUnLCBnZXRNZXNzYWdlKCdjaXRlLWF1dG9maWxsLWFsdCcpKTtcblx0XHRcdFx0XHRhZCA9ICQoJzxhPicpLmF0dHIoJ2hyZWYnLCAnIycpO1xuXHRcdFx0XHRcdGFkLmFwcGVuZChpbSk7XG5cdFx0XHRcdFx0YWQuYXR0cignaWQnLCBgY2l0ZS1hdXRvLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7ZmllbGR9LSR7YXV0b3R5cGV9YCk7XG5cdFx0XHRcdFx0YXV0b2ZpbGxzLnB1c2goYCNjaXRlLWF1dG8tJHtDaXRlVEIuZXNjU3RyKHRoaXMuc2hvcnRmb3JtKX0tJHtmaWVsZH0tJHthdXRvdHlwZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmllbGRvYmouaW5jcmVtZW50X2J1dHRvbikge1xuXHRcdFx0XHRcdGNvbnN0IGluY3J0eXBlID0gZmllbGRvYmouaW5jcmVtZW50X2dyb3VwO1xuXHRcdFx0XHRcdGltID0gJCgnPGltZz4nKS5hdHRyKFxuXHRcdFx0XHRcdFx0J3NyYycsXG5cdFx0XHRcdFx0XHQnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzL3RodW1iL2IvYjkvTnV2b2xhX2FjdGlvbl9lZGl0X2FkZC5zdmcvMjBweC1OdXZvbGFfYWN0aW9uX2VkaXRfYWRkLnN2Zy5wbmcnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpbS5hdHRyKCdhbHQnLCBnZXRNZXNzYWdlKCdjaXRlLWluY3JlbWVudC1hbHQnKSkuYXR0cigndGl0bGUnLCBnZXRNZXNzYWdlKCdjaXRlLWluY3JlbWVudC1hbHQnKSk7XG5cdFx0XHRcdFx0YWQgPSAkKCc8YT4nKS5hdHRyKCdocmVmJywgJyMnKTtcblx0XHRcdFx0XHRhZC5hcHBlbmQoaW0pO1xuXHRcdFx0XHRcdGFkLmF0dHIoJ2lkJywgYGNpdGUtaW5jci0ke0NpdGVUQi5lc2NTdHIodGhpcy5zaG9ydGZvcm0pfS0ke2luY3J0eXBlfWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGRpc3BsYXkgPSBnZXRNZXNzYWdlKGBjaXRlLSR7bGFiZWxmaWVsZH0tbGFiZWxgKTtcblx0XHRcdFx0aWYgKHR5cGVvZiBkaXNwbGF5ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdGRpc3BsYXkgPSBmaWVsZG9iai5sYWJlbCA/IENpdGVUQi5maXhTdHIoZmllbGRvYmoubGFiZWwpIDogQ2l0ZVRCLmZpeFN0cihsYWJlbGZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0b29sdGlwID0gZmllbGRvYmoudG9vbHRpcFxuXHRcdFx0XHRcdD8gJCgnPGFiYnI+JykuYXR0cigndGl0bGUnLCBnZXRNZXNzYWdlKGZpZWxkb2JqLnRvb2x0aXApKS5odG1sKCQoJzxzdXA+JykudGV4dCgnPycpKVxuXHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRcdGxldCBpbnB1dCA9ICcnO1xuXHRcdFx0XHRpbnB1dCA9ICQoJzxpbnB1dD4nKS5hdHRyKHtcblx0XHRcdFx0XHR0YWJpbmRleDogJzEnLFxuXHRcdFx0XHRcdHN0eWxlOiBhZCA/ICd3aWR0aDogODUlJyA6ICd3aWR0aDogMTAwJScsXG5cdFx0XHRcdFx0dHlwZTogJ3RleHQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aW5wdXQuYXR0cignaWQnLCBgY2l0ZS0ke0NpdGVUQi5lc2NTdHIodGhpcy5zaG9ydGZvcm0pfS0ke2ZpZWxkfWApO1xuXHRcdFx0XHRpZiAoZmllbGRvYmouYXV0b2ZpbGxwcm9wKSB7XG5cdFx0XHRcdFx0bGV0IGNsYXNzbmFtZSA9IGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7ZmllbGRvYmouYXV0b2ZpbGxwcm9wfWA7XG5cdFx0XHRcdFx0aWYgKGZpZWxkb2JqLmluY3JlbWVudF9ncm91cCkge1xuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1lZGlhd2lraS9jbGFzcy1kb2Ncblx0XHRcdFx0XHRcdGlucHV0LmFkZENsYXNzKGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LWluY3ItJHtmaWVsZG9iai5pbmNyZW1lbnRfZ3JvdXB9YCk7XG5cdFx0XHRcdFx0XHRjbGFzc25hbWUgKz0gYC0ke3RoaXMuaW5jcmVtZW50YWJsZXNbZmllbGRvYmouaW5jcmVtZW50X2dyb3VwXS52YWwudG9TdHJpbmcoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWVkaWF3aWtpL2NsYXNzLWRvY1xuXHRcdFx0XHRcdGlucHV0LmFkZENsYXNzKGNsYXNzbmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbGFiZWwgPSAkKCc8bGFiZWw+Jyk7XG5cdFx0XHRcdGxhYmVsLmF0dHIoJ2ZvcicsIGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7ZmllbGR9YCkudGV4dChkaXNwbGF5KTtcblx0XHRcdFx0aWYgKHRvb2x0aXApIHtcblx0XHRcdFx0XHRsYWJlbC5hcHBlbmQodG9vbHRpcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IHN0eWxlID0gJ3RleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMjAlOyc7XG5cdFx0XHRcdGlmIChpICUgMiA9PT0gMSkge1xuXHRcdFx0XHRcdHN0eWxlICs9ICcgcGFkZGluZy1sZWZ0OiAxZW07Jztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0ciA9ICQoJzx0cj4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0ZDEgPSAkKCc8dGQ+JykuYWRkQ2xhc3MoJ2NpdGUtZm9ybS10ZCcpLmF0dHIoe1xuXHRcdFx0XHRcdHN0eWxlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGQxLmFwcGVuZChsYWJlbCk7XG5cdFx0XHRcdHRyLmFwcGVuZCh0ZDEpO1xuXHRcdFx0XHRjb25zdCB0ZDIgPSAkKCc8dGQ+JykuYWRkQ2xhc3MoJ2NpdGUtZm9ybS10ZCcpLmNzcygnd2lkdGgnLCAnMzAlJyk7XG5cdFx0XHRcdHRkMi5hcHBlbmQoaW5wdXQpO1xuXHRcdFx0XHRpZiAoYWQpIHtcblx0XHRcdFx0XHR0ZDIuYXBwZW5kKGFkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0ci5hcHBlbmQodGQyKTtcblx0XHRcdFx0aWYgKGkgJSAyID09PSAwKSB7XG5cdFx0XHRcdFx0dHJzLnB1c2godHIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgbmVlZHNldHVwID0gZmFsc2U7XG5cdFx0XHRmb3IgKGNvbnN0IGcgaW4gdGhpcy5pbmNyZW1lbnRhYmxlcykge1xuXHRcdFx0XHRpZiAoIXRoaXMuaW5jcmVtZW50YWJsZXNbZ10uc2V0dXApIHtcblx0XHRcdFx0XHRuZWVkc2V0dXAgPSB0cnVlO1xuXHRcdFx0XHRcdCQoZG9jdW1lbnQpLm9uKCdjbGljaycsIGAjY2l0ZS1pbmNyLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LSR7Z31gLCBDaXRlVEIuaW5jcmVtZW50RmllbGRzKTtcblx0XHRcdFx0XHR0aGlzLmluY3JlbWVudGFibGVzW2ddLnNldHVwID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG5lZWRzZXR1cCB8fCBPYmplY3Qua2V5cyh0aGlzLmluY3JlbWVudGFibGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Zm9yIChjb25zdCBhdXRvZmlsbCBvZiBhdXRvZmlsbHMpIHtcblx0XHRcdFx0XHQkKGRvY3VtZW50KS5vbignY2xpY2snLCBhdXRvZmlsbCwgQ2l0ZVRCLmluaXRBdXRvZmlsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnM7XG5cdFx0fVxuXHRcdC8vIGdpdmVzIGEgbGl0dGxlIGJpdCBvZiBIVE1MIHNvIHRoZSBvcGVuIGZvcm0gY2FuIGJlIGlkZW50aWZpZWRcblx0XHRnZXRJbml0aWFsKCkge1xuXHRcdFx0Y29uc3QgaGlkZGVuID0gJCgnPGlucHV0PicpLmFkZENsYXNzKCdjaXRlLXRlbXBsYXRlJykuYXR0cih7XG5cdFx0XHRcdHR5cGU6ICdoaWRkZW4nLFxuXHRcdFx0XHR2YWx1ZTogdGhpcy50ZW1wbGF0ZW5hbWUsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBoaWRkZW47XG5cdFx0fVxuXHRcdC8vIG1ha2VzIHRoZSBmb3JtIHVzZWQgaW4gdGhlIGRpYWxvZyBib3hlc1xuXHRcdGdldEZvcm0oKSB7XG5cdFx0XHRjb25zdCBtYWluID0gJCgnPGRpdj4nKS5hZGRDbGFzcygnY2l0ZS1mb3JtLWNvbnRhaW5lcicpO1xuXHRcdFx0Y29uc3QgZm9ybTEgPSAkKCc8dGFibGU+JykuYWRkQ2xhc3MoJ2NpdGUtYmFzaWMtZmllbGRzJykuY3NzKHtcblx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0J2JhY2tncm91bmQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuXHRcdFx0fSk7XG5cdFx0XHRsZXQgdHJzID0gdGhpcy5tYWtlRm9ybUlubmVyKHRoaXMuYmFzaWMsIHRydWUpO1xuXHRcdFx0Zm9yIChjb25zdCB0ciBvZiB0cnMpIHtcblx0XHRcdFx0Zm9ybTEuYXBwZW5kKHRyKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZvcm0yID0gJCgnPHRhYmxlPicpLmFkZENsYXNzKCdjaXRlLWV4dHJhLWZpZWxkcycpLmNzcyh7XG5cdFx0XHRcdHdpZHRoOiAnMTAwJScsXG5cdFx0XHRcdCdiYWNrZ3JvdW5kLWNvbG9yJzogJ3RyYW5zcGFyZW50Jyxcblx0XHRcdFx0ZGlzcGxheTogJ25vbmUnLFxuXHRcdFx0fSk7XG5cdFx0XHR0cnMgPSB0aGlzLm1ha2VGb3JtSW5uZXIodGhpcy5leHRyYSwgdHJ1ZSk7XG5cdFx0XHRmb3IgKGNvbnN0IHRyIG9mIHRycykge1xuXHRcdFx0XHRmb3JtMi5hcHBlbmQodHIpO1xuXHRcdFx0fVxuXHRcdFx0bWFpbi5hcHBlbmQoZm9ybTEpLmFwcGVuZChmb3JtMik7XG5cdFx0XHRjb25zdCBmb3JtMyA9ICQoJzx0YWJsZT4nKS5hZGRDbGFzcygnY2l0ZS1vdGhlci1maWVsZHMnKS5jc3Moe1xuXHRcdFx0XHR3aWR0aDogJzEwMCUnLFxuXHRcdFx0XHQnYmFja2dyb3VuZC1jb2xvcic6ICd0cmFuc3BhcmVudCcsXG5cdFx0XHRcdCdwYWRkaW5nLXRvcCc6ICcxZW0nLFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCAkdHIgPSAkKCc8dHI+Jyk7XG5cdFx0XHRjb25zdCAkdGQxID0gJCgnPHRkPicpLmFkZENsYXNzKCdjaXRlLWZvcm0tdGQnKS5jc3Moe1xuXHRcdFx0XHQndGV4dC1hbGlnbic6ICdyaWdodCcsXG5cdFx0XHRcdHdpZHRoOiAnMjAlJyxcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgJGxhYmVsMSA9ICQoJzxsYWJlbD4nKTtcblx0XHRcdCRsYWJlbDEuYXR0cignZm9yJywgYGNpdGUtJHtDaXRlVEIuZXNjU3RyKHRoaXMuc2hvcnRmb3JtKX0tbmFtZWApLnRleHQoZ2V0TWVzc2FnZSgnY2l0ZS1uYW1lLWxhYmVsJykpO1xuXHRcdFx0JHRkMS5hcHBlbmQoJGxhYmVsMSk7XG5cdFx0XHRjb25zdCB0ZDIgPSAkKCc8dGQ+JykuYWRkQ2xhc3MoJ2NpdGUtZm9ybS10ZCcpLmNzcygnd2lkdGgnLCAnMzAlJyk7XG5cdFx0XHRjb25zdCBpbnB1dDEgPSAkKCc8aW5wdXQ+JykuYXR0cih7XG5cdFx0XHRcdHRhYmluZGV4OiAnMScsXG5cdFx0XHRcdHN0eWxlOiAnd2lkdGg6IDEwMCUnLFxuXHRcdFx0XHR0eXBlOiAndGV4dCcsXG5cdFx0XHR9KTtcblx0XHRcdGlucHV0MS5hdHRyKCdpZCcsIGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LW5hbWVgKTtcblx0XHRcdHRkMi5hcHBlbmQoaW5wdXQxKTtcblx0XHRcdGNvbnN0IHRkMyA9ICQoJzx0ZD4nKS5hZGRDbGFzcygnY2l0ZS1mb3JtLXRkJykuY3NzKHtcblx0XHRcdFx0J3RleHQtYWxpZ24nOiAncmlnaHQnLFxuXHRcdFx0XHQncGFkZGluZy1sZWZ0JzogJzFlbScsXG5cdFx0XHRcdHdpZHRoOiAnMjAlJyxcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbGFiZWwyID0gJCgnPGxhYmVsPicpO1xuXHRcdFx0bGFiZWwyLmF0dHIoJ2ZvcicsIGBjaXRlLSR7Q2l0ZVRCLmVzY1N0cih0aGlzLnNob3J0Zm9ybSl9LWdyb3VwYCkudGV4dChnZXRNZXNzYWdlKCdjaXRlLWdyb3VwLWxhYmVsJykpO1xuXHRcdFx0dGQzLmFwcGVuZChsYWJlbDIpO1xuXHRcdFx0Y29uc3QgdGQ0ID0gJCgnPHRkPicpLmFkZENsYXNzKCdjaXRlLWZvcm0tdGQnKS5jc3MoJ3dpZHRoJywgJzMwJScpO1xuXHRcdFx0Y29uc3QgaW5wdXQyID0gJCgnPGlucHV0PicpLmF0dHIoe1xuXHRcdFx0XHR0YWJpbmRleDogJzEnLFxuXHRcdFx0XHRzdHlsZTogJ3dpZHRoOiAxMDAlJyxcblx0XHRcdFx0dHlwZTogJ3RleHQnLFxuXHRcdFx0fSk7XG5cdFx0XHRpbnB1dDIuYXR0cignaWQnLCBgY2l0ZS0ke0NpdGVUQi5lc2NTdHIodGhpcy5zaG9ydGZvcm0pfS1ncm91cGApO1xuXHRcdFx0dGQ0LmFwcGVuZChpbnB1dDIpO1xuXHRcdFx0JHRyLmFwcGVuZCgkdGQxKS5hcHBlbmQodGQyKS5hcHBlbmQodGQzKS5hcHBlbmQodGQ0KTtcblx0XHRcdGZvcm0zLmFwcGVuZCgkdHIpO1xuXHRcdFx0bWFpbi5hcHBlbmQoZm9ybTMpO1xuXHRcdFx0Y29uc3QgZXh0cmFzID0gJCgnPGRpdj4nKTtcblx0XHRcdGV4dHJhcy5hcHBlbmQoXG5cdFx0XHRcdCQoJzxpbnB1dD4nKS5hZGRDbGFzcygnY2l0ZS1mb3JtLXN0YXR1cycpLmF0dHIoe1xuXHRcdFx0XHRcdHR5cGU6ICdoaWRkZW4nLFxuXHRcdFx0XHRcdHZhbHVlOiAnY2xvc2VkJyxcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBoaWRkZW4gPSAkKCc8aW5wdXQ+JykuYWRkQ2xhc3MoJ2NpdGUtdGVtcGxhdGUnKS5hdHRyKCd0eXBlJywgJ2hpZGRlbicpO1xuXHRcdFx0aGlkZGVuLnZhbCh0aGlzLnRlbXBsYXRlbmFtZSk7XG5cdFx0XHRleHRyYXMuYXBwZW5kKGhpZGRlbik7XG5cdFx0XHRjb25zdCBzcGFuMSA9ICQoJzxzcGFuPicpLmFkZENsYXNzKCdjaXRlLXByZXZpZXctbGFiZWwnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXHRcdFx0c3BhbjEudGV4dChnZXRNZXNzYWdlKCdjaXRlLXJhdy1wcmV2aWV3JykpO1xuXHRcdFx0ZXh0cmFzLmFwcGVuZChzcGFuMSkuYXBwZW5kKFxuXHRcdFx0XHQkKCc8ZGl2PicpLmFkZENsYXNzKCdjaXRlLXJlZi1wcmV2aWV3JykuY3NzKHtcblx0XHRcdFx0XHRwYWRkaW5nOiAnMC41ZW0nLFxuXHRcdFx0XHRcdCdmb250LXNpemUnOiAnMTEwJScsXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc3BhbjIgPSAkKCc8c3Bhbj4nKS5hZGRDbGFzcygnY2l0ZS1wcmV2LXBhcnNlZC1sYWJlbCcpLmNzcygnZGlzcGxheScsICdub25lJyk7XG5cdFx0XHRzcGFuMi50ZXh0KGdldE1lc3NhZ2UoJ2NpdGUtcGFyc2VkLWxhYmVsJykpO1xuXHRcdFx0ZXh0cmFzLmFwcGVuZChzcGFuMikuYXBwZW5kKFxuXHRcdFx0XHQkKCc8ZGl2PicpLmFkZENsYXNzKCdjaXRlLXByZXZpZXctcGFyc2VkJykuY3NzKHtcblx0XHRcdFx0XHQncGFkZGluZy1ib3R0b20nOiAnMC41ZW0nLFxuXHRcdFx0XHRcdCdmb250LXNpemUnOiAnMTEwJScsXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgbGluayA9ICQoJzxhPicpLmFkZENsYXNzKCdjaXRlLXByZXYtcGFyc2UnKS5hdHRyKCdocmVmJywgJyMnKS5jc3Moe1xuXHRcdFx0XHRtYXJnaW46ICcwIDFlbScsXG5cdFx0XHRcdGRpc3BsYXk6ICdub25lJyxcblx0XHRcdFx0Y29sb3I6ICcjMDAwMDhiJyxcblx0XHRcdH0pO1xuXHRcdFx0bGluay50ZXh0KGdldE1lc3NhZ2UoJ2NpdGUtZm9ybS1wYXJzZScpKTtcblx0XHRcdGV4dHJhcy5hcHBlbmQobGluayk7XG5cdFx0XHRtYWluLmFwcGVuZChleHRyYXMpO1xuXHRcdFx0cmV0dXJuIG1haW47XG5cdFx0fVxuXHR9O1xuXG5cdCQoZG9jdW1lbnQpLmZpbmQoJ2hlYWQnKS50cmlnZ2VyKCdyZWZ0b29sYmFyYmFzZScpO1xufTtcblxuZXhwb3J0IHtyZWZUb29sYmFyQmFzZX07XG4iLCAiY29uc3QgcmVmVG9vbGJhck1lc2FnZXMgPSAoKTogdm9pZCA9PiB7XG5cdGNvbnN0IHt3Z1VzZXJMYW5ndWFnZX0gPSBtdy5jb25maWcuZ2V0KCk7XG5cblx0aWYgKHdnVXNlckxhbmd1YWdlID09PSAnZW4nKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdC8vIEFsbCB1c2VyLWZhY2luZyBtZXNzYWdlc1xuXHQvLyBUT0RPOiBEb2N1bWVudCB1c2FnZVxuXHRpZiAoWyd6aC1oYW50JywgJ3poLWhrJywgJ3poLW1vJywgJ3poLXR3J10uaW5jbHVkZXMod2dVc2VyTGFuZ3VhZ2UpKSB7XG5cdFx0bXcubWVzc2FnZXMuc2V0KHtcblx0XHRcdCdjaXRlLXNlY3Rpb24tbGFiZWwnOiAn5byV55SoJyxcblx0XHRcdCdjaXRlLXRlbXBsYXRlLWxpc3QnOiAn5qih5p2/Jyxcblx0XHRcdCdjaXRlLW5hbWVkLXJlZnMtbGFiZWwnOiAn5ZCM5ZCN5paH5427Jyxcblx0XHRcdCdjaXRlLW5hbWVkLXJlZnMtdGl0bGUnOiAn5o+S5YWl5ZCM5ZCN5paH5427Jyxcblx0XHRcdCdjaXRlLW5hbWVkLXJlZnMtYnV0dG9uJzogJ+W3suWRveWQjeWPg+iAg+aWh+eNuycsXG5cdFx0XHQnY2l0ZS1uYW1lZC1yZWZzLWRyb3Bkb3duJzogJ+WQjOWQjeaWh+eNuycsXG5cdFx0XHQvLyBVc2VkIG9uIHRoZSB0b3Agb2YgdGhlIG5hbWVkIHJlZnMgbGlzdCBkcm9wc293blxuXHRcdFx0J2NpdGUtZGlhbG9nLWJhc2UnOiAn5byV55SoJyxcblx0XHRcdCdjaXRlLWZvcm0tc3VibWl0JzogJ+aPkuWFpScsXG5cdFx0XHQnY2l0ZS1mb3JtLXNob3doaWRlJzogJ+mhr+ekui/pmrHol4/poY3lpJbljYDln58nLFxuXHRcdFx0J2NpdGUtbm8tbmFtZWRyZWZzJzogJ+WcqOacrOmggeaJvuS4jeWIsOS7u+S9leWQjOWQjeaWh+eNuycsXG5cdFx0XHQnY2l0ZS1uYW1lZHJlZnMtaW50cm8nOiAn5b6e5YiX5Ye655qE5Y+D6ICD5paH542755uu6YyE5Lit6YG45pOH5LiA5YCL5ZCN5a2X44CC6bue5pOK44CM5o+S5YWl44CN5o+S5YWl5LiA5YCL5Y+D6ICD5paH54275Yiw5paH5pys5Lit44CCJyxcblx0XHRcdCdjaXRlLXJhdy1wcmV2aWV3JzogJ+WOn+Wni+eivO+8micsXG5cdFx0XHQnY2l0ZS1wYXJzZWQtbGFiZWwnOiAn6Kej5p6Q5b6M55qE5Y6f5aeL56K877yaJyxcblx0XHRcdCdjaXRlLWZvcm0tcGFyc2UnOiAn6aGv56S66Kej5p6Q5b6M55qE6aCQ6Ka9Jyxcblx0XHRcdCdjaXRlLXJlZnByZXZpZXcnOiAn6aCQ6Ka9Jyxcblx0XHRcdCdjaXRlLW5hbWUtbGFiZWwnOiAncmVm5ZCNJyxcblx0XHRcdCdjaXRlLWdyb3VwLWxhYmVsJzogJ3JlZue1hCcsXG5cdFx0XHQnY2l0ZS1mb3JtLXJlc2V0JzogJ+mHjeioreihqOWWricsXG5cdFx0XHQnY2l0ZS1sb2FkaW5nJzogJ+i8ieWFpeaVuOaTmicsXG5cdFx0XHQvLyBTaG93biB3aGlsZSBwYWdldGV4dCBpcyBiZWluZyBkb3dubG9hZGVkIGZyb20gdGhlIEFQSVxuXHRcdFx0J2NpdGUtaW5zZXJ0LWRhdGUnOiAn5o+S5YWl55W25YmN5pel5pyfJyxcblx0XHRcdC8vIEFsdC90aXRsZSB0ZXh0IGZvciBcImluc2VydCBkYXRlXCIgaWNvblxuXHRcdFx0J2NpdGUtZXJyLXJlcG9ydC1oZWFkaW5nJzogJ+W8leeUqOmMr+iqpOWgseWRiicsXG5cdFx0XHQvLyBIZWFkaW5nIGZvciBlcnJvciByZXBvcnQgdGFibGVcblx0XHRcdCdjaXRlLWVyci1yZXBvcnQtY2xvc2UnOiAn6Zec6ZaJJyxcblx0XHRcdC8vIEFsdC90aXRsZSB0ZXh0IGZvciBcImNsb3NlXCIgaWNvbiBvbiBlcnJvciByZXBvcnRcblx0XHRcdCdjaXRlLWVyci1yZXBvcnQtZW1wdHknOiAn5pyq5om+5Yiw6Yyv6KqkJyxcblx0XHRcdC8vIE1lc3NhZ2UgZGlzcGxheWVkIGluIHRoZSBlcnJvciByZXBvcnQgbGlzdCBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzXG5cdFx0XHQnY2l0ZS1hdXRvZmlsbC1hbHQnOiAn6Ieq5YuV5aGr5YWFJyxcblx0XHRcdC8vIEFsdCB0ZXh0IGZvciBhdXRvZmlsbCBidXR0b24gaW1hZ2Vcblx0XHRcdCdjaXRlLXJlZi10b29sdGlwJzogJ+mMqOm7nueahOaomeitmOespu+8iOS9v+ipsuW8leeUqOWPr+S7peaIkOeCuuWFp+mDqOmAo+e1kOeahOebruaome+8iScsXG5cdFx0XHQnY2l0ZS1wb3N0c2NyaXB0LXRvb2x0aXAnOiAn5aaC5p6c6Kit5a6a6YCZ5LiA5Y+D5pW477yM5YmH6KaG6JOL5L2/55So5Y+l6bue57WC5q2i5byV5paH55qE6buY6KqN6KGM54iyJyxcblx0XHRcdCdjaXRlLWRpYWxvZy13ZWInOiAn57ay6aCB5byV55SoJyxcblx0XHRcdCdjaXRlLWRpYWxvZy1uZXdzJzogJ+aWsOiBnuW8leeUqCcsXG5cdFx0XHQnY2l0ZS1kaWFsb2ctYm9vayc6ICfmm7jnsY3lvJXnlKgnLFxuXHRcdFx0J2NpdGUtZGlhbG9nLWpvdXJuYWwnOiAn5pyf5YiK5byV55SoJyxcblx0XHRcdCdjaXRlLWRpYWxvZy1jb25mZXJlbmNlJzogJ+acg+itsOW8leeUqCcsXG5cdFx0XHQnY2l0ZS1kaWFsb2ctZW5jeWNsb3BlZGlhJzogJ+eZvuenkeWFqOabuOW8leeUqCcsXG5cdFx0XHQnY2l0ZS1hdXRob3ItbGFiZWwnOiAn5L2c6ICFJyxcblx0XHRcdCdjaXRlLXRpdGxlLWxhYmVsJzogJ+aomemhjCcsXG5cdFx0XHQnY2l0ZS11cmwtbGFiZWwnOiAn57ay5Z2AJyxcblx0XHRcdCdjaXRlLXdlYnNpdGUtbGFiZWwnOiAn57ay56uZ5ZCN56ixJyxcblx0XHRcdCdjaXRlLXdvcmstbGFiZWwnOiAn5aCx57SZ5oiW6Zuc6KqMJyxcblx0XHRcdCdjaXRlLWFnZW5jeS1sYWJlbCc6ICfpgJroqIrnpL4nLFxuXHRcdFx0J2NpdGUtcHVibGlzaGVyLWxhYmVsJzogJ+WHuueJiOiAhScsXG5cdFx0XHQnY2l0ZS1hY2Nlc3NkYXRlLWxhYmVsJzogJ+WtmOWPluaXpeacnycsXG5cdFx0XHQnY2l0ZS1sYXN0LWxhYmVsJzogJ+WnkycsXG5cdFx0XHQnY2l0ZS1maXJzdC1sYWJlbCc6ICflkI0nLFxuXHRcdFx0J2NpdGUtYXV0aG9ybGluay1sYWJlbCc6ICfkvZzogIXmop3nm64nLFxuXHRcdFx0J2NpdGUtY29hdXRob3JzLWxhYmVsJzogJ+WFtuS7luS9nOiAhScsXG5cdFx0XHQnY2l0ZS1sb2NhdGlvbi1sYWJlbCc6ICflh7rniYjlnLAnLFxuXHRcdFx0J2NpdGUtcGFnZS1sYWJlbCc6ICfmiYDlnKjpoIEnLFxuXHRcdFx0J2NpdGUtcGFnZXMtbGFiZWwnOiAn6aCB56+E5ZyNJyxcblx0XHRcdCdjaXRlLWF0LWxhYmVsJzogJ+abuOWFp+mDqOWIhicsXG5cdFx0XHQnY2l0ZS1sYW5ndWFnZS1sYWJlbCc6ICfoqp7oqIAnLFxuXHRcdFx0J2NpdGUtZm9ybWF0LWxhYmVsJzogJ+aWh+S7tuagvOW8jycsXG5cdFx0XHQnY2l0ZS1kb2ktbGFiZWwnOiAnRE9JJyxcblx0XHRcdCdjaXRlLWRhdGUtbGFiZWwnOiAn5pel5pyfJyxcblx0XHRcdCdjaXRlLW1vbnRoLWxhYmVsJzogJ+aciOS7vScsXG5cdFx0XHQnY2l0ZS15ZWFyLWxhYmVsJzogJ+W5tOS7vScsXG5cdFx0XHQnY2l0ZS1xdW90ZS1sYWJlbCc6ICfmkZjpjIQnLFxuXHRcdFx0J2NpdGUtbmV3c3BhcGVyLWxhYmVsJzogJ+aWsOiBnuWqkumrlCcsXG5cdFx0XHQnY2l0ZS1hdXRob3IyLWxhYmVsJzogJ+esrDLkvZzogIUnLFxuXHRcdFx0J2NpdGUtYXV0aG9yMy1sYWJlbCc6ICfnrKwz5L2c6ICFJyxcblx0XHRcdCdjaXRlLWF1dGhvcjQtbGFiZWwnOiAn56ysNOS9nOiAhScsXG5cdFx0XHQnY2l0ZS1hdXRob3I1LWxhYmVsJzogJ+esrDXkvZzogIUnLFxuXHRcdFx0J2NpdGUtYWdlbmN5JzogJ+mAmuioiuekvicsXG5cdFx0XHQnY2l0ZS1pc3NuLWxhYmVsJzogJ0lTU04nLFxuXHRcdFx0J2NpdGUtb2NsYy1sYWJlbCc6ICdPQ0xDJyxcblx0XHRcdCdjaXRlLWJpYmNvZGUtbGFiZWwnOiAnQmliY29kZScsXG5cdFx0XHQnY2l0ZS1pc2JuLWxhYmVsJzogJ0lTQk4nLFxuXHRcdFx0J2NpdGUtb3RoZXJzLWxhYmVsJzogJ+itr+iAhScsXG5cdFx0XHQnY2l0ZS1lZGl0aW9uLWxhYmVsJzogJ+eJiOacrCcsXG5cdFx0XHQnY2l0ZS10cmFucy10aXRsZS1sYWJlbCc6ICfnv7vora/lvozmqJnpoYwnLFxuXHRcdFx0J2NpdGUtcmVmLWxhYmVsJzogJ+mMqOm7nuaomeitmOespicsXG5cdFx0XHQnY2l0ZS1wb3N0c2NyaXB0LWxhYmVsJzogJ+e7k+WwvuespicsXG5cdFx0XHQnY2l0ZS1zZXJpZXMtbGFiZWwnOiAn57O75YiXJyxcblx0XHRcdCdjaXRlLXZvbHVtZS1sYWJlbCc6ICfljbcnLFxuXHRcdFx0J2NpdGUtdW5pZmllZC1sYWJlbCc6ICfntbHkuIDmm7jomZ8nLFxuXHRcdFx0J2NpdGUtY2hhcHRlci1sYWJlbCc6ICfnq6Dnr4AnLFxuXHRcdFx0J2NpdGUtam91cm5hbC1sYWJlbCc6ICfpm5zoqowv5pyf5YiKJyxcblx0XHRcdCdjaXRlLWlzc3VlLWxhYmVsJzogJ+acnycsXG5cdFx0XHQnY2l0ZS1wbWlkLWxhYmVsJzogJ1BNSUQnLFxuXHRcdFx0J2NpdGUtZWRpdG9yLWxhYmVsJzogJ+e3qOi8rycsXG5cdFx0XHQnY2l0ZS1lZGl0b3IxLWZpcnN0LWxhYmVsJzogJ+e3qOi8r+WQjScsXG5cdFx0XHQnY2l0ZS1lZGl0b3IxLWxhc3QtbGFiZWwnOiAn57eo6Lyv5aeTJyxcblx0XHRcdCdjaXRlLWVkaXRvcjEtbGluay1sYWJlbCc6ICfnt6jovK/mop3nm64nLFxuXHRcdFx0J2NpdGUtZWRpdG9yLWZpcnN0LWxhYmVsJzogJ+e3qOi8r+WQjScsXG5cdFx0XHQnY2l0ZS1lZGl0b3ItbGFzdC1sYWJlbCc6ICfnt6jovK/lp5MnLFxuXHRcdFx0J2NpdGUtZWRpdG9yLWxpbmstbGFiZWwnOiAn57eo6Lyv5qKd55uuJyxcblx0XHRcdCdjaXRlLXBtYy1sYWJlbCc6ICdQTUMnLFxuXHRcdFx0J2NpdGUtaWQtbGFiZWwnOiAnSUQnLFxuXHRcdFx0J2NpdGUtbGF5c3VtbWFyeS1sYWJlbCc6ICfnsKHmmI7mkZjopoEnLFxuXHRcdFx0J2NpdGUtbGF5c291cmNlLWxhYmVsJzogJ+ewoeaYjuaRmOimgeS+hua6kCcsXG5cdFx0XHQnY2l0ZS1sYXlkYXRlLWxhYmVsJzogJ+ewoeaYjuaRmOimgeaXpeacnycsXG5cdFx0XHQnY2l0ZS1jb25mZXJlbmNlLWxhYmVsJzogJ+acg+itsOWQjeeosScsXG5cdFx0XHQnY2l0ZS1jb25mZXJlbmNldXJsLWxhYmVsJzogJ+acg+itsOe2suWdgCcsXG5cdFx0XHQnY2l0ZS1ib29rdGl0bGUtbGFiZWwnOiAn6KuW5paH6ZuGJyxcblx0XHRcdCdjaXRlLWVuY3ljbG9wZWRpYS1sYWJlbCc6ICfnmb7np5Hlhajmm7jlkI0nLFxuXHRcdFx0J2NpdGUtYXV0aG9ybGluay10b29sdGlwJzogJ+iLpeipsuS9nOiAheacieaineebru+8jOWhq+Wvq+aineebruWQjeeosScsXG5cdFx0XHQnY2l0ZS1hdC10b29sdGlwJzogJ+WFp+WuueWcqOS+hua6kOS4reeahOS9jee9ru+8iOeVtuaMiemggeeivOW8leeUqOS4jemBqeeVtuaZgu+8iScsXG5cdFx0XHQnY2l0ZS1hY2Nlc3NkYXRlLXRvb2x0aXAnOiAn6Kiq5ZWP6YCZ5YCL5byV55So5L6G5rqQ5pmC55qE5pel5pyfJyxcblx0XHRcdCdjaXRlLWlkLXRvb2x0aXAnOiAn5YW25LuW55qE5paH56ug57eo6JmfJyxcblx0XHRcdCdjaXRlLXNhbWVjb250ZW50LWRlc2MnOiAn5qqi5p+l5ZCr5pyJ55u45ZCM5YWn5a6555qE5aSa5YCL5Y+D6ICD5paH5427Jyxcblx0XHRcdCdjaXRlLXNhbWVjb250ZW50LWVycm9yJzogJ+WkmuWAi+WPg+iAg+aWh+eNu+WMheWQq+acieebuOWQjOWFp+WuuScsXG5cdFx0XHQnY2l0ZS1yZXBlYXRlZC1kZXNjJzogJ+S9v+eUqOebuOWQjOWQjeWtl+eahOWkmuWAi+WPg+iAg+aWh+eNuycsXG5cdFx0XHQnY2l0ZS1yZXBlYXRlZC1lcnJvcic6ICflpJrlgIvlj4PogIPmlofnjbvkvb/nlKjkuobnm7jlkIzlkI3lrZcnLFxuXHRcdFx0J2NpdGUtdW5kZWZpbmVkLWRlc2MnOiAn5pyq5a6a576p55qE5Y+D6ICD5paH5427Jyxcblx0XHRcdCdjaXRlLXVuZGVmaW5lZC1lcnJvcic6ICfkuIDlgIvlt7Llkb3lkI3nmoTlj4PogIPmlofnjbvlt7LntpPkvb/nlKjkvYbmmK/mspLmnInlrprnvqknLFxuXHRcdFx0J2NpdGUtd29yay10b29sdGlwJzogJ+WIiueZu+ipsuS9nOWTgeeahOWHuueJiOeJqeeahOWQjeeoseOAguiri+S4jeimgeS9v+eUqOaWnOmrlCcsXG5cdFx0XHQnY2l0ZS1uZXdzcGFwZXItdG9vbHRpcCc6ICfliIrnmbvoqbLmlrDogZ7nmoTlh7rniYjnianlkI3nqLEnLFxuXHRcdFx0J2NpdGUtc2VyaWVzLXRvb2x0aXAnOiAn55W25pu457GN5piv5LiA57O75YiX5Ye654mI5ZOB5Lit55qE5YW25Lit5LiA6YOo5Lu95pmC5L2/55SoJyxcblx0XHRcdCdjaXRlLXVuaWZpZWQtdG9vbHRpcCc6ICcxOTgw5bm05Luj5LmL5YmN5Lit5ZyL5omA5L2/55So55qE5pu457GN57eo6JmfJyxcblx0XHRcdCdjaXRlLWxheXN1bW1hcnktdG9vbHRpcCc6ICfoqbLmlofnjbvnm7jpl5znmoTmlrDogZ7loLHpgZPnmoRVUkwnLFxuXHRcdFx0J2NpdGUtbGF5c291cmNlLXRvb2x0aXAnOiAn6Kmy5paH542755u46Zec55qE5paw6IGe5aCx6YGT55qE5Ye66JmVJyxcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRtdy5tZXNzYWdlcy5zZXQoe1xuXHRcdFx0J2NpdGUtc2VjdGlvbi1sYWJlbCc6ICflvJXnlKgnLFxuXHRcdFx0J2NpdGUtdGVtcGxhdGUtbGlzdCc6ICfmqKHmnb8nLFxuXHRcdFx0J2NpdGUtbmFtZWQtcmVmcy1sYWJlbCc6ICflkIzlkI3mlofnjK4nLFxuXHRcdFx0J2NpdGUtbmFtZWQtcmVmcy10aXRsZSc6ICfmj5LlhaXlkIzlkI3mlofnjK4nLFxuXHRcdFx0J2NpdGUtbmFtZWQtcmVmcy1idXR0b24nOiAn5bey5ZG95ZCN5Y+C6ICD5paH54yuJyxcblx0XHRcdCdjaXRlLW5hbWVkLXJlZnMtZHJvcGRvd24nOiAn5ZCM5ZCN5paH54yuJyxcblx0XHRcdC8vIFVzZWQgb24gdGhlIHRvcCBvZiB0aGUgbmFtZWQgcmVmcyBsaXN0IGRyb3Bzb3duXG5cdFx0XHQnY2l0ZS1kaWFsb2ctYmFzZSc6ICflvJXnlKgnLFxuXHRcdFx0J2NpdGUtZm9ybS1zdWJtaXQnOiAn5o+S5YWlJyxcblx0XHRcdCdjaXRlLWZvcm0tc2hvd2hpZGUnOiAn5pi+56S6L+makOiXj+mineWkluWMuuWfnycsXG5cdFx0XHQnY2l0ZS1uby1uYW1lZHJlZnMnOiAn5Zyo5pys6aG15om+5LiN5Yiw5Lu75L2V5ZCM5ZCN5paH54yuJyxcblx0XHRcdCdjaXRlLW5hbWVkcmVmcy1pbnRybyc6ICfku47liJflh7rnmoTlj4LogIPmlofnjK7nm67lvZXkuK3pgInmi6nkuIDkuKrlkI3lrZfjgILngrnlh7vigJzmj5LlhaXigJ3mj5LlhaXkuIDkuKrlj4LogIPmlofnjK7liLDmlofmnKzkuK3jgIInLFxuXHRcdFx0J2NpdGUtcmF3LXByZXZpZXcnOiAn5rqQ5Luj56CB77yaJyxcblx0XHRcdCdjaXRlLXBhcnNlZC1sYWJlbCc6ICfop6PmnpDlkI7nmoTmupDku6PnoIHvvJonLFxuXHRcdFx0J2NpdGUtZm9ybS1wYXJzZSc6ICfmmL7npLrop6PmnpDlkI7nmoTpooTop4gnLFxuXHRcdFx0J2NpdGUtcmVmcHJldmlldyc6ICfpooTop4gnLFxuXHRcdFx0J2NpdGUtbmFtZS1sYWJlbCc6ICdyZWblkI0nLFxuXHRcdFx0J2NpdGUtZ3JvdXAtbGFiZWwnOiAncmVm57uEJyxcblx0XHRcdCdjaXRlLWZvcm0tcmVzZXQnOiAn6YeN6K6+6KGo5Y2VJyxcblx0XHRcdCdjaXRlLWxvYWRpbmcnOiAn6L295YWl5pWw5o2uJyxcblx0XHRcdC8vIFNob3duIHdoaWxlIHBhZ2V0ZXh0IGlzIGJlaW5nIGRvd25sb2FkZWQgZnJvbSB0aGUgQVBJXG5cdFx0XHQnY2l0ZS1pbnNlcnQtZGF0ZSc6ICfmj5LlhaXlvZPliY3ml6XmnJ8nLFxuXHRcdFx0Ly8gQWx0L3RpdGxlIHRleHQgZm9yIFwiaW5zZXJ0IGRhdGVcIiBpY29uXG5cdFx0XHQnY2l0ZS1lcnItcmVwb3J0LWhlYWRpbmcnOiAn5byV55So6ZSZ6K+v5oql5ZGKJyxcblx0XHRcdC8vIEhlYWRpbmcgZm9yIGVycm9yIHJlcG9ydCB0YWJsZVxuXHRcdFx0J2NpdGUtZXJyLXJlcG9ydC1jbG9zZSc6ICflhbPpl60nLFxuXHRcdFx0Ly8gQWx0L3RpdGxlIHRleHQgZm9yIFwiY2xvc2VcIiBpY29uIG9uIGVycm9yIHJlcG9ydFxuXHRcdFx0J2NpdGUtZXJyLXJlcG9ydC1lbXB0eSc6ICfmnKrmib7liLDplJnor68nLFxuXHRcdFx0Ly8gTWVzc2FnZSBkaXNwbGF5ZWQgaW4gdGhlIGVycm9yIHJlcG9ydCBsaXN0IGlmIHRoZXJlIGFyZSBubyBlcnJvcnNcblx0XHRcdCdjaXRlLWF1dG9maWxsLWFsdCc6ICfoh6rliqjloavlhYUnLFxuXHRcdFx0Ly8gQWx0IHRleHQgZm9yIGF1dG9maWxsIGJ1dHRvbiBpbWFnZVxuXHRcdFx0J2NpdGUtcmVmLXRvb2x0aXAnOiAn6ZSa54K555qE5qCH6K+G56ym77yI5L2/6K+l5byV55So5Y+v5Lul5oiQ5Li65YaF6YOo6ZO+5o6l55qE55uu5qCH77yJJyxcblx0XHRcdCdjaXRlLXBvc3RzY3JpcHQtdG9vbHRpcCc6ICflpoLmnpzorr7lrprov5nkuIDlj4LmlbDvvIzliJnopobnm5bkvb/nlKjlj6Xngrnnu4jmraLlvJXmlofnmoTpu5jorqTooYzkuLonLFxuXHRcdFx0J2NpdGUtZGlhbG9nLXdlYic6ICfnvZHpobXlvJXnlKgnLFxuXHRcdFx0J2NpdGUtZGlhbG9nLW5ld3MnOiAn5paw6Ze75byV55SoJyxcblx0XHRcdCdjaXRlLWRpYWxvZy1ib29rJzogJ+S5puexjeW8leeUqCcsXG5cdFx0XHQnY2l0ZS1kaWFsb2ctam91cm5hbCc6ICfmnJ/liIrlvJXnlKgnLFxuXHRcdFx0J2NpdGUtZGlhbG9nLWNvbmZlcmVuY2UnOiAn5Lya6K6u5byV55SoJyxcblx0XHRcdCdjaXRlLWRpYWxvZy1lbmN5Y2xvcGVkaWEnOiAn55m+56eR5YWo5Lmm5byV55SoJyxcblx0XHRcdCdjaXRlLWF1dGhvci1sYWJlbCc6ICfkvZzogIUnLFxuXHRcdFx0J2NpdGUtdGl0bGUtbGFiZWwnOiAn5qCH6aKYJyxcblx0XHRcdCdjaXRlLXVybC1sYWJlbCc6ICfnvZHlnYAnLFxuXHRcdFx0J2NpdGUtd2Vic2l0ZS1sYWJlbCc6ICfnvZHnq5nlkI3np7AnLFxuXHRcdFx0J2NpdGUtd29yay1sYWJlbCc6ICfmiqXnurjmiJbmnYLlv5cnLFxuXHRcdFx0J2NpdGUtYWdlbmN5LWxhYmVsJzogJ+mAmuiur+ekvicsXG5cdFx0XHQnY2l0ZS1wdWJsaXNoZXItbGFiZWwnOiAn5Ye654mI6ICFJyxcblx0XHRcdCdjaXRlLWFjY2Vzc2RhdGUtbGFiZWwnOiAn6K6/6Zeu5pel5pyfJyxcblx0XHRcdCdjaXRlLWxhc3QtbGFiZWwnOiAn5aeTJyxcblx0XHRcdCdjaXRlLWZpcnN0LWxhYmVsJzogJ+WQjScsXG5cdFx0XHQnY2l0ZS1hdXRob3JsaW5rLWxhYmVsJzogJ+S9nOiAheadoeebricsXG5cdFx0XHQnY2l0ZS1jb2F1dGhvcnMtbGFiZWwnOiAn5YW25LuW5L2c6ICFJyxcblx0XHRcdCdjaXRlLWxvY2F0aW9uLWxhYmVsJzogJ+WHuueJiOWcsCcsXG5cdFx0XHQnY2l0ZS1wYWdlLWxhYmVsJzogJ+aJgOWcqOmhtScsXG5cdFx0XHQnY2l0ZS1wYWdlcy1sYWJlbCc6ICfpobXojIPlm7QnLFxuXHRcdFx0J2NpdGUtYXQtbGFiZWwnOiAn5Lmm5YaF6YOo5YiGJyxcblx0XHRcdCdjaXRlLWxhbmd1YWdlLWxhYmVsJzogJ+ivreiogCcsXG5cdFx0XHQnY2l0ZS1mb3JtYXQtbGFiZWwnOiAn5paH5qGj5qC85byPJyxcblx0XHRcdCdjaXRlLWRvaS1sYWJlbCc6ICdET0knLFxuXHRcdFx0J2NpdGUtZGF0ZS1sYWJlbCc6ICfml6XmnJ8nLFxuXHRcdFx0J2NpdGUtbW9udGgtbGFiZWwnOiAn5pyI5Lu9Jyxcblx0XHRcdCdjaXRlLXllYXItbGFiZWwnOiAn5bm05Lu9Jyxcblx0XHRcdCdjaXRlLXF1b3RlLWxhYmVsJzogJ+aRmOW9lScsXG5cdFx0XHQnY2l0ZS1uZXdzcGFwZXItbGFiZWwnOiAn5paw6Ze75aqS5L2TJyxcblx0XHRcdCdjaXRlLWF1dGhvcjItbGFiZWwnOiAn56ysMuS9nOiAhScsXG5cdFx0XHQnY2l0ZS1hdXRob3IzLWxhYmVsJzogJ+esrDPkvZzogIUnLFxuXHRcdFx0J2NpdGUtYXV0aG9yNC1sYWJlbCc6ICfnrKw05L2c6ICFJyxcblx0XHRcdCdjaXRlLWF1dGhvcjUtbGFiZWwnOiAn56ysNeS9nOiAhScsXG5cdFx0XHQnY2l0ZS1hZ2VuY3knOiAn6YCa6K6v56S+Jyxcblx0XHRcdCdjaXRlLWlzc24tbGFiZWwnOiAnSVNTTicsXG5cdFx0XHQnY2l0ZS1vY2xjLWxhYmVsJzogJ09DTEMnLFxuXHRcdFx0J2NpdGUtYmliY29kZS1sYWJlbCc6ICdCaWJjb2RlJyxcblx0XHRcdCdjaXRlLWlzYm4tbGFiZWwnOiAnSVNCTicsXG5cdFx0XHQnY2l0ZS1vdGhlcnMtbGFiZWwnOiAn6K+R6ICFJyxcblx0XHRcdCdjaXRlLWVkaXRpb24tbGFiZWwnOiAn54mI5pysJyxcblx0XHRcdCdjaXRlLXRyYW5zLXRpdGxlLWxhYmVsJzogJ+e/u+ivkeWQjuagh+mimCcsXG5cdFx0XHQnY2l0ZS1yZWYtbGFiZWwnOiAn6ZSa54K55qCH6K+G56ymJyxcblx0XHRcdCdjaXRlLXBvc3RzY3JpcHQtbGFiZWwnOiAn57uT5bC+56ymJyxcblx0XHRcdCdjaXRlLXNlcmllcy1sYWJlbCc6ICfns7vliJcnLFxuXHRcdFx0J2NpdGUtdm9sdW1lLWxhYmVsJzogJ+WNtycsXG5cdFx0XHQnY2l0ZS11bmlmaWVkLWxhYmVsJzogJ+e7n+S4gOS5puWPtycsXG5cdFx0XHQnY2l0ZS1jaGFwdGVyLWxhYmVsJzogJ+eroOiKgicsXG5cdFx0XHQnY2l0ZS1qb3VybmFsLWxhYmVsJzogJ+adguW/ly/mnJ/liIonLFxuXHRcdFx0J2NpdGUtaXNzdWUtbGFiZWwnOiAn5pyfJyxcblx0XHRcdCdjaXRlLXBtaWQtbGFiZWwnOiAnUE1JRCcsXG5cdFx0XHQnY2l0ZS1lZGl0b3ItbGFiZWwnOiAn57yW6L6RJyxcblx0XHRcdCdjaXRlLWVkaXRvcjEtZmlyc3QtbGFiZWwnOiAn57yW6L6R5ZCNJyxcblx0XHRcdCdjaXRlLWVkaXRvcjEtbGFzdC1sYWJlbCc6ICfnvJbovpHlp5MnLFxuXHRcdFx0J2NpdGUtZWRpdG9yMS1saW5rLWxhYmVsJzogJ+e8lui+keadoeebricsXG5cdFx0XHQnY2l0ZS1lZGl0b3ItZmlyc3QtbGFiZWwnOiAn57yW6L6R5ZCNJyxcblx0XHRcdCdjaXRlLWVkaXRvci1sYXN0LWxhYmVsJzogJ+e8lui+keWnkycsXG5cdFx0XHQnY2l0ZS1lZGl0b3ItbGluay1sYWJlbCc6ICfnvJbovpHmnaHnm64nLFxuXHRcdFx0J2NpdGUtcG1jLWxhYmVsJzogJ1BNQycsXG5cdFx0XHQnY2l0ZS1pZC1sYWJlbCc6ICdJRCcsXG5cdFx0XHQnY2l0ZS1sYXlzdW1tYXJ5LWxhYmVsJzogJ+eugOaYjuaRmOimgScsXG5cdFx0XHQnY2l0ZS1sYXlzb3VyY2UtbGFiZWwnOiAn566A5piO5pGY6KaB5p2l5rqQJyxcblx0XHRcdCdjaXRlLWxheWRhdGUtbGFiZWwnOiAn566A5piO5pGY6KaB5pel5pyfJyxcblx0XHRcdCdjaXRlLWNvbmZlcmVuY2UtbGFiZWwnOiAn5Lya6K6u5ZCN56ewJyxcblx0XHRcdCdjaXRlLWNvbmZlcmVuY2V1cmwtbGFiZWwnOiAn5Lya6K6u572R5Z2AJyxcblx0XHRcdCdjaXRlLWJvb2t0aXRsZS1sYWJlbCc6ICforrrmlofpm4YnLFxuXHRcdFx0J2NpdGUtZW5jeWNsb3BlZGlhLWxhYmVsJzogJ+eZvuenkeWFqOS5puWQjScsXG5cdFx0XHQnY2l0ZS1hdXRob3JsaW5rLXRvb2x0aXAnOiAn6Iul6K+l5L2c6ICF5pyJ5p2h55uu77yM5aGr5YaZ5p2h55uu5ZCN56ewJyxcblx0XHRcdCdjaXRlLWF0LXRvb2x0aXAnOiAn5YaF5a655Zyo5p2l5rqQ5Lit55qE5L2N572u77yI5b2T5oyJ6aG156CB5byV55So5LiN6YCC5b2T5pe277yJJyxcblx0XHRcdCdjaXRlLWFjY2Vzc2RhdGUtdG9vbHRpcCc6ICforr/pl67ov5nkuKrlvJXnlKjmnaXmupDml7bnmoTml6XmnJ8nLFxuXHRcdFx0J2NpdGUtaWQtdG9vbHRpcCc6ICflhbbku5bnmoTmlofnq6DnvJblj7cnLFxuXHRcdFx0J2NpdGUtc2FtZWNvbnRlbnQtZGVzYyc6ICfmo4Dmn6XlkKvmnInnm7jlkIzlhoXlrrnnmoTlpJrkuKrlj4LogIPmlofnjK4nLFxuXHRcdFx0J2NpdGUtc2FtZWNvbnRlbnQtZXJyb3InOiAn5aSa5Liq5Y+C6ICD5paH54yu5YyF5ZCr5pyJ55u45ZCM5YaF5a65Jyxcblx0XHRcdCdjaXRlLXJlcGVhdGVkLWRlc2MnOiAn5L2/55So55u45ZCM5ZCN5a2X55qE5aSa5Liq5Y+C6ICD5paH54yuJyxcblx0XHRcdCdjaXRlLXJlcGVhdGVkLWVycm9yJzogJ+WkmuS4quWPguiAg+aWh+eMruS9v+eUqOS6huebuOWQjOWQjeWtlycsXG5cdFx0XHQnY2l0ZS11bmRlZmluZWQtZGVzYyc6ICfmnKrlrprkuYnnmoTlj4LogIPmlofnjK4nLFxuXHRcdFx0J2NpdGUtdW5kZWZpbmVkLWVycm9yJzogJ+S4gOS4quW3suWRveWQjeeahOWPguiAg+aWh+eMruW3sue7j+S9v+eUqOS9huaYr+ayoeacieWumuS5iScsXG5cdFx0XHQnY2l0ZS13b3JrLXRvb2x0aXAnOiAn5YiK55m76K+l5L2c5ZOB55qE5Ye654mI54mp55qE5ZCN56ew44CC6K+35LiN6KaB5L2/55So5pac5L2TJyxcblx0XHRcdCdjaXRlLW5ld3NwYXBlci10b29sdGlwJzogJ+WIiueZu+ipsuaWsOiBnueahOWHuueJiOeJqeWQjeensCcsXG5cdFx0XHQnY2l0ZS1zZXJpZXMtdG9vbHRpcCc6ICflvZPkuabnsY3mmK/kuIDns7vliJflh7rniYjlk4HkuK3nmoTlhbbkuK3kuIDpg6jku73ml7bkvb/nlKgnLFxuXHRcdFx0J2NpdGUtdW5pZmllZC10b29sdGlwJzogJzE5ODDlubTku6PkuYvliY3kuK3lm73miYDkvb/nlKjnmoTkuabnsY3nvJblj7cnLFxuXHRcdFx0J2NpdGUtbGF5c3VtbWFyeS10b29sdGlwJzogJ+ivpeaWh+eMruebuOWFs+eahOaWsOmXu+aKpemBk+eahFVSTCcsXG5cdFx0XHQnY2l0ZS1sYXlzb3VyY2UtdG9vbHRpcCc6ICfor6XmlofnjK7nm7jlhbPnmoTmlrDpl7vmiqXpgZPnmoTlh7rlpIQnLFxuXHRcdH0pO1xuXHR9XG59O1xuXG5leHBvcnQge3JlZlRvb2xiYXJNZXNhZ2VzfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJ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aUI7TUFDakIseUJBQXlCO01BQ3pCLHdCQUF3QjtNQUN4QixzQkFBc0I7TUFDdEIseUJBQXlCO01BQ3pCLDRCQUE0QjtNQUM1Qix3QkFBd0I7TUFDeEIsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQixtQkFBbUI7TUFDbkIsMkJBQTJCO01BQzNCLG1CQUFtQjtNQUNuQix5QkFBeUI7TUFDekIsMEJBQTBCO01BQzFCLHNCQUFzQjtNQUN0Qix1QkFBdUI7TUFDdkIsdUJBQXVCO01BQ3ZCLHdCQUF3QjtNQUN4QixxQkFBcUI7TUFDckIsMEJBQTBCO01BQzFCLHVCQUF1QjtNQUN2Qix3QkFBd0I7TUFDeEIsMkJBQTJCO01BQzNCLDBCQUEwQjtJQUMzQixDQUFDO0VBQ0Y7QUFDRDs7Q054T0MsTUFBWTtBQUNaLFFBQU07SUFBQ0M7SUFBVUM7RUFBa0IsSUFBSXpVLEdBQUdzSSxPQUFPQyxJQUFJO0FBR3JELE1BQUksQ0FBQyxDQUFDLFFBQVEsUUFBUSxFQUFFNkosU0FBU29DLFFBQVEsS0FBS0MsdUJBQXVCLFlBQVk7QUFDaEY7RUFDRDtBQUVBLE1BQUksQ0FBQ3pVLEdBQUcwVSxLQUFLbFEsUUFBUStELElBQUksZ0JBQWdCLEdBQUc7QUFDM0M7RUFDRDtBQUVBLE1BQUkzRyxTQUFTK1MsY0FBYyxxQ0FBcUMsR0FBRztBQUNsRTtFQUNEO0FBR0FQLG9CQUFrQjtBQUVsQi9DLGlCQUFlO0FBQ2YsUUFBQSxHQUFLOVIsbUJBQUFxVixTQUFRLEVBQUVqTSxLQUFLdkgsV0FBVztBQUNoQyxHQUFHOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJyZXF1aXJlIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgImFwaSIsICJpbml0TXdBcGkiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAiYXJncyIsICJsZW5ndGgiLCAibXciLCAibWVzc2FnZSIsICJwYXJzZSIsICJwbGFpbiIsICJyZWZUb29sYmFyQ29uZmlnIiwgIkNpdGVUZW1wbGF0ZSIsICJ3aW5kb3ciLCAiQ2l0ZVRCIiwgIk9wdGlvbnMiLCAibW9udGhzIiwgIm1vZGFsIiwgImF1dG9wYXJzZSIsICJleHBhbmR0ZW1wbGF0ZXMiLCAiZmllbGQiLCAiaW5jcmVtZW50X2dyb3VwIiwgImluY3JlbWVudF9idXR0b24iLCAiYXV0b2ZpbGxwcm9wIiwgImF1dG9maWxsaWQiLCAidG9vbHRpcCIsICJpbml0IiwgInJlZlRvb2xiYXIyIiwgIiRib2R5IiwgIkRlZmF1bHRPcHRpb25zIiwgImdldE9wdGlvbiIsICJvcHQiLCAiVXNlck9wdGlvbnMiLCAiXyQkd2lkdGgyIiwgIiQiLCAiZG9jdW1lbnQiLCAiZmluZCIsICJ0cmlnZ2VyIiwgIiR0YXJnZXQiLCAidGVtbGlzdCIsICJ0IiwgIlRlbXBsYXRlcyIsICJPYmplY3QiLCAiaGFzT3duIiwgIl8kJHdpZHRoIiwgInRlbSIsICJzZm9ybSIsICJlc2NTdHIiLCAic2hvcnRmb3JtIiwgImFjdGlvbm9iaiIsICJ0eXBlIiwgIm1vZHVsZSIsICJjb25jYXQiLCAiZGlhbG9nb2JqIiwgInJlc2l6ZW1lIiwgInRpdGxlIiwgImlkIiwgImh0bWwiLCAiZ2V0SW5pdGlhbCIsICJkaWFsb2ciLCAid2lkdGgiLCAiTWF0aCIsICJyb3VuZCIsICJvcGVuIiwgImdldE9wZW5UZW1wbGF0ZSIsICJnZXRGb3JtIiwgIm9uIiwgImUiLCAicHJldmVudERlZmF1bHQiLCAicHJldlBhcnNlQ2xpY2siLCAiYnV0dG9ucyIsICJyZWYiLCAiZ2V0UmVmIiwgIndpa2lFZGl0b3IiLCAibW9kdWxlcyIsICJ0b29sYmFyIiwgImZuIiwgImRvQWN0aW9uIiwgImRhdGEiLCAib3B0aW9ucyIsICJwb3N0IiwgInNob3dIaWRlRXh0cmEiLCAidGVtcGxhdGUiLCAiZGl2IiwgInNob3ciLCAidGV4dCIsICJoaWRlIiwgInJlc2V0Rm9ybSIsICJsYWJlbCIsICJ0ZW1wbGF0ZW5hbWUiLCAiYWN0aW9uIiwgInJlZnNlY3Rpb24iLCAic2VjdGlvbnMiLCAiY2l0ZXMiLCAiZ3JvdXBzIiwgInRvb2xzIiwgImxpc3QiLCAibmFtZWRyZWZzIiwgIm5yZWZzIiwgImljb24iLCAic2VjdGlvbiIsICJncm91cCIsICJkZWZhdWx0ZGlhbG9ncyIsICJsb2FkUmVmcyIsICJyZWZuYW1lIiwgInZhbCIsICJnZXROYW1lZFJlZiIsICJvZmYiLCAidXRpbCIsICJhZGRDU1MiLCAibWFpblJlZkxpc3QiLCAicmVmc0xvYWRlZCIsICJpbm5lcm9ubHkiLCAiZm9yaW5zZXJ0IiwgImkiLCAiaiIsICJnIiwgInJlcyIsICJyZWZvYmoiLCAic2hvcnR0YWciLCAiU3RyaW5nIiwgInRyaW0iLCAiZ2V0UXVvdGVkU3RyaW5nIiwgInJlZmdyb3VwIiwgImNvbnRlbnQiLCAiaW5jcmVtZW50YWJsZXMiLCAiZmllbGRzIiwgImZpZWxkbmFtZSIsICJmaWVsZGlkIiwgInJlcGxhY2UiLCAidG9TdHJpbmciLCAiYmFzaWMiLCAiZXh0cmEiLCAicHVzaCIsICJnZXRQYWdlVGV4dCIsICJsb2FkUmVmc0ludGVybmFsIiwgInJlZnNyZWdleCIsICJleGVjIiwgInNldHVwTmFtZWRSZWZzIiwgImNhbGxiYWNrIiwgInBvc3RkYXRhIiwgImNvbmZpZyIsICJnZXQiLCAicHJvcCIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJ0aGVuIiwgInJlc3RleHQiLCAid2lraXRleHQiLCAid2dBcnRpY2xlSWQiLCAicnZwcm9wIiwgInBhZ2VpZHMiLCAicnZleHBhbmR0ZW1wbGF0ZXMiLCAicXVlcnkiLCAicGFnZXRleHQiLCAicGFnZXMiLCAicmV2aXNpb25zIiwgInNhZmVEZWNvZGVVUklDb21wb25lbnQiLCAicyIsICJkZWNvZGVVUklDb21wb25lbnQiLCAiaW5pdEF1dG9maWxsIiwgIl8kJGF0dHIiLCAiZWxlbWlkIiwgImF0dHIiLCAiYXV0b3R5cGUiLCAidXJsIiwgImVuY29kZVVSSUNvbXBvbmVudCIsICJjcmVhdGVFbGVtZW50IiwgInNldEF0dHJpYnV0ZSIsICJoZWFkIiwgImFwcGVuZCIsICJhdXRvRmlsbCIsICJjbCIsICJjb2F1dGhvcnMiLCAiYXV0aG9ycyIsICJfJCRlcSRhdHRyIiwgImNsYXNzZXMiLCAiZXEiLCAic3BsaXQiLCAicGF0dCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAiLCAibiIsICJkb25lIiwgImNsYXNzXyIsICJ2YWx1ZSIsICJlcnIiLCAiZiIsICJfJCRlcSRhdHRyMiIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJqb2luIiwgImRhdGUiLCAiRFQiLCAiRGF0ZSIsICJ0ZXN0IiwgImZvcm1hdERhdGUiLCAiam91cm5hbCIsICJ2b2x1bWUiLCAiaXNzdWUiLCAiZG9pIiwgInB1Ymxpc2hlciIsICJsb2NhdGlvbiIsICJlZGl0aW9uIiwgImlzYm4iLCAiaXNzbiIsICJsYW5ndWFnZSIsICJjaGFwdGVyIiwgImluY3JlbWVudEZpZWxkcyIsICJfJCRhdHRyMiIsICJjdXJyZW50cm93IiwgInBhcmVudHMiLCAicHJldiIsICJjc3MiLCAiZGV0YWNoIiwgImluY3JlbWVudHMiLCAidHJzIiwgIm1ha2VGb3JtSW5uZXIiLCAicmV2ZXJzZSIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJ0ciIsICJhZnRlciIsICJmaWxsQWNjZXNzZGF0ZSIsICJfJCRhdHRyMyIsICJkYXRlc3RyIiwgInVzZWRheSIsICJ1c2Vtb250aCIsICJ6bW9udGgiLCAibW9udGgiLCAiZ2V0VVRDTW9udGgiLCAiemRhdGUiLCAiZ2V0VVRDRGF0ZSIsICJnZXRVVENGdWxsWWVhciIsICJuYW1lcyIsICJzdHVmZiIsICJzZWxlY3QiLCAiYmVmb3JlIiwgInByZXZsYWJlbCIsICJwYXJzZWxhYmVsIiwgImxpbmsiLCAiaHJlZiIsICJtYXJnaW4iLCAiZGlzcGxheSIsICJjb2xvciIsICJuYW1lZFJlZlNlbGVjdENsaWNrIiwgIm5yZWZQYXJzZUNsaWNrIiwgImZpbGxOcmVmUHJldmlldyIsICJwYXJzZWQiLCAiY2hvaWNlIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgImxhc3RuYW1lZHJlZmNob2ljZSIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSIsICJmaWxsVGVtcGxhdGVQcmV2aWV3IiwgInNldHRpbmciLCAic3EiLCAiZHEiLCAiZml4U3RyIiwgInNsaWNlIiwgInRvVXBwZXJDYXNlIiwgInJhdyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJfdGVtcGxhdGVPYmplY3QyIiwgImRpYWxvZ3MiLCAiZGlzcGxheUVycm9ycyIsICJlcnJvcnMiLCAicmVtb3ZlIiwgInRhYmxlIiwgImJvcmRlciIsICJwYWRkaW5nIiwgInRyMSIsICJ0aDEiLCAidGgyIiwgImltIiwgImFkIiwgInRkIiwgImVycm9yIiwgInRkMSIsICJ0ZDIiLCAibXNnIiwgInJlZlRvb2xiYXJCYXNlIiwgIl93aW5kb3ciLCAiY29uc3RydWN0b3IiLCAiYmFzaWNmaWVsZHMiLCAiZXhwYW5kZWRmaWVsZHMiLCAiaW5jcnNldHVwIiwgImF1dG9maWxscyIsICJfaXRlcmF0b3I2IiwgImVudHJpZXMiLCAiX3N0ZXA2IiwgImZpZWxkb2JqIiwgImxhYmVsZmllbGQiLCAic2V0dXAiLCAiaW5jcnZhbCIsICJhdXRvZGF0ZUZpZWxkcyIsICJpbmNsdWRlcyIsICJpbmNydHlwZSIsICJpbnB1dCIsICJ0YWJpbmRleCIsICJzdHlsZSIsICJjbGFzc25hbWUiLCAiYWRkQ2xhc3MiLCAibmVlZHNldHVwIiwgImtleXMiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAiYXV0b2ZpbGwiLCAiaGlkZGVuIiwgIm1haW4iLCAiZm9ybTEiLCAiX2l0ZXJhdG9yOCIsICJfc3RlcDgiLCAiZm9ybTIiLCAiX2l0ZXJhdG9yOSIsICJfc3RlcDkiLCAiZm9ybTMiLCAiJHRyIiwgIiR0ZDEiLCAiJGxhYmVsMSIsICJpbnB1dDEiLCAidGQzIiwgImxhYmVsMiIsICJ0ZDQiLCAiaW5wdXQyIiwgImV4dHJhcyIsICJzcGFuMSIsICJzcGFuMiIsICJyZWZUb29sYmFyTWVzYWdlcyIsICJ3Z1VzZXJMYW5ndWFnZSIsICJtZXNzYWdlcyIsICJzZXQiLCAid2dBY3Rpb24iLCAid2dQYWdlQ29udGVudE1vZGVsIiwgInVzZXIiLCAicXVlcnlTZWxlY3RvciIsICJnZXRCb2R5Il0KfQo= diff --git a/dist/HideLongSummaries/HideLongSummaries.js b/dist/HideLongSummaries/HideLongSummaries.js index 2e26630a..2eae6702 100644 --- a/dist/HideLongSummaries/HideLongSummaries.js +++ b/dist/HideLongSummaries/HideLongSummaries.js @@ -26,9 +26,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -42,9 +42,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -56,9 +56,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -69,9 +69,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -82,9 +82,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -94,9 +94,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -108,9 +108,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -123,9 +123,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -139,9 +139,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -152,9 +152,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -169,9 +169,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -179,9 +179,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -192,9 +192,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -204,9 +204,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -217,9 +217,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -228,9 +228,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -243,18 +243,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -263,9 +263,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -290,9 +290,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -306,18 +306,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -333,9 +333,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -348,9 +348,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -362,9 +362,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -375,9 +375,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -393,17 +393,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -418,9 +418,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -428,18 +428,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -448,9 +448,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -460,9 +460,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -473,9 +473,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -487,9 +487,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -509,9 +509,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -537,9 +537,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -550,9 +550,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -564,9 +564,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -581,9 +581,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -606,9 +606,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -622,9 +622,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -636,9 +636,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -682,9 +682,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -698,9 +698,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -718,9 +718,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -735,9 +735,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -746,9 +746,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -759,17 +759,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -842,9 +842,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -897,9 +897,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -932,9 +932,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -945,9 +945,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -957,9 +957,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -971,9 +971,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -984,9 +984,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -995,9 +995,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1030,9 +1030,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1054,9 +1054,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1070,9 +1070,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1083,17 +1083,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1109,9 +1109,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1131,9 +1131,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1152,9 +1152,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1195,9 +1195,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1206,9 +1206,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1233,9 +1233,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1246,9 +1246,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -1398,4 +1398,4 @@ void (0, import_ext_gadget2.getBody)().then(function hideLongSummaries($body) { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgInNyYy9IaWRlTG9uZ1N1bW1hcmllcy9vcHRpb25zLmpzb24iLCAic3JjL0hpZGVMb25nU3VtbWFyaWVzL21vZHVsZXMvY29uc3RhbnQudHMiLCAic3JjL0hpZGVMb25nU3VtbWFyaWVzL0hpZGVMb25nU3VtbWFyaWVzLnRzIiwgInNyYy9IaWRlTG9uZ1N1bW1hcmllcy9tb2R1bGVzL2kxOG4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggPD0gMTIxIGFuZCBTYWZhcmkgPD0gMTUuNDsgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIntcblx0XCJtYXhMZW5ndGhcIjogMjU2XG59XG4iLCAiY29uc3QgQ0xBU1NfTkFNRTogc3RyaW5nID0gJ2dhZGdldC1oaWRlX2xvbmdfc3VtbWFyaWVzJztcbmNvbnN0IENMQVNTX05BTUVfTE9ORzogc3RyaW5nID0gYCR7Q0xBU1NfTkFNRX0tLWxvbmdgO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9SVDogc3RyaW5nID0gYCR7Q0xBU1NfTkFNRX0tLXNob3J0YDtcbmNvbnN0IENMQVNTX05BTUVfU1dJVENIOiBzdHJpbmcgPSBgJHtDTEFTU19OQU1FfS1zd2l0Y2hgO1xuXG5leHBvcnQge0NMQVNTX05BTUVfTE9ORywgQ0xBU1NfTkFNRV9TSE9SVCwgQ0xBU1NfTkFNRV9TV0lUQ0h9O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1lZGlhd2lraS9jbGFzcy1kb2MgKi9cbmltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtDTEFTU19OQU1FX0xPTkcsIENMQVNTX05BTUVfU0hPUlQsIENMQVNTX05BTUVfU1dJVENIfSBmcm9tICcuL21vZHVsZXMvY29uc3RhbnQnO1xuaW1wb3J0IHtnZXRCb2R5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuL21vZHVsZXMvaTE4bic7XG5cbnZvaWQgZ2V0Qm9keSgpLnRoZW4oZnVuY3Rpb24gaGlkZUxvbmdTdW1tYXJpZXMoJGJvZHk6IEpRdWVyeTxIVE1MQm9keUVsZW1lbnQ+KTogdm9pZCB7XG5cdGNvbnN0ICRzd2l0Y2hlczogSlF1ZXJ5W10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgJGJvZHkuZmluZCgnLmNvbW1lbnQnKSkge1xuXHRcdGlmICghZWxlbWVudC50ZXh0Q29udGVudCB8fCBlbGVtZW50LnRleHRDb250ZW50Lmxlbmd0aCA8PSBPUFRJT05TLm1heExlbmd0aCB8fCAhZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQkKGVsZW1lbnQpLmFkZENsYXNzKENMQVNTX05BTUVfTE9ORykuaGlkZSgpO1xuXG5cdFx0JHN3aXRjaGVzLnB1c2goXG5cdFx0XHQkKCc8YT4nKVxuXHRcdFx0XHQuYWRkQ2xhc3MoQ0xBU1NfTkFNRV9TV0lUQ0gpXG5cdFx0XHRcdC50ZXh0KGBbJHtnZXRNZXNzYWdlKCdFeHBhbmQnKX1dYClcblx0XHRcdFx0Lmluc2VydEFmdGVyKGVsZW1lbnQpXG5cdFx0KTtcblxuXHRcdCQoJzxzcGFuPicpXG5cdFx0XHQuYWRkQ2xhc3MoYGNvbW1lbnQgY29tbWVudC0td2l0aG91dC1wYXJlbnRoZXNlcyAke0NMQVNTX05BTUVfU0hPUlR9YClcblx0XHRcdC50ZXh0KFxuXHRcdFx0XHRgJHtlbGVtZW50LnRleHRDb250ZW50LnNsaWNlKDAsIE1hdGgubWF4KDAsIE9QVElPTlMubWF4TGVuZ3RoICsgMSkpfS4uLiR7ZWxlbWVudC50ZXh0Q29udGVudC5zbGljZSgtMSl9YFxuXHRcdFx0KVxuXHRcdFx0Lmluc2VydEFmdGVyKGVsZW1lbnQpO1xuXHR9XG5cblx0Zm9yIChjb25zdCAkc3dpdGNoIG9mICRzd2l0Y2hlcykge1xuXHRcdCRzd2l0Y2gub24oJ2NsaWNrJywgKGV2ZW50OiBKUXVlcnkuQ2xpY2tFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgcGFyZW50RWxlbWVudCA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG5cdFx0XHRjb25zdCAkcGFyZW50RWxlbWVudDogSlF1ZXJ5ID0gJChwYXJlbnRFbGVtZW50KTtcblx0XHRcdGNvbnN0ICRsb25nOiBKUXVlcnkgPSAkcGFyZW50RWxlbWVudC5maW5kKGAuJHtDTEFTU19OQU1FX0xPTkd9YCk7XG5cdFx0XHRjb25zdCAkc2hvcnQ6IEpRdWVyeSA9ICRwYXJlbnRFbGVtZW50LmZpbmQoYC4ke0NMQVNTX05BTUVfU0hPUlR9YCk7XG5cblx0XHRcdCRzd2l0Y2gudGV4dCgkbG9uZy5pcygnOnZpc2libGUnKSA/IGBbJHtnZXRNZXNzYWdlKCdFeHBhbmQnKX1dYCA6IGBbJHtnZXRNZXNzYWdlKCdDb2xsYXBzZScpfV1gKTtcblx0XHRcdCRsb25nLnRvZ2dsZSgpO1xuXHRcdFx0JHNob3J0LnRvZ2dsZSgpO1xuXHRcdH0pO1xuXHR9XG59KTtcbiIsICJpbXBvcnQge2xvY2FsaXplfSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXG5jb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0Q29sbGFwc2U6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnY29sbGFwc2UnLFxuXHRcdFx0amE6ICfmipjjgornlbPjgb8nLFxuXHRcdFx0J3poLWhhbnMnOiAn5oqY5Y+gJyxcblx0XHRcdCd6aC1oYW50JzogJ+aKmOeWiicsXG5cdFx0fSksXG5cdFx0RXhwYW5kOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ2V4cGFuZCcsXG5cdFx0XHRqYTogJ+WxlemWiycsXG5cdFx0XHQnemgtaGFucyc6ICflsZXlvIAnLFxuXHRcdFx0J3poLWhhbnQnOiAn5bGV6ZaLJyxcblx0XHR9KSxcblx0fTtcbn07XG5cbmNvbnN0IGkxOG5NZXNzYWdlcyA9IGdldEkxOG5NZXNzYWdlcygpO1xuXG5jb25zdCBnZXRNZXNzYWdlOiBHZXRNZXNzYWdlczx0eXBlb2YgaTE4bk1lc3NhZ2VzPiA9IChrZXkpID0+IHtcblx0cmV0dXJuIGkxOG5NZXNzYWdlc1trZXldIHx8IGtleTtcbn07XG5cbmV4cG9ydCB7Z2V0TWVzc2FnZX07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBR1osSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBRWxDLGFBQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxXQUFZO0FBQUUsZUFBTztBQUFBLE1BQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FB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RUFBQTtBQUNWRSxZQUFRQyxHQUFHLFNBQVVDLFdBQW1DO0FBQ3ZELFlBQU1qQixnQkFBaUJpQixNQUFNQyxjQUE4QmxCO0FBRTNELFlBQU1tQixpQkFBeUJsQixFQUFFRCxhQUFhO0FBQzlDLFlBQU1vQixRQUFnQkQsZUFBZTVCLEtBQUEsSUFBQXRCLE9BQVNELGVBQWUsQ0FBRTtBQUMvRCxZQUFNcUQsU0FBaUJGLGVBQWU1QixLQUFBLElBQUF0QixPQUFTQyxnQkFBZ0IsQ0FBRTtBQUVqRTZDLGNBQVFWLEtBQUtlLE1BQU1FLEdBQUcsVUFBVSxJQUFBLElBQUFyRCxPQUFRYSxXQUFXLFFBQVEsR0FBQyxHQUFBLElBQUEsSUFBQWIsT0FBVWEsV0FBVyxVQUFVLEdBQUMsR0FBQSxDQUFHO0FBQy9Gc0MsWUFBTUcsT0FBTztBQUNiRixhQUFPRSxPQUFPO0lBQ2YsQ0FBQztFQUNGO0FBQ0QsQ0FBQzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtYXhMZW5ndGgiLCAiQ0xBU1NfTkFNRSIsICJDTEFTU19OQU1FX0xPTkciLCAiY29uY2F0IiwgIkNMQVNTX05BTUVfU0hPUlQiLCAiQ0xBU1NfTkFNRV9TV0lUQ0giLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgInJlcXVpcmUiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiZ2V0STE4bk1lc3NhZ2VzIiwgIkNvbGxhcHNlIiwgImxvY2FsaXplIiwgImVuIiwgImphIiwgIkV4cGFuZCIsICJpMThuTWVzc2FnZXMiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAiZ2V0Qm9keSIsICJ0aGVuIiwgImhpZGVMb25nU3VtbWFyaWVzIiwgIiRib2R5IiwgIiRzd2l0Y2hlcyIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiZmluZCIsICJfc3RlcCIsICJzIiwgIm4iLCAiZG9uZSIsICJlbGVtZW50IiwgInZhbHVlIiwgInRleHRDb250ZW50IiwgImxlbmd0aCIsICJwYXJlbnRFbGVtZW50IiwgIiQiLCAiYWRkQ2xhc3MiLCAiaGlkZSIsICJwdXNoIiwgInRleHQiLCAiaW5zZXJ0QWZ0ZXIiLCAic2xpY2UiLCAiTWF0aCIsICJtYXgiLCAiZXJyIiwgImUiLCAiZiIsICJfaSIsICJfJHN3aXRjaGVzIiwgIiRzd2l0Y2giLCAib24iLCAiZXZlbnQiLCAiY3VycmVudFRhcmdldCIsICIkcGFyZW50RWxlbWVudCIsICIkbG9uZyIsICIkc2hvcnQiLCAiaXMiLCAidG9nZ2xlIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgInNyYy9IaWRlTG9uZ1N1bW1hcmllcy9vcHRpb25zLmpzb24iLCAic3JjL0hpZGVMb25nU3VtbWFyaWVzL21vZHVsZXMvY29uc3RhbnQudHMiLCAic3JjL0hpZGVMb25nU3VtbWFyaWVzL0hpZGVMb25nU3VtbWFyaWVzLnRzIiwgInNyYy9IaWRlTG9uZ1N1bW1hcmllcy9tb2R1bGVzL2kxOG4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggPD0gMTIxIGFuZCBTYWZhcmkgPD0gMTUuNDsgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIntcblx0XCJtYXhMZW5ndGhcIjogMjU2XG59XG4iLCAiY29uc3QgQ0xBU1NfTkFNRTogc3RyaW5nID0gJ2dhZGdldC1oaWRlX2xvbmdfc3VtbWFyaWVzJztcbmNvbnN0IENMQVNTX05BTUVfTE9ORzogc3RyaW5nID0gYCR7Q0xBU1NfTkFNRX0tLWxvbmdgO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9SVDogc3RyaW5nID0gYCR7Q0xBU1NfTkFNRX0tLXNob3J0YDtcbmNvbnN0IENMQVNTX05BTUVfU1dJVENIOiBzdHJpbmcgPSBgJHtDTEFTU19OQU1FfS1zd2l0Y2hgO1xuXG5leHBvcnQge0NMQVNTX05BTUVfTE9ORywgQ0xBU1NfTkFNRV9TSE9SVCwgQ0xBU1NfTkFNRV9TV0lUQ0h9O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1lZGlhd2lraS9jbGFzcy1kb2MgKi9cbmltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtDTEFTU19OQU1FX0xPTkcsIENMQVNTX05BTUVfU0hPUlQsIENMQVNTX05BTUVfU1dJVENIfSBmcm9tICcuL21vZHVsZXMvY29uc3RhbnQnO1xuaW1wb3J0IHtnZXRCb2R5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuL21vZHVsZXMvaTE4bic7XG5cbnZvaWQgZ2V0Qm9keSgpLnRoZW4oZnVuY3Rpb24gaGlkZUxvbmdTdW1tYXJpZXMoJGJvZHk6IEpRdWVyeTxIVE1MQm9keUVsZW1lbnQ+KTogdm9pZCB7XG5cdGNvbnN0ICRzd2l0Y2hlczogSlF1ZXJ5W10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgJGJvZHkuZmluZCgnLmNvbW1lbnQnKSkge1xuXHRcdGlmICghZWxlbWVudC50ZXh0Q29udGVudCB8fCBlbGVtZW50LnRleHRDb250ZW50Lmxlbmd0aCA8PSBPUFRJT05TLm1heExlbmd0aCB8fCAhZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQkKGVsZW1lbnQpLmFkZENsYXNzKENMQVNTX05BTUVfTE9ORykuaGlkZSgpO1xuXG5cdFx0JHN3aXRjaGVzLnB1c2goXG5cdFx0XHQkKCc8YT4nKVxuXHRcdFx0XHQuYWRkQ2xhc3MoQ0xBU1NfTkFNRV9TV0lUQ0gpXG5cdFx0XHRcdC50ZXh0KGBbJHtnZXRNZXNzYWdlKCdFeHBhbmQnKX1dYClcblx0XHRcdFx0Lmluc2VydEFmdGVyKGVsZW1lbnQpXG5cdFx0KTtcblxuXHRcdCQoJzxzcGFuPicpXG5cdFx0XHQuYWRkQ2xhc3MoYGNvbW1lbnQgY29tbWVudC0td2l0aG91dC1wYXJlbnRoZXNlcyAke0NMQVNTX05BTUVfU0hPUlR9YClcblx0XHRcdC50ZXh0KFxuXHRcdFx0XHRgJHtlbGVtZW50LnRleHRDb250ZW50LnNsaWNlKDAsIE1hdGgubWF4KDAsIE9QVElPTlMubWF4TGVuZ3RoICsgMSkpfS4uLiR7ZWxlbWVudC50ZXh0Q29udGVudC5zbGljZSgtMSl9YFxuXHRcdFx0KVxuXHRcdFx0Lmluc2VydEFmdGVyKGVsZW1lbnQpO1xuXHR9XG5cblx0Zm9yIChjb25zdCAkc3dpdGNoIG9mICRzd2l0Y2hlcykge1xuXHRcdCRzd2l0Y2gub24oJ2NsaWNrJywgKGV2ZW50OiBKUXVlcnkuQ2xpY2tFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgcGFyZW50RWxlbWVudCA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG5cdFx0XHRjb25zdCAkcGFyZW50RWxlbWVudDogSlF1ZXJ5ID0gJChwYXJlbnRFbGVtZW50KTtcblx0XHRcdGNvbnN0ICRsb25nOiBKUXVlcnkgPSAkcGFyZW50RWxlbWVudC5maW5kKGAuJHtDTEFTU19OQU1FX0xPTkd9YCk7XG5cdFx0XHRjb25zdCAkc2hvcnQ6IEpRdWVyeSA9ICRwYXJlbnRFbGVtZW50LmZpbmQoYC4ke0NMQVNTX05BTUVfU0hPUlR9YCk7XG5cblx0XHRcdCRzd2l0Y2gudGV4dCgkbG9uZy5pcygnOnZpc2libGUnKSA/IGBbJHtnZXRNZXNzYWdlKCdFeHBhbmQnKX1dYCA6IGBbJHtnZXRNZXNzYWdlKCdDb2xsYXBzZScpfV1gKTtcblx0XHRcdCRsb25nLnRvZ2dsZSgpO1xuXHRcdFx0JHNob3J0LnRvZ2dsZSgpO1xuXHRcdH0pO1xuXHR9XG59KTtcbiIsICJpbXBvcnQge2xvY2FsaXplfSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXG5jb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0Q29sbGFwc2U6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnY29sbGFwc2UnLFxuXHRcdFx0amE6ICfmipjjgornlbPjgb8nLFxuXHRcdFx0J3poLWhhbnMnOiAn5oqY5Y+gJyxcblx0XHRcdCd6aC1oYW50JzogJ+aKmOeWiicsXG5cdFx0fSksXG5cdFx0RXhwYW5kOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ2V4cGFuZCcsXG5cdFx0XHRqYTogJ+WxlemWiycsXG5cdFx0XHQnemgtaGFucyc6ICflsZXlvIAnLFxuXHRcdFx0J3poLWhhbnQnOiAn5bGV6ZaLJyxcblx0XHR9KSxcblx0fTtcbn07XG5cbmNvbnN0IGkxOG5NZXNzYWdlcyA9IGdldEkxOG5NZXNzYWdlcygpO1xuXG5jb25zdCBnZXRNZXNzYWdlOiBHZXRNZXNzYWdlczx0eXBlb2YgaTE4bk1lc3NhZ2VzPiA9IChrZXkpID0+IHtcblx0cmV0dXJuIGkxOG5NZXNzYWdlc1trZXldIHx8IGtleTtcbn07XG5cbmV4cG9ydCB7Z2V0TWVzc2FnZX07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBR1osSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBRWxDLGFBQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxXQUFZO0FBQUUsZUFBTztBQUFBLE1BQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FB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RUFBQTtBQUNWRSxZQUFRQyxHQUFHLFNBQVVDLFdBQW1DO0FBQ3ZELFlBQU1qQixnQkFBaUJpQixNQUFNQyxjQUE4QmxCO0FBRTNELFlBQU1tQixpQkFBeUJsQixFQUFFRCxhQUFhO0FBQzlDLFlBQU1vQixRQUFnQkQsZUFBZTVCLEtBQUEsSUFBQXRCLE9BQVNELGVBQWUsQ0FBRTtBQUMvRCxZQUFNcUQsU0FBaUJGLGVBQWU1QixLQUFBLElBQUF0QixPQUFTQyxnQkFBZ0IsQ0FBRTtBQUVqRTZDLGNBQVFWLEtBQUtlLE1BQU1FLEdBQUcsVUFBVSxJQUFBLElBQUFyRCxPQUFRYSxXQUFXLFFBQVEsR0FBQyxHQUFBLElBQUEsSUFBQWIsT0FBVWEsV0FBVyxVQUFVLEdBQUMsR0FBQSxDQUFHO0FBQy9Gc0MsWUFBTUcsT0FBTztBQUNiRixhQUFPRSxPQUFPO0lBQ2YsQ0FBQztFQUNGO0FBQ0QsQ0FBQzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtYXhMZW5ndGgiLCAiQ0xBU1NfTkFNRSIsICJDTEFTU19OQU1FX0xPTkciLCAiY29uY2F0IiwgIkNMQVNTX05BTUVfU0hPUlQiLCAiQ0xBU1NfTkFNRV9TV0lUQ0giLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgInJlcXVpcmUiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiZ2V0STE4bk1lc3NhZ2VzIiwgIkNvbGxhcHNlIiwgImxvY2FsaXplIiwgImVuIiwgImphIiwgIkV4cGFuZCIsICJpMThuTWVzc2FnZXMiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAiZ2V0Qm9keSIsICJ0aGVuIiwgImhpZGVMb25nU3VtbWFyaWVzIiwgIiRib2R5IiwgIiRzd2l0Y2hlcyIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiZmluZCIsICJfc3RlcCIsICJzIiwgIm4iLCAiZG9uZSIsICJlbGVtZW50IiwgInZhbHVlIiwgInRleHRDb250ZW50IiwgImxlbmd0aCIsICJwYXJlbnRFbGVtZW50IiwgIiQiLCAiYWRkQ2xhc3MiLCAiaGlkZSIsICJwdXNoIiwgInRleHQiLCAiaW5zZXJ0QWZ0ZXIiLCAic2xpY2UiLCAiTWF0aCIsICJtYXgiLCAiZXJyIiwgImUiLCAiZiIsICJfaSIsICJfJHN3aXRjaGVzIiwgIiRzd2l0Y2giLCAib24iLCAiZXZlbnQiLCAiY3VycmVudFRhcmdldCIsICIkcGFyZW50RWxlbWVudCIsICIkbG9uZyIsICIkc2hvcnQiLCAiaXMiLCAidG9nZ2xlIl0KfQo= diff --git a/dist/MarkRights/MarkRights.js b/dist/MarkRights/MarkRights.js index 905aa3c1..8be3dedb 100644 --- a/dist/MarkRights/MarkRights.js +++ b/dist/MarkRights/MarkRights.js @@ -27,9 +27,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -43,9 +43,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -57,9 +57,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -70,9 +70,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -83,9 +83,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -95,9 +95,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -109,9 +109,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -124,9 +124,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -140,9 +140,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -153,9 +153,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -170,9 +170,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -180,9 +180,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -193,9 +193,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -205,9 +205,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -218,9 +218,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -229,9 +229,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -244,18 +244,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -264,9 +264,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -291,9 +291,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -307,18 +307,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -334,9 +334,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -349,9 +349,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -363,9 +363,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -376,9 +376,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -394,17 +394,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -419,9 +419,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -429,18 +429,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -449,9 +449,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -461,9 +461,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -474,9 +474,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -488,9 +488,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -510,9 +510,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -538,9 +538,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -551,9 +551,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -565,9 +565,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -582,9 +582,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -607,9 +607,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -623,9 +623,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -637,9 +637,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -683,9 +683,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -699,9 +699,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -719,9 +719,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -736,9 +736,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -747,9 +747,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -760,17 +760,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -843,9 +843,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -898,9 +898,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -933,9 +933,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -946,9 +946,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -958,9 +958,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -972,9 +972,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -985,9 +985,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -996,9 +996,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1031,9 +1031,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1055,9 +1055,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1071,9 +1071,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1084,17 +1084,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1110,9 +1110,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1132,9 +1132,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1153,9 +1153,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1196,9 +1196,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js var require_set_helpers = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var SetPrototype = Set.prototype; @@ -1213,9 +1213,9 @@ var require_set_helpers = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js var require_a_set = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js"(exports, module2) { "use strict"; var has = require_set_helpers().has; module2.exports = function(it) { @@ -1225,9 +1225,9 @@ var require_a_set = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js var require_iterate_simple = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { "use strict"; var call = require_function_call(); module2.exports = function(record, fn, ITERATOR_INSTEAD_OF_RECORD) { @@ -1242,9 +1242,9 @@ var require_iterate_simple = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js var require_set_iterate = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var iterateSimple = require_iterate_simple(); @@ -1260,9 +1260,9 @@ var require_set_iterate = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js var require_set_clone = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js"(exports, module2) { "use strict"; var SetHelpers = require_set_helpers(); var iterate = require_set_iterate(); @@ -1278,9 +1278,9 @@ var require_set_clone = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js var require_function_uncurry_this_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var aCallable = require_a_callable(); @@ -1293,9 +1293,9 @@ var require_function_uncurry_this_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js var require_set_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js"(exports, module2) { "use strict"; var uncurryThisAccessor = require_function_uncurry_this_accessor(); var SetHelpers = require_set_helpers(); @@ -1305,9 +1305,9 @@ var require_set_size = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js var require_get_iterator_direct = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { "use strict"; module2.exports = function(obj) { return { @@ -1319,9 +1319,9 @@ var require_get_iterator_direct = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js var require_get_set_record = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var anObject = require_an_object(); @@ -1357,9 +1357,9 @@ var require_get_set_record = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js var require_set_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1385,9 +1385,9 @@ var require_set_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js var require_set_method_accept_set_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var createSetLike = function(size) { @@ -1422,9 +1422,9 @@ var require_set_method_accept_set_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js var require_es_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js"() { "use strict"; var $2 = require_export(); var difference = require_set_difference(); @@ -1435,17 +1435,9 @@ var require_es_set_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js -var require_esnext_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js"() { - "use strict"; - require_es_set_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js var require_set_intersection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1474,9 +1466,9 @@ var require_set_intersection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js var require_es_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js"() { "use strict"; var $2 = require_export(); var fails = require_fails(); @@ -1491,17 +1483,9 @@ var require_es_set_intersection_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js -var require_esnext_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js"() { - "use strict"; - require_es_set_intersection_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js var require_iterator_close = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js"(exports, module2) { "use strict"; var call = require_function_call(); var anObject = require_an_object(); @@ -1528,9 +1512,9 @@ var require_iterator_close = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js var require_set_is_disjoint_from = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1553,9 +1537,9 @@ var require_set_is_disjoint_from = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js var require_es_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { "use strict"; var $2 = require_export(); var isDisjointFrom = require_set_is_disjoint_from(); @@ -1566,17 +1550,9 @@ var require_es_set_is_disjoint_from_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js -var require_esnext_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"() { - "use strict"; - require_es_set_is_disjoint_from_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js var require_set_is_subset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var size = require_set_size(); @@ -1593,9 +1569,9 @@ var require_set_is_subset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js var require_es_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSubsetOf = require_set_is_subset_of(); @@ -1606,17 +1582,9 @@ var require_es_set_is_subset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js -var require_esnext_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"() { - "use strict"; - require_es_set_is_subset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js var require_set_is_superset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1636,9 +1604,9 @@ var require_set_is_superset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js var require_es_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSupersetOf = require_set_is_superset_of(); @@ -1649,17 +1617,9 @@ var require_es_set_is_superset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js -var require_esnext_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"() { - "use strict"; - require_es_set_is_superset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js var require_set_symmetric_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1682,9 +1642,9 @@ var require_set_symmetric_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js var require_es_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { "use strict"; var $2 = require_export(); var symmetricDifference = require_set_symmetric_difference(); @@ -1695,17 +1655,9 @@ var require_es_set_symmetric_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js -var require_esnext_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"() { - "use strict"; - require_es_set_symmetric_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js var require_set_union = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var add = require_set_helpers().add; @@ -1724,9 +1676,9 @@ var require_set_union = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js var require_es_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js"() { "use strict"; var $2 = require_export(); var union = require_set_union(); @@ -1737,22 +1689,14 @@ var require_es_set_union_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js -var require_esnext_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js"() { - "use strict"; - require_es_set_union_v2(); - } -}); - // dist/MarkRights/MarkRights.js -require_esnext_set_difference_v2(); -require_esnext_set_intersection_v2(); -require_esnext_set_is_disjoint_from_v2(); -require_esnext_set_is_subset_of_v2(); -require_esnext_set_is_superset_of_v2(); -require_esnext_set_symmetric_difference_v2(); -require_esnext_set_union_v2(); +require_es_set_difference_v2(); +require_es_set_intersection_v2(); +require_es_set_is_disjoint_from_v2(); +require_es_set_is_subset_of_v2(); +require_es_set_is_superset_of_v2(); +require_es_set_symmetric_difference_v2(); +require_es_set_union_v2(); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { @@ -2103,4 +2047,4 @@ mw.hook("wikipage.content").add(function markRights($content) { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanMiLCAic3JjL01hcmtSaWdodHMvbW9kdWxlcy9pMThuLnRzIiwgInNyYy9NYXJrUmlnaHRzL21vZHVsZXMvY29yZS50cyIsICJzcmMvTWFya1JpZ2h0cy9NYXJrUmlnaHRzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxuICBTZXQ6IFNldCxcbiAgYWRkOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuYWRkKSxcbiAgaGFzOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGVbJ2RlbGV0ZSddKSxcbiAgcHJvdG86IFNldFByb3RvdHlwZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xuXG4vLyBQZXJmb3JtID8gUmVxdWlyZUludGVybmFsU2xvdChNLCBbW1NldERhdGFdXSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGhhcyhpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWNvcmQsIGZuLCBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCkge1xuICB2YXIgaXRlcmF0b3IgPSBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCA/IHJlY29yZCA6IHJlY29yZC5pdGVyYXRvcjtcbiAgdmFyIG5leHQgPSByZWNvcmQubmV4dDtcbiAgdmFyIHN0ZXAsIHJlc3VsdDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gZm4oc3RlcC52YWx1ZSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgU2V0UHJvdG90eXBlID0gU2V0SGVscGVycy5wcm90bztcbnZhciBmb3JFYWNoID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmZvckVhY2gpO1xudmFyIGtleXMgPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUua2V5cyk7XG52YXIgbmV4dCA9IGtleXMobmV3IFNldCgpKS5uZXh0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQsIGZuLCBpbnRlcnJ1cHRpYmxlKSB7XG4gIHJldHVybiBpbnRlcnJ1cHRpYmxlID8gaXRlcmF0ZVNpbXBsZSh7IGl0ZXJhdG9yOiBrZXlzKHNldCksIG5leHQ6IG5leHQgfSwgZm4pIDogZm9yRWFjaChzZXQsIGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGl0ZXJhdGUoc2V0LCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihTZXRIZWxwZXJzLnByb3RvLCAnc2l6ZScsICdnZXQnKSB8fCBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbnZhciBJTlZBTElEX1NJWkUgPSAnSW52YWxpZCBzaXplJztcbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBtYXggPSBNYXRoLm1heDtcblxudmFyIFNldFJlY29yZCA9IGZ1bmN0aW9uIChzZXQsIGludFNpemUpIHtcbiAgdGhpcy5zZXQgPSBzZXQ7XG4gIHRoaXMuc2l6ZSA9IG1heChpbnRTaXplLCAwKTtcbiAgdGhpcy5oYXMgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gIHRoaXMua2V5cyA9IGFDYWxsYWJsZShzZXQua2V5cyk7XG59O1xuXG5TZXRSZWNvcmQucHJvdG90eXBlID0ge1xuICBnZXRJdGVyYXRvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJdGVyYXRvckRpcmVjdChhbk9iamVjdChjYWxsKHRoaXMua2V5cywgdGhpcy5zZXQpKSk7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gY2FsbCh0aGlzLmhhcywgdGhpcy5zZXQsIGl0KTtcbiAgfVxufTtcblxuLy8gYEdldFNldFJlY29yZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc2V0LW1ldGhvZHMvI3NlYy1nZXRzZXRyZWNvcmRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICBhbk9iamVjdChvYmopO1xuICB2YXIgbnVtU2l6ZSA9ICtvYmouc2l6ZTtcbiAgLy8gTk9URTogSWYgc2l6ZSBpcyB1bmRlZmluZWQsIHRoZW4gbnVtU2l6ZSB3aWxsIGJlIE5hTlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtU2l6ZSAhPT0gbnVtU2l6ZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgdmFyIGludFNpemUgPSB0b0ludGVnZXJPckluZmluaXR5KG51bVNpemUpO1xuICBpZiAoaW50U2l6ZSA8IDApIHRocm93IG5ldyAkUmFuZ2VFcnJvcihJTlZBTElEX1NJWkUpO1xuICByZXR1cm4gbmV3IFNldFJlY29yZChvYmosIGludFNpemUpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgZWxzZSBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxudmFyIGNyZWF0ZVNldExpa2UgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIHNpemU6IHNpemUsXG4gICAgaGFzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIFNldCA9IGdldEJ1aWx0SW4oJ1NldCcpO1xuICB0cnkge1xuICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKDApKTtcbiAgICB0cnkge1xuICAgICAgLy8gbGF0ZSBzcGVjIGNoYW5nZSwgZWFybHkgV2ViS2l0IH4gU2FmYXJpIDE3LjAgYmV0YSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwYXNzIGl0XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kcy9wdWxsLzg4XG4gICAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgtMSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yMikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2RpZmZlcmVuY2UnKSB9LCB7XG4gIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5kaWZmZXJlbmNlLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG5cbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSB7XG4gICAgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGhhcyhPLCBlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJzZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbnZhciBJTkNPUlJFQ1QgPSAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaW50ZXJzZWN0aW9uJykgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgZXMvbm8tc2V0IC0tIHRlc3RpbmdcbiAgcmV0dXJuIFN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsIDIsIDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywgMl0pKSkpICE9PSAnMywyJztcbn0pO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1QgfSwge1xuICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmludGVyc2VjdGlvbi52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEaXNqb2ludEZyb20ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSByZXR1cm4gaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzRGlzam9pbnRGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc0Rpc2pvaW50RnJvbScpIH0sIHtcbiAgaXNEaXNqb2ludEZyb206IGlzRGlzam9pbnRGcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3Vic2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdWJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXRlcmF0ZShPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghb3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1YnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdWJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdWJzZXRPZicpIH0sIHtcbiAgaXNTdWJzZXRPZjogaXNTdWJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmlzLXN1YnNldC1vZi52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdXBlcnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPCBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1cGVyc2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdXBlcnNldE9mJykgfSwge1xuICBpc1N1cGVyc2V0T2Y6IGlzU3VwZXJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICAgIGVsc2UgYWRkKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzeW1tZXRyaWNEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdzeW1tZXRyaWNEaWZmZXJlbmNlJykgfSwge1xuICBzeW1tZXRyaWNEaWZmZXJlbmNlOiBzeW1tZXRyaWNEaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGFkZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmFkZDtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuaW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC11bmlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgndW5pb24nKSB9LCB7XG4gIHVuaW9uOiB1bmlvblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyJyk7XG4iLCAiaW1wb3J0IHtsb2NhbGl6ZX0gZnJvbSAnZXh0LmdhZGdldC5pMThuJztcblxuY29uc3QgZ2V0STE4bk1lc3NhZ2VzID0gKCkgPT4ge1xuXHRyZXR1cm4ge1xuXHRcdHJlc3BvbnNpYmxlb3BlcmF0b3I6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnUmVzcG9uc2libGVPcGVyYXRvcicsXG5cdFx0XHQnemgtaGFucyc6ICfotKPku7vov5DokKUnLFxuXHRcdFx0J3poLWhhbnQnOiAn6LKs5Lu76YGL54efJyxcblx0XHR9KSxcblx0XHRzdGV3YXJkOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1N0ZXdhcmQnLFxuXHRcdFx0J3poLWhhbnMnOiAn5qGj5qGI55CG5LqL5ZGYJyxcblx0XHRcdCd6aC1oYW50JzogJ+aqlOahiOeQhuS6i+WToScsXG5cdFx0fSksXG5cdFx0Y2hlY2t1c2VyOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0NoZWNrVXNlcicsXG5cdFx0XHQnemgtaGFucyc6ICfnlKjmiLfmn6XmoLgnLFxuXHRcdFx0J3poLWhhbnQnOiAn55So5oi25p+l5qC4Jyxcblx0XHR9KSxcblx0XHRzdXBwcmVzczogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdPdmVyc2lnaHRlcicsXG5cdFx0XHQnemgtaGFucyc6ICfnm5HnnaPlkZgnLFxuXHRcdFx0J3poLWhhbnQnOiAn55uj552j5ZOhJyxcblx0XHR9KSxcblx0XHRzeXNvcDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdTeXNPcCcsXG5cdFx0XHQnemgtaGFucyc6ICfnrqHnkIblkZgnLFxuXHRcdFx0J3poLWhhbnQnOiAn566h55CG5ZOhJyxcblx0XHR9KSxcblx0XHQnaW50ZXJmYWNlLWFkbWluJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdJbnRlcmZhY2UgQWRtaW5pc3RyYXRvcicsXG5cdFx0XHQnemgtaGFucyc6ICfnlYzpnaLnrqHnkIblkZgnLFxuXHRcdFx0J3poLWhhbnQnOiAn5LuL6Z2i566h55CG5ZOhJyxcblx0XHR9KSxcblx0XHR0ZW1wbGF0ZWVkaXRvcjogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdUZW1wbGF0ZSBFZGl0b3InLFxuXHRcdFx0J3poLWhhbnMnOiAn5qih5p2/57yW6L6R5ZGYJyxcblx0XHRcdCd6aC1oYW50JzogJ+aooeadv+e3qOi8r+WToScsXG5cdFx0fSksXG5cdFx0aW1wb3J0ZXI6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnSW1wb3J0ZXInLFxuXHRcdFx0J3poLWhhbnMnOiAn5a+85YWl6ICFJyxcblx0XHRcdCd6aC1oYW50JzogJ+WMr+WFpeiAhScsXG5cdFx0fSksXG5cdFx0cGF0cm9sbGVyOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1BhdHJvbGxlcicsXG5cdFx0XHQnemgtaGFucyc6ICflt6Hmn6XlkZgnLFxuXHRcdFx0J3poLWhhbnQnOiAn5beh5p+l5ZOhJyxcblx0XHR9KSxcblx0XHRhdXRvcGF0cm9sbGVkOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0V4ZW1wdGVkIGZyb20gcGFnZSBwYXRyb2wnLFxuXHRcdFx0J3poLWhhbnMnOiAn5LyY6LSo57yW6L6R6ICFJyxcblx0XHRcdCd6aC1oYW50JzogJ+WEquizque3qOi8r+iAhScsXG5cdFx0fSksXG5cdFx0ZXZlbnRzcG9uc29yOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0V2ZW50IFNwb25zb3InLFxuXHRcdFx0J3poLWhhbnMnOiAn5rS75Yqo57uE57uH6ICFJyxcblx0XHRcdCd6aC1oYW50JzogJ+a0u+WLlee1hOe5lOiAhScsXG5cdFx0fSksXG5cdFx0J21hc3NtZXNzYWdlLXNlbmRlcic6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTWFzc01lc3NhZ2Ugc2VuZGVyJyxcblx0XHRcdCd6aC1oYW5zJzogJ+Wkp+mHj+a2iOaBr+WPkemAgeiAhScsXG5cdFx0XHQnemgtaGFudCc6ICflpKfph4/oqIrmga/lgrPpgIHogIUnLFxuXHRcdH0pLFxuXHRcdGNvbmZpcm1lZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdDb25maXJtZWQgdXNlcicsXG5cdFx0XHQnemgtaGFucyc6ICfnoa7orqTnlKjmiLcnLFxuXHRcdFx0J3poLWhhbnQnOiAn56K66KqN55So5oi2Jyxcblx0XHR9KSxcblx0XHRhdXRvY29uZmlybWVkOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0F1dG8tY29uZmlybWVkIHVzZXInLFxuXHRcdFx0J3poLWhhbnMnOiAn6Ieq5Yqo56Gu6K6k55So5oi3Jyxcblx0XHRcdCd6aC1oYW50JzogJ+iHquWLleeiuuiqjeeUqOaIticsXG5cdFx0fSksXG5cdFx0Ym90OiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0JvdCcsXG5cdFx0XHQnemgtaGFucyc6ICfmnLrlmajkuronLFxuXHRcdFx0J3poLWhhbnQnOiAn5qmf5qKw5Lq6Jyxcblx0XHR9KSxcblx0XHRmbG9vZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdGbG9vZGVyJyxcblx0XHRcdCd6aC1oYW5zJzogJ+acuuWZqOeUqOaItycsXG5cdFx0XHQnemgtaGFudCc6ICfmqZ/morDnlKjmiLYnLFxuXHRcdH0pLFxuXHRcdCdybnJzdmVyaWZ5LWV4ZW1wdCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRXhlbXB0ZWQgZnJvbSByZWFsLW5hbWUgdmVyaWZpY2F0aW9uJyxcblx0XHRcdCd6aC1oYW5zJzogJ+WunuWQjeWItumqjOivgeixgeWFjScsXG5cdFx0XHQnemgtaGFudCc6ICflr6blkI3liLbpqZforYnosYHlhY0nLFxuXHRcdH0pLFxuXHRcdCdpcGJsb2NrLWV4ZW1wdCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRXhlbXB0ZWQgZnJvbSBJUCBibG9ja3MnLFxuXHRcdFx0J3poLWhhbnMnOiAnSVDlsIHnpoHosYHlhY0nLFxuXHRcdFx0J3poLWhhbnQnOiAnSVDlsIHpjpbosYHlhY0nLFxuXHRcdH0pLFxuXHR9O1xufTtcblxuY29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cbmNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICJpbXBvcnQgdHlwZSB7VXNlclJpZ2h0c30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4vaTE4bic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgZ3JvdXBzOiBSZWNvcmQ8VXNlclJpZ2h0cywgc3RyaW5nW10+ID0ge1xuXHQvLyDlhajnq5nnrqHnkIblnovmnYPpmZBcblx0cmVzcG9uc2libGVvcGVyYXRvcjogW10sXG5cdHN0ZXdhcmQ6IFtdLFxuXHRjaGVja3VzZXI6IFtdLFxuXHRzdXBwcmVzczogW10sXG5cdHN5c29wOiBbXSxcblx0J2ludGVyZmFjZS1hZG1pbic6IFtdLFxuXHR0ZW1wbGF0ZWVkaXRvcjogW10sXG5cdGltcG9ydGVyOiBbXSxcblx0Ly8g6aG16Z2i566h55CG5Z6L5p2D6ZmQXG5cdHBhdHJvbGxlcjogW10sXG5cdGF1dG9wYXRyb2xsZWQ6IFtdLFxuXHQvLyDlpKfph4/mk43kvZzlnovmnYPpmZBcblx0ZXZlbnRzcG9uc29yOiBbXSxcblx0J21hc3NtZXNzYWdlLXNlbmRlcic6IFtdLFxuXHQvLyDnoa7orqTmnYPpmZBcblx0Y29uZmlybWVkOiBbXSxcblx0YXV0b2NvbmZpcm1lZDogW10sXG5cdC8vIOacuuWZqOadg+mZkFxuXHRib3Q6IFtdLFxuXHRmbG9vZDogW10sXG5cdC8vIOixgeWFjVxuXHQnaXBibG9jay1leGVtcHQnOiBbXSxcblx0J3JucnN2ZXJpZnktZXhlbXB0JzogW10sXG59O1xuXG5leHBvcnQgY29uc3QgbWFya1VzZXJSaWdodHMgPSBhc3luYyAoJGNvbnRlbnQ6IEpRdWVyeSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRjb25zdCAkdXNlckxpbmtzOiBKUXVlcnkgPSAkY29udGVudC5maW5kKCdhLm13LXVzZXJsaW5rOm5vdCgubXctYW5vbnVzZXJsaW5rKScpO1xuXHRsZXQgdXNlcnM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHF1ZXVlOiBBcnJheTx0eXBlb2YgdXNlcnM+ID0gW107XG5cdCR1c2VyTGlua3MuZWFjaCgoX2luZGV4OiBudW1iZXIsIHt0ZXh0Q29udGVudH06IHt0ZXh0Q29udGVudDogc3RyaW5nIHwgbnVsbH0pOiB2b2lkID0+IHtcblx0XHRjb25zdCB1c2VyTGlua1RleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRleHRDb250ZW50Py50b1N0cmluZygpO1xuXHRcdGlmICh1c2VyTGlua1RleHQpIHtcblx0XHRcdHVzZXJzW3VzZXJzLmxlbmd0aF0gPSB1c2VyTGlua1RleHQ7IC8vIFJlcGxhY2UgYHVzZXJzLnB1c2godXNlckxpbmtUZXh0KWAgdG8gYXZvaWQgcG9seWZpbGxpbmcgY29yZS1qc1xuXHRcdH1cblx0XHR1c2VycyA9IFsuLi5uZXcgU2V0KHVzZXJzKV07XG5cdFx0aWYgKHVzZXJzLmxlbmd0aCA9PT0gNTApIHtcblx0XHRcdHF1ZXVlW3F1ZXVlLmxlbmd0aF0gPSB1c2VyczsgLy8gUmVwbGFjZSBgcXVldWUucHVzaCh1c2VycylgIHRvIGF2b2lkIHBvbHlmaWxsaW5nIGNvcmUtanNcblx0XHRcdHVzZXJzID0gW107XG5cdFx0fVxuXHR9KTtcblx0aWYgKHVzZXJzLmxlbmd0aCA+IDApIHtcblx0XHRxdWV1ZVtxdWV1ZS5sZW5ndGhdID0gdXNlcnM7IC8vIFJlcGxhY2UgYHF1ZXVlLnB1c2godXNlcnMpYCB0byBhdm9pZCBwb2x5ZmlsbGluZyBjb3JlLWpzXG5cdH1cblx0Y29uc3QgZ2V0VXNlcm5hbWUgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdGlmICghdXJsKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdGNvbnN0IHVzZXJuYW1lOiBzdHJpbmcgfCBudWxsID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd0aXRsZScsIHVybCk7XG5cdFx0Y29uc3QgZGVjb2RlID0gKHN0cmluZzogc3RyaW5nLCByZXBsYWNlOiAoX3N0cmluZzogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcblx0XHRcdFx0KCgpOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHJlcGxhY2Uoc3RyaW5nKSk7XG5cdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZShzdHJpbmcpLnJlcGxhY2UoLyUoPyFcXGQrKS9nLCAnJTI1Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSgpXG5cdFx0XHQpO1xuXHRcdH07XG5cdFx0aWYgKHVzZXJuYW1lKSB7XG5cdFx0XHRyZXR1cm4gZGVjb2RlKHVzZXJuYW1lLCAoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoJ1VzZXI6JywgJycpLnJlcGxhY2UoL18vZywgJyAnKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCB1c2VybmFtZU1hdGNoOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCA9IHVybC5tYXRjaCgvXFwvd2lraVxcL1VzZXI6KC4rPykkLyk7XG5cdFx0aWYgKHVzZXJuYW1lTWF0Y2g/LlsxXSkge1xuXHRcdFx0cmV0dXJuIGRlY29kZSh1c2VybmFtZU1hdGNoWzFdLCAoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL18vZywgJyAnKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cdGNvbnN0IGRvbmUgPSAoKTogdm9pZCA9PiB7XG5cdFx0JHVzZXJMaW5rcy5lYWNoKChfaW5kZXg6IG51bWJlciwgZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0ICRlbGVtZW50OiBKUXVlcnkgPSAkKGVsZW1lbnQpO1xuXHRcdFx0aWYgKCRlbGVtZW50LnBhcmVudHMoJ2xpJykuZmluZCgnLmdhZGdldHMtbWFya3JpZ2h0cycpLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB1c2VybmFtZTogc3RyaW5nID0gZ2V0VXNlcm5hbWUoJGVsZW1lbnQuYXR0cignaHJlZicpID8/ICcnKTtcblx0XHRcdGlmICghdXNlcm5hbWUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgJHN1cHM6IEpRdWVyeSA9ICQoJzxzcGFuPicpLmFkZENsYXNzKCdnYWRnZXRzLW1hcmtyaWdodHMnKTtcblx0XHRcdGZvciAoY29uc3QgZ3JvdXAgaW4gZ3JvdXBzKSB7XG5cdFx0XHRcdGlmICghT2JqZWN0Lmhhc093bihncm91cHMsIGdyb3VwKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGdyb3Vwc0dyb3VwOiBzdHJpbmdbXSA9IGdyb3Vwc1tncm91cCBhcyBuZXZlcl0gPz8gW107XG5cdFx0XHRcdGlmICghZ3JvdXBzR3JvdXAuaW5jbHVkZXModXNlcm5hbWUpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY2xhc3NOYW1lOiBzdHJpbmcgPSBgZ2FkZ2V0cy1tYXJrcmlnaHRzX18ke2dyb3VwfWA7XG5cdFx0XHRcdGlmICgkc3Vwcy5maW5kKCdzdXAnKS5oYXNDbGFzcyhjbGFzc05hbWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRzdXBzLmFwcGVuZChcblx0XHRcdFx0XHQvLyBUaGUgZm9sbG93aW5nIGNsYXNzZXMgYXJlIHVzZWQgaGVyZTpcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19yZXNwb25zaWJsZW9wZXJhdG9yXG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fc3Rld2FyZFxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX2NoZWNrdXNlclxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX3N1cHByZXNzXG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fc3lzb3Bcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19pbnRlcmZhY2UtYWRtaW5cblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX190ZW1wbGF0ZWVkaXRvclxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX2ltcG9ydGVyXG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fcGF0cm9sbGVyXG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fYXV0b3BhdHJvbGxlZFxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX2V2ZW50c3BvbnNvclxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX21hc3NtZXNzYWdlLXNlbmRlclxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX2NvbmZpcm1lZFxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX2F1dG9jb25maXJtZWRcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19ib3Rcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19mbG9vZFxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX2lwYmxvY2stZXhlbXB0XG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fcm5yc3ZlcmlmeS1leGVtcHRcblx0XHRcdFx0XHQkKCc8c3VwPicpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoY2xhc3NOYW1lKVxuXHRcdFx0XHRcdFx0LmF0dHIoe1xuXHRcdFx0XHRcdFx0XHRhbHQ6IGdldE1lc3NhZ2UoZ3JvdXAgYXMgVXNlclJpZ2h0cyksXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBnZXRNZXNzYWdlKGdyb3VwIGFzIFVzZXJSaWdodHMpLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdCRlbGVtZW50LmFmdGVyKCRzdXBzKTtcblx0XHR9KTtcblx0fTtcblx0Y29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoJ01hcmtSaWdodHMvMS4xJyk7XG5cdGZvciAoY29uc3QgdXN1c2VycyBvZiBxdWV1ZSkge1xuXHRcdGNvbnN0IHBhcmFtczogQXBpUXVlcnlVc2Vyc1BhcmFtcyA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0bGlzdDogJ3VzZXJzJyxcblx0XHRcdHVzcHJvcDogJ2dyb3VwcycsXG5cdFx0XHR1c3VzZXJzLFxuXHRcdH07XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZ2V0KHBhcmFtcyk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuXHRcdGNvbnN0IF91c2Vyczoge2dyb3Vwczogc3RyaW5nOyBuYW1lOiBzdHJpbmd9W10gPSByZXNwb25zZVsncXVlcnknXT8udXNlcnMgPz8gW107XG5cdFx0Zm9yIChjb25zdCB1c2VyIG9mIF91c2Vycykge1xuXHRcdFx0aWYgKCF1c2VyIHx8ICF1c2VyLmdyb3Vwcykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgZ3JvdXAgaW4gZ3JvdXBzKSB7XG5cdFx0XHRcdGlmICghT2JqZWN0Lmhhc093bihncm91cHMsIGdyb3VwKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGdyb3Vwc0dyb3VwOiBzdHJpbmdbXSA9IGdyb3Vwc1tncm91cCBhcyBuZXZlcl0gYXMgc3RyaW5nW107XG5cdFx0XHRcdGlmICh1c2VyLmdyb3Vwcy5pbmNsdWRlcyhncm91cCkpIHtcblx0XHRcdFx0XHRncm91cHNHcm91cFtncm91cHNHcm91cC5sZW5ndGhdID0gdXNlci5uYW1lOyAvLyBSZXBsYWNlIGBncm91cHNHcm91cC5wdXNoKHVzZXIubmFtZSlgIHRvIGF2b2lkIHBvbHlmaWxsaW5nIGNvcmUtanNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb25lKCk7XG5cdH1cbn07XG4iLCAiLyoqXG4gKiBAZGVzY3JpcHRpb24g5Zyo5pyA6L+R5L+u5pS544CB55uR6KeG5YiX6KGo44CB5p2h55uu5Y6G5Y+y6K6w5b2V562J5L2N572u5Lul54m55q6K5qC85byP5pi+56S65pyJ54m55q6K5p2D6ZmQ55qE55So5oi3XG4gKi9cbmltcG9ydCB7bWFya1VzZXJSaWdodHN9IGZyb20gJy4vbW9kdWxlcy9jb3JlJztcblxubXcuaG9vaygnd2lraXBhZ2UuY29udGVudCcpLmFkZChmdW5jdGlvbiBtYXJrUmlnaHRzKCRjb250ZW50KTogdm9pZCB7XG5cdGlmICgkY29udGVudC5hdHRyKCdpZCcpID09PSAnbXctY29udGVudC10ZXh0JyB8fCAkY29udGVudC5oYXNDbGFzcygnbXctY2hhbmdlc2xpc3QnKSkge1xuXHRcdHZvaWQgbWFya1VzZXJSaWdodHMoJGNvbnRlbnQpO1xuXHR9XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBR1osSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBRWxDLGFBQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxXQUFZO0FBQUUsZUFBTztBQUFBLE1BQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQUEsSUFDakYsQ0FBQztBQUFBO0FBQUE7OztBQ1BEO0FBQUEsc0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUVaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxVQUFJLE9BQVEsV0FBWTtBQUFBLE1BQWMsRUFBRyxLQUFLO0FBRTlDLGFBQU8sT0FBTyxRQUFRLGNBQWMsS0FBSyxlQUFlLFdBQVc7QUFBQSxJQUNyRSxDQUFDO0FBQUE7QUFBQTs7O0FDUkQ7QUFBQSwrRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksT0FBTyxTQUFTLFVBQVU7QUFFOUIsSUFBQUEsUUFBTyxVQUFVLGNBQWMsS0FBSyxLQUFLLElBQUksSUFBSSxXQUFZO0FBQzNELGFBQU8sS0FBSyxNQUFNLE1BQU0sU0FBUztBQUFBLElBQ25DO0FBQUE7QUFBQTs7O0FDUEE7QUFBQTtBQUFBO0FBQ0EsUUFBSSx3QkFBd0IsQ0FBQyxFQUFFO0FBRS9CLFFBQUksMkJBQTJCLE9BQU87QUFHdEMsUUFBSSxjQUFjLDRCQUE0QixDQUFDLHNCQUFzQixLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUlyRixZQUFRLElBQUksY0FBYyxTQUFTLHFCQUFxQixHQUFHO0FBQ3pELFVBQUksYUFBYSx5QkFBeUIsTUFBTSxDQUFDO0FBQ2pELGFBQU8sQ0FBQyxDQUFDLGNBQWMsV0FBVztBQUFBLElBQ3BDLElBQUk7QUFBQTtBQUFBOzs7QUNiSjtBQUFBLDRHQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLE9BQU87QUFDeEMsYUFBTztBQUFBLFFBQ0wsWUFBWSxFQUFFLFNBQVM7QUFBQSxRQUN2QixjQUFjLEVBQUUsU0FBUztBQUFBLFFBQ3pCLFVBQVUsRUFBRSxTQUFTO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1JBO0FBQUEsdUdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLG9CQUFvQixTQUFTO0FBQ2pDLFFBQUksT0FBTyxrQkFBa0I7QUFDN0IsUUFBSSxzQkFBc0IsZUFBZSxrQkFBa0IsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUUvRSxJQUFBQSxRQUFPLFVBQVUsY0FBYyxzQkFBc0IsU0FBVSxJQUFJO0FBQ2pFLGFBQU8sV0FBWTtBQUNqQixlQUFPLEtBQUssTUFBTSxJQUFJLFNBQVM7QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLDZGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxXQUFXLFlBQVksQ0FBQyxFQUFFLFFBQVE7QUFDdEMsUUFBSSxjQUFjLFlBQVksR0FBRyxLQUFLO0FBRXRDLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxZQUFZLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRTtBQUFBLElBQ3hDO0FBQUE7QUFBQTs7O0FDUkE7QUFBQSxnR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksVUFBVTtBQUVkLFFBQUksVUFBVTtBQUNkLFFBQUksUUFBUSxZQUFZLEdBQUcsS0FBSztBQUdoQyxJQUFBQSxRQUFPLFVBQVUsTUFBTSxXQUFZO0FBR2pDLGFBQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQztBQUFBLElBQzdDLENBQUMsSUFBSSxTQUFVLElBQUk7QUFDakIsYUFBTyxRQUFRLEVBQUUsTUFBTSxXQUFXLE1BQU0sSUFBSSxFQUFFLElBQUksUUFBUSxFQUFFO0FBQUEsSUFDOUQsSUFBSTtBQUFBO0FBQUE7OztBQ2ZKO0FBQUEsc0dBQUFDLFNBQUE7QUFBQTtBQUdBLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxPQUFPLFFBQVEsT0FBTztBQUFBLElBQy9CO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSwwR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxvQkFBb0I7QUFFeEIsUUFBSSxhQUFhO0FBSWpCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsVUFBSSxrQkFBa0IsRUFBRSxFQUFHLE9BQU0sSUFBSSxXQUFXLDBCQUEwQixFQUFFO0FBQzVFLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSxtR0FBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSx5QkFBeUI7QUFFN0IsSUFBQUEsUUFBTyxVQUFVLFNBQVUsSUFBSTtBQUM3QixhQUFPLGNBQWMsdUJBQXVCLEVBQUUsQ0FBQztBQUFBLElBQ2pEO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxjQUFjLE9BQU8sWUFBWSxZQUFZLFNBQVM7QUFLMUQsSUFBQUEsUUFBTyxVQUFVLE9BQU8sZUFBZSxlQUFlLGdCQUFnQixTQUFZLFNBQVUsVUFBVTtBQUNwRyxhQUFPLE9BQU8sWUFBWSxjQUFjLGFBQWE7QUFBQSxJQUN2RCxJQUFJLFNBQVUsVUFBVTtBQUN0QixhQUFPLE9BQU8sWUFBWTtBQUFBLElBQzVCO0FBQUE7QUFBQTs7O0FDWEE7QUFBQSwyRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBRWpCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxPQUFPLE1BQU0sV0FBVyxPQUFPLE9BQU8sV0FBVyxFQUFFO0FBQUEsSUFDNUQ7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLDhGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksYUFBYTtBQUVqQixRQUFJLFlBQVksU0FBVSxVQUFVO0FBQ2xDLGFBQU8sV0FBVyxRQUFRLElBQUksV0FBVztBQUFBLElBQzNDO0FBRUEsSUFBQUQsUUFBTyxVQUFVLFNBQVUsV0FBVyxRQUFRO0FBQzVDLGFBQU8sVUFBVSxTQUFTLElBQUksVUFBVUMsWUFBVyxTQUFTLENBQUMsSUFBSUEsWUFBVyxTQUFTLEtBQUtBLFlBQVcsU0FBUyxFQUFFLE1BQU07QUFBQSxJQUN4SDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsd0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixJQUFBQSxRQUFPLFVBQVUsWUFBWSxDQUFDLEVBQUUsYUFBYTtBQUFBO0FBQUE7OztBQ0g3QztBQUFBLHdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBRWpCLFFBQUksWUFBWUEsWUFBVztBQUMzQixRQUFJLFlBQVksYUFBYSxVQUFVO0FBRXZDLElBQUFELFFBQU8sVUFBVSxZQUFZLE9BQU8sU0FBUyxJQUFJO0FBQUE7QUFBQTs7O0FDTmpEO0FBQUEsd0dBQUFFLFNBQUE7QUFBQTtBQUNBLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxZQUFZO0FBRWhCLFFBQUksVUFBVUEsWUFBVztBQUN6QixRQUFJLE9BQU9BLFlBQVc7QUFDdEIsUUFBSSxXQUFXLFdBQVcsUUFBUSxZQUFZLFFBQVEsS0FBSztBQUMzRCxRQUFJLEtBQUssWUFBWSxTQUFTO0FBQzlCLFFBQUk7QUFBSixRQUFXO0FBRVgsUUFBSSxJQUFJO0FBQ04sY0FBUSxHQUFHLE1BQU0sR0FBRztBQUdwQixnQkFBVSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUFBLElBQ25FO0FBSUEsUUFBSSxDQUFDLFdBQVcsV0FBVztBQUN6QixjQUFRLFVBQVUsTUFBTSxhQUFhO0FBQ3JDLFVBQUksQ0FBQyxTQUFTLE1BQU0sQ0FBQyxLQUFLLElBQUk7QUFDNUIsZ0JBQVEsVUFBVSxNQUFNLGVBQWU7QUFDdkMsWUFBSSxNQUFPLFdBQVUsQ0FBQyxNQUFNLENBQUM7QUFBQSxNQUMvQjtBQUFBLElBQ0Y7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUMzQmpCO0FBQUEsOEdBQUFFLFNBQUE7QUFBQTtBQUVBLFFBQUksYUFBYTtBQUNqQixRQUFJLFFBQVE7QUFDWixRQUFJQyxjQUFhO0FBRWpCLFFBQUksVUFBVUEsWUFBVztBQUd6QixJQUFBRCxRQUFPLFVBQVUsQ0FBQyxDQUFDLE9BQU8seUJBQXlCLENBQUMsTUFBTSxXQUFZO0FBQ3BFLFVBQUksU0FBUyxPQUFPLGtCQUFrQjtBQUt0QyxhQUFPLENBQUMsUUFBUSxNQUFNLEtBQUssRUFBRSxPQUFPLE1BQU0sYUFBYTtBQUFBLE1BRXJELENBQUMsT0FBTyxRQUFRLGNBQWMsYUFBYTtBQUFBLElBQy9DLENBQUM7QUFBQTtBQUFBOzs7QUNsQkQ7QUFBQSxtR0FBQUUsU0FBQTtBQUFBO0FBRUEsUUFBSSxnQkFBZ0I7QUFFcEIsSUFBQUEsUUFBTyxVQUFVLGlCQUNaLENBQUMsT0FBTyxRQUNSLE9BQU8sT0FBTyxZQUFZO0FBQUE7QUFBQTs7O0FDTi9CO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGFBQWE7QUFDakIsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxvQkFBb0I7QUFFeEIsUUFBSSxVQUFVO0FBRWQsSUFBQUEsUUFBTyxVQUFVLG9CQUFvQixTQUFVLElBQUk7QUFDakQsYUFBTyxPQUFPLE1BQU07QUFBQSxJQUN0QixJQUFJLFNBQVUsSUFBSTtBQUNoQixVQUFJLFVBQVUsV0FBVyxRQUFRO0FBQ2pDLGFBQU8sV0FBVyxPQUFPLEtBQUssY0FBYyxRQUFRLFdBQVcsUUFBUSxFQUFFLENBQUM7QUFBQSxJQUM1RTtBQUFBO0FBQUE7OztBQ2JBO0FBQUEsK0ZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksVUFBVTtBQUVkLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSTtBQUNGLGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSw0RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUksY0FBYztBQUVsQixRQUFJLGFBQWE7QUFHakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLFdBQVcsUUFBUSxFQUFHLFFBQU87QUFDakMsWUFBTSxJQUFJLFdBQVcsWUFBWSxRQUFRLElBQUksb0JBQW9CO0FBQUEsSUFDbkU7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLDRGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFlBQVk7QUFDaEIsUUFBSSxvQkFBb0I7QUFJeEIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsR0FBRyxHQUFHO0FBQy9CLFVBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxhQUFPLGtCQUFrQixJQUFJLElBQUksU0FBWSxVQUFVLElBQUk7QUFBQSxJQUM3RDtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsdUdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksYUFBYTtBQUNqQixRQUFJLFdBQVc7QUFFZixRQUFJLGFBQWE7QUFJakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNO0FBQ3RDLFVBQUksSUFBSTtBQUNSLFVBQUksU0FBUyxZQUFZLFdBQVcsS0FBSyxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUNyRyxVQUFJLFdBQVcsS0FBSyxNQUFNLE9BQU8sS0FBSyxDQUFDLFNBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUMvRSxVQUFJLFNBQVMsWUFBWSxXQUFXLEtBQUssTUFBTSxRQUFRLEtBQUssQ0FBQyxTQUFTLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFHLFFBQU87QUFDckcsWUFBTSxJQUFJLFdBQVcseUNBQXlDO0FBQUEsSUFDaEU7QUFBQTtBQUFBOzs7QUNmQTtBQUFBLHlGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNEakI7QUFBQSx3R0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUdqQixRQUFJLGlCQUFpQixPQUFPO0FBRTVCLElBQUFELFFBQU8sVUFBVSxTQUFVLEtBQUssT0FBTztBQUNyQyxVQUFJO0FBQ0YsdUJBQWVDLGFBQVksS0FBSyxFQUFFLE9BQWMsY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDdEYsU0FBUyxPQUFPO0FBQ2QsUUFBQUEsWUFBVyxHQUFHLElBQUk7QUFBQSxNQUNwQjtBQUFFLGFBQU87QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSw4RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxVQUFVO0FBQ2QsUUFBSUMsY0FBYTtBQUNqQixRQUFJLHVCQUF1QjtBQUUzQixRQUFJLFNBQVM7QUFDYixRQUFJLFFBQVFELFFBQU8sVUFBVUMsWUFBVyxNQUFNLEtBQUsscUJBQXFCLFFBQVEsQ0FBQyxDQUFDO0FBRWxGLEtBQUMsTUFBTSxhQUFhLE1BQU0sV0FBVyxDQUFDLElBQUksS0FBSztBQUFBLE1BQzdDLFNBQVM7QUFBQSxNQUNULE1BQU0sVUFBVSxTQUFTO0FBQUEsTUFDekIsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUFBO0FBQUE7OztBQ2REO0FBQUEsd0ZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUVaLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUssT0FBTztBQUNyQyxhQUFPLE1BQU0sR0FBRyxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQy9DO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSwyRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSx5QkFBeUI7QUFFN0IsUUFBSSxVQUFVO0FBSWQsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxhQUFPLFFBQVEsdUJBQXVCLFFBQVEsQ0FBQztBQUFBLElBQ2pEO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSxrR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUVmLFFBQUksaUJBQWlCLFlBQVksQ0FBQyxFQUFFLGNBQWM7QUFLbEQsSUFBQUEsUUFBTyxVQUFVLE9BQU8sVUFBVSxTQUFTLE9BQU8sSUFBSSxLQUFLO0FBQ3pELGFBQU8sZUFBZSxTQUFTLEVBQUUsR0FBRyxHQUFHO0FBQUEsSUFDekM7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLHFGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxLQUFLO0FBQ1QsUUFBSSxVQUFVLEtBQUssT0FBTztBQUMxQixRQUFJLFdBQVcsWUFBWSxHQUFJLFFBQVE7QUFFdkMsSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSztBQUM5QixhQUFPLGFBQWEsUUFBUSxTQUFZLEtBQUssT0FBTyxPQUFPLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRTtBQUFBLElBQ3hGO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSxtR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLFNBQVM7QUFDYixRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFDVixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLG9CQUFvQjtBQUV4QixRQUFJQyxVQUFTRCxZQUFXO0FBQ3hCLFFBQUksd0JBQXdCLE9BQU8sS0FBSztBQUN4QyxRQUFJLHdCQUF3QixvQkFBb0JDLFFBQU8sS0FBSyxLQUFLQSxVQUFTQSxXQUFVQSxRQUFPLGlCQUFpQjtBQUU1RyxJQUFBRixRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUksQ0FBQyxPQUFPLHVCQUF1QixJQUFJLEdBQUc7QUFDeEMsOEJBQXNCLElBQUksSUFBSSxpQkFBaUIsT0FBT0UsU0FBUSxJQUFJLElBQzlEQSxRQUFPLElBQUksSUFDWCxzQkFBc0IsWUFBWSxJQUFJO0FBQUEsTUFDNUM7QUFBRSxhQUFPLHNCQUFzQixJQUFJO0FBQUEsSUFDckM7QUFBQTtBQUFBOzs7QUNsQkE7QUFBQSw4RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxXQUFXO0FBQ2YsUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksc0JBQXNCO0FBQzFCLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWUsZ0JBQWdCLGFBQWE7QUFJaEQsSUFBQUEsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNO0FBQ3RDLFVBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxTQUFTLEtBQUssRUFBRyxRQUFPO0FBQ2hELFVBQUksZUFBZSxVQUFVLE9BQU8sWUFBWTtBQUNoRCxVQUFJO0FBQ0osVUFBSSxjQUFjO0FBQ2hCLFlBQUksU0FBUyxPQUFXLFFBQU87QUFDL0IsaUJBQVMsS0FBSyxjQUFjLE9BQU8sSUFBSTtBQUN2QyxZQUFJLENBQUMsU0FBUyxNQUFNLEtBQUssU0FBUyxNQUFNLEVBQUcsUUFBTztBQUNsRCxjQUFNLElBQUksV0FBVyx5Q0FBeUM7QUFBQSxNQUNoRTtBQUNBLFVBQUksU0FBUyxPQUFXLFFBQU87QUFDL0IsYUFBTyxvQkFBb0IsT0FBTyxJQUFJO0FBQUEsSUFDeEM7QUFBQTtBQUFBOzs7QUN6QkE7QUFBQSxpR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUlmLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxNQUFNLFlBQVksVUFBVSxRQUFRO0FBQ3hDLGFBQU8sU0FBUyxHQUFHLElBQUksTUFBTSxNQUFNO0FBQUEsSUFDckM7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLHlHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksV0FBVztBQUVmLFFBQUlDLFlBQVdELFlBQVc7QUFFMUIsUUFBSSxTQUFTLFNBQVNDLFNBQVEsS0FBSyxTQUFTQSxVQUFTLGFBQWE7QUFFbEUsSUFBQUYsUUFBTyxVQUFVLFNBQVUsSUFBSTtBQUM3QixhQUFPLFNBQVNFLFVBQVMsY0FBYyxFQUFFLElBQUksQ0FBQztBQUFBLElBQ2hEO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSxnR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksZ0JBQWdCO0FBR3BCLElBQUFBLFFBQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLFdBQVk7QUFFbEQsYUFBTyxPQUFPLGVBQWUsY0FBYyxLQUFLLEdBQUcsS0FBSztBQUFBLFFBQ3RELEtBQUssV0FBWTtBQUFFLGlCQUFPO0FBQUEsUUFBRztBQUFBLE1BQy9CLENBQUMsRUFBRSxNQUFNO0FBQUEsSUFDWCxDQUFDO0FBQUE7QUFBQTs7O0FDWEQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksT0FBTztBQUNYLFFBQUksNkJBQTZCO0FBQ2pDLFFBQUksMkJBQTJCO0FBQy9CLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksU0FBUztBQUNiLFFBQUksaUJBQWlCO0FBR3JCLFFBQUksNEJBQTRCLE9BQU87QUFJdkMsWUFBUSxJQUFJLGNBQWMsNEJBQTRCLFNBQVMseUJBQXlCLEdBQUcsR0FBRztBQUM1RixVQUFJLGdCQUFnQixDQUFDO0FBQ3JCLFVBQUksY0FBYyxDQUFDO0FBQ25CLFVBQUksZUFBZ0IsS0FBSTtBQUN0QixlQUFPLDBCQUEwQixHQUFHLENBQUM7QUFBQSxNQUN2QyxTQUFTLE9BQU87QUFBQSxNQUFjO0FBQzlCLFVBQUksT0FBTyxHQUFHLENBQUMsRUFBRyxRQUFPLHlCQUF5QixDQUFDLEtBQUssMkJBQTJCLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFBQSxJQUNuRztBQUFBO0FBQUE7OztBQ3RCQTtBQUFBLHlHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBSVosSUFBQUEsUUFBTyxVQUFVLGVBQWUsTUFBTSxXQUFZO0FBRWhELGFBQU8sT0FBTyxlQUFlLFdBQVk7QUFBQSxNQUFjLEdBQUcsYUFBYTtBQUFBLFFBQ3JFLE9BQU87QUFBQSxRQUNQLFVBQVU7QUFBQSxNQUNaLENBQUMsRUFBRSxjQUFjO0FBQUEsSUFDbkIsQ0FBQztBQUFBO0FBQUE7OztBQ1pEO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksV0FBVztBQUVmLFFBQUksVUFBVTtBQUNkLFFBQUksYUFBYTtBQUdqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUksU0FBUyxRQUFRLEVBQUcsUUFBTztBQUMvQixZQUFNLElBQUksV0FBVyxRQUFRLFFBQVEsSUFBSSxtQkFBbUI7QUFBQSxJQUM5RDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLDBCQUEwQjtBQUM5QixRQUFJLFdBQVc7QUFDZixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLGFBQWE7QUFFakIsUUFBSSxrQkFBa0IsT0FBTztBQUU3QixRQUFJLDRCQUE0QixPQUFPO0FBQ3ZDLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxXQUFXO0FBSWYsWUFBUSxJQUFJLGNBQWMsMEJBQTBCLFNBQVMsZUFBZSxHQUFHLEdBQUcsWUFBWTtBQUM1RixlQUFTLENBQUM7QUFDVixVQUFJLGNBQWMsQ0FBQztBQUNuQixlQUFTLFVBQVU7QUFDbkIsVUFBSSxPQUFPLE1BQU0sY0FBYyxNQUFNLGVBQWUsV0FBVyxjQUFjLFlBQVksY0FBYyxDQUFDLFdBQVcsUUFBUSxHQUFHO0FBQzVILFlBQUksVUFBVSwwQkFBMEIsR0FBRyxDQUFDO0FBQzVDLFlBQUksV0FBVyxRQUFRLFFBQVEsR0FBRztBQUNoQyxZQUFFLENBQUMsSUFBSSxXQUFXO0FBQ2xCLHVCQUFhO0FBQUEsWUFDWCxjQUFjLGdCQUFnQixhQUFhLFdBQVcsWUFBWSxJQUFJLFFBQVEsWUFBWTtBQUFBLFlBQzFGLFlBQVksY0FBYyxhQUFhLFdBQVcsVUFBVSxJQUFJLFFBQVEsVUFBVTtBQUFBLFlBQ2xGLFVBQVU7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBRSxhQUFPLGdCQUFnQixHQUFHLEdBQUcsVUFBVTtBQUFBLElBQzNDLElBQUksa0JBQWtCLFNBQVMsZUFBZSxHQUFHLEdBQUcsWUFBWTtBQUM5RCxlQUFTLENBQUM7QUFDVixVQUFJLGNBQWMsQ0FBQztBQUNuQixlQUFTLFVBQVU7QUFDbkIsVUFBSSxlQUFnQixLQUFJO0FBQ3RCLGVBQU8sZ0JBQWdCLEdBQUcsR0FBRyxVQUFVO0FBQUEsTUFDekMsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLFNBQVMsY0FBYyxTQUFTLFdBQVksT0FBTSxJQUFJLFdBQVcseUJBQXlCO0FBQzlGLFVBQUksV0FBVyxXQUFZLEdBQUUsQ0FBQyxJQUFJLFdBQVc7QUFDN0MsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUMzQ0E7QUFBQSxnSEFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksMkJBQTJCO0FBRS9CLElBQUFBLFFBQU8sVUFBVSxjQUFjLFNBQVUsUUFBUSxLQUFLLE9BQU87QUFDM0QsYUFBTyxxQkFBcUIsRUFBRSxRQUFRLEtBQUsseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBQUEsSUFDL0UsSUFBSSxTQUFVLFFBQVEsS0FBSyxPQUFPO0FBQ2hDLGFBQU8sR0FBRyxJQUFJO0FBQ2QsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLCtGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxTQUFTO0FBRWIsUUFBSSxvQkFBb0IsU0FBUztBQUVqQyxRQUFJLGdCQUFnQixlQUFlLE9BQU87QUFFMUMsUUFBSSxTQUFTLE9BQU8sbUJBQW1CLE1BQU07QUFFN0MsUUFBSSxTQUFTLFVBQVcsU0FBUyxZQUFZO0FBQUEsSUFBYyxFQUFHLFNBQVM7QUFDdkUsUUFBSSxlQUFlLFdBQVcsQ0FBQyxlQUFnQixlQUFlLGNBQWMsbUJBQW1CLE1BQU0sRUFBRTtBQUV2RyxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDakJBO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBRVosUUFBSSxtQkFBbUIsWUFBWSxTQUFTLFFBQVE7QUFHcEQsUUFBSSxDQUFDLFdBQVcsTUFBTSxhQUFhLEdBQUc7QUFDcEMsWUFBTSxnQkFBZ0IsU0FBVSxJQUFJO0FBQ2xDLGVBQU8saUJBQWlCLEVBQUU7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFFQSxJQUFBQSxRQUFPLFVBQVUsTUFBTTtBQUFBO0FBQUE7OztBQ2R2QjtBQUFBLDBHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksYUFBYTtBQUVqQixRQUFJLFVBQVVBLFlBQVc7QUFFekIsSUFBQUQsUUFBTyxVQUFVLFdBQVcsT0FBTyxLQUFLLGNBQWMsS0FBSyxPQUFPLE9BQU8sQ0FBQztBQUFBO0FBQUE7OztBQ04xRTtBQUFBLDRGQUFBRSxTQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFFVixRQUFJLE9BQU8sT0FBTyxNQUFNO0FBRXhCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUs7QUFDOUIsYUFBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUc7QUFBQSxJQUMxQztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsNkZBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVSxDQUFDO0FBQUE7QUFBQTs7O0FDRGxCO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxXQUFXO0FBQ2YsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxTQUFTO0FBQ2IsUUFBSSxTQUFTO0FBQ2IsUUFBSSxZQUFZO0FBQ2hCLFFBQUksYUFBYTtBQUVqQixRQUFJLDZCQUE2QjtBQUNqQyxRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksVUFBVUEsWUFBVztBQUN6QixRQUFJO0FBQUosUUFBUztBQUFULFFBQWM7QUFFZCxRQUFJLFVBQVUsU0FBVSxJQUFJO0FBQzFCLGFBQU8sSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLElBQ3ZDO0FBRUEsUUFBSSxZQUFZLFNBQVUsTUFBTTtBQUM5QixhQUFPLFNBQVUsSUFBSTtBQUNuQixZQUFJO0FBQ0osWUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsU0FBUyxNQUFNO0FBQ3BELGdCQUFNLElBQUlDLFdBQVUsNEJBQTRCLE9BQU8sV0FBVztBQUFBLFFBQ3BFO0FBQUUsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsUUFBSSxtQkFBbUIsT0FBTyxPQUFPO0FBQy9CLGNBQVEsT0FBTyxVQUFVLE9BQU8sUUFBUSxJQUFJLFFBQVE7QUFFeEQsWUFBTSxNQUFNLE1BQU07QUFDbEIsWUFBTSxNQUFNLE1BQU07QUFDbEIsWUFBTSxNQUFNLE1BQU07QUFFbEIsWUFBTSxTQUFVLElBQUksVUFBVTtBQUM1QixZQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUcsT0FBTSxJQUFJQSxXQUFVLDBCQUEwQjtBQUNqRSxpQkFBUyxTQUFTO0FBQ2xCLGNBQU0sSUFBSSxJQUFJLFFBQVE7QUFDdEIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxZQUFNLFNBQVUsSUFBSTtBQUNsQixlQUFPLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQztBQUFBLE1BQzNCO0FBQ0EsWUFBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxNQUFNLElBQUksRUFBRTtBQUFBLE1BQ3JCO0FBQUEsSUFDRixPQUFPO0FBQ0QsY0FBUSxVQUFVLE9BQU87QUFDN0IsaUJBQVcsS0FBSyxJQUFJO0FBQ3BCLFlBQU0sU0FBVSxJQUFJLFVBQVU7QUFDNUIsWUFBSSxPQUFPLElBQUksS0FBSyxFQUFHLE9BQU0sSUFBSUEsV0FBVSwwQkFBMEI7QUFDckUsaUJBQVMsU0FBUztBQUNsQixvQ0FBNEIsSUFBSSxPQUFPLFFBQVE7QUFDL0MsZUFBTztBQUFBLE1BQ1Q7QUFDQSxZQUFNLFNBQVUsSUFBSTtBQUNsQixlQUFPLE9BQU8sSUFBSSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUFBLE1BQzFDO0FBQ0EsWUFBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxPQUFPLElBQUksS0FBSztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQWpDTTtBQW1CQTtBQWdCTixJQUFBRixRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUN0RUE7QUFBQSwrRkFBQUcsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksYUFBYTtBQUNqQixRQUFJLFNBQVM7QUFDYixRQUFJLGNBQWM7QUFDbEIsUUFBSSw2QkFBNkIsd0JBQXNDO0FBQ3ZFLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksc0JBQXNCO0FBRTFCLFFBQUksdUJBQXVCLG9CQUFvQjtBQUMvQyxRQUFJLG1CQUFtQixvQkFBb0I7QUFDM0MsUUFBSSxVQUFVO0FBRWQsUUFBSSxpQkFBaUIsT0FBTztBQUM1QixRQUFJLGNBQWMsWUFBWSxHQUFHLEtBQUs7QUFDdEMsUUFBSSxVQUFVLFlBQVksR0FBRyxPQUFPO0FBQ3BDLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRTlCLFFBQUksc0JBQXNCLGVBQWUsQ0FBQyxNQUFNLFdBQVk7QUFDMUQsYUFBTyxlQUFlLFdBQVk7QUFBQSxNQUFjLEdBQUcsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsV0FBVztBQUFBLElBQ3hGLENBQUM7QUFFRCxRQUFJLFdBQVcsT0FBTyxNQUFNLEVBQUUsTUFBTSxRQUFRO0FBRTVDLFFBQUksY0FBY0EsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNLFNBQVM7QUFDakUsVUFBSSxZQUFZLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLFdBQVc7QUFDbEQsZUFBTyxNQUFNLFFBQVEsUUFBUSxJQUFJLEdBQUcseUJBQXlCLElBQUksSUFBSTtBQUFBLE1BQ3ZFO0FBQ0EsVUFBSSxXQUFXLFFBQVEsT0FBUSxRQUFPLFNBQVM7QUFDL0MsVUFBSSxXQUFXLFFBQVEsT0FBUSxRQUFPLFNBQVM7QUFDL0MsVUFBSSxDQUFDLE9BQU8sT0FBTyxNQUFNLEtBQU0sOEJBQThCLE1BQU0sU0FBUyxNQUFPO0FBQ2pGLFlBQUksWUFBYSxnQkFBZSxPQUFPLFFBQVEsRUFBRSxPQUFPLE1BQU0sY0FBYyxLQUFLLENBQUM7QUFBQSxZQUM3RSxPQUFNLE9BQU87QUFBQSxNQUNwQjtBQUNBLFVBQUksdUJBQXVCLFdBQVcsT0FBTyxTQUFTLE9BQU8sS0FBSyxNQUFNLFdBQVcsUUFBUSxPQUFPO0FBQ2hHLHVCQUFlLE9BQU8sVUFBVSxFQUFFLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFBQSxNQUMxRDtBQUNBLFVBQUk7QUFDRixZQUFJLFdBQVcsT0FBTyxTQUFTLGFBQWEsS0FBSyxRQUFRLGFBQWE7QUFDcEUsY0FBSSxZQUFhLGdCQUFlLE9BQU8sYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQUEsUUFFekUsV0FBVyxNQUFNLFVBQVcsT0FBTSxZQUFZO0FBQUEsTUFDaEQsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLFFBQVEscUJBQXFCLEtBQUs7QUFDdEMsVUFBSSxDQUFDLE9BQU8sT0FBTyxRQUFRLEdBQUc7QUFDNUIsY0FBTSxTQUFTLEtBQUssVUFBVSxPQUFPLFFBQVEsV0FBVyxPQUFPLEVBQUU7QUFBQSxNQUNuRTtBQUFFLGFBQU87QUFBQSxJQUNYO0FBSUEsYUFBUyxVQUFVLFdBQVcsWUFBWSxTQUFTLFdBQVc7QUFDNUQsYUFBTyxXQUFXLElBQUksS0FBSyxpQkFBaUIsSUFBSSxFQUFFLFVBQVUsY0FBYyxJQUFJO0FBQUEsSUFDaEYsR0FBRyxVQUFVO0FBQUE7QUFBQTs7O0FDdERiO0FBQUEsaUdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLGNBQWM7QUFDbEIsUUFBSSx1QkFBdUI7QUFFM0IsSUFBQUEsUUFBTyxVQUFVLFNBQVUsR0FBRyxLQUFLLE9BQU8sU0FBUztBQUNqRCxVQUFJLENBQUMsUUFBUyxXQUFVLENBQUM7QUFDekIsVUFBSSxTQUFTLFFBQVE7QUFDckIsVUFBSSxPQUFPLFFBQVEsU0FBUyxTQUFZLFFBQVEsT0FBTztBQUN2RCxVQUFJLFdBQVcsS0FBSyxFQUFHLGFBQVksT0FBTyxNQUFNLE9BQU87QUFDdkQsVUFBSSxRQUFRLFFBQVE7QUFDbEIsWUFBSSxPQUFRLEdBQUUsR0FBRyxJQUFJO0FBQUEsWUFDaEIsc0JBQXFCLEtBQUssS0FBSztBQUFBLE1BQ3RDLE9BQU87QUFDTCxZQUFJO0FBQ0YsY0FBSSxDQUFDLFFBQVEsT0FBUSxRQUFPLEVBQUUsR0FBRztBQUFBLG1CQUN4QixFQUFFLEdBQUcsRUFBRyxVQUFTO0FBQUEsUUFDNUIsU0FBUyxPQUFPO0FBQUEsUUFBYztBQUM5QixZQUFJLE9BQVEsR0FBRSxHQUFHLElBQUk7QUFBQSxZQUNoQixzQkFBcUIsRUFBRSxHQUFHLEtBQUs7QUFBQSxVQUNsQztBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osY0FBYyxDQUFDLFFBQVE7QUFBQSxVQUN2QixVQUFVLENBQUMsUUFBUTtBQUFBLFFBQ3JCLENBQUM7QUFBQSxNQUNIO0FBQUUsYUFBTztBQUFBLElBQ1g7QUFBQTtBQUFBOzs7QUMzQkE7QUFBQSw0RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPLEtBQUs7QUFDaEIsUUFBSSxRQUFRLEtBQUs7QUFLakIsSUFBQUEsUUFBTyxVQUFVLEtBQUssU0FBUyxTQUFTLE1BQU0sR0FBRztBQUMvQyxVQUFJLElBQUksQ0FBQztBQUNULGNBQVEsSUFBSSxJQUFJLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDakM7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFJWixJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUksU0FBUyxDQUFDO0FBRWQsYUFBTyxXQUFXLFVBQVUsV0FBVyxJQUFJLElBQUksTUFBTSxNQUFNO0FBQUEsSUFDN0Q7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLG1HQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHNCQUFzQjtBQUUxQixRQUFJLE1BQU0sS0FBSztBQUNmLFFBQUksTUFBTSxLQUFLO0FBS2YsSUFBQUEsUUFBTyxVQUFVLFNBQVUsT0FBTyxRQUFRO0FBQ3hDLFVBQUksVUFBVSxvQkFBb0IsS0FBSztBQUN2QyxhQUFPLFVBQVUsSUFBSSxJQUFJLFVBQVUsUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTLE1BQU07QUFBQSxJQUNyRTtBQUFBO0FBQUE7OztBQ1pBO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksc0JBQXNCO0FBRTFCLFFBQUksTUFBTSxLQUFLO0FBSWYsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLE1BQU0sb0JBQW9CLFFBQVE7QUFDdEMsYUFBTyxNQUFNLElBQUksSUFBSSxLQUFLLGdCQUFnQixJQUFJO0FBQUEsSUFDaEQ7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHNHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFdBQVc7QUFJZixJQUFBQSxRQUFPLFVBQVUsU0FBVSxLQUFLO0FBQzlCLGFBQU8sU0FBUyxJQUFJLE1BQU07QUFBQSxJQUM1QjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksb0JBQW9CO0FBR3hCLFFBQUksZUFBZSxTQUFVLGFBQWE7QUFDeEMsYUFBTyxTQUFVLE9BQU8sSUFBSSxXQUFXO0FBQ3JDLFlBQUksSUFBSSxnQkFBZ0IsS0FBSztBQUM3QixZQUFJLFNBQVMsa0JBQWtCLENBQUM7QUFDaEMsWUFBSSxXQUFXLEVBQUcsUUFBTyxDQUFDLGVBQWU7QUFDekMsWUFBSSxRQUFRLGdCQUFnQixXQUFXLE1BQU07QUFDN0MsWUFBSTtBQUdKLFlBQUksZUFBZSxPQUFPLEdBQUksUUFBTyxTQUFTLE9BQU87QUFDbkQsa0JBQVEsRUFBRSxPQUFPO0FBRWpCLGNBQUksVUFBVSxNQUFPLFFBQU87QUFBQSxRQUU5QjtBQUFBLFlBQU8sUUFBTSxTQUFTLE9BQU8sU0FBUztBQUNwQyxlQUFLLGVBQWUsU0FBUyxNQUFNLEVBQUUsS0FBSyxNQUFNLEdBQUksUUFBTyxlQUFlLFNBQVM7QUFBQSxRQUNyRjtBQUFFLGVBQU8sQ0FBQyxlQUFlO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTtBQUFBLE1BR2YsVUFBVSxhQUFhLElBQUk7QUFBQTtBQUFBO0FBQUEsTUFHM0IsU0FBUyxhQUFhLEtBQUs7QUFBQSxJQUM3QjtBQUFBO0FBQUE7OztBQ2pDQTtBQUFBLHNHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSxVQUFVLHlCQUF1QztBQUNyRCxRQUFJLGFBQWE7QUFFakIsUUFBSSxPQUFPLFlBQVksQ0FBQyxFQUFFLElBQUk7QUFFOUIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxPQUFPO0FBQ3hDLFVBQUksSUFBSSxnQkFBZ0IsTUFBTTtBQUM5QixVQUFJLElBQUk7QUFDUixVQUFJLFNBQVMsQ0FBQztBQUNkLFVBQUk7QUFDSixXQUFLLE9BQU8sRUFBRyxFQUFDLE9BQU8sWUFBWSxHQUFHLEtBQUssT0FBTyxHQUFHLEdBQUcsS0FBSyxLQUFLLFFBQVEsR0FBRztBQUU3RSxhQUFPLE1BQU0sU0FBUyxFQUFHLEtBQUksT0FBTyxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRztBQUN4RCxTQUFDLFFBQVEsUUFBUSxHQUFHLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFBQSxNQUMzQztBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDcEJBO0FBQUEsK0ZBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDVkE7QUFBQTtBQUFBO0FBQ0EsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSxjQUFjO0FBRWxCLFFBQUksYUFBYSxZQUFZLE9BQU8sVUFBVSxXQUFXO0FBS3pELFlBQVEsSUFBSSxPQUFPLHVCQUF1QixTQUFTLG9CQUFvQixHQUFHO0FBQ3hFLGFBQU8sbUJBQW1CLEdBQUcsVUFBVTtBQUFBLElBQ3pDO0FBQUE7QUFBQTs7O0FDWEE7QUFBQTtBQUFBO0FBRUEsWUFBUSxJQUFJLE9BQU87QUFBQTtBQUFBOzs7QUNGbkI7QUFBQSwwRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUksY0FBYztBQUNsQixRQUFJLDRCQUE0QjtBQUNoQyxRQUFJLDhCQUE4QjtBQUNsQyxRQUFJLFdBQVc7QUFFZixRQUFJLFNBQVMsWUFBWSxDQUFDLEVBQUUsTUFBTTtBQUdsQyxJQUFBQSxRQUFPLFVBQVUsV0FBVyxXQUFXLFNBQVMsS0FBSyxTQUFTLFFBQVEsSUFBSTtBQUN4RSxVQUFJLE9BQU8sMEJBQTBCLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDbkQsVUFBSSx3QkFBd0IsNEJBQTRCO0FBQ3hELGFBQU8sd0JBQXdCLE9BQU8sTUFBTSxzQkFBc0IsRUFBRSxDQUFDLElBQUk7QUFBQSxJQUMzRTtBQUFBO0FBQUE7OztBQ2RBO0FBQUEsNkdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksU0FBUztBQUNiLFFBQUksVUFBVTtBQUNkLFFBQUksaUNBQWlDO0FBQ3JDLFFBQUksdUJBQXVCO0FBRTNCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsUUFBUSxZQUFZO0FBQ3JELFVBQUksT0FBTyxRQUFRLE1BQU07QUFDekIsVUFBSSxpQkFBaUIscUJBQXFCO0FBQzFDLFVBQUksMkJBQTJCLCtCQUErQjtBQUM5RCxlQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3BDLFlBQUksTUFBTSxLQUFLLENBQUM7QUFDaEIsWUFBSSxDQUFDLE9BQU8sUUFBUSxHQUFHLEtBQUssRUFBRSxjQUFjLE9BQU8sWUFBWSxHQUFHLElBQUk7QUFDcEUseUJBQWUsUUFBUSxLQUFLLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQ25FO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNoQkE7QUFBQSwyRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBQ1osUUFBSSxhQUFhO0FBRWpCLFFBQUksY0FBYztBQUVsQixRQUFJLFdBQVcsU0FBVSxTQUFTLFdBQVc7QUFDM0MsVUFBSSxRQUFRLEtBQUssVUFBVSxPQUFPLENBQUM7QUFDbkMsYUFBTyxVQUFVLFdBQVcsT0FDeEIsVUFBVSxTQUFTLFFBQ25CLFdBQVcsU0FBUyxJQUFJLE1BQU0sU0FBUyxJQUN2QyxDQUFDLENBQUM7QUFBQSxJQUNSO0FBRUEsUUFBSSxZQUFZLFNBQVMsWUFBWSxTQUFVLFFBQVE7QUFDckQsYUFBTyxPQUFPLE1BQU0sRUFBRSxRQUFRLGFBQWEsR0FBRyxFQUFFLFlBQVk7QUFBQSxJQUM5RDtBQUVBLFFBQUksT0FBTyxTQUFTLE9BQU8sQ0FBQztBQUM1QixRQUFJLFNBQVMsU0FBUyxTQUFTO0FBQy9CLFFBQUksV0FBVyxTQUFTLFdBQVc7QUFFbkMsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDdEJqQjtBQUFBLHdGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksMkJBQTJCLDZDQUEyRDtBQUMxRixRQUFJLDhCQUE4QjtBQUNsQyxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLDRCQUE0QjtBQUNoQyxRQUFJLFdBQVc7QUFpQmYsSUFBQUQsUUFBTyxVQUFVLFNBQVUsU0FBUyxRQUFRO0FBQzFDLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksUUFBUSxRQUFRLEtBQUssZ0JBQWdCLGdCQUFnQjtBQUN6RCxVQUFJLFFBQVE7QUFDVixpQkFBU0M7QUFBQSxNQUNYLFdBQVcsUUFBUTtBQUNqQixpQkFBU0EsWUFBVyxNQUFNLEtBQUsscUJBQXFCLFFBQVEsQ0FBQyxDQUFDO0FBQUEsTUFDaEUsT0FBTztBQUNMLGlCQUFTQSxZQUFXLE1BQU0sS0FBS0EsWUFBVyxNQUFNLEVBQUU7QUFBQSxNQUNwRDtBQUNBLFVBQUksT0FBUSxNQUFLLE9BQU8sUUFBUTtBQUM5Qix5QkFBaUIsT0FBTyxHQUFHO0FBQzNCLFlBQUksUUFBUSxnQkFBZ0I7QUFDMUIsdUJBQWEseUJBQXlCLFFBQVEsR0FBRztBQUNqRCwyQkFBaUIsY0FBYyxXQUFXO0FBQUEsUUFDNUMsTUFBTyxrQkFBaUIsT0FBTyxHQUFHO0FBQ2xDLGlCQUFTLFNBQVMsU0FBUyxNQUFNLFVBQVUsU0FBUyxNQUFNLE9BQU8sS0FBSyxRQUFRLE1BQU07QUFFcEYsWUFBSSxDQUFDLFVBQVUsbUJBQW1CLFFBQVc7QUFDM0MsY0FBSSxPQUFPLGtCQUFrQixPQUFPLGVBQWdCO0FBQ3BELG9DQUEwQixnQkFBZ0IsY0FBYztBQUFBLFFBQzFEO0FBRUEsWUFBSSxRQUFRLFFBQVMsa0JBQWtCLGVBQWUsTUFBTztBQUMzRCxzQ0FBNEIsZ0JBQWdCLFFBQVEsSUFBSTtBQUFBLFFBQzFEO0FBQ0Esc0JBQWMsUUFBUSxLQUFLLGdCQUFnQixPQUFPO0FBQUEsTUFDcEQ7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDdERBO0FBQUEsNkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUdsQixRQUFJLGVBQWUsSUFBSTtBQUV2QixJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBLE1BRWY7QUFBQSxNQUNBLEtBQUssWUFBWSxhQUFhLEdBQUc7QUFBQSxNQUNqQyxLQUFLLFlBQVksYUFBYSxHQUFHO0FBQUEsTUFDakMsUUFBUSxZQUFZLGFBQWEsUUFBUSxDQUFDO0FBQUEsTUFDMUMsT0FBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNiQTtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE1BQU0sc0JBQW9DO0FBRzlDLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsVUFBSSxFQUFFO0FBQ04sYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNQQTtBQUFBLGdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFFWCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLElBQUksNEJBQTRCO0FBQ2pFLFVBQUksV0FBVyw2QkFBNkIsU0FBUyxPQUFPO0FBQzVELFVBQUksT0FBTyxPQUFPO0FBQ2xCLFVBQUksTUFBTTtBQUNWLGFBQU8sRUFBRSxPQUFPLEtBQUssTUFBTSxRQUFRLEdBQUcsTUFBTTtBQUMxQyxpQkFBUyxHQUFHLEtBQUssS0FBSztBQUN0QixZQUFJLFdBQVcsT0FBVyxRQUFPO0FBQUEsTUFDbkM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDWEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksYUFBYTtBQUVqQixRQUFJQyxPQUFNLFdBQVc7QUFDckIsUUFBSSxlQUFlLFdBQVc7QUFDOUIsUUFBSSxVQUFVLFlBQVksYUFBYSxPQUFPO0FBQzlDLFFBQUksT0FBTyxZQUFZLGFBQWEsSUFBSTtBQUN4QyxRQUFJLE9BQU8sS0FBSyxJQUFJQSxLQUFJLENBQUMsRUFBRTtBQUUzQixJQUFBRCxRQUFPLFVBQVUsU0FBVSxLQUFLLElBQUksZUFBZTtBQUNqRCxhQUFPLGdCQUFnQixjQUFjLEVBQUUsVUFBVSxLQUFLLEdBQUcsR0FBRyxLQUFXLEdBQUcsRUFBRSxJQUFJLFFBQVEsS0FBSyxFQUFFO0FBQUEsSUFDakc7QUFBQTtBQUFBOzs7QUNiQTtBQUFBLDJGQUFBRSxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxVQUFVO0FBRWQsUUFBSUMsT0FBTSxXQUFXO0FBQ3JCLFFBQUksTUFBTSxXQUFXO0FBRXJCLElBQUFELFFBQU8sVUFBVSxTQUFVLEtBQUs7QUFDOUIsVUFBSSxTQUFTLElBQUlDLEtBQUk7QUFDckIsY0FBUSxLQUFLLFNBQVUsSUFBSTtBQUN6QixZQUFJLFFBQVEsRUFBRTtBQUFBLE1BQ2hCLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ2JBO0FBQUEsZ0hBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFlBQVk7QUFFaEIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxLQUFLLFFBQVE7QUFDOUMsVUFBSTtBQUVGLGVBQU8sWUFBWSxVQUFVLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQUEsTUFDcEYsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUFBLElBQ2hDO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSwwRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxhQUFhO0FBRWpCLElBQUFBLFFBQU8sVUFBVSxvQkFBb0IsV0FBVyxPQUFPLFFBQVEsS0FBSyxLQUFLLFNBQVUsS0FBSztBQUN0RixhQUFPLElBQUk7QUFBQSxJQUNiO0FBQUE7QUFBQTs7O0FDTkE7QUFBQSxxR0FBQUMsU0FBQTtBQUFBO0FBR0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSztBQUM5QixhQUFPO0FBQUEsUUFDTCxVQUFVO0FBQUEsUUFDVixNQUFNLElBQUk7QUFBQSxRQUNWLE1BQU07QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksWUFBWTtBQUNoQixRQUFJLFdBQVc7QUFDZixRQUFJLE9BQU87QUFDWCxRQUFJLHNCQUFzQjtBQUMxQixRQUFJLG9CQUFvQjtBQUV4QixRQUFJLGVBQWU7QUFDbkIsUUFBSSxjQUFjO0FBQ2xCLFFBQUksYUFBYTtBQUNqQixRQUFJLE1BQU0sS0FBSztBQUVmLFFBQUksWUFBWSxTQUFVLEtBQUssU0FBUztBQUN0QyxXQUFLLE1BQU07QUFDWCxXQUFLLE9BQU8sSUFBSSxTQUFTLENBQUM7QUFDMUIsV0FBSyxNQUFNLFVBQVUsSUFBSSxHQUFHO0FBQzVCLFdBQUssT0FBTyxVQUFVLElBQUksSUFBSTtBQUFBLElBQ2hDO0FBRUEsY0FBVSxZQUFZO0FBQUEsTUFDcEIsYUFBYSxXQUFZO0FBQ3ZCLGVBQU8sa0JBQWtCLFNBQVMsS0FBSyxLQUFLLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzlEO0FBQUEsTUFDQSxVQUFVLFNBQVUsSUFBSTtBQUN0QixlQUFPLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBSUEsSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSztBQUM5QixlQUFTLEdBQUc7QUFDWixVQUFJLFVBQVUsQ0FBQyxJQUFJO0FBR25CLFVBQUksWUFBWSxRQUFTLE9BQU0sSUFBSSxXQUFXLFlBQVk7QUFDMUQsVUFBSSxVQUFVLG9CQUFvQixPQUFPO0FBQ3pDLFVBQUksVUFBVSxFQUFHLE9BQU0sSUFBSSxZQUFZLFlBQVk7QUFDbkQsYUFBTyxJQUFJLFVBQVUsS0FBSyxPQUFPO0FBQUEsSUFDbkM7QUFBQTtBQUFBOzs7QUN2Q0E7QUFBQSxnR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxhQUFhO0FBQ2pCLFFBQUksUUFBUTtBQUNaLFFBQUksT0FBTztBQUNYLFFBQUksZUFBZTtBQUNuQixRQUFJLGFBQWE7QUFDakIsUUFBSSxnQkFBZ0I7QUFFcEIsUUFBSSxNQUFNLFdBQVc7QUFDckIsUUFBSSxTQUFTLFdBQVc7QUFJeEIsSUFBQUEsUUFBTyxVQUFVLFNBQVMsV0FBVyxPQUFPO0FBQzFDLFVBQUksSUFBSSxLQUFLLElBQUk7QUFDakIsVUFBSSxXQUFXLGFBQWEsS0FBSztBQUNqQyxVQUFJLFNBQVMsTUFBTSxDQUFDO0FBQ3BCLFVBQUksS0FBSyxDQUFDLEtBQUssU0FBUyxLQUFNLFlBQVcsR0FBRyxTQUFVLEdBQUc7QUFDdkQsWUFBSSxTQUFTLFNBQVMsQ0FBQyxFQUFHLFFBQU8sUUFBUSxDQUFDO0FBQUEsTUFDNUMsQ0FBQztBQUFBLFVBQ0ksZUFBYyxTQUFTLFlBQVksR0FBRyxTQUFVLEdBQUc7QUFDdEQsWUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFHLFFBQU8sUUFBUSxDQUFDO0FBQUEsTUFDakMsQ0FBQztBQUNELGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDekJBO0FBQUEsNEdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUVqQixRQUFJLGdCQUFnQixTQUFVLE1BQU07QUFDbEMsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBLEtBQUssV0FBWTtBQUNmLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBQ0EsTUFBTSxXQUFZO0FBQ2hCLGlCQUFPO0FBQUEsWUFDTCxNQUFNLFdBQVk7QUFDaEIscUJBQU8sRUFBRSxNQUFNLEtBQUs7QUFBQSxZQUN0QjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUlDLE9BQU0sV0FBVyxLQUFLO0FBQzFCLFVBQUk7QUFDRixZQUFJQSxLQUFJLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2hDLFlBQUk7QUFHRixjQUFJQSxLQUFJLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDO0FBQ2pDLGlCQUFPO0FBQUEsUUFDVCxTQUFTLFFBQVE7QUFDZixpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ2xDQTtBQUFBO0FBQUE7QUFDQSxRQUFJQyxLQUFJO0FBQ1IsUUFBSSxhQUFhO0FBQ2pCLFFBQUkseUJBQXlCO0FBSTdCLElBQUFBLEdBQUUsRUFBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLE1BQU0sTUFBTSxRQUFRLENBQUMsdUJBQXVCLFlBQVksRUFBRSxHQUFHO0FBQUEsTUFDM0Y7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUNURDtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7OztBQ0ZBO0FBQUEsa0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksYUFBYTtBQUNqQixRQUFJLE9BQU87QUFDWCxRQUFJLGVBQWU7QUFDbkIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksZ0JBQWdCO0FBRXBCLFFBQUlDLE9BQU0sV0FBVztBQUNyQixRQUFJLE1BQU0sV0FBVztBQUNyQixRQUFJLE1BQU0sV0FBVztBQUlyQixJQUFBRCxRQUFPLFVBQVUsU0FBUyxhQUFhLE9BQU87QUFDNUMsVUFBSSxJQUFJLEtBQUssSUFBSTtBQUNqQixVQUFJLFdBQVcsYUFBYSxLQUFLO0FBQ2pDLFVBQUksU0FBUyxJQUFJQyxLQUFJO0FBRXJCLFVBQUksS0FBSyxDQUFDLElBQUksU0FBUyxNQUFNO0FBQzNCLHNCQUFjLFNBQVMsWUFBWSxHQUFHLFNBQVUsR0FBRztBQUNqRCxjQUFJLElBQUksR0FBRyxDQUFDLEVBQUcsS0FBSSxRQUFRLENBQUM7QUFBQSxRQUM5QixDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsbUJBQVcsR0FBRyxTQUFVLEdBQUc7QUFDekIsY0FBSSxTQUFTLFNBQVMsQ0FBQyxFQUFHLEtBQUksUUFBUSxDQUFDO0FBQUEsUUFDekMsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQzlCQTtBQUFBO0FBQUE7QUFDQSxRQUFJQyxLQUFJO0FBQ1IsUUFBSSxRQUFRO0FBQ1osUUFBSSxlQUFlO0FBQ25CLFFBQUkseUJBQXlCO0FBRTdCLFFBQUksWUFBWSxDQUFDLHVCQUF1QixjQUFjLEtBQUssTUFBTSxXQUFZO0FBRTNFLGFBQU8sT0FBTyxNQUFNLE1BQUssb0JBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRSxhQUFhLG9CQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQUEsSUFDbEYsQ0FBQztBQUlELElBQUFBLEdBQUUsRUFBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLE1BQU0sTUFBTSxRQUFRLFVBQVUsR0FBRztBQUFBLE1BQy9EO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDZkQ7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBOzs7QUNGQTtBQUFBLGdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLFdBQVc7QUFDZixRQUFJLFlBQVk7QUFFaEIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVSxNQUFNLE9BQU87QUFDaEQsVUFBSSxhQUFhO0FBQ2pCLGVBQVMsUUFBUTtBQUNqQixVQUFJO0FBQ0Ysc0JBQWMsVUFBVSxVQUFVLFFBQVE7QUFDMUMsWUFBSSxDQUFDLGFBQWE7QUFDaEIsY0FBSSxTQUFTLFFBQVMsT0FBTTtBQUM1QixpQkFBTztBQUFBLFFBQ1Q7QUFDQSxzQkFBYyxLQUFLLGFBQWEsUUFBUTtBQUFBLE1BQzFDLFNBQVMsT0FBTztBQUNkLHFCQUFhO0FBQ2Isc0JBQWM7QUFBQSxNQUNoQjtBQUNBLFVBQUksU0FBUyxRQUFTLE9BQU07QUFDNUIsVUFBSSxXQUFZLE9BQU07QUFDdEIsZUFBUyxXQUFXO0FBQ3BCLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDdkJBO0FBQUEsc0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksTUFBTSxzQkFBb0M7QUFDOUMsUUFBSSxPQUFPO0FBQ1gsUUFBSSxlQUFlO0FBQ25CLFFBQUksYUFBYTtBQUNqQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGdCQUFnQjtBQUlwQixJQUFBQSxRQUFPLFVBQVUsU0FBUyxlQUFlLE9BQU87QUFDOUMsVUFBSSxJQUFJLEtBQUssSUFBSTtBQUNqQixVQUFJLFdBQVcsYUFBYSxLQUFLO0FBQ2pDLFVBQUksS0FBSyxDQUFDLEtBQUssU0FBUyxLQUFNLFFBQU8sV0FBVyxHQUFHLFNBQVUsR0FBRztBQUM5RCxZQUFJLFNBQVMsU0FBUyxDQUFDLEVBQUcsUUFBTztBQUFBLE1BQ25DLEdBQUcsSUFBSSxNQUFNO0FBQ2IsVUFBSSxXQUFXLFNBQVMsWUFBWTtBQUNwQyxhQUFPLGNBQWMsVUFBVSxTQUFVLEdBQUc7QUFDMUMsWUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFHLFFBQU8sY0FBYyxVQUFVLFVBQVUsS0FBSztBQUFBLE1BQy9ELENBQUMsTUFBTTtBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNyQkE7QUFBQTtBQUFBO0FBQ0EsUUFBSUMsS0FBSTtBQUNSLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUkseUJBQXlCO0FBSTdCLElBQUFBLEdBQUUsRUFBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLE1BQU0sTUFBTSxRQUFRLENBQUMsdUJBQXVCLGdCQUFnQixFQUFFLEdBQUc7QUFBQSxNQUMvRjtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ1REO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTs7O0FDRkE7QUFBQSxrR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxPQUFPO0FBQ1gsUUFBSSxVQUFVO0FBQ2QsUUFBSSxlQUFlO0FBSW5CLElBQUFBLFFBQU8sVUFBVSxTQUFTLFdBQVcsT0FBTztBQUMxQyxVQUFJLElBQUksS0FBSyxJQUFJO0FBQ2pCLFVBQUksV0FBVyxhQUFhLEtBQUs7QUFDakMsVUFBSSxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQU0sUUFBTztBQUNwQyxhQUFPLFFBQVEsR0FBRyxTQUFVLEdBQUc7QUFDN0IsWUFBSSxDQUFDLFNBQVMsU0FBUyxDQUFDLEVBQUcsUUFBTztBQUFBLE1BQ3BDLEdBQUcsSUFBSSxNQUFNO0FBQUEsSUFDZjtBQUFBO0FBQUE7OztBQ2ZBO0FBQUE7QUFBQTtBQUNBLFFBQUlDLEtBQUk7QUFDUixRQUFJLGFBQWE7QUFDakIsUUFBSSx5QkFBeUI7QUFJN0IsSUFBQUEsR0FBRSxFQUFFLFFBQVEsT0FBTyxPQUFPLE1BQU0sTUFBTSxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsWUFBWSxFQUFFLEdBQUc7QUFBQSxNQUMzRjtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ1REO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTs7O0FDRkE7QUFBQSxvR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxNQUFNLHNCQUFvQztBQUM5QyxRQUFJLE9BQU87QUFDWCxRQUFJLGVBQWU7QUFDbkIsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxnQkFBZ0I7QUFJcEIsSUFBQUEsUUFBTyxVQUFVLFNBQVMsYUFBYSxPQUFPO0FBQzVDLFVBQUksSUFBSSxLQUFLLElBQUk7QUFDakIsVUFBSSxXQUFXLGFBQWEsS0FBSztBQUNqQyxVQUFJLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBTSxRQUFPO0FBQ3BDLFVBQUksV0FBVyxTQUFTLFlBQVk7QUFDcEMsYUFBTyxjQUFjLFVBQVUsU0FBVSxHQUFHO0FBQzFDLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFHLFFBQU8sY0FBYyxVQUFVLFVBQVUsS0FBSztBQUFBLE1BQ2hFLENBQUMsTUFBTTtBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNsQkE7QUFBQTtBQUFBO0FBQ0EsUUFBSUMsS0FBSTtBQUNSLFFBQUksZUFBZTtBQUNuQixRQUFJLHlCQUF5QjtBQUk3QixJQUFBQSxHQUFFLEVBQUUsUUFBUSxPQUFPLE9BQU8sTUFBTSxNQUFNLE1BQU0sUUFBUSxDQUFDLHVCQUF1QixjQUFjLEVBQUUsR0FBRztBQUFBLE1BQzdGO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDVEQ7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBOzs7QUNGQTtBQUFBLDBHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBQ1osUUFBSSxlQUFlO0FBQ25CLFFBQUksZ0JBQWdCO0FBRXBCLFFBQUksTUFBTSxXQUFXO0FBQ3JCLFFBQUksTUFBTSxXQUFXO0FBQ3JCLFFBQUksU0FBUyxXQUFXO0FBSXhCLElBQUFBLFFBQU8sVUFBVSxTQUFTLG9CQUFvQixPQUFPO0FBQ25ELFVBQUksSUFBSSxLQUFLLElBQUk7QUFDakIsVUFBSSxXQUFXLGFBQWEsS0FBSyxFQUFFLFlBQVk7QUFDL0MsVUFBSSxTQUFTLE1BQU0sQ0FBQztBQUNwQixvQkFBYyxVQUFVLFNBQVUsR0FBRztBQUNuQyxZQUFJLElBQUksR0FBRyxDQUFDLEVBQUcsUUFBTyxRQUFRLENBQUM7QUFBQSxZQUMxQixLQUFJLFFBQVEsQ0FBQztBQUFBLE1BQ3BCLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ3RCQTtBQUFBO0FBQUE7QUFDQSxRQUFJQyxLQUFJO0FBQ1IsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSx5QkFBeUI7QUFJN0IsSUFBQUEsR0FBRSxFQUFFLFFBQVEsT0FBTyxPQUFPLE1BQU0sTUFBTSxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIscUJBQXFCLEVBQUUsR0FBRztBQUFBLE1BQ3BHO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDVEQ7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBOzs7QUNGQTtBQUFBLDJGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLE1BQU0sc0JBQW9DO0FBQzlDLFFBQUksUUFBUTtBQUNaLFFBQUksZUFBZTtBQUNuQixRQUFJLGdCQUFnQjtBQUlwQixJQUFBQSxRQUFPLFVBQVUsU0FBUyxNQUFNLE9BQU87QUFDckMsVUFBSSxJQUFJLEtBQUssSUFBSTtBQUNqQixVQUFJLFdBQVcsYUFBYSxLQUFLLEVBQUUsWUFBWTtBQUMvQyxVQUFJLFNBQVMsTUFBTSxDQUFDO0FBQ3BCLG9CQUFjLFVBQVUsU0FBVSxJQUFJO0FBQ3BDLFlBQUksUUFBUSxFQUFFO0FBQUEsTUFDaEIsQ0FBQztBQUNELGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDakJBO0FBQUE7QUFBQTtBQUNBLFFBQUlDLEtBQUk7QUFDUixRQUFJLFFBQVE7QUFDWixRQUFJLHlCQUF5QjtBQUk3QixJQUFBQSxHQUFFLEVBQUUsUUFBUSxPQUFPLE9BQU8sTUFBTSxNQUFNLE1BQU0sUUFBUSxDQUFDLHVCQUF1QixPQUFPLEVBQUUsR0FBRztBQUFBLE1BQ3RGO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7O0FDVEQ7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ZBLElBQUFDLG9CQUF1QkMsUUFBQSxpQkFBQTtBQUV2QixJQUFNQyxrQkFBa0JBLE1BQU07QUFDN0IsU0FBTztJQUNOQyxzQkFBQSxHQUFxQkgsa0JBQUFJLFVBQVM7TUFDN0JDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDREMsVUFBQSxHQUFTTixrQkFBQUksVUFBUztNQUNqQkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNERSxZQUFBLEdBQVdQLGtCQUFBSSxVQUFTO01BQ25CQyxJQUFJO01BQ0osV0FBVztNQUNYLFdBQVc7SUFDWixDQUFDO0lBQ0RHLFdBQUEsR0FBVVIsa0JBQUFJLFVBQVM7TUFDbEJDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDREksUUFBQSxHQUFPVCxrQkFBQUksVUFBUztNQUNmQyxJQUFJO01BQ0osV0FBVztNQUNYLFdBQVc7SUFDWixDQUFDO0lBQ0Qsb0JBQUEsR0FBbUJMLGtCQUFBSSxVQUFTO01BQzNCQyxJQUFJO01BQ0osV0FBVztNQUNYLFdBQVc7SUFDWixDQUFDO0lBQ0RLLGlCQUFBLEdBQWdCVixrQkFBQUksVUFBUztNQUN4QkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNETSxXQUFBLEdBQVVYLGtCQUFBSSxVQUFTO01BQ2xCQyxJQUFJO01BQ0osV0FBVztNQUNYLFdBQVc7SUFDWixDQUFDO0lBQ0RPLFlBQUEsR0FBV1osa0JBQUFJLFVBQVM7TUFDbkJDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDRFEsZ0JBQUEsR0FBZWIsa0JBQUFJLFVBQVM7TUFDdkJDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDRFMsZUFBQSxHQUFjZCxrQkFBQUksVUFBUztNQUN0QkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNELHVCQUFBLEdBQXNCTCxrQkFBQUksVUFBUztNQUM5QkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNEVSxZQUFBLEdBQVdmLGtCQUFBSSxVQUFTO01BQ25CQyxJQUFJO01BQ0osV0FBVztNQUNYLFdBQVc7SUFDWixDQUFDO0lBQ0RXLGdCQUFBLEdBQWVoQixrQkFBQUksVUFBUztNQUN2QkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNEWSxNQUFBLEdBQUtqQixrQkFBQUksVUFBUztNQUNiQyxJQUFJO01BQ0osV0FBVztNQUNYLFdBQVc7SUFDWixDQUFDO0lBQ0RhLFFBQUEsR0FBT2xCLGtCQUFBSSxVQUFTO01BQ2ZDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDRCxzQkFBQSxHQUFxQkwsa0JBQUFJLFVBQVM7TUFDN0JDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDRCxtQkFBQSxHQUFrQkwsa0JBQUFJLFVBQVM7TUFDMUJDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7RUFDRjtBQUNEO0FBRUEsSUFBTWMsZUFBZWpCLGdCQUFnQjtBQUVyQyxJQUFNa0IsYUFBZ0RDLFNBQVE7QUFDN0QsU0FBT0YsYUFBYUUsR0FBRyxLQUFLQTtBQUM3Qjs7QUNuR0EsSUFBQUMscUJBQXdCckIsUUFBQSxpQkFBQTtBQUV4QixJQUFNc0IsU0FBdUM7O0VBRTVDcEIscUJBQXFCLENBQUE7RUFDckJHLFNBQVMsQ0FBQTtFQUNUQyxXQUFXLENBQUE7RUFDWEMsVUFBVSxDQUFBO0VBQ1ZDLE9BQU8sQ0FBQTtFQUNQLG1CQUFtQixDQUFBO0VBQ25CQyxnQkFBZ0IsQ0FBQTtFQUNoQkMsVUFBVSxDQUFBOztFQUVWQyxXQUFXLENBQUE7RUFDWEMsZUFBZSxDQUFBOztFQUVmQyxjQUFjLENBQUE7RUFDZCxzQkFBc0IsQ0FBQTs7RUFFdEJDLFdBQVcsQ0FBQTtFQUNYQyxlQUFlLENBQUE7O0VBRWZDLEtBQUssQ0FBQTtFQUNMQyxPQUFPLENBQUE7O0VBRVAsa0JBQWtCLENBQUE7RUFDbEIscUJBQXFCLENBQUE7QUFDdEI7QUFFTyxJQUFNTSxpQkFBQSwyQkFBQTtBQUFBLE1BQUFDLE9BQUFDLGtCQUFpQixXQUFPQyxVQUFvQztBQUN4RSxVQUFNQyxhQUFxQkQsU0FBU0UsS0FBSyxxQ0FBcUM7QUFDOUUsUUFBSUMsUUFBa0IsQ0FBQTtBQUN0QixVQUFNQyxRQUE2QixDQUFBO0FBQ25DSCxlQUFXSSxLQUFLLENBQUNDLFFBQWdCO01BQUNDO0lBQVcsTUFBMEM7QUFDdEYsWUFBTUMsZUFBbUNELGdCQUFBLFFBQUFBLGdCQUFBLFNBQUEsU0FBQUEsWUFBYUUsU0FBUztBQUMvRCxVQUFJRCxjQUFjO0FBQ2pCTCxjQUFNQSxNQUFNTyxNQUFNLElBQUlGO01BQ3ZCO0FBQ0FMLGNBQVEsQ0FBQyxHQUFHLElBQUlRLElBQUlSLEtBQUssQ0FBQztBQUMxQixVQUFJQSxNQUFNTyxXQUFXLElBQUk7QUFDeEJOLGNBQU1BLE1BQU1NLE1BQU0sSUFBSVA7QUFDdEJBLGdCQUFRLENBQUE7TUFDVDtJQUNELENBQUM7QUFDRCxRQUFJQSxNQUFNTyxTQUFTLEdBQUc7QUFDckJOLFlBQU1BLE1BQU1NLE1BQU0sSUFBSVA7SUFDdkI7QUFDQSxVQUFNUyxjQUFlQyxTQUF3QjtBQUM1QyxVQUFJLENBQUNBLEtBQUs7QUFDVCxlQUFPO01BQ1I7QUFDQSxZQUFNQyxXQUEwQkMsR0FBR0MsS0FBS0MsY0FBYyxTQUFTSixHQUFHO0FBQ2xFLFlBQU1LLFNBQVNBLENBQUNDLFFBQWdCQyxZQUFpRDtBQUNoRixlQUFPQyxvQkFDTCxNQUFjO0FBQ2QsY0FBSTtBQUNILG1CQUFPQSxtQkFBbUJELFFBQVFELE1BQU0sQ0FBQztVQUMxQyxRQUFRO0FBQ1AsbUJBQU9DLFFBQVFELE1BQU0sRUFBRUMsUUFBUSxhQUFhLEtBQUs7VUFDbEQ7UUFDRCxHQUFHLENBQ0o7TUFDRDtBQUNBLFVBQUlOLFVBQVU7QUFDYixlQUFPSSxPQUFPSixVQUFXSyxZQUEyQjtBQUNuRCxpQkFBT0EsT0FBT0MsUUFBUSxTQUFTLEVBQUUsRUFBRUEsUUFBUSxNQUFNLEdBQUc7UUFDckQsQ0FBQztNQUNGO0FBQ0EsWUFBTUUsZ0JBQXlDVCxJQUFJVSxNQUFNLHFCQUFxQjtBQUM5RSxVQUFJRCxrQkFBQSxRQUFBQSxrQkFBQSxVQUFBQSxjQUFnQixDQUFDLEdBQUc7QUFDdkIsZUFBT0osT0FBT0ksY0FBYyxDQUFDLEdBQUlILFlBQTJCO0FBQzNELGlCQUFPQSxPQUFPQyxRQUFRLE1BQU0sR0FBRztRQUNoQyxDQUFDO01BQ0Y7QUFDQSxhQUFPO0lBQ1I7QUFDQSxVQUFNSSxPQUFPQSxNQUFZO0FBQ3hCdkIsaUJBQVdJLEtBQUssQ0FBQ0MsUUFBZ0JtQixZQUErQjtBQUFBLFlBQUFDO0FBQy9ELGNBQU1DLFdBQW1CQyxFQUFFSCxPQUFPO0FBQ2xDLFlBQUlFLFNBQVNFLFFBQVEsSUFBSSxFQUFFM0IsS0FBSyxxQkFBcUIsRUFBRVEsUUFBUTtBQUM5RDtRQUNEO0FBQ0EsY0FBTUksV0FBbUJGLGFBQUFjLGlCQUFZQyxTQUFTRyxLQUFLLE1BQU0sT0FBQSxRQUFBSixtQkFBQSxTQUFBQSxpQkFBSyxFQUFFO0FBQ2hFLFlBQUksQ0FBQ1osVUFBVTtBQUNkO1FBQ0Q7QUFDQSxjQUFNaUIsUUFBZ0JILEVBQUUsUUFBUSxFQUFFSSxTQUFTLG9CQUFvQjtBQUMvRCxtQkFBV0MsU0FBU3JDLFFBQVE7QUFBQSxjQUFBc0M7QUFDM0IsY0FBSSxDQUFDQyxPQUFPQyxPQUFPeEMsUUFBUXFDLEtBQUssR0FBRztBQUNsQztVQUNEO0FBQ0EsZ0JBQU1JLGVBQUFILGdCQUF3QnRDLE9BQU9xQyxLQUFjLE9BQUEsUUFBQUMsa0JBQUEsU0FBQUEsZ0JBQUssQ0FBQTtBQUN4RCxjQUFJLENBQUNHLFlBQVlDLFNBQVN4QixRQUFRLEdBQUc7QUFDcEM7VUFDRDtBQUNBLGdCQUFNeUIsWUFBQSx1QkFBQUMsT0FBMkNQLEtBQUs7QUFDdEQsY0FBSUYsTUFBTTdCLEtBQUssS0FBSyxFQUFFdUMsU0FBU0YsU0FBUyxHQUFHO0FBQzFDO1VBQ0Q7QUFDQVIsZ0JBQU1XOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQW9CTGQsRUFBRSxPQUFPLEVBQ1BJLFNBQVNPLFNBQVMsRUFDbEJULEtBQUs7Y0FDTGEsS0FBS2xELFdBQVd3QyxLQUFtQjtjQUNuQ1csT0FBT25ELFdBQVd3QyxLQUFtQjtZQUN0QyxDQUFDO1VBQ0g7UUFDRDtBQUNBTixpQkFBU2tCLE1BQU1kLEtBQUs7TUFDckIsQ0FBQztJQUNGO0FBQ0EsVUFBTWUsT0FBQSxHQUFjbkQsbUJBQUFvRCxXQUFVLGdCQUFnQjtBQUM5QyxhQUFBQyxLQUFBLEdBQUFDLFNBQXNCN0MsT0FBQTRDLEtBQUFDLE9BQUF2QyxRQUFBc0MsTUFBTztBQUFBLFVBQUFFLHVCQUFBQztBQUE3QixZQUFXQyxVQUFBSCxPQUFBRCxFQUFBO0FBQ1YsWUFBTUssU0FBOEI7UUFDbkNDLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxlQUFlO1FBQ2ZDLE1BQU07UUFDTkMsUUFBUTtRQUNSTjtNQUNEO0FBQ0EsWUFBTU8sV0FBQSxNQUFpQmIsSUFBSWMsSUFBSVAsTUFBTTtBQUVyQyxZQUFNUSxVQUFBWCx5QkFBQUMsa0JBQTJDUSxTQUFTLE9BQU8sT0FBQSxRQUFBUixvQkFBQSxTQUFBLFNBQWhCQSxnQkFBbUJoRCxXQUFBLFFBQUErQywwQkFBQSxTQUFBQSx3QkFBUyxDQUFBO0FBQUMsVUFBQVksWUFBQUMsMkJBQzNERixNQUFBLEdBQUFHO0FBQUEsVUFBQTtBQUFuQixhQUFBRixVQUFBRyxFQUFBLEdBQUEsRUFBQUQsUUFBQUYsVUFBQUksRUFBQSxHQUFBMUMsUUFBMkI7QUFBQSxnQkFBaEIyQyxPQUFBSCxNQUFBSTtBQUNWLGNBQUksQ0FBQ0QsUUFBUSxDQUFDQSxLQUFLdkUsUUFBUTtBQUMxQjtVQUNEO0FBQ0EscUJBQVdxQyxTQUFTckMsUUFBUTtBQUMzQixnQkFBSSxDQUFDdUMsT0FBT0MsT0FBT3hDLFFBQVFxQyxLQUFLLEdBQUc7QUFDbEM7WUFDRDtBQUNBLGtCQUFNSSxjQUF3QnpDLE9BQU9xQyxLQUFjO0FBQ25ELGdCQUFJa0MsS0FBS3ZFLE9BQU8wQyxTQUFTTCxLQUFLLEdBQUc7QUFDaENJLDBCQUFZQSxZQUFZM0IsTUFBTSxJQUFJeUQsS0FBS0U7WUFDeEM7VUFDRDtRQUNEO01BQUEsU0FBQUMsS0FBQTtBQUFBUixrQkFBQVMsRUFBQUQsR0FBQTtNQUFBLFVBQUE7QUFBQVIsa0JBQUFVLEVBQUE7TUFBQTtBQUNBaEQsV0FBSztJQUNOO0VBQ0QsQ0FBQTtBQUFBLFNBQUEsU0FsSWEzQixnQkFBQTRFLElBQUE7QUFBQSxXQUFBM0UsS0FBQTRFLE1BQUEsTUFBQUMsU0FBQTtFQUFBO0FBQUEsRUFBQTs7QUMxQmI1RCxHQUFHNkQsS0FBSyxrQkFBa0IsRUFBRUMsSUFBSSxTQUFTQyxXQUFXOUUsVUFBZ0I7QUFDbkUsTUFBSUEsU0FBUzhCLEtBQUssSUFBSSxNQUFNLHFCQUFxQjlCLFNBQVN5QyxTQUFTLGdCQUFnQixHQUFHO0FBQ3JGLFNBQUs1QyxlQUFlRyxRQUFRO0VBQzdCO0FBQ0QsQ0FBQzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAiU2V0IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICIkIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAicmVxdWlyZSIsICJnZXRJMThuTWVzc2FnZXMiLCAicmVzcG9uc2libGVvcGVyYXRvciIsICJsb2NhbGl6ZSIsICJlbiIsICJzdGV3YXJkIiwgImNoZWNrdXNlciIsICJzdXBwcmVzcyIsICJzeXNvcCIsICJ0ZW1wbGF0ZWVkaXRvciIsICJpbXBvcnRlciIsICJwYXRyb2xsZXIiLCAiYXV0b3BhdHJvbGxlZCIsICJldmVudHNwb25zb3IiLCAiY29uZmlybWVkIiwgImF1dG9jb25maXJtZWQiLCAiYm90IiwgImZsb29kIiwgImkxOG5NZXNzYWdlcyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJpbXBvcnRfZXh0X2dhZGdldDIiLCAiZ3JvdXBzIiwgIm1hcmtVc2VyUmlnaHRzIiwgIl9yZWYiLCAiX2FzeW5jVG9HZW5lcmF0b3IiLCAiJGNvbnRlbnQiLCAiJHVzZXJMaW5rcyIsICJmaW5kIiwgInVzZXJzIiwgInF1ZXVlIiwgImVhY2giLCAiX2luZGV4IiwgInRleHRDb250ZW50IiwgInVzZXJMaW5rVGV4dCIsICJ0b1N0cmluZyIsICJsZW5ndGgiLCAiU2V0IiwgImdldFVzZXJuYW1lIiwgInVybCIsICJ1c2VybmFtZSIsICJtdyIsICJ1dGlsIiwgImdldFBhcmFtVmFsdWUiLCAiZGVjb2RlIiwgInN0cmluZyIsICJyZXBsYWNlIiwgImRlY29kZVVSSUNvbXBvbmVudCIsICJ1c2VybmFtZU1hdGNoIiwgIm1hdGNoIiwgImRvbmUiLCAiZWxlbWVudCIsICJfJGVsZW1lbnQkYXR0ciIsICIkZWxlbWVudCIsICIkIiwgInBhcmVudHMiLCAiYXR0ciIsICIkc3VwcyIsICJhZGRDbGFzcyIsICJncm91cCIsICJfZ3JvdXBzJGdyb3VwIiwgIk9iamVjdCIsICJoYXNPd24iLCAiZ3JvdXBzR3JvdXAiLCAiaW5jbHVkZXMiLCAiY2xhc3NOYW1lIiwgImNvbmNhdCIsICJoYXNDbGFzcyIsICJhcHBlbmQiLCAiYWx0IiwgInRpdGxlIiwgImFmdGVyIiwgImFwaSIsICJpbml0TXdBcGkiLCAiX2kiLCAiX3F1ZXVlIiwgIl9yZXNwb25zZSRxdWVyeSR1c2VycyIsICJfcmVzcG9uc2UkcXVlcnkiLCAidXN1c2VycyIsICJwYXJhbXMiLCAiYWN0aW9uIiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgImxpc3QiLCAidXNwcm9wIiwgInJlc3BvbnNlIiwgImdldCIsICJfdXNlcnMiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwIiwgInMiLCAibiIsICJ1c2VyIiwgInZhbHVlIiwgIm5hbWUiLCAiZXJyIiwgImUiLCAiZiIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAiaG9vayIsICJhZGQiLCAibWFya1JpZ2h0cyJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgInNyYy9NYXJrUmlnaHRzL21vZHVsZXMvaTE4bi50cyIsICJzcmMvTWFya1JpZ2h0cy9tb2R1bGVzL2NvcmUudHMiLCAic3JjL01hcmtSaWdodHMvTWFya1JpZ2h0cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjEnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjEvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxudmFyIFNldFByb3RvdHlwZSA9IFNldC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbiAgU2V0OiBTZXQsXG4gIGFkZDogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmFkZCksXG4gIGhhczogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmhhcyksXG4gIHJlbW92ZTogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlWydkZWxldGUnXSksXG4gIHByb3RvOiBTZXRQcm90b3R5cGVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcblxuLy8gUGVyZm9ybSA/IFJlcXVpcmVJbnRlcm5hbFNsb3QoTSwgW1tTZXREYXRhXV0pXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBoYXMoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVjb3JkLCBmbiwgSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQpIHtcbiAgdmFyIGl0ZXJhdG9yID0gSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQgPyByZWNvcmQgOiByZWNvcmQuaXRlcmF0b3I7XG4gIHZhciBuZXh0ID0gcmVjb3JkLm5leHQ7XG4gIHZhciBzdGVwLCByZXN1bHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGZuKHN0ZXAudmFsdWUpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIFNldFByb3RvdHlwZSA9IFNldEhlbHBlcnMucHJvdG87XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBrZXlzID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmtleXMpO1xudmFyIG5leHQgPSBrZXlzKG5ldyBTZXQoKSkubmV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoeyBpdGVyYXRvcjoga2V5cyhzZXQpLCBuZXh0OiBuZXh0IH0sIGZuKSA6IGZvckVhY2goc2V0LCBmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzQWNjZXNzb3IoU2V0SGVscGVycy5wcm90bywgJ3NpemUnLCAnZ2V0JykgfHwgZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gc2V0LnNpemU7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBHZXRJdGVyYXRvckRpcmVjdChvYmopYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzLyNzZWMtZ2V0aXRlcmF0b3JkaXJlY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIGl0ZXJhdG9yOiBvYmosXG4gICAgbmV4dDogb2JqLm5leHQsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG52YXIgSU5WQUxJRF9TSVpFID0gJ0ludmFsaWQgc2l6ZSc7XG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBTZXRSZWNvcmQgPSBmdW5jdGlvbiAoc2V0LCBpbnRTaXplKSB7XG4gIHRoaXMuc2V0ID0gc2V0O1xuICB0aGlzLnNpemUgPSBtYXgoaW50U2l6ZSwgMCk7XG4gIHRoaXMuaGFzID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICB0aGlzLmtleXMgPSBhQ2FsbGFibGUoc2V0LmtleXMpO1xufTtcblxuU2V0UmVjb3JkLnByb3RvdHlwZSA9IHtcbiAgZ2V0SXRlcmF0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SXRlcmF0b3JEaXJlY3QoYW5PYmplY3QoY2FsbCh0aGlzLmtleXMsIHRoaXMuc2V0KSkpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGNhbGwodGhpcy5oYXMsIHRoaXMuc2V0LCBpdCk7XG4gIH1cbn07XG5cbi8vIGBHZXRTZXRSZWNvcmRgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNzZWMtZ2V0c2V0cmVjb3JkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgYW5PYmplY3Qob2JqKTtcbiAgdmFyIG51bVNpemUgPSArb2JqLnNpemU7XG4gIC8vIE5PVEU6IElmIHNpemUgaXMgdW5kZWZpbmVkLCB0aGVuIG51bVNpemUgd2lsbCBiZSBOYU5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bVNpemUgIT09IG51bVNpemUpIHRocm93IG5ldyAkVHlwZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHZhciBpbnRTaXplID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1TaXplKTtcbiAgaWYgKGludFNpemUgPCAwKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgcmV0dXJuIG5ldyBTZXRSZWNvcmQob2JqLCBpbnRTaXplKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIGVsc2UgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbnZhciBjcmVhdGVTZXRMaWtlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIHtcbiAgICBzaXplOiBzaXplLFxuICAgIGhhczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcbiAgdHJ5IHtcbiAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgwKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGxhdGUgc3BlYyBjaGFuZ2UsIGVhcmx5IFdlYktpdCB+IFNhZmFyaSAxNy4wIGJldGEgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcGFzcyBpdFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHMvcHVsbC84OFxuICAgICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoLTEpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdkaWZmZXJlbmNlJykgfSwge1xuICBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHtcbiAgICBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoaGFzKE8sIGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcnNlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxudmFyIElOQ09SUkVDVCA9ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpbnRlcnNlY3Rpb24nKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBlcy9uby1zZXQgLS0gdGVzdGluZ1xuICByZXR1cm4gU3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwgMiwgM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLCAyXSkpKSkgIT09ICczLDInO1xufSk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVCB9LCB7XG4gIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGlzam9pbnRGcm9tKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0Rpc2pvaW50RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNEaXNqb2ludEZyb20nKSB9LCB7XG4gIGlzRGlzam9pbnRGcm9tOiBpc0Rpc2pvaW50RnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpdGVyYXRlKE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3Vic2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1YnNldE9mJykgfSwge1xuICBpc1N1YnNldE9mOiBpc1N1YnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3VwZXJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDwgb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIWhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdXBlcnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3VwZXJzZXRPZicpIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBpc1N1cGVyc2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN5bW1ldHJpY0RpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgICBlbHNlIGFkZChyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc3ltbWV0cmljRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnc3ltbWV0cmljRGlmZmVyZW5jZScpIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogc3ltbWV0cmljRGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdW5pb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3VuaW9uJykgfSwge1xuICB1bmlvbjogdW5pb25cbn0pO1xuIiwgImltcG9ydCB7bG9jYWxpemV9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cbmNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0cmV0dXJuIHtcblx0XHRyZXNwb25zaWJsZW9wZXJhdG9yOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1Jlc3BvbnNpYmxlT3BlcmF0b3InLFxuXHRcdFx0J3poLWhhbnMnOiAn6LSj5Lu76L+Q6JClJyxcblx0XHRcdCd6aC1oYW50JzogJ+iyrOS7u+mBi+eHnycsXG5cdFx0fSksXG5cdFx0c3Rld2FyZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdTdGV3YXJkJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aho+ahiOeQhuS6i+WRmCcsXG5cdFx0XHQnemgtaGFudCc6ICfmqpTmoYjnkIbkuovlk6EnLFxuXHRcdH0pLFxuXHRcdGNoZWNrdXNlcjogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdDaGVja1VzZXInLFxuXHRcdFx0J3poLWhhbnMnOiAn55So5oi35p+l5qC4Jyxcblx0XHRcdCd6aC1oYW50JzogJ+eUqOaItuafpeaguCcsXG5cdFx0fSksXG5cdFx0c3VwcHJlc3M6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnT3ZlcnNpZ2h0ZXInLFxuXHRcdFx0J3poLWhhbnMnOiAn55uR552j5ZGYJyxcblx0XHRcdCd6aC1oYW50JzogJ+ebo+edo+WToScsXG5cdFx0fSksXG5cdFx0c3lzb3A6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnU3lzT3AnLFxuXHRcdFx0J3poLWhhbnMnOiAn566h55CG5ZGYJyxcblx0XHRcdCd6aC1oYW50JzogJ+euoeeQhuWToScsXG5cdFx0fSksXG5cdFx0J2ludGVyZmFjZS1hZG1pbic6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnSW50ZXJmYWNlIEFkbWluaXN0cmF0b3InLFxuXHRcdFx0J3poLWhhbnMnOiAn55WM6Z2i566h55CG5ZGYJyxcblx0XHRcdCd6aC1oYW50JzogJ+S7i+mdoueuoeeQhuWToScsXG5cdFx0fSksXG5cdFx0dGVtcGxhdGVlZGl0b3I6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGVtcGxhdGUgRWRpdG9yJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aooeadv+e8lui+keWRmCcsXG5cdFx0XHQnemgtaGFudCc6ICfmqKHmnb/nt6jovK/lk6EnLFxuXHRcdH0pLFxuXHRcdGltcG9ydGVyOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0ltcG9ydGVyJyxcblx0XHRcdCd6aC1oYW5zJzogJ+WvvOWFpeiAhScsXG5cdFx0XHQnemgtaGFudCc6ICfljK/lhaXogIUnLFxuXHRcdH0pLFxuXHRcdHBhdHJvbGxlcjogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdQYXRyb2xsZXInLFxuXHRcdFx0J3poLWhhbnMnOiAn5beh5p+l5ZGYJyxcblx0XHRcdCd6aC1oYW50JzogJ+W3oeafpeWToScsXG5cdFx0fSksXG5cdFx0YXV0b3BhdHJvbGxlZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdFeGVtcHRlZCBmcm9tIHBhZ2UgcGF0cm9sJyxcblx0XHRcdCd6aC1oYW5zJzogJ+S8mOi0qOe8lui+keiAhScsXG5cdFx0XHQnemgtaGFudCc6ICflhKros6rnt6jovK/ogIUnLFxuXHRcdH0pLFxuXHRcdGV2ZW50c3BvbnNvcjogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdFdmVudCBTcG9uc29yJyxcblx0XHRcdCd6aC1oYW5zJzogJ+a0u+WKqOe7hOe7h+iAhScsXG5cdFx0XHQnemgtaGFudCc6ICfmtLvli5XntYTnuZTogIUnLFxuXHRcdH0pLFxuXHRcdCdtYXNzbWVzc2FnZS1zZW5kZXInOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ01hc3NNZXNzYWdlIHNlbmRlcicsXG5cdFx0XHQnemgtaGFucyc6ICflpKfph4/mtojmga/lj5HpgIHogIUnLFxuXHRcdFx0J3poLWhhbnQnOiAn5aSn6YeP6KiK5oGv5YKz6YCB6ICFJyxcblx0XHR9KSxcblx0XHRjb25maXJtZWQ6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnQ29uZmlybWVkIHVzZXInLFxuXHRcdFx0J3poLWhhbnMnOiAn56Gu6K6k55So5oi3Jyxcblx0XHRcdCd6aC1oYW50JzogJ+eiuuiqjeeUqOaIticsXG5cdFx0fSksXG5cdFx0YXV0b2NvbmZpcm1lZDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdBdXRvLWNvbmZpcm1lZCB1c2VyJyxcblx0XHRcdCd6aC1oYW5zJzogJ+iHquWKqOehruiupOeUqOaItycsXG5cdFx0XHQnemgtaGFudCc6ICfoh6rli5Xnorroqo3nlKjmiLYnLFxuXHRcdH0pLFxuXHRcdGJvdDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdCb3QnLFxuXHRcdFx0J3poLWhhbnMnOiAn5py65Zmo5Lq6Jyxcblx0XHRcdCd6aC1oYW50JzogJ+apn+aisOS6uicsXG5cdFx0fSksXG5cdFx0Zmxvb2Q6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRmxvb2RlcicsXG5cdFx0XHQnemgtaGFucyc6ICfmnLrlmajnlKjmiLcnLFxuXHRcdFx0J3poLWhhbnQnOiAn5qmf5qKw55So5oi2Jyxcblx0XHR9KSxcblx0XHQncm5yc3ZlcmlmeS1leGVtcHQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0V4ZW1wdGVkIGZyb20gcmVhbC1uYW1lIHZlcmlmaWNhdGlvbicsXG5cdFx0XHQnemgtaGFucyc6ICflrp7lkI3liLbpqozor4HosYHlhY0nLFxuXHRcdFx0J3poLWhhbnQnOiAn5a+m5ZCN5Yi26amX6K2J6LGB5YWNJyxcblx0XHR9KSxcblx0XHQnaXBibG9jay1leGVtcHQnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0V4ZW1wdGVkIGZyb20gSVAgYmxvY2tzJyxcblx0XHRcdCd6aC1oYW5zJzogJ0lQ5bCB56aB6LGB5YWNJyxcblx0XHRcdCd6aC1oYW50JzogJ0lQ5bCB6Y6W6LGB5YWNJyxcblx0XHR9KSxcblx0fTtcbn07XG5cbmNvbnN0IGkxOG5NZXNzYWdlcyA9IGdldEkxOG5NZXNzYWdlcygpO1xuXG5jb25zdCBnZXRNZXNzYWdlOiBHZXRNZXNzYWdlczx0eXBlb2YgaTE4bk1lc3NhZ2VzPiA9IChrZXkpID0+IHtcblx0cmV0dXJuIGkxOG5NZXNzYWdlc1trZXldIHx8IGtleTtcbn07XG5cbmV4cG9ydCB7Z2V0TWVzc2FnZX07XG4iLCAiaW1wb3J0IHR5cGUge1VzZXJSaWdodHN9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmNvbnN0IGdyb3VwczogUmVjb3JkPFVzZXJSaWdodHMsIHN0cmluZ1tdPiA9IHtcblx0Ly8g5YWo56uZ566h55CG5Z6L5p2D6ZmQXG5cdHJlc3BvbnNpYmxlb3BlcmF0b3I6IFtdLFxuXHRzdGV3YXJkOiBbXSxcblx0Y2hlY2t1c2VyOiBbXSxcblx0c3VwcHJlc3M6IFtdLFxuXHRzeXNvcDogW10sXG5cdCdpbnRlcmZhY2UtYWRtaW4nOiBbXSxcblx0dGVtcGxhdGVlZGl0b3I6IFtdLFxuXHRpbXBvcnRlcjogW10sXG5cdC8vIOmhtemdoueuoeeQhuWei+adg+mZkFxuXHRwYXRyb2xsZXI6IFtdLFxuXHRhdXRvcGF0cm9sbGVkOiBbXSxcblx0Ly8g5aSn6YeP5pON5L2c5Z6L5p2D6ZmQXG5cdGV2ZW50c3BvbnNvcjogW10sXG5cdCdtYXNzbWVzc2FnZS1zZW5kZXInOiBbXSxcblx0Ly8g56Gu6K6k5p2D6ZmQXG5cdGNvbmZpcm1lZDogW10sXG5cdGF1dG9jb25maXJtZWQ6IFtdLFxuXHQvLyDmnLrlmajmnYPpmZBcblx0Ym90OiBbXSxcblx0Zmxvb2Q6IFtdLFxuXHQvLyDosYHlhY1cblx0J2lwYmxvY2stZXhlbXB0JzogW10sXG5cdCdybnJzdmVyaWZ5LWV4ZW1wdCc6IFtdLFxufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtVc2VyUmlnaHRzID0gYXN5bmMgKCRjb250ZW50OiBKUXVlcnkpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0Y29uc3QgJHVzZXJMaW5rczogSlF1ZXJ5ID0gJGNvbnRlbnQuZmluZCgnYS5tdy11c2VybGluazpub3QoLm13LWFub251c2VybGluayknKTtcblx0bGV0IHVzZXJzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBxdWV1ZTogQXJyYXk8dHlwZW9mIHVzZXJzPiA9IFtdO1xuXHQkdXNlckxpbmtzLmVhY2goKF9pbmRleDogbnVtYmVyLCB7dGV4dENvbnRlbnR9OiB7dGV4dENvbnRlbnQ6IHN0cmluZyB8IG51bGx9KTogdm9pZCA9PiB7XG5cdFx0Y29uc3QgdXNlckxpbmtUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0ZXh0Q29udGVudD8udG9TdHJpbmcoKTtcblx0XHRpZiAodXNlckxpbmtUZXh0KSB7XG5cdFx0XHR1c2Vyc1t1c2Vycy5sZW5ndGhdID0gdXNlckxpbmtUZXh0OyAvLyBSZXBsYWNlIGB1c2Vycy5wdXNoKHVzZXJMaW5rVGV4dClgIHRvIGF2b2lkIHBvbHlmaWxsaW5nIGNvcmUtanNcblx0XHR9XG5cdFx0dXNlcnMgPSBbLi4ubmV3IFNldCh1c2VycyldO1xuXHRcdGlmICh1c2Vycy5sZW5ndGggPT09IDUwKSB7XG5cdFx0XHRxdWV1ZVtxdWV1ZS5sZW5ndGhdID0gdXNlcnM7IC8vIFJlcGxhY2UgYHF1ZXVlLnB1c2godXNlcnMpYCB0byBhdm9pZCBwb2x5ZmlsbGluZyBjb3JlLWpzXG5cdFx0XHR1c2VycyA9IFtdO1xuXHRcdH1cblx0fSk7XG5cdGlmICh1c2Vycy5sZW5ndGggPiAwKSB7XG5cdFx0cXVldWVbcXVldWUubGVuZ3RoXSA9IHVzZXJzOyAvLyBSZXBsYWNlIGBxdWV1ZS5wdXNoKHVzZXJzKWAgdG8gYXZvaWQgcG9seWZpbGxpbmcgY29yZS1qc1xuXHR9XG5cdGNvbnN0IGdldFVzZXJuYW1lID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRpZiAoIXVybCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRjb25zdCB1c2VybmFtZTogc3RyaW5nIHwgbnVsbCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgndGl0bGUnLCB1cmwpO1xuXHRcdGNvbnN0IGRlY29kZSA9IChzdHJpbmc6IHN0cmluZywgcmVwbGFjZTogKF9zdHJpbmc6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoXG5cdFx0XHRcdCgoKTogc3RyaW5nID0+IHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZXBsYWNlKHN0cmluZykpO1xuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2Uoc3RyaW5nKS5yZXBsYWNlKC8lKD8hXFxkKykvZywgJyUyNScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkoKVxuXHRcdFx0KTtcblx0XHR9O1xuXHRcdGlmICh1c2VybmFtZSkge1xuXHRcdFx0cmV0dXJuIGRlY29kZSh1c2VybmFtZSwgKHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCdVc2VyOicsICcnKS5yZXBsYWNlKC9fL2csICcgJyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3QgdXNlcm5hbWVNYXRjaDogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSB1cmwubWF0Y2goL1xcL3dpa2lcXC9Vc2VyOiguKz8pJC8pO1xuXHRcdGlmICh1c2VybmFtZU1hdGNoPy5bMV0pIHtcblx0XHRcdHJldHVybiBkZWNvZGUodXNlcm5hbWVNYXRjaFsxXSwgKHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9fL2csICcgJyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXHRjb25zdCBkb25lID0gKCk6IHZvaWQgPT4ge1xuXHRcdCR1c2VyTGlua3MuZWFjaCgoX2luZGV4OiBudW1iZXIsIGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCAkZWxlbWVudDogSlF1ZXJ5ID0gJChlbGVtZW50KTtcblx0XHRcdGlmICgkZWxlbWVudC5wYXJlbnRzKCdsaScpLmZpbmQoJy5nYWRnZXRzLW1hcmtyaWdodHMnKS5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdXNlcm5hbWU6IHN0cmluZyA9IGdldFVzZXJuYW1lKCRlbGVtZW50LmF0dHIoJ2hyZWYnKSA/PyAnJyk7XG5cdFx0XHRpZiAoIXVzZXJuYW1lKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0ICRzdXBzOiBKUXVlcnkgPSAkKCc8c3Bhbj4nKS5hZGRDbGFzcygnZ2FkZ2V0cy1tYXJrcmlnaHRzJyk7XG5cdFx0XHRmb3IgKGNvbnN0IGdyb3VwIGluIGdyb3Vwcykge1xuXHRcdFx0XHRpZiAoIU9iamVjdC5oYXNPd24oZ3JvdXBzLCBncm91cCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBncm91cHNHcm91cDogc3RyaW5nW10gPSBncm91cHNbZ3JvdXAgYXMgbmV2ZXJdID8/IFtdO1xuXHRcdFx0XHRpZiAoIWdyb3Vwc0dyb3VwLmluY2x1ZGVzKHVzZXJuYW1lKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGNsYXNzTmFtZTogc3RyaW5nID0gYGdhZGdldHMtbWFya3JpZ2h0c19fJHtncm91cH1gO1xuXHRcdFx0XHRpZiAoJHN1cHMuZmluZCgnc3VwJykuaGFzQ2xhc3MoY2xhc3NOYW1lKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQkc3Vwcy5hcHBlbmQoXG5cdFx0XHRcdFx0Ly8gVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSB1c2VkIGhlcmU6XG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fcmVzcG9uc2libGVvcGVyYXRvclxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX3N0ZXdhcmRcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19jaGVja3VzZXJcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19zdXBwcmVzc1xuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX3N5c29wXG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19faW50ZXJmYWNlLWFkbWluXG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fdGVtcGxhdGVlZGl0b3Jcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19pbXBvcnRlclxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX3BhdHJvbGxlclxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX2F1dG9wYXRyb2xsZWRcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19ldmVudHNwb25zb3Jcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19tYXNzbWVzc2FnZS1zZW5kZXJcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19jb25maXJtZWRcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19hdXRvY29uZmlybWVkXG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fYm90XG5cdFx0XHRcdFx0Ly8gKiBnYWRnZXQtbWFya3JpZ2h0c19fZmxvb2Rcblx0XHRcdFx0XHQvLyAqIGdhZGdldC1tYXJrcmlnaHRzX19pcGJsb2NrLWV4ZW1wdFxuXHRcdFx0XHRcdC8vICogZ2FkZ2V0LW1hcmtyaWdodHNfX3JucnN2ZXJpZnktZXhlbXB0XG5cdFx0XHRcdFx0JCgnPHN1cD4nKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKGNsYXNzTmFtZSlcblx0XHRcdFx0XHRcdC5hdHRyKHtcblx0XHRcdFx0XHRcdFx0YWx0OiBnZXRNZXNzYWdlKGdyb3VwIGFzIFVzZXJSaWdodHMpLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZShncm91cCBhcyBVc2VyUmlnaHRzKSxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHQkZWxlbWVudC5hZnRlcigkc3Vwcyk7XG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IGFwaTogbXcuQXBpID0gaW5pdE13QXBpKCdNYXJrUmlnaHRzLzEuMScpO1xuXHRmb3IgKGNvbnN0IHVzdXNlcnMgb2YgcXVldWUpIHtcblx0XHRjb25zdCBwYXJhbXM6IEFwaVF1ZXJ5VXNlcnNQYXJhbXMgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdGxpc3Q6ICd1c2VycycsXG5cdFx0XHR1c3Byb3A6ICdncm91cHMnLFxuXHRcdFx0dXN1c2Vycyxcblx0XHR9O1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLmdldChwYXJhbXMpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcblx0XHRjb25zdCBfdXNlcnM6IHtncm91cHM6IHN0cmluZzsgbmFtZTogc3RyaW5nfVtdID0gcmVzcG9uc2VbJ3F1ZXJ5J10/LnVzZXJzID8/IFtdO1xuXHRcdGZvciAoY29uc3QgdXNlciBvZiBfdXNlcnMpIHtcblx0XHRcdGlmICghdXNlciB8fCAhdXNlci5ncm91cHMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IGdyb3VwIGluIGdyb3Vwcykge1xuXHRcdFx0XHRpZiAoIU9iamVjdC5oYXNPd24oZ3JvdXBzLCBncm91cCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBncm91cHNHcm91cDogc3RyaW5nW10gPSBncm91cHNbZ3JvdXAgYXMgbmV2ZXJdIGFzIHN0cmluZ1tdO1xuXHRcdFx0XHRpZiAodXNlci5ncm91cHMuaW5jbHVkZXMoZ3JvdXApKSB7XG5cdFx0XHRcdFx0Z3JvdXBzR3JvdXBbZ3JvdXBzR3JvdXAubGVuZ3RoXSA9IHVzZXIubmFtZTsgLy8gUmVwbGFjZSBgZ3JvdXBzR3JvdXAucHVzaCh1c2VyLm5hbWUpYCB0byBhdm9pZCBwb2x5ZmlsbGluZyBjb3JlLWpzXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9uZSgpO1xuXHR9XG59O1xuIiwgIi8qKlxuICogQGRlc2NyaXB0aW9uIOWcqOacgOi/keS/ruaUueOAgeebkeinhuWIl+ihqOOAgeadoeebruWOhuWPsuiusOW9leetieS9jee9ruS7peeJueauiuagvOW8j+aYvuekuuacieeJueauiuadg+mZkOeahOeUqOaIt1xuICovXG5pbXBvcnQge21hcmtVc2VyUmlnaHRzfSBmcm9tICcuL21vZHVsZXMvY29yZSc7XG5cbm13Lmhvb2soJ3dpa2lwYWdlLmNvbnRlbnQnKS5hZGQoZnVuY3Rpb24gbWFya1JpZ2h0cygkY29udGVudCk6IHZvaWQge1xuXHRpZiAoJGNvbnRlbnQuYXR0cignaWQnKSA9PT0gJ213LWNvbnRlbnQtdGV4dCcgfHwgJGNvbnRlbnQuaGFzQ2xhc3MoJ213LWNoYW5nZXNsaXN0JykpIHtcblx0XHR2b2lkIG1hcmtVc2VyUmlnaHRzKCRjb250ZW50KTtcblx0fVxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPLFdBQVEsWUFBWSxPQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFB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RixVQUFBSSxFQUFBLEdBQUExQyxRQUEyQjtBQUFBLGdCQUFoQjJDLE9BQUFILE1BQUFJO0FBQ1YsY0FBSSxDQUFDRCxRQUFRLENBQUNBLEtBQUt2RSxRQUFRO0FBQzFCO1VBQ0Q7QUFDQSxxQkFBV3FDLFNBQVNyQyxRQUFRO0FBQzNCLGdCQUFJLENBQUN1QyxPQUFPQyxPQUFPeEMsUUFBUXFDLEtBQUssR0FBRztBQUNsQztZQUNEO0FBQ0Esa0JBQU1JLGNBQXdCekMsT0FBT3FDLEtBQWM7QUFDbkQsZ0JBQUlrQyxLQUFLdkUsT0FBTzBDLFNBQVNMLEtBQUssR0FBRztBQUNoQ0ksMEJBQVlBLFlBQVkzQixNQUFNLElBQUl5RCxLQUFLRTtZQUN4QztVQUNEO1FBQ0Q7TUFBQSxTQUFBQyxLQUFBO0FBQUFSLGtCQUFBUyxFQUFBRCxHQUFBO01BQUEsVUFBQTtBQUFBUixrQkFBQVUsRUFBQTtNQUFBO0FBQ0FoRCxXQUFLO0lBQ047RUFDRCxDQUFBO0FBQUEsU0FBQSxTQWxJYTNCLGdCQUFBNEUsSUFBQTtBQUFBLFdBQUEzRSxLQUFBNEUsTUFBQSxNQUFBQyxTQUFBO0VBQUE7QUFBQSxFQUFBOztBQzFCYjVELEdBQUc2RCxLQUFLLGtCQUFrQixFQUFFQyxJQUFJLFNBQVNDLFdBQVc5RSxVQUFnQjtBQUNuRSxNQUFJQSxTQUFTOEIsS0FBSyxJQUFJLE1BQU0scUJBQXFCOUIsU0FBU3lDLFNBQVMsZ0JBQWdCLEdBQUc7QUFDckYsU0FBSzVDLGVBQWVHLFFBQVE7RUFDN0I7QUFDRCxDQUFDOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiU2V0IiwgIm1vZHVsZSIsICJTZXQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiU2V0IiwgIiQiLCAibW9kdWxlIiwgIlNldCIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJyZXF1aXJlIiwgImdldEkxOG5NZXNzYWdlcyIsICJyZXNwb25zaWJsZW9wZXJhdG9yIiwgImxvY2FsaXplIiwgImVuIiwgInN0ZXdhcmQiLCAiY2hlY2t1c2VyIiwgInN1cHByZXNzIiwgInN5c29wIiwgInRlbXBsYXRlZWRpdG9yIiwgImltcG9ydGVyIiwgInBhdHJvbGxlciIsICJhdXRvcGF0cm9sbGVkIiwgImV2ZW50c3BvbnNvciIsICJjb25maXJtZWQiLCAiYXV0b2NvbmZpcm1lZCIsICJib3QiLCAiZmxvb2QiLCAiaTE4bk1lc3NhZ2VzIiwgImdldE1lc3NhZ2UiLCAia2V5IiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJncm91cHMiLCAibWFya1VzZXJSaWdodHMiLCAiX3JlZiIsICJfYXN5bmNUb0dlbmVyYXRvciIsICIkY29udGVudCIsICIkdXNlckxpbmtzIiwgImZpbmQiLCAidXNlcnMiLCAicXVldWUiLCAiZWFjaCIsICJfaW5kZXgiLCAidGV4dENvbnRlbnQiLCAidXNlckxpbmtUZXh0IiwgInRvU3RyaW5nIiwgImxlbmd0aCIsICJTZXQiLCAiZ2V0VXNlcm5hbWUiLCAidXJsIiwgInVzZXJuYW1lIiwgIm13IiwgInV0aWwiLCAiZ2V0UGFyYW1WYWx1ZSIsICJkZWNvZGUiLCAic3RyaW5nIiwgInJlcGxhY2UiLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwgInVzZXJuYW1lTWF0Y2giLCAibWF0Y2giLCAiZG9uZSIsICJlbGVtZW50IiwgIl8kZWxlbWVudCRhdHRyIiwgIiRlbGVtZW50IiwgIiQiLCAicGFyZW50cyIsICJhdHRyIiwgIiRzdXBzIiwgImFkZENsYXNzIiwgImdyb3VwIiwgIl9ncm91cHMkZ3JvdXAiLCAiT2JqZWN0IiwgImhhc093biIsICJncm91cHNHcm91cCIsICJpbmNsdWRlcyIsICJjbGFzc05hbWUiLCAiY29uY2F0IiwgImhhc0NsYXNzIiwgImFwcGVuZCIsICJhbHQiLCAidGl0bGUiLCAiYWZ0ZXIiLCAiYXBpIiwgImluaXRNd0FwaSIsICJfaSIsICJfcXVldWUiLCAiX3Jlc3BvbnNlJHF1ZXJ5JHVzZXJzIiwgIl9yZXNwb25zZSRxdWVyeSIsICJ1c3VzZXJzIiwgInBhcmFtcyIsICJhY3Rpb24iLCAiZm9ybWF0IiwgImZvcm1hdHZlcnNpb24iLCAibGlzdCIsICJ1c3Byb3AiLCAicmVzcG9uc2UiLCAiZ2V0IiwgIl91c2VycyIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAiLCAicyIsICJuIiwgInVzZXIiLCAidmFsdWUiLCAibmFtZSIsICJlcnIiLCAiZSIsICJmIiwgIl94IiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJob29rIiwgImFkZCIsICJtYXJrUmlnaHRzIl0KfQo= diff --git a/dist/Navigation_popups/Navigation_popups.js b/dist/Navigation_popups/Navigation_popups.js index a393ca98..65cdf1d0 100644 --- a/dist/Navigation_popups/Navigation_popups.js +++ b/dist/Navigation_popups/Navigation_popups.js @@ -28,9 +28,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -44,9 +44,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -58,9 +58,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -71,9 +71,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -84,9 +84,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -96,9 +96,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -110,9 +110,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -125,9 +125,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -141,9 +141,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -154,9 +154,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -171,9 +171,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -181,9 +181,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -194,9 +194,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -206,9 +206,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -219,9 +219,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -230,9 +230,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -245,18 +245,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator2 = globalThis2.navigator; @@ -265,9 +265,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -292,9 +292,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -308,18 +308,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -335,9 +335,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -350,9 +350,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -364,9 +364,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -377,9 +377,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -395,17 +395,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -420,9 +420,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -430,18 +430,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -450,9 +450,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -462,9 +462,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -475,9 +475,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -489,9 +489,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -511,9 +511,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -539,9 +539,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -552,9 +552,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -566,9 +566,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -583,9 +583,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -608,9 +608,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -624,9 +624,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -638,9 +638,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -684,9 +684,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -700,9 +700,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -720,9 +720,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -737,9 +737,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -748,9 +748,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -761,17 +761,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -844,9 +844,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -899,9 +899,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -934,9 +934,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -947,9 +947,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -959,9 +959,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -973,9 +973,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -986,9 +986,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -997,9 +997,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1032,9 +1032,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1056,9 +1056,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1072,9 +1072,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1085,17 +1085,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1111,9 +1111,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1133,9 +1133,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1154,9 +1154,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1197,9 +1197,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1208,9 +1208,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1235,9 +1235,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1248,9 +1248,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -1287,9 +1287,9 @@ var require_es_array_push = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/delete-property-or-throw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/delete-property-or-throw.js var require_delete_property_or_throw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/delete-property-or-throw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/delete-property-or-throw.js"(exports, module2) { "use strict"; var tryToString = require_try_to_string(); var $TypeError = TypeError; @@ -1299,9 +1299,9 @@ var require_delete_property_or_throw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.unshift.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.unshift.js var require_es_array_unshift = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.unshift.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.unshift.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -1342,9 +1342,9 @@ var require_es_array_unshift = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in-accessor.js var require_define_built_in_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in-accessor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in-accessor.js"(exports, module2) { "use strict"; var makeBuiltIn = require_make_built_in(); var defineProperty = require_object_define_property(); @@ -1356,9 +1356,9 @@ var require_define_built_in_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/regexp-flags.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/regexp-flags.js var require_regexp_flags = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/regexp-flags.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/regexp-flags.js"(exports, module2) { "use strict"; var anObject = require_an_object(); module2.exports = function() { @@ -1377,9 +1377,9 @@ var require_regexp_flags = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.regexp.flags.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.regexp.flags.js var require_es_regexp_flags = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.regexp.flags.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.regexp.flags.js"() { "use strict"; var globalThis2 = require_global_this(); var DESCRIPTORS = require_descriptors(); @@ -5661,6 +5661,7 @@ var popups = () => { popTipsSoonFn("popupImage".concat(id))(); break; } + /* falls through */ case "sizetoggle": a.onclick = toggleSize; a.title = popupString("Toggle image size"); @@ -7026,6 +7027,7 @@ var popups = () => { case "userPage": case "blocklog": this.article = this.article.userName(true); + /* falls through */ case "pagelog": case "deletelog": case "protectlog": @@ -7139,6 +7141,7 @@ var popups = () => { case "markpatrolled": case "edit": delete this.oldid; + /* falls through */ case "view": case "purge": case "render": @@ -7251,6 +7254,7 @@ var popups = () => { break; case "togglePreviews": this.text = popupString(pg.option.simplePopups ? "enable previews" : "disable previews"); + /* falls through */ case "disablePopups": case "purgePopups": this.print = popupMenuLink; @@ -8632,4 +8636,4 @@ $(popups); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2hpZnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmZsYWdzLmpzIiwgInNyYy9OYXZpZ2F0aW9uX3BvcHVwcy9tb2R1bGVzL2FwaS50cyIsICJzcmMvTmF2aWdhdGlvbl9wb3B1cHMvbW9kdWxlcy9zdHJpbmcudHMiLCAic3JjL05hdmlnYXRpb25fcG9wdXBzL21vZHVsZXMvY29yZS5qcyIsICJzcmMvTmF2aWdhdGlvbl9wb3B1cHMvTmF2aWdhdGlvbl9wb3B1cHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggPD0gMTIxIGFuZCBTYWZhcmkgPD0gMTUuNDsgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG5cbi8vIElFOC1cbnZhciBJTkNPUlJFQ1RfUkVTVUxUID0gW10udW5zaGlmdCgwKSAhPT0gMTtcblxuLy8gVjggfiBDaHJvbWUgPCA3MSBhbmQgU2FmYXJpIDw9IDE1LjQsIEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3JcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkudW5zaGlmdCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9SRVNVTFQgfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnVuc2hpZnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudW5zaGlmdFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHVuc2hpZnQ6IGZ1bmN0aW9uIHVuc2hpZnQoaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYgKGFyZ0NvdW50KSB7XG4gICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgICAgdmFyIGsgPSBsZW47XG4gICAgICB3aGlsZSAoay0tKSB7XG4gICAgICAgIHZhciB0byA9IGsgKyBhcmdDb3VudDtcbiAgICAgICAgaWYgKGsgaW4gTykgT1t0b10gPSBPW2tdO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ0NvdW50OyBqKyspIHtcbiAgICAgICAgT1tqXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgIH1cbiAgICB9IHJldHVybiBzZXRBcnJheUxlbmd0aChPLCBsZW4gKyBhcmdDb3VudCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ2QnKSAtPiAvLi9kIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgRk9SQ0VEID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgSU5ESUNFU19TVVBQT1JUID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBSZWdFeHAoJy4nLCAnZCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIElORElDRVNfU1VQUE9SVCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIE8gPSB7fTtcbiAgLy8gbW9kZXJuIFY4IGJ1Z1xuICB2YXIgY2FsbHMgPSAnJztcbiAgdmFyIGV4cGVjdGVkID0gSU5ESUNFU19TVVBQT1JUID8gJ2RnaW1zeScgOiAnZ2ltc3knO1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoa2V5LCBjaHIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywga2V5LCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbHMgKz0gY2hyO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSB9KTtcbiAgfTtcblxuICB2YXIgcGFpcnMgPSB7XG4gICAgZG90QWxsOiAncycsXG4gICAgZ2xvYmFsOiAnZycsXG4gICAgaWdub3JlQ2FzZTogJ2knLFxuICAgIG11bHRpbGluZTogJ20nLFxuICAgIHN0aWNreTogJ3knXG4gIH07XG5cbiAgaWYgKElORElDRVNfU1VQUE9SVCkgcGFpcnMuaGFzSW5kaWNlcyA9ICdkJztcblxuICBmb3IgKHZhciBrZXkgaW4gcGFpcnMpIGFkZEdldHRlcihrZXksIHBhaXJzW2tleV0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnKS5nZXQuY2FsbChPKTtcblxuICByZXR1cm4gcmVzdWx0ICE9PSBleHBlY3RlZCB8fCBjYWxscyAhPT0gZXhwZWN0ZWQ7XG59KTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xuaWYgKEZPUkNFRCkgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVnRXhwRmxhZ3Ncbn0pO1xuIiwgImltcG9ydCB7aW5pdE13QXBpfSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBhcGk6IG13LkFwaSA9IGluaXRNd0FwaSgnTmF2aWdhdGlvbiBwb3B1cHMvMS4wJyk7XG5cbmV4cG9ydCB7YXBpfTtcbiIsICIvLyBUcmFuc2xhdGFibGUgc3RyaW5nc1xuY29uc3QgbWVzc2FnZToge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7XG5cdC8vIHN1bW1hcnkgZGF0YSwgc2VhcmNoaW5nIGV0Yy5cblx0YXJ0aWNsZTogd2luZG93LndnVUxTKCfmnaHnm64nLCAn5qKd55uuJyksXG5cdGNhdGVnb3J5OiB3aW5kb3cud2dVTFMoJ+S4quWIhuexuycsICflgIvliIbpoZ4nKSxcblx0Y2F0ZWdvcmllczogd2luZG93LndnVUxTKCfkuKrliIbnsbsnLCAn5YCL5YiG6aGeJyksXG5cdGltYWdlOiB3aW5kb3cud2dVTFMoJ+S4quaWh+S7ticsICflgIvmqpTmoYgnKSxcblx0aW1hZ2VzOiB3aW5kb3cud2dVTFMoJ+S4quaWh+S7ticsICflgIvmqpTmoYgnKSxcblx0c3R1YjogJ+Wwj+S9nOWTgScsXG5cdCdzZWN0aW9uIHN0dWInOiB3aW5kb3cud2dVTFMoJ+Wwj+eroOiKgicsICflsI/nq6Dnr4AnKSxcblx0J0VtcHR5IHBhZ2UnOiB3aW5kb3cud2dVTFMoJ+epuumhtemdoicsICfnqbrpoIHpnaInKSxcblx0a0I6IHdpbmRvdy53Z1VMUygn5Y2D5a2X6IqCPHN1Yj7vvIjku6UxMDAw5Li65LiA6L+b77yJPC9zdWI+JywgJ+WNg+S9jeWFg+e1hDxzdWI+77yI5LulMTAwMOeCuuS4gOmAsu+8iTwvc3ViPicpLFxuXHRieXRlczogd2luZG93LndnVUxTKCflrZfoioInLCAn5L2N5YWD57WEJyksXG5cdGRheTogJ+WkqScsXG5cdGRheXM6ICflpKknLFxuXHRob3VyOiB3aW5kb3cud2dVTFMoJ+Wwj+aXticsICflsI/mmYInKSxcblx0aG91cnM6IHdpbmRvdy53Z1VMUygn5bCP5pe2JywgJ+Wwj+aZgicpLFxuXHRtaW51dGU6ICfliIYnLFxuXHRtaW51dGVzOiAn5YiGJyxcblx0c2Vjb25kOiAn56eSJyxcblx0c2Vjb25kczogJ+enkicsXG5cdHdlZWs6ICflkagnLFxuXHR3ZWVrczogJ+WRqCcsXG5cdG1vbnRoOiAn5pyIJyxcblx0bW9udGhzOiAn5pyIJyxcblx0eWVhcjogJ+W5tCcsXG5cdHllYXJzOiAn5bm0Jyxcblx0c2VhcmNoOiB3aW5kb3cud2dVTFMoJ+aQnOe0oicsICfmkJzlsIsnKSxcblx0U2VhcmNoSGludDogd2luZG93LndnVUxTKCfmkJzntKLljIXlkKsgJXMg55qE6aG16Z2iJywgJ+aQnOWwi+WMheWQqyAlcyDnmoTpoIHpnaInKSxcblx0d2ViOiAnQmluZycsXG5cdGdsb2JhbDogJ+WFqOWfnycsXG5cdCdtb3JlLi4uJzogJ+abtOWkmuKApuKApicsXG5cdC8vIGFydGljbGUtcmVsYXRlZCBhY3Rpb25zIGFuZCBpbmZvXG5cdC8vIChzb21lIGFjdGlvbnMgYWxzbyBhcHBseSB0byB1c2VyIHBhZ2VzKVxuXHRhY3Rpb25zOiB3aW5kb3cud2dVTFMoJ+aTjeS9nCcsICfli5XkvZwnKSxcblx0Ly8gLy8vIHZpZXcgYXJ0aWNsZXMgYW5kIHZpZXcgdGFsa1xuXHRwb3B1cHNNZW51OiAnUG9wdXBzJyxcblx0J2Rpc2FibGUgcHJldmlld3MnOiB3aW5kb3cud2dVTFMoJ+emgeeUqOmihOiniCcsICfnpoHnlKjpoJDopr0nKSxcblx0dG9nZ2xlUHJldmlld3NIaW50OiB3aW5kb3cud2dVTFMoJ+WIh+aNouacrOmhtSBQb3B1cHMg55qE6aKE6KeI5byA5YWzJywgJ+WIh+aPm+acrOmggSBQb3B1cHMg55qE6aCQ6Ka96ZaL6ZecJyksXG5cdCd0b2dnbGUgcHJldmlld3MnOiB3aW5kb3cud2dVTFMoJ+WIh+aNoumihOiniOW8gOWFsycsICfliIfmj5vpoJDopr3plovpl5wnKSxcblx0cmVzZXQ6IHdpbmRvdy53Z1VMUygn5aSN5L2NJywgJ+ikh+S9jScpLFxuXHRkaXNhYmxlOiAn56aB55SoIFBvcHVwcycsXG5cdGRpc2FibGVQb3B1cHNIaW50OiB3aW5kb3cud2dVTFMoXG5cdFx0J+WcqOacrOmhteemgeeUqCBQb3B1cHPvvIzliLfmlrDpobXpnaLku6Xph43mlrDlkK/nlKjjgIInLFxuXHRcdCflnKjmnKzpoIHnpoHnlKggUG9wdXBz77yM6YeN5paw5pW055CG6aCB6Z2i5Lul6YeN5paw5ZWf55So44CCJ1xuXHQpLFxuXHRwdXJnZVBvcHVwc0hpbnQ6IHdpbmRvdy53Z1VMUygn5aSN5L2NIFBvcHVwc++8jOa4hemZpOaJgOaciee8k+WtmOaVsOaNruOAgicsICfopIfkvY0gUG9wdXBz77yM5riF6Zmk5omA5pyJ5b+r5Y+W6LOH5paZ44CCJyksXG5cdFBvcHVwc0hpbnQ6IHdpbmRvdy53Z1VMUygn5aSN5L2NIFBvcHVwc++8jOa4hemZpOaJgOaciee8k+WtmOaVsOaNruOAgicsICfopIfkvY0gUG9wdXBz77yM5riF6Zmk5omA5pyJ5b+r5Y+W6LOH5paZ44CCJyksXG5cdHNwYWNlYmFyOiAn56m65qC8Jyxcblx0dmlldzogd2luZG93LndnVUxTKCfmn6XnnIsnLCAn5qqi6KaWJyksXG5cdCd2aWV3IGFydGljbGUnOiB3aW5kb3cud2dVTFMoJ+afpeeci+adoeebricsICfmqqLoppbmop3nm64nKSxcblx0dmlld0hpbnQ6IHdpbmRvdy53Z1VMUygn5YmN5b6AICVzJywgJ+WJjeW+gCAlcycpLFxuXHR0YWxrOiB3aW5kb3cud2dVTFMoJ+iuqOiuuicsICfoqI7oq5YnKSxcblx0J3RhbGsgcGFnZSc6IHdpbmRvdy53Z1VMUygn6K6o6K666aG1JywgJ+iojuirlumggScpLFxuXHQndGhpcyZuYnNwO3JldmlzaW9uJzogd2luZG93LndnVUxTKCfmraTkv67orqLniYjmnKwnLCAn5q2k5L+u6KiC54mI5pysJyksXG5cdCdyZXZpc2lvbiAlcyBvZiAlcyc6IHdpbmRvdy53Z1VMUygn6aG16Z2iICQyIOeahOS/ruiuoueJiOacrCAkMScsICfpoIHpnaIgJDIg55qE5L+u6KiC54mI5pysICQxJyksXG5cdCdSZXZpc2lvbiAlcyBvZiAlcyc6IHdpbmRvdy53Z1VMUygn6aG16Z2iICQyIOeahOS/ruiuoueJiOacrCAkMScsICfpoIHpnaIgJDIg55qE5L+u6KiC54mI5pysICQxJyksXG5cdCd0aGUgcmV2aXNpb24gcHJpb3IgdG8gcmV2aXNpb24gJXMgb2YgJXMnOiB3aW5kb3cud2dVTFMoXG5cdFx0J+mhtemdoiAkMiDnmoTkv67orqLniYjmnKwgJDEg5LmL5YmN55qE5L+u6K6i54mI5pysJyxcblx0XHQn6aCB6Z2iICQyIOeahOS/ruiogueJiOacrCAkMSDkuYvliY3nmoTkv67oqILniYjmnKwnXG5cdCksXG5cdCdUb2dnbGUgaW1hZ2Ugc2l6ZSc6IHdpbmRvdy53Z1VMUygn54K55Ye75YiH5o2i5Zu+54mH5aSn5bCPJywgJ+m7nuaTiuWIh+aPm+WclueJh+Wkp+WwjycpLFxuXHRkZWw6IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIoOmZpCcpLFxuXHQvLyAvLy8gZGVsZXRlLCBwcm90ZWN0LCBtb3ZlXG5cdGRlbGV0ZTogd2luZG93LndnVUxTKCfliKDpmaQnLCAn5Yig6ZmkJyksXG5cdGRlbGV0ZUhpbnQ6IHdpbmRvdy53Z1VMUygn5Yig6ZmkICVzJywgJ+WIoOmZpCAlcycpLFxuXHR1bmRlbGV0ZVNob3J0OiB3aW5kb3cud2dVTFMoJ+aBouWkjScsICfmgaLlvqknKSxcblx0VW5kZWxldGVIaW50OiB3aW5kb3cud2dVTFMoJ+aBouWkjSAlcycsICfmgaLlvqkgJXMnKSxcblx0cHJvdGVjdDogd2luZG93LndnVUxTKCfkv53miqQnLCAn5L+d6K23JyksXG5cdHByb3RlY3RIaW50OiB3aW5kb3cud2dVTFMoJ+S/neaKpCAlcycsICfkv53orbcgJXMnKSxcblx0dW5wcm90ZWN0U2hvcnQ6IHdpbmRvdy53Z1VMUygn6Kej6ZmkJywgJ+ino+mZpCcpLFxuXHR1bnByb3RlY3RIaW50OiB3aW5kb3cud2dVTFMoJ+ino+mZpOWvuSAlcyDnmoTkv53miqQnLCAn6Kej6Zmk5bCNICVzIOeahOS/neittycpLFxuXHRtb3ZlOiB3aW5kb3cud2dVTFMoJ+enu+WKqCcsICfnp7vli5UnKSxcblx0J21vdmUgcGFnZSc6IHdpbmRvdy53Z1VMUygn56e75Yqo6aG16Z2iJywgJ+enu+WLlemggemdoicpLFxuXHRNb3ZlcGFnZUhpbnQ6IHdpbmRvdy53Z1VMUygn5L+u5pS5ICVzIOeahOagh+mimCcsICfkv67mlLkgJXMg55qE5qiZ6aGMJyksXG5cdGVkaXQ6IHdpbmRvdy53Z1VMUygn57yW6L6RJywgJ+e3qOi8rycpLFxuXHQvLyAvLy8gZWRpdCBhcnRpY2xlcyBhbmQgdGFsa1xuXHQnZWRpdCBhcnRpY2xlJzogd2luZG93LndnVUxTKCfnvJbovpHmnaHnm64nLCAn57eo6Lyv5qKd55uuJyksXG5cdGVkaXRIaW50OiB3aW5kb3cud2dVTFMoJ+S/ruaUuSAlcyDnmoTlhoXlrrknLCAn5L+u5pS5ICVzIOeahOWFp+WuuScpLFxuXHQnZWRpdCB0YWxrJzogd2luZG93LndnVUxTKCfnvJbovpHorqjorrrpobUnLCAn57eo6Lyv5bCN6Kmx6aCBJyksXG5cdG5ldzogd2luZG93LndnVUxTKCfmlrAnLCAn5pawJyksXG5cdCduZXcgdG9waWMnOiB3aW5kb3cud2dVTFMoJ+aWsOivnemimCcsICfmlrDoqbHpoYwnKSxcblx0bmV3U2VjdGlvbkhpbnQ6IHdpbmRvdy53Z1VMUygn5ZyoICVzIOWinuWKoOaWsOeahOiuqOiuuuivnemimCcsICflnKggJXMg5aKe5Yqg5paw55qE6KiO6KuW6Kmx6aGMJyksXG5cdCdudWxsIGVkaXQnOiB3aW5kb3cud2dVTFMoJ+epuue8lui+kScsICfnqbrnt6jovK8nKSxcblx0bnVsbEVkaXRIaW50OiB3aW5kb3cud2dVTFMoJ+i/m+ihjOS4gOasoeWvuSAlcyDnmoTnqbrnvJbovpEnLCAn6KO96YCg5LiA5qyh5bCNICVzIOeahOepuue3qOi8rycpLFxuXHRoaXN0OiB3aW5kb3cud2dVTFMoJ+WOhuWPsicsICfmrbflj7InKSxcblx0Ly8gLy8vIGhpc3RvcnksIGRpZmZzLCBlZGl0b3JzLCByZWxhdGVkXG5cdGhpc3Rvcnk6IHdpbmRvdy53Z1VMUygn5Y6G5Y+yJywgJ+att+WPsicpLFxuXHRoaXN0b3J5SGludDogd2luZG93LndnVUxTKCclcyDnmoTkv67orqLljoblj7InLCAnJXMg55qE5L+u6KiC5q235Y+yJyksXG5cdGxhc3Q6IHdpbmRvdy53Z1VMUygn5LmL5YmNJywgJ+S5i+WJjScpLFxuXHQvLyBbW01lZGlhV2lraTpMYXN0XV1cblx0bGFzdEVkaXQ6IHdpbmRvdy53Z1VMUygn5pyA6L+R5pu05pS5JywgJ+acgOi/keabtOaUuScpLFxuXHQnc2hvdyBsYXN0IGVkaXQnOiB3aW5kb3cud2dVTFMoJ+acgOi/keS4gOasoeabtOaUuScsICfmnIDmlrDkuIDmrKHkv67oqIInKSxcblx0J1Nob3cgdGhlIGxhc3QgZWRpdCc6IHdpbmRvdy53Z1VMUygn5pi+56S65pyA6L+R5LiA5qyh5pu05pS555qE5beu5byCJywgJ+mhr+ekuuacgOaWsOS4gOasoeS/ruiogueahOW3rueVsCcpLFxuXHRsYXN0Q29udHJpYjogd2luZG93LndnVUxTKCfmnIDov5HnvJbovpEnLCAn5pyA6L+R57eo6LyvJyksXG5cdCdsYXN0IHNldCBvZiBlZGl0cyc6IHdpbmRvdy53Z1VMUygn5pyA6L+R57yW6L6RJywgJ+acgOi/kee3qOi8rycpLFxuXHRsYXN0Q29udHJpYkhpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S655Sx5pyA5ZCO5LiA5L2N57yW6L6R6ICF6YCg5oiQ55qE5beu5byCJywgJ+mhr+ekuueUseacgOW+jOS4gOS9jee3qOi8r+iAheijvemAoOeahOW3rueVsCcpLFxuXHRjdXI6IHdpbmRvdy53Z1VMUygn5b2T5YmNJywgJ+eVtuWJjScpLFxuXHRkaWZmQ3VyOiB3aW5kb3cud2dVTFMoJ+S4juW9k+WJjeeJiOacrOeahOW3ruW8gicsICfoiIfnm67liY3niYjmnKznmoTlt67nlbAnKSxcblx0J1Nob3cgY2hhbmdlcyBzaW5jZSByZXZpc2lvbiAlcyc6IHdpbmRvdy53Z1VMUygn5pi+56S66Ieq5L+u6K6i54mI5pysICVzIOeahOW3ruW8gicsICfpoa/npLroh6rkv67oqILniYjmnKwgJXMg55qE5beu55WwJyksXG5cdCclcyBvbGQnOiB3aW5kb3cud2dVTFMoJyVzIOWJjeeahOacgOWQjueJiOacrCcsICclcyDliY3nmoTmnIDlkI7niYjmnKwnKSxcblx0Ly8gYXMgaW4gNCB3ZWVrcyBvbGRcblx0b2xkRWRpdDogd2luZG93LndnVUxTKCfml6fnvJbovpEnLCAn6IiK57eo6LyvJyksXG5cdHB1cmdlOiB3aW5kb3cud2dVTFMoJ+a4hemZpOe8k+WtmCcsICfmuIXpmaTlv6vlj5YnKSxcblx0cHVyZ2VIaW50OiB3aW5kb3cud2dVTFMoJ+a4hemZpOacjeWKoeWZqOS4rSAlcyDnmoTnvJPlrZgnLCAn5riF6Zmk5Ly65pyN5Zmo5LitICVzIOeahOW/q+WPlicpLFxuXHRyYXc6IHdpbmRvdy53Z1VMUygn5rqQ5Luj56CBJywgJ+WOn+Wni+eivCcpLFxuXHRyYXdIaW50OiB3aW5kb3cud2dVTFMoJ+afpeeciyAlcyDnmoTmupDku6PnoIEnLCAn5qqi6KaWICVzIOeahOWOn+Wni+eivCcpLFxuXHRyZW5kZXI6IHdpbmRvdy53Z1VMUygn5LuF5q2j5paHJywgJ+WDheato+aWhycpLFxuXHRyZW5kZXJIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuiAlcyDnmoTnuq9IVE1M6Kej5p6Q77yI5LuF5q2j5paH5YaF5a6577yJJywgJ+mhr+ekuiAlcyDnmoTntJRIVE1M6Kej5p6Q77yI5YOF5q2j5paH5YWn5a6577yJJyksXG5cdCdTaG93IHRoZSBlZGl0IG1hZGUgdG8gZ2V0IHJldmlzaW9uJzogd2luZG93LndnVUxTKCfmmL7npLrnvJbovpHku6XlvpfliLDkv67orqLniYjmnKwnLCAn6aGv56S657eo6Lyv5Lul5b6X5Yiw5L+u6KiC54mI5pysJyksXG5cdHNpbmNlTWU6IHdpbmRvdy53Z1VMUygn6Ieq5oiRJywgJ+iHquaIkScpLFxuXHQnY2hhbmdlcyBzaW5jZSBtaW5lJzogd2luZG93LndnVUxTKCfoh6rmiJHkv67orqLnmoTlt67lvIInLCAn6Ieq5oiR5L+u6KiC55qE5beu55WwJyksXG5cdHNpbmNlTWVIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuuiHquaIkeS4iuasoeS/ruaUueS7peadpeeahOW3ruW8gicsICfpoa/npLroh6rmiJHkuIrmrKHkv67mlLnku6XkvobnmoTlt67nlbAnKSxcblx0XCJDb3VsZG4ndCBmaW5kIGFuIGVkaXQgYnkgJXNcXG5pbiB0aGUgbGFzdCAlcyBlZGl0cyB0b1xcbiVzXCI6IHdpbmRvdy53Z1VMUyhcblx0XHQn5ZyoICQzIOacgOi/kSAkMiDmrKHnvJbovpHkuK3mib7kuI3liLAgJDEg5YGa5Ye655qE5L+u5pS5Jyxcblx0XHQn5ZyoICQzIOacgOi/kSAkMiDmrKHnt6jovK/kuK3mib7kuI3liLAgJDEg5YGa5Ye655qE5L+u5pS5J1xuXHQpLFxuXHRlZHM6IHdpbmRvdy53Z1VMUygn57yW6L6RJywgJ+e3qOi8rycpLFxuXHRlZGl0b3JzOiB3aW5kb3cud2dVTFMoJ+e8lui+keiAhScsICfnt6jovK/ogIUnKSxcblx0ZWRpdG9yTGlzdEhpbnQ6IHdpbmRvdy53Z1VMUygn5YiX5Ye657yW6L6R6L+HICVzIOeahOeUqOaItycsICfliJflh7rnt6jovK/pgY4gJXMg55qE5L2/55So6ICFJyksXG5cdHJlbGF0ZWQ6IHdpbmRvdy53Z1VMUygn55u45YWzJywgJ+ebuOmXnCcpLFxuXHRyZWxhdGVkQ2hhbmdlczogd2luZG93LndnVUxTKCfnm7jlhbPmm7TmlLknLCAn55u46Zec5pu05pS5JyksXG5cdCdyZWxhdGVkIGNoYW5nZXMnOiB3aW5kb3cud2dVTFMoJ+ebuOWFs+abtOaUuScsICfnm7jpl5zmm7TmlLknKSxcblx0UmVjZW50Y2hhbmdlc2xpbmtlZEhpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S655u45YWzICVzIOeahOS/ruaUuScsICfpoa/npLrnm7jpl5wgJXMg55qE5L+u5pS5JyksXG5cdGVkaXRPbGQ6IHdpbmRvdy53Z1VMUygn57yW6L6R5pen54mIJywgJ+e3qOi8r+iIiueJiCcpLFxuXHQvLyAvLy8gZWRpdCBvbGQgdmVyc2lvbiwgb3IgcmV2ZXJ0XG5cdHJ2OiB3aW5kb3cud2dVTFMoJ+WbnumAgCcsICfmgaLlvqknKSxcblx0cmV2ZXJ0OiB3aW5kb3cud2dVTFMoJ+WbnumAgCcsICfmgaLlvqknKSxcblx0cmV2ZXJ0SGludDogd2luZG93LndnVUxTKCflm57pgIDliLAgJXMnLCAn5oGi5b6p5YiwICVzJyksXG5cdHVuZG86IHdpbmRvdy53Z1VMUygn5pKk6ZSAJywgJ+aSpOmKtycpLFxuXHR1bmRvSGludDogd2luZG93LndnVUxTKCfmkqTplIDov5nmrKHnvJbovpEnLCAn5pKk6Yq36YCZ5qyh57eo6LyvJyksXG5cdGRlZmF1bHRwb3B1cFJlZGxpbmtTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0J+enu+mZpOWIsOepuumhtemdoltbJXNdXeeahOmTvuaOpe+8iFBvcHVwc++8iScsXG5cdFx0J+enu+mZpOWIsOepuumggemdoltbJXNdXeeahOmAo+e1kO+8iFBvcHVwc++8iSdcblx0KSxcblx0ZGVmYXVsdHBvcHVwRml4RGFic1N1bW1hcnk6IHdpbmRvdy53Z1VMUygn5raI5q2n5LmJW1slc11d5YiwW1slc11d77yIUG9wdXBz77yJJywgJ+a2iOatp+e+qVtbJXNdXeWIsFtbJXNdXe+8iFBvcHVwc++8iScpLFxuXHRkZWZhdWx0cG9wdXBGaXhSZWRpcnNTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0J+W/veeVpeS7jltbJXNdXeWIsFtbJXNdXeeahOmHjeWumuWQke+8iFBvcHVwc++8iScsXG5cdFx0J+W/veeVpeW+nltbJXNdXeWIsFtbJXNdXeeahOmHjeaWsOWwjuWQke+8iFBvcHVwc++8iSdcblx0KSxcblx0ZGVmYXVsdHBvcHVwRXh0ZW5kZWRSZXZlcnRTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0J+WbnumAgOWIsCQy5ZyoJDHml7bnvJbovpHnmoTkv67orqLniYjmnKwkM++8iFBvcHVwc++8iScsXG5cdFx0J+mChOWOn+WIsCQy5ZyoJDHmmYLoo73kvZznmoTkv67oqILniYjmnKwkM++8iFBvcHVwc++8iSdcblx0KSxcblx0ZGVmYXVsdHBvcHVwUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHQn5Zue6YCA5Yiw5L+u6K6i54mI5pysJXPnmoTkuIrkuIDkuKrniYjmnKzvvIhQb3B1cHPvvIknLFxuXHRcdCfpgoTljp/liLDkv67oqILniYjmnKwlc+eahOS4iuS4gOWAi+eJiOacrO+8iFBvcHVwc++8iSdcblx0KSxcblx0ZGVmYXVsdHBvcHVwUmV2ZXJ0U3VtbWFyeTogd2luZG93LndnVUxTKCflm57pgIDliLDkv67orqLniYjmnKwlc++8iFBvcHVwc++8iScsICfpgoTljp/liLDkv67oqILniYjmnKwlc++8iFBvcHVwc++8iScpLFxuXHRkZWZhdWx0cG9wdXBRdWVyaWVkUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHQn5Zue6YCA5Yiw5L+u6K6i54mI5pysJDHnmoTkuIrkuIDkuKrniYjmnKzvvIznlLEkM+WcqCQy5pe257yW6L6R77yIUG9wdXBz77yJJyxcblx0XHQn6YKE5Y6f5Yiw5L+u6KiC54mI5pysJDHnmoTkuIrkuIDlgIvniYjmnKzvvIznlLEkM+WcqCQy5pmC6KO95L2c77yIUG9wdXBz77yJJ1xuXHQpLFxuXHRkZWZhdWx0cG9wdXBRdWVyaWVkUmV2ZXJ0U3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdCflm57pgIDliLAkM+WcqCQy5pe257yW6L6R55qE5L+u6K6i54mI5pysJDHvvIhQb3B1cHPvvIknLFxuXHRcdCfpgoTljp/liLAkM+WcqCQy5pmC6KO95L2c55qE5L+u6KiC54mI5pysJDHvvIhQb3B1cHPvvIknXG5cdCksXG5cdGRlZmF1bHRwb3B1cFJtRGFiTGlua1N1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHQn56e76Zmk5Yiw5raI5q2n5LmJ6aG1W1slc11d55qE6ZO+5o6l77yIUG9wdXBz77yJJyxcblx0XHQn56e76Zmk5Yiw5raI5q2n576p6aCBW1slc11d55qE6YCj57WQ77yIUG9wdXBz77yJJ1xuXHQpLFxuXHRSZWRpcmVjdHM6IHdpbmRvdy53Z1VMUygn6YeN5a6a5ZCRJywgJ+mHjeWumuWQkScpLFxuXHQvLyBhcyBpbiBSZWRpcmVjdHMgdG8gLi4uXG5cdC8vIFwiIHRvIFwiOiB3aW5kb3cud2dVTFMoIFwi5YiwXCIsXCLliLBcIiApLFxuXHQvLyBhcyBpbiBSZWRpcmVjdHMgdG8gLi4uXG5cdCdCeXBhc3MgcmVkaXJlY3QnOiB3aW5kb3cud2dVTFMoJ+W/veeVpemHjeWumuWQkScsICflv73nlaXph43mlrDlsI7lkJEnKSxcblx0J0ZpeCB0aGlzIHJlZGlyZWN0Jzogd2luZG93LndnVUxTKCfkv67lpI3ph43lrprlkJEnLCAn5L+u5b6p6YeN5paw5bCO5ZCRJyksXG5cdGRpc2FtYmlnOiB3aW5kb3cud2dVTFMoJ+a2iOatp+S5iScsICfmtojmrafnvqknKSxcblx0Ly8gLy8vIGFkZCBvciByZW1vdmUgZGFiIGV0Yy5cblx0ZGlzYW1iaWdIaW50OiB3aW5kb3cud2dVTFMoJ+a2iOatp+S5iei/meS4qumTvuaOpeWIsCBbWyVzXV0nLCAn5raI5q2n576p6YCZ5YCL6YCj57WQ5YiwIFtbJXNdXScpLFxuXHQnQ2xpY2sgdG8gZGlzYW1iaWd1YXRlIHRoaXMgbGluayB0bzonOiB3aW5kb3cud2dVTFMoJ+eCueWHu+S7pea2iOatp+S5iei/meS4qumTvuaOpeWIsO+8micsICfpu57mk4rku6XmtojmrafnvqnpgJnlgIvpgKPntZDliLDvvJonKSxcblx0J3JlbW92ZSB0aGlzIGxpbmsnOiB3aW5kb3cud2dVTFMoJ+enu+mZpOmTvuaOpScsICfnp7vpmaTpgKPntZAnKSxcblx0J3JlbW92ZSBhbGwgbGlua3MgdG8gdGhpcyBwYWdlIGZyb20gdGhpcyBhcnRpY2xlJzogd2luZG93LndnVUxTKFxuXHRcdCfnp7vpmaTmraTmnaHnm67liLDov5npobXnmoTmiYDmnInpk77mjqUnLFxuXHRcdCfnp7vpmaTmraTmop3nm67liLDpgJnpoIHnmoTmiYDmnInpgKPntZAnXG5cdCksXG5cdCdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgZGlzYW1iaWcgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZSc6IHdpbmRvdy53Z1VMUyhcblx0XHQn56e76Zmk5q2k5p2h55uu5Yiw6L+Z5raI5q2n5LmJ55qE5omA5pyJ6ZO+5o6lJyxcblx0XHQn56e76Zmk5q2k5qKd55uu5Yiw6YCZ5raI5q2n576p55qE5omA5pyJ6YCj57WQJ1xuXHQpLFxuXHRtYWlubGluazogd2luZG93LndnVUxTKCfkuLvpk77mjqUnLCAn5Li76YCj57WQJyksXG5cdC8vIC8vLyBsaW5rcywgd2F0Y2gsIHVud2F0Y2hcblx0d2lraUxpbms6IHdpbmRvdy53Z1VMUygn5Liq5YaF6YOo6ZO+5o6lJywgJ+S4quWFp+mDqOmAo+e1kCcpLFxuXHR3aWtpTGlua3M6IHdpbmRvdy53Z1VMUygn5Liq5YaF6YOo6ZO+5o6lJywgJ+S4quWFp+mDqOmAo+e1kCcpLFxuXHQnbGlua3MgaGVyZSc6IHdpbmRvdy53Z1VMUygn6ZO+5YWlJywgJ+mPiOWFpScpLFxuXHR3aGF0TGlua3NIZXJlOiB3aW5kb3cud2dVTFMoJ+mTvuWFpemhtemdoicsICfpj4jlhaXpoIHpnaInKSxcblx0J3doYXQgbGlua3MgaGVyZSc6IHdpbmRvdy53Z1VMUygn6ZO+5YWl6aG16Z2iJywgJ+mPiOWFpemggemdoicpLFxuXHRXaGF0bGlua3NoZXJlSGludDogd2luZG93LndnVUxTKCfmmL7npLrpk77mjqXliLAgJXMg55qE6aG16Z2iJywgJ+mhr+ekuumAo+e1kOWIsCAlcyDnmoTpoIHpnaInKSxcblx0dW53YXRjaFNob3J0OiB3aW5kb3cud2dVTFMoJ+WPlua2iCcsICflj5bmtognKSxcblx0d2F0Y2hUaGluZ3k6IHdpbmRvdy53Z1VMUygn55uR6KeGJywgJ+ebo+imlicpLFxuXHQvLyBjYWxsZWQgd2F0Y2hUaGluZ3kgYmVjYXVzZSB7fS53YXRjaCBpcyBhIGZ1bmN0aW9uXG5cdHdhdGNoSGludDogd2luZG93LndnVUxTKCfliqDlhaUgJXMg5Yiw5oiR55qE55uR6KeG5YiX6KGoJywgJ+WKoOWFpSAlcyDliLDmiJHnmoTnm6PoppbliJfooagnKSxcblx0dW53YXRjaEhpbnQ6IHdpbmRvdy53Z1VMUygn5LuO5oiR55qE55uR6KeG5YiX6KGo56e76ZmkICVzJywgJ+W+nuaIkeeahOebo+imluWIl+ihqOenu+mZpCAlcycpLFxuXHQnT25seSBmb3VuZCBvbmUgZWRpdG9yOiAlcyBtYWRlICVzIGVkaXRzJzogd2luZG93LndnVUxTKFxuXHRcdCfku4Xmib7liLDkuIDkvY3nvJbogIXvvJolcyDliLbpgKDkuoYgJXMg5qyh57yW6L6RJyxcblx0XHQn5YOF5om+5Yiw5LiA5L2N57eo6ICF77yaJXMg6KO96YCg5LqGICVzIOasoee3qOi8rydcblx0KSxcblx0JyVzIHNlZW1zIHRvIGJlIHRoZSBsYXN0IGVkaXRvciB0byB0aGUgcGFnZSAlcyc6IHdpbmRvdy53Z1VMUyhcblx0XHQnJXMg55yL5LiK5Y675pivICVzIOi/memhteeahOacgOWQjuS4gOS9jee8luiAhScsXG5cdFx0JyVzIOeci+S4iuWOu+aYryAlcyDpgJnpoIHnmoTmnIDlvozkuIDkvY3nt6jogIUnXG5cdCksXG5cdHJzczogd2luZG93LndnVUxTKCdSU1MnLCAnUlNTJyksXG5cdC8vIGRpZmYgcHJldmlld3Ncblx0J0RpZmYgdHJ1bmNhdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zJzogd2luZG93LndnVUxTKCflh7rkuo7mgKfog73ogIPomZHvvIzlt67lvILlt7LooqvmiKrmlq0nLCAn5Ye65pa85pWI6IO96ICD5oWu77yM5beu55Ww5bey6KKr5oiq5pa3JyksXG5cdCdPbGQgcmV2aXNpb24nOiB3aW5kb3cud2dVTFMoJ+aXp+eJiOacrCcsICfoiIrniYjmnKwnKSxcblx0J05ldyByZXZpc2lvbic6IHdpbmRvdy53Z1VMUygn5paw54mI5pysJywgJ+aWsOeJiOacrCcpLFxuXHQnU29tZXRoaW5nIHdlbnQgd3JvbmcgOi0oJzogd2luZG93LndnVUxTKCflh7rpl67popjkuoYgOi0oJywgJ+WHuuWVj+mhjOS6hiA6LSgnKSxcblx0J0VtcHR5IHJldmlzaW9uLCBtYXliZSBub24tZXhpc3RlbnQnOiB3aW5kb3cud2dVTFMoJ+epuueahOS/ruiuou+8jOWPr+iDveW5tuS4jeWtmOWcqCcsICfnqbrnmoTkv67oqILvvIzlj6/og73kuKbkuI3lrZjlnKgnKSxcblx0J1Vua25vd24gZGF0ZSc6IHdpbmRvdy53Z1VMUygn5pyq55+l5pel5pyfJywgJ+acquefpeaXpeacnycpLFxuXHQvLyBvdGhlciBzcGVjaWFsIHByZXZpZXdzXG5cdCdFbXB0eSBjYXRlZ29yeSc6IHdpbmRvdy53Z1VMUygn56m655qE5YiG57G7JywgJ+epuueahOWIhumhnicpLFxuXHQnQ2F0ZWdvcnkgbWVtYmVycyAoJXMgc2hvd24pJzogd2luZG93LndnVUxTKCfliIbnsbvmiJDlkZjvvIglcyDmmL7npLrvvIknLCAn5YiG6aGe5oiQ5ZOh77yIJXMg6aGv56S677yJJyksXG5cdCdObyBpbWFnZSBsaW5rcyBmb3VuZCc6IHdpbmRvdy53Z1VMUygn5pyq5om+5Yiw5paH5Lu26ZO+5o6lJywgJ+acquaJvuWIsOaqlOahiOmAo+e1kCcpLFxuXHQnRmlsZSBsaW5rcyc6IHdpbmRvdy53Z1VMUygn5paH5Lu26ZO+5o6lJywgJ+aqlOahiOmAo+e1kCcpLFxuXHQnbm90IGNvbW1vbnMnOiB3aW5kb3cud2dVTFMoJ+e7tOWfuuWFseS6q+S4reaXoOatpOWQjeensOeahOaWh+S7tuOAgicsICfntq3ln7rlhbHkuqvkuK3nhKHmraTlkI3nqLHnmoTmqpTmoYjjgIInKSxcblx0J2NvbW1vbnMgb25seSc6IHdpbmRvdy53Z1VMUygn5q2k5paH5Lu25p2l6Ieq57u05Z+65YWx5Lqr44CCJywgJ+atpOaqlOahiOS+huiHque2reWfuuWFseS6q+OAgicpLFxuXHQnTm8gaW1hZ2UgZm91bmQnOiB3aW5kb3cud2dVTFMoJ+aJvuS4jeWIsOaWh+S7ticsICfmib7kuI3liLDmqpTmoYgnKSxcblx0J2NvbW1vbnMgZHVwZSc6IHdpbmRvdy53Z1VMUygn57u05Z+65YWx5Lqr5Lit5a2Y5Zyo5q2k5paH5Lu255qE5Ymv5pys44CCJywgJ+e2reWfuuWFseS6q+S4reWtmOWcqOatpOaqlOahiOeahOWJr+acrOOAgicpLFxuXHQnY29tbW9ucyBjb25mbGljdCc6IHdpbmRvdy53Z1VMUygn57u05Z+65YWx5Lqr5Lit5a2Y5Zyo5q2k5paH5Lu25ZCN56ew5LiN5ZCM55qE5Ymv5pys44CCJywgJ+e2reWfuuWFseS6q+S4reWtmOWcqOatpOaqlOWQjeeoseS4jeWQjOeahOWJr+acrOOAgicpLFxuXHQvLyB1c2VyLXJlbGF0ZWQgYWN0aW9ucyBhbmQgaW5mb1xuXHR1c2VyOiB3aW5kb3cud2dVTFMoJ+eUqOaItycsICfkvb/nlKjogIUnKSxcblx0Ly8gLy8vIHVzZXIgcGFnZSwgdGFsaywgZW1haWwsIHNwYWNlXG5cdCd1c2VyJm5ic3A7cGFnZSc6IHdpbmRvdy53Z1VMUygn55So5oi36aG1JywgJ+S9v+eUqOiAhemggScpLFxuXHQndXNlciB0YWxrJzogd2luZG93LndnVUxTKCfnlKjmiLforqjorronLCAn5L2/55So6ICF5bCN6KmxJyksXG5cdCdlZGl0IHVzZXIgdGFsayc6IHdpbmRvdy53Z1VMUygn57yW6L6R55So5oi36K6o6K66JywgJ+e3qOi8r+S9v+eUqOiAheWwjeipsScpLFxuXHQnbGVhdmUgY29tbWVudCc6IHdpbmRvdy53Z1VMUygn55WZ6KiAJywgJ+eVmeiogCcpLFxuXHRlbWFpbDogd2luZG93LndnVUxTKCfnlLXpgq4nLCAn6Zu76YO1JyksXG5cdCdlbWFpbCB1c2VyJzogd2luZG93LndnVUxTKCfnlLXpgq7nlKjmiLcnLCAn6Zu76YO15L2/55So6ICFJyksXG5cdEVtYWlsdXNlckhpbnQ6IHdpbmRvdy53Z1VMUygn57uZICVzIOWPkemAgeeUteWtkOmCruS7ticsICfntaYgJXMg55m86YCB6Zu75a2Q6YO15Lu2JyksXG5cdHNwYWNlOiB3aW5kb3cud2dVTFMoJ+WtkOmhtemdoicsICflrZDpoIHpnaInKSxcblx0Ly8gc2hvcnQgZm9ybSBmb3IgdXNlclNwYWNlIGxpbmtcblx0UHJlZml4aW5kZXhIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuiAlcyDnmoTnlKjmiLfpobXlrZDpobXpnaInLCAn6aGv56S6ICVzIOeahOS9v+eUqOiAhemggeWtkOmggemdoicpLFxuXHRjb3VudDogd2luZG93LndnVUxTKCfnu5/orqEnLCAn57Wx6KiIJyksXG5cdC8vIC8vLyBjb250cmlidXRpb25zLCB0cmVlLCBsb2dcblx0J2VkaXQgY291bnRlcic6IHdpbmRvdy53Z1VMUygn57yW6L6R5qyh5pWwJywgJ+e3qOi8r+asoeaVuCcpLFxuXHRrYXRlbGlua0hpbnQ6IHdpbmRvdy53Z1VMUygnJXMg55qE57yW6L6R5qyh5pWwJywgJyVzIOeahOe3qOi8r+asoeaVuCcpLFxuXHRjb250cmliczogd2luZG93LndnVUxTKCfotKHnjK4nLCAn6LKi5427JyksXG5cdGNvbnRyaWJ1dGlvbnM6IHdpbmRvdy53Z1VMUygn6LSh54yuJywgJ+iyoueNuycpLFxuXHRkZWxldGVkQ29udHJpYnM6IHdpbmRvdy53Z1VMUygn5bey5Yig6Zmk55qE6LSh54yuJywgJ+W3suWIqumZpOeahOiyoueNuycpLFxuXHRDb250cmlidXRpb25zSGludDogd2luZG93LndnVUxTKCclcyDnmoTnlKjmiLfotKHnjK4nLCAnJXMg55qE5L2/55So6ICF6LKi5427JyksXG5cdHRyZWU6IHdpbmRvdy53Z1VMUygn5qCRJywgJ+aouScpLFxuXHRjb250cmlic1RyZWVIaW50OiB3aW5kb3cud2dVTFMoJ+agueaNruWQjeWtl+epuumXtOafpeeciyAlcyDnmoTotKHnjK4nLCAn5qC55pOa5ZG95ZCN56m66ZaT5qqi6KaWICVzIOeahOiyoueNuycpLFxuXHRsb2c6IHdpbmRvdy53Z1VMUygn5pel5b+XJywgJ+aXpeiqjCcpLFxuXHQndXNlciBsb2cnOiB3aW5kb3cud2dVTFMoJ+eUqOaIt+aXpeW/lycsICfkvb/nlKjogIXml6XoqownKSxcblx0dXNlckxvZ0hpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S6ICVzIOeahOeUqOaIt+aXpeW/lycsICfpoa/npLogJXMg55qE5L2/55So6ICF5pel6KqMJyksXG5cdHVuYmxvY2tTaG9ydDogd2luZG93LndnVUxTKCfop6PpmaQnLCAn6Kej6ZmkJyksXG5cdGJsb2NrOiB3aW5kb3cud2dVTFMoJ+WwgeemgScsICflsIHpjpYnKSxcblx0J2Jsb2NrIHVzZXInOiB3aW5kb3cud2dVTFMoJ+WwgeemgeeUqOaItycsICflsIHpjpbkvb/nlKjogIUnKSxcblx0SXBibG9ja2xpc3RIaW50OiB3aW5kb3cud2dVTFMoJ+ino+WwgSAlcycsICfop6PlsIEgJXMnKSxcblx0QmxvY2tpcEhpbnQ6IHdpbmRvdy53Z1VMUygn5bCB56aBICVzJywgJ+WwgemOliAlcycpLFxuXHQnYmxvY2sgbG9nJzogd2luZG93LndnVUxTKCflsIHnpoHml6Xlv5cnLCAn5bCB6Y6W5pel6KqMJyksXG5cdGJsb2NrTG9nSGludDogd2luZG93LndnVUxTKCfmmL7npLogJXMg55qE5bCB56aB5pel5b+XJywgJ+mhr+ekuiAlcyDnmoTlsIHpjpbml6XoqownKSxcblx0cHJvdGVjdExvZ0hpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S6ICVzIOeahOS/neaKpOaXpeW/lycsICfpoa/npLogJXMg55qE5L+d6K235pel6KqMJyksXG5cdHBhZ2VMb2dIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuiAlcyDnmoTml6Xlv5cnLCAn6aGv56S6ICVzIOeahOaXpeiqjCcpLFxuXHRkZWxldGVMb2dIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuiAlcyDnmoTliKDpmaTml6Xlv5cnLCAn6aGv56S6ICVzIOeahOWIqumZpOaXpeiqjCcpLFxuXHQnSW52YWxpZCAlcyAlcyc6IHdpbmRvdy53Z1VMUygn6YCJ6aG5ICVzIOS4jeWPr+eUqO+8miVzJywgJ+mBuOmghSAlcyDkuI3lj6/nlKjvvJolcycpLFxuXHRtOiAn5bCPJyxcblx0Ly8gQXV0b2VkaXRpbmdcblx0J0VudGVyIGEgbm9uLWVtcHR5IGVkaXQgc3VtbWFyeSBvciBwcmVzcyBjYW5jZWwgdG8gYWJvcnQnOiB3aW5kb3cud2dVTFMoXG5cdFx0J+i+k+WFpee8lui+keaRmOimge+8jOaIluaMieWPlua2iOS4reatouaTjeS9nCcsXG5cdFx0J+i8uOWFpee3qOi8r+aRmOimge+8jOaIluaMieWPlua2iOS4reatouaTjeS9nCdcblx0KSxcblx0J0ZhaWxlZCB0byBnZXQgcmV2aXNpb24gaW5mb3JtYXRpb24sIHBsZWFzZSBlZGl0IG1hbnVhbGx5Llxcblxcbic6IHdpbmRvdy53Z1VMUyhcblx0XHQn6I635Y+W5L+u6K6i54mI5pys5L+h5oGv5aSx6LSl77yM6K+35omL5Yqo5L+u5pS544CCXFxuXFxuJyxcblx0XHQn542y5Y+W5L+u6KiC54mI5pys6LOH6KiK5aSx5pWX77yM6KuL5omL5YuV5L+u5pS544CCXFxuXFxuJ1xuXHQpLFxuXHQnVGhlICVzIGJ1dHRvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGNsaWNrZWQuIFBsZWFzZSB3YWl0IGZvciB0aGUgbmV4dCBwYWdlIHRvIGxvYWQuJzogd2luZG93LndnVUxTKFxuXHRcdCfmjInpkq4gJXMg5bey6KKr6Ieq5Yqo54K55Ye777yM6K+3562J5b6F5LiL5LiA5Liq6aG16Z2i5Yqg6L2944CCJyxcblx0XHQn5oyJ6YiVICVzIOW3suiiq+iHquWLlem7nuaTiu+8jOiri+etieW+heS4i+S4gOWAi+mggemdoui8ieWFpeOAgidcblx0KSxcblx0J0NvdWxkIG5vdCBmaW5kIGJ1dHRvbiAlcy4gUGxlYXNlIGNoZWNrIHRoZSBzZXR0aW5ncyBpbiB5b3VyIGphdmFzY3JpcHQgZmlsZS4nOiB3aW5kb3cud2dVTFMoXG5cdFx0J+aJvuS4jeWIsOaMiemSriAlc++8jOivt+ajgOafpeaCqCBKYXZhU2NyaXB0IOaWh+S7tuS4reeahOiuvue9ruOAgicsXG5cdFx0J+aJvuS4jeWIsOaMiemIlSAlc++8jOiri+aqouafpeaCqCBKYXZhU2NyaXB0IOaqlOahiOS4reeahOioreWumuOAgidcblx0KSxcblx0Ly8gUG9wdXBzIHNldHVwXG5cdCdPcGVuIGZ1bGwtc2l6ZSBpbWFnZSc6IHdpbmRvdy53Z1VMUygn5p+l55yL5YWo5bC65a+45Zu+5YOPJywgJ+aqouimluWFqOWwuuWvuOW9seWDjycpLFxuXHQvLyDku6XkuIvlhoXlrrnnlLEgQW5uQW5nZWxhIOihpeato1xuXHRiaW5nU2VhcmNoSGludDogd2luZG93LndnVUxTKCflnKggQmluZyDkuIrmkJzntKLigJwlc+KAnScsICflnKggYmluZyDkuIrmkJzlsIvjgIwlc+OAjScpLFxuXHQnZW5hYmxlIHByZXZpZXdzJzogd2luZG93LndnVUxTKCflkK/nlKjpooTop4gnLCAn5ZWf55So6aCQ6Ka9JyksXG5cdCdzaG93IHByZXZpZXcnOiB3aW5kb3cud2dVTFMoJ+emgeeUqOmihOiniCcsICfnpoHnlKjpoJDopr0nKSxcblx0aGlzdG9yeWZlZWRIaW50OiB3aW5kb3cud2dVTFMoJ+ivpemhtemdoueahOi/keacn+abtOaUuSBSU1MgZmVlZCcsICfoqbLpoIHpnaLnmoTov5HmnJ/mm7TmlLkgUlNTIGZlZWQnKSxcblx0J3NlbmQgdGhhbmtzJzogd2luZG93LndnVUxTKCflj5HpgIHmhJ/osKInLCAn5YKz6YCB5oSf6KydJyksXG5cdFRoYW5rc0hpbnQ6IHdpbmRvdy53Z1VMUygn5ZCR6K+l55So5oi35Y+R6YCB5LiA5bCB5oSf6LCi5raI5oGvJywgJ+WQkeipsuS9v+eUqOiAheWCs+mAgeS4gOWwgeaEn+isneioiuaBrycpLFxuXHQnbWFyayBwYXRyb2xsZWQnOiB3aW5kb3cud2dVTFMoJ+agh+iusOS4uuW3suW3oeafpScsICfmqJnoqJjngrrlt7Llt6Hmn6UnKSxcblx0bWFya3BhdHJvbGxlZEhpbnQ6IHdpbmRvdy53Z1VMUygn5qCH6K6w6K+l57yW6L6R5Li65bey5beh5p+lJywgJ+aomeiomOipsue3qOi8r+eCuuW3suW3oeafpScpLFxuXHQnQ291bGQgbm90IG1hcmtlZCB0aGlzIGVkaXQgYXMgcGF0cm9sbGVkJzogd2luZG93LndnVUxTKCfml6Dms5XmoIforrDor6XnvJbovpHkuLrlt7Llt6Hmn6UnLCAn54Sh5rOV5qiZ6KiY6Kmy57eo6Lyv54K65bey5beh5p+lJyksXG5cdGRlZmF1bHRwb3B1cFJldmlld2VkU3VtbWFyeTogd2luZG93LndnVUxTKCfmoIforrDku47niYjmnKwlc+WIsCVz6Ze055qE57yW6L6R5Li65bey5beh5p+lJywgJ+aomeiomOW+nueJiOacrCVz5YiwJXPplpPnmoTnt6jovK/ngrrlt7Llt6Hmn6UnKSxcblx0J0ltYWdlIGZyb20gQ29tbW9ucyc6IHdpbmRvdy53Z1VMUygn5p2l6Ieq57u05Z+65YWx5Lqr55qE5Zu+54mHJywgJ+S+huiHque2reWfuuWFseeUqOeahOWclueJhycpLFxuXHQnRGVzY3JpcHRpb24gcGFnZSc6IHdpbmRvdy53Z1VMUygn5Zu+54mH5o+P6L+w6aG1JywgJ+WclueJh+aPj+i/sOmggScpLFxuXHQnQWx0IHRleHQ6Jzogd2luZG93LndnVUxTKCfmm7/mjaLmlofmnKzvvIhBbHTvvInvvJonLCAn5pu/5o+b5paH5a2X77yIQWx077yJ77yaJyksXG5cdHJldmRlbDogd2luZG93LndnVUxTKCfljoblj7LniYjmnKzooqvpmpDol48nLCAn5q235Y+y54mI5pys6KKr6Zqx6JePJyksXG5cdERlbGV0ZWRjb250cmlidXRpb25zSGludDogd2luZG93LndnVUxTKCfnlKjmiLclc+eahOiiq+WIoOmZpOe8lui+keasoeaVsCcsICfkvb/nlKjogIUlc+eahOiiq+WIqumZpOe3qOi8r+asoeaVuCcpLFxuXHQnTm8gYmFja2xpbmtzIGZvdW5kJzogd2luZG93LndnVUxTKCfmib7kuI3liLDpk77lhaXpobXpnaInLCAn5om+5LiN5Yiw6Y+I5YWl6aCB6Z2iJyksXG5cdCcgYW5kIG1vcmUnOiB3aW5kb3cud2dVTFMoJ+S7peWPiuWFtuS7lumhtemdoicsICfku6Xlj4rlhbbku5bpoIHpnaInKSxcblx0J0Rvd25sb2FkIHByZXZpZXcgZGF0YSc6IHdpbmRvdy53Z1VMUygn5LiL6L296aKE6KeI5pWw5o2uJywgJ+S4i+i8iemgkOimveizh+aWmScpLFxuXHQnTm90IGEgcmVnaXN0ZXJlZCB1c2VybmFtZSc6IHdpbmRvdy53Z1VMUygn6Z2e5bey5rOo5YaM55qE55So5oi3JywgJ+mdnuW3suiou+WGiueahOS9v+eUqOiAhScpLFxuXHRCTE9DS0VEOiB3aW5kb3cud2dVTFMoJ+iiq+WwgeemgScsICfooqvlsIHpjpYnKSxcblx0J0hhcyBibG9ja3MnOiB3aW5kb3cud2dVTFMoJ+iiq+mDqOWIhuWwgeemgScsICfooqvpg6jliIblsIHpjpYnKSxcblx0JyBlZGl0cyBzaW5jZTogJzogd2luZG93LndnVUxTKCfmrKHnvJbovpHvvIzms6jlhozml6XmnJ/kuLonLCAn5qyh57eo6Lyv77yM6Ki75YaK5pel5pyf54K6JyksXG5cdCdsYXN0IGVkaXQgb24gJzogd2luZG93LndnVUxTKCfmnIDlkI7kuIDmrKHnvJbovpHkuo4nLCAn5pyA5b6M5LiA5qyh57eo6Lyv5pa8JyksXG5cdEVtYWlsVXNlckhpbnQ6IHdpbmRvdy53Z1VMUygn57uZICVzIOWPkemAgeeUteWtkOmCruS7ticsICfntaYgJXMg55m86YCB6Zu75a2Q6YO15Lu2JyksXG5cdFJBTkdFQkxPQ0tFRDogd2luZG93LndnVUxTKCdJUOauteiiq+WwgeemgScsICdJUOauteiiq+WwgemOlicpLFxuXHQnSVAgdXNlcic6IHdpbmRvdy53Z1VMUygnSVDnlKjmiLcnLCAnSVDkvb/nlKjogIUnKSxcblx0J+KZgCc6ICfimYAnLFxuXHQn4pmCJzogJ+KZgicsXG5cdEhJRERFTjogd2luZG93LndnVUxTKCflhajln5/pmpDol48nLCAn5YWo5Z+f6Zqx6JePJyksXG5cdExPQ0tFRDogd2luZG93LndnVUxTKCflhajln5/plIHlrponLCAn5YWo5Z+f6Y6W5a6aJyksXG5cdCdJbnZhbGlkIHVzZXInOiB3aW5kb3cud2dVTFMoJ+mdnuazleeUqOaIt+WQjScsICfpnZ7ms5Xkvb/nlKjogIXlkI3nqLEnKSxcblx0ZGlmZjogd2luZG93LndnVUxTKCflt67lvIInLCAn5beu55WwJyksXG5cdCcgdG8gJzogJ+iHsycsXG5cblx0YXV0b2VkaXRfdmVyc2lvbjogJ25wMjAxNDA0MTYnLFxuXHRQcmVmaXhJbmRleEhpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S655So5oi3JXPnmoTlrZDpobXpnaInLCAn6aGv56S65L2/55So6ICFJXPnmoTlrZDpoIHpnaInKSxcblx0bnVsbEVkaXRTdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+i/m+ihjOS4gOasoembtue8lui+kScsICfpgLLooYzkuIDmrKHpm7bnt6jovK8nKSxcblx0Ly8g55So5oi357uE5ZCN56ew5LuO57O757uf5raI5oGv6I635Y+WXG5cdCdncm91cC1uby1hdXRvY29uZmlybWVkJzogd2luZG93LndnVUxTKCfpnZ7oh6rliqjnoa7orqTnlKjmiLcnLCAn6Z2e6Ieq5YuV56K66KqN5L2/55So6ICFJyksXG5cdHNlcGFyYXRvcjogJ+OAgScsXG5cdGNvbW1hOiAn77yMJyxcbn07XG5cbmV4cG9ydCB7bWVzc2FnZX07XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge21lc3NhZ2V9IGZyb20gJy4vc3RyaW5nJztcblxuY29uc3QgcG9wdXBzID0gKCkgPT4ge1xuXHQvLyBTVEFSVEZJTEU6IG1haW4uanNcblx0Ly8gRml4IGxhdGVyXG5cdC8vIEdsb2JhbHNcblx0Ly9cblx0Ly8gVHJ5aW5nIHRvIHNob3ZlIGFzIG1hbnkgb2YgdGhlc2UgYXMgcG9zc2libGUgaW50byB0aGUgcGcgKHBvcHVwIGdsb2JhbHMpIG9iamVjdFxuXHRjb25zdCBwZyA9IHtcblx0XHRhcGk6IHt9LFxuXHRcdHJlOiB7fSxcblx0XHRuczoge30sXG5cdFx0c3RyaW5nOiB7fSxcblx0XHR3aWtpOiB7fSxcblx0XHR1c2VyOiB7fSxcblx0XHRtaXNjOiB7fSxcblx0XHRvcHRpb246IHt9LFxuXHRcdG9wdGlvbkRlZmF1bHQ6IHt9LFxuXHRcdGZsYWc6IHt9LFxuXHRcdGNhY2hlOiB7fSxcblx0XHRzdHJ1Y3R1cmVzOiB7fSxcblx0XHR0aW1lcjoge30sXG5cdFx0Y291bnRlcjoge30sXG5cdFx0Y3VycmVudDoge30sXG5cdFx0Zm46IHt9LFxuXHRcdGVuZG9mbGlzdDogbnVsbCxcblx0fTtcblx0LyogQmFpbCBpZiB0aGUgZ2FkZ2V0L3NjcmlwdCBpcyBiZWluZyBsb2FkZWQgdHdpY2UgKi9cblx0LyogQW4gZWxlbWVudCB3aXRoIGlkIFwicGdcIiB3b3VsZCBhZGQgYSB3aW5kb3cucGcgcHJvcGVydHksIGlnbm9yZSBzdWNoIHByb3BlcnR5ICovXG5cdGlmICh3aW5kb3cucGcgJiYgISh3aW5kb3cucGcgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0LyogRXhwb3J0IHRvIGdsb2JhbCBjb250ZXh0ICovXG5cdHdpbmRvdy5wZyA9IHBnO1xuXHQvLyBFTkRGSUxFOiBtYWluLmpzXG5cdC8vIFNUQVJURklMRTogYWN0aW9ucy5qc1xuXHRjb25zdCBzZXR1cFRvb2x0aXBzID0gKGNvbnRhaW5lciwgcmVtb3ZlLCBmb3JjZSwgcG9wRGF0YSkgPT4ge1xuXHRcdGxvZyhgc2V0dXBUb29sdGlwcywgY29udGFpbmVyPSR7Y29udGFpbmVyfSwgcmVtb3ZlPSR7cmVtb3ZlfWApO1xuXHRcdGlmICghY29udGFpbmVyKSB7XG5cdFx0XHQvLyB0aGUgbWFpbiBpbml0aWFsIGNhbGxcblx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cE9uRWRpdFNlbGVjdGlvbicpICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmVkaXRmb3JtICYmIGRvY3VtZW50LmVkaXRmb3JtLndwVGV4dGJveDEpIHtcblx0XHRcdFx0ZG9jdW1lbnQuZWRpdGZvcm0ud3BUZXh0Ym94MS5vbm1vdXNldXAgPSBkb1NlbGVjdGlvblBvcHVwO1xuXHRcdFx0fVxuXHRcdFx0Ly8gYXJ0aWNsZS9jb250ZW50IGlzIGEgc3RydWN0dXJlLWRlcGVuZGVudCB0aGluZ1xuXHRcdFx0Y29udGFpbmVyID0gZGVmYXVsdFBvcHVwc0NvbnRhaW5lcigpO1xuXHRcdH1cblx0XHRpZiAoIXJlbW92ZSAmJiAhZm9yY2UgJiYgY29udGFpbmVyLnJhblNldHVwVG9vbHRpcHNBbHJlYWR5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnRhaW5lci5yYW5TZXR1cFRvb2x0aXBzQWxyZWFkeSA9ICFyZW1vdmU7XG5cdFx0Y29uc3QgYW5jaG9ycyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG5cdFx0c2V0dXBUb29sdGlwc0xvb3AoYW5jaG9ycywgMCwgMjUwLCAxMDAsIHJlbW92ZSwgcG9wRGF0YSk7XG5cdH07XG5cdGNvbnN0IGRlZmF1bHRQb3B1cHNDb250YWluZXIgPSAoKSA9PiB7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwT25seUFydGljbGVMaW5rcycpKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2tpbi12ZWN0b3ItMjAyMiAudmVjdG9yLWJvZHknKSB8fFxuXHRcdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXdfY29udGVudCcpIHx8XG5cdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb250ZW50JykgfHxcblx0XHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FydGljbGUnKSB8fFxuXHRcdFx0XHRkb2N1bWVudFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9O1xuXHRjb25zdCBzZXR1cFRvb2x0aXBzTG9vcCA9IGZ1bmN0aW9uIHNldHVwVG9vbHRpcHNMb29wKGFuY2hvcnMsIGJlZ2luLCBob3dtYW55LCBzbGVlcCwgcmVtb3ZlLCBwb3BEYXRhLCAuLi5hcmdzKSB7XG5cdFx0bG9nKFxuXHRcdFx0c2ltcGxlUHJpbnRmKCdzZXR1cFRvb2x0aXBzTG9vcCglcywlcywlcywlcywlcyknLCBbXG5cdFx0XHRcdGFuY2hvcnMsXG5cdFx0XHRcdGJlZ2luLFxuXHRcdFx0XHRob3dtYW55LFxuXHRcdFx0XHRzbGVlcCxcblx0XHRcdFx0cmVtb3ZlLFxuXHRcdFx0XHRwb3BEYXRhLFxuXHRcdFx0XHQuLi5hcmdzLFxuXHRcdFx0XSlcblx0XHQpO1xuXHRcdGNvbnN0IGZpbmlzaCA9IGJlZ2luICsgaG93bWFueTtcblx0XHRjb25zdCBsb29wZW5kID0gTWF0aC5taW4oZmluaXNoLCBhbmNob3JzLmxlbmd0aCk7XG5cdFx0bGV0IGogPSBsb29wZW5kIC0gYmVnaW47XG5cdFx0bG9nKFxuXHRcdFx0YHNldHVwVG9vbHRpcHM6IGFuY2hvcnMubGVuZ3RoPSR7YW5jaG9ycy5sZW5ndGh9LCBiZWdpbj0ke2JlZ2lufSwgaG93bWFueT0ke2hvd21hbnl9LCBsb29wZW5kPSR7bG9vcGVuZH0sIHJlbW92ZT0ke3JlbW92ZX1gXG5cdFx0KTtcblx0XHRjb25zdCBkb1Rvb2x0aXAgPSByZW1vdmUgPyByZW1vdmVUb29sdGlwIDogYWRkVG9vbHRpcDtcblx0XHQvLyB0cnkgYSBmYXN0ZXIgKD8pIGxvb3AgY29uc3RydWN0XG5cdFx0aWYgKGogPiAwKSB7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdGNvbnN0IGEgPSBhbmNob3JzW2xvb3BlbmQgLSBqXTtcblx0XHRcdFx0aWYgKGEgPT09IHVuZGVmaW5lZCB8fCAhYSB8fCAhYS5ocmVmKSB7XG5cdFx0XHRcdFx0bG9nKGBnb3QgbnVsbCBhbmNob3IgYXQgaW5kZXggJHtsb29wZW5kfWAgLSBqKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkb1Rvb2x0aXAoYSwgcG9wRGF0YSk7XG5cdFx0XHR9IHdoaWxlICgtLWopO1xuXHRcdH1cblx0XHRpZiAoZmluaXNoIDwgYW5jaG9ycy5sZW5ndGgpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZXR1cFRvb2x0aXBzTG9vcChhbmNob3JzLCBmaW5pc2gsIGhvd21hbnksIHNsZWVwLCByZW1vdmUsIHBvcERhdGEpO1xuXHRcdFx0fSwgc2xlZXApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXJlbW92ZSAmJiAhZ2V0VmFsdWVPZigncG9wdXBUb2NMaW5rcycpKSB7XG5cdFx0XHRcdHJtVG9jVG9vbHRpcHMoKTtcblx0XHRcdH1cblx0XHRcdHBnLmZsYWcuZmluaXNoZWRMb2FkaW5nID0gdHJ1ZTtcblx0XHR9XG5cdH07XG5cdC8vIGVsaW1pbmF0ZSBwb3B1cHMgZnJvbSB0aGUgVE9DXG5cdC8vIFRoaXMgYWxzbyBraWxscyBhbnkgb25jbGljayBzdHVmZiB0aGF0IHVzZWQgdG8gYmUgZ29pbmcgb24gaW4gdGhlIHRvY1xuXHRjb25zdCBybVRvY1Rvb2x0aXBzID0gKCkgPT4ge1xuXHRcdGNvbnN0IHRvYyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0b2MnKTtcblx0XHRpZiAodG9jKSB7XG5cdFx0XHRjb25zdCB0b2NMaW5rcyA9IHRvYy5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG5cdFx0XHRjb25zdCB0b2NMZW4gPSB0b2NMaW5rcy5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHRvY0xlbjsgKytqKSB7XG5cdFx0XHRcdHJlbW92ZVRvb2x0aXAodG9jTGlua3Nbal0sIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3QgYWRkVG9vbHRpcCA9IChhLCBwb3BEYXRhKSA9PiB7XG5cdFx0aWYgKCFpc1BvcHVwTGluayhhKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhLm9ubW91c2VvdmVyID0gbW91c2VPdmVyV2lraUxpbms7XG5cdFx0YS5vbm1vdXNlb3V0ID0gbW91c2VPdXRXaWtpTGluaztcblx0XHRhLm9ubW91c2Vkb3duID0ga2lsbFBvcHVwO1xuXHRcdGEuaGFzUG9wdXAgPSB0cnVlO1xuXHRcdGEucG9wRGF0YSA9IHBvcERhdGE7XG5cdH07XG5cdGNvbnN0IHJlbW92ZVRvb2x0aXAgPSAoYSkgPT4ge1xuXHRcdGlmICghYS5oYXNQb3B1cCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhLm9ubW91c2VvdmVyID0gbnVsbDtcblx0XHRhLm9ubW91c2VvdXQgPSBudWxsO1xuXHRcdGlmIChhLm9yaWdpbmFsVGl0bGUpIHtcblx0XHRcdGEudGl0bGUgPSBhLm9yaWdpbmFsVGl0bGU7XG5cdFx0fVxuXHRcdGEuaGFzUG9wdXAgPSBmYWxzZTtcblx0fTtcblx0Y29uc3QgcmVtb3ZlVGl0bGUgPSAoYSkgPT4ge1xuXHRcdGEub3JpZ2luYWxUaXRsZSB8fD0gYS50aXRsZTtcblx0XHRhLnRpdGxlID0gJyc7XG5cdH07XG5cdGNvbnN0IHJlc3RvcmVUaXRsZSA9IChhKSA9PiB7XG5cdFx0aWYgKGEudGl0bGUgfHwgIWEub3JpZ2luYWxUaXRsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhLnRpdGxlID0gYS5vcmlnaW5hbFRpdGxlO1xuXHR9O1xuXHRjb25zdCByZWdpc3Rlckhvb2tzID0gKG5wKSA9PiB7XG5cdFx0Y29uc3QgcG9wdXBNYXhXaWR0aCA9IGdldFZhbHVlT2YoJ3BvcHVwTWF4V2lkdGgnKTtcblx0XHRpZiAodHlwZW9mIHBvcHVwTWF4V2lkdGggPT09ICdudW1iZXInKSB7XG5cdFx0XHRjb25zdCBzZXRNYXhXaWR0aCA9ICgpID0+IHtcblx0XHRcdFx0bnAubWFpbkRpdi5zdHlsZS5tYXhXaWR0aCA9IGAke3BvcHVwTWF4V2lkdGh9cHhgO1xuXHRcdFx0XHRucC5tYXhXaWR0aCA9IHBvcHVwTWF4V2lkdGg7XG5cdFx0XHR9O1xuXHRcdFx0bnAuYWRkSG9vayhzZXRNYXhXaWR0aCwgJ3VuaGlkZScsICdiZWZvcmUnKTtcblx0XHR9XG5cdFx0bnAuYWRkSG9vayhhZGRQb3B1cFNob3J0Y3V0cywgJ3VuaGlkZScsICdhZnRlcicpO1xuXHRcdG5wLmFkZEhvb2socm1Qb3B1cFNob3J0Y3V0cywgJ2hpZGUnLCAnYmVmb3JlJyk7XG5cdH07XG5cdGNvbnN0IHJlbW92ZU1vZGlmaWVyS2V5TGlzdGVuZXIgPSAoYSkgPT4ge1xuXHRcdC8vIHJlbW92ZSBsaXN0ZW5lcnMgZm9yIG1vZGlmaWVyIGtleSBpZiBhbnkgdGhhdCB3ZXJlIGFkZGVkIGluIG1vdXNlT3Zlcldpa2lMaW5rXG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGEubW9kaWZpZXJLZXlMaXN0ZW5lciwgZmFsc2UpO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgYS5tb2RpZmllcktleUxpc3RlbmVyLCBmYWxzZSk7XG5cdH07XG5cdGNvbnN0IG1vdXNlT3Zlcldpa2lMaW5rID0gZnVuY3Rpb24gbW91c2VPdmVyV2lraUxpbmsoZXZ0KSB7XG5cdFx0aWYgKCFldnQgJiYgd2luZG93LmV2ZW50KSB7XG5cdFx0XHRldnQgPSB3aW5kb3cuZXZlbnQ7XG5cdFx0fVxuXHRcdC8vIGlmIHRoZSBtb2RpZmllciBpcyBuZWVkZWQsIGxpc3RlbiBmb3IgaXQsXG5cdFx0Ly8gd2Ugd2lsbCByZW1vdmUgdGhlIGxpc3RlbmVyIHdoZW4gd2UgbW91c2VvdXQgb2YgdGhpcyBsaW5rIG9yIGtpbGwgcG9wdXAuXG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwTW9kaWZpZXInKSkge1xuXHRcdFx0Ly8gaWYgcG9wdXBNb2RpZmllckFjdGlvbiA9IGVuYWJsZSwgd2Ugc2hvdWxkIHBvcHVwIHdoZW4gdGhlIG1vZGlmaWVyIGlzIHByZXNzZWRcblx0XHRcdC8vIGlmIHBvcHVwTW9kaWZpZXJBY3Rpb24gPSBkaXNhYmxlLCB3ZSBzaG91bGQgcG9wdXAgdW5sZXNzIHRoZSBtb2RpZmllciBpcyBwcmVzc2VkXG5cdFx0XHRjb25zdCBhY3Rpb24gPSBnZXRWYWx1ZU9mKCdwb3B1cE1vZGlmaWVyQWN0aW9uJyk7XG5cdFx0XHRjb25zdCBrZXkgPSBhY3Rpb24gPT09ICdkaXNhYmxlJyA/ICdrZXl1cCcgOiAna2V5ZG93bic7XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdHNlbGYubW9kaWZpZXJLZXlMaXN0ZW5lciA9IChldnQpID0+IHtcblx0XHRcdFx0bW91c2VPdmVyV2lraUxpbmsyKHNlbGYsIGV2dCk7XG5cdFx0XHR9O1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihrZXksIHNlbGYubW9kaWZpZXJLZXlMaXN0ZW5lciwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW91c2VPdmVyV2lraUxpbmsyKHRoaXMsIGV2dCk7XG5cdH07XG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWZlcmVuY2VzIGxpc3QgaXRlbSB0aGF0IHRoZSBwcm92aWRlZCBmb290bm90ZSBsaW5rIHRhcmdldHMuIFRoaXNcblx0ICogaXMgdHlwaWNhbGx5IGEgbGkgZWxlbWVudCB3aXRoaW4gdGhlIG9sLnJlZmVyZW5jZXMgZWxlbWVudCBpbnNpZGUgdGhlIHJlZmxpc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gYSAtIEEgZm9vdG5vdGUgbGluay5cblx0ICogQHJldHVybiB7RWxlbWVudHxib29sZWFufSBUaGUgdGFyZ2V0ZWQgZWxlbWVudCwgb3IgZmFsc2UgaWYgb25lIGNhbid0IGJlIGZvdW5kLlxuXHQgKi9cblx0Y29uc3QgZm9vdG5vdGVUYXJnZXQgPSAoYSkgPT4ge1xuXHRcdGNvbnN0IGFUaXRsZSA9IFRpdGxlLmZyb21BbmNob3IoYSk7XG5cdFx0Ly8gV2Ugd2FudCBcIi4zQVwiIHJhdGhlciB0aGFuIFwiJTNBXCIgb3IgXCI/XCIgaGVyZSwgc28gdXNlIHRoZSBhbmNob3IgcHJvcGVydHkgZGlyZWN0bHlcblx0XHRjb25zdCBhbmNoID0gYVRpdGxlLmFuY2hvcjtcblx0XHRpZiAoIS9eKGNpdGVfbm90ZS18X25vdGUtfGVuZG5vdGUpLy50ZXN0KGFuY2gpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGxUaXRsZSA9IFRpdGxlLmZyb21VUkwobG9jYXRpb24uaHJlZik7XG5cdFx0aWYgKGxUaXRsZS50b1N0cmluZyh0cnVlKSAhPT0gYVRpdGxlLnRvU3RyaW5nKHRydWUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGxldCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2FuY2h9YCk7XG5cdFx0d2hpbGUgKGVsICYmIHR5cGVvZiBlbC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGNvbnN0IG50ID0gZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdGlmIChudCA9PT0gJ2xpJykge1xuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9IGVsc2UgaWYgKG50ID09PSAnYm9keScpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChlbC5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdGVsID0gZWwucGFyZW50Tm9kZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXHRjb25zdCBmb290bm90ZVByZXZpZXcgPSAoeCwgbmF2cG9wKSA9PiB7XG5cdFx0c2V0UG9wdXBIVE1MKGA8aHI+JHt4LmlubmVySFRNTH1gLCAncG9wdXBQcmV2aWV3JywgbmF2cG9wLmlkTnVtYmVyKTtcblx0fTtcblx0Y29uc3QgbW9kaWZpZXJQcmVzc2VkID0gKGV2dCkgPT4ge1xuXHRcdGNvbnN0IG1vZCA9IGdldFZhbHVlT2YoJ3BvcHVwTW9kaWZpZXInKTtcblx0XHRpZiAoIW1vZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIWV2dCAmJiB3aW5kb3cuZXZlbnQpIHtcblx0XHRcdGV2dCA9IHdpbmRvdy5ldmVudDtcblx0XHR9XG5cdFx0cmV0dXJuIGV2dCAmJiBtb2QgJiYgZXZ0W2Ake21vZC50b0xvd2VyQ2FzZSgpfUtleWBdO1xuXHR9O1xuXHQvLyBDaGVja3MgaWYgdGhlIGNvcnJlY3QgbW9kaWZpZXIgcHJlc3NlZC91bnByZXNzZWQgaWYgbmVlZGVkXG5cdGNvbnN0IGlzQ29ycmVjdE1vZGlmaWVyID0gKF9hLCBldnQpID0+IHtcblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwTW9kaWZpZXInKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdC8vIGlmIHBvcHVwTW9kaWZpZXJBY3Rpb24gPSBlbmFibGUsIHdlIHNob3VsZCBwb3B1cCB3aGVuIHRoZSBtb2RpZmllciBpcyBwcmVzc2VkXG5cdFx0Ly8gaWYgcG9wdXBNb2RpZmllckFjdGlvbiA9IGRpc2FibGUsIHdlIHNob3VsZCBwb3B1cCB1bmxlc3MgdGhlIG1vZGlmaWVyIGlzIHByZXNzZWRcblx0XHRjb25zdCBhY3Rpb24gPSBnZXRWYWx1ZU9mKCdwb3B1cE1vZGlmaWVyQWN0aW9uJyk7XG5cdFx0cmV0dXJuIChhY3Rpb24gPT09ICdlbmFibGUnICYmIG1vZGlmaWVyUHJlc3NlZChldnQpKSB8fCAoYWN0aW9uID09PSAnZGlzYWJsZScgJiYgIW1vZGlmaWVyUHJlc3NlZChldnQpKTtcblx0fTtcblx0Y29uc3QgbW91c2VPdmVyV2lraUxpbmsyID0gKGEsIGV2dCkgPT4ge1xuXHRcdGlmICghaXNDb3JyZWN0TW9kaWZpZXIoYSwgZXZ0KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoZ2V0VmFsdWVPZigncmVtb3ZlVGl0bGVzJykpIHtcblx0XHRcdHJlbW92ZVRpdGxlKGEpO1xuXHRcdH1cblx0XHRpZiAoYSA9PT0gcGcuY3VycmVudC5saW5rICYmIGEubmF2cG9wdXAgJiYgYS5uYXZwb3B1cC5pc1Zpc2libGUoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwZy5jdXJyZW50LmxpbmsgPSBhO1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdzaW1wbGVQb3B1cHMnKSAmJiAhcGcub3B0aW9uLnBvcHVwU3RydWN0dXJlKSB7XG5cdFx0XHQvLyByZXNldCAqZGVmYXVsdCB2YWx1ZSogb2YgcG9wdXBTdHJ1Y3R1cmVcblx0XHRcdHNldERlZmF1bHQoJ3BvcHVwU3RydWN0dXJlJywgJ29yaWdpbmFsJyk7XG5cdFx0fVxuXHRcdGNvbnN0IGFydGljbGUgPSBuZXcgVGl0bGUoKS5mcm9tQW5jaG9yKGEpO1xuXHRcdC8vIHNldCBnbG9iYWwgdmFyaWFibGUgKHVnaCkgdG8gaG9sZCBhcnRpY2xlICh3aWtpcGFnZSlcblx0XHRwZy5jdXJyZW50LmFydGljbGUgPSBhcnRpY2xlO1xuXHRcdGlmICghYS5uYXZwb3B1cCkge1xuXHRcdFx0YS5uYXZwb3B1cCA9IG5ld05hdnBvcHVwKGEsIGFydGljbGUpO1xuXHRcdFx0cGcuY3VycmVudC5saW5rc0hhc2hbYS5ocmVmXSA9IGEubmF2cG9wdXA7XG5cdFx0XHRwZy5jdXJyZW50LmxpbmtzLnB1c2goYSk7XG5cdFx0fVxuXHRcdGlmIChhLm5hdnBvcHVwLnBlbmRpbmcgPT09IG51bGwgfHwgYS5uYXZwb3B1cC5wZW5kaW5nICE9PSAwKSB7XG5cdFx0XHQvLyBlaXRoZXIgZnJlc2ggcG9wdXBzIG9yIHRob3NlIHdpdGggdW5maW5zaGVkIGJ1c2luZXNzIGFyZSByZWRvbmUgZnJvbSBzY3JhdGNoXG5cdFx0XHRzaW1wbGVQb3B1cENvbnRlbnQoYSwgYXJ0aWNsZSk7XG5cdFx0fVxuXHRcdGEubmF2cG9wdXAuc2hvd1Nvb25JZlN0YWJsZShhLm5hdnBvcHVwLmRlbGF5KTtcblx0XHRjbGVhckludGVydmFsKHBnLnRpbWVyLmNoZWNrUG9wdXBQb3NpdGlvbik7XG5cdFx0cGcudGltZXIuY2hlY2tQb3B1cFBvc2l0aW9uID0gc2V0SW50ZXJ2YWwoY2hlY2tQb3B1cFBvc2l0aW9uLCA2MDApO1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdzaW1wbGVQb3B1cHMnKSAmJiBnZXRWYWx1ZU9mKCdwb3B1cFByZXZpZXdCdXR0b24nKSAmJiAhYS5zaW1wbGVOb01vcmUpIHtcblx0XHRcdGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdGQuY2xhc3NOYW1lID0gJ3BvcHVwUHJldmlld0J1dHRvbkRpdic7XG5cdFx0XHRjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdFx0ZC5hcHBlbmQocyk7XG5cdFx0XHRzLmNsYXNzTmFtZSA9ICdwb3B1cFByZXZpZXdCdXR0b24nO1xuXHRcdFx0c1tgb24ke2dldFZhbHVlT2YoJ3BvcHVwUHJldmlld0J1dHRvbkV2ZW50Jyl9YF0gPSAoKSA9PiB7XG5cdFx0XHRcdGEuc2ltcGxlTm9Nb3JlID0gdHJ1ZTtcblx0XHRcdFx0ZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHRcdFx0XHRub25zaW1wbGVQb3B1cENvbnRlbnQoYSwgYXJ0aWNsZSk7XG5cdFx0XHR9O1xuXHRcdFx0cy5pbm5lckhUTUwgPSBwb3B1cFN0cmluZygnc2hvdyBwcmV2aWV3Jyk7XG5cdFx0XHRzZXRQb3B1cEhUTUwoZCwgJ3BvcHVwUHJldmlldycsIGEubmF2cG9wdXAuaWROdW1iZXIpO1xuXHRcdH1cblx0XHRpZiAoYS5uYXZwb3B1cC5wZW5kaW5nICE9PSAwKSB7XG5cdFx0XHRub25zaW1wbGVQb3B1cENvbnRlbnQoYSwgYXJ0aWNsZSk7XG5cdFx0fVxuXHR9O1xuXHQvLyBzaW1wbGVQb3B1cENvbnRlbnQ6IHRoZSBjb250ZW50IHRoYXQgZG8gbm90IHJlcXVpcmUgYWRkaXRpb25hbCBkb3dubG9hZFxuXHQvLyAoaXQgaXMgc2hvd24gZXZlbiB3aGVuIHNpbXBsZVBvcHVwcyBpcyB0cnVlKVxuXHRjb25zdCBzaW1wbGVQb3B1cENvbnRlbnQgPSAoYSwgYXJ0aWNsZSkgPT4ge1xuXHRcdC8qIEZJWE1FIGhhY2sgKi9cblx0XHRhLm5hdnBvcHVwLmhhc1BvcHVwTWVudSA9IGZhbHNlO1xuXHRcdGEubmF2cG9wdXAuc2V0SW5uZXJIVE1MKHBvcHVwSFRNTChhKSk7XG5cdFx0ZmlsbEVtcHR5U3BhbnMoe1xuXHRcdFx0bmF2cG9wdXA6IGEubmF2cG9wdXAsXG5cdFx0fSk7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwRHJhZ2dhYmxlJykpIHtcblx0XHRcdGxldCBkcmFnSGFuZGxlID0gZ2V0VmFsdWVPZigncG9wdXBEcmFnSGFuZGxlJykgfHwgbnVsbDtcblx0XHRcdGlmIChkcmFnSGFuZGxlICYmIGRyYWdIYW5kbGUgIT09ICdhbGwnKSB7XG5cdFx0XHRcdGRyYWdIYW5kbGUgKz0gYS5uYXZwb3B1cC5pZE51bWJlcjtcblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRhLm5hdnBvcHVwLm1ha2VEcmFnZ2FibGUoZHJhZ0hhbmRsZSk7XG5cdFx0XHR9LCAxNTApO1xuXHRcdH1cblx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBSZWRsaW5rUmVtb3ZhbCcpICYmIGEuY2xhc3NOYW1lID09PSAnbmV3Jykge1xuXHRcdFx0c2V0UG9wdXBIVE1MKGA8YnI+JHtwb3B1cFJlZGxpbmtIVE1MKGFydGljbGUpfWAsICdwb3B1cFJlZGxpbmsnLCBhLm5hdnBvcHVwLmlkTnVtYmVyKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGRlYnVnRGF0YSA9IChuYXZwb3B1cCkgPT4ge1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cERlYnVnZ2luZycpICYmIG5hdnBvcHVwLmlkTnVtYmVyKSB7XG5cdFx0XHRzZXRQb3B1cEhUTUwoYGlkTnVtYmVyPSR7bmF2cG9wdXAuaWROdW1iZXJ9LCBwZW5kaW5nPSR7bmF2cG9wdXAucGVuZGluZ31gLCAncG9wdXBFcnJvcicsIG5hdnBvcHVwLmlkTnVtYmVyKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IG5ld05hdnBvcHVwID0gKGEsIGFydGljbGUpID0+IHtcblx0XHRjb25zdCBuYXZwb3B1cCA9IG5ldyBOYXZwb3B1cCgpO1xuXHRcdG5hdnBvcHVwLmZ1enogPSA1O1xuXHRcdG5hdnBvcHVwLmRlbGF5ID0gZ2V0VmFsdWVPZigncG9wdXBEZWxheScpICogMTAwMDtcblx0XHQvLyBpbmNyZW1lbnQgZ2xvYmFsIGNvdW50ZXIgbm93XG5cdFx0bmF2cG9wdXAuaWROdW1iZXIgPSArK3BnLmlkTnVtYmVyO1xuXHRcdG5hdnBvcHVwLnBhcmVudEFuY2hvciA9IGE7XG5cdFx0bmF2cG9wdXAucGFyZW50UG9wdXAgPSBhLnBvcERhdGEgJiYgYS5wb3BEYXRhLm93bmVyO1xuXHRcdG5hdnBvcHVwLmFydGljbGUgPSBhcnRpY2xlO1xuXHRcdHJlZ2lzdGVySG9va3MobmF2cG9wdXApO1xuXHRcdHJldHVybiBuYXZwb3B1cDtcblx0fTtcblx0Ly8gU2hvdWxkIHdlIHNob3cgbm9uc2ltcGxlIGNvbnRleHQ/XG5cdC8vIElmIHNpbXBsZVBvcHVwcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiB3ZSBkbyBub3Qgc2hvdyBub25zaW1wbGUgY29udGV4dCxcblx0Ly8gYnV0IGlmIGEgYm90dG9tIFwic2hvdyBwcmV2aWV3XCIgd2FzIGNsaWNrZWQgd2UgZG8gc2hvdyBub25zaW1wbGUgY29udGV4dFxuXHRjb25zdCBzaG91bGRTaG93Tm9uU2ltcGxlID0gKGEpID0+IHtcblx0XHRyZXR1cm4gIWdldFZhbHVlT2YoJ3NpbXBsZVBvcHVwcycpIHx8IGEuc2ltcGxlTm9Nb3JlO1xuXHR9O1xuXHQvLyBTaG91bGQgd2Ugc2hvdyBub25zaW1wbGUgY29udGV4dCBnb3Zlcm4gYnkgdGhlIG9wdGlvbiAoZS5nLiBwb3B1cFVzZXJJbmZvKT9cblx0Ly8gSWYgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tlZCBmb3Igbm9uc2ltcGxlIGNvbnRleHQgYnkgc2V0dGluZyB0aGUgb3B0aW9uIHRvIHRydWUsXG5cdC8vIHRoZW4gd2Ugc2hvdyBpdCBldmVuIGluIG5vbnNpbXBsZSBtb2RlLlxuXHRjb25zdCBzaG91bGRTaG93ID0gKGEsIG9wdGlvbikgPT4ge1xuXHRcdGlmIChzaG91bGRTaG93Tm9uU2ltcGxlKGEpKSB7XG5cdFx0XHRyZXR1cm4gZ2V0VmFsdWVPZihvcHRpb24pO1xuXHRcdH1cblx0XHRyZXR1cm4gd2luZG93W29wdGlvbl0gIT09IHVuZGVmaW5lZCAmJiB3aW5kb3dbb3B0aW9uXTtcblx0fTtcblx0Y29uc3Qgbm9uc2ltcGxlUG9wdXBDb250ZW50ID0gKGEsIGFydGljbGUpID0+IHtcblx0XHRsZXQgZGlmZjtcblx0XHRsZXQgaGlzdG9yeTtcblx0XHRjb25zdCBwYXJhbXMgPSBwYXJzZVBhcmFtcyhhLmhyZWYpO1xuXHRcdGNvbnN0IG9sZGlkID0gcGFyYW1zLm9sZGlkID09PSB1bmRlZmluZWQgPyBudWxsIDogcGFyYW1zLm9sZGlkO1xuXHRcdGlmIChzaG91bGRTaG93KGEsICdwb3B1cFByZXZpZXdEaWZmcycpKSB7XG5cdFx0XHQoe2RpZmZ9ID0gcGFyYW1zKTtcblx0XHR9XG5cdFx0aWYgKHNob3VsZFNob3coYSwgJ3BvcHVwUHJldmlld0hpc3RvcnknKSkge1xuXHRcdFx0aGlzdG9yeSA9IHBhcmFtcy5hY3Rpb24gPT09ICdoaXN0b3J5Jztcblx0XHR9XG5cdFx0YS5uYXZwb3B1cC5wZW5kaW5nID0gMDtcblx0XHRjb25zdCByZWZlcmVuY2VFbGVtZW50ID0gZm9vdG5vdGVUYXJnZXQoYSk7XG5cdFx0aWYgKHJlZmVyZW5jZUVsZW1lbnQpIHtcblx0XHRcdGZvb3Rub3RlUHJldmlldyhyZWZlcmVuY2VFbGVtZW50LCBhLm5hdnBvcHVwKTtcblx0XHR9IGVsc2UgaWYgKGRpZmYgfHwgZGlmZiA9PT0gMCkge1xuXHRcdFx0bG9hZERpZmYoYXJ0aWNsZSwgb2xkaWQsIGRpZmYsIGEubmF2cG9wdXApO1xuXHRcdH0gZWxzZSBpZiAoaGlzdG9yeSkge1xuXHRcdFx0bG9hZEFQSVByZXZpZXcoJ2hpc3RvcnknLCBhcnRpY2xlLCBhLm5hdnBvcHVwKTtcblx0XHR9IGVsc2UgaWYgKHNob3VsZFNob3dOb25TaW1wbGUoYSkgJiYgcGcucmUuY29udHJpYnMudGVzdChhLmhyZWYpKSB7XG5cdFx0XHRsb2FkQVBJUHJldmlldygnY29udHJpYnMnLCBhcnRpY2xlLCBhLm5hdnBvcHVwKTtcblx0XHR9IGVsc2UgaWYgKHNob3VsZFNob3dOb25TaW1wbGUoYSkgJiYgcGcucmUuYmFja2xpbmtzLnRlc3QoYS5ocmVmKSkge1xuXHRcdFx0bG9hZEFQSVByZXZpZXcoJ2JhY2tsaW5rcycsIGFydGljbGUsIGEubmF2cG9wdXApO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQvLyBGSVhNRSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYWxsIHByZXZpZXcgY29tYmluYXRpb25zIHdpdGggb3B0aW9uc1xuXHRcdFx0YXJ0aWNsZS5uYW1lc3BhY2VJZCgpID09PSBwZy5uc0ltYWdlSWQgJiZcblx0XHRcdChzaG91bGRTaG93KGEsICdpbWFnZVBvcHVwc0ZvckltYWdlcycpIHx8ICFhbmNob3JDb250YWluc0ltYWdlKGEpKVxuXHRcdCkge1xuXHRcdFx0bG9hZEFQSVByZXZpZXcoJ2ltYWdlcGFnZXByZXZpZXcnLCBhcnRpY2xlLCBhLm5hdnBvcHVwKTtcblx0XHRcdGxvYWRJbWFnZShhcnRpY2xlLCBhLm5hdnBvcHVwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGFydGljbGUubmFtZXNwYWNlSWQoKSA9PT0gcGcubnNDYXRlZ29yeUlkICYmIHNob3VsZFNob3coYSwgJ3BvcHVwQ2F0ZWdvcnlNZW1iZXJzJykpIHtcblx0XHRcdFx0bG9hZEFQSVByZXZpZXcoJ2NhdGVnb3J5JywgYXJ0aWNsZSwgYS5uYXZwb3B1cCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoYXJ0aWNsZS5uYW1lc3BhY2VJZCgpID09PSBwZy5uc1VzZXJJZCB8fCBhcnRpY2xlLm5hbWVzcGFjZUlkKCkgPT09IHBnLm5zVXNlcnRhbGtJZCkgJiZcblx0XHRcdFx0c2hvdWxkU2hvdyhhLCAncG9wdXBVc2VySW5mbycpXG5cdFx0XHQpIHtcblx0XHRcdFx0bG9hZEFQSVByZXZpZXcoJ3VzZXJpbmZvJywgYXJ0aWNsZSwgYS5uYXZwb3B1cCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2hvdWxkU2hvd05vblNpbXBsZShhKSkge1xuXHRcdFx0XHRzdGFydEFydGljbGVQcmV2aWV3KGFydGljbGUsIG9sZGlkLCBhLm5hdnBvcHVwKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IHBlbmRpbmdOYXZwb3BUYXNrID0gKG5hdnBvcCkgPT4ge1xuXHRcdGlmIChuYXZwb3AgJiYgbmF2cG9wLnBlbmRpbmcgPT09IG51bGwpIHtcblx0XHRcdG5hdnBvcC5wZW5kaW5nID0gMDtcblx0XHR9XG5cdFx0KytuYXZwb3AucGVuZGluZztcblx0XHRkZWJ1Z0RhdGEobmF2cG9wKTtcblx0fTtcblx0Y29uc3QgY29tcGxldGVkTmF2cG9wVGFzayA9IChuYXZwb3ApID0+IHtcblx0XHRpZiAobmF2cG9wICYmIG5hdnBvcC5wZW5kaW5nKSB7XG5cdFx0XHQtLW5hdnBvcC5wZW5kaW5nO1xuXHRcdH1cblx0XHRkZWJ1Z0RhdGEobmF2cG9wKTtcblx0fTtcblx0Y29uc3Qgc3RhcnRBcnRpY2xlUHJldmlldyA9IChhcnRpY2xlLCBvbGRpZCwgbmF2cG9wKSA9PiB7XG5cdFx0bmF2cG9wLnJlZGlyID0gMDtcblx0XHRsb2FkUHJldmlldyhhcnRpY2xlLCBvbGRpZCwgbmF2cG9wKTtcblx0fTtcblx0Y29uc3QgbG9hZFByZXZpZXcgPSAoYXJ0aWNsZSwgb2xkaWQsIG5hdnBvcCkgPT4ge1xuXHRcdGlmICghbmF2cG9wLnJlZGlyKSB7XG5cdFx0XHRuYXZwb3Aub3JpZ2luYWxBcnRpY2xlID0gYXJ0aWNsZTtcblx0XHR9XG5cdFx0YXJ0aWNsZS5vbGRpZCA9IG9sZGlkO1xuXHRcdGxvYWRBUElQcmV2aWV3KCdyZXZpc2lvbicsIGFydGljbGUsIG5hdnBvcCk7XG5cdH07XG5cdGNvbnN0IGxvYWRQcmV2aWV3RnJvbVJlZGlyID0gKHJlZGlyTWF0Y2gsIG5hdnBvcCkgPT4ge1xuXHRcdC8vIHJlZGlyTWF0Y2ggaXMgYSByZWdleCBtYXRjaFxuXHRcdGNvbnN0IHRhcmdldCA9IG5ldyBUaXRsZSgpLmZyb21XaWtpVGV4dChyZWRpck1hdGNoWzJdKTtcblx0XHQvLyBvdmVyd3JpdGUgKG9yIGFkZCkgYW5jaG9yIGZyb20gb3JpZ2luYWwgdGFyZ2V0XG5cdFx0Ly8gbWVkaWF3aWtpIGRvZXMgb3ZlcndyaXRlXG5cdFx0aWYgKG5hdnBvcC5hcnRpY2xlLmFuY2hvcikge1xuXHRcdFx0dGFyZ2V0LmFuY2hvciA9IG5hdnBvcC5hcnRpY2xlLmFuY2hvcjtcblx0XHR9XG5cdFx0bmF2cG9wLnJlZGlyKys7XG5cdFx0bmF2cG9wLnJlZGlyVGFyZ2V0ID0gdGFyZ2V0O1xuXHRcdGNvbnN0IHdhcm5SZWRpciA9IHJlZGlyTGluayh0YXJnZXQsIG5hdnBvcC5hcnRpY2xlKTtcblx0XHRzZXRQb3B1cEhUTUwod2FyblJlZGlyLCAncG9wdXBXYXJuUmVkaXInLCBuYXZwb3AuaWROdW1iZXIpO1xuXHRcdG5hdnBvcC5hcnRpY2xlID0gdGFyZ2V0O1xuXHRcdGZpbGxFbXB0eVNwYW5zKHtcblx0XHRcdHJlZGlyOiB0cnVlLFxuXHRcdFx0cmVkaXJUYXJnZXQ6IHRhcmdldCxcblx0XHRcdG5hdnBvcHVwOiBuYXZwb3AsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGxvYWRQcmV2aWV3KHRhcmdldCwgbnVsbCwgbmF2cG9wKTtcblx0fTtcblx0Y29uc3QgaW5zZXJ0UHJldmlldyA9IChkb3dubG9hZCkgPT4ge1xuXHRcdGlmICghZG93bmxvYWQub3duZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcmVkaXJNYXRjaCA9IHBnLnJlLnJlZGlyZWN0LmV4ZWMoZG93bmxvYWQuZGF0YSk7XG5cdFx0aWYgKGRvd25sb2FkLm93bmVyLnJlZGlyID09PSAwICYmIHJlZGlyTWF0Y2gpIHtcblx0XHRcdGxvYWRQcmV2aWV3RnJvbVJlZGlyKHJlZGlyTWF0Y2gsIGRvd25sb2FkLm93bmVyKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRvd25sb2FkLm93bmVyLnZpc2libGUgfHwgIWdldFZhbHVlT2YoJ3BvcHVwTGF6eVByZXZpZXdzJykpIHtcblx0XHRcdGluc2VydFByZXZpZXdOb3coZG93bmxvYWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpZCA9IGRvd25sb2FkLm93bmVyLnJlZGlyID8gJ1BSRVZJRVdfUkVESVJfSE9PSycgOiAnUFJFVklFV19IT09LJztcblx0XHRcdGRvd25sb2FkLm93bmVyLmFkZEhvb2soXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpbnNlcnRQcmV2aWV3Tm93KGRvd25sb2FkKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0J3VuaGlkZScsXG5cdFx0XHRcdCdhZnRlcicsXG5cdFx0XHRcdGlkXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgaW5zZXJ0UHJldmlld05vdyA9IChkb3dubG9hZCkgPT4ge1xuXHRcdGlmICghZG93bmxvYWQub3duZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgd2lraVRleHQgPSBkb3dubG9hZC5kYXRhO1xuXHRcdGNvbnN0IG5hdnBvcCA9IGRvd25sb2FkLm93bmVyO1xuXHRcdGNvbnN0IGFydCA9IG5hdnBvcC5yZWRpclRhcmdldCB8fCBuYXZwb3Aub3JpZ2luYWxBcnRpY2xlO1xuXHRcdG1ha2VGaXhEYWJzKHdpa2lUZXh0LCBuYXZwb3ApO1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cFN1bW1hcnlEYXRhJykpIHtcblx0XHRcdGdldFBhZ2VJbmZvKHdpa2lUZXh0LCBkb3dubG9hZCk7XG5cdFx0XHRzZXRQb3B1cFRyYWlsZXIoZ2V0UGFnZUluZm8od2lraVRleHQsIGRvd25sb2FkKSwgbmF2cG9wLmlkTnVtYmVyKTtcblx0XHR9XG5cdFx0bGV0IGltYWdlUGFnZSA9ICcnO1xuXHRcdGltYWdlUGFnZSA9IGFydC5uYW1lc3BhY2VJZCgpID09PSBwZy5uc0ltYWdlSWQgPyBhcnQudG9TdHJpbmcoKSA6IGdldFZhbGlkSW1hZ2VGcm9tV2lraVRleHQod2lraVRleHQpO1xuXHRcdGlmIChpbWFnZVBhZ2UpIHtcblx0XHRcdGxvYWRJbWFnZShUaXRsZS5mcm9tV2lraVRleHQoaW1hZ2VQYWdlKSwgbmF2cG9wKTtcblx0XHR9XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwUHJldmlld3MnKSkge1xuXHRcdFx0aW5zZXJ0QXJ0aWNsZVByZXZpZXcoZG93bmxvYWQsIGFydCwgbmF2cG9wKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGluc2VydEFydGljbGVQcmV2aWV3ID0gKGRvd25sb2FkLCBhcnQsIG5hdnBvcCkgPT4ge1xuXHRcdGlmIChkb3dubG9hZCAmJiB0eXBlb2YgZG93bmxvYWQuZGF0YSA9PT0gdHlwZW9mICcnKSB7XG5cdFx0XHRpZiAoYXJ0Lm5hbWVzcGFjZUlkKCkgPT09IHBnLm5zVGVtcGxhdGVJZCAmJiBnZXRWYWx1ZU9mKCdwb3B1cFByZXZpZXdSYXdUZW1wbGF0ZXMnKSkge1xuXHRcdFx0XHQvLyBGSVhNRSBjb21wYXJlL2NvbnNvbGlkYXRlIHdpdGggZGlmZiBlc2NhcGluZyBjb2RlIGZvciB3aWtpdGV4dFxuXHRcdFx0XHRjb25zdCBoID0gYDxocj48c3BhbiBzdHlsZT1cImZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XCI+JHtkb3dubG9hZC5kYXRhXG5cdFx0XHRcdFx0LmVudGlmeSgpXG5cdFx0XHRcdFx0LnNwbGl0KFN0cmluZy5yYXdgXFxuYClcblx0XHRcdFx0XHQuam9pbihTdHJpbmcucmF3YDxicj5cXG5gKX08L3NwYW4+YDtcblx0XHRcdFx0c2V0UG9wdXBIVE1MKGgsICdwb3B1cFByZXZpZXcnLCBuYXZwb3AuaWROdW1iZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcCA9IHByZXBQcmV2aWV3bWFrZXIoZG93bmxvYWQuZGF0YSwgYXJ0LCBuYXZwb3ApO1xuXHRcdFx0XHRwLnNob3dQcmV2aWV3KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBwcmVwUHJldmlld21ha2VyID0gKGRhdGEsIGFydGljbGUsIG5hdnBvcCkgPT4ge1xuXHRcdC8vIGRlYWwgd2l0aCB0cmlja3N5IGFuY2hvcnNcblx0XHRjb25zdCBkID0gYW5jaG9yaXplKGRhdGEsIGFydGljbGUuYW5jaG9yU3RyaW5nKCkpO1xuXHRcdGNvbnN0IHVybEJhc2UgPSBqb2luUGF0aChbcGcud2lraS5hcnRpY2xlYmFzZSwgYXJ0aWNsZS51cmxTdHJpbmcoKV0pO1xuXHRcdGNvbnN0IHAgPSBuZXcgUHJldmlld21ha2VyKGQsIHVybEJhc2UsIG5hdnBvcCk7XG5cdFx0cmV0dXJuIHA7XG5cdH07XG5cdC8vIFRyeSB0byBpbWl0YXRlIHRoZSB3YXkgbWVkaWF3aWtpIGdlbmVyYXRlcyBIVE1MIGFuY2hvcnMgZnJvbSBzZWN0aW9uIHRpdGxlc1xuXHRjb25zdCBhbmNob3JpemUgPSAoZCwgYW5jaCkgPT4ge1xuXHRcdGlmICghYW5jaCkge1xuXHRcdFx0cmV0dXJuIGQ7XG5cdFx0fVxuXHRcdGNvbnN0IGFuY2hSZSA9IG5ldyBSZWdFeHAoXG5cdFx0XHRgKD86PStcXFxccyoke2xpdGVyYWxpemVSZWdleChhbmNoKS5yZXBsYWNlKC9bIF9dL2csICdbXyBdJyl9XFxcXHMqPSt8XFxcXHtcXFxce1xcXFxzKiR7Z2V0VmFsdWVPZihcblx0XHRcdFx0J3BvcHVwQW5jaG9yUmVnZXhwJ1xuXHRcdFx0KX1cXFxccyooPzpcXFxcfFtefH1dKikqP1xcXFxzKiR7bGl0ZXJhbGl6ZVJlZ2V4KGFuY2gpfVxcXFxzKig/OlxcXFx8W159XSopP319KWBcblx0XHQpO1xuXHRcdGNvbnN0IG1hdGNoID0gZC5tYXRjaChhbmNoUmUpO1xuXHRcdGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAwICYmIG1hdGNoWzBdKSB7XG5cdFx0XHRyZXR1cm4gZC5zbGljZShNYXRoLm1heCgwLCBkLmluZGV4T2YobWF0Y2hbMF0pKSk7XG5cdFx0fVxuXHRcdC8vIG5vdyB0cnkgdG8gZGVhbCB3aXRoID09PSBmb28gW1tiYXJ8YmF6XV0gYm9vbSA9PT0gLT4gI2Zvb19iYXpfYm9vbVxuXHRcdGNvbnN0IGxpbmVzID0gZC5zcGxpdCgnXFxuJyk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0bGluZXNbaV0gPSBsaW5lc1tpXVxuXHRcdFx0XHQucmVwbGFjZSgvXFxbezJ9KFteXFxdfF0qP1xcfCk/KC4qPyldezJ9L2csICckMicpXG5cdFx0XHRcdC5yZXBsYWNlKC8nJycoW14nXSkvZywgJyQxJylcblx0XHRcdFx0LnJlcGxhY2UoLycnKFteJ10pL2csICckMScpO1xuXHRcdFx0aWYgKGFuY2hSZS50ZXN0KGxpbmVzW2ldKSkge1xuXHRcdFx0XHRyZXR1cm4gZFxuXHRcdFx0XHRcdC5zcGxpdCgnXFxuJylcblx0XHRcdFx0XHQuc2xpY2UoaSlcblx0XHRcdFx0XHQuam9pbignXFxuJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXltePV0qLywgJycpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZDtcblx0fTtcblx0Y29uc3Qga2lsbFBvcHVwID0gZnVuY3Rpb24ga2lsbFBvcHVwKCkge1xuXHRcdHJlbW92ZU1vZGlmaWVyS2V5TGlzdGVuZXIodGhpcyk7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwU2hvcnRjdXRLZXlzJykpIHtcblx0XHRcdHJtUG9wdXBTaG9ydGN1dHMoKTtcblx0XHR9XG5cdFx0aWYgKCFwZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAocGcuY3VycmVudC5saW5rICYmIHBnLmN1cnJlbnQubGluay5uYXZwb3B1cCkge1xuXHRcdFx0cGcuY3VycmVudC5saW5rLm5hdnBvcHVwLmJhbmlzaCgpO1xuXHRcdH1cblx0XHRwZy5jdXJyZW50LmxpbmsgPSBudWxsO1xuXHRcdGFib3J0QWxsRG93bmxvYWRzKCk7XG5cdFx0aWYgKHBnLnRpbWVyLmNoZWNrUG9wdXBQb3NpdGlvbikge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbChwZy50aW1lci5jaGVja1BvcHVwUG9zaXRpb24pO1xuXHRcdFx0cGcudGltZXIuY2hlY2tQb3B1cFBvc2l0aW9uID0gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7IC8vIHByZXNlcnZlIGRlZmF1bHQgYWN0aW9uXG5cdH07XG5cdC8vIEVOREZJTEU6IGFjdGlvbnMuanNcblx0Ly8gU1RBUlRGSUxFOiBkb21kcmFnLmpzXG5cdC8qKlxuXHQgKiBAZmlsZW92ZXJ2aWV3XG5cdCAqIFRoZSB7QHNvdXJjZSBEcmFnfSBvYmplY3QsIHdoaWNoIGVuYWJsZXMgb2JqZWN0cyB0byBiZSBkcmFnZ2VkIGFyb3VuZC5cblx0ICogPHByZT5cblx0ICpcblx0ICogZG9tLWRyYWcuanNcblx0ICogMDkuMjUuMjAwMVxuXHQgKiB3d3cueW91bmdwdXAubmV0XG5cdCAqXG5cdCAqIDEwLjI4LjIwMDEgLSBmaXhlZCBtaW5vciBidWcgd2hlcmUgZXZlbnRzXG5cdCAqXG5cdCAqIHNvbWV0aW1lcyBmaXJlZCBvZmYgdGhlIGhhbmRsZSwgbm90IHRoZSByb290LlxuXHQgKiBQYXJlZCBkb3duLCBzb21lIGhvb2tzIGFkZGVkIGJ5IEx1cGluXG5cdCAqIENvcHlyaWdodCBBYXJvbiBCb29kbWFuLlxuXHQgKiBTYXlpbmcgc3R1cGlkIHRoaW5ncyBkYWlseSBzaW5jZSBNYXJjaCAyMDAxLlxuXHQgKiA8L3ByZT5cblx0ICovXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IERyYWcgb2JqZWN0LiBUaGlzIGlzIHVzZWQgdG8gbWFrZSB2YXJpb3VzIERPTSBlbGVtZW50cyBkcmFnZ2FibGUuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0Y2xhc3MgRHJhZyB7XG5cdFx0Y29uc3RydWN0b3IoKSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIENvbmRpdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gZHJhZy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgdGFrZSBvbmUgcGFyYW1ldGVyLFxuXHRcdFx0ICogYW4gRXZlbnQuICBUbyBkaXNhYmxlIHRoaXMsIHNldCBpdCB0byA8Y29kZT5udWxsPC9jb2RlPi5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBGdW5jdGlvblxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnN0YXJ0Q29uZGl0aW9uID0gbnVsbDtcblx0XHRcdC8qKlxuXHRcdFx0ICogSG9vayB0byBiZSBydW4gd2hlbiB0aGUgZHJhZyBmaW5pc2hlcy4gVGhpcyBpcyBwYXNzZWQgdGhlIGZpbmFsIGNvb3JkaW5hdGVzIG9mIHRoZVxuXHRcdFx0ICogZHJhZ2dlZCBvYmplY3QgKHR3byBpbnRlZ2VycywgeCBhbmQgeSkuIFRvIGRpc2FibGVzIHRoaXMsIHNldCBpdCB0byA8Y29kZT5udWxsPC9jb2RlPi5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBGdW5jdGlvblxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmVuZEhvb2sgPSBudWxsO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBHZXRzIGFuIGV2ZW50IGluIGEgY3Jvc3MtYnJvd3NlciBtYW5uZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRzdGF0aWMgZml4RShlKSB7XG5cdFx0XHRpZiAoZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGUgPSB3aW5kb3cuZXZlbnQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZS5sYXllclggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRlLmxheWVyWCA9IGUub2Zmc2V0WDtcblx0XHRcdH1cblx0XHRcdGlmIChlLmxheWVyWSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGUubGF5ZXJZID0gZS5vZmZzZXRZO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGU7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEluaXRpYWxpc2VzIHRoZSBEcmFnIGluc3RhbmNlIGJ5IHRlbGxpbmcgaXQgd2hpY2ggb2JqZWN0IHlvdSB3YW50IHRvIGJlIGRyYWdnYWJsZSwgYW5kIHdoYXRcblx0XHQgKiB5b3Ugd2FudCB0byBkcmFnIGl0IGJ5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtET01FbGVtZW50fSBvIFRoZSBcImhhbmRsZVwiIGJ5IHdoaWNoIDxjb2RlPm9Sb290PC9jb2RlPiBpcyBkcmFnZ2VkLlxuXHRcdCAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb1Jvb3QgVGhlIG9iamVjdCB3aGljaCBtb3ZlcyB3aGVuIDxjb2RlPm88L2NvZGU+IGlzIGRyYWdnZWQsIG9yIDxjb2RlPm88L2NvZGU+IGlmIG9taXR0ZWQuXG5cdFx0ICovXG5cdFx0aW5pdChvLCBvUm9vdCkge1xuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHR0aGlzLm9iaiA9IG87XG5cdFx0XHRvLm9ubW91c2Vkb3duID0gKGUpID0+IHtcblx0XHRcdFx0c2VsZi5zdGFydChlKTtcblx0XHRcdH07XG5cdFx0XHRvLmRyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRvLnBvcHVwc19kcmFnZ2FibGUgPSB0cnVlO1xuXHRcdFx0by5obW9kZSA9IHRydWU7XG5cdFx0XHRvLnZtb2RlID0gdHJ1ZTtcblx0XHRcdG8ucm9vdCA9IG9Sb290IHx8IG87XG5cdFx0XHRpZiAoTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChvLnJvb3Quc3R5bGUubGVmdCwgMTApKSkge1xuXHRcdFx0XHRvLnJvb3Quc3R5bGUubGVmdCA9ICcwcHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKE51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQoby5yb290LnN0eWxlLnRvcCwgMTApKSkge1xuXHRcdFx0XHRvLnJvb3Quc3R5bGUudG9wID0gJzBweCc7XG5cdFx0XHR9XG5cdFx0XHRvLnJvb3Qub250aGlzU3RhcnQgPSAoKSA9PiB7fTtcblx0XHRcdG8ucm9vdC5vbnRoaXNFbmQgPSAoKSA9PiB7fTtcblx0XHRcdG8ucm9vdC5vbnRoaXMgPSAoKSA9PiB7fTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogU3RhcnRzIHRoZSBkcmFnLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBlXG5cdFx0ICovXG5cdFx0c3RhcnQoZSkge1xuXHRcdFx0Y29uc3QgbyA9IHRoaXMub2JqOyAvLyA9IHRoaXM7XG5cdFx0XHRlID0gRHJhZy5maXhFKGUpO1xuXHRcdFx0aWYgKHRoaXMuc3RhcnRDb25kaXRpb24gJiYgIXRoaXMuc3RhcnRDb25kaXRpb24oZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgeSA9IE51bWJlci5wYXJzZUludChvLnZtb2RlID8gby5yb290LnN0eWxlLnRvcCA6IG8ucm9vdC5zdHlsZS5ib3R0b20sIDEwKTtcblx0XHRcdGNvbnN0IHggPSBOdW1iZXIucGFyc2VJbnQoby5obW9kZSA/IG8ucm9vdC5zdHlsZS5sZWZ0IDogby5yb290LnN0eWxlLnJpZ2h0LCAxMCk7XG5cdFx0XHRvLnJvb3Qub250aGlzU3RhcnQoeCwgeSk7XG5cdFx0XHRvLmxhc3RNb3VzZVggPSBlLmNsaWVudFg7XG5cdFx0XHRvLmxhc3RNb3VzZVkgPSBlLmNsaWVudFk7XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdG8ub25tb3VzZW1vdmVEZWZhdWx0ID0gZG9jdW1lbnQub25tb3VzZW1vdmU7XG5cdFx0XHRvLmRyYWdnaW5nID0gdHJ1ZTtcblx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gKGUpID0+IHtcblx0XHRcdFx0c2VsZi5kcmFnKGUpO1xuXHRcdFx0fTtcblx0XHRcdGRvY3VtZW50Lm9ubW91c2V1cCA9IChlKSA9PiB7XG5cdFx0XHRcdHNlbGYuZW5kKGUpO1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogRG9lcyB0aGUgZHJhZy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RXZlbnR9IGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGRyYWcoZSkge1xuXHRcdFx0ZSA9IERyYWcuZml4RShlKTtcblx0XHRcdGNvbnN0IG8gPSB0aGlzLm9iajtcblx0XHRcdGNvbnN0IGV5ID0gZS5jbGllbnRZO1xuXHRcdFx0Y29uc3QgZXggPSBlLmNsaWVudFg7XG5cdFx0XHRjb25zdCB5ID0gTnVtYmVyLnBhcnNlSW50KG8udm1vZGUgPyBvLnJvb3Quc3R5bGUudG9wIDogby5yb290LnN0eWxlLmJvdHRvbSwgMTApO1xuXHRcdFx0Y29uc3QgeCA9IE51bWJlci5wYXJzZUludChvLmhtb2RlID8gby5yb290LnN0eWxlLmxlZnQgOiBvLnJvb3Quc3R5bGUucmlnaHQsIDEwKTtcblx0XHRcdGNvbnN0IG54ID0geCArIChleCAtIG8ubGFzdE1vdXNlWCkgKiAoby5obW9kZSA/IDEgOiAtMSk7XG5cdFx0XHRjb25zdCBueSA9IHkgKyAoZXkgLSBvLmxhc3RNb3VzZVkpICogKG8udm1vZGUgPyAxIDogLTEpO1xuXHRcdFx0dGhpcy5vYmoucm9vdC5zdHlsZVtvLmhtb2RlID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBgJHtueH1weGA7XG5cdFx0XHR0aGlzLm9iai5yb290LnN0eWxlW28udm1vZGUgPyAndG9wJyA6ICdib3R0b20nXSA9IGAke255fXB4YDtcblx0XHRcdHRoaXMub2JqLmxhc3RNb3VzZVggPSBleDtcblx0XHRcdHRoaXMub2JqLmxhc3RNb3VzZVkgPSBleTtcblx0XHRcdHRoaXMub2JqLnJvb3Qub250aGlzKG54LCBueSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEVuZHMgdGhlIGRyYWcuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGVuZCgpIHtcblx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gdGhpcy5vYmoub25tb3VzZW1vdmVEZWZhdWx0O1xuXHRcdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcblx0XHRcdHRoaXMub2JqLmRyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRpZiAodGhpcy5lbmRIb29rKSB7XG5cdFx0XHRcdHRoaXMuZW5kSG9vayhcblx0XHRcdFx0XHROdW1iZXIucGFyc2VJbnQodGhpcy5vYmoucm9vdC5zdHlsZVt0aGlzLm9iai5obW9kZSA/ICdsZWZ0JyA6ICdyaWdodCddLCAxMCksXG5cdFx0XHRcdFx0TnVtYmVyLnBhcnNlSW50KHRoaXMub2JqLnJvb3Quc3R5bGVbdGhpcy5vYmoudm1vZGUgPyAndG9wJyA6ICdib3R0b20nXSwgMTApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIEVOREZJTEU6IGRvbWRyYWcuanNcblx0Ly8gU1RBUlRGSUxFOiBzdHJ1Y3R1cmVzLmpzXG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwgPSB7fTtcblx0cGcuc3RydWN0dXJlcy5vcmlnaW5hbC5wb3B1cExheW91dCA9ICgpID0+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0J3BvcHVwRXJyb3InLFxuXHRcdFx0J3BvcHVwSW1hZ2UnLFxuXHRcdFx0J3BvcHVwVG9wTGlua3MnLFxuXHRcdFx0J3BvcHVwVGl0bGUnLFxuXHRcdFx0J3BvcHVwVXNlckRhdGEnLFxuXHRcdFx0J3BvcHVwRGF0YScsXG5cdFx0XHQncG9wdXBPdGhlckxpbmtzJyxcblx0XHRcdCdwb3B1cFJlZGlyJyxcblx0XHRcdFsncG9wdXBXYXJuUmVkaXInLCAncG9wdXBSZWRpclRvcExpbmtzJywgJ3BvcHVwUmVkaXJUaXRsZScsICdwb3B1cFJlZGlyRGF0YScsICdwb3B1cFJlZGlyT3RoZXJMaW5rcyddLFxuXHRcdFx0J3BvcHVwTWlzY1Rvb2xzJyxcblx0XHRcdFsncG9wdXBSZWRsaW5rJ10sXG5cdFx0XHQncG9wdXBQcmVQcmV2aWV3U2VwJyxcblx0XHRcdCdwb3B1cFByZXZpZXcnLFxuXHRcdFx0J3BvcHVwU2Vjb25kUHJldmlldycsXG5cdFx0XHQncG9wdXBQcmV2aWV3TW9yZScsXG5cdFx0XHQncG9wdXBQb3N0UHJldmlldycsXG5cdFx0XHQncG9wdXBGaXhEYWInLFxuXHRcdF07XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBSZWRpclNwYW5zID0gKCkgPT4ge1xuXHRcdHJldHVybiBbXG5cdFx0XHQncG9wdXBSZWRpcicsXG5cdFx0XHQncG9wdXBXYXJuUmVkaXInLFxuXHRcdFx0J3BvcHVwUmVkaXJUb3BMaW5rcycsXG5cdFx0XHQncG9wdXBSZWRpclRpdGxlJyxcblx0XHRcdCdwb3B1cFJlZGlyRGF0YScsXG5cdFx0XHQncG9wdXBSZWRpck90aGVyTGlua3MnLFxuXHRcdF07XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBUaXRsZSA9ICh4KSA9PiB7XG5cdFx0bG9nKCdkZWZhdWx0c3RydWN0dXJlLnBvcHVwVGl0bGUnKTtcblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwTmF2TGlua3MnKSkge1xuXHRcdFx0cmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwoJzxiPjw8bWFpbmxpbms+PjwvYj4nLCB4LmFydGljbGUsIHgucGFyYW1zKTtcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLm9yaWdpbmFsLnBvcHVwVG9wTGlua3MgPSAoeCkgPT4ge1xuXHRcdGxvZygnZGVmYXVsdHN0cnVjdHVyZS5wb3B1cFRvcExpbmtzJyk7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwTmF2TGlua3MnKSkge1xuXHRcdFx0cmV0dXJuIG5hdkxpbmtzSFRNTCh4LmFydGljbGUsIHguaGludCwgeC5wYXJhbXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBJbWFnZSA9ICh4KSA9PiB7XG5cdFx0bG9nKGBvcmlnaW5hbC5wb3B1cEltYWdlLCB4LmFydGljbGU9JHt4LmFydGljbGV9LCB4Lm5hdnBvcC5pZE51bWJlcj0ke3gubmF2cG9wLmlkTnVtYmVyfWApO1xuXHRcdHJldHVybiBpbWFnZUhUTUwoeC5hcnRpY2xlLCB4Lm5hdnBvcC5pZE51bWJlcik7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBSZWRpclRpdGxlID0gcGcuc3RydWN0dXJlcy5vcmlnaW5hbC5wb3B1cFRpdGxlO1xuXHRwZy5zdHJ1Y3R1cmVzLm9yaWdpbmFsLnBvcHVwUmVkaXJUb3BMaW5rcyA9IHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBUb3BMaW5rcztcblx0Y29uc3QgY29weVN0cnVjdHVyZSA9IChvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkgPT4ge1xuXHRcdHBnLnN0cnVjdHVyZXNbbmV3U3RydWN0dXJlXSA9IHt9O1xuXHRcdGZvciAoY29uc3QgcHJvcCBpbiBwZy5zdHJ1Y3R1cmVzW29sZFN0cnVjdHVyZV0pIHtcblx0XHRcdGlmICghT2JqZWN0Lmhhc093bihwZy5zdHJ1Y3R1cmVzW29sZFN0cnVjdHVyZV0sIHByb3ApKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0cGcuc3RydWN0dXJlc1tuZXdTdHJ1Y3R1cmVdW3Byb3BdID0gcGcuc3RydWN0dXJlc1tvbGRTdHJ1Y3R1cmVdW3Byb3BdO1xuXHRcdH1cblx0fTtcblx0Y29weVN0cnVjdHVyZSgnb3JpZ2luYWwnLCAnbm9zdGFsZ2lhJyk7XG5cdHBnLnN0cnVjdHVyZXMubm9zdGFsZ2lhLnBvcHVwVG9wTGlua3MgPSAoeCkgPT4ge1xuXHRcdGxldCBzdHIgPSAnJztcblx0XHRzdHIgKz0gJzxiPjw8bWFpbmxpbmt8c2hvcnRjdXQ9ID4+PC9iPic7XG5cdFx0Ly8gdXNlciBsaW5rc1xuXHRcdC8vIGNvbnRyaWJzIC0gbG9nIC0gY291bnQgLSBlbWFpbCAtIGJsb2NrXG5cdFx0Ly8gY291bnQgb25seSBpZiBhcHBsaWNhYmxlOyBibG9jayBvbmx5IGlmIHBvcHVwQWRtaW5MaW5rc1xuXHRcdHN0ciArPSAnaWYodXNlcil7PGJyPjw8Y29udHJpYnN8c2hvcnRjdXQ9Yz4+Jztcblx0XHRzdHIgKz0gJ2lmKHdpa2ltZWRpYSl7Kjw8Y291bnR8c2hvcnRjdXQ9Iz4+fSc7XG5cdFx0c3RyICs9ICdpZihpcHVzZXIpe31lbHNleyo8PGVtYWlsfHNob3J0Y3V0PUU+Pn1pZihhZG1pbil7Kjw8YmxvY2t8c2hvcnRjdXQ9Yj4+fX0nO1xuXHRcdC8vIGVkaXRpbmcgbGlua3Ncblx0XHQvLyB0YWxrcGFnZSAgIC0+IGVkaXR8bmV3IC0gaGlzdG9yeSAtIHVufHdhdGNoIC0gYXJ0aWNsZXxlZGl0XG5cdFx0Ly8gb3RoZXIgcGFnZSAtPiBlZGl0IC0gaGlzdG9yeSAtIHVufHdhdGNoIC0gdGFsa3xlZGl0fG5ld1xuXHRcdGNvbnN0IGVkaXRzdHIgPSAnPDxlZGl0fHNob3J0Y3V0PWU+Pic7XG5cdFx0Y29uc3QgZWRpdE9sZGlkU3RyID0gYGlmKG9sZGlkKXs8PGVkaXRPbGR8c2hvcnRjdXQ9ZT4+fDw8cmV2ZXJ0fHNob3J0Y3V0PXZ8cnY+Pnw8PGVkaXR8Y3VyPj59ZWxzZXske2VkaXRzdHJ9fWA7XG5cdFx0Y29uc3QgaGlzdG9yeXN0ciA9ICc8PGhpc3Rvcnl8c2hvcnRjdXQ9aD4+Jztcblx0XHRjb25zdCB3YXRjaHN0ciA9ICc8PHVud2F0Y2h8dW53YXRjaFNob3J0Pj58PDx3YXRjaHxzaG9ydGN1dD13fHdhdGNoVGhpbmd5Pj4nO1xuXHRcdHN0ciArPVxuXHRcdFx0YDxicj5pZih0YWxrKXske2VkaXRPbGRpZFN0cn18PDxuZXd8c2hvcnRjdXQ9Kz4+YCArXG5cdFx0XHRgKiR7aGlzdG9yeXN0cn0qJHt3YXRjaHN0cn0qYCArXG5cdFx0XHQnPGI+PDxhcnRpY2xlfHNob3J0Y3V0PWE+PjwvYj58PDxlZGl0QXJ0aWNsZXxlZGl0Pj4nICtcblx0XHRcdGB9ZWxzZXske1xuXHRcdFx0XHQvLyBub3QgYSB0YWxrIHBhZ2Vcblx0XHRcdFx0ZWRpdE9sZGlkU3RyXG5cdFx0XHR9KiR7aGlzdG9yeXN0cn0qJHt3YXRjaHN0cn0qYCArXG5cdFx0XHQnPGI+PDx0YWxrfHNob3J0Y3V0PXQ+PjwvYj58PDxlZGl0VGFsa3xlZGl0Pj58PDxuZXdUYWxrfHNob3J0Y3V0PSt8bmV3Pj59Jztcblx0XHQvLyBtaXNjIGxpbmtzXG5cdFx0c3RyICs9ICc8YnI+PDx3aGF0TGlua3NIZXJlfHNob3J0Y3V0PWw+Pio8PHJlbGF0ZWRDaGFuZ2VzfHNob3J0Y3V0PXI+Pic7XG5cdFx0c3RyICs9ICdpZihhZG1pbil7PGJyPn1lbHNleyp9PDxtb3ZlfHNob3J0Y3V0PW0+Pic7XG5cdFx0Ly8gYWRtaW4gbGlua3Ncblx0XHRzdHIgKz1cblx0XHRcdCdpZihhZG1pbil7Kjw8dW5wcm90ZWN0fHVucHJvdGVjdFNob3J0Pj58PDxwcm90ZWN0fHNob3J0Y3V0PXA+PionICtcblx0XHRcdCc8PHVuZGVsZXRlfHVuZGVsZXRlU2hvcnQ+Pnw8PGRlbGV0ZXxzaG9ydGN1dD1kPj59Jztcblx0XHRyZXR1cm4gbmF2bGlua1N0cmluZ1RvSFRNTChzdHIsIHguYXJ0aWNsZSwgeC5wYXJhbXMpO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLm5vc3RhbGdpYS5wb3B1cFJlZGlyVG9wTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLm5vc3RhbGdpYS5wb3B1cFRvcExpbmtzO1xuXHQvKiogLS0gZmFuY3kgLS0gKi9cblx0Y29weVN0cnVjdHVyZSgnb3JpZ2luYWwnLCAnZmFuY3knKTtcblx0cGcuc3RydWN0dXJlcy5mYW5jeS5wb3B1cFRpdGxlID0gKHgpID0+IHtcblx0XHRyZXR1cm4gbmF2bGlua1N0cmluZ1RvSFRNTCgnPGZvbnQgc2l6ZT0rMD48PG1haW5saW5rPj48L2ZvbnQ+JywgeC5hcnRpY2xlLCB4LnBhcmFtcyk7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMuZmFuY3kucG9wdXBUb3BMaW5rcyA9ICh4KSA9PiB7XG5cdFx0Y29uc3QgaGlzdCA9ICc8PGhpc3Rvcnl8c2hvcnRjdXQ9aHxoaXN0Pj58PDxsYXN0RWRpdHxzaG9ydGN1dD0vfGxhc3Q+Pnw8PGVkaXRvcnN8c2hvcnRjdXQ9RXxlZHM+Pic7XG5cdFx0Y29uc3Qgd2F0Y2ggPSAnPDx1bndhdGNofHVud2F0Y2hTaG9ydD4+fDw8d2F0Y2h8c2hvcnRjdXQ9d3x3YXRjaFRoaW5neT4+Jztcblx0XHRjb25zdCBtb3ZlID0gJzw8bW92ZXxzaG9ydGN1dD1tfG1vdmU+Pic7XG5cdFx0cmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwoXG5cdFx0XHQnaWYodGFsayl7JyArXG5cdFx0XHRcdGA8PGVkaXR8c2hvcnRjdXQ9ZT4+fDw8bmV3fHNob3J0Y3V0PSt8Kz4+KiR7aGlzdH0qYCArXG5cdFx0XHRcdCc8PGFydGljbGV8c2hvcnRjdXQ9YT4+fDw8ZWRpdEFydGljbGV8ZWRpdD4+JyArXG5cdFx0XHRcdGAqJHt3YXRjaH0qJHttb3ZlfX1lbHNlezw8ZWRpdHxzaG9ydGN1dD1lPj4qJHtoaXN0fSo8PHRhbGt8c2hvcnRjdXQ9dHw+Pnw8PGVkaXRUYWxrfGVkaXQ+Pnw8PG5ld1RhbGt8c2hvcnRjdXQ9K3xuZXc+PmAgK1xuXHRcdFx0XHRgKiR7d2F0Y2h9KiR7bW92ZX19PGJyPmAsXG5cdFx0XHR4LmFydGljbGUsXG5cdFx0XHR4LnBhcmFtc1xuXHRcdCk7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMuZmFuY3kucG9wdXBPdGhlckxpbmtzID0gKHgpID0+IHtcblx0XHRjb25zdCBhZG1pbiA9XG5cdFx0XHQnPDx1bnByb3RlY3R8dW5wcm90ZWN0U2hvcnQ+Pnw8PHByb3RlY3R8c2hvcnRjdXQ9cD4+Kjw8dW5kZWxldGV8dW5kZWxldGVTaG9ydD4+fDw8ZGVsZXRlfHNob3J0Y3V0PWR8ZGVsPj4nO1xuXHRcdGxldCB1c2VyID0gJzw8Y29udHJpYnN8c2hvcnRjdXQ9Yz4+aWYod2lraW1lZGlhKXt8PDxjb3VudHxzaG9ydGN1dD0jfCM+Pn0nO1xuXHRcdHVzZXIgKz0gYGlmKGlwdXNlcil7fDw8YXJpbj4+fWVsc2V7Kjw8ZW1haWx8c2hvcnRjdXQ9RXwke3BvcHVwU3RyaW5nKFxuXHRcdFx0J2VtYWlsJ1xuXHRcdCl9Pj59aWYoYWRtaW4peyo8PGJsb2NrfHNob3J0Y3V0PWI+Pn1gO1xuXHRcdGNvbnN0IG5vcm1hbCA9ICc8PHdoYXRMaW5rc0hlcmV8c2hvcnRjdXQ9bHxsaW5rcyBoZXJlPj4qPDxyZWxhdGVkQ2hhbmdlc3xzaG9ydGN1dD1yfHJlbGF0ZWQ+Pic7XG5cdFx0cmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwoXG5cdFx0XHRgPGJyPmlmKHVzZXIpeyR7dXNlcn0qfWlmKGFkbWluKXske2FkbWlufWlmKHVzZXIpezxicj59ZWxzZXsqfX0ke25vcm1hbH1gLFxuXHRcdFx0eC5hcnRpY2xlLFxuXHRcdFx0eC5wYXJhbXNcblx0XHQpO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLmZhbmN5LnBvcHVwUmVkaXJUaXRsZSA9IHBnLnN0cnVjdHVyZXMuZmFuY3kucG9wdXBUaXRsZTtcblx0cGcuc3RydWN0dXJlcy5mYW5jeS5wb3B1cFJlZGlyVG9wTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLmZhbmN5LnBvcHVwVG9wTGlua3M7XG5cdHBnLnN0cnVjdHVyZXMuZmFuY3kucG9wdXBSZWRpck90aGVyTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLmZhbmN5LnBvcHVwT3RoZXJMaW5rcztcblx0LyoqIC0tIGZhbmN5MiAtLSAqL1xuXHQvLyBoYWNrIGZvciBNYWNHeXZlck1hZ2ljXG5cdGNvcHlTdHJ1Y3R1cmUoJ2ZhbmN5JywgJ2ZhbmN5MicpO1xuXHRwZy5zdHJ1Y3R1cmVzLmZhbmN5Mi5wb3B1cFRvcExpbmtzID0gLy8gaGFjayBvdXQgdGhlIDxicj4gYXQgdGhlIGVuZCBhbmQgcHV0IG9uZSBhdCB0aGUgYmVnaW5uaW5nXG5cdFx0KHgpID0+IHtcblx0XHRcdHJldHVybiBgPGJyPiR7cGcuc3RydWN0dXJlcy5mYW5jeS5wb3B1cFRvcExpbmtzKHgpLnJlcGxhY2UoLzxicj4kL2ksICcnKX1gO1xuXHRcdH07XG5cdHBnLnN0cnVjdHVyZXMuZmFuY3kyLnBvcHVwTGF5b3V0ID0gKCkgPT4ge1xuXHRcdHJldHVybiBbXG5cdFx0XHQncG9wdXBFcnJvcicsXG5cdFx0XHQncG9wdXBJbWFnZScsXG5cdFx0XHQncG9wdXBUaXRsZScsXG5cdFx0XHQncG9wdXBVc2VyRGF0YScsXG5cdFx0XHQncG9wdXBEYXRhJyxcblx0XHRcdCdwb3B1cFRvcExpbmtzJyxcblx0XHRcdCdwb3B1cE90aGVyTGlua3MnLFxuXHRcdFx0J3BvcHVwUmVkaXInLFxuXHRcdFx0Wydwb3B1cFdhcm5SZWRpcicsICdwb3B1cFJlZGlyVG9wTGlua3MnLCAncG9wdXBSZWRpclRpdGxlJywgJ3BvcHVwUmVkaXJEYXRhJywgJ3BvcHVwUmVkaXJPdGhlckxpbmtzJ10sXG5cdFx0XHQncG9wdXBNaXNjVG9vbHMnLFxuXHRcdFx0Wydwb3B1cFJlZGxpbmsnXSxcblx0XHRcdCdwb3B1cFByZVByZXZpZXdTZXAnLFxuXHRcdFx0J3BvcHVwUHJldmlldycsXG5cdFx0XHQncG9wdXBTZWNvbmRQcmV2aWV3Jyxcblx0XHRcdCdwb3B1cFByZXZpZXdNb3JlJyxcblx0XHRcdCdwb3B1cFBvc3RQcmV2aWV3Jyxcblx0XHRcdCdwb3B1cEZpeERhYicsXG5cdFx0XTtcblx0fTtcblx0LyoqIC0tIG1lbnVzIC0tICovXG5cdGNvcHlTdHJ1Y3R1cmUoJ29yaWdpbmFsJywgJ21lbnVzJyk7XG5cdHBnLnN0cnVjdHVyZXMubWVudXMucG9wdXBMYXlvdXQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdCdwb3B1cEVycm9yJyxcblx0XHRcdCdwb3B1cEltYWdlJyxcblx0XHRcdCdwb3B1cFRvcExpbmtzJyxcblx0XHRcdCdwb3B1cFRpdGxlJyxcblx0XHRcdCdwb3B1cE90aGVyTGlua3MnLFxuXHRcdFx0J3BvcHVwUmVkaXInLFxuXHRcdFx0Wydwb3B1cFdhcm5SZWRpcicsICdwb3B1cFJlZGlyVG9wTGlua3MnLCAncG9wdXBSZWRpclRpdGxlJywgJ3BvcHVwUmVkaXJEYXRhJywgJ3BvcHVwUmVkaXJPdGhlckxpbmtzJ10sXG5cdFx0XHQncG9wdXBVc2VyRGF0YScsXG5cdFx0XHQncG9wdXBEYXRhJyxcblx0XHRcdCdwb3B1cE1pc2NUb29scycsXG5cdFx0XHRbJ3BvcHVwUmVkbGluayddLFxuXHRcdFx0J3BvcHVwUHJlUHJldmlld1NlcCcsXG5cdFx0XHQncG9wdXBQcmV2aWV3Jyxcblx0XHRcdCdwb3B1cFNlY29uZFByZXZpZXcnLFxuXHRcdFx0J3BvcHVwUHJldmlld01vcmUnLFxuXHRcdFx0J3BvcHVwUG9zdFByZXZpZXcnLFxuXHRcdFx0J3BvcHVwRml4RGFiJyxcblx0XHRdO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLm1lbnVzLnBvcHVwVG9wTGlua3MgPSAoeCwgc2hvcnRlcikgPT4ge1xuXHRcdC8vIEZJWE1FIG1heWJlIHRoaXMgc3R1ZmYgc2hvdWxkIGJlIGNhY2hlZFxuXHRcdGNvbnN0IHMgPSBbXTtcblx0XHRjb25zdCBkcm9wZGl2ID0gJzxkaXYgY2xhc3M9XCJwb3B1cF9kcm9wXCI+Jztcblx0XHRjb25zdCBlbmRkaXYgPSAnPC9kaXY+Jztcblx0XHRsZXQgaGlzdCA9ICc8PGhpc3Rvcnl8c2hvcnRjdXQ9aD4+Jztcblx0XHRpZiAoIXNob3J0ZXIpIHtcblx0XHRcdGhpc3QgPSBgPG1lbnVyb3c+JHtoaXN0fXw8PGhpc3RvcnlmZWVkfHJzcz4+fDw8ZWRpdG9yc3xzaG9ydGN1dD1FPj48L21lbnVyb3c+YDtcblx0XHR9XG5cdFx0Y29uc3QgbGFzdGVkaXQgPSAnPDxsYXN0RWRpdHxzaG9ydGN1dD0vfHNob3cgbGFzdCBlZGl0Pj4nO1xuXHRcdGNvbnN0IHRoYW5rID0gJ2lmKGRpZmYpezw8dGhhbmt8c2VuZCB0aGFua3M+Pn0nO1xuXHRcdGNvbnN0IGpzSGlzdG9yeSA9ICc8PGxhc3RDb250cmlifGxhc3Qgc2V0IG9mIGVkaXRzPj48PHNpbmNlTWV8Y2hhbmdlcyBzaW5jZSBtaW5lPj4nO1xuXHRcdGNvbnN0IGxpbmtzaGVyZSA9ICc8PHdoYXRMaW5rc0hlcmV8c2hvcnRjdXQ9bHx3aGF0IGxpbmtzIGhlcmU+Pic7XG5cdFx0Y29uc3QgcmVsYXRlZCA9ICc8PHJlbGF0ZWRDaGFuZ2VzfHNob3J0Y3V0PXJ8cmVsYXRlZCBjaGFuZ2VzPj4nO1xuXHRcdGNvbnN0IHNlYXJjaCA9ICc8bWVudXJvdz48PHNlYXJjaHxzaG9ydGN1dD1zPj48L21lbnVyb3c+Jztcblx0XHRjb25zdCB3YXRjaCA9ICc8bWVudXJvdz48PHVud2F0Y2h8dW53YXRjaFNob3J0Pj58PDx3YXRjaHxzaG9ydGN1dD13fHdhdGNoVGhpbmd5Pj48L21lbnVyb3c+Jztcblx0XHRjb25zdCBwcm90ZWN0ID0gJzxtZW51cm93Pjw8dW5wcm90ZWN0fHVucHJvdGVjdFNob3J0Pj58PDxwcm90ZWN0fHNob3J0Y3V0PXA+Pnw8PHByb3RlY3Rsb2d8bG9nPj48L21lbnVyb3c+Jztcblx0XHRjb25zdCBkZWwgPSAnPG1lbnVyb3c+PDx1bmRlbGV0ZXx1bmRlbGV0ZVNob3J0Pj58PDxkZWxldGV8c2hvcnRjdXQ9ZD4+fDw8ZGVsZXRlbG9nfGxvZz4+PC9tZW51cm93Pic7XG5cdFx0Y29uc3QgbW92ZSA9ICc8PG1vdmV8c2hvcnRjdXQ9bXxtb3ZlIHBhZ2U+Pic7XG5cdFx0Y29uc3QgbnVsbFB1cmdlID0gJzxtZW51cm93Pjw8bnVsbEVkaXR8c2hvcnRjdXQ9bnxudWxsIGVkaXQ+Pnw8PHB1cmdlfHNob3J0Y3V0PVA+PjwvbWVudXJvdz4nO1xuXHRcdGNvbnN0IHZpZXdPcHRpb25zID0gJzxtZW51cm93Pjw8dmlld3xzaG9ydGN1dD12Pj58PDxyZW5kZXJ8c2hvcnRjdXQ9Uz4+fDw8cmF3Pj48L21lbnVyb3c+Jztcblx0XHRjb25zdCBlZGl0Um93ID1cblx0XHRcdCdpZihvbGRpZCl7JyArXG5cdFx0XHQnPG1lbnVyb3c+PDxlZGl0fHNob3J0Y3V0PWU+Pnw8PGVkaXRPbGR8c2hvcnRjdXQ9ZXx0aGlzJm5ic3A7cmV2aXNpb24+PjwvbWVudXJvdz4nICtcblx0XHRcdCc8bWVudXJvdz48PHJldmVydHxzaG9ydGN1dD12Pj58PDx1bmRvPj48L21lbnVyb3c+JyArXG5cdFx0XHQnfWVsc2V7PDxlZGl0fHNob3J0Y3V0PWU+Pn0nO1xuXHRcdGNvbnN0IG1hcmtQYXRyb2xsZWQgPSAnaWYocmNpZCl7PDxtYXJrcGF0cm9sbGVkfG1hcmsgcGF0cm9sbGVkPj59Jztcblx0XHRjb25zdCBuZXdUb3BpYyA9ICdpZih0YWxrKXs8PG5ld3xzaG9ydGN1dD0rfG5ldyB0b3BpYz4+fSc7XG5cdFx0Y29uc3QgcHJvdGVjdERlbGV0ZSA9IGBpZihhZG1pbil7JHtwcm90ZWN0fSR7ZGVsfX1gO1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cEFjdGlvbnNNZW51JykpIHtcblx0XHRcdHMucHVzaChgPDxtYWlubGluaz4+KiR7ZHJvcGRpdn0ke21lbnVUaXRsZSgnYWN0aW9ucycpfWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzLnB1c2goYCR7ZHJvcGRpdn08PG1haW5saW5rPj5gKTtcblx0XHR9XG5cdFx0cy5wdXNoKCc8bWVudT4nLCBlZGl0Um93ICsgbWFya1BhdHJvbGxlZCArIG5ld1RvcGljICsgaGlzdCArIGxhc3RlZGl0ICsgdGhhbmspO1xuXHRcdGlmICghc2hvcnRlcikge1xuXHRcdFx0cy5wdXNoKGpzSGlzdG9yeSk7XG5cdFx0fVxuXHRcdHMucHVzaChtb3ZlICsgbGlua3NoZXJlICsgcmVsYXRlZCk7XG5cdFx0aWYgKCFzaG9ydGVyKSB7XG5cdFx0XHRzLnB1c2gobnVsbFB1cmdlICsgc2VhcmNoKTtcblx0XHR9XG5cdFx0aWYgKCFzaG9ydGVyKSB7XG5cdFx0XHRzLnB1c2godmlld09wdGlvbnMpO1xuXHRcdH1cblx0XHRzLnB1c2goXG5cdFx0XHRgPGhyPiR7d2F0Y2h9JHtwcm90ZWN0RGVsZXRlfWAsXG5cdFx0XHQnPGhyPicgK1xuXHRcdFx0XHQnaWYodGFsayl7PDxhcnRpY2xlfHNob3J0Y3V0PWF8dmlldyBhcnRpY2xlPj48PGVkaXRBcnRpY2xlfGVkaXQgYXJ0aWNsZT4+fScgK1xuXHRcdFx0XHQnZWxzZXs8PHRhbGt8c2hvcnRjdXQ9dHx0YWxrIHBhZ2U+Pjw8ZWRpdFRhbGt8ZWRpdCB0YWxrPj4nICtcblx0XHRcdFx0YDw8bmV3VGFsa3xzaG9ydGN1dD0rfG5ldyB0b3BpYz4+fTwvbWVudT4ke2VuZGRpdn1gXG5cdFx0KTtcblx0XHQvLyB1c2VyIG1lbnUgc3RhcnRzIGhlcmVcblx0XHRjb25zdCBlbWFpbCA9ICc8PGVtYWlsfHNob3J0Y3V0PUV8ZW1haWwgdXNlcj4+Jztcblx0XHRjb25zdCBjb250cmlicyA9XG5cdFx0XHQnaWYod2lraW1lZGlhKXs8bWVudXJvdz59PDxjb250cmlic3xzaG9ydGN1dD1jfGNvbnRyaWJ1dGlvbnM+PmlmKHdpa2ltZWRpYSl7PC9tZW51cm93Pn0nICtcblx0XHRcdCdpZihhZG1pbil7PG1lbnVyb3c+PDxkZWxldGVkQ29udHJpYnM+PjwvbWVudXJvdz59Jztcblx0XHRzLnB1c2goXG5cdFx0XHRgaWYodXNlcil7KiR7ZHJvcGRpdn0ke21lbnVUaXRsZSgndXNlcicpfWAsXG5cdFx0XHQnPG1lbnU+Jyxcblx0XHRcdCc8bWVudXJvdz48PHVzZXJQYWdlfHNob3J0Y3V0PXV8dXNlciZuYnNwO3BhZ2U+Pnw8PHVzZXJTcGFjZXxzcGFjZT4+PC9tZW51cm93PicsXG5cdFx0XHQnPDx1c2VyVGFsa3xzaG9ydGN1dD10fHVzZXIgdGFsaz4+PDxlZGl0VXNlclRhbGt8ZWRpdCB1c2VyIHRhbGs+PicgK1xuXHRcdFx0XHQnPDxuZXdVc2VyVGFsa3xzaG9ydGN1dD0rfGxlYXZlIGNvbW1lbnQ+Pidcblx0XHQpO1xuXHRcdGlmIChzaG9ydGVyKSB7XG5cdFx0XHRzLnB1c2goYGlmKGlwdXNlcil7fWVsc2V7JHtlbWFpbH19YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHMucHVzaChgaWYoaXB1c2VyKXs8PGFyaW4+Pn1lbHNleyR7ZW1haWx9fWApO1xuXHRcdH1cblx0XHRzLnB1c2goXG5cdFx0XHRgPGhyPiR7Y29udHJpYnN9PDx1c2VybG9nfHNob3J0Y3V0PUx8dXNlciBsb2c+PmAsXG5cdFx0XHQnaWYod2lraW1lZGlhKXs8PGNvdW50fHNob3J0Y3V0PSN8ZWRpdCBjb3VudGVyPj59Jyxcblx0XHRcdCdpZihhZG1pbil7PG1lbnVyb3c+PDx1bmJsb2NrfHVuYmxvY2tTaG9ydD4+fDw8YmxvY2t8c2hvcnRjdXQ9YnxibG9jayB1c2VyPj48L21lbnVyb3c+fScsXG5cdFx0XHQnPDxibG9ja2xvZ3xzaG9ydGN1dD1CfGJsb2NrIGxvZz4+Jyxcblx0XHRcdGA8L21lbnU+JHtlbmRkaXZ9fWBcblx0XHQpO1xuXHRcdC8vIHBvcHVwcyBtZW51IHN0YXJ0cyBoZXJlXG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwU2V0dXBNZW51JykgJiYgIXgubmF2cG9wLmhhc1BvcHVwTWVudSAvKiBGSVhNRTogaGFjayAqLykge1xuXHRcdFx0eC5uYXZwb3AuaGFzUG9wdXBNZW51ID0gdHJ1ZTtcblx0XHRcdHMucHVzaChcblx0XHRcdFx0YCoke2Ryb3BkaXZ9JHttZW51VGl0bGUoJ3BvcHVwc01lbnUnKX08bWVudT5gLFxuXHRcdFx0XHQnPDx0b2dnbGVQcmV2aWV3c3x0b2dnbGUgcHJldmlld3M+PicsXG5cdFx0XHRcdCc8PHB1cmdlUG9wdXBzfHJlc2V0Pj4nLFxuXHRcdFx0XHQnPDxkaXNhYmxlUG9wdXBzfGRpc2FibGU+PicsXG5cdFx0XHRcdGA8L21lbnU+JHtlbmRkaXZ9YFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwocy5qb2luKCcnKSwgeC5hcnRpY2xlLCB4LnBhcmFtcyk7XG5cdH07XG5cdGNvbnN0IG1lbnVUaXRsZSA9IChzKSA9PiB7XG5cdFx0cmV0dXJuIGA8YSBocmVmPVwiI1wiIG5vUG9wdXA9MT4ke3BvcHVwU3RyaW5nKHMpfTwvYT5gO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLm1lbnVzLnBvcHVwUmVkaXJUaXRsZSA9IHBnLnN0cnVjdHVyZXMubWVudXMucG9wdXBUaXRsZTtcblx0cGcuc3RydWN0dXJlcy5tZW51cy5wb3B1cFJlZGlyVG9wTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLm1lbnVzLnBvcHVwVG9wTGlua3M7XG5cdGNvcHlTdHJ1Y3R1cmUoJ21lbnVzJywgJ3Nob3J0bWVudXMnKTtcblx0cGcuc3RydWN0dXJlcy5zaG9ydG1lbnVzLnBvcHVwVG9wTGlua3MgPSAoeCkgPT4ge1xuXHRcdHJldHVybiBwZy5zdHJ1Y3R1cmVzLm1lbnVzLnBvcHVwVG9wTGlua3MoeCwgdHJ1ZSk7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMuc2hvcnRtZW51cy5wb3B1cFJlZGlyVG9wTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLnNob3J0bWVudXMucG9wdXBUb3BMaW5rcztcblx0cGcuc3RydWN0dXJlcy5saXRlID0ge307XG5cdHBnLnN0cnVjdHVyZXMubGl0ZS5wb3B1cExheW91dCA9ICgpID0+IHtcblx0XHRyZXR1cm4gWydwb3B1cFRpdGxlJywgJ3BvcHVwUHJldmlldyddO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLmxpdGUucG9wdXBUaXRsZSA9ICh4KSA9PiB7XG5cdFx0bG9nKGAke3guYXJ0aWNsZX06IHN0cnVjdHVyZXMubGl0ZS5wb3B1cFRpdGxlYCk7XG5cdFx0Ly8gcmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwoJzxiPjw8bWFpbmxpbms+PjwvYj4nLHguYXJ0aWNsZSx4LnBhcmFtcyk7XG5cdFx0cmV0dXJuIGA8ZGl2PjxzcGFuIGNsYXNzPVwicG9wdXBfbWFpbmxpbmtcIj48Yj4ke3guYXJ0aWNsZS50b1N0cmluZygpfTwvYj48L3NwYW4+PC9kaXY+YDtcblx0fTtcblx0Ly8gRU5ERklMRTogc3RydWN0dXJlcy5qc1xuXHQvLyBTVEFSVEZJTEU6IGF1dG9lZGl0LmpzXG5cdGNvbnN0IHN1YnN0aXR1dGUgPSAoZGF0YSwgY21kQm9keSkgPT4ge1xuXHRcdC8vIG13Lm5vdGlmeShgc3ViXFxuZnJvbTogJHtjbWRCb2R5LmZyb219XFxudG86ICR7Y21kQm9keS50b31cXG5mbGFnczogJHtjbWRCb2R5LmZsYWdzfWAsIHt0YWc6ICdwb3B1cHMnLCB0eXBlOiAnd2Fybid9KTtcblx0XHRjb25zdCBmcm9tUmUgPSBuZXcgUmVnRXhwKGNtZEJvZHkuZnJvbSwgY21kQm9keS5mbGFncyk7XG5cdFx0cmV0dXJuIGRhdGEucmVwbGFjZShmcm9tUmUsIGNtZEJvZHkudG8pO1xuXHR9O1xuXHRjb25zdCBleGVjQ21kcyA9IChkYXRhLCBjbWRMaXN0KSA9PiB7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGNtZExpc3QpIHtcblx0XHRcdGRhdGEgPSBlbGVtZW50LmFjdGlvbihkYXRhLCBlbGVtZW50KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH07XG5cdGNvbnN0IHBhcnNlQ21kID0gZnVuY3Rpb24gcGFyc2VDbWQoc3RyKSB7XG5cdFx0Ly8gcmV0dXJucyBhIGxpc3Qgb2YgY29tbWFuZHNcblx0XHRpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRsZXQgcCA9IGZhbHNlO1xuXHRcdHN3aXRjaCAoc3RyLmNoYXJBdCgwKSkge1xuXHRcdFx0Y2FzZSAncyc6XG5cdFx0XHRcdHAgPSBwYXJzZVN1YnN0aXR1dGUoc3RyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChwKSB7XG5cdFx0XHRyZXR1cm4gW3AsIHBhcnNlQ21kKHAucmVtYWluZGVyKV07XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblx0Ly8gRklYTUU6IE9ubHkgdXNlZCBvbmNlIGhlcmUsIGNvbmZ1c2luZyB3aXRoIG5hdGl2ZSAoYW5kIG1vcmUgd2lkZWx5LXVzZWQpIHVuZXNjYXBlLCBzaG91bGQgcHJvYmFibHkgYmUgcmVwbGFjZWRcblx0Ly8gVGhlbiBhZ2FpbiwgdW5lc2NhcGUgaXMgc2VtaS1zb2Z0LWRlcHJlY2F0ZWQsIHNvIHdlIHNob3VsZCBsb29rIGludG8gcmVwbGFjaW5nIHRoYXQgdG9vXG5cdGNvbnN0IHVuRXNjYXBlID0gKHN0ciwgc2VwKSA9PiB7XG5cdFx0cmV0dXJuIHN0clxuXHRcdFx0LnNwbGl0KCdcXFxcXFxcXCcpXG5cdFx0XHQuam9pbignXFxcXCcpXG5cdFx0XHQuc3BsaXQoYFxcXFwke3NlcH1gKVxuXHRcdFx0LmpvaW4oc2VwKVxuXHRcdFx0LnNwbGl0KFN0cmluZy5yYXdgXFxuYClcblx0XHRcdC5qb2luKCdcXG4nKTtcblx0fTtcblx0Y29uc3QgcGFyc2VTdWJzdGl0dXRlID0gKHN0cikgPT4ge1xuXHRcdC8vIHRha2VzIGEgc3RyaW5nIGxpa2Ugcy9hL2IvZmxhZ3M7b3RoZXJjbWRzIGFuZCBwYXJzZXMgaXRcblx0XHRsZXQgZnJvbTtcblx0XHRsZXQgdG87XG5cdFx0bGV0IGZsYWdzO1xuXHRcdGxldCB0bXA7XG5cdFx0aWYgKHN0ci5sZW5ndGggPCA0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHNlcCA9IHN0ci5jaGFyQXQoMSk7XG5cdFx0c3RyID0gc3RyLnNsaWNlKDIpO1xuXHRcdHRtcCA9IHNraXBPdmVyKHN0ciwgc2VwKTtcblx0XHRpZiAodG1wKSB7XG5cdFx0XHRmcm9tID0gdG1wLnNlZ21lbnQ7XG5cdFx0XHRzdHIgPSB0bXAucmVtYWluZGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHRtcCA9IHNraXBPdmVyKHN0ciwgc2VwKTtcblx0XHRpZiAodG1wKSB7XG5cdFx0XHR0byA9IHRtcC5zZWdtZW50O1xuXHRcdFx0c3RyID0gdG1wLnJlbWFpbmRlcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRmbGFncyA9ICcnO1xuXHRcdGlmIChzdHIubGVuZ3RoID4gMCkge1xuXHRcdFx0dG1wID0gc2tpcE92ZXIoc3RyLCAnOycpIHx8IHNraXBUb0VuZChzdHIsICc7Jyk7XG5cdFx0XHRpZiAodG1wKSB7XG5cdFx0XHRcdGZsYWdzID0gdG1wLnNlZ21lbnQ7XG5cdFx0XHRcdHN0ciA9IHRtcC5yZW1haW5kZXI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhY3Rpb246IHN1YnN0aXR1dGUsXG5cdFx0XHRmcm9tLFxuXHRcdFx0dG8sXG5cdFx0XHRmbGFncyxcblx0XHRcdHJlbWFpbmRlcjogc3RyLFxuXHRcdH07XG5cdH07XG5cdGNvbnN0IHNraXBPdmVyID0gKHN0ciwgc2VwKSA9PiB7XG5cdFx0Y29uc3QgZW5kU2VnbWVudCA9IGZpbmROZXh0KHN0ciwgc2VwKTtcblx0XHRpZiAoZW5kU2VnbWVudCA8IDApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc2VnbWVudCA9IHVuRXNjYXBlKHN0ci5zbGljZSgwLCBNYXRoLm1heCgwLCBlbmRTZWdtZW50KSksIHNlcCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlZ21lbnQsXG5cdFx0XHRyZW1haW5kZXI6IHN0ci5zbGljZShNYXRoLm1heCgwLCBlbmRTZWdtZW50ICsgMSkpLFxuXHRcdH07XG5cdH07XG5cdGNvbnN0IHNraXBUb0VuZCA9IChzdHIsIF9zZXApID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VnbWVudDogc3RyLFxuXHRcdFx0cmVtYWluZGVyOiAnJyxcblx0XHR9O1xuXHR9O1xuXHRjb25zdCBmaW5kTmV4dCA9IChzdHIsIGNoKSA9PiB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChzdHIuY2hhckF0KGkpID09PSAnXFxcXCcpIHtcblx0XHRcdFx0aSArPSAyO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0ci5jaGFyQXQoaSkgPT09IGNoKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH07XG5cdGNvbnN0IHNldENoZWNrYm94ID0gKHBhcmFtLCBib3gpID0+IHtcblx0XHRjb25zdCB2YWwgPSBtdy51dGlsLmdldFBhcmFtVmFsdWUocGFyYW0pO1xuXHRcdGlmICh2YWwpIHtcblx0XHRcdHN3aXRjaCAodmFsKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRjYXNlICd5ZXMnOlxuXHRcdFx0XHRjYXNlICd0cnVlJzpcblx0XHRcdFx0XHRib3guY2hlY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRjYXNlICdubyc6XG5cdFx0XHRcdGNhc2UgJ2ZhbHNlJzpcblx0XHRcdFx0XHRib3guY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3QgYXV0b0VkaXQgPSBmdW5jdGlvbiBhdXRvRWRpdCgpIHtcblx0XHRzZXR1cFBvcHVwcygoKSA9PiB7XG5cdFx0XHRpZiAobXcudXRpbC5nZXRQYXJhbVZhbHVlKCdhdXRvaW1wbCcpICE9PSBwb3B1cFN0cmluZygnYXV0b2VkaXRfdmVyc2lvbicpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2F1dG93YXRjaGxpc3QnKSAmJiBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2FjdG9rZW4nKSA9PT0gYXV0b0NsaWNrVG9rZW4oKSkge1xuXHRcdFx0XHRwZy5mbi5tb2RpZnlXYXRjaGxpc3QobXcudXRpbC5nZXRQYXJhbVZhbHVlKCd0aXRsZScpLCBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2FjdGlvbicpKTtcblx0XHRcdH1cblx0XHRcdGlmICghZG9jdW1lbnQuZWRpdGZvcm0pIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGF1dG9FZGl0LmFscmVhZHlSYW4pIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0YXV0b0VkaXQuYWxyZWFkeVJhbiA9IHRydWU7XG5cdFx0XHRjb25zdCBjbWRTdHJpbmcgPSBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2F1dG9lZGl0Jyk7XG5cdFx0XHRpZiAoY21kU3RyaW5nKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgZWRpdGJveCA9IGRvY3VtZW50LmVkaXRmb3JtLndwVGV4dGJveDE7XG5cdFx0XHRcdFx0Y29uc3QgY21kTGlzdCA9IHBhcnNlQ21kKGNtZFN0cmluZyk7XG5cdFx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlZGl0Ym94LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IG91dHB1dCA9IGV4ZWNDbWRzKGlucHV0LCBjbWRMaXN0KTtcblx0XHRcdFx0XHRlZGl0Ym94LnZhbHVlID0gb3V0cHV0O1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHNldENoZWNrYm94KCdhdXRvbWlub3InLCBkb2N1bWVudC5lZGl0Zm9ybS53cE1pbm9yZWRpdCk7XG5cdFx0XHRzZXRDaGVja2JveCgnYXV0b3dhdGNoJywgZG9jdW1lbnQuZWRpdGZvcm0ud3BXYXRjaHRoaXMpO1xuXHRcdFx0Y29uc3QgcnZpZCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnYXV0b3J2Jyk7XG5cdFx0XHRpZiAocnZpZCkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBgJHtwZy53aWtpLmFwaXdpa2liYXNlfT9hY3Rpb249cXVlcnkmZm9ybWF0PWpzb24mZm9ybWF0dmVyc2lvbj0yJnByb3A9cmV2aXNpb25zJnJldmlkcz0ke3J2aWR9YDtcblx0XHRcdFx0c3RhcnREb3dubG9hZCh1cmwsIG51bGwsIGF1dG9FZGl0Mik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhdXRvRWRpdDIoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblx0Y29uc3QgYXV0b0VkaXQyID0gKGQpID0+IHtcblx0XHRsZXQgc3VtbWFyeSA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnYXV0b3N1bW1hcnknKTtcblx0XHRsZXQgc3VtbWFyeXByb21wdCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnYXV0b3N1bW1hcnlwcm9tcHQnKTtcblx0XHRsZXQgc3VtbWFyeW5vdGljZSA9ICcnO1xuXHRcdGlmIChkICYmIGQuZGF0YSAmJiBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2F1dG9ydicpKSB7XG5cdFx0XHRjb25zdCBzID0gZ2V0UnZTdW1tYXJ5KHN1bW1hcnksIGQuZGF0YSk7XG5cdFx0XHRpZiAocyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0c3VtbWFyeXByb21wdCA9IHRydWU7XG5cdFx0XHRcdHN1bW1hcnlub3RpY2UgPSBwb3B1cFN0cmluZygnRmFpbGVkIHRvIGdldCByZXZpc2lvbiBpbmZvcm1hdGlvbiwgcGxlYXNlIGVkaXQgbWFudWFsbHkuXFxuXFxuJyk7XG5cdFx0XHRcdHN1bW1hcnkgPSBzaW1wbGVQcmludGYoc3VtbWFyeSwgW213LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnYXV0b3J2JyksICcodW5rbm93biknLCAnKHVua25vd24pJ10pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3VtbWFyeSA9IHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChzdW1tYXJ5cHJvbXB0KSB7XG5cdFx0XHRjb25zdCB0eHQgPSBzdW1tYXJ5bm90aWNlICsgcG9wdXBTdHJpbmcoJ0VudGVyIGEgbm9uLWVtcHR5IGVkaXQgc3VtbWFyeSBvciBwcmVzcyBjYW5jZWwgdG8gYWJvcnQnKTtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gcHJvbXB0KHR4dCwgc3VtbWFyeSk7XG5cdFx0XHRpZiAocmVzcG9uc2UpIHtcblx0XHRcdFx0c3VtbWFyeSA9IHJlc3BvbnNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoc3VtbWFyeSkge1xuXHRcdFx0ZG9jdW1lbnQuZWRpdGZvcm0ud3BTdW1tYXJ5LnZhbHVlID0gc3VtbWFyeTtcblx0XHR9XG5cdFx0Ly8gQXR0ZW1wdCB0byBhdm9pZCBwb3NzaWJsZSBwcmVtYXR1cmUgY2xpY2tpbmcgb2YgdGhlIHNhdmUgYnV0dG9uXG5cdFx0Ly8gKG1heWJlIGRlbGF5cyBpbiB1cGRhdGVzIHRvIHRoZSBET00gYXJlIHRvIGJsYW1lPz8gb3IgYSByZWQgaGVycmluZylcblx0XHRzZXRUaW1lb3V0KGF1dG9FZGl0MywgMTAwKTtcblx0fTtcblx0Y29uc3QgYXV0b0NsaWNrVG9rZW4gPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG13LnVzZXIuc2Vzc2lvbklkKCk7XG5cdH07XG5cdGNvbnN0IGF1dG9FZGl0MyA9ICgpID0+IHtcblx0XHRpZiAobXcudXRpbC5nZXRQYXJhbVZhbHVlKCdhY3Rva2VuJykgIT09IGF1dG9DbGlja1Rva2VuKCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYnRuID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdhdXRvY2xpY2snKTtcblx0XHRpZiAoYnRuKSB7XG5cdFx0XHRpZiAoZG9jdW1lbnQuZWRpdGZvcm0gJiYgZG9jdW1lbnQuZWRpdGZvcm1bYnRuXSkge1xuXHRcdFx0XHRjb25zdCBidXR0b24gPSBkb2N1bWVudC5lZGl0Zm9ybVtidG5dO1xuXHRcdFx0XHRjb25zdCBtc2cgPSB0cHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgJXMgYnV0dG9uIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgY2xpY2tlZC4gUGxlYXNlIHdhaXQgZm9yIHRoZSBuZXh0IHBhZ2UgdG8gbG9hZC4nLFxuXHRcdFx0XHRcdFtidXR0b24udmFsdWVdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJhbm5lck1lc3NhZ2UobXNnKTtcblx0XHRcdFx0ZG9jdW1lbnQudGl0bGUgPSBgKCR7ZG9jdW1lbnQudGl0bGV9KWA7XG5cdFx0XHRcdGJ1dHRvbi5jbGljaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0dHByaW50ZignQ291bGQgbm90IGZpbmQgYnV0dG9uICVzLiBQbGVhc2UgY2hlY2sgdGhlIHNldHRpbmdzIGluIHlvdXIgamF2YXNjcmlwdCBmaWxlLicsIFtidG5dKSxcblx0XHRcdFx0XHR7dGFnOiAncG9wdXBzJywgdHlwZTogJ2Vycm9yJ31cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IGJhbm5lck1lc3NhZ2UgPSAocykgPT4ge1xuXHRcdGNvbnN0IGhlYWRpbmdzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaDEnKTtcblx0XHRpZiAoaGVhZGluZ3MpIHtcblx0XHRcdGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0ZGl2LmlubmVySFRNTCA9IGA8Zm9udCBzaXplPSsxPjxiPiR7cGcuZXNjYXBlUXVvdGVzSFRNTChzKX08L2I+PC9mb250PmA7XG5cdFx0XHRoZWFkaW5nc1swXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkaXYsIGhlYWRpbmdzWzBdKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGdldFJ2U3VtbWFyeSA9ICh0ZW1wbGF0ZSwganNvbikgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvID0gZ2V0SnNPYmooanNvbik7XG5cdFx0XHRjb25zdCBbZWRpdF0gPSBhbnlDaGlsZChvLnF1ZXJ5LnBhZ2VzKS5yZXZpc2lvbnM7XG5cdFx0XHRjb25zdCB0aW1lc3RhbXAgPSBlZGl0LnRpbWVzdGFtcFxuXHRcdFx0XHQuc3BsaXQoL1tBLVpdL2cpXG5cdFx0XHRcdC5qb2luKCcgJylcblx0XHRcdFx0LnJlcGxhY2UoL14gKnwgKiQvZywgJycpO1xuXHRcdFx0cmV0dXJuIHNpbXBsZVByaW50Zih0ZW1wbGF0ZSwgW2VkaXQucmV2aWQsIHRpbWVzdGFtcCwgZWRpdC51c2VyaGlkZGVuID8gJyhoaWRkZW4pJyA6IGVkaXQudXNlcl0pO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblx0Ly8gRU5ERklMRTogYXV0b2VkaXQuanNcblx0Ly8gU1RBUlRGSUxFOiBkb3dubG9hZGVyLmpzXG5cdC8qKlxuXHQgKiBAZmlsZW92ZXJ2aWV3XG5cdCAqIHtAc291cmNlIERvd25sb2FkZXJ9LCBhIHhtbGh0dHByZXF1ZXN0IHdyYXBwZXIsIGFuZCBoZWxwZXIgZnVuY3Rpb25zLlxuXHQgKi9cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgRG93bmxvYWRlclxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQGNsYXNzIFRoZSBEb3dubG9hZGVyIGNsYXNzLiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyB0byBkb3dubG9hZCBzdHVmZi5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIHRvIGRvd25sb2FkLiBUaGlzIGNhbiBiZSBvbWl0dGVkIGFuZCBzdXBwbGllZCBsYXRlci5cblx0ICovXG5cdGNsYXNzIERvd25sb2FkZXIge1xuXHRcdGNvbnN0cnVjdG9yKHVybCkge1xuXHRcdFx0aWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0dGhpcy5odHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0XHR9XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSB1cmwgdG8gZG93bmxvYWRcblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy51cmwgPSB1cmw7XG5cdFx0XHQvKipcblx0XHRcdCAqIEEgdW5pdmVyc2FsbHkgdW5pcXVlIElEIG51bWJlclxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIGludGVnZXJcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5pZCA9IG51bGw7XG5cdFx0XHQvKipcblx0XHRcdCAqIE1vZGlmaWNhdGlvbiBkYXRlLCB0byBiZSBjdWxsZWQgZnJvbSB0aGUgaW5jb21pbmcgaGVhZGVyc1xuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIERhdGVcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMubGFzdE1vZGlmaWVkID0gbnVsbDtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2hhdCB0byBkbyB3aGVuIHRoZSBkb3dubG9hZCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5XG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgRnVuY3Rpb25cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY2FsbGJhY2tGdW5jdGlvbiA9IG51bGw7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdoYXQgdG8gZG8gb24gZmFpbHVyZVxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIEZ1bmN0aW9uXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLm9uRmFpbHVyZSA9IG51bGw7XG5cdFx0XHQvKipcblx0XHRcdCAqIEZsYWcgc2V0IG9uIDxjb2RlPmFib3J0PC9jb2RlPlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIGJvb2xlYW5cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5hYm9ydGVkID0gZmFsc2U7XG5cdFx0XHQvKipcblx0XHRcdCAqIEhUVFAgbWV0aG9kLiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjOS5odG1sIGZvclxuXHRcdFx0ICogcG9zc2liaWxpdGllcy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5tZXRob2QgPSAnR0VUJztcblx0XHRcdC8qKlxuXHRcdFx0ICogQXN5bmMgZmxhZy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBib29sZWFuXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuYXN5bmMgPSB0cnVlO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBTdWJtaXRzIHRoZSBodHRwIHJlcXVlc3QuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyp9IHhcblx0XHQgKi9cblx0XHRzZW5kKHgpIHtcblx0XHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuaHR0cC5zZW5kKHgpO1xuXHRcdH1cblx0XHQvKiBBYm9ydHMgdGhlIGRvd25sb2FkLCBzZXR0aW5nIHRoZSA8Y29kZT5hYm9ydGVkPC9jb2RlPiBmaWVsZCB0byB0cnVlLiAqL1xuXHRcdGFib3J0KCkge1xuXHRcdFx0aWYgKCF0aGlzLmh0dHApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFib3J0ZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHRoaXMuaHR0cC5hYm9ydCgpO1xuXHRcdH1cblx0XHQvKiogUmV0dXJucyB0aGUgZG93bmxvYWRlZCBkYXRhLiAqL1xuXHRcdGdldERhdGEoKSB7XG5cdFx0XHRpZiAoIXRoaXMuaHR0cCkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmh0dHAucmVzcG9uc2VUZXh0O1xuXHRcdH1cblx0XHQvKiogUHJlcGFyZXMgdGhlIGRvd25sb2FkLiAqL1xuXHRcdHNldFRhcmdldCgpIHtcblx0XHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5odHRwLm9wZW4odGhpcy5tZXRob2QsIHRoaXMudXJsLCB0aGlzLmFzeW5jKTtcblx0XHRcdHRoaXMuaHR0cC5zZXRSZXF1ZXN0SGVhZGVyKCdBcGktVXNlci1BZ2VudCcsIHBnLmFwaS51c2VyQWdlbnQpO1xuXHRcdH1cblx0XHQvKiogR2V0cyB0aGUgc3RhdGUgb2YgdGhlIGRvd25sb2FkLiAqL1xuXHRcdGdldFJlYWR5U3RhdGUoKSB7XG5cdFx0XHRpZiAoIXRoaXMuaHR0cCkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmh0dHAucmVhZHlTdGF0ZTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogU3RhcnRzIHRoZSBkb3dubG9hZC5cblx0XHQgKiBOb3RlIHRoYXQgc2V0VGFyZ2V0IHtAc291cmNlIERvd25sb2FkZXIjc2V0VGFyZ2V0fSBtdXN0IGJlIHJ1biBmaXJzdFxuXHRcdCAqL1xuXHRcdHN0YXJ0KCkge1xuXHRcdFx0aWYgKCF0aGlzLmh0dHApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHRwZy5taXNjLmRvd25sb2Fkc0luUHJvZ3Jlc3NbdGhpcy5pZF0gPSBzZWxmO1xuXHRcdFx0dGhpcy5odHRwLnNlbmQobnVsbCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEdldHMgdGhlICdMYXN0LU1vZGlmaWVkJyBkYXRlIGZyb20gdGhlIGRvd25sb2FkIGhlYWRlcnMuXG5cdFx0ICogU2hvdWxkIGJlIHJ1biBhZnRlciB0aGUgZG93bmxvYWQgY29tcGxldGVzLlxuXHRcdCAqIFJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4gb24gZmFpbHVyZS5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge0RhdGV9XG5cdFx0ICovXG5cdFx0Z2V0TGFzdE1vZGlmaWVkRGF0ZSgpIHtcblx0XHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGxhc3Rtb2Q7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsYXN0bW9kID0gdGhpcy5odHRwLmdldFJlc3BvbnNlSGVhZGVyKCdMYXN0LU1vZGlmaWVkJyk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0LyogZW1wdHkgKi9cblx0XHRcdH1cblx0XHRcdGlmIChsYXN0bW9kKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgRGF0ZShsYXN0bW9kKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IGYgY2FsbGJhY2sgZnVuY3Rpb24sIGNhbGxlZCBhcyA8Y29kZT5mKHRoaXMpPC9jb2RlPiBvbiBzdWNjZXNzXG5cdFx0ICovXG5cdFx0c2V0Q2FsbGJhY2soZikge1xuXHRcdFx0aWYgKCF0aGlzLmh0dHApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5odHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGY7XG5cdFx0fVxuXHRcdGdldFN0YXR1cygpIHtcblx0XHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuaHR0cC5zdGF0dXM7XG5cdFx0fVxuXHR9XG5cdG5ldyBEb3dubG9hZGVyKCk7XG5cdHBnLm1pc2MuZG93bmxvYWRzSW5Qcm9ncmVzcyA9IHt9O1xuXHQvLyBoZWxwZXIgZnVuY3Rpb25zXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHtAc291cmNlIERvd25sb2FkZXJ9IGFuZCBwcmVwYXJlcyBpdCBmb3IgYWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgdG8gZG93bmxvYWRcblx0ICogQHBhcmFtIHtpbnRlZ2VyfSBpZCBUaGUgSUQgb2YgdGhlIHtAc291cmNlIERvd25sb2FkZXJ9IG9iamVjdFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBvbiBzdWNjZXNzXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBvbmZhaWx1cmVcblx0ICogQHJldHVybiB7U3RyaW5nL0Rvd25sb2FkZXJ9IHRoZSB7QHNvdXJjZSBEb3dubG9hZGVyfSBvYmplY3QgY3JlYXRlZCwgb3IgJ29oZGVhcicgaWYgYW4gdW5zdXBwb3J0ZWQgYnJvd3NlclxuXHQgKi9cblx0Y29uc3QgbmV3RG93bmxvYWQgPSBmdW5jdGlvbiBuZXdEb3dubG9hZCh1cmwsIGlkLCBjYWxsYmFjaywgb25mYWlsdXJlKSB7XG5cdFx0Y29uc3QgZCA9IG5ldyBEb3dubG9hZGVyKHVybCk7XG5cdFx0aWYgKCFkLmh0dHApIHtcblx0XHRcdHJldHVybiAnb2hkZWFyJztcblx0XHR9XG5cdFx0ZC5pZCA9IGlkO1xuXHRcdGQuc2V0VGFyZ2V0KCk7XG5cdFx0b25mYWlsdXJlIHx8PSAyO1xuXHRcdGNvbnN0IGYgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoZC5nZXRSZWFkeVN0YXRlKCkgPT09IDQpIHtcblx0XHRcdFx0ZGVsZXRlIHBnLm1pc2MuZG93bmxvYWRzSW5Qcm9ncmVzc1t0aGlzLmlkXTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAoZC5nZXRTdGF0dXMoKSA9PT0gMjAwKSB7XG5cdFx0XHRcdFx0XHRkLmRhdGEgPSBkLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdGQubGFzdE1vZGlmaWVkID0gZC5nZXRMYXN0TW9kaWZpZWREYXRlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayhkKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBvbmZhaWx1cmUgPT09IHR5cGVvZiAxKSB7XG5cdFx0XHRcdFx0XHRpZiAob25mYWlsdXJlID4gMCkge1xuXHRcdFx0XHRcdFx0XHQvLyByZXRyeVxuXHRcdFx0XHRcdFx0XHRuZXdEb3dubG9hZCh1cmwsIGlkLCBjYWxsYmFjaywgb25mYWlsdXJlIC0gMSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygb25mYWlsdXJlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRvbmZhaWx1cmUoZCwgdXJsLCBpZCwgY2FsbGJhY2spO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0LyogaWdub3JlIGl0ICovXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGQuc2V0Q2FsbGJhY2soZik7XG5cdFx0cmV0dXJuIGQ7XG5cdH07XG5cdC8qKlxuXHQgKiBTaW11bGF0ZXMgYSBkb3dubG9hZCBmcm9tIGNhY2hlZCBkYXRhLlxuXHQgKiBUaGUgc3VwcGxpZWQgZGF0YSBpcyBwdXQgaW50byBhIHtAc291cmNlIERvd25sb2FkZXJ9IGFzIGlmIGl0IGhhZCBkb3dubG9hZGVkIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwuXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gaWQgVGhlIElELlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2ssIHdoaWNoIGlzIGludm9rZWQgaW1tZWRpYXRlbHkgYXMgPGNvZGU+Y2FsbGJhY2soZCk8L2NvZGU+LFxuXHQgKiB3aGVyZSA8Y29kZT5kPC9jb2RlPiBpcyB0aGUgbmV3IHtAc291cmNlIERvd25sb2FkZXJ9LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBUaGUgKGNhY2hlZCkgZGF0YS5cblx0ICogQHBhcmFtIHtEYXRlfSBsYXN0TW9kaWZpZWQgVGhlIChjYWNoZWQpIGxhc3QgbW9kaWZpZWQgZGF0ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG93bmVyXG5cdCAqL1xuXHRjb25zdCBmYWtlRG93bmxvYWQgPSAodXJsLCBpZCwgY2FsbGJhY2ssIGRhdGEsIGxhc3RNb2RpZmllZCwgb3duZXIpID0+IHtcblx0XHRjb25zdCBkID0gbmV3RG93bmxvYWQodXJsLCBjYWxsYmFjayk7XG5cdFx0ZC5vd25lciA9IG93bmVyO1xuXHRcdGQuaWQgPSBpZDtcblx0XHRkLmRhdGEgPSBkYXRhO1xuXHRcdGQubGFzdE1vZGlmaWVkID0gbGFzdE1vZGlmaWVkO1xuXHRcdHJldHVybiBjYWxsYmFjayhkKTtcblx0fTtcblx0LyoqXG5cdCAqIFN0YXJ0cyBhIGRvd25sb2FkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgdG8gZG93bmxvYWRcblx0ICogQHBhcmFtIHtpbnRlZ2VyfSBpZCBUaGUgSUQgb2YgdGhlIHtAc291cmNlIERvd25sb2FkZXJ9IG9iamVjdFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBvbiBzdWNjZXNzXG5cdCAqIEByZXR1cm4ge1N0cmluZy9Eb3dubG9hZGVyfSB0aGUge0Bzb3VyY2UgRG93bmxvYWRlcn0gb2JqZWN0IGNyZWF0ZWQsIG9yICdvaGRlYXInIGlmIGFuIHVuc3VwcG9ydGVkIGJyb3dzZXJcblx0ICovXG5cdGNvbnN0IHN0YXJ0RG93bmxvYWQgPSAodXJsLCBpZCwgY2FsbGJhY2spID0+IHtcblx0XHRjb25zdCBkID0gbmV3RG93bmxvYWQodXJsLCBpZCwgY2FsbGJhY2spO1xuXHRcdGlmICh0eXBlb2YgZCA9PT0gdHlwZW9mICcnKSB7XG5cdFx0XHRyZXR1cm4gZDtcblx0XHR9XG5cdFx0ZC5zdGFydCgpO1xuXHRcdHJldHVybiBkO1xuXHR9O1xuXHQvKipcblx0ICogQWJvcnRzIGFsbCBkb3dubG9hZHMgd2hpY2ggaGF2ZSBiZWVuIHN0YXJ0ZWQuXG5cdCAqL1xuXHRjb25zdCBhYm9ydEFsbERvd25sb2FkcyA9ICgpID0+IHtcblx0XHRmb3IgKGNvbnN0IHggaW4gcGcubWlzYy5kb3dubG9hZHNJblByb2dyZXNzKSB7XG5cdFx0XHRpZiAoIU9iamVjdC5oYXNPd24ocGcubWlzYy5kb3dubG9hZHNJblByb2dyZXNzLCB4KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHBnLm1pc2MuZG93bmxvYWRzSW5Qcm9ncmVzc1t4XS5hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0cGcubWlzYy5kb3dubG9hZHNJblByb2dyZXNzW3hdLmFib3J0KCk7XG5cdFx0XHRcdGRlbGV0ZSBwZy5taXNjLmRvd25sb2Fkc0luUHJvZ3Jlc3NbeF07XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0LyogZW1wdHkgKi9cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdC8vIEVOREZJTEU6IGRvd25sb2FkZXIuanNcblx0Ly8gU1RBUlRGSUxFOiBsaXZlcHJldmlldy5qc1xuXHQvLyBUT0RPOiBsb2NhdGlvbiBpcyBvZnRlbiBub3QgY29ycmVjdCAoZWcgcmVsYXRpdmUgbGlua3MgaW4gcHJldmlld3MpXG5cdC8vIE5PVEU6IHJlbW92ZWQgbWQ1IGFuZCBpbWFnZSBhbmQgbWF0aCBwYXJzaW5nLiB3YXMgYnJva2VuLCBsb3RzIG9mIGJ5dGVzLlxuXHQvKipcblx0ICogSW5zdGFWaWV3IC0gYSBNZWRpYXdpa2kgdG8gSFRNTCBjb252ZXJ0ZXIgaW4gSmF2YVNjcmlwdFxuXHQgKiBWZXJzaW9uIDAuNi4xXG5cdCAqIENvcHlyaWdodCAoQykgUGVkcm8gRmF5b2xsZSAyMDA1LTIwMDZcblx0ICoge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VzZXI6UGlsYWZ9XG5cdCAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGljZW5zZVxuXHQgKlxuXHQgKiBDaGFuZ2Vsb2c6XG5cdCAqXG5cdCAqIDAuNi4xXG5cdCAqIC0gRml4ZWQgcHJvYmxlbSBjYXVzZWQgYnkgXFxyIGNoYXJhY3RlcnNcblx0ICogLSBJbXByb3ZlZCBpbmxpbmUgZm9ybWF0dGluZyBwYXJzZXJcblx0ICpcblx0ICogMC42XG5cdCAqIC0gQ2hhbmdlZCBuYW1lIHRvIEluc3RhVmlld1xuXHQgKiAtIFNvbWUgbWFqb3IgY29kZSByZW9yZ2FuaXphdGlvbnMgYW5kIGZhY3RvcmVkIG91dCBzb21lIGNvbW1vbiBmdW5jdGlvbnNcblx0ICogLSBIYW5kbGVkIGNvbnZlcnNpb24gb2YgcmVsYXRpdmUgbGlua3MgKGkuZS4gW1svZm9vXV0pXG5cdCAqIC0gRml4ZWQgbWlzcmVuZGVyaW5nIG9mIGFkamFjZW50IGRlZmluaXRpb24gbGlzdCBpdGVtc1xuXHQgKiAtIEZpeGVkIGJ1ZyBpbiB0YWJsZSBoZWFkaW5ncyBoYW5kbGluZ1xuXHQgKiAtIENoYW5nZWQgZGF0ZSBmb3JtYXQgaW4gc2lnbmF0dXJlcyB0byByZWZsZWN0IE1lZGlhd2lraSdzXG5cdCAqIC0gRml4ZWQgaGFuZGxpbmcgb2YgW1s6SW1hZ2U6Li4uXV1cblx0ICogLSBVcGRhdGVkIE1ENSBmdW5jdGlvbiAoaG9wZWZ1bGx5IGl0IHdpbGwgd29yayB3aXRoIFVURi04KVxuXHQgKiAtIEZpeGVkIGJ1ZyBpbiBoYW5kbGluZyBvZiBsaW5rcyBpbnNpZGUgaW1hZ2VzXG5cdCAqXG5cdCAqIFRvIGRvOlxuXHQgKiAtIEJldHRlciBzdXBwb3J0IGZvciBtYXRoIHRhZ3Ncblx0ICogLSBGdWxsIHN1cHBvcnQgZm9yIG5vd2lraSB0YWdcblx0ICogLSBQYXJzZXItYmFzZWQgKGFzIG9wcG9zZWQgdG8gUmVnRXhwLWJhc2VkKSBpbmxpbmUgd2lraWNvZGUgaGFuZGxpbmcgKG1ha2UgaXQgb25lLXBhc3MgYW5kXG5cdCAqICAgYnVsbGV0LXByb29mKVxuXHQgKiAtIFN1cHBvcnQgZm9yIHRlbXBsYXRlcyAodGhyb3VnaCBBSkFYKVxuXHQgKiAtIFN1cHBvcnQgZm9yIGNvbG91cmVkIGxpbmtzIChBSkFYKVxuXHQgKi9cblx0Y29uc3QgSW5zdGEgPSB7fTtcblx0Y29uc3Qgc2V0dXBMaXZlUHJldmlldyA9ICgpID0+IHtcblx0XHRsZXQgX2I7XG5cdFx0Ly8gb3B0aW9uc1xuXHRcdEluc3RhLmNvbmYgPSB7XG5cdFx0XHRiYXNlVXJsOiAnJyxcblx0XHRcdHVzZXI6IHt9LFxuXHRcdFx0d2lraToge1xuXHRcdFx0XHRsYW5nOiBwZy53aWtpLmxhbmcsXG5cdFx0XHRcdGludGVyd2lraTogcGcud2lraS5pbnRlcndpa2ksXG5cdFx0XHRcdGRlZmF1bHRfdGh1bWJfd2lkdGg6IDE4MCxcblx0XHRcdH0sXG5cdFx0XHRwYXRoczoge1xuXHRcdFx0XHRhcnRpY2xlczogYCR7cGcud2lraS5hcnRpY2xlUGF0aH0vYCxcblx0XHRcdFx0Ly8gT25seSB1c2VkIGZvciBJbnN0YSBwcmV2aWV3cyB3aXRoIGltYWdlcy4gKG5vdCBpbiBwb3B1cHMpXG5cdFx0XHRcdG1hdGg6ICcvbWF0aC8nLFxuXHRcdFx0XHRpbWFnZXM6ICdodHRwczovL3R1Lnpob25nd2VuLndpa2kvaW1hZ2VzL3FpdXdlbmJhaWtlL3poLycsXG5cdFx0XHRcdGltYWdlc19mYWxsYmFjazogJy8vd20uemhvbmd3ZW4ud2lraS9jb21tb25zLycsXG5cdFx0XHR9LFxuXHRcdFx0bG9jYWxlOiB7XG5cdFx0XHRcdHVzZXI6IG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3BnLm5zVXNlcklkXSxcblx0XHRcdFx0aW1hZ2U6IG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3BnLm5zSW1hZ2VJZF0sXG5cdFx0XHRcdGNhdGVnb3J5OiBtdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc0NhdGVnb3J5SWRdLFxuXHRcdFx0XHQvLyBzaG91bGRuJ3QgYmUgdXNlZCBpbiBwb3B1cCBwcmV2aWV3cywgaSB0aGlua1xuXHRcdFx0XHRtb250aHM6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcblx0XHRcdH0sXG5cdFx0fTtcblx0XHQvLyBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXMgb3IgYmFja3JlZmVyZW5jZXNcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdChfYiA9IEluc3RhLmNvbmYudXNlcikubmFtZSB8fCAoX2IubmFtZSA9ICdRaXV3ZW4gQmFpa2UgY29udHJpYnV0b3JzJyk7XG5cdFx0SW5zdGEuY29uZi51c2VyLnNpZ25hdHVyZSA9IGBbWyR7SW5zdGEuY29uZi5sb2NhbGUudXNlcn06JHtJbnN0YS5jb25mLnVzZXIubmFtZX18JHtJbnN0YS5jb25mLnVzZXIubmFtZX1dXWA7XG5cdFx0Ly8gZGVmaW5lIGNvbnN0YW50c1xuXHRcdEluc3RhLkJMT0NLX0lNQUdFID0gbmV3IFJlZ0V4cChcblx0XHRcdGBeXFxcXFtcXFxcWyg/OkZpbGV8SW1hZ2V8JHtJbnN0YS5jb25mLmxvY2FsZS5pbWFnZX0pOi4qP1xcXFx8Lio/KD86ZnJhbWV8dGh1bWJuYWlsfHRodW1ifG5vbmV8cmlnaHR8bGVmdHxjZW50ZXIpYCxcblx0XHRcdCdpJ1xuXHRcdCk7XG5cdH07XG5cdEluc3RhLmR1bXAgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcblx0XHRpZiAodHlwZW9mIGZyb20gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRmcm9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZnJvbX1gKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB0byA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHRvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dG99YCk7XG5cdFx0fVxuXHRcdHRvLmlubmVySFRNTCA9IHRoaXMuY29udmVydChmcm9tLnZhbHVlKTtcblx0fTtcblx0SW5zdGEuY29udmVydCA9ICh3aWtpKSA9PiB7XG5cdFx0Y29uc3QgbGwgPSB0eXBlb2Ygd2lraSA9PT0gJ3N0cmluZycgPyB3aWtpLnJlcGxhY2UoL1xcci9nLCAnJykuc3BsaXQoL1xcbi8pIDogd2lraTsgLy8gbGluZXMgb2Ygd2lraWNvZGVcblx0XHRsZXQgbyA9ICcnOyAvLyByZXN1bHQgb2YgcGFzc2luZyBhIHJlZ2V4cCB0byBjb21wYXJlTGluZVN0cmluZ09yUmVnKClcblx0XHRsZXQgcCA9IDA7XG5cdFx0bGV0IHI7XG5cdFx0Ly8gc29tZSBzaG9ydGhhbmRzXG5cdFx0Y29uc3QgcmVtYWluID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGxsLmxlbmd0aDtcblx0XHR9O1xuXHRcdGNvbnN0IHNoID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGxsLnNoaWZ0KCk7XG5cdFx0fTsgLy8gc2hpZnRcblx0XHRjb25zdCBwcyA9IChzKSA9PiB7XG5cdFx0XHRvICs9IHM7XG5cdFx0fTsgLy8gcHVzaFxuXG5cdFx0Ly8gc2ltaWxhciB0byBDJ3MgcHJpbnRmLCB1c2VzID8gYXMgcGxhY2Vob2xkZXJzLCA/PyB0byBlc2NhcGUgcXVlc3Rpb24gbWFya3Ncblx0XHRjb25zdCBmID0gZnVuY3Rpb24gZiguLi5hcmdzKSB7XG5cdFx0XHRsZXQgaSA9IDE7XG5cdFx0XHRjb25zdCBhID0gYXJncztcblx0XHRcdGxldCBbZl0gPSBhO1xuXHRcdFx0bGV0IG8gPSAnJztcblx0XHRcdGxldCBjO1xuXHRcdFx0bGV0IHA7XG5cdFx0XHRmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKChwID0gZi5pbmRleE9mKCc/JykpICsgMSkge1xuXHRcdFx0XHRcdC8vIGFsbG93IGNoYXJhY3RlciBlc2NhcGluZ1xuXHRcdFx0XHRcdGMgPSBmLmNoYXJBdChwICsgMSkgPT09ICc/JyA/IDEgOiAwO1xuXHRcdFx0XHRcdGkgLT0gYztcblx0XHRcdFx0XHRvICs9IGYuc2xpY2UoMCwgTWF0aC5tYXgoMCwgcCkpICsgKGMgPyAnPycgOiBhW2ldKTtcblx0XHRcdFx0XHRmID0gZi5zbGljZShwICsgMSArIGMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbyArIGY7XG5cdFx0fTtcblx0XHRjb25zdCBodG1sX2VudGl0aWVzID0gKHMpID0+IHtcblx0XHRcdHJldHVybiBzLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblx0XHR9O1xuXHRcdC8vIFdpa2kgdGV4dCBwYXJzaW5nIHRvIGh0bWwgaXMgYSBuaWdodG1hcmUuXG5cdFx0Ly8gVGhlIGJlbG93IGZ1bmN0aW9ucyBkZWxpYmVyYXRlbHkgZG9uJ3QgZXNjYXBlIHRoZSBhbXBlcnNhbmQgc2luY2UgdGhpcyB3b3VsZCBtYWtlIGl0IG1vcmVcblx0XHQvLyBkaWZmaWN1bHQsIGFuZCB3ZSBkb24ndCBhYnNvbHV0ZWx5IG5lZWQgdG8gZm9yIGhvdyB3ZSBuZWVkIGl0LiBUaGlzIG1lYW5zIHRoYXQgYW55XG5cdFx0Ly8gdW5lc2NhcGVkIGFtcGVyc2FuZHMgaW4gd2lraXRleHQgd2lsbCByZW1haW4gdW5lc2NhcGVkIGFuZCBjYW4gY2F1c2UgaW52YWxpZCBIVE1MLlxuXHRcdC8vIEJyb3dzZXJzIHNob3VsZCBhbGwgYmUgYWJsZSB0byBoYW5kbGUgaXQgdGhvdWdoLiBXZSBhbHNvIGVzY2FwZSBzaWduaWZpY2FudCB3aWtpbWFya3VwXG5cdFx0Ly8gY2hhcmFjdGVycyB0byBwcmV2ZW50IGZ1cnRoZXIgbWF0Y2hpbmcgb24gdGhlIHByb2Nlc3NlZCB0ZXh0LlxuXHRcdGNvbnN0IGh0bWxlc2NhcGVfdGV4dCA9IChzKSA9PiB7XG5cdFx0XHRyZXR1cm4gc1xuXHRcdFx0XHQucmVwbGFjZSgvPC9nLCAnJmx0OycpXG5cdFx0XHRcdC5yZXBsYWNlKC8+L2csICcmZ3Q7Jylcblx0XHRcdFx0LnJlcGxhY2UoLzovZywgJyYjNTg7Jylcblx0XHRcdFx0LnJlcGxhY2UoL1xcWy9nLCAnJiM5MTsnKVxuXHRcdFx0XHQucmVwbGFjZSgvXS9nLCAnJiM5MzsnKTtcblx0XHR9O1xuXHRcdGNvbnN0IGh0bWxlc2NhcGVfYXR0ciA9IChzKSA9PiB7XG5cdFx0XHRyZXR1cm4gaHRtbGVzY2FwZV90ZXh0KHMpLnJlcGxhY2UoLycvZywgJyYjMzk7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuXHRcdH07XG5cdFx0Ly8gcmV0dXJuIHRoZSBmaXJzdCBub24gbWF0Y2hpbmcgY2hhcmFjdGVyIHBvc2l0aW9uIGJldHdlZW4gdHdvIHN0cmluZ3Ncblx0XHRjb25zdCBzdHJfaW1hdGNoID0gKGEsIGIpID0+IHtcblx0XHRcdGxldCBpO1xuXHRcdFx0bGV0IGw7XG5cdFx0XHRmb3IgKGkgPSAwLCBsID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRpZiAoYS5jaGFyQXQoaSkgIT09IGIuY2hhckF0KGkpKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBpO1xuXHRcdH07XG5cdFx0Ly8gY29tcGFyZSBjdXJyZW50IGxpbmUgYWdhaW5zdCBhIHN0cmluZyBvciByZWdleHBcblx0XHQvLyBpZiBwYXNzZWQgYSBzdHJpbmcgaXQgd2lsbCBjb21wYXJlIG9ubHkgdGhlIGZpcnN0IHN0cmluZy5sZW5ndGggY2hhcmFjdGVyc1xuXHRcdC8vIGlmIHBhc3NlZCBhIHJlZ2V4cCB0aGUgcmVzdWx0IGlzIHN0b3JlZCBpbiByXG5cdFx0Y29uc3QgY29tcGFyZUxpbmVTdHJpbmdPclJlZyA9IChjKSA9PiB7XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnID8gbGxbMF0gJiYgbGxbMF0uc2xpY2UoMCwgYy5sZW5ndGgpID09PSBjIDogKHIgPSBsbFswXSAmJiBsbFswXS5tYXRjaChjKSk7XG5cdFx0fTtcblx0XHRjb25zdCBjb21wYXJlTGluZVN0cmluZyA9IChjKSA9PiB7XG5cdFx0XHRyZXR1cm4gbGxbMF0gPT09IGM7XG5cdFx0fTsgLy8gY29tcGFyZSBjdXJyZW50IGxpbmUgYWdhaW5zdCBhIHN0cmluZ1xuXHRcdGNvbnN0IGNoYXJBdFBvaW50ID0gKHApID0+IHtcblx0XHRcdHJldHVybiBsbFswXS5jaGFyQXQocCk7XG5cdFx0fTsgLy8gcmV0dXJuIGNoYXIgYXQgcG9zIHBcblx0XHRjb25zdCBlbmRsID0gKHMpID0+IHtcblx0XHRcdHBzKHMpO1xuXHRcdFx0c2goKTtcblx0XHR9O1xuXHRcdGNvbnN0IHBhcnNlX2xpc3QgPSAoKSA9PiB7XG5cdFx0XHRsZXQgcHJldiA9ICcnO1xuXHRcdFx0d2hpbGUgKHJlbWFpbigpICYmIGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoL14oWyMqOjtdKykoLiopJC8pKSB7XG5cdFx0XHRcdGNvbnN0IGxfbWF0Y2ggPSByO1xuXHRcdFx0XHRzaCgpO1xuXHRcdFx0XHRjb25zdCBpcG9zID0gc3RyX2ltYXRjaChwcmV2LCBsX21hdGNoWzFdKTtcblx0XHRcdFx0Ly8gY2xvc2UgdW5jb250aW51ZWQgbGlzdHNcblx0XHRcdFx0Zm9yIChsZXQgcHJldlBvcyA9IHByZXYubGVuZ3RoIC0gMTsgcHJldlBvcyA+PSBpcG9zOyBwcmV2UG9zLS0pIHtcblx0XHRcdFx0XHRjb25zdCBwaSA9IHByZXYuY2hhckF0KHByZXZQb3MpO1xuXHRcdFx0XHRcdGlmIChwaSA9PT0gJyonKSB7XG5cdFx0XHRcdFx0XHRwcygnPC91bD4nKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHBpID09PSAnIycpIHtcblx0XHRcdFx0XHRcdHBzKCc8L29sPicpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoWycnLCAnKicsICcjJ10uaW5kZXhPZihsX21hdGNoWzFdLmNoYXJBdChwcmV2UG9zKSkpIHtcblx0XHRcdFx0XHRcdC8vIGNsb3NlIGEgZGwgb25seSBpZiB0aGUgbmV3IGl0ZW0gaXMgbm90IGEgZGwgaXRlbSAoOiwgOyBvciBlbXB0eSlcblx0XHRcdFx0XHRcdHBzKCc8L2RsPicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBvcGVuIG5ldyBsaXN0c1xuXHRcdFx0XHRmb3IgKGxldCBtYXRjaFBvcyA9IGlwb3M7IG1hdGNoUG9zIDwgbF9tYXRjaFsxXS5sZW5ndGg7IG1hdGNoUG9zKyspIHtcblx0XHRcdFx0XHRjb25zdCBsaSA9IGxfbWF0Y2hbMV0uY2hhckF0KG1hdGNoUG9zKTtcblx0XHRcdFx0XHRpZiAobGkgPT09ICcqJykge1xuXHRcdFx0XHRcdFx0cHMoJzx1bD4nKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGxpID09PSAnIycpIHtcblx0XHRcdFx0XHRcdHBzKCc8b2w+Jyk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChbJycsICcqJywgJyMnXS5pbmRleE9mKHByZXYuY2hhckF0KG1hdGNoUG9zKSkpIHtcblx0XHRcdFx0XHRcdC8vIG9wZW4gYSBuZXcgZGwgb25seSBpZiB0aGUgcHJldiBpdGVtIGlzIG5vdCBhIGRsIGl0ZW0gKDosIDsgb3IgZW1wdHkpXG5cdFx0XHRcdFx0XHRwcygnPGRsPicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzd2l0Y2ggKGxfbWF0Y2hbMV0uYXQoLTEpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnKic6XG5cdFx0XHRcdFx0Y2FzZSAnIyc6XG5cdFx0XHRcdFx0XHRwcyhgPGxpPiR7cGFyc2VfaW5saW5lX25vd2lraShsX21hdGNoWzJdKX1gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzsnOiB7XG5cdFx0XHRcdFx0XHRwcygnPGR0PicpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZHRfbWF0Y2ggPSBsX21hdGNoWzJdLm1hdGNoKC8oLio/KSg6Lio/KSQvKTtcblx0XHRcdFx0XHRcdC8vIGhhbmRsZSA7ZHQgOmRkIGZvcm1hdFxuXHRcdFx0XHRcdFx0aWYgKGR0X21hdGNoKSB7XG5cdFx0XHRcdFx0XHRcdHBzKHBhcnNlX2lubGluZV9ub3dpa2koZHRfbWF0Y2hbMV0pKTtcblx0XHRcdFx0XHRcdFx0bGwudW5zaGlmdChkdF9tYXRjaFsyXSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRwcyhwYXJzZV9pbmxpbmVfbm93aWtpKGxfbWF0Y2hbMl0pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICc6Jzpcblx0XHRcdFx0XHRcdHBzKGA8ZGQ+JHtwYXJzZV9pbmxpbmVfbm93aWtpKGxfbWF0Y2hbMl0pfWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFssIHByZXZdID0gbF9tYXRjaDtcblx0XHRcdH1cblx0XHRcdC8vIGNsb3NlIHJlbWFpbmluZyBsaXN0c1xuXHRcdFx0Zm9yIChsZXQgaSA9IHByZXYubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0cHMoZignPC8/PicsIHByZXYuY2hhckF0KGkpID09PSAnKicgPyAndWwnIDogcHJldi5jaGFyQXQoaSkgPT09ICcjJyA/ICdvbCcgOiAnZGwnKSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBwYXJzZV90YWJsZSA9ICgpID0+IHtcblx0XHRcdGVuZGwoZignPHRhYmxlPicsIGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoL157XFx8KCAuKikkLykgPyByWzFdIDogJycpKTtcblx0XHRcdGZvciAoOyByZW1haW4oKTsgKSB7XG5cdFx0XHRcdGlmIChjb21wYXJlTGluZVN0cmluZ09yUmVnKCd8JykpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJBdFBvaW50KDEpKSB7XG5cdFx0XHRcdFx0XHRjYXNlICd9Jzpcblx0XHRcdFx0XHRcdFx0ZW5kbCgnPC90YWJsZT4nKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0Y2FzZSAnLSc6XG5cdFx0XHRcdFx0XHRcdGVuZGwoZignPHRyPicsIGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoL1xcfC0qKC4qKS8pWzFdKSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cGFyc2VfdGFibGVfZGF0YSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChjb21wYXJlTGluZVN0cmluZ09yUmVnKCchJykpIHtcblx0XHRcdFx0XHRwYXJzZV90YWJsZV9kYXRhKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2goKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgcGFyc2VfdGFibGVfZGF0YSA9ICgpID0+IHtcblx0XHRcdGxldCB0ZF9saW5lO1xuXHRcdFx0bGV0IG1hdGNoX2k7XG5cdFx0XHQvLyAxOiBcInwrXCIsICd8JyBvciAnKydcblx0XHRcdC8vIDI6ID8/XG5cdFx0XHQvLyAzOiBhdHRyaWJ1dGVzID8/XG5cdFx0XHQvLyBUT0RPOiBmaW5pc2ggY29tbWVudGluZyB0aGlzIHJlZ2V4cFxuXHRcdFx0Y29uc3QgdGRfbWF0Y2ggPSBzaCgpLm1hdGNoKC9eKFxcfFxcK3xcXHx8ISkoKD86KFteW3xdKj8pXFx8KD8hXFx8KSk/KC4qKSkkLyk7XG5cdFx0XHRpZiAodGRfbWF0Y2hbMV0gPT09ICd8KycpIHtcblx0XHRcdFx0cHMoJzxjYXB0aW9uJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwcyhgPHQke3RkX21hdGNoWzFdID09PSAnfCcgPyAnZCcgOiAnaCd9YCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGRfbWF0Y2hbM10pIHtcblx0XHRcdFx0Ly8gcHMoJyAnICsgdGRfbWF0Y2hbM10pXG5cdFx0XHRcdG1hdGNoX2kgPSA0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2hfaSA9IDI7XG5cdFx0XHR9XG5cdFx0XHRwcygnPicpO1xuXHRcdFx0aWYgKHRkX21hdGNoWzFdID09PSAnfCsnKSB7XG5cdFx0XHRcdHBzKHBhcnNlX2lubGluZV9ub3dpa2kodGRfbWF0Y2hbbWF0Y2hfaV0pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHVzZSB8fCBvciAhISBhcyBhIGNlbGwgc2VwYXJhdG9yIGRlcGVuZGluZyBvbiBjb250ZXh0XG5cdFx0XHRcdC8vIE5PVEU6IHdoZW4gc3BsaXQoKSBpcyBwYXNzZWQgYSByZWdleHAgbWFrZSBzdXJlIHRvIHVzZSBub24tY2FwdHVyaW5nIGJyYWNrZXRzXG5cdFx0XHRcdHRkX2xpbmUgPSB0ZF9tYXRjaFttYXRjaF9pXS5zcGxpdCh0ZF9tYXRjaFsxXSA9PT0gJ3wnID8gJ3x8JyA6IC9cXHxcXHx8ISEvKTtcblx0XHRcdFx0cHMocGFyc2VfaW5saW5lX25vd2lraSh0ZF9saW5lLnNoaWZ0KCkpKTtcblx0XHRcdFx0d2hpbGUgKHRkX2xpbmUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGxsLnVuc2hpZnQodGRfbWF0Y2hbMV0gKyB0ZF9saW5lLnBvcCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IHRjID0gMDtcblx0XHRcdGNvbnN0IHRkID0gW107XG5cdFx0XHR3aGlsZSAocmVtYWluKCkpIHtcblx0XHRcdFx0dGQucHVzaChzaCgpKTtcblx0XHRcdFx0aWYgKGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoJ3wnKSkge1xuXHRcdFx0XHRcdGlmICghdGMpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY2hhckF0UG9pbnQoMSkgPT09ICd9Jykge1xuXHRcdFx0XHRcdFx0Ly8gd2UncmUgYXQgdGhlIG91dGVyLW1vc3QgbGV2ZWwgKG5vIG5lc3RlZCB0YWJsZXMpLCBza2lwIHRvIHRkIHBhcnNlXG5cdFx0XHRcdFx0XHR0Yy0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghdGMgJiYgY29tcGFyZUxpbmVTdHJpbmdPclJlZygnIScpKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29tcGFyZUxpbmVTdHJpbmdPclJlZygne3wnKSkge1xuXHRcdFx0XHRcdHRjKys7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0ZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHBzKEluc3RhLmNvbnZlcnQodGQpKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IHBhcnNlX3ByZSA9ICgpID0+IHtcblx0XHRcdHBzKCc8cHJlPicpO1xuXHRcdFx0ZG8ge1xuXHRcdFx0XHRlbmRsKGAke3BhcnNlX2lubGluZV9ub3dpa2kobGxbMF0uc2xpY2UoMSkpfVxcbmApO1xuXHRcdFx0fSB3aGlsZSAocmVtYWluKCkgJiYgY29tcGFyZUxpbmVTdHJpbmdPclJlZygnICcpKTtcblx0XHRcdHBzKCc8L3ByZT4nKTtcblx0XHR9O1xuXHRcdGNvbnN0IHBhcnNlX2Jsb2NrX2ltYWdlID0gKCkgPT4ge1xuXHRcdFx0cHMocGFyc2VfaW1hZ2Uoc2goKSkpO1xuXHRcdH07XG5cdFx0Y29uc3QgcGFyc2VfaW1hZ2UgPSAoc3RyKSA9PiB7XG5cdFx0XHQvLyBnZXQgd2hhdCdzIGluIGJldHdlZW4gXCJbW0ltYWdlOlwiIGFuZCBcIl1dXCJcblx0XHRcdGxldCB0YWcgPSBzdHIuc3Vic3RyaW5nKHN0ci5pbmRleE9mKCc6JykgKyAxLCBzdHIubGVuZ3RoIC0gMik7XG5cdFx0XHRsZXQgd2lkdGg7XG5cdFx0XHRsZXQgYXR0ciA9IFtdO1xuXHRcdFx0bGV0IGZpbGVuYW1lO1xuXHRcdFx0bGV0IGNhcHRpb24gPSAnJztcblx0XHRcdGxldCB0aHVtYiA9IDA7XG5cdFx0XHRsZXQgZnJhbWUgPSAwO1xuXHRcdFx0bGV0IGNlbnRlciA9IDA7XG5cdFx0XHRsZXQgYWxpZ24gPSAnJztcblx0XHRcdGlmICgvXFx8Ly50ZXN0KHRhZykpIHtcblx0XHRcdFx0Ly8gbWFuYWdlIG5lc3RlZCBsaW5rc1xuXHRcdFx0XHRsZXQgbmVzdGluZyA9IDA7XG5cdFx0XHRcdGxldCBsYXN0X2F0dHI7XG5cdFx0XHRcdGZvciAobGV0IGkgPSB0YWcubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuXHRcdFx0XHRcdGlmICh0YWcuY2hhckF0KGkpID09PSAnfCcgJiYgIW5lc3RpbmcpIHtcblx0XHRcdFx0XHRcdGxhc3RfYXR0ciA9IHRhZy5zbGljZShpICsgMSk7XG5cdFx0XHRcdFx0XHR0YWcgPSB0YWcuc2xpY2UoMCwgTWF0aC5tYXgoMCwgaSkpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN3aXRjaCAodGFnLnNsaWNlKGkgLSAxLCBpIC0gMSArIDIpKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ11dJzpcblx0XHRcdFx0XHRcdFx0XHRuZXN0aW5nKys7XG5cdFx0XHRcdFx0XHRcdFx0aS0tO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICdbWyc6XG5cdFx0XHRcdFx0XHRcdFx0bmVzdGluZy0tO1xuXHRcdFx0XHRcdFx0XHRcdGktLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YXR0ciA9IHRhZy5zcGxpdCgvXFxzKlxcfFxccyovKTtcblx0XHRcdFx0YXR0ci5wdXNoKGxhc3RfYXR0cik7XG5cdFx0XHRcdGZpbGVuYW1lID0gYXR0ci5zaGlmdCgpO1xuXHRcdFx0XHRsZXQgd19tYXRjaDtcblx0XHRcdFx0Zm9yICg7IGF0dHIubGVuZ3RoID4gMDsgYXR0ci5zaGlmdCgpKSB7XG5cdFx0XHRcdFx0d19tYXRjaCA9IGF0dHJbMF0ubWF0Y2goL14oXFxkKikoPzpbcHhdKlxcZCopP3B4JC8pO1xuXHRcdFx0XHRcdGlmICh3X21hdGNoKSB7XG5cdFx0XHRcdFx0XHRbLCB3aWR0aF0gPSB3X21hdGNoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKGF0dHJbMF0pIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAndGh1bWInOlxuXHRcdFx0XHRcdFx0XHRjYXNlICd0aHVtYm5haWwnOlxuXHRcdFx0XHRcdFx0XHRcdHRodW1iID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRmcmFtZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2ZyYW1lJzpcblx0XHRcdFx0XHRcdFx0XHRmcmFtZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ25vbmUnOlxuXHRcdFx0XHRcdFx0XHRjYXNlICdyaWdodCc6XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2xlZnQnOlxuXHRcdFx0XHRcdFx0XHRcdGNlbnRlciA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFthbGlnbl0gPSBhdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICdjZW50ZXInOlxuXHRcdFx0XHRcdFx0XHRcdGNlbnRlciA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YWxpZ24gPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHIubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRbY2FwdGlvbl0gPSBhdHRyO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbGVuYW1lID0gdGFnO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH07XG5cdFx0Y29uc3QgcGFyc2VfaW5saW5lX25vd2lraSA9IChzdHIpID0+IHtcblx0XHRcdGxldCBzdGFydDtcblx0XHRcdGxldCBsYXN0ZW5kID0gMDtcblx0XHRcdGxldCBzdWJzdGFydCA9IDA7XG5cdFx0XHRsZXQgbmVzdGxldiA9IDA7XG5cdFx0XHRsZXQgb3Blbjtcblx0XHRcdGxldCBjbG9zZTtcblx0XHRcdGxldCBzdWJsb29wO1xuXHRcdFx0bGV0IGh0bWwgPSAnJztcblx0XHRcdHdoaWxlICgoc3RhcnQgPSBzdHIuaW5kZXhPZignPG5vJy5jb25jYXQoJ3dpa2knLCAnPicpLCBzdWJzdGFydCkpICE9PSAtMSkge1xuXHRcdFx0XHRodG1sICs9IHBhcnNlX2lubGluZV93aWtpKHN0ci5zdWJzdHJpbmcobGFzdGVuZCwgc3RhcnQpKTtcblx0XHRcdFx0c3RhcnQgKz0gODtcblx0XHRcdFx0c3Vic3RhcnQgPSBzdGFydDtcblx0XHRcdFx0c3VibG9vcCA9IHRydWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRvcGVuID0gc3RyLmluZGV4T2YoJzxubycuY29uY2F0KCd3aWtpJywgJz4nKSwgc3Vic3RhcnQpO1xuXHRcdFx0XHRcdGNsb3NlID0gc3RyLmluZGV4T2YoJzwvbm8nLmNvbmNhdCgnd2lraScsICc+JyksIHN1YnN0YXJ0KTtcblx0XHRcdFx0XHRpZiAoY2xvc2UgPD0gb3BlbiB8fCBvcGVuID09PSAtMSkge1xuXHRcdFx0XHRcdFx0aWYgKGNsb3NlID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaHRtbCArIGh0bWxfZW50aXRpZXMoc3RyLnNsaWNlKHN0YXJ0KSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzdWJzdGFydCA9IGNsb3NlICsgOTtcblx0XHRcdFx0XHRcdGlmIChuZXN0bGV2KSB7XG5cdFx0XHRcdFx0XHRcdG5lc3RsZXYtLTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxhc3RlbmQgPSBzdWJzdGFydDtcblx0XHRcdFx0XHRcdFx0aHRtbCArPSBodG1sX2VudGl0aWVzKHN0ci5zdWJzdHJpbmcoc3RhcnQsIGxhc3RlbmQgLSA5KSk7XG5cdFx0XHRcdFx0XHRcdHN1Ymxvb3AgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3Vic3RhcnQgPSBvcGVuICsgODtcblx0XHRcdFx0XHRcdG5lc3RsZXYrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKHN1Ymxvb3ApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGh0bWwgKyBwYXJzZV9pbmxpbmVfd2lraShzdHIuc2xpY2UobGFzdGVuZCkpO1xuXHRcdH07XG5cdFx0Y29uc3QgcGFyc2VfaW5saW5lX2ltYWdlcyA9IChzdHIpID0+IHtcblx0XHRcdGxldCBzdGFydDtcblx0XHRcdGxldCBzdWJzdGFydCA9IDA7XG5cdFx0XHRsZXQgbmVzdGxldiA9IDA7XG5cdFx0XHRsZXQgbG9vcDtcblx0XHRcdGxldCBjbG9zZTtcblx0XHRcdGxldCBvcGVuO1xuXHRcdFx0bGV0IHdpa2k7XG5cdFx0XHRsZXQgaHRtbDtcblx0XHRcdHdoaWxlICgoc3RhcnQgPSBzdHIuaW5kZXhPZignW1snLCBzdWJzdGFydCkpICE9PSAtMSkge1xuXHRcdFx0XHRpZiAobmV3IFJlZ0V4cChgXihJbWFnZXxGaWxlfCR7SW5zdGEuY29uZi5sb2NhbGUuaW1hZ2V9KTpgLCAnaScpLnRlc3Qoc3RyLnNsaWNlKHN0YXJ0ICsgMikpKSB7XG5cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG5cdFx0XHRcdFx0c3Vic3RhcnQgPSBzdGFydDtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRzdWJzdGFydCArPSAyO1xuXHRcdFx0XHRcdFx0Y2xvc2UgPSBzdHIuaW5kZXhPZignXV0nLCBzdWJzdGFydCk7XG5cdFx0XHRcdFx0XHRvcGVuID0gc3RyLmluZGV4T2YoJ1tbJywgc3Vic3RhcnQpO1xuXHRcdFx0XHRcdFx0aWYgKGNsb3NlIDw9IG9wZW4gfHwgb3BlbiA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGNsb3NlID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzdHI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0c3Vic3RhcnQgPSBjbG9zZTtcblx0XHRcdFx0XHRcdFx0aWYgKG5lc3RsZXYpIHtcblx0XHRcdFx0XHRcdFx0XHRuZXN0bGV2LS07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0d2lraSA9IHN0ci5zdWJzdHJpbmcoc3RhcnQsIGNsb3NlICsgMik7XG5cdFx0XHRcdFx0XHRcdFx0aHRtbCA9IHBhcnNlX2ltYWdlKHdpa2kpO1xuXHRcdFx0XHRcdFx0XHRcdHN0ciA9IHN0ci5yZXBsYWNlKHdpa2ksIGh0bWwpO1xuXHRcdFx0XHRcdFx0XHRcdHN1YnN0YXJ0ID0gc3RhcnQgKyBodG1sLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHRsb29wID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN1YnN0YXJ0ID0gb3Blbjtcblx0XHRcdFx0XHRcdFx0bmVzdGxldisrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gd2hpbGUgKGxvb3ApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3RyO1xuXHRcdH07XG5cdFx0Ly8gdGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzcGVjdCB0aGUgRklMTyBzdHJ1Y3R1cmUgb2YgSFRNTFxuXHRcdC8vIGJ1dCBzaW5jZSBtb3N0IGJyb3dzZXJzIGNhbiBoYW5kbGUgaXQgSSdsbCBzYXZlIG15c2VsZiB0aGUgaGFzc2xlXG5cdFx0Y29uc3QgcGFyc2VfaW5saW5lX2Zvcm1hdHRpbmcgPSAoc3RyKSA9PiB7XG5cdFx0XHRsZXQgZW07XG5cdFx0XHRsZXQgc3Q7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBsaTtcblx0XHRcdGxldCBvID0gJyc7XG5cdFx0XHR3aGlsZSAoKGkgPSBzdHIuaW5kZXhPZihcIicnXCIsIGxpKSkgKyAxKSB7XG5cdFx0XHRcdG8gKz0gc3RyLnN1YnN0cmluZyhsaSwgaSk7XG5cdFx0XHRcdGxpID0gaSArIDI7XG5cdFx0XHRcdGlmIChzdHIuY2hhckF0KGkgKyAyKSA9PT0gXCInXCIpIHtcblx0XHRcdFx0XHRsaSsrO1xuXHRcdFx0XHRcdHN0ID0gIXN0O1xuXHRcdFx0XHRcdG8gKz0gc3QgPyAnPHN0cm9uZz4nIDogJzwvc3Ryb25nPic7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZW0gPSAhZW07XG5cdFx0XHRcdFx0byArPSBlbSA/ICc8ZW0+JyA6ICc8L2VtPic7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBvICsgc3RyLnNsaWNlKGxpKTtcblx0XHR9O1xuXHRcdGNvbnN0IHBhcnNlX2lubGluZV93aWtpID0gKHN0cikgPT4ge1xuXHRcdFx0c3RyID0gcGFyc2VfaW5saW5lX2ltYWdlcyhzdHIpO1xuXHRcdFx0c3RyID0gcGFyc2VfaW5saW5lX2Zvcm1hdHRpbmcoc3RyKTtcblx0XHRcdC8vIG1hdGhcblx0XHRcdHN0ciA9IHN0ci5yZXBsYWNlKC88bWF0aD4oLio/KTxcXC9tYXRoPi9naSwgJycpO1xuXHRcdFx0Ly8gQnVpbGQgYSBNZWRpYXdpa2ktZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG5cdFx0XHRsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRsZXQgbWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRlcygpO1xuXHRcdFx0aWYgKG1pbnV0ZXMgPCAxMCkge1xuXHRcdFx0XHRtaW51dGVzID0gYDAke21pbnV0ZXN9YDtcblx0XHRcdH1cblx0XHRcdGRhdGUgPSBmKFxuXHRcdFx0XHQnPzo/LCA/ID8gPyAoVVRDKScsXG5cdFx0XHRcdGRhdGUuZ2V0VVRDSG91cnMoKSxcblx0XHRcdFx0bWludXRlcyxcblx0XHRcdFx0ZGF0ZS5nZXRVVENEYXRlKCksXG5cdFx0XHRcdEluc3RhLmNvbmYubG9jYWxlLm1vbnRoc1tkYXRlLmdldFVUQ01vbnRoKCldLFxuXHRcdFx0XHRkYXRlLmdldFVUQ0Z1bGxZZWFyKClcblx0XHRcdCk7XG5cdFx0XHQvLyB0ZXh0IGZvcm1hdHRpbmdcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHN0clxuXHRcdFx0XHRcdC8vIHNpZ25hdHVyZXNcblx0XHRcdFx0XHQucmVwbGFjZSgvfns1fSg/IX4pL2csIGRhdGUpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL357NH0oPyF+KS9nLCBgJHtJbnN0YS5jb25mLnVzZXIubmFtZX0gJHtkYXRlfWApXG5cdFx0XHRcdFx0LnJlcGxhY2UoL357M30oPyF+KS9nLCBJbnN0YS5jb25mLnVzZXIubmFtZSlcblx0XHRcdFx0XHQvLyBbWzpDYXRlZ29yeTouLi5dXSwgW1s6SW1hZ2U6Li4uXV0sIGV0Yy4uLlxuXHRcdFx0XHRcdC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHRcdFx0YFxcXFxbXFxcXFs6KCg/OiR7SW5zdGEuY29uZi5sb2NhbGUuY2F0ZWdvcnl9fEltYWdlfEZpbGV8JHtJbnN0YS5jb25mLmxvY2FsZS5pbWFnZX18JHtJbnN0YS5jb25mLndpa2kuaW50ZXJ3aWtpfSk6W158XSo/KVxcXFxdXFxcXF0oXFxcXHcqKWAsXG5cdFx0XHRcdFx0XHRcdCdnaSdcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHQoXyQwLCAkMSwgJDIpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFx0XCI8YSBocmVmPSc/Jz4/PC9hPlwiLFxuXHRcdFx0XHRcdFx0XHRcdEluc3RhLmNvbmYucGF0aHMuYXJ0aWNsZXMgKyBodG1sZXNjYXBlX2F0dHIoJDEpLFxuXHRcdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMSkgKyBodG1sZXNjYXBlX3RleHQoJDIpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC8vIHJlbW92ZSBzdHJhaWdodCBjYXRlZ29yeSBhbmQgaW50ZXJ3aWtpIHRhZ3Ncblx0XHRcdFx0XHQucmVwbGFjZShcblx0XHRcdFx0XHRcdG5ldyBSZWdFeHAoXG5cdFx0XHRcdFx0XHRcdGBcXFxcW1xcXFxbKD86JHtJbnN0YS5jb25mLmxvY2FsZS5jYXRlZ29yeX18JHtJbnN0YS5jb25mLndpa2kuaW50ZXJ3aWtpfSk6Lio/XFxcXF1cXFxcXWAsXG5cdFx0XHRcdFx0XHRcdCdnaSdcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHQnJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQvLyBbWzpDYXRlZ29yeTouLi58TGlua3NdXSwgW1s6SW1hZ2U6Li4ufExpbmtzXV0sIGV0Yy4uLlxuXHRcdFx0XHRcdC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHRcdFx0YFxcXFxbXFxcXFs6KCg/OiR7SW5zdGEuY29uZi5sb2NhbGUuY2F0ZWdvcnl9fEltYWdlfEZpbGV8JHtJbnN0YS5jb25mLmxvY2FsZS5pbWFnZX18JHtJbnN0YS5jb25mLndpa2kuaW50ZXJ3aWtpfSk6Lio/KVxcXFx8KFteXFxcXF1dKz8pXFxcXF1cXFxcXShcXFxcdyopYCxcblx0XHRcdFx0XHRcdFx0J2dpJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdChfJDAsICQxLCAkMiwgJDMpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFx0XCI8YSBocmVmPSc/Jz4/PC9hPlwiLFxuXHRcdFx0XHRcdFx0XHRcdEluc3RhLmNvbmYucGF0aHMuYXJ0aWNsZXMgKyBodG1sZXNjYXBlX2F0dHIoJDEpLFxuXHRcdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMikgKyBodG1sZXNjYXBlX3RleHQoJDMpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC8vIFtbL1JlbGF0aXZlIGxpbmtzXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFxcL1tefF0qPyldXS9nLCAoXyQwLCAkMSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXCI8YSBocmVmPSc/Jz4/PC9hPlwiLCBJbnN0YS5jb25mLmJhc2VVcmwgKyBodG1sZXNjYXBlX2F0dHIoJDEpLCBodG1sZXNjYXBlX3RleHQoJDEpKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC8vIFtbL1JlcGxhY2VkfFJlbGF0aXZlIGxpbmtzXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFxcLy4qPylcXHwoLis/KV1dL2csIChfJDAsICQxLCAkMikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXCI8YSBocmVmPSc/Jz4/PC9hPlwiLCBJbnN0YS5jb25mLmJhc2VVcmwgKyBodG1sZXNjYXBlX2F0dHIoJDEpLCBodG1sZXNjYXBlX3RleHQoJDIpKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC8vIFtbQ29tbW9uIGxpbmtzXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFteW3xdKj8pXV0oXFx3KikvZywgKF8kMCwgJDEsICQyKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZihcblx0XHRcdFx0XHRcdFx0XCI8YSBocmVmPSc/Jz4/PC9hPlwiLFxuXHRcdFx0XHRcdFx0XHRJbnN0YS5jb25mLnBhdGhzLmFydGljbGVzICsgaHRtbGVzY2FwZV9hdHRyKCQxKSxcblx0XHRcdFx0XHRcdFx0aHRtbGVzY2FwZV90ZXh0KCQxKSArIGh0bWxlc2NhcGVfdGV4dCgkMilcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQvLyBbW1JlcGxhY2VkfExpbmtzXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFteW10qPylcXHwoW15cXF1dKz8pXV0oXFx3KikvZywgKF8kMCwgJDEsICQyLCAkMykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFwiPGEgaHJlZj0nPyc+PzwvYT5cIixcblx0XHRcdFx0XHRcdFx0SW5zdGEuY29uZi5wYXRocy5hcnRpY2xlcyArIGh0bWxlc2NhcGVfYXR0cigkMSksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMikgKyBodG1sZXNjYXBlX3RleHQoJDMpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Ly8gW1tTdHJpcHBlZDpOYW1lc3BhY2V8TmFtZXNwYWNlXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFteXFxdXSo/Oik/KC4qPykoICpcXCguKj9cXCkpP1xcfF1dL2csIChfJDAsICQxLCAkMiwgJDMpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmKFxuXHRcdFx0XHRcdFx0XHRcIjxhIGhyZWY9Jz8nPj88L2E+XCIsXG5cdFx0XHRcdFx0XHRcdEluc3RhLmNvbmYucGF0aHMuYXJ0aWNsZXMgKyBodG1sZXNjYXBlX2F0dHIoJDEpICsgaHRtbGVzY2FwZV9hdHRyKCQyKSArIGh0bWxlc2NhcGVfYXR0cigkMyksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMilcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQvLyBFeHRlcm5hbCBsaW5rc1xuXHRcdFx0XHRcdC5yZXBsYWNlKC9cXFsoaHR0cHM/fG5ld3N8ZnRwfG1haWx0b3xnb3BoZXJ8aXJjKTooXFwvKikoW15cXF1dKj8pICguKj8pXS9nLCAoXyQwLCAkMSwgJDIsICQzLCAkNCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFwiPGEgY2xhc3M9J2V4dGVybmFsJyBocmVmPSc/Oj8nPj88L2E+XCIsXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfYXR0cigkMSksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfYXR0cigkMikgKyBodG1sZXNjYXBlX2F0dHIoJDMpLFxuXHRcdFx0XHRcdFx0XHRodG1sZXNjYXBlX3RleHQoJDQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlcGxhY2UoL1xcW2h0dHA6XFwvXFwvKC4qPyldL2csIChfJDAsICQxKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZihcIjxhIGNsYXNzPSdleHRlcm5hbCcgaHJlZj0naHR0cDovLz8nPlsjXTwvYT5cIiwgaHRtbGVzY2FwZV9hdHRyKCQxKSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbKG5ld3N8ZnRwfG1haWx0b3xnb3BoZXJ8aXJjKTooXFwvKikoLio/KV0vZywgKF8kMCwgJDEsICQyLCAkMykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFwiPGEgY2xhc3M9J2V4dGVybmFsJyBocmVmPSc/Oj8nPj86PzwvYT5cIixcblx0XHRcdFx0XHRcdFx0aHRtbGVzY2FwZV9hdHRyKCQxKSxcblx0XHRcdFx0XHRcdFx0aHRtbGVzY2FwZV9hdHRyKCQyKSArIGh0bWxlc2NhcGVfYXR0cigkMyksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMSksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMikgKyBodG1sZXNjYXBlX3RleHQoJDMpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlcGxhY2UoXG5cdFx0XHRcdFx0XHQvKF58ICkoaHR0cHM/fG5ld3N8ZnRwfG1haWx0b3xnb3BoZXJ8aXJjKTooXFwvKikoW14gJF0qW14gISQsLjo7P10pL2csXG5cdFx0XHRcdFx0XHQoXyQwLCAkMSwgJDIsICQzLCAkNCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZihcblx0XHRcdFx0XHRcdFx0XHRcIj88YSBjbGFzcz0nZXh0ZXJuYWwnIGhyZWY9Jz86Pyc+Pzo/PC9hPlwiLFxuXHRcdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMSksXG5cdFx0XHRcdFx0XHRcdFx0aHRtbGVzY2FwZV9hdHRyKCQyKSxcblx0XHRcdFx0XHRcdFx0XHRodG1sZXNjYXBlX2F0dHIoJDMpICsgaHRtbGVzY2FwZV9hdHRyKCQ0KSxcblx0XHRcdFx0XHRcdFx0XHRodG1sZXNjYXBlX3RleHQoJDIpLFxuXHRcdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMykgKyBodG1sZXNjYXBlX3RleHQoJDQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC5yZXBsYWNlKCdfX05PVE9DX18nLCAnJylcblx0XHRcdFx0XHQucmVwbGFjZSgnX19OT0lOREVYX18nLCAnJylcblx0XHRcdFx0XHQucmVwbGFjZSgnX19JTkRFWF9fJywgJycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoJ19fTk9FRElUU0VDVElPTl9fJywgJycpXG5cdFx0XHQpO1xuXHRcdH07XG5cdFx0Ly8gYmVnaW4gcGFyc2luZ1xuXHRcdGZvciAoOyByZW1haW4oKTsgKSB7XG5cdFx0XHRpZiAoY29tcGFyZUxpbmVTdHJpbmdPclJlZygvXig9ezEsNn0pKC4qKVxcMSguKikkLykpIHtcblx0XHRcdFx0cCA9IDA7XG5cdFx0XHRcdGVuZGwoZignPGg/Pj88L2g/Pj8nLCByWzFdLmxlbmd0aCwgcGFyc2VfaW5saW5lX25vd2lraShyWzJdKSwgclsxXS5sZW5ndGgsIHJbM10pKTtcblx0XHRcdH0gZWxzZSBpZiAoY29tcGFyZUxpbmVTdHJpbmdPclJlZygvXlsjKjo7XS8pKSB7XG5cdFx0XHRcdHAgPSAwO1xuXHRcdFx0XHRwYXJzZV9saXN0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoJyAnKSkge1xuXHRcdFx0XHRwID0gMDtcblx0XHRcdFx0cGFyc2VfcHJlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoJ3t8JykpIHtcblx0XHRcdFx0cCA9IDA7XG5cdFx0XHRcdHBhcnNlX3RhYmxlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoL14tLS0tKyQvKSkge1xuXHRcdFx0XHRwID0gMDtcblx0XHRcdFx0ZW5kbCgnPGhyPicpO1xuXHRcdFx0fSBlbHNlIGlmIChjb21wYXJlTGluZVN0cmluZ09yUmVnKEluc3RhLkJMT0NLX0lNQUdFKSkge1xuXHRcdFx0XHRwID0gMDtcblx0XHRcdFx0cGFyc2VfYmxvY2tfaW1hZ2UoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBwYXJhZ3JhcGhzXG5cdFx0XHRcdGlmIChjb21wYXJlTGluZVN0cmluZygnJykpIHtcblx0XHRcdFx0XHRwID0gcmVtYWluKCkgPiAxICYmIGxsWzFdID09PSAnJztcblx0XHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdFx0ZW5kbCgnPHA+PGJyPicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIXApIHtcblx0XHRcdFx0XHRcdHBzKCc8cD4nKTtcblx0XHRcdFx0XHRcdHAgPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwcyhgJHtwYXJzZV9pbmxpbmVfbm93aWtpKGxsWzBdKX0gYCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2goKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG87XG5cdH07XG5cdGNvbnN0IHdpa2kyaHRtbCA9ICh0eHQsIGJhc2V1cmwpID0+IHtcblx0XHRJbnN0YS5jb25mLmJhc2VVcmwgPSBiYXNldXJsO1xuXHRcdHJldHVybiBJbnN0YS5jb252ZXJ0KHR4dCk7XG5cdH07XG5cdC8vIEVOREZJTEU6IGxpdmVwcmV2aWV3LmpzXG5cdC8vIFNUQVJURklMRTogcGFnZWluZm8uanNcblx0Y29uc3QgcG9wdXBGaWx0ZXJQYWdlU2l6ZSA9IChkYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGZvcm1hdEJ5dGVzKGRhdGEubGVuZ3RoKTtcblx0fTtcblx0Y29uc3QgcG9wdXBGaWx0ZXJDb3VudExpbmtzID0gKGRhdGEpID0+IHtcblx0XHRjb25zdCBudW0gPSBjb3VudExpbmtzKGRhdGEpO1xuXHRcdHJldHVybiBgJHtTdHJpbmcobnVtKX0mbmJzcDske251bSA9PT0gMSA/IHBvcHVwU3RyaW5nKCd3aWtpTGluaycpIDogcG9wdXBTdHJpbmcoJ3dpa2lMaW5rcycpfWA7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyQ291bnRJbWFnZXMgPSAoZGF0YSkgPT4ge1xuXHRcdGNvbnN0IG51bSA9IGNvdW50SW1hZ2VzKGRhdGEpO1xuXHRcdHJldHVybiBgJHtTdHJpbmcobnVtKX0mbmJzcDske251bSA9PT0gMSA/IHBvcHVwU3RyaW5nKCdpbWFnZScpIDogcG9wdXBTdHJpbmcoJ2ltYWdlcycpfWA7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyQ291bnRDYXRlZ29yaWVzID0gKGRhdGEpID0+IHtcblx0XHRjb25zdCBudW0gPSBjb3VudENhdGVnb3JpZXMoZGF0YSk7XG5cdFx0cmV0dXJuIGAke1N0cmluZyhudW0pfSZuYnNwOyR7bnVtID09PSAxID8gcG9wdXBTdHJpbmcoJ2NhdGVnb3J5JykgOiBwb3B1cFN0cmluZygnY2F0ZWdvcmllcycpfWA7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyTGFzdE1vZGlmaWVkID0gKF9kYXRhLCBkb3dubG9hZCkgPT4ge1xuXHRcdGNvbnN0IGxhc3Rtb2QgPSBkb3dubG9hZC5sYXN0TW9kaWZpZWQ7XG5cdFx0Y29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblx0XHRjb25zdCBhZ2UgPSBub3cgLSBsYXN0bW9kO1xuXHRcdGlmIChsYXN0bW9kICYmIGdldFZhbHVlT2YoJ3BvcHVwTGFzdE1vZGlmaWVkJykpIHtcblx0XHRcdHJldHVybiB0cHJpbnRmKCclcyBvbGQnLCBbZm9ybWF0QWdlKGFnZSldKS5yZXBsYWNlKC8gL2csICcmbmJzcDsnKTtcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXHRjb25zdCBmb3JtYXRBZ2UgPSAoYWdlKSA9PiB7XG5cdFx0Ly8gY29lcmNlIGludG8gYSBudW1iZXJcblx0XHRsZXQgYSA9IDAgKyBhZ2U7XG5cdFx0Y29uc3QgYWEgPSBhO1xuXHRcdGNvbnN0IHNlY2xlbiA9IDEwMDA7XG5cdFx0Y29uc3QgbWlubGVuID0gNjAgKiBzZWNsZW47XG5cdFx0Y29uc3QgaG91cmxlbiA9IDYwICogbWlubGVuO1xuXHRcdGNvbnN0IGRheWxlbiA9IDI0ICogaG91cmxlbjtcblx0XHRjb25zdCB3ZWVrbGVuID0gNyAqIGRheWxlbjtcblx0XHRjb25zdCBudW13ZWVrcyA9IChhIC0gKGEgJSB3ZWVrbGVuKSkgLyB3ZWVrbGVuO1xuXHRcdGEgLT0gbnVtd2Vla3MgKiB3ZWVrbGVuO1xuXHRcdGNvbnN0IHN3ZWVrcyA9IGFkZHVuaXQobnVtd2Vla3MsICd3ZWVrJyk7XG5cdFx0Y29uc3QgbnVtZGF5cyA9IChhIC0gKGEgJSBkYXlsZW4pKSAvIGRheWxlbjtcblx0XHRhIC09IG51bWRheXMgKiBkYXlsZW47XG5cdFx0Y29uc3Qgc2RheXMgPSBhZGR1bml0KG51bWRheXMsICdkYXknKTtcblx0XHRjb25zdCBudW1ob3VycyA9IChhIC0gKGEgJSBob3VybGVuKSkgLyBob3VybGVuO1xuXHRcdGEgLT0gbnVtaG91cnMgKiBob3VybGVuO1xuXHRcdGNvbnN0IHNob3VycyA9IGFkZHVuaXQobnVtaG91cnMsICdob3VyJyk7XG5cdFx0Y29uc3QgbnVtbWlucyA9IChhIC0gKGEgJSBtaW5sZW4pKSAvIG1pbmxlbjtcblx0XHRhIC09IG51bW1pbnMgKiBtaW5sZW47XG5cdFx0Y29uc3Qgc21pbnMgPSBhZGR1bml0KG51bW1pbnMsICdtaW51dGUnKTtcblx0XHRjb25zdCBudW1zZWNzID0gKGEgLSAoYSAlIHNlY2xlbikpIC8gc2VjbGVuO1xuXHRcdGEgLT0gbnVtc2VjcyAqIHNlY2xlbjtcblx0XHRjb25zdCBzc2VjcyA9IGFkZHVuaXQobnVtc2VjcywgJ3NlY29uZCcpO1xuXHRcdGlmIChhYSA+IDQgKiB3ZWVrbGVuKSB7XG5cdFx0XHRyZXR1cm4gc3dlZWtzO1xuXHRcdH1cblx0XHRpZiAoYWEgPiB3ZWVrbGVuKSB7XG5cdFx0XHRyZXR1cm4gYCR7c3dlZWtzfSAke3NkYXlzfWA7XG5cdFx0fVxuXHRcdGlmIChhYSA+IGRheWxlbikge1xuXHRcdFx0cmV0dXJuIGAke3NkYXlzfSAke3Nob3Vyc31gO1xuXHRcdH1cblx0XHRpZiAoYWEgPiA2ICogaG91cmxlbikge1xuXHRcdFx0cmV0dXJuIHNob3Vycztcblx0XHR9XG5cdFx0aWYgKGFhID4gaG91cmxlbikge1xuXHRcdFx0cmV0dXJuIGAke3Nob3Vyc30gJHtzbWluc31gO1xuXHRcdH1cblx0XHRpZiAoYWEgPiAxMCAqIG1pbmxlbikge1xuXHRcdFx0cmV0dXJuIHNtaW5zO1xuXHRcdH1cblx0XHRpZiAoYWEgPiBtaW5sZW4pIHtcblx0XHRcdHJldHVybiBgJHtzbWluc30gJHtzc2Vjc31gO1xuXHRcdH1cblx0XHRyZXR1cm4gc3NlY3M7XG5cdH07XG5cdGNvbnN0IGFkZHVuaXQgPSAobnVtLCBzdHIpID0+IHtcblx0XHRyZXR1cm4gYCR7bnVtfSAke251bSA9PT0gMSA/IHBvcHVwU3RyaW5nKHN0cikgOiBwb3B1cFN0cmluZyhgJHtzdHJ9c2ApfWA7XG5cdH07XG5cdGNvbnN0IHJ1blBvcHVwRmlsdGVycyA9IChsaXN0LCBkYXRhLCBkb3dubG9hZCkgPT4ge1xuXHRcdGNvbnN0IHJldCA9IFtdO1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBsaXN0KSB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRjb25zdCBzID0gZWxlbWVudChkYXRhLCBkb3dubG9hZCwgZG93bmxvYWQub3duZXIuYXJ0aWNsZSk7XG5cdFx0XHRcdGlmIChzKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2gocyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgZ2V0UGFnZUluZm8gPSAoZGF0YSwgZG93bmxvYWQpID0+IHtcblx0XHRpZiAoIWRhdGEgfHwgZGF0YS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBwb3B1cFN0cmluZygnRW1wdHkgcGFnZScpO1xuXHRcdH1cblx0XHRjb25zdCBwb3B1cEZpbHRlcnMgPSBnZXRWYWx1ZU9mKCdwb3B1cEZpbHRlcnMnKSB8fCBbXTtcblx0XHRjb25zdCBleHRyYVBvcHVwRmlsdGVycyA9IGdldFZhbHVlT2YoJ2V4dHJhUG9wdXBGaWx0ZXJzJykgfHwgW107XG5cdFx0Y29uc3QgcGFnZUluZm9BcnJheSA9IHJ1blBvcHVwRmlsdGVycyhbLi4ucG9wdXBGaWx0ZXJzLCAuLi5leHRyYVBvcHVwRmlsdGVyc10sIGRhdGEsIGRvd25sb2FkKTtcblx0XHRsZXQgcGFnZUluZm8gPSBwYWdlSW5mb0FycmF5LmpvaW4oJywgJyk7XG5cdFx0aWYgKHBhZ2VJbmZvICE9PSAnJykge1xuXHRcdFx0cGFnZUluZm8gPSB1cGNhc2VGaXJzdChwYWdlSW5mbyk7XG5cdFx0fVxuXHRcdHJldHVybiBwYWdlSW5mbztcblx0fTtcblx0Ly8gdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCFcblx0Y29uc3QgY291bnRMaW5rcyA9ICh3aWtpVGV4dCkgPT4ge1xuXHRcdHJldHVybiB3aWtpVGV4dC5zcGxpdCgnW1snKS5sZW5ndGggLSAxO1xuXHR9O1xuXHQvLyBpZiBOID0gIyBtYXRjaGVzLCBuID0gIyBicmFja2V0cywgdGhlblxuXHQvLyBTdHJpbmcuc3BsaXQocmVnZXgpIGludGVyc3BlcnNlcyB0aGUgTisxIHNwbGl0IGVsZW1lbnRzXG5cdC8vIHdpdGggTm4gb3RoZXIgZWxlbWVudHMuIFNvIHRvdGFsIGxlbmd0aCBpc1xuXHQvLyBMPSBOKzEgKyBObiA9IE4obisxKSsxLiBTbyBOPShMLTEpLyhuKzEpLlxuXHRjb25zdCBjb3VudEltYWdlcyA9ICh3aWtpVGV4dCkgPT4ge1xuXHRcdHJldHVybiAod2lraVRleHQuc3BsaXQocGcucmUuaW1hZ2UpLmxlbmd0aCAtIDEpIC8gKHBnLnJlLmltYWdlQnJhY2tldENvdW50ICsgMSk7XG5cdH07XG5cdGNvbnN0IGNvdW50Q2F0ZWdvcmllcyA9ICh3aWtpVGV4dCkgPT4ge1xuXHRcdHJldHVybiAod2lraVRleHQuc3BsaXQocGcucmUuY2F0ZWdvcnkpLmxlbmd0aCAtIDEpIC8gKHBnLnJlLmNhdGVnb3J5QnJhY2tldENvdW50ICsgMSk7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyU3R1YkRldGVjdCA9IChkYXRhLCBfZG93bmxvYWQsIGFydGljbGUpID0+IHtcblx0XHRjb25zdCBjb3VudHMgPSBzdHViQ291bnQoZGF0YSwgYXJ0aWNsZSk7XG5cdFx0aWYgKGNvdW50cy5yZWFsKSB7XG5cdFx0XHRyZXR1cm4gcG9wdXBTdHJpbmcoJ3N0dWInKTtcblx0XHR9XG5cdFx0aWYgKGNvdW50cy5zZWN0KSB7XG5cdFx0XHRyZXR1cm4gcG9wdXBTdHJpbmcoJ3NlY3Rpb24gc3R1YicpO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyRGlzYW1iaWdEZXRlY3QgPSAoZGF0YSwgX2Rvd25sb2FkLCBhcnRpY2xlKSA9PiB7XG5cdFx0aWYgKCFnZXRWYWx1ZU9mKCdwb3B1cEFsbERhYnNTdHVicycpICYmIGFydGljbGUubmFtZXNwYWNlKCkpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0cmV0dXJuIGlzRGlzYW1iaWcoZGF0YSwgYXJ0aWNsZSkgPyBwb3B1cFN0cmluZygnZGlzYW1iaWcnKSA6ICcnO1xuXHR9O1xuXHRjb25zdCBmb3JtYXRCeXRlcyA9IChudW0pID0+IHtcblx0XHRyZXR1cm4gbnVtID4gOTQ5ID8gTWF0aC5yb3VuZChudW0gLyAxMDApIC8gMTAgKyBwb3B1cFN0cmluZygna0InKSA6IGAke251bX0mbmJzcDske3BvcHVwU3RyaW5nKCdieXRlcycpfWA7XG5cdH07XG5cdC8vIEVOREZJTEU6IHBhZ2VpbmZvLmpzXG5cdC8vIFNUQVJURklMRTogdGl0bGVzLmpzXG5cdC8qKlxuXHQgKiBAZmlsZW92ZXJ2aWV3IERlZmluZXMgdGhlIHtAc291cmNlIFRpdGxlfSBjbGFzcywgYW5kIGFzc29jaWF0ZWQgY3J1ZnR5IGZ1bmN0aW9ucy5cblx0ICpcblx0ICogPGNvZGU+VGl0bGU8L2NvZGU+IGRlYWxzIHdpdGggYXJ0aWNsZSB0aXRsZXMgYW5kIHRoZWlyIHZhcmlvdXNcblx0ICogZm9ybXMuICB7QHNvdXJjZSBTdHJpbmd3cmFwcGVyfSBpcyB0aGUgcGFyZW50IGNsYXNzIG9mXG5cdCAqIDxjb2RlPlRpdGxlPC9jb2RlPiwgd2hpY2ggZXhpc3RzIHNpbXBseSB0byBtYWtlIHRoaW5ncyBhIGxpdHRsZVxuXHQgKiBuZWF0ZXIuXG5cdCAqL1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTdHJpbmd3cmFwcGVyLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICpcblx0ICogQGNsYXNzIHRoZSBTdHJpbmd3cmFwcGVyIGNsYXNzLiBUaGlzIGJhc2UgY2xhc3MgaXMgbm90IHJlYWxseVxuXHQgKiB1c2VmdWwgb24gaXRzIG93bjsgaXQganVzdCB3cmFwcyB2YXJpb3VzIGNvbW1vbiBzdHJpbmcgb3BlcmF0aW9ucy5cblx0ICovXG5cdGNvbnN0IFN0cmluZ3dyYXBwZXIgPSBmdW5jdGlvbiBTdHJpbmd3cmFwcGVyKCkge1xuXHRcdC8qKlxuXHRcdCAqIFdyYXBwZXIgZm9yIHRoaXMudG9TdHJpbmcoKS5pbmRleE9mKClcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB4XG5cdFx0ICogQHR5cGUgaW50ZWdlclxuXHRcdCAqL1xuXHRcdHRoaXMuaW5kZXhPZiA9IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpLmluZGV4T2YoeCk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoaXMudmFsdWUuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHR0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWU7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBXcmFwcGVyIGZvciB7QHNvdXJjZSBTdHJpbmcjcGFyZW5TcGxpdH0gYXBwbGllZCB0byB0aGlzLnRvU3RyaW5nKClcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7UmVnRXhwfSB4XG5cdFx0ICogQHR5cGUgQXJyYXlcblx0XHQgKi9cblx0XHR0aGlzLnNwbGl0ID0gZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoeCk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBXcmFwcGVyIGZvciB0aGlzLnRvU3RyaW5nKCkuc3Vic3RyaW5nKClcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB4XG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHkgKG9wdGlvbmFsKVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdHRoaXMuc3Vic3RyaW5nID0gZnVuY3Rpb24gKHgsIHkpIHtcblx0XHRcdGlmICh5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMudG9TdHJpbmcoKS5zbGljZShNYXRoLm1heCgwLCB4KSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpLnN1YnN0cmluZyh4LCB5KTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIFdyYXBwZXIgZm9yIHRoaXMudG9TdHJpbmcoKS5zcGxpdCgpXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30geFxuXHRcdCAqIEB0eXBlIEFycmF5XG5cdFx0ICovXG5cdFx0dGhpcy5zcGxpdCA9IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpLnNwbGl0KHgpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogV3JhcHBlciBmb3IgdGhpcy50b1N0cmluZygpLnJlcGxhY2UoKVxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHhcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30geVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpLnJlcGxhY2UoeCwgeSk7XG5cdFx0fTtcblx0fTtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgPGNvZGU+VGl0bGU8L2NvZGU+LlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICpcblx0ICogQGNsYXNzIFRoZSBUaXRsZSBjbGFzcy4gSG9sZHMgYXJ0aWNsZSB0aXRsZXMgYW5kIGNvbnZlcnRzIHRoZW0gaW50b1xuXHQgKiB2YXJpb3VzIGZvcm1zLiBBbHNvIGRlYWxzIHdpdGggYW5jaG9ycywgYnkgd2hpY2ggd2UgbWVhbiB0aGUgYml0c1xuXHQgKiBvZiB0aGUgYXJ0aWNsZSBVUkwgYWZ0ZXIgYSAjIGNoYXJhY3RlciwgcmVwcmVzZW50aW5nIGxvY2F0aW9uc1xuXHQgKiB3aXRoaW4gYW4gYXJ0aWNsZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIHRvIGFzc2lnbiB0byB0aGVcblx0ICogYXJ0aWNsZS4gVGhpcyBtdXN0IGJlIHRoZSBjYW5vbmljYWwgdGl0bGUgKHNlZSB7QGxpbmtcblx0ICogVGl0bGUjdmFsdWV9LiBPbWl0IHRoaXMgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCB1c2UgYW5vdGhlciBmdW5jdGlvblxuXHQgKiB0byBzZXQgdGhlIHRpdGxlIGlmIHRoaXMgaXMgdW5hdmFpbGFibGUuXG5cdCAqL1xuXHRjbGFzcyBUaXRsZSBleHRlbmRzIFN0cmluZ3dyYXBwZXIge1xuXHRcdGNvbnN0cnVjdG9yKHZhbCkge1xuXHRcdFx0c3VwZXIoKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIGNhbm9uaWNhbCBhcnRpY2xlIHRpdGxlLiBUaGlzIG11c3QgYmUgaW4gVVRGLTggd2l0aCBub1xuXHRcdFx0ICogZW50aXRpZXMsIGVzY2FwaW5nIG9yIG5hc3RpZXMuIEFsc28sIHVuZGVyc2NvcmVzIHNob3VsZCBiZVxuXHRcdFx0ICogcmVwbGFjZWQgd2l0aCBzcGFjZXMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnZhbHVlID0gbnVsbDtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIGNhbm9uaWNhbCBmb3JtIG9mIHRoZSBhbmNob3IuIFRoaXMgc2hvdWxkIGJlIGV4YWN0bHkgYXNcblx0XHRcdCAqIGl0IGFwcGVhcnMgaW4gdGhlIFVSTCwgaS5lLiB3aXRoIHRoZSAuQzMuMEEgYml0cyBpbi5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5hbmNob3IgPSAnJztcblx0XHRcdHRoaXMuc2V0VXRmKHZhbCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXJ0aWNsZSB0aXRsZSwgb3B0aW9uYWxseSB3aXRob3V0IGFuY2hvci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gb21pdEFuY2hvclxuXHRcdCAqIEBmaXhtZSBEZWNpZGUgc3BlY3MgZm9yIGFuY2hvclxuXHRcdCAqIEByZXR1cm4gU3RyaW5nIFRoZSBhcnRpY2xlIHRpdGxlIGFuZCB0aGUgYW5jaG9yLlxuXHRcdCAqL1xuXHRcdHRvU3RyaW5nKG9taXRBbmNob3IpIHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlICsgKCFvbWl0QW5jaG9yICYmIHRoaXMuYW5jaG9yID8gYCMke3RoaXMuYW5jaG9yU3RyaW5nKCl9YCA6ICcnKTtcblx0XHR9XG5cdFx0YW5jaG9yU3RyaW5nKCkge1xuXHRcdFx0aWYgKCF0aGlzLmFuY2hvcikge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzcGxpdCA9IHRoaXMuYW5jaG9yLnNwbGl0KC8oKD86XFwuW1xcZEEtRl17Mn0pKykvKTtcblx0XHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdGZvciAobGV0IGogPSAxOyBqIDwgbGVuOyBqICs9IDIpIHtcblx0XHRcdFx0Ly8gRklYTUUgcy9kZWNvZGVVUkkvZGVjb2RlVVJJQ29tcG9uZW50L2cgP1xuXHRcdFx0XHR2YWx1ZSA9IHNwbGl0W2pdLnNwbGl0KCcuJykuam9pbignJScpO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Ly8gY2Fubm90IGRlY29kZVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNwbGl0W2pdID0gdmFsdWUuc3BsaXQoJ18nKS5qb2luKCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3BsaXQuam9pbignJyk7XG5cdFx0fVxuXHRcdHVybEFuY2hvcigpIHtcblx0XHRcdGNvbnN0IHNwbGl0ID0gdGhpcy5hbmNob3Iuc3BsaXQoJy8oKD86WyVdWzAtOUEtRl17Mn0pKykvJyk7XG5cdFx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBqID0gMTsgaiA8IGxlbjsgaiArPSAyKSB7XG5cdFx0XHRcdHNwbGl0W2pdID0gc3BsaXRbal0uc3BsaXQoJyUnKS5qb2luKCcuJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3BsaXQuam9pbignJyk7XG5cdFx0fVxuXHRcdGFuY2hvckZyb21VdGYoc3RyKSB7XG5cdFx0XHR0aGlzLmFuY2hvciA9IGVuY29kZVVSSUNvbXBvbmVudChzdHIuc3BsaXQoJyAnKS5qb2luKCdfJykpXG5cdFx0XHRcdC5zcGxpdCgnJTNBJylcblx0XHRcdFx0LmpvaW4oJzonKVxuXHRcdFx0XHQuc3BsaXQoXCInXCIpXG5cdFx0XHRcdC5qb2luKCclMjcnKVxuXHRcdFx0XHQuc3BsaXQoJyUnKVxuXHRcdFx0XHQuam9pbignLicpO1xuXHRcdH1cblx0XHRmcm9tVVJMKGgpIHtcblx0XHRcdGlmICh0eXBlb2YgaCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IG51bGw7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTk9URSA6IHBsYXlpbmcgd2l0aCBkZWNvZGVVUkksIGVuY29kZVVSSSwgZXNjYXBlLCB1bmVzY2FwZSxcblx0XHRcdC8vIHdlIHNlZW0gdG8gYmUgYWJsZSB0byByZXBsaWNhdGUgdGhlIElFIGJvcmtlZCBlbmNvZGluZ1xuXHRcdFx0Ly8gSUUgZG9lc24ndCBkbyB0aGlzIG5ldy1mYW5nbGVkIHV0Zi04IHRoaW5nLlxuXHRcdFx0Ly8gYW5kIGl0J3Mgd29yc2UgdGhhbiB0aGF0LlxuXHRcdFx0Ly8gSUUgc2VlbXMgdG8gdHJlYXQgdGhlIHF1ZXJ5IHN0cmluZyBkaWZmZXJlbnRseSB0byB0aGUgcmVzdCBvZiB0aGUgdXJsXG5cdFx0XHQvLyB0aGUgcXVlcnkgaXMgdHJlYXRlZCBhcyBib25hLWZpZGUgdXRmOCwgYnV0IHRoZSBmaXJzdCBiaXQgb2YgdGhlIHVybCBpcyBwaXNzZWQgYXJvdW5kIHdpdGhcblx0XHRcdC8vIHdlIGZpeCB1cCAmIGZvciBhbGwgYnJvd3NlcnMsIGp1c3QgaW4gY2FzZS5cblx0XHRcdGNvbnN0IHNwbGl0dGVkID0gaC5zcGxpdCgnPycpO1xuXHRcdFx0c3BsaXR0ZWRbMF0gPSBzcGxpdHRlZFswXS5zcGxpdCgnJicpLmpvaW4oJyUyNicpO1xuXHRcdFx0aCA9IHNwbGl0dGVkLmpvaW4oJz8nKTtcblx0XHRcdGNvbnN0IGNvbnRyaWJzID0gcGcucmUuY29udHJpYnMuZXhlYyhoKTtcblx0XHRcdGlmIChjb250cmlicykge1xuXHRcdFx0XHRpZiAoY29udHJpYnNbMV0gPT09ICd0aXRsZT0nKSB7XG5cdFx0XHRcdFx0Y29udHJpYnNbM10gPSBjb250cmlic1szXS5zcGxpdCgnKycpLmpvaW4oJyAnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB1ID0gbmV3IFRpdGxlKGNvbnRyaWJzWzNdKTtcblx0XHRcdFx0dGhpcy5zZXRVdGYoXG5cdFx0XHRcdFx0VGl0bGUuZGVjb2RlTmFzdGllcyhgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc1VzZXJJZF19OiR7dS5zdHJpcE5hbWVzcGFjZSgpfWApXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZW1haWwgPSBwZy5yZS5lbWFpbC5leGVjKGgpO1xuXHRcdFx0aWYgKGVtYWlsKSB7XG5cdFx0XHRcdHRoaXMuc2V0VXRmKFxuXHRcdFx0XHRcdFRpdGxlLmRlY29kZU5hc3RpZXMoXG5cdFx0XHRcdFx0XHRgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc1VzZXJJZF19OiR7bmV3IFRpdGxlKGVtYWlsWzNdKS5zdHJpcE5hbWVzcGFjZSgpfWBcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYmFja2xpbmtzID0gcGcucmUuYmFja2xpbmtzLmV4ZWMoaCk7XG5cdFx0XHRpZiAoYmFja2xpbmtzKSB7XG5cdFx0XHRcdHRoaXMuc2V0VXRmKFRpdGxlLmRlY29kZU5hc3RpZXMobmV3IFRpdGxlKGJhY2tsaW5rc1szXSkpKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0XHQvLyBBIGR1bW15IHRpdGxlIG9iamVjdCBmb3IgYSBTcGVjaWFsOkRpZmYgbGluay5cblx0XHRcdGNvbnN0IHNwZWNpYWxkaWZmID0gcGcucmUuc3BlY2lhbGRpZmYuZXhlYyhoKTtcblx0XHRcdGlmIChzcGVjaWFsZGlmZikge1xuXHRcdFx0XHR0aGlzLnNldFV0Zihcblx0XHRcdFx0XHRUaXRsZS5kZWNvZGVOYXN0aWVzKG5ldyBUaXRsZShgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc1NwZWNpYWxJZF19OkRpZmZgKSlcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0XHQvLyBubyBtb3JlIHNwZWNpYWwgY2FzZXMgdG8gY2hlY2sgLS1cblx0XHRcdC8vIGhvcGVmdWxseSBpdCdzIG5vdCBhIGRpc2d1aXNlZCB1c2VyLXJlbGF0ZWQgb3Igc3BlY2lhbGx5IHRyZWF0ZWQgc3BlY2lhbCBwYWdlXG5cdFx0XHQvLyBJbmNsdWRlcyByZWZlcmVuY2VzXG5cdFx0XHRjb25zdCBtID0gcGcucmUubWFpbi5leGVjKGgpO1xuXHRcdFx0aWYgKG0gPT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IG51bGw7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmcm9tQm90SW50ZXJmYWNlID0gL1xcPyguKyYpP3RpdGxlPS8udGVzdChoKTtcblx0XHRcdFx0aWYgKGZyb21Cb3RJbnRlcmZhY2UpIHtcblx0XHRcdFx0XHRtWzJdID0gbVsyXS5zcGxpdCgnKycpLmpvaW4oJ18nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBleHRyYWN0ZWQgPSBtWzJdICsgKG1bM10gPyBgIyR7bVszXX1gIDogJycpO1xuXHRcdFx0XHRpZiAocGcuZmxhZy5pc1NhZmFyaSAmJiAvJTI1W1xcZEEtRmEtZl17Mn0vLnRlc3QoZXh0cmFjdGVkKSkge1xuXHRcdFx0XHRcdC8vIEZpeCBTYWZhcmkgaXNzdWVcblx0XHRcdFx0XHQvLyBTYWZhcmkgc29tZXRpbWVzIGVuY29kZXMgJSBhcyAlMjUgaW4gVVRGLTggZW5jb2RlZCBzdHJpbmdzIGxpa2UgJUU1JUEzIC0+ICUyNUU1JTI1QTMuXG5cdFx0XHRcdFx0dGhpcy5zZXRVdGYoZGVjb2RlVVJJQ29tcG9uZW50KHVuZXNjYXBlKGV4dHJhY3RlZCkpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnNldFV0ZihUaXRsZS5kZWNvZGVOYXN0aWVzKGV4dHJhY3RlZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0c3RhdGljIGRlY29kZU5hc3RpZXModHh0KSB7XG5cdFx0XHQvLyBteURlY29kZVVSSSB1c2VzIGRlY29kZUV4dHJhcywgd2hpY2ggcmVtb3ZlcyBfLFxuXHRcdFx0Ly8gdGh1cyBydWluaW5nIGNpdGF0aW9ucyBwcmV2aWV3cywgd2hpY2ggYXJlIGZvcm1hdGVkIGFzIFwiY2l0ZV9ub3RlLTFcIlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bGV0IHJldCA9IGRlY29kZVVSSShUaXRsZS5kZWNvZGVFc2NhcGVzKHR4dCkpO1xuXHRcdFx0XHRyZXQgPSByZXQucmVwbGFjZSgvWyBfXSokLywgJycpO1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdHJldHVybiB0eHQ7IC8vIGNhbm5vdCBkZWNvZGVcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gRGVjb2RlIHZhbGlkICUtZW5jb2RpbmdzLCBvdGhlcndpc2UgZXNjYXBlIHRoZW1cblx0XHRzdGF0aWMgZGVjb2RlRXNjYXBlcyh0eHQpIHtcblx0XHRcdGNvbnN0IHNwbGl0ID0gdHh0LnNwbGl0KC8oKD86JVtcXGRBLUZhLWZdezJ9KSspLyk7XG5cdFx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cdFx0XHQvLyBObyAlLWVuY29kZWQgaXRlbXMgZm91bmQsIHNvIHJlcGxhY2UgdGhlIGxpdGVyYWwgJVxuXHRcdFx0aWYgKGxlbiA9PT0gMSkge1xuXHRcdFx0XHRyZXR1cm4gc3BsaXRbMF0ucmVwbGFjZSgvJSg/IVtcXGRBLUZhLWZdezJ9KS9nLCAnJTI1Jyk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGxlbjsgaSArPSAyKSB7XG5cdFx0XHRcdHNwbGl0W2ldID0gZGVjb2RlVVJJQ29tcG9uZW50KHNwbGl0W2ldKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzcGxpdC5qb2luKCcnKTtcblx0XHR9XG5cdFx0ZnJvbUFuY2hvcihhKSB7XG5cdFx0XHRpZiAoIWEpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IG51bGw7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZnJvbVVSTChhLmhyZWYpO1xuXHRcdH1cblx0XHRmcm9tV2lraVRleHQodHh0KSB7XG5cdFx0XHQvLyBGSVhNRSAtIHRlc3RpbmcgbmVlZGVkXG5cdFx0XHR0eHQgPSBteURlY29kZVVSSSh0eHQpO1xuXHRcdFx0dGhpcy5zZXRVdGYodHh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRoaW50VmFsdWUoKSB7XG5cdFx0XHRpZiAoIXRoaXMudmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNhZmVEZWNvZGVVUkkodGhpcy52YWx1ZSk7XG5cdFx0fVxuXHRcdHRvVXNlck5hbWUod2l0aE5zKSB7XG5cdFx0XHRpZiAodGhpcy5uYW1lc3BhY2VJZCgpICE9PSBwZy5uc1VzZXJJZCAmJiB0aGlzLm5hbWVzcGFjZUlkKCkgIT09IHBnLm5zVXNlcnRhbGtJZCkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy52YWx1ZSA9XG5cdFx0XHRcdCh3aXRoTnMgPyBgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc1VzZXJJZF19OmAgOiAnJykgK1xuXHRcdFx0XHR0aGlzLnN0cmlwTmFtZXNwYWNlKCkuc3BsaXQoJy8nKVswXTtcblx0XHR9XG5cdFx0dXNlck5hbWUod2l0aE5zKSB7XG5cdFx0XHRjb25zdCB0ID0gbmV3IFRpdGxlKHRoaXMudmFsdWUpO1xuXHRcdFx0dC50b1VzZXJOYW1lKHdpdGhOcyk7XG5cdFx0XHRpZiAodC52YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHR0b1RhbGtQYWdlKCkge1xuXHRcdFx0Ly8gY29udmVydCBhcnRpY2xlIHRvIGEgdGFsayBwYWdlLCBvciBpZiB3ZSBjYW4ndCwgcmV0dXJuIG51bGxcblx0XHRcdC8vIEluIG90aGVyIHdvcmRzOiByZXR1cm4gbnVsbCBpZiB0aGlzIEFMUkVBRFkgSVMgYSB0YWxrIHBhZ2Vcblx0XHRcdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdGFsayBwYWdlIG90aGVyd2lzZVxuXHRcdFx0Ly9cblx0XHRcdC8vIFBlciB7QGxpbmsgaHR0cHM6Ly93d3cubWVkaWF3aWtpLm9yZy93aWtpL01hbnVhbDpOYW1lc3BhY2UjU3ViamVjdF9hbmRfdGFsa19uYW1lc3BhY2VzfVxuXHRcdFx0Ly8gKiBBbGwgZGlzY3Vzc2lvbiBuYW1lc3BhY2VzIGhhdmUgb2RkLWludGVnZXIgaW5kaWNlc1xuXHRcdFx0Ly8gKiBUaGUgZGlzY3Vzc2lvbiBuYW1lc3BhY2UgaW5kZXggZm9yIGEgc3BlY2lmaWMgbmFtZXNwYWNlIHdpdGggaW5kZXggbiBpcyBuICsgMVxuXHRcdFx0aWYgKHRoaXMudmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VJZCA9IHRoaXMubmFtZXNwYWNlSWQoKTtcblx0XHRcdGlmIChuYW1lc3BhY2VJZCA+PSAwICYmIG5hbWVzcGFjZUlkICUgMiA9PT0gMCkge1xuXHRcdFx0XHQvLyBub24tc3BlY2lhbCBhbmQgc3ViamVjdCBuYW1lc3BhY2Vcblx0XHRcdFx0Y29uc3QgbG9jYWxpemVkTmFtZXNwYWNlID0gbXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbbmFtZXNwYWNlSWQgKyAxXTtcblx0XHRcdFx0aWYgKGxvY2FsaXplZE5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy52YWx1ZSA9XG5cdFx0XHRcdFx0XHRsb2NhbGl6ZWROYW1lc3BhY2UgPT09ICcnXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5zdHJpcE5hbWVzcGFjZSgpXG5cdFx0XHRcdFx0XHRcdDogYCR7bG9jYWxpemVkTmFtZXNwYWNlLnNwbGl0KCcgJykuam9pbignXycpfToke3RoaXMuc3RyaXBOYW1lc3BhY2UoKX1gO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnZhbHVlID0gbnVsbDtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHQvLyBSZXR1cm4gY2Fub25pY2FsLCBsb2NhbGl6ZWQgbmFtZXNwYWNlXG5cdFx0bmFtZXNwYWNlKCkge1xuXHRcdFx0cmV0dXJuIG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3RoaXMubmFtZXNwYWNlSWQoKV07XG5cdFx0fVxuXHRcdG5hbWVzcGFjZUlkKCkge1xuXHRcdFx0Y29uc3QgbiA9IHRoaXMudmFsdWUuaW5kZXhPZignOicpO1xuXHRcdFx0aWYgKG4gPCAwKSB7XG5cdFx0XHRcdHJldHVybiAwOyAvLyBtYWluc3BhY2Vcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hbWVzcGFjZUlkID1cblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKVt0aGlzLnZhbHVlLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKS5zcGxpdCgnICcpLmpvaW4oJ18nKS50b0xvd2VyQ2FzZSgpXTtcblx0XHRcdGlmIChuYW1lc3BhY2VJZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiAwOyAvLyBtYWluc3BhY2Vcblx0XHRcdH1cblx0XHRcdHJldHVybiBuYW1lc3BhY2VJZDtcblx0XHR9XG5cdFx0dGFsa1BhZ2UoKSB7XG5cdFx0XHRjb25zdCB0ID0gbmV3IFRpdGxlKHRoaXMudmFsdWUpO1xuXHRcdFx0dC50b1RhbGtQYWdlKCk7XG5cdFx0XHRpZiAodC52YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRpc1RhbGtQYWdlKCkge1xuXHRcdFx0aWYgKHRoaXMudGFsa1BhZ2UoKSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dG9BcnRpY2xlRnJvbVRhbGtQYWdlKCkge1xuXHRcdFx0Ly8gbGFyZ2VseSBjb3B5L3Bhc3RlIGZyb20gdG9UYWxrUGFnZSBhYm92ZS5cblx0XHRcdGlmICh0aGlzLnZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmFtZXNwYWNlSWQgPSB0aGlzLm5hbWVzcGFjZUlkKCk7XG5cdFx0XHRpZiAobmFtZXNwYWNlSWQgPj0gMCAmJiBuYW1lc3BhY2VJZCAlIDIgPT09IDEpIHtcblx0XHRcdFx0Ly8gbm9uLXNwZWNpYWwgYW5kIHRhbGsgbmFtZXNwYWNlXG5cdFx0XHRcdGNvbnN0IGxvY2FsaXplZE5hbWVzcGFjZSA9IG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW25hbWVzcGFjZUlkIC0gMV07XG5cdFx0XHRcdGlmIChsb2NhbGl6ZWROYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMudmFsdWUgPVxuXHRcdFx0XHRcdFx0bG9jYWxpemVkTmFtZXNwYWNlID09PSAnJ1xuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuc3RyaXBOYW1lc3BhY2UoKVxuXHRcdFx0XHRcdFx0XHQ6IGAke2xvY2FsaXplZE5hbWVzcGFjZS5zcGxpdCgnICcpLmpvaW4oJ18nKX06JHt0aGlzLnN0cmlwTmFtZXNwYWNlKCl9YDtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy52YWx1ZSA9IG51bGw7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0YXJ0aWNsZUZyb21UYWxrUGFnZSgpIHtcblx0XHRcdGNvbnN0IHQgPSBuZXcgVGl0bGUodGhpcy52YWx1ZSk7XG5cdFx0XHR0LnRvQXJ0aWNsZUZyb21UYWxrUGFnZSgpO1xuXHRcdFx0aWYgKHQudmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0YXJ0aWNsZUZyb21UYWxrT3JBcnRpY2xlKCkge1xuXHRcdFx0Y29uc3QgdCA9IG5ldyBUaXRsZSh0aGlzLnZhbHVlKTtcblx0XHRcdGlmICh0LnRvQXJ0aWNsZUZyb21UYWxrUGFnZSgpKSB7XG5cdFx0XHRcdHJldHVybiB0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlzSXBVc2VyKCkge1xuXHRcdFx0cmV0dXJuIHBnLnJlLmlwVXNlci50ZXN0KHRoaXMudXNlck5hbWUoKSk7XG5cdFx0fVxuXHRcdHN0cmlwTmFtZXNwYWNlKCkge1xuXHRcdFx0Ly8gcmV0dXJucyBhIHN0cmluZywgbm90IGEgVGl0bGVcblx0XHRcdGNvbnN0IG4gPSB0aGlzLnZhbHVlLmluZGV4T2YoJzonKTtcblx0XHRcdGlmIChuIDwgMCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hbWVzcGFjZUlkID0gdGhpcy5uYW1lc3BhY2VJZCgpO1xuXHRcdFx0aWYgKG5hbWVzcGFjZUlkID09PSBwZy5uc01haW5zcGFjZUlkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWUuc2xpY2UoTWF0aC5tYXgoMCwgbiArIDEpKTtcblx0XHR9XG5cdFx0c2V0VXRmKHZhbHVlKSB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSAnJztcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYW5jaCA9IHZhbHVlLmluZGV4T2YoJyMnKTtcblx0XHRcdGlmIChhbmNoIDwgMCkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsdWUuc3BsaXQoJ18nKS5qb2luKCcgJyk7XG5cdFx0XHRcdHRoaXMuYW5jaG9yID0gJyc7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBNYXRoLm1heCgwLCBhbmNoKSkuc3BsaXQoJ18nKS5qb2luKCcgJyk7XG5cdFx0XHR0aGlzLmFuY2hvciA9IHZhbHVlLnNsaWNlKE1hdGgubWF4KDAsIGFuY2ggKyAxKSk7XG5cdFx0XHR0aGlzLm5zID0gbnVsbDsgLy8gd2FpdCB1bnRpbCBuYW1lc3BhY2UoKSBpcyBjYWxsZWRcblx0XHR9XG5cdFx0c2V0VXJsKHVybGZyYWcpIHtcblx0XHRcdGNvbnN0IGFuY2ggPSB1cmxmcmFnLmluZGV4T2YoJyMnKTtcblx0XHRcdHRoaXMudmFsdWUgPSBzYWZlRGVjb2RlVVJJKHVybGZyYWcuc2xpY2UoMCwgTWF0aC5tYXgoMCwgYW5jaCkpKTtcblx0XHRcdHRoaXMuYW5jaG9yID0gdGhpcy52YWx1ZS5zbGljZShNYXRoLm1heCgwLCBhbmNoICsgMSkpO1xuXHRcdH1cblx0XHRhcHBlbmQoeCkge1xuXHRcdFx0dGhpcy5zZXRVdGYodGhpcy52YWx1ZSArIHgpO1xuXHRcdH1cblx0XHR1cmxTdHJpbmcoeCkge1xuXHRcdFx0eCB8fD0ge307XG5cdFx0XHRsZXQgdiA9IHRoaXMudG9TdHJpbmcodHJ1ZSk7XG5cdFx0XHRpZiAoIXgub21pdEFuY2hvciAmJiB0aGlzLmFuY2hvcikge1xuXHRcdFx0XHR2ICs9IGAjJHt0aGlzLnVybEFuY2hvcigpfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXgua2VlcFNwYWNlcykge1xuXHRcdFx0XHR2ID0gdi5zcGxpdCgnICcpLmpvaW4oJ18nKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbmNvZGVVUkkodikuc3BsaXQoJyYnKS5qb2luKCclMjYnKS5zcGxpdCgnPycpLmpvaW4oJyUzRicpLnNwbGl0KCcrJykuam9pbignJTJCJyk7XG5cdFx0fVxuXHRcdHJlbW92ZUFuY2hvcigpIHtcblx0XHRcdHJldHVybiBuZXcgVGl0bGUodGhpcy50b1N0cmluZyh0cnVlKSk7XG5cdFx0fVxuXHRcdHRvVXJsKCkge1xuXHRcdFx0cmV0dXJuIHBnLndpa2kudGl0bGViYXNlICsgdGhpcy51cmxTdHJpbmcoKTtcblx0XHR9XG5cdH1cblx0VGl0bGUuZnJvbVVSTCA9IChoKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBUaXRsZSgpLmZyb21VUkwoaCk7XG5cdH07XG5cdFRpdGxlLmZyb21BbmNob3IgPSAoYSkgPT4ge1xuXHRcdHJldHVybiBuZXcgVGl0bGUoKS5mcm9tQW5jaG9yKGEpO1xuXHR9O1xuXHRUaXRsZS5mcm9tV2lraVRleHQgPSAodHh0KSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBUaXRsZSgpLmZyb21XaWtpVGV4dCh0eHQpO1xuXHR9O1xuXHRjb25zdCBwYXJzZVBhcmFtcyA9ICh1cmwpID0+IHtcblx0XHRjb25zdCBzcGVjaWFsRGlmZiA9IHBnLnJlLnNwZWNpYWxkaWZmLmV4ZWModXJsKTtcblx0XHRpZiAoc3BlY2lhbERpZmYpIHtcblx0XHRcdGNvbnN0IHNwbGl0ID0gc3BlY2lhbERpZmZbMV0uc3BsaXQoJy8nKTtcblx0XHRcdGlmIChzcGxpdC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRvbGRpZDogc3BsaXRbMF0sXG5cdFx0XHRcdFx0ZGlmZjogJ3ByZXYnLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmIChzcGxpdC5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRvbGRpZDogc3BsaXRbMF0sXG5cdFx0XHRcdFx0ZGlmZjogc3BsaXRbMV0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHJldCA9IHt9O1xuXHRcdGlmICghdXJsLmluY2x1ZGVzKCc/JykpIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdFt1cmxdID0gdXJsLnNwbGl0KCcjJyk7XG5cdFx0Y29uc3QgcyA9IHVybC5zcGxpdCgnPycpLnNsaWNlKDEpLmpvaW4oJywnKTtcblx0XHRjb25zdCB0ID0gcy5zcGxpdCgnJicpO1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0KSB7XG5cdFx0XHRjb25zdCB6ID0gZWxlbWVudC5zcGxpdCgnPScpO1xuXHRcdFx0ei5wdXNoKG51bGwpO1xuXHRcdFx0WywgcmV0W3pbMF1dXSA9IHo7XG5cdFx0fVxuXHRcdC8vIERpZmYgcmV2aXNpb24gd2l0aCBubyBvbGRpZCBpcyBpbnRlcnByZXRlZCBhcyBhIGRpZmYgdG8gdGhlIHByZXZpb3VzIHJldmlzaW9uIGJ5IE1lZGlhV2lraVxuXHRcdGlmIChyZXQuZGlmZiAmJiByZXQub2xkaWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0Lm9sZGlkID0gJ3ByZXYnO1xuXHRcdH1cblx0XHQvLyBEb2N1bWVudGF0aW9uIHNlZW1zIHRvIHNheSBzb21ldGhpbmcgZGlmZmVyZW50LCBidXQgb2xkaWQgY2FuIGFsc28gYWNjZXB0IHByZXYvbmV4dCwgYW5kXG5cdFx0Ly8gRWNobyBpcyBlbWl0dGluZyBzdWNoIFVSTHMuIFNpbXBsZSBmaXh1cCBkdXJpbmcgcGFyYW1ldGVyIGRlY29kaW5nOlxuXHRcdGlmIChyZXQub2xkaWQgJiYgKHJldC5vbGRpZCA9PT0gJ3ByZXYnIHx8IHJldC5vbGRpZCA9PT0gJ25leHQnIHx8IHJldC5vbGRpZCA9PT0gJ2N1cicpKSB7XG5cdFx0XHRjb25zdCBoZWxwZXIgPSByZXQuZGlmZjtcblx0XHRcdHJldC5kaWZmID0gcmV0Lm9sZGlkO1xuXHRcdFx0cmV0Lm9sZGlkID0gaGVscGVyO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHQvLyAoYSkgbXlEZWNvZGVVUkkgKGZpcnN0IHN0YW5kYXJkIGRlY29kZVVSSSwgdGhlbiBwZy5yZS51cmxOb1BvcHVwKVxuXHQvLyAoYikgY2hhbmdlIHNwYWNlcyB0byB1bmRlcnNjb3Jlc1xuXHQvLyAoYykgZW5jb2RlVVJJIChqdXN0IHRoZSBzdHJhaWdodCBvbmUsIG5vIHBnLnJlLnVybE5vUG9wdXApXG5cdGNvbnN0IG15RGVjb2RlVVJJID0gKHN0cikgPT4ge1xuXHRcdGxldCByZXQ7XG5cdFx0Ly8gRklYTUUgZGVjb2RlVVJJQ29tcG9uZW50Pz9cblx0XHR0cnkge1xuXHRcdFx0cmV0ID0gZGVjb2RlVVJJKHN0ci50b1N0cmluZygpKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBzdHI7XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGcubWlzYy5kZWNvZGVFeHRyYXMubGVuZ3RoOyArK2kpIHtcblx0XHRcdGNvbnN0IHtmcm9tfSA9IHBnLm1pc2MuZGVjb2RlRXh0cmFzW2ldO1xuXHRcdFx0Y29uc3Qge3RvfSA9IHBnLm1pc2MuZGVjb2RlRXh0cmFzW2ldO1xuXHRcdFx0cmV0ID0gcmV0LnNwbGl0KGZyb20pLmpvaW4odG8pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHRjb25zdCBzYWZlRGVjb2RlVVJJID0gKHN0cikgPT4ge1xuXHRcdGNvbnN0IHJldCA9IG15RGVjb2RlVVJJKHN0cik7XG5cdFx0cmV0dXJuIHJldCB8fCBzdHI7XG5cdH07XG5cdC8vIFRFU1RTIC8vXG5cdGNvbnN0IGlzRGlzYW1iaWcgPSAoZGF0YSwgYXJ0aWNsZSkgPT4ge1xuXHRcdGlmICghZ2V0VmFsdWVPZigncG9wdXBBbGxEYWJzU3R1YnMnKSAmJiBhcnRpY2xlLm5hbWVzcGFjZSgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAhYXJ0aWNsZS5pc1RhbGtQYWdlKCkgJiYgcGcucmUuZGlzYW1iaWcudGVzdChkYXRhKTtcblx0fTtcblx0Y29uc3Qgc3R1YkNvdW50ID0gKGRhdGEsIGFydGljbGUpID0+IHtcblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwQWxsRGFic1N0dWJzJykgJiYgYXJ0aWNsZS5uYW1lc3BhY2UoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRsZXQgc2VjdFN0dWIgPSAwO1xuXHRcdGxldCByZWFsU3R1YiA9IDA7XG5cdFx0aWYgKHBnLnJlLnN0dWIudGVzdChkYXRhKSkge1xuXHRcdFx0Y29uc3QgcyA9IGRhdGEuc3BsaXQocGcucmUuc3R1Yik7XG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHMubGVuZ3RoOyBpICs9IDIpIHtcblx0XHRcdFx0aWYgKHNbaV0pIHtcblx0XHRcdFx0XHQrK3NlY3RTdHViO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCsrcmVhbFN0dWI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlYWw6IHJlYWxTdHViLFxuXHRcdFx0c2VjdDogc2VjdFN0dWIsXG5cdFx0fTtcblx0fTtcblx0Y29uc3QgaXNWYWxpZEltYWdlTmFtZSA9IChzdHIpID0+IHtcblx0XHRyZXR1cm4gIXN0ci5pbmNsdWRlcygneycpO1xuXHR9O1xuXHRjb25zdCBpc0luU3RyaXBwYWJsZU5hbWVzcGFjZSA9IChhcnRpY2xlKSA9PiB7XG5cdFx0cmV0dXJuIGFydGljbGUubmFtZXNwYWNlSWQoKSAhPT0gMDtcblx0fTtcblx0Y29uc3QgaXNJbk1haW5OYW1lc3BhY2UgPSAoYXJ0aWNsZSkgPT4ge1xuXHRcdHJldHVybiBhcnRpY2xlLm5hbWVzcGFjZUlkKCkgPT09IDA7XG5cdH07XG5cdGNvbnN0IGFuY2hvckNvbnRhaW5zSW1hZ2UgPSAoYSkgPT4ge1xuXHRcdC8vIGl0ZXJhdGUgb3ZlciBjaGlsZHJlbiBvZiBhbmNob3IgYVxuXHRcdC8vIHNlZSBpZiBhbnkgYXJlIGltYWdlc1xuXHRcdGlmIChhID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGtpZHMgPSBhLmNoaWxkTm9kZXM7XG5cdFx0Zm9yIChjb25zdCBraWQgb2Yga2lkcykge1xuXHRcdFx0aWYgKGtpZC5ub2RlTmFtZSA9PT0gJ0lNRycpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblx0Y29uc3QgaXNQb3B1cExpbmsgPSAoYSkgPT4ge1xuXHRcdC8vIE5CIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBUT0MgbGlua3MgZ2VuZXJhbGx5IHJldHVybiB0cnVlXG5cdFx0Ly8gdGhleSBzaG91bGQgYmUgc3RyaXBwZWQgb3V0IGxhdGVyXG5cdFx0aWYgKCFtYXJrTm9wb3B1cFNwYW5MaW5rcy5kb25lKSB7XG5cdFx0XHRtYXJrTm9wb3B1cFNwYW5MaW5rcygpO1xuXHRcdH1cblx0XHRpZiAoYS5pbk5vcG9wdXBTcGFuKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIEZJWE1FIGlzIHRoaXMgZmFzdGVyIGlubGluZT9cblx0XHRpZiAoYS5vbm1vdXNlZG93biB8fCBhLmdldEF0dHJpYnV0ZSgnbm9wb3B1cCcpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGggPSBhLmhyZWY7XG5cdFx0aWYgKGggPT09IGAke2RvY3VtZW50LmxvY2F0aW9uLmhyZWZ9I2ApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFwZy5yZS5iYXNlbmFtZXMudGVzdChoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIXBnLnJlLnVybE5vUG9wdXAudGVzdChoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQocGcucmUuZW1haWwudGVzdChoKSB8fCBwZy5yZS5jb250cmlicy50ZXN0KGgpIHx8IHBnLnJlLmJhY2tsaW5rcy50ZXN0KGgpIHx8IHBnLnJlLnNwZWNpYWxkaWZmLnRlc3QoaCkpICYmXG5cdFx0XHQhaC5pbmNsdWRlcygnJmxpbWl0PScpXG5cdFx0KTtcblx0fTtcblx0Y29uc3QgbWFya05vcG9wdXBTcGFuTGlua3MgPSBmdW5jdGlvbiBtYXJrTm9wb3B1cFNwYW5MaW5rcygpIHtcblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwT25seUFydGljbGVMaW5rcycpKSB7XG5cdFx0XHRmaXhWZWN0b3JNZW51UG9wdXBzKCk7XG5cdFx0fVxuXHRcdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHRcdGNvbnN0IHMgPSAkYm9keS5maW5kKCcubm9wb3B1cHMnKS50b0FycmF5KCk7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHMpIHtcblx0XHRcdGNvbnN0IGFzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG5cdFx0XHRmb3IgKGNvbnN0IGEgb2YgYXMpIHtcblx0XHRcdFx0YS5pbk5vcG9wdXBTcGFuID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWFya05vcG9wdXBTcGFuTGlua3MuZG9uZSA9IHRydWU7XG5cdH07XG5cdGNvbnN0IGZpeFZlY3Rvck1lbnVQb3B1cHMgPSAoKSA9PiB7XG5cdFx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdFx0JGJvZHkuZmluZCgnbmF2LnZlY3Rvci1tZW51IGgzOmZpcnN0IGE6Zmlyc3QnKS5wcm9wKCdpbk5vcG9wdXBTcGFuJywgdHJ1ZSk7XG5cdH07XG5cdC8vIEVOREZJTEU6IHRpdGxlcy5qc1xuXHQvLyBTVEFSVEZJTEU6IGdldHBhZ2UuanNcblx0Ly8gV2lraS1zcGVjaWZpYyBkb3dubG9hZGluZ1xuXHQvL1xuXHQvLyBTY2hlbWF0aWMgZm9yIGEgZ2V0V2lraSBjYWxsXG5cdC8vXG5cdC8vICAgICAgICAgICAgIGdldFBhZ2VXaXRoQ2FjaGluZ1xuXHQvL1x0XHRcdFx0XHR8XG5cdC8vXHQgICBmYWxzZVx0XHR8XHRcdCAgdHJ1ZVxuXHQvLyBnZXRQYWdlPC1bZmluZFBpY3R1cmVJbkNhY2hlXS0+LW9uQ29tcGxldGUoYSBmYWtlIGRvd25sb2FkKVxuXHQvLyAgIFxcLlxuXHQvL1x0IChhc3luYyktPmFkZFBhZ2VUb0NhY2hlKGRvd25sb2FkKS0+LW9uQ29tcGxldGUoZG93bmxvYWQpXG5cdC8vIGNoZWNrIGNhY2hlIHRvIHNlZSBpZiBwYWdlIGV4aXN0c1xuXHRjb25zdCBnZXRQYWdlV2l0aENhY2hpbmcgPSAodXJsLCBvbkNvbXBsZXRlLCBvd25lcikgPT4ge1xuXHRcdGxvZyhgZ2V0UGFnZVdpdGhDYWNoaW5nLCB1cmw9JHt1cmx9YCk7XG5cdFx0Y29uc3QgaSA9IGZpbmRJblBhZ2VDYWNoZSh1cmwpO1xuXHRcdGxldCBkO1xuXHRcdGlmIChpID4gLTEpIHtcblx0XHRcdGQgPSBmYWtlRG93bmxvYWQoXG5cdFx0XHRcdHVybCxcblx0XHRcdFx0b3duZXIuaWROdW1iZXIsXG5cdFx0XHRcdG9uQ29tcGxldGUsXG5cdFx0XHRcdHBnLmNhY2hlLnBhZ2VzW2ldLmRhdGEsXG5cdFx0XHRcdHBnLmNhY2hlLnBhZ2VzW2ldLmxhc3RNb2RpZmllZCxcblx0XHRcdFx0b3duZXJcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGQgPSBnZXRQYWdlKHVybCwgb25Db21wbGV0ZSwgb3duZXIpO1xuXHRcdFx0aWYgKGQgJiYgb3duZXIgJiYgb3duZXIuYWRkRG93bmxvYWQpIHtcblx0XHRcdFx0b3duZXIuYWRkRG93bmxvYWQoZCk7XG5cdFx0XHRcdGQub3duZXIgPSBvd25lcjtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IGdldFBhZ2UgPSAodXJsLCBvbkNvbXBsZXRlLCBvd25lcikgPT4ge1xuXHRcdGxvZygnZ2V0UGFnZScpO1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gKGQpID0+IHtcblx0XHRcdGlmICghZC5hYm9ydGVkKSB7XG5cdFx0XHRcdGFkZFBhZ2VUb0NhY2hlKGQpO1xuXHRcdFx0XHRvbkNvbXBsZXRlKGQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIHN0YXJ0RG93bmxvYWQodXJsLCBvd25lci5pZE51bWJlciwgY2FsbGJhY2spO1xuXHR9O1xuXHRjb25zdCBmaW5kSW5QYWdlQ2FjaGUgPSAodXJsKSA9PiB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwZy5jYWNoZS5wYWdlcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0aWYgKHVybCA9PT0gcGcuY2FjaGUucGFnZXNbaV0udXJsKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH07XG5cdGNvbnN0IGFkZFBhZ2VUb0NhY2hlID0gKGRvd25sb2FkKSA9PiB7XG5cdFx0bG9nKGBhZGRQYWdlVG9DYWNoZSAke2Rvd25sb2FkLnVybH1gKTtcblx0XHRjb25zdCBwYWdlID0ge1xuXHRcdFx0dXJsOiBkb3dubG9hZC51cmwsXG5cdFx0XHRkYXRhOiBkb3dubG9hZC5kYXRhLFxuXHRcdFx0bGFzdE1vZGlmaWVkOiBkb3dubG9hZC5sYXN0TW9kaWZpZWQsXG5cdFx0fTtcblx0XHRyZXR1cm4gcGcuY2FjaGUucGFnZXMucHVzaChwYWdlKTtcblx0fTtcblx0Ly8gRU5ERklMRTogZ2V0cGFnZS5qc1xuXHQvLyBTVEFSVEZJTEU6IHRvb2xzLmpzXG5cdC8vIElFIG1hZG5lc3Mgd2l0aCBlbmNvZGluZ1xuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly9cblx0Ly8gc3VwcG9zZSB0aHJvdWdob3V0IHRoYXQgdGhlIHBhZ2UgaXMgaW4gdXRmOCwgbGlrZSB3aWtpcGVkaWFcblx0Ly9cblx0Ly8gaWYgYSBpcyBhbiBhbmNob3IgRE9NIGVsZW1lbnQgYW5kIGEuaHJlZiBzaG91bGQgY29uc2lzdCBvZlxuXHQvL1xuXHQvLyBodHRwOi8vaG9zdC5uYW1lLmhlcmUvd2lraS9mb28/YmFyPWJhelxuXHQvL1xuXHQvLyB0aGVuIElFIGdpdmVzIGZvbyBhcyBcImxhdGluMS1lbmNvZGVkXCIgdXRmODsgd2UgaGF2ZSBmb28gPSBkZWNvZGVfdXRmOChkZWNvZGVVUkkoZm9vX2llKSlcblx0Ly8gYnV0IElFIGdpdmVzIGJhcj1iYXogY29ycmVjdGx5IGFzIHBsYWluIHV0Zjhcblx0Ly9cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vXG5cdC8vIElFJ3MgeG1saHR0cCBkb2Vzbid0IHVuZGVyc3RhbmQgdXRmOCB1cmxzLiBIYXZlIHRvIHVzZSBlbmNvZGVVUkkgaGVyZS5cblx0Ly9cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vXG5cdC8vIHN1bW1hdCBlbHNlXG5cdC8vIFNvdXJjZTogaHR0cDovL2FrdHVlbGwuZGUuc2VsZmh0bWwub3JnL2FydGlrZWwvamF2YXNjcmlwdC91dGY4YjY0L3V0ZjguaHRtXG5cdGNvbnN0IGdldEpzT2JqID0gKGpzb24pID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QganNvbl9yZXQgPSBKU09OLnBhcnNlKGpzb24pO1xuXHRcdFx0aWYgKGpzb25fcmV0Lndhcm5pbmdzKSB7XG5cdFx0XHRcdGZvciAobGV0IHcgPSAwOyB3IDwganNvbl9yZXQud2FybmluZ3MubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRpZiAoanNvbl9yZXQud2FybmluZ3Nbd11bJyonXSkge1xuXHRcdFx0XHRcdFx0bG9nKGpzb25fcmV0Lndhcm5pbmdzW3ddWycqJ10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRsb2coanNvbl9yZXQud2FybmluZ3Nbd10ud2FybmluZ3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChqc29uX3JldC5lcnJvcikge1xuXHRcdFx0XHRlcnJsb2coYCR7anNvbl9yZXQuZXJyb3IuY29kZX06ICR7anNvbl9yZXQuZXJyb3IuaW5mb31gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBqc29uX3JldDtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGVycmxvZyhgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBnZXRKc09iaiwganNvbj0ke2pzb259YCk7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGFueUNoaWxkID0gKG9iaikgPT4ge1xuXHRcdGZvciAoY29uc3QgcCBpbiBvYmopIHtcblx0XHRcdGlmICghT2JqZWN0Lmhhc093bihvYmosIHApKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9ialtwXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cdGNvbnN0IHVwY2FzZUZpcnN0ID0gKHN0cikgPT4ge1xuXHRcdGlmICh0eXBlb2Ygc3RyICE9PSB0eXBlb2YgJycgfHwgc3RyID09PSAnJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuXHR9O1xuXHRjb25zdCBmaW5kSW5BcnJheSA9IChhcnIsIGZvbykgPT4ge1xuXHRcdGlmICghYXJyIHx8IGFyci5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0Y29uc3QgbGVuID0gYXJyLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRpZiAoYXJyW2ldID09PSBmb28pIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fTtcblx0Y29uc3QgbmV4dE9uZSA9IChhcnJheSwgdmFsdWUpID0+IHtcblx0XHQvLyBOQiBpZiB0aGUgYXJyYXkgaGFzIHR3byBjb25zZWN1dGl2ZSBlbnRyaWVzIGVxdWFsXG5cdFx0Ly9cdHRoZW4gdGhpcyB3aWxsIGxvb3Agb24gc3VjY2Vzc2l2ZSBjYWxsc1xuXHRcdGNvbnN0IGkgPSBmaW5kSW5BcnJheShhcnJheSwgdmFsdWUpO1xuXHRcdGlmIChpIDwgMCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheVtpICsgMV07XG5cdH07XG5cdGNvbnN0IGxpdGVyYWxpemVSZWdleCA9IChzdHIpID0+IHtcblx0XHRyZXR1cm4gbXcudXRpbC5lc2NhcGVSZWdFeHAoc3RyKTtcblx0fTtcblx0U3RyaW5nLnByb3RvdHlwZS5lbnRpZnkgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gbGV0IHNoeSA9ICcmc2h5Oyc7XG5cdFx0cmV0dXJuIHRoaXMuc3BsaXQoJyYnKVxuXHRcdFx0LmpvaW4oJyZhbXA7Jylcblx0XHRcdC5zcGxpdCgnPCcpXG5cdFx0XHQuam9pbignJmx0OycpXG5cdFx0XHQuc3BsaXQoJz4nKVxuXHRcdFx0LmpvaW4oJyZndDsnIC8qICtzaHkgKi8pXG5cdFx0XHQuc3BsaXQoJ1wiJylcblx0XHRcdC5qb2luKCcmcXVvdDsnKTtcblx0fTtcblx0Ly8gQXJyYXkgZmlsdGVyIGZ1bmN0aW9uXG5cdGNvbnN0IHJlbW92ZU51bGxzID0gKHZhbCkgPT4ge1xuXHRcdHJldHVybiB2YWwgIT09IG51bGw7XG5cdH07XG5cdGNvbnN0IGpvaW5QYXRoID0gKGxpc3QpID0+IHtcblx0XHRyZXR1cm4gbGlzdC5maWx0ZXIocmVtb3ZlTnVsbHMpLmpvaW4oJy8nKTtcblx0fTtcblx0Y29uc3Qgc2ltcGxlUHJpbnRmID0gKHN0ciwgc3VicykgPT4ge1xuXHRcdGlmICghc3RyIHx8ICFzdWJzKSB7XG5cdFx0XHRyZXR1cm4gc3RyO1xuXHRcdH1cblx0XHRjb25zdCByZXQgPSBbXTtcblx0XHRjb25zdCBzID0gc3RyLnNwbGl0KC8oJXN8XFwkXFxkKykvKTtcblx0XHRsZXQgaSA9IDA7XG5cdFx0ZG8ge1xuXHRcdFx0cmV0LnB1c2gocy5zaGlmdCgpKTtcblx0XHRcdGlmIChzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNtZCA9IHMuc2hpZnQoKTtcblx0XHRcdGlmIChjbWQgPT09ICclcycpIHtcblx0XHRcdFx0aWYgKGkgPCBzdWJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJldC5wdXNoKHN1YnNbaV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldC5wdXNoKGNtZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0KytpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgaiA9IE51bWJlci5wYXJzZUludChjbWQucmVwbGFjZSgnJCcsICcnKSwgMTApIC0gMTtcblx0XHRcdFx0aWYgKGogPiAtMSAmJiBqIDwgc3Vicy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXQucHVzaChzdWJzW2pdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXQucHVzaChjbWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSB3aGlsZSAocy5sZW5ndGggPiAwKTtcblx0XHRyZXR1cm4gcmV0LmpvaW4oJycpO1xuXHR9O1xuXHRjb25zdCBpc1N0cmluZyA9ICh4KSA9PiB7XG5cdFx0cmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyB8fCB4IGluc3RhbmNlb2YgU3RyaW5nO1xuXHR9O1xuXHRjb25zdCBpc051bWJlciA9ICh4KSA9PiB7XG5cdFx0cmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB4IGluc3RhbmNlb2YgTnVtYmVyO1xuXHR9O1xuXHRjb25zdCBpc1JlZ0V4cCA9ICh4KSA9PiB7XG5cdFx0cmV0dXJuIHggaW5zdGFuY2VvZiBSZWdFeHA7XG5cdH07XG5cdGNvbnN0IGlzQXJyYXkgPSAoeCkgPT4ge1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KHgpO1xuXHR9O1xuXHRjb25zdCBpc09iamVjdCA9ICh4KSA9PiB7XG5cdFx0cmV0dXJuIHggaW5zdGFuY2VvZiBPYmplY3Q7XG5cdH07XG5cdGNvbnN0IGlzRnVuY3Rpb24gPSAoeCkgPT4ge1xuXHRcdHJldHVybiAhaXNSZWdFeHAoeCkgJiYgKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nIHx8IHggaW5zdGFuY2VvZiBGdW5jdGlvbik7XG5cdH07XG5cdGNvbnN0IHJlcGVhdFN0cmluZyA9IChzLCBtdWx0KSA9PiB7XG5cdFx0bGV0IHJldCA9ICcnO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbXVsdDsgKytpKSB7XG5cdFx0XHRyZXQgKz0gcztcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgemVyb0ZpbGwgPSAocywgbWluKSA9PiB7XG5cdFx0bWluIHx8PSAyO1xuXHRcdGNvbnN0IHQgPSBzLnRvU3RyaW5nKCk7XG5cdFx0cmV0dXJuIHJlcGVhdFN0cmluZygnMCcsIG1pbiAtIHQubGVuZ3RoKSArIHQ7XG5cdH07XG5cdGNvbnN0IG1hcCA9IChmLCBvKSA9PiB7XG5cdFx0aWYgKGlzQXJyYXkobykpIHtcblx0XHRcdHJldHVybiBtYXBfYXJyYXkoZiwgbyk7XG5cdFx0fVxuXHRcdHJldHVybiBtYXBfb2JqZWN0KGYsIG8pO1xuXHR9O1xuXHRjb25zdCBtYXBfYXJyYXkgPSAoZiwgbykgPT4ge1xuXHRcdGNvbnN0IHJldCA9IFtdO1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBvKSB7XG5cdFx0XHRyZXQucHVzaChmKGVsZW1lbnQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgbWFwX29iamVjdCA9IChmLCBvKSA9PiB7XG5cdFx0Y29uc3QgcmV0ID0ge307XG5cdFx0Zm9yIChjb25zdCBpIGluIG8pIHtcblx0XHRcdGlmICghT2JqZWN0Lmhhc093bihvLCBpKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdHJldFtvXSA9IGYob1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdHBnLmVzY2FwZVF1b3Rlc0hUTUwgPSAodGV4dCkgPT4ge1xuXHRcdHJldHVybiB0ZXh0LnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG5cdH07XG5cdHBnLnVuZXNjYXBlUXVvdGVzSFRNTCA9IChodG1sKSA9PiB7XG5cdFx0Ly8gRnJvbSB7QGxpbmsgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzczOTQ3ODd9XG5cdFx0Ly8gVGhpcyBzZWVtcyB0byBiZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgb24gYWxsIG1ham9yIGJyb3dzZXJzIG5vdywgc28gd2Vcblx0XHQvLyBkb24ndCBoYXZlIHRvIG1ha2Ugb3VyIG93biBmdW5jdGlvbi5cblx0XHRjb25zdCB0eHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuXHRcdHR4dC5pbm5lckhUTUwgPSBodG1sO1xuXHRcdHJldHVybiB0eHQudmFsdWU7XG5cdH07XG5cdC8vIEVOREZJTEU6IHRvb2xzLmpzXG5cdC8vIFNUQVJURklMRTogZGFiLmpzXG5cdC8vIERhYi1maXhpbmcgY29kZVxuXHQvL1xuXHRjb25zdCByZXRhcmdldERhYiA9IChuZXdUYXJnZXQsIG9sZFRhcmdldCwgZnJpZW5kbHlDdXJyZW50QXJ0aWNsZU5hbWUsIHRpdGxlVG9FZGl0KSA9PiB7XG5cdFx0bG9nKGByZXRhcmdldERhYjogbmV3VGFyZ2V0PSR7bmV3VGFyZ2V0fSBvbGRUYXJnZXQ9JHtvbGRUYXJnZXR9YCk7XG5cdFx0cmV0dXJuIGNoYW5nZUxpbmtUYXJnZXRMaW5rKHtcblx0XHRcdG5ld1RhcmdldCxcblx0XHRcdHRleHQ6IG5ld1RhcmdldC5zcGxpdCgnICcpLmpvaW4oJyZuYnNwOycpLFxuXHRcdFx0aGludDogdHByaW50ZignZGlzYW1iaWdIaW50JywgW25ld1RhcmdldF0pLFxuXHRcdFx0c3VtbWFyeTogc2ltcGxlUHJpbnRmKGdldFZhbHVlT2YoJ3BvcHVwRml4RGFic1N1bW1hcnknKSwgW2ZyaWVuZGx5Q3VycmVudEFydGljbGVOYW1lLCBuZXdUYXJnZXRdKSxcblx0XHRcdGNsaWNrQnV0dG9uOiBnZXRWYWx1ZU9mKCdwb3B1cERhYnNBdXRvQ2xpY2snKSxcblx0XHRcdG1pbm9yOiB0cnVlLFxuXHRcdFx0b2xkVGFyZ2V0LFxuXHRcdFx0d2F0Y2g6IGdldFZhbHVlT2YoJ3BvcHVwV2F0Y2hEaXNhbWJpZ2dlZFBhZ2VzJyksXG5cdFx0XHR0aXRsZTogdGl0bGVUb0VkaXQsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IGxpc3RMaW5rcyA9ICh3aWtpdGV4dCwgb2xkVGFyZ2V0LCB0aXRsZVRvRWRpdCkgPT4ge1xuXHRcdC8vIG1lZGlhd2lraSBzdHJpcHMgdHJhaWxpbmcgc3BhY2VzLCBzbyB3ZSBkbyB0aGUgc2FtZVxuXHRcdC8vIHRlc3RjYXNlOiB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3cvaW5kZXgucGhwP3RpdGxlPVJhZGlhbCZvbGRpZD05NzM2NTYzM31cblx0XHRjb25zdCByZWcgPSAvXFxbXFxbKFtefF0qPykgKihcXHx8XV0pL2dpO1xuXHRcdGxldCByZXQgPSBbXTtcblx0XHRjb25zdCBzcGxpdHRlZCA9IHdpa2l0ZXh0LnNwbGl0KHJlZyk7XG5cdFx0Ly8gXlthLXpdKyBzaG91bGQgbWF0Y2ggaW50ZXJ3aWtpIGxpbmtzLCBob3BlZnVsbHkgKGNhc2UtaW5zZW5zaXRpdmUpXG5cdFx0Ly8gYW5kIF5bYS16XSogc2hvdWxkIG1hdGNoIHRob3NlIGFuZCBbWzpDYXRlZ29yeS4uLl1dIHN0eWxlIGxpbmtzIHRvb1xuXHRcdGNvbnN0IG9taXRSZWdleCA9IC9eW2Etel0qOnxeW1NzXXBlY2lhbDp8XltJaV1tYWdlfF5bQ2NdYXRlZ29yeS87XG5cdFx0Y29uc3QgZnJpZW5kbHlDdXJyZW50QXJ0aWNsZU5hbWUgPSBvbGRUYXJnZXQudG9TdHJpbmcoKTtcblx0XHRjb25zdCB3aWtQb3MgPSBnZXRWYWx1ZU9mKCdwb3B1cERhYldpa3Rpb25hcnknKTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHNwbGl0dGVkLmxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHRpZiAodHlwZW9mIHNwbGl0dGVkW2ldID09PSB0eXBlb2YgJ3N0cmluZycgJiYgc3BsaXR0ZWRbaV0ubGVuZ3RoID4gMCAmJiAhb21pdFJlZ2V4LnRlc3Qoc3BsaXR0ZWRbaV0pKSB7XG5cdFx0XHRcdHJldC5wdXNoKHJldGFyZ2V0RGFiKHNwbGl0dGVkW2ldLCBvbGRUYXJnZXQsIGZyaWVuZGx5Q3VycmVudEFydGljbGVOYW1lLCB0aXRsZVRvRWRpdCkpO1xuXHRcdFx0fSAvKiBpZiAqL1xuXHRcdH0gLyogZm9yIGxvb3AgKi9cblx0XHRyZXQgPSBybUR1cGVzRnJvbVNvcnRlZExpc3QocmV0LnNvcnQoKSk7XG5cdFx0aWYgKHdpa1Bvcykge1xuXHRcdFx0Y29uc3Qgd2lrVGFyZ2V0ID0gYHdpa3Rpb25hcnk6JHtmcmllbmRseUN1cnJlbnRBcnRpY2xlTmFtZS5yZXBsYWNlKC9eKC4rKVxccytcXChbXildK1xcKVxccyokLywgJyQxJyl9YDtcblx0XHRcdGNvbnN0IG1ldGggPSB3aWtQb3MudG9Mb3dlckNhc2UoKSA9PT0gJ2ZpcnN0JyA/ICd1bnNoaWZ0JyA6ICdwdXNoJztcblx0XHRcdHJldFttZXRoXShyZXRhcmdldERhYih3aWtUYXJnZXQsIG9sZFRhcmdldCwgZnJpZW5kbHlDdXJyZW50QXJ0aWNsZU5hbWUsIHRpdGxlVG9FZGl0KSk7XG5cdFx0fVxuXHRcdHJldC5wdXNoKFxuXHRcdFx0Y2hhbmdlTGlua1RhcmdldExpbmsoe1xuXHRcdFx0XHRuZXdUYXJnZXQ6IG51bGwsXG5cdFx0XHRcdHRleHQ6IHBvcHVwU3RyaW5nKCdyZW1vdmUgdGhpcyBsaW5rJykuc3BsaXQoJyAnKS5qb2luKCcmbmJzcDsnKSxcblx0XHRcdFx0aGludDogcG9wdXBTdHJpbmcoJ3JlbW92ZSBhbGwgbGlua3MgdG8gdGhpcyBkaXNhbWJpZyBwYWdlIGZyb20gdGhpcyBhcnRpY2xlJyksXG5cdFx0XHRcdGNsaWNrQnV0dG9uOiBnZXRWYWx1ZU9mKCdwb3B1cERhYnNBdXRvQ2xpY2snKSxcblx0XHRcdFx0b2xkVGFyZ2V0LFxuXHRcdFx0XHRzdW1tYXJ5OiBzaW1wbGVQcmludGYoZ2V0VmFsdWVPZigncG9wdXBSbURhYkxpbmtTdW1tYXJ5JyksIFtmcmllbmRseUN1cnJlbnRBcnRpY2xlTmFtZV0pLFxuXHRcdFx0XHR3YXRjaDogZ2V0VmFsdWVPZigncG9wdXBXYXRjaERpc2FtYmlnZ2VkUGFnZXMnKSxcblx0XHRcdFx0dGl0bGU6IHRpdGxlVG9FZGl0LFxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IHJtRHVwZXNGcm9tU29ydGVkTGlzdCA9IChsaXN0KSA9PiB7XG5cdFx0Y29uc3QgcmV0ID0gW107XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3QpIHtcblx0XHRcdGlmIChyZXQubGVuZ3RoID09PSAwIHx8IGVsZW1lbnQgIT09IHJldC5hdCgtMSkpIHtcblx0XHRcdFx0cmV0LnB1c2goZWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IG1ha2VGaXhEYWIgPSAoZGF0YSwgbmF2cG9wKSA9PiB7XG5cdFx0Ly8gZ3JhYiB0aXRsZSBmcm9tIHBhcmVudCBwb3B1cCBpZiB0aGVyZSBpcyBvbmU7IGRlZmF1bHQgZXhpc3RzIGluIGNoYW5nZUxpbmtUYXJnZXRMaW5rXG5cdFx0Y29uc3QgdGl0bGVUb0VkaXQgPSBuYXZwb3AucGFyZW50UG9wdXAgJiYgbmF2cG9wLnBhcmVudFBvcHVwLmFydGljbGUudG9TdHJpbmcoKTtcblx0XHRjb25zdCBsaXN0ID0gbGlzdExpbmtzKGRhdGEsIG5hdnBvcC5vcmlnaW5hbEFydGljbGUsIHRpdGxlVG9FZGl0KTtcblx0XHRpZiAobGlzdC5sZW5ndGggPT09IDApIHtcblx0XHRcdGxvZygnbGlzdExpbmtzIHJldHVybmVkIGVtcHR5IGxpc3QnKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRsZXQgaHRtbCA9IGA8aHI+JHtwb3B1cFN0cmluZygnQ2xpY2sgdG8gZGlzYW1iaWd1YXRlIHRoaXMgbGluayB0bzonKX08YnI+YDtcblx0XHRodG1sICs9IGxpc3Quam9pbignLCAnKTtcblx0XHRyZXR1cm4gaHRtbDtcblx0fTtcblx0Y29uc3QgbWFrZUZpeERhYnMgPSAod2lraVRleHQsIG5hdnBvcCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGdldFZhbHVlT2YoJ3BvcHVwRml4RGFicycpICYmXG5cdFx0XHRpc0Rpc2FtYmlnKHdpa2lUZXh0LCBuYXZwb3AuYXJ0aWNsZSkgJiZcblx0XHRcdFRpdGxlLmZyb21VUkwobG9jYXRpb24uaHJlZikubmFtZXNwYWNlSWQoKSAhPT0gcGcubnNTcGVjaWFsSWQgJiZcblx0XHRcdG5hdnBvcC5hcnRpY2xlLnRhbGtQYWdlKClcblx0XHQpIHtcblx0XHRcdHNldFBvcHVwSFRNTChtYWtlRml4RGFiKHdpa2lUZXh0LCBuYXZwb3ApLCAncG9wdXBGaXhEYWInLCBuYXZwb3AuaWROdW1iZXIpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgcG9wdXBSZWRsaW5rSFRNTCA9IChhcnRpY2xlKSA9PiB7XG5cdFx0cmV0dXJuIGNoYW5nZUxpbmtUYXJnZXRMaW5rKHtcblx0XHRcdG5ld1RhcmdldDogbnVsbCxcblx0XHRcdHRleHQ6IHBvcHVwU3RyaW5nKCdyZW1vdmUgdGhpcyBsaW5rJykuc3BsaXQoJyAnKS5qb2luKCcmbmJzcDsnKSxcblx0XHRcdGhpbnQ6IHBvcHVwU3RyaW5nKCdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZScpLFxuXHRcdFx0Y2xpY2tCdXR0b246IGdldFZhbHVlT2YoJ3BvcHVwUmVkbGlua0F1dG9DbGljaycpLFxuXHRcdFx0b2xkVGFyZ2V0OiBhcnRpY2xlLnRvU3RyaW5nKCksXG5cdFx0XHRzdW1tYXJ5OiBzaW1wbGVQcmludGYoZ2V0VmFsdWVPZigncG9wdXBSZWRsaW5rU3VtbWFyeScpLCBbYXJ0aWNsZS50b1N0cmluZygpXSksXG5cdFx0fSk7XG5cdH07XG5cdC8vIEVOREZJTEU6IGRhYi5qc1xuXHQvLyBTVEFSVEZJTEU6IGh0bWxvdXRwdXQuanNcblx0Ly8gdGhpcyBoYXMgdG8gdXNlIGEgdGltZXIgbG9vcCBhcyB3ZSBkb24ndCBrbm93IGlmIHRoZSBET00gZWxlbWVudCBleGlzdHMgd2hlbiB3ZSB3YW50IHRvIHNldCB0aGUgdGV4dFxuXHRjb25zdCBzZXRQb3B1cEhUTUwgPSBmdW5jdGlvbiBzZXRQb3B1cEhUTUwoc3RyLCBlbGVtZW50SWQsIHBvcHVwSWQsIG9uU3VjY2VzcywgYXBwZW5kKSB7XG5cdFx0aWYgKHBvcHVwSWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gY29uc29sZS5lcnJvcignW1BvcHVwc10gcG9wdXBJZCBpcyBub3QgZGVmaW5lZCBpbiBzZXRQb3B1cEhUTUwsIGh0bWw9JytzdHIuc3Vic3RyaW5nKDAsMTAwKSk7XG5cdFx0XHRwb3B1cElkID0gcGcuaWROdW1iZXI7XG5cdFx0fVxuXHRcdGNvbnN0IHBvcHVwRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2VsZW1lbnRJZH0ke3BvcHVwSWR9YCk7XG5cdFx0aWYgKHBvcHVwRWxlbWVudCkge1xuXHRcdFx0aWYgKCFhcHBlbmQpIHtcblx0XHRcdFx0cG9wdXBFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzU3RyaW5nKHN0cikpIHtcblx0XHRcdFx0cG9wdXBFbGVtZW50LmlubmVySFRNTCArPSBzdHI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb3B1cEVsZW1lbnQuYXBwZW5kKHN0cik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob25TdWNjZXNzKSB7XG5cdFx0XHRcdG9uU3VjY2VzcygpO1xuXHRcdFx0fVxuXHRcdFx0c2V0VGltZW91dChjaGVja1BvcHVwUG9zaXRpb24sIDEwMCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluIGluIGEgbGl0dGxlIHdoaWxlLi4uXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRzZXRQb3B1cEhUTUwoc3RyLCBlbGVtZW50SWQsIHBvcHVwSWQsIG9uU3VjY2Vzcyk7XG5cdFx0fSwgNjAwKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblx0Y29uc3Qgc2V0UG9wdXBUcmFpbGVyID0gKHN0ciwgaWQpID0+IHtcblx0XHRyZXR1cm4gc2V0UG9wdXBIVE1MKHN0ciwgJ3BvcHVwRGF0YScsIGlkKTtcblx0fTtcblx0Ly8gYXJncy5uYXZwb3B1cCBpcyBtYW5kYXRvcnlcblx0Ly8gb3B0aW9uYWw6IGFyZ3MucmVkaXIsIGFyZ3MucmVkaXJUYXJnZXRcblx0Ly8gRklYTUU6IHllIGdvZHMsIHRoaXMgaXMgdWdseSBzdHVmZlxuXHRjb25zdCBmaWxsRW1wdHlTcGFucyA9IChhcmdzKSA9PiB7XG5cdFx0Ly8gaWYgcmVkaXIgaXMgcHJlc2VudCBhbmQgdHJ1ZSB0aGVuIHJlZGlyVGFyZ2V0IGlzIG1hbmRhdG9yeVxuXHRcdGxldCByZWRpciA9IHRydWU7XG5cdFx0bGV0IHJjaWQ7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSAnb2JqZWN0JyB8fCBhcmdzLnJlZGlyID09PSB1bmRlZmluZWQgfHwgIWFyZ3MucmVkaXIpIHtcblx0XHRcdHJlZGlyID0gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGEgPSBhcmdzLm5hdnBvcHVwLnBhcmVudEFuY2hvcjtcblx0XHRsZXQgYXJ0aWNsZTtcblx0XHRsZXQgaGludDtcblx0XHRsZXQgb2xkaWQ7XG5cdFx0bGV0IHBhcmFtcyA9IHt9O1xuXHRcdGlmIChyZWRpciAmJiB0eXBlb2YgYXJncy5yZWRpclRhcmdldCA9PT0gdHlwZW9mIHt9KSB7XG5cdFx0XHRhcnRpY2xlID0gYXJncy5yZWRpclRhcmdldDtcblx0XHRcdC8vIGhpbnQ9YXJ0aWNsZS5oaW50VmFsdWUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXJ0aWNsZSA9IG5ldyBUaXRsZSgpLmZyb21BbmNob3IoYSk7XG5cdFx0XHRoaW50ID0gYS5vcmlnaW5hbFRpdGxlIHx8IGFydGljbGUuaGludFZhbHVlKCk7XG5cdFx0XHRwYXJhbXMgPSBwYXJzZVBhcmFtcyhhLmhyZWYpO1xuXHRcdFx0b2xkaWQgPSBnZXRWYWx1ZU9mKCdwb3B1cEhpc3RvcmljYWxMaW5rcycpID8gcGFyYW1zLm9sZGlkIDogbnVsbDtcblx0XHRcdCh7cmNpZH0gPSBwYXJhbXMpO1xuXHRcdH1cblx0XHRjb25zdCB4ID0ge1xuXHRcdFx0YXJ0aWNsZSxcblx0XHRcdGhpbnQsXG5cdFx0XHRvbGRpZCxcblx0XHRcdHJjaWQsXG5cdFx0XHRuYXZwb3A6IGFyZ3MubmF2cG9wdXAsXG5cdFx0XHRwYXJhbXMsXG5cdFx0fTtcblx0XHRjb25zdCBzdHJ1Y3R1cmUgPSBwZy5zdHJ1Y3R1cmVzW2dldFZhbHVlT2YoJ3BvcHVwU3RydWN0dXJlJyldO1xuXHRcdGlmICh0eXBlb2Ygc3RydWN0dXJlICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0c2V0UG9wdXBIVE1MKFxuXHRcdFx0XHQncG9wdXBFcnJvcicsXG5cdFx0XHRcdGBVbmtub3duIHN0cnVjdHVyZSAodGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuKTogJHtwZy5vcHRpb24ucG9wdXBTdHJ1Y3R1cmV9YCxcblx0XHRcdFx0YXJncy5uYXZwb3B1cC5pZE51bWJlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc3BhbnMgPSBmbGF0dGVuKHBnLm1pc2MubGF5b3V0KTtcblx0XHRjb25zdCBudW1zcGFucyA9IHNwYW5zLmxlbmd0aDtcblx0XHRjb25zdCByZWRpcnMgPSBwZy5taXNjLnJlZGlyU3BhbnM7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1zcGFuczsgKytpKSB7XG5cdFx0XHRjb25zdCBmb3VuZCA9IHJlZGlycyAmJiByZWRpcnMuaW5jbHVkZXMoc3BhbnNbaV0pO1xuXHRcdFx0Ly8gbG9nKCdyZWRpcj0nICsgcmVkaXIgKyAnLCBmb3VuZD0nICsgZm91bmQgKyAnLCBzcGFuc1tpXT0nICsgc3BhbnNbaV0pO1xuXHRcdFx0aWYgKChmb3VuZCAmJiAhcmVkaXIpIHx8ICghZm91bmQgJiYgcmVkaXIpKSB7XG5cdFx0XHRcdC8vIGxvZygnc2tpcHBpbmcgdGhpcyBzZXQgb2YgdGhlIGxvb3AnKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdHJ1Y3R1cmVmbiA9IHN0cnVjdHVyZVtzcGFuc1tpXV07XG5cdFx0XHRpZiAoc3RydWN0dXJlZm4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBub3RoaW5nIHRvIGRvIGZvciB0aGlzIHN0cnVjdHVyZSBwYXJ0XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHNldGZuID0gc2V0UG9wdXBIVE1MO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRnZXRWYWx1ZU9mKCdwb3B1cEFjdGl2ZU5hdmxpbmtzJykgJiZcblx0XHRcdFx0KHNwYW5zW2ldLmluZGV4T2YoJ3BvcHVwVG9wTGlua3MnKSA9PT0gMCB8fCBzcGFuc1tpXS5pbmRleE9mKCdwb3B1cFJlZGlyVG9wTGlua3MnKSA9PT0gMClcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRmbiA9IHNldFBvcHVwVGlwc0FuZEhUTUw7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHR5cGVvZiBzdHJ1Y3R1cmVmbikge1xuXHRcdFx0XHRjYXNlICdmdW5jdGlvbic6XG5cdFx0XHRcdFx0bG9nKGBydW5uaW5nICR7c3BhbnNbaV19KHtcblx0XHRcdFx0XHRcdGFydGljbGU6JHt4LmFydGljbGV9LCBoaW50OiR7eC5oaW50fSwgb2xkaWQ6ICR7eC5vbGRpZH19KWApO1xuXHRcdFx0XHRcdHNldGZuKHN0cnVjdHVyZWZuKHgpLCBzcGFuc1tpXSwgYXJncy5uYXZwb3B1cC5pZE51bWJlcik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRcdFx0c2V0Zm4oc3RydWN0dXJlZm4sIHNwYW5zW2ldLCBhcmdzLm5hdnBvcHVwLmlkTnVtYmVyKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRlcnJsb2coYHVua25vd24gdGhpbmcgd2l0aCBsYWJlbCAke3NwYW5zW2ldfSAoc3BhbiBpbmRleCB3YXMgJHtpfSlgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdC8vIGZsYXR0ZW4gYW4gYXJyYXlcblx0Y29uc3QgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4obGlzdCwgc3RhcnQpIHtcblx0XHRjb25zdCByZXQgPSBbXTtcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c3RhcnQgPSAwO1xuXHRcdH1cblx0XHRmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAodHlwZW9mIGxpc3RbaV0gPT09IHR5cGVvZiBbXSkge1xuXHRcdFx0XHRyZXR1cm4gWy4uLnJldCwgLi4uZmxhdHRlbihsaXN0W2ldKSwgLi4uZmxhdHRlbihsaXN0LCBpICsgMSldO1xuXHRcdFx0fVxuXHRcdFx0cmV0LnB1c2gobGlzdFtpXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdC8vIEdlbmVyYXRlIGh0bWwgZm9yIHdob2xlIHBvcHVwXG5cdGNvbnN0IHBvcHVwSFRNTCA9IGZ1bmN0aW9uIHBvcHVwSFRNTChhKSB7XG5cdFx0Z2V0VmFsdWVPZigncG9wdXBTdHJ1Y3R1cmUnKTtcblx0XHRjb25zdCBzdHJ1Y3R1cmUgPSBwZy5zdHJ1Y3R1cmVzW3BnLm9wdGlvbi5wb3B1cFN0cnVjdHVyZV07XG5cdFx0aWYgKHR5cGVvZiBzdHJ1Y3R1cmUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHQvLyByZXR1cm4gJ1Vua25vd24gc3RydWN0dXJlOiAnK3BnLm9wdGlvbi5wb3B1cFN0cnVjdHVyZTtcblx0XHRcdC8vIG92ZXJyaWRlIHVzZXIgY2hvaWNlXG5cdFx0XHRwZy5vcHRpb24ucG9wdXBTdHJ1Y3R1cmUgPSBwZy5vcHRpb25EZWZhdWx0LnBvcHVwU3RydWN0dXJlO1xuXHRcdFx0cmV0dXJuIHBvcHVwSFRNTChhKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzdHJ1Y3R1cmUucG9wdXBMYXlvdXQgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiAnQmFkIGxheW91dCc7XG5cdFx0fVxuXHRcdHBnLm1pc2MubGF5b3V0ID0gc3RydWN0dXJlLnBvcHVwTGF5b3V0KCk7XG5cdFx0cGcubWlzYy5yZWRpclNwYW5zID0gdHlwZW9mIHN0cnVjdHVyZS5wb3B1cFJlZGlyU3BhbnMgPT09ICdmdW5jdGlvbicgPyBzdHJ1Y3R1cmUucG9wdXBSZWRpclNwYW5zKCkgOiBbXTtcblx0XHRyZXR1cm4gbWFrZUVtcHR5U3BhbnMocGcubWlzYy5sYXlvdXQsIGEubmF2cG9wdXApO1xuXHR9O1xuXHRjb25zdCBtYWtlRW1wdHlTcGFucyA9IGZ1bmN0aW9uIG1ha2VFbXB0eVNwYW5zKGxpc3QsIG5hdnBvcCkge1xuXHRcdGxldCByZXQgPSAnJztcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGlzdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBlbGVtZW50ID09PSB0eXBlb2YgJycpIHtcblx0XHRcdFx0cmV0ICs9IGVtcHR5U3BhbkhUTUwoZWxlbWVudCwgbmF2cG9wLmlkTnVtYmVyLCAnZGl2Jyk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSB0eXBlb2YgW10gJiYgZWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldCA9IHJldC5zcGxpdCgvKDxcXC9bXj5dKj8+JCkvKS5qb2luKG1ha2VFbXB0eVNwYW5zKGVsZW1lbnQsIG5hdnBvcCkpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gdHlwZW9mIHt9ICYmIGVsZW1lbnQubm9kZVR5cGUpIHtcblx0XHRcdFx0cmV0ICs9IGVtcHR5U3BhbkhUTUwoZWxlbWVudC5uYW1lLCBuYXZwb3AuaWROdW1iZXIsIGVsZW1lbnQubm9kZVR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHRjb25zdCBlbXB0eVNwYW5IVE1MID0gZnVuY3Rpb24gZW1wdHlTcGFuSFRNTChuYW1lLCBpZCwgdGFnLCBjbGFzc25hbWUpIHtcblx0XHR0YWcgfHw9ICdzcGFuJztcblx0XHRjbGFzc25hbWUgfHw9IGVtcHR5U3BhbkhUTUwuY2xhc3NBbGlhc2VzW25hbWVdO1xuXHRcdGNsYXNzbmFtZSB8fD0gbmFtZTtcblx0XHRpZiAobmFtZSA9PT0gZ2V0VmFsdWVPZigncG9wdXBEcmFnSGFuZGxlJykpIHtcblx0XHRcdGNsYXNzbmFtZSArPSAnIHBvcHVwRHJhZ0hhbmRsZSc7XG5cdFx0fVxuXHRcdHJldHVybiBzaW1wbGVQcmludGYoJzwlcyBpZD1cIiVzXCIgY2xhc3M9XCIlc1wiPjwvJXM+JywgW3RhZywgbmFtZSArIGlkLCBjbGFzc25hbWUsIHRhZ10pO1xuXHR9O1xuXHRlbXB0eVNwYW5IVE1MLmNsYXNzQWxpYXNlcyA9IHtcblx0XHRwb3B1cFNlY29uZFByZXZpZXc6ICdwb3B1cFByZXZpZXcnLFxuXHR9O1xuXHQvLyBnZW5lcmF0ZSBodG1sIGZvciBwb3B1cCBpbWFnZVxuXHQvLyA8YSBpZD1cInBvcHVwSW1hZ2VMaW5rblwiPjxpbWcgaWQ9XCJwb3B1cEltYWdlblwiPlxuXHQvLyB3aGVyZSBuPWlkTnVtYmVyXG5cdGNvbnN0IGltYWdlSFRNTCA9IChfYXJ0aWNsZSwgaWROdW1iZXIpID0+IHtcblx0XHRyZXR1cm4gc2ltcGxlUHJpbnRmKFxuXHRcdFx0JzxhIGlkPVwicG9wdXBJbWFnZUxpbmskMVwiPicgK1xuXHRcdFx0XHQnPGltZyBhbGlnbj1cInJpZ2h0XCIgdmFsaWduPVwidG9wXCIgaWQ9XCJwb3B1cEltZyQxXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj48L2ltZz4nICtcblx0XHRcdFx0JzwvYT4nLFxuXHRcdFx0W2lkTnVtYmVyXVxuXHRcdCk7XG5cdH07XG5cdGNvbnN0IHBvcFRpcHNTb29uRm4gPSAoaWQsIHdoZW4sIHBvcERhdGEpID0+IHtcblx0XHR3aGVuIHx8PSAyNTA7XG5cdFx0Y29uc3QgcG9wVGlwcyA9ICgpID0+IHtcblx0XHRcdHNldHVwVG9vbHRpcHMoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7aWR9YCksIGZhbHNlLCB0cnVlLCBwb3BEYXRhKTtcblx0XHR9O1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRzZXRUaW1lb3V0KHBvcFRpcHMsIHdoZW4sIHBvcERhdGEpO1xuXHRcdH07XG5cdH07XG5cdGNvbnN0IHNldFBvcHVwVGlwc0FuZEhUTUwgPSAoaHRtbCwgZGl2bmFtZSwgaWRudW1iZXIsIHBvcERhdGEpID0+IHtcblx0XHRzZXRQb3B1cEhUTUwoXG5cdFx0XHRodG1sLFxuXHRcdFx0ZGl2bmFtZSxcblx0XHRcdGlkbnVtYmVyLFxuXHRcdFx0Z2V0VmFsdWVPZigncG9wdXBTdWJwb3B1cHMnKSA/IHBvcFRpcHNTb29uRm4oZGl2bmFtZSArIGlkbnVtYmVyLCBudWxsLCBwb3BEYXRhKSA6IG51bGxcblx0XHQpO1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBodG1sb3V0cHV0LmpzXG5cdC8vIFNUQVJURklMRTogbW91c2VvdXQuanNcblx0Ly8gZnV6enkgY2hlY2tzXG5cdGNvbnN0IGZ1enp5Q3Vyc29yT2ZmTWVudXMgPSAoX3gsIF95LCBfZnV6eiwgcGFyZW50KSA9PiB7XG5cdFx0aWYgKCFwYXJlbnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCB1bHMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCgndWwnKTtcblx0XHRmb3IgKGNvbnN0IHVsIG9mIHVscykge1xuXHRcdFx0aWYgKHVsLmNsYXNzTmFtZSA9PT0gJ3BvcHVwX21lbnUnICYmIHVsLm9mZnNldFdpZHRoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IC8vIGVsc2UgeyBkb2N1bWVudC50aXRsZSs9Jy4nOyB9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXHRjb25zdCBjaGVja1BvcHVwUG9zaXRpb24gPSAoKSA9PiB7XG5cdFx0Ly8gc3RvcCB0aGUgcG9wdXAgcnVubmluZyBvZmYgdGhlIHJpZ2h0IG9mIHRoZSBzY3JlZW5cblx0XHQvLyBGSVhNRSBhdm9pZCBwZy5jdXJyZW50Lmxpbmtcblx0XHRpZiAocGcuY3VycmVudC5saW5rICYmIHBnLmN1cnJlbnQubGluay5uYXZwb3B1cCkge1xuXHRcdFx0cGcuY3VycmVudC5saW5rLm5hdnBvcHVwLmxpbWl0SG9yaXpvbnRhbFBvc2l0aW9uKCk7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBtb3VzZU91dFdpa2lMaW5rID0gZnVuY3Rpb24gbW91c2VPdXRXaWtpTGluaygpIHtcblx0XHQvLyBjb25zb2xlICgnbW91c2VPdXRXaWtpTGluaycpO1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHJlbW92ZU1vZGlmaWVyS2V5TGlzdGVuZXIoc2VsZik7XG5cdFx0aWYgKHNlbGYubmF2cG9wdXAgPT09IG51bGwgfHwgc2VsZi5uYXZwb3B1cCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghc2VsZi5uYXZwb3B1cC5pc1Zpc2libGUoKSkge1xuXHRcdFx0c2VsZi5uYXZwb3B1cC5iYW5pc2goKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmVzdG9yZVRpdGxlKHNlbGYpO1xuXHRcdE5hdnBvcHVwLnRyYWNrZXIuYWRkSG9vayhwb3NDaGVja2VySG9vayhzZWxmLm5hdnBvcHVwKSk7XG5cdH07XG5cdGNvbnN0IHBvc0NoZWNrZXJIb29rID0gKG5hdnBvcCkgPT4ge1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRpZiAoIW5hdnBvcC5pc1Zpc2libGUoKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLyogcmVtb3ZlIHRoaXMgaG9vayAqL1xuXHRcdFx0fVxuXHRcdFx0aWYgKE5hdnBvcHVwLnRyYWNrZXIuZGlydHkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qge3h9ID0gTmF2cG9wdXAudHJhY2tlcjtcblx0XHRcdGNvbnN0IHt5fSA9IE5hdnBvcHVwLnRyYWNrZXI7XG5cdFx0XHRjb25zdCBtb3VzZU92ZXJOYXZwb3AgPVxuXHRcdFx0XHRuYXZwb3AuaXNXaXRoaW4oeCwgeSwgbmF2cG9wLmZ1enosIG5hdnBvcC5tYWluRGl2KSB8fFxuXHRcdFx0XHQhZnV6enlDdXJzb3JPZmZNZW51cyh4LCB5LCBuYXZwb3AuZnV6eiwgbmF2cG9wLm1haW5EaXYpO1xuXHRcdFx0Ly8gRklYTUUgaXQnZCBiZSBwcmV0dGllciB0byBkbyB0aGlzIGludGVybmFsIHRvIHRoZSBOYXZwb3B1cCBvYmplY3RzXG5cdFx0XHRsZXQgdCA9IGdldFZhbHVlT2YoJ3BvcHVwSGlkZURlbGF5Jyk7XG5cdFx0XHRpZiAodCkge1xuXHRcdFx0XHR0ICo9IDEwMDA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXQpIHtcblx0XHRcdFx0aWYgKCFtb3VzZU92ZXJOYXZwb3ApIHtcblx0XHRcdFx0XHRpZiAobmF2cG9wLnBhcmVudEFuY2hvcikge1xuXHRcdFx0XHRcdFx0cmVzdG9yZVRpdGxlKG5hdnBvcC5wYXJlbnRBbmNob3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuYXZwb3AuYmFuaXNoKCk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7IC8qIHJlbW92ZSB0aGlzIGhvb2sgKi9cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHQvLyB3ZSBoYXZlIGEgaGlkZSBkZWxheSBzZXRcblx0XHRcdGNvbnN0IGQgPSBEYXRlLm5vdygpO1xuXHRcdFx0aWYgKCFuYXZwb3AubW91c2VMZWF2aW5nVGltZSkge1xuXHRcdFx0XHRuYXZwb3AubW91c2VMZWF2aW5nVGltZSA9IGQ7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChtb3VzZU92ZXJOYXZwb3ApIHtcblx0XHRcdFx0bmF2cG9wLm1vdXNlTGVhdmluZ1RpbWUgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZCAtIG5hdnBvcC5tb3VzZUxlYXZpbmdUaW1lID4gdCkge1xuXHRcdFx0XHRuYXZwb3AubW91c2VMZWF2aW5nVGltZSA9IG51bGw7XG5cdFx0XHRcdG5hdnBvcC5iYW5pc2goKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8qIHJlbW92ZSB0aGlzIGhvb2sgKi9cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHR9O1xuXHRjb25zdCBydW5TdG9wUG9wdXBUaW1lciA9IChuYXZwb3ApID0+IHtcblx0XHQvLyBhdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgaGF2ZSBsZWZ0IHRoZSBsaW5rIGJ1dCByZW1haW4gd2l0aGluIHRoZSBwb3B1cFxuXHRcdC8vIHNvIHdlIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiB1bnRpbCB3ZSBsZWF2ZSB0aGUgcG9wdXAuXG5cdFx0aWYgKCFuYXZwb3Auc3RvcFBvcHVwVGltZXIpIHtcblx0XHRcdG5hdnBvcC5zdG9wUG9wdXBUaW1lciA9IHNldEludGVydmFsKHBvc0NoZWNrZXJIb29rKG5hdnBvcCksIDUwMCk7XG5cdFx0XHRuYXZwb3AuYWRkSG9vayhcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwobmF2cG9wLnN0b3BQb3B1cFRpbWVyKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0J2hpZGUnLFxuXHRcdFx0XHQnYmVmb3JlJ1xuXHRcdFx0KTtcblx0XHR9XG5cdH07XG5cdC8vIEVOREZJTEU6IG1vdXNlb3V0LmpzXG5cdC8vIFNUQVJURklMRTogcHJldmlld21ha2VyLmpzXG5cdC8qKlxuXHQgKiBAZmlsZW92ZXJ2aWV3XG5cdCAqIERlZmluZXMgdGhlIHtAc291cmNlIFByZXZpZXdtYWtlcn0gb2JqZWN0LCB3aGljaCBnZW5lcmF0ZXMgc2hvcnQgcHJldmlld3MgZnJvbSB3aWtpIG1hcmt1cC5cblx0ICovXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFByZXZpZXdtYWtlclxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQGNsYXNzIFRoZSBQcmV2aWV3bWFrZXIgY2xhc3MuIFVzZSBhbiBpbnN0YW5jZSBvZiB0aGlzIHRvIGdlbmVyYXRlIHNob3J0IHByZXZpZXdzIGZyb20gV2lraXRleHQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB3aWtpVGV4dCBUaGUgV2lraXRleHQgc291cmNlIG9mIHRoZSBwYWdlIHdlIHdpc2ggdG8gcHJldmlldy5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVcmwgVGhlIHVybCB3ZSBzaG91bGQgcHJlcGVuZCB3aGVuIGNyZWF0aW5nIHJlbGF0aXZlIHVybHMuXG5cdCAqIEBwYXJhbSB7TmF2cG9wdXB9IG93bmVyIFRoZSBuYXZwb3AgYXNzb2NpYXRlZCB0byB0aGlzIHByZXZpZXcgZ2VuZXJhdG9yXG5cdCAqL1xuXHRjbGFzcyBQcmV2aWV3bWFrZXIge1xuXHRcdGNvbnN0cnVjdG9yKHdpa2lUZXh0LCBiYXNlVXJsLCBvd25lcikge1xuXHRcdFx0LyoqIFRoZSB3aWtpdGV4dCB3aGljaCBpcyBtYW5pcHVsYXRlZCB0byBnZW5lcmF0ZSB0aGUgcHJldmlldy4gKi9cblx0XHRcdHRoaXMub3JpZ2luYWxEYXRhID0gd2lraVRleHQ7XG5cdFx0XHR0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuXHRcdFx0dGhpcy5vd25lciA9IG93bmVyO1xuXHRcdFx0dGhpcy5tYXhDaGFyYWN0ZXJzID0gZ2V0VmFsdWVPZigncG9wdXBNYXhQcmV2aWV3Q2hhcmFjdGVycycpO1xuXHRcdFx0dGhpcy5tYXhTZW50ZW5jZXMgPSBnZXRWYWx1ZU9mKCdwb3B1cE1heFByZXZpZXdTZW50ZW5jZXMnKTtcblx0XHRcdHRoaXMuc2V0RGF0YSgpO1xuXHRcdH1cblx0XHRzZXREYXRhKCkge1xuXHRcdFx0Y29uc3QgbWF4U2l6ZSA9IE1hdGgubWF4KDFlNCwgMiAqIHRoaXMubWF4Q2hhcmFjdGVycyk7XG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YS5zbGljZSgwLCBNYXRoLm1heCgwLCBtYXhTaXplKSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZSBIVE1MIGNvbW1lbnRzXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxDb21tZW50cygpIHtcblx0XHRcdC8vIHRoaXMgYWxzbyBraWxscyBvbmUgdHJhaWxpbmcgbmV3bGluZSwgZWcgW1tkaWFteW9dXVxuXHRcdFx0dGhpcy5kYXRhID0gdGhpcy5kYXRhLnJlcGxhY2UoL148IS0tW14kXSo/LS0+XFxufFxcbjwhLS1bXiRdKj8tLT4oPz1cXG4pfDwhLS1bXiRdKj8tLT4vZywgJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxEaXZzKCkge1xuXHRcdFx0Ly8gc2F5IGdvb2RieWUsIGRpdnMgKGNhbiBiZSBuZXN0ZWQsIHNvIHVzZSAqIG5vdCAqPylcblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKC88ICpkaXZbXj5dKiAqPltcXFNcXHNdKj88ICpcXC8gKmRpdiAqPi9naSwgJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxHYWxsZXJpZXMoKSB7XG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvPCAqZ2FsbGVyeVtePl0qICo+W1xcU1xcc10qPzwgKlxcLyAqZ2FsbGVyeSAqPi9naSwgJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gb3BlbmluZ1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBjbG9zaW5nXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHN1Ym9wZW5pbmdcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc3ViY2xvc2luZ1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSByZXBsXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRraWxsKG9wZW5pbmcsIGNsb3NpbmcsIHN1Ym9wZW5pbmcsIHN1YmNsb3NpbmcsIHJlcGwpIHtcblx0XHRcdGxldCBvbGRrID0gdGhpcy5kYXRhO1xuXHRcdFx0bGV0IGsgPSBQcmV2aWV3bWFrZXIua2lsbFN0dWZmKHRoaXMuZGF0YSwgb3BlbmluZywgY2xvc2luZywgc3Vib3BlbmluZywgc3ViY2xvc2luZywgcmVwbCk7XG5cdFx0XHR3aGlsZSAoay5sZW5ndGggPCBvbGRrLmxlbmd0aCkge1xuXHRcdFx0XHRvbGRrID0gaztcblx0XHRcdFx0ayA9IFByZXZpZXdtYWtlci5raWxsU3R1ZmYoaywgb3BlbmluZywgY2xvc2luZywgc3Vib3BlbmluZywgc3ViY2xvc2luZywgcmVwbCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRhdGEgPSBrO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdHh0XG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IG9wZW5pbmdcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gY2xvc2luZ1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzdWJvcGVuaW5nXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHN1YmNsb3Npbmdcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcmVwbFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0c3RhdGljIGtpbGxTdHVmZih0eHQsIG9wZW5pbmcsIGNsb3NpbmcsIHN1Ym9wZW5pbmcsIHN1YmNsb3NpbmcsIHJlcGwpIHtcblx0XHRcdGNvbnN0IG9wID0gUHJldmlld21ha2VyLm1ha2VSZWdleHAob3BlbmluZyk7XG5cdFx0XHRjb25zdCBjbCA9IFByZXZpZXdtYWtlci5tYWtlUmVnZXhwKGNsb3NpbmcsICdeJyk7XG5cdFx0XHRjb25zdCBzYiA9IHN1Ym9wZW5pbmcgPyBQcmV2aWV3bWFrZXIubWFrZVJlZ2V4cChzdWJvcGVuaW5nLCAnXicpIDogbnVsbDtcblx0XHRcdGNvbnN0IHNjID0gc3ViY2xvc2luZyA/IFByZXZpZXdtYWtlci5tYWtlUmVnZXhwKHN1YmNsb3NpbmcsICdeJykgOiBjbDtcblx0XHRcdGlmICghb3AgfHwgIWNsKSB7XG5cdFx0XHRcdHZvaWQgbXcubm90aWZ5KCdOYXZpZ2F0aW9uIFBvcHVwcyBlcnJvcjogb3Agb3IgY2wgaXMgbnVsbCEgc29tZXRoaW5nIGlzIHdyb25nLicsIHtcblx0XHRcdFx0XHR0YWc6ICdwb3B1cHMnLFxuXHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9wLnRlc3QodHh0KSkge1xuXHRcdFx0XHRyZXR1cm4gdHh0O1xuXHRcdFx0fVxuXHRcdFx0bGV0IHJldCA9ICcnO1xuXHRcdFx0Y29uc3Qgb3BSZXN1bHQgPSBvcC5leGVjKHR4dCk7XG5cdFx0XHRyZXQgPSB0eHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgb3BSZXN1bHQuaW5kZXgpKTtcblx0XHRcdHR4dCA9IHR4dC5zbGljZShNYXRoLm1heCgwLCBvcFJlc3VsdC5pbmRleCArIG9wUmVzdWx0WzBdLmxlbmd0aCkpO1xuXHRcdFx0bGV0IGRlcHRoID0gMTtcblx0XHRcdHdoaWxlICh0eHQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsZXQgcmVtb3ZhbCA9IDA7XG5cdFx0XHRcdGlmIChkZXB0aCA9PT0gMSAmJiBjbC50ZXN0KHR4dCkpIHtcblx0XHRcdFx0XHRkZXB0aC0tO1xuXHRcdFx0XHRcdHJlbW92YWwgPSBjbC5leGVjKHR4dClbMF0ubGVuZ3RoO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGRlcHRoID4gMSAmJiBzYy50ZXN0KHR4dCkpIHtcblx0XHRcdFx0XHRkZXB0aC0tO1xuXHRcdFx0XHRcdHJlbW92YWwgPSBzYy5leGVjKHR4dClbMF0ubGVuZ3RoO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNiICYmIHNiLnRlc3QodHh0KSkge1xuXHRcdFx0XHRcdGRlcHRoKys7XG5cdFx0XHRcdFx0cmVtb3ZhbCA9IHNiLmV4ZWModHh0KVswXS5sZW5ndGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVtb3ZhbCB8fD0gMTtcblx0XHRcdFx0dHh0ID0gdHh0LnNsaWNlKE1hdGgubWF4KDAsIHJlbW92YWwpKTtcblx0XHRcdFx0aWYgKGRlcHRoID09PSAwKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQgKyAocmVwbCB8fCAnJykgKyB0eHQ7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0geFxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcHJlZml4XG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBzdWZmaXhcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHN0YXRpYyBtYWtlUmVnZXhwKHgsIHByZWZpeCwgc3VmZml4KSB7XG5cdFx0XHRwcmVmaXggfHw9ICcnO1xuXHRcdFx0c3VmZml4IHx8PSAnJztcblx0XHRcdGxldCByZVN0ciA9ICcnO1xuXHRcdFx0bGV0IGZsYWdzID0gJyc7XG5cdFx0XHRpZiAoaXNTdHJpbmcoeCkpIHtcblx0XHRcdFx0cmVTdHIgPSBwcmVmaXggKyBsaXRlcmFsaXplUmVnZXgoeCkgKyBzdWZmaXg7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHgpKSB7XG5cdFx0XHRcdGxldCBzID0geC50b1N0cmluZygpLnNsaWNlKDEpO1xuXHRcdFx0XHRjb25zdCBzcCA9IHMuc3BsaXQoJy8nKTtcblx0XHRcdFx0ZmxhZ3MgPSBzcC5hdCgtMSk7XG5cdFx0XHRcdHNwW3NwLmxlbmd0aCAtIDFdID0gJyc7XG5cdFx0XHRcdHMgPSBzcC5qb2luKCcvJyk7XG5cdFx0XHRcdHMgPSBzLnNsaWNlKDAsIE1hdGgubWF4KDAsIHMubGVuZ3RoIC0gMSkpO1xuXHRcdFx0XHRyZVN0ciA9IHByZWZpeCArIHMgKyBzdWZmaXg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2coJ21ha2VSZWdleHAgZmFpbGVkJyk7XG5cdFx0XHR9XG5cdFx0XHRsb2coYG1ha2VSZWdleHA6IGdvdCByZVN0cj0ke3JlU3RyfSwgZmxhZ3M9JHtmbGFnc31gKTtcblx0XHRcdHJldHVybiBuZXcgUmVnRXhwKHJlU3RyLCBmbGFncyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0a2lsbEJveFRlbXBsYXRlcygpIHtcblx0XHRcdC8vIHRheG9ib3ggcmVtb3ZhbC4uLiBpbiBmYWN0LCB0aGVyZSdzIGEgc2F1ZGlwcmluY2Vib3hfYmVnaW4sIHNvIGxldCdzIGJlIG1vcmUgZ2VuZXJhbFxuXHRcdFx0Ly8gYWxzbywgaGF2ZSBmbG9hdF9iZWdpbiwgLi4uIGZsb2F0X2VuZFxuXHRcdFx0dGhpcy5raWxsKC97e1teXFxze3x9XSo/KGZsb2F0fGJveClbIF9dKGJlZ2lufHN0YXJ0KS9pLCAvfX1cXHMqLywgJ3t7Jyk7XG5cdFx0XHQvLyBpbmZvYm94ZXMgZXRjXG5cdFx0XHQvLyBmcm9tIFp5eHc6IGtpbGwgZnJhbWVzIHRvb1xuXHRcdFx0dGhpcy5raWxsKC97e1teXFxze3x9XSo/KGluZm9ib3h8ZWxlbWVudGJveHxmcmFtZSlbIF9dL2ksIC99fVxccyovLCAne3snKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRraWxsVGVtcGxhdGVzKCkge1xuXHRcdFx0dGhpcy5raWxsKCd7eycsICd9fScsICd7JywgJ30nLCAnICcpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxUYWJsZXMoKSB7XG5cdFx0XHQvLyB0YWJsZXMgYXJlIGJhZCwgdG9vXG5cdFx0XHQvLyB0aGlzIGNhbiBiZSBzbG93LCBidXQgaXQncyBhbiBpbnByb3ZlbWVudCBvdmVyIGEgYnJvd3NlciBoYW5nXG5cdFx0XHQvLyB0b3J0dXJlIHRlc3Q6IFtbQ29tcGFyaXNvbl9vZl9JbnRlbF9DZW50cmFsX1Byb2Nlc3NpbmdfVW5pdHNdXVxuXHRcdFx0dGhpcy5raWxsKCd7fCcsIC9cXHx9XFxzKi8sICd7fCcpO1xuXHRcdFx0dGhpcy5raWxsKC88dGFibGUuKj8+L2ksIC88XFwvdGFibGUuKj8+L2ksIC88dGFibGUuKj8+L2kpO1xuXHRcdFx0Ly8gcmVtb3ZlIGxpbmVzIHN0YXJ0aW5nIHdpdGggYSBwaXBlIGZvciB0aGUgaGVsbCBvZiBpdCAoPylcblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKC9eXFx8LiokL2dtLCAnJyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0a2lsbEltYWdlcygpIHtcblx0XHRcdGNvbnN0IGZvcmJpZGRlbk5hbWVzcGFjZUFsaWFzZXMgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgW2xvY2FsaXplZE5hbWVzcGFjZUxjLCBuYW1lc3BhY2VJZF0gb2YgT2JqZWN0LmVudHJpZXMobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKSkpIHtcblx0XHRcdFx0aWYgKG5hbWVzcGFjZUlkICE9PSBwZy5uc0ltYWdlSWQgJiYgbmFtZXNwYWNlSWQgIT09IHBnLm5zQ2F0ZWdvcnlJZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JiaWRkZW5OYW1lc3BhY2VBbGlhc2VzLnB1c2gobG9jYWxpemVkTmFtZXNwYWNlTGMuc3BsaXQoJyAnKS5qb2luKCdbIF9dJykpOyAvLyB0b2RvOiBlc2NhcGUgcmVnZXhwIGZyYWdtZW50cyFcblx0XHRcdH1cblx0XHRcdC8vIGltYWdlcyBhbmQgY2F0ZWdvcmllcyBhcmUgYSBub25vXG5cdFx0XHR0aGlzLmtpbGwobmV3IFJlZ0V4cChgW1tdW1tdXFxcXHMqKCR7Zm9yYmlkZGVuTmFtZXNwYWNlQWxpYXNlcy5qb2luKCd8Jyl9KVxcXFxzKjpgLCAnaScpLCAvXV1cXHMqLywgJ1snLCAnXScpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxIVE1MKCkge1xuXHRcdFx0Ly8ga2lsbCA8cmVmIC4uLj4uLi48L3JlZj5cblx0XHRcdHRoaXMua2lsbCgvPHJlZlxcYlteLz5dKj8+L2ksIC88XFwvcmVmPi9pKTtcblx0XHRcdC8vIGxldCdzIGFsc28gZGVsZXRlIGVudGlyZSBsaW5lcyBzdGFydGluZyB3aXRoIDwuIGl0J3Mgd29ydGggYSB0cnkuXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvKF58XFxuKSAqPC4qL2csICdcXG4nKTtcblx0XHRcdC8vIGFuZCB0aG9zZSBwZXNreSBodG1sIHRhZ3MsIGJ1dCBub3Qgbm93aWtpIG9yIGJsb2NrcXVvdGUgdGFnc1xuXHRcdFx0Y29uc3Qgc3BsaXR0ZWQgPSB0aGlzLmRhdGEuc3BsaXQoLyg8W1xcV1xcd10qPyg/Oj58JHwoPz08KSkpLyk7XG5cdFx0XHRjb25zdCBsZW4gPSBzcGxpdHRlZC5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGxlbjsgaSArPSAyKSB7XG5cdFx0XHRcdHN3aXRjaCAoc3BsaXR0ZWRbaV0pIHtcblx0XHRcdFx0XHRjYXNlICc8bm8nLmNvbmNhdCgnd2lraScsICc+Jyk6XG5cdFx0XHRcdFx0Y2FzZSAnPC9ubycuY29uY2F0KCd3aWtpJywgJz4nKTpcblx0XHRcdFx0XHRjYXNlICc8YmxvY2snLmNvbmNhdCgncXVvdGUnLCAnPicpOlxuXHRcdFx0XHRcdGNhc2UgJzwvYmxvY2snLmNvbmNhdCgncXVvdGUnLCAnPicpOlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHNwbGl0dGVkW2ldID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZGF0YSA9IHNwbGl0dGVkLmpvaW4oJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxDaHVua3MoKSB7XG5cdFx0XHQvLyBoZXVyaXN0aWNzIGFsZXJ0XG5cdFx0XHQvLyBjaHVua3Mgb2YgaXRhbGljIHRleHQ/IHlvdSBjcmF6eSwgbWFuP1xuXHRcdFx0Y29uc3QgaXRhbGljQ2h1bmtSZWdleCA9IC8oKF58XFxuKVxccyo6KlxccyonJ1teJ10oW14nXXwnJyd8J1teJ10pezIwfSgufFxcblteXFxuXSkqJydbXFxzIS4/XSpcXG4pKy9nO1xuXHRcdFx0Ly8ga2VlcCBzdHVmZiBzZXBhcmF0ZWQsIHRob3VnaCwgc28gc3RpY2sgaW4gXFxuIChmaXhlcyBbW1VuaW9uIEphY2tdXT9cblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKGl0YWxpY0NodW5rUmVnZXgsICdcXG4nKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRtb3B1cCgpIHtcblx0XHRcdC8vIHdlIHNpbXBseSAqY2FuJ3QqIGJlIGRvaW5nIHdpdGggaG9yaXpvbnRhbCBydWxlcyByaWdodCBub3dcblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKC9eLXs0LH0vZ20sICcnKTtcblx0XHRcdC8vIG5vIGluZGVudGVkIGxpbmVzXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvKF58XFxuKSAqOlteXFxuXSovZywgJycpO1xuXHRcdFx0Ly8gcmVwbGFjZSBfX1RPQ19fLCBfX05PVE9DX18gYW5kIHdoYXRldmVyIGVsc2UgdGhlcmUgaXNcblx0XHRcdC8vIHRoaXMnbGwgcHJvYmFibHkgZG9cblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKC9eX19bX2Etel0qX18gKiQvZ2ltLCAnJyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0Zmlyc3RCaXQoKSB7XG5cdFx0XHQvLyBkb250J3QgYmUgZ2l2aW4nIG1lIG5vIHN1YnNlcXVlbnQgcGFyYWdyYXBocywgeW91IGhlYXIgbWU/XG5cdFx0XHQvLyAvIGZpcnN0IHdlIFwibm9ybWFsaXplXCIgc2VjdGlvbiBoZWFkaW5ncywgcmVtb3Zpbmcgd2hpdGVzcGFjZSBhZnRlciwgYWRkaW5nIGJlZm9yZVxuXHRcdFx0bGV0IGQgPSB0aGlzLmRhdGE7XG5cdFx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBQcmV2aWV3Q3V0SGVhZGluZ3MnKSkge1xuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvXFxzKig9PStbXj1dKj09KylcXHMqL2csICdcXG5cXG4kMSAnKTtcblx0XHRcdFx0Ly8gLyB0aGVuIHdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBwYXJhZ3JhcGggYnJlYWtzIHdob3NlIHRleHQgZW5kcyBiYWRseVxuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvKFs6O10pICpcXG57Mix9L2csICckMVxcbicpO1xuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvXlxccyovLCAnJyk7XG5cdFx0XHRcdGNvbnN0IHN0dWZmID0gL14oW15cXG5dfFxcblxcUykqLy5leGVjKHRoaXMuZGF0YSk7XG5cdFx0XHRcdGlmIChzdHVmZikge1xuXHRcdFx0XHRcdFtkXSA9IHN0dWZmO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghZ2V0VmFsdWVPZigncG9wdXBQcmV2aWV3Rmlyc3RQYXJPbmx5JykpIHtcblx0XHRcdFx0XHRkID0gdGhpcy5kYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIC8gbm93IHB1dCBcXG5cXG4gYWZ0ZXIgc2VjdGlvbnMgc28gdGhhdCBidWxsZXRzIGFuZCBudW1iZXJlZCBsaXN0cyB3b3JrXG5cdFx0XHRcdGQgPSBkLnJlcGxhY2UoLyg9PStbXj1dKj09KylcXHMqL2csICckMVxcblxcbicpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU3BsaXQgc2VudGVuY2VzLiBTdXBlcmZsdW91cyBzZW50ZW5jZXMgYXJlIFJJR0hUIE9VVC5cblx0XHRcdC8vIG5vdGU6IGV4YWN0bHkgMSBzZXQgb2YgcGFyZW5zIGhlcmUgbmVlZGVkIHRvIG1ha2UgdGhlIHNsaWNlIHdvcmtcblx0XHRcdGQgPSBkLnNwbGl0KC8oWyEuP10rW1wiJ10qXFxzKS9nKTtcblx0XHRcdC8vIGxlYWRpbmcgc3BhY2UgaXMgYmFkLCBtbWtheT9cblx0XHRcdGRbMF0gPSBkWzBdLnJlcGxhY2UoL15cXHMqLywgJycpO1xuXHRcdFx0Y29uc3Qgbm90U2VudGVuY2VFbmRzID0gLyhbXi5dW2Etel1cXC4gKlthLXpdfGV0Y3xzaWN8ZHJ8bXJ8bXJzfG1zfHN0fG5vfG9wfGNpdHxcXFtbXlxcXV0qfFxcc1thLXpdKSQvaTtcblx0XHRcdGQgPSB0aGlzLmZpeFNlbnRlbmNlRW5kcyhkLCBub3RTZW50ZW5jZUVuZHMpO1xuXHRcdFx0dGhpcy5mdWxsTGVuZ3RoID0gZC5qb2luKCcnKS5sZW5ndGg7XG5cdFx0XHRsZXQgbiA9IHRoaXMubWF4U2VudGVuY2VzO1xuXHRcdFx0bGV0IGRkID0gUHJldmlld21ha2VyLmZpcnN0U2VudGVuY2VzKGQsIG4pO1xuXHRcdFx0ZG8ge1xuXHRcdFx0XHRkZCA9IFByZXZpZXdtYWtlci5maXJzdFNlbnRlbmNlcyhkLCBuKTtcblx0XHRcdFx0LS1uO1xuXHRcdFx0fSB3aGlsZSAoZGQubGVuZ3RoID4gdGhpcy5tYXhDaGFyYWN0ZXJzICYmIG4gIT09IDApO1xuXHRcdFx0dGhpcy5kYXRhID0gZGQ7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJzXG5cdFx0ICogQHBhcmFtIHtSZWdFeHB9IHJlZ1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0Zml4U2VudGVuY2VFbmRzKHN0cnMsIHJlZykge1xuXHRcdFx0Ly8gdGFrZSBhbiBhcnJheSBvZiBzdHJpbmdzLCBzdHJzXG5cdFx0XHQvLyBqb2luIHN0cnNbaV0gdG8gc3Ryc1tpKzFdICYgc3Ryc1tpKzJdIGlmIHN0cnNbaV0gbWF0Y2hlcyByZWdleCByZWdcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3Rycy5sZW5ndGggLSAyOyArK2kpIHtcblx0XHRcdFx0aWYgKHJlZy50ZXN0KHN0cnNbaV0pKSB7XG5cdFx0XHRcdFx0Y29uc3QgYSA9IFtdO1xuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgc3Rycy5sZW5ndGg7ICsraikge1xuXHRcdFx0XHRcdFx0aWYgKGogPCBpKSB7XG5cdFx0XHRcdFx0XHRcdGFbal0gPSBzdHJzW2pdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGogPT09IGkpIHtcblx0XHRcdFx0XHRcdFx0YVtpXSA9IHN0cnNbaV0gKyBzdHJzW2kgKyAxXSArIHN0cnNbaSArIDJdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGogPiBpICsgMikge1xuXHRcdFx0XHRcdFx0XHRhW2ogLSAyXSA9IHN0cnNbal07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmZpeFNlbnRlbmNlRW5kcyhhLCByZWcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3Rycztcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmdbXX0gc3Ryc1xuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBob3dtYW55XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRzdGF0aWMgZmlyc3RTZW50ZW5jZXMoc3RycywgaG93bWFueSkge1xuXHRcdFx0Y29uc3QgdCA9IHN0cnMuc2xpY2UoMCwgMiAqIGhvd21hbnkpO1xuXHRcdFx0cmV0dXJuIHQuam9pbignJyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0a2lsbEJhZFdoaXRlc3BhY2UoKSB7XG5cdFx0XHQvLyBhbHNvIGNsZWFucyB1cCBpc29sYXRlZCAnJycnXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvXiAqJysgKiQvZ20sICcnKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUnVucyB0aGUgdmFyaW91cyBtZXRob2RzIHRvIGdlbmVyYXRlIHRoZSBwcmV2aWV3LlxuXHRcdCAqIFRoZSBwcmV2aWV3IGlzIHN0b3JlZCBpbiB0aGUgPGNvZGU+aHRtbDwvaHRtbD4gZmllbGQuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdG1ha2VQcmV2aWV3KCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLm93bmVyLmFydGljbGUubmFtZXNwYWNlSWQoKSAhPT0gcGcubnNUZW1wbGF0ZUlkICYmXG5cdFx0XHRcdHRoaXMub3duZXIuYXJ0aWNsZS5uYW1lc3BhY2VJZCgpICE9PSBwZy5uc0ltYWdlSWRcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmtpbGxDb21tZW50cygpO1xuXHRcdFx0XHR0aGlzLmtpbGxEaXZzKCk7XG5cdFx0XHRcdHRoaXMua2lsbEdhbGxlcmllcygpO1xuXHRcdFx0XHR0aGlzLmtpbGxCb3hUZW1wbGF0ZXMoKTtcblx0XHRcdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwUHJldmlld0tpbGxUZW1wbGF0ZXMnKSkge1xuXHRcdFx0XHRcdHRoaXMua2lsbFRlbXBsYXRlcygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMua2lsbE11bHRpbGluZVRlbXBsYXRlcygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMua2lsbFRhYmxlcygpO1xuXHRcdFx0XHR0aGlzLmtpbGxJbWFnZXMoKTtcblx0XHRcdFx0dGhpcy5raWxsSFRNTCgpO1xuXHRcdFx0XHR0aGlzLmtpbGxDaHVua3MoKTtcblx0XHRcdFx0dGhpcy5tb3B1cCgpO1xuXHRcdFx0XHR0aGlzLmZpcnN0Qml0KCk7XG5cdFx0XHRcdHRoaXMua2lsbEJhZFdoaXRlc3BhY2UoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMua2lsbEhUTUwoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaHRtbCA9IHdpa2kyaHRtbCh0aGlzLmRhdGEsIHRoaXMuYmFzZVVybCk7IC8vIG5lZWRzIGxpdmVwcmV2aWV3XG5cdFx0XHR0aGlzLmZpeEhUTUwoKTtcblx0XHRcdHRoaXMuc3RyaXBMb25nVGVtcGxhdGVzKCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRzdGF0aWMgZXNXaWtpMkh0bWxQYXJ0KGRhdGEpIHtcblx0XHRcdGNvbnN0IHJlTGlua3MgPSAvKD86XFxbXFxbKFteXFxdfF0qKSg/OlxcfChbXlxcXXxdKikpKl1dKFthLXpdKikpL2dpOyAvLyBtYXRjaCBhIHdpa2lsaW5rXG5cdFx0XHRyZUxpbmtzLmxhc3RJbmRleCA9IDA7IC8vIHJlc2V0IHJlZ2V4XG5cdFx0XHRsZXQgbWF0Y2g7XG5cdFx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0XHRsZXQgcG9zdGZpeEluZGV4ID0gMDtcblx0XHRcdHdoaWxlICgobWF0Y2ggPSByZUxpbmtzLmV4ZWMoZGF0YSkpICE9PSBudWxsKSB7XG5cdFx0XHRcdC8vIG1hdGNoIGFsbCB3aWtpbGlua3Ncblx0XHRcdFx0Ly8gRklYTUU6IHRoZSB3YXkgdGhhdCBsaW5rIGlzIGJ1aWx0IGhlcmUgaXNuJ3QgcGVyZmVjdC4gSXQgaXMgY2xpY2thYmxlLCBidXQgcG9wdXBzIHByZXZpZXcgd29uJ3QgcmVjb2duaXplIGl0IGluIHNvbWUgY2FzZXMuXG5cdFx0XHRcdHJlc3VsdCArPSBgJHtwZy5lc2NhcGVRdW90ZXNIVE1MKGRhdGEuc3Vic3RyaW5nKHBvc3RmaXhJbmRleCwgbWF0Y2guaW5kZXgpKX08YSBocmVmPVwiJHtcblx0XHRcdFx0XHRJbnN0YS5jb25mLnBhdGhzLmFydGljbGVzXG5cdFx0XHRcdH0ke3BnLmVzY2FwZVF1b3Rlc0hUTUwobWF0Y2hbMV0pfVwiPiR7cGcuZXNjYXBlUXVvdGVzSFRNTCgobWF0Y2hbMl0gPz8gbWF0Y2hbMV0pICsgbWF0Y2hbM10pfTwvYT5gO1xuXHRcdFx0XHRwb3N0Zml4SW5kZXggPSByZUxpbmtzLmxhc3RJbmRleDtcblx0XHRcdH1cblx0XHRcdC8vIGFwcGVuZCB0aGUgcmVzdFxuXHRcdFx0cmVzdWx0ICs9IHBnLmVzY2FwZVF1b3Rlc0hUTUwoZGF0YS5zbGljZShNYXRoLm1heCgwLCBwb3N0Zml4SW5kZXgpKSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0XHRlZGl0U3VtbWFyeVByZXZpZXcoKSB7XG5cdFx0XHRjb25zdCByZUFlcyA9IC9cXC9cXCogKiguKj8pICpcXCpcXC8vZzsgLy8gbWF0Y2ggdGhlIGZpcnN0IHNlY3Rpb24gbWFya2VyXG5cdFx0XHRyZUFlcy5sYXN0SW5kZXggPSAwOyAvLyByZXNldCByZWdleFxuXHRcdFx0Y29uc3QgbWF0Y2ggPSByZUFlcy5leGVjKHRoaXMuZGF0YSk7XG5cdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0Ly8gd2UgaGF2ZSBhIHNlY3Rpb24gbGluay4gU3BsaXQgaXQsIHByb2Nlc3MgaXQsIGNvbWJpbmUgaXQuXG5cdFx0XHRcdGNvbnN0IHByZWZpeCA9IHRoaXMuZGF0YS5zbGljZSgwLCBNYXRoLm1heCgwLCBtYXRjaC5pbmRleCAtIDEpKTtcblx0XHRcdFx0Y29uc3QgWywgc2VjdGlvbl0gPSBtYXRjaDtcblx0XHRcdFx0Y29uc3QgcG9zdGZpeCA9IHRoaXMuZGF0YS5zbGljZShNYXRoLm1heCgwLCByZUFlcy5sYXN0SW5kZXgpKTtcblx0XHRcdFx0bGV0IHN0YXJ0ID0gXCI8c3BhbiBjbGFzcz0nYXV0b2NvbW1lbnQnPlwiO1xuXHRcdFx0XHRsZXQgZW5kID0gJzwvc3Bhbj4nO1xuXHRcdFx0XHRpZiAocHJlZml4Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzdGFydCA9IGAke1ByZXZpZXdtYWtlci5lc1dpa2kySHRtbFBhcnQocHJlZml4KX0gJHtzdGFydH0tIGA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHBvc3RmaXgubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGVuZCA9IGA6ICR7ZW5kfSR7UHJldmlld21ha2VyLmVzV2lraTJIdG1sUGFydChwb3N0Zml4KX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHQgPSBuZXcgVGl0bGUoKS5mcm9tVVJMKHRoaXMuYmFzZVVybCk7XG5cdFx0XHRcdHQuYW5jaG9yRnJvbVV0ZihzZWN0aW9uKTtcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbkxpbmsgPSBgJHtcblx0XHRcdFx0XHRJbnN0YS5jb25mLnBhdGhzLmFydGljbGVzICsgcGcuZXNjYXBlUXVvdGVzSFRNTCh0LnRvU3RyaW5nKHRydWUpKVxuXHRcdFx0XHR9IyR7cGcuZXNjYXBlUXVvdGVzSFRNTCh0LmFuY2hvcil9YDtcblx0XHRcdFx0cmV0dXJuIGAke3N0YXJ0fTxhIGhyZWY9XCIke3NlY3Rpb25MaW5rfVwiPiZyYXJyOzwvYT4gJHtwZy5lc2NhcGVRdW90ZXNIVE1MKHNlY3Rpb24pfSR7ZW5kfWA7XG5cdFx0XHR9XG5cdFx0XHQvLyBlbHNlIHRoZXJlJ3Mgbm8gc2VjdGlvbiBsaW5rLCBodG1saWZ5IHRoZSB3aG9sZSB0aGluZy5cblx0XHRcdHJldHVybiBQcmV2aWV3bWFrZXIuZXNXaWtpMkh0bWxQYXJ0KHRoaXMuZGF0YSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFdvcmtzIGFyb3VuZCBsaXZlcHJldmlldyBidWdzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRmaXhIVE1MKCkge1xuXHRcdFx0aWYgKCF0aGlzLmh0bWwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHJldCA9IHRoaXMuaHRtbDtcblx0XHRcdC8vIGZpeCBxdWVzdGlvbiBtYXJrcyBpbiB3aWtpIGxpbmtzXG5cdFx0XHQvLyBtYXliZSB0aGlzJ2xsIGJyZWFrIHNvbWUgc3R1ZmYgOi0oXG5cdFx0XHRyZXQgPSByZXQucmVwbGFjZShuZXcgUmVnRXhwKGAoPGEgaHJlZj1cIiR7cGcud2lraS5hcnRpY2xlUGF0aH0vW15cIl0qKVs/XSguKj9cIilgLCAnZycpLCAnJDElM0YkMicpO1xuXHRcdFx0cmV0ID0gcmV0LnJlcGxhY2UobmV3IFJlZ0V4cChgKDxhIGhyZWY9JyR7cGcud2lraS5hcnRpY2xlUGF0aH0vW14nXSopWz9dKC4qPycpYCwgJ2cnKSwgJyQxJTNGJDInKTtcblx0XHRcdC8vIEZJWE1FIGZpeCB1cCAlIHRvb1xuXHRcdFx0dGhpcy5odG1sID0gcmV0O1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBHZW5lcmF0ZXMgdGhlIHByZXZpZXcgYW5kIGRpc3BsYXlzIGl0IGluIHRoZSBjdXJyZW50IHBvcHVwLlxuXHRcdCAqIERvZXMgbm90aGluZyBpZiB0aGUgZ2VuZXJhdGVkIHByZXZpZXcgaXMgaW52YWxpZCBvciBjb25zaXN0cyBvZiB3aGl0ZXNwYWNlIG9ubHkuXG5cdFx0ICogQWxzbyBhY3RpdmF0ZXMgd2lraWxpbmtzIGluIHRoZSBwcmV2aWV3IGZvciBzdWJwb3B1cHMgaWYgdGhlIHBvcHVwU3VicG9wdXBzIG9wdGlvbiBpcyB0cnVlLlxuXHRcdCAqL1xuXHRcdHNob3dQcmV2aWV3KCkge1xuXHRcdFx0dGhpcy5tYWtlUHJldmlldygpO1xuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLmh0bWwgIT09IHR5cGVvZiAnJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoL15cXHMqJC8udGVzdCh0aGlzLmh0bWwpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHNldFBvcHVwSFRNTCgnPGhyPicsICdwb3B1cFByZVByZXZpZXdTZXAnLCB0aGlzLm93bmVyLmlkTnVtYmVyKTtcblx0XHRcdHNldFBvcHVwVGlwc0FuZEhUTUwodGhpcy5odG1sLCAncG9wdXBQcmV2aWV3JywgdGhpcy5vd25lci5pZE51bWJlciwge1xuXHRcdFx0XHRvd25lcjogdGhpcy5vd25lcixcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbW9yZSA9IHRoaXMuZnVsbExlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGggPyB0aGlzLm1vcmVMaW5rKCkgOiAnJztcblx0XHRcdHNldFBvcHVwSFRNTChtb3JlLCAncG9wdXBQcmV2aWV3TW9yZScsIHRoaXMub3duZXIuaWROdW1iZXIpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdG1vcmVMaW5rKCkge1xuXHRcdFx0Y29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdGEuY2xhc3NOYW1lID0gJ3BvcHVwTW9yZUxpbmsnO1xuXHRcdFx0YS5pbm5lckhUTUwgPSBwb3B1cFN0cmluZygnbW9yZS4uLicpO1xuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHRhLm9uY2xpY2sgPSAoKSA9PiB7XG5cdFx0XHRcdHNlbGYubWF4Q2hhcmFjdGVycyArPSAyMDAwO1xuXHRcdFx0XHRzZWxmLm1heFNlbnRlbmNlcyArPSAyMDtcblx0XHRcdFx0c2VsZi5zZXREYXRhKCk7XG5cdFx0XHRcdHNlbGYuc2hvd1ByZXZpZXcoKTtcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRzdHJpcExvbmdUZW1wbGF0ZXMoKSB7XG5cdFx0XHQvLyBvcGVyYXRlcyBvbiB0aGUgSFRNTCFcblx0XHRcdHRoaXMuaHRtbCA9IHRoaXMuaHRtbC5yZXBsYWNlKC9eLnswLDEwMDB9e3tbXn1dKj8oPChwfGJyKSggXFwvKT8+XFxzKil7Mix9KFtee31dKj99fSk/L2dpLCAnJyk7XG5cdFx0XHR0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3BsaXQoJ1xcbicpLmpvaW4oJyAnKTsgLy8gd29ya2Fyb3VuZCBmb3IgPHByZT4gdGVtcGxhdGVzXG5cdFx0XHR0aGlzLmh0bWwgPSB0aGlzLmh0bWwucmVwbGFjZSgve3tbXn1dKjxwcmU+W159XSp9fS9naSwgJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxNdWx0aWxpbmVUZW1wbGF0ZXMoKSB7XG5cdFx0XHR0aGlzLmtpbGwoJ3t7eycsICd9fX0nKTtcblx0XHRcdHRoaXMua2lsbCgvXFxzKnt7W157fV0qXFxuLywgJ319JywgJ3t7Jyk7XG5cdFx0fVxuXHR9XG5cdC8vIEVOREZJTEU6IHByZXZpZXdtYWtlci5qc1xuXHQvLyBTVEFSVEZJTEU6IHF1ZXJ5cHJldmlldy5qc1xuXHRjb25zdCBsb2FkQVBJUHJldmlldyA9IChxdWVyeVR5cGUsIGFydGljbGUsIG5hdnBvcCkgPT4ge1xuXHRcdGNvbnN0IGFydCA9IG5ldyBUaXRsZShhcnRpY2xlKS51cmxTdHJpbmcoKTtcblx0XHRsZXQgdXJsID0gYCR7cGcud2lraS5hcGl3aWtpYmFzZX0/Zm9ybWF0PWpzb24mZm9ybWF0dmVyc2lvbj0yJmFjdGlvbj1xdWVyeSZgO1xuXHRcdGxldCBodG1sR2VuZXJhdG9yID0gKCkgPT4gLyogYSwgZCAqLyB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSgnaW52YWxpZCBodG1sIGdlbmVyYXRvcicsIHt0YWc6ICdwb3B1cHMnLCB0eXBlOiAnZXJyb3InfSk7XG5cdFx0fTtcblx0XHRsZXQgdXNlcm5hbWVhcnQgPSAnJztcblx0XHRzd2l0Y2ggKHF1ZXJ5VHlwZSkge1xuXHRcdFx0Y2FzZSAnaGlzdG9yeSc6XG5cdFx0XHRcdHVybCArPSBgdGl0bGVzPSR7YXJ0fSZwcm9wPXJldmlzaW9ucyZydmxpbWl0PSR7Z2V0VmFsdWVPZigncG9wdXBIaXN0b3J5UHJldmlld0xpbWl0Jyl9YDtcblx0XHRcdFx0aHRtbEdlbmVyYXRvciA9IEFQSWhpc3RvcnlQcmV2aWV3SFRNTDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdjYXRlZ29yeSc6XG5cdFx0XHRcdHVybCArPSBgbGlzdD1jYXRlZ29yeW1lbWJlcnMmY210aXRsZT0ke2FydH1gO1xuXHRcdFx0XHRodG1sR2VuZXJhdG9yID0gQVBJY2F0ZWdvcnlQcmV2aWV3SFRNTDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd1c2VyaW5mbyc6IHtcblx0XHRcdFx0Y29uc3QgdXNlcm5hbWUgPSBuZXcgVGl0bGUoYXJ0aWNsZSkudXNlck5hbWUoKTtcblx0XHRcdFx0dXNlcm5hbWVhcnQgPSBlbmNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpO1xuXHRcdFx0XHR1cmwgKz0gcGcucmUuaXBVc2VyLnRlc3QodXNlcm5hbWUpXG5cdFx0XHRcdFx0PyBgbGlzdD1ibG9ja3MmYmtwcm9wPXJhbmdlfHJlc3RyaWN0aW9ucyZia2lwPSR7dXNlcm5hbWVhcnR9YFxuXHRcdFx0XHRcdDogYGxpc3Q9dXNlcnN8dXNlcmNvbnRyaWJzJnVzcHJvcD1ibG9ja2luZm98Z3JvdXBzfGVkaXRjb3VudHxyZWdpc3RyYXRpb258Z2VuZGVyJnVzdXNlcnM9JHt1c2VybmFtZWFydH0mbWV0YT1nbG9iYWx1c2VyaW5mbyZndWlwcm9wPWdyb3Vwc3x1bmF0dGFjaGVkJmd1aXVzZXI9JHt1c2VybmFtZWFydH0mdWNsaW1pdD0xJnVjcHJvcD10aW1lc3RhbXAmdWN1c2VyPSR7dXNlcm5hbWVhcnR9YDtcblx0XHRcdFx0aHRtbEdlbmVyYXRvciA9IEFQSXVzZXJJbmZvUHJldmlld0hUTUw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnY29udHJpYnMnOlxuXHRcdFx0XHR1c2VybmFtZWFydCA9IGVuY29kZVVSSUNvbXBvbmVudChuZXcgVGl0bGUoYXJ0aWNsZSkudXNlck5hbWUoKSk7XG5cdFx0XHRcdHVybCArPSBgbGlzdD11c2VyY29udHJpYnMmdWN1c2VyPSR7dXNlcm5hbWVhcnR9JnVjbGltaXQ9JHtnZXRWYWx1ZU9mKCdwb3B1cENvbnRyaWJzUHJldmlld0xpbWl0Jyl9YDtcblx0XHRcdFx0aHRtbEdlbmVyYXRvciA9IEFQSWNvbnRyaWJzUHJldmlld0hUTUw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnaW1hZ2VwYWdlcHJldmlldyc6IHtcblx0XHRcdFx0bGV0IHRyYWlsID0gJyc7XG5cdFx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cEltYWdlTGlua3MnKSkge1xuXHRcdFx0XHRcdHRyYWlsID0gYCZsaXN0PWltYWdldXNhZ2UmaXV0aXRsZT0ke2FydH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHVybCArPSBgdGl0bGVzPSR7YXJ0fSZwcm9wPXJldmlzaW9uc3xpbWFnZWluZm8mcnZwcm9wPWNvbnRlbnQke3RyYWlsfWA7XG5cdFx0XHRcdGh0bWxHZW5lcmF0b3IgPSBBUElpbWFnZXBhZ2VQcmV2aWV3SFRNTDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlICdiYWNrbGlua3MnOlxuXHRcdFx0XHR1cmwgKz0gYGxpc3Q9YmFja2xpbmtzJmJsdGl0bGU9JHthcnR9YDtcblx0XHRcdFx0aHRtbEdlbmVyYXRvciA9IEFQSWJhY2tsaW5rc1ByZXZpZXdIVE1MO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JldmlzaW9uJzpcblx0XHRcdFx0dXJsICs9IGFydGljbGUub2xkaWQgPyBgcmV2aWRzPSR7YXJ0aWNsZS5vbGRpZH1gIDogYHRpdGxlcz0ke2FydGljbGUucmVtb3ZlQW5jaG9yKCkudXJsU3RyaW5nKCl9YDtcblx0XHRcdFx0dXJsICs9XG5cdFx0XHRcdFx0JyZwcm9wPXJldmlzaW9uc3xwYWdlcHJvcHN8aW5mb3xpbWFnZXN8Y2F0ZWdvcmllcyZydnByb3A9aWRzfHRpbWVzdGFtcHxmbGFnc3xjb21tZW50fHVzZXJ8Y29udGVudCZjbGxpbWl0PW1heCZpbWxpbWl0PW1heCc7XG5cdFx0XHRcdGh0bWxHZW5lcmF0b3IgPSBBUElyZXZpc2lvblByZXZpZXdIVE1MO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cGVuZGluZ05hdnBvcFRhc2sobmF2cG9wKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IChkKSA9PiB7XG5cdFx0XHRsb2coJ2NhbGxiYWNrIG9mIEFQSSBmdW5jdGlvbnMgd2FzIGhpdCcpO1xuXHRcdFx0aWYgKHF1ZXJ5VHlwZSA9PT0gJ3VzZXJpbmZvJykge1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGRvIGFub3RoZXIgQVBJIHJlcXVlc3Rcblx0XHRcdFx0ZmV0Y2hVc2VyR3JvdXBOYW1lcyhkLmRhdGEpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdHNob3dBUElQcmV2aWV3KHF1ZXJ5VHlwZSwgaHRtbEdlbmVyYXRvcihhcnRpY2xlLCBkLCBuYXZwb3ApLCBuYXZwb3AuaWROdW1iZXIsIG5hdnBvcCwgZCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRzaG93QVBJUHJldmlldyhxdWVyeVR5cGUsIGh0bWxHZW5lcmF0b3IoYXJ0aWNsZSwgZCwgbmF2cG9wKSwgbmF2cG9wLmlkTnVtYmVyLCBuYXZwb3AsIGQpO1xuXHRcdH07XG5cdFx0Y29uc3QgZ28gPSAoKSA9PiB7XG5cdFx0XHRnZXRQYWdlV2l0aENhY2hpbmcodXJsLCBjYWxsYmFjaywgbmF2cG9wKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0aWYgKG5hdnBvcC52aXNpYmxlIHx8ICFnZXRWYWx1ZU9mKCdwb3B1cExhenlEb3dubG9hZHMnKSkge1xuXHRcdFx0Z28oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmF2cG9wLmFkZEhvb2soZ28sICd1bmhpZGUnLCAnYmVmb3JlJywgYERPV05MT0FEXyR7cXVlcnlUeXBlfV9RVUVSWV9EQVRBYCk7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBsaW5rTGlzdCA9IChsaXN0KSA9PiB7XG5cdFx0bGlzdC5zb3J0KCh4LCB5KSA9PiB7XG5cdFx0XHRyZXR1cm4geCA9PT0geSA/IDAgOiB4IDwgeSA/IC0xIDogMTtcblx0XHR9KTtcblx0XHRjb25zdCBidWYgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGlzdCkge1xuXHRcdFx0YnVmLnB1c2goXG5cdFx0XHRcdHdpa2lMaW5rKHtcblx0XHRcdFx0XHRhcnRpY2xlOiBuZXcgVGl0bGUoZWxlbWVudCksXG5cdFx0XHRcdFx0dGV4dDogZWxlbWVudC5zcGxpdCgnICcpLmpvaW4oJyZuYnNwOycpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ3ZpZXcnLFxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGJ1Zi5qb2luKCcsICcpO1xuXHR9O1xuXHRjb25zdCBnZXRUaW1lT2Zmc2V0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IHR6ID0gbXcudXNlci5vcHRpb25zLmdldCgndGltZWNvcnJlY3Rpb24nKTtcblx0XHRpZiAodHogJiYgdHouaW5jbHVkZXMoJ3wnKSkge1xuXHRcdFx0Ly8gTmV3IGZvcm1hdFxuXHRcdFx0cmV0dXJuIE51bWJlci5wYXJzZUludCh0ei5zcGxpdCgnfCcpWzFdLCAxMCk7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9O1xuXHRjb25zdCBnZXRUaW1lWm9uZSA9ICgpID0+IHtcblx0XHRpZiAoIXBnLnVzZXIudGltZVpvbmUpIHtcblx0XHRcdGNvbnN0IHR6ID0gbXcudXNlci5vcHRpb25zLmdldCgndGltZWNvcnJlY3Rpb24nKTtcblx0XHRcdHBnLnVzZXIudGltZVpvbmUgPSAnVVRDJztcblx0XHRcdGlmICh0eikge1xuXHRcdFx0XHRjb25zdCB0ekNvbXBvbmVudHMgPSB0ei5zcGxpdCgnfCcpO1xuXHRcdFx0XHRpZiAodHpDb21wb25lbnRzLmxlbmd0aCA9PT0gMyAmJiB0ekNvbXBvbmVudHNbMF0gPT09ICdab25lSW5mbycpIHtcblx0XHRcdFx0XHRbLCAsIHBnLnVzZXIudGltZVpvbmVdID0gdHpDb21wb25lbnRzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVycmxvZyhgVW5leHBlY3RlZCB0aW1lem9uZSBpbmZvcm1hdGlvbjogJHt0en1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcGcudXNlci50aW1lWm9uZTtcblx0fTtcblx0LyoqXG5cdCAqIFNob3VsZCB3ZSB1c2UgYW4gb2Zmc2V0IG9yIGNhbiB3ZSB1c2UgcHJvcGVyIHRpbWV6b25lc1xuXHQgKi9cblx0Y29uc3QgdXNlVGltZU9mZnNldCA9ICgpID0+IHtcblx0XHRpZiAoSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0VG9QYXJ0cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJRSAxMVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IHR6ID0gbXcudXNlci5vcHRpb25zLmdldCgndGltZWNvcnJlY3Rpb24nKTtcblx0XHRpZiAodHogJiYgIXR6LmluY2x1ZGVzKCdab25lSW5mb3wnKSkge1xuXHRcdFx0Ly8gU3lzdGVtfCBEZWZhdWx0IHN5c3RlbSB0aW1lLCBkZWZhdWx0IGZvciB1c2VycyB3aG8gZGlkbid0IGNvbmZpZ3VyZSB0aW1lem9uZVxuXHRcdFx0Ly8gT2Zmc2V0fCBNYW51YWwgZGVmaW5lZCBvZmZzZXQgYnkgdXNlclxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGxvY2FsZXMgZm9yIHRoZSBwdXJwb3NlIG9mIGphdmFzY3JpcHQgbG9jYWxlIGJhc2VkIGZvcm1hdHRpbmdcblx0ICogRmlsdGVycyBkb3duIHRvIHRob3NlIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci4gRW1wdHkgW10gPT09IFN5c3RlbSdzIGRlZmF1bHQgbG9jYWxlXG5cdCAqL1xuXHRjb25zdCBnZXRMb2NhbGVzID0gKCkgPT4ge1xuXHRcdGlmICghcGcudXNlci5sb2NhbGVzKSB7XG5cdFx0XHRsZXQgdXNlckxhbmd1YWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLmdldEF0dHJpYnV0ZSgnbGFuZycpOyAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBIVE1MIGxvY2FsZVxuXHRcdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwTG9jYWxlJykpIHtcblx0XHRcdFx0dXNlckxhbmd1YWdlID0gZ2V0VmFsdWVPZigncG9wdXBMb2NhbGUnKTtcblx0XHRcdH0gZWxzZSBpZiAodXNlckxhbmd1YWdlID09PSAnZW4nKSB7XG5cdFx0XHRcdC8vIGVuLndwIHRlbmRzIHRvIHRyZWF0IHRoaXMgYXMgaW50ZXJuYXRpb25hbCBlbmdsaXNoIC8gdW5zcGVjaWZpZWRcblx0XHRcdFx0Ly8gYnV0IHdlIGhhdmUgbW9yZSBzcGVjaWZpYyBzZXR0aW5ncyBpbiB1c2VyIG9wdGlvbnNcblx0XHRcdFx0dXNlckxhbmd1YWdlID0gZ2V0TVdEYXRlRm9ybWF0KCkgPT09ICdtZHknID8gJ2VuLVVTJyA6ICdlbi1HQic7XG5cdFx0XHR9XG5cdFx0XHRwZy51c2VyLmxvY2FsZXMgPSBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbdXNlckxhbmd1YWdlLCBuYXZpZ2F0b3IubGFuZ3VhZ2VdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBnLnVzZXIubG9jYWxlcztcblx0fTtcblx0LyoqXG5cdCAqIFJldHJpZXZlIGNvbmZpZ3VyZWQgTVcgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgdXNlclxuXHQgKiBUaGVzZSBjYW4gYmVcblx0ICogZGVmYXVsdFxuXHQgKiBkbXk6IHRpbWUsIGRteVxuXHQgKiBtZHk6IHRpbWUsIG1keVxuXHQgKiB5bWQ6IHRpbWUsIHltZFxuXHQgKiBkbXl0OiBkbXksIHRpbWVcblx0ICogZG15dHM6IGRteSwgdGltZSArIHNlY29uZHNcblx0ICogSVNPIDg2MDE6IFlZWVktTU0tRERUaGg6bW06c3MgKGxvY2FsIHRpbWUpXG5cdCAqXG5cdCAqIFRoaXMgaXNuJ3QgdG9vIHVzZWZ1bCBmb3IgdXMsIGFzIEpTIGRvZXNuJ3QgaGF2ZSBmb3JtYXR0ZXJzIHRvIG1hdGNoIHRoZXNlIHByaXZhdGUgc3BlY2lmaWVyc1xuXHQgKi9cblx0Y29uc3QgZ2V0TVdEYXRlRm9ybWF0ID0gKCkgPT4ge1xuXHRcdHJldHVybiBtdy51c2VyLm9wdGlvbnMuZ2V0KCdkYXRlJyk7XG5cdH07XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgSFRNTCB0YWJsZSB0aGF0J3Mgc2hvd24gaW4gdGhlIGhpc3RvcnkgYW5kIHVzZXItY29udHJpYnMgcG9wdXBzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWNsZVxuXHQgKiBAcGFyYW0ge09iamVjdFtdfSBoIC0gYSBsaXN0IG9mIHJldmlzaW9ucywgcmV0dXJuZWQgZnJvbSB0aGUgQVBJXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhbGx5Q29udHJpYnMgLSB0cnVlIG9ubHkgaWYgd2UncmUgZGlzcGxheWluZyB1c2VyIGNvbnRyaWJ1dGlvbnNcblx0ICovXG5cdGNvbnN0IGVkaXRQcmV2aWV3VGFibGUgPSAoYXJ0aWNsZSwgaCwgcmVhbGx5Q29udHJpYnMpID0+IHtcblx0XHRsZXQgaHRtbCA9IFsnPHRhYmxlPiddO1xuXHRcdGxldCBkYXk7XG5cdFx0bGV0IGN1cmFydCA9IGFydGljbGU7XG5cdFx0bGV0IHBhZ2U7XG5cdFx0bGV0IG1ha2VGaXJzdENvbHVtbkxpbmtzO1xuXHRcdGlmIChyZWFsbHlDb250cmlicykge1xuXHRcdFx0Ly8gV2UncmUgc2hvd2luZyB1c2VyIGNvbnRyaWJ1dGlvbnMsIHNvIG1ha2UgKGRpZmYgfCBoaXN0KSBsaW5rc1xuXHRcdFx0bWFrZUZpcnN0Q29sdW1uTGlua3MgPSAoY3VycmVudFJldmlzaW9uKSA9PiB7XG5cdFx0XHRcdGxldCByZXN1bHQgPSAnKCc7XG5cdFx0XHRcdHJlc3VsdCArPVxuXHRcdFx0XHRcdGA8YSBocmVmPVwiJHtwZy53aWtpLnRpdGxlYmFzZX0ke25ldyBUaXRsZShjdXJyZW50UmV2aXNpb24udGl0bGUpLnVybFN0cmluZygpfSZkaWZmPXByZXZgICtcblx0XHRcdFx0XHRgJm9sZGlkPSR7Y3VycmVudFJldmlzaW9uLnJldmlkfVwiPiR7cG9wdXBTdHJpbmcoJ2RpZmYnKX08L2E+YDtcblx0XHRcdFx0cmVzdWx0ICs9ICcmbmJzcDt8Jm5ic3A7Jztcblx0XHRcdFx0cmVzdWx0ICs9IGA8YSBocmVmPVwiJHtwZy53aWtpLnRpdGxlYmFzZX0ke25ldyBUaXRsZShcblx0XHRcdFx0XHRjdXJyZW50UmV2aXNpb24udGl0bGVcblx0XHRcdFx0KS51cmxTdHJpbmcoKX0mYWN0aW9uPWhpc3RvcnlcIj4ke3BvcHVwU3RyaW5nKCdoaXN0Jyl9PC9hPmA7XG5cdFx0XHRcdHJlc3VsdCArPSAnKSc7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJdCdzIGEgcmVndWxhciBoaXN0b3J5IHBhZ2UsIHNvIG1ha2UgKGN1ciB8IGxhc3QpIGxpbmtzXG5cdFx0XHRjb25zdCBmaXJzdFJldmlkID0gaFswXS5yZXZpZDtcblx0XHRcdG1ha2VGaXJzdENvbHVtbkxpbmtzID0gKGN1cnJlbnRSZXZpc2lvbikgPT4ge1xuXHRcdFx0XHRsZXQgcmVzdWx0ID0gJygnO1xuXHRcdFx0XHRyZXN1bHQgKz0gYDxhIGhyZWY9XCIke3BnLndpa2kudGl0bGViYXNlfSR7bmV3IFRpdGxlKGN1cmFydCkudXJsU3RyaW5nKCl9JmRpZmY9JHtmaXJzdFJldmlkfSZvbGRpZD0ke1xuXHRcdFx0XHRcdGN1cnJlbnRSZXZpc2lvbi5yZXZpZFxuXHRcdFx0XHR9XCI+JHtwb3B1cFN0cmluZygnY3VyJyl9PC9hPmA7XG5cdFx0XHRcdHJlc3VsdCArPSAnJm5ic3A7fCZuYnNwOyc7XG5cdFx0XHRcdHJlc3VsdCArPSBgPGEgaHJlZj1cIiR7cGcud2lraS50aXRsZWJhc2V9JHtuZXcgVGl0bGUoY3VyYXJ0KS51cmxTdHJpbmcoKX0mZGlmZj1wcmV2Jm9sZGlkPSR7XG5cdFx0XHRcdFx0Y3VycmVudFJldmlzaW9uLnJldmlkXG5cdFx0XHRcdH1cIj4ke3BvcHVwU3RyaW5nKCdsYXN0Jyl9PC9hPmA7XG5cdFx0XHRcdHJlc3VsdCArPSAnKSc7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IFtpLCBlbGVtZW50XSBvZiBoLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKHJlYWxseUNvbnRyaWJzKSB7XG5cdFx0XHRcdHBhZ2UgPSBlbGVtZW50LnRpdGxlO1xuXHRcdFx0XHRjdXJhcnQgPSBuZXcgVGl0bGUocGFnZSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtaW5vciA9IGVsZW1lbnQubWlub3IgPyAnPGI+bSA8L2I+JyA6ICcnO1xuXHRcdFx0Y29uc3QgZWRpdERhdGUgPSBuZXcgRGF0ZShlbGVtZW50LnRpbWVzdGFtcCk7XG5cdFx0XHRsZXQgdGhpc0RheSA9IGZvcm1hdHRlZERhdGUoZWRpdERhdGUpO1xuXHRcdFx0Y29uc3QgdGhpc1RpbWUgPSBmb3JtYXR0ZWRUaW1lKGVkaXREYXRlKTtcblx0XHRcdGlmICh0aGlzRGF5ID09PSBkYXkpIHtcblx0XHRcdFx0dGhpc0RheSA9ICcnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF5ID0gdGhpc0RheTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzRGF5KSB7XG5cdFx0XHRcdGh0bWwucHVzaChgPHRyPjx0ZCBjb2xzcGFuPTM+PHNwYW4gY2xhc3M9XCJwb3B1cF9oaXN0b3J5X2RhdGVcIj4ke3RoaXNEYXl9PC9zcGFuPjwvdGQ+PC90cj5gKTtcblx0XHRcdH1cblx0XHRcdGh0bWwucHVzaChcblx0XHRcdFx0YDx0ciBjbGFzcz1cInBvcHVwX2hpc3Rvcnlfcm93XyR7aSAlIDIgPyAnb2RkJyA6ICdldmVuJ31cIj5gLFxuXHRcdFx0XHRgPHRkPiR7bWFrZUZpcnN0Q29sdW1uTGlua3MoZWxlbWVudCl9PC90ZD5gLFxuXHRcdFx0XHQnPHRkPicgK1xuXHRcdFx0XHRcdGA8YSBocmVmPVwiJHtwZy53aWtpLnRpdGxlYmFzZX0ke25ldyBUaXRsZShjdXJhcnQpLnVybFN0cmluZygpfSZvbGRpZD0ke1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5yZXZpZFxuXHRcdFx0XHRcdH1cIj4ke3RoaXNUaW1lfTwvYT48L3RkPmBcblx0XHRcdCk7XG5cdFx0XHRsZXQgY29sM3VybCA9ICcnO1xuXHRcdFx0bGV0IGNvbDN0eHQgPSAnJztcblx0XHRcdGlmIChyZWFsbHlDb250cmlicykge1xuXHRcdFx0XHRjb2wzdXJsID0gcGcud2lraS50aXRsZWJhc2UgKyBjdXJhcnQudXJsU3RyaW5nKCk7XG5cdFx0XHRcdGNvbDN0eHQgPSBwZy5lc2NhcGVRdW90ZXNIVE1MKHBhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qge3VzZXJ9ID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKGVsZW1lbnQudXNlcmhpZGRlbikge1xuXHRcdFx0XHRcdGNvbDN1cmwgPSBnZXRWYWx1ZU9mKCdwb3B1cFJldkRlbFVybCcpO1xuXHRcdFx0XHRcdGNvbDN0eHQgPSBwZy5lc2NhcGVRdW90ZXNIVE1MKHBvcHVwU3RyaW5nKCdyZXZkZWwnKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29sM3VybCA9IHBnLnJlLmlwVXNlci50ZXN0KHVzZXIpXG5cdFx0XHRcdFx0XHQ/IGAke1xuXHRcdFx0XHRcdFx0XHRcdHBnLndpa2kudGl0bGViYXNlICsgbXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbcGcubnNTcGVjaWFsSWRdXG5cdFx0XHRcdFx0XHRcdH06Q29udHJpYnV0aW9ucyZ0YXJnZXQ9JHtuZXcgVGl0bGUodXNlcikudXJsU3RyaW5nKCl9YFxuXHRcdFx0XHRcdFx0OiBgJHtwZy53aWtpLnRpdGxlYmFzZSArIG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3BnLm5zVXNlcklkXX06JHtuZXcgVGl0bGUoXG5cdFx0XHRcdFx0XHRcdFx0dXNlclxuXHRcdFx0XHRcdFx0XHQpLnVybFN0cmluZygpfWA7XG5cdFx0XHRcdFx0Y29sM3R4dCA9IHBnLmVzY2FwZVF1b3Rlc0hUTUwodXNlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGh0bWwucHVzaChgPHRkPiR7cmVhbGx5Q29udHJpYnMgPyBtaW5vciA6ICcnfTxhIGhyZWY9XCIke2NvbDN1cmx9XCI+JHtjb2wzdHh0fTwvYT48L3RkPmApO1xuXHRcdFx0bGV0IGNvbW1lbnQgPSAnJztcblx0XHRcdGNvbnN0IGMgPSBlbGVtZW50LmNvbW1lbnQgfHwgZWxlbWVudC5jb250ZW50O1xuXHRcdFx0aWYgKGMpIHtcblx0XHRcdFx0Y29tbWVudCA9IG5ldyBQcmV2aWV3bWFrZXIoYywgbmV3IFRpdGxlKGN1cmFydCkudG9VcmwoKSkuZWRpdFN1bW1hcnlQcmV2aWV3KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuY29tbWVudGhpZGRlbikge1xuXHRcdFx0XHRjb21tZW50ID0gcG9wdXBTdHJpbmcoJ3JldmRlbCcpO1xuXHRcdFx0fVxuXHRcdFx0aHRtbC5wdXNoKGA8dGQ+JHtyZWFsbHlDb250cmlicyA/ICcnIDogbWlub3J9JHtjb21tZW50fTwvdGQ+YCwgJzwvdHI+Jyk7XG5cdFx0XHRodG1sID0gW2h0bWwuam9pbignJyldO1xuXHRcdH1cblx0XHRodG1sLnB1c2goJzwvdGFibGU+Jyk7XG5cdFx0cmV0dXJuIGh0bWwuam9pbignJyk7XG5cdH07XG5cdGNvbnN0IGFkanVzdERhdGUgPSAoZCwgb2Zmc2V0KSA9PiB7XG5cdFx0Ly8gb2Zmc2V0IGlzIGluIG1pbnV0ZXNcblx0XHRjb25zdCBvID0gb2Zmc2V0ICogNjAgKiAxMDAwO1xuXHRcdHJldHVybiBuZXcgRGF0ZSgrZCArIG8pO1xuXHR9O1xuXHQvKipcblx0ICogVGhpcyByZWxpZXMgb24gdGhlIERhdGUgcGFyc2VyIHVuZGVyc3RhbmRpbmcgZW4tVVMgZGF0ZXMsXG5cdCAqIHdoaWNoIGlzIHByZXR0eSBzYWZlIGFzc3VtcHRpb24sIGJ1dCBub3QgcGVyZmVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtEYXRlfSBkYXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lWm9uZVxuXHQgKi9cblx0Y29uc3QgY29udmVydFRpbWVab25lID0gKGRhdGUsIHRpbWVab25lKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge3RpbWVab25lfSkpO1xuXHR9O1xuXHRjb25zdCBmb3JtYXR0ZWREYXRlVGltZSA9IChkYXRlKSA9PiB7XG5cdFx0Ly8gZmFsbGJhY2sgZm9yIElFMTEgYW5kIHVua25vd24gdGltZXpvbmVzXG5cdFx0aWYgKHVzZVRpbWVPZmZzZXQoKSkge1xuXHRcdFx0cmV0dXJuIGAke2Zvcm1hdHRlZERhdGUoZGF0ZSl9ICR7Zm9ybWF0dGVkVGltZShkYXRlKX1gO1xuXHRcdH1cblx0XHRpZiAoZ2V0TVdEYXRlRm9ybWF0KCkgPT09ICdJU08gODYwMScpIHtcblx0XHRcdGNvbnN0IGQyID0gY29udmVydFRpbWVab25lKGRhdGUsIGdldFRpbWVab25lKCkpO1xuXHRcdFx0cmV0dXJuIGAke21hcCh6ZXJvRmlsbCwgW2QyLmdldEZ1bGxZZWFyKCksIGQyLmdldE1vbnRoKCkgKyAxLCBkMi5nZXREYXRlKCldKS5qb2luKCctJyl9VCR7bWFwKHplcm9GaWxsLCBbXG5cdFx0XHRcdGQyLmdldEhvdXJzKCksXG5cdFx0XHRcdGQyLmdldE1pbnV0ZXMoKSxcblx0XHRcdFx0ZDIuZ2V0U2Vjb25kcygpLFxuXHRcdFx0XSkuam9pbignOicpfWA7XG5cdFx0fVxuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXRWYWx1ZU9mKCdwb3B1cERhdGVUaW1lRm9ybWF0dGVyT3B0aW9ucycpO1xuXHRcdG9wdGlvbnMudGltZVpvbmUgPSBnZXRUaW1lWm9uZSgpO1xuXHRcdHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKGdldExvY2FsZXMoKSwgb3B0aW9ucyk7XG5cdH07XG5cdGNvbnN0IGZvcm1hdHRlZERhdGUgPSAoZGF0ZSkgPT4ge1xuXHRcdGxldCBkMjtcblx0XHQvLyBmYWxsYmFjayBmb3IgSUUxMSBhbmQgdW5rbm93biB0aW1lem9uZXNcblx0XHRpZiAodXNlVGltZU9mZnNldCgpKSB7XG5cdFx0XHQvLyB3ZSBhZGp1c3QgdGhlIFVUQyB0aW1lLCBzbyB3ZSBwcmludCB0aGUgYWRqdXN0ZWQgVVRDLCBidXQgbm90IHJlYWxseSBVVEMgdmFsdWVzXG5cdFx0XHRkMiA9IGFkanVzdERhdGUoZGF0ZSwgZ2V0VGltZU9mZnNldCgpKTtcblx0XHRcdHJldHVybiBtYXAoemVyb0ZpbGwsIFtkMi5nZXRVVENGdWxsWWVhcigpLCBkMi5nZXRVVENNb250aCgpICsgMSwgZDIuZ2V0VVRDRGF0ZSgpXSkuam9pbignLScpO1xuXHRcdH1cblx0XHRpZiAoZ2V0TVdEYXRlRm9ybWF0KCkgPT09ICdJU08gODYwMScpIHtcblx0XHRcdGQyID0gY29udmVydFRpbWVab25lKGRhdGUsIGdldFRpbWVab25lKCkpO1xuXHRcdFx0cmV0dXJuIG1hcCh6ZXJvRmlsbCwgW2QyLmdldEZ1bGxZZWFyKCksIGQyLmdldE1vbnRoKCkgKyAxLCBkMi5nZXREYXRlKCldKS5qb2luKCctJyk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXRWYWx1ZU9mKCdwb3B1cERhdGVGb3JtYXR0ZXJPcHRpb25zJyk7XG5cdFx0b3B0aW9ucy50aW1lWm9uZSA9IGdldFRpbWVab25lKCk7XG5cdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGdldExvY2FsZXMoKSwgb3B0aW9ucyk7XG5cdH07XG5cdGNvbnN0IGZvcm1hdHRlZFRpbWUgPSAoZGF0ZSkgPT4ge1xuXHRcdGxldCBkMjtcblx0XHQvLyBmYWxsYmFjayBmb3IgSUUxMSBhbmQgdW5rbm93biB0aW1lem9uZXNcblx0XHRpZiAodXNlVGltZU9mZnNldCgpKSB7XG5cdFx0XHQvLyB3ZSBhZGp1c3QgdGhlIFVUQyB0aW1lLCBzbyB3ZSBwcmludCB0aGUgYWRqdXN0ZWQgVVRDLCBidXQgbm90IHJlYWxseSBVVEMgdmFsdWVzXG5cdFx0XHRkMiA9IGFkanVzdERhdGUoZGF0ZSwgZ2V0VGltZU9mZnNldCgpKTtcblx0XHRcdHJldHVybiBtYXAoemVyb0ZpbGwsIFtkMi5nZXRVVENIb3VycygpLCBkMi5nZXRVVENNaW51dGVzKCksIGQyLmdldFVUQ1NlY29uZHMoKV0pLmpvaW4oJzonKTtcblx0XHR9XG5cdFx0aWYgKGdldE1XRGF0ZUZvcm1hdCgpID09PSAnSVNPIDg2MDEnKSB7XG5cdFx0XHRkMiA9IGNvbnZlcnRUaW1lWm9uZShkYXRlLCBnZXRUaW1lWm9uZSgpKTtcblx0XHRcdHJldHVybiBtYXAoemVyb0ZpbGwsIFtkMi5nZXRIb3VycygpLCBkMi5nZXRNaW51dGVzKCksIGQyLmdldFNlY29uZHMoKV0pLmpvaW4oJzonKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldFZhbHVlT2YoJ3BvcHVwVGltZUZvcm1hdHRlck9wdGlvbnMnKTtcblx0XHRvcHRpb25zLnRpbWVab25lID0gZ2V0VGltZVpvbmUoKTtcblx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoZ2V0TG9jYWxlcygpLCBvcHRpb25zKTtcblx0fTtcblx0Ly8gR2V0IHRoZSBwcm9wZXIgZ3JvdXBuYW1lcyBmb3IgdGhlIHRlY2huaWNhbGdyb3Vwc1xuXHRjb25zdCBmZXRjaFVzZXJHcm91cE5hbWVzID0gKHVzZXJpbmZvUmVzcG9uc2UpID0+IHtcblx0XHRjb25zdCBxdWVyeU9iaiA9IGdldEpzT2JqKHVzZXJpbmZvUmVzcG9uc2UpLnF1ZXJ5O1xuXHRcdGNvbnN0IHVzZXIgPSBhbnlDaGlsZChxdWVyeU9iai51c2Vycyk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBbXTtcblx0XHRpZiAodXNlci5ncm91cHMpIHtcblx0XHRcdGZvciAoY29uc3QgZ3JvdXBOYW1lIG9mIHVzZXIuZ3JvdXBzKSB7XG5cdFx0XHRcdGlmICghWycqJywgJ3VzZXInLCAnYXV0b2NvbmZpcm1lZCddLmluY2x1ZGVzKGdyb3VwTmFtZSkpIHtcblx0XHRcdFx0XHRtZXNzYWdlcy5wdXNoKGBncm91cC0ke2dyb3VwTmFtZX0tbWVtYmVyYCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHF1ZXJ5T2JqLmdsb2JhbHVzZXJpbmZvICYmIHF1ZXJ5T2JqLmdsb2JhbHVzZXJpbmZvLmdyb3Vwcykge1xuXHRcdFx0Zm9yIChjb25zdCBncm91cE5hbWUgb2YgcXVlcnlPYmouZ2xvYmFsdXNlcmluZm8uZ3JvdXBzKSB7XG5cdFx0XHRcdG1lc3NhZ2VzLnB1c2goYGdyb3VwLSR7Z3JvdXBOYW1lfS1tZW1iZXJgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGdldE13QXBpKCkubG9hZE1lc3NhZ2VzSWZNaXNzaW5nKG1lc3NhZ2VzKTtcblx0fTtcblx0Y29uc3Qgc2hvd0FQSVByZXZpZXcgPSAocXVlcnlUeXBlLCBodG1sLCBpZCwgbmF2cG9wLCBkb3dubG9hZCkgPT4ge1xuXHRcdC8vIERKOiBkb25lXG5cdFx0bGV0IHRhcmdldCA9ICdwb3B1cFByZXZpZXcnO1xuXHRcdGNvbXBsZXRlZE5hdnBvcFRhc2sobmF2cG9wKTtcblx0XHRzd2l0Y2ggKHF1ZXJ5VHlwZSkge1xuXHRcdFx0Y2FzZSAnaW1hZ2VsaW5rcyc6XG5cdFx0XHRjYXNlICdjYXRlZ29yeSc6XG5cdFx0XHRcdHRhcmdldCA9ICdwb3B1cFBvc3RQcmV2aWV3Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd1c2VyaW5mbyc6XG5cdFx0XHRcdHRhcmdldCA9ICdwb3B1cFVzZXJEYXRhJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyZXZpc2lvbic6XG5cdFx0XHRcdGluc2VydFByZXZpZXcoZG93bmxvYWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHNldFBvcHVwVGlwc0FuZEhUTUwoaHRtbCwgdGFyZ2V0LCBpZCk7XG5cdH07XG5cdGNvbnN0IEFQSXJldmlzaW9uUHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzT2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBwYWdlID0gYW55Q2hpbGQoanNPYmoucXVlcnkucGFnZXMpO1xuXHRcdFx0aWYgKHBhZ2UubWlzc2luZykge1xuXHRcdFx0XHQvLyBUT0RPIHdlIG5lZWQgdG8gZml4IHRoaXMgcHJvcGVyIGxhdGVyIG9uXG5cdFx0XHRcdGRvd25sb2FkLm93bmVyID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udGVudCA9XG5cdFx0XHRcdHBhZ2UgJiYgcGFnZS5yZXZpc2lvbnMgJiYgcGFnZS5yZXZpc2lvbnNbMF0uY29udGVudG1vZGVsID09PSAnd2lraXRleHQnXG5cdFx0XHRcdFx0PyBwYWdlLnJldmlzaW9uc1swXS5jb250ZW50XG5cdFx0XHRcdFx0OiBudWxsO1xuXHRcdFx0aWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRkb3dubG9hZC5kYXRhID0gY29udGVudDtcblx0XHRcdFx0ZG93bmxvYWQubGFzdE1vZGlmaWVkID0gbmV3IERhdGUocGFnZS5yZXZpc2lvbnNbMF0udGltZXN0YW1wKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiAnUmV2aXNpb24gcHJldmlldyBmYWlsZWQgOignO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgQVBJYmFja2xpbmtzUHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkIC8qICwgbmF2cG9wICovKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzT2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBsaXN0ID0ganNPYmoucXVlcnkuYmFja2xpbmtzO1xuXHRcdFx0bGV0IGh0bWwgPSBbXTtcblx0XHRcdGlmICghbGlzdCkge1xuXHRcdFx0XHRyZXR1cm4gcG9wdXBTdHJpbmcoJ05vIGJhY2tsaW5rcyBmb3VuZCcpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3QpIHtcblx0XHRcdFx0Y29uc3QgdCA9IG5ldyBUaXRsZShlbGVtZW50LnRpdGxlKTtcblx0XHRcdFx0aHRtbC5wdXNoKGA8YSBocmVmPVwiJHtwZy53aWtpLnRpdGxlYmFzZX0ke3QudXJsU3RyaW5nKCl9XCI+JHt0LnRvU3RyaW5nKCkuZW50aWZ5KCl9PC9hPmApO1xuXHRcdFx0fVxuXHRcdFx0aHRtbCA9IGh0bWwuam9pbignLCAnKTtcblx0XHRcdGlmIChqc09iai5jb250aW51ZSAmJiBqc09iai5jb250aW51ZS5ibGNvbnRpbnVlKSB7XG5cdFx0XHRcdGh0bWwgKz0gcG9wdXBTdHJpbmcoJyBhbmQgbW9yZScpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGh0bWw7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gJ2JhY2tsaW5rc1ByZXZpZXdIVE1MIHdlbnQgd29ua3knO1xuXHRcdH1cblx0fTtcblx0cGcuZm4uQVBJc2hhcmVkSW1hZ2VQYWdlUHJldmlld0hUTUwgPSAob2JqKSA9PiB7XG5cdFx0bG9nKCdBUElzaGFyZWRJbWFnZVBhZ2VQcmV2aWV3SFRNTCcpO1xuXHRcdGNvbnN0IHBvcHVwaWQgPSBvYmoucmVxdWVzdGlkO1xuXHRcdGlmIChvYmoucXVlcnkgJiYgb2JqLnF1ZXJ5LnBhZ2VzKSB7XG5cdFx0XHRjb25zdCBwYWdlID0gYW55Q2hpbGQob2JqLnF1ZXJ5LnBhZ2VzKTtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPVxuXHRcdFx0XHRwYWdlICYmIHBhZ2UucmV2aXNpb25zICYmIHBhZ2UucmV2aXNpb25zWzBdLmNvbnRlbnRtb2RlbCA9PT0gJ3dpa2l0ZXh0J1xuXHRcdFx0XHRcdD8gcGFnZS5yZXZpc2lvbnNbMF0uY29udGVudFxuXHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgJiYgcGcgJiYgcGcuY3VycmVudCAmJiBwZy5jdXJyZW50LmxpbmsgJiYgcGcuY3VycmVudC5saW5rLm5hdnBvcHVwKSB7XG5cdFx0XHRcdC8qIE5vdCBlbnRpcmVseSBzYWZlLCBidXQgdGhlIGJlc3Qgd2UgY2FuIGRvICovXG5cdFx0XHRcdGNvbnN0IHAgPSBuZXcgUHJldmlld21ha2VyKGNvbnRlbnQsIHBnLmN1cnJlbnQubGluay5uYXZwb3B1cC5hcnRpY2xlLCBwZy5jdXJyZW50LmxpbmsubmF2cG9wdXApO1xuXHRcdFx0XHRwLm1ha2VQcmV2aWV3KCk7XG5cdFx0XHRcdHNldFBvcHVwSFRNTChwLmh0bWwsICdwb3B1cFNlY29uZFByZXZpZXcnLCBwb3B1cGlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IEFQSWltYWdlcGFnZVByZXZpZXdIVE1MID0gKGFydGljbGUsIGRvd25sb2FkLCBuYXZwb3ApID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QganNPYmogPSBnZXRKc09iaihkb3dubG9hZC5kYXRhKTtcblx0XHRcdGNvbnN0IHBhZ2UgPSBhbnlDaGlsZChqc09iai5xdWVyeS5wYWdlcyk7XG5cdFx0XHRjb25zdCBjb250ZW50ID1cblx0XHRcdFx0cGFnZSAmJiBwYWdlLnJldmlzaW9ucyAmJiBwYWdlLnJldmlzaW9uc1swXS5jb250ZW50bW9kZWwgPT09ICd3aWtpdGV4dCdcblx0XHRcdFx0XHQ/IHBhZ2UucmV2aXNpb25zWzBdLmNvbnRlbnRcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRsZXQgcmV0ID0gJyc7XG5cdFx0XHRsZXQgYWx0ID0gJyc7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRbe2FsdH1dID0gbmF2cG9wLnBhcmVudEFuY2hvci5jaGlsZE5vZGVzO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8qIGVtcHR5ICovXG5cdFx0XHR9XG5cdFx0XHRpZiAoYWx0KSB7XG5cdFx0XHRcdHJldCA9IGAke3JldH08aHI+PGI+JHtwb3B1cFN0cmluZygnQWx0IHRleHQ6Jyl9PC9iPiAke3BnLmVzY2FwZVF1b3Rlc0hUTUwoYWx0KX1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRjb25zdCBwID0gcHJlcFByZXZpZXdtYWtlcihjb250ZW50LCBhcnRpY2xlLCBuYXZwb3ApO1xuXHRcdFx0XHRwLm1ha2VQcmV2aWV3KCk7XG5cdFx0XHRcdGlmIChwLmh0bWwpIHtcblx0XHRcdFx0XHRyZXQgKz0gYDxocj4ke3AuaHRtbH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cFN1bW1hcnlEYXRhJykpIHtcblx0XHRcdFx0XHRjb25zdCBpbmZvID0gZ2V0UGFnZUluZm8oY29udGVudCwgZG93bmxvYWQpO1xuXHRcdFx0XHRcdGxvZyhpbmZvKTtcblx0XHRcdFx0XHRzZXRQb3B1cFRyYWlsZXIoaW5mbywgbmF2cG9wLmlkTnVtYmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHBhZ2UgJiYgcGFnZS5pbWFnZXJlcG9zaXRvcnkgPT09ICdzaGFyZWQnKSB7XG5cdFx0XHRcdGNvbnN0IGFydCA9IG5ldyBUaXRsZShhcnRpY2xlKTtcblx0XHRcdFx0Y29uc3QgZW5jYXJ0ID0gZW5jb2RlVVJJQ29tcG9uZW50KGBGaWxlOiR7YXJ0LnN0cmlwTmFtZXNwYWNlKCl9YCk7XG5cdFx0XHRcdGNvbnN0IHNoYXJlZF91cmwgPVxuXHRcdFx0XHRcdGAke3BnLndpa2kuYXBpY29tbW9uc2Jhc2V9P2Zvcm1hdD1qc29uJmZvcm1hdHZlcnNpb249MmAgK1xuXHRcdFx0XHRcdCcmY2FsbGJhY2s9cGcuZm4uQVBJc2hhcmVkSW1hZ2VQYWdlUHJldmlld0hUTUwnICtcblx0XHRcdFx0XHRgJnJlcXVlc3RpZD0ke25hdnBvcC5pZE51bWJlcn0mYWN0aW9uPXF1ZXJ5JnByb3A9cmV2aXNpb25zJnJ2cHJvcD1jb250ZW50JnRpdGxlcz0ke2VuY2FydH1gO1xuXHRcdFx0XHRyZXQgPSBgJHtyZXR9PGhyPiR7cG9wdXBTdHJpbmcoJ0ltYWdlIGZyb20gQ29tbW9ucycpfTogPGEgaHJlZj1cIiR7XG5cdFx0XHRcdFx0cGcud2lraS5jb21tb25zYmFzZVxuXHRcdFx0XHR9P3RpdGxlPSR7ZW5jYXJ0fVwiPiR7cG9wdXBTdHJpbmcoJ0Rlc2NyaXB0aW9uIHBhZ2UnKX08L2E+YDtcblx0XHRcdFx0bXcubG9hZGVyLmxvYWQoc2hhcmVkX3VybCk7XG5cdFx0XHR9XG5cdFx0XHRzaG93QVBJUHJldmlldygnaW1hZ2VsaW5rcycsIEFQSWltYWdlbGlua3NQcmV2aWV3SFRNTChhcnRpY2xlLCBkb3dubG9hZCksIG5hdnBvcC5pZE51bWJlciwgZG93bmxvYWQpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiAnQVBJIGltYWdlcGFnZSBwcmV2aWV3IGZhaWxlZCA6KCc7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBBUElpbWFnZWxpbmtzUHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzb2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBsaXN0ID0ganNvYmoucXVlcnkuaW1hZ2V1c2FnZTtcblx0XHRcdGlmIChsaXN0KSB7XG5cdFx0XHRcdGNvbnN0IHJldCA9IFtdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGlzdCkge1xuXHRcdFx0XHRcdHJldC5wdXNoKGVsZW1lbnQudGl0bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZXQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBvcHVwU3RyaW5nKCdObyBpbWFnZSBsaW5rcyBmb3VuZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBgPGgyPiR7cG9wdXBTdHJpbmcoJ0ZpbGUgbGlua3MnKX08L2gyPiR7bGlua0xpc3QocmV0KX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBvcHVwU3RyaW5nKCdObyBpbWFnZSBsaW5rcyBmb3VuZCcpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuICdJbWFnZSBsaW5rcyBwcmV2aWV3IGdlbmVyYXRpb24gZmFpbGVkIDooJztcblx0XHR9XG5cdH07XG5cdGNvbnN0IEFQSWNhdGVnb3J5UHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzb2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBsaXN0ID0ganNvYmoucXVlcnkuY2F0ZWdvcnltZW1iZXJzO1xuXHRcdFx0bGV0IHJldCA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3QpIHtcblx0XHRcdFx0cmV0LnB1c2goZWxlbWVudC50aXRsZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmV0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gcG9wdXBTdHJpbmcoJ0VtcHR5IGNhdGVnb3J5Jyk7XG5cdFx0XHR9XG5cdFx0XHRyZXQgPSBgPGgyPiR7dHByaW50ZignQ2F0ZWdvcnkgbWVtYmVycyAoJXMgc2hvd24pJywgW3JldC5sZW5ndGhdKX08L2gyPiR7bGlua0xpc3QocmV0KX1gO1xuXHRcdFx0aWYgKGpzb2JqLmNvbnRpbnVlICYmIGpzb2JqLmNvbnRpbnVlLmNtY29udGludWUpIHtcblx0XHRcdFx0cmV0ICs9IHBvcHVwU3RyaW5nKCcgYW5kIG1vcmUnKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gJ0NhdGVnb3J5IHByZXZpZXcgZmFpbGVkIDooJztcblx0XHR9XG5cdH07XG5cdGNvbnN0IEFQSXVzZXJJbmZvUHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkKSA9PiB7XG5cdFx0bGV0IHJldCA9IFtdO1xuXHRcdGxldCBxdWVyeW9iaiA9IHt9O1xuXHRcdHRyeSB7XG5cdFx0XHRxdWVyeW9iaiA9IGdldEpzT2JqKGRvd25sb2FkLmRhdGEpLnF1ZXJ5O1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuICdVc2VyaW5mbyBwcmV2aWV3IGZhaWxlZCA6KCc7XG5cdFx0fVxuXHRcdGNvbnN0IHVzZXIgPSBhbnlDaGlsZChxdWVyeW9iai51c2Vycyk7XG5cdFx0aWYgKHVzZXIpIHtcblx0XHRcdGNvbnN0IHtnbG9iYWx1c2VyaW5mb30gPSBxdWVyeW9iajtcblx0XHRcdGlmICh1c2VyLmludmFsaWQgPT09ICcnKSB7XG5cdFx0XHRcdHJldC5wdXNoKHBvcHVwU3RyaW5nKCdJbnZhbGlkIHVzZXInKSk7XG5cdFx0XHR9IGVsc2UgaWYgKHVzZXIubWlzc2luZyA9PT0gJycpIHtcblx0XHRcdFx0cmV0LnB1c2gocG9wdXBTdHJpbmcoJ05vdCBhIHJlZ2lzdGVyZWQgdXNlcm5hbWUnKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodXNlci5ibG9ja2VkYnkpIHtcblx0XHRcdFx0aWYgKHVzZXIuYmxvY2twYXJ0aWFsKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goYDxiPiR7cG9wdXBTdHJpbmcoJ0hhcyBibG9ja3MnKX08L2I+YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goYDxiPiR7cG9wdXBTdHJpbmcoJ0JMT0NLRUQnKX08L2I+YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChnbG9iYWx1c2VyaW5mbyAmJiAoJ2xvY2tlZCcgaW4gZ2xvYmFsdXNlcmluZm8gfHwgJ2hpZGRlbicgaW4gZ2xvYmFsdXNlcmluZm8pKSB7XG5cdFx0XHRcdGxldCBsb2NrZWRTdWxBY2NvdW50SXNBdHRhY2hlZFRvVGhpcyA9IHRydWU7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBnbG9iYWx1c2VyaW5mby51bmF0dGFjaGVkICYmIGkgPCBnbG9iYWx1c2VyaW5mby51bmF0dGFjaGVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGdsb2JhbHVzZXJpbmZvLnVuYXR0YWNoZWRbaV0ud2lraSA9PT0gbXcuY29uZmlnLmdldCgnd2dEQm5hbWUnKSkge1xuXHRcdFx0XHRcdFx0bG9ja2VkU3VsQWNjb3VudElzQXR0YWNoZWRUb1RoaXMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobG9ja2VkU3VsQWNjb3VudElzQXR0YWNoZWRUb1RoaXMpIHtcblx0XHRcdFx0XHRpZiAoJ2xvY2tlZCcgaW4gZ2xvYmFsdXNlcmluZm8pIHtcblx0XHRcdFx0XHRcdHJldC5wdXNoKGA8Yj48aT4ke3BvcHVwU3RyaW5nKCdMT0NLRUQnKX08L2k+PC9iPmApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoJ2hpZGRlbicgaW4gZ2xvYmFsdXNlcmluZm8pIHtcblx0XHRcdFx0XHRcdHJldC5wdXNoKGA8Yj48aT4ke3BvcHVwU3RyaW5nKCdISURERU4nKX08L2k+PC9iPmApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwU2hvd0dlbmRlcicpICYmIHVzZXIuZ2VuZGVyKSB7XG5cdFx0XHRcdHN3aXRjaCAodXNlci5nZW5kZXIpIHtcblx0XHRcdFx0XHRjYXNlICdtYWxlJzpcblx0XHRcdFx0XHRcdHJldC5wdXNoKGAke3BvcHVwU3RyaW5nKCdoZS9oaW0nKX0gwrcgYCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdmZW1hbGUnOlxuXHRcdFx0XHRcdFx0cmV0LnB1c2goYCR7cG9wdXBTdHJpbmcoJ3NoZS9oZXInKX0gwrcgYCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHVzZXIuZ3JvdXBzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZ3JvdXBOYW1lIG9mIHVzZXIuZ3JvdXBzKSB7XG5cdFx0XHRcdFx0aWYgKCFbJyonLCAndXNlcicsICdhdXRvY29uZmlybWVkJ10uaW5jbHVkZXMoZ3JvdXBOYW1lKSkge1xuXHRcdFx0XHRcdFx0Ly8gTWVzc2FnZXMgdGhhdCBjYW4gYmUgdXNlZCBoZXJlOlxuXHRcdFx0XHRcdFx0Ly8gKiBzZWUgW1tTcGVjaWFsOlByZWZpeEluZGV4L01lZGlhV2lraTpHcm91cC1dXVxuXHRcdFx0XHRcdFx0Ly8gKiBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXHRcdFx0XHRcdFx0cmV0LnB1c2gocGcuZXNjYXBlUXVvdGVzSFRNTChtdy5tZXNzYWdlKGBncm91cC0ke2dyb3VwTmFtZX0tbWVtYmVyYCwgdXNlci5nZW5kZXIpLnRleHQoKSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGdsb2JhbHVzZXJpbmZvICYmIGdsb2JhbHVzZXJpbmZvLmdyb3Vwcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGdyb3VwTmFtZSBvZiBnbG9iYWx1c2VyaW5mby5ncm91cHMpIHtcblx0XHRcdFx0XHRyZXQucHVzaChcblx0XHRcdFx0XHRcdC8vIE1lc3NhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZTpcblx0XHRcdFx0XHRcdC8vICogc2VlIFtbU3BlY2lhbDpQcmVmaXhJbmRleC9NZWRpYVdpa2k6R3JvdXAtXV1cblx0XHRcdFx0XHRcdC8vICogZm9yIG1vcmUgaW5mb3JtYXRpb25cblx0XHRcdFx0XHRcdGA8aT4ke3BnLmVzY2FwZVF1b3Rlc0hUTUwobXcubWVzc2FnZShgZ3JvdXAtJHtncm91cE5hbWV9LW1lbWJlcmAsIHVzZXIuZ2VuZGVyKS50ZXh0KCkpfTwvaT5gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHVzZXIucmVnaXN0cmF0aW9uKSB7XG5cdFx0XHRcdHJldC5wdXNoKFxuXHRcdFx0XHRcdHBnLmVzY2FwZVF1b3Rlc0hUTUwoXG5cdFx0XHRcdFx0XHQodXNlci5lZGl0Y291bnQgPz8gJzAnKSArXG5cdFx0XHRcdFx0XHRcdHBvcHVwU3RyaW5nKCcgZWRpdHMgc2luY2U6ICcpICtcblx0XHRcdFx0XHRcdFx0KHVzZXIucmVnaXN0cmF0aW9uID8gZm9ybWF0dGVkRGF0ZShuZXcgRGF0ZSh1c2VyLnJlZ2lzdHJhdGlvbikpIDogJycpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAocXVlcnlvYmoudXNlcmNvbnRyaWJzICYmIHF1ZXJ5b2JqLnVzZXJjb250cmlicy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXQucHVzaChwb3B1cFN0cmluZygnbGFzdCBlZGl0IG9uICcpICsgZm9ybWF0dGVkRGF0ZShuZXcgRGF0ZShxdWVyeW9iai51c2VyY29udHJpYnNbMF0udGltZXN0YW1wKSkpO1xuXHRcdH1cblx0XHRpZiAocXVlcnlvYmouYmxvY2tzKSB7XG5cdFx0XHRyZXQucHVzaChwb3B1cFN0cmluZygnSVAgdXNlcicpKTsgLy8gd2Ugb25seSByZXF1ZXN0IGxpc3Q9YmxvY2tzIGZvciBJUHNcblx0XHRcdGZvciAobGV0IGwgPSAwOyBsIDwgcXVlcnlvYmouYmxvY2tzLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdGxldCByYnN0ciA9IHF1ZXJ5b2JqLmJsb2Nrc1tsXS5yYW5nZXN0YXJ0ID09PSBxdWVyeW9iai5ibG9ja3NbbF0ucmFuZ2VlbmQgPyAnQkxPQ0snIDogJ1JBTkdFQkxPQ0snO1xuXHRcdFx0XHRyYnN0ciA9IEFycmF5LmlzQXJyYXkocXVlcnlvYmouYmxvY2tzW2xdLnJlc3RyaWN0aW9ucykgPyBgJHtyYnN0cn1FRGAgOiBgSGFzICR7cmJzdHIudG9Mb3dlckNhc2UoKX1zYDtcblx0XHRcdFx0cmV0LnB1c2goYDxiPiR7cG9wdXBTdHJpbmcocmJzdHIpfTwvYj5gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gaWYgYW55IGVsZW1lbnQgb2YgcmV0IGVuZHMgd2l0aCAnIMK3ICcsIG1lcmdlIGl0IHdpdGggdGhlIG5leHQgZWxlbWVudCB0byBhdm9pZFxuXHRcdC8vIHRoZSAuam9pbignLCAnKSBjYWxsIGluc2VydGluZyBhIGNvbW1hIGFmdGVyIGl0XG5cdFx0Zm9yIChsZXQgbSA9IDA7IG0gPCByZXQubGVuZ3RoIC0gMTsgbSsrKSB7XG5cdFx0XHRpZiAocmV0W21dLmxlbmd0aCA+IDMgJiYgcmV0W21dLnNsaWNlKE1hdGgubWF4KDAsIHJldFttXS5sZW5ndGggLSAzKSkgPT09ICcgwrcgJykge1xuXHRcdFx0XHRyZXRbbV0gKz0gcmV0W20gKyAxXTtcblx0XHRcdFx0cmV0LnNwbGljZShtICsgMSwgMSk7IC8vIGRlbGV0ZSBlbGVtZW50IGF0IGluZGV4IG0rMVxuXHRcdFx0XHRtLS07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldCA9IGA8aHI+JHtyZXQuam9pbignLCAnKX1gO1xuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IEFQSWNvbnRyaWJzUHJldmlld0hUTUwgPSAoYXJ0aWNsZSwgZG93bmxvYWQsIG5hdnBvcCkgPT4ge1xuXHRcdHJldHVybiBBUEloaXN0b3J5UHJldmlld0hUTUwoYXJ0aWNsZSwgZG93bmxvYWQsIG5hdnBvcCwgdHJ1ZSk7XG5cdH07XG5cdGNvbnN0IEFQSWhpc3RvcnlQcmV2aWV3SFRNTCA9IChhcnRpY2xlLCBkb3dubG9hZCwgX25hdnBvcCwgcmVhbGx5Q29udHJpYnMpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QganNvYmogPSBnZXRKc09iaihkb3dubG9hZC5kYXRhKTtcblx0XHRcdGxldCBlZGl0cyA9IFtdO1xuXHRcdFx0ZWRpdHMgPSByZWFsbHlDb250cmlicyA/IGpzb2JqLnF1ZXJ5LnVzZXJjb250cmlicyA6IGFueUNoaWxkKGpzb2JqLnF1ZXJ5LnBhZ2VzKS5yZXZpc2lvbnM7XG5cdFx0XHRjb25zdCByZXQgPSBlZGl0UHJldmlld1RhYmxlKGFydGljbGUsIGVkaXRzLCByZWFsbHlDb250cmlicyk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuICdIaXN0b3J5IHByZXZpZXcgZmFpbGVkIDotKCc7XG5cdFx0fVxuXHR9O1xuXHQvLyBFTkRGSUxFOiBxdWVyeXByZXZpZXcuanNcblx0Ly8gU1RBUlRGSUxFOiBkZWJ1Zy5qc1xuXHQvLyBEZWJ1Z2dpbmcgZnVuY3Rpb25zXG5cdGNvbnN0IHNldHVwRGVidWdnaW5nID0gKCkgPT4ge1xuXHRcdGlmICh3aW5kb3cucG9wdXBEZWJ1Zykge1xuXHRcdFx0Ly8gcG9wdXBEZWJ1ZyBpcyBzZXQgZnJvbSAudmVyc2lvblxuXHRcdFx0d2luZG93LmxvZyA9ICh4KSA9PiB7XG5cdFx0XHRcdC8vIGlmIChnIE1zZyAhPT0gJycpIHsgZ01zZyArPSAnXFxuJzsgZ01zZys9dGltZSgpICsgJyAnICsgeDsgfVxuXHRcdFx0XHRjb25zb2xlLmxvZyh4KTtcblx0XHRcdH07XG5cdFx0XHR3aW5kb3cuZXJybG9nID0gKHgpID0+IHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihgW1BvcHVwc10gJHt4fWApO1xuXHRcdFx0fTtcblx0XHRcdGxvZygnSW5pdGlhbGl6aW5nIGxvZ2dlcicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cubG9nID0gKCkgPT4ge307XG5cdFx0XHR3aW5kb3cuZXJybG9nID0gKCkgPT4ge307XG5cdFx0fVxuXHR9O1xuXHQvLyBFTkRGSUxFOiBkZWJ1Zy5qc1xuXHQvLyBTVEFSVEZJTEU6IGltYWdlcy5qc1xuXHQvLyBsb2FkIGltYWdlIG9mIHR5cGUgVGl0bGUuXG5cdGNvbnN0IGxvYWRJbWFnZSA9IChpbWFnZSwgbmF2cG9wKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBpbWFnZS5zdHJpcE5hbWVzcGFjZSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoJ2xvYWRJbWFnZXMgYmFkJywge3RhZzogJ3BvcHVwcycsIHR5cGU6ICdlcnJvcid9KTtcblx0XHR9XG5cdFx0Ly8gQVBJIGNhbGwgdG8gcmV0cmlldmUgaW1hZ2UgaW5mby5cblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwSW1hZ2VzJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFpc1ZhbGlkSW1hZ2VOYW1lKGltYWdlLnRvU3RyaW5nKCkpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGFydCA9IGltYWdlLnVybFN0cmluZygpO1xuXHRcdGxldCB1cmwgPSBgJHtwZy53aWtpLmFwaXdpa2liYXNlfT9mb3JtYXQ9anNvbiZmb3JtYXR2ZXJzaW9uPTImYWN0aW9uPXF1ZXJ5YDtcblx0XHR1cmwgKz0gYCZwcm9wPWltYWdlaW5mbyZpaXByb3A9dXJsfG1pbWUmaWl1cmx3aWR0aD0ke2dldFZhbHVlT2YoJ3BvcHVwSW1hZ2VTaXplTGFyZ2UnKX1gO1xuXHRcdHVybCArPSBgJnRpdGxlcz0ke2FydH1gO1xuXHRcdHBlbmRpbmdOYXZwb3BUYXNrKG5hdnBvcCk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSAoZCkgPT4ge1xuXHRcdFx0cG9wdXBzSW5zZXJ0SW1hZ2UobmF2cG9wLmlkTnVtYmVyLCBuYXZwb3AsIGQpO1xuXHRcdH07XG5cdFx0Y29uc3QgZ28gPSAoKSA9PiB7XG5cdFx0XHRnZXRQYWdlV2l0aENhY2hpbmcodXJsLCBjYWxsYmFjaywgbmF2cG9wKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0aWYgKG5hdnBvcC52aXNpYmxlIHx8ICFnZXRWYWx1ZU9mKCdwb3B1cExhenlEb3dubG9hZHMnKSkge1xuXHRcdFx0Z28oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmF2cG9wLmFkZEhvb2soZ28sICd1bmhpZGUnLCAnYWZ0ZXInLCAnRE9XTkxPQURfSU1BR0VfUVVFUllfREFUQScpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgcG9wdXBzSW5zZXJ0SW1hZ2UgPSAoaWQsIF9uYXZwb3AsIGRvd25sb2FkKSA9PiB7XG5cdFx0bG9nKCdwb3B1cHNJbnNlcnRJbWFnZScpO1xuXHRcdGxldCBpbWFnZWluZm87XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzT2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBpbWFnZXBhZ2UgPSBhbnlDaGlsZChqc09iai5xdWVyeS5wYWdlcyk7XG5cdFx0XHRpZiAoaW1hZ2VwYWdlLmltYWdlaW5mbyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdFtpbWFnZWluZm9dID0gaW1hZ2VwYWdlLmltYWdlaW5mbztcblx0XHR9IGNhdGNoIHtcblx0XHRcdGxvZygncG9wdXBzSW5zZXJ0SW1hZ2UgZmFpbGVkIDooJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHBvcHVwSW1hZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjcG9wdXBJbWcke2lkfWApO1xuXHRcdGlmICghcG9wdXBJbWFnZSkge1xuXHRcdFx0bG9nKCdjb3VsZCBub3QgZmluZCBpbnNlcnRpb24gcG9pbnQgZm9yIGltYWdlJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHBvcHVwSW1hZ2Uud2lkdGggPSBnZXRWYWx1ZU9mKCdwb3B1cEltYWdlU2l6ZScpO1xuXHRcdHBvcHVwSW1hZ2Uuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuXHRcdC8vIFNldCB0aGUgc291cmNlIGZvciB0aGUgaW1hZ2UuXG5cdFx0aWYgKGltYWdlaW5mby50aHVtYnVybCkge1xuXHRcdFx0cG9wdXBJbWFnZS5zcmMgPSBpbWFnZWluZm8udGh1bWJ1cmw7XG5cdFx0fSBlbHNlIGlmIChpbWFnZWluZm8ubWltZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG5cdFx0XHRwb3B1cEltYWdlLnNyYyA9IGltYWdlaW5mby51cmw7XG5cdFx0XHRsb2coJ2EgdGh1bWIgY291bGQgbm90IGJlIGZvdW5kLCB1c2luZyBvcmlnaW5hbCBpbWFnZScpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2coXCJmdWxsc2l6ZSBpbWFnZXRodW1iLCBidXQgbm90IHN1cmUgaWYgaXQncyBhbiBpbWFnZVwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNwb3B1cEltYWdlTGluayR7aWR9YCk7XG5cdFx0aWYgKGEgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHQvLyBEZXRlcm1pbmUgdGhlIGFjdGlvbiBvZiB0aGUgc3Vycm91ZGluZyBpbWFnZWxpbmsuXG5cdFx0c3dpdGNoIChnZXRWYWx1ZU9mKCdwb3B1cFRodW1iQWN0aW9uJykpIHtcblx0XHRcdGNhc2UgJ2ltYWdlcGFnZSc6XG5cdFx0XHRcdGlmIChwZy5jdXJyZW50LmFydGljbGUubmFtZXNwYWNlSWQoKSAhPT0gcGcubnNJbWFnZUlkKSB7XG5cdFx0XHRcdFx0YS5ocmVmID0gaW1hZ2VpbmZvLmRlc2NyaXB0aW9udXJsO1xuXHRcdFx0XHRcdC8vIEZJWE1FOiB1bnJlbGlhYmxlIHBnLmlkTnVtYmVyXG5cdFx0XHRcdFx0cG9wVGlwc1Nvb25GbihgcG9wdXBJbWFnZSR7aWR9YCkoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Y2FzZSAnc2l6ZXRvZ2dsZSc6XG5cdFx0XHRcdGEub25jbGljayA9IHRvZ2dsZVNpemU7XG5cdFx0XHRcdGEudGl0bGUgPSBwb3B1cFN0cmluZygnVG9nZ2xlIGltYWdlIHNpemUnKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0Y2FzZSAnbGlua2Z1bGwnOlxuXHRcdFx0XHRhLmhyZWYgPSBpbWFnZWluZm8udXJsO1xuXHRcdFx0XHRhLnRpdGxlID0gcG9wdXBTdHJpbmcoJ09wZW4gZnVsbC1zaXplIGltYWdlJyk7XG5cdFx0fVxuXHR9O1xuXHQvLyBUb2dnbGVzIHRoZSBpbWFnZSBiZXR3ZWVuIGlubGluZSBzbWFsbCBhbmQgbmF2cG9wIGZ1bGx3aWR0aC5cblx0Ly8gSXQncyB0aGUgc2FtZSBpbWFnZSwgbm8gYWN0dWFsIHNpemVjaGFuZ2Ugb2NjdXJzLCBvbmx5IGRpc3BsYXkgd2lkdGguXG5cdGNvbnN0IHRvZ2dsZVNpemUgPSBmdW5jdGlvbiB0b2dnbGVTaXplKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghc2VsZikge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoJ3NlbGYgaXMgbnVsbCA6LycsIHt0YWc6ICdwb3B1cHMnLCB0eXBlOiAnZXJyb3InfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGltZyA9IHNlbGYuZmlyc3RDaGlsZDtcblx0XHRpZiAoIWltZykge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoJ2ltZyBpcyBudWxsIDovJywge3RhZzogJ3BvcHVwcycsIHR5cGU6ICdlcnJvcid9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW1nLnN0eWxlLndpZHRoID0gIWltZy5zdHlsZS53aWR0aCB8fCBpbWcuc3R5bGUud2lkdGggPT09ICcnID8gJzEwMCUnIDogJyc7XG5cdH07XG5cdC8vIFJldHVybnMgb25lIHRpdGxlIG9mIGFuIGltYWdlIGZyb20gd2lraVRleHQuXG5cdGNvbnN0IGdldFZhbGlkSW1hZ2VGcm9tV2lraVRleHQgPSAod2lraVRleHQpID0+IHtcblx0XHQvLyBuYiBpbiBwZy5yZS5pbWFnZSB3ZSdyZSBpbnRlcmVzdGVkIGluIHRoZSBzZWNvbmQgYnJhY2tldGVkIGV4cHJlc3Npb25cblx0XHQvLyB0aGlzIG1heSBjaGFuZ2UgaWYgdGhlIHJlZ2V4IGNoYW5nZXMgOi0oXG5cdFx0Ly8gbGV0IG1hdGNoPXBnLnJlLmltYWdlLmV4ZWMod2lraVRleHQpO1xuXHRcdGxldCBtYXRjaGVkO1xuXHRcdGxldCBtYXRjaDtcblx0XHQvLyBzdHJpcCBodG1sIGNvbW1lbnRzLCB1c2VkIGJ5IGV2aWwgYm90cyA6LShcblx0XHRjb25zdCB0ID0gcmVtb3ZlTWF0Y2hlc1VubGVzcyh3aWtpVGV4dCwgLyg8IS0tW1xcU1xcc10qPy0tPikvLCAxLCAvXjwhLS1bXltdKnBvcHVwL2kpO1xuXHRcdHdoaWxlICgobWF0Y2ggPSBwZy5yZS5pbWFnZS5leGVjKHQpKSAhPT0gbnVsbCkge1xuXHRcdFx0Ly8gbm93IGZpbmQgYSBzYW5lIGltYWdlIG5hbWUgLSBleGNsdWRlIHRlbXBsYXRlcyBieSBzZWVraW5nIHtcblx0XHRcdGNvbnN0IG0gPSBtYXRjaFsyXSB8fCBtYXRjaFs2XTtcblx0XHRcdGlmIChpc1ZhbGlkSW1hZ2VOYW1lKG0pKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cGcucmUuaW1hZ2UubGFzdEluZGV4ID0gMDtcblx0XHRpZiAoIW1hdGNoZWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gYCR7bXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbcGcubnNJbWFnZUlkXX06JHt1cGNhc2VGaXJzdChtYXRjaGVkKX1gO1xuXHR9O1xuXHRjb25zdCByZW1vdmVNYXRjaGVzVW5sZXNzID0gKHN0ciwgcmUxLCBwYXJlbmNvdW50LCByZTIpID0+IHtcblx0XHRjb25zdCBzcGxpdCA9IHN0ci5zcGxpdChyZTEpO1xuXHRcdGNvbnN0IGMgPSBwYXJlbmNvdW50ICsgMTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAoaSAlIGMgPT09IDAgfHwgcmUyLnRlc3Qoc3BsaXRbaV0pKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0c3BsaXRbaV0gPSAnJztcblx0XHR9XG5cdFx0cmV0dXJuIHNwbGl0LmpvaW4oJycpO1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBpbWFnZXMuanNcblx0Ly8gU1RBUlRGSUxFOiBuYW1lc3BhY2VzLmpzXG5cdC8vIFNldCB1cCBuYW1lc3BhY2VzIGFuZCBvdGhlciBub24tc3RyaW5ncy5qcyBsb2NhbGl6YXRpb25cblx0Ly8gKGN1cnJlbnRseSB0aGF0IG1lYW5zIHJlZGlycyB0b28pXG5cdGNvbnN0IHNldE5hbWVzcGFjZXMgPSAoKSA9PiB7XG5cdFx0cGcubnNTcGVjaWFsSWQgPSAtMTtcblx0XHRwZy5uc01haW5zcGFjZUlkID0gMDtcblx0XHRwZy5uc0ltYWdlSWQgPSA2O1xuXHRcdHBnLm5zVXNlcklkID0gMjtcblx0XHRwZy5uc1VzZXJ0YWxrSWQgPSAzO1xuXHRcdHBnLm5zQ2F0ZWdvcnlJZCA9IDE0O1xuXHRcdHBnLm5zVGVtcGxhdGVJZCA9IDEwO1xuXHR9O1xuXHRjb25zdCBzZXRSZWRpcnMgPSAoKSA9PiB7XG5cdFx0Y29uc3QgciA9ICdyZWRpcmVjdCc7XG5cdFx0Y29uc3QgUiA9ICdSRURJUkVDVCc7XG5cdFx0Y29uc3QgcmVkaXJMaXN0cyA9IHtcblx0XHRcdGFyOiBbUiwgJ9iq2K3ZiNmK2YQnXSxcblx0XHRcdGJlOiBbciwgJ9C/0LXRgNCw0L3QsNC60ZbRgNCw0LLQsNC90YzQvdC1J10sXG5cdFx0XHRiZzogW3IsICfQv9GA0LXQvdCw0YHQvtGH0LLQsNC90LUnLCAn0LLQuNC2J10sXG5cdFx0XHRiczogW3IsICdQcmV1c21qZXJpJywgJ3ByZXVzbWplcmknLCAnUFJFVVNNSkVSSSddLFxuXHRcdFx0Ym46IFtSLCAn4Kaq4KeB4Kao4Kaw4KeN4Kao4Ka/4Kaw4KeN4Kam4KeH4Ka2J10sXG5cdFx0XHRjczogW1IsICdQxZhFU03EmlJVSiddLFxuXHRcdFx0Y3k6IFtyLCAnYWlsLWN5ZmVpcmlvJ10sXG5cdFx0XHRkZTogW1IsICdXRUlURVJMRUlUVU5HJ10sXG5cdFx0XHRlbDogW1IsICfOkc6dzpHOms6RzqTOlc6lzpjOpc6dzqPOlyddLFxuXHRcdFx0ZW86IFtSLCAnQUxJRElSRUtUVScsICdBTElESVJFS1RJJ10sXG5cdFx0XHRlczogW1IsICdSRURJUkVDQ0nDk04nXSxcblx0XHRcdGV0OiBbciwgJ3N1dW5hJ10sXG5cdFx0XHRnYTogW3IsICdhdGhzaGVvbGFkaCddLFxuXHRcdFx0Z2w6IFtyLCAnUkVESVJFQ0NJw5NOJywgJ1JFRElSRUNJT05BTUVOVE8nXSxcblx0XHRcdGhlOiBbUiwgJ9eU16TXoNeZ15QnXSxcblx0XHRcdGh1OiBbUiwgJ8OBVElSw4FOWcONVMOBUyddLFxuXHRcdFx0aXM6IFtyLCAndGlsdsOtc3VuJywgJ1RJTFbDjVNVTiddLFxuXHRcdFx0aXQ6IFtSLCAnUklOVklBJywgJ1JpbnZpYSddLFxuXHRcdFx0amE6IFtSLCAn6Lui6YCBJ10sXG5cdFx0XHRtazogW3IsICfQv9GA0LXQvdCw0YHQvtGH0YPQstCw0ZrQtScsICfQstC40LTQuCddLFxuXHRcdFx0bmRzOiBbciwgJ3dpZWRlcmxlaWRlbiddLFxuXHRcdFx0J25kcy1ubCc6IFtSLCAnREVVUlZFUldJRVpJTkcnLCAnRFVVUlZFUldJRVpJTkcnXSxcblx0XHRcdG5sOiBbUiwgJ0RPT1JWRVJXSUpaSU5HJ10sXG5cdFx0XHRubjogW3IsICdvbWRpcmlnZXInXSxcblx0XHRcdHBsOiBbUiwgJ1BBVFJaJywgJ1BSWkVLSUVSVUonLCAnVEFNJ10sXG5cdFx0XHRwdDogW1IsICdyZWRpciddLFxuXHRcdFx0cnU6IFtSLCAn0J/QldCg0JXQndCQ0J/QoNCQ0JLQm9CV0J3QmNCVJywgJ9Cf0JXQoNCV0J3QkNCf0KAnXSxcblx0XHRcdHNrOiBbciwgJ3ByZXNtZXJ1aiddLFxuXHRcdFx0c3I6IFtyLCAn0J/RgNC10YPRgdC80LXRgNC4JywgJ9C/0YDQtdGD0YHQvNC10YDQuCcsICfQn9Cg0JXQo9Ch0JzQldCg0JgnLCAnUHJldXNtZXJpJywgJ3ByZXVzbWVyaScsICdQUkVVU01FUkknXSxcblx0XHRcdHR0OiBbUiwgJ3nDvG7DpGx0w7wnLCAn0L/QtdGA0LXQvdCw0L/RgNCw0LLQu9C10L3QuNC1JywgJ9C/0LXRgNC10L3QsNC/0YAnXSxcblx0XHRcdHVrOiBbUiwgJ9Cf0JXQoNCV0J3QkNCf0KDQkNCS0JvQldCd0J3QrycsICfQn9CV0KDQldCd0JDQn9CgJ10sXG5cdFx0XHR2aTogW3IsICfEkeG7lWknXSxcblx0XHRcdHlpOiBbUiwgJ9eV15XXmdeZ15jXoteo16TXmdeo158nXSxcblx0XHRcdHpoOiBbUiwgJ+mHjeWumuWQkSddLCAvLyBubyBjb21tYVxuXHRcdH07XG5cdFx0Y29uc3QgcmVkaXJMaXN0ID0gcmVkaXJMaXN0c1twZy53aWtpLmxhbmddIHx8IFtyLCBSXTtcblx0XHQvLyBNZWRpYXdpa2kgaXMgdmVyeSB0b2xlcmFudCBhYm91dCB3aGF0IGNvbWVzIGFmdGVyIHRoZSAjcmVkaXJlY3QgYXQgdGhlIHN0YXJ0XG5cdFx0cGcucmUucmVkaXJlY3QgPSBuZXcgUmVnRXhwKFxuXHRcdFx0YF5cXFxccypbI10oJHtyZWRpckxpc3Quam9pbignfCcpfSkuKj9cXFxcW3syfShbXlxcXFx8XFxcXF1dKikofFteXFxcXF1dKik/XFxcXF17Mn1cXFxccyooLiopYCxcblx0XHRcdCdpJ1xuXHRcdCk7XG5cdH07XG5cdGNvbnN0IHNldEludGVyd2lraSA9ICgpID0+IHtcblx0XHRpZiAocGcud2lraS53aWtpbWVkaWEpIHtcblx0XHRcdC8vIEZyb20ge0BsaW5rIGh0dHBzOi8vbWV0YS53aWtpbWVkaWEub3JnL3dpa2kvTGlzdF9vZl9XaWtpcGVkaWFzfVxuXHRcdFx0Ly8ge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93L2FwaS5waHA/YWN0aW9uPXNpdGVtYXRyaXgmZm9ybWF0PWpzb24mc210eXBlPWxhbmd1YWdlJnNtbGFuZ3Byb3A9Y29kZSZmb3JtYXR2ZXJzaW9uPTJ9XG5cdFx0XHRwZy53aWtpLmludGVyd2lraSA9XG5cdFx0XHRcdCdhYXxhYnxhY2V8YWZ8YWt8YWxzfGFtfGFufGFuZ3xhcnxhcmN8YXJ6fGFzfGFzdHxhdnxheXxhenxiYXxiYXJ8YmF0LXNtZ3xiY2x8YmV8YmUteC1vbGR8Ymd8Ymh8Yml8YmpufGJtfGJufGJvfGJweXxicnxic3xidWd8YnhyfGNhfGNiay16YW18Y2RvfGNlfGNlYnxjaHxjaG98Y2hyfGNoeXxja2J8Y298Y3J8Y3JofGNzfGNzYnxjdXxjdnxjeXxkYXxkZXxkaXF8ZHNifGR2fGR6fGVlfGVsfGVtbHxlbnxlb3xlc3xldHxldXxleHR8ZmF8ZmZ8Zml8Zml1LXZyb3xmanxmb3xmcnxmcnB8ZnJyfGZ1cnxmeXxnYXxnYWd8Z2FufGdkfGdsfGdsa3xnbnxnb3R8Z3V8Z3Z8aGF8aGFrfGhhd3xoZXxoaXxoaWZ8aG98aHJ8aHNifGh0fGh1fGh5fGh6fGlhfGlkfGllfGlnfGlpfGlrfGlsb3xpb3xpc3xpdHxpdXxqYXxqYm98anZ8a2F8a2FhfGthYnxrYmR8a2d8a2l8a2p8a2t8a2x8a218a258a298a29pfGtyfGtyY3xrc3xrc2h8a3V8a3Z8a3d8a3l8bGF8bGFkfGxifGxiZXxsZ3xsaXxsaWp8bG1vfGxufGxvfGx0fGx0Z3xsdnxtYXAtYm1zfG1kZnxtZ3xtaHxtaHJ8bWl8bWt8bWx8bW58bW98bXJ8bXJqfG1zfG10fG11c3xtd2x8bXl8bXl2fG16bnxuYXxuYWh8bmFwfG5kc3xuZHMtbmx8bmV8bmV3fG5nfG5sfG5ufG5vfG5vdnxucm18bnZ8bnl8b2N8b218b3J8b3N8cGF8cGFnfHBhbXxwYXB8cGNkfHBkY3xwZmx8cGl8cGlofHBsfHBtc3xwbmJ8cG50fHBzfHB0fHF1fHJtfHJteXxybnxyb3xyb2EtcnVwfHJvYS10YXJhfHJ1fHJ1ZXxyd3xzYXxzYWh8c2N8c2NufHNjb3xzZHxzZXxzZ3xzaHxzaXxzaW1wbGV8c2t8c2x8c218c258c298c3F8c3J8c3JufHNzfHN0fHN0cXxzdXxzdnxzd3xzemx8dGF8dGV8dGV0fHRnfHRofHRpfHRrfHRsfHRufHRvfHRwaXx0cnx0c3x0dHx0dW18dHd8dHl8dWRtfHVnfHVrfHVyfHV6fHZlfHZlY3x2aXx2bHN8dm98d2F8d2FyfHdvfHd1dXx4YWx8eGh8eWl8eW98emF8emVhfHpofHpoLWNsYXNzaWNhbHx6aC1taW4tbmFufHpoLXl1ZXx6dSc7XG5cdFx0XHRwZy5yZS5pbnRlcndpa2kgPSBuZXcgUmVnRXhwKGBeJHtwZy53aWtpLmludGVyd2lraX06YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBnLndpa2kuaW50ZXJ3aWtpID0gbnVsbDtcblx0XHRcdHBnLnJlLmludGVyd2lraSA9IC9eJC87XG5cdFx0fVxuXHR9O1xuXHQvLyByZXR1cm4gYSByZWdleHAgcGF0dGVybiBtYXRjaGluZyBhbGwgdmFyaWFudHMgdG8gd3JpdGUgdGhlIGdpdmVuIG5hbWVzcGFjZVxuXHRjb25zdCBuc1JlID0gKG5hbWVzcGFjZUlkKSA9PiB7XG5cdFx0Y29uc3QgaW1hZ2VOYW1lc3BhY2VWYXJpYW50cyA9IFtdO1xuXHRcdGZvciAoY29uc3QgW19sb2NhbGl6ZWROYW1lc3BhY2VMYywgX25hbWVzcGFjZUlkXSBvZiBPYmplY3QuZW50cmllcyhtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpKSkge1xuXHRcdFx0aWYgKF9uYW1lc3BhY2VJZCAhPT0gbmFtZXNwYWNlSWQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBsb2NhbGl6ZWROYW1lc3BhY2VMYyA9IHVwY2FzZUZpcnN0KF9sb2NhbGl6ZWROYW1lc3BhY2VMYyk7XG5cdFx0XHRpbWFnZU5hbWVzcGFjZVZhcmlhbnRzLnB1c2goXG5cdFx0XHRcdG13LnV0aWwuZXNjYXBlUmVnRXhwKGxvY2FsaXplZE5hbWVzcGFjZUxjKS5zcGxpdCgnICcpLmpvaW4oJ1sgX10nKSxcblx0XHRcdFx0bXcudXRpbC5lc2NhcGVSZWdFeHAoZW5jb2RlVVJJKGxvY2FsaXplZE5hbWVzcGFjZUxjKSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBgKD86JHtpbWFnZU5hbWVzcGFjZVZhcmlhbnRzLmpvaW4oJ3wnKX0pYDtcblx0fTtcblx0Y29uc3QgbnNSZUltYWdlID0gKCkgPT4ge1xuXHRcdHJldHVybiBuc1JlKHBnLm5zSW1hZ2VJZCk7XG5cdH07XG5cdC8vIEVOREZJTEU6IG5hbWVzcGFjZXMuanNcblx0Ly8gU1RBUlRGSUxFOiBzZWxwb3AuanNcblx0Y29uc3QgZ2V0RWRpdGJveFNlbGVjdGlvbiA9ICgpID0+IHtcblx0XHQvLyBzZWUge0BsaW5rIGh0dHA6Ly93d3cud2ViZ3VydXNmb3J1bS5jb20vOC8xMi8wfVxuXHRcdGxldCBlZGl0Ym94O1xuXHRcdHRyeSB7XG5cdFx0XHRlZGl0Ym94ID0gZG9jdW1lbnQuZWRpdGZvcm0ud3BUZXh0Ym94MTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gSUUsIE9wZXJhXG5cdFx0aWYgKGRvY3VtZW50LnNlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQ7XG5cdFx0fVxuXHRcdC8vIE1vemlsbGFcblx0XHRjb25zdCBzZWxTdGFydCA9IGVkaXRib3guc2VsZWN0aW9uU3RhcnQ7XG5cdFx0Y29uc3Qgc2VsRW5kID0gZWRpdGJveC5zZWxlY3Rpb25FbmQ7XG5cdFx0cmV0dXJuIGVkaXRib3gudmFsdWUuc3Vic3RyaW5nKHNlbFN0YXJ0LCBzZWxFbmQpO1xuXHR9O1xuXHRjb25zdCBkb1NlbGVjdGlvblBvcHVwID0gKCkgPT4ge1xuXHRcdC8vIHBvcHVwIGlmIHRoZSBzZWxlY3Rpb24gbG9va3MgbGlrZSBbW2Zvb3xhbnl0aGluZyBhZnRlcndhcmRzIGF0IGFsbFxuXHRcdC8vIG9yIFtbZm9vfGJhcl1ddGV4dCB3aXRob3V0ICddXSdcblx0XHQvLyBvciBbW2Zvb3xiYXJdXVxuXHRcdGNvbnN0IHNlbCA9IGdldEVkaXRib3hTZWxlY3Rpb24oKTtcblx0XHRjb25zdCBvcGVuID0gc2VsLmluZGV4T2YoJ1tbJyk7XG5cdFx0Y29uc3QgcGlwZSA9IHNlbC5pbmRleE9mKCd8Jyk7XG5cdFx0Y29uc3QgY2xvc2UgPSBzZWwuaW5kZXhPZignXV0nKTtcblx0XHRpZiAob3BlbiA9PT0gLTEgfHwgKHBpcGUgPT09IC0xICYmIGNsb3NlID09PSAtMSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKChwaXBlICE9PSAtMSAmJiBvcGVuID4gcGlwZSkgfHwgKGNsb3NlICE9PSAtMSAmJiBvcGVuID4gY2xvc2UpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGFydGljbGUgPSBuZXcgVGl0bGUoc2VsLnN1YnN0cmluZyhvcGVuICsgMiwgcGlwZSA8IDAgPyBjbG9zZSA6IHBpcGUpKTtcblx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBPbkVkaXRTZWxlY3Rpb24nKSA9PT0gJ2JveHByZXZpZXcnKSB7XG5cdFx0XHRyZXR1cm4gZG9TZXBhcmF0ZVNlbGVjdGlvblBvcHVwKHNlbCwgYXJ0aWNsZSk7XG5cdFx0fVxuXHRcdGlmIChjbG9zZSA+IDAgJiYgc2VsLnNsaWNlKE1hdGgubWF4KDAsIGNsb3NlICsgMikpLmluY2x1ZGVzKCdbWycpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0YS5ocmVmID0gcGcud2lraS50aXRsZWJhc2UgKyBhcnRpY2xlLnVybFN0cmluZygpO1xuXHRcdG1vdXNlT3Zlcldpa2lMaW5rMihhKTtcblx0XHRpZiAoYS5uYXZwb3B1cCkge1xuXHRcdFx0YS5uYXZwb3B1cC5hZGRIb29rKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0cnVuU3RvcFBvcHVwVGltZXIoYS5uYXZwb3B1cCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCd1bmhpZGUnLFxuXHRcdFx0XHQnYWZ0ZXInXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgZG9TZXBhcmF0ZVNlbGVjdGlvblBvcHVwID0gKHN0ciwgYXJ0aWNsZSkgPT4ge1xuXHRcdGxldCBkaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0aW9uUHJldmlldycpO1xuXHRcdGlmICghZGl2KSB7XG5cdFx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdGRpdi5pZCA9ICdzZWxlY3Rpb25QcmV2aWV3Jztcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGJveCA9IGRvY3VtZW50LmVkaXRmb3JtLndwVGV4dGJveDE7XG5cdFx0XHRcdGJveC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkaXYsIGJveCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBwID0gcHJlcFByZXZpZXdtYWtlcihzdHIsIGFydGljbGUsIG5ld05hdnBvcHVwKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKSwgYXJ0aWNsZSkpO1xuXHRcdHAubWFrZVByZXZpZXcoKTtcblx0XHRpZiAocC5odG1sKSB7XG5cdFx0XHRkaXYuaW5uZXJIVE1MID0gcC5odG1sO1xuXHRcdH1cblx0XHRkaXYucmFuU2V0dXBUb29sdGlwc0FscmVhZHkgPSBmYWxzZTtcblx0XHRwb3BUaXBzU29vbkZuKCdzZWxlY3Rpb25QcmV2aWV3JykoKTtcblx0fTtcblx0Ly8gRU5ERklMRTogc2VscG9wLmpzXG5cdC8vIFNUQVJURklMRTogbmF2cG9wdXAuanNcblx0LyoqXG5cdCAqIEBmaWxlb3ZlcnZpZXcgIERlZmluZXMgdHdvIGNsYXNzZXM6IHtAc291cmNlIE5hdnBvcHVwfSBhbmQge0Bzb3VyY2UgTW91c2V0cmFja2VyfS5cblx0ICpcblx0ICogPGNvZGU+TmF2cG9wdXA8L2NvZGU+IGRlc2NyaWJlcyBwb3B1cHM6IHdoZW4gdGhleSBhcHBlYXIsIHdoZXJlLCB3aGF0XG5cdCAqIHRoZXkgbG9vayBsaWtlIGFuZCBzbyBvbi5cblx0ICpcblx0ICogPGNvZGU+TW91c2V0cmFja2VyPC9jb2RlPiBcImNhcHR1cmVzXCIgdGhlIG1vdXNlIHVzaW5nXG5cdCAqIDxjb2RlPmRvY3VtZW50Lm9ubW91c2Vtb3ZlPC9jb2RlPi5cblx0ICovXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IE1vdXNldHJhY2tlci5cblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBjbGFzcyBUaGUgTW91c2V0cmFja2VyIGNsYXNzLiBUaGlzIG1vbml0b3JzIG1vdXNlIG1vdmVtZW50cyBhbmQgbWFuYWdlcyBhc3NvY2lhdGVkIGhvb2tzLlxuXHQgKi9cblx0Y2xhc3MgTW91c2V0cmFja2VyIHtcblx0XHRjb25zdHJ1Y3RvcigpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSW50ZXJ2YWwgdG8gcmVndWxhcmx5IHJ1biB0aGUgaG9va3MgYW55d2F5LCBpbiBtaWxsaXNlY29uZHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgSW50ZWdlclxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmxvb3BEZWxheSA9IDQwMDtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGltZXIgZm9yIHRoZSBsb29wLlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIFRpbWVyXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudGltZXIgPSBudWxsO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBGbGFnIC0gYXJlIHdlIHN3aXRjaGVkIG9uP1xuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5hY3RpdmUgPSBmYWxzZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogRmxhZyAtIGFyZSB3ZSBwcm9iYWJseSBpbmFjY3VyYXRlLCBpLmUuIG5vdCByZWZsZWN0aW5nIHRoZSBhY3R1YWwgbW91c2UgcG9zaXRpb24/XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBBcnJheSBvZiBob29rIGZ1bmN0aW9ucy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUgQXJyYXlcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5ob29rcyA9IFtdO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBBZGRzIGEgaG9vaywgdG8gYmUgY2FsbGVkIHdoZW4gd2UgZ2V0IGV2ZW50cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IGYgQSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgYXNcblx0XHQgKiA8Y29kZT5mKHgseSk8L2NvZGU+LiBJdCBzaG91bGQgcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gaXRcblx0XHQgKiB3YW50cyB0byBiZSByZW1vdmVkLCBhbmQgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS5cblx0XHQgKi9cblx0XHRhZGRIb29rKGYpIHtcblx0XHRcdHRoaXMuaG9va3MucHVzaChmKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUnVucyBob29rcywgcGFzc2luZyB0aGVtIHRoZSB4XG5cdFx0ICogYW5kIHkgY29vcmRzIG9mIHRoZSBtb3VzZS4gIEhvb2sgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRydWUgYXJlXG5cdFx0ICogcGFzc2VkIHRvIHtAc291cmNlIE1vdXNldHJhY2tlciNyZW1vdmVIb29rc30gZm9yIHJlbW92YWwuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHJ1bkhvb2tzKCkge1xuXHRcdFx0aWYgKCF0aGlzLmhvb2tzIHx8IHRoaXMuaG9va3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGxvZygnTW91c2V0cmFja2VyLnJ1bkhvb2tzOyB3ZSBnb3Qgc29tZSBob29rcyB0byBydW4nKTtcblx0XHRcdGxldCByZW1vdmUgPSBmYWxzZTtcblx0XHRcdGNvbnN0IHJlbW92ZU9iaiA9IHt9O1xuXHRcdFx0Ly8gdGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQgYSBMT1QgLVxuXHRcdFx0Ly8gcHJlLWNhY2hlIHNvbWUgdmFyaWFibGVzXG5cdFx0XHRjb25zdCB7eH0gPSB0aGlzO1xuXHRcdFx0Y29uc3Qge3l9ID0gdGhpcztcblx0XHRcdGNvbnN0IGxlbiA9IHRoaXMuaG9va3MubGVuZ3RoO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0XHQvLyB+IHJ1biB0aGUgaG9vayBmdW5jdGlvbiwgYW5kIHJlbW92ZSBpdCBpZiBpdCByZXR1cm5zIHRydWVcblx0XHRcdFx0aWYgKHRoaXMuaG9va3NbaV0oeCwgeSkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRyZW1vdmUgPSB0cnVlO1xuXHRcdFx0XHRcdHJlbW92ZU9ialtpXSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChyZW1vdmUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVIb29rcyhyZW1vdmVPYmopO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIGhvb2tzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlT2JqIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgaW5kZXhcblx0XHQgKiBudW1iZXJzIG9mIGZ1bmN0aW9ucyBmb3IgcmVtb3ZhbCwgd2l0aCB2YWx1ZXMgdGhhdCBldmFsdWF0ZSB0byB0cnVlXG5cdFx0ICovXG5cdFx0cmVtb3ZlSG9va3MocmVtb3ZlT2JqKSB7XG5cdFx0XHRjb25zdCBuZXdIb29rcyA9IFtdO1xuXHRcdFx0Y29uc3QgbGVuID0gdGhpcy5ob29rcy5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRcdGlmICghcmVtb3ZlT2JqW2ldKSB7XG5cdFx0XHRcdFx0bmV3SG9va3MucHVzaCh0aGlzLmhvb2tzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5ob29rcyA9IG5ld0hvb2tzO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBFdmVudCBsaXN0ZW5lciBmb3IgbW91c2Ugd2lnZ2xlcy5cblx0XHQgKiBXZSBzaW1wbHkgZ3JhYiB0aGUgZXZlbnQsIHNldCB4IGFuZCB5IGFuZCBydW4gdGhlIGhvb2tzLlxuXHRcdCAqIFRoaXMgbWFrZXMgdGhlIGNwdSBhbGwgaG90IGFuZCBib3RoZXJlZCA6LShcblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtFdmVudH0gZSBNb3VzZW1vdmUgZXZlbnRcblx0XHQgKi9cblx0XHR0cmFjayhlKSB7XG5cdFx0XHQvLyB+IEFwcGFyZW50bHkgdGhpcyBpcyBuZWVkZWQgaW4gSUUuXG5cdFx0XHRlIHx8PSB3aW5kb3cuZXZlbnQ7XG5cdFx0XHRsZXQgeDtcblx0XHRcdGxldCB5O1xuXHRcdFx0aWYgKGUpIHtcblx0XHRcdFx0aWYgKGUucGFnZVgpIHtcblx0XHRcdFx0XHR4ID0gZS5wYWdlWDtcblx0XHRcdFx0XHR5ID0gZS5wYWdlWTtcblx0XHRcdFx0fSBlbHNlIGlmIChlLmNsaWVudFggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsZXQgbGVmdDtcblx0XHRcdFx0XHRsZXQgdG9wO1xuXHRcdFx0XHRcdGNvbnN0IGRvY0VsdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0XHRcdFx0XHRpZiAoZG9jRWx0KSB7XG5cdFx0XHRcdFx0XHRsZWZ0ID0gZG9jRWx0LnNjcm9sbExlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGxlZnQgfHw9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LnNjcm9sbExlZnQgfHwgMDtcblx0XHRcdFx0XHRpZiAoZG9jRWx0KSB7XG5cdFx0XHRcdFx0XHR0b3AgPSBkb2NFbHQuc2Nyb2xsVG9wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0b3AgfHw9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuc2Nyb2xsVG9wIHx8IDA7XG5cdFx0XHRcdFx0eCA9IGUuY2xpZW50WCArIGxlZnQ7XG5cdFx0XHRcdFx0eSA9IGUuY2xpZW50WSArIHRvcDtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHN0b3JlZCBhbmQgdGFrZXMgYXBwcm9wcmlhdGUgYWN0aW9uLFxuXHRcdCAqIHJ1bm5pbmcgaG9va3MgYXMgYXBwcm9wcmlhdGUuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0ludGVnZXJ9IHgsIHkgU2NyZWVuIGNvb3JkaW5hdGVzIHRvIHNldFxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSB4XG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IHlcblx0XHQgKi9cblx0XHRzZXRQb3NpdGlvbih4LCB5KSB7XG5cdFx0XHR0aGlzLnggPSB4O1xuXHRcdFx0dGhpcy55ID0geTtcblx0XHRcdGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuaG9va3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLmxhc3RIb29rX3ggIT09ICdudW1iZXInKSB7XG5cdFx0XHRcdHRoaXMubGFzdEhvb2tfeCA9IC0xMDA7XG5cdFx0XHRcdHRoaXMubGFzdEhvb2tfeSA9IC0xMDA7XG5cdFx0XHR9XG5cdFx0XHRsZXQgZGlmZiA9ICh0aGlzLmxhc3RIb29rX3ggLSB4KSAqICh0aGlzLmxhc3RIb29rX3kgLSB5KTtcblx0XHRcdGRpZmYgPSBkaWZmID49IDAgPyBkaWZmIDogLWRpZmY7XG5cdFx0XHRpZiAoZGlmZiA+IDEpIHtcblx0XHRcdFx0dGhpcy5sYXN0SG9va194ID0geDtcblx0XHRcdFx0dGhpcy5sYXN0SG9va195ID0geTtcblx0XHRcdFx0aWYgKHRoaXMuZGlydHkpIHtcblx0XHRcdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5ydW5Ib29rcygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhpbmdzIGluIG1vdGlvbiwgdW5sZXNzIHRoZXkgYXJlIGFscmVhZHkgdGhhdCBpcywgcmVnaXN0ZXJpbmcgYW4gZXZlbnQgbGlzdGVuZXIgb25cblx0XHQgKiA8Y29kZT5kb2N1bWVudC5vbm1vdXNlbW92ZTwvY29kZT4uIEEgaGFsZi1oZWFydGVkIGF0dGVtcHQgaXMgbWFkZSB0byBwcmVzZXJ2ZSB0aGUgb2xkIGV2ZW50XG5cdFx0ICogbGlzdGVuZXIgaWYgdGhlcmUgaXMgb25lLlxuXHRcdCAqL1xuXHRcdGVuYWJsZSgpIHtcblx0XHRcdGlmICh0aGlzLmFjdGl2ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFjdGl2ZSA9IHRydWU7XG5cdFx0XHQvLyB+IFNhdmUgdGhlIGN1cnJlbnQgbGlzdGVuZXIgZm9yIG1vdXNlbW92ZSBldmVudHMuIFRoaXMgaXNuJ3QgdG9vXG5cdFx0XHQvLyB+IHJvYnVzdCwgb2YgY291cnNlLlxuXHRcdFx0dGhpcy5zYXZlZExpc3RlbmVyID0gZG9jdW1lbnQub25tb3VzZW1vdmU7XG5cdFx0XHQvLyB+IEdvdHRhIHNhdmUgQHR0e3RoaXN9IGFnYWluIGZvciB0aGUgY2xvc3VyZSwgYW5kIHVzZSBhcHBseSBmb3Jcblx0XHRcdC8vIH4gdGhlIG1lbWJlciBmdW5jdGlvbi5cblx0XHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSAoZSkgPT4ge1xuXHRcdFx0XHRzZWxmLnRyYWNrKGUpO1xuXHRcdFx0fTtcblx0XHRcdGlmICh0aGlzLmxvb3BEZWxheSkge1xuXHRcdFx0XHR0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGxvZygnbG9vcCBkZWxheSBpbiBtb3VzZXRyYWNrZXIgaXMgd29ya2luZycpO1xuXHRcdFx0XHRcdHNlbGYucnVuSG9va3MoKTtcblx0XHRcdFx0fSwgdGhpcy5sb29wRGVsYXkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBEaXNhYmxlcyB0aGUgdHJhY2tlciwgcmVtb3ZpbmcgdGhlIGV2ZW50IGxpc3RlbmVyLlxuXHRcdCAqL1xuXHRcdGRpc2FibGUoKSB7XG5cdFx0XHRpZiAoIXRoaXMuYWN0aXZlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhpcy5zYXZlZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gdGhpcy5zYXZlZExpc3RlbmVyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIGRvY3VtZW50Lm9ubW91c2Vtb3ZlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMudGltZXIpIHtcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IE5hdnBvcHVwLlxuXHQgKiBHZXRzIGEgVUlEIGZvciB0aGUgcG9wdXAgYW5kXG5cdCAqXG5cdCAqIEBwYXJhbSBpbml0IENvbnRydWN0b3Igb2JqZWN0LiBJZiA8Y29kZT5pbml0LmRyYWdnYWJsZTwvY29kZT4gaXMgdHJ1ZSBvciBhYnNlbnQsIHRoZSBwb3B1cCBiZWNvbWVzIGRyYWdnYWJsZS5cblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBjbGFzcyBUaGUgTmF2cG9wdXAgY2xhc3MuIFRoaXMgZ2VuZXJhdGVzIHBvcHVwIGhpbnRzLCBhbmQgZG9lcyBzb21lIG1hbmFnZW1lbnQgb2YgdGhlbS5cblx0ICovXG5cdGNsYXNzIE5hdnBvcHVwIHtcblx0XHRjb25zdHJ1Y3RvcigpIHtcblx0XHRcdC8vIG13Lm5vdGlmeSgnbmV3IE5hdnBvcHVwKGluaXQpJywge3RhZzogJ3BvcHVwcycsIHR5cGU6ICd3YXJuJ30pO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBVSUQgZm9yIGVhY2ggTmF2cG9wdXAgaW5zdGFuY2UuXG5cdFx0XHQgKiBSZWFkLW9ubHkuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgaW50ZWdlclxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnVpZCA9IE5hdnBvcHVwLnVpZCsrO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZWFkLW9ubHkgZmxhZyBmb3IgY3VycmVudCB2aXNpYmlsaXR5IG9mIHRoZSBwb3B1cC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBib29sZWFuXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnZpc2libGUgPSBmYWxzZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogRmxhZyB0byBiZSBzZXQgd2hlbiB3ZSB3YW50IHRvIGNhbmNlbCBhIHByZXZpb3VzIHJlcXVlc3QgdG9cblx0XHRcdCAqIHNob3cgdGhlIHBvcHVwIGluIGEgbGl0dGxlIHdoaWxlLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSBib29sZWFuXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMubm9zaG93ID0gZmFsc2U7XG5cdFx0XHQvKipcblx0XHRcdCAqIENhdGVnb3Jpc2VkIGxpc3Qgb2YgaG9va3MuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHNlZSAjcnVuSG9va3Ncblx0XHRcdCAqIEBzZWUgI2FkZEhvb2tcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5ob29rcyA9IHtcblx0XHRcdFx0Y3JlYXRlOiBbXSxcblx0XHRcdFx0dW5oaWRlOiBbXSxcblx0XHRcdFx0aGlkZTogW10sXG5cdFx0XHR9O1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBsaXN0IG9mIHVuaXF1ZSBJRHMgb2YgaG9vayBmdW5jdGlvbnMsIHRvIGF2b2lkIGR1cGxpY2F0ZXNcblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmhvb2tJZHMgPSB7fTtcblx0XHRcdC8qKlxuXHRcdFx0ICogTGlzdCBvZiBkb3dubG9hZHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3B1cC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUgQXJyYXlcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5kb3dubG9hZHMgPSBbXTtcblx0XHRcdC8qKlxuXHRcdFx0ICogTnVtYmVyIG9mIHVuY29tcGxldGVkIGRvd25sb2Fkcy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBpbnRlZ2VyXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMucGVuZGluZyA9IG51bGw7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRvbGVyYW5jZSBpbiBwaXhlbHMgd2hlbiBkZXRlY3Rpbmcgd2hldGhlciB0aGUgbW91c2UgaGFzIGxlZnQgdGhlIHBvcHVwLlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIGludGVnZXJcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5mdXp6ID0gNTtcblx0XHRcdC8qKlxuXHRcdFx0ICogRmxhZyB0byB0b2dnbGUgcnVubmluZyB7QHNvdXJjZSAjbGltaXRIb3Jpem9udGFsUG9zaXRpb259IHRvIHJlZ3VsYXRlIHRoZSBwb3B1cCdzIHBvc2l0aW9uLlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIGJvb2xlYW5cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5jb25zdHJhaW5lZCA9IHRydWU7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSBwb3B1cCB3aWR0aCBpbiBwaXhlbHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIGludGVnZXJcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy53aWR0aCA9IDA7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSBwb3B1cCB3aWR0aCBpbiBwaXhlbHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIGludGVnZXJcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5oZWlnaHQgPSAwO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgbWFpbiBjb250ZW50IERJViBlbGVtZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIEhUTUxEaXZFbGVtZW50XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMubWFpbkRpdiA9IG51bGw7XG5cdFx0XHR0aGlzLmNyZWF0ZU1haW5EaXYoKTtcblx0XHRcdC8vXHRpZiAoIWluaXQgfHwgdHlwZW9mIGluaXQucG9wdXBzX2RyYWdnYWJsZT09J3VuZGVmaW5lZCcgfHwgaW5pdC5wb3B1cHNfZHJhZ2dhYmxlKSB7XG5cdFx0XHQvL1x0XHR0aGlzLm1ha2VEcmFnZ2FibGUodHJ1ZSk7XG5cdFx0XHQvL1x0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBSZXRyaWV2ZXMgdGhlIHtAc291cmNlICN2aXNpYmxlfSBhdHRyaWJ1dGUsIGluZGljYXRpbmcgd2hldGhlciB0aGUgcG9wdXAgaXMgY3VycmVudGx5IHZpc2libGUuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBib29sZWFuXG5cdFx0ICovXG5cdFx0aXNWaXNpYmxlKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmlzaWJsZTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUmVwb3NpdGlvbnMgcG9wdXAgdXNpbmcgQ1NTIHN0eWxlLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge2ludGVnZXJ9IHggeC1jb29yZGluYXRlIChweClcblx0XHQgKiBAcGFyYW0ge2ludGVnZXJ9IHkgeS1jb29yZGluYXRlIChweClcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IG5vTGltaXRIb3IgRG9uJ3QgY2FsbCB7QHNvdXJjZSAjbGltaXRIb3Jpem9udGFsUG9zaXRpb259XG5cdFx0ICovXG5cdFx0cmVwb3NpdGlvbih4LCB5LCBub0xpbWl0SG9yKSB7XG5cdFx0XHRsb2coYHJlcG9zaXRpb24oJHt4fSwke3l9LCR7bm9MaW1pdEhvcn0pYCk7XG5cdFx0XHRpZiAoeCAhPT0gdW5kZWZpbmVkICYmIHggIT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy5sZWZ0ID0geDtcblx0XHRcdH1cblx0XHRcdGlmICh5ICE9PSB1bmRlZmluZWQgJiYgeSAhPT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLnRvcCA9IHk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5sZWZ0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy50b3AgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLm1haW5EaXYuc3R5bGUubGVmdCA9IGAke3RoaXMubGVmdH1weGA7XG5cdFx0XHRcdHRoaXMubWFpbkRpdi5zdHlsZS50b3AgPSBgJHt0aGlzLnRvcH1weGA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW5vTGltaXRIb3IpIHtcblx0XHRcdFx0dGhpcy5saW1pdEhvcml6b250YWxQb3NpdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBQcmV2ZW50cyBwb3B1cHMgZnJvbSBiZWluZyBpbiBzaWxseSBsb2NhdGlvbnMuIEhvcGVmdWxseS5cblx0XHQgKiBTaG91bGQgbm90IGJlIHJ1biBpZiB7QHNvdXJjZSAjY29uc3RyYWluZWR9IGlzIHRydWUuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGxpbWl0SG9yaXpvbnRhbFBvc2l0aW9uKCkge1xuXHRcdFx0aWYgKCF0aGlzLmNvbnN0cmFpbmVkIHx8IHRoaXMudG9vV2lkZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKTtcblx0XHRcdGNvbnN0IHggPSB0aGlzLmxlZnQ7XG5cdFx0XHRjb25zdCB3ID0gdGhpcy53aWR0aDtcblx0XHRcdGNvbnN0IGNXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5jbGllbnRXaWR0aDtcblx0XHRcdC8vXHRsb2coJ2xpbWl0SG9yaXpvbnRhbFBvc2l0aW9uOiB4PScreCtcblx0XHRcdC8vXHRcdFx0JywgdGhpcy5sZWZ0PScgKyB0aGlzLmxlZnQgK1xuXHRcdFx0Ly9cdFx0XHQnLCB0aGlzLndpZHRoPScgKyB0aGlzLndpZHRoICtcblx0XHRcdC8vXHRcdFx0JywgY1dpZHRoPScgKyBjV2lkdGgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR4ICsgdyA+PSBjV2lkdGggfHxcblx0XHRcdFx0KHggPiAwICYmXG5cdFx0XHRcdFx0dGhpcy5tYXhXaWR0aCAmJlxuXHRcdFx0XHRcdHRoaXMud2lkdGggPCB0aGlzLm1heFdpZHRoICYmXG5cdFx0XHRcdFx0dGhpcy5oZWlnaHQgPiB0aGlzLndpZHRoICYmXG5cdFx0XHRcdFx0eCA+IGNXaWR0aCAtIHRoaXMubWF4V2lkdGgpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVGhpcyBpcyBhIHZlcnkgbmFzdHkgaGFjay4gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSFcblx0XHRcdFx0Ly8gV2UgZmluZCB0aGUgXCJuYXR1cmFsXCIgd2lkdGggb2YgdGhlIGRpdiBieSBwb3NpdGlvbmluZyBpdCBhdCB0aGUgZmFyIGxlZnRcblx0XHRcdFx0Ly8gdGhlbiByZXNldCBpdCBzbyB0aGF0IGl0IHNob3VsZCBiZSBmbHVzaCByaWdodCAod2VsbCwgbmVhcmx5KVxuXHRcdFx0XHR0aGlzLm1haW5EaXYuc3R5bGUubGVmdCA9ICctMTAwMDBweCc7XG5cdFx0XHRcdHRoaXMubWFpbkRpdi5zdHlsZS53aWR0aCA9IGAke3RoaXMubWF4V2lkdGh9cHhgO1xuXHRcdFx0XHRjb25zdCBuYXR1cmFsV2lkdGggPSBOdW1iZXIucGFyc2VJbnQodGhpcy5tYWluRGl2Lm9mZnNldFdpZHRoLCAxMCk7XG5cdFx0XHRcdGxldCBuZXdMZWZ0ID0gY1dpZHRoIC0gbmF0dXJhbFdpZHRoIC0gMTtcblx0XHRcdFx0aWYgKG5ld0xlZnQgPCAwKSB7XG5cdFx0XHRcdFx0bmV3TGVmdCA9IDA7XG5cdFx0XHRcdFx0dGhpcy50b29XaWRlID0gdHJ1ZTtcblx0XHRcdFx0fSAvLyBzdGlsbCB1bnN0YWJsZSBmb3IgcmVhbGx5IHdpZGUgcG9wdXBzP1xuXHRcdFx0XHRsb2coXG5cdFx0XHRcdFx0YGxpbWl0SG9yaXpvbnRhbFBvc2l0aW9uOiBtb3ZpbmcgdG8gKCR7bmV3TGVmdH0sJHt0aGlzLnRvcH0pO2AgK1xuXHRcdFx0XHRcdFx0YCBuYXR1cmFsV2lkdGg9JHtuYXR1cmFsV2lkdGh9LCBjbGllbnRXaWR0aD0ke2NXaWR0aH1gXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRoaXMucmVwb3NpdGlvbihuZXdMZWZ0LCBudWxsLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQnJpbmdzIHBvcHVwIHRvIHRoZSB0b3Agb2YgdGhlIHotb3JkZXIuXG5cdFx0ICogV2UgaW5jcmVtZW50IHRoZSB7QHNvdXJjZSAjaGlnaGVzdH0gcHJvcGVydHkgb2YgdGhlIGNvbnRydWN0b3IgaGVyZS5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0cmFpc2UoKSB7XG5cdFx0XHR0aGlzLm1haW5EaXYuc3R5bGUuekluZGV4ID0gTmF2cG9wdXAuaGlnaGVzdCArIDE7XG5cdFx0XHQrK05hdnBvcHVwLmhpZ2hlc3Q7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFNob3dzIHRoZSBwb3B1cCBwcm92aWRlZCB7QHNvdXJjZSAjbm9zaG93fSBpcyBub3QgdHJ1ZS5cblx0XHQgKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiwgYnJpbmdzIHRoZSBwb3B1cCB0byB0aGUgdG9wIG9mIHRoZSB6LW9yZGVyIGFuZCB1bmhpZGVzIGl0LlxuXHRcdCAqL1xuXHRcdHNob3coKSB7XG5cdFx0XHQvLyBkb2N1bWVudC50aXRsZSs9J3MnO1xuXHRcdFx0aWYgKHRoaXMubm9zaG93KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGRvY3VtZW50LnRpdGxlKz0ndCc7XG5cdFx0XHR0aGlzLnJlcG9zaXRpb24oKTtcblx0XHRcdHRoaXMucmFpc2UoKTtcblx0XHRcdHRoaXMudW5oaWRlKCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIENoZWNrcyB0byBzZWUgaWYgdGhlIG1vdXNlIHBvaW50ZXIgaGFzXG5cdFx0ICogc3RhYmlsaXNlZCAoY2hlY2tpbmcgZXZlcnkgPGNvZGU+dGltZTwvY29kZT4vMiBtaWxsaXNlY29uZHMpIGFuZCBydW5zIHRoZVxuXHRcdCAqIHtAc291cmNlICNzaG93fSBtZXRob2QgaWYgaXQgaGFzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIFRoZSBtaW5pbXVtIHRpbWUgKG1zKSBiZWZvcmUgdGhlIHBvcHVwIG1heSBiZSBzaG93bi5cblx0XHQgKi9cblx0XHRzaG93U29vbklmU3RhYmxlKHRpbWUpIHtcblx0XHRcdGxvZyhgc2hvd1Nvb25JZlN0YWJsZSwgdGltZT0ke3RpbWV9YCk7XG5cdFx0XHRpZiAodGhpcy52aXNpYmxlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMubm9zaG93ID0gZmFsc2U7XG5cdFx0XHQvLyB+IGluaXRpYWxpemUgdGhlc2UgdmFyaWFibGVzIHNvIHRoYXQgd2UgbmV2ZXIgcnVuIEB0dHtzaG93fSBhZnRlclxuXHRcdFx0Ly8gfiBqdXN0IGhhbGYgdGhlIHRpbWVcblx0XHRcdHRoaXMuc3RhYmxlX3ggPSAtMWU0O1xuXHRcdFx0dGhpcy5zdGFibGVfeSA9IC0xZTQ7XG5cdFx0XHRjb25zdCBzdGFibGVTaG93ID0gKCkgPT4ge1xuXHRcdFx0XHRsb2coJ3N0YWJsZVNob3cgY2FsbGVkJyk7XG5cdFx0XHRcdGNvbnN0IG5ld194ID0gTmF2cG9wdXAudHJhY2tlci54O1xuXHRcdFx0XHRjb25zdCBuZXdfeSA9IE5hdnBvcHVwLnRyYWNrZXIueTtcblx0XHRcdFx0Y29uc3QgZHggPSBzZWxmLnN0YWJsZV94IC0gbmV3X3g7XG5cdFx0XHRcdGNvbnN0IGR5ID0gc2VsZi5zdGFibGVfeSAtIG5ld195O1xuXHRcdFx0XHRjb25zdCBmdXp6MiA9IDA7IC8vIHNhdmVkVGhpcy5mdXp6ICogc2F2ZWRUaGlzLmZ1eno7XG5cdFx0XHRcdC8vIGRvY3VtZW50LnRpdGxlICs9ICdbJyArIFtzYXZlZFRoaXMuc3RhYmxlX3gsbmV3X3gsIHNhdmVkVGhpcy5zdGFibGVfeSxuZXdfeSwgZHgsIGR5LCBmdXp6Ml0uam9pbignLCcpICsgJ10gJztcblx0XHRcdFx0aWYgKGR4ICogZHggPD0gZnV6ejIgJiYgZHkgKiBkeSA8PSBmdXp6Mikge1xuXHRcdFx0XHRcdGxvZygnbW91c2UgaXMgc3RhYmxlJyk7XG5cdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbChzZWxmLnNob3dTb29uU3RhYmxlVGltZXIpO1xuXHRcdFx0XHRcdHNlbGYucmVwb3NpdGlvbihuZXdfeCArIDIsIG5ld195ICsgMik7XG5cdFx0XHRcdFx0c2VsZi5zaG93KCk7XG5cdFx0XHRcdFx0c2VsZi5saW1pdEhvcml6b250YWxQb3NpdGlvbigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxmLnN0YWJsZV94ID0gbmV3X3g7XG5cdFx0XHRcdHNlbGYuc3RhYmxlX3kgPSBuZXdfeTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdHRoaXMuc2hvd1Nvb25TdGFibGVUaW1lciA9IHNldEludGVydmFsKHN0YWJsZVNob3csIHRpbWUgLyAyKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUge0Bzb3VyY2UgI25vc2hvd30gZmxhZyBhbmQgaGlkZXMgdGhlIHBvcHVwLiBUaGlzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIGxpbmsgYmVmb3JlXG5cdFx0ICogKG9yIGFmdGVyKSBpdCdzIGFjdHVhbGx5IGJlZW4gZGlzcGxheWVkLlxuXHRcdCAqL1xuXHRcdGJhbmlzaCgpIHtcblx0XHRcdGxvZygnYmFuaXNoIGNhbGxlZCcpO1xuXHRcdFx0Ly8gaGlkZSBhbmQgcHJldmVudCBzaG93aW5nIHdpdGggc2hvd1Nvb24gaW4gdGhlIGZ1dHVyZVxuXHRcdFx0dGhpcy5ub3Nob3cgPSB0cnVlO1xuXHRcdFx0aWYgKHRoaXMuc2hvd1Nvb25TdGFibGVUaW1lcikge1xuXHRcdFx0XHRsb2coJ2NsZWFyaW5nIHNob3dTb29uU3RhYmxlVGltZXInKTtcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNob3dTb29uU3RhYmxlVGltZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5oaWRlKCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFJ1bnMgaG9va3MgYWRkZWQgd2l0aCB7QHNvdXJjZSAjYWRkSG9va30uXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5IG5hbWUgb2YgdGhlIHtAc291cmNlICNob29rc30gYXJyYXkgLSBvbmUgb2YgJ2NyZWF0ZScsICd1bmhpZGUnLCAnaGlkZSdcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gd2hlbiBDb250cm9scyBleGFjdGx5IHdoZW4gdGhlIGhvb2sgaXMgcnVuOiBlaXRoZXIgJ2JlZm9yZScgb3IgJ2FmdGVyJ1xuXHRcdCAqL1xuXHRcdHJ1bkhvb2tzKGtleSwgd2hlbikge1xuXHRcdFx0aWYgKCF0aGlzLmhvb2tzW2tleV0pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qga2V5SG9va3MgPSB0aGlzLmhvb2tzW2tleV07XG5cdFx0XHRjb25zdCBsZW4gPSBrZXlIb29rcy5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRcdGlmIChrZXlIb29rc1tpXSAmJiBrZXlIb29rc1tpXS53aGVuID09PSB3aGVuICYmIFJlZmxlY3QuYXBwbHkoa2V5SG9va3NbaV0uaG9vaywgdGhpcywgW10pKSB7XG5cdFx0XHRcdFx0Ly8gcmVtb3ZlIHRoZSBob29rXG5cdFx0XHRcdFx0aWYgKGtleUhvb2tzW2ldLmhvb2tJZCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaG9va0lkc1trZXlIb29rc1tpXS5ob29rSWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRrZXlIb29rc1tpXSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIGhvb2sgdG8gdGhlIHBvcHVwLiBIb29rIGZ1bmN0aW9ucyBhcmUgcnVuIHdpdGggPGNvZGU+dGhpczwvY29kZT4gc2V0IHRvIHJlZmVyIHRvIHRoZVxuXHRcdCAqIE5hdnBvcHVwIGluc3RhbmNlLCBhbmQgbm8gYXJndW1lbnRzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaG9vayBUaGUgaG9vayBmdW5jdGlvbi4gRnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRydWUgYXJlIGRlbGV0ZWQuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgbmFtZSBvZiB0aGUge0Bzb3VyY2UgI2hvb2tzfSBhcnJheSAtIG9uZSBvZiAnY3JlYXRlJywgJ3VuaGlkZScsICdoaWRlJ1xuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB3aGVuIENvbnRyb2xzIGV4YWN0bHkgd2hlbiB0aGUgaG9vayBpcyBydW46IGVpdGhlciAnYmVmb3JlJyBvciAnYWZ0ZXInXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVpZCBBIHRydXRoeSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvb2sgZnVuY3Rpb247IGlmIGl0IG1hdGNoZXMgYW5vdGhlciBob29rXG5cdFx0ICogaW4gdGhpcyBwb3NpdGlvbiwgaXQgd29uJ3QgYmUgYWRkZWQgYWdhaW4uXG5cdFx0ICovXG5cdFx0YWRkSG9vayhob29rLCBrZXksIHdoZW4sIHVpZCkge1xuXHRcdFx0d2hlbiB8fD0gJ2FmdGVyJztcblx0XHRcdGlmICghdGhpcy5ob29rc1trZXldKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGlmIHVpZCBpcyBzcGVjaWZpZWQsIGRvbid0IGFkZCBkdXBsaWNhdGVzXG5cdFx0XHRsZXQgaG9va0lkO1xuXHRcdFx0aWYgKHVpZCkge1xuXHRcdFx0XHRob29rSWQgPSBba2V5LCB3aGVuLCB1aWRdLmpvaW4oJ3wnKTtcblx0XHRcdFx0aWYgKHRoaXMuaG9va0lkc1tob29rSWRdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaG9va0lkc1tob29rSWRdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaG9va3Nba2V5XS5wdXNoKHtcblx0XHRcdFx0aG9vayxcblx0XHRcdFx0d2hlbixcblx0XHRcdFx0aG9va0lkLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgdGhlIG1haW4gRElWIGVsZW1lbnQsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgYWN0dWFsIHBvcHVwIGNvbnRlbnQuXG5cdFx0ICogUnVucyBob29rcyB3aXRoIGtleSAnY3JlYXRlJy5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0Y3JlYXRlTWFpbkRpdigpIHtcblx0XHRcdGlmICh0aGlzLm1haW5EaXYpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5ydW5Ib29rcygnY3JlYXRlJywgJ2JlZm9yZScpO1xuXHRcdFx0Y29uc3QgbWFpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHRtYWluRGl2Lm9uY2xpY2sgPSAoZSkgPT4ge1xuXHRcdFx0XHRzZWxmLm9uY2xpY2tMaXN0ZW5lcihlKTtcblx0XHRcdH07XG5cdFx0XHRtYWluRGl2LmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lID8/ICduYXZwb3B1cF9tYWluZGl2Jztcblx0XHRcdG1haW5EaXYuaWQgPSBtYWluRGl2LmNsYXNzTmFtZSArIHRoaXMudWlkO1xuXHRcdFx0bWFpbkRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdFx0XHRtYWluRGl2LnN0eWxlLm1pbldpZHRoID0gJzM1MHB4Jztcblx0XHRcdG1haW5EaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdG1haW5EaXYuY2xhc3NOYW1lID0gJ25hdnBvcHVwJztcblx0XHRcdC8vIGVhc3kgYWNjZXNzIHRvIGphdmFzY3JpcHQgb2JqZWN0IHRocm91Z2ggRE9NIGZ1bmN0aW9uc1xuXHRcdFx0bWFpbkRpdi5uYXZwb3B1cCA9IHRoaXM7XG5cdFx0XHR0aGlzLm1haW5EaXYgPSBtYWluRGl2O1xuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmFwcGVuZChtYWluRGl2KTtcblx0XHRcdHRoaXMucnVuSG9va3MoJ2NyZWF0ZScsICdhZnRlcicpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBDYWxscyB0aGUge0Bzb3VyY2UgI3JhaXNlfSBtZXRob2QuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdG9uY2xpY2tMaXN0ZW5lcigpIHtcblx0XHRcdHRoaXMucmFpc2UoKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogTWFrZXMgdGhlIHBvcHVwIGRyYWdnYWJsZSwgdXNpbmcgYSB7QHNvdXJjZSBEcmFnfSBvYmplY3QuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaGFuZGxlTmFtZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0bWFrZURyYWdnYWJsZShoYW5kbGVOYW1lKSB7XG5cdFx0XHRpZiAoIXRoaXMubWFpbkRpdikge1xuXHRcdFx0XHR0aGlzLmNyZWF0ZU1haW5EaXYoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGRyYWcgPSBuZXcgRHJhZygpO1xuXHRcdFx0aWYgKCFoYW5kbGVOYW1lKSB7XG5cdFx0XHRcdGRyYWcuc3RhcnRDb25kaXRpb24gPSAoZSkgPT4ge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRpZiAoIWUuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGxldCBkcmFnSGFuZGxlO1xuXHRcdFx0aWYgKGhhbmRsZU5hbWUpIHtcblx0XHRcdFx0ZHJhZ0hhbmRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2hhbmRsZU5hbWV9YCk7XG5cdFx0XHR9XG5cdFx0XHRkcmFnSGFuZGxlIHx8PSB0aGlzLm1haW5EaXY7XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdGRyYWcuZW5kSG9vayA9ICh4LCB5KSA9PiB7XG5cdFx0XHRcdE5hdnBvcHVwLnRyYWNrZXIuZGlydHkgPSB0cnVlO1xuXHRcdFx0XHRzZWxmLnJlcG9zaXRpb24oeCwgeSk7XG5cdFx0XHR9O1xuXHRcdFx0ZHJhZy5pbml0KGRyYWdIYW5kbGUsIHRoaXMubWFpbkRpdik7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEhpZGVzIHRoZSBwb3B1cCB1c2luZyBDU1MuIFJ1bnMgaG9va3Mgd2l0aCBrZXkgJ2hpZGUnLlxuXHRcdCAqIFNldHMge0Bzb3VyY2UgI3Zpc2libGV9IGFwcHJvcHJpYXRlbHkuXG5cdFx0ICoge0Bzb3VyY2UgI2JhbmlzaH0gc2hvdWxkIGJlIGNhbGxlZCBleHRlcm5hbGx5IGluc3RlYWQgb2YgdGhpcyBtZXRob2QuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGhpZGUoKSB7XG5cdFx0XHR0aGlzLnJ1bkhvb2tzKCdoaWRlJywgJ2JlZm9yZScpO1xuXHRcdFx0dGhpcy5hYm9ydERvd25sb2FkcygpO1xuXHRcdFx0aWYgKHRoaXMudmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmlzaWJsZSkge1xuXHRcdFx0XHR0aGlzLm1haW5EaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0dGhpcy52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJ1bkhvb2tzKCdoaWRlJywgJ2FmdGVyJyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFNob3dzIHRoZSBwb3B1cCB1c2luZyBDU1MuIFJ1bnMgaG9va3Mgd2l0aCBrZXkgJ3VuaGlkZScuXG5cdFx0ICogU2V0cyB7QHNvdXJjZSAjdmlzaWJsZX0gYXBwcm9wcmlhdGVseS4gICB7QHNvdXJjZSAjc2hvd30gc2hvdWxkIGJlIGNhbGxlZCBleHRlcm5hbGx5IGluc3RlYWQgb2YgdGhpcyBtZXRob2QuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHVuaGlkZSgpIHtcblx0XHRcdHRoaXMucnVuSG9va3MoJ3VuaGlkZScsICdiZWZvcmUnKTtcblx0XHRcdGlmICh0aGlzLnZpc2libGUgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy52aXNpYmxlKSB7XG5cdFx0XHRcdHRoaXMubWFpbkRpdi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG5cdFx0XHRcdHRoaXMudmlzaWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJ1bkhvb2tzKCd1bmhpZGUnLCAnYWZ0ZXInKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgPGNvZGU+aW5uZXJIVE1MPC9jb2RlPiBhdHRyaWJ1dGUgb2YgdGhlIG1haW4gZGl2IGNvbnRhaW5pbmcgdGhlIHBvcHVwIGNvbnRlbnQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbCBUaGUgSFRNTCB0byBzZXQuXG5cdFx0ICovXG5cdFx0c2V0SW5uZXJIVE1MKGh0bWwpIHtcblx0XHRcdHRoaXMubWFpbkRpdi5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBVcGRhdGVzIHRoZSB7QHNvdXJjZSAjd2lkdGh9IGFuZCB7QHNvdXJjZSAjaGVpZ2h0fSBhdHRyaWJ1dGVzIHdpdGggdGhlIENTUyBwcm9wZXJ0aWVzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHR1cGRhdGVEaW1lbnNpb25zKCkge1xuXHRcdFx0dGhpcy53aWR0aCA9IE51bWJlci5wYXJzZUludCh0aGlzLm1haW5EaXYub2Zmc2V0V2lkdGgsIDEwKTtcblx0XHRcdHRoaXMuaGVpZ2h0ID0gTnVtYmVyLnBhcnNlSW50KHRoaXMubWFpbkRpdi5vZmZzZXRIZWlnaHQsIDEwKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQ2hlY2tzIGlmIHRoZSBwb2ludCAoeCx5KSBpcyB3aXRoaW4ge0Bzb3VyY2UgI2Z1enp9IG9mIHRoZVxuXHRcdCAqIHtAc291cmNlICNtYWluRGl2fS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7aW50ZWdlcn0geCB4LWNvb3JkaW5hdGUgKHB4KVxuXHRcdCAqIEBwYXJhbSB7aW50ZWdlcn0geSB5LWNvb3JkaW5hdGUgKHB4KVxuXHRcdCAqIEB0eXBlIGJvb2xlYW5cblx0XHQgKi9cblx0XHRpc1dpdGhpbih4LCB5KSB7XG5cdFx0XHQvLyB+IElmIHdlJ3JlIG5vdCBldmVuIHZpc2libGUsIG5vIHBvaW50IHNob3VsZCBiZSBjb25zaWRlcmVkIGFzXG5cdFx0XHQvLyB+IGJlaW5nIHdpdGhpbiB0aGUgcG9wdXAuXG5cdFx0XHRpZiAoIXRoaXMudmlzaWJsZSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKTtcblx0XHRcdGNvbnN0IGZ1enogPSB0aGlzLmZ1enogfHwgMDtcblx0XHRcdC8vIH4gVXNlIGEgc2ltcGxlIGJveCBtZXRyaWMgaGVyZS5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHggKyBmdXp6ID49IHRoaXMubGVmdCAmJlxuXHRcdFx0XHR4IC0gZnV6eiA8PSB0aGlzLmxlZnQgKyB0aGlzLndpZHRoICYmXG5cdFx0XHRcdHkgKyBmdXp6ID49IHRoaXMudG9wICYmXG5cdFx0XHRcdHkgLSBmdXp6IDw9IHRoaXMudG9wICsgdGhpcy5oZWlnaHRcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYSBkb3dubG9hZCB0byB7QHNvdXJjZSAjZG93bmxvYWRzfS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RG93bmxvYWRlcn0gZG93bmxvYWRcblx0XHQgKi9cblx0XHRhZGREb3dubG9hZChkb3dubG9hZCkge1xuXHRcdFx0aWYgKCFkb3dubG9hZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRvd25sb2Fkcy5wdXNoKGRvd25sb2FkKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQWJvcnRzIHRoZSBkb3dubG9hZHMgbGlzdGVkIGluIHtAc291cmNlICNkb3dubG9hZHN9LlxuXHRcdCAqXG5cdFx0ICogQHNlZSBEb3dubG9hZGVyI2Fib3J0XG5cdFx0ICovXG5cdFx0YWJvcnREb3dubG9hZHMoKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGQgb2YgdGhpcy5kb3dubG9hZHMpIHtcblx0XHRcdFx0aWYgKGQgJiYgZC5hYm9ydCkge1xuXHRcdFx0XHRcdGQuYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5kb3dubG9hZHMgPSBbXTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIEEgVUlEIGZvciBlYWNoIE5hdnBvcHVwLiBUaGlzIGNvbnN0cnVjdG9yIHByb3BlcnR5IGlzIGp1c3QgYSBjb3VudGVyLlxuXHQgKlxuXHQgKiBAdHlwZSBpbnRlZ2VyXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHROYXZwb3B1cC51aWQgPSAwO1xuXHQvKipcblx0ICogQ291bnRlciBpbmRpY2F0aW5nIHRoZSB6LW9yZGVyIG9mIHRoZSBcImhpZ2hlc3RcIiBwb3B1cC5cblx0ICogV2Ugc3RhcnQgdGhlIHotaW5kZXggYXQgMTAwMCBzbyB0aGF0IHBvcHVwcyBhcmUgYWJvdmUgZXZlcnl0aGluZ1xuXHQgKiBlbHNlIG9uIHRoZSBzY3JlZW4uXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB0eXBlIGludGVnZXJcblx0ICovXG5cdE5hdnBvcHVwLmhpZ2hlc3QgPSAxMDAwO1xuXHQvKipcblx0ICogQSB7QHNvdXJjZSBNb3VzZXRyYWNrZXJ9IGluc3RhbmNlIHdoaWNoIGlzIGEgcHJvcGVydHkgb2YgdGhlIGNvbnN0cnVjdG9yIChwc2V1ZG8tZ2xvYmFsKS5cblx0ICovXG5cdE5hdnBvcHVwLnRyYWNrZXIgPSBuZXcgTW91c2V0cmFja2VyKCk7XG5cdC8vIEVOREZJTEU6IG5hdnBvcHVwLmpzXG5cdC8vIFNUQVJURklMRTogZGlmZi5qc1xuXHQvKipcblx0ICogSmF2YXNjcmlwdCBEaWZmIEFsZ29yaXRobSBCeSBKb2huIFJlc2lnIChodHRwOi8vZWpvaG4ub3JnLykgYW5kIEx1cGluXG5cdCAqXG5cdCAqIE1vcmUgSW5mbzogaHR0cDovL2Vqb2huLm9yZy9wcm9qZWN0cy9qYXZhc2NyaXB0LWRpZmYtYWxnb3JpdGhtL1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ1tdfSB4XG5cdCAqL1xuXHRjb25zdCBkZWxGbXQgPSAoeCkgPT4ge1xuXHRcdGlmICh4Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gYDxkZWwgY2xhc3M9J3BvcHVwRGlmZic+JHt4LmpvaW4oJycpfTwvZGVsPmA7XG5cdH07XG5cdGNvbnN0IGluc0ZtdCA9ICh4KSA9PiB7XG5cdFx0aWYgKHgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdHJldHVybiBgPGlucyBjbGFzcz0ncG9wdXBEaWZmJz4ke3guam9pbignJyl9PC9pbnM+YDtcblx0fTtcblx0Y29uc3QgY291bnRDcm9zc2luZ3MgPSAoYSwgYiwgaSwgZWplY3QpID0+IHtcblx0XHQvLyBjb3VudCB0aGUgY3Jvc3NpbmdzIG9uIHRoZSBlZGdlIHN0YXJ0aW5nIGF0IGJbaV1cblx0XHRpZiAoIWJbaV0ucm93ICYmIGJbaV0ucm93ICE9PSAwKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0Zm9yIChjb25zdCBbaiwgZWxlbWVudF0gb2YgYS5lbnRyaWVzKCkpIHtcblx0XHRcdGlmICghZWxlbWVudC5yb3cgJiYgZWxlbWVudC5yb3cgIT09IDApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKGogLSBiW2ldLnJvdykgKiAoaSAtIGVsZW1lbnQucm93KSA+IDApIHtcblx0XHRcdFx0aWYgKGVqZWN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNvdW50O1xuXHR9O1xuXHRjb25zdCBzaG9ydGVuRGlmZlN0cmluZyA9IGZ1bmN0aW9uIHNob3J0ZW5EaWZmU3RyaW5nKHN0ciwgY29udGV4dCkge1xuXHRcdGNvbnN0IHJlID0gLyg8ZGVsW1xcU1xcc10qPzxcXC9kZWw+fDxpbnNbXFxTXFxzXSo/PFxcL2lucz4pLztcblx0XHRjb25zdCBzcGxpdHRlZCA9IHN0ci5zcGxpdChyZSk7XG5cdFx0bGV0IHJldCA9IFsnJ107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdHRlZC5sZW5ndGg7IGkgKz0gMikge1xuXHRcdFx0aWYgKHNwbGl0dGVkW2ldLmxlbmd0aCA8IDIgKiBjb250ZXh0KSB7XG5cdFx0XHRcdHJldFtyZXQubGVuZ3RoIC0gMV0gKz0gc3BsaXR0ZWRbaV07XG5cdFx0XHRcdGlmIChpICsgMSA8IHNwbGl0dGVkLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJldFtyZXQubGVuZ3RoIC0gMV0gKz0gc3BsaXR0ZWRbaSArIDFdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0cmV0W3JldC5sZW5ndGggLSAxXSArPSBzcGxpdHRlZFtpXS5zbGljZSgwLCBNYXRoLm1heCgwLCBjb250ZXh0KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGkgKyAxIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goc3BsaXR0ZWRbaV0uc2xpY2UoTWF0aC5tYXgoMCwgc3BsaXR0ZWRbaV0ubGVuZ3RoIC0gY29udGV4dCkpICsgc3BsaXR0ZWRbaSArIDFdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAocmV0Lmxlbmd0aCA+IDAgJiYgIXJldFswXSkge1xuXHRcdFx0cmV0ID0gcmV0LnNsaWNlKDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHRjb25zdCBkaWZmU3RyaW5nID0gKG8sIG4pID0+IHtcblx0XHQvLyAgV2UgbmVlZCB0byBzcGxpdCB0aGUgc3RyaW5ncyBvIGFuZCBuIGZpcnN0LCBhbmQgZW50aWZ5KCkgdGhlIHBhcnRzXG5cdFx0Ly8gIGluZGl2aWR1YWxseSwgc28gdGhhdCB0aGUgSFRNTCBlbnRpdGllcyBhcmUgbmV2ZXIgY3V0IGFwYXJ0LiAoQXhlbEJvbGR0KVxuXHRcdGxldCBpO1xuXHRcdGNvbnN0IG9TcGxpdHRlZCA9IG8uc3BsaXQoL1xcYi8pO1xuXHRcdGNvbnN0IG5TcGxpdHRlZCA9IG4uc3BsaXQoL1xcYi8pO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBvU3BsaXR0ZWQubGVuZ3RoOyArK2kpIHtcblx0XHRcdG9TcGxpdHRlZFtpXSA9IG9TcGxpdHRlZFtpXS5lbnRpZnkoKTtcblx0XHR9XG5cdFx0Zm9yIChpID0gMDsgaSA8IG5TcGxpdHRlZC5sZW5ndGg7ICsraSkge1xuXHRcdFx0blNwbGl0dGVkW2ldID0gblNwbGl0dGVkW2ldLmVudGlmeSgpO1xuXHRcdH1cblx0XHRjb25zdCBvdXQgPSBkaWZmKG9TcGxpdHRlZCwgblNwbGl0dGVkKTtcblx0XHRsZXQgc3RyID0gJyc7XG5cdFx0bGV0IGFjYyA9IFtdOyAvLyBhY2N1bXVsYXRvciBmb3IgcHJldHRpZXIgb3V0cHV0XG5cblx0XHQvLyBjcm9zc2luZyBwYWlyaW5ncyAtLSBlZyAnQSBCJyB2cyAnQiBBJyAtLSBjYXVzZSBwcm9ibGVtcywgc28gbGV0J3MgaXJvbiB0aGVtIG91dFxuXHRcdC8vIHRoaXMgZG9lc24ndCBhbHdheXMgZG8gdGhpbmdzIG9wdGltYWxseSBidXQgaXQgc2hvdWxkIGJlIGZhc3QgZW5vdWdoXG5cdFx0bGV0IG1heE91dHB1dFBhaXIgPSAwO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBvdXQubi5sZW5ndGg7ICsraSkge1xuXHRcdFx0aWYgKG91dC5uW2ldLnBhaXJlZCkge1xuXHRcdFx0XHRpZiAobWF4T3V0cHV0UGFpciA+IG91dC5uW2ldLnJvdykge1xuXHRcdFx0XHRcdC8vIHRhbmdsZSAtIGRlbGV0ZSBwYWlyaW5nXG5cdFx0XHRcdFx0b3V0Lm9bb3V0Lm5baV0ucm93XSA9IG91dC5vW291dC5uW2ldLnJvd10udGV4dDtcblx0XHRcdFx0XHRvdXQubltpXSA9IG91dC5uW2ldLnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG1heE91dHB1dFBhaXIgPCBvdXQubltpXS5yb3cpIHtcblx0XHRcdFx0XHRtYXhPdXRwdXRQYWlyID0gb3V0Lm5baV0ucm93O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIG91dHB1dCB0aGUgc3R1ZmYgcHJlY2VkaW5nIHRoZSBmaXJzdCBwYWlyZWQgb2xkIGxpbmVcblx0XHRmb3IgKGkgPSAwOyBpIDwgb3V0Lm8ubGVuZ3RoICYmICFvdXQub1tpXS5wYWlyZWQ7ICsraSkge1xuXHRcdFx0YWNjLnB1c2gob3V0Lm9baV0pO1xuXHRcdH1cblx0XHRzdHIgKz0gZGVsRm10KGFjYyk7XG5cdFx0YWNjID0gW107XG5cdFx0Ly8gbWFpbiBsb29wXG5cdFx0Zm9yIChpID0gMDsgaSA8IG91dC5uLmxlbmd0aDsgKytpKSB7XG5cdFx0XHQvLyBvdXRwdXQgdW5wYWlyZWQgbmV3IFwibGluZXNcIlxuXHRcdFx0d2hpbGUgKGkgPCBvdXQubi5sZW5ndGggJiYgIW91dC5uW2ldLnBhaXJlZCkge1xuXHRcdFx0XHRhY2MucHVzaChvdXQubltpKytdKTtcblx0XHRcdH1cblx0XHRcdHN0ciArPSBpbnNGbXQoYWNjKTtcblx0XHRcdGFjYyA9IFtdO1xuXHRcdFx0aWYgKGkgPCBvdXQubi5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gdGhpcyBuZXcgXCJsaW5lXCIgaXMgcGFpcmVkIHdpdGggdGhlIChvdXQubltpXS5yb3cpdGggb2xkIFwibGluZVwiXG5cdFx0XHRcdHN0ciArPSBvdXQubltpXS50ZXh0O1xuXHRcdFx0XHQvLyBvdXRwdXQgdW5wYWlyZWQgb2xkIHJvd3Mgc3RhcnRpbmcgYWZ0ZXIgdGhpcyBuZXcgbGluZSdzIHBhcnRuZXJcblx0XHRcdFx0bGV0IG0gPSBvdXQubltpXS5yb3cgKyAxO1xuXHRcdFx0XHR3aGlsZSAobSA8IG91dC5vLmxlbmd0aCAmJiAhb3V0Lm9bbV0ucGFpcmVkKSB7XG5cdFx0XHRcdFx0YWNjLnB1c2gob3V0Lm9bbSsrXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RyICs9IGRlbEZtdChhY2MpO1xuXHRcdFx0XHRhY2MgPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHN0cjtcblx0fTtcblx0Ly8gc2VlIHtAbGluayBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6R2xvYmFsX09iamVjdHM6T2JqZWN0fVxuXHQvLyBGSVhNRTogdXNlIG9iai5oYXNPd25Qcm9wZXJ0eSBpbnN0ZWFkIG9mIHRoaXMga2x1ZGdlIVxuXHRjb25zdCBqc1Jlc2VydmVkUHJvcGVydGllcyA9IG5ldyBSZWdFeHAoXG5cdFx0J14oY29uc3RydWN0b3J8cHJvdG90eXBlfF9fKChkZWZpbmV8bG9va3VwKVtHU11ldHRlcilfXycgK1xuXHRcdFx0J3xldmFsfGhhc093blByb3BlcnR5fHByb3BlcnR5SXNFbnVtZXJhYmxlJyArXG5cdFx0XHQnfHRvKFNvdXJjZXxTdHJpbmd8TG9jYWxlU3RyaW5nKXwodW4pP3dhdGNofHZhbHVlT2YpJCdcblx0KTtcblx0Y29uc3QgZGlmZkJ1Z0FsZXJ0ID0gZnVuY3Rpb24gZGlmZkJ1Z0FsZXJ0KHdvcmQpIHtcblx0XHRpZiAoIWRpZmZCdWdBbGVydC5saXN0W3dvcmRdKSB7XG5cdFx0XHRkaWZmQnVnQWxlcnQubGlzdFt3b3JkXSA9IDE7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeShgQmFkIHdvcmQ6ICR7d29yZH1cXG5cXG5QbGVhc2UgcmVwb3J0IHRoaXMgYnVnLmAsIHt0YWc6ICdwb3B1cHMnLCB0eXBlOiAnZXJyb3InfSk7XG5cdFx0fVxuXHR9O1xuXHRkaWZmQnVnQWxlcnQubGlzdCA9IHt9O1xuXHRjb25zdCBtYWtlRGlmZkhhc2h0YWJsZSA9IChzcmMpID0+IHtcblx0XHRjb25zdCByZXQgPSB7fTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGpzUmVzZXJ2ZWRQcm9wZXJ0aWVzLnRlc3Qoc3JjW2ldKSkge1xuXHRcdFx0XHRzcmNbaV0gKz0gJzwhLS0gLS0+Jztcblx0XHRcdH1cblx0XHRcdHJldFtzcmNbaV1dID8/PSBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldFtzcmNbaV1dLnB1c2goaSk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0ZGlmZkJ1Z0FsZXJ0KHNyY1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IGRpZmYgPSAobywgbikgPT4ge1xuXHRcdC8vIHBhc3MgMTogbWFrZSBoYXNodGFibGUgbnMgd2l0aCBuZXcgcm93cyBhcyBrZXlzXG5cdFx0Y29uc3QgbnMgPSBtYWtlRGlmZkhhc2h0YWJsZShuKTtcblx0XHQvLyBwYXNzIDI6IG1ha2UgaGFzaHRhYmxlIG9zIHdpdGggb2xkIHJvd3MgYXMga2V5c1xuXHRcdGNvbnN0IG9zID0gbWFrZURpZmZIYXNodGFibGUobyk7XG5cdFx0Ly8gcGFzcyAzOiBwYWlyIHVuaXF1ZSBuZXcgcm93cyBhbmQgbWF0Y2hpbmcgdW5pcXVlIG9sZCByb3dzXG5cdFx0bGV0IGk7XG5cdFx0Zm9yIChpIGluIG5zKSB7XG5cdFx0XHRpZiAobnNbaV0ubGVuZ3RoID09PSAxICYmIG9zW2ldICYmIG9zW2ldLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRuW25zW2ldWzBdXSA9IHtcblx0XHRcdFx0XHR0ZXh0OiBuW25zW2ldWzBdXSxcblx0XHRcdFx0XHRyb3c6IG9zW2ldWzBdLFxuXHRcdFx0XHRcdHBhaXJlZDogdHJ1ZSxcblx0XHRcdFx0fTtcblx0XHRcdFx0b1tvc1tpXVswXV0gPSB7XG5cdFx0XHRcdFx0dGV4dDogb1tvc1tpXVswXV0sXG5cdFx0XHRcdFx0cm93OiBuc1tpXVswXSxcblx0XHRcdFx0XHRwYWlyZWQ6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHBhc3MgNDogcGFpciBtYXRjaGluZyByb3dzIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBwYWlyZWQgcm93cyAobm90IG5lY2Vzc2FyaWx5IHVuaXF1ZSlcblx0XHRmb3IgKGkgPSAwOyBpIDwgbi5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bltpXS5wYWlyZWQgJiZcblx0XHRcdFx0IW5baSArIDFdLnBhaXJlZCAmJlxuXHRcdFx0XHRuW2ldLnJvdyArIDEgPCBvLmxlbmd0aCAmJlxuXHRcdFx0XHQhb1tuW2ldLnJvdyArIDFdLnBhaXJlZCAmJlxuXHRcdFx0XHRuW2kgKyAxXSA9PT0gb1tuW2ldLnJvdyArIDFdXG5cdFx0XHQpIHtcblx0XHRcdFx0bltpICsgMV0gPSB7XG5cdFx0XHRcdFx0dGV4dDogbltpICsgMV0sXG5cdFx0XHRcdFx0cm93OiBuW2ldLnJvdyArIDEsXG5cdFx0XHRcdFx0cGFpcmVkOiB0cnVlLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvW25baV0ucm93ICsgMV0gPSB7XG5cdFx0XHRcdFx0dGV4dDogb1tuW2ldLnJvdyArIDFdLFxuXHRcdFx0XHRcdHJvdzogaSArIDEsXG5cdFx0XHRcdFx0cGFpcmVkOiB0cnVlLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBwYXNzIDU6IHBhaXIgbWF0Y2hpbmcgcm93cyBpbW1lZGlhdGVseSBwcmVjZWRpbmcgcGFpcmVkIHJvd3MgKG5vdCBuZWNlc3NhcmlseSB1bmlxdWUpXG5cdFx0Zm9yIChpID0gbi5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5baV0ucGFpcmVkICYmXG5cdFx0XHRcdCFuW2kgLSAxXS5wYWlyZWQgJiZcblx0XHRcdFx0bltpXS5yb3cgPiAwICYmXG5cdFx0XHRcdCFvW25baV0ucm93IC0gMV0ucGFpcmVkICYmXG5cdFx0XHRcdG5baSAtIDFdID09PSBvW25baV0ucm93IC0gMV1cblx0XHRcdCkge1xuXHRcdFx0XHRuW2kgLSAxXSA9IHtcblx0XHRcdFx0XHR0ZXh0OiBuW2kgLSAxXSxcblx0XHRcdFx0XHRyb3c6IG5baV0ucm93IC0gMSxcblx0XHRcdFx0XHRwYWlyZWQ6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHRcdG9bbltpXS5yb3cgLSAxXSA9IHtcblx0XHRcdFx0XHR0ZXh0OiBvW25baV0ucm93IC0gMV0sXG5cdFx0XHRcdFx0cm93OiBpIC0gMSxcblx0XHRcdFx0XHRwYWlyZWQ6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRvLFxuXHRcdFx0bixcblx0XHR9O1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBkaWZmLmpzXG5cdC8vIFNUQVJURklMRTogaW5pdC5qc1xuXHRjb25zdCBzZXRTaXRlSW5mbyA9ICgpID0+IHtcblx0XHRpZiAod2luZG93LnBvcHVwTG9jYWxEZWJ1Zykge1xuXHRcdFx0cGcud2lraS5ob3N0bmFtZSA9ICdlbi53aWtpcGVkaWEub3JnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGcud2lraS5ob3N0bmFtZSA9IGxvY2F0aW9uLmhvc3RuYW1lOyAvLyB1c2UgaW4gcHJlZmVyZW5jZSB0byBsb2NhdGlvbi5ob3N0bmFtZSBmb3IgZmxleGliaWxpdHkgKD8pXG5cdFx0fVxuXHRcdHBnLndpa2kud2lraW1lZGlhID1cblx0XHRcdC8od2lraShbbXBdZWRpYXxzb3VyY2V8Ym9va3N8bmV3c3xxdW90ZXx2ZXJzaXR5fHNwZWNpZXN8dm95YWdlfGRhdGEpfG1ldGF3aWtpfHdpa3Rpb25hcnl8bWVkaWF3aWtpKVxcLm9yZy8udGVzdChcblx0XHRcdFx0cGcud2lraS5ob3N0bmFtZVxuXHRcdFx0KTtcblx0XHRwZy53aWtpLndpa2lhID0gL1xcLndpa2lhXFwuY29tJC9pLnRlc3QocGcud2lraS5ob3N0bmFtZSk7XG5cdFx0cGcud2lraS5pc0xvY2FsID0gcGcud2lraS5ob3N0bmFtZS5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKTtcblx0XHRwZy53aWtpLmNvbW1vbnMgPVxuXHRcdFx0cGcud2lraS53aWtpbWVkaWEgJiYgcGcud2lraS5ob3N0bmFtZSAhPT0gJ2NvbW1vbnMud2lraW1lZGlhLm9yZycgPyAnY29tbW9ucy53aWtpbWVkaWEub3JnJyA6IG51bGw7XG5cdFx0cGcud2lraS5sYW5nID0gbXcuY29uZmlnLmdldCgnd2dDb250ZW50TGFuZ3VhZ2UnKTtcblx0XHRjb25zdCBwb3J0ID0gbG9jYXRpb24ucG9ydCA/IGA6JHtsb2NhdGlvbi5wb3J0fWAgOiAnJztcblx0XHRwZy53aWtpLnNpdGViYXNlID0gcGcud2lraS5ob3N0bmFtZSArIHBvcnQ7XG5cdH07XG5cdGNvbnN0IHNldFVzZXJJbmZvID0gKCkgPT4ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGxpc3Q6ICd1c2VycycsXG5cdFx0XHR1c3VzZXJzOiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyksXG5cdFx0XHR1c3Byb3A6ICdyaWdodHMnLFxuXHRcdH07XG5cdFx0cGcudXNlci5jYW5SZXZpZXcgPSBmYWxzZTtcblx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBSZXZpZXcnKSkge1xuXHRcdFx0Z2V0TXdBcGkoKVxuXHRcdFx0XHQuZ2V0KHBhcmFtcylcblx0XHRcdFx0LmRvbmUoKGRhdGEpID0+IHtcblx0XHRcdFx0XHRjb25zdCBbe3JpZ2h0c31dID0gZGF0YS5xdWVyeS51c2Vycztcblx0XHRcdFx0XHRwZy51c2VyLmNhblJldmlldyA9IHJpZ2h0cy5pbmNsdWRlcygncmV2aWV3Jyk7IC8vIFRPRE86IFNob3VsZCBpdCBiZSBhIGdldFZhbHVlT2YoJ1Jldmlld1JpZ2h0JykgP1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGZldGNoU3BlY2lhbFBhZ2VOYW1lcyA9ICgpID0+IHtcblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdG1heGFnZTogMzYwMCxcblx0XHRcdG1ldGE6ICdzaXRlaW5mbycsXG5cdFx0XHRzaXByb3A6ICdzcGVjaWFscGFnZWFsaWFzZXMnLFxuXHRcdFx0Ly8gY2FjaGUgZm9yIGFuIGhvdXJcblx0XHRcdHVzZWxhbmc6ICdjb250ZW50Jyxcblx0XHR9O1xuXHRcdHJldHVybiBnZXRNd0FwaSgpXG5cdFx0XHQuZ2V0KHBhcmFtcylcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdHBnLndpa2kuc3BlY2lhbHBhZ2VhbGlhc2VzID0gZGF0YS5xdWVyeS5zcGVjaWFscGFnZWFsaWFzZXM7XG5cdFx0XHR9KTtcblx0fTtcblx0Y29uc3Qgc2V0VGl0bGVCYXNlID0gKCkgPT4ge1xuXHRcdGNvbnN0IHByb3RvY29sID0gd2luZG93LnBvcHVwTG9jYWxEZWJ1ZyA/ICdodHRwOicgOiBsb2NhdGlvbi5wcm90b2NvbDtcblx0XHRwZy53aWtpLmFydGljbGVQYXRoID0gbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpLnJlcGxhY2UoL1xcL1xcJDEvLCAnJyk7IC8vIGFzIGluIGh0dHA6Ly9zb21lLnRoaW5nLmNvbS93aWtpL0FydGljbGVcblx0XHRwZy53aWtpLmJvdEludGVyZmFjZVBhdGggPSBtdy5jb25maWcuZ2V0KCd3Z1NjcmlwdCcpO1xuXHRcdHBnLndpa2kuQVBJUGF0aCA9IGAke213LmNvbmZpZy5nZXQoJ3dnU2NyaXB0UGF0aCcpfS9hcGkucGhwYDtcblx0XHQvLyBkZWZhdWx0IG1lZGlhd2lraSBzZXR0aW5nIGlzIHBhdGhzIGxpa2UgaHR0cDovL3NvbWUudGhpbmcuY29tL2FydGljbGVQYXRoL2luZGV4LnBocD90aXRsZT1mb29cblx0XHRjb25zdCB0aXRsZXRhaWwgPSBgJHtwZy53aWtpLmJvdEludGVyZmFjZVBhdGh9P3RpdGxlPWA7XG5cdFx0Ly8gbGV0IHRpdGxldGFpbDIgPSBqb2luUGF0aChbcGcud2lraS5ib3RJbnRlcmZhY2VQYXRoLCAnd2lraS5waHRtbD90aXRsZT0nXSk7XG5cdFx0Ly8gb3RoZXIgc2l0ZXMgbWF5IG5lZWQgdG8gYWRkIGNvZGUgaGVyZSB0byBzZXQgdGl0bGV0YWlsIGRlcGVuZGluZyBvbiBob3cgdGhlaXIgdXJscyB3b3JrXG5cdFx0cGcud2lraS50aXRsZWJhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5zaXRlYmFzZX0ke3RpdGxldGFpbH1gO1xuXHRcdC8vIHBnLndpa2kudGl0bGViYXNlMiAgPSBwcm90b2NvbCArICcvLycgKyBqb2luUGF0aChbcGcud2lraS5zaXRlYmFzZSwgdGl0bGV0YWlsMl0pO1xuXHRcdHBnLndpa2kud2lraWJhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5zaXRlYmFzZX0ke3BnLndpa2kuYm90SW50ZXJmYWNlUGF0aH1gO1xuXHRcdHBnLndpa2kuYXBpd2lraWJhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5zaXRlYmFzZX0ke3BnLndpa2kuQVBJUGF0aH1gO1xuXHRcdHBnLndpa2kuYXJ0aWNsZWJhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5zaXRlYmFzZX0ke3BnLndpa2kuYXJ0aWNsZVBhdGh9YDtcblx0XHRwZy53aWtpLmNvbW1vbnNiYXNlID0gYCR7cHJvdG9jb2x9Ly8ke3BnLndpa2kuY29tbW9uc30ke3BnLndpa2kuYm90SW50ZXJmYWNlUGF0aH1gO1xuXHRcdHBnLndpa2kuYXBpY29tbW9uc2Jhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5jb21tb25zfSR7cGcud2lraS5BUElQYXRofWA7XG5cdFx0cGcucmUuYmFzZW5hbWVzID0gbmV3IFJlZ0V4cChgXigke21hcChsaXRlcmFsaXplUmVnZXgsIFtwZy53aWtpLnRpdGxlYmFzZSwgcGcud2lraS5hcnRpY2xlYmFzZV0pLmpvaW4oJ3wnKX0pYCk7XG5cdH07XG5cdC8vIEdsb2JhbCByZWdleHBzXG5cdGNvbnN0IHNldE1haW5SZWdleCA9ICgpID0+IHtcblx0XHRjb25zdCByZVN0YXJ0ID0gJ1teOl0qOi8vJztcblx0XHRsZXQgcHJlVGl0bGVzID0gYCR7bGl0ZXJhbGl6ZVJlZ2V4KG13LmNvbmZpZy5nZXQoJ3dnU2NyaXB0UGF0aCcpKX0vKD86aW5kZXhbLl1waHB8d2lraVsuXXBodG1sKVs/XXRpdGxlPWA7XG5cdFx0cHJlVGl0bGVzICs9IGB8JHtsaXRlcmFsaXplUmVnZXgoYCR7cGcud2lraS5hcnRpY2xlUGF0aH0vYCl9YDtcblx0XHRjb25zdCByZUVuZCA9IGAoJHtwcmVUaXRsZXN9KShbXiY/I10qKVteI10qKD86IyguKykpP2A7XG5cdFx0cGcucmUubWFpbiA9IG5ldyBSZWdFeHAocmVTdGFydCArIGxpdGVyYWxpemVSZWdleChwZy53aWtpLnNpdGViYXNlKSArIHJlRW5kKTtcblx0fTtcblx0Y29uc3QgYnVpbGRTcGVjaWFsUGFnZUdyb3VwID0gKHNwZWNpYWxQYWdlT2JqKSA9PiB7XG5cdFx0Y29uc3QgdmFyaWFudHMgPSBbXTtcblx0XHR2YXJpYW50cy5wdXNoKFxuXHRcdFx0bXcudXRpbC5lc2NhcGVSZWdFeHAoc3BlY2lhbFBhZ2VPYmoucmVhbG5hbWUpLFxuXHRcdFx0bXcudXRpbC5lc2NhcGVSZWdFeHAoZW5jb2RlVVJJKHNwZWNpYWxQYWdlT2JqLnJlYWxuYW1lKSlcblx0XHQpO1xuXHRcdGZvciAoY29uc3QgYWxpYXMgb2Ygc3BlY2lhbFBhZ2VPYmouYWxpYXNlcykge1xuXHRcdFx0dmFyaWFudHMucHVzaChtdy51dGlsLmVzY2FwZVJlZ0V4cChhbGlhcyksIG13LnV0aWwuZXNjYXBlUmVnRXhwKGVuY29kZVVSSShhbGlhcykpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhcmlhbnRzLmpvaW4oJ3wnKTtcblx0fTtcblx0Y29uc3Qgc2V0UmVnZXhwcyA9ICgpID0+IHtcblx0XHRzZXRNYWluUmVnZXgoKTtcblx0XHRjb25zdCBzcCA9IG5zUmUocGcubnNTcGVjaWFsSWQpO1xuXHRcdHBnLnJlLnVybE5vUG9wdXAgPSBuZXcgUmVnRXhwKGAoKHRpdGxlPXwvKSR7c3B9KD86JTNBfDopfHNlY3Rpb249WzAtOV18XiMkKWApO1xuXHRcdGZvciAoY29uc3Qgc3BlY2lhbHBhZ2Ugb2YgcGcud2lraS5zcGVjaWFscGFnZWFsaWFzZXMpIHtcblx0XHRcdHN3aXRjaCAoc3BlY2lhbHBhZ2UucmVhbG5hbWUpIHtcblx0XHRcdFx0Y2FzZSAnQ29udHJpYnV0aW9ucyc6XG5cdFx0XHRcdFx0cGcucmUuY29udHJpYnMgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0YCh0aXRsZT18Lykke3NwfSg/OiUzQXw6KSg/OiR7YnVpbGRTcGVjaWFsUGFnZUdyb3VwKHNwZWNpYWxwYWdlKX0pYCArXG5cdFx0XHRcdFx0XHRcdGAoJnRhcmdldD18L3wvJHtuc1JlKHBnLm5zVXNlcklkKX06KSguKilgLFxuXHRcdFx0XHRcdFx0J2knXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnRGlmZic6XG5cdFx0XHRcdFx0cGcucmUuc3BlY2lhbGRpZmYgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0YC8ke3NwfSg/OiUzQXw6KSg/OiR7YnVpbGRTcGVjaWFsUGFnZUdyb3VwKHNwZWNpYWxwYWdlKX0pLyhbXj8jXSopYCxcblx0XHRcdFx0XHRcdCdpJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0VtYWlsdXNlcic6XG5cdFx0XHRcdFx0cGcucmUuZW1haWwgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0YCh0aXRsZT18Lykke3NwfSg/OiUzQXw6KSg/OiR7YnVpbGRTcGVjaWFsUGFnZUdyb3VwKHNwZWNpYWxwYWdlKX0pYCArXG5cdFx0XHRcdFx0XHRcdGAoJnRhcmdldD18L3wvKD86JHtuc1JlKHBnLm5zVXNlcklkKX06KT8pKC4qKWAsXG5cdFx0XHRcdFx0XHQnaSdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdXaGF0bGlua3NoZXJlJzpcblx0XHRcdFx0XHRwZy5yZS5iYWNrbGlua3MgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0YCh0aXRsZT18Lykke3NwfSg/OiUzQXw6KSg/OiR7YnVpbGRTcGVjaWFsUGFnZUdyb3VwKHNwZWNpYWxwYWdlKX0pKCZ0YXJnZXQ9fC8pKFteJl0qKWAsXG5cdFx0XHRcdFx0XHQnaSdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBpbSA9IG5zUmVJbWFnZSgpO1xuXHRcdC8vIG5vdGU6IHRyaWVzIHRvIGdldCBpbWFnZXMgaW4gaW5mb2JveCB0ZW1wbGF0ZXMgdG9vLCBlLmcuIG1vdmllIHBhZ2VzLCBhbGJ1bSBwYWdlcyBldGNcblx0XHQvL1x0XHRcdFx0XHQgIChefFxcW1xcWylpbWFnZTogKihbXnxcXF1dKltefFxcXSBdKSAqXG5cdFx0Ly9cdFx0XHRcdFx0ICAoXnxcXFtcXFspaW1hZ2U6ICooW158XFxdXSpbXnxcXF0gXSkoW14wLTlcXF1dKihbMC05XSspICpweCk/XG5cdFx0Ly9cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JDQgPSAxMjAgYXMgaW4gMTIwcHhcblx0XHRwZy5yZS5pbWFnZSA9IG5ldyBSZWdFeHAoXG5cdFx0XHRgKF58XFxcXFtcXFxcWykke2ltfTogKihbXnxcXFxcXV0qW158XFxcXF0gXSkke1N0cmluZy5yYXdgKFteMC05XFxdXSooWzAtOV0rKSAqcHgpP3woPzpcXG4gKlt8XT98W3xdKSAqYH0oJHtnZXRWYWx1ZU9mKCdwb3B1cEltYWdlVmFyc1JlZ2V4cCcpfSlgICtcblx0XHRcdFx0YCAqPSAqKD86XFxcXFtcXFxcWyAqKT8oPzoke2ltfTopPyR7U3RyaW5nLnJhd2AoW158XSo/KSg/OlxcXVxcXSk/ICpbfF0/ICpcXG5gfWAsXG5cdFx0XHQnaW1nJ1xuXHRcdCk7XG5cdFx0cGcucmUuaW1hZ2VCcmFja2V0Q291bnQgPSA2O1xuXHRcdHBnLnJlLmNhdGVnb3J5ID0gbmV3IFJlZ0V4cChgXFxcXFtcXFxcWyR7bnNSZShwZy5uc0NhdGVnb3J5SWQpfTogKihbXnxcXFxcXV0qW158XFxcXF0gXSkgKmAsICdpJyk7XG5cdFx0cGcucmUuY2F0ZWdvcnlCcmFja2V0Q291bnQgPSAxO1xuXHRcdC8vIElQdjYgfCBJUHY0XG5cdFx0cGcucmUuaXBVc2VyID1cblx0XHRcdC9eKD86Oig/Ojp8KD86OltcXGRBLUZhLWZdezEsNH0pezEsN30pfFtcXGRBLUZhLWZdezEsNH0oPzo6W1xcZEEtRmEtZl17MSw0fSl7MCw2fTo6fFtcXGRBLUZhLWZdezEsNH0oPzo6W1xcZEEtRmEtZl17MSw0fSl7N30pfCgoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKVxcLil7M30oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKSQvO1xuXHRcdHBnLnJlLnN0dWIgPSBuZXcgUmVnRXhwKGdldFZhbHVlT2YoJ3BvcHVwU3R1YlJlZ2V4cCcpLCAnaW0nKTtcblx0XHRwZy5yZS5kaXNhbWJpZyA9IG5ldyBSZWdFeHAoZ2V0VmFsdWVPZigncG9wdXBEYWJSZWdleHAnKSwgJ2ltJyk7XG5cdFx0Ly8gRklYTUUgcmVwbGFjZSB3aXRoIGdlbmVyYWwgcGFyYW1ldGVyIHBhcnNpbmcgZnVuY3Rpb24sIHRoaXMgaXMgZGFmdFxuXHRcdHBnLnJlLm9sZGlkID0gL1smP11vbGRpZD0oW14mXSopLztcblx0XHRwZy5yZS5kaWZmID0gL1smP11kaWZmPShbXiZdKikvO1xuXHR9O1xuXHQvLyBtaXNjZWxsYW55XG5cdGNvbnN0IHNldHVwQ2FjaGUgPSAoKSA9PiB7XG5cdFx0Ly8gcGFnZSBjYWNoaW5nXG5cdFx0cGcuY2FjaGUucGFnZXMgPSBbXTtcblx0fTtcblx0Y29uc3Qgc2V0TWlzYyA9ICgpID0+IHtcblx0XHRwZy5jdXJyZW50LmxpbmsgPSBudWxsO1xuXHRcdHBnLmN1cnJlbnQubGlua3MgPSBbXTtcblx0XHRwZy5jdXJyZW50LmxpbmtzSGFzaCA9IHt9O1xuXHRcdHNldHVwQ2FjaGUoKTtcblx0XHRwZy50aW1lci5jaGVja1BvcHVwUG9zaXRpb24gPSBudWxsO1xuXHRcdHBnLmNvdW50ZXIubG9vcCA9IDA7XG5cdFx0Ly8gaWRzIGNoYW5nZSB3aXRoIGVhY2ggcG9wdXA6IHBvcHVwSW1hZ2UwLCBwb3B1cEltYWdlMSBldGNcblx0XHRwZy5pZE51bWJlciA9IDA7XG5cdFx0Ly8gZm9yIG15RGVjb2RlVVJJXG5cdFx0cGcubWlzYy5kZWNvZGVFeHRyYXMgPSBbXG5cdFx0XHR7ZnJvbTogJyUyQycsIHRvOiAnLCd9LFxuXHRcdFx0e2Zyb206ICdfJywgdG86ICcgJ30sXG5cdFx0XHR7ZnJvbTogJyUyNCcsIHRvOiAnJCd9LFxuXHRcdFx0e2Zyb206ICclMjYnLCB0bzogJyYnfSwgLy8gbm8gLFxuXHRcdF07XG5cdH07XG5cdGNvbnN0IGdldE13QXBpID0gKCkgPT4ge1xuXHRcdGlmICghcGcuYXBpLmNsaWVudCkge1xuXHRcdFx0cGcuYXBpLnVzZXJBZ2VudCA9ICdOYXZpZ2F0aW9uIHBvcHVwcy8xLjAnO1xuXHRcdFx0cGcuYXBpLmNsaWVudCA9IGFwaTtcblx0XHR9XG5cdFx0cmV0dXJuIHBnLmFwaS5jbGllbnQ7XG5cdH07XG5cdC8vIFdlIG5lZWQgYSBjYWxsYmFjayBzaW5jZSB0aGlzIG1pZ2h0IGVuZCB1cCBhc3luY2hyb25vdXMgYmVjYXVzZSBvZlxuXHQvLyB0aGUgbXcubG9hZGVyLnVzaW5nKCkgY2FsbC5cblx0Y29uc3Qgc2V0dXBQb3B1cHMgPSBmdW5jdGlvbiBzZXR1cFBvcHVwcyhjYWxsYmFjaykge1xuXHRcdGlmIChzZXR1cFBvcHVwcy5jb21wbGV0ZWQpIHtcblx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gVGhlc2UgZGVwZW5kZW5jaWVzIHNob3VsZCBhbHNlIGJlIGVuZm9yY2VkIGZyb20gdGhlIGdhZGdldCxcblx0XHQvLyBidXQgbm90IGV2ZXJ5b25lIGxvYWRzIHRoaXMgYXMgYSBnYWRnZXQsIHNvIGRvdWJsZSBjaGVja1xuXHRcdGZldGNoU3BlY2lhbFBhZ2VOYW1lcygpLnRoZW4oKCkgPT4ge1xuXHRcdFx0Ly8gTkIgdHJhbnNsYXRhYmxlIHN0cmluZ3Mgc2hvdWxkIGJlIHNldCB1cCBmaXJzdCAoc3RyaW5ncy5qcylcblx0XHRcdC8vIGJhc2ljc1xuXHRcdFx0c2V0dXBEZWJ1Z2dpbmcoKTtcblx0XHRcdHNldFNpdGVJbmZvKCk7XG5cdFx0XHRzZXRUaXRsZUJhc2UoKTtcblx0XHRcdHNldE9wdGlvbnMoKTsgLy8gc2VlIG9wdGlvbnMuanNcblx0XHRcdHNldFVzZXJJbmZvKCk7XG5cdFx0XHQvLyBuYW1lc3BhY2VzIGV0Y1xuXHRcdFx0c2V0TmFtZXNwYWNlcygpO1xuXHRcdFx0c2V0SW50ZXJ3aWtpKCk7XG5cdFx0XHQvLyByZWdleHBzXG5cdFx0XHRzZXRSZWdleHBzKCk7XG5cdFx0XHRzZXRSZWRpcnMoKTtcblx0XHRcdC8vIG90aGVyIHN0dWZmXG5cdFx0XHRzZXRNaXNjKCk7XG5cdFx0XHRzZXR1cExpdmVQcmV2aWV3KCk7XG5cdFx0XHQvLyBtYWluIGRlYWwgaGVyZVxuXHRcdFx0c2V0dXBUb29sdGlwcygpO1xuXHRcdFx0bG9nKCdJbiBzZXR1cFBvcHVwcygpLCBqdXN0IGNhbGxlZCBzZXR1cFRvb2x0aXBzKCknKTtcblx0XHRcdE5hdnBvcHVwLnRyYWNrZXIuZW5hYmxlKCk7XG5cdFx0XHRzZXR1cFBvcHVwcy5jb21wbGV0ZWQgPSB0cnVlO1xuXHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBpbml0LmpzXG5cdC8vIFNUQVJURklMRTogbmF2bGlua3MuanNcblx0Ly8gbmF2bGlua3MuLi4gbGV0IHRoZSBmdW4gYmVnaW5cblx0Ly9cblx0Y29uc3QgZGVmYXVsdE5hdmxpbmtTcGVjID0gKCkgPT4ge1xuXHRcdGxldCBzdHIgPSAnJztcblx0XHRzdHIgKz0gJzxiPjw8bWFpbmxpbmt8c2hvcnRjdXQ9ID4+PC9iPic7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwTGFzdEVkaXRMaW5rJykpIHtcblx0XHRcdHN0ciArPSAnKjw8bGFzdEVkaXR8c2hvcnRjdXQ9Lz4+fDw8bGFzdENvbnRyaWI+Pnw8PHNpbmNlTWU+PmlmKG9sZGlkKXt8PDxvbGRFZGl0Pj58PDxkaWZmQ3VyPj59Jztcblx0XHR9XG5cdFx0Ly8gdXNlciBsaW5rc1xuXHRcdC8vIGNvbnRyaWJzIC0gbG9nIC0gY291bnQgLSBlbWFpbCAtIGJsb2NrXG5cdFx0Ly8gY291bnQgb25seSBpZiBhcHBsaWNhYmxlOyBibG9jayBvbmx5IGlmIHBvcHVwQWRtaW5MaW5rc1xuXHRcdHN0ciArPSAnaWYodXNlcil7PGJyPjw8Y29udHJpYnN8c2hvcnRjdXQ9Yz4+Kjw8dXNlcmxvZ3xzaG9ydGN1dD1MfGxvZz4+Jztcblx0XHRzdHIgKz0gJ2lmKGlwdXNlcil7Kjw8YXJpbj4+fWlmKHdpa2ltZWRpYSl7Kjw8Y291bnR8c2hvcnRjdXQ9Iz4+fSc7XG5cdFx0c3RyICs9ICdpZihpcHVzZXIpe31lbHNleyo8PGVtYWlsfHNob3J0Y3V0PUU+Pn1pZihhZG1pbil7Kjw8YmxvY2t8c2hvcnRjdXQ9Yj4+fDw8YmxvY2tsb2d8bG9nPj59fSc7XG5cdFx0Ly8gZWRpdGluZyBsaW5rc1xuXHRcdC8vIHRhbGtwYWdlICAgLT4gZWRpdHxuZXcgLSBoaXN0b3J5IC0gdW58d2F0Y2ggLSBhcnRpY2xlfGVkaXRcblx0XHQvLyBvdGhlciBwYWdlIC0+IGVkaXQgLSBoaXN0b3J5IC0gdW58d2F0Y2ggLSB0YWxrfGVkaXR8bmV3XG5cdFx0Y29uc3QgZWRpdHN0ciA9ICc8PGVkaXR8c2hvcnRjdXQ9ZT4+Jztcblx0XHRjb25zdCBlZGl0T2xkaWRTdHIgPSBgaWYob2xkaWQpezw8ZWRpdE9sZHxzaG9ydGN1dD1lPj58PDxyZXZlcnR8c2hvcnRjdXQ9dnxydj4+fDw8ZWRpdHxjdXI+Pn1lbHNleyR7ZWRpdHN0cn19YDtcblx0XHRjb25zdCBoaXN0b3J5c3RyID0gJzw8aGlzdG9yeXxzaG9ydGN1dD1oPj58PDxlZGl0b3JzfHNob3J0Y3V0PUV8Pj4nO1xuXHRcdGNvbnN0IHdhdGNoc3RyID0gJzw8dW53YXRjaHx1bndhdGNoU2hvcnQ+Pnw8PHdhdGNofHNob3J0Y3V0PXd8d2F0Y2hUaGluZ3k+Pic7XG5cdFx0c3RyICs9XG5cdFx0XHRgPGJyPmlmKHRhbGspeyR7ZWRpdE9sZGlkU3RyfXw8PG5ld3xzaG9ydGN1dD0rPj5gICtcblx0XHRcdGAqJHtoaXN0b3J5c3RyfSoke3dhdGNoc3RyfSpgICtcblx0XHRcdCc8Yj48PGFydGljbGV8c2hvcnRjdXQ9YT4+PC9iPnw8PGVkaXRBcnRpY2xlfGVkaXQ+PicgK1xuXHRcdFx0YH1lbHNleyR7XG5cdFx0XHRcdC8vIG5vdCBhIHRhbGsgcGFnZVxuXHRcdFx0XHRlZGl0T2xkaWRTdHJcblx0XHRcdH0qJHtoaXN0b3J5c3RyfSoke3dhdGNoc3RyfSpgICtcblx0XHRcdCc8Yj48PHRhbGt8c2hvcnRjdXQ9dD4+PC9iPnw8PGVkaXRUYWxrfGVkaXQ+Pnw8PG5ld1RhbGt8c2hvcnRjdXQ9K3xuZXc+Pn0nO1xuXHRcdC8vIG1pc2MgbGlua3Ncblx0XHRzdHIgKz0gJzxicj48PHdoYXRMaW5rc0hlcmV8c2hvcnRjdXQ9bD4+Kjw8cmVsYXRlZENoYW5nZXN8c2hvcnRjdXQ9cj4+Kjw8bW92ZXxzaG9ydGN1dD1tPj4nO1xuXHRcdC8vIGFkbWluIGxpbmtzXG5cdFx0c3RyICs9XG5cdFx0XHQnaWYoYWRtaW4pezxicj48PHVucHJvdGVjdHx1bnByb3RlY3RTaG9ydD4+fDw8cHJvdGVjdHxzaG9ydGN1dD1wPj58PDxwcm90ZWN0bG9nfGxvZz4+KicgK1xuXHRcdFx0Jzw8dW5kZWxldGV8dW5kZWxldGVTaG9ydD4+fDw8ZGVsZXRlfHNob3J0Y3V0PWQ+Pnw8PGRlbGV0ZWxvZ3xsb2c+Pn0nO1xuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cdGNvbnN0IG5hdkxpbmtzSFRNTCA9IChhcnRpY2xlLCBfaGludCwgcGFyYW1zKSA9PiB7XG5cdFx0Ly8gb2xkaWQsIHJjaWQpIHtcblx0XHRjb25zdCBzdHIgPSBgPHNwYW4gY2xhc3M9XCJwb3B1cE5hdkxpbmtzXCI+JHtkZWZhdWx0TmF2bGlua1NwZWMoKX08L3NwYW4+YDtcblx0XHQvLyBCQU1cblx0XHRyZXR1cm4gbmF2bGlua1N0cmluZ1RvSFRNTChzdHIsIGFydGljbGUsIHBhcmFtcyk7XG5cdH07XG5cdGNvbnN0IGV4cGFuZENvbmRpdGlvbmFsTmF2bGlua1N0cmluZyA9IGZ1bmN0aW9uIGV4cGFuZENvbmRpdGlvbmFsTmF2bGlua1N0cmluZyhzLCBhcnRpY2xlLCB6LCByZWN1cnNpb25Db3VudCkge1xuXHRcdGNvbnN0IHtvbGRpZH0gPSB6O1xuXHRcdGNvbnN0IHtyY2lkfSA9IHo7XG5cdFx0Y29uc3Qge2RpZmZ9ID0gejtcblx0XHQvLyBuZXN0ZWQgY29uZGl0aW9uYWxzICh1cCB0byAxMCBkZWVwKSBhcmUgb2ssIGhvcGVmdWxseSEgKHdvcmsgZnJvbSB0aGUgaW5zaWRlIG91dClcblx0XHRpZiAodHlwZW9mIHJlY3Vyc2lvbkNvdW50ICE9PSB0eXBlb2YgMCkge1xuXHRcdFx0cmVjdXJzaW9uQ291bnQgPSAwO1xuXHRcdH1cblx0XHQvLyAoMVx0IGlmXHRcXFxcKFx0KDJcdDIpXHRcXFxcKVx0ICB7KDNcdDMpfSAgKDQgICBlbHNlXHQgIHsoNVx0IDUpfSAgNCkxKVxuXHRcdGNvbnN0IGNvbmRpdGlvbmFsU3BsaXRSZWdleCA9IC8oOz9cXHMqaWZcXHMqXFwoXFxzKihcXHcqKVxccypcXClcXHMqeyhbXnt9XSopfShcXHMqZWxzZVxccyp7KFtee31dKj8pfXwpKS9pO1xuXHRcdGNvbnN0IHNwbGl0dGVkID0gcy5zcGxpdChjb25kaXRpb25hbFNwbGl0UmVnZXgpO1xuXHRcdC8vICQxOiB3aG9sZSBjb25kaXRpb25hbFxuXHRcdC8vICQyOiB0ZXN0IGNvbmRpdGlvblxuXHRcdC8vICQzOiB0cnVlIGV4cGFuc2lvblxuXHRcdC8vICQ0OiBlbHNlIGNsYXVzZSAocG9zc2libHkgZW1wdHkpXG5cdFx0Ly8gJDU6IGZhbHNlIGV4cGFuc2lvbiAocG9zc2libHkgbnVsbClcblx0XHRjb25zdCBudW1QYXJlbnMgPSA1O1xuXHRcdGxldCBbcmV0XSA9IHNwbGl0dGVkO1xuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXR0ZWQubGVuZ3RoOyBpID0gaSArIG51bVBhcmVucyArIDEpIHtcblx0XHRcdGNvbnN0IHRlc3RTdHJpbmcgPSBzcGxpdHRlZFtpICsgMiAtIDFdO1xuXHRcdFx0Y29uc3QgdHJ1ZVN0cmluZyA9IHNwbGl0dGVkW2kgKyAzIC0gMV07XG5cdFx0XHRsZXQgZmFsc2VTdHJpbmcgPSBzcGxpdHRlZFtpICsgNSAtIDFdO1xuXHRcdFx0aWYgKGZhbHNlU3RyaW5nID09PSB1bmRlZmluZWQgfHwgIWZhbHNlU3RyaW5nKSB7XG5cdFx0XHRcdGZhbHNlU3RyaW5nID0gJyc7XG5cdFx0XHR9XG5cdFx0XHRsZXQgdGVzdFJlc3VsdDtcblx0XHRcdHN3aXRjaCAodGVzdFN0cmluZykge1xuXHRcdFx0XHRjYXNlICd1c2VyJzpcblx0XHRcdFx0XHR0ZXN0UmVzdWx0ID0gISFhcnRpY2xlLnVzZXJOYW1lKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RhbGsnOlxuXHRcdFx0XHRcdHRlc3RSZXN1bHQgPSAhYXJ0aWNsZS50YWxrUGFnZSgpOyAvLyB0YWxrUGFnZSBjb252ZXJ0cyBfYXJ0aWNsZXNfIHRvIHRhbGtQYWdlc1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhZG1pbic6XG5cdFx0XHRcdFx0dGVzdFJlc3VsdCA9ICEhZ2V0VmFsdWVPZigncG9wdXBBZG1pbkxpbmtzJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ29sZGlkJzpcblx0XHRcdFx0XHR0ZXN0UmVzdWx0ID0gISEob2xkaWQgIT09IHVuZGVmaW5lZCAmJiBvbGRpZCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3JjaWQnOlxuXHRcdFx0XHRcdHRlc3RSZXN1bHQgPSAhIShyY2lkICE9PSB1bmRlZmluZWQgJiYgcmNpZCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2lwdXNlcic6XG5cdFx0XHRcdFx0dGVzdFJlc3VsdCA9ICEhYXJ0aWNsZS5pc0lwVXNlcigpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdtYWluc3BhY2VfZW4nOlxuXHRcdFx0XHRcdHRlc3RSZXN1bHQgPSBpc0luTWFpbk5hbWVzcGFjZShhcnRpY2xlKSAmJiBwZy53aWtpLmhvc3RuYW1lID09PSAnZW4ud2lraXBlZGlhLm9yZyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3dpa2ltZWRpYSc6XG5cdFx0XHRcdFx0dGVzdFJlc3VsdCA9ICEhcGcud2lraS53aWtpbWVkaWE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2RpZmYnOlxuXHRcdFx0XHRcdHRlc3RSZXN1bHQgPSAhIShkaWZmICE9PSB1bmRlZmluZWQgJiYgZGlmZik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHRlc3RSZXN1bHQpIHtcblx0XHRcdFx0Y2FzZSBudWxsOlxuXHRcdFx0XHRcdHJldCArPSBzcGxpdHRlZFtpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0cnVlOlxuXHRcdFx0XHRcdHJldCArPSB0cnVlU3RyaW5nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGZhbHNlOlxuXHRcdFx0XHRcdHJldCArPSBmYWxzZVN0cmluZztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdC8vIGFwcGVuZCBub24tY29uZGl0aW9uYWwgc3RyaW5nXG5cdFx0XHRyZXQgKz0gc3BsaXR0ZWRbaSArIG51bVBhcmVuc107XG5cdFx0fVxuXHRcdGlmIChjb25kaXRpb25hbFNwbGl0UmVnZXgudGVzdChyZXQpICYmIHJlY3Vyc2lvbkNvdW50IDwgMTApIHtcblx0XHRcdHJldHVybiBleHBhbmRDb25kaXRpb25hbE5hdmxpbmtTdHJpbmcocmV0LCBhcnRpY2xlLCB6LCByZWN1cnNpb25Db3VudCArIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHRjb25zdCBuYXZsaW5rU3RyaW5nVG9BcnJheSA9IChzLCBhcnRpY2xlLCBwYXJhbXMpID0+IHtcblx0XHRzID0gZXhwYW5kQ29uZGl0aW9uYWxOYXZsaW5rU3RyaW5nKHMsIGFydGljbGUsIHBhcmFtcyk7XG5cdFx0Y29uc3Qgc3BsaXR0ZWQgPSBzLnNwbGl0KC88PCguKj8pPj4vKTtcblx0XHRjb25zdCByZXQgPSBbXTtcblx0XHRmb3IgKGNvbnN0IFtpLCBlbGVtZW50XSBvZiBzcGxpdHRlZC5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChpICUgMikge1xuXHRcdFx0XHQvLyBpIG9kZCwgc28gcyBpcyBhIHRhZ1xuXHRcdFx0XHRjb25zdCB0ID0gbmV3IG5hdmxpbmtUYWcoKTtcblx0XHRcdFx0Y29uc3Qgc3MgPSBlbGVtZW50LnNwbGl0KCd8Jyk7XG5cdFx0XHRcdFt0LmlkXSA9IHNzO1xuXHRcdFx0XHRmb3IgKGxldCBqID0gMTsgaiA8IHNzLmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3NzID0gc3Nbal0uc3BsaXQoJz0nKTtcblx0XHRcdFx0XHRpZiAoc3NzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFssIHRbc3NzWzBdXV0gPSBzc3M7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIG5vIGFzc2lnbm1lbnQgKG5vIFwiPVwiKSwgc28gdHJlYXQgdGhpcyBhcyBhIHRpdGxlIChvdmVyd3JpdGluZyB0aGUgbGFzdCBvbmUpXG5cdFx0XHRcdFx0XHR0LnRleHQgPSBwb3B1cFN0cmluZyhzc3NbMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0LmFydGljbGUgPSBhcnRpY2xlO1xuXHRcdFx0XHRjb25zdCB7b2xkaWR9ID0gcGFyYW1zO1xuXHRcdFx0XHRjb25zdCB7cmNpZH0gPSBwYXJhbXM7XG5cdFx0XHRcdGNvbnN0IHtkaWZmfSA9IHBhcmFtcztcblx0XHRcdFx0aWYgKG9sZGlkICE9PSB1bmRlZmluZWQgJiYgb2xkaWQgIT09IG51bGwpIHtcblx0XHRcdFx0XHR0Lm9sZGlkID0gb2xkaWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJjaWQgIT09IHVuZGVmaW5lZCAmJiByY2lkICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0dC5yY2lkID0gcmNpZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGlmZiAhPT0gdW5kZWZpbmVkICYmIGRpZmYgIT09IG51bGwpIHtcblx0XHRcdFx0XHR0LmRpZmYgPSBkaWZmO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghdC50ZXh0ICYmIHQuaWQgIT09ICdtYWlubGluaycpIHtcblx0XHRcdFx0XHR0LnRleHQgPSBwb3B1cFN0cmluZyh0LmlkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXQucHVzaCh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHBsYWluIEhUTUxcblx0XHRcdFx0cmV0LnB1c2goZWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IG5hdmxpbmtTdWJzdGl0dXRlSFRNTCA9IChzKSA9PiB7XG5cdFx0cmV0dXJuIHNcblx0XHRcdC5zcGxpdCgnKicpXG5cdFx0XHQuam9pbihnZXRWYWx1ZU9mKCdwb3B1cE5hdkxpbmtTZXBhcmF0b3InKSlcblx0XHRcdC5zcGxpdCgnPG1lbnVyb3c+Jylcblx0XHRcdC5qb2luKCc8bGkgY2xhc3M9XCJwb3B1cF9tZW51X3Jvd1wiPicpXG5cdFx0XHQuc3BsaXQoJzwvbWVudXJvdz4nKVxuXHRcdFx0LmpvaW4oJzwvbGk+Jylcblx0XHRcdC5zcGxpdCgnPG1lbnU+Jylcblx0XHRcdC5qb2luKCc8dWwgY2xhc3M9XCJwb3B1cF9tZW51XCI+Jylcblx0XHRcdC5zcGxpdCgnPC9tZW51PicpXG5cdFx0XHQuam9pbignPC91bD4nKTtcblx0fTtcblx0Y29uc3QgbmF2bGlua0RlcHRoID0gKG1hZ2ljLCBzKSA9PiB7XG5cdFx0cmV0dXJuIHMuc3BsaXQoYDwke21hZ2ljfT5gKS5sZW5ndGggLSBzLnNwbGl0KGA8LyR7bWFnaWN9PmApLmxlbmd0aDtcblx0fTtcblx0Ly8gbmF2bGlua1N0cmluZzogKiBiZWNvbWVzIHRoZSBzZXBhcmF0b3Jcblx0Ly9cdFx0XHRcdDw8Zm9vfGJhcj1iYXp8ZnViYXI+PiBiZWNvbWVzIGEgZm9vLWxpbmsgd2l0aCBhdHRyaWJ1dGUgYmFyPSdiYXonXG5cdC8vXHRcdFx0XHRcdFx0XHRcdFx0ICBhbmQgdmlzaWJsZSB0ZXh0ICdmdWJhcidcblx0Ly9cdFx0XHRcdGlmKHRlc3Qpey4uLn0gYW5kIGlmKHRlc3Qpey4uLn1lbHNley4uLn0gd29yayB0b28gKG5lc3RlZCBvaylcblx0Y29uc3QgbmF2bGlua1N0cmluZ1RvSFRNTCA9IChzLCBhcnRpY2xlLCBwYXJhbXMpID0+IHtcblx0XHQvLyBsaW1pdEFsZXJ0KG5hdmxpbmtTdHJpbmdUb0hUTUwsIDUsICduYXZsaW5rU3RyaW5nVG9IVE1MXFxuJyArIGFydGljbGUgKyAnXFxuJyArICh0eXBlb2YgYXJ0aWNsZSkpO1xuXHRcdGNvbnN0IHAgPSBuYXZsaW5rU3RyaW5nVG9BcnJheShzLCBhcnRpY2xlLCBwYXJhbXMpO1xuXHRcdGxldCBodG1sID0gJyc7XG5cdFx0bGV0IG1lbnVkZXB0aCA9IDA7IC8vIG5lc3RlZCBtZW51cyBub3QgY3VycmVudGx5IGFsbG93ZWQsIGJ1dCBkb2Vzbid0IGRvIGFueSBoYXJtIHRvIGNvZGUgZm9yIGl0XG5cdFx0bGV0IG1lbnVyb3dkZXB0aCA9IDA7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHApIHtcblx0XHRcdGlmICh0eXBlb2YgZWxlbWVudCA9PT0gdHlwZW9mICcnKSB7XG5cdFx0XHRcdGh0bWwgKz0gbmF2bGlua1N1YnN0aXR1dGVIVE1MKGVsZW1lbnQpO1xuXHRcdFx0XHRtZW51ZGVwdGggKz0gbmF2bGlua0RlcHRoKCdtZW51JywgZWxlbWVudCk7XG5cdFx0XHRcdG1lbnVyb3dkZXB0aCArPSBuYXZsaW5rRGVwdGgoJ21lbnVyb3cnLCBlbGVtZW50KTtcblx0XHRcdFx0Ly9cdFx0XHRpZiAobWVudWRlcHRoID09PSAwKSB7XG5cdFx0XHRcdC8vXHRcdFx0XHR0YWdUeXBlPSdzcGFuJztcblx0XHRcdFx0Ly9cdFx0XHR9IGVsc2UgaWYgKG1lbnVyb3dkZXB0aCA9PT0gMCkge1xuXHRcdFx0XHQvL1x0XHRcdFx0dGFnVHlwZT0nbGknO1xuXHRcdFx0XHQvL1x0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vXHRcdFx0XHR0YWdUeXBlID0gbnVsbDtcblx0XHRcdFx0Ly9cdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQudHlwZSA9PT0gJ25hdmxpbmtUYWcnKSB7XG5cdFx0XHRcdGh0bWwgKz1cblx0XHRcdFx0XHRtZW51ZGVwdGggPiAwICYmIG1lbnVyb3dkZXB0aCA9PT0gMFxuXHRcdFx0XHRcdFx0PyBgPGxpIGNsYXNzPVwicG9wdXBfbWVudV9pdGVtXCI+JHtlbGVtZW50Lmh0bWwoKX08L2xpPmBcblx0XHRcdFx0XHRcdDogZWxlbWVudC5odG1sKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBodG1sO1xuXHR9O1xuXHRjbGFzcyBuYXZsaW5rVGFnIHtcblx0XHRjb25zdHJ1Y3RvcigpIHtcblx0XHRcdHRoaXMudHlwZSA9ICduYXZsaW5rVGFnJztcblx0XHR9XG5cdFx0aHRtbCgpIHtcblx0XHRcdHRoaXMuZ2V0TmV3V2luKCk7XG5cdFx0XHR0aGlzLmdldFByaW50RnVuY3Rpb24oKTtcblx0XHRcdGxldCBodG1sID0gJyc7XG5cdFx0XHRsZXQgb3BlbmluZztcblx0XHRcdGxldCBjbG9zaW5nO1xuXHRcdFx0Y29uc3QgdGFnVHlwZSA9ICdzcGFuJztcblx0XHRcdGlmICh0YWdUeXBlKSB7XG5cdFx0XHRcdG9wZW5pbmcgPSBgPCR7dGFnVHlwZX0gY2xhc3M9XCJwb3B1cF8ke3RoaXMuaWR9XCI+YDtcblx0XHRcdFx0Y2xvc2luZyA9IGA8LyR7dGFnVHlwZX0+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wZW5pbmcgPSAnJztcblx0XHRcdFx0Y2xvc2luZyA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLnByaW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGh0bWwgPSB0aGlzLnByaW50KHRoaXMpO1xuXHRcdFx0XHRpZiAodHlwZW9mIGh0bWwgIT09IHR5cGVvZiAnJykge1xuXHRcdFx0XHRcdGh0bWwgPSAnJztcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnNob3J0Y3V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRodG1sID0gYWRkUG9wdXBTaG9ydGN1dChodG1sLCB0aGlzLnNob3J0Y3V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXJybG9nKGBPaCBkZWFyIC0gaW52YWxpZCBwcmludCBmdW5jdGlvbiBmb3IgYSBuYXZsaW5rVGFnLCBpZD0ke3RoaXMuaWR9YCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlbmluZyArIGh0bWwgKyBjbG9zaW5nO1xuXHRcdH1cblx0XHRnZXROZXdXaW4oKSB7XG5cdFx0XHRnZXRWYWx1ZU9mKCdwb3B1cExpbmtzTmV3V2luZG93Jyk7XG5cdFx0XHRpZiAocGcub3B0aW9uLnBvcHVwTGlua3NOZXdXaW5kb3dbdGhpcy5pZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLm5ld1dpbiA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ld1dpbiA9IHBnLm9wdGlvbi5wb3B1cExpbmtzTmV3V2luZG93W3RoaXMuaWRdO1xuXHRcdH1cblx0XHRnZXRQcmludEZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gdGhpbmsgYWJvdXQgdGhpcyBzb21lIG1vcmVcblx0XHRcdC8vIHRoaXMuaWQgYW5kIHRoaXMuYXJ0aWNsZSBzaG91bGQgYWxyZWFkeSBiZSBkZWZpbmVkXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuaWQgIT09IHR5cGVvZiAnJyB8fCB0eXBlb2YgdGhpcy5hcnRpY2xlICE9PSB0eXBlb2Yge30pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5ub1BvcHVwID0gMTtcblx0XHRcdHN3aXRjaCAodGhpcy5pZCkge1xuXHRcdFx0XHRjYXNlICdjb250cmlicyc6XG5cdFx0XHRcdGNhc2UgJ2hpc3RvcnknOlxuXHRcdFx0XHRjYXNlICd3aGF0TGlua3NIZXJlJzpcblx0XHRcdFx0Y2FzZSAndXNlclBhZ2UnOlxuXHRcdFx0XHRjYXNlICd1c2VyVGFsayc6XG5cdFx0XHRcdGNhc2UgJ3RhbGsnOlxuXHRcdFx0XHRjYXNlICdhcnRpY2xlJzpcblx0XHRcdFx0Y2FzZSAnbGFzdEVkaXQnOlxuXHRcdFx0XHRcdHRoaXMubm9Qb3B1cCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHRoaXMuaWQpIHtcblx0XHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0XHRjYXNlICdjb250cmlicyc6XG5cdFx0XHRcdGNhc2UgJ2Jsb2NrJzpcblx0XHRcdFx0Y2FzZSAndW5ibG9jayc6XG5cdFx0XHRcdGNhc2UgJ3VzZXJsb2cnOlxuXHRcdFx0XHRjYXNlICd1c2VyU3BhY2UnOlxuXHRcdFx0XHRjYXNlICdkZWxldGVkQ29udHJpYnMnOlxuXHRcdFx0XHRcdHRoaXMuYXJ0aWNsZSA9IHRoaXMuYXJ0aWNsZS51c2VyTmFtZSgpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoICh0aGlzLmlkKSB7XG5cdFx0XHRcdGNhc2UgJ3VzZXJUYWxrJzpcblx0XHRcdFx0Y2FzZSAnbmV3VXNlclRhbGsnOlxuXHRcdFx0XHRjYXNlICdlZGl0VXNlclRhbGsnOlxuXHRcdFx0XHRjYXNlICd1c2VyUGFnZSc6XG5cdFx0XHRcdGNhc2UgJ2Jsb2NrbG9nJzpcblx0XHRcdFx0XHR0aGlzLmFydGljbGUgPSB0aGlzLmFydGljbGUudXNlck5hbWUodHJ1ZSk7XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSAncGFnZWxvZyc6XG5cdFx0XHRcdGNhc2UgJ2RlbGV0ZWxvZyc6XG5cdFx0XHRcdGNhc2UgJ3Byb3RlY3Rsb2cnOlxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLm9sZGlkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuaWQgIT09ICdtYWlubGluaycpIHtcblx0XHRcdFx0Ly8gRklYTUUgYW5jaG9yIGhhbmRsaW5nIHNob3VsZCBiZSBkb25lIGRpZmZlcmVudGx5IHdpdGggVGl0bGUgb2JqZWN0XG5cdFx0XHRcdHRoaXMuYXJ0aWNsZSA9IHRoaXMuYXJ0aWNsZS5yZW1vdmVBbmNob3IoKTtcblx0XHRcdFx0Ly8gaWYgKHR5cGVvZiB0aGlzLnRleHQ9PSd1bmRlZmluZWQnKSB7IHRoaXMudGV4dD1wb3B1cFN0cmluZyh0aGlzLmlkKTsgfVxuXHRcdFx0fVxuXHRcdFx0c3dpdGNoICh0aGlzLmlkKSB7XG5cdFx0XHRcdGNhc2UgJ3VuZGVsZXRlJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdVbmRlbGV0ZSc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnLyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3doYXRMaW5rc0hlcmUnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ1doYXRsaW5rc2hlcmUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdyZWxhdGVkQ2hhbmdlcyc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHNwZWNpYWxMaW5rO1xuXHRcdFx0XHRcdHRoaXMuc3BlY2lhbHBhZ2UgPSAnUmVjZW50Y2hhbmdlc2xpbmtlZCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ21vdmUnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ01vdmVwYWdlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnY29udHJpYnMnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ0NvbnRyaWJ1dGlvbnMnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkZWxldGVkQ29udHJpYnMnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ0RlbGV0ZWRjb250cmlidXRpb25zJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ0VtYWlsVXNlcic7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnLyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2Jsb2NrJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdCbG9ja2lwJztcblx0XHRcdFx0XHR0aGlzLnNlcCA9ICcmaXA9Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndW5ibG9jayc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHNwZWNpYWxMaW5rO1xuXHRcdFx0XHRcdHRoaXMuc3BlY2lhbHBhZ2UgPSAnSXBibG9ja2xpc3QnO1xuXHRcdFx0XHRcdHRoaXMuc2VwID0gJyZhY3Rpb249dW5ibG9jayZpcD0nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd1c2VybG9nJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdMb2cnO1xuXHRcdFx0XHRcdHRoaXMuc2VwID0gJyZ1c2VyPSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2Jsb2NrbG9nJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdMb2cnO1xuXHRcdFx0XHRcdHRoaXMuc2VwID0gJyZ0eXBlPWJsb2NrJnBhZ2U9Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncGFnZWxvZyc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHNwZWNpYWxMaW5rO1xuXHRcdFx0XHRcdHRoaXMuc3BlY2lhbHBhZ2UgPSAnTG9nJztcblx0XHRcdFx0XHR0aGlzLnNlcCA9ICcmcGFnZT0nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdwcm90ZWN0bG9nJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdMb2cnO1xuXHRcdFx0XHRcdHRoaXMuc2VwID0gJyZ0eXBlPXByb3RlY3QmcGFnZT0nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkZWxldGVsb2cnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ0xvZyc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnJnR5cGU9ZGVsZXRlJnBhZ2U9Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndXNlclNwYWNlJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdQcmVmaXhJbmRleCc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnJm5hbWVzcGFjZT0yJnByZWZpeD0nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdzZWFyY2gnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ1NlYXJjaCc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnJmZ1bGx0ZXh0PVNlYXJjaCZzZWFyY2g9Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndGhhbmsnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ1RoYW5rcyc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnLyc7XG5cdFx0XHRcdFx0dGhpcy5hcnRpY2xlLnZhbHVlID0gdGhpcy5kaWZmID09PSAncHJldicgPyB0aGlzLm9sZGlkIDogdGhpcy5kaWZmO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd1bndhdGNoJzpcblx0XHRcdFx0Y2FzZSAnd2F0Y2gnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBtYWdpY1dhdGNoTGluaztcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9IGAke3RoaXMuaWR9JmF1dG93YXRjaGxpc3Q9MSZhdXRvaW1wbD0ke3BvcHVwU3RyaW5nKFxuXHRcdFx0XHRcdFx0J2F1dG9lZGl0X3ZlcnNpb24nXG5cdFx0XHRcdFx0KX0mYWN0b2tlbj0ke2F1dG9DbGlja1Rva2VuKCl9YDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnaGlzdG9yeSc6XG5cdFx0XHRcdGNhc2UgJ2hpc3RvcnlmZWVkJzpcblx0XHRcdFx0Y2FzZSAndW5wcm90ZWN0Jzpcblx0XHRcdFx0Y2FzZSAncHJvdGVjdCc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gdGhpcy5pZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZGVsZXRlJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSAnZGVsZXRlJztcblx0XHRcdFx0XHRpZiAodGhpcy5hcnRpY2xlLm5hbWVzcGFjZUlkKCkgPT09IHBnLm5zSW1hZ2VJZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaW1nID0gdGhpcy5hcnRpY2xlLnN0cmlwTmFtZXNwYWNlKCk7XG5cdFx0XHRcdFx0XHR0aGlzLmFjdGlvbiArPSBgJmltYWdlPSR7aW1nfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdtYXJrcGF0cm9sbGVkJzpcblx0XHRcdFx0Y2FzZSAnZWRpdCc6XG5cdFx0XHRcdFx0Ly8gZWRpdE9sZCBzaG91bGQga2VlcCB0aGUgb2xkaWQsIGJ1dCBlZGl0IHNob3VsZCBub3QuXG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMub2xkaWQ7XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSAndmlldyc6XG5cdFx0XHRcdGNhc2UgJ3B1cmdlJzpcblx0XHRcdFx0Y2FzZSAncmVuZGVyJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSB0aGlzLmlkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdyYXcnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSB3aWtpTGluaztcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9ICdyYXcnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICduZXcnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSB3aWtpTGluaztcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9ICdlZGl0JnNlY3Rpb249bmV3Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnbWFpbmxpbmsnOlxuXHRcdFx0XHRcdGlmICh0aGlzLnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0ID0gdGhpcy5hcnRpY2xlLnRvU3RyaW5nKCkuZW50aWZ5KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cFNpbXBsaWZ5TWFpbkxpbmsnKSAmJiBpc0luU3RyaXBwYWJsZU5hbWVzcGFjZSh0aGlzLmFydGljbGUpKSB7XG5cdFx0XHRcdFx0XHQvLyBvbmx5IHNob3cgdGhlIC9zdWJwYWdlIHBhcnQgb2YgdGhlIHRpdGxlIHRleHRcblx0XHRcdFx0XHRcdGNvbnN0IHMgPSB0aGlzLnRleHQuc3BsaXQoJy8nKTtcblx0XHRcdFx0XHRcdHRoaXMudGV4dCA9IHMuYXQoLTEpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMudGV4dCA9PT0gJycgJiYgcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGV4dCA9IHMuYXQoLTIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnByaW50ID0gdGl0bGVkV2lraUxpbms7XG5cdFx0XHRcdFx0aWYgKHRoaXMudGl0bGUgPT09IHVuZGVmaW5lZCAmJiBwZy5jdXJyZW50LmxpbmsgJiYgcGcuY3VycmVudC5saW5rLmhyZWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0dGhpcy50aXRsZSA9IHNhZmVEZWNvZGVVUkkocGcuY3VycmVudC5saW5rLm9yaWdpbmFsVGl0bGUgPz8gdGhpcy5hcnRpY2xlKTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLm9sZGlkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5vbGRpZCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRpdGxlID0gdHByaW50ZignUmV2aXNpb24gJXMgb2YgJXMnLCBbdGhpcy5vbGRpZCwgdGhpcy50aXRsZV0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9ICd2aWV3Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndXNlclBhZ2UnOlxuXHRcdFx0XHRjYXNlICdhcnRpY2xlJzpcblx0XHRcdFx0Y2FzZSAnZWRpdEFydGljbGUnOlxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLm9sZGlkO1xuXHRcdFx0XHRcdC8vIG13Lm5vdGlmeShgJHt0aGlzLmlkfVxcbiR7dGhpcy5hcnRpY2xlfVxcbiR7dHlwZW9mIHRoaXMuYXJ0aWNsZX1gLCB7dGFnOiAncG9wdXBzJywgdHlwZTogJ3dhcm4nfSk7XG5cdFx0XHRcdFx0dGhpcy5hcnRpY2xlID0gdGhpcy5hcnRpY2xlLmFydGljbGVGcm9tVGFsa09yQXJ0aWNsZSgpO1xuXHRcdFx0XHRcdC8vIG13Lm5vdGlmeShgJHt0aGlzLmlkfVxcbiR7dGhpcy5hcnRpY2xlfVxcbiR7dHlwZW9mIHRoaXMuYXJ0aWNsZX1gLCB7dGFnOiAncG9wdXBzJywgdHlwZTogJ3dhcm4nfSk7XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gdGhpcy5pZC5pbmRleE9mKCdlZGl0JykgPT09IDAgPyAnZWRpdCcgOiAndmlldyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3VzZXJUYWxrJzpcblx0XHRcdFx0Y2FzZSAndGFsayc6XG5cdFx0XHRcdFx0dGhpcy5hcnRpY2xlID0gdGhpcy5hcnRpY2xlLnRhbGtQYWdlKCk7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMub2xkaWQ7XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gJ3ZpZXcnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcmluJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gYXJpbkxpbms7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2NvdW50Jzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gZWRpdENvdW50ZXJMaW5rO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdlZGl0b3JzJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gZWRpdG9yTGlzdExpbms7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2xhc3RFZGl0Jzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gdGl0bGVkRGlmZkxpbms7XG5cdFx0XHRcdFx0dGhpcy50aXRsZSA9IHBvcHVwU3RyaW5nKCdTaG93IHRoZSBsYXN0IGVkaXQnKTtcblx0XHRcdFx0XHR0aGlzLmZyb20gPSAncHJldic7XG5cdFx0XHRcdFx0dGhpcy50byA9ICdjdXInO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdvbGRFZGl0Jzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gdGl0bGVkRGlmZkxpbms7XG5cdFx0XHRcdFx0dGhpcy50aXRsZSA9IGAke3BvcHVwU3RyaW5nKCdTaG93IHRoZSBlZGl0IG1hZGUgdG8gZ2V0IHJldmlzaW9uJyl9ICR7dGhpcy5vbGRpZH1gO1xuXHRcdFx0XHRcdHRoaXMuZnJvbSA9ICdwcmV2Jztcblx0XHRcdFx0XHR0aGlzLnRvID0gdGhpcy5vbGRpZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZWRpdE9sZCc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gJ2VkaXQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd1bmRvJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSAnZWRpdCZ1bmRvPSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3JldmVydCc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gJ3JldmVydCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ251bGxFZGl0Jzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSAnbnVsbEVkaXQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkaWZmQ3VyJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gdGl0bGVkRGlmZkxpbms7XG5cdFx0XHRcdFx0dGhpcy50aXRsZSA9IHRwcmludGYoJ1Nob3cgY2hhbmdlcyBzaW5jZSByZXZpc2lvbiAlcycsIFt0aGlzLm9sZGlkXSk7XG5cdFx0XHRcdFx0dGhpcy5mcm9tID0gdGhpcy5vbGRpZDtcblx0XHRcdFx0XHR0aGlzLnRvID0gJ2N1cic7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2VkaXRVc2VyVGFsayc6XG5cdFx0XHRcdGNhc2UgJ2VkaXRUYWxrJzpcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5vbGRpZDtcblx0XHRcdFx0XHR0aGlzLmFydGljbGUgPSB0aGlzLmFydGljbGUudGFsa1BhZ2UoKTtcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9ICdlZGl0Jztcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ25ld1VzZXJUYWxrJzpcblx0XHRcdFx0Y2FzZSAnbmV3VGFsayc6XG5cdFx0XHRcdFx0dGhpcy5hcnRpY2xlID0gdGhpcy5hcnRpY2xlLnRhbGtQYWdlKCk7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSAnZWRpdCZzZWN0aW9uPW5ldyc7XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdsYXN0Q29udHJpYic6XG5cdFx0XHRcdGNhc2UgJ3NpbmNlTWUnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBtYWdpY0hpc3RvcnlMaW5rO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0b2dnbGVQcmV2aWV3cyc6XG5cdFx0XHRcdFx0dGhpcy50ZXh0ID0gcG9wdXBTdHJpbmcocGcub3B0aW9uLnNpbXBsZVBvcHVwcyA/ICdlbmFibGUgcHJldmlld3MnIDogJ2Rpc2FibGUgcHJldmlld3MnKTtcblx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlICdkaXNhYmxlUG9wdXBzJzpcblx0XHRcdFx0Y2FzZSAncHVyZ2VQb3B1cHMnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBwb3B1cE1lbnVMaW5rO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYFVua25vd24gbmF2bGluayB0eXBlOiAke3RoaXMuaWR9YDtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvL1xuXHQvLyAgZW5kIG5hdmxpbmtzXG5cdC8vIEVOREZJTEU6IG5hdmxpbmtzLmpzXG5cdC8vIFNUQVJURklMRTogc2hvcnRjdXRrZXlzLmpzXG5cdGNvbnN0IHBvcHVwSGFuZGxlS2V5cHJlc3MgPSBmdW5jdGlvbiBwb3B1cEhhbmRsZUtleXByZXNzKGV2dCkge1xuXHRcdGNvbnN0IGtleUNvZGUgPSB3aW5kb3cuZXZlbnQgPyB3aW5kb3cuZXZlbnQua2V5Q29kZSA6IChldnQua2V5Q29kZSA/PyBldnQud2hpY2gpO1xuXHRcdGlmICgha2V5Q29kZSB8fCAhcGcuY3VycmVudC5saW5rIHx8ICFwZy5jdXJyZW50LmxpbmsubmF2cG9wdXApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGtleUNvZGUgPT09IDI3KSB7XG5cdFx0XHQvLyBlc2NhcGVcblx0XHRcdGtpbGxQb3B1cCgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBzd2FsbG93IGtleXByZXNzXG5cdFx0fVxuXHRcdGNvbnN0IGxldHRlciA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGtleUNvZGUpO1xuXHRcdGNvbnN0IGxpbmtzID0gcGcuY3VycmVudC5saW5rLm5hdnBvcHVwLm1haW5EaXYucXVlcnlTZWxlY3RvckFsbCgnQScpO1xuXHRcdGxldCBzdGFydExpbmsgPSAwO1xuXHRcdGxldCBpO1xuXHRcdGxldCBqO1xuXHRcdGlmIChwb3B1cEhhbmRsZUtleXByZXNzLmxhc3RQb3B1cExpbmtTZWxlY3RlZCkge1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdGlmIChsaW5rc1tpXSA9PT0gcG9wdXBIYW5kbGVLZXlwcmVzcy5sYXN0UG9wdXBMaW5rU2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRzdGFydExpbmsgPSBpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoaiA9IDA7IGogPCBsaW5rcy5sZW5ndGg7ICsraikge1xuXHRcdFx0aSA9IChzdGFydExpbmsgKyBqICsgMSkgJSBsaW5rcy5sZW5ndGg7XG5cdFx0XHRpZiAobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdwb3B1cGtleScpID09PSBsZXR0ZXIpIHtcblx0XHRcdFx0aWYgKGV2dCAmJiBldnQucHJldmVudERlZmF1bHQpIHtcblx0XHRcdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaW5rc1tpXS5mb2N1cygpO1xuXHRcdFx0XHRwb3B1cEhhbmRsZUtleXByZXNzLmxhc3RQb3B1cExpbmtTZWxlY3RlZCA9IGxpbmtzW2ldO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIHN3YWxsb3cga2V5cHJlc3Ncblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gcGFzcyBrZXlwcmVzcyBvblxuXHRcdGlmIChkb2N1bWVudC5vbGRQb3B1cE9ua2V5cHJlc3MpIHtcblx0XHRcdHJldHVybiBkb2N1bWVudC5vbGRQb3B1cE9ua2V5cHJlc3MoZXZ0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cdGNvbnN0IGFkZFBvcHVwU2hvcnRjdXRzID0gKCkgPT4ge1xuXHRcdGlmIChkb2N1bWVudC5vbmtleXByZXNzICE9PSBwb3B1cEhhbmRsZUtleXByZXNzKSB7XG5cdFx0XHRkb2N1bWVudC5vbGRQb3B1cE9ua2V5cHJlc3MgPSBkb2N1bWVudC5vbmtleXByZXNzO1xuXHRcdH1cblx0XHRkb2N1bWVudC5vbmtleXByZXNzID0gcG9wdXBIYW5kbGVLZXlwcmVzcztcblx0fTtcblx0Y29uc3Qgcm1Qb3B1cFNob3J0Y3V0cyA9ICgpID0+IHtcblx0XHRwb3B1cEhhbmRsZUtleXByZXNzLmxhc3RQb3B1cExpbmtTZWxlY3RlZCA9IG51bGw7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChkb2N1bWVudC5vbGRQb3B1cE9ua2V5cHJlc3MgJiYgZG9jdW1lbnQub2xkUG9wdXBPbmtleXByZXNzID09PSBwb3B1cEhhbmRsZUtleXByZXNzKSB7XG5cdFx0XHRcdC8vIHBhbmljXG5cdFx0XHRcdGRvY3VtZW50Lm9ua2V5cHJlc3MgPSBudWxsOyAvLyAoKSA9PiB7fTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZG9jdW1lbnQub25rZXlwcmVzcyA9IGRvY3VtZW50Lm9sZFBvcHVwT25rZXlwcmVzcztcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8qIElFIGdvZXMgaGVyZSAqL1xuXHRcdH1cblx0fTtcblx0Y29uc3QgYWRkTGlua1Byb3BlcnR5ID0gKGh0bWwsIHByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gdGFrZSBcIjxhIGhyZWY9Li4uPi4uLjwvYT4gYW5kIGFkZCBhIHByb3BlcnR5XG5cdFx0Ly8gbm90IHNvcGhpc3RpY2F0ZWQgYXQgYWxsLCBlYXNpbHkgYnJva2VuXG5cdFx0Y29uc3QgaSA9IGh0bWwuaW5kZXhPZignPicpO1xuXHRcdGlmIChpIDwgMCkge1xuXHRcdFx0cmV0dXJuIGh0bWw7XG5cdFx0fVxuXHRcdHJldHVybiBgJHtodG1sLnNsaWNlKDAsIE1hdGgubWF4KDAsIGkpKX0gJHtwcm9wZXJ0eX0ke2h0bWwuc2xpY2UoTWF0aC5tYXgoMCwgaSkpfWA7XG5cdH07XG5cdGNvbnN0IGFkZFBvcHVwU2hvcnRjdXQgPSAoaHRtbCwga2V5KSA9PiB7XG5cdFx0aWYgKCFnZXRWYWx1ZU9mKCdwb3B1cFNob3J0Y3V0S2V5cycpKSB7XG5cdFx0XHRyZXR1cm4gaHRtbDtcblx0XHR9XG5cdFx0Y29uc3QgcmV0ID0gYWRkTGlua1Byb3BlcnR5KGh0bWwsIGBwb3B1cGtleT1cIiR7a2V5fVwiYCk7XG5cdFx0aWYgKGtleSA9PT0gJyAnKSB7XG5cdFx0XHRrZXkgPSBwb3B1cFN0cmluZygnc3BhY2ViYXInKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldC5yZXBsYWNlKC9eKC4qPykodGl0bGU9XCIpKC4qPykoXCIuKikkL2ksIGAkMSQyJDMgWyR7a2V5fV0kNGApO1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBzaG9ydGN1dGtleXMuanNcblx0Ly8gU1RBUlRGSUxFOiBkaWZmcHJldmlldy5qc1xuXHQvLyBsZXRzIGp1bXAgdGhyb3VnaCBob29wcyB0byBmaW5kIHRoZSByZXYgaWRzIHdlIG5lZWQgdG8gcmV0cmlldmVcblx0Y29uc3QgbG9hZERpZmYgPSAoYXJ0aWNsZSwgb2xkaWQsIGRpZmYsIG5hdnBvcCkgPT4ge1xuXHRcdG5hdnBvcC5kaWZmRGF0YSA9IHtcblx0XHRcdG9sZFJldjoge30sXG5cdFx0XHRuZXdSZXY6IHt9LFxuXHRcdH07XG5cdFx0Y29uc3QgYXBpID0gZ2V0TXdBcGkoKTtcblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRhY3Rpb246ICdjb21wYXJlJyxcblx0XHRcdHByb3A6IFsnaWRzJywgJ3RpdGxlJ10sXG5cdFx0fTtcblx0XHRpZiAoYXJ0aWNsZS50aXRsZSkge1xuXHRcdFx0cGFyYW1zLmZyb210aXRsZSA9IGFydGljbGUudGl0bGU7XG5cdFx0fVxuXHRcdHN3aXRjaCAoZGlmZikge1xuXHRcdFx0Y2FzZSAnY3VyJzpcblx0XHRcdFx0c3dpdGNoIChvbGRpZCkge1xuXHRcdFx0XHRcdGNhc2UgbnVsbDpcblx0XHRcdFx0XHRjYXNlICcnOlxuXHRcdFx0XHRcdGNhc2UgJ3ByZXYnOlxuXHRcdFx0XHRcdFx0Ly8gdGhpcyBjYW4gb25seSB3b3JrIGlmIHdlIGhhdmUgdGhlIHRpdGxlXG5cdFx0XHRcdFx0XHQvLyBjdXIgLT4gcHJldlxuXHRcdFx0XHRcdFx0cGFyYW1zLnRvcmVsYXRpdmUgPSAncHJldic7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cGFyYW1zLmZyb21yZXYgPSBvbGRpZDtcblx0XHRcdFx0XHRcdHBhcmFtcy50b3JlbGF0aXZlID0gJ2N1cic7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3ByZXYnOlxuXHRcdFx0XHRpZiAob2xkaWQpIHtcblx0XHRcdFx0XHRwYXJhbXMuZnJvbXJldiA9IG9sZGlkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhcmFtcy50b3JlbGF0aXZlID0gJ3ByZXYnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ25leHQnOlxuXHRcdFx0XHRwYXJhbXMuZnJvbXJldiA9IG9sZGlkIHx8IDA7XG5cdFx0XHRcdHBhcmFtcy50b3JlbGF0aXZlID0gJ25leHQnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHBhcmFtcy5mcm9tcmV2ID0gb2xkaWQgfHwgMDtcblx0XHRcdFx0cGFyYW1zLnRvcmV2ID0gZGlmZiB8fCAwO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0YXBpLmdldChwYXJhbXMpLnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aWQgPSBkYXRhLmNvbXBhcmUuZnJvbXJldmlkO1xuXHRcdFx0bmF2cG9wLmRpZmZEYXRhLm5ld1Jldi5yZXZpZCA9IGRhdGEuY29tcGFyZS50b3JldmlkO1xuXHRcdFx0YWRkUmV2aWV3TGluayhuYXZwb3AsICdwb3B1cE1pc2NUb29scycpO1xuXHRcdFx0Y29uc3QgZ28gPSAoKSA9PiB7XG5cdFx0XHRcdHBlbmRpbmdOYXZwb3BUYXNrKG5hdnBvcCk7XG5cdFx0XHRcdGxldCB1cmwgPSBgJHtwZy53aWtpLmFwaXdpa2liYXNlfT9mb3JtYXQ9anNvbiZmb3JtYXR2ZXJzaW9uPTImYWN0aW9uPXF1ZXJ5JmA7XG5cdFx0XHRcdHVybCArPSBgcmV2aWRzPSR7bmF2cG9wLmRpZmZEYXRhLm9sZFJldi5yZXZpZH18JHtuYXZwb3AuZGlmZkRhdGEubmV3UmV2LnJldmlkfWA7XG5cdFx0XHRcdHVybCArPSAnJnByb3A9cmV2aXNpb25zJnJ2cHJvcD1pZHN8dGltZXN0YW1wfGNvbnRlbnQnO1xuXHRcdFx0XHRnZXRQYWdlV2l0aENhY2hpbmcodXJsLCBkb25lRGlmZiwgbmF2cG9wKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIHJlbW92ZSBob29rIG9uY2UgcnVuXG5cdFx0XHR9O1xuXHRcdFx0aWYgKG5hdnBvcC52aXNpYmxlIHx8ICFnZXRWYWx1ZU9mKCdwb3B1cExhenlEb3dubG9hZHMnKSkge1xuXHRcdFx0XHRnbygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmF2cG9wLmFkZEhvb2soZ28sICd1bmhpZGUnLCAnYmVmb3JlJywgJ0RPV05MT0FEX0RJRkZTJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cdC8vIFB1dCBhIFwibWFyayBwYXRyb2xsZWRcIiBsaW5rIHRvIGFuIGVsZW1lbnQgdGFyZ2V0XG5cdC8vIFRPRE86IEFsbG93IHBhdHJvbCBhIHJldmlzaW9uLCBhcyB3ZWxsIGFzIGEgZGlmZlxuXHRjb25zdCBhZGRSZXZpZXdMaW5rID0gKG5hdnBvcCwgdGFyZ2V0KSA9PiB7XG5cdFx0aWYgKCFwZy51c2VyLmNhblJldmlldykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBJZiAnbmV3UmV2JyBpcyBvbGRlciB0aGFuICdvbGRSZXYnIHRoYW4gaXQgY291bGQgYmUgY29uZnVzaW5nLCBzbyB3ZSBkbyBub3Qgc2hvdyB0aGUgcmV2aWV3IGxpbmsuXG5cdFx0aWYgKG5hdnBvcC5kaWZmRGF0YS5uZXdSZXYucmV2aWQgPD0gbmF2cG9wLmRpZmZEYXRhLm9sZFJldi5yZXZpZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdHByb3A6IFsnaW5mbycsICdmbGFnZ2VkJ10sXG5cdFx0XHRyZXZpZHM6IG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aWQsXG5cdFx0fTtcblx0XHRnZXRNd0FwaSgpXG5cdFx0XHQuZ2V0KHBhcmFtcylcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHN0YWJsZV9yZXZpZCA9IChkYXRhLnF1ZXJ5LnBhZ2VzWzBdLmZsYWdnZWQgJiYgZGF0YS5xdWVyeS5wYWdlc1swXS5mbGFnZ2VkLnN0YWJsZV9yZXZpZCkgfHwgMDtcblx0XHRcdFx0Ly8gVGhlIGRpZmYgY2FuIGJlIHJldmlld2VkIGlmIHRoZSBvbGQgdmVyc2lvbiBpcyB0aGUgbGFzdCByZXZpZXdlZCB2ZXJzaW9uXG5cdFx0XHRcdC8vIFRPRE86IE90aGVyIHBvc3NpYmxlIGNvbmRpdGlvbnMgdGhhdCB3ZSBtYXkgd2FudCB0byBpbXBsZW1lbnQgaW5zdGVhZCBvZiB0aGlzIG9uZTpcblx0XHRcdFx0Ly8gLSBvbGQgdmVyc2lvbiBpcyBwYXRyb2xsZWQgYW5kIHRoZSBuZXcgdmVyc2lvbiBpcyBub3QgcGF0cm9sbGVkXG5cdFx0XHRcdC8vIC0gb2xkIHZlcnNpb24gaXMgcGF0cm9sbGVkIGFuZCB0aGUgbmV3IHZlcnNpb24gaXMgbW9yZSByZWNlbnQgdGhhbiB0aGUgbGFzdCByZXZpZXdlZCB2ZXJzaW9uXG5cdFx0XHRcdGlmIChzdGFibGVfcmV2aWQgPT09IG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aWQpIHtcblx0XHRcdFx0XHRjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdFx0XHRcdGEuaW5uZXJIVE1MID0gcG9wdXBTdHJpbmcoJ21hcmsgcGF0cm9sbGVkJyk7XG5cdFx0XHRcdFx0YS50aXRsZSA9IHBvcHVwU3RyaW5nKCdtYXJrcGF0cm9sbGVkSGludCcpO1xuXHRcdFx0XHRcdGEub25jbGljayA9ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiAncmV2aWV3Jyxcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogdHByaW50ZignZGVmYXVsdHBvcHVwUmV2aWV3ZWRTdW1tYXJ5JywgW1xuXHRcdFx0XHRcdFx0XHRcdG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aWQsXG5cdFx0XHRcdFx0XHRcdFx0bmF2cG9wLmRpZmZEYXRhLm5ld1Jldi5yZXZpZCxcblx0XHRcdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0XHRcdHJldmlkOiBuYXZwb3AuZGlmZkRhdGEubmV3UmV2LnJldmlkLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGdldE13QXBpKClcblx0XHRcdFx0XHRcdFx0LnBvc3RXaXRoVG9rZW4oJ2NzcmYnLCBwYXJhbXMpXG5cdFx0XHRcdFx0XHRcdC5kb25lKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogVXBkYXRlIGN1cnJlbnQgcGFnZSBhbmQgb3RoZXIgYWxyZWFkeSBjb25zdHJ1Y3RlZCBwb3B1cHNcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmZhaWwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KHBvcHVwU3RyaW5nKCdDb3VsZCBub3QgbWFya2VkIHRoaXMgZWRpdCBhcyBwYXRyb2xsZWQnKSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAncG9wdXBzJyxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0c2V0UG9wdXBIVE1MKGEsIHRhcmdldCwgbmF2cG9wLmlkTnVtYmVyLCBudWxsLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH07XG5cdGNvbnN0IGRvbmVEaWZmID0gKGRvd25sb2FkKSA9PiB7XG5cdFx0aWYgKCFkb3dubG9hZC5vd25lciB8fCAhZG93bmxvYWQub3duZXIuZGlmZkRhdGEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbmF2cG9wID0gZG93bmxvYWQub3duZXI7XG5cdFx0Y29tcGxldGVkTmF2cG9wVGFzayhuYXZwb3ApO1xuXHRcdGxldCBwYWdlcztcblx0XHRsZXQgcmV2aXNpb25zID0gW107XG5cdFx0dHJ5IHtcblx0XHRcdC8vIFByb2Nlc3MgdGhlIGRvd25sb2Fkc1xuXHRcdFx0KHtwYWdlc30gPSBnZXRKc09iaihkb3dubG9hZC5kYXRhKS5xdWVyeSk7XG5cdFx0XHRmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcblx0XHRcdFx0cmV2aXNpb25zID0gWy4uLnJldmlzaW9ucywgLi4ucGFnZS5yZXZpc2lvbnNdO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCByZXZpc2lvbiBvZiByZXZpc2lvbnMpIHtcblx0XHRcdFx0aWYgKHJldmlzaW9uLnJldmlkID09PSBuYXZwb3AuZGlmZkRhdGEub2xkUmV2LnJldmlkKSB7XG5cdFx0XHRcdFx0bmF2cG9wLmRpZmZEYXRhLm9sZFJldi5yZXZpc2lvbiA9IHJldmlzaW9uO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJldmlzaW9uLnJldmlkID09PSBuYXZwb3AuZGlmZkRhdGEubmV3UmV2LnJldmlkKSB7XG5cdFx0XHRcdFx0bmF2cG9wLmRpZmZEYXRhLm5ld1Jldi5yZXZpc2lvbiA9IHJldmlzaW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRlcnJsb2coJ0NvdWxkIG5vdCBnZXQgZGlmZicpO1xuXHRcdH1cblx0XHRpbnNlcnREaWZmKG5hdnBvcCk7XG5cdH07XG5cdGNvbnN0IHJtQm9yaW5nTGluZXMgPSAoYSwgYiwgY29udGV4dCkgPT4ge1xuXHRcdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnRleHQgPSAyO1xuXHRcdH1cblx0XHQvLyB0aGlzIGlzIGZhaXJseSBzbG93Li4uIGkgdGhpbmsgaXQncyBxdWlja2VyIHRoYW4gZG9pbmcgYSB3b3JkLWJhc2VkIGRpZmYgZnJvbSB0aGUgb2ZmLCB0aG91Z2hcblx0XHRjb25zdCBhYSA9IFtdO1xuXHRcdGNvbnN0IGFhYSA9IFtdO1xuXHRcdGNvbnN0IGJiID0gW107XG5cdFx0Y29uc3QgYmJiID0gW107XG5cdFx0bGV0IGk7XG5cdFx0bGV0IGo7XG5cdFx0Ly8gZmlyc3QsIGdhdGhlciBhbGwgZGlzY29ubmVjdGVkIG5vZGVzIGluIGEgYW5kIGFsbCBjcm9zc2luZyBub2RlcyBpbiBhIGFuZCBiXG5cdFx0Zm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmICghYVtpXS5wYWlyZWQpIHtcblx0XHRcdFx0YWFbaV0gPSAxO1xuXHRcdFx0fSBlbHNlIGlmIChjb3VudENyb3NzaW5ncyhiLCBhLCBpLCB0cnVlKSkge1xuXHRcdFx0XHRhYVtpXSA9IDE7XG5cdFx0XHRcdGJiW2FbaV0ucm93XSA9IDE7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHBpY2sgdXAgcmVtYWluaW5nIGRpc2Nvbm5lY3RlZCBub2RlcyBpbiBiXG5cdFx0Zm9yIChpID0gMDsgaSA8IGIubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChiYltpXSA9PT0gMSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICghYltpXS5wYWlyZWQpIHtcblx0XHRcdFx0YmJbaV0gPSAxO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBhbm90aGVyIHBhc3MgdG8gZ2F0aGVyIGNvbnRleHQ6IHdlIHdhbnQgdGhlIG5laWdoYm91cnMgb2YgaW5jbHVkZWQgbm9kZXMgd2hpY2ggYXJlIG5vdFxuXHRcdC8vIHlldCBpbmNsdWRlZCB3ZSBoYXZlIHRvIGFkZCBpbiBwYXJ0bmVycyBvZiB0aGVzZSBub2RlcywgYnV0IHdlIGRvbid0IHdhbnQgdG8gYWRkIGNvbnRleHRcblx0XHQvLyBmb3IgKnRob3NlKiBub2RlcyBpbiB0aGUgbmV4dCBwYXNzXG5cdFx0Zm9yIChpID0gMDsgaSA8IGIubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChiYltpXSA9PT0gMSkge1xuXHRcdFx0XHRmb3IgKGogPSBNYXRoLm1heCgwLCBpIC0gY29udGV4dCk7IGogPCBNYXRoLm1pbihiLmxlbmd0aCwgaSArIGNvbnRleHQpOyArK2opIHtcblx0XHRcdFx0XHRpZiAoIWJiW2pdKSB7XG5cdFx0XHRcdFx0XHRiYltqXSA9IDE7XG5cdFx0XHRcdFx0XHRhYVtiW2pdLnJvd10gPSAwLjU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAoYWFbaV0gPT09IDEpIHtcblx0XHRcdFx0Zm9yIChqID0gTWF0aC5tYXgoMCwgaSAtIGNvbnRleHQpOyBqIDwgTWF0aC5taW4oYS5sZW5ndGgsIGkgKyBjb250ZXh0KTsgKytqKSB7XG5cdFx0XHRcdFx0aWYgKCFhYVtqXSkge1xuXHRcdFx0XHRcdFx0YWFbal0gPSAxO1xuXHRcdFx0XHRcdFx0YmJbYVtqXS5yb3ddID0gMC41O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGkgPSAwOyBpIDwgYmIubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChiYltpXSA+IDApIHtcblx0XHRcdFx0Ly8gaXQncyBhIHJvdyB3ZSBuZWVkXG5cdFx0XHRcdGlmIChiW2ldLnBhaXJlZCkge1xuXHRcdFx0XHRcdGJiYi5wdXNoKGJbaV0udGV4dCk7IC8vIGpvaW5lZDsgcGFydG5lciBzaG91bGQgYmUgaW4gYWFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRiYmIucHVzaChiW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGkgPSAwOyBpIDwgYWEubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChhYVtpXSA+IDApIHtcblx0XHRcdFx0Ly8gaXQncyBhIHJvdyB3ZSBuZWVkXG5cdFx0XHRcdGlmIChhW2ldLnBhaXJlZCkge1xuXHRcdFx0XHRcdGFhYS5wdXNoKGFbaV0udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gam9pbmVkOyBwYXJ0bmVyIHNob3VsZCBiZSBpbiBhYVxuXHRcdFx0XHRcdGFhYS5wdXNoKGFbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhOiBhYWEsXG5cdFx0XHRiOiBiYmIsXG5cdFx0fTtcblx0fTtcblx0Y29uc3Qgc3RyaXBPdXRlckNvbW1vbkxpbmVzID0gKGEsIGIsIGNvbnRleHQpID0+IHtcblx0XHRsZXQgaSA9IDA7XG5cdFx0d2hpbGUgKGkgPCBhLmxlbmd0aCAmJiBpIDwgYi5sZW5ndGggJiYgYVtpXSA9PT0gYltpXSkge1xuXHRcdFx0KytpO1xuXHRcdH1cblx0XHRsZXQgaiA9IGEubGVuZ3RoIC0gMTtcblx0XHRsZXQgayA9IGIubGVuZ3RoIC0gMTtcblx0XHR3aGlsZSAoaiA+PSAwICYmIGsgPj0gMCAmJiBhW2pdID09PSBiW2tdKSB7XG5cdFx0XHQtLWo7XG5cdFx0XHQtLWs7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhOiBhLnNsaWNlKE1hdGgubWF4KDAsIGkgLSAxIC0gY29udGV4dCksIE1hdGgubWluKGEubGVuZ3RoICsgMSwgaiArIGNvbnRleHQgKyAxKSksXG5cdFx0XHRiOiBiLnNsaWNlKE1hdGgubWF4KDAsIGkgLSAxIC0gY29udGV4dCksIE1hdGgubWluKGIubGVuZ3RoICsgMSwgayArIGNvbnRleHQgKyAxKSksXG5cdFx0fTtcblx0fTtcblx0Y29uc3QgaW5zZXJ0RGlmZiA9IChuYXZwb3ApID0+IHtcblx0XHQvLyBmb3Igc3BlZWQgcmVhc29ucywgd2UgZmlyc3QgZG8gYSBsaW5lLWJhc2VkIGRpZmYsIGRpc2NhcmQgc3R1ZmYgdGhhdCBzZWVtcyBib3JpbmcsIHRoZW5cblx0XHQvLyBkbyBhIHdvcmQtYmFzZWQgZGlmZlxuXHRcdC8vIEZJWE1FOiBzb21ldGltZXMgdGhpcyBnaXZlcyBtaXNsZWFkaW5nIGRpZmZzIGFzIGRpc3RhbnQgY2h1bmtzIGFyZSBzcXVhc2hlZCB0b2dldGhlclxuXHRcdGxldCBvbGRsaW5lcyA9IG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aXNpb24uY29udGVudC5zcGxpdCgnXFxuJyk7XG5cdFx0bGV0IG5ld2xpbmVzID0gbmF2cG9wLmRpZmZEYXRhLm5ld1Jldi5yZXZpc2lvbi5jb250ZW50LnNwbGl0KCdcXG4nKTtcblx0XHRsZXQgaW5uZXIgPSBzdHJpcE91dGVyQ29tbW9uTGluZXMob2xkbGluZXMsIG5ld2xpbmVzLCBnZXRWYWx1ZU9mKCdwb3B1cERpZmZDb250ZXh0TGluZXMnKSk7XG5cdFx0b2xkbGluZXMgPSBpbm5lci5hO1xuXHRcdG5ld2xpbmVzID0gaW5uZXIuYjtcblx0XHRsZXQgdHJ1bmNhdGVkID0gZmFsc2U7XG5cdFx0Z2V0VmFsdWVPZigncG9wdXBEaWZmTWF4TGluZXMnKTtcblx0XHRpZiAob2xkbGluZXMubGVuZ3RoID4gcGcub3B0aW9uLnBvcHVwRGlmZk1heExpbmVzIHx8IG5ld2xpbmVzLmxlbmd0aCA+IHBnLm9wdGlvbi5wb3B1cERpZmZNYXhMaW5lcykge1xuXHRcdFx0Ly8gdHJ1bmNhdGVcblx0XHRcdHRydW5jYXRlZCA9IHRydWU7XG5cdFx0XHRpbm5lciA9IHN0cmlwT3V0ZXJDb21tb25MaW5lcyhcblx0XHRcdFx0b2xkbGluZXMuc2xpY2UoMCwgcGcub3B0aW9uLnBvcHVwRGlmZk1heExpbmVzKSxcblx0XHRcdFx0bmV3bGluZXMuc2xpY2UoMCwgcGcub3B0aW9uLnBvcHVwRGlmZk1heExpbmVzKSxcblx0XHRcdFx0cGcub3B0aW9uLnBvcHVwRGlmZkNvbnRleHRMaW5lc1xuXHRcdFx0KTtcblx0XHRcdG9sZGxpbmVzID0gaW5uZXIuYTtcblx0XHRcdG5ld2xpbmVzID0gaW5uZXIuYjtcblx0XHR9XG5cdFx0Y29uc3QgbGluZURpZmYgPSBkaWZmKG9sZGxpbmVzLCBuZXdsaW5lcyk7XG5cdFx0Y29uc3QgbGluZXMyID0gcm1Cb3JpbmdMaW5lcyhsaW5lRGlmZi5vLCBsaW5lRGlmZi5uKTtcblx0XHRjb25zdCBvbGRsaW5lczIgPSBsaW5lczIuYTtcblx0XHRjb25zdCBuZXdsaW5lczIgPSBsaW5lczIuYjtcblx0XHRsZXQgaHRtbCA9ICc8aHI+Jztcblx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBEaWZmRGF0ZXMnKSkge1xuXHRcdFx0aHRtbCArPSBkaWZmRGF0ZXNUYWJsZShuYXZwb3ApO1xuXHRcdFx0aHRtbCArPSAnPGhyPic7XG5cdFx0fVxuXHRcdGh0bWwgKz0gc2hvcnRlbkRpZmZTdHJpbmcoXG5cdFx0XHRkaWZmU3RyaW5nKG9sZGxpbmVzMi5qb2luKCdcXG4nKSwgbmV3bGluZXMyLmpvaW4oJ1xcbicpKSxcblx0XHRcdGdldFZhbHVlT2YoJ3BvcHVwRGlmZkNvbnRleHRDaGFyYWN0ZXJzJylcblx0XHQpLmpvaW4oJzxocj4nKTtcblx0XHRzZXRQb3B1cFRpcHNBbmRIVE1MKFxuXHRcdFx0aHRtbC5zcGxpdCgnXFxuJykuam9pbignPGJyPicpICtcblx0XHRcdFx0KHRydW5jYXRlZCA/IGA8aHI+PGI+JHtwb3B1cFN0cmluZygnRGlmZiB0cnVuY2F0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMnKX08L2I+YCA6ICcnKSxcblx0XHRcdCdwb3B1cFByZXZpZXcnLFxuXHRcdFx0bmF2cG9wLmlkTnVtYmVyXG5cdFx0KTtcblx0fTtcblx0Y29uc3QgZGlmZkRhdGVzVGFibGUgPSAobmF2cG9wKSA9PiB7XG5cdFx0bGV0IGh0bWwgPSAnPHRhYmxlIGNsYXNzPVwicG9wdXBfZGlmZl9kYXRlc1wiPic7XG5cdFx0aHRtbCArPSBkaWZmRGF0ZXNUYWJsZVJvdyhuYXZwb3AuZGlmZkRhdGEubmV3UmV2LnJldmlzaW9uLCB0cHJpbnRmKCdOZXcgcmV2aXNpb24nKSk7XG5cdFx0aHRtbCArPSBkaWZmRGF0ZXNUYWJsZVJvdyhuYXZwb3AuZGlmZkRhdGEub2xkUmV2LnJldmlzaW9uLCB0cHJpbnRmKCdPbGQgcmV2aXNpb24nKSk7XG5cdFx0aHRtbCArPSAnPC90YWJsZT4nO1xuXHRcdHJldHVybiBodG1sO1xuXHR9O1xuXHRjb25zdCBkaWZmRGF0ZXNUYWJsZVJvdyA9IChyZXZpc2lvbiwgbGFiZWwpID0+IHtcblx0XHRsZXQgdHh0ID0gJyc7XG5cdFx0Y29uc3QgbGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKHJldmlzaW9uLnRpbWVzdGFtcCk7XG5cdFx0dHh0ID0gZm9ybWF0dGVkRGF0ZVRpbWUobGFzdE1vZGlmaWVkRGF0ZSk7XG5cdFx0Y29uc3QgcmV2bGluayA9IGdlbmVyYWxMaW5rKHtcblx0XHRcdHVybDogYCR7bXcuY29uZmlnLmdldCgnd2dTY3JpcHQnKX0/b2xkaWQ9JHtyZXZpc2lvbi5yZXZpZH1gLFxuXHRcdFx0dGV4dDogbGFiZWwsXG5cdFx0XHR0aXRsZTogbGFiZWwsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNpbXBsZVByaW50ZignPHRyPjx0ZD4lczwvdGQ+PHRkPiVzPC90ZD48L3RyPicsIFtyZXZsaW5rLCB0eHRdKTtcblx0fTtcblx0Ly8gRU5ERklMRTogZGlmZnByZXZpZXcuanNcblx0Ly8gU1RBUlRGSUxFOiBsaW5rcy5qc1xuXHQvLyBMSU5LIEdFTkVSQVRJT04gLy9cblx0Ly8gdGl0bGVkRGlmZkxpbmsgLS0+IHRpdGxlZFdpa2lMaW5rIC0tPiBnZW5lcmFsTGlua1xuXHQvLyB3aWtpTGlua1x0ICAgLS0+IHRpdGxlZFdpa2lMaW5rIC0tPiBnZW5lcmFsTGlua1xuXHQvLyBlZGl0Q291bnRlckxpbmsgLS0+IGdlbmVyYWxMaW5rXG5cdC8vIFRPRE8gTWFrZSB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIEVsZW1lbnQgb2JqZWN0cywgbm90IGp1c3QgcmF3IEhUTUwgc3RyaW5ncy5cblx0Y29uc3QgdGl0bGVkRGlmZkxpbmsgPSAobCkgPT4ge1xuXHRcdHJldHVybiB0aXRsZWRXaWtpTGluayh7XG5cdFx0XHRhcnRpY2xlOiBsLmFydGljbGUsXG5cdFx0XHRhY3Rpb246IGAke2wudG99Jm9sZGlkPSR7bC5mcm9tfWAsXG5cdFx0XHRuZXdXaW46IGwubmV3V2luLFxuXHRcdFx0bm9Qb3B1cDogbC5ub1BvcHVwLFxuXHRcdFx0dGV4dDogbC50ZXh0LFxuXHRcdFx0dGl0bGU6IGwudGl0bGUsXG5cdFx0XHQvKiBoYWNrOiBubyBvbGRpZCBoZXJlICovXG5cdFx0XHRhY3Rpb25OYW1lOiAnZGlmZicsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IHdpa2lMaW5rID0gKGwpID0+IHtcblx0XHQvLyB7YXJ0aWNsZTphcnRpY2xlLCBhY3Rpb246YWN0aW9uLCB0ZXh0OnRleHQsIG9sZGlkLCBuZXdpZH0pIHtcblx0XHRpZiAoISh0eXBlb2YgbC5hcnRpY2xlID09PSB0eXBlb2Yge30gJiYgdHlwZW9mIGwuYWN0aW9uID09PSB0eXBlb2YgJycgJiYgdHlwZW9mIGwudGV4dCA9PT0gdHlwZW9mICcnKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGlmIChsLm9sZGlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGwub2xkaWQgPSBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBzYXZlZE9sZGlkID0gbC5vbGRpZDtcblx0XHRpZiAoIS9eKGVkaXR8dmlld3xyZXZlcnR8cmVuZGVyKSR8XnJhdy8udGVzdChsLmFjdGlvbikpIHtcblx0XHRcdGwub2xkaWQgPSBudWxsO1xuXHRcdH1cblx0XHRsZXQgaGludCA9IHBvcHVwU3RyaW5nKGAke2wuYWN0aW9ufUhpbnRgKTsgLy8gcmV2ZXJ0SGludCBldGMgZXRjIGV0Y1xuXHRcdGNvbnN0IG9sZGlkRGF0YSA9IFtsLm9sZGlkLCBzYWZlRGVjb2RlVVJJKGwuYXJ0aWNsZSldO1xuXHRcdGxldCByZXZpc2lvblN0cmluZyA9IHRwcmludGYoJ3JldmlzaW9uICVzIG9mICVzJywgb2xkaWREYXRhKTtcblx0XHRsb2coYHJldmlzaW9uU3RyaW5nPSR7cmV2aXNpb25TdHJpbmd9YCk7XG5cdFx0c3dpdGNoIChsLmFjdGlvbikge1xuXHRcdFx0Y2FzZSAnZWRpdCZzZWN0aW9uPW5ldyc6XG5cdFx0XHRcdGhpbnQgPSBwb3B1cFN0cmluZygnbmV3U2VjdGlvbkhpbnQnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdlZGl0JnVuZG89Jzpcblx0XHRcdFx0aWYgKGwuZGlmZiAmJiBsLmRpZmYgIT09ICdwcmV2JyAmJiBzYXZlZE9sZGlkKSB7XG5cdFx0XHRcdFx0bC5hY3Rpb24gKz0gYCR7bC5kaWZmfSZ1bmRvYWZ0ZXI9JHtzYXZlZE9sZGlkfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc2F2ZWRPbGRpZCkge1xuXHRcdFx0XHRcdGwuYWN0aW9uICs9IHNhdmVkT2xkaWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aGludCA9IHBvcHVwU3RyaW5nKCd1bmRvSGludCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JhdyZjdHlwZT10ZXh0L2Nzcyc6XG5cdFx0XHRcdGhpbnQgPSBwb3B1cFN0cmluZygncmF3SGludCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JldmVydCc6IHtcblx0XHRcdFx0Y29uc3QgcCA9IHBhcnNlUGFyYW1zKHBnLmN1cnJlbnQubGluay5ocmVmKTtcblx0XHRcdFx0bC5hY3Rpb24gPSBgZWRpdCZhdXRvY2xpY2s9d3BTYXZlJmFjdG9rZW49JHthdXRvQ2xpY2tUb2tlbigpfSZhdXRvaW1wbD0ke3BvcHVwU3RyaW5nKFxuXHRcdFx0XHRcdCdhdXRvZWRpdF92ZXJzaW9uJ1xuXHRcdFx0XHQpfSZhdXRvc3VtbWFyeT0ke3JldmVydFN1bW1hcnkobC5vbGRpZCwgcC5kaWZmKX1gO1xuXHRcdFx0XHRpZiAocC5kaWZmID09PSAncHJldicpIHtcblx0XHRcdFx0XHRsLmFjdGlvbiArPSAnJmRpcmVjdGlvbj1wcmV2Jztcblx0XHRcdFx0XHRyZXZpc2lvblN0cmluZyA9IHRwcmludGYoJ3RoZSByZXZpc2lvbiBwcmlvciB0byByZXZpc2lvbiAlcyBvZiAlcycsIG9sZGlkRGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwUmV2ZXJ0U3VtbWFyeVByb21wdCcpKSB7XG5cdFx0XHRcdFx0bC5hY3Rpb24gKz0gJyZhdXRvc3VtbWFyeXByb21wdD10cnVlJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBNaW5vclJldmVydHMnKSkge1xuXHRcdFx0XHRcdGwuYWN0aW9uICs9ICcmYXV0b21pbm9yPXRydWUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxvZyhgcmV2aXNpb25TdHJpbmcgaXMgbm93ICR7cmV2aXNpb25TdHJpbmd9YCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnbnVsbEVkaXQnOlxuXHRcdFx0XHRsLmFjdGlvbiA9IGBlZGl0JmF1dG9jbGljaz13cFNhdmUmYWN0b2tlbj0ke2F1dG9DbGlja1Rva2VuKCl9JmF1dG9pbXBsPSR7cG9wdXBTdHJpbmcoXG5cdFx0XHRcdFx0J2F1dG9lZGl0X3ZlcnNpb24nXG5cdFx0XHRcdCl9JmF1dG9zdW1tYXJ5PW51bGxgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2hpc3RvcnlmZWVkJzpcblx0XHRcdFx0bC5hY3Rpb24gPSAnaGlzdG9yeSZmZWVkPXJzcyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnbWFya3BhdHJvbGxlZCc6XG5cdFx0XHRcdGwuYWN0aW9uID0gYG1hcmtwYXRyb2xsZWQmcmNpZD0ke2wucmNpZH1gO1xuXHRcdH1cblx0XHRpZiAoaGludCkge1xuXHRcdFx0aGludCA9IGwub2xkaWQgPyBzaW1wbGVQcmludGYoaGludCwgW3JldmlzaW9uU3RyaW5nXSkgOiBzaW1wbGVQcmludGYoaGludCwgW3NhZmVEZWNvZGVVUkkobC5hcnRpY2xlKV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoaW50ID0gc2FmZURlY29kZVVSSShgJHtsLmFydGljbGV9JmFjdGlvbj0ke2wuYWN0aW9ufWApICsgbC5vbGRpZCA/IGAmb2xkaWQ9JHtsLm9sZGlkfWAgOiAnJztcblx0XHR9XG5cdFx0cmV0dXJuIHRpdGxlZFdpa2lMaW5rKHtcblx0XHRcdGFydGljbGU6IGwuYXJ0aWNsZSxcblx0XHRcdGFjdGlvbjogbC5hY3Rpb24sXG5cdFx0XHR0ZXh0OiBsLnRleHQsXG5cdFx0XHRuZXdXaW46IGwubmV3V2luLFxuXHRcdFx0dGl0bGU6IGhpbnQsXG5cdFx0XHRvbGRpZDogbC5vbGRpZCxcblx0XHRcdG5vUG9wdXA6IGwubm9Qb3B1cCxcblx0XHRcdG9uY2xpY2s6IGwub25jbGljayxcblx0XHR9KTtcblx0fTtcblx0Y29uc3QgcmV2ZXJ0U3VtbWFyeSA9IChvbGRpZCwgZGlmZikgPT4ge1xuXHRcdGxldCByZXQgPSAnJztcblx0XHRyZXQgPVxuXHRcdFx0ZGlmZiA9PT0gJ3ByZXYnXG5cdFx0XHRcdD8gZ2V0VmFsdWVPZigncG9wdXBRdWVyaWVkUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnknKVxuXHRcdFx0XHQ6IGdldFZhbHVlT2YoJ3BvcHVwUXVlcmllZFJldmVydFN1bW1hcnknKTtcblx0XHRyZXR1cm4gYCR7cmV0fSZhdXRvcnY9JHtvbGRpZH1gO1xuXHR9O1xuXHRjb25zdCB0aXRsZWRXaWtpTGluayA9IChsKSA9PiB7XG5cdFx0Ly8gcG9zc2libGUgcHJvcGVydGllcyBvZiBhcmd1bWVudDpcblx0XHQvLyBhcnRpY2xlLCBhY3Rpb24sIHRleHQsIHRpdGxlLCBvbGRpZCwgYWN0aW9uTmFtZSwgY2xhc3NOYW1lLCBub1BvcHVwXG5cdFx0Ly8gb2xkaWQgPSBudWxsIGlzIGZpbmUgaGVyZVxuXHRcdC8vIGFydGljbGUgYW5kIGFjdGlvbiBhcmUgbWFuZGF0b3J5IGFyZ3Ncblx0XHRpZiAobC5hcnRpY2xlID09PSB1bmRlZmluZWQgfHwgbC5hY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZXJybG9nKCdnb3QgdW5kZWZpbmVkIGFydGljbGUgb3IgYWN0aW9uIGluIHRpdGxlZFdpa2lMaW5rJyk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgYmFzZSA9IHBnLndpa2kudGl0bGViYXNlICsgbC5hcnRpY2xlLnVybFN0cmluZygpO1xuXHRcdGxldCB1cmwgPSBiYXNlO1xuXHRcdGlmIChsLmFjdGlvbk5hbWUgPT09IHVuZGVmaW5lZCB8fCAhbC5hY3Rpb25OYW1lKSB7XG5cdFx0XHRsLmFjdGlvbk5hbWUgPSAnYWN0aW9uJztcblx0XHR9XG5cdFx0Ly8gbm8gbmVlZCB0byBhZGQgJmFjdGlvbj12aWV3LCBhbmQgdGhpcyBjb25mdXNlcyBhbmNob3JzXG5cdFx0aWYgKGwuYWN0aW9uICE9PSAndmlldycpIHtcblx0XHRcdHVybCA9IGAke2Jhc2V9JiR7bC5hY3Rpb25OYW1lfT0ke2wuYWN0aW9ufWA7XG5cdFx0fVxuXHRcdGlmIChsLm9sZGlkICE9PSB1bmRlZmluZWQgJiYgbC5vbGRpZCkge1xuXHRcdFx0dXJsICs9IGAmb2xkaWQ9JHtsLm9sZGlkfWA7XG5cdFx0fVxuXHRcdGxldCBjc3NDbGFzcyA9IHBnLm1pc2MuZGVmYXVsdE5hdmxpbmtDbGFzc25hbWU7XG5cdFx0aWYgKGwuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQgJiYgbC5jbGFzc05hbWUpIHtcblx0XHRcdGNzc0NsYXNzID0gbC5jbGFzc05hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmwsXG5cdFx0XHRuZXdXaW46IGwubmV3V2luLFxuXHRcdFx0dGl0bGU6IGwudGl0bGUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBsLnRpdGxlLFxuXHRcdFx0dGV4dDogbC50ZXh0ID09PSB1bmRlZmluZWQgPyBudWxsIDogbC50ZXh0LFxuXHRcdFx0Y2xhc3NOYW1lOiBjc3NDbGFzcyxcblx0XHRcdG5vUG9wdXA6IGwubm9Qb3B1cCxcblx0XHRcdG9uY2xpY2s6IGwub25jbGljayxcblx0XHR9KTtcblx0fTtcblx0cGcuZm4uZ2V0TGFzdENvbnRyaWIgPSAod2lraXBhZ2UsIG5ld1dpbikgPT4ge1xuXHRcdGdldEhpc3RvcnlJbmZvKHdpa2lwYWdlLCAoeCkgPT4ge1xuXHRcdFx0cHJvY2Vzc0xhc3RDb250cmliSW5mbyh4LCB7cGFnZTogd2lraXBhZ2UsIG5ld1dpbn0pO1xuXHRcdH0pO1xuXHR9O1xuXHRjb25zdCBwcm9jZXNzTGFzdENvbnRyaWJJbmZvID0gKGluZm8sIHN0dWZmKSA9PiB7XG5cdFx0aWYgKCFpbmZvLmVkaXRzIHx8IGluZm8uZWRpdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSgnUG9wdXBzOiBhbiBvZGQgdGhpbmcgaGFwcGVuZWQuIFBsZWFzZSByZXRyeS4nLCB7dGFnOiAncG9wdXBzJywgdHlwZTogJ2Vycm9yJ30pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIWluZm8uZmlyc3ROZXdFZGl0b3IpIHtcblx0XHRcdHZvaWQgbXcubm90aWZ5KFxuXHRcdFx0XHR0cHJpbnRmKCdPbmx5IGZvdW5kIG9uZSBlZGl0b3I6ICVzIG1hZGUgJXMgZWRpdHMnLCBbaW5mby5lZGl0c1swXS5lZGl0b3IsIGluZm8uZWRpdHMubGVuZ3RoXSksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICdwb3B1cHMnLFxuXHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG5ld1VybCA9IGAke3BnLndpa2kudGl0bGViYXNlICsgbmV3IFRpdGxlKHN0dWZmLnBhZ2UpLnVybFN0cmluZygpfSZkaWZmPWN1ciZvbGRpZD0ke1xuXHRcdFx0aW5mby5maXJzdE5ld0VkaXRvci5vbGRpZFxuXHRcdH1gO1xuXHRcdGRpc3BsYXlVcmwobmV3VXJsLCBzdHVmZi5uZXdXaW4pO1xuXHR9O1xuXHRwZy5mbi5nZXREaWZmU2luY2VNeUVkaXQgPSAod2lraXBhZ2UsIG5ld1dpbikgPT4ge1xuXHRcdGdldEhpc3RvcnlJbmZvKHdpa2lwYWdlLCAoeCkgPT4ge1xuXHRcdFx0cHJvY2Vzc0RpZmZTaW5jZU15RWRpdCh4LCB7cGFnZTogd2lraXBhZ2UsIG5ld1dpbn0pO1xuXHRcdH0pO1xuXHR9O1xuXHRjb25zdCBwcm9jZXNzRGlmZlNpbmNlTXlFZGl0ID0gKGluZm8sIHN0dWZmKSA9PiB7XG5cdFx0aWYgKCFpbmZvLmVkaXRzIHx8IGluZm8uZWRpdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSgnUG9wdXBzOiBzb21ldGhpbmcgZmlzaHkgaGFwcGVuZWQuIFBsZWFzZSB0cnkgYWdhaW4uJywge3RhZzogJ3BvcHVwcycsIHR5cGU6ICdlcnJvcid9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZnJpZW5kbHlOYW1lID0gc3R1ZmYucGFnZS5zcGxpdCgnXycpLmpvaW4oJyAnKTtcblx0XHRpZiAoIWluZm8ubXlMYXN0RWRpdCkge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdHRwcmludGYoXCJDb3VsZG4ndCBmaW5kIGFuIGVkaXQgYnkgJXNcXG5pbiB0aGUgbGFzdCAlcyBlZGl0cyB0b1xcbiVzXCIsIFtcblx0XHRcdFx0XHRpbmZvLnVzZXJOYW1lLFxuXHRcdFx0XHRcdGdldFZhbHVlT2YoJ3BvcHVwSGlzdG9yeUxpbWl0JyksXG5cdFx0XHRcdFx0ZnJpZW5kbHlOYW1lLFxuXHRcdFx0XHRdKSxcblx0XHRcdFx0e3RhZzogJ3BvcHVwcycsIHR5cGU6ICdlcnJvcid9XG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoaW5mby5teUxhc3RFZGl0LmluZGV4ID09PSAwKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSh0cHJpbnRmKCclcyBzZWVtcyB0byBiZSB0aGUgbGFzdCBlZGl0b3IgdG8gdGhlIHBhZ2UgJXMnLCBbaW5mby51c2VyTmFtZSwgZnJpZW5kbHlOYW1lXSksIHtcblx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBuZXdVcmwgPSBgJHtwZy53aWtpLnRpdGxlYmFzZSArIG5ldyBUaXRsZShzdHVmZi5wYWdlKS51cmxTdHJpbmcoKX0mZGlmZj1jdXImb2xkaWQ9JHtcblx0XHRcdGluZm8ubXlMYXN0RWRpdC5vbGRpZFxuXHRcdH1gO1xuXHRcdGRpc3BsYXlVcmwobmV3VXJsLCBzdHVmZi5uZXdXaW4pO1xuXHR9O1xuXHRjb25zdCBkaXNwbGF5VXJsID0gKHVybCwgbmV3V2luKSA9PiB7XG5cdFx0aWYgKG5ld1dpbikge1xuXHRcdFx0d2luZG93Lm9wZW4odXJsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9jdW1lbnQubG9jYXRpb24gPSB1cmw7XG5cdFx0fVxuXHR9O1xuXHRwZy5mbi5wdXJnZVBvcHVwcyA9ICgpID0+IHtcblx0XHRwcm9jZXNzQWxsUG9wdXBzKHRydWUpO1xuXHRcdHNldHVwQ2FjaGUoKTsgLy8gZGVsZXRlcyBhbGwgY2FjaGVkIGl0ZW1zIChub3QgYnJvd3NlciBjYWNoZWQsIHRob3VnaC4uLilcblx0XHRwZy5vcHRpb24gPSB7fTtcblx0XHRhYm9ydEFsbERvd25sb2FkcygpO1xuXHR9O1xuXHRjb25zdCBwcm9jZXNzQWxsUG9wdXBzID0gKG51bGxpZnksIGJhbmlzaCkgPT4ge1xuXHRcdGZvciAobGV0IGkgPSAwOyBwZy5jdXJyZW50LmxpbmtzICYmIGkgPCBwZy5jdXJyZW50LmxpbmtzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAoIXBnLmN1cnJlbnQubGlua3NbaV0ubmF2cG9wdXApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobnVsbGlmeSB8fCBiYW5pc2gpIHtcblx0XHRcdFx0cGcuY3VycmVudC5saW5rc1tpXS5uYXZwb3B1cC5iYW5pc2goKTtcblx0XHRcdH1cblx0XHRcdHBnLmN1cnJlbnQubGlua3NbaV0uc2ltcGxlTm9Nb3JlID0gZmFsc2U7XG5cdFx0XHRpZiAobnVsbGlmeSkge1xuXHRcdFx0XHRwZy5jdXJyZW50LmxpbmtzW2ldLm5hdnBvcHVwID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHBnLmZuLmRpc2FibGVQb3B1cHMgPSAoKSA9PiB7XG5cdFx0cHJvY2Vzc0FsbFBvcHVwcyhmYWxzZSwgdHJ1ZSk7XG5cdFx0c2V0dXBUb29sdGlwcyhudWxsLCB0cnVlKTtcblx0fTtcblx0cGcuZm4udG9nZ2xlUHJldmlld3MgPSAoKSA9PiB7XG5cdFx0cHJvY2Vzc0FsbFBvcHVwcyh0cnVlLCB0cnVlKTtcblx0XHRwZy5vcHRpb24uc2ltcGxlUG9wdXBzID0gIXBnLm9wdGlvbi5zaW1wbGVQb3B1cHM7XG5cdFx0YWJvcnRBbGxEb3dubG9hZHMoKTtcblx0fTtcblx0Y29uc3QgbWFnaWNXYXRjaExpbmsgPSBmdW5jdGlvbiBtYWdpY1dhdGNoTGluayhsKSB7XG5cdFx0Ly8gWXVjayEhIFdvdWxkIHJlcXVpcmUgYSB0aG9yb3VnaCByZWRlc2lnbiB0byBhZGQgdGhpcyBhcyBhIGNsaWNrIGV2ZW50IHRob3VnaCAuLi5cblx0XHRsLm9uY2xpY2sgPSBzaW1wbGVQcmludGYoXCJwZy5mbi5tb2RpZnlXYXRjaGxpc3QoJyVzJywnJXMnKTtyZXR1cm4gZmFsc2U7XCIsIFtcblx0XHRcdGwuYXJ0aWNsZVxuXHRcdFx0XHQudG9TdHJpbmcodHJ1ZSlcblx0XHRcdFx0LnNwbGl0KCdcXFxcJylcblx0XHRcdFx0LmpvaW4oJ1xcXFxcXFxcJylcblx0XHRcdFx0LnNwbGl0KFwiJ1wiKVxuXHRcdFx0XHQuam9pbihTdHJpbmcucmF3YFxcJ2ApLFxuXHRcdFx0dGhpcy5pZCxcblx0XHRdKTtcblx0XHRyZXR1cm4gd2lraUxpbmsobCk7XG5cdH07XG5cdHBnLmZuLm1vZGlmeVdhdGNobGlzdCA9IGFzeW5jICh0aXRsZSwgYWN0aW9uKSA9PiB7XG5cdFx0Y29uc3QgcmVxRGF0YSA9IHtcblx0XHRcdGFjdGlvbjogJ3dhdGNoJyxcblx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdHRpdGxlczogdGl0bGUsXG5cdFx0XHR1c2VsYW5nOiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJMYW5ndWFnZScpLFxuXHRcdH07XG5cdFx0aWYgKGFjdGlvbiA9PT0gJ3Vud2F0Y2gnKSB7XG5cdFx0XHRyZXFEYXRhLnVud2F0Y2ggPSB0cnVlO1xuXHRcdH1cblx0XHQvLyBMb2FkIHRoZSBBZGRlZHdhdGNodGV4dCBvciBSZW1vdmVkd2F0Y2h0ZXh0IG1lc3NhZ2UgYW5kIHNob3cgaXRcblx0XHRjb25zdCBtd1RpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQodGl0bGUpO1xuXHRcdGxldCBtZXNzYWdlTmFtZTtcblx0XHRpZiAobXdUaXRsZSAmJiBtd1RpdGxlLmdldE5hbWVzcGFjZUlkKCkgPiAwICYmIG13VGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSAlIDIgPT09IDEpIHtcblx0XHRcdG1lc3NhZ2VOYW1lID0gYWN0aW9uID09PSAnd2F0Y2gnID8gJ2FkZGVkd2F0Y2h0ZXh0LXRhbGsnIDogJ3JlbW92ZWR3YXRjaHRleHQtdGFsayc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2VOYW1lID0gYWN0aW9uID09PSAnd2F0Y2gnID8gJ2FkZGVkd2F0Y2h0ZXh0JyA6ICdyZW1vdmVkd2F0Y2h0ZXh0Jztcblx0XHR9XG5cdFx0YXdhaXQgZ2V0TXdBcGkoKS5wb3N0V2l0aFRva2VuKCd3YXRjaCcsIHJlcURhdGEpO1xuXHRcdGF3YWl0IGdldE13QXBpKCkubG9hZE1lc3NhZ2VzSWZNaXNzaW5nKFttZXNzYWdlTmFtZV0pO1xuXHRcdC8vIE1lc3NhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZTpcblx0XHQvLyAqIHNlZSBzdHJpbmcuanNcblx0XHQvLyAqIGZvciBtb3JlIGluZm9ybWF0aW9uXG5cdFx0dm9pZCBtdy5ub3RpZnkobXcubWVzc2FnZShtZXNzYWdlTmFtZSwgdGl0bGUpLnBhcnNlRG9tKCksIHt0YWc6ICdwb3B1cHMnfSk7XG5cdH07XG5cdGNvbnN0IG1hZ2ljSGlzdG9yeUxpbmsgPSAobCkgPT4ge1xuXHRcdC8vIEZJWE1FIHVzZSBvbmNsaWNrIGNoYW5nZSBocmVmIHRyaWNrIHRvIHNvcnQgdGhpcyBvdXQgaW5zdGVhZCBvZiB3aW5kb3cub3BlblxuXHRcdGxldCBqc1VybCA9ICcnO1xuXHRcdGxldCB0aXRsZSA9ICcnO1xuXHRcdGxldCBvbkNsaWNrID0gJyc7XG5cdFx0c3dpdGNoIChsLmlkKSB7XG5cdFx0XHRjYXNlICdsYXN0Q29udHJpYic6XG5cdFx0XHRcdG9uQ2xpY2sgPSBzaW1wbGVQcmludGYoXCJwZy5mbi5nZXRMYXN0Q29udHJpYignJXMnLCVzKVwiLCBbXG5cdFx0XHRcdFx0bC5hcnRpY2xlXG5cdFx0XHRcdFx0XHQudG9TdHJpbmcodHJ1ZSlcblx0XHRcdFx0XHRcdC5zcGxpdCgnXFxcXCcpXG5cdFx0XHRcdFx0XHQuam9pbignXFxcXFxcXFwnKVxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiJ1wiKVxuXHRcdFx0XHRcdFx0LmpvaW4oU3RyaW5nLnJhd2BcXCdgKSxcblx0XHRcdFx0XHRsLm5ld1dpbixcblx0XHRcdFx0XSk7XG5cdFx0XHRcdHRpdGxlID0gcG9wdXBTdHJpbmcoJ2xhc3RDb250cmliSGludCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3NpbmNlTWUnOlxuXHRcdFx0XHRvbkNsaWNrID0gc2ltcGxlUHJpbnRmKFwicGcuZm4uZ2V0RGlmZlNpbmNlTXlFZGl0KCclcycsJXMpXCIsIFtcblx0XHRcdFx0XHRsLmFydGljbGVcblx0XHRcdFx0XHRcdC50b1N0cmluZyh0cnVlKVxuXHRcdFx0XHRcdFx0LnNwbGl0KCdcXFxcJylcblx0XHRcdFx0XHRcdC5qb2luKCdcXFxcXFxcXCcpXG5cdFx0XHRcdFx0XHQuc3BsaXQoXCInXCIpXG5cdFx0XHRcdFx0XHQuam9pbihTdHJpbmcucmF3YFxcJ2ApLFxuXHRcdFx0XHRcdGwubmV3V2luLFxuXHRcdFx0XHRdKTtcblx0XHRcdFx0dGl0bGUgPSBwb3B1cFN0cmluZygnc2luY2VNZUhpbnQnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGpzVXJsID0gYGphdmFzY3JpcHQ6JHtvbkNsaWNrfWA7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXHRcdG9uQ2xpY2sgKz0gJztyZXR1cm4gZmFsc2U7Jztcblx0XHRyZXR1cm4gZ2VuZXJhbE5hdkxpbmsoe1xuXHRcdFx0dXJsOiBqc1VybCxcblx0XHRcdG5ld1dpbjogZmFsc2UsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHRleHQ6IGwudGV4dCxcblx0XHRcdG5vUG9wdXA6IGwubm9Qb3B1cCxcblx0XHRcdG9uY2xpY2s6IG9uQ2xpY2ssXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IHBvcHVwTWVudUxpbmsgPSAobCkgPT4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG5cdFx0Y29uc3QganNVcmwgPSBzaW1wbGVQcmludGYoJ2phdmFzY3JpcHQ6cGcuZm4uJXMoKScsIFtsLmlkXSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXHRcdGNvbnN0IHRpdGxlID0gcG9wdXBTdHJpbmcoc2ltcGxlUHJpbnRmKCclc0hpbnQnLCBbbC5pZF0pKTtcblx0XHRjb25zdCBvbkNsaWNrID0gc2ltcGxlUHJpbnRmKCdwZy5mbi4lcygpO3JldHVybiBmYWxzZTsnLCBbbC5pZF0pO1xuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmw6IGpzVXJsLFxuXHRcdFx0bmV3V2luOiBmYWxzZSxcblx0XHRcdHRpdGxlLFxuXHRcdFx0dGV4dDogbC50ZXh0LFxuXHRcdFx0bm9Qb3B1cDogbC5ub1BvcHVwLFxuXHRcdFx0b25jbGljazogb25DbGljayxcblx0XHR9KTtcblx0fTtcblx0Y29uc3Qgc3BlY2lhbExpbmsgPSAobCkgPT4ge1xuXHRcdC8vIHByb3BlcnRpZXM6IGFydGljbGUsIHNwZWNpYWxwYWdlLCB0ZXh0LCBzZXBcblx0XHRpZiAobC5zcGVjaWFscGFnZSA9PT0gdW5kZWZpbmVkIHx8ICFsLnNwZWNpYWxwYWdlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgYmFzZSA9IGAke3BnLndpa2kudGl0bGViYXNlICsgbXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbcGcubnNTcGVjaWFsSWRdfToke2wuc3BlY2lhbHBhZ2V9YDtcblx0XHRsLnNlcCA/Pz0gJyZ0YXJnZXQ9Jztcblx0XHRsZXQgYXJ0aWNsZSA9IGwuYXJ0aWNsZS51cmxTdHJpbmcoe1xuXHRcdFx0a2VlcFNwYWNlczogbC5zcGVjaWFscGFnZSA9PT0gJ1NlYXJjaCcsXG5cdFx0fSk7XG5cdFx0bGV0IGhpbnQgPSBwb3B1cFN0cmluZyhgJHtsLnNwZWNpYWxwYWdlfUhpbnRgKTtcblx0XHRzd2l0Y2ggKGwuc3BlY2lhbHBhZ2UpIHtcblx0XHRcdGNhc2UgJ0xvZyc6XG5cdFx0XHRcdHN3aXRjaCAobC5zZXApIHtcblx0XHRcdFx0XHRjYXNlICcmdXNlcj0nOlxuXHRcdFx0XHRcdFx0aGludCA9IHBvcHVwU3RyaW5nKCd1c2VyTG9nSGludCcpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnJnR5cGU9YmxvY2smcGFnZT0nOlxuXHRcdFx0XHRcdFx0aGludCA9IHBvcHVwU3RyaW5nKCdibG9ja0xvZ0hpbnQnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJyZwYWdlPSc6XG5cdFx0XHRcdFx0XHRoaW50ID0gcG9wdXBTdHJpbmcoJ3BhZ2VMb2dIaW50Jyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICcmdHlwZT1wcm90ZWN0JnBhZ2U9Jzpcblx0XHRcdFx0XHRcdGhpbnQgPSBwb3B1cFN0cmluZygncHJvdGVjdExvZ0hpbnQnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJyZ0eXBlPWRlbGV0ZSZwYWdlPSc6XG5cdFx0XHRcdFx0XHRoaW50ID0gcG9wdXBTdHJpbmcoJ2RlbGV0ZUxvZ0hpbnQnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRsb2coYFVua25vd24gbG9nIHR5cGUsIHNlcD0ke2wuc2VwfWApO1xuXHRcdFx0XHRcdFx0aGludCA9ICdNaXNzaW5nIGhpbnQgKEZJWE1FKSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdQcmVmaXhJbmRleCc6XG5cdFx0XHRcdGFydGljbGUgKz0gJy8nO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0aGludCA9IGhpbnQgPyBzaW1wbGVQcmludGYoaGludCwgW3NhZmVEZWNvZGVVUkkobC5hcnRpY2xlKV0pIDogc2FmZURlY29kZVVSSShgJHtsLnNwZWNpYWxwYWdlfToke2wuYXJ0aWNsZX1gKTtcblx0XHRjb25zdCB1cmwgPSBiYXNlICsgbC5zZXAgKyBhcnRpY2xlO1xuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmwsXG5cdFx0XHR0aXRsZTogaGludCxcblx0XHRcdHRleHQ6IGwudGV4dCxcblx0XHRcdG5ld1dpbjogbC5uZXdXaW4sXG5cdFx0XHRub1BvcHVwOiBsLm5vUG9wdXAsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IGdlbmVyYWxMaW5rID0gKGwpID0+IHtcblx0XHQvLyBsLnVybCwgbC50ZXh0LCBsLnRpdGxlLCBsLm5ld1dpbiwgbC5jbGFzc05hbWUsIGwubm9Qb3B1cCwgbC5vbmNsaWNrXG5cdFx0aWYgKGwudXJsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHQvLyBvbmx5IHF1b3RhdGlvbiBtYXJrcyBpbiB0aGUgdXJsIGNhbiBzY3JldyB1cyB1cCBub3cuLi4gSSB0aGlua1xuXHRcdGNvbnN0IHVybCA9IGwudXJsLnNwbGl0KCdcIicpLmpvaW4oJyUyMicpO1xuXHRcdGxldCByZXQgPSBgPGEgaHJlZj1cIiR7dXJsfVwiYDtcblx0XHRpZiAobC50aXRsZSAhPT0gdW5kZWZpbmVkICYmIGwudGl0bGUpIHtcblx0XHRcdHJldCArPSBgIHRpdGxlPVwiJHtwZy5lc2NhcGVRdW90ZXNIVE1MKGwudGl0bGUpfVwiYDtcblx0XHR9XG5cdFx0aWYgKGwub25jbGljayAhPT0gdW5kZWZpbmVkICYmIGwub25jbGljaykge1xuXHRcdFx0cmV0ICs9IGAgb25jbGljaz1cIiR7cGcuZXNjYXBlUXVvdGVzSFRNTChsLm9uY2xpY2spfVwiYDtcblx0XHR9XG5cdFx0aWYgKGwubm9Qb3B1cCkge1xuXHRcdFx0cmV0ICs9ICcgbm9Qb3B1cD0xJztcblx0XHR9XG5cdFx0bGV0IG5ld1dpbjtcblx0XHRpZiAobC5uZXdXaW4gPT09IHVuZGVmaW5lZCB8fCBsLm5ld1dpbiA9PT0gbnVsbCkge1xuXHRcdFx0bmV3V2luID0gZ2V0VmFsdWVPZigncG9wdXBOZXdXaW5kb3dzJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCh7bmV3V2lufSA9IGwpO1xuXHRcdH1cblx0XHRpZiAobmV3V2luKSB7XG5cdFx0XHRyZXQgKz0gJyByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiJztcblx0XHR9XG5cdFx0aWYgKGwuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQgJiYgbC5jbGFzc05hbWUpIHtcblx0XHRcdHJldCArPSBgIGNsYXNzPVwiJHtsLmNsYXNzTmFtZX1cImA7XG5cdFx0fVxuXHRcdHJldCArPSAnPic7XG5cdFx0aWYgKHR5cGVvZiBsLnRleHQgPT09IHR5cGVvZiAnJykge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBIVE1MLWVzY2FwZSB0aGlzIHRvIGF2b2lkIFhTUywgYnV0IHdlIGFsc28gd2FudCB0b1xuXHRcdFx0Ly8gZGlzcGxheSBhbnkgZXhpc3RpbmcgSFRNTCBlbnRpdGllcyBjb3JyZWN0bHksIHNvIHVuZXNjYXBlIGl0IGZpcnN0LlxuXHRcdFx0Ly8gRm9yIGV4YW1wbGUsIHRoZSBkaXNwbGF5IHRleHQgb2YgdGhlIHVzZXIgcGFnZSBtZW51IGl0ZW0gaXMgZGVmaW5lZFxuXHRcdFx0Ly8gYXMgXCJ1c2VyJm5ic3A7cGFnZVwiLCBzbyB3ZSBuZWVkIHRvIHVuZXNjYXBlIGZpcnN0IHRvIGF2b2lkIGl0IGJlaW5nXG5cdFx0XHQvLyBlc2NhcGVkIHRvIFwidXNlciZhbXA7bmJzcDtwYWdlXCIuXG5cdFx0XHRyZXQgKz0gcGcuZXNjYXBlUXVvdGVzSFRNTChwZy51bmVzY2FwZVF1b3Rlc0hUTUwobC50ZXh0KSk7XG5cdFx0fVxuXHRcdHJldCArPSAnPC9hPic7XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgYXBwZW5kUGFyYW1zVG9MaW5rID0gKGxpbmtzdHIsIHBhcmFtcykgPT4ge1xuXHRcdGNvbnN0IHNwID0gbGlua3N0ci5zcGxpdCgvKGhyZWY9XCJbXlwiXSs/KVwiL2kpO1xuXHRcdGlmIChzcC5sZW5ndGggPCAyKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0bGV0IHJldCA9IHNwLnNoaWZ0KCkgKyBzcC5zaGlmdCgpO1xuXHRcdHJldCArPSBgJiR7cGFyYW1zfVwiYDtcblx0XHRyZXQgKz0gc3Auam9pbignJyk7XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgY2hhbmdlTGlua1RhcmdldExpbmsgPSAoeCkgPT4ge1xuXHRcdC8vIG5ld1RhcmdldCwgdGV4dCwgaGludCwgc3VtbWFyeSwgY2xpY2tCdXR0b24sIG1pbm9yLCB0aXRsZSAob3B0aW9uYWwpLCBhbHNvQ2hhbmdlTGFiZWwge1xuXHRcdGlmICh4Lm5ld1RhcmdldCkge1xuXHRcdFx0bG9nKGBjaGFuZ2VMaW5rVGFyZ2V0TGluazogbmV3VGFyZ2V0PSR7eC5uZXdUYXJnZXR9YCk7XG5cdFx0fVxuXHRcdGlmICh4Lm9sZFRhcmdldCAhPT0gZGVjb2RlVVJJQ29tcG9uZW50KHgub2xkVGFyZ2V0KSkge1xuXHRcdFx0bG9nKGBUaGlzIG1pZ2h0IGJlIGFuIGlucHV0IHByb2JsZW06ICR7eC5vbGRUYXJnZXR9YCk7XG5cdFx0fVxuXHRcdC8vIEZJWE1FOiBmaXJzdCBjaGFyYWN0ZXIgb2YgcGFnZSB0aXRsZSBhcyB3ZWxsIGFzIG5hbWVzcGFjZSBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZVxuXHRcdC8vIGVnIFtbOmNhdGVnb3J5OlgxXV0gYW5kIFtbOkNhdGVnb3J5OlgxXV0gYXJlIGVxdWl2YWxlbnRcblx0XHQvLyB0aGlzJ2xsIGJyZWFrIGlmIGNoYXJBdCgwKSBpcyBuYXN0eVxuXHRcdGNvbnN0IGNBID0gbXcudXRpbC5lc2NhcGVSZWdFeHAoeC5vbGRUYXJnZXQpO1xuXHRcdGxldCBjaHMgPSBjQS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcblx0XHRjaHMgPSBgWyR7Y2hzfSR7Y2hzLnRvTG93ZXJDYXNlKCl9XWA7XG5cdFx0bGV0IGN1cnJlbnRBcnRpY2xlUmVnZXhCaXQgPSBjaHMgKyBjQS5zbGljZSgxKTtcblx0XHRjdXJyZW50QXJ0aWNsZVJlZ2V4Qml0ID0gY3VycmVudEFydGljbGVSZWdleEJpdFxuXHRcdFx0LnNwbGl0KC9bIF9dK3wlMjAvZylcblx0XHRcdC5qb2luKCcoPzpbXyBdK3wlMjApJylcblx0XHRcdC5zcGxpdChTdHJpbmcucmF3YFxcKGApXG5cdFx0XHQuam9pbihTdHJpbmcucmF3YCg/OiUyOHxcXCgpYClcblx0XHRcdC5zcGxpdChTdHJpbmcucmF3YFxcKWApXG5cdFx0XHQuam9pbihTdHJpbmcucmF3YCg/OiUyOXxcXCkpYCk7IC8vIHdoeSBkb2VzIHRoaXMgbmVlZCB0byBtYXRjaCBlbmNvZGVkIHN0cmluZ3MgPyBsaW5rcyBpbiB0aGUgZG9jdW1lbnQgP1xuXG5cdFx0Ly8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2Ugc2hvdWxkIGJlIGlnbm9yZWQsIGFuZCBhbmNob3IgYml0cyBvcHRpb25hbDpcblx0XHRjdXJyZW50QXJ0aWNsZVJlZ2V4Qml0ID0gYFxcXFxzKigke2N1cnJlbnRBcnRpY2xlUmVnZXhCaXR9KD86I1teXFxcXFtcXFxcfF0qKT8pXFxcXHMqYDtcblx0XHQvLyBlLmcuIENvbXB1dGVyIChhcmNoYWljKSAtPiBcXHMqKFtDY11vbXB1dGVyW18gXSg/OiUyNTI4fFxcKClhcmNoYWljKD86JTI1Mjh8XFwpKSlcXHMqXG5cdFx0Ly8gYXV0b2VkaXQ9c35cXFtcXFsoW0NjXWFkKVxcXVxcXX5bW0NvbXB1dGVyLWFpZGVkJTIwZGVzaWdufCQxXV1+ZztzflxcW1xcWyhbQ2NdQUQpW3xdfltbQ29tcHV0ZXItYWlkZWQlMjBkZXNpZ258fmdcblx0XHRjb25zdCB0aXRsZSA9IHgudGl0bGUgfHwgbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLnNwbGl0KCdfJykuam9pbignICcpO1xuXHRcdGNvbnN0IGxrID0gdGl0bGVkV2lraUxpbmsoe1xuXHRcdFx0YXJ0aWNsZTogbmV3IFRpdGxlKHRpdGxlKSxcblx0XHRcdG5ld1dpbjogeC5uZXdXaW4sXG5cdFx0XHRhY3Rpb246ICdlZGl0Jyxcblx0XHRcdHRleHQ6IHgudGV4dCxcblx0XHRcdHRpdGxlOiB4LmhpbnQsXG5cdFx0XHRjbGFzc05hbWU6ICdwb3B1cF9jaGFuZ2VfdGl0bGVfbGluaycsXG5cdFx0fSk7XG5cdFx0bGV0IGNtZCA9ICcnO1xuXHRcdGlmICh4Lm5ld1RhcmdldCkge1xuXHRcdFx0Ly8gZXNjYXBlICcmJyBhbmQgb3RoZXIgbmFzdGllc1xuXHRcdFx0Y29uc3QgdCA9IHgubmV3VGFyZ2V0O1xuXHRcdFx0Y29uc3QgcyA9IG13LnV0aWwuZXNjYXBlUmVnRXhwKHgubmV3VGFyZ2V0KTtcblx0XHRcdGlmICh4LmFsc29DaGFuZ2VMYWJlbCkge1xuXHRcdFx0XHRjbWQgKz0gYHN+XFxcXFtcXFxcWyR7Y3VycmVudEFydGljbGVSZWdleEJpdH1cXFxcXVxcXFxdfltbJHt0fV1dfmc7YDtcblx0XHRcdFx0Y21kICs9IGBzflxcXFxbXFxcXFske2N1cnJlbnRBcnRpY2xlUmVnZXhCaXR9W3xdfltbJHt0fXx+ZztgO1xuXHRcdFx0XHRjbWQgKz0gYHN+XFxcXFtcXFxcWyR7c31cXFxcfCR7c31cXFxcXVxcXFxdfltbJHt0fV1dfmdgO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y21kICs9IGBzflxcXFxbXFxcXFske2N1cnJlbnRBcnRpY2xlUmVnZXhCaXR9XFxcXF1cXFxcXX5bWyR7dH18JDFdXX5nO2A7XG5cdFx0XHRcdGNtZCArPSBgc35cXFxcW1xcXFxbJHtjdXJyZW50QXJ0aWNsZVJlZ2V4Qml0fVt8XX5bWyR7dH18fmc7YDtcblx0XHRcdFx0Y21kICs9IGBzflxcXFxbXFxcXFske3N9XFxcXHwke3N9XFxcXF1cXFxcXX5bWyR7dH1dXX5nYDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y21kICs9IGBzflxcXFxbXFxcXFske2N1cnJlbnRBcnRpY2xlUmVnZXhCaXR9XFxcXF1cXFxcXX4kMX5nO2A7XG5cdFx0XHRjbWQgKz0gYHN+XFxcXFtcXFxcWyR7Y3VycmVudEFydGljbGVSZWdleEJpdH1bfF0oLio/KVxcXFxdXFxcXF1+JDJ+Z2A7XG5cdFx0fVxuXHRcdC8vIEJ1aWxkIHF1ZXJ5XG5cdFx0Y21kID0gYGF1dG9lZGl0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNtZCl9YDtcblx0XHRjbWQgKz0gYCZhdXRvY2xpY2s9JHtlbmNvZGVVUklDb21wb25lbnQoeC5jbGlja0J1dHRvbil9JmFjdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQoYXV0b0NsaWNrVG9rZW4oKSl9YDtcblx0XHRjbWQgKz0geC5taW5vciA9PT0gbnVsbCA/ICcnIDogYCZhdXRvbWlub3I9JHtlbmNvZGVVUklDb21wb25lbnQoeC5taW5vcil9YDtcblx0XHRjbWQgKz0geC53YXRjaCA9PT0gbnVsbCA/ICcnIDogYCZhdXRvd2F0Y2g9JHtlbmNvZGVVUklDb21wb25lbnQoeC53YXRjaCl9YDtcblx0XHRjbWQgKz0gYCZhdXRvc3VtbWFyeT0ke2VuY29kZVVSSUNvbXBvbmVudCh4LnN1bW1hcnkpfWA7XG5cdFx0Y21kICs9IGAmYXV0b2ltcGw9JHtlbmNvZGVVUklDb21wb25lbnQocG9wdXBTdHJpbmcoJ2F1dG9lZGl0X3ZlcnNpb24nKSl9YDtcblx0XHRyZXR1cm4gYXBwZW5kUGFyYW1zVG9MaW5rKGxrLCBjbWQpO1xuXHR9O1xuXHRjb25zdCByZWRpckxpbmsgPSAocmVkaXJNYXRjaCwgYXJ0aWNsZSkgPT4ge1xuXHRcdC8vIE5CIHJlZGlyTWF0Y2ggaXMgaW4gd2lraVRleHRcblx0XHRsZXQgcmV0ID0gJyc7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwQXBwZW5kUmVkaXJOYXZMaW5rcycpICYmIGdldFZhbHVlT2YoJ3BvcHVwTmF2TGlua3MnKSkge1xuXHRcdFx0cmV0ICs9ICc8aHI+Jztcblx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cEZpeFJlZGlycycpICYmIGF1dG9FZGl0ICE9PSB1bmRlZmluZWQgJiYgYXV0b0VkaXQpIHtcblx0XHRcdFx0cmV0ICs9IHBvcHVwU3RyaW5nKCdSZWRpcmVjdHMgdG86IChGaXggJyk7XG5cdFx0XHRcdGxvZyhgcmVkaXJMaW5rOiBuZXdUYXJnZXQ9JHtyZWRpck1hdGNofWApO1xuXHRcdFx0XHRyZXQgKz0gYWRkUG9wdXBTaG9ydGN1dChcblx0XHRcdFx0XHRjaGFuZ2VMaW5rVGFyZ2V0TGluayh7XG5cdFx0XHRcdFx0XHRuZXdUYXJnZXQ6IHJlZGlyTWF0Y2gsXG5cdFx0XHRcdFx0XHR0ZXh0OiBwb3B1cFN0cmluZygndGFyZ2V0JyksXG5cdFx0XHRcdFx0XHRoaW50OiBwb3B1cFN0cmluZygnRml4IHRoaXMgcmVkaXJlY3QsIGNoYW5naW5nIGp1c3QgdGhlIGxpbmsgdGFyZ2V0JyksXG5cdFx0XHRcdFx0XHRzdW1tYXJ5OiBzaW1wbGVQcmludGYoZ2V0VmFsdWVPZigncG9wdXBGaXhSZWRpcnNTdW1tYXJ5JyksIFthcnRpY2xlLnRvU3RyaW5nKCksIHJlZGlyTWF0Y2hdKSxcblx0XHRcdFx0XHRcdG9sZFRhcmdldDogYXJ0aWNsZS50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0Y2xpY2tCdXR0b246IGdldFZhbHVlT2YoJ3BvcHVwUmVkaXJBdXRvQ2xpY2snKSxcblx0XHRcdFx0XHRcdG1pbm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0d2F0Y2g6IGdldFZhbHVlT2YoJ3BvcHVwV2F0Y2hSZWRpcnJlZFBhZ2VzJyksXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0J1InXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldCArPSBwb3B1cFN0cmluZygnIG9yICcpO1xuXHRcdFx0XHRyZXQgKz0gYWRkUG9wdXBTaG9ydGN1dChcblx0XHRcdFx0XHRjaGFuZ2VMaW5rVGFyZ2V0TGluayh7XG5cdFx0XHRcdFx0XHRuZXdUYXJnZXQ6IHJlZGlyTWF0Y2gsXG5cdFx0XHRcdFx0XHR0ZXh0OiBwb3B1cFN0cmluZygndGFyZ2V0ICYgbGFiZWwnKSxcblx0XHRcdFx0XHRcdGhpbnQ6IHBvcHVwU3RyaW5nKCdGaXggdGhpcyByZWRpcmVjdCwgY2hhbmdpbmcgdGhlIGxpbmsgdGFyZ2V0IGFuZCBsYWJlbCcpLFxuXHRcdFx0XHRcdFx0c3VtbWFyeTogc2ltcGxlUHJpbnRmKGdldFZhbHVlT2YoJ3BvcHVwRml4UmVkaXJzU3VtbWFyeScpLCBbYXJ0aWNsZS50b1N0cmluZygpLCByZWRpck1hdGNoXSksXG5cdFx0XHRcdFx0XHRvbGRUYXJnZXQ6IGFydGljbGUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGNsaWNrQnV0dG9uOiBnZXRWYWx1ZU9mKCdwb3B1cFJlZGlyQXV0b0NsaWNrJyksXG5cdFx0XHRcdFx0XHRtaW5vcjogdHJ1ZSxcblx0XHRcdFx0XHRcdHdhdGNoOiBnZXRWYWx1ZU9mKCdwb3B1cFdhdGNoUmVkaXJyZWRQYWdlcycpLFxuXHRcdFx0XHRcdFx0YWxzb0NoYW5nZUxhYmVsOiB0cnVlLFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCdSJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXQgKz0gcG9wdXBTdHJpbmcoJyknKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldCArPSBwb3B1cFN0cmluZygnUmVkaXJlY3RzJykgKyBwb3B1cFN0cmluZygnIHRvICcpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0cmV0dXJuIGA8YnI+ICR7cG9wdXBTdHJpbmcoJ1JlZGlyZWN0cycpfSR7cG9wdXBTdHJpbmcoJyB0byAnKX0ke3RpdGxlZFdpa2lMaW5rKHtcblx0XHRcdGFydGljbGU6IG5ldyBUaXRsZSgpLmZyb21XaWtpVGV4dChyZWRpck1hdGNoKSxcblx0XHRcdGFjdGlvbjogJ3ZpZXcnIC8qIEZJWE1FOiBuZXdXaW4gKi8sXG5cdFx0XHR0ZXh0OiBzYWZlRGVjb2RlVVJJKHJlZGlyTWF0Y2gpLFxuXHRcdFx0dGl0bGU6IHBvcHVwU3RyaW5nKCdCeXBhc3MgcmVkaXJlY3QnKSxcblx0XHR9KX1gO1xuXHR9O1xuXHRjb25zdCBhcmluTGluayA9IChsKSA9PiB7XG5cdFx0aWYgKCFzYW5lTGlua0NoZWNrKGwpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0aWYgKCFsLmFydGljbGUuaXNJcFVzZXIoKSB8fCAhcGcud2lraS53aWtpbWVkaWEpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCB1TiA9IGwuYXJ0aWNsZS51c2VyTmFtZSgpO1xuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmw6IGBodHRwOi8vd3MuYXJpbi5uZXQvY2dpLWJpbi93aG9pcy5wbD9xdWVyeWlucHV0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVOKX1gLFxuXHRcdFx0bmV3V2luOiBsLm5ld1dpbixcblx0XHRcdHRpdGxlOiB0cHJpbnRmKCdMb29rIHVwICVzIGluIEFSSU4gd2hvaXMgZGF0YWJhc2UnLCBbdU5dKSxcblx0XHRcdHRleHQ6IGwudGV4dCxcblx0XHRcdG5vUG9wdXA6IDEsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IHRvb2xEYk5hbWUgPSAoY29va2llU3R5bGUpID0+IHtcblx0XHRsZXQgcmV0ID0gbXcuY29uZmlnLmdldCgnd2dEQm5hbWUnKTtcblx0XHRpZiAoIWNvb2tpZVN0eWxlKSB7XG5cdFx0XHRyZXQgKz0gJ19wJztcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3Qgc2FuZUxpbmtDaGVjayA9IChsKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBsLmFydGljbGUgIT09IHR5cGVvZiB7fSB8fCB0eXBlb2YgbC50ZXh0ICE9PSB0eXBlb2YgJycpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cdGNvbnN0IGVkaXRDb3VudGVyTGluayA9IChsKSA9PiB7XG5cdFx0aWYgKCFzYW5lTGlua0NoZWNrKGwpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0aWYgKCFwZy53aWtpLndpa2ltZWRpYSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IHVOID0gbC5hcnRpY2xlLnVzZXJOYW1lKCk7XG5cdFx0Y29uc3QgdG9vbCA9IGdldFZhbHVlT2YoJ3BvcHVwRWRpdENvdW50ZXJUb29sJyk7XG5cdFx0bGV0IHVybDtcblx0XHRjb25zdCBkZWZhdWx0VG9vbFVybCA9ICcvL3Rvb2xzLndtZmxhYnMub3JnL3N1cGVyY291bnQvaW5kZXgucGhwP3VzZXI9JDEmcHJvamVjdD0kMi4kMyc7XG5cdFx0c3dpdGNoICh0b29sKSB7XG5cdFx0XHRjYXNlICdjdXN0b20nOlxuXHRcdFx0XHR1cmwgPSBzaW1wbGVQcmludGYoZ2V0VmFsdWVPZigncG9wdXBFZGl0Q291bnRlclVybCcpLCBbZW5jb2RlVVJJQ29tcG9uZW50KHVOKSwgdG9vbERiTmFtZSgpXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRjb25zdCB0aGVXaWtpID0gcGcud2lraS5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXHRcdFx0XHR1cmwgPSBzaW1wbGVQcmludGYoZGVmYXVsdFRvb2xVcmwsIFtlbmNvZGVVUklDb21wb25lbnQodU4pLCB0aGVXaWtpWzBdLCB0aGVXaWtpWzFdXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmwsXG5cdFx0XHR0aXRsZTogdHByaW50ZignZWRpdENvdW50ZXJMaW5rSGludCcsIFt1Tl0pLFxuXHRcdFx0bmV3V2luOiBsLm5ld1dpbixcblx0XHRcdHRleHQ6IGwudGV4dCxcblx0XHRcdG5vUG9wdXA6IDEsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IGVkaXRvckxpc3RMaW5rID0gKGwpID0+IHtcblx0XHRpZiAoIXNhbmVMaW5rQ2hlY2sobCkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBhcnRpY2xlID0gbC5hcnRpY2xlLmFydGljbGVGcm9tVGFsa1BhZ2UoKSB8fCBsLmFydGljbGU7XG5cdFx0Y29uc3QgdXJsID0gYGh0dHBzOi8veHRvb2xzLndtZmxhYnMub3JnL2FydGljbGVpbmZvLyR7ZW5jb2RlVVJJKFxuXHRcdFx0cGcud2lraS5ob3N0bmFtZVxuXHRcdCl9LyR7YXJ0aWNsZS51cmxTdHJpbmcoKX0/dXNlbGFuZz0ke213LmNvbmZpZy5nZXQoJ3dnVXNlckxhbmd1YWdlJyl9YDtcblx0XHRyZXR1cm4gZ2VuZXJhbE5hdkxpbmsoe1xuXHRcdFx0dXJsLFxuXHRcdFx0dGl0bGU6IHRwcmludGYoJ2VkaXRvckxpc3RIaW50JywgW2FydGljbGVdKSxcblx0XHRcdG5ld1dpbjogbC5uZXdXaW4sXG5cdFx0XHR0ZXh0OiBsLnRleHQsXG5cdFx0XHRub1BvcHVwOiAxLFxuXHRcdH0pO1xuXHR9O1xuXHRjb25zdCBnZW5lcmFsTmF2TGluayA9IChsKSA9PiB7XG5cdFx0bC5jbGFzc05hbWUgPSBsLmNsYXNzTmFtZSA9PT0gbnVsbCA/ICdwb3B1cE5hdkxpbmsnIDogbC5jbGFzc05hbWU7XG5cdFx0cmV0dXJuIGdlbmVyYWxMaW5rKGwpO1xuXHR9O1xuXHQvLyBtYWdpYyBoaXN0b3J5IGxpbmtzXG5cdC8vXG5cdGNvbnN0IGdldEhpc3RvcnlJbmZvID0gKHdpa2lwYWdlLCB3aGF0TmV4dCkgPT4ge1xuXHRcdGxvZygnZ2V0SGlzdG9yeUluZm8nKTtcblx0XHRnZXRIaXN0b3J5KFxuXHRcdFx0d2lraXBhZ2UsXG5cdFx0XHR3aGF0TmV4dFxuXHRcdFx0XHQ/IChkKSA9PiB7XG5cdFx0XHRcdFx0XHR3aGF0TmV4dChwcm9jZXNzSGlzdG9yeShkKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ6IHByb2Nlc3NIaXN0b3J5XG5cdFx0KTtcblx0fTtcblx0Ly8gRklYTUUgZWxpbWluYXRlIHBnLmlkTnVtYmVyIC4uLiBob3c/IDotKFxuXHRjb25zdCBnZXRIaXN0b3J5ID0gKHdpa2lwYWdlLCBvbkNvbXBsZXRlKSA9PiB7XG5cdFx0bG9nKCdnZXRIaXN0b3J5Jyk7XG5cdFx0Y29uc3QgdXJsID0gYCR7cGcud2lraS5hcGl3aWtpYmFzZX0/Zm9ybWF0PWpzb24mZm9ybWF0dmVyc2lvbj0yJmFjdGlvbj1xdWVyeSZwcm9wPXJldmlzaW9ucyZ0aXRsZXM9JHtuZXcgVGl0bGUoXG5cdFx0XHR3aWtpcGFnZVxuXHRcdCkudXJsU3RyaW5nKCl9JnJ2bGltaXQ9JHtnZXRWYWx1ZU9mKCdwb3B1cEhpc3RvcnlMaW1pdCcpfWA7XG5cdFx0bG9nKGBnZXRIaXN0b3J5OiB1cmw9JHt1cmx9YCk7XG5cdFx0cmV0dXJuIHN0YXJ0RG93bmxvYWQodXJsLCBgJHtwZy5pZE51bWJlcn1oaXN0b3J5YCwgb25Db21wbGV0ZSk7XG5cdH07XG5cdGNvbnN0IHByb2Nlc3NIaXN0b3J5ID0gKGRvd25sb2FkKSA9PiB7XG5cdFx0Y29uc3QganNvYmogPSBnZXRKc09iaihkb3dubG9hZC5kYXRhKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qge3JldmlzaW9uc30gPSBhbnlDaGlsZChqc29iai5xdWVyeS5wYWdlcyk7XG5cdFx0XHRjb25zdCBlZGl0cyA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCByZXZpc2lvbiBvZiByZXZpc2lvbnMpIHtcblx0XHRcdFx0ZWRpdHMucHVzaCh7XG5cdFx0XHRcdFx0b2xkaWQ6IHJldmlzaW9uLnJldmlkLFxuXHRcdFx0XHRcdGVkaXRvcjogcmV2aXNpb24udXNlcixcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRsb2coYHByb2Nlc3NlZCAke2VkaXRzLmxlbmd0aH0gZWRpdHNgKTtcblx0XHRcdHJldHVybiBmaW5pc2hQcm9jZXNzSGlzdG9yeShlZGl0cywgbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGxvZygnU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBKU09OIGJ1c2luZXNzJyk7XG5cdFx0XHRyZXR1cm4gZmluaXNoUHJvY2Vzc0hpc3RvcnkoW10pO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgZmluaXNoUHJvY2Vzc0hpc3RvcnkgPSAoZWRpdHMsIHVzZXJOYW1lKSA9PiB7XG5cdFx0Y29uc3QgaGlzdEluZm8gPSB7fTtcblx0XHRoaXN0SW5mby5lZGl0cyA9IGVkaXRzO1xuXHRcdGhpc3RJbmZvLnVzZXJOYW1lID0gdXNlck5hbWU7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlZGl0cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0aWYgKGhpc3RJbmZvLm15TGFzdEVkaXQgPT09IHVuZGVmaW5lZCAmJiB1c2VyTmFtZSAmJiBlZGl0c1tpXS5lZGl0b3IgPT09IHVzZXJOYW1lKSB7XG5cdFx0XHRcdGhpc3RJbmZvLm15TGFzdEVkaXQgPSB7XG5cdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0b2xkaWQ6IGVkaXRzW2ldLm9sZGlkLFxuXHRcdFx0XHRcdHByZXZpZDogaSA9PT0gMCA/IG51bGwgOiBlZGl0c1tpIC0gMV0ub2xkaWQsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGlzdEluZm8uZmlyc3ROZXdFZGl0b3IgPT09IHVuZGVmaW5lZCAmJiBlZGl0c1tpXS5lZGl0b3IgIT09IGVkaXRzWzBdLmVkaXRvcikge1xuXHRcdFx0XHRoaXN0SW5mby5maXJzdE5ld0VkaXRvciA9IHtcblx0XHRcdFx0XHRpbmRleDogaSxcblx0XHRcdFx0XHRvbGRpZDogZWRpdHNbaV0ub2xkaWQsXG5cdFx0XHRcdFx0cHJldmlkOiBpID09PSAwID8gbnVsbCA6IGVkaXRzW2kgLSAxXS5vbGRpZCxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gcGcubWlzYy5oaXN0b3J5SW5mbz1oaXN0SW5mbztcblx0XHRyZXR1cm4gaGlzdEluZm87XG5cdH07XG5cdC8vIEVOREZJTEU6IGxpbmtzLmpzXG5cdC8vIFNUQVJURklMRTogb3B0aW9ucy5qc1xuXHQvLyBvcHRpb25zXG5cdC8vIGNoZWNrIGZvciBleGlzdGluZyB2YWx1ZSwgZWxzZSB1c2UgZGVmYXVsdFxuXHRjb25zdCBkZWZhdWx0aXplID0gKHgpID0+IHtcblx0XHRwZy5vcHRpb25beF0gPz89IHdpbmRvd1t4XSA9PT0gdW5kZWZpbmVkID8gcGcub3B0aW9uRGVmYXVsdFt4XSA6IHdpbmRvd1t4XTtcblx0fTtcblx0Y29uc3QgbmV3T3B0aW9uID0gKHgsIGRlZikgPT4ge1xuXHRcdHBnLm9wdGlvbkRlZmF1bHRbeF0gPSBkZWY7XG5cdH07XG5cdGNvbnN0IHNldERlZmF1bHQgPSAoeCwgZGVmKSA9PiB7XG5cdFx0cmV0dXJuIG5ld09wdGlvbih4LCBkZWYpO1xuXHR9O1xuXHRjb25zdCBnZXRWYWx1ZU9mID0gKHZhck5hbWUpID0+IHtcblx0XHRkZWZhdWx0aXplKHZhck5hbWUpO1xuXHRcdHJldHVybiBwZy5vcHRpb25bdmFyTmFtZV07XG5cdH07XG5cdGNvbnN0IHNldE9wdGlvbnMgPSAoKSA9PiB7XG5cdFx0Ly8gdXNlci1zZXR0YWJsZSBwYXJhbWV0ZXJzIGFuZCBkZWZhdWx0c1xuXHRcdGxldCB1c2VySXNTeXNvcCA9IGZhbHNlO1xuXHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z1VzZXJHcm91cHMnKSkge1xuXHRcdFx0Zm9yIChsZXQgZyA9IDA7IGcgPCBtdy5jb25maWcuZ2V0KCd3Z1VzZXJHcm91cHMnKS5sZW5ndGg7ICsrZykge1xuXHRcdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dVc2VyR3JvdXBzJylbZ10gPT09ICdzeXNvcCcpIHtcblx0XHRcdFx0XHR1c2VySXNTeXNvcCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnVXNlckdyb3VwcycpW2ddID09PSAnc3Rld2FyZCcpIHtcblx0XHRcdFx0XHR1c2VySXNTeXNvcCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gQmFzaWMgb3B0aW9uc1xuXHRcdG5ld09wdGlvbigncG9wdXBEZWxheScsIDAuNSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEhpZGVEZWxheScsIDAuNSk7XG5cdFx0bmV3T3B0aW9uKCdzaW1wbGVQb3B1cHMnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFN0cnVjdHVyZScsICdzaG9ydG1lbnVzJyk7IC8vIHNlZSBsYXRlciAtIGRlZmF1bHQgZm9yIHBvcHVwU3RydWN0dXJlIGlzICdvcmlnaW5hbCcgaWYgc2ltcGxlUG9wdXBzIGlzIHRydWVcblx0XHRuZXdPcHRpb24oJ3BvcHVwQWN0aW9uc01lbnUnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwU2V0dXBNZW51JywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEFkbWluTGlua3MnLCB1c2VySXNTeXNvcCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFNob3J0Y3V0S2V5cycsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwSGlzdG9yaWNhbExpbmtzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cE9ubHlBcnRpY2xlTGlua3MnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3JlbW92ZVRpdGxlcycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBNYXhXaWR0aCcsIDM1MCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFNpbXBsaWZ5TWFpbkxpbmsnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwQXBwZW5kUmVkaXJOYXZMaW5rcycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBUb2NMaW5rcycsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwU3VicG9wdXBzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERyYWdIYW5kbGUnLCBmYWxzZSAvKiAncG9wdXBUb3BMaW5rcycgKi8pO1xuXHRcdG5ld09wdGlvbigncG9wdXBMYXp5UHJldmlld3MnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTGF6eURvd25sb2FkcycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBBbGxEYWJzU3R1YnMnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERlYnVnZ2luZycsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwQWN0aXZlTmF2bGlua3MnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTW9kaWZpZXInLCBmYWxzZSk7IC8vIGN0cmwsIHNoaWZ0LCBhbHQgb3IgbWV0YVxuXHRcdG5ld09wdGlvbigncG9wdXBNb2RpZmllckFjdGlvbicsICdlbmFibGUnKTsgLy8gb3IgJ2Rpc2FibGUnXG5cdFx0bmV3T3B0aW9uKCdwb3B1cERyYWdnYWJsZScsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBSZXZpZXcnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cExvY2FsZScsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRGF0ZVRpbWVGb3JtYXR0ZXJPcHRpb25zJywge1xuXHRcdFx0eWVhcjogJ251bWVyaWMnLFxuXHRcdFx0bW9udGg6ICdsb25nJyxcblx0XHRcdGRheTogJ251bWVyaWMnLFxuXHRcdFx0aG91cjEyOiBmYWxzZSxcblx0XHRcdGhvdXI6ICcyLWRpZ2l0Jyxcblx0XHRcdG1pbnV0ZTogJzItZGlnaXQnLFxuXHRcdFx0c2Vjb25kOiAnMi1kaWdpdCcsXG5cdFx0fSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERhdGVGb3JtYXR0ZXJPcHRpb25zJywge1xuXHRcdFx0eWVhcjogJ251bWVyaWMnLFxuXHRcdFx0bW9udGg6ICdsb25nJyxcblx0XHRcdGRheTogJ251bWVyaWMnLFxuXHRcdH0pO1xuXHRcdG5ld09wdGlvbigncG9wdXBUaW1lRm9ybWF0dGVyT3B0aW9ucycsIHtcblx0XHRcdGhvdXIxMjogZmFsc2UsXG5cdFx0XHRob3VyOiAnMi1kaWdpdCcsXG5cdFx0XHRtaW51dGU6ICcyLWRpZ2l0Jyxcblx0XHRcdHNlY29uZDogJzItZGlnaXQnLFxuXHRcdH0pO1xuXHRcdC8vIGltYWdlc1xuXHRcdG5ld09wdGlvbigncG9wdXBJbWFnZXMnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ2ltYWdlUG9wdXBzRm9ySW1hZ2VzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cE5ldmVyR2V0VGh1bWJzJywgZmFsc2UpO1xuXHRcdC8vIG5ld09wdGlvbigncG9wdXBJbWFnZXNUb2dnbGVTaXplJywgICAgICAgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFRodW1iQWN0aW9uJywgJ2ltYWdlcGFnZScpOyAvLyAnc2l6ZXRvZ2dsZScpO1xuXHRcdG5ld09wdGlvbigncG9wdXBJbWFnZVNpemUnLCA2MCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEltYWdlU2l6ZUxhcmdlJywgMjAwKTtcblx0XHQvLyByZWRpcnMsIGRhYnMsIHJldmVyc2lvblxuXHRcdG5ld09wdGlvbigncG9wdXBGaXhSZWRpcnMnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFJlZGlyQXV0b0NsaWNrJywgJ3dwRGlmZicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBGaXhEYWJzJywgZmFsc2UpO1xuXHRcdG5ld09wdGlvbigncG9wdXBEYWJzQXV0b0NsaWNrJywgJ3dwRGlmZicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBSZXZlcnRTdW1tYXJ5UHJvbXB0JywgZmFsc2UpO1xuXHRcdG5ld09wdGlvbigncG9wdXBNaW5vclJldmVydHMnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFJlZGxpbmtSZW1vdmFsJywgZmFsc2UpO1xuXHRcdG5ld09wdGlvbigncG9wdXBSZWRsaW5rQXV0b0NsaWNrJywgJ3dwRGlmZicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBXYXRjaERpc2FtYmlnZ2VkUGFnZXMnLCBudWxsKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwV2F0Y2hSZWRpcnJlZFBhZ2VzJywgbnVsbCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERhYldpa3Rpb25hcnknLCAnbGFzdCcpO1xuXHRcdC8vIG5hdmxpbmtzXG5cdFx0bmV3T3B0aW9uKCdwb3B1cE5hdkxpbmtzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cE5hdkxpbmtTZXBhcmF0b3InLCAnICZzZG90OyAnKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTGFzdEVkaXRMaW5rJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEVkaXRDb3VudGVyVG9vbCcsICdzdXBlcmNvdW50Jyk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEVkaXRDb3VudGVyVXJsJywgJycpO1xuXHRcdC8vIHByZXZpZXdzIGV0Y1xuXHRcdG5ld09wdGlvbigncG9wdXBQcmV2aWV3cycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBTdW1tYXJ5RGF0YScsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBNYXhQcmV2aWV3U2VudGVuY2VzJywgNSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cE1heFByZXZpZXdDaGFyYWN0ZXJzJywgNjAwKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTGFzdE1vZGlmaWVkJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFByZXZpZXdLaWxsVGVtcGxhdGVzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFByZXZpZXdSYXdUZW1wbGF0ZXMnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUHJldmlld0ZpcnN0UGFyT25seScsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBQcmV2aWV3Q3V0SGVhZGluZ3MnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUHJldmlld0J1dHRvbicsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUHJldmlld0J1dHRvbkV2ZW50JywgJ2NsaWNrJyk7XG5cdFx0Ly8gZGlmZnNcblx0XHRuZXdPcHRpb24oJ3BvcHVwUHJldmlld0RpZmZzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERpZmZNYXhMaW5lcycsIDEwMCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERpZmZDb250ZXh0TGluZXMnLCAyKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRGlmZkNvbnRleHRDaGFyYWN0ZXJzJywgNDApO1xuXHRcdG5ld09wdGlvbigncG9wdXBEaWZmRGF0ZXMnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRGlmZkRhdGVQcmludGVyJywgJ3RvTG9jYWxlU3RyaW5nJyk7IC8vIG5vIGxvbmdlciBpbiB1c2VcblxuXHRcdC8vIGVkaXQgc3VtbWFyaWVzLiBHb2QsIHRoZXNlIGFyZSB1Z2x5LlxuXHRcdG5ld09wdGlvbigncG9wdXBSZXZpZXdlZFN1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwUmV2aWV3ZWRTdW1tYXJ5JykpO1xuXHRcdG5ld09wdGlvbigncG9wdXBGaXhEYWJzU3VtbWFyeScsIHBvcHVwU3RyaW5nKCdkZWZhdWx0cG9wdXBGaXhEYWJzU3VtbWFyeScpKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRXh0ZW5kZWRSZXZlcnRTdW1tYXJ5JywgcG9wdXBTdHJpbmcoJ2RlZmF1bHRwb3B1cEV4dGVuZGVkUmV2ZXJ0U3VtbWFyeScpKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUmV2ZXJ0U3VtbWFyeScsIHBvcHVwU3RyaW5nKCdkZWZhdWx0cG9wdXBSZXZlcnRTdW1tYXJ5JykpO1xuXHRcdG5ld09wdGlvbigncG9wdXBSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeScsIHBvcHVwU3RyaW5nKCdkZWZhdWx0cG9wdXBSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeScpKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUXVlcmllZFJldmVydFN1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwUXVlcmllZFJldmVydFN1bW1hcnknKSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFF1ZXJpZWRSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeScsIHBvcHVwU3RyaW5nKCdkZWZhdWx0cG9wdXBRdWVyaWVkUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnknKSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEZpeFJlZGlyc1N1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwRml4UmVkaXJzU3VtbWFyeScpKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUmVkbGlua1N1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwUmVkbGlua1N1bW1hcnknKSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFJtRGFiTGlua1N1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwUm1EYWJMaW5rU3VtbWFyeScpKTtcblx0XHQvLyBtaXNjXG5cdFx0bmV3T3B0aW9uKCdwb3B1cEhpc3RvcnlMaW1pdCcsIDUwKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRmlsdGVycycsIFtcblx0XHRcdHBvcHVwRmlsdGVyU3R1YkRldGVjdCxcblx0XHRcdHBvcHVwRmlsdGVyRGlzYW1iaWdEZXRlY3QsXG5cdFx0XHRwb3B1cEZpbHRlclBhZ2VTaXplLFxuXHRcdFx0cG9wdXBGaWx0ZXJDb3VudExpbmtzLFxuXHRcdFx0cG9wdXBGaWx0ZXJDb3VudEltYWdlcyxcblx0XHRcdHBvcHVwRmlsdGVyQ291bnRDYXRlZ29yaWVzLFxuXHRcdFx0cG9wdXBGaWx0ZXJMYXN0TW9kaWZpZWQsXG5cdFx0XSk7XG5cdFx0bmV3T3B0aW9uKCdleHRyYVBvcHVwRmlsdGVycycsIFtdKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwT25FZGl0U2VsZWN0aW9uJywgJ2N1cnNvcicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBQcmV2aWV3SGlzdG9yeScsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBJbWFnZUxpbmtzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cENhdGVnb3J5TWVtYmVycycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBVc2VySW5mbycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBIaXN0b3J5UHJldmlld0xpbWl0JywgMjUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBDb250cmlic1ByZXZpZXdMaW1pdCcsIDI1KTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUmV2RGVsVXJsJywgJy8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpa2lwZWRpYTpSZXZpc2lvbl9kZWxldGlvbicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBTaG93R2VuZGVyJywgdHJ1ZSk7XG5cdFx0Ly8gbmV3IHdpbmRvd3Ncblx0XHRuZXdPcHRpb24oJ3BvcHVwTmV3V2luZG93cycsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTGlua3NOZXdXaW5kb3cnLCB7bGFzdENvbnRyaWI6IHRydWUsIHNpbmNlTWU6IHRydWV9KTtcblx0XHQvLyByZWdleHBzXG5cdFx0bmV3T3B0aW9uKFxuXHRcdFx0J3BvcHVwRGFiUmVnZXhwJyxcblx0XHRcdFN0cmluZy5yYXdgXFx7XFx7XFxzKihkKGFifGlzYW1iKGlnKHVhdGlvbik/KT8pfCgoKGdlb3xobnxyb2FkP3xzY2hvb2x8bnVtYmVyKWRpcyl8WzIzNF1bbGNdW2Fjd118KHJvYWR8c2hpcClpbmRleCkpXFxzKihcXHxbXn1dKik/XFx9XFx9fGlzIGEgLipkaXNhbWJpZ3VhdGlvbi4qcGFnZWBcblx0XHQpO1xuXHRcdG5ld09wdGlvbigncG9wdXBBbmNob3JSZWdleHAnLCAnYW5jaG9ycz8nKTsgLy8gaG93IHRvIGlkZW50aWZ5IGFuIGFuY2hvcnMgdGVtcGxhdGVcblx0XHRuZXdPcHRpb24oJ3BvcHVwU3R1YlJlZ2V4cCcsICcoc2VjdCk/c3R1Ylt9XVt9XXxUaGlzIC4qLXJlbGF0ZWQgYXJ0aWNsZSBpcyBhIC4qc3R1YicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBJbWFnZVZhcnNSZWdleHAnLCAnaW1hZ2V8aW1hZ2VfKD86ZmlsZXxza3lsaW5lfG5hbWV8ZmxhZ3xzZWFsKXxjb3ZlcnxiYWRnZXxsb2dvJyk7XG5cdH07XG5cdC8vIEVOREZJTEU6IG9wdGlvbnMuanNcblx0Ly8gU1RBUlRGSUxFOiBzdHJpbmdzLmpzXG5cdC8vIFRyYW5zbGF0YWJsZSBzdHJpbmdzXG5cdC8vXG5cdC8vIFNlZSBpbnN0cnVjdGlvbnMgYXRcblx0Ly8ge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpa2lwZWRpYTpUb29scy9OYXZpZ2F0aW9uX3BvcHVwcy9UcmFuc2xhdGlvbn1cblx0cGcuc3RyaW5nID0ge1xuXHRcdC8vIHN1bW1hcnkgZGF0YSwgc2VhcmNoaW5nIGV0Yy5cblx0XHRhcnRpY2xlOiAnYXJ0aWNsZScsXG5cdFx0Y2F0ZWdvcnk6ICdjYXRlZ29yeScsXG5cdFx0Y2F0ZWdvcmllczogJ2NhdGVnb3JpZXMnLFxuXHRcdGltYWdlOiAnaW1hZ2UnLFxuXHRcdGltYWdlczogJ2ltYWdlcycsXG5cdFx0c3R1YjogJ3N0dWInLFxuXHRcdCdzZWN0aW9uIHN0dWInOiAnc2VjdGlvbiBzdHViJyxcblx0XHQnRW1wdHkgcGFnZSc6ICdFbXB0eSBwYWdlJyxcblx0XHRrQjogJ2tCJyxcblx0XHRieXRlczogJ2J5dGVzJyxcblx0XHRkYXk6ICdkYXknLFxuXHRcdGRheXM6ICdkYXlzJyxcblx0XHRob3VyOiAnaG91cicsXG5cdFx0aG91cnM6ICdob3VycycsXG5cdFx0bWludXRlOiAnbWludXRlJyxcblx0XHRtaW51dGVzOiAnbWludXRlcycsXG5cdFx0c2Vjb25kOiAnc2Vjb25kJyxcblx0XHRzZWNvbmRzOiAnc2Vjb25kcycsXG5cdFx0d2VlazogJ3dlZWsnLFxuXHRcdHdlZWtzOiAnd2Vla3MnLFxuXHRcdHNlYXJjaDogJ3NlYXJjaCcsXG5cdFx0U2VhcmNoSGludDogJ0ZpbmQgRW5nbGlzaCBXaWtpcGVkaWEgYXJ0aWNsZXMgY29udGFpbmluZyAlcycsXG5cdFx0d2ViOiAnd2ViJyxcblx0XHRnbG9iYWw6ICdnbG9iYWwnLFxuXHRcdC8vIGFydGljbGUtcmVsYXRlZCBhY3Rpb25zIGFuZCBpbmZvXG5cdFx0Ly8gKHNvbWUgYWN0aW9ucyBhbHNvIGFwcGx5IHRvIHVzZXIgcGFnZXMpXG5cdFx0YWN0aW9uczogJ2FjdGlvbnMnLFxuXHRcdHBvcHVwc01lbnU6ICdwb3B1cHMnLFxuXHRcdHRvZ2dsZVByZXZpZXdzSGludDogJ1RvZ2dsZSBwcmV2aWV3IGdlbmVyYXRpb24gaW4gcG9wdXBzIG9uIHRoaXMgcGFnZScsXG5cdFx0J2VuYWJsZSBwcmV2aWV3cyc6ICdlbmFibGUgcHJldmlld3MnLFxuXHRcdCdkaXNhYmxlIHByZXZpZXdzJzogJ2Rpc2FibGUgcHJldmlld3MnLFxuXHRcdCd0b2dnbGUgcHJldmlld3MnOiAndG9nZ2xlIHByZXZpZXdzJyxcblx0XHQnc2hvdyBwcmV2aWV3JzogJ3Nob3cgcHJldmlldycsXG5cdFx0cmVzZXQ6ICdyZXNldCcsXG5cdFx0J21vcmUuLi4nOiAnbW9yZS4uLicsXG5cdFx0ZGlzYWJsZTogJ2Rpc2FibGUgcG9wdXBzJyxcblx0XHRkaXNhYmxlUG9wdXBzSGludDogJ0Rpc2FibGUgcG9wdXBzIG9uIHRoaXMgcGFnZS4gUmVsb2FkIHBhZ2UgdG8gcmUtZW5hYmxlLicsXG5cdFx0aGlzdG9yeWZlZWRIaW50OiAnUlNTIGZlZWQgb2YgcmVjZW50IGNoYW5nZXMgdG8gdGhpcyBwYWdlJyxcblx0XHRwdXJnZVBvcHVwc0hpbnQ6ICdSZXNldCBwb3B1cHMsIGNsZWFyaW5nIGFsbCBjYWNoZWQgcG9wdXAgZGF0YS4nLFxuXHRcdFBvcHVwc0hpbnQ6ICdSZXNldCBwb3B1cHMsIGNsZWFyaW5nIGFsbCBjYWNoZWQgcG9wdXAgZGF0YS4nLFxuXHRcdHNwYWNlYmFyOiAnc3BhY2UnLFxuXHRcdHZpZXc6ICd2aWV3Jyxcblx0XHQndmlldyBhcnRpY2xlJzogJ3ZpZXcgYXJ0aWNsZScsXG5cdFx0dmlld0hpbnQ6ICdHbyB0byAlcycsXG5cdFx0dGFsazogJ3RhbGsnLFxuXHRcdCd0YWxrIHBhZ2UnOiAndGFsayBwYWdlJyxcblx0XHQndGhpcyZuYnNwO3JldmlzaW9uJzogJ3RoaXMmbmJzcDtyZXZpc2lvbicsXG5cdFx0J3JldmlzaW9uICVzIG9mICVzJzogJ3JldmlzaW9uICVzIG9mICVzJyxcblx0XHQnUmV2aXNpb24gJXMgb2YgJXMnOiAnUmV2aXNpb24gJXMgb2YgJXMnLFxuXHRcdCd0aGUgcmV2aXNpb24gcHJpb3IgdG8gcmV2aXNpb24gJXMgb2YgJXMnOiAndGhlIHJldmlzaW9uIHByaW9yIHRvIHJldmlzaW9uICVzIG9mICVzJyxcblx0XHQnVG9nZ2xlIGltYWdlIHNpemUnOiAnQ2xpY2sgdG8gdG9nZ2xlIGltYWdlIHNpemUnLFxuXHRcdGRlbDogJ2RlbCcsXG5cdFx0ZGVsZXRlOiAnZGVsZXRlJyxcblx0XHRkZWxldGVIaW50OiAnRGVsZXRlICVzJyxcblx0XHR1bmRlbGV0ZVNob3J0OiAndW4nLFxuXHRcdFVuZGVsZXRlSGludDogJ1Nob3cgdGhlIGRlbGV0aW9uIGhpc3RvcnkgZm9yICVzJyxcblx0XHRwcm90ZWN0OiAncHJvdGVjdCcsXG5cdFx0cHJvdGVjdEhpbnQ6ICdSZXN0cmljdCBlZGl0aW5nIHJpZ2h0cyB0byAlcycsXG5cdFx0dW5wcm90ZWN0U2hvcnQ6ICd1bicsXG5cdFx0dW5wcm90ZWN0SGludDogJ0FsbG93ICVzIHRvIGJlIGVkaXRlZCBieSBhbnlvbmUgYWdhaW4nLFxuXHRcdCdzZW5kIHRoYW5rcyc6ICdzZW5kIHRoYW5rcycsXG5cdFx0VGhhbmtzSGludDogJ1NlbmQgYSB0aGFuayB5b3Ugbm90aWZpY2F0aW9uIHRvIHRoaXMgdXNlcicsXG5cdFx0bW92ZTogJ21vdmUnLFxuXHRcdCdtb3ZlIHBhZ2UnOiAnbW92ZSBwYWdlJyxcblx0XHRNb3ZlcGFnZUhpbnQ6ICdDaGFuZ2UgdGhlIHRpdGxlIG9mICVzJyxcblx0XHRlZGl0OiAnZWRpdCcsXG5cdFx0J2VkaXQgYXJ0aWNsZSc6ICdlZGl0IGFydGljbGUnLFxuXHRcdGVkaXRIaW50OiAnQ2hhbmdlIHRoZSBjb250ZW50IG9mICVzJyxcblx0XHQnZWRpdCB0YWxrJzogJ2VkaXQgdGFsaycsXG5cdFx0bmV3OiAnbmV3Jyxcblx0XHQnbmV3IHRvcGljJzogJ25ldyB0b3BpYycsXG5cdFx0bmV3U2VjdGlvbkhpbnQ6ICdTdGFydCBhIG5ldyBzZWN0aW9uIG9uICVzJyxcblx0XHQnbnVsbCBlZGl0JzogJ251bGwgZWRpdCcsXG5cdFx0bnVsbEVkaXRIaW50OiAnU3VibWl0IGFuIGVkaXQgdG8gJXMsIG1ha2luZyBubyBjaGFuZ2VzICcsXG5cdFx0aGlzdDogJ2hpc3QnLFxuXHRcdGhpc3Rvcnk6ICdoaXN0b3J5Jyxcblx0XHRoaXN0b3J5SGludDogJ0xpc3QgdGhlIGNoYW5nZXMgbWFkZSB0byAlcycsXG5cdFx0bGFzdDogJ3ByZXYnLFxuXHRcdGxhc3RFZGl0OiAnbGFzdEVkaXQnLFxuXHRcdCdtYXJrIHBhdHJvbGxlZCc6ICdtYXJrIHBhdHJvbGxlZCcsXG5cdFx0bWFya3BhdHJvbGxlZEhpbnQ6ICdNYXJrIHRoaXMgZWRpdCBhcyBwYXRyb2xsZWQnLFxuXHRcdCdDb3VsZCBub3QgbWFya2VkIHRoaXMgZWRpdCBhcyBwYXRyb2xsZWQnOiAnQ291bGQgbm90IG1hcmtlZCB0aGlzIGVkaXQgYXMgcGF0cm9sbGVkJyxcblx0XHQnc2hvdyBsYXN0IGVkaXQnOiAnbW9zdCByZWNlbnQgZWRpdCcsXG5cdFx0J1Nob3cgdGhlIGxhc3QgZWRpdCc6ICdTaG93IHRoZSBlZmZlY3RzIG9mIHRoZSBtb3N0IHJlY2VudCBjaGFuZ2UnLFxuXHRcdGxhc3RDb250cmliOiAnbGFzdENvbnRyaWInLFxuXHRcdCdsYXN0IHNldCBvZiBlZGl0cyc6ICdsYXRlc3QgZWRpdHMnLFxuXHRcdGxhc3RDb250cmliSGludDogJ1Nob3cgdGhlIG5ldCBlZmZlY3Qgb2YgY2hhbmdlcyBtYWRlIGJ5IHRoZSBsYXN0IGVkaXRvcicsXG5cdFx0Y3VyOiAnY3VyJyxcblx0XHRkaWZmQ3VyOiAnZGlmZkN1cicsXG5cdFx0J1Nob3cgY2hhbmdlcyBzaW5jZSByZXZpc2lvbiAlcyc6ICdTaG93IGNoYW5nZXMgc2luY2UgcmV2aXNpb24gJXMnLFxuXHRcdCclcyBvbGQnOiAnJXMgb2xkJyxcblx0XHRvbGRFZGl0OiAnb2xkRWRpdCcsXG5cdFx0cHVyZ2U6ICdwdXJnZScsXG5cdFx0cHVyZ2VIaW50OiAnRGVtYW5kIGEgZnJlc2ggY29weSBvZiAlcycsXG5cdFx0cmF3OiAnc291cmNlJyxcblx0XHRyYXdIaW50OiAnRG93bmxvYWQgdGhlIHNvdXJjZSBvZiAlcycsXG5cdFx0cmVuZGVyOiAnc2ltcGxlJyxcblx0XHRyZW5kZXJIaW50OiAnU2hvdyBhIHBsYWluIEhUTUwgdmVyc2lvbiBvZiAlcycsXG5cdFx0J1Nob3cgdGhlIGVkaXQgbWFkZSB0byBnZXQgcmV2aXNpb24nOiAnU2hvdyB0aGUgZWRpdCBtYWRlIHRvIGdldCByZXZpc2lvbicsXG5cdFx0c2luY2VNZTogJ3NpbmNlTWUnLFxuXHRcdCdjaGFuZ2VzIHNpbmNlIG1pbmUnOiAnZGlmZiBteSBlZGl0Jyxcblx0XHRzaW5jZU1lSGludDogJ1Nob3cgY2hhbmdlcyBzaW5jZSBteSBsYXN0IGVkaXQnLFxuXHRcdFwiQ291bGRuJ3QgZmluZCBhbiBlZGl0IGJ5ICVzXFxuaW4gdGhlIGxhc3QgJXMgZWRpdHMgdG9cXG4lc1wiOlxuXHRcdFx0XCJDb3VsZG4ndCBmaW5kIGFuIGVkaXQgYnkgJXNcXG5pbiB0aGUgbGFzdCAlcyBlZGl0cyB0b1xcbiVzXCIsXG5cdFx0ZWRzOiAnZWRzJyxcblx0XHRlZGl0b3JzOiAnZWRpdG9ycycsXG5cdFx0ZWRpdG9yTGlzdEhpbnQ6ICdMaXN0IHRoZSB1c2VycyB3aG8gaGF2ZSBlZGl0ZWQgJXMnLFxuXHRcdHJlbGF0ZWQ6ICdyZWxhdGVkJyxcblx0XHRyZWxhdGVkQ2hhbmdlczogJ3JlbGF0ZWRDaGFuZ2VzJyxcblx0XHQncmVsYXRlZCBjaGFuZ2VzJzogJ3JlbGF0ZWQgY2hhbmdlcycsXG5cdFx0UmVjZW50Y2hhbmdlc2xpbmtlZEhpbnQ6ICdTaG93IGNoYW5nZXMgaW4gYXJ0aWNsZXMgcmVsYXRlZCB0byAlcycsXG5cdFx0ZWRpdE9sZDogJ2VkaXRPbGQnLFxuXHRcdHJ2OiAncnYnLFxuXHRcdHJldmVydDogJ3JldmVydCcsXG5cdFx0cmV2ZXJ0SGludDogJ1JldmVydCB0byAlcycsXG5cdFx0ZGVmYXVsdHBvcHVwUmV2aWV3ZWRTdW1tYXJ5OlxuXHRcdFx0J0FjY2VwdGVkIGJ5IHJldmlld2luZyB0aGUgW1tTcGVjaWFsOmRpZmYvJXMvJXN8ZGlmZmVyZW5jZV1dIGJldHdlZW4gdGhpcyB2ZXJzaW9uIGFuZCBwcmV2aW91c2x5IGFjY2VwdGVkIHZlcnNpb24gdXNpbmcgW1s6ZW53aWtpOldpa2lwZWRpYTpUb29scy9OYXZpZ2F0aW9uX3BvcHVwc3xwb3B1cHNdXScsXG5cdFx0ZGVmYXVsdHBvcHVwUmVkbGlua1N1bW1hcnk6XG5cdFx0XHQnUmVtb3ZpbmcgbGluayB0byBlbXB0eSBwYWdlIFtbJXNdXSB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRkZWZhdWx0cG9wdXBGaXhEYWJzU3VtbWFyeTpcblx0XHRcdCdEaXNhbWJpZ3VhdGUgW1slc11dIHRvIFtbJXNdXSB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRkZWZhdWx0cG9wdXBGaXhSZWRpcnNTdW1tYXJ5OlxuXHRcdFx0J1JlZGlyZWN0IGJ5cGFzcyBmcm9tIFtbJXNdXSB0byBbWyVzXV0gdXNpbmcgW1s6ZW53aWtpOldpa2lwZWRpYTpUb29scy9OYXZpZ2F0aW9uX3BvcHVwc3xwb3B1cHNdXScsXG5cdFx0ZGVmYXVsdHBvcHVwRXh0ZW5kZWRSZXZlcnRTdW1tYXJ5OlxuXHRcdFx0J1JldmVydCB0byByZXZpc2lvbiBkYXRlZCAlcyBieSAlcywgb2xkaWQgJXMgdXNpbmcgW1s6ZW53aWtpOldpa2lwZWRpYTpUb29scy9OYXZpZ2F0aW9uX3BvcHVwc3xwb3B1cHNdXScsXG5cdFx0ZGVmYXVsdHBvcHVwUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnk6XG5cdFx0XHQnUmV2ZXJ0IHRvIHRoZSByZXZpc2lvbiBwcmlvciB0byByZXZpc2lvbiAlcyB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRkZWZhdWx0cG9wdXBSZXZlcnRTdW1tYXJ5OiAnUmV2ZXJ0IHRvIHJldmlzaW9uICVzIHVzaW5nIFtbOmVud2lraTpXaWtpcGVkaWE6VG9vbHMvTmF2aWdhdGlvbl9wb3B1cHN8cG9wdXBzXV0nLFxuXHRcdGRlZmF1bHRwb3B1cFF1ZXJpZWRSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeTpcblx0XHRcdCdSZXZlcnQgdG8gdGhlIHJldmlzaW9uIHByaW9yIHRvIHJldmlzaW9uICQxIGRhdGVkICQyIGJ5ICQzIHVzaW5nIFtbOmVud2lraTpXaWtpcGVkaWE6VG9vbHMvTmF2aWdhdGlvbl9wb3B1cHN8cG9wdXBzXV0nLFxuXHRcdGRlZmF1bHRwb3B1cFF1ZXJpZWRSZXZlcnRTdW1tYXJ5OlxuXHRcdFx0J1JldmVydCB0byByZXZpc2lvbiAkMSBkYXRlZCAkMiBieSAkMyB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRkZWZhdWx0cG9wdXBSbURhYkxpbmtTdW1tYXJ5OlxuXHRcdFx0J1JlbW92ZSBsaW5rIHRvIGRhYiBwYWdlIFtbJXNdXSB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRSZWRpcmVjdHM6ICdSZWRpcmVjdHMnLFxuXHRcdCcgdG8gJzogJyB0byAnLFxuXHRcdCdCeXBhc3MgcmVkaXJlY3QnOiAnQnlwYXNzIHJlZGlyZWN0Jyxcblx0XHQnRml4IHRoaXMgcmVkaXJlY3QnOiAnRml4IHRoaXMgcmVkaXJlY3QnLFxuXHRcdGRpc2FtYmlnOiAnZGlzYW1iaWcnLFxuXHRcdGRpc2FtYmlnSGludDogJ0Rpc2FtYmlndWF0ZSB0aGlzIGxpbmsgdG8gW1slc11dJyxcblx0XHQnQ2xpY2sgdG8gZGlzYW1iaWd1YXRlIHRoaXMgbGluayB0bzonOiAnQ2xpY2sgdG8gZGlzYW1iaWd1YXRlIHRoaXMgbGluayB0bzonLFxuXHRcdCdyZW1vdmUgdGhpcyBsaW5rJzogJ3JlbW92ZSB0aGlzIGxpbmsnLFxuXHRcdCdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZSc6ICdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZScsXG5cdFx0J3JlbW92ZSBhbGwgbGlua3MgdG8gdGhpcyBkaXNhbWJpZyBwYWdlIGZyb20gdGhpcyBhcnRpY2xlJzpcblx0XHRcdCdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgZGlzYW1iaWcgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZScsXG5cdFx0bWFpbmxpbms6ICdtYWlubGluaycsXG5cdFx0d2lraUxpbms6ICd3aWtpTGluaycsXG5cdFx0d2lraUxpbmtzOiAnd2lraUxpbmtzJyxcblx0XHQnbGlua3MgaGVyZSc6ICdsaW5rcyBoZXJlJyxcblx0XHR3aGF0TGlua3NIZXJlOiAnd2hhdExpbmtzSGVyZScsXG5cdFx0J3doYXQgbGlua3MgaGVyZSc6ICd3aGF0IGxpbmtzIGhlcmUnLFxuXHRcdFdoYXRsaW5rc2hlcmVIaW50OiAnTGlzdCB0aGUgcGFnZXMgdGhhdCBhcmUgaHlwZXJsaW5rZWQgdG8gJXMnLFxuXHRcdHVud2F0Y2hTaG9ydDogJ3VuJyxcblx0XHR3YXRjaFRoaW5neTogJ3dhdGNoJyxcblx0XHR3YXRjaEhpbnQ6ICdBZGQgJXMgdG8gbXkgd2F0Y2hsaXN0Jyxcblx0XHR1bndhdGNoSGludDogJ1JlbW92ZSAlcyBmcm9tIG15IHdhdGNobGlzdCcsXG5cdFx0J09ubHkgZm91bmQgb25lIGVkaXRvcjogJXMgbWFkZSAlcyBlZGl0cyc6ICdPbmx5IGZvdW5kIG9uZSBlZGl0b3I6ICVzIG1hZGUgJXMgZWRpdHMnLFxuXHRcdCclcyBzZWVtcyB0byBiZSB0aGUgbGFzdCBlZGl0b3IgdG8gdGhlIHBhZ2UgJXMnOiAnJXMgc2VlbXMgdG8gYmUgdGhlIGxhc3QgZWRpdG9yIHRvIHRoZSBwYWdlICVzJyxcblx0XHRyc3M6ICdyc3MnLFxuXHRcdC8vIGRpZmYgcHJldmlld3Ncblx0XHQnRGlmZiB0cnVuY2F0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMnOiAnRGlmZiB0cnVuY2F0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMnLFxuXHRcdCdPbGQgcmV2aXNpb24nOiAnT2xkIHJldmlzaW9uJyxcblx0XHQnTmV3IHJldmlzaW9uJzogJ05ldyByZXZpc2lvbicsXG5cdFx0J1NvbWV0aGluZyB3ZW50IHdyb25nIDotKCc6ICdTb21ldGhpbmcgd2VudCB3cm9uZyA6LSgnLFxuXHRcdCdFbXB0eSByZXZpc2lvbiwgbWF5YmUgbm9uLWV4aXN0ZW50JzogJ0VtcHR5IHJldmlzaW9uLCBtYXliZSBub24tZXhpc3RlbnQnLFxuXHRcdCdVbmtub3duIGRhdGUnOiAnVW5rbm93biBkYXRlJyxcblx0XHQvLyBvdGhlciBzcGVjaWFsIHByZXZpZXdzXG5cdFx0J0VtcHR5IGNhdGVnb3J5JzogJ0VtcHR5IGNhdGVnb3J5Jyxcblx0XHQnQ2F0ZWdvcnkgbWVtYmVycyAoJXMgc2hvd24pJzogJ0NhdGVnb3J5IG1lbWJlcnMgKCVzIHNob3duKScsXG5cdFx0J05vIGltYWdlIGxpbmtzIGZvdW5kJzogJ05vIGltYWdlIGxpbmtzIGZvdW5kJyxcblx0XHQnRmlsZSBsaW5rcyc6ICdGaWxlIGxpbmtzJyxcblx0XHQnTm8gaW1hZ2UgZm91bmQnOiAnTm8gaW1hZ2UgZm91bmQnLFxuXHRcdCdJbWFnZSBmcm9tIENvbW1vbnMnOiAnSW1hZ2UgZnJvbSBDb21tb25zJyxcblx0XHQnRGVzY3JpcHRpb24gcGFnZSc6ICdEZXNjcmlwdGlvbiBwYWdlJyxcblx0XHQnQWx0IHRleHQ6JzogJ0FsdCB0ZXh0OicsXG5cdFx0cmV2ZGVsOiAnSGlkZGVuIHJldmlzaW9uJyxcblx0XHQvLyB1c2VyLXJlbGF0ZWQgYWN0aW9ucyBhbmQgaW5mb1xuXHRcdHVzZXI6ICd1c2VyJyxcblx0XHQndXNlciZuYnNwO3BhZ2UnOiAndXNlciZuYnNwO3BhZ2UnLFxuXHRcdCd1c2VyIHRhbGsnOiAndXNlciB0YWxrJyxcblx0XHQnZWRpdCB1c2VyIHRhbGsnOiAnZWRpdCB1c2VyIHRhbGsnLFxuXHRcdCdsZWF2ZSBjb21tZW50JzogJ2xlYXZlIGNvbW1lbnQnLFxuXHRcdGVtYWlsOiAnZW1haWwnLFxuXHRcdCdlbWFpbCB1c2VyJzogJ2VtYWlsIHVzZXInLFxuXHRcdEVtYWlsdXNlckhpbnQ6ICdTZW5kIGFuIGVtYWlsIHRvICVzJyxcblx0XHRzcGFjZTogJ3NwYWNlJyxcblx0XHRQcmVmaXhJbmRleEhpbnQ6ICdTaG93IHBhZ2VzIGluIHRoZSB1c2Vyc3BhY2Ugb2YgJXMnLFxuXHRcdGNvdW50OiAnY291bnQnLFxuXHRcdCdlZGl0IGNvdW50ZXInOiAnZWRpdCBjb3VudGVyJyxcblx0XHRlZGl0Q291bnRlckxpbmtIaW50OiAnQ291bnQgdGhlIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSAlcycsXG5cdFx0Y29udHJpYnM6ICdjb250cmlicycsXG5cdFx0Y29udHJpYnV0aW9uczogJ2NvbnRyaWJ1dGlvbnMnLFxuXHRcdGRlbGV0ZWRDb250cmliczogJ2RlbGV0ZWQgY29udHJpYnV0aW9ucycsXG5cdFx0RGVsZXRlZGNvbnRyaWJ1dGlvbnNIaW50OiAnTGlzdCBkZWxldGVkIGVkaXRzIG1hZGUgYnkgJXMnLFxuXHRcdENvbnRyaWJ1dGlvbnNIaW50OiAnTGlzdCB0aGUgY29udHJpYnV0aW9ucyBtYWRlIGJ5ICVzJyxcblx0XHRsb2c6ICdsb2cnLFxuXHRcdCd1c2VyIGxvZyc6ICd1c2VyIGxvZycsXG5cdFx0dXNlckxvZ0hpbnQ6IFwiU2hvdyAlcydzIHVzZXIgbG9nXCIsXG5cdFx0YXJpbjogJ0FSSU4gbG9va3VwJyxcblx0XHQnTG9vayB1cCAlcyBpbiBBUklOIHdob2lzIGRhdGFiYXNlJzogJ0xvb2sgdXAgJXMgaW4gdGhlIEFSSU4gd2hvaXMgZGF0YWJhc2UnLFxuXHRcdHVuYmxvY2tTaG9ydDogJ3VuJyxcblx0XHRibG9jazogJ2Jsb2NrJyxcblx0XHQnYmxvY2sgdXNlcic6ICdibG9jayB1c2VyJyxcblx0XHRJcGJsb2NrbGlzdEhpbnQ6ICdVbmJsb2NrICVzJyxcblx0XHRCbG9ja2lwSGludDogJ1ByZXZlbnQgJXMgZnJvbSBlZGl0aW5nJyxcblx0XHQnYmxvY2sgbG9nJzogJ2Jsb2NrIGxvZycsXG5cdFx0YmxvY2tMb2dIaW50OiAnU2hvdyB0aGUgYmxvY2sgbG9nIGZvciAlcycsXG5cdFx0cHJvdGVjdExvZ0hpbnQ6ICdTaG93IHRoZSBwcm90ZWN0aW9uIGxvZyBmb3IgJXMnLFxuXHRcdHBhZ2VMb2dIaW50OiAnU2hvdyB0aGUgcGFnZSBsb2cgZm9yICVzJyxcblx0XHRkZWxldGVMb2dIaW50OiAnU2hvdyB0aGUgZGVsZXRpb24gbG9nIGZvciAlcycsXG5cdFx0J0ludmFsaWQgJXMgJXMnOiAnVGhlIG9wdGlvbiAlcyBpcyBpbnZhbGlkOiAlcycsXG5cdFx0J05vIGJhY2tsaW5rcyBmb3VuZCc6ICdObyBiYWNrbGlua3MgZm91bmQnLFxuXHRcdCcgYW5kIG1vcmUnOiAnIGFuZCBtb3JlJyxcblx0XHR1bmRvOiAndW5kbycsXG5cdFx0dW5kb0hpbnQ6ICd1bmRvIHRoaXMgZWRpdCcsXG5cdFx0J0Rvd25sb2FkIHByZXZpZXcgZGF0YSc6ICdEb3dubG9hZCBwcmV2aWV3IGRhdGEnLFxuXHRcdCdJbnZhbGlkIG9yIElQIHVzZXInOiAnSW52YWxpZCBvciBJUCB1c2VyJyxcblx0XHQnTm90IGEgcmVnaXN0ZXJlZCB1c2VybmFtZSc6ICdOb3QgYSByZWdpc3RlcmVkIHVzZXJuYW1lJyxcblx0XHRCTE9DS0VEOiAnQkxPQ0tFRCcsXG5cdFx0J0hhcyBibG9ja3MnOiAnSGFzIGJsb2NrcycsXG5cdFx0JyBlZGl0cyBzaW5jZTogJzogJyBlZGl0cyBzaW5jZTogJyxcblx0XHQnbGFzdCBlZGl0IG9uICc6ICdsYXN0IGVkaXQgb24gJyxcblx0XHQnaGUvaGltJzogJ2hlL2hpbScsXG5cdFx0J3NoZS9oZXInOiAnc2hlL2hlcicsXG5cdFx0Ly8gQXV0b2VkaXRpbmdcblx0XHQnRW50ZXIgYSBub24tZW1wdHkgZWRpdCBzdW1tYXJ5IG9yIHByZXNzIGNhbmNlbCB0byBhYm9ydCc6XG5cdFx0XHQnRW50ZXIgYSBub24tZW1wdHkgZWRpdCBzdW1tYXJ5IG9yIHByZXNzIGNhbmNlbCB0byBhYm9ydCcsXG5cdFx0J0ZhaWxlZCB0byBnZXQgcmV2aXNpb24gaW5mb3JtYXRpb24sIHBsZWFzZSBlZGl0IG1hbnVhbGx5Llxcblxcbic6XG5cdFx0XHQnRmFpbGVkIHRvIGdldCByZXZpc2lvbiBpbmZvcm1hdGlvbiwgcGxlYXNlIGVkaXQgbWFudWFsbHkuXFxuXFxuJyxcblx0XHQnVGhlICVzIGJ1dHRvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGNsaWNrZWQuIFBsZWFzZSB3YWl0IGZvciB0aGUgbmV4dCBwYWdlIHRvIGxvYWQuJzpcblx0XHRcdCdUaGUgJXMgYnV0dG9uIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgY2xpY2tlZC4gUGxlYXNlIHdhaXQgZm9yIHRoZSBuZXh0IHBhZ2UgdG8gbG9hZC4nLFxuXHRcdCdDb3VsZCBub3QgZmluZCBidXR0b24gJXMuIFBsZWFzZSBjaGVjayB0aGUgc2V0dGluZ3MgaW4geW91ciBqYXZhc2NyaXB0IGZpbGUuJzpcblx0XHRcdCdDb3VsZCBub3QgZmluZCBidXR0b24gJXMuIFBsZWFzZSBjaGVjayB0aGUgc2V0dGluZ3MgaW4geW91ciBqYXZhc2NyaXB0IGZpbGUuJyxcblx0XHQvLyBQb3B1cHMgc2V0dXBcblx0XHQnT3BlbiBmdWxsLXNpemUgaW1hZ2UnOiAnT3BlbiBmdWxsLXNpemUgaW1hZ2UnLFxuXHRcdGF1dG9lZGl0X3ZlcnNpb246ICducDIwMTQwNDE2Jyxcblx0fTtcblx0Y29uc3QgcG9wdXBTdHJpbmcgPSAoc3RyKSA9PiB7XG5cdFx0aWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiBtZXNzYWdlICYmIG1lc3NhZ2Vbc3RyXSkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2Vbc3RyXTtcblx0XHR9XG5cdFx0aWYgKHBnLnN0cmluZ1tzdHJdKSB7XG5cdFx0XHRyZXR1cm4gcGcuc3RyaW5nW3N0cl07XG5cdFx0fVxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cdGNvbnN0IHRwcmludGYgPSAoc3RyLCBzdWJzKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBzdWJzICE9PSB0eXBlb2YgW10pIHtcblx0XHRcdHN1YnMgPSBbc3Vic107XG5cdFx0fVxuXHRcdHJldHVybiBzaW1wbGVQcmludGYocG9wdXBTdHJpbmcoc3RyKSwgc3Vicyk7XG5cdH07XG5cdC8vIEVOREZJTEU6IHN0cmluZ3MuanNcblx0Ly8gU1RBUlRGSUxFOiBydW4uanNcblx0Ly8gUnVuIHRoaW5nc1xuXHQvLyBGb3Igc29tZSByZWFzb24gcG9wdXBzIHJlcXVpcmVzIGEgZnVsbHkgbG9hZGVkIHBhZ2UgalF1ZXJ5LnJlYWR5KC4uLikgY2F1c2VzIHByb2JsZW1zIGZvciBzb21lLlxuXHQvLyBUaGUgb2xkIGFkZE9ubG9hZEhvb2sgZGlkIHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSBiZWxvd1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuXHRcdGF1dG9FZGl0KCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gd2lsbCBzZXR1cCBwb3B1cHNcblx0XHQkKHdpbmRvdykub24oJ2xvYWQnLCBhdXRvRWRpdCk7XG5cdH1cblx0Ly8gU3VwcG9ydCBmb3IgTWVkaWFXaWtpJ3MgbGl2ZSBwcmV2aWV3LCBWaXN1YWxFZGl0b3IncyBzYXZlcyBhbmQgRWNobydzIGZseW91dC5cblx0KCgpID0+IHtcblx0XHRsZXQgb25jZSA9IHRydWU7XG5cdFx0Y29uc3QgZHluYW1pY0NvbnRlbnRIYW5kbGVyID0gKCRjb250ZW50KSA9PiB7XG5cdFx0XHQvLyBUcnkgdG8gZGV0ZWN0IHRoZSBob29rIGZpcmVkIG9uIGluaXRpYWwgcGFnZSBsb2FkIGFuZCBkaXNyZWdhcmRcblx0XHRcdC8vIGl0LCB3ZSBhbHJlYWR5IGhvb2sgdG8gb25sb2FkIChwb3NzaWJseSB0byBkaWZmZXJlbnQgcGFydHMgb2Zcblx0XHRcdC8vIHBhZ2UgLSBpdCdzIGNvbmZpZ3VyYWJsZSkgYW5kIHJ1bm5pbmcgdHdpY2UgbWlnaHQgYmUgYmFkLiBVZ2x5Li4uXG5cdFx0XHRpZiAoJGNvbnRlbnQuYXR0cignaWQnKSA9PT0gJ213LWNvbnRlbnQtdGV4dCcgJiYgb25jZSkge1xuXHRcdFx0XHRvbmNlID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJlZ2lzdGVySG9va3NGb3JWaXNpYmxlTmF2cG9wcyA9ICgpID0+IHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IHBnLmN1cnJlbnQubGlua3MgJiYgaSA8IHBnLmN1cnJlbnQubGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBuYXZwb3AgPSBwZy5jdXJyZW50LmxpbmtzW2ldLm5hdnBvcHVwO1xuXHRcdFx0XHRcdGlmICghbmF2cG9wIHx8ICFuYXZwb3AuaXNWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHROYXZwb3B1cC50cmFja2VyLmFkZEhvb2socG9zQ2hlY2tlckhvb2sobmF2cG9wKSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBkb0l0ID0gKCkgPT4ge1xuXHRcdFx0XHRyZWdpc3Rlckhvb2tzRm9yVmlzaWJsZU5hdnBvcHMoKTtcblx0XHRcdFx0JGNvbnRlbnQuZWFjaCgoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yYW5TZXR1cFRvb2x0aXBzQWxyZWFkeSA9IGZhbHNlO1xuXHRcdFx0XHRcdHNldHVwVG9vbHRpcHMoZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHRcdHNldHVwUG9wdXBzKGRvSXQpO1xuXHRcdH07XG5cdFx0Ly8gVGhpcyBob29rIGlzIGFsc28gZmlyZWQgYWZ0ZXIgcGFnZSBsb2FkLlxuXHRcdG13Lmhvb2soJ3dpa2lwYWdlLmNvbnRlbnQnKS5hZGQoZHluYW1pY0NvbnRlbnRIYW5kbGVyKTtcblx0XHRtdy5ob29rKCdleHQuZWNoby5vdmVybGF5LmJlZm9yZVNob3dpbmdPdmVybGF5JykuYWRkKCgkb3ZlcmxheSkgPT4ge1xuXHRcdFx0ZHluYW1pY0NvbnRlbnRIYW5kbGVyKCRvdmVybGF5LmZpbmQoJy5tdy1lY2hvLXN0YXRlJykpO1xuXHRcdH0pO1xuXHR9KSgpO1xuXHQvLyBFTkRGSUxFOiBydW4uanNcbn07XG5cbmV4cG9ydCB7cG9wdXBzfTtcbiIsICJpbXBvcnQgJy4vTmF2aWdhdGlvbl9wb3B1cHMubGVzcyc7XG5pbXBvcnQge3BvcHVwc30gZnJvbSAnLi9tb2R1bGVzL2NvcmUnO1xuXG4kKHBvcHVwcyk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw2RkFBQUEsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1B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QUFFK1IsSUFBS0MsY0FBYTtBQUNsRVAsNEJBQXNCTyxTQUFTN3VCLEtBQUssZ0JBQWdCLENBQUM7SUFDdEQsQ0FBQztFQUNGLEdBQUc7QUFFSjs7QUNoK1BBRCxFQUFFdnFCLE1BQU07IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm5hdmlnYXRvciIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJSZWdFeHAiLCAia2V5IiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgInJlcXVpcmUiLCAiYXBpIiwgImluaXRNd0FwaSIsICJtZXNzYWdlIiwgImFydGljbGUiLCAid2luZG93IiwgIndnVUxTIiwgImNhdGVnb3J5IiwgImNhdGVnb3JpZXMiLCAiaW1hZ2UiLCAiaW1hZ2VzIiwgInN0dWIiLCAia0IiLCAiYnl0ZXMiLCAiZGF5IiwgImRheXMiLCAiaG91ciIsICJob3VycyIsICJtaW51dGUiLCAibWludXRlcyIsICJzZWNvbmQiLCAic2Vjb25kcyIsICJ3ZWVrIiwgIndlZWtzIiwgIm1vbnRoIiwgIm1vbnRocyIsICJ5ZWFyIiwgInllYXJzIiwgInNlYXJjaCIsICJTZWFyY2hIaW50IiwgIndlYiIsICJnbG9iYWwiLCAiYWN0aW9ucyIsICJwb3B1cHNNZW51IiwgInRvZ2dsZVByZXZpZXdzSGludCIsICJyZXNldCIsICJkaXNhYmxlIiwgImRpc2FibGVQb3B1cHNIaW50IiwgInB1cmdlUG9wdXBzSGludCIsICJQb3B1cHNIaW50IiwgInNwYWNlYmFyIiwgInZpZXciLCAidmlld0hpbnQiLCAidGFsayIsICJkZWwiLCAiZGVsZXRlIiwgImRlbGV0ZUhpbnQiLCAidW5kZWxldGVTaG9ydCIsICJVbmRlbGV0ZUhpbnQiLCAicHJvdGVjdCIsICJwcm90ZWN0SGludCIsICJ1bnByb3RlY3RTaG9ydCIsICJ1bnByb3RlY3RIaW50IiwgIm1vdmUiLCAiTW92ZXBhZ2VIaW50IiwgImVkaXQiLCAiZWRpdEhpbnQiLCAibmV3IiwgIm5ld1NlY3Rpb25IaW50IiwgIm51bGxFZGl0SGludCIsICJoaXN0IiwgImhpc3RvcnkiLCAiaGlzdG9yeUhpbnQiLCAibGFzdCIsICJsYXN0RWRpdCIsICJsYXN0Q29udHJpYiIsICJsYXN0Q29udHJpYkhpbnQiLCAiY3VyIiwgImRpZmZDdXIiLCAib2xkRWRpdCIsICJwdXJnZSIsICJwdXJnZUhpbnQiLCAicmF3IiwgInJhd0hpbnQiLCAicmVuZGVyIiwgInJlbmRlckhpbnQiLCAic2luY2VNZSIsICJzaW5jZU1lSGludCIsICJlZHMiLCAiZWRpdG9ycyIsICJlZGl0b3JMaXN0SGludCIsICJyZWxhdGVkIiwgInJlbGF0ZWRDaGFuZ2VzIiwgIlJlY2VudGNoYW5nZXNsaW5rZWRIaW50IiwgImVkaXRPbGQiLCAicnYiLCAicmV2ZXJ0IiwgInJldmVydEhpbnQiLCAidW5kbyIsICJ1bmRvSGludCIsICJkZWZhdWx0cG9wdXBSZWRsaW5rU3VtbWFyeSIsICJkZWZhdWx0cG9wdXBGaXhEYWJzU3VtbWFyeSIsICJkZWZhdWx0cG9wdXBGaXhSZWRpcnNTdW1tYXJ5IiwgImRlZmF1bHRwb3B1cEV4dGVuZGVkUmV2ZXJ0U3VtbWFyeSIsICJkZWZhdWx0cG9wdXBSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeSIsICJkZWZhdWx0cG9wdXBSZXZlcnRTdW1tYXJ5IiwgImRlZmF1bHRwb3B1cFF1ZXJpZWRSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeSIsICJkZWZhdWx0cG9wdXBRdWVyaWVkUmV2ZXJ0U3VtbWFyeSIsICJkZWZhdWx0cG9wdXBSbURhYkxpbmtTdW1tYXJ5IiwgIlJlZGlyZWN0cyIsICJkaXNhbWJpZyIsICJkaXNhbWJpZ0hpbnQiLCAibWFpbmxpbmsiLCAid2lraUxpbmsiLCAid2lraUxpbmtzIiwgIndoYXRMaW5rc0hlcmUiLCAiV2hhdGxpbmtzaGVyZUhpbnQiLCAidW53YXRjaFNob3J0IiwgIndhdGNoVGhpbmd5IiwgIndhdGNoSGludCIsICJ1bndhdGNoSGludCIsICJyc3MiLCAidXNlciIsICJlbWFpbCIsICJFbWFpbHVzZXJIaW50IiwgInNwYWNlIiwgIlByZWZpeGluZGV4SGludCIsICJjb3VudCIsICJrYXRlbGlua0hpbnQiLCAiY29udHJpYnMiLCAiY29udHJpYnV0aW9ucyIsICJkZWxldGVkQ29udHJpYnMiLCAiQ29udHJpYnV0aW9uc0hpbnQiLCAidHJlZSIsICJjb250cmlic1RyZWVIaW50IiwgImxvZyIsICJ1c2VyTG9nSGludCIsICJ1bmJsb2NrU2hvcnQiLCAiYmxvY2siLCAiSXBibG9ja2xpc3RIaW50IiwgIkJsb2NraXBIaW50IiwgImJsb2NrTG9nSGludCIsICJwcm90ZWN0TG9nSGludCIsICJwYWdlTG9nSGludCIsICJkZWxldGVMb2dIaW50IiwgIm0iLCAiYmluZ1NlYXJjaEhpbnQiLCAiaGlzdG9yeWZlZWRIaW50IiwgIlRoYW5rc0hpbnQiLCAibWFya3BhdHJvbGxlZEhpbnQiLCAiZGVmYXVsdHBvcHVwUmV2aWV3ZWRTdW1tYXJ5IiwgInJldmRlbCIsICJEZWxldGVkY29udHJpYnV0aW9uc0hpbnQiLCAiQkxPQ0tFRCIsICJFbWFpbFVzZXJIaW50IiwgIlJBTkdFQkxPQ0tFRCIsICJISURERU4iLCAiTE9DS0VEIiwgImRpZmYiLCAiYXV0b2VkaXRfdmVyc2lvbiIsICJQcmVmaXhJbmRleEhpbnQiLCAibnVsbEVkaXRTdW1tYXJ5IiwgInNlcGFyYXRvciIsICJjb21tYSIsICJwb3B1cHMiLCAicGciLCAicmUiLCAibnMiLCAic3RyaW5nIiwgIndpa2kiLCAibWlzYyIsICJvcHRpb24iLCAib3B0aW9uRGVmYXVsdCIsICJmbGFnIiwgImNhY2hlIiwgInN0cnVjdHVyZXMiLCAidGltZXIiLCAiY291bnRlciIsICJjdXJyZW50IiwgImZuIiwgImVuZG9mbGlzdCIsICJIVE1MRWxlbWVudCIsICJzZXR1cFRvb2x0aXBzIiwgImNvbnRhaW5lciIsICJyZW1vdmUiLCAiZm9yY2UiLCAicG9wRGF0YSIsICJjb25jYXQiLCAiZ2V0VmFsdWVPZiIsICJkb2N1bWVudCIsICJlZGl0Zm9ybSIsICJ3cFRleHRib3gxIiwgIm9ubW91c2V1cCIsICJkb1NlbGVjdGlvblBvcHVwIiwgImRlZmF1bHRQb3B1cHNDb250YWluZXIiLCAicmFuU2V0dXBUb29sdGlwc0FscmVhZHkiLCAiYW5jaG9ycyIsICJxdWVyeVNlbGVjdG9yQWxsIiwgInNldHVwVG9vbHRpcHNMb29wIiwgInF1ZXJ5U2VsZWN0b3IiLCAic2V0dXBUb29sdGlwc0xvb3AyIiwgImJlZ2luIiwgImhvd21hbnkiLCAic2xlZXAiLCAiYXJncyIsICJzaW1wbGVQcmludGYiLCAiZmluaXNoIiwgImxvb3BlbmQiLCAiTWF0aCIsICJtaW4iLCAibGVuZ3RoIiwgImoiLCAiZG9Ub29sdGlwIiwgInJlbW92ZVRvb2x0aXAiLCAiYWRkVG9vbHRpcCIsICJhIiwgImhyZWYiLCAic2V0VGltZW91dCIsICJybVRvY1Rvb2x0aXBzIiwgImZpbmlzaGVkTG9hZGluZyIsICJ0b2MiLCAidG9jTGlua3MiLCAidG9jTGVuIiwgImlzUG9wdXBMaW5rIiwgIm9ubW91c2VvdmVyIiwgIm1vdXNlT3Zlcldpa2lMaW5rIiwgIm9ubW91c2VvdXQiLCAibW91c2VPdXRXaWtpTGluayIsICJvbm1vdXNlZG93biIsICJraWxsUG9wdXAiLCAiaGFzUG9wdXAiLCAib3JpZ2luYWxUaXRsZSIsICJ0aXRsZSIsICJyZW1vdmVUaXRsZSIsICJyZXN0b3JlVGl0bGUiLCAicmVnaXN0ZXJIb29rcyIsICJucCIsICJwb3B1cE1heFdpZHRoIiwgInNldE1heFdpZHRoIiwgIm1haW5EaXYiLCAic3R5bGUiLCAibWF4V2lkdGgiLCAiYWRkSG9vayIsICJhZGRQb3B1cFNob3J0Y3V0cyIsICJybVBvcHVwU2hvcnRjdXRzIiwgInJlbW92ZU1vZGlmaWVyS2V5TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJtb2RpZmllcktleUxpc3RlbmVyIiwgIm1vdXNlT3Zlcldpa2lMaW5rMyIsICJldnQiLCAiZXZlbnQiLCAiYWN0aW9uIiwgImtleSIsICJzZWxmIiwgImV2dDIiLCAibW91c2VPdmVyV2lraUxpbmsyIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAiZm9vdG5vdGVUYXJnZXQiLCAiYVRpdGxlIiwgIlRpdGxlIiwgImZyb21BbmNob3IiLCAiYW5jaCIsICJhbmNob3IiLCAidGVzdCIsICJsVGl0bGUiLCAiZnJvbVVSTCIsICJsb2NhdGlvbiIsICJ0b1N0cmluZyIsICJlbCIsICJub2RlTmFtZSIsICJudCIsICJ0b0xvd2VyQ2FzZSIsICJwYXJlbnROb2RlIiwgImZvb3Rub3RlUHJldmlldyIsICJ4IiwgIm5hdnBvcCIsICJzZXRQb3B1cEhUTUwiLCAiaW5uZXJIVE1MIiwgImlkTnVtYmVyIiwgIm1vZGlmaWVyUHJlc3NlZCIsICJtb2QiLCAiaXNDb3JyZWN0TW9kaWZpZXIiLCAiX2EiLCAibGluayIsICJuYXZwb3B1cCIsICJpc1Zpc2libGUiLCAicG9wdXBTdHJ1Y3R1cmUiLCAic2V0RGVmYXVsdCIsICJuZXdOYXZwb3B1cCIsICJsaW5rc0hhc2giLCAibGlua3MiLCAicHVzaCIsICJwZW5kaW5nIiwgInNpbXBsZVBvcHVwQ29udGVudCIsICJzaG93U29vbklmU3RhYmxlIiwgImRlbGF5IiwgImNsZWFySW50ZXJ2YWwiLCAiY2hlY2tQb3B1cFBvc2l0aW9uIiwgInNldEludGVydmFsIiwgInNpbXBsZU5vTW9yZSIsICJkIiwgImNyZWF0ZUVsZW1lbnQiLCAiY2xhc3NOYW1lIiwgInMiLCAiYXBwZW5kIiwgImRpc3BsYXkiLCAibm9uc2ltcGxlUG9wdXBDb250ZW50IiwgInBvcHVwU3RyaW5nIiwgImhhc1BvcHVwTWVudSIsICJzZXRJbm5lckhUTUwiLCAicG9wdXBIVE1MIiwgImZpbGxFbXB0eVNwYW5zIiwgImRyYWdIYW5kbGUiLCAibWFrZURyYWdnYWJsZSIsICJwb3B1cFJlZGxpbmtIVE1MIiwgImRlYnVnRGF0YSIsICJOYXZwb3B1cCIsICJmdXp6IiwgInBhcmVudEFuY2hvciIsICJwYXJlbnRQb3B1cCIsICJvd25lciIsICJzaG91bGRTaG93Tm9uU2ltcGxlIiwgInNob3VsZFNob3ciLCAiZGlmZjIiLCAicGFyYW1zIiwgInBhcnNlUGFyYW1zIiwgIm9sZGlkIiwgInJlZmVyZW5jZUVsZW1lbnQiLCAibG9hZERpZmYiLCAibG9hZEFQSVByZXZpZXciLCAiYmFja2xpbmtzIiwgIm5hbWVzcGFjZUlkIiwgIm5zSW1hZ2VJZCIsICJhbmNob3JDb250YWluc0ltYWdlIiwgImxvYWRJbWFnZSIsICJuc0NhdGVnb3J5SWQiLCAibnNVc2VySWQiLCAibnNVc2VydGFsa0lkIiwgInN0YXJ0QXJ0aWNsZVByZXZpZXciLCAicGVuZGluZ05hdnBvcFRhc2siLCAiY29tcGxldGVkTmF2cG9wVGFzayIsICJyZWRpciIsICJsb2FkUHJldmlldyIsICJvcmlnaW5hbEFydGljbGUiLCAibG9hZFByZXZpZXdGcm9tUmVkaXIiLCAicmVkaXJNYXRjaCIsICJ0YXJnZXQiLCAiZnJvbVdpa2lUZXh0IiwgInJlZGlyVGFyZ2V0IiwgIndhcm5SZWRpciIsICJyZWRpckxpbmsiLCAiaW5zZXJ0UHJldmlldyIsICJkb3dubG9hZCIsICJyZWRpcmVjdCIsICJleGVjIiwgImRhdGEiLCAidmlzaWJsZSIsICJpbnNlcnRQcmV2aWV3Tm93IiwgImlkIiwgIndpa2lUZXh0IiwgImFydCIsICJtYWtlRml4RGFicyIsICJnZXRQYWdlSW5mbyIsICJzZXRQb3B1cFRyYWlsZXIiLCAiaW1hZ2VQYWdlIiwgImdldFZhbGlkSW1hZ2VGcm9tV2lraVRleHQiLCAiaW5zZXJ0QXJ0aWNsZVByZXZpZXciLCAibnNUZW1wbGF0ZUlkIiwgImgiLCAiZW50aWZ5IiwgInNwbGl0IiwgIlN0cmluZyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJqb2luIiwgIl90ZW1wbGF0ZU9iamVjdDIiLCAicCIsICJwcmVwUHJldmlld21ha2VyIiwgInNob3dQcmV2aWV3IiwgImFuY2hvcml6ZSIsICJhbmNob3JTdHJpbmciLCAidXJsQmFzZSIsICJqb2luUGF0aCIsICJhcnRpY2xlYmFzZSIsICJ1cmxTdHJpbmciLCAiUHJldmlld21ha2VyIiwgImFuY2hSZSIsICJSZWdFeHAiLCAibGl0ZXJhbGl6ZVJlZ2V4IiwgInJlcGxhY2UiLCAibWF0Y2giLCAic2xpY2UiLCAibWF4IiwgImluZGV4T2YiLCAibGluZXMiLCAiaSIsICJraWxsUG9wdXAyIiwgImJhbmlzaCIsICJhYm9ydEFsbERvd25sb2FkcyIsICJEcmFnIiwgImNvbnN0cnVjdG9yIiwgInN0YXJ0Q29uZGl0aW9uIiwgImVuZEhvb2siLCAiZml4RSIsICJlIiwgImxheWVyWCIsICJvZmZzZXRYIiwgImxheWVyWSIsICJvZmZzZXRZIiwgImluaXQiLCAibyIsICJvUm9vdCIsICJvYmoiLCAic3RhcnQiLCAiZHJhZ2dpbmciLCAicG9wdXBzX2RyYWdnYWJsZSIsICJobW9kZSIsICJ2bW9kZSIsICJyb290IiwgIk51bWJlciIsICJpc05hTiIsICJwYXJzZUludCIsICJsZWZ0IiwgInRvcCIsICJvbnRoaXNTdGFydCIsICJvbnRoaXNFbmQiLCAib250aGlzIiwgInkiLCAiYm90dG9tIiwgInJpZ2h0IiwgImxhc3RNb3VzZVgiLCAiY2xpZW50WCIsICJsYXN0TW91c2VZIiwgImNsaWVudFkiLCAib25tb3VzZW1vdmVEZWZhdWx0IiwgIm9ubW91c2Vtb3ZlIiwgImUyIiwgImRyYWciLCAiZW5kIiwgImV5IiwgImV4IiwgIm54IiwgIm55IiwgIm9yaWdpbmFsIiwgInBvcHVwTGF5b3V0IiwgInBvcHVwUmVkaXJTcGFucyIsICJwb3B1cFRpdGxlIiwgIm5hdmxpbmtTdHJpbmdUb0hUTUwiLCAicG9wdXBUb3BMaW5rcyIsICJuYXZMaW5rc0hUTUwiLCAiaGludCIsICJwb3B1cEltYWdlIiwgImltYWdlSFRNTCIsICJwb3B1cFJlZGlyVGl0bGUiLCAicG9wdXBSZWRpclRvcExpbmtzIiwgImNvcHlTdHJ1Y3R1cmUiLCAib2xkU3RydWN0dXJlIiwgIm5ld1N0cnVjdHVyZSIsICJwcm9wIiwgIk9iamVjdCIsICJoYXNPd24iLCAibm9zdGFsZ2lhIiwgInN0ciIsICJlZGl0c3RyIiwgImVkaXRPbGRpZFN0ciIsICJoaXN0b3J5c3RyIiwgIndhdGNoc3RyIiwgImZhbmN5IiwgIndhdGNoIiwgInBvcHVwT3RoZXJMaW5rcyIsICJhZG1pbiIsICJub3JtYWwiLCAicG9wdXBSZWRpck90aGVyTGlua3MiLCAiZmFuY3kyIiwgIm1lbnVzIiwgInNob3J0ZXIiLCAiZHJvcGRpdiIsICJlbmRkaXYiLCAibGFzdGVkaXQiLCAidGhhbmsiLCAianNIaXN0b3J5IiwgImxpbmtzaGVyZSIsICJudWxsUHVyZ2UiLCAidmlld09wdGlvbnMiLCAiZWRpdFJvdyIsICJtYXJrUGF0cm9sbGVkIiwgIm5ld1RvcGljIiwgInByb3RlY3REZWxldGUiLCAibWVudVRpdGxlIiwgInNob3J0bWVudXMiLCAibGl0ZSIsICJzdWJzdGl0dXRlIiwgImNtZEJvZHkiLCAiZnJvbVJlIiwgImZyb20iLCAiZmxhZ3MiLCAidG8iLCAiZXhlY0NtZHMiLCAiY21kTGlzdCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAiLCAibiIsICJkb25lIiwgImVsZW1lbnQiLCAidmFsdWUiLCAiZXJyIiwgImYiLCAicGFyc2VDbWQiLCAicGFyc2VDbWQyIiwgImNoYXJBdCIsICJwYXJzZVN1YnN0aXR1dGUiLCAicmVtYWluZGVyIiwgInVuRXNjYXBlIiwgInNlcCIsICJfdGVtcGxhdGVPYmplY3QzIiwgInRtcCIsICJza2lwT3ZlciIsICJzZWdtZW50IiwgInNraXBUb0VuZCIsICJlbmRTZWdtZW50IiwgImZpbmROZXh0IiwgIl9zZXAiLCAiY2giLCAic2V0Q2hlY2tib3giLCAicGFyYW0iLCAiYm94IiwgInZhbCIsICJtdyIsICJ1dGlsIiwgImdldFBhcmFtVmFsdWUiLCAiY2hlY2tlZCIsICJhdXRvRWRpdCIsICJhdXRvRWRpdDQiLCAic2V0dXBQb3B1cHMiLCAiYXV0b0NsaWNrVG9rZW4iLCAibW9kaWZ5V2F0Y2hsaXN0IiwgImFscmVhZHlSYW4iLCAiY21kU3RyaW5nIiwgImVkaXRib3giLCAiaW5wdXQiLCAib3V0cHV0IiwgIndwTWlub3JlZGl0IiwgIndwV2F0Y2h0aGlzIiwgInJ2aWQiLCAidXJsIiwgImFwaXdpa2liYXNlIiwgInN0YXJ0RG93bmxvYWQiLCAiYXV0b0VkaXQyIiwgInN1bW1hcnkiLCAic3VtbWFyeXByb21wdCIsICJzdW1tYXJ5bm90aWNlIiwgImdldFJ2U3VtbWFyeSIsICJ0eHQiLCAicmVzcG9uc2UiLCAicHJvbXB0IiwgIndwU3VtbWFyeSIsICJhdXRvRWRpdDMiLCAic2Vzc2lvbklkIiwgImJ0biIsICJidXR0b24iLCAibXNnIiwgInRwcmludGYiLCAiYmFubmVyTWVzc2FnZSIsICJjbGljayIsICJub3RpZnkiLCAidGFnIiwgInR5cGUiLCAiaGVhZGluZ3MiLCAiZGl2IiwgImVzY2FwZVF1b3Rlc0hUTUwiLCAiaW5zZXJ0QmVmb3JlIiwgInRlbXBsYXRlIiwgImpzb24iLCAiZ2V0SnNPYmoiLCAiYW55Q2hpbGQiLCAicXVlcnkiLCAicGFnZXMiLCAicmV2aXNpb25zIiwgInRpbWVzdGFtcCIsICJyZXZpZCIsICJ1c2VyaGlkZGVuIiwgIkRvd25sb2FkZXIiLCAiWE1MSHR0cFJlcXVlc3QiLCAiaHR0cCIsICJsYXN0TW9kaWZpZWQiLCAiY2FsbGJhY2tGdW5jdGlvbiIsICJvbkZhaWx1cmUiLCAiYWJvcnRlZCIsICJtZXRob2QiLCAiYXN5bmMiLCAic2VuZCIsICJhYm9ydCIsICJnZXREYXRhIiwgInJlc3BvbnNlVGV4dCIsICJzZXRUYXJnZXQiLCAib3BlbiIsICJzZXRSZXF1ZXN0SGVhZGVyIiwgInVzZXJBZ2VudCIsICJnZXRSZWFkeVN0YXRlIiwgInJlYWR5U3RhdGUiLCAiZG93bmxvYWRzSW5Qcm9ncmVzcyIsICJnZXRMYXN0TW9kaWZpZWREYXRlIiwgImxhc3Rtb2QiLCAiZ2V0UmVzcG9uc2VIZWFkZXIiLCAiRGF0ZSIsICJzZXRDYWxsYmFjayIsICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCAiZ2V0U3RhdHVzIiwgInN0YXR1cyIsICJuZXdEb3dubG9hZCIsICJuZXdEb3dubG9hZDIiLCAiY2FsbGJhY2siLCAib25mYWlsdXJlIiwgImZha2VEb3dubG9hZCIsICJJbnN0YSIsICJzZXR1cExpdmVQcmV2aWV3IiwgIl9iIiwgImNvbmYiLCAiYmFzZVVybCIsICJsYW5nIiwgImludGVyd2lraSIsICJkZWZhdWx0X3RodW1iX3dpZHRoIiwgInBhdGhzIiwgImFydGljbGVzIiwgImFydGljbGVQYXRoIiwgIm1hdGgiLCAiaW1hZ2VzX2ZhbGxiYWNrIiwgImxvY2FsZSIsICJjb25maWciLCAiZ2V0IiwgIm5hbWUiLCAic2lnbmF0dXJlIiwgIkJMT0NLX0lNQUdFIiwgImR1bXAiLCAiY29udmVydCIsICJsbCIsICJyIiwgInJlbWFpbiIsICJzaCIsICJzaGlmdCIsICJwcyIsICJmMiIsICJmMyIsICJvMiIsICJjIiwgInAyIiwgImh0bWxfZW50aXRpZXMiLCAiaHRtbGVzY2FwZV90ZXh0IiwgImh0bWxlc2NhcGVfYXR0ciIsICJzdHJfaW1hdGNoIiwgImIiLCAibCIsICJjb21wYXJlTGluZVN0cmluZ09yUmVnIiwgImNvbXBhcmVMaW5lU3RyaW5nIiwgImNoYXJBdFBvaW50IiwgImVuZGwiLCAicGFyc2VfbGlzdCIsICJwcmV2IiwgImxfbWF0Y2giLCAiaXBvcyIsICJwcmV2UG9zIiwgInBpIiwgIm1hdGNoUG9zIiwgImxpIiwgImF0IiwgInBhcnNlX2lubGluZV9ub3dpa2kiLCAiZHRfbWF0Y2giLCAidW5zaGlmdCIsICJwYXJzZV90YWJsZSIsICJwYXJzZV90YWJsZV9kYXRhIiwgInRkX2xpbmUiLCAibWF0Y2hfaSIsICJ0ZF9tYXRjaCIsICJwb3AiLCAidGMiLCAidGQiLCAicGFyc2VfcHJlIiwgInBhcnNlX2Jsb2NrX2ltYWdlIiwgInBhcnNlX2ltYWdlIiwgInN1YnN0cmluZyIsICJ3aWR0aCIsICJhdHRyIiwgImZpbGVuYW1lIiwgImNhcHRpb24iLCAidGh1bWIiLCAiZnJhbWUiLCAiY2VudGVyIiwgImFsaWduIiwgIm5lc3RpbmciLCAibGFzdF9hdHRyIiwgIndfbWF0Y2giLCAibGFzdGVuZCIsICJzdWJzdGFydCIsICJuZXN0bGV2IiwgImNsb3NlIiwgInN1Ymxvb3AiLCAiaHRtbCIsICJwYXJzZV9pbmxpbmVfd2lraSIsICJwYXJzZV9pbmxpbmVfaW1hZ2VzIiwgImxvb3AiLCAid2lraTIiLCAicGFyc2VfaW5saW5lX2Zvcm1hdHRpbmciLCAiZW0iLCAic3QiLCAiZGF0ZSIsICJnZXRVVENNaW51dGVzIiwgImdldFVUQ0hvdXJzIiwgImdldFVUQ0RhdGUiLCAiZ2V0VVRDTW9udGgiLCAiZ2V0VVRDRnVsbFllYXIiLCAiXyQwIiwgIiQxIiwgIiQyIiwgIiQzIiwgIiQ0IiwgIndpa2kyaHRtbCIsICJiYXNldXJsIiwgInBvcHVwRmlsdGVyUGFnZVNpemUiLCAiZm9ybWF0Qnl0ZXMiLCAicG9wdXBGaWx0ZXJDb3VudExpbmtzIiwgIm51bSIsICJjb3VudExpbmtzIiwgInBvcHVwRmlsdGVyQ291bnRJbWFnZXMiLCAiY291bnRJbWFnZXMiLCAicG9wdXBGaWx0ZXJDb3VudENhdGVnb3JpZXMiLCAiY291bnRDYXRlZ29yaWVzIiwgInBvcHVwRmlsdGVyTGFzdE1vZGlmaWVkIiwgIl9kYXRhIiwgIm5vdyIsICJhZ2UiLCAiZm9ybWF0QWdlIiwgImFhIiwgInNlY2xlbiIsICJtaW5sZW4iLCAiaG91cmxlbiIsICJkYXlsZW4iLCAid2Vla2xlbiIsICJudW13ZWVrcyIsICJzd2Vla3MiLCAiYWRkdW5pdCIsICJudW1kYXlzIiwgInNkYXlzIiwgIm51bWhvdXJzIiwgInNob3VycyIsICJudW1taW5zIiwgInNtaW5zIiwgIm51bXNlY3MiLCAic3NlY3MiLCAicnVuUG9wdXBGaWx0ZXJzIiwgImxpc3QiLCAicmV0IiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgInBvcHVwRmlsdGVycyIsICJleHRyYVBvcHVwRmlsdGVycyIsICJwYWdlSW5mb0FycmF5IiwgInBhZ2VJbmZvIiwgInVwY2FzZUZpcnN0IiwgImltYWdlQnJhY2tldENvdW50IiwgImNhdGVnb3J5QnJhY2tldENvdW50IiwgInBvcHVwRmlsdGVyU3R1YkRldGVjdCIsICJfZG93bmxvYWQiLCAiY291bnRzIiwgInN0dWJDb3VudCIsICJyZWFsIiwgInNlY3QiLCAicG9wdXBGaWx0ZXJEaXNhbWJpZ0RldGVjdCIsICJuYW1lc3BhY2UiLCAiaXNEaXNhbWJpZyIsICJyb3VuZCIsICJTdHJpbmd3cmFwcGVyIiwgIlN0cmluZ3dyYXBwZXIyIiwgInNldFV0ZiIsICJvbWl0QW5jaG9yIiwgImxlbiIsICJkZWNvZGVVUklDb21wb25lbnQiLCAidXJsQW5jaG9yIiwgImFuY2hvckZyb21VdGYiLCAiZW5jb2RlVVJJQ29tcG9uZW50IiwgInNwbGl0dGVkIiwgInUiLCAiZGVjb2RlTmFzdGllcyIsICJzdHJpcE5hbWVzcGFjZSIsICJzcGVjaWFsZGlmZiIsICJuc1NwZWNpYWxJZCIsICJtYWluIiwgImZyb21Cb3RJbnRlcmZhY2UiLCAiZXh0cmFjdGVkIiwgImlzU2FmYXJpIiwgInVuZXNjYXBlIiwgImRlY29kZVVSSSIsICJkZWNvZGVFc2NhcGVzIiwgIm15RGVjb2RlVVJJIiwgImhpbnRWYWx1ZSIsICJzYWZlRGVjb2RlVVJJIiwgInRvVXNlck5hbWUiLCAid2l0aE5zIiwgInVzZXJOYW1lIiwgInQiLCAidG9UYWxrUGFnZSIsICJsb2NhbGl6ZWROYW1lc3BhY2UiLCAidGFsa1BhZ2UiLCAiaXNUYWxrUGFnZSIsICJ0b0FydGljbGVGcm9tVGFsa1BhZ2UiLCAiYXJ0aWNsZUZyb21UYWxrUGFnZSIsICJhcnRpY2xlRnJvbVRhbGtPckFydGljbGUiLCAiaXNJcFVzZXIiLCAiaXBVc2VyIiwgIm5zTWFpbnNwYWNlSWQiLCAic2V0VXJsIiwgInVybGZyYWciLCAidiIsICJrZWVwU3BhY2VzIiwgImVuY29kZVVSSSIsICJyZW1vdmVBbmNob3IiLCAidG9VcmwiLCAidGl0bGViYXNlIiwgInNwZWNpYWxEaWZmIiwgImluY2x1ZGVzIiwgIl9pdGVyYXRvcjMiLCAiX3N0ZXAzIiwgInoiLCAiaGVscGVyIiwgImRlY29kZUV4dHJhcyIsICJzZWN0U3R1YiIsICJyZWFsU3R1YiIsICJpc1ZhbGlkSW1hZ2VOYW1lIiwgImlzSW5TdHJpcHBhYmxlTmFtZXNwYWNlIiwgImlzSW5NYWluTmFtZXNwYWNlIiwgImtpZHMiLCAiY2hpbGROb2RlcyIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJraWQiLCAibWFya05vcG9wdXBTcGFuTGlua3MiLCAiaW5Ob3BvcHVwU3BhbiIsICJnZXRBdHRyaWJ1dGUiLCAiYmFzZW5hbWVzIiwgInVybE5vUG9wdXAiLCAibWFya05vcG9wdXBTcGFuTGlua3MyIiwgImZpeFZlY3Rvck1lbnVQb3B1cHMiLCAiJGJvZHkiLCAiJCIsICJmaW5kIiwgInRvQXJyYXkiLCAiX2l0ZXJhdG9yNSIsICJfc3RlcDUiLCAiYXMiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYiLCAiZ2V0UGFnZVdpdGhDYWNoaW5nIiwgIm9uQ29tcGxldGUiLCAiZmluZEluUGFnZUNhY2hlIiwgImdldFBhZ2UiLCAiYWRkRG93bmxvYWQiLCAiYWRkUGFnZVRvQ2FjaGUiLCAicGFnZSIsICJqc29uX3JldCIsICJKU09OIiwgInBhcnNlIiwgIndhcm5pbmdzIiwgInciLCAiZXJyb3IiLCAiZXJybG9nIiwgImNvZGUiLCAiaW5mbyIsICJ0b1VwcGVyQ2FzZSIsICJmaW5kSW5BcnJheSIsICJhcnIiLCAiZm9vIiwgIm5leHRPbmUiLCAiYXJyYXkiLCAiZXNjYXBlUmVnRXhwIiwgInByb3RvdHlwZSIsICJyZW1vdmVOdWxscyIsICJmaWx0ZXIiLCAic3VicyIsICJjbWQiLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiaXNSZWdFeHAiLCAiaXNBcnJheSIsICJBcnJheSIsICJpc09iamVjdCIsICJpc0Z1bmN0aW9uIiwgIkZ1bmN0aW9uIiwgInJlcGVhdFN0cmluZyIsICJtdWx0IiwgInplcm9GaWxsIiwgIm1hcCIsICJtYXBfYXJyYXkiLCAibWFwX29iamVjdCIsICJfaXRlcmF0b3I3IiwgIl9zdGVwNyIsICJ0ZXh0IiwgInVuZXNjYXBlUXVvdGVzSFRNTCIsICJyZXRhcmdldERhYiIsICJuZXdUYXJnZXQiLCAib2xkVGFyZ2V0IiwgImZyaWVuZGx5Q3VycmVudEFydGljbGVOYW1lIiwgInRpdGxlVG9FZGl0IiwgImNoYW5nZUxpbmtUYXJnZXRMaW5rIiwgImNsaWNrQnV0dG9uIiwgIm1pbm9yIiwgImxpc3RMaW5rcyIsICJ3aWtpdGV4dCIsICJyZWciLCAib21pdFJlZ2V4IiwgIndpa1BvcyIsICJybUR1cGVzRnJvbVNvcnRlZExpc3QiLCAic29ydCIsICJ3aWtUYXJnZXQiLCAibWV0aCIsICJfaXRlcmF0b3I4IiwgIl9zdGVwOCIsICJtYWtlRml4RGFiIiwgInNldFBvcHVwSFRNTDIiLCAiZWxlbWVudElkIiwgInBvcHVwSWQiLCAib25TdWNjZXNzIiwgInBvcHVwRWxlbWVudCIsICJyY2lkIiwgInN0cnVjdHVyZSIsICJzcGFucyIsICJmbGF0dGVuIiwgImxheW91dCIsICJudW1zcGFucyIsICJyZWRpcnMiLCAicmVkaXJTcGFucyIsICJmb3VuZCIsICJzdHJ1Y3R1cmVmbiIsICJzZXRmbiIsICJzZXRQb3B1cFRpcHNBbmRIVE1MIiwgImZsYXR0ZW4yIiwgInBvcHVwSFRNTDIiLCAibWFrZUVtcHR5U3BhbnMiLCAibWFrZUVtcHR5U3BhbnMyIiwgIl9pdGVyYXRvcjkiLCAiX3N0ZXA5IiwgImVtcHR5U3BhbkhUTUwiLCAibm9kZVR5cGUiLCAiZW1wdHlTcGFuSFRNTDIiLCAiY2xhc3NuYW1lIiwgImNsYXNzQWxpYXNlcyIsICJwb3B1cFNlY29uZFByZXZpZXciLCAiX2FydGljbGUiLCAicG9wVGlwc1Nvb25GbiIsICJ3aGVuIiwgInBvcFRpcHMiLCAiZGl2bmFtZSIsICJpZG51bWJlciIsICJmdXp6eUN1cnNvck9mZk1lbnVzIiwgIl94IiwgIl95IiwgIl9mdXp6IiwgInBhcmVudCIsICJ1bHMiLCAiX2l0ZXJhdG9yMTAiLCAiX3N0ZXAxMCIsICJ1bCIsICJvZmZzZXRXaWR0aCIsICJsaW1pdEhvcml6b250YWxQb3NpdGlvbiIsICJtb3VzZU91dFdpa2lMaW5rMiIsICJ0cmFja2VyIiwgInBvc0NoZWNrZXJIb29rIiwgImRpcnR5IiwgIm1vdXNlT3Zlck5hdnBvcCIsICJpc1dpdGhpbiIsICJtb3VzZUxlYXZpbmdUaW1lIiwgInJ1blN0b3BQb3B1cFRpbWVyIiwgInN0b3BQb3B1cFRpbWVyIiwgIm9yaWdpbmFsRGF0YSIsICJtYXhDaGFyYWN0ZXJzIiwgIm1heFNlbnRlbmNlcyIsICJzZXREYXRhIiwgIm1heFNpemUiLCAia2lsbENvbW1lbnRzIiwgImtpbGxEaXZzIiwgImtpbGxHYWxsZXJpZXMiLCAia2lsbCIsICJvcGVuaW5nIiwgImNsb3NpbmciLCAic3Vib3BlbmluZyIsICJzdWJjbG9zaW5nIiwgInJlcGwiLCAib2xkayIsICJrIiwgImtpbGxTdHVmZiIsICJvcCIsICJtYWtlUmVnZXhwIiwgImNsIiwgInNiIiwgInNjIiwgIm9wUmVzdWx0IiwgImluZGV4IiwgImRlcHRoIiwgInJlbW92YWwiLCAicHJlZml4IiwgInN1ZmZpeCIsICJyZVN0ciIsICJzcCIsICJraWxsQm94VGVtcGxhdGVzIiwgImtpbGxUZW1wbGF0ZXMiLCAia2lsbFRhYmxlcyIsICJraWxsSW1hZ2VzIiwgImZvcmJpZGRlbk5hbWVzcGFjZUFsaWFzZXMiLCAiX2kiLCAiX09iamVjdCRlbnRyaWVzIiwgImVudHJpZXMiLCAibG9jYWxpemVkTmFtZXNwYWNlTGMiLCAia2lsbEhUTUwiLCAia2lsbENodW5rcyIsICJpdGFsaWNDaHVua1JlZ2V4IiwgIm1vcHVwIiwgImZpcnN0Qml0IiwgInN0dWZmIiwgIm5vdFNlbnRlbmNlRW5kcyIsICJmaXhTZW50ZW5jZUVuZHMiLCAiZnVsbExlbmd0aCIsICJkZCIsICJmaXJzdFNlbnRlbmNlcyIsICJzdHJzIiwgImtpbGxCYWRXaGl0ZXNwYWNlIiwgIm1ha2VQcmV2aWV3IiwgImtpbGxNdWx0aWxpbmVUZW1wbGF0ZXMiLCAiZml4SFRNTCIsICJzdHJpcExvbmdUZW1wbGF0ZXMiLCAiZXNXaWtpMkh0bWxQYXJ0IiwgInJlTGlua3MiLCAibGFzdEluZGV4IiwgInJlc3VsdCIsICJwb3N0Zml4SW5kZXgiLCAiX21hdGNoJCIsICJlZGl0U3VtbWFyeVByZXZpZXciLCAicmVBZXMiLCAic2VjdGlvbiIsICJwb3N0Zml4IiwgInNlY3Rpb25MaW5rIiwgIm1vcmUiLCAibW9yZUxpbmsiLCAib25jbGljayIsICJxdWVyeVR5cGUiLCAiaHRtbEdlbmVyYXRvciIsICJ1c2VybmFtZWFydCIsICJBUEloaXN0b3J5UHJldmlld0hUTUwiLCAiQVBJY2F0ZWdvcnlQcmV2aWV3SFRNTCIsICJ1c2VybmFtZSIsICJBUEl1c2VySW5mb1ByZXZpZXdIVE1MIiwgIkFQSWNvbnRyaWJzUHJldmlld0hUTUwiLCAidHJhaWwiLCAiQVBJaW1hZ2VwYWdlUHJldmlld0hUTUwiLCAiQVBJYmFja2xpbmtzUHJldmlld0hUTUwiLCAiQVBJcmV2aXNpb25QcmV2aWV3SFRNTCIsICJmZXRjaFVzZXJHcm91cE5hbWVzIiwgInRoZW4iLCAic2hvd0FQSVByZXZpZXciLCAiZ28iLCAibGlua0xpc3QiLCAiYnVmIiwgIl9pdGVyYXRvcjExIiwgIl9zdGVwMTEiLCAiZ2V0VGltZU9mZnNldCIsICJ0eiIsICJvcHRpb25zIiwgImdldFRpbWVab25lIiwgInRpbWVab25lIiwgInR6Q29tcG9uZW50cyIsICJ1c2VUaW1lT2Zmc2V0IiwgIkludGwiLCAiRGF0ZVRpbWVGb3JtYXQiLCAiZm9ybWF0VG9QYXJ0cyIsICJnZXRMb2NhbGVzIiwgImxvY2FsZXMiLCAidXNlckxhbmd1YWdlIiwgImdldE1XRGF0ZUZvcm1hdCIsICJzdXBwb3J0ZWRMb2NhbGVzT2YiLCAibmF2aWdhdG9yIiwgImxhbmd1YWdlIiwgImVkaXRQcmV2aWV3VGFibGUiLCAicmVhbGx5Q29udHJpYnMiLCAiY3VyYXJ0IiwgIm1ha2VGaXJzdENvbHVtbkxpbmtzIiwgImN1cnJlbnRSZXZpc2lvbiIsICJmaXJzdFJldmlkIiwgIl9pdGVyYXRvcjEyIiwgIl9zdGVwMTIiLCAiZWRpdERhdGUiLCAidGhpc0RheSIsICJmb3JtYXR0ZWREYXRlIiwgInRoaXNUaW1lIiwgImZvcm1hdHRlZFRpbWUiLCAiY29sM3VybCIsICJjb2wzdHh0IiwgImNvbW1lbnQiLCAiY29udGVudCIsICJjb21tZW50aGlkZGVuIiwgImFkanVzdERhdGUiLCAib2Zmc2V0IiwgImNvbnZlcnRUaW1lWm9uZSIsICJ0b0xvY2FsZVN0cmluZyIsICJmb3JtYXR0ZWREYXRlVGltZSIsICJkMiIsICJnZXRGdWxsWWVhciIsICJnZXRNb250aCIsICJnZXREYXRlIiwgImdldEhvdXJzIiwgImdldE1pbnV0ZXMiLCAiZ2V0U2Vjb25kcyIsICJ0b0xvY2FsZURhdGVTdHJpbmciLCAiZ2V0VVRDU2Vjb25kcyIsICJ0b0xvY2FsZVRpbWVTdHJpbmciLCAidXNlcmluZm9SZXNwb25zZSIsICJxdWVyeU9iaiIsICJ1c2VycyIsICJtZXNzYWdlcyIsICJncm91cHMiLCAiX2l0ZXJhdG9yMTMiLCAiX3N0ZXAxMyIsICJncm91cE5hbWUiLCAiZ2xvYmFsdXNlcmluZm8iLCAiX2l0ZXJhdG9yMTQiLCAiX3N0ZXAxNCIsICJnZXRNd0FwaSIsICJsb2FkTWVzc2FnZXNJZk1pc3NpbmciLCAianNPYmoiLCAibWlzc2luZyIsICJjb250ZW50bW9kZWwiLCAiX2l0ZXJhdG9yMTUiLCAiX3N0ZXAxNSIsICJjb250aW51ZSIsICJibGNvbnRpbnVlIiwgIkFQSXNoYXJlZEltYWdlUGFnZVByZXZpZXdIVE1MIiwgInBvcHVwaWQiLCAicmVxdWVzdGlkIiwgImFsdCIsICJpbWFnZXJlcG9zaXRvcnkiLCAiZW5jYXJ0IiwgInNoYXJlZF91cmwiLCAiYXBpY29tbW9uc2Jhc2UiLCAiY29tbW9uc2Jhc2UiLCAibG9hZGVyIiwgImxvYWQiLCAiQVBJaW1hZ2VsaW5rc1ByZXZpZXdIVE1MIiwgImpzb2JqIiwgImltYWdldXNhZ2UiLCAiX2l0ZXJhdG9yMTYiLCAiX3N0ZXAxNiIsICJjYXRlZ29yeW1lbWJlcnMiLCAiX2l0ZXJhdG9yMTciLCAiX3N0ZXAxNyIsICJjbWNvbnRpbnVlIiwgInF1ZXJ5b2JqIiwgImludmFsaWQiLCAiYmxvY2tlZGJ5IiwgImJsb2NrcGFydGlhbCIsICJsb2NrZWRTdWxBY2NvdW50SXNBdHRhY2hlZFRvVGhpcyIsICJ1bmF0dGFjaGVkIiwgImdlbmRlciIsICJfaXRlcmF0b3IxOCIsICJfc3RlcDE4IiwgIl9pdGVyYXRvcjE5IiwgIl9zdGVwMTkiLCAicmVnaXN0cmF0aW9uIiwgIl91c2VyJGVkaXRjb3VudCIsICJlZGl0Y291bnQiLCAidXNlcmNvbnRyaWJzIiwgImJsb2NrcyIsICJyYnN0ciIsICJyYW5nZXN0YXJ0IiwgInJhbmdlZW5kIiwgInJlc3RyaWN0aW9ucyIsICJzcGxpY2UiLCAiX25hdnBvcCIsICJlZGl0cyIsICJzZXR1cERlYnVnZ2luZyIsICJwb3B1cERlYnVnIiwgImNvbnNvbGUiLCAicG9wdXBzSW5zZXJ0SW1hZ2UiLCAiaW1hZ2VpbmZvIiwgImltYWdlcGFnZSIsICJ0aHVtYnVybCIsICJzcmMiLCAibWltZSIsICJkZXNjcmlwdGlvbnVybCIsICJ0b2dnbGVTaXplIiwgInRvZ2dsZVNpemUyIiwgImltZyIsICJmaXJzdENoaWxkIiwgIm1hdGNoZWQiLCAicmVtb3ZlTWF0Y2hlc1VubGVzcyIsICJyZTEiLCAicGFyZW5jb3VudCIsICJyZTIiLCAic2V0TmFtZXNwYWNlcyIsICJzZXRSZWRpcnMiLCAiUiIsICJyZWRpckxpc3RzIiwgImFyIiwgImJlIiwgImJnIiwgImJzIiwgImJuIiwgImNzIiwgImN5IiwgImRlIiwgImVvIiwgImVzIiwgImV0IiwgImdhIiwgImdsIiwgImhlIiwgImh1IiwgImlzIiwgIml0IiwgImphIiwgIm1rIiwgIm5kcyIsICJubCIsICJubiIsICJwbCIsICJwdCIsICJydSIsICJzayIsICJzciIsICJ0dCIsICJ1ayIsICJ2aSIsICJ5aSIsICJ6aCIsICJyZWRpckxpc3QiLCAic2V0SW50ZXJ3aWtpIiwgIndpa2ltZWRpYSIsICJuc1JlIiwgImltYWdlTmFtZXNwYWNlVmFyaWFudHMiLCAiX2kyIiwgIl9PYmplY3QkZW50cmllczIiLCAiX2xvY2FsaXplZE5hbWVzcGFjZUxjIiwgIl9uYW1lc3BhY2VJZCIsICJuc1JlSW1hZ2UiLCAiZ2V0RWRpdGJveFNlbGVjdGlvbiIsICJzZWxlY3Rpb24iLCAiY3JlYXRlUmFuZ2UiLCAic2VsU3RhcnQiLCAic2VsZWN0aW9uU3RhcnQiLCAic2VsRW5kIiwgInNlbGVjdGlvbkVuZCIsICJzZWwiLCAicGlwZSIsICJkb1NlcGFyYXRlU2VsZWN0aW9uUG9wdXAiLCAiTW91c2V0cmFja2VyIiwgImxvb3BEZWxheSIsICJhY3RpdmUiLCAiaG9va3MiLCAicnVuSG9va3MiLCAicmVtb3ZlT2JqIiwgInJlbW92ZUhvb2tzIiwgIm5ld0hvb2tzIiwgInRyYWNrIiwgInBhZ2VYIiwgInBhZ2VZIiwgImRvY0VsdCIsICJkb2N1bWVudEVsZW1lbnQiLCAic2Nyb2xsTGVmdCIsICJzY3JvbGxUb3AiLCAic2V0UG9zaXRpb24iLCAibGFzdEhvb2tfeCIsICJsYXN0SG9va195IiwgImVuYWJsZSIsICJzYXZlZExpc3RlbmVyIiwgInVpZCIsICJub3Nob3ciLCAiY3JlYXRlIiwgInVuaGlkZSIsICJoaWRlIiwgImhvb2tJZHMiLCAiZG93bmxvYWRzIiwgImNvbnN0cmFpbmVkIiwgImhlaWdodCIsICJjcmVhdGVNYWluRGl2IiwgInJlcG9zaXRpb24iLCAibm9MaW1pdEhvciIsICJ0b29XaWRlIiwgInVwZGF0ZURpbWVuc2lvbnMiLCAiY1dpZHRoIiwgImNsaWVudFdpZHRoIiwgIm5hdHVyYWxXaWR0aCIsICJuZXdMZWZ0IiwgInJhaXNlIiwgInpJbmRleCIsICJoaWdoZXN0IiwgInNob3ciLCAidGltZSIsICJzdGFibGVfeCIsICJzdGFibGVfeSIsICJzdGFibGVTaG93IiwgIm5ld194IiwgIm5ld195IiwgImR4IiwgImR5IiwgImZ1enoyIiwgInNob3dTb29uU3RhYmxlVGltZXIiLCAia2V5SG9va3MiLCAiUmVmbGVjdCIsICJhcHBseSIsICJob29rIiwgImhvb2tJZCIsICJfdGhpcyRjbGFzc05hbWUiLCAib25jbGlja0xpc3RlbmVyIiwgInBvc2l0aW9uIiwgIm1pbldpZHRoIiwgImhhbmRsZU5hbWUiLCAic2hpZnRLZXkiLCAiYWJvcnREb3dubG9hZHMiLCAib2Zmc2V0SGVpZ2h0IiwgIl9pdGVyYXRvcjIwIiwgIl9zdGVwMjAiLCAiZGVsRm10IiwgImluc0ZtdCIsICJjb3VudENyb3NzaW5ncyIsICJlamVjdCIsICJyb3ciLCAiX2l0ZXJhdG9yMjEiLCAiX3N0ZXAyMSIsICJzaG9ydGVuRGlmZlN0cmluZyIsICJzaG9ydGVuRGlmZlN0cmluZzIiLCAiY29udGV4dCIsICJkaWZmU3RyaW5nIiwgIm9TcGxpdHRlZCIsICJuU3BsaXR0ZWQiLCAib3V0IiwgImFjYyIsICJtYXhPdXRwdXRQYWlyIiwgInBhaXJlZCIsICJqc1Jlc2VydmVkUHJvcGVydGllcyIsICJkaWZmQnVnQWxlcnQiLCAiZGlmZkJ1Z0FsZXJ0MiIsICJ3b3JkIiwgIm1ha2VEaWZmSGFzaHRhYmxlIiwgIl9zcmMkaSIsICJfcmV0JF9zcmMkaSIsICJvcyIsICJzZXRTaXRlSW5mbyIsICJwb3B1cExvY2FsRGVidWciLCAiaG9zdG5hbWUiLCAid2lraWEiLCAiaXNMb2NhbCIsICJzdGFydHNXaXRoIiwgImNvbW1vbnMiLCAicG9ydCIsICJzaXRlYmFzZSIsICJzZXRVc2VySW5mbyIsICJ1c3VzZXJzIiwgInVzcHJvcCIsICJjYW5SZXZpZXciLCAicmlnaHRzIiwgImZldGNoU3BlY2lhbFBhZ2VOYW1lcyIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJtYXhhZ2UiLCAibWV0YSIsICJzaXByb3AiLCAidXNlbGFuZyIsICJzcGVjaWFscGFnZWFsaWFzZXMiLCAic2V0VGl0bGVCYXNlIiwgInByb3RvY29sIiwgImJvdEludGVyZmFjZVBhdGgiLCAiQVBJUGF0aCIsICJ0aXRsZXRhaWwiLCAid2lraWJhc2UiLCAic2V0TWFpblJlZ2V4IiwgInJlU3RhcnQiLCAicHJlVGl0bGVzIiwgInJlRW5kIiwgImJ1aWxkU3BlY2lhbFBhZ2VHcm91cCIsICJzcGVjaWFsUGFnZU9iaiIsICJ2YXJpYW50cyIsICJyZWFsbmFtZSIsICJfaXRlcmF0b3IyMiIsICJhbGlhc2VzIiwgIl9zdGVwMjIiLCAiYWxpYXMiLCAic2V0UmVnZXhwcyIsICJfaXRlcmF0b3IyMyIsICJfc3RlcDIzIiwgInNwZWNpYWxwYWdlIiwgImltIiwgIl90ZW1wbGF0ZU9iamVjdDQiLCAiX3RlbXBsYXRlT2JqZWN0NSIsICJzZXR1cENhY2hlIiwgInNldE1pc2MiLCAiY2xpZW50IiwgInNldHVwUG9wdXBzMiIsICJjb21wbGV0ZWQiLCAic2V0T3B0aW9ucyIsICJkZWZhdWx0TmF2bGlua1NwZWMiLCAiX2hpbnQiLCAiZXhwYW5kQ29uZGl0aW9uYWxOYXZsaW5rU3RyaW5nIiwgImV4cGFuZENvbmRpdGlvbmFsTmF2bGlua1N0cmluZzIiLCAicmVjdXJzaW9uQ291bnQiLCAiY29uZGl0aW9uYWxTcGxpdFJlZ2V4IiwgIm51bVBhcmVucyIsICJ0ZXN0U3RyaW5nIiwgInRydWVTdHJpbmciLCAiZmFsc2VTdHJpbmciLCAidGVzdFJlc3VsdCIsICJuYXZsaW5rU3RyaW5nVG9BcnJheSIsICJfaXRlcmF0b3IyNCIsICJfc3RlcDI0IiwgIm5hdmxpbmtUYWciLCAic3MiLCAic3NzIiwgIm5hdmxpbmtTdWJzdGl0dXRlSFRNTCIsICJuYXZsaW5rRGVwdGgiLCAibWFnaWMiLCAibWVudWRlcHRoIiwgIm1lbnVyb3dkZXB0aCIsICJfaXRlcmF0b3IyNSIsICJfc3RlcDI1IiwgImdldE5ld1dpbiIsICJnZXRQcmludEZ1bmN0aW9uIiwgInRhZ1R5cGUiLCAicHJpbnQiLCAic2hvcnRjdXQiLCAiYWRkUG9wdXBTaG9ydGN1dCIsICJwb3B1cExpbmtzTmV3V2luZG93IiwgIm5ld1dpbiIsICJub1BvcHVwIiwgInNwZWNpYWxMaW5rIiwgIm1hZ2ljV2F0Y2hMaW5rIiwgInRpdGxlZFdpa2lMaW5rIiwgIl9wZyRjdXJyZW50JGxpbmskb3JpZyIsICJhcmluTGluayIsICJlZGl0Q291bnRlckxpbmsiLCAiZWRpdG9yTGlzdExpbmsiLCAidGl0bGVkRGlmZkxpbmsiLCAibWFnaWNIaXN0b3J5TGluayIsICJzaW1wbGVQb3B1cHMiLCAicG9wdXBNZW51TGluayIsICJwb3B1cEhhbmRsZUtleXByZXNzIiwgInBvcHVwSGFuZGxlS2V5cHJlc3MyIiwgIl9ldnQka2V5Q29kZSIsICJrZXlDb2RlIiwgIndoaWNoIiwgImxldHRlciIsICJmcm9tQ29kZVBvaW50IiwgInN0YXJ0TGluayIsICJsYXN0UG9wdXBMaW5rU2VsZWN0ZWQiLCAicHJldmVudERlZmF1bHQiLCAiZm9jdXMiLCAib2xkUG9wdXBPbmtleXByZXNzIiwgIm9ua2V5cHJlc3MiLCAiYWRkTGlua1Byb3BlcnR5IiwgInByb3BlcnR5IiwgImRpZmZEYXRhIiwgIm9sZFJldiIsICJuZXdSZXYiLCAiYXBpMiIsICJmcm9tdGl0bGUiLCAidG9yZWxhdGl2ZSIsICJmcm9tcmV2IiwgInRvcmV2IiwgImNvbXBhcmUiLCAiZnJvbXJldmlkIiwgInRvcmV2aWQiLCAiYWRkUmV2aWV3TGluayIsICJkb25lRGlmZiIsICJyZXZpZHMiLCAic3RhYmxlX3JldmlkIiwgImZsYWdnZWQiLCAicGFyYW1zMiIsICJwb3N0V2l0aFRva2VuIiwgImZhaWwiLCAiX2l0ZXJhdG9yMjYiLCAiX3N0ZXAyNiIsICJfaTMiLCAiX3JldmlzaW9ucyIsICJyZXZpc2lvbiIsICJpbnNlcnREaWZmIiwgInJtQm9yaW5nTGluZXMiLCAiYWFhIiwgImJiIiwgImJiYiIsICJzdHJpcE91dGVyQ29tbW9uTGluZXMiLCAib2xkbGluZXMiLCAibmV3bGluZXMiLCAiaW5uZXIiLCAidHJ1bmNhdGVkIiwgInBvcHVwRGlmZk1heExpbmVzIiwgInBvcHVwRGlmZkNvbnRleHRMaW5lcyIsICJsaW5lRGlmZiIsICJsaW5lczIiLCAib2xkbGluZXMyIiwgIm5ld2xpbmVzMiIsICJkaWZmRGF0ZXNUYWJsZSIsICJkaWZmRGF0ZXNUYWJsZVJvdyIsICJsYWJlbCIsICJsYXN0TW9kaWZpZWREYXRlIiwgInJldmxpbmsiLCAiZ2VuZXJhbExpbmsiLCAiYWN0aW9uTmFtZSIsICJzYXZlZE9sZGlkIiwgIm9sZGlkRGF0YSIsICJyZXZpc2lvblN0cmluZyIsICJyZXZlcnRTdW1tYXJ5IiwgImJhc2UiLCAiY3NzQ2xhc3MiLCAiZGVmYXVsdE5hdmxpbmtDbGFzc25hbWUiLCAiZ2VuZXJhbE5hdkxpbmsiLCAiZ2V0TGFzdENvbnRyaWIiLCAid2lraXBhZ2UiLCAiZ2V0SGlzdG9yeUluZm8iLCAicHJvY2Vzc0xhc3RDb250cmliSW5mbyIsICJmaXJzdE5ld0VkaXRvciIsICJlZGl0b3IiLCAibmV3VXJsIiwgImRpc3BsYXlVcmwiLCAiZ2V0RGlmZlNpbmNlTXlFZGl0IiwgInByb2Nlc3NEaWZmU2luY2VNeUVkaXQiLCAiZnJpZW5kbHlOYW1lIiwgIm15TGFzdEVkaXQiLCAicHVyZ2VQb3B1cHMiLCAicHJvY2Vzc0FsbFBvcHVwcyIsICJudWxsaWZ5IiwgImRpc2FibGVQb3B1cHMiLCAidG9nZ2xlUHJldmlld3MiLCAibWFnaWNXYXRjaExpbmsyIiwgIl90ZW1wbGF0ZU9iamVjdDYiLCAiX3JlZiIsICJfYXN5bmNUb0dlbmVyYXRvciIsICJyZXFEYXRhIiwgInRpdGxlcyIsICJ1bndhdGNoIiwgIm13VGl0bGUiLCAibmV3RnJvbVRleHQiLCAibWVzc2FnZU5hbWUiLCAiZ2V0TmFtZXNwYWNlSWQiLCAicGFyc2VEb20iLCAiX3gyIiwgIl94MyIsICJhcmd1bWVudHMiLCAianNVcmwiLCAib25DbGljayIsICJfdGVtcGxhdGVPYmplY3Q3IiwgIl90ZW1wbGF0ZU9iamVjdDgiLCAiX2wkc2VwIiwgImFwcGVuZFBhcmFtc1RvTGluayIsICJsaW5rc3RyIiwgImNBIiwgImNocyIsICJjdXJyZW50QXJ0aWNsZVJlZ2V4Qml0IiwgIl90ZW1wbGF0ZU9iamVjdDkiLCAiX3RlbXBsYXRlT2JqZWN0MTAiLCAiX3RlbXBsYXRlT2JqZWN0MTEiLCAiX3RlbXBsYXRlT2JqZWN0MTIiLCAibGsiLCAiYWxzb0NoYW5nZUxhYmVsIiwgInNhbmVMaW5rQ2hlY2siLCAidU4iLCAidG9vbERiTmFtZSIsICJjb29raWVTdHlsZSIsICJ0b29sIiwgImRlZmF1bHRUb29sVXJsIiwgInRoZVdpa2kiLCAid2hhdE5leHQiLCAiZ2V0SGlzdG9yeSIsICJwcm9jZXNzSGlzdG9yeSIsICJfaXRlcmF0b3IyNyIsICJfc3RlcDI3IiwgImZpbmlzaFByb2Nlc3NIaXN0b3J5IiwgImhpc3RJbmZvIiwgInByZXZpZCIsICJkZWZhdWx0aXplIiwgIl9wZyRvcHRpb24iLCAiX3BnJG9wdGlvbiR4IiwgIm5ld09wdGlvbiIsICJkZWYiLCAidmFyTmFtZSIsICJ1c2VySXNTeXNvcCIsICJnIiwgImhvdXIxMiIsICJfdGVtcGxhdGVPYmplY3QxMyIsICJlZGl0Q291bnRlckxpbmtIaW50IiwgImFyaW4iLCAib24iLCAib25jZSIsICJkeW5hbWljQ29udGVudEhhbmRsZXIiLCAiJGNvbnRlbnQiLCAicmVnaXN0ZXJIb29rc0ZvclZpc2libGVOYXZwb3BzIiwgImRvSXQiLCAiZWFjaCIsICJfaW5kZXgiLCAiYWRkIiwgIiRvdmVybGF5Il0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2hpZnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmZsYWdzLmpzIiwgInNyYy9OYXZpZ2F0aW9uX3BvcHVwcy9tb2R1bGVzL2FwaS50cyIsICJzcmMvTmF2aWdhdGlvbl9wb3B1cHMvbW9kdWxlcy9zdHJpbmcudHMiLCAic3JjL05hdmlnYXRpb25fcG9wdXBzL21vZHVsZXMvY29yZS5qcyIsICJzcmMvTmF2aWdhdGlvbl9wb3B1cHMvTmF2aWdhdGlvbl9wb3B1cHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggPD0gMTIxIGFuZCBTYWZhcmkgPD0gMTUuNDsgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG5cbi8vIElFOC1cbnZhciBJTkNPUlJFQ1RfUkVTVUxUID0gW10udW5zaGlmdCgwKSAhPT0gMTtcblxuLy8gVjggfiBDaHJvbWUgPCA3MSBhbmQgU2FmYXJpIDw9IDE1LjQsIEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3JcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkudW5zaGlmdCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9SRVNVTFQgfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnVuc2hpZnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudW5zaGlmdFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHVuc2hpZnQ6IGZ1bmN0aW9uIHVuc2hpZnQoaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYgKGFyZ0NvdW50KSB7XG4gICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgICAgdmFyIGsgPSBsZW47XG4gICAgICB3aGlsZSAoay0tKSB7XG4gICAgICAgIHZhciB0byA9IGsgKyBhcmdDb3VudDtcbiAgICAgICAgaWYgKGsgaW4gTykgT1t0b10gPSBPW2tdO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ0NvdW50OyBqKyspIHtcbiAgICAgICAgT1tqXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgIH1cbiAgICB9IHJldHVybiBzZXRBcnJheUxlbmd0aChPLCBsZW4gKyBhcmdDb3VudCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ2QnKSAtPiAvLi9kIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgRk9SQ0VEID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgSU5ESUNFU19TVVBQT1JUID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBSZWdFeHAoJy4nLCAnZCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIElORElDRVNfU1VQUE9SVCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIE8gPSB7fTtcbiAgLy8gbW9kZXJuIFY4IGJ1Z1xuICB2YXIgY2FsbHMgPSAnJztcbiAgdmFyIGV4cGVjdGVkID0gSU5ESUNFU19TVVBQT1JUID8gJ2RnaW1zeScgOiAnZ2ltc3knO1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoa2V5LCBjaHIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywga2V5LCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbHMgKz0gY2hyO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSB9KTtcbiAgfTtcblxuICB2YXIgcGFpcnMgPSB7XG4gICAgZG90QWxsOiAncycsXG4gICAgZ2xvYmFsOiAnZycsXG4gICAgaWdub3JlQ2FzZTogJ2knLFxuICAgIG11bHRpbGluZTogJ20nLFxuICAgIHN0aWNreTogJ3knXG4gIH07XG5cbiAgaWYgKElORElDRVNfU1VQUE9SVCkgcGFpcnMuaGFzSW5kaWNlcyA9ICdkJztcblxuICBmb3IgKHZhciBrZXkgaW4gcGFpcnMpIGFkZEdldHRlcihrZXksIHBhaXJzW2tleV0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnKS5nZXQuY2FsbChPKTtcblxuICByZXR1cm4gcmVzdWx0ICE9PSBleHBlY3RlZCB8fCBjYWxscyAhPT0gZXhwZWN0ZWQ7XG59KTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xuaWYgKEZPUkNFRCkgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVnRXhwRmxhZ3Ncbn0pO1xuIiwgImltcG9ydCB7aW5pdE13QXBpfSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBhcGk6IG13LkFwaSA9IGluaXRNd0FwaSgnTmF2aWdhdGlvbiBwb3B1cHMvMS4wJyk7XG5cbmV4cG9ydCB7YXBpfTtcbiIsICIvLyBUcmFuc2xhdGFibGUgc3RyaW5nc1xuY29uc3QgbWVzc2FnZToge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7XG5cdC8vIHN1bW1hcnkgZGF0YSwgc2VhcmNoaW5nIGV0Yy5cblx0YXJ0aWNsZTogd2luZG93LndnVUxTKCfmnaHnm64nLCAn5qKd55uuJyksXG5cdGNhdGVnb3J5OiB3aW5kb3cud2dVTFMoJ+S4quWIhuexuycsICflgIvliIbpoZ4nKSxcblx0Y2F0ZWdvcmllczogd2luZG93LndnVUxTKCfkuKrliIbnsbsnLCAn5YCL5YiG6aGeJyksXG5cdGltYWdlOiB3aW5kb3cud2dVTFMoJ+S4quaWh+S7ticsICflgIvmqpTmoYgnKSxcblx0aW1hZ2VzOiB3aW5kb3cud2dVTFMoJ+S4quaWh+S7ticsICflgIvmqpTmoYgnKSxcblx0c3R1YjogJ+Wwj+S9nOWTgScsXG5cdCdzZWN0aW9uIHN0dWInOiB3aW5kb3cud2dVTFMoJ+Wwj+eroOiKgicsICflsI/nq6Dnr4AnKSxcblx0J0VtcHR5IHBhZ2UnOiB3aW5kb3cud2dVTFMoJ+epuumhtemdoicsICfnqbrpoIHpnaInKSxcblx0a0I6IHdpbmRvdy53Z1VMUygn5Y2D5a2X6IqCPHN1Yj7vvIjku6UxMDAw5Li65LiA6L+b77yJPC9zdWI+JywgJ+WNg+S9jeWFg+e1hDxzdWI+77yI5LulMTAwMOeCuuS4gOmAsu+8iTwvc3ViPicpLFxuXHRieXRlczogd2luZG93LndnVUxTKCflrZfoioInLCAn5L2N5YWD57WEJyksXG5cdGRheTogJ+WkqScsXG5cdGRheXM6ICflpKknLFxuXHRob3VyOiB3aW5kb3cud2dVTFMoJ+Wwj+aXticsICflsI/mmYInKSxcblx0aG91cnM6IHdpbmRvdy53Z1VMUygn5bCP5pe2JywgJ+Wwj+aZgicpLFxuXHRtaW51dGU6ICfliIYnLFxuXHRtaW51dGVzOiAn5YiGJyxcblx0c2Vjb25kOiAn56eSJyxcblx0c2Vjb25kczogJ+enkicsXG5cdHdlZWs6ICflkagnLFxuXHR3ZWVrczogJ+WRqCcsXG5cdG1vbnRoOiAn5pyIJyxcblx0bW9udGhzOiAn5pyIJyxcblx0eWVhcjogJ+W5tCcsXG5cdHllYXJzOiAn5bm0Jyxcblx0c2VhcmNoOiB3aW5kb3cud2dVTFMoJ+aQnOe0oicsICfmkJzlsIsnKSxcblx0U2VhcmNoSGludDogd2luZG93LndnVUxTKCfmkJzntKLljIXlkKsgJXMg55qE6aG16Z2iJywgJ+aQnOWwi+WMheWQqyAlcyDnmoTpoIHpnaInKSxcblx0d2ViOiAnQmluZycsXG5cdGdsb2JhbDogJ+WFqOWfnycsXG5cdCdtb3JlLi4uJzogJ+abtOWkmuKApuKApicsXG5cdC8vIGFydGljbGUtcmVsYXRlZCBhY3Rpb25zIGFuZCBpbmZvXG5cdC8vIChzb21lIGFjdGlvbnMgYWxzbyBhcHBseSB0byB1c2VyIHBhZ2VzKVxuXHRhY3Rpb25zOiB3aW5kb3cud2dVTFMoJ+aTjeS9nCcsICfli5XkvZwnKSxcblx0Ly8gLy8vIHZpZXcgYXJ0aWNsZXMgYW5kIHZpZXcgdGFsa1xuXHRwb3B1cHNNZW51OiAnUG9wdXBzJyxcblx0J2Rpc2FibGUgcHJldmlld3MnOiB3aW5kb3cud2dVTFMoJ+emgeeUqOmihOiniCcsICfnpoHnlKjpoJDopr0nKSxcblx0dG9nZ2xlUHJldmlld3NIaW50OiB3aW5kb3cud2dVTFMoJ+WIh+aNouacrOmhtSBQb3B1cHMg55qE6aKE6KeI5byA5YWzJywgJ+WIh+aPm+acrOmggSBQb3B1cHMg55qE6aCQ6Ka96ZaL6ZecJyksXG5cdCd0b2dnbGUgcHJldmlld3MnOiB3aW5kb3cud2dVTFMoJ+WIh+aNoumihOiniOW8gOWFsycsICfliIfmj5vpoJDopr3plovpl5wnKSxcblx0cmVzZXQ6IHdpbmRvdy53Z1VMUygn5aSN5L2NJywgJ+ikh+S9jScpLFxuXHRkaXNhYmxlOiAn56aB55SoIFBvcHVwcycsXG5cdGRpc2FibGVQb3B1cHNIaW50OiB3aW5kb3cud2dVTFMoXG5cdFx0J+WcqOacrOmhteemgeeUqCBQb3B1cHPvvIzliLfmlrDpobXpnaLku6Xph43mlrDlkK/nlKjjgIInLFxuXHRcdCflnKjmnKzpoIHnpoHnlKggUG9wdXBz77yM6YeN5paw5pW055CG6aCB6Z2i5Lul6YeN5paw5ZWf55So44CCJ1xuXHQpLFxuXHRwdXJnZVBvcHVwc0hpbnQ6IHdpbmRvdy53Z1VMUygn5aSN5L2NIFBvcHVwc++8jOa4hemZpOaJgOaciee8k+WtmOaVsOaNruOAgicsICfopIfkvY0gUG9wdXBz77yM5riF6Zmk5omA5pyJ5b+r5Y+W6LOH5paZ44CCJyksXG5cdFBvcHVwc0hpbnQ6IHdpbmRvdy53Z1VMUygn5aSN5L2NIFBvcHVwc++8jOa4hemZpOaJgOaciee8k+WtmOaVsOaNruOAgicsICfopIfkvY0gUG9wdXBz77yM5riF6Zmk5omA5pyJ5b+r5Y+W6LOH5paZ44CCJyksXG5cdHNwYWNlYmFyOiAn56m65qC8Jyxcblx0dmlldzogd2luZG93LndnVUxTKCfmn6XnnIsnLCAn5qqi6KaWJyksXG5cdCd2aWV3IGFydGljbGUnOiB3aW5kb3cud2dVTFMoJ+afpeeci+adoeebricsICfmqqLoppbmop3nm64nKSxcblx0dmlld0hpbnQ6IHdpbmRvdy53Z1VMUygn5YmN5b6AICVzJywgJ+WJjeW+gCAlcycpLFxuXHR0YWxrOiB3aW5kb3cud2dVTFMoJ+iuqOiuuicsICfoqI7oq5YnKSxcblx0J3RhbGsgcGFnZSc6IHdpbmRvdy53Z1VMUygn6K6o6K666aG1JywgJ+iojuirlumggScpLFxuXHQndGhpcyZuYnNwO3JldmlzaW9uJzogd2luZG93LndnVUxTKCfmraTkv67orqLniYjmnKwnLCAn5q2k5L+u6KiC54mI5pysJyksXG5cdCdyZXZpc2lvbiAlcyBvZiAlcyc6IHdpbmRvdy53Z1VMUygn6aG16Z2iICQyIOeahOS/ruiuoueJiOacrCAkMScsICfpoIHpnaIgJDIg55qE5L+u6KiC54mI5pysICQxJyksXG5cdCdSZXZpc2lvbiAlcyBvZiAlcyc6IHdpbmRvdy53Z1VMUygn6aG16Z2iICQyIOeahOS/ruiuoueJiOacrCAkMScsICfpoIHpnaIgJDIg55qE5L+u6KiC54mI5pysICQxJyksXG5cdCd0aGUgcmV2aXNpb24gcHJpb3IgdG8gcmV2aXNpb24gJXMgb2YgJXMnOiB3aW5kb3cud2dVTFMoXG5cdFx0J+mhtemdoiAkMiDnmoTkv67orqLniYjmnKwgJDEg5LmL5YmN55qE5L+u6K6i54mI5pysJyxcblx0XHQn6aCB6Z2iICQyIOeahOS/ruiogueJiOacrCAkMSDkuYvliY3nmoTkv67oqILniYjmnKwnXG5cdCksXG5cdCdUb2dnbGUgaW1hZ2Ugc2l6ZSc6IHdpbmRvdy53Z1VMUygn54K55Ye75YiH5o2i5Zu+54mH5aSn5bCPJywgJ+m7nuaTiuWIh+aPm+WclueJh+Wkp+WwjycpLFxuXHRkZWw6IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIoOmZpCcpLFxuXHQvLyAvLy8gZGVsZXRlLCBwcm90ZWN0LCBtb3ZlXG5cdGRlbGV0ZTogd2luZG93LndnVUxTKCfliKDpmaQnLCAn5Yig6ZmkJyksXG5cdGRlbGV0ZUhpbnQ6IHdpbmRvdy53Z1VMUygn5Yig6ZmkICVzJywgJ+WIoOmZpCAlcycpLFxuXHR1bmRlbGV0ZVNob3J0OiB3aW5kb3cud2dVTFMoJ+aBouWkjScsICfmgaLlvqknKSxcblx0VW5kZWxldGVIaW50OiB3aW5kb3cud2dVTFMoJ+aBouWkjSAlcycsICfmgaLlvqkgJXMnKSxcblx0cHJvdGVjdDogd2luZG93LndnVUxTKCfkv53miqQnLCAn5L+d6K23JyksXG5cdHByb3RlY3RIaW50OiB3aW5kb3cud2dVTFMoJ+S/neaKpCAlcycsICfkv53orbcgJXMnKSxcblx0dW5wcm90ZWN0U2hvcnQ6IHdpbmRvdy53Z1VMUygn6Kej6ZmkJywgJ+ino+mZpCcpLFxuXHR1bnByb3RlY3RIaW50OiB3aW5kb3cud2dVTFMoJ+ino+mZpOWvuSAlcyDnmoTkv53miqQnLCAn6Kej6Zmk5bCNICVzIOeahOS/neittycpLFxuXHRtb3ZlOiB3aW5kb3cud2dVTFMoJ+enu+WKqCcsICfnp7vli5UnKSxcblx0J21vdmUgcGFnZSc6IHdpbmRvdy53Z1VMUygn56e75Yqo6aG16Z2iJywgJ+enu+WLlemggemdoicpLFxuXHRNb3ZlcGFnZUhpbnQ6IHdpbmRvdy53Z1VMUygn5L+u5pS5ICVzIOeahOagh+mimCcsICfkv67mlLkgJXMg55qE5qiZ6aGMJyksXG5cdGVkaXQ6IHdpbmRvdy53Z1VMUygn57yW6L6RJywgJ+e3qOi8rycpLFxuXHQvLyAvLy8gZWRpdCBhcnRpY2xlcyBhbmQgdGFsa1xuXHQnZWRpdCBhcnRpY2xlJzogd2luZG93LndnVUxTKCfnvJbovpHmnaHnm64nLCAn57eo6Lyv5qKd55uuJyksXG5cdGVkaXRIaW50OiB3aW5kb3cud2dVTFMoJ+S/ruaUuSAlcyDnmoTlhoXlrrknLCAn5L+u5pS5ICVzIOeahOWFp+WuuScpLFxuXHQnZWRpdCB0YWxrJzogd2luZG93LndnVUxTKCfnvJbovpHorqjorrrpobUnLCAn57eo6Lyv5bCN6Kmx6aCBJyksXG5cdG5ldzogd2luZG93LndnVUxTKCfmlrAnLCAn5pawJyksXG5cdCduZXcgdG9waWMnOiB3aW5kb3cud2dVTFMoJ+aWsOivnemimCcsICfmlrDoqbHpoYwnKSxcblx0bmV3U2VjdGlvbkhpbnQ6IHdpbmRvdy53Z1VMUygn5ZyoICVzIOWinuWKoOaWsOeahOiuqOiuuuivnemimCcsICflnKggJXMg5aKe5Yqg5paw55qE6KiO6KuW6Kmx6aGMJyksXG5cdCdudWxsIGVkaXQnOiB3aW5kb3cud2dVTFMoJ+epuue8lui+kScsICfnqbrnt6jovK8nKSxcblx0bnVsbEVkaXRIaW50OiB3aW5kb3cud2dVTFMoJ+i/m+ihjOS4gOasoeWvuSAlcyDnmoTnqbrnvJbovpEnLCAn6KO96YCg5LiA5qyh5bCNICVzIOeahOepuue3qOi8rycpLFxuXHRoaXN0OiB3aW5kb3cud2dVTFMoJ+WOhuWPsicsICfmrbflj7InKSxcblx0Ly8gLy8vIGhpc3RvcnksIGRpZmZzLCBlZGl0b3JzLCByZWxhdGVkXG5cdGhpc3Rvcnk6IHdpbmRvdy53Z1VMUygn5Y6G5Y+yJywgJ+att+WPsicpLFxuXHRoaXN0b3J5SGludDogd2luZG93LndnVUxTKCclcyDnmoTkv67orqLljoblj7InLCAnJXMg55qE5L+u6KiC5q235Y+yJyksXG5cdGxhc3Q6IHdpbmRvdy53Z1VMUygn5LmL5YmNJywgJ+S5i+WJjScpLFxuXHQvLyBbW01lZGlhV2lraTpMYXN0XV1cblx0bGFzdEVkaXQ6IHdpbmRvdy53Z1VMUygn5pyA6L+R5pu05pS5JywgJ+acgOi/keabtOaUuScpLFxuXHQnc2hvdyBsYXN0IGVkaXQnOiB3aW5kb3cud2dVTFMoJ+acgOi/keS4gOasoeabtOaUuScsICfmnIDmlrDkuIDmrKHkv67oqIInKSxcblx0J1Nob3cgdGhlIGxhc3QgZWRpdCc6IHdpbmRvdy53Z1VMUygn5pi+56S65pyA6L+R5LiA5qyh5pu05pS555qE5beu5byCJywgJ+mhr+ekuuacgOaWsOS4gOasoeS/ruiogueahOW3rueVsCcpLFxuXHRsYXN0Q29udHJpYjogd2luZG93LndnVUxTKCfmnIDov5HnvJbovpEnLCAn5pyA6L+R57eo6LyvJyksXG5cdCdsYXN0IHNldCBvZiBlZGl0cyc6IHdpbmRvdy53Z1VMUygn5pyA6L+R57yW6L6RJywgJ+acgOi/kee3qOi8rycpLFxuXHRsYXN0Q29udHJpYkhpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S655Sx5pyA5ZCO5LiA5L2N57yW6L6R6ICF6YCg5oiQ55qE5beu5byCJywgJ+mhr+ekuueUseacgOW+jOS4gOS9jee3qOi8r+iAheijvemAoOeahOW3rueVsCcpLFxuXHRjdXI6IHdpbmRvdy53Z1VMUygn5b2T5YmNJywgJ+eVtuWJjScpLFxuXHRkaWZmQ3VyOiB3aW5kb3cud2dVTFMoJ+S4juW9k+WJjeeJiOacrOeahOW3ruW8gicsICfoiIfnm67liY3niYjmnKznmoTlt67nlbAnKSxcblx0J1Nob3cgY2hhbmdlcyBzaW5jZSByZXZpc2lvbiAlcyc6IHdpbmRvdy53Z1VMUygn5pi+56S66Ieq5L+u6K6i54mI5pysICVzIOeahOW3ruW8gicsICfpoa/npLroh6rkv67oqILniYjmnKwgJXMg55qE5beu55WwJyksXG5cdCclcyBvbGQnOiB3aW5kb3cud2dVTFMoJyVzIOWJjeeahOacgOWQjueJiOacrCcsICclcyDliY3nmoTmnIDlkI7niYjmnKwnKSxcblx0Ly8gYXMgaW4gNCB3ZWVrcyBvbGRcblx0b2xkRWRpdDogd2luZG93LndnVUxTKCfml6fnvJbovpEnLCAn6IiK57eo6LyvJyksXG5cdHB1cmdlOiB3aW5kb3cud2dVTFMoJ+a4hemZpOe8k+WtmCcsICfmuIXpmaTlv6vlj5YnKSxcblx0cHVyZ2VIaW50OiB3aW5kb3cud2dVTFMoJ+a4hemZpOacjeWKoeWZqOS4rSAlcyDnmoTnvJPlrZgnLCAn5riF6Zmk5Ly65pyN5Zmo5LitICVzIOeahOW/q+WPlicpLFxuXHRyYXc6IHdpbmRvdy53Z1VMUygn5rqQ5Luj56CBJywgJ+WOn+Wni+eivCcpLFxuXHRyYXdIaW50OiB3aW5kb3cud2dVTFMoJ+afpeeciyAlcyDnmoTmupDku6PnoIEnLCAn5qqi6KaWICVzIOeahOWOn+Wni+eivCcpLFxuXHRyZW5kZXI6IHdpbmRvdy53Z1VMUygn5LuF5q2j5paHJywgJ+WDheato+aWhycpLFxuXHRyZW5kZXJIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuiAlcyDnmoTnuq9IVE1M6Kej5p6Q77yI5LuF5q2j5paH5YaF5a6577yJJywgJ+mhr+ekuiAlcyDnmoTntJRIVE1M6Kej5p6Q77yI5YOF5q2j5paH5YWn5a6577yJJyksXG5cdCdTaG93IHRoZSBlZGl0IG1hZGUgdG8gZ2V0IHJldmlzaW9uJzogd2luZG93LndnVUxTKCfmmL7npLrnvJbovpHku6XlvpfliLDkv67orqLniYjmnKwnLCAn6aGv56S657eo6Lyv5Lul5b6X5Yiw5L+u6KiC54mI5pysJyksXG5cdHNpbmNlTWU6IHdpbmRvdy53Z1VMUygn6Ieq5oiRJywgJ+iHquaIkScpLFxuXHQnY2hhbmdlcyBzaW5jZSBtaW5lJzogd2luZG93LndnVUxTKCfoh6rmiJHkv67orqLnmoTlt67lvIInLCAn6Ieq5oiR5L+u6KiC55qE5beu55WwJyksXG5cdHNpbmNlTWVIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuuiHquaIkeS4iuasoeS/ruaUueS7peadpeeahOW3ruW8gicsICfpoa/npLroh6rmiJHkuIrmrKHkv67mlLnku6XkvobnmoTlt67nlbAnKSxcblx0XCJDb3VsZG4ndCBmaW5kIGFuIGVkaXQgYnkgJXNcXG5pbiB0aGUgbGFzdCAlcyBlZGl0cyB0b1xcbiVzXCI6IHdpbmRvdy53Z1VMUyhcblx0XHQn5ZyoICQzIOacgOi/kSAkMiDmrKHnvJbovpHkuK3mib7kuI3liLAgJDEg5YGa5Ye655qE5L+u5pS5Jyxcblx0XHQn5ZyoICQzIOacgOi/kSAkMiDmrKHnt6jovK/kuK3mib7kuI3liLAgJDEg5YGa5Ye655qE5L+u5pS5J1xuXHQpLFxuXHRlZHM6IHdpbmRvdy53Z1VMUygn57yW6L6RJywgJ+e3qOi8rycpLFxuXHRlZGl0b3JzOiB3aW5kb3cud2dVTFMoJ+e8lui+keiAhScsICfnt6jovK/ogIUnKSxcblx0ZWRpdG9yTGlzdEhpbnQ6IHdpbmRvdy53Z1VMUygn5YiX5Ye657yW6L6R6L+HICVzIOeahOeUqOaItycsICfliJflh7rnt6jovK/pgY4gJXMg55qE5L2/55So6ICFJyksXG5cdHJlbGF0ZWQ6IHdpbmRvdy53Z1VMUygn55u45YWzJywgJ+ebuOmXnCcpLFxuXHRyZWxhdGVkQ2hhbmdlczogd2luZG93LndnVUxTKCfnm7jlhbPmm7TmlLknLCAn55u46Zec5pu05pS5JyksXG5cdCdyZWxhdGVkIGNoYW5nZXMnOiB3aW5kb3cud2dVTFMoJ+ebuOWFs+abtOaUuScsICfnm7jpl5zmm7TmlLknKSxcblx0UmVjZW50Y2hhbmdlc2xpbmtlZEhpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S655u45YWzICVzIOeahOS/ruaUuScsICfpoa/npLrnm7jpl5wgJXMg55qE5L+u5pS5JyksXG5cdGVkaXRPbGQ6IHdpbmRvdy53Z1VMUygn57yW6L6R5pen54mIJywgJ+e3qOi8r+iIiueJiCcpLFxuXHQvLyAvLy8gZWRpdCBvbGQgdmVyc2lvbiwgb3IgcmV2ZXJ0XG5cdHJ2OiB3aW5kb3cud2dVTFMoJ+WbnumAgCcsICfmgaLlvqknKSxcblx0cmV2ZXJ0OiB3aW5kb3cud2dVTFMoJ+WbnumAgCcsICfmgaLlvqknKSxcblx0cmV2ZXJ0SGludDogd2luZG93LndnVUxTKCflm57pgIDliLAgJXMnLCAn5oGi5b6p5YiwICVzJyksXG5cdHVuZG86IHdpbmRvdy53Z1VMUygn5pKk6ZSAJywgJ+aSpOmKtycpLFxuXHR1bmRvSGludDogd2luZG93LndnVUxTKCfmkqTplIDov5nmrKHnvJbovpEnLCAn5pKk6Yq36YCZ5qyh57eo6LyvJyksXG5cdGRlZmF1bHRwb3B1cFJlZGxpbmtTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0J+enu+mZpOWIsOepuumhtemdoltbJXNdXeeahOmTvuaOpe+8iFBvcHVwc++8iScsXG5cdFx0J+enu+mZpOWIsOepuumggemdoltbJXNdXeeahOmAo+e1kO+8iFBvcHVwc++8iSdcblx0KSxcblx0ZGVmYXVsdHBvcHVwRml4RGFic1N1bW1hcnk6IHdpbmRvdy53Z1VMUygn5raI5q2n5LmJW1slc11d5YiwW1slc11d77yIUG9wdXBz77yJJywgJ+a2iOatp+e+qVtbJXNdXeWIsFtbJXNdXe+8iFBvcHVwc++8iScpLFxuXHRkZWZhdWx0cG9wdXBGaXhSZWRpcnNTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0J+W/veeVpeS7jltbJXNdXeWIsFtbJXNdXeeahOmHjeWumuWQke+8iFBvcHVwc++8iScsXG5cdFx0J+W/veeVpeW+nltbJXNdXeWIsFtbJXNdXeeahOmHjeaWsOWwjuWQke+8iFBvcHVwc++8iSdcblx0KSxcblx0ZGVmYXVsdHBvcHVwRXh0ZW5kZWRSZXZlcnRTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0J+WbnumAgOWIsCQy5ZyoJDHml7bnvJbovpHnmoTkv67orqLniYjmnKwkM++8iFBvcHVwc++8iScsXG5cdFx0J+mChOWOn+WIsCQy5ZyoJDHmmYLoo73kvZznmoTkv67oqILniYjmnKwkM++8iFBvcHVwc++8iSdcblx0KSxcblx0ZGVmYXVsdHBvcHVwUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHQn5Zue6YCA5Yiw5L+u6K6i54mI5pysJXPnmoTkuIrkuIDkuKrniYjmnKzvvIhQb3B1cHPvvIknLFxuXHRcdCfpgoTljp/liLDkv67oqILniYjmnKwlc+eahOS4iuS4gOWAi+eJiOacrO+8iFBvcHVwc++8iSdcblx0KSxcblx0ZGVmYXVsdHBvcHVwUmV2ZXJ0U3VtbWFyeTogd2luZG93LndnVUxTKCflm57pgIDliLDkv67orqLniYjmnKwlc++8iFBvcHVwc++8iScsICfpgoTljp/liLDkv67oqILniYjmnKwlc++8iFBvcHVwc++8iScpLFxuXHRkZWZhdWx0cG9wdXBRdWVyaWVkUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHQn5Zue6YCA5Yiw5L+u6K6i54mI5pysJDHnmoTkuIrkuIDkuKrniYjmnKzvvIznlLEkM+WcqCQy5pe257yW6L6R77yIUG9wdXBz77yJJyxcblx0XHQn6YKE5Y6f5Yiw5L+u6KiC54mI5pysJDHnmoTkuIrkuIDlgIvniYjmnKzvvIznlLEkM+WcqCQy5pmC6KO95L2c77yIUG9wdXBz77yJJ1xuXHQpLFxuXHRkZWZhdWx0cG9wdXBRdWVyaWVkUmV2ZXJ0U3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdCflm57pgIDliLAkM+WcqCQy5pe257yW6L6R55qE5L+u6K6i54mI5pysJDHvvIhQb3B1cHPvvIknLFxuXHRcdCfpgoTljp/liLAkM+WcqCQy5pmC6KO95L2c55qE5L+u6KiC54mI5pysJDHvvIhQb3B1cHPvvIknXG5cdCksXG5cdGRlZmF1bHRwb3B1cFJtRGFiTGlua1N1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHQn56e76Zmk5Yiw5raI5q2n5LmJ6aG1W1slc11d55qE6ZO+5o6l77yIUG9wdXBz77yJJyxcblx0XHQn56e76Zmk5Yiw5raI5q2n576p6aCBW1slc11d55qE6YCj57WQ77yIUG9wdXBz77yJJ1xuXHQpLFxuXHRSZWRpcmVjdHM6IHdpbmRvdy53Z1VMUygn6YeN5a6a5ZCRJywgJ+mHjeWumuWQkScpLFxuXHQvLyBhcyBpbiBSZWRpcmVjdHMgdG8gLi4uXG5cdC8vIFwiIHRvIFwiOiB3aW5kb3cud2dVTFMoIFwi5YiwXCIsXCLliLBcIiApLFxuXHQvLyBhcyBpbiBSZWRpcmVjdHMgdG8gLi4uXG5cdCdCeXBhc3MgcmVkaXJlY3QnOiB3aW5kb3cud2dVTFMoJ+W/veeVpemHjeWumuWQkScsICflv73nlaXph43mlrDlsI7lkJEnKSxcblx0J0ZpeCB0aGlzIHJlZGlyZWN0Jzogd2luZG93LndnVUxTKCfkv67lpI3ph43lrprlkJEnLCAn5L+u5b6p6YeN5paw5bCO5ZCRJyksXG5cdGRpc2FtYmlnOiB3aW5kb3cud2dVTFMoJ+a2iOatp+S5iScsICfmtojmrafnvqknKSxcblx0Ly8gLy8vIGFkZCBvciByZW1vdmUgZGFiIGV0Yy5cblx0ZGlzYW1iaWdIaW50OiB3aW5kb3cud2dVTFMoJ+a2iOatp+S5iei/meS4qumTvuaOpeWIsCBbWyVzXV0nLCAn5raI5q2n576p6YCZ5YCL6YCj57WQ5YiwIFtbJXNdXScpLFxuXHQnQ2xpY2sgdG8gZGlzYW1iaWd1YXRlIHRoaXMgbGluayB0bzonOiB3aW5kb3cud2dVTFMoJ+eCueWHu+S7pea2iOatp+S5iei/meS4qumTvuaOpeWIsO+8micsICfpu57mk4rku6XmtojmrafnvqnpgJnlgIvpgKPntZDliLDvvJonKSxcblx0J3JlbW92ZSB0aGlzIGxpbmsnOiB3aW5kb3cud2dVTFMoJ+enu+mZpOmTvuaOpScsICfnp7vpmaTpgKPntZAnKSxcblx0J3JlbW92ZSBhbGwgbGlua3MgdG8gdGhpcyBwYWdlIGZyb20gdGhpcyBhcnRpY2xlJzogd2luZG93LndnVUxTKFxuXHRcdCfnp7vpmaTmraTmnaHnm67liLDov5npobXnmoTmiYDmnInpk77mjqUnLFxuXHRcdCfnp7vpmaTmraTmop3nm67liLDpgJnpoIHnmoTmiYDmnInpgKPntZAnXG5cdCksXG5cdCdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgZGlzYW1iaWcgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZSc6IHdpbmRvdy53Z1VMUyhcblx0XHQn56e76Zmk5q2k5p2h55uu5Yiw6L+Z5raI5q2n5LmJ55qE5omA5pyJ6ZO+5o6lJyxcblx0XHQn56e76Zmk5q2k5qKd55uu5Yiw6YCZ5raI5q2n576p55qE5omA5pyJ6YCj57WQJ1xuXHQpLFxuXHRtYWlubGluazogd2luZG93LndnVUxTKCfkuLvpk77mjqUnLCAn5Li76YCj57WQJyksXG5cdC8vIC8vLyBsaW5rcywgd2F0Y2gsIHVud2F0Y2hcblx0d2lraUxpbms6IHdpbmRvdy53Z1VMUygn5Liq5YaF6YOo6ZO+5o6lJywgJ+S4quWFp+mDqOmAo+e1kCcpLFxuXHR3aWtpTGlua3M6IHdpbmRvdy53Z1VMUygn5Liq5YaF6YOo6ZO+5o6lJywgJ+S4quWFp+mDqOmAo+e1kCcpLFxuXHQnbGlua3MgaGVyZSc6IHdpbmRvdy53Z1VMUygn6ZO+5YWlJywgJ+mPiOWFpScpLFxuXHR3aGF0TGlua3NIZXJlOiB3aW5kb3cud2dVTFMoJ+mTvuWFpemhtemdoicsICfpj4jlhaXpoIHpnaInKSxcblx0J3doYXQgbGlua3MgaGVyZSc6IHdpbmRvdy53Z1VMUygn6ZO+5YWl6aG16Z2iJywgJ+mPiOWFpemggemdoicpLFxuXHRXaGF0bGlua3NoZXJlSGludDogd2luZG93LndnVUxTKCfmmL7npLrpk77mjqXliLAgJXMg55qE6aG16Z2iJywgJ+mhr+ekuumAo+e1kOWIsCAlcyDnmoTpoIHpnaInKSxcblx0dW53YXRjaFNob3J0OiB3aW5kb3cud2dVTFMoJ+WPlua2iCcsICflj5bmtognKSxcblx0d2F0Y2hUaGluZ3k6IHdpbmRvdy53Z1VMUygn55uR6KeGJywgJ+ebo+imlicpLFxuXHQvLyBjYWxsZWQgd2F0Y2hUaGluZ3kgYmVjYXVzZSB7fS53YXRjaCBpcyBhIGZ1bmN0aW9uXG5cdHdhdGNoSGludDogd2luZG93LndnVUxTKCfliqDlhaUgJXMg5Yiw5oiR55qE55uR6KeG5YiX6KGoJywgJ+WKoOWFpSAlcyDliLDmiJHnmoTnm6PoppbliJfooagnKSxcblx0dW53YXRjaEhpbnQ6IHdpbmRvdy53Z1VMUygn5LuO5oiR55qE55uR6KeG5YiX6KGo56e76ZmkICVzJywgJ+W+nuaIkeeahOebo+imluWIl+ihqOenu+mZpCAlcycpLFxuXHQnT25seSBmb3VuZCBvbmUgZWRpdG9yOiAlcyBtYWRlICVzIGVkaXRzJzogd2luZG93LndnVUxTKFxuXHRcdCfku4Xmib7liLDkuIDkvY3nvJbogIXvvJolcyDliLbpgKDkuoYgJXMg5qyh57yW6L6RJyxcblx0XHQn5YOF5om+5Yiw5LiA5L2N57eo6ICF77yaJXMg6KO96YCg5LqGICVzIOasoee3qOi8rydcblx0KSxcblx0JyVzIHNlZW1zIHRvIGJlIHRoZSBsYXN0IGVkaXRvciB0byB0aGUgcGFnZSAlcyc6IHdpbmRvdy53Z1VMUyhcblx0XHQnJXMg55yL5LiK5Y675pivICVzIOi/memhteeahOacgOWQjuS4gOS9jee8luiAhScsXG5cdFx0JyVzIOeci+S4iuWOu+aYryAlcyDpgJnpoIHnmoTmnIDlvozkuIDkvY3nt6jogIUnXG5cdCksXG5cdHJzczogd2luZG93LndnVUxTKCdSU1MnLCAnUlNTJyksXG5cdC8vIGRpZmYgcHJldmlld3Ncblx0J0RpZmYgdHJ1bmNhdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zJzogd2luZG93LndnVUxTKCflh7rkuo7mgKfog73ogIPomZHvvIzlt67lvILlt7LooqvmiKrmlq0nLCAn5Ye65pa85pWI6IO96ICD5oWu77yM5beu55Ww5bey6KKr5oiq5pa3JyksXG5cdCdPbGQgcmV2aXNpb24nOiB3aW5kb3cud2dVTFMoJ+aXp+eJiOacrCcsICfoiIrniYjmnKwnKSxcblx0J05ldyByZXZpc2lvbic6IHdpbmRvdy53Z1VMUygn5paw54mI5pysJywgJ+aWsOeJiOacrCcpLFxuXHQnU29tZXRoaW5nIHdlbnQgd3JvbmcgOi0oJzogd2luZG93LndnVUxTKCflh7rpl67popjkuoYgOi0oJywgJ+WHuuWVj+mhjOS6hiA6LSgnKSxcblx0J0VtcHR5IHJldmlzaW9uLCBtYXliZSBub24tZXhpc3RlbnQnOiB3aW5kb3cud2dVTFMoJ+epuueahOS/ruiuou+8jOWPr+iDveW5tuS4jeWtmOWcqCcsICfnqbrnmoTkv67oqILvvIzlj6/og73kuKbkuI3lrZjlnKgnKSxcblx0J1Vua25vd24gZGF0ZSc6IHdpbmRvdy53Z1VMUygn5pyq55+l5pel5pyfJywgJ+acquefpeaXpeacnycpLFxuXHQvLyBvdGhlciBzcGVjaWFsIHByZXZpZXdzXG5cdCdFbXB0eSBjYXRlZ29yeSc6IHdpbmRvdy53Z1VMUygn56m655qE5YiG57G7JywgJ+epuueahOWIhumhnicpLFxuXHQnQ2F0ZWdvcnkgbWVtYmVycyAoJXMgc2hvd24pJzogd2luZG93LndnVUxTKCfliIbnsbvmiJDlkZjvvIglcyDmmL7npLrvvIknLCAn5YiG6aGe5oiQ5ZOh77yIJXMg6aGv56S677yJJyksXG5cdCdObyBpbWFnZSBsaW5rcyBmb3VuZCc6IHdpbmRvdy53Z1VMUygn5pyq5om+5Yiw5paH5Lu26ZO+5o6lJywgJ+acquaJvuWIsOaqlOahiOmAo+e1kCcpLFxuXHQnRmlsZSBsaW5rcyc6IHdpbmRvdy53Z1VMUygn5paH5Lu26ZO+5o6lJywgJ+aqlOahiOmAo+e1kCcpLFxuXHQnbm90IGNvbW1vbnMnOiB3aW5kb3cud2dVTFMoJ+e7tOWfuuWFseS6q+S4reaXoOatpOWQjeensOeahOaWh+S7tuOAgicsICfntq3ln7rlhbHkuqvkuK3nhKHmraTlkI3nqLHnmoTmqpTmoYjjgIInKSxcblx0J2NvbW1vbnMgb25seSc6IHdpbmRvdy53Z1VMUygn5q2k5paH5Lu25p2l6Ieq57u05Z+65YWx5Lqr44CCJywgJ+atpOaqlOahiOS+huiHque2reWfuuWFseS6q+OAgicpLFxuXHQnTm8gaW1hZ2UgZm91bmQnOiB3aW5kb3cud2dVTFMoJ+aJvuS4jeWIsOaWh+S7ticsICfmib7kuI3liLDmqpTmoYgnKSxcblx0J2NvbW1vbnMgZHVwZSc6IHdpbmRvdy53Z1VMUygn57u05Z+65YWx5Lqr5Lit5a2Y5Zyo5q2k5paH5Lu255qE5Ymv5pys44CCJywgJ+e2reWfuuWFseS6q+S4reWtmOWcqOatpOaqlOahiOeahOWJr+acrOOAgicpLFxuXHQnY29tbW9ucyBjb25mbGljdCc6IHdpbmRvdy53Z1VMUygn57u05Z+65YWx5Lqr5Lit5a2Y5Zyo5q2k5paH5Lu25ZCN56ew5LiN5ZCM55qE5Ymv5pys44CCJywgJ+e2reWfuuWFseS6q+S4reWtmOWcqOatpOaqlOWQjeeoseS4jeWQjOeahOWJr+acrOOAgicpLFxuXHQvLyB1c2VyLXJlbGF0ZWQgYWN0aW9ucyBhbmQgaW5mb1xuXHR1c2VyOiB3aW5kb3cud2dVTFMoJ+eUqOaItycsICfkvb/nlKjogIUnKSxcblx0Ly8gLy8vIHVzZXIgcGFnZSwgdGFsaywgZW1haWwsIHNwYWNlXG5cdCd1c2VyJm5ic3A7cGFnZSc6IHdpbmRvdy53Z1VMUygn55So5oi36aG1JywgJ+S9v+eUqOiAhemggScpLFxuXHQndXNlciB0YWxrJzogd2luZG93LndnVUxTKCfnlKjmiLforqjorronLCAn5L2/55So6ICF5bCN6KmxJyksXG5cdCdlZGl0IHVzZXIgdGFsayc6IHdpbmRvdy53Z1VMUygn57yW6L6R55So5oi36K6o6K66JywgJ+e3qOi8r+S9v+eUqOiAheWwjeipsScpLFxuXHQnbGVhdmUgY29tbWVudCc6IHdpbmRvdy53Z1VMUygn55WZ6KiAJywgJ+eVmeiogCcpLFxuXHRlbWFpbDogd2luZG93LndnVUxTKCfnlLXpgq4nLCAn6Zu76YO1JyksXG5cdCdlbWFpbCB1c2VyJzogd2luZG93LndnVUxTKCfnlLXpgq7nlKjmiLcnLCAn6Zu76YO15L2/55So6ICFJyksXG5cdEVtYWlsdXNlckhpbnQ6IHdpbmRvdy53Z1VMUygn57uZICVzIOWPkemAgeeUteWtkOmCruS7ticsICfntaYgJXMg55m86YCB6Zu75a2Q6YO15Lu2JyksXG5cdHNwYWNlOiB3aW5kb3cud2dVTFMoJ+WtkOmhtemdoicsICflrZDpoIHpnaInKSxcblx0Ly8gc2hvcnQgZm9ybSBmb3IgdXNlclNwYWNlIGxpbmtcblx0UHJlZml4aW5kZXhIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuiAlcyDnmoTnlKjmiLfpobXlrZDpobXpnaInLCAn6aGv56S6ICVzIOeahOS9v+eUqOiAhemggeWtkOmggemdoicpLFxuXHRjb3VudDogd2luZG93LndnVUxTKCfnu5/orqEnLCAn57Wx6KiIJyksXG5cdC8vIC8vLyBjb250cmlidXRpb25zLCB0cmVlLCBsb2dcblx0J2VkaXQgY291bnRlcic6IHdpbmRvdy53Z1VMUygn57yW6L6R5qyh5pWwJywgJ+e3qOi8r+asoeaVuCcpLFxuXHRrYXRlbGlua0hpbnQ6IHdpbmRvdy53Z1VMUygnJXMg55qE57yW6L6R5qyh5pWwJywgJyVzIOeahOe3qOi8r+asoeaVuCcpLFxuXHRjb250cmliczogd2luZG93LndnVUxTKCfotKHnjK4nLCAn6LKi5427JyksXG5cdGNvbnRyaWJ1dGlvbnM6IHdpbmRvdy53Z1VMUygn6LSh54yuJywgJ+iyoueNuycpLFxuXHRkZWxldGVkQ29udHJpYnM6IHdpbmRvdy53Z1VMUygn5bey5Yig6Zmk55qE6LSh54yuJywgJ+W3suWIqumZpOeahOiyoueNuycpLFxuXHRDb250cmlidXRpb25zSGludDogd2luZG93LndnVUxTKCclcyDnmoTnlKjmiLfotKHnjK4nLCAnJXMg55qE5L2/55So6ICF6LKi5427JyksXG5cdHRyZWU6IHdpbmRvdy53Z1VMUygn5qCRJywgJ+aouScpLFxuXHRjb250cmlic1RyZWVIaW50OiB3aW5kb3cud2dVTFMoJ+agueaNruWQjeWtl+epuumXtOafpeeciyAlcyDnmoTotKHnjK4nLCAn5qC55pOa5ZG95ZCN56m66ZaT5qqi6KaWICVzIOeahOiyoueNuycpLFxuXHRsb2c6IHdpbmRvdy53Z1VMUygn5pel5b+XJywgJ+aXpeiqjCcpLFxuXHQndXNlciBsb2cnOiB3aW5kb3cud2dVTFMoJ+eUqOaIt+aXpeW/lycsICfkvb/nlKjogIXml6XoqownKSxcblx0dXNlckxvZ0hpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S6ICVzIOeahOeUqOaIt+aXpeW/lycsICfpoa/npLogJXMg55qE5L2/55So6ICF5pel6KqMJyksXG5cdHVuYmxvY2tTaG9ydDogd2luZG93LndnVUxTKCfop6PpmaQnLCAn6Kej6ZmkJyksXG5cdGJsb2NrOiB3aW5kb3cud2dVTFMoJ+WwgeemgScsICflsIHpjpYnKSxcblx0J2Jsb2NrIHVzZXInOiB3aW5kb3cud2dVTFMoJ+WwgeemgeeUqOaItycsICflsIHpjpbkvb/nlKjogIUnKSxcblx0SXBibG9ja2xpc3RIaW50OiB3aW5kb3cud2dVTFMoJ+ino+WwgSAlcycsICfop6PlsIEgJXMnKSxcblx0QmxvY2tpcEhpbnQ6IHdpbmRvdy53Z1VMUygn5bCB56aBICVzJywgJ+WwgemOliAlcycpLFxuXHQnYmxvY2sgbG9nJzogd2luZG93LndnVUxTKCflsIHnpoHml6Xlv5cnLCAn5bCB6Y6W5pel6KqMJyksXG5cdGJsb2NrTG9nSGludDogd2luZG93LndnVUxTKCfmmL7npLogJXMg55qE5bCB56aB5pel5b+XJywgJ+mhr+ekuiAlcyDnmoTlsIHpjpbml6XoqownKSxcblx0cHJvdGVjdExvZ0hpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S6ICVzIOeahOS/neaKpOaXpeW/lycsICfpoa/npLogJXMg55qE5L+d6K235pel6KqMJyksXG5cdHBhZ2VMb2dIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuiAlcyDnmoTml6Xlv5cnLCAn6aGv56S6ICVzIOeahOaXpeiqjCcpLFxuXHRkZWxldGVMb2dIaW50OiB3aW5kb3cud2dVTFMoJ+aYvuekuiAlcyDnmoTliKDpmaTml6Xlv5cnLCAn6aGv56S6ICVzIOeahOWIqumZpOaXpeiqjCcpLFxuXHQnSW52YWxpZCAlcyAlcyc6IHdpbmRvdy53Z1VMUygn6YCJ6aG5ICVzIOS4jeWPr+eUqO+8miVzJywgJ+mBuOmghSAlcyDkuI3lj6/nlKjvvJolcycpLFxuXHRtOiAn5bCPJyxcblx0Ly8gQXV0b2VkaXRpbmdcblx0J0VudGVyIGEgbm9uLWVtcHR5IGVkaXQgc3VtbWFyeSBvciBwcmVzcyBjYW5jZWwgdG8gYWJvcnQnOiB3aW5kb3cud2dVTFMoXG5cdFx0J+i+k+WFpee8lui+keaRmOimge+8jOaIluaMieWPlua2iOS4reatouaTjeS9nCcsXG5cdFx0J+i8uOWFpee3qOi8r+aRmOimge+8jOaIluaMieWPlua2iOS4reatouaTjeS9nCdcblx0KSxcblx0J0ZhaWxlZCB0byBnZXQgcmV2aXNpb24gaW5mb3JtYXRpb24sIHBsZWFzZSBlZGl0IG1hbnVhbGx5Llxcblxcbic6IHdpbmRvdy53Z1VMUyhcblx0XHQn6I635Y+W5L+u6K6i54mI5pys5L+h5oGv5aSx6LSl77yM6K+35omL5Yqo5L+u5pS544CCXFxuXFxuJyxcblx0XHQn542y5Y+W5L+u6KiC54mI5pys6LOH6KiK5aSx5pWX77yM6KuL5omL5YuV5L+u5pS544CCXFxuXFxuJ1xuXHQpLFxuXHQnVGhlICVzIGJ1dHRvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGNsaWNrZWQuIFBsZWFzZSB3YWl0IGZvciB0aGUgbmV4dCBwYWdlIHRvIGxvYWQuJzogd2luZG93LndnVUxTKFxuXHRcdCfmjInpkq4gJXMg5bey6KKr6Ieq5Yqo54K55Ye777yM6K+3562J5b6F5LiL5LiA5Liq6aG16Z2i5Yqg6L2944CCJyxcblx0XHQn5oyJ6YiVICVzIOW3suiiq+iHquWLlem7nuaTiu+8jOiri+etieW+heS4i+S4gOWAi+mggemdoui8ieWFpeOAgidcblx0KSxcblx0J0NvdWxkIG5vdCBmaW5kIGJ1dHRvbiAlcy4gUGxlYXNlIGNoZWNrIHRoZSBzZXR0aW5ncyBpbiB5b3VyIGphdmFzY3JpcHQgZmlsZS4nOiB3aW5kb3cud2dVTFMoXG5cdFx0J+aJvuS4jeWIsOaMiemSriAlc++8jOivt+ajgOafpeaCqCBKYXZhU2NyaXB0IOaWh+S7tuS4reeahOiuvue9ruOAgicsXG5cdFx0J+aJvuS4jeWIsOaMiemIlSAlc++8jOiri+aqouafpeaCqCBKYXZhU2NyaXB0IOaqlOahiOS4reeahOioreWumuOAgidcblx0KSxcblx0Ly8gUG9wdXBzIHNldHVwXG5cdCdPcGVuIGZ1bGwtc2l6ZSBpbWFnZSc6IHdpbmRvdy53Z1VMUygn5p+l55yL5YWo5bC65a+45Zu+5YOPJywgJ+aqouimluWFqOWwuuWvuOW9seWDjycpLFxuXHQvLyDku6XkuIvlhoXlrrnnlLEgQW5uQW5nZWxhIOihpeato1xuXHRiaW5nU2VhcmNoSGludDogd2luZG93LndnVUxTKCflnKggQmluZyDkuIrmkJzntKLigJwlc+KAnScsICflnKggYmluZyDkuIrmkJzlsIvjgIwlc+OAjScpLFxuXHQnZW5hYmxlIHByZXZpZXdzJzogd2luZG93LndnVUxTKCflkK/nlKjpooTop4gnLCAn5ZWf55So6aCQ6Ka9JyksXG5cdCdzaG93IHByZXZpZXcnOiB3aW5kb3cud2dVTFMoJ+emgeeUqOmihOiniCcsICfnpoHnlKjpoJDopr0nKSxcblx0aGlzdG9yeWZlZWRIaW50OiB3aW5kb3cud2dVTFMoJ+ivpemhtemdoueahOi/keacn+abtOaUuSBSU1MgZmVlZCcsICfoqbLpoIHpnaLnmoTov5HmnJ/mm7TmlLkgUlNTIGZlZWQnKSxcblx0J3NlbmQgdGhhbmtzJzogd2luZG93LndnVUxTKCflj5HpgIHmhJ/osKInLCAn5YKz6YCB5oSf6KydJyksXG5cdFRoYW5rc0hpbnQ6IHdpbmRvdy53Z1VMUygn5ZCR6K+l55So5oi35Y+R6YCB5LiA5bCB5oSf6LCi5raI5oGvJywgJ+WQkeipsuS9v+eUqOiAheWCs+mAgeS4gOWwgeaEn+isneioiuaBrycpLFxuXHQnbWFyayBwYXRyb2xsZWQnOiB3aW5kb3cud2dVTFMoJ+agh+iusOS4uuW3suW3oeafpScsICfmqJnoqJjngrrlt7Llt6Hmn6UnKSxcblx0bWFya3BhdHJvbGxlZEhpbnQ6IHdpbmRvdy53Z1VMUygn5qCH6K6w6K+l57yW6L6R5Li65bey5beh5p+lJywgJ+aomeiomOipsue3qOi8r+eCuuW3suW3oeafpScpLFxuXHQnQ291bGQgbm90IG1hcmtlZCB0aGlzIGVkaXQgYXMgcGF0cm9sbGVkJzogd2luZG93LndnVUxTKCfml6Dms5XmoIforrDor6XnvJbovpHkuLrlt7Llt6Hmn6UnLCAn54Sh5rOV5qiZ6KiY6Kmy57eo6Lyv54K65bey5beh5p+lJyksXG5cdGRlZmF1bHRwb3B1cFJldmlld2VkU3VtbWFyeTogd2luZG93LndnVUxTKCfmoIforrDku47niYjmnKwlc+WIsCVz6Ze055qE57yW6L6R5Li65bey5beh5p+lJywgJ+aomeiomOW+nueJiOacrCVz5YiwJXPplpPnmoTnt6jovK/ngrrlt7Llt6Hmn6UnKSxcblx0J0ltYWdlIGZyb20gQ29tbW9ucyc6IHdpbmRvdy53Z1VMUygn5p2l6Ieq57u05Z+65YWx5Lqr55qE5Zu+54mHJywgJ+S+huiHque2reWfuuWFseeUqOeahOWclueJhycpLFxuXHQnRGVzY3JpcHRpb24gcGFnZSc6IHdpbmRvdy53Z1VMUygn5Zu+54mH5o+P6L+w6aG1JywgJ+WclueJh+aPj+i/sOmggScpLFxuXHQnQWx0IHRleHQ6Jzogd2luZG93LndnVUxTKCfmm7/mjaLmlofmnKzvvIhBbHTvvInvvJonLCAn5pu/5o+b5paH5a2X77yIQWx077yJ77yaJyksXG5cdHJldmRlbDogd2luZG93LndnVUxTKCfljoblj7LniYjmnKzooqvpmpDol48nLCAn5q235Y+y54mI5pys6KKr6Zqx6JePJyksXG5cdERlbGV0ZWRjb250cmlidXRpb25zSGludDogd2luZG93LndnVUxTKCfnlKjmiLclc+eahOiiq+WIoOmZpOe8lui+keasoeaVsCcsICfkvb/nlKjogIUlc+eahOiiq+WIqumZpOe3qOi8r+asoeaVuCcpLFxuXHQnTm8gYmFja2xpbmtzIGZvdW5kJzogd2luZG93LndnVUxTKCfmib7kuI3liLDpk77lhaXpobXpnaInLCAn5om+5LiN5Yiw6Y+I5YWl6aCB6Z2iJyksXG5cdCcgYW5kIG1vcmUnOiB3aW5kb3cud2dVTFMoJ+S7peWPiuWFtuS7lumhtemdoicsICfku6Xlj4rlhbbku5bpoIHpnaInKSxcblx0J0Rvd25sb2FkIHByZXZpZXcgZGF0YSc6IHdpbmRvdy53Z1VMUygn5LiL6L296aKE6KeI5pWw5o2uJywgJ+S4i+i8iemgkOimveizh+aWmScpLFxuXHQnTm90IGEgcmVnaXN0ZXJlZCB1c2VybmFtZSc6IHdpbmRvdy53Z1VMUygn6Z2e5bey5rOo5YaM55qE55So5oi3JywgJ+mdnuW3suiou+WGiueahOS9v+eUqOiAhScpLFxuXHRCTE9DS0VEOiB3aW5kb3cud2dVTFMoJ+iiq+WwgeemgScsICfooqvlsIHpjpYnKSxcblx0J0hhcyBibG9ja3MnOiB3aW5kb3cud2dVTFMoJ+iiq+mDqOWIhuWwgeemgScsICfooqvpg6jliIblsIHpjpYnKSxcblx0JyBlZGl0cyBzaW5jZTogJzogd2luZG93LndnVUxTKCfmrKHnvJbovpHvvIzms6jlhozml6XmnJ/kuLonLCAn5qyh57eo6Lyv77yM6Ki75YaK5pel5pyf54K6JyksXG5cdCdsYXN0IGVkaXQgb24gJzogd2luZG93LndnVUxTKCfmnIDlkI7kuIDmrKHnvJbovpHkuo4nLCAn5pyA5b6M5LiA5qyh57eo6Lyv5pa8JyksXG5cdEVtYWlsVXNlckhpbnQ6IHdpbmRvdy53Z1VMUygn57uZICVzIOWPkemAgeeUteWtkOmCruS7ticsICfntaYgJXMg55m86YCB6Zu75a2Q6YO15Lu2JyksXG5cdFJBTkdFQkxPQ0tFRDogd2luZG93LndnVUxTKCdJUOauteiiq+WwgeemgScsICdJUOauteiiq+WwgemOlicpLFxuXHQnSVAgdXNlcic6IHdpbmRvdy53Z1VMUygnSVDnlKjmiLcnLCAnSVDkvb/nlKjogIUnKSxcblx0J+KZgCc6ICfimYAnLFxuXHQn4pmCJzogJ+KZgicsXG5cdEhJRERFTjogd2luZG93LndnVUxTKCflhajln5/pmpDol48nLCAn5YWo5Z+f6Zqx6JePJyksXG5cdExPQ0tFRDogd2luZG93LndnVUxTKCflhajln5/plIHlrponLCAn5YWo5Z+f6Y6W5a6aJyksXG5cdCdJbnZhbGlkIHVzZXInOiB3aW5kb3cud2dVTFMoJ+mdnuazleeUqOaIt+WQjScsICfpnZ7ms5Xkvb/nlKjogIXlkI3nqLEnKSxcblx0ZGlmZjogd2luZG93LndnVUxTKCflt67lvIInLCAn5beu55WwJyksXG5cdCcgdG8gJzogJ+iHsycsXG5cblx0YXV0b2VkaXRfdmVyc2lvbjogJ25wMjAxNDA0MTYnLFxuXHRQcmVmaXhJbmRleEhpbnQ6IHdpbmRvdy53Z1VMUygn5pi+56S655So5oi3JXPnmoTlrZDpobXpnaInLCAn6aGv56S65L2/55So6ICFJXPnmoTlrZDpoIHpnaInKSxcblx0bnVsbEVkaXRTdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+i/m+ihjOS4gOasoembtue8lui+kScsICfpgLLooYzkuIDmrKHpm7bnt6jovK8nKSxcblx0Ly8g55So5oi357uE5ZCN56ew5LuO57O757uf5raI5oGv6I635Y+WXG5cdCdncm91cC1uby1hdXRvY29uZmlybWVkJzogd2luZG93LndnVUxTKCfpnZ7oh6rliqjnoa7orqTnlKjmiLcnLCAn6Z2e6Ieq5YuV56K66KqN5L2/55So6ICFJyksXG5cdHNlcGFyYXRvcjogJ+OAgScsXG5cdGNvbW1hOiAn77yMJyxcbn07XG5cbmV4cG9ydCB7bWVzc2FnZX07XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge21lc3NhZ2V9IGZyb20gJy4vc3RyaW5nJztcblxuY29uc3QgcG9wdXBzID0gKCkgPT4ge1xuXHQvLyBTVEFSVEZJTEU6IG1haW4uanNcblx0Ly8gRml4IGxhdGVyXG5cdC8vIEdsb2JhbHNcblx0Ly9cblx0Ly8gVHJ5aW5nIHRvIHNob3ZlIGFzIG1hbnkgb2YgdGhlc2UgYXMgcG9zc2libGUgaW50byB0aGUgcGcgKHBvcHVwIGdsb2JhbHMpIG9iamVjdFxuXHRjb25zdCBwZyA9IHtcblx0XHRhcGk6IHt9LFxuXHRcdHJlOiB7fSxcblx0XHRuczoge30sXG5cdFx0c3RyaW5nOiB7fSxcblx0XHR3aWtpOiB7fSxcblx0XHR1c2VyOiB7fSxcblx0XHRtaXNjOiB7fSxcblx0XHRvcHRpb246IHt9LFxuXHRcdG9wdGlvbkRlZmF1bHQ6IHt9LFxuXHRcdGZsYWc6IHt9LFxuXHRcdGNhY2hlOiB7fSxcblx0XHRzdHJ1Y3R1cmVzOiB7fSxcblx0XHR0aW1lcjoge30sXG5cdFx0Y291bnRlcjoge30sXG5cdFx0Y3VycmVudDoge30sXG5cdFx0Zm46IHt9LFxuXHRcdGVuZG9mbGlzdDogbnVsbCxcblx0fTtcblx0LyogQmFpbCBpZiB0aGUgZ2FkZ2V0L3NjcmlwdCBpcyBiZWluZyBsb2FkZWQgdHdpY2UgKi9cblx0LyogQW4gZWxlbWVudCB3aXRoIGlkIFwicGdcIiB3b3VsZCBhZGQgYSB3aW5kb3cucGcgcHJvcGVydHksIGlnbm9yZSBzdWNoIHByb3BlcnR5ICovXG5cdGlmICh3aW5kb3cucGcgJiYgISh3aW5kb3cucGcgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0LyogRXhwb3J0IHRvIGdsb2JhbCBjb250ZXh0ICovXG5cdHdpbmRvdy5wZyA9IHBnO1xuXHQvLyBFTkRGSUxFOiBtYWluLmpzXG5cdC8vIFNUQVJURklMRTogYWN0aW9ucy5qc1xuXHRjb25zdCBzZXR1cFRvb2x0aXBzID0gKGNvbnRhaW5lciwgcmVtb3ZlLCBmb3JjZSwgcG9wRGF0YSkgPT4ge1xuXHRcdGxvZyhgc2V0dXBUb29sdGlwcywgY29udGFpbmVyPSR7Y29udGFpbmVyfSwgcmVtb3ZlPSR7cmVtb3ZlfWApO1xuXHRcdGlmICghY29udGFpbmVyKSB7XG5cdFx0XHQvLyB0aGUgbWFpbiBpbml0aWFsIGNhbGxcblx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cE9uRWRpdFNlbGVjdGlvbicpICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmVkaXRmb3JtICYmIGRvY3VtZW50LmVkaXRmb3JtLndwVGV4dGJveDEpIHtcblx0XHRcdFx0ZG9jdW1lbnQuZWRpdGZvcm0ud3BUZXh0Ym94MS5vbm1vdXNldXAgPSBkb1NlbGVjdGlvblBvcHVwO1xuXHRcdFx0fVxuXHRcdFx0Ly8gYXJ0aWNsZS9jb250ZW50IGlzIGEgc3RydWN0dXJlLWRlcGVuZGVudCB0aGluZ1xuXHRcdFx0Y29udGFpbmVyID0gZGVmYXVsdFBvcHVwc0NvbnRhaW5lcigpO1xuXHRcdH1cblx0XHRpZiAoIXJlbW92ZSAmJiAhZm9yY2UgJiYgY29udGFpbmVyLnJhblNldHVwVG9vbHRpcHNBbHJlYWR5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnRhaW5lci5yYW5TZXR1cFRvb2x0aXBzQWxyZWFkeSA9ICFyZW1vdmU7XG5cdFx0Y29uc3QgYW5jaG9ycyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG5cdFx0c2V0dXBUb29sdGlwc0xvb3AoYW5jaG9ycywgMCwgMjUwLCAxMDAsIHJlbW92ZSwgcG9wRGF0YSk7XG5cdH07XG5cdGNvbnN0IGRlZmF1bHRQb3B1cHNDb250YWluZXIgPSAoKSA9PiB7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwT25seUFydGljbGVMaW5rcycpKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2tpbi12ZWN0b3ItMjAyMiAudmVjdG9yLWJvZHknKSB8fFxuXHRcdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXdfY29udGVudCcpIHx8XG5cdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb250ZW50JykgfHxcblx0XHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FydGljbGUnKSB8fFxuXHRcdFx0XHRkb2N1bWVudFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9O1xuXHRjb25zdCBzZXR1cFRvb2x0aXBzTG9vcCA9IGZ1bmN0aW9uIHNldHVwVG9vbHRpcHNMb29wKGFuY2hvcnMsIGJlZ2luLCBob3dtYW55LCBzbGVlcCwgcmVtb3ZlLCBwb3BEYXRhLCAuLi5hcmdzKSB7XG5cdFx0bG9nKFxuXHRcdFx0c2ltcGxlUHJpbnRmKCdzZXR1cFRvb2x0aXBzTG9vcCglcywlcywlcywlcywlcyknLCBbXG5cdFx0XHRcdGFuY2hvcnMsXG5cdFx0XHRcdGJlZ2luLFxuXHRcdFx0XHRob3dtYW55LFxuXHRcdFx0XHRzbGVlcCxcblx0XHRcdFx0cmVtb3ZlLFxuXHRcdFx0XHRwb3BEYXRhLFxuXHRcdFx0XHQuLi5hcmdzLFxuXHRcdFx0XSlcblx0XHQpO1xuXHRcdGNvbnN0IGZpbmlzaCA9IGJlZ2luICsgaG93bWFueTtcblx0XHRjb25zdCBsb29wZW5kID0gTWF0aC5taW4oZmluaXNoLCBhbmNob3JzLmxlbmd0aCk7XG5cdFx0bGV0IGogPSBsb29wZW5kIC0gYmVnaW47XG5cdFx0bG9nKFxuXHRcdFx0YHNldHVwVG9vbHRpcHM6IGFuY2hvcnMubGVuZ3RoPSR7YW5jaG9ycy5sZW5ndGh9LCBiZWdpbj0ke2JlZ2lufSwgaG93bWFueT0ke2hvd21hbnl9LCBsb29wZW5kPSR7bG9vcGVuZH0sIHJlbW92ZT0ke3JlbW92ZX1gXG5cdFx0KTtcblx0XHRjb25zdCBkb1Rvb2x0aXAgPSByZW1vdmUgPyByZW1vdmVUb29sdGlwIDogYWRkVG9vbHRpcDtcblx0XHQvLyB0cnkgYSBmYXN0ZXIgKD8pIGxvb3AgY29uc3RydWN0XG5cdFx0aWYgKGogPiAwKSB7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdGNvbnN0IGEgPSBhbmNob3JzW2xvb3BlbmQgLSBqXTtcblx0XHRcdFx0aWYgKGEgPT09IHVuZGVmaW5lZCB8fCAhYSB8fCAhYS5ocmVmKSB7XG5cdFx0XHRcdFx0bG9nKGBnb3QgbnVsbCBhbmNob3IgYXQgaW5kZXggJHtsb29wZW5kfWAgLSBqKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkb1Rvb2x0aXAoYSwgcG9wRGF0YSk7XG5cdFx0XHR9IHdoaWxlICgtLWopO1xuXHRcdH1cblx0XHRpZiAoZmluaXNoIDwgYW5jaG9ycy5sZW5ndGgpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZXR1cFRvb2x0aXBzTG9vcChhbmNob3JzLCBmaW5pc2gsIGhvd21hbnksIHNsZWVwLCByZW1vdmUsIHBvcERhdGEpO1xuXHRcdFx0fSwgc2xlZXApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXJlbW92ZSAmJiAhZ2V0VmFsdWVPZigncG9wdXBUb2NMaW5rcycpKSB7XG5cdFx0XHRcdHJtVG9jVG9vbHRpcHMoKTtcblx0XHRcdH1cblx0XHRcdHBnLmZsYWcuZmluaXNoZWRMb2FkaW5nID0gdHJ1ZTtcblx0XHR9XG5cdH07XG5cdC8vIGVsaW1pbmF0ZSBwb3B1cHMgZnJvbSB0aGUgVE9DXG5cdC8vIFRoaXMgYWxzbyBraWxscyBhbnkgb25jbGljayBzdHVmZiB0aGF0IHVzZWQgdG8gYmUgZ29pbmcgb24gaW4gdGhlIHRvY1xuXHRjb25zdCBybVRvY1Rvb2x0aXBzID0gKCkgPT4ge1xuXHRcdGNvbnN0IHRvYyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0b2MnKTtcblx0XHRpZiAodG9jKSB7XG5cdFx0XHRjb25zdCB0b2NMaW5rcyA9IHRvYy5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG5cdFx0XHRjb25zdCB0b2NMZW4gPSB0b2NMaW5rcy5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHRvY0xlbjsgKytqKSB7XG5cdFx0XHRcdHJlbW92ZVRvb2x0aXAodG9jTGlua3Nbal0sIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3QgYWRkVG9vbHRpcCA9IChhLCBwb3BEYXRhKSA9PiB7XG5cdFx0aWYgKCFpc1BvcHVwTGluayhhKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhLm9ubW91c2VvdmVyID0gbW91c2VPdmVyV2lraUxpbms7XG5cdFx0YS5vbm1vdXNlb3V0ID0gbW91c2VPdXRXaWtpTGluaztcblx0XHRhLm9ubW91c2Vkb3duID0ga2lsbFBvcHVwO1xuXHRcdGEuaGFzUG9wdXAgPSB0cnVlO1xuXHRcdGEucG9wRGF0YSA9IHBvcERhdGE7XG5cdH07XG5cdGNvbnN0IHJlbW92ZVRvb2x0aXAgPSAoYSkgPT4ge1xuXHRcdGlmICghYS5oYXNQb3B1cCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhLm9ubW91c2VvdmVyID0gbnVsbDtcblx0XHRhLm9ubW91c2VvdXQgPSBudWxsO1xuXHRcdGlmIChhLm9yaWdpbmFsVGl0bGUpIHtcblx0XHRcdGEudGl0bGUgPSBhLm9yaWdpbmFsVGl0bGU7XG5cdFx0fVxuXHRcdGEuaGFzUG9wdXAgPSBmYWxzZTtcblx0fTtcblx0Y29uc3QgcmVtb3ZlVGl0bGUgPSAoYSkgPT4ge1xuXHRcdGEub3JpZ2luYWxUaXRsZSB8fD0gYS50aXRsZTtcblx0XHRhLnRpdGxlID0gJyc7XG5cdH07XG5cdGNvbnN0IHJlc3RvcmVUaXRsZSA9IChhKSA9PiB7XG5cdFx0aWYgKGEudGl0bGUgfHwgIWEub3JpZ2luYWxUaXRsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhLnRpdGxlID0gYS5vcmlnaW5hbFRpdGxlO1xuXHR9O1xuXHRjb25zdCByZWdpc3Rlckhvb2tzID0gKG5wKSA9PiB7XG5cdFx0Y29uc3QgcG9wdXBNYXhXaWR0aCA9IGdldFZhbHVlT2YoJ3BvcHVwTWF4V2lkdGgnKTtcblx0XHRpZiAodHlwZW9mIHBvcHVwTWF4V2lkdGggPT09ICdudW1iZXInKSB7XG5cdFx0XHRjb25zdCBzZXRNYXhXaWR0aCA9ICgpID0+IHtcblx0XHRcdFx0bnAubWFpbkRpdi5zdHlsZS5tYXhXaWR0aCA9IGAke3BvcHVwTWF4V2lkdGh9cHhgO1xuXHRcdFx0XHRucC5tYXhXaWR0aCA9IHBvcHVwTWF4V2lkdGg7XG5cdFx0XHR9O1xuXHRcdFx0bnAuYWRkSG9vayhzZXRNYXhXaWR0aCwgJ3VuaGlkZScsICdiZWZvcmUnKTtcblx0XHR9XG5cdFx0bnAuYWRkSG9vayhhZGRQb3B1cFNob3J0Y3V0cywgJ3VuaGlkZScsICdhZnRlcicpO1xuXHRcdG5wLmFkZEhvb2socm1Qb3B1cFNob3J0Y3V0cywgJ2hpZGUnLCAnYmVmb3JlJyk7XG5cdH07XG5cdGNvbnN0IHJlbW92ZU1vZGlmaWVyS2V5TGlzdGVuZXIgPSAoYSkgPT4ge1xuXHRcdC8vIHJlbW92ZSBsaXN0ZW5lcnMgZm9yIG1vZGlmaWVyIGtleSBpZiBhbnkgdGhhdCB3ZXJlIGFkZGVkIGluIG1vdXNlT3Zlcldpa2lMaW5rXG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGEubW9kaWZpZXJLZXlMaXN0ZW5lciwgZmFsc2UpO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgYS5tb2RpZmllcktleUxpc3RlbmVyLCBmYWxzZSk7XG5cdH07XG5cdGNvbnN0IG1vdXNlT3Zlcldpa2lMaW5rID0gZnVuY3Rpb24gbW91c2VPdmVyV2lraUxpbmsoZXZ0KSB7XG5cdFx0aWYgKCFldnQgJiYgd2luZG93LmV2ZW50KSB7XG5cdFx0XHRldnQgPSB3aW5kb3cuZXZlbnQ7XG5cdFx0fVxuXHRcdC8vIGlmIHRoZSBtb2RpZmllciBpcyBuZWVkZWQsIGxpc3RlbiBmb3IgaXQsXG5cdFx0Ly8gd2Ugd2lsbCByZW1vdmUgdGhlIGxpc3RlbmVyIHdoZW4gd2UgbW91c2VvdXQgb2YgdGhpcyBsaW5rIG9yIGtpbGwgcG9wdXAuXG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwTW9kaWZpZXInKSkge1xuXHRcdFx0Ly8gaWYgcG9wdXBNb2RpZmllckFjdGlvbiA9IGVuYWJsZSwgd2Ugc2hvdWxkIHBvcHVwIHdoZW4gdGhlIG1vZGlmaWVyIGlzIHByZXNzZWRcblx0XHRcdC8vIGlmIHBvcHVwTW9kaWZpZXJBY3Rpb24gPSBkaXNhYmxlLCB3ZSBzaG91bGQgcG9wdXAgdW5sZXNzIHRoZSBtb2RpZmllciBpcyBwcmVzc2VkXG5cdFx0XHRjb25zdCBhY3Rpb24gPSBnZXRWYWx1ZU9mKCdwb3B1cE1vZGlmaWVyQWN0aW9uJyk7XG5cdFx0XHRjb25zdCBrZXkgPSBhY3Rpb24gPT09ICdkaXNhYmxlJyA/ICdrZXl1cCcgOiAna2V5ZG93bic7XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdHNlbGYubW9kaWZpZXJLZXlMaXN0ZW5lciA9IChldnQpID0+IHtcblx0XHRcdFx0bW91c2VPdmVyV2lraUxpbmsyKHNlbGYsIGV2dCk7XG5cdFx0XHR9O1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihrZXksIHNlbGYubW9kaWZpZXJLZXlMaXN0ZW5lciwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW91c2VPdmVyV2lraUxpbmsyKHRoaXMsIGV2dCk7XG5cdH07XG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWZlcmVuY2VzIGxpc3QgaXRlbSB0aGF0IHRoZSBwcm92aWRlZCBmb290bm90ZSBsaW5rIHRhcmdldHMuIFRoaXNcblx0ICogaXMgdHlwaWNhbGx5IGEgbGkgZWxlbWVudCB3aXRoaW4gdGhlIG9sLnJlZmVyZW5jZXMgZWxlbWVudCBpbnNpZGUgdGhlIHJlZmxpc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gYSAtIEEgZm9vdG5vdGUgbGluay5cblx0ICogQHJldHVybiB7RWxlbWVudHxib29sZWFufSBUaGUgdGFyZ2V0ZWQgZWxlbWVudCwgb3IgZmFsc2UgaWYgb25lIGNhbid0IGJlIGZvdW5kLlxuXHQgKi9cblx0Y29uc3QgZm9vdG5vdGVUYXJnZXQgPSAoYSkgPT4ge1xuXHRcdGNvbnN0IGFUaXRsZSA9IFRpdGxlLmZyb21BbmNob3IoYSk7XG5cdFx0Ly8gV2Ugd2FudCBcIi4zQVwiIHJhdGhlciB0aGFuIFwiJTNBXCIgb3IgXCI/XCIgaGVyZSwgc28gdXNlIHRoZSBhbmNob3IgcHJvcGVydHkgZGlyZWN0bHlcblx0XHRjb25zdCBhbmNoID0gYVRpdGxlLmFuY2hvcjtcblx0XHRpZiAoIS9eKGNpdGVfbm90ZS18X25vdGUtfGVuZG5vdGUpLy50ZXN0KGFuY2gpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGxUaXRsZSA9IFRpdGxlLmZyb21VUkwobG9jYXRpb24uaHJlZik7XG5cdFx0aWYgKGxUaXRsZS50b1N0cmluZyh0cnVlKSAhPT0gYVRpdGxlLnRvU3RyaW5nKHRydWUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGxldCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2FuY2h9YCk7XG5cdFx0d2hpbGUgKGVsICYmIHR5cGVvZiBlbC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGNvbnN0IG50ID0gZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdGlmIChudCA9PT0gJ2xpJykge1xuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9IGVsc2UgaWYgKG50ID09PSAnYm9keScpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChlbC5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdGVsID0gZWwucGFyZW50Tm9kZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXHRjb25zdCBmb290bm90ZVByZXZpZXcgPSAoeCwgbmF2cG9wKSA9PiB7XG5cdFx0c2V0UG9wdXBIVE1MKGA8aHI+JHt4LmlubmVySFRNTH1gLCAncG9wdXBQcmV2aWV3JywgbmF2cG9wLmlkTnVtYmVyKTtcblx0fTtcblx0Y29uc3QgbW9kaWZpZXJQcmVzc2VkID0gKGV2dCkgPT4ge1xuXHRcdGNvbnN0IG1vZCA9IGdldFZhbHVlT2YoJ3BvcHVwTW9kaWZpZXInKTtcblx0XHRpZiAoIW1vZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIWV2dCAmJiB3aW5kb3cuZXZlbnQpIHtcblx0XHRcdGV2dCA9IHdpbmRvdy5ldmVudDtcblx0XHR9XG5cdFx0cmV0dXJuIGV2dCAmJiBtb2QgJiYgZXZ0W2Ake21vZC50b0xvd2VyQ2FzZSgpfUtleWBdO1xuXHR9O1xuXHQvLyBDaGVja3MgaWYgdGhlIGNvcnJlY3QgbW9kaWZpZXIgcHJlc3NlZC91bnByZXNzZWQgaWYgbmVlZGVkXG5cdGNvbnN0IGlzQ29ycmVjdE1vZGlmaWVyID0gKF9hLCBldnQpID0+IHtcblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwTW9kaWZpZXInKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdC8vIGlmIHBvcHVwTW9kaWZpZXJBY3Rpb24gPSBlbmFibGUsIHdlIHNob3VsZCBwb3B1cCB3aGVuIHRoZSBtb2RpZmllciBpcyBwcmVzc2VkXG5cdFx0Ly8gaWYgcG9wdXBNb2RpZmllckFjdGlvbiA9IGRpc2FibGUsIHdlIHNob3VsZCBwb3B1cCB1bmxlc3MgdGhlIG1vZGlmaWVyIGlzIHByZXNzZWRcblx0XHRjb25zdCBhY3Rpb24gPSBnZXRWYWx1ZU9mKCdwb3B1cE1vZGlmaWVyQWN0aW9uJyk7XG5cdFx0cmV0dXJuIChhY3Rpb24gPT09ICdlbmFibGUnICYmIG1vZGlmaWVyUHJlc3NlZChldnQpKSB8fCAoYWN0aW9uID09PSAnZGlzYWJsZScgJiYgIW1vZGlmaWVyUHJlc3NlZChldnQpKTtcblx0fTtcblx0Y29uc3QgbW91c2VPdmVyV2lraUxpbmsyID0gKGEsIGV2dCkgPT4ge1xuXHRcdGlmICghaXNDb3JyZWN0TW9kaWZpZXIoYSwgZXZ0KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoZ2V0VmFsdWVPZigncmVtb3ZlVGl0bGVzJykpIHtcblx0XHRcdHJlbW92ZVRpdGxlKGEpO1xuXHRcdH1cblx0XHRpZiAoYSA9PT0gcGcuY3VycmVudC5saW5rICYmIGEubmF2cG9wdXAgJiYgYS5uYXZwb3B1cC5pc1Zpc2libGUoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwZy5jdXJyZW50LmxpbmsgPSBhO1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdzaW1wbGVQb3B1cHMnKSAmJiAhcGcub3B0aW9uLnBvcHVwU3RydWN0dXJlKSB7XG5cdFx0XHQvLyByZXNldCAqZGVmYXVsdCB2YWx1ZSogb2YgcG9wdXBTdHJ1Y3R1cmVcblx0XHRcdHNldERlZmF1bHQoJ3BvcHVwU3RydWN0dXJlJywgJ29yaWdpbmFsJyk7XG5cdFx0fVxuXHRcdGNvbnN0IGFydGljbGUgPSBuZXcgVGl0bGUoKS5mcm9tQW5jaG9yKGEpO1xuXHRcdC8vIHNldCBnbG9iYWwgdmFyaWFibGUgKHVnaCkgdG8gaG9sZCBhcnRpY2xlICh3aWtpcGFnZSlcblx0XHRwZy5jdXJyZW50LmFydGljbGUgPSBhcnRpY2xlO1xuXHRcdGlmICghYS5uYXZwb3B1cCkge1xuXHRcdFx0YS5uYXZwb3B1cCA9IG5ld05hdnBvcHVwKGEsIGFydGljbGUpO1xuXHRcdFx0cGcuY3VycmVudC5saW5rc0hhc2hbYS5ocmVmXSA9IGEubmF2cG9wdXA7XG5cdFx0XHRwZy5jdXJyZW50LmxpbmtzLnB1c2goYSk7XG5cdFx0fVxuXHRcdGlmIChhLm5hdnBvcHVwLnBlbmRpbmcgPT09IG51bGwgfHwgYS5uYXZwb3B1cC5wZW5kaW5nICE9PSAwKSB7XG5cdFx0XHQvLyBlaXRoZXIgZnJlc2ggcG9wdXBzIG9yIHRob3NlIHdpdGggdW5maW5zaGVkIGJ1c2luZXNzIGFyZSByZWRvbmUgZnJvbSBzY3JhdGNoXG5cdFx0XHRzaW1wbGVQb3B1cENvbnRlbnQoYSwgYXJ0aWNsZSk7XG5cdFx0fVxuXHRcdGEubmF2cG9wdXAuc2hvd1Nvb25JZlN0YWJsZShhLm5hdnBvcHVwLmRlbGF5KTtcblx0XHRjbGVhckludGVydmFsKHBnLnRpbWVyLmNoZWNrUG9wdXBQb3NpdGlvbik7XG5cdFx0cGcudGltZXIuY2hlY2tQb3B1cFBvc2l0aW9uID0gc2V0SW50ZXJ2YWwoY2hlY2tQb3B1cFBvc2l0aW9uLCA2MDApO1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdzaW1wbGVQb3B1cHMnKSAmJiBnZXRWYWx1ZU9mKCdwb3B1cFByZXZpZXdCdXR0b24nKSAmJiAhYS5zaW1wbGVOb01vcmUpIHtcblx0XHRcdGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdGQuY2xhc3NOYW1lID0gJ3BvcHVwUHJldmlld0J1dHRvbkRpdic7XG5cdFx0XHRjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdFx0ZC5hcHBlbmQocyk7XG5cdFx0XHRzLmNsYXNzTmFtZSA9ICdwb3B1cFByZXZpZXdCdXR0b24nO1xuXHRcdFx0c1tgb24ke2dldFZhbHVlT2YoJ3BvcHVwUHJldmlld0J1dHRvbkV2ZW50Jyl9YF0gPSAoKSA9PiB7XG5cdFx0XHRcdGEuc2ltcGxlTm9Nb3JlID0gdHJ1ZTtcblx0XHRcdFx0ZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHRcdFx0XHRub25zaW1wbGVQb3B1cENvbnRlbnQoYSwgYXJ0aWNsZSk7XG5cdFx0XHR9O1xuXHRcdFx0cy5pbm5lckhUTUwgPSBwb3B1cFN0cmluZygnc2hvdyBwcmV2aWV3Jyk7XG5cdFx0XHRzZXRQb3B1cEhUTUwoZCwgJ3BvcHVwUHJldmlldycsIGEubmF2cG9wdXAuaWROdW1iZXIpO1xuXHRcdH1cblx0XHRpZiAoYS5uYXZwb3B1cC5wZW5kaW5nICE9PSAwKSB7XG5cdFx0XHRub25zaW1wbGVQb3B1cENvbnRlbnQoYSwgYXJ0aWNsZSk7XG5cdFx0fVxuXHR9O1xuXHQvLyBzaW1wbGVQb3B1cENvbnRlbnQ6IHRoZSBjb250ZW50IHRoYXQgZG8gbm90IHJlcXVpcmUgYWRkaXRpb25hbCBkb3dubG9hZFxuXHQvLyAoaXQgaXMgc2hvd24gZXZlbiB3aGVuIHNpbXBsZVBvcHVwcyBpcyB0cnVlKVxuXHRjb25zdCBzaW1wbGVQb3B1cENvbnRlbnQgPSAoYSwgYXJ0aWNsZSkgPT4ge1xuXHRcdC8qIEZJWE1FIGhhY2sgKi9cblx0XHRhLm5hdnBvcHVwLmhhc1BvcHVwTWVudSA9IGZhbHNlO1xuXHRcdGEubmF2cG9wdXAuc2V0SW5uZXJIVE1MKHBvcHVwSFRNTChhKSk7XG5cdFx0ZmlsbEVtcHR5U3BhbnMoe1xuXHRcdFx0bmF2cG9wdXA6IGEubmF2cG9wdXAsXG5cdFx0fSk7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwRHJhZ2dhYmxlJykpIHtcblx0XHRcdGxldCBkcmFnSGFuZGxlID0gZ2V0VmFsdWVPZigncG9wdXBEcmFnSGFuZGxlJykgfHwgbnVsbDtcblx0XHRcdGlmIChkcmFnSGFuZGxlICYmIGRyYWdIYW5kbGUgIT09ICdhbGwnKSB7XG5cdFx0XHRcdGRyYWdIYW5kbGUgKz0gYS5uYXZwb3B1cC5pZE51bWJlcjtcblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRhLm5hdnBvcHVwLm1ha2VEcmFnZ2FibGUoZHJhZ0hhbmRsZSk7XG5cdFx0XHR9LCAxNTApO1xuXHRcdH1cblx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBSZWRsaW5rUmVtb3ZhbCcpICYmIGEuY2xhc3NOYW1lID09PSAnbmV3Jykge1xuXHRcdFx0c2V0UG9wdXBIVE1MKGA8YnI+JHtwb3B1cFJlZGxpbmtIVE1MKGFydGljbGUpfWAsICdwb3B1cFJlZGxpbmsnLCBhLm5hdnBvcHVwLmlkTnVtYmVyKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGRlYnVnRGF0YSA9IChuYXZwb3B1cCkgPT4ge1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cERlYnVnZ2luZycpICYmIG5hdnBvcHVwLmlkTnVtYmVyKSB7XG5cdFx0XHRzZXRQb3B1cEhUTUwoYGlkTnVtYmVyPSR7bmF2cG9wdXAuaWROdW1iZXJ9LCBwZW5kaW5nPSR7bmF2cG9wdXAucGVuZGluZ31gLCAncG9wdXBFcnJvcicsIG5hdnBvcHVwLmlkTnVtYmVyKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IG5ld05hdnBvcHVwID0gKGEsIGFydGljbGUpID0+IHtcblx0XHRjb25zdCBuYXZwb3B1cCA9IG5ldyBOYXZwb3B1cCgpO1xuXHRcdG5hdnBvcHVwLmZ1enogPSA1O1xuXHRcdG5hdnBvcHVwLmRlbGF5ID0gZ2V0VmFsdWVPZigncG9wdXBEZWxheScpICogMTAwMDtcblx0XHQvLyBpbmNyZW1lbnQgZ2xvYmFsIGNvdW50ZXIgbm93XG5cdFx0bmF2cG9wdXAuaWROdW1iZXIgPSArK3BnLmlkTnVtYmVyO1xuXHRcdG5hdnBvcHVwLnBhcmVudEFuY2hvciA9IGE7XG5cdFx0bmF2cG9wdXAucGFyZW50UG9wdXAgPSBhLnBvcERhdGEgJiYgYS5wb3BEYXRhLm93bmVyO1xuXHRcdG5hdnBvcHVwLmFydGljbGUgPSBhcnRpY2xlO1xuXHRcdHJlZ2lzdGVySG9va3MobmF2cG9wdXApO1xuXHRcdHJldHVybiBuYXZwb3B1cDtcblx0fTtcblx0Ly8gU2hvdWxkIHdlIHNob3cgbm9uc2ltcGxlIGNvbnRleHQ/XG5cdC8vIElmIHNpbXBsZVBvcHVwcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiB3ZSBkbyBub3Qgc2hvdyBub25zaW1wbGUgY29udGV4dCxcblx0Ly8gYnV0IGlmIGEgYm90dG9tIFwic2hvdyBwcmV2aWV3XCIgd2FzIGNsaWNrZWQgd2UgZG8gc2hvdyBub25zaW1wbGUgY29udGV4dFxuXHRjb25zdCBzaG91bGRTaG93Tm9uU2ltcGxlID0gKGEpID0+IHtcblx0XHRyZXR1cm4gIWdldFZhbHVlT2YoJ3NpbXBsZVBvcHVwcycpIHx8IGEuc2ltcGxlTm9Nb3JlO1xuXHR9O1xuXHQvLyBTaG91bGQgd2Ugc2hvdyBub25zaW1wbGUgY29udGV4dCBnb3Zlcm4gYnkgdGhlIG9wdGlvbiAoZS5nLiBwb3B1cFVzZXJJbmZvKT9cblx0Ly8gSWYgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tlZCBmb3Igbm9uc2ltcGxlIGNvbnRleHQgYnkgc2V0dGluZyB0aGUgb3B0aW9uIHRvIHRydWUsXG5cdC8vIHRoZW4gd2Ugc2hvdyBpdCBldmVuIGluIG5vbnNpbXBsZSBtb2RlLlxuXHRjb25zdCBzaG91bGRTaG93ID0gKGEsIG9wdGlvbikgPT4ge1xuXHRcdGlmIChzaG91bGRTaG93Tm9uU2ltcGxlKGEpKSB7XG5cdFx0XHRyZXR1cm4gZ2V0VmFsdWVPZihvcHRpb24pO1xuXHRcdH1cblx0XHRyZXR1cm4gd2luZG93W29wdGlvbl0gIT09IHVuZGVmaW5lZCAmJiB3aW5kb3dbb3B0aW9uXTtcblx0fTtcblx0Y29uc3Qgbm9uc2ltcGxlUG9wdXBDb250ZW50ID0gKGEsIGFydGljbGUpID0+IHtcblx0XHRsZXQgZGlmZjtcblx0XHRsZXQgaGlzdG9yeTtcblx0XHRjb25zdCBwYXJhbXMgPSBwYXJzZVBhcmFtcyhhLmhyZWYpO1xuXHRcdGNvbnN0IG9sZGlkID0gcGFyYW1zLm9sZGlkID09PSB1bmRlZmluZWQgPyBudWxsIDogcGFyYW1zLm9sZGlkO1xuXHRcdGlmIChzaG91bGRTaG93KGEsICdwb3B1cFByZXZpZXdEaWZmcycpKSB7XG5cdFx0XHQoe2RpZmZ9ID0gcGFyYW1zKTtcblx0XHR9XG5cdFx0aWYgKHNob3VsZFNob3coYSwgJ3BvcHVwUHJldmlld0hpc3RvcnknKSkge1xuXHRcdFx0aGlzdG9yeSA9IHBhcmFtcy5hY3Rpb24gPT09ICdoaXN0b3J5Jztcblx0XHR9XG5cdFx0YS5uYXZwb3B1cC5wZW5kaW5nID0gMDtcblx0XHRjb25zdCByZWZlcmVuY2VFbGVtZW50ID0gZm9vdG5vdGVUYXJnZXQoYSk7XG5cdFx0aWYgKHJlZmVyZW5jZUVsZW1lbnQpIHtcblx0XHRcdGZvb3Rub3RlUHJldmlldyhyZWZlcmVuY2VFbGVtZW50LCBhLm5hdnBvcHVwKTtcblx0XHR9IGVsc2UgaWYgKGRpZmYgfHwgZGlmZiA9PT0gMCkge1xuXHRcdFx0bG9hZERpZmYoYXJ0aWNsZSwgb2xkaWQsIGRpZmYsIGEubmF2cG9wdXApO1xuXHRcdH0gZWxzZSBpZiAoaGlzdG9yeSkge1xuXHRcdFx0bG9hZEFQSVByZXZpZXcoJ2hpc3RvcnknLCBhcnRpY2xlLCBhLm5hdnBvcHVwKTtcblx0XHR9IGVsc2UgaWYgKHNob3VsZFNob3dOb25TaW1wbGUoYSkgJiYgcGcucmUuY29udHJpYnMudGVzdChhLmhyZWYpKSB7XG5cdFx0XHRsb2FkQVBJUHJldmlldygnY29udHJpYnMnLCBhcnRpY2xlLCBhLm5hdnBvcHVwKTtcblx0XHR9IGVsc2UgaWYgKHNob3VsZFNob3dOb25TaW1wbGUoYSkgJiYgcGcucmUuYmFja2xpbmtzLnRlc3QoYS5ocmVmKSkge1xuXHRcdFx0bG9hZEFQSVByZXZpZXcoJ2JhY2tsaW5rcycsIGFydGljbGUsIGEubmF2cG9wdXApO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQvLyBGSVhNRSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYWxsIHByZXZpZXcgY29tYmluYXRpb25zIHdpdGggb3B0aW9uc1xuXHRcdFx0YXJ0aWNsZS5uYW1lc3BhY2VJZCgpID09PSBwZy5uc0ltYWdlSWQgJiZcblx0XHRcdChzaG91bGRTaG93KGEsICdpbWFnZVBvcHVwc0ZvckltYWdlcycpIHx8ICFhbmNob3JDb250YWluc0ltYWdlKGEpKVxuXHRcdCkge1xuXHRcdFx0bG9hZEFQSVByZXZpZXcoJ2ltYWdlcGFnZXByZXZpZXcnLCBhcnRpY2xlLCBhLm5hdnBvcHVwKTtcblx0XHRcdGxvYWRJbWFnZShhcnRpY2xlLCBhLm5hdnBvcHVwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGFydGljbGUubmFtZXNwYWNlSWQoKSA9PT0gcGcubnNDYXRlZ29yeUlkICYmIHNob3VsZFNob3coYSwgJ3BvcHVwQ2F0ZWdvcnlNZW1iZXJzJykpIHtcblx0XHRcdFx0bG9hZEFQSVByZXZpZXcoJ2NhdGVnb3J5JywgYXJ0aWNsZSwgYS5uYXZwb3B1cCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoYXJ0aWNsZS5uYW1lc3BhY2VJZCgpID09PSBwZy5uc1VzZXJJZCB8fCBhcnRpY2xlLm5hbWVzcGFjZUlkKCkgPT09IHBnLm5zVXNlcnRhbGtJZCkgJiZcblx0XHRcdFx0c2hvdWxkU2hvdyhhLCAncG9wdXBVc2VySW5mbycpXG5cdFx0XHQpIHtcblx0XHRcdFx0bG9hZEFQSVByZXZpZXcoJ3VzZXJpbmZvJywgYXJ0aWNsZSwgYS5uYXZwb3B1cCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2hvdWxkU2hvd05vblNpbXBsZShhKSkge1xuXHRcdFx0XHRzdGFydEFydGljbGVQcmV2aWV3KGFydGljbGUsIG9sZGlkLCBhLm5hdnBvcHVwKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IHBlbmRpbmdOYXZwb3BUYXNrID0gKG5hdnBvcCkgPT4ge1xuXHRcdGlmIChuYXZwb3AgJiYgbmF2cG9wLnBlbmRpbmcgPT09IG51bGwpIHtcblx0XHRcdG5hdnBvcC5wZW5kaW5nID0gMDtcblx0XHR9XG5cdFx0KytuYXZwb3AucGVuZGluZztcblx0XHRkZWJ1Z0RhdGEobmF2cG9wKTtcblx0fTtcblx0Y29uc3QgY29tcGxldGVkTmF2cG9wVGFzayA9IChuYXZwb3ApID0+IHtcblx0XHRpZiAobmF2cG9wICYmIG5hdnBvcC5wZW5kaW5nKSB7XG5cdFx0XHQtLW5hdnBvcC5wZW5kaW5nO1xuXHRcdH1cblx0XHRkZWJ1Z0RhdGEobmF2cG9wKTtcblx0fTtcblx0Y29uc3Qgc3RhcnRBcnRpY2xlUHJldmlldyA9IChhcnRpY2xlLCBvbGRpZCwgbmF2cG9wKSA9PiB7XG5cdFx0bmF2cG9wLnJlZGlyID0gMDtcblx0XHRsb2FkUHJldmlldyhhcnRpY2xlLCBvbGRpZCwgbmF2cG9wKTtcblx0fTtcblx0Y29uc3QgbG9hZFByZXZpZXcgPSAoYXJ0aWNsZSwgb2xkaWQsIG5hdnBvcCkgPT4ge1xuXHRcdGlmICghbmF2cG9wLnJlZGlyKSB7XG5cdFx0XHRuYXZwb3Aub3JpZ2luYWxBcnRpY2xlID0gYXJ0aWNsZTtcblx0XHR9XG5cdFx0YXJ0aWNsZS5vbGRpZCA9IG9sZGlkO1xuXHRcdGxvYWRBUElQcmV2aWV3KCdyZXZpc2lvbicsIGFydGljbGUsIG5hdnBvcCk7XG5cdH07XG5cdGNvbnN0IGxvYWRQcmV2aWV3RnJvbVJlZGlyID0gKHJlZGlyTWF0Y2gsIG5hdnBvcCkgPT4ge1xuXHRcdC8vIHJlZGlyTWF0Y2ggaXMgYSByZWdleCBtYXRjaFxuXHRcdGNvbnN0IHRhcmdldCA9IG5ldyBUaXRsZSgpLmZyb21XaWtpVGV4dChyZWRpck1hdGNoWzJdKTtcblx0XHQvLyBvdmVyd3JpdGUgKG9yIGFkZCkgYW5jaG9yIGZyb20gb3JpZ2luYWwgdGFyZ2V0XG5cdFx0Ly8gbWVkaWF3aWtpIGRvZXMgb3ZlcndyaXRlXG5cdFx0aWYgKG5hdnBvcC5hcnRpY2xlLmFuY2hvcikge1xuXHRcdFx0dGFyZ2V0LmFuY2hvciA9IG5hdnBvcC5hcnRpY2xlLmFuY2hvcjtcblx0XHR9XG5cdFx0bmF2cG9wLnJlZGlyKys7XG5cdFx0bmF2cG9wLnJlZGlyVGFyZ2V0ID0gdGFyZ2V0O1xuXHRcdGNvbnN0IHdhcm5SZWRpciA9IHJlZGlyTGluayh0YXJnZXQsIG5hdnBvcC5hcnRpY2xlKTtcblx0XHRzZXRQb3B1cEhUTUwod2FyblJlZGlyLCAncG9wdXBXYXJuUmVkaXInLCBuYXZwb3AuaWROdW1iZXIpO1xuXHRcdG5hdnBvcC5hcnRpY2xlID0gdGFyZ2V0O1xuXHRcdGZpbGxFbXB0eVNwYW5zKHtcblx0XHRcdHJlZGlyOiB0cnVlLFxuXHRcdFx0cmVkaXJUYXJnZXQ6IHRhcmdldCxcblx0XHRcdG5hdnBvcHVwOiBuYXZwb3AsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGxvYWRQcmV2aWV3KHRhcmdldCwgbnVsbCwgbmF2cG9wKTtcblx0fTtcblx0Y29uc3QgaW5zZXJ0UHJldmlldyA9IChkb3dubG9hZCkgPT4ge1xuXHRcdGlmICghZG93bmxvYWQub3duZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcmVkaXJNYXRjaCA9IHBnLnJlLnJlZGlyZWN0LmV4ZWMoZG93bmxvYWQuZGF0YSk7XG5cdFx0aWYgKGRvd25sb2FkLm93bmVyLnJlZGlyID09PSAwICYmIHJlZGlyTWF0Y2gpIHtcblx0XHRcdGxvYWRQcmV2aWV3RnJvbVJlZGlyKHJlZGlyTWF0Y2gsIGRvd25sb2FkLm93bmVyKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRvd25sb2FkLm93bmVyLnZpc2libGUgfHwgIWdldFZhbHVlT2YoJ3BvcHVwTGF6eVByZXZpZXdzJykpIHtcblx0XHRcdGluc2VydFByZXZpZXdOb3coZG93bmxvYWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpZCA9IGRvd25sb2FkLm93bmVyLnJlZGlyID8gJ1BSRVZJRVdfUkVESVJfSE9PSycgOiAnUFJFVklFV19IT09LJztcblx0XHRcdGRvd25sb2FkLm93bmVyLmFkZEhvb2soXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpbnNlcnRQcmV2aWV3Tm93KGRvd25sb2FkKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0J3VuaGlkZScsXG5cdFx0XHRcdCdhZnRlcicsXG5cdFx0XHRcdGlkXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgaW5zZXJ0UHJldmlld05vdyA9IChkb3dubG9hZCkgPT4ge1xuXHRcdGlmICghZG93bmxvYWQub3duZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgd2lraVRleHQgPSBkb3dubG9hZC5kYXRhO1xuXHRcdGNvbnN0IG5hdnBvcCA9IGRvd25sb2FkLm93bmVyO1xuXHRcdGNvbnN0IGFydCA9IG5hdnBvcC5yZWRpclRhcmdldCB8fCBuYXZwb3Aub3JpZ2luYWxBcnRpY2xlO1xuXHRcdG1ha2VGaXhEYWJzKHdpa2lUZXh0LCBuYXZwb3ApO1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cFN1bW1hcnlEYXRhJykpIHtcblx0XHRcdGdldFBhZ2VJbmZvKHdpa2lUZXh0LCBkb3dubG9hZCk7XG5cdFx0XHRzZXRQb3B1cFRyYWlsZXIoZ2V0UGFnZUluZm8od2lraVRleHQsIGRvd25sb2FkKSwgbmF2cG9wLmlkTnVtYmVyKTtcblx0XHR9XG5cdFx0bGV0IGltYWdlUGFnZSA9ICcnO1xuXHRcdGltYWdlUGFnZSA9IGFydC5uYW1lc3BhY2VJZCgpID09PSBwZy5uc0ltYWdlSWQgPyBhcnQudG9TdHJpbmcoKSA6IGdldFZhbGlkSW1hZ2VGcm9tV2lraVRleHQod2lraVRleHQpO1xuXHRcdGlmIChpbWFnZVBhZ2UpIHtcblx0XHRcdGxvYWRJbWFnZShUaXRsZS5mcm9tV2lraVRleHQoaW1hZ2VQYWdlKSwgbmF2cG9wKTtcblx0XHR9XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwUHJldmlld3MnKSkge1xuXHRcdFx0aW5zZXJ0QXJ0aWNsZVByZXZpZXcoZG93bmxvYWQsIGFydCwgbmF2cG9wKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGluc2VydEFydGljbGVQcmV2aWV3ID0gKGRvd25sb2FkLCBhcnQsIG5hdnBvcCkgPT4ge1xuXHRcdGlmIChkb3dubG9hZCAmJiB0eXBlb2YgZG93bmxvYWQuZGF0YSA9PT0gdHlwZW9mICcnKSB7XG5cdFx0XHRpZiAoYXJ0Lm5hbWVzcGFjZUlkKCkgPT09IHBnLm5zVGVtcGxhdGVJZCAmJiBnZXRWYWx1ZU9mKCdwb3B1cFByZXZpZXdSYXdUZW1wbGF0ZXMnKSkge1xuXHRcdFx0XHQvLyBGSVhNRSBjb21wYXJlL2NvbnNvbGlkYXRlIHdpdGggZGlmZiBlc2NhcGluZyBjb2RlIGZvciB3aWtpdGV4dFxuXHRcdFx0XHRjb25zdCBoID0gYDxocj48c3BhbiBzdHlsZT1cImZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XCI+JHtkb3dubG9hZC5kYXRhXG5cdFx0XHRcdFx0LmVudGlmeSgpXG5cdFx0XHRcdFx0LnNwbGl0KFN0cmluZy5yYXdgXFxuYClcblx0XHRcdFx0XHQuam9pbihTdHJpbmcucmF3YDxicj5cXG5gKX08L3NwYW4+YDtcblx0XHRcdFx0c2V0UG9wdXBIVE1MKGgsICdwb3B1cFByZXZpZXcnLCBuYXZwb3AuaWROdW1iZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcCA9IHByZXBQcmV2aWV3bWFrZXIoZG93bmxvYWQuZGF0YSwgYXJ0LCBuYXZwb3ApO1xuXHRcdFx0XHRwLnNob3dQcmV2aWV3KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBwcmVwUHJldmlld21ha2VyID0gKGRhdGEsIGFydGljbGUsIG5hdnBvcCkgPT4ge1xuXHRcdC8vIGRlYWwgd2l0aCB0cmlja3N5IGFuY2hvcnNcblx0XHRjb25zdCBkID0gYW5jaG9yaXplKGRhdGEsIGFydGljbGUuYW5jaG9yU3RyaW5nKCkpO1xuXHRcdGNvbnN0IHVybEJhc2UgPSBqb2luUGF0aChbcGcud2lraS5hcnRpY2xlYmFzZSwgYXJ0aWNsZS51cmxTdHJpbmcoKV0pO1xuXHRcdGNvbnN0IHAgPSBuZXcgUHJldmlld21ha2VyKGQsIHVybEJhc2UsIG5hdnBvcCk7XG5cdFx0cmV0dXJuIHA7XG5cdH07XG5cdC8vIFRyeSB0byBpbWl0YXRlIHRoZSB3YXkgbWVkaWF3aWtpIGdlbmVyYXRlcyBIVE1MIGFuY2hvcnMgZnJvbSBzZWN0aW9uIHRpdGxlc1xuXHRjb25zdCBhbmNob3JpemUgPSAoZCwgYW5jaCkgPT4ge1xuXHRcdGlmICghYW5jaCkge1xuXHRcdFx0cmV0dXJuIGQ7XG5cdFx0fVxuXHRcdGNvbnN0IGFuY2hSZSA9IG5ldyBSZWdFeHAoXG5cdFx0XHRgKD86PStcXFxccyoke2xpdGVyYWxpemVSZWdleChhbmNoKS5yZXBsYWNlKC9bIF9dL2csICdbXyBdJyl9XFxcXHMqPSt8XFxcXHtcXFxce1xcXFxzKiR7Z2V0VmFsdWVPZihcblx0XHRcdFx0J3BvcHVwQW5jaG9yUmVnZXhwJ1xuXHRcdFx0KX1cXFxccyooPzpcXFxcfFtefH1dKikqP1xcXFxzKiR7bGl0ZXJhbGl6ZVJlZ2V4KGFuY2gpfVxcXFxzKig/OlxcXFx8W159XSopP319KWBcblx0XHQpO1xuXHRcdGNvbnN0IG1hdGNoID0gZC5tYXRjaChhbmNoUmUpO1xuXHRcdGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAwICYmIG1hdGNoWzBdKSB7XG5cdFx0XHRyZXR1cm4gZC5zbGljZShNYXRoLm1heCgwLCBkLmluZGV4T2YobWF0Y2hbMF0pKSk7XG5cdFx0fVxuXHRcdC8vIG5vdyB0cnkgdG8gZGVhbCB3aXRoID09PSBmb28gW1tiYXJ8YmF6XV0gYm9vbSA9PT0gLT4gI2Zvb19iYXpfYm9vbVxuXHRcdGNvbnN0IGxpbmVzID0gZC5zcGxpdCgnXFxuJyk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0bGluZXNbaV0gPSBsaW5lc1tpXVxuXHRcdFx0XHQucmVwbGFjZSgvXFxbezJ9KFteXFxdfF0qP1xcfCk/KC4qPyldezJ9L2csICckMicpXG5cdFx0XHRcdC5yZXBsYWNlKC8nJycoW14nXSkvZywgJyQxJylcblx0XHRcdFx0LnJlcGxhY2UoLycnKFteJ10pL2csICckMScpO1xuXHRcdFx0aWYgKGFuY2hSZS50ZXN0KGxpbmVzW2ldKSkge1xuXHRcdFx0XHRyZXR1cm4gZFxuXHRcdFx0XHRcdC5zcGxpdCgnXFxuJylcblx0XHRcdFx0XHQuc2xpY2UoaSlcblx0XHRcdFx0XHQuam9pbignXFxuJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXltePV0qLywgJycpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZDtcblx0fTtcblx0Y29uc3Qga2lsbFBvcHVwID0gZnVuY3Rpb24ga2lsbFBvcHVwKCkge1xuXHRcdHJlbW92ZU1vZGlmaWVyS2V5TGlzdGVuZXIodGhpcyk7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwU2hvcnRjdXRLZXlzJykpIHtcblx0XHRcdHJtUG9wdXBTaG9ydGN1dHMoKTtcblx0XHR9XG5cdFx0aWYgKCFwZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAocGcuY3VycmVudC5saW5rICYmIHBnLmN1cnJlbnQubGluay5uYXZwb3B1cCkge1xuXHRcdFx0cGcuY3VycmVudC5saW5rLm5hdnBvcHVwLmJhbmlzaCgpO1xuXHRcdH1cblx0XHRwZy5jdXJyZW50LmxpbmsgPSBudWxsO1xuXHRcdGFib3J0QWxsRG93bmxvYWRzKCk7XG5cdFx0aWYgKHBnLnRpbWVyLmNoZWNrUG9wdXBQb3NpdGlvbikge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbChwZy50aW1lci5jaGVja1BvcHVwUG9zaXRpb24pO1xuXHRcdFx0cGcudGltZXIuY2hlY2tQb3B1cFBvc2l0aW9uID0gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7IC8vIHByZXNlcnZlIGRlZmF1bHQgYWN0aW9uXG5cdH07XG5cdC8vIEVOREZJTEU6IGFjdGlvbnMuanNcblx0Ly8gU1RBUlRGSUxFOiBkb21kcmFnLmpzXG5cdC8qKlxuXHQgKiBAZmlsZW92ZXJ2aWV3XG5cdCAqIFRoZSB7QHNvdXJjZSBEcmFnfSBvYmplY3QsIHdoaWNoIGVuYWJsZXMgb2JqZWN0cyB0byBiZSBkcmFnZ2VkIGFyb3VuZC5cblx0ICogPHByZT5cblx0ICpcblx0ICogZG9tLWRyYWcuanNcblx0ICogMDkuMjUuMjAwMVxuXHQgKiB3d3cueW91bmdwdXAubmV0XG5cdCAqXG5cdCAqIDEwLjI4LjIwMDEgLSBmaXhlZCBtaW5vciBidWcgd2hlcmUgZXZlbnRzXG5cdCAqXG5cdCAqIHNvbWV0aW1lcyBmaXJlZCBvZmYgdGhlIGhhbmRsZSwgbm90IHRoZSByb290LlxuXHQgKiBQYXJlZCBkb3duLCBzb21lIGhvb2tzIGFkZGVkIGJ5IEx1cGluXG5cdCAqIENvcHlyaWdodCBBYXJvbiBCb29kbWFuLlxuXHQgKiBTYXlpbmcgc3R1cGlkIHRoaW5ncyBkYWlseSBzaW5jZSBNYXJjaCAyMDAxLlxuXHQgKiA8L3ByZT5cblx0ICovXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IERyYWcgb2JqZWN0LiBUaGlzIGlzIHVzZWQgdG8gbWFrZSB2YXJpb3VzIERPTSBlbGVtZW50cyBkcmFnZ2FibGUuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0Y2xhc3MgRHJhZyB7XG5cdFx0Y29uc3RydWN0b3IoKSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIENvbmRpdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gZHJhZy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgdGFrZSBvbmUgcGFyYW1ldGVyLFxuXHRcdFx0ICogYW4gRXZlbnQuICBUbyBkaXNhYmxlIHRoaXMsIHNldCBpdCB0byA8Y29kZT5udWxsPC9jb2RlPi5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBGdW5jdGlvblxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnN0YXJ0Q29uZGl0aW9uID0gbnVsbDtcblx0XHRcdC8qKlxuXHRcdFx0ICogSG9vayB0byBiZSBydW4gd2hlbiB0aGUgZHJhZyBmaW5pc2hlcy4gVGhpcyBpcyBwYXNzZWQgdGhlIGZpbmFsIGNvb3JkaW5hdGVzIG9mIHRoZVxuXHRcdFx0ICogZHJhZ2dlZCBvYmplY3QgKHR3byBpbnRlZ2VycywgeCBhbmQgeSkuIFRvIGRpc2FibGVzIHRoaXMsIHNldCBpdCB0byA8Y29kZT5udWxsPC9jb2RlPi5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBGdW5jdGlvblxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmVuZEhvb2sgPSBudWxsO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBHZXRzIGFuIGV2ZW50IGluIGEgY3Jvc3MtYnJvd3NlciBtYW5uZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRzdGF0aWMgZml4RShlKSB7XG5cdFx0XHRpZiAoZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGUgPSB3aW5kb3cuZXZlbnQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZS5sYXllclggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRlLmxheWVyWCA9IGUub2Zmc2V0WDtcblx0XHRcdH1cblx0XHRcdGlmIChlLmxheWVyWSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGUubGF5ZXJZID0gZS5vZmZzZXRZO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGU7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEluaXRpYWxpc2VzIHRoZSBEcmFnIGluc3RhbmNlIGJ5IHRlbGxpbmcgaXQgd2hpY2ggb2JqZWN0IHlvdSB3YW50IHRvIGJlIGRyYWdnYWJsZSwgYW5kIHdoYXRcblx0XHQgKiB5b3Ugd2FudCB0byBkcmFnIGl0IGJ5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtET01FbGVtZW50fSBvIFRoZSBcImhhbmRsZVwiIGJ5IHdoaWNoIDxjb2RlPm9Sb290PC9jb2RlPiBpcyBkcmFnZ2VkLlxuXHRcdCAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb1Jvb3QgVGhlIG9iamVjdCB3aGljaCBtb3ZlcyB3aGVuIDxjb2RlPm88L2NvZGU+IGlzIGRyYWdnZWQsIG9yIDxjb2RlPm88L2NvZGU+IGlmIG9taXR0ZWQuXG5cdFx0ICovXG5cdFx0aW5pdChvLCBvUm9vdCkge1xuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHR0aGlzLm9iaiA9IG87XG5cdFx0XHRvLm9ubW91c2Vkb3duID0gKGUpID0+IHtcblx0XHRcdFx0c2VsZi5zdGFydChlKTtcblx0XHRcdH07XG5cdFx0XHRvLmRyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRvLnBvcHVwc19kcmFnZ2FibGUgPSB0cnVlO1xuXHRcdFx0by5obW9kZSA9IHRydWU7XG5cdFx0XHRvLnZtb2RlID0gdHJ1ZTtcblx0XHRcdG8ucm9vdCA9IG9Sb290IHx8IG87XG5cdFx0XHRpZiAoTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChvLnJvb3Quc3R5bGUubGVmdCwgMTApKSkge1xuXHRcdFx0XHRvLnJvb3Quc3R5bGUubGVmdCA9ICcwcHgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKE51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQoby5yb290LnN0eWxlLnRvcCwgMTApKSkge1xuXHRcdFx0XHRvLnJvb3Quc3R5bGUudG9wID0gJzBweCc7XG5cdFx0XHR9XG5cdFx0XHRvLnJvb3Qub250aGlzU3RhcnQgPSAoKSA9PiB7fTtcblx0XHRcdG8ucm9vdC5vbnRoaXNFbmQgPSAoKSA9PiB7fTtcblx0XHRcdG8ucm9vdC5vbnRoaXMgPSAoKSA9PiB7fTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogU3RhcnRzIHRoZSBkcmFnLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBlXG5cdFx0ICovXG5cdFx0c3RhcnQoZSkge1xuXHRcdFx0Y29uc3QgbyA9IHRoaXMub2JqOyAvLyA9IHRoaXM7XG5cdFx0XHRlID0gRHJhZy5maXhFKGUpO1xuXHRcdFx0aWYgKHRoaXMuc3RhcnRDb25kaXRpb24gJiYgIXRoaXMuc3RhcnRDb25kaXRpb24oZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgeSA9IE51bWJlci5wYXJzZUludChvLnZtb2RlID8gby5yb290LnN0eWxlLnRvcCA6IG8ucm9vdC5zdHlsZS5ib3R0b20sIDEwKTtcblx0XHRcdGNvbnN0IHggPSBOdW1iZXIucGFyc2VJbnQoby5obW9kZSA/IG8ucm9vdC5zdHlsZS5sZWZ0IDogby5yb290LnN0eWxlLnJpZ2h0LCAxMCk7XG5cdFx0XHRvLnJvb3Qub250aGlzU3RhcnQoeCwgeSk7XG5cdFx0XHRvLmxhc3RNb3VzZVggPSBlLmNsaWVudFg7XG5cdFx0XHRvLmxhc3RNb3VzZVkgPSBlLmNsaWVudFk7XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdG8ub25tb3VzZW1vdmVEZWZhdWx0ID0gZG9jdW1lbnQub25tb3VzZW1vdmU7XG5cdFx0XHRvLmRyYWdnaW5nID0gdHJ1ZTtcblx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gKGUpID0+IHtcblx0XHRcdFx0c2VsZi5kcmFnKGUpO1xuXHRcdFx0fTtcblx0XHRcdGRvY3VtZW50Lm9ubW91c2V1cCA9IChlKSA9PiB7XG5cdFx0XHRcdHNlbGYuZW5kKGUpO1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogRG9lcyB0aGUgZHJhZy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RXZlbnR9IGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGRyYWcoZSkge1xuXHRcdFx0ZSA9IERyYWcuZml4RShlKTtcblx0XHRcdGNvbnN0IG8gPSB0aGlzLm9iajtcblx0XHRcdGNvbnN0IGV5ID0gZS5jbGllbnRZO1xuXHRcdFx0Y29uc3QgZXggPSBlLmNsaWVudFg7XG5cdFx0XHRjb25zdCB5ID0gTnVtYmVyLnBhcnNlSW50KG8udm1vZGUgPyBvLnJvb3Quc3R5bGUudG9wIDogby5yb290LnN0eWxlLmJvdHRvbSwgMTApO1xuXHRcdFx0Y29uc3QgeCA9IE51bWJlci5wYXJzZUludChvLmhtb2RlID8gby5yb290LnN0eWxlLmxlZnQgOiBvLnJvb3Quc3R5bGUucmlnaHQsIDEwKTtcblx0XHRcdGNvbnN0IG54ID0geCArIChleCAtIG8ubGFzdE1vdXNlWCkgKiAoby5obW9kZSA/IDEgOiAtMSk7XG5cdFx0XHRjb25zdCBueSA9IHkgKyAoZXkgLSBvLmxhc3RNb3VzZVkpICogKG8udm1vZGUgPyAxIDogLTEpO1xuXHRcdFx0dGhpcy5vYmoucm9vdC5zdHlsZVtvLmhtb2RlID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBgJHtueH1weGA7XG5cdFx0XHR0aGlzLm9iai5yb290LnN0eWxlW28udm1vZGUgPyAndG9wJyA6ICdib3R0b20nXSA9IGAke255fXB4YDtcblx0XHRcdHRoaXMub2JqLmxhc3RNb3VzZVggPSBleDtcblx0XHRcdHRoaXMub2JqLmxhc3RNb3VzZVkgPSBleTtcblx0XHRcdHRoaXMub2JqLnJvb3Qub250aGlzKG54LCBueSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEVuZHMgdGhlIGRyYWcuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGVuZCgpIHtcblx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gdGhpcy5vYmoub25tb3VzZW1vdmVEZWZhdWx0O1xuXHRcdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcblx0XHRcdHRoaXMub2JqLmRyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRpZiAodGhpcy5lbmRIb29rKSB7XG5cdFx0XHRcdHRoaXMuZW5kSG9vayhcblx0XHRcdFx0XHROdW1iZXIucGFyc2VJbnQodGhpcy5vYmoucm9vdC5zdHlsZVt0aGlzLm9iai5obW9kZSA/ICdsZWZ0JyA6ICdyaWdodCddLCAxMCksXG5cdFx0XHRcdFx0TnVtYmVyLnBhcnNlSW50KHRoaXMub2JqLnJvb3Quc3R5bGVbdGhpcy5vYmoudm1vZGUgPyAndG9wJyA6ICdib3R0b20nXSwgMTApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIEVOREZJTEU6IGRvbWRyYWcuanNcblx0Ly8gU1RBUlRGSUxFOiBzdHJ1Y3R1cmVzLmpzXG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwgPSB7fTtcblx0cGcuc3RydWN0dXJlcy5vcmlnaW5hbC5wb3B1cExheW91dCA9ICgpID0+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0J3BvcHVwRXJyb3InLFxuXHRcdFx0J3BvcHVwSW1hZ2UnLFxuXHRcdFx0J3BvcHVwVG9wTGlua3MnLFxuXHRcdFx0J3BvcHVwVGl0bGUnLFxuXHRcdFx0J3BvcHVwVXNlckRhdGEnLFxuXHRcdFx0J3BvcHVwRGF0YScsXG5cdFx0XHQncG9wdXBPdGhlckxpbmtzJyxcblx0XHRcdCdwb3B1cFJlZGlyJyxcblx0XHRcdFsncG9wdXBXYXJuUmVkaXInLCAncG9wdXBSZWRpclRvcExpbmtzJywgJ3BvcHVwUmVkaXJUaXRsZScsICdwb3B1cFJlZGlyRGF0YScsICdwb3B1cFJlZGlyT3RoZXJMaW5rcyddLFxuXHRcdFx0J3BvcHVwTWlzY1Rvb2xzJyxcblx0XHRcdFsncG9wdXBSZWRsaW5rJ10sXG5cdFx0XHQncG9wdXBQcmVQcmV2aWV3U2VwJyxcblx0XHRcdCdwb3B1cFByZXZpZXcnLFxuXHRcdFx0J3BvcHVwU2Vjb25kUHJldmlldycsXG5cdFx0XHQncG9wdXBQcmV2aWV3TW9yZScsXG5cdFx0XHQncG9wdXBQb3N0UHJldmlldycsXG5cdFx0XHQncG9wdXBGaXhEYWInLFxuXHRcdF07XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBSZWRpclNwYW5zID0gKCkgPT4ge1xuXHRcdHJldHVybiBbXG5cdFx0XHQncG9wdXBSZWRpcicsXG5cdFx0XHQncG9wdXBXYXJuUmVkaXInLFxuXHRcdFx0J3BvcHVwUmVkaXJUb3BMaW5rcycsXG5cdFx0XHQncG9wdXBSZWRpclRpdGxlJyxcblx0XHRcdCdwb3B1cFJlZGlyRGF0YScsXG5cdFx0XHQncG9wdXBSZWRpck90aGVyTGlua3MnLFxuXHRcdF07XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBUaXRsZSA9ICh4KSA9PiB7XG5cdFx0bG9nKCdkZWZhdWx0c3RydWN0dXJlLnBvcHVwVGl0bGUnKTtcblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwTmF2TGlua3MnKSkge1xuXHRcdFx0cmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwoJzxiPjw8bWFpbmxpbms+PjwvYj4nLCB4LmFydGljbGUsIHgucGFyYW1zKTtcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLm9yaWdpbmFsLnBvcHVwVG9wTGlua3MgPSAoeCkgPT4ge1xuXHRcdGxvZygnZGVmYXVsdHN0cnVjdHVyZS5wb3B1cFRvcExpbmtzJyk7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwTmF2TGlua3MnKSkge1xuXHRcdFx0cmV0dXJuIG5hdkxpbmtzSFRNTCh4LmFydGljbGUsIHguaGludCwgeC5wYXJhbXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBJbWFnZSA9ICh4KSA9PiB7XG5cdFx0bG9nKGBvcmlnaW5hbC5wb3B1cEltYWdlLCB4LmFydGljbGU9JHt4LmFydGljbGV9LCB4Lm5hdnBvcC5pZE51bWJlcj0ke3gubmF2cG9wLmlkTnVtYmVyfWApO1xuXHRcdHJldHVybiBpbWFnZUhUTUwoeC5hcnRpY2xlLCB4Lm5hdnBvcC5pZE51bWJlcik7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBSZWRpclRpdGxlID0gcGcuc3RydWN0dXJlcy5vcmlnaW5hbC5wb3B1cFRpdGxlO1xuXHRwZy5zdHJ1Y3R1cmVzLm9yaWdpbmFsLnBvcHVwUmVkaXJUb3BMaW5rcyA9IHBnLnN0cnVjdHVyZXMub3JpZ2luYWwucG9wdXBUb3BMaW5rcztcblx0Y29uc3QgY29weVN0cnVjdHVyZSA9IChvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkgPT4ge1xuXHRcdHBnLnN0cnVjdHVyZXNbbmV3U3RydWN0dXJlXSA9IHt9O1xuXHRcdGZvciAoY29uc3QgcHJvcCBpbiBwZy5zdHJ1Y3R1cmVzW29sZFN0cnVjdHVyZV0pIHtcblx0XHRcdGlmICghT2JqZWN0Lmhhc093bihwZy5zdHJ1Y3R1cmVzW29sZFN0cnVjdHVyZV0sIHByb3ApKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0cGcuc3RydWN0dXJlc1tuZXdTdHJ1Y3R1cmVdW3Byb3BdID0gcGcuc3RydWN0dXJlc1tvbGRTdHJ1Y3R1cmVdW3Byb3BdO1xuXHRcdH1cblx0fTtcblx0Y29weVN0cnVjdHVyZSgnb3JpZ2luYWwnLCAnbm9zdGFsZ2lhJyk7XG5cdHBnLnN0cnVjdHVyZXMubm9zdGFsZ2lhLnBvcHVwVG9wTGlua3MgPSAoeCkgPT4ge1xuXHRcdGxldCBzdHIgPSAnJztcblx0XHRzdHIgKz0gJzxiPjw8bWFpbmxpbmt8c2hvcnRjdXQ9ID4+PC9iPic7XG5cdFx0Ly8gdXNlciBsaW5rc1xuXHRcdC8vIGNvbnRyaWJzIC0gbG9nIC0gY291bnQgLSBlbWFpbCAtIGJsb2NrXG5cdFx0Ly8gY291bnQgb25seSBpZiBhcHBsaWNhYmxlOyBibG9jayBvbmx5IGlmIHBvcHVwQWRtaW5MaW5rc1xuXHRcdHN0ciArPSAnaWYodXNlcil7PGJyPjw8Y29udHJpYnN8c2hvcnRjdXQ9Yz4+Jztcblx0XHRzdHIgKz0gJ2lmKHdpa2ltZWRpYSl7Kjw8Y291bnR8c2hvcnRjdXQ9Iz4+fSc7XG5cdFx0c3RyICs9ICdpZihpcHVzZXIpe31lbHNleyo8PGVtYWlsfHNob3J0Y3V0PUU+Pn1pZihhZG1pbil7Kjw8YmxvY2t8c2hvcnRjdXQ9Yj4+fX0nO1xuXHRcdC8vIGVkaXRpbmcgbGlua3Ncblx0XHQvLyB0YWxrcGFnZSAgIC0+IGVkaXR8bmV3IC0gaGlzdG9yeSAtIHVufHdhdGNoIC0gYXJ0aWNsZXxlZGl0XG5cdFx0Ly8gb3RoZXIgcGFnZSAtPiBlZGl0IC0gaGlzdG9yeSAtIHVufHdhdGNoIC0gdGFsa3xlZGl0fG5ld1xuXHRcdGNvbnN0IGVkaXRzdHIgPSAnPDxlZGl0fHNob3J0Y3V0PWU+Pic7XG5cdFx0Y29uc3QgZWRpdE9sZGlkU3RyID0gYGlmKG9sZGlkKXs8PGVkaXRPbGR8c2hvcnRjdXQ9ZT4+fDw8cmV2ZXJ0fHNob3J0Y3V0PXZ8cnY+Pnw8PGVkaXR8Y3VyPj59ZWxzZXske2VkaXRzdHJ9fWA7XG5cdFx0Y29uc3QgaGlzdG9yeXN0ciA9ICc8PGhpc3Rvcnl8c2hvcnRjdXQ9aD4+Jztcblx0XHRjb25zdCB3YXRjaHN0ciA9ICc8PHVud2F0Y2h8dW53YXRjaFNob3J0Pj58PDx3YXRjaHxzaG9ydGN1dD13fHdhdGNoVGhpbmd5Pj4nO1xuXHRcdHN0ciArPVxuXHRcdFx0YDxicj5pZih0YWxrKXske2VkaXRPbGRpZFN0cn18PDxuZXd8c2hvcnRjdXQ9Kz4+YCArXG5cdFx0XHRgKiR7aGlzdG9yeXN0cn0qJHt3YXRjaHN0cn0qYCArXG5cdFx0XHQnPGI+PDxhcnRpY2xlfHNob3J0Y3V0PWE+PjwvYj58PDxlZGl0QXJ0aWNsZXxlZGl0Pj4nICtcblx0XHRcdGB9ZWxzZXske1xuXHRcdFx0XHQvLyBub3QgYSB0YWxrIHBhZ2Vcblx0XHRcdFx0ZWRpdE9sZGlkU3RyXG5cdFx0XHR9KiR7aGlzdG9yeXN0cn0qJHt3YXRjaHN0cn0qYCArXG5cdFx0XHQnPGI+PDx0YWxrfHNob3J0Y3V0PXQ+PjwvYj58PDxlZGl0VGFsa3xlZGl0Pj58PDxuZXdUYWxrfHNob3J0Y3V0PSt8bmV3Pj59Jztcblx0XHQvLyBtaXNjIGxpbmtzXG5cdFx0c3RyICs9ICc8YnI+PDx3aGF0TGlua3NIZXJlfHNob3J0Y3V0PWw+Pio8PHJlbGF0ZWRDaGFuZ2VzfHNob3J0Y3V0PXI+Pic7XG5cdFx0c3RyICs9ICdpZihhZG1pbil7PGJyPn1lbHNleyp9PDxtb3ZlfHNob3J0Y3V0PW0+Pic7XG5cdFx0Ly8gYWRtaW4gbGlua3Ncblx0XHRzdHIgKz1cblx0XHRcdCdpZihhZG1pbil7Kjw8dW5wcm90ZWN0fHVucHJvdGVjdFNob3J0Pj58PDxwcm90ZWN0fHNob3J0Y3V0PXA+PionICtcblx0XHRcdCc8PHVuZGVsZXRlfHVuZGVsZXRlU2hvcnQ+Pnw8PGRlbGV0ZXxzaG9ydGN1dD1kPj59Jztcblx0XHRyZXR1cm4gbmF2bGlua1N0cmluZ1RvSFRNTChzdHIsIHguYXJ0aWNsZSwgeC5wYXJhbXMpO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLm5vc3RhbGdpYS5wb3B1cFJlZGlyVG9wTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLm5vc3RhbGdpYS5wb3B1cFRvcExpbmtzO1xuXHQvKiogLS0gZmFuY3kgLS0gKi9cblx0Y29weVN0cnVjdHVyZSgnb3JpZ2luYWwnLCAnZmFuY3knKTtcblx0cGcuc3RydWN0dXJlcy5mYW5jeS5wb3B1cFRpdGxlID0gKHgpID0+IHtcblx0XHRyZXR1cm4gbmF2bGlua1N0cmluZ1RvSFRNTCgnPGZvbnQgc2l6ZT0rMD48PG1haW5saW5rPj48L2ZvbnQ+JywgeC5hcnRpY2xlLCB4LnBhcmFtcyk7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMuZmFuY3kucG9wdXBUb3BMaW5rcyA9ICh4KSA9PiB7XG5cdFx0Y29uc3QgaGlzdCA9ICc8PGhpc3Rvcnl8c2hvcnRjdXQ9aHxoaXN0Pj58PDxsYXN0RWRpdHxzaG9ydGN1dD0vfGxhc3Q+Pnw8PGVkaXRvcnN8c2hvcnRjdXQ9RXxlZHM+Pic7XG5cdFx0Y29uc3Qgd2F0Y2ggPSAnPDx1bndhdGNofHVud2F0Y2hTaG9ydD4+fDw8d2F0Y2h8c2hvcnRjdXQ9d3x3YXRjaFRoaW5neT4+Jztcblx0XHRjb25zdCBtb3ZlID0gJzw8bW92ZXxzaG9ydGN1dD1tfG1vdmU+Pic7XG5cdFx0cmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwoXG5cdFx0XHQnaWYodGFsayl7JyArXG5cdFx0XHRcdGA8PGVkaXR8c2hvcnRjdXQ9ZT4+fDw8bmV3fHNob3J0Y3V0PSt8Kz4+KiR7aGlzdH0qYCArXG5cdFx0XHRcdCc8PGFydGljbGV8c2hvcnRjdXQ9YT4+fDw8ZWRpdEFydGljbGV8ZWRpdD4+JyArXG5cdFx0XHRcdGAqJHt3YXRjaH0qJHttb3ZlfX1lbHNlezw8ZWRpdHxzaG9ydGN1dD1lPj4qJHtoaXN0fSo8PHRhbGt8c2hvcnRjdXQ9dHw+Pnw8PGVkaXRUYWxrfGVkaXQ+Pnw8PG5ld1RhbGt8c2hvcnRjdXQ9K3xuZXc+PmAgK1xuXHRcdFx0XHRgKiR7d2F0Y2h9KiR7bW92ZX19PGJyPmAsXG5cdFx0XHR4LmFydGljbGUsXG5cdFx0XHR4LnBhcmFtc1xuXHRcdCk7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMuZmFuY3kucG9wdXBPdGhlckxpbmtzID0gKHgpID0+IHtcblx0XHRjb25zdCBhZG1pbiA9XG5cdFx0XHQnPDx1bnByb3RlY3R8dW5wcm90ZWN0U2hvcnQ+Pnw8PHByb3RlY3R8c2hvcnRjdXQ9cD4+Kjw8dW5kZWxldGV8dW5kZWxldGVTaG9ydD4+fDw8ZGVsZXRlfHNob3J0Y3V0PWR8ZGVsPj4nO1xuXHRcdGxldCB1c2VyID0gJzw8Y29udHJpYnN8c2hvcnRjdXQ9Yz4+aWYod2lraW1lZGlhKXt8PDxjb3VudHxzaG9ydGN1dD0jfCM+Pn0nO1xuXHRcdHVzZXIgKz0gYGlmKGlwdXNlcil7fDw8YXJpbj4+fWVsc2V7Kjw8ZW1haWx8c2hvcnRjdXQ9RXwke3BvcHVwU3RyaW5nKFxuXHRcdFx0J2VtYWlsJ1xuXHRcdCl9Pj59aWYoYWRtaW4peyo8PGJsb2NrfHNob3J0Y3V0PWI+Pn1gO1xuXHRcdGNvbnN0IG5vcm1hbCA9ICc8PHdoYXRMaW5rc0hlcmV8c2hvcnRjdXQ9bHxsaW5rcyBoZXJlPj4qPDxyZWxhdGVkQ2hhbmdlc3xzaG9ydGN1dD1yfHJlbGF0ZWQ+Pic7XG5cdFx0cmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwoXG5cdFx0XHRgPGJyPmlmKHVzZXIpeyR7dXNlcn0qfWlmKGFkbWluKXske2FkbWlufWlmKHVzZXIpezxicj59ZWxzZXsqfX0ke25vcm1hbH1gLFxuXHRcdFx0eC5hcnRpY2xlLFxuXHRcdFx0eC5wYXJhbXNcblx0XHQpO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLmZhbmN5LnBvcHVwUmVkaXJUaXRsZSA9IHBnLnN0cnVjdHVyZXMuZmFuY3kucG9wdXBUaXRsZTtcblx0cGcuc3RydWN0dXJlcy5mYW5jeS5wb3B1cFJlZGlyVG9wTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLmZhbmN5LnBvcHVwVG9wTGlua3M7XG5cdHBnLnN0cnVjdHVyZXMuZmFuY3kucG9wdXBSZWRpck90aGVyTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLmZhbmN5LnBvcHVwT3RoZXJMaW5rcztcblx0LyoqIC0tIGZhbmN5MiAtLSAqL1xuXHQvLyBoYWNrIGZvciBNYWNHeXZlck1hZ2ljXG5cdGNvcHlTdHJ1Y3R1cmUoJ2ZhbmN5JywgJ2ZhbmN5MicpO1xuXHRwZy5zdHJ1Y3R1cmVzLmZhbmN5Mi5wb3B1cFRvcExpbmtzID0gLy8gaGFjayBvdXQgdGhlIDxicj4gYXQgdGhlIGVuZCBhbmQgcHV0IG9uZSBhdCB0aGUgYmVnaW5uaW5nXG5cdFx0KHgpID0+IHtcblx0XHRcdHJldHVybiBgPGJyPiR7cGcuc3RydWN0dXJlcy5mYW5jeS5wb3B1cFRvcExpbmtzKHgpLnJlcGxhY2UoLzxicj4kL2ksICcnKX1gO1xuXHRcdH07XG5cdHBnLnN0cnVjdHVyZXMuZmFuY3kyLnBvcHVwTGF5b3V0ID0gKCkgPT4ge1xuXHRcdHJldHVybiBbXG5cdFx0XHQncG9wdXBFcnJvcicsXG5cdFx0XHQncG9wdXBJbWFnZScsXG5cdFx0XHQncG9wdXBUaXRsZScsXG5cdFx0XHQncG9wdXBVc2VyRGF0YScsXG5cdFx0XHQncG9wdXBEYXRhJyxcblx0XHRcdCdwb3B1cFRvcExpbmtzJyxcblx0XHRcdCdwb3B1cE90aGVyTGlua3MnLFxuXHRcdFx0J3BvcHVwUmVkaXInLFxuXHRcdFx0Wydwb3B1cFdhcm5SZWRpcicsICdwb3B1cFJlZGlyVG9wTGlua3MnLCAncG9wdXBSZWRpclRpdGxlJywgJ3BvcHVwUmVkaXJEYXRhJywgJ3BvcHVwUmVkaXJPdGhlckxpbmtzJ10sXG5cdFx0XHQncG9wdXBNaXNjVG9vbHMnLFxuXHRcdFx0Wydwb3B1cFJlZGxpbmsnXSxcblx0XHRcdCdwb3B1cFByZVByZXZpZXdTZXAnLFxuXHRcdFx0J3BvcHVwUHJldmlldycsXG5cdFx0XHQncG9wdXBTZWNvbmRQcmV2aWV3Jyxcblx0XHRcdCdwb3B1cFByZXZpZXdNb3JlJyxcblx0XHRcdCdwb3B1cFBvc3RQcmV2aWV3Jyxcblx0XHRcdCdwb3B1cEZpeERhYicsXG5cdFx0XTtcblx0fTtcblx0LyoqIC0tIG1lbnVzIC0tICovXG5cdGNvcHlTdHJ1Y3R1cmUoJ29yaWdpbmFsJywgJ21lbnVzJyk7XG5cdHBnLnN0cnVjdHVyZXMubWVudXMucG9wdXBMYXlvdXQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdCdwb3B1cEVycm9yJyxcblx0XHRcdCdwb3B1cEltYWdlJyxcblx0XHRcdCdwb3B1cFRvcExpbmtzJyxcblx0XHRcdCdwb3B1cFRpdGxlJyxcblx0XHRcdCdwb3B1cE90aGVyTGlua3MnLFxuXHRcdFx0J3BvcHVwUmVkaXInLFxuXHRcdFx0Wydwb3B1cFdhcm5SZWRpcicsICdwb3B1cFJlZGlyVG9wTGlua3MnLCAncG9wdXBSZWRpclRpdGxlJywgJ3BvcHVwUmVkaXJEYXRhJywgJ3BvcHVwUmVkaXJPdGhlckxpbmtzJ10sXG5cdFx0XHQncG9wdXBVc2VyRGF0YScsXG5cdFx0XHQncG9wdXBEYXRhJyxcblx0XHRcdCdwb3B1cE1pc2NUb29scycsXG5cdFx0XHRbJ3BvcHVwUmVkbGluayddLFxuXHRcdFx0J3BvcHVwUHJlUHJldmlld1NlcCcsXG5cdFx0XHQncG9wdXBQcmV2aWV3Jyxcblx0XHRcdCdwb3B1cFNlY29uZFByZXZpZXcnLFxuXHRcdFx0J3BvcHVwUHJldmlld01vcmUnLFxuXHRcdFx0J3BvcHVwUG9zdFByZXZpZXcnLFxuXHRcdFx0J3BvcHVwRml4RGFiJyxcblx0XHRdO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLm1lbnVzLnBvcHVwVG9wTGlua3MgPSAoeCwgc2hvcnRlcikgPT4ge1xuXHRcdC8vIEZJWE1FIG1heWJlIHRoaXMgc3R1ZmYgc2hvdWxkIGJlIGNhY2hlZFxuXHRcdGNvbnN0IHMgPSBbXTtcblx0XHRjb25zdCBkcm9wZGl2ID0gJzxkaXYgY2xhc3M9XCJwb3B1cF9kcm9wXCI+Jztcblx0XHRjb25zdCBlbmRkaXYgPSAnPC9kaXY+Jztcblx0XHRsZXQgaGlzdCA9ICc8PGhpc3Rvcnl8c2hvcnRjdXQ9aD4+Jztcblx0XHRpZiAoIXNob3J0ZXIpIHtcblx0XHRcdGhpc3QgPSBgPG1lbnVyb3c+JHtoaXN0fXw8PGhpc3RvcnlmZWVkfHJzcz4+fDw8ZWRpdG9yc3xzaG9ydGN1dD1FPj48L21lbnVyb3c+YDtcblx0XHR9XG5cdFx0Y29uc3QgbGFzdGVkaXQgPSAnPDxsYXN0RWRpdHxzaG9ydGN1dD0vfHNob3cgbGFzdCBlZGl0Pj4nO1xuXHRcdGNvbnN0IHRoYW5rID0gJ2lmKGRpZmYpezw8dGhhbmt8c2VuZCB0aGFua3M+Pn0nO1xuXHRcdGNvbnN0IGpzSGlzdG9yeSA9ICc8PGxhc3RDb250cmlifGxhc3Qgc2V0IG9mIGVkaXRzPj48PHNpbmNlTWV8Y2hhbmdlcyBzaW5jZSBtaW5lPj4nO1xuXHRcdGNvbnN0IGxpbmtzaGVyZSA9ICc8PHdoYXRMaW5rc0hlcmV8c2hvcnRjdXQ9bHx3aGF0IGxpbmtzIGhlcmU+Pic7XG5cdFx0Y29uc3QgcmVsYXRlZCA9ICc8PHJlbGF0ZWRDaGFuZ2VzfHNob3J0Y3V0PXJ8cmVsYXRlZCBjaGFuZ2VzPj4nO1xuXHRcdGNvbnN0IHNlYXJjaCA9ICc8bWVudXJvdz48PHNlYXJjaHxzaG9ydGN1dD1zPj48L21lbnVyb3c+Jztcblx0XHRjb25zdCB3YXRjaCA9ICc8bWVudXJvdz48PHVud2F0Y2h8dW53YXRjaFNob3J0Pj58PDx3YXRjaHxzaG9ydGN1dD13fHdhdGNoVGhpbmd5Pj48L21lbnVyb3c+Jztcblx0XHRjb25zdCBwcm90ZWN0ID0gJzxtZW51cm93Pjw8dW5wcm90ZWN0fHVucHJvdGVjdFNob3J0Pj58PDxwcm90ZWN0fHNob3J0Y3V0PXA+Pnw8PHByb3RlY3Rsb2d8bG9nPj48L21lbnVyb3c+Jztcblx0XHRjb25zdCBkZWwgPSAnPG1lbnVyb3c+PDx1bmRlbGV0ZXx1bmRlbGV0ZVNob3J0Pj58PDxkZWxldGV8c2hvcnRjdXQ9ZD4+fDw8ZGVsZXRlbG9nfGxvZz4+PC9tZW51cm93Pic7XG5cdFx0Y29uc3QgbW92ZSA9ICc8PG1vdmV8c2hvcnRjdXQ9bXxtb3ZlIHBhZ2U+Pic7XG5cdFx0Y29uc3QgbnVsbFB1cmdlID0gJzxtZW51cm93Pjw8bnVsbEVkaXR8c2hvcnRjdXQ9bnxudWxsIGVkaXQ+Pnw8PHB1cmdlfHNob3J0Y3V0PVA+PjwvbWVudXJvdz4nO1xuXHRcdGNvbnN0IHZpZXdPcHRpb25zID0gJzxtZW51cm93Pjw8dmlld3xzaG9ydGN1dD12Pj58PDxyZW5kZXJ8c2hvcnRjdXQ9Uz4+fDw8cmF3Pj48L21lbnVyb3c+Jztcblx0XHRjb25zdCBlZGl0Um93ID1cblx0XHRcdCdpZihvbGRpZCl7JyArXG5cdFx0XHQnPG1lbnVyb3c+PDxlZGl0fHNob3J0Y3V0PWU+Pnw8PGVkaXRPbGR8c2hvcnRjdXQ9ZXx0aGlzJm5ic3A7cmV2aXNpb24+PjwvbWVudXJvdz4nICtcblx0XHRcdCc8bWVudXJvdz48PHJldmVydHxzaG9ydGN1dD12Pj58PDx1bmRvPj48L21lbnVyb3c+JyArXG5cdFx0XHQnfWVsc2V7PDxlZGl0fHNob3J0Y3V0PWU+Pn0nO1xuXHRcdGNvbnN0IG1hcmtQYXRyb2xsZWQgPSAnaWYocmNpZCl7PDxtYXJrcGF0cm9sbGVkfG1hcmsgcGF0cm9sbGVkPj59Jztcblx0XHRjb25zdCBuZXdUb3BpYyA9ICdpZih0YWxrKXs8PG5ld3xzaG9ydGN1dD0rfG5ldyB0b3BpYz4+fSc7XG5cdFx0Y29uc3QgcHJvdGVjdERlbGV0ZSA9IGBpZihhZG1pbil7JHtwcm90ZWN0fSR7ZGVsfX1gO1xuXHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cEFjdGlvbnNNZW51JykpIHtcblx0XHRcdHMucHVzaChgPDxtYWlubGluaz4+KiR7ZHJvcGRpdn0ke21lbnVUaXRsZSgnYWN0aW9ucycpfWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzLnB1c2goYCR7ZHJvcGRpdn08PG1haW5saW5rPj5gKTtcblx0XHR9XG5cdFx0cy5wdXNoKCc8bWVudT4nLCBlZGl0Um93ICsgbWFya1BhdHJvbGxlZCArIG5ld1RvcGljICsgaGlzdCArIGxhc3RlZGl0ICsgdGhhbmspO1xuXHRcdGlmICghc2hvcnRlcikge1xuXHRcdFx0cy5wdXNoKGpzSGlzdG9yeSk7XG5cdFx0fVxuXHRcdHMucHVzaChtb3ZlICsgbGlua3NoZXJlICsgcmVsYXRlZCk7XG5cdFx0aWYgKCFzaG9ydGVyKSB7XG5cdFx0XHRzLnB1c2gobnVsbFB1cmdlICsgc2VhcmNoKTtcblx0XHR9XG5cdFx0aWYgKCFzaG9ydGVyKSB7XG5cdFx0XHRzLnB1c2godmlld09wdGlvbnMpO1xuXHRcdH1cblx0XHRzLnB1c2goXG5cdFx0XHRgPGhyPiR7d2F0Y2h9JHtwcm90ZWN0RGVsZXRlfWAsXG5cdFx0XHQnPGhyPicgK1xuXHRcdFx0XHQnaWYodGFsayl7PDxhcnRpY2xlfHNob3J0Y3V0PWF8dmlldyBhcnRpY2xlPj48PGVkaXRBcnRpY2xlfGVkaXQgYXJ0aWNsZT4+fScgK1xuXHRcdFx0XHQnZWxzZXs8PHRhbGt8c2hvcnRjdXQ9dHx0YWxrIHBhZ2U+Pjw8ZWRpdFRhbGt8ZWRpdCB0YWxrPj4nICtcblx0XHRcdFx0YDw8bmV3VGFsa3xzaG9ydGN1dD0rfG5ldyB0b3BpYz4+fTwvbWVudT4ke2VuZGRpdn1gXG5cdFx0KTtcblx0XHQvLyB1c2VyIG1lbnUgc3RhcnRzIGhlcmVcblx0XHRjb25zdCBlbWFpbCA9ICc8PGVtYWlsfHNob3J0Y3V0PUV8ZW1haWwgdXNlcj4+Jztcblx0XHRjb25zdCBjb250cmlicyA9XG5cdFx0XHQnaWYod2lraW1lZGlhKXs8bWVudXJvdz59PDxjb250cmlic3xzaG9ydGN1dD1jfGNvbnRyaWJ1dGlvbnM+PmlmKHdpa2ltZWRpYSl7PC9tZW51cm93Pn0nICtcblx0XHRcdCdpZihhZG1pbil7PG1lbnVyb3c+PDxkZWxldGVkQ29udHJpYnM+PjwvbWVudXJvdz59Jztcblx0XHRzLnB1c2goXG5cdFx0XHRgaWYodXNlcil7KiR7ZHJvcGRpdn0ke21lbnVUaXRsZSgndXNlcicpfWAsXG5cdFx0XHQnPG1lbnU+Jyxcblx0XHRcdCc8bWVudXJvdz48PHVzZXJQYWdlfHNob3J0Y3V0PXV8dXNlciZuYnNwO3BhZ2U+Pnw8PHVzZXJTcGFjZXxzcGFjZT4+PC9tZW51cm93PicsXG5cdFx0XHQnPDx1c2VyVGFsa3xzaG9ydGN1dD10fHVzZXIgdGFsaz4+PDxlZGl0VXNlclRhbGt8ZWRpdCB1c2VyIHRhbGs+PicgK1xuXHRcdFx0XHQnPDxuZXdVc2VyVGFsa3xzaG9ydGN1dD0rfGxlYXZlIGNvbW1lbnQ+Pidcblx0XHQpO1xuXHRcdGlmIChzaG9ydGVyKSB7XG5cdFx0XHRzLnB1c2goYGlmKGlwdXNlcil7fWVsc2V7JHtlbWFpbH19YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHMucHVzaChgaWYoaXB1c2VyKXs8PGFyaW4+Pn1lbHNleyR7ZW1haWx9fWApO1xuXHRcdH1cblx0XHRzLnB1c2goXG5cdFx0XHRgPGhyPiR7Y29udHJpYnN9PDx1c2VybG9nfHNob3J0Y3V0PUx8dXNlciBsb2c+PmAsXG5cdFx0XHQnaWYod2lraW1lZGlhKXs8PGNvdW50fHNob3J0Y3V0PSN8ZWRpdCBjb3VudGVyPj59Jyxcblx0XHRcdCdpZihhZG1pbil7PG1lbnVyb3c+PDx1bmJsb2NrfHVuYmxvY2tTaG9ydD4+fDw8YmxvY2t8c2hvcnRjdXQ9YnxibG9jayB1c2VyPj48L21lbnVyb3c+fScsXG5cdFx0XHQnPDxibG9ja2xvZ3xzaG9ydGN1dD1CfGJsb2NrIGxvZz4+Jyxcblx0XHRcdGA8L21lbnU+JHtlbmRkaXZ9fWBcblx0XHQpO1xuXHRcdC8vIHBvcHVwcyBtZW51IHN0YXJ0cyBoZXJlXG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwU2V0dXBNZW51JykgJiYgIXgubmF2cG9wLmhhc1BvcHVwTWVudSAvKiBGSVhNRTogaGFjayAqLykge1xuXHRcdFx0eC5uYXZwb3AuaGFzUG9wdXBNZW51ID0gdHJ1ZTtcblx0XHRcdHMucHVzaChcblx0XHRcdFx0YCoke2Ryb3BkaXZ9JHttZW51VGl0bGUoJ3BvcHVwc01lbnUnKX08bWVudT5gLFxuXHRcdFx0XHQnPDx0b2dnbGVQcmV2aWV3c3x0b2dnbGUgcHJldmlld3M+PicsXG5cdFx0XHRcdCc8PHB1cmdlUG9wdXBzfHJlc2V0Pj4nLFxuXHRcdFx0XHQnPDxkaXNhYmxlUG9wdXBzfGRpc2FibGU+PicsXG5cdFx0XHRcdGA8L21lbnU+JHtlbmRkaXZ9YFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwocy5qb2luKCcnKSwgeC5hcnRpY2xlLCB4LnBhcmFtcyk7XG5cdH07XG5cdGNvbnN0IG1lbnVUaXRsZSA9IChzKSA9PiB7XG5cdFx0cmV0dXJuIGA8YSBocmVmPVwiI1wiIG5vUG9wdXA9MT4ke3BvcHVwU3RyaW5nKHMpfTwvYT5gO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLm1lbnVzLnBvcHVwUmVkaXJUaXRsZSA9IHBnLnN0cnVjdHVyZXMubWVudXMucG9wdXBUaXRsZTtcblx0cGcuc3RydWN0dXJlcy5tZW51cy5wb3B1cFJlZGlyVG9wTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLm1lbnVzLnBvcHVwVG9wTGlua3M7XG5cdGNvcHlTdHJ1Y3R1cmUoJ21lbnVzJywgJ3Nob3J0bWVudXMnKTtcblx0cGcuc3RydWN0dXJlcy5zaG9ydG1lbnVzLnBvcHVwVG9wTGlua3MgPSAoeCkgPT4ge1xuXHRcdHJldHVybiBwZy5zdHJ1Y3R1cmVzLm1lbnVzLnBvcHVwVG9wTGlua3MoeCwgdHJ1ZSk7XG5cdH07XG5cdHBnLnN0cnVjdHVyZXMuc2hvcnRtZW51cy5wb3B1cFJlZGlyVG9wTGlua3MgPSBwZy5zdHJ1Y3R1cmVzLnNob3J0bWVudXMucG9wdXBUb3BMaW5rcztcblx0cGcuc3RydWN0dXJlcy5saXRlID0ge307XG5cdHBnLnN0cnVjdHVyZXMubGl0ZS5wb3B1cExheW91dCA9ICgpID0+IHtcblx0XHRyZXR1cm4gWydwb3B1cFRpdGxlJywgJ3BvcHVwUHJldmlldyddO1xuXHR9O1xuXHRwZy5zdHJ1Y3R1cmVzLmxpdGUucG9wdXBUaXRsZSA9ICh4KSA9PiB7XG5cdFx0bG9nKGAke3guYXJ0aWNsZX06IHN0cnVjdHVyZXMubGl0ZS5wb3B1cFRpdGxlYCk7XG5cdFx0Ly8gcmV0dXJuIG5hdmxpbmtTdHJpbmdUb0hUTUwoJzxiPjw8bWFpbmxpbms+PjwvYj4nLHguYXJ0aWNsZSx4LnBhcmFtcyk7XG5cdFx0cmV0dXJuIGA8ZGl2PjxzcGFuIGNsYXNzPVwicG9wdXBfbWFpbmxpbmtcIj48Yj4ke3guYXJ0aWNsZS50b1N0cmluZygpfTwvYj48L3NwYW4+PC9kaXY+YDtcblx0fTtcblx0Ly8gRU5ERklMRTogc3RydWN0dXJlcy5qc1xuXHQvLyBTVEFSVEZJTEU6IGF1dG9lZGl0LmpzXG5cdGNvbnN0IHN1YnN0aXR1dGUgPSAoZGF0YSwgY21kQm9keSkgPT4ge1xuXHRcdC8vIG13Lm5vdGlmeShgc3ViXFxuZnJvbTogJHtjbWRCb2R5LmZyb219XFxudG86ICR7Y21kQm9keS50b31cXG5mbGFnczogJHtjbWRCb2R5LmZsYWdzfWAsIHt0YWc6ICdwb3B1cHMnLCB0eXBlOiAnd2Fybid9KTtcblx0XHRjb25zdCBmcm9tUmUgPSBuZXcgUmVnRXhwKGNtZEJvZHkuZnJvbSwgY21kQm9keS5mbGFncyk7XG5cdFx0cmV0dXJuIGRhdGEucmVwbGFjZShmcm9tUmUsIGNtZEJvZHkudG8pO1xuXHR9O1xuXHRjb25zdCBleGVjQ21kcyA9IChkYXRhLCBjbWRMaXN0KSA9PiB7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGNtZExpc3QpIHtcblx0XHRcdGRhdGEgPSBlbGVtZW50LmFjdGlvbihkYXRhLCBlbGVtZW50KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH07XG5cdGNvbnN0IHBhcnNlQ21kID0gZnVuY3Rpb24gcGFyc2VDbWQoc3RyKSB7XG5cdFx0Ly8gcmV0dXJucyBhIGxpc3Qgb2YgY29tbWFuZHNcblx0XHRpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRsZXQgcCA9IGZhbHNlO1xuXHRcdHN3aXRjaCAoc3RyLmNoYXJBdCgwKSkge1xuXHRcdFx0Y2FzZSAncyc6XG5cdFx0XHRcdHAgPSBwYXJzZVN1YnN0aXR1dGUoc3RyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChwKSB7XG5cdFx0XHRyZXR1cm4gW3AsIHBhcnNlQ21kKHAucmVtYWluZGVyKV07XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblx0Ly8gRklYTUU6IE9ubHkgdXNlZCBvbmNlIGhlcmUsIGNvbmZ1c2luZyB3aXRoIG5hdGl2ZSAoYW5kIG1vcmUgd2lkZWx5LXVzZWQpIHVuZXNjYXBlLCBzaG91bGQgcHJvYmFibHkgYmUgcmVwbGFjZWRcblx0Ly8gVGhlbiBhZ2FpbiwgdW5lc2NhcGUgaXMgc2VtaS1zb2Z0LWRlcHJlY2F0ZWQsIHNvIHdlIHNob3VsZCBsb29rIGludG8gcmVwbGFjaW5nIHRoYXQgdG9vXG5cdGNvbnN0IHVuRXNjYXBlID0gKHN0ciwgc2VwKSA9PiB7XG5cdFx0cmV0dXJuIHN0clxuXHRcdFx0LnNwbGl0KCdcXFxcXFxcXCcpXG5cdFx0XHQuam9pbignXFxcXCcpXG5cdFx0XHQuc3BsaXQoYFxcXFwke3NlcH1gKVxuXHRcdFx0LmpvaW4oc2VwKVxuXHRcdFx0LnNwbGl0KFN0cmluZy5yYXdgXFxuYClcblx0XHRcdC5qb2luKCdcXG4nKTtcblx0fTtcblx0Y29uc3QgcGFyc2VTdWJzdGl0dXRlID0gKHN0cikgPT4ge1xuXHRcdC8vIHRha2VzIGEgc3RyaW5nIGxpa2Ugcy9hL2IvZmxhZ3M7b3RoZXJjbWRzIGFuZCBwYXJzZXMgaXRcblx0XHRsZXQgZnJvbTtcblx0XHRsZXQgdG87XG5cdFx0bGV0IGZsYWdzO1xuXHRcdGxldCB0bXA7XG5cdFx0aWYgKHN0ci5sZW5ndGggPCA0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHNlcCA9IHN0ci5jaGFyQXQoMSk7XG5cdFx0c3RyID0gc3RyLnNsaWNlKDIpO1xuXHRcdHRtcCA9IHNraXBPdmVyKHN0ciwgc2VwKTtcblx0XHRpZiAodG1wKSB7XG5cdFx0XHRmcm9tID0gdG1wLnNlZ21lbnQ7XG5cdFx0XHRzdHIgPSB0bXAucmVtYWluZGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHRtcCA9IHNraXBPdmVyKHN0ciwgc2VwKTtcblx0XHRpZiAodG1wKSB7XG5cdFx0XHR0byA9IHRtcC5zZWdtZW50O1xuXHRcdFx0c3RyID0gdG1wLnJlbWFpbmRlcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRmbGFncyA9ICcnO1xuXHRcdGlmIChzdHIubGVuZ3RoID4gMCkge1xuXHRcdFx0dG1wID0gc2tpcE92ZXIoc3RyLCAnOycpIHx8IHNraXBUb0VuZChzdHIsICc7Jyk7XG5cdFx0XHRpZiAodG1wKSB7XG5cdFx0XHRcdGZsYWdzID0gdG1wLnNlZ21lbnQ7XG5cdFx0XHRcdHN0ciA9IHRtcC5yZW1haW5kZXI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhY3Rpb246IHN1YnN0aXR1dGUsXG5cdFx0XHRmcm9tLFxuXHRcdFx0dG8sXG5cdFx0XHRmbGFncyxcblx0XHRcdHJlbWFpbmRlcjogc3RyLFxuXHRcdH07XG5cdH07XG5cdGNvbnN0IHNraXBPdmVyID0gKHN0ciwgc2VwKSA9PiB7XG5cdFx0Y29uc3QgZW5kU2VnbWVudCA9IGZpbmROZXh0KHN0ciwgc2VwKTtcblx0XHRpZiAoZW5kU2VnbWVudCA8IDApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc2VnbWVudCA9IHVuRXNjYXBlKHN0ci5zbGljZSgwLCBNYXRoLm1heCgwLCBlbmRTZWdtZW50KSksIHNlcCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlZ21lbnQsXG5cdFx0XHRyZW1haW5kZXI6IHN0ci5zbGljZShNYXRoLm1heCgwLCBlbmRTZWdtZW50ICsgMSkpLFxuXHRcdH07XG5cdH07XG5cdGNvbnN0IHNraXBUb0VuZCA9IChzdHIsIF9zZXApID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VnbWVudDogc3RyLFxuXHRcdFx0cmVtYWluZGVyOiAnJyxcblx0XHR9O1xuXHR9O1xuXHRjb25zdCBmaW5kTmV4dCA9IChzdHIsIGNoKSA9PiB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChzdHIuY2hhckF0KGkpID09PSAnXFxcXCcpIHtcblx0XHRcdFx0aSArPSAyO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0ci5jaGFyQXQoaSkgPT09IGNoKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH07XG5cdGNvbnN0IHNldENoZWNrYm94ID0gKHBhcmFtLCBib3gpID0+IHtcblx0XHRjb25zdCB2YWwgPSBtdy51dGlsLmdldFBhcmFtVmFsdWUocGFyYW0pO1xuXHRcdGlmICh2YWwpIHtcblx0XHRcdHN3aXRjaCAodmFsKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRjYXNlICd5ZXMnOlxuXHRcdFx0XHRjYXNlICd0cnVlJzpcblx0XHRcdFx0XHRib3guY2hlY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRjYXNlICdubyc6XG5cdFx0XHRcdGNhc2UgJ2ZhbHNlJzpcblx0XHRcdFx0XHRib3guY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3QgYXV0b0VkaXQgPSBmdW5jdGlvbiBhdXRvRWRpdCgpIHtcblx0XHRzZXR1cFBvcHVwcygoKSA9PiB7XG5cdFx0XHRpZiAobXcudXRpbC5nZXRQYXJhbVZhbHVlKCdhdXRvaW1wbCcpICE9PSBwb3B1cFN0cmluZygnYXV0b2VkaXRfdmVyc2lvbicpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2F1dG93YXRjaGxpc3QnKSAmJiBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2FjdG9rZW4nKSA9PT0gYXV0b0NsaWNrVG9rZW4oKSkge1xuXHRcdFx0XHRwZy5mbi5tb2RpZnlXYXRjaGxpc3QobXcudXRpbC5nZXRQYXJhbVZhbHVlKCd0aXRsZScpLCBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2FjdGlvbicpKTtcblx0XHRcdH1cblx0XHRcdGlmICghZG9jdW1lbnQuZWRpdGZvcm0pIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGF1dG9FZGl0LmFscmVhZHlSYW4pIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0YXV0b0VkaXQuYWxyZWFkeVJhbiA9IHRydWU7XG5cdFx0XHRjb25zdCBjbWRTdHJpbmcgPSBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2F1dG9lZGl0Jyk7XG5cdFx0XHRpZiAoY21kU3RyaW5nKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgZWRpdGJveCA9IGRvY3VtZW50LmVkaXRmb3JtLndwVGV4dGJveDE7XG5cdFx0XHRcdFx0Y29uc3QgY21kTGlzdCA9IHBhcnNlQ21kKGNtZFN0cmluZyk7XG5cdFx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlZGl0Ym94LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IG91dHB1dCA9IGV4ZWNDbWRzKGlucHV0LCBjbWRMaXN0KTtcblx0XHRcdFx0XHRlZGl0Ym94LnZhbHVlID0gb3V0cHV0O1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHNldENoZWNrYm94KCdhdXRvbWlub3InLCBkb2N1bWVudC5lZGl0Zm9ybS53cE1pbm9yZWRpdCk7XG5cdFx0XHRzZXRDaGVja2JveCgnYXV0b3dhdGNoJywgZG9jdW1lbnQuZWRpdGZvcm0ud3BXYXRjaHRoaXMpO1xuXHRcdFx0Y29uc3QgcnZpZCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnYXV0b3J2Jyk7XG5cdFx0XHRpZiAocnZpZCkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBgJHtwZy53aWtpLmFwaXdpa2liYXNlfT9hY3Rpb249cXVlcnkmZm9ybWF0PWpzb24mZm9ybWF0dmVyc2lvbj0yJnByb3A9cmV2aXNpb25zJnJldmlkcz0ke3J2aWR9YDtcblx0XHRcdFx0c3RhcnREb3dubG9hZCh1cmwsIG51bGwsIGF1dG9FZGl0Mik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhdXRvRWRpdDIoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblx0Y29uc3QgYXV0b0VkaXQyID0gKGQpID0+IHtcblx0XHRsZXQgc3VtbWFyeSA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnYXV0b3N1bW1hcnknKTtcblx0XHRsZXQgc3VtbWFyeXByb21wdCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnYXV0b3N1bW1hcnlwcm9tcHQnKTtcblx0XHRsZXQgc3VtbWFyeW5vdGljZSA9ICcnO1xuXHRcdGlmIChkICYmIGQuZGF0YSAmJiBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ2F1dG9ydicpKSB7XG5cdFx0XHRjb25zdCBzID0gZ2V0UnZTdW1tYXJ5KHN1bW1hcnksIGQuZGF0YSk7XG5cdFx0XHRpZiAocyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0c3VtbWFyeXByb21wdCA9IHRydWU7XG5cdFx0XHRcdHN1bW1hcnlub3RpY2UgPSBwb3B1cFN0cmluZygnRmFpbGVkIHRvIGdldCByZXZpc2lvbiBpbmZvcm1hdGlvbiwgcGxlYXNlIGVkaXQgbWFudWFsbHkuXFxuXFxuJyk7XG5cdFx0XHRcdHN1bW1hcnkgPSBzaW1wbGVQcmludGYoc3VtbWFyeSwgW213LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnYXV0b3J2JyksICcodW5rbm93biknLCAnKHVua25vd24pJ10pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3VtbWFyeSA9IHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChzdW1tYXJ5cHJvbXB0KSB7XG5cdFx0XHRjb25zdCB0eHQgPSBzdW1tYXJ5bm90aWNlICsgcG9wdXBTdHJpbmcoJ0VudGVyIGEgbm9uLWVtcHR5IGVkaXQgc3VtbWFyeSBvciBwcmVzcyBjYW5jZWwgdG8gYWJvcnQnKTtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gcHJvbXB0KHR4dCwgc3VtbWFyeSk7XG5cdFx0XHRpZiAocmVzcG9uc2UpIHtcblx0XHRcdFx0c3VtbWFyeSA9IHJlc3BvbnNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoc3VtbWFyeSkge1xuXHRcdFx0ZG9jdW1lbnQuZWRpdGZvcm0ud3BTdW1tYXJ5LnZhbHVlID0gc3VtbWFyeTtcblx0XHR9XG5cdFx0Ly8gQXR0ZW1wdCB0byBhdm9pZCBwb3NzaWJsZSBwcmVtYXR1cmUgY2xpY2tpbmcgb2YgdGhlIHNhdmUgYnV0dG9uXG5cdFx0Ly8gKG1heWJlIGRlbGF5cyBpbiB1cGRhdGVzIHRvIHRoZSBET00gYXJlIHRvIGJsYW1lPz8gb3IgYSByZWQgaGVycmluZylcblx0XHRzZXRUaW1lb3V0KGF1dG9FZGl0MywgMTAwKTtcblx0fTtcblx0Y29uc3QgYXV0b0NsaWNrVG9rZW4gPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG13LnVzZXIuc2Vzc2lvbklkKCk7XG5cdH07XG5cdGNvbnN0IGF1dG9FZGl0MyA9ICgpID0+IHtcblx0XHRpZiAobXcudXRpbC5nZXRQYXJhbVZhbHVlKCdhY3Rva2VuJykgIT09IGF1dG9DbGlja1Rva2VuKCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYnRuID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdhdXRvY2xpY2snKTtcblx0XHRpZiAoYnRuKSB7XG5cdFx0XHRpZiAoZG9jdW1lbnQuZWRpdGZvcm0gJiYgZG9jdW1lbnQuZWRpdGZvcm1bYnRuXSkge1xuXHRcdFx0XHRjb25zdCBidXR0b24gPSBkb2N1bWVudC5lZGl0Zm9ybVtidG5dO1xuXHRcdFx0XHRjb25zdCBtc2cgPSB0cHJpbnRmKFxuXHRcdFx0XHRcdCdUaGUgJXMgYnV0dG9uIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgY2xpY2tlZC4gUGxlYXNlIHdhaXQgZm9yIHRoZSBuZXh0IHBhZ2UgdG8gbG9hZC4nLFxuXHRcdFx0XHRcdFtidXR0b24udmFsdWVdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJhbm5lck1lc3NhZ2UobXNnKTtcblx0XHRcdFx0ZG9jdW1lbnQudGl0bGUgPSBgKCR7ZG9jdW1lbnQudGl0bGV9KWA7XG5cdFx0XHRcdGJ1dHRvbi5jbGljaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0dHByaW50ZignQ291bGQgbm90IGZpbmQgYnV0dG9uICVzLiBQbGVhc2UgY2hlY2sgdGhlIHNldHRpbmdzIGluIHlvdXIgamF2YXNjcmlwdCBmaWxlLicsIFtidG5dKSxcblx0XHRcdFx0XHR7dGFnOiAncG9wdXBzJywgdHlwZTogJ2Vycm9yJ31cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IGJhbm5lck1lc3NhZ2UgPSAocykgPT4ge1xuXHRcdGNvbnN0IGhlYWRpbmdzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaDEnKTtcblx0XHRpZiAoaGVhZGluZ3MpIHtcblx0XHRcdGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0ZGl2LmlubmVySFRNTCA9IGA8Zm9udCBzaXplPSsxPjxiPiR7cGcuZXNjYXBlUXVvdGVzSFRNTChzKX08L2I+PC9mb250PmA7XG5cdFx0XHRoZWFkaW5nc1swXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkaXYsIGhlYWRpbmdzWzBdKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGdldFJ2U3VtbWFyeSA9ICh0ZW1wbGF0ZSwganNvbikgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvID0gZ2V0SnNPYmooanNvbik7XG5cdFx0XHRjb25zdCBbZWRpdF0gPSBhbnlDaGlsZChvLnF1ZXJ5LnBhZ2VzKS5yZXZpc2lvbnM7XG5cdFx0XHRjb25zdCB0aW1lc3RhbXAgPSBlZGl0LnRpbWVzdGFtcFxuXHRcdFx0XHQuc3BsaXQoL1tBLVpdL2cpXG5cdFx0XHRcdC5qb2luKCcgJylcblx0XHRcdFx0LnJlcGxhY2UoL14gKnwgKiQvZywgJycpO1xuXHRcdFx0cmV0dXJuIHNpbXBsZVByaW50Zih0ZW1wbGF0ZSwgW2VkaXQucmV2aWQsIHRpbWVzdGFtcCwgZWRpdC51c2VyaGlkZGVuID8gJyhoaWRkZW4pJyA6IGVkaXQudXNlcl0pO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblx0Ly8gRU5ERklMRTogYXV0b2VkaXQuanNcblx0Ly8gU1RBUlRGSUxFOiBkb3dubG9hZGVyLmpzXG5cdC8qKlxuXHQgKiBAZmlsZW92ZXJ2aWV3XG5cdCAqIHtAc291cmNlIERvd25sb2FkZXJ9LCBhIHhtbGh0dHByZXF1ZXN0IHdyYXBwZXIsIGFuZCBoZWxwZXIgZnVuY3Rpb25zLlxuXHQgKi9cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgRG93bmxvYWRlclxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQGNsYXNzIFRoZSBEb3dubG9hZGVyIGNsYXNzLiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyB0byBkb3dubG9hZCBzdHVmZi5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIHRvIGRvd25sb2FkLiBUaGlzIGNhbiBiZSBvbWl0dGVkIGFuZCBzdXBwbGllZCBsYXRlci5cblx0ICovXG5cdGNsYXNzIERvd25sb2FkZXIge1xuXHRcdGNvbnN0cnVjdG9yKHVybCkge1xuXHRcdFx0aWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0dGhpcy5odHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0XHR9XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSB1cmwgdG8gZG93bmxvYWRcblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy51cmwgPSB1cmw7XG5cdFx0XHQvKipcblx0XHRcdCAqIEEgdW5pdmVyc2FsbHkgdW5pcXVlIElEIG51bWJlclxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIGludGVnZXJcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5pZCA9IG51bGw7XG5cdFx0XHQvKipcblx0XHRcdCAqIE1vZGlmaWNhdGlvbiBkYXRlLCB0byBiZSBjdWxsZWQgZnJvbSB0aGUgaW5jb21pbmcgaGVhZGVyc1xuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIERhdGVcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMubGFzdE1vZGlmaWVkID0gbnVsbDtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2hhdCB0byBkbyB3aGVuIHRoZSBkb3dubG9hZCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5XG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgRnVuY3Rpb25cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY2FsbGJhY2tGdW5jdGlvbiA9IG51bGw7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdoYXQgdG8gZG8gb24gZmFpbHVyZVxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIEZ1bmN0aW9uXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLm9uRmFpbHVyZSA9IG51bGw7XG5cdFx0XHQvKipcblx0XHRcdCAqIEZsYWcgc2V0IG9uIDxjb2RlPmFib3J0PC9jb2RlPlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIGJvb2xlYW5cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5hYm9ydGVkID0gZmFsc2U7XG5cdFx0XHQvKipcblx0XHRcdCAqIEhUVFAgbWV0aG9kLiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjOS5odG1sIGZvclxuXHRcdFx0ICogcG9zc2liaWxpdGllcy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5tZXRob2QgPSAnR0VUJztcblx0XHRcdC8qKlxuXHRcdFx0ICogQXN5bmMgZmxhZy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBib29sZWFuXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuYXN5bmMgPSB0cnVlO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBTdWJtaXRzIHRoZSBodHRwIHJlcXVlc3QuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyp9IHhcblx0XHQgKi9cblx0XHRzZW5kKHgpIHtcblx0XHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuaHR0cC5zZW5kKHgpO1xuXHRcdH1cblx0XHQvKiBBYm9ydHMgdGhlIGRvd25sb2FkLCBzZXR0aW5nIHRoZSA8Y29kZT5hYm9ydGVkPC9jb2RlPiBmaWVsZCB0byB0cnVlLiAqL1xuXHRcdGFib3J0KCkge1xuXHRcdFx0aWYgKCF0aGlzLmh0dHApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFib3J0ZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHRoaXMuaHR0cC5hYm9ydCgpO1xuXHRcdH1cblx0XHQvKiogUmV0dXJucyB0aGUgZG93bmxvYWRlZCBkYXRhLiAqL1xuXHRcdGdldERhdGEoKSB7XG5cdFx0XHRpZiAoIXRoaXMuaHR0cCkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmh0dHAucmVzcG9uc2VUZXh0O1xuXHRcdH1cblx0XHQvKiogUHJlcGFyZXMgdGhlIGRvd25sb2FkLiAqL1xuXHRcdHNldFRhcmdldCgpIHtcblx0XHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5odHRwLm9wZW4odGhpcy5tZXRob2QsIHRoaXMudXJsLCB0aGlzLmFzeW5jKTtcblx0XHRcdHRoaXMuaHR0cC5zZXRSZXF1ZXN0SGVhZGVyKCdBcGktVXNlci1BZ2VudCcsIHBnLmFwaS51c2VyQWdlbnQpO1xuXHRcdH1cblx0XHQvKiogR2V0cyB0aGUgc3RhdGUgb2YgdGhlIGRvd25sb2FkLiAqL1xuXHRcdGdldFJlYWR5U3RhdGUoKSB7XG5cdFx0XHRpZiAoIXRoaXMuaHR0cCkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmh0dHAucmVhZHlTdGF0ZTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogU3RhcnRzIHRoZSBkb3dubG9hZC5cblx0XHQgKiBOb3RlIHRoYXQgc2V0VGFyZ2V0IHtAc291cmNlIERvd25sb2FkZXIjc2V0VGFyZ2V0fSBtdXN0IGJlIHJ1biBmaXJzdFxuXHRcdCAqL1xuXHRcdHN0YXJ0KCkge1xuXHRcdFx0aWYgKCF0aGlzLmh0dHApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHRwZy5taXNjLmRvd25sb2Fkc0luUHJvZ3Jlc3NbdGhpcy5pZF0gPSBzZWxmO1xuXHRcdFx0dGhpcy5odHRwLnNlbmQobnVsbCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEdldHMgdGhlICdMYXN0LU1vZGlmaWVkJyBkYXRlIGZyb20gdGhlIGRvd25sb2FkIGhlYWRlcnMuXG5cdFx0ICogU2hvdWxkIGJlIHJ1biBhZnRlciB0aGUgZG93bmxvYWQgY29tcGxldGVzLlxuXHRcdCAqIFJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4gb24gZmFpbHVyZS5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge0RhdGV9XG5cdFx0ICovXG5cdFx0Z2V0TGFzdE1vZGlmaWVkRGF0ZSgpIHtcblx0XHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGxhc3Rtb2Q7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsYXN0bW9kID0gdGhpcy5odHRwLmdldFJlc3BvbnNlSGVhZGVyKCdMYXN0LU1vZGlmaWVkJyk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0LyogZW1wdHkgKi9cblx0XHRcdH1cblx0XHRcdGlmIChsYXN0bW9kKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgRGF0ZShsYXN0bW9kKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IGYgY2FsbGJhY2sgZnVuY3Rpb24sIGNhbGxlZCBhcyA8Y29kZT5mKHRoaXMpPC9jb2RlPiBvbiBzdWNjZXNzXG5cdFx0ICovXG5cdFx0c2V0Q2FsbGJhY2soZikge1xuXHRcdFx0aWYgKCF0aGlzLmh0dHApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5odHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGY7XG5cdFx0fVxuXHRcdGdldFN0YXR1cygpIHtcblx0XHRcdGlmICghdGhpcy5odHRwKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuaHR0cC5zdGF0dXM7XG5cdFx0fVxuXHR9XG5cdG5ldyBEb3dubG9hZGVyKCk7XG5cdHBnLm1pc2MuZG93bmxvYWRzSW5Qcm9ncmVzcyA9IHt9O1xuXHQvLyBoZWxwZXIgZnVuY3Rpb25zXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHtAc291cmNlIERvd25sb2FkZXJ9IGFuZCBwcmVwYXJlcyBpdCBmb3IgYWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgdG8gZG93bmxvYWRcblx0ICogQHBhcmFtIHtpbnRlZ2VyfSBpZCBUaGUgSUQgb2YgdGhlIHtAc291cmNlIERvd25sb2FkZXJ9IG9iamVjdFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBvbiBzdWNjZXNzXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBvbmZhaWx1cmVcblx0ICogQHJldHVybiB7U3RyaW5nL0Rvd25sb2FkZXJ9IHRoZSB7QHNvdXJjZSBEb3dubG9hZGVyfSBvYmplY3QgY3JlYXRlZCwgb3IgJ29oZGVhcicgaWYgYW4gdW5zdXBwb3J0ZWQgYnJvd3NlclxuXHQgKi9cblx0Y29uc3QgbmV3RG93bmxvYWQgPSBmdW5jdGlvbiBuZXdEb3dubG9hZCh1cmwsIGlkLCBjYWxsYmFjaywgb25mYWlsdXJlKSB7XG5cdFx0Y29uc3QgZCA9IG5ldyBEb3dubG9hZGVyKHVybCk7XG5cdFx0aWYgKCFkLmh0dHApIHtcblx0XHRcdHJldHVybiAnb2hkZWFyJztcblx0XHR9XG5cdFx0ZC5pZCA9IGlkO1xuXHRcdGQuc2V0VGFyZ2V0KCk7XG5cdFx0b25mYWlsdXJlIHx8PSAyO1xuXHRcdGNvbnN0IGYgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoZC5nZXRSZWFkeVN0YXRlKCkgPT09IDQpIHtcblx0XHRcdFx0ZGVsZXRlIHBnLm1pc2MuZG93bmxvYWRzSW5Qcm9ncmVzc1t0aGlzLmlkXTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAoZC5nZXRTdGF0dXMoKSA9PT0gMjAwKSB7XG5cdFx0XHRcdFx0XHRkLmRhdGEgPSBkLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdGQubGFzdE1vZGlmaWVkID0gZC5nZXRMYXN0TW9kaWZpZWREYXRlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayhkKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBvbmZhaWx1cmUgPT09IHR5cGVvZiAxKSB7XG5cdFx0XHRcdFx0XHRpZiAob25mYWlsdXJlID4gMCkge1xuXHRcdFx0XHRcdFx0XHQvLyByZXRyeVxuXHRcdFx0XHRcdFx0XHRuZXdEb3dubG9hZCh1cmwsIGlkLCBjYWxsYmFjaywgb25mYWlsdXJlIC0gMSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygb25mYWlsdXJlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRvbmZhaWx1cmUoZCwgdXJsLCBpZCwgY2FsbGJhY2spO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0LyogaWdub3JlIGl0ICovXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGQuc2V0Q2FsbGJhY2soZik7XG5cdFx0cmV0dXJuIGQ7XG5cdH07XG5cdC8qKlxuXHQgKiBTaW11bGF0ZXMgYSBkb3dubG9hZCBmcm9tIGNhY2hlZCBkYXRhLlxuXHQgKiBUaGUgc3VwcGxpZWQgZGF0YSBpcyBwdXQgaW50byBhIHtAc291cmNlIERvd25sb2FkZXJ9IGFzIGlmIGl0IGhhZCBkb3dubG9hZGVkIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwuXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gaWQgVGhlIElELlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2ssIHdoaWNoIGlzIGludm9rZWQgaW1tZWRpYXRlbHkgYXMgPGNvZGU+Y2FsbGJhY2soZCk8L2NvZGU+LFxuXHQgKiB3aGVyZSA8Y29kZT5kPC9jb2RlPiBpcyB0aGUgbmV3IHtAc291cmNlIERvd25sb2FkZXJ9LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBUaGUgKGNhY2hlZCkgZGF0YS5cblx0ICogQHBhcmFtIHtEYXRlfSBsYXN0TW9kaWZpZWQgVGhlIChjYWNoZWQpIGxhc3QgbW9kaWZpZWQgZGF0ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG93bmVyXG5cdCAqL1xuXHRjb25zdCBmYWtlRG93bmxvYWQgPSAodXJsLCBpZCwgY2FsbGJhY2ssIGRhdGEsIGxhc3RNb2RpZmllZCwgb3duZXIpID0+IHtcblx0XHRjb25zdCBkID0gbmV3RG93bmxvYWQodXJsLCBjYWxsYmFjayk7XG5cdFx0ZC5vd25lciA9IG93bmVyO1xuXHRcdGQuaWQgPSBpZDtcblx0XHRkLmRhdGEgPSBkYXRhO1xuXHRcdGQubGFzdE1vZGlmaWVkID0gbGFzdE1vZGlmaWVkO1xuXHRcdHJldHVybiBjYWxsYmFjayhkKTtcblx0fTtcblx0LyoqXG5cdCAqIFN0YXJ0cyBhIGRvd25sb2FkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgdG8gZG93bmxvYWRcblx0ICogQHBhcmFtIHtpbnRlZ2VyfSBpZCBUaGUgSUQgb2YgdGhlIHtAc291cmNlIERvd25sb2FkZXJ9IG9iamVjdFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBvbiBzdWNjZXNzXG5cdCAqIEByZXR1cm4ge1N0cmluZy9Eb3dubG9hZGVyfSB0aGUge0Bzb3VyY2UgRG93bmxvYWRlcn0gb2JqZWN0IGNyZWF0ZWQsIG9yICdvaGRlYXInIGlmIGFuIHVuc3VwcG9ydGVkIGJyb3dzZXJcblx0ICovXG5cdGNvbnN0IHN0YXJ0RG93bmxvYWQgPSAodXJsLCBpZCwgY2FsbGJhY2spID0+IHtcblx0XHRjb25zdCBkID0gbmV3RG93bmxvYWQodXJsLCBpZCwgY2FsbGJhY2spO1xuXHRcdGlmICh0eXBlb2YgZCA9PT0gdHlwZW9mICcnKSB7XG5cdFx0XHRyZXR1cm4gZDtcblx0XHR9XG5cdFx0ZC5zdGFydCgpO1xuXHRcdHJldHVybiBkO1xuXHR9O1xuXHQvKipcblx0ICogQWJvcnRzIGFsbCBkb3dubG9hZHMgd2hpY2ggaGF2ZSBiZWVuIHN0YXJ0ZWQuXG5cdCAqL1xuXHRjb25zdCBhYm9ydEFsbERvd25sb2FkcyA9ICgpID0+IHtcblx0XHRmb3IgKGNvbnN0IHggaW4gcGcubWlzYy5kb3dubG9hZHNJblByb2dyZXNzKSB7XG5cdFx0XHRpZiAoIU9iamVjdC5oYXNPd24ocGcubWlzYy5kb3dubG9hZHNJblByb2dyZXNzLCB4KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHBnLm1pc2MuZG93bmxvYWRzSW5Qcm9ncmVzc1t4XS5hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0cGcubWlzYy5kb3dubG9hZHNJblByb2dyZXNzW3hdLmFib3J0KCk7XG5cdFx0XHRcdGRlbGV0ZSBwZy5taXNjLmRvd25sb2Fkc0luUHJvZ3Jlc3NbeF07XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0LyogZW1wdHkgKi9cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdC8vIEVOREZJTEU6IGRvd25sb2FkZXIuanNcblx0Ly8gU1RBUlRGSUxFOiBsaXZlcHJldmlldy5qc1xuXHQvLyBUT0RPOiBsb2NhdGlvbiBpcyBvZnRlbiBub3QgY29ycmVjdCAoZWcgcmVsYXRpdmUgbGlua3MgaW4gcHJldmlld3MpXG5cdC8vIE5PVEU6IHJlbW92ZWQgbWQ1IGFuZCBpbWFnZSBhbmQgbWF0aCBwYXJzaW5nLiB3YXMgYnJva2VuLCBsb3RzIG9mIGJ5dGVzLlxuXHQvKipcblx0ICogSW5zdGFWaWV3IC0gYSBNZWRpYXdpa2kgdG8gSFRNTCBjb252ZXJ0ZXIgaW4gSmF2YVNjcmlwdFxuXHQgKiBWZXJzaW9uIDAuNi4xXG5cdCAqIENvcHlyaWdodCAoQykgUGVkcm8gRmF5b2xsZSAyMDA1LTIwMDZcblx0ICoge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VzZXI6UGlsYWZ9XG5cdCAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgbGljZW5zZVxuXHQgKlxuXHQgKiBDaGFuZ2Vsb2c6XG5cdCAqXG5cdCAqIDAuNi4xXG5cdCAqIC0gRml4ZWQgcHJvYmxlbSBjYXVzZWQgYnkgXFxyIGNoYXJhY3RlcnNcblx0ICogLSBJbXByb3ZlZCBpbmxpbmUgZm9ybWF0dGluZyBwYXJzZXJcblx0ICpcblx0ICogMC42XG5cdCAqIC0gQ2hhbmdlZCBuYW1lIHRvIEluc3RhVmlld1xuXHQgKiAtIFNvbWUgbWFqb3IgY29kZSByZW9yZ2FuaXphdGlvbnMgYW5kIGZhY3RvcmVkIG91dCBzb21lIGNvbW1vbiBmdW5jdGlvbnNcblx0ICogLSBIYW5kbGVkIGNvbnZlcnNpb24gb2YgcmVsYXRpdmUgbGlua3MgKGkuZS4gW1svZm9vXV0pXG5cdCAqIC0gRml4ZWQgbWlzcmVuZGVyaW5nIG9mIGFkamFjZW50IGRlZmluaXRpb24gbGlzdCBpdGVtc1xuXHQgKiAtIEZpeGVkIGJ1ZyBpbiB0YWJsZSBoZWFkaW5ncyBoYW5kbGluZ1xuXHQgKiAtIENoYW5nZWQgZGF0ZSBmb3JtYXQgaW4gc2lnbmF0dXJlcyB0byByZWZsZWN0IE1lZGlhd2lraSdzXG5cdCAqIC0gRml4ZWQgaGFuZGxpbmcgb2YgW1s6SW1hZ2U6Li4uXV1cblx0ICogLSBVcGRhdGVkIE1ENSBmdW5jdGlvbiAoaG9wZWZ1bGx5IGl0IHdpbGwgd29yayB3aXRoIFVURi04KVxuXHQgKiAtIEZpeGVkIGJ1ZyBpbiBoYW5kbGluZyBvZiBsaW5rcyBpbnNpZGUgaW1hZ2VzXG5cdCAqXG5cdCAqIFRvIGRvOlxuXHQgKiAtIEJldHRlciBzdXBwb3J0IGZvciBtYXRoIHRhZ3Ncblx0ICogLSBGdWxsIHN1cHBvcnQgZm9yIG5vd2lraSB0YWdcblx0ICogLSBQYXJzZXItYmFzZWQgKGFzIG9wcG9zZWQgdG8gUmVnRXhwLWJhc2VkKSBpbmxpbmUgd2lraWNvZGUgaGFuZGxpbmcgKG1ha2UgaXQgb25lLXBhc3MgYW5kXG5cdCAqICAgYnVsbGV0LXByb29mKVxuXHQgKiAtIFN1cHBvcnQgZm9yIHRlbXBsYXRlcyAodGhyb3VnaCBBSkFYKVxuXHQgKiAtIFN1cHBvcnQgZm9yIGNvbG91cmVkIGxpbmtzIChBSkFYKVxuXHQgKi9cblx0Y29uc3QgSW5zdGEgPSB7fTtcblx0Y29uc3Qgc2V0dXBMaXZlUHJldmlldyA9ICgpID0+IHtcblx0XHRsZXQgX2I7XG5cdFx0Ly8gb3B0aW9uc1xuXHRcdEluc3RhLmNvbmYgPSB7XG5cdFx0XHRiYXNlVXJsOiAnJyxcblx0XHRcdHVzZXI6IHt9LFxuXHRcdFx0d2lraToge1xuXHRcdFx0XHRsYW5nOiBwZy53aWtpLmxhbmcsXG5cdFx0XHRcdGludGVyd2lraTogcGcud2lraS5pbnRlcndpa2ksXG5cdFx0XHRcdGRlZmF1bHRfdGh1bWJfd2lkdGg6IDE4MCxcblx0XHRcdH0sXG5cdFx0XHRwYXRoczoge1xuXHRcdFx0XHRhcnRpY2xlczogYCR7cGcud2lraS5hcnRpY2xlUGF0aH0vYCxcblx0XHRcdFx0Ly8gT25seSB1c2VkIGZvciBJbnN0YSBwcmV2aWV3cyB3aXRoIGltYWdlcy4gKG5vdCBpbiBwb3B1cHMpXG5cdFx0XHRcdG1hdGg6ICcvbWF0aC8nLFxuXHRcdFx0XHRpbWFnZXM6ICdodHRwczovL3R1Lnpob25nd2VuLndpa2kvaW1hZ2VzL3FpdXdlbmJhaWtlL3poLycsXG5cdFx0XHRcdGltYWdlc19mYWxsYmFjazogJy8vd20uemhvbmd3ZW4ud2lraS9jb21tb25zLycsXG5cdFx0XHR9LFxuXHRcdFx0bG9jYWxlOiB7XG5cdFx0XHRcdHVzZXI6IG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3BnLm5zVXNlcklkXSxcblx0XHRcdFx0aW1hZ2U6IG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3BnLm5zSW1hZ2VJZF0sXG5cdFx0XHRcdGNhdGVnb3J5OiBtdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc0NhdGVnb3J5SWRdLFxuXHRcdFx0XHQvLyBzaG91bGRuJ3QgYmUgdXNlZCBpbiBwb3B1cCBwcmV2aWV3cywgaSB0aGlua1xuXHRcdFx0XHRtb250aHM6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcblx0XHRcdH0sXG5cdFx0fTtcblx0XHQvLyBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXMgb3IgYmFja3JlZmVyZW5jZXNcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdChfYiA9IEluc3RhLmNvbmYudXNlcikubmFtZSB8fCAoX2IubmFtZSA9ICdRaXV3ZW4gQmFpa2UgY29udHJpYnV0b3JzJyk7XG5cdFx0SW5zdGEuY29uZi51c2VyLnNpZ25hdHVyZSA9IGBbWyR7SW5zdGEuY29uZi5sb2NhbGUudXNlcn06JHtJbnN0YS5jb25mLnVzZXIubmFtZX18JHtJbnN0YS5jb25mLnVzZXIubmFtZX1dXWA7XG5cdFx0Ly8gZGVmaW5lIGNvbnN0YW50c1xuXHRcdEluc3RhLkJMT0NLX0lNQUdFID0gbmV3IFJlZ0V4cChcblx0XHRcdGBeXFxcXFtcXFxcWyg/OkZpbGV8SW1hZ2V8JHtJbnN0YS5jb25mLmxvY2FsZS5pbWFnZX0pOi4qP1xcXFx8Lio/KD86ZnJhbWV8dGh1bWJuYWlsfHRodW1ifG5vbmV8cmlnaHR8bGVmdHxjZW50ZXIpYCxcblx0XHRcdCdpJ1xuXHRcdCk7XG5cdH07XG5cdEluc3RhLmR1bXAgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcblx0XHRpZiAodHlwZW9mIGZyb20gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRmcm9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZnJvbX1gKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB0byA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHRvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dG99YCk7XG5cdFx0fVxuXHRcdHRvLmlubmVySFRNTCA9IHRoaXMuY29udmVydChmcm9tLnZhbHVlKTtcblx0fTtcblx0SW5zdGEuY29udmVydCA9ICh3aWtpKSA9PiB7XG5cdFx0Y29uc3QgbGwgPSB0eXBlb2Ygd2lraSA9PT0gJ3N0cmluZycgPyB3aWtpLnJlcGxhY2UoL1xcci9nLCAnJykuc3BsaXQoL1xcbi8pIDogd2lraTsgLy8gbGluZXMgb2Ygd2lraWNvZGVcblx0XHRsZXQgbyA9ICcnOyAvLyByZXN1bHQgb2YgcGFzc2luZyBhIHJlZ2V4cCB0byBjb21wYXJlTGluZVN0cmluZ09yUmVnKClcblx0XHRsZXQgcCA9IDA7XG5cdFx0bGV0IHI7XG5cdFx0Ly8gc29tZSBzaG9ydGhhbmRzXG5cdFx0Y29uc3QgcmVtYWluID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGxsLmxlbmd0aDtcblx0XHR9O1xuXHRcdGNvbnN0IHNoID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGxsLnNoaWZ0KCk7XG5cdFx0fTsgLy8gc2hpZnRcblx0XHRjb25zdCBwcyA9IChzKSA9PiB7XG5cdFx0XHRvICs9IHM7XG5cdFx0fTsgLy8gcHVzaFxuXG5cdFx0Ly8gc2ltaWxhciB0byBDJ3MgcHJpbnRmLCB1c2VzID8gYXMgcGxhY2Vob2xkZXJzLCA/PyB0byBlc2NhcGUgcXVlc3Rpb24gbWFya3Ncblx0XHRjb25zdCBmID0gZnVuY3Rpb24gZiguLi5hcmdzKSB7XG5cdFx0XHRsZXQgaSA9IDE7XG5cdFx0XHRjb25zdCBhID0gYXJncztcblx0XHRcdGxldCBbZl0gPSBhO1xuXHRcdFx0bGV0IG8gPSAnJztcblx0XHRcdGxldCBjO1xuXHRcdFx0bGV0IHA7XG5cdFx0XHRmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKChwID0gZi5pbmRleE9mKCc/JykpICsgMSkge1xuXHRcdFx0XHRcdC8vIGFsbG93IGNoYXJhY3RlciBlc2NhcGluZ1xuXHRcdFx0XHRcdGMgPSBmLmNoYXJBdChwICsgMSkgPT09ICc/JyA/IDEgOiAwO1xuXHRcdFx0XHRcdGkgLT0gYztcblx0XHRcdFx0XHRvICs9IGYuc2xpY2UoMCwgTWF0aC5tYXgoMCwgcCkpICsgKGMgPyAnPycgOiBhW2ldKTtcblx0XHRcdFx0XHRmID0gZi5zbGljZShwICsgMSArIGMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbyArIGY7XG5cdFx0fTtcblx0XHRjb25zdCBodG1sX2VudGl0aWVzID0gKHMpID0+IHtcblx0XHRcdHJldHVybiBzLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblx0XHR9O1xuXHRcdC8vIFdpa2kgdGV4dCBwYXJzaW5nIHRvIGh0bWwgaXMgYSBuaWdodG1hcmUuXG5cdFx0Ly8gVGhlIGJlbG93IGZ1bmN0aW9ucyBkZWxpYmVyYXRlbHkgZG9uJ3QgZXNjYXBlIHRoZSBhbXBlcnNhbmQgc2luY2UgdGhpcyB3b3VsZCBtYWtlIGl0IG1vcmVcblx0XHQvLyBkaWZmaWN1bHQsIGFuZCB3ZSBkb24ndCBhYnNvbHV0ZWx5IG5lZWQgdG8gZm9yIGhvdyB3ZSBuZWVkIGl0LiBUaGlzIG1lYW5zIHRoYXQgYW55XG5cdFx0Ly8gdW5lc2NhcGVkIGFtcGVyc2FuZHMgaW4gd2lraXRleHQgd2lsbCByZW1haW4gdW5lc2NhcGVkIGFuZCBjYW4gY2F1c2UgaW52YWxpZCBIVE1MLlxuXHRcdC8vIEJyb3dzZXJzIHNob3VsZCBhbGwgYmUgYWJsZSB0byBoYW5kbGUgaXQgdGhvdWdoLiBXZSBhbHNvIGVzY2FwZSBzaWduaWZpY2FudCB3aWtpbWFya3VwXG5cdFx0Ly8gY2hhcmFjdGVycyB0byBwcmV2ZW50IGZ1cnRoZXIgbWF0Y2hpbmcgb24gdGhlIHByb2Nlc3NlZCB0ZXh0LlxuXHRcdGNvbnN0IGh0bWxlc2NhcGVfdGV4dCA9IChzKSA9PiB7XG5cdFx0XHRyZXR1cm4gc1xuXHRcdFx0XHQucmVwbGFjZSgvPC9nLCAnJmx0OycpXG5cdFx0XHRcdC5yZXBsYWNlKC8+L2csICcmZ3Q7Jylcblx0XHRcdFx0LnJlcGxhY2UoLzovZywgJyYjNTg7Jylcblx0XHRcdFx0LnJlcGxhY2UoL1xcWy9nLCAnJiM5MTsnKVxuXHRcdFx0XHQucmVwbGFjZSgvXS9nLCAnJiM5MzsnKTtcblx0XHR9O1xuXHRcdGNvbnN0IGh0bWxlc2NhcGVfYXR0ciA9IChzKSA9PiB7XG5cdFx0XHRyZXR1cm4gaHRtbGVzY2FwZV90ZXh0KHMpLnJlcGxhY2UoLycvZywgJyYjMzk7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuXHRcdH07XG5cdFx0Ly8gcmV0dXJuIHRoZSBmaXJzdCBub24gbWF0Y2hpbmcgY2hhcmFjdGVyIHBvc2l0aW9uIGJldHdlZW4gdHdvIHN0cmluZ3Ncblx0XHRjb25zdCBzdHJfaW1hdGNoID0gKGEsIGIpID0+IHtcblx0XHRcdGxldCBpO1xuXHRcdFx0bGV0IGw7XG5cdFx0XHRmb3IgKGkgPSAwLCBsID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRpZiAoYS5jaGFyQXQoaSkgIT09IGIuY2hhckF0KGkpKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBpO1xuXHRcdH07XG5cdFx0Ly8gY29tcGFyZSBjdXJyZW50IGxpbmUgYWdhaW5zdCBhIHN0cmluZyBvciByZWdleHBcblx0XHQvLyBpZiBwYXNzZWQgYSBzdHJpbmcgaXQgd2lsbCBjb21wYXJlIG9ubHkgdGhlIGZpcnN0IHN0cmluZy5sZW5ndGggY2hhcmFjdGVyc1xuXHRcdC8vIGlmIHBhc3NlZCBhIHJlZ2V4cCB0aGUgcmVzdWx0IGlzIHN0b3JlZCBpbiByXG5cdFx0Y29uc3QgY29tcGFyZUxpbmVTdHJpbmdPclJlZyA9IChjKSA9PiB7XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnID8gbGxbMF0gJiYgbGxbMF0uc2xpY2UoMCwgYy5sZW5ndGgpID09PSBjIDogKHIgPSBsbFswXSAmJiBsbFswXS5tYXRjaChjKSk7XG5cdFx0fTtcblx0XHRjb25zdCBjb21wYXJlTGluZVN0cmluZyA9IChjKSA9PiB7XG5cdFx0XHRyZXR1cm4gbGxbMF0gPT09IGM7XG5cdFx0fTsgLy8gY29tcGFyZSBjdXJyZW50IGxpbmUgYWdhaW5zdCBhIHN0cmluZ1xuXHRcdGNvbnN0IGNoYXJBdFBvaW50ID0gKHApID0+IHtcblx0XHRcdHJldHVybiBsbFswXS5jaGFyQXQocCk7XG5cdFx0fTsgLy8gcmV0dXJuIGNoYXIgYXQgcG9zIHBcblx0XHRjb25zdCBlbmRsID0gKHMpID0+IHtcblx0XHRcdHBzKHMpO1xuXHRcdFx0c2goKTtcblx0XHR9O1xuXHRcdGNvbnN0IHBhcnNlX2xpc3QgPSAoKSA9PiB7XG5cdFx0XHRsZXQgcHJldiA9ICcnO1xuXHRcdFx0d2hpbGUgKHJlbWFpbigpICYmIGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoL14oWyMqOjtdKykoLiopJC8pKSB7XG5cdFx0XHRcdGNvbnN0IGxfbWF0Y2ggPSByO1xuXHRcdFx0XHRzaCgpO1xuXHRcdFx0XHRjb25zdCBpcG9zID0gc3RyX2ltYXRjaChwcmV2LCBsX21hdGNoWzFdKTtcblx0XHRcdFx0Ly8gY2xvc2UgdW5jb250aW51ZWQgbGlzdHNcblx0XHRcdFx0Zm9yIChsZXQgcHJldlBvcyA9IHByZXYubGVuZ3RoIC0gMTsgcHJldlBvcyA+PSBpcG9zOyBwcmV2UG9zLS0pIHtcblx0XHRcdFx0XHRjb25zdCBwaSA9IHByZXYuY2hhckF0KHByZXZQb3MpO1xuXHRcdFx0XHRcdGlmIChwaSA9PT0gJyonKSB7XG5cdFx0XHRcdFx0XHRwcygnPC91bD4nKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHBpID09PSAnIycpIHtcblx0XHRcdFx0XHRcdHBzKCc8L29sPicpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoWycnLCAnKicsICcjJ10uaW5kZXhPZihsX21hdGNoWzFdLmNoYXJBdChwcmV2UG9zKSkpIHtcblx0XHRcdFx0XHRcdC8vIGNsb3NlIGEgZGwgb25seSBpZiB0aGUgbmV3IGl0ZW0gaXMgbm90IGEgZGwgaXRlbSAoOiwgOyBvciBlbXB0eSlcblx0XHRcdFx0XHRcdHBzKCc8L2RsPicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBvcGVuIG5ldyBsaXN0c1xuXHRcdFx0XHRmb3IgKGxldCBtYXRjaFBvcyA9IGlwb3M7IG1hdGNoUG9zIDwgbF9tYXRjaFsxXS5sZW5ndGg7IG1hdGNoUG9zKyspIHtcblx0XHRcdFx0XHRjb25zdCBsaSA9IGxfbWF0Y2hbMV0uY2hhckF0KG1hdGNoUG9zKTtcblx0XHRcdFx0XHRpZiAobGkgPT09ICcqJykge1xuXHRcdFx0XHRcdFx0cHMoJzx1bD4nKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGxpID09PSAnIycpIHtcblx0XHRcdFx0XHRcdHBzKCc8b2w+Jyk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChbJycsICcqJywgJyMnXS5pbmRleE9mKHByZXYuY2hhckF0KG1hdGNoUG9zKSkpIHtcblx0XHRcdFx0XHRcdC8vIG9wZW4gYSBuZXcgZGwgb25seSBpZiB0aGUgcHJldiBpdGVtIGlzIG5vdCBhIGRsIGl0ZW0gKDosIDsgb3IgZW1wdHkpXG5cdFx0XHRcdFx0XHRwcygnPGRsPicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzd2l0Y2ggKGxfbWF0Y2hbMV0uYXQoLTEpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnKic6XG5cdFx0XHRcdFx0Y2FzZSAnIyc6XG5cdFx0XHRcdFx0XHRwcyhgPGxpPiR7cGFyc2VfaW5saW5lX25vd2lraShsX21hdGNoWzJdKX1gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzsnOiB7XG5cdFx0XHRcdFx0XHRwcygnPGR0PicpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZHRfbWF0Y2ggPSBsX21hdGNoWzJdLm1hdGNoKC8oLio/KSg6Lio/KSQvKTtcblx0XHRcdFx0XHRcdC8vIGhhbmRsZSA7ZHQgOmRkIGZvcm1hdFxuXHRcdFx0XHRcdFx0aWYgKGR0X21hdGNoKSB7XG5cdFx0XHRcdFx0XHRcdHBzKHBhcnNlX2lubGluZV9ub3dpa2koZHRfbWF0Y2hbMV0pKTtcblx0XHRcdFx0XHRcdFx0bGwudW5zaGlmdChkdF9tYXRjaFsyXSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRwcyhwYXJzZV9pbmxpbmVfbm93aWtpKGxfbWF0Y2hbMl0pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICc6Jzpcblx0XHRcdFx0XHRcdHBzKGA8ZGQ+JHtwYXJzZV9pbmxpbmVfbm93aWtpKGxfbWF0Y2hbMl0pfWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFssIHByZXZdID0gbF9tYXRjaDtcblx0XHRcdH1cblx0XHRcdC8vIGNsb3NlIHJlbWFpbmluZyBsaXN0c1xuXHRcdFx0Zm9yIChsZXQgaSA9IHByZXYubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0cHMoZignPC8/PicsIHByZXYuY2hhckF0KGkpID09PSAnKicgPyAndWwnIDogcHJldi5jaGFyQXQoaSkgPT09ICcjJyA/ICdvbCcgOiAnZGwnKSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBwYXJzZV90YWJsZSA9ICgpID0+IHtcblx0XHRcdGVuZGwoZignPHRhYmxlPicsIGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoL157XFx8KCAuKikkLykgPyByWzFdIDogJycpKTtcblx0XHRcdGZvciAoOyByZW1haW4oKTsgKSB7XG5cdFx0XHRcdGlmIChjb21wYXJlTGluZVN0cmluZ09yUmVnKCd8JykpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJBdFBvaW50KDEpKSB7XG5cdFx0XHRcdFx0XHRjYXNlICd9Jzpcblx0XHRcdFx0XHRcdFx0ZW5kbCgnPC90YWJsZT4nKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0Y2FzZSAnLSc6XG5cdFx0XHRcdFx0XHRcdGVuZGwoZignPHRyPicsIGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoL1xcfC0qKC4qKS8pWzFdKSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cGFyc2VfdGFibGVfZGF0YSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChjb21wYXJlTGluZVN0cmluZ09yUmVnKCchJykpIHtcblx0XHRcdFx0XHRwYXJzZV90YWJsZV9kYXRhKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2goKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgcGFyc2VfdGFibGVfZGF0YSA9ICgpID0+IHtcblx0XHRcdGxldCB0ZF9saW5lO1xuXHRcdFx0bGV0IG1hdGNoX2k7XG5cdFx0XHQvLyAxOiBcInwrXCIsICd8JyBvciAnKydcblx0XHRcdC8vIDI6ID8/XG5cdFx0XHQvLyAzOiBhdHRyaWJ1dGVzID8/XG5cdFx0XHQvLyBUT0RPOiBmaW5pc2ggY29tbWVudGluZyB0aGlzIHJlZ2V4cFxuXHRcdFx0Y29uc3QgdGRfbWF0Y2ggPSBzaCgpLm1hdGNoKC9eKFxcfFxcK3xcXHx8ISkoKD86KFteW3xdKj8pXFx8KD8hXFx8KSk/KC4qKSkkLyk7XG5cdFx0XHRpZiAodGRfbWF0Y2hbMV0gPT09ICd8KycpIHtcblx0XHRcdFx0cHMoJzxjYXB0aW9uJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwcyhgPHQke3RkX21hdGNoWzFdID09PSAnfCcgPyAnZCcgOiAnaCd9YCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGRfbWF0Y2hbM10pIHtcblx0XHRcdFx0Ly8gcHMoJyAnICsgdGRfbWF0Y2hbM10pXG5cdFx0XHRcdG1hdGNoX2kgPSA0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2hfaSA9IDI7XG5cdFx0XHR9XG5cdFx0XHRwcygnPicpO1xuXHRcdFx0aWYgKHRkX21hdGNoWzFdID09PSAnfCsnKSB7XG5cdFx0XHRcdHBzKHBhcnNlX2lubGluZV9ub3dpa2kodGRfbWF0Y2hbbWF0Y2hfaV0pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHVzZSB8fCBvciAhISBhcyBhIGNlbGwgc2VwYXJhdG9yIGRlcGVuZGluZyBvbiBjb250ZXh0XG5cdFx0XHRcdC8vIE5PVEU6IHdoZW4gc3BsaXQoKSBpcyBwYXNzZWQgYSByZWdleHAgbWFrZSBzdXJlIHRvIHVzZSBub24tY2FwdHVyaW5nIGJyYWNrZXRzXG5cdFx0XHRcdHRkX2xpbmUgPSB0ZF9tYXRjaFttYXRjaF9pXS5zcGxpdCh0ZF9tYXRjaFsxXSA9PT0gJ3wnID8gJ3x8JyA6IC9cXHxcXHx8ISEvKTtcblx0XHRcdFx0cHMocGFyc2VfaW5saW5lX25vd2lraSh0ZF9saW5lLnNoaWZ0KCkpKTtcblx0XHRcdFx0d2hpbGUgKHRkX2xpbmUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGxsLnVuc2hpZnQodGRfbWF0Y2hbMV0gKyB0ZF9saW5lLnBvcCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IHRjID0gMDtcblx0XHRcdGNvbnN0IHRkID0gW107XG5cdFx0XHR3aGlsZSAocmVtYWluKCkpIHtcblx0XHRcdFx0dGQucHVzaChzaCgpKTtcblx0XHRcdFx0aWYgKGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoJ3wnKSkge1xuXHRcdFx0XHRcdGlmICghdGMpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY2hhckF0UG9pbnQoMSkgPT09ICd9Jykge1xuXHRcdFx0XHRcdFx0Ly8gd2UncmUgYXQgdGhlIG91dGVyLW1vc3QgbGV2ZWwgKG5vIG5lc3RlZCB0YWJsZXMpLCBza2lwIHRvIHRkIHBhcnNlXG5cdFx0XHRcdFx0XHR0Yy0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghdGMgJiYgY29tcGFyZUxpbmVTdHJpbmdPclJlZygnIScpKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29tcGFyZUxpbmVTdHJpbmdPclJlZygne3wnKSkge1xuXHRcdFx0XHRcdHRjKys7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0ZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHBzKEluc3RhLmNvbnZlcnQodGQpKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IHBhcnNlX3ByZSA9ICgpID0+IHtcblx0XHRcdHBzKCc8cHJlPicpO1xuXHRcdFx0ZG8ge1xuXHRcdFx0XHRlbmRsKGAke3BhcnNlX2lubGluZV9ub3dpa2kobGxbMF0uc2xpY2UoMSkpfVxcbmApO1xuXHRcdFx0fSB3aGlsZSAocmVtYWluKCkgJiYgY29tcGFyZUxpbmVTdHJpbmdPclJlZygnICcpKTtcblx0XHRcdHBzKCc8L3ByZT4nKTtcblx0XHR9O1xuXHRcdGNvbnN0IHBhcnNlX2Jsb2NrX2ltYWdlID0gKCkgPT4ge1xuXHRcdFx0cHMocGFyc2VfaW1hZ2Uoc2goKSkpO1xuXHRcdH07XG5cdFx0Y29uc3QgcGFyc2VfaW1hZ2UgPSAoc3RyKSA9PiB7XG5cdFx0XHQvLyBnZXQgd2hhdCdzIGluIGJldHdlZW4gXCJbW0ltYWdlOlwiIGFuZCBcIl1dXCJcblx0XHRcdGxldCB0YWcgPSBzdHIuc3Vic3RyaW5nKHN0ci5pbmRleE9mKCc6JykgKyAxLCBzdHIubGVuZ3RoIC0gMik7XG5cdFx0XHRsZXQgd2lkdGg7XG5cdFx0XHRsZXQgYXR0ciA9IFtdO1xuXHRcdFx0bGV0IGZpbGVuYW1lO1xuXHRcdFx0bGV0IGNhcHRpb24gPSAnJztcblx0XHRcdGxldCB0aHVtYiA9IDA7XG5cdFx0XHRsZXQgZnJhbWUgPSAwO1xuXHRcdFx0bGV0IGNlbnRlciA9IDA7XG5cdFx0XHRsZXQgYWxpZ24gPSAnJztcblx0XHRcdGlmICgvXFx8Ly50ZXN0KHRhZykpIHtcblx0XHRcdFx0Ly8gbWFuYWdlIG5lc3RlZCBsaW5rc1xuXHRcdFx0XHRsZXQgbmVzdGluZyA9IDA7XG5cdFx0XHRcdGxldCBsYXN0X2F0dHI7XG5cdFx0XHRcdGZvciAobGV0IGkgPSB0YWcubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuXHRcdFx0XHRcdGlmICh0YWcuY2hhckF0KGkpID09PSAnfCcgJiYgIW5lc3RpbmcpIHtcblx0XHRcdFx0XHRcdGxhc3RfYXR0ciA9IHRhZy5zbGljZShpICsgMSk7XG5cdFx0XHRcdFx0XHR0YWcgPSB0YWcuc2xpY2UoMCwgTWF0aC5tYXgoMCwgaSkpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN3aXRjaCAodGFnLnNsaWNlKGkgLSAxLCBpIC0gMSArIDIpKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ11dJzpcblx0XHRcdFx0XHRcdFx0XHRuZXN0aW5nKys7XG5cdFx0XHRcdFx0XHRcdFx0aS0tO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICdbWyc6XG5cdFx0XHRcdFx0XHRcdFx0bmVzdGluZy0tO1xuXHRcdFx0XHRcdFx0XHRcdGktLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YXR0ciA9IHRhZy5zcGxpdCgvXFxzKlxcfFxccyovKTtcblx0XHRcdFx0YXR0ci5wdXNoKGxhc3RfYXR0cik7XG5cdFx0XHRcdGZpbGVuYW1lID0gYXR0ci5zaGlmdCgpO1xuXHRcdFx0XHRsZXQgd19tYXRjaDtcblx0XHRcdFx0Zm9yICg7IGF0dHIubGVuZ3RoID4gMDsgYXR0ci5zaGlmdCgpKSB7XG5cdFx0XHRcdFx0d19tYXRjaCA9IGF0dHJbMF0ubWF0Y2goL14oXFxkKikoPzpbcHhdKlxcZCopP3B4JC8pO1xuXHRcdFx0XHRcdGlmICh3X21hdGNoKSB7XG5cdFx0XHRcdFx0XHRbLCB3aWR0aF0gPSB3X21hdGNoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKGF0dHJbMF0pIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAndGh1bWInOlxuXHRcdFx0XHRcdFx0XHRjYXNlICd0aHVtYm5haWwnOlxuXHRcdFx0XHRcdFx0XHRcdHRodW1iID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRmcmFtZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2ZyYW1lJzpcblx0XHRcdFx0XHRcdFx0XHRmcmFtZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ25vbmUnOlxuXHRcdFx0XHRcdFx0XHRjYXNlICdyaWdodCc6XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2xlZnQnOlxuXHRcdFx0XHRcdFx0XHRcdGNlbnRlciA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFthbGlnbl0gPSBhdHRyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICdjZW50ZXInOlxuXHRcdFx0XHRcdFx0XHRcdGNlbnRlciA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YWxpZ24gPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHIubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRbY2FwdGlvbl0gPSBhdHRyO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbGVuYW1lID0gdGFnO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH07XG5cdFx0Y29uc3QgcGFyc2VfaW5saW5lX25vd2lraSA9IChzdHIpID0+IHtcblx0XHRcdGxldCBzdGFydDtcblx0XHRcdGxldCBsYXN0ZW5kID0gMDtcblx0XHRcdGxldCBzdWJzdGFydCA9IDA7XG5cdFx0XHRsZXQgbmVzdGxldiA9IDA7XG5cdFx0XHRsZXQgb3Blbjtcblx0XHRcdGxldCBjbG9zZTtcblx0XHRcdGxldCBzdWJsb29wO1xuXHRcdFx0bGV0IGh0bWwgPSAnJztcblx0XHRcdHdoaWxlICgoc3RhcnQgPSBzdHIuaW5kZXhPZignPG5vJy5jb25jYXQoJ3dpa2knLCAnPicpLCBzdWJzdGFydCkpICE9PSAtMSkge1xuXHRcdFx0XHRodG1sICs9IHBhcnNlX2lubGluZV93aWtpKHN0ci5zdWJzdHJpbmcobGFzdGVuZCwgc3RhcnQpKTtcblx0XHRcdFx0c3RhcnQgKz0gODtcblx0XHRcdFx0c3Vic3RhcnQgPSBzdGFydDtcblx0XHRcdFx0c3VibG9vcCA9IHRydWU7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRvcGVuID0gc3RyLmluZGV4T2YoJzxubycuY29uY2F0KCd3aWtpJywgJz4nKSwgc3Vic3RhcnQpO1xuXHRcdFx0XHRcdGNsb3NlID0gc3RyLmluZGV4T2YoJzwvbm8nLmNvbmNhdCgnd2lraScsICc+JyksIHN1YnN0YXJ0KTtcblx0XHRcdFx0XHRpZiAoY2xvc2UgPD0gb3BlbiB8fCBvcGVuID09PSAtMSkge1xuXHRcdFx0XHRcdFx0aWYgKGNsb3NlID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaHRtbCArIGh0bWxfZW50aXRpZXMoc3RyLnNsaWNlKHN0YXJ0KSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzdWJzdGFydCA9IGNsb3NlICsgOTtcblx0XHRcdFx0XHRcdGlmIChuZXN0bGV2KSB7XG5cdFx0XHRcdFx0XHRcdG5lc3RsZXYtLTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxhc3RlbmQgPSBzdWJzdGFydDtcblx0XHRcdFx0XHRcdFx0aHRtbCArPSBodG1sX2VudGl0aWVzKHN0ci5zdWJzdHJpbmcoc3RhcnQsIGxhc3RlbmQgLSA5KSk7XG5cdFx0XHRcdFx0XHRcdHN1Ymxvb3AgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3Vic3RhcnQgPSBvcGVuICsgODtcblx0XHRcdFx0XHRcdG5lc3RsZXYrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKHN1Ymxvb3ApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGh0bWwgKyBwYXJzZV9pbmxpbmVfd2lraShzdHIuc2xpY2UobGFzdGVuZCkpO1xuXHRcdH07XG5cdFx0Y29uc3QgcGFyc2VfaW5saW5lX2ltYWdlcyA9IChzdHIpID0+IHtcblx0XHRcdGxldCBzdGFydDtcblx0XHRcdGxldCBzdWJzdGFydCA9IDA7XG5cdFx0XHRsZXQgbmVzdGxldiA9IDA7XG5cdFx0XHRsZXQgbG9vcDtcblx0XHRcdGxldCBjbG9zZTtcblx0XHRcdGxldCBvcGVuO1xuXHRcdFx0bGV0IHdpa2k7XG5cdFx0XHRsZXQgaHRtbDtcblx0XHRcdHdoaWxlICgoc3RhcnQgPSBzdHIuaW5kZXhPZignW1snLCBzdWJzdGFydCkpICE9PSAtMSkge1xuXHRcdFx0XHRpZiAobmV3IFJlZ0V4cChgXihJbWFnZXxGaWxlfCR7SW5zdGEuY29uZi5sb2NhbGUuaW1hZ2V9KTpgLCAnaScpLnRlc3Qoc3RyLnNsaWNlKHN0YXJ0ICsgMikpKSB7XG5cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG5cdFx0XHRcdFx0c3Vic3RhcnQgPSBzdGFydDtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRzdWJzdGFydCArPSAyO1xuXHRcdFx0XHRcdFx0Y2xvc2UgPSBzdHIuaW5kZXhPZignXV0nLCBzdWJzdGFydCk7XG5cdFx0XHRcdFx0XHRvcGVuID0gc3RyLmluZGV4T2YoJ1tbJywgc3Vic3RhcnQpO1xuXHRcdFx0XHRcdFx0aWYgKGNsb3NlIDw9IG9wZW4gfHwgb3BlbiA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGNsb3NlID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzdHI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0c3Vic3RhcnQgPSBjbG9zZTtcblx0XHRcdFx0XHRcdFx0aWYgKG5lc3RsZXYpIHtcblx0XHRcdFx0XHRcdFx0XHRuZXN0bGV2LS07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0d2lraSA9IHN0ci5zdWJzdHJpbmcoc3RhcnQsIGNsb3NlICsgMik7XG5cdFx0XHRcdFx0XHRcdFx0aHRtbCA9IHBhcnNlX2ltYWdlKHdpa2kpO1xuXHRcdFx0XHRcdFx0XHRcdHN0ciA9IHN0ci5yZXBsYWNlKHdpa2ksIGh0bWwpO1xuXHRcdFx0XHRcdFx0XHRcdHN1YnN0YXJ0ID0gc3RhcnQgKyBodG1sLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHRsb29wID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN1YnN0YXJ0ID0gb3Blbjtcblx0XHRcdFx0XHRcdFx0bmVzdGxldisrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gd2hpbGUgKGxvb3ApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3RyO1xuXHRcdH07XG5cdFx0Ly8gdGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzcGVjdCB0aGUgRklMTyBzdHJ1Y3R1cmUgb2YgSFRNTFxuXHRcdC8vIGJ1dCBzaW5jZSBtb3N0IGJyb3dzZXJzIGNhbiBoYW5kbGUgaXQgSSdsbCBzYXZlIG15c2VsZiB0aGUgaGFzc2xlXG5cdFx0Y29uc3QgcGFyc2VfaW5saW5lX2Zvcm1hdHRpbmcgPSAoc3RyKSA9PiB7XG5cdFx0XHRsZXQgZW07XG5cdFx0XHRsZXQgc3Q7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBsaTtcblx0XHRcdGxldCBvID0gJyc7XG5cdFx0XHR3aGlsZSAoKGkgPSBzdHIuaW5kZXhPZihcIicnXCIsIGxpKSkgKyAxKSB7XG5cdFx0XHRcdG8gKz0gc3RyLnN1YnN0cmluZyhsaSwgaSk7XG5cdFx0XHRcdGxpID0gaSArIDI7XG5cdFx0XHRcdGlmIChzdHIuY2hhckF0KGkgKyAyKSA9PT0gXCInXCIpIHtcblx0XHRcdFx0XHRsaSsrO1xuXHRcdFx0XHRcdHN0ID0gIXN0O1xuXHRcdFx0XHRcdG8gKz0gc3QgPyAnPHN0cm9uZz4nIDogJzwvc3Ryb25nPic7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZW0gPSAhZW07XG5cdFx0XHRcdFx0byArPSBlbSA/ICc8ZW0+JyA6ICc8L2VtPic7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBvICsgc3RyLnNsaWNlKGxpKTtcblx0XHR9O1xuXHRcdGNvbnN0IHBhcnNlX2lubGluZV93aWtpID0gKHN0cikgPT4ge1xuXHRcdFx0c3RyID0gcGFyc2VfaW5saW5lX2ltYWdlcyhzdHIpO1xuXHRcdFx0c3RyID0gcGFyc2VfaW5saW5lX2Zvcm1hdHRpbmcoc3RyKTtcblx0XHRcdC8vIG1hdGhcblx0XHRcdHN0ciA9IHN0ci5yZXBsYWNlKC88bWF0aD4oLio/KTxcXC9tYXRoPi9naSwgJycpO1xuXHRcdFx0Ly8gQnVpbGQgYSBNZWRpYXdpa2ktZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG5cdFx0XHRsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRsZXQgbWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRlcygpO1xuXHRcdFx0aWYgKG1pbnV0ZXMgPCAxMCkge1xuXHRcdFx0XHRtaW51dGVzID0gYDAke21pbnV0ZXN9YDtcblx0XHRcdH1cblx0XHRcdGRhdGUgPSBmKFxuXHRcdFx0XHQnPzo/LCA/ID8gPyAoVVRDKScsXG5cdFx0XHRcdGRhdGUuZ2V0VVRDSG91cnMoKSxcblx0XHRcdFx0bWludXRlcyxcblx0XHRcdFx0ZGF0ZS5nZXRVVENEYXRlKCksXG5cdFx0XHRcdEluc3RhLmNvbmYubG9jYWxlLm1vbnRoc1tkYXRlLmdldFVUQ01vbnRoKCldLFxuXHRcdFx0XHRkYXRlLmdldFVUQ0Z1bGxZZWFyKClcblx0XHRcdCk7XG5cdFx0XHQvLyB0ZXh0IGZvcm1hdHRpbmdcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHN0clxuXHRcdFx0XHRcdC8vIHNpZ25hdHVyZXNcblx0XHRcdFx0XHQucmVwbGFjZSgvfns1fSg/IX4pL2csIGRhdGUpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL357NH0oPyF+KS9nLCBgJHtJbnN0YS5jb25mLnVzZXIubmFtZX0gJHtkYXRlfWApXG5cdFx0XHRcdFx0LnJlcGxhY2UoL357M30oPyF+KS9nLCBJbnN0YS5jb25mLnVzZXIubmFtZSlcblx0XHRcdFx0XHQvLyBbWzpDYXRlZ29yeTouLi5dXSwgW1s6SW1hZ2U6Li4uXV0sIGV0Yy4uLlxuXHRcdFx0XHRcdC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHRcdFx0YFxcXFxbXFxcXFs6KCg/OiR7SW5zdGEuY29uZi5sb2NhbGUuY2F0ZWdvcnl9fEltYWdlfEZpbGV8JHtJbnN0YS5jb25mLmxvY2FsZS5pbWFnZX18JHtJbnN0YS5jb25mLndpa2kuaW50ZXJ3aWtpfSk6W158XSo/KVxcXFxdXFxcXF0oXFxcXHcqKWAsXG5cdFx0XHRcdFx0XHRcdCdnaSdcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHQoXyQwLCAkMSwgJDIpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFx0XCI8YSBocmVmPSc/Jz4/PC9hPlwiLFxuXHRcdFx0XHRcdFx0XHRcdEluc3RhLmNvbmYucGF0aHMuYXJ0aWNsZXMgKyBodG1sZXNjYXBlX2F0dHIoJDEpLFxuXHRcdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMSkgKyBodG1sZXNjYXBlX3RleHQoJDIpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC8vIHJlbW92ZSBzdHJhaWdodCBjYXRlZ29yeSBhbmQgaW50ZXJ3aWtpIHRhZ3Ncblx0XHRcdFx0XHQucmVwbGFjZShcblx0XHRcdFx0XHRcdG5ldyBSZWdFeHAoXG5cdFx0XHRcdFx0XHRcdGBcXFxcW1xcXFxbKD86JHtJbnN0YS5jb25mLmxvY2FsZS5jYXRlZ29yeX18JHtJbnN0YS5jb25mLndpa2kuaW50ZXJ3aWtpfSk6Lio/XFxcXF1cXFxcXWAsXG5cdFx0XHRcdFx0XHRcdCdnaSdcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHQnJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQvLyBbWzpDYXRlZ29yeTouLi58TGlua3NdXSwgW1s6SW1hZ2U6Li4ufExpbmtzXV0sIGV0Yy4uLlxuXHRcdFx0XHRcdC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHRcdFx0YFxcXFxbXFxcXFs6KCg/OiR7SW5zdGEuY29uZi5sb2NhbGUuY2F0ZWdvcnl9fEltYWdlfEZpbGV8JHtJbnN0YS5jb25mLmxvY2FsZS5pbWFnZX18JHtJbnN0YS5jb25mLndpa2kuaW50ZXJ3aWtpfSk6Lio/KVxcXFx8KFteXFxcXF1dKz8pXFxcXF1cXFxcXShcXFxcdyopYCxcblx0XHRcdFx0XHRcdFx0J2dpJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdChfJDAsICQxLCAkMiwgJDMpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFx0XCI8YSBocmVmPSc/Jz4/PC9hPlwiLFxuXHRcdFx0XHRcdFx0XHRcdEluc3RhLmNvbmYucGF0aHMuYXJ0aWNsZXMgKyBodG1sZXNjYXBlX2F0dHIoJDEpLFxuXHRcdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMikgKyBodG1sZXNjYXBlX3RleHQoJDMpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC8vIFtbL1JlbGF0aXZlIGxpbmtzXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFxcL1tefF0qPyldXS9nLCAoXyQwLCAkMSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXCI8YSBocmVmPSc/Jz4/PC9hPlwiLCBJbnN0YS5jb25mLmJhc2VVcmwgKyBodG1sZXNjYXBlX2F0dHIoJDEpLCBodG1sZXNjYXBlX3RleHQoJDEpKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC8vIFtbL1JlcGxhY2VkfFJlbGF0aXZlIGxpbmtzXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFxcLy4qPylcXHwoLis/KV1dL2csIChfJDAsICQxLCAkMikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXCI8YSBocmVmPSc/Jz4/PC9hPlwiLCBJbnN0YS5jb25mLmJhc2VVcmwgKyBodG1sZXNjYXBlX2F0dHIoJDEpLCBodG1sZXNjYXBlX3RleHQoJDIpKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC8vIFtbQ29tbW9uIGxpbmtzXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFteW3xdKj8pXV0oXFx3KikvZywgKF8kMCwgJDEsICQyKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZihcblx0XHRcdFx0XHRcdFx0XCI8YSBocmVmPSc/Jz4/PC9hPlwiLFxuXHRcdFx0XHRcdFx0XHRJbnN0YS5jb25mLnBhdGhzLmFydGljbGVzICsgaHRtbGVzY2FwZV9hdHRyKCQxKSxcblx0XHRcdFx0XHRcdFx0aHRtbGVzY2FwZV90ZXh0KCQxKSArIGh0bWxlc2NhcGVfdGV4dCgkMilcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQvLyBbW1JlcGxhY2VkfExpbmtzXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFteW10qPylcXHwoW15cXF1dKz8pXV0oXFx3KikvZywgKF8kMCwgJDEsICQyLCAkMykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFwiPGEgaHJlZj0nPyc+PzwvYT5cIixcblx0XHRcdFx0XHRcdFx0SW5zdGEuY29uZi5wYXRocy5hcnRpY2xlcyArIGh0bWxlc2NhcGVfYXR0cigkMSksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMikgKyBodG1sZXNjYXBlX3RleHQoJDMpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Ly8gW1tTdHJpcHBlZDpOYW1lc3BhY2V8TmFtZXNwYWNlXV1cblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbXFxbKFteXFxdXSo/Oik/KC4qPykoICpcXCguKj9cXCkpP1xcfF1dL2csIChfJDAsICQxLCAkMiwgJDMpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmKFxuXHRcdFx0XHRcdFx0XHRcIjxhIGhyZWY9Jz8nPj88L2E+XCIsXG5cdFx0XHRcdFx0XHRcdEluc3RhLmNvbmYucGF0aHMuYXJ0aWNsZXMgKyBodG1sZXNjYXBlX2F0dHIoJDEpICsgaHRtbGVzY2FwZV9hdHRyKCQyKSArIGh0bWxlc2NhcGVfYXR0cigkMyksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMilcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQvLyBFeHRlcm5hbCBsaW5rc1xuXHRcdFx0XHRcdC5yZXBsYWNlKC9cXFsoaHR0cHM/fG5ld3N8ZnRwfG1haWx0b3xnb3BoZXJ8aXJjKTooXFwvKikoW15cXF1dKj8pICguKj8pXS9nLCAoXyQwLCAkMSwgJDIsICQzLCAkNCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFwiPGEgY2xhc3M9J2V4dGVybmFsJyBocmVmPSc/Oj8nPj88L2E+XCIsXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfYXR0cigkMSksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfYXR0cigkMikgKyBodG1sZXNjYXBlX2F0dHIoJDMpLFxuXHRcdFx0XHRcdFx0XHRodG1sZXNjYXBlX3RleHQoJDQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlcGxhY2UoL1xcW2h0dHA6XFwvXFwvKC4qPyldL2csIChfJDAsICQxKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZihcIjxhIGNsYXNzPSdleHRlcm5hbCcgaHJlZj0naHR0cDovLz8nPlsjXTwvYT5cIiwgaHRtbGVzY2FwZV9hdHRyKCQxKSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQucmVwbGFjZSgvXFxbKG5ld3N8ZnRwfG1haWx0b3xnb3BoZXJ8aXJjKTooXFwvKikoLio/KV0vZywgKF8kMCwgJDEsICQyLCAkMykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGYoXG5cdFx0XHRcdFx0XHRcdFwiPGEgY2xhc3M9J2V4dGVybmFsJyBocmVmPSc/Oj8nPj86PzwvYT5cIixcblx0XHRcdFx0XHRcdFx0aHRtbGVzY2FwZV9hdHRyKCQxKSxcblx0XHRcdFx0XHRcdFx0aHRtbGVzY2FwZV9hdHRyKCQyKSArIGh0bWxlc2NhcGVfYXR0cigkMyksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMSksXG5cdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMikgKyBodG1sZXNjYXBlX3RleHQoJDMpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlcGxhY2UoXG5cdFx0XHRcdFx0XHQvKF58ICkoaHR0cHM/fG5ld3N8ZnRwfG1haWx0b3xnb3BoZXJ8aXJjKTooXFwvKikoW14gJF0qW14gISQsLjo7P10pL2csXG5cdFx0XHRcdFx0XHQoXyQwLCAkMSwgJDIsICQzLCAkNCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZihcblx0XHRcdFx0XHRcdFx0XHRcIj88YSBjbGFzcz0nZXh0ZXJuYWwnIGhyZWY9Jz86Pyc+Pzo/PC9hPlwiLFxuXHRcdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMSksXG5cdFx0XHRcdFx0XHRcdFx0aHRtbGVzY2FwZV9hdHRyKCQyKSxcblx0XHRcdFx0XHRcdFx0XHRodG1sZXNjYXBlX2F0dHIoJDMpICsgaHRtbGVzY2FwZV9hdHRyKCQ0KSxcblx0XHRcdFx0XHRcdFx0XHRodG1sZXNjYXBlX3RleHQoJDIpLFxuXHRcdFx0XHRcdFx0XHRcdGh0bWxlc2NhcGVfdGV4dCgkMykgKyBodG1sZXNjYXBlX3RleHQoJDQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC5yZXBsYWNlKCdfX05PVE9DX18nLCAnJylcblx0XHRcdFx0XHQucmVwbGFjZSgnX19OT0lOREVYX18nLCAnJylcblx0XHRcdFx0XHQucmVwbGFjZSgnX19JTkRFWF9fJywgJycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoJ19fTk9FRElUU0VDVElPTl9fJywgJycpXG5cdFx0XHQpO1xuXHRcdH07XG5cdFx0Ly8gYmVnaW4gcGFyc2luZ1xuXHRcdGZvciAoOyByZW1haW4oKTsgKSB7XG5cdFx0XHRpZiAoY29tcGFyZUxpbmVTdHJpbmdPclJlZygvXig9ezEsNn0pKC4qKVxcMSguKikkLykpIHtcblx0XHRcdFx0cCA9IDA7XG5cdFx0XHRcdGVuZGwoZignPGg/Pj88L2g/Pj8nLCByWzFdLmxlbmd0aCwgcGFyc2VfaW5saW5lX25vd2lraShyWzJdKSwgclsxXS5sZW5ndGgsIHJbM10pKTtcblx0XHRcdH0gZWxzZSBpZiAoY29tcGFyZUxpbmVTdHJpbmdPclJlZygvXlsjKjo7XS8pKSB7XG5cdFx0XHRcdHAgPSAwO1xuXHRcdFx0XHRwYXJzZV9saXN0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoJyAnKSkge1xuXHRcdFx0XHRwID0gMDtcblx0XHRcdFx0cGFyc2VfcHJlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoJ3t8JykpIHtcblx0XHRcdFx0cCA9IDA7XG5cdFx0XHRcdHBhcnNlX3RhYmxlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbXBhcmVMaW5lU3RyaW5nT3JSZWcoL14tLS0tKyQvKSkge1xuXHRcdFx0XHRwID0gMDtcblx0XHRcdFx0ZW5kbCgnPGhyPicpO1xuXHRcdFx0fSBlbHNlIGlmIChjb21wYXJlTGluZVN0cmluZ09yUmVnKEluc3RhLkJMT0NLX0lNQUdFKSkge1xuXHRcdFx0XHRwID0gMDtcblx0XHRcdFx0cGFyc2VfYmxvY2tfaW1hZ2UoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBwYXJhZ3JhcGhzXG5cdFx0XHRcdGlmIChjb21wYXJlTGluZVN0cmluZygnJykpIHtcblx0XHRcdFx0XHRwID0gcmVtYWluKCkgPiAxICYmIGxsWzFdID09PSAnJztcblx0XHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdFx0ZW5kbCgnPHA+PGJyPicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIXApIHtcblx0XHRcdFx0XHRcdHBzKCc8cD4nKTtcblx0XHRcdFx0XHRcdHAgPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwcyhgJHtwYXJzZV9pbmxpbmVfbm93aWtpKGxsWzBdKX0gYCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2goKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG87XG5cdH07XG5cdGNvbnN0IHdpa2kyaHRtbCA9ICh0eHQsIGJhc2V1cmwpID0+IHtcblx0XHRJbnN0YS5jb25mLmJhc2VVcmwgPSBiYXNldXJsO1xuXHRcdHJldHVybiBJbnN0YS5jb252ZXJ0KHR4dCk7XG5cdH07XG5cdC8vIEVOREZJTEU6IGxpdmVwcmV2aWV3LmpzXG5cdC8vIFNUQVJURklMRTogcGFnZWluZm8uanNcblx0Y29uc3QgcG9wdXBGaWx0ZXJQYWdlU2l6ZSA9IChkYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGZvcm1hdEJ5dGVzKGRhdGEubGVuZ3RoKTtcblx0fTtcblx0Y29uc3QgcG9wdXBGaWx0ZXJDb3VudExpbmtzID0gKGRhdGEpID0+IHtcblx0XHRjb25zdCBudW0gPSBjb3VudExpbmtzKGRhdGEpO1xuXHRcdHJldHVybiBgJHtTdHJpbmcobnVtKX0mbmJzcDske251bSA9PT0gMSA/IHBvcHVwU3RyaW5nKCd3aWtpTGluaycpIDogcG9wdXBTdHJpbmcoJ3dpa2lMaW5rcycpfWA7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyQ291bnRJbWFnZXMgPSAoZGF0YSkgPT4ge1xuXHRcdGNvbnN0IG51bSA9IGNvdW50SW1hZ2VzKGRhdGEpO1xuXHRcdHJldHVybiBgJHtTdHJpbmcobnVtKX0mbmJzcDske251bSA9PT0gMSA/IHBvcHVwU3RyaW5nKCdpbWFnZScpIDogcG9wdXBTdHJpbmcoJ2ltYWdlcycpfWA7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyQ291bnRDYXRlZ29yaWVzID0gKGRhdGEpID0+IHtcblx0XHRjb25zdCBudW0gPSBjb3VudENhdGVnb3JpZXMoZGF0YSk7XG5cdFx0cmV0dXJuIGAke1N0cmluZyhudW0pfSZuYnNwOyR7bnVtID09PSAxID8gcG9wdXBTdHJpbmcoJ2NhdGVnb3J5JykgOiBwb3B1cFN0cmluZygnY2F0ZWdvcmllcycpfWA7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyTGFzdE1vZGlmaWVkID0gKF9kYXRhLCBkb3dubG9hZCkgPT4ge1xuXHRcdGNvbnN0IGxhc3Rtb2QgPSBkb3dubG9hZC5sYXN0TW9kaWZpZWQ7XG5cdFx0Y29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblx0XHRjb25zdCBhZ2UgPSBub3cgLSBsYXN0bW9kO1xuXHRcdGlmIChsYXN0bW9kICYmIGdldFZhbHVlT2YoJ3BvcHVwTGFzdE1vZGlmaWVkJykpIHtcblx0XHRcdHJldHVybiB0cHJpbnRmKCclcyBvbGQnLCBbZm9ybWF0QWdlKGFnZSldKS5yZXBsYWNlKC8gL2csICcmbmJzcDsnKTtcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXHRjb25zdCBmb3JtYXRBZ2UgPSAoYWdlKSA9PiB7XG5cdFx0Ly8gY29lcmNlIGludG8gYSBudW1iZXJcblx0XHRsZXQgYSA9IDAgKyBhZ2U7XG5cdFx0Y29uc3QgYWEgPSBhO1xuXHRcdGNvbnN0IHNlY2xlbiA9IDEwMDA7XG5cdFx0Y29uc3QgbWlubGVuID0gNjAgKiBzZWNsZW47XG5cdFx0Y29uc3QgaG91cmxlbiA9IDYwICogbWlubGVuO1xuXHRcdGNvbnN0IGRheWxlbiA9IDI0ICogaG91cmxlbjtcblx0XHRjb25zdCB3ZWVrbGVuID0gNyAqIGRheWxlbjtcblx0XHRjb25zdCBudW13ZWVrcyA9IChhIC0gKGEgJSB3ZWVrbGVuKSkgLyB3ZWVrbGVuO1xuXHRcdGEgLT0gbnVtd2Vla3MgKiB3ZWVrbGVuO1xuXHRcdGNvbnN0IHN3ZWVrcyA9IGFkZHVuaXQobnVtd2Vla3MsICd3ZWVrJyk7XG5cdFx0Y29uc3QgbnVtZGF5cyA9IChhIC0gKGEgJSBkYXlsZW4pKSAvIGRheWxlbjtcblx0XHRhIC09IG51bWRheXMgKiBkYXlsZW47XG5cdFx0Y29uc3Qgc2RheXMgPSBhZGR1bml0KG51bWRheXMsICdkYXknKTtcblx0XHRjb25zdCBudW1ob3VycyA9IChhIC0gKGEgJSBob3VybGVuKSkgLyBob3VybGVuO1xuXHRcdGEgLT0gbnVtaG91cnMgKiBob3VybGVuO1xuXHRcdGNvbnN0IHNob3VycyA9IGFkZHVuaXQobnVtaG91cnMsICdob3VyJyk7XG5cdFx0Y29uc3QgbnVtbWlucyA9IChhIC0gKGEgJSBtaW5sZW4pKSAvIG1pbmxlbjtcblx0XHRhIC09IG51bW1pbnMgKiBtaW5sZW47XG5cdFx0Y29uc3Qgc21pbnMgPSBhZGR1bml0KG51bW1pbnMsICdtaW51dGUnKTtcblx0XHRjb25zdCBudW1zZWNzID0gKGEgLSAoYSAlIHNlY2xlbikpIC8gc2VjbGVuO1xuXHRcdGEgLT0gbnVtc2VjcyAqIHNlY2xlbjtcblx0XHRjb25zdCBzc2VjcyA9IGFkZHVuaXQobnVtc2VjcywgJ3NlY29uZCcpO1xuXHRcdGlmIChhYSA+IDQgKiB3ZWVrbGVuKSB7XG5cdFx0XHRyZXR1cm4gc3dlZWtzO1xuXHRcdH1cblx0XHRpZiAoYWEgPiB3ZWVrbGVuKSB7XG5cdFx0XHRyZXR1cm4gYCR7c3dlZWtzfSAke3NkYXlzfWA7XG5cdFx0fVxuXHRcdGlmIChhYSA+IGRheWxlbikge1xuXHRcdFx0cmV0dXJuIGAke3NkYXlzfSAke3Nob3Vyc31gO1xuXHRcdH1cblx0XHRpZiAoYWEgPiA2ICogaG91cmxlbikge1xuXHRcdFx0cmV0dXJuIHNob3Vycztcblx0XHR9XG5cdFx0aWYgKGFhID4gaG91cmxlbikge1xuXHRcdFx0cmV0dXJuIGAke3Nob3Vyc30gJHtzbWluc31gO1xuXHRcdH1cblx0XHRpZiAoYWEgPiAxMCAqIG1pbmxlbikge1xuXHRcdFx0cmV0dXJuIHNtaW5zO1xuXHRcdH1cblx0XHRpZiAoYWEgPiBtaW5sZW4pIHtcblx0XHRcdHJldHVybiBgJHtzbWluc30gJHtzc2Vjc31gO1xuXHRcdH1cblx0XHRyZXR1cm4gc3NlY3M7XG5cdH07XG5cdGNvbnN0IGFkZHVuaXQgPSAobnVtLCBzdHIpID0+IHtcblx0XHRyZXR1cm4gYCR7bnVtfSAke251bSA9PT0gMSA/IHBvcHVwU3RyaW5nKHN0cikgOiBwb3B1cFN0cmluZyhgJHtzdHJ9c2ApfWA7XG5cdH07XG5cdGNvbnN0IHJ1blBvcHVwRmlsdGVycyA9IChsaXN0LCBkYXRhLCBkb3dubG9hZCkgPT4ge1xuXHRcdGNvbnN0IHJldCA9IFtdO1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBsaXN0KSB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRjb25zdCBzID0gZWxlbWVudChkYXRhLCBkb3dubG9hZCwgZG93bmxvYWQub3duZXIuYXJ0aWNsZSk7XG5cdFx0XHRcdGlmIChzKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2gocyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgZ2V0UGFnZUluZm8gPSAoZGF0YSwgZG93bmxvYWQpID0+IHtcblx0XHRpZiAoIWRhdGEgfHwgZGF0YS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBwb3B1cFN0cmluZygnRW1wdHkgcGFnZScpO1xuXHRcdH1cblx0XHRjb25zdCBwb3B1cEZpbHRlcnMgPSBnZXRWYWx1ZU9mKCdwb3B1cEZpbHRlcnMnKSB8fCBbXTtcblx0XHRjb25zdCBleHRyYVBvcHVwRmlsdGVycyA9IGdldFZhbHVlT2YoJ2V4dHJhUG9wdXBGaWx0ZXJzJykgfHwgW107XG5cdFx0Y29uc3QgcGFnZUluZm9BcnJheSA9IHJ1blBvcHVwRmlsdGVycyhbLi4ucG9wdXBGaWx0ZXJzLCAuLi5leHRyYVBvcHVwRmlsdGVyc10sIGRhdGEsIGRvd25sb2FkKTtcblx0XHRsZXQgcGFnZUluZm8gPSBwYWdlSW5mb0FycmF5LmpvaW4oJywgJyk7XG5cdFx0aWYgKHBhZ2VJbmZvICE9PSAnJykge1xuXHRcdFx0cGFnZUluZm8gPSB1cGNhc2VGaXJzdChwYWdlSW5mbyk7XG5cdFx0fVxuXHRcdHJldHVybiBwYWdlSW5mbztcblx0fTtcblx0Ly8gdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCFcblx0Y29uc3QgY291bnRMaW5rcyA9ICh3aWtpVGV4dCkgPT4ge1xuXHRcdHJldHVybiB3aWtpVGV4dC5zcGxpdCgnW1snKS5sZW5ndGggLSAxO1xuXHR9O1xuXHQvLyBpZiBOID0gIyBtYXRjaGVzLCBuID0gIyBicmFja2V0cywgdGhlblxuXHQvLyBTdHJpbmcuc3BsaXQocmVnZXgpIGludGVyc3BlcnNlcyB0aGUgTisxIHNwbGl0IGVsZW1lbnRzXG5cdC8vIHdpdGggTm4gb3RoZXIgZWxlbWVudHMuIFNvIHRvdGFsIGxlbmd0aCBpc1xuXHQvLyBMPSBOKzEgKyBObiA9IE4obisxKSsxLiBTbyBOPShMLTEpLyhuKzEpLlxuXHRjb25zdCBjb3VudEltYWdlcyA9ICh3aWtpVGV4dCkgPT4ge1xuXHRcdHJldHVybiAod2lraVRleHQuc3BsaXQocGcucmUuaW1hZ2UpLmxlbmd0aCAtIDEpIC8gKHBnLnJlLmltYWdlQnJhY2tldENvdW50ICsgMSk7XG5cdH07XG5cdGNvbnN0IGNvdW50Q2F0ZWdvcmllcyA9ICh3aWtpVGV4dCkgPT4ge1xuXHRcdHJldHVybiAod2lraVRleHQuc3BsaXQocGcucmUuY2F0ZWdvcnkpLmxlbmd0aCAtIDEpIC8gKHBnLnJlLmNhdGVnb3J5QnJhY2tldENvdW50ICsgMSk7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyU3R1YkRldGVjdCA9IChkYXRhLCBfZG93bmxvYWQsIGFydGljbGUpID0+IHtcblx0XHRjb25zdCBjb3VudHMgPSBzdHViQ291bnQoZGF0YSwgYXJ0aWNsZSk7XG5cdFx0aWYgKGNvdW50cy5yZWFsKSB7XG5cdFx0XHRyZXR1cm4gcG9wdXBTdHJpbmcoJ3N0dWInKTtcblx0XHR9XG5cdFx0aWYgKGNvdW50cy5zZWN0KSB7XG5cdFx0XHRyZXR1cm4gcG9wdXBTdHJpbmcoJ3NlY3Rpb24gc3R1YicpO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cdGNvbnN0IHBvcHVwRmlsdGVyRGlzYW1iaWdEZXRlY3QgPSAoZGF0YSwgX2Rvd25sb2FkLCBhcnRpY2xlKSA9PiB7XG5cdFx0aWYgKCFnZXRWYWx1ZU9mKCdwb3B1cEFsbERhYnNTdHVicycpICYmIGFydGljbGUubmFtZXNwYWNlKCkpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0cmV0dXJuIGlzRGlzYW1iaWcoZGF0YSwgYXJ0aWNsZSkgPyBwb3B1cFN0cmluZygnZGlzYW1iaWcnKSA6ICcnO1xuXHR9O1xuXHRjb25zdCBmb3JtYXRCeXRlcyA9IChudW0pID0+IHtcblx0XHRyZXR1cm4gbnVtID4gOTQ5ID8gTWF0aC5yb3VuZChudW0gLyAxMDApIC8gMTAgKyBwb3B1cFN0cmluZygna0InKSA6IGAke251bX0mbmJzcDske3BvcHVwU3RyaW5nKCdieXRlcycpfWA7XG5cdH07XG5cdC8vIEVOREZJTEU6IHBhZ2VpbmZvLmpzXG5cdC8vIFNUQVJURklMRTogdGl0bGVzLmpzXG5cdC8qKlxuXHQgKiBAZmlsZW92ZXJ2aWV3IERlZmluZXMgdGhlIHtAc291cmNlIFRpdGxlfSBjbGFzcywgYW5kIGFzc29jaWF0ZWQgY3J1ZnR5IGZ1bmN0aW9ucy5cblx0ICpcblx0ICogPGNvZGU+VGl0bGU8L2NvZGU+IGRlYWxzIHdpdGggYXJ0aWNsZSB0aXRsZXMgYW5kIHRoZWlyIHZhcmlvdXNcblx0ICogZm9ybXMuICB7QHNvdXJjZSBTdHJpbmd3cmFwcGVyfSBpcyB0aGUgcGFyZW50IGNsYXNzIG9mXG5cdCAqIDxjb2RlPlRpdGxlPC9jb2RlPiwgd2hpY2ggZXhpc3RzIHNpbXBseSB0byBtYWtlIHRoaW5ncyBhIGxpdHRsZVxuXHQgKiBuZWF0ZXIuXG5cdCAqL1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTdHJpbmd3cmFwcGVyLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICpcblx0ICogQGNsYXNzIHRoZSBTdHJpbmd3cmFwcGVyIGNsYXNzLiBUaGlzIGJhc2UgY2xhc3MgaXMgbm90IHJlYWxseVxuXHQgKiB1c2VmdWwgb24gaXRzIG93bjsgaXQganVzdCB3cmFwcyB2YXJpb3VzIGNvbW1vbiBzdHJpbmcgb3BlcmF0aW9ucy5cblx0ICovXG5cdGNvbnN0IFN0cmluZ3dyYXBwZXIgPSBmdW5jdGlvbiBTdHJpbmd3cmFwcGVyKCkge1xuXHRcdC8qKlxuXHRcdCAqIFdyYXBwZXIgZm9yIHRoaXMudG9TdHJpbmcoKS5pbmRleE9mKClcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB4XG5cdFx0ICogQHR5cGUgaW50ZWdlclxuXHRcdCAqL1xuXHRcdHRoaXMuaW5kZXhPZiA9IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpLmluZGV4T2YoeCk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoaXMudmFsdWUuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHR0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWU7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBXcmFwcGVyIGZvciB7QHNvdXJjZSBTdHJpbmcjcGFyZW5TcGxpdH0gYXBwbGllZCB0byB0aGlzLnRvU3RyaW5nKClcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7UmVnRXhwfSB4XG5cdFx0ICogQHR5cGUgQXJyYXlcblx0XHQgKi9cblx0XHR0aGlzLnNwbGl0ID0gZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoeCk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBXcmFwcGVyIGZvciB0aGlzLnRvU3RyaW5nKCkuc3Vic3RyaW5nKClcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB4XG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHkgKG9wdGlvbmFsKVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdHRoaXMuc3Vic3RyaW5nID0gZnVuY3Rpb24gKHgsIHkpIHtcblx0XHRcdGlmICh5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMudG9TdHJpbmcoKS5zbGljZShNYXRoLm1heCgwLCB4KSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpLnN1YnN0cmluZyh4LCB5KTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIFdyYXBwZXIgZm9yIHRoaXMudG9TdHJpbmcoKS5zcGxpdCgpXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30geFxuXHRcdCAqIEB0eXBlIEFycmF5XG5cdFx0ICovXG5cdFx0dGhpcy5zcGxpdCA9IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpLnNwbGl0KHgpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogV3JhcHBlciBmb3IgdGhpcy50b1N0cmluZygpLnJlcGxhY2UoKVxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHhcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30geVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpLnJlcGxhY2UoeCwgeSk7XG5cdFx0fTtcblx0fTtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgPGNvZGU+VGl0bGU8L2NvZGU+LlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICpcblx0ICogQGNsYXNzIFRoZSBUaXRsZSBjbGFzcy4gSG9sZHMgYXJ0aWNsZSB0aXRsZXMgYW5kIGNvbnZlcnRzIHRoZW0gaW50b1xuXHQgKiB2YXJpb3VzIGZvcm1zLiBBbHNvIGRlYWxzIHdpdGggYW5jaG9ycywgYnkgd2hpY2ggd2UgbWVhbiB0aGUgYml0c1xuXHQgKiBvZiB0aGUgYXJ0aWNsZSBVUkwgYWZ0ZXIgYSAjIGNoYXJhY3RlciwgcmVwcmVzZW50aW5nIGxvY2F0aW9uc1xuXHQgKiB3aXRoaW4gYW4gYXJ0aWNsZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIHRvIGFzc2lnbiB0byB0aGVcblx0ICogYXJ0aWNsZS4gVGhpcyBtdXN0IGJlIHRoZSBjYW5vbmljYWwgdGl0bGUgKHNlZSB7QGxpbmtcblx0ICogVGl0bGUjdmFsdWV9LiBPbWl0IHRoaXMgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCB1c2UgYW5vdGhlciBmdW5jdGlvblxuXHQgKiB0byBzZXQgdGhlIHRpdGxlIGlmIHRoaXMgaXMgdW5hdmFpbGFibGUuXG5cdCAqL1xuXHRjbGFzcyBUaXRsZSBleHRlbmRzIFN0cmluZ3dyYXBwZXIge1xuXHRcdGNvbnN0cnVjdG9yKHZhbCkge1xuXHRcdFx0c3VwZXIoKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIGNhbm9uaWNhbCBhcnRpY2xlIHRpdGxlLiBUaGlzIG11c3QgYmUgaW4gVVRGLTggd2l0aCBub1xuXHRcdFx0ICogZW50aXRpZXMsIGVzY2FwaW5nIG9yIG5hc3RpZXMuIEFsc28sIHVuZGVyc2NvcmVzIHNob3VsZCBiZVxuXHRcdFx0ICogcmVwbGFjZWQgd2l0aCBzcGFjZXMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnZhbHVlID0gbnVsbDtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIGNhbm9uaWNhbCBmb3JtIG9mIHRoZSBhbmNob3IuIFRoaXMgc2hvdWxkIGJlIGV4YWN0bHkgYXNcblx0XHRcdCAqIGl0IGFwcGVhcnMgaW4gdGhlIFVSTCwgaS5lLiB3aXRoIHRoZSAuQzMuMEEgYml0cyBpbi5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5hbmNob3IgPSAnJztcblx0XHRcdHRoaXMuc2V0VXRmKHZhbCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXJ0aWNsZSB0aXRsZSwgb3B0aW9uYWxseSB3aXRob3V0IGFuY2hvci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gb21pdEFuY2hvclxuXHRcdCAqIEBmaXhtZSBEZWNpZGUgc3BlY3MgZm9yIGFuY2hvclxuXHRcdCAqIEByZXR1cm4gU3RyaW5nIFRoZSBhcnRpY2xlIHRpdGxlIGFuZCB0aGUgYW5jaG9yLlxuXHRcdCAqL1xuXHRcdHRvU3RyaW5nKG9taXRBbmNob3IpIHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlICsgKCFvbWl0QW5jaG9yICYmIHRoaXMuYW5jaG9yID8gYCMke3RoaXMuYW5jaG9yU3RyaW5nKCl9YCA6ICcnKTtcblx0XHR9XG5cdFx0YW5jaG9yU3RyaW5nKCkge1xuXHRcdFx0aWYgKCF0aGlzLmFuY2hvcikge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzcGxpdCA9IHRoaXMuYW5jaG9yLnNwbGl0KC8oKD86XFwuW1xcZEEtRl17Mn0pKykvKTtcblx0XHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdGZvciAobGV0IGogPSAxOyBqIDwgbGVuOyBqICs9IDIpIHtcblx0XHRcdFx0Ly8gRklYTUUgcy9kZWNvZGVVUkkvZGVjb2RlVVJJQ29tcG9uZW50L2cgP1xuXHRcdFx0XHR2YWx1ZSA9IHNwbGl0W2pdLnNwbGl0KCcuJykuam9pbignJScpO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Ly8gY2Fubm90IGRlY29kZVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNwbGl0W2pdID0gdmFsdWUuc3BsaXQoJ18nKS5qb2luKCcgJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3BsaXQuam9pbignJyk7XG5cdFx0fVxuXHRcdHVybEFuY2hvcigpIHtcblx0XHRcdGNvbnN0IHNwbGl0ID0gdGhpcy5hbmNob3Iuc3BsaXQoJy8oKD86WyVdWzAtOUEtRl17Mn0pKykvJyk7XG5cdFx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBqID0gMTsgaiA8IGxlbjsgaiArPSAyKSB7XG5cdFx0XHRcdHNwbGl0W2pdID0gc3BsaXRbal0uc3BsaXQoJyUnKS5qb2luKCcuJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3BsaXQuam9pbignJyk7XG5cdFx0fVxuXHRcdGFuY2hvckZyb21VdGYoc3RyKSB7XG5cdFx0XHR0aGlzLmFuY2hvciA9IGVuY29kZVVSSUNvbXBvbmVudChzdHIuc3BsaXQoJyAnKS5qb2luKCdfJykpXG5cdFx0XHRcdC5zcGxpdCgnJTNBJylcblx0XHRcdFx0LmpvaW4oJzonKVxuXHRcdFx0XHQuc3BsaXQoXCInXCIpXG5cdFx0XHRcdC5qb2luKCclMjcnKVxuXHRcdFx0XHQuc3BsaXQoJyUnKVxuXHRcdFx0XHQuam9pbignLicpO1xuXHRcdH1cblx0XHRmcm9tVVJMKGgpIHtcblx0XHRcdGlmICh0eXBlb2YgaCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IG51bGw7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTk9URSA6IHBsYXlpbmcgd2l0aCBkZWNvZGVVUkksIGVuY29kZVVSSSwgZXNjYXBlLCB1bmVzY2FwZSxcblx0XHRcdC8vIHdlIHNlZW0gdG8gYmUgYWJsZSB0byByZXBsaWNhdGUgdGhlIElFIGJvcmtlZCBlbmNvZGluZ1xuXHRcdFx0Ly8gSUUgZG9lc24ndCBkbyB0aGlzIG5ldy1mYW5nbGVkIHV0Zi04IHRoaW5nLlxuXHRcdFx0Ly8gYW5kIGl0J3Mgd29yc2UgdGhhbiB0aGF0LlxuXHRcdFx0Ly8gSUUgc2VlbXMgdG8gdHJlYXQgdGhlIHF1ZXJ5IHN0cmluZyBkaWZmZXJlbnRseSB0byB0aGUgcmVzdCBvZiB0aGUgdXJsXG5cdFx0XHQvLyB0aGUgcXVlcnkgaXMgdHJlYXRlZCBhcyBib25hLWZpZGUgdXRmOCwgYnV0IHRoZSBmaXJzdCBiaXQgb2YgdGhlIHVybCBpcyBwaXNzZWQgYXJvdW5kIHdpdGhcblx0XHRcdC8vIHdlIGZpeCB1cCAmIGZvciBhbGwgYnJvd3NlcnMsIGp1c3QgaW4gY2FzZS5cblx0XHRcdGNvbnN0IHNwbGl0dGVkID0gaC5zcGxpdCgnPycpO1xuXHRcdFx0c3BsaXR0ZWRbMF0gPSBzcGxpdHRlZFswXS5zcGxpdCgnJicpLmpvaW4oJyUyNicpO1xuXHRcdFx0aCA9IHNwbGl0dGVkLmpvaW4oJz8nKTtcblx0XHRcdGNvbnN0IGNvbnRyaWJzID0gcGcucmUuY29udHJpYnMuZXhlYyhoKTtcblx0XHRcdGlmIChjb250cmlicykge1xuXHRcdFx0XHRpZiAoY29udHJpYnNbMV0gPT09ICd0aXRsZT0nKSB7XG5cdFx0XHRcdFx0Y29udHJpYnNbM10gPSBjb250cmlic1szXS5zcGxpdCgnKycpLmpvaW4oJyAnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB1ID0gbmV3IFRpdGxlKGNvbnRyaWJzWzNdKTtcblx0XHRcdFx0dGhpcy5zZXRVdGYoXG5cdFx0XHRcdFx0VGl0bGUuZGVjb2RlTmFzdGllcyhgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc1VzZXJJZF19OiR7dS5zdHJpcE5hbWVzcGFjZSgpfWApXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZW1haWwgPSBwZy5yZS5lbWFpbC5leGVjKGgpO1xuXHRcdFx0aWYgKGVtYWlsKSB7XG5cdFx0XHRcdHRoaXMuc2V0VXRmKFxuXHRcdFx0XHRcdFRpdGxlLmRlY29kZU5hc3RpZXMoXG5cdFx0XHRcdFx0XHRgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc1VzZXJJZF19OiR7bmV3IFRpdGxlKGVtYWlsWzNdKS5zdHJpcE5hbWVzcGFjZSgpfWBcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYmFja2xpbmtzID0gcGcucmUuYmFja2xpbmtzLmV4ZWMoaCk7XG5cdFx0XHRpZiAoYmFja2xpbmtzKSB7XG5cdFx0XHRcdHRoaXMuc2V0VXRmKFRpdGxlLmRlY29kZU5hc3RpZXMobmV3IFRpdGxlKGJhY2tsaW5rc1szXSkpKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0XHQvLyBBIGR1bW15IHRpdGxlIG9iamVjdCBmb3IgYSBTcGVjaWFsOkRpZmYgbGluay5cblx0XHRcdGNvbnN0IHNwZWNpYWxkaWZmID0gcGcucmUuc3BlY2lhbGRpZmYuZXhlYyhoKTtcblx0XHRcdGlmIChzcGVjaWFsZGlmZikge1xuXHRcdFx0XHR0aGlzLnNldFV0Zihcblx0XHRcdFx0XHRUaXRsZS5kZWNvZGVOYXN0aWVzKG5ldyBUaXRsZShgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc1NwZWNpYWxJZF19OkRpZmZgKSlcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0XHQvLyBubyBtb3JlIHNwZWNpYWwgY2FzZXMgdG8gY2hlY2sgLS1cblx0XHRcdC8vIGhvcGVmdWxseSBpdCdzIG5vdCBhIGRpc2d1aXNlZCB1c2VyLXJlbGF0ZWQgb3Igc3BlY2lhbGx5IHRyZWF0ZWQgc3BlY2lhbCBwYWdlXG5cdFx0XHQvLyBJbmNsdWRlcyByZWZlcmVuY2VzXG5cdFx0XHRjb25zdCBtID0gcGcucmUubWFpbi5leGVjKGgpO1xuXHRcdFx0aWYgKG0gPT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IG51bGw7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmcm9tQm90SW50ZXJmYWNlID0gL1xcPyguKyYpP3RpdGxlPS8udGVzdChoKTtcblx0XHRcdFx0aWYgKGZyb21Cb3RJbnRlcmZhY2UpIHtcblx0XHRcdFx0XHRtWzJdID0gbVsyXS5zcGxpdCgnKycpLmpvaW4oJ18nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBleHRyYWN0ZWQgPSBtWzJdICsgKG1bM10gPyBgIyR7bVszXX1gIDogJycpO1xuXHRcdFx0XHRpZiAocGcuZmxhZy5pc1NhZmFyaSAmJiAvJTI1W1xcZEEtRmEtZl17Mn0vLnRlc3QoZXh0cmFjdGVkKSkge1xuXHRcdFx0XHRcdC8vIEZpeCBTYWZhcmkgaXNzdWVcblx0XHRcdFx0XHQvLyBTYWZhcmkgc29tZXRpbWVzIGVuY29kZXMgJSBhcyAlMjUgaW4gVVRGLTggZW5jb2RlZCBzdHJpbmdzIGxpa2UgJUU1JUEzIC0+ICUyNUU1JTI1QTMuXG5cdFx0XHRcdFx0dGhpcy5zZXRVdGYoZGVjb2RlVVJJQ29tcG9uZW50KHVuZXNjYXBlKGV4dHJhY3RlZCkpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnNldFV0ZihUaXRsZS5kZWNvZGVOYXN0aWVzKGV4dHJhY3RlZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0c3RhdGljIGRlY29kZU5hc3RpZXModHh0KSB7XG5cdFx0XHQvLyBteURlY29kZVVSSSB1c2VzIGRlY29kZUV4dHJhcywgd2hpY2ggcmVtb3ZlcyBfLFxuXHRcdFx0Ly8gdGh1cyBydWluaW5nIGNpdGF0aW9ucyBwcmV2aWV3cywgd2hpY2ggYXJlIGZvcm1hdGVkIGFzIFwiY2l0ZV9ub3RlLTFcIlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bGV0IHJldCA9IGRlY29kZVVSSShUaXRsZS5kZWNvZGVFc2NhcGVzKHR4dCkpO1xuXHRcdFx0XHRyZXQgPSByZXQucmVwbGFjZSgvWyBfXSokLywgJycpO1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdHJldHVybiB0eHQ7IC8vIGNhbm5vdCBkZWNvZGVcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gRGVjb2RlIHZhbGlkICUtZW5jb2RpbmdzLCBvdGhlcndpc2UgZXNjYXBlIHRoZW1cblx0XHRzdGF0aWMgZGVjb2RlRXNjYXBlcyh0eHQpIHtcblx0XHRcdGNvbnN0IHNwbGl0ID0gdHh0LnNwbGl0KC8oKD86JVtcXGRBLUZhLWZdezJ9KSspLyk7XG5cdFx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cdFx0XHQvLyBObyAlLWVuY29kZWQgaXRlbXMgZm91bmQsIHNvIHJlcGxhY2UgdGhlIGxpdGVyYWwgJVxuXHRcdFx0aWYgKGxlbiA9PT0gMSkge1xuXHRcdFx0XHRyZXR1cm4gc3BsaXRbMF0ucmVwbGFjZSgvJSg/IVtcXGRBLUZhLWZdezJ9KS9nLCAnJTI1Jyk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGxlbjsgaSArPSAyKSB7XG5cdFx0XHRcdHNwbGl0W2ldID0gZGVjb2RlVVJJQ29tcG9uZW50KHNwbGl0W2ldKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzcGxpdC5qb2luKCcnKTtcblx0XHR9XG5cdFx0ZnJvbUFuY2hvcihhKSB7XG5cdFx0XHRpZiAoIWEpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IG51bGw7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZnJvbVVSTChhLmhyZWYpO1xuXHRcdH1cblx0XHRmcm9tV2lraVRleHQodHh0KSB7XG5cdFx0XHQvLyBGSVhNRSAtIHRlc3RpbmcgbmVlZGVkXG5cdFx0XHR0eHQgPSBteURlY29kZVVSSSh0eHQpO1xuXHRcdFx0dGhpcy5zZXRVdGYodHh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRoaW50VmFsdWUoKSB7XG5cdFx0XHRpZiAoIXRoaXMudmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNhZmVEZWNvZGVVUkkodGhpcy52YWx1ZSk7XG5cdFx0fVxuXHRcdHRvVXNlck5hbWUod2l0aE5zKSB7XG5cdFx0XHRpZiAodGhpcy5uYW1lc3BhY2VJZCgpICE9PSBwZy5uc1VzZXJJZCAmJiB0aGlzLm5hbWVzcGFjZUlkKCkgIT09IHBnLm5zVXNlcnRhbGtJZCkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy52YWx1ZSA9XG5cdFx0XHRcdCh3aXRoTnMgPyBgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVtwZy5uc1VzZXJJZF19OmAgOiAnJykgK1xuXHRcdFx0XHR0aGlzLnN0cmlwTmFtZXNwYWNlKCkuc3BsaXQoJy8nKVswXTtcblx0XHR9XG5cdFx0dXNlck5hbWUod2l0aE5zKSB7XG5cdFx0XHRjb25zdCB0ID0gbmV3IFRpdGxlKHRoaXMudmFsdWUpO1xuXHRcdFx0dC50b1VzZXJOYW1lKHdpdGhOcyk7XG5cdFx0XHRpZiAodC52YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHR0b1RhbGtQYWdlKCkge1xuXHRcdFx0Ly8gY29udmVydCBhcnRpY2xlIHRvIGEgdGFsayBwYWdlLCBvciBpZiB3ZSBjYW4ndCwgcmV0dXJuIG51bGxcblx0XHRcdC8vIEluIG90aGVyIHdvcmRzOiByZXR1cm4gbnVsbCBpZiB0aGlzIEFMUkVBRFkgSVMgYSB0YWxrIHBhZ2Vcblx0XHRcdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdGFsayBwYWdlIG90aGVyd2lzZVxuXHRcdFx0Ly9cblx0XHRcdC8vIFBlciB7QGxpbmsgaHR0cHM6Ly93d3cubWVkaWF3aWtpLm9yZy93aWtpL01hbnVhbDpOYW1lc3BhY2UjU3ViamVjdF9hbmRfdGFsa19uYW1lc3BhY2VzfVxuXHRcdFx0Ly8gKiBBbGwgZGlzY3Vzc2lvbiBuYW1lc3BhY2VzIGhhdmUgb2RkLWludGVnZXIgaW5kaWNlc1xuXHRcdFx0Ly8gKiBUaGUgZGlzY3Vzc2lvbiBuYW1lc3BhY2UgaW5kZXggZm9yIGEgc3BlY2lmaWMgbmFtZXNwYWNlIHdpdGggaW5kZXggbiBpcyBuICsgMVxuXHRcdFx0aWYgKHRoaXMudmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VJZCA9IHRoaXMubmFtZXNwYWNlSWQoKTtcblx0XHRcdGlmIChuYW1lc3BhY2VJZCA+PSAwICYmIG5hbWVzcGFjZUlkICUgMiA9PT0gMCkge1xuXHRcdFx0XHQvLyBub24tc3BlY2lhbCBhbmQgc3ViamVjdCBuYW1lc3BhY2Vcblx0XHRcdFx0Y29uc3QgbG9jYWxpemVkTmFtZXNwYWNlID0gbXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbbmFtZXNwYWNlSWQgKyAxXTtcblx0XHRcdFx0aWYgKGxvY2FsaXplZE5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy52YWx1ZSA9XG5cdFx0XHRcdFx0XHRsb2NhbGl6ZWROYW1lc3BhY2UgPT09ICcnXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5zdHJpcE5hbWVzcGFjZSgpXG5cdFx0XHRcdFx0XHRcdDogYCR7bG9jYWxpemVkTmFtZXNwYWNlLnNwbGl0KCcgJykuam9pbignXycpfToke3RoaXMuc3RyaXBOYW1lc3BhY2UoKX1gO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnZhbHVlID0gbnVsbDtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHQvLyBSZXR1cm4gY2Fub25pY2FsLCBsb2NhbGl6ZWQgbmFtZXNwYWNlXG5cdFx0bmFtZXNwYWNlKCkge1xuXHRcdFx0cmV0dXJuIG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3RoaXMubmFtZXNwYWNlSWQoKV07XG5cdFx0fVxuXHRcdG5hbWVzcGFjZUlkKCkge1xuXHRcdFx0Y29uc3QgbiA9IHRoaXMudmFsdWUuaW5kZXhPZignOicpO1xuXHRcdFx0aWYgKG4gPCAwKSB7XG5cdFx0XHRcdHJldHVybiAwOyAvLyBtYWluc3BhY2Vcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hbWVzcGFjZUlkID1cblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKVt0aGlzLnZhbHVlLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKS5zcGxpdCgnICcpLmpvaW4oJ18nKS50b0xvd2VyQ2FzZSgpXTtcblx0XHRcdGlmIChuYW1lc3BhY2VJZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiAwOyAvLyBtYWluc3BhY2Vcblx0XHRcdH1cblx0XHRcdHJldHVybiBuYW1lc3BhY2VJZDtcblx0XHR9XG5cdFx0dGFsa1BhZ2UoKSB7XG5cdFx0XHRjb25zdCB0ID0gbmV3IFRpdGxlKHRoaXMudmFsdWUpO1xuXHRcdFx0dC50b1RhbGtQYWdlKCk7XG5cdFx0XHRpZiAodC52YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRpc1RhbGtQYWdlKCkge1xuXHRcdFx0aWYgKHRoaXMudGFsa1BhZ2UoKSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dG9BcnRpY2xlRnJvbVRhbGtQYWdlKCkge1xuXHRcdFx0Ly8gbGFyZ2VseSBjb3B5L3Bhc3RlIGZyb20gdG9UYWxrUGFnZSBhYm92ZS5cblx0XHRcdGlmICh0aGlzLnZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmFtZXNwYWNlSWQgPSB0aGlzLm5hbWVzcGFjZUlkKCk7XG5cdFx0XHRpZiAobmFtZXNwYWNlSWQgPj0gMCAmJiBuYW1lc3BhY2VJZCAlIDIgPT09IDEpIHtcblx0XHRcdFx0Ly8gbm9uLXNwZWNpYWwgYW5kIHRhbGsgbmFtZXNwYWNlXG5cdFx0XHRcdGNvbnN0IGxvY2FsaXplZE5hbWVzcGFjZSA9IG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW25hbWVzcGFjZUlkIC0gMV07XG5cdFx0XHRcdGlmIChsb2NhbGl6ZWROYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMudmFsdWUgPVxuXHRcdFx0XHRcdFx0bG9jYWxpemVkTmFtZXNwYWNlID09PSAnJ1xuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuc3RyaXBOYW1lc3BhY2UoKVxuXHRcdFx0XHRcdFx0XHQ6IGAke2xvY2FsaXplZE5hbWVzcGFjZS5zcGxpdCgnICcpLmpvaW4oJ18nKX06JHt0aGlzLnN0cmlwTmFtZXNwYWNlKCl9YDtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy52YWx1ZSA9IG51bGw7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0YXJ0aWNsZUZyb21UYWxrUGFnZSgpIHtcblx0XHRcdGNvbnN0IHQgPSBuZXcgVGl0bGUodGhpcy52YWx1ZSk7XG5cdFx0XHR0LnRvQXJ0aWNsZUZyb21UYWxrUGFnZSgpO1xuXHRcdFx0aWYgKHQudmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0YXJ0aWNsZUZyb21UYWxrT3JBcnRpY2xlKCkge1xuXHRcdFx0Y29uc3QgdCA9IG5ldyBUaXRsZSh0aGlzLnZhbHVlKTtcblx0XHRcdGlmICh0LnRvQXJ0aWNsZUZyb21UYWxrUGFnZSgpKSB7XG5cdFx0XHRcdHJldHVybiB0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlzSXBVc2VyKCkge1xuXHRcdFx0cmV0dXJuIHBnLnJlLmlwVXNlci50ZXN0KHRoaXMudXNlck5hbWUoKSk7XG5cdFx0fVxuXHRcdHN0cmlwTmFtZXNwYWNlKCkge1xuXHRcdFx0Ly8gcmV0dXJucyBhIHN0cmluZywgbm90IGEgVGl0bGVcblx0XHRcdGNvbnN0IG4gPSB0aGlzLnZhbHVlLmluZGV4T2YoJzonKTtcblx0XHRcdGlmIChuIDwgMCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hbWVzcGFjZUlkID0gdGhpcy5uYW1lc3BhY2VJZCgpO1xuXHRcdFx0aWYgKG5hbWVzcGFjZUlkID09PSBwZy5uc01haW5zcGFjZUlkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWUuc2xpY2UoTWF0aC5tYXgoMCwgbiArIDEpKTtcblx0XHR9XG5cdFx0c2V0VXRmKHZhbHVlKSB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSAnJztcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYW5jaCA9IHZhbHVlLmluZGV4T2YoJyMnKTtcblx0XHRcdGlmIChhbmNoIDwgMCkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsdWUuc3BsaXQoJ18nKS5qb2luKCcgJyk7XG5cdFx0XHRcdHRoaXMuYW5jaG9yID0gJyc7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBNYXRoLm1heCgwLCBhbmNoKSkuc3BsaXQoJ18nKS5qb2luKCcgJyk7XG5cdFx0XHR0aGlzLmFuY2hvciA9IHZhbHVlLnNsaWNlKE1hdGgubWF4KDAsIGFuY2ggKyAxKSk7XG5cdFx0XHR0aGlzLm5zID0gbnVsbDsgLy8gd2FpdCB1bnRpbCBuYW1lc3BhY2UoKSBpcyBjYWxsZWRcblx0XHR9XG5cdFx0c2V0VXJsKHVybGZyYWcpIHtcblx0XHRcdGNvbnN0IGFuY2ggPSB1cmxmcmFnLmluZGV4T2YoJyMnKTtcblx0XHRcdHRoaXMudmFsdWUgPSBzYWZlRGVjb2RlVVJJKHVybGZyYWcuc2xpY2UoMCwgTWF0aC5tYXgoMCwgYW5jaCkpKTtcblx0XHRcdHRoaXMuYW5jaG9yID0gdGhpcy52YWx1ZS5zbGljZShNYXRoLm1heCgwLCBhbmNoICsgMSkpO1xuXHRcdH1cblx0XHRhcHBlbmQoeCkge1xuXHRcdFx0dGhpcy5zZXRVdGYodGhpcy52YWx1ZSArIHgpO1xuXHRcdH1cblx0XHR1cmxTdHJpbmcoeCkge1xuXHRcdFx0eCB8fD0ge307XG5cdFx0XHRsZXQgdiA9IHRoaXMudG9TdHJpbmcodHJ1ZSk7XG5cdFx0XHRpZiAoIXgub21pdEFuY2hvciAmJiB0aGlzLmFuY2hvcikge1xuXHRcdFx0XHR2ICs9IGAjJHt0aGlzLnVybEFuY2hvcigpfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXgua2VlcFNwYWNlcykge1xuXHRcdFx0XHR2ID0gdi5zcGxpdCgnICcpLmpvaW4oJ18nKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbmNvZGVVUkkodikuc3BsaXQoJyYnKS5qb2luKCclMjYnKS5zcGxpdCgnPycpLmpvaW4oJyUzRicpLnNwbGl0KCcrJykuam9pbignJTJCJyk7XG5cdFx0fVxuXHRcdHJlbW92ZUFuY2hvcigpIHtcblx0XHRcdHJldHVybiBuZXcgVGl0bGUodGhpcy50b1N0cmluZyh0cnVlKSk7XG5cdFx0fVxuXHRcdHRvVXJsKCkge1xuXHRcdFx0cmV0dXJuIHBnLndpa2kudGl0bGViYXNlICsgdGhpcy51cmxTdHJpbmcoKTtcblx0XHR9XG5cdH1cblx0VGl0bGUuZnJvbVVSTCA9IChoKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBUaXRsZSgpLmZyb21VUkwoaCk7XG5cdH07XG5cdFRpdGxlLmZyb21BbmNob3IgPSAoYSkgPT4ge1xuXHRcdHJldHVybiBuZXcgVGl0bGUoKS5mcm9tQW5jaG9yKGEpO1xuXHR9O1xuXHRUaXRsZS5mcm9tV2lraVRleHQgPSAodHh0KSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBUaXRsZSgpLmZyb21XaWtpVGV4dCh0eHQpO1xuXHR9O1xuXHRjb25zdCBwYXJzZVBhcmFtcyA9ICh1cmwpID0+IHtcblx0XHRjb25zdCBzcGVjaWFsRGlmZiA9IHBnLnJlLnNwZWNpYWxkaWZmLmV4ZWModXJsKTtcblx0XHRpZiAoc3BlY2lhbERpZmYpIHtcblx0XHRcdGNvbnN0IHNwbGl0ID0gc3BlY2lhbERpZmZbMV0uc3BsaXQoJy8nKTtcblx0XHRcdGlmIChzcGxpdC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRvbGRpZDogc3BsaXRbMF0sXG5cdFx0XHRcdFx0ZGlmZjogJ3ByZXYnLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmIChzcGxpdC5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRvbGRpZDogc3BsaXRbMF0sXG5cdFx0XHRcdFx0ZGlmZjogc3BsaXRbMV0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHJldCA9IHt9O1xuXHRcdGlmICghdXJsLmluY2x1ZGVzKCc/JykpIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHRcdFt1cmxdID0gdXJsLnNwbGl0KCcjJyk7XG5cdFx0Y29uc3QgcyA9IHVybC5zcGxpdCgnPycpLnNsaWNlKDEpLmpvaW4oJywnKTtcblx0XHRjb25zdCB0ID0gcy5zcGxpdCgnJicpO1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0KSB7XG5cdFx0XHRjb25zdCB6ID0gZWxlbWVudC5zcGxpdCgnPScpO1xuXHRcdFx0ei5wdXNoKG51bGwpO1xuXHRcdFx0WywgcmV0W3pbMF1dXSA9IHo7XG5cdFx0fVxuXHRcdC8vIERpZmYgcmV2aXNpb24gd2l0aCBubyBvbGRpZCBpcyBpbnRlcnByZXRlZCBhcyBhIGRpZmYgdG8gdGhlIHByZXZpb3VzIHJldmlzaW9uIGJ5IE1lZGlhV2lraVxuXHRcdGlmIChyZXQuZGlmZiAmJiByZXQub2xkaWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0Lm9sZGlkID0gJ3ByZXYnO1xuXHRcdH1cblx0XHQvLyBEb2N1bWVudGF0aW9uIHNlZW1zIHRvIHNheSBzb21ldGhpbmcgZGlmZmVyZW50LCBidXQgb2xkaWQgY2FuIGFsc28gYWNjZXB0IHByZXYvbmV4dCwgYW5kXG5cdFx0Ly8gRWNobyBpcyBlbWl0dGluZyBzdWNoIFVSTHMuIFNpbXBsZSBmaXh1cCBkdXJpbmcgcGFyYW1ldGVyIGRlY29kaW5nOlxuXHRcdGlmIChyZXQub2xkaWQgJiYgKHJldC5vbGRpZCA9PT0gJ3ByZXYnIHx8IHJldC5vbGRpZCA9PT0gJ25leHQnIHx8IHJldC5vbGRpZCA9PT0gJ2N1cicpKSB7XG5cdFx0XHRjb25zdCBoZWxwZXIgPSByZXQuZGlmZjtcblx0XHRcdHJldC5kaWZmID0gcmV0Lm9sZGlkO1xuXHRcdFx0cmV0Lm9sZGlkID0gaGVscGVyO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHQvLyAoYSkgbXlEZWNvZGVVUkkgKGZpcnN0IHN0YW5kYXJkIGRlY29kZVVSSSwgdGhlbiBwZy5yZS51cmxOb1BvcHVwKVxuXHQvLyAoYikgY2hhbmdlIHNwYWNlcyB0byB1bmRlcnNjb3Jlc1xuXHQvLyAoYykgZW5jb2RlVVJJIChqdXN0IHRoZSBzdHJhaWdodCBvbmUsIG5vIHBnLnJlLnVybE5vUG9wdXApXG5cdGNvbnN0IG15RGVjb2RlVVJJID0gKHN0cikgPT4ge1xuXHRcdGxldCByZXQ7XG5cdFx0Ly8gRklYTUUgZGVjb2RlVVJJQ29tcG9uZW50Pz9cblx0XHR0cnkge1xuXHRcdFx0cmV0ID0gZGVjb2RlVVJJKHN0ci50b1N0cmluZygpKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBzdHI7XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGcubWlzYy5kZWNvZGVFeHRyYXMubGVuZ3RoOyArK2kpIHtcblx0XHRcdGNvbnN0IHtmcm9tfSA9IHBnLm1pc2MuZGVjb2RlRXh0cmFzW2ldO1xuXHRcdFx0Y29uc3Qge3RvfSA9IHBnLm1pc2MuZGVjb2RlRXh0cmFzW2ldO1xuXHRcdFx0cmV0ID0gcmV0LnNwbGl0KGZyb20pLmpvaW4odG8pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHRjb25zdCBzYWZlRGVjb2RlVVJJID0gKHN0cikgPT4ge1xuXHRcdGNvbnN0IHJldCA9IG15RGVjb2RlVVJJKHN0cik7XG5cdFx0cmV0dXJuIHJldCB8fCBzdHI7XG5cdH07XG5cdC8vIFRFU1RTIC8vXG5cdGNvbnN0IGlzRGlzYW1iaWcgPSAoZGF0YSwgYXJ0aWNsZSkgPT4ge1xuXHRcdGlmICghZ2V0VmFsdWVPZigncG9wdXBBbGxEYWJzU3R1YnMnKSAmJiBhcnRpY2xlLm5hbWVzcGFjZSgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAhYXJ0aWNsZS5pc1RhbGtQYWdlKCkgJiYgcGcucmUuZGlzYW1iaWcudGVzdChkYXRhKTtcblx0fTtcblx0Y29uc3Qgc3R1YkNvdW50ID0gKGRhdGEsIGFydGljbGUpID0+IHtcblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwQWxsRGFic1N0dWJzJykgJiYgYXJ0aWNsZS5uYW1lc3BhY2UoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRsZXQgc2VjdFN0dWIgPSAwO1xuXHRcdGxldCByZWFsU3R1YiA9IDA7XG5cdFx0aWYgKHBnLnJlLnN0dWIudGVzdChkYXRhKSkge1xuXHRcdFx0Y29uc3QgcyA9IGRhdGEuc3BsaXQocGcucmUuc3R1Yik7XG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHMubGVuZ3RoOyBpICs9IDIpIHtcblx0XHRcdFx0aWYgKHNbaV0pIHtcblx0XHRcdFx0XHQrK3NlY3RTdHViO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCsrcmVhbFN0dWI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlYWw6IHJlYWxTdHViLFxuXHRcdFx0c2VjdDogc2VjdFN0dWIsXG5cdFx0fTtcblx0fTtcblx0Y29uc3QgaXNWYWxpZEltYWdlTmFtZSA9IChzdHIpID0+IHtcblx0XHRyZXR1cm4gIXN0ci5pbmNsdWRlcygneycpO1xuXHR9O1xuXHRjb25zdCBpc0luU3RyaXBwYWJsZU5hbWVzcGFjZSA9IChhcnRpY2xlKSA9PiB7XG5cdFx0cmV0dXJuIGFydGljbGUubmFtZXNwYWNlSWQoKSAhPT0gMDtcblx0fTtcblx0Y29uc3QgaXNJbk1haW5OYW1lc3BhY2UgPSAoYXJ0aWNsZSkgPT4ge1xuXHRcdHJldHVybiBhcnRpY2xlLm5hbWVzcGFjZUlkKCkgPT09IDA7XG5cdH07XG5cdGNvbnN0IGFuY2hvckNvbnRhaW5zSW1hZ2UgPSAoYSkgPT4ge1xuXHRcdC8vIGl0ZXJhdGUgb3ZlciBjaGlsZHJlbiBvZiBhbmNob3IgYVxuXHRcdC8vIHNlZSBpZiBhbnkgYXJlIGltYWdlc1xuXHRcdGlmIChhID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGtpZHMgPSBhLmNoaWxkTm9kZXM7XG5cdFx0Zm9yIChjb25zdCBraWQgb2Yga2lkcykge1xuXHRcdFx0aWYgKGtpZC5ub2RlTmFtZSA9PT0gJ0lNRycpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblx0Y29uc3QgaXNQb3B1cExpbmsgPSAoYSkgPT4ge1xuXHRcdC8vIE5CIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBUT0MgbGlua3MgZ2VuZXJhbGx5IHJldHVybiB0cnVlXG5cdFx0Ly8gdGhleSBzaG91bGQgYmUgc3RyaXBwZWQgb3V0IGxhdGVyXG5cdFx0aWYgKCFtYXJrTm9wb3B1cFNwYW5MaW5rcy5kb25lKSB7XG5cdFx0XHRtYXJrTm9wb3B1cFNwYW5MaW5rcygpO1xuXHRcdH1cblx0XHRpZiAoYS5pbk5vcG9wdXBTcGFuKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIEZJWE1FIGlzIHRoaXMgZmFzdGVyIGlubGluZT9cblx0XHRpZiAoYS5vbm1vdXNlZG93biB8fCBhLmdldEF0dHJpYnV0ZSgnbm9wb3B1cCcpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGggPSBhLmhyZWY7XG5cdFx0aWYgKGggPT09IGAke2RvY3VtZW50LmxvY2F0aW9uLmhyZWZ9I2ApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFwZy5yZS5iYXNlbmFtZXMudGVzdChoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIXBnLnJlLnVybE5vUG9wdXAudGVzdChoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQocGcucmUuZW1haWwudGVzdChoKSB8fCBwZy5yZS5jb250cmlicy50ZXN0KGgpIHx8IHBnLnJlLmJhY2tsaW5rcy50ZXN0KGgpIHx8IHBnLnJlLnNwZWNpYWxkaWZmLnRlc3QoaCkpICYmXG5cdFx0XHQhaC5pbmNsdWRlcygnJmxpbWl0PScpXG5cdFx0KTtcblx0fTtcblx0Y29uc3QgbWFya05vcG9wdXBTcGFuTGlua3MgPSBmdW5jdGlvbiBtYXJrTm9wb3B1cFNwYW5MaW5rcygpIHtcblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwT25seUFydGljbGVMaW5rcycpKSB7XG5cdFx0XHRmaXhWZWN0b3JNZW51UG9wdXBzKCk7XG5cdFx0fVxuXHRcdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHRcdGNvbnN0IHMgPSAkYm9keS5maW5kKCcubm9wb3B1cHMnKS50b0FycmF5KCk7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHMpIHtcblx0XHRcdGNvbnN0IGFzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG5cdFx0XHRmb3IgKGNvbnN0IGEgb2YgYXMpIHtcblx0XHRcdFx0YS5pbk5vcG9wdXBTcGFuID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWFya05vcG9wdXBTcGFuTGlua3MuZG9uZSA9IHRydWU7XG5cdH07XG5cdGNvbnN0IGZpeFZlY3Rvck1lbnVQb3B1cHMgPSAoKSA9PiB7XG5cdFx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdFx0JGJvZHkuZmluZCgnbmF2LnZlY3Rvci1tZW51IGgzOmZpcnN0IGE6Zmlyc3QnKS5wcm9wKCdpbk5vcG9wdXBTcGFuJywgdHJ1ZSk7XG5cdH07XG5cdC8vIEVOREZJTEU6IHRpdGxlcy5qc1xuXHQvLyBTVEFSVEZJTEU6IGdldHBhZ2UuanNcblx0Ly8gV2lraS1zcGVjaWZpYyBkb3dubG9hZGluZ1xuXHQvL1xuXHQvLyBTY2hlbWF0aWMgZm9yIGEgZ2V0V2lraSBjYWxsXG5cdC8vXG5cdC8vICAgICAgICAgICAgIGdldFBhZ2VXaXRoQ2FjaGluZ1xuXHQvL1x0XHRcdFx0XHR8XG5cdC8vXHQgICBmYWxzZVx0XHR8XHRcdCAgdHJ1ZVxuXHQvLyBnZXRQYWdlPC1bZmluZFBpY3R1cmVJbkNhY2hlXS0+LW9uQ29tcGxldGUoYSBmYWtlIGRvd25sb2FkKVxuXHQvLyAgIFxcLlxuXHQvL1x0IChhc3luYyktPmFkZFBhZ2VUb0NhY2hlKGRvd25sb2FkKS0+LW9uQ29tcGxldGUoZG93bmxvYWQpXG5cdC8vIGNoZWNrIGNhY2hlIHRvIHNlZSBpZiBwYWdlIGV4aXN0c1xuXHRjb25zdCBnZXRQYWdlV2l0aENhY2hpbmcgPSAodXJsLCBvbkNvbXBsZXRlLCBvd25lcikgPT4ge1xuXHRcdGxvZyhgZ2V0UGFnZVdpdGhDYWNoaW5nLCB1cmw9JHt1cmx9YCk7XG5cdFx0Y29uc3QgaSA9IGZpbmRJblBhZ2VDYWNoZSh1cmwpO1xuXHRcdGxldCBkO1xuXHRcdGlmIChpID4gLTEpIHtcblx0XHRcdGQgPSBmYWtlRG93bmxvYWQoXG5cdFx0XHRcdHVybCxcblx0XHRcdFx0b3duZXIuaWROdW1iZXIsXG5cdFx0XHRcdG9uQ29tcGxldGUsXG5cdFx0XHRcdHBnLmNhY2hlLnBhZ2VzW2ldLmRhdGEsXG5cdFx0XHRcdHBnLmNhY2hlLnBhZ2VzW2ldLmxhc3RNb2RpZmllZCxcblx0XHRcdFx0b3duZXJcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGQgPSBnZXRQYWdlKHVybCwgb25Db21wbGV0ZSwgb3duZXIpO1xuXHRcdFx0aWYgKGQgJiYgb3duZXIgJiYgb3duZXIuYWRkRG93bmxvYWQpIHtcblx0XHRcdFx0b3duZXIuYWRkRG93bmxvYWQoZCk7XG5cdFx0XHRcdGQub3duZXIgPSBvd25lcjtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IGdldFBhZ2UgPSAodXJsLCBvbkNvbXBsZXRlLCBvd25lcikgPT4ge1xuXHRcdGxvZygnZ2V0UGFnZScpO1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gKGQpID0+IHtcblx0XHRcdGlmICghZC5hYm9ydGVkKSB7XG5cdFx0XHRcdGFkZFBhZ2VUb0NhY2hlKGQpO1xuXHRcdFx0XHRvbkNvbXBsZXRlKGQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIHN0YXJ0RG93bmxvYWQodXJsLCBvd25lci5pZE51bWJlciwgY2FsbGJhY2spO1xuXHR9O1xuXHRjb25zdCBmaW5kSW5QYWdlQ2FjaGUgPSAodXJsKSA9PiB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwZy5jYWNoZS5wYWdlcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0aWYgKHVybCA9PT0gcGcuY2FjaGUucGFnZXNbaV0udXJsKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH07XG5cdGNvbnN0IGFkZFBhZ2VUb0NhY2hlID0gKGRvd25sb2FkKSA9PiB7XG5cdFx0bG9nKGBhZGRQYWdlVG9DYWNoZSAke2Rvd25sb2FkLnVybH1gKTtcblx0XHRjb25zdCBwYWdlID0ge1xuXHRcdFx0dXJsOiBkb3dubG9hZC51cmwsXG5cdFx0XHRkYXRhOiBkb3dubG9hZC5kYXRhLFxuXHRcdFx0bGFzdE1vZGlmaWVkOiBkb3dubG9hZC5sYXN0TW9kaWZpZWQsXG5cdFx0fTtcblx0XHRyZXR1cm4gcGcuY2FjaGUucGFnZXMucHVzaChwYWdlKTtcblx0fTtcblx0Ly8gRU5ERklMRTogZ2V0cGFnZS5qc1xuXHQvLyBTVEFSVEZJTEU6IHRvb2xzLmpzXG5cdC8vIElFIG1hZG5lc3Mgd2l0aCBlbmNvZGluZ1xuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly9cblx0Ly8gc3VwcG9zZSB0aHJvdWdob3V0IHRoYXQgdGhlIHBhZ2UgaXMgaW4gdXRmOCwgbGlrZSB3aWtpcGVkaWFcblx0Ly9cblx0Ly8gaWYgYSBpcyBhbiBhbmNob3IgRE9NIGVsZW1lbnQgYW5kIGEuaHJlZiBzaG91bGQgY29uc2lzdCBvZlxuXHQvL1xuXHQvLyBodHRwOi8vaG9zdC5uYW1lLmhlcmUvd2lraS9mb28/YmFyPWJhelxuXHQvL1xuXHQvLyB0aGVuIElFIGdpdmVzIGZvbyBhcyBcImxhdGluMS1lbmNvZGVkXCIgdXRmODsgd2UgaGF2ZSBmb28gPSBkZWNvZGVfdXRmOChkZWNvZGVVUkkoZm9vX2llKSlcblx0Ly8gYnV0IElFIGdpdmVzIGJhcj1iYXogY29ycmVjdGx5IGFzIHBsYWluIHV0Zjhcblx0Ly9cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vXG5cdC8vIElFJ3MgeG1saHR0cCBkb2Vzbid0IHVuZGVyc3RhbmQgdXRmOCB1cmxzLiBIYXZlIHRvIHVzZSBlbmNvZGVVUkkgaGVyZS5cblx0Ly9cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vXG5cdC8vIHN1bW1hdCBlbHNlXG5cdC8vIFNvdXJjZTogaHR0cDovL2FrdHVlbGwuZGUuc2VsZmh0bWwub3JnL2FydGlrZWwvamF2YXNjcmlwdC91dGY4YjY0L3V0ZjguaHRtXG5cdGNvbnN0IGdldEpzT2JqID0gKGpzb24pID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QganNvbl9yZXQgPSBKU09OLnBhcnNlKGpzb24pO1xuXHRcdFx0aWYgKGpzb25fcmV0Lndhcm5pbmdzKSB7XG5cdFx0XHRcdGZvciAobGV0IHcgPSAwOyB3IDwganNvbl9yZXQud2FybmluZ3MubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRpZiAoanNvbl9yZXQud2FybmluZ3Nbd11bJyonXSkge1xuXHRcdFx0XHRcdFx0bG9nKGpzb25fcmV0Lndhcm5pbmdzW3ddWycqJ10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRsb2coanNvbl9yZXQud2FybmluZ3Nbd10ud2FybmluZ3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChqc29uX3JldC5lcnJvcikge1xuXHRcdFx0XHRlcnJsb2coYCR7anNvbl9yZXQuZXJyb3IuY29kZX06ICR7anNvbl9yZXQuZXJyb3IuaW5mb31gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBqc29uX3JldDtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGVycmxvZyhgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBnZXRKc09iaiwganNvbj0ke2pzb259YCk7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGFueUNoaWxkID0gKG9iaikgPT4ge1xuXHRcdGZvciAoY29uc3QgcCBpbiBvYmopIHtcblx0XHRcdGlmICghT2JqZWN0Lmhhc093bihvYmosIHApKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9ialtwXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cdGNvbnN0IHVwY2FzZUZpcnN0ID0gKHN0cikgPT4ge1xuXHRcdGlmICh0eXBlb2Ygc3RyICE9PSB0eXBlb2YgJycgfHwgc3RyID09PSAnJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuXHR9O1xuXHRjb25zdCBmaW5kSW5BcnJheSA9IChhcnIsIGZvbykgPT4ge1xuXHRcdGlmICghYXJyIHx8IGFyci5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0Y29uc3QgbGVuID0gYXJyLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRpZiAoYXJyW2ldID09PSBmb28pIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fTtcblx0Y29uc3QgbmV4dE9uZSA9IChhcnJheSwgdmFsdWUpID0+IHtcblx0XHQvLyBOQiBpZiB0aGUgYXJyYXkgaGFzIHR3byBjb25zZWN1dGl2ZSBlbnRyaWVzIGVxdWFsXG5cdFx0Ly9cdHRoZW4gdGhpcyB3aWxsIGxvb3Agb24gc3VjY2Vzc2l2ZSBjYWxsc1xuXHRcdGNvbnN0IGkgPSBmaW5kSW5BcnJheShhcnJheSwgdmFsdWUpO1xuXHRcdGlmIChpIDwgMCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheVtpICsgMV07XG5cdH07XG5cdGNvbnN0IGxpdGVyYWxpemVSZWdleCA9IChzdHIpID0+IHtcblx0XHRyZXR1cm4gbXcudXRpbC5lc2NhcGVSZWdFeHAoc3RyKTtcblx0fTtcblx0U3RyaW5nLnByb3RvdHlwZS5lbnRpZnkgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gbGV0IHNoeSA9ICcmc2h5Oyc7XG5cdFx0cmV0dXJuIHRoaXMuc3BsaXQoJyYnKVxuXHRcdFx0LmpvaW4oJyZhbXA7Jylcblx0XHRcdC5zcGxpdCgnPCcpXG5cdFx0XHQuam9pbignJmx0OycpXG5cdFx0XHQuc3BsaXQoJz4nKVxuXHRcdFx0LmpvaW4oJyZndDsnIC8qICtzaHkgKi8pXG5cdFx0XHQuc3BsaXQoJ1wiJylcblx0XHRcdC5qb2luKCcmcXVvdDsnKTtcblx0fTtcblx0Ly8gQXJyYXkgZmlsdGVyIGZ1bmN0aW9uXG5cdGNvbnN0IHJlbW92ZU51bGxzID0gKHZhbCkgPT4ge1xuXHRcdHJldHVybiB2YWwgIT09IG51bGw7XG5cdH07XG5cdGNvbnN0IGpvaW5QYXRoID0gKGxpc3QpID0+IHtcblx0XHRyZXR1cm4gbGlzdC5maWx0ZXIocmVtb3ZlTnVsbHMpLmpvaW4oJy8nKTtcblx0fTtcblx0Y29uc3Qgc2ltcGxlUHJpbnRmID0gKHN0ciwgc3VicykgPT4ge1xuXHRcdGlmICghc3RyIHx8ICFzdWJzKSB7XG5cdFx0XHRyZXR1cm4gc3RyO1xuXHRcdH1cblx0XHRjb25zdCByZXQgPSBbXTtcblx0XHRjb25zdCBzID0gc3RyLnNwbGl0KC8oJXN8XFwkXFxkKykvKTtcblx0XHRsZXQgaSA9IDA7XG5cdFx0ZG8ge1xuXHRcdFx0cmV0LnB1c2gocy5zaGlmdCgpKTtcblx0XHRcdGlmIChzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNtZCA9IHMuc2hpZnQoKTtcblx0XHRcdGlmIChjbWQgPT09ICclcycpIHtcblx0XHRcdFx0aWYgKGkgPCBzdWJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJldC5wdXNoKHN1YnNbaV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldC5wdXNoKGNtZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0KytpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgaiA9IE51bWJlci5wYXJzZUludChjbWQucmVwbGFjZSgnJCcsICcnKSwgMTApIC0gMTtcblx0XHRcdFx0aWYgKGogPiAtMSAmJiBqIDwgc3Vicy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXQucHVzaChzdWJzW2pdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXQucHVzaChjbWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSB3aGlsZSAocy5sZW5ndGggPiAwKTtcblx0XHRyZXR1cm4gcmV0LmpvaW4oJycpO1xuXHR9O1xuXHRjb25zdCBpc1N0cmluZyA9ICh4KSA9PiB7XG5cdFx0cmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyB8fCB4IGluc3RhbmNlb2YgU3RyaW5nO1xuXHR9O1xuXHRjb25zdCBpc051bWJlciA9ICh4KSA9PiB7XG5cdFx0cmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB4IGluc3RhbmNlb2YgTnVtYmVyO1xuXHR9O1xuXHRjb25zdCBpc1JlZ0V4cCA9ICh4KSA9PiB7XG5cdFx0cmV0dXJuIHggaW5zdGFuY2VvZiBSZWdFeHA7XG5cdH07XG5cdGNvbnN0IGlzQXJyYXkgPSAoeCkgPT4ge1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KHgpO1xuXHR9O1xuXHRjb25zdCBpc09iamVjdCA9ICh4KSA9PiB7XG5cdFx0cmV0dXJuIHggaW5zdGFuY2VvZiBPYmplY3Q7XG5cdH07XG5cdGNvbnN0IGlzRnVuY3Rpb24gPSAoeCkgPT4ge1xuXHRcdHJldHVybiAhaXNSZWdFeHAoeCkgJiYgKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nIHx8IHggaW5zdGFuY2VvZiBGdW5jdGlvbik7XG5cdH07XG5cdGNvbnN0IHJlcGVhdFN0cmluZyA9IChzLCBtdWx0KSA9PiB7XG5cdFx0bGV0IHJldCA9ICcnO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbXVsdDsgKytpKSB7XG5cdFx0XHRyZXQgKz0gcztcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgemVyb0ZpbGwgPSAocywgbWluKSA9PiB7XG5cdFx0bWluIHx8PSAyO1xuXHRcdGNvbnN0IHQgPSBzLnRvU3RyaW5nKCk7XG5cdFx0cmV0dXJuIHJlcGVhdFN0cmluZygnMCcsIG1pbiAtIHQubGVuZ3RoKSArIHQ7XG5cdH07XG5cdGNvbnN0IG1hcCA9IChmLCBvKSA9PiB7XG5cdFx0aWYgKGlzQXJyYXkobykpIHtcblx0XHRcdHJldHVybiBtYXBfYXJyYXkoZiwgbyk7XG5cdFx0fVxuXHRcdHJldHVybiBtYXBfb2JqZWN0KGYsIG8pO1xuXHR9O1xuXHRjb25zdCBtYXBfYXJyYXkgPSAoZiwgbykgPT4ge1xuXHRcdGNvbnN0IHJldCA9IFtdO1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBvKSB7XG5cdFx0XHRyZXQucHVzaChmKGVsZW1lbnQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgbWFwX29iamVjdCA9IChmLCBvKSA9PiB7XG5cdFx0Y29uc3QgcmV0ID0ge307XG5cdFx0Zm9yIChjb25zdCBpIGluIG8pIHtcblx0XHRcdGlmICghT2JqZWN0Lmhhc093bihvLCBpKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdHJldFtvXSA9IGYob1tpXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdHBnLmVzY2FwZVF1b3Rlc0hUTUwgPSAodGV4dCkgPT4ge1xuXHRcdHJldHVybiB0ZXh0LnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG5cdH07XG5cdHBnLnVuZXNjYXBlUXVvdGVzSFRNTCA9IChodG1sKSA9PiB7XG5cdFx0Ly8gRnJvbSB7QGxpbmsgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzczOTQ3ODd9XG5cdFx0Ly8gVGhpcyBzZWVtcyB0byBiZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgb24gYWxsIG1ham9yIGJyb3dzZXJzIG5vdywgc28gd2Vcblx0XHQvLyBkb24ndCBoYXZlIHRvIG1ha2Ugb3VyIG93biBmdW5jdGlvbi5cblx0XHRjb25zdCB0eHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuXHRcdHR4dC5pbm5lckhUTUwgPSBodG1sO1xuXHRcdHJldHVybiB0eHQudmFsdWU7XG5cdH07XG5cdC8vIEVOREZJTEU6IHRvb2xzLmpzXG5cdC8vIFNUQVJURklMRTogZGFiLmpzXG5cdC8vIERhYi1maXhpbmcgY29kZVxuXHQvL1xuXHRjb25zdCByZXRhcmdldERhYiA9IChuZXdUYXJnZXQsIG9sZFRhcmdldCwgZnJpZW5kbHlDdXJyZW50QXJ0aWNsZU5hbWUsIHRpdGxlVG9FZGl0KSA9PiB7XG5cdFx0bG9nKGByZXRhcmdldERhYjogbmV3VGFyZ2V0PSR7bmV3VGFyZ2V0fSBvbGRUYXJnZXQ9JHtvbGRUYXJnZXR9YCk7XG5cdFx0cmV0dXJuIGNoYW5nZUxpbmtUYXJnZXRMaW5rKHtcblx0XHRcdG5ld1RhcmdldCxcblx0XHRcdHRleHQ6IG5ld1RhcmdldC5zcGxpdCgnICcpLmpvaW4oJyZuYnNwOycpLFxuXHRcdFx0aGludDogdHByaW50ZignZGlzYW1iaWdIaW50JywgW25ld1RhcmdldF0pLFxuXHRcdFx0c3VtbWFyeTogc2ltcGxlUHJpbnRmKGdldFZhbHVlT2YoJ3BvcHVwRml4RGFic1N1bW1hcnknKSwgW2ZyaWVuZGx5Q3VycmVudEFydGljbGVOYW1lLCBuZXdUYXJnZXRdKSxcblx0XHRcdGNsaWNrQnV0dG9uOiBnZXRWYWx1ZU9mKCdwb3B1cERhYnNBdXRvQ2xpY2snKSxcblx0XHRcdG1pbm9yOiB0cnVlLFxuXHRcdFx0b2xkVGFyZ2V0LFxuXHRcdFx0d2F0Y2g6IGdldFZhbHVlT2YoJ3BvcHVwV2F0Y2hEaXNhbWJpZ2dlZFBhZ2VzJyksXG5cdFx0XHR0aXRsZTogdGl0bGVUb0VkaXQsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IGxpc3RMaW5rcyA9ICh3aWtpdGV4dCwgb2xkVGFyZ2V0LCB0aXRsZVRvRWRpdCkgPT4ge1xuXHRcdC8vIG1lZGlhd2lraSBzdHJpcHMgdHJhaWxpbmcgc3BhY2VzLCBzbyB3ZSBkbyB0aGUgc2FtZVxuXHRcdC8vIHRlc3RjYXNlOiB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3cvaW5kZXgucGhwP3RpdGxlPVJhZGlhbCZvbGRpZD05NzM2NTYzM31cblx0XHRjb25zdCByZWcgPSAvXFxbXFxbKFtefF0qPykgKihcXHx8XV0pL2dpO1xuXHRcdGxldCByZXQgPSBbXTtcblx0XHRjb25zdCBzcGxpdHRlZCA9IHdpa2l0ZXh0LnNwbGl0KHJlZyk7XG5cdFx0Ly8gXlthLXpdKyBzaG91bGQgbWF0Y2ggaW50ZXJ3aWtpIGxpbmtzLCBob3BlZnVsbHkgKGNhc2UtaW5zZW5zaXRpdmUpXG5cdFx0Ly8gYW5kIF5bYS16XSogc2hvdWxkIG1hdGNoIHRob3NlIGFuZCBbWzpDYXRlZ29yeS4uLl1dIHN0eWxlIGxpbmtzIHRvb1xuXHRcdGNvbnN0IG9taXRSZWdleCA9IC9eW2Etel0qOnxeW1NzXXBlY2lhbDp8XltJaV1tYWdlfF5bQ2NdYXRlZ29yeS87XG5cdFx0Y29uc3QgZnJpZW5kbHlDdXJyZW50QXJ0aWNsZU5hbWUgPSBvbGRUYXJnZXQudG9TdHJpbmcoKTtcblx0XHRjb25zdCB3aWtQb3MgPSBnZXRWYWx1ZU9mKCdwb3B1cERhYldpa3Rpb25hcnknKTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHNwbGl0dGVkLmxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHRpZiAodHlwZW9mIHNwbGl0dGVkW2ldID09PSB0eXBlb2YgJ3N0cmluZycgJiYgc3BsaXR0ZWRbaV0ubGVuZ3RoID4gMCAmJiAhb21pdFJlZ2V4LnRlc3Qoc3BsaXR0ZWRbaV0pKSB7XG5cdFx0XHRcdHJldC5wdXNoKHJldGFyZ2V0RGFiKHNwbGl0dGVkW2ldLCBvbGRUYXJnZXQsIGZyaWVuZGx5Q3VycmVudEFydGljbGVOYW1lLCB0aXRsZVRvRWRpdCkpO1xuXHRcdFx0fSAvKiBpZiAqL1xuXHRcdH0gLyogZm9yIGxvb3AgKi9cblx0XHRyZXQgPSBybUR1cGVzRnJvbVNvcnRlZExpc3QocmV0LnNvcnQoKSk7XG5cdFx0aWYgKHdpa1Bvcykge1xuXHRcdFx0Y29uc3Qgd2lrVGFyZ2V0ID0gYHdpa3Rpb25hcnk6JHtmcmllbmRseUN1cnJlbnRBcnRpY2xlTmFtZS5yZXBsYWNlKC9eKC4rKVxccytcXChbXildK1xcKVxccyokLywgJyQxJyl9YDtcblx0XHRcdGNvbnN0IG1ldGggPSB3aWtQb3MudG9Mb3dlckNhc2UoKSA9PT0gJ2ZpcnN0JyA/ICd1bnNoaWZ0JyA6ICdwdXNoJztcblx0XHRcdHJldFttZXRoXShyZXRhcmdldERhYih3aWtUYXJnZXQsIG9sZFRhcmdldCwgZnJpZW5kbHlDdXJyZW50QXJ0aWNsZU5hbWUsIHRpdGxlVG9FZGl0KSk7XG5cdFx0fVxuXHRcdHJldC5wdXNoKFxuXHRcdFx0Y2hhbmdlTGlua1RhcmdldExpbmsoe1xuXHRcdFx0XHRuZXdUYXJnZXQ6IG51bGwsXG5cdFx0XHRcdHRleHQ6IHBvcHVwU3RyaW5nKCdyZW1vdmUgdGhpcyBsaW5rJykuc3BsaXQoJyAnKS5qb2luKCcmbmJzcDsnKSxcblx0XHRcdFx0aGludDogcG9wdXBTdHJpbmcoJ3JlbW92ZSBhbGwgbGlua3MgdG8gdGhpcyBkaXNhbWJpZyBwYWdlIGZyb20gdGhpcyBhcnRpY2xlJyksXG5cdFx0XHRcdGNsaWNrQnV0dG9uOiBnZXRWYWx1ZU9mKCdwb3B1cERhYnNBdXRvQ2xpY2snKSxcblx0XHRcdFx0b2xkVGFyZ2V0LFxuXHRcdFx0XHRzdW1tYXJ5OiBzaW1wbGVQcmludGYoZ2V0VmFsdWVPZigncG9wdXBSbURhYkxpbmtTdW1tYXJ5JyksIFtmcmllbmRseUN1cnJlbnRBcnRpY2xlTmFtZV0pLFxuXHRcdFx0XHR3YXRjaDogZ2V0VmFsdWVPZigncG9wdXBXYXRjaERpc2FtYmlnZ2VkUGFnZXMnKSxcblx0XHRcdFx0dGl0bGU6IHRpdGxlVG9FZGl0LFxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IHJtRHVwZXNGcm9tU29ydGVkTGlzdCA9IChsaXN0KSA9PiB7XG5cdFx0Y29uc3QgcmV0ID0gW107XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3QpIHtcblx0XHRcdGlmIChyZXQubGVuZ3RoID09PSAwIHx8IGVsZW1lbnQgIT09IHJldC5hdCgtMSkpIHtcblx0XHRcdFx0cmV0LnB1c2goZWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IG1ha2VGaXhEYWIgPSAoZGF0YSwgbmF2cG9wKSA9PiB7XG5cdFx0Ly8gZ3JhYiB0aXRsZSBmcm9tIHBhcmVudCBwb3B1cCBpZiB0aGVyZSBpcyBvbmU7IGRlZmF1bHQgZXhpc3RzIGluIGNoYW5nZUxpbmtUYXJnZXRMaW5rXG5cdFx0Y29uc3QgdGl0bGVUb0VkaXQgPSBuYXZwb3AucGFyZW50UG9wdXAgJiYgbmF2cG9wLnBhcmVudFBvcHVwLmFydGljbGUudG9TdHJpbmcoKTtcblx0XHRjb25zdCBsaXN0ID0gbGlzdExpbmtzKGRhdGEsIG5hdnBvcC5vcmlnaW5hbEFydGljbGUsIHRpdGxlVG9FZGl0KTtcblx0XHRpZiAobGlzdC5sZW5ndGggPT09IDApIHtcblx0XHRcdGxvZygnbGlzdExpbmtzIHJldHVybmVkIGVtcHR5IGxpc3QnKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRsZXQgaHRtbCA9IGA8aHI+JHtwb3B1cFN0cmluZygnQ2xpY2sgdG8gZGlzYW1iaWd1YXRlIHRoaXMgbGluayB0bzonKX08YnI+YDtcblx0XHRodG1sICs9IGxpc3Quam9pbignLCAnKTtcblx0XHRyZXR1cm4gaHRtbDtcblx0fTtcblx0Y29uc3QgbWFrZUZpeERhYnMgPSAod2lraVRleHQsIG5hdnBvcCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdGdldFZhbHVlT2YoJ3BvcHVwRml4RGFicycpICYmXG5cdFx0XHRpc0Rpc2FtYmlnKHdpa2lUZXh0LCBuYXZwb3AuYXJ0aWNsZSkgJiZcblx0XHRcdFRpdGxlLmZyb21VUkwobG9jYXRpb24uaHJlZikubmFtZXNwYWNlSWQoKSAhPT0gcGcubnNTcGVjaWFsSWQgJiZcblx0XHRcdG5hdnBvcC5hcnRpY2xlLnRhbGtQYWdlKClcblx0XHQpIHtcblx0XHRcdHNldFBvcHVwSFRNTChtYWtlRml4RGFiKHdpa2lUZXh0LCBuYXZwb3ApLCAncG9wdXBGaXhEYWInLCBuYXZwb3AuaWROdW1iZXIpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgcG9wdXBSZWRsaW5rSFRNTCA9IChhcnRpY2xlKSA9PiB7XG5cdFx0cmV0dXJuIGNoYW5nZUxpbmtUYXJnZXRMaW5rKHtcblx0XHRcdG5ld1RhcmdldDogbnVsbCxcblx0XHRcdHRleHQ6IHBvcHVwU3RyaW5nKCdyZW1vdmUgdGhpcyBsaW5rJykuc3BsaXQoJyAnKS5qb2luKCcmbmJzcDsnKSxcblx0XHRcdGhpbnQ6IHBvcHVwU3RyaW5nKCdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZScpLFxuXHRcdFx0Y2xpY2tCdXR0b246IGdldFZhbHVlT2YoJ3BvcHVwUmVkbGlua0F1dG9DbGljaycpLFxuXHRcdFx0b2xkVGFyZ2V0OiBhcnRpY2xlLnRvU3RyaW5nKCksXG5cdFx0XHRzdW1tYXJ5OiBzaW1wbGVQcmludGYoZ2V0VmFsdWVPZigncG9wdXBSZWRsaW5rU3VtbWFyeScpLCBbYXJ0aWNsZS50b1N0cmluZygpXSksXG5cdFx0fSk7XG5cdH07XG5cdC8vIEVOREZJTEU6IGRhYi5qc1xuXHQvLyBTVEFSVEZJTEU6IGh0bWxvdXRwdXQuanNcblx0Ly8gdGhpcyBoYXMgdG8gdXNlIGEgdGltZXIgbG9vcCBhcyB3ZSBkb24ndCBrbm93IGlmIHRoZSBET00gZWxlbWVudCBleGlzdHMgd2hlbiB3ZSB3YW50IHRvIHNldCB0aGUgdGV4dFxuXHRjb25zdCBzZXRQb3B1cEhUTUwgPSBmdW5jdGlvbiBzZXRQb3B1cEhUTUwoc3RyLCBlbGVtZW50SWQsIHBvcHVwSWQsIG9uU3VjY2VzcywgYXBwZW5kKSB7XG5cdFx0aWYgKHBvcHVwSWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gY29uc29sZS5lcnJvcignW1BvcHVwc10gcG9wdXBJZCBpcyBub3QgZGVmaW5lZCBpbiBzZXRQb3B1cEhUTUwsIGh0bWw9JytzdHIuc3Vic3RyaW5nKDAsMTAwKSk7XG5cdFx0XHRwb3B1cElkID0gcGcuaWROdW1iZXI7XG5cdFx0fVxuXHRcdGNvbnN0IHBvcHVwRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2VsZW1lbnRJZH0ke3BvcHVwSWR9YCk7XG5cdFx0aWYgKHBvcHVwRWxlbWVudCkge1xuXHRcdFx0aWYgKCFhcHBlbmQpIHtcblx0XHRcdFx0cG9wdXBFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzU3RyaW5nKHN0cikpIHtcblx0XHRcdFx0cG9wdXBFbGVtZW50LmlubmVySFRNTCArPSBzdHI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb3B1cEVsZW1lbnQuYXBwZW5kKHN0cik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob25TdWNjZXNzKSB7XG5cdFx0XHRcdG9uU3VjY2VzcygpO1xuXHRcdFx0fVxuXHRcdFx0c2V0VGltZW91dChjaGVja1BvcHVwUG9zaXRpb24sIDEwMCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluIGluIGEgbGl0dGxlIHdoaWxlLi4uXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRzZXRQb3B1cEhUTUwoc3RyLCBlbGVtZW50SWQsIHBvcHVwSWQsIG9uU3VjY2Vzcyk7XG5cdFx0fSwgNjAwKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblx0Y29uc3Qgc2V0UG9wdXBUcmFpbGVyID0gKHN0ciwgaWQpID0+IHtcblx0XHRyZXR1cm4gc2V0UG9wdXBIVE1MKHN0ciwgJ3BvcHVwRGF0YScsIGlkKTtcblx0fTtcblx0Ly8gYXJncy5uYXZwb3B1cCBpcyBtYW5kYXRvcnlcblx0Ly8gb3B0aW9uYWw6IGFyZ3MucmVkaXIsIGFyZ3MucmVkaXJUYXJnZXRcblx0Ly8gRklYTUU6IHllIGdvZHMsIHRoaXMgaXMgdWdseSBzdHVmZlxuXHRjb25zdCBmaWxsRW1wdHlTcGFucyA9IChhcmdzKSA9PiB7XG5cdFx0Ly8gaWYgcmVkaXIgaXMgcHJlc2VudCBhbmQgdHJ1ZSB0aGVuIHJlZGlyVGFyZ2V0IGlzIG1hbmRhdG9yeVxuXHRcdGxldCByZWRpciA9IHRydWU7XG5cdFx0bGV0IHJjaWQ7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSAnb2JqZWN0JyB8fCBhcmdzLnJlZGlyID09PSB1bmRlZmluZWQgfHwgIWFyZ3MucmVkaXIpIHtcblx0XHRcdHJlZGlyID0gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGEgPSBhcmdzLm5hdnBvcHVwLnBhcmVudEFuY2hvcjtcblx0XHRsZXQgYXJ0aWNsZTtcblx0XHRsZXQgaGludDtcblx0XHRsZXQgb2xkaWQ7XG5cdFx0bGV0IHBhcmFtcyA9IHt9O1xuXHRcdGlmIChyZWRpciAmJiB0eXBlb2YgYXJncy5yZWRpclRhcmdldCA9PT0gdHlwZW9mIHt9KSB7XG5cdFx0XHRhcnRpY2xlID0gYXJncy5yZWRpclRhcmdldDtcblx0XHRcdC8vIGhpbnQ9YXJ0aWNsZS5oaW50VmFsdWUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXJ0aWNsZSA9IG5ldyBUaXRsZSgpLmZyb21BbmNob3IoYSk7XG5cdFx0XHRoaW50ID0gYS5vcmlnaW5hbFRpdGxlIHx8IGFydGljbGUuaGludFZhbHVlKCk7XG5cdFx0XHRwYXJhbXMgPSBwYXJzZVBhcmFtcyhhLmhyZWYpO1xuXHRcdFx0b2xkaWQgPSBnZXRWYWx1ZU9mKCdwb3B1cEhpc3RvcmljYWxMaW5rcycpID8gcGFyYW1zLm9sZGlkIDogbnVsbDtcblx0XHRcdCh7cmNpZH0gPSBwYXJhbXMpO1xuXHRcdH1cblx0XHRjb25zdCB4ID0ge1xuXHRcdFx0YXJ0aWNsZSxcblx0XHRcdGhpbnQsXG5cdFx0XHRvbGRpZCxcblx0XHRcdHJjaWQsXG5cdFx0XHRuYXZwb3A6IGFyZ3MubmF2cG9wdXAsXG5cdFx0XHRwYXJhbXMsXG5cdFx0fTtcblx0XHRjb25zdCBzdHJ1Y3R1cmUgPSBwZy5zdHJ1Y3R1cmVzW2dldFZhbHVlT2YoJ3BvcHVwU3RydWN0dXJlJyldO1xuXHRcdGlmICh0eXBlb2Ygc3RydWN0dXJlICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0c2V0UG9wdXBIVE1MKFxuXHRcdFx0XHQncG9wdXBFcnJvcicsXG5cdFx0XHRcdGBVbmtub3duIHN0cnVjdHVyZSAodGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuKTogJHtwZy5vcHRpb24ucG9wdXBTdHJ1Y3R1cmV9YCxcblx0XHRcdFx0YXJncy5uYXZwb3B1cC5pZE51bWJlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc3BhbnMgPSBmbGF0dGVuKHBnLm1pc2MubGF5b3V0KTtcblx0XHRjb25zdCBudW1zcGFucyA9IHNwYW5zLmxlbmd0aDtcblx0XHRjb25zdCByZWRpcnMgPSBwZy5taXNjLnJlZGlyU3BhbnM7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1zcGFuczsgKytpKSB7XG5cdFx0XHRjb25zdCBmb3VuZCA9IHJlZGlycyAmJiByZWRpcnMuaW5jbHVkZXMoc3BhbnNbaV0pO1xuXHRcdFx0Ly8gbG9nKCdyZWRpcj0nICsgcmVkaXIgKyAnLCBmb3VuZD0nICsgZm91bmQgKyAnLCBzcGFuc1tpXT0nICsgc3BhbnNbaV0pO1xuXHRcdFx0aWYgKChmb3VuZCAmJiAhcmVkaXIpIHx8ICghZm91bmQgJiYgcmVkaXIpKSB7XG5cdFx0XHRcdC8vIGxvZygnc2tpcHBpbmcgdGhpcyBzZXQgb2YgdGhlIGxvb3AnKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdHJ1Y3R1cmVmbiA9IHN0cnVjdHVyZVtzcGFuc1tpXV07XG5cdFx0XHRpZiAoc3RydWN0dXJlZm4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBub3RoaW5nIHRvIGRvIGZvciB0aGlzIHN0cnVjdHVyZSBwYXJ0XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHNldGZuID0gc2V0UG9wdXBIVE1MO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRnZXRWYWx1ZU9mKCdwb3B1cEFjdGl2ZU5hdmxpbmtzJykgJiZcblx0XHRcdFx0KHNwYW5zW2ldLmluZGV4T2YoJ3BvcHVwVG9wTGlua3MnKSA9PT0gMCB8fCBzcGFuc1tpXS5pbmRleE9mKCdwb3B1cFJlZGlyVG9wTGlua3MnKSA9PT0gMClcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRmbiA9IHNldFBvcHVwVGlwc0FuZEhUTUw7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHR5cGVvZiBzdHJ1Y3R1cmVmbikge1xuXHRcdFx0XHRjYXNlICdmdW5jdGlvbic6XG5cdFx0XHRcdFx0bG9nKGBydW5uaW5nICR7c3BhbnNbaV19KHtcblx0XHRcdFx0XHRcdGFydGljbGU6JHt4LmFydGljbGV9LCBoaW50OiR7eC5oaW50fSwgb2xkaWQ6ICR7eC5vbGRpZH19KWApO1xuXHRcdFx0XHRcdHNldGZuKHN0cnVjdHVyZWZuKHgpLCBzcGFuc1tpXSwgYXJncy5uYXZwb3B1cC5pZE51bWJlcik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRcdFx0c2V0Zm4oc3RydWN0dXJlZm4sIHNwYW5zW2ldLCBhcmdzLm5hdnBvcHVwLmlkTnVtYmVyKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRlcnJsb2coYHVua25vd24gdGhpbmcgd2l0aCBsYWJlbCAke3NwYW5zW2ldfSAoc3BhbiBpbmRleCB3YXMgJHtpfSlgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdC8vIGZsYXR0ZW4gYW4gYXJyYXlcblx0Y29uc3QgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4obGlzdCwgc3RhcnQpIHtcblx0XHRjb25zdCByZXQgPSBbXTtcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c3RhcnQgPSAwO1xuXHRcdH1cblx0XHRmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAodHlwZW9mIGxpc3RbaV0gPT09IHR5cGVvZiBbXSkge1xuXHRcdFx0XHRyZXR1cm4gWy4uLnJldCwgLi4uZmxhdHRlbihsaXN0W2ldKSwgLi4uZmxhdHRlbihsaXN0LCBpICsgMSldO1xuXHRcdFx0fVxuXHRcdFx0cmV0LnB1c2gobGlzdFtpXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdC8vIEdlbmVyYXRlIGh0bWwgZm9yIHdob2xlIHBvcHVwXG5cdGNvbnN0IHBvcHVwSFRNTCA9IGZ1bmN0aW9uIHBvcHVwSFRNTChhKSB7XG5cdFx0Z2V0VmFsdWVPZigncG9wdXBTdHJ1Y3R1cmUnKTtcblx0XHRjb25zdCBzdHJ1Y3R1cmUgPSBwZy5zdHJ1Y3R1cmVzW3BnLm9wdGlvbi5wb3B1cFN0cnVjdHVyZV07XG5cdFx0aWYgKHR5cGVvZiBzdHJ1Y3R1cmUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHQvLyByZXR1cm4gJ1Vua25vd24gc3RydWN0dXJlOiAnK3BnLm9wdGlvbi5wb3B1cFN0cnVjdHVyZTtcblx0XHRcdC8vIG92ZXJyaWRlIHVzZXIgY2hvaWNlXG5cdFx0XHRwZy5vcHRpb24ucG9wdXBTdHJ1Y3R1cmUgPSBwZy5vcHRpb25EZWZhdWx0LnBvcHVwU3RydWN0dXJlO1xuXHRcdFx0cmV0dXJuIHBvcHVwSFRNTChhKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzdHJ1Y3R1cmUucG9wdXBMYXlvdXQgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiAnQmFkIGxheW91dCc7XG5cdFx0fVxuXHRcdHBnLm1pc2MubGF5b3V0ID0gc3RydWN0dXJlLnBvcHVwTGF5b3V0KCk7XG5cdFx0cGcubWlzYy5yZWRpclNwYW5zID0gdHlwZW9mIHN0cnVjdHVyZS5wb3B1cFJlZGlyU3BhbnMgPT09ICdmdW5jdGlvbicgPyBzdHJ1Y3R1cmUucG9wdXBSZWRpclNwYW5zKCkgOiBbXTtcblx0XHRyZXR1cm4gbWFrZUVtcHR5U3BhbnMocGcubWlzYy5sYXlvdXQsIGEubmF2cG9wdXApO1xuXHR9O1xuXHRjb25zdCBtYWtlRW1wdHlTcGFucyA9IGZ1bmN0aW9uIG1ha2VFbXB0eVNwYW5zKGxpc3QsIG5hdnBvcCkge1xuXHRcdGxldCByZXQgPSAnJztcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGlzdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBlbGVtZW50ID09PSB0eXBlb2YgJycpIHtcblx0XHRcdFx0cmV0ICs9IGVtcHR5U3BhbkhUTUwoZWxlbWVudCwgbmF2cG9wLmlkTnVtYmVyLCAnZGl2Jyk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSB0eXBlb2YgW10gJiYgZWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldCA9IHJldC5zcGxpdCgvKDxcXC9bXj5dKj8+JCkvKS5qb2luKG1ha2VFbXB0eVNwYW5zKGVsZW1lbnQsIG5hdnBvcCkpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gdHlwZW9mIHt9ICYmIGVsZW1lbnQubm9kZVR5cGUpIHtcblx0XHRcdFx0cmV0ICs9IGVtcHR5U3BhbkhUTUwoZWxlbWVudC5uYW1lLCBuYXZwb3AuaWROdW1iZXIsIGVsZW1lbnQubm9kZVR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHRjb25zdCBlbXB0eVNwYW5IVE1MID0gZnVuY3Rpb24gZW1wdHlTcGFuSFRNTChuYW1lLCBpZCwgdGFnLCBjbGFzc25hbWUpIHtcblx0XHR0YWcgfHw9ICdzcGFuJztcblx0XHRjbGFzc25hbWUgfHw9IGVtcHR5U3BhbkhUTUwuY2xhc3NBbGlhc2VzW25hbWVdO1xuXHRcdGNsYXNzbmFtZSB8fD0gbmFtZTtcblx0XHRpZiAobmFtZSA9PT0gZ2V0VmFsdWVPZigncG9wdXBEcmFnSGFuZGxlJykpIHtcblx0XHRcdGNsYXNzbmFtZSArPSAnIHBvcHVwRHJhZ0hhbmRsZSc7XG5cdFx0fVxuXHRcdHJldHVybiBzaW1wbGVQcmludGYoJzwlcyBpZD1cIiVzXCIgY2xhc3M9XCIlc1wiPjwvJXM+JywgW3RhZywgbmFtZSArIGlkLCBjbGFzc25hbWUsIHRhZ10pO1xuXHR9O1xuXHRlbXB0eVNwYW5IVE1MLmNsYXNzQWxpYXNlcyA9IHtcblx0XHRwb3B1cFNlY29uZFByZXZpZXc6ICdwb3B1cFByZXZpZXcnLFxuXHR9O1xuXHQvLyBnZW5lcmF0ZSBodG1sIGZvciBwb3B1cCBpbWFnZVxuXHQvLyA8YSBpZD1cInBvcHVwSW1hZ2VMaW5rblwiPjxpbWcgaWQ9XCJwb3B1cEltYWdlblwiPlxuXHQvLyB3aGVyZSBuPWlkTnVtYmVyXG5cdGNvbnN0IGltYWdlSFRNTCA9IChfYXJ0aWNsZSwgaWROdW1iZXIpID0+IHtcblx0XHRyZXR1cm4gc2ltcGxlUHJpbnRmKFxuXHRcdFx0JzxhIGlkPVwicG9wdXBJbWFnZUxpbmskMVwiPicgK1xuXHRcdFx0XHQnPGltZyBhbGlnbj1cInJpZ2h0XCIgdmFsaWduPVwidG9wXCIgaWQ9XCJwb3B1cEltZyQxXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj48L2ltZz4nICtcblx0XHRcdFx0JzwvYT4nLFxuXHRcdFx0W2lkTnVtYmVyXVxuXHRcdCk7XG5cdH07XG5cdGNvbnN0IHBvcFRpcHNTb29uRm4gPSAoaWQsIHdoZW4sIHBvcERhdGEpID0+IHtcblx0XHR3aGVuIHx8PSAyNTA7XG5cdFx0Y29uc3QgcG9wVGlwcyA9ICgpID0+IHtcblx0XHRcdHNldHVwVG9vbHRpcHMoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7aWR9YCksIGZhbHNlLCB0cnVlLCBwb3BEYXRhKTtcblx0XHR9O1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRzZXRUaW1lb3V0KHBvcFRpcHMsIHdoZW4sIHBvcERhdGEpO1xuXHRcdH07XG5cdH07XG5cdGNvbnN0IHNldFBvcHVwVGlwc0FuZEhUTUwgPSAoaHRtbCwgZGl2bmFtZSwgaWRudW1iZXIsIHBvcERhdGEpID0+IHtcblx0XHRzZXRQb3B1cEhUTUwoXG5cdFx0XHRodG1sLFxuXHRcdFx0ZGl2bmFtZSxcblx0XHRcdGlkbnVtYmVyLFxuXHRcdFx0Z2V0VmFsdWVPZigncG9wdXBTdWJwb3B1cHMnKSA/IHBvcFRpcHNTb29uRm4oZGl2bmFtZSArIGlkbnVtYmVyLCBudWxsLCBwb3BEYXRhKSA6IG51bGxcblx0XHQpO1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBodG1sb3V0cHV0LmpzXG5cdC8vIFNUQVJURklMRTogbW91c2VvdXQuanNcblx0Ly8gZnV6enkgY2hlY2tzXG5cdGNvbnN0IGZ1enp5Q3Vyc29yT2ZmTWVudXMgPSAoX3gsIF95LCBfZnV6eiwgcGFyZW50KSA9PiB7XG5cdFx0aWYgKCFwYXJlbnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCB1bHMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCgndWwnKTtcblx0XHRmb3IgKGNvbnN0IHVsIG9mIHVscykge1xuXHRcdFx0aWYgKHVsLmNsYXNzTmFtZSA9PT0gJ3BvcHVwX21lbnUnICYmIHVsLm9mZnNldFdpZHRoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IC8vIGVsc2UgeyBkb2N1bWVudC50aXRsZSs9Jy4nOyB9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXHRjb25zdCBjaGVja1BvcHVwUG9zaXRpb24gPSAoKSA9PiB7XG5cdFx0Ly8gc3RvcCB0aGUgcG9wdXAgcnVubmluZyBvZmYgdGhlIHJpZ2h0IG9mIHRoZSBzY3JlZW5cblx0XHQvLyBGSVhNRSBhdm9pZCBwZy5jdXJyZW50Lmxpbmtcblx0XHRpZiAocGcuY3VycmVudC5saW5rICYmIHBnLmN1cnJlbnQubGluay5uYXZwb3B1cCkge1xuXHRcdFx0cGcuY3VycmVudC5saW5rLm5hdnBvcHVwLmxpbWl0SG9yaXpvbnRhbFBvc2l0aW9uKCk7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBtb3VzZU91dFdpa2lMaW5rID0gZnVuY3Rpb24gbW91c2VPdXRXaWtpTGluaygpIHtcblx0XHQvLyBjb25zb2xlICgnbW91c2VPdXRXaWtpTGluaycpO1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHJlbW92ZU1vZGlmaWVyS2V5TGlzdGVuZXIoc2VsZik7XG5cdFx0aWYgKHNlbGYubmF2cG9wdXAgPT09IG51bGwgfHwgc2VsZi5uYXZwb3B1cCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghc2VsZi5uYXZwb3B1cC5pc1Zpc2libGUoKSkge1xuXHRcdFx0c2VsZi5uYXZwb3B1cC5iYW5pc2goKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmVzdG9yZVRpdGxlKHNlbGYpO1xuXHRcdE5hdnBvcHVwLnRyYWNrZXIuYWRkSG9vayhwb3NDaGVja2VySG9vayhzZWxmLm5hdnBvcHVwKSk7XG5cdH07XG5cdGNvbnN0IHBvc0NoZWNrZXJIb29rID0gKG5hdnBvcCkgPT4ge1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRpZiAoIW5hdnBvcC5pc1Zpc2libGUoKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLyogcmVtb3ZlIHRoaXMgaG9vayAqL1xuXHRcdFx0fVxuXHRcdFx0aWYgKE5hdnBvcHVwLnRyYWNrZXIuZGlydHkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qge3h9ID0gTmF2cG9wdXAudHJhY2tlcjtcblx0XHRcdGNvbnN0IHt5fSA9IE5hdnBvcHVwLnRyYWNrZXI7XG5cdFx0XHRjb25zdCBtb3VzZU92ZXJOYXZwb3AgPVxuXHRcdFx0XHRuYXZwb3AuaXNXaXRoaW4oeCwgeSwgbmF2cG9wLmZ1enosIG5hdnBvcC5tYWluRGl2KSB8fFxuXHRcdFx0XHQhZnV6enlDdXJzb3JPZmZNZW51cyh4LCB5LCBuYXZwb3AuZnV6eiwgbmF2cG9wLm1haW5EaXYpO1xuXHRcdFx0Ly8gRklYTUUgaXQnZCBiZSBwcmV0dGllciB0byBkbyB0aGlzIGludGVybmFsIHRvIHRoZSBOYXZwb3B1cCBvYmplY3RzXG5cdFx0XHRsZXQgdCA9IGdldFZhbHVlT2YoJ3BvcHVwSGlkZURlbGF5Jyk7XG5cdFx0XHRpZiAodCkge1xuXHRcdFx0XHR0ICo9IDEwMDA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXQpIHtcblx0XHRcdFx0aWYgKCFtb3VzZU92ZXJOYXZwb3ApIHtcblx0XHRcdFx0XHRpZiAobmF2cG9wLnBhcmVudEFuY2hvcikge1xuXHRcdFx0XHRcdFx0cmVzdG9yZVRpdGxlKG5hdnBvcC5wYXJlbnRBbmNob3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuYXZwb3AuYmFuaXNoKCk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7IC8qIHJlbW92ZSB0aGlzIGhvb2sgKi9cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHQvLyB3ZSBoYXZlIGEgaGlkZSBkZWxheSBzZXRcblx0XHRcdGNvbnN0IGQgPSBEYXRlLm5vdygpO1xuXHRcdFx0aWYgKCFuYXZwb3AubW91c2VMZWF2aW5nVGltZSkge1xuXHRcdFx0XHRuYXZwb3AubW91c2VMZWF2aW5nVGltZSA9IGQ7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChtb3VzZU92ZXJOYXZwb3ApIHtcblx0XHRcdFx0bmF2cG9wLm1vdXNlTGVhdmluZ1RpbWUgPSBudWxsO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZCAtIG5hdnBvcC5tb3VzZUxlYXZpbmdUaW1lID4gdCkge1xuXHRcdFx0XHRuYXZwb3AubW91c2VMZWF2aW5nVGltZSA9IG51bGw7XG5cdFx0XHRcdG5hdnBvcC5iYW5pc2goKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8qIHJlbW92ZSB0aGlzIGhvb2sgKi9cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHR9O1xuXHRjb25zdCBydW5TdG9wUG9wdXBUaW1lciA9IChuYXZwb3ApID0+IHtcblx0XHQvLyBhdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgaGF2ZSBsZWZ0IHRoZSBsaW5rIGJ1dCByZW1haW4gd2l0aGluIHRoZSBwb3B1cFxuXHRcdC8vIHNvIHdlIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiB1bnRpbCB3ZSBsZWF2ZSB0aGUgcG9wdXAuXG5cdFx0aWYgKCFuYXZwb3Auc3RvcFBvcHVwVGltZXIpIHtcblx0XHRcdG5hdnBvcC5zdG9wUG9wdXBUaW1lciA9IHNldEludGVydmFsKHBvc0NoZWNrZXJIb29rKG5hdnBvcCksIDUwMCk7XG5cdFx0XHRuYXZwb3AuYWRkSG9vayhcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwobmF2cG9wLnN0b3BQb3B1cFRpbWVyKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0J2hpZGUnLFxuXHRcdFx0XHQnYmVmb3JlJ1xuXHRcdFx0KTtcblx0XHR9XG5cdH07XG5cdC8vIEVOREZJTEU6IG1vdXNlb3V0LmpzXG5cdC8vIFNUQVJURklMRTogcHJldmlld21ha2VyLmpzXG5cdC8qKlxuXHQgKiBAZmlsZW92ZXJ2aWV3XG5cdCAqIERlZmluZXMgdGhlIHtAc291cmNlIFByZXZpZXdtYWtlcn0gb2JqZWN0LCB3aGljaCBnZW5lcmF0ZXMgc2hvcnQgcHJldmlld3MgZnJvbSB3aWtpIG1hcmt1cC5cblx0ICovXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFByZXZpZXdtYWtlclxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQGNsYXNzIFRoZSBQcmV2aWV3bWFrZXIgY2xhc3MuIFVzZSBhbiBpbnN0YW5jZSBvZiB0aGlzIHRvIGdlbmVyYXRlIHNob3J0IHByZXZpZXdzIGZyb20gV2lraXRleHQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB3aWtpVGV4dCBUaGUgV2lraXRleHQgc291cmNlIG9mIHRoZSBwYWdlIHdlIHdpc2ggdG8gcHJldmlldy5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVcmwgVGhlIHVybCB3ZSBzaG91bGQgcHJlcGVuZCB3aGVuIGNyZWF0aW5nIHJlbGF0aXZlIHVybHMuXG5cdCAqIEBwYXJhbSB7TmF2cG9wdXB9IG93bmVyIFRoZSBuYXZwb3AgYXNzb2NpYXRlZCB0byB0aGlzIHByZXZpZXcgZ2VuZXJhdG9yXG5cdCAqL1xuXHRjbGFzcyBQcmV2aWV3bWFrZXIge1xuXHRcdGNvbnN0cnVjdG9yKHdpa2lUZXh0LCBiYXNlVXJsLCBvd25lcikge1xuXHRcdFx0LyoqIFRoZSB3aWtpdGV4dCB3aGljaCBpcyBtYW5pcHVsYXRlZCB0byBnZW5lcmF0ZSB0aGUgcHJldmlldy4gKi9cblx0XHRcdHRoaXMub3JpZ2luYWxEYXRhID0gd2lraVRleHQ7XG5cdFx0XHR0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuXHRcdFx0dGhpcy5vd25lciA9IG93bmVyO1xuXHRcdFx0dGhpcy5tYXhDaGFyYWN0ZXJzID0gZ2V0VmFsdWVPZigncG9wdXBNYXhQcmV2aWV3Q2hhcmFjdGVycycpO1xuXHRcdFx0dGhpcy5tYXhTZW50ZW5jZXMgPSBnZXRWYWx1ZU9mKCdwb3B1cE1heFByZXZpZXdTZW50ZW5jZXMnKTtcblx0XHRcdHRoaXMuc2V0RGF0YSgpO1xuXHRcdH1cblx0XHRzZXREYXRhKCkge1xuXHRcdFx0Y29uc3QgbWF4U2l6ZSA9IE1hdGgubWF4KDFlNCwgMiAqIHRoaXMubWF4Q2hhcmFjdGVycyk7XG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YS5zbGljZSgwLCBNYXRoLm1heCgwLCBtYXhTaXplKSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZSBIVE1MIGNvbW1lbnRzXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxDb21tZW50cygpIHtcblx0XHRcdC8vIHRoaXMgYWxzbyBraWxscyBvbmUgdHJhaWxpbmcgbmV3bGluZSwgZWcgW1tkaWFteW9dXVxuXHRcdFx0dGhpcy5kYXRhID0gdGhpcy5kYXRhLnJlcGxhY2UoL148IS0tW14kXSo/LS0+XFxufFxcbjwhLS1bXiRdKj8tLT4oPz1cXG4pfDwhLS1bXiRdKj8tLT4vZywgJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxEaXZzKCkge1xuXHRcdFx0Ly8gc2F5IGdvb2RieWUsIGRpdnMgKGNhbiBiZSBuZXN0ZWQsIHNvIHVzZSAqIG5vdCAqPylcblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKC88ICpkaXZbXj5dKiAqPltcXFNcXHNdKj88ICpcXC8gKmRpdiAqPi9naSwgJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxHYWxsZXJpZXMoKSB7XG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvPCAqZ2FsbGVyeVtePl0qICo+W1xcU1xcc10qPzwgKlxcLyAqZ2FsbGVyeSAqPi9naSwgJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gb3BlbmluZ1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBjbG9zaW5nXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHN1Ym9wZW5pbmdcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc3ViY2xvc2luZ1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSByZXBsXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRraWxsKG9wZW5pbmcsIGNsb3NpbmcsIHN1Ym9wZW5pbmcsIHN1YmNsb3NpbmcsIHJlcGwpIHtcblx0XHRcdGxldCBvbGRrID0gdGhpcy5kYXRhO1xuXHRcdFx0bGV0IGsgPSBQcmV2aWV3bWFrZXIua2lsbFN0dWZmKHRoaXMuZGF0YSwgb3BlbmluZywgY2xvc2luZywgc3Vib3BlbmluZywgc3ViY2xvc2luZywgcmVwbCk7XG5cdFx0XHR3aGlsZSAoay5sZW5ndGggPCBvbGRrLmxlbmd0aCkge1xuXHRcdFx0XHRvbGRrID0gaztcblx0XHRcdFx0ayA9IFByZXZpZXdtYWtlci5raWxsU3R1ZmYoaywgb3BlbmluZywgY2xvc2luZywgc3Vib3BlbmluZywgc3ViY2xvc2luZywgcmVwbCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRhdGEgPSBrO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdHh0XG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IG9wZW5pbmdcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gY2xvc2luZ1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzdWJvcGVuaW5nXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHN1YmNsb3Npbmdcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcmVwbFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0c3RhdGljIGtpbGxTdHVmZih0eHQsIG9wZW5pbmcsIGNsb3NpbmcsIHN1Ym9wZW5pbmcsIHN1YmNsb3NpbmcsIHJlcGwpIHtcblx0XHRcdGNvbnN0IG9wID0gUHJldmlld21ha2VyLm1ha2VSZWdleHAob3BlbmluZyk7XG5cdFx0XHRjb25zdCBjbCA9IFByZXZpZXdtYWtlci5tYWtlUmVnZXhwKGNsb3NpbmcsICdeJyk7XG5cdFx0XHRjb25zdCBzYiA9IHN1Ym9wZW5pbmcgPyBQcmV2aWV3bWFrZXIubWFrZVJlZ2V4cChzdWJvcGVuaW5nLCAnXicpIDogbnVsbDtcblx0XHRcdGNvbnN0IHNjID0gc3ViY2xvc2luZyA/IFByZXZpZXdtYWtlci5tYWtlUmVnZXhwKHN1YmNsb3NpbmcsICdeJykgOiBjbDtcblx0XHRcdGlmICghb3AgfHwgIWNsKSB7XG5cdFx0XHRcdHZvaWQgbXcubm90aWZ5KCdOYXZpZ2F0aW9uIFBvcHVwcyBlcnJvcjogb3Agb3IgY2wgaXMgbnVsbCEgc29tZXRoaW5nIGlzIHdyb25nLicsIHtcblx0XHRcdFx0XHR0YWc6ICdwb3B1cHMnLFxuXHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9wLnRlc3QodHh0KSkge1xuXHRcdFx0XHRyZXR1cm4gdHh0O1xuXHRcdFx0fVxuXHRcdFx0bGV0IHJldCA9ICcnO1xuXHRcdFx0Y29uc3Qgb3BSZXN1bHQgPSBvcC5leGVjKHR4dCk7XG5cdFx0XHRyZXQgPSB0eHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgb3BSZXN1bHQuaW5kZXgpKTtcblx0XHRcdHR4dCA9IHR4dC5zbGljZShNYXRoLm1heCgwLCBvcFJlc3VsdC5pbmRleCArIG9wUmVzdWx0WzBdLmxlbmd0aCkpO1xuXHRcdFx0bGV0IGRlcHRoID0gMTtcblx0XHRcdHdoaWxlICh0eHQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsZXQgcmVtb3ZhbCA9IDA7XG5cdFx0XHRcdGlmIChkZXB0aCA9PT0gMSAmJiBjbC50ZXN0KHR4dCkpIHtcblx0XHRcdFx0XHRkZXB0aC0tO1xuXHRcdFx0XHRcdHJlbW92YWwgPSBjbC5leGVjKHR4dClbMF0ubGVuZ3RoO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGRlcHRoID4gMSAmJiBzYy50ZXN0KHR4dCkpIHtcblx0XHRcdFx0XHRkZXB0aC0tO1xuXHRcdFx0XHRcdHJlbW92YWwgPSBzYy5leGVjKHR4dClbMF0ubGVuZ3RoO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNiICYmIHNiLnRlc3QodHh0KSkge1xuXHRcdFx0XHRcdGRlcHRoKys7XG5cdFx0XHRcdFx0cmVtb3ZhbCA9IHNiLmV4ZWModHh0KVswXS5sZW5ndGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVtb3ZhbCB8fD0gMTtcblx0XHRcdFx0dHh0ID0gdHh0LnNsaWNlKE1hdGgubWF4KDAsIHJlbW92YWwpKTtcblx0XHRcdFx0aWYgKGRlcHRoID09PSAwKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQgKyAocmVwbCB8fCAnJykgKyB0eHQ7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0geFxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcHJlZml4XG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBzdWZmaXhcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHN0YXRpYyBtYWtlUmVnZXhwKHgsIHByZWZpeCwgc3VmZml4KSB7XG5cdFx0XHRwcmVmaXggfHw9ICcnO1xuXHRcdFx0c3VmZml4IHx8PSAnJztcblx0XHRcdGxldCByZVN0ciA9ICcnO1xuXHRcdFx0bGV0IGZsYWdzID0gJyc7XG5cdFx0XHRpZiAoaXNTdHJpbmcoeCkpIHtcblx0XHRcdFx0cmVTdHIgPSBwcmVmaXggKyBsaXRlcmFsaXplUmVnZXgoeCkgKyBzdWZmaXg7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHgpKSB7XG5cdFx0XHRcdGxldCBzID0geC50b1N0cmluZygpLnNsaWNlKDEpO1xuXHRcdFx0XHRjb25zdCBzcCA9IHMuc3BsaXQoJy8nKTtcblx0XHRcdFx0ZmxhZ3MgPSBzcC5hdCgtMSk7XG5cdFx0XHRcdHNwW3NwLmxlbmd0aCAtIDFdID0gJyc7XG5cdFx0XHRcdHMgPSBzcC5qb2luKCcvJyk7XG5cdFx0XHRcdHMgPSBzLnNsaWNlKDAsIE1hdGgubWF4KDAsIHMubGVuZ3RoIC0gMSkpO1xuXHRcdFx0XHRyZVN0ciA9IHByZWZpeCArIHMgKyBzdWZmaXg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2coJ21ha2VSZWdleHAgZmFpbGVkJyk7XG5cdFx0XHR9XG5cdFx0XHRsb2coYG1ha2VSZWdleHA6IGdvdCByZVN0cj0ke3JlU3RyfSwgZmxhZ3M9JHtmbGFnc31gKTtcblx0XHRcdHJldHVybiBuZXcgUmVnRXhwKHJlU3RyLCBmbGFncyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0a2lsbEJveFRlbXBsYXRlcygpIHtcblx0XHRcdC8vIHRheG9ib3ggcmVtb3ZhbC4uLiBpbiBmYWN0LCB0aGVyZSdzIGEgc2F1ZGlwcmluY2Vib3hfYmVnaW4sIHNvIGxldCdzIGJlIG1vcmUgZ2VuZXJhbFxuXHRcdFx0Ly8gYWxzbywgaGF2ZSBmbG9hdF9iZWdpbiwgLi4uIGZsb2F0X2VuZFxuXHRcdFx0dGhpcy5raWxsKC97e1teXFxze3x9XSo/KGZsb2F0fGJveClbIF9dKGJlZ2lufHN0YXJ0KS9pLCAvfX1cXHMqLywgJ3t7Jyk7XG5cdFx0XHQvLyBpbmZvYm94ZXMgZXRjXG5cdFx0XHQvLyBmcm9tIFp5eHc6IGtpbGwgZnJhbWVzIHRvb1xuXHRcdFx0dGhpcy5raWxsKC97e1teXFxze3x9XSo/KGluZm9ib3h8ZWxlbWVudGJveHxmcmFtZSlbIF9dL2ksIC99fVxccyovLCAne3snKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRraWxsVGVtcGxhdGVzKCkge1xuXHRcdFx0dGhpcy5raWxsKCd7eycsICd9fScsICd7JywgJ30nLCAnICcpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxUYWJsZXMoKSB7XG5cdFx0XHQvLyB0YWJsZXMgYXJlIGJhZCwgdG9vXG5cdFx0XHQvLyB0aGlzIGNhbiBiZSBzbG93LCBidXQgaXQncyBhbiBpbnByb3ZlbWVudCBvdmVyIGEgYnJvd3NlciBoYW5nXG5cdFx0XHQvLyB0b3J0dXJlIHRlc3Q6IFtbQ29tcGFyaXNvbl9vZl9JbnRlbF9DZW50cmFsX1Byb2Nlc3NpbmdfVW5pdHNdXVxuXHRcdFx0dGhpcy5raWxsKCd7fCcsIC9cXHx9XFxzKi8sICd7fCcpO1xuXHRcdFx0dGhpcy5raWxsKC88dGFibGUuKj8+L2ksIC88XFwvdGFibGUuKj8+L2ksIC88dGFibGUuKj8+L2kpO1xuXHRcdFx0Ly8gcmVtb3ZlIGxpbmVzIHN0YXJ0aW5nIHdpdGggYSBwaXBlIGZvciB0aGUgaGVsbCBvZiBpdCAoPylcblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKC9eXFx8LiokL2dtLCAnJyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0a2lsbEltYWdlcygpIHtcblx0XHRcdGNvbnN0IGZvcmJpZGRlbk5hbWVzcGFjZUFsaWFzZXMgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgW2xvY2FsaXplZE5hbWVzcGFjZUxjLCBuYW1lc3BhY2VJZF0gb2YgT2JqZWN0LmVudHJpZXMobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKSkpIHtcblx0XHRcdFx0aWYgKG5hbWVzcGFjZUlkICE9PSBwZy5uc0ltYWdlSWQgJiYgbmFtZXNwYWNlSWQgIT09IHBnLm5zQ2F0ZWdvcnlJZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JiaWRkZW5OYW1lc3BhY2VBbGlhc2VzLnB1c2gobG9jYWxpemVkTmFtZXNwYWNlTGMuc3BsaXQoJyAnKS5qb2luKCdbIF9dJykpOyAvLyB0b2RvOiBlc2NhcGUgcmVnZXhwIGZyYWdtZW50cyFcblx0XHRcdH1cblx0XHRcdC8vIGltYWdlcyBhbmQgY2F0ZWdvcmllcyBhcmUgYSBub25vXG5cdFx0XHR0aGlzLmtpbGwobmV3IFJlZ0V4cChgW1tdW1tdXFxcXHMqKCR7Zm9yYmlkZGVuTmFtZXNwYWNlQWxpYXNlcy5qb2luKCd8Jyl9KVxcXFxzKjpgLCAnaScpLCAvXV1cXHMqLywgJ1snLCAnXScpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxIVE1MKCkge1xuXHRcdFx0Ly8ga2lsbCA8cmVmIC4uLj4uLi48L3JlZj5cblx0XHRcdHRoaXMua2lsbCgvPHJlZlxcYlteLz5dKj8+L2ksIC88XFwvcmVmPi9pKTtcblx0XHRcdC8vIGxldCdzIGFsc28gZGVsZXRlIGVudGlyZSBsaW5lcyBzdGFydGluZyB3aXRoIDwuIGl0J3Mgd29ydGggYSB0cnkuXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvKF58XFxuKSAqPC4qL2csICdcXG4nKTtcblx0XHRcdC8vIGFuZCB0aG9zZSBwZXNreSBodG1sIHRhZ3MsIGJ1dCBub3Qgbm93aWtpIG9yIGJsb2NrcXVvdGUgdGFnc1xuXHRcdFx0Y29uc3Qgc3BsaXR0ZWQgPSB0aGlzLmRhdGEuc3BsaXQoLyg8W1xcV1xcd10qPyg/Oj58JHwoPz08KSkpLyk7XG5cdFx0XHRjb25zdCBsZW4gPSBzcGxpdHRlZC5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGxlbjsgaSArPSAyKSB7XG5cdFx0XHRcdHN3aXRjaCAoc3BsaXR0ZWRbaV0pIHtcblx0XHRcdFx0XHRjYXNlICc8bm8nLmNvbmNhdCgnd2lraScsICc+Jyk6XG5cdFx0XHRcdFx0Y2FzZSAnPC9ubycuY29uY2F0KCd3aWtpJywgJz4nKTpcblx0XHRcdFx0XHRjYXNlICc8YmxvY2snLmNvbmNhdCgncXVvdGUnLCAnPicpOlxuXHRcdFx0XHRcdGNhc2UgJzwvYmxvY2snLmNvbmNhdCgncXVvdGUnLCAnPicpOlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHNwbGl0dGVkW2ldID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZGF0YSA9IHNwbGl0dGVkLmpvaW4oJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxDaHVua3MoKSB7XG5cdFx0XHQvLyBoZXVyaXN0aWNzIGFsZXJ0XG5cdFx0XHQvLyBjaHVua3Mgb2YgaXRhbGljIHRleHQ/IHlvdSBjcmF6eSwgbWFuP1xuXHRcdFx0Y29uc3QgaXRhbGljQ2h1bmtSZWdleCA9IC8oKF58XFxuKVxccyo6KlxccyonJ1teJ10oW14nXXwnJyd8J1teJ10pezIwfSgufFxcblteXFxuXSkqJydbXFxzIS4/XSpcXG4pKy9nO1xuXHRcdFx0Ly8ga2VlcCBzdHVmZiBzZXBhcmF0ZWQsIHRob3VnaCwgc28gc3RpY2sgaW4gXFxuIChmaXhlcyBbW1VuaW9uIEphY2tdXT9cblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKGl0YWxpY0NodW5rUmVnZXgsICdcXG4nKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRtb3B1cCgpIHtcblx0XHRcdC8vIHdlIHNpbXBseSAqY2FuJ3QqIGJlIGRvaW5nIHdpdGggaG9yaXpvbnRhbCBydWxlcyByaWdodCBub3dcblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKC9eLXs0LH0vZ20sICcnKTtcblx0XHRcdC8vIG5vIGluZGVudGVkIGxpbmVzXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvKF58XFxuKSAqOlteXFxuXSovZywgJycpO1xuXHRcdFx0Ly8gcmVwbGFjZSBfX1RPQ19fLCBfX05PVE9DX18gYW5kIHdoYXRldmVyIGVsc2UgdGhlcmUgaXNcblx0XHRcdC8vIHRoaXMnbGwgcHJvYmFibHkgZG9cblx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZXBsYWNlKC9eX19bX2Etel0qX18gKiQvZ2ltLCAnJyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0Zmlyc3RCaXQoKSB7XG5cdFx0XHQvLyBkb250J3QgYmUgZ2l2aW4nIG1lIG5vIHN1YnNlcXVlbnQgcGFyYWdyYXBocywgeW91IGhlYXIgbWU/XG5cdFx0XHQvLyAvIGZpcnN0IHdlIFwibm9ybWFsaXplXCIgc2VjdGlvbiBoZWFkaW5ncywgcmVtb3Zpbmcgd2hpdGVzcGFjZSBhZnRlciwgYWRkaW5nIGJlZm9yZVxuXHRcdFx0bGV0IGQgPSB0aGlzLmRhdGE7XG5cdFx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBQcmV2aWV3Q3V0SGVhZGluZ3MnKSkge1xuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvXFxzKig9PStbXj1dKj09KylcXHMqL2csICdcXG5cXG4kMSAnKTtcblx0XHRcdFx0Ly8gLyB0aGVuIHdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBwYXJhZ3JhcGggYnJlYWtzIHdob3NlIHRleHQgZW5kcyBiYWRseVxuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvKFs6O10pICpcXG57Mix9L2csICckMVxcbicpO1xuXHRcdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvXlxccyovLCAnJyk7XG5cdFx0XHRcdGNvbnN0IHN0dWZmID0gL14oW15cXG5dfFxcblxcUykqLy5leGVjKHRoaXMuZGF0YSk7XG5cdFx0XHRcdGlmIChzdHVmZikge1xuXHRcdFx0XHRcdFtkXSA9IHN0dWZmO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghZ2V0VmFsdWVPZigncG9wdXBQcmV2aWV3Rmlyc3RQYXJPbmx5JykpIHtcblx0XHRcdFx0XHRkID0gdGhpcy5kYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIC8gbm93IHB1dCBcXG5cXG4gYWZ0ZXIgc2VjdGlvbnMgc28gdGhhdCBidWxsZXRzIGFuZCBudW1iZXJlZCBsaXN0cyB3b3JrXG5cdFx0XHRcdGQgPSBkLnJlcGxhY2UoLyg9PStbXj1dKj09KylcXHMqL2csICckMVxcblxcbicpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU3BsaXQgc2VudGVuY2VzLiBTdXBlcmZsdW91cyBzZW50ZW5jZXMgYXJlIFJJR0hUIE9VVC5cblx0XHRcdC8vIG5vdGU6IGV4YWN0bHkgMSBzZXQgb2YgcGFyZW5zIGhlcmUgbmVlZGVkIHRvIG1ha2UgdGhlIHNsaWNlIHdvcmtcblx0XHRcdGQgPSBkLnNwbGl0KC8oWyEuP10rW1wiJ10qXFxzKS9nKTtcblx0XHRcdC8vIGxlYWRpbmcgc3BhY2UgaXMgYmFkLCBtbWtheT9cblx0XHRcdGRbMF0gPSBkWzBdLnJlcGxhY2UoL15cXHMqLywgJycpO1xuXHRcdFx0Y29uc3Qgbm90U2VudGVuY2VFbmRzID0gLyhbXi5dW2Etel1cXC4gKlthLXpdfGV0Y3xzaWN8ZHJ8bXJ8bXJzfG1zfHN0fG5vfG9wfGNpdHxcXFtbXlxcXV0qfFxcc1thLXpdKSQvaTtcblx0XHRcdGQgPSB0aGlzLmZpeFNlbnRlbmNlRW5kcyhkLCBub3RTZW50ZW5jZUVuZHMpO1xuXHRcdFx0dGhpcy5mdWxsTGVuZ3RoID0gZC5qb2luKCcnKS5sZW5ndGg7XG5cdFx0XHRsZXQgbiA9IHRoaXMubWF4U2VudGVuY2VzO1xuXHRcdFx0bGV0IGRkID0gUHJldmlld21ha2VyLmZpcnN0U2VudGVuY2VzKGQsIG4pO1xuXHRcdFx0ZG8ge1xuXHRcdFx0XHRkZCA9IFByZXZpZXdtYWtlci5maXJzdFNlbnRlbmNlcyhkLCBuKTtcblx0XHRcdFx0LS1uO1xuXHRcdFx0fSB3aGlsZSAoZGQubGVuZ3RoID4gdGhpcy5tYXhDaGFyYWN0ZXJzICYmIG4gIT09IDApO1xuXHRcdFx0dGhpcy5kYXRhID0gZGQ7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJzXG5cdFx0ICogQHBhcmFtIHtSZWdFeHB9IHJlZ1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0Zml4U2VudGVuY2VFbmRzKHN0cnMsIHJlZykge1xuXHRcdFx0Ly8gdGFrZSBhbiBhcnJheSBvZiBzdHJpbmdzLCBzdHJzXG5cdFx0XHQvLyBqb2luIHN0cnNbaV0gdG8gc3Ryc1tpKzFdICYgc3Ryc1tpKzJdIGlmIHN0cnNbaV0gbWF0Y2hlcyByZWdleCByZWdcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3Rycy5sZW5ndGggLSAyOyArK2kpIHtcblx0XHRcdFx0aWYgKHJlZy50ZXN0KHN0cnNbaV0pKSB7XG5cdFx0XHRcdFx0Y29uc3QgYSA9IFtdO1xuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgc3Rycy5sZW5ndGg7ICsraikge1xuXHRcdFx0XHRcdFx0aWYgKGogPCBpKSB7XG5cdFx0XHRcdFx0XHRcdGFbal0gPSBzdHJzW2pdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGogPT09IGkpIHtcblx0XHRcdFx0XHRcdFx0YVtpXSA9IHN0cnNbaV0gKyBzdHJzW2kgKyAxXSArIHN0cnNbaSArIDJdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGogPiBpICsgMikge1xuXHRcdFx0XHRcdFx0XHRhW2ogLSAyXSA9IHN0cnNbal07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmZpeFNlbnRlbmNlRW5kcyhhLCByZWcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3Rycztcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmdbXX0gc3Ryc1xuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBob3dtYW55XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRzdGF0aWMgZmlyc3RTZW50ZW5jZXMoc3RycywgaG93bWFueSkge1xuXHRcdFx0Y29uc3QgdCA9IHN0cnMuc2xpY2UoMCwgMiAqIGhvd21hbnkpO1xuXHRcdFx0cmV0dXJuIHQuam9pbignJyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0a2lsbEJhZFdoaXRlc3BhY2UoKSB7XG5cdFx0XHQvLyBhbHNvIGNsZWFucyB1cCBpc29sYXRlZCAnJycnXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEucmVwbGFjZSgvXiAqJysgKiQvZ20sICcnKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUnVucyB0aGUgdmFyaW91cyBtZXRob2RzIHRvIGdlbmVyYXRlIHRoZSBwcmV2aWV3LlxuXHRcdCAqIFRoZSBwcmV2aWV3IGlzIHN0b3JlZCBpbiB0aGUgPGNvZGU+aHRtbDwvaHRtbD4gZmllbGQuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdG1ha2VQcmV2aWV3KCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLm93bmVyLmFydGljbGUubmFtZXNwYWNlSWQoKSAhPT0gcGcubnNUZW1wbGF0ZUlkICYmXG5cdFx0XHRcdHRoaXMub3duZXIuYXJ0aWNsZS5uYW1lc3BhY2VJZCgpICE9PSBwZy5uc0ltYWdlSWRcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmtpbGxDb21tZW50cygpO1xuXHRcdFx0XHR0aGlzLmtpbGxEaXZzKCk7XG5cdFx0XHRcdHRoaXMua2lsbEdhbGxlcmllcygpO1xuXHRcdFx0XHR0aGlzLmtpbGxCb3hUZW1wbGF0ZXMoKTtcblx0XHRcdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwUHJldmlld0tpbGxUZW1wbGF0ZXMnKSkge1xuXHRcdFx0XHRcdHRoaXMua2lsbFRlbXBsYXRlcygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMua2lsbE11bHRpbGluZVRlbXBsYXRlcygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMua2lsbFRhYmxlcygpO1xuXHRcdFx0XHR0aGlzLmtpbGxJbWFnZXMoKTtcblx0XHRcdFx0dGhpcy5raWxsSFRNTCgpO1xuXHRcdFx0XHR0aGlzLmtpbGxDaHVua3MoKTtcblx0XHRcdFx0dGhpcy5tb3B1cCgpO1xuXHRcdFx0XHR0aGlzLmZpcnN0Qml0KCk7XG5cdFx0XHRcdHRoaXMua2lsbEJhZFdoaXRlc3BhY2UoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMua2lsbEhUTUwoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaHRtbCA9IHdpa2kyaHRtbCh0aGlzLmRhdGEsIHRoaXMuYmFzZVVybCk7IC8vIG5lZWRzIGxpdmVwcmV2aWV3XG5cdFx0XHR0aGlzLmZpeEhUTUwoKTtcblx0XHRcdHRoaXMuc3RyaXBMb25nVGVtcGxhdGVzKCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRzdGF0aWMgZXNXaWtpMkh0bWxQYXJ0KGRhdGEpIHtcblx0XHRcdGNvbnN0IHJlTGlua3MgPSAvKD86XFxbXFxbKFteXFxdfF0qKSg/OlxcfChbXlxcXXxdKikpKl1dKFthLXpdKikpL2dpOyAvLyBtYXRjaCBhIHdpa2lsaW5rXG5cdFx0XHRyZUxpbmtzLmxhc3RJbmRleCA9IDA7IC8vIHJlc2V0IHJlZ2V4XG5cdFx0XHRsZXQgbWF0Y2g7XG5cdFx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0XHRsZXQgcG9zdGZpeEluZGV4ID0gMDtcblx0XHRcdHdoaWxlICgobWF0Y2ggPSByZUxpbmtzLmV4ZWMoZGF0YSkpICE9PSBudWxsKSB7XG5cdFx0XHRcdC8vIG1hdGNoIGFsbCB3aWtpbGlua3Ncblx0XHRcdFx0Ly8gRklYTUU6IHRoZSB3YXkgdGhhdCBsaW5rIGlzIGJ1aWx0IGhlcmUgaXNuJ3QgcGVyZmVjdC4gSXQgaXMgY2xpY2thYmxlLCBidXQgcG9wdXBzIHByZXZpZXcgd29uJ3QgcmVjb2duaXplIGl0IGluIHNvbWUgY2FzZXMuXG5cdFx0XHRcdHJlc3VsdCArPSBgJHtwZy5lc2NhcGVRdW90ZXNIVE1MKGRhdGEuc3Vic3RyaW5nKHBvc3RmaXhJbmRleCwgbWF0Y2guaW5kZXgpKX08YSBocmVmPVwiJHtcblx0XHRcdFx0XHRJbnN0YS5jb25mLnBhdGhzLmFydGljbGVzXG5cdFx0XHRcdH0ke3BnLmVzY2FwZVF1b3Rlc0hUTUwobWF0Y2hbMV0pfVwiPiR7cGcuZXNjYXBlUXVvdGVzSFRNTCgobWF0Y2hbMl0gPz8gbWF0Y2hbMV0pICsgbWF0Y2hbM10pfTwvYT5gO1xuXHRcdFx0XHRwb3N0Zml4SW5kZXggPSByZUxpbmtzLmxhc3RJbmRleDtcblx0XHRcdH1cblx0XHRcdC8vIGFwcGVuZCB0aGUgcmVzdFxuXHRcdFx0cmVzdWx0ICs9IHBnLmVzY2FwZVF1b3Rlc0hUTUwoZGF0YS5zbGljZShNYXRoLm1heCgwLCBwb3N0Zml4SW5kZXgpKSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0XHRlZGl0U3VtbWFyeVByZXZpZXcoKSB7XG5cdFx0XHRjb25zdCByZUFlcyA9IC9cXC9cXCogKiguKj8pICpcXCpcXC8vZzsgLy8gbWF0Y2ggdGhlIGZpcnN0IHNlY3Rpb24gbWFya2VyXG5cdFx0XHRyZUFlcy5sYXN0SW5kZXggPSAwOyAvLyByZXNldCByZWdleFxuXHRcdFx0Y29uc3QgbWF0Y2ggPSByZUFlcy5leGVjKHRoaXMuZGF0YSk7XG5cdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0Ly8gd2UgaGF2ZSBhIHNlY3Rpb24gbGluay4gU3BsaXQgaXQsIHByb2Nlc3MgaXQsIGNvbWJpbmUgaXQuXG5cdFx0XHRcdGNvbnN0IHByZWZpeCA9IHRoaXMuZGF0YS5zbGljZSgwLCBNYXRoLm1heCgwLCBtYXRjaC5pbmRleCAtIDEpKTtcblx0XHRcdFx0Y29uc3QgWywgc2VjdGlvbl0gPSBtYXRjaDtcblx0XHRcdFx0Y29uc3QgcG9zdGZpeCA9IHRoaXMuZGF0YS5zbGljZShNYXRoLm1heCgwLCByZUFlcy5sYXN0SW5kZXgpKTtcblx0XHRcdFx0bGV0IHN0YXJ0ID0gXCI8c3BhbiBjbGFzcz0nYXV0b2NvbW1lbnQnPlwiO1xuXHRcdFx0XHRsZXQgZW5kID0gJzwvc3Bhbj4nO1xuXHRcdFx0XHRpZiAocHJlZml4Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzdGFydCA9IGAke1ByZXZpZXdtYWtlci5lc1dpa2kySHRtbFBhcnQocHJlZml4KX0gJHtzdGFydH0tIGA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHBvc3RmaXgubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGVuZCA9IGA6ICR7ZW5kfSR7UHJldmlld21ha2VyLmVzV2lraTJIdG1sUGFydChwb3N0Zml4KX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHQgPSBuZXcgVGl0bGUoKS5mcm9tVVJMKHRoaXMuYmFzZVVybCk7XG5cdFx0XHRcdHQuYW5jaG9yRnJvbVV0ZihzZWN0aW9uKTtcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbkxpbmsgPSBgJHtcblx0XHRcdFx0XHRJbnN0YS5jb25mLnBhdGhzLmFydGljbGVzICsgcGcuZXNjYXBlUXVvdGVzSFRNTCh0LnRvU3RyaW5nKHRydWUpKVxuXHRcdFx0XHR9IyR7cGcuZXNjYXBlUXVvdGVzSFRNTCh0LmFuY2hvcil9YDtcblx0XHRcdFx0cmV0dXJuIGAke3N0YXJ0fTxhIGhyZWY9XCIke3NlY3Rpb25MaW5rfVwiPiZyYXJyOzwvYT4gJHtwZy5lc2NhcGVRdW90ZXNIVE1MKHNlY3Rpb24pfSR7ZW5kfWA7XG5cdFx0XHR9XG5cdFx0XHQvLyBlbHNlIHRoZXJlJ3Mgbm8gc2VjdGlvbiBsaW5rLCBodG1saWZ5IHRoZSB3aG9sZSB0aGluZy5cblx0XHRcdHJldHVybiBQcmV2aWV3bWFrZXIuZXNXaWtpMkh0bWxQYXJ0KHRoaXMuZGF0YSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFdvcmtzIGFyb3VuZCBsaXZlcHJldmlldyBidWdzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRmaXhIVE1MKCkge1xuXHRcdFx0aWYgKCF0aGlzLmh0bWwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHJldCA9IHRoaXMuaHRtbDtcblx0XHRcdC8vIGZpeCBxdWVzdGlvbiBtYXJrcyBpbiB3aWtpIGxpbmtzXG5cdFx0XHQvLyBtYXliZSB0aGlzJ2xsIGJyZWFrIHNvbWUgc3R1ZmYgOi0oXG5cdFx0XHRyZXQgPSByZXQucmVwbGFjZShuZXcgUmVnRXhwKGAoPGEgaHJlZj1cIiR7cGcud2lraS5hcnRpY2xlUGF0aH0vW15cIl0qKVs/XSguKj9cIilgLCAnZycpLCAnJDElM0YkMicpO1xuXHRcdFx0cmV0ID0gcmV0LnJlcGxhY2UobmV3IFJlZ0V4cChgKDxhIGhyZWY9JyR7cGcud2lraS5hcnRpY2xlUGF0aH0vW14nXSopWz9dKC4qPycpYCwgJ2cnKSwgJyQxJTNGJDInKTtcblx0XHRcdC8vIEZJWE1FIGZpeCB1cCAlIHRvb1xuXHRcdFx0dGhpcy5odG1sID0gcmV0O1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBHZW5lcmF0ZXMgdGhlIHByZXZpZXcgYW5kIGRpc3BsYXlzIGl0IGluIHRoZSBjdXJyZW50IHBvcHVwLlxuXHRcdCAqIERvZXMgbm90aGluZyBpZiB0aGUgZ2VuZXJhdGVkIHByZXZpZXcgaXMgaW52YWxpZCBvciBjb25zaXN0cyBvZiB3aGl0ZXNwYWNlIG9ubHkuXG5cdFx0ICogQWxzbyBhY3RpdmF0ZXMgd2lraWxpbmtzIGluIHRoZSBwcmV2aWV3IGZvciBzdWJwb3B1cHMgaWYgdGhlIHBvcHVwU3VicG9wdXBzIG9wdGlvbiBpcyB0cnVlLlxuXHRcdCAqL1xuXHRcdHNob3dQcmV2aWV3KCkge1xuXHRcdFx0dGhpcy5tYWtlUHJldmlldygpO1xuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLmh0bWwgIT09IHR5cGVvZiAnJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoL15cXHMqJC8udGVzdCh0aGlzLmh0bWwpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHNldFBvcHVwSFRNTCgnPGhyPicsICdwb3B1cFByZVByZXZpZXdTZXAnLCB0aGlzLm93bmVyLmlkTnVtYmVyKTtcblx0XHRcdHNldFBvcHVwVGlwc0FuZEhUTUwodGhpcy5odG1sLCAncG9wdXBQcmV2aWV3JywgdGhpcy5vd25lci5pZE51bWJlciwge1xuXHRcdFx0XHRvd25lcjogdGhpcy5vd25lcixcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbW9yZSA9IHRoaXMuZnVsbExlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGggPyB0aGlzLm1vcmVMaW5rKCkgOiAnJztcblx0XHRcdHNldFBvcHVwSFRNTChtb3JlLCAncG9wdXBQcmV2aWV3TW9yZScsIHRoaXMub3duZXIuaWROdW1iZXIpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdG1vcmVMaW5rKCkge1xuXHRcdFx0Y29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdGEuY2xhc3NOYW1lID0gJ3BvcHVwTW9yZUxpbmsnO1xuXHRcdFx0YS5pbm5lckhUTUwgPSBwb3B1cFN0cmluZygnbW9yZS4uLicpO1xuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHRhLm9uY2xpY2sgPSAoKSA9PiB7XG5cdFx0XHRcdHNlbGYubWF4Q2hhcmFjdGVycyArPSAyMDAwO1xuXHRcdFx0XHRzZWxmLm1heFNlbnRlbmNlcyArPSAyMDtcblx0XHRcdFx0c2VsZi5zZXREYXRhKCk7XG5cdFx0XHRcdHNlbGYuc2hvd1ByZXZpZXcoKTtcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRzdHJpcExvbmdUZW1wbGF0ZXMoKSB7XG5cdFx0XHQvLyBvcGVyYXRlcyBvbiB0aGUgSFRNTCFcblx0XHRcdHRoaXMuaHRtbCA9IHRoaXMuaHRtbC5yZXBsYWNlKC9eLnswLDEwMDB9e3tbXn1dKj8oPChwfGJyKSggXFwvKT8+XFxzKil7Mix9KFtee31dKj99fSk/L2dpLCAnJyk7XG5cdFx0XHR0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3BsaXQoJ1xcbicpLmpvaW4oJyAnKTsgLy8gd29ya2Fyb3VuZCBmb3IgPHByZT4gdGVtcGxhdGVzXG5cdFx0XHR0aGlzLmh0bWwgPSB0aGlzLmh0bWwucmVwbGFjZSgve3tbXn1dKjxwcmU+W159XSp9fS9naSwgJycpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGtpbGxNdWx0aWxpbmVUZW1wbGF0ZXMoKSB7XG5cdFx0XHR0aGlzLmtpbGwoJ3t7eycsICd9fX0nKTtcblx0XHRcdHRoaXMua2lsbCgvXFxzKnt7W157fV0qXFxuLywgJ319JywgJ3t7Jyk7XG5cdFx0fVxuXHR9XG5cdC8vIEVOREZJTEU6IHByZXZpZXdtYWtlci5qc1xuXHQvLyBTVEFSVEZJTEU6IHF1ZXJ5cHJldmlldy5qc1xuXHRjb25zdCBsb2FkQVBJUHJldmlldyA9IChxdWVyeVR5cGUsIGFydGljbGUsIG5hdnBvcCkgPT4ge1xuXHRcdGNvbnN0IGFydCA9IG5ldyBUaXRsZShhcnRpY2xlKS51cmxTdHJpbmcoKTtcblx0XHRsZXQgdXJsID0gYCR7cGcud2lraS5hcGl3aWtpYmFzZX0/Zm9ybWF0PWpzb24mZm9ybWF0dmVyc2lvbj0yJmFjdGlvbj1xdWVyeSZgO1xuXHRcdGxldCBodG1sR2VuZXJhdG9yID0gKCkgPT4gLyogYSwgZCAqLyB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSgnaW52YWxpZCBodG1sIGdlbmVyYXRvcicsIHt0YWc6ICdwb3B1cHMnLCB0eXBlOiAnZXJyb3InfSk7XG5cdFx0fTtcblx0XHRsZXQgdXNlcm5hbWVhcnQgPSAnJztcblx0XHRzd2l0Y2ggKHF1ZXJ5VHlwZSkge1xuXHRcdFx0Y2FzZSAnaGlzdG9yeSc6XG5cdFx0XHRcdHVybCArPSBgdGl0bGVzPSR7YXJ0fSZwcm9wPXJldmlzaW9ucyZydmxpbWl0PSR7Z2V0VmFsdWVPZigncG9wdXBIaXN0b3J5UHJldmlld0xpbWl0Jyl9YDtcblx0XHRcdFx0aHRtbEdlbmVyYXRvciA9IEFQSWhpc3RvcnlQcmV2aWV3SFRNTDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdjYXRlZ29yeSc6XG5cdFx0XHRcdHVybCArPSBgbGlzdD1jYXRlZ29yeW1lbWJlcnMmY210aXRsZT0ke2FydH1gO1xuXHRcdFx0XHRodG1sR2VuZXJhdG9yID0gQVBJY2F0ZWdvcnlQcmV2aWV3SFRNTDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd1c2VyaW5mbyc6IHtcblx0XHRcdFx0Y29uc3QgdXNlcm5hbWUgPSBuZXcgVGl0bGUoYXJ0aWNsZSkudXNlck5hbWUoKTtcblx0XHRcdFx0dXNlcm5hbWVhcnQgPSBlbmNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpO1xuXHRcdFx0XHR1cmwgKz0gcGcucmUuaXBVc2VyLnRlc3QodXNlcm5hbWUpXG5cdFx0XHRcdFx0PyBgbGlzdD1ibG9ja3MmYmtwcm9wPXJhbmdlfHJlc3RyaWN0aW9ucyZia2lwPSR7dXNlcm5hbWVhcnR9YFxuXHRcdFx0XHRcdDogYGxpc3Q9dXNlcnN8dXNlcmNvbnRyaWJzJnVzcHJvcD1ibG9ja2luZm98Z3JvdXBzfGVkaXRjb3VudHxyZWdpc3RyYXRpb258Z2VuZGVyJnVzdXNlcnM9JHt1c2VybmFtZWFydH0mbWV0YT1nbG9iYWx1c2VyaW5mbyZndWlwcm9wPWdyb3Vwc3x1bmF0dGFjaGVkJmd1aXVzZXI9JHt1c2VybmFtZWFydH0mdWNsaW1pdD0xJnVjcHJvcD10aW1lc3RhbXAmdWN1c2VyPSR7dXNlcm5hbWVhcnR9YDtcblx0XHRcdFx0aHRtbEdlbmVyYXRvciA9IEFQSXVzZXJJbmZvUHJldmlld0hUTUw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnY29udHJpYnMnOlxuXHRcdFx0XHR1c2VybmFtZWFydCA9IGVuY29kZVVSSUNvbXBvbmVudChuZXcgVGl0bGUoYXJ0aWNsZSkudXNlck5hbWUoKSk7XG5cdFx0XHRcdHVybCArPSBgbGlzdD11c2VyY29udHJpYnMmdWN1c2VyPSR7dXNlcm5hbWVhcnR9JnVjbGltaXQ9JHtnZXRWYWx1ZU9mKCdwb3B1cENvbnRyaWJzUHJldmlld0xpbWl0Jyl9YDtcblx0XHRcdFx0aHRtbEdlbmVyYXRvciA9IEFQSWNvbnRyaWJzUHJldmlld0hUTUw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnaW1hZ2VwYWdlcHJldmlldyc6IHtcblx0XHRcdFx0bGV0IHRyYWlsID0gJyc7XG5cdFx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cEltYWdlTGlua3MnKSkge1xuXHRcdFx0XHRcdHRyYWlsID0gYCZsaXN0PWltYWdldXNhZ2UmaXV0aXRsZT0ke2FydH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHVybCArPSBgdGl0bGVzPSR7YXJ0fSZwcm9wPXJldmlzaW9uc3xpbWFnZWluZm8mcnZwcm9wPWNvbnRlbnQke3RyYWlsfWA7XG5cdFx0XHRcdGh0bWxHZW5lcmF0b3IgPSBBUElpbWFnZXBhZ2VQcmV2aWV3SFRNTDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlICdiYWNrbGlua3MnOlxuXHRcdFx0XHR1cmwgKz0gYGxpc3Q9YmFja2xpbmtzJmJsdGl0bGU9JHthcnR9YDtcblx0XHRcdFx0aHRtbEdlbmVyYXRvciA9IEFQSWJhY2tsaW5rc1ByZXZpZXdIVE1MO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JldmlzaW9uJzpcblx0XHRcdFx0dXJsICs9IGFydGljbGUub2xkaWQgPyBgcmV2aWRzPSR7YXJ0aWNsZS5vbGRpZH1gIDogYHRpdGxlcz0ke2FydGljbGUucmVtb3ZlQW5jaG9yKCkudXJsU3RyaW5nKCl9YDtcblx0XHRcdFx0dXJsICs9XG5cdFx0XHRcdFx0JyZwcm9wPXJldmlzaW9uc3xwYWdlcHJvcHN8aW5mb3xpbWFnZXN8Y2F0ZWdvcmllcyZydnByb3A9aWRzfHRpbWVzdGFtcHxmbGFnc3xjb21tZW50fHVzZXJ8Y29udGVudCZjbGxpbWl0PW1heCZpbWxpbWl0PW1heCc7XG5cdFx0XHRcdGh0bWxHZW5lcmF0b3IgPSBBUElyZXZpc2lvblByZXZpZXdIVE1MO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cGVuZGluZ05hdnBvcFRhc2sobmF2cG9wKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IChkKSA9PiB7XG5cdFx0XHRsb2coJ2NhbGxiYWNrIG9mIEFQSSBmdW5jdGlvbnMgd2FzIGhpdCcpO1xuXHRcdFx0aWYgKHF1ZXJ5VHlwZSA9PT0gJ3VzZXJpbmZvJykge1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGRvIGFub3RoZXIgQVBJIHJlcXVlc3Rcblx0XHRcdFx0ZmV0Y2hVc2VyR3JvdXBOYW1lcyhkLmRhdGEpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdHNob3dBUElQcmV2aWV3KHF1ZXJ5VHlwZSwgaHRtbEdlbmVyYXRvcihhcnRpY2xlLCBkLCBuYXZwb3ApLCBuYXZwb3AuaWROdW1iZXIsIG5hdnBvcCwgZCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRzaG93QVBJUHJldmlldyhxdWVyeVR5cGUsIGh0bWxHZW5lcmF0b3IoYXJ0aWNsZSwgZCwgbmF2cG9wKSwgbmF2cG9wLmlkTnVtYmVyLCBuYXZwb3AsIGQpO1xuXHRcdH07XG5cdFx0Y29uc3QgZ28gPSAoKSA9PiB7XG5cdFx0XHRnZXRQYWdlV2l0aENhY2hpbmcodXJsLCBjYWxsYmFjaywgbmF2cG9wKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0aWYgKG5hdnBvcC52aXNpYmxlIHx8ICFnZXRWYWx1ZU9mKCdwb3B1cExhenlEb3dubG9hZHMnKSkge1xuXHRcdFx0Z28oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmF2cG9wLmFkZEhvb2soZ28sICd1bmhpZGUnLCAnYmVmb3JlJywgYERPV05MT0FEXyR7cXVlcnlUeXBlfV9RVUVSWV9EQVRBYCk7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBsaW5rTGlzdCA9IChsaXN0KSA9PiB7XG5cdFx0bGlzdC5zb3J0KCh4LCB5KSA9PiB7XG5cdFx0XHRyZXR1cm4geCA9PT0geSA/IDAgOiB4IDwgeSA/IC0xIDogMTtcblx0XHR9KTtcblx0XHRjb25zdCBidWYgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGlzdCkge1xuXHRcdFx0YnVmLnB1c2goXG5cdFx0XHRcdHdpa2lMaW5rKHtcblx0XHRcdFx0XHRhcnRpY2xlOiBuZXcgVGl0bGUoZWxlbWVudCksXG5cdFx0XHRcdFx0dGV4dDogZWxlbWVudC5zcGxpdCgnICcpLmpvaW4oJyZuYnNwOycpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ3ZpZXcnLFxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGJ1Zi5qb2luKCcsICcpO1xuXHR9O1xuXHRjb25zdCBnZXRUaW1lT2Zmc2V0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IHR6ID0gbXcudXNlci5vcHRpb25zLmdldCgndGltZWNvcnJlY3Rpb24nKTtcblx0XHRpZiAodHogJiYgdHouaW5jbHVkZXMoJ3wnKSkge1xuXHRcdFx0Ly8gTmV3IGZvcm1hdFxuXHRcdFx0cmV0dXJuIE51bWJlci5wYXJzZUludCh0ei5zcGxpdCgnfCcpWzFdLCAxMCk7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9O1xuXHRjb25zdCBnZXRUaW1lWm9uZSA9ICgpID0+IHtcblx0XHRpZiAoIXBnLnVzZXIudGltZVpvbmUpIHtcblx0XHRcdGNvbnN0IHR6ID0gbXcudXNlci5vcHRpb25zLmdldCgndGltZWNvcnJlY3Rpb24nKTtcblx0XHRcdHBnLnVzZXIudGltZVpvbmUgPSAnVVRDJztcblx0XHRcdGlmICh0eikge1xuXHRcdFx0XHRjb25zdCB0ekNvbXBvbmVudHMgPSB0ei5zcGxpdCgnfCcpO1xuXHRcdFx0XHRpZiAodHpDb21wb25lbnRzLmxlbmd0aCA9PT0gMyAmJiB0ekNvbXBvbmVudHNbMF0gPT09ICdab25lSW5mbycpIHtcblx0XHRcdFx0XHRbLCAsIHBnLnVzZXIudGltZVpvbmVdID0gdHpDb21wb25lbnRzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVycmxvZyhgVW5leHBlY3RlZCB0aW1lem9uZSBpbmZvcm1hdGlvbjogJHt0en1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcGcudXNlci50aW1lWm9uZTtcblx0fTtcblx0LyoqXG5cdCAqIFNob3VsZCB3ZSB1c2UgYW4gb2Zmc2V0IG9yIGNhbiB3ZSB1c2UgcHJvcGVyIHRpbWV6b25lc1xuXHQgKi9cblx0Y29uc3QgdXNlVGltZU9mZnNldCA9ICgpID0+IHtcblx0XHRpZiAoSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0VG9QYXJ0cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJRSAxMVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IHR6ID0gbXcudXNlci5vcHRpb25zLmdldCgndGltZWNvcnJlY3Rpb24nKTtcblx0XHRpZiAodHogJiYgIXR6LmluY2x1ZGVzKCdab25lSW5mb3wnKSkge1xuXHRcdFx0Ly8gU3lzdGVtfCBEZWZhdWx0IHN5c3RlbSB0aW1lLCBkZWZhdWx0IGZvciB1c2VycyB3aG8gZGlkbid0IGNvbmZpZ3VyZSB0aW1lem9uZVxuXHRcdFx0Ly8gT2Zmc2V0fCBNYW51YWwgZGVmaW5lZCBvZmZzZXQgYnkgdXNlclxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGxvY2FsZXMgZm9yIHRoZSBwdXJwb3NlIG9mIGphdmFzY3JpcHQgbG9jYWxlIGJhc2VkIGZvcm1hdHRpbmdcblx0ICogRmlsdGVycyBkb3duIHRvIHRob3NlIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci4gRW1wdHkgW10gPT09IFN5c3RlbSdzIGRlZmF1bHQgbG9jYWxlXG5cdCAqL1xuXHRjb25zdCBnZXRMb2NhbGVzID0gKCkgPT4ge1xuXHRcdGlmICghcGcudXNlci5sb2NhbGVzKSB7XG5cdFx0XHRsZXQgdXNlckxhbmd1YWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLmdldEF0dHJpYnV0ZSgnbGFuZycpOyAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBIVE1MIGxvY2FsZVxuXHRcdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwTG9jYWxlJykpIHtcblx0XHRcdFx0dXNlckxhbmd1YWdlID0gZ2V0VmFsdWVPZigncG9wdXBMb2NhbGUnKTtcblx0XHRcdH0gZWxzZSBpZiAodXNlckxhbmd1YWdlID09PSAnZW4nKSB7XG5cdFx0XHRcdC8vIGVuLndwIHRlbmRzIHRvIHRyZWF0IHRoaXMgYXMgaW50ZXJuYXRpb25hbCBlbmdsaXNoIC8gdW5zcGVjaWZpZWRcblx0XHRcdFx0Ly8gYnV0IHdlIGhhdmUgbW9yZSBzcGVjaWZpYyBzZXR0aW5ncyBpbiB1c2VyIG9wdGlvbnNcblx0XHRcdFx0dXNlckxhbmd1YWdlID0gZ2V0TVdEYXRlRm9ybWF0KCkgPT09ICdtZHknID8gJ2VuLVVTJyA6ICdlbi1HQic7XG5cdFx0XHR9XG5cdFx0XHRwZy51c2VyLmxvY2FsZXMgPSBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbdXNlckxhbmd1YWdlLCBuYXZpZ2F0b3IubGFuZ3VhZ2VdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBnLnVzZXIubG9jYWxlcztcblx0fTtcblx0LyoqXG5cdCAqIFJldHJpZXZlIGNvbmZpZ3VyZWQgTVcgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgdXNlclxuXHQgKiBUaGVzZSBjYW4gYmVcblx0ICogZGVmYXVsdFxuXHQgKiBkbXk6IHRpbWUsIGRteVxuXHQgKiBtZHk6IHRpbWUsIG1keVxuXHQgKiB5bWQ6IHRpbWUsIHltZFxuXHQgKiBkbXl0OiBkbXksIHRpbWVcblx0ICogZG15dHM6IGRteSwgdGltZSArIHNlY29uZHNcblx0ICogSVNPIDg2MDE6IFlZWVktTU0tRERUaGg6bW06c3MgKGxvY2FsIHRpbWUpXG5cdCAqXG5cdCAqIFRoaXMgaXNuJ3QgdG9vIHVzZWZ1bCBmb3IgdXMsIGFzIEpTIGRvZXNuJ3QgaGF2ZSBmb3JtYXR0ZXJzIHRvIG1hdGNoIHRoZXNlIHByaXZhdGUgc3BlY2lmaWVyc1xuXHQgKi9cblx0Y29uc3QgZ2V0TVdEYXRlRm9ybWF0ID0gKCkgPT4ge1xuXHRcdHJldHVybiBtdy51c2VyLm9wdGlvbnMuZ2V0KCdkYXRlJyk7XG5cdH07XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgSFRNTCB0YWJsZSB0aGF0J3Mgc2hvd24gaW4gdGhlIGhpc3RvcnkgYW5kIHVzZXItY29udHJpYnMgcG9wdXBzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWNsZVxuXHQgKiBAcGFyYW0ge09iamVjdFtdfSBoIC0gYSBsaXN0IG9mIHJldmlzaW9ucywgcmV0dXJuZWQgZnJvbSB0aGUgQVBJXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhbGx5Q29udHJpYnMgLSB0cnVlIG9ubHkgaWYgd2UncmUgZGlzcGxheWluZyB1c2VyIGNvbnRyaWJ1dGlvbnNcblx0ICovXG5cdGNvbnN0IGVkaXRQcmV2aWV3VGFibGUgPSAoYXJ0aWNsZSwgaCwgcmVhbGx5Q29udHJpYnMpID0+IHtcblx0XHRsZXQgaHRtbCA9IFsnPHRhYmxlPiddO1xuXHRcdGxldCBkYXk7XG5cdFx0bGV0IGN1cmFydCA9IGFydGljbGU7XG5cdFx0bGV0IHBhZ2U7XG5cdFx0bGV0IG1ha2VGaXJzdENvbHVtbkxpbmtzO1xuXHRcdGlmIChyZWFsbHlDb250cmlicykge1xuXHRcdFx0Ly8gV2UncmUgc2hvd2luZyB1c2VyIGNvbnRyaWJ1dGlvbnMsIHNvIG1ha2UgKGRpZmYgfCBoaXN0KSBsaW5rc1xuXHRcdFx0bWFrZUZpcnN0Q29sdW1uTGlua3MgPSAoY3VycmVudFJldmlzaW9uKSA9PiB7XG5cdFx0XHRcdGxldCByZXN1bHQgPSAnKCc7XG5cdFx0XHRcdHJlc3VsdCArPVxuXHRcdFx0XHRcdGA8YSBocmVmPVwiJHtwZy53aWtpLnRpdGxlYmFzZX0ke25ldyBUaXRsZShjdXJyZW50UmV2aXNpb24udGl0bGUpLnVybFN0cmluZygpfSZkaWZmPXByZXZgICtcblx0XHRcdFx0XHRgJm9sZGlkPSR7Y3VycmVudFJldmlzaW9uLnJldmlkfVwiPiR7cG9wdXBTdHJpbmcoJ2RpZmYnKX08L2E+YDtcblx0XHRcdFx0cmVzdWx0ICs9ICcmbmJzcDt8Jm5ic3A7Jztcblx0XHRcdFx0cmVzdWx0ICs9IGA8YSBocmVmPVwiJHtwZy53aWtpLnRpdGxlYmFzZX0ke25ldyBUaXRsZShcblx0XHRcdFx0XHRjdXJyZW50UmV2aXNpb24udGl0bGVcblx0XHRcdFx0KS51cmxTdHJpbmcoKX0mYWN0aW9uPWhpc3RvcnlcIj4ke3BvcHVwU3RyaW5nKCdoaXN0Jyl9PC9hPmA7XG5cdFx0XHRcdHJlc3VsdCArPSAnKSc7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJdCdzIGEgcmVndWxhciBoaXN0b3J5IHBhZ2UsIHNvIG1ha2UgKGN1ciB8IGxhc3QpIGxpbmtzXG5cdFx0XHRjb25zdCBmaXJzdFJldmlkID0gaFswXS5yZXZpZDtcblx0XHRcdG1ha2VGaXJzdENvbHVtbkxpbmtzID0gKGN1cnJlbnRSZXZpc2lvbikgPT4ge1xuXHRcdFx0XHRsZXQgcmVzdWx0ID0gJygnO1xuXHRcdFx0XHRyZXN1bHQgKz0gYDxhIGhyZWY9XCIke3BnLndpa2kudGl0bGViYXNlfSR7bmV3IFRpdGxlKGN1cmFydCkudXJsU3RyaW5nKCl9JmRpZmY9JHtmaXJzdFJldmlkfSZvbGRpZD0ke1xuXHRcdFx0XHRcdGN1cnJlbnRSZXZpc2lvbi5yZXZpZFxuXHRcdFx0XHR9XCI+JHtwb3B1cFN0cmluZygnY3VyJyl9PC9hPmA7XG5cdFx0XHRcdHJlc3VsdCArPSAnJm5ic3A7fCZuYnNwOyc7XG5cdFx0XHRcdHJlc3VsdCArPSBgPGEgaHJlZj1cIiR7cGcud2lraS50aXRsZWJhc2V9JHtuZXcgVGl0bGUoY3VyYXJ0KS51cmxTdHJpbmcoKX0mZGlmZj1wcmV2Jm9sZGlkPSR7XG5cdFx0XHRcdFx0Y3VycmVudFJldmlzaW9uLnJldmlkXG5cdFx0XHRcdH1cIj4ke3BvcHVwU3RyaW5nKCdsYXN0Jyl9PC9hPmA7XG5cdFx0XHRcdHJlc3VsdCArPSAnKSc7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IFtpLCBlbGVtZW50XSBvZiBoLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKHJlYWxseUNvbnRyaWJzKSB7XG5cdFx0XHRcdHBhZ2UgPSBlbGVtZW50LnRpdGxlO1xuXHRcdFx0XHRjdXJhcnQgPSBuZXcgVGl0bGUocGFnZSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtaW5vciA9IGVsZW1lbnQubWlub3IgPyAnPGI+bSA8L2I+JyA6ICcnO1xuXHRcdFx0Y29uc3QgZWRpdERhdGUgPSBuZXcgRGF0ZShlbGVtZW50LnRpbWVzdGFtcCk7XG5cdFx0XHRsZXQgdGhpc0RheSA9IGZvcm1hdHRlZERhdGUoZWRpdERhdGUpO1xuXHRcdFx0Y29uc3QgdGhpc1RpbWUgPSBmb3JtYXR0ZWRUaW1lKGVkaXREYXRlKTtcblx0XHRcdGlmICh0aGlzRGF5ID09PSBkYXkpIHtcblx0XHRcdFx0dGhpc0RheSA9ICcnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF5ID0gdGhpc0RheTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzRGF5KSB7XG5cdFx0XHRcdGh0bWwucHVzaChgPHRyPjx0ZCBjb2xzcGFuPTM+PHNwYW4gY2xhc3M9XCJwb3B1cF9oaXN0b3J5X2RhdGVcIj4ke3RoaXNEYXl9PC9zcGFuPjwvdGQ+PC90cj5gKTtcblx0XHRcdH1cblx0XHRcdGh0bWwucHVzaChcblx0XHRcdFx0YDx0ciBjbGFzcz1cInBvcHVwX2hpc3Rvcnlfcm93XyR7aSAlIDIgPyAnb2RkJyA6ICdldmVuJ31cIj5gLFxuXHRcdFx0XHRgPHRkPiR7bWFrZUZpcnN0Q29sdW1uTGlua3MoZWxlbWVudCl9PC90ZD5gLFxuXHRcdFx0XHQnPHRkPicgK1xuXHRcdFx0XHRcdGA8YSBocmVmPVwiJHtwZy53aWtpLnRpdGxlYmFzZX0ke25ldyBUaXRsZShjdXJhcnQpLnVybFN0cmluZygpfSZvbGRpZD0ke1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5yZXZpZFxuXHRcdFx0XHRcdH1cIj4ke3RoaXNUaW1lfTwvYT48L3RkPmBcblx0XHRcdCk7XG5cdFx0XHRsZXQgY29sM3VybCA9ICcnO1xuXHRcdFx0bGV0IGNvbDN0eHQgPSAnJztcblx0XHRcdGlmIChyZWFsbHlDb250cmlicykge1xuXHRcdFx0XHRjb2wzdXJsID0gcGcud2lraS50aXRsZWJhc2UgKyBjdXJhcnQudXJsU3RyaW5nKCk7XG5cdFx0XHRcdGNvbDN0eHQgPSBwZy5lc2NhcGVRdW90ZXNIVE1MKHBhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qge3VzZXJ9ID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKGVsZW1lbnQudXNlcmhpZGRlbikge1xuXHRcdFx0XHRcdGNvbDN1cmwgPSBnZXRWYWx1ZU9mKCdwb3B1cFJldkRlbFVybCcpO1xuXHRcdFx0XHRcdGNvbDN0eHQgPSBwZy5lc2NhcGVRdW90ZXNIVE1MKHBvcHVwU3RyaW5nKCdyZXZkZWwnKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29sM3VybCA9IHBnLnJlLmlwVXNlci50ZXN0KHVzZXIpXG5cdFx0XHRcdFx0XHQ/IGAke1xuXHRcdFx0XHRcdFx0XHRcdHBnLndpa2kudGl0bGViYXNlICsgbXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbcGcubnNTcGVjaWFsSWRdXG5cdFx0XHRcdFx0XHRcdH06Q29udHJpYnV0aW9ucyZ0YXJnZXQ9JHtuZXcgVGl0bGUodXNlcikudXJsU3RyaW5nKCl9YFxuXHRcdFx0XHRcdFx0OiBgJHtwZy53aWtpLnRpdGxlYmFzZSArIG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3BnLm5zVXNlcklkXX06JHtuZXcgVGl0bGUoXG5cdFx0XHRcdFx0XHRcdFx0dXNlclxuXHRcdFx0XHRcdFx0XHQpLnVybFN0cmluZygpfWA7XG5cdFx0XHRcdFx0Y29sM3R4dCA9IHBnLmVzY2FwZVF1b3Rlc0hUTUwodXNlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGh0bWwucHVzaChgPHRkPiR7cmVhbGx5Q29udHJpYnMgPyBtaW5vciA6ICcnfTxhIGhyZWY9XCIke2NvbDN1cmx9XCI+JHtjb2wzdHh0fTwvYT48L3RkPmApO1xuXHRcdFx0bGV0IGNvbW1lbnQgPSAnJztcblx0XHRcdGNvbnN0IGMgPSBlbGVtZW50LmNvbW1lbnQgfHwgZWxlbWVudC5jb250ZW50O1xuXHRcdFx0aWYgKGMpIHtcblx0XHRcdFx0Y29tbWVudCA9IG5ldyBQcmV2aWV3bWFrZXIoYywgbmV3IFRpdGxlKGN1cmFydCkudG9VcmwoKSkuZWRpdFN1bW1hcnlQcmV2aWV3KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuY29tbWVudGhpZGRlbikge1xuXHRcdFx0XHRjb21tZW50ID0gcG9wdXBTdHJpbmcoJ3JldmRlbCcpO1xuXHRcdFx0fVxuXHRcdFx0aHRtbC5wdXNoKGA8dGQ+JHtyZWFsbHlDb250cmlicyA/ICcnIDogbWlub3J9JHtjb21tZW50fTwvdGQ+YCwgJzwvdHI+Jyk7XG5cdFx0XHRodG1sID0gW2h0bWwuam9pbignJyldO1xuXHRcdH1cblx0XHRodG1sLnB1c2goJzwvdGFibGU+Jyk7XG5cdFx0cmV0dXJuIGh0bWwuam9pbignJyk7XG5cdH07XG5cdGNvbnN0IGFkanVzdERhdGUgPSAoZCwgb2Zmc2V0KSA9PiB7XG5cdFx0Ly8gb2Zmc2V0IGlzIGluIG1pbnV0ZXNcblx0XHRjb25zdCBvID0gb2Zmc2V0ICogNjAgKiAxMDAwO1xuXHRcdHJldHVybiBuZXcgRGF0ZSgrZCArIG8pO1xuXHR9O1xuXHQvKipcblx0ICogVGhpcyByZWxpZXMgb24gdGhlIERhdGUgcGFyc2VyIHVuZGVyc3RhbmRpbmcgZW4tVVMgZGF0ZXMsXG5cdCAqIHdoaWNoIGlzIHByZXR0eSBzYWZlIGFzc3VtcHRpb24sIGJ1dCBub3QgcGVyZmVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtEYXRlfSBkYXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lWm9uZVxuXHQgKi9cblx0Y29uc3QgY29udmVydFRpbWVab25lID0gKGRhdGUsIHRpbWVab25lKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge3RpbWVab25lfSkpO1xuXHR9O1xuXHRjb25zdCBmb3JtYXR0ZWREYXRlVGltZSA9IChkYXRlKSA9PiB7XG5cdFx0Ly8gZmFsbGJhY2sgZm9yIElFMTEgYW5kIHVua25vd24gdGltZXpvbmVzXG5cdFx0aWYgKHVzZVRpbWVPZmZzZXQoKSkge1xuXHRcdFx0cmV0dXJuIGAke2Zvcm1hdHRlZERhdGUoZGF0ZSl9ICR7Zm9ybWF0dGVkVGltZShkYXRlKX1gO1xuXHRcdH1cblx0XHRpZiAoZ2V0TVdEYXRlRm9ybWF0KCkgPT09ICdJU08gODYwMScpIHtcblx0XHRcdGNvbnN0IGQyID0gY29udmVydFRpbWVab25lKGRhdGUsIGdldFRpbWVab25lKCkpO1xuXHRcdFx0cmV0dXJuIGAke21hcCh6ZXJvRmlsbCwgW2QyLmdldEZ1bGxZZWFyKCksIGQyLmdldE1vbnRoKCkgKyAxLCBkMi5nZXREYXRlKCldKS5qb2luKCctJyl9VCR7bWFwKHplcm9GaWxsLCBbXG5cdFx0XHRcdGQyLmdldEhvdXJzKCksXG5cdFx0XHRcdGQyLmdldE1pbnV0ZXMoKSxcblx0XHRcdFx0ZDIuZ2V0U2Vjb25kcygpLFxuXHRcdFx0XSkuam9pbignOicpfWA7XG5cdFx0fVxuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXRWYWx1ZU9mKCdwb3B1cERhdGVUaW1lRm9ybWF0dGVyT3B0aW9ucycpO1xuXHRcdG9wdGlvbnMudGltZVpvbmUgPSBnZXRUaW1lWm9uZSgpO1xuXHRcdHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKGdldExvY2FsZXMoKSwgb3B0aW9ucyk7XG5cdH07XG5cdGNvbnN0IGZvcm1hdHRlZERhdGUgPSAoZGF0ZSkgPT4ge1xuXHRcdGxldCBkMjtcblx0XHQvLyBmYWxsYmFjayBmb3IgSUUxMSBhbmQgdW5rbm93biB0aW1lem9uZXNcblx0XHRpZiAodXNlVGltZU9mZnNldCgpKSB7XG5cdFx0XHQvLyB3ZSBhZGp1c3QgdGhlIFVUQyB0aW1lLCBzbyB3ZSBwcmludCB0aGUgYWRqdXN0ZWQgVVRDLCBidXQgbm90IHJlYWxseSBVVEMgdmFsdWVzXG5cdFx0XHRkMiA9IGFkanVzdERhdGUoZGF0ZSwgZ2V0VGltZU9mZnNldCgpKTtcblx0XHRcdHJldHVybiBtYXAoemVyb0ZpbGwsIFtkMi5nZXRVVENGdWxsWWVhcigpLCBkMi5nZXRVVENNb250aCgpICsgMSwgZDIuZ2V0VVRDRGF0ZSgpXSkuam9pbignLScpO1xuXHRcdH1cblx0XHRpZiAoZ2V0TVdEYXRlRm9ybWF0KCkgPT09ICdJU08gODYwMScpIHtcblx0XHRcdGQyID0gY29udmVydFRpbWVab25lKGRhdGUsIGdldFRpbWVab25lKCkpO1xuXHRcdFx0cmV0dXJuIG1hcCh6ZXJvRmlsbCwgW2QyLmdldEZ1bGxZZWFyKCksIGQyLmdldE1vbnRoKCkgKyAxLCBkMi5nZXREYXRlKCldKS5qb2luKCctJyk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXRWYWx1ZU9mKCdwb3B1cERhdGVGb3JtYXR0ZXJPcHRpb25zJyk7XG5cdFx0b3B0aW9ucy50aW1lWm9uZSA9IGdldFRpbWVab25lKCk7XG5cdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGdldExvY2FsZXMoKSwgb3B0aW9ucyk7XG5cdH07XG5cdGNvbnN0IGZvcm1hdHRlZFRpbWUgPSAoZGF0ZSkgPT4ge1xuXHRcdGxldCBkMjtcblx0XHQvLyBmYWxsYmFjayBmb3IgSUUxMSBhbmQgdW5rbm93biB0aW1lem9uZXNcblx0XHRpZiAodXNlVGltZU9mZnNldCgpKSB7XG5cdFx0XHQvLyB3ZSBhZGp1c3QgdGhlIFVUQyB0aW1lLCBzbyB3ZSBwcmludCB0aGUgYWRqdXN0ZWQgVVRDLCBidXQgbm90IHJlYWxseSBVVEMgdmFsdWVzXG5cdFx0XHRkMiA9IGFkanVzdERhdGUoZGF0ZSwgZ2V0VGltZU9mZnNldCgpKTtcblx0XHRcdHJldHVybiBtYXAoemVyb0ZpbGwsIFtkMi5nZXRVVENIb3VycygpLCBkMi5nZXRVVENNaW51dGVzKCksIGQyLmdldFVUQ1NlY29uZHMoKV0pLmpvaW4oJzonKTtcblx0XHR9XG5cdFx0aWYgKGdldE1XRGF0ZUZvcm1hdCgpID09PSAnSVNPIDg2MDEnKSB7XG5cdFx0XHRkMiA9IGNvbnZlcnRUaW1lWm9uZShkYXRlLCBnZXRUaW1lWm9uZSgpKTtcblx0XHRcdHJldHVybiBtYXAoemVyb0ZpbGwsIFtkMi5nZXRIb3VycygpLCBkMi5nZXRNaW51dGVzKCksIGQyLmdldFNlY29uZHMoKV0pLmpvaW4oJzonKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldFZhbHVlT2YoJ3BvcHVwVGltZUZvcm1hdHRlck9wdGlvbnMnKTtcblx0XHRvcHRpb25zLnRpbWVab25lID0gZ2V0VGltZVpvbmUoKTtcblx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoZ2V0TG9jYWxlcygpLCBvcHRpb25zKTtcblx0fTtcblx0Ly8gR2V0IHRoZSBwcm9wZXIgZ3JvdXBuYW1lcyBmb3IgdGhlIHRlY2huaWNhbGdyb3Vwc1xuXHRjb25zdCBmZXRjaFVzZXJHcm91cE5hbWVzID0gKHVzZXJpbmZvUmVzcG9uc2UpID0+IHtcblx0XHRjb25zdCBxdWVyeU9iaiA9IGdldEpzT2JqKHVzZXJpbmZvUmVzcG9uc2UpLnF1ZXJ5O1xuXHRcdGNvbnN0IHVzZXIgPSBhbnlDaGlsZChxdWVyeU9iai51c2Vycyk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBbXTtcblx0XHRpZiAodXNlci5ncm91cHMpIHtcblx0XHRcdGZvciAoY29uc3QgZ3JvdXBOYW1lIG9mIHVzZXIuZ3JvdXBzKSB7XG5cdFx0XHRcdGlmICghWycqJywgJ3VzZXInLCAnYXV0b2NvbmZpcm1lZCddLmluY2x1ZGVzKGdyb3VwTmFtZSkpIHtcblx0XHRcdFx0XHRtZXNzYWdlcy5wdXNoKGBncm91cC0ke2dyb3VwTmFtZX0tbWVtYmVyYCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHF1ZXJ5T2JqLmdsb2JhbHVzZXJpbmZvICYmIHF1ZXJ5T2JqLmdsb2JhbHVzZXJpbmZvLmdyb3Vwcykge1xuXHRcdFx0Zm9yIChjb25zdCBncm91cE5hbWUgb2YgcXVlcnlPYmouZ2xvYmFsdXNlcmluZm8uZ3JvdXBzKSB7XG5cdFx0XHRcdG1lc3NhZ2VzLnB1c2goYGdyb3VwLSR7Z3JvdXBOYW1lfS1tZW1iZXJgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGdldE13QXBpKCkubG9hZE1lc3NhZ2VzSWZNaXNzaW5nKG1lc3NhZ2VzKTtcblx0fTtcblx0Y29uc3Qgc2hvd0FQSVByZXZpZXcgPSAocXVlcnlUeXBlLCBodG1sLCBpZCwgbmF2cG9wLCBkb3dubG9hZCkgPT4ge1xuXHRcdC8vIERKOiBkb25lXG5cdFx0bGV0IHRhcmdldCA9ICdwb3B1cFByZXZpZXcnO1xuXHRcdGNvbXBsZXRlZE5hdnBvcFRhc2sobmF2cG9wKTtcblx0XHRzd2l0Y2ggKHF1ZXJ5VHlwZSkge1xuXHRcdFx0Y2FzZSAnaW1hZ2VsaW5rcyc6XG5cdFx0XHRjYXNlICdjYXRlZ29yeSc6XG5cdFx0XHRcdHRhcmdldCA9ICdwb3B1cFBvc3RQcmV2aWV3Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd1c2VyaW5mbyc6XG5cdFx0XHRcdHRhcmdldCA9ICdwb3B1cFVzZXJEYXRhJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyZXZpc2lvbic6XG5cdFx0XHRcdGluc2VydFByZXZpZXcoZG93bmxvYWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHNldFBvcHVwVGlwc0FuZEhUTUwoaHRtbCwgdGFyZ2V0LCBpZCk7XG5cdH07XG5cdGNvbnN0IEFQSXJldmlzaW9uUHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzT2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBwYWdlID0gYW55Q2hpbGQoanNPYmoucXVlcnkucGFnZXMpO1xuXHRcdFx0aWYgKHBhZ2UubWlzc2luZykge1xuXHRcdFx0XHQvLyBUT0RPIHdlIG5lZWQgdG8gZml4IHRoaXMgcHJvcGVyIGxhdGVyIG9uXG5cdFx0XHRcdGRvd25sb2FkLm93bmVyID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udGVudCA9XG5cdFx0XHRcdHBhZ2UgJiYgcGFnZS5yZXZpc2lvbnMgJiYgcGFnZS5yZXZpc2lvbnNbMF0uY29udGVudG1vZGVsID09PSAnd2lraXRleHQnXG5cdFx0XHRcdFx0PyBwYWdlLnJldmlzaW9uc1swXS5jb250ZW50XG5cdFx0XHRcdFx0OiBudWxsO1xuXHRcdFx0aWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRkb3dubG9hZC5kYXRhID0gY29udGVudDtcblx0XHRcdFx0ZG93bmxvYWQubGFzdE1vZGlmaWVkID0gbmV3IERhdGUocGFnZS5yZXZpc2lvbnNbMF0udGltZXN0YW1wKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiAnUmV2aXNpb24gcHJldmlldyBmYWlsZWQgOignO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgQVBJYmFja2xpbmtzUHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkIC8qICwgbmF2cG9wICovKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzT2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBsaXN0ID0ganNPYmoucXVlcnkuYmFja2xpbmtzO1xuXHRcdFx0bGV0IGh0bWwgPSBbXTtcblx0XHRcdGlmICghbGlzdCkge1xuXHRcdFx0XHRyZXR1cm4gcG9wdXBTdHJpbmcoJ05vIGJhY2tsaW5rcyBmb3VuZCcpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3QpIHtcblx0XHRcdFx0Y29uc3QgdCA9IG5ldyBUaXRsZShlbGVtZW50LnRpdGxlKTtcblx0XHRcdFx0aHRtbC5wdXNoKGA8YSBocmVmPVwiJHtwZy53aWtpLnRpdGxlYmFzZX0ke3QudXJsU3RyaW5nKCl9XCI+JHt0LnRvU3RyaW5nKCkuZW50aWZ5KCl9PC9hPmApO1xuXHRcdFx0fVxuXHRcdFx0aHRtbCA9IGh0bWwuam9pbignLCAnKTtcblx0XHRcdGlmIChqc09iai5jb250aW51ZSAmJiBqc09iai5jb250aW51ZS5ibGNvbnRpbnVlKSB7XG5cdFx0XHRcdGh0bWwgKz0gcG9wdXBTdHJpbmcoJyBhbmQgbW9yZScpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGh0bWw7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gJ2JhY2tsaW5rc1ByZXZpZXdIVE1MIHdlbnQgd29ua3knO1xuXHRcdH1cblx0fTtcblx0cGcuZm4uQVBJc2hhcmVkSW1hZ2VQYWdlUHJldmlld0hUTUwgPSAob2JqKSA9PiB7XG5cdFx0bG9nKCdBUElzaGFyZWRJbWFnZVBhZ2VQcmV2aWV3SFRNTCcpO1xuXHRcdGNvbnN0IHBvcHVwaWQgPSBvYmoucmVxdWVzdGlkO1xuXHRcdGlmIChvYmoucXVlcnkgJiYgb2JqLnF1ZXJ5LnBhZ2VzKSB7XG5cdFx0XHRjb25zdCBwYWdlID0gYW55Q2hpbGQob2JqLnF1ZXJ5LnBhZ2VzKTtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPVxuXHRcdFx0XHRwYWdlICYmIHBhZ2UucmV2aXNpb25zICYmIHBhZ2UucmV2aXNpb25zWzBdLmNvbnRlbnRtb2RlbCA9PT0gJ3dpa2l0ZXh0J1xuXHRcdFx0XHRcdD8gcGFnZS5yZXZpc2lvbnNbMF0uY29udGVudFxuXHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgJiYgcGcgJiYgcGcuY3VycmVudCAmJiBwZy5jdXJyZW50LmxpbmsgJiYgcGcuY3VycmVudC5saW5rLm5hdnBvcHVwKSB7XG5cdFx0XHRcdC8qIE5vdCBlbnRpcmVseSBzYWZlLCBidXQgdGhlIGJlc3Qgd2UgY2FuIGRvICovXG5cdFx0XHRcdGNvbnN0IHAgPSBuZXcgUHJldmlld21ha2VyKGNvbnRlbnQsIHBnLmN1cnJlbnQubGluay5uYXZwb3B1cC5hcnRpY2xlLCBwZy5jdXJyZW50LmxpbmsubmF2cG9wdXApO1xuXHRcdFx0XHRwLm1ha2VQcmV2aWV3KCk7XG5cdFx0XHRcdHNldFBvcHVwSFRNTChwLmh0bWwsICdwb3B1cFNlY29uZFByZXZpZXcnLCBwb3B1cGlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IEFQSWltYWdlcGFnZVByZXZpZXdIVE1MID0gKGFydGljbGUsIGRvd25sb2FkLCBuYXZwb3ApID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QganNPYmogPSBnZXRKc09iaihkb3dubG9hZC5kYXRhKTtcblx0XHRcdGNvbnN0IHBhZ2UgPSBhbnlDaGlsZChqc09iai5xdWVyeS5wYWdlcyk7XG5cdFx0XHRjb25zdCBjb250ZW50ID1cblx0XHRcdFx0cGFnZSAmJiBwYWdlLnJldmlzaW9ucyAmJiBwYWdlLnJldmlzaW9uc1swXS5jb250ZW50bW9kZWwgPT09ICd3aWtpdGV4dCdcblx0XHRcdFx0XHQ/IHBhZ2UucmV2aXNpb25zWzBdLmNvbnRlbnRcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRsZXQgcmV0ID0gJyc7XG5cdFx0XHRsZXQgYWx0ID0gJyc7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRbe2FsdH1dID0gbmF2cG9wLnBhcmVudEFuY2hvci5jaGlsZE5vZGVzO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8qIGVtcHR5ICovXG5cdFx0XHR9XG5cdFx0XHRpZiAoYWx0KSB7XG5cdFx0XHRcdHJldCA9IGAke3JldH08aHI+PGI+JHtwb3B1cFN0cmluZygnQWx0IHRleHQ6Jyl9PC9iPiAke3BnLmVzY2FwZVF1b3Rlc0hUTUwoYWx0KX1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRjb25zdCBwID0gcHJlcFByZXZpZXdtYWtlcihjb250ZW50LCBhcnRpY2xlLCBuYXZwb3ApO1xuXHRcdFx0XHRwLm1ha2VQcmV2aWV3KCk7XG5cdFx0XHRcdGlmIChwLmh0bWwpIHtcblx0XHRcdFx0XHRyZXQgKz0gYDxocj4ke3AuaHRtbH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cFN1bW1hcnlEYXRhJykpIHtcblx0XHRcdFx0XHRjb25zdCBpbmZvID0gZ2V0UGFnZUluZm8oY29udGVudCwgZG93bmxvYWQpO1xuXHRcdFx0XHRcdGxvZyhpbmZvKTtcblx0XHRcdFx0XHRzZXRQb3B1cFRyYWlsZXIoaW5mbywgbmF2cG9wLmlkTnVtYmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHBhZ2UgJiYgcGFnZS5pbWFnZXJlcG9zaXRvcnkgPT09ICdzaGFyZWQnKSB7XG5cdFx0XHRcdGNvbnN0IGFydCA9IG5ldyBUaXRsZShhcnRpY2xlKTtcblx0XHRcdFx0Y29uc3QgZW5jYXJ0ID0gZW5jb2RlVVJJQ29tcG9uZW50KGBGaWxlOiR7YXJ0LnN0cmlwTmFtZXNwYWNlKCl9YCk7XG5cdFx0XHRcdGNvbnN0IHNoYXJlZF91cmwgPVxuXHRcdFx0XHRcdGAke3BnLndpa2kuYXBpY29tbW9uc2Jhc2V9P2Zvcm1hdD1qc29uJmZvcm1hdHZlcnNpb249MmAgK1xuXHRcdFx0XHRcdCcmY2FsbGJhY2s9cGcuZm4uQVBJc2hhcmVkSW1hZ2VQYWdlUHJldmlld0hUTUwnICtcblx0XHRcdFx0XHRgJnJlcXVlc3RpZD0ke25hdnBvcC5pZE51bWJlcn0mYWN0aW9uPXF1ZXJ5JnByb3A9cmV2aXNpb25zJnJ2cHJvcD1jb250ZW50JnRpdGxlcz0ke2VuY2FydH1gO1xuXHRcdFx0XHRyZXQgPSBgJHtyZXR9PGhyPiR7cG9wdXBTdHJpbmcoJ0ltYWdlIGZyb20gQ29tbW9ucycpfTogPGEgaHJlZj1cIiR7XG5cdFx0XHRcdFx0cGcud2lraS5jb21tb25zYmFzZVxuXHRcdFx0XHR9P3RpdGxlPSR7ZW5jYXJ0fVwiPiR7cG9wdXBTdHJpbmcoJ0Rlc2NyaXB0aW9uIHBhZ2UnKX08L2E+YDtcblx0XHRcdFx0bXcubG9hZGVyLmxvYWQoc2hhcmVkX3VybCk7XG5cdFx0XHR9XG5cdFx0XHRzaG93QVBJUHJldmlldygnaW1hZ2VsaW5rcycsIEFQSWltYWdlbGlua3NQcmV2aWV3SFRNTChhcnRpY2xlLCBkb3dubG9hZCksIG5hdnBvcC5pZE51bWJlciwgZG93bmxvYWQpO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiAnQVBJIGltYWdlcGFnZSBwcmV2aWV3IGZhaWxlZCA6KCc7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBBUElpbWFnZWxpbmtzUHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzb2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBsaXN0ID0ganNvYmoucXVlcnkuaW1hZ2V1c2FnZTtcblx0XHRcdGlmIChsaXN0KSB7XG5cdFx0XHRcdGNvbnN0IHJldCA9IFtdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGlzdCkge1xuXHRcdFx0XHRcdHJldC5wdXNoKGVsZW1lbnQudGl0bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZXQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBvcHVwU3RyaW5nKCdObyBpbWFnZSBsaW5rcyBmb3VuZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBgPGgyPiR7cG9wdXBTdHJpbmcoJ0ZpbGUgbGlua3MnKX08L2gyPiR7bGlua0xpc3QocmV0KX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBvcHVwU3RyaW5nKCdObyBpbWFnZSBsaW5rcyBmb3VuZCcpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuICdJbWFnZSBsaW5rcyBwcmV2aWV3IGdlbmVyYXRpb24gZmFpbGVkIDooJztcblx0XHR9XG5cdH07XG5cdGNvbnN0IEFQSWNhdGVnb3J5UHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzb2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBsaXN0ID0ganNvYmoucXVlcnkuY2F0ZWdvcnltZW1iZXJzO1xuXHRcdFx0bGV0IHJldCA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3QpIHtcblx0XHRcdFx0cmV0LnB1c2goZWxlbWVudC50aXRsZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmV0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gcG9wdXBTdHJpbmcoJ0VtcHR5IGNhdGVnb3J5Jyk7XG5cdFx0XHR9XG5cdFx0XHRyZXQgPSBgPGgyPiR7dHByaW50ZignQ2F0ZWdvcnkgbWVtYmVycyAoJXMgc2hvd24pJywgW3JldC5sZW5ndGhdKX08L2gyPiR7bGlua0xpc3QocmV0KX1gO1xuXHRcdFx0aWYgKGpzb2JqLmNvbnRpbnVlICYmIGpzb2JqLmNvbnRpbnVlLmNtY29udGludWUpIHtcblx0XHRcdFx0cmV0ICs9IHBvcHVwU3RyaW5nKCcgYW5kIG1vcmUnKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gJ0NhdGVnb3J5IHByZXZpZXcgZmFpbGVkIDooJztcblx0XHR9XG5cdH07XG5cdGNvbnN0IEFQSXVzZXJJbmZvUHJldmlld0hUTUwgPSAoX2FydGljbGUsIGRvd25sb2FkKSA9PiB7XG5cdFx0bGV0IHJldCA9IFtdO1xuXHRcdGxldCBxdWVyeW9iaiA9IHt9O1xuXHRcdHRyeSB7XG5cdFx0XHRxdWVyeW9iaiA9IGdldEpzT2JqKGRvd25sb2FkLmRhdGEpLnF1ZXJ5O1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuICdVc2VyaW5mbyBwcmV2aWV3IGZhaWxlZCA6KCc7XG5cdFx0fVxuXHRcdGNvbnN0IHVzZXIgPSBhbnlDaGlsZChxdWVyeW9iai51c2Vycyk7XG5cdFx0aWYgKHVzZXIpIHtcblx0XHRcdGNvbnN0IHtnbG9iYWx1c2VyaW5mb30gPSBxdWVyeW9iajtcblx0XHRcdGlmICh1c2VyLmludmFsaWQgPT09ICcnKSB7XG5cdFx0XHRcdHJldC5wdXNoKHBvcHVwU3RyaW5nKCdJbnZhbGlkIHVzZXInKSk7XG5cdFx0XHR9IGVsc2UgaWYgKHVzZXIubWlzc2luZyA9PT0gJycpIHtcblx0XHRcdFx0cmV0LnB1c2gocG9wdXBTdHJpbmcoJ05vdCBhIHJlZ2lzdGVyZWQgdXNlcm5hbWUnKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodXNlci5ibG9ja2VkYnkpIHtcblx0XHRcdFx0aWYgKHVzZXIuYmxvY2twYXJ0aWFsKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goYDxiPiR7cG9wdXBTdHJpbmcoJ0hhcyBibG9ja3MnKX08L2I+YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goYDxiPiR7cG9wdXBTdHJpbmcoJ0JMT0NLRUQnKX08L2I+YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChnbG9iYWx1c2VyaW5mbyAmJiAoJ2xvY2tlZCcgaW4gZ2xvYmFsdXNlcmluZm8gfHwgJ2hpZGRlbicgaW4gZ2xvYmFsdXNlcmluZm8pKSB7XG5cdFx0XHRcdGxldCBsb2NrZWRTdWxBY2NvdW50SXNBdHRhY2hlZFRvVGhpcyA9IHRydWU7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBnbG9iYWx1c2VyaW5mby51bmF0dGFjaGVkICYmIGkgPCBnbG9iYWx1c2VyaW5mby51bmF0dGFjaGVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGdsb2JhbHVzZXJpbmZvLnVuYXR0YWNoZWRbaV0ud2lraSA9PT0gbXcuY29uZmlnLmdldCgnd2dEQm5hbWUnKSkge1xuXHRcdFx0XHRcdFx0bG9ja2VkU3VsQWNjb3VudElzQXR0YWNoZWRUb1RoaXMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobG9ja2VkU3VsQWNjb3VudElzQXR0YWNoZWRUb1RoaXMpIHtcblx0XHRcdFx0XHRpZiAoJ2xvY2tlZCcgaW4gZ2xvYmFsdXNlcmluZm8pIHtcblx0XHRcdFx0XHRcdHJldC5wdXNoKGA8Yj48aT4ke3BvcHVwU3RyaW5nKCdMT0NLRUQnKX08L2k+PC9iPmApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoJ2hpZGRlbicgaW4gZ2xvYmFsdXNlcmluZm8pIHtcblx0XHRcdFx0XHRcdHJldC5wdXNoKGA8Yj48aT4ke3BvcHVwU3RyaW5nKCdISURERU4nKX08L2k+PC9iPmApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwU2hvd0dlbmRlcicpICYmIHVzZXIuZ2VuZGVyKSB7XG5cdFx0XHRcdHN3aXRjaCAodXNlci5nZW5kZXIpIHtcblx0XHRcdFx0XHRjYXNlICdtYWxlJzpcblx0XHRcdFx0XHRcdHJldC5wdXNoKGAke3BvcHVwU3RyaW5nKCdoZS9oaW0nKX0gwrcgYCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdmZW1hbGUnOlxuXHRcdFx0XHRcdFx0cmV0LnB1c2goYCR7cG9wdXBTdHJpbmcoJ3NoZS9oZXInKX0gwrcgYCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHVzZXIuZ3JvdXBzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZ3JvdXBOYW1lIG9mIHVzZXIuZ3JvdXBzKSB7XG5cdFx0XHRcdFx0aWYgKCFbJyonLCAndXNlcicsICdhdXRvY29uZmlybWVkJ10uaW5jbHVkZXMoZ3JvdXBOYW1lKSkge1xuXHRcdFx0XHRcdFx0Ly8gTWVzc2FnZXMgdGhhdCBjYW4gYmUgdXNlZCBoZXJlOlxuXHRcdFx0XHRcdFx0Ly8gKiBzZWUgW1tTcGVjaWFsOlByZWZpeEluZGV4L01lZGlhV2lraTpHcm91cC1dXVxuXHRcdFx0XHRcdFx0Ly8gKiBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXHRcdFx0XHRcdFx0cmV0LnB1c2gocGcuZXNjYXBlUXVvdGVzSFRNTChtdy5tZXNzYWdlKGBncm91cC0ke2dyb3VwTmFtZX0tbWVtYmVyYCwgdXNlci5nZW5kZXIpLnRleHQoKSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGdsb2JhbHVzZXJpbmZvICYmIGdsb2JhbHVzZXJpbmZvLmdyb3Vwcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGdyb3VwTmFtZSBvZiBnbG9iYWx1c2VyaW5mby5ncm91cHMpIHtcblx0XHRcdFx0XHRyZXQucHVzaChcblx0XHRcdFx0XHRcdC8vIE1lc3NhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZTpcblx0XHRcdFx0XHRcdC8vICogc2VlIFtbU3BlY2lhbDpQcmVmaXhJbmRleC9NZWRpYVdpa2k6R3JvdXAtXV1cblx0XHRcdFx0XHRcdC8vICogZm9yIG1vcmUgaW5mb3JtYXRpb25cblx0XHRcdFx0XHRcdGA8aT4ke3BnLmVzY2FwZVF1b3Rlc0hUTUwobXcubWVzc2FnZShgZ3JvdXAtJHtncm91cE5hbWV9LW1lbWJlcmAsIHVzZXIuZ2VuZGVyKS50ZXh0KCkpfTwvaT5gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHVzZXIucmVnaXN0cmF0aW9uKSB7XG5cdFx0XHRcdHJldC5wdXNoKFxuXHRcdFx0XHRcdHBnLmVzY2FwZVF1b3Rlc0hUTUwoXG5cdFx0XHRcdFx0XHQodXNlci5lZGl0Y291bnQgPz8gJzAnKSArXG5cdFx0XHRcdFx0XHRcdHBvcHVwU3RyaW5nKCcgZWRpdHMgc2luY2U6ICcpICtcblx0XHRcdFx0XHRcdFx0KHVzZXIucmVnaXN0cmF0aW9uID8gZm9ybWF0dGVkRGF0ZShuZXcgRGF0ZSh1c2VyLnJlZ2lzdHJhdGlvbikpIDogJycpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAocXVlcnlvYmoudXNlcmNvbnRyaWJzICYmIHF1ZXJ5b2JqLnVzZXJjb250cmlicy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXQucHVzaChwb3B1cFN0cmluZygnbGFzdCBlZGl0IG9uICcpICsgZm9ybWF0dGVkRGF0ZShuZXcgRGF0ZShxdWVyeW9iai51c2VyY29udHJpYnNbMF0udGltZXN0YW1wKSkpO1xuXHRcdH1cblx0XHRpZiAocXVlcnlvYmouYmxvY2tzKSB7XG5cdFx0XHRyZXQucHVzaChwb3B1cFN0cmluZygnSVAgdXNlcicpKTsgLy8gd2Ugb25seSByZXF1ZXN0IGxpc3Q9YmxvY2tzIGZvciBJUHNcblx0XHRcdGZvciAobGV0IGwgPSAwOyBsIDwgcXVlcnlvYmouYmxvY2tzLmxlbmd0aDsgbCsrKSB7XG5cdFx0XHRcdGxldCByYnN0ciA9IHF1ZXJ5b2JqLmJsb2Nrc1tsXS5yYW5nZXN0YXJ0ID09PSBxdWVyeW9iai5ibG9ja3NbbF0ucmFuZ2VlbmQgPyAnQkxPQ0snIDogJ1JBTkdFQkxPQ0snO1xuXHRcdFx0XHRyYnN0ciA9IEFycmF5LmlzQXJyYXkocXVlcnlvYmouYmxvY2tzW2xdLnJlc3RyaWN0aW9ucykgPyBgJHtyYnN0cn1FRGAgOiBgSGFzICR7cmJzdHIudG9Mb3dlckNhc2UoKX1zYDtcblx0XHRcdFx0cmV0LnB1c2goYDxiPiR7cG9wdXBTdHJpbmcocmJzdHIpfTwvYj5gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gaWYgYW55IGVsZW1lbnQgb2YgcmV0IGVuZHMgd2l0aCAnIMK3ICcsIG1lcmdlIGl0IHdpdGggdGhlIG5leHQgZWxlbWVudCB0byBhdm9pZFxuXHRcdC8vIHRoZSAuam9pbignLCAnKSBjYWxsIGluc2VydGluZyBhIGNvbW1hIGFmdGVyIGl0XG5cdFx0Zm9yIChsZXQgbSA9IDA7IG0gPCByZXQubGVuZ3RoIC0gMTsgbSsrKSB7XG5cdFx0XHRpZiAocmV0W21dLmxlbmd0aCA+IDMgJiYgcmV0W21dLnNsaWNlKE1hdGgubWF4KDAsIHJldFttXS5sZW5ndGggLSAzKSkgPT09ICcgwrcgJykge1xuXHRcdFx0XHRyZXRbbV0gKz0gcmV0W20gKyAxXTtcblx0XHRcdFx0cmV0LnNwbGljZShtICsgMSwgMSk7IC8vIGRlbGV0ZSBlbGVtZW50IGF0IGluZGV4IG0rMVxuXHRcdFx0XHRtLS07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldCA9IGA8aHI+JHtyZXQuam9pbignLCAnKX1gO1xuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IEFQSWNvbnRyaWJzUHJldmlld0hUTUwgPSAoYXJ0aWNsZSwgZG93bmxvYWQsIG5hdnBvcCkgPT4ge1xuXHRcdHJldHVybiBBUEloaXN0b3J5UHJldmlld0hUTUwoYXJ0aWNsZSwgZG93bmxvYWQsIG5hdnBvcCwgdHJ1ZSk7XG5cdH07XG5cdGNvbnN0IEFQSWhpc3RvcnlQcmV2aWV3SFRNTCA9IChhcnRpY2xlLCBkb3dubG9hZCwgX25hdnBvcCwgcmVhbGx5Q29udHJpYnMpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QganNvYmogPSBnZXRKc09iaihkb3dubG9hZC5kYXRhKTtcblx0XHRcdGxldCBlZGl0cyA9IFtdO1xuXHRcdFx0ZWRpdHMgPSByZWFsbHlDb250cmlicyA/IGpzb2JqLnF1ZXJ5LnVzZXJjb250cmlicyA6IGFueUNoaWxkKGpzb2JqLnF1ZXJ5LnBhZ2VzKS5yZXZpc2lvbnM7XG5cdFx0XHRjb25zdCByZXQgPSBlZGl0UHJldmlld1RhYmxlKGFydGljbGUsIGVkaXRzLCByZWFsbHlDb250cmlicyk7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuICdIaXN0b3J5IHByZXZpZXcgZmFpbGVkIDotKCc7XG5cdFx0fVxuXHR9O1xuXHQvLyBFTkRGSUxFOiBxdWVyeXByZXZpZXcuanNcblx0Ly8gU1RBUlRGSUxFOiBkZWJ1Zy5qc1xuXHQvLyBEZWJ1Z2dpbmcgZnVuY3Rpb25zXG5cdGNvbnN0IHNldHVwRGVidWdnaW5nID0gKCkgPT4ge1xuXHRcdGlmICh3aW5kb3cucG9wdXBEZWJ1Zykge1xuXHRcdFx0Ly8gcG9wdXBEZWJ1ZyBpcyBzZXQgZnJvbSAudmVyc2lvblxuXHRcdFx0d2luZG93LmxvZyA9ICh4KSA9PiB7XG5cdFx0XHRcdC8vIGlmIChnIE1zZyAhPT0gJycpIHsgZ01zZyArPSAnXFxuJzsgZ01zZys9dGltZSgpICsgJyAnICsgeDsgfVxuXHRcdFx0XHRjb25zb2xlLmxvZyh4KTtcblx0XHRcdH07XG5cdFx0XHR3aW5kb3cuZXJybG9nID0gKHgpID0+IHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihgW1BvcHVwc10gJHt4fWApO1xuXHRcdFx0fTtcblx0XHRcdGxvZygnSW5pdGlhbGl6aW5nIGxvZ2dlcicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cubG9nID0gKCkgPT4ge307XG5cdFx0XHR3aW5kb3cuZXJybG9nID0gKCkgPT4ge307XG5cdFx0fVxuXHR9O1xuXHQvLyBFTkRGSUxFOiBkZWJ1Zy5qc1xuXHQvLyBTVEFSVEZJTEU6IGltYWdlcy5qc1xuXHQvLyBsb2FkIGltYWdlIG9mIHR5cGUgVGl0bGUuXG5cdGNvbnN0IGxvYWRJbWFnZSA9IChpbWFnZSwgbmF2cG9wKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBpbWFnZS5zdHJpcE5hbWVzcGFjZSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoJ2xvYWRJbWFnZXMgYmFkJywge3RhZzogJ3BvcHVwcycsIHR5cGU6ICdlcnJvcid9KTtcblx0XHR9XG5cdFx0Ly8gQVBJIGNhbGwgdG8gcmV0cmlldmUgaW1hZ2UgaW5mby5cblx0XHRpZiAoIWdldFZhbHVlT2YoJ3BvcHVwSW1hZ2VzJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFpc1ZhbGlkSW1hZ2VOYW1lKGltYWdlLnRvU3RyaW5nKCkpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGFydCA9IGltYWdlLnVybFN0cmluZygpO1xuXHRcdGxldCB1cmwgPSBgJHtwZy53aWtpLmFwaXdpa2liYXNlfT9mb3JtYXQ9anNvbiZmb3JtYXR2ZXJzaW9uPTImYWN0aW9uPXF1ZXJ5YDtcblx0XHR1cmwgKz0gYCZwcm9wPWltYWdlaW5mbyZpaXByb3A9dXJsfG1pbWUmaWl1cmx3aWR0aD0ke2dldFZhbHVlT2YoJ3BvcHVwSW1hZ2VTaXplTGFyZ2UnKX1gO1xuXHRcdHVybCArPSBgJnRpdGxlcz0ke2FydH1gO1xuXHRcdHBlbmRpbmdOYXZwb3BUYXNrKG5hdnBvcCk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSAoZCkgPT4ge1xuXHRcdFx0cG9wdXBzSW5zZXJ0SW1hZ2UobmF2cG9wLmlkTnVtYmVyLCBuYXZwb3AsIGQpO1xuXHRcdH07XG5cdFx0Y29uc3QgZ28gPSAoKSA9PiB7XG5cdFx0XHRnZXRQYWdlV2l0aENhY2hpbmcodXJsLCBjYWxsYmFjaywgbmF2cG9wKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0aWYgKG5hdnBvcC52aXNpYmxlIHx8ICFnZXRWYWx1ZU9mKCdwb3B1cExhenlEb3dubG9hZHMnKSkge1xuXHRcdFx0Z28oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmF2cG9wLmFkZEhvb2soZ28sICd1bmhpZGUnLCAnYWZ0ZXInLCAnRE9XTkxPQURfSU1BR0VfUVVFUllfREFUQScpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgcG9wdXBzSW5zZXJ0SW1hZ2UgPSAoaWQsIF9uYXZwb3AsIGRvd25sb2FkKSA9PiB7XG5cdFx0bG9nKCdwb3B1cHNJbnNlcnRJbWFnZScpO1xuXHRcdGxldCBpbWFnZWluZm87XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGpzT2JqID0gZ2V0SnNPYmooZG93bmxvYWQuZGF0YSk7XG5cdFx0XHRjb25zdCBpbWFnZXBhZ2UgPSBhbnlDaGlsZChqc09iai5xdWVyeS5wYWdlcyk7XG5cdFx0XHRpZiAoaW1hZ2VwYWdlLmltYWdlaW5mbyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdFtpbWFnZWluZm9dID0gaW1hZ2VwYWdlLmltYWdlaW5mbztcblx0XHR9IGNhdGNoIHtcblx0XHRcdGxvZygncG9wdXBzSW5zZXJ0SW1hZ2UgZmFpbGVkIDooJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHBvcHVwSW1hZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjcG9wdXBJbWcke2lkfWApO1xuXHRcdGlmICghcG9wdXBJbWFnZSkge1xuXHRcdFx0bG9nKCdjb3VsZCBub3QgZmluZCBpbnNlcnRpb24gcG9pbnQgZm9yIGltYWdlJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHBvcHVwSW1hZ2Uud2lkdGggPSBnZXRWYWx1ZU9mKCdwb3B1cEltYWdlU2l6ZScpO1xuXHRcdHBvcHVwSW1hZ2Uuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuXHRcdC8vIFNldCB0aGUgc291cmNlIGZvciB0aGUgaW1hZ2UuXG5cdFx0aWYgKGltYWdlaW5mby50aHVtYnVybCkge1xuXHRcdFx0cG9wdXBJbWFnZS5zcmMgPSBpbWFnZWluZm8udGh1bWJ1cmw7XG5cdFx0fSBlbHNlIGlmIChpbWFnZWluZm8ubWltZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG5cdFx0XHRwb3B1cEltYWdlLnNyYyA9IGltYWdlaW5mby51cmw7XG5cdFx0XHRsb2coJ2EgdGh1bWIgY291bGQgbm90IGJlIGZvdW5kLCB1c2luZyBvcmlnaW5hbCBpbWFnZScpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2coXCJmdWxsc2l6ZSBpbWFnZXRodW1iLCBidXQgbm90IHN1cmUgaWYgaXQncyBhbiBpbWFnZVwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNwb3B1cEltYWdlTGluayR7aWR9YCk7XG5cdFx0aWYgKGEgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHQvLyBEZXRlcm1pbmUgdGhlIGFjdGlvbiBvZiB0aGUgc3Vycm91ZGluZyBpbWFnZWxpbmsuXG5cdFx0c3dpdGNoIChnZXRWYWx1ZU9mKCdwb3B1cFRodW1iQWN0aW9uJykpIHtcblx0XHRcdGNhc2UgJ2ltYWdlcGFnZSc6XG5cdFx0XHRcdGlmIChwZy5jdXJyZW50LmFydGljbGUubmFtZXNwYWNlSWQoKSAhPT0gcGcubnNJbWFnZUlkKSB7XG5cdFx0XHRcdFx0YS5ocmVmID0gaW1hZ2VpbmZvLmRlc2NyaXB0aW9udXJsO1xuXHRcdFx0XHRcdC8vIEZJWE1FOiB1bnJlbGlhYmxlIHBnLmlkTnVtYmVyXG5cdFx0XHRcdFx0cG9wVGlwc1Nvb25GbihgcG9wdXBJbWFnZSR7aWR9YCkoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Y2FzZSAnc2l6ZXRvZ2dsZSc6XG5cdFx0XHRcdGEub25jbGljayA9IHRvZ2dsZVNpemU7XG5cdFx0XHRcdGEudGl0bGUgPSBwb3B1cFN0cmluZygnVG9nZ2xlIGltYWdlIHNpemUnKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0Y2FzZSAnbGlua2Z1bGwnOlxuXHRcdFx0XHRhLmhyZWYgPSBpbWFnZWluZm8udXJsO1xuXHRcdFx0XHRhLnRpdGxlID0gcG9wdXBTdHJpbmcoJ09wZW4gZnVsbC1zaXplIGltYWdlJyk7XG5cdFx0fVxuXHR9O1xuXHQvLyBUb2dnbGVzIHRoZSBpbWFnZSBiZXR3ZWVuIGlubGluZSBzbWFsbCBhbmQgbmF2cG9wIGZ1bGx3aWR0aC5cblx0Ly8gSXQncyB0aGUgc2FtZSBpbWFnZSwgbm8gYWN0dWFsIHNpemVjaGFuZ2Ugb2NjdXJzLCBvbmx5IGRpc3BsYXkgd2lkdGguXG5cdGNvbnN0IHRvZ2dsZVNpemUgPSBmdW5jdGlvbiB0b2dnbGVTaXplKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghc2VsZikge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoJ3NlbGYgaXMgbnVsbCA6LycsIHt0YWc6ICdwb3B1cHMnLCB0eXBlOiAnZXJyb3InfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGltZyA9IHNlbGYuZmlyc3RDaGlsZDtcblx0XHRpZiAoIWltZykge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoJ2ltZyBpcyBudWxsIDovJywge3RhZzogJ3BvcHVwcycsIHR5cGU6ICdlcnJvcid9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW1nLnN0eWxlLndpZHRoID0gIWltZy5zdHlsZS53aWR0aCB8fCBpbWcuc3R5bGUud2lkdGggPT09ICcnID8gJzEwMCUnIDogJyc7XG5cdH07XG5cdC8vIFJldHVybnMgb25lIHRpdGxlIG9mIGFuIGltYWdlIGZyb20gd2lraVRleHQuXG5cdGNvbnN0IGdldFZhbGlkSW1hZ2VGcm9tV2lraVRleHQgPSAod2lraVRleHQpID0+IHtcblx0XHQvLyBuYiBpbiBwZy5yZS5pbWFnZSB3ZSdyZSBpbnRlcmVzdGVkIGluIHRoZSBzZWNvbmQgYnJhY2tldGVkIGV4cHJlc3Npb25cblx0XHQvLyB0aGlzIG1heSBjaGFuZ2UgaWYgdGhlIHJlZ2V4IGNoYW5nZXMgOi0oXG5cdFx0Ly8gbGV0IG1hdGNoPXBnLnJlLmltYWdlLmV4ZWMod2lraVRleHQpO1xuXHRcdGxldCBtYXRjaGVkO1xuXHRcdGxldCBtYXRjaDtcblx0XHQvLyBzdHJpcCBodG1sIGNvbW1lbnRzLCB1c2VkIGJ5IGV2aWwgYm90cyA6LShcblx0XHRjb25zdCB0ID0gcmVtb3ZlTWF0Y2hlc1VubGVzcyh3aWtpVGV4dCwgLyg8IS0tW1xcU1xcc10qPy0tPikvLCAxLCAvXjwhLS1bXltdKnBvcHVwL2kpO1xuXHRcdHdoaWxlICgobWF0Y2ggPSBwZy5yZS5pbWFnZS5leGVjKHQpKSAhPT0gbnVsbCkge1xuXHRcdFx0Ly8gbm93IGZpbmQgYSBzYW5lIGltYWdlIG5hbWUgLSBleGNsdWRlIHRlbXBsYXRlcyBieSBzZWVraW5nIHtcblx0XHRcdGNvbnN0IG0gPSBtYXRjaFsyXSB8fCBtYXRjaFs2XTtcblx0XHRcdGlmIChpc1ZhbGlkSW1hZ2VOYW1lKG0pKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cGcucmUuaW1hZ2UubGFzdEluZGV4ID0gMDtcblx0XHRpZiAoIW1hdGNoZWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gYCR7bXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbcGcubnNJbWFnZUlkXX06JHt1cGNhc2VGaXJzdChtYXRjaGVkKX1gO1xuXHR9O1xuXHRjb25zdCByZW1vdmVNYXRjaGVzVW5sZXNzID0gKHN0ciwgcmUxLCBwYXJlbmNvdW50LCByZTIpID0+IHtcblx0XHRjb25zdCBzcGxpdCA9IHN0ci5zcGxpdChyZTEpO1xuXHRcdGNvbnN0IGMgPSBwYXJlbmNvdW50ICsgMTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAoaSAlIGMgPT09IDAgfHwgcmUyLnRlc3Qoc3BsaXRbaV0pKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0c3BsaXRbaV0gPSAnJztcblx0XHR9XG5cdFx0cmV0dXJuIHNwbGl0LmpvaW4oJycpO1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBpbWFnZXMuanNcblx0Ly8gU1RBUlRGSUxFOiBuYW1lc3BhY2VzLmpzXG5cdC8vIFNldCB1cCBuYW1lc3BhY2VzIGFuZCBvdGhlciBub24tc3RyaW5ncy5qcyBsb2NhbGl6YXRpb25cblx0Ly8gKGN1cnJlbnRseSB0aGF0IG1lYW5zIHJlZGlycyB0b28pXG5cdGNvbnN0IHNldE5hbWVzcGFjZXMgPSAoKSA9PiB7XG5cdFx0cGcubnNTcGVjaWFsSWQgPSAtMTtcblx0XHRwZy5uc01haW5zcGFjZUlkID0gMDtcblx0XHRwZy5uc0ltYWdlSWQgPSA2O1xuXHRcdHBnLm5zVXNlcklkID0gMjtcblx0XHRwZy5uc1VzZXJ0YWxrSWQgPSAzO1xuXHRcdHBnLm5zQ2F0ZWdvcnlJZCA9IDE0O1xuXHRcdHBnLm5zVGVtcGxhdGVJZCA9IDEwO1xuXHR9O1xuXHRjb25zdCBzZXRSZWRpcnMgPSAoKSA9PiB7XG5cdFx0Y29uc3QgciA9ICdyZWRpcmVjdCc7XG5cdFx0Y29uc3QgUiA9ICdSRURJUkVDVCc7XG5cdFx0Y29uc3QgcmVkaXJMaXN0cyA9IHtcblx0XHRcdGFyOiBbUiwgJ9iq2K3ZiNmK2YQnXSxcblx0XHRcdGJlOiBbciwgJ9C/0LXRgNCw0L3QsNC60ZbRgNCw0LLQsNC90YzQvdC1J10sXG5cdFx0XHRiZzogW3IsICfQv9GA0LXQvdCw0YHQvtGH0LLQsNC90LUnLCAn0LLQuNC2J10sXG5cdFx0XHRiczogW3IsICdQcmV1c21qZXJpJywgJ3ByZXVzbWplcmknLCAnUFJFVVNNSkVSSSddLFxuXHRcdFx0Ym46IFtSLCAn4Kaq4KeB4Kao4Kaw4KeN4Kao4Ka/4Kaw4KeN4Kam4KeH4Ka2J10sXG5cdFx0XHRjczogW1IsICdQxZhFU03EmlJVSiddLFxuXHRcdFx0Y3k6IFtyLCAnYWlsLWN5ZmVpcmlvJ10sXG5cdFx0XHRkZTogW1IsICdXRUlURVJMRUlUVU5HJ10sXG5cdFx0XHRlbDogW1IsICfOkc6dzpHOms6RzqTOlc6lzpjOpc6dzqPOlyddLFxuXHRcdFx0ZW86IFtSLCAnQUxJRElSRUtUVScsICdBTElESVJFS1RJJ10sXG5cdFx0XHRlczogW1IsICdSRURJUkVDQ0nDk04nXSxcblx0XHRcdGV0OiBbciwgJ3N1dW5hJ10sXG5cdFx0XHRnYTogW3IsICdhdGhzaGVvbGFkaCddLFxuXHRcdFx0Z2w6IFtyLCAnUkVESVJFQ0NJw5NOJywgJ1JFRElSRUNJT05BTUVOVE8nXSxcblx0XHRcdGhlOiBbUiwgJ9eU16TXoNeZ15QnXSxcblx0XHRcdGh1OiBbUiwgJ8OBVElSw4FOWcONVMOBUyddLFxuXHRcdFx0aXM6IFtyLCAndGlsdsOtc3VuJywgJ1RJTFbDjVNVTiddLFxuXHRcdFx0aXQ6IFtSLCAnUklOVklBJywgJ1JpbnZpYSddLFxuXHRcdFx0amE6IFtSLCAn6Lui6YCBJ10sXG5cdFx0XHRtazogW3IsICfQv9GA0LXQvdCw0YHQvtGH0YPQstCw0ZrQtScsICfQstC40LTQuCddLFxuXHRcdFx0bmRzOiBbciwgJ3dpZWRlcmxlaWRlbiddLFxuXHRcdFx0J25kcy1ubCc6IFtSLCAnREVVUlZFUldJRVpJTkcnLCAnRFVVUlZFUldJRVpJTkcnXSxcblx0XHRcdG5sOiBbUiwgJ0RPT1JWRVJXSUpaSU5HJ10sXG5cdFx0XHRubjogW3IsICdvbWRpcmlnZXInXSxcblx0XHRcdHBsOiBbUiwgJ1BBVFJaJywgJ1BSWkVLSUVSVUonLCAnVEFNJ10sXG5cdFx0XHRwdDogW1IsICdyZWRpciddLFxuXHRcdFx0cnU6IFtSLCAn0J/QldCg0JXQndCQ0J/QoNCQ0JLQm9CV0J3QmNCVJywgJ9Cf0JXQoNCV0J3QkNCf0KAnXSxcblx0XHRcdHNrOiBbciwgJ3ByZXNtZXJ1aiddLFxuXHRcdFx0c3I6IFtyLCAn0J/RgNC10YPRgdC80LXRgNC4JywgJ9C/0YDQtdGD0YHQvNC10YDQuCcsICfQn9Cg0JXQo9Ch0JzQldCg0JgnLCAnUHJldXNtZXJpJywgJ3ByZXVzbWVyaScsICdQUkVVU01FUkknXSxcblx0XHRcdHR0OiBbUiwgJ3nDvG7DpGx0w7wnLCAn0L/QtdGA0LXQvdCw0L/RgNCw0LLQu9C10L3QuNC1JywgJ9C/0LXRgNC10L3QsNC/0YAnXSxcblx0XHRcdHVrOiBbUiwgJ9Cf0JXQoNCV0J3QkNCf0KDQkNCS0JvQldCd0J3QrycsICfQn9CV0KDQldCd0JDQn9CgJ10sXG5cdFx0XHR2aTogW3IsICfEkeG7lWknXSxcblx0XHRcdHlpOiBbUiwgJ9eV15XXmdeZ15jXoteo16TXmdeo158nXSxcblx0XHRcdHpoOiBbUiwgJ+mHjeWumuWQkSddLCAvLyBubyBjb21tYVxuXHRcdH07XG5cdFx0Y29uc3QgcmVkaXJMaXN0ID0gcmVkaXJMaXN0c1twZy53aWtpLmxhbmddIHx8IFtyLCBSXTtcblx0XHQvLyBNZWRpYXdpa2kgaXMgdmVyeSB0b2xlcmFudCBhYm91dCB3aGF0IGNvbWVzIGFmdGVyIHRoZSAjcmVkaXJlY3QgYXQgdGhlIHN0YXJ0XG5cdFx0cGcucmUucmVkaXJlY3QgPSBuZXcgUmVnRXhwKFxuXHRcdFx0YF5cXFxccypbI10oJHtyZWRpckxpc3Quam9pbignfCcpfSkuKj9cXFxcW3syfShbXlxcXFx8XFxcXF1dKikofFteXFxcXF1dKik/XFxcXF17Mn1cXFxccyooLiopYCxcblx0XHRcdCdpJ1xuXHRcdCk7XG5cdH07XG5cdGNvbnN0IHNldEludGVyd2lraSA9ICgpID0+IHtcblx0XHRpZiAocGcud2lraS53aWtpbWVkaWEpIHtcblx0XHRcdC8vIEZyb20ge0BsaW5rIGh0dHBzOi8vbWV0YS53aWtpbWVkaWEub3JnL3dpa2kvTGlzdF9vZl9XaWtpcGVkaWFzfVxuXHRcdFx0Ly8ge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93L2FwaS5waHA/YWN0aW9uPXNpdGVtYXRyaXgmZm9ybWF0PWpzb24mc210eXBlPWxhbmd1YWdlJnNtbGFuZ3Byb3A9Y29kZSZmb3JtYXR2ZXJzaW9uPTJ9XG5cdFx0XHRwZy53aWtpLmludGVyd2lraSA9XG5cdFx0XHRcdCdhYXxhYnxhY2V8YWZ8YWt8YWxzfGFtfGFufGFuZ3xhcnxhcmN8YXJ6fGFzfGFzdHxhdnxheXxhenxiYXxiYXJ8YmF0LXNtZ3xiY2x8YmV8YmUteC1vbGR8Ymd8Ymh8Yml8YmpufGJtfGJufGJvfGJweXxicnxic3xidWd8YnhyfGNhfGNiay16YW18Y2RvfGNlfGNlYnxjaHxjaG98Y2hyfGNoeXxja2J8Y298Y3J8Y3JofGNzfGNzYnxjdXxjdnxjeXxkYXxkZXxkaXF8ZHNifGR2fGR6fGVlfGVsfGVtbHxlbnxlb3xlc3xldHxldXxleHR8ZmF8ZmZ8Zml8Zml1LXZyb3xmanxmb3xmcnxmcnB8ZnJyfGZ1cnxmeXxnYXxnYWd8Z2FufGdkfGdsfGdsa3xnbnxnb3R8Z3V8Z3Z8aGF8aGFrfGhhd3xoZXxoaXxoaWZ8aG98aHJ8aHNifGh0fGh1fGh5fGh6fGlhfGlkfGllfGlnfGlpfGlrfGlsb3xpb3xpc3xpdHxpdXxqYXxqYm98anZ8a2F8a2FhfGthYnxrYmR8a2d8a2l8a2p8a2t8a2x8a218a258a298a29pfGtyfGtyY3xrc3xrc2h8a3V8a3Z8a3d8a3l8bGF8bGFkfGxifGxiZXxsZ3xsaXxsaWp8bG1vfGxufGxvfGx0fGx0Z3xsdnxtYXAtYm1zfG1kZnxtZ3xtaHxtaHJ8bWl8bWt8bWx8bW58bW98bXJ8bXJqfG1zfG10fG11c3xtd2x8bXl8bXl2fG16bnxuYXxuYWh8bmFwfG5kc3xuZHMtbmx8bmV8bmV3fG5nfG5sfG5ufG5vfG5vdnxucm18bnZ8bnl8b2N8b218b3J8b3N8cGF8cGFnfHBhbXxwYXB8cGNkfHBkY3xwZmx8cGl8cGlofHBsfHBtc3xwbmJ8cG50fHBzfHB0fHF1fHJtfHJteXxybnxyb3xyb2EtcnVwfHJvYS10YXJhfHJ1fHJ1ZXxyd3xzYXxzYWh8c2N8c2NufHNjb3xzZHxzZXxzZ3xzaHxzaXxzaW1wbGV8c2t8c2x8c218c258c298c3F8c3J8c3JufHNzfHN0fHN0cXxzdXxzdnxzd3xzemx8dGF8dGV8dGV0fHRnfHRofHRpfHRrfHRsfHRufHRvfHRwaXx0cnx0c3x0dHx0dW18dHd8dHl8dWRtfHVnfHVrfHVyfHV6fHZlfHZlY3x2aXx2bHN8dm98d2F8d2FyfHdvfHd1dXx4YWx8eGh8eWl8eW98emF8emVhfHpofHpoLWNsYXNzaWNhbHx6aC1taW4tbmFufHpoLXl1ZXx6dSc7XG5cdFx0XHRwZy5yZS5pbnRlcndpa2kgPSBuZXcgUmVnRXhwKGBeJHtwZy53aWtpLmludGVyd2lraX06YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBnLndpa2kuaW50ZXJ3aWtpID0gbnVsbDtcblx0XHRcdHBnLnJlLmludGVyd2lraSA9IC9eJC87XG5cdFx0fVxuXHR9O1xuXHQvLyByZXR1cm4gYSByZWdleHAgcGF0dGVybiBtYXRjaGluZyBhbGwgdmFyaWFudHMgdG8gd3JpdGUgdGhlIGdpdmVuIG5hbWVzcGFjZVxuXHRjb25zdCBuc1JlID0gKG5hbWVzcGFjZUlkKSA9PiB7XG5cdFx0Y29uc3QgaW1hZ2VOYW1lc3BhY2VWYXJpYW50cyA9IFtdO1xuXHRcdGZvciAoY29uc3QgW19sb2NhbGl6ZWROYW1lc3BhY2VMYywgX25hbWVzcGFjZUlkXSBvZiBPYmplY3QuZW50cmllcyhtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpKSkge1xuXHRcdFx0aWYgKF9uYW1lc3BhY2VJZCAhPT0gbmFtZXNwYWNlSWQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBsb2NhbGl6ZWROYW1lc3BhY2VMYyA9IHVwY2FzZUZpcnN0KF9sb2NhbGl6ZWROYW1lc3BhY2VMYyk7XG5cdFx0XHRpbWFnZU5hbWVzcGFjZVZhcmlhbnRzLnB1c2goXG5cdFx0XHRcdG13LnV0aWwuZXNjYXBlUmVnRXhwKGxvY2FsaXplZE5hbWVzcGFjZUxjKS5zcGxpdCgnICcpLmpvaW4oJ1sgX10nKSxcblx0XHRcdFx0bXcudXRpbC5lc2NhcGVSZWdFeHAoZW5jb2RlVVJJKGxvY2FsaXplZE5hbWVzcGFjZUxjKSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBgKD86JHtpbWFnZU5hbWVzcGFjZVZhcmlhbnRzLmpvaW4oJ3wnKX0pYDtcblx0fTtcblx0Y29uc3QgbnNSZUltYWdlID0gKCkgPT4ge1xuXHRcdHJldHVybiBuc1JlKHBnLm5zSW1hZ2VJZCk7XG5cdH07XG5cdC8vIEVOREZJTEU6IG5hbWVzcGFjZXMuanNcblx0Ly8gU1RBUlRGSUxFOiBzZWxwb3AuanNcblx0Y29uc3QgZ2V0RWRpdGJveFNlbGVjdGlvbiA9ICgpID0+IHtcblx0XHQvLyBzZWUge0BsaW5rIGh0dHA6Ly93d3cud2ViZ3VydXNmb3J1bS5jb20vOC8xMi8wfVxuXHRcdGxldCBlZGl0Ym94O1xuXHRcdHRyeSB7XG5cdFx0XHRlZGl0Ym94ID0gZG9jdW1lbnQuZWRpdGZvcm0ud3BUZXh0Ym94MTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gSUUsIE9wZXJhXG5cdFx0aWYgKGRvY3VtZW50LnNlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQ7XG5cdFx0fVxuXHRcdC8vIE1vemlsbGFcblx0XHRjb25zdCBzZWxTdGFydCA9IGVkaXRib3guc2VsZWN0aW9uU3RhcnQ7XG5cdFx0Y29uc3Qgc2VsRW5kID0gZWRpdGJveC5zZWxlY3Rpb25FbmQ7XG5cdFx0cmV0dXJuIGVkaXRib3gudmFsdWUuc3Vic3RyaW5nKHNlbFN0YXJ0LCBzZWxFbmQpO1xuXHR9O1xuXHRjb25zdCBkb1NlbGVjdGlvblBvcHVwID0gKCkgPT4ge1xuXHRcdC8vIHBvcHVwIGlmIHRoZSBzZWxlY3Rpb24gbG9va3MgbGlrZSBbW2Zvb3xhbnl0aGluZyBhZnRlcndhcmRzIGF0IGFsbFxuXHRcdC8vIG9yIFtbZm9vfGJhcl1ddGV4dCB3aXRob3V0ICddXSdcblx0XHQvLyBvciBbW2Zvb3xiYXJdXVxuXHRcdGNvbnN0IHNlbCA9IGdldEVkaXRib3hTZWxlY3Rpb24oKTtcblx0XHRjb25zdCBvcGVuID0gc2VsLmluZGV4T2YoJ1tbJyk7XG5cdFx0Y29uc3QgcGlwZSA9IHNlbC5pbmRleE9mKCd8Jyk7XG5cdFx0Y29uc3QgY2xvc2UgPSBzZWwuaW5kZXhPZignXV0nKTtcblx0XHRpZiAob3BlbiA9PT0gLTEgfHwgKHBpcGUgPT09IC0xICYmIGNsb3NlID09PSAtMSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKChwaXBlICE9PSAtMSAmJiBvcGVuID4gcGlwZSkgfHwgKGNsb3NlICE9PSAtMSAmJiBvcGVuID4gY2xvc2UpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGFydGljbGUgPSBuZXcgVGl0bGUoc2VsLnN1YnN0cmluZyhvcGVuICsgMiwgcGlwZSA8IDAgPyBjbG9zZSA6IHBpcGUpKTtcblx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBPbkVkaXRTZWxlY3Rpb24nKSA9PT0gJ2JveHByZXZpZXcnKSB7XG5cdFx0XHRyZXR1cm4gZG9TZXBhcmF0ZVNlbGVjdGlvblBvcHVwKHNlbCwgYXJ0aWNsZSk7XG5cdFx0fVxuXHRcdGlmIChjbG9zZSA+IDAgJiYgc2VsLnNsaWNlKE1hdGgubWF4KDAsIGNsb3NlICsgMikpLmluY2x1ZGVzKCdbWycpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0YS5ocmVmID0gcGcud2lraS50aXRsZWJhc2UgKyBhcnRpY2xlLnVybFN0cmluZygpO1xuXHRcdG1vdXNlT3Zlcldpa2lMaW5rMihhKTtcblx0XHRpZiAoYS5uYXZwb3B1cCkge1xuXHRcdFx0YS5uYXZwb3B1cC5hZGRIb29rKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0cnVuU3RvcFBvcHVwVGltZXIoYS5uYXZwb3B1cCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCd1bmhpZGUnLFxuXHRcdFx0XHQnYWZ0ZXInXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgZG9TZXBhcmF0ZVNlbGVjdGlvblBvcHVwID0gKHN0ciwgYXJ0aWNsZSkgPT4ge1xuXHRcdGxldCBkaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0aW9uUHJldmlldycpO1xuXHRcdGlmICghZGl2KSB7XG5cdFx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdGRpdi5pZCA9ICdzZWxlY3Rpb25QcmV2aWV3Jztcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGJveCA9IGRvY3VtZW50LmVkaXRmb3JtLndwVGV4dGJveDE7XG5cdFx0XHRcdGJveC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkaXYsIGJveCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBwID0gcHJlcFByZXZpZXdtYWtlcihzdHIsIGFydGljbGUsIG5ld05hdnBvcHVwKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKSwgYXJ0aWNsZSkpO1xuXHRcdHAubWFrZVByZXZpZXcoKTtcblx0XHRpZiAocC5odG1sKSB7XG5cdFx0XHRkaXYuaW5uZXJIVE1MID0gcC5odG1sO1xuXHRcdH1cblx0XHRkaXYucmFuU2V0dXBUb29sdGlwc0FscmVhZHkgPSBmYWxzZTtcblx0XHRwb3BUaXBzU29vbkZuKCdzZWxlY3Rpb25QcmV2aWV3JykoKTtcblx0fTtcblx0Ly8gRU5ERklMRTogc2VscG9wLmpzXG5cdC8vIFNUQVJURklMRTogbmF2cG9wdXAuanNcblx0LyoqXG5cdCAqIEBmaWxlb3ZlcnZpZXcgIERlZmluZXMgdHdvIGNsYXNzZXM6IHtAc291cmNlIE5hdnBvcHVwfSBhbmQge0Bzb3VyY2UgTW91c2V0cmFja2VyfS5cblx0ICpcblx0ICogPGNvZGU+TmF2cG9wdXA8L2NvZGU+IGRlc2NyaWJlcyBwb3B1cHM6IHdoZW4gdGhleSBhcHBlYXIsIHdoZXJlLCB3aGF0XG5cdCAqIHRoZXkgbG9vayBsaWtlIGFuZCBzbyBvbi5cblx0ICpcblx0ICogPGNvZGU+TW91c2V0cmFja2VyPC9jb2RlPiBcImNhcHR1cmVzXCIgdGhlIG1vdXNlIHVzaW5nXG5cdCAqIDxjb2RlPmRvY3VtZW50Lm9ubW91c2Vtb3ZlPC9jb2RlPi5cblx0ICovXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IE1vdXNldHJhY2tlci5cblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBjbGFzcyBUaGUgTW91c2V0cmFja2VyIGNsYXNzLiBUaGlzIG1vbml0b3JzIG1vdXNlIG1vdmVtZW50cyBhbmQgbWFuYWdlcyBhc3NvY2lhdGVkIGhvb2tzLlxuXHQgKi9cblx0Y2xhc3MgTW91c2V0cmFja2VyIHtcblx0XHRjb25zdHJ1Y3RvcigpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSW50ZXJ2YWwgdG8gcmVndWxhcmx5IHJ1biB0aGUgaG9va3MgYW55d2F5LCBpbiBtaWxsaXNlY29uZHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgSW50ZWdlclxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmxvb3BEZWxheSA9IDQwMDtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGltZXIgZm9yIHRoZSBsb29wLlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIFRpbWVyXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudGltZXIgPSBudWxsO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBGbGFnIC0gYXJlIHdlIHN3aXRjaGVkIG9uP1xuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5hY3RpdmUgPSBmYWxzZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogRmxhZyAtIGFyZSB3ZSBwcm9iYWJseSBpbmFjY3VyYXRlLCBpLmUuIG5vdCByZWZsZWN0aW5nIHRoZSBhY3R1YWwgbW91c2UgcG9zaXRpb24/XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBBcnJheSBvZiBob29rIGZ1bmN0aW9ucy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUgQXJyYXlcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5ob29rcyA9IFtdO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBBZGRzIGEgaG9vaywgdG8gYmUgY2FsbGVkIHdoZW4gd2UgZ2V0IGV2ZW50cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IGYgQSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgYXNcblx0XHQgKiA8Y29kZT5mKHgseSk8L2NvZGU+LiBJdCBzaG91bGQgcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gaXRcblx0XHQgKiB3YW50cyB0byBiZSByZW1vdmVkLCBhbmQgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS5cblx0XHQgKi9cblx0XHRhZGRIb29rKGYpIHtcblx0XHRcdHRoaXMuaG9va3MucHVzaChmKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUnVucyBob29rcywgcGFzc2luZyB0aGVtIHRoZSB4XG5cdFx0ICogYW5kIHkgY29vcmRzIG9mIHRoZSBtb3VzZS4gIEhvb2sgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRydWUgYXJlXG5cdFx0ICogcGFzc2VkIHRvIHtAc291cmNlIE1vdXNldHJhY2tlciNyZW1vdmVIb29rc30gZm9yIHJlbW92YWwuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHJ1bkhvb2tzKCkge1xuXHRcdFx0aWYgKCF0aGlzLmhvb2tzIHx8IHRoaXMuaG9va3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGxvZygnTW91c2V0cmFja2VyLnJ1bkhvb2tzOyB3ZSBnb3Qgc29tZSBob29rcyB0byBydW4nKTtcblx0XHRcdGxldCByZW1vdmUgPSBmYWxzZTtcblx0XHRcdGNvbnN0IHJlbW92ZU9iaiA9IHt9O1xuXHRcdFx0Ly8gdGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQgYSBMT1QgLVxuXHRcdFx0Ly8gcHJlLWNhY2hlIHNvbWUgdmFyaWFibGVzXG5cdFx0XHRjb25zdCB7eH0gPSB0aGlzO1xuXHRcdFx0Y29uc3Qge3l9ID0gdGhpcztcblx0XHRcdGNvbnN0IGxlbiA9IHRoaXMuaG9va3MubGVuZ3RoO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0XHQvLyB+IHJ1biB0aGUgaG9vayBmdW5jdGlvbiwgYW5kIHJlbW92ZSBpdCBpZiBpdCByZXR1cm5zIHRydWVcblx0XHRcdFx0aWYgKHRoaXMuaG9va3NbaV0oeCwgeSkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRyZW1vdmUgPSB0cnVlO1xuXHRcdFx0XHRcdHJlbW92ZU9ialtpXSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChyZW1vdmUpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVIb29rcyhyZW1vdmVPYmopO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIGhvb2tzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlT2JqIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgaW5kZXhcblx0XHQgKiBudW1iZXJzIG9mIGZ1bmN0aW9ucyBmb3IgcmVtb3ZhbCwgd2l0aCB2YWx1ZXMgdGhhdCBldmFsdWF0ZSB0byB0cnVlXG5cdFx0ICovXG5cdFx0cmVtb3ZlSG9va3MocmVtb3ZlT2JqKSB7XG5cdFx0XHRjb25zdCBuZXdIb29rcyA9IFtdO1xuXHRcdFx0Y29uc3QgbGVuID0gdGhpcy5ob29rcy5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRcdGlmICghcmVtb3ZlT2JqW2ldKSB7XG5cdFx0XHRcdFx0bmV3SG9va3MucHVzaCh0aGlzLmhvb2tzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5ob29rcyA9IG5ld0hvb2tzO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBFdmVudCBsaXN0ZW5lciBmb3IgbW91c2Ugd2lnZ2xlcy5cblx0XHQgKiBXZSBzaW1wbHkgZ3JhYiB0aGUgZXZlbnQsIHNldCB4IGFuZCB5IGFuZCBydW4gdGhlIGhvb2tzLlxuXHRcdCAqIFRoaXMgbWFrZXMgdGhlIGNwdSBhbGwgaG90IGFuZCBib3RoZXJlZCA6LShcblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtFdmVudH0gZSBNb3VzZW1vdmUgZXZlbnRcblx0XHQgKi9cblx0XHR0cmFjayhlKSB7XG5cdFx0XHQvLyB+IEFwcGFyZW50bHkgdGhpcyBpcyBuZWVkZWQgaW4gSUUuXG5cdFx0XHRlIHx8PSB3aW5kb3cuZXZlbnQ7XG5cdFx0XHRsZXQgeDtcblx0XHRcdGxldCB5O1xuXHRcdFx0aWYgKGUpIHtcblx0XHRcdFx0aWYgKGUucGFnZVgpIHtcblx0XHRcdFx0XHR4ID0gZS5wYWdlWDtcblx0XHRcdFx0XHR5ID0gZS5wYWdlWTtcblx0XHRcdFx0fSBlbHNlIGlmIChlLmNsaWVudFggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsZXQgbGVmdDtcblx0XHRcdFx0XHRsZXQgdG9wO1xuXHRcdFx0XHRcdGNvbnN0IGRvY0VsdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0XHRcdFx0XHRpZiAoZG9jRWx0KSB7XG5cdFx0XHRcdFx0XHRsZWZ0ID0gZG9jRWx0LnNjcm9sbExlZnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGxlZnQgfHw9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LnNjcm9sbExlZnQgfHwgMDtcblx0XHRcdFx0XHRpZiAoZG9jRWx0KSB7XG5cdFx0XHRcdFx0XHR0b3AgPSBkb2NFbHQuc2Nyb2xsVG9wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0b3AgfHw9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuc2Nyb2xsVG9wIHx8IDA7XG5cdFx0XHRcdFx0eCA9IGUuY2xpZW50WCArIGxlZnQ7XG5cdFx0XHRcdFx0eSA9IGUuY2xpZW50WSArIHRvcDtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNldFBvc2l0aW9uKHgsIHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHN0b3JlZCBhbmQgdGFrZXMgYXBwcm9wcmlhdGUgYWN0aW9uLFxuXHRcdCAqIHJ1bm5pbmcgaG9va3MgYXMgYXBwcm9wcmlhdGUuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0ludGVnZXJ9IHgsIHkgU2NyZWVuIGNvb3JkaW5hdGVzIHRvIHNldFxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSB4XG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IHlcblx0XHQgKi9cblx0XHRzZXRQb3NpdGlvbih4LCB5KSB7XG5cdFx0XHR0aGlzLnggPSB4O1xuXHRcdFx0dGhpcy55ID0geTtcblx0XHRcdGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuaG9va3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLmxhc3RIb29rX3ggIT09ICdudW1iZXInKSB7XG5cdFx0XHRcdHRoaXMubGFzdEhvb2tfeCA9IC0xMDA7XG5cdFx0XHRcdHRoaXMubGFzdEhvb2tfeSA9IC0xMDA7XG5cdFx0XHR9XG5cdFx0XHRsZXQgZGlmZiA9ICh0aGlzLmxhc3RIb29rX3ggLSB4KSAqICh0aGlzLmxhc3RIb29rX3kgLSB5KTtcblx0XHRcdGRpZmYgPSBkaWZmID49IDAgPyBkaWZmIDogLWRpZmY7XG5cdFx0XHRpZiAoZGlmZiA+IDEpIHtcblx0XHRcdFx0dGhpcy5sYXN0SG9va194ID0geDtcblx0XHRcdFx0dGhpcy5sYXN0SG9va195ID0geTtcblx0XHRcdFx0aWYgKHRoaXMuZGlydHkpIHtcblx0XHRcdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5ydW5Ib29rcygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhpbmdzIGluIG1vdGlvbiwgdW5sZXNzIHRoZXkgYXJlIGFscmVhZHkgdGhhdCBpcywgcmVnaXN0ZXJpbmcgYW4gZXZlbnQgbGlzdGVuZXIgb25cblx0XHQgKiA8Y29kZT5kb2N1bWVudC5vbm1vdXNlbW92ZTwvY29kZT4uIEEgaGFsZi1oZWFydGVkIGF0dGVtcHQgaXMgbWFkZSB0byBwcmVzZXJ2ZSB0aGUgb2xkIGV2ZW50XG5cdFx0ICogbGlzdGVuZXIgaWYgdGhlcmUgaXMgb25lLlxuXHRcdCAqL1xuXHRcdGVuYWJsZSgpIHtcblx0XHRcdGlmICh0aGlzLmFjdGl2ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFjdGl2ZSA9IHRydWU7XG5cdFx0XHQvLyB+IFNhdmUgdGhlIGN1cnJlbnQgbGlzdGVuZXIgZm9yIG1vdXNlbW92ZSBldmVudHMuIFRoaXMgaXNuJ3QgdG9vXG5cdFx0XHQvLyB+IHJvYnVzdCwgb2YgY291cnNlLlxuXHRcdFx0dGhpcy5zYXZlZExpc3RlbmVyID0gZG9jdW1lbnQub25tb3VzZW1vdmU7XG5cdFx0XHQvLyB+IEdvdHRhIHNhdmUgQHR0e3RoaXN9IGFnYWluIGZvciB0aGUgY2xvc3VyZSwgYW5kIHVzZSBhcHBseSBmb3Jcblx0XHRcdC8vIH4gdGhlIG1lbWJlciBmdW5jdGlvbi5cblx0XHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSAoZSkgPT4ge1xuXHRcdFx0XHRzZWxmLnRyYWNrKGUpO1xuXHRcdFx0fTtcblx0XHRcdGlmICh0aGlzLmxvb3BEZWxheSkge1xuXHRcdFx0XHR0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGxvZygnbG9vcCBkZWxheSBpbiBtb3VzZXRyYWNrZXIgaXMgd29ya2luZycpO1xuXHRcdFx0XHRcdHNlbGYucnVuSG9va3MoKTtcblx0XHRcdFx0fSwgdGhpcy5sb29wRGVsYXkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBEaXNhYmxlcyB0aGUgdHJhY2tlciwgcmVtb3ZpbmcgdGhlIGV2ZW50IGxpc3RlbmVyLlxuXHRcdCAqL1xuXHRcdGRpc2FibGUoKSB7XG5cdFx0XHRpZiAoIXRoaXMuYWN0aXZlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhpcy5zYXZlZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gdGhpcy5zYXZlZExpc3RlbmVyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIGRvY3VtZW50Lm9ubW91c2Vtb3ZlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMudGltZXIpIHtcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IE5hdnBvcHVwLlxuXHQgKiBHZXRzIGEgVUlEIGZvciB0aGUgcG9wdXAgYW5kXG5cdCAqXG5cdCAqIEBwYXJhbSBpbml0IENvbnRydWN0b3Igb2JqZWN0LiBJZiA8Y29kZT5pbml0LmRyYWdnYWJsZTwvY29kZT4gaXMgdHJ1ZSBvciBhYnNlbnQsIHRoZSBwb3B1cCBiZWNvbWVzIGRyYWdnYWJsZS5cblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBjbGFzcyBUaGUgTmF2cG9wdXAgY2xhc3MuIFRoaXMgZ2VuZXJhdGVzIHBvcHVwIGhpbnRzLCBhbmQgZG9lcyBzb21lIG1hbmFnZW1lbnQgb2YgdGhlbS5cblx0ICovXG5cdGNsYXNzIE5hdnBvcHVwIHtcblx0XHRjb25zdHJ1Y3RvcigpIHtcblx0XHRcdC8vIG13Lm5vdGlmeSgnbmV3IE5hdnBvcHVwKGluaXQpJywge3RhZzogJ3BvcHVwcycsIHR5cGU6ICd3YXJuJ30pO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBVSUQgZm9yIGVhY2ggTmF2cG9wdXAgaW5zdGFuY2UuXG5cdFx0XHQgKiBSZWFkLW9ubHkuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgaW50ZWdlclxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnVpZCA9IE5hdnBvcHVwLnVpZCsrO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZWFkLW9ubHkgZmxhZyBmb3IgY3VycmVudCB2aXNpYmlsaXR5IG9mIHRoZSBwb3B1cC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBib29sZWFuXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnZpc2libGUgPSBmYWxzZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogRmxhZyB0byBiZSBzZXQgd2hlbiB3ZSB3YW50IHRvIGNhbmNlbCBhIHByZXZpb3VzIHJlcXVlc3QgdG9cblx0XHRcdCAqIHNob3cgdGhlIHBvcHVwIGluIGEgbGl0dGxlIHdoaWxlLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSBib29sZWFuXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMubm9zaG93ID0gZmFsc2U7XG5cdFx0XHQvKipcblx0XHRcdCAqIENhdGVnb3Jpc2VkIGxpc3Qgb2YgaG9va3MuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHNlZSAjcnVuSG9va3Ncblx0XHRcdCAqIEBzZWUgI2FkZEhvb2tcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5ob29rcyA9IHtcblx0XHRcdFx0Y3JlYXRlOiBbXSxcblx0XHRcdFx0dW5oaWRlOiBbXSxcblx0XHRcdFx0aGlkZTogW10sXG5cdFx0XHR9O1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBsaXN0IG9mIHVuaXF1ZSBJRHMgb2YgaG9vayBmdW5jdGlvbnMsIHRvIGF2b2lkIGR1cGxpY2F0ZXNcblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmhvb2tJZHMgPSB7fTtcblx0XHRcdC8qKlxuXHRcdFx0ICogTGlzdCBvZiBkb3dubG9hZHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3B1cC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUgQXJyYXlcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5kb3dubG9hZHMgPSBbXTtcblx0XHRcdC8qKlxuXHRcdFx0ICogTnVtYmVyIG9mIHVuY29tcGxldGVkIGRvd25sb2Fkcy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSBpbnRlZ2VyXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMucGVuZGluZyA9IG51bGw7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRvbGVyYW5jZSBpbiBwaXhlbHMgd2hlbiBkZXRlY3Rpbmcgd2hldGhlciB0aGUgbW91c2UgaGFzIGxlZnQgdGhlIHBvcHVwLlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIGludGVnZXJcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5mdXp6ID0gNTtcblx0XHRcdC8qKlxuXHRcdFx0ICogRmxhZyB0byB0b2dnbGUgcnVubmluZyB7QHNvdXJjZSAjbGltaXRIb3Jpem9udGFsUG9zaXRpb259IHRvIHJlZ3VsYXRlIHRoZSBwb3B1cCdzIHBvc2l0aW9uLlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIGJvb2xlYW5cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5jb25zdHJhaW5lZCA9IHRydWU7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSBwb3B1cCB3aWR0aCBpbiBwaXhlbHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIGludGVnZXJcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy53aWR0aCA9IDA7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSBwb3B1cCB3aWR0aCBpbiBwaXhlbHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIGludGVnZXJcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5oZWlnaHQgPSAwO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgbWFpbiBjb250ZW50IERJViBlbGVtZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIEhUTUxEaXZFbGVtZW50XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMubWFpbkRpdiA9IG51bGw7XG5cdFx0XHR0aGlzLmNyZWF0ZU1haW5EaXYoKTtcblx0XHRcdC8vXHRpZiAoIWluaXQgfHwgdHlwZW9mIGluaXQucG9wdXBzX2RyYWdnYWJsZT09J3VuZGVmaW5lZCcgfHwgaW5pdC5wb3B1cHNfZHJhZ2dhYmxlKSB7XG5cdFx0XHQvL1x0XHR0aGlzLm1ha2VEcmFnZ2FibGUodHJ1ZSk7XG5cdFx0XHQvL1x0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBSZXRyaWV2ZXMgdGhlIHtAc291cmNlICN2aXNpYmxlfSBhdHRyaWJ1dGUsIGluZGljYXRpbmcgd2hldGhlciB0aGUgcG9wdXAgaXMgY3VycmVudGx5IHZpc2libGUuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSBib29sZWFuXG5cdFx0ICovXG5cdFx0aXNWaXNpYmxlKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmlzaWJsZTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUmVwb3NpdGlvbnMgcG9wdXAgdXNpbmcgQ1NTIHN0eWxlLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge2ludGVnZXJ9IHggeC1jb29yZGluYXRlIChweClcblx0XHQgKiBAcGFyYW0ge2ludGVnZXJ9IHkgeS1jb29yZGluYXRlIChweClcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IG5vTGltaXRIb3IgRG9uJ3QgY2FsbCB7QHNvdXJjZSAjbGltaXRIb3Jpem9udGFsUG9zaXRpb259XG5cdFx0ICovXG5cdFx0cmVwb3NpdGlvbih4LCB5LCBub0xpbWl0SG9yKSB7XG5cdFx0XHRsb2coYHJlcG9zaXRpb24oJHt4fSwke3l9LCR7bm9MaW1pdEhvcn0pYCk7XG5cdFx0XHRpZiAoeCAhPT0gdW5kZWZpbmVkICYmIHggIT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy5sZWZ0ID0geDtcblx0XHRcdH1cblx0XHRcdGlmICh5ICE9PSB1bmRlZmluZWQgJiYgeSAhPT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLnRvcCA9IHk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5sZWZ0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy50b3AgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLm1haW5EaXYuc3R5bGUubGVmdCA9IGAke3RoaXMubGVmdH1weGA7XG5cdFx0XHRcdHRoaXMubWFpbkRpdi5zdHlsZS50b3AgPSBgJHt0aGlzLnRvcH1weGA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW5vTGltaXRIb3IpIHtcblx0XHRcdFx0dGhpcy5saW1pdEhvcml6b250YWxQb3NpdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBQcmV2ZW50cyBwb3B1cHMgZnJvbSBiZWluZyBpbiBzaWxseSBsb2NhdGlvbnMuIEhvcGVmdWxseS5cblx0XHQgKiBTaG91bGQgbm90IGJlIHJ1biBpZiB7QHNvdXJjZSAjY29uc3RyYWluZWR9IGlzIHRydWUuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGxpbWl0SG9yaXpvbnRhbFBvc2l0aW9uKCkge1xuXHRcdFx0aWYgKCF0aGlzLmNvbnN0cmFpbmVkIHx8IHRoaXMudG9vV2lkZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKTtcblx0XHRcdGNvbnN0IHggPSB0aGlzLmxlZnQ7XG5cdFx0XHRjb25zdCB3ID0gdGhpcy53aWR0aDtcblx0XHRcdGNvbnN0IGNXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5jbGllbnRXaWR0aDtcblx0XHRcdC8vXHRsb2coJ2xpbWl0SG9yaXpvbnRhbFBvc2l0aW9uOiB4PScreCtcblx0XHRcdC8vXHRcdFx0JywgdGhpcy5sZWZ0PScgKyB0aGlzLmxlZnQgK1xuXHRcdFx0Ly9cdFx0XHQnLCB0aGlzLndpZHRoPScgKyB0aGlzLndpZHRoICtcblx0XHRcdC8vXHRcdFx0JywgY1dpZHRoPScgKyBjV2lkdGgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR4ICsgdyA+PSBjV2lkdGggfHxcblx0XHRcdFx0KHggPiAwICYmXG5cdFx0XHRcdFx0dGhpcy5tYXhXaWR0aCAmJlxuXHRcdFx0XHRcdHRoaXMud2lkdGggPCB0aGlzLm1heFdpZHRoICYmXG5cdFx0XHRcdFx0dGhpcy5oZWlnaHQgPiB0aGlzLndpZHRoICYmXG5cdFx0XHRcdFx0eCA+IGNXaWR0aCAtIHRoaXMubWF4V2lkdGgpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVGhpcyBpcyBhIHZlcnkgbmFzdHkgaGFjay4gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSFcblx0XHRcdFx0Ly8gV2UgZmluZCB0aGUgXCJuYXR1cmFsXCIgd2lkdGggb2YgdGhlIGRpdiBieSBwb3NpdGlvbmluZyBpdCBhdCB0aGUgZmFyIGxlZnRcblx0XHRcdFx0Ly8gdGhlbiByZXNldCBpdCBzbyB0aGF0IGl0IHNob3VsZCBiZSBmbHVzaCByaWdodCAod2VsbCwgbmVhcmx5KVxuXHRcdFx0XHR0aGlzLm1haW5EaXYuc3R5bGUubGVmdCA9ICctMTAwMDBweCc7XG5cdFx0XHRcdHRoaXMubWFpbkRpdi5zdHlsZS53aWR0aCA9IGAke3RoaXMubWF4V2lkdGh9cHhgO1xuXHRcdFx0XHRjb25zdCBuYXR1cmFsV2lkdGggPSBOdW1iZXIucGFyc2VJbnQodGhpcy5tYWluRGl2Lm9mZnNldFdpZHRoLCAxMCk7XG5cdFx0XHRcdGxldCBuZXdMZWZ0ID0gY1dpZHRoIC0gbmF0dXJhbFdpZHRoIC0gMTtcblx0XHRcdFx0aWYgKG5ld0xlZnQgPCAwKSB7XG5cdFx0XHRcdFx0bmV3TGVmdCA9IDA7XG5cdFx0XHRcdFx0dGhpcy50b29XaWRlID0gdHJ1ZTtcblx0XHRcdFx0fSAvLyBzdGlsbCB1bnN0YWJsZSBmb3IgcmVhbGx5IHdpZGUgcG9wdXBzP1xuXHRcdFx0XHRsb2coXG5cdFx0XHRcdFx0YGxpbWl0SG9yaXpvbnRhbFBvc2l0aW9uOiBtb3ZpbmcgdG8gKCR7bmV3TGVmdH0sJHt0aGlzLnRvcH0pO2AgK1xuXHRcdFx0XHRcdFx0YCBuYXR1cmFsV2lkdGg9JHtuYXR1cmFsV2lkdGh9LCBjbGllbnRXaWR0aD0ke2NXaWR0aH1gXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRoaXMucmVwb3NpdGlvbihuZXdMZWZ0LCBudWxsLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQnJpbmdzIHBvcHVwIHRvIHRoZSB0b3Agb2YgdGhlIHotb3JkZXIuXG5cdFx0ICogV2UgaW5jcmVtZW50IHRoZSB7QHNvdXJjZSAjaGlnaGVzdH0gcHJvcGVydHkgb2YgdGhlIGNvbnRydWN0b3IgaGVyZS5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0cmFpc2UoKSB7XG5cdFx0XHR0aGlzLm1haW5EaXYuc3R5bGUuekluZGV4ID0gTmF2cG9wdXAuaGlnaGVzdCArIDE7XG5cdFx0XHQrK05hdnBvcHVwLmhpZ2hlc3Q7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFNob3dzIHRoZSBwb3B1cCBwcm92aWRlZCB7QHNvdXJjZSAjbm9zaG93fSBpcyBub3QgdHJ1ZS5cblx0XHQgKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiwgYnJpbmdzIHRoZSBwb3B1cCB0byB0aGUgdG9wIG9mIHRoZSB6LW9yZGVyIGFuZCB1bmhpZGVzIGl0LlxuXHRcdCAqL1xuXHRcdHNob3coKSB7XG5cdFx0XHQvLyBkb2N1bWVudC50aXRsZSs9J3MnO1xuXHRcdFx0aWYgKHRoaXMubm9zaG93KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGRvY3VtZW50LnRpdGxlKz0ndCc7XG5cdFx0XHR0aGlzLnJlcG9zaXRpb24oKTtcblx0XHRcdHRoaXMucmFpc2UoKTtcblx0XHRcdHRoaXMudW5oaWRlKCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIENoZWNrcyB0byBzZWUgaWYgdGhlIG1vdXNlIHBvaW50ZXIgaGFzXG5cdFx0ICogc3RhYmlsaXNlZCAoY2hlY2tpbmcgZXZlcnkgPGNvZGU+dGltZTwvY29kZT4vMiBtaWxsaXNlY29uZHMpIGFuZCBydW5zIHRoZVxuXHRcdCAqIHtAc291cmNlICNzaG93fSBtZXRob2QgaWYgaXQgaGFzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lIFRoZSBtaW5pbXVtIHRpbWUgKG1zKSBiZWZvcmUgdGhlIHBvcHVwIG1heSBiZSBzaG93bi5cblx0XHQgKi9cblx0XHRzaG93U29vbklmU3RhYmxlKHRpbWUpIHtcblx0XHRcdGxvZyhgc2hvd1Nvb25JZlN0YWJsZSwgdGltZT0ke3RpbWV9YCk7XG5cdFx0XHRpZiAodGhpcy52aXNpYmxlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMubm9zaG93ID0gZmFsc2U7XG5cdFx0XHQvLyB+IGluaXRpYWxpemUgdGhlc2UgdmFyaWFibGVzIHNvIHRoYXQgd2UgbmV2ZXIgcnVuIEB0dHtzaG93fSBhZnRlclxuXHRcdFx0Ly8gfiBqdXN0IGhhbGYgdGhlIHRpbWVcblx0XHRcdHRoaXMuc3RhYmxlX3ggPSAtMWU0O1xuXHRcdFx0dGhpcy5zdGFibGVfeSA9IC0xZTQ7XG5cdFx0XHRjb25zdCBzdGFibGVTaG93ID0gKCkgPT4ge1xuXHRcdFx0XHRsb2coJ3N0YWJsZVNob3cgY2FsbGVkJyk7XG5cdFx0XHRcdGNvbnN0IG5ld194ID0gTmF2cG9wdXAudHJhY2tlci54O1xuXHRcdFx0XHRjb25zdCBuZXdfeSA9IE5hdnBvcHVwLnRyYWNrZXIueTtcblx0XHRcdFx0Y29uc3QgZHggPSBzZWxmLnN0YWJsZV94IC0gbmV3X3g7XG5cdFx0XHRcdGNvbnN0IGR5ID0gc2VsZi5zdGFibGVfeSAtIG5ld195O1xuXHRcdFx0XHRjb25zdCBmdXp6MiA9IDA7IC8vIHNhdmVkVGhpcy5mdXp6ICogc2F2ZWRUaGlzLmZ1eno7XG5cdFx0XHRcdC8vIGRvY3VtZW50LnRpdGxlICs9ICdbJyArIFtzYXZlZFRoaXMuc3RhYmxlX3gsbmV3X3gsIHNhdmVkVGhpcy5zdGFibGVfeSxuZXdfeSwgZHgsIGR5LCBmdXp6Ml0uam9pbignLCcpICsgJ10gJztcblx0XHRcdFx0aWYgKGR4ICogZHggPD0gZnV6ejIgJiYgZHkgKiBkeSA8PSBmdXp6Mikge1xuXHRcdFx0XHRcdGxvZygnbW91c2UgaXMgc3RhYmxlJyk7XG5cdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbChzZWxmLnNob3dTb29uU3RhYmxlVGltZXIpO1xuXHRcdFx0XHRcdHNlbGYucmVwb3NpdGlvbihuZXdfeCArIDIsIG5ld195ICsgMik7XG5cdFx0XHRcdFx0c2VsZi5zaG93KCk7XG5cdFx0XHRcdFx0c2VsZi5saW1pdEhvcml6b250YWxQb3NpdGlvbigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxmLnN0YWJsZV94ID0gbmV3X3g7XG5cdFx0XHRcdHNlbGYuc3RhYmxlX3kgPSBuZXdfeTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdHRoaXMuc2hvd1Nvb25TdGFibGVUaW1lciA9IHNldEludGVydmFsKHN0YWJsZVNob3csIHRpbWUgLyAyKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUge0Bzb3VyY2UgI25vc2hvd30gZmxhZyBhbmQgaGlkZXMgdGhlIHBvcHVwLiBUaGlzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIGxpbmsgYmVmb3JlXG5cdFx0ICogKG9yIGFmdGVyKSBpdCdzIGFjdHVhbGx5IGJlZW4gZGlzcGxheWVkLlxuXHRcdCAqL1xuXHRcdGJhbmlzaCgpIHtcblx0XHRcdGxvZygnYmFuaXNoIGNhbGxlZCcpO1xuXHRcdFx0Ly8gaGlkZSBhbmQgcHJldmVudCBzaG93aW5nIHdpdGggc2hvd1Nvb24gaW4gdGhlIGZ1dHVyZVxuXHRcdFx0dGhpcy5ub3Nob3cgPSB0cnVlO1xuXHRcdFx0aWYgKHRoaXMuc2hvd1Nvb25TdGFibGVUaW1lcikge1xuXHRcdFx0XHRsb2coJ2NsZWFyaW5nIHNob3dTb29uU3RhYmxlVGltZXInKTtcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnNob3dTb29uU3RhYmxlVGltZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5oaWRlKCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFJ1bnMgaG9va3MgYWRkZWQgd2l0aCB7QHNvdXJjZSAjYWRkSG9va30uXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5IG5hbWUgb2YgdGhlIHtAc291cmNlICNob29rc30gYXJyYXkgLSBvbmUgb2YgJ2NyZWF0ZScsICd1bmhpZGUnLCAnaGlkZSdcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gd2hlbiBDb250cm9scyBleGFjdGx5IHdoZW4gdGhlIGhvb2sgaXMgcnVuOiBlaXRoZXIgJ2JlZm9yZScgb3IgJ2FmdGVyJ1xuXHRcdCAqL1xuXHRcdHJ1bkhvb2tzKGtleSwgd2hlbikge1xuXHRcdFx0aWYgKCF0aGlzLmhvb2tzW2tleV0pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qga2V5SG9va3MgPSB0aGlzLmhvb2tzW2tleV07XG5cdFx0XHRjb25zdCBsZW4gPSBrZXlIb29rcy5sZW5ndGg7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRcdGlmIChrZXlIb29rc1tpXSAmJiBrZXlIb29rc1tpXS53aGVuID09PSB3aGVuICYmIFJlZmxlY3QuYXBwbHkoa2V5SG9va3NbaV0uaG9vaywgdGhpcywgW10pKSB7XG5cdFx0XHRcdFx0Ly8gcmVtb3ZlIHRoZSBob29rXG5cdFx0XHRcdFx0aWYgKGtleUhvb2tzW2ldLmhvb2tJZCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaG9va0lkc1trZXlIb29rc1tpXS5ob29rSWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRrZXlIb29rc1tpXSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIGhvb2sgdG8gdGhlIHBvcHVwLiBIb29rIGZ1bmN0aW9ucyBhcmUgcnVuIHdpdGggPGNvZGU+dGhpczwvY29kZT4gc2V0IHRvIHJlZmVyIHRvIHRoZVxuXHRcdCAqIE5hdnBvcHVwIGluc3RhbmNlLCBhbmQgbm8gYXJndW1lbnRzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaG9vayBUaGUgaG9vayBmdW5jdGlvbi4gRnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRydWUgYXJlIGRlbGV0ZWQuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgbmFtZSBvZiB0aGUge0Bzb3VyY2UgI2hvb2tzfSBhcnJheSAtIG9uZSBvZiAnY3JlYXRlJywgJ3VuaGlkZScsICdoaWRlJ1xuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB3aGVuIENvbnRyb2xzIGV4YWN0bHkgd2hlbiB0aGUgaG9vayBpcyBydW46IGVpdGhlciAnYmVmb3JlJyBvciAnYWZ0ZXInXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVpZCBBIHRydXRoeSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvb2sgZnVuY3Rpb247IGlmIGl0IG1hdGNoZXMgYW5vdGhlciBob29rXG5cdFx0ICogaW4gdGhpcyBwb3NpdGlvbiwgaXQgd29uJ3QgYmUgYWRkZWQgYWdhaW4uXG5cdFx0ICovXG5cdFx0YWRkSG9vayhob29rLCBrZXksIHdoZW4sIHVpZCkge1xuXHRcdFx0d2hlbiB8fD0gJ2FmdGVyJztcblx0XHRcdGlmICghdGhpcy5ob29rc1trZXldKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGlmIHVpZCBpcyBzcGVjaWZpZWQsIGRvbid0IGFkZCBkdXBsaWNhdGVzXG5cdFx0XHRsZXQgaG9va0lkO1xuXHRcdFx0aWYgKHVpZCkge1xuXHRcdFx0XHRob29rSWQgPSBba2V5LCB3aGVuLCB1aWRdLmpvaW4oJ3wnKTtcblx0XHRcdFx0aWYgKHRoaXMuaG9va0lkc1tob29rSWRdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaG9va0lkc1tob29rSWRdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaG9va3Nba2V5XS5wdXNoKHtcblx0XHRcdFx0aG9vayxcblx0XHRcdFx0d2hlbixcblx0XHRcdFx0aG9va0lkLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgdGhlIG1haW4gRElWIGVsZW1lbnQsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgYWN0dWFsIHBvcHVwIGNvbnRlbnQuXG5cdFx0ICogUnVucyBob29rcyB3aXRoIGtleSAnY3JlYXRlJy5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0Y3JlYXRlTWFpbkRpdigpIHtcblx0XHRcdGlmICh0aGlzLm1haW5EaXYpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5ydW5Ib29rcygnY3JlYXRlJywgJ2JlZm9yZScpO1xuXHRcdFx0Y29uc3QgbWFpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHRtYWluRGl2Lm9uY2xpY2sgPSAoZSkgPT4ge1xuXHRcdFx0XHRzZWxmLm9uY2xpY2tMaXN0ZW5lcihlKTtcblx0XHRcdH07XG5cdFx0XHRtYWluRGl2LmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lID8/ICduYXZwb3B1cF9tYWluZGl2Jztcblx0XHRcdG1haW5EaXYuaWQgPSBtYWluRGl2LmNsYXNzTmFtZSArIHRoaXMudWlkO1xuXHRcdFx0bWFpbkRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdFx0XHRtYWluRGl2LnN0eWxlLm1pbldpZHRoID0gJzM1MHB4Jztcblx0XHRcdG1haW5EaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdG1haW5EaXYuY2xhc3NOYW1lID0gJ25hdnBvcHVwJztcblx0XHRcdC8vIGVhc3kgYWNjZXNzIHRvIGphdmFzY3JpcHQgb2JqZWN0IHRocm91Z2ggRE9NIGZ1bmN0aW9uc1xuXHRcdFx0bWFpbkRpdi5uYXZwb3B1cCA9IHRoaXM7XG5cdFx0XHR0aGlzLm1haW5EaXYgPSBtYWluRGl2O1xuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmFwcGVuZChtYWluRGl2KTtcblx0XHRcdHRoaXMucnVuSG9va3MoJ2NyZWF0ZScsICdhZnRlcicpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBDYWxscyB0aGUge0Bzb3VyY2UgI3JhaXNlfSBtZXRob2QuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdG9uY2xpY2tMaXN0ZW5lcigpIHtcblx0XHRcdHRoaXMucmFpc2UoKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogTWFrZXMgdGhlIHBvcHVwIGRyYWdnYWJsZSwgdXNpbmcgYSB7QHNvdXJjZSBEcmFnfSBvYmplY3QuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaGFuZGxlTmFtZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0bWFrZURyYWdnYWJsZShoYW5kbGVOYW1lKSB7XG5cdFx0XHRpZiAoIXRoaXMubWFpbkRpdikge1xuXHRcdFx0XHR0aGlzLmNyZWF0ZU1haW5EaXYoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGRyYWcgPSBuZXcgRHJhZygpO1xuXHRcdFx0aWYgKCFoYW5kbGVOYW1lKSB7XG5cdFx0XHRcdGRyYWcuc3RhcnRDb25kaXRpb24gPSAoZSkgPT4ge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRpZiAoIWUuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGxldCBkcmFnSGFuZGxlO1xuXHRcdFx0aWYgKGhhbmRsZU5hbWUpIHtcblx0XHRcdFx0ZHJhZ0hhbmRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2hhbmRsZU5hbWV9YCk7XG5cdFx0XHR9XG5cdFx0XHRkcmFnSGFuZGxlIHx8PSB0aGlzLm1haW5EaXY7XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdGRyYWcuZW5kSG9vayA9ICh4LCB5KSA9PiB7XG5cdFx0XHRcdE5hdnBvcHVwLnRyYWNrZXIuZGlydHkgPSB0cnVlO1xuXHRcdFx0XHRzZWxmLnJlcG9zaXRpb24oeCwgeSk7XG5cdFx0XHR9O1xuXHRcdFx0ZHJhZy5pbml0KGRyYWdIYW5kbGUsIHRoaXMubWFpbkRpdik7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEhpZGVzIHRoZSBwb3B1cCB1c2luZyBDU1MuIFJ1bnMgaG9va3Mgd2l0aCBrZXkgJ2hpZGUnLlxuXHRcdCAqIFNldHMge0Bzb3VyY2UgI3Zpc2libGV9IGFwcHJvcHJpYXRlbHkuXG5cdFx0ICoge0Bzb3VyY2UgI2JhbmlzaH0gc2hvdWxkIGJlIGNhbGxlZCBleHRlcm5hbGx5IGluc3RlYWQgb2YgdGhpcyBtZXRob2QuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGhpZGUoKSB7XG5cdFx0XHR0aGlzLnJ1bkhvb2tzKCdoaWRlJywgJ2JlZm9yZScpO1xuXHRcdFx0dGhpcy5hYm9ydERvd25sb2FkcygpO1xuXHRcdFx0aWYgKHRoaXMudmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmlzaWJsZSkge1xuXHRcdFx0XHR0aGlzLm1haW5EaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0dGhpcy52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJ1bkhvb2tzKCdoaWRlJywgJ2FmdGVyJyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFNob3dzIHRoZSBwb3B1cCB1c2luZyBDU1MuIFJ1bnMgaG9va3Mgd2l0aCBrZXkgJ3VuaGlkZScuXG5cdFx0ICogU2V0cyB7QHNvdXJjZSAjdmlzaWJsZX0gYXBwcm9wcmlhdGVseS4gICB7QHNvdXJjZSAjc2hvd30gc2hvdWxkIGJlIGNhbGxlZCBleHRlcm5hbGx5IGluc3RlYWQgb2YgdGhpcyBtZXRob2QuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHVuaGlkZSgpIHtcblx0XHRcdHRoaXMucnVuSG9va3MoJ3VuaGlkZScsICdiZWZvcmUnKTtcblx0XHRcdGlmICh0aGlzLnZpc2libGUgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy52aXNpYmxlKSB7XG5cdFx0XHRcdHRoaXMubWFpbkRpdi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG5cdFx0XHRcdHRoaXMudmlzaWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJ1bkhvb2tzKCd1bmhpZGUnLCAnYWZ0ZXInKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgPGNvZGU+aW5uZXJIVE1MPC9jb2RlPiBhdHRyaWJ1dGUgb2YgdGhlIG1haW4gZGl2IGNvbnRhaW5pbmcgdGhlIHBvcHVwIGNvbnRlbnQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbCBUaGUgSFRNTCB0byBzZXQuXG5cdFx0ICovXG5cdFx0c2V0SW5uZXJIVE1MKGh0bWwpIHtcblx0XHRcdHRoaXMubWFpbkRpdi5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBVcGRhdGVzIHRoZSB7QHNvdXJjZSAjd2lkdGh9IGFuZCB7QHNvdXJjZSAjaGVpZ2h0fSBhdHRyaWJ1dGVzIHdpdGggdGhlIENTUyBwcm9wZXJ0aWVzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHR1cGRhdGVEaW1lbnNpb25zKCkge1xuXHRcdFx0dGhpcy53aWR0aCA9IE51bWJlci5wYXJzZUludCh0aGlzLm1haW5EaXYub2Zmc2V0V2lkdGgsIDEwKTtcblx0XHRcdHRoaXMuaGVpZ2h0ID0gTnVtYmVyLnBhcnNlSW50KHRoaXMubWFpbkRpdi5vZmZzZXRIZWlnaHQsIDEwKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQ2hlY2tzIGlmIHRoZSBwb2ludCAoeCx5KSBpcyB3aXRoaW4ge0Bzb3VyY2UgI2Z1enp9IG9mIHRoZVxuXHRcdCAqIHtAc291cmNlICNtYWluRGl2fS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7aW50ZWdlcn0geCB4LWNvb3JkaW5hdGUgKHB4KVxuXHRcdCAqIEBwYXJhbSB7aW50ZWdlcn0geSB5LWNvb3JkaW5hdGUgKHB4KVxuXHRcdCAqIEB0eXBlIGJvb2xlYW5cblx0XHQgKi9cblx0XHRpc1dpdGhpbih4LCB5KSB7XG5cdFx0XHQvLyB+IElmIHdlJ3JlIG5vdCBldmVuIHZpc2libGUsIG5vIHBvaW50IHNob3VsZCBiZSBjb25zaWRlcmVkIGFzXG5cdFx0XHQvLyB+IGJlaW5nIHdpdGhpbiB0aGUgcG9wdXAuXG5cdFx0XHRpZiAoIXRoaXMudmlzaWJsZSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKTtcblx0XHRcdGNvbnN0IGZ1enogPSB0aGlzLmZ1enogfHwgMDtcblx0XHRcdC8vIH4gVXNlIGEgc2ltcGxlIGJveCBtZXRyaWMgaGVyZS5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHggKyBmdXp6ID49IHRoaXMubGVmdCAmJlxuXHRcdFx0XHR4IC0gZnV6eiA8PSB0aGlzLmxlZnQgKyB0aGlzLndpZHRoICYmXG5cdFx0XHRcdHkgKyBmdXp6ID49IHRoaXMudG9wICYmXG5cdFx0XHRcdHkgLSBmdXp6IDw9IHRoaXMudG9wICsgdGhpcy5oZWlnaHRcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYSBkb3dubG9hZCB0byB7QHNvdXJjZSAjZG93bmxvYWRzfS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RG93bmxvYWRlcn0gZG93bmxvYWRcblx0XHQgKi9cblx0XHRhZGREb3dubG9hZChkb3dubG9hZCkge1xuXHRcdFx0aWYgKCFkb3dubG9hZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRvd25sb2Fkcy5wdXNoKGRvd25sb2FkKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogQWJvcnRzIHRoZSBkb3dubG9hZHMgbGlzdGVkIGluIHtAc291cmNlICNkb3dubG9hZHN9LlxuXHRcdCAqXG5cdFx0ICogQHNlZSBEb3dubG9hZGVyI2Fib3J0XG5cdFx0ICovXG5cdFx0YWJvcnREb3dubG9hZHMoKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGQgb2YgdGhpcy5kb3dubG9hZHMpIHtcblx0XHRcdFx0aWYgKGQgJiYgZC5hYm9ydCkge1xuXHRcdFx0XHRcdGQuYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5kb3dubG9hZHMgPSBbXTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIEEgVUlEIGZvciBlYWNoIE5hdnBvcHVwLiBUaGlzIGNvbnN0cnVjdG9yIHByb3BlcnR5IGlzIGp1c3QgYSBjb3VudGVyLlxuXHQgKlxuXHQgKiBAdHlwZSBpbnRlZ2VyXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHROYXZwb3B1cC51aWQgPSAwO1xuXHQvKipcblx0ICogQ291bnRlciBpbmRpY2F0aW5nIHRoZSB6LW9yZGVyIG9mIHRoZSBcImhpZ2hlc3RcIiBwb3B1cC5cblx0ICogV2Ugc3RhcnQgdGhlIHotaW5kZXggYXQgMTAwMCBzbyB0aGF0IHBvcHVwcyBhcmUgYWJvdmUgZXZlcnl0aGluZ1xuXHQgKiBlbHNlIG9uIHRoZSBzY3JlZW4uXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB0eXBlIGludGVnZXJcblx0ICovXG5cdE5hdnBvcHVwLmhpZ2hlc3QgPSAxMDAwO1xuXHQvKipcblx0ICogQSB7QHNvdXJjZSBNb3VzZXRyYWNrZXJ9IGluc3RhbmNlIHdoaWNoIGlzIGEgcHJvcGVydHkgb2YgdGhlIGNvbnN0cnVjdG9yIChwc2V1ZG8tZ2xvYmFsKS5cblx0ICovXG5cdE5hdnBvcHVwLnRyYWNrZXIgPSBuZXcgTW91c2V0cmFja2VyKCk7XG5cdC8vIEVOREZJTEU6IG5hdnBvcHVwLmpzXG5cdC8vIFNUQVJURklMRTogZGlmZi5qc1xuXHQvKipcblx0ICogSmF2YXNjcmlwdCBEaWZmIEFsZ29yaXRobSBCeSBKb2huIFJlc2lnIChodHRwOi8vZWpvaG4ub3JnLykgYW5kIEx1cGluXG5cdCAqXG5cdCAqIE1vcmUgSW5mbzogaHR0cDovL2Vqb2huLm9yZy9wcm9qZWN0cy9qYXZhc2NyaXB0LWRpZmYtYWxnb3JpdGhtL1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ1tdfSB4XG5cdCAqL1xuXHRjb25zdCBkZWxGbXQgPSAoeCkgPT4ge1xuXHRcdGlmICh4Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gYDxkZWwgY2xhc3M9J3BvcHVwRGlmZic+JHt4LmpvaW4oJycpfTwvZGVsPmA7XG5cdH07XG5cdGNvbnN0IGluc0ZtdCA9ICh4KSA9PiB7XG5cdFx0aWYgKHgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdHJldHVybiBgPGlucyBjbGFzcz0ncG9wdXBEaWZmJz4ke3guam9pbignJyl9PC9pbnM+YDtcblx0fTtcblx0Y29uc3QgY291bnRDcm9zc2luZ3MgPSAoYSwgYiwgaSwgZWplY3QpID0+IHtcblx0XHQvLyBjb3VudCB0aGUgY3Jvc3NpbmdzIG9uIHRoZSBlZGdlIHN0YXJ0aW5nIGF0IGJbaV1cblx0XHRpZiAoIWJbaV0ucm93ICYmIGJbaV0ucm93ICE9PSAwKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGxldCBjb3VudCA9IDA7XG5cdFx0Zm9yIChjb25zdCBbaiwgZWxlbWVudF0gb2YgYS5lbnRyaWVzKCkpIHtcblx0XHRcdGlmICghZWxlbWVudC5yb3cgJiYgZWxlbWVudC5yb3cgIT09IDApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKGogLSBiW2ldLnJvdykgKiAoaSAtIGVsZW1lbnQucm93KSA+IDApIHtcblx0XHRcdFx0aWYgKGVqZWN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNvdW50O1xuXHR9O1xuXHRjb25zdCBzaG9ydGVuRGlmZlN0cmluZyA9IGZ1bmN0aW9uIHNob3J0ZW5EaWZmU3RyaW5nKHN0ciwgY29udGV4dCkge1xuXHRcdGNvbnN0IHJlID0gLyg8ZGVsW1xcU1xcc10qPzxcXC9kZWw+fDxpbnNbXFxTXFxzXSo/PFxcL2lucz4pLztcblx0XHRjb25zdCBzcGxpdHRlZCA9IHN0ci5zcGxpdChyZSk7XG5cdFx0bGV0IHJldCA9IFsnJ107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdHRlZC5sZW5ndGg7IGkgKz0gMikge1xuXHRcdFx0aWYgKHNwbGl0dGVkW2ldLmxlbmd0aCA8IDIgKiBjb250ZXh0KSB7XG5cdFx0XHRcdHJldFtyZXQubGVuZ3RoIC0gMV0gKz0gc3BsaXR0ZWRbaV07XG5cdFx0XHRcdGlmIChpICsgMSA8IHNwbGl0dGVkLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJldFtyZXQubGVuZ3RoIC0gMV0gKz0gc3BsaXR0ZWRbaSArIDFdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0cmV0W3JldC5sZW5ndGggLSAxXSArPSBzcGxpdHRlZFtpXS5zbGljZSgwLCBNYXRoLm1heCgwLCBjb250ZXh0KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGkgKyAxIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goc3BsaXR0ZWRbaV0uc2xpY2UoTWF0aC5tYXgoMCwgc3BsaXR0ZWRbaV0ubGVuZ3RoIC0gY29udGV4dCkpICsgc3BsaXR0ZWRbaSArIDFdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAocmV0Lmxlbmd0aCA+IDAgJiYgIXJldFswXSkge1xuXHRcdFx0cmV0ID0gcmV0LnNsaWNlKDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHRjb25zdCBkaWZmU3RyaW5nID0gKG8sIG4pID0+IHtcblx0XHQvLyAgV2UgbmVlZCB0byBzcGxpdCB0aGUgc3RyaW5ncyBvIGFuZCBuIGZpcnN0LCBhbmQgZW50aWZ5KCkgdGhlIHBhcnRzXG5cdFx0Ly8gIGluZGl2aWR1YWxseSwgc28gdGhhdCB0aGUgSFRNTCBlbnRpdGllcyBhcmUgbmV2ZXIgY3V0IGFwYXJ0LiAoQXhlbEJvbGR0KVxuXHRcdGxldCBpO1xuXHRcdGNvbnN0IG9TcGxpdHRlZCA9IG8uc3BsaXQoL1xcYi8pO1xuXHRcdGNvbnN0IG5TcGxpdHRlZCA9IG4uc3BsaXQoL1xcYi8pO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBvU3BsaXR0ZWQubGVuZ3RoOyArK2kpIHtcblx0XHRcdG9TcGxpdHRlZFtpXSA9IG9TcGxpdHRlZFtpXS5lbnRpZnkoKTtcblx0XHR9XG5cdFx0Zm9yIChpID0gMDsgaSA8IG5TcGxpdHRlZC5sZW5ndGg7ICsraSkge1xuXHRcdFx0blNwbGl0dGVkW2ldID0gblNwbGl0dGVkW2ldLmVudGlmeSgpO1xuXHRcdH1cblx0XHRjb25zdCBvdXQgPSBkaWZmKG9TcGxpdHRlZCwgblNwbGl0dGVkKTtcblx0XHRsZXQgc3RyID0gJyc7XG5cdFx0bGV0IGFjYyA9IFtdOyAvLyBhY2N1bXVsYXRvciBmb3IgcHJldHRpZXIgb3V0cHV0XG5cblx0XHQvLyBjcm9zc2luZyBwYWlyaW5ncyAtLSBlZyAnQSBCJyB2cyAnQiBBJyAtLSBjYXVzZSBwcm9ibGVtcywgc28gbGV0J3MgaXJvbiB0aGVtIG91dFxuXHRcdC8vIHRoaXMgZG9lc24ndCBhbHdheXMgZG8gdGhpbmdzIG9wdGltYWxseSBidXQgaXQgc2hvdWxkIGJlIGZhc3QgZW5vdWdoXG5cdFx0bGV0IG1heE91dHB1dFBhaXIgPSAwO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBvdXQubi5sZW5ndGg7ICsraSkge1xuXHRcdFx0aWYgKG91dC5uW2ldLnBhaXJlZCkge1xuXHRcdFx0XHRpZiAobWF4T3V0cHV0UGFpciA+IG91dC5uW2ldLnJvdykge1xuXHRcdFx0XHRcdC8vIHRhbmdsZSAtIGRlbGV0ZSBwYWlyaW5nXG5cdFx0XHRcdFx0b3V0Lm9bb3V0Lm5baV0ucm93XSA9IG91dC5vW291dC5uW2ldLnJvd10udGV4dDtcblx0XHRcdFx0XHRvdXQubltpXSA9IG91dC5uW2ldLnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG1heE91dHB1dFBhaXIgPCBvdXQubltpXS5yb3cpIHtcblx0XHRcdFx0XHRtYXhPdXRwdXRQYWlyID0gb3V0Lm5baV0ucm93O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIG91dHB1dCB0aGUgc3R1ZmYgcHJlY2VkaW5nIHRoZSBmaXJzdCBwYWlyZWQgb2xkIGxpbmVcblx0XHRmb3IgKGkgPSAwOyBpIDwgb3V0Lm8ubGVuZ3RoICYmICFvdXQub1tpXS5wYWlyZWQ7ICsraSkge1xuXHRcdFx0YWNjLnB1c2gob3V0Lm9baV0pO1xuXHRcdH1cblx0XHRzdHIgKz0gZGVsRm10KGFjYyk7XG5cdFx0YWNjID0gW107XG5cdFx0Ly8gbWFpbiBsb29wXG5cdFx0Zm9yIChpID0gMDsgaSA8IG91dC5uLmxlbmd0aDsgKytpKSB7XG5cdFx0XHQvLyBvdXRwdXQgdW5wYWlyZWQgbmV3IFwibGluZXNcIlxuXHRcdFx0d2hpbGUgKGkgPCBvdXQubi5sZW5ndGggJiYgIW91dC5uW2ldLnBhaXJlZCkge1xuXHRcdFx0XHRhY2MucHVzaChvdXQubltpKytdKTtcblx0XHRcdH1cblx0XHRcdHN0ciArPSBpbnNGbXQoYWNjKTtcblx0XHRcdGFjYyA9IFtdO1xuXHRcdFx0aWYgKGkgPCBvdXQubi5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gdGhpcyBuZXcgXCJsaW5lXCIgaXMgcGFpcmVkIHdpdGggdGhlIChvdXQubltpXS5yb3cpdGggb2xkIFwibGluZVwiXG5cdFx0XHRcdHN0ciArPSBvdXQubltpXS50ZXh0O1xuXHRcdFx0XHQvLyBvdXRwdXQgdW5wYWlyZWQgb2xkIHJvd3Mgc3RhcnRpbmcgYWZ0ZXIgdGhpcyBuZXcgbGluZSdzIHBhcnRuZXJcblx0XHRcdFx0bGV0IG0gPSBvdXQubltpXS5yb3cgKyAxO1xuXHRcdFx0XHR3aGlsZSAobSA8IG91dC5vLmxlbmd0aCAmJiAhb3V0Lm9bbV0ucGFpcmVkKSB7XG5cdFx0XHRcdFx0YWNjLnB1c2gob3V0Lm9bbSsrXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RyICs9IGRlbEZtdChhY2MpO1xuXHRcdFx0XHRhY2MgPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHN0cjtcblx0fTtcblx0Ly8gc2VlIHtAbGluayBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6R2xvYmFsX09iamVjdHM6T2JqZWN0fVxuXHQvLyBGSVhNRTogdXNlIG9iai5oYXNPd25Qcm9wZXJ0eSBpbnN0ZWFkIG9mIHRoaXMga2x1ZGdlIVxuXHRjb25zdCBqc1Jlc2VydmVkUHJvcGVydGllcyA9IG5ldyBSZWdFeHAoXG5cdFx0J14oY29uc3RydWN0b3J8cHJvdG90eXBlfF9fKChkZWZpbmV8bG9va3VwKVtHU11ldHRlcilfXycgK1xuXHRcdFx0J3xldmFsfGhhc093blByb3BlcnR5fHByb3BlcnR5SXNFbnVtZXJhYmxlJyArXG5cdFx0XHQnfHRvKFNvdXJjZXxTdHJpbmd8TG9jYWxlU3RyaW5nKXwodW4pP3dhdGNofHZhbHVlT2YpJCdcblx0KTtcblx0Y29uc3QgZGlmZkJ1Z0FsZXJ0ID0gZnVuY3Rpb24gZGlmZkJ1Z0FsZXJ0KHdvcmQpIHtcblx0XHRpZiAoIWRpZmZCdWdBbGVydC5saXN0W3dvcmRdKSB7XG5cdFx0XHRkaWZmQnVnQWxlcnQubGlzdFt3b3JkXSA9IDE7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeShgQmFkIHdvcmQ6ICR7d29yZH1cXG5cXG5QbGVhc2UgcmVwb3J0IHRoaXMgYnVnLmAsIHt0YWc6ICdwb3B1cHMnLCB0eXBlOiAnZXJyb3InfSk7XG5cdFx0fVxuXHR9O1xuXHRkaWZmQnVnQWxlcnQubGlzdCA9IHt9O1xuXHRjb25zdCBtYWtlRGlmZkhhc2h0YWJsZSA9IChzcmMpID0+IHtcblx0XHRjb25zdCByZXQgPSB7fTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGpzUmVzZXJ2ZWRQcm9wZXJ0aWVzLnRlc3Qoc3JjW2ldKSkge1xuXHRcdFx0XHRzcmNbaV0gKz0gJzwhLS0gLS0+Jztcblx0XHRcdH1cblx0XHRcdHJldFtzcmNbaV1dID8/PSBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldFtzcmNbaV1dLnB1c2goaSk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0ZGlmZkJ1Z0FsZXJ0KHNyY1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IGRpZmYgPSAobywgbikgPT4ge1xuXHRcdC8vIHBhc3MgMTogbWFrZSBoYXNodGFibGUgbnMgd2l0aCBuZXcgcm93cyBhcyBrZXlzXG5cdFx0Y29uc3QgbnMgPSBtYWtlRGlmZkhhc2h0YWJsZShuKTtcblx0XHQvLyBwYXNzIDI6IG1ha2UgaGFzaHRhYmxlIG9zIHdpdGggb2xkIHJvd3MgYXMga2V5c1xuXHRcdGNvbnN0IG9zID0gbWFrZURpZmZIYXNodGFibGUobyk7XG5cdFx0Ly8gcGFzcyAzOiBwYWlyIHVuaXF1ZSBuZXcgcm93cyBhbmQgbWF0Y2hpbmcgdW5pcXVlIG9sZCByb3dzXG5cdFx0bGV0IGk7XG5cdFx0Zm9yIChpIGluIG5zKSB7XG5cdFx0XHRpZiAobnNbaV0ubGVuZ3RoID09PSAxICYmIG9zW2ldICYmIG9zW2ldLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRuW25zW2ldWzBdXSA9IHtcblx0XHRcdFx0XHR0ZXh0OiBuW25zW2ldWzBdXSxcblx0XHRcdFx0XHRyb3c6IG9zW2ldWzBdLFxuXHRcdFx0XHRcdHBhaXJlZDogdHJ1ZSxcblx0XHRcdFx0fTtcblx0XHRcdFx0b1tvc1tpXVswXV0gPSB7XG5cdFx0XHRcdFx0dGV4dDogb1tvc1tpXVswXV0sXG5cdFx0XHRcdFx0cm93OiBuc1tpXVswXSxcblx0XHRcdFx0XHRwYWlyZWQ6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHBhc3MgNDogcGFpciBtYXRjaGluZyByb3dzIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBwYWlyZWQgcm93cyAobm90IG5lY2Vzc2FyaWx5IHVuaXF1ZSlcblx0XHRmb3IgKGkgPSAwOyBpIDwgbi5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bltpXS5wYWlyZWQgJiZcblx0XHRcdFx0IW5baSArIDFdLnBhaXJlZCAmJlxuXHRcdFx0XHRuW2ldLnJvdyArIDEgPCBvLmxlbmd0aCAmJlxuXHRcdFx0XHQhb1tuW2ldLnJvdyArIDFdLnBhaXJlZCAmJlxuXHRcdFx0XHRuW2kgKyAxXSA9PT0gb1tuW2ldLnJvdyArIDFdXG5cdFx0XHQpIHtcblx0XHRcdFx0bltpICsgMV0gPSB7XG5cdFx0XHRcdFx0dGV4dDogbltpICsgMV0sXG5cdFx0XHRcdFx0cm93OiBuW2ldLnJvdyArIDEsXG5cdFx0XHRcdFx0cGFpcmVkOiB0cnVlLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvW25baV0ucm93ICsgMV0gPSB7XG5cdFx0XHRcdFx0dGV4dDogb1tuW2ldLnJvdyArIDFdLFxuXHRcdFx0XHRcdHJvdzogaSArIDEsXG5cdFx0XHRcdFx0cGFpcmVkOiB0cnVlLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBwYXNzIDU6IHBhaXIgbWF0Y2hpbmcgcm93cyBpbW1lZGlhdGVseSBwcmVjZWRpbmcgcGFpcmVkIHJvd3MgKG5vdCBuZWNlc3NhcmlseSB1bmlxdWUpXG5cdFx0Zm9yIChpID0gbi5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5baV0ucGFpcmVkICYmXG5cdFx0XHRcdCFuW2kgLSAxXS5wYWlyZWQgJiZcblx0XHRcdFx0bltpXS5yb3cgPiAwICYmXG5cdFx0XHRcdCFvW25baV0ucm93IC0gMV0ucGFpcmVkICYmXG5cdFx0XHRcdG5baSAtIDFdID09PSBvW25baV0ucm93IC0gMV1cblx0XHRcdCkge1xuXHRcdFx0XHRuW2kgLSAxXSA9IHtcblx0XHRcdFx0XHR0ZXh0OiBuW2kgLSAxXSxcblx0XHRcdFx0XHRyb3c6IG5baV0ucm93IC0gMSxcblx0XHRcdFx0XHRwYWlyZWQ6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHRcdG9bbltpXS5yb3cgLSAxXSA9IHtcblx0XHRcdFx0XHR0ZXh0OiBvW25baV0ucm93IC0gMV0sXG5cdFx0XHRcdFx0cm93OiBpIC0gMSxcblx0XHRcdFx0XHRwYWlyZWQ6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRvLFxuXHRcdFx0bixcblx0XHR9O1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBkaWZmLmpzXG5cdC8vIFNUQVJURklMRTogaW5pdC5qc1xuXHRjb25zdCBzZXRTaXRlSW5mbyA9ICgpID0+IHtcblx0XHRpZiAod2luZG93LnBvcHVwTG9jYWxEZWJ1Zykge1xuXHRcdFx0cGcud2lraS5ob3N0bmFtZSA9ICdlbi53aWtpcGVkaWEub3JnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGcud2lraS5ob3N0bmFtZSA9IGxvY2F0aW9uLmhvc3RuYW1lOyAvLyB1c2UgaW4gcHJlZmVyZW5jZSB0byBsb2NhdGlvbi5ob3N0bmFtZSBmb3IgZmxleGliaWxpdHkgKD8pXG5cdFx0fVxuXHRcdHBnLndpa2kud2lraW1lZGlhID1cblx0XHRcdC8od2lraShbbXBdZWRpYXxzb3VyY2V8Ym9va3N8bmV3c3xxdW90ZXx2ZXJzaXR5fHNwZWNpZXN8dm95YWdlfGRhdGEpfG1ldGF3aWtpfHdpa3Rpb25hcnl8bWVkaWF3aWtpKVxcLm9yZy8udGVzdChcblx0XHRcdFx0cGcud2lraS5ob3N0bmFtZVxuXHRcdFx0KTtcblx0XHRwZy53aWtpLndpa2lhID0gL1xcLndpa2lhXFwuY29tJC9pLnRlc3QocGcud2lraS5ob3N0bmFtZSk7XG5cdFx0cGcud2lraS5pc0xvY2FsID0gcGcud2lraS5ob3N0bmFtZS5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKTtcblx0XHRwZy53aWtpLmNvbW1vbnMgPVxuXHRcdFx0cGcud2lraS53aWtpbWVkaWEgJiYgcGcud2lraS5ob3N0bmFtZSAhPT0gJ2NvbW1vbnMud2lraW1lZGlhLm9yZycgPyAnY29tbW9ucy53aWtpbWVkaWEub3JnJyA6IG51bGw7XG5cdFx0cGcud2lraS5sYW5nID0gbXcuY29uZmlnLmdldCgnd2dDb250ZW50TGFuZ3VhZ2UnKTtcblx0XHRjb25zdCBwb3J0ID0gbG9jYXRpb24ucG9ydCA/IGA6JHtsb2NhdGlvbi5wb3J0fWAgOiAnJztcblx0XHRwZy53aWtpLnNpdGViYXNlID0gcGcud2lraS5ob3N0bmFtZSArIHBvcnQ7XG5cdH07XG5cdGNvbnN0IHNldFVzZXJJbmZvID0gKCkgPT4ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGxpc3Q6ICd1c2VycycsXG5cdFx0XHR1c3VzZXJzOiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyksXG5cdFx0XHR1c3Byb3A6ICdyaWdodHMnLFxuXHRcdH07XG5cdFx0cGcudXNlci5jYW5SZXZpZXcgPSBmYWxzZTtcblx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBSZXZpZXcnKSkge1xuXHRcdFx0Z2V0TXdBcGkoKVxuXHRcdFx0XHQuZ2V0KHBhcmFtcylcblx0XHRcdFx0LmRvbmUoKGRhdGEpID0+IHtcblx0XHRcdFx0XHRjb25zdCBbe3JpZ2h0c31dID0gZGF0YS5xdWVyeS51c2Vycztcblx0XHRcdFx0XHRwZy51c2VyLmNhblJldmlldyA9IHJpZ2h0cy5pbmNsdWRlcygncmV2aWV3Jyk7IC8vIFRPRE86IFNob3VsZCBpdCBiZSBhIGdldFZhbHVlT2YoJ1Jldmlld1JpZ2h0JykgP1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IGZldGNoU3BlY2lhbFBhZ2VOYW1lcyA9ICgpID0+IHtcblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdG1heGFnZTogMzYwMCxcblx0XHRcdG1ldGE6ICdzaXRlaW5mbycsXG5cdFx0XHRzaXByb3A6ICdzcGVjaWFscGFnZWFsaWFzZXMnLFxuXHRcdFx0Ly8gY2FjaGUgZm9yIGFuIGhvdXJcblx0XHRcdHVzZWxhbmc6ICdjb250ZW50Jyxcblx0XHR9O1xuXHRcdHJldHVybiBnZXRNd0FwaSgpXG5cdFx0XHQuZ2V0KHBhcmFtcylcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdHBnLndpa2kuc3BlY2lhbHBhZ2VhbGlhc2VzID0gZGF0YS5xdWVyeS5zcGVjaWFscGFnZWFsaWFzZXM7XG5cdFx0XHR9KTtcblx0fTtcblx0Y29uc3Qgc2V0VGl0bGVCYXNlID0gKCkgPT4ge1xuXHRcdGNvbnN0IHByb3RvY29sID0gd2luZG93LnBvcHVwTG9jYWxEZWJ1ZyA/ICdodHRwOicgOiBsb2NhdGlvbi5wcm90b2NvbDtcblx0XHRwZy53aWtpLmFydGljbGVQYXRoID0gbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpLnJlcGxhY2UoL1xcL1xcJDEvLCAnJyk7IC8vIGFzIGluIGh0dHA6Ly9zb21lLnRoaW5nLmNvbS93aWtpL0FydGljbGVcblx0XHRwZy53aWtpLmJvdEludGVyZmFjZVBhdGggPSBtdy5jb25maWcuZ2V0KCd3Z1NjcmlwdCcpO1xuXHRcdHBnLndpa2kuQVBJUGF0aCA9IGAke213LmNvbmZpZy5nZXQoJ3dnU2NyaXB0UGF0aCcpfS9hcGkucGhwYDtcblx0XHQvLyBkZWZhdWx0IG1lZGlhd2lraSBzZXR0aW5nIGlzIHBhdGhzIGxpa2UgaHR0cDovL3NvbWUudGhpbmcuY29tL2FydGljbGVQYXRoL2luZGV4LnBocD90aXRsZT1mb29cblx0XHRjb25zdCB0aXRsZXRhaWwgPSBgJHtwZy53aWtpLmJvdEludGVyZmFjZVBhdGh9P3RpdGxlPWA7XG5cdFx0Ly8gbGV0IHRpdGxldGFpbDIgPSBqb2luUGF0aChbcGcud2lraS5ib3RJbnRlcmZhY2VQYXRoLCAnd2lraS5waHRtbD90aXRsZT0nXSk7XG5cdFx0Ly8gb3RoZXIgc2l0ZXMgbWF5IG5lZWQgdG8gYWRkIGNvZGUgaGVyZSB0byBzZXQgdGl0bGV0YWlsIGRlcGVuZGluZyBvbiBob3cgdGhlaXIgdXJscyB3b3JrXG5cdFx0cGcud2lraS50aXRsZWJhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5zaXRlYmFzZX0ke3RpdGxldGFpbH1gO1xuXHRcdC8vIHBnLndpa2kudGl0bGViYXNlMiAgPSBwcm90b2NvbCArICcvLycgKyBqb2luUGF0aChbcGcud2lraS5zaXRlYmFzZSwgdGl0bGV0YWlsMl0pO1xuXHRcdHBnLndpa2kud2lraWJhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5zaXRlYmFzZX0ke3BnLndpa2kuYm90SW50ZXJmYWNlUGF0aH1gO1xuXHRcdHBnLndpa2kuYXBpd2lraWJhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5zaXRlYmFzZX0ke3BnLndpa2kuQVBJUGF0aH1gO1xuXHRcdHBnLndpa2kuYXJ0aWNsZWJhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5zaXRlYmFzZX0ke3BnLndpa2kuYXJ0aWNsZVBhdGh9YDtcblx0XHRwZy53aWtpLmNvbW1vbnNiYXNlID0gYCR7cHJvdG9jb2x9Ly8ke3BnLndpa2kuY29tbW9uc30ke3BnLndpa2kuYm90SW50ZXJmYWNlUGF0aH1gO1xuXHRcdHBnLndpa2kuYXBpY29tbW9uc2Jhc2UgPSBgJHtwcm90b2NvbH0vLyR7cGcud2lraS5jb21tb25zfSR7cGcud2lraS5BUElQYXRofWA7XG5cdFx0cGcucmUuYmFzZW5hbWVzID0gbmV3IFJlZ0V4cChgXigke21hcChsaXRlcmFsaXplUmVnZXgsIFtwZy53aWtpLnRpdGxlYmFzZSwgcGcud2lraS5hcnRpY2xlYmFzZV0pLmpvaW4oJ3wnKX0pYCk7XG5cdH07XG5cdC8vIEdsb2JhbCByZWdleHBzXG5cdGNvbnN0IHNldE1haW5SZWdleCA9ICgpID0+IHtcblx0XHRjb25zdCByZVN0YXJ0ID0gJ1teOl0qOi8vJztcblx0XHRsZXQgcHJlVGl0bGVzID0gYCR7bGl0ZXJhbGl6ZVJlZ2V4KG13LmNvbmZpZy5nZXQoJ3dnU2NyaXB0UGF0aCcpKX0vKD86aW5kZXhbLl1waHB8d2lraVsuXXBodG1sKVs/XXRpdGxlPWA7XG5cdFx0cHJlVGl0bGVzICs9IGB8JHtsaXRlcmFsaXplUmVnZXgoYCR7cGcud2lraS5hcnRpY2xlUGF0aH0vYCl9YDtcblx0XHRjb25zdCByZUVuZCA9IGAoJHtwcmVUaXRsZXN9KShbXiY/I10qKVteI10qKD86IyguKykpP2A7XG5cdFx0cGcucmUubWFpbiA9IG5ldyBSZWdFeHAocmVTdGFydCArIGxpdGVyYWxpemVSZWdleChwZy53aWtpLnNpdGViYXNlKSArIHJlRW5kKTtcblx0fTtcblx0Y29uc3QgYnVpbGRTcGVjaWFsUGFnZUdyb3VwID0gKHNwZWNpYWxQYWdlT2JqKSA9PiB7XG5cdFx0Y29uc3QgdmFyaWFudHMgPSBbXTtcblx0XHR2YXJpYW50cy5wdXNoKFxuXHRcdFx0bXcudXRpbC5lc2NhcGVSZWdFeHAoc3BlY2lhbFBhZ2VPYmoucmVhbG5hbWUpLFxuXHRcdFx0bXcudXRpbC5lc2NhcGVSZWdFeHAoZW5jb2RlVVJJKHNwZWNpYWxQYWdlT2JqLnJlYWxuYW1lKSlcblx0XHQpO1xuXHRcdGZvciAoY29uc3QgYWxpYXMgb2Ygc3BlY2lhbFBhZ2VPYmouYWxpYXNlcykge1xuXHRcdFx0dmFyaWFudHMucHVzaChtdy51dGlsLmVzY2FwZVJlZ0V4cChhbGlhcyksIG13LnV0aWwuZXNjYXBlUmVnRXhwKGVuY29kZVVSSShhbGlhcykpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhcmlhbnRzLmpvaW4oJ3wnKTtcblx0fTtcblx0Y29uc3Qgc2V0UmVnZXhwcyA9ICgpID0+IHtcblx0XHRzZXRNYWluUmVnZXgoKTtcblx0XHRjb25zdCBzcCA9IG5zUmUocGcubnNTcGVjaWFsSWQpO1xuXHRcdHBnLnJlLnVybE5vUG9wdXAgPSBuZXcgUmVnRXhwKGAoKHRpdGxlPXwvKSR7c3B9KD86JTNBfDopfHNlY3Rpb249WzAtOV18XiMkKWApO1xuXHRcdGZvciAoY29uc3Qgc3BlY2lhbHBhZ2Ugb2YgcGcud2lraS5zcGVjaWFscGFnZWFsaWFzZXMpIHtcblx0XHRcdHN3aXRjaCAoc3BlY2lhbHBhZ2UucmVhbG5hbWUpIHtcblx0XHRcdFx0Y2FzZSAnQ29udHJpYnV0aW9ucyc6XG5cdFx0XHRcdFx0cGcucmUuY29udHJpYnMgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0YCh0aXRsZT18Lykke3NwfSg/OiUzQXw6KSg/OiR7YnVpbGRTcGVjaWFsUGFnZUdyb3VwKHNwZWNpYWxwYWdlKX0pYCArXG5cdFx0XHRcdFx0XHRcdGAoJnRhcmdldD18L3wvJHtuc1JlKHBnLm5zVXNlcklkKX06KSguKilgLFxuXHRcdFx0XHRcdFx0J2knXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnRGlmZic6XG5cdFx0XHRcdFx0cGcucmUuc3BlY2lhbGRpZmYgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0YC8ke3NwfSg/OiUzQXw6KSg/OiR7YnVpbGRTcGVjaWFsUGFnZUdyb3VwKHNwZWNpYWxwYWdlKX0pLyhbXj8jXSopYCxcblx0XHRcdFx0XHRcdCdpJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0VtYWlsdXNlcic6XG5cdFx0XHRcdFx0cGcucmUuZW1haWwgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0YCh0aXRsZT18Lykke3NwfSg/OiUzQXw6KSg/OiR7YnVpbGRTcGVjaWFsUGFnZUdyb3VwKHNwZWNpYWxwYWdlKX0pYCArXG5cdFx0XHRcdFx0XHRcdGAoJnRhcmdldD18L3wvKD86JHtuc1JlKHBnLm5zVXNlcklkKX06KT8pKC4qKWAsXG5cdFx0XHRcdFx0XHQnaSdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdXaGF0bGlua3NoZXJlJzpcblx0XHRcdFx0XHRwZy5yZS5iYWNrbGlua3MgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0YCh0aXRsZT18Lykke3NwfSg/OiUzQXw6KSg/OiR7YnVpbGRTcGVjaWFsUGFnZUdyb3VwKHNwZWNpYWxwYWdlKX0pKCZ0YXJnZXQ9fC8pKFteJl0qKWAsXG5cdFx0XHRcdFx0XHQnaSdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBpbSA9IG5zUmVJbWFnZSgpO1xuXHRcdC8vIG5vdGU6IHRyaWVzIHRvIGdldCBpbWFnZXMgaW4gaW5mb2JveCB0ZW1wbGF0ZXMgdG9vLCBlLmcuIG1vdmllIHBhZ2VzLCBhbGJ1bSBwYWdlcyBldGNcblx0XHQvL1x0XHRcdFx0XHQgIChefFxcW1xcWylpbWFnZTogKihbXnxcXF1dKltefFxcXSBdKSAqXG5cdFx0Ly9cdFx0XHRcdFx0ICAoXnxcXFtcXFspaW1hZ2U6ICooW158XFxdXSpbXnxcXF0gXSkoW14wLTlcXF1dKihbMC05XSspICpweCk/XG5cdFx0Ly9cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JDQgPSAxMjAgYXMgaW4gMTIwcHhcblx0XHRwZy5yZS5pbWFnZSA9IG5ldyBSZWdFeHAoXG5cdFx0XHRgKF58XFxcXFtcXFxcWykke2ltfTogKihbXnxcXFxcXV0qW158XFxcXF0gXSkke1N0cmluZy5yYXdgKFteMC05XFxdXSooWzAtOV0rKSAqcHgpP3woPzpcXG4gKlt8XT98W3xdKSAqYH0oJHtnZXRWYWx1ZU9mKCdwb3B1cEltYWdlVmFyc1JlZ2V4cCcpfSlgICtcblx0XHRcdFx0YCAqPSAqKD86XFxcXFtcXFxcWyAqKT8oPzoke2ltfTopPyR7U3RyaW5nLnJhd2AoW158XSo/KSg/OlxcXVxcXSk/ICpbfF0/ICpcXG5gfWAsXG5cdFx0XHQnaW1nJ1xuXHRcdCk7XG5cdFx0cGcucmUuaW1hZ2VCcmFja2V0Q291bnQgPSA2O1xuXHRcdHBnLnJlLmNhdGVnb3J5ID0gbmV3IFJlZ0V4cChgXFxcXFtcXFxcWyR7bnNSZShwZy5uc0NhdGVnb3J5SWQpfTogKihbXnxcXFxcXV0qW158XFxcXF0gXSkgKmAsICdpJyk7XG5cdFx0cGcucmUuY2F0ZWdvcnlCcmFja2V0Q291bnQgPSAxO1xuXHRcdC8vIElQdjYgfCBJUHY0XG5cdFx0cGcucmUuaXBVc2VyID1cblx0XHRcdC9eKD86Oig/Ojp8KD86OltcXGRBLUZhLWZdezEsNH0pezEsN30pfFtcXGRBLUZhLWZdezEsNH0oPzo6W1xcZEEtRmEtZl17MSw0fSl7MCw2fTo6fFtcXGRBLUZhLWZdezEsNH0oPzo6W1xcZEEtRmEtZl17MSw0fSl7N30pfCgoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKVxcLil7M30oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKSQvO1xuXHRcdHBnLnJlLnN0dWIgPSBuZXcgUmVnRXhwKGdldFZhbHVlT2YoJ3BvcHVwU3R1YlJlZ2V4cCcpLCAnaW0nKTtcblx0XHRwZy5yZS5kaXNhbWJpZyA9IG5ldyBSZWdFeHAoZ2V0VmFsdWVPZigncG9wdXBEYWJSZWdleHAnKSwgJ2ltJyk7XG5cdFx0Ly8gRklYTUUgcmVwbGFjZSB3aXRoIGdlbmVyYWwgcGFyYW1ldGVyIHBhcnNpbmcgZnVuY3Rpb24sIHRoaXMgaXMgZGFmdFxuXHRcdHBnLnJlLm9sZGlkID0gL1smP11vbGRpZD0oW14mXSopLztcblx0XHRwZy5yZS5kaWZmID0gL1smP11kaWZmPShbXiZdKikvO1xuXHR9O1xuXHQvLyBtaXNjZWxsYW55XG5cdGNvbnN0IHNldHVwQ2FjaGUgPSAoKSA9PiB7XG5cdFx0Ly8gcGFnZSBjYWNoaW5nXG5cdFx0cGcuY2FjaGUucGFnZXMgPSBbXTtcblx0fTtcblx0Y29uc3Qgc2V0TWlzYyA9ICgpID0+IHtcblx0XHRwZy5jdXJyZW50LmxpbmsgPSBudWxsO1xuXHRcdHBnLmN1cnJlbnQubGlua3MgPSBbXTtcblx0XHRwZy5jdXJyZW50LmxpbmtzSGFzaCA9IHt9O1xuXHRcdHNldHVwQ2FjaGUoKTtcblx0XHRwZy50aW1lci5jaGVja1BvcHVwUG9zaXRpb24gPSBudWxsO1xuXHRcdHBnLmNvdW50ZXIubG9vcCA9IDA7XG5cdFx0Ly8gaWRzIGNoYW5nZSB3aXRoIGVhY2ggcG9wdXA6IHBvcHVwSW1hZ2UwLCBwb3B1cEltYWdlMSBldGNcblx0XHRwZy5pZE51bWJlciA9IDA7XG5cdFx0Ly8gZm9yIG15RGVjb2RlVVJJXG5cdFx0cGcubWlzYy5kZWNvZGVFeHRyYXMgPSBbXG5cdFx0XHR7ZnJvbTogJyUyQycsIHRvOiAnLCd9LFxuXHRcdFx0e2Zyb206ICdfJywgdG86ICcgJ30sXG5cdFx0XHR7ZnJvbTogJyUyNCcsIHRvOiAnJCd9LFxuXHRcdFx0e2Zyb206ICclMjYnLCB0bzogJyYnfSwgLy8gbm8gLFxuXHRcdF07XG5cdH07XG5cdGNvbnN0IGdldE13QXBpID0gKCkgPT4ge1xuXHRcdGlmICghcGcuYXBpLmNsaWVudCkge1xuXHRcdFx0cGcuYXBpLnVzZXJBZ2VudCA9ICdOYXZpZ2F0aW9uIHBvcHVwcy8xLjAnO1xuXHRcdFx0cGcuYXBpLmNsaWVudCA9IGFwaTtcblx0XHR9XG5cdFx0cmV0dXJuIHBnLmFwaS5jbGllbnQ7XG5cdH07XG5cdC8vIFdlIG5lZWQgYSBjYWxsYmFjayBzaW5jZSB0aGlzIG1pZ2h0IGVuZCB1cCBhc3luY2hyb25vdXMgYmVjYXVzZSBvZlxuXHQvLyB0aGUgbXcubG9hZGVyLnVzaW5nKCkgY2FsbC5cblx0Y29uc3Qgc2V0dXBQb3B1cHMgPSBmdW5jdGlvbiBzZXR1cFBvcHVwcyhjYWxsYmFjaykge1xuXHRcdGlmIChzZXR1cFBvcHVwcy5jb21wbGV0ZWQpIHtcblx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gVGhlc2UgZGVwZW5kZW5jaWVzIHNob3VsZCBhbHNlIGJlIGVuZm9yY2VkIGZyb20gdGhlIGdhZGdldCxcblx0XHQvLyBidXQgbm90IGV2ZXJ5b25lIGxvYWRzIHRoaXMgYXMgYSBnYWRnZXQsIHNvIGRvdWJsZSBjaGVja1xuXHRcdGZldGNoU3BlY2lhbFBhZ2VOYW1lcygpLnRoZW4oKCkgPT4ge1xuXHRcdFx0Ly8gTkIgdHJhbnNsYXRhYmxlIHN0cmluZ3Mgc2hvdWxkIGJlIHNldCB1cCBmaXJzdCAoc3RyaW5ncy5qcylcblx0XHRcdC8vIGJhc2ljc1xuXHRcdFx0c2V0dXBEZWJ1Z2dpbmcoKTtcblx0XHRcdHNldFNpdGVJbmZvKCk7XG5cdFx0XHRzZXRUaXRsZUJhc2UoKTtcblx0XHRcdHNldE9wdGlvbnMoKTsgLy8gc2VlIG9wdGlvbnMuanNcblx0XHRcdHNldFVzZXJJbmZvKCk7XG5cdFx0XHQvLyBuYW1lc3BhY2VzIGV0Y1xuXHRcdFx0c2V0TmFtZXNwYWNlcygpO1xuXHRcdFx0c2V0SW50ZXJ3aWtpKCk7XG5cdFx0XHQvLyByZWdleHBzXG5cdFx0XHRzZXRSZWdleHBzKCk7XG5cdFx0XHRzZXRSZWRpcnMoKTtcblx0XHRcdC8vIG90aGVyIHN0dWZmXG5cdFx0XHRzZXRNaXNjKCk7XG5cdFx0XHRzZXR1cExpdmVQcmV2aWV3KCk7XG5cdFx0XHQvLyBtYWluIGRlYWwgaGVyZVxuXHRcdFx0c2V0dXBUb29sdGlwcygpO1xuXHRcdFx0bG9nKCdJbiBzZXR1cFBvcHVwcygpLCBqdXN0IGNhbGxlZCBzZXR1cFRvb2x0aXBzKCknKTtcblx0XHRcdE5hdnBvcHVwLnRyYWNrZXIuZW5hYmxlKCk7XG5cdFx0XHRzZXR1cFBvcHVwcy5jb21wbGV0ZWQgPSB0cnVlO1xuXHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBpbml0LmpzXG5cdC8vIFNUQVJURklMRTogbmF2bGlua3MuanNcblx0Ly8gbmF2bGlua3MuLi4gbGV0IHRoZSBmdW4gYmVnaW5cblx0Ly9cblx0Y29uc3QgZGVmYXVsdE5hdmxpbmtTcGVjID0gKCkgPT4ge1xuXHRcdGxldCBzdHIgPSAnJztcblx0XHRzdHIgKz0gJzxiPjw8bWFpbmxpbmt8c2hvcnRjdXQ9ID4+PC9iPic7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwTGFzdEVkaXRMaW5rJykpIHtcblx0XHRcdHN0ciArPSAnKjw8bGFzdEVkaXR8c2hvcnRjdXQ9Lz4+fDw8bGFzdENvbnRyaWI+Pnw8PHNpbmNlTWU+PmlmKG9sZGlkKXt8PDxvbGRFZGl0Pj58PDxkaWZmQ3VyPj59Jztcblx0XHR9XG5cdFx0Ly8gdXNlciBsaW5rc1xuXHRcdC8vIGNvbnRyaWJzIC0gbG9nIC0gY291bnQgLSBlbWFpbCAtIGJsb2NrXG5cdFx0Ly8gY291bnQgb25seSBpZiBhcHBsaWNhYmxlOyBibG9jayBvbmx5IGlmIHBvcHVwQWRtaW5MaW5rc1xuXHRcdHN0ciArPSAnaWYodXNlcil7PGJyPjw8Y29udHJpYnN8c2hvcnRjdXQ9Yz4+Kjw8dXNlcmxvZ3xzaG9ydGN1dD1MfGxvZz4+Jztcblx0XHRzdHIgKz0gJ2lmKGlwdXNlcil7Kjw8YXJpbj4+fWlmKHdpa2ltZWRpYSl7Kjw8Y291bnR8c2hvcnRjdXQ9Iz4+fSc7XG5cdFx0c3RyICs9ICdpZihpcHVzZXIpe31lbHNleyo8PGVtYWlsfHNob3J0Y3V0PUU+Pn1pZihhZG1pbil7Kjw8YmxvY2t8c2hvcnRjdXQ9Yj4+fDw8YmxvY2tsb2d8bG9nPj59fSc7XG5cdFx0Ly8gZWRpdGluZyBsaW5rc1xuXHRcdC8vIHRhbGtwYWdlICAgLT4gZWRpdHxuZXcgLSBoaXN0b3J5IC0gdW58d2F0Y2ggLSBhcnRpY2xlfGVkaXRcblx0XHQvLyBvdGhlciBwYWdlIC0+IGVkaXQgLSBoaXN0b3J5IC0gdW58d2F0Y2ggLSB0YWxrfGVkaXR8bmV3XG5cdFx0Y29uc3QgZWRpdHN0ciA9ICc8PGVkaXR8c2hvcnRjdXQ9ZT4+Jztcblx0XHRjb25zdCBlZGl0T2xkaWRTdHIgPSBgaWYob2xkaWQpezw8ZWRpdE9sZHxzaG9ydGN1dD1lPj58PDxyZXZlcnR8c2hvcnRjdXQ9dnxydj4+fDw8ZWRpdHxjdXI+Pn1lbHNleyR7ZWRpdHN0cn19YDtcblx0XHRjb25zdCBoaXN0b3J5c3RyID0gJzw8aGlzdG9yeXxzaG9ydGN1dD1oPj58PDxlZGl0b3JzfHNob3J0Y3V0PUV8Pj4nO1xuXHRcdGNvbnN0IHdhdGNoc3RyID0gJzw8dW53YXRjaHx1bndhdGNoU2hvcnQ+Pnw8PHdhdGNofHNob3J0Y3V0PXd8d2F0Y2hUaGluZ3k+Pic7XG5cdFx0c3RyICs9XG5cdFx0XHRgPGJyPmlmKHRhbGspeyR7ZWRpdE9sZGlkU3RyfXw8PG5ld3xzaG9ydGN1dD0rPj5gICtcblx0XHRcdGAqJHtoaXN0b3J5c3RyfSoke3dhdGNoc3RyfSpgICtcblx0XHRcdCc8Yj48PGFydGljbGV8c2hvcnRjdXQ9YT4+PC9iPnw8PGVkaXRBcnRpY2xlfGVkaXQ+PicgK1xuXHRcdFx0YH1lbHNleyR7XG5cdFx0XHRcdC8vIG5vdCBhIHRhbGsgcGFnZVxuXHRcdFx0XHRlZGl0T2xkaWRTdHJcblx0XHRcdH0qJHtoaXN0b3J5c3RyfSoke3dhdGNoc3RyfSpgICtcblx0XHRcdCc8Yj48PHRhbGt8c2hvcnRjdXQ9dD4+PC9iPnw8PGVkaXRUYWxrfGVkaXQ+Pnw8PG5ld1RhbGt8c2hvcnRjdXQ9K3xuZXc+Pn0nO1xuXHRcdC8vIG1pc2MgbGlua3Ncblx0XHRzdHIgKz0gJzxicj48PHdoYXRMaW5rc0hlcmV8c2hvcnRjdXQ9bD4+Kjw8cmVsYXRlZENoYW5nZXN8c2hvcnRjdXQ9cj4+Kjw8bW92ZXxzaG9ydGN1dD1tPj4nO1xuXHRcdC8vIGFkbWluIGxpbmtzXG5cdFx0c3RyICs9XG5cdFx0XHQnaWYoYWRtaW4pezxicj48PHVucHJvdGVjdHx1bnByb3RlY3RTaG9ydD4+fDw8cHJvdGVjdHxzaG9ydGN1dD1wPj58PDxwcm90ZWN0bG9nfGxvZz4+KicgK1xuXHRcdFx0Jzw8dW5kZWxldGV8dW5kZWxldGVTaG9ydD4+fDw8ZGVsZXRlfHNob3J0Y3V0PWQ+Pnw8PGRlbGV0ZWxvZ3xsb2c+Pn0nO1xuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cdGNvbnN0IG5hdkxpbmtzSFRNTCA9IChhcnRpY2xlLCBfaGludCwgcGFyYW1zKSA9PiB7XG5cdFx0Ly8gb2xkaWQsIHJjaWQpIHtcblx0XHRjb25zdCBzdHIgPSBgPHNwYW4gY2xhc3M9XCJwb3B1cE5hdkxpbmtzXCI+JHtkZWZhdWx0TmF2bGlua1NwZWMoKX08L3NwYW4+YDtcblx0XHQvLyBCQU1cblx0XHRyZXR1cm4gbmF2bGlua1N0cmluZ1RvSFRNTChzdHIsIGFydGljbGUsIHBhcmFtcyk7XG5cdH07XG5cdGNvbnN0IGV4cGFuZENvbmRpdGlvbmFsTmF2bGlua1N0cmluZyA9IGZ1bmN0aW9uIGV4cGFuZENvbmRpdGlvbmFsTmF2bGlua1N0cmluZyhzLCBhcnRpY2xlLCB6LCByZWN1cnNpb25Db3VudCkge1xuXHRcdGNvbnN0IHtvbGRpZH0gPSB6O1xuXHRcdGNvbnN0IHtyY2lkfSA9IHo7XG5cdFx0Y29uc3Qge2RpZmZ9ID0gejtcblx0XHQvLyBuZXN0ZWQgY29uZGl0aW9uYWxzICh1cCB0byAxMCBkZWVwKSBhcmUgb2ssIGhvcGVmdWxseSEgKHdvcmsgZnJvbSB0aGUgaW5zaWRlIG91dClcblx0XHRpZiAodHlwZW9mIHJlY3Vyc2lvbkNvdW50ICE9PSB0eXBlb2YgMCkge1xuXHRcdFx0cmVjdXJzaW9uQ291bnQgPSAwO1xuXHRcdH1cblx0XHQvLyAoMVx0IGlmXHRcXFxcKFx0KDJcdDIpXHRcXFxcKVx0ICB7KDNcdDMpfSAgKDQgICBlbHNlXHQgIHsoNVx0IDUpfSAgNCkxKVxuXHRcdGNvbnN0IGNvbmRpdGlvbmFsU3BsaXRSZWdleCA9IC8oOz9cXHMqaWZcXHMqXFwoXFxzKihcXHcqKVxccypcXClcXHMqeyhbXnt9XSopfShcXHMqZWxzZVxccyp7KFtee31dKj8pfXwpKS9pO1xuXHRcdGNvbnN0IHNwbGl0dGVkID0gcy5zcGxpdChjb25kaXRpb25hbFNwbGl0UmVnZXgpO1xuXHRcdC8vICQxOiB3aG9sZSBjb25kaXRpb25hbFxuXHRcdC8vICQyOiB0ZXN0IGNvbmRpdGlvblxuXHRcdC8vICQzOiB0cnVlIGV4cGFuc2lvblxuXHRcdC8vICQ0OiBlbHNlIGNsYXVzZSAocG9zc2libHkgZW1wdHkpXG5cdFx0Ly8gJDU6IGZhbHNlIGV4cGFuc2lvbiAocG9zc2libHkgbnVsbClcblx0XHRjb25zdCBudW1QYXJlbnMgPSA1O1xuXHRcdGxldCBbcmV0XSA9IHNwbGl0dGVkO1xuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXR0ZWQubGVuZ3RoOyBpID0gaSArIG51bVBhcmVucyArIDEpIHtcblx0XHRcdGNvbnN0IHRlc3RTdHJpbmcgPSBzcGxpdHRlZFtpICsgMiAtIDFdO1xuXHRcdFx0Y29uc3QgdHJ1ZVN0cmluZyA9IHNwbGl0dGVkW2kgKyAzIC0gMV07XG5cdFx0XHRsZXQgZmFsc2VTdHJpbmcgPSBzcGxpdHRlZFtpICsgNSAtIDFdO1xuXHRcdFx0aWYgKGZhbHNlU3RyaW5nID09PSB1bmRlZmluZWQgfHwgIWZhbHNlU3RyaW5nKSB7XG5cdFx0XHRcdGZhbHNlU3RyaW5nID0gJyc7XG5cdFx0XHR9XG5cdFx0XHRsZXQgdGVzdFJlc3VsdDtcblx0XHRcdHN3aXRjaCAodGVzdFN0cmluZykge1xuXHRcdFx0XHRjYXNlICd1c2VyJzpcblx0XHRcdFx0XHR0ZXN0UmVzdWx0ID0gISFhcnRpY2xlLnVzZXJOYW1lKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RhbGsnOlxuXHRcdFx0XHRcdHRlc3RSZXN1bHQgPSAhYXJ0aWNsZS50YWxrUGFnZSgpOyAvLyB0YWxrUGFnZSBjb252ZXJ0cyBfYXJ0aWNsZXNfIHRvIHRhbGtQYWdlc1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhZG1pbic6XG5cdFx0XHRcdFx0dGVzdFJlc3VsdCA9ICEhZ2V0VmFsdWVPZigncG9wdXBBZG1pbkxpbmtzJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ29sZGlkJzpcblx0XHRcdFx0XHR0ZXN0UmVzdWx0ID0gISEob2xkaWQgIT09IHVuZGVmaW5lZCAmJiBvbGRpZCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3JjaWQnOlxuXHRcdFx0XHRcdHRlc3RSZXN1bHQgPSAhIShyY2lkICE9PSB1bmRlZmluZWQgJiYgcmNpZCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2lwdXNlcic6XG5cdFx0XHRcdFx0dGVzdFJlc3VsdCA9ICEhYXJ0aWNsZS5pc0lwVXNlcigpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdtYWluc3BhY2VfZW4nOlxuXHRcdFx0XHRcdHRlc3RSZXN1bHQgPSBpc0luTWFpbk5hbWVzcGFjZShhcnRpY2xlKSAmJiBwZy53aWtpLmhvc3RuYW1lID09PSAnZW4ud2lraXBlZGlhLm9yZyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3dpa2ltZWRpYSc6XG5cdFx0XHRcdFx0dGVzdFJlc3VsdCA9ICEhcGcud2lraS53aWtpbWVkaWE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2RpZmYnOlxuXHRcdFx0XHRcdHRlc3RSZXN1bHQgPSAhIShkaWZmICE9PSB1bmRlZmluZWQgJiYgZGlmZik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHRlc3RSZXN1bHQpIHtcblx0XHRcdFx0Y2FzZSBudWxsOlxuXHRcdFx0XHRcdHJldCArPSBzcGxpdHRlZFtpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0cnVlOlxuXHRcdFx0XHRcdHJldCArPSB0cnVlU3RyaW5nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGZhbHNlOlxuXHRcdFx0XHRcdHJldCArPSBmYWxzZVN0cmluZztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdC8vIGFwcGVuZCBub24tY29uZGl0aW9uYWwgc3RyaW5nXG5cdFx0XHRyZXQgKz0gc3BsaXR0ZWRbaSArIG51bVBhcmVuc107XG5cdFx0fVxuXHRcdGlmIChjb25kaXRpb25hbFNwbGl0UmVnZXgudGVzdChyZXQpICYmIHJlY3Vyc2lvbkNvdW50IDwgMTApIHtcblx0XHRcdHJldHVybiBleHBhbmRDb25kaXRpb25hbE5hdmxpbmtTdHJpbmcocmV0LCBhcnRpY2xlLCB6LCByZWN1cnNpb25Db3VudCArIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXHRjb25zdCBuYXZsaW5rU3RyaW5nVG9BcnJheSA9IChzLCBhcnRpY2xlLCBwYXJhbXMpID0+IHtcblx0XHRzID0gZXhwYW5kQ29uZGl0aW9uYWxOYXZsaW5rU3RyaW5nKHMsIGFydGljbGUsIHBhcmFtcyk7XG5cdFx0Y29uc3Qgc3BsaXR0ZWQgPSBzLnNwbGl0KC88PCguKj8pPj4vKTtcblx0XHRjb25zdCByZXQgPSBbXTtcblx0XHRmb3IgKGNvbnN0IFtpLCBlbGVtZW50XSBvZiBzcGxpdHRlZC5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChpICUgMikge1xuXHRcdFx0XHQvLyBpIG9kZCwgc28gcyBpcyBhIHRhZ1xuXHRcdFx0XHRjb25zdCB0ID0gbmV3IG5hdmxpbmtUYWcoKTtcblx0XHRcdFx0Y29uc3Qgc3MgPSBlbGVtZW50LnNwbGl0KCd8Jyk7XG5cdFx0XHRcdFt0LmlkXSA9IHNzO1xuXHRcdFx0XHRmb3IgKGxldCBqID0gMTsgaiA8IHNzLmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3NzID0gc3Nbal0uc3BsaXQoJz0nKTtcblx0XHRcdFx0XHRpZiAoc3NzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFssIHRbc3NzWzBdXV0gPSBzc3M7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIG5vIGFzc2lnbm1lbnQgKG5vIFwiPVwiKSwgc28gdHJlYXQgdGhpcyBhcyBhIHRpdGxlIChvdmVyd3JpdGluZyB0aGUgbGFzdCBvbmUpXG5cdFx0XHRcdFx0XHR0LnRleHQgPSBwb3B1cFN0cmluZyhzc3NbMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0LmFydGljbGUgPSBhcnRpY2xlO1xuXHRcdFx0XHRjb25zdCB7b2xkaWR9ID0gcGFyYW1zO1xuXHRcdFx0XHRjb25zdCB7cmNpZH0gPSBwYXJhbXM7XG5cdFx0XHRcdGNvbnN0IHtkaWZmfSA9IHBhcmFtcztcblx0XHRcdFx0aWYgKG9sZGlkICE9PSB1bmRlZmluZWQgJiYgb2xkaWQgIT09IG51bGwpIHtcblx0XHRcdFx0XHR0Lm9sZGlkID0gb2xkaWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJjaWQgIT09IHVuZGVmaW5lZCAmJiByY2lkICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0dC5yY2lkID0gcmNpZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGlmZiAhPT0gdW5kZWZpbmVkICYmIGRpZmYgIT09IG51bGwpIHtcblx0XHRcdFx0XHR0LmRpZmYgPSBkaWZmO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghdC50ZXh0ICYmIHQuaWQgIT09ICdtYWlubGluaycpIHtcblx0XHRcdFx0XHR0LnRleHQgPSBwb3B1cFN0cmluZyh0LmlkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXQucHVzaCh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHBsYWluIEhUTUxcblx0XHRcdFx0cmV0LnB1c2goZWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cdGNvbnN0IG5hdmxpbmtTdWJzdGl0dXRlSFRNTCA9IChzKSA9PiB7XG5cdFx0cmV0dXJuIHNcblx0XHRcdC5zcGxpdCgnKicpXG5cdFx0XHQuam9pbihnZXRWYWx1ZU9mKCdwb3B1cE5hdkxpbmtTZXBhcmF0b3InKSlcblx0XHRcdC5zcGxpdCgnPG1lbnVyb3c+Jylcblx0XHRcdC5qb2luKCc8bGkgY2xhc3M9XCJwb3B1cF9tZW51X3Jvd1wiPicpXG5cdFx0XHQuc3BsaXQoJzwvbWVudXJvdz4nKVxuXHRcdFx0LmpvaW4oJzwvbGk+Jylcblx0XHRcdC5zcGxpdCgnPG1lbnU+Jylcblx0XHRcdC5qb2luKCc8dWwgY2xhc3M9XCJwb3B1cF9tZW51XCI+Jylcblx0XHRcdC5zcGxpdCgnPC9tZW51PicpXG5cdFx0XHQuam9pbignPC91bD4nKTtcblx0fTtcblx0Y29uc3QgbmF2bGlua0RlcHRoID0gKG1hZ2ljLCBzKSA9PiB7XG5cdFx0cmV0dXJuIHMuc3BsaXQoYDwke21hZ2ljfT5gKS5sZW5ndGggLSBzLnNwbGl0KGA8LyR7bWFnaWN9PmApLmxlbmd0aDtcblx0fTtcblx0Ly8gbmF2bGlua1N0cmluZzogKiBiZWNvbWVzIHRoZSBzZXBhcmF0b3Jcblx0Ly9cdFx0XHRcdDw8Zm9vfGJhcj1iYXp8ZnViYXI+PiBiZWNvbWVzIGEgZm9vLWxpbmsgd2l0aCBhdHRyaWJ1dGUgYmFyPSdiYXonXG5cdC8vXHRcdFx0XHRcdFx0XHRcdFx0ICBhbmQgdmlzaWJsZSB0ZXh0ICdmdWJhcidcblx0Ly9cdFx0XHRcdGlmKHRlc3Qpey4uLn0gYW5kIGlmKHRlc3Qpey4uLn1lbHNley4uLn0gd29yayB0b28gKG5lc3RlZCBvaylcblx0Y29uc3QgbmF2bGlua1N0cmluZ1RvSFRNTCA9IChzLCBhcnRpY2xlLCBwYXJhbXMpID0+IHtcblx0XHQvLyBsaW1pdEFsZXJ0KG5hdmxpbmtTdHJpbmdUb0hUTUwsIDUsICduYXZsaW5rU3RyaW5nVG9IVE1MXFxuJyArIGFydGljbGUgKyAnXFxuJyArICh0eXBlb2YgYXJ0aWNsZSkpO1xuXHRcdGNvbnN0IHAgPSBuYXZsaW5rU3RyaW5nVG9BcnJheShzLCBhcnRpY2xlLCBwYXJhbXMpO1xuXHRcdGxldCBodG1sID0gJyc7XG5cdFx0bGV0IG1lbnVkZXB0aCA9IDA7IC8vIG5lc3RlZCBtZW51cyBub3QgY3VycmVudGx5IGFsbG93ZWQsIGJ1dCBkb2Vzbid0IGRvIGFueSBoYXJtIHRvIGNvZGUgZm9yIGl0XG5cdFx0bGV0IG1lbnVyb3dkZXB0aCA9IDA7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHApIHtcblx0XHRcdGlmICh0eXBlb2YgZWxlbWVudCA9PT0gdHlwZW9mICcnKSB7XG5cdFx0XHRcdGh0bWwgKz0gbmF2bGlua1N1YnN0aXR1dGVIVE1MKGVsZW1lbnQpO1xuXHRcdFx0XHRtZW51ZGVwdGggKz0gbmF2bGlua0RlcHRoKCdtZW51JywgZWxlbWVudCk7XG5cdFx0XHRcdG1lbnVyb3dkZXB0aCArPSBuYXZsaW5rRGVwdGgoJ21lbnVyb3cnLCBlbGVtZW50KTtcblx0XHRcdFx0Ly9cdFx0XHRpZiAobWVudWRlcHRoID09PSAwKSB7XG5cdFx0XHRcdC8vXHRcdFx0XHR0YWdUeXBlPSdzcGFuJztcblx0XHRcdFx0Ly9cdFx0XHR9IGVsc2UgaWYgKG1lbnVyb3dkZXB0aCA9PT0gMCkge1xuXHRcdFx0XHQvL1x0XHRcdFx0dGFnVHlwZT0nbGknO1xuXHRcdFx0XHQvL1x0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vXHRcdFx0XHR0YWdUeXBlID0gbnVsbDtcblx0XHRcdFx0Ly9cdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQudHlwZSA9PT0gJ25hdmxpbmtUYWcnKSB7XG5cdFx0XHRcdGh0bWwgKz1cblx0XHRcdFx0XHRtZW51ZGVwdGggPiAwICYmIG1lbnVyb3dkZXB0aCA9PT0gMFxuXHRcdFx0XHRcdFx0PyBgPGxpIGNsYXNzPVwicG9wdXBfbWVudV9pdGVtXCI+JHtlbGVtZW50Lmh0bWwoKX08L2xpPmBcblx0XHRcdFx0XHRcdDogZWxlbWVudC5odG1sKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBodG1sO1xuXHR9O1xuXHRjbGFzcyBuYXZsaW5rVGFnIHtcblx0XHRjb25zdHJ1Y3RvcigpIHtcblx0XHRcdHRoaXMudHlwZSA9ICduYXZsaW5rVGFnJztcblx0XHR9XG5cdFx0aHRtbCgpIHtcblx0XHRcdHRoaXMuZ2V0TmV3V2luKCk7XG5cdFx0XHR0aGlzLmdldFByaW50RnVuY3Rpb24oKTtcblx0XHRcdGxldCBodG1sID0gJyc7XG5cdFx0XHRsZXQgb3BlbmluZztcblx0XHRcdGxldCBjbG9zaW5nO1xuXHRcdFx0Y29uc3QgdGFnVHlwZSA9ICdzcGFuJztcblx0XHRcdGlmICh0YWdUeXBlKSB7XG5cdFx0XHRcdG9wZW5pbmcgPSBgPCR7dGFnVHlwZX0gY2xhc3M9XCJwb3B1cF8ke3RoaXMuaWR9XCI+YDtcblx0XHRcdFx0Y2xvc2luZyA9IGA8LyR7dGFnVHlwZX0+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wZW5pbmcgPSAnJztcblx0XHRcdFx0Y2xvc2luZyA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLnByaW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGh0bWwgPSB0aGlzLnByaW50KHRoaXMpO1xuXHRcdFx0XHRpZiAodHlwZW9mIGh0bWwgIT09IHR5cGVvZiAnJykge1xuXHRcdFx0XHRcdGh0bWwgPSAnJztcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnNob3J0Y3V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRodG1sID0gYWRkUG9wdXBTaG9ydGN1dChodG1sLCB0aGlzLnNob3J0Y3V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXJybG9nKGBPaCBkZWFyIC0gaW52YWxpZCBwcmludCBmdW5jdGlvbiBmb3IgYSBuYXZsaW5rVGFnLCBpZD0ke3RoaXMuaWR9YCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlbmluZyArIGh0bWwgKyBjbG9zaW5nO1xuXHRcdH1cblx0XHRnZXROZXdXaW4oKSB7XG5cdFx0XHRnZXRWYWx1ZU9mKCdwb3B1cExpbmtzTmV3V2luZG93Jyk7XG5cdFx0XHRpZiAocGcub3B0aW9uLnBvcHVwTGlua3NOZXdXaW5kb3dbdGhpcy5pZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLm5ld1dpbiA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ld1dpbiA9IHBnLm9wdGlvbi5wb3B1cExpbmtzTmV3V2luZG93W3RoaXMuaWRdO1xuXHRcdH1cblx0XHRnZXRQcmludEZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gdGhpbmsgYWJvdXQgdGhpcyBzb21lIG1vcmVcblx0XHRcdC8vIHRoaXMuaWQgYW5kIHRoaXMuYXJ0aWNsZSBzaG91bGQgYWxyZWFkeSBiZSBkZWZpbmVkXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuaWQgIT09IHR5cGVvZiAnJyB8fCB0eXBlb2YgdGhpcy5hcnRpY2xlICE9PSB0eXBlb2Yge30pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5ub1BvcHVwID0gMTtcblx0XHRcdHN3aXRjaCAodGhpcy5pZCkge1xuXHRcdFx0XHRjYXNlICdjb250cmlicyc6XG5cdFx0XHRcdGNhc2UgJ2hpc3RvcnknOlxuXHRcdFx0XHRjYXNlICd3aGF0TGlua3NIZXJlJzpcblx0XHRcdFx0Y2FzZSAndXNlclBhZ2UnOlxuXHRcdFx0XHRjYXNlICd1c2VyVGFsayc6XG5cdFx0XHRcdGNhc2UgJ3RhbGsnOlxuXHRcdFx0XHRjYXNlICdhcnRpY2xlJzpcblx0XHRcdFx0Y2FzZSAnbGFzdEVkaXQnOlxuXHRcdFx0XHRcdHRoaXMubm9Qb3B1cCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHRoaXMuaWQpIHtcblx0XHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0XHRjYXNlICdjb250cmlicyc6XG5cdFx0XHRcdGNhc2UgJ2Jsb2NrJzpcblx0XHRcdFx0Y2FzZSAndW5ibG9jayc6XG5cdFx0XHRcdGNhc2UgJ3VzZXJsb2cnOlxuXHRcdFx0XHRjYXNlICd1c2VyU3BhY2UnOlxuXHRcdFx0XHRjYXNlICdkZWxldGVkQ29udHJpYnMnOlxuXHRcdFx0XHRcdHRoaXMuYXJ0aWNsZSA9IHRoaXMuYXJ0aWNsZS51c2VyTmFtZSgpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoICh0aGlzLmlkKSB7XG5cdFx0XHRcdGNhc2UgJ3VzZXJUYWxrJzpcblx0XHRcdFx0Y2FzZSAnbmV3VXNlclRhbGsnOlxuXHRcdFx0XHRjYXNlICdlZGl0VXNlclRhbGsnOlxuXHRcdFx0XHRjYXNlICd1c2VyUGFnZSc6XG5cdFx0XHRcdGNhc2UgJ2Jsb2NrbG9nJzpcblx0XHRcdFx0XHR0aGlzLmFydGljbGUgPSB0aGlzLmFydGljbGUudXNlck5hbWUodHJ1ZSk7XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSAncGFnZWxvZyc6XG5cdFx0XHRcdGNhc2UgJ2RlbGV0ZWxvZyc6XG5cdFx0XHRcdGNhc2UgJ3Byb3RlY3Rsb2cnOlxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLm9sZGlkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuaWQgIT09ICdtYWlubGluaycpIHtcblx0XHRcdFx0Ly8gRklYTUUgYW5jaG9yIGhhbmRsaW5nIHNob3VsZCBiZSBkb25lIGRpZmZlcmVudGx5IHdpdGggVGl0bGUgb2JqZWN0XG5cdFx0XHRcdHRoaXMuYXJ0aWNsZSA9IHRoaXMuYXJ0aWNsZS5yZW1vdmVBbmNob3IoKTtcblx0XHRcdFx0Ly8gaWYgKHR5cGVvZiB0aGlzLnRleHQ9PSd1bmRlZmluZWQnKSB7IHRoaXMudGV4dD1wb3B1cFN0cmluZyh0aGlzLmlkKTsgfVxuXHRcdFx0fVxuXHRcdFx0c3dpdGNoICh0aGlzLmlkKSB7XG5cdFx0XHRcdGNhc2UgJ3VuZGVsZXRlJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdVbmRlbGV0ZSc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnLyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3doYXRMaW5rc0hlcmUnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ1doYXRsaW5rc2hlcmUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdyZWxhdGVkQ2hhbmdlcyc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHNwZWNpYWxMaW5rO1xuXHRcdFx0XHRcdHRoaXMuc3BlY2lhbHBhZ2UgPSAnUmVjZW50Y2hhbmdlc2xpbmtlZCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ21vdmUnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ01vdmVwYWdlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnY29udHJpYnMnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ0NvbnRyaWJ1dGlvbnMnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkZWxldGVkQ29udHJpYnMnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ0RlbGV0ZWRjb250cmlidXRpb25zJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ0VtYWlsVXNlcic7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnLyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2Jsb2NrJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdCbG9ja2lwJztcblx0XHRcdFx0XHR0aGlzLnNlcCA9ICcmaXA9Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndW5ibG9jayc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHNwZWNpYWxMaW5rO1xuXHRcdFx0XHRcdHRoaXMuc3BlY2lhbHBhZ2UgPSAnSXBibG9ja2xpc3QnO1xuXHRcdFx0XHRcdHRoaXMuc2VwID0gJyZhY3Rpb249dW5ibG9jayZpcD0nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd1c2VybG9nJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdMb2cnO1xuXHRcdFx0XHRcdHRoaXMuc2VwID0gJyZ1c2VyPSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2Jsb2NrbG9nJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdMb2cnO1xuXHRcdFx0XHRcdHRoaXMuc2VwID0gJyZ0eXBlPWJsb2NrJnBhZ2U9Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncGFnZWxvZyc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHNwZWNpYWxMaW5rO1xuXHRcdFx0XHRcdHRoaXMuc3BlY2lhbHBhZ2UgPSAnTG9nJztcblx0XHRcdFx0XHR0aGlzLnNlcCA9ICcmcGFnZT0nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdwcm90ZWN0bG9nJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdMb2cnO1xuXHRcdFx0XHRcdHRoaXMuc2VwID0gJyZ0eXBlPXByb3RlY3QmcGFnZT0nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkZWxldGVsb2cnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ0xvZyc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnJnR5cGU9ZGVsZXRlJnBhZ2U9Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndXNlclNwYWNlJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gc3BlY2lhbExpbms7XG5cdFx0XHRcdFx0dGhpcy5zcGVjaWFscGFnZSA9ICdQcmVmaXhJbmRleCc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnJm5hbWVzcGFjZT0yJnByZWZpeD0nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdzZWFyY2gnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ1NlYXJjaCc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnJmZ1bGx0ZXh0PVNlYXJjaCZzZWFyY2g9Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndGhhbmsnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBzcGVjaWFsTGluaztcblx0XHRcdFx0XHR0aGlzLnNwZWNpYWxwYWdlID0gJ1RoYW5rcyc7XG5cdFx0XHRcdFx0dGhpcy5zZXAgPSAnLyc7XG5cdFx0XHRcdFx0dGhpcy5hcnRpY2xlLnZhbHVlID0gdGhpcy5kaWZmID09PSAncHJldicgPyB0aGlzLm9sZGlkIDogdGhpcy5kaWZmO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd1bndhdGNoJzpcblx0XHRcdFx0Y2FzZSAnd2F0Y2gnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBtYWdpY1dhdGNoTGluaztcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9IGAke3RoaXMuaWR9JmF1dG93YXRjaGxpc3Q9MSZhdXRvaW1wbD0ke3BvcHVwU3RyaW5nKFxuXHRcdFx0XHRcdFx0J2F1dG9lZGl0X3ZlcnNpb24nXG5cdFx0XHRcdFx0KX0mYWN0b2tlbj0ke2F1dG9DbGlja1Rva2VuKCl9YDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnaGlzdG9yeSc6XG5cdFx0XHRcdGNhc2UgJ2hpc3RvcnlmZWVkJzpcblx0XHRcdFx0Y2FzZSAndW5wcm90ZWN0Jzpcblx0XHRcdFx0Y2FzZSAncHJvdGVjdCc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gdGhpcy5pZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZGVsZXRlJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSAnZGVsZXRlJztcblx0XHRcdFx0XHRpZiAodGhpcy5hcnRpY2xlLm5hbWVzcGFjZUlkKCkgPT09IHBnLm5zSW1hZ2VJZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaW1nID0gdGhpcy5hcnRpY2xlLnN0cmlwTmFtZXNwYWNlKCk7XG5cdFx0XHRcdFx0XHR0aGlzLmFjdGlvbiArPSBgJmltYWdlPSR7aW1nfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdtYXJrcGF0cm9sbGVkJzpcblx0XHRcdFx0Y2FzZSAnZWRpdCc6XG5cdFx0XHRcdFx0Ly8gZWRpdE9sZCBzaG91bGQga2VlcCB0aGUgb2xkaWQsIGJ1dCBlZGl0IHNob3VsZCBub3QuXG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMub2xkaWQ7XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSAndmlldyc6XG5cdFx0XHRcdGNhc2UgJ3B1cmdlJzpcblx0XHRcdFx0Y2FzZSAncmVuZGVyJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSB0aGlzLmlkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdyYXcnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSB3aWtpTGluaztcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9ICdyYXcnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICduZXcnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSB3aWtpTGluaztcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9ICdlZGl0JnNlY3Rpb249bmV3Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnbWFpbmxpbmsnOlxuXHRcdFx0XHRcdGlmICh0aGlzLnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0ID0gdGhpcy5hcnRpY2xlLnRvU3RyaW5nKCkuZW50aWZ5KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cFNpbXBsaWZ5TWFpbkxpbmsnKSAmJiBpc0luU3RyaXBwYWJsZU5hbWVzcGFjZSh0aGlzLmFydGljbGUpKSB7XG5cdFx0XHRcdFx0XHQvLyBvbmx5IHNob3cgdGhlIC9zdWJwYWdlIHBhcnQgb2YgdGhlIHRpdGxlIHRleHRcblx0XHRcdFx0XHRcdGNvbnN0IHMgPSB0aGlzLnRleHQuc3BsaXQoJy8nKTtcblx0XHRcdFx0XHRcdHRoaXMudGV4dCA9IHMuYXQoLTEpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMudGV4dCA9PT0gJycgJiYgcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGV4dCA9IHMuYXQoLTIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnByaW50ID0gdGl0bGVkV2lraUxpbms7XG5cdFx0XHRcdFx0aWYgKHRoaXMudGl0bGUgPT09IHVuZGVmaW5lZCAmJiBwZy5jdXJyZW50LmxpbmsgJiYgcGcuY3VycmVudC5saW5rLmhyZWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0dGhpcy50aXRsZSA9IHNhZmVEZWNvZGVVUkkocGcuY3VycmVudC5saW5rLm9yaWdpbmFsVGl0bGUgPz8gdGhpcy5hcnRpY2xlKTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLm9sZGlkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5vbGRpZCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRpdGxlID0gdHByaW50ZignUmV2aXNpb24gJXMgb2YgJXMnLCBbdGhpcy5vbGRpZCwgdGhpcy50aXRsZV0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9ICd2aWV3Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndXNlclBhZ2UnOlxuXHRcdFx0XHRjYXNlICdhcnRpY2xlJzpcblx0XHRcdFx0Y2FzZSAnZWRpdEFydGljbGUnOlxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLm9sZGlkO1xuXHRcdFx0XHRcdC8vIG13Lm5vdGlmeShgJHt0aGlzLmlkfVxcbiR7dGhpcy5hcnRpY2xlfVxcbiR7dHlwZW9mIHRoaXMuYXJ0aWNsZX1gLCB7dGFnOiAncG9wdXBzJywgdHlwZTogJ3dhcm4nfSk7XG5cdFx0XHRcdFx0dGhpcy5hcnRpY2xlID0gdGhpcy5hcnRpY2xlLmFydGljbGVGcm9tVGFsa09yQXJ0aWNsZSgpO1xuXHRcdFx0XHRcdC8vIG13Lm5vdGlmeShgJHt0aGlzLmlkfVxcbiR7dGhpcy5hcnRpY2xlfVxcbiR7dHlwZW9mIHRoaXMuYXJ0aWNsZX1gLCB7dGFnOiAncG9wdXBzJywgdHlwZTogJ3dhcm4nfSk7XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gdGhpcy5pZC5pbmRleE9mKCdlZGl0JykgPT09IDAgPyAnZWRpdCcgOiAndmlldyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3VzZXJUYWxrJzpcblx0XHRcdFx0Y2FzZSAndGFsayc6XG5cdFx0XHRcdFx0dGhpcy5hcnRpY2xlID0gdGhpcy5hcnRpY2xlLnRhbGtQYWdlKCk7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMub2xkaWQ7XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gJ3ZpZXcnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdhcmluJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gYXJpbkxpbms7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2NvdW50Jzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gZWRpdENvdW50ZXJMaW5rO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdlZGl0b3JzJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gZWRpdG9yTGlzdExpbms7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2xhc3RFZGl0Jzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gdGl0bGVkRGlmZkxpbms7XG5cdFx0XHRcdFx0dGhpcy50aXRsZSA9IHBvcHVwU3RyaW5nKCdTaG93IHRoZSBsYXN0IGVkaXQnKTtcblx0XHRcdFx0XHR0aGlzLmZyb20gPSAncHJldic7XG5cdFx0XHRcdFx0dGhpcy50byA9ICdjdXInO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdvbGRFZGl0Jzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gdGl0bGVkRGlmZkxpbms7XG5cdFx0XHRcdFx0dGhpcy50aXRsZSA9IGAke3BvcHVwU3RyaW5nKCdTaG93IHRoZSBlZGl0IG1hZGUgdG8gZ2V0IHJldmlzaW9uJyl9ICR7dGhpcy5vbGRpZH1gO1xuXHRcdFx0XHRcdHRoaXMuZnJvbSA9ICdwcmV2Jztcblx0XHRcdFx0XHR0aGlzLnRvID0gdGhpcy5vbGRpZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZWRpdE9sZCc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gJ2VkaXQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd1bmRvJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSAnZWRpdCZ1bmRvPSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3JldmVydCc6XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uID0gJ3JldmVydCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ251bGxFZGl0Jzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSAnbnVsbEVkaXQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkaWZmQ3VyJzpcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gdGl0bGVkRGlmZkxpbms7XG5cdFx0XHRcdFx0dGhpcy50aXRsZSA9IHRwcmludGYoJ1Nob3cgY2hhbmdlcyBzaW5jZSByZXZpc2lvbiAlcycsIFt0aGlzLm9sZGlkXSk7XG5cdFx0XHRcdFx0dGhpcy5mcm9tID0gdGhpcy5vbGRpZDtcblx0XHRcdFx0XHR0aGlzLnRvID0gJ2N1cic7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2VkaXRVc2VyVGFsayc6XG5cdFx0XHRcdGNhc2UgJ2VkaXRUYWxrJzpcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5vbGRpZDtcblx0XHRcdFx0XHR0aGlzLmFydGljbGUgPSB0aGlzLmFydGljbGUudGFsa1BhZ2UoKTtcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9ICdlZGl0Jztcblx0XHRcdFx0XHR0aGlzLnByaW50ID0gd2lraUxpbms7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ25ld1VzZXJUYWxrJzpcblx0XHRcdFx0Y2FzZSAnbmV3VGFsayc6XG5cdFx0XHRcdFx0dGhpcy5hcnRpY2xlID0gdGhpcy5hcnRpY2xlLnRhbGtQYWdlKCk7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSAnZWRpdCZzZWN0aW9uPW5ldyc7XG5cdFx0XHRcdFx0dGhpcy5wcmludCA9IHdpa2lMaW5rO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdsYXN0Q29udHJpYic6XG5cdFx0XHRcdGNhc2UgJ3NpbmNlTWUnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBtYWdpY0hpc3RvcnlMaW5rO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0b2dnbGVQcmV2aWV3cyc6XG5cdFx0XHRcdFx0dGhpcy50ZXh0ID0gcG9wdXBTdHJpbmcocGcub3B0aW9uLnNpbXBsZVBvcHVwcyA/ICdlbmFibGUgcHJldmlld3MnIDogJ2Rpc2FibGUgcHJldmlld3MnKTtcblx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlICdkaXNhYmxlUG9wdXBzJzpcblx0XHRcdFx0Y2FzZSAncHVyZ2VQb3B1cHMnOlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBwb3B1cE1lbnVMaW5rO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRoaXMucHJpbnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYFVua25vd24gbmF2bGluayB0eXBlOiAke3RoaXMuaWR9YDtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvL1xuXHQvLyAgZW5kIG5hdmxpbmtzXG5cdC8vIEVOREZJTEU6IG5hdmxpbmtzLmpzXG5cdC8vIFNUQVJURklMRTogc2hvcnRjdXRrZXlzLmpzXG5cdGNvbnN0IHBvcHVwSGFuZGxlS2V5cHJlc3MgPSBmdW5jdGlvbiBwb3B1cEhhbmRsZUtleXByZXNzKGV2dCkge1xuXHRcdGNvbnN0IGtleUNvZGUgPSB3aW5kb3cuZXZlbnQgPyB3aW5kb3cuZXZlbnQua2V5Q29kZSA6IChldnQua2V5Q29kZSA/PyBldnQud2hpY2gpO1xuXHRcdGlmICgha2V5Q29kZSB8fCAhcGcuY3VycmVudC5saW5rIHx8ICFwZy5jdXJyZW50LmxpbmsubmF2cG9wdXApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGtleUNvZGUgPT09IDI3KSB7XG5cdFx0XHQvLyBlc2NhcGVcblx0XHRcdGtpbGxQb3B1cCgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBzd2FsbG93IGtleXByZXNzXG5cdFx0fVxuXHRcdGNvbnN0IGxldHRlciA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGtleUNvZGUpO1xuXHRcdGNvbnN0IGxpbmtzID0gcGcuY3VycmVudC5saW5rLm5hdnBvcHVwLm1haW5EaXYucXVlcnlTZWxlY3RvckFsbCgnQScpO1xuXHRcdGxldCBzdGFydExpbmsgPSAwO1xuXHRcdGxldCBpO1xuXHRcdGxldCBqO1xuXHRcdGlmIChwb3B1cEhhbmRsZUtleXByZXNzLmxhc3RQb3B1cExpbmtTZWxlY3RlZCkge1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdGlmIChsaW5rc1tpXSA9PT0gcG9wdXBIYW5kbGVLZXlwcmVzcy5sYXN0UG9wdXBMaW5rU2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRzdGFydExpbmsgPSBpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoaiA9IDA7IGogPCBsaW5rcy5sZW5ndGg7ICsraikge1xuXHRcdFx0aSA9IChzdGFydExpbmsgKyBqICsgMSkgJSBsaW5rcy5sZW5ndGg7XG5cdFx0XHRpZiAobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdwb3B1cGtleScpID09PSBsZXR0ZXIpIHtcblx0XHRcdFx0aWYgKGV2dCAmJiBldnQucHJldmVudERlZmF1bHQpIHtcblx0XHRcdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaW5rc1tpXS5mb2N1cygpO1xuXHRcdFx0XHRwb3B1cEhhbmRsZUtleXByZXNzLmxhc3RQb3B1cExpbmtTZWxlY3RlZCA9IGxpbmtzW2ldO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIHN3YWxsb3cga2V5cHJlc3Ncblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gcGFzcyBrZXlwcmVzcyBvblxuXHRcdGlmIChkb2N1bWVudC5vbGRQb3B1cE9ua2V5cHJlc3MpIHtcblx0XHRcdHJldHVybiBkb2N1bWVudC5vbGRQb3B1cE9ua2V5cHJlc3MoZXZ0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cdGNvbnN0IGFkZFBvcHVwU2hvcnRjdXRzID0gKCkgPT4ge1xuXHRcdGlmIChkb2N1bWVudC5vbmtleXByZXNzICE9PSBwb3B1cEhhbmRsZUtleXByZXNzKSB7XG5cdFx0XHRkb2N1bWVudC5vbGRQb3B1cE9ua2V5cHJlc3MgPSBkb2N1bWVudC5vbmtleXByZXNzO1xuXHRcdH1cblx0XHRkb2N1bWVudC5vbmtleXByZXNzID0gcG9wdXBIYW5kbGVLZXlwcmVzcztcblx0fTtcblx0Y29uc3Qgcm1Qb3B1cFNob3J0Y3V0cyA9ICgpID0+IHtcblx0XHRwb3B1cEhhbmRsZUtleXByZXNzLmxhc3RQb3B1cExpbmtTZWxlY3RlZCA9IG51bGw7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChkb2N1bWVudC5vbGRQb3B1cE9ua2V5cHJlc3MgJiYgZG9jdW1lbnQub2xkUG9wdXBPbmtleXByZXNzID09PSBwb3B1cEhhbmRsZUtleXByZXNzKSB7XG5cdFx0XHRcdC8vIHBhbmljXG5cdFx0XHRcdGRvY3VtZW50Lm9ua2V5cHJlc3MgPSBudWxsOyAvLyAoKSA9PiB7fTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZG9jdW1lbnQub25rZXlwcmVzcyA9IGRvY3VtZW50Lm9sZFBvcHVwT25rZXlwcmVzcztcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8qIElFIGdvZXMgaGVyZSAqL1xuXHRcdH1cblx0fTtcblx0Y29uc3QgYWRkTGlua1Byb3BlcnR5ID0gKGh0bWwsIHByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gdGFrZSBcIjxhIGhyZWY9Li4uPi4uLjwvYT4gYW5kIGFkZCBhIHByb3BlcnR5XG5cdFx0Ly8gbm90IHNvcGhpc3RpY2F0ZWQgYXQgYWxsLCBlYXNpbHkgYnJva2VuXG5cdFx0Y29uc3QgaSA9IGh0bWwuaW5kZXhPZignPicpO1xuXHRcdGlmIChpIDwgMCkge1xuXHRcdFx0cmV0dXJuIGh0bWw7XG5cdFx0fVxuXHRcdHJldHVybiBgJHtodG1sLnNsaWNlKDAsIE1hdGgubWF4KDAsIGkpKX0gJHtwcm9wZXJ0eX0ke2h0bWwuc2xpY2UoTWF0aC5tYXgoMCwgaSkpfWA7XG5cdH07XG5cdGNvbnN0IGFkZFBvcHVwU2hvcnRjdXQgPSAoaHRtbCwga2V5KSA9PiB7XG5cdFx0aWYgKCFnZXRWYWx1ZU9mKCdwb3B1cFNob3J0Y3V0S2V5cycpKSB7XG5cdFx0XHRyZXR1cm4gaHRtbDtcblx0XHR9XG5cdFx0Y29uc3QgcmV0ID0gYWRkTGlua1Byb3BlcnR5KGh0bWwsIGBwb3B1cGtleT1cIiR7a2V5fVwiYCk7XG5cdFx0aWYgKGtleSA9PT0gJyAnKSB7XG5cdFx0XHRrZXkgPSBwb3B1cFN0cmluZygnc3BhY2ViYXInKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldC5yZXBsYWNlKC9eKC4qPykodGl0bGU9XCIpKC4qPykoXCIuKikkL2ksIGAkMSQyJDMgWyR7a2V5fV0kNGApO1xuXHR9O1xuXHQvLyBFTkRGSUxFOiBzaG9ydGN1dGtleXMuanNcblx0Ly8gU1RBUlRGSUxFOiBkaWZmcHJldmlldy5qc1xuXHQvLyBsZXRzIGp1bXAgdGhyb3VnaCBob29wcyB0byBmaW5kIHRoZSByZXYgaWRzIHdlIG5lZWQgdG8gcmV0cmlldmVcblx0Y29uc3QgbG9hZERpZmYgPSAoYXJ0aWNsZSwgb2xkaWQsIGRpZmYsIG5hdnBvcCkgPT4ge1xuXHRcdG5hdnBvcC5kaWZmRGF0YSA9IHtcblx0XHRcdG9sZFJldjoge30sXG5cdFx0XHRuZXdSZXY6IHt9LFxuXHRcdH07XG5cdFx0Y29uc3QgYXBpID0gZ2V0TXdBcGkoKTtcblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRhY3Rpb246ICdjb21wYXJlJyxcblx0XHRcdHByb3A6IFsnaWRzJywgJ3RpdGxlJ10sXG5cdFx0fTtcblx0XHRpZiAoYXJ0aWNsZS50aXRsZSkge1xuXHRcdFx0cGFyYW1zLmZyb210aXRsZSA9IGFydGljbGUudGl0bGU7XG5cdFx0fVxuXHRcdHN3aXRjaCAoZGlmZikge1xuXHRcdFx0Y2FzZSAnY3VyJzpcblx0XHRcdFx0c3dpdGNoIChvbGRpZCkge1xuXHRcdFx0XHRcdGNhc2UgbnVsbDpcblx0XHRcdFx0XHRjYXNlICcnOlxuXHRcdFx0XHRcdGNhc2UgJ3ByZXYnOlxuXHRcdFx0XHRcdFx0Ly8gdGhpcyBjYW4gb25seSB3b3JrIGlmIHdlIGhhdmUgdGhlIHRpdGxlXG5cdFx0XHRcdFx0XHQvLyBjdXIgLT4gcHJldlxuXHRcdFx0XHRcdFx0cGFyYW1zLnRvcmVsYXRpdmUgPSAncHJldic7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cGFyYW1zLmZyb21yZXYgPSBvbGRpZDtcblx0XHRcdFx0XHRcdHBhcmFtcy50b3JlbGF0aXZlID0gJ2N1cic7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3ByZXYnOlxuXHRcdFx0XHRpZiAob2xkaWQpIHtcblx0XHRcdFx0XHRwYXJhbXMuZnJvbXJldiA9IG9sZGlkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhcmFtcy50b3JlbGF0aXZlID0gJ3ByZXYnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ25leHQnOlxuXHRcdFx0XHRwYXJhbXMuZnJvbXJldiA9IG9sZGlkIHx8IDA7XG5cdFx0XHRcdHBhcmFtcy50b3JlbGF0aXZlID0gJ25leHQnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHBhcmFtcy5mcm9tcmV2ID0gb2xkaWQgfHwgMDtcblx0XHRcdFx0cGFyYW1zLnRvcmV2ID0gZGlmZiB8fCAwO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0YXBpLmdldChwYXJhbXMpLnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aWQgPSBkYXRhLmNvbXBhcmUuZnJvbXJldmlkO1xuXHRcdFx0bmF2cG9wLmRpZmZEYXRhLm5ld1Jldi5yZXZpZCA9IGRhdGEuY29tcGFyZS50b3JldmlkO1xuXHRcdFx0YWRkUmV2aWV3TGluayhuYXZwb3AsICdwb3B1cE1pc2NUb29scycpO1xuXHRcdFx0Y29uc3QgZ28gPSAoKSA9PiB7XG5cdFx0XHRcdHBlbmRpbmdOYXZwb3BUYXNrKG5hdnBvcCk7XG5cdFx0XHRcdGxldCB1cmwgPSBgJHtwZy53aWtpLmFwaXdpa2liYXNlfT9mb3JtYXQ9anNvbiZmb3JtYXR2ZXJzaW9uPTImYWN0aW9uPXF1ZXJ5JmA7XG5cdFx0XHRcdHVybCArPSBgcmV2aWRzPSR7bmF2cG9wLmRpZmZEYXRhLm9sZFJldi5yZXZpZH18JHtuYXZwb3AuZGlmZkRhdGEubmV3UmV2LnJldmlkfWA7XG5cdFx0XHRcdHVybCArPSAnJnByb3A9cmV2aXNpb25zJnJ2cHJvcD1pZHN8dGltZXN0YW1wfGNvbnRlbnQnO1xuXHRcdFx0XHRnZXRQYWdlV2l0aENhY2hpbmcodXJsLCBkb25lRGlmZiwgbmF2cG9wKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIHJlbW92ZSBob29rIG9uY2UgcnVuXG5cdFx0XHR9O1xuXHRcdFx0aWYgKG5hdnBvcC52aXNpYmxlIHx8ICFnZXRWYWx1ZU9mKCdwb3B1cExhenlEb3dubG9hZHMnKSkge1xuXHRcdFx0XHRnbygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmF2cG9wLmFkZEhvb2soZ28sICd1bmhpZGUnLCAnYmVmb3JlJywgJ0RPV05MT0FEX0RJRkZTJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cdC8vIFB1dCBhIFwibWFyayBwYXRyb2xsZWRcIiBsaW5rIHRvIGFuIGVsZW1lbnQgdGFyZ2V0XG5cdC8vIFRPRE86IEFsbG93IHBhdHJvbCBhIHJldmlzaW9uLCBhcyB3ZWxsIGFzIGEgZGlmZlxuXHRjb25zdCBhZGRSZXZpZXdMaW5rID0gKG5hdnBvcCwgdGFyZ2V0KSA9PiB7XG5cdFx0aWYgKCFwZy51c2VyLmNhblJldmlldykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBJZiAnbmV3UmV2JyBpcyBvbGRlciB0aGFuICdvbGRSZXYnIHRoYW4gaXQgY291bGQgYmUgY29uZnVzaW5nLCBzbyB3ZSBkbyBub3Qgc2hvdyB0aGUgcmV2aWV3IGxpbmsuXG5cdFx0aWYgKG5hdnBvcC5kaWZmRGF0YS5uZXdSZXYucmV2aWQgPD0gbmF2cG9wLmRpZmZEYXRhLm9sZFJldi5yZXZpZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdHByb3A6IFsnaW5mbycsICdmbGFnZ2VkJ10sXG5cdFx0XHRyZXZpZHM6IG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aWQsXG5cdFx0fTtcblx0XHRnZXRNd0FwaSgpXG5cdFx0XHQuZ2V0KHBhcmFtcylcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHN0YWJsZV9yZXZpZCA9IChkYXRhLnF1ZXJ5LnBhZ2VzWzBdLmZsYWdnZWQgJiYgZGF0YS5xdWVyeS5wYWdlc1swXS5mbGFnZ2VkLnN0YWJsZV9yZXZpZCkgfHwgMDtcblx0XHRcdFx0Ly8gVGhlIGRpZmYgY2FuIGJlIHJldmlld2VkIGlmIHRoZSBvbGQgdmVyc2lvbiBpcyB0aGUgbGFzdCByZXZpZXdlZCB2ZXJzaW9uXG5cdFx0XHRcdC8vIFRPRE86IE90aGVyIHBvc3NpYmxlIGNvbmRpdGlvbnMgdGhhdCB3ZSBtYXkgd2FudCB0byBpbXBsZW1lbnQgaW5zdGVhZCBvZiB0aGlzIG9uZTpcblx0XHRcdFx0Ly8gLSBvbGQgdmVyc2lvbiBpcyBwYXRyb2xsZWQgYW5kIHRoZSBuZXcgdmVyc2lvbiBpcyBub3QgcGF0cm9sbGVkXG5cdFx0XHRcdC8vIC0gb2xkIHZlcnNpb24gaXMgcGF0cm9sbGVkIGFuZCB0aGUgbmV3IHZlcnNpb24gaXMgbW9yZSByZWNlbnQgdGhhbiB0aGUgbGFzdCByZXZpZXdlZCB2ZXJzaW9uXG5cdFx0XHRcdGlmIChzdGFibGVfcmV2aWQgPT09IG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aWQpIHtcblx0XHRcdFx0XHRjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdFx0XHRcdGEuaW5uZXJIVE1MID0gcG9wdXBTdHJpbmcoJ21hcmsgcGF0cm9sbGVkJyk7XG5cdFx0XHRcdFx0YS50aXRsZSA9IHBvcHVwU3RyaW5nKCdtYXJrcGF0cm9sbGVkSGludCcpO1xuXHRcdFx0XHRcdGEub25jbGljayA9ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiAncmV2aWV3Jyxcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogdHByaW50ZignZGVmYXVsdHBvcHVwUmV2aWV3ZWRTdW1tYXJ5JywgW1xuXHRcdFx0XHRcdFx0XHRcdG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aWQsXG5cdFx0XHRcdFx0XHRcdFx0bmF2cG9wLmRpZmZEYXRhLm5ld1Jldi5yZXZpZCxcblx0XHRcdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0XHRcdHJldmlkOiBuYXZwb3AuZGlmZkRhdGEubmV3UmV2LnJldmlkLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGdldE13QXBpKClcblx0XHRcdFx0XHRcdFx0LnBvc3RXaXRoVG9rZW4oJ2NzcmYnLCBwYXJhbXMpXG5cdFx0XHRcdFx0XHRcdC5kb25lKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogVXBkYXRlIGN1cnJlbnQgcGFnZSBhbmQgb3RoZXIgYWxyZWFkeSBjb25zdHJ1Y3RlZCBwb3B1cHNcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmZhaWwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KHBvcHVwU3RyaW5nKCdDb3VsZCBub3QgbWFya2VkIHRoaXMgZWRpdCBhcyBwYXRyb2xsZWQnKSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAncG9wdXBzJyxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0c2V0UG9wdXBIVE1MKGEsIHRhcmdldCwgbmF2cG9wLmlkTnVtYmVyLCBudWxsLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH07XG5cdGNvbnN0IGRvbmVEaWZmID0gKGRvd25sb2FkKSA9PiB7XG5cdFx0aWYgKCFkb3dubG9hZC5vd25lciB8fCAhZG93bmxvYWQub3duZXIuZGlmZkRhdGEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbmF2cG9wID0gZG93bmxvYWQub3duZXI7XG5cdFx0Y29tcGxldGVkTmF2cG9wVGFzayhuYXZwb3ApO1xuXHRcdGxldCBwYWdlcztcblx0XHRsZXQgcmV2aXNpb25zID0gW107XG5cdFx0dHJ5IHtcblx0XHRcdC8vIFByb2Nlc3MgdGhlIGRvd25sb2Fkc1xuXHRcdFx0KHtwYWdlc30gPSBnZXRKc09iaihkb3dubG9hZC5kYXRhKS5xdWVyeSk7XG5cdFx0XHRmb3IgKGNvbnN0IHBhZ2Ugb2YgcGFnZXMpIHtcblx0XHRcdFx0cmV2aXNpb25zID0gWy4uLnJldmlzaW9ucywgLi4ucGFnZS5yZXZpc2lvbnNdO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCByZXZpc2lvbiBvZiByZXZpc2lvbnMpIHtcblx0XHRcdFx0aWYgKHJldmlzaW9uLnJldmlkID09PSBuYXZwb3AuZGlmZkRhdGEub2xkUmV2LnJldmlkKSB7XG5cdFx0XHRcdFx0bmF2cG9wLmRpZmZEYXRhLm9sZFJldi5yZXZpc2lvbiA9IHJldmlzaW9uO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJldmlzaW9uLnJldmlkID09PSBuYXZwb3AuZGlmZkRhdGEubmV3UmV2LnJldmlkKSB7XG5cdFx0XHRcdFx0bmF2cG9wLmRpZmZEYXRhLm5ld1Jldi5yZXZpc2lvbiA9IHJldmlzaW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRlcnJsb2coJ0NvdWxkIG5vdCBnZXQgZGlmZicpO1xuXHRcdH1cblx0XHRpbnNlcnREaWZmKG5hdnBvcCk7XG5cdH07XG5cdGNvbnN0IHJtQm9yaW5nTGluZXMgPSAoYSwgYiwgY29udGV4dCkgPT4ge1xuXHRcdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnRleHQgPSAyO1xuXHRcdH1cblx0XHQvLyB0aGlzIGlzIGZhaXJseSBzbG93Li4uIGkgdGhpbmsgaXQncyBxdWlja2VyIHRoYW4gZG9pbmcgYSB3b3JkLWJhc2VkIGRpZmYgZnJvbSB0aGUgb2ZmLCB0aG91Z2hcblx0XHRjb25zdCBhYSA9IFtdO1xuXHRcdGNvbnN0IGFhYSA9IFtdO1xuXHRcdGNvbnN0IGJiID0gW107XG5cdFx0Y29uc3QgYmJiID0gW107XG5cdFx0bGV0IGk7XG5cdFx0bGV0IGo7XG5cdFx0Ly8gZmlyc3QsIGdhdGhlciBhbGwgZGlzY29ubmVjdGVkIG5vZGVzIGluIGEgYW5kIGFsbCBjcm9zc2luZyBub2RlcyBpbiBhIGFuZCBiXG5cdFx0Zm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmICghYVtpXS5wYWlyZWQpIHtcblx0XHRcdFx0YWFbaV0gPSAxO1xuXHRcdFx0fSBlbHNlIGlmIChjb3VudENyb3NzaW5ncyhiLCBhLCBpLCB0cnVlKSkge1xuXHRcdFx0XHRhYVtpXSA9IDE7XG5cdFx0XHRcdGJiW2FbaV0ucm93XSA9IDE7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHBpY2sgdXAgcmVtYWluaW5nIGRpc2Nvbm5lY3RlZCBub2RlcyBpbiBiXG5cdFx0Zm9yIChpID0gMDsgaSA8IGIubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChiYltpXSA9PT0gMSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICghYltpXS5wYWlyZWQpIHtcblx0XHRcdFx0YmJbaV0gPSAxO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBhbm90aGVyIHBhc3MgdG8gZ2F0aGVyIGNvbnRleHQ6IHdlIHdhbnQgdGhlIG5laWdoYm91cnMgb2YgaW5jbHVkZWQgbm9kZXMgd2hpY2ggYXJlIG5vdFxuXHRcdC8vIHlldCBpbmNsdWRlZCB3ZSBoYXZlIHRvIGFkZCBpbiBwYXJ0bmVycyBvZiB0aGVzZSBub2RlcywgYnV0IHdlIGRvbid0IHdhbnQgdG8gYWRkIGNvbnRleHRcblx0XHQvLyBmb3IgKnRob3NlKiBub2RlcyBpbiB0aGUgbmV4dCBwYXNzXG5cdFx0Zm9yIChpID0gMDsgaSA8IGIubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChiYltpXSA9PT0gMSkge1xuXHRcdFx0XHRmb3IgKGogPSBNYXRoLm1heCgwLCBpIC0gY29udGV4dCk7IGogPCBNYXRoLm1pbihiLmxlbmd0aCwgaSArIGNvbnRleHQpOyArK2opIHtcblx0XHRcdFx0XHRpZiAoIWJiW2pdKSB7XG5cdFx0XHRcdFx0XHRiYltqXSA9IDE7XG5cdFx0XHRcdFx0XHRhYVtiW2pdLnJvd10gPSAwLjU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAoYWFbaV0gPT09IDEpIHtcblx0XHRcdFx0Zm9yIChqID0gTWF0aC5tYXgoMCwgaSAtIGNvbnRleHQpOyBqIDwgTWF0aC5taW4oYS5sZW5ndGgsIGkgKyBjb250ZXh0KTsgKytqKSB7XG5cdFx0XHRcdFx0aWYgKCFhYVtqXSkge1xuXHRcdFx0XHRcdFx0YWFbal0gPSAxO1xuXHRcdFx0XHRcdFx0YmJbYVtqXS5yb3ddID0gMC41O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGkgPSAwOyBpIDwgYmIubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChiYltpXSA+IDApIHtcblx0XHRcdFx0Ly8gaXQncyBhIHJvdyB3ZSBuZWVkXG5cdFx0XHRcdGlmIChiW2ldLnBhaXJlZCkge1xuXHRcdFx0XHRcdGJiYi5wdXNoKGJbaV0udGV4dCk7IC8vIGpvaW5lZDsgcGFydG5lciBzaG91bGQgYmUgaW4gYWFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRiYmIucHVzaChiW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGkgPSAwOyBpIDwgYWEubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChhYVtpXSA+IDApIHtcblx0XHRcdFx0Ly8gaXQncyBhIHJvdyB3ZSBuZWVkXG5cdFx0XHRcdGlmIChhW2ldLnBhaXJlZCkge1xuXHRcdFx0XHRcdGFhYS5wdXNoKGFbaV0udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gam9pbmVkOyBwYXJ0bmVyIHNob3VsZCBiZSBpbiBhYVxuXHRcdFx0XHRcdGFhYS5wdXNoKGFbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhOiBhYWEsXG5cdFx0XHRiOiBiYmIsXG5cdFx0fTtcblx0fTtcblx0Y29uc3Qgc3RyaXBPdXRlckNvbW1vbkxpbmVzID0gKGEsIGIsIGNvbnRleHQpID0+IHtcblx0XHRsZXQgaSA9IDA7XG5cdFx0d2hpbGUgKGkgPCBhLmxlbmd0aCAmJiBpIDwgYi5sZW5ndGggJiYgYVtpXSA9PT0gYltpXSkge1xuXHRcdFx0KytpO1xuXHRcdH1cblx0XHRsZXQgaiA9IGEubGVuZ3RoIC0gMTtcblx0XHRsZXQgayA9IGIubGVuZ3RoIC0gMTtcblx0XHR3aGlsZSAoaiA+PSAwICYmIGsgPj0gMCAmJiBhW2pdID09PSBiW2tdKSB7XG5cdFx0XHQtLWo7XG5cdFx0XHQtLWs7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhOiBhLnNsaWNlKE1hdGgubWF4KDAsIGkgLSAxIC0gY29udGV4dCksIE1hdGgubWluKGEubGVuZ3RoICsgMSwgaiArIGNvbnRleHQgKyAxKSksXG5cdFx0XHRiOiBiLnNsaWNlKE1hdGgubWF4KDAsIGkgLSAxIC0gY29udGV4dCksIE1hdGgubWluKGIubGVuZ3RoICsgMSwgayArIGNvbnRleHQgKyAxKSksXG5cdFx0fTtcblx0fTtcblx0Y29uc3QgaW5zZXJ0RGlmZiA9IChuYXZwb3ApID0+IHtcblx0XHQvLyBmb3Igc3BlZWQgcmVhc29ucywgd2UgZmlyc3QgZG8gYSBsaW5lLWJhc2VkIGRpZmYsIGRpc2NhcmQgc3R1ZmYgdGhhdCBzZWVtcyBib3JpbmcsIHRoZW5cblx0XHQvLyBkbyBhIHdvcmQtYmFzZWQgZGlmZlxuXHRcdC8vIEZJWE1FOiBzb21ldGltZXMgdGhpcyBnaXZlcyBtaXNsZWFkaW5nIGRpZmZzIGFzIGRpc3RhbnQgY2h1bmtzIGFyZSBzcXVhc2hlZCB0b2dldGhlclxuXHRcdGxldCBvbGRsaW5lcyA9IG5hdnBvcC5kaWZmRGF0YS5vbGRSZXYucmV2aXNpb24uY29udGVudC5zcGxpdCgnXFxuJyk7XG5cdFx0bGV0IG5ld2xpbmVzID0gbmF2cG9wLmRpZmZEYXRhLm5ld1Jldi5yZXZpc2lvbi5jb250ZW50LnNwbGl0KCdcXG4nKTtcblx0XHRsZXQgaW5uZXIgPSBzdHJpcE91dGVyQ29tbW9uTGluZXMob2xkbGluZXMsIG5ld2xpbmVzLCBnZXRWYWx1ZU9mKCdwb3B1cERpZmZDb250ZXh0TGluZXMnKSk7XG5cdFx0b2xkbGluZXMgPSBpbm5lci5hO1xuXHRcdG5ld2xpbmVzID0gaW5uZXIuYjtcblx0XHRsZXQgdHJ1bmNhdGVkID0gZmFsc2U7XG5cdFx0Z2V0VmFsdWVPZigncG9wdXBEaWZmTWF4TGluZXMnKTtcblx0XHRpZiAob2xkbGluZXMubGVuZ3RoID4gcGcub3B0aW9uLnBvcHVwRGlmZk1heExpbmVzIHx8IG5ld2xpbmVzLmxlbmd0aCA+IHBnLm9wdGlvbi5wb3B1cERpZmZNYXhMaW5lcykge1xuXHRcdFx0Ly8gdHJ1bmNhdGVcblx0XHRcdHRydW5jYXRlZCA9IHRydWU7XG5cdFx0XHRpbm5lciA9IHN0cmlwT3V0ZXJDb21tb25MaW5lcyhcblx0XHRcdFx0b2xkbGluZXMuc2xpY2UoMCwgcGcub3B0aW9uLnBvcHVwRGlmZk1heExpbmVzKSxcblx0XHRcdFx0bmV3bGluZXMuc2xpY2UoMCwgcGcub3B0aW9uLnBvcHVwRGlmZk1heExpbmVzKSxcblx0XHRcdFx0cGcub3B0aW9uLnBvcHVwRGlmZkNvbnRleHRMaW5lc1xuXHRcdFx0KTtcblx0XHRcdG9sZGxpbmVzID0gaW5uZXIuYTtcblx0XHRcdG5ld2xpbmVzID0gaW5uZXIuYjtcblx0XHR9XG5cdFx0Y29uc3QgbGluZURpZmYgPSBkaWZmKG9sZGxpbmVzLCBuZXdsaW5lcyk7XG5cdFx0Y29uc3QgbGluZXMyID0gcm1Cb3JpbmdMaW5lcyhsaW5lRGlmZi5vLCBsaW5lRGlmZi5uKTtcblx0XHRjb25zdCBvbGRsaW5lczIgPSBsaW5lczIuYTtcblx0XHRjb25zdCBuZXdsaW5lczIgPSBsaW5lczIuYjtcblx0XHRsZXQgaHRtbCA9ICc8aHI+Jztcblx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBEaWZmRGF0ZXMnKSkge1xuXHRcdFx0aHRtbCArPSBkaWZmRGF0ZXNUYWJsZShuYXZwb3ApO1xuXHRcdFx0aHRtbCArPSAnPGhyPic7XG5cdFx0fVxuXHRcdGh0bWwgKz0gc2hvcnRlbkRpZmZTdHJpbmcoXG5cdFx0XHRkaWZmU3RyaW5nKG9sZGxpbmVzMi5qb2luKCdcXG4nKSwgbmV3bGluZXMyLmpvaW4oJ1xcbicpKSxcblx0XHRcdGdldFZhbHVlT2YoJ3BvcHVwRGlmZkNvbnRleHRDaGFyYWN0ZXJzJylcblx0XHQpLmpvaW4oJzxocj4nKTtcblx0XHRzZXRQb3B1cFRpcHNBbmRIVE1MKFxuXHRcdFx0aHRtbC5zcGxpdCgnXFxuJykuam9pbignPGJyPicpICtcblx0XHRcdFx0KHRydW5jYXRlZCA/IGA8aHI+PGI+JHtwb3B1cFN0cmluZygnRGlmZiB0cnVuY2F0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMnKX08L2I+YCA6ICcnKSxcblx0XHRcdCdwb3B1cFByZXZpZXcnLFxuXHRcdFx0bmF2cG9wLmlkTnVtYmVyXG5cdFx0KTtcblx0fTtcblx0Y29uc3QgZGlmZkRhdGVzVGFibGUgPSAobmF2cG9wKSA9PiB7XG5cdFx0bGV0IGh0bWwgPSAnPHRhYmxlIGNsYXNzPVwicG9wdXBfZGlmZl9kYXRlc1wiPic7XG5cdFx0aHRtbCArPSBkaWZmRGF0ZXNUYWJsZVJvdyhuYXZwb3AuZGlmZkRhdGEubmV3UmV2LnJldmlzaW9uLCB0cHJpbnRmKCdOZXcgcmV2aXNpb24nKSk7XG5cdFx0aHRtbCArPSBkaWZmRGF0ZXNUYWJsZVJvdyhuYXZwb3AuZGlmZkRhdGEub2xkUmV2LnJldmlzaW9uLCB0cHJpbnRmKCdPbGQgcmV2aXNpb24nKSk7XG5cdFx0aHRtbCArPSAnPC90YWJsZT4nO1xuXHRcdHJldHVybiBodG1sO1xuXHR9O1xuXHRjb25zdCBkaWZmRGF0ZXNUYWJsZVJvdyA9IChyZXZpc2lvbiwgbGFiZWwpID0+IHtcblx0XHRsZXQgdHh0ID0gJyc7XG5cdFx0Y29uc3QgbGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKHJldmlzaW9uLnRpbWVzdGFtcCk7XG5cdFx0dHh0ID0gZm9ybWF0dGVkRGF0ZVRpbWUobGFzdE1vZGlmaWVkRGF0ZSk7XG5cdFx0Y29uc3QgcmV2bGluayA9IGdlbmVyYWxMaW5rKHtcblx0XHRcdHVybDogYCR7bXcuY29uZmlnLmdldCgnd2dTY3JpcHQnKX0/b2xkaWQ9JHtyZXZpc2lvbi5yZXZpZH1gLFxuXHRcdFx0dGV4dDogbGFiZWwsXG5cdFx0XHR0aXRsZTogbGFiZWwsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNpbXBsZVByaW50ZignPHRyPjx0ZD4lczwvdGQ+PHRkPiVzPC90ZD48L3RyPicsIFtyZXZsaW5rLCB0eHRdKTtcblx0fTtcblx0Ly8gRU5ERklMRTogZGlmZnByZXZpZXcuanNcblx0Ly8gU1RBUlRGSUxFOiBsaW5rcy5qc1xuXHQvLyBMSU5LIEdFTkVSQVRJT04gLy9cblx0Ly8gdGl0bGVkRGlmZkxpbmsgLS0+IHRpdGxlZFdpa2lMaW5rIC0tPiBnZW5lcmFsTGlua1xuXHQvLyB3aWtpTGlua1x0ICAgLS0+IHRpdGxlZFdpa2lMaW5rIC0tPiBnZW5lcmFsTGlua1xuXHQvLyBlZGl0Q291bnRlckxpbmsgLS0+IGdlbmVyYWxMaW5rXG5cdC8vIFRPRE8gTWFrZSB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIEVsZW1lbnQgb2JqZWN0cywgbm90IGp1c3QgcmF3IEhUTUwgc3RyaW5ncy5cblx0Y29uc3QgdGl0bGVkRGlmZkxpbmsgPSAobCkgPT4ge1xuXHRcdHJldHVybiB0aXRsZWRXaWtpTGluayh7XG5cdFx0XHRhcnRpY2xlOiBsLmFydGljbGUsXG5cdFx0XHRhY3Rpb246IGAke2wudG99Jm9sZGlkPSR7bC5mcm9tfWAsXG5cdFx0XHRuZXdXaW46IGwubmV3V2luLFxuXHRcdFx0bm9Qb3B1cDogbC5ub1BvcHVwLFxuXHRcdFx0dGV4dDogbC50ZXh0LFxuXHRcdFx0dGl0bGU6IGwudGl0bGUsXG5cdFx0XHQvKiBoYWNrOiBubyBvbGRpZCBoZXJlICovXG5cdFx0XHRhY3Rpb25OYW1lOiAnZGlmZicsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IHdpa2lMaW5rID0gKGwpID0+IHtcblx0XHQvLyB7YXJ0aWNsZTphcnRpY2xlLCBhY3Rpb246YWN0aW9uLCB0ZXh0OnRleHQsIG9sZGlkLCBuZXdpZH0pIHtcblx0XHRpZiAoISh0eXBlb2YgbC5hcnRpY2xlID09PSB0eXBlb2Yge30gJiYgdHlwZW9mIGwuYWN0aW9uID09PSB0eXBlb2YgJycgJiYgdHlwZW9mIGwudGV4dCA9PT0gdHlwZW9mICcnKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGlmIChsLm9sZGlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGwub2xkaWQgPSBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBzYXZlZE9sZGlkID0gbC5vbGRpZDtcblx0XHRpZiAoIS9eKGVkaXR8dmlld3xyZXZlcnR8cmVuZGVyKSR8XnJhdy8udGVzdChsLmFjdGlvbikpIHtcblx0XHRcdGwub2xkaWQgPSBudWxsO1xuXHRcdH1cblx0XHRsZXQgaGludCA9IHBvcHVwU3RyaW5nKGAke2wuYWN0aW9ufUhpbnRgKTsgLy8gcmV2ZXJ0SGludCBldGMgZXRjIGV0Y1xuXHRcdGNvbnN0IG9sZGlkRGF0YSA9IFtsLm9sZGlkLCBzYWZlRGVjb2RlVVJJKGwuYXJ0aWNsZSldO1xuXHRcdGxldCByZXZpc2lvblN0cmluZyA9IHRwcmludGYoJ3JldmlzaW9uICVzIG9mICVzJywgb2xkaWREYXRhKTtcblx0XHRsb2coYHJldmlzaW9uU3RyaW5nPSR7cmV2aXNpb25TdHJpbmd9YCk7XG5cdFx0c3dpdGNoIChsLmFjdGlvbikge1xuXHRcdFx0Y2FzZSAnZWRpdCZzZWN0aW9uPW5ldyc6XG5cdFx0XHRcdGhpbnQgPSBwb3B1cFN0cmluZygnbmV3U2VjdGlvbkhpbnQnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdlZGl0JnVuZG89Jzpcblx0XHRcdFx0aWYgKGwuZGlmZiAmJiBsLmRpZmYgIT09ICdwcmV2JyAmJiBzYXZlZE9sZGlkKSB7XG5cdFx0XHRcdFx0bC5hY3Rpb24gKz0gYCR7bC5kaWZmfSZ1bmRvYWZ0ZXI9JHtzYXZlZE9sZGlkfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc2F2ZWRPbGRpZCkge1xuXHRcdFx0XHRcdGwuYWN0aW9uICs9IHNhdmVkT2xkaWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aGludCA9IHBvcHVwU3RyaW5nKCd1bmRvSGludCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JhdyZjdHlwZT10ZXh0L2Nzcyc6XG5cdFx0XHRcdGhpbnQgPSBwb3B1cFN0cmluZygncmF3SGludCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JldmVydCc6IHtcblx0XHRcdFx0Y29uc3QgcCA9IHBhcnNlUGFyYW1zKHBnLmN1cnJlbnQubGluay5ocmVmKTtcblx0XHRcdFx0bC5hY3Rpb24gPSBgZWRpdCZhdXRvY2xpY2s9d3BTYXZlJmFjdG9rZW49JHthdXRvQ2xpY2tUb2tlbigpfSZhdXRvaW1wbD0ke3BvcHVwU3RyaW5nKFxuXHRcdFx0XHRcdCdhdXRvZWRpdF92ZXJzaW9uJ1xuXHRcdFx0XHQpfSZhdXRvc3VtbWFyeT0ke3JldmVydFN1bW1hcnkobC5vbGRpZCwgcC5kaWZmKX1gO1xuXHRcdFx0XHRpZiAocC5kaWZmID09PSAncHJldicpIHtcblx0XHRcdFx0XHRsLmFjdGlvbiArPSAnJmRpcmVjdGlvbj1wcmV2Jztcblx0XHRcdFx0XHRyZXZpc2lvblN0cmluZyA9IHRwcmludGYoJ3RoZSByZXZpc2lvbiBwcmlvciB0byByZXZpc2lvbiAlcyBvZiAlcycsIG9sZGlkRGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwUmV2ZXJ0U3VtbWFyeVByb21wdCcpKSB7XG5cdFx0XHRcdFx0bC5hY3Rpb24gKz0gJyZhdXRvc3VtbWFyeXByb21wdD10cnVlJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZ2V0VmFsdWVPZigncG9wdXBNaW5vclJldmVydHMnKSkge1xuXHRcdFx0XHRcdGwuYWN0aW9uICs9ICcmYXV0b21pbm9yPXRydWUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxvZyhgcmV2aXNpb25TdHJpbmcgaXMgbm93ICR7cmV2aXNpb25TdHJpbmd9YCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnbnVsbEVkaXQnOlxuXHRcdFx0XHRsLmFjdGlvbiA9IGBlZGl0JmF1dG9jbGljaz13cFNhdmUmYWN0b2tlbj0ke2F1dG9DbGlja1Rva2VuKCl9JmF1dG9pbXBsPSR7cG9wdXBTdHJpbmcoXG5cdFx0XHRcdFx0J2F1dG9lZGl0X3ZlcnNpb24nXG5cdFx0XHRcdCl9JmF1dG9zdW1tYXJ5PW51bGxgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2hpc3RvcnlmZWVkJzpcblx0XHRcdFx0bC5hY3Rpb24gPSAnaGlzdG9yeSZmZWVkPXJzcyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnbWFya3BhdHJvbGxlZCc6XG5cdFx0XHRcdGwuYWN0aW9uID0gYG1hcmtwYXRyb2xsZWQmcmNpZD0ke2wucmNpZH1gO1xuXHRcdH1cblx0XHRpZiAoaGludCkge1xuXHRcdFx0aGludCA9IGwub2xkaWQgPyBzaW1wbGVQcmludGYoaGludCwgW3JldmlzaW9uU3RyaW5nXSkgOiBzaW1wbGVQcmludGYoaGludCwgW3NhZmVEZWNvZGVVUkkobC5hcnRpY2xlKV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoaW50ID0gc2FmZURlY29kZVVSSShgJHtsLmFydGljbGV9JmFjdGlvbj0ke2wuYWN0aW9ufWApICsgbC5vbGRpZCA/IGAmb2xkaWQ9JHtsLm9sZGlkfWAgOiAnJztcblx0XHR9XG5cdFx0cmV0dXJuIHRpdGxlZFdpa2lMaW5rKHtcblx0XHRcdGFydGljbGU6IGwuYXJ0aWNsZSxcblx0XHRcdGFjdGlvbjogbC5hY3Rpb24sXG5cdFx0XHR0ZXh0OiBsLnRleHQsXG5cdFx0XHRuZXdXaW46IGwubmV3V2luLFxuXHRcdFx0dGl0bGU6IGhpbnQsXG5cdFx0XHRvbGRpZDogbC5vbGRpZCxcblx0XHRcdG5vUG9wdXA6IGwubm9Qb3B1cCxcblx0XHRcdG9uY2xpY2s6IGwub25jbGljayxcblx0XHR9KTtcblx0fTtcblx0Y29uc3QgcmV2ZXJ0U3VtbWFyeSA9IChvbGRpZCwgZGlmZikgPT4ge1xuXHRcdGxldCByZXQgPSAnJztcblx0XHRyZXQgPVxuXHRcdFx0ZGlmZiA9PT0gJ3ByZXYnXG5cdFx0XHRcdD8gZ2V0VmFsdWVPZigncG9wdXBRdWVyaWVkUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnknKVxuXHRcdFx0XHQ6IGdldFZhbHVlT2YoJ3BvcHVwUXVlcmllZFJldmVydFN1bW1hcnknKTtcblx0XHRyZXR1cm4gYCR7cmV0fSZhdXRvcnY9JHtvbGRpZH1gO1xuXHR9O1xuXHRjb25zdCB0aXRsZWRXaWtpTGluayA9IChsKSA9PiB7XG5cdFx0Ly8gcG9zc2libGUgcHJvcGVydGllcyBvZiBhcmd1bWVudDpcblx0XHQvLyBhcnRpY2xlLCBhY3Rpb24sIHRleHQsIHRpdGxlLCBvbGRpZCwgYWN0aW9uTmFtZSwgY2xhc3NOYW1lLCBub1BvcHVwXG5cdFx0Ly8gb2xkaWQgPSBudWxsIGlzIGZpbmUgaGVyZVxuXHRcdC8vIGFydGljbGUgYW5kIGFjdGlvbiBhcmUgbWFuZGF0b3J5IGFyZ3Ncblx0XHRpZiAobC5hcnRpY2xlID09PSB1bmRlZmluZWQgfHwgbC5hY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZXJybG9nKCdnb3QgdW5kZWZpbmVkIGFydGljbGUgb3IgYWN0aW9uIGluIHRpdGxlZFdpa2lMaW5rJyk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgYmFzZSA9IHBnLndpa2kudGl0bGViYXNlICsgbC5hcnRpY2xlLnVybFN0cmluZygpO1xuXHRcdGxldCB1cmwgPSBiYXNlO1xuXHRcdGlmIChsLmFjdGlvbk5hbWUgPT09IHVuZGVmaW5lZCB8fCAhbC5hY3Rpb25OYW1lKSB7XG5cdFx0XHRsLmFjdGlvbk5hbWUgPSAnYWN0aW9uJztcblx0XHR9XG5cdFx0Ly8gbm8gbmVlZCB0byBhZGQgJmFjdGlvbj12aWV3LCBhbmQgdGhpcyBjb25mdXNlcyBhbmNob3JzXG5cdFx0aWYgKGwuYWN0aW9uICE9PSAndmlldycpIHtcblx0XHRcdHVybCA9IGAke2Jhc2V9JiR7bC5hY3Rpb25OYW1lfT0ke2wuYWN0aW9ufWA7XG5cdFx0fVxuXHRcdGlmIChsLm9sZGlkICE9PSB1bmRlZmluZWQgJiYgbC5vbGRpZCkge1xuXHRcdFx0dXJsICs9IGAmb2xkaWQ9JHtsLm9sZGlkfWA7XG5cdFx0fVxuXHRcdGxldCBjc3NDbGFzcyA9IHBnLm1pc2MuZGVmYXVsdE5hdmxpbmtDbGFzc25hbWU7XG5cdFx0aWYgKGwuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQgJiYgbC5jbGFzc05hbWUpIHtcblx0XHRcdGNzc0NsYXNzID0gbC5jbGFzc05hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmwsXG5cdFx0XHRuZXdXaW46IGwubmV3V2luLFxuXHRcdFx0dGl0bGU6IGwudGl0bGUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBsLnRpdGxlLFxuXHRcdFx0dGV4dDogbC50ZXh0ID09PSB1bmRlZmluZWQgPyBudWxsIDogbC50ZXh0LFxuXHRcdFx0Y2xhc3NOYW1lOiBjc3NDbGFzcyxcblx0XHRcdG5vUG9wdXA6IGwubm9Qb3B1cCxcblx0XHRcdG9uY2xpY2s6IGwub25jbGljayxcblx0XHR9KTtcblx0fTtcblx0cGcuZm4uZ2V0TGFzdENvbnRyaWIgPSAod2lraXBhZ2UsIG5ld1dpbikgPT4ge1xuXHRcdGdldEhpc3RvcnlJbmZvKHdpa2lwYWdlLCAoeCkgPT4ge1xuXHRcdFx0cHJvY2Vzc0xhc3RDb250cmliSW5mbyh4LCB7cGFnZTogd2lraXBhZ2UsIG5ld1dpbn0pO1xuXHRcdH0pO1xuXHR9O1xuXHRjb25zdCBwcm9jZXNzTGFzdENvbnRyaWJJbmZvID0gKGluZm8sIHN0dWZmKSA9PiB7XG5cdFx0aWYgKCFpbmZvLmVkaXRzIHx8IGluZm8uZWRpdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSgnUG9wdXBzOiBhbiBvZGQgdGhpbmcgaGFwcGVuZWQuIFBsZWFzZSByZXRyeS4nLCB7dGFnOiAncG9wdXBzJywgdHlwZTogJ2Vycm9yJ30pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIWluZm8uZmlyc3ROZXdFZGl0b3IpIHtcblx0XHRcdHZvaWQgbXcubm90aWZ5KFxuXHRcdFx0XHR0cHJpbnRmKCdPbmx5IGZvdW5kIG9uZSBlZGl0b3I6ICVzIG1hZGUgJXMgZWRpdHMnLCBbaW5mby5lZGl0c1swXS5lZGl0b3IsIGluZm8uZWRpdHMubGVuZ3RoXSksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICdwb3B1cHMnLFxuXHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG5ld1VybCA9IGAke3BnLndpa2kudGl0bGViYXNlICsgbmV3IFRpdGxlKHN0dWZmLnBhZ2UpLnVybFN0cmluZygpfSZkaWZmPWN1ciZvbGRpZD0ke1xuXHRcdFx0aW5mby5maXJzdE5ld0VkaXRvci5vbGRpZFxuXHRcdH1gO1xuXHRcdGRpc3BsYXlVcmwobmV3VXJsLCBzdHVmZi5uZXdXaW4pO1xuXHR9O1xuXHRwZy5mbi5nZXREaWZmU2luY2VNeUVkaXQgPSAod2lraXBhZ2UsIG5ld1dpbikgPT4ge1xuXHRcdGdldEhpc3RvcnlJbmZvKHdpa2lwYWdlLCAoeCkgPT4ge1xuXHRcdFx0cHJvY2Vzc0RpZmZTaW5jZU15RWRpdCh4LCB7cGFnZTogd2lraXBhZ2UsIG5ld1dpbn0pO1xuXHRcdH0pO1xuXHR9O1xuXHRjb25zdCBwcm9jZXNzRGlmZlNpbmNlTXlFZGl0ID0gKGluZm8sIHN0dWZmKSA9PiB7XG5cdFx0aWYgKCFpbmZvLmVkaXRzIHx8IGluZm8uZWRpdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSgnUG9wdXBzOiBzb21ldGhpbmcgZmlzaHkgaGFwcGVuZWQuIFBsZWFzZSB0cnkgYWdhaW4uJywge3RhZzogJ3BvcHVwcycsIHR5cGU6ICdlcnJvcid9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZnJpZW5kbHlOYW1lID0gc3R1ZmYucGFnZS5zcGxpdCgnXycpLmpvaW4oJyAnKTtcblx0XHRpZiAoIWluZm8ubXlMYXN0RWRpdCkge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdHRwcmludGYoXCJDb3VsZG4ndCBmaW5kIGFuIGVkaXQgYnkgJXNcXG5pbiB0aGUgbGFzdCAlcyBlZGl0cyB0b1xcbiVzXCIsIFtcblx0XHRcdFx0XHRpbmZvLnVzZXJOYW1lLFxuXHRcdFx0XHRcdGdldFZhbHVlT2YoJ3BvcHVwSGlzdG9yeUxpbWl0JyksXG5cdFx0XHRcdFx0ZnJpZW5kbHlOYW1lLFxuXHRcdFx0XHRdKSxcblx0XHRcdFx0e3RhZzogJ3BvcHVwcycsIHR5cGU6ICdlcnJvcid9XG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoaW5mby5teUxhc3RFZGl0LmluZGV4ID09PSAwKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSh0cHJpbnRmKCclcyBzZWVtcyB0byBiZSB0aGUgbGFzdCBlZGl0b3IgdG8gdGhlIHBhZ2UgJXMnLCBbaW5mby51c2VyTmFtZSwgZnJpZW5kbHlOYW1lXSksIHtcblx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBuZXdVcmwgPSBgJHtwZy53aWtpLnRpdGxlYmFzZSArIG5ldyBUaXRsZShzdHVmZi5wYWdlKS51cmxTdHJpbmcoKX0mZGlmZj1jdXImb2xkaWQ9JHtcblx0XHRcdGluZm8ubXlMYXN0RWRpdC5vbGRpZFxuXHRcdH1gO1xuXHRcdGRpc3BsYXlVcmwobmV3VXJsLCBzdHVmZi5uZXdXaW4pO1xuXHR9O1xuXHRjb25zdCBkaXNwbGF5VXJsID0gKHVybCwgbmV3V2luKSA9PiB7XG5cdFx0aWYgKG5ld1dpbikge1xuXHRcdFx0d2luZG93Lm9wZW4odXJsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9jdW1lbnQubG9jYXRpb24gPSB1cmw7XG5cdFx0fVxuXHR9O1xuXHRwZy5mbi5wdXJnZVBvcHVwcyA9ICgpID0+IHtcblx0XHRwcm9jZXNzQWxsUG9wdXBzKHRydWUpO1xuXHRcdHNldHVwQ2FjaGUoKTsgLy8gZGVsZXRlcyBhbGwgY2FjaGVkIGl0ZW1zIChub3QgYnJvd3NlciBjYWNoZWQsIHRob3VnaC4uLilcblx0XHRwZy5vcHRpb24gPSB7fTtcblx0XHRhYm9ydEFsbERvd25sb2FkcygpO1xuXHR9O1xuXHRjb25zdCBwcm9jZXNzQWxsUG9wdXBzID0gKG51bGxpZnksIGJhbmlzaCkgPT4ge1xuXHRcdGZvciAobGV0IGkgPSAwOyBwZy5jdXJyZW50LmxpbmtzICYmIGkgPCBwZy5jdXJyZW50LmxpbmtzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRpZiAoIXBnLmN1cnJlbnQubGlua3NbaV0ubmF2cG9wdXApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobnVsbGlmeSB8fCBiYW5pc2gpIHtcblx0XHRcdFx0cGcuY3VycmVudC5saW5rc1tpXS5uYXZwb3B1cC5iYW5pc2goKTtcblx0XHRcdH1cblx0XHRcdHBnLmN1cnJlbnQubGlua3NbaV0uc2ltcGxlTm9Nb3JlID0gZmFsc2U7XG5cdFx0XHRpZiAobnVsbGlmeSkge1xuXHRcdFx0XHRwZy5jdXJyZW50LmxpbmtzW2ldLm5hdnBvcHVwID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHBnLmZuLmRpc2FibGVQb3B1cHMgPSAoKSA9PiB7XG5cdFx0cHJvY2Vzc0FsbFBvcHVwcyhmYWxzZSwgdHJ1ZSk7XG5cdFx0c2V0dXBUb29sdGlwcyhudWxsLCB0cnVlKTtcblx0fTtcblx0cGcuZm4udG9nZ2xlUHJldmlld3MgPSAoKSA9PiB7XG5cdFx0cHJvY2Vzc0FsbFBvcHVwcyh0cnVlLCB0cnVlKTtcblx0XHRwZy5vcHRpb24uc2ltcGxlUG9wdXBzID0gIXBnLm9wdGlvbi5zaW1wbGVQb3B1cHM7XG5cdFx0YWJvcnRBbGxEb3dubG9hZHMoKTtcblx0fTtcblx0Y29uc3QgbWFnaWNXYXRjaExpbmsgPSBmdW5jdGlvbiBtYWdpY1dhdGNoTGluayhsKSB7XG5cdFx0Ly8gWXVjayEhIFdvdWxkIHJlcXVpcmUgYSB0aG9yb3VnaCByZWRlc2lnbiB0byBhZGQgdGhpcyBhcyBhIGNsaWNrIGV2ZW50IHRob3VnaCAuLi5cblx0XHRsLm9uY2xpY2sgPSBzaW1wbGVQcmludGYoXCJwZy5mbi5tb2RpZnlXYXRjaGxpc3QoJyVzJywnJXMnKTtyZXR1cm4gZmFsc2U7XCIsIFtcblx0XHRcdGwuYXJ0aWNsZVxuXHRcdFx0XHQudG9TdHJpbmcodHJ1ZSlcblx0XHRcdFx0LnNwbGl0KCdcXFxcJylcblx0XHRcdFx0LmpvaW4oJ1xcXFxcXFxcJylcblx0XHRcdFx0LnNwbGl0KFwiJ1wiKVxuXHRcdFx0XHQuam9pbihTdHJpbmcucmF3YFxcJ2ApLFxuXHRcdFx0dGhpcy5pZCxcblx0XHRdKTtcblx0XHRyZXR1cm4gd2lraUxpbmsobCk7XG5cdH07XG5cdHBnLmZuLm1vZGlmeVdhdGNobGlzdCA9IGFzeW5jICh0aXRsZSwgYWN0aW9uKSA9PiB7XG5cdFx0Y29uc3QgcmVxRGF0YSA9IHtcblx0XHRcdGFjdGlvbjogJ3dhdGNoJyxcblx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdHRpdGxlczogdGl0bGUsXG5cdFx0XHR1c2VsYW5nOiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJMYW5ndWFnZScpLFxuXHRcdH07XG5cdFx0aWYgKGFjdGlvbiA9PT0gJ3Vud2F0Y2gnKSB7XG5cdFx0XHRyZXFEYXRhLnVud2F0Y2ggPSB0cnVlO1xuXHRcdH1cblx0XHQvLyBMb2FkIHRoZSBBZGRlZHdhdGNodGV4dCBvciBSZW1vdmVkd2F0Y2h0ZXh0IG1lc3NhZ2UgYW5kIHNob3cgaXRcblx0XHRjb25zdCBtd1RpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQodGl0bGUpO1xuXHRcdGxldCBtZXNzYWdlTmFtZTtcblx0XHRpZiAobXdUaXRsZSAmJiBtd1RpdGxlLmdldE5hbWVzcGFjZUlkKCkgPiAwICYmIG13VGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSAlIDIgPT09IDEpIHtcblx0XHRcdG1lc3NhZ2VOYW1lID0gYWN0aW9uID09PSAnd2F0Y2gnID8gJ2FkZGVkd2F0Y2h0ZXh0LXRhbGsnIDogJ3JlbW92ZWR3YXRjaHRleHQtdGFsayc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2VOYW1lID0gYWN0aW9uID09PSAnd2F0Y2gnID8gJ2FkZGVkd2F0Y2h0ZXh0JyA6ICdyZW1vdmVkd2F0Y2h0ZXh0Jztcblx0XHR9XG5cdFx0YXdhaXQgZ2V0TXdBcGkoKS5wb3N0V2l0aFRva2VuKCd3YXRjaCcsIHJlcURhdGEpO1xuXHRcdGF3YWl0IGdldE13QXBpKCkubG9hZE1lc3NhZ2VzSWZNaXNzaW5nKFttZXNzYWdlTmFtZV0pO1xuXHRcdC8vIE1lc3NhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZTpcblx0XHQvLyAqIHNlZSBzdHJpbmcuanNcblx0XHQvLyAqIGZvciBtb3JlIGluZm9ybWF0aW9uXG5cdFx0dm9pZCBtdy5ub3RpZnkobXcubWVzc2FnZShtZXNzYWdlTmFtZSwgdGl0bGUpLnBhcnNlRG9tKCksIHt0YWc6ICdwb3B1cHMnfSk7XG5cdH07XG5cdGNvbnN0IG1hZ2ljSGlzdG9yeUxpbmsgPSAobCkgPT4ge1xuXHRcdC8vIEZJWE1FIHVzZSBvbmNsaWNrIGNoYW5nZSBocmVmIHRyaWNrIHRvIHNvcnQgdGhpcyBvdXQgaW5zdGVhZCBvZiB3aW5kb3cub3BlblxuXHRcdGxldCBqc1VybCA9ICcnO1xuXHRcdGxldCB0aXRsZSA9ICcnO1xuXHRcdGxldCBvbkNsaWNrID0gJyc7XG5cdFx0c3dpdGNoIChsLmlkKSB7XG5cdFx0XHRjYXNlICdsYXN0Q29udHJpYic6XG5cdFx0XHRcdG9uQ2xpY2sgPSBzaW1wbGVQcmludGYoXCJwZy5mbi5nZXRMYXN0Q29udHJpYignJXMnLCVzKVwiLCBbXG5cdFx0XHRcdFx0bC5hcnRpY2xlXG5cdFx0XHRcdFx0XHQudG9TdHJpbmcodHJ1ZSlcblx0XHRcdFx0XHRcdC5zcGxpdCgnXFxcXCcpXG5cdFx0XHRcdFx0XHQuam9pbignXFxcXFxcXFwnKVxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiJ1wiKVxuXHRcdFx0XHRcdFx0LmpvaW4oU3RyaW5nLnJhd2BcXCdgKSxcblx0XHRcdFx0XHRsLm5ld1dpbixcblx0XHRcdFx0XSk7XG5cdFx0XHRcdHRpdGxlID0gcG9wdXBTdHJpbmcoJ2xhc3RDb250cmliSGludCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3NpbmNlTWUnOlxuXHRcdFx0XHRvbkNsaWNrID0gc2ltcGxlUHJpbnRmKFwicGcuZm4uZ2V0RGlmZlNpbmNlTXlFZGl0KCclcycsJXMpXCIsIFtcblx0XHRcdFx0XHRsLmFydGljbGVcblx0XHRcdFx0XHRcdC50b1N0cmluZyh0cnVlKVxuXHRcdFx0XHRcdFx0LnNwbGl0KCdcXFxcJylcblx0XHRcdFx0XHRcdC5qb2luKCdcXFxcXFxcXCcpXG5cdFx0XHRcdFx0XHQuc3BsaXQoXCInXCIpXG5cdFx0XHRcdFx0XHQuam9pbihTdHJpbmcucmF3YFxcJ2ApLFxuXHRcdFx0XHRcdGwubmV3V2luLFxuXHRcdFx0XHRdKTtcblx0XHRcdFx0dGl0bGUgPSBwb3B1cFN0cmluZygnc2luY2VNZUhpbnQnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGpzVXJsID0gYGphdmFzY3JpcHQ6JHtvbkNsaWNrfWA7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXHRcdG9uQ2xpY2sgKz0gJztyZXR1cm4gZmFsc2U7Jztcblx0XHRyZXR1cm4gZ2VuZXJhbE5hdkxpbmsoe1xuXHRcdFx0dXJsOiBqc1VybCxcblx0XHRcdG5ld1dpbjogZmFsc2UsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHRleHQ6IGwudGV4dCxcblx0XHRcdG5vUG9wdXA6IGwubm9Qb3B1cCxcblx0XHRcdG9uY2xpY2s6IG9uQ2xpY2ssXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IHBvcHVwTWVudUxpbmsgPSAobCkgPT4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG5cdFx0Y29uc3QganNVcmwgPSBzaW1wbGVQcmludGYoJ2phdmFzY3JpcHQ6cGcuZm4uJXMoKScsIFtsLmlkXSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXHRcdGNvbnN0IHRpdGxlID0gcG9wdXBTdHJpbmcoc2ltcGxlUHJpbnRmKCclc0hpbnQnLCBbbC5pZF0pKTtcblx0XHRjb25zdCBvbkNsaWNrID0gc2ltcGxlUHJpbnRmKCdwZy5mbi4lcygpO3JldHVybiBmYWxzZTsnLCBbbC5pZF0pO1xuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmw6IGpzVXJsLFxuXHRcdFx0bmV3V2luOiBmYWxzZSxcblx0XHRcdHRpdGxlLFxuXHRcdFx0dGV4dDogbC50ZXh0LFxuXHRcdFx0bm9Qb3B1cDogbC5ub1BvcHVwLFxuXHRcdFx0b25jbGljazogb25DbGljayxcblx0XHR9KTtcblx0fTtcblx0Y29uc3Qgc3BlY2lhbExpbmsgPSAobCkgPT4ge1xuXHRcdC8vIHByb3BlcnRpZXM6IGFydGljbGUsIHNwZWNpYWxwYWdlLCB0ZXh0LCBzZXBcblx0XHRpZiAobC5zcGVjaWFscGFnZSA9PT0gdW5kZWZpbmVkIHx8ICFsLnNwZWNpYWxwYWdlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgYmFzZSA9IGAke3BnLndpa2kudGl0bGViYXNlICsgbXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbcGcubnNTcGVjaWFsSWRdfToke2wuc3BlY2lhbHBhZ2V9YDtcblx0XHRsLnNlcCA/Pz0gJyZ0YXJnZXQ9Jztcblx0XHRsZXQgYXJ0aWNsZSA9IGwuYXJ0aWNsZS51cmxTdHJpbmcoe1xuXHRcdFx0a2VlcFNwYWNlczogbC5zcGVjaWFscGFnZSA9PT0gJ1NlYXJjaCcsXG5cdFx0fSk7XG5cdFx0bGV0IGhpbnQgPSBwb3B1cFN0cmluZyhgJHtsLnNwZWNpYWxwYWdlfUhpbnRgKTtcblx0XHRzd2l0Y2ggKGwuc3BlY2lhbHBhZ2UpIHtcblx0XHRcdGNhc2UgJ0xvZyc6XG5cdFx0XHRcdHN3aXRjaCAobC5zZXApIHtcblx0XHRcdFx0XHRjYXNlICcmdXNlcj0nOlxuXHRcdFx0XHRcdFx0aGludCA9IHBvcHVwU3RyaW5nKCd1c2VyTG9nSGludCcpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnJnR5cGU9YmxvY2smcGFnZT0nOlxuXHRcdFx0XHRcdFx0aGludCA9IHBvcHVwU3RyaW5nKCdibG9ja0xvZ0hpbnQnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJyZwYWdlPSc6XG5cdFx0XHRcdFx0XHRoaW50ID0gcG9wdXBTdHJpbmcoJ3BhZ2VMb2dIaW50Jyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICcmdHlwZT1wcm90ZWN0JnBhZ2U9Jzpcblx0XHRcdFx0XHRcdGhpbnQgPSBwb3B1cFN0cmluZygncHJvdGVjdExvZ0hpbnQnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJyZ0eXBlPWRlbGV0ZSZwYWdlPSc6XG5cdFx0XHRcdFx0XHRoaW50ID0gcG9wdXBTdHJpbmcoJ2RlbGV0ZUxvZ0hpbnQnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRsb2coYFVua25vd24gbG9nIHR5cGUsIHNlcD0ke2wuc2VwfWApO1xuXHRcdFx0XHRcdFx0aGludCA9ICdNaXNzaW5nIGhpbnQgKEZJWE1FKSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdQcmVmaXhJbmRleCc6XG5cdFx0XHRcdGFydGljbGUgKz0gJy8nO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0aGludCA9IGhpbnQgPyBzaW1wbGVQcmludGYoaGludCwgW3NhZmVEZWNvZGVVUkkobC5hcnRpY2xlKV0pIDogc2FmZURlY29kZVVSSShgJHtsLnNwZWNpYWxwYWdlfToke2wuYXJ0aWNsZX1gKTtcblx0XHRjb25zdCB1cmwgPSBiYXNlICsgbC5zZXAgKyBhcnRpY2xlO1xuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmwsXG5cdFx0XHR0aXRsZTogaGludCxcblx0XHRcdHRleHQ6IGwudGV4dCxcblx0XHRcdG5ld1dpbjogbC5uZXdXaW4sXG5cdFx0XHRub1BvcHVwOiBsLm5vUG9wdXAsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IGdlbmVyYWxMaW5rID0gKGwpID0+IHtcblx0XHQvLyBsLnVybCwgbC50ZXh0LCBsLnRpdGxlLCBsLm5ld1dpbiwgbC5jbGFzc05hbWUsIGwubm9Qb3B1cCwgbC5vbmNsaWNrXG5cdFx0aWYgKGwudXJsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHQvLyBvbmx5IHF1b3RhdGlvbiBtYXJrcyBpbiB0aGUgdXJsIGNhbiBzY3JldyB1cyB1cCBub3cuLi4gSSB0aGlua1xuXHRcdGNvbnN0IHVybCA9IGwudXJsLnNwbGl0KCdcIicpLmpvaW4oJyUyMicpO1xuXHRcdGxldCByZXQgPSBgPGEgaHJlZj1cIiR7dXJsfVwiYDtcblx0XHRpZiAobC50aXRsZSAhPT0gdW5kZWZpbmVkICYmIGwudGl0bGUpIHtcblx0XHRcdHJldCArPSBgIHRpdGxlPVwiJHtwZy5lc2NhcGVRdW90ZXNIVE1MKGwudGl0bGUpfVwiYDtcblx0XHR9XG5cdFx0aWYgKGwub25jbGljayAhPT0gdW5kZWZpbmVkICYmIGwub25jbGljaykge1xuXHRcdFx0cmV0ICs9IGAgb25jbGljaz1cIiR7cGcuZXNjYXBlUXVvdGVzSFRNTChsLm9uY2xpY2spfVwiYDtcblx0XHR9XG5cdFx0aWYgKGwubm9Qb3B1cCkge1xuXHRcdFx0cmV0ICs9ICcgbm9Qb3B1cD0xJztcblx0XHR9XG5cdFx0bGV0IG5ld1dpbjtcblx0XHRpZiAobC5uZXdXaW4gPT09IHVuZGVmaW5lZCB8fCBsLm5ld1dpbiA9PT0gbnVsbCkge1xuXHRcdFx0bmV3V2luID0gZ2V0VmFsdWVPZigncG9wdXBOZXdXaW5kb3dzJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCh7bmV3V2lufSA9IGwpO1xuXHRcdH1cblx0XHRpZiAobmV3V2luKSB7XG5cdFx0XHRyZXQgKz0gJyByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiJztcblx0XHR9XG5cdFx0aWYgKGwuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQgJiYgbC5jbGFzc05hbWUpIHtcblx0XHRcdHJldCArPSBgIGNsYXNzPVwiJHtsLmNsYXNzTmFtZX1cImA7XG5cdFx0fVxuXHRcdHJldCArPSAnPic7XG5cdFx0aWYgKHR5cGVvZiBsLnRleHQgPT09IHR5cGVvZiAnJykge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBIVE1MLWVzY2FwZSB0aGlzIHRvIGF2b2lkIFhTUywgYnV0IHdlIGFsc28gd2FudCB0b1xuXHRcdFx0Ly8gZGlzcGxheSBhbnkgZXhpc3RpbmcgSFRNTCBlbnRpdGllcyBjb3JyZWN0bHksIHNvIHVuZXNjYXBlIGl0IGZpcnN0LlxuXHRcdFx0Ly8gRm9yIGV4YW1wbGUsIHRoZSBkaXNwbGF5IHRleHQgb2YgdGhlIHVzZXIgcGFnZSBtZW51IGl0ZW0gaXMgZGVmaW5lZFxuXHRcdFx0Ly8gYXMgXCJ1c2VyJm5ic3A7cGFnZVwiLCBzbyB3ZSBuZWVkIHRvIHVuZXNjYXBlIGZpcnN0IHRvIGF2b2lkIGl0IGJlaW5nXG5cdFx0XHQvLyBlc2NhcGVkIHRvIFwidXNlciZhbXA7bmJzcDtwYWdlXCIuXG5cdFx0XHRyZXQgKz0gcGcuZXNjYXBlUXVvdGVzSFRNTChwZy51bmVzY2FwZVF1b3Rlc0hUTUwobC50ZXh0KSk7XG5cdFx0fVxuXHRcdHJldCArPSAnPC9hPic7XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgYXBwZW5kUGFyYW1zVG9MaW5rID0gKGxpbmtzdHIsIHBhcmFtcykgPT4ge1xuXHRcdGNvbnN0IHNwID0gbGlua3N0ci5zcGxpdCgvKGhyZWY9XCJbXlwiXSs/KVwiL2kpO1xuXHRcdGlmIChzcC5sZW5ndGggPCAyKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0bGV0IHJldCA9IHNwLnNoaWZ0KCkgKyBzcC5zaGlmdCgpO1xuXHRcdHJldCArPSBgJiR7cGFyYW1zfVwiYDtcblx0XHRyZXQgKz0gc3Auam9pbignJyk7XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3QgY2hhbmdlTGlua1RhcmdldExpbmsgPSAoeCkgPT4ge1xuXHRcdC8vIG5ld1RhcmdldCwgdGV4dCwgaGludCwgc3VtbWFyeSwgY2xpY2tCdXR0b24sIG1pbm9yLCB0aXRsZSAob3B0aW9uYWwpLCBhbHNvQ2hhbmdlTGFiZWwge1xuXHRcdGlmICh4Lm5ld1RhcmdldCkge1xuXHRcdFx0bG9nKGBjaGFuZ2VMaW5rVGFyZ2V0TGluazogbmV3VGFyZ2V0PSR7eC5uZXdUYXJnZXR9YCk7XG5cdFx0fVxuXHRcdGlmICh4Lm9sZFRhcmdldCAhPT0gZGVjb2RlVVJJQ29tcG9uZW50KHgub2xkVGFyZ2V0KSkge1xuXHRcdFx0bG9nKGBUaGlzIG1pZ2h0IGJlIGFuIGlucHV0IHByb2JsZW06ICR7eC5vbGRUYXJnZXR9YCk7XG5cdFx0fVxuXHRcdC8vIEZJWE1FOiBmaXJzdCBjaGFyYWN0ZXIgb2YgcGFnZSB0aXRsZSBhcyB3ZWxsIGFzIG5hbWVzcGFjZSBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZVxuXHRcdC8vIGVnIFtbOmNhdGVnb3J5OlgxXV0gYW5kIFtbOkNhdGVnb3J5OlgxXV0gYXJlIGVxdWl2YWxlbnRcblx0XHQvLyB0aGlzJ2xsIGJyZWFrIGlmIGNoYXJBdCgwKSBpcyBuYXN0eVxuXHRcdGNvbnN0IGNBID0gbXcudXRpbC5lc2NhcGVSZWdFeHAoeC5vbGRUYXJnZXQpO1xuXHRcdGxldCBjaHMgPSBjQS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcblx0XHRjaHMgPSBgWyR7Y2hzfSR7Y2hzLnRvTG93ZXJDYXNlKCl9XWA7XG5cdFx0bGV0IGN1cnJlbnRBcnRpY2xlUmVnZXhCaXQgPSBjaHMgKyBjQS5zbGljZSgxKTtcblx0XHRjdXJyZW50QXJ0aWNsZVJlZ2V4Qml0ID0gY3VycmVudEFydGljbGVSZWdleEJpdFxuXHRcdFx0LnNwbGl0KC9bIF9dK3wlMjAvZylcblx0XHRcdC5qb2luKCcoPzpbXyBdK3wlMjApJylcblx0XHRcdC5zcGxpdChTdHJpbmcucmF3YFxcKGApXG5cdFx0XHQuam9pbihTdHJpbmcucmF3YCg/OiUyOHxcXCgpYClcblx0XHRcdC5zcGxpdChTdHJpbmcucmF3YFxcKWApXG5cdFx0XHQuam9pbihTdHJpbmcucmF3YCg/OiUyOXxcXCkpYCk7IC8vIHdoeSBkb2VzIHRoaXMgbmVlZCB0byBtYXRjaCBlbmNvZGVkIHN0cmluZ3MgPyBsaW5rcyBpbiB0aGUgZG9jdW1lbnQgP1xuXG5cdFx0Ly8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2Ugc2hvdWxkIGJlIGlnbm9yZWQsIGFuZCBhbmNob3IgYml0cyBvcHRpb25hbDpcblx0XHRjdXJyZW50QXJ0aWNsZVJlZ2V4Qml0ID0gYFxcXFxzKigke2N1cnJlbnRBcnRpY2xlUmVnZXhCaXR9KD86I1teXFxcXFtcXFxcfF0qKT8pXFxcXHMqYDtcblx0XHQvLyBlLmcuIENvbXB1dGVyIChhcmNoYWljKSAtPiBcXHMqKFtDY11vbXB1dGVyW18gXSg/OiUyNTI4fFxcKClhcmNoYWljKD86JTI1Mjh8XFwpKSlcXHMqXG5cdFx0Ly8gYXV0b2VkaXQ9c35cXFtcXFsoW0NjXWFkKVxcXVxcXX5bW0NvbXB1dGVyLWFpZGVkJTIwZGVzaWdufCQxXV1+ZztzflxcW1xcWyhbQ2NdQUQpW3xdfltbQ29tcHV0ZXItYWlkZWQlMjBkZXNpZ258fmdcblx0XHRjb25zdCB0aXRsZSA9IHgudGl0bGUgfHwgbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLnNwbGl0KCdfJykuam9pbignICcpO1xuXHRcdGNvbnN0IGxrID0gdGl0bGVkV2lraUxpbmsoe1xuXHRcdFx0YXJ0aWNsZTogbmV3IFRpdGxlKHRpdGxlKSxcblx0XHRcdG5ld1dpbjogeC5uZXdXaW4sXG5cdFx0XHRhY3Rpb246ICdlZGl0Jyxcblx0XHRcdHRleHQ6IHgudGV4dCxcblx0XHRcdHRpdGxlOiB4LmhpbnQsXG5cdFx0XHRjbGFzc05hbWU6ICdwb3B1cF9jaGFuZ2VfdGl0bGVfbGluaycsXG5cdFx0fSk7XG5cdFx0bGV0IGNtZCA9ICcnO1xuXHRcdGlmICh4Lm5ld1RhcmdldCkge1xuXHRcdFx0Ly8gZXNjYXBlICcmJyBhbmQgb3RoZXIgbmFzdGllc1xuXHRcdFx0Y29uc3QgdCA9IHgubmV3VGFyZ2V0O1xuXHRcdFx0Y29uc3QgcyA9IG13LnV0aWwuZXNjYXBlUmVnRXhwKHgubmV3VGFyZ2V0KTtcblx0XHRcdGlmICh4LmFsc29DaGFuZ2VMYWJlbCkge1xuXHRcdFx0XHRjbWQgKz0gYHN+XFxcXFtcXFxcWyR7Y3VycmVudEFydGljbGVSZWdleEJpdH1cXFxcXVxcXFxdfltbJHt0fV1dfmc7YDtcblx0XHRcdFx0Y21kICs9IGBzflxcXFxbXFxcXFske2N1cnJlbnRBcnRpY2xlUmVnZXhCaXR9W3xdfltbJHt0fXx+ZztgO1xuXHRcdFx0XHRjbWQgKz0gYHN+XFxcXFtcXFxcWyR7c31cXFxcfCR7c31cXFxcXVxcXFxdfltbJHt0fV1dfmdgO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y21kICs9IGBzflxcXFxbXFxcXFske2N1cnJlbnRBcnRpY2xlUmVnZXhCaXR9XFxcXF1cXFxcXX5bWyR7dH18JDFdXX5nO2A7XG5cdFx0XHRcdGNtZCArPSBgc35cXFxcW1xcXFxbJHtjdXJyZW50QXJ0aWNsZVJlZ2V4Qml0fVt8XX5bWyR7dH18fmc7YDtcblx0XHRcdFx0Y21kICs9IGBzflxcXFxbXFxcXFske3N9XFxcXHwke3N9XFxcXF1cXFxcXX5bWyR7dH1dXX5nYDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y21kICs9IGBzflxcXFxbXFxcXFske2N1cnJlbnRBcnRpY2xlUmVnZXhCaXR9XFxcXF1cXFxcXX4kMX5nO2A7XG5cdFx0XHRjbWQgKz0gYHN+XFxcXFtcXFxcWyR7Y3VycmVudEFydGljbGVSZWdleEJpdH1bfF0oLio/KVxcXFxdXFxcXF1+JDJ+Z2A7XG5cdFx0fVxuXHRcdC8vIEJ1aWxkIHF1ZXJ5XG5cdFx0Y21kID0gYGF1dG9lZGl0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNtZCl9YDtcblx0XHRjbWQgKz0gYCZhdXRvY2xpY2s9JHtlbmNvZGVVUklDb21wb25lbnQoeC5jbGlja0J1dHRvbil9JmFjdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQoYXV0b0NsaWNrVG9rZW4oKSl9YDtcblx0XHRjbWQgKz0geC5taW5vciA9PT0gbnVsbCA/ICcnIDogYCZhdXRvbWlub3I9JHtlbmNvZGVVUklDb21wb25lbnQoeC5taW5vcil9YDtcblx0XHRjbWQgKz0geC53YXRjaCA9PT0gbnVsbCA/ICcnIDogYCZhdXRvd2F0Y2g9JHtlbmNvZGVVUklDb21wb25lbnQoeC53YXRjaCl9YDtcblx0XHRjbWQgKz0gYCZhdXRvc3VtbWFyeT0ke2VuY29kZVVSSUNvbXBvbmVudCh4LnN1bW1hcnkpfWA7XG5cdFx0Y21kICs9IGAmYXV0b2ltcGw9JHtlbmNvZGVVUklDb21wb25lbnQocG9wdXBTdHJpbmcoJ2F1dG9lZGl0X3ZlcnNpb24nKSl9YDtcblx0XHRyZXR1cm4gYXBwZW5kUGFyYW1zVG9MaW5rKGxrLCBjbWQpO1xuXHR9O1xuXHRjb25zdCByZWRpckxpbmsgPSAocmVkaXJNYXRjaCwgYXJ0aWNsZSkgPT4ge1xuXHRcdC8vIE5CIHJlZGlyTWF0Y2ggaXMgaW4gd2lraVRleHRcblx0XHRsZXQgcmV0ID0gJyc7XG5cdFx0aWYgKGdldFZhbHVlT2YoJ3BvcHVwQXBwZW5kUmVkaXJOYXZMaW5rcycpICYmIGdldFZhbHVlT2YoJ3BvcHVwTmF2TGlua3MnKSkge1xuXHRcdFx0cmV0ICs9ICc8aHI+Jztcblx0XHRcdGlmIChnZXRWYWx1ZU9mKCdwb3B1cEZpeFJlZGlycycpICYmIGF1dG9FZGl0ICE9PSB1bmRlZmluZWQgJiYgYXV0b0VkaXQpIHtcblx0XHRcdFx0cmV0ICs9IHBvcHVwU3RyaW5nKCdSZWRpcmVjdHMgdG86IChGaXggJyk7XG5cdFx0XHRcdGxvZyhgcmVkaXJMaW5rOiBuZXdUYXJnZXQ9JHtyZWRpck1hdGNofWApO1xuXHRcdFx0XHRyZXQgKz0gYWRkUG9wdXBTaG9ydGN1dChcblx0XHRcdFx0XHRjaGFuZ2VMaW5rVGFyZ2V0TGluayh7XG5cdFx0XHRcdFx0XHRuZXdUYXJnZXQ6IHJlZGlyTWF0Y2gsXG5cdFx0XHRcdFx0XHR0ZXh0OiBwb3B1cFN0cmluZygndGFyZ2V0JyksXG5cdFx0XHRcdFx0XHRoaW50OiBwb3B1cFN0cmluZygnRml4IHRoaXMgcmVkaXJlY3QsIGNoYW5naW5nIGp1c3QgdGhlIGxpbmsgdGFyZ2V0JyksXG5cdFx0XHRcdFx0XHRzdW1tYXJ5OiBzaW1wbGVQcmludGYoZ2V0VmFsdWVPZigncG9wdXBGaXhSZWRpcnNTdW1tYXJ5JyksIFthcnRpY2xlLnRvU3RyaW5nKCksIHJlZGlyTWF0Y2hdKSxcblx0XHRcdFx0XHRcdG9sZFRhcmdldDogYXJ0aWNsZS50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0Y2xpY2tCdXR0b246IGdldFZhbHVlT2YoJ3BvcHVwUmVkaXJBdXRvQ2xpY2snKSxcblx0XHRcdFx0XHRcdG1pbm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0d2F0Y2g6IGdldFZhbHVlT2YoJ3BvcHVwV2F0Y2hSZWRpcnJlZFBhZ2VzJyksXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0J1InXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldCArPSBwb3B1cFN0cmluZygnIG9yICcpO1xuXHRcdFx0XHRyZXQgKz0gYWRkUG9wdXBTaG9ydGN1dChcblx0XHRcdFx0XHRjaGFuZ2VMaW5rVGFyZ2V0TGluayh7XG5cdFx0XHRcdFx0XHRuZXdUYXJnZXQ6IHJlZGlyTWF0Y2gsXG5cdFx0XHRcdFx0XHR0ZXh0OiBwb3B1cFN0cmluZygndGFyZ2V0ICYgbGFiZWwnKSxcblx0XHRcdFx0XHRcdGhpbnQ6IHBvcHVwU3RyaW5nKCdGaXggdGhpcyByZWRpcmVjdCwgY2hhbmdpbmcgdGhlIGxpbmsgdGFyZ2V0IGFuZCBsYWJlbCcpLFxuXHRcdFx0XHRcdFx0c3VtbWFyeTogc2ltcGxlUHJpbnRmKGdldFZhbHVlT2YoJ3BvcHVwRml4UmVkaXJzU3VtbWFyeScpLCBbYXJ0aWNsZS50b1N0cmluZygpLCByZWRpck1hdGNoXSksXG5cdFx0XHRcdFx0XHRvbGRUYXJnZXQ6IGFydGljbGUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGNsaWNrQnV0dG9uOiBnZXRWYWx1ZU9mKCdwb3B1cFJlZGlyQXV0b0NsaWNrJyksXG5cdFx0XHRcdFx0XHRtaW5vcjogdHJ1ZSxcblx0XHRcdFx0XHRcdHdhdGNoOiBnZXRWYWx1ZU9mKCdwb3B1cFdhdGNoUmVkaXJyZWRQYWdlcycpLFxuXHRcdFx0XHRcdFx0YWxzb0NoYW5nZUxhYmVsOiB0cnVlLFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCdSJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXQgKz0gcG9wdXBTdHJpbmcoJyknKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldCArPSBwb3B1cFN0cmluZygnUmVkaXJlY3RzJykgKyBwb3B1cFN0cmluZygnIHRvICcpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdFx0cmV0dXJuIGA8YnI+ICR7cG9wdXBTdHJpbmcoJ1JlZGlyZWN0cycpfSR7cG9wdXBTdHJpbmcoJyB0byAnKX0ke3RpdGxlZFdpa2lMaW5rKHtcblx0XHRcdGFydGljbGU6IG5ldyBUaXRsZSgpLmZyb21XaWtpVGV4dChyZWRpck1hdGNoKSxcblx0XHRcdGFjdGlvbjogJ3ZpZXcnIC8qIEZJWE1FOiBuZXdXaW4gKi8sXG5cdFx0XHR0ZXh0OiBzYWZlRGVjb2RlVVJJKHJlZGlyTWF0Y2gpLFxuXHRcdFx0dGl0bGU6IHBvcHVwU3RyaW5nKCdCeXBhc3MgcmVkaXJlY3QnKSxcblx0XHR9KX1gO1xuXHR9O1xuXHRjb25zdCBhcmluTGluayA9IChsKSA9PiB7XG5cdFx0aWYgKCFzYW5lTGlua0NoZWNrKGwpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0aWYgKCFsLmFydGljbGUuaXNJcFVzZXIoKSB8fCAhcGcud2lraS53aWtpbWVkaWEpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCB1TiA9IGwuYXJ0aWNsZS51c2VyTmFtZSgpO1xuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmw6IGBodHRwOi8vd3MuYXJpbi5uZXQvY2dpLWJpbi93aG9pcy5wbD9xdWVyeWlucHV0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVOKX1gLFxuXHRcdFx0bmV3V2luOiBsLm5ld1dpbixcblx0XHRcdHRpdGxlOiB0cHJpbnRmKCdMb29rIHVwICVzIGluIEFSSU4gd2hvaXMgZGF0YWJhc2UnLCBbdU5dKSxcblx0XHRcdHRleHQ6IGwudGV4dCxcblx0XHRcdG5vUG9wdXA6IDEsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IHRvb2xEYk5hbWUgPSAoY29va2llU3R5bGUpID0+IHtcblx0XHRsZXQgcmV0ID0gbXcuY29uZmlnLmdldCgnd2dEQm5hbWUnKTtcblx0XHRpZiAoIWNvb2tpZVN0eWxlKSB7XG5cdFx0XHRyZXQgKz0gJ19wJztcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0Y29uc3Qgc2FuZUxpbmtDaGVjayA9IChsKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBsLmFydGljbGUgIT09IHR5cGVvZiB7fSB8fCB0eXBlb2YgbC50ZXh0ICE9PSB0eXBlb2YgJycpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cdGNvbnN0IGVkaXRDb3VudGVyTGluayA9IChsKSA9PiB7XG5cdFx0aWYgKCFzYW5lTGlua0NoZWNrKGwpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0aWYgKCFwZy53aWtpLndpa2ltZWRpYSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IHVOID0gbC5hcnRpY2xlLnVzZXJOYW1lKCk7XG5cdFx0Y29uc3QgdG9vbCA9IGdldFZhbHVlT2YoJ3BvcHVwRWRpdENvdW50ZXJUb29sJyk7XG5cdFx0bGV0IHVybDtcblx0XHRjb25zdCBkZWZhdWx0VG9vbFVybCA9ICcvL3Rvb2xzLndtZmxhYnMub3JnL3N1cGVyY291bnQvaW5kZXgucGhwP3VzZXI9JDEmcHJvamVjdD0kMi4kMyc7XG5cdFx0c3dpdGNoICh0b29sKSB7XG5cdFx0XHRjYXNlICdjdXN0b20nOlxuXHRcdFx0XHR1cmwgPSBzaW1wbGVQcmludGYoZ2V0VmFsdWVPZigncG9wdXBFZGl0Q291bnRlclVybCcpLCBbZW5jb2RlVVJJQ29tcG9uZW50KHVOKSwgdG9vbERiTmFtZSgpXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRjb25zdCB0aGVXaWtpID0gcGcud2lraS5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXHRcdFx0XHR1cmwgPSBzaW1wbGVQcmludGYoZGVmYXVsdFRvb2xVcmwsIFtlbmNvZGVVUklDb21wb25lbnQodU4pLCB0aGVXaWtpWzBdLCB0aGVXaWtpWzFdXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBnZW5lcmFsTmF2TGluayh7XG5cdFx0XHR1cmwsXG5cdFx0XHR0aXRsZTogdHByaW50ZignZWRpdENvdW50ZXJMaW5rSGludCcsIFt1Tl0pLFxuXHRcdFx0bmV3V2luOiBsLm5ld1dpbixcblx0XHRcdHRleHQ6IGwudGV4dCxcblx0XHRcdG5vUG9wdXA6IDEsXG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IGVkaXRvckxpc3RMaW5rID0gKGwpID0+IHtcblx0XHRpZiAoIXNhbmVMaW5rQ2hlY2sobCkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBhcnRpY2xlID0gbC5hcnRpY2xlLmFydGljbGVGcm9tVGFsa1BhZ2UoKSB8fCBsLmFydGljbGU7XG5cdFx0Y29uc3QgdXJsID0gYGh0dHBzOi8veHRvb2xzLndtZmxhYnMub3JnL2FydGljbGVpbmZvLyR7ZW5jb2RlVVJJKFxuXHRcdFx0cGcud2lraS5ob3N0bmFtZVxuXHRcdCl9LyR7YXJ0aWNsZS51cmxTdHJpbmcoKX0/dXNlbGFuZz0ke213LmNvbmZpZy5nZXQoJ3dnVXNlckxhbmd1YWdlJyl9YDtcblx0XHRyZXR1cm4gZ2VuZXJhbE5hdkxpbmsoe1xuXHRcdFx0dXJsLFxuXHRcdFx0dGl0bGU6IHRwcmludGYoJ2VkaXRvckxpc3RIaW50JywgW2FydGljbGVdKSxcblx0XHRcdG5ld1dpbjogbC5uZXdXaW4sXG5cdFx0XHR0ZXh0OiBsLnRleHQsXG5cdFx0XHRub1BvcHVwOiAxLFxuXHRcdH0pO1xuXHR9O1xuXHRjb25zdCBnZW5lcmFsTmF2TGluayA9IChsKSA9PiB7XG5cdFx0bC5jbGFzc05hbWUgPSBsLmNsYXNzTmFtZSA9PT0gbnVsbCA/ICdwb3B1cE5hdkxpbmsnIDogbC5jbGFzc05hbWU7XG5cdFx0cmV0dXJuIGdlbmVyYWxMaW5rKGwpO1xuXHR9O1xuXHQvLyBtYWdpYyBoaXN0b3J5IGxpbmtzXG5cdC8vXG5cdGNvbnN0IGdldEhpc3RvcnlJbmZvID0gKHdpa2lwYWdlLCB3aGF0TmV4dCkgPT4ge1xuXHRcdGxvZygnZ2V0SGlzdG9yeUluZm8nKTtcblx0XHRnZXRIaXN0b3J5KFxuXHRcdFx0d2lraXBhZ2UsXG5cdFx0XHR3aGF0TmV4dFxuXHRcdFx0XHQ/IChkKSA9PiB7XG5cdFx0XHRcdFx0XHR3aGF0TmV4dChwcm9jZXNzSGlzdG9yeShkKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ6IHByb2Nlc3NIaXN0b3J5XG5cdFx0KTtcblx0fTtcblx0Ly8gRklYTUUgZWxpbWluYXRlIHBnLmlkTnVtYmVyIC4uLiBob3c/IDotKFxuXHRjb25zdCBnZXRIaXN0b3J5ID0gKHdpa2lwYWdlLCBvbkNvbXBsZXRlKSA9PiB7XG5cdFx0bG9nKCdnZXRIaXN0b3J5Jyk7XG5cdFx0Y29uc3QgdXJsID0gYCR7cGcud2lraS5hcGl3aWtpYmFzZX0/Zm9ybWF0PWpzb24mZm9ybWF0dmVyc2lvbj0yJmFjdGlvbj1xdWVyeSZwcm9wPXJldmlzaW9ucyZ0aXRsZXM9JHtuZXcgVGl0bGUoXG5cdFx0XHR3aWtpcGFnZVxuXHRcdCkudXJsU3RyaW5nKCl9JnJ2bGltaXQ9JHtnZXRWYWx1ZU9mKCdwb3B1cEhpc3RvcnlMaW1pdCcpfWA7XG5cdFx0bG9nKGBnZXRIaXN0b3J5OiB1cmw9JHt1cmx9YCk7XG5cdFx0cmV0dXJuIHN0YXJ0RG93bmxvYWQodXJsLCBgJHtwZy5pZE51bWJlcn1oaXN0b3J5YCwgb25Db21wbGV0ZSk7XG5cdH07XG5cdGNvbnN0IHByb2Nlc3NIaXN0b3J5ID0gKGRvd25sb2FkKSA9PiB7XG5cdFx0Y29uc3QganNvYmogPSBnZXRKc09iaihkb3dubG9hZC5kYXRhKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qge3JldmlzaW9uc30gPSBhbnlDaGlsZChqc29iai5xdWVyeS5wYWdlcyk7XG5cdFx0XHRjb25zdCBlZGl0cyA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCByZXZpc2lvbiBvZiByZXZpc2lvbnMpIHtcblx0XHRcdFx0ZWRpdHMucHVzaCh7XG5cdFx0XHRcdFx0b2xkaWQ6IHJldmlzaW9uLnJldmlkLFxuXHRcdFx0XHRcdGVkaXRvcjogcmV2aXNpb24udXNlcixcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRsb2coYHByb2Nlc3NlZCAke2VkaXRzLmxlbmd0aH0gZWRpdHNgKTtcblx0XHRcdHJldHVybiBmaW5pc2hQcm9jZXNzSGlzdG9yeShlZGl0cywgbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGxvZygnU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBKU09OIGJ1c2luZXNzJyk7XG5cdFx0XHRyZXR1cm4gZmluaXNoUHJvY2Vzc0hpc3RvcnkoW10pO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgZmluaXNoUHJvY2Vzc0hpc3RvcnkgPSAoZWRpdHMsIHVzZXJOYW1lKSA9PiB7XG5cdFx0Y29uc3QgaGlzdEluZm8gPSB7fTtcblx0XHRoaXN0SW5mby5lZGl0cyA9IGVkaXRzO1xuXHRcdGhpc3RJbmZvLnVzZXJOYW1lID0gdXNlck5hbWU7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlZGl0cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0aWYgKGhpc3RJbmZvLm15TGFzdEVkaXQgPT09IHVuZGVmaW5lZCAmJiB1c2VyTmFtZSAmJiBlZGl0c1tpXS5lZGl0b3IgPT09IHVzZXJOYW1lKSB7XG5cdFx0XHRcdGhpc3RJbmZvLm15TGFzdEVkaXQgPSB7XG5cdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0b2xkaWQ6IGVkaXRzW2ldLm9sZGlkLFxuXHRcdFx0XHRcdHByZXZpZDogaSA9PT0gMCA/IG51bGwgOiBlZGl0c1tpIC0gMV0ub2xkaWQsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGlzdEluZm8uZmlyc3ROZXdFZGl0b3IgPT09IHVuZGVmaW5lZCAmJiBlZGl0c1tpXS5lZGl0b3IgIT09IGVkaXRzWzBdLmVkaXRvcikge1xuXHRcdFx0XHRoaXN0SW5mby5maXJzdE5ld0VkaXRvciA9IHtcblx0XHRcdFx0XHRpbmRleDogaSxcblx0XHRcdFx0XHRvbGRpZDogZWRpdHNbaV0ub2xkaWQsXG5cdFx0XHRcdFx0cHJldmlkOiBpID09PSAwID8gbnVsbCA6IGVkaXRzW2kgLSAxXS5vbGRpZCxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gcGcubWlzYy5oaXN0b3J5SW5mbz1oaXN0SW5mbztcblx0XHRyZXR1cm4gaGlzdEluZm87XG5cdH07XG5cdC8vIEVOREZJTEU6IGxpbmtzLmpzXG5cdC8vIFNUQVJURklMRTogb3B0aW9ucy5qc1xuXHQvLyBvcHRpb25zXG5cdC8vIGNoZWNrIGZvciBleGlzdGluZyB2YWx1ZSwgZWxzZSB1c2UgZGVmYXVsdFxuXHRjb25zdCBkZWZhdWx0aXplID0gKHgpID0+IHtcblx0XHRwZy5vcHRpb25beF0gPz89IHdpbmRvd1t4XSA9PT0gdW5kZWZpbmVkID8gcGcub3B0aW9uRGVmYXVsdFt4XSA6IHdpbmRvd1t4XTtcblx0fTtcblx0Y29uc3QgbmV3T3B0aW9uID0gKHgsIGRlZikgPT4ge1xuXHRcdHBnLm9wdGlvbkRlZmF1bHRbeF0gPSBkZWY7XG5cdH07XG5cdGNvbnN0IHNldERlZmF1bHQgPSAoeCwgZGVmKSA9PiB7XG5cdFx0cmV0dXJuIG5ld09wdGlvbih4LCBkZWYpO1xuXHR9O1xuXHRjb25zdCBnZXRWYWx1ZU9mID0gKHZhck5hbWUpID0+IHtcblx0XHRkZWZhdWx0aXplKHZhck5hbWUpO1xuXHRcdHJldHVybiBwZy5vcHRpb25bdmFyTmFtZV07XG5cdH07XG5cdGNvbnN0IHNldE9wdGlvbnMgPSAoKSA9PiB7XG5cdFx0Ly8gdXNlci1zZXR0YWJsZSBwYXJhbWV0ZXJzIGFuZCBkZWZhdWx0c1xuXHRcdGxldCB1c2VySXNTeXNvcCA9IGZhbHNlO1xuXHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z1VzZXJHcm91cHMnKSkge1xuXHRcdFx0Zm9yIChsZXQgZyA9IDA7IGcgPCBtdy5jb25maWcuZ2V0KCd3Z1VzZXJHcm91cHMnKS5sZW5ndGg7ICsrZykge1xuXHRcdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dVc2VyR3JvdXBzJylbZ10gPT09ICdzeXNvcCcpIHtcblx0XHRcdFx0XHR1c2VySXNTeXNvcCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnVXNlckdyb3VwcycpW2ddID09PSAnc3Rld2FyZCcpIHtcblx0XHRcdFx0XHR1c2VySXNTeXNvcCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gQmFzaWMgb3B0aW9uc1xuXHRcdG5ld09wdGlvbigncG9wdXBEZWxheScsIDAuNSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEhpZGVEZWxheScsIDAuNSk7XG5cdFx0bmV3T3B0aW9uKCdzaW1wbGVQb3B1cHMnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFN0cnVjdHVyZScsICdzaG9ydG1lbnVzJyk7IC8vIHNlZSBsYXRlciAtIGRlZmF1bHQgZm9yIHBvcHVwU3RydWN0dXJlIGlzICdvcmlnaW5hbCcgaWYgc2ltcGxlUG9wdXBzIGlzIHRydWVcblx0XHRuZXdPcHRpb24oJ3BvcHVwQWN0aW9uc01lbnUnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwU2V0dXBNZW51JywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEFkbWluTGlua3MnLCB1c2VySXNTeXNvcCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFNob3J0Y3V0S2V5cycsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwSGlzdG9yaWNhbExpbmtzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cE9ubHlBcnRpY2xlTGlua3MnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3JlbW92ZVRpdGxlcycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBNYXhXaWR0aCcsIDM1MCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFNpbXBsaWZ5TWFpbkxpbmsnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwQXBwZW5kUmVkaXJOYXZMaW5rcycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBUb2NMaW5rcycsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwU3VicG9wdXBzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERyYWdIYW5kbGUnLCBmYWxzZSAvKiAncG9wdXBUb3BMaW5rcycgKi8pO1xuXHRcdG5ld09wdGlvbigncG9wdXBMYXp5UHJldmlld3MnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTGF6eURvd25sb2FkcycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBBbGxEYWJzU3R1YnMnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERlYnVnZ2luZycsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwQWN0aXZlTmF2bGlua3MnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTW9kaWZpZXInLCBmYWxzZSk7IC8vIGN0cmwsIHNoaWZ0LCBhbHQgb3IgbWV0YVxuXHRcdG5ld09wdGlvbigncG9wdXBNb2RpZmllckFjdGlvbicsICdlbmFibGUnKTsgLy8gb3IgJ2Rpc2FibGUnXG5cdFx0bmV3T3B0aW9uKCdwb3B1cERyYWdnYWJsZScsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBSZXZpZXcnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cExvY2FsZScsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRGF0ZVRpbWVGb3JtYXR0ZXJPcHRpb25zJywge1xuXHRcdFx0eWVhcjogJ251bWVyaWMnLFxuXHRcdFx0bW9udGg6ICdsb25nJyxcblx0XHRcdGRheTogJ251bWVyaWMnLFxuXHRcdFx0aG91cjEyOiBmYWxzZSxcblx0XHRcdGhvdXI6ICcyLWRpZ2l0Jyxcblx0XHRcdG1pbnV0ZTogJzItZGlnaXQnLFxuXHRcdFx0c2Vjb25kOiAnMi1kaWdpdCcsXG5cdFx0fSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERhdGVGb3JtYXR0ZXJPcHRpb25zJywge1xuXHRcdFx0eWVhcjogJ251bWVyaWMnLFxuXHRcdFx0bW9udGg6ICdsb25nJyxcblx0XHRcdGRheTogJ251bWVyaWMnLFxuXHRcdH0pO1xuXHRcdG5ld09wdGlvbigncG9wdXBUaW1lRm9ybWF0dGVyT3B0aW9ucycsIHtcblx0XHRcdGhvdXIxMjogZmFsc2UsXG5cdFx0XHRob3VyOiAnMi1kaWdpdCcsXG5cdFx0XHRtaW51dGU6ICcyLWRpZ2l0Jyxcblx0XHRcdHNlY29uZDogJzItZGlnaXQnLFxuXHRcdH0pO1xuXHRcdC8vIGltYWdlc1xuXHRcdG5ld09wdGlvbigncG9wdXBJbWFnZXMnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ2ltYWdlUG9wdXBzRm9ySW1hZ2VzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cE5ldmVyR2V0VGh1bWJzJywgZmFsc2UpO1xuXHRcdC8vIG5ld09wdGlvbigncG9wdXBJbWFnZXNUb2dnbGVTaXplJywgICAgICAgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFRodW1iQWN0aW9uJywgJ2ltYWdlcGFnZScpOyAvLyAnc2l6ZXRvZ2dsZScpO1xuXHRcdG5ld09wdGlvbigncG9wdXBJbWFnZVNpemUnLCA2MCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEltYWdlU2l6ZUxhcmdlJywgMjAwKTtcblx0XHQvLyByZWRpcnMsIGRhYnMsIHJldmVyc2lvblxuXHRcdG5ld09wdGlvbigncG9wdXBGaXhSZWRpcnMnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFJlZGlyQXV0b0NsaWNrJywgJ3dwRGlmZicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBGaXhEYWJzJywgZmFsc2UpO1xuXHRcdG5ld09wdGlvbigncG9wdXBEYWJzQXV0b0NsaWNrJywgJ3dwRGlmZicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBSZXZlcnRTdW1tYXJ5UHJvbXB0JywgZmFsc2UpO1xuXHRcdG5ld09wdGlvbigncG9wdXBNaW5vclJldmVydHMnLCBmYWxzZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFJlZGxpbmtSZW1vdmFsJywgZmFsc2UpO1xuXHRcdG5ld09wdGlvbigncG9wdXBSZWRsaW5rQXV0b0NsaWNrJywgJ3dwRGlmZicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBXYXRjaERpc2FtYmlnZ2VkUGFnZXMnLCBudWxsKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwV2F0Y2hSZWRpcnJlZFBhZ2VzJywgbnVsbCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERhYldpa3Rpb25hcnknLCAnbGFzdCcpO1xuXHRcdC8vIG5hdmxpbmtzXG5cdFx0bmV3T3B0aW9uKCdwb3B1cE5hdkxpbmtzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cE5hdkxpbmtTZXBhcmF0b3InLCAnICZzZG90OyAnKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTGFzdEVkaXRMaW5rJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEVkaXRDb3VudGVyVG9vbCcsICdzdXBlcmNvdW50Jyk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEVkaXRDb3VudGVyVXJsJywgJycpO1xuXHRcdC8vIHByZXZpZXdzIGV0Y1xuXHRcdG5ld09wdGlvbigncG9wdXBQcmV2aWV3cycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBTdW1tYXJ5RGF0YScsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBNYXhQcmV2aWV3U2VudGVuY2VzJywgNSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cE1heFByZXZpZXdDaGFyYWN0ZXJzJywgNjAwKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTGFzdE1vZGlmaWVkJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFByZXZpZXdLaWxsVGVtcGxhdGVzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFByZXZpZXdSYXdUZW1wbGF0ZXMnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUHJldmlld0ZpcnN0UGFyT25seScsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBQcmV2aWV3Q3V0SGVhZGluZ3MnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUHJldmlld0J1dHRvbicsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUHJldmlld0J1dHRvbkV2ZW50JywgJ2NsaWNrJyk7XG5cdFx0Ly8gZGlmZnNcblx0XHRuZXdPcHRpb24oJ3BvcHVwUHJldmlld0RpZmZzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERpZmZNYXhMaW5lcycsIDEwMCk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cERpZmZDb250ZXh0TGluZXMnLCAyKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRGlmZkNvbnRleHRDaGFyYWN0ZXJzJywgNDApO1xuXHRcdG5ld09wdGlvbigncG9wdXBEaWZmRGF0ZXMnLCB0cnVlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRGlmZkRhdGVQcmludGVyJywgJ3RvTG9jYWxlU3RyaW5nJyk7IC8vIG5vIGxvbmdlciBpbiB1c2VcblxuXHRcdC8vIGVkaXQgc3VtbWFyaWVzLiBHb2QsIHRoZXNlIGFyZSB1Z2x5LlxuXHRcdG5ld09wdGlvbigncG9wdXBSZXZpZXdlZFN1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwUmV2aWV3ZWRTdW1tYXJ5JykpO1xuXHRcdG5ld09wdGlvbigncG9wdXBGaXhEYWJzU3VtbWFyeScsIHBvcHVwU3RyaW5nKCdkZWZhdWx0cG9wdXBGaXhEYWJzU3VtbWFyeScpKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRXh0ZW5kZWRSZXZlcnRTdW1tYXJ5JywgcG9wdXBTdHJpbmcoJ2RlZmF1bHRwb3B1cEV4dGVuZGVkUmV2ZXJ0U3VtbWFyeScpKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUmV2ZXJ0U3VtbWFyeScsIHBvcHVwU3RyaW5nKCdkZWZhdWx0cG9wdXBSZXZlcnRTdW1tYXJ5JykpO1xuXHRcdG5ld09wdGlvbigncG9wdXBSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeScsIHBvcHVwU3RyaW5nKCdkZWZhdWx0cG9wdXBSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeScpKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUXVlcmllZFJldmVydFN1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwUXVlcmllZFJldmVydFN1bW1hcnknKSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFF1ZXJpZWRSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeScsIHBvcHVwU3RyaW5nKCdkZWZhdWx0cG9wdXBRdWVyaWVkUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnknKSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cEZpeFJlZGlyc1N1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwRml4UmVkaXJzU3VtbWFyeScpKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUmVkbGlua1N1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwUmVkbGlua1N1bW1hcnknKSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cFJtRGFiTGlua1N1bW1hcnknLCBwb3B1cFN0cmluZygnZGVmYXVsdHBvcHVwUm1EYWJMaW5rU3VtbWFyeScpKTtcblx0XHQvLyBtaXNjXG5cdFx0bmV3T3B0aW9uKCdwb3B1cEhpc3RvcnlMaW1pdCcsIDUwKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwRmlsdGVycycsIFtcblx0XHRcdHBvcHVwRmlsdGVyU3R1YkRldGVjdCxcblx0XHRcdHBvcHVwRmlsdGVyRGlzYW1iaWdEZXRlY3QsXG5cdFx0XHRwb3B1cEZpbHRlclBhZ2VTaXplLFxuXHRcdFx0cG9wdXBGaWx0ZXJDb3VudExpbmtzLFxuXHRcdFx0cG9wdXBGaWx0ZXJDb3VudEltYWdlcyxcblx0XHRcdHBvcHVwRmlsdGVyQ291bnRDYXRlZ29yaWVzLFxuXHRcdFx0cG9wdXBGaWx0ZXJMYXN0TW9kaWZpZWQsXG5cdFx0XSk7XG5cdFx0bmV3T3B0aW9uKCdleHRyYVBvcHVwRmlsdGVycycsIFtdKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwT25FZGl0U2VsZWN0aW9uJywgJ2N1cnNvcicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBQcmV2aWV3SGlzdG9yeScsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBJbWFnZUxpbmtzJywgdHJ1ZSk7XG5cdFx0bmV3T3B0aW9uKCdwb3B1cENhdGVnb3J5TWVtYmVycycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBVc2VySW5mbycsIHRydWUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBIaXN0b3J5UHJldmlld0xpbWl0JywgMjUpO1xuXHRcdG5ld09wdGlvbigncG9wdXBDb250cmlic1ByZXZpZXdMaW1pdCcsIDI1KTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwUmV2RGVsVXJsJywgJy8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpa2lwZWRpYTpSZXZpc2lvbl9kZWxldGlvbicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBTaG93R2VuZGVyJywgdHJ1ZSk7XG5cdFx0Ly8gbmV3IHdpbmRvd3Ncblx0XHRuZXdPcHRpb24oJ3BvcHVwTmV3V2luZG93cycsIGZhbHNlKTtcblx0XHRuZXdPcHRpb24oJ3BvcHVwTGlua3NOZXdXaW5kb3cnLCB7bGFzdENvbnRyaWI6IHRydWUsIHNpbmNlTWU6IHRydWV9KTtcblx0XHQvLyByZWdleHBzXG5cdFx0bmV3T3B0aW9uKFxuXHRcdFx0J3BvcHVwRGFiUmVnZXhwJyxcblx0XHRcdFN0cmluZy5yYXdgXFx7XFx7XFxzKihkKGFifGlzYW1iKGlnKHVhdGlvbik/KT8pfCgoKGdlb3xobnxyb2FkP3xzY2hvb2x8bnVtYmVyKWRpcyl8WzIzNF1bbGNdW2Fjd118KHJvYWR8c2hpcClpbmRleCkpXFxzKihcXHxbXn1dKik/XFx9XFx9fGlzIGEgLipkaXNhbWJpZ3VhdGlvbi4qcGFnZWBcblx0XHQpO1xuXHRcdG5ld09wdGlvbigncG9wdXBBbmNob3JSZWdleHAnLCAnYW5jaG9ycz8nKTsgLy8gaG93IHRvIGlkZW50aWZ5IGFuIGFuY2hvcnMgdGVtcGxhdGVcblx0XHRuZXdPcHRpb24oJ3BvcHVwU3R1YlJlZ2V4cCcsICcoc2VjdCk/c3R1Ylt9XVt9XXxUaGlzIC4qLXJlbGF0ZWQgYXJ0aWNsZSBpcyBhIC4qc3R1YicpO1xuXHRcdG5ld09wdGlvbigncG9wdXBJbWFnZVZhcnNSZWdleHAnLCAnaW1hZ2V8aW1hZ2VfKD86ZmlsZXxza3lsaW5lfG5hbWV8ZmxhZ3xzZWFsKXxjb3ZlcnxiYWRnZXxsb2dvJyk7XG5cdH07XG5cdC8vIEVOREZJTEU6IG9wdGlvbnMuanNcblx0Ly8gU1RBUlRGSUxFOiBzdHJpbmdzLmpzXG5cdC8vIFRyYW5zbGF0YWJsZSBzdHJpbmdzXG5cdC8vXG5cdC8vIFNlZSBpbnN0cnVjdGlvbnMgYXRcblx0Ly8ge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpa2lwZWRpYTpUb29scy9OYXZpZ2F0aW9uX3BvcHVwcy9UcmFuc2xhdGlvbn1cblx0cGcuc3RyaW5nID0ge1xuXHRcdC8vIHN1bW1hcnkgZGF0YSwgc2VhcmNoaW5nIGV0Yy5cblx0XHRhcnRpY2xlOiAnYXJ0aWNsZScsXG5cdFx0Y2F0ZWdvcnk6ICdjYXRlZ29yeScsXG5cdFx0Y2F0ZWdvcmllczogJ2NhdGVnb3JpZXMnLFxuXHRcdGltYWdlOiAnaW1hZ2UnLFxuXHRcdGltYWdlczogJ2ltYWdlcycsXG5cdFx0c3R1YjogJ3N0dWInLFxuXHRcdCdzZWN0aW9uIHN0dWInOiAnc2VjdGlvbiBzdHViJyxcblx0XHQnRW1wdHkgcGFnZSc6ICdFbXB0eSBwYWdlJyxcblx0XHRrQjogJ2tCJyxcblx0XHRieXRlczogJ2J5dGVzJyxcblx0XHRkYXk6ICdkYXknLFxuXHRcdGRheXM6ICdkYXlzJyxcblx0XHRob3VyOiAnaG91cicsXG5cdFx0aG91cnM6ICdob3VycycsXG5cdFx0bWludXRlOiAnbWludXRlJyxcblx0XHRtaW51dGVzOiAnbWludXRlcycsXG5cdFx0c2Vjb25kOiAnc2Vjb25kJyxcblx0XHRzZWNvbmRzOiAnc2Vjb25kcycsXG5cdFx0d2VlazogJ3dlZWsnLFxuXHRcdHdlZWtzOiAnd2Vla3MnLFxuXHRcdHNlYXJjaDogJ3NlYXJjaCcsXG5cdFx0U2VhcmNoSGludDogJ0ZpbmQgRW5nbGlzaCBXaWtpcGVkaWEgYXJ0aWNsZXMgY29udGFpbmluZyAlcycsXG5cdFx0d2ViOiAnd2ViJyxcblx0XHRnbG9iYWw6ICdnbG9iYWwnLFxuXHRcdC8vIGFydGljbGUtcmVsYXRlZCBhY3Rpb25zIGFuZCBpbmZvXG5cdFx0Ly8gKHNvbWUgYWN0aW9ucyBhbHNvIGFwcGx5IHRvIHVzZXIgcGFnZXMpXG5cdFx0YWN0aW9uczogJ2FjdGlvbnMnLFxuXHRcdHBvcHVwc01lbnU6ICdwb3B1cHMnLFxuXHRcdHRvZ2dsZVByZXZpZXdzSGludDogJ1RvZ2dsZSBwcmV2aWV3IGdlbmVyYXRpb24gaW4gcG9wdXBzIG9uIHRoaXMgcGFnZScsXG5cdFx0J2VuYWJsZSBwcmV2aWV3cyc6ICdlbmFibGUgcHJldmlld3MnLFxuXHRcdCdkaXNhYmxlIHByZXZpZXdzJzogJ2Rpc2FibGUgcHJldmlld3MnLFxuXHRcdCd0b2dnbGUgcHJldmlld3MnOiAndG9nZ2xlIHByZXZpZXdzJyxcblx0XHQnc2hvdyBwcmV2aWV3JzogJ3Nob3cgcHJldmlldycsXG5cdFx0cmVzZXQ6ICdyZXNldCcsXG5cdFx0J21vcmUuLi4nOiAnbW9yZS4uLicsXG5cdFx0ZGlzYWJsZTogJ2Rpc2FibGUgcG9wdXBzJyxcblx0XHRkaXNhYmxlUG9wdXBzSGludDogJ0Rpc2FibGUgcG9wdXBzIG9uIHRoaXMgcGFnZS4gUmVsb2FkIHBhZ2UgdG8gcmUtZW5hYmxlLicsXG5cdFx0aGlzdG9yeWZlZWRIaW50OiAnUlNTIGZlZWQgb2YgcmVjZW50IGNoYW5nZXMgdG8gdGhpcyBwYWdlJyxcblx0XHRwdXJnZVBvcHVwc0hpbnQ6ICdSZXNldCBwb3B1cHMsIGNsZWFyaW5nIGFsbCBjYWNoZWQgcG9wdXAgZGF0YS4nLFxuXHRcdFBvcHVwc0hpbnQ6ICdSZXNldCBwb3B1cHMsIGNsZWFyaW5nIGFsbCBjYWNoZWQgcG9wdXAgZGF0YS4nLFxuXHRcdHNwYWNlYmFyOiAnc3BhY2UnLFxuXHRcdHZpZXc6ICd2aWV3Jyxcblx0XHQndmlldyBhcnRpY2xlJzogJ3ZpZXcgYXJ0aWNsZScsXG5cdFx0dmlld0hpbnQ6ICdHbyB0byAlcycsXG5cdFx0dGFsazogJ3RhbGsnLFxuXHRcdCd0YWxrIHBhZ2UnOiAndGFsayBwYWdlJyxcblx0XHQndGhpcyZuYnNwO3JldmlzaW9uJzogJ3RoaXMmbmJzcDtyZXZpc2lvbicsXG5cdFx0J3JldmlzaW9uICVzIG9mICVzJzogJ3JldmlzaW9uICVzIG9mICVzJyxcblx0XHQnUmV2aXNpb24gJXMgb2YgJXMnOiAnUmV2aXNpb24gJXMgb2YgJXMnLFxuXHRcdCd0aGUgcmV2aXNpb24gcHJpb3IgdG8gcmV2aXNpb24gJXMgb2YgJXMnOiAndGhlIHJldmlzaW9uIHByaW9yIHRvIHJldmlzaW9uICVzIG9mICVzJyxcblx0XHQnVG9nZ2xlIGltYWdlIHNpemUnOiAnQ2xpY2sgdG8gdG9nZ2xlIGltYWdlIHNpemUnLFxuXHRcdGRlbDogJ2RlbCcsXG5cdFx0ZGVsZXRlOiAnZGVsZXRlJyxcblx0XHRkZWxldGVIaW50OiAnRGVsZXRlICVzJyxcblx0XHR1bmRlbGV0ZVNob3J0OiAndW4nLFxuXHRcdFVuZGVsZXRlSGludDogJ1Nob3cgdGhlIGRlbGV0aW9uIGhpc3RvcnkgZm9yICVzJyxcblx0XHRwcm90ZWN0OiAncHJvdGVjdCcsXG5cdFx0cHJvdGVjdEhpbnQ6ICdSZXN0cmljdCBlZGl0aW5nIHJpZ2h0cyB0byAlcycsXG5cdFx0dW5wcm90ZWN0U2hvcnQ6ICd1bicsXG5cdFx0dW5wcm90ZWN0SGludDogJ0FsbG93ICVzIHRvIGJlIGVkaXRlZCBieSBhbnlvbmUgYWdhaW4nLFxuXHRcdCdzZW5kIHRoYW5rcyc6ICdzZW5kIHRoYW5rcycsXG5cdFx0VGhhbmtzSGludDogJ1NlbmQgYSB0aGFuayB5b3Ugbm90aWZpY2F0aW9uIHRvIHRoaXMgdXNlcicsXG5cdFx0bW92ZTogJ21vdmUnLFxuXHRcdCdtb3ZlIHBhZ2UnOiAnbW92ZSBwYWdlJyxcblx0XHRNb3ZlcGFnZUhpbnQ6ICdDaGFuZ2UgdGhlIHRpdGxlIG9mICVzJyxcblx0XHRlZGl0OiAnZWRpdCcsXG5cdFx0J2VkaXQgYXJ0aWNsZSc6ICdlZGl0IGFydGljbGUnLFxuXHRcdGVkaXRIaW50OiAnQ2hhbmdlIHRoZSBjb250ZW50IG9mICVzJyxcblx0XHQnZWRpdCB0YWxrJzogJ2VkaXQgdGFsaycsXG5cdFx0bmV3OiAnbmV3Jyxcblx0XHQnbmV3IHRvcGljJzogJ25ldyB0b3BpYycsXG5cdFx0bmV3U2VjdGlvbkhpbnQ6ICdTdGFydCBhIG5ldyBzZWN0aW9uIG9uICVzJyxcblx0XHQnbnVsbCBlZGl0JzogJ251bGwgZWRpdCcsXG5cdFx0bnVsbEVkaXRIaW50OiAnU3VibWl0IGFuIGVkaXQgdG8gJXMsIG1ha2luZyBubyBjaGFuZ2VzICcsXG5cdFx0aGlzdDogJ2hpc3QnLFxuXHRcdGhpc3Rvcnk6ICdoaXN0b3J5Jyxcblx0XHRoaXN0b3J5SGludDogJ0xpc3QgdGhlIGNoYW5nZXMgbWFkZSB0byAlcycsXG5cdFx0bGFzdDogJ3ByZXYnLFxuXHRcdGxhc3RFZGl0OiAnbGFzdEVkaXQnLFxuXHRcdCdtYXJrIHBhdHJvbGxlZCc6ICdtYXJrIHBhdHJvbGxlZCcsXG5cdFx0bWFya3BhdHJvbGxlZEhpbnQ6ICdNYXJrIHRoaXMgZWRpdCBhcyBwYXRyb2xsZWQnLFxuXHRcdCdDb3VsZCBub3QgbWFya2VkIHRoaXMgZWRpdCBhcyBwYXRyb2xsZWQnOiAnQ291bGQgbm90IG1hcmtlZCB0aGlzIGVkaXQgYXMgcGF0cm9sbGVkJyxcblx0XHQnc2hvdyBsYXN0IGVkaXQnOiAnbW9zdCByZWNlbnQgZWRpdCcsXG5cdFx0J1Nob3cgdGhlIGxhc3QgZWRpdCc6ICdTaG93IHRoZSBlZmZlY3RzIG9mIHRoZSBtb3N0IHJlY2VudCBjaGFuZ2UnLFxuXHRcdGxhc3RDb250cmliOiAnbGFzdENvbnRyaWInLFxuXHRcdCdsYXN0IHNldCBvZiBlZGl0cyc6ICdsYXRlc3QgZWRpdHMnLFxuXHRcdGxhc3RDb250cmliSGludDogJ1Nob3cgdGhlIG5ldCBlZmZlY3Qgb2YgY2hhbmdlcyBtYWRlIGJ5IHRoZSBsYXN0IGVkaXRvcicsXG5cdFx0Y3VyOiAnY3VyJyxcblx0XHRkaWZmQ3VyOiAnZGlmZkN1cicsXG5cdFx0J1Nob3cgY2hhbmdlcyBzaW5jZSByZXZpc2lvbiAlcyc6ICdTaG93IGNoYW5nZXMgc2luY2UgcmV2aXNpb24gJXMnLFxuXHRcdCclcyBvbGQnOiAnJXMgb2xkJyxcblx0XHRvbGRFZGl0OiAnb2xkRWRpdCcsXG5cdFx0cHVyZ2U6ICdwdXJnZScsXG5cdFx0cHVyZ2VIaW50OiAnRGVtYW5kIGEgZnJlc2ggY29weSBvZiAlcycsXG5cdFx0cmF3OiAnc291cmNlJyxcblx0XHRyYXdIaW50OiAnRG93bmxvYWQgdGhlIHNvdXJjZSBvZiAlcycsXG5cdFx0cmVuZGVyOiAnc2ltcGxlJyxcblx0XHRyZW5kZXJIaW50OiAnU2hvdyBhIHBsYWluIEhUTUwgdmVyc2lvbiBvZiAlcycsXG5cdFx0J1Nob3cgdGhlIGVkaXQgbWFkZSB0byBnZXQgcmV2aXNpb24nOiAnU2hvdyB0aGUgZWRpdCBtYWRlIHRvIGdldCByZXZpc2lvbicsXG5cdFx0c2luY2VNZTogJ3NpbmNlTWUnLFxuXHRcdCdjaGFuZ2VzIHNpbmNlIG1pbmUnOiAnZGlmZiBteSBlZGl0Jyxcblx0XHRzaW5jZU1lSGludDogJ1Nob3cgY2hhbmdlcyBzaW5jZSBteSBsYXN0IGVkaXQnLFxuXHRcdFwiQ291bGRuJ3QgZmluZCBhbiBlZGl0IGJ5ICVzXFxuaW4gdGhlIGxhc3QgJXMgZWRpdHMgdG9cXG4lc1wiOlxuXHRcdFx0XCJDb3VsZG4ndCBmaW5kIGFuIGVkaXQgYnkgJXNcXG5pbiB0aGUgbGFzdCAlcyBlZGl0cyB0b1xcbiVzXCIsXG5cdFx0ZWRzOiAnZWRzJyxcblx0XHRlZGl0b3JzOiAnZWRpdG9ycycsXG5cdFx0ZWRpdG9yTGlzdEhpbnQ6ICdMaXN0IHRoZSB1c2VycyB3aG8gaGF2ZSBlZGl0ZWQgJXMnLFxuXHRcdHJlbGF0ZWQ6ICdyZWxhdGVkJyxcblx0XHRyZWxhdGVkQ2hhbmdlczogJ3JlbGF0ZWRDaGFuZ2VzJyxcblx0XHQncmVsYXRlZCBjaGFuZ2VzJzogJ3JlbGF0ZWQgY2hhbmdlcycsXG5cdFx0UmVjZW50Y2hhbmdlc2xpbmtlZEhpbnQ6ICdTaG93IGNoYW5nZXMgaW4gYXJ0aWNsZXMgcmVsYXRlZCB0byAlcycsXG5cdFx0ZWRpdE9sZDogJ2VkaXRPbGQnLFxuXHRcdHJ2OiAncnYnLFxuXHRcdHJldmVydDogJ3JldmVydCcsXG5cdFx0cmV2ZXJ0SGludDogJ1JldmVydCB0byAlcycsXG5cdFx0ZGVmYXVsdHBvcHVwUmV2aWV3ZWRTdW1tYXJ5OlxuXHRcdFx0J0FjY2VwdGVkIGJ5IHJldmlld2luZyB0aGUgW1tTcGVjaWFsOmRpZmYvJXMvJXN8ZGlmZmVyZW5jZV1dIGJldHdlZW4gdGhpcyB2ZXJzaW9uIGFuZCBwcmV2aW91c2x5IGFjY2VwdGVkIHZlcnNpb24gdXNpbmcgW1s6ZW53aWtpOldpa2lwZWRpYTpUb29scy9OYXZpZ2F0aW9uX3BvcHVwc3xwb3B1cHNdXScsXG5cdFx0ZGVmYXVsdHBvcHVwUmVkbGlua1N1bW1hcnk6XG5cdFx0XHQnUmVtb3ZpbmcgbGluayB0byBlbXB0eSBwYWdlIFtbJXNdXSB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRkZWZhdWx0cG9wdXBGaXhEYWJzU3VtbWFyeTpcblx0XHRcdCdEaXNhbWJpZ3VhdGUgW1slc11dIHRvIFtbJXNdXSB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRkZWZhdWx0cG9wdXBGaXhSZWRpcnNTdW1tYXJ5OlxuXHRcdFx0J1JlZGlyZWN0IGJ5cGFzcyBmcm9tIFtbJXNdXSB0byBbWyVzXV0gdXNpbmcgW1s6ZW53aWtpOldpa2lwZWRpYTpUb29scy9OYXZpZ2F0aW9uX3BvcHVwc3xwb3B1cHNdXScsXG5cdFx0ZGVmYXVsdHBvcHVwRXh0ZW5kZWRSZXZlcnRTdW1tYXJ5OlxuXHRcdFx0J1JldmVydCB0byByZXZpc2lvbiBkYXRlZCAlcyBieSAlcywgb2xkaWQgJXMgdXNpbmcgW1s6ZW53aWtpOldpa2lwZWRpYTpUb29scy9OYXZpZ2F0aW9uX3BvcHVwc3xwb3B1cHNdXScsXG5cdFx0ZGVmYXVsdHBvcHVwUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnk6XG5cdFx0XHQnUmV2ZXJ0IHRvIHRoZSByZXZpc2lvbiBwcmlvciB0byByZXZpc2lvbiAlcyB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRkZWZhdWx0cG9wdXBSZXZlcnRTdW1tYXJ5OiAnUmV2ZXJ0IHRvIHJldmlzaW9uICVzIHVzaW5nIFtbOmVud2lraTpXaWtpcGVkaWE6VG9vbHMvTmF2aWdhdGlvbl9wb3B1cHN8cG9wdXBzXV0nLFxuXHRcdGRlZmF1bHRwb3B1cFF1ZXJpZWRSZXZlcnRUb1ByZXZpb3VzU3VtbWFyeTpcblx0XHRcdCdSZXZlcnQgdG8gdGhlIHJldmlzaW9uIHByaW9yIHRvIHJldmlzaW9uICQxIGRhdGVkICQyIGJ5ICQzIHVzaW5nIFtbOmVud2lraTpXaWtpcGVkaWE6VG9vbHMvTmF2aWdhdGlvbl9wb3B1cHN8cG9wdXBzXV0nLFxuXHRcdGRlZmF1bHRwb3B1cFF1ZXJpZWRSZXZlcnRTdW1tYXJ5OlxuXHRcdFx0J1JldmVydCB0byByZXZpc2lvbiAkMSBkYXRlZCAkMiBieSAkMyB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRkZWZhdWx0cG9wdXBSbURhYkxpbmtTdW1tYXJ5OlxuXHRcdFx0J1JlbW92ZSBsaW5rIHRvIGRhYiBwYWdlIFtbJXNdXSB1c2luZyBbWzplbndpa2k6V2lraXBlZGlhOlRvb2xzL05hdmlnYXRpb25fcG9wdXBzfHBvcHVwc11dJyxcblx0XHRSZWRpcmVjdHM6ICdSZWRpcmVjdHMnLFxuXHRcdCcgdG8gJzogJyB0byAnLFxuXHRcdCdCeXBhc3MgcmVkaXJlY3QnOiAnQnlwYXNzIHJlZGlyZWN0Jyxcblx0XHQnRml4IHRoaXMgcmVkaXJlY3QnOiAnRml4IHRoaXMgcmVkaXJlY3QnLFxuXHRcdGRpc2FtYmlnOiAnZGlzYW1iaWcnLFxuXHRcdGRpc2FtYmlnSGludDogJ0Rpc2FtYmlndWF0ZSB0aGlzIGxpbmsgdG8gW1slc11dJyxcblx0XHQnQ2xpY2sgdG8gZGlzYW1iaWd1YXRlIHRoaXMgbGluayB0bzonOiAnQ2xpY2sgdG8gZGlzYW1iaWd1YXRlIHRoaXMgbGluayB0bzonLFxuXHRcdCdyZW1vdmUgdGhpcyBsaW5rJzogJ3JlbW92ZSB0aGlzIGxpbmsnLFxuXHRcdCdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZSc6ICdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZScsXG5cdFx0J3JlbW92ZSBhbGwgbGlua3MgdG8gdGhpcyBkaXNhbWJpZyBwYWdlIGZyb20gdGhpcyBhcnRpY2xlJzpcblx0XHRcdCdyZW1vdmUgYWxsIGxpbmtzIHRvIHRoaXMgZGlzYW1iaWcgcGFnZSBmcm9tIHRoaXMgYXJ0aWNsZScsXG5cdFx0bWFpbmxpbms6ICdtYWlubGluaycsXG5cdFx0d2lraUxpbms6ICd3aWtpTGluaycsXG5cdFx0d2lraUxpbmtzOiAnd2lraUxpbmtzJyxcblx0XHQnbGlua3MgaGVyZSc6ICdsaW5rcyBoZXJlJyxcblx0XHR3aGF0TGlua3NIZXJlOiAnd2hhdExpbmtzSGVyZScsXG5cdFx0J3doYXQgbGlua3MgaGVyZSc6ICd3aGF0IGxpbmtzIGhlcmUnLFxuXHRcdFdoYXRsaW5rc2hlcmVIaW50OiAnTGlzdCB0aGUgcGFnZXMgdGhhdCBhcmUgaHlwZXJsaW5rZWQgdG8gJXMnLFxuXHRcdHVud2F0Y2hTaG9ydDogJ3VuJyxcblx0XHR3YXRjaFRoaW5neTogJ3dhdGNoJyxcblx0XHR3YXRjaEhpbnQ6ICdBZGQgJXMgdG8gbXkgd2F0Y2hsaXN0Jyxcblx0XHR1bndhdGNoSGludDogJ1JlbW92ZSAlcyBmcm9tIG15IHdhdGNobGlzdCcsXG5cdFx0J09ubHkgZm91bmQgb25lIGVkaXRvcjogJXMgbWFkZSAlcyBlZGl0cyc6ICdPbmx5IGZvdW5kIG9uZSBlZGl0b3I6ICVzIG1hZGUgJXMgZWRpdHMnLFxuXHRcdCclcyBzZWVtcyB0byBiZSB0aGUgbGFzdCBlZGl0b3IgdG8gdGhlIHBhZ2UgJXMnOiAnJXMgc2VlbXMgdG8gYmUgdGhlIGxhc3QgZWRpdG9yIHRvIHRoZSBwYWdlICVzJyxcblx0XHRyc3M6ICdyc3MnLFxuXHRcdC8vIGRpZmYgcHJldmlld3Ncblx0XHQnRGlmZiB0cnVuY2F0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMnOiAnRGlmZiB0cnVuY2F0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMnLFxuXHRcdCdPbGQgcmV2aXNpb24nOiAnT2xkIHJldmlzaW9uJyxcblx0XHQnTmV3IHJldmlzaW9uJzogJ05ldyByZXZpc2lvbicsXG5cdFx0J1NvbWV0aGluZyB3ZW50IHdyb25nIDotKCc6ICdTb21ldGhpbmcgd2VudCB3cm9uZyA6LSgnLFxuXHRcdCdFbXB0eSByZXZpc2lvbiwgbWF5YmUgbm9uLWV4aXN0ZW50JzogJ0VtcHR5IHJldmlzaW9uLCBtYXliZSBub24tZXhpc3RlbnQnLFxuXHRcdCdVbmtub3duIGRhdGUnOiAnVW5rbm93biBkYXRlJyxcblx0XHQvLyBvdGhlciBzcGVjaWFsIHByZXZpZXdzXG5cdFx0J0VtcHR5IGNhdGVnb3J5JzogJ0VtcHR5IGNhdGVnb3J5Jyxcblx0XHQnQ2F0ZWdvcnkgbWVtYmVycyAoJXMgc2hvd24pJzogJ0NhdGVnb3J5IG1lbWJlcnMgKCVzIHNob3duKScsXG5cdFx0J05vIGltYWdlIGxpbmtzIGZvdW5kJzogJ05vIGltYWdlIGxpbmtzIGZvdW5kJyxcblx0XHQnRmlsZSBsaW5rcyc6ICdGaWxlIGxpbmtzJyxcblx0XHQnTm8gaW1hZ2UgZm91bmQnOiAnTm8gaW1hZ2UgZm91bmQnLFxuXHRcdCdJbWFnZSBmcm9tIENvbW1vbnMnOiAnSW1hZ2UgZnJvbSBDb21tb25zJyxcblx0XHQnRGVzY3JpcHRpb24gcGFnZSc6ICdEZXNjcmlwdGlvbiBwYWdlJyxcblx0XHQnQWx0IHRleHQ6JzogJ0FsdCB0ZXh0OicsXG5cdFx0cmV2ZGVsOiAnSGlkZGVuIHJldmlzaW9uJyxcblx0XHQvLyB1c2VyLXJlbGF0ZWQgYWN0aW9ucyBhbmQgaW5mb1xuXHRcdHVzZXI6ICd1c2VyJyxcblx0XHQndXNlciZuYnNwO3BhZ2UnOiAndXNlciZuYnNwO3BhZ2UnLFxuXHRcdCd1c2VyIHRhbGsnOiAndXNlciB0YWxrJyxcblx0XHQnZWRpdCB1c2VyIHRhbGsnOiAnZWRpdCB1c2VyIHRhbGsnLFxuXHRcdCdsZWF2ZSBjb21tZW50JzogJ2xlYXZlIGNvbW1lbnQnLFxuXHRcdGVtYWlsOiAnZW1haWwnLFxuXHRcdCdlbWFpbCB1c2VyJzogJ2VtYWlsIHVzZXInLFxuXHRcdEVtYWlsdXNlckhpbnQ6ICdTZW5kIGFuIGVtYWlsIHRvICVzJyxcblx0XHRzcGFjZTogJ3NwYWNlJyxcblx0XHRQcmVmaXhJbmRleEhpbnQ6ICdTaG93IHBhZ2VzIGluIHRoZSB1c2Vyc3BhY2Ugb2YgJXMnLFxuXHRcdGNvdW50OiAnY291bnQnLFxuXHRcdCdlZGl0IGNvdW50ZXInOiAnZWRpdCBjb3VudGVyJyxcblx0XHRlZGl0Q291bnRlckxpbmtIaW50OiAnQ291bnQgdGhlIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSAlcycsXG5cdFx0Y29udHJpYnM6ICdjb250cmlicycsXG5cdFx0Y29udHJpYnV0aW9uczogJ2NvbnRyaWJ1dGlvbnMnLFxuXHRcdGRlbGV0ZWRDb250cmliczogJ2RlbGV0ZWQgY29udHJpYnV0aW9ucycsXG5cdFx0RGVsZXRlZGNvbnRyaWJ1dGlvbnNIaW50OiAnTGlzdCBkZWxldGVkIGVkaXRzIG1hZGUgYnkgJXMnLFxuXHRcdENvbnRyaWJ1dGlvbnNIaW50OiAnTGlzdCB0aGUgY29udHJpYnV0aW9ucyBtYWRlIGJ5ICVzJyxcblx0XHRsb2c6ICdsb2cnLFxuXHRcdCd1c2VyIGxvZyc6ICd1c2VyIGxvZycsXG5cdFx0dXNlckxvZ0hpbnQ6IFwiU2hvdyAlcydzIHVzZXIgbG9nXCIsXG5cdFx0YXJpbjogJ0FSSU4gbG9va3VwJyxcblx0XHQnTG9vayB1cCAlcyBpbiBBUklOIHdob2lzIGRhdGFiYXNlJzogJ0xvb2sgdXAgJXMgaW4gdGhlIEFSSU4gd2hvaXMgZGF0YWJhc2UnLFxuXHRcdHVuYmxvY2tTaG9ydDogJ3VuJyxcblx0XHRibG9jazogJ2Jsb2NrJyxcblx0XHQnYmxvY2sgdXNlcic6ICdibG9jayB1c2VyJyxcblx0XHRJcGJsb2NrbGlzdEhpbnQ6ICdVbmJsb2NrICVzJyxcblx0XHRCbG9ja2lwSGludDogJ1ByZXZlbnQgJXMgZnJvbSBlZGl0aW5nJyxcblx0XHQnYmxvY2sgbG9nJzogJ2Jsb2NrIGxvZycsXG5cdFx0YmxvY2tMb2dIaW50OiAnU2hvdyB0aGUgYmxvY2sgbG9nIGZvciAlcycsXG5cdFx0cHJvdGVjdExvZ0hpbnQ6ICdTaG93IHRoZSBwcm90ZWN0aW9uIGxvZyBmb3IgJXMnLFxuXHRcdHBhZ2VMb2dIaW50OiAnU2hvdyB0aGUgcGFnZSBsb2cgZm9yICVzJyxcblx0XHRkZWxldGVMb2dIaW50OiAnU2hvdyB0aGUgZGVsZXRpb24gbG9nIGZvciAlcycsXG5cdFx0J0ludmFsaWQgJXMgJXMnOiAnVGhlIG9wdGlvbiAlcyBpcyBpbnZhbGlkOiAlcycsXG5cdFx0J05vIGJhY2tsaW5rcyBmb3VuZCc6ICdObyBiYWNrbGlua3MgZm91bmQnLFxuXHRcdCcgYW5kIG1vcmUnOiAnIGFuZCBtb3JlJyxcblx0XHR1bmRvOiAndW5kbycsXG5cdFx0dW5kb0hpbnQ6ICd1bmRvIHRoaXMgZWRpdCcsXG5cdFx0J0Rvd25sb2FkIHByZXZpZXcgZGF0YSc6ICdEb3dubG9hZCBwcmV2aWV3IGRhdGEnLFxuXHRcdCdJbnZhbGlkIG9yIElQIHVzZXInOiAnSW52YWxpZCBvciBJUCB1c2VyJyxcblx0XHQnTm90IGEgcmVnaXN0ZXJlZCB1c2VybmFtZSc6ICdOb3QgYSByZWdpc3RlcmVkIHVzZXJuYW1lJyxcblx0XHRCTE9DS0VEOiAnQkxPQ0tFRCcsXG5cdFx0J0hhcyBibG9ja3MnOiAnSGFzIGJsb2NrcycsXG5cdFx0JyBlZGl0cyBzaW5jZTogJzogJyBlZGl0cyBzaW5jZTogJyxcblx0XHQnbGFzdCBlZGl0IG9uICc6ICdsYXN0IGVkaXQgb24gJyxcblx0XHQnaGUvaGltJzogJ2hlL2hpbScsXG5cdFx0J3NoZS9oZXInOiAnc2hlL2hlcicsXG5cdFx0Ly8gQXV0b2VkaXRpbmdcblx0XHQnRW50ZXIgYSBub24tZW1wdHkgZWRpdCBzdW1tYXJ5IG9yIHByZXNzIGNhbmNlbCB0byBhYm9ydCc6XG5cdFx0XHQnRW50ZXIgYSBub24tZW1wdHkgZWRpdCBzdW1tYXJ5IG9yIHByZXNzIGNhbmNlbCB0byBhYm9ydCcsXG5cdFx0J0ZhaWxlZCB0byBnZXQgcmV2aXNpb24gaW5mb3JtYXRpb24sIHBsZWFzZSBlZGl0IG1hbnVhbGx5Llxcblxcbic6XG5cdFx0XHQnRmFpbGVkIHRvIGdldCByZXZpc2lvbiBpbmZvcm1hdGlvbiwgcGxlYXNlIGVkaXQgbWFudWFsbHkuXFxuXFxuJyxcblx0XHQnVGhlICVzIGJ1dHRvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGNsaWNrZWQuIFBsZWFzZSB3YWl0IGZvciB0aGUgbmV4dCBwYWdlIHRvIGxvYWQuJzpcblx0XHRcdCdUaGUgJXMgYnV0dG9uIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgY2xpY2tlZC4gUGxlYXNlIHdhaXQgZm9yIHRoZSBuZXh0IHBhZ2UgdG8gbG9hZC4nLFxuXHRcdCdDb3VsZCBub3QgZmluZCBidXR0b24gJXMuIFBsZWFzZSBjaGVjayB0aGUgc2V0dGluZ3MgaW4geW91ciBqYXZhc2NyaXB0IGZpbGUuJzpcblx0XHRcdCdDb3VsZCBub3QgZmluZCBidXR0b24gJXMuIFBsZWFzZSBjaGVjayB0aGUgc2V0dGluZ3MgaW4geW91ciBqYXZhc2NyaXB0IGZpbGUuJyxcblx0XHQvLyBQb3B1cHMgc2V0dXBcblx0XHQnT3BlbiBmdWxsLXNpemUgaW1hZ2UnOiAnT3BlbiBmdWxsLXNpemUgaW1hZ2UnLFxuXHRcdGF1dG9lZGl0X3ZlcnNpb246ICducDIwMTQwNDE2Jyxcblx0fTtcblx0Y29uc3QgcG9wdXBTdHJpbmcgPSAoc3RyKSA9PiB7XG5cdFx0aWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiBtZXNzYWdlICYmIG1lc3NhZ2Vbc3RyXSkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2Vbc3RyXTtcblx0XHR9XG5cdFx0aWYgKHBnLnN0cmluZ1tzdHJdKSB7XG5cdFx0XHRyZXR1cm4gcGcuc3RyaW5nW3N0cl07XG5cdFx0fVxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cdGNvbnN0IHRwcmludGYgPSAoc3RyLCBzdWJzKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBzdWJzICE9PSB0eXBlb2YgW10pIHtcblx0XHRcdHN1YnMgPSBbc3Vic107XG5cdFx0fVxuXHRcdHJldHVybiBzaW1wbGVQcmludGYocG9wdXBTdHJpbmcoc3RyKSwgc3Vicyk7XG5cdH07XG5cdC8vIEVOREZJTEU6IHN0cmluZ3MuanNcblx0Ly8gU1RBUlRGSUxFOiBydW4uanNcblx0Ly8gUnVuIHRoaW5nc1xuXHQvLyBGb3Igc29tZSByZWFzb24gcG9wdXBzIHJlcXVpcmVzIGEgZnVsbHkgbG9hZGVkIHBhZ2UgalF1ZXJ5LnJlYWR5KC4uLikgY2F1c2VzIHByb2JsZW1zIGZvciBzb21lLlxuXHQvLyBUaGUgb2xkIGFkZE9ubG9hZEhvb2sgZGlkIHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSBiZWxvd1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuXHRcdGF1dG9FZGl0KCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gd2lsbCBzZXR1cCBwb3B1cHNcblx0XHQkKHdpbmRvdykub24oJ2xvYWQnLCBhdXRvRWRpdCk7XG5cdH1cblx0Ly8gU3VwcG9ydCBmb3IgTWVkaWFXaWtpJ3MgbGl2ZSBwcmV2aWV3LCBWaXN1YWxFZGl0b3IncyBzYXZlcyBhbmQgRWNobydzIGZseW91dC5cblx0KCgpID0+IHtcblx0XHRsZXQgb25jZSA9IHRydWU7XG5cdFx0Y29uc3QgZHluYW1pY0NvbnRlbnRIYW5kbGVyID0gKCRjb250ZW50KSA9PiB7XG5cdFx0XHQvLyBUcnkgdG8gZGV0ZWN0IHRoZSBob29rIGZpcmVkIG9uIGluaXRpYWwgcGFnZSBsb2FkIGFuZCBkaXNyZWdhcmRcblx0XHRcdC8vIGl0LCB3ZSBhbHJlYWR5IGhvb2sgdG8gb25sb2FkIChwb3NzaWJseSB0byBkaWZmZXJlbnQgcGFydHMgb2Zcblx0XHRcdC8vIHBhZ2UgLSBpdCdzIGNvbmZpZ3VyYWJsZSkgYW5kIHJ1bm5pbmcgdHdpY2UgbWlnaHQgYmUgYmFkLiBVZ2x5Li4uXG5cdFx0XHRpZiAoJGNvbnRlbnQuYXR0cignaWQnKSA9PT0gJ213LWNvbnRlbnQtdGV4dCcgJiYgb25jZSkge1xuXHRcdFx0XHRvbmNlID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJlZ2lzdGVySG9va3NGb3JWaXNpYmxlTmF2cG9wcyA9ICgpID0+IHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IHBnLmN1cnJlbnQubGlua3MgJiYgaSA8IHBnLmN1cnJlbnQubGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBuYXZwb3AgPSBwZy5jdXJyZW50LmxpbmtzW2ldLm5hdnBvcHVwO1xuXHRcdFx0XHRcdGlmICghbmF2cG9wIHx8ICFuYXZwb3AuaXNWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHROYXZwb3B1cC50cmFja2VyLmFkZEhvb2socG9zQ2hlY2tlckhvb2sobmF2cG9wKSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBkb0l0ID0gKCkgPT4ge1xuXHRcdFx0XHRyZWdpc3Rlckhvb2tzRm9yVmlzaWJsZU5hdnBvcHMoKTtcblx0XHRcdFx0JGNvbnRlbnQuZWFjaCgoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yYW5TZXR1cFRvb2x0aXBzQWxyZWFkeSA9IGZhbHNlO1xuXHRcdFx0XHRcdHNldHVwVG9vbHRpcHMoZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHRcdHNldHVwUG9wdXBzKGRvSXQpO1xuXHRcdH07XG5cdFx0Ly8gVGhpcyBob29rIGlzIGFsc28gZmlyZWQgYWZ0ZXIgcGFnZSBsb2FkLlxuXHRcdG13Lmhvb2soJ3dpa2lwYWdlLmNvbnRlbnQnKS5hZGQoZHluYW1pY0NvbnRlbnRIYW5kbGVyKTtcblx0XHRtdy5ob29rKCdleHQuZWNoby5vdmVybGF5LmJlZm9yZVNob3dpbmdPdmVybGF5JykuYWRkKCgkb3ZlcmxheSkgPT4ge1xuXHRcdFx0ZHluYW1pY0NvbnRlbnRIYW5kbGVyKCRvdmVybGF5LmZpbmQoJy5tdy1lY2hvLXN0YXRlJykpO1xuXHRcdH0pO1xuXHR9KSgpO1xuXHQvLyBFTkRGSUxFOiBydW4uanNcbn07XG5cbmV4cG9ydCB7cG9wdXBzfTtcbiIsICJpbXBvcnQgJy4vTmF2aWdhdGlvbl9wb3B1cHMubGVzcyc7XG5pbXBvcnQge3BvcHVwc30gZnJvbSAnLi9tb2R1bGVzL2NvcmUnO1xuXG4kKHBvcHVwcyk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw2RkFBQUEsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1B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dUMsRUFBRStSLElBQUtDLGNBQWE7QUFDbEVQLDRCQUFzQk8sU0FBUzd1QixLQUFLLGdCQUFnQixDQUFDO0lBQ3RELENBQUM7RUFDRixHQUFHO0FBRUo7O0FDaCtQQUQsRUFBRXZxQixNQUFNOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJuYXZpZ2F0b3IiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiUmVnRXhwIiwgImtleSIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJyZXF1aXJlIiwgImFwaSIsICJpbml0TXdBcGkiLCAibWVzc2FnZSIsICJhcnRpY2xlIiwgIndpbmRvdyIsICJ3Z1VMUyIsICJjYXRlZ29yeSIsICJjYXRlZ29yaWVzIiwgImltYWdlIiwgImltYWdlcyIsICJzdHViIiwgImtCIiwgImJ5dGVzIiwgImRheSIsICJkYXlzIiwgImhvdXIiLCAiaG91cnMiLCAibWludXRlIiwgIm1pbnV0ZXMiLCAic2Vjb25kIiwgInNlY29uZHMiLCAid2VlayIsICJ3ZWVrcyIsICJtb250aCIsICJtb250aHMiLCAieWVhciIsICJ5ZWFycyIsICJzZWFyY2giLCAiU2VhcmNoSGludCIsICJ3ZWIiLCAiZ2xvYmFsIiwgImFjdGlvbnMiLCAicG9wdXBzTWVudSIsICJ0b2dnbGVQcmV2aWV3c0hpbnQiLCAicmVzZXQiLCAiZGlzYWJsZSIsICJkaXNhYmxlUG9wdXBzSGludCIsICJwdXJnZVBvcHVwc0hpbnQiLCAiUG9wdXBzSGludCIsICJzcGFjZWJhciIsICJ2aWV3IiwgInZpZXdIaW50IiwgInRhbGsiLCAiZGVsIiwgImRlbGV0ZSIsICJkZWxldGVIaW50IiwgInVuZGVsZXRlU2hvcnQiLCAiVW5kZWxldGVIaW50IiwgInByb3RlY3QiLCAicHJvdGVjdEhpbnQiLCAidW5wcm90ZWN0U2hvcnQiLCAidW5wcm90ZWN0SGludCIsICJtb3ZlIiwgIk1vdmVwYWdlSGludCIsICJlZGl0IiwgImVkaXRIaW50IiwgIm5ldyIsICJuZXdTZWN0aW9uSGludCIsICJudWxsRWRpdEhpbnQiLCAiaGlzdCIsICJoaXN0b3J5IiwgImhpc3RvcnlIaW50IiwgImxhc3QiLCAibGFzdEVkaXQiLCAibGFzdENvbnRyaWIiLCAibGFzdENvbnRyaWJIaW50IiwgImN1ciIsICJkaWZmQ3VyIiwgIm9sZEVkaXQiLCAicHVyZ2UiLCAicHVyZ2VIaW50IiwgInJhdyIsICJyYXdIaW50IiwgInJlbmRlciIsICJyZW5kZXJIaW50IiwgInNpbmNlTWUiLCAic2luY2VNZUhpbnQiLCAiZWRzIiwgImVkaXRvcnMiLCAiZWRpdG9yTGlzdEhpbnQiLCAicmVsYXRlZCIsICJyZWxhdGVkQ2hhbmdlcyIsICJSZWNlbnRjaGFuZ2VzbGlua2VkSGludCIsICJlZGl0T2xkIiwgInJ2IiwgInJldmVydCIsICJyZXZlcnRIaW50IiwgInVuZG8iLCAidW5kb0hpbnQiLCAiZGVmYXVsdHBvcHVwUmVkbGlua1N1bW1hcnkiLCAiZGVmYXVsdHBvcHVwRml4RGFic1N1bW1hcnkiLCAiZGVmYXVsdHBvcHVwRml4UmVkaXJzU3VtbWFyeSIsICJkZWZhdWx0cG9wdXBFeHRlbmRlZFJldmVydFN1bW1hcnkiLCAiZGVmYXVsdHBvcHVwUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnkiLCAiZGVmYXVsdHBvcHVwUmV2ZXJ0U3VtbWFyeSIsICJkZWZhdWx0cG9wdXBRdWVyaWVkUmV2ZXJ0VG9QcmV2aW91c1N1bW1hcnkiLCAiZGVmYXVsdHBvcHVwUXVlcmllZFJldmVydFN1bW1hcnkiLCAiZGVmYXVsdHBvcHVwUm1EYWJMaW5rU3VtbWFyeSIsICJSZWRpcmVjdHMiLCAiZGlzYW1iaWciLCAiZGlzYW1iaWdIaW50IiwgIm1haW5saW5rIiwgIndpa2lMaW5rIiwgIndpa2lMaW5rcyIsICJ3aGF0TGlua3NIZXJlIiwgIldoYXRsaW5rc2hlcmVIaW50IiwgInVud2F0Y2hTaG9ydCIsICJ3YXRjaFRoaW5neSIsICJ3YXRjaEhpbnQiLCAidW53YXRjaEhpbnQiLCAicnNzIiwgInVzZXIiLCAiZW1haWwiLCAiRW1haWx1c2VySGludCIsICJzcGFjZSIsICJQcmVmaXhpbmRleEhpbnQiLCAiY291bnQiLCAia2F0ZWxpbmtIaW50IiwgImNvbnRyaWJzIiwgImNvbnRyaWJ1dGlvbnMiLCAiZGVsZXRlZENvbnRyaWJzIiwgIkNvbnRyaWJ1dGlvbnNIaW50IiwgInRyZWUiLCAiY29udHJpYnNUcmVlSGludCIsICJsb2ciLCAidXNlckxvZ0hpbnQiLCAidW5ibG9ja1Nob3J0IiwgImJsb2NrIiwgIklwYmxvY2tsaXN0SGludCIsICJCbG9ja2lwSGludCIsICJibG9ja0xvZ0hpbnQiLCAicHJvdGVjdExvZ0hpbnQiLCAicGFnZUxvZ0hpbnQiLCAiZGVsZXRlTG9nSGludCIsICJtIiwgImJpbmdTZWFyY2hIaW50IiwgImhpc3RvcnlmZWVkSGludCIsICJUaGFua3NIaW50IiwgIm1hcmtwYXRyb2xsZWRIaW50IiwgImRlZmF1bHRwb3B1cFJldmlld2VkU3VtbWFyeSIsICJyZXZkZWwiLCAiRGVsZXRlZGNvbnRyaWJ1dGlvbnNIaW50IiwgIkJMT0NLRUQiLCAiRW1haWxVc2VySGludCIsICJSQU5HRUJMT0NLRUQiLCAiSElEREVOIiwgIkxPQ0tFRCIsICJkaWZmIiwgImF1dG9lZGl0X3ZlcnNpb24iLCAiUHJlZml4SW5kZXhIaW50IiwgIm51bGxFZGl0U3VtbWFyeSIsICJzZXBhcmF0b3IiLCAiY29tbWEiLCAicG9wdXBzIiwgInBnIiwgInJlIiwgIm5zIiwgInN0cmluZyIsICJ3aWtpIiwgIm1pc2MiLCAib3B0aW9uIiwgIm9wdGlvbkRlZmF1bHQiLCAiZmxhZyIsICJjYWNoZSIsICJzdHJ1Y3R1cmVzIiwgInRpbWVyIiwgImNvdW50ZXIiLCAiY3VycmVudCIsICJmbiIsICJlbmRvZmxpc3QiLCAiSFRNTEVsZW1lbnQiLCAic2V0dXBUb29sdGlwcyIsICJjb250YWluZXIiLCAicmVtb3ZlIiwgImZvcmNlIiwgInBvcERhdGEiLCAiY29uY2F0IiwgImdldFZhbHVlT2YiLCAiZG9jdW1lbnQiLCAiZWRpdGZvcm0iLCAid3BUZXh0Ym94MSIsICJvbm1vdXNldXAiLCAiZG9TZWxlY3Rpb25Qb3B1cCIsICJkZWZhdWx0UG9wdXBzQ29udGFpbmVyIiwgInJhblNldHVwVG9vbHRpcHNBbHJlYWR5IiwgImFuY2hvcnMiLCAicXVlcnlTZWxlY3RvckFsbCIsICJzZXR1cFRvb2x0aXBzTG9vcCIsICJxdWVyeVNlbGVjdG9yIiwgInNldHVwVG9vbHRpcHNMb29wMiIsICJiZWdpbiIsICJob3dtYW55IiwgInNsZWVwIiwgImFyZ3MiLCAic2ltcGxlUHJpbnRmIiwgImZpbmlzaCIsICJsb29wZW5kIiwgIk1hdGgiLCAibWluIiwgImxlbmd0aCIsICJqIiwgImRvVG9vbHRpcCIsICJyZW1vdmVUb29sdGlwIiwgImFkZFRvb2x0aXAiLCAiYSIsICJocmVmIiwgInNldFRpbWVvdXQiLCAicm1Ub2NUb29sdGlwcyIsICJmaW5pc2hlZExvYWRpbmciLCAidG9jIiwgInRvY0xpbmtzIiwgInRvY0xlbiIsICJpc1BvcHVwTGluayIsICJvbm1vdXNlb3ZlciIsICJtb3VzZU92ZXJXaWtpTGluayIsICJvbm1vdXNlb3V0IiwgIm1vdXNlT3V0V2lraUxpbmsiLCAib25tb3VzZWRvd24iLCAia2lsbFBvcHVwIiwgImhhc1BvcHVwIiwgIm9yaWdpbmFsVGl0bGUiLCAidGl0bGUiLCAicmVtb3ZlVGl0bGUiLCAicmVzdG9yZVRpdGxlIiwgInJlZ2lzdGVySG9va3MiLCAibnAiLCAicG9wdXBNYXhXaWR0aCIsICJzZXRNYXhXaWR0aCIsICJtYWluRGl2IiwgInN0eWxlIiwgIm1heFdpZHRoIiwgImFkZEhvb2siLCAiYWRkUG9wdXBTaG9ydGN1dHMiLCAicm1Qb3B1cFNob3J0Y3V0cyIsICJyZW1vdmVNb2RpZmllcktleUxpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAibW9kaWZpZXJLZXlMaXN0ZW5lciIsICJtb3VzZU92ZXJXaWtpTGluazMiLCAiZXZ0IiwgImV2ZW50IiwgImFjdGlvbiIsICJrZXkiLCAic2VsZiIsICJldnQyIiwgIm1vdXNlT3Zlcldpa2lMaW5rMiIsICJhZGRFdmVudExpc3RlbmVyIiwgImZvb3Rub3RlVGFyZ2V0IiwgImFUaXRsZSIsICJUaXRsZSIsICJmcm9tQW5jaG9yIiwgImFuY2giLCAiYW5jaG9yIiwgInRlc3QiLCAibFRpdGxlIiwgImZyb21VUkwiLCAibG9jYXRpb24iLCAidG9TdHJpbmciLCAiZWwiLCAibm9kZU5hbWUiLCAibnQiLCAidG9Mb3dlckNhc2UiLCAicGFyZW50Tm9kZSIsICJmb290bm90ZVByZXZpZXciLCAieCIsICJuYXZwb3AiLCAic2V0UG9wdXBIVE1MIiwgImlubmVySFRNTCIsICJpZE51bWJlciIsICJtb2RpZmllclByZXNzZWQiLCAibW9kIiwgImlzQ29ycmVjdE1vZGlmaWVyIiwgIl9hIiwgImxpbmsiLCAibmF2cG9wdXAiLCAiaXNWaXNpYmxlIiwgInBvcHVwU3RydWN0dXJlIiwgInNldERlZmF1bHQiLCAibmV3TmF2cG9wdXAiLCAibGlua3NIYXNoIiwgImxpbmtzIiwgInB1c2giLCAicGVuZGluZyIsICJzaW1wbGVQb3B1cENvbnRlbnQiLCAic2hvd1Nvb25JZlN0YWJsZSIsICJkZWxheSIsICJjbGVhckludGVydmFsIiwgImNoZWNrUG9wdXBQb3NpdGlvbiIsICJzZXRJbnRlcnZhbCIsICJzaW1wbGVOb01vcmUiLCAiZCIsICJjcmVhdGVFbGVtZW50IiwgImNsYXNzTmFtZSIsICJzIiwgImFwcGVuZCIsICJkaXNwbGF5IiwgIm5vbnNpbXBsZVBvcHVwQ29udGVudCIsICJwb3B1cFN0cmluZyIsICJoYXNQb3B1cE1lbnUiLCAic2V0SW5uZXJIVE1MIiwgInBvcHVwSFRNTCIsICJmaWxsRW1wdHlTcGFucyIsICJkcmFnSGFuZGxlIiwgIm1ha2VEcmFnZ2FibGUiLCAicG9wdXBSZWRsaW5rSFRNTCIsICJkZWJ1Z0RhdGEiLCAiTmF2cG9wdXAiLCAiZnV6eiIsICJwYXJlbnRBbmNob3IiLCAicGFyZW50UG9wdXAiLCAib3duZXIiLCAic2hvdWxkU2hvd05vblNpbXBsZSIsICJzaG91bGRTaG93IiwgImRpZmYyIiwgInBhcmFtcyIsICJwYXJzZVBhcmFtcyIsICJvbGRpZCIsICJyZWZlcmVuY2VFbGVtZW50IiwgImxvYWREaWZmIiwgImxvYWRBUElQcmV2aWV3IiwgImJhY2tsaW5rcyIsICJuYW1lc3BhY2VJZCIsICJuc0ltYWdlSWQiLCAiYW5jaG9yQ29udGFpbnNJbWFnZSIsICJsb2FkSW1hZ2UiLCAibnNDYXRlZ29yeUlkIiwgIm5zVXNlcklkIiwgIm5zVXNlcnRhbGtJZCIsICJzdGFydEFydGljbGVQcmV2aWV3IiwgInBlbmRpbmdOYXZwb3BUYXNrIiwgImNvbXBsZXRlZE5hdnBvcFRhc2siLCAicmVkaXIiLCAibG9hZFByZXZpZXciLCAib3JpZ2luYWxBcnRpY2xlIiwgImxvYWRQcmV2aWV3RnJvbVJlZGlyIiwgInJlZGlyTWF0Y2giLCAidGFyZ2V0IiwgImZyb21XaWtpVGV4dCIsICJyZWRpclRhcmdldCIsICJ3YXJuUmVkaXIiLCAicmVkaXJMaW5rIiwgImluc2VydFByZXZpZXciLCAiZG93bmxvYWQiLCAicmVkaXJlY3QiLCAiZXhlYyIsICJkYXRhIiwgInZpc2libGUiLCAiaW5zZXJ0UHJldmlld05vdyIsICJpZCIsICJ3aWtpVGV4dCIsICJhcnQiLCAibWFrZUZpeERhYnMiLCAiZ2V0UGFnZUluZm8iLCAic2V0UG9wdXBUcmFpbGVyIiwgImltYWdlUGFnZSIsICJnZXRWYWxpZEltYWdlRnJvbVdpa2lUZXh0IiwgImluc2VydEFydGljbGVQcmV2aWV3IiwgIm5zVGVtcGxhdGVJZCIsICJoIiwgImVudGlmeSIsICJzcGxpdCIsICJTdHJpbmciLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiam9pbiIsICJfdGVtcGxhdGVPYmplY3QyIiwgInAiLCAicHJlcFByZXZpZXdtYWtlciIsICJzaG93UHJldmlldyIsICJhbmNob3JpemUiLCAiYW5jaG9yU3RyaW5nIiwgInVybEJhc2UiLCAiam9pblBhdGgiLCAiYXJ0aWNsZWJhc2UiLCAidXJsU3RyaW5nIiwgIlByZXZpZXdtYWtlciIsICJhbmNoUmUiLCAiUmVnRXhwIiwgImxpdGVyYWxpemVSZWdleCIsICJyZXBsYWNlIiwgIm1hdGNoIiwgInNsaWNlIiwgIm1heCIsICJpbmRleE9mIiwgImxpbmVzIiwgImkiLCAia2lsbFBvcHVwMiIsICJiYW5pc2giLCAiYWJvcnRBbGxEb3dubG9hZHMiLCAiRHJhZyIsICJjb25zdHJ1Y3RvciIsICJzdGFydENvbmRpdGlvbiIsICJlbmRIb29rIiwgImZpeEUiLCAiZSIsICJsYXllclgiLCAib2Zmc2V0WCIsICJsYXllclkiLCAib2Zmc2V0WSIsICJpbml0IiwgIm8iLCAib1Jvb3QiLCAib2JqIiwgInN0YXJ0IiwgImRyYWdnaW5nIiwgInBvcHVwc19kcmFnZ2FibGUiLCAiaG1vZGUiLCAidm1vZGUiLCAicm9vdCIsICJOdW1iZXIiLCAiaXNOYU4iLCAicGFyc2VJbnQiLCAibGVmdCIsICJ0b3AiLCAib250aGlzU3RhcnQiLCAib250aGlzRW5kIiwgIm9udGhpcyIsICJ5IiwgImJvdHRvbSIsICJyaWdodCIsICJsYXN0TW91c2VYIiwgImNsaWVudFgiLCAibGFzdE1vdXNlWSIsICJjbGllbnRZIiwgIm9ubW91c2Vtb3ZlRGVmYXVsdCIsICJvbm1vdXNlbW92ZSIsICJlMiIsICJkcmFnIiwgImVuZCIsICJleSIsICJleCIsICJueCIsICJueSIsICJvcmlnaW5hbCIsICJwb3B1cExheW91dCIsICJwb3B1cFJlZGlyU3BhbnMiLCAicG9wdXBUaXRsZSIsICJuYXZsaW5rU3RyaW5nVG9IVE1MIiwgInBvcHVwVG9wTGlua3MiLCAibmF2TGlua3NIVE1MIiwgImhpbnQiLCAicG9wdXBJbWFnZSIsICJpbWFnZUhUTUwiLCAicG9wdXBSZWRpclRpdGxlIiwgInBvcHVwUmVkaXJUb3BMaW5rcyIsICJjb3B5U3RydWN0dXJlIiwgIm9sZFN0cnVjdHVyZSIsICJuZXdTdHJ1Y3R1cmUiLCAicHJvcCIsICJPYmplY3QiLCAiaGFzT3duIiwgIm5vc3RhbGdpYSIsICJzdHIiLCAiZWRpdHN0ciIsICJlZGl0T2xkaWRTdHIiLCAiaGlzdG9yeXN0ciIsICJ3YXRjaHN0ciIsICJmYW5jeSIsICJ3YXRjaCIsICJwb3B1cE90aGVyTGlua3MiLCAiYWRtaW4iLCAibm9ybWFsIiwgInBvcHVwUmVkaXJPdGhlckxpbmtzIiwgImZhbmN5MiIsICJtZW51cyIsICJzaG9ydGVyIiwgImRyb3BkaXYiLCAiZW5kZGl2IiwgImxhc3RlZGl0IiwgInRoYW5rIiwgImpzSGlzdG9yeSIsICJsaW5rc2hlcmUiLCAibnVsbFB1cmdlIiwgInZpZXdPcHRpb25zIiwgImVkaXRSb3ciLCAibWFya1BhdHJvbGxlZCIsICJuZXdUb3BpYyIsICJwcm90ZWN0RGVsZXRlIiwgIm1lbnVUaXRsZSIsICJzaG9ydG1lbnVzIiwgImxpdGUiLCAic3Vic3RpdHV0ZSIsICJjbWRCb2R5IiwgImZyb21SZSIsICJmcm9tIiwgImZsYWdzIiwgInRvIiwgImV4ZWNDbWRzIiwgImNtZExpc3QiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwIiwgIm4iLCAiZG9uZSIsICJlbGVtZW50IiwgInZhbHVlIiwgImVyciIsICJmIiwgInBhcnNlQ21kIiwgInBhcnNlQ21kMiIsICJjaGFyQXQiLCAicGFyc2VTdWJzdGl0dXRlIiwgInJlbWFpbmRlciIsICJ1bkVzY2FwZSIsICJzZXAiLCAiX3RlbXBsYXRlT2JqZWN0MyIsICJ0bXAiLCAic2tpcE92ZXIiLCAic2VnbWVudCIsICJza2lwVG9FbmQiLCAiZW5kU2VnbWVudCIsICJmaW5kTmV4dCIsICJfc2VwIiwgImNoIiwgInNldENoZWNrYm94IiwgInBhcmFtIiwgImJveCIsICJ2YWwiLCAibXciLCAidXRpbCIsICJnZXRQYXJhbVZhbHVlIiwgImNoZWNrZWQiLCAiYXV0b0VkaXQiLCAiYXV0b0VkaXQ0IiwgInNldHVwUG9wdXBzIiwgImF1dG9DbGlja1Rva2VuIiwgIm1vZGlmeVdhdGNobGlzdCIsICJhbHJlYWR5UmFuIiwgImNtZFN0cmluZyIsICJlZGl0Ym94IiwgImlucHV0IiwgIm91dHB1dCIsICJ3cE1pbm9yZWRpdCIsICJ3cFdhdGNodGhpcyIsICJydmlkIiwgInVybCIsICJhcGl3aWtpYmFzZSIsICJzdGFydERvd25sb2FkIiwgImF1dG9FZGl0MiIsICJzdW1tYXJ5IiwgInN1bW1hcnlwcm9tcHQiLCAic3VtbWFyeW5vdGljZSIsICJnZXRSdlN1bW1hcnkiLCAidHh0IiwgInJlc3BvbnNlIiwgInByb21wdCIsICJ3cFN1bW1hcnkiLCAiYXV0b0VkaXQzIiwgInNlc3Npb25JZCIsICJidG4iLCAiYnV0dG9uIiwgIm1zZyIsICJ0cHJpbnRmIiwgImJhbm5lck1lc3NhZ2UiLCAiY2xpY2siLCAibm90aWZ5IiwgInRhZyIsICJ0eXBlIiwgImhlYWRpbmdzIiwgImRpdiIsICJlc2NhcGVRdW90ZXNIVE1MIiwgImluc2VydEJlZm9yZSIsICJ0ZW1wbGF0ZSIsICJqc29uIiwgImdldEpzT2JqIiwgImFueUNoaWxkIiwgInF1ZXJ5IiwgInBhZ2VzIiwgInJldmlzaW9ucyIsICJ0aW1lc3RhbXAiLCAicmV2aWQiLCAidXNlcmhpZGRlbiIsICJEb3dubG9hZGVyIiwgIlhNTEh0dHBSZXF1ZXN0IiwgImh0dHAiLCAibGFzdE1vZGlmaWVkIiwgImNhbGxiYWNrRnVuY3Rpb24iLCAib25GYWlsdXJlIiwgImFib3J0ZWQiLCAibWV0aG9kIiwgImFzeW5jIiwgInNlbmQiLCAiYWJvcnQiLCAiZ2V0RGF0YSIsICJyZXNwb25zZVRleHQiLCAic2V0VGFyZ2V0IiwgIm9wZW4iLCAic2V0UmVxdWVzdEhlYWRlciIsICJ1c2VyQWdlbnQiLCAiZ2V0UmVhZHlTdGF0ZSIsICJyZWFkeVN0YXRlIiwgImRvd25sb2Fkc0luUHJvZ3Jlc3MiLCAiZ2V0TGFzdE1vZGlmaWVkRGF0ZSIsICJsYXN0bW9kIiwgImdldFJlc3BvbnNlSGVhZGVyIiwgIkRhdGUiLCAic2V0Q2FsbGJhY2siLCAib25yZWFkeXN0YXRlY2hhbmdlIiwgImdldFN0YXR1cyIsICJzdGF0dXMiLCAibmV3RG93bmxvYWQiLCAibmV3RG93bmxvYWQyIiwgImNhbGxiYWNrIiwgIm9uZmFpbHVyZSIsICJmYWtlRG93bmxvYWQiLCAiSW5zdGEiLCAic2V0dXBMaXZlUHJldmlldyIsICJfYiIsICJjb25mIiwgImJhc2VVcmwiLCAibGFuZyIsICJpbnRlcndpa2kiLCAiZGVmYXVsdF90aHVtYl93aWR0aCIsICJwYXRocyIsICJhcnRpY2xlcyIsICJhcnRpY2xlUGF0aCIsICJtYXRoIiwgImltYWdlc19mYWxsYmFjayIsICJsb2NhbGUiLCAiY29uZmlnIiwgImdldCIsICJuYW1lIiwgInNpZ25hdHVyZSIsICJCTE9DS19JTUFHRSIsICJkdW1wIiwgImNvbnZlcnQiLCAibGwiLCAiciIsICJyZW1haW4iLCAic2giLCAic2hpZnQiLCAicHMiLCAiZjIiLCAiZjMiLCAibzIiLCAiYyIsICJwMiIsICJodG1sX2VudGl0aWVzIiwgImh0bWxlc2NhcGVfdGV4dCIsICJodG1sZXNjYXBlX2F0dHIiLCAic3RyX2ltYXRjaCIsICJiIiwgImwiLCAiY29tcGFyZUxpbmVTdHJpbmdPclJlZyIsICJjb21wYXJlTGluZVN0cmluZyIsICJjaGFyQXRQb2ludCIsICJlbmRsIiwgInBhcnNlX2xpc3QiLCAicHJldiIsICJsX21hdGNoIiwgImlwb3MiLCAicHJldlBvcyIsICJwaSIsICJtYXRjaFBvcyIsICJsaSIsICJhdCIsICJwYXJzZV9pbmxpbmVfbm93aWtpIiwgImR0X21hdGNoIiwgInVuc2hpZnQiLCAicGFyc2VfdGFibGUiLCAicGFyc2VfdGFibGVfZGF0YSIsICJ0ZF9saW5lIiwgIm1hdGNoX2kiLCAidGRfbWF0Y2giLCAicG9wIiwgInRjIiwgInRkIiwgInBhcnNlX3ByZSIsICJwYXJzZV9ibG9ja19pbWFnZSIsICJwYXJzZV9pbWFnZSIsICJzdWJzdHJpbmciLCAid2lkdGgiLCAiYXR0ciIsICJmaWxlbmFtZSIsICJjYXB0aW9uIiwgInRodW1iIiwgImZyYW1lIiwgImNlbnRlciIsICJhbGlnbiIsICJuZXN0aW5nIiwgImxhc3RfYXR0ciIsICJ3X21hdGNoIiwgImxhc3RlbmQiLCAic3Vic3RhcnQiLCAibmVzdGxldiIsICJjbG9zZSIsICJzdWJsb29wIiwgImh0bWwiLCAicGFyc2VfaW5saW5lX3dpa2kiLCAicGFyc2VfaW5saW5lX2ltYWdlcyIsICJsb29wIiwgIndpa2kyIiwgInBhcnNlX2lubGluZV9mb3JtYXR0aW5nIiwgImVtIiwgInN0IiwgImRhdGUiLCAiZ2V0VVRDTWludXRlcyIsICJnZXRVVENIb3VycyIsICJnZXRVVENEYXRlIiwgImdldFVUQ01vbnRoIiwgImdldFVUQ0Z1bGxZZWFyIiwgIl8kMCIsICIkMSIsICIkMiIsICIkMyIsICIkNCIsICJ3aWtpMmh0bWwiLCAiYmFzZXVybCIsICJwb3B1cEZpbHRlclBhZ2VTaXplIiwgImZvcm1hdEJ5dGVzIiwgInBvcHVwRmlsdGVyQ291bnRMaW5rcyIsICJudW0iLCAiY291bnRMaW5rcyIsICJwb3B1cEZpbHRlckNvdW50SW1hZ2VzIiwgImNvdW50SW1hZ2VzIiwgInBvcHVwRmlsdGVyQ291bnRDYXRlZ29yaWVzIiwgImNvdW50Q2F0ZWdvcmllcyIsICJwb3B1cEZpbHRlckxhc3RNb2RpZmllZCIsICJfZGF0YSIsICJub3ciLCAiYWdlIiwgImZvcm1hdEFnZSIsICJhYSIsICJzZWNsZW4iLCAibWlubGVuIiwgImhvdXJsZW4iLCAiZGF5bGVuIiwgIndlZWtsZW4iLCAibnVtd2Vla3MiLCAic3dlZWtzIiwgImFkZHVuaXQiLCAibnVtZGF5cyIsICJzZGF5cyIsICJudW1ob3VycyIsICJzaG91cnMiLCAibnVtbWlucyIsICJzbWlucyIsICJudW1zZWNzIiwgInNzZWNzIiwgInJ1blBvcHVwRmlsdGVycyIsICJsaXN0IiwgInJldCIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJwb3B1cEZpbHRlcnMiLCAiZXh0cmFQb3B1cEZpbHRlcnMiLCAicGFnZUluZm9BcnJheSIsICJwYWdlSW5mbyIsICJ1cGNhc2VGaXJzdCIsICJpbWFnZUJyYWNrZXRDb3VudCIsICJjYXRlZ29yeUJyYWNrZXRDb3VudCIsICJwb3B1cEZpbHRlclN0dWJEZXRlY3QiLCAiX2Rvd25sb2FkIiwgImNvdW50cyIsICJzdHViQ291bnQiLCAicmVhbCIsICJzZWN0IiwgInBvcHVwRmlsdGVyRGlzYW1iaWdEZXRlY3QiLCAibmFtZXNwYWNlIiwgImlzRGlzYW1iaWciLCAicm91bmQiLCAiU3RyaW5nd3JhcHBlciIsICJTdHJpbmd3cmFwcGVyMiIsICJzZXRVdGYiLCAib21pdEFuY2hvciIsICJsZW4iLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwgInVybEFuY2hvciIsICJhbmNob3JGcm9tVXRmIiwgImVuY29kZVVSSUNvbXBvbmVudCIsICJzcGxpdHRlZCIsICJ1IiwgImRlY29kZU5hc3RpZXMiLCAic3RyaXBOYW1lc3BhY2UiLCAic3BlY2lhbGRpZmYiLCAibnNTcGVjaWFsSWQiLCAibWFpbiIsICJmcm9tQm90SW50ZXJmYWNlIiwgImV4dHJhY3RlZCIsICJpc1NhZmFyaSIsICJ1bmVzY2FwZSIsICJkZWNvZGVVUkkiLCAiZGVjb2RlRXNjYXBlcyIsICJteURlY29kZVVSSSIsICJoaW50VmFsdWUiLCAic2FmZURlY29kZVVSSSIsICJ0b1VzZXJOYW1lIiwgIndpdGhOcyIsICJ1c2VyTmFtZSIsICJ0IiwgInRvVGFsa1BhZ2UiLCAibG9jYWxpemVkTmFtZXNwYWNlIiwgInRhbGtQYWdlIiwgImlzVGFsa1BhZ2UiLCAidG9BcnRpY2xlRnJvbVRhbGtQYWdlIiwgImFydGljbGVGcm9tVGFsa1BhZ2UiLCAiYXJ0aWNsZUZyb21UYWxrT3JBcnRpY2xlIiwgImlzSXBVc2VyIiwgImlwVXNlciIsICJuc01haW5zcGFjZUlkIiwgInNldFVybCIsICJ1cmxmcmFnIiwgInYiLCAia2VlcFNwYWNlcyIsICJlbmNvZGVVUkkiLCAicmVtb3ZlQW5jaG9yIiwgInRvVXJsIiwgInRpdGxlYmFzZSIsICJzcGVjaWFsRGlmZiIsICJpbmNsdWRlcyIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJ6IiwgImhlbHBlciIsICJkZWNvZGVFeHRyYXMiLCAic2VjdFN0dWIiLCAicmVhbFN0dWIiLCAiaXNWYWxpZEltYWdlTmFtZSIsICJpc0luU3RyaXBwYWJsZU5hbWVzcGFjZSIsICJpc0luTWFpbk5hbWVzcGFjZSIsICJraWRzIiwgImNoaWxkTm9kZXMiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAia2lkIiwgIm1hcmtOb3BvcHVwU3BhbkxpbmtzIiwgImluTm9wb3B1cFNwYW4iLCAiZ2V0QXR0cmlidXRlIiwgImJhc2VuYW1lcyIsICJ1cmxOb1BvcHVwIiwgIm1hcmtOb3BvcHVwU3BhbkxpbmtzMiIsICJmaXhWZWN0b3JNZW51UG9wdXBzIiwgIiRib2R5IiwgIiQiLCAiZmluZCIsICJ0b0FycmF5IiwgIl9pdGVyYXRvcjUiLCAiX3N0ZXA1IiwgImFzIiwgIl9pdGVyYXRvcjYiLCAiX3N0ZXA2IiwgImdldFBhZ2VXaXRoQ2FjaGluZyIsICJvbkNvbXBsZXRlIiwgImZpbmRJblBhZ2VDYWNoZSIsICJnZXRQYWdlIiwgImFkZERvd25sb2FkIiwgImFkZFBhZ2VUb0NhY2hlIiwgInBhZ2UiLCAianNvbl9yZXQiLCAiSlNPTiIsICJwYXJzZSIsICJ3YXJuaW5ncyIsICJ3IiwgImVycm9yIiwgImVycmxvZyIsICJjb2RlIiwgImluZm8iLCAidG9VcHBlckNhc2UiLCAiZmluZEluQXJyYXkiLCAiYXJyIiwgImZvbyIsICJuZXh0T25lIiwgImFycmF5IiwgImVzY2FwZVJlZ0V4cCIsICJwcm90b3R5cGUiLCAicmVtb3ZlTnVsbHMiLCAiZmlsdGVyIiwgInN1YnMiLCAiY21kIiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImlzUmVnRXhwIiwgImlzQXJyYXkiLCAiQXJyYXkiLCAiaXNPYmplY3QiLCAiaXNGdW5jdGlvbiIsICJGdW5jdGlvbiIsICJyZXBlYXRTdHJpbmciLCAibXVsdCIsICJ6ZXJvRmlsbCIsICJtYXAiLCAibWFwX2FycmF5IiwgIm1hcF9vYmplY3QiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAidGV4dCIsICJ1bmVzY2FwZVF1b3Rlc0hUTUwiLCAicmV0YXJnZXREYWIiLCAibmV3VGFyZ2V0IiwgIm9sZFRhcmdldCIsICJmcmllbmRseUN1cnJlbnRBcnRpY2xlTmFtZSIsICJ0aXRsZVRvRWRpdCIsICJjaGFuZ2VMaW5rVGFyZ2V0TGluayIsICJjbGlja0J1dHRvbiIsICJtaW5vciIsICJsaXN0TGlua3MiLCAid2lraXRleHQiLCAicmVnIiwgIm9taXRSZWdleCIsICJ3aWtQb3MiLCAicm1EdXBlc0Zyb21Tb3J0ZWRMaXN0IiwgInNvcnQiLCAid2lrVGFyZ2V0IiwgIm1ldGgiLCAiX2l0ZXJhdG9yOCIsICJfc3RlcDgiLCAibWFrZUZpeERhYiIsICJzZXRQb3B1cEhUTUwyIiwgImVsZW1lbnRJZCIsICJwb3B1cElkIiwgIm9uU3VjY2VzcyIsICJwb3B1cEVsZW1lbnQiLCAicmNpZCIsICJzdHJ1Y3R1cmUiLCAic3BhbnMiLCAiZmxhdHRlbiIsICJsYXlvdXQiLCAibnVtc3BhbnMiLCAicmVkaXJzIiwgInJlZGlyU3BhbnMiLCAiZm91bmQiLCAic3RydWN0dXJlZm4iLCAic2V0Zm4iLCAic2V0UG9wdXBUaXBzQW5kSFRNTCIsICJmbGF0dGVuMiIsICJwb3B1cEhUTUwyIiwgIm1ha2VFbXB0eVNwYW5zIiwgIm1ha2VFbXB0eVNwYW5zMiIsICJfaXRlcmF0b3I5IiwgIl9zdGVwOSIsICJlbXB0eVNwYW5IVE1MIiwgIm5vZGVUeXBlIiwgImVtcHR5U3BhbkhUTUwyIiwgImNsYXNzbmFtZSIsICJjbGFzc0FsaWFzZXMiLCAicG9wdXBTZWNvbmRQcmV2aWV3IiwgIl9hcnRpY2xlIiwgInBvcFRpcHNTb29uRm4iLCAid2hlbiIsICJwb3BUaXBzIiwgImRpdm5hbWUiLCAiaWRudW1iZXIiLCAiZnV6enlDdXJzb3JPZmZNZW51cyIsICJfeCIsICJfeSIsICJfZnV6eiIsICJwYXJlbnQiLCAidWxzIiwgIl9pdGVyYXRvcjEwIiwgIl9zdGVwMTAiLCAidWwiLCAib2Zmc2V0V2lkdGgiLCAibGltaXRIb3Jpem9udGFsUG9zaXRpb24iLCAibW91c2VPdXRXaWtpTGluazIiLCAidHJhY2tlciIsICJwb3NDaGVja2VySG9vayIsICJkaXJ0eSIsICJtb3VzZU92ZXJOYXZwb3AiLCAiaXNXaXRoaW4iLCAibW91c2VMZWF2aW5nVGltZSIsICJydW5TdG9wUG9wdXBUaW1lciIsICJzdG9wUG9wdXBUaW1lciIsICJvcmlnaW5hbERhdGEiLCAibWF4Q2hhcmFjdGVycyIsICJtYXhTZW50ZW5jZXMiLCAic2V0RGF0YSIsICJtYXhTaXplIiwgImtpbGxDb21tZW50cyIsICJraWxsRGl2cyIsICJraWxsR2FsbGVyaWVzIiwgImtpbGwiLCAib3BlbmluZyIsICJjbG9zaW5nIiwgInN1Ym9wZW5pbmciLCAic3ViY2xvc2luZyIsICJyZXBsIiwgIm9sZGsiLCAiayIsICJraWxsU3R1ZmYiLCAib3AiLCAibWFrZVJlZ2V4cCIsICJjbCIsICJzYiIsICJzYyIsICJvcFJlc3VsdCIsICJpbmRleCIsICJkZXB0aCIsICJyZW1vdmFsIiwgInByZWZpeCIsICJzdWZmaXgiLCAicmVTdHIiLCAic3AiLCAia2lsbEJveFRlbXBsYXRlcyIsICJraWxsVGVtcGxhdGVzIiwgImtpbGxUYWJsZXMiLCAia2lsbEltYWdlcyIsICJmb3JiaWRkZW5OYW1lc3BhY2VBbGlhc2VzIiwgIl9pIiwgIl9PYmplY3QkZW50cmllcyIsICJlbnRyaWVzIiwgImxvY2FsaXplZE5hbWVzcGFjZUxjIiwgImtpbGxIVE1MIiwgImtpbGxDaHVua3MiLCAiaXRhbGljQ2h1bmtSZWdleCIsICJtb3B1cCIsICJmaXJzdEJpdCIsICJzdHVmZiIsICJub3RTZW50ZW5jZUVuZHMiLCAiZml4U2VudGVuY2VFbmRzIiwgImZ1bGxMZW5ndGgiLCAiZGQiLCAiZmlyc3RTZW50ZW5jZXMiLCAic3RycyIsICJraWxsQmFkV2hpdGVzcGFjZSIsICJtYWtlUHJldmlldyIsICJraWxsTXVsdGlsaW5lVGVtcGxhdGVzIiwgImZpeEhUTUwiLCAic3RyaXBMb25nVGVtcGxhdGVzIiwgImVzV2lraTJIdG1sUGFydCIsICJyZUxpbmtzIiwgImxhc3RJbmRleCIsICJyZXN1bHQiLCAicG9zdGZpeEluZGV4IiwgIl9tYXRjaCQiLCAiZWRpdFN1bW1hcnlQcmV2aWV3IiwgInJlQWVzIiwgInNlY3Rpb24iLCAicG9zdGZpeCIsICJzZWN0aW9uTGluayIsICJtb3JlIiwgIm1vcmVMaW5rIiwgIm9uY2xpY2siLCAicXVlcnlUeXBlIiwgImh0bWxHZW5lcmF0b3IiLCAidXNlcm5hbWVhcnQiLCAiQVBJaGlzdG9yeVByZXZpZXdIVE1MIiwgIkFQSWNhdGVnb3J5UHJldmlld0hUTUwiLCAidXNlcm5hbWUiLCAiQVBJdXNlckluZm9QcmV2aWV3SFRNTCIsICJBUEljb250cmlic1ByZXZpZXdIVE1MIiwgInRyYWlsIiwgIkFQSWltYWdlcGFnZVByZXZpZXdIVE1MIiwgIkFQSWJhY2tsaW5rc1ByZXZpZXdIVE1MIiwgIkFQSXJldmlzaW9uUHJldmlld0hUTUwiLCAiZmV0Y2hVc2VyR3JvdXBOYW1lcyIsICJ0aGVuIiwgInNob3dBUElQcmV2aWV3IiwgImdvIiwgImxpbmtMaXN0IiwgImJ1ZiIsICJfaXRlcmF0b3IxMSIsICJfc3RlcDExIiwgImdldFRpbWVPZmZzZXQiLCAidHoiLCAib3B0aW9ucyIsICJnZXRUaW1lWm9uZSIsICJ0aW1lWm9uZSIsICJ0ekNvbXBvbmVudHMiLCAidXNlVGltZU9mZnNldCIsICJJbnRsIiwgIkRhdGVUaW1lRm9ybWF0IiwgImZvcm1hdFRvUGFydHMiLCAiZ2V0TG9jYWxlcyIsICJsb2NhbGVzIiwgInVzZXJMYW5ndWFnZSIsICJnZXRNV0RhdGVGb3JtYXQiLCAic3VwcG9ydGVkTG9jYWxlc09mIiwgIm5hdmlnYXRvciIsICJsYW5ndWFnZSIsICJlZGl0UHJldmlld1RhYmxlIiwgInJlYWxseUNvbnRyaWJzIiwgImN1cmFydCIsICJtYWtlRmlyc3RDb2x1bW5MaW5rcyIsICJjdXJyZW50UmV2aXNpb24iLCAiZmlyc3RSZXZpZCIsICJfaXRlcmF0b3IxMiIsICJfc3RlcDEyIiwgImVkaXREYXRlIiwgInRoaXNEYXkiLCAiZm9ybWF0dGVkRGF0ZSIsICJ0aGlzVGltZSIsICJmb3JtYXR0ZWRUaW1lIiwgImNvbDN1cmwiLCAiY29sM3R4dCIsICJjb21tZW50IiwgImNvbnRlbnQiLCAiY29tbWVudGhpZGRlbiIsICJhZGp1c3REYXRlIiwgIm9mZnNldCIsICJjb252ZXJ0VGltZVpvbmUiLCAidG9Mb2NhbGVTdHJpbmciLCAiZm9ybWF0dGVkRGF0ZVRpbWUiLCAiZDIiLCAiZ2V0RnVsbFllYXIiLCAiZ2V0TW9udGgiLCAiZ2V0RGF0ZSIsICJnZXRIb3VycyIsICJnZXRNaW51dGVzIiwgImdldFNlY29uZHMiLCAidG9Mb2NhbGVEYXRlU3RyaW5nIiwgImdldFVUQ1NlY29uZHMiLCAidG9Mb2NhbGVUaW1lU3RyaW5nIiwgInVzZXJpbmZvUmVzcG9uc2UiLCAicXVlcnlPYmoiLCAidXNlcnMiLCAibWVzc2FnZXMiLCAiZ3JvdXBzIiwgIl9pdGVyYXRvcjEzIiwgIl9zdGVwMTMiLCAiZ3JvdXBOYW1lIiwgImdsb2JhbHVzZXJpbmZvIiwgIl9pdGVyYXRvcjE0IiwgIl9zdGVwMTQiLCAiZ2V0TXdBcGkiLCAibG9hZE1lc3NhZ2VzSWZNaXNzaW5nIiwgImpzT2JqIiwgIm1pc3NpbmciLCAiY29udGVudG1vZGVsIiwgIl9pdGVyYXRvcjE1IiwgIl9zdGVwMTUiLCAiY29udGludWUiLCAiYmxjb250aW51ZSIsICJBUElzaGFyZWRJbWFnZVBhZ2VQcmV2aWV3SFRNTCIsICJwb3B1cGlkIiwgInJlcXVlc3RpZCIsICJhbHQiLCAiaW1hZ2VyZXBvc2l0b3J5IiwgImVuY2FydCIsICJzaGFyZWRfdXJsIiwgImFwaWNvbW1vbnNiYXNlIiwgImNvbW1vbnNiYXNlIiwgImxvYWRlciIsICJsb2FkIiwgIkFQSWltYWdlbGlua3NQcmV2aWV3SFRNTCIsICJqc29iaiIsICJpbWFnZXVzYWdlIiwgIl9pdGVyYXRvcjE2IiwgIl9zdGVwMTYiLCAiY2F0ZWdvcnltZW1iZXJzIiwgIl9pdGVyYXRvcjE3IiwgIl9zdGVwMTciLCAiY21jb250aW51ZSIsICJxdWVyeW9iaiIsICJpbnZhbGlkIiwgImJsb2NrZWRieSIsICJibG9ja3BhcnRpYWwiLCAibG9ja2VkU3VsQWNjb3VudElzQXR0YWNoZWRUb1RoaXMiLCAidW5hdHRhY2hlZCIsICJnZW5kZXIiLCAiX2l0ZXJhdG9yMTgiLCAiX3N0ZXAxOCIsICJfaXRlcmF0b3IxOSIsICJfc3RlcDE5IiwgInJlZ2lzdHJhdGlvbiIsICJfdXNlciRlZGl0Y291bnQiLCAiZWRpdGNvdW50IiwgInVzZXJjb250cmlicyIsICJibG9ja3MiLCAicmJzdHIiLCAicmFuZ2VzdGFydCIsICJyYW5nZWVuZCIsICJyZXN0cmljdGlvbnMiLCAic3BsaWNlIiwgIl9uYXZwb3AiLCAiZWRpdHMiLCAic2V0dXBEZWJ1Z2dpbmciLCAicG9wdXBEZWJ1ZyIsICJjb25zb2xlIiwgInBvcHVwc0luc2VydEltYWdlIiwgImltYWdlaW5mbyIsICJpbWFnZXBhZ2UiLCAidGh1bWJ1cmwiLCAic3JjIiwgIm1pbWUiLCAiZGVzY3JpcHRpb251cmwiLCAidG9nZ2xlU2l6ZSIsICJ0b2dnbGVTaXplMiIsICJpbWciLCAiZmlyc3RDaGlsZCIsICJtYXRjaGVkIiwgInJlbW92ZU1hdGNoZXNVbmxlc3MiLCAicmUxIiwgInBhcmVuY291bnQiLCAicmUyIiwgInNldE5hbWVzcGFjZXMiLCAic2V0UmVkaXJzIiwgIlIiLCAicmVkaXJMaXN0cyIsICJhciIsICJiZSIsICJiZyIsICJicyIsICJibiIsICJjcyIsICJjeSIsICJkZSIsICJlbyIsICJlcyIsICJldCIsICJnYSIsICJnbCIsICJoZSIsICJodSIsICJpcyIsICJpdCIsICJqYSIsICJtayIsICJuZHMiLCAibmwiLCAibm4iLCAicGwiLCAicHQiLCAicnUiLCAic2siLCAic3IiLCAidHQiLCAidWsiLCAidmkiLCAieWkiLCAiemgiLCAicmVkaXJMaXN0IiwgInNldEludGVyd2lraSIsICJ3aWtpbWVkaWEiLCAibnNSZSIsICJpbWFnZU5hbWVzcGFjZVZhcmlhbnRzIiwgIl9pMiIsICJfT2JqZWN0JGVudHJpZXMyIiwgIl9sb2NhbGl6ZWROYW1lc3BhY2VMYyIsICJfbmFtZXNwYWNlSWQiLCAibnNSZUltYWdlIiwgImdldEVkaXRib3hTZWxlY3Rpb24iLCAic2VsZWN0aW9uIiwgImNyZWF0ZVJhbmdlIiwgInNlbFN0YXJ0IiwgInNlbGVjdGlvblN0YXJ0IiwgInNlbEVuZCIsICJzZWxlY3Rpb25FbmQiLCAic2VsIiwgInBpcGUiLCAiZG9TZXBhcmF0ZVNlbGVjdGlvblBvcHVwIiwgIk1vdXNldHJhY2tlciIsICJsb29wRGVsYXkiLCAiYWN0aXZlIiwgImhvb2tzIiwgInJ1bkhvb2tzIiwgInJlbW92ZU9iaiIsICJyZW1vdmVIb29rcyIsICJuZXdIb29rcyIsICJ0cmFjayIsICJwYWdlWCIsICJwYWdlWSIsICJkb2NFbHQiLCAiZG9jdW1lbnRFbGVtZW50IiwgInNjcm9sbExlZnQiLCAic2Nyb2xsVG9wIiwgInNldFBvc2l0aW9uIiwgImxhc3RIb29rX3giLCAibGFzdEhvb2tfeSIsICJlbmFibGUiLCAic2F2ZWRMaXN0ZW5lciIsICJ1aWQiLCAibm9zaG93IiwgImNyZWF0ZSIsICJ1bmhpZGUiLCAiaGlkZSIsICJob29rSWRzIiwgImRvd25sb2FkcyIsICJjb25zdHJhaW5lZCIsICJoZWlnaHQiLCAiY3JlYXRlTWFpbkRpdiIsICJyZXBvc2l0aW9uIiwgIm5vTGltaXRIb3IiLCAidG9vV2lkZSIsICJ1cGRhdGVEaW1lbnNpb25zIiwgImNXaWR0aCIsICJjbGllbnRXaWR0aCIsICJuYXR1cmFsV2lkdGgiLCAibmV3TGVmdCIsICJyYWlzZSIsICJ6SW5kZXgiLCAiaGlnaGVzdCIsICJzaG93IiwgInRpbWUiLCAic3RhYmxlX3giLCAic3RhYmxlX3kiLCAic3RhYmxlU2hvdyIsICJuZXdfeCIsICJuZXdfeSIsICJkeCIsICJkeSIsICJmdXp6MiIsICJzaG93U29vblN0YWJsZVRpbWVyIiwgImtleUhvb2tzIiwgIlJlZmxlY3QiLCAiYXBwbHkiLCAiaG9vayIsICJob29rSWQiLCAiX3RoaXMkY2xhc3NOYW1lIiwgIm9uY2xpY2tMaXN0ZW5lciIsICJwb3NpdGlvbiIsICJtaW5XaWR0aCIsICJoYW5kbGVOYW1lIiwgInNoaWZ0S2V5IiwgImFib3J0RG93bmxvYWRzIiwgIm9mZnNldEhlaWdodCIsICJfaXRlcmF0b3IyMCIsICJfc3RlcDIwIiwgImRlbEZtdCIsICJpbnNGbXQiLCAiY291bnRDcm9zc2luZ3MiLCAiZWplY3QiLCAicm93IiwgIl9pdGVyYXRvcjIxIiwgIl9zdGVwMjEiLCAic2hvcnRlbkRpZmZTdHJpbmciLCAic2hvcnRlbkRpZmZTdHJpbmcyIiwgImNvbnRleHQiLCAiZGlmZlN0cmluZyIsICJvU3BsaXR0ZWQiLCAiblNwbGl0dGVkIiwgIm91dCIsICJhY2MiLCAibWF4T3V0cHV0UGFpciIsICJwYWlyZWQiLCAianNSZXNlcnZlZFByb3BlcnRpZXMiLCAiZGlmZkJ1Z0FsZXJ0IiwgImRpZmZCdWdBbGVydDIiLCAid29yZCIsICJtYWtlRGlmZkhhc2h0YWJsZSIsICJfc3JjJGkiLCAiX3JldCRfc3JjJGkiLCAib3MiLCAic2V0U2l0ZUluZm8iLCAicG9wdXBMb2NhbERlYnVnIiwgImhvc3RuYW1lIiwgIndpa2lhIiwgImlzTG9jYWwiLCAic3RhcnRzV2l0aCIsICJjb21tb25zIiwgInBvcnQiLCAic2l0ZWJhc2UiLCAic2V0VXNlckluZm8iLCAidXN1c2VycyIsICJ1c3Byb3AiLCAiY2FuUmV2aWV3IiwgInJpZ2h0cyIsICJmZXRjaFNwZWNpYWxQYWdlTmFtZXMiLCAiZm9ybWF0IiwgImZvcm1hdHZlcnNpb24iLCAibWF4YWdlIiwgIm1ldGEiLCAic2lwcm9wIiwgInVzZWxhbmciLCAic3BlY2lhbHBhZ2VhbGlhc2VzIiwgInNldFRpdGxlQmFzZSIsICJwcm90b2NvbCIsICJib3RJbnRlcmZhY2VQYXRoIiwgIkFQSVBhdGgiLCAidGl0bGV0YWlsIiwgIndpa2liYXNlIiwgInNldE1haW5SZWdleCIsICJyZVN0YXJ0IiwgInByZVRpdGxlcyIsICJyZUVuZCIsICJidWlsZFNwZWNpYWxQYWdlR3JvdXAiLCAic3BlY2lhbFBhZ2VPYmoiLCAidmFyaWFudHMiLCAicmVhbG5hbWUiLCAiX2l0ZXJhdG9yMjIiLCAiYWxpYXNlcyIsICJfc3RlcDIyIiwgImFsaWFzIiwgInNldFJlZ2V4cHMiLCAiX2l0ZXJhdG9yMjMiLCAiX3N0ZXAyMyIsICJzcGVjaWFscGFnZSIsICJpbSIsICJfdGVtcGxhdGVPYmplY3Q0IiwgIl90ZW1wbGF0ZU9iamVjdDUiLCAic2V0dXBDYWNoZSIsICJzZXRNaXNjIiwgImNsaWVudCIsICJzZXR1cFBvcHVwczIiLCAiY29tcGxldGVkIiwgInNldE9wdGlvbnMiLCAiZGVmYXVsdE5hdmxpbmtTcGVjIiwgIl9oaW50IiwgImV4cGFuZENvbmRpdGlvbmFsTmF2bGlua1N0cmluZyIsICJleHBhbmRDb25kaXRpb25hbE5hdmxpbmtTdHJpbmcyIiwgInJlY3Vyc2lvbkNvdW50IiwgImNvbmRpdGlvbmFsU3BsaXRSZWdleCIsICJudW1QYXJlbnMiLCAidGVzdFN0cmluZyIsICJ0cnVlU3RyaW5nIiwgImZhbHNlU3RyaW5nIiwgInRlc3RSZXN1bHQiLCAibmF2bGlua1N0cmluZ1RvQXJyYXkiLCAiX2l0ZXJhdG9yMjQiLCAiX3N0ZXAyNCIsICJuYXZsaW5rVGFnIiwgInNzIiwgInNzcyIsICJuYXZsaW5rU3Vic3RpdHV0ZUhUTUwiLCAibmF2bGlua0RlcHRoIiwgIm1hZ2ljIiwgIm1lbnVkZXB0aCIsICJtZW51cm93ZGVwdGgiLCAiX2l0ZXJhdG9yMjUiLCAiX3N0ZXAyNSIsICJnZXROZXdXaW4iLCAiZ2V0UHJpbnRGdW5jdGlvbiIsICJ0YWdUeXBlIiwgInByaW50IiwgInNob3J0Y3V0IiwgImFkZFBvcHVwU2hvcnRjdXQiLCAicG9wdXBMaW5rc05ld1dpbmRvdyIsICJuZXdXaW4iLCAibm9Qb3B1cCIsICJzcGVjaWFsTGluayIsICJtYWdpY1dhdGNoTGluayIsICJ0aXRsZWRXaWtpTGluayIsICJfcGckY3VycmVudCRsaW5rJG9yaWciLCAiYXJpbkxpbmsiLCAiZWRpdENvdW50ZXJMaW5rIiwgImVkaXRvckxpc3RMaW5rIiwgInRpdGxlZERpZmZMaW5rIiwgIm1hZ2ljSGlzdG9yeUxpbmsiLCAic2ltcGxlUG9wdXBzIiwgInBvcHVwTWVudUxpbmsiLCAicG9wdXBIYW5kbGVLZXlwcmVzcyIsICJwb3B1cEhhbmRsZUtleXByZXNzMiIsICJfZXZ0JGtleUNvZGUiLCAia2V5Q29kZSIsICJ3aGljaCIsICJsZXR0ZXIiLCAiZnJvbUNvZGVQb2ludCIsICJzdGFydExpbmsiLCAibGFzdFBvcHVwTGlua1NlbGVjdGVkIiwgInByZXZlbnREZWZhdWx0IiwgImZvY3VzIiwgIm9sZFBvcHVwT25rZXlwcmVzcyIsICJvbmtleXByZXNzIiwgImFkZExpbmtQcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJkaWZmRGF0YSIsICJvbGRSZXYiLCAibmV3UmV2IiwgImFwaTIiLCAiZnJvbXRpdGxlIiwgInRvcmVsYXRpdmUiLCAiZnJvbXJldiIsICJ0b3JldiIsICJjb21wYXJlIiwgImZyb21yZXZpZCIsICJ0b3JldmlkIiwgImFkZFJldmlld0xpbmsiLCAiZG9uZURpZmYiLCAicmV2aWRzIiwgInN0YWJsZV9yZXZpZCIsICJmbGFnZ2VkIiwgInBhcmFtczIiLCAicG9zdFdpdGhUb2tlbiIsICJmYWlsIiwgIl9pdGVyYXRvcjI2IiwgIl9zdGVwMjYiLCAiX2kzIiwgIl9yZXZpc2lvbnMiLCAicmV2aXNpb24iLCAiaW5zZXJ0RGlmZiIsICJybUJvcmluZ0xpbmVzIiwgImFhYSIsICJiYiIsICJiYmIiLCAic3RyaXBPdXRlckNvbW1vbkxpbmVzIiwgIm9sZGxpbmVzIiwgIm5ld2xpbmVzIiwgImlubmVyIiwgInRydW5jYXRlZCIsICJwb3B1cERpZmZNYXhMaW5lcyIsICJwb3B1cERpZmZDb250ZXh0TGluZXMiLCAibGluZURpZmYiLCAibGluZXMyIiwgIm9sZGxpbmVzMiIsICJuZXdsaW5lczIiLCAiZGlmZkRhdGVzVGFibGUiLCAiZGlmZkRhdGVzVGFibGVSb3ciLCAibGFiZWwiLCAibGFzdE1vZGlmaWVkRGF0ZSIsICJyZXZsaW5rIiwgImdlbmVyYWxMaW5rIiwgImFjdGlvbk5hbWUiLCAic2F2ZWRPbGRpZCIsICJvbGRpZERhdGEiLCAicmV2aXNpb25TdHJpbmciLCAicmV2ZXJ0U3VtbWFyeSIsICJiYXNlIiwgImNzc0NsYXNzIiwgImRlZmF1bHROYXZsaW5rQ2xhc3NuYW1lIiwgImdlbmVyYWxOYXZMaW5rIiwgImdldExhc3RDb250cmliIiwgIndpa2lwYWdlIiwgImdldEhpc3RvcnlJbmZvIiwgInByb2Nlc3NMYXN0Q29udHJpYkluZm8iLCAiZmlyc3ROZXdFZGl0b3IiLCAiZWRpdG9yIiwgIm5ld1VybCIsICJkaXNwbGF5VXJsIiwgImdldERpZmZTaW5jZU15RWRpdCIsICJwcm9jZXNzRGlmZlNpbmNlTXlFZGl0IiwgImZyaWVuZGx5TmFtZSIsICJteUxhc3RFZGl0IiwgInB1cmdlUG9wdXBzIiwgInByb2Nlc3NBbGxQb3B1cHMiLCAibnVsbGlmeSIsICJkaXNhYmxlUG9wdXBzIiwgInRvZ2dsZVByZXZpZXdzIiwgIm1hZ2ljV2F0Y2hMaW5rMiIsICJfdGVtcGxhdGVPYmplY3Q2IiwgIl9yZWYiLCAiX2FzeW5jVG9HZW5lcmF0b3IiLCAicmVxRGF0YSIsICJ0aXRsZXMiLCAidW53YXRjaCIsICJtd1RpdGxlIiwgIm5ld0Zyb21UZXh0IiwgIm1lc3NhZ2VOYW1lIiwgImdldE5hbWVzcGFjZUlkIiwgInBhcnNlRG9tIiwgIl94MiIsICJfeDMiLCAiYXJndW1lbnRzIiwgImpzVXJsIiwgIm9uQ2xpY2siLCAiX3RlbXBsYXRlT2JqZWN0NyIsICJfdGVtcGxhdGVPYmplY3Q4IiwgIl9sJHNlcCIsICJhcHBlbmRQYXJhbXNUb0xpbmsiLCAibGlua3N0ciIsICJjQSIsICJjaHMiLCAiY3VycmVudEFydGljbGVSZWdleEJpdCIsICJfdGVtcGxhdGVPYmplY3Q5IiwgIl90ZW1wbGF0ZU9iamVjdDEwIiwgIl90ZW1wbGF0ZU9iamVjdDExIiwgIl90ZW1wbGF0ZU9iamVjdDEyIiwgImxrIiwgImFsc29DaGFuZ2VMYWJlbCIsICJzYW5lTGlua0NoZWNrIiwgInVOIiwgInRvb2xEYk5hbWUiLCAiY29va2llU3R5bGUiLCAidG9vbCIsICJkZWZhdWx0VG9vbFVybCIsICJ0aGVXaWtpIiwgIndoYXROZXh0IiwgImdldEhpc3RvcnkiLCAicHJvY2Vzc0hpc3RvcnkiLCAiX2l0ZXJhdG9yMjciLCAiX3N0ZXAyNyIsICJmaW5pc2hQcm9jZXNzSGlzdG9yeSIsICJoaXN0SW5mbyIsICJwcmV2aWQiLCAiZGVmYXVsdGl6ZSIsICJfcGckb3B0aW9uIiwgIl9wZyRvcHRpb24keCIsICJuZXdPcHRpb24iLCAiZGVmIiwgInZhck5hbWUiLCAidXNlcklzU3lzb3AiLCAiZyIsICJob3VyMTIiLCAiX3RlbXBsYXRlT2JqZWN0MTMiLCAiZWRpdENvdW50ZXJMaW5rSGludCIsICJhcmluIiwgIm9uIiwgIm9uY2UiLCAiZHluYW1pY0NvbnRlbnRIYW5kbGVyIiwgIiRjb250ZW50IiwgInJlZ2lzdGVySG9va3NGb3JWaXNpYmxlTmF2cG9wcyIsICJkb0l0IiwgImVhY2giLCAiX2luZGV4IiwgImFkZCIsICIkb3ZlcmxheSJdCn0K diff --git a/dist/OnlineAdmins/OnlineAdmins.js b/dist/OnlineAdmins/OnlineAdmins.js index 21a185de..e49736db 100644 --- a/dist/OnlineAdmins/OnlineAdmins.js +++ b/dist/OnlineAdmins/OnlineAdmins.js @@ -27,9 +27,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -43,9 +43,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -57,9 +57,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -70,9 +70,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -83,9 +83,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -95,9 +95,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -109,9 +109,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -124,9 +124,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -140,9 +140,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -153,9 +153,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -170,9 +170,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -180,9 +180,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -193,9 +193,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -205,9 +205,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -218,9 +218,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -229,9 +229,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -244,18 +244,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -264,9 +264,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -291,9 +291,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -307,18 +307,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -334,9 +334,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -349,9 +349,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -363,9 +363,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -376,9 +376,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -394,17 +394,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -419,9 +419,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -429,18 +429,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -449,9 +449,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -461,9 +461,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -474,9 +474,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -488,9 +488,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -510,9 +510,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -538,9 +538,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -551,9 +551,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -565,9 +565,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -582,9 +582,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -607,9 +607,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -623,9 +623,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -637,9 +637,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -683,9 +683,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -699,9 +699,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -719,9 +719,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -736,9 +736,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -747,9 +747,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -760,17 +760,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -843,9 +843,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -898,9 +898,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -933,9 +933,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -946,9 +946,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -958,9 +958,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -972,9 +972,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -985,9 +985,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -996,9 +996,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1031,9 +1031,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1055,9 +1055,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1071,9 +1071,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1084,17 +1084,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1110,9 +1110,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1132,9 +1132,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1153,9 +1153,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1196,9 +1196,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js var require_set_helpers = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var SetPrototype = Set.prototype; @@ -1213,9 +1213,9 @@ var require_set_helpers = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js var require_a_set = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js"(exports, module2) { "use strict"; var has = require_set_helpers().has; module2.exports = function(it) { @@ -1225,9 +1225,9 @@ var require_a_set = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js var require_iterate_simple = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { "use strict"; var call = require_function_call(); module2.exports = function(record, fn, ITERATOR_INSTEAD_OF_RECORD) { @@ -1242,9 +1242,9 @@ var require_iterate_simple = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js var require_set_iterate = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var iterateSimple = require_iterate_simple(); @@ -1260,9 +1260,9 @@ var require_set_iterate = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js var require_set_clone = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js"(exports, module2) { "use strict"; var SetHelpers = require_set_helpers(); var iterate = require_set_iterate(); @@ -1278,9 +1278,9 @@ var require_set_clone = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js var require_function_uncurry_this_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var aCallable = require_a_callable(); @@ -1293,9 +1293,9 @@ var require_function_uncurry_this_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js var require_set_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js"(exports, module2) { "use strict"; var uncurryThisAccessor = require_function_uncurry_this_accessor(); var SetHelpers = require_set_helpers(); @@ -1305,9 +1305,9 @@ var require_set_size = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js var require_get_iterator_direct = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { "use strict"; module2.exports = function(obj) { return { @@ -1319,9 +1319,9 @@ var require_get_iterator_direct = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js var require_get_set_record = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var anObject = require_an_object(); @@ -1357,9 +1357,9 @@ var require_get_set_record = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js var require_set_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1385,9 +1385,9 @@ var require_set_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js var require_set_method_accept_set_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var createSetLike = function(size) { @@ -1422,9 +1422,9 @@ var require_set_method_accept_set_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js var require_es_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js"() { "use strict"; var $2 = require_export(); var difference = require_set_difference(); @@ -1435,17 +1435,9 @@ var require_es_set_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js -var require_esnext_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js"() { - "use strict"; - require_es_set_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js var require_set_intersection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1474,9 +1466,9 @@ var require_set_intersection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js var require_es_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js"() { "use strict"; var $2 = require_export(); var fails = require_fails(); @@ -1491,17 +1483,9 @@ var require_es_set_intersection_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js -var require_esnext_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js"() { - "use strict"; - require_es_set_intersection_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js var require_iterator_close = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js"(exports, module2) { "use strict"; var call = require_function_call(); var anObject = require_an_object(); @@ -1528,9 +1512,9 @@ var require_iterator_close = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js var require_set_is_disjoint_from = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1553,9 +1537,9 @@ var require_set_is_disjoint_from = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js var require_es_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { "use strict"; var $2 = require_export(); var isDisjointFrom = require_set_is_disjoint_from(); @@ -1566,17 +1550,9 @@ var require_es_set_is_disjoint_from_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js -var require_esnext_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"() { - "use strict"; - require_es_set_is_disjoint_from_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js var require_set_is_subset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var size = require_set_size(); @@ -1593,9 +1569,9 @@ var require_set_is_subset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js var require_es_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSubsetOf = require_set_is_subset_of(); @@ -1606,17 +1582,9 @@ var require_es_set_is_subset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js -var require_esnext_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"() { - "use strict"; - require_es_set_is_subset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js var require_set_is_superset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1636,9 +1604,9 @@ var require_set_is_superset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js var require_es_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSupersetOf = require_set_is_superset_of(); @@ -1649,17 +1617,9 @@ var require_es_set_is_superset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js -var require_esnext_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"() { - "use strict"; - require_es_set_is_superset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js var require_set_symmetric_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1682,9 +1642,9 @@ var require_set_symmetric_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js var require_es_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { "use strict"; var $2 = require_export(); var symmetricDifference = require_set_symmetric_difference(); @@ -1695,17 +1655,9 @@ var require_es_set_symmetric_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js -var require_esnext_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"() { - "use strict"; - require_es_set_symmetric_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js var require_set_union = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var add = require_set_helpers().add; @@ -1724,9 +1676,9 @@ var require_set_union = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js var require_es_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js"() { "use strict"; var $2 = require_export(); var union = require_set_union(); @@ -1737,22 +1689,14 @@ var require_es_set_union_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js -var require_esnext_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js"() { - "use strict"; - require_es_set_union_v2(); - } -}); - // dist/OnlineAdmins/OnlineAdmins.js -require_esnext_set_difference_v2(); -require_esnext_set_intersection_v2(); -require_esnext_set_is_disjoint_from_v2(); -require_esnext_set_is_subset_of_v2(); -require_esnext_set_is_superset_of_v2(); -require_esnext_set_symmetric_difference_v2(); -require_esnext_set_union_v2(); +require_es_set_difference_v2(); +require_es_set_intersection_v2(); +require_es_set_is_disjoint_from_v2(); +require_es_set_is_subset_of_v2(); +require_es_set_is_superset_of_v2(); +require_es_set_symmetric_difference_v2(); +require_es_set_union_v2(); function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; @@ -2114,4 +2058,4 @@ $(addPortletLink); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanMiLCAic3JjL09ubGluZUFkbWlucy9tb2R1bGVzL2NvbXBvbmVudHMvT25saW5lQWRtaW5zLm1vZHVsZS5sZXNzIiwgInNyYy9PbmxpbmVBZG1pbnMvbW9kdWxlcy9jb21wb25lbnRzL2dyb3VwTGlzdC50c3giLCAic3JjL09ubGluZUFkbWlucy9tb2R1bGVzL2kxOG4udHMiLCAic3JjL09ubGluZUFkbWlucy9tb2R1bGVzL2NvbnN0YW50LnRzIiwgInNyYy9PbmxpbmVBZG1pbnMvb3B0aW9ucy5qc29uIiwgInNyYy9PbmxpbmVBZG1pbnMvbW9kdWxlcy9hcGkudHMiLCAic3JjL09ubGluZUFkbWlucy9tb2R1bGVzL2RvQ2xpY2sudHMiLCAic3JjL09ubGluZUFkbWlucy9PbmxpbmVBZG1pbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG4gIFNldDogU2V0LFxuICBhZGQ6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5hZGQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5oYXMpLFxuICByZW1vdmU6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZVsnZGVsZXRlJ10pLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBTZXRQcm90b3R5cGUgPSBTZXRIZWxwZXJzLnByb3RvO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuZm9yRWFjaCk7XG52YXIga2V5cyA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5rZXlzKTtcbnZhciBuZXh0ID0ga2V5cyhuZXcgU2V0KCkpLm5leHQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwgZm4sIGludGVycnVwdGlibGUpIHtcbiAgcmV0dXJuIGludGVycnVwdGlibGUgPyBpdGVyYXRlU2ltcGxlKHsgaXRlcmF0b3I6IGtleXMoc2V0KSwgbmV4dDogbmV4dCB9LCBmbikgOiBmb3JFYWNoKHNldCwgZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKFNldEhlbHBlcnMucHJvdG8sICdzaXplJywgJ2dldCcpIHx8IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIHNldC5zaXplO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgR2V0SXRlcmF0b3JEaXJlY3Qob2JqKWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVycy8jc2VjLWdldGl0ZXJhdG9yZGlyZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICBpdGVyYXRvcjogb2JqLFxuICAgIG5leHQ6IG9iai5uZXh0LFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgaW50U2l6ZSkge1xuICB0aGlzLnNldCA9IHNldDtcbiAgdGhpcy5zaXplID0gbWF4KGludFNpemUsIDApO1xuICB0aGlzLmhhcyA9IGFDYWxsYWJsZShzZXQuaGFzKTtcbiAgdGhpcy5rZXlzID0gYUNhbGxhYmxlKHNldC5rZXlzKTtcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihJTlZBTElEX1NJWkUpO1xuICB2YXIgaW50U2l6ZSA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtU2l6ZSk7XG4gIGlmIChpbnRTaXplIDwgMCkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHJldHVybiBuZXcgU2V0UmVjb3JkKG9iaiwgaW50U2l6ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICBlbHNlIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG52YXIgY3JlYXRlU2V0TGlrZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiB7XG4gICAgc2l6ZTogc2l6ZSxcbiAgICBoYXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgU2V0ID0gZ2V0QnVpbHRJbignU2V0Jyk7XG4gIHRyeSB7XG4gICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoMCkpO1xuICAgIHRyeSB7XG4gICAgICAvLyBsYXRlIHNwZWMgY2hhbmdlLCBlYXJseSBXZWJLaXQgfiBTYWZhcmkgMTcuMCBiZXRhIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHBhc3MgaXRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzL3B1bGwvODhcbiAgICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKC0xKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHtcbiAgICBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoaGFzKE8sIGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcnNlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxudmFyIElOQ09SUkVDVCA9ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpbnRlcnNlY3Rpb24nKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBlcy9uby1zZXQgLS0gdGVzdGluZ1xuICByZXR1cm4gU3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwgMiwgM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLCAyXSkpKSkgIT09ICczLDInO1xufSk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVCB9LCB7XG4gIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIHJldHVybiBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpdGVyYXRlKE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3Vic2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1YnNldE9mJykgfSwge1xuICBpc1N1YnNldE9mOiBpc1N1YnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3VwZXJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1cGVyc2V0T2YnKSB9LCB7XG4gIGlzU3VwZXJzZXRPZjogaXNTdXBlcnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gICAgZWxzZSBhZGQocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHN5bW1ldHJpY0RpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3N5bW1ldHJpY0RpZmZlcmVuY2UnKSB9LCB7XG4gIHN5bW1ldHJpY0RpZmZlcmVuY2U6IHN5bW1ldHJpY0RpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgYWRkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuYWRkO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXVuaW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCd1bmlvbicpIH0sIHtcbiAgdW5pb246IHVuaW9uXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQudW5pb24udjInKTtcbiIsICJpbXBvcnQgXCJlc2J1aWxkLWNzcy1tb2R1bGVzLXBsdWdpbi1ucy1jc3M6c3JjL09ubGluZUFkbWlucy9tb2R1bGVzL2NvbXBvbmVudHMvT25saW5lQWRtaW5zLm1vZHVsZS5sZXNzXCI7XG5leHBvcnQgY29uc3Qgc2VjdGlvbiA9IFwiT25saW5lQWRtaW5zLW1vZHVsZV9fc2VjdGlvbl9XUzlJR2FcIjtcbmV4cG9ydCBjb25zdCBzZWN0aW9uTGlzdCA9IFwiT25saW5lQWRtaW5zLW1vZHVsZV9fc2VjdGlvbkxpc3RfV1M5SUdhXCI7XG5leHBvcnQgY29uc3QgdGFsa1BhZ2VMaW5rID0gXCJPbmxpbmVBZG1pbnMtbW9kdWxlX190YWxrUGFnZUxpbmtfV1M5SUdhXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCJzZWN0aW9uXCI6IHNlY3Rpb24sXG4gIFwic2VjdGlvbkxpc3RcIjogc2VjdGlvbkxpc3QsXG4gIFwidGFsa1BhZ2VMaW5rXCI6IHRhbGtQYWdlTGlua1xufTtcbiAgICAgICIsICJpbXBvcnQge3NlY3Rpb24sIHNlY3Rpb25MaXN0LCB0YWxrUGFnZUxpbmt9IGZyb20gJy4vT25saW5lQWRtaW5zLm1vZHVsZS5sZXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdleHQuZ2FkZ2V0LlJlYWN0JztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi4vaTE4bic7XG5cbmNvbnN0IHNhbml0aXplID0gKHN0cmluZzogc3RyaW5nKSA9PlxuXHRzdHJpbmcucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmx0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcblxuaW50ZXJmYWNlIFVzZXJMaW5rUHJvcHMge1xuXHR1c2VyTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgR3JvdXBMaXN0UHJvcHMge1xuXHRncm91cE5hbWU6IHN0cmluZztcblx0dXNlck5hbWVzOiBzdHJpbmdbXTtcbn1cblxuY29uc3QgVXNlckxpbmsgPSAoe3VzZXJOYW1lfTogVXNlckxpbmtQcm9wcykgPT4gKFxuXHQ8bGk+XG5cdFx0PGEgaHJlZj17bXcudXRpbC5nZXRVcmwoYFVzZXI6JHtzYW5pdGl6ZSh1c2VyTmFtZSl9YCl9IHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cblx0XHRcdHtzYW5pdGl6ZSh1c2VyTmFtZSl9XG5cdFx0PC9hPlxuXHRcdCZuYnNwO1xuXHRcdDxzcGFuIGNsYXNzTmFtZT17dGFsa1BhZ2VMaW5rfT5cblx0XHRcdO+8iFxuXHRcdFx0PGEgaHJlZj17bXcudXRpbC5nZXRVcmwoYFVzZXJfdGFsazoke3Nhbml0aXplKHVzZXJOYW1lKX1gKX0gcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHRhcmdldD1cIl9ibGFua1wiPlxuXHRcdFx0XHTnlZnoqIBcblx0XHRcdDwvYT5cblx0XHRcdO+8iVxuXHRcdDwvc3Bhbj5cblx0PC9saT5cbik7XG5cbmNvbnN0IG9ubGluZUNvdW50VGV4dDogc3RyaW5nID0gZ2V0TWVzc2FnZSgnICgkMSBvbmxpbmUpOicpO1xuXG5jb25zdCBHcm91cExpc3QgPSAoe2dyb3VwTmFtZSwgdXNlck5hbWVzfTogR3JvdXBMaXN0UHJvcHMpID0+IChcblx0PGRpdiBjbGFzc05hbWU9e3NlY3Rpb259PlxuXHRcdDxzcGFuPntncm91cE5hbWV9PC9zcGFuPlxuXHRcdDxzcGFuPntvbmxpbmVDb3VudFRleHQucmVwbGFjZSgnJDEnLCBTdHJpbmcodXNlck5hbWVzLmxlbmd0aCkpfTwvc3Bhbj5cblx0XHQ8dWwgY2xhc3NOYW1lPXtzZWN0aW9uTGlzdH0+XG5cdFx0XHR7dXNlck5hbWVzLm1hcCgodXNlcikgPT4gKFxuXHRcdFx0XHQ8VXNlckxpbmsga2V5PXt1c2VyfSB1c2VyTmFtZT17dXNlcn0gLz5cblx0XHRcdCkpfVxuXHRcdDwvdWw+XG5cdDwvZGl2PlxuKTtcblxuY29uc3QgZ3JvdXBMaXN0RWxlbWVudCA9IChncm91cE5hbWU6IHN0cmluZywgdXNlck5hbWVzOiBzdHJpbmdbXSkgPT4gKFxuXHQ8R3JvdXBMaXN0IGdyb3VwTmFtZT17Z3JvdXBOYW1lfSB1c2VyTmFtZXM9e3VzZXJOYW1lc30gLz5cbik7XG5cbmNvbnN0IGxpc3RUaXRsZSA9ICgpID0+IDxwPntnZXRNZXNzYWdlKCdPbmxpbmVXaXRoaW4zME1pbnV0ZXMnKX08L3A+O1xuXG5leHBvcnQge2dyb3VwTGlzdEVsZW1lbnQsIGxpc3RUaXRsZX07XG4iLCAiaW1wb3J0IHtsb2NhbGl6ZX0gZnJvbSAnZXh0LmdhZGdldC5pMThuJztcblxuY29uc3QgZ2V0STE4bk1lc3NhZ2VzID0gKCkgPT4ge1xuXHRyZXR1cm4ge1xuXHRcdCcgKCQxIG9ubGluZSk6JzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICcgKCQxIG9ubGluZSk6Jyxcblx0XHRcdGphOiAn77yIJDHkurrjgqrjg7Pjg6njgqTjg7PkuK3vvInvvJonLFxuXHRcdFx0J3poLWhhbnMnOiAn77yIJDHkuKrlnKjnur/vvInvvJonLFxuXHRcdFx0J3poLWhhbnQnOiAn77yIJDHlgIvlnKjnt5rvvInvvJonLFxuXHRcdH0pLFxuXHRcdEFkbWluczogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdBZG1pbnMnLFxuXHRcdFx0amE6ICfnrqHnkIbogIUnLFxuXHRcdFx0J3poLWhhbnMnOiAn566h55CG5ZGYJyxcblx0XHRcdCd6aC1oYW50JzogJ+euoeeQhuWToScsXG5cdFx0fSksXG5cdFx0UGF0cm9sbGVyczogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdQYXRyb2xsZXJzJyxcblx0XHRcdGphOiAn5beh5Zue6ICFJyxcblx0XHRcdCd6aC1oYW5zJzogJ+W3oeafpeWRmCcsXG5cdFx0XHQnemgtaGFudCc6ICflt6Hmn6Xlk6EnLFxuXHRcdH0pLFxuXHRcdFN0ZXdhcmRzOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1N0ZXdhcmRzJyxcblx0XHRcdGphOiAn44K544OB44Ol44Ov44O844OJJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aho+ahiOeQhuS6i+WRmCcsXG5cdFx0XHQnemgtaGFudCc6ICfmqpTmoYjnkIbkuovlk6EnLFxuXHRcdH0pLFxuXHRcdCdOZXR3b3JrIGVycm9yJzogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdOZXR3b3JrIGVycm9yJyxcblx0XHRcdGphOiAn44ON44OD44OI44Ov44O844Kv44Ko44Op44O8Jyxcblx0XHRcdCd6aC1oYW5zJzogJ+e9kee7nOW8guW4uCcsXG5cdFx0XHQnemgtaGFudCc6ICfntrLot6/nlbDluLgnLFxuXHRcdH0pLFxuXHRcdE5vT25saW5lOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0N1cnJlbnRseSB0aGVyZSBhcmUgbm8gaGlnaCBwcml2aWxlZ2UgdXNlcnMgb25saW5lJyxcblx0XHRcdGphOiAn54++5Zyo44CB6auY5qip6ZmQ5Yip55So6ICF44Gv44Kq44Oz44Op44Kk44Oz44Gr44GE44G+44Gb44KTJyxcblx0XHRcdCd6aC1oYW5zJzogJ+ebruWJjeayoeacieermeWKoeS6uuWRmOWcqOe6vycsXG5cdFx0XHQnemgtaGFudCc6ICfnm67liY3mspLmnInnq5nli5nkurrlk6HlnKjnt5onLFxuXHRcdH0pLFxuXHRcdE9ubGluZTogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdPbmxpbmUgYWRtaW5zJyxcblx0XHRcdGphOiAn44Kq44Oz44Op44Kk44Oz44Gu6auY5qip6ZmQ5Yip55So6ICFJyxcblx0XHRcdCd6aC1oYW5zJzogJ+WcqOe6v+ermeWKoeS6uuWRmCcsXG5cdFx0XHQnemgtaGFudCc6ICfnt5rkuIrnq5nli5nkurrlk6EnLFxuXHRcdH0pLFxuXHRcdE9ubGluZVdpdGhpbjMwTWludXRlczogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdIaWdoIHByaXZpbGVnZSB1c2VycyBvbmxpbmUgd2l0aGluIDMwIG1pbnV0ZXM6Jyxcblx0XHRcdGphOiAnMzDliIbku6XlhoXjgavjgqrjg7Pjg6njgqTjg7Pjgafpq5jmqKnpmZDliKnnlKjogIXvvJonLFxuXHRcdFx0J3poLWhhbnMnOiAn5LiL6Z2i5piv5pyA6L+RMzDliIbpkp/lhoXlnKjnur/nmoTnq5nliqHkurrlkZjvvJonLFxuXHRcdFx0J3poLWhhbnQnOiAn5LiL6Z2i5piv5pyA6L+RMzDliIbpkJjlhafnmoTnt5rkuIrnq5nli5nkurrlk6HvvJonLFxuXHRcdH0pLFxuXHR9O1xufTtcblxuY29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cbmNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICJjb25zdCBCTEFDS19MSVNUOiBzdHJpbmdbXSA9IFsn5rul55So6L+H5ruk5ZmoJ107XG5cbmV4cG9ydCB7QkxBQ0tfTElTVH07XG4iLCAie1xuXHRcInZlcnNpb25cIjogXCIyLjBcIlxufVxuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi4vb3B0aW9ucy5qc29uJztcbmltcG9ydCB7aW5pdE13QXBpfSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBhcGk6IG13LkFwaSA9IGluaXRNd0FwaShgT25saW5lQWRtaW5zLyR7T1BUSU9OUy52ZXJzaW9ufWApO1xuXG5leHBvcnQge2FwaX07XG4iLCAiaW1wb3J0IHtncm91cExpc3RFbGVtZW50LCBsaXN0VGl0bGV9IGZyb20gJy4vY29tcG9uZW50cy9ncm91cExpc3QnO1xuaW1wb3J0IHtCTEFDS19MSVNUfSBmcm9tICcuL2NvbnN0YW50JztcbmltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4vaTE4bic7XG5cbmNvbnN0IGRvQ2xpY2sgPSBhc3luYyAoZXZlbnQ6IEpRdWVyeS5DbGlja0V2ZW50PEhUTUxBbmNob3JFbGVtZW50Pik6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdGxldCB1c2Vyczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgdXNlcnNFeHQ6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHN0ZXdhcmRzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBhZG1pbnM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHBhdHJvbGxlcnM6IHN0cmluZ1tdID0gW107XG5cblx0Y29uc3QgdGltZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IHJjc3RhcnQ6IHN0cmluZyA9IHRpbWUudG9JU09TdHJpbmcoKTtcblx0dGltZS5zZXRNaW51dGVzKHRpbWUuZ2V0TWludXRlcygpIC0gMzApOyAvLyDmnIDov5Hmm7TmlLkzMOWIhumSn+WGheeahOe8lui+keeUqOaIt1xuXHRjb25zdCByY2VuZDogc3RyaW5nID0gdGltZS50b0lTT1N0cmluZygpO1xuXG5cdHRyeSB7XG5cdFx0Y29uc3QgcmVjZW50Y2hhbmdlc1BhcmFtczogQXBpUXVlcnlSZWNlbnRDaGFuZ2VzUGFyYW1zID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRsaXN0OiAncmVjZW50Y2hhbmdlcycsXG5cdFx0XHRyY3Byb3A6ICd1c2VyJyxcblx0XHRcdHJjc2hvdzogWychYm90JywgJyFhbm9uJ10sXG5cdFx0XHRyY2xpbWl0OiA1MDAsXG5cdFx0XHRyY3N0YXJ0LFxuXHRcdFx0cmNlbmQsXG5cdFx0fTtcblx0XHRjb25zdCByZWNlbnRjaGFuZ2VzID0gYXdhaXQgYXBpLmdldChyZWNlbnRjaGFuZ2VzUGFyYW1zKTtcblxuXHRcdGZvciAoY29uc3Qge3VzZXJ9IG9mIHJlY2VudGNoYW5nZXNbJ3F1ZXJ5J10ucmVjZW50Y2hhbmdlcyBhcyB7dXNlcjogc3RyaW5nfVtdKSB7XG5cdFx0XHR1c2Vyc1t1c2Vycy5sZW5ndGhdID0gdXNlcjsgLy8gUmVwbGFjZSBgW10ucHVzaCgpYCB0byBhdm9pZCBwb2x5ZmlsbGluZyBjb3JlLWpzXG5cdFx0fVxuXHRcdGNvbnN0IGxvZ2V2ZW50c1BhcmFtczogQXBpUXVlcnlMb2dFdmVudHNQYXJhbXMgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdGxpc3Q6ICdsb2dldmVudHMnLFxuXHRcdFx0bGVwcm9wOiAndXNlcicsXG5cdFx0XHRsZWxpbWl0OiA1MDAsXG5cdFx0XHRsZXN0YXJ0OiByY3N0YXJ0LFxuXHRcdFx0bGVlbmQ6IHJjZW5kLFxuXHRcdH07XG5cdFx0Y29uc3QgbG9nZXZlbnRzID0gYXdhaXQgYXBpLmdldChsb2dldmVudHNQYXJhbXMpO1xuXG5cdFx0Zm9yIChjb25zdCB7dXNlcn0gb2YgbG9nZXZlbnRzWydxdWVyeSddLmxvZ2V2ZW50cyBhcyB7dXNlcjogc3RyaW5nfVtdKSB7XG5cdFx0XHR1c2Vyc0V4dFt1c2Vyc0V4dC5sZW5ndGhdID0gdXNlcjtcblx0XHR9XG5cblx0XHR1c2VycyA9IFsuLi5uZXcgU2V0KFsuLi51c2VycywgLi4udXNlcnNFeHRdKV07IC8vIOeUqOaIt+WQjeWIl+ihqOWQiOW5tuOAgeWOu+mHjeOAgeWIhuWJslxuXG5cdFx0Y29uc3QgcHJvbWlzZXM6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KVtdID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHVzZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCB1c3VzZXJzID0gdXNlcnMuc3BsaWNlKDAsIDUwKTtcblx0XHRcdHByb21pc2VzW3Byb21pc2VzLmxlbmd0aF0gPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtczogQXBpUXVlcnlVc2Vyc1BhcmFtcyA9IHtcblx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRcdGxpc3Q6ICd1c2VycycsXG5cdFx0XHRcdFx0dXN1c2Vycyxcblx0XHRcdFx0XHR1c3Byb3A6ICdncm91cHMnLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5nZXQocGFyYW1zKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHtncm91cHMsIG5hbWV9IG9mIHJlc3BvbnNlWydxdWVyeSddLnVzZXJzIGFzIHtncm91cHM6IHN0cmluZ1tdOyBuYW1lOiBzdHJpbmd9W10pIHtcblx0XHRcdFx0XHQvLyDmib7liLDnrqHnkIbkurrlkZjvvIzljrvpmaTmnLrlmajkurrvvIzmtojpmaRuYW1l55qE56m65YC8XG5cdFx0XHRcdFx0aWYgKGdyb3Vwcy5pbmNsdWRlcygnYm90JykgfHwgQkxBQ0tfTElTVC5pbmNsdWRlcyhuYW1lKSB8fCAhbmFtZSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChncm91cHMuaW5jbHVkZXMoJ3N0ZXdhcmQnKSkge1xuXHRcdFx0XHRcdFx0c3Rld2FyZHNbc3Rld2FyZHMubGVuZ3RoXSA9IG5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChncm91cHMuaW5jbHVkZXMoJ3N5c29wJykpIHtcblx0XHRcdFx0XHRcdGFkbWluc1thZG1pbnMubGVuZ3RoXSA9IG5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChncm91cHMuaW5jbHVkZXMoJ3BhdHJvbGxlcicpKSB7XG5cdFx0XHRcdFx0XHRwYXRyb2xsZXJzW3BhdHJvbGxlcnMubGVuZ3RoXSA9IG5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHQvLyDmn6Xor6LnlKjmiLfmnYPpmZBcblx0XHRmb3IgKGNvbnN0IHByb21pc2Ugb2YgcHJvbWlzZXMpIHtcblx0XHRcdGF3YWl0IHByb21pc2UoKTtcblx0XHR9XG5cblx0XHRpZiAoc3Rld2FyZHMubGVuZ3RoICsgYWRtaW5zLmxlbmd0aCArIHBhdHJvbGxlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgZWxlbWVudHM6IEVsZW1lbnRbXSA9IFtsaXN0VGl0bGUoKV07XG5cblx0XHRcdGlmIChzdGV3YXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aF0gPSBncm91cExpc3RFbGVtZW50KGdldE1lc3NhZ2UoJ1N0ZXdhcmRzJyksIHN0ZXdhcmRzKTtcblx0XHRcdH1cblx0XHRcdGlmIChhZG1pbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRlbGVtZW50c1tlbGVtZW50cy5sZW5ndGhdID0gZ3JvdXBMaXN0RWxlbWVudChnZXRNZXNzYWdlKCdBZG1pbnMnKSwgYWRtaW5zKTtcblx0XHRcdH1cblx0XHRcdGlmIChwYXRyb2xsZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoXSA9IGdyb3VwTGlzdEVsZW1lbnQoZ2V0TWVzc2FnZSgnUGF0cm9sbGVycycpLCBwYXRyb2xsZXJzKTtcblx0XHRcdH1cblx0XHRcdHZvaWQgbXcubm90aWZ5KCQoJzxkaXY+JykuYXBwZW5kKGVsZW1lbnRzKSwge3RhZzogJ29ubGluZUFkbWlucyd9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkoZ2V0TWVzc2FnZSgnTm9PbmxpbmUnKSwge1xuXHRcdFx0XHR0YWc6ICdvbmxpbmVBZG1pbnMnLFxuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0gY2F0Y2gge1xuXHRcdHZvaWQgbXcubm90aWZ5KGdldE1lc3NhZ2UoJ05ldHdvcmsgZXJyb3InKSwge3RhZzogJ29ubGluZUFkbWlucycsIHR5cGU6ICdlcnJvcid9KTtcblx0fVxufTtcblxuZXhwb3J0IHtkb0NsaWNrfTtcbiIsICJpbXBvcnQge2RvQ2xpY2t9IGZyb20gJy4vbW9kdWxlcy9kb0NsaWNrJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi9tb2R1bGVzL2kxOG4nO1xuXG5jb25zdCBhZGRQb3J0bGV0TGluayA9ICgpOiB2b2lkID0+IHtcblx0Ly8gQ3JlYXRlIHBvcnRsZXQgbGlua1xuXHRjb25zdCBwb3J0bGV0SWQ6ICdwLWNhY3Rpb25zJyB8ICdwLXRiJyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwLWNhY3Rpb25zJykgPyAncC1jYWN0aW9ucycgOiAncC10Yic7XG5cdGNvbnN0IGVsZW1lbnQ6IEhUTUxMSUVsZW1lbnQgfCBudWxsID0gbXcudXRpbC5hZGRQb3J0bGV0TGluayhwb3J0bGV0SWQsICcjJywgZ2V0TWVzc2FnZSgnT25saW5lJyksICd0LW9ubGluZWFkbWluJyk7XG5cdGlmICghZWxlbWVudCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEJpbmQgY2xpY2sgbGlzdGVuZXJcblx0JChlbGVtZW50KVxuXHRcdC5maW5kKCdhJylcblx0XHQub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG5cdFx0XHR2b2lkIGRvQ2xpY2soZXZlbnQpO1xuXHRcdH0pO1xufTtcblxuJChhZGRQb3J0bGV0TGluayk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPLFdBQVEsWUFBWSxPQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSx1RkFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsNkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUdaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxhQUFPLE9BQU8sZUFB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TixJQUFNQyxpQkFBaUJBLE1BQVk7QUFFbEMsUUFBTUMsWUFBbUNDLFNBQVNDLGNBQWMsYUFBYSxJQUFJLGVBQWU7QUFDaEcsUUFBTUMsVUFBZ0NoRyxHQUFHQyxLQUFLMkYsZUFBZUMsV0FBVyxLQUFLdkcsV0FBVyxRQUFRLEdBQUcsZUFBZTtBQUNsSCxNQUFJLENBQUMwRyxTQUFTO0FBQ2I7RUFDRDtBQUdBWCxJQUFFVyxPQUFPLEVBQ1BDLEtBQUssR0FBRyxFQUNSQyxHQUFHLFNBQVV6RSxXQUFVO0FBQ3ZCLFNBQUtILFFBQVFHLEtBQUs7RUFDbkIsQ0FBQztBQUNIO0FBRUE0RCxFQUFFTyxjQUFjOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJ2ZXJzaW9uIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJTZXQiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAiU2V0IiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgInNlY3Rpb24iLCAic2VjdGlvbkxpc3QiLCAidGFsa1BhZ2VMaW5rIiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJfX3RvRVNNIiwgInJlcXVpcmUiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiZ2V0STE4bk1lc3NhZ2VzIiwgImxvY2FsaXplIiwgImVuIiwgImphIiwgIkFkbWlucyIsICJQYXRyb2xsZXJzIiwgIlN0ZXdhcmRzIiwgIk5vT25saW5lIiwgIk9ubGluZSIsICJPbmxpbmVXaXRoaW4zME1pbnV0ZXMiLCAiaTE4bk1lc3NhZ2VzIiwgImdldE1lc3NhZ2UiLCAia2V5IiwgInNhbml0aXplIiwgInN0cmluZyIsICJyZXBsYWNlIiwgIlVzZXJMaW5rIiwgInVzZXJOYW1lIiwgImRlZmF1bHQiLCAiY3JlYXRlRWxlbWVudCIsICJocmVmIiwgIm13IiwgInV0aWwiLCAiZ2V0VXJsIiwgImNvbmNhdCIsICJyZWwiLCAidGFyZ2V0IiwgImNsYXNzTmFtZSIsICJvbmxpbmVDb3VudFRleHQiLCAiR3JvdXBMaXN0IiwgImdyb3VwTmFtZSIsICJ1c2VyTmFtZXMiLCAiU3RyaW5nIiwgImxlbmd0aCIsICJtYXAiLCAidXNlciIsICJncm91cExpc3RFbGVtZW50IiwgImxpc3RUaXRsZSIsICJCTEFDS19MSVNUIiwgInZlcnNpb24iLCAiaW1wb3J0X2V4dF9nYWRnZXQzIiwgImFwaSIsICJpbml0TXdBcGkiLCAiZG9DbGljayIsICJfcmVmIiwgIl9hc3luY1RvR2VuZXJhdG9yIiwgImV2ZW50IiwgInByZXZlbnREZWZhdWx0IiwgInVzZXJzIiwgInVzZXJzRXh0IiwgInN0ZXdhcmRzIiwgImFkbWlucyIsICJwYXRyb2xsZXJzIiwgInRpbWUiLCAiRGF0ZSIsICJyY3N0YXJ0IiwgInRvSVNPU3RyaW5nIiwgInNldE1pbnV0ZXMiLCAiZ2V0TWludXRlcyIsICJyY2VuZCIsICJyZWNlbnRjaGFuZ2VzUGFyYW1zIiwgImFjdGlvbiIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJsaXN0IiwgInJjcHJvcCIsICJyY3Nob3ciLCAicmNsaW1pdCIsICJyZWNlbnRjaGFuZ2VzIiwgImdldCIsICJfaXRlcmF0b3IyIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwMiIsICJzIiwgIm4iLCAiZG9uZSIsICJ2YWx1ZSIsICJlcnIiLCAiZSIsICJmIiwgImxvZ2V2ZW50c1BhcmFtcyIsICJsZXByb3AiLCAibGVsaW1pdCIsICJsZXN0YXJ0IiwgImxlZW5kIiwgImxvZ2V2ZW50cyIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJTZXQiLCAicHJvbWlzZXMiLCAiaSIsICJ1c3VzZXJzIiwgInNwbGljZSIsICJwYXJhbXMiLCAidXNwcm9wIiwgInJlc3BvbnNlIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgImdyb3VwcyIsICJuYW1lIiwgImluY2x1ZGVzIiwgIl9pIiwgIl9wcm9taXNlcyIsICJwcm9taXNlIiwgImVsZW1lbnRzIiwgIm5vdGlmeSIsICIkIiwgImFwcGVuZCIsICJ0YWciLCAidHlwZSIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAiYWRkUG9ydGxldExpbmsiLCAicG9ydGxldElkIiwgImRvY3VtZW50IiwgInF1ZXJ5U2VsZWN0b3IiLCAiZWxlbWVudCIsICJmaW5kIiwgIm9uIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgInNyYy9PbmxpbmVBZG1pbnMvbW9kdWxlcy9jb21wb25lbnRzL09ubGluZUFkbWlucy5tb2R1bGUubGVzcyIsICJzcmMvT25saW5lQWRtaW5zL21vZHVsZXMvY29tcG9uZW50cy9ncm91cExpc3QudHN4IiwgInNyYy9PbmxpbmVBZG1pbnMvbW9kdWxlcy9pMThuLnRzIiwgInNyYy9PbmxpbmVBZG1pbnMvbW9kdWxlcy9jb25zdGFudC50cyIsICJzcmMvT25saW5lQWRtaW5zL29wdGlvbnMuanNvbiIsICJzcmMvT25saW5lQWRtaW5zL21vZHVsZXMvYXBpLnRzIiwgInNyYy9PbmxpbmVBZG1pbnMvbW9kdWxlcy9kb0NsaWNrLnRzIiwgInNyYy9PbmxpbmVBZG1pbnMvT25saW5lQWRtaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxuICBTZXQ6IFNldCxcbiAgYWRkOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuYWRkKSxcbiAgaGFzOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGVbJ2RlbGV0ZSddKSxcbiAgcHJvdG86IFNldFByb3RvdHlwZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xuXG4vLyBQZXJmb3JtID8gUmVxdWlyZUludGVybmFsU2xvdChNLCBbW1NldERhdGFdXSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGhhcyhpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWNvcmQsIGZuLCBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCkge1xuICB2YXIgaXRlcmF0b3IgPSBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCA/IHJlY29yZCA6IHJlY29yZC5pdGVyYXRvcjtcbiAgdmFyIG5leHQgPSByZWNvcmQubmV4dDtcbiAgdmFyIHN0ZXAsIHJlc3VsdDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gZm4oc3RlcC52YWx1ZSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgU2V0UHJvdG90eXBlID0gU2V0SGVscGVycy5wcm90bztcbnZhciBmb3JFYWNoID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmZvckVhY2gpO1xudmFyIGtleXMgPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUua2V5cyk7XG52YXIgbmV4dCA9IGtleXMobmV3IFNldCgpKS5uZXh0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQsIGZuLCBpbnRlcnJ1cHRpYmxlKSB7XG4gIHJldHVybiBpbnRlcnJ1cHRpYmxlID8gaXRlcmF0ZVNpbXBsZSh7IGl0ZXJhdG9yOiBrZXlzKHNldCksIG5leHQ6IG5leHQgfSwgZm4pIDogZm9yRWFjaChzZXQsIGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGl0ZXJhdGUoc2V0LCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihTZXRIZWxwZXJzLnByb3RvLCAnc2l6ZScsICdnZXQnKSB8fCBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbnZhciBJTlZBTElEX1NJWkUgPSAnSW52YWxpZCBzaXplJztcbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBtYXggPSBNYXRoLm1heDtcblxudmFyIFNldFJlY29yZCA9IGZ1bmN0aW9uIChzZXQsIGludFNpemUpIHtcbiAgdGhpcy5zZXQgPSBzZXQ7XG4gIHRoaXMuc2l6ZSA9IG1heChpbnRTaXplLCAwKTtcbiAgdGhpcy5oYXMgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gIHRoaXMua2V5cyA9IGFDYWxsYWJsZShzZXQua2V5cyk7XG59O1xuXG5TZXRSZWNvcmQucHJvdG90eXBlID0ge1xuICBnZXRJdGVyYXRvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJdGVyYXRvckRpcmVjdChhbk9iamVjdChjYWxsKHRoaXMua2V5cywgdGhpcy5zZXQpKSk7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gY2FsbCh0aGlzLmhhcywgdGhpcy5zZXQsIGl0KTtcbiAgfVxufTtcblxuLy8gYEdldFNldFJlY29yZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc2V0LW1ldGhvZHMvI3NlYy1nZXRzZXRyZWNvcmRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICBhbk9iamVjdChvYmopO1xuICB2YXIgbnVtU2l6ZSA9ICtvYmouc2l6ZTtcbiAgLy8gTk9URTogSWYgc2l6ZSBpcyB1bmRlZmluZWQsIHRoZW4gbnVtU2l6ZSB3aWxsIGJlIE5hTlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtU2l6ZSAhPT0gbnVtU2l6ZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgdmFyIGludFNpemUgPSB0b0ludGVnZXJPckluZmluaXR5KG51bVNpemUpO1xuICBpZiAoaW50U2l6ZSA8IDApIHRocm93IG5ldyAkUmFuZ2VFcnJvcihJTlZBTElEX1NJWkUpO1xuICByZXR1cm4gbmV3IFNldFJlY29yZChvYmosIGludFNpemUpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgZWxzZSBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxudmFyIGNyZWF0ZVNldExpa2UgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIHNpemU6IHNpemUsXG4gICAgaGFzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIFNldCA9IGdldEJ1aWx0SW4oJ1NldCcpO1xuICB0cnkge1xuICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKDApKTtcbiAgICB0cnkge1xuICAgICAgLy8gbGF0ZSBzcGVjIGNoYW5nZSwgZWFybHkgV2ViS2l0IH4gU2FmYXJpIDE3LjAgYmV0YSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwYXNzIGl0XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kcy9wdWxsLzg4XG4gICAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgtMSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yMikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2RpZmZlcmVuY2UnKSB9LCB7XG4gIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEaXNqb2ludEZyb20ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSByZXR1cm4gaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzRGlzam9pbnRGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc0Rpc2pvaW50RnJvbScpIH0sIHtcbiAgaXNEaXNqb2ludEZyb206IGlzRGlzam9pbnRGcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3Vic2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhdGUoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdXBlcnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPCBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1cGVyc2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdXBlcnNldE9mJykgfSwge1xuICBpc1N1cGVyc2V0T2Y6IGlzU3VwZXJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICAgIGVsc2UgYWRkKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzeW1tZXRyaWNEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdzeW1tZXRyaWNEaWZmZXJlbmNlJykgfSwge1xuICBzeW1tZXRyaWNEaWZmZXJlbmNlOiBzeW1tZXRyaWNEaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGFkZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmFkZDtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuaW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC11bmlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgndW5pb24nKSB9LCB7XG4gIHVuaW9uOiB1bmlvblxufSk7XG4iLCAiaW1wb3J0IFwiZXNidWlsZC1jc3MtbW9kdWxlcy1wbHVnaW4tbnMtY3NzOnNyYy9PbmxpbmVBZG1pbnMvbW9kdWxlcy9jb21wb25lbnRzL09ubGluZUFkbWlucy5tb2R1bGUubGVzc1wiO1xuZXhwb3J0IGNvbnN0IHNlY3Rpb24gPSBcIk9ubGluZUFkbWlucy1tb2R1bGVfX3NlY3Rpb25fV1M5SUdhXCI7XG5leHBvcnQgY29uc3Qgc2VjdGlvbkxpc3QgPSBcIk9ubGluZUFkbWlucy1tb2R1bGVfX3NlY3Rpb25MaXN0X1dTOUlHYVwiO1xuZXhwb3J0IGNvbnN0IHRhbGtQYWdlTGluayA9IFwiT25saW5lQWRtaW5zLW1vZHVsZV9fdGFsa1BhZ2VMaW5rX1dTOUlHYVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwic2VjdGlvblwiOiBzZWN0aW9uLFxuICBcInNlY3Rpb25MaXN0XCI6IHNlY3Rpb25MaXN0LFxuICBcInRhbGtQYWdlTGlua1wiOiB0YWxrUGFnZUxpbmtcbn07XG4gICAgICAiLCAiaW1wb3J0IHtzZWN0aW9uLCBzZWN0aW9uTGlzdCwgdGFsa1BhZ2VMaW5rfSBmcm9tICcuL09ubGluZUFkbWlucy5tb2R1bGUubGVzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAnZXh0LmdhZGdldC5SZWFjdCc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4uL2kxOG4nO1xuXG5jb25zdCBzYW5pdGl6ZSA9IChzdHJpbmc6IHN0cmluZykgPT5cblx0c3RyaW5nLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZsdDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG5cbmludGVyZmFjZSBVc2VyTGlua1Byb3BzIHtcblx0dXNlck5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdyb3VwTGlzdFByb3BzIHtcblx0Z3JvdXBOYW1lOiBzdHJpbmc7XG5cdHVzZXJOYW1lczogc3RyaW5nW107XG59XG5cbmNvbnN0IFVzZXJMaW5rID0gKHt1c2VyTmFtZX06IFVzZXJMaW5rUHJvcHMpID0+IChcblx0PGxpPlxuXHRcdDxhIGhyZWY9e213LnV0aWwuZ2V0VXJsKGBVc2VyOiR7c2FuaXRpemUodXNlck5hbWUpfWApfSByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG5cdFx0XHR7c2FuaXRpemUodXNlck5hbWUpfVxuXHRcdDwvYT5cblx0XHQmbmJzcDtcblx0XHQ8c3BhbiBjbGFzc05hbWU9e3RhbGtQYWdlTGlua30+XG5cdFx0XHTvvIhcblx0XHRcdDxhIGhyZWY9e213LnV0aWwuZ2V0VXJsKGBVc2VyX3RhbGs6JHtzYW5pdGl6ZSh1c2VyTmFtZSl9YCl9IHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cblx0XHRcdFx055WZ6KiAXG5cdFx0XHQ8L2E+XG5cdFx0XHTvvIlcblx0XHQ8L3NwYW4+XG5cdDwvbGk+XG4pO1xuXG5jb25zdCBvbmxpbmVDb3VudFRleHQ6IHN0cmluZyA9IGdldE1lc3NhZ2UoJyAoJDEgb25saW5lKTonKTtcblxuY29uc3QgR3JvdXBMaXN0ID0gKHtncm91cE5hbWUsIHVzZXJOYW1lc306IEdyb3VwTGlzdFByb3BzKSA9PiAoXG5cdDxkaXYgY2xhc3NOYW1lPXtzZWN0aW9ufT5cblx0XHQ8c3Bhbj57Z3JvdXBOYW1lfTwvc3Bhbj5cblx0XHQ8c3Bhbj57b25saW5lQ291bnRUZXh0LnJlcGxhY2UoJyQxJywgU3RyaW5nKHVzZXJOYW1lcy5sZW5ndGgpKX08L3NwYW4+XG5cdFx0PHVsIGNsYXNzTmFtZT17c2VjdGlvbkxpc3R9PlxuXHRcdFx0e3VzZXJOYW1lcy5tYXAoKHVzZXIpID0+IChcblx0XHRcdFx0PFVzZXJMaW5rIGtleT17dXNlcn0gdXNlck5hbWU9e3VzZXJ9IC8+XG5cdFx0XHQpKX1cblx0XHQ8L3VsPlxuXHQ8L2Rpdj5cbik7XG5cbmNvbnN0IGdyb3VwTGlzdEVsZW1lbnQgPSAoZ3JvdXBOYW1lOiBzdHJpbmcsIHVzZXJOYW1lczogc3RyaW5nW10pID0+IChcblx0PEdyb3VwTGlzdCBncm91cE5hbWU9e2dyb3VwTmFtZX0gdXNlck5hbWVzPXt1c2VyTmFtZXN9IC8+XG4pO1xuXG5jb25zdCBsaXN0VGl0bGUgPSAoKSA9PiA8cD57Z2V0TWVzc2FnZSgnT25saW5lV2l0aGluMzBNaW51dGVzJyl9PC9wPjtcblxuZXhwb3J0IHtncm91cExpc3RFbGVtZW50LCBsaXN0VGl0bGV9O1xuIiwgImltcG9ydCB7bG9jYWxpemV9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cbmNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0cmV0dXJuIHtcblx0XHQnICgkMSBvbmxpbmUpOic6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnICgkMSBvbmxpbmUpOicsXG5cdFx0XHRqYTogJ++8iCQx5Lq644Kq44Oz44Op44Kk44Oz5Lit77yJ77yaJyxcblx0XHRcdCd6aC1oYW5zJzogJ++8iCQx5Liq5Zyo57q/77yJ77yaJyxcblx0XHRcdCd6aC1oYW50JzogJ++8iCQx5YCL5Zyo57ea77yJ77yaJyxcblx0XHR9KSxcblx0XHRBZG1pbnM6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnQWRtaW5zJyxcblx0XHRcdGphOiAn566h55CG6ICFJyxcblx0XHRcdCd6aC1oYW5zJzogJ+euoeeQhuWRmCcsXG5cdFx0XHQnemgtaGFudCc6ICfnrqHnkIblk6EnLFxuXHRcdH0pLFxuXHRcdFBhdHJvbGxlcnM6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnUGF0cm9sbGVycycsXG5cdFx0XHRqYTogJ+W3oeWbnuiAhScsXG5cdFx0XHQnemgtaGFucyc6ICflt6Hmn6XlkZgnLFxuXHRcdFx0J3poLWhhbnQnOiAn5beh5p+l5ZOhJyxcblx0XHR9KSxcblx0XHRTdGV3YXJkczogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdTdGV3YXJkcycsXG5cdFx0XHRqYTogJ+OCueODgeODpeODr+ODvOODiScsXG5cdFx0XHQnemgtaGFucyc6ICfmoaPmoYjnkIbkuovlkZgnLFxuXHRcdFx0J3poLWhhbnQnOiAn5qqU5qGI55CG5LqL5ZOhJyxcblx0XHR9KSxcblx0XHQnTmV0d29yayBlcnJvcic6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnTmV0d29yayBlcnJvcicsXG5cdFx0XHRqYTogJ+ODjeODg+ODiOODr+ODvOOCr+OCqOODqeODvCcsXG5cdFx0XHQnemgtaGFucyc6ICfnvZHnu5zlvILluLgnLFxuXHRcdFx0J3poLWhhbnQnOiAn57ay6Lev55Ww5bi4Jyxcblx0XHR9KSxcblx0XHROb09ubGluZTogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdDdXJyZW50bHkgdGhlcmUgYXJlIG5vIGhpZ2ggcHJpdmlsZWdlIHVzZXJzIG9ubGluZScsXG5cdFx0XHRqYTogJ+ePvuWcqOOAgemrmOaoqemZkOWIqeeUqOiAheOBr+OCquODs+ODqeOCpOODs+OBq+OBhOOBvuOBm+OCkycsXG5cdFx0XHQnemgtaGFucyc6ICfnm67liY3msqHmnInnq5nliqHkurrlkZjlnKjnur8nLFxuXHRcdFx0J3poLWhhbnQnOiAn55uu5YmN5rKS5pyJ56uZ5YuZ5Lq65ZOh5Zyo57eaJyxcblx0XHR9KSxcblx0XHRPbmxpbmU6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnT25saW5lIGFkbWlucycsXG5cdFx0XHRqYTogJ+OCquODs+ODqeOCpOODs+OBrumrmOaoqemZkOWIqeeUqOiAhScsXG5cdFx0XHQnemgtaGFucyc6ICflnKjnur/nq5nliqHkurrlkZgnLFxuXHRcdFx0J3poLWhhbnQnOiAn57ea5LiK56uZ5YuZ5Lq65ZOhJyxcblx0XHR9KSxcblx0XHRPbmxpbmVXaXRoaW4zME1pbnV0ZXM6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnSGlnaCBwcml2aWxlZ2UgdXNlcnMgb25saW5lIHdpdGhpbiAzMCBtaW51dGVzOicsXG5cdFx0XHRqYTogJzMw5YiG5Lul5YaF44Gr44Kq44Oz44Op44Kk44Oz44Gn6auY5qip6ZmQ5Yip55So6ICF77yaJyxcblx0XHRcdCd6aC1oYW5zJzogJ+S4i+mdouaYr+acgOi/kTMw5YiG6ZKf5YaF5Zyo57q/55qE56uZ5Yqh5Lq65ZGY77yaJyxcblx0XHRcdCd6aC1oYW50JzogJ+S4i+mdouaYr+acgOi/kTMw5YiG6ZCY5YWn55qE57ea5LiK56uZ5YuZ5Lq65ZOh77yaJyxcblx0XHR9KSxcblx0fTtcbn07XG5cbmNvbnN0IGkxOG5NZXNzYWdlcyA9IGdldEkxOG5NZXNzYWdlcygpO1xuXG5jb25zdCBnZXRNZXNzYWdlOiBHZXRNZXNzYWdlczx0eXBlb2YgaTE4bk1lc3NhZ2VzPiA9IChrZXkpID0+IHtcblx0cmV0dXJuIGkxOG5NZXNzYWdlc1trZXldIHx8IGtleTtcbn07XG5cbmV4cG9ydCB7Z2V0TWVzc2FnZX07XG4iLCAiY29uc3QgQkxBQ0tfTElTVDogc3RyaW5nW10gPSBbJ+a7peeUqOi/h+a7pOWZqCddO1xuXG5leHBvcnQge0JMQUNLX0xJU1R9O1xuIiwgIntcblx0XCJ2ZXJzaW9uXCI6IFwiMi4wXCJcbn1cbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoYE9ubGluZUFkbWlucy8ke09QVElPTlMudmVyc2lvbn1gKTtcblxuZXhwb3J0IHthcGl9O1xuIiwgImltcG9ydCB7Z3JvdXBMaXN0RWxlbWVudCwgbGlzdFRpdGxlfSBmcm9tICcuL2NvbXBvbmVudHMvZ3JvdXBMaXN0JztcbmltcG9ydCB7QkxBQ0tfTElTVH0gZnJvbSAnLi9jb25zdGFudCc7XG5pbXBvcnQge2FwaX0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuL2kxOG4nO1xuXG5jb25zdCBkb0NsaWNrID0gYXN5bmMgKGV2ZW50OiBKUXVlcnkuQ2xpY2tFdmVudDxIVE1MQW5jaG9yRWxlbWVudD4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRsZXQgdXNlcnM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHVzZXJzRXh0OiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBzdGV3YXJkczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgYWRtaW5zOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBwYXRyb2xsZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGNvbnN0IHRpbWU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCByY3N0YXJ0OiBzdHJpbmcgPSB0aW1lLnRvSVNPU3RyaW5nKCk7XG5cdHRpbWUuc2V0TWludXRlcyh0aW1lLmdldE1pbnV0ZXMoKSAtIDMwKTsgLy8g5pyA6L+R5pu05pS5MzDliIbpkp/lhoXnmoTnvJbovpHnlKjmiLdcblx0Y29uc3QgcmNlbmQ6IHN0cmluZyA9IHRpbWUudG9JU09TdHJpbmcoKTtcblxuXHR0cnkge1xuXHRcdGNvbnN0IHJlY2VudGNoYW5nZXNQYXJhbXM6IEFwaVF1ZXJ5UmVjZW50Q2hhbmdlc1BhcmFtcyA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0bGlzdDogJ3JlY2VudGNoYW5nZXMnLFxuXHRcdFx0cmNwcm9wOiAndXNlcicsXG5cdFx0XHRyY3Nob3c6IFsnIWJvdCcsICchYW5vbiddLFxuXHRcdFx0cmNsaW1pdDogNTAwLFxuXHRcdFx0cmNzdGFydCxcblx0XHRcdHJjZW5kLFxuXHRcdH07XG5cdFx0Y29uc3QgcmVjZW50Y2hhbmdlcyA9IGF3YWl0IGFwaS5nZXQocmVjZW50Y2hhbmdlc1BhcmFtcyk7XG5cblx0XHRmb3IgKGNvbnN0IHt1c2VyfSBvZiByZWNlbnRjaGFuZ2VzWydxdWVyeSddLnJlY2VudGNoYW5nZXMgYXMge3VzZXI6IHN0cmluZ31bXSkge1xuXHRcdFx0dXNlcnNbdXNlcnMubGVuZ3RoXSA9IHVzZXI7IC8vIFJlcGxhY2UgYFtdLnB1c2goKWAgdG8gYXZvaWQgcG9seWZpbGxpbmcgY29yZS1qc1xuXHRcdH1cblx0XHRjb25zdCBsb2dldmVudHNQYXJhbXM6IEFwaVF1ZXJ5TG9nRXZlbnRzUGFyYW1zID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRsaXN0OiAnbG9nZXZlbnRzJyxcblx0XHRcdGxlcHJvcDogJ3VzZXInLFxuXHRcdFx0bGVsaW1pdDogNTAwLFxuXHRcdFx0bGVzdGFydDogcmNzdGFydCxcblx0XHRcdGxlZW5kOiByY2VuZCxcblx0XHR9O1xuXHRcdGNvbnN0IGxvZ2V2ZW50cyA9IGF3YWl0IGFwaS5nZXQobG9nZXZlbnRzUGFyYW1zKTtcblxuXHRcdGZvciAoY29uc3Qge3VzZXJ9IG9mIGxvZ2V2ZW50c1sncXVlcnknXS5sb2dldmVudHMgYXMge3VzZXI6IHN0cmluZ31bXSkge1xuXHRcdFx0dXNlcnNFeHRbdXNlcnNFeHQubGVuZ3RoXSA9IHVzZXI7XG5cdFx0fVxuXG5cdFx0dXNlcnMgPSBbLi4ubmV3IFNldChbLi4udXNlcnMsIC4uLnVzZXJzRXh0XSldOyAvLyDnlKjmiLflkI3liJfooajlkIjlubbjgIHljrvph43jgIHliIblibJcblxuXHRcdGNvbnN0IHByb21pc2VzOiAoKCkgPT4gUHJvbWlzZTx2b2lkPilbXSA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB1c2Vycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgdXN1c2VycyA9IHVzZXJzLnNwbGljZSgwLCA1MCk7XG5cdFx0XHRwcm9taXNlc1twcm9taXNlcy5sZW5ndGhdID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJhbXM6IEFwaVF1ZXJ5VXNlcnNQYXJhbXMgPSB7XG5cdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdFx0XHRsaXN0OiAndXNlcnMnLFxuXHRcdFx0XHRcdHVzdXNlcnMsXG5cdFx0XHRcdFx0dXNwcm9wOiAnZ3JvdXBzJyxcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZ2V0KHBhcmFtcyk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCB7Z3JvdXBzLCBuYW1lfSBvZiByZXNwb25zZVsncXVlcnknXS51c2VycyBhcyB7Z3JvdXBzOiBzdHJpbmdbXTsgbmFtZTogc3RyaW5nfVtdKSB7XG5cdFx0XHRcdFx0Ly8g5om+5Yiw566h55CG5Lq65ZGY77yM5Y676Zmk5py65Zmo5Lq677yM5raI6ZmkbmFtZeeahOepuuWAvFxuXHRcdFx0XHRcdGlmIChncm91cHMuaW5jbHVkZXMoJ2JvdCcpIHx8IEJMQUNLX0xJU1QuaW5jbHVkZXMobmFtZSkgfHwgIW5hbWUpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZ3JvdXBzLmluY2x1ZGVzKCdzdGV3YXJkJykpIHtcblx0XHRcdFx0XHRcdHN0ZXdhcmRzW3N0ZXdhcmRzLmxlbmd0aF0gPSBuYW1lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZ3JvdXBzLmluY2x1ZGVzKCdzeXNvcCcpKSB7XG5cdFx0XHRcdFx0XHRhZG1pbnNbYWRtaW5zLmxlbmd0aF0gPSBuYW1lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZ3JvdXBzLmluY2x1ZGVzKCdwYXRyb2xsZXInKSkge1xuXHRcdFx0XHRcdFx0cGF0cm9sbGVyc1twYXRyb2xsZXJzLmxlbmd0aF0gPSBuYW1lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Ly8g5p+l6K+i55So5oi35p2D6ZmQXG5cdFx0Zm9yIChjb25zdCBwcm9taXNlIG9mIHByb21pc2VzKSB7XG5cdFx0XHRhd2FpdCBwcm9taXNlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHN0ZXdhcmRzLmxlbmd0aCArIGFkbWlucy5sZW5ndGggKyBwYXRyb2xsZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50W10gPSBbbGlzdFRpdGxlKCldO1xuXG5cdFx0XHRpZiAoc3Rld2FyZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRlbGVtZW50c1tlbGVtZW50cy5sZW5ndGhdID0gZ3JvdXBMaXN0RWxlbWVudChnZXRNZXNzYWdlKCdTdGV3YXJkcycpLCBzdGV3YXJkcyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYWRtaW5zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoXSA9IGdyb3VwTGlzdEVsZW1lbnQoZ2V0TWVzc2FnZSgnQWRtaW5zJyksIGFkbWlucyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGF0cm9sbGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aF0gPSBncm91cExpc3RFbGVtZW50KGdldE1lc3NhZ2UoJ1BhdHJvbGxlcnMnKSwgcGF0cm9sbGVycyk7XG5cdFx0XHR9XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSgkKCc8ZGl2PicpLmFwcGVuZChlbGVtZW50cyksIHt0YWc6ICdvbmxpbmVBZG1pbnMnfSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZvaWQgbXcubm90aWZ5KGdldE1lc3NhZ2UoJ05vT25saW5lJyksIHtcblx0XHRcdFx0dGFnOiAnb25saW5lQWRtaW5zJyxcblx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9IGNhdGNoIHtcblx0XHR2b2lkIG13Lm5vdGlmeShnZXRNZXNzYWdlKCdOZXR3b3JrIGVycm9yJyksIHt0YWc6ICdvbmxpbmVBZG1pbnMnLCB0eXBlOiAnZXJyb3InfSk7XG5cdH1cbn07XG5cbmV4cG9ydCB7ZG9DbGlja307XG4iLCAiaW1wb3J0IHtkb0NsaWNrfSBmcm9tICcuL21vZHVsZXMvZG9DbGljayc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4vbW9kdWxlcy9pMThuJztcblxuY29uc3QgYWRkUG9ydGxldExpbmsgPSAoKTogdm9pZCA9PiB7XG5cdC8vIENyZWF0ZSBwb3J0bGV0IGxpbmtcblx0Y29uc3QgcG9ydGxldElkOiAncC1jYWN0aW9ucycgfCAncC10YicgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcC1jYWN0aW9ucycpID8gJ3AtY2FjdGlvbnMnIDogJ3AtdGInO1xuXHRjb25zdCBlbGVtZW50OiBIVE1MTElFbGVtZW50IHwgbnVsbCA9IG13LnV0aWwuYWRkUG9ydGxldExpbmsocG9ydGxldElkLCAnIycsIGdldE1lc3NhZ2UoJ09ubGluZScpLCAndC1vbmxpbmVhZG1pbicpO1xuXHRpZiAoIWVsZW1lbnQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBCaW5kIGNsaWNrIGxpc3RlbmVyXG5cdCQoZWxlbWVudClcblx0XHQuZmluZCgnYScpXG5cdFx0Lm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuXHRcdFx0dm9pZCBkb0NsaWNrKGV2ZW50KTtcblx0XHR9KTtcbn07XG5cbiQoYWRkUG9ydGxldExpbmspO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw2RkFBQUEsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6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QUFDO01BQ0Y7SUFDRCxRQUFRO0FBQ1AsV0FBS3hGLEdBQUdvRixPQUFPOUYsV0FBVyxlQUFlLEdBQUc7UUFBQ2lHLEtBQUs7UUFBZ0JDLE1BQU07TUFBTyxDQUFDO0lBQ2pGO0VBQ0QsQ0FBQTtBQUFBLFNBQUEsU0E1R01sRSxTQUFBbUUsSUFBQTtBQUFBLFdBQUFsRSxLQUFBbUUsTUFBQSxNQUFBQyxTQUFBO0VBQUE7QUFBQSxFQUFBOztBQ0ZOLElBQU1DLGlCQUFpQkEsTUFBWTtBQUVsQyxRQUFNQyxZQUFtQ0MsU0FBU0MsY0FBYyxhQUFhLElBQUksZUFBZTtBQUNoRyxRQUFNQyxVQUFnQ2hHLEdBQUdDLEtBQUsyRixlQUFlQyxXQUFXLEtBQUt2RyxXQUFXLFFBQVEsR0FBRyxlQUFlO0FBQ2xILE1BQUksQ0FBQzBHLFNBQVM7QUFDYjtFQUNEO0FBR0FYLElBQUVXLE9BQU8sRUFDUEMsS0FBSyxHQUFHLEVBQ1JDLEdBQUcsU0FBVXpFLFdBQVU7QUFDdkIsU0FBS0gsUUFBUUcsS0FBSztFQUNuQixDQUFDO0FBQ0g7QUFFQTRELEVBQUVPLGNBQWM7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgInZlcnNpb24iLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAiU2V0IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICIkIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAic2VjdGlvbiIsICJzZWN0aW9uTGlzdCIsICJ0YWxrUGFnZUxpbmsiLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgIl9fdG9FU00iLCAicmVxdWlyZSIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJnZXRJMThuTWVzc2FnZXMiLCAibG9jYWxpemUiLCAiZW4iLCAiamEiLCAiQWRtaW5zIiwgIlBhdHJvbGxlcnMiLCAiU3Rld2FyZHMiLCAiTm9PbmxpbmUiLCAiT25saW5lIiwgIk9ubGluZVdpdGhpbjMwTWludXRlcyIsICJpMThuTWVzc2FnZXMiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAic2FuaXRpemUiLCAic3RyaW5nIiwgInJlcGxhY2UiLCAiVXNlckxpbmsiLCAidXNlck5hbWUiLCAiZGVmYXVsdCIsICJjcmVhdGVFbGVtZW50IiwgImhyZWYiLCAibXciLCAidXRpbCIsICJnZXRVcmwiLCAiY29uY2F0IiwgInJlbCIsICJ0YXJnZXQiLCAiY2xhc3NOYW1lIiwgIm9ubGluZUNvdW50VGV4dCIsICJHcm91cExpc3QiLCAiZ3JvdXBOYW1lIiwgInVzZXJOYW1lcyIsICJTdHJpbmciLCAibGVuZ3RoIiwgIm1hcCIsICJ1c2VyIiwgImdyb3VwTGlzdEVsZW1lbnQiLCAibGlzdFRpdGxlIiwgIkJMQUNLX0xJU1QiLCAidmVyc2lvbiIsICJpbXBvcnRfZXh0X2dhZGdldDMiLCAiYXBpIiwgImluaXRNd0FwaSIsICJkb0NsaWNrIiwgIl9yZWYiLCAiX2FzeW5jVG9HZW5lcmF0b3IiLCAiZXZlbnQiLCAicHJldmVudERlZmF1bHQiLCAidXNlcnMiLCAidXNlcnNFeHQiLCAic3Rld2FyZHMiLCAiYWRtaW5zIiwgInBhdHJvbGxlcnMiLCAidGltZSIsICJEYXRlIiwgInJjc3RhcnQiLCAidG9JU09TdHJpbmciLCAic2V0TWludXRlcyIsICJnZXRNaW51dGVzIiwgInJjZW5kIiwgInJlY2VudGNoYW5nZXNQYXJhbXMiLCAiYWN0aW9uIiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgImxpc3QiLCAicmNwcm9wIiwgInJjc2hvdyIsICJyY2xpbWl0IiwgInJlY2VudGNoYW5nZXMiLCAiZ2V0IiwgIl9pdGVyYXRvcjIiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAyIiwgInMiLCAibiIsICJkb25lIiwgInZhbHVlIiwgImVyciIsICJlIiwgImYiLCAibG9nZXZlbnRzUGFyYW1zIiwgImxlcHJvcCIsICJsZWxpbWl0IiwgImxlc3RhcnQiLCAibGVlbmQiLCAibG9nZXZlbnRzIiwgIl9pdGVyYXRvcjMiLCAiX3N0ZXAzIiwgIlNldCIsICJwcm9taXNlcyIsICJpIiwgInVzdXNlcnMiLCAic3BsaWNlIiwgInBhcmFtcyIsICJ1c3Byb3AiLCAicmVzcG9uc2UiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAiZ3JvdXBzIiwgIm5hbWUiLCAiaW5jbHVkZXMiLCAiX2kiLCAiX3Byb21pc2VzIiwgInByb21pc2UiLCAiZWxlbWVudHMiLCAibm90aWZ5IiwgIiQiLCAiYXBwZW5kIiwgInRhZyIsICJ0eXBlIiwgIl94IiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJhZGRQb3J0bGV0TGluayIsICJwb3J0bGV0SWQiLCAiZG9jdW1lbnQiLCAicXVlcnlTZWxlY3RvciIsICJlbGVtZW50IiwgImZpbmQiLCAib24iXQp9Cg== diff --git a/dist/PrintOptions/PrintOptions.js b/dist/PrintOptions/PrintOptions.js index e37127b9..424e605a 100644 --- a/dist/PrintOptions/PrintOptions.js +++ b/dist/PrintOptions/PrintOptions.js @@ -54,9 +54,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -70,9 +70,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -84,9 +84,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -97,9 +97,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -110,9 +110,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -122,9 +122,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -136,9 +136,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -151,9 +151,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -167,9 +167,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -180,9 +180,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -197,9 +197,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -207,9 +207,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -220,9 +220,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -232,9 +232,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -245,9 +245,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -256,9 +256,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -271,18 +271,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -291,9 +291,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -318,9 +318,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -334,18 +334,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -361,9 +361,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -376,9 +376,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -390,9 +390,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -403,9 +403,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -421,17 +421,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -446,9 +446,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -456,18 +456,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -476,9 +476,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -488,9 +488,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -501,9 +501,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -515,9 +515,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -537,9 +537,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -565,9 +565,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -578,9 +578,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -592,9 +592,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -609,9 +609,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -634,9 +634,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -650,9 +650,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -664,9 +664,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -710,9 +710,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -726,9 +726,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -746,9 +746,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -763,9 +763,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -774,9 +774,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -787,17 +787,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -870,9 +870,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -925,9 +925,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -960,9 +960,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -973,9 +973,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -985,9 +985,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -999,9 +999,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -1012,9 +1012,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -1023,9 +1023,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1058,9 +1058,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1082,9 +1082,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1098,9 +1098,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1111,17 +1111,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1137,9 +1137,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1159,9 +1159,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1180,9 +1180,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1223,9 +1223,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1234,9 +1234,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1261,9 +1261,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1274,9 +1274,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -1604,4 +1604,4 @@ $(function PrintOptions() { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgInNyYy9QcmludE9wdGlvbnMvUHJpbnRPcHRpb25zLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xubGV0IHdpbmRvd01hbmFnZXI7XG5sZXQgcHJpbnREaWFsb2c7XG5cbmNvbnN0IHByaW50T3B0aW9uc01haW4gPSB7XG5cdGluc3RhbGw6ICgpID0+IHtcblx0XHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0XHRjb25zdCAkcHJpbnRMaW5rID0gJGJvZHkuZmluZCgnI3QtcHJpbnQgYScpO1xuXHRcdGlmICgkcHJpbnRMaW5rLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQkcHJpbnRMaW5rXG5cdFx0XHQub2ZmKCdjbGljaycpXG5cdFx0XHQuZ2V0KDApXG5cdFx0XHQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0J2NsaWNrJyxcblx0XHRcdFx0KGUpID0+IHtcblx0XHRcdFx0XHRwcmludE9wdGlvbnNNYWluLmNyZWF0ZVdpbmRvdygpO1xuXHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpOyAvLyBVc2UgY2FwdHVyaW5nIHBoYXNlLCB0byBiZWF0IHRoZSBvdGhlciBjbGljayBsaXN0ZW5lclxuXHR9LFxuXHRjcmVhdGVXaW5kb3c6ICgpID0+IHtcblx0XHRjb25zdCBQcmludERpYWxvZyA9IGZ1bmN0aW9uIChjb25maWcpIHtcblx0XHRcdFByaW50RGlhbG9nLnN1cGVyLmNhbGwodGhpcywgY29uZmlnKTtcblx0XHR9O1xuXHRcdE9PLmluaGVyaXRDbGFzcyhQcmludERpYWxvZywgT08udWkuUHJvY2Vzc0RpYWxvZyk7XG5cdFx0UHJpbnREaWFsb2cuc3RhdGljLm5hbWUgPSAncHJpbnRkaWFsb2cnO1xuXHRcdFByaW50RGlhbG9nLnN0YXRpYy50aXRsZSA9IGAke3dpbmRvdy53Z1VMUygn5omTJywgJ+WIlycpfeWNsOatpCR7d2luZG93LndnVUxTKCfpobUnLCAn6aCBJyl96Z2iYDtcblx0XHRQcmludERpYWxvZy5zdGF0aWMuYWN0aW9ucyA9IFtcblx0XHRcdHthY3Rpb246ICdwcmludCcsIGxhYmVsOiBgJHt3aW5kb3cud2dVTFMoJ+aJkycsICfliJcnKX3ljbBgLCBmbGFnczogWydwcmltYXJ5JywgJ3Byb2dyZXNzaXZlJ119LFxuXHRcdFx0e2xhYmVsOiAn5Y+W5raIJywgZmxhZ3M6IFsnc2FmZScsICdjbG9zZSddfSxcblx0XHRdO1xuXHRcdFByaW50RGlhbG9nLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRcdGxldCBjaGVja2JveDtcblx0XHRcdGNvbnN0IGZpZWxkc2V0ID0gW107XG5cdFx0XHRQcmludERpYWxvZy5zdXBlci5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdHRoaXMucGFuZWwgPSBuZXcgT08udWkuUGFuZWxMYXlvdXQoe1xuXHRcdFx0XHRwYWRkZWQ6IHRydWUsXG5cdFx0XHRcdGV4cGFuZGVkOiBmYWxzZSxcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5jb250ZW50ID0gbmV3IE9PLnVpLkZpZWxkc2V0TGF5b3V0KCk7XG5cdFx0XHRmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHByaW50T3B0aW9uc01haW4ucXVlc3Rpb25zKSB7XG5cdFx0XHRcdGlmIChxdWVzdGlvbi50eXBlID09PSAnY2hlY2tib3gnKSB7XG5cdFx0XHRcdFx0Y2hlY2tib3ggPSBuZXcgT08udWkuQ2hlY2tib3hJbnB1dFdpZGdldCh7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogcXVlc3Rpb24uY2hlY2tlZCxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRxdWVzdGlvbi53aWRnZXQgPSBjaGVja2JveDtcblx0XHRcdFx0XHRmaWVsZHNldC5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IE9PLnVpLkZpZWxkTGF5b3V0KGNoZWNrYm94LCB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBxdWVzdGlvbi5sYWJlbCxcblx0XHRcdFx0XHRcdFx0YWxpZ246ICdpbmxpbmUnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmNvbnRlbnQuYWRkSXRlbXMoZmllbGRzZXQpO1xuXHRcdFx0dGhpcy5wYW5lbC4kZWxlbWVudC5hcHBlbmQodGhpcy5jb250ZW50LiRlbGVtZW50KTtcblx0XHRcdHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMucGFuZWwuJGVsZW1lbnQpO1xuXHRcdH07XG5cdFx0UHJpbnREaWFsb2cucHJvdG90eXBlLmdldEFjdGlvblByb2Nlc3MgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdGlmIChhY3Rpb24gPT09ICdwcmludCcpIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBPTy51aS5Qcm9jZXNzKCgpID0+IHtcblx0XHRcdFx0XHQvLyBHZXQgdmFsdWVzIG9mIGNoZWNrYm94ZXNcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHByaW50T3B0aW9uc01haW4ucXVlc3Rpb25zKSB7XG5cdFx0XHRcdFx0XHRpZiAocXVlc3Rpb24udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBxdWVzdGlvbi53aWRnZXQpIHtcblx0XHRcdFx0XHRcdFx0cHJpbnRPcHRpb25zTWFpbltxdWVzdGlvbi5yZXR1cm52YWx1ZV0gPSBxdWVzdGlvbi53aWRnZXQuaXNTZWxlY3RlZCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzZWxmLmNsb3NlKHthY3Rpb259KS5kb25lKCgpID0+IHtcblx0XHRcdFx0XHRcdHByaW50T3B0aW9uc01haW4uY2hhbmdlUHJpbnRDU1MoKTtcblx0XHRcdFx0XHRcdHByaW50T3B0aW9uc01haW4ub3RoZXJFbmhhbmNlbWVudHMoKTtcblx0XHRcdFx0XHRcdHdpbmRvdy5wcmludCgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBQcmludERpYWxvZy5zdXBlci5wcm90b3R5cGUuZ2V0QWN0aW9uUHJvY2Vzcy5jYWxsKHRoaXMsIGFjdGlvbik7XG5cdFx0fTtcblx0XHRpZiAoIXdpbmRvd01hbmFnZXIpIHtcblx0XHRcdHdpbmRvd01hbmFnZXIgPSBuZXcgT08udWkuV2luZG93TWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdFx0XHQkYm9keS5hcHBlbmQod2luZG93TWFuYWdlci4kZWxlbWVudCk7XG5cdFx0fVxuXHRcdGlmICghcHJpbnREaWFsb2cpIHtcblx0XHRcdHByaW50RGlhbG9nID0gbmV3IFByaW50RGlhbG9nKHtcblx0XHRcdFx0c2l6ZTogJ21lZGl1bScsXG5cdFx0XHR9KTtcblx0XHRcdHdpbmRvd01hbmFnZXIuYWRkV2luZG93cyhbcHJpbnREaWFsb2ddKTtcblx0XHR9XG5cdFx0d2luZG93TWFuYWdlci5vcGVuV2luZG93KHByaW50RGlhbG9nKTtcblx0fSxcblx0Y2hhbmdlUHJpbnRDU1MoKSB7XG5cdFx0LyogSGVyZSB3ZTpcblx0XHQgKiAtIGRpc2FibGUgc3R5bGVzaGVldHMgdGhhdCBhcmUgcHJpbnQgc3BlY2lmaWNcblx0XHQgKiAtIG1ha2Ugc2NyZWVuIHNwZWNpZmljIHN0eWxlc2hlZXRzIGFsc28gZW5hYmxlZCBmb3IgcHJpbnQgbWVkaXVtXG5cdFx0ICogLSByZW1vdmUgcHJpbnQgc3BlY2lmaWMgc3R5bGVydWxlc1xuXHRcdCAqIC0gbWFrZSBzY3JlZW4gc3BlY2lmaWMgc3R5bGVydWxlcyBhbHNvIGVuYWJsZWQgZm9yIHByaW50IG1lZGl1bVxuXHRcdCAqL1xuXHRcdGxldCBwcmludFN0eWxlID0gJyc7XG5cdFx0aWYgKHRoaXMuZW5oYW5jZWQgPT09IGZhbHNlKSB7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBqO1xuXHRcdFx0bGV0IGs7XG5cdFx0XHRsZXQgcnVsZTtcblx0XHRcdGxldCBoYXNQcmludDtcblx0XHRcdGxldCBoYXNTY3JlZW47XG5cdFx0XHRsZXQgcnVsZXM7XG5cdFx0XHRsZXQgc3R5bGVzaGVldDtcblx0XHRcdGNvbnN0IHN0eWxlc2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldHM7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgc3R5bGVzaGVldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c3R5bGVzaGVldCA9IHN0eWxlc2hlZXRzW2ldO1xuXHRcdFx0XHRpZiAoIXN0eWxlc2hlZXQubWVkaWEpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc3R5bGVzaGVldC5tZWRpYS5tZWRpYVRleHQgJiYgc3R5bGVzaGVldC5tZWRpYS5tZWRpYVRleHQuaW5jbHVkZXMoJ3ByaW50JykpIHtcblx0XHRcdFx0XHRpZiAoIXN0eWxlc2hlZXQubWVkaWEubWVkaWFUZXh0LmluY2x1ZGVzKCdzY3JlZW4nKSkge1xuXHRcdFx0XHRcdFx0c3R5bGVzaGVldC5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdHN0eWxlc2hlZXQubWVkaWEubWVkaWFUZXh0ICYmXG5cdFx0XHRcdFx0c3R5bGVzaGVldC5tZWRpYS5tZWRpYVRleHQuaW5jbHVkZXMoJ3NjcmVlbicpICYmXG5cdFx0XHRcdFx0IXN0eWxlc2hlZXQubWVkaWEubWVkaWFUZXh0LmluY2x1ZGVzKCdwcmludCcpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRzdHlsZXNoZWV0Lm1lZGlhLmFwcGVuZE1lZGl1bSgncHJpbnQnKTtcblx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdHN0eWxlc2hlZXQubWVkaWEubWVkaWFUZXh0ICs9ICcscHJpbnQnO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvKiBub3cgdGVzdCBpbmRpdmlkdWFsIHN0eWxlc2hlZXQgcnVsZXMgKi9cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRydWxlcyA9IHN0eWxlc2hlZXQuY3NzUnVsZXMgfHwgc3R5bGVzaGVldC5ydWxlcztcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0LyogQ3Jvc3MgZG9tYWluIGlzc3VlLiAqL1xuXHRcdFx0XHRcdG13LmxvZy53YXJuKCdOb3QgcG9zc2libGUgdG8gY29ycmVjdCBzdHlsZXNoZWV0IGR1ZSB0byBjcm9zcyBvcmlnaW4gcmVzdHJpY3Rpb25zLicpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlc2hlZXQuY29tcGF0ZGVsZXRlID0gc3R5bGVzaGVldC5kZWxldGVSdWxlIHx8IHN0eWxlc2hlZXQucmVtb3ZlUnVsZTtcblx0XHRcdFx0aWYgKHJ1bGVzKSB7XG5cdFx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IHJ1bGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRydWxlID0gcnVsZXNbal07XG5cdFx0XHRcdFx0XHRoYXNQcmludCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0aGFzU2NyZWVuID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAocnVsZS50eXBlID09PSBDU1NSdWxlLk1FRElBX1JVTEUgJiYgcnVsZS5tZWRpYSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGsgPSAwOyBrIDwgcnVsZS5tZWRpYS5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChydWxlLm1lZGlhW2tdID09PSAncHJpbnQnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRoYXNQcmludCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChydWxlLm1lZGlhW2tdID09PSAnc2NyZWVuJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFzU2NyZWVuID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGhhc1ByaW50ICYmICFoYXNTY3JlZW4pIHtcblx0XHRcdFx0XHRcdFx0c3R5bGVzaGVldC5jb21wYXRkZWxldGUoaik7XG5cdFx0XHRcdFx0XHRcdGotLTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaGFzU2NyZWVuICYmICFoYXNQcmludCkge1xuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdHJ1bGUubWVkaWEuYXBwZW5kTWVkaXVtKCdwcmludCcpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRydWxlLm1lZGlhLm1lZGlhVGV4dCArPSAnLHByaW50Jztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiBBZGQgY3NzIHRvIGhpZGUgaW1hZ2VzICovXG5cdFx0aWYgKHRoaXMubm9pbWFnZXMpIHtcblx0XHRcdHByaW50U3R5bGUgKz0gJ2ltZywudGh1bWJ7ZGlzcGxheTpub25lfSc7XG5cdFx0fVxuXHRcdC8qIEFkZCBjc3MgdG8gaGlkZSByZWZlcmVuY2VzIG1hcmtlcnMgYW5kIHRoZSByZWZlcmVuY2VzIGxpc3RzICovXG5cdFx0aWYgKHRoaXMubm9yZWZzKSB7XG5cdFx0XHRwcmludFN0eWxlICs9ICcubXctaGVhZGxpbmVbaWQ9XCJSZWZlcmVuY2VzXCJdLG9sLnJlZmVyZW5jZXMsLnJlZmVyZW5jZXtkaXNwbGF5Om5vbmV9Jztcblx0XHR9XG5cdFx0aWYgKHRoaXMubm90b2MpIHtcblx0XHRcdHByaW50U3R5bGUgKz0gJyN0b2MsLnRvY3tkaXNwbGF5Om5vbmV9Jztcblx0XHR9XG5cdFx0aWYgKHRoaXMubm9iYWNrZ3JvdW5kKSB7XG5cdFx0XHRwcmludFN0eWxlICs9ICcqe2JhY2tncm91bmQ6bm9uZSAhaW1wb3J0YW50fSc7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmJsYWNrdGV4dCkge1xuXHRcdFx0cHJpbnRTdHlsZSArPSAnKntjb2xvcjojMDAwICFpbXBvcnRhbnR9Jztcblx0XHR9XG5cdFx0aWYgKHByaW50U3R5bGUpIHtcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwcmludFN0eWxlJyk/LnJlbW92ZSgpO1xuXHRcdFx0Y29uc3Qgc3R5bGVUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXHRcdFx0c3R5bGVUYWcuaWQgPSAncHJpbnRTdHlsZSc7XG5cdFx0XHRzdHlsZVRhZy5tZWRpYSA9ICdwcmludCc7XG5cdFx0XHRzdHlsZVRhZy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocHJpbnRTdHlsZSkpO1xuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGVUYWcpO1xuXHRcdH1cblx0fSxcblx0LyogUmV3cml0ZSB0aGUgXCJyZXRyaWV2ZWQgZnJvbVwiIHVybCB0byBiZSByZWFkYWJsZSAqL1xuXHRvdGhlckVuaGFuY2VtZW50czogKCkgPT4ge1xuXHRcdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHRcdGNvbnN0IGxpbmsgPSAkYm9keS5maW5kKCdkaXYucHJpbnRmb290ZXIgYScpO1xuXHRcdGxpbmsudGV4dChkZWNvZGVVUkkobGluay50ZXh0KCkpKTtcblx0fSxcblx0cXVlc3Rpb25zOiBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICfpmpDol4/nlYzpnaLlhYPntKAnLFxuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRyZXR1cm52YWx1ZTogJ2VuaGFuY2VkJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAn6ZqQ6JeP5Zu+54mHJyxcblx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRjaGVja2VkOiBmYWxzZSxcblx0XHRcdHJldHVybnZhbHVlOiAnbm9pbWFnZXMnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICfpmpDol4/lj4LogIPmlofnjK4nLFxuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0cmV0dXJudmFsdWU6ICdub3JlZnMnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICfpmpDol4/nm67lvZUnLFxuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0cmV0dXJudmFsdWU6ICdub3RvYycsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ+enu+mZpOiDjOaZr++8iOaCqOeahOa1j+iniOWZqOaIluWPr+S7peimhuebluacrOiuvue9ru+8iScsXG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0Y2hlY2tlZDogZmFsc2UsXG5cdFx0XHRyZXR1cm52YWx1ZTogJ25vYmFja2dyb3VuZCcsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ+W8uuWItuWwhuaJgOacieaWh+Wtl+iuvue9ruS4uum7keiJsicsXG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdHJldHVybnZhbHVlOiAnYmxhY2t0ZXh0Jyxcblx0XHR9LFxuXHRdLFxufTtcblxuJChmdW5jdGlvbiBQcmludE9wdGlvbnMoKSB7XG5cdGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHQvLyBUaGlzIGNhbiBiZSBiZWZvcmUgdGhlIGNsaWNrIGxpc3RlbmVyIGJ5IE1XIGlzIGluc3RhbGxlZC4gSW5zdGVhZCxcblx0Ly8gcmUtYWRkIG91cnNlbHZlcyB0byB0aGUgYmFjayBvZiB0aGUgZG9jdW1lbnQucmVhZHkgbGlzdFxuXHQvLyB1c2UgYXN5bmMgdGltZW91dGUgdG8gZG8gdGhpc1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHQkKHByaW50T3B0aW9uc01haW4uaW5zdGFsbCk7XG5cdH0sIDApO1xufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPLFdBQVEsWUFBWSxPQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSx1RkFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsNkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUdaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxhQUFPLE9BQU8sZUFBZSxDQUFD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ICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAid2luZG93TWFuYWdlciIsICJwcmludERpYWxvZyIsICJwcmludE9wdGlvbnNNYWluIiwgImluc3RhbGwiLCAiJGJvZHkiLCAiJCIsICIkcHJpbnRMaW5rIiwgImZpbmQiLCAibGVuZ3RoIiwgIm9mZiIsICJnZXQiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJlIiwgImNyZWF0ZVdpbmRvdyIsICJzdG9wUHJvcGFnYXRpb24iLCAicHJldmVudERlZmF1bHQiLCAiUHJpbnREaWFsb2ciLCAiY29uZmlnIiwgInN1cGVyIiwgImNhbGwiLCAiT08iLCAiaW5oZXJpdENsYXNzIiwgInVpIiwgIlByb2Nlc3NEaWFsb2ciLCAic3RhdGljIiwgIm5hbWUiLCAidGl0bGUiLCAiY29uY2F0IiwgIndpbmRvdyIsICJ3Z1VMUyIsICJhY3Rpb25zIiwgImFjdGlvbiIsICJsYWJlbCIsICJmbGFncyIsICJwcm90b3R5cGUiLCAiaW5pdGlhbGl6ZSIsICJhcmdzIiwgImNoZWNrYm94IiwgImZpZWxkc2V0IiwgImFwcGx5IiwgInBhbmVsIiwgIlBhbmVsTGF5b3V0IiwgInBhZGRlZCIsICJleHBhbmRlZCIsICJjb250ZW50IiwgIkZpZWxkc2V0TGF5b3V0IiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJxdWVzdGlvbnMiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAicXVlc3Rpb24iLCAidmFsdWUiLCAidHlwZSIsICJDaGVja2JveElucHV0V2lkZ2V0IiwgInNlbGVjdGVkIiwgImNoZWNrZWQiLCAid2lkZ2V0IiwgInB1c2giLCAiRmllbGRMYXlvdXQiLCAiYWxpZ24iLCAiZXJyIiwgImYiLCAiYWRkSXRlbXMiLCAiJGVsZW1lbnQiLCAiYXBwZW5kIiwgImdldEFjdGlvblByb2Nlc3MiLCAic2VsZiIsICJQcm9jZXNzIiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgInJldHVybnZhbHVlIiwgImlzU2VsZWN0ZWQiLCAiY2xvc2UiLCAiY2hhbmdlUHJpbnRDU1MiLCAib3RoZXJFbmhhbmNlbWVudHMiLCAicHJpbnQiLCAiV2luZG93TWFuYWdlciIsICJzaXplIiwgImFkZFdpbmRvd3MiLCAib3BlbldpbmRvdyIsICJwcmludFN0eWxlIiwgImVuaGFuY2VkIiwgImkiLCAiaiIsICJrIiwgInJ1bGUiLCAiaGFzUHJpbnQiLCAiaGFzU2NyZWVuIiwgInJ1bGVzIiwgInN0eWxlc2hlZXQiLCAic3R5bGVzaGVldHMiLCAiZG9jdW1lbnQiLCAic3R5bGVTaGVldHMiLCAibWVkaWEiLCAibWVkaWFUZXh0IiwgImluY2x1ZGVzIiwgImRpc2FibGVkIiwgImFwcGVuZE1lZGl1bSIsICJjc3NSdWxlcyIsICJtdyIsICJsb2ciLCAid2FybiIsICJjb21wYXRkZWxldGUiLCAiZGVsZXRlUnVsZSIsICJyZW1vdmVSdWxlIiwgIkNTU1J1bGUiLCAiTUVESUFfUlVMRSIsICJub2ltYWdlcyIsICJub3JlZnMiLCAibm90b2MiLCAibm9iYWNrZ3JvdW5kIiwgImJsYWNrdGV4dCIsICJfZG9jdW1lbnQkcXVlcnlTZWxlY3QiLCAicXVlcnlTZWxlY3RvciIsICJyZW1vdmUiLCAic3R5bGVUYWciLCAiY3JlYXRlRWxlbWVudCIsICJpZCIsICJjcmVhdGVUZXh0Tm9kZSIsICJoZWFkIiwgImxpbmsiLCAidGV4dCIsICJkZWNvZGVVUkkiLCAiUHJpbnRPcHRpb25zIiwgInNldFRpbWVvdXQiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgInNyYy9QcmludE9wdGlvbnMvUHJpbnRPcHRpb25zLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xubGV0IHdpbmRvd01hbmFnZXI7XG5sZXQgcHJpbnREaWFsb2c7XG5cbmNvbnN0IHByaW50T3B0aW9uc01haW4gPSB7XG5cdGluc3RhbGw6ICgpID0+IHtcblx0XHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0XHRjb25zdCAkcHJpbnRMaW5rID0gJGJvZHkuZmluZCgnI3QtcHJpbnQgYScpO1xuXHRcdGlmICgkcHJpbnRMaW5rLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQkcHJpbnRMaW5rXG5cdFx0XHQub2ZmKCdjbGljaycpXG5cdFx0XHQuZ2V0KDApXG5cdFx0XHQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0J2NsaWNrJyxcblx0XHRcdFx0KGUpID0+IHtcblx0XHRcdFx0XHRwcmludE9wdGlvbnNNYWluLmNyZWF0ZVdpbmRvdygpO1xuXHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpOyAvLyBVc2UgY2FwdHVyaW5nIHBoYXNlLCB0byBiZWF0IHRoZSBvdGhlciBjbGljayBsaXN0ZW5lclxuXHR9LFxuXHRjcmVhdGVXaW5kb3c6ICgpID0+IHtcblx0XHRjb25zdCBQcmludERpYWxvZyA9IGZ1bmN0aW9uIChjb25maWcpIHtcblx0XHRcdFByaW50RGlhbG9nLnN1cGVyLmNhbGwodGhpcywgY29uZmlnKTtcblx0XHR9O1xuXHRcdE9PLmluaGVyaXRDbGFzcyhQcmludERpYWxvZywgT08udWkuUHJvY2Vzc0RpYWxvZyk7XG5cdFx0UHJpbnREaWFsb2cuc3RhdGljLm5hbWUgPSAncHJpbnRkaWFsb2cnO1xuXHRcdFByaW50RGlhbG9nLnN0YXRpYy50aXRsZSA9IGAke3dpbmRvdy53Z1VMUygn5omTJywgJ+WIlycpfeWNsOatpCR7d2luZG93LndnVUxTKCfpobUnLCAn6aCBJyl96Z2iYDtcblx0XHRQcmludERpYWxvZy5zdGF0aWMuYWN0aW9ucyA9IFtcblx0XHRcdHthY3Rpb246ICdwcmludCcsIGxhYmVsOiBgJHt3aW5kb3cud2dVTFMoJ+aJkycsICfliJcnKX3ljbBgLCBmbGFnczogWydwcmltYXJ5JywgJ3Byb2dyZXNzaXZlJ119LFxuXHRcdFx0e2xhYmVsOiAn5Y+W5raIJywgZmxhZ3M6IFsnc2FmZScsICdjbG9zZSddfSxcblx0XHRdO1xuXHRcdFByaW50RGlhbG9nLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRcdGxldCBjaGVja2JveDtcblx0XHRcdGNvbnN0IGZpZWxkc2V0ID0gW107XG5cdFx0XHRQcmludERpYWxvZy5zdXBlci5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdHRoaXMucGFuZWwgPSBuZXcgT08udWkuUGFuZWxMYXlvdXQoe1xuXHRcdFx0XHRwYWRkZWQ6IHRydWUsXG5cdFx0XHRcdGV4cGFuZGVkOiBmYWxzZSxcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5jb250ZW50ID0gbmV3IE9PLnVpLkZpZWxkc2V0TGF5b3V0KCk7XG5cdFx0XHRmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHByaW50T3B0aW9uc01haW4ucXVlc3Rpb25zKSB7XG5cdFx0XHRcdGlmIChxdWVzdGlvbi50eXBlID09PSAnY2hlY2tib3gnKSB7XG5cdFx0XHRcdFx0Y2hlY2tib3ggPSBuZXcgT08udWkuQ2hlY2tib3hJbnB1dFdpZGdldCh7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogcXVlc3Rpb24uY2hlY2tlZCxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRxdWVzdGlvbi53aWRnZXQgPSBjaGVja2JveDtcblx0XHRcdFx0XHRmaWVsZHNldC5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IE9PLnVpLkZpZWxkTGF5b3V0KGNoZWNrYm94LCB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBxdWVzdGlvbi5sYWJlbCxcblx0XHRcdFx0XHRcdFx0YWxpZ246ICdpbmxpbmUnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmNvbnRlbnQuYWRkSXRlbXMoZmllbGRzZXQpO1xuXHRcdFx0dGhpcy5wYW5lbC4kZWxlbWVudC5hcHBlbmQodGhpcy5jb250ZW50LiRlbGVtZW50KTtcblx0XHRcdHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMucGFuZWwuJGVsZW1lbnQpO1xuXHRcdH07XG5cdFx0UHJpbnREaWFsb2cucHJvdG90eXBlLmdldEFjdGlvblByb2Nlc3MgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRcdGlmIChhY3Rpb24gPT09ICdwcmludCcpIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBPTy51aS5Qcm9jZXNzKCgpID0+IHtcblx0XHRcdFx0XHQvLyBHZXQgdmFsdWVzIG9mIGNoZWNrYm94ZXNcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHByaW50T3B0aW9uc01haW4ucXVlc3Rpb25zKSB7XG5cdFx0XHRcdFx0XHRpZiAocXVlc3Rpb24udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBxdWVzdGlvbi53aWRnZXQpIHtcblx0XHRcdFx0XHRcdFx0cHJpbnRPcHRpb25zTWFpbltxdWVzdGlvbi5yZXR1cm52YWx1ZV0gPSBxdWVzdGlvbi53aWRnZXQuaXNTZWxlY3RlZCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzZWxmLmNsb3NlKHthY3Rpb259KS5kb25lKCgpID0+IHtcblx0XHRcdFx0XHRcdHByaW50T3B0aW9uc01haW4uY2hhbmdlUHJpbnRDU1MoKTtcblx0XHRcdFx0XHRcdHByaW50T3B0aW9uc01haW4ub3RoZXJFbmhhbmNlbWVudHMoKTtcblx0XHRcdFx0XHRcdHdpbmRvdy5wcmludCgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBQcmludERpYWxvZy5zdXBlci5wcm90b3R5cGUuZ2V0QWN0aW9uUHJvY2Vzcy5jYWxsKHRoaXMsIGFjdGlvbik7XG5cdFx0fTtcblx0XHRpZiAoIXdpbmRvd01hbmFnZXIpIHtcblx0XHRcdHdpbmRvd01hbmFnZXIgPSBuZXcgT08udWkuV2luZG93TWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdFx0XHQkYm9keS5hcHBlbmQod2luZG93TWFuYWdlci4kZWxlbWVudCk7XG5cdFx0fVxuXHRcdGlmICghcHJpbnREaWFsb2cpIHtcblx0XHRcdHByaW50RGlhbG9nID0gbmV3IFByaW50RGlhbG9nKHtcblx0XHRcdFx0c2l6ZTogJ21lZGl1bScsXG5cdFx0XHR9KTtcblx0XHRcdHdpbmRvd01hbmFnZXIuYWRkV2luZG93cyhbcHJpbnREaWFsb2ddKTtcblx0XHR9XG5cdFx0d2luZG93TWFuYWdlci5vcGVuV2luZG93KHByaW50RGlhbG9nKTtcblx0fSxcblx0Y2hhbmdlUHJpbnRDU1MoKSB7XG5cdFx0LyogSGVyZSB3ZTpcblx0XHQgKiAtIGRpc2FibGUgc3R5bGVzaGVldHMgdGhhdCBhcmUgcHJpbnQgc3BlY2lmaWNcblx0XHQgKiAtIG1ha2Ugc2NyZWVuIHNwZWNpZmljIHN0eWxlc2hlZXRzIGFsc28gZW5hYmxlZCBmb3IgcHJpbnQgbWVkaXVtXG5cdFx0ICogLSByZW1vdmUgcHJpbnQgc3BlY2lmaWMgc3R5bGVydWxlc1xuXHRcdCAqIC0gbWFrZSBzY3JlZW4gc3BlY2lmaWMgc3R5bGVydWxlcyBhbHNvIGVuYWJsZWQgZm9yIHByaW50IG1lZGl1bVxuXHRcdCAqL1xuXHRcdGxldCBwcmludFN0eWxlID0gJyc7XG5cdFx0aWYgKHRoaXMuZW5oYW5jZWQgPT09IGZhbHNlKSB7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBqO1xuXHRcdFx0bGV0IGs7XG5cdFx0XHRsZXQgcnVsZTtcblx0XHRcdGxldCBoYXNQcmludDtcblx0XHRcdGxldCBoYXNTY3JlZW47XG5cdFx0XHRsZXQgcnVsZXM7XG5cdFx0XHRsZXQgc3R5bGVzaGVldDtcblx0XHRcdGNvbnN0IHN0eWxlc2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldHM7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgc3R5bGVzaGVldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c3R5bGVzaGVldCA9IHN0eWxlc2hlZXRzW2ldO1xuXHRcdFx0XHRpZiAoIXN0eWxlc2hlZXQubWVkaWEpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc3R5bGVzaGVldC5tZWRpYS5tZWRpYVRleHQgJiYgc3R5bGVzaGVldC5tZWRpYS5tZWRpYVRleHQuaW5jbHVkZXMoJ3ByaW50JykpIHtcblx0XHRcdFx0XHRpZiAoIXN0eWxlc2hlZXQubWVkaWEubWVkaWFUZXh0LmluY2x1ZGVzKCdzY3JlZW4nKSkge1xuXHRcdFx0XHRcdFx0c3R5bGVzaGVldC5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdHN0eWxlc2hlZXQubWVkaWEubWVkaWFUZXh0ICYmXG5cdFx0XHRcdFx0c3R5bGVzaGVldC5tZWRpYS5tZWRpYVRleHQuaW5jbHVkZXMoJ3NjcmVlbicpICYmXG5cdFx0XHRcdFx0IXN0eWxlc2hlZXQubWVkaWEubWVkaWFUZXh0LmluY2x1ZGVzKCdwcmludCcpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRzdHlsZXNoZWV0Lm1lZGlhLmFwcGVuZE1lZGl1bSgncHJpbnQnKTtcblx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdHN0eWxlc2hlZXQubWVkaWEubWVkaWFUZXh0ICs9ICcscHJpbnQnO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvKiBub3cgdGVzdCBpbmRpdmlkdWFsIHN0eWxlc2hlZXQgcnVsZXMgKi9cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRydWxlcyA9IHN0eWxlc2hlZXQuY3NzUnVsZXMgfHwgc3R5bGVzaGVldC5ydWxlcztcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0LyogQ3Jvc3MgZG9tYWluIGlzc3VlLiAqL1xuXHRcdFx0XHRcdG13LmxvZy53YXJuKCdOb3QgcG9zc2libGUgdG8gY29ycmVjdCBzdHlsZXNoZWV0IGR1ZSB0byBjcm9zcyBvcmlnaW4gcmVzdHJpY3Rpb25zLicpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlc2hlZXQuY29tcGF0ZGVsZXRlID0gc3R5bGVzaGVldC5kZWxldGVSdWxlIHx8IHN0eWxlc2hlZXQucmVtb3ZlUnVsZTtcblx0XHRcdFx0aWYgKHJ1bGVzKSB7XG5cdFx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IHJ1bGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRydWxlID0gcnVsZXNbal07XG5cdFx0XHRcdFx0XHRoYXNQcmludCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0aGFzU2NyZWVuID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAocnVsZS50eXBlID09PSBDU1NSdWxlLk1FRElBX1JVTEUgJiYgcnVsZS5tZWRpYSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGsgPSAwOyBrIDwgcnVsZS5tZWRpYS5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChydWxlLm1lZGlhW2tdID09PSAncHJpbnQnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRoYXNQcmludCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChydWxlLm1lZGlhW2tdID09PSAnc2NyZWVuJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFzU2NyZWVuID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGhhc1ByaW50ICYmICFoYXNTY3JlZW4pIHtcblx0XHRcdFx0XHRcdFx0c3R5bGVzaGVldC5jb21wYXRkZWxldGUoaik7XG5cdFx0XHRcdFx0XHRcdGotLTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaGFzU2NyZWVuICYmICFoYXNQcmludCkge1xuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdHJ1bGUubWVkaWEuYXBwZW5kTWVkaXVtKCdwcmludCcpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRydWxlLm1lZGlhLm1lZGlhVGV4dCArPSAnLHByaW50Jztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiBBZGQgY3NzIHRvIGhpZGUgaW1hZ2VzICovXG5cdFx0aWYgKHRoaXMubm9pbWFnZXMpIHtcblx0XHRcdHByaW50U3R5bGUgKz0gJ2ltZywudGh1bWJ7ZGlzcGxheTpub25lfSc7XG5cdFx0fVxuXHRcdC8qIEFkZCBjc3MgdG8gaGlkZSByZWZlcmVuY2VzIG1hcmtlcnMgYW5kIHRoZSByZWZlcmVuY2VzIGxpc3RzICovXG5cdFx0aWYgKHRoaXMubm9yZWZzKSB7XG5cdFx0XHRwcmludFN0eWxlICs9ICcubXctaGVhZGxpbmVbaWQ9XCJSZWZlcmVuY2VzXCJdLG9sLnJlZmVyZW5jZXMsLnJlZmVyZW5jZXtkaXNwbGF5Om5vbmV9Jztcblx0XHR9XG5cdFx0aWYgKHRoaXMubm90b2MpIHtcblx0XHRcdHByaW50U3R5bGUgKz0gJyN0b2MsLnRvY3tkaXNwbGF5Om5vbmV9Jztcblx0XHR9XG5cdFx0aWYgKHRoaXMubm9iYWNrZ3JvdW5kKSB7XG5cdFx0XHRwcmludFN0eWxlICs9ICcqe2JhY2tncm91bmQ6bm9uZSAhaW1wb3J0YW50fSc7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmJsYWNrdGV4dCkge1xuXHRcdFx0cHJpbnRTdHlsZSArPSAnKntjb2xvcjojMDAwICFpbXBvcnRhbnR9Jztcblx0XHR9XG5cdFx0aWYgKHByaW50U3R5bGUpIHtcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwcmludFN0eWxlJyk/LnJlbW92ZSgpO1xuXHRcdFx0Y29uc3Qgc3R5bGVUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXHRcdFx0c3R5bGVUYWcuaWQgPSAncHJpbnRTdHlsZSc7XG5cdFx0XHRzdHlsZVRhZy5tZWRpYSA9ICdwcmludCc7XG5cdFx0XHRzdHlsZVRhZy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocHJpbnRTdHlsZSkpO1xuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGVUYWcpO1xuXHRcdH1cblx0fSxcblx0LyogUmV3cml0ZSB0aGUgXCJyZXRyaWV2ZWQgZnJvbVwiIHVybCB0byBiZSByZWFkYWJsZSAqL1xuXHRvdGhlckVuaGFuY2VtZW50czogKCkgPT4ge1xuXHRcdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHRcdGNvbnN0IGxpbmsgPSAkYm9keS5maW5kKCdkaXYucHJpbnRmb290ZXIgYScpO1xuXHRcdGxpbmsudGV4dChkZWNvZGVVUkkobGluay50ZXh0KCkpKTtcblx0fSxcblx0cXVlc3Rpb25zOiBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICfpmpDol4/nlYzpnaLlhYPntKAnLFxuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRyZXR1cm52YWx1ZTogJ2VuaGFuY2VkJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAn6ZqQ6JeP5Zu+54mHJyxcblx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRjaGVja2VkOiBmYWxzZSxcblx0XHRcdHJldHVybnZhbHVlOiAnbm9pbWFnZXMnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICfpmpDol4/lj4LogIPmlofnjK4nLFxuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0cmV0dXJudmFsdWU6ICdub3JlZnMnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICfpmpDol4/nm67lvZUnLFxuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0cmV0dXJudmFsdWU6ICdub3RvYycsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ+enu+mZpOiDjOaZr++8iOaCqOeahOa1j+iniOWZqOaIluWPr+S7peimhuebluacrOiuvue9ru+8iScsXG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0Y2hlY2tlZDogZmFsc2UsXG5cdFx0XHRyZXR1cm52YWx1ZTogJ25vYmFja2dyb3VuZCcsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ+W8uuWItuWwhuaJgOacieaWh+Wtl+iuvue9ruS4uum7keiJsicsXG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdHJldHVybnZhbHVlOiAnYmxhY2t0ZXh0Jyxcblx0XHR9LFxuXHRdLFxufTtcblxuJChmdW5jdGlvbiBQcmludE9wdGlvbnMoKSB7XG5cdGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHQvLyBUaGlzIGNhbiBiZSBiZWZvcmUgdGhlIGNsaWNrIGxpc3RlbmVyIGJ5IE1XIGlzIGluc3RhbGxlZC4gSW5zdGVhZCxcblx0Ly8gcmUtYWRkIG91cnNlbHZlcyB0byB0aGUgYmFjayBvZiB0aGUgZG9jdW1lbnQucmVhZHkgbGlzdFxuXHQvLyB1c2UgYXN5bmMgdGltZW91dGUgdG8gZG8gdGhpc1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHQkKHByaW50T3B0aW9uc01haW4uaW5zdGFsbCk7XG5cdH0sIDApO1xufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPLFdBQVEsWUFBWSxPQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSx1RkFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsNkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUdaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxhQUFPLE9BQU8sZUFBZSxDQUFD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ICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAid2luZG93TWFuYWdlciIsICJwcmludERpYWxvZyIsICJwcmludE9wdGlvbnNNYWluIiwgImluc3RhbGwiLCAiJGJvZHkiLCAiJCIsICIkcHJpbnRMaW5rIiwgImZpbmQiLCAibGVuZ3RoIiwgIm9mZiIsICJnZXQiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJlIiwgImNyZWF0ZVdpbmRvdyIsICJzdG9wUHJvcGFnYXRpb24iLCAicHJldmVudERlZmF1bHQiLCAiUHJpbnREaWFsb2ciLCAiY29uZmlnIiwgInN1cGVyIiwgImNhbGwiLCAiT08iLCAiaW5oZXJpdENsYXNzIiwgInVpIiwgIlByb2Nlc3NEaWFsb2ciLCAic3RhdGljIiwgIm5hbWUiLCAidGl0bGUiLCAiY29uY2F0IiwgIndpbmRvdyIsICJ3Z1VMUyIsICJhY3Rpb25zIiwgImFjdGlvbiIsICJsYWJlbCIsICJmbGFncyIsICJwcm90b3R5cGUiLCAiaW5pdGlhbGl6ZSIsICJhcmdzIiwgImNoZWNrYm94IiwgImZpZWxkc2V0IiwgImFwcGx5IiwgInBhbmVsIiwgIlBhbmVsTGF5b3V0IiwgInBhZGRlZCIsICJleHBhbmRlZCIsICJjb250ZW50IiwgIkZpZWxkc2V0TGF5b3V0IiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJxdWVzdGlvbnMiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAicXVlc3Rpb24iLCAidmFsdWUiLCAidHlwZSIsICJDaGVja2JveElucHV0V2lkZ2V0IiwgInNlbGVjdGVkIiwgImNoZWNrZWQiLCAid2lkZ2V0IiwgInB1c2giLCAiRmllbGRMYXlvdXQiLCAiYWxpZ24iLCAiZXJyIiwgImYiLCAiYWRkSXRlbXMiLCAiJGVsZW1lbnQiLCAiYXBwZW5kIiwgImdldEFjdGlvblByb2Nlc3MiLCAic2VsZiIsICJQcm9jZXNzIiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgInJldHVybnZhbHVlIiwgImlzU2VsZWN0ZWQiLCAiY2xvc2UiLCAiY2hhbmdlUHJpbnRDU1MiLCAib3RoZXJFbmhhbmNlbWVudHMiLCAicHJpbnQiLCAiV2luZG93TWFuYWdlciIsICJzaXplIiwgImFkZFdpbmRvd3MiLCAib3BlbldpbmRvdyIsICJwcmludFN0eWxlIiwgImVuaGFuY2VkIiwgImkiLCAiaiIsICJrIiwgInJ1bGUiLCAiaGFzUHJpbnQiLCAiaGFzU2NyZWVuIiwgInJ1bGVzIiwgInN0eWxlc2hlZXQiLCAic3R5bGVzaGVldHMiLCAiZG9jdW1lbnQiLCAic3R5bGVTaGVldHMiLCAibWVkaWEiLCAibWVkaWFUZXh0IiwgImluY2x1ZGVzIiwgImRpc2FibGVkIiwgImFwcGVuZE1lZGl1bSIsICJjc3NSdWxlcyIsICJtdyIsICJsb2ciLCAid2FybiIsICJjb21wYXRkZWxldGUiLCAiZGVsZXRlUnVsZSIsICJyZW1vdmVSdWxlIiwgIkNTU1J1bGUiLCAiTUVESUFfUlVMRSIsICJub2ltYWdlcyIsICJub3JlZnMiLCAibm90b2MiLCAibm9iYWNrZ3JvdW5kIiwgImJsYWNrdGV4dCIsICJfZG9jdW1lbnQkcXVlcnlTZWxlY3QiLCAicXVlcnlTZWxlY3RvciIsICJyZW1vdmUiLCAic3R5bGVUYWciLCAiY3JlYXRlRWxlbWVudCIsICJpZCIsICJjcmVhdGVUZXh0Tm9kZSIsICJoZWFkIiwgImxpbmsiLCAidGV4dCIsICJkZWNvZGVVUkkiLCAiUHJpbnRPcHRpb25zIiwgInNldFRpbWVvdXQiXQp9Cg== diff --git a/dist/React/React.js b/dist/React/React.js index dcecb844..78dc6186 100644 --- a/dist/React/React.js +++ b/dist/React/React.js @@ -167,9 +167,9 @@ var require_proxy_min = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports2, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -183,9 +183,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports2, module2) { "use strict"; module2.exports = function(exec) { try { @@ -197,9 +197,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -210,9 +210,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -223,9 +223,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -235,9 +235,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -249,9 +249,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -264,9 +264,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -280,9 +280,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -293,9 +293,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -310,9 +310,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -320,9 +320,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -333,9 +333,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -345,9 +345,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports2, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -358,9 +358,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -369,9 +369,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -384,18 +384,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator2 = globalThis2.navigator; @@ -404,9 +404,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -431,9 +431,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -447,18 +447,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -474,9 +474,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -489,9 +489,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -503,9 +503,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports2, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -516,9 +516,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -534,17 +534,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports2, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -559,9 +559,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports2, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -569,18 +569,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports2, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -589,9 +589,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports2, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -601,9 +601,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -614,9 +614,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -628,9 +628,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -650,9 +650,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isObject2 = require_is_object(); @@ -678,9 +678,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -691,9 +691,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject2 = require_is_object(); @@ -705,9 +705,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -722,9 +722,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -747,9 +747,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -763,9 +763,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports2, module2) { "use strict"; var isObject2 = require_is_object(); var $String = String; @@ -777,9 +777,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -823,9 +823,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -839,9 +839,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -859,9 +859,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -876,9 +876,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -887,9 +887,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports2, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -900,17 +900,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports2, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -983,9 +983,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -1038,9 +1038,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -1073,9 +1073,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports2, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -1086,9 +1086,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -1098,9 +1098,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -1112,9 +1112,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports2, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -1125,9 +1125,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -1136,9 +1136,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports2, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1171,9 +1171,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1195,9 +1195,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) { "use strict"; module2.exports = [ "constructor", @@ -1211,9 +1211,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1224,17 +1224,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) { "use strict"; exports2.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1250,9 +1250,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1272,9 +1272,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports2, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1293,9 +1293,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1336,9 +1336,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports2, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1347,9 +1347,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1374,9 +1374,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/delete-property-or-throw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/delete-property-or-throw.js var require_delete_property_or_throw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/delete-property-or-throw.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/delete-property-or-throw.js"(exports2, module2) { "use strict"; var tryToString = require_try_to_string(); var $TypeError = TypeError; @@ -1386,9 +1386,9 @@ var require_delete_property_or_throw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports2, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1399,9 +1399,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.unshift.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.unshift.js var require_es_array_unshift = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.unshift.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.unshift.js"() { "use strict"; var $ = require_export(); var toObject = require_to_object(); @@ -2150,4 +2150,4 @@ function stopPropagation(event) { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3h5LXBvbHlmaWxsQDAuMy4yL25vZGVfbW9kdWxlcy9wcm94eS1wb2x5ZmlsbC9wcm94eS5taW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS51bnNoaWZ0LmpzIiwgInNyYy9SZWFjdC9SZWFjdC50cyIsICJub2RlX21vZHVsZXMvLnBucG0vanN4LWRvbUA4LjEuNC9ub2RlX21vZHVsZXMvanN4LWRvbS9pbmRleC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe2Z1bmN0aW9uIHYoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsKGEpe3JldHVybiBhP1wib2JqZWN0XCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGE6ITF9ZnVuY3Rpb24gcChhKXtpZihudWxsIT09YSYmIWwoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBwcm90b3R5cGUgbWF5IG9ubHkgYmUgYW4gT2JqZWN0IG9yIG51bGw6IFwiK2EpO312YXIgcT1udWxsLGU9T2JqZWN0LHc9ISFlLmNyZWF0ZXx8ISh7X19wcm90b19fOm51bGx9aW5zdGFuY2VvZiBlKSxBPWUuY3JlYXRlfHwodz9mdW5jdGlvbihhKXtwKGEpO3JldHVybntfX3Byb3RvX186YX19OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoKXt9cChhKTtpZihudWxsPT09YSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJOYXRpdmUgT2JqZWN0LmNyZWF0ZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgb2JqZWN0cyB3aXRoIG51bGwgcHJvdG90eXBlXCIpO2MucHJvdG90eXBlPWE7cmV0dXJuIG5ldyBjfSksXG5CPWUuZ2V0UHJvdG90eXBlT2Z8fChbXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGU/ZnVuY3Rpb24oYSl7YT1hLl9fcHJvdG9fXztyZXR1cm4gbChhKT9hOm51bGx9OnYpO3ZhciBtPWZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gaygpe31pZih2b2lkIDA9PT0odGhpcyYmdGhpcyBpbnN0YW5jZW9mIG0/dGhpcy5jb25zdHJ1Y3Rvcjp2b2lkIDApKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciBQcm94eSByZXF1aXJlcyAnbmV3J1wiKTtpZighbChhKXx8IWwoYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjcmVhdGUgcHJveHkgd2l0aCBhIG5vbi1vYmplY3QgYXMgdGFyZ2V0IG9yIGhhbmRsZXJcIik7cT1mdW5jdGlvbigpe2E9bnVsbDtrPWZ1bmN0aW9uKGIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcGVyZm9ybSAnXCIrYitcIicgb24gYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWRcIik7fX07c2V0VGltZW91dChmdW5jdGlvbigpe3E9bnVsbH0sMCk7dmFyIGc9XG5jO2M9e2dldDpudWxsLHNldDpudWxsLGFwcGx5Om51bGwsY29uc3RydWN0Om51bGx9O2Zvcih2YXIgaCBpbiBnKXtpZighKGggaW4gYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3h5IHBvbHlmaWxsIGRvZXMgbm90IHN1cHBvcnQgdHJhcCAnXCIraCtcIidcIik7Y1toXT1nW2hdfVwiZnVuY3Rpb25cIj09PXR5cGVvZiBnJiYoYy5hcHBseT1nLmFwcGx5LmJpbmQoZykpO2c9QihhKTt2YXIgcj0hMSx0PSExO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXt2YXIgZj1mdW5jdGlvbigpe3ZhciBiPXRoaXMmJnRoaXMuY29uc3RydWN0b3I9PT1mLGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrKGI/XCJjb25zdHJ1Y3RcIjpcImFwcGx5XCIpO3JldHVybiBiJiZjLmNvbnN0cnVjdD9jLmNvbnN0cnVjdC5jYWxsKHRoaXMsYSxkKTohYiYmYy5hcHBseT9jLmFwcGx5KGEsdGhpcyxkKTpiPyhkLnVuc2hpZnQoYSksbmV3IChhLmJpbmQuYXBwbHkoYSxkKSkpOmEuYXBwbHkodGhpcyxcbmQpfTtyPSEwfWVsc2UgYSBpbnN0YW5jZW9mIEFycmF5PyhmPVtdLHQ9ITApOmY9d3x8bnVsbCE9PWc/QShnKTp7fTt2YXIgeD1jLmdldD9mdW5jdGlvbihiKXtrKFwiZ2V0XCIpO3JldHVybiBjLmdldCh0aGlzLGIsZil9OmZ1bmN0aW9uKGIpe2soXCJnZXRcIik7cmV0dXJuIHRoaXNbYl19LEM9Yy5zZXQ/ZnVuY3Rpb24oYixkKXtrKFwic2V0XCIpO2Muc2V0KHRoaXMsYixkLGYpfTpmdW5jdGlvbihiLGQpe2soXCJzZXRcIik7dGhpc1tiXT1kfSx5PXt9O2UuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2lmKCEoKHJ8fHQpJiZiIGluIGYpKXt2YXIgZD1lLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpO2UuZGVmaW5lUHJvcGVydHkoZixiLHtlbnVtZXJhYmxlOiEhZC5lbnVtZXJhYmxlLGdldDp4LmJpbmQoYSxiKSxzZXQ6Qy5iaW5kKGEsYil9KTt5W2JdPSEwfX0pO2g9ITA7aWYocnx8dCl7dmFyIEQ9ZS5zZXRQcm90b3R5cGVPZnx8KFtdLl9fcHJvdG9fXz09PVxuQXJyYXkucHJvdG90eXBlP2Z1bmN0aW9uKGIsZCl7cChkKTtiLl9fcHJvdG9fXz1kO3JldHVybiBifTp2KTtnJiZEKGYsZyl8fChoPSExKX1pZihjLmdldHx8IWgpZm9yKHZhciB1IGluIGEpeVt1XXx8ZS5kZWZpbmVQcm9wZXJ0eShmLHUse2dldDp4LmJpbmQoYSx1KX0pO2Uuc2VhbChhKTtlLnNlYWwoZik7cmV0dXJuIGZ9O20ucmV2b2NhYmxlPWZ1bmN0aW9uKGEsYyl7cmV0dXJue3Byb3h5Om5ldyBtKGEsYykscmV2b2tlOnF9fTtyZXR1cm4gbX07dmFyIHo9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBwcm9jZXNzJiZcIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyl8fFwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF2aWdhdG9yJiZcIlJlYWN0TmF0aXZlXCI9PT1uYXZpZ2F0b3IucHJvZHVjdD9nbG9iYWw6c2VsZjt6LlByb3h5fHwoei5Qcm94eT1uKCksei5Qcm94eS5yZXZvY2FibGU9ei5Qcm94eS5yZXZvY2FibGUpO30pKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjAvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xuXG4vLyBJRTgtXG52YXIgSU5DT1JSRUNUX1JFU1VMVCA9IFtdLnVuc2hpZnQoMCkgIT09IDE7XG5cbi8vIFY4IH4gQ2hyb21lIDwgNzEgYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnVuc2hpZnQoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfUkVTVUxUIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS51bnNoaWZ0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnVuc2hpZnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB1bnNoaWZ0OiBmdW5jdGlvbiB1bnNoaWZ0KGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmIChhcmdDb3VudCkge1xuICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICAgIHZhciBrID0gbGVuO1xuICAgICAgd2hpbGUgKGstLSkge1xuICAgICAgICB2YXIgdG8gPSBrICsgYXJnQ291bnQ7XG4gICAgICAgIGlmIChrIGluIE8pIE9bdG9dID0gT1trXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcmdDb3VudDsgaisrKSB7XG4gICAgICAgIE9bal0gPSBhcmd1bWVudHNbal07XG4gICAgICB9XG4gICAgfSByZXR1cm4gc2V0QXJyYXlMZW5ndGgoTywgbGVuICsgYXJnQ291bnQpO1xuICB9XG59KTtcbiIsICIvLyDlpoLmnpzkvb/nlKgganN4LWRvbe+8jOWImeWPlua2iOazqOmHiuS7peS4i+ihjCAvIFRvIFVzZSBqc3gtZG9tLCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lXG5leHBvcnQgKiBmcm9tICdqc3gtZG9tJztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzO1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJib29sZWFuXCI7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsKSB7XG4gIHJldHVybiB2YWwgJiYgdHlwZW9mIHZhbC5ub2RlVHlwZSA9PT0gXCJudW1iZXJcIjtcbn1cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIjtcbn1cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIjtcbn1cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IHZhbCAhPT0gbnVsbCA6IGlzRnVuY3Rpb24odmFsKTtcbn1cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBpc0NvbXBvbmVudENsYXNzKENvbXBvbmVudCkge1xuICBjb25zdCB7IHByb3RvdHlwZSB9ID0gQ29tcG9uZW50O1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKG9iaikge1xuICByZXR1cm4gKFxuICAgIGlzT2JqZWN0KG9iaikgJiZcbiAgICB0eXBlb2Ygb2JqLmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCJcbiAgKTtcbn1cbmZ1bmN0aW9uIGZvckVhY2godmFsdWUsIGZuKSB7XG4gIGlmICghdmFsdWUpIHJldHVybjtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cyh2YWx1ZSkpIHtcbiAgICBmbih2YWx1ZVtrZXldLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcbiAgcmV0dXJuIE9iamVjdC5zZWFsKHtcbiAgICBjdXJyZW50OiBudWxsLFxuICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVmKG1heWJlUmVmKSB7XG4gIHJldHVybiBpc09iamVjdChtYXliZVJlZikgJiYgXCJjdXJyZW50XCIgaW4gbWF5YmVSZWY7XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgb25cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2I4N2FhYmRmZTFiNzQ2MWU3MzMxYWJiMzYwMWQ5ZTZiYjI3NTQ0YmMvTElDRU5TRVxuICovXG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG5jb25zdCBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMCxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDAsXG4gIGJvcmRlckltYWdlU2xpY2U6IDAsXG4gIGJvcmRlckltYWdlV2lkdGg6IDAsXG4gIGJveEZsZXg6IDAsXG4gIGJveEZsZXhHcm91cDogMCxcbiAgYm94T3JkaW5hbEdyb3VwOiAwLFxuICBjb2x1bW5Db3VudDogMCxcbiAgY29sdW1uczogMCxcbiAgZmxleDogMCxcbiAgZmxleEdyb3c6IDAsXG4gIGZsZXhQb3NpdGl2ZTogMCxcbiAgZmxleFNocmluazogMCxcbiAgZmxleE5lZ2F0aXZlOiAwLFxuICBmbGV4T3JkZXI6IDAsXG4gIGdyaWRBcmVhOiAwLFxuICBncmlkUm93OiAwLFxuICBncmlkUm93RW5kOiAwLFxuICBncmlkUm93U3BhbjogMCxcbiAgZ3JpZFJvd1N0YXJ0OiAwLFxuICBncmlkQ29sdW1uOiAwLFxuICBncmlkQ29sdW1uRW5kOiAwLFxuICBncmlkQ29sdW1uU3BhbjogMCxcbiAgZ3JpZENvbHVtblN0YXJ0OiAwLFxuICBmb250V2VpZ2h0OiAwLFxuICBsaW5lQ2xhbXA6IDAsXG4gIGxpbmVIZWlnaHQ6IDAsXG4gIG9wYWNpdHk6IDAsXG4gIG9yZGVyOiAwLFxuICBvcnBoYW5zOiAwLFxuICB0YWJTaXplOiAwLFxuICB3aWRvd3M6IDAsXG4gIHpJbmRleDogMCxcbiAgem9vbTogMCxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMCxcbiAgZmxvb2RPcGFjaXR5OiAwLFxuICBzdG9wT3BhY2l0eTogMCxcbiAgc3Ryb2tlRGFzaGFycmF5OiAwLFxuICBzdHJva2VEYXNob2Zmc2V0OiAwLFxuICBzdHJva2VNaXRlcmxpbWl0OiAwLFxuICBzdHJva2VPcGFjaXR5OiAwLFxuICBzdHJva2VXaWR0aDogMCxcbn07XG5cbi8qKlxuICogQHBhcmFtIHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbmNvbnN0IHByZWZpeGVzID0gW1wiV2Via2l0XCIsIFwibXNcIiwgXCJNb3pcIiwgXCJPXCJdO1xuLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goKHByb3ApID0+IHtcbiAgcHJlZml4ZXMuZm9yRWFjaCgocHJlZml4KSA9PiB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSAwOyAvLyBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdXG4gIH0pO1xufSk7XG5cbmNvbnN0IGpzeERvbVR5cGUgPSBTeW1ib2wuZm9yKFwianN4LWRvbTp0eXBlXCIpO1xudmFyIEpzeERvbVR5cGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoSnN4RG9tVHlwZSkge1xuICBKc3hEb21UeXBlW1wiU2hhZG93Um9vdFwiXSA9IFwiU2hhZG93Um9vdFwiO1xuICByZXR1cm4gSnN4RG9tVHlwZTtcbn0pKEpzeERvbVR5cGUgfHwge30pO1xuZnVuY3Rpb24gU2hhZG93Um9vdChfcmVmKSB7XG4gIGxldCB7IGNoaWxkcmVuLCByZWYsIC4uLmF0dHIgfSA9IF9yZWY7XG4gIHJldHVybiB7XG4gICAgW2pzeERvbVR5cGVdOiBKc3hEb21UeXBlLlNoYWRvd1Jvb3QsXG4gICAgcmVmLFxuICAgIGF0dHIsXG4gICAgY2hpbGRyZW4sXG4gIH07XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QoZWwpIHtcbiAgcmV0dXJuIGVsICE9IG51bGwgJiYgZWxbanN4RG9tVHlwZV0gPT09IEpzeERvbVR5cGUuU2hhZG93Um9vdDtcbn1cblxuY29uc3QgU1ZHTmFtZXNwYWNlID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuY29uc3QgWExpbmtOYW1lc3BhY2UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIjtcbmNvbnN0IFhNTE5hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCI7XG5cbi8vIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvanN4LWluLWRlcHRoLmh0bWwjYm9vbGVhbnMtbnVsbC1hbmQtdW5kZWZpbmVkLWFyZS1pZ25vcmVkXG4vLyBFbXVsYXRlIEpTWCBFeHByZXNzaW9uIGxvZ2ljIHRvIGlnbm9yZSBjZXJ0YWluIHR5cGUgb2YgY2hpbGRyZW4gb3IgY2xhc3NOYW1lLlxuZnVuY3Rpb24gaXNWaXNpYmxlQ2hpbGQodmFsdWUpIHtcbiAgcmV0dXJuICFpc0Jvb2xlYW4odmFsdWUpICYmIHZhbHVlICE9IG51bGw7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGB2YWx1ZWAgdG8gYSBjbGFzc05hbWUgc3RyaW5nLlxuICogYHZhbHVlYCBjYW4gYmUgYSBzdHJpbmcsIGFuIGFycmF5IG9yIGEgYERpY3Rpb25hcnk8Ym9vbGVhbj5gLlxuICovXG5mdW5jdGlvbiBjbGFzc05hbWUodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChjbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lKEFycmF5LmZyb20odmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXModmFsdWUpXG4gICAgICAuZmlsdGVyKChrKSA9PiB2YWx1ZVtrXSlcbiAgICAgIC5qb2luKFwiIFwiKTtcbiAgfSBlbHNlIGlmIChpc1Zpc2libGVDaGlsZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5jb25zdCBzdmcgPSB7XG4gIGFuaW1hdGU6IDAsXG4gIGNpcmNsZTogMCxcbiAgY2xpcFBhdGg6IDAsXG4gIGRlZnM6IDAsXG4gIGRlc2M6IDAsXG4gIGVsbGlwc2U6IDAsXG4gIGZlQmxlbmQ6IDAsXG4gIGZlQ29sb3JNYXRyaXg6IDAsXG4gIGZlQ29tcG9uZW50VHJhbnNmZXI6IDAsXG4gIGZlQ29tcG9zaXRlOiAwLFxuICBmZUNvbnZvbHZlTWF0cml4OiAwLFxuICBmZURpZmZ1c2VMaWdodGluZzogMCxcbiAgZmVEaXNwbGFjZW1lbnRNYXA6IDAsXG4gIGZlRGlzdGFudExpZ2h0OiAwLFxuICBmZUZsb29kOiAwLFxuICBmZUZ1bmNBOiAwLFxuICBmZUZ1bmNCOiAwLFxuICBmZUZ1bmNHOiAwLFxuICBmZUZ1bmNSOiAwLFxuICBmZUdhdXNzaWFuQmx1cjogMCxcbiAgZmVJbWFnZTogMCxcbiAgZmVNZXJnZTogMCxcbiAgZmVNZXJnZU5vZGU6IDAsXG4gIGZlTW9ycGhvbG9neTogMCxcbiAgZmVPZmZzZXQ6IDAsXG4gIGZlUG9pbnRMaWdodDogMCxcbiAgZmVTcGVjdWxhckxpZ2h0aW5nOiAwLFxuICBmZVNwb3RMaWdodDogMCxcbiAgZmVUaWxlOiAwLFxuICBmZVR1cmJ1bGVuY2U6IDAsXG4gIGZpbHRlcjogMCxcbiAgZm9yZWlnbk9iamVjdDogMCxcbiAgZzogMCxcbiAgaW1hZ2U6IDAsXG4gIGxpbmU6IDAsXG4gIGxpbmVhckdyYWRpZW50OiAwLFxuICBtYXJrZXI6IDAsXG4gIG1hc2s6IDAsXG4gIG1ldGFkYXRhOiAwLFxuICBwYXRoOiAwLFxuICBwYXR0ZXJuOiAwLFxuICBwb2x5Z29uOiAwLFxuICBwb2x5bGluZTogMCxcbiAgcmFkaWFsR3JhZGllbnQ6IDAsXG4gIHJlY3Q6IDAsXG4gIHN0b3A6IDAsXG4gIHN2ZzogMCxcbiAgc3dpdGNoOiAwLFxuICBzeW1ib2w6IDAsXG4gIHRleHQ6IDAsXG4gIHRleHRQYXRoOiAwLFxuICB0c3BhbjogMCxcbiAgdXNlOiAwLFxuICB2aWV3OiAwLFxufTtcbmNvbnN0IG5vblByZXNlbnRhdGlvblNWR0F0dHJpYnV0ZXMgPVxuICAvXihhKGxsfHR8dSl8YmFzZVtGUF18YyhhbHxsaXBQYXRoVXxvbil8ZGl8ZWR8ZXh8ZmlsdGVyW1JVXXxnKGx5cGhSfHIpfGtlfGwoZW58aW0pfG1hKHJrZXJbSFVXXXxzKXxufHBhdHxwcnxwb2ludFteZV18cmVbXm5dfHNbcHV5XXxzdFteb3JdfHRhfHRleHRMfHZpfHhDfHl8eikvO1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0YWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0YWcpO1xufVxuZnVuY3Rpb24gRnJhZ21lbnQoYXR0cikge1xuICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgYXBwZW5kQ2hpbGQoYXR0ci5jaGlsZHJlbiwgZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5jbGFzcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyogQF9fUFVSRV9fICovXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb21wb25lbnQucHJvdG90eXBlLCB7XG4gIGlzUmVhY3RDb21wb25lbnQ6IHtcbiAgICB2YWx1ZTogdHJ1ZSxcbiAgfSxcbn0pO1xuZnVuY3Rpb24gaW5pdENvbXBvbmVudENsYXNzKENsYXNzLCBhdHRyLCBjaGlsZHJlbikge1xuICBhdHRyID0ge1xuICAgIC4uLmF0dHIsXG4gICAgY2hpbGRyZW4sXG4gIH07XG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IENsYXNzKGF0dHIpO1xuICBjb25zdCBub2RlID0gaW5zdGFuY2UucmVuZGVyKCk7XG4gIGlmIChcInJlZlwiIGluIGF0dHIpIHtcbiAgICBhdHRhY2hSZWYoYXR0ci5yZWYsIGluc3RhbmNlKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZnVuY3Rpb24ganN4KHRhZywgX3JlZikge1xuICBsZXQgeyBjaGlsZHJlbiwgLi4uYXR0ciB9ID0gX3JlZjtcbiAgaWYgKCFhdHRyLm5hbWVzcGFjZVVSSSAmJiBzdmdbdGFnXSA9PT0gMCkge1xuICAgIGF0dHIgPSB7XG4gICAgICAuLi5hdHRyLFxuICAgICAgbmFtZXNwYWNlVVJJOiBTVkdOYW1lc3BhY2UsXG4gICAgfTtcbiAgfVxuICBsZXQgbm9kZTtcbiAgaWYgKGlzU3RyaW5nKHRhZykpIHtcbiAgICBub2RlID0gYXR0ci5uYW1lc3BhY2VVUklcbiAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGF0dHIubmFtZXNwYWNlVVJJLCB0YWcpXG4gICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBhdHRyaWJ1dGVzKGF0dHIsIG5vZGUpO1xuICAgIGFwcGVuZENoaWxkKGNoaWxkcmVuLCBub2RlKTtcblxuICAgIC8vIFNlbGVjdCBgb3B0aW9uYCBlbGVtZW50cyBpbiBgc2VsZWN0YFxuICAgIGlmIChub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxTZWxlY3RFbGVtZW50ICYmIGF0dHIudmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGF0dHIubXVsdGlwbGUgPT09IHRydWUgJiYgQXJyYXkuaXNBcnJheShhdHRyLnZhbHVlKSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBhdHRyLnZhbHVlLm1hcCgodmFsdWUpID0+IFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICBub2RlXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoXCJvcHRpb25cIilcbiAgICAgICAgICAuZm9yRWFjaChcbiAgICAgICAgICAgIChvcHRpb24pID0+IChvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZXMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKSksXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSBhdHRyLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRhY2hSZWYoYXR0ci5yZWYsIG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24odGFnKSkge1xuICAgIC8vIEN1c3RvbSBlbGVtZW50cy5cbiAgICBpZiAoaXNPYmplY3QodGFnLmRlZmF1bHRQcm9wcykpIHtcbiAgICAgIGF0dHIgPSB7XG4gICAgICAgIC4uLnRhZy5kZWZhdWx0UHJvcHMsXG4gICAgICAgIC4uLmF0dHIsXG4gICAgICB9O1xuICAgIH1cbiAgICBub2RlID0gaXNDb21wb25lbnRDbGFzcyh0YWcpXG4gICAgICA/IGluaXRDb21wb25lbnRDbGFzcyh0YWcsIGF0dHIsIGNoaWxkcmVuKVxuICAgICAgOiB0YWcoe1xuICAgICAgICAgIC4uLmF0dHIsXG4gICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgSlNYIGVsZW1lbnQgdHlwZTogJHt0YWd9YCk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZywgYXR0cikge1xuICBmb3IgKFxuICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgIGNoaWxkcmVuID0gbmV3IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSxcbiAgICAgIF9rZXkyID0gMjtcbiAgICBfa2V5MiA8IF9sZW47XG4gICAgX2tleTIrK1xuICApIHtcbiAgICBjaGlsZHJlbltfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuICBpZiAoaXNTdHJpbmcoYXR0cikgfHwgQXJyYXkuaXNBcnJheShhdHRyKSkge1xuICAgIGNoaWxkcmVuLnVuc2hpZnQoYXR0cik7XG4gICAgYXR0ciA9IHt9O1xuICB9XG4gIGF0dHIgPSBhdHRyIHx8IHt9O1xuICBpZiAoYXR0ci5jaGlsZHJlbiAhPSBudWxsICYmICFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAoeyBjaGlsZHJlbiwgLi4uYXR0ciB9ID0gYXR0cik7XG4gIH1cbiAgcmV0dXJuIGpzeChcbiAgICB0YWcsXG4gICAge1xuICAgICAgLi4uYXR0cixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH0sXG4gICAgYXR0ci5rZXksXG4gICk7XG59XG5mdW5jdGlvbiBhdHRhY2hSZWYocmVmLCBub2RlKSB7XG4gIGlmIChpc1JlZihyZWYpKSB7XG4gICAgcmVmLmN1cnJlbnQgPSBub2RlO1xuICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24ocmVmKSkge1xuICAgIHJlZihub2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQoY2hpbGQsIG5vZGUpIHtcbiAgaWYgKGlzQXJyYXlMaWtlKGNoaWxkKSkge1xuICAgIGFwcGVuZENoaWxkcmVuKGNoaWxkLCBub2RlKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyhjaGlsZCkgfHwgaXNOdW1iZXIoY2hpbGQpKSB7XG4gICAgYXBwZW5kQ2hpbGRUb05vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQpLCBub2RlKTtcbiAgfSBlbHNlIGlmIChjaGlsZCA9PT0gbnVsbCkge1xuICAgIGFwcGVuZENoaWxkVG9Ob2RlKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCJcIiksIG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjaGlsZCkpIHtcbiAgICBhcHBlbmRDaGlsZFRvTm9kZShjaGlsZCwgbm9kZSk7XG4gIH0gZWxzZSBpZiAoaXNTaGFkb3dSb290KGNoaWxkKSkge1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBub2RlLmF0dGFjaFNoYWRvdyhjaGlsZC5hdHRyKTtcbiAgICBhcHBlbmRDaGlsZChjaGlsZC5jaGlsZHJlbiwgc2hhZG93Um9vdCk7XG4gICAgYXR0YWNoUmVmKGNoaWxkLnJlZiwgc2hhZG93Um9vdCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkcmVuKGNoaWxkcmVuLCBub2RlKSB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgWy4uLmNoaWxkcmVuXSkge1xuICAgIGFwcGVuZENoaWxkKGNoaWxkLCBub2RlKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Ob2RlKGNoaWxkLCBub2RlKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICBub2RlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVBdHRyaWJ1dGUocywgc2VwYXJhdG9yKSB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChtYXRjaCkgPT4gc2VwYXJhdG9yICsgbWF0Y2gudG9Mb3dlckNhc2UoKSk7XG59XG5mdW5jdGlvbiBzdHlsZShub2RlLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gZmFsc2UpO1xuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goKHYpID0+IHN0eWxlKG5vZGUsIHYpKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBmb3JFYWNoKHZhbHVlLCAodmFsLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkuaW5kZXhPZihcIi1cIikgPT09IDApIHtcbiAgICAgICAgLy8gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzICh2YXJpYWJsZXMpIHN0YXJ0IHdpdGggYC1gIChlLmcuIGAtLW15LXZhcmlhYmxlYClcbiAgICAgICAgLy8gYW5kIG11c3QgYmUgYXNzaWduZWQgdmlhIGBzZXRQcm9wZXJ0eWAuXG4gICAgICAgIG5vZGUuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWwpO1xuICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWwpICYmIGlzVW5pdGxlc3NOdW1iZXJba2V5XSAhPT0gMCkge1xuICAgICAgICBub2RlLnN0eWxlW2tleV0gPSB2YWwgKyBcInB4XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnN0eWxlW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGF0dHJpYnV0ZShrZXksIHZhbHVlLCBub2RlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBcInhsaW5rQWN0dWF0ZVwiOlxuICAgIGNhc2UgXCJ4bGlua0FyY3JvbGVcIjpcbiAgICBjYXNlIFwieGxpbmtIcmVmXCI6XG4gICAgY2FzZSBcInhsaW5rUm9sZVwiOlxuICAgIGNhc2UgXCJ4bGlua1Nob3dcIjpcbiAgICBjYXNlIFwieGxpbmtUaXRsZVwiOlxuICAgIGNhc2UgXCJ4bGlua1R5cGVcIjpcbiAgICAgIGF0dHJOUyhub2RlLCBYTGlua05hbWVzcGFjZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCI6XCIpLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInhtbG5zWGxpbmtcIjpcbiAgICAgIGF0dHIobm9kZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCI6XCIpLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInhtbEJhc2VcIjpcbiAgICBjYXNlIFwieG1sTGFuZ1wiOlxuICAgIGNhc2UgXCJ4bWxTcGFjZVwiOlxuICAgICAgYXR0ck5TKG5vZGUsIFhNTE5hbWVzcGFjZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCI6XCIpLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gIH1cbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlIFwiaHRtbEZvclwiOlxuICAgICAgYXR0cihub2RlLCBcImZvclwiLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImRhdGFzZXRcIjpcbiAgICAgIGZvckVhY2godmFsdWUsIChkYXRhVmFsdWUsIGRhdGFLZXkpID0+IHtcbiAgICAgICAgaWYgKGRhdGFWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgbm9kZS5kYXRhc2V0W2RhdGFLZXldID0gZGF0YVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgIGNhc2UgXCJ0ZXh0Q29udGVudFwiOlxuICAgICAgaWYgKGlzVmlzaWJsZUNoaWxkKHZhbHVlKSkge1xuICAgICAgICBub2RlW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSB2YWx1ZVtcIl9faHRtbFwiXTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgLy8gc2tpcCBudWxsaXNoIHZhbHVlc1xuICAgICAgICAvLyBmb3IgYDxzZWxlY3Q+YCBhcHBseSB2YWx1ZSBhZnRlciBhcHBlbmRpbmcgYDxvcHRpb24+YCBlbGVtZW50c1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICAgICAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIHVzZSBhdHRyaWJ1dGUgZm9yIG90aGVyIGVsZW1lbnRzXG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic3BlbGxDaGVja1wiOlxuICAgICAgbm9kZS5zcGVsbGNoZWNrID0gdmFsdWU7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImNsYXNzXCI6XG4gICAgY2FzZSBcImNsYXNzTmFtZVwiOlxuICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cihub2RlLCBcImNsYXNzXCIsIGNsYXNzTmFtZSh2YWx1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJyZWZcIjpcbiAgICBjYXNlIFwibmFtZXNwYWNlVVJJXCI6XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICBzdHlsZShub2RlLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcIm9uXCI6XG4gICAgY2FzZSBcIm9uQ2FwdHVyZVwiOlxuICAgICAgZm9yRWFjaCh2YWx1ZSwgKGV2ZW50SGFuZGxlciwgZXZlbnROYW1lKSA9PiB7XG4gICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlciwga2V5ID09PSBcIm9uQ2FwdHVyZVwiKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIC8vIGZhbGx0aHJvdWdoXG4gIH1cbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgaWYgKGtleVswXSA9PT0gXCJvXCIgJiYga2V5WzFdID09PSBcIm5cIikge1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdXNlQ2FwdHVyZSA9IGF0dHJpYnV0ZS5lbmRzV2l0aChcImNhcHR1cmVcIik7XG4gICAgICBpZiAoYXR0cmlidXRlID09PSBcIm9uZG91YmxlY2xpY2tcIikge1xuICAgICAgICBhdHRyaWJ1dGUgPSBcIm9uZGJsY2xpY2tcIjtcbiAgICAgIH0gZWxzZSBpZiAodXNlQ2FwdHVyZSAmJiBhdHRyaWJ1dGUgPT09IFwib25kb3VibGVjbGlja2NhcHR1cmVcIikge1xuICAgICAgICBhdHRyaWJ1dGUgPSBcIm9uZGJsY2xpY2tjYXB0dXJlXCI7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZUNhcHR1cmUgJiYgbm9kZVthdHRyaWJ1dGVdID09PSBudWxsKSB7XG4gICAgICAgIC8vIHVzZSBwcm9wZXJ0eSB3aGVuIHBvc3NpYmxlIFBSICMxN1xuICAgICAgICBub2RlW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodXNlQ2FwdHVyZSkge1xuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgYXR0cmlidXRlLnN1YnN0cmluZygyLCBhdHRyaWJ1dGUubGVuZ3RoIC0gNyksXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBldmVudE5hbWU7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgaW4gd2luZG93KSB7XG4gICAgICAgICAgLy8gc3RhbmRhcmQgZXZlbnRcbiAgICAgICAgICAvLyB0aGUgSlNYIGF0dHJpYnV0ZSBjb3VsZCBoYXZlIGJlZW4gXCJvbk1vdXNlT3ZlclwiIGFuZCB0aGVcbiAgICAgICAgICAvLyBtZW1iZXIgbmFtZSBcIm9ubW91c2VvdmVyXCIgaXMgb24gdGhlIHdpbmRvdydzIHByb3RvdHlwZVxuICAgICAgICAgIC8vIHNvIGxldCdzIGFkZCB0aGUgbGlzdGVuZXIgXCJtb3VzZW92ZXJcIiwgd2hpY2ggaXMgYWxsIGxvd2VyY2FzZWRcbiAgICAgICAgICBjb25zdCBzdGFuZGFyZEV2ZW50TmFtZSA9IGF0dHJpYnV0ZS5zdWJzdHJpbmcoMik7XG4gICAgICAgICAgZXZlbnROYW1lID0gc3RhbmRhcmRFdmVudE5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY3VzdG9tIGV2ZW50XG4gICAgICAgICAgLy8gdGhlIEpTWCBhdHRyaWJ1dGUgY291bGQgaGF2ZSBiZWVuIFwib25NeUN1c3RvbUV2ZW50XCJcbiAgICAgICAgICAvLyBzbyBsZXQncyB0cmltIG9mZiB0aGUgXCJvblwiIHByZWZpeCBhbmQgbG93ZXJjYXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgICAgICAvLyBhbmQgYWRkIHRoZSBsaXN0ZW5lciBcIm15Q3VzdG9tRXZlbnRcIlxuICAgICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGNoYXJhY3Rlciwgd2Uga2VlcCB0aGUgZXZlbnQgbmFtZSBjYXNlXG4gICAgICAgICAgY29uc3QgY3VzdG9tRXZlbnROYW1lID0gYXR0cmlidXRlWzJdICsga2V5LnNsaWNlKDMpO1xuICAgICAgICAgIGV2ZW50TmFtZSA9IGN1c3RvbUV2ZW50TmFtZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIG5vZGVba2V5XSA9IHZhbHVlO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgYXR0cihub2RlLCBrZXksIFwiXCIpO1xuICB9IGVsc2UgaWYgKHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50ICYmICFub25QcmVzZW50YXRpb25TVkdBdHRyaWJ1dGVzLnRlc3Qoa2V5KSkge1xuICAgICAgYXR0cihub2RlLCBub3JtYWxpemVBdHRyaWJ1dGUoa2V5LCBcIi1cIiksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0cihub2RlLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGF0dHIobm9kZSwga2V5LCB2YWx1ZSkge1xuICBub2RlLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGF0dHJOUyhub2RlLCBuYW1lc3BhY2UsIGtleSwgdmFsdWUpIHtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIGtleSwgdmFsdWUpO1xufVxuZnVuY3Rpb24gYXR0cmlidXRlcyhhdHRyLCBub2RlKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMoYXR0cikpIHtcbiAgICBhdHRyaWJ1dGUoa2V5LCBhdHRyW2tleV0sIG5vZGUpO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiB1c2VUZXh0KGluaXRpYWxWYWx1ZSkge1xuICBjb25zdCB0ZXh0ID0gbmV3IFRleHQoKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRleHQsIFwidG9TdHJpbmdcIiwge1xuICAgIHZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dENvbnRlbnQ7XG4gICAgfSxcbiAgfSk7XG4gIGZ1bmN0aW9uIHNldFRleHQodmFsdWUpIHtcbiAgICB0ZXh0LnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH1cbiAgaWYgKGluaXRpYWxWYWx1ZSAhPSBudWxsKSB7XG4gICAgc2V0VGV4dChpbml0aWFsVmFsdWUpO1xuICB9XG4gIHJldHVybiBbdGV4dCwgc2V0VGV4dF07XG59XG5mdW5jdGlvbiB1c2VDbGFzc0xpc3QoaW5pdGlhbFZhbHVlKSB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkge1xuICAgIGRpdi5jbGFzc05hbWUgPSBjbGFzc05hbWUoaW5pdGlhbFZhbHVlKTtcbiAgfVxuICBsZXQgbGlzdCA9IGRpdi5jbGFzc0xpc3Q7XG4gIGZ1bmN0aW9uIENsYXNzTGlzdCh2YWx1ZSkge1xuICAgIHZhbHVlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIGxpc3QudmFsdWUpO1xuICAgIGxpc3QgPSB2YWx1ZS5jbGFzc0xpc3Q7XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG4gICAgQ2xhc3NMaXN0LFxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHtcbiAgICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gbGlzdC5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gbGlzdC52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBhZGQoKSB7XG4gICAgICAgIGxpc3QuYWRkKC4uLmFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlKCkge1xuICAgICAgICBsaXN0LnJlbW92ZSguLi5hcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIHRvZ2dsZSh0b2tlbiwgZm9yY2UpIHtcbiAgICAgICAgbGlzdC50b2dnbGUodG9rZW4sIGZvcmNlKTtcbiAgICAgIH0sXG4gICAgICBjb250YWlucyh0b2tlbikge1xuICAgICAgICByZXR1cm4gbGlzdC5jb250YWlucyh0b2tlbik7XG4gICAgICB9LFxuICAgIH0pLFxuICApO1xuICByZXR1cm4gQ2xhc3NMaXN0O1xufVxuXG5mdW5jdGlvbiB1c2VNZW1vKGZhY3RvcnkpIHtcbiAgcmV0dXJuIGZhY3RvcnkoKTtcbn1cbmZ1bmN0aW9uIGZvcndhcmRSZWYocmVuZGVyKSB7XG4gIHJldHVybiAoX3JlZikgPT4ge1xuICAgIGxldCB7IHJlZiwgLi4ucHJvcHMgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHJlbmRlcihwcm9wcywgcmVmID8/IGNyZWF0ZVJlZigpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBpbml0KSB7XG4gIGF0dGFjaFJlZihyZWYsIGluaXQoKSk7XG59XG5cbmNvbnN0IGNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmNvbnN0IGNyZWF0ZVN0eWxlZENvbXBvbmVudCA9IChuYW1lKSA9PlxuICBmdW5jdGlvbiAobGlzdCkge1xuICAgIGZvciAoXG4gICAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGludGVycG9sYXRpb25zID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSxcbiAgICAgICAgX2tleSA9IDE7XG4gICAgICBfa2V5IDwgX2xlbjtcbiAgICAgIF9rZXkrK1xuICAgICkge1xuICAgICAgaW50ZXJwb2xhdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICByZXR1cm4gKF9yZWYpID0+IHtcbiAgICAgIGxldCB7IHN0eWxlLCAuLi5wcm9wcyB9ID0gX3JlZjtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcbiAgICAgIGNvbnN0IGNzcyA9XG4gICAgICAgIGxpc3Quc2xpY2UoMCwgbGFzdEluZGV4KS5yZWR1Y2UoKHAsIHMsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbnNbaV07XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9XG4gICAgICAgICAgICB0eXBlb2YgaW50ZXJwb2xhdGlvbiA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgID8gaW50ZXJwb2xhdGlvbihwcm9wcylcbiAgICAgICAgICAgICAgOiBpbnRlcnBvbGF0aW9uO1xuICAgICAgICAgIHJldHVybiBwICsgcyArIGN1cnJlbnQ7XG4gICAgICAgIH0sIFwiXCIpICsgbGlzdFtsYXN0SW5kZXhdO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQobmFtZSwge1xuICAgICAgICBzdHlsZTogW2Nzcywgc3R5bGVdLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5jb25zdCBiYXNlU3R5bGVkID0gKGN1c3RvbUNvbXBvbmVudCkgPT4gY3JlYXRlU3R5bGVkQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudCk7XG5jb25zdCBzdHlsZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFByb3h5KGJhc2VTdHlsZWQsIHtcbiAgZ2V0KF8sIG5hbWUpIHtcbiAgICByZXR1cm4gc2V0SWZBYnNlbnQoY2FjaGUsIG5hbWUsICgpID0+IGNyZWF0ZVN0eWxlZENvbXBvbmVudChuYW1lKSk7XG4gIH0sXG59KTtcbmZ1bmN0aW9uIHNldElmQWJzZW50KG1hcCwga2V5LCBnZXRWYWx1ZSkge1xuICBpZiAobWFwLmhhcyhrZXkpKSB7XG4gICAgcmV0dXJuIG1hcC5nZXQoa2V5KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGtleSk7XG4gICAgbWFwLnNldChrZXksIHZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxudmFyIGluZGV4ID0ge1xuICBDb21wb25lbnQsXG4gIFB1cmVDb21wb25lbnQ6IENvbXBvbmVudCxcbiAgY3JlYXRlRWxlbWVudCxcbiAgRnJhZ21lbnQsXG4gIFNoYWRvd1Jvb3QsXG59O1xuZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRnJhZ21lbnQsXG4gIENvbXBvbmVudCBhcyBQdXJlQ29tcG9uZW50LFxuICBTVkdOYW1lc3BhY2UsXG4gIFNoYWRvd1Jvb3QsXG4gIEZyYWdtZW50IGFzIFN0cmljdE1vZGUsXG4gIGNsYXNzTmFtZSxcbiAgY3JlYXRlRWxlbWVudCxcbiAgY3JlYXRlRmFjdG9yeSxcbiAgY3JlYXRlUmVmLFxuICBpbmRleCBhcyBkZWZhdWx0LFxuICBmb3J3YXJkUmVmLFxuICBjcmVhdGVFbGVtZW50IGFzIGgsXG4gIGlzUmVmLFxuICBqc3gsXG4gIGpzeCBhcyBqc3hzLFxuICBpZGVudGl0eSBhcyBtZW1vLFxuICBwcmV2ZW50RGVmYXVsdCxcbiAgc3RvcFByb3BhZ2F0aW9uLFxuICBzdHlsZWQsXG4gIGlkZW50aXR5IGFzIHVzZUNhbGxiYWNrLFxuICB1c2VDbGFzc0xpc3QsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZU1lbW8sXG4gIGNyZWF0ZVJlZiBhcyB1c2VSZWYsXG4gIHVzZVRleHQsXG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUEsS0FBQyxXQUFVO0FBQUMsZUFBUyxJQUFHO0FBQUMsaUJBQVMsSUFBRztBQUFDLGlCQUFPO0FBQUEsUUFBSTtBQUFDLGlCQUFTLEVBQUUsR0FBRTtBQUFDLGlCQUFPLElBQUUsYUFBVyxPQUFPLEtBQUcsZUFBYSxPQUFPLElBQUU7QUFBQSxRQUFFO0FBQUMsaUJBQVMsRUFBRSxHQUFFO0FBQUMsY0FBRyxTQUFPLEtBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFNLElBQUksVUFBVSxxREFBbUQsQ0FBQztBQUFBLFFBQUU7QUFBQyxZQUFJLElBQUUsTUFBSyxJQUFFLFFBQU8sSUFBRSxDQUFDLENBQUMsRUFBRSxVQUFRLEVBQUUsRUFBQyxXQUFVLEtBQUksYUFBWSxJQUFHLElBQUUsRUFBRSxXQUFTLElBQUUsU0FBUyxHQUFFO0FBQUMsWUFBRSxDQUFDO0FBQUUsaUJBQU0sRUFBQyxXQUFVLEVBQUM7QUFBQSxRQUFDLElBQUUsU0FBUyxHQUFFO0FBQUMsbUJBQVMsSUFBRztBQUFBLFVBQUM7QUFBQyxZQUFFLENBQUM7QUFBRSxjQUFHLFNBQU8sRUFBRSxPQUFNLElBQUksWUFBWSx3RUFBd0U7QUFBRSxZQUFFLFlBQVU7QUFBRSxpQkFBTyxJQUFJO0FBQUEsUUFBQyxJQUMvZixJQUFFLEVBQUUsbUJBQWlCLENBQUMsRUFBRSxjQUFZLE1BQU0sWUFBVSxTQUFTLEdBQUU7QUFBQyxjQUFFLEVBQUU7QUFBVSxpQkFBTyxFQUFFLENBQUMsSUFBRSxJQUFFO0FBQUEsUUFBSSxJQUFFO0FBQUcsWUFBSSxJQUFFLFNBQVMsR0FBRSxHQUFFO0FBQUMsbUJBQVMsSUFB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Q0FBQztFQUNIO0FBQ0Y7QUFDRixJQUFNdUcsYUFBY0MscUJBQW9CWixzQkFBc0JZLGVBQWU7QUFDN0UsSUFBTTFSLFNBQXlCLG9CQUFJMlIsTUFBTUYsWUFBWTtFQUNuREcsSUFBSUMsR0FBR2QsTUFBTTtBQUNYLFdBQU9lLFlBQVlsQixPQUFPRyxNQUFNLE1BQU1ELHNCQUFzQkMsSUFBSSxDQUFDO0VBQ25FO0FBQ0YsQ0FBQztBQUNELFNBQVNlLFlBQVloTCxLQUFLMUUsS0FBSzJQLFVBQVU7QUFDdkMsTUFBSWpMLElBQUlrTCxJQUFJNVAsR0FBRyxHQUFHO0FBQ2hCLFdBQU8wRSxJQUFJOEssSUFBSXhQLEdBQUc7RUFDcEIsT0FBTztBQUNMLFVBQU14QixRQUFRbVIsU0FBUzNQLEdBQUc7QUFDMUIwRSxRQUFJbUwsSUFBSTdQLEtBQUt4QixLQUFLO0FBQ2xCLFdBQU9BO0VBQ1Q7QUFDRjtBQVNBLFNBQVNkLGVBQWVvUyxPQUFPO0FBQzdCQSxRQUFNcFMsZUFBZTtBQUNyQixTQUFPb1M7QUFDVDtBQUNBLFNBQVNuUyxnQkFBZ0JtUyxPQUFPO0FBQzlCQSxRQUFNblMsZ0JBQWdCO0FBQ3RCLFNBQU9tUztBQUNUOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJuYXZpZ2F0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJwcm9jZXNzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiaXNPYmplY3QiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY3JlYXRlRWxlbWVudCIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiaXNPYmplY3QiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSZWFjdF9leHBvcnRzIiwgIl9fZXhwb3J0IiwgIkNvbXBvbmVudCIsICJGcmFnbWVudCIsICJQdXJlQ29tcG9uZW50IiwgIlNWR05hbWVzcGFjZSIsICJTaGFkb3dSb290IiwgIlN0cmljdE1vZGUiLCAiY2xhc3NOYW1lIiwgImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlRmFjdG9yeSIsICJjcmVhdGVSZWYiLCAiZm9yd2FyZFJlZiIsICJoIiwgImlzUmVmIiwgImpzeCIsICJqc3hzIiwgIm1lbW8iLCAiaWRlbnRpdHkiLCAicHJldmVudERlZmF1bHQiLCAic3RvcFByb3BhZ2F0aW9uIiwgInN0eWxlZCIsICJ1c2VDYWxsYmFjayIsICJ1c2VDbGFzc0xpc3QiLCAidXNlSW1wZXJhdGl2ZUhhbmRsZSIsICJ1c2VNZW1vIiwgInVzZVJlZiIsICJ1c2VUZXh0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJrZXlzIiwgIk9iamVjdCIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAidmFsIiwgImlzRWxlbWVudCIsICJub2RlVHlwZSIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc09iamVjdCIsICJpc0Z1bmN0aW9uIiwgImlzQ29tcG9uZW50Q2xhc3MiLCAiQ29tcG9uZW50MiIsICJwcm90b3R5cGUiLCAiaXNSZWFjdENvbXBvbmVudCIsICJpc0FycmF5TGlrZSIsICJvYmoiLCAibGVuZ3RoIiwgImZvckVhY2giLCAiZm4iLCAiX2l0ZXJhdG9yMiIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfc3RlcDIiLCAicyIsICJuIiwgImRvbmUiLCAia2V5IiwgImVyciIsICJlIiwgImYiLCAic2VhbCIsICJjdXJyZW50IiwgIm1heWJlUmVmIiwgImlzVW5pdGxlc3NOdW1iZXIiLCAiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiLCAiYm9yZGVySW1hZ2VPdXRzZXQiLCAiYm9yZGVySW1hZ2VTbGljZSIsICJib3JkZXJJbWFnZVdpZHRoIiwgImJveEZsZXgiLCAiYm94RmxleEdyb3VwIiwgImJveE9yZGluYWxHcm91cCIsICJjb2x1bW5Db3VudCIsICJjb2x1bW5zIiwgImZsZXgiLCAiZmxleEdyb3ciLCAiZmxleFBvc2l0aXZlIiwgImZsZXhTaHJpbmsiLCAiZmxleE5lZ2F0aXZlIiwgImZsZXhPcmRlciIsICJncmlkQXJlYSIsICJncmlkUm93IiwgImdyaWRSb3dFbmQiLCAiZ3JpZFJvd1NwYW4iLCAiZ3JpZFJvd1N0YXJ0IiwgImdyaWRDb2x1bW4iLCAiZ3JpZENvbHVtbkVuZCIsICJncmlkQ29sdW1uU3BhbiIsICJncmlkQ29sdW1uU3RhcnQiLCAiZm9udFdlaWdodCIsICJsaW5lQ2xhbXAiLCAibGluZUhlaWdodCIsICJvcGFjaXR5IiwgIm9yZGVyIiwgIm9ycGhhbnMiLCAidGFiU2l6ZSIsICJ3aWRvd3MiLCAiekluZGV4IiwgInpvb20iLCAiZmlsbE9wYWNpdHkiLCAiZmxvb2RPcGFjaXR5IiwgInN0b3BPcGFjaXR5IiwgInN0cm9rZURhc2hhcnJheSIsICJzdHJva2VEYXNob2Zmc2V0IiwgInN0cm9rZU1pdGVybGltaXQiLCAic3Ryb2tlT3BhY2l0eSIsICJzdHJva2VXaWR0aCIsICJwcmVmaXhLZXkiLCAicHJlZml4IiwgImNoYXJBdCIsICJ0b1VwcGVyQ2FzZSIsICJzdWJzdHJpbmciLCAicHJlZml4ZXMiLCAicHJvcCIsICJqc3hEb21UeXBlIiwgIlN5bWJvbCIsICJmb3IiLCAiSnN4RG9tVHlwZSIsICJKc3hEb21UeXBlMiIsICJfcmVmIiwgImNoaWxkcmVuIiwgInJlZiIsICJhdHRyMiIsICJhdHRyIiwgImlzU2hhZG93Um9vdCIsICJlbCIsICJYTGlua05hbWVzcGFjZSIsICJYTUxOYW1lc3BhY2UiLCAiaXNWaXNpYmxlQ2hpbGQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJtYXAiLCAiZmlsdGVyIiwgIkJvb2xlYW4iLCAiam9pbiIsICJpdGVyYXRvciIsICJmcm9tIiwgImsiLCAic3ZnIiwgImFuaW1hdGUiLCAiY2lyY2xlIiwgImNsaXBQYXRoIiwgImRlZnMiLCAiZGVzYyIsICJlbGxpcHNlIiwgImZlQmxlbmQiLCAiZmVDb2xvck1hdHJpeCIsICJmZUNvbXBvbmVudFRyYW5zZmVyIiwgImZlQ29tcG9zaXRlIiwgImZlQ29udm9sdmVNYXRyaXgiLCAiZmVEaWZmdXNlTGlnaHRpbmciLCAiZmVEaXNwbGFjZW1lbnRNYXAiLCAiZmVEaXN0YW50TGlnaHQiLCAiZmVGbG9vZCIsICJmZUZ1bmNBIiwgImZlRnVuY0IiLCAiZmVGdW5jRyIsICJmZUZ1bmNSIiwgImZlR2F1c3NpYW5CbHVyIiwgImZlSW1hZ2UiLCAiZmVNZXJnZSIsICJmZU1lcmdlTm9kZSIsICJmZU1vcnBob2xvZ3kiLCAiZmVPZmZzZXQiLCAiZmVQb2ludExpZ2h0IiwgImZlU3BlY3VsYXJMaWdodGluZyIsICJmZVNwb3RMaWdodCIsICJmZVRpbGUiLCAiZmVUdXJidWxlbmNlIiwgImZvcmVpZ25PYmplY3QiLCAiZyIsICJpbWFnZSIsICJsaW5lIiwgImxpbmVhckdyYWRpZW50IiwgIm1hcmtlciIsICJtYXNrIiwgIm1ldGFkYXRhIiwgInBhdGgiLCAicGF0dGVybiIsICJwb2x5Z29uIiwgInBvbHlsaW5lIiwgInJhZGlhbEdyYWRpZW50IiwgInJlY3QiLCAic3RvcCIsICJzd2l0Y2giLCAic3ltYm9sIiwgInRleHQiLCAidGV4dFBhdGgiLCAidHNwYW4iLCAidXNlIiwgInZpZXciLCAibm9uUHJlc2VudGF0aW9uU1ZHQXR0cmlidXRlcyIsICJ0YWciLCAiYmluZCIsICJmcmFnbWVudCIsICJkb2N1bWVudCIsICJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwgImFwcGVuZENoaWxkIiwgImNvbnN0cnVjdG9yIiwgInByb3BzIiwgInJlbmRlciIsICJkZWZpbmVQcm9wZXJ0aWVzIiwgImluaXRDb21wb25lbnRDbGFzcyIsICJDbGFzcyIsICJpbnN0YW5jZSIsICJub2RlIiwgImF0dGFjaFJlZiIsICJuYW1lc3BhY2VVUkkiLCAiY3JlYXRlRWxlbWVudE5TIiwgImF0dHJpYnV0ZXMiLCAid2luZG93IiwgIkhUTUxTZWxlY3RFbGVtZW50IiwgIm11bHRpcGxlIiwgInZhbHVlcyIsICJTdHJpbmciLCAicXVlcnlTZWxlY3RvckFsbCIsICJvcHRpb24iLCAic2VsZWN0ZWQiLCAiaW5jbHVkZXMiLCAiZGVmYXVsdFByb3BzIiwgIlR5cGVFcnJvciIsICJjb25jYXQiLCAiX2xlbiIsICJhcmd1bWVudHMiLCAiX2tleTIiLCAidW5zaGlmdCIsICJjaGlsZCIsICJhcHBlbmRDaGlsZHJlbiIsICJhcHBlbmRDaGlsZFRvTm9kZSIsICJjcmVhdGVUZXh0Tm9kZSIsICJjcmVhdGVDb21tZW50IiwgInNoYWRvd1Jvb3QiLCAiYXR0YWNoU2hhZG93IiwgIl9pIiwgIl9hcnIiLCAiSFRNTFRlbXBsYXRlRWxlbWVudCIsICJjb250ZW50IiwgIm5vcm1hbGl6ZUF0dHJpYnV0ZSIsICJzZXBhcmF0b3IiLCAicmVwbGFjZSIsICJtYXRjaCIsICJ0b0xvd2VyQ2FzZSIsICJzdHlsZSIsICJ2IiwgInNldEF0dHJpYnV0ZSIsICJpbmRleE9mIiwgInNldFByb3BlcnR5IiwgImF0dHJpYnV0ZSIsICJhdHRyTlMiLCAiZGF0YVZhbHVlIiwgImRhdGFLZXkiLCAiZGF0YXNldCIsICJpbm5lckhUTUwiLCAiSFRNTFRleHRBcmVhRWxlbWVudCIsICJzcGVsbGNoZWNrIiwgImV2ZW50SGFuZGxlciIsICJldmVudE5hbWUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJhdHRyaWJ1dGUyIiwgInVzZUNhcHR1cmUiLCAiZW5kc1dpdGgiLCAic3RhbmRhcmRFdmVudE5hbWUiLCAiY3VzdG9tRXZlbnROYW1lIiwgInNsaWNlIiwgIlNWR0VsZW1lbnQiLCAidGVzdCIsICJuYW1lc3BhY2UiLCAic2V0QXR0cmlidXRlTlMiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAiaW5pdGlhbFZhbHVlIiwgIlRleHQiLCAiZGVmaW5lUHJvcGVydHkiLCAidGV4dENvbnRlbnQiLCAic2V0VGV4dCIsICJkaXYiLCAibGlzdCIsICJjbGFzc0xpc3QiLCAiQ2xhc3NMaXN0IiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAic2l6ZSIsICJhZGQiLCAicmVtb3ZlIiwgInRvZ2dsZSIsICJ0b2tlbiIsICJmb3JjZSIsICJjb250YWlucyIsICJmYWN0b3J5IiwgImluaXQiLCAiY2FjaGUiLCAiTWFwIiwgImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsICJuYW1lIiwgImludGVycG9sYXRpb25zIiwgIl9rZXkiLCAic3R5bGUyIiwgImxhc3RJbmRleCIsICJjc3MiLCAicmVkdWNlIiwgInAiLCAiaSIsICJpbnRlcnBvbGF0aW9uIiwgImJhc2VTdHlsZWQiLCAiY3VzdG9tQ29tcG9uZW50IiwgIlByb3h5IiwgImdldCIsICJfIiwgInNldElmQWJzZW50IiwgImdldFZhbHVlIiwgImhhcyIsICJzZXQiLCAiZXZlbnQiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3h5LXBvbHlmaWxsQDAuMy4yL25vZGVfbW9kdWxlcy9wcm94eS1wb2x5ZmlsbC9wcm94eS5taW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS51bnNoaWZ0LmpzIiwgInNyYy9SZWFjdC9SZWFjdC50cyIsICJub2RlX21vZHVsZXMvLnBucG0vanN4LWRvbUA4LjEuNC9ub2RlX21vZHVsZXMvanN4LWRvbS9pbmRleC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe2Z1bmN0aW9uIHYoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsKGEpe3JldHVybiBhP1wib2JqZWN0XCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGE6ITF9ZnVuY3Rpb24gcChhKXtpZihudWxsIT09YSYmIWwoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBwcm90b3R5cGUgbWF5IG9ubHkgYmUgYW4gT2JqZWN0IG9yIG51bGw6IFwiK2EpO312YXIgcT1udWxsLGU9T2JqZWN0LHc9ISFlLmNyZWF0ZXx8ISh7X19wcm90b19fOm51bGx9aW5zdGFuY2VvZiBlKSxBPWUuY3JlYXRlfHwodz9mdW5jdGlvbihhKXtwKGEpO3JldHVybntfX3Byb3RvX186YX19OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoKXt9cChhKTtpZihudWxsPT09YSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJOYXRpdmUgT2JqZWN0LmNyZWF0ZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgb2JqZWN0cyB3aXRoIG51bGwgcHJvdG90eXBlXCIpO2MucHJvdG90eXBlPWE7cmV0dXJuIG5ldyBjfSksXG5CPWUuZ2V0UHJvdG90eXBlT2Z8fChbXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGU/ZnVuY3Rpb24oYSl7YT1hLl9fcHJvdG9fXztyZXR1cm4gbChhKT9hOm51bGx9OnYpO3ZhciBtPWZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gaygpe31pZih2b2lkIDA9PT0odGhpcyYmdGhpcyBpbnN0YW5jZW9mIG0/dGhpcy5jb25zdHJ1Y3Rvcjp2b2lkIDApKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciBQcm94eSByZXF1aXJlcyAnbmV3J1wiKTtpZighbChhKXx8IWwoYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjcmVhdGUgcHJveHkgd2l0aCBhIG5vbi1vYmplY3QgYXMgdGFyZ2V0IG9yIGhhbmRsZXJcIik7cT1mdW5jdGlvbigpe2E9bnVsbDtrPWZ1bmN0aW9uKGIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcGVyZm9ybSAnXCIrYitcIicgb24gYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWRcIik7fX07c2V0VGltZW91dChmdW5jdGlvbigpe3E9bnVsbH0sMCk7dmFyIGc9XG5jO2M9e2dldDpudWxsLHNldDpudWxsLGFwcGx5Om51bGwsY29uc3RydWN0Om51bGx9O2Zvcih2YXIgaCBpbiBnKXtpZighKGggaW4gYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3h5IHBvbHlmaWxsIGRvZXMgbm90IHN1cHBvcnQgdHJhcCAnXCIraCtcIidcIik7Y1toXT1nW2hdfVwiZnVuY3Rpb25cIj09PXR5cGVvZiBnJiYoYy5hcHBseT1nLmFwcGx5LmJpbmQoZykpO2c9QihhKTt2YXIgcj0hMSx0PSExO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXt2YXIgZj1mdW5jdGlvbigpe3ZhciBiPXRoaXMmJnRoaXMuY29uc3RydWN0b3I9PT1mLGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrKGI/XCJjb25zdHJ1Y3RcIjpcImFwcGx5XCIpO3JldHVybiBiJiZjLmNvbnN0cnVjdD9jLmNvbnN0cnVjdC5jYWxsKHRoaXMsYSxkKTohYiYmYy5hcHBseT9jLmFwcGx5KGEsdGhpcyxkKTpiPyhkLnVuc2hpZnQoYSksbmV3IChhLmJpbmQuYXBwbHkoYSxkKSkpOmEuYXBwbHkodGhpcyxcbmQpfTtyPSEwfWVsc2UgYSBpbnN0YW5jZW9mIEFycmF5PyhmPVtdLHQ9ITApOmY9d3x8bnVsbCE9PWc/QShnKTp7fTt2YXIgeD1jLmdldD9mdW5jdGlvbihiKXtrKFwiZ2V0XCIpO3JldHVybiBjLmdldCh0aGlzLGIsZil9OmZ1bmN0aW9uKGIpe2soXCJnZXRcIik7cmV0dXJuIHRoaXNbYl19LEM9Yy5zZXQ/ZnVuY3Rpb24oYixkKXtrKFwic2V0XCIpO2Muc2V0KHRoaXMsYixkLGYpfTpmdW5jdGlvbihiLGQpe2soXCJzZXRcIik7dGhpc1tiXT1kfSx5PXt9O2UuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2lmKCEoKHJ8fHQpJiZiIGluIGYpKXt2YXIgZD1lLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpO2UuZGVmaW5lUHJvcGVydHkoZixiLHtlbnVtZXJhYmxlOiEhZC5lbnVtZXJhYmxlLGdldDp4LmJpbmQoYSxiKSxzZXQ6Qy5iaW5kKGEsYil9KTt5W2JdPSEwfX0pO2g9ITA7aWYocnx8dCl7dmFyIEQ9ZS5zZXRQcm90b3R5cGVPZnx8KFtdLl9fcHJvdG9fXz09PVxuQXJyYXkucHJvdG90eXBlP2Z1bmN0aW9uKGIsZCl7cChkKTtiLl9fcHJvdG9fXz1kO3JldHVybiBifTp2KTtnJiZEKGYsZyl8fChoPSExKX1pZihjLmdldHx8IWgpZm9yKHZhciB1IGluIGEpeVt1XXx8ZS5kZWZpbmVQcm9wZXJ0eShmLHUse2dldDp4LmJpbmQoYSx1KX0pO2Uuc2VhbChhKTtlLnNlYWwoZik7cmV0dXJuIGZ9O20ucmV2b2NhYmxlPWZ1bmN0aW9uKGEsYyl7cmV0dXJue3Byb3h5Om5ldyBtKGEsYykscmV2b2tlOnF9fTtyZXR1cm4gbX07dmFyIHo9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBwcm9jZXNzJiZcIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyl8fFwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF2aWdhdG9yJiZcIlJlYWN0TmF0aXZlXCI9PT1uYXZpZ2F0b3IucHJvZHVjdD9nbG9iYWw6c2VsZjt6LlByb3h5fHwoei5Qcm94eT1uKCksei5Qcm94eS5yZXZvY2FibGU9ei5Qcm94eS5yZXZvY2FibGUpO30pKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjEnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjEvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xuXG4vLyBJRTgtXG52YXIgSU5DT1JSRUNUX1JFU1VMVCA9IFtdLnVuc2hpZnQoMCkgIT09IDE7XG5cbi8vIFY4IH4gQ2hyb21lIDwgNzEgYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnVuc2hpZnQoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfUkVTVUxUIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS51bnNoaWZ0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnVuc2hpZnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB1bnNoaWZ0OiBmdW5jdGlvbiB1bnNoaWZ0KGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmIChhcmdDb3VudCkge1xuICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICAgIHZhciBrID0gbGVuO1xuICAgICAgd2hpbGUgKGstLSkge1xuICAgICAgICB2YXIgdG8gPSBrICsgYXJnQ291bnQ7XG4gICAgICAgIGlmIChrIGluIE8pIE9bdG9dID0gT1trXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcmdDb3VudDsgaisrKSB7XG4gICAgICAgIE9bal0gPSBhcmd1bWVudHNbal07XG4gICAgICB9XG4gICAgfSByZXR1cm4gc2V0QXJyYXlMZW5ndGgoTywgbGVuICsgYXJnQ291bnQpO1xuICB9XG59KTtcbiIsICIvLyDlpoLmnpzkvb/nlKgganN4LWRvbe+8jOWImeWPlua2iOazqOmHiuS7peS4i+ihjCAvIFRvIFVzZSBqc3gtZG9tLCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lXG5leHBvcnQgKiBmcm9tICdqc3gtZG9tJztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzO1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJib29sZWFuXCI7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsKSB7XG4gIHJldHVybiB2YWwgJiYgdHlwZW9mIHZhbC5ub2RlVHlwZSA9PT0gXCJudW1iZXJcIjtcbn1cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIjtcbn1cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIjtcbn1cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IHZhbCAhPT0gbnVsbCA6IGlzRnVuY3Rpb24odmFsKTtcbn1cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBpc0NvbXBvbmVudENsYXNzKENvbXBvbmVudCkge1xuICBjb25zdCB7IHByb3RvdHlwZSB9ID0gQ29tcG9uZW50O1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKG9iaikge1xuICByZXR1cm4gKFxuICAgIGlzT2JqZWN0KG9iaikgJiZcbiAgICB0eXBlb2Ygb2JqLmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCJcbiAgKTtcbn1cbmZ1bmN0aW9uIGZvckVhY2godmFsdWUsIGZuKSB7XG4gIGlmICghdmFsdWUpIHJldHVybjtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cyh2YWx1ZSkpIHtcbiAgICBmbih2YWx1ZVtrZXldLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcbiAgcmV0dXJuIE9iamVjdC5zZWFsKHtcbiAgICBjdXJyZW50OiBudWxsLFxuICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVmKG1heWJlUmVmKSB7XG4gIHJldHVybiBpc09iamVjdChtYXliZVJlZikgJiYgXCJjdXJyZW50XCIgaW4gbWF5YmVSZWY7XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgb25cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2I4N2FhYmRmZTFiNzQ2MWU3MzMxYWJiMzYwMWQ5ZTZiYjI3NTQ0YmMvTElDRU5TRVxuICovXG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG5jb25zdCBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMCxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDAsXG4gIGJvcmRlckltYWdlU2xpY2U6IDAsXG4gIGJvcmRlckltYWdlV2lkdGg6IDAsXG4gIGJveEZsZXg6IDAsXG4gIGJveEZsZXhHcm91cDogMCxcbiAgYm94T3JkaW5hbEdyb3VwOiAwLFxuICBjb2x1bW5Db3VudDogMCxcbiAgY29sdW1uczogMCxcbiAgZmxleDogMCxcbiAgZmxleEdyb3c6IDAsXG4gIGZsZXhQb3NpdGl2ZTogMCxcbiAgZmxleFNocmluazogMCxcbiAgZmxleE5lZ2F0aXZlOiAwLFxuICBmbGV4T3JkZXI6IDAsXG4gIGdyaWRBcmVhOiAwLFxuICBncmlkUm93OiAwLFxuICBncmlkUm93RW5kOiAwLFxuICBncmlkUm93U3BhbjogMCxcbiAgZ3JpZFJvd1N0YXJ0OiAwLFxuICBncmlkQ29sdW1uOiAwLFxuICBncmlkQ29sdW1uRW5kOiAwLFxuICBncmlkQ29sdW1uU3BhbjogMCxcbiAgZ3JpZENvbHVtblN0YXJ0OiAwLFxuICBmb250V2VpZ2h0OiAwLFxuICBsaW5lQ2xhbXA6IDAsXG4gIGxpbmVIZWlnaHQ6IDAsXG4gIG9wYWNpdHk6IDAsXG4gIG9yZGVyOiAwLFxuICBvcnBoYW5zOiAwLFxuICB0YWJTaXplOiAwLFxuICB3aWRvd3M6IDAsXG4gIHpJbmRleDogMCxcbiAgem9vbTogMCxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMCxcbiAgZmxvb2RPcGFjaXR5OiAwLFxuICBzdG9wT3BhY2l0eTogMCxcbiAgc3Ryb2tlRGFzaGFycmF5OiAwLFxuICBzdHJva2VEYXNob2Zmc2V0OiAwLFxuICBzdHJva2VNaXRlcmxpbWl0OiAwLFxuICBzdHJva2VPcGFjaXR5OiAwLFxuICBzdHJva2VXaWR0aDogMCxcbn07XG5cbi8qKlxuICogQHBhcmFtIHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbmNvbnN0IHByZWZpeGVzID0gW1wiV2Via2l0XCIsIFwibXNcIiwgXCJNb3pcIiwgXCJPXCJdO1xuLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goKHByb3ApID0+IHtcbiAgcHJlZml4ZXMuZm9yRWFjaCgocHJlZml4KSA9PiB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSAwOyAvLyBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdXG4gIH0pO1xufSk7XG5cbmNvbnN0IGpzeERvbVR5cGUgPSBTeW1ib2wuZm9yKFwianN4LWRvbTp0eXBlXCIpO1xudmFyIEpzeERvbVR5cGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoSnN4RG9tVHlwZSkge1xuICBKc3hEb21UeXBlW1wiU2hhZG93Um9vdFwiXSA9IFwiU2hhZG93Um9vdFwiO1xuICByZXR1cm4gSnN4RG9tVHlwZTtcbn0pKEpzeERvbVR5cGUgfHwge30pO1xuZnVuY3Rpb24gU2hhZG93Um9vdChfcmVmKSB7XG4gIGxldCB7IGNoaWxkcmVuLCByZWYsIC4uLmF0dHIgfSA9IF9yZWY7XG4gIHJldHVybiB7XG4gICAgW2pzeERvbVR5cGVdOiBKc3hEb21UeXBlLlNoYWRvd1Jvb3QsXG4gICAgcmVmLFxuICAgIGF0dHIsXG4gICAgY2hpbGRyZW4sXG4gIH07XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QoZWwpIHtcbiAgcmV0dXJuIGVsICE9IG51bGwgJiYgZWxbanN4RG9tVHlwZV0gPT09IEpzeERvbVR5cGUuU2hhZG93Um9vdDtcbn1cblxuY29uc3QgU1ZHTmFtZXNwYWNlID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuY29uc3QgWExpbmtOYW1lc3BhY2UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIjtcbmNvbnN0IFhNTE5hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCI7XG5cbi8vIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvanN4LWluLWRlcHRoLmh0bWwjYm9vbGVhbnMtbnVsbC1hbmQtdW5kZWZpbmVkLWFyZS1pZ25vcmVkXG4vLyBFbXVsYXRlIEpTWCBFeHByZXNzaW9uIGxvZ2ljIHRvIGlnbm9yZSBjZXJ0YWluIHR5cGUgb2YgY2hpbGRyZW4gb3IgY2xhc3NOYW1lLlxuZnVuY3Rpb24gaXNWaXNpYmxlQ2hpbGQodmFsdWUpIHtcbiAgcmV0dXJuICFpc0Jvb2xlYW4odmFsdWUpICYmIHZhbHVlICE9IG51bGw7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGB2YWx1ZWAgdG8gYSBjbGFzc05hbWUgc3RyaW5nLlxuICogYHZhbHVlYCBjYW4gYmUgYSBzdHJpbmcsIGFuIGFycmF5IG9yIGEgYERpY3Rpb25hcnk8Ym9vbGVhbj5gLlxuICovXG5mdW5jdGlvbiBjbGFzc05hbWUodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChjbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lKEFycmF5LmZyb20odmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXModmFsdWUpXG4gICAgICAuZmlsdGVyKChrKSA9PiB2YWx1ZVtrXSlcbiAgICAgIC5qb2luKFwiIFwiKTtcbiAgfSBlbHNlIGlmIChpc1Zpc2libGVDaGlsZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5jb25zdCBzdmcgPSB7XG4gIGFuaW1hdGU6IDAsXG4gIGNpcmNsZTogMCxcbiAgY2xpcFBhdGg6IDAsXG4gIGRlZnM6IDAsXG4gIGRlc2M6IDAsXG4gIGVsbGlwc2U6IDAsXG4gIGZlQmxlbmQ6IDAsXG4gIGZlQ29sb3JNYXRyaXg6IDAsXG4gIGZlQ29tcG9uZW50VHJhbnNmZXI6IDAsXG4gIGZlQ29tcG9zaXRlOiAwLFxuICBmZUNvbnZvbHZlTWF0cml4OiAwLFxuICBmZURpZmZ1c2VMaWdodGluZzogMCxcbiAgZmVEaXNwbGFjZW1lbnRNYXA6IDAsXG4gIGZlRGlzdGFudExpZ2h0OiAwLFxuICBmZUZsb29kOiAwLFxuICBmZUZ1bmNBOiAwLFxuICBmZUZ1bmNCOiAwLFxuICBmZUZ1bmNHOiAwLFxuICBmZUZ1bmNSOiAwLFxuICBmZUdhdXNzaWFuQmx1cjogMCxcbiAgZmVJbWFnZTogMCxcbiAgZmVNZXJnZTogMCxcbiAgZmVNZXJnZU5vZGU6IDAsXG4gIGZlTW9ycGhvbG9neTogMCxcbiAgZmVPZmZzZXQ6IDAsXG4gIGZlUG9pbnRMaWdodDogMCxcbiAgZmVTcGVjdWxhckxpZ2h0aW5nOiAwLFxuICBmZVNwb3RMaWdodDogMCxcbiAgZmVUaWxlOiAwLFxuICBmZVR1cmJ1bGVuY2U6IDAsXG4gIGZpbHRlcjogMCxcbiAgZm9yZWlnbk9iamVjdDogMCxcbiAgZzogMCxcbiAgaW1hZ2U6IDAsXG4gIGxpbmU6IDAsXG4gIGxpbmVhckdyYWRpZW50OiAwLFxuICBtYXJrZXI6IDAsXG4gIG1hc2s6IDAsXG4gIG1ldGFkYXRhOiAwLFxuICBwYXRoOiAwLFxuICBwYXR0ZXJuOiAwLFxuICBwb2x5Z29uOiAwLFxuICBwb2x5bGluZTogMCxcbiAgcmFkaWFsR3JhZGllbnQ6IDAsXG4gIHJlY3Q6IDAsXG4gIHN0b3A6IDAsXG4gIHN2ZzogMCxcbiAgc3dpdGNoOiAwLFxuICBzeW1ib2w6IDAsXG4gIHRleHQ6IDAsXG4gIHRleHRQYXRoOiAwLFxuICB0c3BhbjogMCxcbiAgdXNlOiAwLFxuICB2aWV3OiAwLFxufTtcbmNvbnN0IG5vblByZXNlbnRhdGlvblNWR0F0dHJpYnV0ZXMgPVxuICAvXihhKGxsfHR8dSl8YmFzZVtGUF18YyhhbHxsaXBQYXRoVXxvbil8ZGl8ZWR8ZXh8ZmlsdGVyW1JVXXxnKGx5cGhSfHIpfGtlfGwoZW58aW0pfG1hKHJrZXJbSFVXXXxzKXxufHBhdHxwcnxwb2ludFteZV18cmVbXm5dfHNbcHV5XXxzdFteb3JdfHRhfHRleHRMfHZpfHhDfHl8eikvO1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0YWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0YWcpO1xufVxuZnVuY3Rpb24gRnJhZ21lbnQoYXR0cikge1xuICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgYXBwZW5kQ2hpbGQoYXR0ci5jaGlsZHJlbiwgZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5jbGFzcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyogQF9fUFVSRV9fICovXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb21wb25lbnQucHJvdG90eXBlLCB7XG4gIGlzUmVhY3RDb21wb25lbnQ6IHtcbiAgICB2YWx1ZTogdHJ1ZSxcbiAgfSxcbn0pO1xuZnVuY3Rpb24gaW5pdENvbXBvbmVudENsYXNzKENsYXNzLCBhdHRyLCBjaGlsZHJlbikge1xuICBhdHRyID0ge1xuICAgIC4uLmF0dHIsXG4gICAgY2hpbGRyZW4sXG4gIH07XG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IENsYXNzKGF0dHIpO1xuICBjb25zdCBub2RlID0gaW5zdGFuY2UucmVuZGVyKCk7XG4gIGlmIChcInJlZlwiIGluIGF0dHIpIHtcbiAgICBhdHRhY2hSZWYoYXR0ci5yZWYsIGluc3RhbmNlKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZnVuY3Rpb24ganN4KHRhZywgX3JlZikge1xuICBsZXQgeyBjaGlsZHJlbiwgLi4uYXR0ciB9ID0gX3JlZjtcbiAgaWYgKCFhdHRyLm5hbWVzcGFjZVVSSSAmJiBzdmdbdGFnXSA9PT0gMCkge1xuICAgIGF0dHIgPSB7XG4gICAgICAuLi5hdHRyLFxuICAgICAgbmFtZXNwYWNlVVJJOiBTVkdOYW1lc3BhY2UsXG4gICAgfTtcbiAgfVxuICBsZXQgbm9kZTtcbiAgaWYgKGlzU3RyaW5nKHRhZykpIHtcbiAgICBub2RlID0gYXR0ci5uYW1lc3BhY2VVUklcbiAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGF0dHIubmFtZXNwYWNlVVJJLCB0YWcpXG4gICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBhdHRyaWJ1dGVzKGF0dHIsIG5vZGUpO1xuICAgIGFwcGVuZENoaWxkKGNoaWxkcmVuLCBub2RlKTtcblxuICAgIC8vIFNlbGVjdCBgb3B0aW9uYCBlbGVtZW50cyBpbiBgc2VsZWN0YFxuICAgIGlmIChub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxTZWxlY3RFbGVtZW50ICYmIGF0dHIudmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGF0dHIubXVsdGlwbGUgPT09IHRydWUgJiYgQXJyYXkuaXNBcnJheShhdHRyLnZhbHVlKSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBhdHRyLnZhbHVlLm1hcCgodmFsdWUpID0+IFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICBub2RlXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoXCJvcHRpb25cIilcbiAgICAgICAgICAuZm9yRWFjaChcbiAgICAgICAgICAgIChvcHRpb24pID0+IChvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZXMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKSksXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSBhdHRyLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRhY2hSZWYoYXR0ci5yZWYsIG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24odGFnKSkge1xuICAgIC8vIEN1c3RvbSBlbGVtZW50cy5cbiAgICBpZiAoaXNPYmplY3QodGFnLmRlZmF1bHRQcm9wcykpIHtcbiAgICAgIGF0dHIgPSB7XG4gICAgICAgIC4uLnRhZy5kZWZhdWx0UHJvcHMsXG4gICAgICAgIC4uLmF0dHIsXG4gICAgICB9O1xuICAgIH1cbiAgICBub2RlID0gaXNDb21wb25lbnRDbGFzcyh0YWcpXG4gICAgICA/IGluaXRDb21wb25lbnRDbGFzcyh0YWcsIGF0dHIsIGNoaWxkcmVuKVxuICAgICAgOiB0YWcoe1xuICAgICAgICAgIC4uLmF0dHIsXG4gICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgSlNYIGVsZW1lbnQgdHlwZTogJHt0YWd9YCk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZywgYXR0cikge1xuICBmb3IgKFxuICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgIGNoaWxkcmVuID0gbmV3IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSxcbiAgICAgIF9rZXkyID0gMjtcbiAgICBfa2V5MiA8IF9sZW47XG4gICAgX2tleTIrK1xuICApIHtcbiAgICBjaGlsZHJlbltfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuICBpZiAoaXNTdHJpbmcoYXR0cikgfHwgQXJyYXkuaXNBcnJheShhdHRyKSkge1xuICAgIGNoaWxkcmVuLnVuc2hpZnQoYXR0cik7XG4gICAgYXR0ciA9IHt9O1xuICB9XG4gIGF0dHIgPSBhdHRyIHx8IHt9O1xuICBpZiAoYXR0ci5jaGlsZHJlbiAhPSBudWxsICYmICFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAoeyBjaGlsZHJlbiwgLi4uYXR0ciB9ID0gYXR0cik7XG4gIH1cbiAgcmV0dXJuIGpzeChcbiAgICB0YWcsXG4gICAge1xuICAgICAgLi4uYXR0cixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH0sXG4gICAgYXR0ci5rZXksXG4gICk7XG59XG5mdW5jdGlvbiBhdHRhY2hSZWYocmVmLCBub2RlKSB7XG4gIGlmIChpc1JlZihyZWYpKSB7XG4gICAgcmVmLmN1cnJlbnQgPSBub2RlO1xuICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24ocmVmKSkge1xuICAgIHJlZihub2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQoY2hpbGQsIG5vZGUpIHtcbiAgaWYgKGlzQXJyYXlMaWtlKGNoaWxkKSkge1xuICAgIGFwcGVuZENoaWxkcmVuKGNoaWxkLCBub2RlKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyhjaGlsZCkgfHwgaXNOdW1iZXIoY2hpbGQpKSB7XG4gICAgYXBwZW5kQ2hpbGRUb05vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQpLCBub2RlKTtcbiAgfSBlbHNlIGlmIChjaGlsZCA9PT0gbnVsbCkge1xuICAgIGFwcGVuZENoaWxkVG9Ob2RlKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCJcIiksIG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjaGlsZCkpIHtcbiAgICBhcHBlbmRDaGlsZFRvTm9kZShjaGlsZCwgbm9kZSk7XG4gIH0gZWxzZSBpZiAoaXNTaGFkb3dSb290KGNoaWxkKSkge1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBub2RlLmF0dGFjaFNoYWRvdyhjaGlsZC5hdHRyKTtcbiAgICBhcHBlbmRDaGlsZChjaGlsZC5jaGlsZHJlbiwgc2hhZG93Um9vdCk7XG4gICAgYXR0YWNoUmVmKGNoaWxkLnJlZiwgc2hhZG93Um9vdCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkcmVuKGNoaWxkcmVuLCBub2RlKSB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgWy4uLmNoaWxkcmVuXSkge1xuICAgIGFwcGVuZENoaWxkKGNoaWxkLCBub2RlKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Ob2RlKGNoaWxkLCBub2RlKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICBub2RlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVBdHRyaWJ1dGUocywgc2VwYXJhdG9yKSB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChtYXRjaCkgPT4gc2VwYXJhdG9yICsgbWF0Y2gudG9Mb3dlckNhc2UoKSk7XG59XG5mdW5jdGlvbiBzdHlsZShub2RlLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gZmFsc2UpO1xuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goKHYpID0+IHN0eWxlKG5vZGUsIHYpKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBmb3JFYWNoKHZhbHVlLCAodmFsLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkuaW5kZXhPZihcIi1cIikgPT09IDApIHtcbiAgICAgICAgLy8gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzICh2YXJpYWJsZXMpIHN0YXJ0IHdpdGggYC1gIChlLmcuIGAtLW15LXZhcmlhYmxlYClcbiAgICAgICAgLy8gYW5kIG11c3QgYmUgYXNzaWduZWQgdmlhIGBzZXRQcm9wZXJ0eWAuXG4gICAgICAgIG5vZGUuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWwpO1xuICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWwpICYmIGlzVW5pdGxlc3NOdW1iZXJba2V5XSAhPT0gMCkge1xuICAgICAgICBub2RlLnN0eWxlW2tleV0gPSB2YWwgKyBcInB4XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnN0eWxlW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGF0dHJpYnV0ZShrZXksIHZhbHVlLCBub2RlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBcInhsaW5rQWN0dWF0ZVwiOlxuICAgIGNhc2UgXCJ4bGlua0FyY3JvbGVcIjpcbiAgICBjYXNlIFwieGxpbmtIcmVmXCI6XG4gICAgY2FzZSBcInhsaW5rUm9sZVwiOlxuICAgIGNhc2UgXCJ4bGlua1Nob3dcIjpcbiAgICBjYXNlIFwieGxpbmtUaXRsZVwiOlxuICAgIGNhc2UgXCJ4bGlua1R5cGVcIjpcbiAgICAgIGF0dHJOUyhub2RlLCBYTGlua05hbWVzcGFjZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCI6XCIpLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInhtbG5zWGxpbmtcIjpcbiAgICAgIGF0dHIobm9kZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCI6XCIpLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInhtbEJhc2VcIjpcbiAgICBjYXNlIFwieG1sTGFuZ1wiOlxuICAgIGNhc2UgXCJ4bWxTcGFjZVwiOlxuICAgICAgYXR0ck5TKG5vZGUsIFhNTE5hbWVzcGFjZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCI6XCIpLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gIH1cbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlIFwiaHRtbEZvclwiOlxuICAgICAgYXR0cihub2RlLCBcImZvclwiLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImRhdGFzZXRcIjpcbiAgICAgIGZvckVhY2godmFsdWUsIChkYXRhVmFsdWUsIGRhdGFLZXkpID0+IHtcbiAgICAgICAgaWYgKGRhdGFWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgbm9kZS5kYXRhc2V0W2RhdGFLZXldID0gZGF0YVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgIGNhc2UgXCJ0ZXh0Q29udGVudFwiOlxuICAgICAgaWYgKGlzVmlzaWJsZUNoaWxkKHZhbHVlKSkge1xuICAgICAgICBub2RlW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSB2YWx1ZVtcIl9faHRtbFwiXTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgLy8gc2tpcCBudWxsaXNoIHZhbHVlc1xuICAgICAgICAvLyBmb3IgYDxzZWxlY3Q+YCBhcHBseSB2YWx1ZSBhZnRlciBhcHBlbmRpbmcgYDxvcHRpb24+YCBlbGVtZW50c1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICAgICAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIHVzZSBhdHRyaWJ1dGUgZm9yIG90aGVyIGVsZW1lbnRzXG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic3BlbGxDaGVja1wiOlxuICAgICAgbm9kZS5zcGVsbGNoZWNrID0gdmFsdWU7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImNsYXNzXCI6XG4gICAgY2FzZSBcImNsYXNzTmFtZVwiOlxuICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cihub2RlLCBcImNsYXNzXCIsIGNsYXNzTmFtZSh2YWx1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJyZWZcIjpcbiAgICBjYXNlIFwibmFtZXNwYWNlVVJJXCI6XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICBzdHlsZShub2RlLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcIm9uXCI6XG4gICAgY2FzZSBcIm9uQ2FwdHVyZVwiOlxuICAgICAgZm9yRWFjaCh2YWx1ZSwgKGV2ZW50SGFuZGxlciwgZXZlbnROYW1lKSA9PiB7XG4gICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlciwga2V5ID09PSBcIm9uQ2FwdHVyZVwiKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIC8vIGZhbGx0aHJvdWdoXG4gIH1cbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgaWYgKGtleVswXSA9PT0gXCJvXCIgJiYga2V5WzFdID09PSBcIm5cIikge1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdXNlQ2FwdHVyZSA9IGF0dHJpYnV0ZS5lbmRzV2l0aChcImNhcHR1cmVcIik7XG4gICAgICBpZiAoYXR0cmlidXRlID09PSBcIm9uZG91YmxlY2xpY2tcIikge1xuICAgICAgICBhdHRyaWJ1dGUgPSBcIm9uZGJsY2xpY2tcIjtcbiAgICAgIH0gZWxzZSBpZiAodXNlQ2FwdHVyZSAmJiBhdHRyaWJ1dGUgPT09IFwib25kb3VibGVjbGlja2NhcHR1cmVcIikge1xuICAgICAgICBhdHRyaWJ1dGUgPSBcIm9uZGJsY2xpY2tjYXB0dXJlXCI7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZUNhcHR1cmUgJiYgbm9kZVthdHRyaWJ1dGVdID09PSBudWxsKSB7XG4gICAgICAgIC8vIHVzZSBwcm9wZXJ0eSB3aGVuIHBvc3NpYmxlIFBSICMxN1xuICAgICAgICBub2RlW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodXNlQ2FwdHVyZSkge1xuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgYXR0cmlidXRlLnN1YnN0cmluZygyLCBhdHRyaWJ1dGUubGVuZ3RoIC0gNyksXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBldmVudE5hbWU7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgaW4gd2luZG93KSB7XG4gICAgICAgICAgLy8gc3RhbmRhcmQgZXZlbnRcbiAgICAgICAgICAvLyB0aGUgSlNYIGF0dHJpYnV0ZSBjb3VsZCBoYXZlIGJlZW4gXCJvbk1vdXNlT3ZlclwiIGFuZCB0aGVcbiAgICAgICAgICAvLyBtZW1iZXIgbmFtZSBcIm9ubW91c2VvdmVyXCIgaXMgb24gdGhlIHdpbmRvdydzIHByb3RvdHlwZVxuICAgICAgICAgIC8vIHNvIGxldCdzIGFkZCB0aGUgbGlzdGVuZXIgXCJtb3VzZW92ZXJcIiwgd2hpY2ggaXMgYWxsIGxvd2VyY2FzZWRcbiAgICAgICAgICBjb25zdCBzdGFuZGFyZEV2ZW50TmFtZSA9IGF0dHJpYnV0ZS5zdWJzdHJpbmcoMik7XG4gICAgICAgICAgZXZlbnROYW1lID0gc3RhbmRhcmRFdmVudE5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY3VzdG9tIGV2ZW50XG4gICAgICAgICAgLy8gdGhlIEpTWCBhdHRyaWJ1dGUgY291bGQgaGF2ZSBiZWVuIFwib25NeUN1c3RvbUV2ZW50XCJcbiAgICAgICAgICAvLyBzbyBsZXQncyB0cmltIG9mZiB0aGUgXCJvblwiIHByZWZpeCBhbmQgbG93ZXJjYXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgICAgICAvLyBhbmQgYWRkIHRoZSBsaXN0ZW5lciBcIm15Q3VzdG9tRXZlbnRcIlxuICAgICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGNoYXJhY3Rlciwgd2Uga2VlcCB0aGUgZXZlbnQgbmFtZSBjYXNlXG4gICAgICAgICAgY29uc3QgY3VzdG9tRXZlbnROYW1lID0gYXR0cmlidXRlWzJdICsga2V5LnNsaWNlKDMpO1xuICAgICAgICAgIGV2ZW50TmFtZSA9IGN1c3RvbUV2ZW50TmFtZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIG5vZGVba2V5XSA9IHZhbHVlO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgYXR0cihub2RlLCBrZXksIFwiXCIpO1xuICB9IGVsc2UgaWYgKHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50ICYmICFub25QcmVzZW50YXRpb25TVkdBdHRyaWJ1dGVzLnRlc3Qoa2V5KSkge1xuICAgICAgYXR0cihub2RlLCBub3JtYWxpemVBdHRyaWJ1dGUoa2V5LCBcIi1cIiksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0cihub2RlLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGF0dHIobm9kZSwga2V5LCB2YWx1ZSkge1xuICBub2RlLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGF0dHJOUyhub2RlLCBuYW1lc3BhY2UsIGtleSwgdmFsdWUpIHtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIGtleSwgdmFsdWUpO1xufVxuZnVuY3Rpb24gYXR0cmlidXRlcyhhdHRyLCBub2RlKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMoYXR0cikpIHtcbiAgICBhdHRyaWJ1dGUoa2V5LCBhdHRyW2tleV0sIG5vZGUpO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiB1c2VUZXh0KGluaXRpYWxWYWx1ZSkge1xuICBjb25zdCB0ZXh0ID0gbmV3IFRleHQoKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRleHQsIFwidG9TdHJpbmdcIiwge1xuICAgIHZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dENvbnRlbnQ7XG4gICAgfSxcbiAgfSk7XG4gIGZ1bmN0aW9uIHNldFRleHQodmFsdWUpIHtcbiAgICB0ZXh0LnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH1cbiAgaWYgKGluaXRpYWxWYWx1ZSAhPSBudWxsKSB7XG4gICAgc2V0VGV4dChpbml0aWFsVmFsdWUpO1xuICB9XG4gIHJldHVybiBbdGV4dCwgc2V0VGV4dF07XG59XG5mdW5jdGlvbiB1c2VDbGFzc0xpc3QoaW5pdGlhbFZhbHVlKSB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkge1xuICAgIGRpdi5jbGFzc05hbWUgPSBjbGFzc05hbWUoaW5pdGlhbFZhbHVlKTtcbiAgfVxuICBsZXQgbGlzdCA9IGRpdi5jbGFzc0xpc3Q7XG4gIGZ1bmN0aW9uIENsYXNzTGlzdCh2YWx1ZSkge1xuICAgIHZhbHVlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIGxpc3QudmFsdWUpO1xuICAgIGxpc3QgPSB2YWx1ZS5jbGFzc0xpc3Q7XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG4gICAgQ2xhc3NMaXN0LFxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHtcbiAgICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gbGlzdC5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gbGlzdC52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBhZGQoKSB7XG4gICAgICAgIGxpc3QuYWRkKC4uLmFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlKCkge1xuICAgICAgICBsaXN0LnJlbW92ZSguLi5hcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIHRvZ2dsZSh0b2tlbiwgZm9yY2UpIHtcbiAgICAgICAgbGlzdC50b2dnbGUodG9rZW4sIGZvcmNlKTtcbiAgICAgIH0sXG4gICAgICBjb250YWlucyh0b2tlbikge1xuICAgICAgICByZXR1cm4gbGlzdC5jb250YWlucyh0b2tlbik7XG4gICAgICB9LFxuICAgIH0pLFxuICApO1xuICByZXR1cm4gQ2xhc3NMaXN0O1xufVxuXG5mdW5jdGlvbiB1c2VNZW1vKGZhY3RvcnkpIHtcbiAgcmV0dXJuIGZhY3RvcnkoKTtcbn1cbmZ1bmN0aW9uIGZvcndhcmRSZWYocmVuZGVyKSB7XG4gIHJldHVybiAoX3JlZikgPT4ge1xuICAgIGxldCB7IHJlZiwgLi4ucHJvcHMgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHJlbmRlcihwcm9wcywgcmVmID8/IGNyZWF0ZVJlZigpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBpbml0KSB7XG4gIGF0dGFjaFJlZihyZWYsIGluaXQoKSk7XG59XG5cbmNvbnN0IGNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmNvbnN0IGNyZWF0ZVN0eWxlZENvbXBvbmVudCA9IChuYW1lKSA9PlxuICBmdW5jdGlvbiAobGlzdCkge1xuICAgIGZvciAoXG4gICAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGludGVycG9sYXRpb25zID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSxcbiAgICAgICAgX2tleSA9IDE7XG4gICAgICBfa2V5IDwgX2xlbjtcbiAgICAgIF9rZXkrK1xuICAgICkge1xuICAgICAgaW50ZXJwb2xhdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICByZXR1cm4gKF9yZWYpID0+IHtcbiAgICAgIGxldCB7IHN0eWxlLCAuLi5wcm9wcyB9ID0gX3JlZjtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcbiAgICAgIGNvbnN0IGNzcyA9XG4gICAgICAgIGxpc3Quc2xpY2UoMCwgbGFzdEluZGV4KS5yZWR1Y2UoKHAsIHMsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbnNbaV07XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9XG4gICAgICAgICAgICB0eXBlb2YgaW50ZXJwb2xhdGlvbiA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgID8gaW50ZXJwb2xhdGlvbihwcm9wcylcbiAgICAgICAgICAgICAgOiBpbnRlcnBvbGF0aW9uO1xuICAgICAgICAgIHJldHVybiBwICsgcyArIGN1cnJlbnQ7XG4gICAgICAgIH0sIFwiXCIpICsgbGlzdFtsYXN0SW5kZXhdO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQobmFtZSwge1xuICAgICAgICBzdHlsZTogW2Nzcywgc3R5bGVdLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5jb25zdCBiYXNlU3R5bGVkID0gKGN1c3RvbUNvbXBvbmVudCkgPT4gY3JlYXRlU3R5bGVkQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudCk7XG5jb25zdCBzdHlsZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFByb3h5KGJhc2VTdHlsZWQsIHtcbiAgZ2V0KF8sIG5hbWUpIHtcbiAgICByZXR1cm4gc2V0SWZBYnNlbnQoY2FjaGUsIG5hbWUsICgpID0+IGNyZWF0ZVN0eWxlZENvbXBvbmVudChuYW1lKSk7XG4gIH0sXG59KTtcbmZ1bmN0aW9uIHNldElmQWJzZW50KG1hcCwga2V5LCBnZXRWYWx1ZSkge1xuICBpZiAobWFwLmhhcyhrZXkpKSB7XG4gICAgcmV0dXJuIG1hcC5nZXQoa2V5KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGtleSk7XG4gICAgbWFwLnNldChrZXksIHZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxudmFyIGluZGV4ID0ge1xuICBDb21wb25lbnQsXG4gIFB1cmVDb21wb25lbnQ6IENvbXBvbmVudCxcbiAgY3JlYXRlRWxlbWVudCxcbiAgRnJhZ21lbnQsXG4gIFNoYWRvd1Jvb3QsXG59O1xuZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRnJhZ21lbnQsXG4gIENvbXBvbmVudCBhcyBQdXJlQ29tcG9uZW50LFxuICBTVkdOYW1lc3BhY2UsXG4gIFNoYWRvd1Jvb3QsXG4gIEZyYWdtZW50IGFzIFN0cmljdE1vZGUsXG4gIGNsYXNzTmFtZSxcbiAgY3JlYXRlRWxlbWVudCxcbiAgY3JlYXRlRmFjdG9yeSxcbiAgY3JlYXRlUmVmLFxuICBpbmRleCBhcyBkZWZhdWx0LFxuICBmb3J3YXJkUmVmLFxuICBjcmVhdGVFbGVtZW50IGFzIGgsXG4gIGlzUmVmLFxuICBqc3gsXG4gIGpzeCBhcyBqc3hzLFxuICBpZGVudGl0eSBhcyBtZW1vLFxuICBwcmV2ZW50RGVmYXVsdCxcbiAgc3RvcFByb3BhZ2F0aW9uLFxuICBzdHlsZWQsXG4gIGlkZW50aXR5IGFzIHVzZUNhbGxiYWNrLFxuICB1c2VDbGFzc0xpc3QsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZU1lbW8sXG4gIGNyZWF0ZVJlZiBhcyB1c2VSZWYsXG4gIHVzZVRleHQsXG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUEsS0FBQyxXQUFVO0FBQUMsZUFBUyxJQUFHO0FBQUMsaUJBQVMsSUFBRztBQUFDLGlCQUFPO0FBQUEsUUFBSTtBQUFDLGlCQUFTLEVBQUUsR0FBRTtBQUFDLGlCQUFPLElBQUUsYUFBVyxPQUFPLEtBQUcsZUFBYSxPQUFPLElBQUU7QUFBQSxRQUFFO0FBQUMsaUJBQVMsRUFBRSxHQUFFO0FBQUMsY0FBRyxTQUFPLEtBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFNLElBQUksVUFBVSxxREFBbUQsQ0FBQztBQUFBLFFBQUU7QUFBQyxZQUFJLElBQUUsTUFBSyxJQUFFLFFBQU8sSUFBRSxDQUFDLENBQUMsRUFBRSxVQUFRLEVBQUUsRUFBQyxXQUFVLEtBQUksYUFBWSxJQUFHLElBQUUsRUFBRSxXQUFTLElBQUUsU0FBUyxHQUFFO0FBQUMsWUFBRSxDQUFDO0FBQUUsaUJBQU0sRUFBQyxXQUFVLEVBQUM7QUFBQSxRQUFDLElBQUUsU0FBUyxHQUFFO0FBQUMsbUJBQVMsSUFBRztBQUFBLFVBQUM7QUFBQyxZQUFFLENBQUM7QUFBRSxjQUFHLFNBQU8sRUFBRSxPQUFNLElBQUksWUFBWSx3RUFBd0U7QUFBRSxZQUFFLFlBQVU7QUFBRSxpQkFBTyxJQUFJO0FBQUEsUUFBQyxJQUMvZixJQUFFLEVBQUUsbUJBQWlCLENBQUMsRUFBRSxjQUFZLE1BQU0sWUFBVSxTQUFTLEdBQUU7QUFBQyxjQUFFLEVBQUU7QUFBVSxpQkFBTyxFQUFFLENBQUMsSUFBRSxJQUFFO0FBQUEsUUFBSSxJQUFFO0FBQUcsWUFBSSxJQUFFLFNBQVMsR0FBRSxHQUFFO0FBQUMsbUJBQVMsSUFB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Q0FBQztFQUNIO0FBQ0Y7QUFDRixJQUFNdUcsYUFBY0MscUJBQW9CWixzQkFBc0JZLGVBQWU7QUFDN0UsSUFBTTFSLFNBQXlCLG9CQUFJMlIsTUFBTUYsWUFBWTtFQUNuREcsSUFBSUMsR0FBR2QsTUFBTTtBQUNYLFdBQU9lLFlBQVlsQixPQUFPRyxNQUFNLE1BQU1ELHNCQUFzQkMsSUFBSSxDQUFDO0VBQ25FO0FBQ0YsQ0FBQztBQUNELFNBQVNlLFlBQVloTCxLQUFLMUUsS0FBSzJQLFVBQVU7QUFDdkMsTUFBSWpMLElBQUlrTCxJQUFJNVAsR0FBRyxHQUFHO0FBQ2hCLFdBQU8wRSxJQUFJOEssSUFBSXhQLEdBQUc7RUFDcEIsT0FBTztBQUNMLFVBQU14QixRQUFRbVIsU0FBUzNQLEdBQUc7QUFDMUIwRSxRQUFJbUwsSUFBSTdQLEtBQUt4QixLQUFLO0FBQ2xCLFdBQU9BO0VBQ1Q7QUFDRjtBQVNBLFNBQVNkLGVBQWVvUyxPQUFPO0FBQzdCQSxRQUFNcFMsZUFBZTtBQUNyQixTQUFPb1M7QUFDVDtBQUNBLFNBQVNuUyxnQkFBZ0JtUyxPQUFPO0FBQzlCQSxRQUFNblMsZ0JBQWdCO0FBQ3RCLFNBQU9tUztBQUNUOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJuYXZpZ2F0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJwcm9jZXNzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiaXNPYmplY3QiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY3JlYXRlRWxlbWVudCIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiaXNPYmplY3QiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSZWFjdF9leHBvcnRzIiwgIl9fZXhwb3J0IiwgIkNvbXBvbmVudCIsICJGcmFnbWVudCIsICJQdXJlQ29tcG9uZW50IiwgIlNWR05hbWVzcGFjZSIsICJTaGFkb3dSb290IiwgIlN0cmljdE1vZGUiLCAiY2xhc3NOYW1lIiwgImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlRmFjdG9yeSIsICJjcmVhdGVSZWYiLCAiZm9yd2FyZFJlZiIsICJoIiwgImlzUmVmIiwgImpzeCIsICJqc3hzIiwgIm1lbW8iLCAiaWRlbnRpdHkiLCAicHJldmVudERlZmF1bHQiLCAic3RvcFByb3BhZ2F0aW9uIiwgInN0eWxlZCIsICJ1c2VDYWxsYmFjayIsICJ1c2VDbGFzc0xpc3QiLCAidXNlSW1wZXJhdGl2ZUhhbmRsZSIsICJ1c2VNZW1vIiwgInVzZVJlZiIsICJ1c2VUZXh0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJrZXlzIiwgIk9iamVjdCIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAidmFsIiwgImlzRWxlbWVudCIsICJub2RlVHlwZSIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc09iamVjdCIsICJpc0Z1bmN0aW9uIiwgImlzQ29tcG9uZW50Q2xhc3MiLCAiQ29tcG9uZW50MiIsICJwcm90b3R5cGUiLCAiaXNSZWFjdENvbXBvbmVudCIsICJpc0FycmF5TGlrZSIsICJvYmoiLCAibGVuZ3RoIiwgImZvckVhY2giLCAiZm4iLCAiX2l0ZXJhdG9yMiIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfc3RlcDIiLCAicyIsICJuIiwgImRvbmUiLCAia2V5IiwgImVyciIsICJlIiwgImYiLCAic2VhbCIsICJjdXJyZW50IiwgIm1heWJlUmVmIiwgImlzVW5pdGxlc3NOdW1iZXIiLCAiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiLCAiYm9yZGVySW1hZ2VPdXRzZXQiLCAiYm9yZGVySW1hZ2VTbGljZSIsICJib3JkZXJJbWFnZVdpZHRoIiwgImJveEZsZXgiLCAiYm94RmxleEdyb3VwIiwgImJveE9yZGluYWxHcm91cCIsICJjb2x1bW5Db3VudCIsICJjb2x1bW5zIiwgImZsZXgiLCAiZmxleEdyb3ciLCAiZmxleFBvc2l0aXZlIiwgImZsZXhTaHJpbmsiLCAiZmxleE5lZ2F0aXZlIiwgImZsZXhPcmRlciIsICJncmlkQXJlYSIsICJncmlkUm93IiwgImdyaWRSb3dFbmQiLCAiZ3JpZFJvd1NwYW4iLCAiZ3JpZFJvd1N0YXJ0IiwgImdyaWRDb2x1bW4iLCAiZ3JpZENvbHVtbkVuZCIsICJncmlkQ29sdW1uU3BhbiIsICJncmlkQ29sdW1uU3RhcnQiLCAiZm9udFdlaWdodCIsICJsaW5lQ2xhbXAiLCAibGluZUhlaWdodCIsICJvcGFjaXR5IiwgIm9yZGVyIiwgIm9ycGhhbnMiLCAidGFiU2l6ZSIsICJ3aWRvd3MiLCAiekluZGV4IiwgInpvb20iLCAiZmlsbE9wYWNpdHkiLCAiZmxvb2RPcGFjaXR5IiwgInN0b3BPcGFjaXR5IiwgInN0cm9rZURhc2hhcnJheSIsICJzdHJva2VEYXNob2Zmc2V0IiwgInN0cm9rZU1pdGVybGltaXQiLCAic3Ryb2tlT3BhY2l0eSIsICJzdHJva2VXaWR0aCIsICJwcmVmaXhLZXkiLCAicHJlZml4IiwgImNoYXJBdCIsICJ0b1VwcGVyQ2FzZSIsICJzdWJzdHJpbmciLCAicHJlZml4ZXMiLCAicHJvcCIsICJqc3hEb21UeXBlIiwgIlN5bWJvbCIsICJmb3IiLCAiSnN4RG9tVHlwZSIsICJKc3hEb21UeXBlMiIsICJfcmVmIiwgImNoaWxkcmVuIiwgInJlZiIsICJhdHRyMiIsICJhdHRyIiwgImlzU2hhZG93Um9vdCIsICJlbCIsICJYTGlua05hbWVzcGFjZSIsICJYTUxOYW1lc3BhY2UiLCAiaXNWaXNpYmxlQ2hpbGQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJtYXAiLCAiZmlsdGVyIiwgIkJvb2xlYW4iLCAiam9pbiIsICJpdGVyYXRvciIsICJmcm9tIiwgImsiLCAic3ZnIiwgImFuaW1hdGUiLCAiY2lyY2xlIiwgImNsaXBQYXRoIiwgImRlZnMiLCAiZGVzYyIsICJlbGxpcHNlIiwgImZlQmxlbmQiLCAiZmVDb2xvck1hdHJpeCIsICJmZUNvbXBvbmVudFRyYW5zZmVyIiwgImZlQ29tcG9zaXRlIiwgImZlQ29udm9sdmVNYXRyaXgiLCAiZmVEaWZmdXNlTGlnaHRpbmciLCAiZmVEaXNwbGFjZW1lbnRNYXAiLCAiZmVEaXN0YW50TGlnaHQiLCAiZmVGbG9vZCIsICJmZUZ1bmNBIiwgImZlRnVuY0IiLCAiZmVGdW5jRyIsICJmZUZ1bmNSIiwgImZlR2F1c3NpYW5CbHVyIiwgImZlSW1hZ2UiLCAiZmVNZXJnZSIsICJmZU1lcmdlTm9kZSIsICJmZU1vcnBob2xvZ3kiLCAiZmVPZmZzZXQiLCAiZmVQb2ludExpZ2h0IiwgImZlU3BlY3VsYXJMaWdodGluZyIsICJmZVNwb3RMaWdodCIsICJmZVRpbGUiLCAiZmVUdXJidWxlbmNlIiwgImZvcmVpZ25PYmplY3QiLCAiZyIsICJpbWFnZSIsICJsaW5lIiwgImxpbmVhckdyYWRpZW50IiwgIm1hcmtlciIsICJtYXNrIiwgIm1ldGFkYXRhIiwgInBhdGgiLCAicGF0dGVybiIsICJwb2x5Z29uIiwgInBvbHlsaW5lIiwgInJhZGlhbEdyYWRpZW50IiwgInJlY3QiLCAic3RvcCIsICJzd2l0Y2giLCAic3ltYm9sIiwgInRleHQiLCAidGV4dFBhdGgiLCAidHNwYW4iLCAidXNlIiwgInZpZXciLCAibm9uUHJlc2VudGF0aW9uU1ZHQXR0cmlidXRlcyIsICJ0YWciLCAiYmluZCIsICJmcmFnbWVudCIsICJkb2N1bWVudCIsICJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwgImFwcGVuZENoaWxkIiwgImNvbnN0cnVjdG9yIiwgInByb3BzIiwgInJlbmRlciIsICJkZWZpbmVQcm9wZXJ0aWVzIiwgImluaXRDb21wb25lbnRDbGFzcyIsICJDbGFzcyIsICJpbnN0YW5jZSIsICJub2RlIiwgImF0dGFjaFJlZiIsICJuYW1lc3BhY2VVUkkiLCAiY3JlYXRlRWxlbWVudE5TIiwgImF0dHJpYnV0ZXMiLCAid2luZG93IiwgIkhUTUxTZWxlY3RFbGVtZW50IiwgIm11bHRpcGxlIiwgInZhbHVlcyIsICJTdHJpbmciLCAicXVlcnlTZWxlY3RvckFsbCIsICJvcHRpb24iLCAic2VsZWN0ZWQiLCAiaW5jbHVkZXMiLCAiZGVmYXVsdFByb3BzIiwgIlR5cGVFcnJvciIsICJjb25jYXQiLCAiX2xlbiIsICJhcmd1bWVudHMiLCAiX2tleTIiLCAidW5zaGlmdCIsICJjaGlsZCIsICJhcHBlbmRDaGlsZHJlbiIsICJhcHBlbmRDaGlsZFRvTm9kZSIsICJjcmVhdGVUZXh0Tm9kZSIsICJjcmVhdGVDb21tZW50IiwgInNoYWRvd1Jvb3QiLCAiYXR0YWNoU2hhZG93IiwgIl9pIiwgIl9hcnIiLCAiSFRNTFRlbXBsYXRlRWxlbWVudCIsICJjb250ZW50IiwgIm5vcm1hbGl6ZUF0dHJpYnV0ZSIsICJzZXBhcmF0b3IiLCAicmVwbGFjZSIsICJtYXRjaCIsICJ0b0xvd2VyQ2FzZSIsICJzdHlsZSIsICJ2IiwgInNldEF0dHJpYnV0ZSIsICJpbmRleE9mIiwgInNldFByb3BlcnR5IiwgImF0dHJpYnV0ZSIsICJhdHRyTlMiLCAiZGF0YVZhbHVlIiwgImRhdGFLZXkiLCAiZGF0YXNldCIsICJpbm5lckhUTUwiLCAiSFRNTFRleHRBcmVhRWxlbWVudCIsICJzcGVsbGNoZWNrIiwgImV2ZW50SGFuZGxlciIsICJldmVudE5hbWUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJhdHRyaWJ1dGUyIiwgInVzZUNhcHR1cmUiLCAiZW5kc1dpdGgiLCAic3RhbmRhcmRFdmVudE5hbWUiLCAiY3VzdG9tRXZlbnROYW1lIiwgInNsaWNlIiwgIlNWR0VsZW1lbnQiLCAidGVzdCIsICJuYW1lc3BhY2UiLCAic2V0QXR0cmlidXRlTlMiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAiaW5pdGlhbFZhbHVlIiwgIlRleHQiLCAiZGVmaW5lUHJvcGVydHkiLCAidGV4dENvbnRlbnQiLCAic2V0VGV4dCIsICJkaXYiLCAibGlzdCIsICJjbGFzc0xpc3QiLCAiQ2xhc3NMaXN0IiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAic2l6ZSIsICJhZGQiLCAicmVtb3ZlIiwgInRvZ2dsZSIsICJ0b2tlbiIsICJmb3JjZSIsICJjb250YWlucyIsICJmYWN0b3J5IiwgImluaXQiLCAiY2FjaGUiLCAiTWFwIiwgImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsICJuYW1lIiwgImludGVycG9sYXRpb25zIiwgIl9rZXkiLCAic3R5bGUyIiwgImxhc3RJbmRleCIsICJjc3MiLCAicmVkdWNlIiwgInAiLCAiaSIsICJpbnRlcnBvbGF0aW9uIiwgImJhc2VTdHlsZWQiLCAiY3VzdG9tQ29tcG9uZW50IiwgIlByb3h5IiwgImdldCIsICJfIiwgInNldElmQWJzZW50IiwgImdldFZhbHVlIiwgImhhcyIsICJzZXQiLCAiZXZlbnQiXQp9Cg== diff --git a/dist/SkinCitizen_CSS/SkinCitizen_CSS.css b/dist/SkinCitizen_CSS/SkinCitizen_CSS.css index 115eb7bd..45ac85a5 100644 --- a/dist/SkinCitizen_CSS/SkinCitizen_CSS.css +++ b/dist/SkinCitizen_CSS/SkinCitizen_CSS.css @@ -120,7 +120,7 @@ body { background-color: initial !important; } html { - --csstools-color-scheme--dark: ; + --csstools-color-scheme--light: initial; color-scheme: only light; } .mw-body-content { @@ -137,7 +137,7 @@ html { border-radius: 3px; } html.client-darkmode body { - --csstools-color-scheme--dark: ; + --csstools-color-scheme--light: initial; color-scheme: only light; --color-surface-0: hsl(0, 0%, 100%); --color-surface-1: hsl(0, 0%, 90%); @@ -354,4 +354,4 @@ header.mw-body-header { /* */ -/*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL1NraW5DaXRpemVuX0NTUy9Ta2luQ2l0aXplbl9DU1MubGVzcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyog5q2k5aSE55qEQ1NT5Y+q5Lya5b2x5ZON5L2/55SoQ2l0aXplbuearuiCpOeahOeUqOaItyAqL1xuI24tdGVhaG91c2UgYTo6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvZS9lZC9UZWFob3VzZV9pY29uLnN2ZycpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuI24tbm90aWNlYm9hcmQgYTo6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvMS8xOC9Ob3RpY2VfYm9hcmRfaWNvbi5zdmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNuLWNvbnRyaWJ1dGlvbnNjb3JlcyBhOjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoJ2h0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy8wLzA3L0NvbnRyaWJ1dGlvbl9zY29yZV9pY29uLnN2ZycpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuI24taGVscG1lbnUgYTo6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvMi8yYi9IZWxwX21lbnVfaWNvbi5zdmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNuLWdldHN0YXJ0IGE6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzIvMjIvR2V0X3N0YXJ0X2ljb24uc3ZnJyk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4jbi1mb3JtYXRib29rIGE6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzMvMzMvRm9ybWF0X2Jvb2tfaWNvbi5zdmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNuLXJ1bGVzIGE6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzIvMmUvUnVsZXNfaWNvbi5zdmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNuLWZhbm1hZGUtbWFpbnBhZ2UgYTo6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvMC8wMi9GYW5tYWRlX21haW5wYWdlX2ljb24uc3ZnJyk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4jbi1mYW5tYWRlLWd1aWRlIGE6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzcvNzEvRmFubWFkZV9ndWlkZV9pY29uLnN2ZycpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLyog5LyY5YyW5p2h55uu5YiG57G75pi+56S65pWI5p6cICovXG4ubXctbm9ybWFsLWNhdGxpbmtzIHtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBwYWRkaW5nOiAyZW0gbWluKDEuOGVtLCA0dncpIDJlbSBtaW4oMS44ZW0sIDR2dyk7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjQwLDI0OCwyNTUsMC42NTA5OCk7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG59XG4vKiDliIbnsbvlhpLlj7fkuI3mjaLooYwgQnkgQmFpZ2VpICovXG4ubXctbm9ybWFsLWNhdGxpbmtzID4gYSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbi8qIOWfuuehgOagt+W8jyAqL1xuLyog5Y6f6IOM5pmv5Zu+IGh0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy9mL2ZmLyVFNiU5QyU4OSVFNSU4NSVCRCVFNyU4NCU4OSVFNSU4QSVBOCVFNyU5NCVCQiVFNiU4OCVBQSVFNSU5QiVCRS5qcGcgKi9cbi8qIOWOn+iDjOaZr+WbvuWPjeebuCBodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvMy8zYS8lRTYlOUMlODklRTUlODUlQkQlRTclODQlODklRTUlOEElQTglRTclOTQlQkIlRTYlODglQUElRTUlOUIlQkUtJUU1JThGJThEJUU3JTlCJUI4LmpwZyAqL1xuLypcbmJvZHkge1xuXHRiYWNrZ3JvdW5kOiB1cmwoJ2h0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy9mL2ZmLyVFNiU5QyU4OSVFNSU4NSVCRCVFNyU4NCU4OSVFNSU4QSVBOCVFNyU5NCVCQiVFNiU4OCVBQSVFNSU5QiVCRS5qcGcnKVxuXHRcdGZpeGVkIDEwMCUgMDtcblx0YmFja2dyb3VuZC1zaXplOiBjb3Zlcjtcbn1cbi5jbGllbnQtZGFya21vZGUgYm9keSB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzMvM2EvJUU2JTlDJTg5JUU1JTg1JUJEJUU3JTg0JTg5JUU1JThBJUE4JUU3JTk0JUJCJUU2JTg4JUFBJUU1JTlCJUJFLSVFNSU4RiU4RCVFNyU5QiVCOC5qcGcnKTtcbn1cbiovXG4vKlxu5omL5py65rWP6KeI5ZmoKENocm9tZSwgU2FmYXJpKeeahHZpZXdwb3J05bC65a+45Lya5Zug5Zyw5Z2A5qCP5pS26LW36ICM5pS55Y+Y77yM55u05o6l5L2/55SoYmFja2dyb3VuZC1zaXplOiBjb3Zlclxu5Lya6YCg5oiQ6IOM5pmv6Lez5Yqo44CC5Yib5bu65LiA5Liq5oGS5a6a5aSn5bCP55qE6IOM5pmv5YWD57Sg5Y+v5Lul6KeE6YG/5q2k6Zeu6aKY77yM5ZCM5pe25o+Q5L6b5LqG5Y+q5a+56IOM5pmv5Zu+5bqU55SoZmlsdGVy55qE5py65Lya44CCXG5cbmJhY2tncm91bmQtc2l6ZTogY292ZXIg5oiWIG9iamVjdC1maXQ6IGNvdmVyIOeahOWbvueJh+WwuuWvuOiuoeeul+S4jeS+v+eUqOWFtuS7lkNTU+WunueOsO+8jOWPguingVxuaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE2NzA4NzQvaXMtdGhlcmUtYW4tZXF1aXZhbGVudC10by1iYWNrZ3JvdW5kLXNpemUtY292ZXItYW5kLWNvbnRhaW4tZm9yLWltYWdlLWVsZW1lbnRzIzI4NzcxODk0XG7ku4Xkvb/nlKggYmFja2dyb3VuZC1zaXplOiBhdXRvIDEwMHZoIOS8muS7pOaoqueJiOiDjOaZr+WbvuS4jei2s+S7peWhq+a7oeWuveWxj+OAglxuKi9cbmh0bWw6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IC01O1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1zaXplKSk7XG4gIG1hcmdpbi10b3A6IHZhcigtLWhlYWRlci1zaXplKTtcbiAgYmFja2dyb3VuZDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvZi9mZi8lRTYlOUMlODklRTUlODUlQkQlRTclODQlODklRTUlOEElQTglRTclOTQlQkIlRTYlODglQUElRTUlOUIlQkUuanBnJykgMTAwJSAwO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xufVxuaHRtbC5jbGllbnQtZGFya21vZGU6OmJlZm9yZSB7XG4gIGZpbHRlcjogaW52ZXJ0KDEpIGh1ZS1yb3RhdGUoMTgwZGVnKTtcbn1cbmh0bWwsXG5ib2R5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbCAhaW1wb3J0YW50O1xufVxuLyog5L+d6K+B5o6n5Lu26aKc6Imy5qih5byP5LiA6Ie0ICovXG5odG1sIHtcbiAgLS1jc3N0b29scy1jb2xvci1zY2hlbWUtLWRhcms6ICA7XG4gIGNvbG9yLXNjaGVtZTogb25seSBsaWdodDtcbn1cbi8qIOWGheWuueahhuagt+W8jyAqL1xuLm13LWJvZHktY29udGVudCB7XG4gIHBhZGRpbmc6IDJlbSBtaW4oMS44ZW0sIDR2dykgMmVtIG1pbigxLjhlbSwgNHZ3KTtcbiAgYmFja2dyb3VuZDogcmdiYSgyNDAsMjQ4LDI1NSwwLjY1MDk4KTtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgY29sb3I6ICMwMDA7XG4gIGxpbmUtaGVpZ2h0OiAyLjE0Mjg1NzE0O1xufVxuLm13LWNvbnRlbnQtbHRyIG9sIHtcbiAgbWFyZ2luOiAwLjNlbSAwIDAgMWVtO1xufVxuLmltZy10eDIgaW1nIHtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLyog5rex6Imy5qih5byP6aKc6Imy5Li76aKY6YWN572uICovXG5odG1sLmNsaWVudC1kYXJrbW9kZSBib2R5IHtcbiAgLyog5Zug5Li65Y+N6ImyYm9keeS5i+WQjua3seiJsuaooeW8j+aOp+S7tuWPmOaIkOS6hua1heiJsiDmiYDku6XopoHlj43lm57mnaUg5oCO5LmI5qC3IOaYr+S4jeaYr+W+iOelnuWlhyAqL1xuICAtLWNzc3Rvb2xzLWNvbG9yLXNjaGVtZS0tZGFyazogIDtcbiAgY29sb3Itc2NoZW1lOiBvbmx5IGxpZ2h0O1xuICAtLWNvbG9yLXN1cmZhY2UtMDogaHNsKDAsIDAlLCAxMDAlKTtcbiAgLS1jb2xvci1zdXJmYWNlLTE6IGhzbCgwLCAwJSwgOTAlKTtcbiAgLS1jb2xvci1zdXJmYWNlLTI6IGhzbCgyMTAsIDE3JSwgODglKTtcbiAgLS1jb2xvci1zdXJmYWNlLTM6IGhzbCgyMjAsIDE3JSwgODclKTtcbiAgLS1jb2xvci1zdXJmYWNlLTQ6IGhzbCgyMTMsIDklLCA4NSUpO1xufVxuLyog5bem5LiK6KeS5Zu+5qCH5LiN5Y+N6ImyICovXG4uY2xpZW50LWRhcmttb2RlIC5za2luLWNpdGl6ZW4gLm13LWxvZ28taWNvbiB7XG4gIGZpbHRlcjogaW52ZXJ0KDEpIGh1ZS1yb3RhdGUoMTgwZGVnKTtcbn1cbi8qIOWtkOagh+mimOmakOiXjyAqL1xuI3NpdGVTdWIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLyoqIOaxieS7quacieWFveeEieagh+mimFxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdIWVlvdVNob3VZYW5XJztcbiAgc3JjOiB1cmwoJ2h0dHBzOi8vZ2l0Y2RuLnFpdXdlbi5uZXQuY24vWVNBUkNISVZFUy9mb250cy9yYXcvYnJhbmNoL21haW4vc3JjL0hZWW91U2hvdVlhblcud29mZicpIGZvcm1hdCgnd29mZicpO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMjAtMDA3RSwgVSs0RTAwLTlGRkYsIFUrRkYwMC1GRkVGO1xufVxuXG4ubXctYm9keS1jb250ZW50IGgxLFxuLm13LWJvZHktY29udGVudCBoMixcbmgxI2ZpcnN0SGVhZGluZyB7XG4gIGZvbnQtZmFtaWx5OlxuICAgIFwiSFlZb3VTaG91WWFuV1wiLFxuICAgIC1hcHBsZS1zeXN0ZW0sXG4gICAgQmxpbmtNYWNTeXN0ZW1Gb250LFxuICAgIFwiTWlTYW5zXCIsXG4gICAgXCLlsI/nsbPlhbDkuq0gUHJvIFZGXCIsXG4gICAgXCJPUFBPIFNhbnNcIixcbiAgICBcIkhhcm1vbnlPUyBTYW5zXCIsXG4gICAgXCJIT05PUiBTYW5zXCIsXG4gICAgXCJTb3VyY2UgU2FucyAzXCIsXG4gICAgXCJTb3VyY2UgU2FucyBQcm9cIixcbiAgICBcIlNvdXJjZSBIYW4gU2FucyBUQ1wiLFxuICAgIFwiSGVsdmV0aWNhXCIsXG4gICAgXCJSb2JvdG9cIixcbiAgICBcIlNGUHJvRGlzcGxheS1SZWd1bGFyXCIsXG4gICAgc2Fucy1zZXJpZixcbiAgICBcIlBsYW5nb3RoaWMgUDFcIixcbiAgICBcIlBsYW5nb3RoaWMgUDJcIixcbiAgICBcIuaWueato+Wui+S9k1Mt6LaF5aSn5a2X56ym6ZuGXCIsXG4gICAgXCLmlrnmraPlrovkvZNTLei2heWkp+Wtl+espumbhihTSVApXCIsXG4gICAgXCLmlofms4npqb/nrYnlrr3mraPpu5FcIixcbiAgICBcIkJhYmVsU3RvbmUgSGFuXCIsXG4gICAgXCJIYW5hTWluQlwiLFxuICAgIFwiRlpTb25nLUV4dGVuZGVkXCIsXG4gICAgXCJBcmlhbCBVbmljb2RlIE1TXCIsXG4gICAgXCJDb2RlMjAwMlwiLFxuICAgIFwiREZTb25nU3RkXCIsXG4gICAgXCJ1bmlmb250XCIsXG4gICAgXCJBcHBsZSBDb2xvciBFbW9qaVwiLFxuICAgIFwiU2Vnb2UgVUkgRW1vamlcIixcbiAgICBcIlNlZ29lIFVJIFN5bWJvbFwiO1xufVxuICovXG4vKiDnu5/kuIDmiYvmnLrnq6/nlKjmiLflrZfkvZPlpKflsI/kv67mlLnniYggKi9cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgYm9keSB7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICB9XG4gIGgxIHtcbiAgICBmb250LXNpemU6IDJyZW07XG4gIH1cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTtcbiAgfVxuICBoMyB7XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gIH1cbiAgaDQge1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgfVxuICBoNSB7XG4gICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgfVxuICBoNiB7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICB9XG4gIHAge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLm13LXNwZWNpYWwtVmlld0F2YXRhciBwIGltZyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG4gICNmaWxlIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG4vKiDpobXpnaLlhoXlrrnlrr3luqYgKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxNDQwcHgpIHtcbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+ICo6bm90KGZpZ3VyZSk6bm90KC5tdy1oYWxpZ24tbGVmdCk6bm90KC5tdy1oYWxpZ24tY2VudGVyKTpub3QoLm1ib3gpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+IGRpdi50bGVmdCxcbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+IHRhYmxlLnRsZWZ0LFxuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gZmlndXJlLnRsZWZ0LFxuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gZGl2LmZsb2F0bGVmdCxcbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+IHRhYmxlLmZsb2F0bGVmdCxcbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+IGZpZ3VyZS5mbG9hdGxlZnQsXG4gIC5ucy0wIC5tdy1ib2R5LWNvbnRlbnQgLm13LXBhcnNlci1vdXRwdXQgPiBkaXYubXctaGFsaWduLWxlZnQsXG4gIC5ucy0wIC5tdy1ib2R5LWNvbnRlbnQgLm13LXBhcnNlci1vdXRwdXQgPiB0YWJsZS5tdy1oYWxpZ24tbGVmdCxcbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+IGZpZ3VyZS5tdy1oYWxpZ24tbGVmdCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxLjI1cmVtICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+IHRhYmxlOm5vdCgubWV0YWRhdGEpOm5vdCguaW5mb2JveCk6bm90KC5zaWRlYmFyKTpub3QoLnZlcnRpY2FsLW5hdmJveCkge1xuICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi8qIOa7muWKqOadoeaYvuekuuS4u+mimOiJsiAqL1xuKiB7XG4gIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSkgdHJhbnNwYXJlbnQ7XG4gIGNhcmV0LWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cbi8qIFtbU3BlY2lhbDrlsI/lt6XlhbddXeagh+mimCAqL1xuLm13LXNwZWNpYWwtR2FkZ2V0cyBoMSxcbi5tdy1zcGVjaWFsLUdhZGdldHMgaDIsXG4ubXctc3BlY2lhbC1HYWRnZXRzIGgzLFxuLm13LXNwZWNpYWwtR2FkZ2V0cyBoNCxcbi5tdy1zcGVjaWFsLUdhZGdldHMgaDUsXG4ubXctc3BlY2lhbC1HYWRnZXRzIGg2IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbn1cbi8qIFtbU3BlY2lhbDrmnIDov5Hmm7TmlLldXeagh+mimCAqL1xuLm13LWNoYW5nZXNsaXN0IGg0IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbn1cbi8qIOWumuWItuWMluagh+mimOagt+W8jyAqL1xuaGVhZGVyLm13LWJvZHktaGVhZGVyIHtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAycHg7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNDAsIDI1NSwgMjU1LCAwLjgpO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI0MCwgMjU1LCAyNDAsIDAuNyk7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6IGF1dG87XG59XG4vKiDpmpDol4/moIfpopjljp/og4zmma8gKi9cbi5tdy1ib2R5LWhlYWRlcjo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qIOebruW9lSAoVE9DKSAqL1xuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzIwcHgpIHtcbiAgLnRvYyxcbiAgI3RvYyB7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cbi8qIOS8mOWMlueUqOaIt+mhteWktOWDj+aYvuekuiAqL1xuLnNraW4tY2l0aXplbiAjdXNlci1yb290cGFnZS1hdmF0YXIge1xuICBtYXJnaW4tcmlnaHQ6IDAuMmVtO1xufVxuLyog5Y+Y6YePICovXG46cm9vdCB7XG4gIC0tZm9udHMtc2FuczogLWFwcGxlLXN5c3RlbSwgJ0JsaW5rTWFjU3lzdGVtRm9udCcsICdNaVNhbnMnLCAn5bCP57Gz5YWw5LqtIFBybyBWRicsICdPUFBPIFNhbnMnLCAnSGFybW9ueU9TIFNhbnMnLFxuXHRcdCdIT05PUiBTYW5zJywgJ1NvdXJjZSBTYW5zIDMnLCAnU291cmNlIFNhbnMgUHJvJywgJ1NvdXJjZSBIYW4gU2FucyBTQycsICdIZWx2ZXRpY2EnLCAnUm9ib3RvJyxcblx0XHQnU0ZQcm9EaXNwbGF5LVJlZ3VsYXInLCBzYW5zLXNlcmlmLCAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgLS1mb250cy1zZXJpZjogJ1NvdXJjZSBTZXJpZicsICdTb3VyY2UgSGFuIFNlcmlmIFNDJywgJ0xpbnV4IExpYmVydGluZScsICdHZW9yZ2lhJywgJ1RpbWVzIE5ldyBSb21hbicsICdUaW1lcycsXG5cdFx0J1NUU29uZyBTQycsICdTaW1TdW4nLCBzZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7XG4gIC0tZm9udHMtbW9ub3NwYWNlOiAnQ29uc29sYXMnLCAnSmV0QnJhaW5zIE1vbm8nLCAnU291cmNlIENvZGUgUHJvJywgJ01lbmxvJywgJ1NGTW9uby1SZWd1bGFyJywgJ1JvYm90byBNb25vJyxcblx0XHQnTW9uYWNvJywgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsICdDb3VyaWVyJywgbW9ub3NwYWNlLCAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLFxuXHRcdCdTZWdvZSBVSSBTeW1ib2wnO1xuICAtLWJvcmRlci1jb2xvci1iYXNlOiByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAtLWJvcmRlci1jb2xvci1iYXNlLS1saWdodGVyOiByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIC0tYm9yZGVyLWNvbG9yLWJhc2UtLWRhcmtlcjogcmdiYSgwLCAwLCAwLCAwLjgpO1xufVxuOnJvb3Q6bGFuZyh6aC1oYW50KSB7XG4gIC0tZm9udHMtc2FuczogLWFwcGxlLXN5c3RlbSwgJ0JsaW5rTWFjU3lzdGVtRm9udCcsICdNaVNhbnMnLCAn5bCP57Gz5YWw5LqtIFBybyBWRicsICdPUFBPIFNhbnMnLCAnSGFybW9ueU9TIFNhbnMnLFxuXHRcdCdIT05PUiBTYW5zJywgJ1NvdXJjZSBTYW5zIDMnLCAnU291cmNlIFNhbnMgUHJvJywgJ1NvdXJjZSBIYW4gU2FucyBUQycsICdIZWx2ZXRpY2EnLCAnUm9ib3RvJyxcblx0XHQnU0ZQcm9EaXNwbGF5LVJlZ3VsYXInLCBzYW5zLXNlcmlmLCAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgLS1mb250cy1zZXJpZjogJ1NvdXJjZSBTZXJpZicsICdTb3VyY2UgSGFuIFNlcmlmIFRDJywgJ0xpbnV4IExpYmVydGluZScsICdHZW9yZ2lhJywgJ1RpbWVzIE5ldyBSb21hbicsICdUaW1lcycsXG5cdFx0J01pbmdMaVUnLCAnU2ltU3VuJywgc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnO1xufVxuLyog5Y+Y5L2T6I+c5Y2VICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3MjBweCkge1xuICAjY2l0aXplbi1sYW5ndWFnZXNfX2NhcmQge1xuICAgIHJpZ2h0OiBjYWxjKHZhcigtLXNwYWNlLXh4bCkgKiAyKTtcbiAgfVxufVxuLyog5Y+v6KeG5YyW57yW6L6R5Zmo55WM6Z2i77yM6ZqQ6JeP5qCH6aKYICovXG4udmUtYWN0aXZhdGVkIGgxI2ZpcnN0SGVhZGluZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4udmUtYWN0aXZhdGVkIC5jaXRpemVuLWJvZHktaGVhZGVyLS1zdGlja3kgLm13LWJvZHktaGVhZGVyOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnZlLWluaXQtbXctZGVza3RvcEFydGljbGVUYXJnZXQgI2JvZHlDb250ZW50IHtcbiAgbWFyZ2luLXRvcDogY2FsYygyICogdmFyKC0tc3BhY2UtbWQpKTtcbn1cbi5tdy11aS1pY29uLXdpa2ltZWRpYS1oZWFydCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB0PVwiMTcwODM0ODEyOTQwN1wiIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBwLWlkPVwiNDMzOFwiIHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiMjAwXCI+PHBhdGggZD1cIk01MTIgODk2YTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDEtMzAuMjkzMzMzLTEyLjM3MzMzM2wtMzMxLjUyLTMzMS45NDY2NjdhMjI0LjQyNjY2NyAyMjQuNDI2NjY3IDAgMCAxIDAtMzE1LjczMzMzMyAyMjMuNTczMzMzIDIyMy41NzMzMzMgMCAwIDEgMzE1LjczMzMzMyAwTDUxMiAyODIuMDI2NjY3bDQ2LjA4LTQ2LjA4YTIyMy41NzMzMzMgMjIzLjU3MzMzMyAwIDAgMSAzMTUuNzMzMzMzIDAgMjI0LjQyNjY2NyAyMjQuNDI2NjY3IDAgMCAxIDAgMzE1LjczMzMzM2wtMzMxLjUyIDMzMS45NDY2NjdBNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA1MTIgODk2elwiIHAtaWQ9XCI0MzM5XCI+PC9wYXRoPjwvc3ZnPicpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG4vKiDkv67lpI0gdG9vbGJhciAqL1xuI2NvbnRlbnRTdWIge1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjQwLCAyNDgsIDI1NSwgMC42NSk7XG4gIHBhZGRpbmc6IDVweDtcbn1cbiNjb250ZW50U3ViOmVtcHR5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLENBQUMsV0FBVyxDQUFDO0FBQ1gsV0FBUztBQUNULG9CQUFrQixnQkFBZ0IsV0FBVyxFQUFFO0FBQy9DLFdBQVM7QUFDVCxTQUFPO0FBQ1AsVUFBUTtBQUNSLGtCQUFnQjtBQUNsQjtBQUNBLENBQUMsY0FBYyxDQUFDO0FBQ2QsV0FBUztBQUNULG9CQUFrQixnQkFBZ0IsV0FBVyxFQUFFO0FBQy9DLFdBQVM7QUFDVCxTQUFPO0FBQ1AsVUFBUTtBQUNSLGtCQUFnQjtBQUNsQjtBQUNBLENBQUMscUJBQXFCLENBQUM7QUFDckIsV0FBUztBQUNULG9CQUFrQixnQkFBZ0IsV0FBVyxFQUFFO0FBQy9DLFdBQVM7QUFDVCxTQUFPO0FBQ1AsVUFBUTtBQUNSLGtCQUFnQjtBQUNsQjtBQUNBLENBQUMsV0FBVyxDQUFDO0FBQ1gsV0FBUztBQUNULG9CQUFrQixnQkFBZ0IsV0FBVyxFQUFFO0FBQy9DLFdBQVM7QUFDVCxTQUFPO0FBQ1AsVUFBUTtBQUNSLGtCQUFnQjtBQUNsQjtBQUNBLENBQUMsV0FBVyxDQUFDO0FBQ1gsV0FBUztBQUNULG9CQUFrQixnQkFBZ0IsV0FBVyxFQUFFO0FBQy9DLFdBQVM7QUFDVCxTQUFPO0FBQ1AsVUFBUTtBQUNSLGtCQUFnQjtBQUNsQjtBQUNBLENBQUMsYUFBYSxDQUFDO0FBQ2IsV0FBUztBQUNULG9CQUFrQixnQkFBZ0IsV0FBVyxFQUFFO0FBQy9DLFdBQVM7QUFDVCxTQUFPO0FBQ1AsVUFBUTtBQUNSLGtCQUFnQjtBQUNsQjtBQUNBLENBQUMsUUFBUSxDQUFDO0FBQ1Is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 */ +/*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL1NraW5DaXRpemVuX0NTUy9Ta2luQ2l0aXplbl9DU1MubGVzcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyog5q2k5aSE55qEQ1NT5Y+q5Lya5b2x5ZON5L2/55SoQ2l0aXplbuearuiCpOeahOeUqOaItyAqL1xuI24tdGVhaG91c2UgYTo6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvZS9lZC9UZWFob3VzZV9pY29uLnN2ZycpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuI24tbm90aWNlYm9hcmQgYTo6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvMS8xOC9Ob3RpY2VfYm9hcmRfaWNvbi5zdmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNuLWNvbnRyaWJ1dGlvbnNjb3JlcyBhOjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoJ2h0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy8wLzA3L0NvbnRyaWJ1dGlvbl9zY29yZV9pY29uLnN2ZycpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuI24taGVscG1lbnUgYTo6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvMi8yYi9IZWxwX21lbnVfaWNvbi5zdmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNuLWdldHN0YXJ0IGE6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzIvMjIvR2V0X3N0YXJ0X2ljb24uc3ZnJyk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4jbi1mb3JtYXRib29rIGE6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzMvMzMvRm9ybWF0X2Jvb2tfaWNvbi5zdmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNuLXJ1bGVzIGE6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzIvMmUvUnVsZXNfaWNvbi5zdmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNuLWZhbm1hZGUtbWFpbnBhZ2UgYTo6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvMC8wMi9GYW5tYWRlX21haW5wYWdlX2ljb24uc3ZnJyk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4jbi1mYW5tYWRlLWd1aWRlIGE6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzcvNzEvRmFubWFkZV9ndWlkZV9pY29uLnN2ZycpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLyog5LyY5YyW5p2h55uu5YiG57G75pi+56S65pWI5p6cICovXG4ubXctbm9ybWFsLWNhdGxpbmtzIHtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBwYWRkaW5nOiAyZW0gbWluKDEuOGVtLCA0dncpIDJlbSBtaW4oMS44ZW0sIDR2dyk7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjQwLDI0OCwyNTUsMC42NTA5OCk7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG59XG4vKiDliIbnsbvlhpLlj7fkuI3mjaLooYwgQnkgQmFpZ2VpICovXG4ubXctbm9ybWFsLWNhdGxpbmtzID4gYSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbi8qIOWfuuehgOagt+W8jyAqL1xuLyog5Y6f6IOM5pmv5Zu+IGh0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy9mL2ZmLyVFNiU5QyU4OSVFNSU4NSVCRCVFNyU4NCU4OSVFNSU4QSVBOCVFNyU5NCVCQiVFNiU4OCVBQSVFNSU5QiVCRS5qcGcgKi9cbi8qIOWOn+iDjOaZr+WbvuWPjeebuCBodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvMy8zYS8lRTYlOUMlODklRTUlODUlQkQlRTclODQlODklRTUlOEElQTglRTclOTQlQkIlRTYlODglQUElRTUlOUIlQkUtJUU1JThGJThEJUU3JTlCJUI4LmpwZyAqL1xuLypcbmJvZHkge1xuXHRiYWNrZ3JvdW5kOiB1cmwoJ2h0dHBzOi8veW91c2hvdS53aWtpL2ltYWdlcy9mL2ZmLyVFNiU5QyU4OSVFNSU4NSVCRCVFNyU4NCU4OSVFNSU4QSVBOCVFNyU5NCVCQiVFNiU4OCVBQSVFNSU5QiVCRS5qcGcnKVxuXHRcdGZpeGVkIDEwMCUgMDtcblx0YmFja2dyb3VuZC1zaXplOiBjb3Zlcjtcbn1cbi5jbGllbnQtZGFya21vZGUgYm9keSB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybCgnaHR0cHM6Ly95b3VzaG91Lndpa2kvaW1hZ2VzLzMvM2EvJUU2JTlDJTg5JUU1JTg1JUJEJUU3JTg0JTg5JUU1JThBJUE4JUU3JTk0JUJCJUU2JTg4JUFBJUU1JTlCJUJFLSVFNSU4RiU4RCVFNyU5QiVCOC5qcGcnKTtcbn1cbiovXG4vKlxu5omL5py65rWP6KeI5ZmoKENocm9tZSwgU2FmYXJpKeeahHZpZXdwb3J05bC65a+45Lya5Zug5Zyw5Z2A5qCP5pS26LW36ICM5pS55Y+Y77yM55u05o6l5L2/55SoYmFja2dyb3VuZC1zaXplOiBjb3Zlclxu5Lya6YCg5oiQ6IOM5pmv6Lez5Yqo44CC5Yib5bu65LiA5Liq5oGS5a6a5aSn5bCP55qE6IOM5pmv5YWD57Sg5Y+v5Lul6KeE6YG/5q2k6Zeu6aKY77yM5ZCM5pe25o+Q5L6b5LqG5Y+q5a+56IOM5pmv5Zu+5bqU55SoZmlsdGVy55qE5py65Lya44CCXG5cbmJhY2tncm91bmQtc2l6ZTogY292ZXIg5oiWIG9iamVjdC1maXQ6IGNvdmVyIOeahOWbvueJh+WwuuWvuOiuoeeul+S4jeS+v+eUqOWFtuS7lkNTU+WunueOsO+8jOWPguingVxuaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE2NzA4NzQvaXMtdGhlcmUtYW4tZXF1aXZhbGVudC10by1iYWNrZ3JvdW5kLXNpemUtY292ZXItYW5kLWNvbnRhaW4tZm9yLWltYWdlLWVsZW1lbnRzIzI4NzcxODk0XG7ku4Xkvb/nlKggYmFja2dyb3VuZC1zaXplOiBhdXRvIDEwMHZoIOS8muS7pOaoqueJiOiDjOaZr+WbvuS4jei2s+S7peWhq+a7oeWuveWxj+OAglxuKi9cbmh0bWw6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IC01O1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1zaXplKSk7XG4gIG1hcmdpbi10b3A6IHZhcigtLWhlYWRlci1zaXplKTtcbiAgYmFja2dyb3VuZDogdXJsKCdodHRwczovL3lvdXNob3Uud2lraS9pbWFnZXMvZi9mZi8lRTYlOUMlODklRTUlODUlQkQlRTclODQlODklRTUlOEElQTglRTclOTQlQkIlRTYlODglQUElRTUlOUIlQkUuanBnJykgMTAwJSAwO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xufVxuaHRtbC5jbGllbnQtZGFya21vZGU6OmJlZm9yZSB7XG4gIGZpbHRlcjogaW52ZXJ0KDEpIGh1ZS1yb3RhdGUoMTgwZGVnKTtcbn1cbmh0bWwsXG5ib2R5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbCAhaW1wb3J0YW50O1xufVxuLyog5L+d6K+B5o6n5Lu26aKc6Imy5qih5byP5LiA6Ie0ICovXG5odG1sIHtcbiAgLS1jc3N0b29scy1jb2xvci1zY2hlbWUtLWxpZ2h0OiBpbml0aWFsO1xuICBjb2xvci1zY2hlbWU6IG9ubHkgbGlnaHQ7XG59XG4vKiDlhoXlrrnmoYbmoLflvI8gKi9cbi5tdy1ib2R5LWNvbnRlbnQge1xuICBwYWRkaW5nOiAyZW0gbWluKDEuOGVtLCA0dncpIDJlbSBtaW4oMS44ZW0sIDR2dyk7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjQwLDI0OCwyNTUsMC42NTA5OCk7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGNvbG9yOiAjMDAwO1xuICBsaW5lLWhlaWdodDogMi4xNDI4NTcxNDtcbn1cbi5tdy1jb250ZW50LWx0ciBvbCB7XG4gIG1hcmdpbjogMC4zZW0gMCAwIDFlbTtcbn1cbi5pbWctdHgyIGltZyB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbi8qIOa3seiJsuaooeW8j+minOiJsuS4u+mimOmFjee9riAqL1xuaHRtbC5jbGllbnQtZGFya21vZGUgYm9keSB7XG4gIC8qIOWboOS4uuWPjeiJsmJvZHnkuYvlkI7mt7HoibLmqKHlvI/mjqfku7blj5jmiJDkuobmtYXoibIg5omA5Lul6KaB5Y+N5Zue5p2lIOaAjuS5iOagtyDmmK/kuI3mmK/lvojnpZ7lpYcgKi9cbiAgLS1jc3N0b29scy1jb2xvci1zY2hlbWUtLWxpZ2h0OiBpbml0aWFsO1xuICBjb2xvci1zY2hlbWU6IG9ubHkgbGlnaHQ7XG4gIC0tY29sb3Itc3VyZmFjZS0wOiBoc2woMCwgMCUsIDEwMCUpO1xuICAtLWNvbG9yLXN1cmZhY2UtMTogaHNsKDAsIDAlLCA5MCUpO1xuICAtLWNvbG9yLXN1cmZhY2UtMjogaHNsKDIxMCwgMTclLCA4OCUpO1xuICAtLWNvbG9yLXN1cmZhY2UtMzogaHNsKDIyMCwgMTclLCA4NyUpO1xuICAtLWNvbG9yLXN1cmZhY2UtNDogaHNsKDIxMywgOSUsIDg1JSk7XG59XG4vKiDlt6bkuIrop5Llm77moIfkuI3lj43oibIgKi9cbi5jbGllbnQtZGFya21vZGUgLnNraW4tY2l0aXplbiAubXctbG9nby1pY29uIHtcbiAgZmlsdGVyOiBpbnZlcnQoMSkgaHVlLXJvdGF0ZSgxODBkZWcpO1xufVxuLyog5a2Q5qCH6aKY6ZqQ6JePICovXG4jc2l0ZVN1YiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4vKiog5rGJ5Luq5pyJ5YW954SJ5qCH6aKYXG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0hZWW91U2hvdVlhblcnO1xuICBzcmM6IHVybCgnaHR0cHM6Ly9naXRjZG4ucWl1d2VuLm5ldC5jbi9ZU0FSQ0hJVkVTL2ZvbnRzL3Jhdy9icmFuY2gvbWFpbi9zcmMvSFlZb3VTaG91WWFuVy53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAyMC0wMDdFLCBVKzRFMDAtOUZGRiwgVStGRjAwLUZGRUY7XG59XG5cbi5tdy1ib2R5LWNvbnRlbnQgaDEsXG4ubXctYm9keS1jb250ZW50IGgyLFxuaDEjZmlyc3RIZWFkaW5nIHtcbiAgZm9udC1mYW1pbHk6XG4gICAgXCJIWVlvdVNob3VZYW5XXCIsXG4gICAgLWFwcGxlLXN5c3RlbSxcbiAgICBCbGlua01hY1N5c3RlbUZvbnQsXG4gICAgXCJNaVNhbnNcIixcbiAgICBcIuWwj+exs+WFsOS6rSBQcm8gVkZcIixcbiAgICBcIk9QUE8gU2Fuc1wiLFxuICAgIFwiSGFybW9ueU9TIFNhbnNcIixcbiAgICBcIkhPTk9SIFNhbnNcIixcbiAgICBcIlNvdXJjZSBTYW5zIDNcIixcbiAgICBcIlNvdXJjZSBTYW5zIFByb1wiLFxuICAgIFwiU291cmNlIEhhbiBTYW5zIFRDXCIsXG4gICAgXCJIZWx2ZXRpY2FcIixcbiAgICBcIlJvYm90b1wiLFxuICAgIFwiU0ZQcm9EaXNwbGF5LVJlZ3VsYXJcIixcbiAgICBzYW5zLXNlcmlmLFxuICAgIFwiUGxhbmdvdGhpYyBQMVwiLFxuICAgIFwiUGxhbmdvdGhpYyBQMlwiLFxuICAgIFwi5pa55q2j5a6L5L2TUy3otoXlpKflrZfnrKbpm4ZcIixcbiAgICBcIuaWueato+Wui+S9k1Mt6LaF5aSn5a2X56ym6ZuGKFNJUClcIixcbiAgICBcIuaWh+aziempv+etieWuveato+m7kVwiLFxuICAgIFwiQmFiZWxTdG9uZSBIYW5cIixcbiAgICBcIkhhbmFNaW5CXCIsXG4gICAgXCJGWlNvbmctRXh0ZW5kZWRcIixcbiAgICBcIkFyaWFsIFVuaWNvZGUgTVNcIixcbiAgICBcIkNvZGUyMDAyXCIsXG4gICAgXCJERlNvbmdTdGRcIixcbiAgICBcInVuaWZvbnRcIixcbiAgICBcIkFwcGxlIENvbG9yIEVtb2ppXCIsXG4gICAgXCJTZWdvZSBVSSBFbW9qaVwiLFxuICAgIFwiU2Vnb2UgVUkgU3ltYm9sXCI7XG59XG4gKi9cbi8qIOe7n+S4gOaJi+acuuerr+eUqOaIt+Wtl+S9k+Wkp+Wwj+S/ruaUueeJiCAqL1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICBib2R5IHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gIH1cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgfVxuICBoMiB7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtO1xuICB9XG4gIGgzIHtcbiAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgfVxuICBoNCB7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICB9XG4gIGg1IHtcbiAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICB9XG4gIGg2IHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gIH1cbiAgcCB7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuICAubXctc3BlY2lhbC1WaWV3QXZhdGFyIHAgaW1nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbiAgI2ZpbGUgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi8qIOmhtemdouWGheWuueWuveW6piAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDE0NDBweCkge1xuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gKjpub3QoZmlndXJlKTpub3QoLm13LWhhbGlnbi1sZWZ0KTpub3QoLm13LWhhbGlnbi1jZW50ZXIpOm5vdCgubWJveCkge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gZGl2LnRsZWZ0LFxuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gdGFibGUudGxlZnQsXG4gIC5ucy0wIC5tdy1ib2R5LWNvbnRlbnQgLm13LXBhcnNlci1vdXRwdXQgPiBmaWd1cmUudGxlZnQsXG4gIC5ucy0wIC5tdy1ib2R5LWNvbnRlbnQgLm13LXBhcnNlci1vdXRwdXQgPiBkaXYuZmxvYXRsZWZ0LFxuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gdGFibGUuZmxvYXRsZWZ0LFxuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gZmlndXJlLmZsb2F0bGVmdCxcbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+IGRpdi5tdy1oYWxpZ24tbGVmdCxcbiAgLm5zLTAgLm13LWJvZHktY29udGVudCAubXctcGFyc2VyLW91dHB1dCA+IHRhYmxlLm13LWhhbGlnbi1sZWZ0LFxuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gZmlndXJlLm13LWhhbGlnbi1sZWZ0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDEuMjVyZW0gIWltcG9ydGFudDtcbiAgfVxuICAubnMtMCAubXctYm9keS1jb250ZW50IC5tdy1wYXJzZXItb3V0cHV0ID4gdGFibGU6bm90KC5tZXRhZGF0YSk6bm90KC5pbmZvYm94KTpub3QoLnNpZGViYXIpOm5vdCgudmVydGljYWwtbmF2Ym94KSB7XG4gICAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDtcbiAgfVxufVxuLyog5rua5Yqo5p2h5pi+56S65Li76aKY6ImyICovXG4qIHtcbiAgc2Nyb2xsYmFyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KSB0cmFuc3BhcmVudDtcbiAgY2FyZXQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuLyogW1tTcGVjaWFsOuWwj+W3peWFt11d5qCH6aKYICovXG4ubXctc3BlY2lhbC1HYWRnZXRzIGgxLFxuLm13LXNwZWNpYWwtR2FkZ2V0cyBoMixcbi5tdy1zcGVjaWFsLUdhZGdldHMgaDMsXG4ubXctc3BlY2lhbC1HYWRnZXRzIGg0LFxuLm13LXNwZWNpYWwtR2FkZ2V0cyBoNSxcbi5tdy1zcGVjaWFsLUdhZGdldHMgaDYge1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xufVxuLyogW1tTcGVjaWFsOuacgOi/keabtOaUuV1d5qCH6aKYICovXG4ubXctY2hhbmdlc2xpc3QgaDQge1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xufVxuLyog5a6a5Yi25YyW5qCH6aKY5qC35byPICovXG5oZWFkZXIubXctYm9keS1oZWFkZXIge1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDJweDtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI0MCwgMjU1LCAyNTUsIDAuOCk7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjQwLCAyNTUsIDI0MCwgMC43KTtcbiAgcGFkZGluZzogMjBweDtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbn1cbi8qIOmakOiXj+agh+mimOWOn+iDjOaZryAqL1xuLm13LWJvZHktaGVhZGVyOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLyog55uu5b2VIChUT0MpICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3MjBweCkge1xuICAudG9jLFxuICAjdG9jIHtcbiAgICBjbGVhcjogYm90aDtcbiAgfVxufVxuLyog5LyY5YyW55So5oi36aG15aS05YOP5pi+56S6ICovXG4uc2tpbi1jaXRpemVuICN1c2VyLXJvb3RwYWdlLWF2YXRhciB7XG4gIG1hcmdpbi1yaWdodDogMC4yZW07XG59XG4vKiDlj5jph48gKi9cbjpyb290IHtcbiAgLS1mb250cy1zYW5zOiAtYXBwbGUtc3lzdGVtLCAnQmxpbmtNYWNTeXN0ZW1Gb250JywgJ01pU2FucycsICflsI/nsbPlhbDkuq0gUHJvIFZGJywgJ09QUE8gU2FucycsICdIYXJtb255T1MgU2FucycsXG5cdFx0J0hPTk9SIFNhbnMnLCAnU291cmNlIFNhbnMgMycsICdTb3VyY2UgU2FucyBQcm8nLCAnU291cmNlIEhhbiBTYW5zIFNDJywgJ0hlbHZldGljYScsICdSb2JvdG8nLFxuXHRcdCdTRlByb0Rpc3BsYXktUmVndWxhcicsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnO1xuICAtLWZvbnRzLXNlcmlmOiAnU291cmNlIFNlcmlmJywgJ1NvdXJjZSBIYW4gU2VyaWYgU0MnLCAnTGludXggTGliZXJ0aW5lJywgJ0dlb3JnaWEnLCAnVGltZXMgTmV3IFJvbWFuJywgJ1RpbWVzJyxcblx0XHQnU1RTb25nIFNDJywgJ1NpbVN1bicsIHNlcmlmLCAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgLS1mb250cy1tb25vc3BhY2U6ICdDb25zb2xhcycsICdKZXRCcmFpbnMgTW9ubycsICdTb3VyY2UgQ29kZSBQcm8nLCAnTWVubG8nLCAnU0ZNb25vLVJlZ3VsYXInLCAnUm9ib3RvIE1vbm8nLFxuXHRcdCdNb25hY28nLCAnTGliZXJhdGlvbiBNb25vJywgJ0NvdXJpZXIgTmV3JywgJ0NvdXJpZXInLCBtb25vc3BhY2UsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsXG5cdFx0J1NlZ29lIFVJIFN5bWJvbCc7XG4gIC0tYm9yZGVyLWNvbG9yLWJhc2U6IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIC0tYm9yZGVyLWNvbG9yLWJhc2UtLWxpZ2h0ZXI6IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgLS1ib3JkZXItY29sb3ItYmFzZS0tZGFya2VyOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG59XG46cm9vdDpsYW5nKHpoLWhhbnQpIHtcbiAgLS1mb250cy1zYW5zOiAtYXBwbGUtc3lzdGVtLCAnQmxpbmtNYWNTeXN0ZW1Gb250JywgJ01pU2FucycsICflsI/nsbPlhbDkuq0gUHJvIFZGJywgJ09QUE8gU2FucycsICdIYXJtb255T1MgU2FucycsXG5cdFx0J0hPTk9SIFNhbnMnLCAnU291cmNlIFNhbnMgMycsICdTb3VyY2UgU2FucyBQcm8nLCAnU291cmNlIEhhbiBTYW5zIFRDJywgJ0hlbHZldGljYScsICdSb2JvdG8nLFxuXHRcdCdTRlByb0Rpc3BsYXktUmVndWxhcicsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnO1xuICAtLWZvbnRzLXNlcmlmOiAnU291cmNlIFNlcmlmJywgJ1NvdXJjZSBIYW4gU2VyaWYgVEMnLCAnTGludXggTGliZXJ0aW5lJywgJ0dlb3JnaWEnLCAnVGltZXMgTmV3IFJvbWFuJywgJ1RpbWVzJyxcblx0XHQnTWluZ0xpVScsICdTaW1TdW4nLCBzZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7XG59XG4vKiDlj5jkvZPoj5zljZUgKi9cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDcyMHB4KSB7XG4gICNjaXRpemVuLWxhbmd1YWdlc19fY2FyZCB7XG4gICAgcmlnaHQ6IGNhbGModmFyKC0tc3BhY2UteHhsKSAqIDIpO1xuICB9XG59XG4vKiDlj6/op4bljJbnvJbovpHlmajnlYzpnaLvvIzpmpDol4/moIfpopggKi9cbi52ZS1hY3RpdmF0ZWQgaDEjZmlyc3RIZWFkaW5nIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi52ZS1hY3RpdmF0ZWQgLmNpdGl6ZW4tYm9keS1oZWFkZXItLXN0aWNreSAubXctYm9keS1oZWFkZXI6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4udmUtaW5pdC1tdy1kZXNrdG9wQXJ0aWNsZVRhcmdldCAjYm9keUNvbnRlbnQge1xuICBtYXJnaW4tdG9wOiBjYWxjKDIgKiB2YXIoLS1zcGFjZS1tZCkpO1xufVxuLm13LXVpLWljb24td2lraW1lZGlhLWhlYXJ0IHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHQ9XCIxNzA4MzQ4MTI5NDA3XCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHAtaWQ9XCI0MzM4XCIgd2lkdGg9XCIyMDBcIiBoZWlnaHQ9XCIyMDBcIj48cGF0aCBkPVwiTTUxMiA4OTZhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS0zMC4yOTMzMzMtMTIuMzczMzMzbC0zMzEuNTItMzMxLjk0NjY2N2EyMjQuNDI2NjY3IDIyNC40MjY2NjcgMCAwIDEgMC0zMTUuNzMzMzMzIDIyMy41NzMzMzMgMjIzLjU3MzMzMyAwIDAgMSAzMTUuNzMzMzMzIDBMNTEyIDI4Mi4wMjY2NjdsNDYuMDgtNDYuMDhhMjIzLjU3MzMzMyAyMjMuNTczMzMzIDAgMCAxIDMxNS43MzMzMzMgMCAyMjQuNDI2NjY3IDIyNC40MjY2NjcgMCAwIDEgMCAzMTUuNzMzMzMzbC0zMzEuNTIgMzMxLjk0NjY2N0E0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAxIDUxMiA4OTZ6XCIgcC1pZD1cIjQzMzlcIj48L3BhdGg+PC9zdmc+Jyk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cbi8qIOS/ruWkjSB0b29sYmFyICovXG4jY29udGVudFN1YiB7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYmFja2dyb3VuZDogcmdiYSgyNDAsIDI0OCwgMjU1LCAwLjY1KTtcbiAgcGFkZGluZzogNXB4O1xufVxuI2NvbnRlbnRTdWI6ZW1wdHkge1xuICBkaXNwbGF5OiBub25lO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsQ0FBQyxXQUFXLENBQUM7QUFDWCxXQUFTO0FBQ1Qsb0JBQWtCLGdCQUFnQixXQUFXLEVBQUU7QUFDL0MsV0FBUztBQUNULFNBQU87QUFDUCxVQUFRO0FBQ1Isa0JBQWdCO0FBQ2xCO0FBQ0EsQ0FBQyxjQUFjLENBQUM7QUFDZCxXQUFTO0FBQ1Qsb0JBQWtCLGdCQUFnQixXQUFXLEVBQUU7QUFDL0MsV0FBUztBQUNULFNBQU87QUFDUCxVQUFRO0FBQ1Isa0JBQWdCO0FBQ2xCO0FBQ0EsQ0FBQyxxQkFBcUIsQ0FBQztBQUNyQixXQUFTO0FBQ1Qsb0JBQWtCLGdCQUFnQixXQUFXLEVBQUU7QUFDL0MsV0FBUztBQUNULFNBQU87QUFDUCxVQUFRO0FBQ1Isa0JBQWdCO0FBQ2xCO0FBQ0EsQ0FBQyxXQUFXLENBQUM7QUFDWCxXQUFTO0FBQ1Qsb0JBQWtCLGdCQUFnQixXQUFXLEVBQUU7QUFDL0MsV0FBUztBQUNULFNBQU87QUFDUCxVQUFRO0FBQ1Isa0JBQWdCO0FBQ2xCO0FBQ0EsQ0FBQyxXQUFXLENBQUM7QUFDWCxXQUFTO0FBQ1Qsb0JBQWtCLGdCQUFnQixXQUFXLEVBQUU7QUFDL0MsV0FBUztBQUNULFNBQU87QUFDUCxVQUFRO0FBQ1Isa0JBQWdCO0FBQ2xCO0FBQ0EsQ0FBQyxhQUFhLENBQUM7QUFDYixXQUFTO0FBQ1Qsb0JBQWtCLGdCQUFnQixXQUFXLEVBQUU7QUFDL0MsV0FBUztBQUNULFNBQU87QUFDUCxVQUFRO0FBQ1Isa0JBQWdCO0FBQ2xCO0FBQ0EsQ0FBQyxR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 */ diff --git a/dist/StickyTableHeaders/StickyTableHeaders.js b/dist/StickyTableHeaders/StickyTableHeaders.js index 8ed57c23..ea10d6c6 100644 --- a/dist/StickyTableHeaders/StickyTableHeaders.js +++ b/dist/StickyTableHeaders/StickyTableHeaders.js @@ -46,4 +46,4 @@ $(stickyTableHeaders); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1N0aWNreVRhYmxlSGVhZGVycy9tb2R1bGVzL2NvcmUudHMiLCAic3JjL1N0aWNreVRhYmxlSGVhZGVycy9TdGlja3lUYWJsZUhlYWRlcnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCBjb25zdCBzdGlja3lUYWJsZUhlYWRlcnMgPSAoKTogdm9pZCA9PiB7XG5cdGNvbnN0ICRib2R5OiBKUXVlcnk8SFRNTEJvZHlFbGVtZW50PiA9ICQoJ2JvZHknKTtcblx0JGJvZHkuZmluZCgnLndpa2l0YWJsZTpub3QoLnNvcnRhYmxlKScpLmVhY2goKF9pbmRleDogbnVtYmVyLCB0YWJsZTogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcblx0XHRjb25zdCAkdGFibGU6IEpRdWVyeTxIVE1MVGFibGVFbGVtZW50PiA9ICQodGFibGUpIGFzIEpRdWVyeTxIVE1MVGFibGVFbGVtZW50Pjtcblx0XHRjb25zdCAkdGhlYWQ6IEpRdWVyeTxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4gPSAkdGFibGUuZmluZCgndGhlYWQnKTtcblx0XHRjb25zdCAkdHJUaDogSlF1ZXJ5PEhUTUxUYWJsZVJvd0VsZW1lbnQ+ID0gJHRhYmxlXG5cdFx0XHQuZmluZCgndGJvZHk+dHI+dGgnKVxuXHRcdFx0LnBhcmVudCgpXG5cdFx0XHQuZXEoMCkgYXMgSlF1ZXJ5PEhUTUxUYWJsZVJvd0VsZW1lbnQ+O1xuXHRcdGNvbnN0ICR0clRkOiBKUXVlcnk8SFRNTFRhYmxlUm93RWxlbWVudD4gPSAkdGFibGUuZmluZCgndGJvZHk+dHI+dGQnKS5wYXJlbnQoKSBhcyBKUXVlcnk8SFRNTFRhYmxlUm93RWxlbWVudD47XG5cdFx0Y29uc3QgJHRhcmdldDogSlF1ZXJ5PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiB8IEpRdWVyeTxIVE1MVGFibGVSb3dFbGVtZW50PiB8IG51bGwgPSAkdGhlYWQubGVuZ3RoXG5cdFx0XHQ/ICR0aGVhZFxuXHRcdFx0OiAkdHJUaC5sZW5ndGhcblx0XHRcdFx0PyAkdHJUaFxuXHRcdFx0XHQ6IG51bGw7XG5cdFx0aWYgKCR0YXJnZXQgJiYgJHRyVGQubGVuZ3RoID49IDUpIHtcblx0XHRcdCR0YWJsZS5hZGRDbGFzcygnbXctc3RpY2t5LWhlYWRlcicpO1xuXHRcdFx0JHRhcmdldC5hZGRDbGFzcygndGhlYWQnKTtcblx0XHR9XG5cdH0pO1xufTtcbiIsICJpbXBvcnQge3N0aWNreVRhYmxlSGVhZGVyc30gZnJvbSAnLi9tb2R1bGVzL2NvcmUnO1xuXG4kKHN0aWNreVRhYmxlSGVhZGVycyk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyxJQUFNQSxxQkFBcUJBLE1BQVk7QUFDN0MsUUFBTUMsUUFBaUNDLEVBQUUsTUFBTTtBQUMvQ0QsUUFBTUUsS0FBSywyQkFBMkIsRUFBRUMsS0FBSyxDQUFDQyxRQUFnQkMsVUFBNkI7QUFDMUYsVUFBTUMsU0FBbUNMLEVBQUVJLEtBQUs7QUFDaEQsVUFBTUUsU0FBMENELE9BQU9KLEtBQUssT0FBTztBQUNuRSxVQUFNTSxRQUFxQ0YsT0FDekNKLEtBQUssYUFBYSxFQUNsQk8sT0FBTyxFQUNQQyxHQUFHLENBQUM7QUFDTixVQUFNQyxRQUFxQ0wsT0FBT0osS0FBSyxhQUFhLEVBQUVPLE9BQU87QUFDN0UsVUFBTUcsVUFBZ0ZMLE9BQU9NLFNBQzFGTixTQUNBQyxNQUFNSyxTQUNMTCxRQUNBO0FBQ0osUUFBSUksV0FBV0QsTUFBTUUsVUFBVSxHQUFHO0FBQ2pDUCxhQUFPUSxTQUFTLGtCQUFrQjtBQUNsQ0YsY0FBUUUsU0FBUyxPQUFPO0lBQ3pCO0VBQ0QsQ0FBQztBQUNGOztBQ2xCQWIsRUFBRUYsa0JBQWtCOyIsCiAgIm5hbWVzIjogWyJzdGlja3lUYWJsZUhlYWRlcnMiLCAiJGJvZHkiLCAiJCIsICJmaW5kIiwgImVhY2giLCAiX2luZGV4IiwgInRhYmxlIiwgIiR0YWJsZSIsICIkdGhlYWQiLCAiJHRyVGgiLCAicGFyZW50IiwgImVxIiwgIiR0clRkIiwgIiR0YXJnZXQiLCAibGVuZ3RoIiwgImFkZENsYXNzIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1N0aWNreVRhYmxlSGVhZGVycy9tb2R1bGVzL2NvcmUudHMiLCAic3JjL1N0aWNreVRhYmxlSGVhZGVycy9TdGlja3lUYWJsZUhlYWRlcnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCBjb25zdCBzdGlja3lUYWJsZUhlYWRlcnMgPSAoKTogdm9pZCA9PiB7XG5cdGNvbnN0ICRib2R5OiBKUXVlcnk8SFRNTEJvZHlFbGVtZW50PiA9ICQoJ2JvZHknKTtcblx0JGJvZHkuZmluZCgnLndpa2l0YWJsZTpub3QoLnNvcnRhYmxlKScpLmVhY2goKF9pbmRleDogbnVtYmVyLCB0YWJsZTogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcblx0XHRjb25zdCAkdGFibGU6IEpRdWVyeTxIVE1MVGFibGVFbGVtZW50PiA9ICQodGFibGUpIGFzIEpRdWVyeTxIVE1MVGFibGVFbGVtZW50Pjtcblx0XHRjb25zdCAkdGhlYWQ6IEpRdWVyeTxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4gPSAkdGFibGUuZmluZCgndGhlYWQnKTtcblx0XHRjb25zdCAkdHJUaDogSlF1ZXJ5PEhUTUxUYWJsZVJvd0VsZW1lbnQ+ID0gJHRhYmxlXG5cdFx0XHQuZmluZCgndGJvZHk+dHI+dGgnKVxuXHRcdFx0LnBhcmVudCgpXG5cdFx0XHQuZXEoMCkgYXMgSlF1ZXJ5PEhUTUxUYWJsZVJvd0VsZW1lbnQ+O1xuXHRcdGNvbnN0ICR0clRkOiBKUXVlcnk8SFRNTFRhYmxlUm93RWxlbWVudD4gPSAkdGFibGUuZmluZCgndGJvZHk+dHI+dGQnKS5wYXJlbnQoKTtcblx0XHRjb25zdCAkdGFyZ2V0OiBKUXVlcnk8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+IHwgSlF1ZXJ5PEhUTUxUYWJsZVJvd0VsZW1lbnQ+IHwgbnVsbCA9ICR0aGVhZC5sZW5ndGhcblx0XHRcdD8gJHRoZWFkXG5cdFx0XHQ6ICR0clRoLmxlbmd0aFxuXHRcdFx0XHQ/ICR0clRoXG5cdFx0XHRcdDogbnVsbDtcblx0XHRpZiAoJHRhcmdldCAmJiAkdHJUZC5sZW5ndGggPj0gNSkge1xuXHRcdFx0JHRhYmxlLmFkZENsYXNzKCdtdy1zdGlja3ktaGVhZGVyJyk7XG5cdFx0XHQkdGFyZ2V0LmFkZENsYXNzKCd0aGVhZCcpO1xuXHRcdH1cblx0fSk7XG59O1xuIiwgImltcG9ydCB7c3RpY2t5VGFibGVIZWFkZXJzfSBmcm9tICcuL21vZHVsZXMvY29yZSc7XG5cbiQoc3RpY2t5VGFibGVIZWFkZXJzKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLElBQU1BLHFCQUFxQkEsTUFBWTtBQUM3QyxRQUFNQyxRQUFpQ0MsRUFBRSxNQUFNO0FBQy9DRCxRQUFNRSxLQUFLLDJCQUEyQixFQUFFQyxLQUFLLENBQUNDLFFBQWdCQyxVQUE2QjtBQUMxRixVQUFNQyxTQUFtQ0wsRUFBRUksS0FBSztBQUNoRCxVQUFNRSxTQUEwQ0QsT0FBT0osS0FBSyxPQUFPO0FBQ25FLFVBQU1NLFFBQXFDRixPQUN6Q0osS0FBSyxhQUFhLEVBQ2xCTyxPQUFPLEVBQ1BDLEdBQUcsQ0FBQztBQUNOLFVBQU1DLFFBQXFDTCxPQUFPSixLQUFLLGFBQWEsRUFBRU8sT0FBTztBQUM3RSxVQUFNRyxVQUFnRkwsT0FBT00sU0FDMUZOLFNBQ0FDLE1BQU1LLFNBQ0xMLFFBQ0E7QUFDSixRQUFJSSxXQUFXRCxNQUFNRSxVQUFVLEdBQUc7QUFDakNQLGFBQU9RLFNBQVMsa0JBQWtCO0FBQ2xDRixjQUFRRSxTQUFTLE9BQU87SUFDekI7RUFDRCxDQUFDO0FBQ0Y7O0FDbEJBYixFQUFFRixrQkFBa0I7IiwKICAibmFtZXMiOiBbInN0aWNreVRhYmxlSGVhZGVycyIsICIkYm9keSIsICIkIiwgImZpbmQiLCAiZWFjaCIsICJfaW5kZXgiLCAidGFibGUiLCAiJHRhYmxlIiwgIiR0aGVhZCIsICIkdHJUaCIsICJwYXJlbnQiLCAiZXEiLCAiJHRyVGQiLCAiJHRhcmdldCIsICJsZW5ndGgiLCAiYWRkQ2xhc3MiXQp9Cg== diff --git a/dist/TextSpacing/TextSpacing.js b/dist/TextSpacing/TextSpacing.js index ceb39cae..cb777572 100644 --- a/dist/TextSpacing/TextSpacing.js +++ b/dist/TextSpacing/TextSpacing.js @@ -403,9 +403,9 @@ var require_IntersectionObserver = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -419,9 +419,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -433,9 +433,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -446,9 +446,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -459,9 +459,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -471,9 +471,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -485,9 +485,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -500,9 +500,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -516,9 +516,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -529,9 +529,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -546,9 +546,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -556,9 +556,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -569,9 +569,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -581,9 +581,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -594,9 +594,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -605,9 +605,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -620,18 +620,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -640,9 +640,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -667,9 +667,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -683,18 +683,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -710,9 +710,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -725,9 +725,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -739,9 +739,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -752,9 +752,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -770,17 +770,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -795,9 +795,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -805,18 +805,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -825,9 +825,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -837,9 +837,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -850,9 +850,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -864,9 +864,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -886,9 +886,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -914,9 +914,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -927,9 +927,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -941,9 +941,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -958,9 +958,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -983,9 +983,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -999,9 +999,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -1013,9 +1013,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -1059,9 +1059,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -1075,9 +1075,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -1095,9 +1095,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -1112,9 +1112,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -1123,9 +1123,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -1136,17 +1136,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -1219,9 +1219,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -1274,9 +1274,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -1309,9 +1309,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -1322,9 +1322,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -1334,9 +1334,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -1348,9 +1348,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -1361,9 +1361,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -1372,9 +1372,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1407,9 +1407,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1431,9 +1431,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1447,9 +1447,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1460,17 +1460,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1486,9 +1486,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1508,9 +1508,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1529,9 +1529,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1572,9 +1572,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1583,9 +1583,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1610,9 +1610,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1623,9 +1623,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -1662,9 +1662,9 @@ var require_es_array_push = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js var require_set_helpers = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var SetPrototype = Set.prototype; @@ -1679,9 +1679,9 @@ var require_set_helpers = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js var require_a_set = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js"(exports, module2) { "use strict"; var has = require_set_helpers().has; module2.exports = function(it) { @@ -1691,9 +1691,9 @@ var require_a_set = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js var require_iterate_simple = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { "use strict"; var call = require_function_call(); module2.exports = function(record, fn, ITERATOR_INSTEAD_OF_RECORD) { @@ -1708,9 +1708,9 @@ var require_iterate_simple = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js var require_set_iterate = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var iterateSimple = require_iterate_simple(); @@ -1726,9 +1726,9 @@ var require_set_iterate = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js var require_set_clone = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js"(exports, module2) { "use strict"; var SetHelpers = require_set_helpers(); var iterate = require_set_iterate(); @@ -1744,9 +1744,9 @@ var require_set_clone = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js var require_function_uncurry_this_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var aCallable = require_a_callable(); @@ -1759,9 +1759,9 @@ var require_function_uncurry_this_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js var require_set_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js"(exports, module2) { "use strict"; var uncurryThisAccessor = require_function_uncurry_this_accessor(); var SetHelpers = require_set_helpers(); @@ -1771,9 +1771,9 @@ var require_set_size = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js var require_get_iterator_direct = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { "use strict"; module2.exports = function(obj) { return { @@ -1785,9 +1785,9 @@ var require_get_iterator_direct = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js var require_get_set_record = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var anObject = require_an_object(); @@ -1823,9 +1823,9 @@ var require_get_set_record = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js var require_set_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1851,9 +1851,9 @@ var require_set_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js var require_set_method_accept_set_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var createSetLike = function(size) { @@ -1888,9 +1888,9 @@ var require_set_method_accept_set_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js var require_es_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js"() { "use strict"; var $2 = require_export(); var difference = require_set_difference(); @@ -1901,17 +1901,9 @@ var require_es_set_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js -var require_esnext_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js"() { - "use strict"; - require_es_set_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js var require_set_intersection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1940,9 +1932,9 @@ var require_set_intersection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js var require_es_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js"() { "use strict"; var $2 = require_export(); var fails = require_fails(); @@ -1957,17 +1949,9 @@ var require_es_set_intersection_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js -var require_esnext_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js"() { - "use strict"; - require_es_set_intersection_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js var require_iterator_close = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js"(exports, module2) { "use strict"; var call = require_function_call(); var anObject = require_an_object(); @@ -1994,9 +1978,9 @@ var require_iterator_close = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js var require_set_is_disjoint_from = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -2019,9 +2003,9 @@ var require_set_is_disjoint_from = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js var require_es_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { "use strict"; var $2 = require_export(); var isDisjointFrom = require_set_is_disjoint_from(); @@ -2032,17 +2016,9 @@ var require_es_set_is_disjoint_from_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js -var require_esnext_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"() { - "use strict"; - require_es_set_is_disjoint_from_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js var require_set_is_subset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var size = require_set_size(); @@ -2059,9 +2035,9 @@ var require_set_is_subset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js var require_es_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSubsetOf = require_set_is_subset_of(); @@ -2072,17 +2048,9 @@ var require_es_set_is_subset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js -var require_esnext_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"() { - "use strict"; - require_es_set_is_subset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js var require_set_is_superset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -2102,9 +2070,9 @@ var require_set_is_superset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js var require_es_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSupersetOf = require_set_is_superset_of(); @@ -2115,17 +2083,9 @@ var require_es_set_is_superset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js -var require_esnext_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"() { - "use strict"; - require_es_set_is_superset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js var require_set_symmetric_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -2148,9 +2108,9 @@ var require_set_symmetric_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js var require_es_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { "use strict"; var $2 = require_export(); var symmetricDifference = require_set_symmetric_difference(); @@ -2161,17 +2121,9 @@ var require_es_set_symmetric_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js -var require_esnext_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"() { - "use strict"; - require_es_set_symmetric_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js var require_set_union = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var add = require_set_helpers().add; @@ -2190,9 +2142,9 @@ var require_set_union = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js var require_es_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js"() { "use strict"; var $2 = require_export(); var union = require_set_union(); @@ -2203,24 +2155,16 @@ var require_es_set_union_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js -var require_esnext_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js"() { - "use strict"; - require_es_set_union_v2(); - } -}); - // dist/TextSpacing/TextSpacing.js require_IntersectionObserver(); require_es_array_push(); -require_esnext_set_difference_v2(); -require_esnext_set_intersection_v2(); -require_esnext_set_is_disjoint_from_v2(); -require_esnext_set_is_subset_of_v2(); -require_esnext_set_is_superset_of_v2(); -require_esnext_set_symmetric_difference_v2(); -require_esnext_set_union_v2(); +require_es_set_difference_v2(); +require_es_set_intersection_v2(); +require_es_set_is_disjoint_from_v2(); +require_es_set_is_subset_of_v2(); +require_es_set_is_superset_of_v2(); +require_es_set_symmetric_difference_v2(); +require_es_set_union_v2(); var _templateObject; var _templateObject2; var _templateObject3; @@ -2569,4 +2513,4 @@ $(main); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4zL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0ludGVyc2VjdGlvbk9ic2VydmVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1zZXQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pdGVyYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWNsb25lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNpemUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmludGVyc2VjdGlvbi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXVuaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC51bmlvbi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnVuaW9uLnYyLmpzIiwgInNyYy9UZXh0U3BhY2luZy9tb2R1bGVzL3V0aWwudHMiLCAic3JjL1RleHRTcGFjaW5nL21vZHVsZXMvcXVldWUudHMiLCAic3JjL1RleHRTcGFjaW5nL21vZHVsZXMvc3BhY2luZy50cyIsICJzcmMvVGV4dFNwYWNpbmcvVGV4dFNwYWNpbmcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcImluIHdpbmRvdyYmXCJJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5XCJpbiB3aW5kb3cmJlwiaW50ZXJzZWN0aW9uUmF0aW9cImluIHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5LnByb3RvdHlwZVxuKSkge1xuLy8gSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbi8qKlxuICogQ29weXJpZ2h0IDIwMTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgVzNDIFNPRlRXQVJFIEFORCBET0NVTUVOVCBOT1RJQ0UgQU5EIExJQ0VOU0UuXG4gKlxuICogIGh0dHBzOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMTUvY29weXJpZ2h0LXNvZnR3YXJlLWFuZC1kb2N1bWVudFxuICpcbiAqL1xuXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3VwcG9ydGVkTmF0aXZlbHkgPSAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdyAmJlxuJ0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnknIGluIHdpbmRvdyAmJlxuJ2ludGVyc2VjdGlvblJhdGlvJyBpbiB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeS5wcm90b3R5cGU7XG5cbmlmIChzdXBwb3J0ZWROYXRpdmVseSkge1xuXHRyZXR1cm47XG59XG4vKipcbiAqIEFuIEludGVyc2VjdGlvbk9ic2VydmVyIHJlZ2lzdHJ5LiBUaGlzIHJlZ2lzdHJ5IGV4aXN0cyB0byBob2xkIGEgc3Ryb25nXG4gKiByZWZlcmVuY2UgdG8gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaW5zdGFuY2VzIGN1cnJlbnRseSBvYnNlcnZpbmcgYSB0YXJnZXRcbiAqIGVsZW1lbnQuIFdpdGhvdXQgdGhpcyByZWdpc3RyeSwgaW5zdGFuY2VzIHdpdGhvdXQgYW5vdGhlciByZWZlcmVuY2UgbWF5IGJlXG4gKiBnYXJiYWdlIGNvbGxlY3RlZC5cbiAqL1xudmFyIHJlZ2lzdHJ5ID0gW107XG5cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBnbG9iYWwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSBjb25zdHJ1Y3Rvci5cbiAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9JbnRlcnNlY3Rpb25PYnNlcnZlci8jaW50ZXJzZWN0aW9uLW9ic2VydmVyLWVudHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gZW50cnkgQSBkaWN0aW9uYXJ5IG9mIGluc3RhbmNlIHByb3BlcnRpZXMuXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeShlbnRyeSkge1xuXHR0aGlzLnRpbWUgPSBlbnRyeS50aW1lO1xuXHR0aGlzLnRhcmdldCA9IGVudHJ5LnRhcmdldDtcblx0dGhpcy5yb290Qm91bmRzID0gZW50cnkucm9vdEJvdW5kcztcblx0dGhpcy5ib3VuZGluZ0NsaWVudFJlY3QgPSBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3Q7XG5cdHRoaXMuaW50ZXJzZWN0aW9uUmVjdCA9IGVudHJ5LmludGVyc2VjdGlvblJlY3QgfHwgZ2V0RW1wdHlSZWN0KCk7XG5cdHRyeSB7XG5cdFx0dGhpcy5pc0ludGVyc2VjdGluZyA9ICEhZW50cnkuaW50ZXJzZWN0aW9uUmVjdDtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gVGhpcyBtZWFucyB3ZSBhcmUgdXNpbmcgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgcG9seWZpbGwgd2hpY2ggaGFzIG9ubHkgZGVmaW5lZCBhIGdldHRlclxuXHR9XG5cblx0Ly8gQ2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIHJhdGlvLlxuXHR2YXIgdGFyZ2V0UmVjdCA9IHRoaXMuYm91bmRpbmdDbGllbnRSZWN0O1xuXHR2YXIgdGFyZ2V0QXJlYSA9IHRhcmdldFJlY3Qud2lkdGggKiB0YXJnZXRSZWN0LmhlaWdodDtcblx0dmFyIGludGVyc2VjdGlvblJlY3QgPSB0aGlzLmludGVyc2VjdGlvblJlY3Q7XG5cdHZhciBpbnRlcnNlY3Rpb25BcmVhID0gaW50ZXJzZWN0aW9uUmVjdC53aWR0aCAqIGludGVyc2VjdGlvblJlY3QuaGVpZ2h0O1xuXG5cdC8vIFNldHMgaW50ZXJzZWN0aW9uIHJhdGlvLlxuXHRpZiAodGFyZ2V0QXJlYSkge1xuXHRcdC8vIFJvdW5kIHRoZSBpbnRlcnNlY3Rpb24gcmF0aW8gdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgbWF0aCBpc3N1ZXM6XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3czYy9JbnRlcnNlY3Rpb25PYnNlcnZlci9pc3N1ZXMvMzI0XG5cdFx0dGhpcy5pbnRlcnNlY3Rpb25SYXRpbyA9IE51bWJlcigoaW50ZXJzZWN0aW9uQXJlYSAvIHRhcmdldEFyZWEpLnRvRml4ZWQoNCkpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIElmIGFyZWEgaXMgemVybyBhbmQgaXMgaW50ZXJzZWN0aW5nLCBzZXRzIHRvIDEsIG90aGVyd2lzZSB0byAwXG5cdFx0dGhpcy5pbnRlcnNlY3Rpb25SYXRpbyA9IHRoaXMuaXNJbnRlcnNlY3RpbmcgPyAxIDogMDtcblx0fVxufVxuXG5JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25SYXRpbyA9IDA7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgZ2xvYmFsIEludGVyc2VjdGlvbk9ic2VydmVyIGNvbnN0cnVjdG9yLlxuICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ludGVyc2VjdGlvbk9ic2VydmVyLyNpbnRlcnNlY3Rpb24tb2JzZXJ2ZXItaW50ZXJmYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciBpbnRlcnNlY3Rpb25cbiAqICAgICBjaGFuZ2VzIGhhdmUgcXVldWVkLiBUaGUgZnVuY3Rpb24gaXMgbm90IGludm9rZWQgaWYgdGhlIHF1ZXVlIGhhc1xuICogICAgIGJlZW4gZW1wdGllZCBieSBjYWxsaW5nIHRoZSBgdGFrZVJlY29yZHNgIG1ldGhvZC5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X29wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRfb3B0aW9ucykge1xuXG5cdHZhciBvcHRpb25zID0gb3B0X29wdGlvbnMgfHwge307XG5cblx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdGlmIChvcHRpb25zLnJvb3QgJiYgb3B0aW9ucy5yb290Lm5vZGVUeXBlICE9IDEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3Jvb3QgbXVzdCBiZSBhbiBFbGVtZW50Jyk7XG5cdH1cblxuXHQvLyBCaW5kcyBhbmQgdGhyb3R0bGVzIGB0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnNgLlxuXHR0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMgPSB0aHJvdHRsZShcblx0XHRcdHRoaXMuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucy5iaW5kKHRoaXMpLCB0aGlzLlRIUk9UVExFX1RJTUVPVVQpO1xuXG5cdC8vIFByaXZhdGUgcHJvcGVydGllcy5cblx0dGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjaztcblx0dGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzID0gW107XG5cdHRoaXMuX3F1ZXVlZEVudHJpZXMgPSBbXTtcblx0dGhpcy5fcm9vdE1hcmdpblZhbHVlcyA9IHRoaXMuX3BhcnNlUm9vdE1hcmdpbihvcHRpb25zLnJvb3RNYXJnaW4pO1xuXG5cdC8vIFB1YmxpYyBwcm9wZXJ0aWVzLlxuXHR0aGlzLnRocmVzaG9sZHMgPSB0aGlzLl9pbml0VGhyZXNob2xkcyhvcHRpb25zLnRocmVzaG9sZCk7XG5cdHRoaXMucm9vdCA9IG9wdGlvbnMucm9vdCB8fCBudWxsO1xuXHR0aGlzLnJvb3RNYXJnaW4gPSB0aGlzLl9yb290TWFyZ2luVmFsdWVzLm1hcChmdW5jdGlvbihtYXJnaW4pIHtcblx0XHRyZXR1cm4gbWFyZ2luLnZhbHVlICsgbWFyZ2luLnVuaXQ7XG5cdH0pLmpvaW4oJyAnKTtcbn1cblxuXG4vKipcbiAqIFRoZSBtaW5pbXVtIGludGVydmFsIHdpdGhpbiB3aGljaCB0aGUgZG9jdW1lbnQgd2lsbCBiZSBjaGVja2VkIGZvclxuICogaW50ZXJzZWN0aW9uIGNoYW5nZXMuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5USFJPVFRMRV9USU1FT1VUID0gMTAwO1xuXG5cbi8qKlxuICogVGhlIGZyZXF1ZW5jeSBpbiB3aGljaCB0aGUgcG9seWZpbGwgcG9sbHMgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICogdGhpcyBjYW4gYmUgdXBkYXRlZCBvbiBhIHBlciBpbnN0YW5jZSBiYXNpcyBhbmQgbXVzdCBiZSBzZXQgcHJpb3IgdG9cbiAqIGNhbGxpbmcgYG9ic2VydmVgIG9uIHRoZSBmaXJzdCB0YXJnZXQuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5QT0xMX0lOVEVSVkFMID0gbnVsbDtcblxuLyoqXG4gKiBVc2UgYSBtdXRhdGlvbiBvYnNlcnZlciBvbiB0aGUgcm9vdCBlbGVtZW50XG4gKiB0byBkZXRlY3QgaW50ZXJzZWN0aW9uIGNoYW5nZXMuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5VU0VfTVVUQVRJT05fT0JTRVJWRVIgPSB0cnVlO1xuXG5cbi8qKlxuICogU3RhcnRzIG9ic2VydmluZyBhIHRhcmdldCBlbGVtZW50IGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcyBiYXNlZCBvblxuICogdGhlIHRocmVzaG9sZHMgdmFsdWVzLlxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGhlIERPTSBlbGVtZW50IHRvIG9ic2VydmUuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24odGFyZ2V0KSB7XG5cdHZhciBpc1RhcmdldEFscmVhZHlPYnNlcnZlZCA9IHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5zb21lKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRyZXR1cm4gaXRlbS5lbGVtZW50ID09IHRhcmdldDtcblx0fSk7XG5cblx0aWYgKGlzVGFyZ2V0QWxyZWFkeU9ic2VydmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCEodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAxKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gRWxlbWVudCcpO1xuXHR9XG5cblx0dGhpcy5fcmVnaXN0ZXJJbnN0YW5jZSgpO1xuXHR0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMucHVzaCh7ZWxlbWVudDogdGFyZ2V0LCBlbnRyeTogbnVsbH0pO1xuXHR0aGlzLl9tb25pdG9ySW50ZXJzZWN0aW9ucygpO1xuXHR0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMoKTtcbn07XG5cblxuLyoqXG4gKiBTdG9wcyBvYnNlcnZpbmcgYSB0YXJnZXQgZWxlbWVudCBmb3IgaW50ZXJzZWN0aW9uIGNoYW5nZXMuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCBUaGUgRE9NIGVsZW1lbnQgdG8gb2JzZXJ2ZS5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uKHRhcmdldCkge1xuXHR0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMgPVxuXHRcdFx0dGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XG5cblx0XHRyZXR1cm4gaXRlbS5lbGVtZW50ICE9IHRhcmdldDtcblx0fSk7XG5cdGlmICghdGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLmxlbmd0aCkge1xuXHRcdHRoaXMuX3VubW9uaXRvckludGVyc2VjdGlvbnMoKTtcblx0XHR0aGlzLl91bnJlZ2lzdGVySW5zdGFuY2UoKTtcblx0fVxufTtcblxuXG4vKipcbiAqIFN0b3BzIG9ic2VydmluZyBhbGwgdGFyZ2V0IGVsZW1lbnRzIGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcy5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzID0gW107XG5cdHRoaXMuX3VubW9uaXRvckludGVyc2VjdGlvbnMoKTtcblx0dGhpcy5fdW5yZWdpc3Rlckluc3RhbmNlKCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyBhbnkgcXVldWUgZW50cmllcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHJlcG9ydGVkIHRvIHRoZVxuICogY2FsbGJhY2sgYW5kIGNsZWFycyB0aGUgcXVldWUuIFRoaXMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVcbiAqIGNhbGxiYWNrIHRvIG9idGFpbiB0aGUgYWJzb2x1dGUgbW9zdCB1cC10by1kYXRlIGludGVyc2VjdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgY3VycmVudGx5IHF1ZXVlZCBlbnRyaWVzLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUudGFrZVJlY29yZHMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHJlY29yZHMgPSB0aGlzLl9xdWV1ZWRFbnRyaWVzLnNsaWNlKCk7XG5cdHRoaXMuX3F1ZXVlZEVudHJpZXMgPSBbXTtcblx0cmV0dXJuIHJlY29yZHM7XG59O1xuXG5cbi8qKlxuICogQWNjZXB0cyB0aGUgdGhyZXNob2xkIHZhbHVlIGZyb20gdGhlIHVzZXIgY29uZmlndXJhdGlvbiBvYmplY3QgYW5kXG4gKiByZXR1cm5zIGEgc29ydGVkIGFycmF5IG9mIHVuaXF1ZSB0aHJlc2hvbGQgdmFsdWVzLiBJZiBhIHZhbHVlIGlzIG5vdFxuICogYmV0d2VlbiAwIGFuZCAxIGFuZCBlcnJvciBpcyB0aHJvd24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxudW1iZXI9fSBvcHRfdGhyZXNob2xkIEFuIG9wdGlvbmFsIHRocmVzaG9sZCB2YWx1ZSBvclxuICogICAgIGEgbGlzdCBvZiB0aHJlc2hvbGQgdmFsdWVzLCBkZWZhdWx0aW5nIHRvIFswXS5cbiAqIEByZXR1cm4ge0FycmF5fSBBIHNvcnRlZCBsaXN0IG9mIHVuaXF1ZSBhbmQgdmFsaWQgdGhyZXNob2xkIHZhbHVlcy5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9pbml0VGhyZXNob2xkcyA9IGZ1bmN0aW9uKG9wdF90aHJlc2hvbGQpIHtcblx0dmFyIHRocmVzaG9sZCA9IG9wdF90aHJlc2hvbGQgfHwgWzBdO1xuXHRpZiAoIUFycmF5LmlzQXJyYXkodGhyZXNob2xkKSkgdGhyZXNob2xkID0gW3RocmVzaG9sZF07XG5cblx0cmV0dXJuIHRocmVzaG9sZC5zb3J0KCkuZmlsdGVyKGZ1bmN0aW9uKHQsIGksIGEpIHtcblx0XHRpZiAodHlwZW9mIHQgIT0gJ251bWJlcicgfHwgaXNOYU4odCkgfHwgdCA8IDAgfHwgdCA+IDEpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcigndGhyZXNob2xkIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxIGluY2x1c2l2ZWx5Jyk7XG5cdFx0fVxuXHRcdHJldHVybiB0ICE9PSBhW2kgLSAxXTtcblx0fSk7XG59O1xuXG5cbi8qKlxuICogQWNjZXB0cyB0aGUgcm9vdE1hcmdpbiB2YWx1ZSBmcm9tIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgZm91ciBtYXJnaW4gdmFsdWVzIGFzIGFuIG9iamVjdCBjb250YWluaW5nXG4gKiB0aGUgdmFsdWUgYW5kIHVuaXQgcHJvcGVydGllcy4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgYXJlIG5vdCBwcm9wZXJseVxuICogZm9ybWF0dGVkIG9yIHVzZSBhIHVuaXQgb3RoZXIgdGhhbiBweCBvciAlLCBhbmQgZXJyb3IgaXMgdGhyb3duLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X3Jvb3RNYXJnaW4gQW4gb3B0aW9uYWwgcm9vdE1hcmdpbiB2YWx1ZSxcbiAqICAgICBkZWZhdWx0aW5nIHRvICcwcHgnLlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gQW4gYXJyYXkgb2YgbWFyZ2luIG9iamVjdHMgd2l0aCB0aGUga2V5c1xuICogICAgIHZhbHVlIGFuZCB1bml0LlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX3BhcnNlUm9vdE1hcmdpbiA9IGZ1bmN0aW9uKG9wdF9yb290TWFyZ2luKSB7XG5cdHZhciBtYXJnaW5TdHJpbmcgPSBvcHRfcm9vdE1hcmdpbiB8fCAnMHB4Jztcblx0dmFyIG1hcmdpbnMgPSBtYXJnaW5TdHJpbmcuc3BsaXQoL1xccysvKS5tYXAoZnVuY3Rpb24obWFyZ2luKSB7XG5cdFx0dmFyIHBhcnRzID0gL14oLT9cXGQqXFwuP1xcZCspKHB4fCUpJC8uZXhlYyhtYXJnaW4pO1xuXHRcdGlmICghcGFydHMpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcigncm9vdE1hcmdpbiBtdXN0IGJlIHNwZWNpZmllZCBpbiBwaXhlbHMgb3IgcGVyY2VudCcpO1xuXHRcdH1cblx0XHRyZXR1cm4ge3ZhbHVlOiBwYXJzZUZsb2F0KHBhcnRzWzFdKSwgdW5pdDogcGFydHNbMl19O1xuXHR9KTtcblxuXHQvLyBIYW5kbGVzIHNob3J0aGFuZC5cblx0bWFyZ2luc1sxXSA9IG1hcmdpbnNbMV0gfHwgbWFyZ2luc1swXTtcblx0bWFyZ2luc1syXSA9IG1hcmdpbnNbMl0gfHwgbWFyZ2luc1swXTtcblx0bWFyZ2luc1szXSA9IG1hcmdpbnNbM10gfHwgbWFyZ2luc1sxXTtcblxuXHRyZXR1cm4gbWFyZ2lucztcbn07XG5cblxuLyoqXG4gKiBTdGFydHMgcG9sbGluZyBmb3IgaW50ZXJzZWN0aW9uIGNoYW5nZXMgaWYgdGhlIHBvbGxpbmcgaXMgbm90IGFscmVhZHlcbiAqIGhhcHBlbmluZywgYW5kIGlmIHRoZSBwYWdlJ3MgdmlzaWJpbGl0eSBzdGF0ZSBpcyB2aXNpYmxlLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9tb25pdG9ySW50ZXJzZWN0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIXRoaXMuX21vbml0b3JpbmdJbnRlcnNlY3Rpb25zKSB7XG5cdFx0dGhpcy5fbW9uaXRvcmluZ0ludGVyc2VjdGlvbnMgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBwb2xsIGludGVydmFsIGlzIHNldCwgdXNlIHBvbGxpbmcgaW5zdGVhZCBvZiBsaXN0ZW5pbmcgdG9cblx0XHQvLyByZXNpemUgYW5kIHNjcm9sbCBldmVudHMgb3IgRE9NIG11dGF0aW9ucy5cblx0XHRpZiAodGhpcy5QT0xMX0lOVEVSVkFMKSB7XG5cdFx0XHR0aGlzLl9tb25pdG9yaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcblx0XHRcdFx0XHR0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMsIHRoaXMuUE9MTF9JTlRFUlZBTCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0YWRkRXZlbnQod2luZG93LCAncmVzaXplJywgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zLCB0cnVlKTtcblx0XHRcdGFkZEV2ZW50KGRvY3VtZW50LCAnc2Nyb2xsJywgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zLCB0cnVlKTtcblxuXHRcdFx0aWYgKHRoaXMuVVNFX01VVEFUSU9OX09CU0VSVkVSICYmICdNdXRhdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpIHtcblx0XHRcdFx0dGhpcy5fZG9tT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMpO1xuXHRcdFx0XHR0aGlzLl9kb21PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XG5cdFx0XHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRcdFx0Y2hhcmFjdGVyRGF0YTogdHJ1ZSxcblx0XHRcdFx0XHRzdWJ0cmVlOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuXG4vKipcbiAqIFN0b3BzIHBvbGxpbmcgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl91bm1vbml0b3JJbnRlcnNlY3Rpb25zID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLl9tb25pdG9yaW5nSW50ZXJzZWN0aW9ucykge1xuXHRcdHRoaXMuX21vbml0b3JpbmdJbnRlcnNlY3Rpb25zID0gZmFsc2U7XG5cblx0XHRjbGVhckludGVydmFsKHRoaXMuX21vbml0b3JpbmdJbnRlcnZhbCk7XG5cdFx0dGhpcy5fbW9uaXRvcmluZ0ludGVydmFsID0gbnVsbDtcblxuXHRcdHJlbW92ZUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScsIHRoaXMuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucywgdHJ1ZSk7XG5cdFx0cmVtb3ZlRXZlbnQoZG9jdW1lbnQsICdzY3JvbGwnLCB0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMsIHRydWUpO1xuXG5cdFx0aWYgKHRoaXMuX2RvbU9ic2VydmVyKSB7XG5cdFx0XHR0aGlzLl9kb21PYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHR0aGlzLl9kb21PYnNlcnZlciA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG5cbi8qKlxuICogU2NhbnMgZWFjaCBvYnNlcnZhdGlvbiB0YXJnZXQgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzIGFuZCBhZGRzIHRoZW1cbiAqIHRvIHRoZSBpbnRlcm5hbCBlbnRyaWVzIHF1ZXVlLiBJZiBuZXcgZW50cmllcyBhcmUgZm91bmQsIGl0XG4gKiBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcm9vdElzSW5Eb20gPSB0aGlzLl9yb290SXNJbkRvbSgpO1xuXHR2YXIgcm9vdFJlY3QgPSByb290SXNJbkRvbSA/IHRoaXMuX2dldFJvb3RSZWN0KCkgOiBnZXRFbXB0eVJlY3QoKTtcblxuXHR0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG5cdFx0dmFyIHRhcmdldCA9IGl0ZW0uZWxlbWVudDtcblx0XHR2YXIgdGFyZ2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdCh0YXJnZXQpO1xuXHRcdHZhciByb290Q29udGFpbnNUYXJnZXQgPSB0aGlzLl9yb290Q29udGFpbnNUYXJnZXQodGFyZ2V0KTtcblx0XHR2YXIgb2xkRW50cnkgPSBpdGVtLmVudHJ5O1xuXHRcdHZhciBpbnRlcnNlY3Rpb25SZWN0ID0gcm9vdElzSW5Eb20gJiYgcm9vdENvbnRhaW5zVGFyZ2V0ICYmXG5cdFx0XHRcdHRoaXMuX2NvbXB1dGVUYXJnZXRBbmRSb290SW50ZXJzZWN0aW9uKHRhcmdldCwgcm9vdFJlY3QpO1xuXG5cdFx0dmFyIG5ld0VudHJ5ID0gaXRlbS5lbnRyeSA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KHtcblx0XHRcdHRpbWU6IG5vdygpLFxuXHRcdFx0dGFyZ2V0OiB0YXJnZXQsXG5cdFx0XHRib3VuZGluZ0NsaWVudFJlY3Q6IHRhcmdldFJlY3QsXG5cdFx0XHRyb290Qm91bmRzOiByb290UmVjdCxcblx0XHRcdGludGVyc2VjdGlvblJlY3Q6IGludGVyc2VjdGlvblJlY3Rcblx0XHR9KTtcblxuXHRcdGlmICghb2xkRW50cnkpIHtcblx0XHRcdHRoaXMuX3F1ZXVlZEVudHJpZXMucHVzaChuZXdFbnRyeSk7XG5cdFx0fSBlbHNlIGlmIChyb290SXNJbkRvbSAmJiByb290Q29udGFpbnNUYXJnZXQpIHtcblx0XHRcdC8vIElmIHRoZSBuZXcgZW50cnkgaW50ZXJzZWN0aW9uIHJhdGlvIGhhcyBjcm9zc2VkIGFueSBvZiB0aGVcblx0XHRcdC8vIHRocmVzaG9sZHMsIGFkZCBhIG5ldyBlbnRyeS5cblx0XHRcdGlmICh0aGlzLl9oYXNDcm9zc2VkVGhyZXNob2xkKG9sZEVudHJ5LCBuZXdFbnRyeSkpIHtcblx0XHRcdFx0dGhpcy5fcXVldWVkRW50cmllcy5wdXNoKG5ld0VudHJ5KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgdGhlIHJvb3QgaXMgbm90IGluIHRoZSBET00gb3IgdGFyZ2V0IGlzIG5vdCBjb250YWluZWQgd2l0aGluXG5cdFx0XHQvLyByb290IGJ1dCB0aGUgcHJldmlvdXMgZW50cnkgZm9yIHRoaXMgdGFyZ2V0IGhhZCBhbiBpbnRlcnNlY3Rpb24sXG5cdFx0XHQvLyBhZGQgYSBuZXcgcmVjb3JkIGluZGljYXRpbmcgcmVtb3ZhbC5cblx0XHRcdGlmIChvbGRFbnRyeSAmJiBvbGRFbnRyeS5pc0ludGVyc2VjdGluZykge1xuXHRcdFx0XHR0aGlzLl9xdWV1ZWRFbnRyaWVzLnB1c2gobmV3RW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgdGhpcyk7XG5cblx0aWYgKHRoaXMuX3F1ZXVlZEVudHJpZXMubGVuZ3RoKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2sodGhpcy50YWtlUmVjb3JkcygpLCB0aGlzKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEFjY2VwdHMgYSB0YXJnZXQgYW5kIHJvb3QgcmVjdCBjb21wdXRlcyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlblxuICogZm9sbG93aW5nIHRoZSBhbGdvcml0aG0gaW4gdGhlIHNwZWMuXG4gKiBUT0RPKHBoaWxpcHdhbHRvbik6IGF0IHRoaXMgdGltZSBjbGlwLXBhdGggaXMgbm90IGNvbnNpZGVyZWQuXG4gKiBodHRwczovL3czYy5naXRodWIuaW8vSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvI2NhbGN1bGF0ZS1pbnRlcnNlY3Rpb24tcmVjdC1hbGdvXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCBUaGUgdGFyZ2V0IERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcm9vdFJlY3QgVGhlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIHJvb3QgYWZ0ZXIgYmVpbmdcbiAqICAgICBleHBhbmRlZCBieSB0aGUgcm9vdE1hcmdpbiB2YWx1ZS5cbiAqIEByZXR1cm4gez9PYmplY3R9IFRoZSBmaW5hbCBpbnRlcnNlY3Rpb24gcmVjdCBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIG5vXG4gKiAgICAgaW50ZXJzZWN0aW9uIGlzIGZvdW5kLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9jb21wdXRlVGFyZ2V0QW5kUm9vdEludGVyc2VjdGlvbiA9XG5cdFx0ZnVuY3Rpb24odGFyZ2V0LCByb290UmVjdCkge1xuXG5cdC8vIElmIHRoZSBlbGVtZW50IGlzbid0IGRpc3BsYXllZCwgYW4gaW50ZXJzZWN0aW9uIGNhbid0IGhhcHBlbi5cblx0aWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuZGlzcGxheSA9PSAnbm9uZScpIHJldHVybjtcblxuXHR2YXIgdGFyZ2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdCh0YXJnZXQpO1xuXHR2YXIgaW50ZXJzZWN0aW9uUmVjdCA9IHRhcmdldFJlY3Q7XG5cdHZhciBwYXJlbnQgPSBnZXRQYXJlbnROb2RlKHRhcmdldCk7XG5cdHZhciBhdFJvb3QgPSBmYWxzZTtcblxuXHR3aGlsZSAoIWF0Um9vdCkge1xuXHRcdHZhciBwYXJlbnRSZWN0ID0gbnVsbDtcblx0XHR2YXIgcGFyZW50Q29tcHV0ZWRTdHlsZSA9IHBhcmVudC5ub2RlVHlwZSA9PSAxID9cblx0XHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KSA6IHt9O1xuXG5cdFx0Ly8gSWYgdGhlIHBhcmVudCBpc24ndCBkaXNwbGF5ZWQsIGFuIGludGVyc2VjdGlvbiBjYW4ndCBoYXBwZW4uXG5cdFx0aWYgKHBhcmVudENvbXB1dGVkU3R5bGUuZGlzcGxheSA9PSAnbm9uZScpIHJldHVybjtcblxuXHRcdGlmIChwYXJlbnQgPT0gdGhpcy5yb290IHx8IHBhcmVudCA9PSBkb2N1bWVudCkge1xuXHRcdFx0YXRSb290ID0gdHJ1ZTtcblx0XHRcdHBhcmVudFJlY3QgPSByb290UmVjdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgbm9uLXZpc2libGUgb3ZlcmZsb3csIGFuZCBpdCdzIG5vdCB0aGUgPGJvZHk+XG5cdFx0XHQvLyBvciA8aHRtbD4gZWxlbWVudCwgdXBkYXRlIHRoZSBpbnRlcnNlY3Rpb24gcmVjdC5cblx0XHRcdC8vIE5vdGU6IDxib2R5PiBhbmQgPGh0bWw+IGNhbm5vdCBiZSBjbGlwcGVkIHRvIGEgcmVjdCB0aGF0J3Mgbm90IGFsc29cblx0XHRcdC8vIHRoZSBkb2N1bWVudCByZWN0LCBzbyBubyBuZWVkIHRvIGNvbXB1dGUgYSBuZXcgaW50ZXJzZWN0aW9uLlxuXHRcdFx0aWYgKHBhcmVudCAhPSBkb2N1bWVudC5ib2R5ICYmXG5cdFx0XHRcdFx0cGFyZW50ICE9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuXHRcdFx0XHRcdHBhcmVudENvbXB1dGVkU3R5bGUub3ZlcmZsb3cgIT0gJ3Zpc2libGUnKSB7XG5cdFx0XHRcdHBhcmVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocGFyZW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiBlaXRoZXIgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbmFscyBzZXQgYSBuZXcgcGFyZW50UmVjdCxcblx0XHQvLyBjYWxjdWxhdGUgbmV3IGludGVyc2VjdGlvbiBkYXRhLlxuXHRcdGlmIChwYXJlbnRSZWN0KSB7XG5cdFx0XHRpbnRlcnNlY3Rpb25SZWN0ID0gY29tcHV0ZVJlY3RJbnRlcnNlY3Rpb24ocGFyZW50UmVjdCwgaW50ZXJzZWN0aW9uUmVjdCk7XG5cblx0XHRcdGlmICghaW50ZXJzZWN0aW9uUmVjdCkgYnJlYWs7XG5cdFx0fVxuXHRcdHBhcmVudCA9IGdldFBhcmVudE5vZGUocGFyZW50KTtcblx0fVxuXHRyZXR1cm4gaW50ZXJzZWN0aW9uUmVjdDtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByb290IHJlY3QgYWZ0ZXIgYmVpbmcgZXhwYW5kZWQgYnkgdGhlIHJvb3RNYXJnaW4gdmFsdWUuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBleHBhbmRlZCByb290IHJlY3QuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX2dldFJvb3RSZWN0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciByb290UmVjdDtcblx0aWYgKHRoaXMucm9vdCkge1xuXHRcdHJvb3RSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHRoaXMucm9vdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVXNlIDxodG1sPi88Ym9keT4gaW5zdGVhZCBvZiB3aW5kb3cgc2luY2Ugc2Nyb2xsIGJhcnMgYWZmZWN0IHNpemUuXG5cdFx0dmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0dmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuXHRcdHJvb3RSZWN0ID0ge1xuXHRcdFx0eDogMCxcblx0XHRcdHk6IDAsXG5cdFx0XHR0b3A6IDAsXG5cdFx0XHRsZWZ0OiAwLFxuXHRcdFx0cmlnaHQ6IGh0bWwuY2xpZW50V2lkdGggfHwgYm9keS5jbGllbnRXaWR0aCxcblx0XHRcdHdpZHRoOiBodG1sLmNsaWVudFdpZHRoIHx8IGJvZHkuY2xpZW50V2lkdGgsXG5cdFx0XHRib3R0b206IGh0bWwuY2xpZW50SGVpZ2h0IHx8IGJvZHkuY2xpZW50SGVpZ2h0LFxuXHRcdFx0aGVpZ2h0OiBodG1sLmNsaWVudEhlaWdodCB8fCBib2R5LmNsaWVudEhlaWdodFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHRoaXMuX2V4cGFuZFJlY3RCeVJvb3RNYXJnaW4ocm9vdFJlY3QpO1xufTtcblxuXG4vKipcbiAqIEFjY2VwdHMgYSByZWN0IGFuZCBleHBhbmRzIGl0IGJ5IHRoZSByb290TWFyZ2luIHZhbHVlLlxuICogQHBhcmFtIHtPYmplY3R9IHJlY3QgVGhlIHJlY3Qgb2JqZWN0IHRvIGV4cGFuZC5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGV4cGFuZGVkIHJlY3QuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX2V4cGFuZFJlY3RCeVJvb3RNYXJnaW4gPSBmdW5jdGlvbihyZWN0KSB7XG5cdHZhciBtYXJnaW5zID0gdGhpcy5fcm9vdE1hcmdpblZhbHVlcy5tYXAoZnVuY3Rpb24obWFyZ2luLCBpKSB7XG5cdFx0cmV0dXJuIG1hcmdpbi51bml0ID09ICdweCcgPyBtYXJnaW4udmFsdWUgOlxuXHRcdFx0XHRtYXJnaW4udmFsdWUgKiAoaSAlIDIgPyByZWN0LndpZHRoIDogcmVjdC5oZWlnaHQpIC8gMTAwO1xuXHR9KTtcblx0dmFyIG5ld1JlY3QgPSB7XG5cdFx0dG9wOiByZWN0LnRvcCAtIG1hcmdpbnNbMF0sXG5cdFx0cmlnaHQ6IHJlY3QucmlnaHQgKyBtYXJnaW5zWzFdLFxuXHRcdGJvdHRvbTogcmVjdC5ib3R0b20gKyBtYXJnaW5zWzJdLFxuXHRcdGxlZnQ6IHJlY3QubGVmdCAtIG1hcmdpbnNbM11cblx0fTtcblx0bmV3UmVjdC53aWR0aCA9IG5ld1JlY3QucmlnaHQgLSBuZXdSZWN0LmxlZnQ7XG5cdG5ld1JlY3QuaGVpZ2h0ID0gbmV3UmVjdC5ib3R0b20gLSBuZXdSZWN0LnRvcDtcblx0bmV3UmVjdC54ID0gbmV3UmVjdC5sZWZ0O1xuXHRuZXdSZWN0LnkgPSBuZXdSZWN0LnRvcDtcblxuXHRyZXR1cm4gbmV3UmVjdDtcbn07XG5cblxuLyoqXG4gKiBBY2NlcHRzIGFuIG9sZCBhbmQgbmV3IGVudHJ5IGFuZCByZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZVxuICogdGhyZXNob2xkIHZhbHVlcyBoYXMgYmVlbiBjcm9zc2VkLlxuICogQHBhcmFtIHs/SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeX0gb2xkRW50cnkgVGhlIHByZXZpb3VzIGVudHJ5IGZvciBhXG4gKiAgICBwYXJ0aWN1bGFyIHRhcmdldCBlbGVtZW50IG9yIG51bGwgaWYgbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzLlxuICogQHBhcmFtIHtJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5fSBuZXdFbnRyeSBUaGUgY3VycmVudCBlbnRyeSBmb3IgYVxuICogICAgcGFydGljdWxhciB0YXJnZXQgZWxlbWVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhIGFueSB0aHJlc2hvbGQgaGFzIGJlZW4gY3Jvc3NlZC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5faGFzQ3Jvc3NlZFRocmVzaG9sZCA9XG5cdFx0ZnVuY3Rpb24ob2xkRW50cnksIG5ld0VudHJ5KSB7XG5cblx0Ly8gVG8gbWFrZSBjb21wYXJpbmcgZWFzaWVyLCBhbiBlbnRyeSB0aGF0IGhhcyBhIHJhdGlvIG9mIDBcblx0Ly8gYnV0IGRvZXMgbm90IGFjdHVhbGx5IGludGVyc2VjdCBpcyBnaXZlbiBhIHZhbHVlIG9mIC0xXG5cdHZhciBvbGRSYXRpbyA9IG9sZEVudHJ5ICYmIG9sZEVudHJ5LmlzSW50ZXJzZWN0aW5nID9cblx0XHRcdG9sZEVudHJ5LmludGVyc2VjdGlvblJhdGlvIHx8IDAgOiAtMTtcblx0dmFyIG5ld1JhdGlvID0gbmV3RW50cnkuaXNJbnRlcnNlY3RpbmcgP1xuXHRcdFx0bmV3RW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gfHwgMCA6IC0xO1xuXG5cdC8vIElnbm9yZSB1bmNoYW5nZWQgcmF0aW9zXG5cdGlmIChvbGRSYXRpbyA9PT0gbmV3UmF0aW8pIHJldHVybjtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGhyZXNob2xkcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0aHJlc2hvbGQgPSB0aGlzLnRocmVzaG9sZHNbaV07XG5cblx0XHQvLyBSZXR1cm4gdHJ1ZSBpZiBhbiBlbnRyeSBtYXRjaGVzIGEgdGhyZXNob2xkIG9yIGlmIHRoZSBuZXcgcmF0aW9cblx0XHQvLyBhbmQgdGhlIG9sZCByYXRpbyBhcmUgb24gdGhlIG9wcG9zaXRlIHNpZGVzIG9mIGEgdGhyZXNob2xkLlxuXHRcdGlmICh0aHJlc2hvbGQgPT0gb2xkUmF0aW8gfHwgdGhyZXNob2xkID09IG5ld1JhdGlvIHx8XG5cdFx0XHRcdHRocmVzaG9sZCA8IG9sZFJhdGlvICE9PSB0aHJlc2hvbGQgPCBuZXdSYXRpbykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcm9vdCBlbGVtZW50IGlzIGFuIGVsZW1lbnQgYW5kIGlzIGluIHRoZSBET00uXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSByb290IGVsZW1lbnQgaXMgYW4gZWxlbWVudCBhbmQgaXMgaW4gdGhlIERPTS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fcm9vdElzSW5Eb20gPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICF0aGlzLnJvb3QgfHwgY29udGFpbnNEZWVwKGRvY3VtZW50LCB0aGlzLnJvb3QpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHRhcmdldCBlbGVtZW50IGlzIGEgY2hpbGQgb2Ygcm9vdC5cbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGEgY2hpbGQgb2Ygcm9vdC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fcm9vdENvbnRhaW5zVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KSB7XG5cdHJldHVybiBjb250YWluc0RlZXAodGhpcy5yb290IHx8IGRvY3VtZW50LCB0YXJnZXQpO1xufTtcblxuXG4vKipcbiAqIEFkZHMgdGhlIGluc3RhbmNlIHRvIHRoZSBnbG9iYWwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgcmVnaXN0cnkgaWYgaXQgaXNuJ3RcbiAqIGFscmVhZHkgcHJlc2VudC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fcmVnaXN0ZXJJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAocmVnaXN0cnkuaW5kZXhPZih0aGlzKSA8IDApIHtcblx0XHRyZWdpc3RyeS5wdXNoKHRoaXMpO1xuXHR9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgZ2xvYmFsIEludGVyc2VjdGlvbk9ic2VydmVyIHJlZ2lzdHJ5LlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl91bnJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcblx0dmFyIGluZGV4ID0gcmVnaXN0cnkuaW5kZXhPZih0aGlzKTtcblx0aWYgKGluZGV4ICE9IC0xKSByZWdpc3RyeS5zcGxpY2UoaW5kZXgsIDEpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgcGVyZm9ybWFuY2Uubm93KCkgbWV0aG9kIG9yIG51bGwgaW4gYnJvd3NlcnNcbiAqIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgQVBJLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgZWxhcHNlZCB0aW1lIHNpbmNlIHRoZSBwYWdlIHdhcyByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIG5vdygpIHtcblx0cmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZSAmJiBwZXJmb3JtYW5jZS5ub3cgJiYgcGVyZm9ybWFuY2Uubm93KCk7XG59XG5cblxuLyoqXG4gKiBUaHJvdHRsZXMgYSBmdW5jdGlvbiBhbmQgZGVsYXlzIGl0cyBleGVjdXRpb24sIHNvIGl0J3Mgb25seSBjYWxsZWQgYXQgbW9zdFxuICogb25jZSB3aXRoaW4gYSBnaXZlbiB0aW1lIHBlcmlvZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byB0aHJvdHRsZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFRoZSBhbW91bnQgb2YgdGltZSB0aGF0IG11c3QgcGFzcyBiZWZvcmUgdGhlXG4gKiAgICAgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhZ2Fpbi5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgdGltZW91dCkge1xuXHR2YXIgdGltZXIgPSBudWxsO1xuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICghdGltZXIpIHtcblx0XHRcdHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm4oKTtcblx0XHRcdFx0dGltZXIgPSBudWxsO1xuXHRcdFx0fSwgdGltZW91dCk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbi8qKlxuICogQWRkcyBhbiBldmVudCBoYW5kbGVyIHRvIGEgRE9NIG5vZGUgZW5zdXJpbmcgY3Jvc3MtYnJvd3NlciBjb21wYXRpYmlsaXR5LlxuICogQHBhcmFtIHtOb2RlfSBub2RlIFRoZSBET00gbm9kZSB0byBhZGQgdGhlIGV2ZW50IGhhbmRsZXIgdG8uXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZXZlbnQgaGFuZGxlciB0byBhZGQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF91c2VDYXB0dXJlIE9wdGlvbmFsbHkgYWRkcyB0aGUgZXZlbiB0byB0aGUgY2FwdHVyZVxuICogICAgIHBoYXNlLiBOb3RlOiB0aGlzIG9ubHkgd29ya3MgaW4gbW9kZXJuIGJyb3dzZXJzLlxuICovXG5mdW5jdGlvbiBhZGRFdmVudChub2RlLCBldmVudCwgZm4sIG9wdF91c2VDYXB0dXJlKSB7XG5cdGlmICh0eXBlb2Ygbm9kZS5hZGRFdmVudExpc3RlbmVyID09ICdmdW5jdGlvbicpIHtcblx0XHRub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZuLCBvcHRfdXNlQ2FwdHVyZSB8fCBmYWxzZSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIG5vZGUuYXR0YWNoRXZlbnQgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdG5vZGUuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBmbik7XG5cdH1cbn1cblxuXG4vKipcbiAqIFJlbW92ZXMgYSBwcmV2aW91c2x5IGFkZGVkIGV2ZW50IGhhbmRsZXIgZnJvbSBhIERPTSBub2RlLlxuICogQHBhcmFtIHtOb2RlfSBub2RlIFRoZSBET00gbm9kZSB0byByZW1vdmUgdGhlIGV2ZW50IGhhbmRsZXIgZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBldmVudCBoYW5kbGVyIHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X3VzZUNhcHR1cmUgSWYgdGhlIGV2ZW50IGhhbmRsZXIgd2FzIGFkZGVkIHdpdGggdGhpc1xuICogICAgIGZsYWcgc2V0IHRvIHRydWUsIGl0IHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBoZXJlIGluIG9yZGVyIHRvIHJlbW92ZSBpdC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnQobm9kZSwgZXZlbnQsIGZuLCBvcHRfdXNlQ2FwdHVyZSkge1xuXHRpZiAodHlwZW9mIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBmbiwgb3B0X3VzZUNhcHR1cmUgfHwgZmFsc2UpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBub2RlLmRldGF0Y2hFdmVudCA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0bm9kZS5kZXRhdGNoRXZlbnQoJ29uJyArIGV2ZW50LCBmbik7XG5cdH1cbn1cblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWN0IG9iamVjdHMuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdDEgVGhlIGZpcnN0IHJlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdDIgVGhlIHNlY29uZCByZWN0LlxuICogQHJldHVybiB7P09iamVjdH0gVGhlIGludGVyc2VjdGlvbiByZWN0IG9yIHVuZGVmaW5lZCBpZiBubyBpbnRlcnNlY3Rpb25cbiAqICAgICBpcyBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZVJlY3RJbnRlcnNlY3Rpb24ocmVjdDEsIHJlY3QyKSB7XG5cdHZhciB0b3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG5cdHZhciBib3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG5cdHZhciBsZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG5cdHZhciByaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG5cdHZhciB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcblx0dmFyIGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcblxuXHRyZXR1cm4gKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApICYmIHtcblx0XHR4OiBsZWZ0LFxuXHRcdHk6IHRvcCxcblx0XHR0b3A6IHRvcCxcblx0XHRib3R0b206IGJvdHRvbSxcblx0XHRsZWZ0OiBsZWZ0LFxuXHRcdHJpZ2h0OiByaWdodCxcblx0XHR3aWR0aDogd2lkdGgsXG5cdFx0aGVpZ2h0OiBoZWlnaHRcblx0fTtcbn1cblxuXG4vKipcbiAqIFNoaW1zIHRoZSBuYXRpdmUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgSUUuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsIFRoZSBlbGVtZW50IHdob3NlIGJvdW5kaW5nIHJlY3QgdG8gZ2V0LlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgKHBvc3NpYmx5IHNoaW1tZWQpIHJlY3Qgb2YgdGhlIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbCkge1xuXHR2YXIgcmVjdDtcblxuXHR0cnkge1xuXHRcdHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gSWdub3JlIFdpbmRvd3MgNyBJRTExIFwiVW5zcGVjaWZpZWQgZXJyb3JcIlxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvcHVsbC8yMDVcblx0fVxuXG5cdGlmICghcmVjdCkgcmV0dXJuIGdldEVtcHR5UmVjdCgpO1xuXG5cdC8vIE9sZGVyIElFXG5cdGlmICghKHJlY3Qud2lkdGggJiYgcmVjdC5oZWlnaHQgJiYgcmVjdC54ICYmIHJlY3QueSkpIHtcblx0XHRyZWN0ID0ge1xuXHRcdFx0eDogcmVjdC5sZWZ0LFxuXHRcdFx0eTogcmVjdC50b3AsXG5cdFx0XHR0b3A6IHJlY3QudG9wLFxuXHRcdFx0cmlnaHQ6IHJlY3QucmlnaHQsXG5cdFx0XHRib3R0b206IHJlY3QuYm90dG9tLFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0LFxuXHRcdFx0d2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG5cdFx0XHRoZWlnaHQ6IHJlY3QuYm90dG9tIC0gcmVjdC50b3Bcblx0XHR9O1xuXHR9XG5cdHJldHVybiByZWN0O1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBhbiBlbXB0eSByZWN0IG9iamVjdC4gQW4gZW1wdHkgcmVjdCBpcyByZXR1cm5lZCB3aGVuIGFuIGVsZW1lbnRcbiAqIGlzIG5vdCBpbiB0aGUgRE9NLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgZW1wdHkgcmVjdC5cbiAqL1xuZnVuY3Rpb24gZ2V0RW1wdHlSZWN0KCkge1xuXHRyZXR1cm4ge1xuXHRcdHg6IDAsXG5cdFx0eTogMCxcblx0XHR0b3A6IDAsXG5cdFx0Ym90dG9tOiAwLFxuXHRcdGxlZnQ6IDAsXG5cdFx0cmlnaHQ6IDAsXG5cdFx0d2lkdGg6IDAsXG5cdFx0aGVpZ2h0OiAwXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHRvIHNlZSBpZiBhIHBhcmVudCBlbGVtZW50IGNvbnRhaW5zIGEgY2hpbGQgZWxlbWVudCAoaW5jbHVkaW5nIGluc2lkZVxuICogc2hhZG93IERPTSkuXG4gKiBAcGFyYW0ge05vZGV9IHBhcmVudCBUaGUgcGFyZW50IGVsZW1lbnQuXG4gKiBAcGFyYW0ge05vZGV9IGNoaWxkIFRoZSBjaGlsZCBlbGVtZW50LlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFyZW50IG5vZGUgY29udGFpbnMgdGhlIGNoaWxkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zRGVlcChwYXJlbnQsIGNoaWxkKSB7XG5cdHZhciBub2RlID0gY2hpbGQ7XG5cdHdoaWxlIChub2RlKSB7XG5cdFx0aWYgKG5vZGUgPT0gcGFyZW50KSByZXR1cm4gdHJ1ZTtcblxuXHRcdG5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCBub2RlIG9mIGFuIGVsZW1lbnQgb3IgaXRzIGhvc3QgZWxlbWVudCBpZiB0aGUgcGFyZW50IG5vZGVcbiAqIGlzIGEgc2hhZG93IHJvb3QuXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgd2hvc2UgcGFyZW50IHRvIGdldC5cbiAqIEByZXR1cm4ge05vZGV8bnVsbH0gVGhlIHBhcmVudCBub2RlIG9yIG51bGwgaWYgbm8gcGFyZW50IGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShub2RlKSB7XG5cdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cblx0aWYgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT0gMTEgJiYgcGFyZW50Lmhvc3QpIHtcblx0XHQvLyBJZiB0aGUgcGFyZW50IGlzIGEgc2hhZG93IHJvb3QsIHJldHVybiB0aGUgaG9zdCBlbGVtZW50LlxuXHRcdHJldHVybiBwYXJlbnQuaG9zdDtcblx0fVxuXG5cdGlmIChwYXJlbnQgJiYgcGFyZW50LmFzc2lnbmVkU2xvdCkge1xuXHRcdC8vIElmIHRoZSBwYXJlbnQgaXMgZGlzdHJpYnV0ZWQgaW4gYSA8c2xvdD4sIHJldHVybiB0aGUgcGFyZW50IG9mIGEgc2xvdC5cblx0XHRyZXR1cm4gcGFyZW50LmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlO1xuXHR9XG5cblx0cmV0dXJuIHBhcmVudDtcbn1cblxuXG4vLyBFeHBvc2VzIHRoZSBjb25zdHJ1Y3RvcnMgZ2xvYmFsbHkuXG53aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbndpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5ID0gSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTtcblxufSh3aW5kb3csIGRvY3VtZW50KSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxudmFyIFNldFByb3RvdHlwZSA9IFNldC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbiAgU2V0OiBTZXQsXG4gIGFkZDogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmFkZCksXG4gIGhhczogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmhhcyksXG4gIHJlbW92ZTogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlWydkZWxldGUnXSksXG4gIHByb3RvOiBTZXRQcm90b3R5cGVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcblxuLy8gUGVyZm9ybSA/IFJlcXVpcmVJbnRlcm5hbFNsb3QoTSwgW1tTZXREYXRhXV0pXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBoYXMoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVjb3JkLCBmbiwgSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQpIHtcbiAgdmFyIGl0ZXJhdG9yID0gSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQgPyByZWNvcmQgOiByZWNvcmQuaXRlcmF0b3I7XG4gIHZhciBuZXh0ID0gcmVjb3JkLm5leHQ7XG4gIHZhciBzdGVwLCByZXN1bHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGZuKHN0ZXAudmFsdWUpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIFNldFByb3RvdHlwZSA9IFNldEhlbHBlcnMucHJvdG87XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBrZXlzID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmtleXMpO1xudmFyIG5leHQgPSBrZXlzKG5ldyBTZXQoKSkubmV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoeyBpdGVyYXRvcjoga2V5cyhzZXQpLCBuZXh0OiBuZXh0IH0sIGZuKSA6IGZvckVhY2goc2V0LCBmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzQWNjZXNzb3IoU2V0SGVscGVycy5wcm90bywgJ3NpemUnLCAnZ2V0JykgfHwgZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gc2V0LnNpemU7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBHZXRJdGVyYXRvckRpcmVjdChvYmopYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzLyNzZWMtZ2V0aXRlcmF0b3JkaXJlY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIGl0ZXJhdG9yOiBvYmosXG4gICAgbmV4dDogb2JqLm5leHQsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG52YXIgSU5WQUxJRF9TSVpFID0gJ0ludmFsaWQgc2l6ZSc7XG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBTZXRSZWNvcmQgPSBmdW5jdGlvbiAoc2V0LCBpbnRTaXplKSB7XG4gIHRoaXMuc2V0ID0gc2V0O1xuICB0aGlzLnNpemUgPSBtYXgoaW50U2l6ZSwgMCk7XG4gIHRoaXMuaGFzID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICB0aGlzLmtleXMgPSBhQ2FsbGFibGUoc2V0LmtleXMpO1xufTtcblxuU2V0UmVjb3JkLnByb3RvdHlwZSA9IHtcbiAgZ2V0SXRlcmF0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SXRlcmF0b3JEaXJlY3QoYW5PYmplY3QoY2FsbCh0aGlzLmtleXMsIHRoaXMuc2V0KSkpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGNhbGwodGhpcy5oYXMsIHRoaXMuc2V0LCBpdCk7XG4gIH1cbn07XG5cbi8vIGBHZXRTZXRSZWNvcmRgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNzZWMtZ2V0c2V0cmVjb3JkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgYW5PYmplY3Qob2JqKTtcbiAgdmFyIG51bVNpemUgPSArb2JqLnNpemU7XG4gIC8vIE5PVEU6IElmIHNpemUgaXMgdW5kZWZpbmVkLCB0aGVuIG51bVNpemUgd2lsbCBiZSBOYU5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bVNpemUgIT09IG51bVNpemUpIHRocm93IG5ldyAkVHlwZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHZhciBpbnRTaXplID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1TaXplKTtcbiAgaWYgKGludFNpemUgPCAwKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgcmV0dXJuIG5ldyBTZXRSZWNvcmQob2JqLCBpbnRTaXplKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIGVsc2UgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbnZhciBjcmVhdGVTZXRMaWtlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIHtcbiAgICBzaXplOiBzaXplLFxuICAgIGhhczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcbiAgdHJ5IHtcbiAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgwKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGxhdGUgc3BlYyBjaGFuZ2UsIGVhcmx5IFdlYktpdCB+IFNhZmFyaSAxNy4wIGJldGEgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcGFzcyBpdFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHMvcHVsbC84OFxuICAgICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoLTEpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdkaWZmZXJlbmNlJykgfSwge1xuICBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGlzam9pbnRGcm9tKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0Rpc2pvaW50RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNEaXNqb2ludEZyb20nKSB9LCB7XG4gIGlzRGlzam9pbnRGcm9tOiBpc0Rpc2pvaW50RnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmlzLWRpc2pvaW50LWZyb20udjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3Vic2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhdGUoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3VwZXJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDwgb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIWhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdXBlcnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3VwZXJzZXRPZicpIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBpc1N1cGVyc2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN5bW1ldHJpY0RpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgICBlbHNlIGFkZChyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc3ltbWV0cmljRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnc3ltbWV0cmljRGlmZmVyZW5jZScpIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogc3ltbWV0cmljRGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdW5pb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3VuaW9uJykgfSwge1xuICB1bmlvbjogdW5pb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC51bmlvbi52MicpO1xuIiwgImNvbnN0IGlzSW5saW5lSFRNTEVsZW1lbnQgPSAobm9kZTogTm9kZSk6IG5vZGUgaXMgSFRNTEVsZW1lbnQgPT4ge1xuXHRyZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpLmRpc3BsYXkuaW5jbHVkZXMoJ2lubGluZScpO1xufTtcblxuY29uc3QgaXNUZXh0Tm9kZSA9IChub2RlOiBOb2RlKTogbm9kZSBpcyBUZXh0ID0+IHtcblx0cmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFO1xufTtcblxuY29uc3QgaXNWaXNpYmxlID0gKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuID0+IHtcblx0Y29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuXHRyZXR1cm4gKFxuXHRcdHN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJlxuXHRcdCFbJ2hpZGRlbicsICdjb2xsYXBzZSddLmluY2x1ZGVzKHN0eWxlLnZpc2liaWxpdHkpICYmXG5cdFx0TnVtYmVyLnBhcnNlRmxvYXQoc3R5bGUub3BhY2l0eSkgPiAwXG5cdCk7XG59O1xuXG5jb25zdCBnZXROb2RlVGV4dCA9IChub2RlOiBIVE1MRWxlbWVudCB8IFRleHQpOiBzdHJpbmcgPT4ge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZG9tLW5vZGUtdGV4dC1jb250ZW50XG5cdHJldHVybiBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBub2RlLmlubmVyVGV4dCA6IG5vZGUuZGF0YTtcbn07XG5cbi8qKlxuICogU3BsaXQgYSBzdHJpbmcgYmVmb3JlIGFuIGFycmF5IG9mIGluZGV4ZXMuXG4gKlxuICogRm9yIGV4YW1wbGUsXG4gKiBgYGBcbiAqIHNwbGl0QXRJbmRleGVzKCcxMjM0NTY3ODknLCBbMywgNSwgN10pO1xuICogYGBgXG4gKiByZXN1bHRzIGluXG4gKiBgYGBcbiAqIFsnMTIzJywgJzQ1JywgJzY3JywgJzg5J11cbiAqIGBgYFxuICpcbiAqIE5vdGUgdGhhdCBlbXB0eSBzdHJpbmcgYXJlIGluY2x1ZGVkOlxuICogYGBgXG4gKiBzcGxpdEF0SW5kZXhlcygnMTIzNDU2Nzg5JywgWzAsIDldKTtcbiAqIGBgYFxuICogcmVzdWx0cyBpblxuICogYGBgXG4gKiBbJycsICcxMjM0NTY3ODknLCAnJ11cbiAqIGBgYFxuICpcbiAqIEluZGV4ZXMgdGhhdCBhcmUgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBhcmUgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIHN0cmluZyB0byBzcGxpdFxuICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXhlcyBpbmRleGVzXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX0gc3BsaXR0ZWQgc3RyaW5nIGZyYWdtZW50c1xuICovXG5jb25zdCBzcGxpdEF0SW5kZXhlcyA9IChzdHI6IHN0cmluZywgaW5kZXhlczogbnVtYmVyW10pOiBzdHJpbmdbXSA9PiB7XG5cdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblxuXHRjb25zdCBub3JtYWxpemVkSW5kZXhlczogbnVtYmVyW10gPSBbXG5cdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0aW9ucyBhbmQgc29ydCBpbiBhc2NlbmRpbmcgb3JkZXJcblx0XHQuLi5uZXcgU2V0KFxuXHRcdFx0aW5kZXhlc1xuXHRcdFx0XHQuc29ydCgoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBhIC0gYjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbHRlcigoaTogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGkgPj0gMCAmJiBpIDw9IHN0ci5sZW5ndGg7XG5cdFx0XHRcdH0pXG5cdFx0KSxcblx0XHRzdHIubGVuZ3RoLFxuXHRdO1xuXG5cdGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBub3JtYWxpemVkSW5kZXhlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNsaWNlOiBzdHJpbmcgPSBzdHIuc2xpY2Uobm9ybWFsaXplZEluZGV4ZXNbaSAtIDFdLCBub3JtYWxpemVkSW5kZXhlc1tpXSk7XG5cdFx0cmVzdWx0LnB1c2goc2xpY2UpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCB7aXNJbmxpbmVIVE1MRWxlbWVudCwgaXNUZXh0Tm9kZSwgaXNWaXNpYmxlLCBnZXROb2RlVGV4dCwgc3BsaXRBdEluZGV4ZXN9O1xuIiwgInR5cGUgRG9tTXV0YXRpb25GdW5jID0gKGVsZW1lbnQ6IEVsZW1lbnQpID0+IHZvaWQ7XG5cbmNvbnN0IHBlbmRpbmdBY3Rpb25zOiBXZWFrTWFwPEVsZW1lbnQsIERvbU11dGF0aW9uRnVuY1tdPiA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIERvbU11dGF0aW9uRnVuY1tdPigpO1xuXG5jb25zdCBvbkludGVyc2VjdGlvbiA9IChlbnRyaWVzOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG5cdFx0aWYgKCFlbnRyeS5pc0ludGVyc2VjdGluZykge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZWxlbWVudDogRWxlbWVudCA9IGVudHJ5LnRhcmdldDtcblx0XHRvYnNlcnZlci51bm9ic2VydmUoZWxlbWVudCk7XG5cblx0XHRjb25zdCBjYWxsYmFja3M6IERvbU11dGF0aW9uRnVuY1tdIHwgdW5kZWZpbmVkID0gcGVuZGluZ0FjdGlvbnMuZ2V0KGVsZW1lbnQpO1xuXHRcdGlmICghY2FsbGJhY2tzKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0Y29uc3QgY2FsbGJhY2s6IERvbU11dGF0aW9uRnVuYyB8IHVuZGVmaW5lZCA9IGNhbGxiYWNrcy5zaGlmdCgpOyAvLyBGSUZPXG5cdFx0XHRpZiAoIWNhbGxiYWNrKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FsbGJhY2soZWxlbWVudCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBPcHRpbWl6YXRpb246IGxhemlseSBleGVjdXRlIHBlbmRpbmcgYWN0aW9ucyBvbmNlIGFuIGVsZW1lbnQgaXMgdmlzaWJsZVxuY29uc3Qgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKG9uSW50ZXJzZWN0aW9uKTtcblxuY29uc3QgcXVldWVEb21NdXRhdGlvbiA9IChlbGVtZW50OiBFbGVtZW50LCBjYWxsYmFjazogRG9tTXV0YXRpb25GdW5jKTogdm9pZCA9PiB7XG5cdGlmICghcGVuZGluZ0FjdGlvbnMuaGFzKGVsZW1lbnQpKSB7XG5cdFx0cGVuZGluZ0FjdGlvbnMuc2V0KGVsZW1lbnQsIFtdKTtcblx0fVxuXG5cdHBlbmRpbmdBY3Rpb25zLmdldChlbGVtZW50KT8ucHVzaChjYWxsYmFjayk7XG5cdG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCk7XG59O1xuXG5leHBvcnQge3F1ZXVlRG9tTXV0YXRpb259O1xuIiwgImltcG9ydCB7Z2V0Tm9kZVRleHQsIGlzSW5saW5lSFRNTEVsZW1lbnQsIGlzVGV4dE5vZGUsIGlzVmlzaWJsZSwgc3BsaXRBdEluZGV4ZXN9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge3F1ZXVlRG9tTXV0YXRpb259IGZyb20gJy4vcXVldWUnO1xuXG5jb25zdCBSRUdFWF9SQU5HRV9DSElORVNFOiBzdHJpbmcgPSBTdHJpbmcucmF3YCg/OltcXHUyRTgwLVxcdTJFOTlcXHUyRTlCLVxcdTJFRjNcXHUyRjAwLVxcdTJGRDVcXHUzMDA1XFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzgtXFx1MzAzQlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGRlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOV18XFx1RDgxQltcXHVERkUyXFx1REZFM1xcdURGRjBcXHVERkYxXXxbXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XFx1RDg4MC1cXHVEODgzXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4NjlbXFx1REMwMC1cXHVERURGXFx1REYwMC1cXHVERkZGXXxcXHVEODZEW1xcdURDMDAtXFx1REYzOFxcdURGNDAtXFx1REZGRl18XFx1RDg2RVtcXHVEQzAwLVxcdURDMURcXHVEQzIwLVxcdURGRkZdfFxcdUQ4NzNbXFx1REMwMC1cXHVERUExXFx1REVCMC1cXHVERkZGXXxcXHVEODdBW1xcdURDMDAtXFx1REZFMF18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdfFxcdUQ4ODRbXFx1REMwMC1cXHVERjRBXSlgO1xuY29uc3QgUkVHRVhfUkFOR0VfT1RIRVJfTEVGVDogc3RyaW5nID0gU3RyaW5nLnJhd2BbQS1aYS16MC05QH4lKz18wrFcXCl9IyTCpeKCrMKj4oKkXWA7XG5jb25zdCBSRUdFWF9SQU5HRV9PVEhFUl9SSUdIVDogc3RyaW5nID0gU3RyaW5nLnJhd2BbQS1aYS16MC05QH4lKz18wrFcXCh7IyTCpeKCrMKj4oKkXWA7XG5jb25zdCBSRUdFWF9TVFJfSU5URVJfU0NSSVBUOiBzdHJpbmcgPSBgKD86KCR7UkVHRVhfUkFOR0VfQ0hJTkVTRX0pKD89JHtSRUdFWF9SQU5HRV9PVEhFUl9SSUdIVH0pfCgke1JFR0VYX1JBTkdFX09USEVSX0xFRlR9KSg/PSR7UkVHRVhfUkFOR0VfQ0hJTkVTRX0pKWA7XG5cbmNvbnN0IFNQQUNFOiBzdHJpbmcgPSAnXFx1MjAwQSc7XG5cbmNvbnN0IFdSQVBQRVJfQ0xBU1M6IHN0cmluZyA9ICdnYWRnZXQtdGV4dF9zcGFjaW5nJztcblxuY29uc3QgU0VMRUNUT1JfQUxMT1dFRDogc3RyaW5nW10gPSBbXG5cdCdhJyxcblx0J2FiYnInLFxuXHQnYXJ0aWNsZScsXG5cdCdhc2lkZScsXG5cdCdiJyxcblx0J2JkaScsXG5cdCdiaWcnLFxuXHQnYmxvY2txdW90ZScsXG5cdCdidXR0b24nLFxuXHQnY2FwdGlvbicsXG5cdCdjZW50ZXInLFxuXHQnY2l0ZScsXG5cdCdkYXRhJyxcblx0J2RkJyxcblx0J2RlbCcsXG5cdCdkZXRhaWxzJyxcblx0J2RmbicsXG5cdCdkaXYnLFxuXHQnZHQnLFxuXHQnZW0nLFxuXHQnZmlnY2FwdGlvbicsXG5cdCdmb290ZXInLFxuXHQnaDEnLFxuXHQnaDInLFxuXHQnaDMnLFxuXHQnaDQnLFxuXHQnaDUnLFxuXHQnaGVhZGVyJyxcblx0J2knLFxuXHQnaW5zJyxcblx0J2xhYmVsJyxcblx0J2xlZ2VuZCcsXG5cdCdsaScsXG5cdCdtYWluJyxcblx0J21hcmsnLFxuXHQnb3B0aW9uJyxcblx0J3AnLFxuXHQncScsXG5cdCdydWJ5Jyxcblx0J3MnLFxuXHQnc2VjdGlvbicsXG5cdCdzbWFsbCcsXG5cdCdzcGFuJyxcblx0J3N0cmlrZScsXG5cdCdzdHJvbmcnLFxuXHQnc3ViJyxcblx0J3N1bW1hcnknLFxuXHQnc3VwJyxcblx0J3RkJyxcblx0J3RoJyxcblx0J3RpbWUnLFxuXHQndScsXG5dO1xuY29uc3QgU0VMRUNUT1JfQkxPQ0tFRDogc3RyaW5nW10gPSBbXG5cdCdjb2RlJyxcblx0J2tiZCcsXG5cdCdwcmUnLFxuXHQncnAnLFxuXHQncnQnLFxuXHQnc2FtcCcsXG5cdCd0ZXh0YXJlYScsXG5cdCd2YXInLFxuXHQvLyBFbGVtZW50cyB3aXRoIHRoaXMgY2xhc3MgYXJlIGV4Y2x1ZGVkXG5cdCcuZ2FkZ2V0LW5vc3BhY2UnLFxuXHQvLyBFZGl0YWJsZSBlbGVtZW50c1xuXHQnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nLFxuXHQvLyBBQ0UgZWRpdG9yIGNvbnRlbnRcblx0Jy5hY2VfZWRpdG9yJyxcblx0Ly8gVmlzdWFsIEVkaXRvciAoYW5kIDIwMTcgV2lraXRleHQgRWRpdG9yKSBjb250ZW50ICYgZGlmZlxuXHQnLnZlLXVpLXN1cmZhY2UnLFxuXHQnLnZlLWluaXQtbXctZGlmZlBhZ2UtZGlmZicsXG5cdC8vIERpZmZcblx0Jy5kaWZmLWNvbnRleHQnLFxuXHQnLmRpZmYtYWRkZWRsaW5lJyxcblx0Jy5kaWZmLWRlbGV0ZWRsaW5lJyxcblx0Ly8gRGlmZiAoaW5saW5lIG1vZGUpXG5cdCcubXctZGlmZi1pbmxpbmUtYWRkZWQnLFxuXHQnLm13LWRpZmYtaW5saW5lLWRlbGV0ZWQnLFxuXHQnLm13LWRpZmYtaW5saW5lLW1vdmVkJyxcblx0Jy5tdy1kaWZmLWlubGluZS1jaGFuZ2VkJyxcblx0Jy5tdy1kaWZmLWlubGluZS1jb250ZXh0Jyxcbl07XG5cbi8vIEZJWE1FOiBVc2UgOmlzKCkgaW4gdGhlIGZ1dHVyZSBvbmNlIGl0IGhhcyBiZXR0ZXIgYnJvd3NlciBjb21wYXRpYmlsaXR5XG5jb25zdCBTRUxFQ1RPUjogc3RyaW5nID0gU0VMRUNUT1JfQUxMT1dFRC5tYXAoKGFsbG93ZWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBgJHthbGxvd2VkfTpub3QoJHtTRUxFQ1RPUl9CTE9DS0VELmZsYXRNYXAoKGJsb2NrZWQ6IHN0cmluZyk6IHN0cmluZyB8IHN0cmluZ1tdID0+IHtcblx0XHQvLyBOb3QgaW5jbHVkZSBpdHNlbGYgaWYgaXQgaXMgYSB0YWcgc2VsZWN0b3Jcblx0XHRyZXR1cm4gKGJsb2NrZWRbMF0gYXMgc3RyaW5nKS5tYXRjaCgvW2Etel0vaSkgPyBgJHtibG9ja2VkfSAqYCA6IFtibG9ja2VkLCBgJHtibG9ja2VkfSAqYF07XG5cdH0pLmpvaW4oJywnKX0pYDtcbn0pLmpvaW4oJywnKTtcblxuY29uc3QgZ2V0TGVhZkVsZW1lbnRzID0gKHBhcmVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFtdID0+IHtcblx0Y29uc3QgY2FuZGlkYXRlczogTm9kZUxpc3RPZjxIVE1MRWxlbWVudD4gPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbChTRUxFQ1RPUik7XG5cdGNvbnN0IHJlc3VsdDogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG5cdGlmIChwYXJlbnQubWF0Y2hlcyhTRUxFQ1RPUikpIHtcblx0XHRyZXN1bHQucHVzaChwYXJlbnQpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuXHRcdGZvciAoY29uc3QgY2hpbGROb2RlIG9mIGNhbmRpZGF0ZS5jaGlsZE5vZGVzKSB7XG5cdFx0XHRpZiAoaXNUZXh0Tm9kZShjaGlsZE5vZGUpKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNhbmRpZGF0ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBnZXROZXh0VmlzaWJsZVNpYmxpbmcgPSAobm9kZTogTm9kZSk6IEhUTUxFbGVtZW50IHwgVGV4dCB8IG51bGwgPT4ge1xuXHRsZXQgY3VycmVudE5vZGU6IE5vZGUgPSBub2RlO1xuXG5cdC8vIFVzZSBsb29wcyByYXRoZXIgdGhhbiByZWN1cnNpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGNvbnN0IGNhbmRpZGF0ZTogQ2hpbGROb2RlIHwgbnVsbCA9IGN1cnJlbnROb2RlLm5leHRTaWJsaW5nO1xuXG5cdFx0aWYgKCFjYW5kaWRhdGUpIHtcblx0XHRcdGNvbnN0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gY3VycmVudE5vZGUucGFyZW50RWxlbWVudDtcblx0XHRcdGlmICghcGFyZW50KSB7XG5cdFx0XHRcdC8vIFBhcmVudCBpcyBEb2N1bWVudCwgc28gbm8gdmlzaWJsZSBzaWJsaW5nXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQnViYmxlIHVwIHRvIGl0cyBwYXJlbnQgYW5kIGdldCBpdHMgc2libGluZ1xuXHRcdFx0Y3VycmVudE5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoIShjYW5kaWRhdGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBjYW5kaWRhdGUgaW5zdGFuY2VvZiBUZXh0KSkge1xuXHRcdFx0Ly8gQ29tbWVudHMsIFNWR3MsIGV0Yy46IGdldCBpdHMgc2libGluZyBhcyByZXN1bHRcblx0XHRcdGN1cnJlbnROb2RlID0gY2FuZGlkYXRlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoIWlzVmlzaWJsZShjYW5kaWRhdGUpKSB7XG5cdFx0XHRcdC8vIEludmlzaWJsZTogcmVjdXJzaXZlbHkgZ2V0IHRoaXMgZWxlbWVudCdzIG5leHQgc2libGluZ1xuXHRcdFx0XHRjdXJyZW50Tm9kZSA9IGNhbmRpZGF0ZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNJbmxpbmVIVE1MRWxlbWVudChjYW5kaWRhdGUpKSB7XG5cdFx0XHRcdC8vIE5leHQgc2libGluZyBpcyBub3QgaW5saW5lIChhdCBuZXh0IGxpbmUpLCBzbyBubyBzaWJsaW5nc1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FuZGlkYXRlIGluc3RhbmNlb2YgVGV4dCAmJiAhY2FuZGlkYXRlLmRhdGEudHJpbSgpKSB7XG5cdFx0XHQvLyBTa2lwIGVtcHR5IFRleHQgbm9kZXMgKGUuZy4gbGluZSBicmVha3MpXG5cdFx0XHRjdXJyZW50Tm9kZSA9IGNhbmRpZGF0ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYW5kaWRhdGU7XG5cdH1cbn07XG5cbmNvbnN0IGNyZWF0ZVNwYWNpbmdXcmFwcGVyID0gKHN0cjogc3RyaW5nKTogW3N0cmluZywgSFRNTFNwYW5FbGVtZW50XSA9PiB7XG5cdGNvbnN0IHNwYW46IEhUTUxTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1lZGlhd2lraS9jbGFzcy1kb2Ncblx0c3Bhbi5jbGFzc05hbWUgPSBXUkFQUEVSX0NMQVNTO1xuXHRzcGFuLnRleHRDb250ZW50ID0gc3RyLnNsaWNlKC0xKTtcblxuXHRyZXR1cm4gW3N0ci5zbGljZSgwLCAtMSksIHNwYW5dO1xufTtcblxuY29uc3QgYWRqdXN0U3BhY2luZyA9IChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuXHQvLyBGcmVlemUgTm9kZUxpc3QgaW4gYWR2YW5jZVxuXHRjb25zdCBjaGlsZE5vZGVzOiBDaGlsZE5vZGVbXSA9IFsuLi5lbGVtZW50LmNoaWxkTm9kZXNdO1xuXHRjb25zdCB0ZXh0U3BhY2luZ1Bvc01hcDogTWFwPFRleHQsIG51bWJlcltdPiA9IG5ldyBNYXA8VGV4dCwgbnVtYmVyW10+KCk7XG5cblx0Zm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZE5vZGVzKSB7XG5cdFx0aWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBUZXh0KSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbmV4dFNpYmxpbmc6IEhUTUxFbGVtZW50IHwgVGV4dCB8IG51bGwgPSBnZXROZXh0VmlzaWJsZVNpYmxpbmcoY2hpbGQpO1xuXG5cdFx0bGV0IHRlc3RTdHJpbmc6IHN0cmluZyA9IGdldE5vZGVUZXh0KGNoaWxkKTtcblx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdC8vIEFwcGVuZCBmaXJzdCBjaGFyYWN0ZXIgdG8gZGV0ZWN0IHNjcmlwdCBpbnRlcnNlY3Rpb25cblx0XHRcdHRlc3RTdHJpbmcgKz0gZ2V0Tm9kZVRleHQobmV4dFNpYmxpbmcpWzBdID8/ICcnO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluZGV4ZXM6IG51bWJlcltdID0gW107XG5cdFx0Ly8gR2xvYmFsIHJlZ2V4cHMgYXJlIHN0YXRlZnVsIHNvIGRvIGluaXRpYWxpemF0aW9uIGluIGVhY2ggbG9vcFxuXHRcdGNvbnN0IHJlZ2V4VGV4dE5vZGVEYXRhOiBSZWdFeHAgPSBuZXcgUmVnRXhwKFJFR0VYX1NUUl9JTlRFUl9TQ1JJUFQsICdnJyk7XG5cblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0Y29uc3QgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSByZWdleFRleHROb2RlRGF0YS5leGVjKHRlc3RTdHJpbmcpO1xuXHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGluZGV4ZXMucHVzaChtYXRjaC5pbmRleCArIDEpOyAvLyArMSB0byBtYXRjaCBzY3JpcHQgYm91bmRhcnlcblx0XHR9XG5cblx0XHRpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG5cdFx0XHQvLyBPcHRpbWl6YXRpb246IHNraXAgZnVydGhlciBzdGVwc1xuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IHVubmVjZXNzYXJ5IG11dGF0aW9uLCB3aGljaCB3aWxsIGJlIGRldGVjdGVkIGJ5IE11dGF0aW9uT2JzZXJ2ZXIsXG5cdFx0XHQvLyByZXN1bHRpbmcgaW4gaW5maW5pdGUgbG9vcHNcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHRleHRTcGFjaW5nUG9zTWFwLnNldChjaGlsZCwgaW5kZXhlcyk7XG5cdH1cblxuXHQvLyBTY2hlZHVsZSBET00gbXV0YXRpb24gdG8gcHJldmVudCBmb3JjZWQgcmVmbG93c1xuXHRxdWV1ZURvbU11dGF0aW9uKGVsZW1lbnQsICgpOiB2b2lkID0+IHtcblx0XHRmb3IgKGNvbnN0IFtub2RlLCBpbmRleGVzXSBvZiB0ZXh0U3BhY2luZ1Bvc01hcCkge1xuXHRcdFx0Y29uc3QgdGV4dDogc3RyaW5nID0gbm9kZS5kYXRhO1xuXHRcdFx0Y29uc3QgZnJhZ21lbnRzOiBzdHJpbmdbXSA9IHNwbGl0QXRJbmRleGVzKHRleHQsIGluZGV4ZXMpO1xuXG5cdFx0XHRjb25zdCByZXBsYWNlbWVudDogKHN0cmluZyB8IEhUTUxTcGFuRWxlbWVudClbXSA9IGZyYWdtZW50c1xuXHRcdFx0XHQuc2xpY2UoMCwgLTEpXG5cdFx0XHRcdC5mbGF0TWFwKChmcmFnbWVudDogc3RyaW5nKTogW3N0cmluZywgSFRNTFNwYW5FbGVtZW50XSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZVNwYWNpbmdXcmFwcGVyKGZyYWdtZW50KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRyZXBsYWNlbWVudC5wdXNoKGZyYWdtZW50cy5hdCgtMSkgYXMgc3RyaW5nKTtcblxuXHRcdFx0Ly8gT3B0aW1pemF0aW9uOiBwcmV2ZW50IGZvcmNlZCByZWZsb3dzXG5cdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRub2RlLnJlcGxhY2VXaXRoKC4uLnJlcGxhY2VtZW50KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59O1xuXG5jb25zdCBhZGRTcGFjZVRvU3RyaW5nID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0Y29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoUkVHRVhfU1RSX0lOVEVSX1NDUklQVCwgJ2cnKTtcblxuXHRyZXR1cm4gc3RyLnJlcGxhY2UocmVnZXgsIGAkMSQyJHtTUEFDRX1gKTtcbn07XG5cbmV4cG9ydCB7Z2V0TGVhZkVsZW1lbnRzLCBhZGp1c3RTcGFjaW5nLCBhZGRTcGFjZVRvU3RyaW5nLCBXUkFQUEVSX0NMQVNTfTtcbiIsICJpbXBvcnQgJy4vVGV4dFNwYWNpbmcubGVzcyc7XG5pbXBvcnQge1dSQVBQRVJfQ0xBU1MsIGFkZFNwYWNlVG9TdHJpbmcsIGFkanVzdFNwYWNpbmcsIGdldExlYWZFbGVtZW50c30gZnJvbSAnLi9tb2R1bGVzL3NwYWNpbmcnO1xuXG5jb25zdCBydW4gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcblx0Y29uc3QgbGVhdmVzOiBIVE1MRWxlbWVudFtdID0gZ2V0TGVhZkVsZW1lbnRzKGVsZW1lbnQpO1xuXHRmb3IgKGNvbnN0IGxlYWYgb2YgbGVhdmVzKSB7XG5cdFx0YWRqdXN0U3BhY2luZyhsZWFmKTtcblx0fVxufTtcblxuY29uc3QgbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzOiBNdXRhdGlvblJlY29yZFtdKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcblx0XHRpZiAocmVjb3JkLnR5cGUgIT09ICdjaGlsZExpc3QnKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBhZGRlZE5vZGVzOiBOb2RlW10gPSBbLi4ucmVjb3JkLmFkZGVkTm9kZXNdO1xuXG5cdFx0Ly8gRXhjbHVkZSBtdXRhdGlvbnMgY2F1c2VkIGJ5IGFkanVzdFNwYWNpbmcoKSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG5cdFx0Ly8gVHlwaWNhbGx5IHRoZXkgd2lsbCBjb250YWluIG5vZGVzIHdpdGggY2xhc3MgV1JBUFBFUl9DTEFTU1xuXHRcdGlmIChcblx0XHRcdGFkZGVkTm9kZXMuc29tZSgobm9kZTogTm9kZSk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRyZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFdSQVBQRVJfQ0xBU1MpO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBhZGRlZE5vZGVzKSB7XG5cdFx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdHJ1bihub2RlKTtcblx0XHRcdH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFRleHQpIHtcblx0XHRcdFx0Y29uc3Qge3BhcmVudEVsZW1lbnR9ID0gbm9kZTtcblx0XHRcdFx0aWYgKHBhcmVudEVsZW1lbnQpIHtcblx0XHRcdFx0XHRydW4ocGFyZW50RWxlbWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuXG5jb25zdCBtYWluID0gKCk6IHZvaWQgPT4ge1xuXHRkb2N1bWVudC50aXRsZSA9IGFkZFNwYWNlVG9TdHJpbmcoZG9jdW1lbnQudGl0bGUpO1xuXHQvLyBXYXRjaCBmb3IgYWRkZWQgbm9kZXNcblx0bXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0fSk7XG5cdHJ1bihkb2N1bWVudC5ib2R5KTtcbn07XG5cbiQobWFpbik7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxLQUFDLFNBQVNBLFlBQVc7QUFDckIsVUFBSSxFQUFFLDBCQUF5QixVQUFRLCtCQUE4QixVQUFRLHVCQUFzQixPQUFPLDBCQUEwQixZQUNqSTtBQVdILFNBQUMsU0FBU0MsU0FBUUMsV0FBVTtBQUM1QjtBQUVBLGNBQUksb0JBQW9CLDBCQUEwQkQsV0FDbEQsK0JBQStCQSxXQUMvQix1QkFBdUJBLFFBQU8sMEJBQTBCO0FBRXhELGNBQUksbUJBQW1CO0FBQ3RCO0FBQUEsVUFDRDtBQU9BLGNBQUksV0FBVyxDQUFDO0FBU2hCLG1CQUFTLDBCQUEwQixPQUFP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bkJvRyxTQUFBRCxPQUFBakc7QUFDVixVQUFJa0csT0FBT0MsU0FBUyxhQUFhO0FBQ2hDO01BQ0Q7QUFFQSxZQUFNQyxhQUFxQixDQUFDLEdBQUdGLE9BQU9FLFVBQVU7QUFJaEQsVUFDQ0EsV0FBV0MsS0FBTWxKLFVBQXdCO0FBQ3hDLGVBQU9BLGdCQUFnQkMsZUFBZUQsS0FBS21KLFVBQVVDLFNBQVN6RSxhQUFhO01BQzVFLENBQUMsR0FDQTtBQUNEO01BQ0Q7QUFFQSxlQUFBMEUsTUFBQSxHQUFBQyxjQUFtQkwsWUFBQUksTUFBQUMsWUFBQXZILFFBQUFzSCxPQUFZO0FBQS9CLGNBQVdySixPQUFBc0osWUFBQUQsR0FBQTtBQUNWLFlBQUlySixnQkFBZ0JDLGFBQWE7QUFDaENvSSxjQUFJckksSUFBSTtRQUNULFdBQVdBLGdCQUFnQnFHLE1BQU07QUFDaEMsZ0JBQU07WUFBQ0Q7VUFBYSxJQUFJcEc7QUFDeEIsY0FBSW9HLGVBQWU7QUFDbEJpQyxnQkFBSWpDLGFBQWE7VUFDbEI7UUFDRDtNQUNEO0lBQ0Q7RUFBQSxTQUFBOUMsS0FBQTtBQUFBdUYsZUFBQXRGLEVBQUFELEdBQUE7RUFBQSxVQUFBO0FBQUF1RixlQUFBckYsRUFBQTtFQUFBO0FBQ0QsQ0FBQztBQUVELElBQU0rRixPQUFPQSxNQUFZO0FBQ3hCOUMsV0FBUytDLFFBQVF0QixpQkFBaUJ6QixTQUFTK0MsS0FBSztBQUVoRGQsbUJBQWlCNUUsUUFBUTJDLFNBQVNnRCxNQUFNO0lBQ3ZDQyxTQUFTO0lBQ1RDLFdBQVc7RUFDWixDQUFDO0FBQ0R0QixNQUFJNUIsU0FBU2dELElBQUk7QUFDbEI7QUFFQUcsRUFBRUwsSUFBSTsiLAogICJuYW1lcyI6IFsidW5kZWZpbmVkIiwgIndpbmRvdyIsICJkb2N1bWVudCIsICJJbnRlcnNlY3Rpb25PYnNlcnZlciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIldlYWtNYXAiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiV2Vha01hcCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiU2V0IiwgIm1vZHVsZSIsICJTZXQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiU2V0IiwgIiQiLCAibW9kdWxlIiwgIlNldCIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJpc0lubGluZUhUTUxFbGVtZW50IiwgIm5vZGUiLCAiSFRNTEVsZW1lbnQiLCAid2luZG93IiwgImdldENvbXB1dGVkU3R5bGUiLCAiZGlzcGxheSIsICJpbmNsdWRlcyIsICJpc1RleHROb2RlIiwgIm5vZGVUeXBlIiwgIk5vZGUiLCAiVEVYVF9OT0RFIiwgImlzVmlzaWJsZSIsICJlbGVtZW50IiwgInN0eWxlIiwgInZpc2liaWxpdHkiLCAiTnVtYmVyIiwgInBhcnNlRmxvYXQiLCAib3BhY2l0eSIsICJnZXROb2RlVGV4dCIsICJpbm5lclRleHQiLCAiZGF0YSIsICJzcGxpdEF0SW5kZXhlcyIsICJzdHIiLCAiaW5kZXhlcyIsICJyZXN1bHQiLCAibm9ybWFsaXplZEluZGV4ZXMiLCAiU2V0IiwgInNvcnQiLCAiYSIsICJiIiwgImZpbHRlciIsICJpIiwgImxlbmd0aCIsICJzbGljZSIsICJwdXNoIiwgInBlbmRpbmdBY3Rpb25zIiwgIldlYWtNYXAiLCAib25JbnRlcnNlY3Rpb24iLCAiZW50cmllcyIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAiZW50cnkiLCAidmFsdWUiLCAiaXNJbnRlcnNlY3RpbmciLCAidGFyZ2V0IiwgIm9ic2VydmVyIiwgInVub2JzZXJ2ZSIsICJjYWxsYmFja3MiLCAiZ2V0IiwgImNhbGxiYWNrIiwgInNoaWZ0IiwgImVyciIsICJlIiwgImYiLCAiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCAicXVldWVEb21NdXRhdGlvbiIsICJfcGVuZGluZ0FjdGlvbnMkZ2V0IiwgImhhcyIsICJzZXQiLCAib2JzZXJ2ZSIsICJSRUdFWF9SQU5HRV9DSElORVNFIiwgIlN0cmluZyIsICJyYXciLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiUkVHRVhfUkFOR0VfT1RIRVJfTEVGVCIsICJfdGVtcGxhdGVPYmplY3QyIiwgIlJFR0VYX1JBTkdFX09USEVSX1JJR0hUIiwgIl90ZW1wbGF0ZU9iamVjdDMiLCAiUkVHRVhfU1RSX0lOVEVSX1NDUklQVCIsICJjb25jYXQiLCAiU1BBQ0UiLCAiV1JBUFBFUl9DTEFTUyIsICJTRUxFQ1RPUl9BTExPV0VEIiwgIlNFTEVDVE9SX0JMT0NLRUQiLCAiU0VMRUNUT1IiLCAibWFwIiwgImFsbG93ZWQiLCAiZmxhdE1hcCIsICJibG9ja2VkIiwgIm1hdGNoIiwgImpvaW4iLCAiZ2V0TGVhZkVsZW1lbnRzIiwgInBhcmVudCIsICJjYW5kaWRhdGVzIiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAibWF0Y2hlcyIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJjYW5kaWRhdGUiLCAiX2l0ZXJhdG9yMyIsICJjaGlsZE5vZGVzIiwgIl9zdGVwMyIsICJjaGlsZE5vZGUiLCAiZ2V0TmV4dFZpc2libGVTaWJsaW5nIiwgImN1cnJlbnROb2RlIiwgIm5leHRTaWJsaW5nIiwgInBhcmVudEVsZW1lbnQiLCAiVGV4dCIsICJ0cmltIiwgImNyZWF0ZVNwYWNpbmdXcmFwcGVyIiwgInNwYW4iLCAiZG9jdW1lbnQiLCAiY3JlYXRlRWxlbWVudCIsICJjbGFzc05hbWUiLCAidGV4dENvbnRlbnQiLCAiYWRqdXN0U3BhY2luZyIsICJ0ZXh0U3BhY2luZ1Bvc01hcCIsICJNYXAiLCAiX2kiLCAiX2NoaWxkTm9kZXMiLCAiY2hpbGQiLCAidGVzdFN0cmluZyIsICJfZ2V0Tm9kZVRleHQkIiwgInJlZ2V4VGV4dE5vZGVEYXRhIiwgIlJlZ0V4cCIsICJleGVjIiwgImluZGV4IiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgInRleHQiLCAiZnJhZ21lbnRzIiwgInJlcGxhY2VtZW50IiwgImZyYWdtZW50IiwgImF0IiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJyZXBsYWNlV2l0aCIsICJhZGRTcGFjZVRvU3RyaW5nIiwgInJlZ2V4IiwgInJlcGxhY2UiLCAicnVuIiwgImxlYXZlcyIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSIsICJsZWFmIiwgIm11dGF0aW9uT2JzZXJ2ZXIiLCAiTXV0YXRpb25PYnNlcnZlciIsICJyZWNvcmRzIiwgIl9pdGVyYXRvcjYiLCAiX3N0ZXA2IiwgInJlY29yZCIsICJ0eXBlIiwgImFkZGVkTm9kZXMiLCAic29tZSIsICJjbGFzc0xpc3QiLCAiY29udGFpbnMiLCAiX2kyIiwgIl9hZGRlZE5vZGVzIiwgIm1haW4iLCAidGl0bGUiLCAiYm9keSIsICJzdWJ0cmVlIiwgImNoaWxkTGlzdCIsICIkIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi4zL25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0ludGVyc2VjdGlvbk9ic2VydmVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1zZXQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pdGVyYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWNsb25lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNpemUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1zdWJzZXQtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1YnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXVuaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC51bmlvbi52Mi5qcyIsICJzcmMvVGV4dFNwYWNpbmcvbW9kdWxlcy91dGlsLnRzIiwgInNyYy9UZXh0U3BhY2luZy9tb2R1bGVzL3F1ZXVlLnRzIiwgInNyYy9UZXh0U3BhY2luZy9tb2R1bGVzL3NwYWNpbmcudHMiLCAic3JjL1RleHRTcGFjaW5nL1RleHRTcGFjaW5nLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkludGVyc2VjdGlvbk9ic2VydmVyXCJpbiB3aW5kb3cmJlwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVwiaW4gd2luZG93JiZcImludGVyc2VjdGlvblJhdGlvXCJpbiB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeS5wcm90b3R5cGVcbikpIHtcbi8vIEludGVyc2VjdGlvbk9ic2VydmVyXG4vKipcbiAqIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIFczQyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlQgTk9USUNFIEFORCBMSUNFTlNFLlxuICpcbiAqICBodHRwczovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDE1L2NvcHlyaWdodC1zb2Z0d2FyZS1hbmQtZG9jdW1lbnRcbiAqXG4gKi9cblxuKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIHN1cHBvcnRlZE5hdGl2ZWx5ID0gJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cgJiZcbidJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5JyBpbiB3aW5kb3cgJiZcbidpbnRlcnNlY3Rpb25SYXRpbycgaW4gd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkucHJvdG90eXBlO1xuXG5pZiAoc3VwcG9ydGVkTmF0aXZlbHkpIHtcblx0cmV0dXJuO1xufVxuLyoqXG4gKiBBbiBJbnRlcnNlY3Rpb25PYnNlcnZlciByZWdpc3RyeS4gVGhpcyByZWdpc3RyeSBleGlzdHMgdG8gaG9sZCBhIHN0cm9uZ1xuICogcmVmZXJlbmNlIHRvIEludGVyc2VjdGlvbk9ic2VydmVyIGluc3RhbmNlcyBjdXJyZW50bHkgb2JzZXJ2aW5nIGEgdGFyZ2V0XG4gKiBlbGVtZW50LiBXaXRob3V0IHRoaXMgcmVnaXN0cnksIGluc3RhbmNlcyB3aXRob3V0IGFub3RoZXIgcmVmZXJlbmNlIG1heSBiZVxuICogZ2FyYmFnZSBjb2xsZWN0ZWQuXG4gKi9cbnZhciByZWdpc3RyeSA9IFtdO1xuXG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgZ2xvYmFsIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgY29uc3RydWN0b3IuXG4gKiBodHRwczovL3czYy5naXRodWIuaW8vSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvI2ludGVyc2VjdGlvbi1vYnNlcnZlci1lbnRyeVxuICogQHBhcmFtIHtPYmplY3R9IGVudHJ5IEEgZGljdGlvbmFyeSBvZiBpbnN0YW5jZSBwcm9wZXJ0aWVzLlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkoZW50cnkpIHtcblx0dGhpcy50aW1lID0gZW50cnkudGltZTtcblx0dGhpcy50YXJnZXQgPSBlbnRyeS50YXJnZXQ7XG5cdHRoaXMucm9vdEJvdW5kcyA9IGVudHJ5LnJvb3RCb3VuZHM7XG5cdHRoaXMuYm91bmRpbmdDbGllbnRSZWN0ID0gZW50cnkuYm91bmRpbmdDbGllbnRSZWN0O1xuXHR0aGlzLmludGVyc2VjdGlvblJlY3QgPSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0IHx8IGdldEVtcHR5UmVjdCgpO1xuXHR0cnkge1xuXHRcdHRoaXMuaXNJbnRlcnNlY3RpbmcgPSAhIWVudHJ5LmludGVyc2VjdGlvblJlY3Q7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFRoaXMgbWVhbnMgd2UgYXJlIHVzaW5nIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5IHBvbHlmaWxsIHdoaWNoIGhhcyBvbmx5IGRlZmluZWQgYSBnZXR0ZXJcblx0fVxuXG5cdC8vIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiByYXRpby5cblx0dmFyIHRhcmdldFJlY3QgPSB0aGlzLmJvdW5kaW5nQ2xpZW50UmVjdDtcblx0dmFyIHRhcmdldEFyZWEgPSB0YXJnZXRSZWN0LndpZHRoICogdGFyZ2V0UmVjdC5oZWlnaHQ7XG5cdHZhciBpbnRlcnNlY3Rpb25SZWN0ID0gdGhpcy5pbnRlcnNlY3Rpb25SZWN0O1xuXHR2YXIgaW50ZXJzZWN0aW9uQXJlYSA9IGludGVyc2VjdGlvblJlY3Qud2lkdGggKiBpbnRlcnNlY3Rpb25SZWN0LmhlaWdodDtcblxuXHQvLyBTZXRzIGludGVyc2VjdGlvbiByYXRpby5cblx0aWYgKHRhcmdldEFyZWEpIHtcblx0XHQvLyBSb3VuZCB0aGUgaW50ZXJzZWN0aW9uIHJhdGlvIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IG1hdGggaXNzdWVzOlxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvaXNzdWVzLzMyNFxuXHRcdHRoaXMuaW50ZXJzZWN0aW9uUmF0aW8gPSBOdW1iZXIoKGludGVyc2VjdGlvbkFyZWEgLyB0YXJnZXRBcmVhKS50b0ZpeGVkKDQpKTtcblx0fSBlbHNlIHtcblx0XHQvLyBJZiBhcmVhIGlzIHplcm8gYW5kIGlzIGludGVyc2VjdGluZywgc2V0cyB0byAxLCBvdGhlcndpc2UgdG8gMFxuXHRcdHRoaXMuaW50ZXJzZWN0aW9uUmF0aW8gPSB0aGlzLmlzSW50ZXJzZWN0aW5nID8gMSA6IDA7XG5cdH1cbn1cblxuSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeS5wcm90b3R5cGUuaW50ZXJzZWN0aW9uUmF0aW8gPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGdsb2JhbCBJbnRlcnNlY3Rpb25PYnNlcnZlciBjb25zdHJ1Y3Rvci5cbiAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9JbnRlcnNlY3Rpb25PYnNlcnZlci8jaW50ZXJzZWN0aW9uLW9ic2VydmVyLWludGVyZmFjZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgaW50ZXJzZWN0aW9uXG4gKiAgICAgY2hhbmdlcyBoYXZlIHF1ZXVlZC4gVGhlIGZ1bmN0aW9uIGlzIG5vdCBpbnZva2VkIGlmIHRoZSBxdWV1ZSBoYXNcbiAqICAgICBiZWVuIGVtcHRpZWQgYnkgY2FsbGluZyB0aGUgYHRha2VSZWNvcmRzYCBtZXRob2QuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9vcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0X29wdGlvbnMpIHtcblxuXHR2YXIgb3B0aW9ucyA9IG9wdF9vcHRpb25zIHx8IHt9O1xuXG5cdGlmICh0eXBlb2YgY2FsbGJhY2sgIT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5yb290ICYmIG9wdGlvbnMucm9vdC5ub2RlVHlwZSAhPSAxKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdyb290IG11c3QgYmUgYW4gRWxlbWVudCcpO1xuXHR9XG5cblx0Ly8gQmluZHMgYW5kIHRocm90dGxlcyBgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zYC5cblx0dGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zID0gdGhyb3R0bGUoXG5cdFx0XHR0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMuYmluZCh0aGlzKSwgdGhpcy5USFJPVFRMRV9USU1FT1VUKTtcblxuXHQvLyBQcml2YXRlIHByb3BlcnRpZXMuXG5cdHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XG5cdHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cyA9IFtdO1xuXHR0aGlzLl9xdWV1ZWRFbnRyaWVzID0gW107XG5cdHRoaXMuX3Jvb3RNYXJnaW5WYWx1ZXMgPSB0aGlzLl9wYXJzZVJvb3RNYXJnaW4ob3B0aW9ucy5yb290TWFyZ2luKTtcblxuXHQvLyBQdWJsaWMgcHJvcGVydGllcy5cblx0dGhpcy50aHJlc2hvbGRzID0gdGhpcy5faW5pdFRocmVzaG9sZHMob3B0aW9ucy50aHJlc2hvbGQpO1xuXHR0aGlzLnJvb3QgPSBvcHRpb25zLnJvb3QgfHwgbnVsbDtcblx0dGhpcy5yb290TWFyZ2luID0gdGhpcy5fcm9vdE1hcmdpblZhbHVlcy5tYXAoZnVuY3Rpb24obWFyZ2luKSB7XG5cdFx0cmV0dXJuIG1hcmdpbi52YWx1ZSArIG1hcmdpbi51bml0O1xuXHR9KS5qb2luKCcgJyk7XG59XG5cblxuLyoqXG4gKiBUaGUgbWluaW11bSBpbnRlcnZhbCB3aXRoaW4gd2hpY2ggdGhlIGRvY3VtZW50IHdpbGwgYmUgY2hlY2tlZCBmb3JcbiAqIGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuVEhST1RUTEVfVElNRU9VVCA9IDEwMDtcblxuXG4vKipcbiAqIFRoZSBmcmVxdWVuY3kgaW4gd2hpY2ggdGhlIHBvbHlmaWxsIHBvbGxzIGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcy5cbiAqIHRoaXMgY2FuIGJlIHVwZGF0ZWQgb24gYSBwZXIgaW5zdGFuY2UgYmFzaXMgYW5kIG11c3QgYmUgc2V0IHByaW9yIHRvXG4gKiBjYWxsaW5nIGBvYnNlcnZlYCBvbiB0aGUgZmlyc3QgdGFyZ2V0LlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuUE9MTF9JTlRFUlZBTCA9IG51bGw7XG5cbi8qKlxuICogVXNlIGEgbXV0YXRpb24gb2JzZXJ2ZXIgb24gdGhlIHJvb3QgZWxlbWVudFxuICogdG8gZGV0ZWN0IGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuVVNFX01VVEFUSU9OX09CU0VSVkVSID0gdHJ1ZTtcblxuXG4vKipcbiAqIFN0YXJ0cyBvYnNlcnZpbmcgYSB0YXJnZXQgZWxlbWVudCBmb3IgaW50ZXJzZWN0aW9uIGNoYW5nZXMgYmFzZWQgb25cbiAqIHRoZSB0aHJlc2hvbGRzIHZhbHVlcy5cbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRoZSBET00gZWxlbWVudCB0byBvYnNlcnZlLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKHRhcmdldCkge1xuXHR2YXIgaXNUYXJnZXRBbHJlYWR5T2JzZXJ2ZWQgPSB0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMuc29tZShmdW5jdGlvbihpdGVtKSB7XG5cdFx0cmV0dXJuIGl0ZW0uZWxlbWVudCA9PSB0YXJnZXQ7XG5cdH0pO1xuXG5cdGlmIChpc1RhcmdldEFscmVhZHlPYnNlcnZlZCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIEVsZW1lbnQnKTtcblx0fVxuXG5cdHRoaXMuX3JlZ2lzdGVySW5zdGFuY2UoKTtcblx0dGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLnB1c2goe2VsZW1lbnQ6IHRhcmdldCwgZW50cnk6IG51bGx9KTtcblx0dGhpcy5fbW9uaXRvckludGVyc2VjdGlvbnMoKTtcblx0dGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zKCk7XG59O1xuXG5cbi8qKlxuICogU3RvcHMgb2JzZXJ2aW5nIGEgdGFyZ2V0IGVsZW1lbnQgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGhlIERPTSBlbGVtZW50IHRvIG9ic2VydmUuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS51bm9ic2VydmUgPSBmdW5jdGlvbih0YXJnZXQpIHtcblx0dGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzID1cblx0XHRcdHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xuXG5cdFx0cmV0dXJuIGl0ZW0uZWxlbWVudCAhPSB0YXJnZXQ7XG5cdH0pO1xuXHRpZiAoIXRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5sZW5ndGgpIHtcblx0XHR0aGlzLl91bm1vbml0b3JJbnRlcnNlY3Rpb25zKCk7XG5cdFx0dGhpcy5fdW5yZWdpc3Rlckluc3RhbmNlKCk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBTdG9wcyBvYnNlcnZpbmcgYWxsIHRhcmdldCBlbGVtZW50cyBmb3IgaW50ZXJzZWN0aW9uIGNoYW5nZXMuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cyA9IFtdO1xuXHR0aGlzLl91bm1vbml0b3JJbnRlcnNlY3Rpb25zKCk7XG5cdHRoaXMuX3VucmVnaXN0ZXJJbnN0YW5jZSgpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgYW55IHF1ZXVlIGVudHJpZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiByZXBvcnRlZCB0byB0aGVcbiAqIGNhbGxiYWNrIGFuZCBjbGVhcnMgdGhlIHF1ZXVlLiBUaGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlXG4gKiBjYWxsYmFjayB0byBvYnRhaW4gdGhlIGFic29sdXRlIG1vc3QgdXAtdG8tZGF0ZSBpbnRlcnNlY3Rpb24gaW5mb3JtYXRpb24uXG4gKiBAcmV0dXJuIHtBcnJheX0gVGhlIGN1cnJlbnRseSBxdWV1ZWQgZW50cmllcy5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLnRha2VSZWNvcmRzID0gZnVuY3Rpb24oKSB7XG5cdHZhciByZWNvcmRzID0gdGhpcy5fcXVldWVkRW50cmllcy5zbGljZSgpO1xuXHR0aGlzLl9xdWV1ZWRFbnRyaWVzID0gW107XG5cdHJldHVybiByZWNvcmRzO1xufTtcblxuXG4vKipcbiAqIEFjY2VwdHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBmcm9tIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFuZFxuICogcmV0dXJucyBhIHNvcnRlZCBhcnJheSBvZiB1bmlxdWUgdGhyZXNob2xkIHZhbHVlcy4gSWYgYSB2YWx1ZSBpcyBub3RcbiAqIGJldHdlZW4gMCBhbmQgMSBhbmQgZXJyb3IgaXMgdGhyb3duLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8bnVtYmVyPX0gb3B0X3RocmVzaG9sZCBBbiBvcHRpb25hbCB0aHJlc2hvbGQgdmFsdWUgb3JcbiAqICAgICBhIGxpc3Qgb2YgdGhyZXNob2xkIHZhbHVlcywgZGVmYXVsdGluZyB0byBbMF0uXG4gKiBAcmV0dXJuIHtBcnJheX0gQSBzb3J0ZWQgbGlzdCBvZiB1bmlxdWUgYW5kIHZhbGlkIHRocmVzaG9sZCB2YWx1ZXMuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5faW5pdFRocmVzaG9sZHMgPSBmdW5jdGlvbihvcHRfdGhyZXNob2xkKSB7XG5cdHZhciB0aHJlc2hvbGQgPSBvcHRfdGhyZXNob2xkIHx8IFswXTtcblx0aWYgKCFBcnJheS5pc0FycmF5KHRocmVzaG9sZCkpIHRocmVzaG9sZCA9IFt0aHJlc2hvbGRdO1xuXG5cdHJldHVybiB0aHJlc2hvbGQuc29ydCgpLmZpbHRlcihmdW5jdGlvbih0LCBpLCBhKSB7XG5cdFx0aWYgKHR5cGVvZiB0ICE9ICdudW1iZXInIHx8IGlzTmFOKHQpIHx8IHQgPCAwIHx8IHQgPiAxKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3RocmVzaG9sZCBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmNsdXNpdmVseScpO1xuXHRcdH1cblx0XHRyZXR1cm4gdCAhPT0gYVtpIC0gMV07XG5cdH0pO1xufTtcblxuXG4vKipcbiAqIEFjY2VwdHMgdGhlIHJvb3RNYXJnaW4gdmFsdWUgZnJvbSB0aGUgdXNlciBjb25maWd1cmF0aW9uIG9iamVjdFxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGZvdXIgbWFyZ2luIHZhbHVlcyBhcyBhbiBvYmplY3QgY29udGFpbmluZ1xuICogdGhlIHZhbHVlIGFuZCB1bml0IHByb3BlcnRpZXMuIElmIGFueSBvZiB0aGUgdmFsdWVzIGFyZSBub3QgcHJvcGVybHlcbiAqIGZvcm1hdHRlZCBvciB1c2UgYSB1bml0IG90aGVyIHRoYW4gcHggb3IgJSwgYW5kIGVycm9yIGlzIHRocm93bi5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZz19IG9wdF9yb290TWFyZ2luIEFuIG9wdGlvbmFsIHJvb3RNYXJnaW4gdmFsdWUsXG4gKiAgICAgZGVmYXVsdGluZyB0byAnMHB4Jy5cbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IEFuIGFycmF5IG9mIG1hcmdpbiBvYmplY3RzIHdpdGggdGhlIGtleXNcbiAqICAgICB2YWx1ZSBhbmQgdW5pdC5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9wYXJzZVJvb3RNYXJnaW4gPSBmdW5jdGlvbihvcHRfcm9vdE1hcmdpbikge1xuXHR2YXIgbWFyZ2luU3RyaW5nID0gb3B0X3Jvb3RNYXJnaW4gfHwgJzBweCc7XG5cdHZhciBtYXJnaW5zID0gbWFyZ2luU3RyaW5nLnNwbGl0KC9cXHMrLykubWFwKGZ1bmN0aW9uKG1hcmdpbikge1xuXHRcdHZhciBwYXJ0cyA9IC9eKC0/XFxkKlxcLj9cXGQrKShweHwlKSQvLmV4ZWMobWFyZ2luKTtcblx0XHRpZiAoIXBhcnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3Jvb3RNYXJnaW4gbXVzdCBiZSBzcGVjaWZpZWQgaW4gcGl4ZWxzIG9yIHBlcmNlbnQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIHt2YWx1ZTogcGFyc2VGbG9hdChwYXJ0c1sxXSksIHVuaXQ6IHBhcnRzWzJdfTtcblx0fSk7XG5cblx0Ly8gSGFuZGxlcyBzaG9ydGhhbmQuXG5cdG1hcmdpbnNbMV0gPSBtYXJnaW5zWzFdIHx8IG1hcmdpbnNbMF07XG5cdG1hcmdpbnNbMl0gPSBtYXJnaW5zWzJdIHx8IG1hcmdpbnNbMF07XG5cdG1hcmdpbnNbM10gPSBtYXJnaW5zWzNdIHx8IG1hcmdpbnNbMV07XG5cblx0cmV0dXJuIG1hcmdpbnM7XG59O1xuXG5cbi8qKlxuICogU3RhcnRzIHBvbGxpbmcgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzIGlmIHRoZSBwb2xsaW5nIGlzIG5vdCBhbHJlYWR5XG4gKiBoYXBwZW5pbmcsIGFuZCBpZiB0aGUgcGFnZSdzIHZpc2liaWxpdHkgc3RhdGUgaXMgdmlzaWJsZS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fbW9uaXRvckludGVyc2VjdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0aWYgKCF0aGlzLl9tb25pdG9yaW5nSW50ZXJzZWN0aW9ucykge1xuXHRcdHRoaXMuX21vbml0b3JpbmdJbnRlcnNlY3Rpb25zID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgcG9sbCBpbnRlcnZhbCBpcyBzZXQsIHVzZSBwb2xsaW5nIGluc3RlYWQgb2YgbGlzdGVuaW5nIHRvXG5cdFx0Ly8gcmVzaXplIGFuZCBzY3JvbGwgZXZlbnRzIG9yIERPTSBtdXRhdGlvbnMuXG5cdFx0aWYgKHRoaXMuUE9MTF9JTlRFUlZBTCkge1xuXHRcdFx0dGhpcy5fbW9uaXRvcmluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG5cdFx0XHRcdFx0dGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zLCB0aGlzLlBPTExfSU5URVJWQUwpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGFkZEV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScsIHRoaXMuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucywgdHJ1ZSk7XG5cdFx0XHRhZGRFdmVudChkb2N1bWVudCwgJ3Njcm9sbCcsIHRoaXMuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucywgdHJ1ZSk7XG5cblx0XHRcdGlmICh0aGlzLlVTRV9NVVRBVElPTl9PQlNFUlZFUiAmJiAnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luZG93KSB7XG5cdFx0XHRcdHRoaXMuX2RvbU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zKTtcblx0XHRcdFx0dGhpcy5fZG9tT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0XHRcdGNoYXJhY3RlckRhdGE6IHRydWUsXG5cdFx0XHRcdFx0c3VidHJlZTogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cblxuLyoqXG4gKiBTdG9wcyBwb2xsaW5nIGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcy5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fdW5tb25pdG9ySW50ZXJzZWN0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fbW9uaXRvcmluZ0ludGVyc2VjdGlvbnMpIHtcblx0XHR0aGlzLl9tb25pdG9yaW5nSW50ZXJzZWN0aW9ucyA9IGZhbHNlO1xuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLl9tb25pdG9yaW5nSW50ZXJ2YWwpO1xuXHRcdHRoaXMuX21vbml0b3JpbmdJbnRlcnZhbCA9IG51bGw7XG5cblx0XHRyZW1vdmVFdmVudCh3aW5kb3csICdyZXNpemUnLCB0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMsIHRydWUpO1xuXHRcdHJlbW92ZUV2ZW50KGRvY3VtZW50LCAnc2Nyb2xsJywgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zLCB0cnVlKTtcblxuXHRcdGlmICh0aGlzLl9kb21PYnNlcnZlcikge1xuXHRcdFx0dGhpcy5fZG9tT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5fZG9tT2JzZXJ2ZXIgPSBudWxsO1xuXHRcdH1cblx0fVxufTtcblxuXG4vKipcbiAqIFNjYW5zIGVhY2ggb2JzZXJ2YXRpb24gdGFyZ2V0IGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcyBhbmQgYWRkcyB0aGVtXG4gKiB0byB0aGUgaW50ZXJuYWwgZW50cmllcyBxdWV1ZS4gSWYgbmV3IGVudHJpZXMgYXJlIGZvdW5kLCBpdFxuICogc2NoZWR1bGVzIHRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9jaGVja0ZvckludGVyc2VjdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHJvb3RJc0luRG9tID0gdGhpcy5fcm9vdElzSW5Eb20oKTtcblx0dmFyIHJvb3RSZWN0ID0gcm9vdElzSW5Eb20gPyB0aGlzLl9nZXRSb290UmVjdCgpIDogZ2V0RW1wdHlSZWN0KCk7XG5cblx0dGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuXHRcdHZhciB0YXJnZXQgPSBpdGVtLmVsZW1lbnQ7XG5cdFx0dmFyIHRhcmdldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QodGFyZ2V0KTtcblx0XHR2YXIgcm9vdENvbnRhaW5zVGFyZ2V0ID0gdGhpcy5fcm9vdENvbnRhaW5zVGFyZ2V0KHRhcmdldCk7XG5cdFx0dmFyIG9sZEVudHJ5ID0gaXRlbS5lbnRyeTtcblx0XHR2YXIgaW50ZXJzZWN0aW9uUmVjdCA9IHJvb3RJc0luRG9tICYmIHJvb3RDb250YWluc1RhcmdldCAmJlxuXHRcdFx0XHR0aGlzLl9jb21wdXRlVGFyZ2V0QW5kUm9vdEludGVyc2VjdGlvbih0YXJnZXQsIHJvb3RSZWN0KTtcblxuXHRcdHZhciBuZXdFbnRyeSA9IGl0ZW0uZW50cnkgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSh7XG5cdFx0XHR0aW1lOiBub3coKSxcblx0XHRcdHRhcmdldDogdGFyZ2V0LFxuXHRcdFx0Ym91bmRpbmdDbGllbnRSZWN0OiB0YXJnZXRSZWN0LFxuXHRcdFx0cm9vdEJvdW5kczogcm9vdFJlY3QsXG5cdFx0XHRpbnRlcnNlY3Rpb25SZWN0OiBpbnRlcnNlY3Rpb25SZWN0XG5cdFx0fSk7XG5cblx0XHRpZiAoIW9sZEVudHJ5KSB7XG5cdFx0XHR0aGlzLl9xdWV1ZWRFbnRyaWVzLnB1c2gobmV3RW50cnkpO1xuXHRcdH0gZWxzZSBpZiAocm9vdElzSW5Eb20gJiYgcm9vdENvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHQvLyBJZiB0aGUgbmV3IGVudHJ5IGludGVyc2VjdGlvbiByYXRpbyBoYXMgY3Jvc3NlZCBhbnkgb2YgdGhlXG5cdFx0XHQvLyB0aHJlc2hvbGRzLCBhZGQgYSBuZXcgZW50cnkuXG5cdFx0XHRpZiAodGhpcy5faGFzQ3Jvc3NlZFRocmVzaG9sZChvbGRFbnRyeSwgbmV3RW50cnkpKSB7XG5cdFx0XHRcdHRoaXMuX3F1ZXVlZEVudHJpZXMucHVzaChuZXdFbnRyeSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIElmIHRoZSByb290IGlzIG5vdCBpbiB0aGUgRE9NIG9yIHRhcmdldCBpcyBub3QgY29udGFpbmVkIHdpdGhpblxuXHRcdFx0Ly8gcm9vdCBidXQgdGhlIHByZXZpb3VzIGVudHJ5IGZvciB0aGlzIHRhcmdldCBoYWQgYW4gaW50ZXJzZWN0aW9uLFxuXHRcdFx0Ly8gYWRkIGEgbmV3IHJlY29yZCBpbmRpY2F0aW5nIHJlbW92YWwuXG5cdFx0XHRpZiAob2xkRW50cnkgJiYgb2xkRW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcblx0XHRcdFx0dGhpcy5fcXVldWVkRW50cmllcy5wdXNoKG5ld0VudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHRoaXMpO1xuXG5cdGlmICh0aGlzLl9xdWV1ZWRFbnRyaWVzLmxlbmd0aCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrKHRoaXMudGFrZVJlY29yZHMoKSwgdGhpcyk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBBY2NlcHRzIGEgdGFyZ2V0IGFuZCByb290IHJlY3QgY29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZW5cbiAqIGZvbGxvd2luZyB0aGUgYWxnb3JpdGhtIGluIHRoZSBzcGVjLlxuICogVE9ETyhwaGlsaXB3YWx0b24pOiBhdCB0aGlzIHRpbWUgY2xpcC1wYXRoIGlzIG5vdCBjb25zaWRlcmVkLlxuICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ludGVyc2VjdGlvbk9ic2VydmVyLyNjYWxjdWxhdGUtaW50ZXJzZWN0aW9uLXJlY3QtYWxnb1xuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGhlIHRhcmdldCBET00gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHJvb3RSZWN0IFRoZSBib3VuZGluZyByZWN0IG9mIHRoZSByb290IGFmdGVyIGJlaW5nXG4gKiAgICAgZXhwYW5kZWQgYnkgdGhlIHJvb3RNYXJnaW4gdmFsdWUuXG4gKiBAcmV0dXJuIHs/T2JqZWN0fSBUaGUgZmluYWwgaW50ZXJzZWN0aW9uIHJlY3Qgb2JqZWN0IG9yIHVuZGVmaW5lZCBpZiBub1xuICogICAgIGludGVyc2VjdGlvbiBpcyBmb3VuZC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fY29tcHV0ZVRhcmdldEFuZFJvb3RJbnRlcnNlY3Rpb24gPVxuXHRcdGZ1bmN0aW9uKHRhcmdldCwgcm9vdFJlY3QpIHtcblxuXHQvLyBJZiB0aGUgZWxlbWVudCBpc24ndCBkaXNwbGF5ZWQsIGFuIGludGVyc2VjdGlvbiBjYW4ndCBoYXBwZW4uXG5cdGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmRpc3BsYXkgPT0gJ25vbmUnKSByZXR1cm47XG5cblx0dmFyIHRhcmdldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QodGFyZ2V0KTtcblx0dmFyIGludGVyc2VjdGlvblJlY3QgPSB0YXJnZXRSZWN0O1xuXHR2YXIgcGFyZW50ID0gZ2V0UGFyZW50Tm9kZSh0YXJnZXQpO1xuXHR2YXIgYXRSb290ID0gZmFsc2U7XG5cblx0d2hpbGUgKCFhdFJvb3QpIHtcblx0XHR2YXIgcGFyZW50UmVjdCA9IG51bGw7XG5cdFx0dmFyIHBhcmVudENvbXB1dGVkU3R5bGUgPSBwYXJlbnQubm9kZVR5cGUgPT0gMSA/XG5cdFx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkgOiB7fTtcblxuXHRcdC8vIElmIHRoZSBwYXJlbnQgaXNuJ3QgZGlzcGxheWVkLCBhbiBpbnRlcnNlY3Rpb24gY2FuJ3QgaGFwcGVuLlxuXHRcdGlmIChwYXJlbnRDb21wdXRlZFN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKSByZXR1cm47XG5cblx0XHRpZiAocGFyZW50ID09IHRoaXMucm9vdCB8fCBwYXJlbnQgPT0gZG9jdW1lbnQpIHtcblx0XHRcdGF0Um9vdCA9IHRydWU7XG5cdFx0XHRwYXJlbnRSZWN0ID0gcm9vdFJlY3Q7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIG5vbi12aXNpYmxlIG92ZXJmbG93LCBhbmQgaXQncyBub3QgdGhlIDxib2R5PlxuXHRcdFx0Ly8gb3IgPGh0bWw+IGVsZW1lbnQsIHVwZGF0ZSB0aGUgaW50ZXJzZWN0aW9uIHJlY3QuXG5cdFx0XHQvLyBOb3RlOiA8Ym9keT4gYW5kIDxodG1sPiBjYW5ub3QgYmUgY2xpcHBlZCB0byBhIHJlY3QgdGhhdCdzIG5vdCBhbHNvXG5cdFx0XHQvLyB0aGUgZG9jdW1lbnQgcmVjdCwgc28gbm8gbmVlZCB0byBjb21wdXRlIGEgbmV3IGludGVyc2VjdGlvbi5cblx0XHRcdGlmIChwYXJlbnQgIT0gZG9jdW1lbnQuYm9keSAmJlxuXHRcdFx0XHRcdHBhcmVudCAhPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcblx0XHRcdFx0XHRwYXJlbnRDb21wdXRlZFN0eWxlLm92ZXJmbG93ICE9ICd2aXNpYmxlJykge1xuXHRcdFx0XHRwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgZWl0aGVyIG9mIHRoZSBhYm92ZSBjb25kaXRpb25hbHMgc2V0IGEgbmV3IHBhcmVudFJlY3QsXG5cdFx0Ly8gY2FsY3VsYXRlIG5ldyBpbnRlcnNlY3Rpb24gZGF0YS5cblx0XHRpZiAocGFyZW50UmVjdCkge1xuXHRcdFx0aW50ZXJzZWN0aW9uUmVjdCA9IGNvbXB1dGVSZWN0SW50ZXJzZWN0aW9uKHBhcmVudFJlY3QsIGludGVyc2VjdGlvblJlY3QpO1xuXG5cdFx0XHRpZiAoIWludGVyc2VjdGlvblJlY3QpIGJyZWFrO1xuXHRcdH1cblx0XHRwYXJlbnQgPSBnZXRQYXJlbnROb2RlKHBhcmVudCk7XG5cdH1cblx0cmV0dXJuIGludGVyc2VjdGlvblJlY3Q7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcm9vdCByZWN0IGFmdGVyIGJlaW5nIGV4cGFuZGVkIGJ5IHRoZSByb290TWFyZ2luIHZhbHVlLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgZXhwYW5kZWQgcm9vdCByZWN0LlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9nZXRSb290UmVjdCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcm9vdFJlY3Q7XG5cdGlmICh0aGlzLnJvb3QpIHtcblx0XHRyb290UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdCh0aGlzLnJvb3QpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFVzZSA8aHRtbD4vPGJvZHk+IGluc3RlYWQgb2Ygd2luZG93IHNpbmNlIHNjcm9sbCBiYXJzIGFmZmVjdCBzaXplLlxuXHRcdHZhciBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRcdHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcblx0XHRyb290UmVjdCA9IHtcblx0XHRcdHg6IDAsXG5cdFx0XHR5OiAwLFxuXHRcdFx0dG9wOiAwLFxuXHRcdFx0bGVmdDogMCxcblx0XHRcdHJpZ2h0OiBodG1sLmNsaWVudFdpZHRoIHx8IGJvZHkuY2xpZW50V2lkdGgsXG5cdFx0XHR3aWR0aDogaHRtbC5jbGllbnRXaWR0aCB8fCBib2R5LmNsaWVudFdpZHRoLFxuXHRcdFx0Ym90dG9tOiBodG1sLmNsaWVudEhlaWdodCB8fCBib2R5LmNsaWVudEhlaWdodCxcblx0XHRcdGhlaWdodDogaHRtbC5jbGllbnRIZWlnaHQgfHwgYm9keS5jbGllbnRIZWlnaHRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB0aGlzLl9leHBhbmRSZWN0QnlSb290TWFyZ2luKHJvb3RSZWN0KTtcbn07XG5cblxuLyoqXG4gKiBBY2NlcHRzIGEgcmVjdCBhbmQgZXhwYW5kcyBpdCBieSB0aGUgcm9vdE1hcmdpbiB2YWx1ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWN0IFRoZSByZWN0IG9iamVjdCB0byBleHBhbmQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBleHBhbmRlZCByZWN0LlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9leHBhbmRSZWN0QnlSb290TWFyZ2luID0gZnVuY3Rpb24ocmVjdCkge1xuXHR2YXIgbWFyZ2lucyA9IHRoaXMuX3Jvb3RNYXJnaW5WYWx1ZXMubWFwKGZ1bmN0aW9uKG1hcmdpbiwgaSkge1xuXHRcdHJldHVybiBtYXJnaW4udW5pdCA9PSAncHgnID8gbWFyZ2luLnZhbHVlIDpcblx0XHRcdFx0bWFyZ2luLnZhbHVlICogKGkgJSAyID8gcmVjdC53aWR0aCA6IHJlY3QuaGVpZ2h0KSAvIDEwMDtcblx0fSk7XG5cdHZhciBuZXdSZWN0ID0ge1xuXHRcdHRvcDogcmVjdC50b3AgLSBtYXJnaW5zWzBdLFxuXHRcdHJpZ2h0OiByZWN0LnJpZ2h0ICsgbWFyZ2luc1sxXSxcblx0XHRib3R0b206IHJlY3QuYm90dG9tICsgbWFyZ2luc1syXSxcblx0XHRsZWZ0OiByZWN0LmxlZnQgLSBtYXJnaW5zWzNdXG5cdH07XG5cdG5ld1JlY3Qud2lkdGggPSBuZXdSZWN0LnJpZ2h0IC0gbmV3UmVjdC5sZWZ0O1xuXHRuZXdSZWN0LmhlaWdodCA9IG5ld1JlY3QuYm90dG9tIC0gbmV3UmVjdC50b3A7XG5cdG5ld1JlY3QueCA9IG5ld1JlY3QubGVmdDtcblx0bmV3UmVjdC55ID0gbmV3UmVjdC50b3A7XG5cblx0cmV0dXJuIG5ld1JlY3Q7XG59O1xuXG5cbi8qKlxuICogQWNjZXB0cyBhbiBvbGQgYW5kIG5ldyBlbnRyeSBhbmQgcmV0dXJucyB0cnVlIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGVcbiAqIHRocmVzaG9sZCB2YWx1ZXMgaGFzIGJlZW4gY3Jvc3NlZC5cbiAqIEBwYXJhbSB7P0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnl9IG9sZEVudHJ5IFRoZSBwcmV2aW91cyBlbnRyeSBmb3IgYVxuICogICAgcGFydGljdWxhciB0YXJnZXQgZWxlbWVudCBvciBudWxsIGlmIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cy5cbiAqIEBwYXJhbSB7SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeX0gbmV3RW50cnkgVGhlIGN1cnJlbnQgZW50cnkgZm9yIGFcbiAqICAgIHBhcnRpY3VsYXIgdGFyZ2V0IGVsZW1lbnQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYSBhbnkgdGhyZXNob2xkIGhhcyBiZWVuIGNyb3NzZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX2hhc0Nyb3NzZWRUaHJlc2hvbGQgPVxuXHRcdGZ1bmN0aW9uKG9sZEVudHJ5LCBuZXdFbnRyeSkge1xuXG5cdC8vIFRvIG1ha2UgY29tcGFyaW5nIGVhc2llciwgYW4gZW50cnkgdGhhdCBoYXMgYSByYXRpbyBvZiAwXG5cdC8vIGJ1dCBkb2VzIG5vdCBhY3R1YWxseSBpbnRlcnNlY3QgaXMgZ2l2ZW4gYSB2YWx1ZSBvZiAtMVxuXHR2YXIgb2xkUmF0aW8gPSBvbGRFbnRyeSAmJiBvbGRFbnRyeS5pc0ludGVyc2VjdGluZyA/XG5cdFx0XHRvbGRFbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyB8fCAwIDogLTE7XG5cdHZhciBuZXdSYXRpbyA9IG5ld0VudHJ5LmlzSW50ZXJzZWN0aW5nID9cblx0XHRcdG5ld0VudHJ5LmludGVyc2VjdGlvblJhdGlvIHx8IDAgOiAtMTtcblxuXHQvLyBJZ25vcmUgdW5jaGFuZ2VkIHJhdGlvc1xuXHRpZiAob2xkUmF0aW8gPT09IG5ld1JhdGlvKSByZXR1cm47XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRocmVzaG9sZHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdGhyZXNob2xkID0gdGhpcy50aHJlc2hvbGRzW2ldO1xuXG5cdFx0Ly8gUmV0dXJuIHRydWUgaWYgYW4gZW50cnkgbWF0Y2hlcyBhIHRocmVzaG9sZCBvciBpZiB0aGUgbmV3IHJhdGlvXG5cdFx0Ly8gYW5kIHRoZSBvbGQgcmF0aW8gYXJlIG9uIHRoZSBvcHBvc2l0ZSBzaWRlcyBvZiBhIHRocmVzaG9sZC5cblx0XHRpZiAodGhyZXNob2xkID09IG9sZFJhdGlvIHx8IHRocmVzaG9sZCA9PSBuZXdSYXRpbyB8fFxuXHRcdFx0XHR0aHJlc2hvbGQgPCBvbGRSYXRpbyAhPT0gdGhyZXNob2xkIDwgbmV3UmF0aW8pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHJvb3QgZWxlbWVudCBpcyBhbiBlbGVtZW50IGFuZCBpcyBpbiB0aGUgRE9NLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcm9vdCBlbGVtZW50IGlzIGFuIGVsZW1lbnQgYW5kIGlzIGluIHRoZSBET00uXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX3Jvb3RJc0luRG9tID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiAhdGhpcy5yb290IHx8IGNvbnRhaW5zRGVlcChkb2N1bWVudCwgdGhpcy5yb290KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB0YXJnZXQgZWxlbWVudCBpcyBhIGNoaWxkIG9mIHJvb3QuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnQgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB0YXJnZXQgZWxlbWVudCBpcyBhIGNoaWxkIG9mIHJvb3QuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX3Jvb3RDb250YWluc1RhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkge1xuXHRyZXR1cm4gY29udGFpbnNEZWVwKHRoaXMucm9vdCB8fCBkb2N1bWVudCwgdGFyZ2V0KTtcbn07XG5cblxuLyoqXG4gKiBBZGRzIHRoZSBpbnN0YW5jZSB0byB0aGUgZ2xvYmFsIEludGVyc2VjdGlvbk9ic2VydmVyIHJlZ2lzdHJ5IGlmIGl0IGlzbid0XG4gKiBhbHJlYWR5IHByZXNlbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX3JlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcblx0aWYgKHJlZ2lzdHJ5LmluZGV4T2YodGhpcykgPCAwKSB7XG5cdFx0cmVnaXN0cnkucHVzaCh0aGlzKTtcblx0fVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGluc3RhbmNlIGZyb20gdGhlIGdsb2JhbCBJbnRlcnNlY3Rpb25PYnNlcnZlciByZWdpc3RyeS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fdW5yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG5cdHZhciBpbmRleCA9IHJlZ2lzdHJ5LmluZGV4T2YodGhpcyk7XG5cdGlmIChpbmRleCAhPSAtMSkgcmVnaXN0cnkuc3BsaWNlKGluZGV4LCAxKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIHBlcmZvcm1hbmNlLm5vdygpIG1ldGhvZCBvciBudWxsIGluIGJyb3dzZXJzXG4gKiB0aGF0IGRvbid0IHN1cHBvcnQgdGhlIEFQSS5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGVsYXBzZWQgdGltZSBzaW5jZSB0aGUgcGFnZSB3YXMgcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiBub3coKSB7XG5cdHJldHVybiB3aW5kb3cucGVyZm9ybWFuY2UgJiYgcGVyZm9ybWFuY2Uubm93ICYmIHBlcmZvcm1hbmNlLm5vdygpO1xufVxuXG5cbi8qKlxuICogVGhyb3R0bGVzIGEgZnVuY3Rpb24gYW5kIGRlbGF5cyBpdHMgZXhlY3V0aW9uLCBzbyBpdCdzIG9ubHkgY2FsbGVkIGF0IG1vc3RcbiAqIG9uY2Ugd2l0aGluIGEgZ2l2ZW4gdGltZSBwZXJpb2QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBUaGUgYW1vdW50IG9mIHRpbWUgdGhhdCBtdXN0IHBhc3MgYmVmb3JlIHRoZVxuICogICAgIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYWdhaW4uXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHRocm90dGxlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIHRpbWVvdXQpIHtcblx0dmFyIHRpbWVyID0gbnVsbDtcblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoIXRpbWVyKSB7XG5cdFx0XHR0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZuKCk7XG5cdFx0XHRcdHRpbWVyID0gbnVsbDtcblx0XHRcdH0sIHRpbWVvdXQpO1xuXHRcdH1cblx0fTtcbn1cblxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgaGFuZGxlciB0byBhIERPTSBub2RlIGVuc3VyaW5nIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJpbGl0eS5cbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgRE9NIG5vZGUgdG8gYWRkIHRoZSBldmVudCBoYW5kbGVyIHRvLlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGV2ZW50IGhhbmRsZXIgdG8gYWRkLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRfdXNlQ2FwdHVyZSBPcHRpb25hbGx5IGFkZHMgdGhlIGV2ZW4gdG8gdGhlIGNhcHR1cmVcbiAqICAgICBwaGFzZS4gTm90ZTogdGhpcyBvbmx5IHdvcmtzIGluIG1vZGVybiBicm93c2Vycy5cbiAqL1xuZnVuY3Rpb24gYWRkRXZlbnQobm9kZSwgZXZlbnQsIGZuLCBvcHRfdXNlQ2FwdHVyZSkge1xuXHRpZiAodHlwZW9mIG5vZGUuYWRkRXZlbnRMaXN0ZW5lciA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0bm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmbiwgb3B0X3VzZUNhcHR1cmUgfHwgZmFsc2UpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBub2RlLmF0dGFjaEV2ZW50ID09ICdmdW5jdGlvbicpIHtcblx0XHRub2RlLmF0dGFjaEV2ZW50KCdvbicgKyBldmVudCwgZm4pO1xuXHR9XG59XG5cblxuLyoqXG4gKiBSZW1vdmVzIGEgcHJldmlvdXNseSBhZGRlZCBldmVudCBoYW5kbGVyIGZyb20gYSBET00gbm9kZS5cbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgRE9NIG5vZGUgdG8gcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVyIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZXZlbnQgaGFuZGxlciB0byByZW1vdmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF91c2VDYXB0dXJlIElmIHRoZSBldmVudCBoYW5kbGVyIHdhcyBhZGRlZCB3aXRoIHRoaXNcbiAqICAgICBmbGFnIHNldCB0byB0cnVlLCBpdCBzaG91bGQgYmUgc2V0IHRvIHRydWUgaGVyZSBpbiBvcmRlciB0byByZW1vdmUgaXQuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50KG5vZGUsIGV2ZW50LCBmbiwgb3B0X3VzZUNhcHR1cmUpIHtcblx0aWYgKHR5cGVvZiBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sIG9wdF91c2VDYXB0dXJlIHx8IGZhbHNlKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2Ygbm9kZS5kZXRhdGNoRXZlbnQgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdG5vZGUuZGV0YXRjaEV2ZW50KCdvbicgKyBldmVudCwgZm4pO1xuXHR9XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28gcmVjdCBvYmplY3RzLlxuICogQHBhcmFtIHtPYmplY3R9IHJlY3QxIFRoZSBmaXJzdCByZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHJlY3QyIFRoZSBzZWNvbmQgcmVjdC5cbiAqIEByZXR1cm4gez9PYmplY3R9IFRoZSBpbnRlcnNlY3Rpb24gcmVjdCBvciB1bmRlZmluZWQgaWYgbm8gaW50ZXJzZWN0aW9uXG4gKiAgICAgaXMgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVSZWN0SW50ZXJzZWN0aW9uKHJlY3QxLCByZWN0Mikge1xuXHR2YXIgdG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuXHR2YXIgYm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuXHR2YXIgbGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuXHR2YXIgcmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuXHR2YXIgd2lkdGggPSByaWdodCAtIGxlZnQ7XG5cdHZhciBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG5cblx0cmV0dXJuICh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwKSAmJiB7XG5cdFx0eDogbGVmdCxcblx0XHR5OiB0b3AsXG5cdFx0dG9wOiB0b3AsXG5cdFx0Ym90dG9tOiBib3R0b20sXG5cdFx0bGVmdDogbGVmdCxcblx0XHRyaWdodDogcmlnaHQsXG5cdFx0d2lkdGg6IHdpZHRoLFxuXHRcdGhlaWdodDogaGVpZ2h0XG5cdH07XG59XG5cblxuLyoqXG4gKiBTaGltcyB0aGUgbmF0aXZlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIElFLlxuICogQHBhcmFtIHtFbGVtZW50fSBlbCBUaGUgZWxlbWVudCB3aG9zZSBib3VuZGluZyByZWN0IHRvIGdldC5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIChwb3NzaWJseSBzaGltbWVkKSByZWN0IG9mIHRoZSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWwpIHtcblx0dmFyIHJlY3Q7XG5cblx0dHJ5IHtcblx0XHRyZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIElnbm9yZSBXaW5kb3dzIDcgSUUxMSBcIlVuc3BlY2lmaWVkIGVycm9yXCJcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL0ludGVyc2VjdGlvbk9ic2VydmVyL3B1bGwvMjA1XG5cdH1cblxuXHRpZiAoIXJlY3QpIHJldHVybiBnZXRFbXB0eVJlY3QoKTtcblxuXHQvLyBPbGRlciBJRVxuXHRpZiAoIShyZWN0LndpZHRoICYmIHJlY3QuaGVpZ2h0ICYmIHJlY3QueCAmJiByZWN0LnkpKSB7XG5cdFx0cmVjdCA9IHtcblx0XHRcdHg6IHJlY3QubGVmdCxcblx0XHRcdHk6IHJlY3QudG9wLFxuXHRcdFx0dG9wOiByZWN0LnRvcCxcblx0XHRcdHJpZ2h0OiByZWN0LnJpZ2h0LFxuXHRcdFx0Ym90dG9tOiByZWN0LmJvdHRvbSxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCxcblx0XHRcdHdpZHRoOiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LFxuXHRcdFx0aGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gcmVjdDtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgYW4gZW1wdHkgcmVjdCBvYmplY3QuIEFuIGVtcHR5IHJlY3QgaXMgcmV0dXJuZWQgd2hlbiBhbiBlbGVtZW50XG4gKiBpcyBub3QgaW4gdGhlIERPTS5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGVtcHR5IHJlY3QuXG4gKi9cbmZ1bmN0aW9uIGdldEVtcHR5UmVjdCgpIHtcblx0cmV0dXJuIHtcblx0XHR4OiAwLFxuXHRcdHk6IDAsXG5cdFx0dG9wOiAwLFxuXHRcdGJvdHRvbTogMCxcblx0XHRsZWZ0OiAwLFxuXHRcdHJpZ2h0OiAwLFxuXHRcdHdpZHRoOiAwLFxuXHRcdGhlaWdodDogMFxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB0byBzZWUgaWYgYSBwYXJlbnQgZWxlbWVudCBjb250YWlucyBhIGNoaWxkIGVsZW1lbnQgKGluY2x1ZGluZyBpbnNpZGVcbiAqIHNoYWRvdyBET00pLlxuICogQHBhcmFtIHtOb2RlfSBwYXJlbnQgVGhlIHBhcmVudCBlbGVtZW50LlxuICogQHBhcmFtIHtOb2RlfSBjaGlsZCBUaGUgY2hpbGQgZWxlbWVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhcmVudCBub2RlIGNvbnRhaW5zIHRoZSBjaGlsZCBub2RlLlxuICovXG5mdW5jdGlvbiBjb250YWluc0RlZXAocGFyZW50LCBjaGlsZCkge1xuXHR2YXIgbm9kZSA9IGNoaWxkO1xuXHR3aGlsZSAobm9kZSkge1xuXHRcdGlmIChub2RlID09IHBhcmVudCkgcmV0dXJuIHRydWU7XG5cblx0XHRub2RlID0gZ2V0UGFyZW50Tm9kZShub2RlKTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgbm9kZSBvZiBhbiBlbGVtZW50IG9yIGl0cyBob3N0IGVsZW1lbnQgaWYgdGhlIHBhcmVudCBub2RlXG4gKiBpcyBhIHNoYWRvdyByb290LlxuICogQHBhcmFtIHtOb2RlfSBub2RlIFRoZSBub2RlIHdob3NlIHBhcmVudCB0byBnZXQuXG4gKiBAcmV0dXJuIHtOb2RlfG51bGx9IFRoZSBwYXJlbnQgbm9kZSBvciBudWxsIGlmIG5vIHBhcmVudCBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuXHR2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXG5cdGlmIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09IDExICYmIHBhcmVudC5ob3N0KSB7XG5cdFx0Ly8gSWYgdGhlIHBhcmVudCBpcyBhIHNoYWRvdyByb290LCByZXR1cm4gdGhlIGhvc3QgZWxlbWVudC5cblx0XHRyZXR1cm4gcGFyZW50Lmhvc3Q7XG5cdH1cblxuXHRpZiAocGFyZW50ICYmIHBhcmVudC5hc3NpZ25lZFNsb3QpIHtcblx0XHQvLyBJZiB0aGUgcGFyZW50IGlzIGRpc3RyaWJ1dGVkIGluIGEgPHNsb3Q+LCByZXR1cm4gdGhlIHBhcmVudCBvZiBhIHNsb3QuXG5cdFx0cmV0dXJuIHBhcmVudC5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTtcblx0fVxuXG5cdHJldHVybiBwYXJlbnQ7XG59XG5cblxuLy8gRXhwb3NlcyB0aGUgY29uc3RydWN0b3JzIGdsb2JhbGx5Llxud2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyID0gSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG53aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSA9IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnk7XG5cbn0od2luZG93LCBkb2N1bWVudCkpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjEnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjEvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCA8PSAxMjEgYW5kIFNhZmFyaSA8PSAxNS40OyBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG4gIFNldDogU2V0LFxuICBhZGQ6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5hZGQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5oYXMpLFxuICByZW1vdmU6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZVsnZGVsZXRlJ10pLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBTZXRQcm90b3R5cGUgPSBTZXRIZWxwZXJzLnByb3RvO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuZm9yRWFjaCk7XG52YXIga2V5cyA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5rZXlzKTtcbnZhciBuZXh0ID0ga2V5cyhuZXcgU2V0KCkpLm5leHQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwgZm4sIGludGVycnVwdGlibGUpIHtcbiAgcmV0dXJuIGludGVycnVwdGlibGUgPyBpdGVyYXRlU2ltcGxlKHsgaXRlcmF0b3I6IGtleXMoc2V0KSwgbmV4dDogbmV4dCB9LCBmbikgOiBmb3JFYWNoKHNldCwgZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKFNldEhlbHBlcnMucHJvdG8sICdzaXplJywgJ2dldCcpIHx8IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIHNldC5zaXplO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgR2V0SXRlcmF0b3JEaXJlY3Qob2JqKWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVycy8jc2VjLWdldGl0ZXJhdG9yZGlyZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICBpdGVyYXRvcjogb2JqLFxuICAgIG5leHQ6IG9iai5uZXh0LFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgaW50U2l6ZSkge1xuICB0aGlzLnNldCA9IHNldDtcbiAgdGhpcy5zaXplID0gbWF4KGludFNpemUsIDApO1xuICB0aGlzLmhhcyA9IGFDYWxsYWJsZShzZXQuaGFzKTtcbiAgdGhpcy5rZXlzID0gYUNhbGxhYmxlKHNldC5rZXlzKTtcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihJTlZBTElEX1NJWkUpO1xuICB2YXIgaW50U2l6ZSA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtU2l6ZSk7XG4gIGlmIChpbnRTaXplIDwgMCkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHJldHVybiBuZXcgU2V0UmVjb3JkKG9iaiwgaW50U2l6ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICBlbHNlIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG52YXIgY3JlYXRlU2V0TGlrZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiB7XG4gICAgc2l6ZTogc2l6ZSxcbiAgICBoYXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgU2V0ID0gZ2V0QnVpbHRJbignU2V0Jyk7XG4gIHRyeSB7XG4gICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoMCkpO1xuICAgIHRyeSB7XG4gICAgICAvLyBsYXRlIHNwZWMgY2hhbmdlLCBlYXJseSBXZWJLaXQgfiBTYWZhcmkgMTcuMCBiZXRhIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHBhc3MgaXRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzL3B1bGwvODhcbiAgICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKC0xKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG5cbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSB7XG4gICAgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGhhcyhPLCBlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJzZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbnZhciBJTkNPUlJFQ1QgPSAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaW50ZXJzZWN0aW9uJykgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgZXMvbm8tc2V0IC0tIHRlc3RpbmdcbiAgcmV0dXJuIFN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsIDIsIDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywgMl0pKSkpICE9PSAnMywyJztcbn0pO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1QgfSwge1xuICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIHJldHVybiBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3Vic2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdWJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXRlcmF0ZShPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghb3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1YnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdWJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdWJzZXRPZicpIH0sIHtcbiAgaXNTdWJzZXRPZjogaXNTdWJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3VwZXJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1cGVyc2V0T2YnKSB9LCB7XG4gIGlzU3VwZXJzZXRPZjogaXNTdXBlcnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gICAgZWxzZSBhZGQocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHN5bW1ldHJpY0RpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3N5bW1ldHJpY0RpZmZlcmVuY2UnKSB9LCB7XG4gIHN5bW1ldHJpY0RpZmZlcmVuY2U6IHN5bW1ldHJpY0RpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgYWRkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuYWRkO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXVuaW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCd1bmlvbicpIH0sIHtcbiAgdW5pb246IHVuaW9uXG59KTtcbiIsICJjb25zdCBpc0lubGluZUhUTUxFbGVtZW50ID0gKG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxFbGVtZW50ID0+IHtcblx0cmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5kaXNwbGF5LmluY2x1ZGVzKCdpbmxpbmUnKTtcbn07XG5cbmNvbnN0IGlzVGV4dE5vZGUgPSAobm9kZTogTm9kZSk6IG5vZGUgaXMgVGV4dCA9PiB7XG5cdHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERTtcbn07XG5cbmNvbnN0IGlzVmlzaWJsZSA9IChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiA9PiB7XG5cdGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cblx0cmV0dXJuIChcblx0XHRzdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiZcblx0XHQhWydoaWRkZW4nLCAnY29sbGFwc2UnXS5pbmNsdWRlcyhzdHlsZS52aXNpYmlsaXR5KSAmJlxuXHRcdE51bWJlci5wYXJzZUZsb2F0KHN0eWxlLm9wYWNpdHkpID4gMFxuXHQpO1xufTtcblxuY29uc3QgZ2V0Tm9kZVRleHQgPSAobm9kZTogSFRNTEVsZW1lbnQgfCBUZXh0KTogc3RyaW5nID0+IHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLXRleHQtY29udGVudFxuXHRyZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbm9kZS5pbm5lclRleHQgOiBub2RlLmRhdGE7XG59O1xuXG4vKipcbiAqIFNwbGl0IGEgc3RyaW5nIGJlZm9yZSBhbiBhcnJheSBvZiBpbmRleGVzLlxuICpcbiAqIEZvciBleGFtcGxlLFxuICogYGBgXG4gKiBzcGxpdEF0SW5kZXhlcygnMTIzNDU2Nzg5JywgWzMsIDUsIDddKTtcbiAqIGBgYFxuICogcmVzdWx0cyBpblxuICogYGBgXG4gKiBbJzEyMycsICc0NScsICc2NycsICc4OSddXG4gKiBgYGBcbiAqXG4gKiBOb3RlIHRoYXQgZW1wdHkgc3RyaW5nIGFyZSBpbmNsdWRlZDpcbiAqIGBgYFxuICogc3BsaXRBdEluZGV4ZXMoJzEyMzQ1Njc4OScsIFswLCA5XSk7XG4gKiBgYGBcbiAqIHJlc3VsdHMgaW5cbiAqIGBgYFxuICogWycnLCAnMTIzNDU2Nzg5JywgJyddXG4gKiBgYGBcbiAqXG4gKiBJbmRleGVzIHRoYXQgYXJlIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYXJlIGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBzdHJpbmcgdG8gc3BsaXRcbiAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ZXMgaW5kZXhlc1xuICogQHJldHVybiB7c3RyaW5nW119IHNwbGl0dGVkIHN0cmluZyBmcmFnbWVudHNcbiAqL1xuY29uc3Qgc3BsaXRBdEluZGV4ZXMgPSAoc3RyOiBzdHJpbmcsIGluZGV4ZXM6IG51bWJlcltdKTogc3RyaW5nW10gPT4ge1xuXHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG5cblx0Y29uc3Qgbm9ybWFsaXplZEluZGV4ZXM6IG51bWJlcltdID0gW1xuXHRcdC8vIFJlbW92ZSBkdXBsaWNhdGlvbnMgYW5kIHNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyXG5cdFx0Li4ubmV3IFNldChcblx0XHRcdGluZGV4ZXNcblx0XHRcdFx0LnNvcnQoKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gYSAtIGI7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5maWx0ZXIoKGk6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRcdHJldHVybiBpID49IDAgJiYgaSA8PSBzdHIubGVuZ3RoO1xuXHRcdFx0XHR9KVxuXHRcdCksXG5cdFx0c3RyLmxlbmd0aCxcblx0XTtcblxuXHRmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbm9ybWFsaXplZEluZGV4ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzbGljZTogc3RyaW5nID0gc3RyLnNsaWNlKG5vcm1hbGl6ZWRJbmRleGVzW2kgLSAxXSwgbm9ybWFsaXplZEluZGV4ZXNbaV0pO1xuXHRcdHJlc3VsdC5wdXNoKHNsaWNlKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQge2lzSW5saW5lSFRNTEVsZW1lbnQsIGlzVGV4dE5vZGUsIGlzVmlzaWJsZSwgZ2V0Tm9kZVRleHQsIHNwbGl0QXRJbmRleGVzfTtcbiIsICJ0eXBlIERvbU11dGF0aW9uRnVuYyA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB2b2lkO1xuXG5jb25zdCBwZW5kaW5nQWN0aW9uczogV2Vha01hcDxFbGVtZW50LCBEb21NdXRhdGlvbkZ1bmNbXT4gPSBuZXcgV2Vha01hcDxFbGVtZW50LCBEb21NdXRhdGlvbkZ1bmNbXT4oKTtcblxuY29uc3Qgb25JbnRlcnNlY3Rpb24gPSAoZW50cmllczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuXHRcdGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVsZW1lbnQ6IEVsZW1lbnQgPSBlbnRyeS50YXJnZXQ7XG5cdFx0b2JzZXJ2ZXIudW5vYnNlcnZlKGVsZW1lbnQpO1xuXG5cdFx0Y29uc3QgY2FsbGJhY2tzOiBEb21NdXRhdGlvbkZ1bmNbXSB8IHVuZGVmaW5lZCA9IHBlbmRpbmdBY3Rpb25zLmdldChlbGVtZW50KTtcblx0XHRpZiAoIWNhbGxiYWNrcykge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdGNvbnN0IGNhbGxiYWNrOiBEb21NdXRhdGlvbkZ1bmMgfCB1bmRlZmluZWQgPSBjYWxsYmFja3Muc2hpZnQoKTsgLy8gRklGT1xuXHRcdFx0aWYgKCFjYWxsYmFjaykge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpO1xuXHRcdH1cblx0fVxufTtcblxuLy8gT3B0aW1pemF0aW9uOiBsYXppbHkgZXhlY3V0ZSBwZW5kaW5nIGFjdGlvbnMgb25jZSBhbiBlbGVtZW50IGlzIHZpc2libGVcbmNvbnN0IG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihvbkludGVyc2VjdGlvbik7XG5cbmNvbnN0IHF1ZXVlRG9tTXV0YXRpb24gPSAoZWxlbWVudDogRWxlbWVudCwgY2FsbGJhY2s6IERvbU11dGF0aW9uRnVuYyk6IHZvaWQgPT4ge1xuXHRpZiAoIXBlbmRpbmdBY3Rpb25zLmhhcyhlbGVtZW50KSkge1xuXHRcdHBlbmRpbmdBY3Rpb25zLnNldChlbGVtZW50LCBbXSk7XG5cdH1cblxuXHRwZW5kaW5nQWN0aW9ucy5nZXQoZWxlbWVudCk/LnB1c2goY2FsbGJhY2spO1xuXHRvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xufTtcblxuZXhwb3J0IHtxdWV1ZURvbU11dGF0aW9ufTtcbiIsICJpbXBvcnQge2dldE5vZGVUZXh0LCBpc0lubGluZUhUTUxFbGVtZW50LCBpc1RleHROb2RlLCBpc1Zpc2libGUsIHNwbGl0QXRJbmRleGVzfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHtxdWV1ZURvbU11dGF0aW9ufSBmcm9tICcuL3F1ZXVlJztcblxuY29uc3QgUkVHRVhfUkFOR0VfQ0hJTkVTRTogc3RyaW5nID0gU3RyaW5nLnJhd2AoPzpbXFx1MkU4MC1cXHUyRTk5XFx1MkU5Qi1cXHUyRUYzXFx1MkYwMC1cXHUyRkQ1XFx1MzAwNVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0JcXHUzNDAwLVxcdTREQkZcXHU0RTAwLVxcdTlGRkZcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDldfFxcdUQ4MUJbXFx1REZFMlxcdURGRTNcXHVERkYwXFx1REZGMV18W1xcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q1xcdUQ4NkYtXFx1RDg3MlxcdUQ4NzQtXFx1RDg3OVxcdUQ4ODAtXFx1RDg4M11bXFx1REMwMC1cXHVERkZGXXxcXHVEODY5W1xcdURDMDAtXFx1REVERlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzhcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEODg0W1xcdURDMDAtXFx1REY0QV0pYDtcbmNvbnN0IFJFR0VYX1JBTkdFX09USEVSX0xFRlQ6IHN0cmluZyA9IFN0cmluZy5yYXdgW0EtWmEtejAtOUB+JSs9fMKxXFwpfSMkwqXigqzCo+KCpF1gO1xuY29uc3QgUkVHRVhfUkFOR0VfT1RIRVJfUklHSFQ6IHN0cmluZyA9IFN0cmluZy5yYXdgW0EtWmEtejAtOUB+JSs9fMKxXFwoeyMkwqXigqzCo+KCpF1gO1xuY29uc3QgUkVHRVhfU1RSX0lOVEVSX1NDUklQVDogc3RyaW5nID0gYCg/Oigke1JFR0VYX1JBTkdFX0NISU5FU0V9KSg/PSR7UkVHRVhfUkFOR0VfT1RIRVJfUklHSFR9KXwoJHtSRUdFWF9SQU5HRV9PVEhFUl9MRUZUfSkoPz0ke1JFR0VYX1JBTkdFX0NISU5FU0V9KSlgO1xuXG5jb25zdCBTUEFDRTogc3RyaW5nID0gJ1xcdTIwMEEnO1xuXG5jb25zdCBXUkFQUEVSX0NMQVNTOiBzdHJpbmcgPSAnZ2FkZ2V0LXRleHRfc3BhY2luZyc7XG5cbmNvbnN0IFNFTEVDVE9SX0FMTE9XRUQ6IHN0cmluZ1tdID0gW1xuXHQnYScsXG5cdCdhYmJyJyxcblx0J2FydGljbGUnLFxuXHQnYXNpZGUnLFxuXHQnYicsXG5cdCdiZGknLFxuXHQnYmlnJyxcblx0J2Jsb2NrcXVvdGUnLFxuXHQnYnV0dG9uJyxcblx0J2NhcHRpb24nLFxuXHQnY2VudGVyJyxcblx0J2NpdGUnLFxuXHQnZGF0YScsXG5cdCdkZCcsXG5cdCdkZWwnLFxuXHQnZGV0YWlscycsXG5cdCdkZm4nLFxuXHQnZGl2Jyxcblx0J2R0Jyxcblx0J2VtJyxcblx0J2ZpZ2NhcHRpb24nLFxuXHQnZm9vdGVyJyxcblx0J2gxJyxcblx0J2gyJyxcblx0J2gzJyxcblx0J2g0Jyxcblx0J2g1Jyxcblx0J2hlYWRlcicsXG5cdCdpJyxcblx0J2lucycsXG5cdCdsYWJlbCcsXG5cdCdsZWdlbmQnLFxuXHQnbGknLFxuXHQnbWFpbicsXG5cdCdtYXJrJyxcblx0J29wdGlvbicsXG5cdCdwJyxcblx0J3EnLFxuXHQncnVieScsXG5cdCdzJyxcblx0J3NlY3Rpb24nLFxuXHQnc21hbGwnLFxuXHQnc3BhbicsXG5cdCdzdHJpa2UnLFxuXHQnc3Ryb25nJyxcblx0J3N1YicsXG5cdCdzdW1tYXJ5Jyxcblx0J3N1cCcsXG5cdCd0ZCcsXG5cdCd0aCcsXG5cdCd0aW1lJyxcblx0J3UnLFxuXTtcbmNvbnN0IFNFTEVDVE9SX0JMT0NLRUQ6IHN0cmluZ1tdID0gW1xuXHQnY29kZScsXG5cdCdrYmQnLFxuXHQncHJlJyxcblx0J3JwJyxcblx0J3J0Jyxcblx0J3NhbXAnLFxuXHQndGV4dGFyZWEnLFxuXHQndmFyJyxcblx0Ly8gRWxlbWVudHMgd2l0aCB0aGlzIGNsYXNzIGFyZSBleGNsdWRlZFxuXHQnLmdhZGdldC1ub3NwYWNlJyxcblx0Ly8gRWRpdGFibGUgZWxlbWVudHNcblx0J1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJyxcblx0Ly8gQUNFIGVkaXRvciBjb250ZW50XG5cdCcuYWNlX2VkaXRvcicsXG5cdC8vIFZpc3VhbCBFZGl0b3IgKGFuZCAyMDE3IFdpa2l0ZXh0IEVkaXRvcikgY29udGVudCAmIGRpZmZcblx0Jy52ZS11aS1zdXJmYWNlJyxcblx0Jy52ZS1pbml0LW13LWRpZmZQYWdlLWRpZmYnLFxuXHQvLyBEaWZmXG5cdCcuZGlmZi1jb250ZXh0Jyxcblx0Jy5kaWZmLWFkZGVkbGluZScsXG5cdCcuZGlmZi1kZWxldGVkbGluZScsXG5cdC8vIERpZmYgKGlubGluZSBtb2RlKVxuXHQnLm13LWRpZmYtaW5saW5lLWFkZGVkJyxcblx0Jy5tdy1kaWZmLWlubGluZS1kZWxldGVkJyxcblx0Jy5tdy1kaWZmLWlubGluZS1tb3ZlZCcsXG5cdCcubXctZGlmZi1pbmxpbmUtY2hhbmdlZCcsXG5cdCcubXctZGlmZi1pbmxpbmUtY29udGV4dCcsXG5dO1xuXG4vLyBGSVhNRTogVXNlIDppcygpIGluIHRoZSBmdXR1cmUgb25jZSBpdCBoYXMgYmV0dGVyIGJyb3dzZXIgY29tcGF0aWJpbGl0eVxuY29uc3QgU0VMRUNUT1I6IHN0cmluZyA9IFNFTEVDVE9SX0FMTE9XRUQubWFwKChhbGxvd2VkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gYCR7YWxsb3dlZH06bm90KCR7U0VMRUNUT1JfQkxPQ0tFRC5mbGF0TWFwKChibG9ja2VkOiBzdHJpbmcpOiBzdHJpbmcgfCBzdHJpbmdbXSA9PiB7XG5cdFx0Ly8gTm90IGluY2x1ZGUgaXRzZWxmIGlmIGl0IGlzIGEgdGFnIHNlbGVjdG9yXG5cdFx0cmV0dXJuIChibG9ja2VkWzBdIGFzIHN0cmluZykubWF0Y2goL1thLXpdL2kpID8gYCR7YmxvY2tlZH0gKmAgOiBbYmxvY2tlZCwgYCR7YmxvY2tlZH0gKmBdO1xuXHR9KS5qb2luKCcsJyl9KWA7XG59KS5qb2luKCcsJyk7XG5cbmNvbnN0IGdldExlYWZFbGVtZW50cyA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSA9PiB7XG5cdGNvbnN0IGNhbmRpZGF0ZXM6IE5vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+ID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU0VMRUNUT1IpO1xuXHRjb25zdCByZXN1bHQ6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuXHRpZiAocGFyZW50Lm1hdGNoZXMoU0VMRUNUT1IpKSB7XG5cdFx0cmVzdWx0LnB1c2gocGFyZW50KTtcblx0fVxuXG5cdGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBjYW5kaWRhdGUuY2hpbGROb2Rlcykge1xuXHRcdFx0aWYgKGlzVGV4dE5vZGUoY2hpbGROb2RlKSkge1xuXHRcdFx0XHRyZXN1bHQucHVzaChjYW5kaWRhdGUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgZ2V0TmV4dFZpc2libGVTaWJsaW5nID0gKG5vZGU6IE5vZGUpOiBIVE1MRWxlbWVudCB8IFRleHQgfCBudWxsID0+IHtcblx0bGV0IGN1cnJlbnROb2RlOiBOb2RlID0gbm9kZTtcblxuXHQvLyBVc2UgbG9vcHMgcmF0aGVyIHRoYW4gcmVjdXJzaW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Vcblx0d2hpbGUgKHRydWUpIHtcblx0XHRjb25zdCBjYW5kaWRhdGU6IENoaWxkTm9kZSB8IG51bGwgPSBjdXJyZW50Tm9kZS5uZXh0U2libGluZztcblxuXHRcdGlmICghY2FuZGlkYXRlKSB7XG5cdFx0XHRjb25zdCBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGN1cnJlbnROb2RlLnBhcmVudEVsZW1lbnQ7XG5cdFx0XHRpZiAoIXBhcmVudCkge1xuXHRcdFx0XHQvLyBQYXJlbnQgaXMgRG9jdW1lbnQsIHNvIG5vIHZpc2libGUgc2libGluZ1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdC8vIEJ1YmJsZSB1cCB0byBpdHMgcGFyZW50IGFuZCBnZXQgaXRzIHNpYmxpbmdcblx0XHRcdGN1cnJlbnROb2RlID0gcGFyZW50O1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKCEoY2FuZGlkYXRlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgY2FuZGlkYXRlIGluc3RhbmNlb2YgVGV4dCkpIHtcblx0XHRcdC8vIENvbW1lbnRzLCBTVkdzLCBldGMuOiBnZXQgaXRzIHNpYmxpbmcgYXMgcmVzdWx0XG5cdFx0XHRjdXJyZW50Tm9kZSA9IGNhbmRpZGF0ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjYW5kaWRhdGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKCFpc1Zpc2libGUoY2FuZGlkYXRlKSkge1xuXHRcdFx0XHQvLyBJbnZpc2libGU6IHJlY3Vyc2l2ZWx5IGdldCB0aGlzIGVsZW1lbnQncyBuZXh0IHNpYmxpbmdcblx0XHRcdFx0Y3VycmVudE5vZGUgPSBjYW5kaWRhdGU7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWlzSW5saW5lSFRNTEVsZW1lbnQoY2FuZGlkYXRlKSkge1xuXHRcdFx0XHQvLyBOZXh0IHNpYmxpbmcgaXMgbm90IGlubGluZSAoYXQgbmV4dCBsaW5lKSwgc28gbm8gc2libGluZ3Ncblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIFRleHQgJiYgIWNhbmRpZGF0ZS5kYXRhLnRyaW0oKSkge1xuXHRcdFx0Ly8gU2tpcCBlbXB0eSBUZXh0IG5vZGVzIChlLmcuIGxpbmUgYnJlYWtzKVxuXHRcdFx0Y3VycmVudE5vZGUgPSBjYW5kaWRhdGU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FuZGlkYXRlO1xuXHR9XG59O1xuXG5jb25zdCBjcmVhdGVTcGFjaW5nV3JhcHBlciA9IChzdHI6IHN0cmluZyk6IFtzdHJpbmcsIEhUTUxTcGFuRWxlbWVudF0gPT4ge1xuXHRjb25zdCBzcGFuOiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtZWRpYXdpa2kvY2xhc3MtZG9jXG5cdHNwYW4uY2xhc3NOYW1lID0gV1JBUFBFUl9DTEFTUztcblx0c3Bhbi50ZXh0Q29udGVudCA9IHN0ci5zbGljZSgtMSk7XG5cblx0cmV0dXJuIFtzdHIuc2xpY2UoMCwgLTEpLCBzcGFuXTtcbn07XG5cbmNvbnN0IGFkanVzdFNwYWNpbmcgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcblx0Ly8gRnJlZXplIE5vZGVMaXN0IGluIGFkdmFuY2Vcblx0Y29uc3QgY2hpbGROb2RlczogQ2hpbGROb2RlW10gPSBbLi4uZWxlbWVudC5jaGlsZE5vZGVzXTtcblx0Y29uc3QgdGV4dFNwYWNpbmdQb3NNYXA6IE1hcDxUZXh0LCBudW1iZXJbXT4gPSBuZXcgTWFwPFRleHQsIG51bWJlcltdPigpO1xuXG5cdGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGROb2Rlcykge1xuXHRcdGlmICghKGNoaWxkIGluc3RhbmNlb2YgVGV4dCkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5leHRTaWJsaW5nOiBIVE1MRWxlbWVudCB8IFRleHQgfCBudWxsID0gZ2V0TmV4dFZpc2libGVTaWJsaW5nKGNoaWxkKTtcblxuXHRcdGxldCB0ZXN0U3RyaW5nOiBzdHJpbmcgPSBnZXROb2RlVGV4dChjaGlsZCk7XG5cdFx0aWYgKG5leHRTaWJsaW5nKSB7XG5cdFx0XHQvLyBBcHBlbmQgZmlyc3QgY2hhcmFjdGVyIHRvIGRldGVjdCBzY3JpcHQgaW50ZXJzZWN0aW9uXG5cdFx0XHR0ZXN0U3RyaW5nICs9IGdldE5vZGVUZXh0KG5leHRTaWJsaW5nKVswXSA/PyAnJztcblx0XHR9XG5cblx0XHRjb25zdCBpbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuXHRcdC8vIEdsb2JhbCByZWdleHBzIGFyZSBzdGF0ZWZ1bCBzbyBkbyBpbml0aWFsaXphdGlvbiBpbiBlYWNoIGxvb3Bcblx0XHRjb25zdCByZWdleFRleHROb2RlRGF0YTogUmVnRXhwID0gbmV3IFJlZ0V4cChSRUdFWF9TVFJfSU5URVJfU0NSSVBULCAnZycpO1xuXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdGNvbnN0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gcmVnZXhUZXh0Tm9kZURhdGEuZXhlYyh0ZXN0U3RyaW5nKTtcblx0XHRcdGlmICghbWF0Y2gpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpbmRleGVzLnB1c2gobWF0Y2guaW5kZXggKyAxKTsgLy8gKzEgdG8gbWF0Y2ggc2NyaXB0IGJvdW5kYXJ5XG5cdFx0fVxuXG5cdFx0aWYgKCFpbmRleGVzLmxlbmd0aCkge1xuXHRcdFx0Ly8gT3B0aW1pemF0aW9uOiBza2lwIGZ1cnRoZXIgc3RlcHNcblx0XHRcdC8vIEFsc28gcHJldmVudCB1bm5lY2Vzc2FyeSBtdXRhdGlvbiwgd2hpY2ggd2lsbCBiZSBkZXRlY3RlZCBieSBNdXRhdGlvbk9ic2VydmVyLFxuXHRcdFx0Ly8gcmVzdWx0aW5nIGluIGluZmluaXRlIGxvb3BzXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR0ZXh0U3BhY2luZ1Bvc01hcC5zZXQoY2hpbGQsIGluZGV4ZXMpO1xuXHR9XG5cblx0Ly8gU2NoZWR1bGUgRE9NIG11dGF0aW9uIHRvIHByZXZlbnQgZm9yY2VkIHJlZmxvd3Ncblx0cXVldWVEb21NdXRhdGlvbihlbGVtZW50LCAoKTogdm9pZCA9PiB7XG5cdFx0Zm9yIChjb25zdCBbbm9kZSwgaW5kZXhlc10gb2YgdGV4dFNwYWNpbmdQb3NNYXApIHtcblx0XHRcdGNvbnN0IHRleHQ6IHN0cmluZyA9IG5vZGUuZGF0YTtcblx0XHRcdGNvbnN0IGZyYWdtZW50czogc3RyaW5nW10gPSBzcGxpdEF0SW5kZXhlcyh0ZXh0LCBpbmRleGVzKTtcblxuXHRcdFx0Y29uc3QgcmVwbGFjZW1lbnQ6IChzdHJpbmcgfCBIVE1MU3BhbkVsZW1lbnQpW10gPSBmcmFnbWVudHNcblx0XHRcdFx0LnNsaWNlKDAsIC0xKVxuXHRcdFx0XHQuZmxhdE1hcCgoZnJhZ21lbnQ6IHN0cmluZyk6IFtzdHJpbmcsIEhUTUxTcGFuRWxlbWVudF0gPT4ge1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVTcGFjaW5nV3JhcHBlcihmcmFnbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0cmVwbGFjZW1lbnQucHVzaChmcmFnbWVudHMuYXQoLTEpIGFzIHN0cmluZyk7XG5cblx0XHRcdC8vIE9wdGltaXphdGlvbjogcHJldmVudCBmb3JjZWQgcmVmbG93c1xuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0bm9kZS5yZXBsYWNlV2l0aCguLi5yZXBsYWNlbWVudCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufTtcblxuY29uc3QgYWRkU3BhY2VUb1N0cmluZyA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdGNvbnN0IHJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKFJFR0VYX1NUUl9JTlRFUl9TQ1JJUFQsICdnJyk7XG5cblx0cmV0dXJuIHN0ci5yZXBsYWNlKHJlZ2V4LCBgJDEkMiR7U1BBQ0V9YCk7XG59O1xuXG5leHBvcnQge2dldExlYWZFbGVtZW50cywgYWRqdXN0U3BhY2luZywgYWRkU3BhY2VUb1N0cmluZywgV1JBUFBFUl9DTEFTU307XG4iLCAiaW1wb3J0ICcuL1RleHRTcGFjaW5nLmxlc3MnO1xuaW1wb3J0IHtXUkFQUEVSX0NMQVNTLCBhZGRTcGFjZVRvU3RyaW5nLCBhZGp1c3RTcGFjaW5nLCBnZXRMZWFmRWxlbWVudHN9IGZyb20gJy4vbW9kdWxlcy9zcGFjaW5nJztcblxuY29uc3QgcnVuID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCA9PiB7XG5cdGNvbnN0IGxlYXZlczogSFRNTEVsZW1lbnRbXSA9IGdldExlYWZFbGVtZW50cyhlbGVtZW50KTtcblx0Zm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuXHRcdGFkanVzdFNwYWNpbmcobGVhZik7XG5cdH1cbn07XG5cbmNvbnN0IG11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkczogTXV0YXRpb25SZWNvcmRbXSk6IHZvaWQgPT4ge1xuXHRmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG5cdFx0aWYgKHJlY29yZC50eXBlICE9PSAnY2hpbGRMaXN0Jykge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWRkZWROb2RlczogTm9kZVtdID0gWy4uLnJlY29yZC5hZGRlZE5vZGVzXTtcblxuXHRcdC8vIEV4Y2x1ZGUgbXV0YXRpb25zIGNhdXNlZCBieSBhZGp1c3RTcGFjaW5nKCkgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wc1xuXHRcdC8vIFR5cGljYWxseSB0aGV5IHdpbGwgY29udGFpbiBub2RlcyB3aXRoIGNsYXNzIFdSQVBQRVJfQ0xBU1Ncblx0XHRpZiAoXG5cdFx0XHRhZGRlZE5vZGVzLnNvbWUoKG5vZGU6IE5vZGUpOiBib29sZWFuID0+IHtcblx0XHRcdFx0cmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBub2RlLmNsYXNzTGlzdC5jb250YWlucyhXUkFQUEVSX0NMQVNTKTtcblx0XHRcdH0pXG5cdFx0KSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgYWRkZWROb2Rlcykge1xuXHRcdFx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRydW4obm9kZSk7XG5cdFx0XHR9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHtwYXJlbnRFbGVtZW50fSA9IG5vZGU7XG5cdFx0XHRcdGlmIChwYXJlbnRFbGVtZW50KSB7XG5cdFx0XHRcdFx0cnVuKHBhcmVudEVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KTtcblxuY29uc3QgbWFpbiA9ICgpOiB2b2lkID0+IHtcblx0ZG9jdW1lbnQudGl0bGUgPSBhZGRTcGFjZVRvU3RyaW5nKGRvY3VtZW50LnRpdGxlKTtcblx0Ly8gV2F0Y2ggZm9yIGFkZGVkIG5vZGVzXG5cdG11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7XG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdH0pO1xuXHRydW4oZG9jdW1lbnQuYm9keSk7XG59O1xuXG4kKG1haW4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUEsS0FBQyxTQUFTQSxZQUFXO0FBQ3JCLFVBQUksRUFBRSwwQkFBeUIsVUFBUSwrQkFBOEIsVUFBUSx1QkFBc0IsT0FBTywwQkFBMEIsWUFDakk7QUFXSCxTQUFDLFNBQVNDLFNBQVFDLFdBQVU7QUFDNUI7QUFFQSxjQUFJLG9CQUFvQiwwQkFBMEJELFdBQ2xELCtCQUErQkEsV0FDL0IsdUJBQXVCQSxRQUFPLDBCQUEwQjtBQUV4RCxjQUFJLG1CQUFtQjtBQUN0QjtBQUFBLFVBQ0Q7QUFPQSxjQUFJLFdBQVcsQ0FBQztBQVNoQixtQkFBUywwQkFBMEIsT0FBTztBQUN6QyxpQkFBSyxPQUFPLE1BQU07QUFDbEIsaUJBQUssU0FBUyxNQUFNO0FBQ3BCLGlCQUFLLGFBQWEsTUFBTTtBQUN4QixpQkFBSyxxQkFBcUIsTUFBTTtBQUNoQyxpQkFBSyxtQkFBbUIsTUFBTSxvQkFBb0IsYUFBYTtBQUMvRCxnQkFBSTtBQUNILG1CQUFLLGlCQUFpQixDQUFDLENBQUMsTUFBTTtBQUFBLFlBQy9CLFNBQVMsS0FBSztBQUFBLFlBRWQ7QUFHQSxnQkFBSSxhQUFhLEtBQUs7QUFDdEIsZ0JBQUksYUFBYSxXQUFXLFFBQVEsV0FBVztBQUMvQyxnQkFBSSxtQkFBbUIsS0FBSztBQUM1QixnQkFBSSxtQkFBbUIsaUJBQWlCLFFBQVEsaUJBQWlCO0FBR2pFLGdCQUFJLFlBQVk7QUFHZixtQkFBSyxvQkFBb0IsUUFBUSxtQkFBbUIsWUFBWSxRQUFRLENBQUMsQ0FBQztBQUFBLFlBQzNFLE9BQU87QUFFTixtQkFBSyxvQkFBb0IsS0FBSyxpQkFBaUIsSUFBSTtBQUFBLFlBQ3BEO0FBQUEsVUFDRDtBQUVBLG9DQUEwQixVQUFVLG9CQUFvQjtB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QjtBQUVBRyxFQUFFTCxJQUFJOyIsCiAgIm5hbWVzIjogWyJ1bmRlZmluZWQiLCAid2luZG93IiwgImRvY3VtZW50IiwgIkludGVyc2VjdGlvbk9ic2VydmVyIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiV2Vha01hcCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJXZWFrTWFwIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJTZXQiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAiU2V0IiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgImlzSW5saW5lSFRNTEVsZW1lbnQiLCAibm9kZSIsICJIVE1MRWxlbWVudCIsICJ3aW5kb3ciLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJkaXNwbGF5IiwgImluY2x1ZGVzIiwgImlzVGV4dE5vZGUiLCAibm9kZVR5cGUiLCAiTm9kZSIsICJURVhUX05PREUiLCAiaXNWaXNpYmxlIiwgImVsZW1lbnQiLCAic3R5bGUiLCAidmlzaWJpbGl0eSIsICJOdW1iZXIiLCAicGFyc2VGbG9hdCIsICJvcGFjaXR5IiwgImdldE5vZGVUZXh0IiwgImlubmVyVGV4dCIsICJkYXRhIiwgInNwbGl0QXRJbmRleGVzIiwgInN0ciIsICJpbmRleGVzIiwgInJlc3VsdCIsICJub3JtYWxpemVkSW5kZXhlcyIsICJTZXQiLCAic29ydCIsICJhIiwgImIiLCAiZmlsdGVyIiwgImkiLCAibGVuZ3RoIiwgInNsaWNlIiwgInB1c2giLCAicGVuZGluZ0FjdGlvbnMiLCAiV2Vha01hcCIsICJvbkludGVyc2VjdGlvbiIsICJlbnRyaWVzIiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfc3RlcCIsICJzIiwgIm4iLCAiZG9uZSIsICJlbnRyeSIsICJ2YWx1ZSIsICJpc0ludGVyc2VjdGluZyIsICJ0YXJnZXQiLCAib2JzZXJ2ZXIiLCAidW5vYnNlcnZlIiwgImNhbGxiYWNrcyIsICJnZXQiLCAiY2FsbGJhY2siLCAic2hpZnQiLCAiZXJyIiwgImUiLCAiZiIsICJJbnRlcnNlY3Rpb25PYnNlcnZlciIsICJxdWV1ZURvbU11dGF0aW9uIiwgIl9wZW5kaW5nQWN0aW9ucyRnZXQiLCAiaGFzIiwgInNldCIsICJvYnNlcnZlIiwgIlJFR0VYX1JBTkdFX0NISU5FU0UiLCAiU3RyaW5nIiwgInJhdyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJSRUdFWF9SQU5HRV9PVEhFUl9MRUZUIiwgIl90ZW1wbGF0ZU9iamVjdDIiLCAiUkVHRVhfUkFOR0VfT1RIRVJfUklHSFQiLCAiX3RlbXBsYXRlT2JqZWN0MyIsICJSRUdFWF9TVFJfSU5URVJfU0NSSVBUIiwgImNvbmNhdCIsICJTUEFDRSIsICJXUkFQUEVSX0NMQVNTIiwgIlNFTEVDVE9SX0FMTE9XRUQiLCAiU0VMRUNUT1JfQkxPQ0tFRCIsICJTRUxFQ1RPUiIsICJtYXAiLCAiYWxsb3dlZCIsICJmbGF0TWFwIiwgImJsb2NrZWQiLCAibWF0Y2giLCAiam9pbiIsICJnZXRMZWFmRWxlbWVudHMiLCAicGFyZW50IiwgImNhbmRpZGF0ZXMiLCAicXVlcnlTZWxlY3RvckFsbCIsICJtYXRjaGVzIiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgImNhbmRpZGF0ZSIsICJfaXRlcmF0b3IzIiwgImNoaWxkTm9kZXMiLCAiX3N0ZXAzIiwgImNoaWxkTm9kZSIsICJnZXROZXh0VmlzaWJsZVNpYmxpbmciLCAiY3VycmVudE5vZGUiLCAibmV4dFNpYmxpbmciLCAicGFyZW50RWxlbWVudCIsICJUZXh0IiwgInRyaW0iLCAiY3JlYXRlU3BhY2luZ1dyYXBwZXIiLCAic3BhbiIsICJkb2N1bWVudCIsICJjcmVhdGVFbGVtZW50IiwgImNsYXNzTmFtZSIsICJ0ZXh0Q29udGVudCIsICJhZGp1c3RTcGFjaW5nIiwgInRleHRTcGFjaW5nUG9zTWFwIiwgIk1hcCIsICJfaSIsICJfY2hpbGROb2RlcyIsICJjaGlsZCIsICJ0ZXN0U3RyaW5nIiwgIl9nZXROb2RlVGV4dCQiLCAicmVnZXhUZXh0Tm9kZURhdGEiLCAiUmVnRXhwIiwgImV4ZWMiLCAiaW5kZXgiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAidGV4dCIsICJmcmFnbWVudHMiLCAicmVwbGFjZW1lbnQiLCAiZnJhZ21lbnQiLCAiYXQiLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInJlcGxhY2VXaXRoIiwgImFkZFNwYWNlVG9TdHJpbmciLCAicmVnZXgiLCAicmVwbGFjZSIsICJydW4iLCAibGVhdmVzIiwgIl9pdGVyYXRvcjUiLCAiX3N0ZXA1IiwgImxlYWYiLCAibXV0YXRpb25PYnNlcnZlciIsICJNdXRhdGlvbk9ic2VydmVyIiwgInJlY29yZHMiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYiLCAicmVjb3JkIiwgInR5cGUiLCAiYWRkZWROb2RlcyIsICJzb21lIiwgImNsYXNzTGlzdCIsICJjb250YWlucyIsICJfaTIiLCAiX2FkZGVkTm9kZXMiLCAibWFpbiIsICJ0aXRsZSIsICJib2R5IiwgInN1YnRyZWUiLCAiY2hpbGRMaXN0IiwgIiQiXQp9Cg== diff --git a/dist/Tippy/Tippy.js b/dist/Tippy/Tippy.js index 469d5a26..e0541cf1 100644 --- a/dist/Tippy/Tippy.js +++ b/dist/Tippy/Tippy.js @@ -26,9 +26,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports2, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -42,9 +42,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports2, module2) { "use strict"; module2.exports = function(exec) { try { @@ -56,9 +56,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -69,9 +69,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -82,9 +82,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -94,9 +94,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -108,9 +108,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -123,9 +123,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -139,9 +139,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -152,9 +152,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -169,9 +169,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -179,9 +179,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -192,9 +192,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -204,9 +204,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports2, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -217,9 +217,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -228,9 +228,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -243,18 +243,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator2 = globalThis2.navigator; @@ -263,9 +263,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -290,9 +290,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -306,18 +306,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -333,9 +333,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -348,9 +348,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -362,9 +362,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports2, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -375,9 +375,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -393,17 +393,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports2, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -418,9 +418,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports2, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -428,18 +428,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports2, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -448,9 +448,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports2, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -460,9 +460,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -473,9 +473,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -487,9 +487,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -509,9 +509,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -537,9 +537,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -550,9 +550,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -564,9 +564,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -581,9 +581,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -606,9 +606,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -622,9 +622,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports2, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -636,9 +636,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -682,9 +682,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -698,9 +698,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -718,9 +718,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -735,9 +735,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -746,9 +746,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports2, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -759,17 +759,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports2, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -842,9 +842,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -897,9 +897,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -932,9 +932,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports2, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -945,9 +945,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -957,9 +957,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max2 = Math.max; @@ -971,9 +971,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports2, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min2 = Math.min; @@ -984,9 +984,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -995,9 +995,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports2, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1030,9 +1030,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1054,9 +1054,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) { "use strict"; module2.exports = [ "constructor", @@ -1070,9 +1070,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1083,17 +1083,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) { "use strict"; exports2.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1109,9 +1109,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1131,9 +1131,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports2, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1152,9 +1152,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1195,9 +1195,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports2, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1206,9 +1206,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1233,9 +1233,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports2, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1246,9 +1246,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $ = require_export(); var toObject = require_to_object(); @@ -1285,9 +1285,9 @@ var require_es_array_push = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js var require_set_helpers = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var SetPrototype = Set.prototype; @@ -1302,9 +1302,9 @@ var require_set_helpers = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js var require_a_set = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js"(exports2, module2) { "use strict"; var has = require_set_helpers().has; module2.exports = function(it) { @@ -1314,9 +1314,9 @@ var require_a_set = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js var require_iterate_simple = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js"(exports2, module2) { "use strict"; var call = require_function_call(); module2.exports = function(record, fn2, ITERATOR_INSTEAD_OF_RECORD) { @@ -1331,9 +1331,9 @@ var require_iterate_simple = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js var require_set_iterate = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var iterateSimple = require_iterate_simple(); @@ -1349,9 +1349,9 @@ var require_set_iterate = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js var require_set_clone = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js"(exports2, module2) { "use strict"; var SetHelpers = require_set_helpers(); var iterate = require_set_iterate(); @@ -1367,9 +1367,9 @@ var require_set_clone = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js var require_function_uncurry_this_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var aCallable = require_a_callable(); @@ -1382,9 +1382,9 @@ var require_function_uncurry_this_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js var require_set_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js"(exports2, module2) { "use strict"; var uncurryThisAccessor = require_function_uncurry_this_accessor(); var SetHelpers = require_set_helpers(); @@ -1394,9 +1394,9 @@ var require_set_size = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js var require_get_iterator_direct = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js"(exports2, module2) { "use strict"; module2.exports = function(obj) { return { @@ -1408,9 +1408,9 @@ var require_get_iterator_direct = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js var require_get_set_record = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js"(exports2, module2) { "use strict"; var aCallable = require_a_callable(); var anObject = require_an_object(); @@ -1446,9 +1446,9 @@ var require_get_set_record = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js var require_set_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1474,9 +1474,9 @@ var require_set_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js var require_set_method_accept_set_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var createSetLike = function(size) { @@ -1511,9 +1511,9 @@ var require_set_method_accept_set_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js var require_es_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js"() { "use strict"; var $ = require_export(); var difference = require_set_difference(); @@ -1524,17 +1524,9 @@ var require_es_set_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js -var require_esnext_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js"() { - "use strict"; - require_es_set_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js var require_set_intersection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1563,9 +1555,9 @@ var require_set_intersection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js var require_es_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js"() { "use strict"; var $ = require_export(); var fails = require_fails(); @@ -1580,17 +1572,9 @@ var require_es_set_intersection_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js -var require_esnext_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js"() { - "use strict"; - require_es_set_intersection_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js var require_iterator_close = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js"(exports2, module2) { "use strict"; var call = require_function_call(); var anObject = require_an_object(); @@ -1617,9 +1601,9 @@ var require_iterator_close = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js var require_set_is_disjoint_from = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1642,9 +1626,9 @@ var require_set_is_disjoint_from = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js var require_es_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { "use strict"; var $ = require_export(); var isDisjointFrom = require_set_is_disjoint_from(); @@ -1655,17 +1639,9 @@ var require_es_set_is_disjoint_from_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js -var require_esnext_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"() { - "use strict"; - require_es_set_is_disjoint_from_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js var require_set_is_subset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var size = require_set_size(); @@ -1682,9 +1658,9 @@ var require_set_is_subset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js var require_es_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { "use strict"; var $ = require_export(); var isSubsetOf = require_set_is_subset_of(); @@ -1695,17 +1671,9 @@ var require_es_set_is_subset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js -var require_esnext_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"() { - "use strict"; - require_es_set_is_subset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js var require_set_is_superset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1725,9 +1693,9 @@ var require_set_is_superset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js var require_es_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { "use strict"; var $ = require_export(); var isSupersetOf = require_set_is_superset_of(); @@ -1738,17 +1706,9 @@ var require_es_set_is_superset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js -var require_esnext_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"() { - "use strict"; - require_es_set_is_superset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js var require_set_symmetric_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1771,9 +1731,9 @@ var require_set_symmetric_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js var require_es_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { "use strict"; var $ = require_export(); var symmetricDifference = require_set_symmetric_difference(); @@ -1784,17 +1744,9 @@ var require_es_set_symmetric_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js -var require_esnext_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"() { - "use strict"; - require_es_set_symmetric_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js var require_set_union = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var add = require_set_helpers().add; @@ -1813,9 +1765,9 @@ var require_set_union = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js var require_es_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js"() { "use strict"; var $ = require_export(); var union = require_set_union(); @@ -1826,23 +1778,15 @@ var require_es_set_union_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js -var require_esnext_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js"() { - "use strict"; - require_es_set_union_v2(); - } -}); - // dist/Tippy/Tippy.js require_es_array_push(); -require_esnext_set_difference_v2(); -require_esnext_set_intersection_v2(); -require_esnext_set_is_disjoint_from_v2(); -require_esnext_set_is_subset_of_v2(); -require_esnext_set_is_superset_of_v2(); -require_esnext_set_symmetric_difference_v2(); -require_esnext_set_union_v2(); +require_es_set_difference_v2(); +require_es_set_intersection_v2(); +require_es_set_is_disjoint_from_v2(); +require_es_set_is_subset_of_v2(); +require_es_set_is_superset_of_v2(); +require_es_set_symmetric_difference_v2(); +require_es_set_union_v2(); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { @@ -4481,4 +4425,4 @@ var tippy_esm_default = tippy; /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanMiLCAic3JjL1RpcHB5L1RpcHB5LnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9lbnVtcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy91c2VyQWdlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzVGFibGVFbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0UGFyZW50Tm9kZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy93aXRoaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9leHBhbmRUb0hhc2hNYXAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcnJvdy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZU9mZnNldHMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2ZsaXAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvb2Zmc2V0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvc3JjL2NvbnN0YW50cy50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy91dGlscy50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9kb20tdXRpbHMudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvYmluZEdsb2JhbEV2ZW50TGlzdGVuZXJzLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvc3JjL2Jyb3dzZXIudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvdmFsaWRhdGlvbi50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9wcm9wcy50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy90ZW1wbGF0ZS50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9jcmVhdGVUaXBweS50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9pbmRleC50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9hZGRvbnMvY3JlYXRlU2luZ2xldG9uLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvc3JjL2FkZG9ucy9kZWxlZ2F0ZS50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9wbHVnaW5zL2FuaW1hdGVGaWxsLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvc3JjL3BsdWdpbnMvZm9sbG93Q3Vyc29yLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvc3JjL3BsdWdpbnMvaW5saW5lUG9zaXRpb25pbmcudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvcGx1Z2lucy9zdGlja3kudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9idWlsZC9iYXNlLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxudmFyIFNldFByb3RvdHlwZSA9IFNldC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbiAgU2V0OiBTZXQsXG4gIGFkZDogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmFkZCksXG4gIGhhczogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmhhcyksXG4gIHJlbW92ZTogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlWydkZWxldGUnXSksXG4gIHByb3RvOiBTZXRQcm90b3R5cGVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcblxuLy8gUGVyZm9ybSA/IFJlcXVpcmVJbnRlcm5hbFNsb3QoTSwgW1tTZXREYXRhXV0pXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBoYXMoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVjb3JkLCBmbiwgSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQpIHtcbiAgdmFyIGl0ZXJhdG9yID0gSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQgPyByZWNvcmQgOiByZWNvcmQuaXRlcmF0b3I7XG4gIHZhciBuZXh0ID0gcmVjb3JkLm5leHQ7XG4gIHZhciBzdGVwLCByZXN1bHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGZuKHN0ZXAudmFsdWUpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIFNldFByb3RvdHlwZSA9IFNldEhlbHBlcnMucHJvdG87XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBrZXlzID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmtleXMpO1xudmFyIG5leHQgPSBrZXlzKG5ldyBTZXQoKSkubmV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoeyBpdGVyYXRvcjoga2V5cyhzZXQpLCBuZXh0OiBuZXh0IH0sIGZuKSA6IGZvckVhY2goc2V0LCBmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzQWNjZXNzb3IoU2V0SGVscGVycy5wcm90bywgJ3NpemUnLCAnZ2V0JykgfHwgZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gc2V0LnNpemU7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBHZXRJdGVyYXRvckRpcmVjdChvYmopYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzLyNzZWMtZ2V0aXRlcmF0b3JkaXJlY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIGl0ZXJhdG9yOiBvYmosXG4gICAgbmV4dDogb2JqLm5leHQsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG52YXIgSU5WQUxJRF9TSVpFID0gJ0ludmFsaWQgc2l6ZSc7XG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBTZXRSZWNvcmQgPSBmdW5jdGlvbiAoc2V0LCBpbnRTaXplKSB7XG4gIHRoaXMuc2V0ID0gc2V0O1xuICB0aGlzLnNpemUgPSBtYXgoaW50U2l6ZSwgMCk7XG4gIHRoaXMuaGFzID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICB0aGlzLmtleXMgPSBhQ2FsbGFibGUoc2V0LmtleXMpO1xufTtcblxuU2V0UmVjb3JkLnByb3RvdHlwZSA9IHtcbiAgZ2V0SXRlcmF0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SXRlcmF0b3JEaXJlY3QoYW5PYmplY3QoY2FsbCh0aGlzLmtleXMsIHRoaXMuc2V0KSkpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGNhbGwodGhpcy5oYXMsIHRoaXMuc2V0LCBpdCk7XG4gIH1cbn07XG5cbi8vIGBHZXRTZXRSZWNvcmRgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNzZWMtZ2V0c2V0cmVjb3JkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgYW5PYmplY3Qob2JqKTtcbiAgdmFyIG51bVNpemUgPSArb2JqLnNpemU7XG4gIC8vIE5PVEU6IElmIHNpemUgaXMgdW5kZWZpbmVkLCB0aGVuIG51bVNpemUgd2lsbCBiZSBOYU5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bVNpemUgIT09IG51bVNpemUpIHRocm93IG5ldyAkVHlwZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHZhciBpbnRTaXplID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1TaXplKTtcbiAgaWYgKGludFNpemUgPCAwKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgcmV0dXJuIG5ldyBTZXRSZWNvcmQob2JqLCBpbnRTaXplKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIGVsc2UgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbnZhciBjcmVhdGVTZXRMaWtlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIHtcbiAgICBzaXplOiBzaXplLFxuICAgIGhhczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcbiAgdHJ5IHtcbiAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgwKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGxhdGUgc3BlYyBjaGFuZ2UsIGVhcmx5IFdlYktpdCB+IFNhZmFyaSAxNy4wIGJldGEgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcGFzcyBpdFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHMvcHVsbC84OFxuICAgICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoLTEpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdkaWZmZXJlbmNlJykgfSwge1xuICBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGlzam9pbnRGcm9tKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0Rpc2pvaW50RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNEaXNqb2ludEZyb20nKSB9LCB7XG4gIGlzRGlzam9pbnRGcm9tOiBpc0Rpc2pvaW50RnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmlzLWRpc2pvaW50LWZyb20udjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3Vic2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhdGUoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3VwZXJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDwgb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIWhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdXBlcnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3VwZXJzZXRPZicpIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBpc1N1cGVyc2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN5bW1ldHJpY0RpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgICBlbHNlIGFkZChyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc3ltbWV0cmljRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnc3ltbWV0cmljRGlmZmVyZW5jZScpIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogc3ltbWV0cmljRGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdW5pb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3VuaW9uJykgfSwge1xuICB1bmlvbjogdW5pb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC51bmlvbi52MicpO1xuIiwgImltcG9ydCAndGlwcHkuanMvZGlzdC90aXBweS5jc3MnO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgdGlwcHl9IGZyb20gJ3RpcHB5LmpzJztcbiIsICJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsICJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwgImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVBU3RyaW5nKCkge1xuICB2YXIgdWFEYXRhID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7XG5cbiAgaWYgKHVhRGF0YSAhPSBudWxsICYmIHVhRGF0YS5icmFuZHMgJiYgQXJyYXkuaXNBcnJheSh1YURhdGEuYnJhbmRzKSkge1xuICAgIHJldHVybiB1YURhdGEuYnJhbmRzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uYnJhbmQgKyBcIi9cIiArIGl0ZW0udmVyc2lvbjtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbn0iLCAiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCAiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn0gLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuXG5cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIHZhciBpc0ZpcmVmb3ggPSAvZmlyZWZveC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG4gIHZhciBpc0lFID0gL1RyaWRlbnQvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuXG4gIGlmIChpc0lFICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAvLyBJbiBJRSA5LCAxMCBhbmQgMTEgZml4ZWQgZWxlbWVudHMgY29udGFpbmluZyBibG9jayBpcyBhbHdheXMgZXN0YWJsaXNoZWQgYnkgdGhlIHZpZXdwb3J0XG4gICAgdmFyIGVsZW1lbnRDc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnRDc3MucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgaWYgKGlzU2hhZG93Um9vdChjdXJyZW50Tm9kZSkpIHtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmhvc3Q7XG4gIH1cblxuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwKSB7XG4gICAgdmFyIGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpOyAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG5cbiAgICBpZiAoY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IGNzcy5jb250YWluID09PSAncGFpbnQnIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8IGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicgfHwgaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCAiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59IiwgImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4uL2RvbS11dGlscy9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4gfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddXG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHBhc3NpdmUgPSB7XG4gIHBhc3NpdmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBpbnN0YW5jZSA9IF9yZWYuaW5zdGFuY2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwsXG4gICAgICBzY3JvbGwgPSBfb3B0aW9ucyRzY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRzY3JvbGwsXG4gICAgICBfb3B0aW9ucyRyZXNpemUgPSBvcHRpb25zLnJlc2l6ZSxcbiAgICAgIHJlc2l6ZSA9IF9vcHRpb25zJHJlc2l6ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJlc2l6ZTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICB2YXIgc2Nyb2xsUGFyZW50cyA9IFtdLmNvbmNhdChzdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSwgc3RhdGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgc2Nyb2xsUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVzaXplKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGZ1bmN0aW9uIGZuKCkge30sXG4gIGVmZmVjdDogZWZmZWN0LFxuICBkYXRhOiB7fVxufTsiLCAidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgd2luU2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpO1xuICB2YXIgYm9keSA9IChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keTtcbiAgdmFyIHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKTtcbiAgdmFyIGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudEhlaWdodCA6IDApO1xuICB2YXIgeCA9IC13aW5TY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIHZhciB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCAiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCAiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCAiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIOKAkyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyIsICJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsICJpbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5cbmZ1bmN0aW9uIHBvcHBlck9mZnNldHMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgLy8gT2Zmc2V0cyBhcmUgdGhlIGFjdHVhbCBwb3NpdGlvbiB0aGUgcG9wcGVyIG5lZWRzIHRvIGhhdmUgdG8gYmVcbiAgLy8gcHJvcGVybHkgcG9zaXRpb25lZCBuZWFyIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIHBsYWNlbWVudCwgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgYnlcbiAgLy8gdGhlIG1vZGlmaWVycyBpbiB0aGUgbmV4dCBzdGVwXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiBzdGF0ZS5yZWN0cy5yZWZlcmVuY2UsXG4gICAgZWxlbWVudDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncG9wcGVyT2Zmc2V0cycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAncmVhZCcsXG4gIGZuOiBwb3BwZXJPZmZzZXRzLFxuICBkYXRhOiB7fVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIOKAkyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUg4oCTIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZi5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCAiZXhwb3J0IGNvbnN0IFJPVU5EX0FSUk9XID1cbiAgJzxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0wIDZzMS43OTYtLjAxMyA0LjY3LTMuNjE1QzUuODUxLjkgNi45My4wMDYgOCAwYzEuMDctLjAwNiAyLjE0OC44ODcgMy4zNDMgMi4zODVDMTQuMjMzIDYuMDA1IDE2IDYgMTYgNkgwelwiPjwvc3ZnPic7XG5cbmV4cG9ydCBjb25zdCBCT1hfQ0xBU1MgPSBgX19OQU1FU1BBQ0VfUFJFRklYX18tYm94YDtcbmV4cG9ydCBjb25zdCBDT05URU5UX0NMQVNTID0gYF9fTkFNRVNQQUNFX1BSRUZJWF9fLWNvbnRlbnRgO1xuZXhwb3J0IGNvbnN0IEJBQ0tEUk9QX0NMQVNTID0gYF9fTkFNRVNQQUNFX1BSRUZJWF9fLWJhY2tkcm9wYDtcbmV4cG9ydCBjb25zdCBBUlJPV19DTEFTUyA9IGBfX05BTUVTUEFDRV9QUkVGSVhfXy1hcnJvd2A7XG5leHBvcnQgY29uc3QgU1ZHX0FSUk9XX0NMQVNTID0gYF9fTkFNRVNQQUNFX1BSRUZJWF9fLXN2Zy1hcnJvd2A7XG5cbmV4cG9ydCBjb25zdCBUT1VDSF9PUFRJT05TID0ge3Bhc3NpdmU6IHRydWUsIGNhcHR1cmU6IHRydWV9O1xuXG5leHBvcnQgY29uc3QgVElQUFlfREVGQVVMVF9BUFBFTkRfVE8gPSAoKSA9PiBkb2N1bWVudC5ib2R5O1xuIiwgImltcG9ydCB7QmFzZVBsYWNlbWVudCwgUGxhY2VtZW50fSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc093blByb3BlcnR5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBrZXk6IHN0cmluZ1xuKTogYm9vbGVhbiB7XG4gIHJldHVybiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlQXRJbmRleE9yUmV0dXJuPFQ+KFxuICB2YWx1ZTogVCB8IFtUIHwgbnVsbCwgVCB8IG51bGxdLFxuICBpbmRleDogbnVtYmVyLFxuICBkZWZhdWx0VmFsdWU6IFQgfCBbVCwgVF1cbik6IFQge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCB2ID0gdmFsdWVbaW5kZXhdO1xuICAgIHJldHVybiB2ID09IG51bGxcbiAgICAgID8gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpXG4gICAgICAgID8gZGVmYXVsdFZhbHVlW2luZGV4XVxuICAgICAgICA6IGRlZmF1bHRWYWx1ZVxuICAgICAgOiB2O1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlKHZhbHVlOiBhbnksIHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBzdHIgPSB7fS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKCdbb2JqZWN0JykgPT09IDAgJiYgc3RyLmluZGV4T2YoYCR7dHlwZX1dYCkgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludm9rZVdpdGhBcmdzT3JSZXR1cm4odmFsdWU6IGFueSwgYXJnczogYW55W10pOiBhbnkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUoLi4uYXJncykgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQ+KFxuICBmbjogKGFyZzogVCkgPT4gdm9pZCxcbiAgbXM6IG51bWJlclxuKTogKGFyZzogVCkgPT4gdm9pZCB7XG4gIC8vIEF2b2lkIHdyYXBwaW5nIGluIGBzZXRUaW1lb3V0YCBpZiBtcyBpcyAwIGFueXdheVxuICBpZiAobXMgPT09IDApIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBsZXQgdGltZW91dDogYW55O1xuXG4gIHJldHVybiAoYXJnKTogdm9pZCA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZuKGFyZyk7XG4gICAgfSwgbXMpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydGllczxUPihvYmo6IFQsIGtleXM6IHN0cmluZ1tdKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNsb25lID0gey4uLm9ian07XG4gIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgZGVsZXRlIChjbG9uZSBhcyBhbnkpW2tleV07XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5U3BhY2VzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVRvQXJyYXk8VD4odmFsdWU6IFQgfCBUW10pOiBUW10ge1xuICByZXR1cm4gKFtdIGFzIFRbXSkuY29uY2F0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2hJZlVuaXF1ZTxUPihhcnI6IFRbXSwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgaWYgKGFyci5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICBhcnIucHVzaCh2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFB4SWZOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gYCR7dmFsdWV9cHhgIDogdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWU8VD4oYXJyOiBUW10pOiBUW10ge1xuICByZXR1cm4gYXJyLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGFyci5pbmRleE9mKGl0ZW0pID09PSBpbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiBwYXJzZUZsb2F0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50OiBQbGFjZW1lbnQpOiBCYXNlUGxhY2VtZW50IHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdIGFzIEJhc2VQbGFjZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUZyb20odmFsdWU6IEFycmF5TGlrZTxhbnk+KTogYW55W10ge1xuICByZXR1cm4gW10uc2xpY2UuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wcyhcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUGFydGlhbDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgaWYgKG9ialtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIChhY2MgYXMgYW55KVtrZXldID0gb2JqW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuIiwgImltcG9ydCB7UmVmZXJlbmNlRWxlbWVudCwgVGFyZ2V0c30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1BvcHBlclRyZWVEYXRhfSBmcm9tICcuL3R5cGVzLWludGVybmFsJztcbmltcG9ydCB7YXJyYXlGcm9tLCBpc1R5cGUsIG5vcm1hbGl6ZVRvQXJyYXksIGdldEJhc2VQbGFjZW1lbnR9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2KCk6IEhUTUxEaXZFbGVtZW50IHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQge1xuICByZXR1cm4gWydFbGVtZW50JywgJ0ZyYWdtZW50J10uc29tZSgodHlwZSkgPT4gaXNUeXBlKHZhbHVlLCB0eXBlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMaXN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgTm9kZUxpc3Qge1xuICByZXR1cm4gaXNUeXBlKHZhbHVlLCAnTm9kZUxpc3QnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW91c2VFdmVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE1vdXNlRXZlbnQge1xuICByZXR1cm4gaXNUeXBlKHZhbHVlLCAnTW91c2VFdmVudCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2VFbGVtZW50KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBSZWZlcmVuY2VFbGVtZW50IHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl90aXBweSAmJiB2YWx1ZS5fdGlwcHkucmVmZXJlbmNlID09PSB2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcnJheU9mRWxlbWVudHModmFsdWU6IFRhcmdldHMpOiBFbGVtZW50W10ge1xuICBpZiAoaXNFbGVtZW50KHZhbHVlKSkge1xuICAgIHJldHVybiBbdmFsdWVdO1xuICB9XG5cbiAgaWYgKGlzTm9kZUxpc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGFycmF5RnJvbSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gYXJyYXlGcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRyYW5zaXRpb25EdXJhdGlvbihcbiAgZWxzOiAoSFRNTERpdkVsZW1lbnQgfCBudWxsKVtdLFxuICB2YWx1ZTogbnVtYmVyXG4pOiB2b2lkIHtcbiAgZWxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBgJHt2YWx1ZX1tc2A7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZpc2liaWxpdHlTdGF0ZShcbiAgZWxzOiAoSFRNTERpdkVsZW1lbnQgfCBudWxsKVtdLFxuICBzdGF0ZTogJ3Zpc2libGUnIHwgJ2hpZGRlbidcbik6IHZvaWQge1xuICBlbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScsIHN0YXRlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudChcbiAgZWxlbWVudE9yRWxlbWVudHM6IEVsZW1lbnQgfCBFbGVtZW50W11cbik6IERvY3VtZW50IHtcbiAgY29uc3QgW2VsZW1lbnRdID0gbm9ybWFsaXplVG9BcnJheShlbGVtZW50T3JFbGVtZW50cyk7XG5cbiAgLy8gRWxlbWVudHMgY3JlYXRlZCB2aWEgYSA8dGVtcGxhdGU+IGhhdmUgYW4gb3duZXJEb2N1bWVudCB3aXRoIG5vIHJlZmVyZW5jZSB0byB0aGUgYm9keVxuICByZXR1cm4gZWxlbWVudD8ub3duZXJEb2N1bWVudD8uYm9keSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IGRvY3VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJzb3JPdXRzaWRlSW50ZXJhY3RpdmVCb3JkZXIoXG4gIHBvcHBlclRyZWVEYXRhOiBQb3BwZXJUcmVlRGF0YVtdLFxuICBldmVudDogTW91c2VFdmVudFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtjbGllbnRYLCBjbGllbnRZfSA9IGV2ZW50O1xuXG4gIHJldHVybiBwb3BwZXJUcmVlRGF0YS5ldmVyeSgoe3BvcHBlclJlY3QsIHBvcHBlclN0YXRlLCBwcm9wc30pID0+IHtcbiAgICBjb25zdCB7aW50ZXJhY3RpdmVCb3JkZXJ9ID0gcHJvcHM7XG4gICAgY29uc3QgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocG9wcGVyU3RhdGUucGxhY2VtZW50KTtcbiAgICBjb25zdCBvZmZzZXREYXRhID0gcG9wcGVyU3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7XG5cbiAgICBpZiAoIW9mZnNldERhdGEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRvcERpc3RhbmNlID0gYmFzZVBsYWNlbWVudCA9PT0gJ2JvdHRvbScgPyBvZmZzZXREYXRhLnRvcCEueSA6IDA7XG4gICAgY29uc3QgYm90dG9tRGlzdGFuY2UgPSBiYXNlUGxhY2VtZW50ID09PSAndG9wJyA/IG9mZnNldERhdGEuYm90dG9tIS55IDogMDtcbiAgICBjb25zdCBsZWZ0RGlzdGFuY2UgPSBiYXNlUGxhY2VtZW50ID09PSAncmlnaHQnID8gb2Zmc2V0RGF0YS5sZWZ0IS54IDogMDtcbiAgICBjb25zdCByaWdodERpc3RhbmNlID0gYmFzZVBsYWNlbWVudCA9PT0gJ2xlZnQnID8gb2Zmc2V0RGF0YS5yaWdodCEueCA6IDA7XG5cbiAgICBjb25zdCBleGNlZWRzVG9wID1cbiAgICAgIHBvcHBlclJlY3QudG9wIC0gY2xpZW50WSArIHRvcERpc3RhbmNlID4gaW50ZXJhY3RpdmVCb3JkZXI7XG4gICAgY29uc3QgZXhjZWVkc0JvdHRvbSA9XG4gICAgICBjbGllbnRZIC0gcG9wcGVyUmVjdC5ib3R0b20gLSBib3R0b21EaXN0YW5jZSA+IGludGVyYWN0aXZlQm9yZGVyO1xuICAgIGNvbnN0IGV4Y2VlZHNMZWZ0ID1cbiAgICAgIHBvcHBlclJlY3QubGVmdCAtIGNsaWVudFggKyBsZWZ0RGlzdGFuY2UgPiBpbnRlcmFjdGl2ZUJvcmRlcjtcbiAgICBjb25zdCBleGNlZWRzUmlnaHQgPVxuICAgICAgY2xpZW50WCAtIHBvcHBlclJlY3QucmlnaHQgLSByaWdodERpc3RhbmNlID4gaW50ZXJhY3RpdmVCb3JkZXI7XG5cbiAgICByZXR1cm4gZXhjZWVkc1RvcCB8fCBleGNlZWRzQm90dG9tIHx8IGV4Y2VlZHNMZWZ0IHx8IGV4Y2VlZHNSaWdodDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUcmFuc2l0aW9uRW5kTGlzdGVuZXIoXG4gIGJveDogSFRNTERpdkVsZW1lbnQsXG4gIGFjdGlvbjogJ2FkZCcgfCAncmVtb3ZlJyxcbiAgbGlzdGVuZXI6IChldmVudDogVHJhbnNpdGlvbkV2ZW50KSA9PiB2b2lkXG4pOiB2b2lkIHtcbiAgY29uc3QgbWV0aG9kID0gYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgIGFzXG4gICAgfCAnYWRkRXZlbnRMaXN0ZW5lcidcbiAgICB8ICdyZW1vdmVFdmVudExpc3RlbmVyJztcblxuICAvLyBzb21lIGJyb3dzZXJzIGFwcGFyZW50bHkgc3VwcG9ydCBgdHJhbnNpdGlvbmAgKHVucHJlZml4ZWQpIGJ1dCBvbmx5IGZpcmVcbiAgLy8gYHdlYmtpdFRyYW5zaXRpb25FbmRgLi4uXG4gIFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJ10uZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBib3hbbWV0aG9kXShldmVudCwgbGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lcik7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXBhcmVkIHRvIHh4eC5jb250YWlucywgdGhpcyBmdW5jdGlvbiB3b3JrcyBmb3IgZG9tIHN0cnVjdHVyZXMgd2l0aCBzaGFkb3dcbiAqIGRvbVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWN0dWFsQ29udGFpbnMocGFyZW50OiBFbGVtZW50LCBjaGlsZDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICBsZXQgdGFyZ2V0ID0gY2hpbGQ7XG4gIHdoaWxlICh0YXJnZXQpIHtcbiAgICBpZiAocGFyZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0YXJnZXQgPSAodGFyZ2V0LmdldFJvb3ROb2RlPy4oKSBhcyBhbnkpPy5ob3N0O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsICJpbXBvcnQge1RPVUNIX09QVElPTlN9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7aXNSZWZlcmVuY2VFbGVtZW50fSBmcm9tICcuL2RvbS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBjdXJyZW50SW5wdXQgPSB7aXNUb3VjaDogZmFsc2V9O1xubGV0IGxhc3RNb3VzZU1vdmVUaW1lID0gMDtcblxuLyoqXG4gKiBXaGVuIGEgYHRvdWNoc3RhcnRgIGV2ZW50IGlzIGZpcmVkLCBpdCdzIGFzc3VtZWQgdGhlIHVzZXIgaXMgdXNpbmcgdG91Y2hcbiAqIGlucHV0LiBXZSdsbCBiaW5kIGEgYG1vdXNlbW92ZWAgZXZlbnQgbGlzdGVuZXIgdG8gbGlzdGVuIGZvciBtb3VzZSBpbnB1dCBpblxuICogdGhlIGZ1dHVyZS4gVGhpcyB3YXksIHRoZSBgaXNUb3VjaGAgcHJvcGVydHkgaXMgZnVsbHkgZHluYW1pYyBhbmQgd2lsbCBoYW5kbGVcbiAqIGh5YnJpZCBkZXZpY2VzIHRoYXQgdXNlIGEgbWl4IG9mIHRvdWNoICsgbW91c2UgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50VG91Y2hTdGFydCgpOiB2b2lkIHtcbiAgaWYgKGN1cnJlbnRJbnB1dC5pc1RvdWNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY3VycmVudElucHV0LmlzVG91Y2ggPSB0cnVlO1xuXG4gIGlmICh3aW5kb3cucGVyZm9ybWFuY2UpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbkRvY3VtZW50TW91c2VNb3ZlKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZW4gdHdvIGBtb3VzZW1vdmVgIGV2ZW50IGFyZSBmaXJlZCBjb25zZWN1dGl2ZWx5IHdpdGhpbiAyMG1zLCBpdCdzIGFzc3VtZWRcbiAqIHRoZSB1c2VyIGlzIHVzaW5nIG1vdXNlIGlucHV0IGFnYWluLiBgbW91c2Vtb3ZlYCBjYW4gZmlyZSBvbiB0b3VjaCBkZXZpY2VzIGFzXG4gKiB3ZWxsLCBidXQgdmVyeSByYXJlbHkgdGhhdCBxdWlja2x5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25Eb2N1bWVudE1vdXNlTW92ZSgpOiB2b2lkIHtcbiAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgaWYgKG5vdyAtIGxhc3RNb3VzZU1vdmVUaW1lIDwgMjApIHtcbiAgICBjdXJyZW50SW5wdXQuaXNUb3VjaCA9IGZhbHNlO1xuXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Eb2N1bWVudE1vdXNlTW92ZSk7XG4gIH1cblxuICBsYXN0TW91c2VNb3ZlVGltZSA9IG5vdztcbn1cblxuLyoqXG4gKiBXaGVuIGFuIGVsZW1lbnQgaXMgaW4gZm9jdXMgYW5kIGhhcyBhIHRpcHB5LCBsZWF2aW5nIHRoZSB0YWIvd2luZG93IGFuZFxuICogcmV0dXJuaW5nIGNhdXNlcyBpdCB0byBzaG93IGFnYWluLiBGb3IgbW91c2UgdXNlcnMgdGhpcyBpcyB1bmV4cGVjdGVkLCBidXRcbiAqIGZvciBrZXlib2FyZCB1c2UgaXQgbWFrZXMgc2Vuc2UuXG4gKiBUT0RPOiBmaW5kIGEgYmV0dGVyIHRlY2huaXF1ZSB0byBzb2x2ZSB0aGlzIHByb2JsZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uV2luZG93Qmx1cigpOiB2b2lkIHtcbiAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIGlmIChpc1JlZmVyZW5jZUVsZW1lbnQoYWN0aXZlRWxlbWVudCkpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGFjdGl2ZUVsZW1lbnQuX3RpcHB5ITtcblxuICAgIGlmIChhY3RpdmVFbGVtZW50LmJsdXIgJiYgIWluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSkge1xuICAgICAgYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmRHbG9iYWxFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uRG9jdW1lbnRUb3VjaFN0YXJ0LCBUT1VDSF9PUFRJT05TKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbldpbmRvd0JsdXIpO1xufVxuIiwgImV4cG9ydCBjb25zdCBpc0Jyb3dzZXIgPVxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgY29uc3QgaXNJRTExID0gaXNCcm93c2VyXG4gID8gLy8gQHRzLWlnbm9yZVxuICAgICEhd2luZG93Lm1zQ3J5cHRvXG4gIDogZmFsc2U7XG4iLCAiaW1wb3J0IHtUYXJnZXRzfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeUxlYWtXYXJuaW5nKG1ldGhvZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHh0ID0gbWV0aG9kID09PSAnZGVzdHJveScgPyAnbiBhbHJlYWR5LScgOiAnICc7XG5cbiAgcmV0dXJuIFtcbiAgICBgJHttZXRob2R9KCkgd2FzIGNhbGxlZCBvbiBhJHt0eHR9ZGVzdHJveWVkIGluc3RhbmNlLiBUaGlzIGlzIGEgbm8tb3AgYnV0YCxcbiAgICAnaW5kaWNhdGVzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrLicsXG4gIF0uam9pbignICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW4odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNwYWNlc0FuZFRhYnMgPSAvWyBcXHRdezIsfS9nO1xuICBjb25zdCBsaW5lU3RhcnRXaXRoU3BhY2VzID0gL15bIFxcdF0qL2dtO1xuXG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKHNwYWNlc0FuZFRhYnMsICcgJylcbiAgICAucmVwbGFjZShsaW5lU3RhcnRXaXRoU3BhY2VzLCAnJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBnZXREZXZNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjbGVhbihgXG4gICVjdGlwcHkuanNcblxuICAlYyR7Y2xlYW4obWVzc2FnZSl9XG5cbiAgJWPwn5G34oCNIFRoaXMgaXMgYSBkZXZlbG9wbWVudC1vbmx5IG1lc3NhZ2UuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBwcm9kdWN0aW9uLlxuICBgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlZE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIGdldERldk1lc3NhZ2UobWVzc2FnZSksXG4gICAgLy8gdGl0bGVcbiAgICAnY29sb3I6ICMwMEM1ODQ7IGZvbnQtc2l6ZTogMS4zZW07IGZvbnQtd2VpZ2h0OiBib2xkOycsXG4gICAgLy8gbWVzc2FnZVxuICAgICdsaW5lLWhlaWdodDogMS41JyxcbiAgICAvLyBmb290ZXJcbiAgICAnY29sb3I6ICNhNmEwOTU7JyxcbiAgXTtcbn1cblxuLy8gQXNzdW1lIHdhcm5pbmdzIGFuZCBlcnJvcnMgbmV2ZXIgaGF2ZSB0aGUgc2FtZSBtZXNzYWdlXG5sZXQgdmlzaXRlZE1lc3NhZ2VzOiBTZXQ8c3RyaW5nPjtcbmlmIChfX0RFVl9fKSB7XG4gIHJlc2V0VmlzaXRlZE1lc3NhZ2VzKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldFZpc2l0ZWRNZXNzYWdlcygpOiB2b2lkIHtcbiAgdmlzaXRlZE1lc3NhZ2VzID0gbmV3IFNldCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2FybldoZW4oY29uZGl0aW9uOiBib29sZWFuLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGNvbmRpdGlvbiAmJiAhdmlzaXRlZE1lc3NhZ2VzLmhhcyhtZXNzYWdlKSkge1xuICAgIHZpc2l0ZWRNZXNzYWdlcy5hZGQobWVzc2FnZSk7XG4gICAgY29uc29sZS53YXJuKC4uLmdldEZvcm1hdHRlZE1lc3NhZ2UobWVzc2FnZSkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvcldoZW4oY29uZGl0aW9uOiBib29sZWFuLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGNvbmRpdGlvbiAmJiAhdmlzaXRlZE1lc3NhZ2VzLmhhcyhtZXNzYWdlKSkge1xuICAgIHZpc2l0ZWRNZXNzYWdlcy5hZGQobWVzc2FnZSk7XG4gICAgY29uc29sZS5lcnJvciguLi5nZXRGb3JtYXR0ZWRNZXNzYWdlKG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUYXJnZXRzKHRhcmdldHM6IFRhcmdldHMpOiB2b2lkIHtcbiAgY29uc3QgZGlkUGFzc0ZhbHN5VmFsdWUgPSAhdGFyZ2V0cztcbiAgY29uc3QgZGlkUGFzc1BsYWluT2JqZWN0ID1cbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0cykgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmXG4gICAgISh0YXJnZXRzIGFzIGFueSkuYWRkRXZlbnRMaXN0ZW5lcjtcblxuICBlcnJvcldoZW4oXG4gICAgZGlkUGFzc0ZhbHN5VmFsdWUsXG4gICAgW1xuICAgICAgJ3RpcHB5KCkgd2FzIHBhc3NlZCcsXG4gICAgICAnYCcgKyBTdHJpbmcodGFyZ2V0cykgKyAnYCcsXG4gICAgICAnYXMgaXRzIHRhcmdldHMgKGZpcnN0KSBhcmd1bWVudC4gVmFsaWQgdHlwZXMgYXJlOiBTdHJpbmcsIEVsZW1lbnQsJyxcbiAgICAgICdFbGVtZW50W10sIG9yIE5vZGVMaXN0LicsXG4gICAgXS5qb2luKCcgJylcbiAgKTtcblxuICBlcnJvcldoZW4oXG4gICAgZGlkUGFzc1BsYWluT2JqZWN0LFxuICAgIFtcbiAgICAgICd0aXBweSgpIHdhcyBwYXNzZWQgYSBwbGFpbiBvYmplY3Qgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBhcyBhbiBhcmd1bWVudCcsXG4gICAgICAnZm9yIHZpcnR1YWwgcG9zaXRpb25pbmcuIFVzZSBwcm9wcy5nZXRSZWZlcmVuY2VDbGllbnRSZWN0IGluc3RlYWQuJyxcbiAgICBdLmpvaW4oJyAnKVxuICApO1xufVxuIiwgImltcG9ydCB7RGVmYXVsdFByb3BzLCBQbHVnaW4sIFByb3BzLCBSZWZlcmVuY2VFbGVtZW50LCBUaXBweX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBoYXNPd25Qcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydGllcyxcbiAgaW52b2tlV2l0aEFyZ3NPclJldHVybixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge3dhcm5XaGVufSBmcm9tICcuL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHtUSVBQWV9ERUZBVUxUX0FQUEVORF9UT30gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBwbHVnaW5Qcm9wcyA9IHtcbiAgYW5pbWF0ZUZpbGw6IGZhbHNlLFxuICBmb2xsb3dDdXJzb3I6IGZhbHNlLFxuICBpbmxpbmVQb3NpdGlvbmluZzogZmFsc2UsXG4gIHN0aWNreTogZmFsc2UsXG59O1xuXG5jb25zdCByZW5kZXJQcm9wcyA9IHtcbiAgYWxsb3dIVE1MOiBmYWxzZSxcbiAgYW5pbWF0aW9uOiAnZmFkZScsXG4gIGFycm93OiB0cnVlLFxuICBjb250ZW50OiAnJyxcbiAgaW5lcnRpYTogZmFsc2UsXG4gIG1heFdpZHRoOiAzNTAsXG4gIHJvbGU6ICd0b29sdGlwJyxcbiAgdGhlbWU6ICcnLFxuICB6SW5kZXg6IDk5OTksXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFByb3BzOiBEZWZhdWx0UHJvcHMgPSB7XG4gIGFwcGVuZFRvOiBUSVBQWV9ERUZBVUxUX0FQUEVORF9UTyxcbiAgYXJpYToge1xuICAgIGNvbnRlbnQ6ICdhdXRvJyxcbiAgICBleHBhbmRlZDogJ2F1dG8nLFxuICB9LFxuICBkZWxheTogMCxcbiAgZHVyYXRpb246IFszMDAsIDI1MF0sXG4gIGdldFJlZmVyZW5jZUNsaWVudFJlY3Q6IG51bGwsXG4gIGhpZGVPbkNsaWNrOiB0cnVlLFxuICBpZ25vcmVBdHRyaWJ1dGVzOiBmYWxzZSxcbiAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICBpbnRlcmFjdGl2ZUJvcmRlcjogMixcbiAgaW50ZXJhY3RpdmVEZWJvdW5jZTogMCxcbiAgbW92ZVRyYW5zaXRpb246ICcnLFxuICBvZmZzZXQ6IFswLCAxMF0sXG4gIG9uQWZ0ZXJVcGRhdGUoKSB7fSxcbiAgb25CZWZvcmVVcGRhdGUoKSB7fSxcbiAgb25DcmVhdGUoKSB7fSxcbiAgb25EZXN0cm95KCkge30sXG4gIG9uSGlkZGVuKCkge30sXG4gIG9uSGlkZSgpIHt9LFxuICBvbk1vdW50KCkge30sXG4gIG9uU2hvdygpIHt9LFxuICBvblNob3duKCkge30sXG4gIG9uVHJpZ2dlcigpIHt9LFxuICBvblVudHJpZ2dlcigpIHt9LFxuICBvbkNsaWNrT3V0c2lkZSgpIHt9LFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICBwbHVnaW5zOiBbXSxcbiAgcG9wcGVyT3B0aW9uczoge30sXG4gIHJlbmRlcjogbnVsbCxcbiAgc2hvd09uQ3JlYXRlOiBmYWxzZSxcbiAgdG91Y2g6IHRydWUsXG4gIHRyaWdnZXI6ICdtb3VzZWVudGVyIGZvY3VzJyxcbiAgdHJpZ2dlclRhcmdldDogbnVsbCxcbiAgLi4ucGx1Z2luUHJvcHMsXG4gIC4uLnJlbmRlclByb3BzLFxufTtcblxuY29uc3QgZGVmYXVsdEtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0UHJvcHMpO1xuXG5leHBvcnQgY29uc3Qgc2V0RGVmYXVsdFByb3BzOiBUaXBweVsnc2V0RGVmYXVsdFByb3BzJ10gPSAocGFydGlhbFByb3BzKSA9PiB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgdmFsaWRhdGVQcm9wcyhwYXJ0aWFsUHJvcHMsIFtdKTtcbiAgfVxuXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJ0aWFsUHJvcHMpIGFzIEFycmF5PGtleW9mIERlZmF1bHRQcm9wcz47XG4gIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgKGRlZmF1bHRQcm9wcyBhcyBhbnkpW2tleV0gPSBwYXJ0aWFsUHJvcHNba2V5XTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5kZWRQYXNzZWRQcm9wcyhcbiAgcGFzc2VkUHJvcHM6IFBhcnRpYWw8UHJvcHM+ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFBhcnRpYWw8UHJvcHM+IHtcbiAgY29uc3QgcGx1Z2lucyA9IHBhc3NlZFByb3BzLnBsdWdpbnMgfHwgW107XG4gIGNvbnN0IHBsdWdpblByb3BzID0gcGx1Z2lucy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KChhY2MsIHBsdWdpbikgPT4ge1xuICAgIGNvbnN0IHtuYW1lLCBkZWZhdWx0VmFsdWV9ID0gcGx1Z2luO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGFjY1tuYW1lXSA9XG4gICAgICAgIHBhc3NlZFByb3BzW25hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHBhc3NlZFByb3BzW25hbWVdXG4gICAgICAgICAgOiAoZGVmYXVsdFByb3BzIGFzIGFueSlbbmFtZV0gPz8gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnBhc3NlZFByb3BzLFxuICAgIC4uLnBsdWdpblByb3BzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YUF0dHJpYnV0ZVByb3BzKFxuICByZWZlcmVuY2U6IFJlZmVyZW5jZUVsZW1lbnQsXG4gIHBsdWdpbnM6IFBsdWdpbltdXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHByb3BLZXlzID0gcGx1Z2luc1xuICAgID8gT2JqZWN0LmtleXMoZ2V0RXh0ZW5kZWRQYXNzZWRQcm9wcyh7Li4uZGVmYXVsdFByb3BzLCBwbHVnaW5zfSkpXG4gICAgOiBkZWZhdWx0S2V5cztcblxuICBjb25zdCBwcm9wcyA9IHByb3BLZXlzLnJlZHVjZShcbiAgICAoYWNjOiBQYXJ0aWFsPFByb3BzPiAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQXNTdHJpbmcgPSAoXG4gICAgICAgIHJlZmVyZW5jZS5nZXRBdHRyaWJ1dGUoYGRhdGEtdGlwcHktJHtrZXl9YCkgfHwgJydcbiAgICAgICkudHJpbSgpO1xuXG4gICAgICBpZiAoIXZhbHVlQXNTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWVBc1N0cmluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWNjW2tleV0gPSBKU09OLnBhcnNlKHZhbHVlQXNTdHJpbmcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZUFzU3RyaW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICB7fVxuICApO1xuXG4gIHJldHVybiBwcm9wcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlUHJvcHMoXG4gIHJlZmVyZW5jZTogUmVmZXJlbmNlRWxlbWVudCxcbiAgcHJvcHM6IFByb3BzXG4pOiBQcm9wcyB7XG4gIGNvbnN0IG91dCA9IHtcbiAgICAuLi5wcm9wcyxcbiAgICBjb250ZW50OiBpbnZva2VXaXRoQXJnc09yUmV0dXJuKHByb3BzLmNvbnRlbnQsIFtyZWZlcmVuY2VdKSxcbiAgICAuLi4ocHJvcHMuaWdub3JlQXR0cmlidXRlc1xuICAgICAgPyB7fVxuICAgICAgOiBnZXREYXRhQXR0cmlidXRlUHJvcHMocmVmZXJlbmNlLCBwcm9wcy5wbHVnaW5zKSksXG4gIH07XG5cbiAgb3V0LmFyaWEgPSB7XG4gICAgLi4uZGVmYXVsdFByb3BzLmFyaWEsXG4gICAgLi4ub3V0LmFyaWEsXG4gIH07XG5cbiAgb3V0LmFyaWEgPSB7XG4gICAgZXhwYW5kZWQ6XG4gICAgICBvdXQuYXJpYS5leHBhbmRlZCA9PT0gJ2F1dG8nID8gcHJvcHMuaW50ZXJhY3RpdmUgOiBvdXQuYXJpYS5leHBhbmRlZCxcbiAgICBjb250ZW50OlxuICAgICAgb3V0LmFyaWEuY29udGVudCA9PT0gJ2F1dG8nXG4gICAgICAgID8gcHJvcHMuaW50ZXJhY3RpdmVcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6ICdkZXNjcmliZWRieSdcbiAgICAgICAgOiBvdXQuYXJpYS5jb250ZW50LFxuICB9O1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKFxuICBwYXJ0aWFsUHJvcHM6IFBhcnRpYWw8UHJvcHM+ID0ge30sXG4gIHBsdWdpbnM6IFBsdWdpbltdID0gW11cbik6IHZvaWQge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFydGlhbFByb3BzKSBhcyBBcnJheTxrZXlvZiBQcm9wcz47XG4gIGtleXMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgIGNvbnN0IG5vblBsdWdpblByb3BzID0gcmVtb3ZlUHJvcGVydGllcyhcbiAgICAgIGRlZmF1bHRQcm9wcyxcbiAgICAgIE9iamVjdC5rZXlzKHBsdWdpblByb3BzKVxuICAgICk7XG5cbiAgICBsZXQgZGlkUGFzc1Vua25vd25Qcm9wID0gIWhhc093blByb3BlcnR5KG5vblBsdWdpblByb3BzLCBwcm9wKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBwcm9wIGV4aXN0cyBpbiBgcGx1Z2luc2BcbiAgICBpZiAoZGlkUGFzc1Vua25vd25Qcm9wKSB7XG4gICAgICBkaWRQYXNzVW5rbm93blByb3AgPVxuICAgICAgICBwbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiBwbHVnaW4ubmFtZSA9PT0gcHJvcCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHdhcm5XaGVuKFxuICAgICAgZGlkUGFzc1Vua25vd25Qcm9wLFxuICAgICAgW1xuICAgICAgICBgXFxgJHtwcm9wfVxcYGAsXG4gICAgICAgIFwiaXMgbm90IGEgdmFsaWQgcHJvcC4gWW91IG1heSBoYXZlIHNwZWxsZWQgaXQgaW5jb3JyZWN0bHksIG9yIGlmIGl0J3NcIixcbiAgICAgICAgJ2EgcGx1Z2luLCBmb3Jnb3QgdG8gcGFzcyBpdCBpbiBhbiBhcnJheSBhcyBwcm9wcy5wbHVnaW5zLicsXG4gICAgICAgICdcXG5cXG4nLFxuICAgICAgICAnQWxsIHByb3BzOiBodHRwczovL2F0b21pa3MuZ2l0aHViLmlvL3RpcHB5anMvdjYvYWxsLXByb3BzL1xcbicsXG4gICAgICAgICdQbHVnaW5zOiBodHRwczovL2F0b21pa3MuZ2l0aHViLmlvL3RpcHB5anMvdjYvcGx1Z2lucy8nLFxuICAgICAgXS5qb2luKCcgJylcbiAgICApO1xuICB9KTtcbn1cbiIsICJpbXBvcnQge1xuICBBUlJPV19DTEFTUyxcbiAgQkFDS0RST1BfQ0xBU1MsXG4gIEJPWF9DTEFTUyxcbiAgQ09OVEVOVF9DTEFTUyxcbiAgU1ZHX0FSUk9XX0NMQVNTLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge2RpdiwgaXNFbGVtZW50fSBmcm9tICcuL2RvbS11dGlscyc7XG5pbXBvcnQge0luc3RhbmNlLCBQb3BwZXJFbGVtZW50LCBQcm9wc30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1BvcHBlckNoaWxkcmVufSBmcm9tICcuL3R5cGVzLWludGVybmFsJztcbmltcG9ydCB7YXJyYXlGcm9tfSBmcm9tICcuL3V0aWxzJztcblxuLy8gRmlyZWZveCBleHRlbnNpb25zIGRvbid0IGFsbG93IC5pbm5lckhUTUwgPSBcIi4uLlwiIHByb3BlcnR5LiBUaGlzIHRyaWNrcyBpdC5cbmNvbnN0IGlubmVySFRNTCA9ICgpOiAnaW5uZXJIVE1MJyA9PiAnaW5uZXJIVE1MJztcblxuZnVuY3Rpb24gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwoZWxlbWVudDogRWxlbWVudCwgaHRtbDogc3RyaW5nKTogdm9pZCB7XG4gIGVsZW1lbnRbaW5uZXJIVE1MKCldID0gaHRtbDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXJyb3dFbGVtZW50KHZhbHVlOiBQcm9wc1snYXJyb3cnXSk6IEhUTUxEaXZFbGVtZW50IHtcbiAgY29uc3QgYXJyb3cgPSBkaXYoKTtcblxuICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICBhcnJvdy5jbGFzc05hbWUgPSBBUlJPV19DTEFTUztcbiAgfSBlbHNlIHtcbiAgICBhcnJvdy5jbGFzc05hbWUgPSBTVkdfQVJST1dfQ0xBU1M7XG5cbiAgICBpZiAoaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAgYXJyb3cuYXBwZW5kQ2hpbGQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTChhcnJvdywgdmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyb3c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb250ZW50KGNvbnRlbnQ6IEhUTUxEaXZFbGVtZW50LCBwcm9wczogUHJvcHMpOiB2b2lkIHtcbiAgaWYgKGlzRWxlbWVudChwcm9wcy5jb250ZW50KSkge1xuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKGNvbnRlbnQsICcnKTtcbiAgICBjb250ZW50LmFwcGVuZENoaWxkKHByb3BzLmNvbnRlbnQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wcy5jb250ZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb3BzLmFsbG93SFRNTCkge1xuICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwoY29udGVudCwgcHJvcHMuY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQudGV4dENvbnRlbnQgPSBwcm9wcy5jb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4ocG9wcGVyOiBQb3BwZXJFbGVtZW50KTogUG9wcGVyQ2hpbGRyZW4ge1xuICBjb25zdCBib3ggPSBwb3BwZXIuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gIGNvbnN0IGJveENoaWxkcmVuID0gYXJyYXlGcm9tKGJveC5jaGlsZHJlbik7XG5cbiAgcmV0dXJuIHtcbiAgICBib3gsXG4gICAgY29udGVudDogYm94Q2hpbGRyZW4uZmluZCgobm9kZSkgPT4gbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ09OVEVOVF9DTEFTUykpLFxuICAgIGFycm93OiBib3hDaGlsZHJlbi5maW5kKFxuICAgICAgKG5vZGUpID0+XG4gICAgICAgIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKEFSUk9XX0NMQVNTKSB8fFxuICAgICAgICBub2RlLmNsYXNzTGlzdC5jb250YWlucyhTVkdfQVJST1dfQ0xBU1MpXG4gICAgKSxcbiAgICBiYWNrZHJvcDogYm94Q2hpbGRyZW4uZmluZCgobm9kZSkgPT5cbiAgICAgIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKEJBQ0tEUk9QX0NMQVNTKVxuICAgICksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoXG4gIGluc3RhbmNlOiBJbnN0YW5jZVxuKToge1xuICBwb3BwZXI6IFBvcHBlckVsZW1lbnQ7XG4gIG9uVXBkYXRlPzogKHByZXZQcm9wczogUHJvcHMsIG5leHRQcm9wczogUHJvcHMpID0+IHZvaWQ7XG59IHtcbiAgY29uc3QgcG9wcGVyID0gZGl2KCk7XG5cbiAgY29uc3QgYm94ID0gZGl2KCk7XG4gIGJveC5jbGFzc05hbWUgPSBCT1hfQ0xBU1M7XG4gIGJveC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnLCAnaGlkZGVuJyk7XG4gIGJveC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG5cbiAgY29uc3QgY29udGVudCA9IGRpdigpO1xuICBjb250ZW50LmNsYXNzTmFtZSA9IENPTlRFTlRfQ0xBU1M7XG4gIGNvbnRlbnQuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXRlJywgJ2hpZGRlbicpO1xuXG4gIHNldENvbnRlbnQoY29udGVudCwgaW5zdGFuY2UucHJvcHMpO1xuXG4gIHBvcHBlci5hcHBlbmRDaGlsZChib3gpO1xuICBib3guYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgb25VcGRhdGUoaW5zdGFuY2UucHJvcHMsIGluc3RhbmNlLnByb3BzKTtcblxuICBmdW5jdGlvbiBvblVwZGF0ZShwcmV2UHJvcHM6IFByb3BzLCBuZXh0UHJvcHM6IFByb3BzKTogdm9pZCB7XG4gICAgY29uc3Qge2JveCwgY29udGVudCwgYXJyb3d9ID0gZ2V0Q2hpbGRyZW4ocG9wcGVyKTtcblxuICAgIGlmIChuZXh0UHJvcHMudGhlbWUpIHtcbiAgICAgIGJveC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnLCBuZXh0UHJvcHMudGhlbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3gucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXRoZW1lJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXh0UHJvcHMuYW5pbWF0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgYm94LnNldEF0dHJpYnV0ZSgnZGF0YS1hbmltYXRpb24nLCBuZXh0UHJvcHMuYW5pbWF0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm94LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1hbmltYXRpb24nKTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFByb3BzLmluZXJ0aWEpIHtcbiAgICAgIGJveC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaW5lcnRpYScsICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm94LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1pbmVydGlhJyk7XG4gICAgfVxuXG4gICAgYm94LnN0eWxlLm1heFdpZHRoID1cbiAgICAgIHR5cGVvZiBuZXh0UHJvcHMubWF4V2lkdGggPT09ICdudW1iZXInXG4gICAgICAgID8gYCR7bmV4dFByb3BzLm1heFdpZHRofXB4YFxuICAgICAgICA6IG5leHRQcm9wcy5tYXhXaWR0aDtcblxuICAgIGlmIChuZXh0UHJvcHMucm9sZSkge1xuICAgICAgYm94LnNldEF0dHJpYnV0ZSgncm9sZScsIG5leHRQcm9wcy5yb2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm94LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByZXZQcm9wcy5jb250ZW50ICE9PSBuZXh0UHJvcHMuY29udGVudCB8fFxuICAgICAgcHJldlByb3BzLmFsbG93SFRNTCAhPT0gbmV4dFByb3BzLmFsbG93SFRNTFxuICAgICkge1xuICAgICAgc2V0Q29udGVudChjb250ZW50LCBpbnN0YW5jZS5wcm9wcyk7XG4gICAgfVxuXG4gICAgaWYgKG5leHRQcm9wcy5hcnJvdykge1xuICAgICAgaWYgKCFhcnJvdykge1xuICAgICAgICBib3guYXBwZW5kQ2hpbGQoY3JlYXRlQXJyb3dFbGVtZW50KG5leHRQcm9wcy5hcnJvdykpO1xuICAgICAgfSBlbHNlIGlmIChwcmV2UHJvcHMuYXJyb3cgIT09IG5leHRQcm9wcy5hcnJvdykge1xuICAgICAgICBib3gucmVtb3ZlQ2hpbGQoYXJyb3cpO1xuICAgICAgICBib3guYXBwZW5kQ2hpbGQoY3JlYXRlQXJyb3dFbGVtZW50KG5leHRQcm9wcy5hcnJvdykpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJyb3cpIHtcbiAgICAgIGJveC5yZW1vdmVDaGlsZChhcnJvdyEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcG9wcGVyLFxuICAgIG9uVXBkYXRlLFxuICB9O1xufVxuXG4vLyBSdW50aW1lIGNoZWNrIHRvIGlkZW50aWZ5IGlmIHRoZSByZW5kZXIgZnVuY3Rpb24gaXMgdGhlIGRlZmF1bHQgb25lOyB0aGlzXG4vLyB3YXkgd2UgY2FuIGFwcGx5IGRlZmF1bHQgQ1NTIHRyYW5zaXRpb25zIGxvZ2ljIGFuZCBpdCBjYW4gYmUgdHJlZS1zaGFrZW4gYXdheVxucmVuZGVyLiQkdGlwcHkgPSB0cnVlO1xuIiwgImltcG9ydCB7Y3JlYXRlUG9wcGVyLCBTdHJpY3RNb2RpZmllcnMsIE1vZGlmaWVyfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5pbXBvcnQge2N1cnJlbnRJbnB1dH0gZnJvbSAnLi9iaW5kR2xvYmFsRXZlbnRMaXN0ZW5lcnMnO1xuaW1wb3J0IHtpc0lFMTF9IGZyb20gJy4vYnJvd3Nlcic7XG5pbXBvcnQge1RJUFBZX0RFRkFVTFRfQVBQRU5EX1RPLCBUT1VDSF9PUFRJT05TfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBhY3R1YWxDb250YWlucyxcbiAgZGl2LFxuICBnZXRPd25lckRvY3VtZW50LFxuICBpc0N1cnNvck91dHNpZGVJbnRlcmFjdGl2ZUJvcmRlcixcbiAgaXNNb3VzZUV2ZW50LFxuICBzZXRUcmFuc2l0aW9uRHVyYXRpb24sXG4gIHNldFZpc2liaWxpdHlTdGF0ZSxcbiAgdXBkYXRlVHJhbnNpdGlvbkVuZExpc3RlbmVyLFxufSBmcm9tICcuL2RvbS11dGlscyc7XG5pbXBvcnQge2RlZmF1bHRQcm9wcywgZXZhbHVhdGVQcm9wcywgZ2V0RXh0ZW5kZWRQYXNzZWRQcm9wc30gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQge2dldENoaWxkcmVufSBmcm9tICcuL3RlbXBsYXRlJztcbmltcG9ydCB7XG4gIENvbnRlbnQsXG4gIEluc3RhbmNlLFxuICBMaWZlY3ljbGVIb29rcyxcbiAgUG9wcGVyRWxlbWVudCxcbiAgUHJvcHMsXG4gIFJlZmVyZW5jZUVsZW1lbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtMaXN0ZW5lck9iamVjdCwgUG9wcGVyVHJlZURhdGEsIFBvcHBlckNoaWxkcmVufSBmcm9tICcuL3R5cGVzLWludGVybmFsJztcbmltcG9ydCB7XG4gIGFycmF5RnJvbSxcbiAgZGVib3VuY2UsXG4gIGdldFZhbHVlQXRJbmRleE9yUmV0dXJuLFxuICBpbnZva2VXaXRoQXJnc09yUmV0dXJuLFxuICBub3JtYWxpemVUb0FycmF5LFxuICBwdXNoSWZVbmlxdWUsXG4gIHNwbGl0QnlTcGFjZXMsXG4gIHVuaXF1ZSxcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcHMsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVNZW1vcnlMZWFrV2FybmluZywgZXJyb3JXaGVuLCB3YXJuV2hlbn0gZnJvbSAnLi92YWxpZGF0aW9uJztcblxubGV0IGlkQ291bnRlciA9IDE7XG5sZXQgbW91c2VNb3ZlTGlzdGVuZXJzOiAoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkKVtdID0gW107XG5cbi8vIFVzZWQgYnkgYGhpZGVBbGwoKWBcbmV4cG9ydCBsZXQgbW91bnRlZEluc3RhbmNlczogSW5zdGFuY2VbXSA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUaXBweShcbiAgcmVmZXJlbmNlOiBSZWZlcmVuY2VFbGVtZW50LFxuICBwYXNzZWRQcm9wczogUGFydGlhbDxQcm9wcz5cbik6IEluc3RhbmNlIHtcbiAgY29uc3QgcHJvcHMgPSBldmFsdWF0ZVByb3BzKHJlZmVyZW5jZSwge1xuICAgIC4uLmRlZmF1bHRQcm9wcyxcbiAgICAuLi5nZXRFeHRlbmRlZFBhc3NlZFByb3BzKHJlbW92ZVVuZGVmaW5lZFByb3BzKHBhc3NlZFByb3BzKSksXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDwn5SSIFByaXZhdGUgbWVtYmVyc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgbGV0IHNob3dUaW1lb3V0OiBhbnk7XG4gIGxldCBoaWRlVGltZW91dDogYW55O1xuICBsZXQgc2NoZWR1bGVIaWRlQW5pbWF0aW9uRnJhbWU6IG51bWJlcjtcbiAgbGV0IGlzVmlzaWJsZUZyb21DbGljayA9IGZhbHNlO1xuICBsZXQgZGlkSGlkZUR1ZVRvRG9jdW1lbnRNb3VzZURvd24gPSBmYWxzZTtcbiAgbGV0IGRpZFRvdWNoTW92ZSA9IGZhbHNlO1xuICBsZXQgaWdub3JlT25GaXJzdFVwZGF0ZSA9IGZhbHNlO1xuICBsZXQgbGFzdFRyaWdnZXJFdmVudDogRXZlbnQgfCB1bmRlZmluZWQ7XG4gIGxldCBjdXJyZW50VHJhbnNpdGlvbkVuZExpc3RlbmVyOiAoZXZlbnQ6IFRyYW5zaXRpb25FdmVudCkgPT4gdm9pZDtcbiAgbGV0IG9uRmlyc3RVcGRhdGU6ICgpID0+IHZvaWQ7XG4gIGxldCBsaXN0ZW5lcnM6IExpc3RlbmVyT2JqZWN0W10gPSBbXTtcbiAgbGV0IGRlYm91bmNlZE9uTW91c2VNb3ZlID0gZGVib3VuY2Uob25Nb3VzZU1vdmUsIHByb3BzLmludGVyYWN0aXZlRGVib3VuY2UpO1xuICBsZXQgY3VycmVudFRhcmdldDogRWxlbWVudDtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8g8J+UkSBQdWJsaWMgbWVtYmVyc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgY29uc3QgaWQgPSBpZENvdW50ZXIrKztcbiAgY29uc3QgcG9wcGVySW5zdGFuY2UgPSBudWxsO1xuICBjb25zdCBwbHVnaW5zID0gdW5pcXVlKHByb3BzLnBsdWdpbnMpO1xuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIC8vIElzIHRoZSBpbnN0YW5jZSBjdXJyZW50bHkgZW5hYmxlZD9cbiAgICBpc0VuYWJsZWQ6IHRydWUsXG4gICAgLy8gSXMgdGhlIHRpcHB5IGN1cnJlbnRseSBzaG93aW5nIGFuZCBub3QgdHJhbnNpdGlvbmluZyBvdXQ/XG4gICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICAvLyBIYXMgdGhlIGluc3RhbmNlIGJlZW4gZGVzdHJveWVkP1xuICAgIGlzRGVzdHJveWVkOiBmYWxzZSxcbiAgICAvLyBJcyB0aGUgdGlwcHkgY3VycmVudGx5IG1vdW50ZWQgdG8gdGhlIERPTT9cbiAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgIC8vIEhhcyB0aGUgdGlwcHkgZmluaXNoZWQgdHJhbnNpdGlvbmluZyBpbj9cbiAgICBpc1Nob3duOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdCBpbnN0YW5jZTogSW5zdGFuY2UgPSB7XG4gICAgLy8gcHJvcGVydGllc1xuICAgIGlkLFxuICAgIHJlZmVyZW5jZSxcbiAgICBwb3BwZXI6IGRpdigpLFxuICAgIHBvcHBlckluc3RhbmNlLFxuICAgIHByb3BzLFxuICAgIHN0YXRlLFxuICAgIHBsdWdpbnMsXG4gICAgLy8gbWV0aG9kc1xuICAgIGNsZWFyRGVsYXlUaW1lb3V0cyxcbiAgICBzZXRQcm9wcyxcbiAgICBzZXRDb250ZW50LFxuICAgIHNob3csXG4gICAgaGlkZSxcbiAgICBoaWRlV2l0aEludGVyYWN0aXZpdHksXG4gICAgZW5hYmxlLFxuICAgIGRpc2FibGUsXG4gICAgdW5tb3VudCxcbiAgICBkZXN0cm95LFxuICB9O1xuXG4gIC8vIFRPRE86IEludmVzdGlnYXRlIHdoeSB0aGlzIGVhcmx5IHJldHVybiBjYXVzZXMgYSBURFogZXJyb3IgaW4gdGhlIHRlc3RzIOKAlFxuICAvLyBpdCBkb2Vzbid0IHNlZW0gdG8gaGFwcGVuIGluIHRoZSBicm93c2VyXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIXByb3BzLnJlbmRlcikge1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBlcnJvcldoZW4odHJ1ZSwgJ3JlbmRlcigpIGZ1bmN0aW9uIGhhcyBub3QgYmVlbiBzdXBwbGllZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSW5pdGlhbCBtdXRhdGlvbnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGNvbnN0IHtwb3BwZXIsIG9uVXBkYXRlfSA9IHByb3BzLnJlbmRlcihpbnN0YW5jZSk7XG5cbiAgcG9wcGVyLnNldEF0dHJpYnV0ZSgnZGF0YS1fX05BTUVTUEFDRV9QUkVGSVhfXy1yb290JywgJycpO1xuICBwb3BwZXIuaWQgPSBgX19OQU1FU1BBQ0VfUFJFRklYX18tJHtpbnN0YW5jZS5pZH1gO1xuXG4gIGluc3RhbmNlLnBvcHBlciA9IHBvcHBlcjtcbiAgcmVmZXJlbmNlLl90aXBweSA9IGluc3RhbmNlO1xuICBwb3BwZXIuX3RpcHB5ID0gaW5zdGFuY2U7XG5cbiAgY29uc3QgcGx1Z2luc0hvb2tzID0gcGx1Z2lucy5tYXAoKHBsdWdpbikgPT4gcGx1Z2luLmZuKGluc3RhbmNlKSk7XG4gIGNvbnN0IGhhc0FyaWFFeHBhbmRlZCA9IHJlZmVyZW5jZS5oYXNBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKTtcblxuICBhZGRMaXN0ZW5lcnMoKTtcbiAgaGFuZGxlQXJpYUV4cGFuZGVkQXR0cmlidXRlKCk7XG4gIGhhbmRsZVN0eWxlcygpO1xuXG4gIGludm9rZUhvb2soJ29uQ3JlYXRlJywgW2luc3RhbmNlXSk7XG5cbiAgaWYgKHByb3BzLnNob3dPbkNyZWF0ZSkge1xuICAgIHNjaGVkdWxlU2hvdygpO1xuICB9XG5cbiAgLy8gUHJldmVudCBhIHRpcHB5IHdpdGggYSBkZWxheSBmcm9tIGhpZGluZyBpZiB0aGUgY3Vyc29yIGxlZnQgdGhlbiByZXR1cm5lZFxuICAvLyBiZWZvcmUgaXQgc3RhcnRlZCBoaWRpbmdcbiAgcG9wcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XG4gICAgaWYgKGluc3RhbmNlLnByb3BzLmludGVyYWN0aXZlICYmIGluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSkge1xuICAgICAgaW5zdGFuY2UuY2xlYXJEZWxheVRpbWVvdXRzKCk7XG4gICAgfVxuICB9KTtcblxuICBwb3BwZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICBpZiAoXG4gICAgICBpbnN0YW5jZS5wcm9wcy5pbnRlcmFjdGl2ZSAmJlxuICAgICAgaW5zdGFuY2UucHJvcHMudHJpZ2dlci5pbmRleE9mKCdtb3VzZWVudGVyJykgPj0gMFxuICAgICkge1xuICAgICAgZ2V0RG9jdW1lbnQoKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBkZWJvdW5jZWRPbk1vdXNlTW92ZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIPCflJIgUHJpdmF0ZSBtZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBnZXROb3JtYWxpemVkVG91Y2hTZXR0aW5ncygpOiBbc3RyaW5nIHwgYm9vbGVhbiwgbnVtYmVyXSB7XG4gICAgY29uc3Qge3RvdWNofSA9IGluc3RhbmNlLnByb3BzO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRvdWNoKSA/IHRvdWNoIDogW3RvdWNoLCAwXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldElzQ3VzdG9tVG91Y2hCZWhhdmlvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZ2V0Tm9ybWFsaXplZFRvdWNoU2V0dGluZ3MoKVswXSA9PT0gJ2hvbGQnO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SXNEZWZhdWx0UmVuZGVyRm4oKTogYm9vbGVhbiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAhIWluc3RhbmNlLnByb3BzLnJlbmRlcj8uJCR0aXBweTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEN1cnJlbnRUYXJnZXQoKTogRWxlbWVudCB7XG4gICAgcmV0dXJuIGN1cnJlbnRUYXJnZXQgfHwgcmVmZXJlbmNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKTogRG9jdW1lbnQge1xuICAgIGNvbnN0IHBhcmVudCA9IGdldEN1cnJlbnRUYXJnZXQoKS5wYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG4gICAgcmV0dXJuIHBhcmVudCA/IGdldE93bmVyRG9jdW1lbnQocGFyZW50KSA6IGRvY3VtZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVmYXVsdFRlbXBsYXRlQ2hpbGRyZW4oKTogUG9wcGVyQ2hpbGRyZW4ge1xuICAgIHJldHVybiBnZXRDaGlsZHJlbihwb3BwZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVsYXkoaXNTaG93OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAvLyBGb3IgdG91Y2ggb3Iga2V5Ym9hcmQgaW5wdXQsIGZvcmNlIGAwYCBkZWxheSBmb3IgVVggcmVhc29uc1xuICAgIC8vIEFsc28gaWYgdGhlIGluc3RhbmNlIGlzIG1vdW50ZWQgYnV0IG5vdCB2aXNpYmxlICh0cmFuc2l0aW9uaW5nIG91dCksXG4gICAgLy8gaWdub3JlIGRlbGF5XG4gICAgaWYgKFxuICAgICAgKGluc3RhbmNlLnN0YXRlLmlzTW91bnRlZCAmJiAhaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlKSB8fFxuICAgICAgY3VycmVudElucHV0LmlzVG91Y2ggfHxcbiAgICAgIChsYXN0VHJpZ2dlckV2ZW50ICYmIGxhc3RUcmlnZ2VyRXZlbnQudHlwZSA9PT0gJ2ZvY3VzJylcbiAgICApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRWYWx1ZUF0SW5kZXhPclJldHVybihcbiAgICAgIGluc3RhbmNlLnByb3BzLmRlbGF5LFxuICAgICAgaXNTaG93ID8gMCA6IDEsXG4gICAgICBkZWZhdWx0UHJvcHMuZGVsYXlcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlU3R5bGVzKGZyb21IaWRlID0gZmFsc2UpOiB2b2lkIHtcbiAgICBwb3BwZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9XG4gICAgICBpbnN0YW5jZS5wcm9wcy5pbnRlcmFjdGl2ZSAmJiAhZnJvbUhpZGUgPyAnJyA6ICdub25lJztcbiAgICBwb3BwZXIuc3R5bGUuekluZGV4ID0gYCR7aW5zdGFuY2UucHJvcHMuekluZGV4fWA7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VIb29rKFxuICAgIGhvb2s6IGtleW9mIExpZmVjeWNsZUhvb2tzLFxuICAgIGFyZ3M6IFtJbnN0YW5jZSwgYW55P10sXG4gICAgc2hvdWxkSW52b2tlUHJvcHNIb29rID0gdHJ1ZVxuICApOiB2b2lkIHtcbiAgICBwbHVnaW5zSG9va3MuZm9yRWFjaCgocGx1Z2luSG9va3MpID0+IHtcbiAgICAgIGlmIChwbHVnaW5Ib29rc1tob29rXSkge1xuICAgICAgICBwbHVnaW5Ib29rc1tob29rXSEoLi4uYXJncyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2hvdWxkSW52b2tlUHJvcHNIb29rKSB7XG4gICAgICBpbnN0YW5jZS5wcm9wc1tob29rXSguLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVBcmlhQ29udGVudEF0dHJpYnV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7YXJpYX0gPSBpbnN0YW5jZS5wcm9wcztcblxuICAgIGlmICghYXJpYS5jb250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXR0ciA9IGBhcmlhLSR7YXJpYS5jb250ZW50fWA7XG4gICAgY29uc3QgaWQgPSBwb3BwZXIuaWQ7XG4gICAgY29uc3Qgbm9kZXMgPSBub3JtYWxpemVUb0FycmF5KGluc3RhbmNlLnByb3BzLnRyaWdnZXJUYXJnZXQgfHwgcmVmZXJlbmNlKTtcblxuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHIpO1xuXG4gICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIGN1cnJlbnRWYWx1ZSA/IGAke2N1cnJlbnRWYWx1ZX0gJHtpZH1gIDogaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS5yZXBsYWNlKGlkLCAnJykudHJpbSgpO1xuXG4gICAgICAgIGlmIChuZXh0VmFsdWUpIHtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCBuZXh0VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVBcmlhRXhwYW5kZWRBdHRyaWJ1dGUoKTogdm9pZCB7XG4gICAgaWYgKGhhc0FyaWFFeHBhbmRlZCB8fCAhaW5zdGFuY2UucHJvcHMuYXJpYS5leHBhbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzID0gbm9ybWFsaXplVG9BcnJheShpbnN0YW5jZS5wcm9wcy50cmlnZ2VyVGFyZ2V0IHx8IHJlZmVyZW5jZSk7XG5cbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBpZiAoaW5zdGFuY2UucHJvcHMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2FyaWEtZXhwYW5kZWQnLFxuICAgICAgICAgIGluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSAmJiBub2RlID09PSBnZXRDdXJyZW50VGFyZ2V0KClcbiAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICA6ICdmYWxzZSdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwSW50ZXJhY3RpdmVNb3VzZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBnZXREb2N1bWVudCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGRlYm91bmNlZE9uTW91c2VNb3ZlKTtcbiAgICBtb3VzZU1vdmVMaXN0ZW5lcnMgPSBtb3VzZU1vdmVMaXN0ZW5lcnMuZmlsdGVyKFxuICAgICAgKGxpc3RlbmVyKSA9PiBsaXN0ZW5lciAhPT0gZGVib3VuY2VkT25Nb3VzZU1vdmVcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Eb2N1bWVudFByZXNzKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIC8vIE1vdmVkIGZpbmdlciB0byBzY3JvbGwgaW5zdGVhZCBvZiBhbiBpbnRlbnRpb25hbCB0YXAgb3V0c2lkZVxuICAgIGlmIChjdXJyZW50SW5wdXQuaXNUb3VjaCkge1xuICAgICAgaWYgKGRpZFRvdWNoTW92ZSB8fCBldmVudC50eXBlID09PSAnbW91c2Vkb3duJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsVGFyZ2V0ID1cbiAgICAgIChldmVudC5jb21wb3NlZFBhdGggJiYgZXZlbnQuY29tcG9zZWRQYXRoKClbMF0pIHx8IGV2ZW50LnRhcmdldDtcblxuICAgIC8vIENsaWNrZWQgb24gaW50ZXJhY3RpdmUgcG9wcGVyXG4gICAgaWYgKFxuICAgICAgaW5zdGFuY2UucHJvcHMuaW50ZXJhY3RpdmUgJiZcbiAgICAgIGFjdHVhbENvbnRhaW5zKHBvcHBlciwgYWN0dWFsVGFyZ2V0IGFzIEVsZW1lbnQpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2xpY2tlZCBvbiB0aGUgZXZlbnQgbGlzdGVuZXJzIHRhcmdldFxuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZVRvQXJyYXkoaW5zdGFuY2UucHJvcHMudHJpZ2dlclRhcmdldCB8fCByZWZlcmVuY2UpLnNvbWUoKGVsKSA9PlxuICAgICAgICBhY3R1YWxDb250YWlucyhlbCwgYWN0dWFsVGFyZ2V0IGFzIEVsZW1lbnQpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoY3VycmVudElucHV0LmlzVG91Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSAmJlxuICAgICAgICBpbnN0YW5jZS5wcm9wcy50cmlnZ2VyLmluZGV4T2YoJ2NsaWNrJykgPj0gMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW52b2tlSG9vaygnb25DbGlja091dHNpZGUnLCBbaW5zdGFuY2UsIGV2ZW50XSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnByb3BzLmhpZGVPbkNsaWNrID09PSB0cnVlKSB7XG4gICAgICBpbnN0YW5jZS5jbGVhckRlbGF5VGltZW91dHMoKTtcbiAgICAgIGluc3RhbmNlLmhpZGUoKTtcblxuICAgICAgLy8gYG1vdXNlZG93bmAgZXZlbnQgaXMgZmlyZWQgcmlnaHQgYmVmb3JlIGBmb2N1c2AgaWYgcHJlc3NpbmcgdGhlXG4gICAgICAvLyBjdXJyZW50VGFyZ2V0LiBUaGlzIGxldHMgYSB0aXBweSB3aXRoIGBmb2N1c2AgdHJpZ2dlciBrbm93IHRoYXQgaXRcbiAgICAgIC8vIHNob3VsZCBub3Qgc2hvd1xuICAgICAgZGlkSGlkZUR1ZVRvRG9jdW1lbnRNb3VzZURvd24gPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRpZEhpZGVEdWVUb0RvY3VtZW50TW91c2VEb3duID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIGxpc3RlbmVyIGdldHMgYWRkZWQgaW4gYHNjaGVkdWxlU2hvdygpYCwgYnV0IHRoaXMgbWF5IGJlIGhpZGluZyBpdFxuICAgICAgLy8gYmVmb3JlIGl0IHNob3dzLCBhbmQgaGlkZSgpJ3MgZWFybHkgYmFpbC1vdXQgYmVoYXZpb3IgY2FuIHByZXZlbnQgaXRcbiAgICAgIC8vIGZyb20gYmVpbmcgY2xlYW5lZCB1cFxuICAgICAgaWYgKCFpbnN0YW5jZS5zdGF0ZS5pc01vdW50ZWQpIHtcbiAgICAgICAgcmVtb3ZlRG9jdW1lbnRQcmVzcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKCk6IHZvaWQge1xuICAgIGRpZFRvdWNoTW92ZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBvblRvdWNoU3RhcnQoKTogdm9pZCB7XG4gICAgZGlkVG91Y2hNb3ZlID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBhZGREb2N1bWVudFByZXNzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRvYyA9IGdldERvY3VtZW50KCk7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uRG9jdW1lbnRQcmVzcywgdHJ1ZSk7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Eb2N1bWVudFByZXNzLCBUT1VDSF9PUFRJT05TKTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwgVE9VQ0hfT1BUSU9OUyk7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlLCBUT1VDSF9PUFRJT05TKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZURvY3VtZW50UHJlc3MoKTogdm9pZCB7XG4gICAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnQoKTtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Eb2N1bWVudFByZXNzLCB0cnVlKTtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvbkRvY3VtZW50UHJlc3MsIFRPVUNIX09QVElPTlMpO1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCBUT1VDSF9PUFRJT05TKTtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUsIFRPVUNIX09QVElPTlMpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25UcmFuc2l0aW9uZWRPdXQoZHVyYXRpb246IG51bWJlciwgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBvblRyYW5zaXRpb25FbmQoZHVyYXRpb24sICgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSAmJlxuICAgICAgICBwb3BwZXIucGFyZW50Tm9kZSAmJlxuICAgICAgICBwb3BwZXIucGFyZW50Tm9kZS5jb250YWlucyhwb3BwZXIpXG4gICAgICApIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVHJhbnNpdGlvbmVkSW4oZHVyYXRpb246IG51bWJlciwgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBvblRyYW5zaXRpb25FbmQoZHVyYXRpb24sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZChkdXJhdGlvbjogbnVtYmVyLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IGJveCA9IGdldERlZmF1bHRUZW1wbGF0ZUNoaWxkcmVuKCkuYm94O1xuXG4gICAgZnVuY3Rpb24gbGlzdGVuZXIoZXZlbnQ6IFRyYW5zaXRpb25FdmVudCk6IHZvaWQge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gYm94KSB7XG4gICAgICAgIHVwZGF0ZVRyYW5zaXRpb25FbmRMaXN0ZW5lcihib3gsICdyZW1vdmUnLCBsaXN0ZW5lcik7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWFrZSBjYWxsYmFjayBzeW5jaHJvbm91cyBpZiBkdXJhdGlvbiBpcyAwXG4gICAgLy8gYHRyYW5zaXRpb25lbmRgIHdvbid0IGZpcmUgb3RoZXJ3aXNlXG4gICAgaWYgKGR1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2l0aW9uRW5kTGlzdGVuZXIoYm94LCAncmVtb3ZlJywgY3VycmVudFRyYW5zaXRpb25FbmRMaXN0ZW5lcik7XG4gICAgdXBkYXRlVHJhbnNpdGlvbkVuZExpc3RlbmVyKGJveCwgJ2FkZCcsIGxpc3RlbmVyKTtcblxuICAgIGN1cnJlbnRUcmFuc2l0aW9uRW5kTGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uKFxuICAgIGV2ZW50VHlwZTogc3RyaW5nLFxuICAgIGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIsXG4gICAgb3B0aW9uczogYm9vbGVhbiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gZmFsc2VcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZXMgPSBub3JtYWxpemVUb0FycmF5KGluc3RhbmNlLnByb3BzLnRyaWdnZXJUYXJnZXQgfHwgcmVmZXJlbmNlKTtcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgIGxpc3RlbmVycy5wdXNoKHtub2RlLCBldmVudFR5cGUsIGhhbmRsZXIsIG9wdGlvbnN9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAoZ2V0SXNDdXN0b21Ub3VjaEJlaGF2aW9yKCkpIHtcbiAgICAgIG9uKCd0b3VjaHN0YXJ0Jywgb25UcmlnZ2VyLCB7cGFzc2l2ZTogdHJ1ZX0pO1xuICAgICAgb24oJ3RvdWNoZW5kJywgb25Nb3VzZUxlYXZlIGFzIEV2ZW50TGlzdGVuZXIsIHtwYXNzaXZlOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgc3BsaXRCeVNwYWNlcyhpbnN0YW5jZS5wcm9wcy50cmlnZ2VyKS5mb3JFYWNoKChldmVudFR5cGUpID0+IHtcbiAgICAgIGlmIChldmVudFR5cGUgPT09ICdtYW51YWwnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgb24oZXZlbnRUeXBlLCBvblRyaWdnZXIpO1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlICdtb3VzZWVudGVyJzpcbiAgICAgICAgICBvbignbW91c2VsZWF2ZScsIG9uTW91c2VMZWF2ZSBhcyBFdmVudExpc3RlbmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZm9jdXMnOlxuICAgICAgICAgIG9uKGlzSUUxMSA/ICdmb2N1c291dCcgOiAnYmx1cicsIG9uQmx1ck9yRm9jdXNPdXQgYXMgRXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgICAgIG9uKCdmb2N1c291dCcsIG9uQmx1ck9yRm9jdXNPdXQgYXMgRXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgbGlzdGVuZXJzLmZvckVhY2goKHtub2RlLCBldmVudFR5cGUsIGhhbmRsZXIsIG9wdGlvbnN9OiBMaXN0ZW5lck9iamVjdCkgPT4ge1xuICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgfSk7XG4gICAgbGlzdGVuZXJzID0gW107XG4gIH1cblxuICBmdW5jdGlvbiBvblRyaWdnZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IHNob3VsZFNjaGVkdWxlQ2xpY2tIaWRlID0gZmFsc2U7XG5cbiAgICBpZiAoXG4gICAgICAhaW5zdGFuY2Uuc3RhdGUuaXNFbmFibGVkIHx8XG4gICAgICBpc0V2ZW50TGlzdGVuZXJTdG9wcGVkKGV2ZW50KSB8fFxuICAgICAgZGlkSGlkZUR1ZVRvRG9jdW1lbnRNb3VzZURvd25cbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3YXNGb2N1c2VkID0gbGFzdFRyaWdnZXJFdmVudD8udHlwZSA9PT0gJ2ZvY3VzJztcblxuICAgIGxhc3RUcmlnZ2VyRXZlbnQgPSBldmVudDtcbiAgICBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBFbGVtZW50O1xuXG4gICAgaGFuZGxlQXJpYUV4cGFuZGVkQXR0cmlidXRlKCk7XG5cbiAgICBpZiAoIWluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSAmJiBpc01vdXNlRXZlbnQoZXZlbnQpKSB7XG4gICAgICAvLyBJZiBzY3JvbGxpbmcsIGBtb3VzZWVudGVyYCBldmVudHMgY2FuIGJlIGZpcmVkIGlmIHRoZSBjdXJzb3IgbGFuZHNcbiAgICAgIC8vIG92ZXIgYSBuZXcgdGFyZ2V0LCBidXQgYG1vdXNlbW92ZWAgZXZlbnRzIGRvbid0IGdldCBmaXJlZC4gVGhpc1xuICAgICAgLy8gY2F1c2VzIGludGVyYWN0aXZlIHRvb2x0aXBzIHRvIGdldCBzdHVjayBvcGVuIHVudGlsIHRoZSBjdXJzb3IgaXNcbiAgICAgIC8vIG1vdmVkXG4gICAgICBtb3VzZU1vdmVMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHNob3cvaGlkZSB3aGVuIGNsaWNraW5nIGNsaWNrLXRyaWdnZXJlZCB0b29sdGlwc1xuICAgIGlmIChcbiAgICAgIGV2ZW50LnR5cGUgPT09ICdjbGljaycgJiZcbiAgICAgIChpbnN0YW5jZS5wcm9wcy50cmlnZ2VyLmluZGV4T2YoJ21vdXNlZW50ZXInKSA8IDAgfHxcbiAgICAgICAgaXNWaXNpYmxlRnJvbUNsaWNrKSAmJlxuICAgICAgaW5zdGFuY2UucHJvcHMuaGlkZU9uQ2xpY2sgIT09IGZhbHNlICYmXG4gICAgICBpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGVcbiAgICApIHtcbiAgICAgIHNob3VsZFNjaGVkdWxlQ2xpY2tIaWRlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVTaG93KGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgaXNWaXNpYmxlRnJvbUNsaWNrID0gIXNob3VsZFNjaGVkdWxlQ2xpY2tIaWRlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRTY2hlZHVsZUNsaWNrSGlkZSAmJiAhd2FzRm9jdXNlZCkge1xuICAgICAgc2NoZWR1bGVIaWRlKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBOb2RlO1xuICAgIGNvbnN0IGlzQ3Vyc29yT3ZlclJlZmVyZW5jZU9yUG9wcGVyID1cbiAgICAgIGdldEN1cnJlbnRUYXJnZXQoKS5jb250YWlucyh0YXJnZXQpIHx8IHBvcHBlci5jb250YWlucyh0YXJnZXQpO1xuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZW1vdmUnICYmIGlzQ3Vyc29yT3ZlclJlZmVyZW5jZU9yUG9wcGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcG9wcGVyVHJlZURhdGEgPSBnZXROZXN0ZWRQb3BwZXJUcmVlKClcbiAgICAgIC5jb25jYXQocG9wcGVyKVxuICAgICAgLm1hcCgocG9wcGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gcG9wcGVyLl90aXBweSE7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gaW5zdGFuY2UucG9wcGVySW5zdGFuY2U/LnN0YXRlO1xuXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3BwZXJSZWN0OiBwb3BwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgICBwb3BwZXJTdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQb3BwZXJUcmVlRGF0YVtdO1xuXG4gICAgaWYgKGlzQ3Vyc29yT3V0c2lkZUludGVyYWN0aXZlQm9yZGVyKHBvcHBlclRyZWVEYXRhLCBldmVudCkpIHtcbiAgICAgIGNsZWFudXBJbnRlcmFjdGl2ZU1vdXNlTGlzdGVuZXJzKCk7XG4gICAgICBzY2hlZHVsZUhpZGUoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW91c2VMZWF2ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNob3VsZEJhaWwgPVxuICAgICAgaXNFdmVudExpc3RlbmVyU3RvcHBlZChldmVudCkgfHxcbiAgICAgIChpbnN0YW5jZS5wcm9wcy50cmlnZ2VyLmluZGV4T2YoJ2NsaWNrJykgPj0gMCAmJiBpc1Zpc2libGVGcm9tQ2xpY2spO1xuXG4gICAgaWYgKHNob3VsZEJhaWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMuaW50ZXJhY3RpdmUpIHtcbiAgICAgIGluc3RhbmNlLmhpZGVXaXRoSW50ZXJhY3Rpdml0eShldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2NoZWR1bGVIaWRlKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQmx1ck9yRm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBpbnN0YW5jZS5wcm9wcy50cmlnZ2VyLmluZGV4T2YoJ2ZvY3VzaW4nKSA8IDAgJiZcbiAgICAgIGV2ZW50LnRhcmdldCAhPT0gZ2V0Q3VycmVudFRhcmdldCgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgZm9jdXMgd2FzIG1vdmVkIHRvIHdpdGhpbiB0aGUgcG9wcGVyXG4gICAgaWYgKFxuICAgICAgaW5zdGFuY2UucHJvcHMuaW50ZXJhY3RpdmUgJiZcbiAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgJiZcbiAgICAgIHBvcHBlci5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEVsZW1lbnQpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2NoZWR1bGVIaWRlKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRXZlbnRMaXN0ZW5lclN0b3BwZWQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGN1cnJlbnRJbnB1dC5pc1RvdWNoXG4gICAgICA/IGdldElzQ3VzdG9tVG91Y2hCZWhhdmlvcigpICE9PSBldmVudC50eXBlLmluZGV4T2YoJ3RvdWNoJykgPj0gMFxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlckluc3RhbmNlKCk6IHZvaWQge1xuICAgIGRlc3Ryb3lQb3BwZXJJbnN0YW5jZSgpO1xuXG4gICAgY29uc3Qge1xuICAgICAgcG9wcGVyT3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIG9mZnNldCxcbiAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgICBtb3ZlVHJhbnNpdGlvbixcbiAgICB9ID0gaW5zdGFuY2UucHJvcHM7XG5cbiAgICBjb25zdCBhcnJvdyA9IGdldElzRGVmYXVsdFJlbmRlckZuKCkgPyBnZXRDaGlsZHJlbihwb3BwZXIpLmFycm93IDogbnVsbDtcblxuICAgIGNvbnN0IGNvbXB1dGVkUmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdFxuICAgICAgPyB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0OiBnZXRSZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgICAgICAgIGNvbnRleHRFbGVtZW50OlxuICAgICAgICAgICAgZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdC5jb250ZXh0RWxlbWVudCB8fCBnZXRDdXJyZW50VGFyZ2V0KCksXG4gICAgICAgIH1cbiAgICAgIDogcmVmZXJlbmNlO1xuXG4gICAgY29uc3QgdGlwcHlNb2RpZmllcjogTW9kaWZpZXI8JyQkdGlwcHknLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7XG4gICAgICBuYW1lOiAnJCR0aXBweScsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gICAgICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ10sXG4gICAgICBmbih7c3RhdGV9KSB7XG4gICAgICAgIGlmIChnZXRJc0RlZmF1bHRSZW5kZXJGbigpKSB7XG4gICAgICAgICAgY29uc3Qge2JveH0gPSBnZXREZWZhdWx0VGVtcGxhdGVDaGlsZHJlbigpO1xuXG4gICAgICAgICAgWydwbGFjZW1lbnQnLCAncmVmZXJlbmNlLWhpZGRlbicsICdlc2NhcGVkJ10uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgaWYgKGF0dHIgPT09ICdwbGFjZW1lbnQnKSB7XG4gICAgICAgICAgICAgIGJveC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGxhY2VtZW50Jywgc3RhdGUucGxhY2VtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlcltgZGF0YS1wb3BwZXItJHthdHRyfWBdKSB7XG4gICAgICAgICAgICAgICAgYm94LnNldEF0dHJpYnV0ZShgZGF0YS0ke2F0dHJ9YCwgJycpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJveC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtJHthdHRyfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IHt9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0eXBlIFRpcHB5TW9kaWZpZXIgPSBNb2RpZmllcjwnJCR0aXBweScsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgICB0eXBlIEV4dGVuZGVkTW9kaWZpZXJzID0gU3RyaWN0TW9kaWZpZXJzIHwgUGFydGlhbDxUaXBweU1vZGlmaWVyPjtcblxuICAgIGNvbnN0IG1vZGlmaWVyczogQXJyYXk8RXh0ZW5kZWRNb2RpZmllcnM+ID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgdG9wOiAyLFxuICAgICAgICAgICAgYm90dG9tOiAyLFxuICAgICAgICAgICAgbGVmdDogNSxcbiAgICAgICAgICAgIHJpZ2h0OiA1LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBwYWRkaW5nOiA1LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYWRhcHRpdmU6ICFtb3ZlVHJhbnNpdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0aXBweU1vZGlmaWVyLFxuICAgIF07XG5cbiAgICBpZiAoZ2V0SXNEZWZhdWx0UmVuZGVyRm4oKSAmJiBhcnJvdykge1xuICAgICAgbW9kaWZpZXJzLnB1c2goe1xuICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZWxlbWVudDogYXJyb3csXG4gICAgICAgICAgcGFkZGluZzogMyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1vZGlmaWVycy5wdXNoKC4uLihwb3BwZXJPcHRpb25zPy5tb2RpZmllcnMgfHwgW10pKTtcblxuICAgIGluc3RhbmNlLnBvcHBlckluc3RhbmNlID0gY3JlYXRlUG9wcGVyPEV4dGVuZGVkTW9kaWZpZXJzPihcbiAgICAgIGNvbXB1dGVkUmVmZXJlbmNlLFxuICAgICAgcG9wcGVyLFxuICAgICAge1xuICAgICAgICAuLi5wb3BwZXJPcHRpb25zLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG9uRmlyc3RVcGRhdGUsXG4gICAgICAgIG1vZGlmaWVycyxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveVBvcHBlckluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmIChpbnN0YW5jZS5wb3BwZXJJbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2UucG9wcGVySW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgaW5zdGFuY2UucG9wcGVySW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xuICAgIGNvbnN0IHthcHBlbmRUb30gPSBpbnN0YW5jZS5wcm9wcztcblxuICAgIGxldCBwYXJlbnROb2RlOiBhbnk7XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB3ZSdsbCBhcHBlbmQgdGhlIHBvcHBlciB0byB0aGUgdHJpZ2dlclRhcmdldHMncyBwYXJlbnROb2RlIHNvXG4gICAgLy8gaXQncyBkaXJlY3RseSBhZnRlciB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgc28gdGhlIGVsZW1lbnRzIGluc2lkZSB0aGVcbiAgICAvLyB0aXBweSBjYW4gYmUgdGFiYmVkIHRvXG4gICAgLy8gSWYgdGhlcmUgYXJlIGNsaXBwaW5nIGlzc3VlcywgdGhlIHVzZXIgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgYXBwZW5kVG9cbiAgICAvLyBhbmQgZW5zdXJlIGZvY3VzIG1hbmFnZW1lbnQgaXMgaGFuZGxlZCBjb3JyZWN0bHkgbWFudWFsbHlcbiAgICBjb25zdCBub2RlID0gZ2V0Q3VycmVudFRhcmdldCgpO1xuXG4gICAgaWYgKFxuICAgICAgKGluc3RhbmNlLnByb3BzLmludGVyYWN0aXZlICYmIGFwcGVuZFRvID09PSBUSVBQWV9ERUZBVUxUX0FQUEVORF9UTykgfHxcbiAgICAgIGFwcGVuZFRvID09PSAncGFyZW50J1xuICAgICkge1xuICAgICAgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Tm9kZSA9IGludm9rZVdpdGhBcmdzT3JSZXR1cm4oYXBwZW5kVG8sIFtub2RlXSk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHBvcHBlciBlbGVtZW50IG5lZWRzIHRvIGV4aXN0IG9uIHRoZSBET00gYmVmb3JlIGl0cyBwb3NpdGlvbiBjYW4gYmVcbiAgICAvLyB1cGRhdGVkIGFzIFBvcHBlciBuZWVkcyB0byByZWFkIGl0cyBkaW1lbnNpb25zXG4gICAgaWYgKCFwYXJlbnROb2RlLmNvbnRhaW5zKHBvcHBlcikpIHtcbiAgICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQocG9wcGVyKTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zdGF0ZS5pc01vdW50ZWQgPSB0cnVlO1xuXG4gICAgY3JlYXRlUG9wcGVySW5zdGFuY2UoKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIC8vIEFjY2Vzc2liaWxpdHkgY2hlY2tcbiAgICAgIHdhcm5XaGVuKFxuICAgICAgICBpbnN0YW5jZS5wcm9wcy5pbnRlcmFjdGl2ZSAmJlxuICAgICAgICAgIGFwcGVuZFRvID09PSBkZWZhdWx0UHJvcHMuYXBwZW5kVG8gJiZcbiAgICAgICAgICBub2RlLm5leHRFbGVtZW50U2libGluZyAhPT0gcG9wcGVyLFxuICAgICAgICBbXG4gICAgICAgICAgJ0ludGVyYWN0aXZlIHRpcHB5IGVsZW1lbnQgbWF5IG5vdCBiZSBhY2Nlc3NpYmxlIHZpYSBrZXlib2FyZCcsXG4gICAgICAgICAgJ25hdmlnYXRpb24gYmVjYXVzZSBpdCBpcyBub3QgZGlyZWN0bHkgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBlbGVtZW50JyxcbiAgICAgICAgICAnaW4gdGhlIERPTSBzb3VyY2Ugb3JkZXIuJyxcbiAgICAgICAgICAnXFxuXFxuJyxcbiAgICAgICAgICAnVXNpbmcgYSB3cmFwcGVyIDxkaXY+IG9yIDxzcGFuPiB0YWcgYXJvdW5kIHRoZSByZWZlcmVuY2UgZWxlbWVudCcsXG4gICAgICAgICAgJ3NvbHZlcyB0aGlzIGJ5IGNyZWF0aW5nIGEgbmV3IHBhcmVudE5vZGUgY29udGV4dC4nLFxuICAgICAgICAgICdcXG5cXG4nLFxuICAgICAgICAgICdTcGVjaWZ5aW5nIGBhcHBlbmRUbzogZG9jdW1lbnQuYm9keWAgc2lsZW5jZXMgdGhpcyB3YXJuaW5nLCBidXQgaXQnLFxuICAgICAgICAgICdhc3N1bWVzIHlvdSBhcmUgdXNpbmcgYSBmb2N1cyBtYW5hZ2VtZW50IHNvbHV0aW9uIHRvIGhhbmRsZScsXG4gICAgICAgICAgJ2tleWJvYXJkIG5hdmlnYXRpb24uJyxcbiAgICAgICAgICAnXFxuXFxuJyxcbiAgICAgICAgICAnU2VlOiBodHRwczovL2F0b21pa3MuZ2l0aHViLmlvL3RpcHB5anMvdjYvYWNjZXNzaWJpbGl0eS8jaW50ZXJhY3Rpdml0eScsXG4gICAgICAgIF0uam9pbignICcpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5lc3RlZFBvcHBlclRyZWUoKTogUG9wcGVyRWxlbWVudFtdIHtcbiAgICByZXR1cm4gYXJyYXlGcm9tKFxuICAgICAgcG9wcGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLV9fTkFNRVNQQUNFX1BSRUZJWF9fLXJvb3RdJylcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGVTaG93KGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBpbnN0YW5jZS5jbGVhckRlbGF5VGltZW91dHMoKTtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgaW52b2tlSG9vaygnb25UcmlnZ2VyJywgW2luc3RhbmNlLCBldmVudF0pO1xuICAgIH1cblxuICAgIGFkZERvY3VtZW50UHJlc3MoKTtcblxuICAgIGxldCBkZWxheSA9IGdldERlbGF5KHRydWUpO1xuICAgIGNvbnN0IFt0b3VjaFZhbHVlLCB0b3VjaERlbGF5XSA9IGdldE5vcm1hbGl6ZWRUb3VjaFNldHRpbmdzKCk7XG5cbiAgICBpZiAoY3VycmVudElucHV0LmlzVG91Y2ggJiYgdG91Y2hWYWx1ZSA9PT0gJ2hvbGQnICYmIHRvdWNoRGVsYXkpIHtcbiAgICAgIGRlbGF5ID0gdG91Y2hEZWxheTtcbiAgICB9XG5cbiAgICBpZiAoZGVsYXkpIHtcbiAgICAgIHNob3dUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGluc3RhbmNlLnNob3coKTtcbiAgICAgIH0sIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2Uuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlSGlkZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpbnN0YW5jZS5jbGVhckRlbGF5VGltZW91dHMoKTtcblxuICAgIGludm9rZUhvb2soJ29uVW50cmlnZ2VyJywgW2luc3RhbmNlLCBldmVudF0pO1xuXG4gICAgaWYgKCFpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUpIHtcbiAgICAgIHJlbW92ZURvY3VtZW50UHJlc3MoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvciBpbnRlcmFjdGl2ZSB0aXBwaWVzLCBzY2hlZHVsZUhpZGUgaXMgYWRkZWQgdG8gYSBkb2N1bWVudC5ib2R5IGhhbmRsZXJcbiAgICAvLyBmcm9tIG9uTW91c2VMZWF2ZSBzbyBtdXN0IGludGVyY2VwdCBzY2hlZHVsZWQgaGlkZXMgZnJvbSBtb3VzZW1vdmUvbGVhdmVcbiAgICAvLyBldmVudHMgd2hlbiB0cmlnZ2VyIGNvbnRhaW5zIG1vdXNlZW50ZXIgYW5kIGNsaWNrLCBhbmQgdGhlIHRpcCBpc1xuICAgIC8vIGN1cnJlbnRseSBzaG93biBhcyBhIHJlc3VsdCBvZiBhIGNsaWNrLlxuICAgIGlmIChcbiAgICAgIGluc3RhbmNlLnByb3BzLnRyaWdnZXIuaW5kZXhPZignbW91c2VlbnRlcicpID49IDAgJiZcbiAgICAgIGluc3RhbmNlLnByb3BzLnRyaWdnZXIuaW5kZXhPZignY2xpY2snKSA+PSAwICYmXG4gICAgICBbJ21vdXNlbGVhdmUnLCAnbW91c2Vtb3ZlJ10uaW5kZXhPZihldmVudC50eXBlKSA+PSAwICYmXG4gICAgICBpc1Zpc2libGVGcm9tQ2xpY2tcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWxheSA9IGdldERlbGF5KGZhbHNlKTtcblxuICAgIGlmIChkZWxheSkge1xuICAgICAgaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSkge1xuICAgICAgICAgIGluc3RhbmNlLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSwgZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGaXhlcyBhIGB0cmFuc2l0aW9uZW5kYCBwcm9ibGVtIHdoZW4gaXQgZmlyZXMgMSBmcmFtZSB0b29cbiAgICAgIC8vIGxhdGUgc29tZXRpbWVzLCB3ZSBkb24ndCB3YW50IGhpZGUoKSB0byBiZSBjYWxsZWQuXG4gICAgICBzY2hlZHVsZUhpZGVBbmltYXRpb25GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGluc3RhbmNlLmhpZGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDwn5SRIFB1YmxpYyBtZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBlbmFibGUoKTogdm9pZCB7XG4gICAgaW5zdGFuY2Uuc3RhdGUuaXNFbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FibGUoKTogdm9pZCB7XG4gICAgLy8gRGlzYWJsaW5nIHRoZSBpbnN0YW5jZSBzaG91bGQgYWxzbyBoaWRlIGl0XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0b21pa3MvdGlwcHkuanMtcmVhY3QvaXNzdWVzLzEwNlxuICAgIGluc3RhbmNlLmhpZGUoKTtcbiAgICBpbnN0YW5jZS5zdGF0ZS5pc0VuYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyRGVsYXlUaW1lb3V0cygpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQoc2hvd1RpbWVvdXQpO1xuICAgIGNsZWFyVGltZW91dChoaWRlVGltZW91dCk7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2NoZWR1bGVIaWRlQW5pbWF0aW9uRnJhbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0UHJvcHMocGFydGlhbFByb3BzOiBQYXJ0aWFsPFByb3BzPik6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHdhcm5XaGVuKGluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkLCBjcmVhdGVNZW1vcnlMZWFrV2FybmluZygnc2V0UHJvcHMnKSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW52b2tlSG9vaygnb25CZWZvcmVVcGRhdGUnLCBbaW5zdGFuY2UsIHBhcnRpYWxQcm9wc10pO1xuXG4gICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG5cbiAgICBjb25zdCBwcmV2UHJvcHMgPSBpbnN0YW5jZS5wcm9wcztcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBldmFsdWF0ZVByb3BzKHJlZmVyZW5jZSwge1xuICAgICAgLi4ucHJldlByb3BzLFxuICAgICAgLi4ucmVtb3ZlVW5kZWZpbmVkUHJvcHMocGFydGlhbFByb3BzKSxcbiAgICAgIGlnbm9yZUF0dHJpYnV0ZXM6IHRydWUsXG4gICAgfSk7XG5cbiAgICBpbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcztcblxuICAgIGFkZExpc3RlbmVycygpO1xuXG4gICAgaWYgKHByZXZQcm9wcy5pbnRlcmFjdGl2ZURlYm91bmNlICE9PSBuZXh0UHJvcHMuaW50ZXJhY3RpdmVEZWJvdW5jZSkge1xuICAgICAgY2xlYW51cEludGVyYWN0aXZlTW91c2VMaXN0ZW5lcnMoKTtcbiAgICAgIGRlYm91bmNlZE9uTW91c2VNb3ZlID0gZGVib3VuY2UoXG4gICAgICAgIG9uTW91c2VNb3ZlLFxuICAgICAgICBuZXh0UHJvcHMuaW50ZXJhY3RpdmVEZWJvdW5jZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgc3RhbGUgYXJpYS1leHBhbmRlZCBhdHRyaWJ1dGVzIGFyZSByZW1vdmVkXG4gICAgaWYgKHByZXZQcm9wcy50cmlnZ2VyVGFyZ2V0ICYmICFuZXh0UHJvcHMudHJpZ2dlclRhcmdldCkge1xuICAgICAgbm9ybWFsaXplVG9BcnJheShwcmV2UHJvcHMudHJpZ2dlclRhcmdldCkuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChuZXh0UHJvcHMudHJpZ2dlclRhcmdldCkge1xuICAgICAgcmVmZXJlbmNlLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpO1xuICAgIH1cblxuICAgIGhhbmRsZUFyaWFFeHBhbmRlZEF0dHJpYnV0ZSgpO1xuICAgIGhhbmRsZVN0eWxlcygpO1xuXG4gICAgaWYgKG9uVXBkYXRlKSB7XG4gICAgICBvblVwZGF0ZShwcmV2UHJvcHMsIG5leHRQcm9wcyk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnBvcHBlckluc3RhbmNlKSB7XG4gICAgICBjcmVhdGVQb3BwZXJJbnN0YW5jZSgpO1xuXG4gICAgICAvLyBGaXhlcyBhbiBpc3N1ZSB3aXRoIG5lc3RlZCB0aXBwaWVzIGlmIHRoZXkgYXJlIGFsbCBnZXR0aW5nIHJlLXJlbmRlcmVkLFxuICAgICAgLy8gYW5kIHRoZSBuZXN0ZWQgb25lcyBnZXQgcmUtcmVuZGVyZWQgZmlyc3QuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXRvbWlrcy90aXBweWpzLXJlYWN0L2lzc3Vlcy8xNzdcbiAgICAgIC8vIFRPRE86IGZpbmQgYSBjbGVhbmVyIC8gbW9yZSBlZmZpY2llbnQgc29sdXRpb24oISlcbiAgICAgIGdldE5lc3RlZFBvcHBlclRyZWUoKS5mb3JFYWNoKChuZXN0ZWRQb3BwZXIpID0+IHtcbiAgICAgICAgLy8gUmVhY3QgKGFuZCBvdGhlciBVSSBsaWJzIGxpa2VseSkgcmVxdWlyZXMgYSByQUYgd3JhcHBlciBhcyBpdCBmbHVzaGVzXG4gICAgICAgIC8vIGl0cyB3b3JrIGluIG9uZVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobmVzdGVkUG9wcGVyLl90aXBweSEucG9wcGVySW5zdGFuY2UhLmZvcmNlVXBkYXRlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGludm9rZUhvb2soJ29uQWZ0ZXJVcGRhdGUnLCBbaW5zdGFuY2UsIHBhcnRpYWxQcm9wc10pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0Q29udGVudChjb250ZW50OiBDb250ZW50KTogdm9pZCB7XG4gICAgaW5zdGFuY2Uuc2V0UHJvcHMoe2NvbnRlbnR9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3coKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgd2FybldoZW4oaW5zdGFuY2Uuc3RhdGUuaXNEZXN0cm95ZWQsIGNyZWF0ZU1lbW9yeUxlYWtXYXJuaW5nKCdzaG93JykpO1xuICAgIH1cblxuICAgIC8vIEVhcmx5IGJhaWwtb3V0XG4gICAgY29uc3QgaXNBbHJlYWR5VmlzaWJsZSA9IGluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZTtcbiAgICBjb25zdCBpc0Rlc3Ryb3llZCA9IGluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkO1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSAhaW5zdGFuY2Uuc3RhdGUuaXNFbmFibGVkO1xuICAgIGNvbnN0IGlzVG91Y2hBbmRUb3VjaERpc2FibGVkID1cbiAgICAgIGN1cnJlbnRJbnB1dC5pc1RvdWNoICYmICFpbnN0YW5jZS5wcm9wcy50b3VjaDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGdldFZhbHVlQXRJbmRleE9yUmV0dXJuKFxuICAgICAgaW5zdGFuY2UucHJvcHMuZHVyYXRpb24sXG4gICAgICAwLFxuICAgICAgZGVmYXVsdFByb3BzLmR1cmF0aW9uXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGlzQWxyZWFkeVZpc2libGUgfHxcbiAgICAgIGlzRGVzdHJveWVkIHx8XG4gICAgICBpc0Rpc2FibGVkIHx8XG4gICAgICBpc1RvdWNoQW5kVG91Y2hEaXNhYmxlZFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSBgZGlzYWJsZWRgIGJlaGF2aW9yIGFjcm9zcyBicm93c2Vycy5cbiAgICAvLyBGaXJlZm94IGFsbG93cyBldmVudHMgb24gZGlzYWJsZWQgZWxlbWVudHMsIGJ1dCBDaHJvbWUgZG9lc24ndC5cbiAgICAvLyBVc2luZyBhIHdyYXBwZXIgZWxlbWVudCAoaS5lLiA8c3Bhbj4pIGlzIHJlY29tbWVuZGVkLlxuICAgIGlmIChnZXRDdXJyZW50VGFyZ2V0KCkuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW52b2tlSG9vaygnb25TaG93JywgW2luc3RhbmNlXSwgZmFsc2UpO1xuICAgIGlmIChpbnN0YW5jZS5wcm9wcy5vblNob3coaW5zdGFuY2UpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSA9IHRydWU7XG5cbiAgICBpZiAoZ2V0SXNEZWZhdWx0UmVuZGVyRm4oKSkge1xuICAgICAgcG9wcGVyLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgfVxuXG4gICAgaGFuZGxlU3R5bGVzKCk7XG4gICAgYWRkRG9jdW1lbnRQcmVzcygpO1xuXG4gICAgaWYgKCFpbnN0YW5jZS5zdGF0ZS5pc01vdW50ZWQpIHtcbiAgICAgIHBvcHBlci5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgIH1cblxuICAgIC8vIElmIGZsaXBwaW5nIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGFmdGVyIGhpZGluZyBhdCBsZWFzdCBvbmNlLCB0aGVcbiAgICAvLyBhbmltYXRpb24gd2lsbCB1c2UgdGhlIHdyb25nIHBsYWNlbWVudCB3aXRob3V0IHJlc2V0dGluZyB0aGUgZHVyYXRpb25cbiAgICBpZiAoZ2V0SXNEZWZhdWx0UmVuZGVyRm4oKSkge1xuICAgICAgY29uc3Qge2JveCwgY29udGVudH0gPSBnZXREZWZhdWx0VGVtcGxhdGVDaGlsZHJlbigpO1xuICAgICAgc2V0VHJhbnNpdGlvbkR1cmF0aW9uKFtib3gsIGNvbnRlbnRdLCAwKTtcbiAgICB9XG5cbiAgICBvbkZpcnN0VXBkYXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUgfHwgaWdub3JlT25GaXJzdFVwZGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlnbm9yZU9uRmlyc3RVcGRhdGUgPSB0cnVlO1xuXG4gICAgICAvLyByZWZsb3dcbiAgICAgIHZvaWQgcG9wcGVyLm9mZnNldEhlaWdodDtcblxuICAgICAgcG9wcGVyLnN0eWxlLnRyYW5zaXRpb24gPSBpbnN0YW5jZS5wcm9wcy5tb3ZlVHJhbnNpdGlvbjtcblxuICAgICAgaWYgKGdldElzRGVmYXVsdFJlbmRlckZuKCkgJiYgaW5zdGFuY2UucHJvcHMuYW5pbWF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHtib3gsIGNvbnRlbnR9ID0gZ2V0RGVmYXVsdFRlbXBsYXRlQ2hpbGRyZW4oKTtcbiAgICAgICAgc2V0VHJhbnNpdGlvbkR1cmF0aW9uKFtib3gsIGNvbnRlbnRdLCBkdXJhdGlvbik7XG4gICAgICAgIHNldFZpc2liaWxpdHlTdGF0ZShbYm94LCBjb250ZW50XSwgJ3Zpc2libGUnKTtcbiAgICAgIH1cblxuICAgICAgaGFuZGxlQXJpYUNvbnRlbnRBdHRyaWJ1dGUoKTtcbiAgICAgIGhhbmRsZUFyaWFFeHBhbmRlZEF0dHJpYnV0ZSgpO1xuXG4gICAgICBwdXNoSWZVbmlxdWUobW91bnRlZEluc3RhbmNlcywgaW5zdGFuY2UpO1xuXG4gICAgICAvLyBjZXJ0YWluIG1vZGlmaWVycyAoZS5nLiBgbWF4U2l6ZWApIHJlcXVpcmUgYSBzZWNvbmQgdXBkYXRlIGFmdGVyIHRoZVxuICAgICAgLy8gcG9wcGVyIGhhcyBiZWVuIHBvc2l0aW9uZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICBpbnN0YW5jZS5wb3BwZXJJbnN0YW5jZT8uZm9yY2VVcGRhdGUoKTtcblxuICAgICAgaW52b2tlSG9vaygnb25Nb3VudCcsIFtpbnN0YW5jZV0pO1xuXG4gICAgICBpZiAoaW5zdGFuY2UucHJvcHMuYW5pbWF0aW9uICYmIGdldElzRGVmYXVsdFJlbmRlckZuKCkpIHtcbiAgICAgICAgb25UcmFuc2l0aW9uZWRJbihkdXJhdGlvbiwgKCkgPT4ge1xuICAgICAgICAgIGluc3RhbmNlLnN0YXRlLmlzU2hvd24gPSB0cnVlO1xuICAgICAgICAgIGludm9rZUhvb2soJ29uU2hvd24nLCBbaW5zdGFuY2VdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIG1vdW50KCk7XG4gIH1cblxuICBmdW5jdGlvbiBoaWRlKCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHdhcm5XaGVuKGluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkLCBjcmVhdGVNZW1vcnlMZWFrV2FybmluZygnaGlkZScpKTtcbiAgICB9XG5cbiAgICAvLyBFYXJseSBiYWlsLW91dFxuICAgIGNvbnN0IGlzQWxyZWFkeUhpZGRlbiA9ICFpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGU7XG4gICAgY29uc3QgaXNEZXN0cm95ZWQgPSBpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZDtcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gIWluc3RhbmNlLnN0YXRlLmlzRW5hYmxlZDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGdldFZhbHVlQXRJbmRleE9yUmV0dXJuKFxuICAgICAgaW5zdGFuY2UucHJvcHMuZHVyYXRpb24sXG4gICAgICAxLFxuICAgICAgZGVmYXVsdFByb3BzLmR1cmF0aW9uXG4gICAgKTtcblxuICAgIGlmIChpc0FscmVhZHlIaWRkZW4gfHwgaXNEZXN0cm95ZWQgfHwgaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludm9rZUhvb2soJ29uSGlkZScsIFtpbnN0YW5jZV0sIGZhbHNlKTtcbiAgICBpZiAoaW5zdGFuY2UucHJvcHMub25IaWRlKGluc3RhbmNlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICBpbnN0YW5jZS5zdGF0ZS5pc1Nob3duID0gZmFsc2U7XG4gICAgaWdub3JlT25GaXJzdFVwZGF0ZSA9IGZhbHNlO1xuICAgIGlzVmlzaWJsZUZyb21DbGljayA9IGZhbHNlO1xuXG4gICAgaWYgKGdldElzRGVmYXVsdFJlbmRlckZuKCkpIHtcbiAgICAgIHBvcHBlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgfVxuXG4gICAgY2xlYW51cEludGVyYWN0aXZlTW91c2VMaXN0ZW5lcnMoKTtcbiAgICByZW1vdmVEb2N1bWVudFByZXNzKCk7XG4gICAgaGFuZGxlU3R5bGVzKHRydWUpO1xuXG4gICAgaWYgKGdldElzRGVmYXVsdFJlbmRlckZuKCkpIHtcbiAgICAgIGNvbnN0IHtib3gsIGNvbnRlbnR9ID0gZ2V0RGVmYXVsdFRlbXBsYXRlQ2hpbGRyZW4oKTtcblxuICAgICAgaWYgKGluc3RhbmNlLnByb3BzLmFuaW1hdGlvbikge1xuICAgICAgICBzZXRUcmFuc2l0aW9uRHVyYXRpb24oW2JveCwgY29udGVudF0sIGR1cmF0aW9uKTtcbiAgICAgICAgc2V0VmlzaWJpbGl0eVN0YXRlKFtib3gsIGNvbnRlbnRdLCAnaGlkZGVuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQXJpYUNvbnRlbnRBdHRyaWJ1dGUoKTtcbiAgICBoYW5kbGVBcmlhRXhwYW5kZWRBdHRyaWJ1dGUoKTtcblxuICAgIGlmIChpbnN0YW5jZS5wcm9wcy5hbmltYXRpb24pIHtcbiAgICAgIGlmIChnZXRJc0RlZmF1bHRSZW5kZXJGbigpKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbmVkT3V0KGR1cmF0aW9uLCBpbnN0YW5jZS51bm1vdW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UudW5tb3VudCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhpZGVXaXRoSW50ZXJhY3Rpdml0eShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHdhcm5XaGVuKFxuICAgICAgICBpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZCxcbiAgICAgICAgY3JlYXRlTWVtb3J5TGVha1dhcm5pbmcoJ2hpZGVXaXRoSW50ZXJhY3Rpdml0eScpXG4gICAgICApO1xuICAgIH1cblxuICAgIGdldERvY3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZGVib3VuY2VkT25Nb3VzZU1vdmUpO1xuICAgIHB1c2hJZlVuaXF1ZShtb3VzZU1vdmVMaXN0ZW5lcnMsIGRlYm91bmNlZE9uTW91c2VNb3ZlKTtcbiAgICBkZWJvdW5jZWRPbk1vdXNlTW92ZShldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiB1bm1vdW50KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHdhcm5XaGVuKGluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkLCBjcmVhdGVNZW1vcnlMZWFrV2FybmluZygndW5tb3VudCcpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlKSB7XG4gICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnN0YW5jZS5zdGF0ZS5pc01vdW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkZXN0cm95UG9wcGVySW5zdGFuY2UoKTtcblxuICAgIC8vIElmIGEgcG9wcGVyIGlzIG5vdCBpbnRlcmFjdGl2ZSwgaXQgd2lsbCBiZSBhcHBlbmRlZCBvdXRzaWRlIHRoZSBwb3BwZXJcbiAgICAvLyB0cmVlIGJ5IGRlZmF1bHQuIFRoaXMgc2VlbXMgbWFpbmx5IGZvciBpbnRlcmFjdGl2ZSB0aXBwaWVzLCBidXQgd2Ugc2hvdWxkXG4gICAgLy8gZmluZCBhIHdvcmthcm91bmQgaWYgcG9zc2libGVcbiAgICBnZXROZXN0ZWRQb3BwZXJUcmVlKCkuZm9yRWFjaCgobmVzdGVkUG9wcGVyKSA9PiB7XG4gICAgICBuZXN0ZWRQb3BwZXIuX3RpcHB5IS51bm1vdW50KCk7XG4gICAgfSk7XG5cbiAgICBpZiAocG9wcGVyLnBhcmVudE5vZGUpIHtcbiAgICAgIHBvcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBvcHBlcik7XG4gICAgfVxuXG4gICAgbW91bnRlZEluc3RhbmNlcyA9IG1vdW50ZWRJbnN0YW5jZXMuZmlsdGVyKChpKSA9PiBpICE9PSBpbnN0YW5jZSk7XG5cbiAgICBpbnN0YW5jZS5zdGF0ZS5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICBpbnZva2VIb29rKCdvbkhpZGRlbicsIFtpbnN0YW5jZV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICB3YXJuV2hlbihpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZCwgY3JlYXRlTWVtb3J5TGVha1dhcm5pbmcoJ2Rlc3Ryb3knKSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5zdGFuY2UuY2xlYXJEZWxheVRpbWVvdXRzKCk7XG4gICAgaW5zdGFuY2UudW5tb3VudCgpO1xuXG4gICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG5cbiAgICBkZWxldGUgcmVmZXJlbmNlLl90aXBweTtcblxuICAgIGluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkID0gdHJ1ZTtcblxuICAgIGludm9rZUhvb2soJ29uRGVzdHJveScsIFtpbnN0YW5jZV0pO1xuICB9XG59XG4iLCAiaW1wb3J0IGJpbmRHbG9iYWxFdmVudExpc3RlbmVycywge1xuICBjdXJyZW50SW5wdXQsXG59IGZyb20gJy4vYmluZEdsb2JhbEV2ZW50TGlzdGVuZXJzJztcbmltcG9ydCBjcmVhdGVUaXBweSwge21vdW50ZWRJbnN0YW5jZXN9IGZyb20gJy4vY3JlYXRlVGlwcHknO1xuaW1wb3J0IHtnZXRBcnJheU9mRWxlbWVudHMsIGlzRWxlbWVudCwgaXNSZWZlcmVuY2VFbGVtZW50fSBmcm9tICcuL2RvbS11dGlscyc7XG5pbXBvcnQge2RlZmF1bHRQcm9wcywgc2V0RGVmYXVsdFByb3BzLCB2YWxpZGF0ZVByb3BzfSBmcm9tICcuL3Byb3BzJztcbmltcG9ydCB7SGlkZUFsbCwgSGlkZUFsbE9wdGlvbnMsIEluc3RhbmNlLCBQcm9wcywgVGFyZ2V0c30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge3ZhbGlkYXRlVGFyZ2V0cywgd2FybldoZW59IGZyb20gJy4vdmFsaWRhdGlvbic7XG5cbmZ1bmN0aW9uIHRpcHB5KFxuICB0YXJnZXRzOiBUYXJnZXRzLFxuICBvcHRpb25hbFByb3BzOiBQYXJ0aWFsPFByb3BzPiA9IHt9XG4pOiBJbnN0YW5jZSB8IEluc3RhbmNlW10ge1xuICBjb25zdCBwbHVnaW5zID0gZGVmYXVsdFByb3BzLnBsdWdpbnMuY29uY2F0KG9wdGlvbmFsUHJvcHMucGx1Z2lucyB8fCBbXSk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKF9fREVWX18pIHtcbiAgICB2YWxpZGF0ZVRhcmdldHModGFyZ2V0cyk7XG4gICAgdmFsaWRhdGVQcm9wcyhvcHRpb25hbFByb3BzLCBwbHVnaW5zKTtcbiAgfVxuXG4gIGJpbmRHbG9iYWxFdmVudExpc3RlbmVycygpO1xuXG4gIGNvbnN0IHBhc3NlZFByb3BzOiBQYXJ0aWFsPFByb3BzPiA9IHsuLi5vcHRpb25hbFByb3BzLCBwbHVnaW5zfTtcblxuICBjb25zdCBlbGVtZW50cyA9IGdldEFycmF5T2ZFbGVtZW50cyh0YXJnZXRzKTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoX19ERVZfXykge1xuICAgIGNvbnN0IGlzU2luZ2xlQ29udGVudEVsZW1lbnQgPSBpc0VsZW1lbnQocGFzc2VkUHJvcHMuY29udGVudCk7XG4gICAgY29uc3QgaXNNb3JlVGhhbk9uZVJlZmVyZW5jZUVsZW1lbnQgPSBlbGVtZW50cy5sZW5ndGggPiAxO1xuICAgIHdhcm5XaGVuKFxuICAgICAgaXNTaW5nbGVDb250ZW50RWxlbWVudCAmJiBpc01vcmVUaGFuT25lUmVmZXJlbmNlRWxlbWVudCxcbiAgICAgIFtcbiAgICAgICAgJ3RpcHB5KCkgd2FzIHBhc3NlZCBhbiBFbGVtZW50IGFzIHRoZSBgY29udGVudGAgcHJvcCwgYnV0IG1vcmUgdGhhbicsXG4gICAgICAgICdvbmUgdGlwcHkgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQgYnkgdGhpcyBpbnZvY2F0aW9uLiBUaGlzIG1lYW5zIHRoZScsXG4gICAgICAgICdjb250ZW50IGVsZW1lbnQgd2lsbCBvbmx5IGJlIGFwcGVuZGVkIHRvIHRoZSBsYXN0IHRpcHB5IGluc3RhbmNlLicsXG4gICAgICAgICdcXG5cXG4nLFxuICAgICAgICAnSW5zdGVhZCwgcGFzcyB0aGUgLmlubmVySFRNTCBvZiB0aGUgZWxlbWVudCwgb3IgdXNlIGEgZnVuY3Rpb24gdGhhdCcsXG4gICAgICAgICdyZXR1cm5zIGEgY2xvbmVkIHZlcnNpb24gb2YgdGhlIGVsZW1lbnQgaW5zdGVhZC4nLFxuICAgICAgICAnXFxuXFxuJyxcbiAgICAgICAgJzEpIGNvbnRlbnQ6IGVsZW1lbnQuaW5uZXJIVE1MXFxuJyxcbiAgICAgICAgJzIpIGNvbnRlbnQ6ICgpID0+IGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpJyxcbiAgICAgIF0uam9pbignICcpXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluc3RhbmNlcyA9IGVsZW1lbnRzLnJlZHVjZTxJbnN0YW5jZVtdPihcbiAgICAoYWNjLCByZWZlcmVuY2UpOiBJbnN0YW5jZVtdID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gcmVmZXJlbmNlICYmIGNyZWF0ZVRpcHB5KHJlZmVyZW5jZSwgcGFzc2VkUHJvcHMpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgYWNjLnB1c2goaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICByZXR1cm4gaXNFbGVtZW50KHRhcmdldHMpID8gaW5zdGFuY2VzWzBdIDogaW5zdGFuY2VzO1xufVxuXG50aXBweS5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG50aXBweS5zZXREZWZhdWx0UHJvcHMgPSBzZXREZWZhdWx0UHJvcHM7XG50aXBweS5jdXJyZW50SW5wdXQgPSBjdXJyZW50SW5wdXQ7XG5cbmV4cG9ydCBkZWZhdWx0IHRpcHB5O1xuXG5leHBvcnQgY29uc3QgaGlkZUFsbDogSGlkZUFsbCA9ICh7XG4gIGV4Y2x1ZGU6IGV4Y2x1ZGVkUmVmZXJlbmNlT3JJbnN0YW5jZSxcbiAgZHVyYXRpb24sXG59OiBIaWRlQWxsT3B0aW9ucyA9IHt9KSA9PiB7XG4gIG1vdW50ZWRJbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2UpID0+IHtcbiAgICBsZXQgaXNFeGNsdWRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGV4Y2x1ZGVkUmVmZXJlbmNlT3JJbnN0YW5jZSkge1xuICAgICAgaXNFeGNsdWRlZCA9IGlzUmVmZXJlbmNlRWxlbWVudChleGNsdWRlZFJlZmVyZW5jZU9ySW5zdGFuY2UpXG4gICAgICAgID8gaW5zdGFuY2UucmVmZXJlbmNlID09PSBleGNsdWRlZFJlZmVyZW5jZU9ySW5zdGFuY2VcbiAgICAgICAgOiBpbnN0YW5jZS5wb3BwZXIgPT09IChleGNsdWRlZFJlZmVyZW5jZU9ySW5zdGFuY2UgYXMgSW5zdGFuY2UpLnBvcHBlcjtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXhjbHVkZWQpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBpbnN0YW5jZS5wcm9wcy5kdXJhdGlvbjtcblxuICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMoe2R1cmF0aW9ufSk7XG4gICAgICBpbnN0YW5jZS5oaWRlKCk7XG5cbiAgICAgIGlmICghaW5zdGFuY2Uuc3RhdGUuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMoe2R1cmF0aW9uOiBvcmlnaW5hbER1cmF0aW9ufSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG4iLCAiaW1wb3J0IHRpcHB5IGZyb20gJy4uJztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9kb20tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlU2luZ2xldG9uLFxuICBQbHVnaW4sXG4gIENyZWF0ZVNpbmdsZXRvblByb3BzLFxuICBSZWZlcmVuY2VFbGVtZW50LFxuICBDcmVhdGVTaW5nbGV0b25JbnN0YW5jZSxcbiAgSW5zdGFuY2UsXG4gIFByb3BzLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge25vcm1hbGl6ZVRvQXJyYXksIHJlbW92ZVByb3BlcnRpZXN9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7ZXJyb3JXaGVufSBmcm9tICcuLi92YWxpZGF0aW9uJztcbmltcG9ydCB7YXBwbHlTdHlsZXMsIE1vZGlmaWVyfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbi8vIFRoZSBkZWZhdWx0IGBhcHBseVN0eWxlc2AgbW9kaWZpZXIgaGFzIGEgY2xlYW51cCBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkXG4vLyBldmVyeSB0aW1lIHRoZSBwb3BwZXIgaXMgZGVzdHJveWVkIChpLmUuIGEgbmV3IHRhcmdldCksIHJlbW92aW5nIHRoZSBzdHlsZXNcbi8vIGFuZCBjYXVzaW5nIHRyYW5zaXRpb25zIHRvIGJyZWFrIGZvciBzaW5nbGV0b25zIHdoZW4gdGhlIGNvbnNvbGUgaXMgb3BlbiwgYnV0XG4vLyBtb3N0IG5vdGFibHkgZm9yIG5vbi10cmFuc2Zvcm0gc3R5bGVzIGJlaW5nIHVzZWQsIGBncHVBY2NlbGVyYXRpb246IGZhbHNlYC5cbmNvbnN0IGFwcGx5U3R5bGVzTW9kaWZpZXI6IE1vZGlmaWVyPCdhcHBseVN0eWxlcycsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcbiAgLi4uYXBwbHlTdHlsZXMsXG4gIGVmZmVjdCh7c3RhdGV9KSB7XG4gICAgY29uc3QgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICAgIHBvcHBlcjoge1xuICAgICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgICAgbGVmdDogJzAnLFxuICAgICAgICB0b3A6ICcwJyxcbiAgICAgICAgbWFyZ2luOiAnMCcsXG4gICAgICB9LFxuICAgICAgYXJyb3c6IHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB9LFxuICAgICAgcmVmZXJlbmNlOiB7fSxcbiAgICB9O1xuXG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gICAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgICB9XG5cbiAgICAvLyBpbnRlbnRpb25hbGx5IHJldHVybiBubyBjbGVhbnVwIGZ1bmN0aW9uXG4gICAgLy8gcmV0dXJuICgpID0+IHsgLi4uIH1cbiAgfSxcbn07XG5cbmNvbnN0IGNyZWF0ZVNpbmdsZXRvbjogQ3JlYXRlU2luZ2xldG9uID0gKFxuICB0aXBweUluc3RhbmNlcyxcbiAgb3B0aW9uYWxQcm9wcyA9IHt9XG4pID0+IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKF9fREVWX18pIHtcbiAgICBlcnJvcldoZW4oXG4gICAgICAhQXJyYXkuaXNBcnJheSh0aXBweUluc3RhbmNlcyksXG4gICAgICBbXG4gICAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVNpbmdsZXRvbigpIG11c3QgYmUgYW4gYXJyYXkgb2YnLFxuICAgICAgICAndGlwcHkgaW5zdGFuY2VzLiBUaGUgcGFzc2VkIHZhbHVlIHdhcycsXG4gICAgICAgIFN0cmluZyh0aXBweUluc3RhbmNlcyksXG4gICAgICBdLmpvaW4oJyAnKVxuICAgICk7XG4gIH1cblxuICBsZXQgaW5kaXZpZHVhbEluc3RhbmNlcyA9IHRpcHB5SW5zdGFuY2VzO1xuICBsZXQgcmVmZXJlbmNlczogQXJyYXk8UmVmZXJlbmNlRWxlbWVudD4gPSBbXTtcbiAgbGV0IHRyaWdnZXJUYXJnZXRzOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICBsZXQgY3VycmVudFRhcmdldDogRWxlbWVudCB8IG51bGw7XG4gIGxldCBvdmVycmlkZXMgPSBvcHRpb25hbFByb3BzLm92ZXJyaWRlcztcbiAgbGV0IGludGVyY2VwdFNldFByb3BzQ2xlYW51cHM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG4gIGxldCBzaG93bk9uQ3JlYXRlID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gc2V0VHJpZ2dlclRhcmdldHMoKTogdm9pZCB7XG4gICAgdHJpZ2dlclRhcmdldHMgPSBpbmRpdmlkdWFsSW5zdGFuY2VzXG4gICAgICAubWFwKChpbnN0YW5jZSkgPT5cbiAgICAgICAgbm9ybWFsaXplVG9BcnJheShpbnN0YW5jZS5wcm9wcy50cmlnZ2VyVGFyZ2V0IHx8IGluc3RhbmNlLnJlZmVyZW5jZSlcbiAgICAgIClcbiAgICAgIC5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjLmNvbmNhdChpdGVtKSwgW10pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0UmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICByZWZlcmVuY2VzID0gaW5kaXZpZHVhbEluc3RhbmNlcy5tYXAoKGluc3RhbmNlKSA9PiBpbnN0YW5jZS5yZWZlcmVuY2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5hYmxlSW5zdGFuY2VzKGlzRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGluZGl2aWR1YWxJbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2UpID0+IHtcbiAgICAgIGlmIChpc0VuYWJsZWQpIHtcbiAgICAgICAgaW5zdGFuY2UuZW5hYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0YW5jZS5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcmNlcHRTZXRQcm9wcyhzaW5nbGV0b246IEluc3RhbmNlKTogQXJyYXk8KCkgPT4gdm9pZD4ge1xuICAgIHJldHVybiBpbmRpdmlkdWFsSW5zdGFuY2VzLm1hcCgoaW5zdGFuY2UpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU2V0UHJvcHMgPSBpbnN0YW5jZS5zZXRQcm9wcztcblxuICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMgPSAocHJvcHMpOiB2b2lkID0+IHtcbiAgICAgICAgb3JpZ2luYWxTZXRQcm9wcyhwcm9wcyk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLnJlZmVyZW5jZSA9PT0gY3VycmVudFRhcmdldCkge1xuICAgICAgICAgIHNpbmdsZXRvbi5zZXRQcm9wcyhwcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGluc3RhbmNlLnNldFByb3BzID0gb3JpZ2luYWxTZXRQcm9wcztcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvLyBoYXZlIHRvIHBhc3Mgc2luZ2xldG9uLCBhcyBpdCBtYXliZSB1bmRlZmluZWQgb24gZmlyc3QgY2FsbFxuICBmdW5jdGlvbiBwcmVwYXJlSW5zdGFuY2UoXG4gICAgc2luZ2xldG9uOiBJbnN0YW5jZSxcbiAgICB0YXJnZXQ6IFJlZmVyZW5jZUVsZW1lbnRcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0cmlnZ2VyVGFyZ2V0cy5pbmRleE9mKHRhcmdldCk7XG5cbiAgICAvLyBiYWlsLW91dFxuICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0O1xuXG4gICAgY29uc3Qgb3ZlcnJpZGVQcm9wczogUGFydGlhbDxQcm9wcz4gPSAob3ZlcnJpZGVzIHx8IFtdKVxuICAgICAgLmNvbmNhdCgnY29udGVudCcpXG4gICAgICAucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgICAgKGFjYyBhcyBhbnkpW3Byb3BdID0gaW5kaXZpZHVhbEluc3RhbmNlc1tpbmRleF0ucHJvcHNbcHJvcF07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG5cbiAgICBzaW5nbGV0b24uc2V0UHJvcHMoe1xuICAgICAgLi4ub3ZlcnJpZGVQcm9wcyxcbiAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3Q6XG4gICAgICAgIHR5cGVvZiBvdmVycmlkZVByb3BzLmdldFJlZmVyZW5jZUNsaWVudFJlY3QgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IG92ZXJyaWRlUHJvcHMuZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdFxuICAgICAgICAgIDogKCk6IENsaWVudFJlY3QgPT4gcmVmZXJlbmNlc1tpbmRleF0/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgIH0pO1xuICB9XG5cbiAgZW5hYmxlSW5zdGFuY2VzKGZhbHNlKTtcbiAgc2V0UmVmZXJlbmNlcygpO1xuICBzZXRUcmlnZ2VyVGFyZ2V0cygpO1xuXG4gIGNvbnN0IHBsdWdpbjogUGx1Z2luID0ge1xuICAgIGZuKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAgIGVuYWJsZUluc3RhbmNlcyh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IaWRkZW4oKTogdm9pZCB7XG4gICAgICAgICAgY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlKGluc3RhbmNlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzLnNob3dPbkNyZWF0ZSAmJiAhc2hvd25PbkNyZWF0ZSkge1xuICAgICAgICAgICAgc2hvd25PbkNyZWF0ZSA9IHRydWU7XG4gICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2hvdyhpbnN0YW5jZSk6IHZvaWQge1xuICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcy5zaG93T25DcmVhdGUgJiYgIXNob3duT25DcmVhdGUpIHtcbiAgICAgICAgICAgIHNob3duT25DcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcHJlcGFyZUluc3RhbmNlKGluc3RhbmNlLCByZWZlcmVuY2VzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uVHJpZ2dlcihpbnN0YW5jZSwgZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICBwcmVwYXJlSW5zdGFuY2UoaW5zdGFuY2UsIGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3Qgc2luZ2xldG9uID0gdGlwcHkoZGl2KCksIHtcbiAgICAuLi5yZW1vdmVQcm9wZXJ0aWVzKG9wdGlvbmFsUHJvcHMsIFsnb3ZlcnJpZGVzJ10pLFxuICAgIHBsdWdpbnM6IFtwbHVnaW4sIC4uLihvcHRpb25hbFByb3BzLnBsdWdpbnMgfHwgW10pXSxcbiAgICB0cmlnZ2VyVGFyZ2V0OiB0cmlnZ2VyVGFyZ2V0cyxcbiAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICAuLi5vcHRpb25hbFByb3BzLnBvcHBlck9wdGlvbnMsXG4gICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgLi4uKG9wdGlvbmFsUHJvcHMucG9wcGVyT3B0aW9ucz8ubW9kaWZpZXJzIHx8IFtdKSxcbiAgICAgICAgYXBwbHlTdHlsZXNNb2RpZmllcixcbiAgICAgIF0sXG4gICAgfSxcbiAgfSkgYXMgQ3JlYXRlU2luZ2xldG9uSW5zdGFuY2U8Q3JlYXRlU2luZ2xldG9uUHJvcHM+O1xuXG4gIGNvbnN0IG9yaWdpbmFsU2hvdyA9IHNpbmdsZXRvbi5zaG93O1xuXG4gIHNpbmdsZXRvbi5zaG93ID0gKHRhcmdldD86IFJlZmVyZW5jZUVsZW1lbnQgfCBJbnN0YW5jZSB8IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIG9yaWdpbmFsU2hvdygpO1xuXG4gICAgLy8gZmlyc3QgdGltZSwgc2hvd09uQ3JlYXRlIG9yIHByb2dyYW1tYXRpYyBjYWxsIHdpdGggbm8gcGFyYW1zXG4gICAgLy8gZGVmYXVsdCB0byBzaG93aW5nIGZpcnN0IGluc3RhbmNlXG4gICAgaWYgKCFjdXJyZW50VGFyZ2V0ICYmIHRhcmdldCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gcHJlcGFyZUluc3RhbmNlKHNpbmdsZXRvbiwgcmVmZXJlbmNlc1swXSk7XG4gICAgfVxuXG4gICAgLy8gdHJpZ2dlcmVkIGZyb20gZXZlbnQgKGRvIG5vdGhpbmcgYXMgcHJlcGFyZUluc3RhbmNlIGFscmVhZHkgY2FsbGVkIGJ5IG9uVHJpZ2dlcilcbiAgICAvLyBwcm9ncmFtbWF0aWMgY2FsbCB3aXRoIG5vIHBhcmFtcyB3aGVuIGFscmVhZHkgdmlzaWJsZSAoZG8gbm90aGluZyBhZ2FpbilcbiAgICBpZiAoY3VycmVudFRhcmdldCAmJiB0YXJnZXQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRhcmdldCBpcyBpbmRleCBvZiBpbnN0YW5jZVxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVmZXJlbmNlc1t0YXJnZXRdICYmIHByZXBhcmVJbnN0YW5jZShzaW5nbGV0b24sIHJlZmVyZW5jZXNbdGFyZ2V0XSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdGFyZ2V0IGlzIGEgY2hpbGQgdGlwcHkgaW5zdGFuY2VcbiAgICBpZiAoaW5kaXZpZHVhbEluc3RhbmNlcy5pbmRleE9mKHRhcmdldCBhcyBJbnN0YW5jZSkgPj0gMCkge1xuICAgICAgY29uc3QgcmVmID0gKHRhcmdldCBhcyBJbnN0YW5jZSkucmVmZXJlbmNlO1xuICAgICAgcmV0dXJuIHByZXBhcmVJbnN0YW5jZShzaW5nbGV0b24sIHJlZik7XG4gICAgfVxuXG4gICAgLy8gdGFyZ2V0IGlzIGEgUmVmZXJlbmNlRWxlbWVudFxuICAgIGlmIChyZWZlcmVuY2VzLmluZGV4T2YodGFyZ2V0IGFzIFJlZmVyZW5jZUVsZW1lbnQpID49IDApIHtcbiAgICAgIHJldHVybiBwcmVwYXJlSW5zdGFuY2Uoc2luZ2xldG9uLCB0YXJnZXQgYXMgUmVmZXJlbmNlRWxlbWVudCk7XG4gICAgfVxuICB9O1xuXG4gIHNpbmdsZXRvbi5zaG93TmV4dCA9ICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBmaXJzdCA9IHJlZmVyZW5jZXNbMF07XG4gICAgaWYgKCFjdXJyZW50VGFyZ2V0KSB7XG4gICAgICByZXR1cm4gc2luZ2xldG9uLnNob3coMCk7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gcmVmZXJlbmNlcy5pbmRleE9mKGN1cnJlbnRUYXJnZXQpO1xuICAgIHNpbmdsZXRvbi5zaG93KHJlZmVyZW5jZXNbaW5kZXggKyAxXSB8fCBmaXJzdCk7XG4gIH07XG5cbiAgc2luZ2xldG9uLnNob3dQcmV2aW91cyA9ICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBsYXN0ID0gcmVmZXJlbmNlc1tyZWZlcmVuY2VzLmxlbmd0aCAtIDFdO1xuICAgIGlmICghY3VycmVudFRhcmdldCkge1xuICAgICAgcmV0dXJuIHNpbmdsZXRvbi5zaG93KGxhc3QpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHJlZmVyZW5jZXMuaW5kZXhPZihjdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB0YXJnZXQgPSByZWZlcmVuY2VzW2luZGV4IC0gMV0gfHwgbGFzdDtcbiAgICBzaW5nbGV0b24uc2hvdyh0YXJnZXQpO1xuICB9O1xuXG4gIGNvbnN0IG9yaWdpbmFsU2V0UHJvcHMgPSBzaW5nbGV0b24uc2V0UHJvcHM7XG5cbiAgc2luZ2xldG9uLnNldFByb3BzID0gKHByb3BzKTogdm9pZCA9PiB7XG4gICAgb3ZlcnJpZGVzID0gcHJvcHMub3ZlcnJpZGVzIHx8IG92ZXJyaWRlcztcbiAgICBvcmlnaW5hbFNldFByb3BzKHByb3BzKTtcbiAgfTtcblxuICBzaW5nbGV0b24uc2V0SW5zdGFuY2VzID0gKG5leHRJbnN0YW5jZXMpOiB2b2lkID0+IHtcbiAgICBlbmFibGVJbnN0YW5jZXModHJ1ZSk7XG4gICAgaW50ZXJjZXB0U2V0UHJvcHNDbGVhbnVwcy5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG5cbiAgICBpbmRpdmlkdWFsSW5zdGFuY2VzID0gbmV4dEluc3RhbmNlcztcblxuICAgIGVuYWJsZUluc3RhbmNlcyhmYWxzZSk7XG4gICAgc2V0UmVmZXJlbmNlcygpO1xuICAgIHNldFRyaWdnZXJUYXJnZXRzKCk7XG4gICAgaW50ZXJjZXB0U2V0UHJvcHNDbGVhbnVwcyA9IGludGVyY2VwdFNldFByb3BzKHNpbmdsZXRvbik7XG5cbiAgICBzaW5nbGV0b24uc2V0UHJvcHMoe3RyaWdnZXJUYXJnZXQ6IHRyaWdnZXJUYXJnZXRzfSk7XG4gIH07XG5cbiAgaW50ZXJjZXB0U2V0UHJvcHNDbGVhbnVwcyA9IGludGVyY2VwdFNldFByb3BzKHNpbmdsZXRvbik7XG5cbiAgcmV0dXJuIHNpbmdsZXRvbjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVNpbmdsZXRvbjtcbiIsICJpbXBvcnQgdGlwcHkgZnJvbSAnLi4nO1xuaW1wb3J0IHtUT1VDSF9PUFRJT05TfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtkZWZhdWx0UHJvcHN9IGZyb20gJy4uL3Byb3BzJztcbmltcG9ydCB7SW5zdGFuY2UsIFByb3BzLCBUYXJnZXRzfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0xpc3RlbmVyT2JqZWN0fSBmcm9tICcuLi90eXBlcy1pbnRlcm5hbCc7XG5pbXBvcnQge25vcm1hbGl6ZVRvQXJyYXksIHJlbW92ZVByb3BlcnRpZXN9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7ZXJyb3JXaGVufSBmcm9tICcuLi92YWxpZGF0aW9uJztcblxuY29uc3QgQlVCQkxJTkdfRVZFTlRTX01BUCA9IHtcbiAgbW91c2VvdmVyOiAnbW91c2VlbnRlcicsXG4gIGZvY3VzaW46ICdmb2N1cycsXG4gIGNsaWNrOiAnY2xpY2snLFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVsZWdhdGUgaW5zdGFuY2UgdGhhdCBjb250cm9scyB0aGUgY3JlYXRpb24gb2YgdGlwcHkgaW5zdGFuY2VzXG4gKiBmb3IgY2hpbGQgZWxlbWVudHMgKGB0YXJnZXRgIENTUyBzZWxlY3RvcikuXG4gKi9cbmZ1bmN0aW9uIGRlbGVnYXRlKFxuICB0YXJnZXRzOiBUYXJnZXRzLFxuICBwcm9wczogUGFydGlhbDxQcm9wcz4gJiB7dGFyZ2V0OiBzdHJpbmd9XG4pOiBJbnN0YW5jZSB8IEluc3RhbmNlW10ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoX19ERVZfXykge1xuICAgIGVycm9yV2hlbihcbiAgICAgICEocHJvcHMgJiYgcHJvcHMudGFyZ2V0KSxcbiAgICAgIFtcbiAgICAgICAgJ1lvdSBtdXN0IHNwZWNpdHkgYSBgdGFyZ2V0YCBwcm9wIGluZGljYXRpbmcgYSBDU1Mgc2VsZWN0b3Igc3RyaW5nIG1hdGNoaW5nJyxcbiAgICAgICAgJ3RoZSB0YXJnZXQgZWxlbWVudHMgdGhhdCBzaG91bGQgcmVjZWl2ZSBhIHRpcHB5LicsXG4gICAgICBdLmpvaW4oJyAnKVxuICAgICk7XG4gIH1cblxuICBsZXQgbGlzdGVuZXJzOiBMaXN0ZW5lck9iamVjdFtdID0gW107XG4gIGxldCBjaGlsZFRpcHB5SW5zdGFuY2VzOiBJbnN0YW5jZVtdID0gW107XG4gIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHt0YXJnZXR9ID0gcHJvcHM7XG5cbiAgY29uc3QgbmF0aXZlUHJvcHMgPSByZW1vdmVQcm9wZXJ0aWVzKHByb3BzLCBbJ3RhcmdldCddKTtcbiAgY29uc3QgcGFyZW50UHJvcHMgPSB7Li4ubmF0aXZlUHJvcHMsIHRyaWdnZXI6ICdtYW51YWwnLCB0b3VjaDogZmFsc2V9O1xuICBjb25zdCBjaGlsZFByb3BzID0ge1xuICAgIHRvdWNoOiBkZWZhdWx0UHJvcHMudG91Y2gsXG4gICAgLi4ubmF0aXZlUHJvcHMsXG4gICAgc2hvd09uQ3JlYXRlOiB0cnVlLFxuICB9O1xuXG4gIGNvbnN0IHJldHVyblZhbHVlID0gdGlwcHkodGFyZ2V0cywgcGFyZW50UHJvcHMpO1xuICBjb25zdCBub3JtYWxpemVkUmV0dXJuVmFsdWUgPSBub3JtYWxpemVUb0FycmF5KHJldHVyblZhbHVlKTtcblxuICBmdW5jdGlvbiBvblRyaWdnZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCFldmVudC50YXJnZXQgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXROb2RlID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KHRhcmdldCk7XG5cbiAgICBpZiAoIXRhcmdldE5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgcmVsZXZhbnQgdHJpZ2dlciB3aXRoIGZhbGxiYWNrczpcbiAgICAvLyAxLiBDaGVjayBgZGF0YS10aXBweS10cmlnZ2VyYCBhdHRyaWJ1dGUgb24gdGFyZ2V0IG5vZGVcbiAgICAvLyAyLiBGYWxsYmFjayB0byBgdHJpZ2dlcmAgcGFzc2VkIHRvIGBkZWxlZ2F0ZSgpYFxuICAgIC8vIDMuIEZhbGxiYWNrIHRvIGBkZWZhdWx0UHJvcHMudHJpZ2dlcmBcbiAgICBjb25zdCB0cmlnZ2VyID1cbiAgICAgIHRhcmdldE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXRpcHB5LXRyaWdnZXInKSB8fFxuICAgICAgcHJvcHMudHJpZ2dlciB8fFxuICAgICAgZGVmYXVsdFByb3BzLnRyaWdnZXI7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHRhcmdldE5vZGUuX3RpcHB5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b3VjaHN0YXJ0JyAmJiB0eXBlb2YgY2hpbGRQcm9wcy50b3VjaCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZXZlbnQudHlwZSAhPT0gJ3RvdWNoc3RhcnQnICYmXG4gICAgICB0cmlnZ2VyLmluZGV4T2YoKEJVQkJMSU5HX0VWRU5UU19NQVAgYXMgYW55KVtldmVudC50eXBlXSkgPCAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aXBweSh0YXJnZXROb2RlLCBjaGlsZFByb3BzKTtcblxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgY2hpbGRUaXBweUluc3RhbmNlcyA9IGNoaWxkVGlwcHlJbnN0YW5jZXMuY29uY2F0KGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbihcbiAgICBub2RlOiBFbGVtZW50LFxuICAgIGV2ZW50VHlwZTogc3RyaW5nLFxuICAgIGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIsXG4gICAgb3B0aW9uczogYm9vbGVhbiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gZmFsc2VcbiAgKTogdm9pZCB7XG4gICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgbGlzdGVuZXJzLnB1c2goe25vZGUsIGV2ZW50VHlwZSwgaGFuZGxlciwgb3B0aW9uc30pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcnMoaW5zdGFuY2U6IEluc3RhbmNlKTogdm9pZCB7XG4gICAgY29uc3Qge3JlZmVyZW5jZX0gPSBpbnN0YW5jZTtcblxuICAgIG9uKHJlZmVyZW5jZSwgJ3RvdWNoc3RhcnQnLCBvblRyaWdnZXIsIFRPVUNIX09QVElPTlMpO1xuICAgIG9uKHJlZmVyZW5jZSwgJ21vdXNlb3ZlcicsIG9uVHJpZ2dlcik7XG4gICAgb24ocmVmZXJlbmNlLCAnZm9jdXNpbicsIG9uVHJpZ2dlcik7XG4gICAgb24ocmVmZXJlbmNlLCAnY2xpY2snLCBvblRyaWdnZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgbGlzdGVuZXJzLmZvckVhY2goKHtub2RlLCBldmVudFR5cGUsIGhhbmRsZXIsIG9wdGlvbnN9OiBMaXN0ZW5lck9iamVjdCkgPT4ge1xuICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgfSk7XG4gICAgbGlzdGVuZXJzID0gW107XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseU11dGF0aW9ucyhpbnN0YW5jZTogSW5zdGFuY2UpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBpbnN0YW5jZS5kZXN0cm95O1xuICAgIGNvbnN0IG9yaWdpbmFsRW5hYmxlID0gaW5zdGFuY2UuZW5hYmxlO1xuICAgIGNvbnN0IG9yaWdpbmFsRGlzYWJsZSA9IGluc3RhbmNlLmRpc2FibGU7XG5cbiAgICBpbnN0YW5jZS5kZXN0cm95ID0gKHNob3VsZERlc3Ryb3lDaGlsZEluc3RhbmNlcyA9IHRydWUpOiB2b2lkID0+IHtcbiAgICAgIGlmIChzaG91bGREZXN0cm95Q2hpbGRJbnN0YW5jZXMpIHtcbiAgICAgICAgY2hpbGRUaXBweUluc3RhbmNlcy5mb3JFYWNoKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgIGluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVGlwcHlJbnN0YW5jZXMgPSBbXTtcblxuICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIG9yaWdpbmFsRGVzdHJveSgpO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5lbmFibGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBvcmlnaW5hbEVuYWJsZSgpO1xuICAgICAgY2hpbGRUaXBweUluc3RhbmNlcy5mb3JFYWNoKChpbnN0YW5jZSkgPT4gaW5zdGFuY2UuZW5hYmxlKCkpO1xuICAgICAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UuZGlzYWJsZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIG9yaWdpbmFsRGlzYWJsZSgpO1xuICAgICAgY2hpbGRUaXBweUluc3RhbmNlcy5mb3JFYWNoKChpbnN0YW5jZSkgPT4gaW5zdGFuY2UuZGlzYWJsZSgpKTtcbiAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcnMoaW5zdGFuY2UpO1xuICB9XG5cbiAgbm9ybWFsaXplZFJldHVyblZhbHVlLmZvckVhY2goYXBwbHlNdXRhdGlvbnMpO1xuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVsZWdhdGU7XG4iLCAiaW1wb3J0IHtCQUNLRFJPUF9DTEFTU30gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7ZGl2LCBzZXRWaXNpYmlsaXR5U3RhdGV9IGZyb20gJy4uL2RvbS11dGlscyc7XG5pbXBvcnQge2dldENoaWxkcmVufSBmcm9tICcuLi90ZW1wbGF0ZSc7XG5pbXBvcnQge0FuaW1hdGVGaWxsfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Vycm9yV2hlbn0gZnJvbSAnLi4vdmFsaWRhdGlvbic7XG5cbmNvbnN0IGFuaW1hdGVGaWxsOiBBbmltYXRlRmlsbCA9IHtcbiAgbmFtZTogJ2FuaW1hdGVGaWxsJyxcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZm4oaW5zdGFuY2UpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKCFpbnN0YW5jZS5wcm9wcy5yZW5kZXI/LiQkdGlwcHkpIHtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIGVycm9yV2hlbihcbiAgICAgICAgICBpbnN0YW5jZS5wcm9wcy5hbmltYXRlRmlsbCxcbiAgICAgICAgICAnVGhlIGBhbmltYXRlRmlsbGAgcGx1Z2luIHJlcXVpcmVzIHRoZSBkZWZhdWx0IHJlbmRlciBmdW5jdGlvbi4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCB7Ym94LCBjb250ZW50fSA9IGdldENoaWxkcmVuKGluc3RhbmNlLnBvcHBlcik7XG5cbiAgICBjb25zdCBiYWNrZHJvcCA9IGluc3RhbmNlLnByb3BzLmFuaW1hdGVGaWxsXG4gICAgICA/IGNyZWF0ZUJhY2tkcm9wRWxlbWVudCgpXG4gICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb25DcmVhdGUoKTogdm9pZCB7XG4gICAgICAgIGlmIChiYWNrZHJvcCkge1xuICAgICAgICAgIGJveC5pbnNlcnRCZWZvcmUoYmFja2Ryb3AsIGJveC5maXJzdEVsZW1lbnRDaGlsZCEpO1xuICAgICAgICAgIGJveC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYW5pbWF0ZWZpbGwnLCAnJyk7XG4gICAgICAgICAgYm94LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cbiAgICAgICAgICBpbnN0YW5jZS5zZXRQcm9wcyh7YXJyb3c6IGZhbHNlLCBhbmltYXRpb246ICdzaGlmdC1hd2F5J30pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25Nb3VudCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGJhY2tkcm9wKSB7XG4gICAgICAgICAgY29uc3Qge3RyYW5zaXRpb25EdXJhdGlvbn0gPSBib3guc3R5bGU7XG4gICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBOdW1iZXIodHJhbnNpdGlvbkR1cmF0aW9uLnJlcGxhY2UoJ21zJywgJycpKTtcblxuICAgICAgICAgIC8vIFRoZSBjb250ZW50IHNob3VsZCBmYWRlIGluIGFmdGVyIHRoZSBiYWNrZHJvcCBoYXMgbW9zdGx5IGZpbGxlZCB0aGVcbiAgICAgICAgICAvLyB0b29sdGlwIGVsZW1lbnQuIGBjbGlwLXBhdGhgIGlzIHRoZSBvdGhlciBhbHRlcm5hdGl2ZSBidXQgaXMgbm90XG4gICAgICAgICAgLy8gd2VsbC1zdXBwb3J0ZWQgYW5kIGlzIGJ1Z2d5IG9uIHNvbWUgZGV2aWNlcy5cbiAgICAgICAgICBjb250ZW50LnN0eWxlLnRyYW5zaXRpb25EZWxheSA9IGAke01hdGgucm91bmQoZHVyYXRpb24gLyAxMCl9bXNgO1xuXG4gICAgICAgICAgYmFja2Ryb3Auc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgICAgICAgIHNldFZpc2liaWxpdHlTdGF0ZShbYmFja2Ryb3BdLCAndmlzaWJsZScpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25TaG93KCk6IHZvaWQge1xuICAgICAgICBpZiAoYmFja2Ryb3ApIHtcbiAgICAgICAgICBiYWNrZHJvcC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnMG1zJztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uSGlkZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGJhY2tkcm9wKSB7XG4gICAgICAgICAgc2V0VmlzaWJpbGl0eVN0YXRlKFtiYWNrZHJvcF0sICdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgYW5pbWF0ZUZpbGw7XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhY2tkcm9wRWxlbWVudCgpOiBIVE1MRGl2RWxlbWVudCB7XG4gIGNvbnN0IGJhY2tkcm9wID0gZGl2KCk7XG4gIGJhY2tkcm9wLmNsYXNzTmFtZSA9IEJBQ0tEUk9QX0NMQVNTO1xuICBzZXRWaXNpYmlsaXR5U3RhdGUoW2JhY2tkcm9wXSwgJ2hpZGRlbicpO1xuICByZXR1cm4gYmFja2Ryb3A7XG59XG4iLCAiaW1wb3J0IHtnZXRPd25lckRvY3VtZW50LCBpc01vdXNlRXZlbnR9IGZyb20gJy4uL2RvbS11dGlscyc7XG5pbXBvcnQge0ZvbGxvd0N1cnNvciwgSW5zdGFuY2V9IGZyb20gJy4uL3R5cGVzJztcblxubGV0IG1vdXNlQ29vcmRzID0ge2NsaWVudFg6IDAsIGNsaWVudFk6IDB9O1xubGV0IGFjdGl2ZUluc3RhbmNlczogQXJyYXk8e2luc3RhbmNlOiBJbnN0YW5jZTsgZG9jOiBEb2N1bWVudH0+ID0gW107XG5cbmZ1bmN0aW9uIHN0b3JlTW91c2VDb29yZHMoe2NsaWVudFgsIGNsaWVudFl9OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gIG1vdXNlQ29vcmRzID0ge2NsaWVudFgsIGNsaWVudFl9O1xufVxuXG5mdW5jdGlvbiBhZGRNb3VzZUNvb3Jkc0xpc3RlbmVyKGRvYzogRG9jdW1lbnQpOiB2b2lkIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN0b3JlTW91c2VDb29yZHMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNb3VzZUNvb3Jkc0xpc3RlbmVyKGRvYzogRG9jdW1lbnQpOiB2b2lkIHtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN0b3JlTW91c2VDb29yZHMpO1xufVxuXG5jb25zdCBmb2xsb3dDdXJzb3I6IEZvbGxvd0N1cnNvciA9IHtcbiAgbmFtZTogJ2ZvbGxvd0N1cnNvcicsXG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGZuKGluc3RhbmNlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gaW5zdGFuY2UucmVmZXJlbmNlO1xuICAgIGNvbnN0IGRvYyA9IGdldE93bmVyRG9jdW1lbnQoaW5zdGFuY2UucHJvcHMudHJpZ2dlclRhcmdldCB8fCByZWZlcmVuY2UpO1xuXG4gICAgbGV0IGlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTtcbiAgICBsZXQgd2FzRm9jdXNFdmVudCA9IGZhbHNlO1xuICAgIGxldCBpc1VubW91bnRlZCA9IHRydWU7XG4gICAgbGV0IHByZXZQcm9wcyA9IGluc3RhbmNlLnByb3BzO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNJbml0aWFsQmVoYXZpb3IoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbnN0YW5jZS5wcm9wcy5mb2xsb3dDdXJzb3IgPT09ICdpbml0aWFsJyAmJiBpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnNldEdldFJlZmVyZW5jZUNsaWVudFJlY3QoKTogdm9pZCB7XG4gICAgICBpc0ludGVybmFsVXBkYXRlID0gdHJ1ZTtcbiAgICAgIGluc3RhbmNlLnNldFByb3BzKHtnZXRSZWZlcmVuY2VDbGllbnRSZWN0OiBudWxsfSk7XG4gICAgICBpc0ludGVybmFsVXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgIC8vIElmIHRoZSBpbnN0YW5jZSBpcyBpbnRlcmFjdGl2ZSwgYXZvaWQgdXBkYXRpbmcgdGhlIHBvc2l0aW9uIHVubGVzcyBpdCdzXG4gICAgICAvLyBvdmVyIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgICAgY29uc3QgaXNDdXJzb3JPdmVyUmVmZXJlbmNlID0gZXZlbnQudGFyZ2V0XG4gICAgICAgID8gcmVmZXJlbmNlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKVxuICAgICAgICA6IHRydWU7XG4gICAgICBjb25zdCB7Zm9sbG93Q3Vyc29yfSA9IGluc3RhbmNlLnByb3BzO1xuICAgICAgY29uc3Qge2NsaWVudFgsIGNsaWVudFl9ID0gZXZlbnQ7XG5cbiAgICAgIGNvbnN0IHJlY3QgPSByZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCByZWxhdGl2ZVggPSBjbGllbnRYIC0gcmVjdC5sZWZ0O1xuICAgICAgY29uc3QgcmVsYXRpdmVZID0gY2xpZW50WSAtIHJlY3QudG9wO1xuXG4gICAgICBpZiAoaXNDdXJzb3JPdmVyUmVmZXJlbmNlIHx8ICFpbnN0YW5jZS5wcm9wcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICBpbnN0YW5jZS5zZXRQcm9wcyh7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZSAtIHVubmVlZGVkIERPTVJlY3QgcHJvcGVydGllc1xuICAgICAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3QoKSB7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gcmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBsZXQgeCA9IGNsaWVudFg7XG4gICAgICAgICAgICBsZXQgeSA9IGNsaWVudFk7XG5cbiAgICAgICAgICAgIGlmIChmb2xsb3dDdXJzb3IgPT09ICdpbml0aWFsJykge1xuICAgICAgICAgICAgICB4ID0gcmVjdC5sZWZ0ICsgcmVsYXRpdmVYO1xuICAgICAgICAgICAgICB5ID0gcmVjdC50b3AgKyByZWxhdGl2ZVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZvbGxvd0N1cnNvciA9PT0gJ2hvcml6b250YWwnID8gcmVjdC50b3AgOiB5O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBmb2xsb3dDdXJzb3IgPT09ICd2ZXJ0aWNhbCcgPyByZWN0LnJpZ2h0IDogeDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGZvbGxvd0N1cnNvciA9PT0gJ2hvcml6b250YWwnID8gcmVjdC5ib3R0b20gOiB5O1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGZvbGxvd0N1cnNvciA9PT0gJ3ZlcnRpY2FsJyA/IHJlY3QubGVmdCA6IHg7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gICAgICAgICAgICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgIGlmIChpbnN0YW5jZS5wcm9wcy5mb2xsb3dDdXJzb3IpIHtcbiAgICAgICAgYWN0aXZlSW5zdGFuY2VzLnB1c2goe2luc3RhbmNlLCBkb2N9KTtcbiAgICAgICAgYWRkTW91c2VDb29yZHNMaXN0ZW5lcihkb2MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICBhY3RpdmVJbnN0YW5jZXMgPSBhY3RpdmVJbnN0YW5jZXMuZmlsdGVyKFxuICAgICAgICAoZGF0YSkgPT4gZGF0YS5pbnN0YW5jZSAhPT0gaW5zdGFuY2VcbiAgICAgICk7XG5cbiAgICAgIGlmIChhY3RpdmVJbnN0YW5jZXMuZmlsdGVyKChkYXRhKSA9PiBkYXRhLmRvYyA9PT0gZG9jKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlTW91c2VDb29yZHNMaXN0ZW5lcihkb2MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvbkNyZWF0ZTogY3JlYXRlLFxuICAgICAgb25EZXN0cm95OiBkZXN0cm95LFxuICAgICAgb25CZWZvcmVVcGRhdGUoKTogdm9pZCB7XG4gICAgICAgIHByZXZQcm9wcyA9IGluc3RhbmNlLnByb3BzO1xuICAgICAgfSxcbiAgICAgIG9uQWZ0ZXJVcGRhdGUoXywge2ZvbGxvd0N1cnNvcn0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzSW50ZXJuYWxVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9sbG93Q3Vyc29yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBwcmV2UHJvcHMuZm9sbG93Q3Vyc29yICE9PSBmb2xsb3dDdXJzb3JcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVzdHJveSgpO1xuXG4gICAgICAgICAgaWYgKGZvbGxvd0N1cnNvcikge1xuICAgICAgICAgICAgY3JlYXRlKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUuaXNNb3VudGVkICYmXG4gICAgICAgICAgICAgICF3YXNGb2N1c0V2ZW50ICYmXG4gICAgICAgICAgICAgICFnZXRJc0luaXRpYWxCZWhhdmlvcigpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHVuc2V0R2V0UmVmZXJlbmNlQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uTW91bnQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcy5mb2xsb3dDdXJzb3IgJiYgIXdhc0ZvY3VzRXZlbnQpIHtcbiAgICAgICAgICBpZiAoaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlKG1vdXNlQ29vcmRzIGFzIE1vdXNlRXZlbnQpO1xuICAgICAgICAgICAgaXNVbm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWdldElzSW5pdGlhbEJlaGF2aW9yKCkpIHtcbiAgICAgICAgICAgIGFkZExpc3RlbmVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25UcmlnZ2VyKF8sIGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChpc01vdXNlRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgbW91c2VDb29yZHMgPSB7Y2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WX07XG4gICAgICAgIH1cbiAgICAgICAgd2FzRm9jdXNFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdmb2N1cyc7XG4gICAgICB9LFxuICAgICAgb25IaWRkZW4oKTogdm9pZCB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcy5mb2xsb3dDdXJzb3IpIHtcbiAgICAgICAgICB1bnNldEdldFJlZmVyZW5jZUNsaWVudFJlY3QoKTtcbiAgICAgICAgICByZW1vdmVMaXN0ZW5lcigpO1xuICAgICAgICAgIGlzVW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9sbG93Q3Vyc29yO1xuIiwgImltcG9ydCB7TW9kaWZpZXIsIFBsYWNlbWVudH0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuaW1wb3J0IHtpc01vdXNlRXZlbnR9IGZyb20gJy4uL2RvbS11dGlscyc7XG5pbXBvcnQge0Jhc2VQbGFjZW1lbnQsIElubGluZVBvc2l0aW9uaW5nLCBQcm9wc30gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthcnJheUZyb20sIGdldEJhc2VQbGFjZW1lbnR9IGZyb20gJy4uL3V0aWxzJztcblxuZnVuY3Rpb24gZ2V0UHJvcHMocHJvcHM6IFByb3BzLCBtb2RpZmllcjogTW9kaWZpZXI8YW55LCBhbnk+KTogUGFydGlhbDxQcm9wcz4ge1xuICByZXR1cm4ge1xuICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgIC4uLnByb3BzLnBvcHBlck9wdGlvbnMsXG4gICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgLi4uKHByb3BzLnBvcHBlck9wdGlvbnM/Lm1vZGlmaWVycyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICAgICh7bmFtZX0pID0+IG5hbWUgIT09IG1vZGlmaWVyLm5hbWVcbiAgICAgICAgKSxcbiAgICAgICAgbW9kaWZpZXIsXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IGlubGluZVBvc2l0aW9uaW5nOiBJbmxpbmVQb3NpdGlvbmluZyA9IHtcbiAgbmFtZTogJ2lubGluZVBvc2l0aW9uaW5nJyxcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZm4oaW5zdGFuY2UpIHtcbiAgICBjb25zdCB7cmVmZXJlbmNlfSA9IGluc3RhbmNlO1xuXG4gICAgZnVuY3Rpb24gaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICEhaW5zdGFuY2UucHJvcHMuaW5saW5lUG9zaXRpb25pbmc7XG4gICAgfVxuXG4gICAgbGV0IHBsYWNlbWVudDogUGxhY2VtZW50O1xuICAgIGxldCBjdXJzb3JSZWN0SW5kZXggPSAtMTtcbiAgICBsZXQgaXNJbnRlcm5hbFVwZGF0ZSA9IGZhbHNlO1xuICAgIGxldCB0cmllZFBsYWNlbWVudHM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgIGNvbnN0IG1vZGlmaWVyOiBNb2RpZmllcjxcbiAgICAgICd0aXBweUlubGluZVBvc2l0aW9uaW5nJyxcbiAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgPiA9IHtcbiAgICAgIG5hbWU6ICd0aXBweUlubGluZVBvc2l0aW9uaW5nJyxcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBwaGFzZTogJ2FmdGVyV3JpdGUnLFxuICAgICAgZm4oe3N0YXRlfSkge1xuICAgICAgICBpZiAoaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICBpZiAodHJpZWRQbGFjZW1lbnRzLmluZGV4T2Yoc3RhdGUucGxhY2VtZW50KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRyaWVkUGxhY2VtZW50cyA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBsYWNlbWVudCAhPT0gc3RhdGUucGxhY2VtZW50ICYmXG4gICAgICAgICAgICB0cmllZFBsYWNlbWVudHMuaW5kZXhPZihzdGF0ZS5wbGFjZW1lbnQpID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdHJpZWRQbGFjZW1lbnRzLnB1c2goc3RhdGUucGxhY2VtZW50KTtcbiAgICAgICAgICAgIGluc3RhbmNlLnNldFByb3BzKHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSAtIHVubmVlZGVkIERPTVJlY3QgcHJvcGVydGllc1xuICAgICAgICAgICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0OiAoKSA9PlxuICAgICAgICAgICAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3Qoc3RhdGUucGxhY2VtZW50KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBsYWNlbWVudCA9IHN0YXRlLnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdChwbGFjZW1lbnQ6IFBsYWNlbWVudCk6IFBhcnRpYWw8RE9NUmVjdD4ge1xuICAgICAgcmV0dXJuIGdldElubGluZUJvdW5kaW5nQ2xpZW50UmVjdChcbiAgICAgICAgZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpLFxuICAgICAgICByZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIGFycmF5RnJvbShyZWZlcmVuY2UuZ2V0Q2xpZW50UmVjdHMoKSksXG4gICAgICAgIGN1cnNvclJlY3RJbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRJbnRlcm5hbFByb3BzKHBhcnRpYWxQcm9wczogUGFydGlhbDxQcm9wcz4pOiB2b2lkIHtcbiAgICAgIGlzSW50ZXJuYWxVcGRhdGUgPSB0cnVlO1xuICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMocGFydGlhbFByb3BzKTtcbiAgICAgIGlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRNb2RpZmllcigpOiB2b2lkIHtcbiAgICAgIGlmICghaXNJbnRlcm5hbFVwZGF0ZSkge1xuICAgICAgICBzZXRJbnRlcm5hbFByb3BzKGdldFByb3BzKGluc3RhbmNlLnByb3BzLCBtb2RpZmllcikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvbkNyZWF0ZTogYWRkTW9kaWZpZXIsXG4gICAgICBvbkFmdGVyVXBkYXRlOiBhZGRNb2RpZmllcixcbiAgICAgIG9uVHJpZ2dlcihfLCBldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNNb3VzZUV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgIGNvbnN0IHJlY3RzID0gYXJyYXlGcm9tKGluc3RhbmNlLnJlZmVyZW5jZS5nZXRDbGllbnRSZWN0cygpKTtcbiAgICAgICAgICBjb25zdCBjdXJzb3JSZWN0ID0gcmVjdHMuZmluZChcbiAgICAgICAgICAgIChyZWN0KSA9PlxuICAgICAgICAgICAgICByZWN0LmxlZnQgLSAyIDw9IGV2ZW50LmNsaWVudFggJiZcbiAgICAgICAgICAgICAgcmVjdC5yaWdodCArIDIgPj0gZXZlbnQuY2xpZW50WCAmJlxuICAgICAgICAgICAgICByZWN0LnRvcCAtIDIgPD0gZXZlbnQuY2xpZW50WSAmJlxuICAgICAgICAgICAgICByZWN0LmJvdHRvbSArIDIgPj0gZXZlbnQuY2xpZW50WVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSByZWN0cy5pbmRleE9mKGN1cnNvclJlY3QpO1xuICAgICAgICAgIGN1cnNvclJlY3RJbmRleCA9IGluZGV4ID4gLTEgPyBpbmRleCA6IGN1cnNvclJlY3RJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uSGlkZGVuKCk6IHZvaWQge1xuICAgICAgICBjdXJzb3JSZWN0SW5kZXggPSAtMTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlubGluZVBvc2l0aW9uaW5nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5saW5lQm91bmRpbmdDbGllbnRSZWN0KFxuICBjdXJyZW50QmFzZVBsYWNlbWVudDogQmFzZVBsYWNlbWVudCB8IG51bGwsXG4gIGJvdW5kaW5nUmVjdDogRE9NUmVjdCxcbiAgY2xpZW50UmVjdHM6IERPTVJlY3RbXSxcbiAgY3Vyc29yUmVjdEluZGV4OiBudW1iZXJcbik6IHtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIHJpZ2h0OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufSB7XG4gIC8vIE5vdCBhbiBpbmxpbmUgZWxlbWVudCwgb3IgcGxhY2VtZW50IGlzIG5vdCB5ZXQga25vd25cbiAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA8IDIgfHwgY3VycmVudEJhc2VQbGFjZW1lbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYm91bmRpbmdSZWN0O1xuICB9XG5cbiAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkXG4gIGlmIChcbiAgICBjbGllbnRSZWN0cy5sZW5ndGggPT09IDIgJiZcbiAgICBjdXJzb3JSZWN0SW5kZXggPj0gMCAmJlxuICAgIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodFxuICApIHtcbiAgICByZXR1cm4gY2xpZW50UmVjdHNbY3Vyc29yUmVjdEluZGV4XSB8fCBib3VuZGluZ1JlY3Q7XG4gIH1cblxuICBzd2l0Y2ggKGN1cnJlbnRCYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOiB7XG4gICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBpc1RvcCA9IGN1cnJlbnRCYXNlUGxhY2VtZW50ID09PSAndG9wJztcblxuICAgICAgY29uc3QgdG9wID0gZmlyc3RSZWN0LnRvcDtcbiAgICAgIGNvbnN0IGJvdHRvbSA9IGxhc3RSZWN0LmJvdHRvbTtcbiAgICAgIGNvbnN0IGxlZnQgPSBpc1RvcCA/IGZpcnN0UmVjdC5sZWZ0IDogbGFzdFJlY3QubGVmdDtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gaXNUb3AgPyBmaXJzdFJlY3QucmlnaHQgOiBsYXN0UmVjdC5yaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuXG4gICAgICByZXR1cm4ge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgd2lkdGgsIGhlaWdodH07XG4gICAgfVxuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0Jzoge1xuICAgICAgY29uc3QgbWluTGVmdCA9IE1hdGgubWluKC4uLmNsaWVudFJlY3RzLm1hcCgocmVjdHMpID0+IHJlY3RzLmxlZnQpKTtcbiAgICAgIGNvbnN0IG1heFJpZ2h0ID0gTWF0aC5tYXgoLi4uY2xpZW50UmVjdHMubWFwKChyZWN0cykgPT4gcmVjdHMucmlnaHQpKTtcbiAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcigocmVjdCkgPT5cbiAgICAgICAgY3VycmVudEJhc2VQbGFjZW1lbnQgPT09ICdsZWZ0J1xuICAgICAgICAgID8gcmVjdC5sZWZ0ID09PSBtaW5MZWZ0XG4gICAgICAgICAgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgY29uc3QgbGVmdCA9IG1pbkxlZnQ7XG4gICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG5cbiAgICAgIHJldHVybiB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LCB3aWR0aCwgaGVpZ2h0fTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIGJvdW5kaW5nUmVjdDtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQge1ZpcnR1YWxFbGVtZW50fSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5pbXBvcnQge1JlZmVyZW5jZUVsZW1lbnQsIFN0aWNreX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBzdGlja3k6IFN0aWNreSA9IHtcbiAgbmFtZTogJ3N0aWNreScsXG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGZuKGluc3RhbmNlKSB7XG4gICAgY29uc3Qge3JlZmVyZW5jZSwgcG9wcGVyfSA9IGluc3RhbmNlO1xuXG4gICAgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlKCk6IFJlZmVyZW5jZUVsZW1lbnQgfCBWaXJ0dWFsRWxlbWVudCB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UucG9wcGVySW5zdGFuY2VcbiAgICAgICAgPyBpbnN0YW5jZS5wb3BwZXJJbnN0YW5jZS5zdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2VcbiAgICAgICAgOiByZWZlcmVuY2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkQ2hlY2sodmFsdWU6ICdyZWZlcmVuY2UnIHwgJ3BvcHBlcicpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9wcy5zdGlja3kgPT09IHRydWUgfHwgaW5zdGFuY2UucHJvcHMuc3RpY2t5ID09PSB2YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgcHJldlJlZlJlY3Q6IENsaWVudFJlY3QgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcHJldlBvcFJlY3Q6IENsaWVudFJlY3QgfCBudWxsID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgY29uc3QgY3VycmVudFJlZlJlY3QgPSBzaG91bGRDaGVjaygncmVmZXJlbmNlJylcbiAgICAgICAgPyBnZXRSZWZlcmVuY2UoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBjdXJyZW50UG9wUmVjdCA9IHNob3VsZENoZWNrKCdwb3BwZXInKVxuICAgICAgICA/IHBvcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICA6IG51bGw7XG5cbiAgICAgIGlmIChcbiAgICAgICAgKGN1cnJlbnRSZWZSZWN0ICYmIGFyZVJlY3RzRGlmZmVyZW50KHByZXZSZWZSZWN0LCBjdXJyZW50UmVmUmVjdCkpIHx8XG4gICAgICAgIChjdXJyZW50UG9wUmVjdCAmJiBhcmVSZWN0c0RpZmZlcmVudChwcmV2UG9wUmVjdCwgY3VycmVudFBvcFJlY3QpKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5wb3BwZXJJbnN0YW5jZSkge1xuICAgICAgICAgIGluc3RhbmNlLnBvcHBlckluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXZSZWZSZWN0ID0gY3VycmVudFJlZlJlY3Q7XG4gICAgICBwcmV2UG9wUmVjdCA9IGN1cnJlbnRQb3BSZWN0O1xuXG4gICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUuaXNNb3VudGVkKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVQb3NpdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9uTW91bnQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcy5zdGlja3kpIHtcbiAgICAgICAgICB1cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdGlja3k7XG5cbmZ1bmN0aW9uIGFyZVJlY3RzRGlmZmVyZW50KFxuICByZWN0QTogQ2xpZW50UmVjdCB8IG51bGwsXG4gIHJlY3RCOiBDbGllbnRSZWN0IHwgbnVsbFxuKTogYm9vbGVhbiB7XG4gIGlmIChyZWN0QSAmJiByZWN0Qikge1xuICAgIHJldHVybiAoXG4gICAgICByZWN0QS50b3AgIT09IHJlY3RCLnRvcCB8fFxuICAgICAgcmVjdEEucmlnaHQgIT09IHJlY3RCLnJpZ2h0IHx8XG4gICAgICByZWN0QS5ib3R0b20gIT09IHJlY3RCLmJvdHRvbSB8fFxuICAgICAgcmVjdEEubGVmdCAhPT0gcmVjdEIubGVmdFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJpbXBvcnQgdGlwcHkgZnJvbSAnLi4vc3JjJztcbmltcG9ydCB7cmVuZGVyfSBmcm9tICcuLi9zcmMvdGVtcGxhdGUnO1xuXG50aXBweS5zZXREZWZhdWx0UHJvcHMoe3JlbmRlcn0pO1xuXG5leHBvcnQge2RlZmF1bHQsIGhpZGVBbGx9IGZyb20gJy4uL3NyYyc7XG5leHBvcnQge2RlZmF1bHQgYXMgY3JlYXRlU2luZ2xldG9ufSBmcm9tICcuLi9zcmMvYWRkb25zL2NyZWF0ZVNpbmdsZXRvbic7XG5leHBvcnQge2RlZmF1bHQgYXMgZGVsZWdhdGV9IGZyb20gJy4uL3NyYy9hZGRvbnMvZGVsZWdhdGUnO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFuaW1hdGVGaWxsfSBmcm9tICcuLi9zcmMvcGx1Z2lucy9hbmltYXRlRmlsbCc7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9sbG93Q3Vyc29yfSBmcm9tICcuLi9zcmMvcGx1Z2lucy9mb2xsb3dDdXJzb3InO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGlubGluZVBvc2l0aW9uaW5nfSBmcm9tICcuLi9zcmMvcGx1Z2lucy9pbmxpbmVQb3NpdGlvbmluZyc7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RpY2t5fSBmcm9tICcuLi9zcmMvcGx1Z2lucy9zdGlja3knO1xuZXhwb3J0IHtST1VORF9BUlJPVyBhcyByb3VuZEFycm93fSBmcm9tICcuLi9zcmMvY29uc3RhbnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxvRkFBQUEsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1BQU0sT0FBT0QsWUFBUSxZQUFZQSxRQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSw4RUFBQUUs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LE9BQU87QUFDeEJwQixhQUFPUSxPQUFPVCxNQUFNRyxTQUFTa0IsTUFBTWYsT0FBT1UsY0FBY0ssS0FBeEQ7SUFDRDtFQUlGO0FBekJ3RSxDQUFBO0FNaEIzRXpFLE1BQU1tb0IsZ0JBQWdCO0VBQUNOO0FBQUQsQ0FBdEI7OyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZuIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJuYXZpZ2F0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZuIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1heCIsICJtaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZuIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNldCIsICJmbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibWF4IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNldCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVGlwcHlfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJ0aXBweSIsICJ0aXBweV9lc21fZGVmYXVsdCIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJfX3RvQ29tbW9uSlMiLCAidG9wIiwgImJvdHRvbSIsICJyaWdodCIsICJsZWZ0IiwgImF1dG8iLCAiYmFzZVBsYWNlbWVudHMiLCAic3RhcnQiLCAiZW5kIiwgImNsaXBwaW5nUGFyZW50cyIsICJ2aWV3cG9ydCIsICJwb3BwZXIiLCAicmVmZXJlbmNlIiwgInZhcmlhdGlvblBsYWNlbWVudHMiLCAicmVkdWNlIiwgImFjYyIsICJwbGFjZW1lbnQiLCAiY29uY2F0IiwgInBsYWNlbWVudHMiLCAiYmVmb3JlUmVhZCIsICJyZWFkIiwgImFmdGVyUmVhZCIsICJiZWZvcmVNYWluIiwgIm1haW4iLCAiYWZ0ZXJNYWluIiwgImJlZm9yZVdyaXRlIiwgIndyaXRlIiwgImFmdGVyV3JpdGUiLCAibW9kaWZpZXJQaGFzZXMiLCAiZ2V0Tm9kZU5hbWUiLCAiZWxlbWVudCIsICJub2RlTmFtZSIsICJ0b0xvd2VyQ2FzZSIsICJnZXRXaW5kb3ciLCAibm9kZSIsICJ3aW5kb3ciLCAidG9TdHJpbmciLCAib3duZXJEb2N1bWVudCIsICJkZWZhdWx0VmlldyIsICJpc0VsZW1lbnQiLCAiT3duRWxlbWVudCIsICJFbGVtZW50IiwgImlzSFRNTEVsZW1lbnQiLCAiSFRNTEVsZW1lbnQiLCAiaXNTaGFkb3dSb290IiwgIlNoYWRvd1Jvb3QiLCAiYXBwbHlTdHlsZXMiLCAiX3JlZiIsICJzdGF0ZSIsICJPYmplY3QiLCAia2V5cyIsICJlbGVtZW50cyIsICJmb3JFYWNoIiwgIm5hbWUiLCAic3R5bGUiLCAic3R5bGVzIiwgImF0dHJpYnV0ZXMiLCAiYXNzaWduIiwgIm5hbWUyIiwgInZhbHVlIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJzZXRBdHRyaWJ1dGUiLCAiZWZmZWN0IiwgIl9yZWYyIiwgImluaXRpYWxTdHlsZXMiLCAicG9zaXRpb24iLCAib3B0aW9ucyIsICJzdHJhdGVneSIsICJtYXJnaW4iLCAiYXJyb3ciLCAic3R5bGVQcm9wZXJ0aWVzIiwgImhhc093blByb3BlcnR5IiwgInN0eWxlMiIsICJwcm9wZXJ0eSIsICJhdHRyaWJ1dGUiLCAiYXBwbHlTdHlsZXNfZGVmYXVsdCIsICJlbmFibGVkIiwgInBoYXNlIiwgImZuIiwgInJlcXVpcmVzIiwgImdldEJhc2VQbGFjZW1lbnQiLCAic3BsaXQiLCAibWF4IiwgIk1hdGgiLCAibWluIiwgInJvdW5kIiwgImdldFVBU3RyaW5nIiwgInVhRGF0YSIsICJuYXZpZ2F0b3IiLCAidXNlckFnZW50RGF0YSIsICJicmFuZHMiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJtYXAiLCAiaXRlbSIsICJicmFuZCIsICJ2ZXJzaW9uIiwgImpvaW4iLCAidXNlckFnZW50IiwgImlzTGF5b3V0Vmlld3BvcnQiLCAidGVzdCIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAiaW5jbHVkZVNjYWxlIiwgImlzRml4ZWRTdHJhdGVneSIsICJjbGllbnRSZWN0IiwgInNjYWxlWCIsICJzY2FsZVkiLCAib2Zmc2V0V2lkdGgiLCAid2lkdGgiLCAib2Zmc2V0SGVpZ2h0IiwgImhlaWdodCIsICJ2aXN1YWxWaWV3cG9ydCIsICJhZGRWaXN1YWxPZmZzZXRzIiwgIngiLCAib2Zmc2V0TGVmdCIsICJ5IiwgIm9mZnNldFRvcCIsICJnZXRMYXlvdXRSZWN0IiwgImFicyIsICJjb250YWlucyIsICJwYXJlbnQiLCAiY2hpbGQiLCAicm9vdE5vZGUiLCAiZ2V0Um9vdE5vZGUiLCAibmV4dCIsICJpc1NhbWVOb2RlIiwgInBhcmVudE5vZGUiLCAiaG9zdCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlzVGFibGVFbGVtZW50IiwgImluZGV4T2YiLCAiZ2V0RG9jdW1lbnRFbGVtZW50IiwgImRvY3VtZW50IiwgImRvY3VtZW50RWxlbWVudCIsICJnZXRQYXJlbnROb2RlIiwgImFzc2lnbmVkU2xvdCIsICJnZXRUcnVlT2Zmc2V0UGFyZW50IiwgIm9mZnNldFBhcmVudCIsICJnZXRDb250YWluaW5nQmxvY2siLCAiaXNGaXJlZm94IiwgImlzSUUiLCAiZWxlbWVudENzcyIsICJjdXJyZW50Tm9kZSIsICJjc3MiLCAidHJhbnNmb3JtIiwgInBlcnNwZWN0aXZlIiwgImNvbnRhaW4iLCAid2lsbENoYW5nZSIsICJmaWx0ZXIiLCAiZ2V0T2Zmc2V0UGFyZW50IiwgIndpbmRvdzIiLCAiZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IiwgIndpdGhpbiIsICJtaW4yIiwgIm1heDIiLCAid2l0aGluTWF4Q2xhbXAiLCAidiIsICJnZXRGcmVzaFNpZGVPYmplY3QiLCAibWVyZ2VQYWRkaW5nT2JqZWN0IiwgInBhZGRpbmdPYmplY3QiLCAiZXhwYW5kVG9IYXNoTWFwIiwgImhhc2hNYXAiLCAia2V5IiwgInRvUGFkZGluZ09iamVjdCIsICJ0b1BhZGRpbmdPYmplY3QyIiwgInBhZGRpbmciLCAicmVjdHMiLCAiX3N0YXRlJG1vZGlmaWVyc0RhdGEkIiwgImFycm93RWxlbWVudCIsICJwb3BwZXJPZmZzZXRzMiIsICJtb2RpZmllcnNEYXRhIiwgInBvcHBlck9mZnNldHMiLCAiYmFzZVBsYWNlbWVudCIsICJheGlzIiwgImlzVmVydGljYWwiLCAibGVuIiwgImFycm93UmVjdCIsICJtaW5Qcm9wIiwgIm1heFByb3AiLCAiZW5kRGlmZiIsICJzdGFydERpZmYiLCAiYXJyb3dPZmZzZXRQYXJlbnQiLCAiY2xpZW50U2l6ZSIsICJjbGllbnRIZWlnaHQiLCAiY2xpZW50V2lkdGgiLCAiY2VudGVyVG9SZWZlcmVuY2UiLCAiY2VudGVyIiwgIm9mZnNldDIiLCAiYXhpc1Byb3AiLCAiY2VudGVyT2Zmc2V0IiwgImVmZmVjdDIiLCAiX29wdGlvbnMkZWxlbWVudCIsICJxdWVyeVNlbGVjdG9yIiwgImFycm93X2RlZmF1bHQiLCAicmVxdWlyZXNJZkV4aXN0cyIsICJnZXRWYXJpYXRpb24iLCAidW5zZXRTaWRlcyIsICJyb3VuZE9mZnNldHNCeURQUiIsICJ3aW4iLCAiZHByIiwgImRldmljZVBpeGVsUmF0aW8iLCAibWFwVG9TdHlsZXMiLCAiX09iamVjdCRhc3NpZ24yIiwgInBvcHBlcjIiLCAicG9wcGVyUmVjdCIsICJ2YXJpYXRpb24iLCAib2Zmc2V0cyIsICJncHVBY2NlbGVyYXRpb24iLCAiYWRhcHRpdmUiLCAicm91bmRPZmZzZXRzIiwgImlzRml4ZWQiLCAiX29mZnNldHMkeCIsICJfb2Zmc2V0cyR5IiwgIl9yZWYzIiwgImhhc1giLCAiaGFzWSIsICJzaWRlWCIsICJzaWRlWSIsICJoZWlnaHRQcm9wIiwgIndpZHRoUHJvcCIsICJvZmZzZXRZIiwgIm9mZnNldFgiLCAiY29tbW9uU3R5bGVzIiwgIl9yZWY0IiwgIl9PYmplY3QkYXNzaWduIiwgImNvbXB1dGVTdHlsZXMiLCAiX3JlZjUiLCAiX29wdGlvbnMkZ3B1QWNjZWxlcmF0IiwgIl9vcHRpb25zJGFkYXB0aXZlIiwgIl9vcHRpb25zJHJvdW5kT2Zmc2V0cyIsICJjb21wdXRlU3R5bGVzX2RlZmF1bHQiLCAiZGF0YSIsICJwYXNzaXZlIiwgImVmZmVjdDMiLCAiaW5zdGFuY2UiLCAiX29wdGlvbnMkc2Nyb2xsIiwgInNjcm9sbCIsICJfb3B0aW9ucyRyZXNpemUiLCAicmVzaXplIiwgInNjcm9sbFBhcmVudHMiLCAic2Nyb2xsUGFyZW50IiwgImFkZEV2ZW50TGlzdGVuZXIiLCAidXBkYXRlIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiZXZlbnRMaXN0ZW5lcnNfZGVmYXVsdCIsICJoYXNoIiwgImdldE9wcG9zaXRlUGxhY2VtZW50IiwgInJlcGxhY2UiLCAibWF0Y2hlZCIsICJoYXNoMiIsICJnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCIsICJnZXRXaW5kb3dTY3JvbGwiLCAic2Nyb2xsTGVmdCIsICJwYWdlWE9mZnNldCIsICJzY3JvbGxUb3AiLCAicGFnZVlPZmZzZXQiLCAiZ2V0V2luZG93U2Nyb2xsQmFyWCIsICJnZXRWaWV3cG9ydFJlY3QiLCAiaHRtbCIsICJsYXlvdXRWaWV3cG9ydCIsICJnZXREb2N1bWVudFJlY3QiLCAiX2VsZW1lbnQkb3duZXJEb2N1bWVuIiwgIndpblNjcm9sbCIsICJib2R5IiwgInNjcm9sbFdpZHRoIiwgInNjcm9sbEhlaWdodCIsICJkaXJlY3Rpb24iLCAiaXNTY3JvbGxQYXJlbnQiLCAiX2dldENvbXB1dGVkU3R5bGUiLCAib3ZlcmZsb3ciLCAib3ZlcmZsb3dYIiwgIm92ZXJmbG93WSIsICJnZXRTY3JvbGxQYXJlbnQiLCAibGlzdFNjcm9sbFBhcmVudHMiLCAibGlzdCIsICJpc0JvZHkiLCAidGFyZ2V0IiwgInVwZGF0ZWRMaXN0IiwgInJlY3RUb0NsaWVudFJlY3QiLCAicmVjdCIsICJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsICJjbGllbnRUb3AiLCAiY2xpZW50TGVmdCIsICJnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZSIsICJjbGlwcGluZ1BhcmVudCIsICJnZXRDbGlwcGluZ1BhcmVudHMiLCAiY2xpcHBpbmdQYXJlbnRzMiIsICJjYW5Fc2NhcGVDbGlwcGluZyIsICJjbGlwcGVyRWxlbWVudCIsICJnZXRDbGlwcGluZ1JlY3QiLCAiYm91bmRhcnkiLCAicm9vdEJvdW5kYXJ5IiwgIm1haW5DbGlwcGluZ1BhcmVudHMiLCAiZmlyc3RDbGlwcGluZ1BhcmVudCIsICJjbGlwcGluZ1JlY3QiLCAiYWNjUmVjdCIsICJjb21wdXRlT2Zmc2V0cyIsICJyZWZlcmVuY2UyIiwgImNvbW1vblgiLCAiY29tbW9uWSIsICJtYWluQXhpcyIsICJkZXRlY3RPdmVyZmxvdyIsICJfb3B0aW9ucyIsICJfb3B0aW9ucyRwbGFjZW1lbnQiLCAiX29wdGlvbnMkc3RyYXRlZ3kiLCAiX29wdGlvbnMkYm91bmRhcnkiLCAiX29wdGlvbnMkcm9vdEJvdW5kYXJ5IiwgIl9vcHRpb25zJGVsZW1lbnRDb250ZSIsICJlbGVtZW50Q29udGV4dCIsICJfb3B0aW9ucyRhbHRCb3VuZGFyeSIsICJhbHRCb3VuZGFyeSIsICJfb3B0aW9ucyRwYWRkaW5nIiwgImFsdENvbnRleHQiLCAiY2xpcHBpbmdDbGllbnRSZWN0IiwgImNvbnRleHRFbGVtZW50IiwgInJlZmVyZW5jZUNsaWVudFJlY3QiLCAicG9wcGVyQ2xpZW50UmVjdCIsICJlbGVtZW50Q2xpZW50UmVjdCIsICJvdmVyZmxvd09mZnNldHMiLCAib2Zmc2V0RGF0YSIsICJvZmZzZXQiLCAibXVsdGlwbHkiLCAiY29tcHV0ZUF1dG9QbGFjZW1lbnQiLCAiZmxpcFZhcmlhdGlvbnMiLCAiX29wdGlvbnMkYWxsb3dlZEF1dG9QIiwgImFsbG93ZWRBdXRvUGxhY2VtZW50cyIsICJwbGFjZW1lbnRzMiIsICJwbGFjZW1lbnQyIiwgImFsbG93ZWRQbGFjZW1lbnRzIiwgImxlbmd0aCIsICJvdmVyZmxvd3MiLCAic29ydCIsICJhIiwgImIiLCAiZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMiLCAib3Bwb3NpdGVQbGFjZW1lbnQiLCAiZmxpcCIsICJfc2tpcCIsICJfb3B0aW9ucyRtYWluQXhpcyIsICJjaGVja01haW5BeGlzIiwgIl9vcHRpb25zJGFsdEF4aXMiLCAiYWx0QXhpcyIsICJjaGVja0FsdEF4aXMiLCAic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwgImZhbGxiYWNrUGxhY2VtZW50cyIsICJfb3B0aW9ucyRmbGlwVmFyaWF0aW8iLCAicHJlZmVycmVkUGxhY2VtZW50IiwgImlzQmFzZVBsYWNlbWVudCIsICJyZWZlcmVuY2VSZWN0IiwgImNoZWNrc01hcCIsICJNYXAiLCAibWFrZUZhbGxiYWNrQ2hlY2tzIiwgImZpcnN0Rml0dGluZ1BsYWNlbWVudCIsICJpIiwgIl9iYXNlUGxhY2VtZW50IiwgImlzU3RhcnRWYXJpYXRpb24iLCAibWFpblZhcmlhdGlvblNpZGUiLCAiYWx0VmFyaWF0aW9uU2lkZSIsICJjaGVja3MiLCAicHVzaCIsICJldmVyeSIsICJjaGVjayIsICJzZXQiLCAibnVtYmVyT2ZDaGVja3MiLCAiX2xvb3AiLCAiX2xvb3AyIiwgIl9pMiIsICJmaXR0aW5nUGxhY2VtZW50IiwgImZpbmQiLCAiY2hlY2tzMiIsICJnZXQiLCAic2xpY2UiLCAiX2kiLCAiX3JldCIsICJyZXNldCIsICJmbGlwX2RlZmF1bHQiLCAiZ2V0U2lkZU9mZnNldHMiLCAicHJldmVudGVkT2Zmc2V0cyIsICJpc0FueVNpZGVGdWxseUNsaXBwZWQiLCAic29tZSIsICJzaWRlIiwgImhpZGUiLCAicHJldmVudE92ZXJmbG93IiwgInJlZmVyZW5jZU92ZXJmbG93IiwgInBvcHBlckFsdE92ZXJmbG93IiwgInJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyIsICJwb3BwZXJFc2NhcGVPZmZzZXRzIiwgImlzUmVmZXJlbmNlSGlkZGVuIiwgImhhc1BvcHBlckVzY2FwZWQiLCAiaGlkZV9kZWZhdWx0IiwgImRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZIiwgImludmVydERpc3RhbmNlIiwgInNraWRkaW5nIiwgImRpc3RhbmNlIiwgIl9vcHRpb25zJG9mZnNldCIsICJfZGF0YSRzdGF0ZSRwbGFjZW1lbnQiLCAib2Zmc2V0X2RlZmF1bHQiLCAicG9wcGVyT2Zmc2V0c19kZWZhdWx0IiwgImdldEFsdEF4aXMiLCAiX29wdGlvbnMkdGV0aGVyIiwgInRldGhlciIsICJfb3B0aW9ucyR0ZXRoZXJPZmZzZXQiLCAidGV0aGVyT2Zmc2V0IiwgInRldGhlck9mZnNldFZhbHVlIiwgIm5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSIsICJvZmZzZXRNb2RpZmllclN0YXRlIiwgIl9vZmZzZXRNb2RpZmllclN0YXRlJCIsICJtYWluU2lkZSIsICJhbHRTaWRlIiwgImFkZGl0aXZlIiwgIm1pbkxlbiIsICJtYXhMZW4iLCAiYXJyb3dQYWRkaW5nT2JqZWN0IiwgImFycm93UGFkZGluZ01pbiIsICJhcnJvd1BhZGRpbmdNYXgiLCAiYXJyb3dMZW4iLCAibWluT2Zmc2V0IiwgIm1heE9mZnNldCIsICJjbGllbnRPZmZzZXQiLCAib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsICJ0ZXRoZXJNaW4iLCAidGV0aGVyTWF4IiwgInByZXZlbnRlZE9mZnNldCIsICJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIiwgIl9tYWluU2lkZSIsICJfYWx0U2lkZSIsICJfb2Zmc2V0IiwgIl9sZW4iLCAiX21pbiIsICJfbWF4IiwgImlzT3JpZ2luU2lkZSIsICJfb2Zmc2V0TW9kaWZpZXJWYWx1ZSIsICJfdGV0aGVyTWluIiwgIl90ZXRoZXJNYXgiLCAiX3ByZXZlbnRlZE9mZnNldCIsICJwcmV2ZW50T3ZlcmZsb3dfZGVmYXVsdCIsICJnZXRIVE1MRWxlbWVudFNjcm9sbCIsICJnZXROb2RlU2Nyb2xsIiwgImlzRWxlbWVudFNjYWxlZCIsICJnZXRDb21wb3NpdGVSZWN0IiwgImVsZW1lbnRPclZpcnR1YWxFbGVtZW50IiwgImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IiwgIm9mZnNldFBhcmVudElzU2NhbGVkIiwgIm9yZGVyIiwgIm1vZGlmaWVycyIsICJ2aXNpdGVkIiwgIlNldCIsICJyZXN1bHQiLCAibW9kaWZpZXIiLCAiYWRkIiwgImRlcCIsICJoYXMiLCAiZGVwTW9kaWZpZXIiLCAib3JkZXJNb2RpZmllcnMiLCAib3JkZXJlZE1vZGlmaWVycyIsICJkZWJvdW5jZSIsICJmbjIiLCAicGVuZGluZyIsICJQcm9taXNlIiwgInJlc29sdmUiLCAidGhlbiIsICJtZXJnZUJ5TmFtZSIsICJtZXJnZWQiLCAibWVyZ2VkMiIsICJjdXJyZW50IiwgImV4aXN0aW5nIiwgIkRFRkFVTFRfT1BUSU9OUyIsICJhcmVWYWxpZEVsZW1lbnRzIiwgImFyZ3VtZW50cyIsICJhcmdzIiwgIl9rZXkiLCAicG9wcGVyR2VuZXJhdG9yIiwgImdlbmVyYXRvck9wdGlvbnMiLCAiX2dlbmVyYXRvck9wdGlvbnMiLCAiX2dlbmVyYXRvck9wdGlvbnMkZGVmIiwgImRlZmF1bHRNb2RpZmllcnMiLCAiZGVmYXVsdE1vZGlmaWVyczIiLCAiX2dlbmVyYXRvck9wdGlvbnMkZGVmMiIsICJkZWZhdWx0T3B0aW9ucyIsICJjcmVhdGVQb3BwZXIyIiwgImVmZmVjdENsZWFudXBGbnMiLCAiaXNEZXN0cm95ZWQiLCAic2V0T3B0aW9ucyIsICJzZXRPcHRpb25zQWN0aW9uIiwgIm9wdGlvbnMyIiwgImNsZWFudXBNb2RpZmllckVmZmVjdHMiLCAibSIsICJydW5Nb2RpZmllckVmZmVjdHMiLCAiZm9yY2VVcGRhdGUiLCAiX3N0YXRlJGVsZW1lbnRzIiwgInJlZmVyZW5jZTMiLCAicG9wcGVyMyIsICJpbmRleCIsICJfc3RhdGUkb3JkZXJlZE1vZGlmaWUiLCAiX3N0YXRlJG9yZGVyZWRNb2RpZmllMiIsICJkZXN0cm95IiwgInN0YXRlMiIsICJvbkZpcnN0VXBkYXRlIiwgIl9yZWYkb3B0aW9ucyIsICJlZmZlY3Q1IiwgImNsZWFudXBGbiIsICJub29wRm4iLCAibm9vcEZuMiIsICJjcmVhdGVQb3BwZXIiLCAiQk9YX0NMQVNTIiwgIkNPTlRFTlRfQ0xBU1MiLCAiQkFDS0RST1BfQ0xBU1MiLCAiQVJST1dfQ0xBU1MiLCAiU1ZHX0FSUk9XX0NMQVNTIiwgIlRPVUNIX09QVElPTlMiLCAiY2FwdHVyZSIsICJUSVBQWV9ERUZBVUxUX0FQUEVORF9UTyIsICJUSVBQWV9ERUZBVUxUX0FQUEVORF9UTzIiLCAiZ2V0VmFsdWVBdEluZGV4T3JSZXR1cm4iLCAiZGVmYXVsdFZhbHVlIiwgImlzVHlwZSIsICJ0eXBlIiwgInN0ciIsICJjYWxsIiwgImludm9rZVdpdGhBcmdzT3JSZXR1cm4iLCAiYXBwbHkiLCAiZGVib3VuY2UyIiwgIm1zIiwgInRpbWVvdXQiLCAiYXJnIiwgImNsZWFyVGltZW91dCIsICJzZXRUaW1lb3V0IiwgInNwbGl0QnlTcGFjZXMiLCAiQm9vbGVhbiIsICJub3JtYWxpemVUb0FycmF5IiwgInB1c2hJZlVuaXF1ZSIsICJhcnIiLCAidW5pcXVlIiwgImdldEJhc2VQbGFjZW1lbnQyIiwgImFycmF5RnJvbSIsICJyZW1vdmVVbmRlZmluZWRQcm9wcyIsICJvYmoiLCAiZGl2IiwgImNyZWF0ZUVsZW1lbnQiLCAiaXNFbGVtZW50MiIsICJpc05vZGVMaXN0IiwgImlzTW91c2VFdmVudCIsICJpc1JlZmVyZW5jZUVsZW1lbnQiLCAiX3RpcHB5IiwgImdldEFycmF5T2ZFbGVtZW50cyIsICJxdWVyeVNlbGVjdG9yQWxsIiwgInNldFRyYW5zaXRpb25EdXJhdGlvbiIsICJlbHMiLCAiZWwiLCAidHJhbnNpdGlvbkR1cmF0aW9uIiwgInNldFZpc2liaWxpdHlTdGF0ZSIsICJnZXRPd25lckRvY3VtZW50IiwgImVsZW1lbnRPckVsZW1lbnRzIiwgIl9ub3JtYWxpemVUb0FycmF5IiwgImlzQ3Vyc29yT3V0c2lkZUludGVyYWN0aXZlQm9yZGVyIiwgInBvcHBlclRyZWVEYXRhIiwgImV2ZW50IiwgImNsaWVudFgiLCAiY2xpZW50WSIsICJwb3BwZXJTdGF0ZSIsICJwcm9wcyIsICJpbnRlcmFjdGl2ZUJvcmRlciIsICJ0b3BEaXN0YW5jZSIsICJib3R0b21EaXN0YW5jZSIsICJsZWZ0RGlzdGFuY2UiLCAicmlnaHREaXN0YW5jZSIsICJleGNlZWRzVG9wIiwgImV4Y2VlZHNCb3R0b20iLCAiZXhjZWVkc0xlZnQiLCAiZXhjZWVkc1JpZ2h0IiwgInVwZGF0ZVRyYW5zaXRpb25FbmRMaXN0ZW5lciIsICJib3giLCAiYWN0aW9uIiwgImxpc3RlbmVyIiwgIm1ldGhvZCIsICJhY3R1YWxDb250YWlucyIsICJfdGFyZ2V0JGdldFJvb3ROb2RlIiwgImN1cnJlbnRJbnB1dCIsICJpc1RvdWNoIiwgImxhc3RNb3VzZU1vdmVUaW1lIiwgIm9uRG9jdW1lbnRUb3VjaFN0YXJ0IiwgInBlcmZvcm1hbmNlIiwgIm9uRG9jdW1lbnRNb3VzZU1vdmUiLCAibm93IiwgIm9uV2luZG93Qmx1ciIsICJhY3RpdmVFbGVtZW50IiwgImJsdXIiLCAiaXNWaXNpYmxlIiwgImJpbmRHbG9iYWxFdmVudExpc3RlbmVycyIsICJpc0Jyb3dzZXIiLCAiaXNJRTExIiwgIm1zQ3J5cHRvIiwgInJlc2V0VmlzaXRlZE1lc3NhZ2VzIiwgInBsdWdpblByb3BzIiwgImFuaW1hdGVGaWxsIiwgImZvbGxvd0N1cnNvciIsICJpbmxpbmVQb3NpdGlvbmluZyIsICJzdGlja3kiLCAicmVuZGVyUHJvcHMiLCAiYWxsb3dIVE1MIiwgImFuaW1hdGlvbiIsICJjb250ZW50IiwgImluZXJ0aWEiLCAibWF4V2lkdGgiLCAicm9sZSIsICJ0aGVtZSIsICJ6SW5kZXgiLCAiZGVmYXVsdFByb3BzIiwgImFwcGVuZFRvIiwgImFyaWEiLCAiZXhwYW5kZWQiLCAiZGVsYXkiLCAiZHVyYXRpb24iLCAiZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdCIsICJoaWRlT25DbGljayIsICJpZ25vcmVBdHRyaWJ1dGVzIiwgImludGVyYWN0aXZlIiwgImludGVyYWN0aXZlRGVib3VuY2UiLCAibW92ZVRyYW5zaXRpb24iLCAib25BZnRlclVwZGF0ZSIsICJvbkJlZm9yZVVwZGF0ZSIsICJvbkNyZWF0ZSIsICJvbkRlc3Ryb3kiLCAib25IaWRkZW4iLCAib25IaWRlIiwgIm9uTW91bnQiLCAib25TaG93IiwgIm9uU2hvd24iLCAib25UcmlnZ2VyIiwgIm9uVW50cmlnZ2VyIiwgIm9uQ2xpY2tPdXRzaWRlIiwgInBsdWdpbnMiLCAicG9wcGVyT3B0aW9ucyIsICJyZW5kZXIiLCAic2hvd09uQ3JlYXRlIiwgInRvdWNoIiwgInRyaWdnZXIiLCAidHJpZ2dlclRhcmdldCIsICJkZWZhdWx0S2V5cyIsICJzZXREZWZhdWx0UHJvcHMiLCAic2V0RGVmYXVsdFByb3BzMiIsICJwYXJ0aWFsUHJvcHMiLCAidmFsaWRhdGVQcm9wcyIsICJnZXRFeHRlbmRlZFBhc3NlZFByb3BzIiwgInBhc3NlZFByb3BzIiwgInBsdWdpblByb3BzMiIsICJwbHVnaW4iLCAiX25hbWUiLCAiZ2V0RGF0YUF0dHJpYnV0ZVByb3BzIiwgInByb3BLZXlzIiwgInZhbHVlQXNTdHJpbmciLCAiZ2V0QXR0cmlidXRlIiwgInRyaW0iLCAiSlNPTiIsICJwYXJzZSIsICJlIiwgImV2YWx1YXRlUHJvcHMiLCAib3V0IiwgImlubmVySFRNTCIsICJpbm5lckhUTUwyIiwgImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwgImNyZWF0ZUFycm93RWxlbWVudCIsICJhcnJvdzIiLCAiY2xhc3NOYW1lIiwgImFwcGVuZENoaWxkIiwgInNldENvbnRlbnQiLCAidGV4dENvbnRlbnQiLCAiZ2V0Q2hpbGRyZW4iLCAiZmlyc3RFbGVtZW50Q2hpbGQiLCAiYm94Q2hpbGRyZW4iLCAiY2hpbGRyZW4iLCAiY2xhc3NMaXN0IiwgImJhY2tkcm9wIiwgIm9uVXBkYXRlIiwgInByZXZQcm9wcyIsICJuZXh0UHJvcHMiLCAiX2dldENoaWxkcmVuIiwgImJveDIiLCAiY29udGVudDIiLCAicmVtb3ZlQ2hpbGQiLCAiJCR0aXBweSIsICJpZENvdW50ZXIiLCAibW91c2VNb3ZlTGlzdGVuZXJzIiwgIm1vdW50ZWRJbnN0YW5jZXMiLCAiY3JlYXRlVGlwcHkiLCAic2hvd1RpbWVvdXQiLCAiaGlkZVRpbWVvdXQiLCAic2NoZWR1bGVIaWRlQW5pbWF0aW9uRnJhbWUiLCAiaXNWaXNpYmxlRnJvbUNsaWNrIiwgImRpZEhpZGVEdWVUb0RvY3VtZW50TW91c2VEb3duIiwgImRpZFRvdWNoTW92ZSIsICJpZ25vcmVPbkZpcnN0VXBkYXRlIiwgImxhc3RUcmlnZ2VyRXZlbnQiLCAiY3VycmVudFRyYW5zaXRpb25FbmRMaXN0ZW5lciIsICJsaXN0ZW5lcnMiLCAiZGVib3VuY2VkT25Nb3VzZU1vdmUiLCAib25Nb3VzZU1vdmUiLCAiY3VycmVudFRhcmdldCIsICJpZCIsICJwb3BwZXJJbnN0YW5jZSIsICJpc0VuYWJsZWQiLCAiaXNNb3VudGVkIiwgImlzU2hvd24iLCAiY2xlYXJEZWxheVRpbWVvdXRzIiwgInNldFByb3BzIiwgInNldENvbnRlbnQyIiwgInNob3ciLCAiaGlkZTIiLCAiaGlkZVdpdGhJbnRlcmFjdGl2aXR5IiwgImVuYWJsZSIsICJkaXNhYmxlIiwgInVubW91bnQiLCAiZXJyb3JXaGVuIiwgIl9wcm9wcyRyZW5kZXIiLCAicGx1Z2luc0hvb2tzIiwgImhhc0FyaWFFeHBhbmRlZCIsICJoYXNBdHRyaWJ1dGUiLCAiYWRkTGlzdGVuZXJzIiwgImhhbmRsZUFyaWFFeHBhbmRlZEF0dHJpYnV0ZSIsICJoYW5kbGVTdHlsZXMiLCAiaW52b2tlSG9vayIsICJzY2hlZHVsZVNob3ciLCAiZ2V0RG9jdW1lbnQiLCAiZ2V0Tm9ybWFsaXplZFRvdWNoU2V0dGluZ3MiLCAiZ2V0SXNDdXN0b21Ub3VjaEJlaGF2aW9yIiwgImdldElzRGVmYXVsdFJlbmRlckZuIiwgIl9pbnN0YW5jZSRwcm9wcyRyZW5kZSIsICJnZXRDdXJyZW50VGFyZ2V0IiwgImdldERlZmF1bHRUZW1wbGF0ZUNoaWxkcmVuIiwgImdldERlbGF5IiwgImlzU2hvdyIsICJmcm9tSGlkZSIsICJwb2ludGVyRXZlbnRzIiwgImhvb2siLCAic2hvdWxkSW52b2tlUHJvcHNIb29rIiwgInBsdWdpbkhvb2tzIiwgIl9pbnN0YW5jZSRwcm9wcyIsICJoYW5kbGVBcmlhQ29udGVudEF0dHJpYnV0ZSIsICJhdHRyIiwgImlkMiIsICJub2RlcyIsICJjdXJyZW50VmFsdWUiLCAibmV4dFZhbHVlIiwgImNsZWFudXBJbnRlcmFjdGl2ZU1vdXNlTGlzdGVuZXJzIiwgIm9uRG9jdW1lbnRQcmVzcyIsICJhY3R1YWxUYXJnZXQiLCAiY29tcG9zZWRQYXRoIiwgInJlbW92ZURvY3VtZW50UHJlc3MiLCAib25Ub3VjaE1vdmUiLCAib25Ub3VjaFN0YXJ0IiwgImFkZERvY3VtZW50UHJlc3MiLCAiZG9jIiwgIm9uVHJhbnNpdGlvbmVkT3V0IiwgImNhbGxiYWNrIiwgIm9uVHJhbnNpdGlvbkVuZCIsICJvblRyYW5zaXRpb25lZEluIiwgIm9uIiwgImV2ZW50VHlwZSIsICJoYW5kbGVyIiwgIm9uVHJpZ2dlcjIiLCAib25Nb3VzZUxlYXZlIiwgIm9uQmx1ck9yRm9jdXNPdXQiLCAicmVtb3ZlTGlzdGVuZXJzIiwgIl9sYXN0VHJpZ2dlckV2ZW50IiwgInNob3VsZFNjaGVkdWxlQ2xpY2tIaWRlIiwgImlzRXZlbnRMaXN0ZW5lclN0b3BwZWQiLCAid2FzRm9jdXNlZCIsICJzY2hlZHVsZUhpZGUiLCAiaXNDdXJzb3JPdmVyUmVmZXJlbmNlT3JQb3BwZXIiLCAiZ2V0TmVzdGVkUG9wcGVyVHJlZSIsICJfaW5zdGFuY2UkcG9wcGVySW5zdGEiLCAiaW5zdGFuY2UyIiwgInNob3VsZEJhaWwiLCAicmVsYXRlZFRhcmdldCIsICJjcmVhdGVQb3BwZXJJbnN0YW5jZSIsICJkZXN0cm95UG9wcGVySW5zdGFuY2UiLCAiX2luc3RhbmNlJHByb3BzMiIsICJjb21wdXRlZFJlZmVyZW5jZSIsICJ0aXBweU1vZGlmaWVyIiwgIl9nZXREZWZhdWx0VGVtcGxhdGVDaCIsICJtb3VudCIsICJ3YXJuV2hlbiIsICJuZXh0RWxlbWVudFNpYmxpbmciLCAiX2dldE5vcm1hbGl6ZWRUb3VjaFNlIiwgInRvdWNoVmFsdWUiLCAidG91Y2hEZWxheSIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAiY3JlYXRlTWVtb3J5TGVha1dhcm5pbmciLCAibmVzdGVkUG9wcGVyIiwgImlzQWxyZWFkeVZpc2libGUiLCAiaXNEaXNhYmxlZCIsICJpc1RvdWNoQW5kVG91Y2hEaXNhYmxlZCIsICJ2aXNpYmlsaXR5IiwgInRyYW5zaXRpb24iLCAiX2dldERlZmF1bHRUZW1wbGF0ZUNoMiIsICJvbkZpcnN0VXBkYXRlMiIsICJfaW5zdGFuY2UkcG9wcGVySW5zdGEyIiwgIl9nZXREZWZhdWx0VGVtcGxhdGVDaDMiLCAiX2JveCIsICJfY29udGVudCIsICJpc0FscmVhZHlIaWRkZW4iLCAiX2dldERlZmF1bHRUZW1wbGF0ZUNoNCIsICJ0YXJnZXRzIiwgIm9wdGlvbmFsUHJvcHMiLCAidmFsaWRhdGVUYXJnZXRzIiwgImlzU2luZ2xlQ29udGVudEVsZW1lbnQiLCAiaXNNb3JlVGhhbk9uZVJlZmVyZW5jZUVsZW1lbnQiLCAiaW5zdGFuY2VzIiwgImFwcGx5U3R5bGVzTW9kaWZpZXIiLCAiZWZmZWN0NCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgInNyYy9UaXBweS9UaXBweS50cyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9jb25zdGFudHMudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvdXRpbHMudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvZG9tLXV0aWxzLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvc3JjL2JpbmRHbG9iYWxFdmVudExpc3RlbmVycy50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9icm93c2VyLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvc3JjL3ZhbGlkYXRpb24udHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvcHJvcHMudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvdGVtcGxhdGUudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvY3JlYXRlVGlwcHkudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvaW5kZXgudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvYWRkb25zL2NyZWF0ZVNpbmdsZXRvbi50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9hZGRvbnMvZGVsZWdhdGUudHMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL3RpcHB5LmpzQDYuMy43L25vZGVfbW9kdWxlcy90aXBweS5qcy9zcmMvcGx1Z2lucy9hbmltYXRlRmlsbC50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9wbHVnaW5zL2ZvbGxvd0N1cnNvci50cyIsICJub2RlX21vZHVsZXMvLnBucG0vdGlwcHkuanNANi4zLjcvbm9kZV9tb2R1bGVzL3RpcHB5LmpzL3NyYy9wbHVnaW5zL2lubGluZVBvc2l0aW9uaW5nLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvc3JjL3BsdWdpbnMvc3RpY2t5LnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS90aXBweS5qc0A2LjMuNy9ub2RlX21vZHVsZXMvdGlwcHkuanMvYnVpbGQvYmFzZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjEnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjEvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCA8PSAxMjEgYW5kIFNhZmFyaSA8PSAxNS40OyBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG4gIFNldDogU2V0LFxuICBhZGQ6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5hZGQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5oYXMpLFxuICByZW1vdmU6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZVsnZGVsZXRlJ10pLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBTZXRQcm90b3R5cGUgPSBTZXRIZWxwZXJzLnByb3RvO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuZm9yRWFjaCk7XG52YXIga2V5cyA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5rZXlzKTtcbnZhciBuZXh0ID0ga2V5cyhuZXcgU2V0KCkpLm5leHQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwgZm4sIGludGVycnVwdGlibGUpIHtcbiAgcmV0dXJuIGludGVycnVwdGlibGUgPyBpdGVyYXRlU2ltcGxlKHsgaXRlcmF0b3I6IGtleXMoc2V0KSwgbmV4dDogbmV4dCB9LCBmbikgOiBmb3JFYWNoKHNldCwgZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKFNldEhlbHBlcnMucHJvdG8sICdzaXplJywgJ2dldCcpIHx8IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIHNldC5zaXplO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgR2V0SXRlcmF0b3JEaXJlY3Qob2JqKWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVycy8jc2VjLWdldGl0ZXJhdG9yZGlyZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICBpdGVyYXRvcjogb2JqLFxuICAgIG5leHQ6IG9iai5uZXh0LFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgaW50U2l6ZSkge1xuICB0aGlzLnNldCA9IHNldDtcbiAgdGhpcy5zaXplID0gbWF4KGludFNpemUsIDApO1xuICB0aGlzLmhhcyA9IGFDYWxsYWJsZShzZXQuaGFzKTtcbiAgdGhpcy5rZXlzID0gYUNhbGxhYmxlKHNldC5rZXlzKTtcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihJTlZBTElEX1NJWkUpO1xuICB2YXIgaW50U2l6ZSA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtU2l6ZSk7XG4gIGlmIChpbnRTaXplIDwgMCkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHJldHVybiBuZXcgU2V0UmVjb3JkKG9iaiwgaW50U2l6ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICBlbHNlIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG52YXIgY3JlYXRlU2V0TGlrZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiB7XG4gICAgc2l6ZTogc2l6ZSxcbiAgICBoYXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgU2V0ID0gZ2V0QnVpbHRJbignU2V0Jyk7XG4gIHRyeSB7XG4gICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoMCkpO1xuICAgIHRyeSB7XG4gICAgICAvLyBsYXRlIHNwZWMgY2hhbmdlLCBlYXJseSBXZWJLaXQgfiBTYWZhcmkgMTcuMCBiZXRhIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHBhc3MgaXRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzL3B1bGwvODhcbiAgICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKC0xKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG5cbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSB7XG4gICAgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGhhcyhPLCBlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJzZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbnZhciBJTkNPUlJFQ1QgPSAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaW50ZXJzZWN0aW9uJykgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgZXMvbm8tc2V0IC0tIHRlc3RpbmdcbiAgcmV0dXJuIFN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsIDIsIDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywgMl0pKSkpICE9PSAnMywyJztcbn0pO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1QgfSwge1xuICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIHJldHVybiBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3Vic2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdWJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXRlcmF0ZShPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghb3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1YnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdWJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdWJzZXRPZicpIH0sIHtcbiAgaXNTdWJzZXRPZjogaXNTdWJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3VwZXJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1cGVyc2V0T2YnKSB9LCB7XG4gIGlzU3VwZXJzZXRPZjogaXNTdXBlcnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gICAgZWxzZSBhZGQocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHN5bW1ldHJpY0RpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3N5bW1ldHJpY0RpZmZlcmVuY2UnKSB9LCB7XG4gIHN5bW1ldHJpY0RpZmZlcmVuY2U6IHN5bW1ldHJpY0RpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgYWRkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuYWRkO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXVuaW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCd1bmlvbicpIH0sIHtcbiAgdW5pb246IHVuaW9uXG59KTtcbiIsICJpbXBvcnQgJ3RpcHB5LmpzL2Rpc3QvdGlwcHkuY3NzJztcblxuZXhwb3J0IHtkZWZhdWx0IGFzIHRpcHB5fSBmcm9tICd0aXBweS5qcyc7XG4iLCAiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCAiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsICJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsICJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwgInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgdmFyIHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICB2YXIgbGF5b3V0Vmlld3BvcnQgPSBpc0xheW91dFZpZXdwb3J0KCk7XG5cbiAgICBpZiAobGF5b3V0Vmlld3BvcnQgfHwgIWxheW91dFZpZXdwb3J0ICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwgImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwgImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwgImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGZhbHNlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpKSA6IGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwgImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyDigJMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCAiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCByZWN0cywgb2Zmc2V0KSB7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgdmFyIF9yZWYgPSB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSkpIDogb2Zmc2V0LFxuICAgICAgc2tpZGRpbmcgPSBfcmVmWzBdLFxuICAgICAgZGlzdGFuY2UgPSBfcmVmWzFdO1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcbiAgcmV0dXJuIFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8ge1xuICAgIHg6IGRpc3RhbmNlLFxuICAgIHk6IHNraWRkaW5nXG4gIH0gOiB7XG4gICAgeDogc2tpZGRpbmcsXG4gICAgeTogZGlzdGFuY2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZjIubmFtZTtcbiAgdmFyIF9vcHRpb25zJG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX29wdGlvbnMkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfb3B0aW9ucyRvZmZzZXQ7XG4gIHZhciBkYXRhID0gcGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHN0YXRlLnJlY3RzLCBvZmZzZXQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIF9kYXRhJHN0YXRlJHBsYWNlbWVudCA9IGRhdGFbc3RhdGUucGxhY2VtZW50XSxcbiAgICAgIHggPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueCxcbiAgICAgIHkgPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCArPSB4O1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55ICs9IHk7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldFxufTsiLCAiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tIFwiLi4vdXRpbHMvZ2V0QWx0QXhpcy5qc1wiO1xuaW1wb3J0IHsgd2l0aGluLCB3aXRoaW5NYXhDbGFtcCB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1pbiBhcyBtYXRoTWluLCBtYXggYXMgbWF0aE1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldFZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogdGV0aGVyT2Zmc2V0VmFsdWUsXG4gICAgYWx0QXhpczogdGV0aGVyT2Zmc2V0VmFsdWVcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgdGV0aGVyT2Zmc2V0VmFsdWUpO1xuICB2YXIgb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXRbc3RhdGUucGxhY2VtZW50XSA6IG51bGw7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDtcblxuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBvZmZzZXQgLSBvdmVyZmxvd1thbHRTaWRlXTtcbiAgICB2YXIgYWRkaXRpdmUgPSB0ZXRoZXIgPyAtcG9wcGVyUmVjdFtsZW5dIC8gMiA6IDA7XG4gICAgdmFyIG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgdmFyIG1heExlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyAtcG9wcGVyUmVjdFtsZW5dIDogLXJlZmVyZW5jZVJlY3RbbGVuXTsgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG5cbiAgICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgdmFyIGFycm93UmVjdCA9IHRldGhlciAmJiBhcnJvd0VsZW1lbnQgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdmFyIGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXSA/IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXS5wYWRkaW5nIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgdmFyIGFycm93UGFkZGluZ01pbiA9IGFycm93UGFkZGluZ09iamVjdFttYWluU2lkZV07XG4gICAgdmFyIGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTsgLy8gSWYgdGhlIHJlZmVyZW5jZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBhcnJvdyBsZW5ndGgsIHdlIGRvbid0IHdhbnRcbiAgICAvLyB0byBpbmNsdWRlIGl0cyBmdWxsIHNpemUgaW4gdGhlIGNhbGN1bGF0aW9uLiBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsXG4gICAgLy8gYW5kIG5lYXIgdGhlIGVkZ2Ugb2YgYSBib3VuZGFyeSwgdGhlIHBvcHBlciBjYW4gb3ZlcmZsb3cgZXZlbiBpZiB0aGVcbiAgICAvLyByZWZlcmVuY2UgaXMgbm90IG92ZXJmbG93aW5nIGFzIHdlbGwgKGUuZy4gdmlydHVhbCBlbGVtZW50cyB3aXRoIG5vXG4gICAgLy8gd2lkdGggb3IgaGVpZ2h0KVxuXG4gICAgdmFyIGFycm93TGVuID0gd2l0aGluKDAsIHJlZmVyZW5jZVJlY3RbbGVuXSwgYXJyb3dSZWN0W2xlbl0pO1xuICAgIHZhciBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC0gYWRkaXRpdmUgLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVttYWluQXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgOiAwO1xuICAgIHZhciB0ZXRoZXJNaW4gPSBvZmZzZXQgKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBvZmZzZXQgKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyO1xuXG4gICAgdmFyIF9tYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuXG4gICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgdmFyIF9sZW4gPSBhbHRBeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgdmFyIF9tYXggPSBfb2Zmc2V0IC0gb3ZlcmZsb3dbX2FsdFNpZGVdO1xuXG4gICAgdmFyIGlzT3JpZ2luU2lkZSA9IFt0b3AsIGxlZnRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJDIgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW2FsdEF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkMiA6IDA7XG5cbiAgICB2YXIgX3RldGhlck1pbiA9IGlzT3JpZ2luU2lkZSA/IF9taW4gOiBfb2Zmc2V0IC0gcmVmZXJlbmNlUmVjdFtfbGVuXSAtIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzO1xuXG4gICAgdmFyIF90ZXRoZXJNYXggPSBpc09yaWdpblNpZGUgPyBfb2Zmc2V0ICsgcmVmZXJlbmNlUmVjdFtfbGVuXSArIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzIDogX21heDtcblxuICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gdGV0aGVyICYmIGlzT3JpZ2luU2lkZSA/IHdpdGhpbk1heENsYW1wKF90ZXRoZXJNaW4sIF9vZmZzZXQsIF90ZXRoZXJNYXgpIDogd2l0aGluKHRldGhlciA/IF90ZXRoZXJNaW4gOiBfbWluLCBfb2Zmc2V0LCB0ZXRoZXIgPyBfdGV0aGVyTWF4IDogX21heCk7XG5cbiAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldCAtIF9vZmZzZXQ7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcm91bmQocmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDE7XG4gIHZhciBzY2FsZVkgPSByb3VuZChyZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkLCBpc0ZpeGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwgImV4cG9ydCBjb25zdCBST1VORF9BUlJPVyA9XG4gICc8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCI2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHpcIj48L3N2Zz4nO1xuXG5leHBvcnQgY29uc3QgQk9YX0NMQVNTID0gYF9fTkFNRVNQQUNFX1BSRUZJWF9fLWJveGA7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9DTEFTUyA9IGBfX05BTUVTUEFDRV9QUkVGSVhfXy1jb250ZW50YDtcbmV4cG9ydCBjb25zdCBCQUNLRFJPUF9DTEFTUyA9IGBfX05BTUVTUEFDRV9QUkVGSVhfXy1iYWNrZHJvcGA7XG5leHBvcnQgY29uc3QgQVJST1dfQ0xBU1MgPSBgX19OQU1FU1BBQ0VfUFJFRklYX18tYXJyb3dgO1xuZXhwb3J0IGNvbnN0IFNWR19BUlJPV19DTEFTUyA9IGBfX05BTUVTUEFDRV9QUkVGSVhfXy1zdmctYXJyb3dgO1xuXG5leHBvcnQgY29uc3QgVE9VQ0hfT1BUSU9OUyA9IHtwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiB0cnVlfTtcblxuZXhwb3J0IGNvbnN0IFRJUFBZX0RFRkFVTFRfQVBQRU5EX1RPID0gKCkgPT4gZG9jdW1lbnQuYm9keTtcbiIsICJpbXBvcnQge0Jhc2VQbGFjZW1lbnQsIFBsYWNlbWVudH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAga2V5OiBzdHJpbmdcbik6IGJvb2xlYW4ge1xuICByZXR1cm4ge30uaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUF0SW5kZXhPclJldHVybjxUPihcbiAgdmFsdWU6IFQgfCBbVCB8IG51bGwsIFQgfCBudWxsXSxcbiAgaW5kZXg6IG51bWJlcixcbiAgZGVmYXVsdFZhbHVlOiBUIHwgW1QsIFRdXG4pOiBUIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgdiA9IHZhbHVlW2luZGV4XTtcbiAgICByZXR1cm4gdiA9PSBudWxsXG4gICAgICA/IEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKVxuICAgICAgICA/IGRlZmF1bHRWYWx1ZVtpbmRleF1cbiAgICAgICAgOiBkZWZhdWx0VmFsdWVcbiAgICAgIDogdjtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZSh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgc3RyID0ge30udG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIHJldHVybiBzdHIuaW5kZXhPZignW29iamVjdCcpID09PSAwICYmIHN0ci5pbmRleE9mKGAke3R5cGV9XWApID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VXaXRoQXJnc09yUmV0dXJuKHZhbHVlOiBhbnksIGFyZ3M6IGFueVtdKTogYW55IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKC4uLmFyZ3MpIDogdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUPihcbiAgZm46IChhcmc6IFQpID0+IHZvaWQsXG4gIG1zOiBudW1iZXJcbik6IChhcmc6IFQpID0+IHZvaWQge1xuICAvLyBBdm9pZCB3cmFwcGluZyBpbiBgc2V0VGltZW91dGAgaWYgbXMgaXMgMCBhbnl3YXlcbiAgaWYgKG1zID09PSAwKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgbGV0IHRpbWVvdXQ6IGFueTtcblxuICByZXR1cm4gKGFyZyk6IHZvaWQgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBmbihhcmcpO1xuICAgIH0sIG1zKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnRpZXM8VD4ob2JqOiBULCBrZXlzOiBzdHJpbmdbXSk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjbG9uZSA9IHsuLi5vYmp9O1xuICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGRlbGV0ZSAoY2xvbmUgYXMgYW55KVtrZXldO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRCeVNwYWNlcyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUb0FycmF5PFQ+KHZhbHVlOiBUIHwgVFtdKTogVFtdIHtcbiAgcmV0dXJuIChbXSBhcyBUW10pLmNvbmNhdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoSWZVbmlxdWU8VD4oYXJyOiBUW10sIHZhbHVlOiBUKTogdm9pZCB7XG4gIGlmIChhcnIuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgYXJyLnB1c2godmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRQeElmTnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IGAke3ZhbHVlfXB4YCA6IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlPFQ+KGFycjogVFtdKTogVFtdIHtcbiAgcmV0dXJuIGFyci5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiBhcnIuaW5kZXhPZihpdGVtKSA9PT0gaW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogcGFyc2VGbG9hdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudDogUGxhY2VtZW50KTogQmFzZVBsYWNlbWVudCB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXSBhcyBCYXNlUGxhY2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlGcm9tKHZhbHVlOiBBcnJheUxpa2U8YW55Pik6IGFueVtdIHtcbiAgcmV0dXJuIFtdLnNsaWNlLmNhbGwodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcHMoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGlmIChvYmpba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAoYWNjIGFzIGFueSlba2V5XSA9IG9ialtrZXldO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbiIsICJpbXBvcnQge1JlZmVyZW5jZUVsZW1lbnQsIFRhcmdldHN9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtQb3BwZXJUcmVlRGF0YX0gZnJvbSAnLi90eXBlcy1pbnRlcm5hbCc7XG5pbXBvcnQge2FycmF5RnJvbSwgaXNUeXBlLCBub3JtYWxpemVUb0FycmF5LCBnZXRCYXNlUGxhY2VtZW50fSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRpdigpOiBIVE1MRGl2RWxlbWVudCB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVsZW1lbnQgfCBEb2N1bWVudEZyYWdtZW50IHtcbiAgcmV0dXJuIFsnRWxlbWVudCcsICdGcmFnbWVudCddLnNvbWUoKHR5cGUpID0+IGlzVHlwZSh2YWx1ZSwgdHlwZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTGlzdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE5vZGVMaXN0IHtcbiAgcmV0dXJuIGlzVHlwZSh2YWx1ZSwgJ05vZGVMaXN0Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vdXNlRXZlbnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBNb3VzZUV2ZW50IHtcbiAgcmV0dXJuIGlzVHlwZSh2YWx1ZSwgJ01vdXNlRXZlbnQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlRWxlbWVudCh2YWx1ZTogYW55KTogdmFsdWUgaXMgUmVmZXJlbmNlRWxlbWVudCB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fdGlwcHkgJiYgdmFsdWUuX3RpcHB5LnJlZmVyZW5jZSA9PT0gdmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJyYXlPZkVsZW1lbnRzKHZhbHVlOiBUYXJnZXRzKTogRWxlbWVudFtdIHtcbiAgaWYgKGlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gW3ZhbHVlXTtcbiAgfVxuXG4gIGlmIChpc05vZGVMaXN0KHZhbHVlKSkge1xuICAgIHJldHVybiBhcnJheUZyb20odmFsdWUpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5RnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uRHVyYXRpb24oXG4gIGVsczogKEhUTUxEaXZFbGVtZW50IHwgbnVsbClbXSxcbiAgdmFsdWU6IG51bWJlclxuKTogdm9pZCB7XG4gIGVscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGlmIChlbCkge1xuICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7dmFsdWV9bXNgO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRWaXNpYmlsaXR5U3RhdGUoXG4gIGVsczogKEhUTUxEaXZFbGVtZW50IHwgbnVsbClbXSxcbiAgc3RhdGU6ICd2aXNpYmxlJyB8ICdoaWRkZW4nXG4pOiB2b2lkIHtcbiAgZWxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnLCBzdGF0ZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnQoXG4gIGVsZW1lbnRPckVsZW1lbnRzOiBFbGVtZW50IHwgRWxlbWVudFtdXG4pOiBEb2N1bWVudCB7XG4gIGNvbnN0IFtlbGVtZW50XSA9IG5vcm1hbGl6ZVRvQXJyYXkoZWxlbWVudE9yRWxlbWVudHMpO1xuXG4gIC8vIEVsZW1lbnRzIGNyZWF0ZWQgdmlhIGEgPHRlbXBsYXRlPiBoYXZlIGFuIG93bmVyRG9jdW1lbnQgd2l0aCBubyByZWZlcmVuY2UgdG8gdGhlIGJvZHlcbiAgcmV0dXJuIGVsZW1lbnQ/Lm93bmVyRG9jdW1lbnQ/LmJvZHkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiBkb2N1bWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3Vyc29yT3V0c2lkZUludGVyYWN0aXZlQm9yZGVyKFxuICBwb3BwZXJUcmVlRGF0YTogUG9wcGVyVHJlZURhdGFbXSxcbiAgZXZlbnQ6IE1vdXNlRXZlbnRcbik6IGJvb2xlYW4ge1xuICBjb25zdCB7Y2xpZW50WCwgY2xpZW50WX0gPSBldmVudDtcblxuICByZXR1cm4gcG9wcGVyVHJlZURhdGEuZXZlcnkoKHtwb3BwZXJSZWN0LCBwb3BwZXJTdGF0ZSwgcHJvcHN9KSA9PiB7XG4gICAgY29uc3Qge2ludGVyYWN0aXZlQm9yZGVyfSA9IHByb3BzO1xuICAgIGNvbnN0IGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBvcHBlclN0YXRlLnBsYWNlbWVudCk7XG4gICAgY29uc3Qgb2Zmc2V0RGF0YSA9IHBvcHBlclN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0O1xuXG4gICAgaWYgKCFvZmZzZXREYXRhKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3BEaXN0YW5jZSA9IGJhc2VQbGFjZW1lbnQgPT09ICdib3R0b20nID8gb2Zmc2V0RGF0YS50b3AhLnkgOiAwO1xuICAgIGNvbnN0IGJvdHRvbURpc3RhbmNlID0gYmFzZVBsYWNlbWVudCA9PT0gJ3RvcCcgPyBvZmZzZXREYXRhLmJvdHRvbSEueSA6IDA7XG4gICAgY29uc3QgbGVmdERpc3RhbmNlID0gYmFzZVBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IG9mZnNldERhdGEubGVmdCEueCA6IDA7XG4gICAgY29uc3QgcmlnaHREaXN0YW5jZSA9IGJhc2VQbGFjZW1lbnQgPT09ICdsZWZ0JyA/IG9mZnNldERhdGEucmlnaHQhLnggOiAwO1xuXG4gICAgY29uc3QgZXhjZWVkc1RvcCA9XG4gICAgICBwb3BwZXJSZWN0LnRvcCAtIGNsaWVudFkgKyB0b3BEaXN0YW5jZSA+IGludGVyYWN0aXZlQm9yZGVyO1xuICAgIGNvbnN0IGV4Y2VlZHNCb3R0b20gPVxuICAgICAgY2xpZW50WSAtIHBvcHBlclJlY3QuYm90dG9tIC0gYm90dG9tRGlzdGFuY2UgPiBpbnRlcmFjdGl2ZUJvcmRlcjtcbiAgICBjb25zdCBleGNlZWRzTGVmdCA9XG4gICAgICBwb3BwZXJSZWN0LmxlZnQgLSBjbGllbnRYICsgbGVmdERpc3RhbmNlID4gaW50ZXJhY3RpdmVCb3JkZXI7XG4gICAgY29uc3QgZXhjZWVkc1JpZ2h0ID1cbiAgICAgIGNsaWVudFggLSBwb3BwZXJSZWN0LnJpZ2h0IC0gcmlnaHREaXN0YW5jZSA+IGludGVyYWN0aXZlQm9yZGVyO1xuXG4gICAgcmV0dXJuIGV4Y2VlZHNUb3AgfHwgZXhjZWVkc0JvdHRvbSB8fCBleGNlZWRzTGVmdCB8fCBleGNlZWRzUmlnaHQ7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbkVuZExpc3RlbmVyKFxuICBib3g6IEhUTUxEaXZFbGVtZW50LFxuICBhY3Rpb246ICdhZGQnIHwgJ3JlbW92ZScsXG4gIGxpc3RlbmVyOiAoZXZlbnQ6IFRyYW5zaXRpb25FdmVudCkgPT4gdm9pZFxuKTogdm9pZCB7XG4gIGNvbnN0IG1ldGhvZCA9IGAke2FjdGlvbn1FdmVudExpc3RlbmVyYCBhc1xuICAgIHwgJ2FkZEV2ZW50TGlzdGVuZXInXG4gICAgfCAncmVtb3ZlRXZlbnRMaXN0ZW5lcic7XG5cbiAgLy8gc29tZSBicm93c2VycyBhcHBhcmVudGx5IHN1cHBvcnQgYHRyYW5zaXRpb25gICh1bnByZWZpeGVkKSBidXQgb25seSBmaXJlXG4gIC8vIGB3ZWJraXRUcmFuc2l0aW9uRW5kYC4uLlxuICBbJ3RyYW5zaXRpb25lbmQnLCAnd2Via2l0VHJhbnNpdGlvbkVuZCddLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgYm94W21ldGhvZF0oZXZlbnQsIGxpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXIpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb21wYXJlZCB0byB4eHguY29udGFpbnMsIHRoaXMgZnVuY3Rpb24gd29ya3MgZm9yIGRvbSBzdHJ1Y3R1cmVzIHdpdGggc2hhZG93XG4gKiBkb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjdHVhbENvbnRhaW5zKHBhcmVudDogRWxlbWVudCwgY2hpbGQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgbGV0IHRhcmdldCA9IGNoaWxkO1xuICB3aGlsZSAodGFyZ2V0KSB7XG4gICAgaWYgKHBhcmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGFyZ2V0ID0gKHRhcmdldC5nZXRSb290Tm9kZT8uKCkgYXMgYW55KT8uaG9zdDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCAiaW1wb3J0IHtUT1VDSF9PUFRJT05TfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge2lzUmVmZXJlbmNlRWxlbWVudH0gZnJvbSAnLi9kb20tdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgY3VycmVudElucHV0ID0ge2lzVG91Y2g6IGZhbHNlfTtcbmxldCBsYXN0TW91c2VNb3ZlVGltZSA9IDA7XG5cbi8qKlxuICogV2hlbiBhIGB0b3VjaHN0YXJ0YCBldmVudCBpcyBmaXJlZCwgaXQncyBhc3N1bWVkIHRoZSB1c2VyIGlzIHVzaW5nIHRvdWNoXG4gKiBpbnB1dC4gV2UnbGwgYmluZCBhIGBtb3VzZW1vdmVgIGV2ZW50IGxpc3RlbmVyIHRvIGxpc3RlbiBmb3IgbW91c2UgaW5wdXQgaW5cbiAqIHRoZSBmdXR1cmUuIFRoaXMgd2F5LCB0aGUgYGlzVG91Y2hgIHByb3BlcnR5IGlzIGZ1bGx5IGR5bmFtaWMgYW5kIHdpbGwgaGFuZGxlXG4gKiBoeWJyaWQgZGV2aWNlcyB0aGF0IHVzZSBhIG1peCBvZiB0b3VjaCArIG1vdXNlIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25Eb2N1bWVudFRvdWNoU3RhcnQoKTogdm9pZCB7XG4gIGlmIChjdXJyZW50SW5wdXQuaXNUb3VjaCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGN1cnJlbnRJbnB1dC5pc1RvdWNoID0gdHJ1ZTtcblxuICBpZiAod2luZG93LnBlcmZvcm1hbmNlKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Eb2N1bWVudE1vdXNlTW92ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGVuIHR3byBgbW91c2Vtb3ZlYCBldmVudCBhcmUgZmlyZWQgY29uc2VjdXRpdmVseSB3aXRoaW4gMjBtcywgaXQncyBhc3N1bWVkXG4gKiB0aGUgdXNlciBpcyB1c2luZyBtb3VzZSBpbnB1dCBhZ2Fpbi4gYG1vdXNlbW92ZWAgY2FuIGZpcmUgb24gdG91Y2ggZGV2aWNlcyBhc1xuICogd2VsbCwgYnV0IHZlcnkgcmFyZWx5IHRoYXQgcXVpY2tseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uRG9jdW1lbnRNb3VzZU1vdmUoKTogdm9pZCB7XG4gIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIGlmIChub3cgLSBsYXN0TW91c2VNb3ZlVGltZSA8IDIwKSB7XG4gICAgY3VycmVudElucHV0LmlzVG91Y2ggPSBmYWxzZTtcblxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uRG9jdW1lbnRNb3VzZU1vdmUpO1xuICB9XG5cbiAgbGFzdE1vdXNlTW92ZVRpbWUgPSBub3c7XG59XG5cbi8qKlxuICogV2hlbiBhbiBlbGVtZW50IGlzIGluIGZvY3VzIGFuZCBoYXMgYSB0aXBweSwgbGVhdmluZyB0aGUgdGFiL3dpbmRvdyBhbmRcbiAqIHJldHVybmluZyBjYXVzZXMgaXQgdG8gc2hvdyBhZ2Fpbi4gRm9yIG1vdXNlIHVzZXJzIHRoaXMgaXMgdW5leHBlY3RlZCwgYnV0XG4gKiBmb3Iga2V5Ym9hcmQgdXNlIGl0IG1ha2VzIHNlbnNlLlxuICogVE9ETzogZmluZCBhIGJldHRlciB0ZWNobmlxdWUgdG8gc29sdmUgdGhpcyBwcm9ibGVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbldpbmRvd0JsdXIoKTogdm9pZCB7XG4gIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICBpZiAoaXNSZWZlcmVuY2VFbGVtZW50KGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhY3RpdmVFbGVtZW50Ll90aXBweSE7XG5cbiAgICBpZiAoYWN0aXZlRWxlbWVudC5ibHVyICYmICFpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kR2xvYmFsRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvbkRvY3VtZW50VG91Y2hTdGFydCwgVE9VQ0hfT1BUSU9OUyk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn1cbiIsICJleHBvcnQgY29uc3QgaXNCcm93c2VyID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGNvbnN0IGlzSUUxMSA9IGlzQnJvd3NlclxuICA/IC8vIEB0cy1pZ25vcmVcbiAgICAhIXdpbmRvdy5tc0NyeXB0b1xuICA6IGZhbHNlO1xuIiwgImltcG9ydCB7VGFyZ2V0c30gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZW1vcnlMZWFrV2FybmluZyhtZXRob2Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHR4dCA9IG1ldGhvZCA9PT0gJ2Rlc3Ryb3knID8gJ24gYWxyZWFkeS0nIDogJyAnO1xuXG4gIHJldHVybiBbXG4gICAgYCR7bWV0aG9kfSgpIHdhcyBjYWxsZWQgb24gYSR7dHh0fWRlc3Ryb3llZCBpbnN0YW5jZS4gVGhpcyBpcyBhIG5vLW9wIGJ1dGAsXG4gICAgJ2luZGljYXRlcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhay4nLFxuICBdLmpvaW4oJyAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzcGFjZXNBbmRUYWJzID0gL1sgXFx0XXsyLH0vZztcbiAgY29uc3QgbGluZVN0YXJ0V2l0aFNwYWNlcyA9IC9eWyBcXHRdKi9nbTtcblxuICByZXR1cm4gdmFsdWVcbiAgICAucmVwbGFjZShzcGFjZXNBbmRUYWJzLCAnICcpXG4gICAgLnJlcGxhY2UobGluZVN0YXJ0V2l0aFNwYWNlcywgJycpXG4gICAgLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGV2TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2xlYW4oYFxuICAlY3RpcHB5LmpzXG5cbiAgJWMke2NsZWFuKG1lc3NhZ2UpfVxuXG4gICVj8J+Rt+KAjSBUaGlzIGlzIGEgZGV2ZWxvcG1lbnQtb25seSBtZXNzYWdlLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gcHJvZHVjdGlvbi5cbiAgYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICBnZXREZXZNZXNzYWdlKG1lc3NhZ2UpLFxuICAgIC8vIHRpdGxlXG4gICAgJ2NvbG9yOiAjMDBDNTg0OyBmb250LXNpemU6IDEuM2VtOyBmb250LXdlaWdodDogYm9sZDsnLFxuICAgIC8vIG1lc3NhZ2VcbiAgICAnbGluZS1oZWlnaHQ6IDEuNScsXG4gICAgLy8gZm9vdGVyXG4gICAgJ2NvbG9yOiAjYTZhMDk1OycsXG4gIF07XG59XG5cbi8vIEFzc3VtZSB3YXJuaW5ncyBhbmQgZXJyb3JzIG5ldmVyIGhhdmUgdGhlIHNhbWUgbWVzc2FnZVxubGV0IHZpc2l0ZWRNZXNzYWdlczogU2V0PHN0cmluZz47XG5pZiAoX19ERVZfXykge1xuICByZXNldFZpc2l0ZWRNZXNzYWdlcygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRWaXNpdGVkTWVzc2FnZXMoKTogdm9pZCB7XG4gIHZpc2l0ZWRNZXNzYWdlcyA9IG5ldyBTZXQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5XaGVuKGNvbmRpdGlvbjogYm9vbGVhbiwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChjb25kaXRpb24gJiYgIXZpc2l0ZWRNZXNzYWdlcy5oYXMobWVzc2FnZSkpIHtcbiAgICB2aXNpdGVkTWVzc2FnZXMuYWRkKG1lc3NhZ2UpO1xuICAgIGNvbnNvbGUud2FybiguLi5nZXRGb3JtYXR0ZWRNZXNzYWdlKG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JXaGVuKGNvbmRpdGlvbjogYm9vbGVhbiwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChjb25kaXRpb24gJiYgIXZpc2l0ZWRNZXNzYWdlcy5oYXMobWVzc2FnZSkpIHtcbiAgICB2aXNpdGVkTWVzc2FnZXMuYWRkKG1lc3NhZ2UpO1xuICAgIGNvbnNvbGUuZXJyb3IoLi4uZ2V0Rm9ybWF0dGVkTWVzc2FnZShtZXNzYWdlKSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGFyZ2V0cyh0YXJnZXRzOiBUYXJnZXRzKTogdm9pZCB7XG4gIGNvbnN0IGRpZFBhc3NGYWxzeVZhbHVlID0gIXRhcmdldHM7XG4gIGNvbnN0IGRpZFBhc3NQbGFpbk9iamVjdCA9XG4gICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRhcmdldHMpID09PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICEodGFyZ2V0cyBhcyBhbnkpLmFkZEV2ZW50TGlzdGVuZXI7XG5cbiAgZXJyb3JXaGVuKFxuICAgIGRpZFBhc3NGYWxzeVZhbHVlLFxuICAgIFtcbiAgICAgICd0aXBweSgpIHdhcyBwYXNzZWQnLFxuICAgICAgJ2AnICsgU3RyaW5nKHRhcmdldHMpICsgJ2AnLFxuICAgICAgJ2FzIGl0cyB0YXJnZXRzIChmaXJzdCkgYXJndW1lbnQuIFZhbGlkIHR5cGVzIGFyZTogU3RyaW5nLCBFbGVtZW50LCcsXG4gICAgICAnRWxlbWVudFtdLCBvciBOb2RlTGlzdC4nLFxuICAgIF0uam9pbignICcpXG4gICk7XG5cbiAgZXJyb3JXaGVuKFxuICAgIGRpZFBhc3NQbGFpbk9iamVjdCxcbiAgICBbXG4gICAgICAndGlwcHkoKSB3YXMgcGFzc2VkIGEgcGxhaW4gb2JqZWN0IHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYW4gYXJndW1lbnQnLFxuICAgICAgJ2ZvciB2aXJ0dWFsIHBvc2l0aW9uaW5nLiBVc2UgcHJvcHMuZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdCBpbnN0ZWFkLicsXG4gICAgXS5qb2luKCcgJylcbiAgKTtcbn1cbiIsICJpbXBvcnQge0RlZmF1bHRQcm9wcywgUGx1Z2luLCBQcm9wcywgUmVmZXJlbmNlRWxlbWVudCwgVGlwcHl9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgaGFzT3duUHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnRpZXMsXG4gIGludm9rZVdpdGhBcmdzT3JSZXR1cm4sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHt3YXJuV2hlbn0gZnJvbSAnLi92YWxpZGF0aW9uJztcbmltcG9ydCB7VElQUFlfREVGQVVMVF9BUFBFTkRfVE99IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgcGx1Z2luUHJvcHMgPSB7XG4gIGFuaW1hdGVGaWxsOiBmYWxzZSxcbiAgZm9sbG93Q3Vyc29yOiBmYWxzZSxcbiAgaW5saW5lUG9zaXRpb25pbmc6IGZhbHNlLFxuICBzdGlja3k6IGZhbHNlLFxufTtcblxuY29uc3QgcmVuZGVyUHJvcHMgPSB7XG4gIGFsbG93SFRNTDogZmFsc2UsXG4gIGFuaW1hdGlvbjogJ2ZhZGUnLFxuICBhcnJvdzogdHJ1ZSxcbiAgY29udGVudDogJycsXG4gIGluZXJ0aWE6IGZhbHNlLFxuICBtYXhXaWR0aDogMzUwLFxuICByb2xlOiAndG9vbHRpcCcsXG4gIHRoZW1lOiAnJyxcbiAgekluZGV4OiA5OTk5LFxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRQcm9wczogRGVmYXVsdFByb3BzID0ge1xuICBhcHBlbmRUbzogVElQUFlfREVGQVVMVF9BUFBFTkRfVE8sXG4gIGFyaWE6IHtcbiAgICBjb250ZW50OiAnYXV0bycsXG4gICAgZXhwYW5kZWQ6ICdhdXRvJyxcbiAgfSxcbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiBbMzAwLCAyNTBdLFxuICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0OiBudWxsLFxuICBoaWRlT25DbGljazogdHJ1ZSxcbiAgaWdub3JlQXR0cmlidXRlczogZmFsc2UsXG4gIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgaW50ZXJhY3RpdmVCb3JkZXI6IDIsXG4gIGludGVyYWN0aXZlRGVib3VuY2U6IDAsXG4gIG1vdmVUcmFuc2l0aW9uOiAnJyxcbiAgb2Zmc2V0OiBbMCwgMTBdLFxuICBvbkFmdGVyVXBkYXRlKCkge30sXG4gIG9uQmVmb3JlVXBkYXRlKCkge30sXG4gIG9uQ3JlYXRlKCkge30sXG4gIG9uRGVzdHJveSgpIHt9LFxuICBvbkhpZGRlbigpIHt9LFxuICBvbkhpZGUoKSB7fSxcbiAgb25Nb3VudCgpIHt9LFxuICBvblNob3coKSB7fSxcbiAgb25TaG93bigpIHt9LFxuICBvblRyaWdnZXIoKSB7fSxcbiAgb25VbnRyaWdnZXIoKSB7fSxcbiAgb25DbGlja091dHNpZGUoKSB7fSxcbiAgcGxhY2VtZW50OiAndG9wJyxcbiAgcGx1Z2luczogW10sXG4gIHBvcHBlck9wdGlvbnM6IHt9LFxuICByZW5kZXI6IG51bGwsXG4gIHNob3dPbkNyZWF0ZTogZmFsc2UsXG4gIHRvdWNoOiB0cnVlLFxuICB0cmlnZ2VyOiAnbW91c2VlbnRlciBmb2N1cycsXG4gIHRyaWdnZXJUYXJnZXQ6IG51bGwsXG4gIC4uLnBsdWdpblByb3BzLFxuICAuLi5yZW5kZXJQcm9wcyxcbn07XG5cbmNvbnN0IGRlZmF1bHRLZXlzID0gT2JqZWN0LmtleXMoZGVmYXVsdFByb3BzKTtcblxuZXhwb3J0IGNvbnN0IHNldERlZmF1bHRQcm9wczogVGlwcHlbJ3NldERlZmF1bHRQcm9wcyddID0gKHBhcnRpYWxQcm9wcykgPT4ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoX19ERVZfXykge1xuICAgIHZhbGlkYXRlUHJvcHMocGFydGlhbFByb3BzLCBbXSk7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFydGlhbFByb3BzKSBhcyBBcnJheTxrZXlvZiBEZWZhdWx0UHJvcHM+O1xuICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIChkZWZhdWx0UHJvcHMgYXMgYW55KVtrZXldID0gcGFydGlhbFByb3BzW2tleV07XG4gIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuZGVkUGFzc2VkUHJvcHMoXG4gIHBhc3NlZFByb3BzOiBQYXJ0aWFsPFByb3BzPiAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBQYXJ0aWFsPFByb3BzPiB7XG4gIGNvbnN0IHBsdWdpbnMgPSBwYXNzZWRQcm9wcy5wbHVnaW5zIHx8IFtdO1xuICBjb25zdCBwbHVnaW5Qcm9wcyA9IHBsdWdpbnMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigoYWNjLCBwbHVnaW4pID0+IHtcbiAgICBjb25zdCB7bmFtZSwgZGVmYXVsdFZhbHVlfSA9IHBsdWdpbjtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBhY2NbbmFtZV0gPVxuICAgICAgICBwYXNzZWRQcm9wc1tuYW1lXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBwYXNzZWRQcm9wc1tuYW1lXVxuICAgICAgICAgIDogKGRlZmF1bHRQcm9wcyBhcyBhbnkpW25hbWVdID8/IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wYXNzZWRQcm9wcyxcbiAgICAuLi5wbHVnaW5Qcm9wcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFBdHRyaWJ1dGVQcm9wcyhcbiAgcmVmZXJlbmNlOiBSZWZlcmVuY2VFbGVtZW50LFxuICBwbHVnaW5zOiBQbHVnaW5bXVxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCBwcm9wS2V5cyA9IHBsdWdpbnNcbiAgICA/IE9iamVjdC5rZXlzKGdldEV4dGVuZGVkUGFzc2VkUHJvcHMoey4uLmRlZmF1bHRQcm9wcywgcGx1Z2luc30pKVxuICAgIDogZGVmYXVsdEtleXM7XG5cbiAgY29uc3QgcHJvcHMgPSBwcm9wS2V5cy5yZWR1Y2UoXG4gICAgKGFjYzogUGFydGlhbDxQcm9wcz4gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZUFzU3RyaW5nID0gKFxuICAgICAgICByZWZlcmVuY2UuZ2V0QXR0cmlidXRlKGBkYXRhLXRpcHB5LSR7a2V5fWApIHx8ICcnXG4gICAgICApLnRyaW0oKTtcblxuICAgICAgaWYgKCF2YWx1ZUFzU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdjb250ZW50Jykge1xuICAgICAgICBhY2Nba2V5XSA9IHZhbHVlQXNTdHJpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFjY1trZXldID0gSlNPTi5wYXJzZSh2YWx1ZUFzU3RyaW5nKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGFjY1trZXldID0gdmFsdWVBc1N0cmluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAge31cbiAgKTtcblxuICByZXR1cm4gcHJvcHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZVByb3BzKFxuICByZWZlcmVuY2U6IFJlZmVyZW5jZUVsZW1lbnQsXG4gIHByb3BzOiBQcm9wc1xuKTogUHJvcHMge1xuICBjb25zdCBvdXQgPSB7XG4gICAgLi4ucHJvcHMsXG4gICAgY29udGVudDogaW52b2tlV2l0aEFyZ3NPclJldHVybihwcm9wcy5jb250ZW50LCBbcmVmZXJlbmNlXSksXG4gICAgLi4uKHByb3BzLmlnbm9yZUF0dHJpYnV0ZXNcbiAgICAgID8ge31cbiAgICAgIDogZ2V0RGF0YUF0dHJpYnV0ZVByb3BzKHJlZmVyZW5jZSwgcHJvcHMucGx1Z2lucykpLFxuICB9O1xuXG4gIG91dC5hcmlhID0ge1xuICAgIC4uLmRlZmF1bHRQcm9wcy5hcmlhLFxuICAgIC4uLm91dC5hcmlhLFxuICB9O1xuXG4gIG91dC5hcmlhID0ge1xuICAgIGV4cGFuZGVkOlxuICAgICAgb3V0LmFyaWEuZXhwYW5kZWQgPT09ICdhdXRvJyA/IHByb3BzLmludGVyYWN0aXZlIDogb3V0LmFyaWEuZXhwYW5kZWQsXG4gICAgY29udGVudDpcbiAgICAgIG91dC5hcmlhLmNvbnRlbnQgPT09ICdhdXRvJ1xuICAgICAgICA/IHByb3BzLmludGVyYWN0aXZlXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiAnZGVzY3JpYmVkYnknXG4gICAgICAgIDogb3V0LmFyaWEuY29udGVudCxcbiAgfTtcblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhcbiAgcGFydGlhbFByb3BzOiBQYXJ0aWFsPFByb3BzPiA9IHt9LFxuICBwbHVnaW5zOiBQbHVnaW5bXSA9IFtdXG4pOiB2b2lkIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcnRpYWxQcm9wcykgYXMgQXJyYXk8a2V5b2YgUHJvcHM+O1xuICBrZXlzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICBjb25zdCBub25QbHVnaW5Qcm9wcyA9IHJlbW92ZVByb3BlcnRpZXMoXG4gICAgICBkZWZhdWx0UHJvcHMsXG4gICAgICBPYmplY3Qua2V5cyhwbHVnaW5Qcm9wcylcbiAgICApO1xuXG4gICAgbGV0IGRpZFBhc3NVbmtub3duUHJvcCA9ICFoYXNPd25Qcm9wZXJ0eShub25QbHVnaW5Qcm9wcywgcHJvcCk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgcHJvcCBleGlzdHMgaW4gYHBsdWdpbnNgXG4gICAgaWYgKGRpZFBhc3NVbmtub3duUHJvcCkge1xuICAgICAgZGlkUGFzc1Vua25vd25Qcm9wID1cbiAgICAgICAgcGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4gcGx1Z2luLm5hbWUgPT09IHByb3ApLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB3YXJuV2hlbihcbiAgICAgIGRpZFBhc3NVbmtub3duUHJvcCxcbiAgICAgIFtcbiAgICAgICAgYFxcYCR7cHJvcH1cXGBgLFxuICAgICAgICBcImlzIG5vdCBhIHZhbGlkIHByb3AuIFlvdSBtYXkgaGF2ZSBzcGVsbGVkIGl0IGluY29ycmVjdGx5LCBvciBpZiBpdCdzXCIsXG4gICAgICAgICdhIHBsdWdpbiwgZm9yZ290IHRvIHBhc3MgaXQgaW4gYW4gYXJyYXkgYXMgcHJvcHMucGx1Z2lucy4nLFxuICAgICAgICAnXFxuXFxuJyxcbiAgICAgICAgJ0FsbCBwcm9wczogaHR0cHM6Ly9hdG9taWtzLmdpdGh1Yi5pby90aXBweWpzL3Y2L2FsbC1wcm9wcy9cXG4nLFxuICAgICAgICAnUGx1Z2luczogaHR0cHM6Ly9hdG9taWtzLmdpdGh1Yi5pby90aXBweWpzL3Y2L3BsdWdpbnMvJyxcbiAgICAgIF0uam9pbignICcpXG4gICAgKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHtcbiAgQVJST1dfQ0xBU1MsXG4gIEJBQ0tEUk9QX0NMQVNTLFxuICBCT1hfQ0xBU1MsXG4gIENPTlRFTlRfQ0xBU1MsXG4gIFNWR19BUlJPV19DTEFTUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtkaXYsIGlzRWxlbWVudH0gZnJvbSAnLi9kb20tdXRpbHMnO1xuaW1wb3J0IHtJbnN0YW5jZSwgUG9wcGVyRWxlbWVudCwgUHJvcHN9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtQb3BwZXJDaGlsZHJlbn0gZnJvbSAnLi90eXBlcy1pbnRlcm5hbCc7XG5pbXBvcnQge2FycmF5RnJvbX0gZnJvbSAnLi91dGlscyc7XG5cbi8vIEZpcmVmb3ggZXh0ZW5zaW9ucyBkb24ndCBhbGxvdyAuaW5uZXJIVE1MID0gXCIuLi5cIiBwcm9wZXJ0eS4gVGhpcyB0cmlja3MgaXQuXG5jb25zdCBpbm5lckhUTUwgPSAoKTogJ2lubmVySFRNTCcgPT4gJ2lubmVySFRNTCc7XG5cbmZ1bmN0aW9uIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKGVsZW1lbnQ6IEVsZW1lbnQsIGh0bWw6IHN0cmluZyk6IHZvaWQge1xuICBlbGVtZW50W2lubmVySFRNTCgpXSA9IGh0bWw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFycm93RWxlbWVudCh2YWx1ZTogUHJvcHNbJ2Fycm93J10pOiBIVE1MRGl2RWxlbWVudCB7XG4gIGNvbnN0IGFycm93ID0gZGl2KCk7XG5cbiAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgYXJyb3cuY2xhc3NOYW1lID0gQVJST1dfQ0xBU1M7XG4gIH0gZWxzZSB7XG4gICAgYXJyb3cuY2xhc3NOYW1lID0gU1ZHX0FSUk9XX0NMQVNTO1xuXG4gICAgaWYgKGlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgIGFycm93LmFwcGVuZENoaWxkKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwoYXJyb3csIHZhbHVlIGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycm93O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udGVudChjb250ZW50OiBIVE1MRGl2RWxlbWVudCwgcHJvcHM6IFByb3BzKTogdm9pZCB7XG4gIGlmIChpc0VsZW1lbnQocHJvcHMuY29udGVudCkpIHtcbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTChjb250ZW50LCAnJyk7XG4gICAgY29udGVudC5hcHBlbmRDaGlsZChwcm9wcy5jb250ZW50KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuY29udGVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChwcm9wcy5hbGxvd0hUTUwpIHtcbiAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKGNvbnRlbnQsIHByb3BzLmNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50LnRleHRDb250ZW50ID0gcHJvcHMuY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkcmVuKHBvcHBlcjogUG9wcGVyRWxlbWVudCk6IFBvcHBlckNoaWxkcmVuIHtcbiAgY29uc3QgYm94ID0gcG9wcGVyLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxEaXZFbGVtZW50O1xuICBjb25zdCBib3hDaGlsZHJlbiA9IGFycmF5RnJvbShib3guY2hpbGRyZW4pO1xuXG4gIHJldHVybiB7XG4gICAgYm94LFxuICAgIGNvbnRlbnQ6IGJveENoaWxkcmVuLmZpbmQoKG5vZGUpID0+IG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENPTlRFTlRfQ0xBU1MpKSxcbiAgICBhcnJvdzogYm94Q2hpbGRyZW4uZmluZChcbiAgICAgIChub2RlKSA9PlxuICAgICAgICBub2RlLmNsYXNzTGlzdC5jb250YWlucyhBUlJPV19DTEFTUykgfHxcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoU1ZHX0FSUk9XX0NMQVNTKVxuICAgICksXG4gICAgYmFja2Ryb3A6IGJveENoaWxkcmVuLmZpbmQoKG5vZGUpID0+XG4gICAgICBub2RlLmNsYXNzTGlzdC5jb250YWlucyhCQUNLRFJPUF9DTEFTUylcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKFxuICBpbnN0YW5jZTogSW5zdGFuY2Vcbik6IHtcbiAgcG9wcGVyOiBQb3BwZXJFbGVtZW50O1xuICBvblVwZGF0ZT86IChwcmV2UHJvcHM6IFByb3BzLCBuZXh0UHJvcHM6IFByb3BzKSA9PiB2b2lkO1xufSB7XG4gIGNvbnN0IHBvcHBlciA9IGRpdigpO1xuXG4gIGNvbnN0IGJveCA9IGRpdigpO1xuICBib3guY2xhc3NOYW1lID0gQk9YX0NMQVNTO1xuICBib3guc2V0QXR0cmlidXRlKCdkYXRhLXN0YXRlJywgJ2hpZGRlbicpO1xuICBib3guc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBkaXYoKTtcbiAgY29udGVudC5jbGFzc05hbWUgPSBDT05URU5UX0NMQVNTO1xuICBjb250ZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScsICdoaWRkZW4nKTtcblxuICBzZXRDb250ZW50KGNvbnRlbnQsIGluc3RhbmNlLnByb3BzKTtcblxuICBwb3BwZXIuYXBwZW5kQ2hpbGQoYm94KTtcbiAgYm94LmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuXG4gIG9uVXBkYXRlKGluc3RhbmNlLnByb3BzLCBpbnN0YW5jZS5wcm9wcyk7XG5cbiAgZnVuY3Rpb24gb25VcGRhdGUocHJldlByb3BzOiBQcm9wcywgbmV4dFByb3BzOiBQcm9wcyk6IHZvaWQge1xuICAgIGNvbnN0IHtib3gsIGNvbnRlbnQsIGFycm93fSA9IGdldENoaWxkcmVuKHBvcHBlcik7XG5cbiAgICBpZiAobmV4dFByb3BzLnRoZW1lKSB7XG4gICAgICBib3guc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJywgbmV4dFByb3BzLnRoZW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm94LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aGVtZScpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLmFuaW1hdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJveC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYW5pbWF0aW9uJywgbmV4dFByb3BzLmFuaW1hdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJveC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYW5pbWF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKG5leHRQcm9wcy5pbmVydGlhKSB7XG4gICAgICBib3guc2V0QXR0cmlidXRlKCdkYXRhLWluZXJ0aWEnLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJveC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtaW5lcnRpYScpO1xuICAgIH1cblxuICAgIGJveC5zdHlsZS5tYXhXaWR0aCA9XG4gICAgICB0eXBlb2YgbmV4dFByb3BzLm1heFdpZHRoID09PSAnbnVtYmVyJ1xuICAgICAgICA/IGAke25leHRQcm9wcy5tYXhXaWR0aH1weGBcbiAgICAgICAgOiBuZXh0UHJvcHMubWF4V2lkdGg7XG5cbiAgICBpZiAobmV4dFByb3BzLnJvbGUpIHtcbiAgICAgIGJveC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCBuZXh0UHJvcHMucm9sZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJveC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcmV2UHJvcHMuY29udGVudCAhPT0gbmV4dFByb3BzLmNvbnRlbnQgfHxcbiAgICAgIHByZXZQcm9wcy5hbGxvd0hUTUwgIT09IG5leHRQcm9wcy5hbGxvd0hUTUxcbiAgICApIHtcbiAgICAgIHNldENvbnRlbnQoY29udGVudCwgaW5zdGFuY2UucHJvcHMpO1xuICAgIH1cblxuICAgIGlmIChuZXh0UHJvcHMuYXJyb3cpIHtcbiAgICAgIGlmICghYXJyb3cpIHtcbiAgICAgICAgYm94LmFwcGVuZENoaWxkKGNyZWF0ZUFycm93RWxlbWVudChuZXh0UHJvcHMuYXJyb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAocHJldlByb3BzLmFycm93ICE9PSBuZXh0UHJvcHMuYXJyb3cpIHtcbiAgICAgICAgYm94LnJlbW92ZUNoaWxkKGFycm93KTtcbiAgICAgICAgYm94LmFwcGVuZENoaWxkKGNyZWF0ZUFycm93RWxlbWVudChuZXh0UHJvcHMuYXJyb3cpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFycm93KSB7XG4gICAgICBib3gucmVtb3ZlQ2hpbGQoYXJyb3chKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBvcHBlcixcbiAgICBvblVwZGF0ZSxcbiAgfTtcbn1cblxuLy8gUnVudGltZSBjaGVjayB0byBpZGVudGlmeSBpZiB0aGUgcmVuZGVyIGZ1bmN0aW9uIGlzIHRoZSBkZWZhdWx0IG9uZTsgdGhpc1xuLy8gd2F5IHdlIGNhbiBhcHBseSBkZWZhdWx0IENTUyB0cmFuc2l0aW9ucyBsb2dpYyBhbmQgaXQgY2FuIGJlIHRyZWUtc2hha2VuIGF3YXlcbnJlbmRlci4kJHRpcHB5ID0gdHJ1ZTtcbiIsICJpbXBvcnQge2NyZWF0ZVBvcHBlciwgU3RyaWN0TW9kaWZpZXJzLCBNb2RpZmllcn0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuaW1wb3J0IHtjdXJyZW50SW5wdXR9IGZyb20gJy4vYmluZEdsb2JhbEV2ZW50TGlzdGVuZXJzJztcbmltcG9ydCB7aXNJRTExfSBmcm9tICcuL2Jyb3dzZXInO1xuaW1wb3J0IHtUSVBQWV9ERUZBVUxUX0FQUEVORF9UTywgVE9VQ0hfT1BUSU9OU30gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgYWN0dWFsQ29udGFpbnMsXG4gIGRpdixcbiAgZ2V0T3duZXJEb2N1bWVudCxcbiAgaXNDdXJzb3JPdXRzaWRlSW50ZXJhY3RpdmVCb3JkZXIsXG4gIGlzTW91c2VFdmVudCxcbiAgc2V0VHJhbnNpdGlvbkR1cmF0aW9uLFxuICBzZXRWaXNpYmlsaXR5U3RhdGUsXG4gIHVwZGF0ZVRyYW5zaXRpb25FbmRMaXN0ZW5lcixcbn0gZnJvbSAnLi9kb20tdXRpbHMnO1xuaW1wb3J0IHtkZWZhdWx0UHJvcHMsIGV2YWx1YXRlUHJvcHMsIGdldEV4dGVuZGVkUGFzc2VkUHJvcHN9IGZyb20gJy4vcHJvcHMnO1xuaW1wb3J0IHtnZXRDaGlsZHJlbn0gZnJvbSAnLi90ZW1wbGF0ZSc7XG5pbXBvcnQge1xuICBDb250ZW50LFxuICBJbnN0YW5jZSxcbiAgTGlmZWN5Y2xlSG9va3MsXG4gIFBvcHBlckVsZW1lbnQsXG4gIFByb3BzLFxuICBSZWZlcmVuY2VFbGVtZW50LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7TGlzdGVuZXJPYmplY3QsIFBvcHBlclRyZWVEYXRhLCBQb3BwZXJDaGlsZHJlbn0gZnJvbSAnLi90eXBlcy1pbnRlcm5hbCc7XG5pbXBvcnQge1xuICBhcnJheUZyb20sXG4gIGRlYm91bmNlLFxuICBnZXRWYWx1ZUF0SW5kZXhPclJldHVybixcbiAgaW52b2tlV2l0aEFyZ3NPclJldHVybixcbiAgbm9ybWFsaXplVG9BcnJheSxcbiAgcHVzaElmVW5pcXVlLFxuICBzcGxpdEJ5U3BhY2VzLFxuICB1bmlxdWUsXG4gIHJlbW92ZVVuZGVmaW5lZFByb3BzLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlTWVtb3J5TGVha1dhcm5pbmcsIGVycm9yV2hlbiwgd2FybldoZW59IGZyb20gJy4vdmFsaWRhdGlvbic7XG5cbmxldCBpZENvdW50ZXIgPSAxO1xubGV0IG1vdXNlTW92ZUxpc3RlbmVyczogKChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZClbXSA9IFtdO1xuXG4vLyBVc2VkIGJ5IGBoaWRlQWxsKClgXG5leHBvcnQgbGV0IG1vdW50ZWRJbnN0YW5jZXM6IEluc3RhbmNlW10gPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVGlwcHkoXG4gIHJlZmVyZW5jZTogUmVmZXJlbmNlRWxlbWVudCxcbiAgcGFzc2VkUHJvcHM6IFBhcnRpYWw8UHJvcHM+XG4pOiBJbnN0YW5jZSB7XG4gIGNvbnN0IHByb3BzID0gZXZhbHVhdGVQcm9wcyhyZWZlcmVuY2UsIHtcbiAgICAuLi5kZWZhdWx0UHJvcHMsXG4gICAgLi4uZ2V0RXh0ZW5kZWRQYXNzZWRQcm9wcyhyZW1vdmVVbmRlZmluZWRQcm9wcyhwYXNzZWRQcm9wcykpLFxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8g8J+UkiBQcml2YXRlIG1lbWJlcnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGxldCBzaG93VGltZW91dDogYW55O1xuICBsZXQgaGlkZVRpbWVvdXQ6IGFueTtcbiAgbGV0IHNjaGVkdWxlSGlkZUFuaW1hdGlvbkZyYW1lOiBudW1iZXI7XG4gIGxldCBpc1Zpc2libGVGcm9tQ2xpY2sgPSBmYWxzZTtcbiAgbGV0IGRpZEhpZGVEdWVUb0RvY3VtZW50TW91c2VEb3duID0gZmFsc2U7XG4gIGxldCBkaWRUb3VjaE1vdmUgPSBmYWxzZTtcbiAgbGV0IGlnbm9yZU9uRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgbGV0IGxhc3RUcmlnZ2VyRXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudFRyYW5zaXRpb25FbmRMaXN0ZW5lcjogKGV2ZW50OiBUcmFuc2l0aW9uRXZlbnQpID0+IHZvaWQ7XG4gIGxldCBvbkZpcnN0VXBkYXRlOiAoKSA9PiB2b2lkO1xuICBsZXQgbGlzdGVuZXJzOiBMaXN0ZW5lck9iamVjdFtdID0gW107XG4gIGxldCBkZWJvdW5jZWRPbk1vdXNlTW92ZSA9IGRlYm91bmNlKG9uTW91c2VNb3ZlLCBwcm9wcy5pbnRlcmFjdGl2ZURlYm91bmNlKTtcbiAgbGV0IGN1cnJlbnRUYXJnZXQ6IEVsZW1lbnQ7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIPCflJEgUHVibGljIG1lbWJlcnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGNvbnN0IGlkID0gaWRDb3VudGVyKys7XG4gIGNvbnN0IHBvcHBlckluc3RhbmNlID0gbnVsbDtcbiAgY29uc3QgcGx1Z2lucyA9IHVuaXF1ZShwcm9wcy5wbHVnaW5zKTtcblxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICAvLyBJcyB0aGUgaW5zdGFuY2UgY3VycmVudGx5IGVuYWJsZWQ/XG4gICAgaXNFbmFibGVkOiB0cnVlLFxuICAgIC8vIElzIHRoZSB0aXBweSBjdXJyZW50bHkgc2hvd2luZyBhbmQgbm90IHRyYW5zaXRpb25pbmcgb3V0P1xuICAgIGlzVmlzaWJsZTogZmFsc2UsXG4gICAgLy8gSGFzIHRoZSBpbnN0YW5jZSBiZWVuIGRlc3Ryb3llZD9cbiAgICBpc0Rlc3Ryb3llZDogZmFsc2UsXG4gICAgLy8gSXMgdGhlIHRpcHB5IGN1cnJlbnRseSBtb3VudGVkIHRvIHRoZSBET00/XG4gICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAvLyBIYXMgdGhlIHRpcHB5IGZpbmlzaGVkIHRyYW5zaXRpb25pbmcgaW4/XG4gICAgaXNTaG93bjogZmFsc2UsXG4gIH07XG5cbiAgY29uc3QgaW5zdGFuY2U6IEluc3RhbmNlID0ge1xuICAgIC8vIHByb3BlcnRpZXNcbiAgICBpZCxcbiAgICByZWZlcmVuY2UsXG4gICAgcG9wcGVyOiBkaXYoKSxcbiAgICBwb3BwZXJJbnN0YW5jZSxcbiAgICBwcm9wcyxcbiAgICBzdGF0ZSxcbiAgICBwbHVnaW5zLFxuICAgIC8vIG1ldGhvZHNcbiAgICBjbGVhckRlbGF5VGltZW91dHMsXG4gICAgc2V0UHJvcHMsXG4gICAgc2V0Q29udGVudCxcbiAgICBzaG93LFxuICAgIGhpZGUsXG4gICAgaGlkZVdpdGhJbnRlcmFjdGl2aXR5LFxuICAgIGVuYWJsZSxcbiAgICBkaXNhYmxlLFxuICAgIHVubW91bnQsXG4gICAgZGVzdHJveSxcbiAgfTtcblxuICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSB3aHkgdGhpcyBlYXJseSByZXR1cm4gY2F1c2VzIGEgVERaIGVycm9yIGluIHRoZSB0ZXN0cyDigJRcbiAgLy8gaXQgZG9lc24ndCBzZWVtIHRvIGhhcHBlbiBpbiB0aGUgYnJvd3NlclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFwcm9wcy5yZW5kZXIpIHtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgZXJyb3JXaGVuKHRydWUsICdyZW5kZXIoKSBmdW5jdGlvbiBoYXMgbm90IGJlZW4gc3VwcGxpZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEluaXRpYWwgbXV0YXRpb25zXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBjb25zdCB7cG9wcGVyLCBvblVwZGF0ZX0gPSBwcm9wcy5yZW5kZXIoaW5zdGFuY2UpO1xuXG4gIHBvcHBlci5zZXRBdHRyaWJ1dGUoJ2RhdGEtX19OQU1FU1BBQ0VfUFJFRklYX18tcm9vdCcsICcnKTtcbiAgcG9wcGVyLmlkID0gYF9fTkFNRVNQQUNFX1BSRUZJWF9fLSR7aW5zdGFuY2UuaWR9YDtcblxuICBpbnN0YW5jZS5wb3BwZXIgPSBwb3BwZXI7XG4gIHJlZmVyZW5jZS5fdGlwcHkgPSBpbnN0YW5jZTtcbiAgcG9wcGVyLl90aXBweSA9IGluc3RhbmNlO1xuXG4gIGNvbnN0IHBsdWdpbnNIb29rcyA9IHBsdWdpbnMubWFwKChwbHVnaW4pID0+IHBsdWdpbi5mbihpbnN0YW5jZSkpO1xuICBjb25zdCBoYXNBcmlhRXhwYW5kZWQgPSByZWZlcmVuY2UuaGFzQXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJyk7XG5cbiAgYWRkTGlzdGVuZXJzKCk7XG4gIGhhbmRsZUFyaWFFeHBhbmRlZEF0dHJpYnV0ZSgpO1xuICBoYW5kbGVTdHlsZXMoKTtcblxuICBpbnZva2VIb29rKCdvbkNyZWF0ZScsIFtpbnN0YW5jZV0pO1xuXG4gIGlmIChwcm9wcy5zaG93T25DcmVhdGUpIHtcbiAgICBzY2hlZHVsZVNob3coKTtcbiAgfVxuXG4gIC8vIFByZXZlbnQgYSB0aXBweSB3aXRoIGEgZGVsYXkgZnJvbSBoaWRpbmcgaWYgdGhlIGN1cnNvciBsZWZ0IHRoZW4gcmV0dXJuZWRcbiAgLy8gYmVmb3JlIGl0IHN0YXJ0ZWQgaGlkaW5nXG4gIHBvcHBlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgIGlmIChpbnN0YW5jZS5wcm9wcy5pbnRlcmFjdGl2ZSAmJiBpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUpIHtcbiAgICAgIGluc3RhbmNlLmNsZWFyRGVsYXlUaW1lb3V0cygpO1xuICAgIH1cbiAgfSk7XG5cbiAgcG9wcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgaW5zdGFuY2UucHJvcHMuaW50ZXJhY3RpdmUgJiZcbiAgICAgIGluc3RhbmNlLnByb3BzLnRyaWdnZXIuaW5kZXhPZignbW91c2VlbnRlcicpID49IDBcbiAgICApIHtcbiAgICAgIGdldERvY3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZGVib3VuY2VkT25Nb3VzZU1vdmUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDwn5SSIFByaXZhdGUgbWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZFRvdWNoU2V0dGluZ3MoKTogW3N0cmluZyB8IGJvb2xlYW4sIG51bWJlcl0ge1xuICAgIGNvbnN0IHt0b3VjaH0gPSBpbnN0YW5jZS5wcm9wcztcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0b3VjaCkgPyB0b3VjaCA6IFt0b3VjaCwgMF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJc0N1c3RvbVRvdWNoQmVoYXZpb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldE5vcm1hbGl6ZWRUb3VjaFNldHRpbmdzKClbMF0gPT09ICdob2xkJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldElzRGVmYXVsdFJlbmRlckZuKCk6IGJvb2xlYW4ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gISFpbnN0YW5jZS5wcm9wcy5yZW5kZXI/LiQkdGlwcHk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDdXJyZW50VGFyZ2V0KCk6IEVsZW1lbnQge1xuICAgIHJldHVybiBjdXJyZW50VGFyZ2V0IHx8IHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERvY3VtZW50KCk6IERvY3VtZW50IHtcbiAgICBjb25zdCBwYXJlbnQgPSBnZXRDdXJyZW50VGFyZ2V0KCkucGFyZW50Tm9kZSBhcyBFbGVtZW50O1xuICAgIHJldHVybiBwYXJlbnQgPyBnZXRPd25lckRvY3VtZW50KHBhcmVudCkgOiBkb2N1bWVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERlZmF1bHRUZW1wbGF0ZUNoaWxkcmVuKCk6IFBvcHBlckNoaWxkcmVuIHtcbiAgICByZXR1cm4gZ2V0Q2hpbGRyZW4ocG9wcGVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERlbGF5KGlzU2hvdzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgLy8gRm9yIHRvdWNoIG9yIGtleWJvYXJkIGlucHV0LCBmb3JjZSBgMGAgZGVsYXkgZm9yIFVYIHJlYXNvbnNcbiAgICAvLyBBbHNvIGlmIHRoZSBpbnN0YW5jZSBpcyBtb3VudGVkIGJ1dCBub3QgdmlzaWJsZSAodHJhbnNpdGlvbmluZyBvdXQpLFxuICAgIC8vIGlnbm9yZSBkZWxheVxuICAgIGlmIChcbiAgICAgIChpbnN0YW5jZS5zdGF0ZS5pc01vdW50ZWQgJiYgIWluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSkgfHxcbiAgICAgIGN1cnJlbnRJbnB1dC5pc1RvdWNoIHx8XG4gICAgICAobGFzdFRyaWdnZXJFdmVudCAmJiBsYXN0VHJpZ2dlckV2ZW50LnR5cGUgPT09ICdmb2N1cycpXG4gICAgKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0VmFsdWVBdEluZGV4T3JSZXR1cm4oXG4gICAgICBpbnN0YW5jZS5wcm9wcy5kZWxheSxcbiAgICAgIGlzU2hvdyA/IDAgOiAxLFxuICAgICAgZGVmYXVsdFByb3BzLmRlbGF5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0eWxlcyhmcm9tSGlkZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgcG9wcGVyLnN0eWxlLnBvaW50ZXJFdmVudHMgPVxuICAgICAgaW5zdGFuY2UucHJvcHMuaW50ZXJhY3RpdmUgJiYgIWZyb21IaWRlID8gJycgOiAnbm9uZSc7XG4gICAgcG9wcGVyLnN0eWxlLnpJbmRleCA9IGAke2luc3RhbmNlLnByb3BzLnpJbmRleH1gO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlSG9vayhcbiAgICBob29rOiBrZXlvZiBMaWZlY3ljbGVIb29rcyxcbiAgICBhcmdzOiBbSW5zdGFuY2UsIGFueT9dLFxuICAgIHNob3VsZEludm9rZVByb3BzSG9vayA9IHRydWVcbiAgKTogdm9pZCB7XG4gICAgcGx1Z2luc0hvb2tzLmZvckVhY2goKHBsdWdpbkhvb2tzKSA9PiB7XG4gICAgICBpZiAocGx1Z2luSG9va3NbaG9va10pIHtcbiAgICAgICAgcGx1Z2luSG9va3NbaG9va10hKC4uLmFyZ3MpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHNob3VsZEludm9rZVByb3BzSG9vaykge1xuICAgICAgaW5zdGFuY2UucHJvcHNbaG9va10oLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQXJpYUNvbnRlbnRBdHRyaWJ1dGUoKTogdm9pZCB7XG4gICAgY29uc3Qge2FyaWF9ID0gaW5zdGFuY2UucHJvcHM7XG5cbiAgICBpZiAoIWFyaWEuY29udGVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHIgPSBgYXJpYS0ke2FyaWEuY29udGVudH1gO1xuICAgIGNvbnN0IGlkID0gcG9wcGVyLmlkO1xuICAgIGNvbnN0IG5vZGVzID0gbm9ybWFsaXplVG9BcnJheShpbnN0YW5jZS5wcm9wcy50cmlnZ2VyVGFyZ2V0IHx8IHJlZmVyZW5jZSk7XG5cbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyKTtcblxuICAgICAgaWYgKGluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCBjdXJyZW50VmFsdWUgPyBgJHtjdXJyZW50VmFsdWV9ICR7aWR9YCA6IGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUucmVwbGFjZShpZCwgJycpLnRyaW0oKTtcblxuICAgICAgICBpZiAobmV4dFZhbHVlKSB7XG4gICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgbmV4dFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQXJpYUV4cGFuZGVkQXR0cmlidXRlKCk6IHZvaWQge1xuICAgIGlmIChoYXNBcmlhRXhwYW5kZWQgfHwgIWluc3RhbmNlLnByb3BzLmFyaWEuZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IG5vcm1hbGl6ZVRvQXJyYXkoaW5zdGFuY2UucHJvcHMudHJpZ2dlclRhcmdldCB8fCByZWZlcmVuY2UpO1xuXG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlLnByb3BzLmludGVyYWN0aXZlKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICdhcmlhLWV4cGFuZGVkJyxcbiAgICAgICAgICBpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUgJiYgbm9kZSA9PT0gZ2V0Q3VycmVudFRhcmdldCgpXG4gICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgOiAnZmFsc2UnXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cEludGVyYWN0aXZlTW91c2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgZ2V0RG9jdW1lbnQoKS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBkZWJvdW5jZWRPbk1vdXNlTW92ZSk7XG4gICAgbW91c2VNb3ZlTGlzdGVuZXJzID0gbW91c2VNb3ZlTGlzdGVuZXJzLmZpbHRlcihcbiAgICAgIChsaXN0ZW5lcikgPT4gbGlzdGVuZXIgIT09IGRlYm91bmNlZE9uTW91c2VNb3ZlXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRG9jdW1lbnRQcmVzcyhldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBNb3ZlZCBmaW5nZXIgdG8gc2Nyb2xsIGluc3RlYWQgb2YgYW4gaW50ZW50aW9uYWwgdGFwIG91dHNpZGVcbiAgICBpZiAoY3VycmVudElucHV0LmlzVG91Y2gpIHtcbiAgICAgIGlmIChkaWRUb3VjaE1vdmUgfHwgZXZlbnQudHlwZSA9PT0gJ21vdXNlZG93bicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFRhcmdldCA9XG4gICAgICAoZXZlbnQuY29tcG9zZWRQYXRoICYmIGV2ZW50LmNvbXBvc2VkUGF0aCgpWzBdKSB8fCBldmVudC50YXJnZXQ7XG5cbiAgICAvLyBDbGlja2VkIG9uIGludGVyYWN0aXZlIHBvcHBlclxuICAgIGlmIChcbiAgICAgIGluc3RhbmNlLnByb3BzLmludGVyYWN0aXZlICYmXG4gICAgICBhY3R1YWxDb250YWlucyhwb3BwZXIsIGFjdHVhbFRhcmdldCBhcyBFbGVtZW50KVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsaWNrZWQgb24gdGhlIGV2ZW50IGxpc3RlbmVycyB0YXJnZXRcbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVUb0FycmF5KGluc3RhbmNlLnByb3BzLnRyaWdnZXJUYXJnZXQgfHwgcmVmZXJlbmNlKS5zb21lKChlbCkgPT5cbiAgICAgICAgYWN0dWFsQ29udGFpbnMoZWwsIGFjdHVhbFRhcmdldCBhcyBFbGVtZW50KVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKGN1cnJlbnRJbnB1dC5pc1RvdWNoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUgJiZcbiAgICAgICAgaW5zdGFuY2UucHJvcHMudHJpZ2dlci5pbmRleE9mKCdjbGljaycpID49IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGludm9rZUhvb2soJ29uQ2xpY2tPdXRzaWRlJywgW2luc3RhbmNlLCBldmVudF0pO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5wcm9wcy5oaWRlT25DbGljayA9PT0gdHJ1ZSkge1xuICAgICAgaW5zdGFuY2UuY2xlYXJEZWxheVRpbWVvdXRzKCk7XG4gICAgICBpbnN0YW5jZS5oaWRlKCk7XG5cbiAgICAgIC8vIGBtb3VzZWRvd25gIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGJlZm9yZSBgZm9jdXNgIGlmIHByZXNzaW5nIHRoZVxuICAgICAgLy8gY3VycmVudFRhcmdldC4gVGhpcyBsZXRzIGEgdGlwcHkgd2l0aCBgZm9jdXNgIHRyaWdnZXIga25vdyB0aGF0IGl0XG4gICAgICAvLyBzaG91bGQgbm90IHNob3dcbiAgICAgIGRpZEhpZGVEdWVUb0RvY3VtZW50TW91c2VEb3duID0gdHJ1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkaWRIaWRlRHVlVG9Eb2N1bWVudE1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRoZSBsaXN0ZW5lciBnZXRzIGFkZGVkIGluIGBzY2hlZHVsZVNob3coKWAsIGJ1dCB0aGlzIG1heSBiZSBoaWRpbmcgaXRcbiAgICAgIC8vIGJlZm9yZSBpdCBzaG93cywgYW5kIGhpZGUoKSdzIGVhcmx5IGJhaWwtb3V0IGJlaGF2aW9yIGNhbiBwcmV2ZW50IGl0XG4gICAgICAvLyBmcm9tIGJlaW5nIGNsZWFuZWQgdXBcbiAgICAgIGlmICghaW5zdGFuY2Uuc3RhdGUuaXNNb3VudGVkKSB7XG4gICAgICAgIHJlbW92ZURvY3VtZW50UHJlc3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblRvdWNoTW92ZSgpOiB2b2lkIHtcbiAgICBkaWRUb3VjaE1vdmUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KCk6IHZvaWQge1xuICAgIGRpZFRvdWNoTW92ZSA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRG9jdW1lbnRQcmVzcygpOiB2b2lkIHtcbiAgICBjb25zdCBkb2MgPSBnZXREb2N1bWVudCgpO1xuICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkRvY3VtZW50UHJlc3MsIHRydWUpO1xuICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uRG9jdW1lbnRQcmVzcywgVE9VQ0hfT1BUSU9OUyk7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQsIFRPVUNIX09QVElPTlMpO1xuICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSwgVE9VQ0hfT1BUSU9OUyk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVEb2N1bWVudFByZXNzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRvYyA9IGdldERvY3VtZW50KCk7XG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uRG9jdW1lbnRQcmVzcywgdHJ1ZSk7XG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Eb2N1bWVudFByZXNzLCBUT1VDSF9PUFRJT05TKTtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwgVE9VQ0hfT1BUSU9OUyk7XG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlLCBUT1VDSF9PUFRJT05TKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVHJhbnNpdGlvbmVkT3V0KGR1cmF0aW9uOiBudW1iZXIsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgb25UcmFuc2l0aW9uRW5kKGR1cmF0aW9uLCAoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUgJiZcbiAgICAgICAgcG9wcGVyLnBhcmVudE5vZGUgJiZcbiAgICAgICAgcG9wcGVyLnBhcmVudE5vZGUuY29udGFpbnMocG9wcGVyKVxuICAgICAgKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblRyYW5zaXRpb25lZEluKGR1cmF0aW9uOiBudW1iZXIsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgb25UcmFuc2l0aW9uRW5kKGR1cmF0aW9uLCBjYWxsYmFjayk7XG4gIH1cblxuICBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQoZHVyYXRpb246IG51bWJlciwgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBib3ggPSBnZXREZWZhdWx0VGVtcGxhdGVDaGlsZHJlbigpLmJveDtcblxuICAgIGZ1bmN0aW9uIGxpc3RlbmVyKGV2ZW50OiBUcmFuc2l0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09IGJveCkge1xuICAgICAgICB1cGRhdGVUcmFuc2l0aW9uRW5kTGlzdGVuZXIoYm94LCAncmVtb3ZlJywgbGlzdGVuZXIpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2UgY2FsbGJhY2sgc3luY2hyb25vdXMgaWYgZHVyYXRpb24gaXMgMFxuICAgIC8vIGB0cmFuc2l0aW9uZW5kYCB3b24ndCBmaXJlIG90aGVyd2lzZVxuICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNpdGlvbkVuZExpc3RlbmVyKGJveCwgJ3JlbW92ZScsIGN1cnJlbnRUcmFuc2l0aW9uRW5kTGlzdGVuZXIpO1xuICAgIHVwZGF0ZVRyYW5zaXRpb25FbmRMaXN0ZW5lcihib3gsICdhZGQnLCBsaXN0ZW5lcik7XG5cbiAgICBjdXJyZW50VHJhbnNpdGlvbkVuZExpc3RlbmVyID0gbGlzdGVuZXI7XG4gIH1cblxuICBmdW5jdGlvbiBvbihcbiAgICBldmVudFR5cGU6IHN0cmluZyxcbiAgICBoYW5kbGVyOiBFdmVudExpc3RlbmVyLFxuICAgIG9wdGlvbnM6IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGZhbHNlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVzID0gbm9ybWFsaXplVG9BcnJheShpbnN0YW5jZS5wcm9wcy50cmlnZ2VyVGFyZ2V0IHx8IHJlZmVyZW5jZSk7XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICBsaXN0ZW5lcnMucHVzaCh7bm9kZSwgZXZlbnRUeXBlLCBoYW5kbGVyLCBvcHRpb25zfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKGdldElzQ3VzdG9tVG91Y2hCZWhhdmlvcigpKSB7XG4gICAgICBvbigndG91Y2hzdGFydCcsIG9uVHJpZ2dlciwge3Bhc3NpdmU6IHRydWV9KTtcbiAgICAgIG9uKCd0b3VjaGVuZCcsIG9uTW91c2VMZWF2ZSBhcyBFdmVudExpc3RlbmVyLCB7cGFzc2l2ZTogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHNwbGl0QnlTcGFjZXMoaW5zdGFuY2UucHJvcHMudHJpZ2dlcikuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgICBpZiAoZXZlbnRUeXBlID09PSAnbWFudWFsJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG9uKGV2ZW50VHlwZSwgb25UcmlnZ2VyKTtcblxuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSAnbW91c2VlbnRlcic6XG4gICAgICAgICAgb24oJ21vdXNlbGVhdmUnLCBvbk1vdXNlTGVhdmUgYXMgRXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgICAgICBvbihpc0lFMTEgPyAnZm9jdXNvdXQnIDogJ2JsdXInLCBvbkJsdXJPckZvY3VzT3V0IGFzIEV2ZW50TGlzdGVuZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgICAgICBvbignZm9jdXNvdXQnLCBvbkJsdXJPckZvY3VzT3V0IGFzIEV2ZW50TGlzdGVuZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKCh7bm9kZSwgZXZlbnRUeXBlLCBoYW5kbGVyLCBvcHRpb25zfTogTGlzdGVuZXJPYmplY3QpID0+IHtcbiAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgZnVuY3Rpb24gb25UcmlnZ2VyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGxldCBzaG91bGRTY2hlZHVsZUNsaWNrSGlkZSA9IGZhbHNlO1xuXG4gICAgaWYgKFxuICAgICAgIWluc3RhbmNlLnN0YXRlLmlzRW5hYmxlZCB8fFxuICAgICAgaXNFdmVudExpc3RlbmVyU3RvcHBlZChldmVudCkgfHxcbiAgICAgIGRpZEhpZGVEdWVUb0RvY3VtZW50TW91c2VEb3duXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgd2FzRm9jdXNlZCA9IGxhc3RUcmlnZ2VyRXZlbnQ/LnR5cGUgPT09ICdmb2N1cyc7XG5cbiAgICBsYXN0VHJpZ2dlckV2ZW50ID0gZXZlbnQ7XG4gICAgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudDtcblxuICAgIGhhbmRsZUFyaWFFeHBhbmRlZEF0dHJpYnV0ZSgpO1xuXG4gICAgaWYgKCFpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUgJiYgaXNNb3VzZUV2ZW50KGV2ZW50KSkge1xuICAgICAgLy8gSWYgc2Nyb2xsaW5nLCBgbW91c2VlbnRlcmAgZXZlbnRzIGNhbiBiZSBmaXJlZCBpZiB0aGUgY3Vyc29yIGxhbmRzXG4gICAgICAvLyBvdmVyIGEgbmV3IHRhcmdldCwgYnV0IGBtb3VzZW1vdmVgIGV2ZW50cyBkb24ndCBnZXQgZmlyZWQuIFRoaXNcbiAgICAgIC8vIGNhdXNlcyBpbnRlcmFjdGl2ZSB0b29sdGlwcyB0byBnZXQgc3R1Y2sgb3BlbiB1bnRpbCB0aGUgY3Vyc29yIGlzXG4gICAgICAvLyBtb3ZlZFxuICAgICAgbW91c2VNb3ZlTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihldmVudCkpO1xuICAgIH1cblxuICAgIC8vIFRvZ2dsZSBzaG93L2hpZGUgd2hlbiBjbGlja2luZyBjbGljay10cmlnZ2VyZWQgdG9vbHRpcHNcbiAgICBpZiAoXG4gICAgICBldmVudC50eXBlID09PSAnY2xpY2snICYmXG4gICAgICAoaW5zdGFuY2UucHJvcHMudHJpZ2dlci5pbmRleE9mKCdtb3VzZWVudGVyJykgPCAwIHx8XG4gICAgICAgIGlzVmlzaWJsZUZyb21DbGljaykgJiZcbiAgICAgIGluc3RhbmNlLnByb3BzLmhpZGVPbkNsaWNrICE9PSBmYWxzZSAmJlxuICAgICAgaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlXG4gICAgKSB7XG4gICAgICBzaG91bGRTY2hlZHVsZUNsaWNrSGlkZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlU2hvdyhldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgIGlzVmlzaWJsZUZyb21DbGljayA9ICFzaG91bGRTY2hlZHVsZUNsaWNrSGlkZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkU2NoZWR1bGVDbGlja0hpZGUgJiYgIXdhc0ZvY3VzZWQpIHtcbiAgICAgIHNjaGVkdWxlSGlkZShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZTtcbiAgICBjb25zdCBpc0N1cnNvck92ZXJSZWZlcmVuY2VPclBvcHBlciA9XG4gICAgICBnZXRDdXJyZW50VGFyZ2V0KCkuY29udGFpbnModGFyZ2V0KSB8fCBwb3BwZXIuY29udGFpbnModGFyZ2V0KTtcblxuICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJyAmJiBpc0N1cnNvck92ZXJSZWZlcmVuY2VPclBvcHBlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcHBlclRyZWVEYXRhID0gZ2V0TmVzdGVkUG9wcGVyVHJlZSgpXG4gICAgICAuY29uY2F0KHBvcHBlcilcbiAgICAgIC5tYXAoKHBvcHBlcikgPT4ge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHBvcHBlci5fdGlwcHkhO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGluc3RhbmNlLnBvcHBlckluc3RhbmNlPy5zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9wcGVyUmVjdDogcG9wcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgICAgcG9wcGVyU3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUG9wcGVyVHJlZURhdGFbXTtcblxuICAgIGlmIChpc0N1cnNvck91dHNpZGVJbnRlcmFjdGl2ZUJvcmRlcihwb3BwZXJUcmVlRGF0YSwgZXZlbnQpKSB7XG4gICAgICBjbGVhbnVwSW50ZXJhY3RpdmVNb3VzZUxpc3RlbmVycygpO1xuICAgICAgc2NoZWR1bGVIaWRlKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzaG91bGRCYWlsID1cbiAgICAgIGlzRXZlbnRMaXN0ZW5lclN0b3BwZWQoZXZlbnQpIHx8XG4gICAgICAoaW5zdGFuY2UucHJvcHMudHJpZ2dlci5pbmRleE9mKCdjbGljaycpID49IDAgJiYgaXNWaXNpYmxlRnJvbUNsaWNrKTtcblxuICAgIGlmIChzaG91bGRCYWlsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnByb3BzLmludGVyYWN0aXZlKSB7XG4gICAgICBpbnN0YW5jZS5oaWRlV2l0aEludGVyYWN0aXZpdHkoZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNjaGVkdWxlSGlkZShldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkJsdXJPckZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgaW5zdGFuY2UucHJvcHMudHJpZ2dlci5pbmRleE9mKCdmb2N1c2luJykgPCAwICYmXG4gICAgICBldmVudC50YXJnZXQgIT09IGdldEN1cnJlbnRUYXJnZXQoKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGZvY3VzIHdhcyBtb3ZlZCB0byB3aXRoaW4gdGhlIHBvcHBlclxuICAgIGlmIChcbiAgICAgIGluc3RhbmNlLnByb3BzLmludGVyYWN0aXZlICYmXG4gICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ICYmXG4gICAgICBwb3BwZXIuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBFbGVtZW50KVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNjaGVkdWxlSGlkZShldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0V2ZW50TGlzdGVuZXJTdG9wcGVkKGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjdXJyZW50SW5wdXQuaXNUb3VjaFxuICAgICAgPyBnZXRJc0N1c3RvbVRvdWNoQmVoYXZpb3IoKSAhPT0gZXZlbnQudHlwZS5pbmRleE9mKCd0b3VjaCcpID49IDBcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQb3BwZXJJbnN0YW5jZSgpOiB2b2lkIHtcbiAgICBkZXN0cm95UG9wcGVySW5zdGFuY2UoKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHBvcHBlck9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICBvZmZzZXQsXG4gICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgICAgbW92ZVRyYW5zaXRpb24sXG4gICAgfSA9IGluc3RhbmNlLnByb3BzO1xuXG4gICAgY29uc3QgYXJyb3cgPSBnZXRJc0RlZmF1bHRSZW5kZXJGbigpID8gZ2V0Q2hpbGRyZW4ocG9wcGVyKS5hcnJvdyA6IG51bGw7XG5cbiAgICBjb25zdCBjb21wdXRlZFJlZmVyZW5jZSA9IGdldFJlZmVyZW5jZUNsaWVudFJlY3RcbiAgICAgID8ge1xuICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICAgICAgICBjb250ZXh0RWxlbWVudDpcbiAgICAgICAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3QuY29udGV4dEVsZW1lbnQgfHwgZ2V0Q3VycmVudFRhcmdldCgpLFxuICAgICAgICB9XG4gICAgICA6IHJlZmVyZW5jZTtcblxuICAgIGNvbnN0IHRpcHB5TW9kaWZpZXI6IE1vZGlmaWVyPCckJHRpcHB5JywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICAgICAgbmFtZTogJyQkdGlwcHknLFxuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICAgICAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddLFxuICAgICAgZm4oe3N0YXRlfSkge1xuICAgICAgICBpZiAoZ2V0SXNEZWZhdWx0UmVuZGVyRm4oKSkge1xuICAgICAgICAgIGNvbnN0IHtib3h9ID0gZ2V0RGVmYXVsdFRlbXBsYXRlQ2hpbGRyZW4oKTtcblxuICAgICAgICAgIFsncGxhY2VtZW50JywgJ3JlZmVyZW5jZS1oaWRkZW4nLCAnZXNjYXBlZCddLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICAgIGlmIChhdHRyID09PSAncGxhY2VtZW50Jykge1xuICAgICAgICAgICAgICBib3guc2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlbWVudCcsIHN0YXRlLnBsYWNlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoc3RhdGUuYXR0cmlidXRlcy5wb3BwZXJbYGRhdGEtcG9wcGVyLSR7YXR0cn1gXSkge1xuICAgICAgICAgICAgICAgIGJveC5zZXRBdHRyaWJ1dGUoYGRhdGEtJHthdHRyfWAsICcnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBib3gucmVtb3ZlQXR0cmlidXRlKGBkYXRhLSR7YXR0cn1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdHlwZSBUaXBweU1vZGlmaWVyID0gTW9kaWZpZXI8JyQkdGlwcHknLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gICAgdHlwZSBFeHRlbmRlZE1vZGlmaWVycyA9IFN0cmljdE1vZGlmaWVycyB8IFBhcnRpYWw8VGlwcHlNb2RpZmllcj47XG5cbiAgICBjb25zdCBtb2RpZmllcnM6IEFycmF5PEV4dGVuZGVkTW9kaWZpZXJzPiA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgIHRvcDogMixcbiAgICAgICAgICAgIGJvdHRvbTogMixcbiAgICAgICAgICAgIGxlZnQ6IDUsXG4gICAgICAgICAgICByaWdodDogNSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgcGFkZGluZzogNSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGFkYXB0aXZlOiAhbW92ZVRyYW5zaXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGlwcHlNb2RpZmllcixcbiAgICBdO1xuXG4gICAgaWYgKGdldElzRGVmYXVsdFJlbmRlckZuKCkgJiYgYXJyb3cpIHtcbiAgICAgIG1vZGlmaWVycy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2Fycm93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGVsZW1lbnQ6IGFycm93LFxuICAgICAgICAgIHBhZGRpbmc6IDMsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtb2RpZmllcnMucHVzaCguLi4ocG9wcGVyT3B0aW9ucz8ubW9kaWZpZXJzIHx8IFtdKSk7XG5cbiAgICBpbnN0YW5jZS5wb3BwZXJJbnN0YW5jZSA9IGNyZWF0ZVBvcHBlcjxFeHRlbmRlZE1vZGlmaWVycz4oXG4gICAgICBjb21wdXRlZFJlZmVyZW5jZSxcbiAgICAgIHBvcHBlcixcbiAgICAgIHtcbiAgICAgICAgLi4ucG9wcGVyT3B0aW9ucyxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvbkZpcnN0VXBkYXRlLFxuICAgICAgICBtb2RpZmllcnMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3lQb3BwZXJJbnN0YW5jZSgpOiB2b2lkIHtcbiAgICBpZiAoaW5zdGFuY2UucG9wcGVySW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlLnBvcHBlckluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgIGluc3RhbmNlLnBvcHBlckluc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcbiAgICBjb25zdCB7YXBwZW5kVG99ID0gaW5zdGFuY2UucHJvcHM7XG5cbiAgICBsZXQgcGFyZW50Tm9kZTogYW55O1xuXG4gICAgLy8gQnkgZGVmYXVsdCwgd2UnbGwgYXBwZW5kIHRoZSBwb3BwZXIgdG8gdGhlIHRyaWdnZXJUYXJnZXRzJ3MgcGFyZW50Tm9kZSBzb1xuICAgIC8vIGl0J3MgZGlyZWN0bHkgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBlbGVtZW50IHNvIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhlXG4gICAgLy8gdGlwcHkgY2FuIGJlIHRhYmJlZCB0b1xuICAgIC8vIElmIHRoZXJlIGFyZSBjbGlwcGluZyBpc3N1ZXMsIHRoZSB1c2VyIGNhbiBzcGVjaWZ5IGEgZGlmZmVyZW50IGFwcGVuZFRvXG4gICAgLy8gYW5kIGVuc3VyZSBmb2N1cyBtYW5hZ2VtZW50IGlzIGhhbmRsZWQgY29ycmVjdGx5IG1hbnVhbGx5XG4gICAgY29uc3Qgbm9kZSA9IGdldEN1cnJlbnRUYXJnZXQoKTtcblxuICAgIGlmIChcbiAgICAgIChpbnN0YW5jZS5wcm9wcy5pbnRlcmFjdGl2ZSAmJiBhcHBlbmRUbyA9PT0gVElQUFlfREVGQVVMVF9BUFBFTkRfVE8pIHx8XG4gICAgICBhcHBlbmRUbyA9PT0gJ3BhcmVudCdcbiAgICApIHtcbiAgICAgIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudE5vZGUgPSBpbnZva2VXaXRoQXJnc09yUmV0dXJuKGFwcGVuZFRvLCBbbm9kZV0pO1xuICAgIH1cblxuICAgIC8vIFRoZSBwb3BwZXIgZWxlbWVudCBuZWVkcyB0byBleGlzdCBvbiB0aGUgRE9NIGJlZm9yZSBpdHMgcG9zaXRpb24gY2FuIGJlXG4gICAgLy8gdXBkYXRlZCBhcyBQb3BwZXIgbmVlZHMgdG8gcmVhZCBpdHMgZGltZW5zaW9uc1xuICAgIGlmICghcGFyZW50Tm9kZS5jb250YWlucyhwb3BwZXIpKSB7XG4gICAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKHBvcHBlcik7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc3RhdGUuaXNNb3VudGVkID0gdHJ1ZTtcblxuICAgIGNyZWF0ZVBvcHBlckluc3RhbmNlKCk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAvLyBBY2Nlc3NpYmlsaXR5IGNoZWNrXG4gICAgICB3YXJuV2hlbihcbiAgICAgICAgaW5zdGFuY2UucHJvcHMuaW50ZXJhY3RpdmUgJiZcbiAgICAgICAgICBhcHBlbmRUbyA9PT0gZGVmYXVsdFByb3BzLmFwcGVuZFRvICYmXG4gICAgICAgICAgbm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgIT09IHBvcHBlcixcbiAgICAgICAgW1xuICAgICAgICAgICdJbnRlcmFjdGl2ZSB0aXBweSBlbGVtZW50IG1heSBub3QgYmUgYWNjZXNzaWJsZSB2aWEga2V5Ym9hcmQnLFxuICAgICAgICAgICduYXZpZ2F0aW9uIGJlY2F1c2UgaXQgaXMgbm90IGRpcmVjdGx5IGFmdGVyIHRoZSByZWZlcmVuY2UgZWxlbWVudCcsXG4gICAgICAgICAgJ2luIHRoZSBET00gc291cmNlIG9yZGVyLicsXG4gICAgICAgICAgJ1xcblxcbicsXG4gICAgICAgICAgJ1VzaW5nIGEgd3JhcHBlciA8ZGl2PiBvciA8c3Bhbj4gdGFnIGFyb3VuZCB0aGUgcmVmZXJlbmNlIGVsZW1lbnQnLFxuICAgICAgICAgICdzb2x2ZXMgdGhpcyBieSBjcmVhdGluZyBhIG5ldyBwYXJlbnROb2RlIGNvbnRleHQuJyxcbiAgICAgICAgICAnXFxuXFxuJyxcbiAgICAgICAgICAnU3BlY2lmeWluZyBgYXBwZW5kVG86IGRvY3VtZW50LmJvZHlgIHNpbGVuY2VzIHRoaXMgd2FybmluZywgYnV0IGl0JyxcbiAgICAgICAgICAnYXNzdW1lcyB5b3UgYXJlIHVzaW5nIGEgZm9jdXMgbWFuYWdlbWVudCBzb2x1dGlvbiB0byBoYW5kbGUnLFxuICAgICAgICAgICdrZXlib2FyZCBuYXZpZ2F0aW9uLicsXG4gICAgICAgICAgJ1xcblxcbicsXG4gICAgICAgICAgJ1NlZTogaHR0cHM6Ly9hdG9taWtzLmdpdGh1Yi5pby90aXBweWpzL3Y2L2FjY2Vzc2liaWxpdHkvI2ludGVyYWN0aXZpdHknLFxuICAgICAgICBdLmpvaW4oJyAnKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXROZXN0ZWRQb3BwZXJUcmVlKCk6IFBvcHBlckVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIGFycmF5RnJvbShcbiAgICAgIHBvcHBlci5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1fX05BTUVTUEFDRV9QUkVGSVhfXy1yb290XScpXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlU2hvdyhldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaW5zdGFuY2UuY2xlYXJEZWxheVRpbWVvdXRzKCk7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGludm9rZUhvb2soJ29uVHJpZ2dlcicsIFtpbnN0YW5jZSwgZXZlbnRdKTtcbiAgICB9XG5cbiAgICBhZGREb2N1bWVudFByZXNzKCk7XG5cbiAgICBsZXQgZGVsYXkgPSBnZXREZWxheSh0cnVlKTtcbiAgICBjb25zdCBbdG91Y2hWYWx1ZSwgdG91Y2hEZWxheV0gPSBnZXROb3JtYWxpemVkVG91Y2hTZXR0aW5ncygpO1xuXG4gICAgaWYgKGN1cnJlbnRJbnB1dC5pc1RvdWNoICYmIHRvdWNoVmFsdWUgPT09ICdob2xkJyAmJiB0b3VjaERlbGF5KSB7XG4gICAgICBkZWxheSA9IHRvdWNoRGVsYXk7XG4gICAgfVxuXG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICBzaG93VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpbnN0YW5jZS5zaG93KCk7XG4gICAgICB9LCBkZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLnNob3coKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2hlZHVsZUhpZGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaW5zdGFuY2UuY2xlYXJEZWxheVRpbWVvdXRzKCk7XG5cbiAgICBpbnZva2VIb29rKCdvblVudHJpZ2dlcicsIFtpbnN0YW5jZSwgZXZlbnRdKTtcblxuICAgIGlmICghaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlKSB7XG4gICAgICByZW1vdmVEb2N1bWVudFByZXNzKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb3IgaW50ZXJhY3RpdmUgdGlwcGllcywgc2NoZWR1bGVIaWRlIGlzIGFkZGVkIHRvIGEgZG9jdW1lbnQuYm9keSBoYW5kbGVyXG4gICAgLy8gZnJvbSBvbk1vdXNlTGVhdmUgc28gbXVzdCBpbnRlcmNlcHQgc2NoZWR1bGVkIGhpZGVzIGZyb20gbW91c2Vtb3ZlL2xlYXZlXG4gICAgLy8gZXZlbnRzIHdoZW4gdHJpZ2dlciBjb250YWlucyBtb3VzZWVudGVyIGFuZCBjbGljaywgYW5kIHRoZSB0aXAgaXNcbiAgICAvLyBjdXJyZW50bHkgc2hvd24gYXMgYSByZXN1bHQgb2YgYSBjbGljay5cbiAgICBpZiAoXG4gICAgICBpbnN0YW5jZS5wcm9wcy50cmlnZ2VyLmluZGV4T2YoJ21vdXNlZW50ZXInKSA+PSAwICYmXG4gICAgICBpbnN0YW5jZS5wcm9wcy50cmlnZ2VyLmluZGV4T2YoJ2NsaWNrJykgPj0gMCAmJlxuICAgICAgWydtb3VzZWxlYXZlJywgJ21vdXNlbW92ZSddLmluZGV4T2YoZXZlbnQudHlwZSkgPj0gMCAmJlxuICAgICAgaXNWaXNpYmxlRnJvbUNsaWNrXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVsYXkgPSBnZXREZWxheShmYWxzZSk7XG5cbiAgICBpZiAoZGVsYXkpIHtcbiAgICAgIGhpZGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRml4ZXMgYSBgdHJhbnNpdGlvbmVuZGAgcHJvYmxlbSB3aGVuIGl0IGZpcmVzIDEgZnJhbWUgdG9vXG4gICAgICAvLyBsYXRlIHNvbWV0aW1lcywgd2UgZG9uJ3Qgd2FudCBoaWRlKCkgdG8gYmUgY2FsbGVkLlxuICAgICAgc2NoZWR1bGVIaWRlQW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8g8J+UkSBQdWJsaWMgbWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZW5hYmxlKCk6IHZvaWQge1xuICAgIGluc3RhbmNlLnN0YXRlLmlzRW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNhYmxlKCk6IHZvaWQge1xuICAgIC8vIERpc2FibGluZyB0aGUgaW5zdGFuY2Ugc2hvdWxkIGFsc28gaGlkZSBpdFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hdG9taWtzL3RpcHB5LmpzLXJlYWN0L2lzc3Vlcy8xMDZcbiAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgaW5zdGFuY2Uuc3RhdGUuaXNFbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckRlbGF5VGltZW91dHMoKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHNob3dUaW1lb3V0KTtcbiAgICBjbGVhclRpbWVvdXQoaGlkZVRpbWVvdXQpO1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjaGVkdWxlSGlkZUFuaW1hdGlvbkZyYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFByb3BzKHBhcnRpYWxQcm9wczogUGFydGlhbDxQcm9wcz4pOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICB3YXJuV2hlbihpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZCwgY3JlYXRlTWVtb3J5TGVha1dhcm5pbmcoJ3NldFByb3BzJykpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludm9rZUhvb2soJ29uQmVmb3JlVXBkYXRlJywgW2luc3RhbmNlLCBwYXJ0aWFsUHJvcHNdKTtcblxuICAgIHJlbW92ZUxpc3RlbmVycygpO1xuXG4gICAgY29uc3QgcHJldlByb3BzID0gaW5zdGFuY2UucHJvcHM7XG4gICAgY29uc3QgbmV4dFByb3BzID0gZXZhbHVhdGVQcm9wcyhyZWZlcmVuY2UsIHtcbiAgICAgIC4uLnByZXZQcm9wcyxcbiAgICAgIC4uLnJlbW92ZVVuZGVmaW5lZFByb3BzKHBhcnRpYWxQcm9wcyksXG4gICAgICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaW5zdGFuY2UucHJvcHMgPSBuZXh0UHJvcHM7XG5cbiAgICBhZGRMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChwcmV2UHJvcHMuaW50ZXJhY3RpdmVEZWJvdW5jZSAhPT0gbmV4dFByb3BzLmludGVyYWN0aXZlRGVib3VuY2UpIHtcbiAgICAgIGNsZWFudXBJbnRlcmFjdGl2ZU1vdXNlTGlzdGVuZXJzKCk7XG4gICAgICBkZWJvdW5jZWRPbk1vdXNlTW92ZSA9IGRlYm91bmNlKFxuICAgICAgICBvbk1vdXNlTW92ZSxcbiAgICAgICAgbmV4dFByb3BzLmludGVyYWN0aXZlRGVib3VuY2VcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHN0YWxlIGFyaWEtZXhwYW5kZWQgYXR0cmlidXRlcyBhcmUgcmVtb3ZlZFxuICAgIGlmIChwcmV2UHJvcHMudHJpZ2dlclRhcmdldCAmJiAhbmV4dFByb3BzLnRyaWdnZXJUYXJnZXQpIHtcbiAgICAgIG5vcm1hbGl6ZVRvQXJyYXkocHJldlByb3BzLnRyaWdnZXJUYXJnZXQpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobmV4dFByb3BzLnRyaWdnZXJUYXJnZXQpIHtcbiAgICAgIHJlZmVyZW5jZS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKTtcbiAgICB9XG5cbiAgICBoYW5kbGVBcmlhRXhwYW5kZWRBdHRyaWJ1dGUoKTtcbiAgICBoYW5kbGVTdHlsZXMoKTtcblxuICAgIGlmIChvblVwZGF0ZSkge1xuICAgICAgb25VcGRhdGUocHJldlByb3BzLCBuZXh0UHJvcHMpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5wb3BwZXJJbnN0YW5jZSkge1xuICAgICAgY3JlYXRlUG9wcGVySW5zdGFuY2UoKTtcblxuICAgICAgLy8gRml4ZXMgYW4gaXNzdWUgd2l0aCBuZXN0ZWQgdGlwcGllcyBpZiB0aGV5IGFyZSBhbGwgZ2V0dGluZyByZS1yZW5kZXJlZCxcbiAgICAgIC8vIGFuZCB0aGUgbmVzdGVkIG9uZXMgZ2V0IHJlLXJlbmRlcmVkIGZpcnN0LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0b21pa3MvdGlwcHlqcy1yZWFjdC9pc3N1ZXMvMTc3XG4gICAgICAvLyBUT0RPOiBmaW5kIGEgY2xlYW5lciAvIG1vcmUgZWZmaWNpZW50IHNvbHV0aW9uKCEpXG4gICAgICBnZXROZXN0ZWRQb3BwZXJUcmVlKCkuZm9yRWFjaCgobmVzdGVkUG9wcGVyKSA9PiB7XG4gICAgICAgIC8vIFJlYWN0IChhbmQgb3RoZXIgVUkgbGlicyBsaWtlbHkpIHJlcXVpcmVzIGEgckFGIHdyYXBwZXIgYXMgaXQgZmx1c2hlc1xuICAgICAgICAvLyBpdHMgd29yayBpbiBvbmVcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG5lc3RlZFBvcHBlci5fdGlwcHkhLnBvcHBlckluc3RhbmNlIS5mb3JjZVVwZGF0ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnZva2VIb29rKCdvbkFmdGVyVXBkYXRlJywgW2luc3RhbmNlLCBwYXJ0aWFsUHJvcHNdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldENvbnRlbnQoY29udGVudDogQ29udGVudCk6IHZvaWQge1xuICAgIGluc3RhbmNlLnNldFByb3BzKHtjb250ZW50fSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG93KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHdhcm5XaGVuKGluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkLCBjcmVhdGVNZW1vcnlMZWFrV2FybmluZygnc2hvdycpKTtcbiAgICB9XG5cbiAgICAvLyBFYXJseSBiYWlsLW91dFxuICAgIGNvbnN0IGlzQWxyZWFkeVZpc2libGUgPSBpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGU7XG4gICAgY29uc3QgaXNEZXN0cm95ZWQgPSBpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZDtcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gIWluc3RhbmNlLnN0YXRlLmlzRW5hYmxlZDtcbiAgICBjb25zdCBpc1RvdWNoQW5kVG91Y2hEaXNhYmxlZCA9XG4gICAgICBjdXJyZW50SW5wdXQuaXNUb3VjaCAmJiAhaW5zdGFuY2UucHJvcHMudG91Y2g7XG4gICAgY29uc3QgZHVyYXRpb24gPSBnZXRWYWx1ZUF0SW5kZXhPclJldHVybihcbiAgICAgIGluc3RhbmNlLnByb3BzLmR1cmF0aW9uLFxuICAgICAgMCxcbiAgICAgIGRlZmF1bHRQcm9wcy5kdXJhdGlvblxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBpc0FscmVhZHlWaXNpYmxlIHx8XG4gICAgICBpc0Rlc3Ryb3llZCB8fFxuICAgICAgaXNEaXNhYmxlZCB8fFxuICAgICAgaXNUb3VjaEFuZFRvdWNoRGlzYWJsZWRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemUgYGRpc2FibGVkYCBiZWhhdmlvciBhY3Jvc3MgYnJvd3NlcnMuXG4gICAgLy8gRmlyZWZveCBhbGxvd3MgZXZlbnRzIG9uIGRpc2FibGVkIGVsZW1lbnRzLCBidXQgQ2hyb21lIGRvZXNuJ3QuXG4gICAgLy8gVXNpbmcgYSB3cmFwcGVyIGVsZW1lbnQgKGkuZS4gPHNwYW4+KSBpcyByZWNvbW1lbmRlZC5cbiAgICBpZiAoZ2V0Q3VycmVudFRhcmdldCgpLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludm9rZUhvb2soJ29uU2hvdycsIFtpbnN0YW5jZV0sIGZhbHNlKTtcbiAgICBpZiAoaW5zdGFuY2UucHJvcHMub25TaG93KGluc3RhbmNlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zdGF0ZS5pc1Zpc2libGUgPSB0cnVlO1xuXG4gICAgaWYgKGdldElzRGVmYXVsdFJlbmRlckZuKCkpIHtcbiAgICAgIHBvcHBlci5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgIH1cblxuICAgIGhhbmRsZVN0eWxlcygpO1xuICAgIGFkZERvY3VtZW50UHJlc3MoKTtcblxuICAgIGlmICghaW5zdGFuY2Uuc3RhdGUuaXNNb3VudGVkKSB7XG4gICAgICBwb3BwZXIuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICB9XG5cbiAgICAvLyBJZiBmbGlwcGluZyB0byB0aGUgb3Bwb3NpdGUgc2lkZSBhZnRlciBoaWRpbmcgYXQgbGVhc3Qgb25jZSwgdGhlXG4gICAgLy8gYW5pbWF0aW9uIHdpbGwgdXNlIHRoZSB3cm9uZyBwbGFjZW1lbnQgd2l0aG91dCByZXNldHRpbmcgdGhlIGR1cmF0aW9uXG4gICAgaWYgKGdldElzRGVmYXVsdFJlbmRlckZuKCkpIHtcbiAgICAgIGNvbnN0IHtib3gsIGNvbnRlbnR9ID0gZ2V0RGVmYXVsdFRlbXBsYXRlQ2hpbGRyZW4oKTtcbiAgICAgIHNldFRyYW5zaXRpb25EdXJhdGlvbihbYm94LCBjb250ZW50XSwgMCk7XG4gICAgfVxuXG4gICAgb25GaXJzdFVwZGF0ZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICghaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlIHx8IGlnbm9yZU9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZ25vcmVPbkZpcnN0VXBkYXRlID0gdHJ1ZTtcblxuICAgICAgLy8gcmVmbG93XG4gICAgICB2b2lkIHBvcHBlci5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgIHBvcHBlci5zdHlsZS50cmFuc2l0aW9uID0gaW5zdGFuY2UucHJvcHMubW92ZVRyYW5zaXRpb247XG5cbiAgICAgIGlmIChnZXRJc0RlZmF1bHRSZW5kZXJGbigpICYmIGluc3RhbmNlLnByb3BzLmFuaW1hdGlvbikge1xuICAgICAgICBjb25zdCB7Ym94LCBjb250ZW50fSA9IGdldERlZmF1bHRUZW1wbGF0ZUNoaWxkcmVuKCk7XG4gICAgICAgIHNldFRyYW5zaXRpb25EdXJhdGlvbihbYm94LCBjb250ZW50XSwgZHVyYXRpb24pO1xuICAgICAgICBzZXRWaXNpYmlsaXR5U3RhdGUoW2JveCwgY29udGVudF0sICd2aXNpYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIGhhbmRsZUFyaWFDb250ZW50QXR0cmlidXRlKCk7XG4gICAgICBoYW5kbGVBcmlhRXhwYW5kZWRBdHRyaWJ1dGUoKTtcblxuICAgICAgcHVzaElmVW5pcXVlKG1vdW50ZWRJbnN0YW5jZXMsIGluc3RhbmNlKTtcblxuICAgICAgLy8gY2VydGFpbiBtb2RpZmllcnMgKGUuZy4gYG1heFNpemVgKSByZXF1aXJlIGEgc2Vjb25kIHVwZGF0ZSBhZnRlciB0aGVcbiAgICAgIC8vIHBvcHBlciBoYXMgYmVlbiBwb3NpdGlvbmVkIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgaW5zdGFuY2UucG9wcGVySW5zdGFuY2U/LmZvcmNlVXBkYXRlKCk7XG5cbiAgICAgIGludm9rZUhvb2soJ29uTW91bnQnLCBbaW5zdGFuY2VdKTtcblxuICAgICAgaWYgKGluc3RhbmNlLnByb3BzLmFuaW1hdGlvbiAmJiBnZXRJc0RlZmF1bHRSZW5kZXJGbigpKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbmVkSW4oZHVyYXRpb24sICgpID0+IHtcbiAgICAgICAgICBpbnN0YW5jZS5zdGF0ZS5pc1Nob3duID0gdHJ1ZTtcbiAgICAgICAgICBpbnZva2VIb29rKCdvblNob3duJywgW2luc3RhbmNlXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBtb3VudCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGlkZSgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICB3YXJuV2hlbihpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZCwgY3JlYXRlTWVtb3J5TGVha1dhcm5pbmcoJ2hpZGUnKSk7XG4gICAgfVxuXG4gICAgLy8gRWFybHkgYmFpbC1vdXRcbiAgICBjb25zdCBpc0FscmVhZHlIaWRkZW4gPSAhaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlO1xuICAgIGNvbnN0IGlzRGVzdHJveWVkID0gaW5zdGFuY2Uuc3RhdGUuaXNEZXN0cm95ZWQ7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9ICFpbnN0YW5jZS5zdGF0ZS5pc0VuYWJsZWQ7XG4gICAgY29uc3QgZHVyYXRpb24gPSBnZXRWYWx1ZUF0SW5kZXhPclJldHVybihcbiAgICAgIGluc3RhbmNlLnByb3BzLmR1cmF0aW9uLFxuICAgICAgMSxcbiAgICAgIGRlZmF1bHRQcm9wcy5kdXJhdGlvblxuICAgICk7XG5cbiAgICBpZiAoaXNBbHJlYWR5SGlkZGVuIHx8IGlzRGVzdHJveWVkIHx8IGlzRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnZva2VIb29rKCdvbkhpZGUnLCBbaW5zdGFuY2VdLCBmYWxzZSk7XG4gICAgaWYgKGluc3RhbmNlLnByb3BzLm9uSGlkZShpbnN0YW5jZSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgaW5zdGFuY2Uuc3RhdGUuaXNTaG93biA9IGZhbHNlO1xuICAgIGlnbm9yZU9uRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICBpc1Zpc2libGVGcm9tQ2xpY2sgPSBmYWxzZTtcblxuICAgIGlmIChnZXRJc0RlZmF1bHRSZW5kZXJGbigpKSB7XG4gICAgICBwb3BwZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIH1cblxuICAgIGNsZWFudXBJbnRlcmFjdGl2ZU1vdXNlTGlzdGVuZXJzKCk7XG4gICAgcmVtb3ZlRG9jdW1lbnRQcmVzcygpO1xuICAgIGhhbmRsZVN0eWxlcyh0cnVlKTtcblxuICAgIGlmIChnZXRJc0RlZmF1bHRSZW5kZXJGbigpKSB7XG4gICAgICBjb25zdCB7Ym94LCBjb250ZW50fSA9IGdldERlZmF1bHRUZW1wbGF0ZUNoaWxkcmVuKCk7XG5cbiAgICAgIGlmIChpbnN0YW5jZS5wcm9wcy5hbmltYXRpb24pIHtcbiAgICAgICAgc2V0VHJhbnNpdGlvbkR1cmF0aW9uKFtib3gsIGNvbnRlbnRdLCBkdXJhdGlvbik7XG4gICAgICAgIHNldFZpc2liaWxpdHlTdGF0ZShbYm94LCBjb250ZW50XSwgJ2hpZGRlbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFyaWFDb250ZW50QXR0cmlidXRlKCk7XG4gICAgaGFuZGxlQXJpYUV4cGFuZGVkQXR0cmlidXRlKCk7XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMuYW5pbWF0aW9uKSB7XG4gICAgICBpZiAoZ2V0SXNEZWZhdWx0UmVuZGVyRm4oKSkge1xuICAgICAgICBvblRyYW5zaXRpb25lZE91dChkdXJhdGlvbiwgaW5zdGFuY2UudW5tb3VudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLnVubW91bnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoaWRlV2l0aEludGVyYWN0aXZpdHkoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICB3YXJuV2hlbihcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUuaXNEZXN0cm95ZWQsXG4gICAgICAgIGNyZWF0ZU1lbW9yeUxlYWtXYXJuaW5nKCdoaWRlV2l0aEludGVyYWN0aXZpdHknKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXREb2N1bWVudCgpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGRlYm91bmNlZE9uTW91c2VNb3ZlKTtcbiAgICBwdXNoSWZVbmlxdWUobW91c2VNb3ZlTGlzdGVuZXJzLCBkZWJvdW5jZWRPbk1vdXNlTW92ZSk7XG4gICAgZGVib3VuY2VkT25Nb3VzZU1vdmUoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5tb3VudCgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICB3YXJuV2hlbihpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZCwgY3JlYXRlTWVtb3J5TGVha1dhcm5pbmcoJ3VubW91bnQnKSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnN0YXRlLmlzVmlzaWJsZSkge1xuICAgICAgaW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cblxuICAgIGlmICghaW5zdGFuY2Uuc3RhdGUuaXNNb3VudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVzdHJveVBvcHBlckluc3RhbmNlKCk7XG5cbiAgICAvLyBJZiBhIHBvcHBlciBpcyBub3QgaW50ZXJhY3RpdmUsIGl0IHdpbGwgYmUgYXBwZW5kZWQgb3V0c2lkZSB0aGUgcG9wcGVyXG4gICAgLy8gdHJlZSBieSBkZWZhdWx0LiBUaGlzIHNlZW1zIG1haW5seSBmb3IgaW50ZXJhY3RpdmUgdGlwcGllcywgYnV0IHdlIHNob3VsZFxuICAgIC8vIGZpbmQgYSB3b3JrYXJvdW5kIGlmIHBvc3NpYmxlXG4gICAgZ2V0TmVzdGVkUG9wcGVyVHJlZSgpLmZvckVhY2goKG5lc3RlZFBvcHBlcikgPT4ge1xuICAgICAgbmVzdGVkUG9wcGVyLl90aXBweSEudW5tb3VudCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHBvcHBlci5wYXJlbnROb2RlKSB7XG4gICAgICBwb3BwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwb3BwZXIpO1xuICAgIH1cblxuICAgIG1vdW50ZWRJbnN0YW5jZXMgPSBtb3VudGVkSW5zdGFuY2VzLmZpbHRlcigoaSkgPT4gaSAhPT0gaW5zdGFuY2UpO1xuXG4gICAgaW5zdGFuY2Uuc3RhdGUuaXNNb3VudGVkID0gZmFsc2U7XG4gICAgaW52b2tlSG9vaygnb25IaWRkZW4nLCBbaW5zdGFuY2VdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgd2FybldoZW4oaW5zdGFuY2Uuc3RhdGUuaXNEZXN0cm95ZWQsIGNyZWF0ZU1lbW9yeUxlYWtXYXJuaW5nKCdkZXN0cm95JykpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGluc3RhbmNlLmNsZWFyRGVsYXlUaW1lb3V0cygpO1xuICAgIGluc3RhbmNlLnVubW91bnQoKTtcblxuICAgIHJlbW92ZUxpc3RlbmVycygpO1xuXG4gICAgZGVsZXRlIHJlZmVyZW5jZS5fdGlwcHk7XG5cbiAgICBpbnN0YW5jZS5zdGF0ZS5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgICBpbnZva2VIb29rKCdvbkRlc3Ryb3knLCBbaW5zdGFuY2VdKTtcbiAgfVxufVxuIiwgImltcG9ydCBiaW5kR2xvYmFsRXZlbnRMaXN0ZW5lcnMsIHtcbiAgY3VycmVudElucHV0LFxufSBmcm9tICcuL2JpbmRHbG9iYWxFdmVudExpc3RlbmVycyc7XG5pbXBvcnQgY3JlYXRlVGlwcHksIHttb3VudGVkSW5zdGFuY2VzfSBmcm9tICcuL2NyZWF0ZVRpcHB5JztcbmltcG9ydCB7Z2V0QXJyYXlPZkVsZW1lbnRzLCBpc0VsZW1lbnQsIGlzUmVmZXJlbmNlRWxlbWVudH0gZnJvbSAnLi9kb20tdXRpbHMnO1xuaW1wb3J0IHtkZWZhdWx0UHJvcHMsIHNldERlZmF1bHRQcm9wcywgdmFsaWRhdGVQcm9wc30gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQge0hpZGVBbGwsIEhpZGVBbGxPcHRpb25zLCBJbnN0YW5jZSwgUHJvcHMsIFRhcmdldHN9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHt2YWxpZGF0ZVRhcmdldHMsIHdhcm5XaGVufSBmcm9tICcuL3ZhbGlkYXRpb24nO1xuXG5mdW5jdGlvbiB0aXBweShcbiAgdGFyZ2V0czogVGFyZ2V0cyxcbiAgb3B0aW9uYWxQcm9wczogUGFydGlhbDxQcm9wcz4gPSB7fVxuKTogSW5zdGFuY2UgfCBJbnN0YW5jZVtdIHtcbiAgY29uc3QgcGx1Z2lucyA9IGRlZmF1bHRQcm9wcy5wbHVnaW5zLmNvbmNhdChvcHRpb25hbFByb3BzLnBsdWdpbnMgfHwgW10pO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgdmFsaWRhdGVUYXJnZXRzKHRhcmdldHMpO1xuICAgIHZhbGlkYXRlUHJvcHMob3B0aW9uYWxQcm9wcywgcGx1Z2lucyk7XG4gIH1cblxuICBiaW5kR2xvYmFsRXZlbnRMaXN0ZW5lcnMoKTtcblxuICBjb25zdCBwYXNzZWRQcm9wczogUGFydGlhbDxQcm9wcz4gPSB7Li4ub3B0aW9uYWxQcm9wcywgcGx1Z2luc307XG5cbiAgY29uc3QgZWxlbWVudHMgPSBnZXRBcnJheU9mRWxlbWVudHModGFyZ2V0cyk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zdCBpc1NpbmdsZUNvbnRlbnRFbGVtZW50ID0gaXNFbGVtZW50KHBhc3NlZFByb3BzLmNvbnRlbnQpO1xuICAgIGNvbnN0IGlzTW9yZVRoYW5PbmVSZWZlcmVuY2VFbGVtZW50ID0gZWxlbWVudHMubGVuZ3RoID4gMTtcbiAgICB3YXJuV2hlbihcbiAgICAgIGlzU2luZ2xlQ29udGVudEVsZW1lbnQgJiYgaXNNb3JlVGhhbk9uZVJlZmVyZW5jZUVsZW1lbnQsXG4gICAgICBbXG4gICAgICAgICd0aXBweSgpIHdhcyBwYXNzZWQgYW4gRWxlbWVudCBhcyB0aGUgYGNvbnRlbnRgIHByb3AsIGJ1dCBtb3JlIHRoYW4nLFxuICAgICAgICAnb25lIHRpcHB5IGluc3RhbmNlIHdhcyBjcmVhdGVkIGJ5IHRoaXMgaW52b2NhdGlvbi4gVGhpcyBtZWFucyB0aGUnLFxuICAgICAgICAnY29udGVudCBlbGVtZW50IHdpbGwgb25seSBiZSBhcHBlbmRlZCB0byB0aGUgbGFzdCB0aXBweSBpbnN0YW5jZS4nLFxuICAgICAgICAnXFxuXFxuJyxcbiAgICAgICAgJ0luc3RlYWQsIHBhc3MgdGhlIC5pbm5lckhUTUwgb2YgdGhlIGVsZW1lbnQsIG9yIHVzZSBhIGZ1bmN0aW9uIHRoYXQnLFxuICAgICAgICAncmV0dXJucyBhIGNsb25lZCB2ZXJzaW9uIG9mIHRoZSBlbGVtZW50IGluc3RlYWQuJyxcbiAgICAgICAgJ1xcblxcbicsXG4gICAgICAgICcxKSBjb250ZW50OiBlbGVtZW50LmlubmVySFRNTFxcbicsXG4gICAgICAgICcyKSBjb250ZW50OiAoKSA9PiBlbGVtZW50LmNsb25lTm9kZSh0cnVlKScsXG4gICAgICBdLmpvaW4oJyAnKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbnN0YW5jZXMgPSBlbGVtZW50cy5yZWR1Y2U8SW5zdGFuY2VbXT4oXG4gICAgKGFjYywgcmVmZXJlbmNlKTogSW5zdGFuY2VbXSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHJlZmVyZW5jZSAmJiBjcmVhdGVUaXBweShyZWZlcmVuY2UsIHBhc3NlZFByb3BzKTtcblxuICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIGFjYy5wdXNoKGluc3RhbmNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgcmV0dXJuIGlzRWxlbWVudCh0YXJnZXRzKSA/IGluc3RhbmNlc1swXSA6IGluc3RhbmNlcztcbn1cblxudGlwcHkuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xudGlwcHkuc2V0RGVmYXVsdFByb3BzID0gc2V0RGVmYXVsdFByb3BzO1xudGlwcHkuY3VycmVudElucHV0ID0gY3VycmVudElucHV0O1xuXG5leHBvcnQgZGVmYXVsdCB0aXBweTtcblxuZXhwb3J0IGNvbnN0IGhpZGVBbGw6IEhpZGVBbGwgPSAoe1xuICBleGNsdWRlOiBleGNsdWRlZFJlZmVyZW5jZU9ySW5zdGFuY2UsXG4gIGR1cmF0aW9uLFxufTogSGlkZUFsbE9wdGlvbnMgPSB7fSkgPT4ge1xuICBtb3VudGVkSW5zdGFuY2VzLmZvckVhY2goKGluc3RhbmNlKSA9PiB7XG4gICAgbGV0IGlzRXhjbHVkZWQgPSBmYWxzZTtcblxuICAgIGlmIChleGNsdWRlZFJlZmVyZW5jZU9ySW5zdGFuY2UpIHtcbiAgICAgIGlzRXhjbHVkZWQgPSBpc1JlZmVyZW5jZUVsZW1lbnQoZXhjbHVkZWRSZWZlcmVuY2VPckluc3RhbmNlKVxuICAgICAgICA/IGluc3RhbmNlLnJlZmVyZW5jZSA9PT0gZXhjbHVkZWRSZWZlcmVuY2VPckluc3RhbmNlXG4gICAgICAgIDogaW5zdGFuY2UucG9wcGVyID09PSAoZXhjbHVkZWRSZWZlcmVuY2VPckluc3RhbmNlIGFzIEluc3RhbmNlKS5wb3BwZXI7XG4gICAgfVxuXG4gICAgaWYgKCFpc0V4Y2x1ZGVkKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gaW5zdGFuY2UucHJvcHMuZHVyYXRpb247XG5cbiAgICAgIGluc3RhbmNlLnNldFByb3BzKHtkdXJhdGlvbn0pO1xuICAgICAgaW5zdGFuY2UuaGlkZSgpO1xuXG4gICAgICBpZiAoIWluc3RhbmNlLnN0YXRlLmlzRGVzdHJveWVkKSB7XG4gICAgICAgIGluc3RhbmNlLnNldFByb3BzKHtkdXJhdGlvbjogb3JpZ2luYWxEdXJhdGlvbn0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuIiwgImltcG9ydCB0aXBweSBmcm9tICcuLic7XG5pbXBvcnQge2Rpdn0gZnJvbSAnLi4vZG9tLXV0aWxzJztcbmltcG9ydCB7XG4gIENyZWF0ZVNpbmdsZXRvbixcbiAgUGx1Z2luLFxuICBDcmVhdGVTaW5nbGV0b25Qcm9wcyxcbiAgUmVmZXJlbmNlRWxlbWVudCxcbiAgQ3JlYXRlU2luZ2xldG9uSW5zdGFuY2UsXG4gIEluc3RhbmNlLFxuICBQcm9wcyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtub3JtYWxpemVUb0FycmF5LCByZW1vdmVQcm9wZXJ0aWVzfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2Vycm9yV2hlbn0gZnJvbSAnLi4vdmFsaWRhdGlvbic7XG5pbXBvcnQge2FwcGx5U3R5bGVzLCBNb2RpZmllcn0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuXG4vLyBUaGUgZGVmYXVsdCBgYXBwbHlTdHlsZXNgIG1vZGlmaWVyIGhhcyBhIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZFxuLy8gZXZlcnkgdGltZSB0aGUgcG9wcGVyIGlzIGRlc3Ryb3llZCAoaS5lLiBhIG5ldyB0YXJnZXQpLCByZW1vdmluZyB0aGUgc3R5bGVzXG4vLyBhbmQgY2F1c2luZyB0cmFuc2l0aW9ucyB0byBicmVhayBmb3Igc2luZ2xldG9ucyB3aGVuIHRoZSBjb25zb2xlIGlzIG9wZW4sIGJ1dFxuLy8gbW9zdCBub3RhYmx5IGZvciBub24tdHJhbnNmb3JtIHN0eWxlcyBiZWluZyB1c2VkLCBgZ3B1QWNjZWxlcmF0aW9uOiBmYWxzZWAuXG5jb25zdCBhcHBseVN0eWxlc01vZGlmaWVyOiBNb2RpZmllcjwnYXBwbHlTdHlsZXMnLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7XG4gIC4uLmFwcGx5U3R5bGVzLFxuICBlZmZlY3Qoe3N0YXRlfSkge1xuICAgIGNvbnN0IGluaXRpYWxTdHlsZXMgPSB7XG4gICAgICBwb3BwZXI6IHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICAgIGxlZnQ6ICcwJyxcbiAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgfSxcbiAgICAgIGFycm93OiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgfSxcbiAgICAgIHJlZmVyZW5jZToge30sXG4gICAgfTtcblxuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gICAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICAgIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gICAgfVxuXG4gICAgLy8gaW50ZW50aW9uYWxseSByZXR1cm4gbm8gY2xlYW51cCBmdW5jdGlvblxuICAgIC8vIHJldHVybiAoKSA9PiB7IC4uLiB9XG4gIH0sXG59O1xuXG5jb25zdCBjcmVhdGVTaW5nbGV0b246IENyZWF0ZVNpbmdsZXRvbiA9IChcbiAgdGlwcHlJbnN0YW5jZXMsXG4gIG9wdGlvbmFsUHJvcHMgPSB7fVxuKSA9PiB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgZXJyb3JXaGVuKFxuICAgICAgIUFycmF5LmlzQXJyYXkodGlwcHlJbnN0YW5jZXMpLFxuICAgICAgW1xuICAgICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBjcmVhdGVTaW5nbGV0b24oKSBtdXN0IGJlIGFuIGFycmF5IG9mJyxcbiAgICAgICAgJ3RpcHB5IGluc3RhbmNlcy4gVGhlIHBhc3NlZCB2YWx1ZSB3YXMnLFxuICAgICAgICBTdHJpbmcodGlwcHlJbnN0YW5jZXMpLFxuICAgICAgXS5qb2luKCcgJylcbiAgICApO1xuICB9XG5cbiAgbGV0IGluZGl2aWR1YWxJbnN0YW5jZXMgPSB0aXBweUluc3RhbmNlcztcbiAgbGV0IHJlZmVyZW5jZXM6IEFycmF5PFJlZmVyZW5jZUVsZW1lbnQ+ID0gW107XG4gIGxldCB0cmlnZ2VyVGFyZ2V0czogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgbGV0IGN1cnJlbnRUYXJnZXQ6IEVsZW1lbnQgfCBudWxsO1xuICBsZXQgb3ZlcnJpZGVzID0gb3B0aW9uYWxQcm9wcy5vdmVycmlkZXM7XG4gIGxldCBpbnRlcmNlcHRTZXRQcm9wc0NsZWFudXBzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuICBsZXQgc2hvd25PbkNyZWF0ZSA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHNldFRyaWdnZXJUYXJnZXRzKCk6IHZvaWQge1xuICAgIHRyaWdnZXJUYXJnZXRzID0gaW5kaXZpZHVhbEluc3RhbmNlc1xuICAgICAgLm1hcCgoaW5zdGFuY2UpID0+XG4gICAgICAgIG5vcm1hbGl6ZVRvQXJyYXkoaW5zdGFuY2UucHJvcHMudHJpZ2dlclRhcmdldCB8fCBpbnN0YW5jZS5yZWZlcmVuY2UpXG4gICAgICApXG4gICAgICAucmVkdWNlKChhY2MsIGl0ZW0pID0+IGFjYy5jb25jYXQoaXRlbSksIFtdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFJlZmVyZW5jZXMoKTogdm9pZCB7XG4gICAgcmVmZXJlbmNlcyA9IGluZGl2aWR1YWxJbnN0YW5jZXMubWFwKChpbnN0YW5jZSkgPT4gaW5zdGFuY2UucmVmZXJlbmNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuYWJsZUluc3RhbmNlcyhpc0VuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpbmRpdmlkdWFsSW5zdGFuY2VzLmZvckVhY2goKGluc3RhbmNlKSA9PiB7XG4gICAgICBpZiAoaXNFbmFibGVkKSB7XG4gICAgICAgIGluc3RhbmNlLmVuYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdGFuY2UuZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJjZXB0U2V0UHJvcHMoc2luZ2xldG9uOiBJbnN0YW5jZSk6IEFycmF5PCgpID0+IHZvaWQ+IHtcbiAgICByZXR1cm4gaW5kaXZpZHVhbEluc3RhbmNlcy5tYXAoKGluc3RhbmNlKSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW5hbFNldFByb3BzID0gaW5zdGFuY2Uuc2V0UHJvcHM7XG5cbiAgICAgIGluc3RhbmNlLnNldFByb3BzID0gKHByb3BzKTogdm9pZCA9PiB7XG4gICAgICAgIG9yaWdpbmFsU2V0UHJvcHMocHJvcHMpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZS5yZWZlcmVuY2UgPT09IGN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgICBzaW5nbGV0b24uc2V0UHJvcHMocHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpbnN0YW5jZS5zZXRQcm9wcyA9IG9yaWdpbmFsU2V0UHJvcHM7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8gaGF2ZSB0byBwYXNzIHNpbmdsZXRvbiwgYXMgaXQgbWF5YmUgdW5kZWZpbmVkIG9uIGZpcnN0IGNhbGxcbiAgZnVuY3Rpb24gcHJlcGFyZUluc3RhbmNlKFxuICAgIHNpbmdsZXRvbjogSW5zdGFuY2UsXG4gICAgdGFyZ2V0OiBSZWZlcmVuY2VFbGVtZW50XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdHJpZ2dlclRhcmdldHMuaW5kZXhPZih0YXJnZXQpO1xuXG4gICAgLy8gYmFpbC1vdXRcbiAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3VycmVudFRhcmdldCA9IHRhcmdldDtcblxuICAgIGNvbnN0IG92ZXJyaWRlUHJvcHM6IFBhcnRpYWw8UHJvcHM+ID0gKG92ZXJyaWRlcyB8fCBbXSlcbiAgICAgIC5jb25jYXQoJ2NvbnRlbnQnKVxuICAgICAgLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgIChhY2MgYXMgYW55KVtwcm9wXSA9IGluZGl2aWR1YWxJbnN0YW5jZXNbaW5kZXhdLnByb3BzW3Byb3BdO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuXG4gICAgc2luZ2xldG9uLnNldFByb3BzKHtcbiAgICAgIC4uLm92ZXJyaWRlUHJvcHMsXG4gICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0OlxuICAgICAgICB0eXBlb2Ygb3ZlcnJpZGVQcm9wcy5nZXRSZWZlcmVuY2VDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBvdmVycmlkZVByb3BzLmdldFJlZmVyZW5jZUNsaWVudFJlY3RcbiAgICAgICAgICA6ICgpOiBDbGllbnRSZWN0ID0+IHJlZmVyZW5jZXNbaW5kZXhdPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICB9KTtcbiAgfVxuXG4gIGVuYWJsZUluc3RhbmNlcyhmYWxzZSk7XG4gIHNldFJlZmVyZW5jZXMoKTtcbiAgc2V0VHJpZ2dlclRhcmdldHMoKTtcblxuICBjb25zdCBwbHVnaW46IFBsdWdpbiA9IHtcbiAgICBmbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgICBlbmFibGVJbnN0YW5jZXModHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSGlkZGVuKCk6IHZvaWQge1xuICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBvbkNsaWNrT3V0c2lkZShpbnN0YW5jZSk6IHZvaWQge1xuICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcy5zaG93T25DcmVhdGUgJiYgIXNob3duT25DcmVhdGUpIHtcbiAgICAgICAgICAgIHNob3duT25DcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblNob3coaW5zdGFuY2UpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMuc2hvd09uQ3JlYXRlICYmICFzaG93bk9uQ3JlYXRlKSB7XG4gICAgICAgICAgICBzaG93bk9uQ3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHByZXBhcmVJbnN0YW5jZShpbnN0YW5jZSwgcmVmZXJlbmNlc1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblRyaWdnZXIoaW5zdGFuY2UsIGV2ZW50KTogdm9pZCB7XG4gICAgICAgICAgcHJlcGFyZUluc3RhbmNlKGluc3RhbmNlLCBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHNpbmdsZXRvbiA9IHRpcHB5KGRpdigpLCB7XG4gICAgLi4ucmVtb3ZlUHJvcGVydGllcyhvcHRpb25hbFByb3BzLCBbJ292ZXJyaWRlcyddKSxcbiAgICBwbHVnaW5zOiBbcGx1Z2luLCAuLi4ob3B0aW9uYWxQcm9wcy5wbHVnaW5zIHx8IFtdKV0sXG4gICAgdHJpZ2dlclRhcmdldDogdHJpZ2dlclRhcmdldHMsXG4gICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgLi4ub3B0aW9uYWxQcm9wcy5wb3BwZXJPcHRpb25zLFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIC4uLihvcHRpb25hbFByb3BzLnBvcHBlck9wdGlvbnM/Lm1vZGlmaWVycyB8fCBbXSksXG4gICAgICAgIGFwcGx5U3R5bGVzTW9kaWZpZXIsXG4gICAgICBdLFxuICAgIH0sXG4gIH0pIGFzIENyZWF0ZVNpbmdsZXRvbkluc3RhbmNlPENyZWF0ZVNpbmdsZXRvblByb3BzPjtcblxuICBjb25zdCBvcmlnaW5hbFNob3cgPSBzaW5nbGV0b24uc2hvdztcblxuICBzaW5nbGV0b24uc2hvdyA9ICh0YXJnZXQ/OiBSZWZlcmVuY2VFbGVtZW50IHwgSW5zdGFuY2UgfCBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBvcmlnaW5hbFNob3coKTtcblxuICAgIC8vIGZpcnN0IHRpbWUsIHNob3dPbkNyZWF0ZSBvciBwcm9ncmFtbWF0aWMgY2FsbCB3aXRoIG5vIHBhcmFtc1xuICAgIC8vIGRlZmF1bHQgdG8gc2hvd2luZyBmaXJzdCBpbnN0YW5jZVxuICAgIGlmICghY3VycmVudFRhcmdldCAmJiB0YXJnZXQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHByZXBhcmVJbnN0YW5jZShzaW5nbGV0b24sIHJlZmVyZW5jZXNbMF0pO1xuICAgIH1cblxuICAgIC8vIHRyaWdnZXJlZCBmcm9tIGV2ZW50IChkbyBub3RoaW5nIGFzIHByZXBhcmVJbnN0YW5jZSBhbHJlYWR5IGNhbGxlZCBieSBvblRyaWdnZXIpXG4gICAgLy8gcHJvZ3JhbW1hdGljIGNhbGwgd2l0aCBubyBwYXJhbXMgd2hlbiBhbHJlYWR5IHZpc2libGUgKGRvIG5vdGhpbmcgYWdhaW4pXG4gICAgaWYgKGN1cnJlbnRUYXJnZXQgJiYgdGFyZ2V0ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0YXJnZXQgaXMgaW5kZXggb2YgaW5zdGFuY2VcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJlZmVyZW5jZXNbdGFyZ2V0XSAmJiBwcmVwYXJlSW5zdGFuY2Uoc2luZ2xldG9uLCByZWZlcmVuY2VzW3RhcmdldF0pXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRhcmdldCBpcyBhIGNoaWxkIHRpcHB5IGluc3RhbmNlXG4gICAgaWYgKGluZGl2aWR1YWxJbnN0YW5jZXMuaW5kZXhPZih0YXJnZXQgYXMgSW5zdGFuY2UpID49IDApIHtcbiAgICAgIGNvbnN0IHJlZiA9ICh0YXJnZXQgYXMgSW5zdGFuY2UpLnJlZmVyZW5jZTtcbiAgICAgIHJldHVybiBwcmVwYXJlSW5zdGFuY2Uoc2luZ2xldG9uLCByZWYpO1xuICAgIH1cblxuICAgIC8vIHRhcmdldCBpcyBhIFJlZmVyZW5jZUVsZW1lbnRcbiAgICBpZiAocmVmZXJlbmNlcy5pbmRleE9mKHRhcmdldCBhcyBSZWZlcmVuY2VFbGVtZW50KSA+PSAwKSB7XG4gICAgICByZXR1cm4gcHJlcGFyZUluc3RhbmNlKHNpbmdsZXRvbiwgdGFyZ2V0IGFzIFJlZmVyZW5jZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcblxuICBzaW5nbGV0b24uc2hvd05leHQgPSAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZmlyc3QgPSByZWZlcmVuY2VzWzBdO1xuICAgIGlmICghY3VycmVudFRhcmdldCkge1xuICAgICAgcmV0dXJuIHNpbmdsZXRvbi5zaG93KDApO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHJlZmVyZW5jZXMuaW5kZXhPZihjdXJyZW50VGFyZ2V0KTtcbiAgICBzaW5nbGV0b24uc2hvdyhyZWZlcmVuY2VzW2luZGV4ICsgMV0gfHwgZmlyc3QpO1xuICB9O1xuXG4gIHNpbmdsZXRvbi5zaG93UHJldmlvdXMgPSAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgbGFzdCA9IHJlZmVyZW5jZXNbcmVmZXJlbmNlcy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybiBzaW5nbGV0b24uc2hvdyhsYXN0KTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSByZWZlcmVuY2VzLmluZGV4T2YoY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmZXJlbmNlc1tpbmRleCAtIDFdIHx8IGxhc3Q7XG4gICAgc2luZ2xldG9uLnNob3codGFyZ2V0KTtcbiAgfTtcblxuICBjb25zdCBvcmlnaW5hbFNldFByb3BzID0gc2luZ2xldG9uLnNldFByb3BzO1xuXG4gIHNpbmdsZXRvbi5zZXRQcm9wcyA9IChwcm9wcyk6IHZvaWQgPT4ge1xuICAgIG92ZXJyaWRlcyA9IHByb3BzLm92ZXJyaWRlcyB8fCBvdmVycmlkZXM7XG4gICAgb3JpZ2luYWxTZXRQcm9wcyhwcm9wcyk7XG4gIH07XG5cbiAgc2luZ2xldG9uLnNldEluc3RhbmNlcyA9IChuZXh0SW5zdGFuY2VzKTogdm9pZCA9PiB7XG4gICAgZW5hYmxlSW5zdGFuY2VzKHRydWUpO1xuICAgIGludGVyY2VwdFNldFByb3BzQ2xlYW51cHMuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuXG4gICAgaW5kaXZpZHVhbEluc3RhbmNlcyA9IG5leHRJbnN0YW5jZXM7XG5cbiAgICBlbmFibGVJbnN0YW5jZXMoZmFsc2UpO1xuICAgIHNldFJlZmVyZW5jZXMoKTtcbiAgICBzZXRUcmlnZ2VyVGFyZ2V0cygpO1xuICAgIGludGVyY2VwdFNldFByb3BzQ2xlYW51cHMgPSBpbnRlcmNlcHRTZXRQcm9wcyhzaW5nbGV0b24pO1xuXG4gICAgc2luZ2xldG9uLnNldFByb3BzKHt0cmlnZ2VyVGFyZ2V0OiB0cmlnZ2VyVGFyZ2V0c30pO1xuICB9O1xuXG4gIGludGVyY2VwdFNldFByb3BzQ2xlYW51cHMgPSBpbnRlcmNlcHRTZXRQcm9wcyhzaW5nbGV0b24pO1xuXG4gIHJldHVybiBzaW5nbGV0b247XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTaW5nbGV0b247XG4iLCAiaW1wb3J0IHRpcHB5IGZyb20gJy4uJztcbmltcG9ydCB7VE9VQ0hfT1BUSU9OU30gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7ZGVmYXVsdFByb3BzfSBmcm9tICcuLi9wcm9wcyc7XG5pbXBvcnQge0luc3RhbmNlLCBQcm9wcywgVGFyZ2V0c30gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtMaXN0ZW5lck9iamVjdH0gZnJvbSAnLi4vdHlwZXMtaW50ZXJuYWwnO1xuaW1wb3J0IHtub3JtYWxpemVUb0FycmF5LCByZW1vdmVQcm9wZXJ0aWVzfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2Vycm9yV2hlbn0gZnJvbSAnLi4vdmFsaWRhdGlvbic7XG5cbmNvbnN0IEJVQkJMSU5HX0VWRU5UU19NQVAgPSB7XG4gIG1vdXNlb3ZlcjogJ21vdXNlZW50ZXInLFxuICBmb2N1c2luOiAnZm9jdXMnLFxuICBjbGljazogJ2NsaWNrJyxcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlbGVnYXRlIGluc3RhbmNlIHRoYXQgY29udHJvbHMgdGhlIGNyZWF0aW9uIG9mIHRpcHB5IGluc3RhbmNlc1xuICogZm9yIGNoaWxkIGVsZW1lbnRzIChgdGFyZ2V0YCBDU1Mgc2VsZWN0b3IpLlxuICovXG5mdW5jdGlvbiBkZWxlZ2F0ZShcbiAgdGFyZ2V0czogVGFyZ2V0cyxcbiAgcHJvcHM6IFBhcnRpYWw8UHJvcHM+ICYge3RhcmdldDogc3RyaW5nfVxuKTogSW5zdGFuY2UgfCBJbnN0YW5jZVtdIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKF9fREVWX18pIHtcbiAgICBlcnJvcldoZW4oXG4gICAgICAhKHByb3BzICYmIHByb3BzLnRhcmdldCksXG4gICAgICBbXG4gICAgICAgICdZb3UgbXVzdCBzcGVjaXR5IGEgYHRhcmdldGAgcHJvcCBpbmRpY2F0aW5nIGEgQ1NTIHNlbGVjdG9yIHN0cmluZyBtYXRjaGluZycsXG4gICAgICAgICd0aGUgdGFyZ2V0IGVsZW1lbnRzIHRoYXQgc2hvdWxkIHJlY2VpdmUgYSB0aXBweS4nLFxuICAgICAgXS5qb2luKCcgJylcbiAgICApO1xuICB9XG5cbiAgbGV0IGxpc3RlbmVyczogTGlzdGVuZXJPYmplY3RbXSA9IFtdO1xuICBsZXQgY2hpbGRUaXBweUluc3RhbmNlczogSW5zdGFuY2VbXSA9IFtdO1xuICBsZXQgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBjb25zdCB7dGFyZ2V0fSA9IHByb3BzO1xuXG4gIGNvbnN0IG5hdGl2ZVByb3BzID0gcmVtb3ZlUHJvcGVydGllcyhwcm9wcywgWyd0YXJnZXQnXSk7XG4gIGNvbnN0IHBhcmVudFByb3BzID0gey4uLm5hdGl2ZVByb3BzLCB0cmlnZ2VyOiAnbWFudWFsJywgdG91Y2g6IGZhbHNlfTtcbiAgY29uc3QgY2hpbGRQcm9wcyA9IHtcbiAgICB0b3VjaDogZGVmYXVsdFByb3BzLnRvdWNoLFxuICAgIC4uLm5hdGl2ZVByb3BzLFxuICAgIHNob3dPbkNyZWF0ZTogdHJ1ZSxcbiAgfTtcblxuICBjb25zdCByZXR1cm5WYWx1ZSA9IHRpcHB5KHRhcmdldHMsIHBhcmVudFByb3BzKTtcbiAgY29uc3Qgbm9ybWFsaXplZFJldHVyblZhbHVlID0gbm9ybWFsaXplVG9BcnJheShyZXR1cm5WYWx1ZSk7XG5cbiAgZnVuY3Rpb24gb25UcmlnZ2VyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghZXZlbnQudGFyZ2V0IHx8IGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuY2xvc2VzdCh0YXJnZXQpO1xuXG4gICAgaWYgKCF0YXJnZXROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IHJlbGV2YW50IHRyaWdnZXIgd2l0aCBmYWxsYmFja3M6XG4gICAgLy8gMS4gQ2hlY2sgYGRhdGEtdGlwcHktdHJpZ2dlcmAgYXR0cmlidXRlIG9uIHRhcmdldCBub2RlXG4gICAgLy8gMi4gRmFsbGJhY2sgdG8gYHRyaWdnZXJgIHBhc3NlZCB0byBgZGVsZWdhdGUoKWBcbiAgICAvLyAzLiBGYWxsYmFjayB0byBgZGVmYXVsdFByb3BzLnRyaWdnZXJgXG4gICAgY29uc3QgdHJpZ2dlciA9XG4gICAgICB0YXJnZXROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS10aXBweS10cmlnZ2VyJykgfHxcbiAgICAgIHByb3BzLnRyaWdnZXIgfHxcbiAgICAgIGRlZmF1bHRQcm9wcy50cmlnZ2VyO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0YXJnZXROb2RlLl90aXBweSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAndG91Y2hzdGFydCcgJiYgdHlwZW9mIGNoaWxkUHJvcHMudG91Y2ggPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGV2ZW50LnR5cGUgIT09ICd0b3VjaHN0YXJ0JyAmJlxuICAgICAgdHJpZ2dlci5pbmRleE9mKChCVUJCTElOR19FVkVOVFNfTUFQIGFzIGFueSlbZXZlbnQudHlwZV0pIDwgMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlID0gdGlwcHkodGFyZ2V0Tm9kZSwgY2hpbGRQcm9wcyk7XG5cbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGNoaWxkVGlwcHlJbnN0YW5jZXMgPSBjaGlsZFRpcHB5SW5zdGFuY2VzLmNvbmNhdChpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb24oXG4gICAgbm9kZTogRWxlbWVudCxcbiAgICBldmVudFR5cGU6IHN0cmluZyxcbiAgICBoYW5kbGVyOiBFdmVudExpc3RlbmVyLFxuICAgIG9wdGlvbnM6IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGZhbHNlXG4gICk6IHZvaWQge1xuICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIGxpc3RlbmVycy5wdXNoKHtub2RlLCBldmVudFR5cGUsIGhhbmRsZXIsIG9wdGlvbnN9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJzKGluc3RhbmNlOiBJbnN0YW5jZSk6IHZvaWQge1xuICAgIGNvbnN0IHtyZWZlcmVuY2V9ID0gaW5zdGFuY2U7XG5cbiAgICBvbihyZWZlcmVuY2UsICd0b3VjaHN0YXJ0Jywgb25UcmlnZ2VyLCBUT1VDSF9PUFRJT05TKTtcbiAgICBvbihyZWZlcmVuY2UsICdtb3VzZW92ZXInLCBvblRyaWdnZXIpO1xuICAgIG9uKHJlZmVyZW5jZSwgJ2ZvY3VzaW4nLCBvblRyaWdnZXIpO1xuICAgIG9uKHJlZmVyZW5jZSwgJ2NsaWNrJywgb25UcmlnZ2VyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKCh7bm9kZSwgZXZlbnRUeXBlLCBoYW5kbGVyLCBvcHRpb25zfTogTGlzdGVuZXJPYmplY3QpID0+IHtcbiAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlNdXRhdGlvbnMoaW5zdGFuY2U6IEluc3RhbmNlKTogdm9pZCB7XG4gICAgY29uc3Qgb3JpZ2luYWxEZXN0cm95ID0gaW5zdGFuY2UuZGVzdHJveTtcbiAgICBjb25zdCBvcmlnaW5hbEVuYWJsZSA9IGluc3RhbmNlLmVuYWJsZTtcbiAgICBjb25zdCBvcmlnaW5hbERpc2FibGUgPSBpbnN0YW5jZS5kaXNhYmxlO1xuXG4gICAgaW5zdGFuY2UuZGVzdHJveSA9IChzaG91bGREZXN0cm95Q2hpbGRJbnN0YW5jZXMgPSB0cnVlKTogdm9pZCA9PiB7XG4gICAgICBpZiAoc2hvdWxkRGVzdHJveUNoaWxkSW5zdGFuY2VzKSB7XG4gICAgICAgIGNoaWxkVGlwcHlJbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICBpbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFRpcHB5SW5zdGFuY2VzID0gW107XG5cbiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICBvcmlnaW5hbERlc3Ryb3koKTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UuZW5hYmxlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgb3JpZ2luYWxFbmFibGUoKTtcbiAgICAgIGNoaWxkVGlwcHlJbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2UpID0+IGluc3RhbmNlLmVuYWJsZSgpKTtcbiAgICAgIGRpc2FibGVkID0gZmFsc2U7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLmRpc2FibGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBvcmlnaW5hbERpc2FibGUoKTtcbiAgICAgIGNoaWxkVGlwcHlJbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2UpID0+IGluc3RhbmNlLmRpc2FibGUoKSk7XG4gICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIGFkZEV2ZW50TGlzdGVuZXJzKGluc3RhbmNlKTtcbiAgfVxuXG4gIG5vcm1hbGl6ZWRSZXR1cm5WYWx1ZS5mb3JFYWNoKGFwcGx5TXV0YXRpb25zKTtcblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlbGVnYXRlO1xuIiwgImltcG9ydCB7QkFDS0RST1BfQ0xBU1N9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2Rpdiwgc2V0VmlzaWJpbGl0eVN0YXRlfSBmcm9tICcuLi9kb20tdXRpbHMnO1xuaW1wb3J0IHtnZXRDaGlsZHJlbn0gZnJvbSAnLi4vdGVtcGxhdGUnO1xuaW1wb3J0IHtBbmltYXRlRmlsbH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtlcnJvcldoZW59IGZyb20gJy4uL3ZhbGlkYXRpb24nO1xuXG5jb25zdCBhbmltYXRlRmlsbDogQW5pbWF0ZUZpbGwgPSB7XG4gIG5hbWU6ICdhbmltYXRlRmlsbCcsXG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGZuKGluc3RhbmNlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICghaW5zdGFuY2UucHJvcHMucmVuZGVyPy4kJHRpcHB5KSB7XG4gICAgICBpZiAoX19ERVZfXykge1xuICAgICAgICBlcnJvcldoZW4oXG4gICAgICAgICAgaW5zdGFuY2UucHJvcHMuYW5pbWF0ZUZpbGwsXG4gICAgICAgICAgJ1RoZSBgYW5pbWF0ZUZpbGxgIHBsdWdpbiByZXF1aXJlcyB0aGUgZGVmYXVsdCByZW5kZXIgZnVuY3Rpb24uJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3Qge2JveCwgY29udGVudH0gPSBnZXRDaGlsZHJlbihpbnN0YW5jZS5wb3BwZXIpO1xuXG4gICAgY29uc3QgYmFja2Ryb3AgPSBpbnN0YW5jZS5wcm9wcy5hbmltYXRlRmlsbFxuICAgICAgPyBjcmVhdGVCYWNrZHJvcEVsZW1lbnQoKVxuICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9uQ3JlYXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAoYmFja2Ryb3ApIHtcbiAgICAgICAgICBib3guaW5zZXJ0QmVmb3JlKGJhY2tkcm9wLCBib3guZmlyc3RFbGVtZW50Q2hpbGQhKTtcbiAgICAgICAgICBib3guc2V0QXR0cmlidXRlKCdkYXRhLWFuaW1hdGVmaWxsJywgJycpO1xuICAgICAgICAgIGJveC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG4gICAgICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMoe2Fycm93OiBmYWxzZSwgYW5pbWF0aW9uOiAnc2hpZnQtYXdheSd9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uTW91bnQoKTogdm9pZCB7XG4gICAgICAgIGlmIChiYWNrZHJvcCkge1xuICAgICAgICAgIGNvbnN0IHt0cmFuc2l0aW9uRHVyYXRpb259ID0gYm94LnN0eWxlO1xuICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gTnVtYmVyKHRyYW5zaXRpb25EdXJhdGlvbi5yZXBsYWNlKCdtcycsICcnKSk7XG5cbiAgICAgICAgICAvLyBUaGUgY29udGVudCBzaG91bGQgZmFkZSBpbiBhZnRlciB0aGUgYmFja2Ryb3AgaGFzIG1vc3RseSBmaWxsZWQgdGhlXG4gICAgICAgICAgLy8gdG9vbHRpcCBlbGVtZW50LiBgY2xpcC1wYXRoYCBpcyB0aGUgb3RoZXIgYWx0ZXJuYXRpdmUgYnV0IGlzIG5vdFxuICAgICAgICAgIC8vIHdlbGwtc3VwcG9ydGVkIGFuZCBpcyBidWdneSBvbiBzb21lIGRldmljZXMuXG4gICAgICAgICAgY29udGVudC5zdHlsZS50cmFuc2l0aW9uRGVsYXkgPSBgJHtNYXRoLnJvdW5kKGR1cmF0aW9uIC8gMTApfW1zYDtcblxuICAgICAgICAgIGJhY2tkcm9wLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICAgICAgICBzZXRWaXNpYmlsaXR5U3RhdGUoW2JhY2tkcm9wXSwgJ3Zpc2libGUnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uU2hvdygpOiB2b2lkIHtcbiAgICAgICAgaWYgKGJhY2tkcm9wKSB7XG4gICAgICAgICAgYmFja2Ryb3Auc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBtcyc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkhpZGUoKTogdm9pZCB7XG4gICAgICAgIGlmIChiYWNrZHJvcCkge1xuICAgICAgICAgIHNldFZpc2liaWxpdHlTdGF0ZShbYmFja2Ryb3BdLCAnaGlkZGVuJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFuaW1hdGVGaWxsO1xuXG5mdW5jdGlvbiBjcmVhdGVCYWNrZHJvcEVsZW1lbnQoKTogSFRNTERpdkVsZW1lbnQge1xuICBjb25zdCBiYWNrZHJvcCA9IGRpdigpO1xuICBiYWNrZHJvcC5jbGFzc05hbWUgPSBCQUNLRFJPUF9DTEFTUztcbiAgc2V0VmlzaWJpbGl0eVN0YXRlKFtiYWNrZHJvcF0sICdoaWRkZW4nKTtcbiAgcmV0dXJuIGJhY2tkcm9wO1xufVxuIiwgImltcG9ydCB7Z2V0T3duZXJEb2N1bWVudCwgaXNNb3VzZUV2ZW50fSBmcm9tICcuLi9kb20tdXRpbHMnO1xuaW1wb3J0IHtGb2xsb3dDdXJzb3IsIEluc3RhbmNlfSBmcm9tICcuLi90eXBlcyc7XG5cbmxldCBtb3VzZUNvb3JkcyA9IHtjbGllbnRYOiAwLCBjbGllbnRZOiAwfTtcbmxldCBhY3RpdmVJbnN0YW5jZXM6IEFycmF5PHtpbnN0YW5jZTogSW5zdGFuY2U7IGRvYzogRG9jdW1lbnR9PiA9IFtdO1xuXG5mdW5jdGlvbiBzdG9yZU1vdXNlQ29vcmRzKHtjbGllbnRYLCBjbGllbnRZfTogTW91c2VFdmVudCk6IHZvaWQge1xuICBtb3VzZUNvb3JkcyA9IHtjbGllbnRYLCBjbGllbnRZfTtcbn1cblxuZnVuY3Rpb24gYWRkTW91c2VDb29yZHNMaXN0ZW5lcihkb2M6IERvY3VtZW50KTogdm9pZCB7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBzdG9yZU1vdXNlQ29vcmRzKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTW91c2VDb29yZHNMaXN0ZW5lcihkb2M6IERvY3VtZW50KTogdm9pZCB7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBzdG9yZU1vdXNlQ29vcmRzKTtcbn1cblxuY29uc3QgZm9sbG93Q3Vyc29yOiBGb2xsb3dDdXJzb3IgPSB7XG4gIG5hbWU6ICdmb2xsb3dDdXJzb3InLFxuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBmbihpbnN0YW5jZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IGluc3RhbmNlLnJlZmVyZW5jZTtcbiAgICBjb25zdCBkb2MgPSBnZXRPd25lckRvY3VtZW50KGluc3RhbmNlLnByb3BzLnRyaWdnZXJUYXJnZXQgfHwgcmVmZXJlbmNlKTtcblxuICAgIGxldCBpc0ludGVybmFsVXBkYXRlID0gZmFsc2U7XG4gICAgbGV0IHdhc0ZvY3VzRXZlbnQgPSBmYWxzZTtcbiAgICBsZXQgaXNVbm1vdW50ZWQgPSB0cnVlO1xuICAgIGxldCBwcmV2UHJvcHMgPSBpbnN0YW5jZS5wcm9wcztcblxuICAgIGZ1bmN0aW9uIGdldElzSW5pdGlhbEJlaGF2aW9yKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaW5zdGFuY2UucHJvcHMuZm9sbG93Q3Vyc29yID09PSAnaW5pdGlhbCcgJiYgaW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5zZXRHZXRSZWZlcmVuY2VDbGllbnRSZWN0KCk6IHZvaWQge1xuICAgICAgaXNJbnRlcm5hbFVwZGF0ZSA9IHRydWU7XG4gICAgICBpbnN0YW5jZS5zZXRQcm9wcyh7Z2V0UmVmZXJlbmNlQ2xpZW50UmVjdDogbnVsbH0pO1xuICAgICAgaXNJbnRlcm5hbFVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAvLyBJZiB0aGUgaW5zdGFuY2UgaXMgaW50ZXJhY3RpdmUsIGF2b2lkIHVwZGF0aW5nIHRoZSBwb3NpdGlvbiB1bmxlc3MgaXQnc1xuICAgICAgLy8gb3ZlciB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAgICAgIGNvbnN0IGlzQ3Vyc29yT3ZlclJlZmVyZW5jZSA9IGV2ZW50LnRhcmdldFxuICAgICAgICA/IHJlZmVyZW5jZS5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSlcbiAgICAgICAgOiB0cnVlO1xuICAgICAgY29uc3Qge2ZvbGxvd0N1cnNvcn0gPSBpbnN0YW5jZS5wcm9wcztcbiAgICAgIGNvbnN0IHtjbGllbnRYLCBjbGllbnRZfSA9IGV2ZW50O1xuXG4gICAgICBjb25zdCByZWN0ID0gcmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcmVsYXRpdmVYID0gY2xpZW50WCAtIHJlY3QubGVmdDtcbiAgICAgIGNvbnN0IHJlbGF0aXZlWSA9IGNsaWVudFkgLSByZWN0LnRvcDtcblxuICAgICAgaWYgKGlzQ3Vyc29yT3ZlclJlZmVyZW5jZSB8fCAhaW5zdGFuY2UucHJvcHMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMoe1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgLSB1bm5lZWRlZCBET01SZWN0IHByb3BlcnRpZXNcbiAgICAgICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0KCkge1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgbGV0IHggPSBjbGllbnRYO1xuICAgICAgICAgICAgbGV0IHkgPSBjbGllbnRZO1xuXG4gICAgICAgICAgICBpZiAoZm9sbG93Q3Vyc29yID09PSAnaW5pdGlhbCcpIHtcbiAgICAgICAgICAgICAgeCA9IHJlY3QubGVmdCArIHJlbGF0aXZlWDtcbiAgICAgICAgICAgICAgeSA9IHJlY3QudG9wICsgcmVsYXRpdmVZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmb2xsb3dDdXJzb3IgPT09ICdob3Jpem9udGFsJyA/IHJlY3QudG9wIDogeTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gZm9sbG93Q3Vyc29yID09PSAndmVydGljYWwnID8gcmVjdC5yaWdodCA6IHg7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBmb2xsb3dDdXJzb3IgPT09ICdob3Jpem9udGFsJyA/IHJlY3QuYm90dG9tIDogeTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBmb2xsb3dDdXJzb3IgPT09ICd2ZXJ0aWNhbCcgPyByZWN0LmxlZnQgOiB4O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICAgICAgICAgICAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGUoKTogdm9pZCB7XG4gICAgICBpZiAoaW5zdGFuY2UucHJvcHMuZm9sbG93Q3Vyc29yKSB7XG4gICAgICAgIGFjdGl2ZUluc3RhbmNlcy5wdXNoKHtpbnN0YW5jZSwgZG9jfSk7XG4gICAgICAgIGFkZE1vdXNlQ29vcmRzTGlzdGVuZXIoZG9jKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgYWN0aXZlSW5zdGFuY2VzID0gYWN0aXZlSW5zdGFuY2VzLmZpbHRlcihcbiAgICAgICAgKGRhdGEpID0+IGRhdGEuaW5zdGFuY2UgIT09IGluc3RhbmNlXG4gICAgICApO1xuXG4gICAgICBpZiAoYWN0aXZlSW5zdGFuY2VzLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5kb2MgPT09IGRvYykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlbW92ZU1vdXNlQ29vcmRzTGlzdGVuZXIoZG9jKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb25DcmVhdGU6IGNyZWF0ZSxcbiAgICAgIG9uRGVzdHJveTogZGVzdHJveSxcbiAgICAgIG9uQmVmb3JlVXBkYXRlKCk6IHZvaWQge1xuICAgICAgICBwcmV2UHJvcHMgPSBpbnN0YW5jZS5wcm9wcztcbiAgICAgIH0sXG4gICAgICBvbkFmdGVyVXBkYXRlKF8sIHtmb2xsb3dDdXJzb3J9KTogdm9pZCB7XG4gICAgICAgIGlmIChpc0ludGVybmFsVXBkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvbGxvd0N1cnNvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcHJldlByb3BzLmZvbGxvd0N1cnNvciAhPT0gZm9sbG93Q3Vyc29yXG4gICAgICAgICkge1xuICAgICAgICAgIGRlc3Ryb3koKTtcblxuICAgICAgICAgIGlmIChmb2xsb3dDdXJzb3IpIHtcbiAgICAgICAgICAgIGNyZWF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGluc3RhbmNlLnN0YXRlLmlzTW91bnRlZCAmJlxuICAgICAgICAgICAgICAhd2FzRm9jdXNFdmVudCAmJlxuICAgICAgICAgICAgICAhZ2V0SXNJbml0aWFsQmVoYXZpb3IoKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICB1bnNldEdldFJlZmVyZW5jZUNsaWVudFJlY3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbk1vdW50KCk6IHZvaWQge1xuICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMuZm9sbG93Q3Vyc29yICYmICF3YXNGb2N1c0V2ZW50KSB7XG4gICAgICAgICAgaWYgKGlzVW5tb3VudGVkKSB7XG4gICAgICAgICAgICBvbk1vdXNlTW92ZShtb3VzZUNvb3JkcyBhcyBNb3VzZUV2ZW50KTtcbiAgICAgICAgICAgIGlzVW5tb3VudGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFnZXRJc0luaXRpYWxCZWhhdmlvcigpKSB7XG4gICAgICAgICAgICBhZGRMaXN0ZW5lcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uVHJpZ2dlcihfLCBldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNNb3VzZUV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgIG1vdXNlQ29vcmRzID0ge2NsaWVudFg6IGV2ZW50LmNsaWVudFgsIGNsaWVudFk6IGV2ZW50LmNsaWVudFl9O1xuICAgICAgICB9XG4gICAgICAgIHdhc0ZvY3VzRXZlbnQgPSBldmVudC50eXBlID09PSAnZm9jdXMnO1xuICAgICAgfSxcbiAgICAgIG9uSGlkZGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMuZm9sbG93Q3Vyc29yKSB7XG4gICAgICAgICAgdW5zZXRHZXRSZWZlcmVuY2VDbGllbnRSZWN0KCk7XG4gICAgICAgICAgcmVtb3ZlTGlzdGVuZXIoKTtcbiAgICAgICAgICBpc1VubW91bnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvbGxvd0N1cnNvcjtcbiIsICJpbXBvcnQge01vZGlmaWVyLCBQbGFjZW1lbnR9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcbmltcG9ydCB7aXNNb3VzZUV2ZW50fSBmcm9tICcuLi9kb20tdXRpbHMnO1xuaW1wb3J0IHtCYXNlUGxhY2VtZW50LCBJbmxpbmVQb3NpdGlvbmluZywgUHJvcHN9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXJyYXlGcm9tLCBnZXRCYXNlUGxhY2VtZW50fSBmcm9tICcuLi91dGlscyc7XG5cbmZ1bmN0aW9uIGdldFByb3BzKHByb3BzOiBQcm9wcywgbW9kaWZpZXI6IE1vZGlmaWVyPGFueSwgYW55Pik6IFBhcnRpYWw8UHJvcHM+IHtcbiAgcmV0dXJuIHtcbiAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICAuLi5wcm9wcy5wb3BwZXJPcHRpb25zLFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIC4uLihwcm9wcy5wb3BwZXJPcHRpb25zPy5tb2RpZmllcnMgfHwgW10pLmZpbHRlcihcbiAgICAgICAgICAoe25hbWV9KSA9PiBuYW1lICE9PSBtb2RpZmllci5uYW1lXG4gICAgICAgICksXG4gICAgICAgIG1vZGlmaWVyLFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBpbmxpbmVQb3NpdGlvbmluZzogSW5saW5lUG9zaXRpb25pbmcgPSB7XG4gIG5hbWU6ICdpbmxpbmVQb3NpdGlvbmluZycsXG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGZuKGluc3RhbmNlKSB7XG4gICAgY29uc3Qge3JlZmVyZW5jZX0gPSBpbnN0YW5jZTtcblxuICAgIGZ1bmN0aW9uIGlzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhIWluc3RhbmNlLnByb3BzLmlubGluZVBvc2l0aW9uaW5nO1xuICAgIH1cblxuICAgIGxldCBwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgICBsZXQgY3Vyc29yUmVjdEluZGV4ID0gLTE7XG4gICAgbGV0IGlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTtcbiAgICBsZXQgdHJpZWRQbGFjZW1lbnRzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICBjb25zdCBtb2RpZmllcjogTW9kaWZpZXI8XG4gICAgICAndGlwcHlJbmxpbmVQb3NpdGlvbmluZycsXG4gICAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgID4gPSB7XG4gICAgICBuYW1lOiAndGlwcHlJbmxpbmVQb3NpdGlvbmluZycsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgcGhhc2U6ICdhZnRlcldyaXRlJyxcbiAgICAgIGZuKHtzdGF0ZX0pIHtcbiAgICAgICAgaWYgKGlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgaWYgKHRyaWVkUGxhY2VtZW50cy5pbmRleE9mKHN0YXRlLnBsYWNlbWVudCkgIT09IC0xKSB7XG4gICAgICAgICAgICB0cmllZFBsYWNlbWVudHMgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwbGFjZW1lbnQgIT09IHN0YXRlLnBsYWNlbWVudCAmJlxuICAgICAgICAgICAgdHJpZWRQbGFjZW1lbnRzLmluZGV4T2Yoc3RhdGUucGxhY2VtZW50KSA9PT0gLTFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRyaWVkUGxhY2VtZW50cy5wdXNoKHN0YXRlLnBsYWNlbWVudCk7XG4gICAgICAgICAgICBpbnN0YW5jZS5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgLSB1bm5lZWRlZCBET01SZWN0IHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDogKCkgPT5cbiAgICAgICAgICAgICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0KHN0YXRlLnBsYWNlbWVudCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwbGFjZW1lbnQgPSBzdGF0ZS5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFJlZmVyZW5jZUNsaWVudFJlY3QocGxhY2VtZW50OiBQbGFjZW1lbnQpOiBQYXJ0aWFsPERPTVJlY3Q+IHtcbiAgICAgIHJldHVybiBnZXRJbmxpbmVCb3VuZGluZ0NsaWVudFJlY3QoXG4gICAgICAgIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSxcbiAgICAgICAgcmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICBhcnJheUZyb20ocmVmZXJlbmNlLmdldENsaWVudFJlY3RzKCkpLFxuICAgICAgICBjdXJzb3JSZWN0SW5kZXhcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0SW50ZXJuYWxQcm9wcyhwYXJ0aWFsUHJvcHM6IFBhcnRpYWw8UHJvcHM+KTogdm9pZCB7XG4gICAgICBpc0ludGVybmFsVXBkYXRlID0gdHJ1ZTtcbiAgICAgIGluc3RhbmNlLnNldFByb3BzKHBhcnRpYWxQcm9wcyk7XG4gICAgICBpc0ludGVybmFsVXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkTW9kaWZpZXIoKTogdm9pZCB7XG4gICAgICBpZiAoIWlzSW50ZXJuYWxVcGRhdGUpIHtcbiAgICAgICAgc2V0SW50ZXJuYWxQcm9wcyhnZXRQcm9wcyhpbnN0YW5jZS5wcm9wcywgbW9kaWZpZXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb25DcmVhdGU6IGFkZE1vZGlmaWVyLFxuICAgICAgb25BZnRlclVwZGF0ZTogYWRkTW9kaWZpZXIsXG4gICAgICBvblRyaWdnZXIoXywgZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzTW91c2VFdmVudChldmVudCkpIHtcbiAgICAgICAgICBjb25zdCByZWN0cyA9IGFycmF5RnJvbShpbnN0YW5jZS5yZWZlcmVuY2UuZ2V0Q2xpZW50UmVjdHMoKSk7XG4gICAgICAgICAgY29uc3QgY3Vyc29yUmVjdCA9IHJlY3RzLmZpbmQoXG4gICAgICAgICAgICAocmVjdCkgPT5cbiAgICAgICAgICAgICAgcmVjdC5sZWZ0IC0gMiA8PSBldmVudC5jbGllbnRYICYmXG4gICAgICAgICAgICAgIHJlY3QucmlnaHQgKyAyID49IGV2ZW50LmNsaWVudFggJiZcbiAgICAgICAgICAgICAgcmVjdC50b3AgLSAyIDw9IGV2ZW50LmNsaWVudFkgJiZcbiAgICAgICAgICAgICAgcmVjdC5ib3R0b20gKyAyID49IGV2ZW50LmNsaWVudFlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVjdHMuaW5kZXhPZihjdXJzb3JSZWN0KTtcbiAgICAgICAgICBjdXJzb3JSZWN0SW5kZXggPSBpbmRleCA+IC0xID8gaW5kZXggOiBjdXJzb3JSZWN0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkhpZGRlbigpOiB2b2lkIHtcbiAgICAgICAgY3Vyc29yUmVjdEluZGV4ID0gLTE7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBpbmxpbmVQb3NpdGlvbmluZztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldElubGluZUJvdW5kaW5nQ2xpZW50UmVjdChcbiAgY3VycmVudEJhc2VQbGFjZW1lbnQ6IEJhc2VQbGFjZW1lbnQgfCBudWxsLFxuICBib3VuZGluZ1JlY3Q6IERPTVJlY3QsXG4gIGNsaWVudFJlY3RzOiBET01SZWN0W10sXG4gIGN1cnNvclJlY3RJbmRleDogbnVtYmVyXG4pOiB7XG4gIHRvcDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn0ge1xuICAvLyBOb3QgYW4gaW5saW5lIGVsZW1lbnQsIG9yIHBsYWNlbWVudCBpcyBub3QgeWV0IGtub3duXG4gIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPCAyIHx8IGN1cnJlbnRCYXNlUGxhY2VtZW50ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGJvdW5kaW5nUmVjdDtcbiAgfVxuXG4gIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZFxuICBpZiAoXG4gICAgY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmXG4gICAgY3Vyc29yUmVjdEluZGV4ID49IDAgJiZcbiAgICBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHRcbiAgKSB7XG4gICAgcmV0dXJuIGNsaWVudFJlY3RzW2N1cnNvclJlY3RJbmRleF0gfHwgYm91bmRpbmdSZWN0O1xuICB9XG5cbiAgc3dpdGNoIChjdXJyZW50QmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgY2FzZSAnYm90dG9tJzoge1xuICAgICAgY29uc3QgZmlyc3RSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gICAgICBjb25zdCBsYXN0UmVjdCA9IGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgaXNUb3AgPSBjdXJyZW50QmFzZVBsYWNlbWVudCA9PT0gJ3RvcCc7XG5cbiAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcblxuICAgICAgcmV0dXJuIHt0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQsIHdpZHRoLCBoZWlnaHR9O1xuICAgIH1cbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICdyaWdodCc6IHtcbiAgICAgIGNvbnN0IG1pbkxlZnQgPSBNYXRoLm1pbiguLi5jbGllbnRSZWN0cy5tYXAoKHJlY3RzKSA9PiByZWN0cy5sZWZ0KSk7XG4gICAgICBjb25zdCBtYXhSaWdodCA9IE1hdGgubWF4KC4uLmNsaWVudFJlY3RzLm1hcCgocmVjdHMpID0+IHJlY3RzLnJpZ2h0KSk7XG4gICAgICBjb25zdCBtZWFzdXJlUmVjdHMgPSBjbGllbnRSZWN0cy5maWx0ZXIoKHJlY3QpID0+XG4gICAgICAgIGN1cnJlbnRCYXNlUGxhY2VtZW50ID09PSAnbGVmdCdcbiAgICAgICAgICA/IHJlY3QubGVmdCA9PT0gbWluTGVmdFxuICAgICAgICAgIDogcmVjdC5yaWdodCA9PT0gbWF4UmlnaHRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRvcCA9IG1lYXN1cmVSZWN0c1swXS50b3A7XG4gICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgY29uc3QgcmlnaHQgPSBtYXhSaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuXG4gICAgICByZXR1cm4ge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgd2lkdGgsIGhlaWdodH07XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBib3VuZGluZ1JlY3Q7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtWaXJ0dWFsRWxlbWVudH0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuaW1wb3J0IHtSZWZlcmVuY2VFbGVtZW50LCBTdGlja3l9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3Qgc3RpY2t5OiBTdGlja3kgPSB7XG4gIG5hbWU6ICdzdGlja3knLFxuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBmbihpbnN0YW5jZSkge1xuICAgIGNvbnN0IHtyZWZlcmVuY2UsIHBvcHBlcn0gPSBpbnN0YW5jZTtcblxuICAgIGZ1bmN0aW9uIGdldFJlZmVyZW5jZSgpOiBSZWZlcmVuY2VFbGVtZW50IHwgVmlydHVhbEVsZW1lbnQge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLnBvcHBlckluc3RhbmNlXG4gICAgICAgID8gaW5zdGFuY2UucG9wcGVySW5zdGFuY2Uuc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlXG4gICAgICAgIDogcmVmZXJlbmNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNob3VsZENoZWNrKHZhbHVlOiAncmVmZXJlbmNlJyB8ICdwb3BwZXInKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UucHJvcHMuc3RpY2t5ID09PSB0cnVlIHx8IGluc3RhbmNlLnByb3BzLnN0aWNreSA9PT0gdmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IHByZXZSZWZSZWN0OiBDbGllbnRSZWN0IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHByZXZQb3BSZWN0OiBDbGllbnRSZWN0IHwgbnVsbCA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRSZWZSZWN0ID0gc2hvdWxkQ2hlY2soJ3JlZmVyZW5jZScpXG4gICAgICAgID8gZ2V0UmVmZXJlbmNlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgY3VycmVudFBvcFJlY3QgPSBzaG91bGRDaGVjaygncG9wcGVyJylcbiAgICAgICAgPyBwb3BwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgOiBudWxsO1xuXG4gICAgICBpZiAoXG4gICAgICAgIChjdXJyZW50UmVmUmVjdCAmJiBhcmVSZWN0c0RpZmZlcmVudChwcmV2UmVmUmVjdCwgY3VycmVudFJlZlJlY3QpKSB8fFxuICAgICAgICAoY3VycmVudFBvcFJlY3QgJiYgYXJlUmVjdHNEaWZmZXJlbnQocHJldlBvcFJlY3QsIGN1cnJlbnRQb3BSZWN0KSlcbiAgICAgICkge1xuICAgICAgICBpZiAoaW5zdGFuY2UucG9wcGVySW5zdGFuY2UpIHtcbiAgICAgICAgICBpbnN0YW5jZS5wb3BwZXJJbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcmV2UmVmUmVjdCA9IGN1cnJlbnRSZWZSZWN0O1xuICAgICAgcHJldlBvcFJlY3QgPSBjdXJyZW50UG9wUmVjdDtcblxuICAgICAgaWYgKGluc3RhbmNlLnN0YXRlLmlzTW91bnRlZCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlUG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvbk1vdW50KCk6IHZvaWQge1xuICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMuc3RpY2t5KSB7XG4gICAgICAgICAgdXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3RpY2t5O1xuXG5mdW5jdGlvbiBhcmVSZWN0c0RpZmZlcmVudChcbiAgcmVjdEE6IENsaWVudFJlY3QgfCBudWxsLFxuICByZWN0QjogQ2xpZW50UmVjdCB8IG51bGxcbik6IGJvb2xlYW4ge1xuICBpZiAocmVjdEEgJiYgcmVjdEIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgcmVjdEEudG9wICE9PSByZWN0Qi50b3AgfHxcbiAgICAgIHJlY3RBLnJpZ2h0ICE9PSByZWN0Qi5yaWdodCB8fFxuICAgICAgcmVjdEEuYm90dG9tICE9PSByZWN0Qi5ib3R0b20gfHxcbiAgICAgIHJlY3RBLmxlZnQgIT09IHJlY3RCLmxlZnRcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iLCAiaW1wb3J0IHRpcHB5IGZyb20gJy4uL3NyYyc7XG5pbXBvcnQge3JlbmRlcn0gZnJvbSAnLi4vc3JjL3RlbXBsYXRlJztcblxudGlwcHkuc2V0RGVmYXVsdFByb3BzKHtyZW5kZXJ9KTtcblxuZXhwb3J0IHtkZWZhdWx0LCBoaWRlQWxsfSBmcm9tICcuLi9zcmMnO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0ZVNpbmdsZXRvbn0gZnJvbSAnLi4vc3JjL2FkZG9ucy9jcmVhdGVTaW5nbGV0b24nO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGRlbGVnYXRlfSBmcm9tICcuLi9zcmMvYWRkb25zL2RlbGVnYXRlJztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhbmltYXRlRmlsbH0gZnJvbSAnLi4vc3JjL3BsdWdpbnMvYW5pbWF0ZUZpbGwnO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvbGxvd0N1cnNvcn0gZnJvbSAnLi4vc3JjL3BsdWdpbnMvZm9sbG93Q3Vyc29yJztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbmxpbmVQb3NpdGlvbmluZ30gZnJvbSAnLi4vc3JjL3BsdWdpbnMvaW5saW5lUG9zaXRpb25pbmcnO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0aWNreX0gZnJvbSAnLi4vc3JjL3BsdWdpbnMvc3RpY2t5JztcbmV4cG9ydCB7Uk9VTkRfQVJST1cgYXMgcm91bmRBcnJvd30gZnJvbSAnLi4vc3JjL2NvbnN0YW50cyc7XG4iXSwKICAi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QztRQUN4Qi9ELE1BQU07UUFDTkgsS0FBSztRQUNMbUUsUUFBUTtNQUpGO01BTVJDLE9BQU87UUFDTEosVUFBVTtNQURMO01BR1ByRCxXQUFXLENBQUE7SUFWUztBQWF0QnFDLFdBQU9RLE9BQU9ULE1BQU1HLFNBQVN4QyxPQUFPMkMsT0FBT1UsY0FBY3JELE1BQXpEO0FBQ0FxQyxVQUFNTyxTQUFTUztBQUVmLFFBQUloQixNQUFNRyxTQUFTa0IsT0FBTztBQUN4QnBCLGFBQU9RLE9BQU9ULE1BQU1HLFNBQVNrQixNQUFNZixPQUFPVSxjQUFjSyxLQUF4RDtJQUNEO0VBSUY7QUF6QndFLENBQUE7QU1oQjNFekUsTUFBTW1vQixnQkFBZ0I7RUFBQ047QUFBRCxDQUF0Qjs7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZm4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm5hdmlnYXRvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZm4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibWF4IiwgIm1pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZm4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2V0IiwgImZuIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNldCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtYXgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2V0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNldCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJUaXBweV9leHBvcnRzIiwgIl9fZXhwb3J0IiwgInRpcHB5IiwgInRpcHB5X2VzbV9kZWZhdWx0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJ0b3AiLCAiYm90dG9tIiwgInJpZ2h0IiwgImxlZnQiLCAiYXV0byIsICJiYXNlUGxhY2VtZW50cyIsICJzdGFydCIsICJlbmQiLCAiY2xpcHBpbmdQYXJlbnRzIiwgInZpZXdwb3J0IiwgInBvcHBlciIsICJyZWZlcmVuY2UiLCAidmFyaWF0aW9uUGxhY2VtZW50cyIsICJyZWR1Y2UiLCAiYWNjIiwgInBsYWNlbWVudCIsICJjb25jYXQiLCAicGxhY2VtZW50cyIsICJiZWZvcmVSZWFkIiwgInJlYWQiLCAiYWZ0ZXJSZWFkIiwgImJlZm9yZU1haW4iLCAibWFpbiIsICJhZnRlck1haW4iLCAiYmVmb3JlV3JpdGUiLCAid3JpdGUiLCAiYWZ0ZXJXcml0ZSIsICJtb2RpZmllclBoYXNlcyIsICJnZXROb2RlTmFtZSIsICJlbGVtZW50IiwgIm5vZGVOYW1lIiwgInRvTG93ZXJDYXNlIiwgImdldFdpbmRvdyIsICJub2RlIiwgIndpbmRvdyIsICJ0b1N0cmluZyIsICJvd25lckRvY3VtZW50IiwgImRlZmF1bHRWaWV3IiwgImlzRWxlbWVudCIsICJPd25FbGVtZW50IiwgIkVsZW1lbnQiLCAiaXNIVE1MRWxlbWVudCIsICJIVE1MRWxlbWVudCIsICJpc1NoYWRvd1Jvb3QiLCAiU2hhZG93Um9vdCIsICJhcHBseVN0eWxlcyIsICJfcmVmIiwgInN0YXRlIiwgIk9iamVjdCIsICJrZXlzIiwgImVsZW1lbnRzIiwgImZvckVhY2giLCAibmFtZSIsICJzdHlsZSIsICJzdHlsZXMiLCAiYXR0cmlidXRlcyIsICJhc3NpZ24iLCAibmFtZTIiLCAidmFsdWUiLCAicmVtb3ZlQXR0cmlidXRlIiwgInNldEF0dHJpYnV0ZSIsICJlZmZlY3QiLCAiX3JlZjIiLCAiaW5pdGlhbFN0eWxlcyIsICJwb3NpdGlvbiIsICJvcHRpb25zIiwgInN0cmF0ZWd5IiwgIm1hcmdpbiIsICJhcnJvdyIsICJzdHlsZVByb3BlcnRpZXMiLCAiaGFzT3duUHJvcGVydHkiLCAic3R5bGUyIiwgInByb3BlcnR5IiwgImF0dHJpYnV0ZSIsICJhcHBseVN0eWxlc19kZWZhdWx0IiwgImVuYWJsZWQiLCAicGhhc2UiLCAiZm4iLCAicmVxdWlyZXMiLCAiZ2V0QmFzZVBsYWNlbWVudCIsICJzcGxpdCIsICJtYXgiLCAiTWF0aCIsICJtaW4iLCAicm91bmQiLCAiZ2V0VUFTdHJpbmciLCAidWFEYXRhIiwgIm5hdmlnYXRvciIsICJ1c2VyQWdlbnREYXRhIiwgImJyYW5kcyIsICJBcnJheSIsICJpc0FycmF5IiwgIm1hcCIsICJpdGVtIiwgImJyYW5kIiwgInZlcnNpb24iLCAiam9pbiIsICJ1c2VyQWdlbnQiLCAiaXNMYXlvdXRWaWV3cG9ydCIsICJ0ZXN0IiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJpbmNsdWRlU2NhbGUiLCAiaXNGaXhlZFN0cmF0ZWd5IiwgImNsaWVudFJlY3QiLCAic2NhbGVYIiwgInNjYWxlWSIsICJvZmZzZXRXaWR0aCIsICJ3aWR0aCIsICJvZmZzZXRIZWlnaHQiLCAiaGVpZ2h0IiwgInZpc3VhbFZpZXdwb3J0IiwgImFkZFZpc3VhbE9mZnNldHMiLCAieCIsICJvZmZzZXRMZWZ0IiwgInkiLCAib2Zmc2V0VG9wIiwgImdldExheW91dFJlY3QiLCAiYWJzIiwgImNvbnRhaW5zIiwgInBhcmVudCIsICJjaGlsZCIsICJyb290Tm9kZSIsICJnZXRSb290Tm9kZSIsICJuZXh0IiwgImlzU2FtZU5vZGUiLCAicGFyZW50Tm9kZSIsICJob3N0IiwgImdldENvbXB1dGVkU3R5bGUiLCAiaXNUYWJsZUVsZW1lbnQiLCAiaW5kZXhPZiIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiZG9jdW1lbnRFbGVtZW50IiwgImdldFBhcmVudE5vZGUiLCAiYXNzaWduZWRTbG90IiwgImdldFRydWVPZmZzZXRQYXJlbnQiLCAib2Zmc2V0UGFyZW50IiwgImdldENvbnRhaW5pbmdCbG9jayIsICJpc0ZpcmVmb3giLCAiaXNJRSIsICJlbGVtZW50Q3NzIiwgImN1cnJlbnROb2RlIiwgImNzcyIsICJ0cmFuc2Zvcm0iLCAicGVyc3BlY3RpdmUiLCAiY29udGFpbiIsICJ3aWxsQ2hhbmdlIiwgImZpbHRlciIsICJnZXRPZmZzZXRQYXJlbnQiLCAid2luZG93MiIsICJnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQiLCAid2l0aGluIiwgIm1pbjIiLCAibWF4MiIsICJ3aXRoaW5NYXhDbGFtcCIsICJ2IiwgImdldEZyZXNoU2lkZU9iamVjdCIsICJtZXJnZVBhZGRpbmdPYmplY3QiLCAicGFkZGluZ09iamVjdCIsICJleHBhbmRUb0hhc2hNYXAiLCAiaGFzaE1hcCIsICJrZXkiLCAidG9QYWRkaW5nT2JqZWN0IiwgInRvUGFkZGluZ09iamVjdDIiLCAicGFkZGluZyIsICJyZWN0cyIsICJfc3RhdGUkbW9kaWZpZXJzRGF0YSQiLCAiYXJyb3dFbGVtZW50IiwgInBvcHBlck9mZnNldHMyIiwgIm1vZGlmaWVyc0RhdGEiLCAicG9wcGVyT2Zmc2V0cyIsICJiYXNlUGxhY2VtZW50IiwgImF4aXMiLCAiaXNWZXJ0aWNhbCIsICJsZW4iLCAiYXJyb3dSZWN0IiwgIm1pblByb3AiLCAibWF4UHJvcCIsICJlbmREaWZmIiwgInN0YXJ0RGlmZiIsICJhcnJvd09mZnNldFBhcmVudCIsICJjbGllbnRTaXplIiwgImNsaWVudEhlaWdodCIsICJjbGllbnRXaWR0aCIsICJjZW50ZXJUb1JlZmVyZW5jZSIsICJjZW50ZXIiLCAib2Zmc2V0MiIsICJheGlzUHJvcCIsICJjZW50ZXJPZmZzZXQiLCAiZWZmZWN0MiIsICJfb3B0aW9ucyRlbGVtZW50IiwgInF1ZXJ5U2VsZWN0b3IiLCAiYXJyb3dfZGVmYXVsdCIsICJyZXF1aXJlc0lmRXhpc3RzIiwgImdldFZhcmlhdGlvbiIsICJ1bnNldFNpZGVzIiwgInJvdW5kT2Zmc2V0c0J5RFBSIiwgIndpbiIsICJkcHIiLCAiZGV2aWNlUGl4ZWxSYXRpbyIsICJtYXBUb1N0eWxlcyIsICJfT2JqZWN0JGFzc2lnbjIiLCAicG9wcGVyMiIsICJwb3BwZXJSZWN0IiwgInZhcmlhdGlvbiIsICJvZmZzZXRzIiwgImdwdUFjY2VsZXJhdGlvbiIsICJhZGFwdGl2ZSIsICJyb3VuZE9mZnNldHMiLCAiaXNGaXhlZCIsICJfb2Zmc2V0cyR4IiwgIl9vZmZzZXRzJHkiLCAiX3JlZjMiLCAiaGFzWCIsICJoYXNZIiwgInNpZGVYIiwgInNpZGVZIiwgImhlaWdodFByb3AiLCAid2lkdGhQcm9wIiwgIm9mZnNldFkiLCAib2Zmc2V0WCIsICJjb21tb25TdHlsZXMiLCAiX3JlZjQiLCAiX09iamVjdCRhc3NpZ24iLCAiY29tcHV0ZVN0eWxlcyIsICJfcmVmNSIsICJfb3B0aW9ucyRncHVBY2NlbGVyYXQiLCAiX29wdGlvbnMkYWRhcHRpdmUiLCAiX29wdGlvbnMkcm91bmRPZmZzZXRzIiwgImNvbXB1dGVTdHlsZXNfZGVmYXVsdCIsICJkYXRhIiwgInBhc3NpdmUiLCAiZWZmZWN0MyIsICJpbnN0YW5jZSIsICJfb3B0aW9ucyRzY3JvbGwiLCAic2Nyb2xsIiwgIl9vcHRpb25zJHJlc2l6ZSIsICJyZXNpemUiLCAic2Nyb2xsUGFyZW50cyIsICJzY3JvbGxQYXJlbnQiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJ1cGRhdGUiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJldmVudExpc3RlbmVyc19kZWZhdWx0IiwgImhhc2giLCAiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCAicmVwbGFjZSIsICJtYXRjaGVkIiwgImhhc2gyIiwgImdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IiwgImdldFdpbmRvd1Njcm9sbCIsICJzY3JvbGxMZWZ0IiwgInBhZ2VYT2Zmc2V0IiwgInNjcm9sbFRvcCIsICJwYWdlWU9mZnNldCIsICJnZXRXaW5kb3dTY3JvbGxCYXJYIiwgImdldFZpZXdwb3J0UmVjdCIsICJodG1sIiwgImxheW91dFZpZXdwb3J0IiwgImdldERvY3VtZW50UmVjdCIsICJfZWxlbWVudCRvd25lckRvY3VtZW4iLCAid2luU2Nyb2xsIiwgImJvZHkiLCAic2Nyb2xsV2lkdGgiLCAic2Nyb2xsSGVpZ2h0IiwgImRpcmVjdGlvbiIsICJpc1Njcm9sbFBhcmVudCIsICJfZ2V0Q29tcHV0ZWRTdHlsZSIsICJvdmVyZmxvdyIsICJvdmVyZmxvd1giLCAib3ZlcmZsb3dZIiwgImdldFNjcm9sbFBhcmVudCIsICJsaXN0U2Nyb2xsUGFyZW50cyIsICJsaXN0IiwgImlzQm9keSIsICJ0YXJnZXQiLCAidXBkYXRlZExpc3QiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJyZWN0IiwgImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwgImNsaWVudFRvcCIsICJjbGllbnRMZWZ0IiwgImdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlIiwgImNsaXBwaW5nUGFyZW50IiwgImdldENsaXBwaW5nUGFyZW50cyIsICJjbGlwcGluZ1BhcmVudHMyIiwgImNhbkVzY2FwZUNsaXBwaW5nIiwgImNsaXBwZXJFbGVtZW50IiwgImdldENsaXBwaW5nUmVjdCIsICJib3VuZGFyeSIsICJyb290Qm91bmRhcnkiLCAibWFpbkNsaXBwaW5nUGFyZW50cyIsICJmaXJzdENsaXBwaW5nUGFyZW50IiwgImNsaXBwaW5nUmVjdCIsICJhY2NSZWN0IiwgImNvbXB1dGVPZmZzZXRzIiwgInJlZmVyZW5jZTIiLCAiY29tbW9uWCIsICJjb21tb25ZIiwgIm1haW5BeGlzIiwgImRldGVjdE92ZXJmbG93IiwgIl9vcHRpb25zIiwgIl9vcHRpb25zJHBsYWNlbWVudCIsICJfb3B0aW9ucyRzdHJhdGVneSIsICJfb3B0aW9ucyRib3VuZGFyeSIsICJfb3B0aW9ucyRyb290Qm91bmRhcnkiLCAiX29wdGlvbnMkZWxlbWVudENvbnRlIiwgImVsZW1lbnRDb250ZXh0IiwgIl9vcHRpb25zJGFsdEJvdW5kYXJ5IiwgImFsdEJvdW5kYXJ5IiwgIl9vcHRpb25zJHBhZGRpbmciLCAiYWx0Q29udGV4dCIsICJjbGlwcGluZ0NsaWVudFJlY3QiLCAiY29udGV4dEVsZW1lbnQiLCAicmVmZXJlbmNlQ2xpZW50UmVjdCIsICJwb3BwZXJDbGllbnRSZWN0IiwgImVsZW1lbnRDbGllbnRSZWN0IiwgIm92ZXJmbG93T2Zmc2V0cyIsICJvZmZzZXREYXRhIiwgIm9mZnNldCIsICJtdWx0aXBseSIsICJjb21wdXRlQXV0b1BsYWNlbWVudCIsICJmbGlwVmFyaWF0aW9ucyIsICJfb3B0aW9ucyRhbGxvd2VkQXV0b1AiLCAiYWxsb3dlZEF1dG9QbGFjZW1lbnRzIiwgInBsYWNlbWVudHMyIiwgInBsYWNlbWVudDIiLCAiYWxsb3dlZFBsYWNlbWVudHMiLCAibGVuZ3RoIiwgIm92ZXJmbG93cyIsICJzb3J0IiwgImEiLCAiYiIsICJnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyIsICJvcHBvc2l0ZVBsYWNlbWVudCIsICJmbGlwIiwgIl9za2lwIiwgIl9vcHRpb25zJG1haW5BeGlzIiwgImNoZWNrTWFpbkF4aXMiLCAiX29wdGlvbnMkYWx0QXhpcyIsICJhbHRBeGlzIiwgImNoZWNrQWx0QXhpcyIsICJzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMiLCAiZmFsbGJhY2tQbGFjZW1lbnRzIiwgIl9vcHRpb25zJGZsaXBWYXJpYXRpbyIsICJwcmVmZXJyZWRQbGFjZW1lbnQiLCAiaXNCYXNlUGxhY2VtZW50IiwgInJlZmVyZW5jZVJlY3QiLCAiY2hlY2tzTWFwIiwgIk1hcCIsICJtYWtlRmFsbGJhY2tDaGVja3MiLCAiZmlyc3RGaXR0aW5nUGxhY2VtZW50IiwgImkiLCAiX2Jhc2VQbGFjZW1lbnQiLCAiaXNTdGFydFZhcmlhdGlvbiIsICJtYWluVmFyaWF0aW9uU2lkZSIsICJhbHRWYXJpYXRpb25TaWRlIiwgImNoZWNrcyIsICJwdXNoIiwgImV2ZXJ5IiwgImNoZWNrIiwgInNldCIsICJudW1iZXJPZkNoZWNrcyIsICJfbG9vcCIsICJfbG9vcDIiLCAiX2kyIiwgImZpdHRpbmdQbGFjZW1lbnQiLCAiZmluZCIsICJjaGVja3MyIiwgImdldCIsICJzbGljZSIsICJfaSIsICJfcmV0IiwgInJlc2V0IiwgImZsaXBfZGVmYXVsdCIsICJnZXRTaWRlT2Zmc2V0cyIsICJwcmV2ZW50ZWRPZmZzZXRzIiwgImlzQW55U2lkZUZ1bGx5Q2xpcHBlZCIsICJzb21lIiwgInNpZGUiLCAiaGlkZSIsICJwcmV2ZW50T3ZlcmZsb3ciLCAicmVmZXJlbmNlT3ZlcmZsb3ciLCAicG9wcGVyQWx0T3ZlcmZsb3ciLCAicmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzIiwgInBvcHBlckVzY2FwZU9mZnNldHMiLCAiaXNSZWZlcmVuY2VIaWRkZW4iLCAiaGFzUG9wcGVyRXNjYXBlZCIsICJoaWRlX2RlZmF1bHQiLCAiZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkiLCAiaW52ZXJ0RGlzdGFuY2UiLCAic2tpZGRpbmciLCAiZGlzdGFuY2UiLCAiX29wdGlvbnMkb2Zmc2V0IiwgIl9kYXRhJHN0YXRlJHBsYWNlbWVudCIsICJvZmZzZXRfZGVmYXVsdCIsICJwb3BwZXJPZmZzZXRzX2RlZmF1bHQiLCAiZ2V0QWx0QXhpcyIsICJfb3B0aW9ucyR0ZXRoZXIiLCAidGV0aGVyIiwgIl9vcHRpb25zJHRldGhlck9mZnNldCIsICJ0ZXRoZXJPZmZzZXQiLCAidGV0aGVyT2Zmc2V0VmFsdWUiLCAibm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlIiwgIm9mZnNldE1vZGlmaWVyU3RhdGUiLCAiX29mZnNldE1vZGlmaWVyU3RhdGUkIiwgIm1haW5TaWRlIiwgImFsdFNpZGUiLCAiYWRkaXRpdmUiLCAibWluTGVuIiwgIm1heExlbiIsICJhcnJvd1BhZGRpbmdPYmplY3QiLCAiYXJyb3dQYWRkaW5nTWluIiwgImFycm93UGFkZGluZ01heCIsICJhcnJvd0xlbiIsICJtaW5PZmZzZXQiLCAibWF4T2Zmc2V0IiwgImNsaWVudE9mZnNldCIsICJvZmZzZXRNb2RpZmllclZhbHVlIiwgInRldGhlck1pbiIsICJ0ZXRoZXJNYXgiLCAicHJldmVudGVkT2Zmc2V0IiwgIl9vZmZzZXRNb2RpZmllclN0YXRlJDIiLCAiX21haW5TaWRlIiwgIl9hbHRTaWRlIiwgIl9vZmZzZXQiLCAiX2xlbiIsICJfbWluIiwgIl9tYXgiLCAiaXNPcmlnaW5TaWRlIiwgIl9vZmZzZXRNb2RpZmllclZhbHVlIiwgIl90ZXRoZXJNaW4iLCAiX3RldGhlck1heCIsICJfcHJldmVudGVkT2Zmc2V0IiwgInByZXZlbnRPdmVyZmxvd19kZWZhdWx0IiwgImdldEhUTUxFbGVtZW50U2Nyb2xsIiwgImdldE5vZGVTY3JvbGwiLCAiaXNFbGVtZW50U2NhbGVkIiwgImdldENvbXBvc2l0ZVJlY3QiLCAiZWxlbWVudE9yVmlydHVhbEVsZW1lbnQiLCAiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCAib2Zmc2V0UGFyZW50SXNTY2FsZWQiLCAib3JkZXIiLCAibW9kaWZpZXJzIiwgInZpc2l0ZWQiLCAiU2V0IiwgInJlc3VsdCIsICJtb2RpZmllciIsICJhZGQiLCAiZGVwIiwgImhhcyIsICJkZXBNb2RpZmllciIsICJvcmRlck1vZGlmaWVycyIsICJvcmRlcmVkTW9kaWZpZXJzIiwgImRlYm91bmNlIiwgImZuMiIsICJwZW5kaW5nIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJ0aGVuIiwgIm1lcmdlQnlOYW1lIiwgIm1lcmdlZCIsICJtZXJnZWQyIiwgImN1cnJlbnQiLCAiZXhpc3RpbmciLCAiREVGQVVMVF9PUFRJT05TIiwgImFyZVZhbGlkRWxlbWVudHMiLCAiYXJndW1lbnRzIiwgImFyZ3MiLCAiX2tleSIsICJwb3BwZXJHZW5lcmF0b3IiLCAiZ2VuZXJhdG9yT3B0aW9ucyIsICJfZ2VuZXJhdG9yT3B0aW9ucyIsICJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYiLCAiZGVmYXVsdE1vZGlmaWVycyIsICJkZWZhdWx0TW9kaWZpZXJzMiIsICJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyIiwgImRlZmF1bHRPcHRpb25zIiwgImNyZWF0ZVBvcHBlcjIiLCAiZWZmZWN0Q2xlYW51cEZucyIsICJpc0Rlc3Ryb3llZCIsICJzZXRPcHRpb25zIiwgInNldE9wdGlvbnNBY3Rpb24iLCAib3B0aW9uczIiLCAiY2xlYW51cE1vZGlmaWVyRWZmZWN0cyIsICJtIiwgInJ1bk1vZGlmaWVyRWZmZWN0cyIsICJmb3JjZVVwZGF0ZSIsICJfc3RhdGUkZWxlbWVudHMiLCAicmVmZXJlbmNlMyIsICJwb3BwZXIzIiwgImluZGV4IiwgIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZSIsICJfc3RhdGUkb3JkZXJlZE1vZGlmaWUyIiwgImRlc3Ryb3kiLCAic3RhdGUyIiwgIm9uRmlyc3RVcGRhdGUiLCAiX3JlZiRvcHRpb25zIiwgImVmZmVjdDUiLCAiY2xlYW51cEZuIiwgIm5vb3BGbiIsICJub29wRm4yIiwgImNyZWF0ZVBvcHBlciIsICJCT1hfQ0xBU1MiLCAiQ09OVEVOVF9DTEFTUyIsICJCQUNLRFJPUF9DTEFTUyIsICJBUlJPV19DTEFTUyIsICJTVkdfQVJST1dfQ0xBU1MiLCAiVE9VQ0hfT1BUSU9OUyIsICJjYXB0dXJlIiwgIlRJUFBZX0RFRkFVTFRfQVBQRU5EX1RPIiwgIlRJUFBZX0RFRkFVTFRfQVBQRU5EX1RPMiIsICJnZXRWYWx1ZUF0SW5kZXhPclJldHVybiIsICJkZWZhdWx0VmFsdWUiLCAiaXNUeXBlIiwgInR5cGUiLCAic3RyIiwgImNhbGwiLCAiaW52b2tlV2l0aEFyZ3NPclJldHVybiIsICJhcHBseSIsICJkZWJvdW5jZTIiLCAibXMiLCAidGltZW91dCIsICJhcmciLCAiY2xlYXJUaW1lb3V0IiwgInNldFRpbWVvdXQiLCAic3BsaXRCeVNwYWNlcyIsICJCb29sZWFuIiwgIm5vcm1hbGl6ZVRvQXJyYXkiLCAicHVzaElmVW5pcXVlIiwgImFyciIsICJ1bmlxdWUiLCAiZ2V0QmFzZVBsYWNlbWVudDIiLCAiYXJyYXlGcm9tIiwgInJlbW92ZVVuZGVmaW5lZFByb3BzIiwgIm9iaiIsICJkaXYiLCAiY3JlYXRlRWxlbWVudCIsICJpc0VsZW1lbnQyIiwgImlzTm9kZUxpc3QiLCAiaXNNb3VzZUV2ZW50IiwgImlzUmVmZXJlbmNlRWxlbWVudCIsICJfdGlwcHkiLCAiZ2V0QXJyYXlPZkVsZW1lbnRzIiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAic2V0VHJhbnNpdGlvbkR1cmF0aW9uIiwgImVscyIsICJlbCIsICJ0cmFuc2l0aW9uRHVyYXRpb24iLCAic2V0VmlzaWJpbGl0eVN0YXRlIiwgImdldE93bmVyRG9jdW1lbnQiLCAiZWxlbWVudE9yRWxlbWVudHMiLCAiX25vcm1hbGl6ZVRvQXJyYXkiLCAiaXNDdXJzb3JPdXRzaWRlSW50ZXJhY3RpdmVCb3JkZXIiLCAicG9wcGVyVHJlZURhdGEiLCAiZXZlbnQiLCAiY2xpZW50WCIsICJjbGllbnRZIiwgInBvcHBlclN0YXRlIiwgInByb3BzIiwgImludGVyYWN0aXZlQm9yZGVyIiwgInRvcERpc3RhbmNlIiwgImJvdHRvbURpc3RhbmNlIiwgImxlZnREaXN0YW5jZSIsICJyaWdodERpc3RhbmNlIiwgImV4Y2VlZHNUb3AiLCAiZXhjZWVkc0JvdHRvbSIsICJleGNlZWRzTGVmdCIsICJleGNlZWRzUmlnaHQiLCAidXBkYXRlVHJhbnNpdGlvbkVuZExpc3RlbmVyIiwgImJveCIsICJhY3Rpb24iLCAibGlzdGVuZXIiLCAibWV0aG9kIiwgImFjdHVhbENvbnRhaW5zIiwgIl90YXJnZXQkZ2V0Um9vdE5vZGUiLCAiY3VycmVudElucHV0IiwgImlzVG91Y2giLCAibGFzdE1vdXNlTW92ZVRpbWUiLCAib25Eb2N1bWVudFRvdWNoU3RhcnQiLCAicGVyZm9ybWFuY2UiLCAib25Eb2N1bWVudE1vdXNlTW92ZSIsICJub3ciLCAib25XaW5kb3dCbHVyIiwgImFjdGl2ZUVsZW1lbnQiLCAiYmx1ciIsICJpc1Zpc2libGUiLCAiYmluZEdsb2JhbEV2ZW50TGlzdGVuZXJzIiwgImlzQnJvd3NlciIsICJpc0lFMTEiLCAibXNDcnlwdG8iLCAicmVzZXRWaXNpdGVkTWVzc2FnZXMiLCAicGx1Z2luUHJvcHMiLCAiYW5pbWF0ZUZpbGwiLCAiZm9sbG93Q3Vyc29yIiwgImlubGluZVBvc2l0aW9uaW5nIiwgInN0aWNreSIsICJyZW5kZXJQcm9wcyIsICJhbGxvd0hUTUwiLCAiYW5pbWF0aW9uIiwgImNvbnRlbnQiLCAiaW5lcnRpYSIsICJtYXhXaWR0aCIsICJyb2xlIiwgInRoZW1lIiwgInpJbmRleCIsICJkZWZhdWx0UHJvcHMiLCAiYXBwZW5kVG8iLCAiYXJpYSIsICJleHBhbmRlZCIsICJkZWxheSIsICJkdXJhdGlvbiIsICJnZXRSZWZlcmVuY2VDbGllbnRSZWN0IiwgImhpZGVPbkNsaWNrIiwgImlnbm9yZUF0dHJpYnV0ZXMiLCAiaW50ZXJhY3RpdmUiLCAiaW50ZXJhY3RpdmVEZWJvdW5jZSIsICJtb3ZlVHJhbnNpdGlvbiIsICJvbkFmdGVyVXBkYXRlIiwgIm9uQmVmb3JlVXBkYXRlIiwgIm9uQ3JlYXRlIiwgIm9uRGVzdHJveSIsICJvbkhpZGRlbiIsICJvbkhpZGUiLCAib25Nb3VudCIsICJvblNob3ciLCAib25TaG93biIsICJvblRyaWdnZXIiLCAib25VbnRyaWdnZXIiLCAib25DbGlja091dHNpZGUiLCAicGx1Z2lucyIsICJwb3BwZXJPcHRpb25zIiwgInJlbmRlciIsICJzaG93T25DcmVhdGUiLCAidG91Y2giLCAidHJpZ2dlciIsICJ0cmlnZ2VyVGFyZ2V0IiwgImRlZmF1bHRLZXlzIiwgInNldERlZmF1bHRQcm9wcyIsICJzZXREZWZhdWx0UHJvcHMyIiwgInBhcnRpYWxQcm9wcyIsICJ2YWxpZGF0ZVByb3BzIiwgImdldEV4dGVuZGVkUGFzc2VkUHJvcHMiLCAicGFzc2VkUHJvcHMiLCAicGx1Z2luUHJvcHMyIiwgInBsdWdpbiIsICJfbmFtZSIsICJnZXREYXRhQXR0cmlidXRlUHJvcHMiLCAicHJvcEtleXMiLCAidmFsdWVBc1N0cmluZyIsICJnZXRBdHRyaWJ1dGUiLCAidHJpbSIsICJKU09OIiwgInBhcnNlIiwgImUiLCAiZXZhbHVhdGVQcm9wcyIsICJvdXQiLCAiaW5uZXJIVE1MIiwgImlubmVySFRNTDIiLCAiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCAiY3JlYXRlQXJyb3dFbGVtZW50IiwgImFycm93MiIsICJjbGFzc05hbWUiLCAiYXBwZW5kQ2hpbGQiLCAic2V0Q29udGVudCIsICJ0ZXh0Q29udGVudCIsICJnZXRDaGlsZHJlbiIsICJmaXJzdEVsZW1lbnRDaGlsZCIsICJib3hDaGlsZHJlbiIsICJjaGlsZHJlbiIsICJjbGFzc0xpc3QiLCAiYmFja2Ryb3AiLCAib25VcGRhdGUiLCAicHJldlByb3BzIiwgIm5leHRQcm9wcyIsICJfZ2V0Q2hpbGRyZW4iLCAiYm94MiIsICJjb250ZW50MiIsICJyZW1vdmVDaGlsZCIsICIkJHRpcHB5IiwgImlkQ291bnRlciIsICJtb3VzZU1vdmVMaXN0ZW5lcnMiLCAibW91bnRlZEluc3RhbmNlcyIsICJjcmVhdGVUaXBweSIsICJzaG93VGltZW91dCIsICJoaWRlVGltZW91dCIsICJzY2hlZHVsZUhpZGVBbmltYXRpb25GcmFtZSIsICJpc1Zpc2libGVGcm9tQ2xpY2siLCAiZGlkSGlkZUR1ZVRvRG9jdW1lbnRNb3VzZURvd24iLCAiZGlkVG91Y2hNb3ZlIiwgImlnbm9yZU9uRmlyc3RVcGRhdGUiLCAibGFzdFRyaWdnZXJFdmVudCIsICJjdXJyZW50VHJhbnNpdGlvbkVuZExpc3RlbmVyIiwgImxpc3RlbmVycyIsICJkZWJvdW5jZWRPbk1vdXNlTW92ZSIsICJvbk1vdXNlTW92ZSIsICJjdXJyZW50VGFyZ2V0IiwgImlkIiwgInBvcHBlckluc3RhbmNlIiwgImlzRW5hYmxlZCIsICJpc01vdW50ZWQiLCAiaXNTaG93biIsICJjbGVhckRlbGF5VGltZW91dHMiLCAic2V0UHJvcHMiLCAic2V0Q29udGVudDIiLCAic2hvdyIsICJoaWRlMiIsICJoaWRlV2l0aEludGVyYWN0aXZpdHkiLCAiZW5hYmxlIiwgImRpc2FibGUiLCAidW5tb3VudCIsICJlcnJvcldoZW4iLCAiX3Byb3BzJHJlbmRlciIsICJwbHVnaW5zSG9va3MiLCAiaGFzQXJpYUV4cGFuZGVkIiwgImhhc0F0dHJpYnV0ZSIsICJhZGRMaXN0ZW5lcnMiLCAiaGFuZGxlQXJpYUV4cGFuZGVkQXR0cmlidXRlIiwgImhhbmRsZVN0eWxlcyIsICJpbnZva2VIb29rIiwgInNjaGVkdWxlU2hvdyIsICJnZXREb2N1bWVudCIsICJnZXROb3JtYWxpemVkVG91Y2hTZXR0aW5ncyIsICJnZXRJc0N1c3RvbVRvdWNoQmVoYXZpb3IiLCAiZ2V0SXNEZWZhdWx0UmVuZGVyRm4iLCAiX2luc3RhbmNlJHByb3BzJHJlbmRlIiwgImdldEN1cnJlbnRUYXJnZXQiLCAiZ2V0RGVmYXVsdFRlbXBsYXRlQ2hpbGRyZW4iLCAiZ2V0RGVsYXkiLCAiaXNTaG93IiwgImZyb21IaWRlIiwgInBvaW50ZXJFdmVudHMiLCAiaG9vayIsICJzaG91bGRJbnZva2VQcm9wc0hvb2siLCAicGx1Z2luSG9va3MiLCAiX2luc3RhbmNlJHByb3BzIiwgImhhbmRsZUFyaWFDb250ZW50QXR0cmlidXRlIiwgImF0dHIiLCAiaWQyIiwgIm5vZGVzIiwgImN1cnJlbnRWYWx1ZSIsICJuZXh0VmFsdWUiLCAiY2xlYW51cEludGVyYWN0aXZlTW91c2VMaXN0ZW5lcnMiLCAib25Eb2N1bWVudFByZXNzIiwgImFjdHVhbFRhcmdldCIsICJjb21wb3NlZFBhdGgiLCAicmVtb3ZlRG9jdW1lbnRQcmVzcyIsICJvblRvdWNoTW92ZSIsICJvblRvdWNoU3RhcnQiLCAiYWRkRG9jdW1lbnRQcmVzcyIsICJkb2MiLCAib25UcmFuc2l0aW9uZWRPdXQiLCAiY2FsbGJhY2siLCAib25UcmFuc2l0aW9uRW5kIiwgIm9uVHJhbnNpdGlvbmVkSW4iLCAib24iLCAiZXZlbnRUeXBlIiwgImhhbmRsZXIiLCAib25UcmlnZ2VyMiIsICJvbk1vdXNlTGVhdmUiLCAib25CbHVyT3JGb2N1c091dCIsICJyZW1vdmVMaXN0ZW5lcnMiLCAiX2xhc3RUcmlnZ2VyRXZlbnQiLCAic2hvdWxkU2NoZWR1bGVDbGlja0hpZGUiLCAiaXNFdmVudExpc3RlbmVyU3RvcHBlZCIsICJ3YXNGb2N1c2VkIiwgInNjaGVkdWxlSGlkZSIsICJpc0N1cnNvck92ZXJSZWZlcmVuY2VPclBvcHBlciIsICJnZXROZXN0ZWRQb3BwZXJUcmVlIiwgIl9pbnN0YW5jZSRwb3BwZXJJbnN0YSIsICJpbnN0YW5jZTIiLCAic2hvdWxkQmFpbCIsICJyZWxhdGVkVGFyZ2V0IiwgImNyZWF0ZVBvcHBlckluc3RhbmNlIiwgImRlc3Ryb3lQb3BwZXJJbnN0YW5jZSIsICJfaW5zdGFuY2UkcHJvcHMyIiwgImNvbXB1dGVkUmVmZXJlbmNlIiwgInRpcHB5TW9kaWZpZXIiLCAiX2dldERlZmF1bHRUZW1wbGF0ZUNoIiwgIm1vdW50IiwgIndhcm5XaGVuIiwgIm5leHRFbGVtZW50U2libGluZyIsICJfZ2V0Tm9ybWFsaXplZFRvdWNoU2UiLCAidG91Y2hWYWx1ZSIsICJ0b3VjaERlbGF5IiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJjcmVhdGVNZW1vcnlMZWFrV2FybmluZyIsICJuZXN0ZWRQb3BwZXIiLCAiaXNBbHJlYWR5VmlzaWJsZSIsICJpc0Rpc2FibGVkIiwgImlzVG91Y2hBbmRUb3VjaERpc2FibGVkIiwgInZpc2liaWxpdHkiLCAidHJhbnNpdGlvbiIsICJfZ2V0RGVmYXVsdFRlbXBsYXRlQ2gyIiwgIm9uRmlyc3RVcGRhdGUyIiwgIl9pbnN0YW5jZSRwb3BwZXJJbnN0YTIiLCAiX2dldERlZmF1bHRUZW1wbGF0ZUNoMyIsICJfYm94IiwgIl9jb250ZW50IiwgImlzQWxyZWFkeUhpZGRlbiIsICJfZ2V0RGVmYXVsdFRlbXBsYXRlQ2g0IiwgInRhcmdldHMiLCAib3B0aW9uYWxQcm9wcyIsICJ2YWxpZGF0ZVRhcmdldHMiLCAiaXNTaW5nbGVDb250ZW50RWxlbWVudCIsICJpc01vcmVUaGFuT25lUmVmZXJlbmNlRWxlbWVudCIsICJpbnN0YW5jZXMiLCAiYXBwbHlTdHlsZXNNb2RpZmllciIsICJlZmZlY3Q0Il0KfQo= diff --git a/dist/ToolsRedirect/ToolsRedirect.js b/dist/ToolsRedirect/ToolsRedirect.js index aa262f81..dbbffadb 100644 --- a/dist/ToolsRedirect/ToolsRedirect.js +++ b/dist/ToolsRedirect/ToolsRedirect.js @@ -60,9 +60,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -76,9 +76,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -90,9 +90,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -103,9 +103,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -116,9 +116,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -128,9 +128,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -142,9 +142,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -157,9 +157,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -173,9 +173,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -186,9 +186,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -203,9 +203,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -213,9 +213,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -226,9 +226,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -238,9 +238,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -251,9 +251,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -262,9 +262,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -277,18 +277,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -297,9 +297,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -324,9 +324,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -340,18 +340,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -367,9 +367,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -382,9 +382,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -396,9 +396,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -409,9 +409,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -427,17 +427,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -452,9 +452,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -462,18 +462,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -482,9 +482,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -494,9 +494,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -507,9 +507,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -521,9 +521,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -543,9 +543,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -571,9 +571,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -584,9 +584,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -598,9 +598,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -615,9 +615,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -640,9 +640,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -656,9 +656,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -670,9 +670,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -716,9 +716,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -732,9 +732,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -752,9 +752,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -769,9 +769,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -780,9 +780,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -793,17 +793,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -876,9 +876,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -931,9 +931,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -966,9 +966,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -979,9 +979,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -991,9 +991,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -1005,9 +1005,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -1018,9 +1018,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -1029,9 +1029,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1064,9 +1064,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1088,9 +1088,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1104,9 +1104,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1117,17 +1117,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1143,9 +1143,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1165,9 +1165,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1186,9 +1186,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1229,9 +1229,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1240,9 +1240,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1267,9 +1267,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1280,9 +1280,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -1319,9 +1319,9 @@ var require_es_array_push = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js var require_set_helpers = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var SetPrototype = Set.prototype; @@ -1336,9 +1336,9 @@ var require_set_helpers = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js var require_a_set = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js"(exports, module2) { "use strict"; var has = require_set_helpers().has; module2.exports = function(it) { @@ -1348,9 +1348,9 @@ var require_a_set = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js var require_iterate_simple = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { "use strict"; var call = require_function_call(); module2.exports = function(record, fn, ITERATOR_INSTEAD_OF_RECORD) { @@ -1365,9 +1365,9 @@ var require_iterate_simple = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js var require_set_iterate = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var iterateSimple = require_iterate_simple(); @@ -1383,9 +1383,9 @@ var require_set_iterate = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js var require_set_clone = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js"(exports, module2) { "use strict"; var SetHelpers = require_set_helpers(); var iterate = require_set_iterate(); @@ -1401,9 +1401,9 @@ var require_set_clone = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js var require_function_uncurry_this_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var aCallable = require_a_callable(); @@ -1416,9 +1416,9 @@ var require_function_uncurry_this_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js var require_set_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js"(exports, module2) { "use strict"; var uncurryThisAccessor = require_function_uncurry_this_accessor(); var SetHelpers = require_set_helpers(); @@ -1428,9 +1428,9 @@ var require_set_size = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js var require_get_iterator_direct = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { "use strict"; module2.exports = function(obj) { return { @@ -1442,9 +1442,9 @@ var require_get_iterator_direct = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js var require_get_set_record = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var anObject = require_an_object(); @@ -1480,9 +1480,9 @@ var require_get_set_record = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js var require_set_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1508,9 +1508,9 @@ var require_set_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js var require_set_method_accept_set_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var createSetLike = function(size) { @@ -1545,9 +1545,9 @@ var require_set_method_accept_set_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js var require_es_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js"() { "use strict"; var $2 = require_export(); var difference = require_set_difference(); @@ -1558,17 +1558,9 @@ var require_es_set_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js -var require_esnext_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js"() { - "use strict"; - require_es_set_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js var require_set_intersection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1597,9 +1589,9 @@ var require_set_intersection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js var require_es_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js"() { "use strict"; var $2 = require_export(); var fails = require_fails(); @@ -1614,17 +1606,9 @@ var require_es_set_intersection_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js -var require_esnext_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js"() { - "use strict"; - require_es_set_intersection_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js var require_iterator_close = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js"(exports, module2) { "use strict"; var call = require_function_call(); var anObject = require_an_object(); @@ -1651,9 +1635,9 @@ var require_iterator_close = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js var require_set_is_disjoint_from = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1676,9 +1660,9 @@ var require_set_is_disjoint_from = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js var require_es_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { "use strict"; var $2 = require_export(); var isDisjointFrom = require_set_is_disjoint_from(); @@ -1689,17 +1673,9 @@ var require_es_set_is_disjoint_from_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js -var require_esnext_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"() { - "use strict"; - require_es_set_is_disjoint_from_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js var require_set_is_subset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var size = require_set_size(); @@ -1716,9 +1692,9 @@ var require_set_is_subset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js var require_es_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSubsetOf = require_set_is_subset_of(); @@ -1729,17 +1705,9 @@ var require_es_set_is_subset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js -var require_esnext_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"() { - "use strict"; - require_es_set_is_subset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js var require_set_is_superset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1759,9 +1727,9 @@ var require_set_is_superset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js var require_es_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSupersetOf = require_set_is_superset_of(); @@ -1772,17 +1740,9 @@ var require_es_set_is_superset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js -var require_esnext_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"() { - "use strict"; - require_es_set_is_superset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js var require_set_symmetric_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1805,9 +1765,9 @@ var require_set_symmetric_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js var require_es_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { "use strict"; var $2 = require_export(); var symmetricDifference = require_set_symmetric_difference(); @@ -1818,17 +1778,9 @@ var require_es_set_symmetric_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js -var require_esnext_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"() { - "use strict"; - require_es_set_symmetric_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js var require_set_union = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var add = require_set_helpers().add; @@ -1847,9 +1799,9 @@ var require_set_union = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js var require_es_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js"() { "use strict"; var $2 = require_export(); var union = require_set_union(); @@ -1860,23 +1812,15 @@ var require_es_set_union_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js -var require_esnext_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js"() { - "use strict"; - require_es_set_union_v2(); - } -}); - // dist/ToolsRedirect/ToolsRedirect.js require_es_array_push(); -require_esnext_set_difference_v2(); -require_esnext_set_intersection_v2(); -require_esnext_set_is_disjoint_from_v2(); -require_esnext_set_is_subset_of_v2(); -require_esnext_set_is_superset_of_v2(); -require_esnext_set_symmetric_difference_v2(); -require_esnext_set_union_v2(); +require_es_set_difference_v2(); +require_es_set_intersection_v2(); +require_es_set_is_disjoint_from_v2(); +require_es_set_is_subset_of_v2(); +require_es_set_is_superset_of_v2(); +require_es_set_symmetric_difference_v2(); +require_es_set_union_v2(); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { @@ -2786,4 +2730,4 @@ if (mw.user.options.get("gadget-ToolsRedirect-opt-bolds")) { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanMiLCAic3JjL1Rvb2xzUmVkaXJlY3QvbW9kdWxlcy9jb25zdGFudC50cyIsICJzcmMvVG9vbHNSZWRpcmVjdC9tb2R1bGVzL3V0aWwvZ2V0TWVzc2FnZXMudHMiLCAic3JjL1Rvb2xzUmVkaXJlY3QvbW9kdWxlcy9jb3JlLmpzIiwgInNyYy9Ub29sc1JlZGlyZWN0L21vZHVsZXMvbWVzc2FnZXMudHMiLCAic3JjL1Rvb2xzUmVkaXJlY3QvbW9kdWxlcy9iaW8tbGF0aW4tbmFtZXMudHMiLCAic3JjL1Rvb2xzUmVkaXJlY3QvbW9kdWxlcy9jb3VydGVzeS1hbmQtYXJ0LW5hbWVzLnRzIiwgInNyYy9Ub29sc1JlZGlyZWN0L21vZHVsZXMvb3B0LWJvbGRzLnRzIiwgInNyYy9Ub29sc1JlZGlyZWN0L1Rvb2xzUmVkaXJlY3QuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggPD0gMTIxIGFuZCBTYWZhcmkgPD0gMTUuNDsgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxuICBTZXQ6IFNldCxcbiAgYWRkOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuYWRkKSxcbiAgaGFzOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGVbJ2RlbGV0ZSddKSxcbiAgcHJvdG86IFNldFByb3RvdHlwZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xuXG4vLyBQZXJmb3JtID8gUmVxdWlyZUludGVybmFsU2xvdChNLCBbW1NldERhdGFdXSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGhhcyhpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWNvcmQsIGZuLCBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCkge1xuICB2YXIgaXRlcmF0b3IgPSBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCA/IHJlY29yZCA6IHJlY29yZC5pdGVyYXRvcjtcbiAgdmFyIG5leHQgPSByZWNvcmQubmV4dDtcbiAgdmFyIHN0ZXAsIHJlc3VsdDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gZm4oc3RlcC52YWx1ZSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgU2V0UHJvdG90eXBlID0gU2V0SGVscGVycy5wcm90bztcbnZhciBmb3JFYWNoID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmZvckVhY2gpO1xudmFyIGtleXMgPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUua2V5cyk7XG52YXIgbmV4dCA9IGtleXMobmV3IFNldCgpKS5uZXh0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQsIGZuLCBpbnRlcnJ1cHRpYmxlKSB7XG4gIHJldHVybiBpbnRlcnJ1cHRpYmxlID8gaXRlcmF0ZVNpbXBsZSh7IGl0ZXJhdG9yOiBrZXlzKHNldCksIG5leHQ6IG5leHQgfSwgZm4pIDogZm9yRWFjaChzZXQsIGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGl0ZXJhdGUoc2V0LCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihTZXRIZWxwZXJzLnByb3RvLCAnc2l6ZScsICdnZXQnKSB8fCBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbnZhciBJTlZBTElEX1NJWkUgPSAnSW52YWxpZCBzaXplJztcbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBtYXggPSBNYXRoLm1heDtcblxudmFyIFNldFJlY29yZCA9IGZ1bmN0aW9uIChzZXQsIGludFNpemUpIHtcbiAgdGhpcy5zZXQgPSBzZXQ7XG4gIHRoaXMuc2l6ZSA9IG1heChpbnRTaXplLCAwKTtcbiAgdGhpcy5oYXMgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gIHRoaXMua2V5cyA9IGFDYWxsYWJsZShzZXQua2V5cyk7XG59O1xuXG5TZXRSZWNvcmQucHJvdG90eXBlID0ge1xuICBnZXRJdGVyYXRvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJdGVyYXRvckRpcmVjdChhbk9iamVjdChjYWxsKHRoaXMua2V5cywgdGhpcy5zZXQpKSk7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gY2FsbCh0aGlzLmhhcywgdGhpcy5zZXQsIGl0KTtcbiAgfVxufTtcblxuLy8gYEdldFNldFJlY29yZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc2V0LW1ldGhvZHMvI3NlYy1nZXRzZXRyZWNvcmRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICBhbk9iamVjdChvYmopO1xuICB2YXIgbnVtU2l6ZSA9ICtvYmouc2l6ZTtcbiAgLy8gTk9URTogSWYgc2l6ZSBpcyB1bmRlZmluZWQsIHRoZW4gbnVtU2l6ZSB3aWxsIGJlIE5hTlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtU2l6ZSAhPT0gbnVtU2l6ZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgdmFyIGludFNpemUgPSB0b0ludGVnZXJPckluZmluaXR5KG51bVNpemUpO1xuICBpZiAoaW50U2l6ZSA8IDApIHRocm93IG5ldyAkUmFuZ2VFcnJvcihJTlZBTElEX1NJWkUpO1xuICByZXR1cm4gbmV3IFNldFJlY29yZChvYmosIGludFNpemUpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgZWxzZSBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxudmFyIGNyZWF0ZVNldExpa2UgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIHNpemU6IHNpemUsXG4gICAgaGFzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIFNldCA9IGdldEJ1aWx0SW4oJ1NldCcpO1xuICB0cnkge1xuICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKDApKTtcbiAgICB0cnkge1xuICAgICAgLy8gbGF0ZSBzcGVjIGNoYW5nZSwgZWFybHkgV2ViS2l0IH4gU2FmYXJpIDE3LjAgYmV0YSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwYXNzIGl0XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kcy9wdWxsLzg4XG4gICAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgtMSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yMikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2RpZmZlcmVuY2UnKSB9LCB7XG4gIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5kaWZmZXJlbmNlLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG5cbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSB7XG4gICAgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGhhcyhPLCBlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJzZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbnZhciBJTkNPUlJFQ1QgPSAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaW50ZXJzZWN0aW9uJykgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgZXMvbm8tc2V0IC0tIHRlc3RpbmdcbiAgcmV0dXJuIFN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsIDIsIDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywgMl0pKSkpICE9PSAnMywyJztcbn0pO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1QgfSwge1xuICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmludGVyc2VjdGlvbi52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEaXNqb2ludEZyb20ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSByZXR1cm4gaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzRGlzam9pbnRGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc0Rpc2pvaW50RnJvbScpIH0sIHtcbiAgaXNEaXNqb2ludEZyb206IGlzRGlzam9pbnRGcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3Vic2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdWJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXRlcmF0ZShPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghb3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1YnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdWJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdWJzZXRPZicpIH0sIHtcbiAgaXNTdWJzZXRPZjogaXNTdWJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmlzLXN1YnNldC1vZi52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdXBlcnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPCBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1cGVyc2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdXBlcnNldE9mJykgfSwge1xuICBpc1N1cGVyc2V0T2Y6IGlzU3VwZXJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICAgIGVsc2UgYWRkKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzeW1tZXRyaWNEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdzeW1tZXRyaWNEaWZmZXJlbmNlJykgfSwge1xuICBzeW1tZXRyaWNEaWZmZXJlbmNlOiBzeW1tZXRyaWNEaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGFkZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmFkZDtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuaW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC11bmlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgndW5pb24nKSB9LCB7XG4gIHVuaW9uOiB1bmlvblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyJyk7XG4iLCAiY29uc3QgV0dfTkFNRVNQQUNFX0lEUyA9IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlSWRzJyk7XG5jb25zdCBXR19OQU1FU1BBQ0VfTlVNQkVSOiBudW1iZXIgPSBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpO1xuY29uc3QgV0dfUEFHRV9OQU1FOiBzdHJpbmcgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5jb25zdCBXR19VU0VSX0xBTkdVQUdFOiBzdHJpbmcgPSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJMYW5ndWFnZScpO1xuXG5jb25zdCBJU19DQVRFR09SWSA9IFdHX05BTUVTUEFDRV9OVU1CRVIgPT09IDE0O1xuXG5jb25zdCBTVUZGSVhfQVBQRU5EID0gMDtcbmNvbnN0IFNVRkZJWF9SRVBMQUNFID0gMTtcbmNvbnN0IFNVRkZJWF9TRVRERUZBVUxUID0gMjtcblxuY29uc3QgRURJVF9UQUcgPSAnVG9vbHNSZWRpcmVjdCc7XG5cbmNvbnN0IFZBUklBTlRTID0gWyd6aC1oYW5zJywgJ3poLWhhbnQnLCAnemgtY24nLCAnemgtaGsnLCAnemgtbW8nLCAnemgtc2cnLCAnemgtbXknLCAnemgtdHcnXTtcblxuZXhwb3J0IHtcblx0RURJVF9UQUcsXG5cdElTX0NBVEVHT1JZLFxuXHRTVUZGSVhfQVBQRU5ELFxuXHRTVUZGSVhfUkVQTEFDRSxcblx0U1VGRklYX1NFVERFRkFVTFQsXG5cdFZBUklBTlRTLFxuXHRXR19OQU1FU1BBQ0VfSURTLFxuXHRXR19OQU1FU1BBQ0VfTlVNQkVSLFxuXHRXR19QQUdFX05BTUUsXG5cdFdHX1VTRVJfTEFOR1VBR0UsXG59O1xuIiwgImV4cG9ydCBjb25zdCBnZXRNZXNzYWdlID0gKGtleTogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSkgPT4ge1xuXHQvLyBNZXNzYWdlcyB0aGF0IGNhbiBiZSB1c2VkIGhlcmU6XG5cdC8vICogc2VlIG1lc3NhZ2VzLnRzXG5cdC8vICogZm9yIG1vcmUgaW5mb3JtYXRpb25cblx0a2V5ID0gYHRvb2xzcmVkaXJlY3QtJHtrZXl9YDtcblx0cmV0dXJuIGFyZ3MubGVuZ3RoID8gbXcubWVzc2FnZShrZXksIC4uLmFyZ3MpLnBhcnNlKCkgOiBtdy5tZXNzYWdlKGtleSkucGxhaW4oKTtcbn07XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7XG5cdEVESVRfVEFHLFxuXHRJU19DQVRFR09SWSxcblx0U1VGRklYX0FQUEVORCxcblx0U1VGRklYX1JFUExBQ0UsXG5cdFNVRkZJWF9TRVRERUZBVUxULFxuXHRWQVJJQU5UUyxcblx0V0dfTkFNRVNQQUNFX0lEUyxcblx0V0dfTkFNRVNQQUNFX05VTUJFUixcblx0V0dfUEFHRV9OQU1FLFxufSBmcm9tICcuL2NvbnN0YW50JztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi91dGlsL2dldE1lc3NhZ2VzJztcbmltcG9ydCB7aW5pdE13QXBpfSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBhcGkgPSBpbml0TXdBcGkoJ1Rvb2xzUmVkaXJlY3QvMi4wJyk7XG5cbmNvbnN0IGZpbmRSZWRpcmVjdENhbGxiYWNrcyA9IFtdO1xuY29uc3QgcGFnZVdpdGhSZWRpcmVjdFRleHRTdWZmaXggPSB7fTtcbmNvbnN0IHJlZGlyZWN0RXhjbHVkZXMgPSB7fTtcbmNvbnN0IG5zUHJlZml4ZXMgPSBbXTtcbmxldCBuc0Nhbm9uUHJlZml4LCBuc1ByZWZpeFBhdHRlcm47XG5cbmZvciAoY29uc3QgW3RleHQsIG5zaWRdIG9mIE9iamVjdC5lbnRyaWVzKFdHX05BTUVTUEFDRV9JRFMpKSB7XG5cdGlmIChuc2lkID09PSBXR19OQU1FU1BBQ0VfTlVNQkVSICYmICEhdGV4dCkge1xuXHRcdG5zUHJlZml4ZXMucHVzaCh0ZXh0KTtcblx0fVxufVxuXG5pZiAoV0dfTkFNRVNQQUNFX05VTUJFUiA9PT0gMCkge1xuXHQvLyBhcnRpY2xlc1xuXHRuc0Nhbm9uUHJlZml4ID0gJyc7XG5cdG5zUHJlZml4UGF0dGVybiA9IC9eLztcbn0gZWxzZSB7XG5cdG5zQ2Fub25QcmVmaXggPSBgJHtXR19QQUdFX05BTUUuc3BsaXQoJzonKVswXX06YDtcblx0bnNQcmVmaXhQYXR0ZXJuID0gbmV3IFJlZ0V4cChgXigke25zUHJlZml4ZXMuam9pbignfCcpfSk6YCwgJ2knKTtcbn1cblxuY29uc3QgZml4TmFtZXNwYWNlID0gKHRpdGxlKSA9PiB7XG5cdGlmIChXR19OQU1FU1BBQ0VfTlVNQkVSID09PSAwKSB7XG5cdFx0Ly8gZG8gbm90aGluZyBpZiBpdCdzIGFydGljbGVzXG5cdFx0cmV0dXJuIHRpdGxlO1xuXHR9IGVsc2UgaWYgKG5zUHJlZml4UGF0dGVybi50ZXN0KHRpdGxlKSkge1xuXHRcdC8vIGNhbm9uaXplIHRoZSBuYW1lc3BhY2Vcblx0XHRyZXR1cm4gdGl0bGUucmVwbGFjZShuc1ByZWZpeFBhdHRlcm4sIG5zQ2Fub25QcmVmaXgpO1xuXHR9XG5cdC8vIGRvbid0IGhhdmUgYSBuYW1lc3BhY2Vcblx0cmV0dXJuIG5zQ2Fub25QcmVmaXggKyB0aXRsZTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBjdXN0b20gY2FsbGJhY2sgZm9yIGZpbmRpbmcgbmV3IHBvdGVudGlhbCByZWRpcmVjdCB0aXRsZXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgKHBhZ2VuYW1lLCAkY29udGVudCwgdGl0bGVzKSA9PiB0aXRsZSBsaXN0XG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBhcmdzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmNvbnN0IGZpbmRSZWRpcmVjdENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCAuLi5hcmdzKSB7XG5cdGlmIChjYWxsYmFjaykge1xuXHRcdGZpbmRSZWRpcmVjdENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0fSBlbHNlIHtcblx0XHRmaW5kUmVkaXJlY3RDYWxsYmFja3MucHVzaChjYWxsYmFjaywgLi4uYXJncyk7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEZpbmQgbmV3IHBvdGVudGlhbCByZWRpcmVjdCB0aXRsZXMgdGhyb3VnaCBzZWxlY3RvcihzKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5jb25zdCBmaW5kUmVkaXJlY3RCeVNlbGVjdG9yID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG5cdC8qIEEgc2hvcnRjdXQgdG8gYWRkIENTUyBzZWxlY3RvcnMgYXMgcnVsZSB0byBmaW5kIG5ldyBwb3RlbnRpYWwgcmVkaXJlY3QgdGl0bGVzLiAqL1xuXHRmaW5kUmVkaXJlY3RDYWxsYmFja3MucHVzaCgoKSA9PiB7XG5cdFx0cmV0dXJuICQoc2VsZWN0b3IpLm1hcCgoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gJChlbGVtZW50KS5lcSgwKS50ZXh0KCkudHJpbSgpIHx8IG51bGw7XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmNvbnN0IHNldFJlZGlyZWN0VGV4dFN1ZmZpeCA9ICh0aXRsZSwgc3VmZml4LCBmbGFnKSA9PiB7XG5cdGxldCBmbGFnX3NldCA9IGZhbHNlO1xuXHRsZXQgZmxhZ19hcHBlbmQgPSBmYWxzZTtcblx0ZmxhZyB8fD0gU1VGRklYX0FQUEVORDsgLy8gZGVmYXVsdCBhcHBlbmRcblx0ZmxhZ19zZXQgPSBmbGFnID09PSBTVUZGSVhfUkVQTEFDRTtcblx0dGl0bGUgPSBmaXhOYW1lc3BhY2UodGl0bGUpO1xuXHRpZiAodGl0bGUgaW4gcGFnZVdpdGhSZWRpcmVjdFRleHRTdWZmaXgpIHtcblx0XHRmbGFnX2FwcGVuZCA9IGZsYWcgPT09IFNVRkZJWF9BUFBFTkQ7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gaWYgbm90IGV4aXN0LCBldmVyeSBmbGFnIGNhbiBzZXRcblx0XHRmbGFnX3NldCA9IHRydWU7XG5cdH1cblx0cGFnZVdpdGhSZWRpcmVjdFRleHRTdWZmaXhbdGl0bGVdID0gW107XG5cdGlmIChmbGFnX3NldCkge1xuXHRcdHBhZ2VXaXRoUmVkaXJlY3RUZXh0U3VmZml4W3RpdGxlXSA9IFtzdWZmaXhdO1xuXHR9IGVsc2UgaWYgKGZsYWdfYXBwZW5kKSB7XG5cdFx0cGFnZVdpdGhSZWRpcmVjdFRleHRTdWZmaXhbdGl0bGVdLnB1c2goc3VmZml4KTtcblx0XHQvLyBEZS1kdXBsaWNhdGVcblx0XHRwYWdlV2l0aFJlZGlyZWN0VGV4dFN1ZmZpeFt0aXRsZV0gPSBbLi4ubmV3IFNldChwYWdlV2l0aFJlZGlyZWN0VGV4dFN1ZmZpeFt0aXRsZV0pXTtcblx0fVxufTtcblxuLyogZXhwb3J0IGdsb2JhbCBvYmplY3QgKi9cbndpbmRvdy50b29sc1JlZGlyZWN0ID0ge1xuXHRmaW5kUmVkaXJlY3RDYWxsYmFjayxcblx0ZmluZFJlZGlyZWN0QnlTZWxlY3Rvcixcblx0c2V0UmVkaXJlY3RUZXh0U3VmZml4LFxufTtcblxuZXhwb3J0IGNvbnN0IFRvb2xzUmVkaXJlY3QgPSB7XG5cdHRhYnNlbGVtOiBudWxsLFxuXHR0YWdzZWxlbTogbnVsbCxcblx0dmFyaWFudHM6IFZBUklBTlRTLFxuXHRpbml0KCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHRcdGNvbnN0IGJ1dHRvbiA9ICQoJzxsaT4nKVxuXHRcdFx0LmFkZENsYXNzKCdtdy1saXN0LWl0ZW0gY29sbGFwc2libGUgdmVjdG9yLXRhYi1ub2ljb24nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ2NhLXJlZGlyZWN0Jylcblx0XHRcdC5jc3MoJ2N1cnNvcicsICdwb2ludGVyJylcblx0XHRcdC5hcHBlbmQoJCgnPGE+JykuYXR0cigndGl0bGUnLCBnZXRNZXNzYWdlKCdidG5kZXNjJykpLnRleHQoZ2V0TWVzc2FnZSgnYnRudGl0bGUnKSkpO1xuXHRcdGJ1dHRvbi5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRzZWxmLmRpYWxvZygpO1xuXHRcdH0pO1xuXHRcdCRib2R5LmZpbmQoJ2xpI2NhLWhpc3RvcnknKS5hZnRlcihidXR0b24pO1xuXHR9LFxuXHRkaWFsb2coKSB7XG5cdFx0Y29uc3QgZGlhbG9nID0gJCgnPGRpdj4nKVxuXHRcdFx0LmF0dHIoJ3RpdGxlJywgZ2V0TWVzc2FnZSgnZGxndGl0bGUnKSlcblx0XHRcdC5hZGRDbGFzcygnZGlhbG9nLXJlZGlyZWN0Jylcblx0XHRcdC5kaWFsb2coe1xuXHRcdFx0XHRiZ2lmcmFtZTogdHJ1ZSxcblx0XHRcdFx0cmVzaXphYmxlOiBmYWxzZSxcblx0XHRcdFx0bW9kYWw6IHRydWUsXG5cdFx0XHRcdHdpZHRoOiBNYXRoLnJvdW5kKCQod2luZG93KS53aWR0aCgpICogMC44KSxcblx0XHRcdFx0cG9zaXRpb246ICdjZW50ZXInLFxuXHRcdFx0fSk7XG5cdFx0ZGlhbG9nLmNzcygnbWF4LWhlaWdodCcsIGAke01hdGgucm91bmQoJCh3aW5kb3cpLmhlaWdodCgpICogMC44KX1weGApO1xuXHRcdHRoaXMudGFic2VsZW0gPSAkKCc8ZGl2PicpLmFkZENsYXNzKCd0YWItcmVkaXJlY3QnKS5hcHBlbmRUbyhkaWFsb2cpO1xuXHRcdHRoaXMudGFnc2VsZW0gPSAkKCc8dWw+JykuYXBwZW5kVG8odGhpcy50YWJzZWxlbSk7XG5cdFx0dGhpcy5hZGRUYWJzKCk7XG5cdFx0dGhpcy50YWJzZWxlbS50YWJzKCk7XG5cdH0sXG5cdGFkZFRhYnMoKSB7XG5cdFx0Zm9yIChjb25zdCBrbmFtZSBpbiB0aGlzLnRhYnMpIHtcblx0XHRcdGlmIChPYmplY3QuaGFzT3duKHRoaXMudGFicywga25hbWUpKSB7XG5cdFx0XHRcdGlmICh0aGlzLnRhYnNba25hbWVdID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy50YWJzW2tuYW1lXSA9IHRoaXNbYF9pbml0VGFiJHtrbmFtZVswXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2tuYW1lLnNsaWNlKDEpfWBdKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGFiID0gdGhpcy50YWJzW2tuYW1lXTtcblx0XHRcdFx0dGhpcy50YWdzZWxlbS5hcHBlbmQodGFiLnRhZyk7XG5cdFx0XHRcdHRoaXMudGFic2VsZW0uYXBwZW5kKHRhYi5jb250KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZGVmYXVsdCB0YWIsIGF1dG9sb2FkIHdoZW4gZGlhbG9nIGluaXRpYXRlXG5cdFx0dGhpcy5sb2FkVmlldygpO1xuXHR9LFxuXHRjcmVhdGVUYWIodGFibmFtZSwgdGFidGl0bGUsIG9uQ2xpY2spIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCB0YWcgPSAkKCc8bGk+JykuYXBwZW5kKCQoJzxhPicpLmF0dHIoJ2hyZWYnLCBgI3RhYi0ke3RhYm5hbWV9YCkudGV4dCh0YWJ0aXRsZSkpO1xuXHRcdGNvbnN0IGNvbnQgPSAkKCc8ZGl2PicpLmF0dHIoJ2lkJywgYHRhYi0ke3RhYm5hbWV9YCk7XG5cdFx0JCgnYScsIHRhZykub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0b25DbGljay5jYWxsKHNlbGYpO1xuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0YWcsXG5cdFx0XHRjb250LFxuXHRcdFx0bG9hZGVkOiBmYWxzZSxcblx0XHR9O1xuXHR9LFxuXHRfaW5pdFRhYlZpZXcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVGFiKCd2aWV3JywgZ2V0TWVzc2FnZSgndGFidmlld3RpdGxlJyksIHRoaXMubG9hZFZpZXcpO1xuXHR9LFxuXHRfaW5pdFRhYkNyZWF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVUYWIoJ2NyZWF0ZScsIGdldE1lc3NhZ2UoJ3RhYmNyZWF0ZXRpdGxlJyksIHRoaXMubG9hZENyZWF0ZSk7XG5cdH0sXG5cdHRhYnM6IHtcblx0XHR2aWV3OiBudWxsLFxuXHRcdGNyZWF0ZTogbnVsbCxcblx0fSxcblx0Zml4KHBhZ2VuYW1lcykge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdCQoJ3AuZGVzYycsIHNlbGYudGFicy52aWV3LmNvbnQpLnRleHQoZ2V0TWVzc2FnZSgnZml4bG9hZGluZycpKTtcblx0XHQkKCdwW2NsYXNzIT1kZXNjXScsIHNlbGYudGFicy52aWV3LmNvbnQpLnJlbW92ZSgpO1xuXHRcdHNlbGYubG9hZGluZyhzZWxmLnRhYnMudmlldy5jb250KTtcblx0XHR2b2lkIHNlbGZcblx0XHRcdC5idWxrRWRpdEJ5UmVnZXgocGFnZW5hbWVzLCAvXFxzKlxcW1xcWy4qP1xcXVxcXS8sIGAgW1ske1dHX1BBR0VfTkFNRX1dXWAsIGdldE1lc3NhZ2UoJ2ZpeHN1bW1hcnknKSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Ly8gZGVsYXkgbG9hZCBiZWZvcmUgdGhlIGFzeW5jaHJvbm91cyB0YXNrcyBvbiBzZXJ2ZXIgZmluaXNoZWRcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0c2VsZi5sb2FkZWQoc2VsZi50YWJzLnZpZXcuY29udCk7XG5cdFx0XHRcdFx0c2VsZi5sb2FkVmlldyh0cnVlKTtcblx0XHRcdFx0fSwgMzAwMCk7XG5cdFx0XHR9KTtcblx0fSxcblx0Y3JlYXRlKHBhZ2VuYW1lcykge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdCQoJ3AuZGVzYycsIHNlbGYudGFicy5jcmVhdGUuY29udCkudGV4dChnZXRNZXNzYWdlKCdjcmVhdGVsb2FkaW5nJykpO1xuXHRcdCQoJ3BbY2xhc3MhPWRlc2NdJywgc2VsZi50YWJzLmNyZWF0ZS5jb250KS5yZW1vdmUoKTtcblx0XHRzZWxmLmxvYWRpbmcoc2VsZi50YWJzLmNyZWF0ZS5jb250KTtcblx0XHR2b2lkIHNlbGZcblx0XHRcdC5idWxrRWRpdChcblx0XHRcdFx0cGFnZW5hbWVzLFxuXHRcdFx0XHRnZXRNZXNzYWdlKCdjcmVhdGV0ZXh0JykucmVwbGFjZSgnJDEnLCBXR19QQUdFX05BTUUpLFxuXHRcdFx0XHRnZXRNZXNzYWdlKCdjcmVhdGVzdW1tYXJ5JykucmVwbGFjZSgnJDEnLCBXR19QQUdFX05BTUUpXG5cdFx0XHQpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdC8vIGRlbGF5IGxvYWQgYmVmb3JlIHRoZSBhc3luY2hyb25vdXMgdGFza3Mgb24gc2VydmVyIGZpbmlzaGVkXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHNlbGYubG9hZGVkKHNlbGYudGFicy5jcmVhdGUuY29udCk7XG5cdFx0XHRcdFx0c2VsZi50YWJzLnZpZXcubG9hZGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0c2VsZi5sb2FkQ3JlYXRlKHRydWUpO1xuXHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0fSk7XG5cdH0sXG5cdGFkZFJlZGlyZWN0VGV4dFN1ZmZpeCh0aXRsZSwgdGV4dCkge1xuXHRcdGlmICh0aXRsZSBpbiBwYWdlV2l0aFJlZGlyZWN0VGV4dFN1ZmZpeCkge1xuXHRcdFx0dGV4dCArPSBwYWdlV2l0aFJlZGlyZWN0VGV4dFN1ZmZpeFt0aXRsZV0uam9pbignJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0ZXh0O1xuXHR9LFxuXHRidWxrRWRpdCh0aXRsZXMsIHRleHQsIHN1bW1hcnkpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHR0aXRsZXMgPSB0aXRsZXMuZmlsdGVyKCh2LCBpLCBhcnIpID0+IHtcblx0XHRcdHJldHVybiBhcnIuaW5kZXhPZih2KSA9PT0gaTtcblx0XHR9KTtcblx0XHR0aXRsZXMgPSB0aXRsZXMuam9pbignfCcpO1xuXHRcdHJldHVybiBhcGlcblx0XHRcdC5wb3N0KHtcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRwcm9wOiAnaW5mbycsXG5cdFx0XHRcdHRpdGxlcyxcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoe3F1ZXJ5fSkgPT4ge1xuXHRcdFx0XHRjb25zdCBkZWZlcnJlZHMgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCB7dGl0bGV9IG9mIHF1ZXJ5LnBhZ2VzKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWRzLnB1c2goXG5cdFx0XHRcdFx0XHRhcGkucG9zdFdpdGhUb2tlbignY3NyZicsIHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiAnZWRpdCcsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiBzZWxmLmFkZFJlZGlyZWN0VGV4dFN1ZmZpeCh0aXRsZSwgdGV4dCksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdFx0XHRcdHRhZ3M6IEVESVRfVEFHLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAkLndoZW4oLi4uZGVmZXJyZWRzKTtcblx0XHRcdH0pO1xuXHR9LFxuXHRidWxrRWRpdEJ5UmVnZXgodGl0bGVzLCByZWdleCwgdGV4dCwgc3VtbWFyeSkge1xuXHRcdHRpdGxlcyA9IHRpdGxlcy5maWx0ZXIoKHYsIGksIGFycikgPT4ge1xuXHRcdFx0cmV0dXJuIGFyci5pbmRleE9mKHYpID09PSBpO1xuXHRcdH0pO1xuXHRcdHRpdGxlcyA9IHRpdGxlcy5qb2luKCd8Jyk7XG5cdFx0cmV0dXJuIGFwaVxuXHRcdFx0LnBvc3Qoe1xuXHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdFx0XHRydnByb3A6ICdjb250ZW50Jyxcblx0XHRcdFx0cnZzbG90czogJ21haW4nLFxuXHRcdFx0XHR0aXRsZXMsXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHtxdWVyeX0pID0+IHtcblx0XHRcdFx0Y29uc3QgZGVmZXJyZWRzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcGFnZSBvZiBxdWVyeS5wYWdlcykge1xuXHRcdFx0XHRcdGNvbnN0IHtjb250ZW50fSA9IHBhZ2UucmV2aXNpb25zWzBdLnNsb3RzWydtYWluJ107XG5cdFx0XHRcdFx0Y29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZShyZWdleCwgdGV4dCk7XG5cdFx0XHRcdFx0ZGVmZXJyZWRzLnB1c2goXG5cdFx0XHRcdFx0XHRhcGkucG9zdFdpdGhUb2tlbignY3NyZicsIHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiAnZWRpdCcsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBwYWdlLnRpdGxlLFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiBuZXdDb250ZW50LFxuXHRcdFx0XHRcdFx0XHR0YWdzOiBFRElUX1RBRyxcblx0XHRcdFx0XHRcdFx0YmFzZXRpbWVzdGFtcDogcGFnZS5yZXZpc2lvbnNbMF0udGltZXN0YW1wLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5LFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAkLndoZW4oLi4uZGVmZXJyZWRzKTtcblx0XHRcdH0pO1xuXHR9LFxuXHRsb2FkVGFiQ29udCh0YWJuYW1lLCBjYWxsYmFjaywgcmVsb2FkKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0Y29uc3QgdGFiID0gc2VsZi50YWJzW3RhYm5hbWVdO1xuXHRcdGlmIChyZWxvYWQpIHtcblx0XHRcdHRhYi5sb2FkZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCF0YWIubG9hZGVkKSB7XG5cdFx0XHR0YWIuY29udC5odG1sKCcnKTtcblx0XHRcdC8vXG5cdFx0XHRjb25zdCAkZGVzYyA9ICQoJzxwPicpXG5cdFx0XHRcdC5hZGRDbGFzcygnZGVzYycpXG5cdFx0XHRcdC5hcHBlbmQoJCgnPHNwYW4+JykuYWRkQ2xhc3MoJ2Rlc2MtdGV4dCcpLnRleHQoZ2V0TWVzc2FnZSgncmVkaWxvYWRpbmcnKSkpXG5cdFx0XHRcdC5hcHBlbmRUbyh0YWIuY29udCk7XG5cdFx0XHRjb25zdCAkdGV4dCA9ICRkZXNjLmZpbmQoJz4gLmRlc2MtdGV4dCcpO1xuXHRcdFx0Y2FsbGJhY2tcblx0XHRcdFx0LmFwcGx5KHNlbGYpXG5cdFx0XHRcdC5kb25lKCgpID0+IHtcblx0XHRcdFx0XHQvLyBNZXNzYWdlcyB0aGF0IGNhbiBiZSB1c2VkIGhlcmU6XG5cdFx0XHRcdFx0Ly8gKiBzZWUgbWVzc2FnZXMuanNcblx0XHRcdFx0XHQvLyAqIGZvciBtb3JlIGluZm9ybWF0aW9uXG5cdFx0XHRcdFx0JHRleHQudGV4dChnZXRNZXNzYWdlKGB0YWIke3RhYm5hbWV9ZGVzY2ApKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZhaWwoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIE1lc3NhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZTpcblx0XHRcdFx0XHQvLyAqIHNlZSBtZXNzYWdlcy5qc1xuXHRcdFx0XHRcdC8vICogZm9yIG1vcmUgaW5mb3JtYXRpb25cblx0XHRcdFx0XHQkdGV4dC50ZXh0KGdldE1lc3NhZ2UoYHRhYiR7dGFibmFtZX1ub3Rmb3VuZGApKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmFsd2F5cygoKSA9PiB7XG5cdFx0XHRcdFx0c2VsZi5hZGRNZXRob2RzKCRkZXNjLCBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGhyZWY6ICcjcmVmcmVzaCcsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBnZXRNZXNzYWdlKCdyZWZyZXNoJyksXG5cdFx0XHRcdFx0XHRcdGNsaWNrKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRzZWxmLmxvYWRUYWJDb250KHRhYm5hbWUsIGNhbGxiYWNrLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0dGFiLmxvYWRlZCA9IHRydWU7XG5cdFx0fVxuXHR9LFxuXHRsb2FkaW5nKGNvbnRhaW5lcikge1xuXHRcdGlmIChjb250YWluZXIucHJvcCgndGFnTmFtZScpLnRvTG93ZXJDYXNlKCkgPT09ICdzcGFuJykge1xuXHRcdFx0Y29udGFpbmVyLmFkZENsYXNzKCdtdy1hamF4LWxvYWRlcicpO1xuXHRcdH0gZWxzZSBpZiAoJCgnc3Bhbi5tdy1hamF4LWxvYWRlcicsIGNvbnRhaW5lcikubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQkKCc8c3Bhbj4nKS5hZGRDbGFzcygnbXctYWpheC1sb2FkZXInKS5hcHBlbmRUbyhjb250YWluZXIpO1xuXHRcdH1cblx0fSxcblx0bG9hZGVkKGNvbnRhaW5lcikge1xuXHRcdGlmIChjb250YWluZXIucHJvcCgndGFnTmFtZScpLnRvTG93ZXJDYXNlKCkgPT09ICdzcGFuJykge1xuXHRcdFx0Y29udGFpbmVyLnJlbW92ZUNsYXNzKCdtdy1hamF4LWxvYWRlcicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKCdzcGFuLm13LWFqYXgtbG9hZGVyJywgY29udGFpbmVyKS5yZW1vdmUoKTtcblx0XHR9XG5cdH0sXG5cdHNlbGVjdEFsbChjb250KSB7XG5cdFx0JCgnaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCknLCBjb250KS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG5cdH0sXG5cdHNlbGVjdEludmVyc2UoY29udCkge1xuXHRcdCQoJ2lucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpJywgY29udCkuZWFjaCgoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRjb25zdCAkZWxlbWVudCA9ICQoZWxlbWVudCk7XG5cdFx0XHQkZWxlbWVudC5wcm9wKCdjaGVja2VkJywgISRlbGVtZW50LnByb3AoJ2NoZWNrZWQnKSk7XG5cdFx0fSk7XG5cdH0sXG5cdHNlbGVjdEFjdGlvbihjb250LCBjYikge1xuXHRcdGNvbnN0IHBhZ2VuYW1lcyA9IFtdO1xuXHRcdCQoJ2lucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQnLCBjb250KS5lYWNoKChfaW5kZXgsIHBhZ2VuYW1lKSA9PiB7XG5cdFx0XHRwYWdlbmFtZXMucHVzaCgkKHBhZ2VuYW1lKS5kYXRhKCdwYWdlLXRpdGxlJykpO1xuXHRcdH0pO1xuXHRcdGlmIChwYWdlbmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y2IuY2FsbCh0aGlzLCBwYWdlbmFtZXMpO1xuXHRcdH1cblx0fSxcblx0Y2xpY2tBY3Rpb24oY29udCwgY2IpIHtcblx0XHRjb25zdCBwYWdlbmFtZSA9ICQoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScsIGNvbnQpLmRhdGEoJ3BhZ2UtdGl0bGUnKTtcblx0XHRjYi5jYWxsKHRoaXMsIFtwYWdlbmFtZV0pO1xuXHR9LFxuXHRidWlsZExpbmsoe3RpdGxlLCBocmVmLCBjbGljaywgY2xhc3NuYW1lfSkge1xuXHRcdGNvbnN0IGEgPSAkKCc8YT4nKVxuXHRcdFx0LmF0dHIoe1xuXHRcdFx0XHR0aXRsZSxcblx0XHRcdFx0aHJlZixcblx0XHRcdFx0dGFyZ2V0OiAnX2JsYW5rJyxcblx0XHRcdFx0cmVsOiAnbm9vcGVuZXIgbm9yZWZlcnJlcicsXG5cdFx0XHR9KVxuXHRcdFx0LnRleHQodGl0bGUpO1xuXHRcdGlmIChjbGljaykge1xuXHRcdFx0YS5vbignY2xpY2snLCBjbGljayk7XG5cdFx0fVxuXHRcdGlmIChjbGFzc25hbWUpIHtcblx0XHRcdGEuYWRkQ2xhc3MoY2xhc3NuYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuICQoJzxzcGFuPicpLmFkZENsYXNzKCd0b29scy1yZWRpcmVjdF9saW5rJykuYXBwZW5kKGEpO1xuXHR9LFxuXHRhZGRNZXRob2RzKCRwYXJlbnQsIG1ldGhvZHMpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRsZXQgJGNvbnRhaW5lciA9ICRwYXJlbnQuZmluZCgnPiAudG9vbHMtcmVkaXJlY3RfbWV0aG9kcycpO1xuXHRcdGNvbnN0IG1ldGhvZEV4aXN0ID0gKHtocmVmfSkgPT4ge1xuXHRcdFx0cmV0dXJuICRjb250YWluZXIuZmluZChgYVtocmVmPSR7SlNPTi5zdHJpbmdpZnkoaHJlZil9XWApLmxlbmd0aCA+IDA7XG5cdFx0fTtcblx0XHRpZiAoJGNvbnRhaW5lci5sZW5ndGggPT09IDApIHtcblx0XHRcdCRjb250YWluZXIgPSAkKCc8c3Bhbj4nKS5hZGRDbGFzcygndG9vbHMtcmVkaXJlY3RfbWV0aG9kcycpLmFwcGVuZFRvKCRwYXJlbnQpO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IG1ldGhvZCBvZiBtZXRob2RzKSB7XG5cdFx0XHRpZiAoIW1ldGhvZEV4aXN0KG1ldGhvZCkpIHtcblx0XHRcdFx0c2VsZi5idWlsZExpbmsobWV0aG9kKS5hcHBlbmRUbygkY29udGFpbmVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGJ1aWxkU2VsZWN0aW9uKG1haW4sIG1ldGQsIG10LCBkc2FiKSB7XG5cdFx0Y29uc3QgY29udCA9ICQoJzxzcGFuPicpO1xuXHRcdGNvbnN0IHNlbGUgPSAkKCc8aW5wdXQ+JykuYXR0cigndHlwZScsICdjaGVja2JveCcpLmFwcGVuZFRvKGNvbnQpO1xuXHRcdHRoaXMuYnVpbGRMaW5rKG1haW4pLmFwcGVuZFRvKGNvbnQpO1xuXHRcdHRoaXMuYWRkTWV0aG9kcyhjb250LCBtZXRkKTtcblx0XHRzZWxlLmRhdGEoJ3BhZ2UtdGl0bGUnLCBtdCk7XG5cdFx0aWYgKGRzYWIpIHtcblx0XHRcdHNlbGUucHJvcCgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnQ7XG5cdH0sXG5cdGxvYWRWaWV3KHJlbG9hZCkge1xuXHRcdGNvbnN0ICRjb250YWluZXIgPSB0aGlzLnRhYnMudmlldy5jb250O1xuXHRcdHRoaXMubG9hZFRhYkNvbnQoXG5cdFx0XHQndmlldycsXG5cdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmxvYWRSZWRpcmVjdChXR19QQUdFX05BTUUsICRjb250YWluZXIsIDApO1xuXHRcdFx0fSxcblx0XHRcdHJlbG9hZFxuXHRcdCk7XG5cdH0sXG5cdGxvYWRDcmVhdGUocmVsb2FkKSB7XG5cdFx0dGhpcy5sb2FkVGFiQ29udChcblx0XHRcdCdjcmVhdGUnLFxuXHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5maW5kUmVkaXJlY3QoV0dfUEFHRV9OQU1FKTtcblx0XHRcdH0sXG5cdFx0XHRyZWxvYWRcblx0XHQpO1xuXHR9LFxuXHRsb2FkUmVkaXJlY3QocGFnZW5hbWUsIGNvbnRhaW5lciwgZGVlcCwgbG9hZGVkKSB7XG5cdFx0dGhpcy5sb2FkaW5nKGNvbnRhaW5lcik7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG5cdFx0Y29uc3QgdG9wID0gZGVlcCA/ICQoJzxkbD4nKS5hcHBlbmRUbyhjb250YWluZXIpIDogY29udGFpbmVyO1xuXHRcdGlmICghbG9hZGVkKSB7XG5cdFx0XHRsb2FkZWQgPSB7fTtcblx0XHRcdGxvYWRlZFtwYWdlbmFtZV0gPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBvbkNsaWNrRml4ID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRjb25zdCBlbnRyeSA9ICQodGhpcykucGFyZW50cygnZGQsIHAnKS5maXJzdCgpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHNlbGYuY2xpY2tBY3Rpb24oZW50cnksIHRoaXMuZml4KTtcblx0XHR9O1xuXHRcdHZvaWQgYXBpXG5cdFx0XHQucG9zdCh7XG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdFx0cHJvcDogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdHRpdGxlczogcGFnZW5hbWUsXG5cdFx0XHRcdHJkbGltaXQ6ICdtYXgnLFxuXHRcdFx0fSlcblx0XHRcdC50aGVuKCh7cXVlcnl9KSA9PiB7XG5cdFx0XHRcdHNlbGYubG9hZGVkKGNvbnRhaW5lcik7XG5cdFx0XHRcdGxldCBoYXNfcmVkaXJlY3QgPSBmYWxzZTtcblx0XHRcdFx0Y29uc3QgZGVzYyA9ICQoJ3AuZGVzYycsIHNlbGYudGFicy52aWV3LmNvbnQpO1xuXHRcdFx0XHRjb25zdCBtYXhpbXVtUmVkaXJlY3REZXB0aCA9IDEwO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHBhZ2Ugb2YgcXVlcnkucGFnZXMpIHtcblx0XHRcdFx0XHRpZiAocGFnZS5yZWRpcmVjdHMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHtyZWRpcmVjdHN9ID0gcGFnZTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3Qge3RpdGxlfSBvZiByZWRpcmVjdHMpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmR0aXRsZSA9IHRpdGxlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB1bHRpdGxlID0gcmR0aXRsZS5yZXBsYWNlKC8gL2csICdfJyk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVudHJ5ID0gKGRlZXAgPyAkKCc8ZGQ+JykgOiAkKCc8cD4nKSkuYXBwZW5kVG8odG9wKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWV0aG9kcyA9IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRocmVmOiBtdy51dGlsLmdldFVybCh1bHRpdGxlLCB7YWN0aW9uOiAnZWRpdCd9KSxcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBnZXRNZXNzYWdlKCdyZWRpZWRpdCcpLFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGlzQ3ljbGVSZWRpcmVjdCA9IHJkdGl0bGUgaW4gbG9hZGVkO1xuXHRcdFx0XHRcdFx0XHRsb2FkZWRbcmR0aXRsZV0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRpZiAoIWlzQ3ljbGVSZWRpcmVjdCAmJiBkZWVwKSB7XG5cdFx0XHRcdFx0XHRcdFx0bWV0aG9kcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGhyZWY6ICcjZml4LXJlZGlyZWN0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBnZXRNZXNzYWdlKCd0YWJ2aWV3Zml4JyksXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGljazogb25DbGlja0ZpeCxcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCAkY29udGFpbmVyID0gc2VsZlxuXHRcdFx0XHRcdFx0XHRcdC5idWlsZFNlbGVjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZjogbXcudXRpbC5nZXRVcmwodWx0aXRsZSwge3JlZGlyZWN0OiAnbm8nfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiByZHRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZHMsXG5cdFx0XHRcdFx0XHRcdFx0XHR1bHRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0IWRlZXBcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0LmFwcGVuZFRvKGVudHJ5KTtcblx0XHRcdFx0XHRcdFx0aWYgKGlzQ3ljbGVSZWRpcmVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdCRjb250YWluZXIuYXBwZW5kKGA8c3BhbiBjbGFzcz1cImVycm9yXCI+JHtnZXRNZXNzYWdlKCdlcnJjeWNsZXJlZGlyZWN0Jyl9PC9zcGFuPmApO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRlZXAgPCBtYXhpbXVtUmVkaXJlY3REZXB0aCkge1xuXHRcdFx0XHRcdFx0XHRcdHZvaWQgZGVmZXJyZWQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VsZi5sb2FkUmVkaXJlY3QocmR0aXRsZSwgZW50cnksIGRlZXAgKyAxLCBsb2FkZWQpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGhhc19yZWRpcmVjdCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGhhc19yZWRpcmVjdCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGFzX3JlZGlyZWN0ICYmIGRlZXAgPT09IDEpIHtcblx0XHRcdFx0XHRzZWxmLmFkZE1ldGhvZHMoZGVzYywgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRocmVmOiAnI3NlbGVjdC1hbGwnLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgnc2VsZWN0YWxsJyksXG5cdFx0XHRcdFx0XHRcdGNsaWNrKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRzZWxmLnNlbGVjdEFsbChzZWxmLnRhYnMudmlldy5jb250KTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGhyZWY6ICcjc2VsZWN0LWludmVyc2UnLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgnc2VsZWN0aW52ZXJzZScpLFxuXHRcdFx0XHRcdFx0XHRjbGljayhldmVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZi5zZWxlY3RJbnZlcnNlKHNlbGYudGFicy52aWV3LmNvbnQpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aHJlZjogJyNmaXgtc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgndGFidmlld2ZpeCcpLFxuXHRcdFx0XHRcdFx0XHRjbGljayhldmVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZi5zZWxlY3RBY3Rpb24oc2VsZi50YWJzLnZpZXcuY29udCwgc2VsZi5maXgpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGFzX3JlZGlyZWN0KSB7XG5cdFx0XHRcdFx0dm9pZCBkZWZlcnJlZC5yZXNvbHZlV2l0aChzZWxmKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2b2lkIGRlZmVycmVkLnJlamVjdFdpdGgoc2VsZik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7XG5cdH0sXG5cdGZpbmRWYXJpYW50cyhwYWdlbmFtZSwgdGl0bGVzKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0Y29uc3Qgc3VmZml4UmVnID0gL14uKz8oKO+8iHxbIF9dXFwoKS4rPyhbKe+8iV0pKSQvO1xuXHRcdGxldCByZXRUaXRsZXMgPSBbXTtcblx0XHRjb25zdCBkZWZlcnJlZHMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHZhcmlhbnQgb2YgVkFSSUFOVFMpIHtcblx0XHRcdGNvbnN0IHhociA9IGFwaVxuXHRcdFx0XHQucG9zdCh7XG5cdFx0XHRcdFx0YWN0aW9uOiAncGFyc2UnLFxuXHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdFx0XHRwYWdlOiBwYWdlbmFtZSxcblx0XHRcdFx0XHRwcm9wOiAnZGlzcGxheXRpdGxlJyxcblx0XHRcdFx0XHR1c2VsYW5nOiB2YXJpYW50LFxuXHRcdFx0XHRcdHZhcmlhbnQsXG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKCh7cGFyc2V9KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qge2Rpc3BsYXl0aXRsZX0gPSBwYXJzZTtcblx0XHRcdFx0XHQvLyBFeGFtcGxlOlxuXHRcdFx0XHRcdC8vIC0gQmVmb3JlOiA8c3BhbiBjbGFzcz1cIm13LXBhZ2UtdGl0bGUtbmFtZXNwYWNlXCI+5pyJ5YW95qGj5qGI6aaGPC9zcGFuPjxzcGFuIGNsYXNzPVwibXctcGFnZS10aXRsZS1zZXBhcmF0b3JcIj46PC9zcGFuPjxzcGFuIGNsYXNzPVwibXctcGFnZS10aXRsZS1tYWluXCI+5rKZ55uSPC9zcGFuPlxuXHRcdFx0XHRcdC8vIC0gQWZ0ZXI6IOacieWFveaho+ahiOmmhjrmspnnm5Jcblx0XHRcdFx0XHRsZXQgdGl0bGUgPSAkKCc8c3Bhbj4nKS5hcHBlbmQoZGlzcGxheXRpdGxlKS5lcSgwKS50ZXh0KCkudHJpbSgpO1xuXHRcdFx0XHRcdHRpdGxlID0gZml4TmFtZXNwYWNlKHRpdGxlKTtcblx0XHRcdFx0XHRzZXRSZWRpcmVjdFRleHRTdWZmaXgodGl0bGUsICdcXG57e+eugOe5gemHjeWumuWQkX19JywgU1VGRklYX0FQUEVORCk7XG5cdFx0XHRcdFx0cmV0dXJuIHRpdGxlO1xuXHRcdFx0XHR9KTtcblx0XHRcdGRlZmVycmVkcy5wdXNoKHhocik7XG5cdFx0fVxuXHRcdHJldHVybiAkLndoZW4oLi4uZGVmZXJyZWRzKS50aGVuKCguLi5hcmdzKSA9PiB7XG5cdFx0XHRjb25zdCBzdWZmaXhlcyA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCB0aXRsZSBvZiBhcmdzKSB7XG5cdFx0XHRcdGxldCBzdWZmaXg7XG5cdFx0XHRcdC8vIGZpbmQgdGl0bGUgc3VmZml4LFxuXHRcdFx0XHQvLyBmb3IgZXhhbXBsZSBcIiAo5rWO5Y2X5biCKVwiIHRvIFwi5biC5Lit5Yy6ICjmtY7ljZfluIIpXCJcblx0XHRcdFx0Y29uc3Qgc3VmZml4QXJyID0gc3VmZml4UmVnLmV4ZWModGl0bGUpO1xuXHRcdFx0XHRpZiAoc3VmZml4QXJyICYmIHN1ZmZpeEFyci5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0XHRbLCBzdWZmaXhdID0gc3VmZml4QXJyO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN1ZmZpeCA9ICcnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldFRpdGxlcy5wdXNoKHRpdGxlKTtcblx0XHRcdFx0c3VmZml4ZXMucHVzaChzdWZmaXgpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gYXBwZW5kIHN1ZmZpeGVzXG5cdFx0XHRmb3IgKGNvbnN0IHN1ZmZpeCBvZiBuZXcgU2V0KHN1ZmZpeGVzKSkge1xuXHRcdFx0XHRyZXRUaXRsZXMgPSBbXG5cdFx0XHRcdFx0Li4ucmV0VGl0bGVzLFxuXHRcdFx0XHRcdC4uLnRpdGxlcy5tYXAoKHRpdGxlKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBtb2RpZmllZFRpdGxlID0gZml4TmFtZXNwYWNlKHRpdGxlKTtcblx0XHRcdFx0XHRcdHJldHVybiBzdWZmaXhSZWcudGVzdChtb2RpZmllZFRpdGxlKSA/IG1vZGlmaWVkVGl0bGUgOiBtb2RpZmllZFRpdGxlICsgc3VmZml4O1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGYuZmluZE5vdEV4aXN0cyhbLi4ubmV3IFNldChyZXRUaXRsZXMpXSk7XG5cdFx0fSk7XG5cdH0sXG5cdGZpbmROb3RFeGlzdHModGl0bGVzKSB7XG5cdFx0Y29uc3QgZGVmZXJyZWRzID0gW107XG5cdFx0Y29uc3QgZXhjbHVkZXMgPSBuZXcgU2V0KFsn55So5a2X5qih5byPJ10pO1xuXHRcdGxldCBhbGx0aXRsZXMgPSBbXTtcblx0XHR0aXRsZXMgPSB0aXRsZXMuam9pbignfCcpO1xuXHRcdGZvciAoY29uc3QgdmFyaWFudCBvZiBWQVJJQU5UUykge1xuXHRcdFx0ZGVmZXJyZWRzLnB1c2goXG5cdFx0XHRcdGFwaS5wb3N0KHtcblx0XHRcdFx0XHRhY3Rpb246ICdwYXJzZScsXG5cdFx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRcdHRleHQ6IHRpdGxlcyxcblx0XHRcdFx0XHRwcm9wOiAndGV4dCcsXG5cdFx0XHRcdFx0dGl0bGU6ICdNZWRpYVdpa2k6R2FkZ2V0LVRvb2xzUmVkaXJlY3QuanMvLScsXG5cdFx0XHRcdFx0Y29udGVudG1vZGVsOiAnd2lraXRleHQnLFxuXHRcdFx0XHRcdHVzZWxhbmc6IHZhcmlhbnQsXG5cdFx0XHRcdFx0dmFyaWFudCxcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiAkLndoZW4oLi4uZGVmZXJyZWRzKS50aGVuKCguLi5hcmdzKSA9PiB7XG5cdFx0XHRmb3IgKGNvbnN0IFt7cGFyc2V9XSBvZiBhcmdzKSB7XG5cdFx0XHRcdGFsbHRpdGxlcyA9IFsuLi5hbGx0aXRsZXMsIC4uLiQocGFyc2UudGV4dCkudGV4dCgpLnRyaW0oKS5zcGxpdCgnfCcpXTtcblx0XHRcdH1cblx0XHRcdGFsbHRpdGxlcyA9IGFsbHRpdGxlcy5maWx0ZXIoKHYsIGksIGFycikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYXJyLmluZGV4T2YodikgPT09IGk7XG5cdFx0XHR9KTtcblx0XHRcdGFsbHRpdGxlcyA9IGFsbHRpdGxlcy5qb2luKCd8Jyk7XG5cdFx0XHRyZXR1cm4gYXBpXG5cdFx0XHRcdC5wb3N0KHtcblx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRcdHByb3A6ICdpbmZvJyxcblx0XHRcdFx0XHR0aXRsZXM6IGFsbHRpdGxlcyxcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oKHtxdWVyeX0pID0+IHtcblx0XHRcdFx0XHR0aXRsZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhZ2Ugb2YgcXVlcnkucGFnZXMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHt0aXRsZX0gPSBwYWdlO1xuXHRcdFx0XHRcdFx0aWYgKHBhZ2UubWlzc2luZyAmJiAhZXhjbHVkZXMuaGFzKHRpdGxlKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGl0bGUgaW4gcmVkaXJlY3RFeGNsdWRlcykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGV4Y2x1ZGUgc3BlY2lhbCB0aXRsZXNcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGl0bGVzLnB1c2godGl0bGUpO1xuXHRcdFx0XHRcdFx0XHRpZiAoSVNfQ0FURUdPUlkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0YXJnZXQgPSBXR19QQUdFX05BTUUucmVwbGFjZSgvXkNhdGVnb3J5Oi8sICcnKTtcblx0XHRcdFx0XHRcdFx0XHRzZXRSZWRpcmVjdFRleHRTdWZmaXgodGl0bGUsICdcXG57e+WIhuexu+mHjeWumuWQkXwkMX19Jy5yZXBsYWNlKCckMScsIHRhcmdldCkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIG9ubHkgc2V0IGRlZmF1bHQgc3VmZml4XG5cdFx0XHRcdFx0XHRcdHNldFJlZGlyZWN0VGV4dFN1ZmZpeCh0aXRsZSwgJ1xcbnt75Yir5ZCN6YeN5a6a5ZCRfX0nLCBTVUZGSVhfU0VUREVGQVVMVCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aXRsZXM7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9LFxuXHRmaW5kUmVkaXJlY3QocGFnZW5hbWUpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCBmcmNEZWZlcnJlZHMgPSBbXTtcblx0XHRjb25zdCBjb250YWluZXIgPSBzZWxmLnRhYnMuY3JlYXRlLmNvbnQ7XG5cdFx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdFx0Y29uc3QgJGNvbnRlbnQgPSAkYm9keS5maW5kKCcjbXctY29udGVudC10ZXh0ID4gZGl2Lm13LXBhcnNlci1vdXRwdXQnKTtcblx0XHRjb25zdCBkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKTtcblx0XHRsZXQgdGl0bGVzID0gW107XG5cdFx0c2VsZi5sb2FkaW5nKGNvbnRhaW5lcik7XG5cdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBmaW5kUmVkaXJlY3RDYWxsYmFja3MpIHtcblx0XHRcdGNvbnN0IHJldCA9IGNhbGxiYWNrKHBhZ2VuYW1lLCAkY29udGVudCwgdGl0bGVzKTtcblx0XHRcdGlmICh0eXBlb2YgcmV0ID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHR0aXRsZXMucHVzaChyZXQpO1xuXHRcdFx0fSBlbHNlIGlmICgnZG9uZScgaW4gcmV0KSB7XG5cdFx0XHRcdC8vIGlzIERlZmVycmVkXG5cdFx0XHRcdGZyY0RlZmVycmVkcy5wdXNoKHJldCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aXRsZXMgPSBbLi4ubmV3IFNldChbLi4udGl0bGVzLCAuLi5yZXRdKV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHJlbW92ZSBhbGwgZW1wdHkgdGl0bGVzXG5cdFx0dGl0bGVzID0gdGl0bGVzLm1hcCgodGl0bGUpID0+IHtcblx0XHRcdHJldHVybiB0aXRsZSB8fCBudWxsO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9uQ2xpY2tDcmVhdGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdGNvbnN0IGVudHJ5ID0gJCh0aGlzKS5wYXJlbnRzKCdwOmZpcnN0Jyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0c2VsZi5jbGlja0FjdGlvbihlbnRyeSwgc2VsZi5jcmVhdGUpO1xuXHRcdH07XG5cdFx0Ly8gaGFuZGxlcyB0aGUgZGVmZXJyZWQgY2FsbGJhY2tzXG5cdFx0dm9pZCAkLndoZW4oLi4uZnJjRGVmZXJyZWRzKVxuXHRcdFx0LnRoZW4oKC4uLmFyZ3MpID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCByZXQgb2YgYXJncykge1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgcmV0ID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0dGl0bGVzLnB1c2gocmV0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGl0bGVzID0gWy4uLm5ldyBTZXQoWy4uLnRpdGxlcywgLi4ucmV0XSldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2VsZi5maW5kVmFyaWFudHMocGFnZW5hbWUsIHRpdGxlcyk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGZ2dGl0bGVzKSA9PiB7XG5cdFx0XHRcdC8vIGJ1aWxkIEhUTUxcblx0XHRcdFx0c2VsZi5sb2FkZWQoY29udGFpbmVyKTtcblx0XHRcdFx0Zm9yIChjb25zdCB0aXRsZSBvZiBmdnRpdGxlcykge1xuXHRcdFx0XHRcdGNvbnN0IHVsdGl0bGUgPSB0aXRsZS5yZXBsYWNlKCcgJywgJ18nKTtcblx0XHRcdFx0XHRjb25zdCBlbnRyeSA9ICQoJzxwPicpLmFwcGVuZFRvKGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0c2VsZi5idWlsZFNlbGVjdGlvbihcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aHJlZjogbXcudXRpbC5nZXRVcmwodWx0aXRsZSwge2FjdGlvbjogJ2VkaXQnLCByZWRsaW5rOiAnMSd9KSxcblx0XHRcdFx0XHRcdFx0dGl0bGUsXG5cdFx0XHRcdFx0XHRcdGNsYXNzbmFtZTogJ25ldycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aHJlZjogJyNjcmVhdGUtcmVkaXJlY3QnLFxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBnZXRNZXNzYWdlKCd0YWJjcmVhdGV0aXRsZScpLFxuXHRcdFx0XHRcdFx0XHRcdGNsaWNrOiBvbkNsaWNrQ3JlYXRlLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdHVsdGl0bGUsXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdCkuYXBwZW5kVG8oZW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSAkKCdwLmRlc2MnLCBjb250YWluZXIpO1xuXHRcdFx0XHRpZiAoZnZ0aXRsZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHNlbGYuYWRkTWV0aG9kcyhkZXNjLCBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGhyZWY6ICcjc2VsZWN0LWFsbCcsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBnZXRNZXNzYWdlKCdzZWxlY3RhbGwnKSxcblx0XHRcdFx0XHRcdFx0Y2xpY2soZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYuc2VsZWN0QWxsKGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRocmVmOiAnI3NlbGVjdC1pbnZlcnNlJyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6IGdldE1lc3NhZ2UoJ3NlbGVjdGludmVyc2UnKSxcblx0XHRcdFx0XHRcdFx0Y2xpY2soZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYuc2VsZWN0SW52ZXJzZShjb250YWluZXIpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aHJlZjogJyNjcmVhdGUtc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgndGFiY3JlYXRldGl0bGUnKSxcblx0XHRcdFx0XHRcdFx0Y2xpY2soZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYuc2VsZWN0QWN0aW9uKGNvbnRhaW5lciwgc2VsZi5jcmVhdGUpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHR2b2lkIGRlZmVycmVkLnJlc29sdmVXaXRoKHNlbGYsIFtmdnRpdGxlc10pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZvaWQgZGVmZXJyZWQucmVqZWN0V2l0aChzZWxmLCBbZnZ0aXRsZXNdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcblx0fSxcbn07XG4iLCAiaW1wb3J0IHtXR19VU0VSX0xBTkdVQUdFfSBmcm9tICcuL2NvbnN0YW50JztcblxuZXhwb3J0IGNvbnN0IHRvb2xzUmVkaXJlY3RNZXNzYWdlcyA9ICgpOiB2b2lkID0+IHtcblx0aWYgKFsnemgtaGFudCcsICd6aC1oaycsICd6aC1tbycsICd6aC10dyddLmluY2x1ZGVzKFdHX1VTRVJfTEFOR1VBR0UpKSB7XG5cdFx0bXcubWVzc2FnZXMuc2V0KHtcblx0XHRcdCd0b29sc3JlZGlyZWN0LWJ0bnRpdGxlJzogJ+mHjeaWsOWwjuWQkScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1idG5kZXNjJzogJ+WJteW7uuWSjOeuoeeQhuatpOmggemdoueahOmHjeaWsOWwjuWQkScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1kbGd0aXRsZSc6ICflibXlu7rlkoznrqHnkIbph43mlrDlsI7lkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtcmVkaWxvYWRpbmcnOiAn5pW45pOa5Yqg6LyJ5Lit77yM6KuL56iN5YCZ4oCm4oCmJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXJlZGllZGl0JzogJ+e3qOi8rycsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1zZWxlY3RhbGwnOiAn5YWo6YG4Jyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXNlbGVjdGludmVyc2UnOiAn5Y+N6YG4Jyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYnZpZXd0aXRsZSc6ICfmn6XnnIsnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFidmlld2Rlc2MnOiAn5Lul5LiL5piv5oyH5ZCR5q2k6aCB6Z2i55qE6YeN5paw5bCO5ZCR6aCB77yaJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYnZpZXdub3Rmb3VuZCc6ICfmspLmnInmib7liLDku7vkvZXmjIflkJHmraTpoIHpnaLnmoTph43mlrDlsI7lkJHpoIHjgIInLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFidmlld211bHRpJzogJ+WkmumHjScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJ2aWV3Zml4JzogJ+S/ruW+qScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1maXhsb2FkaW5nJzogJ+iri+eojeWAme+8jOato+WcqOiHquWLleS/ruW+qemHjeaWsOWwjuWQkeKApuKApicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1maXh0ZXh0JzogJyNSRURJUkVDVCBbWyQxXV0nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZml4c3VtbWFyeSc6ICfnt6jovK/lt6XlhbfvvJrkv67lvqnlpJrph43ph43mlrDlsI7lkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFiY3JlYXRldGl0bGUnOiAn5Ym15bu6Jyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYmNyZWF0ZWRlc2MnOiAn5Lul5LiL5piv5bCa5pyq5Ym15bu655qE6YeN5paw5bCO5ZCR6aCB77yaJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYmNyZWF0ZW5vdGZvdW5kJzogJ+aykuacieaJvuWIsOWPr+S7peWJteW7uueahOmHjeaWsOWwjuWQkemggeOAgicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJjcmVhdGVhbGwnOiAn5YWo6YOo5Ym15bu6Jyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LWNyZWF0ZWxvYWRpbmcnOiAn6KuL56iN5YCZ77yM5q2j5Zyo6Ieq5YuV5Ym15bu66YeN5paw5bCO5ZCR4oCm4oCmJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LWNyZWF0ZXRleHQnOiAnI1JFRElSRUNUIFtbJDFdXScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1jcmVhdGVzdW1tYXJ5JzogJ+e3qOi8r+W3peWFt++8muiHquWLleWJteW7uumHjeaWsOWwjuWQkeWIsFtbJDFdXScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1lcnJjeWNsZXJlZGlyZWN0JzogJ+eEoeazleiHquWLleS/ruW+qe+8mueZvOePvuW+queSsOmHjeaWsOWwjuWQkScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1yZWZyZXNoJzogJ+WIt+aWsCcsXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0bXcubWVzc2FnZXMuc2V0KHtcblx0XHRcdCd0b29sc3JlZGlyZWN0LWJ0bnRpdGxlJzogJ+mHjeWumuWQkScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1idG5kZXNjJzogJ+WIm+W7uuWSjOeuoeeQhuatpOmhtemdoueahOmHjeWumuWQkScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1kbGd0aXRsZSc6ICfliJvlu7rlkoznrqHnkIbph43lrprlkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtcmVkaWxvYWRpbmcnOiAn5pWw5o2u5Yqg6L295Lit77yM6K+356iN5YCZ4oCm4oCmJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXJlZGllZGl0JzogJ+e8lui+kScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1zZWxlY3RhbGwnOiAn5YWo6YCJJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXNlbGVjdGludmVyc2UnOiAn5Y+N6YCJJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYnZpZXd0aXRsZSc6ICfmn6XnnIsnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFidmlld2Rlc2MnOiAn5Lul5LiL5piv5oyH5ZCR5q2k6aG16Z2i55qE6YeN5a6a5ZCR6aG177yaJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYnZpZXdub3Rmb3VuZCc6ICfmsqHmnInmib7liLDku7vkvZXmjIflkJHmraTpobXpnaLnmoTph43lrprlkJHpobXjgIInLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFidmlld211bHRpJzogJ+WkmumHjScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJ2aWV3Zml4JzogJ+S/ruWkjScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1maXhsb2FkaW5nJzogJ+ivt+eojeWAme+8jOato+WcqOiHquWKqOS/ruWkjemHjeWumuWQkeKApuKApicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1maXh0ZXh0JzogJyNSRURJUkVDVCBbWyQxXV0nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZml4c3VtbWFyeSc6ICfnvJbovpHlt6XlhbfvvJrkv67lpI3lpJrph43ph43lrprlkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFiY3JlYXRldGl0bGUnOiAn5Yib5bu6Jyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYmNyZWF0ZWRlc2MnOiAn5Lul5LiL5piv5bCa5pyq5Yib5bu655qE6YeN5a6a5ZCR6aG177yaJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYmNyZWF0ZW5vdGZvdW5kJzogJ+ayoeacieaJvuWIsOWPr+S7peWIm+W7uueahOmHjeWumuWQkemhteOAgicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJjcmVhdGVhbGwnOiAn5YWo6YOo5Yib5bu6Jyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LWNyZWF0ZWxvYWRpbmcnOiAn6K+356iN5YCZ77yM5q2j5Zyo6Ieq5Yqo5Yib5bu66YeN5a6a5ZCR4oCm4oCmJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LWNyZWF0ZXRleHQnOiAnI1JFRElSRUNUIFtbJDFdXScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1jcmVhdGVzdW1tYXJ5JzogJ+e8lui+keW3peWFt++8muiHquWKqOWIm+W7uumHjeWumuWQkeWIsFtbJDFdXScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1lcnJjeWNsZXJlZGlyZWN0JzogJ+aXoOazleiHquWKqOS/ruWkje+8muWPkeeOsOW+queOr+mHjeWumuWQkScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1yZWZyZXNoJzogJ+WIt+aWsCcsXG5cdFx0fSk7XG5cdH1cbn07XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmV4cG9ydCBjb25zdCB0b29sc1JlZGlyZWN0X2Jpb19sYXRpbl9uYW1lcyA9ICgpID0+IHtcblx0Y29uc3QgcHJlZml4UmVnZXggPSAvW+WtpuWtuF3lkI1cXHMqWzrvvJpdP1xccyokLztcblx0Y29uc3QgY29sb25SZWdleCA9IC9eXFxzKls677yaXT9cXHMqJC87XG5cdHdpbmRvdy50b29sc1JlZGlyZWN0LmZpbmRSZWRpcmVjdENhbGxiYWNrKChfcGFnZW5hbWUsICRjb250ZW50KSA9PiB7XG5cdFx0Y29uc3QgdGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdCRjb250ZW50LmZpbmQoJz4gcCA+IFtsYW5nPVwibGFcIl0sID4gcCA+IGknKS5lYWNoKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdGxldCB0aXRsZTtcblx0XHRcdGxldCBwcmV2aW91c05vZGUgPSBlbGVtZW50LnByZXZpb3VzU2libGluZztcblx0XHRcdGlmIChwcmV2aW91c05vZGUgJiYgY29sb25SZWdleC50ZXN0KHByZXZpb3VzTm9kZS50ZXh0Q29udGVudCkpIHtcblx0XHRcdFx0cHJldmlvdXNOb2RlID0gcHJldmlvdXNOb2RlLnByZXZpb3VzU2libGluZztcblx0XHRcdH1cblx0XHRcdGlmIChwcmV2aW91c05vZGUgJiYgcHJlZml4UmVnZXgudGVzdChwcmV2aW91c05vZGUudGV4dENvbnRlbnQpKSB7XG5cdFx0XHRcdHRpdGxlID0gJChlbGVtZW50KS50ZXh0KCkudHJpbSgpO1xuXHRcdFx0XHR0aXRsZXMucHVzaCh0aXRsZSk7XG5cdFx0XHRcdHdpbmRvdy50b29sc1JlZGlyZWN0LnNldFJlZGlyZWN0VGV4dFN1ZmZpeCh0aXRsZSwgJ1xcbnt75a2m5ZCN6YeN5a6a5ZCRfX0nKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gWy4uLm5ldyBTZXQodGl0bGVzKV07XG5cdH0pO1xufTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuZXhwb3J0IGNvbnN0IHRvb2xzUmVkaXJlY3RfY291cnRlc3lfYW5kX2FydF9uYW1lcyA9ICgpOiB2b2lkID0+IHtcblx0Y29uc3QgcHJlZml4UmVnZXggPSAvW+WPt+Wtl+iZn11cXHMqJC87XG5cdGNvbnN0IGNvbXBTdXJuYW1lcyA9IFtcblx0XHQn5qyn6ZizJyxcblx0XHQn5q2Q6Zm9Jyxcblx0XHQn5Luk54uQJyxcblx0XHQn55qH55SrJyxcblx0XHQn5LiK5a6YJyxcblx0XHQn5Y+45b6SJyxcblx0XHQn6K+46JGbJyxcblx0XHQn6Ku46JGbJyxcblx0XHQn5Y+46amsJyxcblx0XHQn5Y+46aasJyxcblx0XHQn5a6H5paHJyxcblx0XHQn5ZG85bu2Jyxcblx0XHQn56uv5pyoJyxcblx0XHQn55Sz5bGgJyxcblx0XHQn5bCJ6L+fJyxcblx0XHQn5bCJ6YGyJyxcblx0XHQn6L2p6L6VJyxcblx0XHQn6LuS6L2FJyxcblx0XHQn5aSP5L6vJyxcblx0XHQn5Y2X5a6rJyxcblx0XHQn5Y2X5a6uJyxcblx0XHQn5Y+456m6Jyxcblx0XHQn6bKc5LqOJyxcblx0XHQn6a6u5LqOJyxcblx0XHQn6KW/6ZeoJyxcblx0XHQn6KW/6ZaAJyxcblx0XHQn54us5a2kJyxcblx0XHQn542o5a2kJyxcblx0XHQn5Lic5pa5Jyxcblx0XHQn5p2x5pa5Jyxcblx0XHQn5Y+45a+HJyxcblx0XHQn576K6IiMJyxcblx0XHQn56ys5LqUJyxcblx0XHQn5qKB5LiYJyxcblx0XHQn6ZS656a7Jyxcblx0XHQn6Y2+6ZuiJyxcblx0XHQn5Lic6YOtJyxcblx0XHQn5p2x6YOtJyxcblx0XHQn5YWs5a2ZJyxcblx0XHQn5YWs5a2rJyxcblx0XHQn5a2f5a2ZJyxcblx0XHQn5a2f5a2rJyxcblx0XHQn5Luy5a2ZJyxcblx0XHQn5Luy5a2rJyxcblx0XHQn5Y+U5a2ZJyxcblx0XHQn5Y+U5a2rJyxcblx0XHQn5a2j5a2ZJyxcblx0XHQn5a2j5a2rJyxcblx0XHQn6ZW/5a2ZJyxcblx0XHQn6ZW35a2rJyxcblx0XHQn5oWV5a65Jyxcblx0XHQn6Ze+5LiYJyxcblx0XHQn6Zat5LiYJyxcblx0XHQn5Lic6ZeoJyxcblx0XHQn5p2x6ZaAJyxcblx0XHQn5YWs576KJyxcblx0XHQn5LiH5L+fJyxcblx0XHQn55m+6YeMJyxcblx0XHQn5YWs5Ya2Jyxcblx0XHQn5ZG85bu2Jyxcblx0XHQn5rWu5bGgJyxcblx0XHQn5Y2z5aKoJyxcblx0XHQn5Y2V5LqOJyxcblx0XHQn5Zau5LqOJyxcblx0XHQn55Sw5LiYJyxcblx0XTtcblx0Y29uc3QgY29tcFN1cm5hbWVSZWdleCA9IG5ldyBSZWdFeHAoYF4oJHtjb21wU3VybmFtZXMuam9pbignfCcpfSkuYCk7XG5cdGNvbnN0IGZpbmRTdXJuYW1lID0gKHBhZ2VuYW1lOiBzdHJpbmcpID0+IHtcblx0XHRpZiAoY29tcFN1cm5hbWVSZWdleC50ZXN0KHBhZ2VuYW1lKSkge1xuXHRcdFx0cmV0dXJuIGNvbXBTdXJuYW1lUmVnZXguZXhlYyhwYWdlbmFtZSlbMV07XG5cdFx0fVxuXHRcdHJldHVybiBwYWdlbmFtZVswXTtcblx0fTtcblx0d2luZG93LnRvb2xzUmVkaXJlY3QuZmluZFJlZGlyZWN0Q2FsbGJhY2soKHBhZ2VuYW1lLCAkY29udGVudCkgPT4ge1xuXHRcdGxldCBzdXJuYW1lO1xuXHRcdGNvbnN0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcblx0XHQkY29udGVudC5maW5kKCc+IHAgPiBiJykuZWFjaCgoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRjb25zdCBwcmV2aW91c05vZGUgPSBlbGVtZW50LnByZXZpb3VzU2libGluZztcblx0XHRcdGlmIChwcmV2aW91c05vZGUgJiYgcHJlZml4UmVnZXgudGVzdChwcmV2aW91c05vZGUudGV4dENvbnRlbnQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hbWUgPSAkKGVsZW1lbnQpLnRleHQoKS50cmltKCk7XG5cdFx0XHRcdHN1cm5hbWUgfHw9IGZpbmRTdXJuYW1lKHBhZ2VuYW1lKTtcblx0XHRcdFx0dGl0bGVzLnB1c2goc3VybmFtZSArIG5hbWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBbLi4ubmV3IFNldCh0aXRsZXMpXTtcblx0fSk7XG59O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5leHBvcnQgY29uc3QgdG9vbHNSZWRpcmVjdF9vcHRfYm9sZHMgPSAoKSA9PiB7XG5cdHdpbmRvdy50b29sc1JlZGlyZWN0LmZpbmRSZWRpcmVjdEJ5U2VsZWN0b3IoJ2RpdiNtdy1jb250ZW50LXRleHQgcCA+IGInKTtcbn07XG4iLCAiaW1wb3J0ICcuL1Rvb2xzUmVkaXJlY3QubGVzcyc7XG5pbXBvcnQge1Rvb2xzUmVkaXJlY3R9IGZyb20gJy4vbW9kdWxlcy9jb3JlJztcbmltcG9ydCB7dG9vbHNSZWRpcmVjdE1lc3NhZ2VzfSBmcm9tICcuL21vZHVsZXMvbWVzc2FnZXMnO1xuXG5pbXBvcnQge3Rvb2xzUmVkaXJlY3RfYmlvX2xhdGluX25hbWVzfSBmcm9tICcuL21vZHVsZXMvYmlvLWxhdGluLW5hbWVzJztcbmltcG9ydCB7dG9vbHNSZWRpcmVjdF9jb3VydGVzeV9hbmRfYXJ0X25hbWVzfSBmcm9tICcuL21vZHVsZXMvY291cnRlc3ktYW5kLWFydC1uYW1lcyc7XG5pbXBvcnQge3Rvb2xzUmVkaXJlY3Rfb3B0X2JvbGRzfSBmcm9tICcuL21vZHVsZXMvb3B0LWJvbGRzJztcblxudG9vbHNSZWRpcmVjdE1lc3NhZ2VzKCk7XG5Ub29sc1JlZGlyZWN0LmluaXQoKTtcblxuaWYgKG13LnVzZXIub3B0aW9ucy5nZXQoJ2dhZGdldC1Ub29sc1JlZGlyZWN0LWJpby1sYXRpbi1uYW1lcycpKSB7XG5cdCQodG9vbHNSZWRpcmVjdF9iaW9fbGF0aW5fbmFtZXMpO1xufVxuXG5pZiAobXcudXNlci5vcHRpb25zLmdldCgnZ2FkZ2V0LVRvb2xzUmVkaXJlY3QtY291cnRlc3ktYW5kLWFydC1uYW1lcycpKSB7XG5cdCQodG9vbHNSZWRpcmVjdF9jb3VydGVzeV9hbmRfYXJ0X25hbWVzKTtcbn1cblxuaWYgKG13LnVzZXIub3B0aW9ucy5nZXQoJ2dhZGdldC1Ub29sc1JlZGlyZWN0LW9wdC1ib2xkcycpKSB7XG5cdCQodG9vbHNSZWRpcmVjdF9vcHRfYm9sZHMpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw2RkFBQUEsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0s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LEtBQUs4TyxhQUFhRSxXQUFXLEdBQUc7QUFDL0QsY0FBTU0sT0FBT2hQLEVBQUVHLE9BQU8sRUFBRWpCLEtBQUssRUFBRW1CLEtBQUs7QUFDcEMwTyxvQkFBQUEsVUFBWUQsWUFBWTFHLFFBQVE7QUFDaEM1RCxlQUFPcEYsS0FBSzJQLFVBQVVDLElBQUk7TUFDM0I7SUFDRCxDQUFDO0FBQ0QsV0FBTyxDQUFDLEdBQUcsSUFBSXJPLElBQUk2RCxNQUFNLENBQUM7RUFDM0IsQ0FBQztBQUNGOztBQ3pGTyxJQUFNeUssMEJBQTBCQSxNQUFNO0FBQzVDck8sU0FBT0MsY0FBY2YsdUJBQXVCLDJCQUEyQjtBQUN4RTs7QUNJQWtPLHNCQUFzQjtBQUN0QmxOLGNBQWNJLEtBQUs7QUFFbkIsSUFBSWxFLEdBQUdrUyxLQUFLQyxRQUFRalMsSUFBSSxzQ0FBc0MsR0FBRztBQUNoRThDLElBQUVvTyw2QkFBNkI7QUFDaEM7QUFFQSxJQUFJcFIsR0FBR2tTLEtBQUtDLFFBQVFqUyxJQUFJLDZDQUE2QyxHQUFHO0FBQ3ZFOEMsSUFBRTJPLG9DQUFvQztBQUN2QztBQUVBLElBQUkzUixHQUFHa1MsS0FBS0MsUUFBUWpTLElBQUksZ0NBQWdDLEdBQUc7QUFDMUQ4QyxJQUFFaVAsdUJBQXVCO0FBQzFCOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJTZXQiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAiU2V0IiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIldHX05BTUVTUEFDRV9JRFMiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJXR19OQU1FU1BBQ0VfTlVNQkVSIiwgIldHX1BBR0VfTkFNRSIsICJXR19VU0VSX0xBTkdVQUdFIiwgIklTX0NBVEVHT1JZIiwgIlNVRkZJWF9BUFBFTkQiLCAiU1VGRklYX1JFUExBQ0UiLCAiU1VGRklYX1NFVERFRkFVTFQiLCAiRURJVF9UQUciLCAiVkFSSUFOVFMiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAiYXJncyIsICJjb25jYXQiLCAibGVuZ3RoIiwgIm1lc3NhZ2UiLCAicGFyc2UiLCAicGxhaW4iLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAicmVxdWlyZSIsICJhcGkiLCAiaW5pdE13QXBpIiwgImZpbmRSZWRpcmVjdENhbGxiYWNrcyIsICJwYWdlV2l0aFJlZGlyZWN0VGV4dFN1ZmZpeCIsICJyZWRpcmVjdEV4Y2x1ZGVzIiwgIm5zUHJlZml4ZXMiLCAibnNDYW5vblByZWZpeCIsICJuc1ByZWZpeFBhdHRlcm4iLCAiX2kiLCAiX09iamVjdCRlbnRyaWVzIiwgIk9iamVjdCIsICJlbnRyaWVzIiwgInRleHQiLCAibnNpZCIsICJwdXNoIiwgInNwbGl0IiwgIlJlZ0V4cCIsICJqb2luIiwgImZpeE5hbWVzcGFjZSIsICJ0aXRsZSIsICJ0ZXN0IiwgInJlcGxhY2UiLCAiZmluZFJlZGlyZWN0Q2FsbGJhY2siLCAiY2FsbGJhY2siLCAiZmluZFJlZGlyZWN0QnlTZWxlY3RvciIsICJzZWxlY3RvciIsICIkIiwgIm1hcCIsICJfaW5kZXgiLCAiZWxlbWVudCIsICJlcSIsICJ0cmltIiwgInNldFJlZGlyZWN0VGV4dFN1ZmZpeCIsICJzdWZmaXgiLCAiZmxhZyIsICJmbGFnX3NldCIsICJmbGFnX2FwcGVuZCIsICJTZXQiLCAid2luZG93IiwgInRvb2xzUmVkaXJlY3QiLCAiVG9vbHNSZWRpcmVjdCIsICJ0YWJzZWxlbSIsICJ0YWdzZWxlbSIsICJ2YXJpYW50cyIsICJpbml0IiwgInNlbGYiLCAiJGJvZHkiLCAiYnV0dG9uIiwgImFkZENsYXNzIiwgImF0dHIiLCAiY3NzIiwgImFwcGVuZCIsICJvbiIsICJldmVudCIsICJwcmV2ZW50RGVmYXVsdCIsICJkaWFsb2ciLCAiZmluZCIsICJhZnRlciIsICJiZ2lmcmFtZSIsICJyZXNpemFibGUiLCAibW9kYWwiLCAid2lkdGgiLCAiTWF0aCIsICJyb3VuZCIsICJwb3NpdGlvbiIsICJoZWlnaHQiLCAiYXBwZW5kVG8iLCAiYWRkVGFicyIsICJ0YWJzIiwgImtuYW1lIiwgImhhc093biIsICJjaGFyQXQiLCAidG9VcHBlckNhc2UiLCAic2xpY2UiLCAidGFiIiwgInRhZyIsICJjb250IiwgImxvYWRWaWV3IiwgImNyZWF0ZVRhYiIsICJ0YWJuYW1lIiwgInRhYnRpdGxlIiwgIm9uQ2xpY2siLCAiY2FsbCIsICJsb2FkZWQiLCAiX2luaXRUYWJWaWV3IiwgIl9pbml0VGFiQ3JlYXRlIiwgImxvYWRDcmVhdGUiLCAidmlldyIsICJjcmVhdGUiLCAiZml4IiwgInBhZ2VuYW1lcyIsICJyZW1vdmUiLCAibG9hZGluZyIsICJidWxrRWRpdEJ5UmVnZXgiLCAidGhlbiIsICJzZXRUaW1lb3V0IiwgImJ1bGtFZGl0IiwgImFkZFJlZGlyZWN0VGV4dFN1ZmZpeCIsICJ0aXRsZXMiLCAic3VtbWFyeSIsICJmaWx0ZXIiLCAidiIsICJpIiwgImFyciIsICJpbmRleE9mIiwgInBvc3QiLCAiYWN0aW9uIiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgInByb3AiLCAicXVlcnkiLCAiZGVmZXJyZWRzIiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJwYWdlcyIsICJfc3RlcCIsICJzIiwgIm4iLCAiZG9uZSIsICJ2YWx1ZSIsICJwb3N0V2l0aFRva2VuIiwgInRhZ3MiLCAiZXJyIiwgImUiLCAiZiIsICJ3aGVuIiwgInJlZ2V4IiwgInJ2cHJvcCIsICJydnNsb3RzIiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgInBhZ2UiLCAiY29udGVudCIsICJyZXZpc2lvbnMiLCAic2xvdHMiLCAibmV3Q29udGVudCIsICJiYXNldGltZXN0YW1wIiwgInRpbWVzdGFtcCIsICJsb2FkVGFiQ29udCIsICJyZWxvYWQiLCAiaHRtbCIsICIkZGVzYyIsICIkdGV4dCIsICJhcHBseSIsICJmYWlsIiwgImFsd2F5cyIsICJhZGRNZXRob2RzIiwgImhyZWYiLCAiY2xpY2siLCAiY29udGFpbmVyIiwgInRvTG93ZXJDYXNlIiwgInJlbW92ZUNsYXNzIiwgInNlbGVjdEFsbCIsICJzZWxlY3RJbnZlcnNlIiwgImVhY2giLCAiJGVsZW1lbnQiLCAic2VsZWN0QWN0aW9uIiwgImNiIiwgInBhZ2VuYW1lIiwgImRhdGEiLCAiY2xpY2tBY3Rpb24iLCAiYnVpbGRMaW5rIiwgImNsYXNzbmFtZSIsICJhIiwgInRhcmdldCIsICJyZWwiLCAiJHBhcmVudCIsICJtZXRob2RzIiwgIiRjb250YWluZXIiLCAibWV0aG9kRXhpc3QiLCAiSlNPTiIsICJzdHJpbmdpZnkiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAibWV0aG9kIiwgImJ1aWxkU2VsZWN0aW9uIiwgIm1haW4iLCAibWV0ZCIsICJtdCIsICJkc2FiIiwgInNlbGUiLCAibG9hZFJlZGlyZWN0IiwgImZpbmRSZWRpcmVjdCIsICJkZWVwIiwgImRlZmVycmVkIiwgIkRlZmVycmVkIiwgInRvcCIsICJvbkNsaWNrRml4IiwgImVudHJ5IiwgInBhcmVudHMiLCAiZmlyc3QiLCAicmRsaW1pdCIsICJoYXNfcmVkaXJlY3QiLCAiZGVzYyIsICJtYXhpbXVtUmVkaXJlY3REZXB0aCIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJyZWRpcmVjdHMiLCAiX2l0ZXJhdG9yNSIsICJfc3RlcDUiLCAicmR0aXRsZSIsICJ1bHRpdGxlIiwgInV0aWwiLCAiZ2V0VXJsIiwgImlzQ3ljbGVSZWRpcmVjdCIsICJyZWRpcmVjdCIsICJyZXNvbHZlV2l0aCIsICJyZWplY3RXaXRoIiwgInByb21pc2UiLCAiZmluZFZhcmlhbnRzIiwgInN1ZmZpeFJlZyIsICJyZXRUaXRsZXMiLCAiX2kyIiwgIl9WQVJJQU5UUyIsICJ2YXJpYW50IiwgInhociIsICJ1c2VsYW5nIiwgImRpc3BsYXl0aXRsZSIsICJzdWZmaXhlcyIsICJfaTMiLCAiX2FyZ3MiLCAic3VmZml4QXJyIiwgImV4ZWMiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYiLCAibW9kaWZpZWRUaXRsZSIsICJmaW5kTm90RXhpc3RzIiwgImV4Y2x1ZGVzIiwgImFsbHRpdGxlcyIsICJfaTQiLCAiX1ZBUklBTlRTMiIsICJjb250ZW50bW9kZWwiLCAiX2k1IiwgIl9hcmdzMiIsICJfaXRlcmF0b3I3IiwgIl9zdGVwNyIsICJtaXNzaW5nIiwgImhhcyIsICJmcmNEZWZlcnJlZHMiLCAiJGNvbnRlbnQiLCAiX2k2IiwgIl9maW5kUmVkaXJlY3RDYWxsYmFjayIsICJyZXQiLCAib25DbGlja0NyZWF0ZSIsICJfaTciLCAiX2FyZ3MzIiwgImZ2dGl0bGVzIiwgIl9pdGVyYXRvcjgiLCAiX3N0ZXA4IiwgInJlZGxpbmsiLCAidG9vbHNSZWRpcmVjdE1lc3NhZ2VzIiwgImluY2x1ZGVzIiwgIm1lc3NhZ2VzIiwgInNldCIsICJ0b29sc1JlZGlyZWN0X2Jpb19sYXRpbl9uYW1lcyIsICJwcmVmaXhSZWdleCIsICJjb2xvblJlZ2V4IiwgIl9wYWdlbmFtZSIsICJwcmV2aW91c05vZGUiLCAicHJldmlvdXNTaWJsaW5nIiwgInRleHRDb250ZW50IiwgInRvb2xzUmVkaXJlY3RfY291cnRlc3lfYW5kX2FydF9uYW1lcyIsICJjb21wU3VybmFtZXMiLCAiY29tcFN1cm5hbWVSZWdleCIsICJmaW5kU3VybmFtZSIsICJzdXJuYW1lIiwgIm5hbWUiLCAidG9vbHNSZWRpcmVjdF9vcHRfYm9sZHMiLCAidXNlciIsICJvcHRpb25zIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgInNyYy9Ub29sc1JlZGlyZWN0L21vZHVsZXMvY29uc3RhbnQudHMiLCAic3JjL1Rvb2xzUmVkaXJlY3QvbW9kdWxlcy91dGlsL2dldE1lc3NhZ2VzLnRzIiwgInNyYy9Ub29sc1JlZGlyZWN0L21vZHVsZXMvY29yZS5qcyIsICJzcmMvVG9vbHNSZWRpcmVjdC9tb2R1bGVzL21lc3NhZ2VzLnRzIiwgInNyYy9Ub29sc1JlZGlyZWN0L21vZHVsZXMvYmlvLWxhdGluLW5hbWVzLnRzIiwgInNyYy9Ub29sc1JlZGlyZWN0L21vZHVsZXMvY291cnRlc3ktYW5kLWFydC1uYW1lcy50cyIsICJzcmMvVG9vbHNSZWRpcmVjdC9tb2R1bGVzL29wdC1ib2xkcy50cyIsICJzcmMvVG9vbHNSZWRpcmVjdC9Ub29sc1JlZGlyZWN0LmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxudmFyIFNldFByb3RvdHlwZSA9IFNldC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbiAgU2V0OiBTZXQsXG4gIGFkZDogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmFkZCksXG4gIGhhczogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmhhcyksXG4gIHJlbW92ZTogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlWydkZWxldGUnXSksXG4gIHByb3RvOiBTZXRQcm90b3R5cGVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcblxuLy8gUGVyZm9ybSA/IFJlcXVpcmVJbnRlcm5hbFNsb3QoTSwgW1tTZXREYXRhXV0pXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBoYXMoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVjb3JkLCBmbiwgSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQpIHtcbiAgdmFyIGl0ZXJhdG9yID0gSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQgPyByZWNvcmQgOiByZWNvcmQuaXRlcmF0b3I7XG4gIHZhciBuZXh0ID0gcmVjb3JkLm5leHQ7XG4gIHZhciBzdGVwLCByZXN1bHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGZuKHN0ZXAudmFsdWUpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIFNldFByb3RvdHlwZSA9IFNldEhlbHBlcnMucHJvdG87XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBrZXlzID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmtleXMpO1xudmFyIG5leHQgPSBrZXlzKG5ldyBTZXQoKSkubmV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoeyBpdGVyYXRvcjoga2V5cyhzZXQpLCBuZXh0OiBuZXh0IH0sIGZuKSA6IGZvckVhY2goc2V0LCBmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzQWNjZXNzb3IoU2V0SGVscGVycy5wcm90bywgJ3NpemUnLCAnZ2V0JykgfHwgZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gc2V0LnNpemU7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBHZXRJdGVyYXRvckRpcmVjdChvYmopYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzLyNzZWMtZ2V0aXRlcmF0b3JkaXJlY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIGl0ZXJhdG9yOiBvYmosXG4gICAgbmV4dDogb2JqLm5leHQsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG52YXIgSU5WQUxJRF9TSVpFID0gJ0ludmFsaWQgc2l6ZSc7XG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBTZXRSZWNvcmQgPSBmdW5jdGlvbiAoc2V0LCBpbnRTaXplKSB7XG4gIHRoaXMuc2V0ID0gc2V0O1xuICB0aGlzLnNpemUgPSBtYXgoaW50U2l6ZSwgMCk7XG4gIHRoaXMuaGFzID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICB0aGlzLmtleXMgPSBhQ2FsbGFibGUoc2V0LmtleXMpO1xufTtcblxuU2V0UmVjb3JkLnByb3RvdHlwZSA9IHtcbiAgZ2V0SXRlcmF0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SXRlcmF0b3JEaXJlY3QoYW5PYmplY3QoY2FsbCh0aGlzLmtleXMsIHRoaXMuc2V0KSkpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGNhbGwodGhpcy5oYXMsIHRoaXMuc2V0LCBpdCk7XG4gIH1cbn07XG5cbi8vIGBHZXRTZXRSZWNvcmRgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNzZWMtZ2V0c2V0cmVjb3JkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgYW5PYmplY3Qob2JqKTtcbiAgdmFyIG51bVNpemUgPSArb2JqLnNpemU7XG4gIC8vIE5PVEU6IElmIHNpemUgaXMgdW5kZWZpbmVkLCB0aGVuIG51bVNpemUgd2lsbCBiZSBOYU5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bVNpemUgIT09IG51bVNpemUpIHRocm93IG5ldyAkVHlwZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHZhciBpbnRTaXplID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1TaXplKTtcbiAgaWYgKGludFNpemUgPCAwKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgcmV0dXJuIG5ldyBTZXRSZWNvcmQob2JqLCBpbnRTaXplKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIGVsc2UgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbnZhciBjcmVhdGVTZXRMaWtlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIHtcbiAgICBzaXplOiBzaXplLFxuICAgIGhhczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcbiAgdHJ5IHtcbiAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgwKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGxhdGUgc3BlYyBjaGFuZ2UsIGVhcmx5IFdlYktpdCB+IFNhZmFyaSAxNy4wIGJldGEgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcGFzcyBpdFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHMvcHVsbC84OFxuICAgICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoLTEpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdkaWZmZXJlbmNlJykgfSwge1xuICBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHtcbiAgICBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoaGFzKE8sIGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcnNlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxudmFyIElOQ09SUkVDVCA9ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpbnRlcnNlY3Rpb24nKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBlcy9uby1zZXQgLS0gdGVzdGluZ1xuICByZXR1cm4gU3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwgMiwgM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLCAyXSkpKSkgIT09ICczLDInO1xufSk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVCB9LCB7XG4gIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGlzam9pbnRGcm9tKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0Rpc2pvaW50RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNEaXNqb2ludEZyb20nKSB9LCB7XG4gIGlzRGlzam9pbnRGcm9tOiBpc0Rpc2pvaW50RnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpdGVyYXRlKE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3Vic2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1YnNldE9mJykgfSwge1xuICBpc1N1YnNldE9mOiBpc1N1YnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3VwZXJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDwgb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIWhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdXBlcnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3VwZXJzZXRPZicpIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBpc1N1cGVyc2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN5bW1ldHJpY0RpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgICBlbHNlIGFkZChyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc3ltbWV0cmljRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnc3ltbWV0cmljRGlmZmVyZW5jZScpIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogc3ltbWV0cmljRGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdW5pb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3VuaW9uJykgfSwge1xuICB1bmlvbjogdW5pb25cbn0pO1xuIiwgImNvbnN0IFdHX05BTUVTUEFDRV9JRFMgPSBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpO1xuY29uc3QgV0dfTkFNRVNQQUNFX05VTUJFUjogbnVtYmVyID0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKTtcbmNvbnN0IFdHX1BBR0VfTkFNRTogc3RyaW5nID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuY29uc3QgV0dfVVNFUl9MQU5HVUFHRTogc3RyaW5nID0gbXcuY29uZmlnLmdldCgnd2dVc2VyTGFuZ3VhZ2UnKTtcblxuY29uc3QgSVNfQ0FURUdPUlkgPSBXR19OQU1FU1BBQ0VfTlVNQkVSID09PSAxNDtcblxuY29uc3QgU1VGRklYX0FQUEVORCA9IDA7XG5jb25zdCBTVUZGSVhfUkVQTEFDRSA9IDE7XG5jb25zdCBTVUZGSVhfU0VUREVGQVVMVCA9IDI7XG5cbmNvbnN0IEVESVRfVEFHID0gJ1Rvb2xzUmVkaXJlY3QnO1xuXG5jb25zdCBWQVJJQU5UUyA9IFsnemgtaGFucycsICd6aC1oYW50JywgJ3poLWNuJywgJ3poLWhrJywgJ3poLW1vJywgJ3poLXNnJywgJ3poLW15JywgJ3poLXR3J107XG5cbmV4cG9ydCB7XG5cdEVESVRfVEFHLFxuXHRJU19DQVRFR09SWSxcblx0U1VGRklYX0FQUEVORCxcblx0U1VGRklYX1JFUExBQ0UsXG5cdFNVRkZJWF9TRVRERUZBVUxULFxuXHRWQVJJQU5UUyxcblx0V0dfTkFNRVNQQUNFX0lEUyxcblx0V0dfTkFNRVNQQUNFX05VTUJFUixcblx0V0dfUEFHRV9OQU1FLFxuXHRXR19VU0VSX0xBTkdVQUdFLFxufTtcbiIsICJleHBvcnQgY29uc3QgZ2V0TWVzc2FnZSA9IChrZXk6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pID0+IHtcblx0Ly8gTWVzc2FnZXMgdGhhdCBjYW4gYmUgdXNlZCBoZXJlOlxuXHQvLyAqIHNlZSBtZXNzYWdlcy50c1xuXHQvLyAqIGZvciBtb3JlIGluZm9ybWF0aW9uXG5cdGtleSA9IGB0b29sc3JlZGlyZWN0LSR7a2V5fWA7XG5cdHJldHVybiBhcmdzLmxlbmd0aCA/IG13Lm1lc3NhZ2Uoa2V5LCAuLi5hcmdzKS5wYXJzZSgpIDogbXcubWVzc2FnZShrZXkpLnBsYWluKCk7XG59O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge1xuXHRFRElUX1RBRyxcblx0SVNfQ0FURUdPUlksXG5cdFNVRkZJWF9BUFBFTkQsXG5cdFNVRkZJWF9SRVBMQUNFLFxuXHRTVUZGSVhfU0VUREVGQVVMVCxcblx0VkFSSUFOVFMsXG5cdFdHX05BTUVTUEFDRV9JRFMsXG5cdFdHX05BTUVTUEFDRV9OVU1CRVIsXG5cdFdHX1BBR0VfTkFNRSxcbn0gZnJvbSAnLi9jb25zdGFudCc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4vdXRpbC9nZXRNZXNzYWdlcyc7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpID0gaW5pdE13QXBpKCdUb29sc1JlZGlyZWN0LzIuMCcpO1xuXG5jb25zdCBmaW5kUmVkaXJlY3RDYWxsYmFja3MgPSBbXTtcbmNvbnN0IHBhZ2VXaXRoUmVkaXJlY3RUZXh0U3VmZml4ID0ge307XG5jb25zdCByZWRpcmVjdEV4Y2x1ZGVzID0ge307XG5jb25zdCBuc1ByZWZpeGVzID0gW107XG5sZXQgbnNDYW5vblByZWZpeCwgbnNQcmVmaXhQYXR0ZXJuO1xuXG5mb3IgKGNvbnN0IFt0ZXh0LCBuc2lkXSBvZiBPYmplY3QuZW50cmllcyhXR19OQU1FU1BBQ0VfSURTKSkge1xuXHRpZiAobnNpZCA9PT0gV0dfTkFNRVNQQUNFX05VTUJFUiAmJiAhIXRleHQpIHtcblx0XHRuc1ByZWZpeGVzLnB1c2godGV4dCk7XG5cdH1cbn1cblxuaWYgKFdHX05BTUVTUEFDRV9OVU1CRVIgPT09IDApIHtcblx0Ly8gYXJ0aWNsZXNcblx0bnNDYW5vblByZWZpeCA9ICcnO1xuXHRuc1ByZWZpeFBhdHRlcm4gPSAvXi87XG59IGVsc2Uge1xuXHRuc0Nhbm9uUHJlZml4ID0gYCR7V0dfUEFHRV9OQU1FLnNwbGl0KCc6JylbMF19OmA7XG5cdG5zUHJlZml4UGF0dGVybiA9IG5ldyBSZWdFeHAoYF4oJHtuc1ByZWZpeGVzLmpvaW4oJ3wnKX0pOmAsICdpJyk7XG59XG5cbmNvbnN0IGZpeE5hbWVzcGFjZSA9ICh0aXRsZSkgPT4ge1xuXHRpZiAoV0dfTkFNRVNQQUNFX05VTUJFUiA9PT0gMCkge1xuXHRcdC8vIGRvIG5vdGhpbmcgaWYgaXQncyBhcnRpY2xlc1xuXHRcdHJldHVybiB0aXRsZTtcblx0fSBlbHNlIGlmIChuc1ByZWZpeFBhdHRlcm4udGVzdCh0aXRsZSkpIHtcblx0XHQvLyBjYW5vbml6ZSB0aGUgbmFtZXNwYWNlXG5cdFx0cmV0dXJuIHRpdGxlLnJlcGxhY2UobnNQcmVmaXhQYXR0ZXJuLCBuc0Nhbm9uUHJlZml4KTtcblx0fVxuXHQvLyBkb24ndCBoYXZlIGEgbmFtZXNwYWNlXG5cdHJldHVybiBuc0Nhbm9uUHJlZml4ICsgdGl0bGU7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgY3VzdG9tIGNhbGxiYWNrIGZvciBmaW5kaW5nIG5ldyBwb3RlbnRpYWwgcmVkaXJlY3QgdGl0bGVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIChwYWdlbmFtZSwgJGNvbnRlbnQsIHRpdGxlcykgPT4gdGl0bGUgbGlzdFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gYXJnc1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5jb25zdCBmaW5kUmVkaXJlY3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaywgLi4uYXJncykge1xuXHRpZiAoY2FsbGJhY2spIHtcblx0XHRmaW5kUmVkaXJlY3RDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG5cdH0gZWxzZSB7XG5cdFx0ZmluZFJlZGlyZWN0Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2ssIC4uLmFyZ3MpO1xuXHR9XG5cdHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBGaW5kIG5ldyBwb3RlbnRpYWwgcmVkaXJlY3QgdGl0bGVzIHRocm91Z2ggc2VsZWN0b3IocylcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuY29uc3QgZmluZFJlZGlyZWN0QnlTZWxlY3RvciA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuXHQvKiBBIHNob3J0Y3V0IHRvIGFkZCBDU1Mgc2VsZWN0b3JzIGFzIHJ1bGUgdG8gZmluZCBuZXcgcG90ZW50aWFsIHJlZGlyZWN0IHRpdGxlcy4gKi9cblx0ZmluZFJlZGlyZWN0Q2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdHJldHVybiAkKHNlbGVjdG9yKS5tYXAoKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuICQoZWxlbWVudCkuZXEoMCkudGV4dCgpLnRyaW0oKSB8fCBudWxsO1xuXHRcdH0pO1xuXHR9KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5jb25zdCBzZXRSZWRpcmVjdFRleHRTdWZmaXggPSAodGl0bGUsIHN1ZmZpeCwgZmxhZykgPT4ge1xuXHRsZXQgZmxhZ19zZXQgPSBmYWxzZTtcblx0bGV0IGZsYWdfYXBwZW5kID0gZmFsc2U7XG5cdGZsYWcgfHw9IFNVRkZJWF9BUFBFTkQ7IC8vIGRlZmF1bHQgYXBwZW5kXG5cdGZsYWdfc2V0ID0gZmxhZyA9PT0gU1VGRklYX1JFUExBQ0U7XG5cdHRpdGxlID0gZml4TmFtZXNwYWNlKHRpdGxlKTtcblx0aWYgKHRpdGxlIGluIHBhZ2VXaXRoUmVkaXJlY3RUZXh0U3VmZml4KSB7XG5cdFx0ZmxhZ19hcHBlbmQgPSBmbGFnID09PSBTVUZGSVhfQVBQRU5EO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG5vdCBleGlzdCwgZXZlcnkgZmxhZyBjYW4gc2V0XG5cdFx0ZmxhZ19zZXQgPSB0cnVlO1xuXHR9XG5cdHBhZ2VXaXRoUmVkaXJlY3RUZXh0U3VmZml4W3RpdGxlXSA9IFtdO1xuXHRpZiAoZmxhZ19zZXQpIHtcblx0XHRwYWdlV2l0aFJlZGlyZWN0VGV4dFN1ZmZpeFt0aXRsZV0gPSBbc3VmZml4XTtcblx0fSBlbHNlIGlmIChmbGFnX2FwcGVuZCkge1xuXHRcdHBhZ2VXaXRoUmVkaXJlY3RUZXh0U3VmZml4W3RpdGxlXS5wdXNoKHN1ZmZpeCk7XG5cdFx0Ly8gRGUtZHVwbGljYXRlXG5cdFx0cGFnZVdpdGhSZWRpcmVjdFRleHRTdWZmaXhbdGl0bGVdID0gWy4uLm5ldyBTZXQocGFnZVdpdGhSZWRpcmVjdFRleHRTdWZmaXhbdGl0bGVdKV07XG5cdH1cbn07XG5cbi8qIGV4cG9ydCBnbG9iYWwgb2JqZWN0ICovXG53aW5kb3cudG9vbHNSZWRpcmVjdCA9IHtcblx0ZmluZFJlZGlyZWN0Q2FsbGJhY2ssXG5cdGZpbmRSZWRpcmVjdEJ5U2VsZWN0b3IsXG5cdHNldFJlZGlyZWN0VGV4dFN1ZmZpeCxcbn07XG5cbmV4cG9ydCBjb25zdCBUb29sc1JlZGlyZWN0ID0ge1xuXHR0YWJzZWxlbTogbnVsbCxcblx0dGFnc2VsZW06IG51bGwsXG5cdHZhcmlhbnRzOiBWQVJJQU5UUyxcblx0aW5pdCgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0XHRjb25zdCBidXR0b24gPSAkKCc8bGk+Jylcblx0XHRcdC5hZGRDbGFzcygnbXctbGlzdC1pdGVtIGNvbGxhcHNpYmxlIHZlY3Rvci10YWItbm9pY29uJylcblx0XHRcdC5hdHRyKCdpZCcsICdjYS1yZWRpcmVjdCcpXG5cdFx0XHQuY3NzKCdjdXJzb3InLCAncG9pbnRlcicpXG5cdFx0XHQuYXBwZW5kKCQoJzxhPicpLmF0dHIoJ3RpdGxlJywgZ2V0TWVzc2FnZSgnYnRuZGVzYycpKS50ZXh0KGdldE1lc3NhZ2UoJ2J0bnRpdGxlJykpKTtcblx0XHRidXR0b24ub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0c2VsZi5kaWFsb2coKTtcblx0XHR9KTtcblx0XHQkYm9keS5maW5kKCdsaSNjYS1oaXN0b3J5JykuYWZ0ZXIoYnV0dG9uKTtcblx0fSxcblx0ZGlhbG9nKCkge1xuXHRcdGNvbnN0IGRpYWxvZyA9ICQoJzxkaXY+Jylcblx0XHRcdC5hdHRyKCd0aXRsZScsIGdldE1lc3NhZ2UoJ2RsZ3RpdGxlJykpXG5cdFx0XHQuYWRkQ2xhc3MoJ2RpYWxvZy1yZWRpcmVjdCcpXG5cdFx0XHQuZGlhbG9nKHtcblx0XHRcdFx0YmdpZnJhbWU6IHRydWUsXG5cdFx0XHRcdHJlc2l6YWJsZTogZmFsc2UsXG5cdFx0XHRcdG1vZGFsOiB0cnVlLFxuXHRcdFx0XHR3aWR0aDogTWF0aC5yb3VuZCgkKHdpbmRvdykud2lkdGgoKSAqIDAuOCksXG5cdFx0XHRcdHBvc2l0aW9uOiAnY2VudGVyJyxcblx0XHRcdH0pO1xuXHRcdGRpYWxvZy5jc3MoJ21heC1oZWlnaHQnLCBgJHtNYXRoLnJvdW5kKCQod2luZG93KS5oZWlnaHQoKSAqIDAuOCl9cHhgKTtcblx0XHR0aGlzLnRhYnNlbGVtID0gJCgnPGRpdj4nKS5hZGRDbGFzcygndGFiLXJlZGlyZWN0JykuYXBwZW5kVG8oZGlhbG9nKTtcblx0XHR0aGlzLnRhZ3NlbGVtID0gJCgnPHVsPicpLmFwcGVuZFRvKHRoaXMudGFic2VsZW0pO1xuXHRcdHRoaXMuYWRkVGFicygpO1xuXHRcdHRoaXMudGFic2VsZW0udGFicygpO1xuXHR9LFxuXHRhZGRUYWJzKCkge1xuXHRcdGZvciAoY29uc3Qga25hbWUgaW4gdGhpcy50YWJzKSB7XG5cdFx0XHRpZiAoT2JqZWN0Lmhhc093bih0aGlzLnRhYnMsIGtuYW1lKSkge1xuXHRcdFx0XHRpZiAodGhpcy50YWJzW2tuYW1lXSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdHRoaXMudGFic1trbmFtZV0gPSB0aGlzW2BfaW5pdFRhYiR7a25hbWVbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtrbmFtZS5zbGljZSgxKX1gXSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHRhYiA9IHRoaXMudGFic1trbmFtZV07XG5cdFx0XHRcdHRoaXMudGFnc2VsZW0uYXBwZW5kKHRhYi50YWcpO1xuXHRcdFx0XHR0aGlzLnRhYnNlbGVtLmFwcGVuZCh0YWIuY29udCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGRlZmF1bHQgdGFiLCBhdXRvbG9hZCB3aGVuIGRpYWxvZyBpbml0aWF0ZVxuXHRcdHRoaXMubG9hZFZpZXcoKTtcblx0fSxcblx0Y3JlYXRlVGFiKHRhYm5hbWUsIHRhYnRpdGxlLCBvbkNsaWNrKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0Y29uc3QgdGFnID0gJCgnPGxpPicpLmFwcGVuZCgkKCc8YT4nKS5hdHRyKCdocmVmJywgYCN0YWItJHt0YWJuYW1lfWApLnRleHQodGFidGl0bGUpKTtcblx0XHRjb25zdCBjb250ID0gJCgnPGRpdj4nKS5hdHRyKCdpZCcsIGB0YWItJHt0YWJuYW1lfWApO1xuXHRcdCQoJ2EnLCB0YWcpLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdG9uQ2xpY2suY2FsbChzZWxmKTtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGFnLFxuXHRcdFx0Y29udCxcblx0XHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0fTtcblx0fSxcblx0X2luaXRUYWJWaWV3KCkge1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVRhYigndmlldycsIGdldE1lc3NhZ2UoJ3RhYnZpZXd0aXRsZScpLCB0aGlzLmxvYWRWaWV3KTtcblx0fSxcblx0X2luaXRUYWJDcmVhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVGFiKCdjcmVhdGUnLCBnZXRNZXNzYWdlKCd0YWJjcmVhdGV0aXRsZScpLCB0aGlzLmxvYWRDcmVhdGUpO1xuXHR9LFxuXHR0YWJzOiB7XG5cdFx0dmlldzogbnVsbCxcblx0XHRjcmVhdGU6IG51bGwsXG5cdH0sXG5cdGZpeChwYWdlbmFtZXMpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHQkKCdwLmRlc2MnLCBzZWxmLnRhYnMudmlldy5jb250KS50ZXh0KGdldE1lc3NhZ2UoJ2ZpeGxvYWRpbmcnKSk7XG5cdFx0JCgncFtjbGFzcyE9ZGVzY10nLCBzZWxmLnRhYnMudmlldy5jb250KS5yZW1vdmUoKTtcblx0XHRzZWxmLmxvYWRpbmcoc2VsZi50YWJzLnZpZXcuY29udCk7XG5cdFx0dm9pZCBzZWxmXG5cdFx0XHQuYnVsa0VkaXRCeVJlZ2V4KHBhZ2VuYW1lcywgL1xccypcXFtcXFsuKj9cXF1cXF0vLCBgIFtbJHtXR19QQUdFX05BTUV9XV1gLCBnZXRNZXNzYWdlKCdmaXhzdW1tYXJ5JykpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdC8vIGRlbGF5IGxvYWQgYmVmb3JlIHRoZSBhc3luY2hyb25vdXMgdGFza3Mgb24gc2VydmVyIGZpbmlzaGVkXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHNlbGYubG9hZGVkKHNlbGYudGFicy52aWV3LmNvbnQpO1xuXHRcdFx0XHRcdHNlbGYubG9hZFZpZXcodHJ1ZSk7XG5cdFx0XHRcdH0sIDMwMDApO1xuXHRcdFx0fSk7XG5cdH0sXG5cdGNyZWF0ZShwYWdlbmFtZXMpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHQkKCdwLmRlc2MnLCBzZWxmLnRhYnMuY3JlYXRlLmNvbnQpLnRleHQoZ2V0TWVzc2FnZSgnY3JlYXRlbG9hZGluZycpKTtcblx0XHQkKCdwW2NsYXNzIT1kZXNjXScsIHNlbGYudGFicy5jcmVhdGUuY29udCkucmVtb3ZlKCk7XG5cdFx0c2VsZi5sb2FkaW5nKHNlbGYudGFicy5jcmVhdGUuY29udCk7XG5cdFx0dm9pZCBzZWxmXG5cdFx0XHQuYnVsa0VkaXQoXG5cdFx0XHRcdHBhZ2VuYW1lcyxcblx0XHRcdFx0Z2V0TWVzc2FnZSgnY3JlYXRldGV4dCcpLnJlcGxhY2UoJyQxJywgV0dfUEFHRV9OQU1FKSxcblx0XHRcdFx0Z2V0TWVzc2FnZSgnY3JlYXRlc3VtbWFyeScpLnJlcGxhY2UoJyQxJywgV0dfUEFHRV9OQU1FKVxuXHRcdFx0KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHQvLyBkZWxheSBsb2FkIGJlZm9yZSB0aGUgYXN5bmNocm9ub3VzIHRhc2tzIG9uIHNlcnZlciBmaW5pc2hlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRzZWxmLmxvYWRlZChzZWxmLnRhYnMuY3JlYXRlLmNvbnQpO1xuXHRcdFx0XHRcdHNlbGYudGFicy52aWV3LmxvYWRlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdHNlbGYubG9hZENyZWF0ZSh0cnVlKTtcblx0XHRcdFx0fSwgNTAwKTtcblx0XHRcdH0pO1xuXHR9LFxuXHRhZGRSZWRpcmVjdFRleHRTdWZmaXgodGl0bGUsIHRleHQpIHtcblx0XHRpZiAodGl0bGUgaW4gcGFnZVdpdGhSZWRpcmVjdFRleHRTdWZmaXgpIHtcblx0XHRcdHRleHQgKz0gcGFnZVdpdGhSZWRpcmVjdFRleHRTdWZmaXhbdGl0bGVdLmpvaW4oJycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGV4dDtcblx0fSxcblx0YnVsa0VkaXQodGl0bGVzLCB0ZXh0LCBzdW1tYXJ5KSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0dGl0bGVzID0gdGl0bGVzLmZpbHRlcigodiwgaSwgYXJyKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXJyLmluZGV4T2YodikgPT09IGk7XG5cdFx0fSk7XG5cdFx0dGl0bGVzID0gdGl0bGVzLmpvaW4oJ3wnKTtcblx0XHRyZXR1cm4gYXBpXG5cdFx0XHQucG9zdCh7XG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdFx0cHJvcDogJ2luZm8nLFxuXHRcdFx0XHR0aXRsZXMsXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHtxdWVyeX0pID0+IHtcblx0XHRcdFx0Y29uc3QgZGVmZXJyZWRzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3Qge3RpdGxlfSBvZiBxdWVyeS5wYWdlcykge1xuXHRcdFx0XHRcdGRlZmVycmVkcy5wdXNoKFxuXHRcdFx0XHRcdFx0YXBpLnBvc3RXaXRoVG9rZW4oJ2NzcmYnLCB7XG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogJ2VkaXQnLFxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRcdFx0XHR0aXRsZSxcblx0XHRcdFx0XHRcdFx0dGV4dDogc2VsZi5hZGRSZWRpcmVjdFRleHRTdWZmaXgodGl0bGUsIHRleHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5LFxuXHRcdFx0XHRcdFx0XHR0YWdzOiBFRElUX1RBRyxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gJC53aGVuKC4uLmRlZmVycmVkcyk7XG5cdFx0XHR9KTtcblx0fSxcblx0YnVsa0VkaXRCeVJlZ2V4KHRpdGxlcywgcmVnZXgsIHRleHQsIHN1bW1hcnkpIHtcblx0XHR0aXRsZXMgPSB0aXRsZXMuZmlsdGVyKCh2LCBpLCBhcnIpID0+IHtcblx0XHRcdHJldHVybiBhcnIuaW5kZXhPZih2KSA9PT0gaTtcblx0XHR9KTtcblx0XHR0aXRsZXMgPSB0aXRsZXMuam9pbignfCcpO1xuXHRcdHJldHVybiBhcGlcblx0XHRcdC5wb3N0KHtcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRwcm9wOiAncmV2aXNpb25zJyxcblx0XHRcdFx0cnZwcm9wOiAnY29udGVudCcsXG5cdFx0XHRcdHJ2c2xvdHM6ICdtYWluJyxcblx0XHRcdFx0dGl0bGVzLFxuXHRcdFx0fSlcblx0XHRcdC50aGVuKCh7cXVlcnl9KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRlZmVycmVkcyA9IFtdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHBhZ2Ugb2YgcXVlcnkucGFnZXMpIHtcblx0XHRcdFx0XHRjb25zdCB7Y29udGVudH0gPSBwYWdlLnJldmlzaW9uc1swXS5zbG90c1snbWFpbiddO1xuXHRcdFx0XHRcdGNvbnN0IG5ld0NvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UocmVnZXgsIHRleHQpO1xuXHRcdFx0XHRcdGRlZmVycmVkcy5wdXNoKFxuXHRcdFx0XHRcdFx0YXBpLnBvc3RXaXRoVG9rZW4oJ2NzcmYnLCB7XG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogJ2VkaXQnLFxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogcGFnZS50aXRsZSxcblx0XHRcdFx0XHRcdFx0dGV4dDogbmV3Q29udGVudCxcblx0XHRcdFx0XHRcdFx0dGFnczogRURJVF9UQUcsXG5cdFx0XHRcdFx0XHRcdGJhc2V0aW1lc3RhbXA6IHBhZ2UucmV2aXNpb25zWzBdLnRpbWVzdGFtcCxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gJC53aGVuKC4uLmRlZmVycmVkcyk7XG5cdFx0XHR9KTtcblx0fSxcblx0bG9hZFRhYkNvbnQodGFibmFtZSwgY2FsbGJhY2ssIHJlbG9hZCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGNvbnN0IHRhYiA9IHNlbGYudGFic1t0YWJuYW1lXTtcblx0XHRpZiAocmVsb2FkKSB7XG5cdFx0XHR0YWIubG9hZGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICghdGFiLmxvYWRlZCkge1xuXHRcdFx0dGFiLmNvbnQuaHRtbCgnJyk7XG5cdFx0XHQvL1xuXHRcdFx0Y29uc3QgJGRlc2MgPSAkKCc8cD4nKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ2Rlc2MnKVxuXHRcdFx0XHQuYXBwZW5kKCQoJzxzcGFuPicpLmFkZENsYXNzKCdkZXNjLXRleHQnKS50ZXh0KGdldE1lc3NhZ2UoJ3JlZGlsb2FkaW5nJykpKVxuXHRcdFx0XHQuYXBwZW5kVG8odGFiLmNvbnQpO1xuXHRcdFx0Y29uc3QgJHRleHQgPSAkZGVzYy5maW5kKCc+IC5kZXNjLXRleHQnKTtcblx0XHRcdGNhbGxiYWNrXG5cdFx0XHRcdC5hcHBseShzZWxmKVxuXHRcdFx0XHQuZG9uZSgoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gTWVzc2FnZXMgdGhhdCBjYW4gYmUgdXNlZCBoZXJlOlxuXHRcdFx0XHRcdC8vICogc2VlIG1lc3NhZ2VzLmpzXG5cdFx0XHRcdFx0Ly8gKiBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXHRcdFx0XHRcdCR0ZXh0LnRleHQoZ2V0TWVzc2FnZShgdGFiJHt0YWJuYW1lfWRlc2NgKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mYWlsKCgpID0+IHtcblx0XHRcdFx0XHQvLyBNZXNzYWdlcyB0aGF0IGNhbiBiZSB1c2VkIGhlcmU6XG5cdFx0XHRcdFx0Ly8gKiBzZWUgbWVzc2FnZXMuanNcblx0XHRcdFx0XHQvLyAqIGZvciBtb3JlIGluZm9ybWF0aW9uXG5cdFx0XHRcdFx0JHRleHQudGV4dChnZXRNZXNzYWdlKGB0YWIke3RhYm5hbWV9bm90Zm91bmRgKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5hbHdheXMoKCkgPT4ge1xuXHRcdFx0XHRcdHNlbGYuYWRkTWV0aG9kcygkZGVzYywgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRocmVmOiAnI3JlZnJlc2gnLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgncmVmcmVzaCcpLFxuXHRcdFx0XHRcdFx0XHRjbGljayhldmVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZi5sb2FkVGFiQ29udCh0YWJuYW1lLCBjYWxsYmFjaywgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdHRhYi5sb2FkZWQgPSB0cnVlO1xuXHRcdH1cblx0fSxcblx0bG9hZGluZyhjb250YWluZXIpIHtcblx0XHRpZiAoY29udGFpbmVyLnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpID09PSAnc3BhbicpIHtcblx0XHRcdGNvbnRhaW5lci5hZGRDbGFzcygnbXctYWpheC1sb2FkZXInKTtcblx0XHR9IGVsc2UgaWYgKCQoJ3NwYW4ubXctYWpheC1sb2FkZXInLCBjb250YWluZXIpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0JCgnPHNwYW4+JykuYWRkQ2xhc3MoJ213LWFqYXgtbG9hZGVyJykuYXBwZW5kVG8oY29udGFpbmVyKTtcblx0XHR9XG5cdH0sXG5cdGxvYWRlZChjb250YWluZXIpIHtcblx0XHRpZiAoY29udGFpbmVyLnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpID09PSAnc3BhbicpIHtcblx0XHRcdGNvbnRhaW5lci5yZW1vdmVDbGFzcygnbXctYWpheC1sb2FkZXInKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCgnc3Bhbi5tdy1hamF4LWxvYWRlcicsIGNvbnRhaW5lcikucmVtb3ZlKCk7XG5cdFx0fVxuXHR9LFxuXHRzZWxlY3RBbGwoY29udCkge1xuXHRcdCQoJ2lucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpJywgY29udCkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuXHR9LFxuXHRzZWxlY3RJbnZlcnNlKGNvbnQpIHtcblx0XHQkKCdpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKScsIGNvbnQpLmVhY2goKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuXHRcdFx0JGVsZW1lbnQucHJvcCgnY2hlY2tlZCcsICEkZWxlbWVudC5wcm9wKCdjaGVja2VkJykpO1xuXHRcdH0pO1xuXHR9LFxuXHRzZWxlY3RBY3Rpb24oY29udCwgY2IpIHtcblx0XHRjb25zdCBwYWdlbmFtZXMgPSBbXTtcblx0XHQkKCdpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkJywgY29udCkuZWFjaCgoX2luZGV4LCBwYWdlbmFtZSkgPT4ge1xuXHRcdFx0cGFnZW5hbWVzLnB1c2goJChwYWdlbmFtZSkuZGF0YSgncGFnZS10aXRsZScpKTtcblx0XHR9KTtcblx0XHRpZiAocGFnZW5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNiLmNhbGwodGhpcywgcGFnZW5hbWVzKTtcblx0XHR9XG5cdH0sXG5cdGNsaWNrQWN0aW9uKGNvbnQsIGNiKSB7XG5cdFx0Y29uc3QgcGFnZW5hbWUgPSAkKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nLCBjb250KS5kYXRhKCdwYWdlLXRpdGxlJyk7XG5cdFx0Y2IuY2FsbCh0aGlzLCBbcGFnZW5hbWVdKTtcblx0fSxcblx0YnVpbGRMaW5rKHt0aXRsZSwgaHJlZiwgY2xpY2ssIGNsYXNzbmFtZX0pIHtcblx0XHRjb25zdCBhID0gJCgnPGE+Jylcblx0XHRcdC5hdHRyKHtcblx0XHRcdFx0dGl0bGUsXG5cdFx0XHRcdGhyZWYsXG5cdFx0XHRcdHRhcmdldDogJ19ibGFuaycsXG5cdFx0XHRcdHJlbDogJ25vb3BlbmVyIG5vcmVmZXJyZXInLFxuXHRcdFx0fSlcblx0XHRcdC50ZXh0KHRpdGxlKTtcblx0XHRpZiAoY2xpY2spIHtcblx0XHRcdGEub24oJ2NsaWNrJywgY2xpY2spO1xuXHRcdH1cblx0XHRpZiAoY2xhc3NuYW1lKSB7XG5cdFx0XHRhLmFkZENsYXNzKGNsYXNzbmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiAkKCc8c3Bhbj4nKS5hZGRDbGFzcygndG9vbHMtcmVkaXJlY3RfbGluaycpLmFwcGVuZChhKTtcblx0fSxcblx0YWRkTWV0aG9kcygkcGFyZW50LCBtZXRob2RzKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0bGV0ICRjb250YWluZXIgPSAkcGFyZW50LmZpbmQoJz4gLnRvb2xzLXJlZGlyZWN0X21ldGhvZHMnKTtcblx0XHRjb25zdCBtZXRob2RFeGlzdCA9ICh7aHJlZn0pID0+IHtcblx0XHRcdHJldHVybiAkY29udGFpbmVyLmZpbmQoYGFbaHJlZj0ke0pTT04uc3RyaW5naWZ5KGhyZWYpfV1gKS5sZW5ndGggPiAwO1xuXHRcdH07XG5cdFx0aWYgKCRjb250YWluZXIubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQkY29udGFpbmVyID0gJCgnPHNwYW4+JykuYWRkQ2xhc3MoJ3Rvb2xzLXJlZGlyZWN0X21ldGhvZHMnKS5hcHBlbmRUbygkcGFyZW50KTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBtZXRob2Qgb2YgbWV0aG9kcykge1xuXHRcdFx0aWYgKCFtZXRob2RFeGlzdChtZXRob2QpKSB7XG5cdFx0XHRcdHNlbGYuYnVpbGRMaW5rKG1ldGhvZCkuYXBwZW5kVG8oJGNvbnRhaW5lcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRidWlsZFNlbGVjdGlvbihtYWluLCBtZXRkLCBtdCwgZHNhYikge1xuXHRcdGNvbnN0IGNvbnQgPSAkKCc8c3Bhbj4nKTtcblx0XHRjb25zdCBzZWxlID0gJCgnPGlucHV0PicpLmF0dHIoJ3R5cGUnLCAnY2hlY2tib3gnKS5hcHBlbmRUbyhjb250KTtcblx0XHR0aGlzLmJ1aWxkTGluayhtYWluKS5hcHBlbmRUbyhjb250KTtcblx0XHR0aGlzLmFkZE1ldGhvZHMoY29udCwgbWV0ZCk7XG5cdFx0c2VsZS5kYXRhKCdwYWdlLXRpdGxlJywgbXQpO1xuXHRcdGlmIChkc2FiKSB7XG5cdFx0XHRzZWxlLnByb3AoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG5cdFx0fVxuXHRcdHJldHVybiBjb250O1xuXHR9LFxuXHRsb2FkVmlldyhyZWxvYWQpIHtcblx0XHRjb25zdCAkY29udGFpbmVyID0gdGhpcy50YWJzLnZpZXcuY29udDtcblx0XHR0aGlzLmxvYWRUYWJDb250KFxuXHRcdFx0J3ZpZXcnLFxuXHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5sb2FkUmVkaXJlY3QoV0dfUEFHRV9OQU1FLCAkY29udGFpbmVyLCAwKTtcblx0XHRcdH0sXG5cdFx0XHRyZWxvYWRcblx0XHQpO1xuXHR9LFxuXHRsb2FkQ3JlYXRlKHJlbG9hZCkge1xuXHRcdHRoaXMubG9hZFRhYkNvbnQoXG5cdFx0XHQnY3JlYXRlJyxcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZmluZFJlZGlyZWN0KFdHX1BBR0VfTkFNRSk7XG5cdFx0XHR9LFxuXHRcdFx0cmVsb2FkXG5cdFx0KTtcblx0fSxcblx0bG9hZFJlZGlyZWN0KHBhZ2VuYW1lLCBjb250YWluZXIsIGRlZXAsIGxvYWRlZCkge1xuXHRcdHRoaXMubG9hZGluZyhjb250YWluZXIpO1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGNvbnN0IGRlZmVycmVkID0gJC5EZWZlcnJlZCgpO1xuXHRcdGNvbnN0IHRvcCA9IGRlZXAgPyAkKCc8ZGw+JykuYXBwZW5kVG8oY29udGFpbmVyKSA6IGNvbnRhaW5lcjtcblx0XHRpZiAoIWxvYWRlZCkge1xuXHRcdFx0bG9hZGVkID0ge307XG5cdFx0XHRsb2FkZWRbcGFnZW5hbWVdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3Qgb25DbGlja0ZpeCA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc3QgZW50cnkgPSAkKHRoaXMpLnBhcmVudHMoJ2RkLCBwJykuZmlyc3QoKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRzZWxmLmNsaWNrQWN0aW9uKGVudHJ5LCB0aGlzLmZpeCk7XG5cdFx0fTtcblx0XHR2b2lkIGFwaVxuXHRcdFx0LnBvc3Qoe1xuXHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdHByb3A6ICdyZWRpcmVjdHMnLFxuXHRcdFx0XHR0aXRsZXM6IHBhZ2VuYW1lLFxuXHRcdFx0XHRyZGxpbWl0OiAnbWF4Jyxcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoe3F1ZXJ5fSkgPT4ge1xuXHRcdFx0XHRzZWxmLmxvYWRlZChjb250YWluZXIpO1xuXHRcdFx0XHRsZXQgaGFzX3JlZGlyZWN0ID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSAkKCdwLmRlc2MnLCBzZWxmLnRhYnMudmlldy5jb250KTtcblx0XHRcdFx0Y29uc3QgbWF4aW11bVJlZGlyZWN0RGVwdGggPSAxMDtcblx0XHRcdFx0Zm9yIChjb25zdCBwYWdlIG9mIHF1ZXJ5LnBhZ2VzKSB7XG5cdFx0XHRcdFx0aWYgKHBhZ2UucmVkaXJlY3RzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB7cmVkaXJlY3RzfSA9IHBhZ2U7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHt0aXRsZX0gb2YgcmVkaXJlY3RzKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJkdGl0bGUgPSB0aXRsZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdWx0aXRsZSA9IHJkdGl0bGUucmVwbGFjZSgvIC9nLCAnXycpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRyeSA9IChkZWVwID8gJCgnPGRkPicpIDogJCgnPHA+JykpLmFwcGVuZFRvKHRvcCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1ldGhvZHMgPSBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0aHJlZjogbXcudXRpbC5nZXRVcmwodWx0aXRsZSwge2FjdGlvbjogJ2VkaXQnfSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgncmVkaWVkaXQnKSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpc0N5Y2xlUmVkaXJlY3QgPSByZHRpdGxlIGluIGxvYWRlZDtcblx0XHRcdFx0XHRcdFx0bG9hZGVkW3JkdGl0bGVdID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0aWYgKCFpc0N5Y2xlUmVkaXJlY3QgJiYgZGVlcCkge1xuXHRcdFx0XHRcdFx0XHRcdG1ldGhvZHMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRocmVmOiAnI2ZpeC1yZWRpcmVjdCcsXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgndGFidmlld2ZpeCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xpY2s6IG9uQ2xpY2tGaXgsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgJGNvbnRhaW5lciA9IHNlbGZcblx0XHRcdFx0XHRcdFx0XHQuYnVpbGRTZWxlY3Rpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY6IG13LnV0aWwuZ2V0VXJsKHVsdGl0bGUsIHtyZWRpcmVjdDogJ25vJ30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogcmR0aXRsZSxcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRob2RzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dWx0aXRsZSxcblx0XHRcdFx0XHRcdFx0XHRcdCFkZWVwXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdC5hcHBlbmRUbyhlbnRyeSk7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0N5Y2xlUmVkaXJlY3QpIHtcblx0XHRcdFx0XHRcdFx0XHQkY29udGFpbmVyLmFwcGVuZChgPHNwYW4gY2xhc3M9XCJlcnJvclwiPiR7Z2V0TWVzc2FnZSgnZXJyY3ljbGVyZWRpcmVjdCcpfTwvc3Bhbj5gKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChkZWVwIDwgbWF4aW11bVJlZGlyZWN0RGVwdGgpIHtcblx0XHRcdFx0XHRcdFx0XHR2b2lkIGRlZmVycmVkLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGYubG9hZFJlZGlyZWN0KHJkdGl0bGUsIGVudHJ5LCBkZWVwICsgMSwgbG9hZGVkKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRoYXNfcmVkaXJlY3QgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRoYXNfcmVkaXJlY3QgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGhhc19yZWRpcmVjdCAmJiBkZWVwID09PSAxKSB7XG5cdFx0XHRcdFx0c2VsZi5hZGRNZXRob2RzKGRlc2MsIFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aHJlZjogJyNzZWxlY3QtYWxsJyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6IGdldE1lc3NhZ2UoJ3NlbGVjdGFsbCcpLFxuXHRcdFx0XHRcdFx0XHRjbGljayhldmVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZi5zZWxlY3RBbGwoc2VsZi50YWJzLnZpZXcuY29udCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRocmVmOiAnI3NlbGVjdC1pbnZlcnNlJyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6IGdldE1lc3NhZ2UoJ3NlbGVjdGludmVyc2UnKSxcblx0XHRcdFx0XHRcdFx0Y2xpY2soZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYuc2VsZWN0SW52ZXJzZShzZWxmLnRhYnMudmlldy5jb250KTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGhyZWY6ICcjZml4LXNlbGVjdGVkJyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6IGdldE1lc3NhZ2UoJ3RhYnZpZXdmaXgnKSxcblx0XHRcdFx0XHRcdFx0Y2xpY2soZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYuc2VsZWN0QWN0aW9uKHNlbGYudGFicy52aWV3LmNvbnQsIHNlbGYuZml4KTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGhhc19yZWRpcmVjdCkge1xuXHRcdFx0XHRcdHZvaWQgZGVmZXJyZWQucmVzb2x2ZVdpdGgoc2VsZik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dm9pZCBkZWZlcnJlZC5yZWplY3RXaXRoKHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xuXHR9LFxuXHRmaW5kVmFyaWFudHMocGFnZW5hbWUsIHRpdGxlcykge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGNvbnN0IHN1ZmZpeFJlZyA9IC9eLis/KCjvvIh8WyBfXVxcKCkuKz8oWynvvIldKSkkLztcblx0XHRsZXQgcmV0VGl0bGVzID0gW107XG5cdFx0Y29uc3QgZGVmZXJyZWRzID0gW107XG5cdFx0Zm9yIChjb25zdCB2YXJpYW50IG9mIFZBUklBTlRTKSB7XG5cdFx0XHRjb25zdCB4aHIgPSBhcGlcblx0XHRcdFx0LnBvc3Qoe1xuXHRcdFx0XHRcdGFjdGlvbjogJ3BhcnNlJyxcblx0XHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdFx0cGFnZTogcGFnZW5hbWUsXG5cdFx0XHRcdFx0cHJvcDogJ2Rpc3BsYXl0aXRsZScsXG5cdFx0XHRcdFx0dXNlbGFuZzogdmFyaWFudCxcblx0XHRcdFx0XHR2YXJpYW50LFxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigoe3BhcnNlfSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHtkaXNwbGF5dGl0bGV9ID0gcGFyc2U7XG5cdFx0XHRcdFx0Ly8gRXhhbXBsZTpcblx0XHRcdFx0XHQvLyAtIEJlZm9yZTogPHNwYW4gY2xhc3M9XCJtdy1wYWdlLXRpdGxlLW5hbWVzcGFjZVwiPuacieWFveaho+ahiOmmhjwvc3Bhbj48c3BhbiBjbGFzcz1cIm13LXBhZ2UtdGl0bGUtc2VwYXJhdG9yXCI+Ojwvc3Bhbj48c3BhbiBjbGFzcz1cIm13LXBhZ2UtdGl0bGUtbWFpblwiPuaymeebkjwvc3Bhbj5cblx0XHRcdFx0XHQvLyAtIEFmdGVyOiDmnInlhb3moaPmoYjppoY65rKZ55uSXG5cdFx0XHRcdFx0bGV0IHRpdGxlID0gJCgnPHNwYW4+JykuYXBwZW5kKGRpc3BsYXl0aXRsZSkuZXEoMCkudGV4dCgpLnRyaW0oKTtcblx0XHRcdFx0XHR0aXRsZSA9IGZpeE5hbWVzcGFjZSh0aXRsZSk7XG5cdFx0XHRcdFx0c2V0UmVkaXJlY3RUZXh0U3VmZml4KHRpdGxlLCAnXFxue3vnroDnuYHph43lrprlkJF9fScsIFNVRkZJWF9BUFBFTkQpO1xuXHRcdFx0XHRcdHJldHVybiB0aXRsZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRkZWZlcnJlZHMucHVzaCh4aHIpO1xuXHRcdH1cblx0XHRyZXR1cm4gJC53aGVuKC4uLmRlZmVycmVkcykudGhlbigoLi4uYXJncykgPT4ge1xuXHRcdFx0Y29uc3Qgc3VmZml4ZXMgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgdGl0bGUgb2YgYXJncykge1xuXHRcdFx0XHRsZXQgc3VmZml4O1xuXHRcdFx0XHQvLyBmaW5kIHRpdGxlIHN1ZmZpeCxcblx0XHRcdFx0Ly8gZm9yIGV4YW1wbGUgXCIgKOa1juWNl+W4gilcIiB0byBcIuW4guS4reWMuiAo5rWO5Y2X5biCKVwiXG5cdFx0XHRcdGNvbnN0IHN1ZmZpeEFyciA9IHN1ZmZpeFJlZy5leGVjKHRpdGxlKTtcblx0XHRcdFx0aWYgKHN1ZmZpeEFyciAmJiBzdWZmaXhBcnIubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdFx0Wywgc3VmZml4XSA9IHN1ZmZpeEFycjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdWZmaXggPSAnJztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXRUaXRsZXMucHVzaCh0aXRsZSk7XG5cdFx0XHRcdHN1ZmZpeGVzLnB1c2goc3VmZml4KTtcblx0XHRcdH1cblx0XHRcdC8vIGFwcGVuZCBzdWZmaXhlc1xuXHRcdFx0Zm9yIChjb25zdCBzdWZmaXggb2YgbmV3IFNldChzdWZmaXhlcykpIHtcblx0XHRcdFx0cmV0VGl0bGVzID0gW1xuXHRcdFx0XHRcdC4uLnJldFRpdGxlcyxcblx0XHRcdFx0XHQuLi50aXRsZXMubWFwKCh0aXRsZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbW9kaWZpZWRUaXRsZSA9IGZpeE5hbWVzcGFjZSh0aXRsZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3VmZml4UmVnLnRlc3QobW9kaWZpZWRUaXRsZSkgPyBtb2RpZmllZFRpdGxlIDogbW9kaWZpZWRUaXRsZSArIHN1ZmZpeDtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzZWxmLmZpbmROb3RFeGlzdHMoWy4uLm5ldyBTZXQocmV0VGl0bGVzKV0pO1xuXHRcdH0pO1xuXHR9LFxuXHRmaW5kTm90RXhpc3RzKHRpdGxlcykge1xuXHRcdGNvbnN0IGRlZmVycmVkcyA9IFtdO1xuXHRcdGNvbnN0IGV4Y2x1ZGVzID0gbmV3IFNldChbJ+eUqOWtl+aooeW8jyddKTtcblx0XHRsZXQgYWxsdGl0bGVzID0gW107XG5cdFx0dGl0bGVzID0gdGl0bGVzLmpvaW4oJ3wnKTtcblx0XHRmb3IgKGNvbnN0IHZhcmlhbnQgb2YgVkFSSUFOVFMpIHtcblx0XHRcdGRlZmVycmVkcy5wdXNoKFxuXHRcdFx0XHRhcGkucG9zdCh7XG5cdFx0XHRcdFx0YWN0aW9uOiAncGFyc2UnLFxuXHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdFx0XHR0ZXh0OiB0aXRsZXMsXG5cdFx0XHRcdFx0cHJvcDogJ3RleHQnLFxuXHRcdFx0XHRcdHRpdGxlOiAnTWVkaWFXaWtpOkdhZGdldC1Ub29sc1JlZGlyZWN0LmpzLy0nLFxuXHRcdFx0XHRcdGNvbnRlbnRtb2RlbDogJ3dpa2l0ZXh0Jyxcblx0XHRcdFx0XHR1c2VsYW5nOiB2YXJpYW50LFxuXHRcdFx0XHRcdHZhcmlhbnQsXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gJC53aGVuKC4uLmRlZmVycmVkcykudGhlbigoLi4uYXJncykgPT4ge1xuXHRcdFx0Zm9yIChjb25zdCBbe3BhcnNlfV0gb2YgYXJncykge1xuXHRcdFx0XHRhbGx0aXRsZXMgPSBbLi4uYWxsdGl0bGVzLCAuLi4kKHBhcnNlLnRleHQpLnRleHQoKS50cmltKCkuc3BsaXQoJ3wnKV07XG5cdFx0XHR9XG5cdFx0XHRhbGx0aXRsZXMgPSBhbGx0aXRsZXMuZmlsdGVyKCh2LCBpLCBhcnIpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFyci5pbmRleE9mKHYpID09PSBpO1xuXHRcdFx0fSk7XG5cdFx0XHRhbGx0aXRsZXMgPSBhbGx0aXRsZXMuam9pbignfCcpO1xuXHRcdFx0cmV0dXJuIGFwaVxuXHRcdFx0XHQucG9zdCh7XG5cdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdFx0XHRwcm9wOiAnaW5mbycsXG5cdFx0XHRcdFx0dGl0bGVzOiBhbGx0aXRsZXMsXG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKCh7cXVlcnl9KSA9PiB7XG5cdFx0XHRcdFx0dGl0bGVzID0gW107XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYWdlIG9mIHF1ZXJ5LnBhZ2VzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB7dGl0bGV9ID0gcGFnZTtcblx0XHRcdFx0XHRcdGlmIChwYWdlLm1pc3NpbmcgJiYgIWV4Y2x1ZGVzLmhhcyh0aXRsZSkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRpdGxlIGluIHJlZGlyZWN0RXhjbHVkZXMpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBleGNsdWRlIHNwZWNpYWwgdGl0bGVzXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRpdGxlcy5wdXNoKHRpdGxlKTtcblx0XHRcdFx0XHRcdFx0aWYgKElTX0NBVEVHT1JZKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gV0dfUEFHRV9OQU1FLnJlcGxhY2UoL15DYXRlZ29yeTovLCAnJyk7XG5cdFx0XHRcdFx0XHRcdFx0c2V0UmVkaXJlY3RUZXh0U3VmZml4KHRpdGxlLCAnXFxue3vliIbnsbvph43lrprlkJF8JDF9fScucmVwbGFjZSgnJDEnLCB0YXJnZXQpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyBvbmx5IHNldCBkZWZhdWx0IHN1ZmZpeFxuXHRcdFx0XHRcdFx0XHRzZXRSZWRpcmVjdFRleHRTdWZmaXgodGl0bGUsICdcXG57e+WIq+WQjemHjeWumuWQkX19JywgU1VGRklYX1NFVERFRkFVTFQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGl0bGVzO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblx0fSxcblx0ZmluZFJlZGlyZWN0KHBhZ2VuYW1lKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0Y29uc3QgZnJjRGVmZXJyZWRzID0gW107XG5cdFx0Y29uc3QgY29udGFpbmVyID0gc2VsZi50YWJzLmNyZWF0ZS5jb250O1xuXHRcdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHRcdGNvbnN0ICRjb250ZW50ID0gJGJvZHkuZmluZCgnI213LWNvbnRlbnQtdGV4dCA+IGRpdi5tdy1wYXJzZXItb3V0cHV0Jyk7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG5cdFx0bGV0IHRpdGxlcyA9IFtdO1xuXHRcdHNlbGYubG9hZGluZyhjb250YWluZXIpO1xuXHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgZmluZFJlZGlyZWN0Q2FsbGJhY2tzKSB7XG5cdFx0XHRjb25zdCByZXQgPSBjYWxsYmFjayhwYWdlbmFtZSwgJGNvbnRlbnQsIHRpdGxlcyk7XG5cdFx0XHRpZiAodHlwZW9mIHJldCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGl0bGVzLnB1c2gocmV0KTtcblx0XHRcdH0gZWxzZSBpZiAoJ2RvbmUnIGluIHJldCkge1xuXHRcdFx0XHQvLyBpcyBEZWZlcnJlZFxuXHRcdFx0XHRmcmNEZWZlcnJlZHMucHVzaChyZXQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGl0bGVzID0gWy4uLm5ldyBTZXQoWy4uLnRpdGxlcywgLi4ucmV0XSldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyByZW1vdmUgYWxsIGVtcHR5IHRpdGxlc1xuXHRcdHRpdGxlcyA9IHRpdGxlcy5tYXAoKHRpdGxlKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGl0bGUgfHwgbnVsbDtcblx0XHR9KTtcblx0XHRjb25zdCBvbkNsaWNrQ3JlYXRlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9ICQodGhpcykucGFyZW50cygncDpmaXJzdCcpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHNlbGYuY2xpY2tBY3Rpb24oZW50cnksIHNlbGYuY3JlYXRlKTtcblx0XHR9O1xuXHRcdC8vIGhhbmRsZXMgdGhlIGRlZmVycmVkIGNhbGxiYWNrc1xuXHRcdHZvaWQgJC53aGVuKC4uLmZyY0RlZmVycmVkcylcblx0XHRcdC50aGVuKCguLi5hcmdzKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcmV0IG9mIGFyZ3MpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHJldCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdHRpdGxlcy5wdXNoKHJldCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRpdGxlcyA9IFsuLi5uZXcgU2V0KFsuLi50aXRsZXMsIC4uLnJldF0pXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNlbGYuZmluZFZhcmlhbnRzKHBhZ2VuYW1lLCB0aXRsZXMpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChmdnRpdGxlcykgPT4ge1xuXHRcdFx0XHQvLyBidWlsZCBIVE1MXG5cdFx0XHRcdHNlbGYubG9hZGVkKGNvbnRhaW5lcik7XG5cdFx0XHRcdGZvciAoY29uc3QgdGl0bGUgb2YgZnZ0aXRsZXMpIHtcblx0XHRcdFx0XHRjb25zdCB1bHRpdGxlID0gdGl0bGUucmVwbGFjZSgnICcsICdfJyk7XG5cdFx0XHRcdFx0Y29uc3QgZW50cnkgPSAkKCc8cD4nKS5hcHBlbmRUbyhjb250YWluZXIpO1xuXHRcdFx0XHRcdHNlbGYuYnVpbGRTZWxlY3Rpb24oXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGhyZWY6IG13LnV0aWwuZ2V0VXJsKHVsdGl0bGUsIHthY3Rpb246ICdlZGl0JywgcmVkbGluazogJzEnfSksXG5cdFx0XHRcdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHRcdFx0XHRjbGFzc25hbWU6ICduZXcnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGhyZWY6ICcjY3JlYXRlLXJlZGlyZWN0Jyxcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgndGFiY3JlYXRldGl0bGUnKSxcblx0XHRcdFx0XHRcdFx0XHRjbGljazogb25DbGlja0NyZWF0ZSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHR1bHRpdGxlLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpLmFwcGVuZFRvKGVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBkZXNjID0gJCgncC5kZXNjJywgY29udGFpbmVyKTtcblx0XHRcdFx0aWYgKGZ2dGl0bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzZWxmLmFkZE1ldGhvZHMoZGVzYywgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRocmVmOiAnI3NlbGVjdC1hbGwnLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgnc2VsZWN0YWxsJyksXG5cdFx0XHRcdFx0XHRcdGNsaWNrKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRzZWxmLnNlbGVjdEFsbChjb250YWluZXIpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aHJlZjogJyNzZWxlY3QtaW52ZXJzZScsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBnZXRNZXNzYWdlKCdzZWxlY3RpbnZlcnNlJyksXG5cdFx0XHRcdFx0XHRcdGNsaWNrKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRzZWxmLnNlbGVjdEludmVyc2UoY29udGFpbmVyKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGhyZWY6ICcjY3JlYXRlLXNlbGVjdGVkJyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6IGdldE1lc3NhZ2UoJ3RhYmNyZWF0ZXRpdGxlJyksXG5cdFx0XHRcdFx0XHRcdGNsaWNrKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRzZWxmLnNlbGVjdEFjdGlvbihjb250YWluZXIsIHNlbGYuY3JlYXRlKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0dm9pZCBkZWZlcnJlZC5yZXNvbHZlV2l0aChzZWxmLCBbZnZ0aXRsZXNdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2b2lkIGRlZmVycmVkLnJlamVjdFdpdGgoc2VsZiwgW2Z2dGl0bGVzXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7XG5cdH0sXG59O1xuIiwgImltcG9ydCB7V0dfVVNFUl9MQU5HVUFHRX0gZnJvbSAnLi9jb25zdGFudCc7XG5cbmV4cG9ydCBjb25zdCB0b29sc1JlZGlyZWN0TWVzc2FnZXMgPSAoKTogdm9pZCA9PiB7XG5cdGlmIChbJ3poLWhhbnQnLCAnemgtaGsnLCAnemgtbW8nLCAnemgtdHcnXS5pbmNsdWRlcyhXR19VU0VSX0xBTkdVQUdFKSkge1xuXHRcdG13Lm1lc3NhZ2VzLnNldCh7XG5cdFx0XHQndG9vbHNyZWRpcmVjdC1idG50aXRsZSc6ICfph43mlrDlsI7lkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtYnRuZGVzYyc6ICflibXlu7rlkoznrqHnkIbmraTpoIHpnaLnmoTph43mlrDlsI7lkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZGxndGl0bGUnOiAn5Ym15bu65ZKM566h55CG6YeN5paw5bCO5ZCRJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXJlZGlsb2FkaW5nJzogJ+aVuOaTmuWKoOi8ieS4re+8jOiri+eojeWAmeKApuKApicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1yZWRpZWRpdCc6ICfnt6jovK8nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3Qtc2VsZWN0YWxsJzogJ+WFqOmBuCcsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1zZWxlY3RpbnZlcnNlJzogJ+WPjemBuCcsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJ2aWV3dGl0bGUnOiAn5p+l55yLJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYnZpZXdkZXNjJzogJ+S7peS4i+aYr+aMh+WQkeatpOmggemdoueahOmHjeaWsOWwjuWQkemgge+8micsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJ2aWV3bm90Zm91bmQnOiAn5rKS5pyJ5om+5Yiw5Lu75L2V5oyH5ZCR5q2k6aCB6Z2i55qE6YeN5paw5bCO5ZCR6aCB44CCJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYnZpZXdtdWx0aSc6ICflpJrph40nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFidmlld2ZpeCc6ICfkv67lvqknLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZml4bG9hZGluZyc6ICfoq4vnqI3lgJnvvIzmraPlnKjoh6rli5Xkv67lvqnph43mlrDlsI7lkJHigKbigKYnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZml4dGV4dCc6ICcjUkVESVJFQ1QgW1skMV1dJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LWZpeHN1bW1hcnknOiAn57eo6Lyv5bel5YW377ya5L+u5b6p5aSa6YeN6YeN5paw5bCO5ZCRJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYmNyZWF0ZXRpdGxlJzogJ+WJteW7uicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJjcmVhdGVkZXNjJzogJ+S7peS4i+aYr+WwmuacquWJteW7uueahOmHjeaWsOWwjuWQkemgge+8micsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJjcmVhdGVub3Rmb3VuZCc6ICfmspLmnInmib7liLDlj6/ku6XlibXlu7rnmoTph43mlrDlsI7lkJHpoIHjgIInLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFiY3JlYXRlYWxsJzogJ+WFqOmDqOWJteW7uicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1jcmVhdGVsb2FkaW5nJzogJ+iri+eojeWAme+8jOato+WcqOiHquWLleWJteW7uumHjeaWsOWwjuWQkeKApuKApicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1jcmVhdGV0ZXh0JzogJyNSRURJUkVDVCBbWyQxXV0nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtY3JlYXRlc3VtbWFyeSc6ICfnt6jovK/lt6XlhbfvvJroh6rli5XlibXlu7rph43mlrDlsI7lkJHliLBbWyQxXV0nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZXJyY3ljbGVyZWRpcmVjdCc6ICfnhKHms5Xoh6rli5Xkv67lvqnvvJrnmbznj77lvqrnkrDph43mlrDlsI7lkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtcmVmcmVzaCc6ICfliLfmlrAnLFxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG13Lm1lc3NhZ2VzLnNldCh7XG5cdFx0XHQndG9vbHNyZWRpcmVjdC1idG50aXRsZSc6ICfph43lrprlkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtYnRuZGVzYyc6ICfliJvlu7rlkoznrqHnkIbmraTpobXpnaLnmoTph43lrprlkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZGxndGl0bGUnOiAn5Yib5bu65ZKM566h55CG6YeN5a6a5ZCRJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXJlZGlsb2FkaW5nJzogJ+aVsOaNruWKoOi9veS4re+8jOivt+eojeWAmeKApuKApicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1yZWRpZWRpdCc6ICfnvJbovpEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3Qtc2VsZWN0YWxsJzogJ+WFqOmAiScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1zZWxlY3RpbnZlcnNlJzogJ+WPjemAiScsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJ2aWV3dGl0bGUnOiAn5p+l55yLJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYnZpZXdkZXNjJzogJ+S7peS4i+aYr+aMh+WQkeatpOmhtemdoueahOmHjeWumuWQkemhte+8micsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJ2aWV3bm90Zm91bmQnOiAn5rKh5pyJ5om+5Yiw5Lu75L2V5oyH5ZCR5q2k6aG16Z2i55qE6YeN5a6a5ZCR6aG144CCJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYnZpZXdtdWx0aSc6ICflpJrph40nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFidmlld2ZpeCc6ICfkv67lpI0nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZml4bG9hZGluZyc6ICfor7fnqI3lgJnvvIzmraPlnKjoh6rliqjkv67lpI3ph43lrprlkJHigKbigKYnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZml4dGV4dCc6ICcjUkVESVJFQ1QgW1skMV1dJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LWZpeHN1bW1hcnknOiAn57yW6L6R5bel5YW377ya5L+u5aSN5aSa6YeN6YeN5a6a5ZCRJyxcblx0XHRcdCd0b29sc3JlZGlyZWN0LXRhYmNyZWF0ZXRpdGxlJzogJ+WIm+W7uicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJjcmVhdGVkZXNjJzogJ+S7peS4i+aYr+WwmuacquWIm+W7uueahOmHjeWumuWQkemhte+8micsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC10YWJjcmVhdGVub3Rmb3VuZCc6ICfmsqHmnInmib7liLDlj6/ku6XliJvlu7rnmoTph43lrprlkJHpobXjgIInLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtdGFiY3JlYXRlYWxsJzogJ+WFqOmDqOWIm+W7uicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1jcmVhdGVsb2FkaW5nJzogJ+ivt+eojeWAme+8jOato+WcqOiHquWKqOWIm+W7uumHjeWumuWQkeKApuKApicsXG5cdFx0XHQndG9vbHNyZWRpcmVjdC1jcmVhdGV0ZXh0JzogJyNSRURJUkVDVCBbWyQxXV0nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtY3JlYXRlc3VtbWFyeSc6ICfnvJbovpHlt6XlhbfvvJroh6rliqjliJvlu7rph43lrprlkJHliLBbWyQxXV0nLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtZXJyY3ljbGVyZWRpcmVjdCc6ICfml6Dms5Xoh6rliqjkv67lpI3vvJrlj5HnjrDlvqrnjq/ph43lrprlkJEnLFxuXHRcdFx0J3Rvb2xzcmVkaXJlY3QtcmVmcmVzaCc6ICfliLfmlrAnLFxuXHRcdH0pO1xuXHR9XG59O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5leHBvcnQgY29uc3QgdG9vbHNSZWRpcmVjdF9iaW9fbGF0aW5fbmFtZXMgPSAoKSA9PiB7XG5cdGNvbnN0IHByZWZpeFJlZ2V4ID0gL1vlrablrbhd5ZCNXFxzKls677yaXT9cXHMqJC87XG5cdGNvbnN0IGNvbG9uUmVnZXggPSAvXlxccypbOu+8ml0/XFxzKiQvO1xuXHR3aW5kb3cudG9vbHNSZWRpcmVjdC5maW5kUmVkaXJlY3RDYWxsYmFjaygoX3BhZ2VuYW1lLCAkY29udGVudCkgPT4ge1xuXHRcdGNvbnN0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcblx0XHQkY29udGVudC5maW5kKCc+IHAgPiBbbGFuZz1cImxhXCJdLCA+IHAgPiBpJykuZWFjaCgoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRsZXQgdGl0bGU7XG5cdFx0XHRsZXQgcHJldmlvdXNOb2RlID0gZWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRpZiAocHJldmlvdXNOb2RlICYmIGNvbG9uUmVnZXgudGVzdChwcmV2aW91c05vZGUudGV4dENvbnRlbnQpKSB7XG5cdFx0XHRcdHByZXZpb3VzTm9kZSA9IHByZXZpb3VzTm9kZS5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJldmlvdXNOb2RlICYmIHByZWZpeFJlZ2V4LnRlc3QocHJldmlvdXNOb2RlLnRleHRDb250ZW50KSkge1xuXHRcdFx0XHR0aXRsZSA9ICQoZWxlbWVudCkudGV4dCgpLnRyaW0oKTtcblx0XHRcdFx0dGl0bGVzLnB1c2godGl0bGUpO1xuXHRcdFx0XHR3aW5kb3cudG9vbHNSZWRpcmVjdC5zZXRSZWRpcmVjdFRleHRTdWZmaXgodGl0bGUsICdcXG57e+WtpuWQjemHjeWumuWQkX19Jyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIFsuLi5uZXcgU2V0KHRpdGxlcyldO1xuXHR9KTtcbn07XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmV4cG9ydCBjb25zdCB0b29sc1JlZGlyZWN0X2NvdXJ0ZXN5X2FuZF9hcnRfbmFtZXMgPSAoKTogdm9pZCA9PiB7XG5cdGNvbnN0IHByZWZpeFJlZ2V4ID0gL1vlj7flrZfomZ9dXFxzKiQvO1xuXHRjb25zdCBjb21wU3VybmFtZXMgPSBbXG5cdFx0J+asp+mYsycsXG5cdFx0J+atkOmZvScsXG5cdFx0J+S7pOeLkCcsXG5cdFx0J+eah+eUqycsXG5cdFx0J+S4iuWumCcsXG5cdFx0J+WPuOW+kicsXG5cdFx0J+ivuOiRmycsXG5cdFx0J+iruOiRmycsXG5cdFx0J+WPuOmprCcsXG5cdFx0J+WPuOmmrCcsXG5cdFx0J+Wuh+aWhycsXG5cdFx0J+WRvOW7ticsXG5cdFx0J+err+acqCcsXG5cdFx0J+eUs+WxoCcsXG5cdFx0J+Wwiei/nycsXG5cdFx0J+WwiemBsicsXG5cdFx0J+i9qei+lScsXG5cdFx0J+i7kui9hScsXG5cdFx0J+Wkj+S+rycsXG5cdFx0J+WNl+WuqycsXG5cdFx0J+WNl+WuricsXG5cdFx0J+WPuOepuicsXG5cdFx0J+mynOS6jicsXG5cdFx0J+muruS6jicsXG5cdFx0J+ilv+mXqCcsXG5cdFx0J+ilv+mWgCcsXG5cdFx0J+eLrOWtpCcsXG5cdFx0J+eNqOWtpCcsXG5cdFx0J+S4nOaWuScsXG5cdFx0J+adseaWuScsXG5cdFx0J+WPuOWvhycsXG5cdFx0J+e+iuiIjCcsXG5cdFx0J+esrOS6lCcsXG5cdFx0J+aigeS4mCcsXG5cdFx0J+mUuuemuycsXG5cdFx0J+mNvumboicsXG5cdFx0J+S4nOmDrScsXG5cdFx0J+adsemDrScsXG5cdFx0J+WFrOWtmScsXG5cdFx0J+WFrOWtqycsXG5cdFx0J+Wtn+WtmScsXG5cdFx0J+Wtn+WtqycsXG5cdFx0J+S7suWtmScsXG5cdFx0J+S7suWtqycsXG5cdFx0J+WPlOWtmScsXG5cdFx0J+WPlOWtqycsXG5cdFx0J+Wto+WtmScsXG5cdFx0J+Wto+WtqycsXG5cdFx0J+mVv+WtmScsXG5cdFx0J+mVt+WtqycsXG5cdFx0J+aFleWuuScsXG5cdFx0J+mXvuS4mCcsXG5cdFx0J+mWreS4mCcsXG5cdFx0J+S4nOmXqCcsXG5cdFx0J+adsemWgCcsXG5cdFx0J+WFrOe+iicsXG5cdFx0J+S4h+S/nycsXG5cdFx0J+eZvumHjCcsXG5cdFx0J+WFrOWGticsXG5cdFx0J+WRvOW7ticsXG5cdFx0J+a1ruWxoCcsXG5cdFx0J+WNs+WiqCcsXG5cdFx0J+WNleS6jicsXG5cdFx0J+WWruS6jicsXG5cdFx0J+eUsOS4mCcsXG5cdF07XG5cdGNvbnN0IGNvbXBTdXJuYW1lUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7Y29tcFN1cm5hbWVzLmpvaW4oJ3wnKX0pLmApO1xuXHRjb25zdCBmaW5kU3VybmFtZSA9IChwYWdlbmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0aWYgKGNvbXBTdXJuYW1lUmVnZXgudGVzdChwYWdlbmFtZSkpIHtcblx0XHRcdHJldHVybiBjb21wU3VybmFtZVJlZ2V4LmV4ZWMocGFnZW5hbWUpWzFdO1xuXHRcdH1cblx0XHRyZXR1cm4gcGFnZW5hbWVbMF07XG5cdH07XG5cdHdpbmRvdy50b29sc1JlZGlyZWN0LmZpbmRSZWRpcmVjdENhbGxiYWNrKChwYWdlbmFtZSwgJGNvbnRlbnQpID0+IHtcblx0XHRsZXQgc3VybmFtZTtcblx0XHRjb25zdCB0aXRsZXM6IHN0cmluZ1tdID0gW107XG5cdFx0JGNvbnRlbnQuZmluZCgnPiBwID4gYicpLmVhY2goKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNOb2RlID0gZWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRpZiAocHJldmlvdXNOb2RlICYmIHByZWZpeFJlZ2V4LnRlc3QocHJldmlvdXNOb2RlLnRleHRDb250ZW50KSkge1xuXHRcdFx0XHRjb25zdCBuYW1lID0gJChlbGVtZW50KS50ZXh0KCkudHJpbSgpO1xuXHRcdFx0XHRzdXJuYW1lIHx8PSBmaW5kU3VybmFtZShwYWdlbmFtZSk7XG5cdFx0XHRcdHRpdGxlcy5wdXNoKHN1cm5hbWUgKyBuYW1lKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gWy4uLm5ldyBTZXQodGl0bGVzKV07XG5cdH0pO1xufTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuZXhwb3J0IGNvbnN0IHRvb2xzUmVkaXJlY3Rfb3B0X2JvbGRzID0gKCkgPT4ge1xuXHR3aW5kb3cudG9vbHNSZWRpcmVjdC5maW5kUmVkaXJlY3RCeVNlbGVjdG9yKCdkaXYjbXctY29udGVudC10ZXh0IHAgPiBiJyk7XG59O1xuIiwgImltcG9ydCAnLi9Ub29sc1JlZGlyZWN0Lmxlc3MnO1xuaW1wb3J0IHtUb29sc1JlZGlyZWN0fSBmcm9tICcuL21vZHVsZXMvY29yZSc7XG5pbXBvcnQge3Rvb2xzUmVkaXJlY3RNZXNzYWdlc30gZnJvbSAnLi9tb2R1bGVzL21lc3NhZ2VzJztcblxuaW1wb3J0IHt0b29sc1JlZGlyZWN0X2Jpb19sYXRpbl9uYW1lc30gZnJvbSAnLi9tb2R1bGVzL2Jpby1sYXRpbi1uYW1lcyc7XG5pbXBvcnQge3Rvb2xzUmVkaXJlY3RfY291cnRlc3lfYW5kX2FydF9uYW1lc30gZnJvbSAnLi9tb2R1bGVzL2NvdXJ0ZXN5LWFuZC1hcnQtbmFtZXMnO1xuaW1wb3J0IHt0b29sc1JlZGlyZWN0X29wdF9ib2xkc30gZnJvbSAnLi9tb2R1bGVzL29wdC1ib2xkcyc7XG5cbnRvb2xzUmVkaXJlY3RNZXNzYWdlcygpO1xuVG9vbHNSZWRpcmVjdC5pbml0KCk7XG5cbmlmIChtdy51c2VyLm9wdGlvbnMuZ2V0KCdnYWRnZXQtVG9vbHNSZWRpcmVjdC1iaW8tbGF0aW4tbmFtZXMnKSkge1xuXHQkKHRvb2xzUmVkaXJlY3RfYmlvX2xhdGluX25hbWVzKTtcbn1cblxuaWYgKG13LnVzZXIub3B0aW9ucy5nZXQoJ2dhZGdldC1Ub29sc1JlZGlyZWN0LWNvdXJ0ZXN5LWFuZC1hcnQtbmFtZXMnKSkge1xuXHQkKHRvb2xzUmVkaXJlY3RfY291cnRlc3lfYW5kX2FydF9uYW1lcyk7XG59XG5cbmlmIChtdy51c2VyLm9wdGlvbnMuZ2V0KCdnYWRnZXQtVG9vbHNSZWRpcmVjdC1vcHQtYm9sZHMnKSkge1xuXHQkKHRvb2xzUmVkaXJlY3Rfb3B0X2JvbGRzKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FB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Q2xCO0FBQ0F4SCxTQUFPQyxjQUFjakIscUJBQXFCLENBQUN3SSxVQUFVaUYsYUFBYTtBQUNqRSxRQUFJMEI7QUFDSixVQUFNdkssU0FBbUIsQ0FBQTtBQUN6QjZJLGFBQVN2TCxLQUFLLFNBQVMsRUFBRWtHLEtBQUssQ0FBQzlILFFBQVFDLFlBQVk7QUFDbEQsWUFBTXFPLGVBQWVyTyxRQUFRc087QUFDN0IsVUFBSUQsZ0JBQWdCSCxZQUFZM08sS0FBSzhPLGFBQWFFLFdBQVcsR0FBRztBQUMvRCxjQUFNTSxPQUFPaFAsRUFBRUcsT0FBTyxFQUFFakIsS0FBSyxFQUFFbUIsS0FBSztBQUNwQzBPLG9CQUFBQSxVQUFZRCxZQUFZMUcsUUFBUTtBQUNoQzVELGVBQU9wRixLQUFLMlAsVUFBVUMsSUFBSTtNQUMzQjtJQUNELENBQUM7QUFDRCxXQUFPLENBQUMsR0FBRyxJQUFJck8sSUFBSTZELE1BQU0sQ0FBQztFQUMzQixDQUFDO0FBQ0Y7O0FDekZPLElBQU15SywwQkFBMEJBLE1BQU07QUFDNUNyTyxTQUFPQyxjQUFjZix1QkFBdUIsMkJBQTJCO0FBQ3hFOztBQ0lBa08sc0JBQXNCO0FBQ3RCbE4sY0FBY0ksS0FBSztBQUVuQixJQUFJbEUsR0FBR2tTLEtBQUtDLFFBQVFqUyxJQUFJLHNDQUFzQyxHQUFHO0FBQ2hFOEMsSUFBRW9PLDZCQUE2QjtBQUNoQztBQUVBLElBQUlwUixHQUFHa1MsS0FBS0MsUUFBUWpTLElBQUksNkNBQTZDLEdBQUc7QUFDdkU4QyxJQUFFMk8sb0NBQW9DO0FBQ3ZDO0FBRUEsSUFBSTNSLEdBQUdrUyxLQUFLQyxRQUFRalMsSUFBSSxnQ0FBZ0MsR0FBRztBQUMxRDhDLElBQUVpUCx1QkFBdUI7QUFDMUI7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAiU2V0IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICIkIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAiV0dfTkFNRVNQQUNFX0lEUyIsICJtdyIsICJjb25maWciLCAiZ2V0IiwgIldHX05BTUVTUEFDRV9OVU1CRVIiLCAiV0dfUEFHRV9OQU1FIiwgIldHX1VTRVJfTEFOR1VBR0UiLCAiSVNfQ0FURUdPUlkiLCAiU1VGRklYX0FQUEVORCIsICJTVUZGSVhfUkVQTEFDRSIsICJTVUZGSVhfU0VUREVGQVVMVCIsICJFRElUX1RBRyIsICJWQVJJQU5UUyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJhcmdzIiwgImNvbmNhdCIsICJsZW5ndGgiLCAibWVzc2FnZSIsICJwYXJzZSIsICJwbGFpbiIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJyZXF1aXJlIiwgImFwaSIsICJpbml0TXdBcGkiLCAiZmluZFJlZGlyZWN0Q2FsbGJhY2tzIiwgInBhZ2VXaXRoUmVkaXJlY3RUZXh0U3VmZml4IiwgInJlZGlyZWN0RXhjbHVkZXMiLCAibnNQcmVmaXhlcyIsICJuc0Nhbm9uUHJlZml4IiwgIm5zUHJlZml4UGF0dGVybiIsICJfaSIsICJfT2JqZWN0JGVudHJpZXMiLCAiT2JqZWN0IiwgImVudHJpZXMiLCAidGV4dCIsICJuc2lkIiwgInB1c2giLCAic3BsaXQiLCAiUmVnRXhwIiwgImpvaW4iLCAiZml4TmFtZXNwYWNlIiwgInRpdGxlIiwgInRlc3QiLCAicmVwbGFjZSIsICJmaW5kUmVkaXJlY3RDYWxsYmFjayIsICJjYWxsYmFjayIsICJmaW5kUmVkaXJlY3RCeVNlbGVjdG9yIiwgInNlbGVjdG9yIiwgIiQiLCAibWFwIiwgIl9pbmRleCIsICJlbGVtZW50IiwgImVxIiwgInRyaW0iLCAic2V0UmVkaXJlY3RUZXh0U3VmZml4IiwgInN1ZmZpeCIsICJmbGFnIiwgImZsYWdfc2V0IiwgImZsYWdfYXBwZW5kIiwgIlNldCIsICJ3aW5kb3ciLCAidG9vbHNSZWRpcmVjdCIsICJUb29sc1JlZGlyZWN0IiwgInRhYnNlbGVtIiwgInRhZ3NlbGVtIiwgInZhcmlhbnRzIiwgImluaXQiLCAic2VsZiIsICIkYm9keSIsICJidXR0b24iLCAiYWRkQ2xhc3MiLCAiYXR0ciIsICJjc3MiLCAiYXBwZW5kIiwgIm9uIiwgImV2ZW50IiwgInByZXZlbnREZWZhdWx0IiwgImRpYWxvZyIsICJmaW5kIiwgImFmdGVyIiwgImJnaWZyYW1lIiwgInJlc2l6YWJsZSIsICJtb2RhbCIsICJ3aWR0aCIsICJNYXRoIiwgInJvdW5kIiwgInBvc2l0aW9uIiwgImhlaWdodCIsICJhcHBlbmRUbyIsICJhZGRUYWJzIiwgInRhYnMiLCAia25hbWUiLCAiaGFzT3duIiwgImNoYXJBdCIsICJ0b1VwcGVyQ2FzZSIsICJzbGljZSIsICJ0YWIiLCAidGFnIiwgImNvbnQiLCAibG9hZFZpZXciLCAiY3JlYXRlVGFiIiwgInRhYm5hbWUiLCAidGFidGl0bGUiLCAib25DbGljayIsICJjYWxsIiwgImxvYWRlZCIsICJfaW5pdFRhYlZpZXciLCAiX2luaXRUYWJDcmVhdGUiLCAibG9hZENyZWF0ZSIsICJ2aWV3IiwgImNyZWF0ZSIsICJmaXgiLCAicGFnZW5hbWVzIiwgInJlbW92ZSIsICJsb2FkaW5nIiwgImJ1bGtFZGl0QnlSZWdleCIsICJ0aGVuIiwgInNldFRpbWVvdXQiLCAiYnVsa0VkaXQiLCAiYWRkUmVkaXJlY3RUZXh0U3VmZml4IiwgInRpdGxlcyIsICJzdW1tYXJ5IiwgImZpbHRlciIsICJ2IiwgImkiLCAiYXJyIiwgImluZGV4T2YiLCAicG9zdCIsICJhY3Rpb24iLCAiZm9ybWF0IiwgImZvcm1hdHZlcnNpb24iLCAicHJvcCIsICJxdWVyeSIsICJkZWZlcnJlZHMiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgInBhZ2VzIiwgIl9zdGVwIiwgInMiLCAibiIsICJkb25lIiwgInZhbHVlIiwgInBvc3RXaXRoVG9rZW4iLCAidGFncyIsICJlcnIiLCAiZSIsICJmIiwgIndoZW4iLCAicmVnZXgiLCAicnZwcm9wIiwgInJ2c2xvdHMiLCAiX2l0ZXJhdG9yMiIsICJfc3RlcDIiLCAicGFnZSIsICJjb250ZW50IiwgInJldmlzaW9ucyIsICJzbG90cyIsICJuZXdDb250ZW50IiwgImJhc2V0aW1lc3RhbXAiLCAidGltZXN0YW1wIiwgImxvYWRUYWJDb250IiwgInJlbG9hZCIsICJodG1sIiwgIiRkZXNjIiwgIiR0ZXh0IiwgImFwcGx5IiwgImZhaWwiLCAiYWx3YXlzIiwgImFkZE1ldGhvZHMiLCAiaHJlZiIsICJjbGljayIsICJjb250YWluZXIiLCAidG9Mb3dlckNhc2UiLCAicmVtb3ZlQ2xhc3MiLCAic2VsZWN0QWxsIiwgInNlbGVjdEludmVyc2UiLCAiZWFjaCIsICIkZWxlbWVudCIsICJzZWxlY3RBY3Rpb24iLCAiY2IiLCAicGFnZW5hbWUiLCAiZGF0YSIsICJjbGlja0FjdGlvbiIsICJidWlsZExpbmsiLCAiY2xhc3NuYW1lIiwgImEiLCAidGFyZ2V0IiwgInJlbCIsICIkcGFyZW50IiwgIm1ldGhvZHMiLCAiJGNvbnRhaW5lciIsICJtZXRob2RFeGlzdCIsICJKU09OIiwgInN0cmluZ2lmeSIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJtZXRob2QiLCAiYnVpbGRTZWxlY3Rpb24iLCAibWFpbiIsICJtZXRkIiwgIm10IiwgImRzYWIiLCAic2VsZSIsICJsb2FkUmVkaXJlY3QiLCAiZmluZFJlZGlyZWN0IiwgImRlZXAiLCAiZGVmZXJyZWQiLCAiRGVmZXJyZWQiLCAidG9wIiwgIm9uQ2xpY2tGaXgiLCAiZW50cnkiLCAicGFyZW50cyIsICJmaXJzdCIsICJyZGxpbWl0IiwgImhhc19yZWRpcmVjdCIsICJkZXNjIiwgIm1heGltdW1SZWRpcmVjdERlcHRoIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgInJlZGlyZWN0cyIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSIsICJyZHRpdGxlIiwgInVsdGl0bGUiLCAidXRpbCIsICJnZXRVcmwiLCAiaXNDeWNsZVJlZGlyZWN0IiwgInJlZGlyZWN0IiwgInJlc29sdmVXaXRoIiwgInJlamVjdFdpdGgiLCAicHJvbWlzZSIsICJmaW5kVmFyaWFudHMiLCAic3VmZml4UmVnIiwgInJldFRpdGxlcyIsICJfaTIiLCAiX1ZBUklBTlRTIiwgInZhcmlhbnQiLCAieGhyIiwgInVzZWxhbmciLCAiZGlzcGxheXRpdGxlIiwgInN1ZmZpeGVzIiwgIl9pMyIsICJfYXJncyIsICJzdWZmaXhBcnIiLCAiZXhlYyIsICJfaXRlcmF0b3I2IiwgIl9zdGVwNiIsICJtb2RpZmllZFRpdGxlIiwgImZpbmROb3RFeGlzdHMiLCAiZXhjbHVkZXMiLCAiYWxsdGl0bGVzIiwgIl9pNCIsICJfVkFSSUFOVFMyIiwgImNvbnRlbnRtb2RlbCIsICJfaTUiLCAiX2FyZ3MyIiwgIl9pdGVyYXRvcjciLCAiX3N0ZXA3IiwgIm1pc3NpbmciLCAiaGFzIiwgImZyY0RlZmVycmVkcyIsICIkY29udGVudCIsICJfaTYiLCAiX2ZpbmRSZWRpcmVjdENhbGxiYWNrIiwgInJldCIsICJvbkNsaWNrQ3JlYXRlIiwgIl9pNyIsICJfYXJnczMiLCAiZnZ0aXRsZXMiLCAiX2l0ZXJhdG9yOCIsICJfc3RlcDgiLCAicmVkbGluayIsICJ0b29sc1JlZGlyZWN0TWVzc2FnZXMiLCAiaW5jbHVkZXMiLCAibWVzc2FnZXMiLCAic2V0IiwgInRvb2xzUmVkaXJlY3RfYmlvX2xhdGluX25hbWVzIiwgInByZWZpeFJlZ2V4IiwgImNvbG9uUmVnZXgiLCAiX3BhZ2VuYW1lIiwgInByZXZpb3VzTm9kZSIsICJwcmV2aW91c1NpYmxpbmciLCAidGV4dENvbnRlbnQiLCAidG9vbHNSZWRpcmVjdF9jb3VydGVzeV9hbmRfYXJ0X25hbWVzIiwgImNvbXBTdXJuYW1lcyIsICJjb21wU3VybmFtZVJlZ2V4IiwgImZpbmRTdXJuYW1lIiwgInN1cm5hbWUiLCAibmFtZSIsICJ0b29sc1JlZGlyZWN0X29wdF9ib2xkcyIsICJ1c2VyIiwgIm9wdGlvbnMiXQp9Cg== diff --git a/dist/TranslateVariants/TranslateVariants.js b/dist/TranslateVariants/TranslateVariants.js index f833425e..d6da9e6c 100644 --- a/dist/TranslateVariants/TranslateVariants.js +++ b/dist/TranslateVariants/TranslateVariants.js @@ -27,9 +27,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -43,9 +43,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -57,9 +57,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -70,9 +70,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -83,9 +83,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -95,9 +95,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -109,9 +109,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -124,9 +124,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -140,9 +140,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -153,9 +153,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -170,9 +170,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -180,9 +180,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -193,9 +193,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -205,9 +205,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -218,9 +218,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -229,9 +229,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -244,18 +244,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -264,9 +264,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -291,9 +291,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -307,18 +307,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -334,9 +334,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -349,9 +349,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -363,9 +363,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -376,9 +376,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -394,17 +394,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -419,9 +419,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -429,18 +429,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -449,9 +449,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -461,9 +461,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -474,9 +474,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -488,9 +488,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -510,9 +510,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -538,9 +538,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -551,9 +551,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -565,9 +565,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -582,9 +582,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -607,9 +607,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -623,9 +623,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -637,9 +637,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -683,9 +683,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -699,9 +699,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -719,9 +719,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -736,9 +736,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -747,9 +747,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -760,17 +760,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -843,9 +843,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -898,9 +898,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -933,9 +933,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -946,9 +946,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -958,9 +958,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -972,9 +972,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -985,9 +985,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -996,9 +996,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1031,9 +1031,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1055,9 +1055,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1071,9 +1071,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1084,17 +1084,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1110,9 +1110,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1132,9 +1132,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1153,9 +1153,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1196,9 +1196,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js var require_set_helpers = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var SetPrototype = Set.prototype; @@ -1213,9 +1213,9 @@ var require_set_helpers = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js var require_a_set = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js"(exports, module2) { "use strict"; var has = require_set_helpers().has; module2.exports = function(it) { @@ -1225,9 +1225,9 @@ var require_a_set = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js var require_iterate_simple = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { "use strict"; var call = require_function_call(); module2.exports = function(record, fn, ITERATOR_INSTEAD_OF_RECORD) { @@ -1242,9 +1242,9 @@ var require_iterate_simple = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js var require_set_iterate = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var iterateSimple = require_iterate_simple(); @@ -1260,9 +1260,9 @@ var require_set_iterate = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js var require_set_clone = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js"(exports, module2) { "use strict"; var SetHelpers = require_set_helpers(); var iterate = require_set_iterate(); @@ -1278,9 +1278,9 @@ var require_set_clone = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js var require_function_uncurry_this_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var aCallable = require_a_callable(); @@ -1293,9 +1293,9 @@ var require_function_uncurry_this_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js var require_set_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js"(exports, module2) { "use strict"; var uncurryThisAccessor = require_function_uncurry_this_accessor(); var SetHelpers = require_set_helpers(); @@ -1305,9 +1305,9 @@ var require_set_size = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js var require_get_iterator_direct = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { "use strict"; module2.exports = function(obj) { return { @@ -1319,9 +1319,9 @@ var require_get_iterator_direct = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js var require_get_set_record = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var anObject = require_an_object(); @@ -1357,9 +1357,9 @@ var require_get_set_record = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js var require_set_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1385,9 +1385,9 @@ var require_set_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js var require_set_method_accept_set_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var createSetLike = function(size) { @@ -1422,9 +1422,9 @@ var require_set_method_accept_set_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js var require_es_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js"() { "use strict"; var $2 = require_export(); var difference = require_set_difference(); @@ -1435,17 +1435,9 @@ var require_es_set_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js -var require_esnext_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js"() { - "use strict"; - require_es_set_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js var require_set_intersection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1474,9 +1466,9 @@ var require_set_intersection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js var require_es_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js"() { "use strict"; var $2 = require_export(); var fails = require_fails(); @@ -1491,17 +1483,9 @@ var require_es_set_intersection_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js -var require_esnext_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js"() { - "use strict"; - require_es_set_intersection_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js var require_iterator_close = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js"(exports, module2) { "use strict"; var call = require_function_call(); var anObject = require_an_object(); @@ -1528,9 +1512,9 @@ var require_iterator_close = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js var require_set_is_disjoint_from = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1553,9 +1537,9 @@ var require_set_is_disjoint_from = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js var require_es_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { "use strict"; var $2 = require_export(); var isDisjointFrom = require_set_is_disjoint_from(); @@ -1566,17 +1550,9 @@ var require_es_set_is_disjoint_from_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js -var require_esnext_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"() { - "use strict"; - require_es_set_is_disjoint_from_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js var require_set_is_subset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var size = require_set_size(); @@ -1593,9 +1569,9 @@ var require_set_is_subset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js var require_es_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSubsetOf = require_set_is_subset_of(); @@ -1606,17 +1582,9 @@ var require_es_set_is_subset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js -var require_esnext_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"() { - "use strict"; - require_es_set_is_subset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js var require_set_is_superset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1636,9 +1604,9 @@ var require_set_is_superset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js var require_es_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSupersetOf = require_set_is_superset_of(); @@ -1649,17 +1617,9 @@ var require_es_set_is_superset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js -var require_esnext_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"() { - "use strict"; - require_es_set_is_superset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js var require_set_symmetric_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1682,9 +1642,9 @@ var require_set_symmetric_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js var require_es_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { "use strict"; var $2 = require_export(); var symmetricDifference = require_set_symmetric_difference(); @@ -1695,17 +1655,9 @@ var require_es_set_symmetric_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js -var require_esnext_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"() { - "use strict"; - require_es_set_symmetric_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js var require_set_union = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var add = require_set_helpers().add; @@ -1724,9 +1676,9 @@ var require_set_union = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js var require_es_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js"() { "use strict"; var $2 = require_export(); var union = require_set_union(); @@ -1737,22 +1689,14 @@ var require_es_set_union_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js -var require_esnext_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js"() { - "use strict"; - require_es_set_union_v2(); - } -}); - // dist/TranslateVariants/TranslateVariants.js -require_esnext_set_difference_v2(); -require_esnext_set_intersection_v2(); -require_esnext_set_is_disjoint_from_v2(); -require_esnext_set_is_subset_of_v2(); -require_esnext_set_is_superset_of_v2(); -require_esnext_set_symmetric_difference_v2(); -require_esnext_set_union_v2(); +require_es_set_difference_v2(); +require_es_set_intersection_v2(); +require_es_set_is_disjoint_from_v2(); +require_es_set_is_subset_of_v2(); +require_es_set_is_superset_of_v2(); +require_es_set_symmetric_difference_v2(); +require_es_set_union_v2(); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { @@ -2086,4 +2030,4 @@ void (0, import_ext_gadget3.getBody)().then(($body) => { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanMiLCAic3JjL1RyYW5zbGF0ZVZhcmlhbnRzL1RyYW5zbGF0ZVZhcmlhbnRzLnRzIiwgInNyYy9UcmFuc2xhdGVWYXJpYW50cy9vcHRpb25zLmpzb24iLCAic3JjL1RyYW5zbGF0ZVZhcmlhbnRzL1RyYW5zbGF0ZVZhcmlhbnRzLm1vZHVsZS5sZXNzIiwgInNyYy9UcmFuc2xhdGVWYXJpYW50cy9tb2R1bGVzL3RyYW5zbGF0ZVZhcmlhbnRzLnRzeCIsICJzcmMvVHJhbnNsYXRlVmFyaWFudHMvbW9kdWxlcy9hcGkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG4gIFNldDogU2V0LFxuICBhZGQ6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5hZGQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5oYXMpLFxuICByZW1vdmU6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZVsnZGVsZXRlJ10pLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBTZXRQcm90b3R5cGUgPSBTZXRIZWxwZXJzLnByb3RvO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuZm9yRWFjaCk7XG52YXIga2V5cyA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5rZXlzKTtcbnZhciBuZXh0ID0ga2V5cyhuZXcgU2V0KCkpLm5leHQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwgZm4sIGludGVycnVwdGlibGUpIHtcbiAgcmV0dXJuIGludGVycnVwdGlibGUgPyBpdGVyYXRlU2ltcGxlKHsgaXRlcmF0b3I6IGtleXMoc2V0KSwgbmV4dDogbmV4dCB9LCBmbikgOiBmb3JFYWNoKHNldCwgZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKFNldEhlbHBlcnMucHJvdG8sICdzaXplJywgJ2dldCcpIHx8IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIHNldC5zaXplO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgR2V0SXRlcmF0b3JEaXJlY3Qob2JqKWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVycy8jc2VjLWdldGl0ZXJhdG9yZGlyZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICBpdGVyYXRvcjogb2JqLFxuICAgIG5leHQ6IG9iai5uZXh0LFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgaW50U2l6ZSkge1xuICB0aGlzLnNldCA9IHNldDtcbiAgdGhpcy5zaXplID0gbWF4KGludFNpemUsIDApO1xuICB0aGlzLmhhcyA9IGFDYWxsYWJsZShzZXQuaGFzKTtcbiAgdGhpcy5rZXlzID0gYUNhbGxhYmxlKHNldC5rZXlzKTtcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihJTlZBTElEX1NJWkUpO1xuICB2YXIgaW50U2l6ZSA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtU2l6ZSk7XG4gIGlmIChpbnRTaXplIDwgMCkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHJldHVybiBuZXcgU2V0UmVjb3JkKG9iaiwgaW50U2l6ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICBlbHNlIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG52YXIgY3JlYXRlU2V0TGlrZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiB7XG4gICAgc2l6ZTogc2l6ZSxcbiAgICBoYXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgU2V0ID0gZ2V0QnVpbHRJbignU2V0Jyk7XG4gIHRyeSB7XG4gICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoMCkpO1xuICAgIHRyeSB7XG4gICAgICAvLyBsYXRlIHNwZWMgY2hhbmdlLCBlYXJseSBXZWJLaXQgfiBTYWZhcmkgMTcuMCBiZXRhIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHBhc3MgaXRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzL3B1bGwvODhcbiAgICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKC0xKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHtcbiAgICBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoaGFzKE8sIGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcnNlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxudmFyIElOQ09SUkVDVCA9ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpbnRlcnNlY3Rpb24nKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBlcy9uby1zZXQgLS0gdGVzdGluZ1xuICByZXR1cm4gU3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwgMiwgM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLCAyXSkpKSkgIT09ICczLDInO1xufSk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVCB9LCB7XG4gIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIHJldHVybiBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpdGVyYXRlKE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3Vic2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1YnNldE9mJykgfSwge1xuICBpc1N1YnNldE9mOiBpc1N1YnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3VwZXJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1cGVyc2V0T2YnKSB9LCB7XG4gIGlzU3VwZXJzZXRPZjogaXNTdXBlcnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gICAgZWxzZSBhZGQocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHN5bW1ldHJpY0RpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3N5bW1ldHJpY0RpZmZlcmVuY2UnKSB9LCB7XG4gIHN5bW1ldHJpY0RpZmZlcmVuY2U6IHN5bW1ldHJpY0RpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgYWRkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuYWRkO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXVuaW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCd1bmlvbicpIH0sIHtcbiAgdW5pb246IHVuaW9uXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQudW5pb24udjInKTtcbiIsICJpbXBvcnQge2dldEJvZHl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5pbXBvcnQge3RyYW5zbGF0ZVZhcmlhbnRzfSBmcm9tICcuL21vZHVsZXMvdHJhbnNsYXRlVmFyaWFudHMnO1xuXG52b2lkIGdldEJvZHkoKS50aGVuKCgkYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4pOiB2b2lkID0+IHtcblx0Y29uc3Qge3dnUGFnZU5hbWV9ID0gbXcuY29uZmlnLmdldCgpO1xuXHRpZiAoIS9eTWVkaWFXaWtpOlteL10rKFxcL3poKT8kLy50ZXN0KHdnUGFnZU5hbWUpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgcG9ydGxldElkOiAncC1jYWN0aW9ucycgfCAncC10YicgPSAkYm9keS5maW5kKCcjcC1jYWN0aW9ucycpLmxlbmd0aCA/ICdwLWNhY3Rpb25zJyA6ICdwLXRiJztcblx0Y29uc3QgZWxlbWVudDogSFRNTExJRWxlbWVudCB8IG51bGwgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKHBvcnRsZXRJZCwgJyMnLCB3aW5kb3cud2dVTFMoJ+i9rOaNouWPmOS9kycsICfovYnmj5vororpq5QnKSk7XG5cblx0ZWxlbWVudD8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKTogdm9pZCA9PiB7XG5cdFx0ZWxlbWVudC5yZW1vdmUoKTtcblx0XHR0cmFuc2xhdGVWYXJpYW50cyh3Z1BhZ2VOYW1lKTtcblx0fSk7XG59KTtcbiIsICJ7XG5cdFwidHJhbnNsYXRlVmFyaWFudHNTdW1tYXJ5XCI6IFwi6Ieq5Yqo6L2s5o2i5Y+Y5L2T6IeqW1skMV1d77yIW1tNZWRpYVdpa2k6R2FkZ2V0LVRyYW5zbGF0ZVZhcmlhbnRzLmpzfFRyYW5zbGF0ZVZhcmlhbnRzXV3vvIlcIixcblx0XCJjb250ZW50SURcIjogXCJUcmFuc2xhdGVWYXJpYW50cy1jb250ZW50XCIsXG5cdFwidmVyc2lvblwiOiBcIjIuMFwiXG59XG4iLCAiaW1wb3J0IFwiZXNidWlsZC1jc3MtbW9kdWxlcy1wbHVnaW4tbnMtY3NzOnNyYy9UcmFuc2xhdGVWYXJpYW50cy9UcmFuc2xhdGVWYXJpYW50cy5tb2R1bGUubGVzc1wiO1xuZXhwb3J0IGNvbnN0IG5vQ2hhbmdlcyA9IFwiVHJhbnNsYXRlVmFyaWFudHMtbW9kdWxlX19ub0NoYW5nZXNfWXZtLWxXXCI7XG5leHBvcnQgY29uc3QgcHVibGlzaENoYW5nZXMgPSBcIlRyYW5zbGF0ZVZhcmlhbnRzLW1vZHVsZV9fcHVibGlzaENoYW5nZXNfWXZtLWxXXCI7XG5leHBvcnQgY29uc3Qgc3VibWl0QWxsID0gXCJUcmFuc2xhdGVWYXJpYW50cy1tb2R1bGVfX3N1Ym1pdEFsbF9Zdm0tbFdcIjtcbmV4cG9ydCBjb25zdCB3YXJuaW5nID0gXCJUcmFuc2xhdGVWYXJpYW50cy1tb2R1bGVfX3dhcm5pbmdfWXZtLWxXXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCJub0NoYW5nZXNcIjogbm9DaGFuZ2VzLFxuICBcInB1Ymxpc2hDaGFuZ2VzXCI6IHB1Ymxpc2hDaGFuZ2VzLFxuICBcInN1Ym1pdEFsbFwiOiBzdWJtaXRBbGwsXG4gIFwid2FybmluZ1wiOiB3YXJuaW5nXG59O1xuICAgICAgIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi4vb3B0aW9ucy5qc29uJztcbmltcG9ydCB7bm9DaGFuZ2VzLCBwdWJsaXNoQ2hhbmdlcywgc3VibWl0QWxsLCB3YXJuaW5nfSBmcm9tICcuLi9UcmFuc2xhdGVWYXJpYW50cy5tb2R1bGUubGVzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAnZXh0LmdhZGdldC5SZWFjdCc7XG5pbXBvcnQge2FwaX0gZnJvbSAnLi9hcGknO1xuXG50eXBlIExhbmdzID0gJ3poJyB8ICd6aC1oYW5zJyB8ICd6aC1jbicgfCAnemgtbXknIHwgJ3poLXNnJyB8ICd6aC1oYW50JyB8ICd6aC1oaycgfCAnemgtbW8nIHwgJ3poLXR3JztcbmNvbnN0IGxhbmdzOiBTZXQ8TGFuZ3M+ID0gbmV3IFNldChbJ3poJywgJ3poLWhhbnMnLCAnemgtY24nLCAnemgtbXknLCAnemgtc2cnLCAnemgtaGFudCcsICd6aC1oaycsICd6aC1tbycsICd6aC10dyddKTtcbmNvbnN0IG5hbWVPZkxhbmdzID0ge1xuXHR6aDogJ+WOn+WniycsXG5cdCd6aC1oYW5zJzogJ+eugOS9kycsXG5cdCd6aC1jbic6ICfkuK3lm73lpKfpmYbnroDkvZMnLFxuXHQnemgtbXknOiAn6ams5p2l6KW/5Lqa566A5L2TJyxcblx0J3poLXNnJzogJ+aWsOWKoOWdoeeugOS9kycsXG5cdCd6aC1oYW50JzogJ+e5gemrlCcsXG5cdCd6aC1oayc6ICfkuK3lnIvpppnmuK/nuYHpq5QnLFxuXHQnemgtbW8nOiAn5Lit5ZyL5r6z6ZaA57mB6auUJyxcblx0J3poLXR3JzogJ+S4reWci+iHuueBo+e5gemrlCcsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8TGFuZ3MsIHN0cmluZz47XG5cbmNvbnN0IHRyYW5zbGF0ZVZhcmlhbnRzID0gKHdnUGFnZU5hbWU6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRjb25zdCBzdW1tYXJ5OiBzdHJpbmcgPSBPUFRJT05TLnRyYW5zbGF0ZVZhcmlhbnRzU3VtbWFyeS5yZXBsYWNlKC9cXCQxL2csIHdnUGFnZU5hbWUpO1xuXG5cdGNvbnN0ICR3cmFwcGVyOiBKUXVlcnkgPSAoJCg8ZGl2IGlkPVwiVHJhbnNsYXRlVmFyaWFudHNcIiAvPikgYXMgSlF1ZXJ5KS5wcmVwZW5kVG8oJyNib2R5Q29udGVudCcpO1xuXG5cdGNvbnN0ICRzdWJtaXRBbGw6IEpRdWVyeSA9ICQoXG5cdFx0PGJ1dHRvbiBjbGFzc05hbWU9e1snY2R4LWJ1dHRvbicsICdjZHgtYnV0dG9uLS1hY3Rpb24tcHJvZ3Jlc3NpdmUnLCAnY2R4LWJ1dHRvbi0td2VpZ2h0LXByaW1hcnknXX0+XG5cdFx0XHR7d2luZG93LndnVUxTKCflj5HluIPmiYDmnInmm7TmlLknLCAn55m85L2I5omA5pyJ6K6K5pu0Jyl9XG5cdFx0PC9idXR0b24+XG5cdCkgYXMgSlF1ZXJ5O1xuXHQkc3VibWl0QWxsLm9uKCdjbGljaycsICgpOiB2b2lkID0+IHtcblx0XHRjb25zdCAkYnV0dG9uczogSlF1ZXJ5ID0gJHdyYXBwZXIuZmluZChgLiR7cHVibGlzaENoYW5nZXN9YCk7XG5cdFx0aWYgKCEkYnV0dG9ucy5sZW5ndGgpIHtcblx0XHRcdHZvaWQgbXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5rKh5pyJ5Lu75L2V5Y+v5Lul5Y+R5biD55qE5pu05pS5JywgJ+aykuacieS7u+S9leiuiuabtOWPr+eZvOS9iCcpLCB7XG5cdFx0XHRcdHRhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJyxcblx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghY29uZmlybSh3aW5kb3cud2dVTFMoJ+WPkeW4gyQx5Liq5pu05pS577yfJywgJ+eZvOS9iCQx5YCL6K6K5pu077yfJykucmVwbGFjZSgnJDEnLCBgJHskYnV0dG9ucy5sZW5ndGh9YCkpKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+W3suWPlua2iOWPkeW4gycsICflt7Llj5bmtojnmbzkvYgnKSwge3RhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJywgdHlwZTogJ3dhcm4nfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBidXR0b24gb2YgJGJ1dHRvbnMpIHtcblx0XHRcdCQoYnV0dG9uKS50cmlnZ2VyKCdjbGljaycpO1xuXHRcdH1cblx0fSk7XG5cblx0JHdyYXBwZXIuYXBwZW5kKFxuXHRcdCQoPGRpdiBjbGFzc05hbWU9e3N1Ym1pdEFsbH0gLz4pLmFwcGVuZCgkc3VibWl0QWxsKSxcblx0XHQ8ZGl2IGNsYXNzTmFtZT17d2FybmluZ30+XG5cdFx0XHR7d2luZG93LndnVUxTKFxuXHRcdFx0XHQn5o+Q6YaS77yaVHJhbnNsYXRlVmFyaWFudHPlt6Xlhbfkvb/nlKhJVOWPik1lZGlhV2lraei9rOaNoue7hOi/m+ihjOiHquWKqOi9rOaNou+8jOivt+ehruiupOi9rOaNoue7k+aenOaYr+WQpuato+ehru+8gScsXG5cdFx0XHRcdCfmj5DphpLvvJpUcmFuc2xhdGVWYXJpYW50c+W3peWFt+S9v+eUqElU5Y+KTWVkaWFXaWtp6L2J5o+b57WE6YCy6KGM6Ieq5YuV6L2J5o+b77yM6KuL56K66KqN6L2J5o+b57WQ5p6c5piv5ZCm5q2j56K677yBJ1xuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KTtcblxuXHRjb25zdCBkZWZhdWx0TGFuZ3M6IExhbmdzW10gPSBbLi4ubGFuZ3NdO1xuXG5cdGxldCBydW5MYW5ncyA9IHByb21wdChcblx0XHR3aW5kb3cud2dVTFMoJ+i9rOaNouS7peS4i+ivreiogO+8iOS7pemAl+WPt+malOW8gO+8ie+8micsICfovYnmj5vku6XkuIvoqp7oqIDvvIjku6XpgJfomZ/pmpTplovvvInvvJonKSxcblx0XHRkZWZhdWx0TGFuZ3Muam9pbignLCcpXG5cdCk/LnNwbGl0KCcsJykgYXMgTGFuZ3NbXSB8IG51bGw7XG5cdGlmIChydW5MYW5ncyA9PT0gbnVsbCkge1xuXHRcdHJ1bkxhbmdzID0gZGVmYXVsdExhbmdzO1xuXHR9XG5cblx0Y29uc3QgbGFuZ1F1ZXVlOiBMYW5nc1tdID0gcnVuTGFuZ3Ncblx0XHQubWFwKChsYW5nOiBMYW5ncyk6IExhbmdzID0+IGxhbmcudHJpbSgpIGFzIExhbmdzKVxuXHRcdC5maWx0ZXIoKGxhbmc6IExhbmdzKTogYm9vbGVhbiA9PiBsYW5ncy5oYXMobGFuZykpO1xuXG5cdGNvbnN0IHByb2Nlc3MgPSAocGFnZUNvbnRlbnQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdGlmICghbGFuZ1F1ZXVlLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxhbmcgPSBsYW5nUXVldWUuc2hpZnQoKSBhcyBMYW5ncztcblxuXHRcdGNvbnN0ICRkaWZmVGFibGU6IEpRdWVyeSA9ICQoPGRpdiBpZD17YFRyYW5zbGF0ZVZhcmlhbnRzLWRpZmYtJHtsYW5nfWB9IC8+KSBhcyBKUXVlcnk7XG5cdFx0JHdyYXBwZXIuYXBwZW5kKCRkaWZmVGFibGUsIDxociAvPik7XG5cblx0XHRjb25zdCBiYXNlUGFnZU5hbWU6IHN0cmluZyA9IHdnUGFnZU5hbWUucmVwbGFjZSgvXFwvemgkLywgJycpO1xuXHRcdGNvbnN0IHRhcmdldFRpdGxlOiBzdHJpbmcgPSBsYW5nID09PSAnemgnID8gYmFzZVBhZ2VOYW1lIDogYCR7YmFzZVBhZ2VOYW1lfS8ke2xhbmd9YDtcblxuXHRcdGxldCBuZXdQYWdlQ29udGVudDogc3RyaW5nID0gJyc7XG5cdFx0dm9pZCBhcGlcblx0XHRcdC5wYXJzZShge3tOb3RlVEF8RzE9SVR8RzI9TWVkaWFXaWtpfX08ZGl2IGlkPVwiJHtPUFRJT05TLmNvbnRlbnRJRH1cIj4ke3BhZ2VDb250ZW50fTwvZGl2PmAsIHtcblx0XHRcdFx0dXNlbGFuZzogbGFuZyxcblx0XHRcdH0pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdG5ld1BhZ2VDb250ZW50ID0gJCg8ZGl2IGlubmVySFRNTD17Y29udGVudH0gLz4pXG5cdFx0XHRcdFx0XHQuZmluZChgIyR7T1BUSU9OUy5jb250ZW50SUR9YClcblx0XHRcdFx0XHRcdC50ZXh0KCk7XG5cblx0XHRcdFx0XHRjb25zdCBfcGFyYW1zOiBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdFx0XHRcdFx0dGl0bGVzOiB0YXJnZXRUaXRsZSxcblx0XHRcdFx0XHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdFx0XHRcdFx0cnZkaWZmdG90ZXh0OiBuZXdQYWdlQ29udGVudCxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0cmV0dXJuIGFwaS5wb3N0KF9wYXJhbXMpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQoZXJyb3IpOiBudWxsID0+IHtcblx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6Kej5p6QJDHml7blj5HnlJ/plJnor6/vvJonLCAn6Kej5p6QJDHmmYLnmbznlJ/pjK/oqqTvvJonKS5yZXBsYWNlKCckMScsIGxhbmcpICsgZXJyb3IsXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHRcdC50aGVuKFxuXHRcdFx0XHQoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdGlmIChkYXRhID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgJHRvb2wgPSAkKFxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PGEgaHJlZj17bXcudXRpbC5nZXRVcmwodGFyZ2V0VGl0bGUpfT5cblx0XHRcdFx0XHRcdFx0XHR7bGFuZ33vvIh7bmFtZU9mTGFuZ3NbbGFuZ11977yJXG5cdFx0XHRcdFx0XHRcdDwvYT5cblx0XHRcdFx0XHRcdFx077yIPGEgaHJlZj17bXcudXRpbC5nZXRVcmwodGFyZ2V0VGl0bGUsIHthY3Rpb246ICdlZGl0J30pfT57d2luZG93LndnVUxTKCfnvJYnLCAn57eoJyl9PC9hPu+8iVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KSBhcyBKUXVlcnk7XG5cblx0XHRcdFx0XHQkZGlmZlRhYmxlLmFwcGVuZCgkdG9vbCk7XG5cblx0XHRcdFx0XHRjb25zdCBbcGFnZV0gPSBkYXRhWydxdWVyeSddLnBhZ2VzO1xuXHRcdFx0XHRcdGlmIChwYWdlLm1pc3NpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0ICRzdWJtaXQgPSAkKFxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzTmFtZT17W3B1Ymxpc2hDaGFuZ2VzLCAnY2R4LWJ1dHRvbiddfT5cblx0XHRcdFx0XHRcdFx0XHR7d2luZG93LndnVUxTKCflj5HluIPpobXpnaInLCAn55m85L2I6aCB6Z2iJyl9XG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0KSBhcyBKUXVlcnk7XG5cdFx0XHRcdFx0XHQkc3VibWl0Lm9uKCdjbGljaycsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0JHN1Ym1pdC5yZW1vdmUoKTtcblxuXHRcdFx0XHRcdFx0XHRhcGkuY3JlYXRlKFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRuZXdQYWdlQ29udGVudFxuXHRcdFx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdFx0KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCflt7LnvJbovpEgJywgJ+W3sue3qOi8ryAnKSArIHRhcmdldFRpdGxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3N1Y2Nlc3MnLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHQoZXJyb3IpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+e8lui+kScsICfnt6jovK8gJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcmdldFRpdGxlICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDlj5HnlJ/plJnor6/vvJonLCAnIOeZvOeUn+mMr+iqpO+8micpICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnZXJyb3InLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkdG9vbC5hcHBlbmQoJHN1Ym1pdCk7XG5cdFx0XHRcdFx0XHQkZGlmZlRhYmxlLmFwcGVuZChcblx0XHRcdFx0XHRcdFx0PHByZVxuXHRcdFx0XHRcdFx0XHRcdGlubmVySFRNTD17bmV3UGFnZUNvbnRlbnQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0XHRcdC9bJjw+XS9naW0sXG5cdFx0XHRcdFx0XHRcdFx0XHQoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4gYCYjJHtzdHJpbmcuY29kZVBvaW50QXQoMCl9O2Bcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGRpZmY6IHN0cmluZyA9IHBhZ2UucmV2aXNpb25zWzBdLmRpZmYuYm9keTtcblx0XHRcdFx0XHRpZiAoZGlmZiA9PT0gJycpIHtcblx0XHRcdFx0XHRcdCR0b29sLmFwcGVuZCg8c3BhbiBjbGFzc05hbWU9e25vQ2hhbmdlc30+e3dpbmRvdy53Z1VMUygn5peg5pu05pS5JywgJ+eEoeiuiuabtCcpfTwvc3Bhbj4pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkc3VibWl0ID0gJChcblx0XHRcdFx0XHRcdFx0PGJ1dHRvbiBjbGFzc05hbWU9e1twdWJsaXNoQ2hhbmdlcywgJ2NkeC1idXR0b24nXX0+XG5cdFx0XHRcdFx0XHRcdFx0e3dpbmRvdy53Z1VMUygn5Y+R5biD5pu05pS5JywgJ+eZvOS9iOiuiuabtCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdCkgYXMgSlF1ZXJ5O1xuXHRcdFx0XHRcdFx0JHN1Ym1pdC5vbignY2xpY2snLCAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdCRzdWJtaXQucmVtb3ZlKCk7XG5cblx0XHRcdFx0XHRcdFx0YXBpLmVkaXQodGFyZ2V0VGl0bGUsICgpID0+ICh7XG5cdFx0XHRcdFx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBuZXdQYWdlQ29udGVudCxcblx0XHRcdFx0XHRcdFx0XHRub2NyZWF0ZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdH0pKS50aGVuKFxuXHRcdFx0XHRcdFx0XHRcdCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5bey57yW6L6RJywgJ+W3sue3qOi8ryAnKSArIHRhcmdldFRpdGxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3N1Y2Nlc3MnLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHQoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3dcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQud2dVTFMoJ+e8lui+kSQx5Y+R55Sf6ZSZ6K+v77yaJywgJ+e3qOi8ryQx55m855Sf6Yyv6Kqk77yaJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgnJDEnLCB0YXJnZXRUaXRsZSkgKyBlcnJvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnZXJyb3InLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkdG9vbC5hcHBlbmQoJHN1Ym1pdCk7XG5cdFx0XHRcdFx0XHQkZGlmZlRhYmxlLmFwcGVuZChcblx0XHRcdFx0XHRcdFx0JCg8dGFibGUgY2xhc3NOYW1lPVwiZGlmZlwiIGlubmVySFRNTD17ZGlmZn0gLz4pLnByZXBlbmQoXG5cdFx0XHRcdFx0XHRcdFx0PGNvbGdyb3VwPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGNvbCBjbGFzc05hbWU9XCJkaWZmLW1hcmtlclwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y29sIGNsYXNzTmFtZT1cImRpZmYtY29udGVudFwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y29sIGNsYXNzTmFtZT1cImRpZmYtbWFya2VyXCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDxjb2wgY2xhc3NOYW1lPVwiZGlmZi1jb250ZW50XCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L2NvbGdyb3VwPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0KGVycm9yKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPliQx5beu5byC5pe25Y+R55Sf6ZSZ6K+v77yaJywgJ+WPluW+lyQx5beu55Ww5pmC55m855Sf6Yyv6Kqk77yaJykucmVwbGFjZSgnJDEnLCBsYW5nKSArIGVycm9yLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdUcmFuc2xhdGVWYXJpYW50cycsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdFx0LmFsd2F5cygoKTogdm9pZCA9PiB7XG5cdFx0XHRcdHByb2Nlc3MocGFnZUNvbnRlbnQpO1xuXHRcdFx0fSk7XG5cdH07XG5cblx0Y29uc3QgcGFyYW1zOiBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyA9IHtcblx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdHRpdGxlczogd2dQYWdlTmFtZSxcblx0XHRjdXJ0aW1lc3RhbXA6IHRydWUsXG5cdFx0cnZwcm9wOiBbJ2NvbnRlbnQnLCAndGltZXN0YW1wJ10sXG5cdH07XG5cblx0dm9pZCBhcGlcblx0XHQuZ2V0KHBhcmFtcylcblx0XHQudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKCFkYXRhWydxdWVyeSddPy5wYWdlcykge1xuXHRcdFx0XHRyZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdCgndW5rbm93bicpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBbcGFnZV0gPSBkYXRhWydxdWVyeSddLnBhZ2VzO1xuXG5cdFx0XHRpZiAocGFnZS5pbnZhbGlkKSB7XG5cdFx0XHRcdHJldHVybiAkLkRlZmVycmVkKCkucmVqZWN0KCdpbnZhbGlkdGl0bGUnKTtcblx0XHRcdH1cblx0XHRcdGlmIChwYWdlLm1pc3NpbmcpIHtcblx0XHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3QoJ25vY3JlYXRlLW1pc3NpbmcnKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgW3tjb250ZW50fV0gPSBwYWdlLnJldmlzaW9ucztcblxuXHRcdFx0cmV0dXJuIGNvbnRlbnQgYXMgc3RyaW5nO1xuXHRcdH0pXG5cdFx0LnRoZW4oKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0XHRsZXQgcGFnZUNvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnQ7XG5cblx0XHRcdHBhZ2VDb250ZW50ID0gcGFnZUNvbnRlbnQucmVwbGFjZShcblx0XHRcdFx0L1tcXHMjJicqOjw+W1xcXV97fH1dL2dpbSxcblx0XHRcdFx0KHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+IGAmIyR7c3RyaW5nLmNvZGVQb2ludEF0KDApfTtgXG5cdFx0XHQpO1xuXHRcdFx0cGFnZUNvbnRlbnQgPSBwYWdlQ29udGVudC5yZXBsYWNlKFxuXHRcdFx0XHQvKCYjOTE7JiM5MTspKCg/Oig/ISYjMTI0OykoPyEmIzkzOykuKSs/KSgmIzEyNDsoPzooPyEmIzkzOykuKSs/JiM5MzsmIzkzOykvZyxcblx0XHRcdFx0JyQxLXskMn0tJDMnXG5cdFx0XHQpO1xuXHRcdFx0cGFnZUNvbnRlbnQgPSBwYWdlQ29udGVudC5yZXBsYWNlKC8tJiMxMjM7KC4rPykmIzEyNTstL2csIChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PlxuXHRcdFx0XHRzdHJpbmdcblx0XHRcdFx0XHQucmVwbGFjZSgnLSYjMTIzOycsICcteycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoJy0mIzEyMzsnLCAnLXsnKVxuXHRcdFx0XHRcdC5yZXBsYWNlKCcmIzEyNTstJywgJ30tJylcblx0XHRcdFx0XHQucmVwbGFjZSgvJiMxMjQ7L2csICd8Jylcblx0XHRcdFx0XHQucmVwbGFjZSgvJiMzMjsvZywgJyAnKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mIzYxOy9nLCAnPScpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjNjI7L2csICc+Jylcblx0XHRcdFx0XHQucmVwbGFjZSgvJiM1ODsvZywgJzonKVxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIHBhZ2VDb250ZW50O1xuXHRcdH0pXG5cdFx0LnRoZW4oKHBhZ2VDb250ZW50OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdHByb2Nlc3MocGFnZUNvbnRlbnQpO1xuXHRcdH0pO1xufTtcblxuZXhwb3J0IHt0cmFuc2xhdGVWYXJpYW50c307XG4iLCAiaW1wb3J0ICogYXMgT1BUSU9OUyBmcm9tICcuLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmNvbnN0IGFwaTogbXcuQXBpID0gaW5pdE13QXBpKGBUcmFuc2xhdGVWYXJpYW50cy8ke09QVElPTlMudmVyc2lvbn1gKTtcblxuZXhwb3J0IHthcGl9O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw2RkFBQUEsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFB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QUFLLGFBQWEsRUFBRUMsU0FBUyxlQUFlO0FBQzNGLFFBQU1xRixVQUFnQ3BGLEdBQUdzRCxLQUFLK0IsZUFBZUYsV0FBVyxLQUFLekYsT0FBT0MsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUV6R3lGLGNBQUEsUUFBQUEsWUFBQSxVQUFBQSxRQUFTRSxpQkFBaUIsU0FBUyxNQUFZO0FBQzlDRixZQUFReEIsT0FBTztBQUNmL0Usc0JBQWtCQyxVQUFVO0VBQzdCLENBQUM7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJ2ZXJzaW9uIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJTZXQiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAiU2V0IiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICIkIiwgImltcG9ydF9leHRfZ2FkZ2V0MyIsICJyZXF1aXJlIiwgInRyYW5zbGF0ZVZhcmlhbnRzU3VtbWFyeSIsICJjb250ZW50SUQiLCAidmVyc2lvbiIsICJub0NoYW5nZXMiLCAicHVibGlzaENoYW5nZXMiLCAic3VibWl0QWxsIiwgIndhcm5pbmciLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgIl9fdG9FU00iLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiYXBpIiwgImluaXRNd0FwaSIsICJjb25jYXQiLCAibGFuZ3MiLCAiU2V0IiwgIm5hbWVPZkxhbmdzIiwgInpoIiwgInRyYW5zbGF0ZVZhcmlhbnRzIiwgIndnUGFnZU5hbWUiLCAiX3Byb21wdCIsICJzdW1tYXJ5IiwgInJlcGxhY2UiLCAiJHdyYXBwZXIiLCAiJCIsICJkZWZhdWx0IiwgImNyZWF0ZUVsZW1lbnQiLCAiaWQiLCAicHJlcGVuZFRvIiwgIiRzdWJtaXRBbGwiLCAiY2xhc3NOYW1lIiwgIndpbmRvdyIsICJ3Z1VMUyIsICJvbiIsICIkYnV0dG9ucyIsICJmaW5kIiwgImxlbmd0aCIsICJtdyIsICJub3RpZnkiLCAidGFnIiwgInR5cGUiLCAiY29uZmlybSIsICJfaXRlcmF0b3IyIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwMiIsICJzIiwgIm4iLCAiZG9uZSIsICJidXR0b24iLCAidmFsdWUiLCAidHJpZ2dlciIsICJlcnIiLCAiZSIsICJmIiwgImFwcGVuZCIsICJkZWZhdWx0TGFuZ3MiLCAicnVuTGFuZ3MiLCAicHJvbXB0IiwgImpvaW4iLCAic3BsaXQiLCAibGFuZ1F1ZXVlIiwgIm1hcCIsICJsYW5nIiwgInRyaW0iLCAiZmlsdGVyIiwgImhhcyIsICJwcm9jZXNzIiwgInBhZ2VDb250ZW50IiwgInNoaWZ0IiwgIiRkaWZmVGFibGUiLCAiYmFzZVBhZ2VOYW1lIiwgInRhcmdldFRpdGxlIiwgIm5ld1BhZ2VDb250ZW50IiwgInBhcnNlIiwgInVzZWxhbmciLCAidGhlbiIsICJjb250ZW50IiwgImlubmVySFRNTCIsICJ0ZXh0IiwgIl9wYXJhbXMiLCAiYWN0aW9uIiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgInRpdGxlcyIsICJwcm9wIiwgInJ2ZGlmZnRvdGV4dCIsICJwb3N0IiwgImVycm9yIiwgImRhdGEiLCAiJHRvb2wiLCAiaHJlZiIsICJ1dGlsIiwgImdldFVybCIsICJwYWdlIiwgInBhZ2VzIiwgIm1pc3NpbmciLCAiJHN1Ym1pdCIsICJyZW1vdmUiLCAiY3JlYXRlIiwgInN0cmluZyIsICJjb2RlUG9pbnRBdCIsICJkaWZmIiwgInJldmlzaW9ucyIsICJib2R5IiwgImVkaXQiLCAibm9jcmVhdGUiLCAicHJlcGVuZCIsICJhbHdheXMiLCAicGFyYW1zIiwgImN1cnRpbWVzdGFtcCIsICJydnByb3AiLCAiZ2V0IiwgIl9kYXRhJHF1ZXJ5IiwgIkRlZmVycmVkIiwgInJlamVjdCIsICJpbnZhbGlkIiwgImdldEJvZHkiLCAiJGJvZHkiLCAiY29uZmlnIiwgInRlc3QiLCAicG9ydGxldElkIiwgImVsZW1lbnQiLCAiYWRkUG9ydGxldExpbmsiLCAiYWRkRXZlbnRMaXN0ZW5lciJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgInNyYy9UcmFuc2xhdGVWYXJpYW50cy9UcmFuc2xhdGVWYXJpYW50cy50cyIsICJzcmMvVHJhbnNsYXRlVmFyaWFudHMvb3B0aW9ucy5qc29uIiwgInNyYy9UcmFuc2xhdGVWYXJpYW50cy9UcmFuc2xhdGVWYXJpYW50cy5tb2R1bGUubGVzcyIsICJzcmMvVHJhbnNsYXRlVmFyaWFudHMvbW9kdWxlcy90cmFuc2xhdGVWYXJpYW50cy50c3giLCAic3JjL1RyYW5zbGF0ZVZhcmlhbnRzL21vZHVsZXMvYXBpLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxuICBTZXQ6IFNldCxcbiAgYWRkOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuYWRkKSxcbiAgaGFzOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGVbJ2RlbGV0ZSddKSxcbiAgcHJvdG86IFNldFByb3RvdHlwZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xuXG4vLyBQZXJmb3JtID8gUmVxdWlyZUludGVybmFsU2xvdChNLCBbW1NldERhdGFdXSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGhhcyhpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWNvcmQsIGZuLCBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCkge1xuICB2YXIgaXRlcmF0b3IgPSBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCA/IHJlY29yZCA6IHJlY29yZC5pdGVyYXRvcjtcbiAgdmFyIG5leHQgPSByZWNvcmQubmV4dDtcbiAgdmFyIHN0ZXAsIHJlc3VsdDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gZm4oc3RlcC52YWx1ZSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgU2V0UHJvdG90eXBlID0gU2V0SGVscGVycy5wcm90bztcbnZhciBmb3JFYWNoID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmZvckVhY2gpO1xudmFyIGtleXMgPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUua2V5cyk7XG52YXIgbmV4dCA9IGtleXMobmV3IFNldCgpKS5uZXh0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQsIGZuLCBpbnRlcnJ1cHRpYmxlKSB7XG4gIHJldHVybiBpbnRlcnJ1cHRpYmxlID8gaXRlcmF0ZVNpbXBsZSh7IGl0ZXJhdG9yOiBrZXlzKHNldCksIG5leHQ6IG5leHQgfSwgZm4pIDogZm9yRWFjaChzZXQsIGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGl0ZXJhdGUoc2V0LCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihTZXRIZWxwZXJzLnByb3RvLCAnc2l6ZScsICdnZXQnKSB8fCBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbnZhciBJTlZBTElEX1NJWkUgPSAnSW52YWxpZCBzaXplJztcbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBtYXggPSBNYXRoLm1heDtcblxudmFyIFNldFJlY29yZCA9IGZ1bmN0aW9uIChzZXQsIGludFNpemUpIHtcbiAgdGhpcy5zZXQgPSBzZXQ7XG4gIHRoaXMuc2l6ZSA9IG1heChpbnRTaXplLCAwKTtcbiAgdGhpcy5oYXMgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gIHRoaXMua2V5cyA9IGFDYWxsYWJsZShzZXQua2V5cyk7XG59O1xuXG5TZXRSZWNvcmQucHJvdG90eXBlID0ge1xuICBnZXRJdGVyYXRvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJdGVyYXRvckRpcmVjdChhbk9iamVjdChjYWxsKHRoaXMua2V5cywgdGhpcy5zZXQpKSk7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gY2FsbCh0aGlzLmhhcywgdGhpcy5zZXQsIGl0KTtcbiAgfVxufTtcblxuLy8gYEdldFNldFJlY29yZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc2V0LW1ldGhvZHMvI3NlYy1nZXRzZXRyZWNvcmRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICBhbk9iamVjdChvYmopO1xuICB2YXIgbnVtU2l6ZSA9ICtvYmouc2l6ZTtcbiAgLy8gTk9URTogSWYgc2l6ZSBpcyB1bmRlZmluZWQsIHRoZW4gbnVtU2l6ZSB3aWxsIGJlIE5hTlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtU2l6ZSAhPT0gbnVtU2l6ZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgdmFyIGludFNpemUgPSB0b0ludGVnZXJPckluZmluaXR5KG51bVNpemUpO1xuICBpZiAoaW50U2l6ZSA8IDApIHRocm93IG5ldyAkUmFuZ2VFcnJvcihJTlZBTElEX1NJWkUpO1xuICByZXR1cm4gbmV3IFNldFJlY29yZChvYmosIGludFNpemUpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgZWxzZSBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxudmFyIGNyZWF0ZVNldExpa2UgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIHNpemU6IHNpemUsXG4gICAgaGFzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIFNldCA9IGdldEJ1aWx0SW4oJ1NldCcpO1xuICB0cnkge1xuICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKDApKTtcbiAgICB0cnkge1xuICAgICAgLy8gbGF0ZSBzcGVjIGNoYW5nZSwgZWFybHkgV2ViS2l0IH4gU2FmYXJpIDE3LjAgYmV0YSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwYXNzIGl0XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kcy9wdWxsLzg4XG4gICAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgtMSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yMikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2RpZmZlcmVuY2UnKSB9LCB7XG4gIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEaXNqb2ludEZyb20ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSByZXR1cm4gaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzRGlzam9pbnRGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc0Rpc2pvaW50RnJvbScpIH0sIHtcbiAgaXNEaXNqb2ludEZyb206IGlzRGlzam9pbnRGcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3Vic2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhdGUoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdXBlcnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPCBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1cGVyc2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdXBlcnNldE9mJykgfSwge1xuICBpc1N1cGVyc2V0T2Y6IGlzU3VwZXJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICAgIGVsc2UgYWRkKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzeW1tZXRyaWNEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdzeW1tZXRyaWNEaWZmZXJlbmNlJykgfSwge1xuICBzeW1tZXRyaWNEaWZmZXJlbmNlOiBzeW1tZXRyaWNEaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGFkZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmFkZDtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuaW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC11bmlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgndW5pb24nKSB9LCB7XG4gIHVuaW9uOiB1bmlvblxufSk7XG4iLCAiaW1wb3J0IHtnZXRCb2R5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuaW1wb3J0IHt0cmFuc2xhdGVWYXJpYW50c30gZnJvbSAnLi9tb2R1bGVzL3RyYW5zbGF0ZVZhcmlhbnRzJztcblxudm9pZCBnZXRCb2R5KCkudGhlbigoJGJvZHk6IEpRdWVyeTxIVE1MQm9keUVsZW1lbnQ+KTogdm9pZCA9PiB7XG5cdGNvbnN0IHt3Z1BhZ2VOYW1lfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0aWYgKCEvXk1lZGlhV2lraTpbXi9dKyhcXC96aCk/JC8udGVzdCh3Z1BhZ2VOYW1lKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHBvcnRsZXRJZDogJ3AtY2FjdGlvbnMnIHwgJ3AtdGInID0gJGJvZHkuZmluZCgnI3AtY2FjdGlvbnMnKS5sZW5ndGggPyAncC1jYWN0aW9ucycgOiAncC10Yic7XG5cdGNvbnN0IGVsZW1lbnQ6IEhUTUxMSUVsZW1lbnQgfCBudWxsID0gbXcudXRpbC5hZGRQb3J0bGV0TGluayhwb3J0bGV0SWQsICcjJywgd2luZG93LndnVUxTKCfovazmjaLlj5jkvZMnLCAn6L2J5o+b6K6K6auUJykpO1xuXG5cdGVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk6IHZvaWQgPT4ge1xuXHRcdGVsZW1lbnQucmVtb3ZlKCk7XG5cdFx0dHJhbnNsYXRlVmFyaWFudHMod2dQYWdlTmFtZSk7XG5cdH0pO1xufSk7XG4iLCAie1xuXHRcInRyYW5zbGF0ZVZhcmlhbnRzU3VtbWFyeVwiOiBcIuiHquWKqOi9rOaNouWPmOS9k+iHqltbJDFdXe+8iFtbTWVkaWFXaWtpOkdhZGdldC1UcmFuc2xhdGVWYXJpYW50cy5qc3xUcmFuc2xhdGVWYXJpYW50c11d77yJXCIsXG5cdFwiY29udGVudElEXCI6IFwiVHJhbnNsYXRlVmFyaWFudHMtY29udGVudFwiLFxuXHRcInZlcnNpb25cIjogXCIyLjBcIlxufVxuIiwgImltcG9ydCBcImVzYnVpbGQtY3NzLW1vZHVsZXMtcGx1Z2luLW5zLWNzczpzcmMvVHJhbnNsYXRlVmFyaWFudHMvVHJhbnNsYXRlVmFyaWFudHMubW9kdWxlLmxlc3NcIjtcbmV4cG9ydCBjb25zdCBub0NoYW5nZXMgPSBcIlRyYW5zbGF0ZVZhcmlhbnRzLW1vZHVsZV9fbm9DaGFuZ2VzX1l2bS1sV1wiO1xuZXhwb3J0IGNvbnN0IHB1Ymxpc2hDaGFuZ2VzID0gXCJUcmFuc2xhdGVWYXJpYW50cy1tb2R1bGVfX3B1Ymxpc2hDaGFuZ2VzX1l2bS1sV1wiO1xuZXhwb3J0IGNvbnN0IHN1Ym1pdEFsbCA9IFwiVHJhbnNsYXRlVmFyaWFudHMtbW9kdWxlX19zdWJtaXRBbGxfWXZtLWxXXCI7XG5leHBvcnQgY29uc3Qgd2FybmluZyA9IFwiVHJhbnNsYXRlVmFyaWFudHMtbW9kdWxlX193YXJuaW5nX1l2bS1sV1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwibm9DaGFuZ2VzXCI6IG5vQ2hhbmdlcyxcbiAgXCJwdWJsaXNoQ2hhbmdlc1wiOiBwdWJsaXNoQ2hhbmdlcyxcbiAgXCJzdWJtaXRBbGxcIjogc3VibWl0QWxsLFxuICBcIndhcm5pbmdcIjogd2FybmluZ1xufTtcbiAgICAgICIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge25vQ2hhbmdlcywgcHVibGlzaENoYW5nZXMsIHN1Ym1pdEFsbCwgd2FybmluZ30gZnJvbSAnLi4vVHJhbnNsYXRlVmFyaWFudHMubW9kdWxlLmxlc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHthcGl9IGZyb20gJy4vYXBpJztcblxudHlwZSBMYW5ncyA9ICd6aCcgfCAnemgtaGFucycgfCAnemgtY24nIHwgJ3poLW15JyB8ICd6aC1zZycgfCAnemgtaGFudCcgfCAnemgtaGsnIHwgJ3poLW1vJyB8ICd6aC10dyc7XG5jb25zdCBsYW5nczogU2V0PExhbmdzPiA9IG5ldyBTZXQoWyd6aCcsICd6aC1oYW5zJywgJ3poLWNuJywgJ3poLW15JywgJ3poLXNnJywgJ3poLWhhbnQnLCAnemgtaGsnLCAnemgtbW8nLCAnemgtdHcnXSk7XG5jb25zdCBuYW1lT2ZMYW5ncyA9IHtcblx0emg6ICfljp/lp4snLFxuXHQnemgtaGFucyc6ICfnroDkvZMnLFxuXHQnemgtY24nOiAn5Lit5Zu95aSn6ZmG566A5L2TJyxcblx0J3poLW15JzogJ+mprOadpeilv+S6mueugOS9kycsXG5cdCd6aC1zZyc6ICfmlrDliqDlnaHnroDkvZMnLFxuXHQnemgtaGFudCc6ICfnuYHpq5QnLFxuXHQnemgtaGsnOiAn5Lit5ZyL6aaZ5riv57mB6auUJyxcblx0J3poLW1vJzogJ+S4reWci+a+s+mWgOe5gemrlCcsXG5cdCd6aC10dyc6ICfkuK3lnIvoh7rngaPnuYHpq5QnLFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPExhbmdzLCBzdHJpbmc+O1xuXG5jb25zdCB0cmFuc2xhdGVWYXJpYW50cyA9ICh3Z1BhZ2VOYW1lOiBzdHJpbmcpOiB2b2lkID0+IHtcblx0Y29uc3Qgc3VtbWFyeTogc3RyaW5nID0gT1BUSU9OUy50cmFuc2xhdGVWYXJpYW50c1N1bW1hcnkucmVwbGFjZSgvXFwkMS9nLCB3Z1BhZ2VOYW1lKTtcblxuXHRjb25zdCAkd3JhcHBlcjogSlF1ZXJ5ID0gKCQoPGRpdiBpZD1cIlRyYW5zbGF0ZVZhcmlhbnRzXCIgLz4pIGFzIEpRdWVyeSkucHJlcGVuZFRvKCcjYm9keUNvbnRlbnQnKTtcblxuXHRjb25zdCAkc3VibWl0QWxsOiBKUXVlcnkgPSAkKFxuXHRcdDxidXR0b24gY2xhc3NOYW1lPXtbJ2NkeC1idXR0b24nLCAnY2R4LWJ1dHRvbi0tYWN0aW9uLXByb2dyZXNzaXZlJywgJ2NkeC1idXR0b24tLXdlaWdodC1wcmltYXJ5J119PlxuXHRcdFx0e3dpbmRvdy53Z1VMUygn5Y+R5biD5omA5pyJ5pu05pS5JywgJ+eZvOS9iOaJgOacieiuiuabtCcpfVxuXHRcdDwvYnV0dG9uPlxuXHQpIGFzIEpRdWVyeTtcblx0JHN1Ym1pdEFsbC5vbignY2xpY2snLCAoKTogdm9pZCA9PiB7XG5cdFx0Y29uc3QgJGJ1dHRvbnM6IEpRdWVyeSA9ICR3cmFwcGVyLmZpbmQoYC4ke3B1Ymxpc2hDaGFuZ2VzfWApO1xuXHRcdGlmICghJGJ1dHRvbnMubGVuZ3RoKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ayoeacieS7u+S9leWPr+S7peWPkeW4g+eahOabtOaUuScsICfmspLmnInku7vkvZXorormm7Tlj6/nmbzkvYgnKSwge1xuXHRcdFx0XHR0YWc6ICdUcmFuc2xhdGVWYXJpYW50cycsXG5cdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIWNvbmZpcm0od2luZG93LndnVUxTKCflj5HluIMkMeS4quabtOaUue+8nycsICfnmbzkvYgkMeWAi+iuiuabtO+8nycpLnJlcGxhY2UoJyQxJywgYCR7JGJ1dHRvbnMubGVuZ3RofWApKSkge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCflt7Llj5bmtojlj5HluIMnLCAn5bey5Y+W5raI55m85L2IJyksIHt0YWc6ICdUcmFuc2xhdGVWYXJpYW50cycsIHR5cGU6ICd3YXJuJ30pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgYnV0dG9uIG9mICRidXR0b25zKSB7XG5cdFx0XHQkKGJ1dHRvbikudHJpZ2dlcignY2xpY2snKTtcblx0XHR9XG5cdH0pO1xuXG5cdCR3cmFwcGVyLmFwcGVuZChcblx0XHQkKDxkaXYgY2xhc3NOYW1lPXtzdWJtaXRBbGx9IC8+KS5hcHBlbmQoJHN1Ym1pdEFsbCksXG5cdFx0PGRpdiBjbGFzc05hbWU9e3dhcm5pbmd9PlxuXHRcdFx0e3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+aPkOmGku+8mlRyYW5zbGF0ZVZhcmlhbnRz5bel5YW35L2/55SoSVTlj4pNZWRpYVdpa2novazmjaLnu4Tov5vooYzoh6rliqjovazmjaLvvIzor7fnoa7orqTovazmjaLnu5PmnpzmmK/lkKbmraPnoa7vvIEnLFxuXHRcdFx0XHQn5o+Q6YaS77yaVHJhbnNsYXRlVmFyaWFudHPlt6Xlhbfkvb/nlKhJVOWPik1lZGlhV2lraei9ieaPm+e1hOmAsuihjOiHquWLlei9ieaPm++8jOiri+eiuuiqjei9ieaPm+e1kOaenOaYr+WQpuato+eiuu+8gSdcblx0XHRcdCl9XG5cdFx0PC9kaXY+XG5cdCk7XG5cblx0Y29uc3QgZGVmYXVsdExhbmdzOiBMYW5nc1tdID0gWy4uLmxhbmdzXTtcblxuXHRsZXQgcnVuTGFuZ3MgPSBwcm9tcHQoXG5cdFx0d2luZG93LndnVUxTKCfovazmjaLku6XkuIvor63oqIDvvIjku6XpgJflj7fpmpTlvIDvvInvvJonLCAn6L2J5o+b5Lul5LiL6Kqe6KiA77yI5Lul6YCX6Jmf6ZqU6ZaL77yJ77yaJyksXG5cdFx0ZGVmYXVsdExhbmdzLmpvaW4oJywnKVxuXHQpPy5zcGxpdCgnLCcpIGFzIExhbmdzW10gfCBudWxsO1xuXHRpZiAocnVuTGFuZ3MgPT09IG51bGwpIHtcblx0XHRydW5MYW5ncyA9IGRlZmF1bHRMYW5ncztcblx0fVxuXG5cdGNvbnN0IGxhbmdRdWV1ZTogTGFuZ3NbXSA9IHJ1bkxhbmdzXG5cdFx0Lm1hcCgobGFuZzogTGFuZ3MpOiBMYW5ncyA9PiBsYW5nLnRyaW0oKSBhcyBMYW5ncylcblx0XHQuZmlsdGVyKChsYW5nOiBMYW5ncyk6IGJvb2xlYW4gPT4gbGFuZ3MuaGFzKGxhbmcpKTtcblxuXHRjb25zdCBwcm9jZXNzID0gKHBhZ2VDb250ZW50OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRpZiAoIWxhbmdRdWV1ZS5sZW5ndGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBsYW5nID0gbGFuZ1F1ZXVlLnNoaWZ0KCkgYXMgTGFuZ3M7XG5cblx0XHRjb25zdCAkZGlmZlRhYmxlOiBKUXVlcnkgPSAkKDxkaXYgaWQ9e2BUcmFuc2xhdGVWYXJpYW50cy1kaWZmLSR7bGFuZ31gfSAvPikgYXMgSlF1ZXJ5O1xuXHRcdCR3cmFwcGVyLmFwcGVuZCgkZGlmZlRhYmxlLCA8aHIgLz4pO1xuXG5cdFx0Y29uc3QgYmFzZVBhZ2VOYW1lOiBzdHJpbmcgPSB3Z1BhZ2VOYW1lLnJlcGxhY2UoL1xcL3poJC8sICcnKTtcblx0XHRjb25zdCB0YXJnZXRUaXRsZTogc3RyaW5nID0gbGFuZyA9PT0gJ3poJyA/IGJhc2VQYWdlTmFtZSA6IGAke2Jhc2VQYWdlTmFtZX0vJHtsYW5nfWA7XG5cblx0XHRsZXQgbmV3UGFnZUNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuXHRcdHZvaWQgYXBpXG5cdFx0XHQucGFyc2UoYHt7Tm90ZVRBfEcxPUlUfEcyPU1lZGlhV2lraX19PGRpdiBpZD1cIiR7T1BUSU9OUy5jb250ZW50SUR9XCI+JHtwYWdlQ29udGVudH08L2Rpdj5gLCB7XG5cdFx0XHRcdHVzZWxhbmc6IGxhbmcsXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdChjb250ZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRuZXdQYWdlQ29udGVudCA9ICQoPGRpdiBpbm5lckhUTUw9e2NvbnRlbnR9IC8+KVxuXHRcdFx0XHRcdFx0LmZpbmQoYCMke09QVElPTlMuY29udGVudElEfWApXG5cdFx0XHRcdFx0XHQudGV4dCgpO1xuXG5cdFx0XHRcdFx0Y29uc3QgX3BhcmFtczogQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0XHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRcdFx0XHRcdHRpdGxlczogdGFyZ2V0VGl0bGUsXG5cdFx0XHRcdFx0XHRwcm9wOiAncmV2aXNpb25zJyxcblx0XHRcdFx0XHRcdHJ2ZGlmZnRvdGV4dDogbmV3UGFnZUNvbnRlbnQsXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdHJldHVybiBhcGkucG9zdChfcGFyYW1zKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0KGVycm9yKTogbnVsbCA9PiB7XG5cdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ino+aekCQx5pe25Y+R55Sf6ZSZ6K+v77yaJywgJ+ino+aekCQx5pmC55m855Sf6Yyv6Kqk77yaJykucmVwbGFjZSgnJDEnLCBsYW5nKSArIGVycm9yLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdUcmFuc2xhdGVWYXJpYW50cycsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KGRhdGEpID0+IHtcblx0XHRcdFx0XHRpZiAoZGF0YSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0ICR0b29sID0gJChcblx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdDxhIGhyZWY9e213LnV0aWwuZ2V0VXJsKHRhcmdldFRpdGxlKX0+XG5cdFx0XHRcdFx0XHRcdFx0e2xhbmd977yIe25hbWVPZkxhbmdzW2xhbmddfe+8iVxuXHRcdFx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdFx0XHRcdO+8iDxhIGhyZWY9e213LnV0aWwuZ2V0VXJsKHRhcmdldFRpdGxlLCB7YWN0aW9uOiAnZWRpdCd9KX0+e3dpbmRvdy53Z1VMUygn57yWJywgJ+e3qCcpfTwvYT7vvIlcblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdCkgYXMgSlF1ZXJ5O1xuXG5cdFx0XHRcdFx0JGRpZmZUYWJsZS5hcHBlbmQoJHRvb2wpO1xuXG5cdFx0XHRcdFx0Y29uc3QgW3BhZ2VdID0gZGF0YVsncXVlcnknXS5wYWdlcztcblx0XHRcdFx0XHRpZiAocGFnZS5taXNzaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkc3VibWl0ID0gJChcblx0XHRcdFx0XHRcdFx0PGJ1dHRvbiBjbGFzc05hbWU9e1twdWJsaXNoQ2hhbmdlcywgJ2NkeC1idXR0b24nXX0+XG5cdFx0XHRcdFx0XHRcdFx0e3dpbmRvdy53Z1VMUygn5Y+R5biD6aG16Z2iJywgJ+eZvOS9iOmggemdoicpfVxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdCkgYXMgSlF1ZXJ5O1xuXHRcdFx0XHRcdFx0JHN1Ym1pdC5vbignY2xpY2snLCAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdCRzdWJtaXQucmVtb3ZlKCk7XG5cblx0XHRcdFx0XHRcdFx0YXBpLmNyZWF0ZShcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRUaXRsZSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdW1tYXJ5LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0bmV3UGFnZUNvbnRlbnRcblx0XHRcdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0XHRcdCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5bey57yW6L6RICcsICflt7Lnt6jovK8gJykgKyB0YXJnZXRUaXRsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWc6ICdUcmFuc2xhdGVWYXJpYW50cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdzdWNjZXNzJyxcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0KGVycm9yKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfnvJbovpEnLCAn57eo6LyvICcpICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXRUaXRsZSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCcg5Y+R55Sf6ZSZ6K+v77yaJywgJyDnmbznlJ/pjK/oqqTvvJonKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWc6ICdUcmFuc2xhdGVWYXJpYW50cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0JHRvb2wuYXBwZW5kKCRzdWJtaXQpO1xuXHRcdFx0XHRcdFx0JGRpZmZUYWJsZS5hcHBlbmQoXG5cdFx0XHRcdFx0XHRcdDxwcmVcblx0XHRcdFx0XHRcdFx0XHRpbm5lckhUTUw9e25ld1BhZ2VDb250ZW50LnJlcGxhY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHQvWyY8Pl0vZ2ltLFxuXHRcdFx0XHRcdFx0XHRcdFx0KHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+IGAmIyR7c3RyaW5nLmNvZGVQb2ludEF0KDApfTtgXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBkaWZmOiBzdHJpbmcgPSBwYWdlLnJldmlzaW9uc1swXS5kaWZmLmJvZHk7XG5cdFx0XHRcdFx0aWYgKGRpZmYgPT09ICcnKSB7XG5cdFx0XHRcdFx0XHQkdG9vbC5hcHBlbmQoPHNwYW4gY2xhc3NOYW1lPXtub0NoYW5nZXN9Pnt3aW5kb3cud2dVTFMoJ+aXoOabtOaUuScsICfnhKHorormm7QnKX08L3NwYW4+KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3QgJHN1Ym1pdCA9ICQoXG5cdFx0XHRcdFx0XHRcdDxidXR0b24gY2xhc3NOYW1lPXtbcHVibGlzaENoYW5nZXMsICdjZHgtYnV0dG9uJ119PlxuXHRcdFx0XHRcdFx0XHRcdHt3aW5kb3cud2dVTFMoJ+WPkeW4g+abtOaUuScsICfnmbzkvYjorormm7QnKX1cblx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHQpIGFzIEpRdWVyeTtcblx0XHRcdFx0XHRcdCRzdWJtaXQub24oJ2NsaWNrJywgKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHQkc3VibWl0LnJlbW92ZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGFwaS5lZGl0KHRhcmdldFRpdGxlLCAoKSA9PiAoe1xuXHRcdFx0XHRcdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogbmV3UGFnZUNvbnRlbnQsXG5cdFx0XHRcdFx0XHRcdFx0bm9jcmVhdGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR9KSkudGhlbihcblx0XHRcdFx0XHRcdFx0XHQoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+W3sue8lui+kScsICflt7Lnt6jovK8gJykgKyB0YXJnZXRUaXRsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWc6ICdUcmFuc2xhdGVWYXJpYW50cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdzdWNjZXNzJyxcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0KGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LndnVUxTKCfnvJbovpEkMeWPkeeUn+mUmeivr++8micsICfnt6jovK8kMeeZvOeUn+mMr+iqpO+8micpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoJyQxJywgdGFyZ2V0VGl0bGUpICsgZXJyb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWc6ICdUcmFuc2xhdGVWYXJpYW50cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0JHRvb2wuYXBwZW5kKCRzdWJtaXQpO1xuXHRcdFx0XHRcdFx0JGRpZmZUYWJsZS5hcHBlbmQoXG5cdFx0XHRcdFx0XHRcdCQoPHRhYmxlIGNsYXNzTmFtZT1cImRpZmZcIiBpbm5lckhUTUw9e2RpZmZ9IC8+KS5wcmVwZW5kKFxuXHRcdFx0XHRcdFx0XHRcdDxjb2xncm91cD5cblx0XHRcdFx0XHRcdFx0XHRcdDxjb2wgY2xhc3NOYW1lPVwiZGlmZi1tYXJrZXJcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGNvbCBjbGFzc05hbWU9XCJkaWZmLWNvbnRlbnRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGNvbCBjbGFzc05hbWU9XCJkaWZmLW1hcmtlclwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y29sIGNsYXNzTmFtZT1cImRpZmYtY29udGVudFwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9jb2xncm91cD5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdChlcnJvcik6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfojrflj5YkMeW3ruW8guaXtuWPkeeUn+mUmeivr++8micsICflj5blvpckMeW3rueVsOaZgueZvOeUn+mMr+iqpO+8micpLnJlcGxhY2UoJyQxJywgbGFuZykgKyBlcnJvcixcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnZXJyb3InLFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHRcdC5hbHdheXMoKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRwcm9jZXNzKHBhZ2VDb250ZW50KTtcblx0XHRcdH0pO1xuXHR9O1xuXG5cdGNvbnN0IHBhcmFtczogQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMgPSB7XG5cdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdGZvcm1hdHZlcnNpb246ICcyJyxcblx0XHRwcm9wOiAncmV2aXNpb25zJyxcblx0XHR0aXRsZXM6IHdnUGFnZU5hbWUsXG5cdFx0Y3VydGltZXN0YW1wOiB0cnVlLFxuXHRcdHJ2cHJvcDogWydjb250ZW50JywgJ3RpbWVzdGFtcCddLFxuXHR9O1xuXG5cdHZvaWQgYXBpXG5cdFx0LmdldChwYXJhbXMpXG5cdFx0LnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdGlmICghZGF0YVsncXVlcnknXT8ucGFnZXMpIHtcblx0XHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3QoJ3Vua25vd24nKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgW3BhZ2VdID0gZGF0YVsncXVlcnknXS5wYWdlcztcblxuXHRcdFx0aWYgKHBhZ2UuaW52YWxpZCkge1xuXHRcdFx0XHRyZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdCgnaW52YWxpZHRpdGxlJyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFnZS5taXNzaW5nKSB7XG5cdFx0XHRcdHJldHVybiAkLkRlZmVycmVkKCkucmVqZWN0KCdub2NyZWF0ZS1taXNzaW5nJyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IFt7Y29udGVudH1dID0gcGFnZS5yZXZpc2lvbnM7XG5cblx0XHRcdHJldHVybiBjb250ZW50IGFzIHN0cmluZztcblx0XHR9KVxuXHRcdC50aGVuKChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0bGV0IHBhZ2VDb250ZW50OiBzdHJpbmcgPSBjb250ZW50O1xuXG5cdFx0XHRwYWdlQ29udGVudCA9IHBhZ2VDb250ZW50LnJlcGxhY2UoXG5cdFx0XHRcdC9bXFxzIyYnKjo8PltcXF1fe3x9XS9naW0sXG5cdFx0XHRcdChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PiBgJiMke3N0cmluZy5jb2RlUG9pbnRBdCgwKX07YFxuXHRcdFx0KTtcblx0XHRcdHBhZ2VDb250ZW50ID0gcGFnZUNvbnRlbnQucmVwbGFjZShcblx0XHRcdFx0LygmIzkxOyYjOTE7KSgoPzooPyEmIzEyNDspKD8hJiM5MzspLikrPykoJiMxMjQ7KD86KD8hJiM5MzspLikrPyYjOTM7JiM5MzspL2csXG5cdFx0XHRcdCckMS17JDJ9LSQzJ1xuXHRcdFx0KTtcblx0XHRcdHBhZ2VDb250ZW50ID0gcGFnZUNvbnRlbnQucmVwbGFjZSgvLSYjMTIzOyguKz8pJiMxMjU7LS9nLCAoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT5cblx0XHRcdFx0c3RyaW5nXG5cdFx0XHRcdFx0LnJlcGxhY2UoJy0mIzEyMzsnLCAnLXsnKVxuXHRcdFx0XHRcdC5yZXBsYWNlKCctJiMxMjM7JywgJy17Jylcblx0XHRcdFx0XHQucmVwbGFjZSgnJiMxMjU7LScsICd9LScpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjMTI0Oy9nLCAnfCcpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjMzI7L2csICcgJylcblx0XHRcdFx0XHQucmVwbGFjZSgvJiM2MTsvZywgJz0nKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mIzYyOy9nLCAnPicpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjNTg7L2csICc6Jylcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybiBwYWdlQ29udGVudDtcblx0XHR9KVxuXHRcdC50aGVuKChwYWdlQ29udGVudDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRwcm9jZXNzKHBhZ2VDb250ZW50KTtcblx0XHR9KTtcbn07XG5cbmV4cG9ydCB7dHJhbnNsYXRlVmFyaWFudHN9O1xuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi4vb3B0aW9ucy5qc29uJztcbmltcG9ydCB7aW5pdE13QXBpfSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBhcGk6IG13LkFwaSA9IGluaXRNd0FwaShgVHJhbnNsYXRlVmFyaWFudHMvJHtPUFRJT05TLnZlcnNpb259YCk7XG5cbmV4cG9ydCB7YXBpfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBR1osSUFBQUEsUUFBTyxVQUFV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QUNwQixDQUFDO0FBQ0g7O0FIcFRBLE1BQUEsR0FBS3BFLG1CQUFBcUgsU0FBUSxFQUFFekMsS0FBTTBDLFdBQXlDO0FBQzdELFFBQU07SUFBQ2xHO0VBQVUsSUFBSWtCLEdBQUdpRixPQUFPUCxJQUFJO0FBQ25DLE1BQUksQ0FBQywyQkFBMkJRLEtBQUtwRyxVQUFVLEdBQUc7QUFDakQ7RUFDRDtBQUVBLFFBQU1xRyxZQUFtQ0gsTUFBTWxGLEtBQUssYUFBYSxFQUFFQyxTQUFTLGVBQWU7QUFDM0YsUUFBTXFGLFVBQWdDcEYsR0FBR3NELEtBQUsrQixlQUFlRixXQUFXLEtBQUt6RixPQUFPQyxNQUFNLFFBQVEsTUFBTSxDQUFDO0FBRXpHeUYsY0FBQSxRQUFBQSxZQUFBLFVBQUFBLFFBQVNFLGlCQUFpQixTQUFTLE1BQVk7QUFDOUNGLFlBQVF4QixPQUFPO0FBQ2YvRSxzQkFBa0JDLFVBQVU7RUFDN0IsQ0FBQztBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgInZlcnNpb24iLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAiU2V0IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICIkIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAiaW1wb3J0X2V4dF9nYWRnZXQzIiwgInJlcXVpcmUiLCAidHJhbnNsYXRlVmFyaWFudHNTdW1tYXJ5IiwgImNvbnRlbnRJRCIsICJ2ZXJzaW9uIiwgIm5vQ2hhbmdlcyIsICJwdWJsaXNoQ2hhbmdlcyIsICJzdWJtaXRBbGwiLCAid2FybmluZyIsICJpbXBvcnRfZXh0X2dhZGdldDIiLCAiX190b0VTTSIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJhcGkiLCAiaW5pdE13QXBpIiwgImNvbmNhdCIsICJsYW5ncyIsICJTZXQiLCAibmFtZU9mTGFuZ3MiLCAiemgiLCAidHJhbnNsYXRlVmFyaWFudHMiLCAid2dQYWdlTmFtZSIsICJfcHJvbXB0IiwgInN1bW1hcnkiLCAicmVwbGFjZSIsICIkd3JhcHBlciIsICIkIiwgImRlZmF1bHQiLCAiY3JlYXRlRWxlbWVudCIsICJpZCIsICJwcmVwZW5kVG8iLCAiJHN1Ym1pdEFsbCIsICJjbGFzc05hbWUiLCAid2luZG93IiwgIndnVUxTIiwgIm9uIiwgIiRidXR0b25zIiwgImZpbmQiLCAibGVuZ3RoIiwgIm13IiwgIm5vdGlmeSIsICJ0YWciLCAidHlwZSIsICJjb25maXJtIiwgIl9pdGVyYXRvcjIiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAyIiwgInMiLCAibiIsICJkb25lIiwgImJ1dHRvbiIsICJ2YWx1ZSIsICJ0cmlnZ2VyIiwgImVyciIsICJlIiwgImYiLCAiYXBwZW5kIiwgImRlZmF1bHRMYW5ncyIsICJydW5MYW5ncyIsICJwcm9tcHQiLCAiam9pbiIsICJzcGxpdCIsICJsYW5nUXVldWUiLCAibWFwIiwgImxhbmciLCAidHJpbSIsICJmaWx0ZXIiLCAiaGFzIiwgInByb2Nlc3MiLCAicGFnZUNvbnRlbnQiLCAic2hpZnQiLCAiJGRpZmZUYWJsZSIsICJiYXNlUGFnZU5hbWUiLCAidGFyZ2V0VGl0bGUiLCAibmV3UGFnZUNvbnRlbnQiLCAicGFyc2UiLCAidXNlbGFuZyIsICJ0aGVuIiwgImNvbnRlbnQiLCAiaW5uZXJIVE1MIiwgInRleHQiLCAiX3BhcmFtcyIsICJhY3Rpb24iLCAiZm9ybWF0IiwgImZvcm1hdHZlcnNpb24iLCAidGl0bGVzIiwgInByb3AiLCAicnZkaWZmdG90ZXh0IiwgInBvc3QiLCAiZXJyb3IiLCAiZGF0YSIsICIkdG9vbCIsICJocmVmIiwgInV0aWwiLCAiZ2V0VXJsIiwgInBhZ2UiLCAicGFnZXMiLCAibWlzc2luZyIsICIkc3VibWl0IiwgInJlbW92ZSIsICJjcmVhdGUiLCAic3RyaW5nIiwgImNvZGVQb2ludEF0IiwgImRpZmYiLCAicmV2aXNpb25zIiwgImJvZHkiLCAiZWRpdCIsICJub2NyZWF0ZSIsICJwcmVwZW5kIiwgImFsd2F5cyIsICJwYXJhbXMiLCAiY3VydGltZXN0YW1wIiwgInJ2cHJvcCIsICJnZXQiLCAiX2RhdGEkcXVlcnkiLCAiRGVmZXJyZWQiLCAicmVqZWN0IiwgImludmFsaWQiLCAiZ2V0Qm9keSIsICIkYm9keSIsICJjb25maWciLCAidGVzdCIsICJwb3J0bGV0SWQiLCAiZWxlbWVudCIsICJhZGRQb3J0bGV0TGluayIsICJhZGRFdmVudExpc3RlbmVyIl0KfQo= diff --git a/dist/Twinkle/Twinkle.js b/dist/Twinkle/Twinkle.js index ffc22a41..aacaf8a3 100644 --- a/dist/Twinkle/Twinkle.js +++ b/dist/Twinkle/Twinkle.js @@ -27,9 +27,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -43,9 +43,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -57,9 +57,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -70,9 +70,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -83,9 +83,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -95,9 +95,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -109,9 +109,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -124,9 +124,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -140,9 +140,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -153,9 +153,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -170,9 +170,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -180,9 +180,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -193,9 +193,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -205,9 +205,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -218,9 +218,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -229,9 +229,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -244,18 +244,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -264,9 +264,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -291,9 +291,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -307,18 +307,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -334,9 +334,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -349,9 +349,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -363,9 +363,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -376,9 +376,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -394,17 +394,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -419,9 +419,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -429,18 +429,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -449,9 +449,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -461,9 +461,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -474,9 +474,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -488,9 +488,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -510,9 +510,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -538,9 +538,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -551,9 +551,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -565,9 +565,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -582,9 +582,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -607,9 +607,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -623,9 +623,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -637,9 +637,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -683,9 +683,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -699,9 +699,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -719,9 +719,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -736,9 +736,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -747,9 +747,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -760,17 +760,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -843,9 +843,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -898,9 +898,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -933,9 +933,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -946,9 +946,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -958,9 +958,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -972,9 +972,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -985,9 +985,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -996,9 +996,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1031,9 +1031,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1055,9 +1055,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1071,9 +1071,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1084,17 +1084,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1110,9 +1110,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1132,9 +1132,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1153,9 +1153,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1196,9 +1196,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1207,9 +1207,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1234,9 +1234,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1247,9 +1247,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $ = require_export(); var toObject = require_to_object(); @@ -2023,6 +2023,8 @@ var init_twinklearv = __esm({ root_.spinoticepreviewer = new Morebits.wiki.preview($(work_area).find("#twinklearv-spinoticebox").last()[0]); Twinkle.arv.callback.set_sockmaster(root_.uid.value); break; + /* case 'aiv': */ + /* falls through */ default: work_area = new Morebits.quickForm.element({ type: "field", @@ -2192,6 +2194,7 @@ var init_twinklearv = __esm({ }; let page; switch (input.category) { + // Report 3RR case "ewip": { if (input.reason === "") { mw.notify(window.wgULS("您必须指定理由", "您必須指定理由"), { @@ -2228,6 +2231,7 @@ var init_twinklearv = __esm({ reason += "".concat(comment, "\n* 提报人:~~").concat("~~\n* 处理:"); break; } + // Report inappropriate username case "username": { let types = input.arvtype.map(Morebits.string.toLowerCaseFirstChar); const hasShared = types.includes("shared"); @@ -2269,6 +2273,7 @@ var init_twinklearv = __esm({ reason += comment; break; } + // LIB:SPI case "spi": { if (!input.reason) { mw.notify(window.wgULS("请输入证据。", "請輸入證據。"), { @@ -2301,6 +2306,9 @@ var init_twinklearv = __esm({ reason = comment; break; } + // Report user for vandalism + /* case 'aiv': */ + /* falls through */ default: { if (!input.arvtype.length && input.reason === "") { mw.notify(window.wgULS("您必须指定理由", "您必須指定理由"), { @@ -2368,6 +2376,7 @@ var init_twinklearv = __esm({ let reason; let summary; switch (input.category) { + // Report 3RR case "ewip": { reason = Twinkle.arv.callback.getReportWikitext(form); if (reason === void 0) { @@ -2397,6 +2406,7 @@ var init_twinklearv = __esm({ }); break; } + // Report inappropriate username case "username": { reason = Twinkle.arv.callback.getReportWikitext(form); Morebits.simpleWindow.setButtonsEnabled(false); @@ -2421,6 +2431,7 @@ var init_twinklearv = __esm({ }); break; } + // LIB:SPI case "spi": { reason = Twinkle.arv.callback.getReportWikitext(form); Morebits.simpleWindow.setButtonsEnabled(false); @@ -2437,6 +2448,9 @@ var init_twinklearv = __esm({ spiPage.append(); break; } + // Report user for vandalism + /* case 'aiv': */ + /* falls through */ default: { reason = Twinkle.arv.callback.getReportWikitext(form); if (reason === void 0) { @@ -3505,6 +3519,7 @@ var init_twinklewarn = __esm({ case "2": prefix = "警告"; break; + // falls through default: prefix = "提醒"; break; @@ -5928,6 +5943,8 @@ var init_friendlytalkback = __esm({ value: prev_section }); break; + /* case 'mytalk': */ + /* falls through */ default: work_area.append({ type: "div", @@ -7042,6 +7059,8 @@ var init_twinklespeedy = __esm({ case "blank": window.open(mw.util.getUrl(title, query), "_blank", "noopener,noreferrer,location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800"); break; + /* case 'window': */ + /* falls through */ default: window.open(mw.util.getUrl(title, query), window.name === "twinklewarnwindow" ? "_blank" : "twinklewarnwindow", window.name === "twinklewarnwindow" ? "noopener,noreferrer," : "location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800"); break; @@ -7996,6 +8015,7 @@ var init_twinklexfd = __esm({ case "fwdcsd": case "merge": to = params.mergeinto; + /* Fall through */ default: type = params.xfdcat; break; @@ -8851,6 +8871,7 @@ var init_twinkleprotect = __esm({ if (!mw.config.get("wgArticleId") || mw.config.get("wgPageContentModel") === "Scribunto") { break; } + /* falls through */ case "tag": field1 = new Morebits.quickForm.element({ type: "field", @@ -9557,6 +9578,7 @@ var init_twinkleprotect = __esm({ case "pp-semi-vandalism": case "pp-semi-usertalk": case "pp-semi-template": + // removed for now case "pp-semi-sock": case "pp-semi-blp": case "pp-semi-protected": @@ -9577,6 +9599,8 @@ var init_twinkleprotect = __esm({ case "pp-create-vandalism": typename = window.wgULS("白纸保护", "白紙保護"); break; + /* case 'unprotect': */ + /* falls through */ default: typename = window.wgULS("解除保护", "解除保護"); break; @@ -11621,6 +11645,7 @@ var init_friendlytag = __esm({ } break; case "Vector version available": + /* falls through */ case "Obsolete": currentTag += "|1=".concat(params["".concat(tag.replace(/ /g, "_"), "File")]); break; @@ -12117,6 +12142,7 @@ var init_twinklestub = __esm({ switch (Twinkle.stub.mode) { case "條目": case "条目": + /* falls through */ case "重定向": ysarchives_page.load(Twinkle.stub.callbacks.main); return; @@ -12968,6 +12994,8 @@ var init_twinklefluff = __esm({ params.user = revs[1].getAttribute("user"); params.userHidden = revs[1].getAttribute("userhidden") === ""; break; + /* case 'norm': */ + /* falls through */ default: { const cont = confirm(window.wgULS("选择了常规回退,但最新修改是由一个可信的机器人(", "選擇了常規回退,但最新修改是由一個可信的機器人(") + userNorm + window.wgULS(")做出的。确定以回退前一个修订版本,取消以回退机器人的修改", ")做出的。確定以回退前一個修訂版本,取消以回退機器人的修改")); if (cont) { @@ -13020,6 +13048,8 @@ var init_twinklefluff = __esm({ case "vand": summary = Twinkle.fluff.formatSummary("回退$USER做出的".concat(params.count).concat(window.wgULS("次编辑,到由", "次編輯,到由")).concat(params.gooduserHidden ? Twinkle.fluff.hiddenName : params.gooduser).concat(window.wgULS("做出的最后修订版本 ", "做出的最後修訂版本 ")), params.userHidden ? null : params.user); break; + /* case 'norm': */ + /* falls through */ default: if (Twinkle.getPref("offerReasonOnNormalRevert")) { extra_summary = prompt("".concat(window.wgULS("可选的编辑摘要:", "可選的編輯摘要:"), " "), params.summary); @@ -13106,6 +13136,8 @@ var init_twinklefluff = __esm({ case "blank": window.open(mw.util.getUrl("", windowQuery), "_blank", "noopener,noreferrer,location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800"); break; + /* case 'window': */ + /* falls through */ default: window.open(mw.util.getUrl("", windowQuery), window.name === "twinklewarnwindow" ? "_blank" : "twinklewarnwindow", window.name === "twinklewarnwindow" ? "noopener,noreferrer," : "location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800"); break; @@ -16021,6 +16053,7 @@ var init_twinkleconfig = __esm({ cell.appendChild(label); break; case "string": + // create an input box case "integer": cell.style.textAlign = "right"; cell.style.paddingRight = "0.5em"; @@ -16502,6 +16535,7 @@ var init_twinkleconfig = __esm({ userValue = form[pref.name].checked; break; case "string": + // read from the input box or combo box case "enum": userValue = form[pref.name].value; break; @@ -16617,4 +16651,4 @@ var init_twinkleconfig = __esm({ /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZS5qcyIsICJzcmMvVHdpbmtsZS9tb2R1bGVzL3R3aW5rbGVhcnYuanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xld2Fybi5qcyIsICJzcmMvVHdpbmtsZS9tb2R1bGVzL3R3aW5rbGVibG9jay5qcyIsICJzcmMvVHdpbmtsZS9tb2R1bGVzL2ZyaWVuZGx5dGFsa2JhY2suanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xlc3BlZWR5LmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWNvcHl2aW8uanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xleGZkLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWltYWdlLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZXByb3RlY3QuanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy9mcmllbmRseXRhZy5qcyIsICJzcmMvVHdpbmtsZS9tb2R1bGVzL3R3aW5rbGVzdHViLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWRpZmYuanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xldW5saW5rLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWZsdWZmLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWJhdGNoZGVsZXRlLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWJhdGNodW5kZWxldGUuanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xlYmF0Y2hwcm90ZWN0LmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWNsb3NlLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWNvbmZpZy5qcyIsICJzcmMvVHdpbmtsZS9Ud2lua2xlLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZSgkKSB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHRjb25zdCBUd2lua2xlID0ge307XG5cdHdpbmRvdy5Ud2lua2xlIHx8PSBUd2lua2xlOyAvLyBhbGxvdyBnbG9iYWwgYWNjZXNzXG5cdC8vIFdyYXAgd2l0aCBhbm9ueW1vdXMgZnVuY3Rpb25cblx0Ly8gQ2hlY2sgaWYgYWNjb3VudCBpcyBleHBlcmllbmNlZCBlbm91Z2ggdG8gdXNlIFR3aW5rbGVcblx0aWYgKCFNb3JlYml0cy51c2VySXNJbkdyb3VwKCdhdXRvY29uZmlybWVkJykgJiYgIU1vcmViaXRzLnVzZXJJc0luR3JvdXAoJ2NvbmZpcm1lZCcpKSB7XG5cdFx0Y29uc29sZS53YXJuKCdbVHdpbmtsZV0g6Z2e56Gu6K6k55So5oi35oiW6Ieq5Yqo56Gu6K6k55So5oi377yMVHdpbmtsZeS4jeS8mui/kOihjOOAgicpO1xuXHRcdHJldHVybjtcblx0fVxuXHQvKipcblx0ICogVHdpbmtsZS1zcGVjaWZpYyBkYXRhIHNoYXJlZCBieSBtdWx0aXBsZSBtb2R1bGVzXG5cdCAqIExpa2VseSBjdXN0b21pemVkIHBlciBpbnN0YWxsYXRpb25cblx0ICovXG5cdC8vIEN1c3RvbSBjaGFuZ2UgdGFnKHMpIHRvIGJlIGFwcGxpZWQgdG8gYWxsIFR3aW5rbGUgYWN0aW9ucywgY3JlYXRlIGF0IFNwZWNpYWw6VGFnc1xuXHRUd2lua2xlLmNoYW5nZVRhZ3MgPSAnVHdpbmtsZSc7XG5cdC8vIEF2YWlsYWJsZSBmb3IgYWN0aW9ucyB0aGF0IGRvbid0ICh5ZXQpIHN1cHBvcnQgdGFnc1xuXHRUd2lua2xlLnN1bW1hcnlBZCA9ICfvvIhbW0g6VFd8VHdpbmtsZV1d77yJJztcblx0Ly8gVmFyaW91cyBoYXRub3RlIHRlbXBsYXRlcywgdXNlZCB3aGVuIHRhZ2dpbmcgKGNzZC94ZmQvdGFnL3Byb2QvcHJvdGVjdCkgdG8gZW5zdXJlIG9yZGVyXG5cdFR3aW5rbGUuaGF0bm90ZVJlZ2V4ID1cblx0XHQnKD86U2hvcnRbIF9dZGVzY3JpcHRpb24pfCg/OlJlbGxpbmt8SGF0bm90ZXxIQVQpfCg/Ok1haW58W+e7hue0sF1b6IqC56+AXXxNYWluWyBfXWFydGljbGVzfOS4u1vmnaHmop1d55uufEh1cnJpY2FuZVsgX11tYWlufFvmnaHmop1d55uufOS4u3xb6aCB6aG1XemdonzkuLtb6aCB6aG1XemdonzkuLtb6aCB6aG1XXzkuLtb6aGM6aKYXeebrnxNYWluWyBfXWFydGljbGV8QVApfCg/Oldyb25ndGl0bGV8Q29ycmVjdFsgX110aXRsZSl8KD865Li75p2h55uu5raI5q2n5LmJfOS4u+aineebrua2iOatp+e+qXzmtojmrafkuYnpk77mjqV85raI5q2n576p6Y+I5o6lfOa2iOatp+e+qemAo+e1kHzmtojov5585raI6YCjfOa2iOatp+S5iei/nue7k3xEaXNhbWJMaW5rfE5vdGVyZWZ8RGFibGluayl8KD86RGlzdGluZ3Vpc2h85LiN5pivfE5vdHzmj5DnpLp85re35reGfOWIhuWIpXzliIbliKt85Y2A5YilfOWMuuWIq3zmnKzmnaHnm67nmoTkuLvpopjkuI3mmK985pys5qKd55uu55qE5Li76aGM5LiN5pivfOacrOadoeebruS4u+mimOS4jeaYr3zmnKzmop3nm67kuLvpoYzkuI3mmK985p2h55uu5Li76aKY5LiN5pivfOaineebruS4u+mhjOS4jeaYr3zkuLvpopjkuI3mmK985Li76aGM5LiN5pivfENvbmZ1c2VkfOWMuuWIhnzljYDliIZ8Q29uZnVzaW9ufENvbmZ1c2V8UmVkaXJlY3ROT1R8TWlzc3BlbGxpbmcpfCg/OkRpc3Rpbmd1aXNoMnxTZWxmRGlzdGluZ3Vpc2h8Tm90MnzkuI3mmK8yKXwoPzpGb3IpfCg/OkRldGFpbHN8RnVydGhlcnxTZWV85Y+m6KeBfOWPpuimi3xNb3JlfOebuOmXnOaineebrnznm7jlhbPmnaHnm658RGV0YWlsfOingXzopot85pu05aSa6LWE5paZfOabtOWkmuizh+aWmXxGdXJ0aGVyWyBfXWluZm9ybWF0aW9ufOabtOWkmui1hOiur3zmm7TlpJros4foqIp8TW9yZVsgX11pbmZvcm1hdGlvbnzmm7TlpJrkv6Hmga8pfCg/OlNlbGZyZWYpfCg/OkFib3V0fE90aGVydXNlczR85YWz5LqOfOmXnOaWvCl8KD86T3RoZXJbIF9ddXNlc3xPdGhlcnVzZXzmnaHnm67mtojmrafkuYl85qKd55uu5raI5q2n576pfOS7lueUqHxPdGhlcnVzZXMpfCg/Ok90aGVyWyBfXXVzZXMgbGlzdHxPdGhlcnVzZWxpc3R85Li75qKd55uu5raI5q2n576p5YiX6KGofOS4u+adoeebrua2iOatp+S5ieWIl+ihqHxPdGhlcnVzZXNsaXN0fEFib3V0bGlzdHxBYm91dFsgX11saXN0fE90aGVydXNlc1sgX11saXN0KXwoPzpSZWRpcmVjdHzph43lrprlkJHoh7PmraR8UmVkaXJlY3RzWyBfXWhlcmV8UmVkaXJlY3RbIF9ddG8pfCg/OlJlZGlyZWN0MnzkuLvmop3nm67mtojmrafnvqkyfOS4u+adoeebrua2iOatp+S5iTJ8UmVkaXJ86YeN5a6a5ZCR6Iez5q2kMil8KD86UmVkaXJlY3QzKXwoPzpSZWRpcmVjdDQpfCg/OlJlZGlyZWN0LWRpc3Rpbmd1aXNoKXwoPzpSZWRpcmVjdC1zeW5vbnltKXwoPzpSZWRpcmVjdC1tdWx0aSl8KD86U2VlWyBfXVdpa3Rpb25hcnl8U2Vld2lrdCl8KD86U2VlYWxzb3zlj4LnnIt85Y+D55yLfFNlZVsgX11hbHNvfOWPguingXzlj4Popot8QWxzbyl8KD86U2VlWyBfXWFsc28yfFNlZWFsc28yfOS4jei9ieaPm+WPg+imi3zkuI3ovazmjaLlj4Lop4EpfCg/Ok90aGVyWyBfXXBsYWNlcyl8KD86Q29udHJhc3R85bCN5q+UfOWvueavlCknO1xuXHRUd2lua2xlLmluaXRDYWxsYmFja3MgPSBbXTtcblx0LyoqXG5cdCAqIEFkZHMgYSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gVHdpbmtsZSBoYXMgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gLSBuYW1lIG9mIG1vZHVsZSB1c2VkIHRvIGNoZWNrIGlmIGlzIGRpc2FibGVkLlxuXHQgKiBJZiBuYW1lIGlzIG5vdCBnaXZlbiwgbW9kdWxlIGlzIGxvYWRlZCB1bmNvbmRpdGlvbmFsbHkuXG5cdCAqL1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayA9IChmdW5jLCBuYW1lKSA9PiB7XG5cdFx0VHdpbmtsZS5pbml0Q2FsbGJhY2tzLnB1c2goe1xuXHRcdFx0ZnVuYyxcblx0XHRcdG5hbWUsXG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuZGVmYXVsdENvbmZpZyA9IHt9O1xuXHQvKipcblx0ICogVGhpcyBob2xkcyB0aGUgZGVmYXVsdCBzZXQgb2YgcHJlZmVyZW5jZXMgdXNlZCBieSBUd2lua2xlLlxuXHQgKiBJdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgbmV3IHByZWZlcmVuY2VzIGFkZGVkIGhlcmUsIGVzcGVjaWFsbHkgYWRtaW4tb25seSBvbmVzLCBhcmUgYWxzbyBhZGRlZCB0b1xuXHQgKiB8VHdpbmtsZS5jb25maWcuc2VjdGlvbnN8IGluIHR3aW5rbGVjb25maWcuanMsIHNvIHRoZXkgYXJlIGNvbmZpZ3VyYWJsZSB2aWEgdGhlIFR3aW5rbGUgcHJlZmVyZW5jZXMgcGFuZWwuXG5cdCAqIEZvciBoZWxwIG9uIHRoZSBhY3R1YWwgcHJlZmVyZW5jZXMsIHNlZSB0aGUgY29tbWVudHMgaW4gdHdpbmtsZWNvbmZpZy5qcy5cblx0ICpcblx0ICogRm9ybWVybHkgVHdpbmtsZS5kZWZhdWx0Q29uZmlnLnR3aW5rbGVcblx0ICovXG5cdFR3aW5rbGUuZGVmYXVsdENvbmZpZyA9IHtcblx0XHQvLyBHZW5lcmFsXG5cdFx0dXNlclRhbGtQYWdlTW9kZTogJ3RhYicsXG5cdFx0ZGlhbG9nTGFyZ2VGb250OiBmYWxzZSxcblx0XHRkaXNhYmxlZE1vZHVsZXM6IE1vcmViaXRzLnVzZXJJc1N5c29wID8gW10gOiBbJ2Jsb2NrJ10sXG5cdFx0Ly8gZGVmYXVsdCB0byBkaXNhYmxlIGJsb2NrIGZvciBub24tc3lzb3AsIGlmIGVuYWJsZSBtYW51YWxseSwgdGhleSBjYW4gb25seSB1c2UgaXQgdG8gdGFnIHVzZXJwYWdlXG5cdFx0ZGlzYWJsZWRTeXNvcE1vZHVsZXM6IFtdLFxuXHRcdC8vIEFSVlxuXHRcdHNwaVdhdGNoUmVwb3J0OiAneWVzJyxcblx0XHQvLyBCbG9ja1xuXHRcdGRlZmF1bHRUb0Jsb2NrNjQ6IGZhbHNlLFxuXHRcdGRlZmF1bHRUb1BhcnRpYWxCbG9ja3M6IGZhbHNlLFxuXHRcdGJsYW5rVGFsa3BhZ2VPbkluZGVmQmxvY2s6IGZhbHNlLFxuXHRcdHdhdGNoQmxvY2tOb3RpY2VzOiAneWVzJyxcblx0XHRjdXN0b21CbG9ja1JlYXNvbkxpc3Q6IFtdLFxuXHRcdC8vIEZsdWZmIChyZXZlcnQgYW5kIHJvbGxiYWNrKVxuXHRcdG9wZW5UYWxrUGFnZTogW10sXG5cdFx0b3BlblRhbGtQYWdlT25BdXRvUmV2ZXJ0OiBmYWxzZSxcblx0XHRyb2xsYmFja0luUGxhY2U6IGZhbHNlLFxuXHRcdG1hcmtSZXZlcnRlZFBhZ2VzQXNNaW5vcjogWyd2YW5kJ10sXG5cdFx0d2F0Y2hSZXZlcnRlZFBhZ2VzOiBbJ25vcm0nLCAndmFuZCcsICd0b3JldiddLFxuXHRcdHdhdGNoUmV2ZXJ0ZWRFeHBpcnk6ICd5ZXMnLFxuXHRcdG9mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQ6IHRydWUsXG5cdFx0Y29uZmlybU9uRmx1ZmY6IGZhbHNlLFxuXHRcdHNob3dSb2xsYmFja0xpbmtzOiBbJ2RpZmYnLCAnb3RoZXJzJ10sXG5cdFx0Y3VzdG9tUmV2ZXJ0U3VtbWFyeTogW10sXG5cdFx0Ly8gREkgKHR3aW5rbGVpbWFnZSlcblx0XHRub3RpZnlVc2VyT25EZWxpOiB0cnVlLFxuXHRcdGRlbGlXYXRjaFBhZ2U6ICdkZWZhdWx0Jyxcblx0XHRkZWxpV2F0Y2hVc2VyOiAnZGVmYXVsdCcsXG5cdFx0Ly8gUHJvdGVjdFxuXHRcdHdhdGNoUmVxdWVzdGVkUGFnZXM6ICd5ZXMnLFxuXHRcdHdhdGNoUFBUYWdnZWRQYWdlczogJ2RlZmF1bHQnLFxuXHRcdHdhdGNoUHJvdGVjdGVkUGFnZXM6ICdkZWZhdWx0Jyxcblx0XHQvLyBDU0Rcblx0XHRzcGVlZHlTZWxlY3Rpb25TdHlsZTogJ2J1dHRvbkNsaWNrJyxcblx0XHR3YXRjaFNwZWVkeVBhZ2VzOiBbJ2cxJywgJ2czJywgJ2c0JywgJ2c3JywgJ2c4J10sXG5cdFx0d2F0Y2hTcGVlZHlFeHBpcnk6ICd5ZXMnLFxuXHRcdG1hcmtTcGVlZHlQYWdlc0FzUGF0cm9sbGVkOiBmYWxzZSxcblx0XHR3YXRjaFNwZWVkeVVzZXI6ICcxIG1vbnRoJyxcblx0XHQvLyB0aGVzZSBuZXh0IHR3byBzaG91bGQgcHJvYmFibHkgYmUgaWRlbnRpY2FsIGJ5IGRlZmF1bHRcblx0XHRub3RpZnlVc2VyT25TcGVlZHlEZWxldGlvbk5vbWluYXRpb246IFtcblx0XHRcdCdkYicsXG5cdFx0XHQnZzEnLFxuXHRcdFx0J2cyJyxcblx0XHRcdCdnMycsXG5cdFx0XHQnZzQnLFxuXHRcdFx0J2c1Jyxcblx0XHRcdCdnNicsXG5cdFx0XHQnZzcnLFxuXHRcdFx0J2c4Jyxcblx0XHRcdCdnOScsXG5cdFx0XHQnYTEnLFxuXHRcdFx0J2EyJyxcblx0XHRcdCdhMycsXG5cdFx0XHQncjEnLFxuXHRcdFx0J3IyJyxcblx0XHRcdCdmMScsXG5cdFx0XHQnZjInLFxuXHRcdFx0J2YzJyxcblx0XHRcdCdmNCcsXG5cdFx0XHQnZjUnLFxuXHRcdFx0J28xJyxcblx0XHRcdCdvMicsXG5cdFx0XHQnbzMnLFxuXHRcdF0sXG5cdFx0d2FyblVzZXJPblNwZWVkeURlbGV0ZTogW1xuXHRcdFx0J2RiJyxcblx0XHRcdCdnMScsXG5cdFx0XHQnZzInLFxuXHRcdFx0J2czJyxcblx0XHRcdCdnNCcsXG5cdFx0XHQnZzUnLFxuXHRcdFx0J2c2Jyxcblx0XHRcdCdnNycsXG5cdFx0XHQnZzgnLFxuXHRcdFx0J2c5Jyxcblx0XHRcdCdhMScsXG5cdFx0XHQnYTInLFxuXHRcdFx0J2EzJyxcblx0XHRcdCdyMScsXG5cdFx0XHQncjInLFxuXHRcdFx0J2YxJyxcblx0XHRcdCdmMicsXG5cdFx0XHQnZjMnLFxuXHRcdFx0J2Y0Jyxcblx0XHRcdCdmNScsXG5cdFx0XHQnbzEnLFxuXHRcdFx0J28yJyxcblx0XHRcdCdvMycsXG5cdFx0XSxcblx0XHRwcm9tcHRGb3JTcGVlZHlEZWxldGlvblN1bW1hcnk6IFtdLFxuXHRcdG9wZW5Vc2VyVGFsa1BhZ2VPblNwZWVkeURlbGV0ZTogW10sXG5cdFx0ZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZTogdHJ1ZSxcblx0XHRkZWxldGVSZWRpcmVjdHNPbkRlbGV0ZTogdHJ1ZSxcblx0XHRkZWxldGVTeXNvcERlZmF1bHRUb0RlbGV0ZTogZmFsc2UsXG5cdFx0c3BlZWR5V2luZG93SGVpZ2h0OiA1MDAsXG5cdFx0c3BlZWR5V2luZG93V2lkdGg6IDgwMCxcblx0XHRsb2dTcGVlZHlOb21pbmF0aW9uczogdHJ1ZSxcblx0XHRzcGVlZHlMb2dQYWdlTmFtZTogJ0NTROaXpeW/lycsXG5cdFx0bm9Mb2dPblNwZWVkeU5vbWluYXRpb246IFsnbzEnXSxcblx0XHRlbmxhcmdlRzdJbnB1dDogZmFsc2UsXG5cdFx0Ly8gVW5saW5rXG5cdFx0dW5saW5rTmFtZXNwYWNlczogWycwJywgJzYnLCAnMTAnLCAnMzAyJ10sXG5cdFx0Ly8gV2FyblxuXHRcdGRlZmF1bHRXYXJuaW5nR3JvdXA6ICcxJyxcblx0XHRjb21iaW5lZFNpbmdsZXRNZW51czogZmFsc2UsXG5cdFx0d2F0Y2hXYXJuaW5nczogJ3llcycsXG5cdFx0b2xkU2VsZWN0OiBmYWxzZSxcblx0XHRjdXN0b21XYXJuaW5nTGlzdDogW10sXG5cdFx0YXV0b01lbnVBZnRlclJvbGxiYWNrOiBmYWxzZSxcblx0XHQvLyBYZkRcblx0XHRsb2dYZmROb21pbmF0aW9uczogdHJ1ZSxcblx0XHR4ZmRMb2dQYWdlTmFtZTogJ1hmROaXpeW/lycsXG5cdFx0bm9Mb2dPblhmZE5vbWluYXRpb246IFtdLFxuXHRcdHhmZFdhdGNoRGlzY3Vzc2lvbjogJ2RlZmF1bHQnLFxuXHRcdHhmZFdhdGNoUGFnZTogJ2RlZmF1bHQnLFxuXHRcdHhmZFdhdGNoVXNlcjogJ2RlZmF1bHQnLFxuXHRcdG1hcmtYZmRQYWdlc0FzUGF0cm9sbGVkOiB0cnVlLFxuXHRcdEZ3ZENzZFRvWGZkOiBNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRhZmREZWZhdWx0Q2F0ZWdvcnk6ICdkZWxldGUnLFxuXHRcdGFmZEZhbWVEZWZhdWx0UmVhc29uOiAn5rKh5pyJ6Laz5aSf55qE5Y+v6Z2g5p2l5rqQ6K+B5piO5q2k5p2h55uu56ym5ZCIW1tMSUI65pS25b2V5qCH5YeGfOaUtuW9leagh+WHhl1dJyxcblx0XHRhZmRTdWJzdHViRGVmYXVsdFJlYXNvbjogJ+i/h+acn+Wwj+Wwj+S9nOWTgScsXG5cdFx0WGZkQ2xvc2U6IE1vcmViaXRzLnVzZXJJc1N5c29wID8gJ2FsbCcgOiAnaGlkZScsXG5cdFx0Ly8gQ29weXZpb1xuXHRcdGNvcHl2aW9XYXRjaFBhZ2U6ICd5ZXMnLFxuXHRcdGNvcHl2aW9XYXRjaFVzZXI6ICd5ZXMnLFxuXHRcdG1hcmtDb3B5dmlvUGFnZXNBc1BhdHJvbGxlZDogdHJ1ZSxcblx0XHQvLyBIaWRkZW4gcHJlZmVyZW5jZXNcblx0XHRhdXRvbGV2ZWxTdGFsZURheXM6IDMsXG5cdFx0cmV2ZXJ0TWF4UmV2aXNpb25zOiA1MCxcblx0XHQvLyBpbnRlbnRpb25hbGx5IGxpbWl0ZWRcblx0XHRiYXRjaE1heDogNTAwMCxcblx0XHRiYXRjaENodW5rczogNTAsXG5cdFx0Y29uZmlnUGFnZTogJ0hlbHA6VHdpbmtsZS/lj4LmlbDorr7nva4nLFxuXHRcdHByb2plY3ROYW1lc3BhY2VOYW1lOiBtdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVs0XSxcblx0XHRzYW5kYm94UGFnZTogJ0xJQjrmspnnm5InLFxuXHRcdC8vIERlcHJlY2F0ZWQgb3B0aW9ucywgYXMgYSBmYWxsYmFjayBmb3IgYWRkLW9uIHNjcmlwdHMvbW9kdWxlc1xuXHRcdHN1bW1hcnlBZDogJ++8iFtbSDpUV3xUd2lua2xlXV3vvIknLFxuXHRcdGRlbGV0aW9uU3VtbWFyeUFkOiAn77yIW1tIOlRXfFR3aW5rbGVdXe+8iScsXG5cdFx0cHJvdGVjdGlvblN1bW1hcnlBZDogJ++8iFtbSDpUV3xUd2lua2xlXV3vvIknLFxuXHRcdGJsb2NrU3VtbWFyeUFkOiAn77yIW1tIOlRXfFR3aW5rbGVdXe+8iScsXG5cdFx0Ly8gVGFnXG5cdFx0Z3JvdXBCeURlZmF1bHQ6IHRydWUsXG5cdFx0d2F0Y2hUYWdnZWRQYWdlczogJ3llcycsXG5cdFx0d2F0Y2hNZXJnZURpc2N1c3Npb25zOiAneWVzJyxcblx0XHRtYXJrVGFnZ2VkUGFnZXNBc01pbm9yOiBmYWxzZSxcblx0XHRtYXJrVGFnZ2VkUGFnZXNBc1BhdHJvbGxlZDogdHJ1ZSxcblx0XHR0YWdBcnRpY2xlU29ydE9yZGVyOiAnY2F0Jyxcblx0XHRjdXN0b21UYWdMaXN0OiBbXSxcblx0XHRjdXN0b21GaWxlVGFnTGlzdDogW10sXG5cdFx0Y3VzdG9tUmVkaXJlY3RUYWdMaXN0OiBbXSxcblx0XHQvLyBTdHViXG5cdFx0d2F0Y2hTdHViYmVkUGFnZXM6IGZhbHNlLFxuXHRcdG1hcmtTdHViYmVkUGFnZXNBc01pbm9yOiBmYWxzZSxcblx0XHRtYXJrU3R1YmJlZFBhZ2VzQXNQYXRyb2xsZWQ6IHRydWUsXG5cdFx0c3R1YkFydGljbGVTb3J0T3JkZXI6ICdjYXQnLFxuXHRcdGN1c3RvbVN0dWJMaXN0OiBbXSxcblx0XHQvLyBUYWxrYmFja1xuXHRcdG1hcmtUYWxrYmFja0FzTWlub3I6IHRydWUsXG5cdFx0aW5zZXJ0VGFsa2JhY2tTaWduYXR1cmU6IHRydWUsXG5cdFx0Ly8gYWx3YXlzIHNpZ24gdGFsa2JhY2sgdGVtcGxhdGVzXG5cdFx0dGFsa2JhY2tIZWFkaW5nOiB3aW5kb3cud2dVTFMoJ+WbnuWkjemAmuWRiicsICflm57opobpgJrlkYonKSxcblx0XHRtYWlsSGVhZGluZzogd2luZG93LndnVUxTKCfmgqjmnInmlrDpgq7ku7bvvIEnLCAn5oKo5pyJ5paw6YO15Lu277yBJyksXG5cdH07XG5cdC8vIG5vdyBzb21lIHNraW4gZGVwZW5kZW50IGNvbmZpZy5cblx0c3dpdGNoIChtdy5jb25maWcuZ2V0KCdza2luJykpIHtcblx0XHRjYXNlICd2ZWN0b3InOlxuXHRcdGNhc2UgJ3ZlY3Rvci0yMDIyJzpcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0QXJlYSA9ICdyaWdodC1uYXZpZ2F0aW9uJztcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0SWQgPSAncC10d2lua2xlJztcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0TmFtZSA9ICdUVyc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldFR5cGUgPSAnbWVudSc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldE5leHQgPSAncC1zZWFyY2gnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnZ29uZ2JpJzpcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0QXJlYSA9XG5cdFx0XHRcdCRib2R5LmZpbmQoJyNwYWdlLXRvb2xzIC5zaWRlYmFyLWlubmVyJykubGVuZ3RoID4gMFxuXHRcdFx0XHRcdD8gJyNwYWdlLXRvb2xzIC5zaWRlYmFyLWlubmVyJ1xuXHRcdFx0XHRcdDogJyNwYWdlLW1vcmUgLnNpZGViYXItaW5uZXInO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXRJZCA9ICdwLXR3aW5rbGUnO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXROYW1lID0gJ1R3aW5rbGUnO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXRUeXBlID0gbnVsbDtcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0TmV4dCA9XG5cdFx0XHRcdCRib2R5LmZpbmQoJyNwYWdlLXRvb2xzIC5zaWRlYmFyLWlubmVyJykubGVuZ3RoID4gMCA/ICdwYWdlLW1vcmUnIDogbnVsbDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2NpdGl6ZW4nOlxuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXRBcmVhID0gJyNwYWdlLWFjdGlvbnMtbW9yZV9fY2FyZCc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldElkID0gJ3AtdHdpbmtsZSc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldE5hbWUgPSAnVHdpbmtsZSc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldFR5cGUgPSAnbmF2Jztcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0TmV4dCA9ICdwLXRiJztcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldEFyZWEgPSBudWxsO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXRJZCA9ICdwLWNhY3Rpb25zJztcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0TmFtZSA9IG51bGw7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldFR5cGUgPSBudWxsO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXROZXh0ID0gbnVsbDtcblx0fVxuXHRUd2lua2xlLmdldFByZWYgPSAobmFtZSkgPT4ge1xuXHRcdGlmICh0eXBlb2YgVHdpbmtsZS5wcmVmcyA9PT0gJ29iamVjdCcgJiYgVHdpbmtsZS5wcmVmc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gVHdpbmtsZS5wcmVmc1tuYW1lXTtcblx0XHR9XG5cdFx0Ly8gT2xkIHByZWZlcmVuY2VzIGZvcm1hdCwgdXNlZCBiZWZvcmUgdHdpbmtsZW9wdGlvbnMuanMgd2FzIGEgdGhpbmdcblx0XHRpZiAodHlwZW9mIHdpbmRvdy5Ud2lua2xlQ29uZmlnID09PSAnb2JqZWN0JyAmJiB3aW5kb3cuVHdpbmtsZUNvbmZpZ1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gd2luZG93LlR3aW5rbGVDb25maWdbbmFtZV07XG5cdFx0fVxuXHRcdHJldHVybiBUd2lua2xlLmRlZmF1bHRDb25maWdbbmFtZV07XG5cdH07XG5cdC8qKlxuXHQgKiAqKioqKioqKioqKioqKioqIFR3aW5rbGUuYWRkUG9ydGxldCgpICoqKioqKioqKioqKioqKipcblx0ICpcblx0ICogQWRkcyBhIHBvcnRsZXQgbWVudSB0byBvbmUgb2YgdGhlIG5hdmlnYXRpb24gYXJlYXMgb24gdGhlIHBhZ2UuXG5cdCAqIFRoaXMgaXMgbmVjZXNzYXJpbHkgcXVpdGUgYSBoYWNrIHNpbmNlIHNraW5zLCBuYXZpZ2F0aW9uIGFyZWFzLCBhbmRcblx0ICogcG9ydGxldCBtZW51IHR5cGVzIGFsbCB3b3JrIHNsaWdodGx5IGRpZmZlcmVudC5cblx0ICpcblx0ICogQXZhaWxhYmxlIG5hdmlnYXRpb24gYXJlYXMgZGVwZW5kIG9uIHRoZSBza2luIHVzZWQuXG5cdCAqIFZlY3Rvcjpcblx0ICogLSBGb3IgZWFjaCBvcHRpb24sIHRoZSBvdXRlciBuYXYgY2xhc3MgY29udGFpbnMgXCJ2ZWN0b3ItbWVudVwiLCB0aGUgaW5uZXIgZGl2IGNsYXNzIGlzIFwidmVjdG9yLW1lbnUtY29udGVudFwiLCBhbmQgdGhlIHVsIGlzIFwidmVjdG9yLW1lbnUtY29udGVudC1saXN0XCJcblx0ICogLSBcIm13LXBhbmVsXCIsIG91dGVyIG5hdiBjbGFzcyBjb250YWlucyBcInZlY3Rvci1tZW51LXBvcnRhbFwiLiBFeGlzdGluZyBwb3J0bGV0cy9lbGVtZW50czogXCJwLWxvZ29cIiwgXCJwLW5hdmlnYXRpb25cIiwgXCJwLWludGVyYWN0aW9uXCIsIFwicC10YlwiLCBcInAtY29sbC1wcmludF9leHBvcnRcIlxuXHQgKiAtIFwibGVmdC1uYXZpZ2F0aW9uXCIsIG91dGVyIG5hdiBjbGFzcyBjb250YWlucyBcInZlY3Rvci1tZW51LXRhYnNcIiBvciBcInZlY3Rvci1tZW51LWRyb3Bkb3duXCIuIEV4aXN0aW5nIHBvcnRsZXRzOiBcInAtbmFtZXNwYWNlc1wiLCBcInAtdmFyaWFudHNcIiAobWVudSlcblx0ICogLSBcInJpZ2h0LW5hdmlnYXRpb25cIiwgb3V0ZXIgbmF2IGNsYXNzIGNvbnRhaW5zIFwidmVjdG9yLW1lbnUtdGFic1wiIG9yIFwidmVjdG9yLW1lbnUtZHJvcGRvd25cIi4gRXhpc3RpbmcgcG9ydGxldHM6IFwicC12aWV3c1wiLCBcInAtY2FjdGlvbnNcIiAobWVudSksIFwicC1zZWFyY2hcIlxuXHQgKiAtIFNwZWNpYWwgbGF5b3V0IG9mIHAtcGVyc29uYWwgcG9ydGxldCAocGFydCBvZiBcImhlYWRcIikgdGhyb3VnaCBzcGVjaWFsaXplZCBzdHlsZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYXZpZ2F0aW9uIC0tIGlkIG9mIHRoZSB0YXJnZXQgbmF2aWdhdGlvbiBhcmVhIChza2luIGRlcGVuZGFudCwgb24gdmVjdG9yIGVpdGhlciBvZiBcImxlZnQtbmF2aWdhdGlvblwiLCBcInJpZ2h0LW5hdmlnYXRpb25cIiwgb3IgXCJtdy1wYW5lbFwiKVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLS0gaWQgb2YgdGhlIHBvcnRsZXQgbWVudSB0byBjcmVhdGUsIHByZWZlcmFibHkgc3RhcnQgd2l0aCBcInAtXCIuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0tIG5hbWUgb2YgdGhlIHBvcnRsZXQgbWVudSB0byBjcmVhdGUuIFZpc2liaWxpdHkgZGVwZW5kcyBvbiB0aGUgY2xhc3MgdXNlZC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLS0gdHlwZSBvZiBwb3J0bGV0LiBDdXJyZW50bHkgb25seSB1c2VkIGZvciB0aGUgdmVjdG9yIG5vbi1zaWRlYmFyIHBvcnRsZXRzLCBwYXNzIFwibWVudVwiIHRvIG1ha2UgdGhpcyBwb3J0bGV0IGEgZHJvcCBkb3duIG1lbnUuXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbmV4dG5vZGVpZCAtLSB0aGUgaWQgb2YgdGhlIG5vZGUgYmVmb3JlIHdoaWNoIHRoZSBuZXcgaXRlbSBzaG91bGQgYmUgYWRkZWQsIHNob3VsZCBiZSBhbm90aGVyIGl0ZW0gaW4gdGhlIHNhbWUgbGlzdCwgb3IgdW5kZWZpbmVkIHRvIHBsYWNlIGl0IGF0IHRoZSBlbmQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge05vZGV9IC0tIHRoZSBET00gbm9kZSBvZiB0aGUgbmV3IGl0ZW0gKGEgRElWIGVsZW1lbnQpIG9yIG51bGxcblx0ICovXG5cdFR3aW5rbGUuYWRkUG9ydGxldCA9IChuYXZpZ2F0aW9uLCBpZCwgdGV4dCwgdHlwZSwgbmV4dG5vZGVpZCkgPT4ge1xuXHRcdC8vIHNhbml0eSBjaGVja3MsIGFuZCBnZXQgcmVxdWlyZWQgRE9NIG5vZGVzXG5cdFx0Y29uc3Qgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoL14oPzojfFxcLikvLnRlc3QobmF2aWdhdGlvbikgPyBuYXZpZ2F0aW9uIDogYCMke25hdmlnYXRpb259YCk7XG5cdFx0aWYgKCFyb290KSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfWApO1xuXHRcdGlmIChpdGVtKSB7XG5cdFx0XHRpZiAoaXRlbS5wYXJlbnROb2RlICYmIGl0ZW0ucGFyZW50Tm9kZSA9PT0gcm9vdCkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRsZXQgbmV4dG5vZGU7XG5cdFx0aWYgKG5leHRub2RlaWQpIHtcblx0XHRcdG5leHRub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bmV4dG5vZGVpZH1gKTtcblx0XHR9XG5cdFx0Ly8gdmVyaWZ5L25vcm1hbGl6ZSBpbnB1dFxuXHRcdGNvbnN0IHNraW4gPSBtdy5jb25maWcuZ2V0KCdza2luJyk7XG5cdFx0aWYgKFxuXHRcdFx0KHNraW4gIT09ICd2ZWN0b3InICYmIHNraW4gIT09ICd2ZWN0b3ItMjAyMicpIHx8XG5cdFx0XHQobmF2aWdhdGlvbiAhPT0gJ2xlZnQtbmF2aWdhdGlvbicgJiYgbmF2aWdhdGlvbiAhPT0gJ3JpZ2h0LW5hdmlnYXRpb24nKVxuXHRcdCkge1xuXHRcdFx0dHlwZSA9IG51bGw7IC8vIG1lbnUgc3VwcG9ydGVkIG9ubHkgaW4gdmVjdG9yJ3MgI2xlZnQtbmF2aWdhdGlvbiAmICNyaWdodC1uYXZpZ2F0aW9uXG5cdFx0fVxuXHRcdGxldCBvdXRlck5hdkNsYXNzO1xuXHRcdGxldCBpbm5lckRpdkNsYXNzO1xuXHRcdHN3aXRjaCAoc2tpbikge1xuXHRcdFx0Y2FzZSAndmVjdG9yJzpcblx0XHRcdGNhc2UgJ3ZlY3Rvci0yMDIyJzpcblx0XHRcdFx0Ly8gWFhYOiBwb3J0YWwgZG9lc24ndCB3b3JrXG5cdFx0XHRcdGlmIChuYXZpZ2F0aW9uICE9PSAncG9ydGFsJyAmJiBuYXZpZ2F0aW9uICE9PSAnbGVmdC1uYXZpZ2F0aW9uJyAmJiBuYXZpZ2F0aW9uICE9PSAncmlnaHQtbmF2aWdhdGlvbicpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uID0gJ213LXBhbmVsJztcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRlck5hdkNsYXNzID0gJ213LXBvcnRsZXQgdmVjdG9yLW1lbnUnO1xuXHRcdFx0XHRpZiAobmF2aWdhdGlvbiA9PT0gJ213LXBhbmVsJykge1xuXHRcdFx0XHRcdG91dGVyTmF2Q2xhc3MgKz0gJyB2ZWN0b3ItbWVudS1wb3J0YWwnO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdtZW51Jykge1xuXHRcdFx0XHRcdG91dGVyTmF2Q2xhc3MgKz0gJyB2ZWN0b3ItbWVudS1kcm9wZG93biB2ZWN0b3ItZHJvcGRvd24gdmVjdG9yLW1lbnUtZHJvcGRvd24tbm9pY29uJztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvdXRlck5hdkNsYXNzICs9ICcgdmVjdG9yLW1lbnUtdGFicyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5uZXJEaXZDbGFzcyA9ICd2ZWN0b3ItbWVudS1jb250ZW50IHZlY3Rvci1kcm9wZG93bi1jb250ZW50Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdnb25nYmknOlxuXHRcdFx0XHRvdXRlck5hdkNsYXNzID0gJ213LXBvcnRsZXQnO1xuXHRcdFx0XHRpbm5lckRpdkNsYXNzID0gJ213LXBvcnRsZXQtYm9keSc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnY2l0aXplbic6XG5cdFx0XHRcdG91dGVyTmF2Q2xhc3MgPSAnbXctcG9ydGxldCc7XG5cdFx0XHRcdGlubmVyRGl2Q2xhc3MgPSAnbXctcG9ydGxldC10d2lua2xlJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRuYXZpZ2F0aW9uID0gJ2NvbHVtbi1vbmUnO1xuXHRcdFx0XHRvdXRlck5hdkNsYXNzID0gJ3BvcnRsZXQnO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gQnVpbGQgdGhlIERPTSBlbGVtZW50cy5cblx0XHRsZXQgb3V0ZXJOYXY7XG5cdFx0bGV0IGhlYWRpbmc7XG5cdFx0aWYgKHNraW4gPT09ICd2ZWN0b3ItMjAyMicpIHtcblx0XHRcdG91dGVyTmF2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRoZWFkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0ZXJOYXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduYXYnKTtcblx0XHRcdGhlYWRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1xuXHRcdH1cblx0XHRvdXRlck5hdi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGAke2lkfS1sYWJlbGApO1xuXHRcdC8vIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgdXNlZCBoZXJlIChvdXRlck5hdkNsYXNzKTpcblx0XHQvLyAqIG13LXBvcnRsZXQgdmVjdG9yLW1lbnUgdmVjdG9yLW1lbnUtKlxuXHRcdC8vICogbXctcG9ydGxldFxuXHRcdC8vICogY29sdW1uLW9uZVxuXHRcdC8vIFZlY3RvciBnZXR0aW5nIHZlY3Rvci1tZW51LWVtcHR5IEZJWE1FIFRPRE9cblx0XHRvdXRlck5hdi5jbGFzc05hbWUgPSBgJHtvdXRlck5hdkNsYXNzfSBlbXB0eVBvcnRsZXRgO1xuXHRcdG91dGVyTmF2LmlkID0gaWQ7XG5cdFx0aWYgKG5leHRub2RlICYmIG5leHRub2RlLnBhcmVudE5vZGUgPT09IHJvb3QpIHtcblx0XHRcdHJvb3QuaW5zZXJ0QmVmb3JlKG91dGVyTmF2LCBuZXh0bm9kZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvb3QuYXBwZW5kQ2hpbGQob3V0ZXJOYXYpO1xuXHRcdH1cblx0XHRoZWFkaW5nLmlkID0gYCR7aWR9LWxhYmVsYDtcblx0XHRjb25zdCB1bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG5cdFx0aWYgKHNraW4gPT09ICd2ZWN0b3InIHx8IHNraW4gPT09ICd2ZWN0b3ItMjAyMicpIHtcblx0XHRcdGhlYWRpbmcuc2V0QXR0cmlidXRlKCdmb3InLCBgJHtpZH0tZHJvcGRvd24tY2hlY2tib3hgKTtcblx0XHRcdHVsLmNsYXNzTmFtZSA9ICd2ZWN0b3ItbWVudS1jb250ZW50LWxpc3QnO1xuXHRcdFx0aGVhZGluZy5jbGFzc05hbWUgPSAndmVjdG9yLW1lbnUtaGVhZGluZyB2ZWN0b3ItZHJvcGRvd24tbGFiZWwnO1xuXHRcdFx0Ly8gYWRkIGludmlzaWJsZSBjaGVja2JveCB0byBrZWVwIG1lbnUgb3BlbiB3aGVuIGNsaWNrZWRcblx0XHRcdC8vIHNpbWlsYXIgdG8gdGhlIHAtY2FjdGlvbnMgKFwiTW9yZVwiKSBtZW51XG5cdFx0XHRpZiAob3V0ZXJOYXZDbGFzcy5pbmNsdWRlcygndmVjdG9yLW1lbnUtZHJvcGRvd24nKSkge1xuXHRcdFx0XHRjb25zdCBjaGtib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdFx0XHRjaGtib3guaWQgPSBgJHtpZH0tZHJvcGRvd24tY2hlY2tib3hgO1xuXHRcdFx0XHRjaGtib3guY2xhc3NOYW1lID0gJ3ZlY3Rvci1tZW51LWNoZWNrYm94IHZlY3Rvci1kcm9wZG93bi1jaGVja2JveCc7XG5cdFx0XHRcdGNoa2JveC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnY2hlY2tib3gnKTtcblx0XHRcdFx0Y2hrYm94LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgYCR7aWR9LWxhYmVsYCk7XG5cdFx0XHRcdG91dGVyTmF2LmFwcGVuZENoaWxkKGNoa2JveCk7XG5cdFx0XHRcdC8vIFZlY3RvciBnZXRzIGl0cyB0aXRsZSBpbiBhIHNwYW47IGFsbCBvdGhlcnMgZXhjZXB0XG5cdFx0XHRcdC8vIGdvbmdiaSBoYXZlIG5vIHRpdGxlLCBhbmQgaXQgaGFzIG5vIHNwYW5cblx0XHRcdFx0Y29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0c3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG5cdFx0XHRcdGhlYWRpbmcuYXBwZW5kQ2hpbGQoc3Bhbik7XG5cdFx0XHRcdGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRcdGEuaHJlZiA9ICcjJztcblx0XHRcdFx0JChhKS5vbignY2xpY2snLCAoZSkgPT4ge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGhlYWRpbmcuYXBwZW5kQ2hpbGQoYSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEJhc2ljYWxseSBqdXN0IEdvbmdiaVxuXHRcdFx0aGVhZGluZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG5cdFx0fVxuXHRcdG91dGVyTmF2LmFwcGVuZENoaWxkKGhlYWRpbmcpO1xuXHRcdGlmIChpbm5lckRpdkNsYXNzKSB7XG5cdFx0XHRjb25zdCBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0Ly8gVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSB1c2VkIGhlcmUgKGlubmVyRGl2Q2xhc3MpOlxuXHRcdFx0Ly8gKiB2ZWN0b3ItbWVudS1jb250ZW50XG5cdFx0XHQvLyAqIG13LXBvcnRsZXQtYm9keVxuXHRcdFx0Ly8gKiBtdy1wb3J0bGV0LXR3aW5rbGVcblx0XHRcdC8vICogcG9ydGxldFxuXHRcdFx0aW5uZXJEaXYuY2xhc3NOYW1lID0gaW5uZXJEaXZDbGFzcztcblx0XHRcdGlubmVyRGl2LmFwcGVuZENoaWxkKHVsKTtcblx0XHRcdG91dGVyTmF2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0ZXJOYXYuYXBwZW5kQ2hpbGQodWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0ZXJOYXY7XG5cdH07XG5cdC8qKlxuXHQgKiAqKioqKioqKioqKioqKioqIFR3aW5rbGUuYWRkUG9ydGxldExpbmsoKSAqKioqKioqKioqKioqKioqXG5cdCAqIEJ1aWxkcyBhIHBvcnRsZXQgbWVudSBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldCwgYW5kIGFkZCB0aGUgcG9ydGxldCBsaW5rLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gdGFzayAtLSBFaXRoZXIgYSBVUkwgZm9yIHRoZSBwb3J0bGV0IGxpbmsgb3IgYSBmdW5jdGlvbiB0byBleGVjdXRlLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRvb2x0aXBcblx0ICogQHJldHVybiB7T2JqZWN0fSBsaW5rXG5cdCAqL1xuXHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rID0gKHRhc2ssIHRleHQsIGlkLCB0b29sdGlwKSA9PiB7XG5cdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZigncG9ydGxldEFyZWEnKSAhPT0gbnVsbCkge1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0KFxuXHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ3BvcnRsZXRBcmVhJyksXG5cdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZigncG9ydGxldElkJyksXG5cdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZigncG9ydGxldE5hbWUnKSxcblx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdwb3J0bGV0VHlwZScpLFxuXHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ3BvcnRsZXROZXh0Jylcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnN0IGxpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdwb3J0bGV0SWQnKSxcblx0XHRcdHR5cGVvZiB0YXNrID09PSAnc3RyaW5nJyA/IHRhc2sgOiAnIycsXG5cdFx0XHR0ZXh0LFxuXHRcdFx0aWQsXG5cdFx0XHR0b29sdGlwXG5cdFx0KTtcblx0XHQkYm9keS5maW5kKCcuY2xpZW50LWpzIC5za2luLXZlY3RvciAjcC1jYWN0aW9ucycpLmNzcygnbWFyZ2luLXJpZ2h0JywgJ2luaXRpYWwnKTtcblx0XHRpZiAodHlwZW9mIHRhc2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdCQobGluaylcblx0XHRcdFx0LmZpbmQoJ2EnKVxuXHRcdFx0XHQub24oJ2NsaWNrJywgKGV2KSA9PiB7XG5cdFx0XHRcdFx0dGFzaygpO1xuXHRcdFx0XHRcdGV2LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoJC5jb2xsYXBzaWJsZVRhYnMpIHtcblx0XHRcdCQuY29sbGFwc2libGVUYWJzLmhhbmRsZVJlc2l6ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbGluaztcblx0fTtcblx0LyoqXG5cdCAqICoqKioqKioqKioqKioqKiogR2VuZXJhbCBpbml0aWFsaXphdGlvbiBjb2RlICoqKioqKioqKioqKioqKipcblx0ICovXG5cdGNvbnN0IHNjcmlwdHVybCA9IG13LnV0aWwuZ2V0VXJsKGBVc2VyOiR7bXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpfS90d2lua2xlb3B0aW9ucy5qc2AsIHtcblx0XHRhY3Rpb246ICdyYXcnLFxuXHRcdGN0eXBlOiAndGV4dC9qYXZhc2NyaXB0Jyxcblx0XHRoYXBweTogJ3llcycsXG5cdH0pO1xuXHQvLyBSZXRyaWV2ZSB0aGUgdXNlcidzIFR3aW5rbGUgcHJlZmVyZW5jZXMgKHdpbmRvdy5Ud2lua2xlLnByZWZzKVxuXHRUd2lua2xlLnByZWZzIHx8PSB7fTtcblx0bXcubG9hZGVyXG5cdFx0LmdldFNjcmlwdChzY3JpcHR1cmwpXG5cdFx0LmZhaWwoKCkgPT4ge1xuXHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5pyq6IO95Yqg6L295oKo55qEVHdpbmtsZeWPguaVsOiuvue9ricsICfmnKrog73ovInlhaXmgqjnmoRUd2lua2xl5YGP5aW96Kit5a6aJyksIHtcblx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZScsXG5cdFx0XHR9KTtcblx0XHR9KVxuXHRcdC5hbHdheXMoKCkgPT4ge1xuXHRcdFx0JChUd2lua2xlLmxvYWQpO1xuXHRcdH0pO1xuXHQvLyBEZXZlbG9wZXJzOiB5b3UgY2FuIGltcG9ydCBjdXN0b20gVHdpbmtsZSBtb2R1bGVzIGhlcmVcblx0Ly8gRm9yIGV4YW1wbGUsIG13LmxvYWRlci5sb2FkKHNjcmlwdHBhdGhiZWZvcmUgKyBcIlVzZXI6VW5jbGVEb3VnZ2llL21vcmViaXRzLXRlc3QuanNcIiArIHNjcmlwdHBhdGhhZnRlcik7XG5cdFR3aW5rbGUubG9hZCA9ICgpID0+IHtcblx0XHQvLyBEb24ndCBhY3RpdmF0ZSBvbiBzcGVjaWFsIHBhZ2VzIG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGhlcmUsIHNvXG5cdFx0Ly8gdGhhdCBvdGhlcnMgbG9hZCBmYXN0ZXIsIGVzcGVjaWFsbHkgdGhlIHdhdGNobGlzdC5cblx0XHRsZXQgYWN0aXZlU3BlY2lhbFBhZ2VMaXN0ID0gWydCbG9jaycsICdDb250cmlidXRpb25zJywgJ0FidXNlTG9nJywgJ1JlY2VudGNoYW5nZXMnLCAnUmVjZW50Y2hhbmdlc2xpbmtlZCddOyAvLyB3Z1JlbGV2YW50VXNlck5hbWUgZGVmaW5lZCBmb3Igbm9uLXN5c29wcyBvbiBTcGVjaWFsOkJsb2NrXG5cdFx0aWYgKE1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHRhY3RpdmVTcGVjaWFsUGFnZUxpc3QgPSBbXG5cdFx0XHRcdC4uLmFjdGl2ZVNwZWNpYWxQYWdlTGlzdCxcblx0XHRcdFx0J0RlbGV0ZWRDb250cmlidXRpb25zJyxcblx0XHRcdFx0J1ByZWZpeGluZGV4Jyxcblx0XHRcdFx0J0Jyb2tlblJlZGlyZWN0cycsXG5cdFx0XHRdO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAtMSAmJlxuXHRcdFx0IWFjdGl2ZVNwZWNpYWxQYWdlTGlzdC5pbmNsdWRlcyhtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBQcmV2ZW50IGNsaWNramFja2luZ1xuXHRcdGlmICh3aW5kb3cudG9wICE9PSB3aW5kb3cuc2VsZikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBTZXQgY3VzdG9tIEFwaS1Vc2VyLUFnZW50IGhlYWRlciwgZm9yIHNlcnZlci1zaWRlIGxvZ2dpbmcgcHVycG9zZXNcblx0XHRUd2lua2xlLnVzZXJBZ2VudCA9ICdUd2lua2xlLzEuMSc7XG5cdFx0TW9yZWJpdHMud2lraS5hcGkuc2V0QXBpVXNlckFnZW50KFR3aW5rbGUudXNlckFnZW50KTtcblx0XHRUd2lua2xlLmRpc2FibGVkTW9kdWxlcyA9IFsuLi5Ud2lua2xlLmdldFByZWYoJ2Rpc2FibGVkTW9kdWxlcycpLCAuLi5Ud2lua2xlLmdldFByZWYoJ2Rpc2FibGVkU3lzb3BNb2R1bGVzJyldO1xuXHRcdC8vIFJlZGVmaW5lIGFkZEluaXRDYWxsYmFjayBzbyB0aGF0IGFueSBtb2R1bGVzIGJlaW5nIGxvYWRlZCBub3cgb24gYXJlIGRpcmVjdGx5XG5cdFx0Ly8gaW5pdGlhbGlzZWQgcmF0aGVyIHRoYW4gYWRkZWQgdG8gaW5pdENhbGxiYWNrcyBhcnJheVxuXHRcdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrID0gKGZ1bmMsIG5hbWUpID0+IHtcblx0XHRcdGlmICghbmFtZSB8fCAhVHdpbmtsZS5kaXNhYmxlZE1vZHVsZXMuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0ZnVuYygpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gSW5pdGlhbGlzZSBtb2R1bGVzIHRoYXQgd2VyZSBzYXZlZCBpbiBpbml0Q2FsbGJhY2tzIGFycmF5XG5cdFx0Zm9yIChjb25zdCBtb2R1bGUgb2YgVHdpbmtsZS5pbml0Q2FsbGJhY2tzKSB7XG5cdFx0XHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhtb2R1bGUuZnVuYywgbW9kdWxlLm5hbWUpO1xuXHRcdH1cblx0XHQvLyBJbmNyZWFzZXMgdGV4dCBzaXplIGluIFR3aW5rbGUgZGlhbG9ncywgaWYgc28gY29uZmlndXJlZFxuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ2RpYWxvZ0xhcmdlRm9udCcpKSB7XG5cdFx0XHRtdy51dGlsLmFkZENTUyhcblx0XHRcdFx0Jy5tb3JlYml0cy1kaWFsb2ctY29udGVudCwubW9yZWJpdHMtZGlhbG9nLWZvb3Rlcmxpbmtze2ZvbnQtc2l6ZToxMDAlIWltcG9ydGFudH0ubW9yZWJpdHMtZGlhbG9nIGlucHV0LC5tb3JlYml0cy1kaWFsb2cgc2VsZWN0LC5tb3JlYml0cy1kaWFsb2ctY29udGVudCBidXR0b257Zm9udC1zaXplOmluaGVyaXQgIWltcG9ydGFudH0nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvLyBIaWRlIHRoZSBsaW5nZXJpbmcgc3BhY2UgaWYgdGhlIFRXIG1lbnUgaXMgZW1wdHlcblx0XHRjb25zdCBpc1ZlY3RvciA9IFsndmVjdG9yJywgJ3ZlY3Rvci0yMDIyJ10uaW5jbHVkZXMobXcuY29uZmlnLmdldCgnc2tpbicpKTtcblx0XHRpZiAoaXNWZWN0b3IgJiYgVHdpbmtsZS5nZXRQcmVmKCdwb3J0bGV0VHlwZScpID09PSAnbWVudScgJiYgJGJvZHkuZmluZCgnI3AtdHdpbmtsZScpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0JGJvZHkuZmluZCgnI3AtY2FjdGlvbnMnKS5jc3MoJ21hcmdpbi1yaWdodCcsICdpbml0aWFsJyk7XG5cdFx0fVxuXHR9O1xuXHQvKipcblx0ICogVHdpbmtsZS1zcGVjaWZpYyB1dGlsaXR5IGZ1bmN0aW9ucyBzaGFyZWQgYnkgbXVsdGlwbGUgbW9kdWxlc1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGZpcnN0XG5cdCAqIEBwYXJhbSB7Kn0gc2Vjb25kXG5cdCAqL1xuXHQvLyBVc2VkIGluIGJhdGNoLCB1bmxpbmssIGFuZCBkZXByb2QgdG8gc29ydCBwYWdlcyBieSBuYW1lc3BhY2UsIGFzXG5cdC8vIGpzb24gZm9ybWF0dmVyc2lvbj0yIHNvcnRzIGJ5IHBhZ2VpZCBpbnN0ZWFkICgjMTI1MSlcblx0VHdpbmtsZS5zb3J0QnlOYW1lc3BhY2UgPSAoZmlyc3QsIHNlY29uZCkgPT4ge1xuXHRcdHJldHVybiBmaXJzdC5ucyAtIHNlY29uZC5ucyB8fCAoZmlyc3QudGl0bGUgPiBzZWNvbmQudGl0bGUgPyAxIDogLTEpO1xuXHR9O1xuXHQvLyBVc2VkIGluIHVubGluayBsaXN0aW5ncyB0byBsaW5rIHRoZSBwYWdlIHRpdGxlXG5cdFR3aW5rbGUuZ2VuZXJhdGVCYXRjaFBhZ2VMaW5rcyA9IChjaGVja2JveCkgPT4ge1xuXHRcdGNvbnN0ICRjaGVja2JveCA9ICQoY2hlY2tib3gpO1xuXHRcdGNvbnN0IGxpbmsgPSBNb3JlYml0cy5odG1sTm9kZSgnYScsICRjaGVja2JveC52YWwoKSk7XG5cdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3R3LWJhdGNocGFnZS1saW5rJyk7XG5cdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybCgkY2hlY2tib3gudmFsKCkpKTtcblx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuXHRcdCRjaGVja2JveC5uZXh0KCkucHJlcGVuZChbbGluaywgJyAnXSk7XG5cdH07XG59KShqUXVlcnkpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcblxuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlYXJ2LmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZWFydigkKSB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHQvKipcblx0ICogdHdpbmtsZWFydi5qczogQVJWIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IFRhYiAoXCJBUlZcIilcblx0ICogQWN0aXZlIG9uOiBBbnkgcGFnZSB3aXRoIHJlbGV2YW50IHVzZXIgbmFtZSAodXNlcnNwYWNlLCBjb250cmlicywgZXRjLilcblx0ICovXG5cdFR3aW5rbGUuYXJ2ID0gKCkgPT4ge1xuXHRcdGNvbnN0IHVzZXJuYW1lID0gbXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyk7XG5cdFx0aWYgKCF1c2VybmFtZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBpc0lQID0gbXcudXRpbC5pc0lQQWRkcmVzcyh1c2VybmFtZSk7XG5cdFx0Y29uc3QgdGl0bGUgPSBpc0lQXG5cdFx0XHQ/IHdpbmRvdy53Z1VMUygn5oql5ZGKSVDnu5nnrqHnkIblkZgnLCAn5aCx5ZGKSVDntabnrqHnkIblk6EnKVxuXHRcdFx0OiB3aW5kb3cud2dVTFMoJ+aKpeWRiueUqOaIt+e7meeuoeeQhuS6uuWRmCcsICfloLHlkYrkvb/nlKjogIXntabnrqHnkIbkurrlk6EnKTtcblx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRUd2lua2xlLmFydi5jYWxsYmFjayh1c2VybmFtZSwgaXNJUCk7XG5cdFx0XHR9LFxuXHRcdFx0d2luZG93LndnVUxTKCflkYrnirYnLCAn5ZGK54uAJyksXG5cdFx0XHQndHctYXJ2Jyxcblx0XHRcdHRpdGxlXG5cdFx0KTtcblx0fTtcblx0VHdpbmtsZS5hcnYuY2FsbGJhY2sgPSAodWlkLCBpc0lQKSA9PiB7XG5cdFx0aWYgKHVpZCA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKSB7XG5cdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfkvaDkuI3mg7PmiqXlkYrkvaDoh6rlt7HvvIzlr7nlkKfvvJ8nLCAn5L2g5LiN5oOz5aCx5ZGK5L2g6Ieq5bex77yM5bCN5ZCn77yfJyksIHtcblx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHR0YWc6ICd0d2lua2xlYXJ2Jyxcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgNTAwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCfmiqXlkYrnlKjmiLfnu5nnrqHnkIbkurrlkZgnLCAn5aCx5ZGK5L2/55So6ICF57Wm566h55CG5Lq65ZOhJykpO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflkYrnirborr7nva4nLCAn5ZGK54uA6Kit5a6aJyksICdIOlRXL1BSRUYjYXJ2Jyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcj5ZGK54uAJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS5hcnYuY2FsbGJhY2suZXZhbHVhdGUpO1xuXHRcdGNvbnN0IGNhdGVnb3JpZXMgPSBmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdG5hbWU6ICdjYXRlZ29yeScsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6nmiqXlkYrnsbvlnovvvJonLCAn6YG45pOH5aCx5ZGK6aGe5Yil77yaJyksXG5cdFx0XHRldmVudDogVHdpbmtsZS5hcnYuY2FsbGJhY2suY2hhbmdlQ2F0ZWdvcnksXG5cdFx0fSk7XG5cdFx0Y2F0ZWdvcmllcy5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnoLTlnY/vvIhMSUI6VklQ77yJJywgJ+egtOWjnu+8iExJQjpWSVDvvIknKSxcblx0XHRcdHZhbHVlOiAnYWl2Jyxcblx0XHR9KTtcblx0XHRjYXRlZ29yaWVzLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e8lui+keS6ieiuru+8iExJQjpFV0lQ77yJJywgJ+e3qOi8r+eIreitsO+8iExJQjpFV0lQ77yJJyksXG5cdFx0XHR2YWx1ZTogJ2V3aXAnLFxuXHRcdH0pO1xuXHRcdGNhdGVnb3JpZXMuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35ZCN77yITElCOlVBQe+8iScsICfkvb/nlKjogIXlkI3nqLHvvIhMSUI6VUFB77yJJyksXG5cdFx0XHR2YWx1ZTogJ3VzZXJuYW1lJyxcblx0XHRcdGRpc2FibGVkOiBtdy51dGlsLmlzSVBBZGRyZXNzKHVpZCksXG5cdFx0fSk7XG5cdFx0Y2F0ZWdvcmllcy5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflgoDlhKHosIPmn6XvvIhMSUI6U1BJ77yJJywgJ+WCgOWEoeiqv+afpe+8iExJQjpTUEnvvIknKSxcblx0XHRcdHZhbHVlOiAnc3BpJyxcblx0XHRcdGRpc2FibGVkOiBtdy51dGlsLmlzSVBBZGRyZXNzKHVpZCksXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRsYWJlbDogJycsXG5cdFx0XHRzdHlsZTogJ2NvbG9yOiAjZjAwJyxcblx0XHRcdGlkOiAndHdpbmtsZS1hcnYtYmxvY2t3YXJuaW5nJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6ICdXb3JrIGFyZWEnLFxuXHRcdFx0bmFtZTogJ3dvcmtfYXJlYScsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0XHRsYWJlbDogJ+aPkOS6pCcsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2hpZGRlbicsXG5cdFx0XHRuYW1lOiAndWlkJyxcblx0XHRcdHZhbHVlOiB1aWQsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gZm9ybS5yZW5kZXIoKTtcblx0XHRXaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFdpbmRvdy5kaXNwbGF5KCk7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIHVzZXIgaXMgYmxvY2tlZCwgdXBkYXRlIG5vdGljZVxuXHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0bGlzdDogJ2Jsb2NrcycsXG5cdFx0XHRia3Byb3A6ICdyYW5nZXxmbGFncycsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHR9O1xuXHRcdGlmIChpc0lQKSB7XG5cdFx0XHRxdWVyeS5ia2lwID0gdWlkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRxdWVyeS5ia3VzZXJzID0gdWlkO1xuXHRcdH1cblx0XHRuZXcgTW9yZWJpdHMud2lraS5hcGkod2luZG93LndnVUxTKCfmo4Dmn6XnlKjmiLfnmoTlsIHnpoHnirbmgIEnLCAn5qqi5p+l5L2/55So6ICF55qE5bCB6Y6W54uA5oWLJyksIHF1ZXJ5LCAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBibG9ja2xpc3QgPSBhcGlvYmouZ2V0UmVzcG9uc2UoKS5xdWVyeS5ibG9ja3M7XG5cdFx0XHRpZiAoYmxvY2tsaXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBbYmxvY2tdID0gYmxvY2tsaXN0O1xuXHRcdFx0XHRsZXQgbWVzc2FnZSA9XG5cdFx0XHRcdFx0KGlzSVAgPyB3aW5kb3cud2dVTFMoJ+atpElQ5Zyw5Z2AJywgJ+atpElQ5L2N5Z2AJykgOiB3aW5kb3cud2dVTFMoJ+atpOi0puWPtycsICfmraTos6zomZ8nKSkgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5bey57uP6KKrJywgJ+W3sue2k+iiqycpICtcblx0XHRcdFx0XHQoYmxvY2sucGFydGlhbCA/ICfpg6jliIYnIDogJycpO1xuXHRcdFx0XHQvLyBTdGFydCBhbmQgZW5kIGRpZmZlciwgcmFuZ2UgYmxvY2tlZFxuXHRcdFx0XHRtZXNzYWdlICs9IGJsb2NrLnJhbmdlc3RhcnQgPT09IChibG9jay5yYW5nZWVuZCA/ICfmrrUnIDogJycpICsgd2luZG93LndnVUxTKCflsIHnpoHjgIInLCAn5bCB6Y6W44CCJyk7XG5cdFx0XHRcdGlmIChibG9jay5wYXJ0aWFsKSB7XG5cdFx0XHRcdFx0JGJvZHkuZmluZCgnI3R3aW5rbGUtYXJ2LWJsb2Nrd2FybmluZycpLmNzcygnY29sb3InLCAnYmxhY2snKTsgLy8gTGVzcyBzZXZlcmVcblx0XHRcdFx0fVxuXHRcdFx0XHQkYm9keS5maW5kKCcjdHdpbmtsZS1hcnYtYmxvY2t3YXJuaW5nJykudGV4dChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KS5wb3N0KCk7XG5cdFx0Ly8gV2UgbXVzdCBpbml0IHRoZVxuXHRcdGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuXHRcdGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdHJlc3VsdC5jYXRlZ29yeS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdH07XG5cdFR3aW5rbGUuYXJ2Lmx0YV9saXN0ID0gW1xuXHRcdHtcblx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivt+mAieaLqScsICfoq4vpgbjmk4cnKSxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLmFydi5jYWxsYmFjay5zb2NrbWFzdGVyX2NoYW5nZWQgPSAoZSkgPT4ge1xuXHRcdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLnNldF9zb2NrbWFzdGVyKGUudGFyZ2V0LnZhbHVlKTtcblx0fTtcblx0VHdpbmtsZS5hcnYuY2FsbGJhY2suc2V0X3NvY2ttYXN0ZXIgPSAoc29ja21hc3RlcikgPT4ge1xuXHRcdCRib2R5LmZpbmQoJ2NvZGUudHctYXJ2LXNvY2ttYXN0ZXInKS50ZXh0KCd7eycuY29uY2F0KCdzdWJzdDonLCBgU29ja3N1c3BlY3Rub3RpY2V8MT0ke3NvY2ttYXN0ZXJ9fX1gKSk7XG5cdH07XG5cdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLmNoYW5nZUNhdGVnb3J5ID0gKGUpID0+IHtcblx0XHRjb25zdCB2YWx1ZV8gPSBlLnRhcmdldC52YWx1ZTtcblx0XHRjb25zdCByb290XyA9IGUudGFyZ2V0LmZvcm07XG5cdFx0Y29uc3QgW29sZF9hcmVhXSA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyb290XywgJ3dvcmtfYXJlYScpO1xuXHRcdGxldCB3b3JrX2FyZWEgPSBudWxsO1xuXHRcdGNvbnN0IHByZXZpZXdsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdHByZXZpZXdsaW5rLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcblx0XHRwcmV2aWV3bGluay50ZXh0Q29udGVudCA9IHdpbmRvdy53Z1VMUygn6aKE6KeIJywgJ+mgkOimvScpO1xuXHRcdCQocHJldmlld2xpbmspLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLnByZXZpZXcocm9vdF8pO1xuXHRcdH0pO1xuXHRcdHN3aXRjaCAodmFsdWVfKSB7XG5cdFx0XHRjYXNlICdld2lwJzpcblx0XHRcdFx0d29ya19hcmVhID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aKpeWRiue8lui+keS6ieiuricsICfloLHlkYrnt6jovK/niK3orbAnKSxcblx0XHRcdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdkeW5pbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3BhZ2UnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ebuOWFs+mhtemdou+8micsICfnm7jpl5zpoIHpnaLvvJonKSxcblx0XHRcdFx0XHRzdWJsYWJlbDogd2luZG93LndnVUxTKCfpobXpnaLvvJonLCAn6aCB6Z2i77yaJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflpoLkuI3luIzmnJvorqnmiqXlkYrpk77mjqXliLDpobXpnaLvvIzor7fnlZnnqbonLCAn5aaC5LiN5biM5pyb6K6T5aCx5ZGK6YCj57WQ5Yiw6aCB6Z2i77yM6KuL55WZ56m6JyksXG5cdFx0XHRcdFx0bWluOiAxLFxuXHRcdFx0XHRcdG1heDogMTAsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivhOiuuu+8micsICfoqZXoq5bvvJonKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdGlkOiAnYXJ2cHJldmlldycsXG5cdFx0XHRcdFx0bGFiZWw6IFtwcmV2aWV3bGlua10sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ3R3aW5rbGVhcnYtcHJldmlld2JveCcsXG5cdFx0XHRcdFx0c3R5bGU6ICdkaXNwbGF5OiBub25lJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRcdFx0b2xkX2FyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod29ya19hcmVhLCBvbGRfYXJlYSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAndXNlcm5hbWUnOlxuXHRcdFx0XHR3b3JrX2FyZWEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5oql5ZGK5LiN5b2T55So5oi35ZCNJywgJ+WgseWRiuS4jeeVtuS9v+eUqOiAheWQjeeosScpLFxuXHRcdFx0XHRcdG5hbWU6ICd3b3JrX2FyZWEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiN5b2T55So5oi35ZCN57G75Z6LJywgJ+S4jeeVtuS9v+eUqOiAheWQjeeosemhnuWIpScpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmnInlhb3moaPmoYjppobkuI3lhYHorrjkvb/nlKjluKbmnInor6/lr7zmgKfjgIHlrqPkvKDmgKfjgIHkvq7ovrHmgKfmiJbnoLTlnY/mgKfnmoTnlKjmiLflkI3jgILmraTlpJbvvIzkvb/nlKjln5/lkI3lj4rpgq7nrrHlnLDlnYDnmoTnlKjmiLflkI3kuqbooqvnpoHmraLjgILov5nkupvlh4bliJnkv7HlupTlupTnlKjoh7PnlKjmiLflkI3lj4rnrb7lkI3jgILlnKjlhbbku5bor63oqIDkuK3kuI3lvZPnmoTnlKjmiLflkI3miJbpgJrov4fplJnmi7zjgIHmm7/ku6PjgIHmmpfnpLrjgIHmi4blrZfmiJbku7vkvZXpl7TmjqXmlrnms5Xovr7miJDnmoTpnZ7lpqXlvZPnlKjmiLflkI3lkIzmoLfop4bkuLrov53op4TjgIInLFxuXHRcdFx0XHRcdFx0J+acieeNuOaqlOahiOmkqOS4jeWFgeioseS9v+eUqOW4tuacieiqpOWwjuaAp+OAgeWuo+WCs+aAp+OAgeS+rui+seaAp+aIluegtOWjnuaAp+eahOS9v+eUqOiAheWQjeeoseOAguatpOWklu+8jOS9v+eUqOWfn+WQjeWPiumbu+WtkOS/oeeuseS9jeWdgOeahOS9v+eUqOiAheWQjeeoseS6puiiq+emgeatouOAgumAmeS6m+a6luWJh+S/seaHieaHieeUqOiHs+S9v+eUqOiAheWQjeeoseWPiuewveWQjeOAguWcqOWFtuS7luiqnuiogOS4reS4jeeVtueahOS9v+eUqOiAheWQjeeoseaIlumAmumBjumMr+aLvOOAgeabv+S7o+OAgeaal+ekuuOAgeaLhuWtl+aIluS7u+S9lemWk+aOpeaWueazlemBlOaIkOeahOmdnuWmpeeVtuS9v+eUqOiAheWQjeeoseWQjOaoo+imlueCuumBleimj+OAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRuYW1lOiAnYXJ2dHlwZScsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor6/lr7zmgKfnlKjmiLflkI0nLCAn6Kqk5bCO5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoJ+ivr+WvvOaApycsICfoqqTlsI7mgKcnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfor6/lr7zmgKfnlKjmiLflkI3pmpDlkKvnnYDkuI7otKHnjK7ogIXnm7jlhbPmiJbor6/lr7zku5bkurrnmoTkuovmg4XjgILkvovlpoLvuLDkuI3lrp7op4LngrnjgIHmmpfnpLrotKblj7fmi6XmnInnibnlrprmnYPpmZDmiJbmmpfnpLror6XotKblj7flubbpnZ7nlLHkuIDkurrmi6XmnInogIzmmK/nlLHkuIDkuKrnu4TnvqTjgIHkuIDkuKrpobnnm67miJbkuIDkuKrpm4bkvZPov5DkvZzjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfoqqTlsI7mgKfkvb/nlKjogIXlkI3nqLHpmrHlkKvokZfoiIfosqLnjbvogIXnm7jpl5zmiJboqqTlsI7ku5bkurrnmoTkuovmg4XjgILkvovlpoLvuLDkuI3lr6bop4Dpu57jgIHmmpfnpLros6zomZ/mk4HmnInnibnlrprmrIrpmZDmiJbmmpfnpLroqbLos6zomZ/kuKbpnZ7nlLHkuIDkurrmk4HmnInogIzmmK/nlLHkuIDlgIvnvqTntYTjgIHkuIDlgIvoqIjnlavmiJbkuIDlgIvpm4bpq5TpgYvkvZzjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflrqPkvKDmgKfnlKjmiLflkI0nLCAn5a6j5YKz5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoJ+Wuo+S8oOaApycsICflrqPlgrPmgKcnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflrqPkvKDmgKfnlKjmiLflkI3kvJrkuo7mnInlhb3moaPmoYjppobkuIrotbfmjqjplIDkuIDkuKrnu4TnvqTmiJbkuIDpl7Tlhazlj7jnmoTkvZznlKjjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCflrqPlgrPmgKfkvb/nlKjogIXlkI3nqLHmnIPmlrzmnInnjbjmqpTmoYjppKjkuIrotbfmjqjpirfkuIDlgIvnvqTntYTmiJbkuIDplpPlhazlj7jnmoTkvZznlKjjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmmpfnpLrlubbpnZ7nlLHkuIDkurrmi6XmnIknLCAn5pqX56S65Lim6Z2e55Sx5LiA5Lq65pOB5pyJJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAnc2hhcmVkJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmr4/kuKrotKblj7flj6rlj6/ku6Xku6PooajkuKrkurrvvIjlrrnorrjkuIDkupvkvovlpJbmg4XlhrXvvInvvIzmiYDmnInkuI7ku5bkurrliIbkuqvotKblj7fnmoTooYzkuLrvvIjljIXmi6zliIbkuqvotKblj7flr4bnoIHvvInlnYfooqvnpoHmraLjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfmr4/lgIvos6zomZ/lj6rlj6/ku6Xku6PooajlgIvkurrvvIjlrrnoqLHkuIDkupvkvovlpJbmg4Xms4HvvInvvIzmiYDmnInoiIfku5bkurrliIbkuqvos6zomZ/nmoTooYzngrrvvIjljIXmi6zliIbkuqvos6zomZ/lr4bnorzvvInlnYfooqvnpoHmraLjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkvq7ovrHmgKfnlKjmiLflkI0nLCAn5L6u6L6x5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAn5L6u6L6x5oCnJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfkvq7ovrHmgKfnlKjmiLflkI3ku6TljY/osIPnvJbovpHlj5jlvpflm7Dpmr7vvIznlJroh7Pml6Dlj6/og73jgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfkvq7ovrHmgKfkvb/nlKjogIXlkI3nqLHku6TljZToqr/nt6jovK/ororlvpflm7Dpm6PvvIznlJroh7PnhKHlj6/og73jgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnoLTlnY/mgKfnlKjmiLflkI0nLCAn56C05aOe5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoJ+egtOWdj+aApycsICfnoLTlo57mgKcnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfnoLTlnY/mgKfnlKjmiLflkI3ljIXmi6zkurrouqvmlLvlh7vjgIHkvKrlhpLku5bkurrmiJblhbbku5bkuIDliIfmnInnnYDmuIXmmbDlj6/op4HnmoTnoLTlnY/mnInlhb3moaPmoYjppobmhI/lm77nmoTnlKjmiLflkI3jgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfnoLTlo57mgKfkvb/nlKjogIXlkI3nqLHljIXmi6zkurrouqvmlLvmk4rjgIHlgb3lhpLku5bkurrmiJblhbbku5bkuIDliIfmnInokZfmuIXmmbDlj6/opovnmoTnoLTlo57mnInnjbjmqpTmoYjppKjmhI/lnJbnmoTkvb/nlKjogIXlkI3nqLHjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo6aG16Z2i5LiK6ZqQ6JeP55So5oi35ZCN77yI6ZyA55uR552j55qE55So5oi35ZCN6K+35Yu/5LqO56uZ5YaF5oql5ZGK77yM5Yu+6YCJ5q2k6aG55bm25LiN5p6E5oiQ6IO95Zyo56uZ5YaF5oql5ZGK55qE55CG55Sx77yJJyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo6aCB6Z2i5LiK6Zqx6JeP5L2/55So6ICF5ZCN56ix77yI6ZyA55uj552j55qE5L2/55So6ICF5ZCN56ix6KuL5Yu/5pa856uZ5YWn5aCx5ZGK77yM5Yu+6YG45q2k6aCF5Lim5LiN5qeL5oiQ6IO95Zyo56uZ5YWn5aCx5ZGK55qE55CG55Sx77yJJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+iLpeeUqOaIt+WQjeS4jeW9k+ivt+WLvumAieatpOmhue+8jOazqOaEj++8muivt+iAg+iZkeengeS4i+iBlOezu+euoeeQhuWRmOWkhOeQhuOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+iLpeS9v+eUqOiAheWQjeeoseS4jeeVtuiri+WLvumBuOatpOmghe+8jOazqOaEj++8muiri+iAg+aFruengeS4i+iBr+e1oeeuoeeQhuWToeiZleeQhuOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ2hpZGVuYW1lJyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdoaWRlbmFtZScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0c3R5bGU6ICdmb250LXdlaWdodDogYm9sZDsnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor4TorrrvvJonLCAn6KmV6KuW77yaJyksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ2FydnByZXZpZXcnLFxuXHRcdFx0XHRcdGxhYmVsOiBbcHJldmlld2xpbmtdLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6ICd0d2lua2xlYXJ2LXByZXZpZXdib3gnLFxuXHRcdFx0XHRcdHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEgPSB3b3JrX2FyZWEucmVuZGVyKCk7XG5cdFx0XHRcdG9sZF9hcmVhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHdvcmtfYXJlYSwgb2xkX2FyZWEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3NwaSc6XG5cdFx0XHRcdHdvcmtfYXJlYSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj5HotbflgoDlhKHosIPmn6UnLCAn55m86LW35YKA5YSh6Kq/5p+lJyksXG5cdFx0XHRcdFx0bmFtZTogJ3dvcmtfYXJlYScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdzb2NrbWFzdGVyJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+S4u+i0puWPt+eahOeUqOaIt+WQje+8iOS4jeWQq1VzZXI65YmN57yA77yJJywgJ+S4u+izrOiZn+eahOS9v+eUqOiAheWQjeeose+8iOS4jeWQq1VzZXI65a2X6aaW77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6IHJvb3RfLnVpZC52YWx1ZSxcblx0XHRcdFx0XHRldmVudDogVHdpbmtsZS5hcnYuY2FsbGJhY2suc29ja21hc3Rlcl9jaGFuZ2VkLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6ICd0d2lua2xlYXJ2LXNwaW5vdGljZWJveCcsXG5cdFx0XHRcdFx0c3R5bGU6ICdkaXNwbGF5OiBub25lJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdkeW5pbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NvY2twdXBwZXQnLFxuXHRcdFx0XHRcdGxhYmVsOiAn5YKA5YShJyxcblx0XHRcdFx0XHRzdWJsYWJlbDogJ+WCgOWEoe+8micsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflgoDlhKHnmoTnlKjmiLflkI3vvIjkuI3lkKtVc2VyOuWJjee8gO+8iScsICflgoDlhKHnmoTkvb/nlKjogIXlkI3nqLHvvIjkuI3lkKtVc2VyOuWtl+mmlu+8iScpLFxuXHRcdFx0XHRcdG1pbjogMixcblx0XHRcdFx0XHRtYXg6IDksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivgeaNru+8micsICforYnmk5rvvJonKSxcblx0XHRcdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6L6T5YWl6IO95aSf55So5p2l5L2T546w6L+Z5Lqb55So5oi35Y+v6IO95rul55So5aSa6YeN6LSm5Y+355qE6K+B5o2u77yM6L+Z6YCa5bi45YyF5ous6Iy26aaG5Y+R6KiA44CB6aG16Z2i5Y6G5Y+y5oiW5YW25LuW5pyJ5YWz55qE5L+h5oGv44CC6K+36YG/5YWN5Zyo5q2k5aSE5o+Q5L6b6Z2e5LiO5YKA5YSh5oiW5rul55So5aSa6YeN6LSm5Y+355u45YWz55qE5YW25LuW6K6o6K6644CCJyxcblx0XHRcdFx0XHRcdCfovLjlhaXog73lpKDnlKjkvobpq5Tnj77pgJnkupvkvb/nlKjogIXlj6/og73mv6vnlKjlpJrph43os6zomZ/nmoTorYnmk5rvvIzpgJnpgJrluLjljIXmi6zojLbppKjnmbzoqIDjgIHpoIHpnaLmrbflj7LmiJblhbbku5bmnInpl5znmoTos4foqIrjgILoq4vpgb/lhY3lnKjmraTomZXmj5DkvpvpnZ7oiIflgoDlhKHmiJbmv6vnlKjlpJrph43os6zomZ/nm7jpl5znmoTlhbbku5boqI7oq5bjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor7fmsYLnlKjmiLfmn6XmoLgnLCAn6KuL5rGC5L2/55So6ICF5p+l5qC4JyksXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdjaGVja3VzZXInLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+eUqOaIt+afpeaguOaYr+S4gOenjeeUqOS6juiOt+WPluWCgOWEoeaMh+aOp+ebuOWFs+aKgOacr+ivgeaNrueahOW3peWFt++8jOiLpeayoeacieato+W9k+eQhueUseWImeS4jeS8muS9v+eUqO+8jOaCqOW/hemhu+WcqOivgeaNruWtl+auteWFheWIhuino+mHiuS4uuS7gOS5iOmcgOimgeS9v+eUqOivpeW3peWFt+OAgueUqOaIt+afpeaguOS4jeS8mueUqOS6juWFrOW8gOi/nuaOpeeUqOaIt+i0puWPt+S9v+eUqOeahElQ5Zyw5Z2A44CCJyxcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So6ICF5p+l5qC45piv5LiA56iu55So5pa8542y5Y+W5YKA5YSh5oyH5o6n55u46Zec5oqA6KGT6K2J5pOa55qE5bel5YW377yM6Iul5rKS5pyJ5q2j55W255CG55Sx5YmH5LiN5pyD5L2/55So77yM5oKo5b+F6aCI5Zyo6K2J5pOa5qyE5L2N5YWF5YiG6Kej6YeL54K65LuA6bq86ZyA6KaB5L2/55So6Kmy5bel5YW344CC5L2/55So6ICF5p+l5qC45LiN5pyD55So5pa85YWs6ZaL6YCj5o6l5L2/55So6ICF6LOs6Jmf5L2/55So55qESVDkvY3lnYDjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ2FydnByZXZpZXcnLFxuXHRcdFx0XHRcdGxhYmVsOiBbcHJldmlld2xpbmtdLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6ICd0d2lua2xlYXJ2LXByZXZpZXdib3gnLFxuXHRcdFx0XHRcdHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRsYWJlbDogW1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfor7fkvb/nlKjluLjor4blhrPlrprmmK/lkKbku6UnLCAn6KuL5L2/55So5bi46K2Y5rG65a6a5piv5ZCm5LulJyksXG5cdFx0XHRcdFx0XHQkKCc8Y29kZT4nKS5hZGRDbGFzcygndHctYXJ2LXNvY2ttYXN0ZXInKS5jc3MoJ21hcmdpbicsICcycHg7JylbMF0sXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCfpgJrnn6XnlKjmiLfjgILov5nkuI3mmK/lv4XpobvnmoTvvIzlr7nkuo7mtonlj4rmlrDnlKjmiLfnmoTmiqXlkYrogIzoqIDvvIzpgJrnn6Xku5bku6zog73orqnmiqXlkYrmmL7lvpfmm7TlhazlubPvvIzkvYbmmK/orrjlpJrmg4XlhrXkuIvvvIjlpoLplb/mnJ/noLTlnY/ogIXvvInpgJrnn6Xmm7Tlj6/og73pgILlvpflhbblj43jgIInLFxuXHRcdFx0XHRcdFx0XHQn6YCa55+l5L2/55So6ICF44CC6YCZ5LiN5piv5b+F6aCI55qE77yM5bCN5pa85raJ5Y+K5paw5L2/55So6ICF55qE5aCx5ZGK6ICM6KiA77yM6YCa55+l5LuW5YCR6IO96K6T5aCx5ZGK6aGv5b6X5pu05YWs5bmz77yM5L2G5piv6Kix5aSa5oOF5rOB5LiL77yI5aaC6ZW35pyf56C05aOe6ICF77yJ6YCa55+l5pu05Y+v6IO96YGp5b6X5YW25Y+N44CCJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhID0gd29ya19hcmVhLnJlbmRlcigpO1xuXHRcdFx0XHQkKCdpbnB1dDp0ZXh0W25hbWU9c29ja3B1cHBldF0nLCB3b3JrX2FyZWEpLmZpcnN0KCkudmFsKHJvb3RfLnVpZC52YWx1ZSk7XG5cdFx0XHRcdG9sZF9hcmVhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHdvcmtfYXJlYSwgb2xkX2FyZWEpO1xuXHRcdFx0XHRyb290Xy5zcGlub3RpY2VwcmV2aWV3ZXIgPSBuZXcgTW9yZWJpdHMud2lraS5wcmV2aWV3KFxuXHRcdFx0XHRcdCQod29ya19hcmVhKS5maW5kKCcjdHdpbmtsZWFydi1zcGlub3RpY2Vib3gnKS5sYXN0KClbMF1cblx0XHRcdFx0KTtcblx0XHRcdFx0VHdpbmtsZS5hcnYuY2FsbGJhY2suc2V0X3NvY2ttYXN0ZXIocm9vdF8udWlkLnZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdC8qIGNhc2UgJ2Fpdic6ICovXG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR3b3JrX2FyZWEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5oql5ZGK55So5oi356C05Z2PJywgJ+WgseWRiuS9v+eUqOiAheegtOWjnicpLFxuXHRcdFx0XHRcdG5hbWU6ICd3b3JrX2FyZWEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmj5DmiqXlgoDlhKHlupTkvJjlhYjlj5HpgIHoh7PlgoDlhKHosIPmn6XvvIzpmaTpnZ7nm7jlhbPnmoTotKblj7fmnInpq5jpopHnjofjgIHmtonlj4rlpJrkuKrpobXpnaLnrYnntKfmgKXkuKXph43nmoTnoLTlnY/ooYzkuLrjgIInLFxuXHRcdFx0XHRcdFx0J+aPkOWgseWCgOWEoeaHieWEquWFiOeZvOmAgeiHs+WCgOWEoeiqv+afpe+8jOmZpOmdnuebuOmXnOeahOizrOiZn+aciemrmOmgu+eOh+OAgea2ieWPiuWkmuWAi+mggemdouetiee3iuaApeWatOmHjeeahOegtOWjnuihjOeCuuOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAncGFnZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55u45YWz6aG16Z2i77yaJywgJ+ebuOmXnOmggemdou+8micpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5aaC5LiN5biM5pyb6K6p5oql5ZGK6ZO+5o6l5Yiw6aG16Z2i77yM6K+355WZ56m6JywgJ+WmguS4jeW4jOacm+iuk+WgseWRiumAo+e1kOWIsOmggemdou+8jOiri+eVmeepuicpLFxuXHRcdFx0XHRcdHZhbHVlOiBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGUnKSB8fCAnJyxcblx0XHRcdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCB7dmFsdWV9ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRcdFx0Y29uc3Qgcm9vdCA9IGV2ZW50LnRhcmdldC5mb3JtO1xuXHRcdFx0XHRcdFx0aWYgKHZhbHVlID09PSAnJykge1xuXHRcdFx0XHRcdFx0XHRyb290LmJhZGlkLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0cm9vdC5nb29kaWQuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cm9vdC5iYWRpZC5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRyb290Lmdvb2RpZC5kaXNhYmxlZCA9IHJvb3QuYmFkaWQudmFsdWUgPT09ICcnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdiYWRpZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y+X5Yiw56C05Z2P55qE5L+u6K6i54mI5pys77yaJywgJ+WPl+WIsOegtOWjnueahOS/ruiogueJiOacrO+8micpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn55WZ56m65Lul55Wl6L+H5beu5byCJywgJ+eVmeepuuS7peeVpemBjuW3rueVsCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGVyZXZpZCcpIHx8ICcnLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd2YW5hcnRpY2xlJyksXG5cdFx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qge3ZhbHVlfSA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0XHRcdGNvbnN0IHJvb3QgPSBldmVudC50YXJnZXQuZm9ybTtcblx0XHRcdFx0XHRcdHJvb3QuZ29vZGlkLmRpc2FibGVkID0gdmFsdWUgPT09ICcnO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdnb29kaWQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+egtOWdj+WJjeeahOS/ruiuoueJiOacrO+8micsICfnoLTlo57liY3nmoTkv67oqILniYjmnKzvvJonKSxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+eVmeepuuS7peeVpei/h+W3ruW8gueahOi+g+aXqeeJiOacrCcsICfnlZnnqbrku6XnlaXpgY7lt67nlbDnmoTovIPml6nniYjmnKwnKSxcblx0XHRcdFx0XHR2YWx1ZTogbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd2YW5hcnRpY2xlZ29vZHJldmlkJykgfHwgJycsXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6ICFtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGUnKSB8fCBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGVyZXZpZCcpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRuYW1lOiAnYXJ2dHlwZScsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflt7Llj5Hlh7rmnIDlkI7orablkYonLCAn5bey55m85Ye65pyA5b6M6K2m5ZGKJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAnZmluYWwnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCB56aB6L+H5pyf5ZCO6ZqP5Y2z56C05Z2PJywgJ+WwgemOlumBjuacn+W+jOmaqOWNs+egtOWjnicpLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ3Bvc3RibG9jaycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmmL7ogIzmmJPop4HnmoTnuq/noLTlnY/nlKjmiLcnLCAn6aGv6ICM5piT6KaL55qE57SU56C05aOe5L2/55So6ICFJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAndmFuZGFsb25seScsXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiBtdy51dGlsLmlzSVBBZGRyZXNzKHJvb3RfLnVpZC52YWx1ZSksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmmL7ogIzmmJPop4HnmoRzcGFtYm905oiW5aSx56qD6LSm5Y+3JywgJ+mhr+iAjOaYk+imi+eahHNwYW1ib3TmiJblpLHnq4ros6zomZ8nKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdzcGFtYm90Jyxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S7heeUqOadpeaVo+WPkeW5v+WRiuWuo+S8oOeahOeUqOaItycsICflg4XnlKjkvobmlaPnmbzlu6PlkYrlrqPlgrPnmoTkvb/nlKjogIUnKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdwcm9tb29ubHknLFxuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogbXcudXRpbC5pc0lQQWRkcmVzcyhyb290Xy51aWQudmFsdWUpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKCFtdy51dGlsLmlzSVBBZGRyZXNzKG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKSkge1xuXHRcdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOmhtemdouS4iuWPiue8lui+keaRmOimgemakOiXj+eUqOaIt+WQjScsICflnKjpoIHpnaLkuIrlj4rnt6jovK/mkZjopoHpmrHol4/kvb/nlKjogIXlkI3nqLEnKSxcblx0XHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn6Iul55So5oi35ZCN5LiN5b2T6K+35Yu+6YCJ5q2k6aG577yM5rOo5oSP77ya6K+36ICD6JmR56eB5LiL6IGU57O7566h55CG5ZGY5aSE55CG44CCJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfoi6Xkvb/nlKjogIXlkI3nqLHkuI3nlbboq4vli77pgbjmraTpoIXvvIzms6jmhI/vvJroq4vogIPmha7np4HkuIvoga/ntaHnrqHnkIblk6HomZXnkIbjgIInXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiAnaGlkZW5hbWUnLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnaGlkZW5hbWUnLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivhOiuuu+8micsICfoqZXoq5bvvJonKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdGlkOiAnYXJ2cHJldmlldycsXG5cdFx0XHRcdFx0bGFiZWw6IFtwcmV2aWV3bGlua10sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ3R3aW5rbGVhcnYtcHJldmlld2JveCcsXG5cdFx0XHRcdFx0c3R5bGU6ICdkaXNwbGF5OiBub25lJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRcdFx0b2xkX2FyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod29ya19hcmVhLCBvbGRfYXJlYSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyb290Xy5wcmV2aWV3ZXIgPSBuZXcgTW9yZWJpdHMud2lraS5wcmV2aWV3KCQod29ya19hcmVhKS5maW5kKCcjdHdpbmtsZWFydi1wcmV2aWV3Ym94JykubGFzdCgpWzBdKTtcblx0fTtcblx0VHdpbmtsZS5hcnYuY2FsbGJhY2sucHJldmlldyA9IChmb3JtKSA9PiB7XG5cdFx0Y29uc3QgcmVhc29uID0gVHdpbmtsZS5hcnYuY2FsbGJhY2suZ2V0UmVwb3J0V2lraXRleHQoZm9ybSk7XG5cdFx0aWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGlucHV0ID0gTW9yZWJpdHMucXVpY2tGb3JtLmdldElucHV0RGF0YShmb3JtKTtcblx0XHRsZXQgdGl0bGU7XG5cdFx0c3dpdGNoIChpbnB1dC5jYXRlZ29yeSkge1xuXHRcdFx0Y2FzZSAndmlwJzpcblx0XHRcdFx0dGl0bGUgPSAnTElCX3RhbGs65oql5ZGK5b2T5YmN56C05Z2PJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdld2lwJzpcblx0XHRcdFx0dGl0bGUgPSAnTElCX3RhbGs6566h55CG5ZGY5ZGK56S65p2/Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd1c2VybmFtZSc6XG5cdFx0XHRcdHRpdGxlID0gJ0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadvyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc3BpJzpcblx0XHRcdFx0dGl0bGUgPSAnTElCX3RhbGs6566h55CG5ZGY5ZGK56S65p2/Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aXRsZSA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGZvcm0ucHJldmlld2VyLmJlZ2luUmVuZGVyKGBfX05PVE9DX18ke3JlYXNvblswXX1gLCB0aXRsZSk7XG5cdH07XG5cdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLmdldFJlcG9ydFdpa2l0ZXh0ID0gKGZvcm0pID0+IHtcblx0XHRjb25zdCBpbnB1dCA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZm9ybSk7XG5cdFx0bGV0IHJlYXNvbiA9ICcnO1xuXHRcdGxldCBjb21tZW50ID0gJyc7XG5cdFx0Y29uc3Qge3VpZH0gPSBpbnB1dDtcblx0XHRjb25zdCBjaGVja1RpdGxlID0gKHRpdGxlLCByZXZpZCkgPT4ge1xuXHRcdFx0aWYgKC9odHRwcz86XFwvXFwvLy50ZXN0KHRpdGxlKSkge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfpobXpnaLlkI3np7DkuI3og73kvb/nlKjnvZHlnYDjgIInLCAn6aCB6Z2i5ZCN56ix5LiN6IO95L2/55So57ay5Z2A44CCJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRsZXQgcGFnZV87XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwYWdlXyA9IG5ldyBtdy5UaXRsZSh0aXRsZSk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0bXcubm90aWZ5KFxuXHRcdFx0XHRcdGAke1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfigJwnLCAn44CMJykgK1xuXHRcdFx0XHRcdFx0dGl0bGUgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHQn4oCd5LiN5piv5LiA5Liq5pyJ5pWI55qE6aG16Z2i5ZCN56ew77yM5aaC6KaB5L2/55So5beu5byC6ZO+5o6l6K+35pS+5Zyo4oCc6K+E6K664oCdJyxcblx0XHRcdFx0XHRcdFx0J+OAjeS4jeaYr+S4gOWAi+acieaViOeahOmggemdouWQjeeose+8jOWmguimgeS9v+eUqOW3rueVsOmAo+e1kOiri+aUvuWcqOOAjOipleirluOAjSdcblx0XHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0KHJldmlkID8gd2luZG93LndnVUxTKCfvvIzmiJbmraPnoa7ovpPlhaXigJzkv67orqLniYjmnKzigJ0nLCAn77yM5oiW5q2j56K66Ly45YWl44CM5L+u6KiC54mI5pys44CNJykgOiAnJylcblx0XHRcdFx0XHR944CCYCxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlYXJ2Jyxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChwYWdlXy5uYW1lc3BhY2UgPT09IC0xKSB7XG5cdFx0XHRcdG13Lm5vdGlmeShcblx0XHRcdFx0XHRgJHtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCcJywgJ+OAjCcpICtcblx0XHRcdFx0XHRcdHRpdGxlICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+KAneWxnuS6jueJueauiumhtemdou+8jOWmguimgeS9v+eUqOW3ruW8gumTvuaOpeivt+aUvuWcqOKAnOivhOiuuuKAnScsXG5cdFx0XHRcdFx0XHRcdCfjgI3lsazmlrznibnmrorpoIHpnaLvvIzlpoLopoHkvb/nlKjlt67nlbDpgKPntZDoq4vmlL7lnKjjgIzoqZXoq5bjgI0nXG5cdFx0XHRcdFx0XHQpICtcblx0XHRcdFx0XHRcdChyZXZpZCA/IHdpbmRvdy53Z1VMUygn77yM5oiW5q2j56Gu6L6T5YWl4oCc5L+u6K6i54mI5pys4oCdJywgJ++8jOaIluato+eiuui8uOWFpeOAjOS/ruiogueJiOacrOOAjScpIDogJycpXG5cdFx0XHRcdFx0feOAgmAsXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGFnZV87XG5cdFx0fTtcblx0XHRsZXQgcGFnZTtcblx0XHRzd2l0Y2ggKGlucHV0LmNhdGVnb3J5KSB7XG5cdFx0XHQvLyBSZXBvcnQgM1JSXG5cdFx0XHRjYXNlICdld2lwJzoge1xuXHRcdFx0XHRpZiAoaW5wdXQucmVhc29uID09PSAnJykge1xuXHRcdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOW/hemhu+aMh+WumueQhueUsScsICfmgqjlv4XpoIjmjIflrprnkIbnlLEnKSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlYXNvbiArPSBgPT0g57yW6L6R5oiY5Li+5oql77yIJHt1aWR977yJID09XFxuYDtcblx0XHRcdFx0cmVhc29uICs9IGAqICcnJ3t7dmFuZGFsfCR7L1s9XS8udGVzdCh1aWQpID8gJzE9JyA6ICcnfSR7dWlkfX19JycnXFxuYDtcblx0XHRcdFx0Y29uc3QgcGFnZXMgPSAkKCdpbnB1dDp0ZXh0W25hbWU9cGFnZV0nLCBmb3JtKS5tYXAoKG8sIGUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJChlKS52YWwoKSB8fCBudWxsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9yIChjb25zdCBwYWdlXyBvZiBwYWdlcykge1xuXHRcdFx0XHRcdHBhZ2UgPSBjaGVja1RpdGxlKHBhZ2VfLCBmYWxzZSk7XG5cdFx0XHRcdFx0aWYgKCFwYWdlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbW1lbnQgKz0gYCoge3twYWdlbGlua3N8JHtcblx0XHRcdFx0XHRcdHBhZ2UuZ2V0UHJlZml4ZWRUZXh0KCkuaW5jbHVkZXMoJz0nKSA/ICcxPScgOiAnJ1xuXHRcdFx0XHRcdH0ke3BhZ2UuZ2V0UHJlZml4ZWRUZXh0KCl9fX1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlucHV0LnJlYXNvbiA9IGlucHV0LnJlYXNvbi5yZXBsYWNlKC9cXG5cXG4rL2csICdcXG4nKTtcblx0XHRcdFx0aW5wdXQucmVhc29uID0gaW5wdXQucmVhc29uLnJlcGxhY2UoL1xccj9cXG4vZywgJ1xcbio6Jyk7IC8vIGluZGVudCBuZXdsaW5lc1xuXHRcdFx0XHRjb21tZW50ICs9IGAqICR7aW5wdXQucmVhc29ufVxcbmA7XG5cdFx0XHRcdGNvbW1lbnQgPSBjb21tZW50LnRyaW0oKTtcblx0XHRcdFx0Y29tbWVudCA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihjb21tZW50KTtcblx0XHRcdFx0cmVhc29uICs9IGAke2NvbW1lbnR9XFxuKiDmj5DmiqXkurrvvJp+fmAuY29uY2F0KCd+flxcbiog5aSE55CG77yaJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gUmVwb3J0IGluYXBwcm9wcmlhdGUgdXNlcm5hbWVcblx0XHRcdGNhc2UgJ3VzZXJuYW1lJzoge1xuXHRcdFx0XHRsZXQgdHlwZXMgPSBpbnB1dC5hcnZ0eXBlLm1hcChNb3JlYml0cy5zdHJpbmcudG9Mb3dlckNhc2VGaXJzdENoYXIpO1xuXHRcdFx0XHRjb25zdCBoYXNTaGFyZWQgPSB0eXBlcy5pbmNsdWRlcygnc2hhcmVkJyk7XG5cdFx0XHRcdGlmIChoYXNTaGFyZWQpIHtcblx0XHRcdFx0XHR0eXBlcy5zcGxpY2UodHlwZXMuaW5kZXhPZignc2hhcmVkJyksIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0eXBlcy5pbmNsdWRlcygn5L6u6L6x5oCnJykgJiZcblx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muS4pemHjeeahOS+rui+seaAp+eUqOaIt+WQjeWSjOmSiOWvueeJueWumuS4quS6uueahOS+rui+seaAp+eUqOaIt+WQjeS4jeW6lOWcqOWFrOW8gOmhtemdouaKpeWRiu+8jOiAjOaYr+W6lOW9k+engeS4i+iBlOezu+ebkeedo+WRmOWkhOeQhuOAguaYr+WQpue7p+e7re+8nycsXG5cdFx0XHRcdFx0XHRcdCforablkYrvvJrlmrTph43nmoTkvq7ovrHmgKfkvb/nlKjogIXlkI3nqLHlkozph53lsI3nibnlrprlgIvkurrnmoTkvq7ovrHmgKfkvb/nlKjogIXlkI3nqLHkuI3mh4nlnKjlhazplovpoIHpnaLloLHlkYrvvIzogIzmmK/mh4nnlbbnp4HkuIvoga/ntaHnm6PnnaPlk6HomZXnkIbjgILmmK/lkKbnubznuozvvJ8nXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHR5cGVzLmxlbmd0aCA8PSAyKSB7XG5cdFx0XHRcdFx0dHlwZXMgPSB0eXBlcy5qb2luKCflkownKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0eXBlcyA9IFt0eXBlcy5zbGljZSgwLCAtMSkuam9pbign44CBJyksIHR5cGVzLnNsaWNlKC0xKV0uam9pbign5ZKMJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29tbWVudCArPSBgKnt7dXNlci11YWF8MT0ke3VpZH1gO1xuXHRcdFx0XHRpZiAoaW5wdXQuaGlkZW5hbWUpIHtcblx0XHRcdFx0XHRjb21tZW50ICs9ICd8aGlkZW5hbWU9MSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29tbWVudCArPSAnfX0gJm5kYXNoOyAnO1xuXHRcdFx0XHRpZiAodHlwZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSB0eXBlcyArIHdpbmRvdy53Z1VMUygn55So5oi35ZCNJywgJ+S9v+eUqOiAheWQjeeosScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlcy5sZW5ndGggJiYgaGFzU2hhcmVkKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSAn77yMJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGFzU2hhcmVkKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSB3aW5kb3cud2dVTFMoJ+aal+ekuuivpei0puWPt+W5tumdnueUseS4gOS6uuaLpeaciScsICfmmpfnpLroqbLos6zomZ/kuKbpnZ7nlLHkuIDkurrmk4HmnIknKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZXMubGVuZ3RoIHx8IGhhc1NoYXJlZCkge1xuXHRcdFx0XHRcdGNvbW1lbnQgKz0gJ+OAgic7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlucHV0LnJlYXNvbikge1xuXHRcdFx0XHRcdGNvbW1lbnQgKz0gTW9yZWJpdHMuc3RyaW5nLnRvVXBwZXJDYXNlRmlyc3RDaGFyKGlucHV0LnJlYXNvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29tbWVudCA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihjb21tZW50KTtcblx0XHRcdFx0Y29tbWVudCArPSAnLS1+ficuY29uY2F0KCd+ficpO1xuXHRcdFx0XHRjb21tZW50ID0gY29tbWVudC5yZXBsYWNlKC9cXHI/XFxuL2csICdcXG4qOicpOyAvLyBpbmRlbnQgbmV3bGluZXNcblx0XHRcdFx0cmVhc29uID0gYD09IOS4jeW9k+eUqOaIt+WQjeaKpeWRiu+8iCR7XG5cdFx0XHRcdFx0aW5wdXQuaGlkZW5hbWUgPyB3aW5kb3cud2dVTFMoJ+W3sumakOiXj+eUqOaIt+WQjScsICflt7LpmrHol4/kvb/nlKjogIXlkI3nqLEnKSA6IHVpZFxuXHRcdFx0XHR977yJID09XFxuYDtcblx0XHRcdFx0cmVhc29uICs9IGNvbW1lbnQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTElCOlNQSVxuXHRcdFx0Y2FzZSAnc3BpJzoge1xuXHRcdFx0XHRpZiAoIWlucHV0LnJlYXNvbikge1xuXHRcdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ivt+i+k+WFpeivgeaNruOAgicsICfoq4vovLjlhaXorYnmk5rjgIInKSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHNvY2twdXBwZXRzID0gTW9yZWJpdHMuYXJyYXkudW5pcShcblx0XHRcdFx0XHRbLi4uJCgnaW5wdXQ6dGV4dFtuYW1lPXNvY2twdXBwZXRdJywgZm9ybSldLm1hcCgobykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuICQobykudmFsKCkudHJpbSgpIHx8IG51bGw7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCFzb2NrcHVwcGV0c1swXSkge1xuXHRcdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOayoeacieaMh+WumuS7u+S9leWCgOWEoeOAgicsICfmgqjmspLmnInmjIflrprku7vkvZXlgoDlhKHjgIInKSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbW1lbnQgKz0gJ3t7Jy5jb25jYXQoJ3N1YnN0OicsICdTUEkgcmVwb3J0fCcpO1xuXHRcdFx0XHRpZiAoIXNvY2twdXBwZXRzLmluY2x1ZGVzKGlucHV0LnNvY2ttYXN0ZXIpKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSAnMT17eycuY29uY2F0KFxuXHRcdFx0XHRcdFx0J3N1YnN0OicsXG5cdFx0XHRcdFx0XHQnI2lmZXhpc3Q6e3snLFxuXHRcdFx0XHRcdFx0J3N1YnN0OicsXG5cdFx0XHRcdFx0XHRgRlVMTFBBR0VOQU1FfX18fCR7aW5wdXQuc29ja21hc3Rlcn19fXxgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb21tZW50ICs9IGAke3NvY2twdXBwZXRzXG5cdFx0XHRcdFx0Lm1hcCgoc29jaywgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBgJHtpbmRleCArIDJ9PSR7c29ja31gO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oJ3wnKX1cXG58ZXZpZGVuY2U9JHtNb3JlYml0cy5zdHJpbmcuYXBwZW5kUHVuY3R1YXRpb24oaW5wdXQucmVhc29uKX1cXG5gO1xuXHRcdFx0XHRpZiAoaW5wdXQuY2hlY2t1c2VyKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSAnfGNoZWNrdXNlcj15ZXMnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbW1lbnQgKz0gJ319Jztcblx0XHRcdFx0cmVhc29uID0gY29tbWVudDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlcG9ydCB1c2VyIGZvciB2YW5kYWxpc21cblx0XHRcdC8qIGNhc2UgJ2Fpdic6ICovXG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdGlmICghaW5wdXQuYXJ2dHlwZS5sZW5ndGggJiYgaW5wdXQucmVhc29uID09PSAnJykge1xuXHRcdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOW/hemhu+aMh+WumueQhueUsScsICfmgqjlv4XpoIjmjIflrprnkIbnlLEnKSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlYXNvbiArPSBgPT0gJHtpbnB1dC5oaWRlbmFtZSA/IHdpbmRvdy53Z1VMUygn5bey6ZqQ6JeP55So5oi35ZCNJywgJ+W3sumaseiXj+S9v+eUqOiAheWQjeeosScpIDogdWlkfSA9PVxcbmA7XG5cdFx0XHRcdHJlYXNvbiArPSBgKiAnJyd7e3ZhbmRhbHwkey9bPV0vLnRlc3QodWlkKSA/ICcxPScgOiAnJ30ke3VpZH1gO1xuXHRcdFx0XHRpZiAoaW5wdXQuaGlkZW5hbWUpIHtcblx0XHRcdFx0XHRyZWFzb24gKz0gJ3xoaWRlbmFtZT0xJztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZWFzb24gKz0gXCJ9fScnJ1xcblwiO1xuXHRcdFx0XHRjb25zdCB0eXBlcyA9IGlucHV0LmFydnR5cGVcblx0XHRcdFx0XHQubWFwKCh2KSA9PiB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHYpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAnZmluYWwnOlxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAn5bey5Y+R5Ye65pyA5ZCO6K2m5ZGKJztcblx0XHRcdFx0XHRcdFx0Y2FzZSAncG9zdGJsb2NrJzpcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gJ+Wwgeemgei/h+acn+WQjumaj+WNs+egtOWdjyc7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3NwYW1ib3QnOlxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAn5pi+6ICM5piT6KeB55qEc3BhbWJvdOaIluWkseeqg+i0puWPtyc7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3ZhbmRhbG9ubHknOlxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAn5pi+6ICM5piT6KeB55qE57qv56C05Z2P55So5oi3Jztcblx0XHRcdFx0XHRcdFx0Y2FzZSAncHJvbW9vbmx5Jzpcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gJ+S7heeUqOadpeaVo+WPkeW5v+WRiuWuo+S8oOeahOeUqOaItyc7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuICfmnKrnn6XnkIbnlLEnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oJ++8jCcpO1xuXHRcdFx0XHRpZiAoaW5wdXQucGFnZSAhPT0gJycpIHtcblx0XHRcdFx0XHRwYWdlID0gY2hlY2tUaXRsZShpbnB1dC5wYWdlLCB0cnVlKTtcblx0XHRcdFx0XHRpZiAoIXBhZ2UpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29tbWVudCArPSBgKiB7e3BhZ2VsaW5rc3wke1xuXHRcdFx0XHRcdFx0cGFnZS5nZXRQcmVmaXhlZFRleHQoKS5pbmNsdWRlcygnPScpID8gJzE9JyA6ICcnXG5cdFx0XHRcdFx0fSR7cGFnZS5nZXRQcmVmaXhlZFRleHQoKX19fWA7XG5cdFx0XHRcdFx0aWYgKGlucHV0LmJhZGlkKSB7XG5cdFx0XHRcdFx0XHRjb21tZW50ICs9IGDvvIh7e2RpZmZ8JHtwYWdlLmdldFByZWZpeGVkVGV4dCgpfXwke2lucHV0LmJhZGlkfXwke2lucHV0Lmdvb2RpZCA/PyAnJ318ZGlmZn1977yJYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29tbWVudCArPSAnXFxuJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZXMpIHtcblx0XHRcdFx0XHRjb21tZW50ICs9IGAqICR7dHlwZXN9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5wdXQucmVhc29uICE9PSAnJykge1xuXHRcdFx0XHRcdGlucHV0LnJlYXNvbiA9IGlucHV0LnJlYXNvbi5yZXBsYWNlKC9cXG5cXG4rL2csICdcXG4nKTtcblx0XHRcdFx0XHRpbnB1dC5yZWFzb24gPSBpbnB1dC5yZWFzb24ucmVwbGFjZSgvXFxyP1xcbi9nLCAnXFxuKjonKTsgLy8gaW5kZW50IG5ld2xpbmVzXG5cdFx0XHRcdFx0Y29tbWVudCArPSAodHlwZXMgPyAn44CCJyA6ICcqICcpICsgaW5wdXQucmVhc29uO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbW1lbnQgPSBjb21tZW50LnRyaW0oKTtcblx0XHRcdFx0Y29tbWVudCA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihjb21tZW50KTtcblx0XHRcdFx0cmVhc29uICs9IGAke2NvbW1lbnR9XFxuKiDlj5HnjrDkurrvvJp+fmAuY29uY2F0KCd+flxcbiog5aSE55CG77yaJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gW3JlYXNvbiwgY29tbWVudF07XG5cdH07XG5cdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLmV2YWx1YXRlID0gKGUpID0+IHtcblx0XHRjb25zdCBmb3JtID0gZS50YXJnZXQ7XG5cdFx0Y29uc3QgaW5wdXQgPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0SW5wdXREYXRhKGZvcm0pO1xuXHRcdGNvbnN0IHt1aWR9ID0gaW5wdXQ7XG5cdFx0bGV0IHJlYXNvbjtcblx0XHRsZXQgc3VtbWFyeTtcblx0XHRzd2l0Y2ggKGlucHV0LmNhdGVnb3J5KSB7XG5cdFx0XHQvLyBSZXBvcnQgM1JSXG5cdFx0XHRjYXNlICdld2lwJzoge1xuXHRcdFx0XHRyZWFzb24gPSBUd2lua2xlLmFydi5jYWxsYmFjay5nZXRSZXBvcnRXaWtpdGV4dChmb3JtKTtcblx0XHRcdFx0aWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnkgPSBgJHt3aW5kb3cud2dVTFMoJ+aKpeWRiicsICfloLHlkYonKX1bW1NwZWNpYWw6Q29udHJpYnMvJHt1aWR9fCR7dWlkfV1dYDtcblx0XHRcdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gJ0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadvyc7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUygn5oql5ZGK5a6M5oiQJywgJ+WgseWRiuWujOaIkCcpO1xuXHRcdFx0XHRjb25zdCBld2lwUGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0J0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadvycsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCflpITnkIZFV0lQ6K+35rGCJywgJ+iZleeQhkVXSVDoq4vmsYInKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRld2lwUGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlKTtcblx0XHRcdFx0ZXdpcFBhZ2UubG9hZCgoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGV3aXBQYWdlLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3QgJGV3aXBMaW5rID0gJzxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpFV0lQXCI+TElCOkVXSVA8L2E+Jztcblx0XHRcdFx0XHQvLyBjaGVjayBpZiB1c2VyIGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWRcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0XHRgPT09XFxcXHMqXFxcXHtcXFxce1xcXFxzKig/OltWdl1hbmRhbClcXFxccypcXFxcfFxcXFxzKig/OjE9KT9cXFxccyoke01vcmViaXRzLnN0cmluZy5lc2NhcGVSZWdFeHAoXG5cdFx0XHRcdFx0XHRcdFx0dWlkXG5cdFx0XHRcdFx0XHRcdCl9XFxcXHMqXFxcXH1cXFxcfVxcXFxzKj09PWBcblx0XHRcdFx0XHRcdCkudGVzdCh0ZXh0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0ZXdpcFBhZ2Vcblx0XHRcdFx0XHRcdFx0LmdldFN0YXR1c0VsZW1lbnQoKVxuXHRcdFx0XHRcdFx0XHQuZXJyb3Iod2luZG93LndnVUxTKCfmiqXlkYrlt7LlrZjlnKjvvIzlsIbkuI3kvJrliqDlhaXmlrDnmoQnLCAn5aCx5ZGK5bey5a2Y5Zyo77yM5bCH5LiN5pyD5Yqg5YWl5paw55qEJykpO1xuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLnByaW50VXNlclRleHQoXG5cdFx0XHRcdFx0XHRcdHJlYXNvblsxXSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjovpPlhaXnmoTor4Torrrlt7LlnKjkuIvmlrnmj5DkvpvvvIzmgqjlj6/ku6XlsIblhbbliqDlhaXliLAnLFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjovLjlhaXnmoToqZXoq5blt7LlnKjkuIvmlrnmj5DkvpvvvIzmgqjlj6/ku6XlsIflhbbliqDlhaXliLAnXG5cdFx0XHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0XHRcdCRld2lwTGluayArXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCflt7LlrZjlnKjnmoTlsI/oioLkuK3vvJonLCAn5bey5a2Y5Zyo55qE5bCP56+A5Lit77yaJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGV3aXBQYWdlLnNldFBhZ2VTZWN0aW9uKDApO1xuXHRcdFx0XHRcdGV3aXBQYWdlLmdldFN0YXR1c0VsZW1lbnQoKS5zdGF0dXMod2luZG93LndnVUxTKCfliqDlhaXmlrDmiqXlkYrigKYnLCAn5Yqg5YWl5paw5aCx5ZGK4oCmJykpO1xuXHRcdFx0XHRcdGV3aXBQYWdlLnNldEVkaXRTdW1tYXJ5KHN1bW1hcnkpO1xuXHRcdFx0XHRcdGV3aXBQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHRld2lwUGFnZS5zZXRBcHBlbmRUZXh0KGBcXG4ke3JlYXNvblswXX1gKTtcblx0XHRcdFx0XHRld2lwUGFnZS5hcHBlbmQoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gUmVwb3J0IGluYXBwcm9wcmlhdGUgdXNlcm5hbWVcblx0XHRcdGNhc2UgJ3VzZXJuYW1lJzoge1xuXHRcdFx0XHRyZWFzb24gPSBUd2lua2xlLmFydi5jYWxsYmFjay5nZXRSZXBvcnRXaWtpdGV4dChmb3JtKTtcblx0XHRcdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gJ0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadvyc7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUygn5oql5ZGK5a6M5oiQJywgJ+WgseWRiuWujOaIkCcpO1xuXHRcdFx0XHRjb25zdCB1YWFQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHQnTElCX3RhbGs6566h55CG5ZGY5ZGK56S65p2/Jyxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WkhOeQhlVBQeivt+axgicsICfomZXnkIZVQUHoq4vmsYInKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR1YWFQYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdFx0XHR1YWFQYWdlLmxvYWQoKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRleHQgPSB1YWFQYWdlLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdXNlciBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHRcdFx0YFxcXFx7XFxcXHtcXFxccyp1c2VyLXVhYVxcXFxzKlxcXFx8XFxcXHMqKDFcXFxccyo9XFxcXHMqKT8ke01vcmViaXRzLnN0cmluZy5lc2NhcGVSZWdFeHAoXG5cdFx0XHRcdFx0XHRcdFx0dWlkXG5cdFx0XHRcdFx0XHRcdCl9XFxcXHMqKFxcXFx8fFxcXFx9KWBcblx0XHRcdFx0XHRcdCkudGVzdCh0ZXh0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0dWFhUGFnZS5nZXRTdGF0dXNFbGVtZW50KCkuZXJyb3Iod2luZG93LndnVUxTKCfnlKjmiLflt7LooqvliJflhaXjgIInLCAn5L2/55So6ICF5bey6KKr5YiX5YWl44CCJykpO1xuXHRcdFx0XHRcdFx0Y29uc3QgJHVhYUxpbmsgPSAnPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlVBQVwiPkxJQjpVQUE8L2E+Jztcblx0XHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5wcmludFVzZXJUZXh0KFxuXHRcdFx0XHRcdFx0XHRyZWFzb25bMV0sXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5oKo6L6T5YWl55qE6K+E6K665bey5Zyo5LiL5pa55o+Q5L6b77yM5oKo5Y+v5Lul5bCG5YW25omL5bel5Yqg5YWlJyxcblx0XHRcdFx0XHRcdFx0XHQn5oKo6Ly45YWl55qE6KmV6KuW5bey5Zyo5LiL5pa55o+Q5L6b77yM5oKo5Y+v5Lul5bCH5YW25omL5bel5Yqg5YWlJ1xuXHRcdFx0XHRcdFx0XHQpICtcblx0XHRcdFx0XHRcdFx0XHQkdWFhTGluayArXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuIror6XnlKjmiLfnmoTmiqXlkYrkuK3vvJonLCAn5LiK6Kmy5L2/55So6ICF55qE5aCx5ZGK5Lit77yaJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHVhYVBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLnN0YXR1cyh3aW5kb3cud2dVTFMoJ+WKoOWFpeaWsOaKpeWRiuKApicsICfliqDlhaXmlrDloLHlkYrigKYnKSk7XG5cdFx0XHRcdFx0dWFhUGFnZS5zZXRFZGl0U3VtbWFyeSh3aW5kb3cud2dVTFMoJ+aWsOaPkOaKpScsICfmlrDmj5DloLEnKSk7XG5cdFx0XHRcdFx0dWFhUGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0dWFhUGFnZS5zZXRBcHBlbmRUZXh0KGBcXG5cXG4ke3JlYXNvblswXX1gKTtcblx0XHRcdFx0XHR1YWFQYWdlLmFwcGVuZCgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyBMSUI6U1BJXG5cdFx0XHRjYXNlICdzcGknOiB7XG5cdFx0XHRcdHJlYXNvbiA9IFR3aW5rbGUuYXJ2LmNhbGxiYWNrLmdldFJlcG9ydFdpa2l0ZXh0KGZvcm0pO1xuXHRcdFx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRcdFx0Y29uc3QgcmVwb3J0cGFnZSA9ICdMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb8nO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHJlcG9ydHBhZ2U7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUygn5oql5ZGK5a6M5oiQJywgJ+WgseWRiuWujOaIkCcpO1xuXHRcdFx0XHRjb25zdCBzcGlQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShyZXBvcnRwYWdlLCB3aW5kb3cud2dVTFMoJ+aKk+WPluiuqOiuuumhtemdoicsICfmipPlj5boqI7oq5bpoIHpnaInKSk7XG5cdFx0XHRcdHNwaVBhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdHNwaVBhZ2Uuc2V0RWRpdFN1bW1hcnkod2luZG93LndnVUxTKCfliqDlhaXmlrDmj5DmiqUnLCAn5Yqg5YWl5paw5o+Q5aCxJykpO1xuXHRcdFx0XHRzcGlQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0c3BpUGFnZS5zZXRBcHBlbmRUZXh0KHJlYXNvblswXSk7XG5cdFx0XHRcdHNwaVBhZ2Uuc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZignc3BpV2F0Y2hSZXBvcnQnKSk7XG5cdFx0XHRcdHNwaVBhZ2UuYXBwZW5kKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXBvcnQgdXNlciBmb3IgdmFuZGFsaXNtXG5cdFx0XHQvKiBjYXNlICdhaXYnOiAqL1xuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRyZWFzb24gPSBUd2lua2xlLmFydi5jYWxsYmFjay5nZXRSZXBvcnRXaWtpdGV4dChmb3JtKTtcblx0XHRcdFx0aWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnkgPSBgJHt3aW5kb3cud2dVTFMoJ+aKpeWRiicsICfloLHlkYonKX1bW1NwZWNpYWw6Q29udHJpYnMvJHt1aWR9fCR7dWlkfV1dYDtcblx0XHRcdFx0aWYgKGlucHV0LmhpZGVuYW1lKSB7XG5cdFx0XHRcdFx0c3VtbWFyeSA9IHdpbmRvdy53Z1VMUygn5oql5ZGK5LiA5ZCN55So5oi3JywgJ+WgseWRiuS4gOWQjeS9v+eUqOiAhScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGZvcm0pO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9ICdMSUJfdGFsazrmiqXlkYrlvZPliY3noLTlnY8nO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+aKpeWRiuWujOaIkCcsICfloLHlkYrlrozmiJAnKTtcblx0XHRcdFx0Y29uc3QgYWl2UGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0J0xJQl90YWxrOuaKpeWRiuW9k+WJjeegtOWdjycsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCflpITnkIZWSVDor7fmsYInLCAn6JmV55CGVklQ6KuL5rGCJylcblx0XHRcdFx0KTtcblx0XHRcdFx0YWl2UGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlKTtcblx0XHRcdFx0YWl2UGFnZS5sb2FkKCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCB0ZXh0ID0gYWl2UGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRcdGNvbnN0ICRhaXZMaW5rID0gJzxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpWSVBcIj5MSUI6VklQPC9hPic7XG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdXNlciBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHRcdFx0YD09PVxcXFxzKlxcXFx7XFxcXHtcXFxccyooPzpbVnZdYW5kYWwpXFxcXHMqXFxcXHxcXFxccyooPzoxPSk/XFxcXHMqJHtNb3JlYml0cy5zdHJpbmcuZXNjYXBlUmVnRXhwKFxuXHRcdFx0XHRcdFx0XHRcdHVpZFxuXHRcdFx0XHRcdFx0XHQpfVxcXFxzKlxcXFx9XFxcXH1cXFxccyo9PT1gXG5cdFx0XHRcdFx0XHQpLnRlc3QodGV4dClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGFpdlBhZ2Vcblx0XHRcdFx0XHRcdFx0LmdldFN0YXR1c0VsZW1lbnQoKVxuXHRcdFx0XHRcdFx0XHQuZXJyb3Iod2luZG93LndnVUxTKCfmiqXlkYrlt7LlrZjlnKjvvIzlsIbkuI3kvJrliqDlhaXmlrDnmoQnLCAn5aCx5ZGK5bey5a2Y5Zyo77yM5bCH5LiN5pyD5Yqg5YWl5paw55qEJykpO1xuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLnByaW50VXNlclRleHQoXG5cdFx0XHRcdFx0XHRcdHJlYXNvblsxXSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjovpPlhaXnmoTor4Torrrlt7LlnKjkuIvmlrnmj5DkvpvvvIzmgqjlj6/ku6XlsIblhbbliqDlhaXliLAnLFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjovLjlhaXnmoToqZXoq5blt7LlnKjkuIvmlrnmj5DkvpvvvIzmgqjlj6/ku6XlsIflhbbliqDlhaXliLAnXG5cdFx0XHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0XHRcdCRhaXZMaW5rICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+W3suWtmOWcqOeahOWwj+iKguS4re+8micsICflt7LlrZjlnKjnmoTlsI/nr4DkuK3vvJonKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YWl2UGFnZS5zZXRQYWdlU2VjdGlvbigwKTtcblx0XHRcdFx0XHRhaXZQYWdlLmdldFN0YXR1c0VsZW1lbnQoKS5zdGF0dXMod2luZG93LndnVUxTKCfliqDlhaXmlrDmiqXlkYrigKYnLCAn5Yqg5YWl5paw5aCx5ZGK4oCmJykpO1xuXHRcdFx0XHRcdGFpdlBhZ2Uuc2V0RWRpdFN1bW1hcnkoc3VtbWFyeSk7XG5cdFx0XHRcdFx0YWl2UGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0YWl2UGFnZS5zZXRBcHBlbmRUZXh0KGBcXG4ke3JlYXNvblswXX1gKTtcblx0XHRcdFx0XHRhaXZQYWdlLmFwcGVuZCgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmFydiwgJ2FydicpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZXdhcm4uanMgKi9cbihmdW5jdGlvbiB0d2lua2xld2FybigkKSB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHQvKipcblx0ICogdHdpbmtsZXdhcm4uanM6IFdhcm4gbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIChcIldhcm5cIilcblx0ICogQWN0aXZlIG9uOiBBbnkgcGFnZSB3aXRoIHJlbGV2YW50IHVzZXIgbmFtZSAodXNlcnNwYWNlLCBjb250cmlicyxcblx0ICogZXRjLiksIGFzIHdlbGwgYXMgdGhlIHJvbGxiYWNrIHN1Y2Nlc3MgcGFnZVxuXHQgKi9cblx0Y29uc3QgcmVsZXZhbnRVc2VyTmFtZSA9IG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpO1xuXHRUd2lua2xlLndhcm4gPSAoKSA9PiB7XG5cdFx0aWYgKHJlbGV2YW50VXNlck5hbWUpIHtcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdFR3aW5rbGUud2Fybi5jYWxsYmFjayxcblx0XHRcdFx0J+itpuWRiicsXG5cdFx0XHRcdCd0dy13YXJuJyxcblx0XHRcdFx0d2luZG93LndnVUxTKCforablkYrmiJbmj5DphpLnlKjmiLcnLCAn6K2m5ZGK5oiW5o+Q6YaS5L2/55So6ICFJylcblx0XHRcdCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZignYXV0b01lbnVBZnRlclJvbGxiYWNrJykgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMyAmJlxuXHRcdFx0XHRtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGUnKSAmJlxuXHRcdFx0XHQhbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdub2F1dG93YXJuJylcblx0XHRcdCkge1xuXHRcdFx0XHRUd2lua2xlLndhcm4uY2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gTW9kaWZ5IFVSTCBvZiB0YWxrIHBhZ2Ugb24gcm9sbGJhY2sgc3VjY2VzcyBwYWdlcywgbWFrZXMgdXNlIG9mIGFcblx0XHQvLyBjdXN0b20gbWVzc2FnZSBib3ggaW4gW1tNZWRpYVdpa2k6Um9sbGJhY2stc3VjY2Vzc11dXG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgPT09ICdyb2xsYmFjaycpIHtcblx0XHRcdGNvbnN0ICR2YW5kYWxUYWxrTGluayA9ICRib2R5LmZpbmQoJyNtdy1yb2xsYmFjay1zdWNjZXNzJykuZmluZCgnLm13LXVzZXJ0b29sbGlua3MgYScpLmZpcnN0KCk7XG5cdFx0XHRpZiAoJHZhbmRhbFRhbGtMaW5rLmxlbmd0aCkge1xuXHRcdFx0XHRUd2lua2xlLndhcm4ubWFrZVZhbmRhbFRhbGtMaW5rKCR2YW5kYWxUYWxrTGluaywgTW9yZWJpdHMucGFnZU5hbWVOb3JtKTtcblx0XHRcdFx0JHZhbmRhbFRhbGtMaW5rLmNzcygnZm9udC13ZWlnaHQnLCAnYm9sZCcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnQWJ1c2VMb2cnICYmXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0FidXNlRmlsdGVyVmFyaWFibGVzJykgIT09IG51bGxcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFmVGFsa0xpbmsgPSAkYm9keS5maW5kKCcubXctdXNlcnRvb2xsaW5rcy10YWxrJykuZmlyc3QoKTtcblx0XHRcdGlmIChhZlRhbGtMaW5rLmxlbmd0aCkge1xuXHRcdFx0XHRUd2lua2xlLndhcm4ubWFrZVZhbmRhbFRhbGtMaW5rKGFmVGFsa0xpbmssIG13LmNvbmZpZy5nZXQoJ3dnQWJ1c2VGaWx0ZXJWYXJpYWJsZXMnKS5wYWdlX3ByZWZpeGVkdGl0bGUpO1xuXHRcdFx0XHRhZlRhbGtMaW5rLmNzcygnZm9udC13ZWlnaHQnLCAnYm9sZCcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0VHdpbmtsZS53YXJuLm1ha2VWYW5kYWxUYWxrTGluayA9ICgkdmFuZGFsVGFsa0xpbmssIHBhZ2VuYW1lKSA9PiB7XG5cdFx0JHZhbmRhbFRhbGtMaW5rLndyYXBJbm5lcihcblx0XHRcdCQoJzxzcGFuPicpLmF0dHIoXG5cdFx0XHRcdCd0aXRsZScsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5aaC5p6c5ZCI6YCC77yM5oKo5Y+v5Lul55SoVHdpbmtsZeWcqOivpeeUqOaIt+iuqOiuuumhteS4iuWBmuWHuuitpuWRiuOAgicsXG5cdFx0XHRcdFx0J+WmguaenOWQiOmBqe+8jOaCqOWPr+S7peeUqFR3aW5rbGXlnKjoqbLkvb/nlKjogIXoqI7oq5bpoIHkuIrlgZrlh7rorablkYrjgIInXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpO1xuXHRcdGNvbnN0IGV4dHJhUGFyYW0gPSBgdmFuYXJ0aWNsZT0ke213LnV0aWwucmF3dXJsZW5jb2RlKHBhZ2VuYW1lKX1gO1xuXHRcdGNvbnN0IGhyZWYgPSAkdmFuZGFsVGFsa0xpbmsuYXR0cignaHJlZicpO1xuXHRcdGlmIChocmVmLmluY2x1ZGVzKCc/JykpIHtcblx0XHRcdCR2YW5kYWxUYWxrTGluay5hdHRyKCdocmVmJywgYCR7aHJlZn0mJHtleHRyYVBhcmFtfWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkdmFuZGFsVGFsa0xpbmsuYXR0cignaHJlZicsIGAke2hyZWZ9PyR7ZXh0cmFQYXJhbX1gKTtcblx0XHR9XG5cdH07XG5cdC8vIFVzZWQgdG8gY2xvc2Ugd2luZG93IHdoZW4gc3dpdGNoaW5nIHRvIEFSViBpbiBhdXRvbGV2ZWxcblx0VHdpbmtsZS53YXJuLmRpYWxvZyA9IG51bGw7XG5cdFR3aW5rbGUud2Fybi5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRyZWxldmFudFVzZXJOYW1lID09PSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgJiZcblx0XHRcdCFjb25maXJtKHdpbmRvdy53Z1VMUygn5oKo5bCG6KaB6K2m5ZGK6Ieq5bex77yB5oKo56Gu5a6a6KaB57un57ut5ZCX77yfJywgJ+aCqOWwh+imgeitpuWRiuiHquW3se+8geaCqOeiuuWumuimgee5vOe6jOWXju+8nycpKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRUd2lua2xlLndhcm4uZGlhbG9nID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MDAsIDQ0MCk7XG5cdFx0Y29uc3Qge2RpYWxvZ30gPSBUd2lua2xlLndhcm47XG5cdFx0ZGlhbG9nLnNldFRpdGxlKHdpbmRvdy53Z1VMUygn6K2m5ZGK44CB5o+Q6YaS55So5oi3JywgJ+itpuWRiuOAgeaPkOmGkuS9v+eUqOiAhScpKTtcblx0XHRkaWFsb2cuc2V0U2NyaXB0TmFtZSgnVHdpbmtsZScpO1xuXHRcdGRpYWxvZy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn6K2m5ZGK6K6+572uJywgJ+itpuWRiuioreWumicpLCAnSDpUVy9QUkVGI3dhcm4nKTtcblx0XHRkaWFsb2cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0Mjd2FybicpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUud2Fybi5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0Y29uc3QgbWFpbl9zZWxlY3QgPSBmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCJ5oup6KaB5Y+R6YCB55qE6K2m5ZGK5oiW5o+Q6YaS57G75Z6LJywgJ+mBuOaTh+imgeWCs+mAgeeahOitpuWRiuaIluaPkOmGkumhnuWIpScpLFxuXHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfpppblhYjpgInmi6nkuIDnu4TvvIzlho3pgInmi6nlhbfkvZPnmoTorablkYrmqKHmnb/jgIInLCAn6aaW5YWI6YG45pOH5LiA57WE77yM5YaN6YG45pOH5YW36auU55qE6K2m5ZGK5qih5p2/44CCJyksXG5cdFx0fSk7XG5cdFx0Y29uc3QgbWFpbl9ncm91cCA9IG1haW5fc2VsZWN0LmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdG5hbWU6ICdtYWluX2dyb3VwJyxcblx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+aCqOWPr+WcqFR3aW5rbGXlj4LmlbDorr7nva7kuK3orr7nva7pu5jorqTpgInmi6nnmoTpgInpobknLFxuXHRcdFx0XHQn5oKo5Y+v5ZyoVHdpbmtsZeWBj+WlveioreWumuS4reioreWumumgkOioremBuOaTh+eahOmBuOmghSdcblx0XHRcdCksXG5cdFx0XHRldmVudDogVHdpbmtsZS53YXJuLmNhbGxiYWNrLmNoYW5nZV9jYXRlZ29yeSxcblx0XHR9KTtcblx0XHRjb25zdCBkZWZhdWx0R3JvdXAgPSBOdW1iZXIucGFyc2VJbnQoVHdpbmtsZS5nZXRQcmVmKCdkZWZhdWx0V2FybmluZ0dyb3VwJyksIDYpO1xuXHRcdG1haW5fZ3JvdXAuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5Yqo6YCJ5oup5bGC57qnJywgJ+iHquWLlemBuOaTh+WxpOe0micpLFxuXHRcdFx0dmFsdWU6ICdhdXRvbGV2ZWwnLFxuXHRcdFx0c2VsZWN0ZWQ6IGRlZmF1bHRHcm91cCA9PT0gNyxcblx0XHR9KTtcblx0XHRtYWluX2dyb3VwLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdGxhYmVsOiAnMe+8muaPkOmGkicsXG5cdFx0XHR2YWx1ZTogJ2xldmVsMScsXG5cdFx0XHRzZWxlY3RlZDogZGVmYXVsdEdyb3VwID09PSAxLFxuXHRcdH0pO1xuXHRcdG1haW5fZ3JvdXAuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0bGFiZWw6ICcy77ya6K2m5ZGKJyxcblx0XHRcdHZhbHVlOiAnbGV2ZWwyJyxcblx0XHRcdHNlbGVjdGVkOiBkZWZhdWx0R3JvdXAgPT09IDIsXG5cdFx0fSk7XG5cdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY29tYmluZWRTaW5nbGV0TWVudXMnKSkge1xuXHRcdFx0bWFpbl9ncm91cC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y2V5bGC57qn5raI5oGvJywgJ+WWruWxpOe0muioiuaBrycpLFxuXHRcdFx0XHR2YWx1ZTogJ3NpbmdsZWNvbWJpbmVkJyxcblx0XHRcdFx0c2VsZWN0ZWQ6IGRlZmF1bHRHcm91cCA9PT0gMyB8fCBkZWZhdWx0R3JvdXAgPT09IDQsXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWFpbl9ncm91cC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y2V5bGC57qn5o+Q6YaSJywgJ+WWruWxpOe0muaPkOmGkicpLFxuXHRcdFx0XHR2YWx1ZTogJ3NpbmdsZW5vdGljZScsXG5cdFx0XHRcdHNlbGVjdGVkOiBkZWZhdWx0R3JvdXAgPT09IDMsXG5cdFx0XHR9KTtcblx0XHRcdG1haW5fZ3JvdXAuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WNleWxgue6p+itpuWRiicsICfllq7lsaTntJrorablkYonKSxcblx0XHRcdFx0dmFsdWU6ICdzaW5nbGV3YXJuJyxcblx0XHRcdFx0c2VsZWN0ZWQ6IGRlZmF1bHRHcm91cCA9PT0gNCxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21XYXJuaW5nTGlzdCcpLmxlbmd0aCkge1xuXHRcdFx0bWFpbl9ncm91cC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ6K2m5ZGKJywgJ+iHquioguitpuWRiicpLFxuXHRcdFx0XHR2YWx1ZTogJ2N1c3RvbScsXG5cdFx0XHRcdHNlbGVjdGVkOiBkZWZhdWx0R3JvdXAgPT09IDUsXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0bWFpbl9ncm91cC5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRsYWJlbDogJ+aJgOacieitpuWRiuaooeadvycsXG5cdFx0XHR2YWx1ZTogJ2tpdGNoZW5zaW5rJyxcblx0XHRcdHNlbGVjdGVkOiBkZWZhdWx0R3JvdXAgPT09IDYsXG5cdFx0fSk7XG5cdFx0bWFpbl9zZWxlY3QuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ3N1Yl9ncm91cCcsXG5cdFx0XHRldmVudDogVHdpbmtsZS53YXJuLmNhbGxiYWNrLmNoYW5nZV9zdWJjYXRlZ29yeSxcblx0XHR9KTsgLy8gV2lsbCBiZSBlbXB0eSB0byBiZWdpbiB3aXRoLlxuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRuYW1lOiAnYXJ0aWNsZScsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpobXpnaLpk77mjqUnLCAn6aCB6Z2i6YCj57WQJyksXG5cdFx0XHR2YWx1ZTogbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd2YW5hcnRpY2xlJykgfHwgJycsXG5cdFx0XHRzaXplOiA1MCxcblx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn57uZ5qih5p2/5Lit5Yqg5YWl5LiA6aG16Z2i6ZO+5o6l77yM5Y+v55WZ56m644CCJywgJ+e1puaooeadv+S4reWKoOWFpeS4gOmggemdoumAo+e1kO+8jOWPr+eVmeepuuOAgicpLFxuXHRcdFx0cGxhY2Vob2xkZXI6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+S7hemZkOS4gOS4qu+8jOWLv+S9v+eUqOe9keWdgOOAgVtbIF1d77yM5Y+v5L2/55SoU3BlY2lhbDpEaWZmJyxcblx0XHRcdFx0J+WDhemZkOS4gOWAi++8jOWLv+S9v+eUqOe2suWdgOOAgVtbIF1d77yM5Y+v5L2/55SoU3BlY2lhbDpEaWZmJ1xuXHRcdFx0KSxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdGxhYmVsOiAnJyxcblx0XHRcdHN0eWxlOiAnY29sb3I6ICNmMDAnLFxuXHRcdFx0aWQ6ICd0d2lua2xlLXdhcm4td2FybmluZy1tZXNzYWdlcycsXG5cdFx0fSk7XG5cdFx0Y29uc3QgbW9yZSA9IGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRuYW1lOiAncmVhc29uR3JvdXAnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6K2m5ZGK5L+h5oGvJywgJ+itpuWRiuizh+ioiicpLFxuXHRcdH0pO1xuXHRcdG1vcmUuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICd0ZXh0YXJlYScsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj6/pgInkv6Hmga/vvJonLCAn5Y+v6YG46LOH6KiK77yaJyksXG5cdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn55CG55Sx5oiW5piv6ZmE5Yqg5L+h5oGvJywgJ+eQhueUseaIluaYr+mZhOWKoOizh+ioiicpLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHByZXZpZXdsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdCQocHJldmlld2xpbmspLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFR3aW5rbGUud2Fybi5jYWxsYmFja3MucHJldmlldyhyZXN1bHQpOyAvLyB8cmVzdWx0fCBpcyBkZWZpbmVkIGJlbG93XG5cdFx0fSk7XG5cblx0XHRwcmV2aWV3bGluay5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG5cdFx0cHJldmlld2xpbmsudGV4dENvbnRlbnQgPSB3aW5kb3cud2dVTFMoJ+mihOiniCcsICfpoJDopr0nKTtcblx0XHRtb3JlLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdGlkOiAnd2FybmluZ3ByZXZpZXcnLFxuXHRcdFx0bGFiZWw6IFtwcmV2aWV3bGlua10sXG5cdFx0fSk7XG5cdFx0bW9yZS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRpZDogJ3R3aW5rbGV3YXJuLXByZXZpZXdib3gnLFxuXHRcdFx0c3R5bGU6ICdkaXNwbGF5OiBub25lJyxcblx0XHR9KTtcblx0XHRtb3JlLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdGxhYmVsOiAn5o+Q5LqkJyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdGRpYWxvZy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0ZGlhbG9nLmRpc3BsYXkoKTtcblx0XHRyZXN1bHQubWFpbl9ncm91cC5yb290ID0gcmVzdWx0O1xuXHRcdHJlc3VsdC5wcmV2aWV3ZXIgPSBuZXcgTW9yZWJpdHMud2lraS5wcmV2aWV3KCQocmVzdWx0KS5maW5kKCdkaXYjdHdpbmtsZXdhcm4tcHJldmlld2JveCcpLmxhc3QoKVswXSk7XG5cdFx0Ly8gUG90ZW50aWFsIG5vdGljZXMgZm9yIHN0YWxlbmVzcyBhbmQgbWlzc2VkIHJldmVydHNcblx0XHRsZXQgbWVzc2FnZSA9ICcnO1xuXHRcdGxldCBxdWVyeSA9IHt9O1xuXHRcdGNvbnN0IHZhbnJldmlkID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd2YW5hcnRpY2xlcmV2aWQnKTtcblx0XHRpZiAodmFucmV2aWQpIHtcblx0XHRcdC8vIElmIHlvdSB0cmllZCByZXZlcnRpbmcsIGNoZWNrIGlmICp5b3UqIGFjdHVhbGx5IHJldmVydGVkXG5cdFx0XHRpZiAoIW13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnbm9hdXRvd2FybicpICYmIG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgndmFuYXJ0aWNsZScpKSB7XG5cdFx0XHRcdC8vIFZpYSBmbHVmZiBsaW5rXG5cdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHR0aXRsZXM6IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgndmFuYXJ0aWNsZScpLFxuXHRcdFx0XHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdFx0XHRcdHJ2c3RhcnRpZDogdmFucmV2aWQsXG5cdFx0XHRcdFx0cnZsaW1pdDogMixcblx0XHRcdFx0XHRydmRpcjogJ25ld2VyJyxcblx0XHRcdFx0XHRydnByb3A6ICd1c2VyJyxcblx0XHRcdFx0fTtcblx0XHRcdFx0bmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5qOA5p+l5oKo5piv5ZCm5oiQ5Yqf5Zue6YCA6K+l6aG16Z2iJywgJ+aqouafpeaCqOaYr+WQpuaIkOWKn+WbnumAgOipsumggemdoicpLFxuXHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdChhcGlvYmopID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJldmVydFVzZXIgPSAkKGFwaW9iai5nZXRSZXNwb25zZSgpKS5maW5kKCdyZXZpc2lvbnMgcmV2JylbMV0uZ2V0QXR0cmlidXRlKCd1c2VyJyk7XG5cdFx0XHRcdFx0XHRpZiAocmV2ZXJ0VXNlciAmJiByZXZlcnRVc2VyICE9PSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZSArPSB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WFtuS7luS6uuWbnumAgOS6huivpemhtemdou+8jOW5tuWPr+iDveW3sue7j+itpuWRiuivpeeUqOaIt+OAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+WFtuS7luS6uuWbnumAgOS6huipsumggemdou+8jOS4puWPr+iDveW3sue2k+itpuWRiuipsuS9v+eUqOiAheOAgidcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0JGJvZHkuZmluZCgnI3R3aW5rbGUtd2Fybi13YXJuaW5nLW1lc3NhZ2VzJykudGV4dChg6K2m5ZGK77yaJHttZXNzYWdlfWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBDb25maXJtIGVkaXQgd2Fzbid0IHRvbyBvbGQgZm9yIGEgd2FybmluZ1xuXHRcdFx0Y29uc3QgY2hlY2tTdGFsZSA9ICh2YW50aW1lc3RhbXBfKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJldkRhdGUgPSBuZXcgTW9yZWJpdHMuZGF0ZSh2YW50aW1lc3RhbXBfKTtcblx0XHRcdFx0aWYgKHZhbnRpbWVzdGFtcF8gJiYgcmV2RGF0ZS5pc1ZhbGlkKCkgJiYgcmV2RGF0ZS5hZGQoMjQsICdob3VycycpLmlzQmVmb3JlKG5ldyBEYXRlKCkpKSB7XG5cdFx0XHRcdFx0bWVzc2FnZSArPSB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6L+Z56yU57yW6L6R5piv5ZyoMjTlsI/ml7bliY3lgZrlh7rnmoTvvIznjrDlnKjorablkYrlj6/og73lt7Lov4fml7bjgIInLFxuXHRcdFx0XHRcdFx0J+mAmeethue3qOi8r+aYr+WcqDI05bCP5pmC5YmN5YGa5Ye655qE77yM54++5Zyo6K2m5ZGK5Y+v6IO95bey6YGO5pmC44CCJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0JGJvZHkuZmluZCgnI3R3aW5rbGUtd2Fybi13YXJuaW5nLW1lc3NhZ2VzJykudGV4dChg6K2m5ZGK77yaJHttZXNzYWdlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0bGV0IHZhbnRpbWVzdGFtcCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgndmFudGltZXN0YW1wJyk7XG5cdFx0XHQvLyBQcm92aWRlZCBmcm9tIGEgZmx1ZmYgbW9kdWxlLWJhc2VkIHJldmVydCwgbm8gQVBJIGxvb2t1cCBuZWNlc3Nhcnlcblx0XHRcdGlmICh2YW50aW1lc3RhbXApIHtcblx0XHRcdFx0Y2hlY2tTdGFsZSh2YW50aW1lc3RhbXApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cXVlcnkgPSB7XG5cdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdFx0XHRcdHJ2cHJvcDogJ3RpbWVzdGFtcCcsXG5cdFx0XHRcdFx0cmV2aWRzOiB2YW5yZXZpZCxcblx0XHRcdFx0fTtcblx0XHRcdFx0bmV3IE1vcmViaXRzLndpa2kuYXBpKHdpbmRvdy53Z1VMUygn6I635Y+W54mI5pys5pe26Ze05oizJywgJ+WPluW+l+eJiOacrOaZgumWk+aIsycpLCBxdWVyeSwgKGFwaW9iaikgPT4ge1xuXHRcdFx0XHRcdHZhbnRpbWVzdGFtcCA9ICQoYXBpb2JqLmdldFJlc3BvbnNlKCkpLmZpbmQoJ3JldmlzaW9ucyByZXYnKS5hdHRyKCd0aW1lc3RhbXAnKTtcblx0XHRcdFx0XHRjaGVja1N0YWxlKHZhbnRpbWVzdGFtcCk7XG5cdFx0XHRcdH0pLnBvc3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgaW5pdCA9ICgpID0+IHtcblx0XHRcdC8vIFdlIG11c3QgaW5pdCB0aGUgZmlyc3QgY2hvaWNlIChHZW5lcmFsIE5vdGUpO1xuXHRcdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRcdHJlc3VsdC5tYWluX2dyb3VwLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHR9O1xuXHRcdGluaXQoKTtcblx0fTtcblx0Ly8gVGhpcyBpcyBhbGwgdGhlIG1lc3NhZ2VzIHRoYXQgbWlnaHQgYmUgZGlzcGF0Y2hlZCBieSB0aGUgY29kZVxuXHQvLyBFYWNoIG9mIHRoZSBpbmRpdmlkdWFsIHRlbXBsYXRlcyByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cdC8vICAgbGFiZWwgKHJlcXVpcmVkKTogQSBzaG9ydCBkZXNjcmlwdGlvbiBkaXNwbGF5ZWQgaW4gdGhlIGRpYWxvZ1xuXHQvLyAgIHN1bW1hcnkgKHJlcXVpcmVkKTogVGhlIGVkaXQgc3VtbWFyeSB1c2VkLiBJZiBhbiBhcnRpY2xlIG5hbWUgaXMgZW50ZXJlZCwgdGhlIHN1bW1hcnkgaXMgcG9zdGZpeGVkIHdpdGggXCJvbiBbW2FydGljbGVdXVwiLCBhbmQgaXQgaXMgYWx3YXlzIHBvc3RmaXhlZCB3aXRoIFwiLiAkc3VtbWFyeUFkXCJcblx0Ly8gICBzdXBwcmVzc0FydGljbGVJblN1bW1hcnkgKG9wdGlvbmFsKTogU2V0IHRvIHRydWUgdG8gc3VwcHJlc3Mgc2hvd2luZyB0aGUgYXJ0aWNsZSBuYW1lIGluIHRoZSBlZGl0IHN1bW1hcnkuIFVzZWZ1bCBpZiB0aGUgd2FybmluZyByZWxhdGVzIHRvIGF0dGFjayBwYWdlcywgb3Igc29tZSBzdWNoLlxuXHRUd2lua2xlLndhcm4ubWVzc2FnZXMgPSB7XG5cdFx0bGV2ZWxzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdGNhdGVnb3J5OiB3aW5kb3cud2dVTFMoJ+S4jeWQjOexu+Wei+eahOmdnuW7uuiuvue8lui+kScsICfkuI3lkIzpoZ7liKXnmoTpnZ7lu7roqK3nt6jovK8nKSxcblx0XHRcdFx0bGlzdDoge1xuXHRcdFx0XHRcdCd1dy1jb3B5cmlnaHQnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L6154qv6JGX5L2c5p2DJywgJ+S+teeKr+eJiOasiicpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS+teeKr+iRl+S9nOadgycsICfms6jmhI/vvJrkvrXniq/niYjmrIonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5aSa5qyh5L6154qv6JGX5L2c5p2DJywgJ+WkmuasoeS+teeKr+eJiOasiicpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muWkmuasoeS+teeKr+iRl+S9nOadgycsICforablkYrvvJrlpJrmrKHkvrXniq/niYjmrIonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctY3J5c3RhbCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXoh4bmtYvmiJbmnKrnoa7orqTnmoTmtojmga8nLCAn5Yqg5YWl6IeG5ris5oiW5pyq56K66KqN55qE6KiK5oGvJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Yqg5YWl6IeG5rWL5oiW5pyq56Gu6K6k55qE5raI5oGvJywgJ+azqOaEj++8muWKoOWFpeiHhua4rOaIluacqueiuuiqjeeahOioiuaBrycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflpJrmrKHliqDlhaXoh4bmtYvmiJbmnKrnoa7orqTnmoTmtojmga8nLCAn5aSa5qyh5Yqg5YWl6IeG5ris5oiW5pyq56K66KqN55qE6KiK5oGvJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5aSa5qyh5Yqg5YWl6IeG5rWL5oiW5pyq56Gu6K6k55qE5raI5oGvJyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5aSa5qyh5Yqg5YWl6IeG5ris5oiW5pyq56K66KqN55qE6KiK5oGvJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1kZWxldGUnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiN5oGw5b2T5Zyw56e76Zmk6aG16Z2i5YaF5a6544CB5qih5p2/5oiW6LWE5paZJywgJ+S4jeaBsOeVtuWcsOenu+mZpOmggemdouWFp+WuueOAgeaooeadv+aIluizh+aWmScpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muS4jeaBsOW9k+WcsOenu+mZpOmhtemdouWGheWuueOAgeaooeadv+aIlui1hOaWmScsXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muS4jeaBsOeVtuWcsOenu+mZpOmggemdouWFp+WuueOAgeaooeadv+aIluizh+aWmSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiN5oGw5b2T5Zyw56e76Zmk6aG16Z2i5YaF5a6544CB5qih5p2/5oiW6LWE5paZJywgJ+S4jeaBsOeVtuWcsOenu+mZpOmggemdouWFp+WuueOAgeaooeadv+aIluizh+aWmScpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muS4jeaBsOW9k+WcsOenu+mZpOmhtemdouWGheWuueOAgeaooeadv+aIlui1hOaWmScsXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muS4jeaBsOeVtuWcsOenu+mZpOmggemdouWFp+WuueOAgeaooeadv+aIluizh+aWmSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctaW1hZ2UnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5Lit5Yqg5YWl5LiN5b2T5Zu+54mHJywgJ+WcqOmggemdouS4reWKoOWFpeS4jeeVtuWclueJhycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWcqOmhtemdouS4reWKoOWFpeS4jeW9k+WbvueJhycsICfms6jmhI/vvJrlnKjpoIHpnaLkuK3liqDlhaXkuI3nlbblnJbniYcnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5Lit5Yqg5YWl5LiN5b2T5Zu+54mHJywgJ+WcqOmggemdouS4reWKoOWFpeS4jeeVtuWclueJhycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muWcqOmhtemdouS4reWKoOWFpeS4jeW9k+WbvueJhycsICforablkYrvvJrlnKjpoIHpnaLkuK3liqDlhaXkuI3nlbblnJbniYcnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctbmV3cGFnZSc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliJvlu7rkuI3lvZPpobXpnaInLCAn5bu656uL5LiN55W26aCB6Z2iJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Yib5bu65LiN5b2T6aG16Z2iJywgJ+azqOaEj++8muW7uueri+S4jeeVtumggemdoicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliJvlu7rkuI3lvZPpobXpnaInLCAn5bu656uL5LiN55W26aCB6Z2iJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya5Yib5bu65LiN5b2T6aG16Z2iJywgJ+itpuWRiu+8muW7uueri+S4jeeVtumggemdoicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1ub3InOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu5Lit5Yqg5YWl5Y6f5Yib56CU56m2JywgJ+WcqOaineebruS4reWKoOWFpeWOn+WJteeglOepticpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWcqOadoeebruS4reWKoOWFpeWOn+WIm+eglOepticsICfms6jmhI/vvJrlnKjmop3nm67kuK3liqDlhaXljp/libXnoJTnqbYnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu5Lit5Yqg5YWl5Y6f5Yib56CU56m2JywgJ+WcqOaineebruS4reWKoOWFpeWOn+WJteeglOepticpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muWcqOadoeebruS4reWKoOWFpeWOn+WIm+eglOepticsICforablkYrvvJrlnKjmop3nm67kuK3liqDlhaXljp/libXnoJTnqbYnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctb3Bvdic6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfov53lj43lrqLop4Lljp/liJknLCAn6YGV5Y+N5a6i6KeA5Y6f5YmHJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya6L+d5Y+N5a6i6KeC5Y6f5YiZJywgJ+azqOaEj++8mumBleWPjeWuouingOWOn+WJhycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfov53lj43lrqLop4Lljp/liJknLCAn6YGV5Y+N5a6i6KeA5Y6f5YmHJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya6L+d5Y+N5a6i6KeC5Y6f5YiZJywgJ+itpuWRiu+8mumBleWPjeWuouingOWOn+WJhycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1yZWRpcmVjdCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliJvlu7rnoLTlnY/mgKfnmoTph43lrprlkJEnLCAn5bu656uL56C05aOe5oCn55qE6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Yib5bu656C05Z2P5oCn55qE6YeN5a6a5ZCRJywgJ+azqOaEj++8muW7uueri+egtOWjnuaAp+eahOmHjeWumuWQkScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliJvlu7rmgbbmhI/ph43lrprlkJEnLCAn5bu656uL5oOh5oSP6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya5Yib5bu65oG25oSP6YeN5a6a5ZCRJywgJ+itpuWRiu+8muW7uueri+aDoeaEj+mHjeWumuWQkScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy11cGxvYWQnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiK5Lyg5LiN5b2T5Zu+5YOPJywgJ+S4iuWCs+S4jeeVtuWcluWDjycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS4iuS8oOS4jeW9k+WbvuWDjycsICfms6jmhI/vvJrkuIrlgrPkuI3nlbblnJblg48nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiK5Lyg5LiN5b2T5Zu+5YOPJywgJ+S4iuWCs+S4jeeVtuWcluWDjycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muS4iuS8oOS4jeW9k+WbvuWDjycsICforablkYrvvJrkuIrlgrPkuI3nlbblnJblg48nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctdmFuZGFsaXNtJzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aYjuaYvueahOegtOWdjycsICfmmI7poa/nmoTnoLTlo54nKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrmmI7mmL7noLTlnY8nLCAn5rOo5oSP77ya5piO6aGv56C05aOeJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bGV2ZWwyOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aYjuaYvueahOegtOWdjycsICfmmI7poa/nmoTnoLTlo54nKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCforablkYrvvJrmmI7mmL7noLTlnY8nLCAn6K2m5ZGK77ya5piO6aGv56C05aOeJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3V3LXRkZWwnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo6Zeu6aKY5LuN5pyq6Kej5Yaz55qE5oOF5Ya15LiL56e76Zmk57u05oqk5oCn5qih5p2/Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5ZWP6aGM5LuN5pyq6Kej5rG655qE5oOF5rOB5LiL56e76Zmk57at6K235oCn5qih5p2/J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muenu+mZpOe7tOaKpOaAp+aooeadvycsICfms6jmhI/vvJrnp7vpmaTntq3orbfmgKfmqKHmnb8nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo6Zeu6aKY5LuN5pyq6Kej5Yaz55qE5oOF5Ya15LiL56e76Zmk57u05oqk5oCn5qih5p2/Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5ZWP6aGM5LuN5pyq6Kej5rG655qE5oOF5rOB5LiL56e76Zmk57at6K235oCn5qih5p2/J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muenu+mZpOe7tOaKpOaAp+aooeadvycsICforablkYrvvJrnp7vpmaTntq3orbfmgKfmqKHmnb8nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGNhdGVnb3J5OiB3aW5kb3cud2dVTFMoJ+WinuWKoOW5v+WRiicsICflop7liqDlu6PlkYonKSxcblx0XHRcdFx0bGlzdDoge1xuXHRcdFx0XHRcdCd1dy1zcGFtJzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WinuWKoOS4jeWQiOmAgueahOWklumDqOmTvuaOpScsICflop7liqDkuI3lkIjpgannmoTlpJbpg6jpgKPntZAnKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrlop7liqDkuI3lkIjpgILnmoTlpJbpg6jpk77mjqUnLCAn5rOo5oSP77ya5aKe5Yqg5LiN5ZCI6YGp55qE5aSW6YOo6YCj57WQJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bGV2ZWwyOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WinuWKoOWeg+WcvumTvuaOpScsICflop7liqDlnoPlnL7pgKPntZAnKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCforablkYrvvJrlop7liqDlnoPlnL7pk77mjqUnLCAn6K2m5ZGK77ya5aKe5Yqg5Z6D5Zy+6YCj57WQJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3V3LWFkdmVydCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliKnnlKjmnInlhb3moaPmoYjppobmnaXlj5HluIPlub/lkYrmiJbmjqjlub8nLCAn5Yip55So5pyJ54245qqU5qGI6aSo5L6G55m85biD5buj5ZGK5oiW5o6o5bujJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5Yip55So5pyJ5YW95qGj5qGI6aaG5p2l5Y+R5biD5bm/5ZGK5oiW5o6o5bm/Jyxcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5Yip55So5pyJ54245qqU5qGI6aSo5L6G55m85biD5buj5ZGK5oiW5o6o5bujJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliKnnlKjmnInlhb3moaPmoYjppobmnaXlj5HluIPlub/lkYrmiJbmjqjlub8nLCAn5Yip55So5pyJ54245qqU5qGI6aSo5L6G55m85biD5buj5ZGK5oiW5o6o5bujJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5Yip55So5pyJ5YW95qGj5qGI6aaG5p2l5Y+R5biD5bm/5ZGK5oiW5o6o5bm/Jyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5Yip55So5pyJ54245qqU5qGI6aSo5L6G55m85biD5buj5ZGK5oiW5o6o5bujJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Y2F0ZWdvcnk6IHdpbmRvdy53Z1VMUygn5Yqg5o+S5LiN5a6e44CB6K+96LCk5paH5a2XJywgJ+WKoOaPkuS4jeWvpuOAgeiqueisl+aWh+WtlycpLFxuXHRcdFx0XHRsaXN0OiB7XG5cdFx0XHRcdFx0J3V3LWJpb2cnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5Lq654mp5Lyg6K6w5Lit5Yqg5YWl5rKh5pyJ5Y+v6Z2g5p2l5rqQ5L2Q6K+B6ICM5LiU5Y+v6IO95byV5Y+R5LqJ6K6u55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5Lq654mp5YKz6KiY5Lit5Yqg5YWl5rKS5pyJ5Y+v6Z2g5L6G5rqQ5L2Q6K2J6ICM5LiU5Y+v6IO95byV55m854it6K2w55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muWcqOS6uueJqeS8oOiusOS4reWKoOWFpeayoeacieWPr+mdoOadpea6kOS9kOivgeiAjOS4lOWPr+iDveW8leWPkeS6ieiurueahOWGheWuuScsXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muWcqOS6uueJqeWCs+iomOS4reWKoOWFpeaykuacieWPr+mdoOS+hua6kOS9kOitieiAjOS4lOWPr+iDveW8leeZvOeIreitsOeahOWFp+WuuSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5Lq654mp5Lyg6K6w5Lit5Yqg5YWl5rKh5pyJ5Y+v6Z2g5p2l5rqQ5L2Q6K+B6ICM5LiU5Y+v6IO95byV5Y+R5LqJ6K6u55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5Lq654mp5YKz6KiY5Lit5Yqg5YWl5rKS5pyJ5Y+v6Z2g5L6G5rqQ5L2Q6K2J6ICM5LiU5Y+v6IO95byV55m854it6K2w55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muWcqOS6uueJqeS8oOiusOS4reWKoOWFpeayoeacieWPr+mdoOadpea6kOS9kOivgeiAjOS4lOWPr+iDveW8leWPkeS6ieiurueahOWGheWuuScsXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muWcqOS6uueJqeWCs+iomOS4reWKoOWFpeaykuacieWPr+mdoOS+hua6kOS9kOitieiAjOS4lOWPr+iDveW8leeZvOeIreitsOeahOWFp+WuuSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctZXJyb3InOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pWF5oSP5Yqg5YWl5LiN5a6e5YaF5a65JywgJ+aVheaEj+WKoOWFpeS4jeWvpuWFp+WuuScpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muaVheaEj+WKoOWFpeS4jeWunuWGheWuuScsICfms6jmhI/vvJrmlYXmhI/liqDlhaXkuI3lr6blhaflrrknKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pWF5oSP5Yqg5YWl5LiN5a6e5YaF5a65JywgJ+aVheaEj+WKoOWFpeS4jeWvpuWFp+WuuScpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muaVheaEj+WKoOWFpeS4jeWunuWGheWuuScsICforablkYrvvJrmlYXmhI/liqDlhaXkuI3lr6blhaflrrknKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctdW5zb3VyY2VkJzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeayoeacieWPr+mdoOadpea6kOS9kOivgeeahOWGheWuuScsICfliqDlhaXmspLmnInlj6/pnaDkvobmupDkvZDorYnnmoTlhaflrrknKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfms6jmhI/vvJrliqDlhaXmsqHmnInlj6/pnaDmnaXmupDkvZDor4HnmoTlhoXlrrknLFxuXHRcdFx0XHRcdFx0XHRcdCfms6jmhI/vvJrliqDlhaXmspLmnInlj6/pnaDkvobmupDkvZDorYnnmoTlhaflrrknXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bGV2ZWwyOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeayoeacieWPr+mdoOadpea6kOS9kOivgeeahOWGheWuuScsICfliqDlhaXmspLmnInlj6/pnaDkvobmupDkvZDorYnnmoTlhaflrrknKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCforablkYrvvJrliqDlhaXmsqHmnInlj6/pnaDmnaXmupDkvZDor4HnmoTlhoXlrrknLFxuXHRcdFx0XHRcdFx0XHRcdCforablkYrvvJrliqDlhaXmspLmnInlj6/pnaDkvobmupDkvZDorYnnmoTlhaflrrknXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRjYXRlZ29yeTogd2luZG93LndnVUxTKCfnv7vor5Hlk4HotKgnLCAn57+76K2v5ZOB6LOqJyksXG5cdFx0XHRcdGxpc3Q6IHtcblx0XHRcdFx0XHQndXctcm91Z2h0cmFuc2xhdGlvbic6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmgqjnv7vor5HnmoTotKjph4/mnInlvoXmlLnlloQnLCAn5oKo57+76K2v55qE6LOq6YeP5pyJ5b6F5pS55ZaEJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5oKo57+76K+R55qE6LSo6YeP5pyJ5b6F5pS55ZaEJywgJ+azqOaEj++8muaCqOe/u+itr+eahOizqumHj+acieW+heaUueWWhCcpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnspfliqPnv7vor5EnLCAn57KX5Yqj57+76K2vJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya57KX5Yqj57+76K+RJywgJ+itpuWRiu+8mueyl+WKo+e/u+itrycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Y2F0ZWdvcnk6IHdpbmRvdy53Z1VMUygn6Z2e6IO95o6l5Y+X5LiU6L+d5Y+N5p2h5L6L55qE5Y2V5pa56Z2i6KGM5Li65oiW5pON5L2cJywgJ+mdnuiDveaOpeWPl+S4lOmBleWPjeaineS+i+eahOWWruaWuemdouihjOeCuuaIluaTjeS9nCcpLFxuXHRcdFx0XHRsaXN0OiB7XG5cdFx0XHRcdFx0J3V3LWFmZCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnp7vpmaR7e2FmZH1977yI6aG16Z2i5a2Y5bqf6K6o6K6677yJ5qih5p2/JywgJ+enu+mZpHt7YWZkfX3vvIjpoIHpnaLlrZjlu6LoqI7oq5bvvInmqKHmnb8nKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfms6jmhI/vvJrnp7vpmaR7e2FmZH1977yI6aG16Z2i5a2Y5bqf6K6o6K6677yJ5qih5p2/Jyxcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya56e76Zmke3thZmR9fe+8iOmggemdouWtmOW7ouiojuirlu+8ieaooeadvydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56e76Zmke3thZmR9fe+8iOmhtemdouWtmOW6n+iuqOiuuu+8ieaooeadvycsICfnp7vpmaR7e2FmZH1977yI6aCB6Z2i5a2Y5bui6KiO6KuW77yJ5qih5p2/JyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya56e76Zmke3thZmR9fe+8iOmhtemdouWtmOW6n+iuqOiuuu+8ieaooeadvycsXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muenu+mZpHt7YWZkfX3vvIjpoIHpnaLlrZjlu6LoqI7oq5bvvInmqKHmnb8nXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3V3LW1vcyc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3mgbDlvZPnmoTmnaHnm67moLzlvI/jgIHml6XmnJ/jgIHor63oqIDnrYknLCAn5LiN5oGw55W255qE5qKd55uu5qC85byP44CB5pel5pyf44CB6Kqe6KiA562JJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5LiN5oGw5b2T55qE5p2h55uu5qC85byP44CB5pel5pyf44CB6K+t6KiA562JJyxcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5LiN5oGw55W255qE5qKd55uu5qC85byP44CB5pel5pyf44CB6Kqe6KiA562JJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3mgbDlvZPnmoTmnaHnm67moLzlvI/jgIHml6XmnJ/jgIHor63oqIDnrYknLCAn5LiN5oGw55W255qE5qKd55uu5qC85byP44CB5pel5pyf44CB6Kqe6KiA562JJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5LiN5oGw5b2T55qE5p2h55uu5qC85byP44CB5pel5pyf44CB6K+t6KiA562JJyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5LiN5oGw55W255qE5qKd55uu5qC85byP44CB5pel5pyf44CB6Kqe6KiA562JJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1tb3ZlJzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+aXoOaVheenu+WKqOadoeebri/mlrDlkI3np7DkuI3nrKblkIjlkb3lkI3op4TojIMnLFxuXHRcdFx0XHRcdFx0XHRcdCfnhKHmlYXnp7vli5Xmop3nm64v5paw5ZCN56ix5LiN56ym5ZCI5ZG95ZCN6KaP56+EJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS4jeaBsOW9k+WcsOenu+WKqOmhtemdoicsICfms6jmhI/vvJrkuI3mgbDnlbblnLDnp7vli5XpoIHpnaInKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5oqK6aG16Z2i56e75Yqo5Yiw5LiN5oGw5b2T44CB6L+d5Y+N5ZG95ZCN5bi46KeE5oiW6L+d5Y+N5YWx6K+G55qE5qCH6aKYJyxcblx0XHRcdFx0XHRcdFx0XHQn5oqK6aCB6Z2i56e75YuV5Yiw5LiN5oGw55W244CB6YGV5Y+N5ZG95ZCN5bi46KaP5oiW6YGV5Y+N5YWx6K2Y55qE5qiZ6aGMJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muS4jeaBsOW9k+WcsOenu+WKqOmhtemdoicsICforablkYrvvJrkuI3mgbDnlbblnLDnp7vli5XpoIHpnaInKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctc3BlZWR5Jzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+enu+mZpHt7ZGVsZXRlfX3vvIjlv6vpgJ/liKDpmaTvvInmqKHmnb8nLCAn56e76Zmke3tkZWxldGV9fe+8iOW/q+mAn+WIqumZpO+8ieaooeadvycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muenu+mZpHt7ZGVsZXRlfX3vvIjlv6vpgJ/liKDpmaTvvInmqKHmnb8nLFxuXHRcdFx0XHRcdFx0XHRcdCfms6jmhI/vvJrnp7vpmaR7e2RlbGV0ZX1977yI5b+r6YCf5Yiq6Zmk77yJ5qih5p2/J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnp7vpmaR7e2RlbGV0ZX1977yI5b+r6YCf5Yig6Zmk77yJ5qih5p2/JywgJ+enu+mZpHt7ZGVsZXRlfX3vvIjlv6vpgJ/liKrpmaTvvInmqKHmnb8nKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCforablkYrvvJrnp7vpmaR7e2RlbGV0ZX1977yI5b+r6YCf5Yig6Zmk77yJ5qih5p2/Jyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya56e76Zmke3tkZWxldGV9fe+8iOW/q+mAn+WIqumZpO+8ieaooeadvydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctdGFsa3BhZ2UnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N6K6o6K666aG16KeE6IyDJywgJ+mBleWPjeiojuirlumggeimj+evhCcpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8mui/neWPjeiuqOiuuumhteinhOiMgycsICfms6jmhI/vvJrpgZXlj43oqI7oq5bpoIHopo/nr4QnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N6K6o6K666aG16KeE6IyDJywgJ+mBleWPjeiojuirlumggeimj+evhCcpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8mui/neWPjeiuqOiuuumhteinhOiMgycsICforablkYrvvJrpgZXlj43oqI7oq5bpoIHopo/nr4QnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctdHB2Jzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5L+u5pS55LuW5Lq655WZ6KiAJyxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogJ+azqOaEj++8muS/ruaUueS7luS6uueVmeiogCcsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bGV2ZWwyOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5L+u5pS55LuW5Lq655WZ6KiAJyxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogJ+itpuWRiu+8muS/ruaUueS7luS6uueVmeiogCcsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRjYXRlZ29yeTogd2luZG93LndnVUxTKCflr7nlhbbku5bnlKjmiLflkozmnaHnm67nmoTmgIHluqYnLCAn5bCN5YW25LuW55So5oi25ZKM5qKd55uu55qE5oWL5bqmJyksXG5cdFx0XHRcdGxpc3Q6IHtcblx0XHRcdFx0XHQndXctaWxsZWdhbCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXkuI3nrKblkIjkuK3lm73ku7flgLzop4LnmoTlhoXlrrknLCAn5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE5YWn5a65JyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5Yqg5YWl5LiN56ym5ZCI5Lit5Zu95Lu35YC86KeC55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXkuI3nrKblkIjkuK3lm73ku7flgLzop4LnmoTlhoXlrrknLCAn5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE5YWn5a65JyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5Yqg5YWl5LiN56ym5ZCI5Lit5Zu95Lu35YC86KeC55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1vd24nOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Li75byg5p2h55uu5omA5pyJ5p2DJywgJ+S4u+W8teaineebruaJgOacieasiicpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS4u+W8oOadoeebruaJgOacieadgycsICfms6jmhI/vvJrkuLvlvLXmop3nm67miYDmnInmrIonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Li75byg5p2h55uu55qE5omA5pyJ5p2DJywgJ+S4u+W8teaineebrueahOaJgOacieasiicpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muS4u+W8oOadoeebrueahOaJgOacieadgycsICforablkYrvvJrkuLvlvLXmop3nm67nmoTmiYDmnInmrIonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctc29jaWFsbWVkaWEnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCG5pyJ5YW95qGj5qGI6aaG5b2T5L2c56S+5Lqk5aqS5L2T5L2/55SoJywgJ+Wwh+acieeNuOaqlOahiOmkqOeVtuS9nOekvuS6pOWqkumrlOS9v+eUqCcpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muWwhuacieWFveaho+ahiOmmhuW9k+S9nOekvuS6pOWqkuS9k+S9v+eUqCcsXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muWwh+acieeNuOaqlOahiOmkqOeVtuS9nOekvuS6pOWqkumrlOS9v+eUqCdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCG5pyJ5YW95qGj5qGI6aaG5b2T5L2c56S+5Lqk5aqS5L2T5L2/55SoJywgJ+Wwh+acieeNuOaqlOahiOmkqOeVtuS9nOekvuS6pOWqkumrlOS9v+eUqCcpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muWwhuacieWFveaho+ahiOmmhuW9k+S9nOekvuS6pOWqkuS9k+S9v+eUqCcsXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muWwh+acieeNuOaqlOahiOmkqOeVtuS9nOekvuS6pOWqkumrlOS9v+eUqCdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XSxcblx0XHRzaW5nbGVub3RpY2U6IHtcblx0XHRcdCd1dy0ycmVkaXJlY3QnOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOenu+WKqOmhtemdouWQjuW6lOivpeS/ruWkjeWPjOmHjemHjeWumuWQkScsICflnKjnp7vli5XpoIHpnaLlvozmh4noqbLkv67lvqnpm5nph43ph43lrprlkJEnKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrlnKjnp7vliqjpobXpnaLlkI7lupTor6Xkv67lpI3lj4zph43ph43lrprlkJEnLCAn5rOo5oSP77ya5Zyo56e75YuV6aCB6Z2i5b6M5oeJ6Kmy5L+u5b6p6ZuZ6YeN6YeN5a6a5ZCRJyksXG5cdFx0XHR9LFxuXHRcdFx0J3V3LWFpdic6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Li+5oql5LqL6aG55bm25LiN5piv56C05Z2P6KGM5Li6JywgJ+iIieWgseS6i+mgheS4puS4jeaYr+egtOWjnuihjOS4uicpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS4jeaBsOW9k+WcsOS4vuaKpeegtOWdjycsICfms6jmhI/vvJrkuI3mgbDnlbblnLDoiInloLHnoLTlo54nKSxcblx0XHRcdH0sXG5cdFx0XHQndXctYXJ0aWNsZXNpZyc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu5Lit562+5ZCNJywgJ+WcqOaineebruS4reewveWQjScpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWcqOadoeebruS4reetvuWQjScsICfms6jmhI/vvJrlnKjmop3nm67kuK3nsL3lkI0nKSxcblx0XHRcdH0sXG5cdFx0XHQndXctYXV0b2Jpb2dyYXBoeSc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yib5bu66Ieq5LygJywgJ+W7uueri+iHquWCsycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWIm+W7uuiHquS8oCcsICfms6jmhI/vvJrlu7rnq4voh6rlgrMnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctYmFkY2F0Jzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXplJnor6/nmoTpobXpnaLliIbnsbsnLCAn5Yqg5YWl6Yyv6Kqk55qE6aCB6Z2i5YiG6aGeJyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Yqg5YWl6ZSZ6K+v55qE6aG16Z2i5YiG57G7JywgJ+azqOaEj++8muWKoOWFpemMr+iqpOeahOmggemdouWIhumhnicpLFxuXHRcdFx0fSxcblx0XHRcdCd1dy1iaXRlJzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkvKTlrrPmlrDmiYsnLCAn5YK35a6z5paw5omLJyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Lyk5a6z5paw5omLJywgJ+azqOaEj++8muWCt+Wus+aWsOaJiycpLFxuXHRcdFx0fSxcblx0XHRcdCd1dy1jaGluZXNlJzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor7fkvb/nlKjmoIflh4bmsYnor63msp/pgJonLCAn6KuL5L2/55So5qiZ5rqW5ryi6Kqe5rqd6YCaJyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya6K+35L2/55So5qCH5YeG5rGJ6K+t5rKf6YCaJywgJ+azqOaEj++8muiri+S9v+eUqOaomea6lua8ouiqnua6nemAmicpLFxuXHRcdFx0fSxcblx0XHRcdCd1dy1jcG1vdmUnOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WJqui0tOenu+WKqCcsICfliarosrznp7vli5UnKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrliarotLTnp7vliqgnLCAn5rOo5oSP77ya5Ymq6LK856e75YuVJyksXG5cdFx0XHR9LFxuXHRcdFx0J3V3LWRhYic6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5raI5q2n5LmJ6aG15qC85byP6ZSZ6K+vJywgJ+a2iOatp+e+qemggeagvOW8j+mMr+iqpCcpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8mua2iOatp+S5iemhteagvOW8j+mUmeivrycsICfms6jmhI/vvJrmtojmrafnvqnpoIHmoLzlvI/pjK/oqqQnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctbmV3cGFnZS1kcmFmdCc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pyA6L+R5Yib5bu655qE6aG16Z2i6KKr56e75Yqo5Yiw6I2J56i/JywgJ+acgOi/keW7uueri+eahOmggemdouiiq+enu+WLleWIsOiNieeovycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muacgOi/keWIm+W7uueahOmhtemdouiiq+enu+WKqOWIsOiNieeovycsICfms6jmhI/vvJrmnIDov5Hlu7rnq4vnmoTpoIHpnaLooqvnp7vli5XliLDojYnnqL8nKSxcblx0XHRcdH0sXG5cdFx0XHQndXctc2VsZnJldmVydCc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5oSf6LCi5oKo6Ieq6KGM5Zue6YCA6Ieq5bex55qE5rWL6K+V77yM5Lul5ZCO5LiN6KaB5YaN6L+Z5qC35YGa5LqGJyxcblx0XHRcdFx0XHQn5oSf6Kyd5oKo6Ieq6KGM5Zue6YCA6Ieq5bex55qE5ris6Kmm77yM5Lul5b6M5LiN6KaB5YaN6YCZ5qij5YGa5LqGJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWbnumAgOS4quS6uueahOa1i+ivlScsICfms6jmhI/vvJrlm57pgIDlgIvkurrnmoTmuKzoqaYnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctc3Vic3R1Yic6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yib5bu65bCP5bCP5L2c5ZOBJywgJ+W7uueri+Wwj+Wwj+S9nOWTgScpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muWIm+W7uuWwj+Wwj+S9nOWTgScsICforablkYrvvJrlu7rnq4vlsI/lsI/kvZzlk4EnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctdGFsa2luYXJ0aWNsZSc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu6aG15Lit55WZ5LiL5oSP6KeBJywgJ+WcqOaineebrumggeS4reeVmeS4i+aEj+imiycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWcqOadoeebrumhteS4reeVmeS4i+aEj+ingScsICfms6jmhI/vvJrlnKjmop3nm67poIHkuK3nlZnkuIvmhI/oposnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctdW5zaWduZWQnOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ayoeacieWcqOiuqOiuuumhteS4iuetvuWQjScsICfmspLmnInlnKjoqI7oq5bpoIHkuIrnsL3lkI0nKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrmsqHmnInlnKjorqjorrrpobXkuIrnrb7lkI0nLCAn5rOo5oSP77ya5rKS5pyJ5Zyo6KiO6KuW6aCB5LiK57C95ZCNJyksXG5cdFx0XHR9LFxuXHRcdFx0J3V3LXdyb25nY3NkJzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflv6vpgJ/liKDpmaTnkIbnlLHkuI3lvZMnLCAn5b+r6YCf5Yiq6Zmk55CG55Sx5LiN55W2JyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5b+r6YCf5Yig6Zmk55CG55Sx5LiN5b2TJywgJ+azqOaEj++8muW/q+mAn+WIqumZpOeQhueUseS4jeeVticpLFxuXHRcdFx0fSxcblx0XHRcdCd1dy13cm9uZ3N1bW1hcnknOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOe8lui+keaRmOimgeWItumAoOS4jemAguW9k+eahOWGheWuuScsICflnKjnt6jovK/mkZjopoHoo73pgKDkuI3pgannlbbnmoTlhaflrrknKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCforablkYrvvJrlnKjnvJbovpHmkZjopoHliLbpgKDkuI3pgILlvZPnmoTlhoXlrrknLCAn6K2m5ZGK77ya5Zyo57eo6Lyv5pGY6KaB6KO96YCg5LiN6YGp55W255qE5YWn5a65JyksXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0c2luZ2xld2Fybjoge1xuXHRcdFx0J3V3LTNycic6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35r2c5Zyo6L+d5Y+N5Zue6YCA5LiN6L+H5LiJ5Y6f5YiZ55qE5Y+v6IO95oCnJywgJ+eUqOaItua9m+WcqOmBleWPjeWbnumAgOS4jemBjuS4ieWOn+WJh+eahOWPr+iDveaApycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+itpuWRiu+8mueUqOaIt+a9nOWcqOi/neWPjeWbnumAgOS4jei/h+S4ieWOn+WImeeahOWPr+iDveaApycsXG5cdFx0XHRcdFx0J+itpuWRiu+8mueUqOaItua9m+WcqOmBleWPjeWbnumAgOS4jemBjuS4ieWOn+WJh+eahOWPr+iDveaApydcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHQndXctYXR0YWNrJzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkurrouqvmlLvlh7snLCAn5Lq66Lqr5pS75pOKJyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya5Lq66Lqr5pS75Ye7JywgJ+itpuWRiu+8muS6uui6q+aUu+aTiicpLFxuXHRcdFx0XHRzdXBwcmVzc0FydGljbGVJblN1bW1hcnk6IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0J3V3LWNvaSc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yip55uK5Yay56qBJywgJ+WIqeebiuihneeqgScpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWIqeebiuWGsueqgScsICfms6jmhI/vvJrliKnnm4rooZ3nqoEnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctZmFrZXNvdXJjZSc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Jma5p6E5pWw5o2u5rqQ5oiW5byV5paHJywgJ+iZm+ani+izh+aWmeS+hua6kOaIluW8leaWhycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muiZmuaehOaVsOaNrua6kOaIluW8leaWhycsICforablkYrvvJromZvmp4vos4fmlpnkvobmupDmiJblvJXmlocnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctcGluZm8nOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W8oOi0tOS7luS6uumakOengScsICflvLXosrzku5bkurrpmrHnp4EnKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCforablkYrvvJrlvKDotLTku5bkurrpmpDnp4EnLCAn6K2m5ZGK77ya5by16LK85LuW5Lq66Zqx56eBJyksXG5cdFx0XHR9LFxuXHRcdFx0J3V3LWlsbGVnYWxhdmF0YXInOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WktOWDj+i/neinhCcsICfpoK3lg4/pgZXopo8nKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfmgqjov5HmnJ/kuIrkvKDnmoTlpLTlg4/ov53op4QnLCAn5oKo6L+R5pyf5LiK5YKz55qE6aCt5YOP6YGV6KaPJyksXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH07XG5cdC8vIFVzZWQgcmVwZWF0ZWRseSBiZWxvdyBhY3Jvc3MgbWVudSByZWJ1aWxkc1xuXHRUd2lua2xlLndhcm4ucHJldl9hcnRpY2xlID0gbnVsbDtcblx0VHdpbmtsZS53YXJuLnByZXZfcmVhc29uID0gbnVsbDtcblx0VHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqID0gbnVsbDtcblx0VHdpbmtsZS53YXJuLmNhbGxiYWNrLmNoYW5nZV9jYXRlZ29yeSA9IGZ1bmN0aW9uIGNoYW5nZV9jYXRlZ29yeShlKSB7XG5cdFx0Y29uc3Qge3ZhbHVlfSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHtzdWJfZ3JvdXB9ID0gZS50YXJnZXQucm9vdDtcblx0XHRzdWJfZ3JvdXAubWFpbl9ncm91cCA9IHZhbHVlO1xuXHRcdGxldCBvbGRfc3VidmFsdWUgPSBzdWJfZ3JvdXAudmFsdWU7XG5cdFx0bGV0IG9sZF9zdWJ2YWx1ZV9yZTtcblx0XHRpZiAob2xkX3N1YnZhbHVlKSB7XG5cdFx0XHRpZiAodmFsdWUgPT09ICdraXRjaGVuc2luaycpIHtcblx0XHRcdFx0Ly8gRXhhY3QgbWF0Y2ggcG9zc2libGUgaW4ga2l0Y2hlbnNpbmsgbWVudVxuXHRcdFx0XHRvbGRfc3VidmFsdWVfcmUgPSBuZXcgUmVnRXhwKG13LnV0aWwuZXNjYXBlUmVnRXhwKG9sZF9zdWJ2YWx1ZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2xkX3N1YnZhbHVlID0gb2xkX3N1YnZhbHVlLnJlcGxhY2UoL1xcZCooaW0pPyQvLCAnJyk7XG5cdFx0XHRcdG9sZF9zdWJ2YWx1ZV9yZSA9IG5ldyBSZWdFeHAoYCR7bXcudXRpbC5lc2NhcGVSZWdFeHAob2xkX3N1YnZhbHVlKX0oXFxcXGQqPykkYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlIChzdWJfZ3JvdXAuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRzdWJfZ3JvdXAucmVtb3ZlQ2hpbGQoc3ViX2dyb3VwLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblx0XHRsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHQvLyB3b3JrZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBjb21ibyBib3ggZW50cmllc1xuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAoY29udGVudHMsIGNvbnRhaW5lciwgd3JhcEluT3B0Z3JvdXAsIHZhbCA9IHZhbHVlKSA9PiB7XG5cdFx0XHQvLyBsZXZlbDItPjIsIHNpbmdsZXdhcm4tPicnOyBhbHNvIHVzZWQgdG8gZGlzdGluZ3Vpc2ggdGhlXG5cdFx0XHQvLyBzY2FsZWQgbGV2ZWxzIGZyb20gc2luZ2xlbm90aWNlLCBzaW5nbGV3YXJuLCBhbmQgY3VzdG9tXG5cdFx0XHRjb25zdCBsZXZlbCA9IHZhbC5yZXBsYWNlKC9eXFxEKy9nLCAnJyk7XG5cdFx0XHQvLyBkdWUgdG8gYW4gYXBwYXJlbnQgaU9TIGJ1Zywgd2UgaGF2ZSB0byBhZGQgYW4gb3B0aW9uLWdyb3VwIHRvIHByZXZlbnQgdHJ1bmNhdGlvbiBvZiB0ZXh0XG5cdFx0XHQvLyAoc2VhcmNoIFdUOlRXIGFyY2hpdmVzIGZvciBcIlByb2JsZW0gc2VsZWN0aW5nIHdhcm5pbmdzIG9uIGFuIGlQaG9uZVwiKVxuXHRcdFx0aWYgKHdyYXBJbk9wdGdyb3VwICYmICQuY2xpZW50LnByb2ZpbGUoKS5wbGF0Zm9ybSA9PT0gJ2lwaG9uZScpIHtcblx0XHRcdFx0bGV0IHdyYXBwZXJPcHRncm91cCA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHRcdFx0dHlwZTogJ29wdGdyb3VwJyxcblx0XHRcdFx0XHRsYWJlbDogJ+WPr+eUqOaooeadvycsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3cmFwcGVyT3B0Z3JvdXAgPSB3cmFwcGVyT3B0Z3JvdXAucmVuZGVyKCk7XG5cdFx0XHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZCh3cmFwcGVyT3B0Z3JvdXApO1xuXHRcdFx0XHRjb250YWluZXIgPSB3cmFwcGVyT3B0Z3JvdXA7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IFtpdGVtS2V5LCBpdGVtUHJvcGVydGllc10gb2YgT2JqZWN0LmVudHJpZXMoY29udGVudHMpKSB7XG5cdFx0XHRcdC8vIFNraXAgaWYgdGhlIGN1cnJlbnQgdGVtcGxhdGUgZG9lc24ndCBoYXZlIGEgdmVyc2lvbiBmb3IgdGhlIGN1cnJlbnQgbGV2ZWxcblx0XHRcdFx0aWYgKCEhbGV2ZWwgJiYgIWl0ZW1Qcm9wZXJ0aWVzW3ZhbF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qga2V5ID0gdHlwZW9mIGl0ZW1LZXkgPT09ICdzdHJpbmcnID8gaXRlbUtleSA6IGl0ZW1Qcm9wZXJ0aWVzLnZhbHVlO1xuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IGtleSArIGxldmVsO1xuXHRcdFx0XHRjb25zdCBlbGVtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogYHt7JHt0ZW1wbGF0ZX19fTogJHtsZXZlbCA/IGl0ZW1Qcm9wZXJ0aWVzW3ZhbF0ubGFiZWwgOiBpdGVtUHJvcGVydGllcy5sYWJlbH1gLFxuXHRcdFx0XHRcdHZhbHVlOiB0ZW1wbGF0ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIFNlbGVjdCBpdGVtIGJlc3QgY29ycmVzcG9uZGluZyB0byBwcmV2aW91cyBzZWxlY3Rpb25cblx0XHRcdFx0aWYgKCFzZWxlY3RlZCAmJiBvbGRfc3VidmFsdWUgJiYgb2xkX3N1YnZhbHVlX3JlLnRlc3QodGVtcGxhdGUpKSB7XG5cdFx0XHRcdFx0ZWxlbS5kYXRhLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRzZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZWxlbVJlbmRlcmVkID0gY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW0ucmVuZGVyKCkpO1xuXHRcdFx0XHQkKGVsZW1SZW5kZXJlZCkuZGF0YSgnbWVzc2FnZURhdGEnLCBpdGVtUHJvcGVydGllcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRzd2l0Y2ggKHZhbHVlKSB7XG5cdFx0XHRjYXNlICdzaW5nbGVub3RpY2UnOlxuXHRcdFx0Y2FzZSAnc2luZ2xld2Fybic6XG5cdFx0XHRcdGNyZWF0ZUVudHJpZXMoVHdpbmtsZS53YXJuLm1lc3NhZ2VzW3ZhbHVlXSwgc3ViX2dyb3VwLCB0cnVlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzaW5nbGVjb21iaW5lZCc6IHtcblx0XHRcdFx0Y29uc3QgdW5Tb3J0ZWRTaW5nbGV0cyA9IHtcblx0XHRcdFx0XHQuLi5Ud2lua2xlLndhcm4ubWVzc2FnZXMuc2luZ2xlbm90aWNlLFxuXHRcdFx0XHRcdC4uLlR3aW5rbGUud2Fybi5tZXNzYWdlcy5zaW5nbGV3YXJuLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBzb3J0ZWRTaW5nbGV0TWVzc2FnZXMgPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModW5Tb3J0ZWRTaW5nbGV0cykuc29ydCgpKSB7XG5cdFx0XHRcdFx0c29ydGVkU2luZ2xldE1lc3NhZ2VzW2tleV0gPSB1blNvcnRlZFNpbmdsZXRzW2tleV07XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3JlYXRlRW50cmllcyhzb3J0ZWRTaW5nbGV0TWVzc2FnZXMsIHN1Yl9ncm91cCwgdHJ1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnY3VzdG9tJzpcblx0XHRcdFx0Y3JlYXRlRW50cmllcyhUd2lua2xlLmdldFByZWYoJ2N1c3RvbVdhcm5pbmdMaXN0JyksIHN1Yl9ncm91cCwgdHJ1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAna2l0Y2hlbnNpbmsnOlxuXHRcdFx0XHRmb3IgKGNvbnN0IGx2bCBvZiBbJ2xldmVsMScsICdsZXZlbDInXSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgbGV2ZWxHcm91cCBvZiBUd2lua2xlLndhcm4ubWVzc2FnZXMubGV2ZWxzKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGxldmVsR3JvdXAubGlzdCwgc3ViX2dyb3VwLCB0cnVlLCBsdmwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjcmVhdGVFbnRyaWVzKFR3aW5rbGUud2Fybi5tZXNzYWdlcy5zaW5nbGVub3RpY2UsIHN1Yl9ncm91cCwgdHJ1ZSk7XG5cdFx0XHRcdGNyZWF0ZUVudHJpZXMoVHdpbmtsZS53YXJuLm1lc3NhZ2VzLnNpbmdsZXdhcm4sIHN1Yl9ncm91cCwgdHJ1ZSk7XG5cdFx0XHRcdGNyZWF0ZUVudHJpZXMoVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21XYXJuaW5nTGlzdCcpLCBzdWJfZ3JvdXAsIHRydWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2xldmVsMSc6XG5cdFx0XHRjYXNlICdsZXZlbDInOlxuXHRcdFx0XHQvLyBDcmVhdGVzIHN1Ymdyb3VwIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyB0byBwbGFjZSBpbiBpdDtcblx0XHRcdFx0Ly8gbGVhdmVzIFwiUmVtb3ZhbCBvZiBkZWxldGlvbiB0YWdzXCIgZW1wdHkgZm9yIGxldmVsIDJcblx0XHRcdFx0Zm9yIChjb25zdCBsZXZlbEdyb3VwIG9mIFR3aW5rbGUud2Fybi5tZXNzYWdlcy5sZXZlbHMpIHtcblx0XHRcdFx0XHRsZXQgb3B0Z3JvdXAgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ29wdGdyb3VwJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBsZXZlbEdyb3VwLmNhdGVnb3J5LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9wdGdyb3VwID0gb3B0Z3JvdXAucmVuZGVyKCk7XG5cdFx0XHRcdFx0c3ViX2dyb3VwLmFwcGVuZENoaWxkKG9wdGdyb3VwKTtcblx0XHRcdFx0XHQvLyBjcmVhdGUgdGhlIG9wdGlvbnNcblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGxldmVsR3JvdXAubGlzdCwgb3B0Z3JvdXAsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2F1dG9sZXZlbCc6IHtcblx0XHRcdFx0Ly8gQ2hlY2sgdXNlciBwYWdlIHRvIGRldGVybWluZSBhcHByb3ByaWF0ZSBsZXZlbFxuXHRcdFx0XHRjb25zdCBhdXRvbGV2ZWxQcm9jID0gKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHdpa2l0ZXh0ID0gVHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdFx0Ly8gaGlzdG9yeSBub3QgbmVlZGVkIGZvciBhdXRvbGV2ZWxcblx0XHRcdFx0XHRjb25zdCBbbGF0ZXN0XSA9IFR3aW5rbGUud2Fybi5jYWxsYmFja3MuZGF0ZVByb2Nlc3Npbmcod2lraXRleHQpO1xuXHRcdFx0XHRcdC8vIFBzZXVkby1wYXJhbXMgd2l0aCBvbmx5IHdoYXQncyBuZWVkZWQgdG8gcGFyc2UgdGhlIGxldmVsIGkuZS4gbm8gbWVzc2FnZURhdGFcblx0XHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRzdWJfZ3JvdXA6IG9sZF9zdWJ2YWx1ZSxcblx0XHRcdFx0XHRcdGFydGljbGU6IGUudGFyZ2V0LnJvb3QuYXJ0aWNsZS52YWx1ZSxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGx2bCA9IGBsZXZlbCR7VHdpbmtsZS53YXJuLmNhbGxiYWNrcy5hdXRvbGV2ZWxQYXJzZVdpa2l0ZXh0KHdpa2l0ZXh0LCBwYXJhbXMsIGxhdGVzdClbMV19YDtcblx0XHRcdFx0XHQvLyBJZGVudGljYWwgdG8gbGV2ZWwxLCBldGMuIGFib3ZlIGJ1dCBleHBsaWNpdGx5IHByb3ZpZGVzIHRoZSBsZXZlbFxuXHRcdFx0XHRcdGZvciAoY29uc3QgbGV2ZWxHcm91cCBvZiBUd2lua2xlLndhcm4ubWVzc2FnZXMubGV2ZWxzKSB7XG5cdFx0XHRcdFx0XHRsZXQgb3B0Z3JvdXAgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0Z3JvdXAnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogbGV2ZWxHcm91cC5jYXRlZ29yeSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0b3B0Z3JvdXAgPSBvcHRncm91cC5yZW5kZXIoKTtcblx0XHRcdFx0XHRcdHN1Yl9ncm91cC5hcHBlbmRDaGlsZChvcHRncm91cCk7XG5cdFx0XHRcdFx0XHQvLyBjcmVhdGUgdGhlIG9wdGlvbnNcblx0XHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMobGV2ZWxHcm91cC5saXN0LCBvcHRncm91cCwgZmFsc2UsIGx2bCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgc3ViY2F0ZWdvcnkgY2hhbmdlLCBhZGQgc2VsZWN0IG1lbnUsIGV0Yy5cblx0XHRcdFx0XHRUd2lua2xlLndhcm4uY2FsbGJhY2sucG9zdENhdGVnb3J5Q2xlYW51cChlKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKFR3aW5rbGUud2Fybi50YWxrcGFnZU9iaikge1xuXHRcdFx0XHRcdGF1dG9sZXZlbFByb2MoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCB1c2VydGFsa19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdGBVc2VyX3RhbGs6JHtyZWxldmFudFVzZXJOYW1lfWAsXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOi9veS4iuasoeitpuWRiicsICfovInlhaXkuIrmrKHorablkYonKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dXNlcnRhbGtfcGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdFx0dXNlcnRhbGtfcGFnZS5sb2FkKFxuXHRcdFx0XHRcdFx0KHBhZ2VvYmopID0+IHtcblx0XHRcdFx0XHRcdFx0VHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqID0gcGFnZW9iajsgLy8gVXBkYXRlIHRhbGtwYWdlT2JqXG5cdFx0XHRcdFx0XHRcdGF1dG9sZXZlbFByb2MoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIENhdGNoIGFuZCB3YXJuIGlmIHRoZSB0YWxrcGFnZSBjYW4ndCBsb2FkLFxuXHRcdFx0XHRcdFx0XHQvLyBtb3N0IGxpa2VseSBiZWNhdXNlIGl0J3MgYSBjcm9zcy1uYW1lc3BhY2UgcmVkaXJlY3Rcblx0XHRcdFx0XHRcdFx0Ly8gU3VwZXJzZWRlcyB0aGUgdHlwaWNhbCAkYXV0b2xldmVsTWVzc2FnZSBhZGRlZCBpbiBhdXRvbGV2ZWxQYXJzZVdpa2l0ZXh0XG5cdFx0XHRcdFx0XHRcdGNvbnN0ICRub1RhbGtQYWdlTm9kZSA9ICQoJzxzdHJvbmc+Jylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignaWQnLCAndHdpbmtsZS13YXJuLWF1dG9sZXZlbC1tZXNzYWdlJylcblx0XHRcdFx0XHRcdFx0XHQuY3NzKCdjb2xvcicsICcjZjAwJylcblx0XHRcdFx0XHRcdFx0XHQudGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0J+aXoOazleWKoOi9veeUqOaIt+iuqOiuuumhte+8jOi/meWPr+iDveaYr+WboOS4uuWug+aYr+i3qOWRveWQjeepuumXtOmHjeWumuWQke+8jOiHquWKqOmAieaLqeitpuWRiue6p+WIq+WwhuS4jeS8mui/kOS9nOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCfnhKHms5XovInlhaXkvb/nlKjogIXoqI7oq5bpoIHvvIzpgJnlj6/og73mmK/lm6DngrrlroPmmK/ot6jlkb3lkI3nqbrplpPph43mlrDlsI7lkJHvvIzoh6rli5Xpgbjmk4forablkYrntJrliKXlsIfkuI3mnIPpgYvkvZzjgIInXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0JG5vVGFsa1BhZ2VOb2RlLmluc2VydEJlZm9yZSgkYm9keS5maW5kKCcjdHdpbmtsZS13YXJuLXdhcm5pbmctbWVzc2FnZXMnKSk7XG5cdFx0XHRcdFx0XHRcdC8vIElmIGEgcHJldmlldyB3YXMgb3BlbmVkIHdoaWxlIGluIGEgZGlmZmVyZW50IG1vZGUsIGNsb3NlIGl0XG5cdFx0XHRcdFx0XHRcdC8vIFNob3VsZCBudWxsaWZ5IHRoZSBuZWVkIHRvIGNhdGNoIHRoZSBlcnJvciBpbiBwcmV2aWV3IGNhbGxiYWNrXG5cdFx0XHRcdFx0XHRcdGUudGFyZ2V0LnJvb3QucHJldmlld2VyLmNsb3NlUHJldmlldygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCd0d2lua2xld2Fybu+8muacquefpeeahOitpuWRiue7hCcsICd0d2lua2xld2Fybu+8muacquefpeeahOitpuWRiue1hCcpLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGV3YXJuJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBUcmlnZ2VyIHN1YmNhdGVnb3J5IGNoYW5nZSwgYWRkIHNlbGVjdCBtZW51LCBldGMuXG5cdFx0Ly8gSGVyZSBiZWNhdXNlIG9mIHRoZSBhc3luYyBsb2FkIGZvciBhdXRvbGV2ZWxcblx0XHRpZiAodmFsdWUgIT09ICdhdXRvbGV2ZWwnKSB7XG5cdFx0XHQvLyByZXNldCBhbnkgYXV0b2xldmVsLXNwZWNpZmljIG1lc3NhZ2VzIHdoaWxlIHdlJ3JlIGhlcmVcblx0XHRcdCRib2R5LmZpbmQoJyN0d2lua2xlLXdhcm4tYXV0b2xldmVsLW1lc3NhZ2UnKS5yZW1vdmUoKTtcblx0XHRcdFR3aW5rbGUud2Fybi5jYWxsYmFjay5wb3N0Q2F0ZWdvcnlDbGVhbnVwKGUpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS53YXJuLmNhbGxiYWNrLnBvc3RDYXRlZ29yeUNsZWFudXAgPSAoZSkgPT4ge1xuXHRcdC8vIGNsZWFyIG92ZXJyaWRkZW4gbGFiZWwgb24gYXJ0aWNsZSB0ZXh0Ym94XG5cdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRUb29sdGlwVmlzaWJpbGl0eShlLnRhcmdldC5yb290LmFydGljbGUsIHRydWUpO1xuXHRcdE1vcmViaXRzLnF1aWNrRm9ybS5yZXNldEVsZW1lbnRMYWJlbChlLnRhcmdldC5yb290LmFydGljbGUpO1xuXHRcdC8vIFRyaWdnZXIgY3VzdG9tIGxhYmVsL2NoYW5nZSBvbiBtYWluIGNhdGVnb3J5IGNoYW5nZVxuXHRcdFR3aW5rbGUud2Fybi5jYWxsYmFjay5jaGFuZ2Vfc3ViY2F0ZWdvcnkoZSk7XG5cdFx0Ly8gVXNlIHNlbGVjdDIgdG8gbWFrZSB0aGUgc2VsZWN0IG1lbnUgc2VhcmNoYWJsZVxuXHRcdGlmICghVHdpbmtsZS5nZXRQcmVmKCdvbGRTZWxlY3QnKSkge1xuXHRcdFx0JGJvZHlcblx0XHRcdFx0LmZpbmQoJ3NlbGVjdFtuYW1lPXN1Yl9ncm91cF0nKVxuXHRcdFx0XHQuc2VsZWN0Mih7XG5cdFx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0XHRtYXRjaGVyOiBNb3JlYml0cy5zZWxlY3QyLm1hdGNoZXJzLm9wdGdyb3VwRnVsbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3VsdDogTW9yZWJpdHMuc2VsZWN0Mi5oaWdobGlnaHRTZWFyY2hNYXRjaGVzLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiB7XG5cdFx0XHRcdFx0XHRzZWFyY2hpbmc6IE1vcmViaXRzLnNlbGVjdDIucXVlcnlJbnRlcmNlcHRvcixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2hhbmdlKFR3aW5rbGUud2Fybi5jYWxsYmFjay5jaGFuZ2Vfc3ViY2F0ZWdvcnkpO1xuXHRcdFx0JGJvZHkuZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uJykub24oJ2tleWRvd24nLCBNb3JlYml0cy5zZWxlY3QyLmF1dG9TdGFydCkudHJpZ2dlcignZm9jdXMnKTtcblx0XHRcdG13LnV0aWwuYWRkQ1NTKFxuXHRcdFx0XHQvKiBJbmNyZWFzZSBoZWlnaHQ7XG5cdFx0XHRcdCAqIFJlZHVjZSBwYWRkaW5nO1xuXHRcdFx0XHQgKiBBZGp1c3QgZm9udCBzaXplLlxuXHRcdFx0XHQgKiAqL1xuXHRcdFx0XHQnLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWRyb3Bkb3duIC5zZWxlY3QyLXJlc3VsdHM+LnNlbGVjdDItcmVzdWx0c19fb3B0aW9uc3ttYXgtaGVpZ2h0OjM1MHB4fS5zZWxlY3QyLXJlc3VsdHMgLnNlbGVjdDItcmVzdWx0c19fZ3JvdXAsLnNlbGVjdDItcmVzdWx0cyAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb257cGFkZGluZy10b3A6MXB4O3BhZGRpbmctYm90dG9tOjFweH0uc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItZHJvcGRvd24gLnNlbGVjdDItcmVzdWx0cywuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdGlvbiAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVke2ZvbnQtc2l6ZToxM3B4fSdcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLndhcm4uY2FsbGJhY2suY2hhbmdlX3N1YmNhdGVnb3J5ID0gKGUpID0+IHtcblx0XHRjb25zdCBtYWluX2dyb3VwID0gZS50YXJnZXQuZm9ybS5tYWluX2dyb3VwLnZhbHVlO1xuXHRcdGNvbnN0IHt2YWx1ZX0gPSBlLnRhcmdldC5mb3JtLnN1Yl9ncm91cDtcblx0XHQvLyBUYWdzIHRoYXQgZG9uJ3QgdGFrZSBhIGxpbmtlZCBhcnRpY2xlLCBidXQgc29tZXRoaW5nIGVsc2UgKG9mdGVuIGEgdXNlcm5hbWUpLlxuXHRcdC8vIFRoZSB2YWx1ZSBvZiBlYWNoIHRhZyBpcyB0aGUgbGFiZWwgbmV4dCB0byB0aGUgaW5wdXQgZmllbGRcblx0XHRjb25zdCBub3RMaW5rZWRBcnRpY2xlID0ge1xuXHRcdFx0J3V3LWJpdGUnOiB3aW5kb3cud2dVTFMoJ+iiq+KAnOWSrOWIsOKAneeahOeUqOaIt++8iOS4jeWQq1VzZXI677yJICcsICfooqvjgIzlkqzliLDjgI3nmoTkvb/nlKjogIXvvIjkuI3lkKtVc2VyOu+8iSAnKSxcblx0XHRcdCd1dy1haXYnOiB3aW5kb3cud2dVTFMoJ+WPr+mAiei+k+WFpeiiq+itpuWRiueahOeUqOaIt+WQje+8iOS4jeWQq1VzZXI677yJICcsICflj6/pgbjovLjlhaXooqvorablkYrnmoTkvb/nlKjogIXlkI3nqLHvvIjkuI3lkKtVc2VyOu+8iSAnKSxcblx0XHR9O1xuXHRcdGlmIChbJ3NpbmdsZW5vdGljZScsICdzaW5nbGV3YXJuJywgJ3NpbmdsZWNvbWJpbmVkJywgJ2tpdGNoZW5zaW5rJ10uaW5jbHVkZXMobWFpbl9ncm91cCkpIHtcblx0XHRcdGlmIChub3RMaW5rZWRBcnRpY2xlW3ZhbHVlXSkge1xuXHRcdFx0XHRpZiAoVHdpbmtsZS53YXJuLnByZXZfYXJ0aWNsZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFR3aW5rbGUud2Fybi5wcmV2X2FydGljbGUgPSBlLnRhcmdldC5mb3JtLmFydGljbGUudmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZS50YXJnZXQuZm9ybS5hcnRpY2xlLm5vdEFydGljbGUgPSB0cnVlO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmFydGljbGUudmFsdWUgPSAnJztcblx0XHRcdFx0Ly8gY2hhbmdlIGZvcm0gbGFiZWxzIGFjY29yZGluZyB0byB0aGUgd2FybmluZyBzZWxlY3RlZFxuXHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFRvb2x0aXBWaXNpYmlsaXR5KGUudGFyZ2V0LmZvcm0uYXJ0aWNsZSwgZmFsc2UpO1xuXHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0ub3ZlcnJpZGVFbGVtZW50TGFiZWwoZS50YXJnZXQuZm9ybS5hcnRpY2xlLCBub3RMaW5rZWRBcnRpY2xlW3ZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKGUudGFyZ2V0LmZvcm0uYXJ0aWNsZS5ub3RBcnRpY2xlKSB7XG5cdFx0XHRcdGlmIChUd2lua2xlLndhcm4ucHJldl9hcnRpY2xlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0ZS50YXJnZXQuZm9ybS5hcnRpY2xlLnZhbHVlID0gVHdpbmtsZS53YXJuLnByZXZfYXJ0aWNsZTtcblx0XHRcdFx0XHRUd2lua2xlLndhcm4ucHJldl9hcnRpY2xlID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmFydGljbGUubm90QXJ0aWNsZSA9IGZhbHNlO1xuXHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFRvb2x0aXBWaXNpYmlsaXR5KGUudGFyZ2V0LmZvcm0uYXJ0aWNsZSwgdHJ1ZSk7XG5cdFx0XHRcdE1vcmViaXRzLnF1aWNrRm9ybS5yZXNldEVsZW1lbnRMYWJlbChlLnRhcmdldC5mb3JtLmFydGljbGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBhZGQgYmlnIHJlZCBub3RpY2UsIHdhcm5pbmcgdXNlcnMgYWJvdXQgaG93IHRvIHVzZSB7e3V3LVtjb2ktXXVzZXJuYW1lfX0gYXBwcm9wcmlhdGVseVxuXHRcdCRib2R5LmZpbmQoJyN0dy13YXJuLXJlZC1ub3RpY2UnKS5yZW1vdmUoKTtcblx0fTtcblx0VHdpbmtsZS53YXJuLmNhbGxiYWNrcyA9IHtcblx0XHRnZXRXYXJuaW5nV2lraXRleHQ6ICh0ZW1wbGF0ZU5hbWUsIGFydGljbGUsIHJlYXNvbiwgaXNDdXN0b20sIG5vU2lnbikgPT4ge1xuXHRcdFx0bGV0IHRleHQgPSAne3snLmNvbmNhdCgnc3Vic3Q6JywgdGVtcGxhdGVOYW1lKTtcblx0XHRcdC8vIGFkZCBsaW5rZWQgYXJ0aWNsZSBmb3IgdXNlciB3YXJuaW5nc1xuXHRcdFx0aWYgKGFydGljbGUpIHtcblx0XHRcdFx0dGV4dCArPSBgfDE9JHthcnRpY2xlfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVhc29uKSB7XG5cdFx0XHRcdC8vIGFkZCBleHRyYSBtZXNzYWdlXG5cdFx0XHRcdHRleHQgKz0gYHwyPSR7cmVhc29ufWA7XG5cdFx0XHR9XG5cdFx0XHR0ZXh0ICs9ICd8c3Vic3Q9Jy5jb25jYXQoJ3N1YnN0OicpO1xuXHRcdFx0aWYgKCFub1NpZ24pIHtcblx0XHRcdFx0dGV4dCArPSAnfHNpZz1+ficuY29uY2F0KCd+ficpO1xuXHRcdFx0fVxuXHRcdFx0dGV4dCArPSAnfX0nO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fSxcblx0XHRzaG93UHJldmlldzogKGZvcm0sIHRlbXBsYXRlbmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgaW5wdXQgPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0SW5wdXREYXRhKGZvcm0pO1xuXHRcdFx0Ly8gUHJvdmlkZWQgb24gYXV0b2xldmVsLCBub3Qgb3RoZXJ3aXNlXG5cdFx0XHR0ZW1wbGF0ZW5hbWUgfHw9IGlucHV0LnN1Yl9ncm91cDtcblx0XHRcdGNvbnN0IGxpbmtlZGFydGljbGUgPSBpbnB1dC5hcnRpY2xlO1xuXHRcdFx0Y29uc3QgdGVtcGxhdGV0ZXh0ID0gVHdpbmtsZS53YXJuLmNhbGxiYWNrcy5nZXRXYXJuaW5nV2lraXRleHQoXG5cdFx0XHRcdHRlbXBsYXRlbmFtZSxcblx0XHRcdFx0bGlua2VkYXJ0aWNsZSxcblx0XHRcdFx0aW5wdXQucmVhc29uLFxuXHRcdFx0XHRpbnB1dC5tYWluX2dyb3VwID09PSAnY3VzdG9tJ1xuXHRcdFx0KTtcblx0XHRcdGZvcm0ucHJldmlld2VyLmJlZ2luUmVuZGVyKHRlbXBsYXRldGV4dCwgYFVzZXJfdGFsazoke3JlbGV2YW50VXNlck5hbWV9YCk7IC8vIEZvcmNlIHdpa2l0ZXh0L2NvcnJlY3QgdXNlcm5hbWVcblx0XHR9LFxuXG5cdFx0Ly8gSnVzdCBhIHBhc3MtdGhyb3VnaCB1bmxlc3MgdGhlIGF1dG9sZXZlbCBvcHRpb24gd2FzIHNlbGVjdGVkXG5cdFx0cHJldmlldzogKGZvcm0pID0+IHtcblx0XHRcdGlmIChmb3JtLm1haW5fZ3JvdXAudmFsdWUgPT09ICdhdXRvbGV2ZWwnKSB7XG5cdFx0XHRcdC8vIEFsd2F5cyBnZXQgYSBuZXcsIHVwZGF0ZWQgdGFsa3BhZ2UgZm9yIGF1dG9sZXZlbCBwcm9jZXNzaW5nXG5cdFx0XHRcdGNvbnN0IHVzZXJ0YWxrX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdGBVc2VyX3RhbGs6JHtyZWxldmFudFVzZXJOYW1lfWAsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDovb3kuIrmrKHorablkYonLCAn6LyJ5YWl5LiK5qyh6K2m5ZGKJylcblx0XHRcdFx0KTtcblx0XHRcdFx0dXNlcnRhbGtfcGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdC8vIFdpbGwgZmFpbCBzaWxlbnRseSBpZiB0aGUgdGFsayBwYWdlIGlzIGEgY3Jvc3MtbnMgcmVkaXJlY3QsXG5cdFx0XHRcdC8vIHJlbW92YWwgb2YgdGhlIHByZXZpZXcgYm94IGhhbmRsZWQgd2hlbiBsb2FkaW5nIHRoZSBtZW51XG5cdFx0XHRcdHVzZXJ0YWxrX3BhZ2UubG9hZCgocGFnZW9iaikgPT4ge1xuXHRcdFx0XHRcdFR3aW5rbGUud2Fybi50YWxrcGFnZU9iaiA9IHBhZ2VvYmo7IC8vIFVwZGF0ZSB0YWxrcGFnZU9ialxuXHRcdFx0XHRcdGNvbnN0IHdpa2l0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRcdC8vIGhpc3Rvcnkgbm90IG5lZWRlZCBmb3IgYXV0b2xldmVsXG5cdFx0XHRcdFx0Y29uc3QgW2xhdGVzdF0gPSBUd2lua2xlLndhcm4uY2FsbGJhY2tzLmRhdGVQcm9jZXNzaW5nKHdpa2l0ZXh0KTtcblx0XHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRzdWJfZ3JvdXA6IGZvcm0uc3ViX2dyb3VwLnZhbHVlLFxuXHRcdFx0XHRcdFx0YXJ0aWNsZTogZm9ybS5hcnRpY2xlLnZhbHVlLFxuXHRcdFx0XHRcdFx0bWVzc2FnZURhdGE6ICQoZm9ybS5zdWJfZ3JvdXApXG5cdFx0XHRcdFx0XHRcdC5maW5kKGBvcHRpb25bdmFsdWU9XCIkeyQoZm9ybS5zdWJfZ3JvdXApLnZhbCgpfVwiXWApXG5cdFx0XHRcdFx0XHRcdC5kYXRhKCdtZXNzYWdlRGF0YScpLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgW3RlbXBsYXRlXSA9IFR3aW5rbGUud2Fybi5jYWxsYmFja3MuYXV0b2xldmVsUGFyc2VXaWtpdGV4dCh3aWtpdGV4dCwgcGFyYW1zLCBsYXRlc3QpO1xuXHRcdFx0XHRcdFR3aW5rbGUud2Fybi5jYWxsYmFja3Muc2hvd1ByZXZpZXcoZm9ybSwgdGVtcGxhdGUpO1xuXHRcdFx0XHRcdC8vIElmIHRoZSB0ZW1wbGF0ZXMgaGF2ZSBkaXZlcmdlZCwgZmFrZSBhIGNoYW5nZSBldmVudFxuXHRcdFx0XHRcdC8vIHRvIHJlbG9hZCB0aGUgbWVudSB3aXRoIHRoZSB1cGRhdGVkIHBhZ2VvYmpcblx0XHRcdFx0XHRpZiAoZm9ybS5zdWJfZ3JvdXAudmFsdWUgIT09IHRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRcdFx0XHRcdGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdFx0Zm9ybS5tYWluX2dyb3VwLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0VHdpbmtsZS53YXJuLmNhbGxiYWNrcy5zaG93UHJldmlldyhmb3JtKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFVzZWQgaW4gdGhlIG1haW4gYW5kIGF1dG9sZXZlbCBsb29wcyB0byBkZXRlcm1pbmUgd2hlbiB0byB3YXJuXG5cdFx0ICogYWJvdXQgZXhjZXNzaXZlbHkgcmVjZW50LCBzdGFsZSwgb3IgaWRlbnRpY2FsIHdhcm5pbmdzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHdpa2l0ZXh0ICBUaGUgdGV4dCBvZiBhIHVzZXIncyB0YWxrIHBhZ2UsIGZyb20gZ2V0UGFnZVRleHQoKVxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3RbXX0gLSBBcnJheSBvZiBvYmplY3RzOiBsYXRlc3QgY29udGFpbnMgbW9zdCByZWNlbnRcblx0XHQgKiB3YXJuaW5nIGFuZCBkYXRlOyBoaXN0b3J5IGxpc3RzIGFsbCBwcmlvciB3YXJuaW5nc1xuXHRcdCAqL1xuXHRcdGRhdGVQcm9jZXNzaW5nOiAod2lraXRleHQpID0+IHtcblx0XHRcdGNvbnN0IGhpc3RvcnlfcmUgPVxuXHRcdFx0XHQvPCEtLVxccz9UZW1wbGF0ZTooW3VVXXctLio/KVxccz8tLT4uKj8oXFxkezR9KeW5tChcXGR7MSwyfSnmnIgoXFxkezEsMn0p5pelIFxcKFvml6XkuIDkuozkuInlm5vkupTlha1dXFwpIChcXGR7MSwyfSk6KFxcZHsxLDJ9KSBcXChDU1RcXCkvZztcblx0XHRcdGNvbnN0IGhpc3RvcnkgPSB7fTtcblx0XHRcdGNvbnN0IGxhdGVzdCA9IHtcblx0XHRcdFx0ZGF0ZTogbmV3IE1vcmViaXRzLmRhdGUoMCksXG5cdFx0XHRcdHR5cGU6ICcnLFxuXHRcdFx0fTtcblx0XHRcdGxldCBjdXJyZW50O1xuXHRcdFx0d2hpbGUgKChjdXJyZW50ID0gaGlzdG9yeV9yZS5leGVjKHdpa2l0ZXh0KSkgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgWywgdGVtcGxhdGVdID0gY3VycmVudDtcblx0XHRcdFx0Y29uc3QgY3VycmVudF9kYXRlID0gbmV3IE1vcmViaXRzLmRhdGUoXG5cdFx0XHRcdFx0YCR7Y3VycmVudFsyXX0tJHtjdXJyZW50WzNdfS0ke2N1cnJlbnRbNF19ICR7Y3VycmVudFs1XX06JHtjdXJyZW50WzZdfSAoQ1NUKWBcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCEodGVtcGxhdGUgaW4gaGlzdG9yeSkgfHwgaGlzdG9yeVt0ZW1wbGF0ZV0uaXNCZWZvcmUoY3VycmVudF9kYXRlKSkge1xuXHRcdFx0XHRcdGhpc3RvcnlbdGVtcGxhdGVdID0gY3VycmVudF9kYXRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghbGF0ZXN0LmRhdGUuaXNBZnRlcihjdXJyZW50X2RhdGUpKSB7XG5cdFx0XHRcdFx0bGF0ZXN0LmRhdGUgPSBjdXJyZW50X2RhdGU7XG5cdFx0XHRcdFx0bGF0ZXN0LnR5cGUgPSB0ZW1wbGF0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtsYXRlc3QsIGhpc3RvcnldO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogTWFpbiBsb29wIGZvciBkZWNpZGluZyB3aGF0IHRoZSBsZXZlbCBzaG91bGQgaW5jcmVtZW50IHRvLiBNb3N0IG9mXG5cdFx0ICogdGhpcyBpcyByZWFsbHkganVzdCBlcnJvciBjYXRjaGluZyBhbmQgdXBkYXRpbmcgdGhlIHN1YnNlcXVlbnQgZGF0YS5cblx0XHQgKiBNYXkgcHJvZHVjZSB1cCB0byB0d28gbm90aWNlcyBpbiBhIHR3aW5rbGUtd2Fybi1hdXRvbGV2ZWwtbWVzc2FnZXMgZGl2XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gd2lraXRleHQgIFRoZSB0ZXh0IG9mIGEgdXNlcidzIHRhbGsgcGFnZSwgZnJvbSBnZXRQYWdlVGV4dCgpIChyZXF1aXJlZClcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zICBQYXJhbXMgb2JqZWN0OiBzdWJfZ3JvdXAgaXMgdGhlIHRlbXBsYXRlIChyZXF1aXJlZCk7XG5cdFx0ICogYXJ0aWNsZSBpcyB0aGUgdXNlci1wcm92aWRlZCBhcnRpY2xlIChmb3JtLmFydGljbGUpIHVzZWQgdG8gbGluayBBUlYgb24gcmVjZW50IGxldmVsMiB3YXJuaW5ncztcblx0XHQgKiBtZXNzYWdlRGF0YSBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBnZXR0aW5nIHRoZSBmdWxsIHRlbXBsYXRlLCBhcyBpdCdzXG5cdFx0ICogdXNlZCB0byBlbnN1cmUgYSB2YWxpZCB0ZW1wbGF0ZSBvZiB0aGF0IGxldmVsIGV4aXN0c1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBsYXRlc3QgIEZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IHJldHVybmVkIGZyb21cblx0XHQgKiBkYXRlUHJvY2Vzc2luZy4gUHJvdmlkZWQgaGVyZSByYXRoZXIgdGhhbiBwcm9jZXNzZWQgd2l0aGluIHRvIGF2b2lkXG5cdFx0ICogcmVwZWF0ZWQgY2FsbCB0byBkYXRlUHJvY2Vzc2luZ1xuXHRcdCAqIEBwYXJhbSB7KERhdGV8TW9yZWJpdHMuZGF0ZSl9IGRhdGUgIERhdGUgZnJvbSB3aGljaCBzdGFsZW5lc3MgaXMgZGV0ZXJtaW5lZFxuXHRcdCAqIEBwYXJhbSB7TW9yZWJpdHMuc3RhdHVzfSBzdGF0ZWxlbSAgU3RhdHVzIGVsZW1lbnQsIG9ubHkgdXNlZCBmb3IgaGFuZGxpbmcgZXJyb3IgaW4gZmluYWwgZXhlY3V0aW9uXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7QXJyYXl9IC0gQXJyYXkgdGhhdCBjb250YWlucyB0aGUgZnVsbCB0ZW1wbGF0ZSBhbmQganVzdCB0aGUgd2FybmluZyBsZXZlbFxuXHRcdCAqL1xuXHRcdGF1dG9sZXZlbFBhcnNlV2lraXRleHQ6ICh3aWtpdGV4dCwgcGFyYW1zLCBsYXRlc3QsIGRhdGUsIHN0YXRlbGVtKSA9PiB7XG5cdFx0XHRsZXQgbGV2ZWw7IC8vIHVuZGVmaW5lZCByYXRoZXIgdGhhbiAnJyBtZWFucyB0aGUgaXNOYU4gYmVsb3cgd2lsbCByZXR1cm4gdHJ1ZVxuXHRcdFx0aWYgKC9cXGQ/JC8udGVzdChsYXRlc3QudHlwZSkpIHtcblx0XHRcdFx0Ly8gbGV2ZWwxLTJcblx0XHRcdFx0bGV2ZWwgPSBOdW1iZXIucGFyc2VJbnQobGF0ZXN0LnR5cGUucmVwbGFjZSgvLiooXFxkKT8kLywgJyQxJyksIDEwKTtcblx0XHRcdH0gZWxzZSBpZiAobGF0ZXN0LnR5cGUpIHtcblx0XHRcdFx0bGV2ZWwgPSAxOyAvLyBzaW5nbGVub3RpY2Ugb3Igbm90IGZvdW5kXG5cdFx0XHR9XG5cdFx0XHRjb25zdCAkYXV0b2xldmVsTWVzc2FnZSA9ICQoJzxkaXY+JykuYXR0cignaWQnLCAndHdpbmtsZS13YXJuLWF1dG9sZXZlbC1tZXNzYWdlJyk7XG5cdFx0XHRpZiAoTnVtYmVyLmlzTmFOKGxldmVsKSkge1xuXHRcdFx0XHQvLyBObyBwcmlvciB3YXJuaW5ncyBmb3VuZCwgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRcdFx0bGV2ZWwgPSAxO1xuXHRcdFx0fSBlbHNlIGlmIChsZXZlbCA+IDIgfHwgbGV2ZWwgPCAxKSB7XG5cdFx0XHRcdC8vIFNob3VsZG4ndCBoYXBwZW5cblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5peg5rOV6Kej5p6Q5LiK5qyh55qE6K2m5ZGK5bGC57qn77yM6K+35omL5Yqo6YCJ5oup5LiA5Liq6K2m5ZGK5bGC57qn44CCJyxcblx0XHRcdFx0XHQn54Sh5rOV6Kej5p6Q5LiK5qyh55qE6K2m5ZGK5bGk57Sa77yM6KuL5omL5YuV6YG45pOH5LiA5YCL6K2m5ZGK5bGk57Sa44CCJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoc3RhdGVsZW0pIHtcblx0XHRcdFx0XHRzdGF0ZWxlbS5lcnJvcihtZXNzYWdlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtdy5ub3RpZnkobWVzc2FnZSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXdhcm4nLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGUgfHw9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdGNvbnN0IGF1dG9UaW1lb3V0ID0gbmV3IE1vcmViaXRzLmRhdGUobGF0ZXN0LmRhdGUuZ2V0VGltZSgpKS5hZGQoXG5cdFx0XHRcdFx0TnVtYmVyLnBhcnNlSW50KFR3aW5rbGUuZ2V0UHJlZignYXV0b2xldmVsU3RhbGVEYXlzJyksIDEwKSxcblx0XHRcdFx0XHQnZGF5J1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYXV0b1RpbWVvdXQuaXNBZnRlcihkYXRlKSkge1xuXHRcdFx0XHRcdGlmIChsZXZlbCA9PT0gMikge1xuXHRcdFx0XHRcdFx0bGV2ZWwgPSAyO1xuXHRcdFx0XHRcdFx0Ly8gQmFzaWNhbGx5IGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBmaW5hbCBNYWluIGV2YWx1YXRpb24gb3Igbm90LFxuXHRcdFx0XHRcdFx0Ly8gYW5kIHRodXMgd2hldGhlciB3ZSBjYW4gY29udGludWUgb3IgbmVlZCB0byBkaXNwbGF5IHRoZSB3YXJuaW5nIGFuZCBsaW5rXG5cdFx0XHRcdFx0XHRpZiAoIXN0YXRlbGVtKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0ICRsaW5rID0gJCgnPGE+Jylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignaHJlZicsICcjJylcblx0XHRcdFx0XHRcdFx0XHQudGV4dCh3aW5kb3cud2dVTFMoJ+WNleWHu+atpOWkhOaJk+W8gOWRiueKtuW3peWFtycsICfpu57mk4rmraTomZXmiZPplovlkYrni4Dlt6XlhbcnKSlcblx0XHRcdFx0XHRcdFx0XHQuY3NzKCdmb250LXdlaWdodCcsICdib2xkJylcblx0XHRcdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0VHdpbmtsZS53YXJuLmRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0VHdpbmtsZS5hcnYuY2FsbGJhY2socmVsZXZhbnRVc2VyTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQkYm9keS5maW5kKCdpbnB1dFtuYW1lPXBhZ2VdJykudmFsKHBhcmFtcy5hcnRpY2xlKTsgLy8gVGFyZ2V0IHBhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdCRib2R5LmZpbmQoJ2lucHV0W3ZhbHVlPWZpbmFsXScpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTsgLy8gVmFuZGFsaXNtIGFmdGVyIGZpbmFsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RhdHVzTm9kZSA9ICQoJzxkaXY+Jylcblx0XHRcdFx0XHRcdFx0XHQuY3NzKCdjb2xvcicsICcjZjAwJylcblx0XHRcdFx0XHRcdFx0XHQudGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdHJlbGV2YW50VXNlck5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+acgOWQjuaUtuWIsOS6huS4gOS4quWxgue6pzLorablkYrvvIgnLCAn5pyA5b6M5pS25Yiw5LqG5LiA5YCL5bGk57SaMuitpuWRiu+8iCcpICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGF0ZXN0LnR5cGUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J++8ie+8jOaJgOS7peWwhuWFtuaKpeWRiue7meeuoeeQhuS6uuWRmOS8muavlOi+g+Wlve+8mycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J++8ie+8jOaJgOS7peWwh+WFtuWgseWRiue1pueuoeeQhuS6uuWToeacg+avlOi8g+Wlve+8mydcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHN0YXR1c05vZGUuYXBwZW5kKCRsaW5rWzBdKTtcblx0XHRcdFx0XHRcdFx0JGF1dG9sZXZlbE1lc3NhZ2UuYXBwZW5kKHN0YXR1c05vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBBdXRvbWF0aWNhbGx5IGluY3JlYXNlIHNldmVyaXR5XG5cdFx0XHRcdFx0XHRsZXZlbCArPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBSZXNldCB3YXJuaW5nIGxldmVsIGlmIG1vc3QtcmVjZW50IHdhcm5pbmcgaXMgdG9vIG9sZFxuXHRcdFx0XHRcdGxldmVsID0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0JGF1dG9sZXZlbE1lc3NhZ2UucHJlcGVuZChcblx0XHRcdFx0JChcblx0XHRcdFx0XHRgPGRpdj4ke3dpbmRvdy53Z1VMUygn5bCG5Y+R6YCBJywgJ+Wwh+eZvOmAgScpfTxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+JHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5bGC57qnJyxcblx0XHRcdFx0XHRcdCflsaTntJonXG5cdFx0XHRcdFx0KX0ke2xldmVsfTwvc3Bhbj7orablkYrmqKHmnb/jgII8L2Rpdj5gXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHQvLyBQbGFjZSBhZnRlciB0aGUgc3RhbGUgYW5kIG90aGVyLXVzZXItcmV2ZXJ0ZWQgKHRleHQtb25seSkgbWVzc2FnZXNcblx0XHRcdCRib2R5LmZpbmQoJyN0d2lua2xlLXdhcm4tYXV0b2xldmVsLW1lc3NhZ2UnKS5yZW1vdmUoKTsgLy8gY2xlYW4gc2xhdGVcblx0XHRcdCRhdXRvbGV2ZWxNZXNzYWdlLmluc2VydEFmdGVyKCRib2R5LmZpbmQoJyN0d2lua2xlLXdhcm4td2FybmluZy1tZXNzYWdlcycpKTtcblx0XHRcdGxldCB0ZW1wbGF0ZSA9IHBhcmFtcy5zdWJfZ3JvdXAucmVwbGFjZSgvKC4qKVxcZCQvLCAnJDEnKTtcblx0XHRcdC8vIFZhbGlkYXRlIHdhcm5pbmcgbGV2ZWwsIGZhbGxpbmcgYmFjayB0byB0aGUgdXctZ2VuZXJpYyBzZXJpZXMuXG5cdFx0XHQvLyBPbmx5IGEgZmV3IGl0ZW1zIGFyZSBtaXNzaW5nIGEgbGV2ZWwsIGFuZCBpbiBhbGwgYnV0IGEgaGFuZGZ1bFxuXHRcdFx0Ly8gb2YgY2FzZXMsIHRoZSB1dy1nZW5lcmljIHNlcmllcyBpcyBleHBsaWNpdGx5IHVzZWQgZWxzZXdoZXJlLlxuXHRcdFx0aWYgKHBhcmFtcy5tZXNzYWdlRGF0YSAmJiAhcGFyYW1zLm1lc3NhZ2VEYXRhW2BsZXZlbCR7bGV2ZWx9YF0pIHtcblx0XHRcdFx0dGVtcGxhdGUgPSAndXctZ2VuZXJpYyc7XG5cdFx0XHR9XG5cdFx0XHR0ZW1wbGF0ZSArPSBsZXZlbDtcblx0XHRcdHJldHVybiBbdGVtcGxhdGUsIGxldmVsXTtcblx0XHR9LFxuXHRcdG1haW46IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3Qgc3RhdGVsZW0gPSBwYWdlb2JqLmdldFN0YXR1c0VsZW1lbnQoKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRsZXQge21lc3NhZ2VEYXRhfSA9IHBhcmFtcztcblx0XHRcdGNvbnN0IHdhcm5pbmdIaXN0b3J5ID0gVHdpbmtsZS53YXJuLmNhbGxiYWNrcy5kYXRlUHJvY2Vzc2luZyh0ZXh0KTtcblx0XHRcdGNvbnN0IFtsYXRlc3QsIGhpc3RvcnldID0gd2FybmluZ0hpc3Rvcnk7XG5cdFx0XHRjb25zdCBub3cgPSBuZXcgTW9yZWJpdHMuZGF0ZShwYWdlb2JqLmdldExvYWRUaW1lKCkpO1xuXHRcdFx0VHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqID0gcGFnZW9iajsgLy8gVXBkYXRlIHRhbGtwYWdlT2JqLCBqdXN0IGluIGNhc2Vcblx0XHRcdGlmIChwYXJhbXMubWFpbl9ncm91cCA9PT0gJ2F1dG9sZXZlbCcpIHtcblx0XHRcdFx0Ly8gW3RlbXBsYXRlLCBsZXZlbF1cblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVBbmRMZXZlbCA9IFR3aW5rbGUud2Fybi5jYWxsYmFja3MuYXV0b2xldmVsUGFyc2VXaWtpdGV4dChcblx0XHRcdFx0XHR0ZXh0LFxuXHRcdFx0XHRcdHBhcmFtcyxcblx0XHRcdFx0XHRsYXRlc3QsXG5cdFx0XHRcdFx0bm93LFxuXHRcdFx0XHRcdHN0YXRlbGVtXG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8vIE9ubHkgaWYgdGhlcmUncyBhIGNoYW5nZSBmcm9tIHRoZSBwcmlvciBkaXNwbGF5L2xvYWRcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHBhcmFtcy5zdWJfZ3JvdXAgIT09IHRlbXBsYXRlQW5kTGV2ZWxbMF0gJiZcblx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG5Y+R6YCB57uZ55So5oi3e3snLCAn5bCH55m86YCB57Wm5L2/55So6ICFe3snKSArXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlQW5kTGV2ZWxbMF0gK1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ3195qih5p2/77yM5aW95ZCX77yfJywgJ3195qih5p2/77yM5aW95ZeO77yfJylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn55So5oi35Y+W5raIJywgJ+S9v+eUqOiAheWPlua2iCcpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVXBkYXRlIHBhcmFtcyBub3cgdGhhdCB3ZSd2ZSBzZWxlY3RlZCBhIHdhcm5pbmdcblx0XHRcdFx0W3BhcmFtcy5zdWJfZ3JvdXBdID0gdGVtcGxhdGVBbmRMZXZlbDtcblx0XHRcdFx0bWVzc2FnZURhdGEgPSBwYXJhbXMubWVzc2FnZURhdGFbYGxldmVsJHt0ZW1wbGF0ZUFuZExldmVsWzFdfWBdO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0cGFyYW1zLnN1Yl9ncm91cCBpbiBoaXN0b3J5ICYmXG5cdFx0XHRcdG5ldyBNb3JlYml0cy5kYXRlKGhpc3RvcnlbcGFyYW1zLnN1Yl9ncm91cF0pLmFkZCgxLCAnZGF5JykuaXNBZnRlcihub3cpICYmXG5cdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6L+RMjTlsI/ml7blhoXkuIDkuKrlkIzmoLfnmoQgJywgJ+i/kTI05bCP5pmC5YWn5LiA5YCL5ZCM5qij55qEICcpICtcblx0XHRcdFx0XHRcdHBhcmFtcy5zdWJfZ3JvdXAgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCcg5qih5p2/5bey6KKr5Y+R5Ye644CCXFxu5piv5ZCm57un57ut77yfJywgJyDmqKHmnb/lt7Looqvnmbzlh7rjgIJcXG7mmK/lkKbnubznuozvvJ8nKVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfnlKjmiLflj5bmtognLCAn5L2/55So6ICF5Y+W5raIJykpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsYXRlc3QuZGF0ZS5hZGQoMSwgJ21pbnV0ZScpOyAvLyBhZnRlciBsb25nIGRlYmF0ZSwgb25lIG1pbnV0ZSBpcyBtYXhcblx0XHRcdGlmIChcblx0XHRcdFx0bGF0ZXN0LmRhdGUuaXNBZnRlcihub3cpICYmXG5cdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6L+RMeWIhumSn+WGhSAnLCAn6L+RMeWIhumQmOWFpyAnKSArXG5cdFx0XHRcdFx0XHRsYXRlc3QudHlwZSArXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDmqKHmnb/lt7Looqvlj5Hlh7rjgIJcXG7mmK/lkKbnu6fnu63vvJ8nLCAnIOaooeadv+W3suiiq+eZvOWHuuOAglxcbuaYr+WQpue5vOe6jO+8nycpXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRzdGF0ZWxlbS5lcnJvcih3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iCcsICfkvb/nlKjogIXlj5bmtognKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGJ1aWxkIHRoZSBlZGl0IHN1bW1hcnlcblx0XHRcdC8vIEZ1bmN0aW9uIHRvIGhhbmRsZSBnZW5lcmF0aW9uIG9mIHN1bW1hcnkgcHJlZml4IGZvciBjdXN0b20gdGVtcGxhdGVzXG5cdFx0XHRjb25zdCBjdXN0b21Qcm9jZXNzID0gKHRlbXBsYXRlKSA9PiB7XG5cdFx0XHRcdFt0ZW1wbGF0ZV0gPSB0ZW1wbGF0ZS5zcGxpdCgnfCcpO1xuXHRcdFx0XHRsZXQgcHJlZml4O1xuXHRcdFx0XHRzd2l0Y2ggKHRlbXBsYXRlLnNsaWNlKC0xKSkge1xuXHRcdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdFx0cHJlZml4ID0gJ+azqOaEjyc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICcyJzpcblx0XHRcdFx0XHRcdHByZWZpeCA9ICforablkYonO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gZmFsbHMgdGhyb3VnaFxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRwcmVmaXggPSAn5o+Q6YaSJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBgJHtwcmVmaXh977yaJHtNb3JlYml0cy5zdHJpbmcudG9VcHBlckNhc2VGaXJzdENoYXIobWVzc2FnZURhdGEubGFiZWwpfWA7XG5cdFx0XHR9O1xuXHRcdFx0bGV0IHN1bW1hcnk7XG5cdFx0XHRpZiAocGFyYW1zLm1haW5fZ3JvdXAgPT09ICdjdXN0b20nKSB7XG5cdFx0XHRcdHN1bW1hcnkgPSBjdXN0b21Qcm9jZXNzKHBhcmFtcy5zdWJfZ3JvdXApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gTm9ybWFsaXplIGtpdGNoZW5zaW5rIHRvIHRoZSAxLTIgc3R5bGVcblx0XHRcdFx0aWYgKHBhcmFtcy5tYWluX2dyb3VwID09PSAna2l0Y2hlbnNpbmsnICYmICEvXkQrJC8udGVzdChwYXJhbXMuc3ViX2dyb3VwKSkge1xuXHRcdFx0XHRcdGxldCBzdWIgPSBwYXJhbXMuc3ViX2dyb3VwLnNsaWNlKC0xKTtcblx0XHRcdFx0XHRpZiAoc3ViID09PSAnbScpIHtcblx0XHRcdFx0XHRcdHN1YiA9IHBhcmFtcy5zdWJfZ3JvdXAuc2xpY2UoLTMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBEb24ndCBvdmVyd3JpdGUgdXctM3JyLCB0ZWNobmljYWxseSB1bm5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICgvXFxkLy50ZXN0KHN1YikpIHtcblx0XHRcdFx0XHRcdHBhcmFtcy5tYWluX2dyb3VwID0gYGxldmVsJHtzdWJ9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gc2luZ2xldCB8fCBsZXZlbDEtMiwgbm8gbmVlZCB0byAvXlxcRCskLy50ZXN0KHBhcmFtcy5tYWluX2dyb3VwKVxuXHRcdFx0XHRzdW1tYXJ5ID1cblx0XHRcdFx0XHRtZXNzYWdlRGF0YS5zdW1tYXJ5IHx8IChtZXNzYWdlRGF0YVtwYXJhbXMubWFpbl9ncm91cF0gJiYgbWVzc2FnZURhdGFbcGFyYW1zLm1haW5fZ3JvdXBdLnN1bW1hcnkpO1xuXHRcdFx0XHQvLyBOb3QgaW4gVHdpbmtsZS53YXJuLm1lc3NhZ2VzLCBhc3N1bWUgY3VzdG9tIHRlbXBsYXRlXG5cdFx0XHRcdHN1bW1hcnkgfHw9IGN1c3RvbVByb2Nlc3MocGFyYW1zLnN1Yl9ncm91cCk7XG5cdFx0XHRcdGlmIChtZXNzYWdlRGF0YS5zdXBwcmVzc0FydGljbGVJblN1bW1hcnkgIT09IHRydWUgJiYgcGFyYW1zLmFydGljbGUpIHtcblx0XHRcdFx0XHRpZiAocGFyYW1zLnN1Yl9ncm91cCA9PT0gJ3V3LWFpdicpIHtcblx0XHRcdFx0XHRcdC8vIHRoZXNlIHRlbXBsYXRlcyByZXF1aXJlIGEgdXNlcm5hbWVcblx0XHRcdFx0XHRcdHN1bW1hcnkgKz0gYO+8iCR7d2luZG93LndnVUxTKCflr7nkuo4nLCAn5bCN5pa8Jyl9W1tVc2VyOiR7cGFyYW1zLmFydGljbGV9XV3vvIlgO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocGFyYW1zLnN1Yl9ncm91cCA9PT0gJ3V3LWJpdGUnKSB7XG5cdFx0XHRcdFx0XHQvLyB0aGlzIHRlbXBsYXRlIHJlcXVpcmVzIGEgdXNlcm5hbWVcblx0XHRcdFx0XHRcdHN1bW1hcnkgKz0gYO+8jCR7d2luZG93LndnVUxTKCfkuo4nLCAn5pa8Jyl9W1tVc2VyIHRhbGs6JHtwYXJhbXMuYXJ0aWNsZX1dXWA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN1bW1hcnkgKz0gYCR7d2luZG93LndnVUxTKCfvvIzkuo5bWycsICfvvIzmlrxbWycpICsgcGFyYW1zLmFydGljbGV9XV1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShzdW1tYXJ5KTtcblx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZW9iai5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFdhcm5pbmdzJykpO1xuXHRcdFx0Ly8gR2V0IGFjdHVhbCB3YXJuaW5nIHRleHRcblx0XHRcdGNvbnN0IHdhcm5pbmdUZXh0ID0gVHdpbmtsZS53YXJuLmNhbGxiYWNrcy5nZXRXYXJuaW5nV2lraXRleHQoXG5cdFx0XHRcdHBhcmFtcy5zdWJfZ3JvdXAsXG5cdFx0XHRcdHBhcmFtcy5hcnRpY2xlLFxuXHRcdFx0XHRwYXJhbXMucmVhc29uLFxuXHRcdFx0XHRwYXJhbXMubWFpbl9ncm91cCA9PT0gJ2N1c3RvbSdcblx0XHRcdCk7XG5cdFx0XHRsZXQgc2VjdGlvbkV4aXN0cyA9IGZhbHNlO1xuXHRcdFx0bGV0IHNlY3Rpb25OdW1iZXIgPSAwO1xuXHRcdFx0Ly8gT25seSBjaGVjayBzZWN0aW9ucyBpZiB0aGVyZSBhcmUgc2VjdGlvbnMgb3IgdGhlcmUncyBhIGNoYW5jZSB3ZSB3b24ndCBjcmVhdGUgb3VyIG93blxuXHRcdFx0aWYgKCFtZXNzYWdlRGF0YS5oZWFkaW5nICYmIHRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIEdldCBhbGwgc2VjdGlvbnNcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0ZXh0Lm1hdGNoKC9eKD09KikuK1xcMS9nbSk7XG5cdFx0XHRcdGlmIChzZWN0aW9ucyAmJiBzZWN0aW9ucy5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0XHQvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgc2VjdGlvbiBoZWFkZXIgaW4gcXVlc3Rpb25cblx0XHRcdFx0XHRjb25zdCBkYXRlSGVhZGVyUmVnZXggPSBub3cubW9udGhIZWFkZXJSZWdleCgpO1xuXHRcdFx0XHRcdHNlY3Rpb25OdW1iZXIgPSAwO1xuXHRcdFx0XHRcdC8vIEZpbmQgdGhpcyBtb250aCdzIHNlY3Rpb24gYW1vbmcgTDIgc2VjdGlvbnMsIHByZWZlcnJpbmcgdGhlIGJvdHRvbS1tb3N0XG5cdFx0XHRcdFx0c2VjdGlvbkV4aXN0cyA9IHNlY3Rpb25zLnJldmVyc2UoKS5zb21lKChzZWMsIGlkeCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0L14oPT0pW149XS4rXFwxL20udGVzdChzZWMpICYmXG5cdFx0XHRcdFx0XHRcdGRhdGVIZWFkZXJSZWdleC50ZXN0KHNlYykgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIChzZWN0aW9uTnVtYmVyID0gc2VjdGlvbnMubGVuZ3RoIC0gMSAtIGlkeCkgPT09ICdudW1iZXInXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2VjdGlvbkV4aXN0cykge1xuXHRcdFx0XHQvLyBhcHBlbmQgdG8gZXhpc3Rpbmcgc2VjdGlvblxuXHRcdFx0XHRwYWdlb2JqLnNldFBhZ2VTZWN0aW9uKHNlY3Rpb25OdW1iZXIgKyAxKTtcblx0XHRcdFx0cGFnZW9iai5zZXRBcHBlbmRUZXh0KGBcXG5cXG4ke3dhcm5pbmdUZXh0fWApO1xuXHRcdFx0XHRwYWdlb2JqLmFwcGVuZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG1lc3NhZ2VEYXRhLmhlYWRpbmcpIHtcblx0XHRcdFx0XHQvLyBjcmVhdGUgbmV3IHNlY3Rpb25cblx0XHRcdFx0XHRwYWdlb2JqLnNldE5ld1NlY3Rpb25UaXRsZShtZXNzYWdlRGF0YS5oZWFkaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmnKrmib7liLDlvZPmnIjnmoTkuoznuqfmoIfpopjvvIzlsIbliJvlu7rmlrDnmoQnLCAn5pyq5om+5Yiw55W25pyI55qE5LqM57Sa5qiZ6aGM77yM5bCH5bu656uL5paw55qEJylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHBhZ2VvYmouc2V0TmV3U2VjdGlvblRpdGxlKG5vdy5tb250aEhlYWRlcigwKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFnZW9iai5zZXROZXdTZWN0aW9uVGV4dCh3YXJuaW5nVGV4dCk7XG5cdFx0XHRcdHBhZ2VvYmoubmV3U2VjdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUud2Fybi5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgdXNlclRhbGtQYWdlID0gYFVzZXJfdGFsazoke3JlbGV2YW50VXNlck5hbWV9YDtcblx0XHQvLyByZWFzb24sIG1haW5fZ3JvdXAsIHN1Yl9ncm91cCwgYXJ0aWNsZVxuXHRcdGNvbnN0IHBhcmFtcyA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZS50YXJnZXQpO1xuXHRcdGlmIChwYXJhbXMuYXJ0aWNsZSkge1xuXHRcdFx0aWYgKC9odHRwcz86XFwvXFwvLy50ZXN0KHBhcmFtcy5hcnRpY2xlKSkge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfigJzpobXpnaLpk77mjqXigJ3kuI3og73kvb/nlKjnvZHlnYDjgIInLCAn44CM6aCB6Z2i6YCj57WQ44CN5LiN6IO95L2/55So57ay5Z2A44CCJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAnd2FybicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBhcnRpY2xlID0gbmV3IG13LlRpdGxlKHBhcmFtcy5hcnRpY2xlKTtcblx0XHRcdFx0cGFyYW1zLmFydGljbGUgPSBhcnRpY2xlLmdldFByZWZpeGVkVGV4dCgpO1xuXHRcdFx0XHRpZiAoYXJ0aWNsZS5nZXRGcmFnbWVudCgpKSB7XG5cdFx0XHRcdFx0cGFyYW1zLmFydGljbGUgKz0gYCMke2FydGljbGUuZ2V0RnJhZ21lbnQoKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0YWxlcnQoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+KAnOmhtemdoumTvuaOpeKAneS4jeWQiOazle+8jOS7heiDvei+k+WFpeS4gOS4qumhtemdouWQjeensO+8jOWLv+S9v+eUqOe9keWdgOOAgVtbIF1d77yM5Y+v5L2/55SoU3BlY2lhbDpEaWZm44CCJyxcblx0XHRcdFx0XHRcdCfjgIzpoIHpnaLpgKPntZDjgI3kuI3lkIjms5XvvIzlg4Xog73ovLjlhaXkuIDlgIvpoIHpnaLlkI3nqLHvvIzli7/kvb/nlKjntrLlnYDjgIFbWyBdXe+8jOWPr+S9v+eUqFNwZWNpYWw6RGlmZuOAgidcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gVGhlIGF1dG9sZXZlbCBvcHRpb24gd2lsbCBhbHJlYWR5IGtub3cgYnkgbm93IGlmIGEgdXNlciB0YWxrIHBhZ2Vcblx0XHQvLyBpcyBhIGNyb3NzLW5hbWVzcGFjZSByZWRpcmVjdCAodmlhICEhVHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqKSwgc29cblx0XHQvLyB0ZWNobmljYWxseSB3ZSBjb3VsZCBhbGVydCBhbiBlcnJvciBoZXJlLCBidXQgdGhlIHVzZXIgd2lsbCBoYXZlXG5cdFx0Ly8gYWxyZWFkeSBpZ25vcmVkIHRoZSBib2xkIHJlZCBlcnJvciBhYm92ZS4gTW9yZW92ZXIsIHRoZXkgcHJvYmFibHlcblx0XHQvLyAqZG9uJ3QqIHdhbnQgdG8gYWN0dWFsbHkgaXNzdWUgYSB3YXJuaW5nLCBzbyB0aGUgZXJyb3IgaGFuZGxpbmdcblx0XHQvLyBhZnRlciB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgaXMgcHJvYmFibHkgcHJlZmVyYWJsZVxuXHRcdC8vIEZpbmQgdGhlIHNlbGVjdGVkIDxvcHRpb24+IGVsZW1lbnQgc28gd2UgY2FuIGZldGNoIHRoZSBkYXRhIHN0cnVjdHVyZVxuXHRcdGNvbnN0ICRzZWxlY3RlZEVsID0gJChlLnRhcmdldC5zdWJfZ3JvdXApLmZpbmQoYG9wdGlvblt2YWx1ZT1cIiR7JChlLnRhcmdldC5zdWJfZ3JvdXApLnZhbCgpfVwiXWApO1xuXHRcdHBhcmFtcy5tZXNzYWdlRGF0YSA9ICRzZWxlY3RlZEVsLmRhdGEoJ21lc3NhZ2VEYXRhJyk7XG5cdFx0aWYgKHBhcmFtcy5tZXNzYWdlRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fpgInmi6norablkYrmqKHmnb/jgIInLCAn6KuL6YG45pOH6K2m5ZGK5qih5p2/44CCJyksIHtcblx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHR0YWc6ICd3YXJuJyxcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGUudGFyZ2V0KTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHVzZXJUYWxrUGFnZTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+itpuWRiuWujOaIkO+8jOWwhuWcqOWHoOenkuWQjuWIt+aWsCcsICforablkYrlrozmiJDvvIzlsIflnKjlub7np5Llvozph43mlrDmlbTnkIYnKTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0dXNlclRhbGtQYWdlLFxuXHRcdFx0d2luZG93LndnVUxTKCfnlKjmiLforqjorrrpobXkv67mlLknLCAn5L2/55So6ICF6KiO6KuW6aCB5L+u5pS5Jylcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSwgZmFsc2UpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUud2Fybi5jYWxsYmFja3MubWFpbik7XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUud2FybiwgJ3dhcm4nKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBuby1qcXVlcnkvbm8tbWFwLXV0aWwgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlYmxvY2suanMgKi9cbihmdW5jdGlvbiB0d2lua2xlYmxvY2soJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0Y29uc3QgYXBpID0gaW5pdE13QXBpKCdtb3JlYml0cy5qczsgVHdpbmtsZS8xLjEnKTtcblx0bGV0IHJlbGV2YW50VXNlck5hbWU7XG5cdGxldCBibG9ja2VkVXNlck5hbWU7XG5cdGNvbnN0IG1lbnVGb3JtYXR0ZWROYW1lc3BhY2VzID0ge1xuXHRcdC4uLm13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpLFxuXHR9O1xuXHRtZW51Rm9ybWF0dGVkTmFtZXNwYWNlc1swXSA9IHdpbmRvdy53Z1VMUygn77yI5p2h55uu77yJJywgJ++8iOaineebru+8iScpO1xuXHRjb25zdCBibG9ja0FjdGlvblRleHQgPSB7XG5cdFx0YmxvY2s6IHdpbmRvdy53Z1VMUygn5bCB56aBJywgJ+WwgemOlicpLFxuXHRcdHJlYmxvY2s6IHdpbmRvdy53Z1VMUygn6YeN5paw5bCB56aBJywgJ+mHjeaWsOWwgemOlicpLFxuXHRcdHVuYmxvY2s6IHdpbmRvdy53Z1VMUygn6Kej6Zmk5bCB56aBJywgJ+ino+mZpOWwgemOlicpLFxuXHR9O1xuXHQvKipcblx0ICogdHdpbmtsZWJsb2NrLmpzOiBCbG9jayBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiQmxvY2tcIilcblx0ICogQWN0aXZlIG9uOiBBbnkgcGFnZSB3aXRoIHJlbGV2YW50IHVzZXIgbmFtZSAodXNlcnNwYWNlLCBjb250cmlicywgZXRjLilcblx0ICovXG5cdFR3aW5rbGUuYmxvY2sgPSAoKSA9PiB7XG5cdFx0cmVsZXZhbnRVc2VyTmFtZSA9IG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpO1xuXHRcdC8vIHNob3VsZCBzaG93IG9uIENvbnRyaWJ1dGlvbnMgb3IgQmxvY2sgcGFnZXMsIGFueXdoZXJlIHRoZXJlJ3MgYSByZWxldmFudCB1c2VyXG5cdFx0Ly8gSWdub3JlIHJhbmdlcyB3aWRlciB0aGFuIHRoZSBDSURSIGxpbWl0XG5cdFx0Ly8gRW5hYmxlIGZvciBub24tYWRtaW5zXG5cdFx0aWYgKFxuXHRcdFx0KE1vcmViaXRzLnVzZXJJc1N5c29wIHx8ICFtdy51dGlsLmlzSVBBZGRyZXNzKHJlbGV2YW50VXNlck5hbWUsIHRydWUpKSAmJlxuXHRcdFx0cmVsZXZhbnRVc2VyTmFtZSAmJlxuXHRcdFx0KCFNb3JlYml0cy5pcC5pc1JhbmdlKHJlbGV2YW50VXNlck5hbWUpIHx8IE1vcmViaXRzLmlwLnZhbGlkQ0lEUihyZWxldmFudFVzZXJOYW1lKSlcblx0XHQpIHtcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2ssXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCB56aBJywgJ+WwgemOlicpLFxuXHRcdFx0XHQndHctYmxvY2snLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WwgeemgeebuOWFs+eUqOaItycsICflsIHpjpbnm7jpl5zkvb/nlKjogIUnKVxuXHRcdFx0KTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0cmVsZXZhbnRVc2VyTmFtZSA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpICYmXG5cdFx0XHQhY29uZmlybShcblx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdCfmgqjljbPlsIblr7noh6rlt7HmiafooYzlsIHnpoHnm7jlhbPmk43kvZzvvIHnoa7orqTopoHnu6fnu63lkJfvvJ8nLFxuXHRcdFx0XHRcdCfmgqjljbPlsIflsI3oh6rlt7Hln7fooYzlsIHpjpbnm7jpl5zmk43kvZzvvIHnorroqo3opoHnubznuozll47vvJ8nXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvID0gdW5kZWZpbmVkO1xuXHRcdFR3aW5rbGUuYmxvY2suZmllbGRfYmxvY2tfb3B0aW9ucyA9IHt9O1xuXHRcdFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucyA9IHt9O1xuXHRcdGNvbnN0IFdpbmRvdyA9IG5ldyBNb3JlYml0cy5zaW1wbGVXaW5kb3coNjUwLCA1MzApO1xuXHRcdC8vIG5lZWQgdG8gYmUgdmVyYm9zZSBhYm91dCB3aG8gd2UncmUgYmxvY2tpbmdcblx0XHRXaW5kb3cuc2V0VGl0bGUoXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+WwgeemgeaIluWQkScsICflsIHpjpbmiJblkJEnKSArIHJlbGV2YW50VXNlck5hbWUgKyB3aW5kb3cud2dVTFMoJ+WPkeWHuuWwgeemgeaooeadvycsICfnmbzlh7rlsIHpjpbmqKHmnb8nKVxuXHRcdCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ+WwgeemgeadoeS+iycsICflsIHpjpbmop3kvosnKSwgJ0xJQjpCTE9DSycpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5bCB56aB6K6+572uJywgJ+WwgemOluioreWumicpLCAnSDpUVy9QUkVGI2Jsb2NrJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI2Jsb2NrJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS5ibG9jay5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0Y29uc3QgYWN0aW9uZmllbGQgPSBmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pON5L2c57G75Z6LJywgJ+aTjeS9nOmhnuWIpScpLFxuXHRcdH0pO1xuXHRcdGFjdGlvbmZpZWxkLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bmFtZTogJ2FjdGlvbnR5cGUnLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2FjdGlvbixcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WwgeemgeeUqOaItycsICflsIHpjpbkvb/nlKjogIUnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2Jsb2NrJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn55So6YCJ5oup55qE6YCJ6aG55YWo56uZ5bCB56aB55u45YWz55So5oi377yM6Iul5pyq5Yu+6YCJ6YOo5YiG5bCB56aB5YiZ5Li65YWo56uZ5bCB56aB44CCJyxcblx0XHRcdFx0XHRcdCfnlKjpgbjmk4fnmoTpgbjpoIXlhajnq5nlsIHpjpbnm7jpl5zkvb/nlKjogIXvvIzoi6XmnKrli77pgbjpg6jliIblsIHpjpbliYfngrrlhajnq5nlsIHpjpbjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRoaWRkZW46ICFNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRcdFx0XHRjaGVja2VkOiBNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mDqOWIhuWwgeemgScsICfpg6jliIblsIHpjpYnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3BhcnRpYWwnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5ZCv55So6YOo5YiG5bCB56aB5Y+K6YOo5YiG5bCB56aB5qih5p2/44CCJywgJ+WVn+eUqOmDqOWIhuWwgemOluWPiumDqOWIhuWwgemOluaooeadv+OAgicpLFxuXHRcdFx0XHRcdGhpZGRlbjogIU1vcmViaXRzLnVzZXJJc1N5c29wLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuZ2V0UHJlZignZGVmYXVsdFRvUGFydGlhbEJsb2NrcycpLCAvLyBPdmVycmlkZGVuIGlmIGFscmVhZHkgYmxvY2tlZFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yqg5YWl5bCB56aB5qih5p2/5Yiw55So5oi36K6o6K666aG1JywgJ+WKoOWFpeWwgemOluaooeadv+WIsOS9v+eUqOiAheiojuirlumggScpLFxuXHRcdFx0XHRcdHZhbHVlOiAndGVtcGxhdGUnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfoi6XmiafooYzlsIHnpoHnmoTnrqHnkIblkZjlv5jorrDlj5Hlh7rlsIHnpoHmqKHmnb/vvIzmiJbkvaDlsIHnpoHkuobnlKjmiLfogIzmsqHmnInnu5nlhbblj5Hlh7rmqKHmnb/vvIzliJnkvaDlj6/ku6XnlKjmraTmnaXlj5Hlh7rlkIjpgILnmoTmqKHmnb/jgILli77pgInpg6jliIblsIHnpoHku6Xkvb/nlKjpg6jliIblsIHnpoHmqKHmnb/jgIInLFxuXHRcdFx0XHRcdFx0J+iLpeWft+ihjOWwgemOlueahOeuoeeQhuWToeW/mOiomOeZvOWHuuWwgemOluaooeadv++8jOaIluS9oOWwgemOluS6huS9v+eUqOiAheiAjOaykuaciee1puWFtueZvOWHuuaooeadv++8jOWJh+S9oOWPr+S7peeUqOatpOS+hueZvOWHuuWQiOmBqeeahOaooeadv+OAguWLvumBuOmDqOWIhuWwgemOluS7peS9v+eUqOmDqOWIhuWwgemOluaooeadv+OAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdC8vIERpc2FsbG93IHdoZW4gdmlld2luZyB0aGUgYmxvY2sgZGlhbG9nIG9uIGFuIElQIHJhbmdlXG5cdFx0XHRcdFx0aGlkZGVuOiAhTW9yZWJpdHMudXNlcklzU3lzb3AsXG5cdFx0XHRcdFx0Y2hlY2tlZDogTW9yZWJpdHMudXNlcklzU3lzb3AgJiYgIU1vcmViaXRzLmlwLmlzUmFuZ2UocmVsZXZhbnRVc2VyTmFtZSksXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IE1vcmViaXRzLmlwLmlzUmFuZ2UocmVsZXZhbnRVc2VyTmFtZSksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDnlKjmiLfpobUnLCAn5qiZ6KiY5L2/55So6ICF6aCB6Z2iJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd0YWcnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflsIbnlKjmiLfpobXmm7/mjaLmiJDnm7jlhbPnmoTmoIforrDmqKHmnb/vvIzku4XpmZDmsLjkuYXlsIHnpoHkvb/nlKjjgIInLFxuXHRcdFx0XHRcdFx0J+Wwh+S9v+eUqOiAhemggemdouabv+aPm+aIkOebuOmXnOeahOaomeiomOaooeadv++8jOWDhemZkOawuOS5heWwgemOluS9v+eUqOOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGhpZGRlbjogdHJ1ZSxcblx0XHRcdFx0XHRjaGVja2VkOiAhTW9yZWJpdHMudXNlcklzU3lzb3AsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkv53miqTnlKjmiLfpobUnLCAn5L+d6K235L2/55So6ICF6aCB6Z2iJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcm90ZWN0Jyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+WFqOS/neaKpOeUqOaIt+mhte+8jOS7hemZkOawuOS5heWwgeemgeS9v+eUqOOAgicsICflhajkv53orbfkvb/nlKjogIXpoIHpnaLvvIzlg4XpmZDmsLjkuYXlsIHpjpbkvb/nlKjjgIInKSxcblx0XHRcdFx0XHRoaWRkZW46IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfop6PpmaTlsIHnpoHnlKjmiLcnLCAn6Kej6Zmk5bCB6Y6W5L2/55So6ICFJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd1bmJsb2NrJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+ino+mZpOWwgeemgeebuOWFs+eUqOaIt+OAgicsICfop6PpmaTlsIHpjpbnm7jpl5zkvb/nlKjogIXjgIInKSxcblx0XHRcdFx0XHRoaWRkZW46ICFNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0LyoqXG5cdFx0ICogQWRkIG9wdGlvbiBmb3IgSVB2NiByYW5nZXMgc21hbGxlciB0aGFuIC82NCB0byB1cGdyYWRlIHRvIHRoZSA2NFxuXHRcdCAqIENJRFIuIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcgcGxhY2VzIHdoZXJlIHdlIHdhbnRcblx0XHQgKiB3Z1JlbGV2YW50VXNlck5hbWUgc2luY2UgdGhpcyBkZXBlbmRzIGVudGlyZWx5IG9uIHRoZSBvcmlnaW5hbCB1c2VyLlxuXHRcdCAqIEluIHRoZW9yeSwgd2Ugc2hvdWxkbid0IHVzZSBNb3JlYml0cy5pcC5nZXQ2NCBoZXJlIHNpbmNlIHNpbmNlIHdlIHdhbnRcblx0XHQgKiB0byBleGNsdWRlIGZ1bmN0aW9uYWxseS1lcXVpdmFsZW50IC82NHMuICBUaGF0J2QgYmU6XG5cdFx0ICogLy8gaWYgKG13LnV0aWwuaXNJUHY2QWRkcmVzcyhtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKSwgdHJ1ZSkgJiZcblx0XHQgKiAvLyAobXcudXRpbC5pc0lQdjZBZGRyZXNzKG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKSB8fCBwYXJzZUludChtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKS5yZXBsYWNlKC9eKC4rPylcXC8/KFxcZHsxLDN9KT8kLywgJyQyJyksIDEwKSA+IDY0KSkge1xuXHRcdCAqIEluIHByYWN0aWNlLCB0aG91Z2gsIHNpbmNlIGZ1bmN0aW9uYWxseS1lcXVpdmFsZW50IHJhbmdlcyBhcmVcblx0XHQgKiAobWlzKXRyZWF0ZWQgYXMgc2VwYXJhdGUgYnkgTWVkaWFXaWtpJ3MgbG9nZ2luZyxcblx0XHQgKiB1c2luZyBNb3JlYml0cy5pcC5nZXQ2NCBwcm92aWRlcyBhIG1vZGljdW0gb2YgcmVsaWVmIGluIHRoaXNlIGNhc2UuXG5cdFx0ICovXG5cdFx0Y29uc3Qgc2l4dHlGb3VyID0gTW9yZWJpdHMuaXAuZ2V0NjQobXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJykpO1xuXHRcdGlmIChzaXh0eUZvdXIgJiYgc2l4dHlGb3VyICE9PSBtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKSkge1xuXHRcdFx0Y29uc3QgYmxvY2s2NGZpZWxkID0gZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfovazmjaLkuLovNjTmrrXlsIHnpoEnLCAn6L2J5o+b54K6LzY05q615bCB6Y6WJyksXG5cdFx0XHRcdG5hbWU6ICdmaWVsZF82NCcsXG5cdFx0XHR9KTtcblx0XHRcdGJsb2NrNjRmaWVsZC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0c3R5bGU6ICdtYXJnaW4tYm90dG9tOiAwLjVlbScsXG5cdFx0XHRcdGxhYmVsOiBbd2dVTFMoJ+ebtOaOpeWwgeemgS82NOauteacieebiuaXoOWus+OAgicsICfnm7TmjqXlsIHpjpYvNjTmrrXmnInnm4rnhKHlrrPjgIInKV0sXG5cdFx0XHR9KTtcblx0XHRcdGJsb2NrNjRmaWVsZC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRuYW1lOiAnYmxvY2s2NCcsXG5cdFx0XHRcdGV2ZW50OiBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNoYW5nZV9ibG9jazY0LFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y2hlY2tlZDogVHdpbmtsZS5nZXRQcmVmKCdkZWZhdWx0VG9CbG9jazY0JyksXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmlLnmiJDlsIHnpoEvNjQnLCAn5pS55oiQ5bCB6Y6WLzY0JyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2Jsb2NrNjQnLFxuXHRcdFx0XHRcdFx0dG9vbHRpcDogTW9yZWJpdHMuaXAuaXNSYW5nZShtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKSlcblx0XHRcdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+WwhuS4jeS8muWPkemAgeaooeadv+mAmuefpeOAgicsICflsIfkuI3mnIPnmbzpgIHmqKHmnb/pgJrnn6XjgIInKVxuXHRcdFx0XHRcdFx0XHQ6IHdpbmRvdy53Z1VMUygn5Lu75L2V5qih5p2/5bCG5Lya5Y+R6YCB57uZ5Y6f5aeLSVDvvJonLCAn5Lu75L2V5qih5p2/5bCH5pyD55m86YCB57Wm5Y6f5aeLSVDvvJonKSArXG5cdFx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6kJywgJ+mgkOiorScpLFxuXHRcdFx0bmFtZTogJ2ZpZWxkX3ByZXNldCcsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aooeadv+mAiemhuScsICfmqKHmnb/pgbjpoIUnKSxcblx0XHRcdG5hbWU6ICdmaWVsZF90ZW1wbGF0ZV9vcHRpb25zJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCJ6aG5JywgJ+WwgemOlumBuOmghScpLFxuXHRcdFx0bmFtZTogJ2ZpZWxkX2Jsb2NrX29wdGlvbnMnLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDnlKjmiLfpobUnLCAn5qiZ6KiY5L2/55So6ICF6aCB6Z2iJyksXG5cdFx0XHRuYW1lOiAnZmllbGRfdGFnX29wdGlvbnMnLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfop6PpmaTlsIHnpoHpgInpobknLCAn6Kej6Zmk5bCB6Y6W6YG46aCFJyksXG5cdFx0XHRuYW1lOiAnZmllbGRfdW5ibG9ja19vcHRpb25zJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdGxhYmVsOiAn5o+Q5LqkJyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHRyZXN1bHQucm9vdCA9IHJlc3VsdDtcblx0XHRUd2lua2xlLmJsb2NrLmZldGNoVXNlckluZm8oKCkgPT4ge1xuXHRcdFx0aWYgKFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkKSB7XG5cdFx0XHRcdGNvbnN0ICRmb3JtID0gJChyZXN1bHQpO1xuXHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoJGZvcm0uZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9dGFnXScpLnBhcmVudCgpLCB0cnVlKTtcblx0XHRcdFx0aWYgKE1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KFxuXHRcdFx0XHRcdFx0JGZvcm0uZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9cHJvdGVjdF0nKS5wYXJlbnQoKSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBUb2dnbGUgaW5pdGlhbCBwYXJ0aWFsIHN0YXRlIGRlcGVuZGluZyBvbiBwcmlvciBibG9jayB0eXBlLFxuXHRcdFx0Ly8gd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdFRvUGFydGlhbEJsb2NrcyBwcmVmXG5cdFx0XHRpZiAoYmxvY2tlZFVzZXJOYW1lID09PSByZWxldmFudFVzZXJOYW1lKSB7XG5cdFx0XHRcdCQocmVzdWx0KVxuXHRcdFx0XHRcdC5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT1wYXJ0aWFsXScpXG5cdFx0XHRcdFx0LnByb3AoJ2NoZWNrZWQnLCBUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8ucGFydGlhbCA9PT0gJycpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2xlYW4gdXAgcHJlc2V0IGRhdGEgKGRlZmF1bHRzLCBldGMuKSwgZG9uZSBleGFjdGx5IG9uY2UsIG11c3QgYmUgYmVmb3JlIFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2FjdGlvbiBpcyBjYWxsZWRcblx0XHRcdFR3aW5rbGUuYmxvY2sudHJhbnNmb3JtQmxvY2tQcmVzZXRzKCk7XG5cdFx0XHQvLyBpbml0IHRoZSBjb250cm9scyBhZnRlciB1c2VyIGFuZCBibG9jayBpbmZvIGhhdmUgYmVlbiBmZXRjaGVkXG5cdFx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRcdGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdFx0aWYgKHJlc3VsdC5ibG9jazY0ICYmIHJlc3VsdC5ibG9jazY0LmNoZWNrZWQpIHtcblx0XHRcdFx0Ly8gQ2FsbHMgdGhlIHNhbWUgY2hhbmdlX2FjdGlvbiBldmVudCBvbmNlIGZpbmlzaGVkXG5cdFx0XHRcdHJlc3VsdC5ibG9jazY0LmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5hY3Rpb250eXBlWzBdLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblx0Ly8gU3RvcmUgZmV0Y2hlZCB1c2VyIGRhdGEsIG9ubHkgcmVsZXZhbnQgaWYgc3dpdGNoaW5nIElQdjYgdG8gYSAvNjRcblx0VHdpbmtsZS5ibG9jay5mZXRjaGVkRGF0YSA9IHt9O1xuXHQvLyBQcm9jZXNzZXMgdGhlIGRhdGEgZnJvbSBhIGEgcXVlcnkgcmVzcG9uc2UsIHNlcGFyYXRlZCBmcm9tXG5cdC8vIFR3aW5rbGUuYmxvY2suZmV0Y2hVc2VySW5mbyB0byBhbGxvdyByZXByb2Nlc3Npbmcgb2YgYWxyZWFkeS1mZXRjaGVkIGRhdGFcblx0VHdpbmtsZS5ibG9jay5wcm9jZXNzVXNlckluZm8gPSAoZGF0YSwgZm4pID0+IHtcblx0XHRsZXQgW2Jsb2NraW5mb10gPSBkYXRhLnF1ZXJ5LmJsb2Nrcztcblx0XHRjb25zdCBbdXNlcmluZm9dID0gZGF0YS5xdWVyeS51c2Vycztcblx0XHQvLyBJZiBhbiBJUCBpcyBibG9ja2VkICphbmQqIHJhbmdlYmxvY2tlZCwgdGhlIGFib3ZlIGZpbmRzXG5cdFx0Ly8gd2hpY2hldmVyIGJsb2NrIGlzIG1vcmUgcmVjZW50LCBub3QgbmVjZXNzYXJpbHkgY29ycmVjdC5cblx0XHQvLyBUaHJlZSBzZWVtcy4uLiB1bmxpa2VseVxuXHRcdGlmIChkYXRhLnF1ZXJ5LmJsb2Nrcy5sZW5ndGggPiAxICYmIGJsb2NraW5mby51c2VyICE9PSByZWxldmFudFVzZXJOYW1lKSB7XG5cdFx0XHRbLCBibG9ja2luZm9dID0gZGF0YS5xdWVyeS5ibG9ja3M7XG5cdFx0fVxuXHRcdC8vIENhY2hlIHJlc3BvbnNlLCB1c2VkIHdoZW4gdG9nZ2xpbmcgLzY0IGJsb2Nrc1xuXHRcdFR3aW5rbGUuYmxvY2suZmV0Y2hlZERhdGFbdXNlcmluZm8ubmFtZV0gPSBkYXRhO1xuXHRcdFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkID0gISF1c2VyaW5mby51c2VyaWQ7XG5cdFx0aWYgKFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkKSB7XG5cdFx0XHRUd2lua2xlLmJsb2NrLnVzZXJJc0JvdCA9XG5cdFx0XHRcdCEhdXNlcmluZm8uZ3JvdXBtZW1iZXJzaGlwcyAmJlxuXHRcdFx0XHR1c2VyaW5mby5ncm91cG1lbWJlcnNoaXBzXG5cdFx0XHRcdFx0Lm1hcCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGUuZ3JvdXA7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuaW5jbHVkZXMoJ2JvdCcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2lua2xlLmJsb2NrLnVzZXJJc0JvdCA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoYmxvY2tpbmZvKSB7XG5cdFx0XHQvLyBoYW5kbGUgZnJ1c3RyYXRpbmcgc3lzdGVtIG9mIGludmVydGVkIGJvb2xlYW4gdmFsdWVzXG5cdFx0XHRibG9ja2luZm8uZGlzYWJsZXRhbGsgPSBibG9ja2luZm8uYWxsb3d1c2VydGFsayA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0YmxvY2tpbmZvLmhhcmRibG9jayA9IGJsb2NraW5mby5hbm9ub25seSA9PT0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHQvLyB3aWxsIHVuZGVmaW5lIGlmIG5vIGJsb2NrcyBwcmVzZW50XG5cdFx0VHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvID0gYmxvY2tpbmZvO1xuXHRcdGJsb2NrZWRVc2VyTmFtZSA9IFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbyAmJiBUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8udXNlcjtcblx0XHQvLyBTZW1pLWJ1c3RlZCBvbiByYW5nZXMuXG5cdFx0Ly8gQmFzaWNhbGx5LCBsb2dldmVudHMgZG9lc24ndCB0cmVhdCBmdW5jdGlvbmFsbHktZXF1aXZhbGVudCByYW5nZXNcblx0XHQvLyBhcyBlcXVpdmFsZW50LCBtZWFuaW5nIGFueSBmdW5jdGlvbmFsbHktZXF1aXZhbGVudCBJUCByYW5nZSBpc1xuXHRcdC8vIG1pc2ludGVycHJldGVkIGJ5IHRoZSBsb2cgdGhyb3VnaG91dC4gIFdpdGhvdXQgbG9nZXZlbnRzXG5cdFx0Ly8gcmVkaXJlY3RpbmcgKGxpa2UgU3BlY2lhbDpCbG9jayBkb2VzKSB3ZSB3b3VsZCBuZWVkIGEgZnVuY3Rpb24gdG9cblx0XHQvLyBwYXJzZSByYW5nZXMsIHdoaWNoIGlzIGEgcGFpbi4gIElQVXRpbHMgaGFzIHRoZSBjb2RlLCBidXQgaXQnZCBiZSBhXG5cdFx0Ly8gbG90IG9mIGNydWZ0IGZvciBvbmUgcHVycG9zZS5cblx0XHRUd2lua2xlLmJsb2NrLmhhc0Jsb2NrTG9nID0gISFkYXRhLnF1ZXJ5LmxvZ2V2ZW50cy5sZW5ndGg7XG5cdFx0VHdpbmtsZS5ibG9jay5ibG9ja0xvZyA9IFR3aW5rbGUuYmxvY2suaGFzQmxvY2tMb2cgJiYgZGF0YS5xdWVyeS5sb2dldmVudHM7XG5cdFx0Ly8gVXNlZCBsYXRlciB0byBjaGVjayBpZiBibG9jayBzdGF0dXMgY2hhbmdlZCB3aGlsZSBmaWxsaW5nIG91dCB0aGUgZm9ybVxuXHRcdFR3aW5rbGUuYmxvY2suYmxvY2tMb2dJZCA9IFR3aW5rbGUuYmxvY2suaGFzQmxvY2tMb2cgPyBkYXRhLnF1ZXJ5LmxvZ2V2ZW50c1swXS5sb2dpZCA6IGZhbHNlO1xuXHRcdGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBmbigpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5mZXRjaFVzZXJJbmZvID0gKGZuKSA9PiB7XG5cdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGxpc3Q6ICdibG9ja3N8dXNlcnN8bG9nZXZlbnRzJyxcblx0XHRcdGxldHlwZTogJ2Jsb2NrJyxcblx0XHRcdGxlbGltaXQ6IDIsXG5cdFx0XHRsZXRpdGxlOiBgVXNlcjoke3JlbGV2YW50VXNlck5hbWV9YCxcblx0XHRcdGJrcHJvcDogJ2V4cGlyeXxyZWFzb258ZmxhZ3N8cmVzdHJpY3Rpb25zfHJhbmdlfHVzZXInLFxuXHRcdFx0dXN1c2VyczogcmVsZXZhbnRVc2VyTmFtZSxcblx0XHR9O1xuXHRcdC8vIGJrdXNlcnMgZG9lc24ndCBjYXRjaCBzaW5nbGUgSVBzIGJsb2NrZWQgYXMgcGFydCBvZiBhIHJhbmdlIGJsb2NrXG5cdFx0aWYgKG13LnV0aWwuaXNJUEFkZHJlc3MocmVsZXZhbnRVc2VyTmFtZSwgdHJ1ZSkpIHtcblx0XHRcdHF1ZXJ5LmJraXAgPSByZWxldmFudFVzZXJOYW1lO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRxdWVyeS5ia3VzZXJzID0gcmVsZXZhbnRVc2VyTmFtZTtcblx0XHRcdC8vIGdyb3VwbWVtYmVyc2hpcHMgb25seSByZWxldmFudCBmb3IgcmVnaXN0ZXJlZCB1c2Vyc1xuXHRcdFx0cXVlcnkudXNwcm9wID0gJ2dyb3VwbWVtYmVyc2hpcHMnO1xuXHRcdH1cblx0XHRhcGkuZ2V0KHF1ZXJ5KS50aGVuKFxuXHRcdFx0KGRhdGEpID0+IHtcblx0XHRcdFx0VHdpbmtsZS5ibG9jay5wcm9jZXNzVXNlckluZm8oZGF0YSwgZm4pO1xuXHRcdFx0fSxcblx0XHRcdChlcnJvcikgPT4ge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdCgkYm9keS5maW5kKCdkaXZbbmFtZT1cImN1cnJlbnRibG9ja1wiXSBzcGFuJykubGFzdCgpWzBdKTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4od2luZG93LndnVUxTKCfmipPlj5bnlKjmiLfkv6Hmga/lh7rplJknLCAn5oqT5Y+W5L2/55So6ICF6LOH6KiK5Ye66YyvJyksIGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLnNhdmVGaWVsZHNldCA9IChmaWVsZHNldCkgPT4ge1xuXHRcdFR3aW5rbGUuYmxvY2tbJChmaWVsZHNldCkucHJvcCgnbmFtZScpXSA9IHt9O1xuXHRcdGZvciAoY29uc3QgZWwgb2YgJChmaWVsZHNldCkuc2VyaWFsaXplQXJyYXkoKSkge1xuXHRcdFx0Ly8gbmFtZXNwYWNlcyBhbmQgcGFnZXMgZm9yIHBhcnRpYWwgYmxvY2tzIGFyZSBvdmVyd3JpdHRlblxuXHRcdFx0Ly8gaGVyZSwgYnV0IHdlJ3JlIGhhbmRsaW5nIHRoZW0gZWxzZXdoZXJlIHNvIHRoYXQncyBmaW5lXG5cdFx0XHRUd2lua2xlLmJsb2NrWyQoZmllbGRzZXQpLnByb3AoJ25hbWUnKV1bZWwubmFtZV0gPSBlbC52YWx1ZTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2Jsb2NrNjQgPSAoZSkgPT4ge1xuXHRcdGNvbnN0ICRmb3JtID0gJChlLnRhcmdldC5mb3JtKTtcblx0XHRjb25zdCAkYmxvY2s2NCA9ICRmb3JtLmZpbmQoJ1tuYW1lPWJsb2NrNjRdJyk7XG5cdFx0Ly8gU2hvdy9oaWRlIGJsb2NrNjQgYnV0dG9uXG5cdFx0Ly8gU2luZ2xlIElQdjYsIG9yIElQdjYgcmFuZ2Ugc21hbGxlciB0aGFuIGEgLzY0XG5cdFx0Y29uc3QgcHJpb3JOYW1lID0gcmVsZXZhbnRVc2VyTmFtZTtcblx0XHRpZiAoJGJsb2NrNjQuaXMoJzpjaGVja2VkJykpIHtcblx0XHRcdHJlbGV2YW50VXNlck5hbWUgPSBNb3JlYml0cy5pcC5nZXQ2NChtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGV2YW50VXNlck5hbWUgPSBtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKTtcblx0XHR9XG5cdFx0Ly8gTm8gdGVtcGxhdGVzIGZvciByYW5nZXMsIGJ1dCBpZiB0aGUgb3JpZ2luYWwgdXNlciBpcyBhIHNpbmdsZSBJUCwgb2ZmZXIgdGhlIG9wdGlvblxuXHRcdC8vIChkb25lIHNlcGFyYXRlbHkgaW4gVHdpbmtsZS5ibG9jay5jYWxsYmFjay5pc3N1ZV90ZW1wbGF0ZSlcblx0XHRjb25zdCBvcmlnaW5hbElzUmFuZ2UgPSBNb3JlYml0cy5pcC5pc1JhbmdlKG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKTtcblx0XHQkZm9ybVxuXHRcdFx0LmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXRlbXBsYXRlXScpXG5cdFx0XHQucHJvcCgnZGlzYWJsZWQnLCBvcmlnaW5hbElzUmFuZ2UpXG5cdFx0XHQucHJvcCgnY2hlY2tlZCcsICFvcmlnaW5hbElzUmFuZ2UpO1xuXHRcdC8vIFJlZmV0Y2gvcmVwcm9jZXNzIHVzZXIgaW5mbyB0aGVuIHJlZ2VuZXJhdGUgdGhlIG1haW4gY29udGVudFxuXHRcdGNvbnN0IHJlZ2VuZXJhdGVGb3JtID0gKCkgPT4ge1xuXHRcdFx0Ly8gVHdlYWsgdGl0bGViYXIgdGV4dC4gIEluIHRoZW9yeSwgd2UgY291bGQgc2F2ZSB0aGUgZGlhbG9nXG5cdFx0XHQvLyBhdCBpbml0aWFsaXphdGlvbiBhbmQgdGhlbiB1c2UgYC5zZXRUaXRsZWAgb3Jcblx0XHRcdC8vIGBkaWFsb2coJ29wdGlvbicsICd0aXRsZScpYCwgYnV0IGluIHByYWN0aWNlIHRoYXQgc3dhbGxvd3Ncblx0XHRcdC8vIHRoZSBzY3JpcHROYW1lIGFuZCByZXF1aXJlcyBgLmRpc3BsYXlgaW5nLCB3aGljaCBqdW1wcyB0aGVcblx0XHRcdC8vIHdpbmRvdy4gIEl0J3MganVzdCBhIGxpbmUgb2YgdGV4dCwgc28gdGhpcyBpcyBmaW5lLlxuXHRcdFx0Y29uc3QgdGl0bGVCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudWktZGlhbG9nLXRpdGxlJykuZmlyc3RDaGlsZC5uZXh0U2libGluZztcblx0XHRcdHRpdGxlQmFyLm5vZGVWYWx1ZSA9IHRpdGxlQmFyLm5vZGVWYWx1ZS5yZXBsYWNlKHByaW9yTmFtZSwgcmVsZXZhbnRVc2VyTmFtZSk7XG5cdFx0XHQvLyBDb3JyZWN0IHBhcnRpYWwgc3RhdGVcblx0XHRcdCRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXBhcnRpYWxdJykucHJvcCgnY2hlY2tlZCcsIFR3aW5rbGUuZ2V0UHJlZignZGVmYXVsdFRvUGFydGlhbEJsb2NrcycpKTtcblx0XHRcdGlmIChibG9ja2VkVXNlck5hbWUgPT09IHJlbGV2YW50VXNlck5hbWUpIHtcblx0XHRcdFx0JGZvcm1cblx0XHRcdFx0XHQuZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9cGFydGlhbF0nKVxuXHRcdFx0XHRcdC5wcm9wKCdjaGVja2VkJywgVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLnBhcnRpYWwgPT09ICcnKTtcblx0XHRcdH1cblx0XHRcdC8vIFNldCBjb250ZW50IGFwcHJvcHJpYXRlbHlcblx0XHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2FjdGlvbihlKTtcblx0XHR9O1xuXHRcdGlmIChUd2lua2xlLmJsb2NrLmZldGNoZWREYXRhW3JlbGV2YW50VXNlck5hbWVdKSB7XG5cdFx0XHRUd2lua2xlLmJsb2NrLnByb2Nlc3NVc2VySW5mbyhUd2lua2xlLmJsb2NrLmZldGNoZWREYXRhW3JlbGV2YW50VXNlck5hbWVdLCByZWdlbmVyYXRlRm9ybSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3aW5rbGUuYmxvY2suZmV0Y2hVc2VySW5mbyhyZWdlbmVyYXRlRm9ybSk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNoYW5nZV9hY3Rpb24gPSAoZSkgPT4ge1xuXHRcdGxldCBmaWVsZF9wcmVzZXQ7XG5cdFx0bGV0IGZpZWxkX3RlbXBsYXRlX29wdGlvbnM7XG5cdFx0bGV0IGZpZWxkX2Jsb2NrX29wdGlvbnM7XG5cdFx0bGV0IGZpZWxkX3RhZ19vcHRpb25zO1xuXHRcdGxldCBmaWVsZF91bmJsb2NrX29wdGlvbnM7XG5cdFx0Y29uc3QgJGZvcm0gPSAkKGUudGFyZ2V0LmZvcm0pO1xuXHRcdC8vIE1ha2UgaWZzIHNob3J0ZXJcblx0XHRjb25zdCAkYmxvY2sgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT1ibG9ja10nKTtcblx0XHRsZXQgYmxvY2tCb3ggPSAkYmxvY2suaXMoJzpjaGVja2VkJyk7XG5cdFx0Y29uc3QgJHRlbXBsYXRlID0gJGZvcm0uZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9dGVtcGxhdGVdJyk7XG5cdFx0bGV0IHRlbXBsYXRlQm94ID0gJHRlbXBsYXRlLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGNvbnN0ICR0YWcgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT10YWddJyk7XG5cdFx0Y29uc3QgdGFnQm94ID0gJHRhZy5pcygnOmNoZWNrZWQnKTtcblx0XHRjb25zdCAkcHJvdGVjdCA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXByb3RlY3RdJyk7XG5cdFx0Y29uc3QgJHBhcnRpYWwgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT1wYXJ0aWFsXScpO1xuXHRcdGNvbnN0IHBhcnRpYWxCb3ggPSAkcGFydGlhbC5pcygnOmNoZWNrZWQnKTtcblx0XHRjb25zdCAkdW5ibG9jayA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXVuYmxvY2tdJyk7XG5cdFx0Y29uc3QgdW5ibG9ja0JveCA9ICR1bmJsb2NrLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGxldCBibG9ja0dyb3VwID0gcGFydGlhbEJveCA/IFR3aW5rbGUuYmxvY2suYmxvY2tHcm91cHNQYXJ0aWFsIDogVHdpbmtsZS5ibG9jay5ibG9ja0dyb3Vwcztcblx0XHRpZiAoZS50YXJnZXQudmFsdWUgPT09ICd1bmJsb2NrJykge1xuXHRcdFx0aWYgKCFUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8pIHtcblx0XHRcdFx0JHVuYmxvY2sucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn55So5oi35rKh5pyJ6KKr5bCB56aBJywgJ+S9v+eUqOiAheaykuacieiiq+WwgemOlicpLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVibG9jaycsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQkYmxvY2sucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHRcdGJsb2NrQm94ID0gZmFsc2U7XG5cdFx0XHQkdGVtcGxhdGUucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHRcdHRlbXBsYXRlQm94ID0gZmFsc2U7XG5cdFx0XHQkdGFnLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG5cdFx0XHQkcHJvdGVjdC5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuXHRcdFx0JHBhcnRpYWwucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHVuYmxvY2sucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHR9XG5cdFx0JHBhcnRpYWwucHJvcCgnZGlzYWJsZWQnLCAhYmxvY2tCb3ggJiYgIXRlbXBsYXRlQm94KTtcblx0XHQvLyBBZGQgY3VycmVudCBibG9jayBwYXJhbWV0ZXJzIGFzIGRlZmF1bHQgcHJlc2V0XG5cdFx0Y29uc3QgcHJpb3IgPSB7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvZPliY3lsIHnpoEnLCAn55uu5YmN5bCB6Y6WJyksXG5cdFx0fTtcblx0XHRpZiAoYmxvY2tlZFVzZXJOYW1lID09PSByZWxldmFudFVzZXJOYW1lKSB7XG5cdFx0XHRUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm8ucHJpb3IgPSBUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm87XG5cdFx0XHQvLyB2YWx1ZSBub3QgYSB2YWxpZCB0ZW1wbGF0ZSBzZWxlY3Rpb24sIGNob3NlbiBiZWxvdyBieSBzZXR0aW5nIHRlbXBsYXRlTmFtZVxuXHRcdFx0cHJpb3IubGlzdCA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W9k+WJjeWwgeemgeiuvue9ricsICfnm67liY3lsIHpjpboqK3lrponKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3ByaW9yJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdF07XG5cdFx0XHQvLyBBcnJheXMgb2Ygb2JqZWN0cyBhcmUgYW5ub3lpbmcgdG8gY2hlY2tcblx0XHRcdGlmIChcblx0XHRcdFx0IWJsb2NrR3JvdXAuc29tZSgoYmcpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gYmcubGFiZWwgPT09IHByaW9yLmxhYmVsO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdGJsb2NrR3JvdXAucHVzaChwcmlvcik7XG5cdFx0XHR9XG5cdFx0XHQvLyBBbHdheXMgZW5zdXJlIHByb3BlciB0ZW1wbGF0ZSBleGlzdHMvaXMgc2VsZWN0ZWQgd2hlbiBzd2l0Y2hpbmcgbW9kZXNcblx0XHRcdGlmIChwYXJ0aWFsQm94KSB7XG5cdFx0XHRcdFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mby5wcmlvci50ZW1wbGF0ZU5hbWUgPSBNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShcblx0XHRcdFx0XHRUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8uZXhwaXJ5XG5cdFx0XHRcdClcblx0XHRcdFx0XHQ/ICd1dy1wYmxvY2tpbmRlZidcblx0XHRcdFx0XHQ6ICd1dy1wYmxvY2snO1xuXHRcdFx0fSBlbHNlIGlmIChUd2lua2xlLmJsb2NrLmlzUmVnaXN0ZXJlZCkge1xuXHRcdFx0XHRUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm8ucHJpb3IudGVtcGxhdGVOYW1lID0gTW9yZWJpdHMuc3RyaW5nLmlzSW5maW5pdHkoXG5cdFx0XHRcdFx0VHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLmV4cGlyeVxuXHRcdFx0XHQpXG5cdFx0XHRcdFx0PyAndXctYmxvY2tpbmRlZidcblx0XHRcdFx0XHQ6ICd1dy1ibG9jayc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm8ucHJpb3IudGVtcGxhdGVOYW1lID0gJ3V3LWFibG9jayc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEJ1dCBmaXJzdCByZW1vdmUgYW55IHByaW9yIHByaW9yXG5cdFx0XHRibG9ja0dyb3VwID0gYmxvY2tHcm91cC5maWx0ZXIoKGJnKSA9PiB7XG5cdFx0XHRcdHJldHVybiBiZy5sYWJlbCAhPT0gcHJpb3IubGFiZWw7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGJvZHkuZmluZCgnW25hbWU9ZmllbGRfYmxvY2tfb3B0aW9uc10nKSk7XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGJvZHkuZmluZCgnW25hbWU9ZmllbGRfdGVtcGxhdGVfb3B0aW9uc10nKSk7XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGJvZHkuZmluZCgnW25hbWU9ZmllbGRfdGFnX29wdGlvbnNdJykpO1xuXHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suc2F2ZUZpZWxkc2V0KCRib2R5LmZpbmQoJ1tuYW1lPWZpZWxkX3VuYmxvY2tfb3B0aW9uc10nKSk7XG5cdFx0aWYgKGJsb2NrQm94KSB7XG5cdFx0XHRmaWVsZF9wcmVzZXQgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpu5jorqQnLCAn6aCQ6KitJyksXG5cdFx0XHRcdG5hbWU6ICdmaWVsZF9wcmVzZXQnLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9wcmVzZXQuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdG5hbWU6ICdwcmVzZXQnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6npu5jorqTvvJonLCAn6YG45pOH6aCQ6Kit77yaJyksXG5cdFx0XHRcdGV2ZW50OiBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNoYW5nZV9wcmVzZXQsXG5cdFx0XHRcdGxpc3Q6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2suZmlsdGVyZWRfYmxvY2tfZ3JvdXBzKGJsb2NrR3JvdXApLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCJ6aG5JywgJ+WwgemOlumBuOmghScpLFxuXHRcdFx0XHRuYW1lOiAnZmllbGRfYmxvY2tfb3B0aW9ucycsXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdG5hbWU6ICdjdXJyZW50YmxvY2snLFxuXHRcdFx0XHRsYWJlbDogJyAnLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRuYW1lOiAnaGFzYmxvY2tsb2cnLFxuXHRcdFx0XHRsYWJlbDogJyAnLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRuYW1lOiAnZXhwaXJ5X3ByZXNldCcsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+i/h+acn+aXtumXtO+8micsICfpgY7mnJ/mmYLplpPvvJonKSxcblx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2V4cGlyeSxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5iScsICfoh6roqIInKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnY3VzdG9tJyxcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5peg6ZmQ5pyfJywgJ+eEoemZkOacnycpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdpbmZpbml0eScsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCcz5bCP5pe2JywgJzPlsI/mmYInKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnMyBob3VycycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCcxMuWwj+aXticsICcxMuWwj+aZgicpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcxMiBob3VycycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJzHlpKknLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcxIGRheScsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCczMeWwj+aXticsICczMeWwj+aZgicpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICczMSBob3VycycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJzLlpKknLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcyIGRheXMnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6ICcz5aSpJyxcblx0XHRcdFx0XHRcdHZhbHVlOiAnMyBkYXlzJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJzHlkagnLCAnMemAsScpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcxIHdlZWsnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnMuWRqCcsICcy6YCxJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJzIgd2Vla3MnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnMeS4quaciCcsICcx5YCL5pyIJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJzEgbW9udGgnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnM+S4quaciCcsICcz5YCL5pyIJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJzMgbW9udGhzJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJzbkuKrmnIgnLCAnNuWAi+aciCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICc2IG1vbnRocycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJzHlubQnLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcxIHllYXInLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6ICcy5bm0Jyxcblx0XHRcdFx0XHRcdHZhbHVlOiAnMiB5ZWFycycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJzPlubQnLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICczIHllYXJzJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdG5hbWU6ICdleHBpcnknLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnov4fmnJ/ml7bpl7QnLCAn6Ieq6KiC6YGO5pyf5pmC6ZaTJyksXG5cdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5oKo5Y+v5Lul5L2/55So55u45a+55pe26Ze077yM5aaC4oCcMSBtaW51dGXigJ3miJbigJwxOSBkYXlz4oCd77yb5oiW57ud5a+55pe26Ze077yM4oCceXl5eW1tZGRoaG1t4oCd77yI5aaC4oCcMjAwNjAyMDExNDA14oCd5pivMjAwNuW5tDLmnIgx5pelMTQ6MDUgVVRD44CC77yJJyxcblx0XHRcdFx0XHQn5oKo5Y+v5Lul5L2/55So55u45bCN5pmC6ZaT77yM5aaC44CMMSBtaW51dGXjgI3miJbjgIwxOSBkYXlz44CN77yb5oiW57WV5bCN5pmC6ZaT77yM44CMeXl5eW1tZGRoaG1t44CN77yI5aaC44CMMjAwNjAyMDExNDA144CN5pivMjAwNuW5tDLmnIgx5pelMTQ6MDUgVVRD44CC77yJJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHR2YWx1ZTogVHdpbmtsZS5ibG9jay5maWVsZF9ibG9ja19vcHRpb25zLmV4cGlyeSB8fCBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMudGVtcGxhdGVfZXhwaXJ5LFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAocGFydGlhbEJveCkge1xuXHRcdFx0XHQvLyBQYXJ0aWFsIGJsb2NrXG5cdFx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0XHRuYW1lOiAncGFnZXJlc3RyaWN0aW9ucycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6aG16Z2i5bCB56aBJywgJ+mggemdouWwgemOlicpLFxuXHRcdFx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+acgOWkmjEw5Liq6aG16Z2i44CCJywgJ+acgOWkmjEw5YCL6aCB6Z2i44CCJyksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBucyA9IGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0XHRuYW1lOiAnbmFtZXNwYWNlcmVzdHJpY3Rpb25zJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflkb3lkI3nqbrpl7TlsIHnpoEnLCAn5ZG95ZCN56m66ZaT5bCB6Y6WJyksXG5cdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5oyH5a6a5bCB56aB55qE5ZG95ZCN56m66Ze044CCJywgJ+aMh+WumuWwgemOlueahOWRveWQjeepuumWk+OAgicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9yIChjb25zdCBbbnVtYmVyLCBuYW1lXSBvZiBPYmplY3QuZW50cmllcyhtZW51Rm9ybWF0dGVkTmFtZXNwYWNlcykpIHtcblx0XHRcdFx0XHQvLyBJZ25vcmUgLTE6IFNwZWNpYWw7IC0yOiBNZWRpYTsgYW5kIDIzMDAtMjMwMzogR2FkZ2V0ICh0YWxrKSBhbmQgR2FkZ2V0IGRlZmluaXRpb24gKHRhbGspXG5cdFx0XHRcdFx0aWYgKG51bWJlciA+PSAwICYmIG51bWJlciA8IDgzMCkge1xuXHRcdFx0XHRcdFx0bnMuYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBuYW1lLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogbnVtYmVyLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBibG9ja29wdGlvbnMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX2Jsb2NrX29wdGlvbnMubm9jcmVhdGUsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56aB5q2i5Yib5bu66LSm5Y+3JywgJ+emgeatouW7uueri+izrOiZnycpLFxuXHRcdFx0XHRcdG5hbWU6ICdub2NyZWF0ZScsXG5cdFx0XHRcdFx0dmFsdWU6ICcxJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfYmxvY2tfb3B0aW9ucy5ub2VtYWlsLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eUteWtkOmCruS7tuWBnOeUqCcsICfpm7vlrZDpg7Xku7blgZznlKgnKSxcblx0XHRcdFx0XHRuYW1lOiAnbm9lbWFpbCcsXG5cdFx0XHRcdFx0dmFsdWU6ICcxJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfYmxvY2tfb3B0aW9ucy5kaXNhYmxldGFsayxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3og73nvJbovpHoh6rlt7HnmoTorqjorrrpobUnLCAn5LiN6IO957eo6Lyv6Ieq5bex55qE6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0bmFtZTogJ2Rpc2FibGV0YWxrJyxcblx0XHRcdFx0XHR2YWx1ZTogJzEnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHBhcnRpYWxCb3hcblx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfoi6Xkvb/nlKjpg6jliIblsIHnpoHvvIzkuI3lupTpgInmi6nmraTpobnvvIzpmaTpnZ7mgqjkuZ/mg7PopoHnpoHmraLnvJbovpHnlKjmiLforqjorrrpobXjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfoi6Xkvb/nlKjpg6jliIblsIHpjpbvvIzkuI3mh4npgbjmk4fmraTpoIXvvIzpmaTpnZ7mgqjkuZ/mg7PopoHnpoHmraLnt6jovK/kvb/nlKjogIXoqI7oq5bpoIHjgIInXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdDogJycsXG5cdFx0XHRcdH0sXG5cdFx0XHRdO1xuXHRcdFx0aWYgKFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkKSB7XG5cdFx0XHRcdGJsb2Nrb3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX2Jsb2NrX29wdGlvbnMuYXV0b2Jsb2NrLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWKqOWwgeemgScsICfoh6rli5XlsIHpjpYnKSxcblx0XHRcdFx0XHRuYW1lOiAnYXV0b2Jsb2NrJyxcblx0XHRcdFx0XHR2YWx1ZTogJzEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJsb2Nrb3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX2Jsb2NrX29wdGlvbnMuaGFyZGJsb2NrLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mYu+atoueZu+W9leeUqOaIt+S9v+eUqOivpUlQ5Zyw5Z2A57yW6L6RJywgJ+mYu+atoueZu+WFpeS9v+eUqOiAheS9v+eUqOipsklQ5L2N5Z2A57eo6LyvJyksXG5cdFx0XHRcdFx0bmFtZTogJ2hhcmRibG9jaycsXG5cdFx0XHRcdFx0dmFsdWU6ICcxJyxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRibG9ja29wdGlvbnMucHVzaChcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfYmxvY2tfb3B0aW9ucy53YXRjaHVzZXIsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55uR6KeG6K+l55So5oi355qE55So5oi36aG15ZKM6K6o6K666aG1JywgJ+ebo+imluipsuS9v+eUqOiAheeahOS9v+eUqOiAhemggemdouWSjOiojuirlumggScpLFxuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaHVzZXInLFxuXHRcdFx0XHRcdHZhbHVlOiAnMScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOW9k+WJjeeahOegtOWdj+S4reeahOivt+axgicsICfmqJnoqJjnlbbliY3nmoTnoLTlo57kuK3nmoToq4vmsYInKSxcblx0XHRcdFx0XHRuYW1lOiAnY2xvc2V2aXAnLFxuXHRcdFx0XHRcdHZhbHVlOiAnMScsXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdG5hbWU6ICdibG9ja29wdGlvbnMnLFxuXHRcdFx0XHRsaXN0OiBibG9ja29wdGlvbnMsXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55CG55Sx77yI55So5LqO5bCB56aB5pel5b+X77yJ77yaJywgJ+eQhueUse+8iOeUqOaWvOWwgemOluaXpeiqjO+8ie+8micpLFxuXHRcdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdCfor7fogIPomZHlnKjpu5jorqTnmoTmtojmga/kuK3liqDlhaXmnInnlKjnmoTor6bnu4bkv6Hmga/jgIInLFxuXHRcdFx0XHRcdCfoq4vogIPmha7lnKjpoJDoqK3nmoToqIrmga/kuK3liqDlhaXmnInnlKjnmoToqbPntLDos4foqIrjgIInXG5cdFx0XHRcdCksXG5cdFx0XHRcdHZhbHVlOiBUd2lua2xlLmJsb2NrLmZpZWxkX2Jsb2NrX29wdGlvbnMucmVhc29uLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRuYW1lOiAnZmlsZXJsb2dfbGFiZWwnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj4Lop4HvvJonLCAn5Y+D6KaL77yaJyksXG5cdFx0XHRcdHN0eWxlOiAnZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zdHlsZTpub3JtYWwgIWltcG9ydGFudCcsXG5cdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5Zyo5bCB56aB55CG55Sx5Lit5qCH5riF54m55q6K5oOF5Ya15Lul5L6b5YW25LuW566h55CG5ZGY5Y+C6ICDJyxcblx0XHRcdFx0XHQn5Zyo5bCB6Y6W55CG55Sx5Lit5qiZ5riF54m55q6K5oOF5rOB5Lul5L6b5YW25LuW566h55CG5ZOh5Y+D6ICDJ1xuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdG5hbWU6ICdmaWx0ZXJfc2VlX2Fsc28nLFxuXHRcdFx0XHRldmVudDogVHdpbmtsZS5ibG9jay5jYWxsYmFjay50b2dnbGVfc2VlX2Fsc29zLFxuXHRcdFx0XHRzdHlsZTogJ2Rpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXJnaW4tcmlnaHQ6NXB4Jyxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+i/h+a7pOWZqOaXpeW/lycsICfpgY7mv77lmajml6XoqownKSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUygn6L+H5ruk5Zmo5pel5b+XJywgJ+mBjua/vuWZqOaXpeiqjCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ2RlbGV0ZWRfc2VlX2Fsc28nLFxuXHRcdFx0XHRldmVudDogVHdpbmtsZS5ibG9jay5jYWxsYmFjay50b2dnbGVfc2VlX2Fsc29zLFxuXHRcdFx0XHRzdHlsZTogJ2Rpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXJnaW4tcmlnaHQ6NXB4Jyxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W3suWIoOmZpOeahOe8lui+kScsICflt7LliKrpmaTnmoTnt6jovK8nKSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUygn5bey5Yig6Zmk55qE57yW6L6RJywgJ+W3suWIqumZpOeahOe3qOi8rycpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ2ZpbHRlcl9zZWVfYWxzbycsXG5cdFx0XHRcdGV2ZW50OiBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLnRvZ2dsZV9zZWVfYWxzb3MsXG5cdFx0XHRcdHN0eWxlOiAnZGlzcGxheTppbmxpbmUtYmxvY2s7IG1hcmdpbi1yaWdodDo1cHgnLFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi36K6o6K666aG1JywgJ+S9v+eUqOiAheiojuirlumggScpLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHR2YWx1ZTogd2luZG93LndnVUxTKCfnlKjmiLforqjorrrpobUnLCAn5L2/55So6ICF6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHRcdFx0ZmllbGRfYmxvY2tfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRuYW1lOiAnZmlsdGVyX3NlZV9hbHNvJyxcblx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2sudG9nZ2xlX3NlZV9hbHNvcyxcblx0XHRcdFx0c3R5bGU6ICdkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luLXJpZ2h0OjVweCcsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfov4fljrvnmoTlsIHnpoHorrDlvZUnLCAn6YGO5Y6755qE5bCB6Y6W6KiY6YyEJyksXG5cdFx0XHRcdFx0XHRjaGVja2VkOiBmYWxzZSxcblx0XHRcdFx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoJ+i/h+WOu+eahOWwgeemgeiusOW9lScsICfpgY7ljrvnmoTlsIHpjpboqJjpjIQnKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0XHQvLyBZZXQtYW5vdGhlci1sb2dldmVudHMtZG9lc24ndC1oYW5kbGUtcmFuZ2VzLXdlbGxcblx0XHRcdGlmIChibG9ja2VkVXNlck5hbWUgPT09IHJlbGV2YW50VXNlck5hbWUpIHtcblx0XHRcdFx0ZmllbGRfYmxvY2tfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoaWRkZW4nLFxuXHRcdFx0XHRcdG5hbWU6ICdyZWJsb2NrJyxcblx0XHRcdFx0XHR2YWx1ZTogJzEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHRlbXBsYXRlQm94KSB7XG5cdFx0XHRmaWVsZF90ZW1wbGF0ZV9vcHRpb25zID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qih5p2/6YCJ6aG5JywgJ+aooeadv+mBuOmghScpLFxuXHRcdFx0XHRuYW1lOiAnZmllbGRfdGVtcGxhdGVfb3B0aW9ucycsXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdG5hbWU6ICd0ZW1wbGF0ZScsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mAieaLqeiuqOiuuumhteaooeadv++8micsICfpgbjmk4foqI7oq5bpoIHmqKHmnb/vvJonKSxcblx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX3RlbXBsYXRlLFxuXHRcdFx0XHRsaXN0OiBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmZpbHRlcmVkX2Jsb2NrX2dyb3VwcyhibG9ja0dyb3VwLCB0cnVlKSxcblx0XHRcdFx0dmFsdWU6IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucy50ZW1wbGF0ZSxcblx0XHRcdH0pO1xuXHRcdFx0ZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRuYW1lOiAnYXJ0aWNsZScsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mTvuaOpemhtemdoicsICfpgKPntZDpoIHpnaInKSxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+WPr+S7pemaj+mAmuefpemTvuaOpemhtemdou+8jOS+i+WmguegtOWdj+eahOebruagh+OAguayoeacieadoeebrumcgOimgemTvuaOpeWImeivt+eVmeepuuOAgicsXG5cdFx0XHRcdFx0J+WPr+S7pemaqOmAmuefpemAo+e1kOmggemdou+8jOS+i+WmguegtOWjnueahOebruaomeOAguaykuacieaineebrumcgOimgemAo+e1kOWJh+iri+eVmeepuuOAgidcblx0XHRcdFx0KSxcblx0XHRcdH0pO1xuXHRcdFx0Ly8gT25seSB2aXNpYmxlIGlmIHBhcnRpYWwgYW5kIG5vdCBibG9ja2luZ1xuXHRcdFx0ZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRuYW1lOiAnYXJlYScsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WwgeemgeiMg+WbtCcsICflsIHpjpbnr4TlnI0nKSxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+mYu+atoueUqOaIt+e8lui+keeahOmhtemdouaIluWRveWQjeepuumXtOeahOWPr+mAieivtOaYjuOAgicsXG5cdFx0XHRcdFx0J+mYu+atouS9v+eUqOiAhee3qOi8r+eahOmggemdouaIluWRveWQjeepuumWk+eahOWPr+mBuOiqquaYjuOAgidcblx0XHRcdFx0KSxcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCFibG9ja0JveCkge1xuXHRcdFx0XHRmaWVsZF90ZW1wbGF0ZV9vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAndGVtcGxhdGVfZXhwaXJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogJ+Wwgeemgeacn+mZkO+8micsXG5cdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5bCB56aB5pe26ZW/77yM5aaCMjTlsI/ml7bjgIEy5ZGo44CB5peg6ZmQ5pyf562J44CCJywgJ+WwgemOluaZgumVt++8jOWmgjI05bCP5pmC44CBMumAseOAgeeEoemZkOacn+etieOAgicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0bmFtZTogJ2Jsb2NrX3JlYXNvbicsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+KAnOeUseS6juKApuKApuaCqOW3suiiq+WwgeemgeKAnScsICfjgIznlLHmlrzigKbigKbmgqjlt7LooqvlsIHpjpbjgI0nKSxcblx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdCflj6/pgInnmoTnkIbnlLHvvIznlKjkuo7mm7/mjaLpu5jorqTnkIbnlLHjgILlj6rlnKjluLjop4TlsIHnpoHmqKHmnb/kuK3mnInmlYjjgIInLFxuXHRcdFx0XHRcdCflj6/pgbjnmoTnkIbnlLHvvIznlKjmlrzmm7/mj5vpoJDoqK3nkIbnlLHjgILlj6rlnKjluLjopo/lsIHpjpbmqKHmnb/kuK3mnInmlYjjgIInXG5cdFx0XHRcdCksXG5cdFx0XHRcdHZhbHVlOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYmxvY2tfcmVhc29uLFxuXHRcdFx0XHRzaXplOiA2MCxcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGJsb2NrQm94KSB7XG5cdFx0XHRcdGZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdG5hbWU6ICdibGFua19kdXJhdGlvbicsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3lnKjmqKHmnb/kuK3ljIXlkKvlsIHnpoHmnJ/pmZAnLCAn5LiN5Zyo5qih5p2/5Lit5YyF5ZCr5bCB6Y6W5pyf6ZmQJyksXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5ibGFua19kdXJhdGlvbixcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmqKHmnb/lsIbkvJrmmL7npLrigJzkuIDmrrXml7bpl7TigJ3ogIzkuI3mmK/lhbfkvZPml7bplb8nLFxuXHRcdFx0XHRcdFx0XHRcdCfmqKHmnb/lsIfmnIPpoa/npLrjgIzkuIDmrrXmmYLplpPjgI3ogIzkuI3mmK/lhbfpq5TmmYLplbcnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3og73nvJbovpHoh6rlt7HnmoTorqjorrrpobUnLCAn5LiN6IO957eo6Lyv6Ieq5bex55qE6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdub3RhbGsnLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMubm90YWxrLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+eUqOatpOWcqOWwgeemgeaooeadv+S4reaMh+aYjuivpeeUqOaIt+e8lui+keiuqOiuuumhteeahOadg+mZkOW3suiiq+enu+mZpCcsXG5cdFx0XHRcdFx0XHRcdFx0J+eUqOatpOWcqOWwgemOluaooeadv+S4reaMh+aYjuipsuS9v+eUqOiAhee3qOi8r+iojuirlumggeeahOasiumZkOW3suiiq+enu+mZpCdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S4jeiDveWPkemAgeeUteWtkOmCruS7ticsICfkuI3og73lgrPpgIHpm7vlrZDpg7Xku7YnKSxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ25vZW1haWxfdGVtcGxhdGUnLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMubm9lbWFpbF90ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfnlKjmraTlnKjlsIHnpoHmqKHmnb/kuK3mjIfmmI7or6XnlKjmiLflj5HpgIHnlLXlrZDpgq7ku7bnmoTmnYPpmZDlt7Looqvnp7vpmaQnLFxuXHRcdFx0XHRcdFx0XHRcdCfnlKjmraTlnKjlsIHpjpbmqKHmnb/kuK3mjIfmmI7oqbLkvb/nlKjogIXlgrPpgIHpm7vlrZDpg7Xku7bnmoTmrIrpmZDlt7Looqvnp7vpmaQnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3og73liJvlu7rotKblj7cnLCAn5LiN6IO95bu656uL6LOs6JmfJyksXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdub2NyZWF0ZV90ZW1wbGF0ZScsXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5ub2NyZWF0ZV90ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfnlKjmraTlnKjlsIHnpoHmqKHmnb/kuK3mjIfmmI7or6XnlKjmiLfliJvlu7rotKblj7fnmoTmnYPpmZDlt7Looqvnp7vpmaQnLFxuXHRcdFx0XHRcdFx0XHRcdCfnlKjmraTlnKjlsIHpjpbmqKHmnb/kuK3mjIfmmI7oqbLkvb/nlKjogIXlu7rnq4vos6zomZ/nmoTmrIrpmZDlt7Looqvnp7vpmaQnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgJHByZXZpZXdsaW5rID0gJChgPGEgaWQ9XCJ0d2lua2xlYmxvY2stcHJldmlldy1saW5rXCI+JHt3aW5kb3cud2dVTFMoJ+mihOiniCcsICfpoJDopr0nKX08L2E+YCk7XG5cdFx0XHQkcHJldmlld2xpbmsub2ZmKCdjbGljaycpLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5wcmV2aWV3KCRmb3JtWzBdKTtcblx0XHRcdH0pO1xuXHRcdFx0JHByZXZpZXdsaW5rLmNzcyh7XG5cdFx0XHRcdGN1cnNvcjogJ3BvaW50ZXInLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF90ZW1wbGF0ZV9vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRpZDogJ2Jsb2NrcHJldmlldycsXG5cdFx0XHRcdGxhYmVsOiBbJHByZXZpZXdsaW5rWzBdXSxcblx0XHRcdH0pO1xuXHRcdFx0ZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0aWQ6ICd0d2lua2xlYmxvY2stcHJldmlld2JveCcsXG5cdFx0XHRcdHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRhZ0JveCkge1xuXHRcdFx0ZmllbGRfdGFnX29wdGlvbnMgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDnlKjmiLfpobUnLCAn5qiZ6KiY5L2/55So6ICF6aCB6Z2iJyksXG5cdFx0XHRcdG5hbWU6ICdmaWVsZF90YWdfb3B0aW9ucycsXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX3RhZ19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdG5hbWU6ICd0YWcnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6nnlKjmiLfpobXmqKHmnb/vvJonLCAn6YG45pOH5L2/55So6ICF6aCB6Z2i5qih5p2/77yaJyksXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogYHt7QmxvY2tlZCB1c2VyfX3vvJoke3dpbmRvdy53Z1VMUygn5LiA6Iis5rC45LmF5bCB56aBJywgJ+S4gOiIrOawuOS5heWwgemOlicpfWAsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ0Jsb2NrZWQgdXNlcicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogYHt7U29ja3B1cHBldH1977yaJHt3aW5kb3cud2dVTFMoJ+WCgOWEoei0puWPtycsICflgoDlhKHos6zomZ8nKX1gLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdTb2NrcHVwcGV0Jyxcblx0XHRcdFx0XHRcdHN1Ymdyb3VwOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiAnc3BwVXNlcm5hbWUnLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Li76LSm5Y+355So5oi35ZCN77yaJywgJ+S4u+izrOiZn+S9v+eUqOiAheWQjeeose+8micpLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ3NwcFR5cGUnLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eKtuaAge+8micsICfni4DmhYvvvJonKSxcblx0XHRcdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2Jsb2NrZWQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYGJsb2NrZWQgLSAke3dpbmRvdy53Z1VMUygn5LuF5L6d6KGM5Li66K+B5o2u6K6k5a6aJywgJ+WDheS+neihjOeCuuitieaTmuiqjeWumicpfWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAncHJvdmVuJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGBwcm92ZW4gLSAke3dpbmRvdy53Z1VMUygn57uP5YKA5YSh6LCD5p+l56Gu6K6kJywgJ+e2k+WCgOWEoeiqv+afpeeiuuiqjScpfWAsXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdjb25maXJtZWQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYGNvbmZpcm1lZCAtICR7d2luZG93LndnVUxTKCfnu4/mn6XmoLjnoa7orqQnLCAn57aT5p+l5qC456K66KqNJyl9YCxcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdzcHBFdmlkZW5jZScsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoLnmja7igKbigKbnoa7lrprvvJonLCAn5qC55pOa4oCm4oCm56K65a6a77yaJyksXG5cdFx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0J+e6r+aWh+Wtl+aIluaYr+W4pltbXV3nmoTpk77mjqXvvIzkvovlpoLvvJpbW1NwZWNpYWw65Zu65a6a6ZO+5o6lL3h4eHh4eHh4fOeUqOaIt+afpeaguF1dJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfntJTmloflrZfmiJbmmK/luLZbW11d55qE6YCj57WQ77yM5L6L5aaC77yaW1tTcGVjaWFsOuWbuuWumumTvuaOpS94eHh4eHh4eHznlKjmiLbmn6XmoLhdXSdcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiBge3tTb2NrcHVwcGV0ZWVyfGJsb2NrZWR9fe+8miR7d2luZG93LndnVUxTKCflgoDlhKHkuLvotKblj7cnLCAn5YKA5YSh5Li76LOs6JmfJyl9YCxcblx0XHRcdFx0XHRcdHZhbHVlOiAnU29ja3B1cHBldGVlcicsXG5cdFx0XHRcdFx0XHRzdWJncm91cDogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdzcG1DaGVja2VkJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdzcG1DaGVja2VkJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn57uP55So5oi35p+l5qC456Gu6K6kJywgJ+e2k+S9v+eUqOiAheafpeaguOeiuuiqjScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ3NwbUV2aWRlbmNlJyxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mineWklueQhueUse+8micsICfpoY3lpJbnkIbnlLHvvJonKSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAodW5ibG9ja0JveCkge1xuXHRcdFx0ZmllbGRfdW5ibG9ja19vcHRpb25zID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Kej6Zmk5bCB56aB6YCJ6aG5JywgJ+ino+mZpOWwgemOlumBuOmghScpLFxuXHRcdFx0XHRuYW1lOiAnZmllbGRfdW5ibG9ja19vcHRpb25zJyxcblx0XHRcdH0pO1xuXHRcdFx0ZmllbGRfdW5ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICd0ZXh0YXJlYScsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eQhueUse+8iOeUqOS6juWwgeemgeaXpeW/l++8ie+8micsICfnkIbnlLHvvIjnlKjmlrzlsIHpjpbml6XoqozvvInvvJonKSxcblx0XHRcdFx0bmFtZTogJ3JlYXNvbicsXG5cdFx0XHRcdHZhbHVlOiBUd2lua2xlLmJsb2NrLmZpZWxkX3VuYmxvY2tfb3B0aW9ucy5yZWFzb24sXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0bGV0IG9sZGZpZWxkO1xuXHRcdGlmIChmaWVsZF9wcmVzZXQpIHtcblx0XHRcdFtvbGRmaWVsZF0gPSAkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfcHJlc2V0XCJdJyk7XG5cdFx0XHRvbGRmaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWVsZF9wcmVzZXQucmVuZGVyKCksIG9sZGZpZWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3ByZXNldFwiXScpLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKGZpZWxkX2Jsb2NrX29wdGlvbnMpIHtcblx0XHRcdFtvbGRmaWVsZF0gPSAkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfYmxvY2tfb3B0aW9uc1wiXScpO1xuXHRcdFx0b2xkZmllbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZmllbGRfYmxvY2tfb3B0aW9ucy5yZW5kZXIoKSwgb2xkZmllbGQpO1xuXHRcdFx0JGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkXzY0XCJdJykuc2hvdygpO1xuXHRcdFx0JGZvcm0uZmluZCgnW25hbWU9cGFnZXJlc3RyaWN0aW9uc10nKS5zZWxlY3QyKHtcblx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0cGxhY2Vob2xkZXI6IHdpbmRvdy53Z1VMUygn6L6T5YWl6KaB6Zi75q2i55So5oi357yW6L6R55qE6aG16Z2iJywgJ+i8uOWFpeimgemYu+atouS9v+eUqOiAhee3qOi8r+eahOmggemdoicpLFxuXHRcdFx0XHRsYW5ndWFnZToge1xuXHRcdFx0XHRcdGVycm9yTG9hZGluZzogKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHdpbmRvdy53Z1VMUygn5pCc57Si6K+N5rGH5LiN5a6M5pW05oiW5peg5pWIJywgJ+aQnOWwi+ipnuW9meS4jeWujOaVtOaIlueEoeaViCcpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1heGltdW1TZWxlY3Rpb25MZW5ndGg6IDEwLFxuXHRcdFx0XHRtaW5pbXVtSW5wdXRMZW5ndGg6IDEsXG5cdFx0XHRcdGFqYXg6IHtcblx0XHRcdFx0XHR1cmw6IG13LnV0aWwud2lraVNjcmlwdCgnYXBpJyksXG5cdFx0XHRcdFx0ZGF0YVR5cGU6ICdqc29uJyxcblx0XHRcdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0XHRcdGRhdGE6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQocGFyYW1zLnRlcm0pO1xuXHRcdFx0XHRcdFx0aWYgKCF0aXRsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdFx0XHRsaXN0OiAnYWxscGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRhcGZyb206IHRpdGxlLnRpdGxlLFxuXHRcdFx0XHRcdFx0XHRhcG5hbWVzcGFjZTogdGl0bGUubmFtZXNwYWNlLFxuXHRcdFx0XHRcdFx0XHRhcGxpbWl0OiAnMTAnLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHByb2Nlc3NSZXN1bHRzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0czogZGF0YS5xdWVyeS5hbGxwYWdlcy5tYXAoKHBhZ2UpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHBhZ2UudGl0bGUsIHBhZ2UubnMpLnRvVGV4dCgpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogdGl0bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiB0aXRsZSxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVTZWxlY3Rpb246IChjaG9pY2UpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJCgnPGE+Jylcblx0XHRcdFx0XHRcdC50ZXh0KGNob2ljZS50ZXh0KVxuXHRcdFx0XHRcdFx0LmF0dHIoe1xuXHRcdFx0XHRcdFx0XHRocmVmOiBtdy51dGlsLmdldFVybChjaG9pY2UudGV4dCksXG5cdFx0XHRcdFx0XHRcdHRhcmdldDogJ19ibGFuaycsXG5cdFx0XHRcdFx0XHRcdHJlbDogJ25vb3BlbmVyIG5vcmVmZXJyZXInLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblx0XHRcdCRmb3JtLmZpbmQoJ1tuYW1lPW5hbWVzcGFjZXJlc3RyaWN0aW9uc10nKS5zZWxlY3QyKHtcblx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0bWF0Y2hlcjogTW9yZWJpdHMuc2VsZWN0Mi5tYXRjaGVycy53b3JkQmVnaW5uaW5nLFxuXHRcdFx0XHRsYW5ndWFnZToge1xuXHRcdFx0XHRcdHNlYXJjaGluZzogTW9yZWJpdHMuc2VsZWN0Mi5xdWVyeUludGVyY2VwdG9yLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZVJlc3VsdDogTW9yZWJpdHMuc2VsZWN0Mi5oaWdobGlnaHRTZWFyY2hNYXRjaGVzLFxuXHRcdFx0XHRwbGFjZWhvbGRlcjogd2luZG93LndnVUxTKCfpgInmi6nopoHnpoHmraLnlKjmiLfnvJbovpHnmoTlkb3lkI3nqbrpl7QnLCAn6YG45pOH6KaB56aB5q2i5L2/55So6ICF57eo6Lyv55qE5ZG95ZCN56m66ZaTJyksXG5cdFx0XHR9KTtcblx0XHRcdG13LnV0aWwuYWRkQ1NTKFxuXHRcdFx0XHQvKiBSZWR1Y2UgcGFkZGluZztcblx0XHRcdFx0ICogQWRqdXN0IGZvbnQgc2l6ZTtcblx0XHRcdFx0ICogUmVtb3ZlIGJsYWNrIGJvcmRlcjtcblx0XHRcdFx0ICogTWFrZSB0aGUgdGlueSBjcm9zcyBsYXJnZXJcblx0XHRcdFx0ICovXG5cdFx0XHRcdCcuc2VsZWN0Mi1yZXN1bHRzIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbntwYWRkaW5nLXRvcDoxcHg7cGFkZGluZy1ib3R0b206MXB4fS5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1kcm9wZG93biAuc2VsZWN0Mi1yZXN1bHRzLC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0aW9uIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWR7Zm9udC1zaXplOjEzcHh9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1mb2N1cyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxle2JvcmRlcjoxcHggc29saWQgI2FhYX0uc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3Zle2ZvbnQtc2l6ZToxMjUlfSdcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRmb3JtLmZpbmQoJ2ZpZWxkc2V0W25hbWU9XCJmaWVsZF9ibG9ja19vcHRpb25zXCJdJykuaGlkZSgpO1xuXHRcdFx0JGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkXzY0XCJdJykuaGlkZSgpO1xuXHRcdFx0Ly8gQ2xlYXIgc2VsZWN0MiBvcHRpb25zXG5cdFx0XHQkZm9ybS5maW5kKCdbbmFtZT1wYWdlcmVzdHJpY3Rpb25zXScpLnZhbChudWxsKS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdCRmb3JtLmZpbmQoJ1tuYW1lPW5hbWVzcGFjZXJlc3RyaWN0aW9uc10nKS52YWwobnVsbCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0fVxuXHRcdGlmIChmaWVsZF90ZW1wbGF0ZV9vcHRpb25zKSB7XG5cdFx0XHRbb2xkZmllbGRdID0gJGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3RlbXBsYXRlX29wdGlvbnNcIl0nKTtcblx0XHRcdG9sZGZpZWxkLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZpZWxkX3RlbXBsYXRlX29wdGlvbnMucmVuZGVyKCksIG9sZGZpZWxkKTtcblx0XHRcdGUudGFyZ2V0LmZvcm0ucm9vdC5wcmV2aWV3ZXIgPSBuZXcgTW9yZWJpdHMud2lraS5wcmV2aWV3KFxuXHRcdFx0XHQkKGUudGFyZ2V0LmZvcm0ucm9vdCkuZmluZCgnI3R3aW5rbGVibG9jay1wcmV2aWV3Ym94JykubGFzdCgpWzBdXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfdGVtcGxhdGVfb3B0aW9uc1wiXScpLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKGZpZWxkX3RhZ19vcHRpb25zKSB7XG5cdFx0XHRbb2xkZmllbGRdID0gJGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3RhZ19vcHRpb25zXCJdJyk7XG5cdFx0XHRvbGRmaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWVsZF90YWdfb3B0aW9ucy5yZW5kZXIoKSwgb2xkZmllbGQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfdGFnX29wdGlvbnNcIl0nKS5oaWRlKCk7XG5cdFx0fVxuXHRcdGlmIChmaWVsZF91bmJsb2NrX29wdGlvbnMpIHtcblx0XHRcdFtvbGRmaWVsZF0gPSAkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfdW5ibG9ja19vcHRpb25zXCJdJyk7XG5cdFx0XHRvbGRmaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWVsZF91bmJsb2NrX29wdGlvbnMucmVuZGVyKCksIG9sZGZpZWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3VuYmxvY2tfb3B0aW9uc1wiXScpLmhpZGUoKTtcblx0XHR9XG5cdFx0Ly8gQW55IGJsb2NrLCBpbmNsdWRpbmcgcmFuZ2VzXG5cdFx0aWYgKFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbykge1xuXHRcdFx0Ly8gZmFsc2UgZm9yIGFuIGlwIGNvdmVyZWQgYnkgYSByYW5nZSBvciBhIHNtYWxsZXIgcmFuZ2Ugd2l0aGluIGEgbGFyZ2VyIHJhbmdlO1xuXHRcdFx0Ly8gdHJ1ZSBmb3IgYSB1c2VyLCBzaW5nbGUgaXAgYmxvY2ssIG9yIHRoZSBleGFjdCByYW5nZSBmb3IgYSByYW5nZSBibG9ja1xuXHRcdFx0Y29uc3Qgc2FtZVVzZXIgPSBibG9ja2VkVXNlck5hbWUgPT09IHJlbGV2YW50VXNlck5hbWU7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdCgkYm9keS5maW5kKCdkaXZbbmFtZT1cImN1cnJlbnRibG9ja1wiXSBzcGFuJykubGFzdCgpWzBdKTtcblx0XHRcdGxldCBzdGF0dXNTdHIgPSBgJHtyZWxldmFudFVzZXJOYW1lfeW3suiiqyR7XG5cdFx0XHRcdFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mby5wYXJ0aWFsID09PSAnJ1xuXHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCfpg6jliIblsIHnpoEnLCAn6YOo5YiG5bCB6Y6WJylcblx0XHRcdFx0XHQ6IHdpbmRvdy53Z1VMUygn5YWo56uZ5bCB56aBJywgJ+WFqOermeWwgemOlicpXG5cdFx0XHR9YDtcblx0XHRcdC8vIFJhbmdlIGJsb2NrZWRcblx0XHRcdGlmIChUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8ucmFuZ2VzdGFydCAhPT0gVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLnJhbmdlZW5kKSB7XG5cdFx0XHRcdGlmIChzYW1lVXNlcikge1xuXHRcdFx0XHRcdHN0YXR1c1N0ciArPSB3aW5kb3cud2dVTFMoJ++8iOauteWwgeemge+8iScsICfvvIjmrrXlsIHpjpbvvIknKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBDaGFuZ2Ugb3JkZXJcblx0XHRcdFx0XHQvLyBMaW5rIHRvIHRoZSBmdWxsIHJhbmdlXG5cdFx0XHRcdFx0Y29uc3QgJHJhbmdlYmxvY2tsb2dsaW5rID0gJCgnPHNwYW4+JykuYXBwZW5kKFxuXHRcdFx0XHRcdFx0JChcblx0XHRcdFx0XHRcdFx0YDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiR7bXcudXRpbC5nZXRVcmwoJ1NwZWNpYWw6TG9nJywge1xuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogJ3ZpZXcnLFxuXHRcdFx0XHRcdFx0XHRcdHBhZ2U6IGJsb2NrZWRVc2VyTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnYmxvY2snLFxuXHRcdFx0XHRcdFx0XHR9KX1cIj4ke1xuXHRcdFx0XHRcdFx0XHRcdE1vcmViaXRzLmlwLmdldDY0KHJlbGV2YW50VXNlck5hbWUpID09PSBibG9ja2VkVXNlck5hbWUgPyAnLzY0JyA6IGJsb2NrZWRVc2VyTmFtZVxuXHRcdFx0XHRcdFx0XHR9PC9hPilgXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRzdGF0dXNTdHIgKz1cblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn77yI5L2N5LqOJywgJ++8iOS9jeaWvCcpICtcblx0XHRcdFx0XHRcdCRyYW5nZWJsb2NrbG9nbGluay5odG1sKCkgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmrrXlsIHnpoHlhoXvvIknLCAn5q615bCB6Y6W5YWn77yJJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8uZXhwaXJ5ID09PSAnaW5maW5pdHknKSB7XG5cdFx0XHRcdHN0YXR1c1N0ciArPSB3aW5kb3cud2dVTFMoJ++8iOaXoOmZkOacn++8iScsICfvvIjnhKHpmZDmnJ/vvIknKTtcblx0XHRcdH0gZWxzZSBpZiAobmV3IE1vcmViaXRzLmRhdGUoVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLmV4cGlyeSkuaXNWYWxpZCgpKSB7XG5cdFx0XHRcdHN0YXR1c1N0ciArPSBgJHtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ++8iOe7iOatouS6jicsICfvvIjntYLmraLmlrwnKSArXG5cdFx0XHRcdFx0bmV3IE1vcmViaXRzLmRhdGUoVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLmV4cGlyeSkuY2FsZW5kYXIoJ3V0YycpXG5cdFx0XHRcdH3vvIlgO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGluZm9TdHIgPSB3aW5kb3cud2dVTFMoJ+atpOihqOWNleWwhicsICfmraTooajllq7lsIcnKTtcblx0XHRcdGlmIChzYW1lVXNlcikge1xuXHRcdFx0XHRpbmZvU3RyICs9IHdpbmRvdy53Z1VMUygn5pu05pS55bCB56aBJywgJ+iuiuabtOWwgemOlicpO1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLnBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQm94KSB7XG5cdFx0XHRcdFx0aW5mb1N0ciArPSB3aW5kb3cud2dVTFMoJ+S4uumDqOWIhuWwgeemgScsICfngrrpg6jliIblsIHpjpYnKTtcblx0XHRcdFx0fSBlbHNlIGlmIChUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8ucGFydGlhbCA9PT0gJycgJiYgIXBhcnRpYWxCb3gpIHtcblx0XHRcdFx0XHRpbmZvU3RyICs9IHdpbmRvdy53Z1VMUygn5Li65YWo56uZ5bCB56aBJywgJ+eCuuWFqOermeWwgemOlicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZm9TdHIgKz0gJ+OAgic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbmZvU3RyICs9XG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDkuIrpop3lpJbnmoQnLCAn5Yqg5LiK6aGN5aSW55qEJykgK1xuXHRcdFx0XHRcdChwYXJ0aWFsQm94ID8gJ+mDqOWIhicgOiAnJykgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCB56aB44CCJywgJ+WwgemOluOAgicpO1xuXHRcdFx0fVxuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oc3RhdHVzU3RyLCBpbmZvU3RyKTtcblx0XHRcdC8vIERlZmF1bHQgdG8gdGhlIGN1cnJlbnQgYmxvY2sgY29uZGl0aW9ucyBvbiBpbnRpYWwgZm9ybSBnZW5lcmF0aW9uXG5cdFx0XHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLnVwZGF0ZV9mb3JtKGUsIFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbyk7XG5cdFx0fVxuXHRcdC8vIFRoaXMgaXMgd2hlcmUgVDE0NjYyOCByZWFsbHkgY29tZXMgaW50byBwbGF5OiBhIHJhbmdlYmxvY2sgd2lsbFxuXHRcdC8vIG9ubHkgcmV0dXJuIHRoZSBjb3JyZWN0IGJsb2NrIGxvZyBpZiB3Z1JlbGV2YW50VXNlck5hbWUgaXMgdGhlXG5cdFx0Ly8gZXhhY3QgcmFuZ2UsIG5vdCBtZXJlbHkgYSBmdW50aW9uYWwgZXF1aXZhbGVudFxuXHRcdGlmIChUd2lua2xlLmJsb2NrLmhhc0Jsb2NrTG9nKSB7XG5cdFx0XHQvLyBBZGQgbW9yZSBkZXRhaWxzXG5cdFx0XHRjb25zdCBibG9ja2xvZ2luZm8gPSBbXTtcblx0XHRcdGNvbnN0ICRibG9ja2xvZ2xpbmsgPSAkKCc8c3Bhbj4nKS5hcHBlbmQoXG5cdFx0XHRcdCQoXG5cdFx0XHRcdFx0YDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiR7bXcudXRpbC5nZXRVcmwoJ1NwZWNpYWw6TG9nJywge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiAndmlldycsXG5cdFx0XHRcdFx0XHRwYWdlOiByZWxldmFudFVzZXJOYW1lLFxuXHRcdFx0XHRcdFx0dHlwZTogJ2Jsb2NrJyxcblx0XHRcdFx0XHR9KX1cIj4ke3dpbmRvdy53Z1VMUygn5bCB56aB5pel5b+XJywgJ+WwgemOluaXpeiqjCcpfTwvYT4pYFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbykge1xuXHRcdFx0XHRibG9ja2xvZ2luZm8ucHVzaCh3aW5kb3cud2dVTFMoJ+WwgeemgeivpuaDhScsICflsIHpjpboqbPmg4UnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBbbGFzdEJsb2NrQWN0aW9uXSA9IFR3aW5rbGUuYmxvY2suYmxvY2tMb2c7XG5cdFx0XHRcdGNvbnN0IGJsb2NrQWN0aW9uID0gbGFzdEJsb2NrQWN0aW9uLmFjdGlvbiA9PT0gJ3VuYmxvY2snID8gVHdpbmtsZS5ibG9jay5ibG9ja0xvZ1sxXSA6IGxhc3RCbG9ja0FjdGlvbjtcblx0XHRcdFx0YmxvY2tsb2dpbmZvLnB1c2goXG5cdFx0XHRcdFx0YOatpCR7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5pcC5pc1JhbmdlKHJlbGV2YW50VXNlck5hbWUpXG5cdFx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCdJUOiMg+WbtCcsICdJUOevhOWcjScpXG5cdFx0XHRcdFx0XHRcdDogd2luZG93LndnVUxTKCfnlKjmiLcnLCAn5L2/55So6ICFJylcblx0XHRcdFx0XHR95pu+5ZyoYCxcblx0XHRcdFx0XHQkKGA8Yj4ke25ldyBNb3JlYml0cy5kYXRlKGJsb2NrQWN0aW9uLnRpbWVzdGFtcCkuY2FsZW5kYXIoJ3V0YycpfTwvYj5gKVswXSxcblx0XHRcdFx0XHRg6KKrJHtibG9ja0FjdGlvbi51c2VyfSR7d2luZG93LndnVUxTKCflsIHnpoEnLCAn5bCB6Y6WJyl9YCxcblx0XHRcdFx0XHQkKGA8Yj4ke01vcmViaXRzLnN0cmluZy5mb3JtYXRUaW1lKGJsb2NrQWN0aW9uLnBhcmFtcy5kdXJhdGlvbil9PC9iPmApWzBdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChsYXN0QmxvY2tBY3Rpb24uYWN0aW9uID09PSAndW5ibG9jaycpIHtcblx0XHRcdFx0XHRibG9ja2xvZ2luZm8ucHVzaChg77yMJHtuZXcgTW9yZWJpdHMuZGF0ZShsYXN0QmxvY2tBY3Rpb24udGltZXN0YW1wKS5jYWxlbmRhcigndXRjJyl96Kej5bCBYCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gYmxvY2sgb3IgcmVibG9ja1xuXHRcdFx0XHRcdGJsb2NrbG9naW5mby5wdXNoKFxuXHRcdFx0XHRcdFx0YO+8jCR7bmV3IE1vcmViaXRzLmRhdGUoYmxvY2tBY3Rpb24ucGFyYW1zLmV4cGlyeSkuY2FsZW5kYXIoJ3V0YycpfSR7d2luZG93LndnVUxTKCfov4fmnJ8nLCAn6YGO5pyfJyl9YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KCRib2R5LmZpbmQoJ2RpdltuYW1lPVwiaGFzYmxvY2tsb2dcIl0gc3BhbicpLmxhc3QoKVswXSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMud2FybihibG9ja2xvZ2luZm8sICRibG9ja2xvZ2xpbmtbMF0pO1xuXHRcdH1cblx0XHQvLyBNYWtlIHN1cmUgYWxsIHRoZSBmaWVsZHMgYXJlIGNvcnJlY3QgYmFzZWQgb24gaW5pdGlhbCBkZWZhdWx0c1xuXHRcdGlmIChibG9ja0JveCkge1xuXHRcdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5jaGFuZ2VfcHJlc2V0KGUpO1xuXHRcdH0gZWxzZSBpZiAodGVtcGxhdGVCb3gpIHtcblx0XHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX3RlbXBsYXRlKGUpO1xuXHRcdH1cblx0fTtcblx0LyoqXG5cdCAqIEtlZXAgYWxwaGFiZXRpemVkIGJ5IGtleSBuYW1lLCBUd2lua2xlLmJsb2NrLmJsb2NrR3JvdXBzIGVzdGFibGlzaGVzXG5cdCAqICAgIHRoZSBvcmRlciB0aGV5IHdpbGwgYXBwZWFyIGluIHRoZSBpbnRlcmZhY2Vcblx0ICpcblx0ICogQmxvY2sgcHJlc2V0IGZvcm1hdCwgYWxsIGtleXMgYWNjZXB0IG9ubHkgJ3RydWUnIChvbWl0IGZvciBmYWxzZSkgZXhjZXB0IHdoZXJlIG5vdGVkOlxuXHQgKiA8dGl0bGUgb2YgYmxvY2sgdGVtcGxhdGU+IDoge1xuXHQgKiAgIGF1dG9ibG9jazogPGF1dG9ibG9jayBhbnkgSVAgYWRkcmVzc2VzIHVzZWQgKGZvciByZWdpc3RlcmVkIHVzZXJzIG9ubHkpPlxuXHQgKiAgIGRpc2FibGV0YWxrOiA8ZGlzYWJsZSB1c2VyIGZyb20gZWRpdGluZyB0aGVpciBvd24gdGFsayBwYWdlIHdoaWxlIGJsb2NrZWQ+XG5cdCAqICAgZXhwaXJ5OiA8c3RyaW5nIC0gZXhwaXJ5IHRpbWVzdGFtcCwgY2FuIGluY2x1ZGUgcmVsYXRpdmUgdGltZXMgbGlrZSBcIjUgbW9udGhzXCIsIFwiMiB3ZWVrc1wiIGV0Yz5cblx0ICogICBmb3JBbm9uT25seTogPHNob3cgYmxvY2sgb3B0aW9uIGluIHRoZSBpbnRlcmZhY2Ugb25seSBpZiB0aGUgcmVsZXZhbnQgdXNlciBpcyBhbiBJUD5cblx0ICogICBmb3JSZWdpc3RlcmVkT25seTogPHNob3cgYmxvY2sgb3B0aW9uIGluIHRoZSBpbnRlcmZhY2Ugb25seSBpZiB0aGUgcmVsZXZhbnQgdXNlciBpcyByZWdpc3RlcmVkPlxuXHQgKiAgIGxhYmVsOiA8c3RyaW5nIC0gbGFiZWwgZm9yIHRoZSBvcHRpb24gb2YgdGhlIGRyb3Bkb3duIGluIHRoZSBpbnRlcmZhY2UgKGtlZXAgYnJpZWYpPlxuXHQgKiAgIG5vZW1haWw6IHByZXZlbnQgdGhlIHVzZXIgZnJvbSBzZW5kaW5nIGVtYWlsIHRocm91Z2ggU3BlY2lhbDpFbWFpbHVzZXJcblx0ICogICBwYWdlUGFyYW06IDxzZXQgaWYgdGhlIGFzc29jaWF0ZWQgYmxvY2sgdGVtcGxhdGUgYWNjZXB0cyBhIHBhZ2UgcGFyYW1ldGVyPlxuXHQgKiAgIHByZXBlbmRSZWFzb246IDxzdHJpbmcgLSBwcmVwZW5kcyB0aGUgdmFsdWUgb2YgJ3JlYXNvbicgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgcmVhc29uLCBuYW1lbHkgZm9yIHdoZW4gcmV2b2tpbmcgdGFsayBwYWdlIGFjY2Vzcz5cblx0ICogICBub2NyZWF0ZTogPGJsb2NrIGFjY291bnQgY3JlYXRpb24gZnJvbSB0aGUgdXNlcidzIElQIChmb3IgYW5vbnltb3VzIHVzZXJzIG9ubHkpPlxuXHQgKiAgIG5vbnN0YW5kYXJkOiA8dGVtcGxhdGUgZG9lcyBub3QgY29uZm9ybSB0byBzdGV3YXJkc2hpcCBvZiBbW2Vud2lraTpXaWtpUHJvamVjdCBVc2VyIFdhcm5pbmdzXV0gYW5kIG1heSBub3QgYWNjZXB0IHN0YW5kYXJkIHBhcmFtZXRlcnM+XG5cdCAqICAgcmVhc29uOiA8c3RyaW5nIC0gYmxvY2sgcmF0aW9uYWxlLCBhcyB3b3VsZCBhcHBlYXIgaW4gdGhlIGJsb2NrIGxvZyxcblx0ICogICAgICAgICAgICBhbmQgdGhlIGVkaXQgc3VtbWFyeSBmb3Igd2hlbiBhZGRpbmcgYmxvY2sgdGVtcGxhdGUsIHVubGVzcyAnc3VtbWFyeScgaXMgc2V0PlxuXHQgKiAgIHJlYXNvblBhcmFtOiA8c2V0IGlmIHRoZSBhc3NvY2lhdGVkIGJsb2NrIHRlbXBsYXRlIGFjY2VwdHMgYSByZWFzb24gcGFyYW1ldGVyPlxuXHQgKiAgIHNpZzogPHN0cmluZyAtIHNldCB0byB+fn5+IGlmIGJsb2NrIHRlbXBsYXRlIGRvZXMgbm90IGFjY2VwdCBcInRydWVcIiBhcyB0aGUgdmFsdWUsIG9yIHNldCBudWxsIHRvIG9taXQgc2lnIHBhcmFtIGFsdG9nZXRoZXI+XG5cdCAqICAgc3VtbWFyeTogPHN0cmluZyAtIGVkaXQgc3VtbWFyeSBmb3Igd2hlbiBhZGRpbmcgYmxvY2sgdGVtcGxhdGUgdG8gdXNlcidzIHRhbGsgcGFnZSwgaWYgbm90IHNldCwgJ3JlYXNvbicgaXMgdXNlZD5cblx0ICogICBzdXBwcmVzc0FydGljbGVJblN1bW1hcnk6IDxzZXQgdG8gc3VwcHJlc3Mgc2hvd2luZyB0aGUgYXJ0aWNsZSBuYW1lIGluIHRoZSBlZGl0IHN1bW1hcnksIGFzIHdpdGggYXR0YWNrIHBhZ2VzPlxuXHQgKiAgIHRlbXBsYXRlTmFtZTogPHN0cmluZyAtIG5hbWUgb2YgdGVtcGxhdGUgdG8gdXNlIChpbnN0ZWFkIG9mIGtleSBuYW1lKSwgZW50cnkgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIFRlbXBsYXRlcyBsaXN0LlxuXHQgKiAgICAgICAgICAgICAgICAgIChlLmcuIHVzZSBhbm90aGVyIHRlbXBsYXRlIGJ1dCB3aXRoIGRpZmZlcmVudCBibG9jayBvcHRpb25zKT5cblx0ICogICB1c2VJbml0aWFsT3B0aW9uczogPHdoZW4gcHJlc2V0IGlzIGNob3Nlbiwgb25seSBjaGFuZ2UgZ2l2ZW4gYmxvY2sgb3B0aW9ucywgbGVhdmUgb3RoZXJzIGFzIHRoZXkgd2VyZT5cblx0ICpcblx0ICogV0FSTklORzogJ2Fub25vbmx5JyBhbmQgJ2FsbG93dXNlcnRhbGsnIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cdCAqICAgVG8gZGlzYWJsZSwgc2V0ICdoYXJkYmxvY2snIGFuZCAnZGlzYWJsZXRhbGsnLCByZXNwZWN0aXZlbHlcblx0ICovXG5cdFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mbyA9IHtcblx0XHQvLyB1dy1wcmVmaXhlZFxuXHRcdCd1dy1ibG9jayc6IHtcblx0XHRcdGF1dG9ibG9jazogdHJ1ZSxcblx0XHRcdGV4cGlyeTogJzEgZGF5Jyxcblx0XHRcdGZvclJlZ2lzdGVyZWRPbmx5OiB0cnVlLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRwYWdlUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb25QYXJhbTogdHJ1ZSxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCa55+lJywgJ+WwgemOlumAmuefpScpLFxuXHRcdFx0c3VwcHJlc3NBcnRpY2xlSW5TdW1tYXJ5OiB0cnVlLFxuXHRcdH0sXG5cdFx0J3V3LWJsb2NraW5kZWYnOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRmb3JSZWdpc3RlcmVkT25seTogdHJ1ZSxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0cGFnZVBhcmFtOiB0cnVlLFxuXHRcdFx0cmVhc29uUGFyYW06IHRydWUsXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpScsICflsIHpjpbpgJrnn6UnKSxcblx0XHRcdHN1cHByZXNzQXJ0aWNsZUluU3VtbWFyeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCd1dy1ibG9ja25vdGFsayc6IHtcblx0XHRcdGRpc2FibGV0YWxrOiB0cnVlLFxuXHRcdFx0cGFnZVBhcmFtOiB0cnVlLFxuXHRcdFx0cmVhc29uUGFyYW06IHRydWUsXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8muemgeatoue8lui+keiuqOiuuumhtScsICflsIHpjpbpgJrnn6XvvJrnpoHmraLnt6jovK/oqI7oq5bpoIEnKSxcblx0XHRcdHN1cHByZXNzQXJ0aWNsZUluU3VtbWFyeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCd1dy0zYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfov53lj41bW0xJQjozUlJ85Zue6YCA5LiN6L+H5LiJ5Y6f5YiZXV0nLCAn6YGV5Y+NW1tMSUI6M1JSfOWbnumAgOS4jemBjuS4ieWOn+WJh11dJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrov53lj41bW0xJQjozUlJ85Zue6YCA5LiN6L+H5LiJ5Y6f5YiZXV0nLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya6YGV5Y+NW1tMSUI6M1JSfOWbnumAgOS4jemBjuS4ieWOn+WJh11dJ1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdCd1dy1hZGJsb2NrJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRwYWdlUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn5pWj5Y+RW1tMSUI6U09BUHzmlaPlj5Hlub/lkYrmiJblrqPkvKBdXScsICfmlaPnmbxbW0xJQjpTT0FQfOaVo+eZvOW7o+WRiuaIluWuo+WCs11dJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrmlaPlj5FbW0xJQjpTT0FQfOaVo+WPkeW5v+WRiuaIluWuo+S8oF1dJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8muaVo+eZvFtbTElCOlNPQVB85pWj55m85buj5ZGK5oiW5a6j5YKzXV0nXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0J3V3LWF0dGFja2Jsb2NrJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnMSBkYXknLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J1tbTElCOkNJVnzooYzkuLrml6DnpLxdXeaIlltbTElCOk5QQXzkurrouqvmlLvlh7tdXScsXG5cdFx0XHRcdCdbW0xJQjpDSVZ86KGM54K654Sh56auXV3miJZbW0xJQjpOUEF85Lq66Lqr5pS75pOKXV0nXG5cdFx0XHQpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77yaW1tMSUI6Q0lWfOihjOS4uuaXoOekvF1d5oiWW1tMSUI6TlBBfOS6uui6q+aUu+WHu11dJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8mltbTElCOkNJVnzooYzngrrnhKHnpq5dXeaIlltbTElCOk5QQXzkurrouqvmlLvmk4pdXSdcblx0XHRcdCksXG5cdFx0fSxcblx0XHQndXctY29weXJpZ2h0YmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu61bW0xJQjpDT1BZVklPfOS+teeKr+iRl+S9nOadg11dJywgJ+aMgee6jFtbTElCOkNPUFlWSU985L6154qv6JGX5L2c5qyKXV0nKSxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+WwgeemgemAmuefpe+8muaMgee7rVtbTElCOkNPUFlWSU985L6154qv6JGX5L2c5p2DXV0nLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5oyB57qMW1tMSUI6Q09QWVZJT3zkvrXniq/okZfkvZzmrIpdXSdcblx0XHRcdCksXG5cdFx0XHR0ZW1wbGF0ZU5hbWU6ICd1dy1ibG9ja2luZGVmJyxcblx0XHR9LFxuXHRcdCd1dy1kYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu61bW0xJQjpWQU585Yig6Zmk5YaF5a65XV0nLCAn5oyB57qMW1tMSUI6VkFOfOWIqumZpOWFp+WuuV1dJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8muaMgee7rVtbTElCOlZBTnzliKDpmaTlhoXlrrldXScsICflsIHpjpbpgJrnn6XvvJrmjIHnuoxbW0xJQjpWQU585Yiq6Zmk5YWn5a65XV0nKSxcblx0XHR9LFxuXHRcdCd1dy1oYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCdbW0xJQjrpqprmibB86aqa5omwXV3lhbbku5bnlKjmiLcnLCAnW1tMSUI66ai35pO+fOmot+aTvl1d5YW25LuW5L2/55So6ICFJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8mltbTElCOumqmuaJsHzpqprmibBdXeWFtuS7lueUqOaItycsICflsIHpjpbpgJrnn6XvvJpbW0xJQjrpqLfmk7586ai35pO+XV3lhbbku5bkvb/nlKjogIUnKSxcblx0XHR9LFxuXHRcdCd1dy12YmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCdbW0xJQjpWQU5856C05Z2PXV0nLCAnW1tMSUI6VkFOfOegtOWjnl1dJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8mltbTElCOlZBTnznoLTlnY9dXScsICflsIHpjpbpgJrnn6XvvJpbW0xJQjpWQU5856C05aOeXV0nKSxcblx0XHR9LFxuXHRcdCd1dy1pbGxlZ2FsYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu63liqDlhaXkuI3nrKblkIjkuK3lm73ku7flgLzop4LnmoTpnZ7ms5XlhoXlrrknLCAn5oyB57qM5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE6Z2e5rOV5YWn5a65JyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrmjIHnu63liqDlhaXkuI3nrKblkIjkuK3lm73ku7flgLzop4LnmoTpnZ7ms5XlhoXlrrknLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5oyB57qM5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE6Z2e5rOV5YWn5a65J1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdCd1dy1zb2NrYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIHdlZWsnLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmu6XnlKhbW0xJQjpTT0NLfOWkmuS4qui0puWPt11dJywgJ+a/q+eUqFtbTElCOlNPQ0t85aSa5YCL6LOs6JmfXV0nKSxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCa55+l77ya5rul55SoW1tMSUI6U09DS3zlpJrkuKrotKblj7ddXScsICflsIHpjpbpgJrnn6XvvJrmv6vnlKhbW0xJQjpTT0NLfOWkmuWAi+izrOiZn11dJyksXG5cdFx0XHR0ZW1wbGF0ZU5hbWU6ICd1dy1ibG9jaycsXG5cdFx0fSxcblx0XHQvLyB1dy11LXByZWZpeGVkXG5cdFx0J3V3LXVibG9jayc6IHtcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdGZvclJlZ2lzdGVyZWRPbmx5OiB0cnVlLFxuXHRcdFx0cmVhc29uOiBge3t1dy11YmxvY2t9fTwhLS0gJHt3aW5kb3cud2dVTFMoJ+S4jeW9k+eUqOaIt+WQjeOAgei9r+WwgeemgScsICfkuI3nlbbkvb/nlKjogIXlkI3nqLEnKX0gLS0+YCxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+WwgeemgemAmuefpe+8muaCqOeahOeUqOaIt+WQjei/neWPjVtbTElCOlV855So5oi35ZCN5p2h5L6LXV0nLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5oKo55qE5L2/55So6ICF5ZCN56ix6YGV5Y+NW1tMSUI6VXzkvb/nlKjogIXlkI3nqLHmop3kvotdXSdcblx0XHRcdCksXG5cdFx0fSxcblx0XHQndXctdWJsb2NrLWlsbGVnYWwnOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRmb3JSZWdpc3RlcmVkT25seTogdHJ1ZSxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0cmVhc29uOiBge3t1dy11YmxvY2staWxsZWdhbH19PCEtLSAke3dpbmRvdy53Z1VMUygn5LiN5ZCI6KeE55qE55So5oi35ZCNJywgJ+S4jeWQiOimj+eahOS9v+eUqOiAheWQjeeosScpfSAtLT5gLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77ya5oKo55qE55So5oi35ZCN6L+d5Y+NW1tMSUI6VXznlKjmiLflkI3mnaHkvotdXScsXG5cdFx0XHRcdCflsIHpjpbpgJrnn6XvvJrmgqjnmoTkvb/nlKjogIXlkI3nqLHpgZXlj41bW0xJQjpVfOS9v+eUqOiAheWQjeeoseaineS+i11dJ1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdCd1dy11YmxvY2stc3VnZ2VzdGl2ZSc6IHtcblx0XHRcdGF1dG9ibG9jazogdHJ1ZSxcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdGZvclJlZ2lzdGVyZWRPbmx5OiB0cnVlLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRyZWFzb246IGB7e3V3LXVibG9jay1zdWdnZXN0aXZlfX08IS0tICR7d2luZG93LndnVUxTKCfor6/lr7zjgIHmt7fmt4bmgKfnlKjmiLflkI0nLCAn6Kqk5bCO44CB5re35reG5oCn5L2/55So6ICF5ZCN56ixJyl9IC0tPmAsXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrmgqjnmoTnlKjmiLflkI3ov53lj41bW0xJQjpVfOeUqOaIt+WQjeadoeS+i11dJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8muaCqOeahOS9v+eUqOiAheWQjeeosemBleWPjVtbTElCOlV85L2/55So6ICF5ZCN56ix5qKd5L6LXV0nXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0J3V3LXVibG9jay1zcGFtJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogYHt7dXctdWJsb2NrLXNwYW19fTwhLS0gJHt3aW5kb3cud2dVTFMoJ+Wuo+S8oOaAp+eUqOaIt+WQjeaIluWuo+S8oOaAp+e8lui+kScsICflrqPlgrPmgKfkvb/nlKjogIXlkI3nqLHmiJblrqPlgrPmgKfnt6jovK8nKX0gLS0+YCxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+WwgeemgemAmuefpe+8muaCqOeahOeUqOaIt+WQjei/neWPjVtbTElCOlV855So5oi35ZCN5p2h5L6LXV0nLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5oKo55qE5L2/55So6ICF5ZCN56ix6YGV5Y+NW1tMSUI6VXzkvb/nlKjogIXlkI3nqLHmop3kvotdXSdcblx0XHRcdCksXG5cdFx0fSxcblx0XHQvLyBvdGhlciBibG9jayB0ZW1wbGF0ZXNcblx0XHQncmFuZ2UgYmxvY2snOiB7XG5cdFx0XHRleHBpcnk6ICcxIHdlZWsnLFxuXHRcdFx0cmVhc29uOiAne3tyYW5nZSBibG9ja319Jyxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0bm9uc3RhbmRhcmQ6IHRydWUsXG5cdFx0XHRmb3JBbm9uT25seTogdHJ1ZSxcblx0XHRcdHNpZzogJ35+Jy5jb25jYXQoJ35+JyksXG5cdFx0fSxcblx0XHQnYmxvY2tlZCBwcm94eSc6IHtcblx0XHRcdGV4cGlyeTogJzIgeWVhcnMnLFxuXHRcdFx0Zm9yQW5vbk9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdG5vbnN0YW5kYXJkOiB0cnVlLFxuXHRcdFx0aGFyZGJsb2NrOiB0cnVlLFxuXHRcdFx0cmVhc29uOiAne3tibG9ja2VkIHByb3h5fX0nLFxuXHRcdFx0c2lnOiBudWxsLFxuXHRcdH0sXG5cdFx0Y2hlY2t1c2VyYmxvY2s6IHtcblx0XHRcdGV4cGlyeTogJzEgd2VlaycsXG5cdFx0XHRmb3JBbm9uT25seTogdHJ1ZSxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0bm9uc3RhbmRhcmQ6IHRydWUsXG5cdFx0XHRyZWFzb246ICd7e2NoZWNrdXNlcmJsb2NrfX0nLFxuXHRcdFx0c2lnOiAnfn4nLmNvbmNhdCgnfn4nKSxcblx0XHR9LFxuXHRcdCdjaGVja3VzZXJibG9jay1hY2NvdW50Jzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdG5vbnN0YW5kYXJkOiB0cnVlLFxuXHRcdFx0cmVhc29uOiAne3tjaGVja3VzZXJibG9jay1hY2NvdW50fX0nLFxuXHRcdFx0c2lnOiAnfn4nLmNvbmNhdCgnfn4nKSxcblx0XHR9LFxuXHRcdCdzY2hvb2wgYmxvY2snOiB7XG5cdFx0XHRleHBpcnk6ICcxIHdlZWsnLFxuXHRcdFx0Zm9yQW5vbk9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdG5vbnN0YW5kYXJkOiB0cnVlLFxuXHRcdFx0cmVhc29uOiAne3tzY2hvb2wgYmxvY2t9fScsXG5cdFx0XHRzaWc6ICd+ficuY29uY2F0KCd+ficpLFxuXHRcdH0sXG5cdFx0J0JvdCBibG9jayBtZXNzYWdlJzoge1xuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn5py65Zmo5Lq65pWF6ZqcJywgJ+apn+WZqOS6uuaVhemanCcpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCflsIHnpoHpgJrnn6XvvJrmnLrlmajkurrmlYXpmpwnLCAn5bCB6Y6W6YCa55+l77ya5qmf5Zmo5Lq65pWF6ZqcJyksXG5cdFx0XHRzaWc6ICd+ficuY29uY2F0KCd+ficpLFxuXHRcdH0sXG5cdFx0Ly8gb3RoZXIgYmxvY2sgcmVhc29uc1xuXHRcdGJpb2Jsb2NrOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfov53lj43nlJ/ogIXkvKDorrDmnaHkvosnLCAn6YGV5Y+N55Sf6ICF5YKz6KiY5qKd5L6LJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8mui/neWPjeeUn+iAheS8oOiusOadoeS+iycsICflsIHpjpbpgJrnn6XvvJrpgZXlj43nlJ/ogIXlgrPoqJjmop3kvosnKSxcblx0XHRcdHRlbXBsYXRlTmFtZTogJ3V3LXZibG9jaycsXG5cdFx0fSxcblx0XHR1Y2Jsb2NrOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCflsaHmrKHlop7liqDmsqHmnIlbW0xJQjpSU3zlj6/pnaDmnaXmupBdXeeahOi1hOaWmScsICflsaLmrKHlop7liqDmspLmnIlbW0xJQjpSU3zlj6/pnaDkvobmupBdXeeahOizh+aWmScpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77ya5bGh5qyh5aKe5Yqg5rKh5pyJW1tMSUI6UlN85Y+v6Z2g5p2l5rqQXV3nmoTotYTmlpknLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5bGi5qyh5aKe5Yqg5rKS5pyJW1tMSUI6UlN85Y+v6Z2g5L6G5rqQXV3nmoTos4fmlpknXG5cdFx0XHQpLFxuXHRcdFx0dGVtcGxhdGVOYW1lOiAndXctYmxvY2snLFxuXHRcdH0sXG5cdFx0bnBibG9jazoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnMSBkYXknLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRwYWdlUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu5Lit5aKe5Yqg5peg5oSP5LmJ5paH5a2XJywgJ+WcqOaineebruS4reWinuWKoOeEoeaEj+e+qeaWh+WtlycpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCflsIHnpoHpgJrnn6XvvJrlnKjmnaHnm67kuK3lop7liqDml6DmhI/kuYnmloflrZcnLCAn5bCB6Y6W6YCa55+l77ya5Zyo5qKd55uu5Lit5aKe5Yqg54Sh5oSP576p5paH5a2XJyksXG5cdFx0XHR0ZW1wbGF0ZU5hbWU6ICd1dy12YmxvY2snLFxuXHRcdH0sXG5cdFx0J3BvaW50LWJsb2NrJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnMSBkYXknLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRwYWdlUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb25QYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu63miZPliLbluqbmk6bovrnnkIMnLCAn5oyB57qM5omT5Yi25bqm5pOm6YKK55CDJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8muaMgee7reaJk+WItuW6puaTpui+ueeQgycsICflsIHpjpbpgJrnn6XvvJrmjIHnuozmiZPliLbluqbmk6bpgornkIMnKSxcblx0XHRcdHRlbXBsYXRlTmFtZTogJ3V3LWJsb2NrJyxcblx0XHR9LFxuXHRcdCdzb2NrLWNvbnRyaWJzJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHJlYXNvblBhcmFtOiB0cnVlLFxuXHRcdFx0cmVhc29uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfnoa7orqTkuLpbW0xJQjpTT0NLfOWCgOWEoV1d5oiW55yf5Lq65YKA5YShIC0g5qC55o2u55So5oi36LSh54yu56Gu5a6aJyxcblx0XHRcdFx0J+eiuuiqjeeCultbTElCOlNPQ0t85YKA5YShXV3miJbnnJ/kurrlgoDlhKEgLSDmoLnmk5rkvb/nlKjogIXosqLnjbvnorrlrponXG5cdFx0XHQpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77ya56Gu6K6k5Li6W1tMSUI6U09DS3zlgoDlhKFdXeaIluecn+S6uuWCgOWEoScsXG5cdFx0XHRcdCflsIHpjpbpgJrnn6XvvJrnorroqo3ngrpbW0xJQjpTT0NLfOWCgOWEoV1d5oiW55yf5Lq65YKA5YShJ1xuXHRcdFx0KSxcblx0XHRcdHRlbXBsYXRlTmFtZTogJ3V3LWJsb2NraW5kZWYnLFxuXHRcdH0sXG5cdFx0J3NvY2stY3UnOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRmb3JSZWdpc3RlcmVkT25seTogdHJ1ZSxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0cmVhc29uUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+ehruiupOS4ultbTElCOlNPQ0t85YKA5YShXV3miJbnnJ/kurrlgoDlhKEgLSDnlKjmiLfmn6XmoLjnoa7orqQnLFxuXHRcdFx0XHQn56K66KqN54K6W1tMSUI6U09DS3zlgoDlhKFdXeaIluecn+S6uuWCgOWEoSAtIOS9v+eUqOiAheafpeaguOeiuuiqjSdcblx0XHRcdCksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrnoa7orqTkuLpbW0xJQjpTT0NLfOWCgOWEoV1d5oiW55yf5Lq65YKA5YShJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8mueiuuiqjeeCultbTElCOlNPQ0t85YKA5YShXV3miJbnnJ/kurrlgoDlhKEnXG5cdFx0XHQpLFxuXHRcdFx0dGVtcGxhdGVOYW1lOiAndXctYmxvY2tpbmRlZicsXG5cdFx0fSxcblx0XHQndXctdWJsb2NrLWF0dGFjayc6IHtcblx0XHRcdGF1dG9ibG9jazogdHJ1ZSxcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdGZvclJlZ2lzdGVyZWRPbmx5OiB0cnVlLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRyZWFzb246IGB7e3V3LXVibG9jay1hdHRhY2t9fTwhLS0gJHt3aW5kb3cud2dVTFMoJ+aUu+WHu+aAp+eUqOaIt+WQjScsICfmlLvmk4rmgKfkvb/nlKjogIXlkI3nqLEnKX0gLS0+YCxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCa55+l77ya5pS75Ye75oCn55So5oi35ZCNJywgJ+WwgemOlumAmuefpe+8muaUu+aTiuaAp+S9v+eUqOiAheWQjeeosScpLFxuXHRcdH0sXG5cdFx0Ly8gQmVnaW4gcGFydGlhbCBibG9jayB0ZW1wbGF0ZXMsIGFjY2Vzc2VkIGluIFR3aW5rbGUuYmxvY2suYmxvY2tHcm91cHNQYXJ0aWFsXG5cdFx0J3V3LXBibG9jayc6IHtcblx0XHRcdGF1dG9ibG9jazogdHJ1ZSxcblx0XHRcdGV4cGlyeTogJzEgZGF5Jyxcblx0XHRcdG5vY3JlYXRlOiBmYWxzZSxcblx0XHRcdHBhZ2VQYXJhbTogZmFsc2UsXG5cdFx0XHRyZWFzb25QYXJhbTogdHJ1ZSxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+WwgeemgemAmuefpe+8muaCqOW3suiiq+emgeatoue8lui+keacieWFveaho+ahiOmmhueahOmDqOWIhuWMuuWfnycsXG5cdFx0XHRcdCflsIHpjpbpgJrnn6XvvJrmgqjlt7LooqvnpoHmraLnt6jovK/mnInnjbjmqpTmoYjppKjnmoTpg6jliIbljYDln58nXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0J3V3LXBibG9ja2luZGVmJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0bm9jcmVhdGU6IGZhbHNlLFxuXHRcdFx0cGFnZVBhcmFtOiBmYWxzZSxcblx0XHRcdHJlYXNvblBhcmFtOiB0cnVlLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77ya5oKo5bey6KKr5rC45LmF56aB5q2i57yW6L6R5pyJ5YW95qGj5qGI6aaG55qE6YOo5YiG5Yy65Z+fJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8muaCqOW3suiiq+awuOS5heemgeatoue3qOi8r+acieeNuOaqlOahiOmkqOeahOmDqOWIhuWNgOWfnydcblx0XHRcdCksXG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS5ibG9jay50cmFuc2Zvcm1CbG9ja1ByZXNldHMgPSAoKSA9PiB7XG5cdFx0Ly8gTWVyZ2UgY3VzdG9tIHJlYXNvblxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBUd2lua2xlLmdldFByZWYoJ2N1c3RvbUJsb2NrUmVhc29uTGlzdCcpKSB7XG5cdFx0XHRjb25zdCBuZXdLZXkgPSBgJHtpdGVtLnZhbHVlfXwke2l0ZW0ubGFiZWx9YDtcblx0XHRcdFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mb1tuZXdLZXldID0ge1xuXHRcdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0XHQuLi5Ud2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9baXRlbS52YWx1ZV0sXG5cdFx0XHRcdHJlYXNvbjogaXRlbS5sYWJlbCxcblx0XHRcdFx0dGVtcGxhdGVOYW1lOiBpdGVtLnZhbHVlLFxuXHRcdFx0fTtcblx0XHRcdGlmIChUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9baXRlbS52YWx1ZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9baXRlbS52YWx1ZV0gPSB7XG5cdFx0XHRcdFx0cGFnZVBhcmFtOiB0cnVlLFxuXHRcdFx0XHRcdHJlYXNvblBhcmFtOiB0cnVlLFxuXHRcdFx0XHRcdGN1c3RvbTogdHJ1ZSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gc3VwcGx5IHNlbnNpYmxlIGRlZmF1bHRzXG5cdFx0Zm9yIChjb25zdCBbcHJlc2V0LCBzZXR0aW5nc10gb2YgT2JqZWN0LmVudHJpZXMoVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvKSkge1xuXHRcdFx0c2V0dGluZ3Muc3VtbWFyeSB8fD0gc2V0dGluZ3MucmVhc29uO1xuXHRcdFx0c2V0dGluZ3Muc2lnID0gc2V0dGluZ3Muc2lnID09PSB1bmRlZmluZWQgPyAneWVzJyA6IHNldHRpbmdzLnNpZztcblx0XHRcdHNldHRpbmdzLmluZGVmaW5pdGUgfHw9IE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHNldHRpbmdzLmV4cGlyeSk7XG5cdFx0XHRpZiAoIVR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkICYmIHNldHRpbmdzLmluZGVmaW5pdGUpIHtcblx0XHRcdFx0c2V0dGluZ3MuZXhwaXJ5ID0gJzEgZGF5Jztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNldHRpbmdzLmV4cGlyeSB8fD0gJzEgZGF5Jztcblx0XHRcdH1cblx0XHRcdFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mb1twcmVzZXRdID0gc2V0dGluZ3M7XG5cdFx0fVxuXHR9O1xuXHQvLyBUaGVzZSBhcmUgdGhlIGdyb3VwcyBvZiBwcmVzZXRzIGFuZCBkZWZpbmVzIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhci4gRm9yIGVhY2ggbGlzdCBpdGVtOlxuXHQvLyAgIGxhYmVsOiA8c3RyaW5nLCB0aGUgZGVzY3JpcHRpb24gdGhhdCB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGRyb3Bkb3duPlxuXHQvLyAgIHZhbHVlOiA8c3RyaW5nLCB0aGUga2V5IG9mIGEgcHJlc2V0IGluIGJsb2NrUHJlc2V0c0luZm8+XG5cdC8vICAgbWV0YTogPGJvb2xlYW4sIHNob3cgaW4gdGVtcGxhdGVzIG9ubHk+XG5cdFR3aW5rbGUuYmxvY2suYmxvY2tHcm91cHMgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pmu6YCa5bCB56aBJywgJ+aZrumAmuWwgemOlicpLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCa55So5bCB56aB77yI6Ieq5a6a5LmJ55CG55Sx77yJJywgJ+mAmueUqOWwgemOlu+8iOiHquiogueQhueUse+8iScpLCB2YWx1ZTogJ3V3LWJsb2NrJ30sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml6DpmZDmnJ/lsIHnpoHvvIjoh6rlrprkuYnnkIbnlLHvvIknLCAn54Sh6ZmQ5pyf5bCB6Y6W77yI6Ieq6KiC55CG55Sx77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd1dy1ibG9ja2luZGVmJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+emgeatoue8lui+keiuqOiuuumhtScsICfnpoHmraLnt6jovK/oqI7oq5bpoIEnKSwgdmFsdWU6ICd1dy1ibG9ja25vdGFsaycsIG1ldGE6IHRydWV9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N5Zue6YCA5LiN6L+H5LiJ5Y6f5YiZJywgJ+mBleWPjeWbnumAgOS4jemBjuS4ieWOn+WJhycpLCB2YWx1ZTogJ3V3LTNibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn5pWj5Y+R5bm/5ZGK5oiW5a6j5LygJywgJ+aVo+eZvOW7o+WRiuaIluWuo+WCsycpLCB2YWx1ZTogJ3V3LWFkYmxvY2snfSxcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+ihjOS4uuaXoOekvOaIluS6uui6q+aUu+WHuycsICfooYzngrrnhKHnpq7miJbkurrouqvmlLvmk4onKSwgdmFsdWU6ICd1dy1hdHRhY2tibG9jayd9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5aSa5qyh5Yqg5YWl5L6154qv6JGX5L2c5p2D55qE5YaF5a65JywgJ+WkmuasoeWKoOWFpeS+teeKr+iRl+S9nOasiueahOWFp+WuuScpLFxuXHRcdFx0XHRcdHZhbHVlOiAndXctY29weXJpZ2h0YmxvY2snLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn5peg5pWF5Yig6Zmk5YaF5a65JywgJ+eEoeaVheWIqumZpOWFp+WuuScpLCB2YWx1ZTogJ3V3LWRibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn6aqa5omw55So5oi3JywgJ+mot+aTvuS9v+eUqOiAhScpLCB2YWx1ZTogJ3V3LWhibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn56C05Z2PJywgJ+egtOWjnicpLCB2YWx1ZTogJ3V3LXZibG9jaycsIHNlbGVjdGVkOiB0cnVlfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aMgee7reWKoOWFpeS4jeespuWQiOS4reWbveS7t+WAvOingueahOmdnuazleWGheWuuScsICfmjIHnuozliqDlhaXkuI3nrKblkIjkuK3lnIvlg7nlgLzop4DnmoTpnZ7ms5XlhaflrrknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3V3LWlsbGVnYWxibG9jaycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtsYWJlbDogd2luZG93LndnVUxTKCfmu6XnlKjlpJrkuKrotKblj7cnLCAn5r+r55So5aSa5YCL6LOs6JmfJyksIHZhbHVlOiAndXctc29ja2Jsb2NrJ30sXG5cdFx0XHRcdC8vIG90aGVyIGJsb2NrIHJlYXNvbnNcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+i/neWPjeeUn+iAheS8oOiusOadoeS+iycsICfpgZXlj43nlJ/ogIXlgrPoqJjmop3kvosnKSwgdmFsdWU6ICdiaW9ibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn5bGh5qyh5aKe5Yqg5rKh5pyJ5Y+v6Z2g5p2l5rqQ55qE6LWE5paZJywgJ+WxouasoeWinuWKoOaykuacieWPr+mdoOS+hua6kOeahOizh+aWmScpLCB2YWx1ZTogJ3VjYmxvY2snfSxcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOadoeebruS4reWinuWKoOaXoOaEj+S5ieaWh+WtlycsICflnKjmop3nm67kuK3lop7liqDnhKHmhI/nvqnmloflrZcnKSwgdmFsdWU6ICducGJsb2NrJ30sXG5cdFx0XHRcdHtsYWJlbDogd2luZG93LndnVUxTKCfmjIHnu63miZPliLbluqbmk6bovrnnkIMnLCAn5oyB57qM5omT5Yi25bqm5pOm6YKK55CDJyksIHZhbHVlOiAncG9pbnQtYmxvY2snfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn56Gu6K6k5Li65YKA5YSh5oiW55yf5Lq65YKA5YSh77yI5qC55o2u55So5oi36LSh54yu56Gu5a6a77yJJyxcblx0XHRcdFx0XHRcdCfnorroqo3ngrrlgoDlhKHmiJbnnJ/kurrlgoDlhKHvvIjmoLnmk5rkvb/nlKjogIXosqLnjbvnorrlrprvvIknXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR2YWx1ZTogJ3NvY2stY29udHJpYnMnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfnoa7orqTkuLrlgoDlhKHmiJbnnJ/kurrlgoDlhKHvvIjnlKjmiLfmn6XmoLjnoa7orqTvvIknLFxuXHRcdFx0XHRcdFx0J+eiuuiqjeeCuuWCgOWEoeaIluecn+S6uuWCgOWEoe+8iOS9v+eUqOiAheafpeaguOeiuuiqje+8iSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHZhbHVlOiAnc29jay1jdScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmnLrlmajkurrlj5HnlJ/mlYXpmpzlubblv4XpobvntKfmgKXlgZzmraInLCAn5qmf5Zmo5Lq655m855Sf5pWF6Zqc5Lim5b+F6aCI57eK5oCl5YGc5q2iJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdCb3QgYmxvY2sgbWVzc2FnZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Y3VzdG9tOiB0cnVlLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ5bCB56aB55CG55SxJywgJ+iHquioguWwgemOlueQhueUsScpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35ZCN5bCB56aBJywgJ+S9v+eUqOiAheWQjeeoseWwgemOlicpLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N55So5oi35ZCN5p2h5L6LJywgJ+mBleWPjeS9v+eUqOiAheWQjeeoseaineS+iycpLCB2YWx1ZTogJ3V3LXVibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiN5ZCI6KeE55qE55So5oi35ZCNJywgJ+S4jeWQiOimj+eahOS9v+eUqOiAheWQjeeosScpLCB2YWx1ZTogJ3V3LXVibG9jay1pbGxlZ2FsJ30sXG5cdFx0XHRcdHtsYWJlbDogd2luZG93LndnVUxTKCflrqPkvKDmgKfnlKjmiLflkI0nLCAn5a6j5YKz5oCn5L2/55So6ICF5ZCN56ixJyksIHZhbHVlOiAndXctdWJsb2NrLXNwYW0nfSxcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+aUu+WHu+aAp+eUqOaIt+WQjScsICfmlLvmk4rmgKfkvb/nlKjogIXlkI3nqLEnKSwgdmFsdWU6ICd1dy11YmxvY2stYXR0YWNrJ30sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmt7fmt4bmgKfmiJbor6/lr7zmgKfnlKjmiLflkI0nLCAn5re35reG5oCn5oiW6Kqk5bCO5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd1dy11YmxvY2stc3VnZ2VzdGl2ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICflhbbku5bmqKHmnb8nLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7bGFiZWw6ICdyYW5nZSBibG9jaycsIHZhbHVlOiAncmFuZ2UgYmxvY2snLCBmb3JBbm9uT25seTogdHJ1ZX0sXG5cdFx0XHRcdHtsYWJlbDogJ3NjaG9vbCBibG9jaycsIHZhbHVlOiAnc2Nob29sIGJsb2NrJywgZm9yQW5vbk9ubHk6IHRydWV9LFxuXHRcdFx0XHR7bGFiZWw6ICdibG9ja2VkIHByb3h5JywgdmFsdWU6ICdibG9ja2VkIHByb3h5JywgZm9yQW5vbk9ubHk6IHRydWV9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35p+l5qC45bCB56aB77yI5Li755So5oi377yJJywgJ+S9v+eUqOiAheafpeaguOWwgemOlu+8iOS4u+S9v+eUqOiAhe+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnY2hlY2t1c2VyYmxvY2snLFxuXHRcdFx0XHRcdGZvckFub25Pbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35p+l5qC45bCB56aB77yI5a2Q55So5oi377yJJywgJ+S9v+eUqOiAheafpeaguOWwgemOlu+8iOWtkOS9v+eUqOiAhe+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnY2hlY2t1c2VyYmxvY2stYWNjb3VudCcsXG5cdFx0XHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuYmxvY2suYmxvY2tHcm91cHNQYXJ0aWFsID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W4uOingemDqOWIhuWwgeemgeeQhueUsScsICfluLjopovpg6jliIblsIHpjpbnkIbnlLEnKSxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mAmueUqOmDqOWIhuWwgeemge+8iOiHquWumuS5ieeQhueUse+8iScsICfpgJrnlKjpg6jliIblsIHpjpbvvIjoh6roqILnkIbnlLHvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3V3LXBibG9jaycsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml6DpmZDmnJ/pg6jliIblsIHnpoHvvIjoh6rlrprkuYnnkIbnlLHvvIknLCAn54Sh6ZmQ5pyf6YOo5YiG5bCB6Y6W77yI6Ieq6KiC55CG55Sx77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd1dy1wYmxvY2tpbmRlZicsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suZmlsdGVyZWRfYmxvY2tfZ3JvdXBzID0gKGdyb3VwLCBzaG93X3RlbXBsYXRlKSA9PiB7XG5cdFx0cmV0dXJuICQubWFwKGdyb3VwLCAoYmxvY2tHcm91cCkgPT4ge1xuXHRcdFx0Ly8gQWRkIGN1c3RvbSByZWFzb25cblx0XHRcdGlmIChibG9ja0dyb3VwLmN1c3RvbSkge1xuXHRcdFx0XHRpZiAoc2hvd190ZW1wbGF0ZSkge1xuXHRcdFx0XHRcdGxldCB0ZW1wbGF0ZXMgPSAkLm1hcChUd2lua2xlLmdldFByZWYoJ2N1c3RvbUJsb2NrUmVhc29uTGlzdCcpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mb1tpdGVtLnZhbHVlXS5jdXN0b20pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGVtcGxhdGVzID0gTW9yZWJpdHMuYXJyYXkudW5pcSh0ZW1wbGF0ZXMpO1xuXHRcdFx0XHRcdGJsb2NrR3JvdXAubGlzdCA9ICQubWFwKHRlbXBsYXRlcywgKHRlbXBsYXRlKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnmqKHmnb8nLCAn6Ieq6KiC5qih5p2/JyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB0ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YmxvY2tHcm91cC5saXN0ID0gJC5tYXAoVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21CbG9ja1JlYXNvbkxpc3QnKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBpdGVtLmxhYmVsLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogYCR7aXRlbS52YWx1ZX18JHtpdGVtLmxhYmVsfWAsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBsaXN0ID0gJC5tYXAoYmxvY2tHcm91cC5saXN0LCAoYmxvY2tQcmVzZXQpID0+IHtcblx0XHRcdFx0aWYgKCFzaG93X3RlbXBsYXRlICYmIGJsb2NrUHJlc2V0Lm1ldGEpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChibG9ja1ByZXNldC52YWx1ZSkge1xuXHRcdFx0XHRcdGNhc2UgJ3JhbmdlIGJsb2NrJzpcblx0XHRcdFx0XHRcdGlmICghTW9yZWJpdHMuaXAuaXNSYW5nZShyZWxldmFudFVzZXJOYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRibG9ja1ByZXNldC5zZWxlY3RlZCA9ICFNb3JlYml0cy5pcC5nZXQ2NChyZWxldmFudFVzZXJOYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBibG9ja1NldHRpbmdzID0gVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvW2Jsb2NrUHJlc2V0LnZhbHVlXTtcblx0XHRcdFx0bGV0IHJlZ2lzdHJhdGlvblJlc3RyaWN0O1xuXHRcdFx0XHRpZiAoYmxvY2tTZXR0aW5ncy5mb3JSZWdpc3RlcmVkT25seSkge1xuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvblJlc3RyaWN0ID0gVHdpbmtsZS5ibG9jay5pc1JlZ2lzdGVyZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tTZXR0aW5ncy5mb3JBbm9uT25seSkge1xuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvblJlc3RyaWN0ID0gIVR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvblJlc3RyaWN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIShibG9ja1NldHRpbmdzLnRlbXBsYXRlTmFtZSAmJiBzaG93X3RlbXBsYXRlKSAmJiByZWdpc3RyYXRpb25SZXN0cmljdCkge1xuXHRcdFx0XHRcdGNvbnN0IHRlbXBsYXRlTmFtZSA9IGJsb2NrU2V0dGluZ3MudGVtcGxhdGVOYW1lIHx8IGJsb2NrUHJlc2V0LnZhbHVlO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRsYWJlbDogKHNob3dfdGVtcGxhdGUgPyBge3ske3RlbXBsYXRlTmFtZX19fTogYCA6ICcnKSArIGJsb2NrUHJlc2V0LmxhYmVsLFxuXHRcdFx0XHRcdFx0dmFsdWU6IGJsb2NrUHJlc2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0ZGF0YTogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ3RlbXBsYXRlLW5hbWUnLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB0ZW1wbGF0ZU5hbWUsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ6ICEhYmxvY2tQcmVzZXQuc2VsZWN0ZWQsXG5cdFx0XHRcdFx0XHRkaXNhYmxlZDogISFibG9ja1ByZXNldC5kaXNhYmxlZCxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmIChsaXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGxhYmVsOiBibG9ja0dyb3VwLmxhYmVsLFxuXHRcdFx0XHRcdGxpc3QsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX3ByZXNldCA9IChlKSA9PiB7XG5cdFx0Y29uc3Qge2Zvcm19ID0gZS50YXJnZXQ7XG5cdFx0Y29uc3Qga2V5ID0gZm9ybS5wcmVzZXQudmFsdWU7XG5cdFx0aWYgKCFrZXkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay51cGRhdGVfZm9ybShlLCBUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9ba2V5XSk7XG5cdFx0aWYgKGZvcm0udGVtcGxhdGUpIHtcblx0XHRcdGZvcm0udGVtcGxhdGUudmFsdWUgPSBUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9ba2V5XS50ZW1wbGF0ZU5hbWUgfHwga2V5O1xuXHRcdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5jaGFuZ2VfdGVtcGxhdGUoZSk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNoYW5nZV9leHBpcnkgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHtleHBpcnl9ID0gZS50YXJnZXQuZm9ybTtcblx0XHRpZiAoZS50YXJnZXQudmFsdWUgPT09ICdjdXN0b20nKSB7XG5cdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoZXhwaXJ5LnBhcmVudE5vZGUsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoZXhwaXJ5LnBhcmVudE5vZGUsIGZhbHNlKTtcblx0XHRcdGV4cGlyeS52YWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5zZWVBbHNvcyA9IFtdO1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLnRvZ2dsZV9zZWVfYWxzb3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Y29uc3QgcmVhc29uID0gdGhpcy5mb3JtLnJlYXNvbi52YWx1ZS5yZXBsYWNlKFxuXHRcdFx0bmV3IFJlZ0V4cChgKDwhLS0gKSjlj4Lop4F85Y+D6KaLKSR7VHdpbmtsZS5ibG9jay5zZWVBbHNvcy5qb2luKCfjgIEnKX0oIC0tPilgKSxcblx0XHRcdCcnXG5cdFx0KTtcblx0XHRUd2lua2xlLmJsb2NrLnNlZUFsc29zID0gVHdpbmtsZS5ibG9jay5zZWVBbHNvcy5maWx0ZXIoKGVsKSA9PiB7XG5cdFx0XHRyZXR1cm4gZWwgIT09IHRoaXMudmFsdWU7XG5cdFx0fSk7XG5cdFx0aWYgKHRoaXMuY2hlY2tlZCkge1xuXHRcdFx0VHdpbmtsZS5ibG9jay5zZWVBbHNvcy5wdXNoKHRoaXMudmFsdWUpO1xuXHRcdH1cblx0XHRjb25zdCBzZWVBbHNvTWVzc2FnZSA9IFR3aW5rbGUuYmxvY2suc2VlQWxzb3Muam9pbign44CBJyk7XG5cdFx0aWYgKFR3aW5rbGUuYmxvY2suc2VlQWxzb3MubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmZvcm0ucmVhc29uLnZhbHVlID0gYCR7cmVhc29ufTwhLS0gJHt3aW5kb3cud2dVTFMoJ+WPguingScsICflj4PoposnKX0ke3NlZUFsc29NZXNzYWdlfSAtLT5gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvcm0ucmVhc29uLnZhbHVlID0gcmVhc29uO1xuXHRcdH1cblx0fTtcblx0Ly8gTm8gZHNcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay51cGRhdGVfZm9ybSA9IChlLCBkYXRhKSA9PiB7XG5cdFx0Y29uc3Qge2Zvcm19ID0gZS50YXJnZXQ7XG5cdFx0bGV0IHtleHBpcnl9ID0gZGF0YTtcblx0XHQvLyBkb24ndCBvdmVycmlkZSBvcmlnaW5hbCBleHBpcnkgaWYgdXNlSW5pdGlhbE9wdGlvbnMgaXMgc2V0XG5cdFx0aWYgKCFkYXRhLnVzZUluaXRpYWxPcHRpb25zKSB7XG5cdFx0XHRpZiAoRGF0ZS5wYXJzZShleHBpcnkpKSB7XG5cdFx0XHRcdGV4cGlyeSA9IG5ldyBEYXRlKGV4cGlyeSkudG9HTVRTdHJpbmcoKTtcblx0XHRcdFx0Zm9ybS5leHBpcnlfcHJlc2V0LnZhbHVlID0gJ2N1c3RvbSc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtLmV4cGlyeV9wcmVzZXQudmFsdWUgPSBkYXRhLmV4cGlyeSB8fCAnY3VzdG9tJztcblx0XHRcdH1cblx0XHRcdGZvcm0uZXhwaXJ5LnZhbHVlID0gZXhwaXJ5O1xuXHRcdFx0aWYgKGZvcm0uZXhwaXJ5X3ByZXNldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0uZXhwaXJ5LnBhcmVudE5vZGUsIHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0uZXhwaXJ5LnBhcmVudE5vZGUsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYm9vbGVhbi1mbGlwcGVkIG9wdGlvbnMsIG1vcmUgYXQgW1ttdzpBUEk6QmxvY2tdXVxuXHRcdGRhdGEuZGlzYWJsZXRhbGsgPSBkYXRhLmRpc2FibGV0YWxrID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGRhdGEuZGlzYWJsZXRhbGs7XG5cdFx0ZGF0YS5oYXJkYmxvY2sgPSBkYXRhLmhhcmRibG9jayA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBkYXRhLmhhcmRibG9jaztcblx0XHQvLyBkaXNhYmxlIGF1dG9ibG9jayBpZiBibG9ja2luZyBhIGJvdFxuXHRcdGlmIChUd2lua2xlLmJsb2NrLnVzZXJJc0JvdCB8fCAvYm90XFxiL2kudGVzdChyZWxldmFudFVzZXJOYW1lKSkge1xuXHRcdFx0ZGF0YS5hdXRvYmxvY2sgPSBmYWxzZTtcblx0XHR9XG5cdFx0JChmb3JtKVxuXHRcdFx0LmZpbmQoJ1tuYW1lPWZpZWxkX2Jsb2NrX29wdGlvbnNdJylcblx0XHRcdC5maW5kKCc6Y2hlY2tib3gnKVxuXHRcdFx0LmVhY2goKF9pLCBlbCkgPT4ge1xuXHRcdFx0XHQvLyBkb24ndCBvdmVycmlkZSBvcmlnaW5hbCBvcHRpb25zIGlmIHVzZUluaXRpYWxPcHRpb25zIGlzIHNldFxuXHRcdFx0XHRpZiAoZGF0YS51c2VJbml0aWFsT3B0aW9ucyAmJiBkYXRhW2VsLm5hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGVsLm5hbWUgPT09ICdjbG9zZXZpcCcpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY2hlY2sgPSBkYXRhW2VsLm5hbWVdID09PSAnJyB8fCAhIWRhdGFbZWwubmFtZV07XG5cdFx0XHRcdCQoZWwpLnByb3AoJ2NoZWNrZWQnLCBjaGVjayk7XG5cdFx0XHR9KTtcblx0XHRpZiAoZGF0YS5wcmVwZW5kUmVhc29uICYmIGRhdGEucmVhc29uKSB7XG5cdFx0XHRmb3JtLnJlYXNvbi52YWx1ZSA9IGAke2RhdGEucmVhc29ufe+8myR7Zm9ybS5yZWFzb24udmFsdWV9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9ybS5yZWFzb24udmFsdWUgPSBkYXRhLnJlYXNvbiB8fCAnJztcblx0XHR9XG5cdFx0Ly8gQ2xlYXIgYW5kL29yIHNldCBhbnkgcGFydGlhbCBwYWdlIG9yIG5hbWVzcGFjZSByZXN0cmljdGlvbnNcblx0XHRpZiAoZm9ybS5wYWdlcmVzdHJpY3Rpb25zKSB7XG5cdFx0XHRjb25zdCAkcGFnZVNlbGVjdCA9ICQoZm9ybSkuZmluZCgnW25hbWU9cGFnZXJlc3RyaWN0aW9uc10nKTtcblx0XHRcdGNvbnN0ICRuYW1lc3BhY2VTZWxlY3QgPSAkKGZvcm0pLmZpbmQoJ1tuYW1lPW5hbWVzcGFjZXJlc3RyaWN0aW9uc10nKTtcblx0XHRcdC8vIFJlc3BlY3QgdXNlSW5pdGlhbE9wdGlvbnMgYnkgY2xlYXJpbmcgZGF0YSB3aGVuIHN3aXRjaGluZyBwcmVzZXRzXG5cdFx0XHQvLyBJbiBwcmFjdGljZSwgdGhpcyB3aWxsIGFsd2F5cyBjbGVhciwgc2luY2Ugbm8gcGFydGlhbCBwcmVzZXRzIHVzZSBpdFxuXHRcdFx0aWYgKCFkYXRhLnVzZUluaXRpYWxPcHRpb25zKSB7XG5cdFx0XHRcdCRwYWdlU2VsZWN0LnZhbChudWxsKS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0JG5hbWVzcGFjZVNlbGVjdC52YWwobnVsbCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBBZGQgYW55IHByZXNldCBvcHRpb25zOyBpbiBwcmFjdGljZSwganVzdCB1c2VkIGZvciBwcmlvciBibG9jayBzZXR0aW5nc1xuXHRcdFx0aWYgKGRhdGEucmVzdHJpY3Rpb25zKSB7XG5cdFx0XHRcdGlmIChkYXRhLnJlc3RyaWN0aW9ucy5wYWdlcyAmJiAhJHBhZ2VTZWxlY3QudmFsKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFnZXMgPSBkYXRhLnJlc3RyaWN0aW9ucy5wYWdlcy5tYXAoKHByKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcHIudGl0bGU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gc2luY2UgcGFnZSByZXN0cmljdGlvbnMgdXNlIGFuIGFqYXggc291cmNlLCB3ZVxuXHRcdFx0XHRcdC8vIHNob3J0LWNpcmN1aXQgdGhhdCBhbmQganVzdCBhZGQgYSBuZXcgb3B0aW9uXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSB7XG5cdFx0XHRcdFx0XHRpZiAoISRwYWdlU2VsZWN0LmZpbmQoYG9wdGlvblt2YWx1ZT0nJHskLmVzY2FwZVNlbGVjdG9yKHBhZ2UpfSddYCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld09wdGlvbiA9IG5ldyBPcHRpb24ocGFnZSwgcGFnZSwgdHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdCRwYWdlU2VsZWN0LmFwcGVuZChuZXdPcHRpb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQkcGFnZVNlbGVjdFxuXHRcdFx0XHRcdFx0LnZhbChbLi4uJHBhZ2VTZWxlY3QudmFsKCksIC4uLihBcnJheS5pc0FycmF5KHBhZ2VzKSA/IHBhZ2VzIDogW3BhZ2VzXSldKVxuXHRcdFx0XHRcdFx0LnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnJlc3RyaWN0aW9ucy5uYW1lc3BhY2VzKSB7XG5cdFx0XHRcdFx0JG5hbWVzcGFjZVNlbGVjdFxuXHRcdFx0XHRcdFx0LnZhbChbXG5cdFx0XHRcdFx0XHRcdC4uLiRuYW1lc3BhY2VTZWxlY3QudmFsKCksXG5cdFx0XHRcdFx0XHRcdC4uLihBcnJheS5pc0FycmF5KGRhdGEucmVzdHJpY3Rpb25zLm5hbWVzcGFjZXMpXG5cdFx0XHRcdFx0XHRcdFx0PyBkYXRhLnJlc3RyaWN0aW9ucy5uYW1lc3BhY2VzXG5cdFx0XHRcdFx0XHRcdFx0OiBbZGF0YS5yZXN0cmljdGlvbnMubmFtZXNwYWNlc10pLFxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHRcdC50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5jaGFuZ2VfdGVtcGxhdGUgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHtmb3JtfSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHt2YWx1ZX0gPSBmb3JtLnRlbXBsYXRlO1xuXHRcdGNvbnN0IHNldHRpbmdzID0gVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvW3ZhbHVlXTtcblx0XHRjb25zdCBibG9ja0JveCA9ICQoZm9ybSkuZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9YmxvY2tdJykuaXMoJzpjaGVja2VkJyk7XG5cdFx0Y29uc3QgcGFydGlhbEJveCA9ICQoZm9ybSkuZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9cGFydGlhbF0nKS5pcygnOmNoZWNrZWQnKTtcblx0XHRjb25zdCB0ZW1wbGF0ZUJveCA9ICQoZm9ybSkuZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9dGVtcGxhdGVdJykuaXMoJzpjaGVja2VkJyk7XG5cdFx0Ly8gQmxvY2sgZm9ybSBpcyBub3QgcHJlc2VudFxuXHRcdGlmICghYmxvY2tCb3gpIHtcblx0XHRcdGlmIChzZXR0aW5ncy5pbmRlZmluaXRlIHx8IHNldHRpbmdzLm5vbnN0YW5kYXJkKSB7XG5cdFx0XHRcdGlmIChUd2lua2xlLmJsb2NrLnByZXZfdGVtcGxhdGVfZXhwaXJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5ibG9jay5wcmV2X3RlbXBsYXRlX2V4cGlyeSA9IGZvcm0udGVtcGxhdGVfZXhwaXJ5LnZhbHVlIHx8ICcnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvcm0udGVtcGxhdGVfZXhwaXJ5LnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0Zm9ybS50ZW1wbGF0ZV9leHBpcnkudmFsdWUgPSAnaW5maW5pdHknO1xuXHRcdFx0fSBlbHNlIGlmIChmb3JtLnRlbXBsYXRlX2V4cGlyeS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5ibG9jay5wcmV2X3RlbXBsYXRlX2V4cGlyeSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGZvcm0udGVtcGxhdGVfZXhwaXJ5LnZhbHVlID0gVHdpbmtsZS5ibG9jay5wcmV2X3RlbXBsYXRlX2V4cGlyeTtcblx0XHRcdFx0XHRUd2lua2xlLmJsb2NrLnByZXZfdGVtcGxhdGVfZXhwaXJ5ID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtLnRlbXBsYXRlX2V4cGlyeS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFR3aW5rbGUuYmxvY2sucHJldl90ZW1wbGF0ZV9leHBpcnkpIHtcblx0XHRcdFx0Zm9ybS5leHBpcnkudmFsdWUgPSBUd2lua2xlLmJsb2NrLnByZXZfdGVtcGxhdGVfZXhwaXJ5O1xuXHRcdFx0fVxuXHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0ubm90YWxrLnBhcmVudE5vZGUsICFzZXR0aW5ncy5ub25zdGFuZGFyZCk7XG5cdFx0XHQvLyBQYXJ0aWFsXG5cdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoZm9ybS5ub2VtYWlsX3RlbXBsYXRlLnBhcmVudE5vZGUsIHBhcnRpYWxCb3gpO1xuXHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0ubm9jcmVhdGVfdGVtcGxhdGUucGFyZW50Tm9kZSwgcGFydGlhbEJveCk7XG5cdFx0fSBlbHNlIGlmICh0ZW1wbGF0ZUJveCkge1xuXHRcdFx0Ly8gT25seSBwcmVzZW50IGlmIGJsb2NrICYmIHRlbXBsYXRlIGZvcm1zIGJvdGggdmlzaWJsZVxuXHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KFxuXHRcdFx0XHRmb3JtLmJsYW5rX2R1cmF0aW9uLnBhcmVudE5vZGUsXG5cdFx0XHRcdCFzZXR0aW5ncy5pbmRlZmluaXRlICYmICFzZXR0aW5ncy5ub25zdGFuZGFyZFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly8gT25seSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaWYgdGVtcGxhdGUgZm9ybSBpcyBwcmVzZW50XG5cdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0uYXJ0aWNsZS5wYXJlbnROb2RlLCBzZXR0aW5ncyAmJiAhIXNldHRpbmdzLnBhZ2VQYXJhbSk7XG5cdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0uYmxvY2tfcmVhc29uLnBhcmVudE5vZGUsIHNldHRpbmdzICYmICEhc2V0dGluZ3MucmVhc29uUGFyYW0pO1xuXHRcdC8vIEFwcGx5IHJlYXNvbiBmcm9tIGJsb2NrUHJlc2V0c0luZm9cblx0XHRpZiAoc2V0dGluZ3MucmVhc29uUGFyYW0pIHtcblx0XHRcdGZvcm0uYmxvY2tfcmVhc29uLnZhbHVlID0gVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvW2Zvcm0ucHJlc2V0LnZhbHVlXS5yZWFzb24gfHwgJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm0uYmxvY2tfcmVhc29uLnZhbHVlID0gJyc7XG5cdFx0fVxuXHRcdC8vIFBhcnRpYWwgYmxvY2tcblx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoZm9ybS5hcmVhLnBhcmVudE5vZGUsIHBhcnRpYWxCb3ggJiYgIWJsb2NrQm94KTtcblx0XHRmb3JtLnJvb3QucHJldmlld2VyLmNsb3NlUHJldmlldygpO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLnByZXZfdGVtcGxhdGVfZXhwaXJ5ID0gbnVsbDtcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5wcmV2aWV3ID0gKGZvcm0pID0+IHtcblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRhcnRpY2xlOiBmb3JtLmFydGljbGUudmFsdWUsXG5cdFx0XHRibGFua19kdXJhdGlvbjogZm9ybS5ibGFua19kdXJhdGlvbiA/IGZvcm0uYmxhbmtfZHVyYXRpb24uY2hlY2tlZCA6IGZhbHNlLFxuXHRcdFx0ZGlzYWJsZXRhbGs6IGZvcm0uZGlzYWJsZXRhbGsuY2hlY2tlZCB8fCAoZm9ybS5ub3RhbGsgPyBmb3JtLm5vdGFsay5jaGVja2VkIDogZmFsc2UpLFxuXHRcdFx0ZXhwaXJ5OiBmb3JtLnRlbXBsYXRlX2V4cGlyeSA/IGZvcm0udGVtcGxhdGVfZXhwaXJ5LnZhbHVlIDogZm9ybS5leHBpcnkudmFsdWUsXG5cdFx0XHRoYXJkYmxvY2s6IFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkID8gZm9ybS5hdXRvYmxvY2suY2hlY2tlZCA6IGZvcm0uaGFyZGJsb2NrLmNoZWNrZWQsXG5cdFx0XHRpbmRlZmluaXRlOiBNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShcblx0XHRcdFx0Zm9ybS50ZW1wbGF0ZV9leHBpcnkgPyBmb3JtLnRlbXBsYXRlX2V4cGlyeS52YWx1ZSA6IGZvcm0uZXhwaXJ5LnZhbHVlXG5cdFx0XHQpLFxuXHRcdFx0cmVhc29uOiBmb3JtLmJsb2NrX3JlYXNvbi52YWx1ZSxcblx0XHRcdHRlbXBsYXRlOiBmb3JtLnRlbXBsYXRlLnZhbHVlLFxuXHRcdFx0cGFydGlhbDogJChmb3JtKS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT1wYXJ0aWFsXScpLmlzKCc6Y2hlY2tlZCcpLFxuXHRcdFx0cGFnZXJlc3RyaWN0aW9uczogJChmb3JtLnBhZ2VyZXN0cmljdGlvbnMpLnZhbCgpIHx8IFtdLFxuXHRcdFx0bmFtZXNwYWNlcmVzdHJpY3Rpb25zOiAkKGZvcm0ubmFtZXNwYWNlcmVzdHJpY3Rpb25zKS52YWwoKSB8fCBbXSxcblx0XHRcdG5vZW1haWw6IGZvcm0ubm9lbWFpbC5jaGVja2VkIHx8IChmb3JtLm5vZW1haWxfdGVtcGxhdGUgPyBmb3JtLm5vZW1haWxfdGVtcGxhdGUuY2hlY2tlZCA6IGZhbHNlKSxcblx0XHRcdG5vY3JlYXRlOiBmb3JtLm5vY3JlYXRlLmNoZWNrZWQgfHwgKGZvcm0ubm9jcmVhdGVfdGVtcGxhdGUgPyBmb3JtLm5vY3JlYXRlX3RlbXBsYXRlLmNoZWNrZWQgOiBmYWxzZSksXG5cdFx0XHRhcmVhOiBmb3JtLmFyZWEudmFsdWUsXG5cdFx0fTtcblx0XHRjb25zdCB0ZW1wbGF0ZVRleHQgPSBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmdldEJsb2NrTm90aWNlV2lraXRleHQocGFyYW1zKTtcblx0XHRmb3JtLnByZXZpZXdlci5iZWdpblJlbmRlcih0ZW1wbGF0ZVRleHQsIGBVc2VyX3RhbGs6JHtyZWxldmFudFVzZXJOYW1lfS9XaWtpdGV4dGApOyAvLyBGb3JjZSB3aWtpdGV4dC9jb3JyZWN0IHVzZXJuYW1lXG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suZXZhbHVhdGUgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZS50YXJnZXQpO1xuXHRcdGNvbnN0ICRmb3JtID0gJChlLnRhcmdldCk7XG5cdFx0Y29uc3QgdG9CbG9jayA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPWJsb2NrXScpLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGNvbnN0IHRvV2FybiA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXRlbXBsYXRlXScpLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGNvbnN0IHRvUGFydGlhbCA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXBhcnRpYWxdJykuaXMoJzpjaGVja2VkJyk7XG5cdFx0Y29uc3QgdG9UYWcgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT10YWddJykuaXMoJzpjaGVja2VkJyk7XG5cdFx0Y29uc3QgdG9Qcm90ZWN0ID0gJGZvcm0uZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9cHJvdGVjdF0nKS5pcygnOmNoZWNrZWQnKTtcblx0XHRjb25zdCB0b1VuYmxvY2sgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT11bmJsb2NrXScpLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGxldCBibG9ja29wdGlvbnMgPSB7fTtcblx0XHRsZXQgdGVtcGxhdGVvcHRpb25zID0ge307XG5cdFx0bGV0IHVuYmxvY2tvcHRpb25zID0ge307XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGZvcm0uZmluZCgnW25hbWU9ZmllbGRfYmxvY2tfb3B0aW9uc10nKSk7XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGZvcm0uZmluZCgnW25hbWU9ZmllbGRfdGVtcGxhdGVfb3B0aW9uc10nKSk7XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGZvcm0uZmluZCgnW25hbWU9ZmllbGRfdGFnX29wdGlvbnNdJykpO1xuXHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suc2F2ZUZpZWxkc2V0KCRmb3JtLmZpbmQoJ1tuYW1lPWZpZWxkX3VuYmxvY2tfb3B0aW9uc10nKSk7XG5cdFx0YmxvY2tvcHRpb25zID0gVHdpbmtsZS5ibG9jay5maWVsZF9ibG9ja19vcHRpb25zO1xuXHRcdHVuYmxvY2tvcHRpb25zID0gVHdpbmtsZS5ibG9jay5maWVsZF91bmJsb2NrX29wdGlvbnM7XG5cdFx0Y29uc3QgdG9DbG9zZXZpcCA9ICEhYmxvY2tvcHRpb25zLmNsb3NldmlwO1xuXHRcdHRlbXBsYXRlb3B0aW9ucyA9IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucztcblx0XHR0ZW1wbGF0ZW9wdGlvbnMuZGlzYWJsZXRhbGsgPSAhISh0ZW1wbGF0ZW9wdGlvbnMuZGlzYWJsZXRhbGsgfHwgYmxvY2tvcHRpb25zLmRpc2FibGV0YWxrKTtcblx0XHR0ZW1wbGF0ZW9wdGlvbnMuaGFyZGJsb2NrID0gISFibG9ja29wdGlvbnMuaGFyZGJsb2NrO1xuXHRcdC8vIHJlbW92ZSBleHRyYW5lb3VzXG5cdFx0ZGVsZXRlIGJsb2Nrb3B0aW9ucy5leHBpcnlfcHJlc2V0O1xuXHRcdGRlbGV0ZSBibG9ja29wdGlvbnMuY2xvc2V2aXA7XG5cdFx0Ly8gUGFydGlhbCBBUEkgcmVxdWlyZXMgdGhpcyB0byBiZSBnb25lLCBub3QgZmFsc2Ugb3IgMFxuXHRcdGlmICh0b1BhcnRpYWwpIHtcblx0XHRcdGJsb2Nrb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcblx0XHRcdHRlbXBsYXRlb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcblx0XHR9XG5cdFx0dGVtcGxhdGVvcHRpb25zLnBhZ2VyZXN0cmljdGlvbnMgPSAkZm9ybS5maW5kKCdbbmFtZT1wYWdlcmVzdHJpY3Rpb25zXScpLnZhbCgpIHx8IFtdO1xuXHRcdHRlbXBsYXRlb3B0aW9ucy5uYW1lc3BhY2VyZXN0cmljdGlvbnMgPSAkZm9ybS5maW5kKCdbbmFtZT1uYW1lc3BhY2VyZXN0cmljdGlvbnNdJykudmFsKCkgfHwgW107XG5cdFx0Ly8gRm9ybWF0IGZvciBBUEkgaGVyZSByYXRoZXIgdGhhbiBpbiBzYXZlRmllbGRzZXRcblx0XHRibG9ja29wdGlvbnMucGFnZXJlc3RyaWN0aW9ucyA9IHRlbXBsYXRlb3B0aW9ucy5wYWdlcmVzdHJpY3Rpb25zLmpvaW4oJ3wnKTtcblx0XHRibG9ja29wdGlvbnMubmFtZXNwYWNlcmVzdHJpY3Rpb25zID0gdGVtcGxhdGVvcHRpb25zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucy5qb2luKCd8Jyk7XG5cdFx0Ly8gdXNlIGJsb2NrIHNldHRpbmdzIGFzIHdhcm4gb3B0aW9ucyB3aGVyZSBub3Qgc3VwcGxpZWRcblx0XHR0ZW1wbGF0ZW9wdGlvbnMuc3VtbWFyeSB8fD0gYmxvY2tvcHRpb25zLnJlYXNvbjtcblx0XHR0ZW1wbGF0ZW9wdGlvbnMuZXhwaXJ5ID0gdGVtcGxhdGVvcHRpb25zLnRlbXBsYXRlX2V4cGlyeSB8fCBibG9ja29wdGlvbnMuZXhwaXJ5O1xuXHRcdHRlbXBsYXRlb3B0aW9ucy5wcmVzZXQgPSB0b0Jsb2NrID8gcGFyYW1zLnByZXNldCA6IG51bGw7XG5cdFx0Ly8gQ2hlY2sgdGFnc1xuXHRcdC8vIEdpdmVuIGFuIGFycmF5IG9mIGluY29tcGF0aWJsZSB0YWdzLCBjaGVjayBpZiB3ZSBoYXZlIHR3byBvciBtb3JlIHNlbGVjdGVkXG5cdFx0Y29uc3QgY2hlY2tJbmNvbXBhdGlibGUgPSAoY29uZmxpY3RzLCBleHRyYSkgPT4ge1xuXHRcdFx0Y29uc3QgY291bnQgPSBjb25mbGljdHMucmVkdWNlKChzdW0sIHRhZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKHN1bSArPSBwYXJhbXMudGFnLmluY2x1ZGVzKHRhZykpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRpZiAoY291bnQgPiAxKSB7XG5cdFx0XHRcdGxldCBtZXNzYWdlID0gYCR7d2luZG93LndnVUxTKCfor7flnKjku6XkuIvmoIfnrb7kuK3mi6nkuIDkvb/nlKgnLCAn6KuL5Zyo5Lul5LiL5qiZ57Gk5Lit5pOH5LiA5L2/55SoJyl977yae3ske2NvbmZsaWN0cy5qb2luKFxuXHRcdFx0XHRcdCd9feOAgXt7J1xuXHRcdFx0XHQpfX1944CCYDtcblx0XHRcdFx0bWVzc2FnZSArPSBleHRyYSB8fCAnJztcblx0XHRcdFx0bXcubm90aWZ5KG1lc3NhZ2UsIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKHRvVGFnKSB7XG5cdFx0XHRpZiAocGFyYW1zLnRhZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn6K+36Iez5bCR6YCJ5oup5LiA5Liq55So5oi36aG15qCH6K6w77yBJywgJ+iri+iHs+WwkemBuOaTh+S4gOWAi+S9v+eUqOiAhemggemdouaomeiomO+8gScpLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVibG9jaycsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNoZWNrSW5jb21wYXRpYmxlKFxuXHRcdFx0XHRcdFsnQmxvY2tlZCB1c2VyJywgJ1NvY2twdXBwZXQnXSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQne3tTb2NrcHVwcGV0fX3lt7LmtrXnm5Z7e0Jsb2NrZWQgdXNlcn1955qE5Yqf6IO944CCJyxcblx0XHRcdFx0XHRcdCd7e1NvY2twdXBwZXR9feW3sua2teiTi3t7QmxvY2tlZCB1c2VyfX3nmoTlip/og73jgIInXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjaGVja0luY29tcGF0aWJsZShcblx0XHRcdFx0XHRbJ0Jsb2NrZWQgdXNlcicsICdTb2NrcHVwcGV0ZWVyJ10sXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J3t7U29ja3B1cHBldGVlcn195bey5ra155uWe3tCbG9ja2VkIHVzZXJ9feeahOWKn+iDveOAgicsXG5cdFx0XHRcdFx0XHQne3tTb2NrcHVwcGV0ZWVyfX3lt7LmtrXok4t7e0Jsb2NrZWQgdXNlcn1955qE5Yqf6IO944CCJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0Y2hlY2tJbmNvbXBhdGlibGUoXG5cdFx0XHRcdFx0WydTb2NrcHVwcGV0JywgJ1NvY2twdXBwZXRlZXInXSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivt+S7juS4u+i0puWPt+WSjOWIhui6q+i0puWPt+S4remAieaLqeS4gOS4quOAgicsICfoq4vlvp7kuLvos6zomZ/lkozliIbouqvos6zomZ/kuK3pgbjmk4fkuIDlgIvjgIInKVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy50YWcuaW5jbHVkZXMoJ1NvY2twdXBwZXQnKSAmJiBwYXJhbXMuc3BwVXNlcm5hbWUudHJpbSgpID09PSAnJykge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fmj5DkvpvlgoDlhKHotKblj7fnmoTkuLvotKblj7fnlKjmiLflkI3vvIEnLCAn6KuL5o+Q5L6b5YKA5YSh6LOs6Jmf55qE5Li76LOs6Jmf5L2/55So6ICF5ZCN56ix77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHRvQmxvY2spIHtcblx0XHRcdGlmIChibG9ja29wdGlvbnMucGFydGlhbCkge1xuXHRcdFx0XHRpZiAoYmxvY2tvcHRpb25zLmRpc2FibGV0YWxrICYmICFibG9ja29wdGlvbnMubmFtZXNwYWNlcmVzdHJpY3Rpb25zLmluY2x1ZGVzKCczJykpIHtcblx0XHRcdFx0XHRtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCfpg6jliIblsIHnpoHml6Dms5XpmLvmraLnvJbovpHoh6rlt7HnmoTorqjorrrpobXvvIzpmaTpnZ7kuZ/lsIHnpoHkuoZVc2VyIHRhbGvlkb3lkI3nqbrpl7TvvIEnLFxuXHRcdFx0XHRcdFx0XHQn6YOo5YiG5bCB6Y6W54Sh5rOV6Zi75q2i57eo6Lyv6Ieq5bex55qE6KiO6KuW6aCB77yM6Zmk6Z2e5Lmf5bCB6Y6W5LqGVXNlciB0YWxr5ZG95ZCN56m66ZaT77yBJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlYmxvY2snLFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghYmxvY2tvcHRpb25zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucyAmJiAhYmxvY2tvcHRpb25zLnBhZ2VyZXN0cmljdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAoIWJsb2Nrb3B0aW9ucy5ub2VtYWlsICYmICFibG9ja29wdGlvbnMubm9jcmVhdGUpIHtcblx0XHRcdFx0XHRcdC8vIEJsYW5rIGVudHJpZXMgdGVjaG5pY2FsbHkgYWxsb3dlZFxuXHRcdFx0XHRcdFx0bXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+ayoeaciemAieaLqemhtemdouaIluWRveWQjeepuumXtO+8jOS5n+ayoeacieWBnOeUqOeUteWtkOmCruS7tuaIluemgeatouWIm+W7uui0puWPt++8m+ivt+mAieaLqeiHs+WwkeS4gOS4qumAiemhueS7peW6lOeUqOmDqOWIhuWwgeemge+8gScsXG5cdFx0XHRcdFx0XHRcdFx0J+aykuaciemBuOaTh+mggemdouaIluWRveWQjeepuumWk++8jOS5n+aykuacieWBnOeUqOmbu+WtkOmDteS7tuaIluemgeatouW7uueri+izrOiZn++8m+iri+mBuOaTh+iHs+WwkeS4gOWAi+mBuOmgheS7peaHieeUqOmDqOWIhuWwgemOlu+8gSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlYmxvY2snLFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjlsIbopoHov5vooYzlsIHnpoHvvIzkvYbmsqHmnInpmLvmraLku7vkvZXpobXpnaLmiJblkb3lkI3nqbrpl7TnmoTnvJbovpHvvIznoa7lrpropoHnu6fnu63vvJ8nLFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjlsIfopoHpgLLooYzlsIHpjpbvvIzkvYbmspLmnInpmLvmraLku7vkvZXpoIHpnaLmiJblkb3lkI3nqbrplpPnmoTnt6jovK/vvIznorrlrpropoHnubznuozvvJ8nXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghYmxvY2tvcHRpb25zLmV4cGlyeSkge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fmj5Dkvpvov4fmnJ/ml7bpl7TvvIEnLCAn6KuL5o+Q5L6b6YGO5pyf5pmC6ZaT77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gZWxzZSBpZiAoTW9yZWJpdHMuc3RyaW5nLmlzSW5maW5pdHkoYmxvY2tvcHRpb25zLmV4cGlyeSkgJiYgIVR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkKSB7XG5cdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+emgeatouaXoOmZkOacn+WwgeemgUlQ5Zyw5Z2A77yBJywgJ+emgeatoueEoemZkOacn+WwgemOlklQ5L2N5Z2A77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICghYmxvY2tvcHRpb25zLnJlYXNvbikge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fmj5DkvpvlsIHnpoHnkIbnlLHvvIEnLCAn6KuL5o+Q5L6b5bCB6Y6W55CG55Sx77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChlLnRhcmdldCk7XG5cdFx0XHRjb25zdCBzdGF0dXNFbGVtZW50ID0gbmV3IE1vcmViaXRzLnN0YXR1cyh3aW5kb3cud2dVTFMoJ+aJp+ihjOWwgeemgScsICfln7fooYzlsIHpjpYnKSk7XG5cdFx0XHRibG9ja29wdGlvbnMuYWN0aW9uID0gJ2Jsb2NrJztcblx0XHRcdGJsb2Nrb3B0aW9ucy51c2VyID0gcmVsZXZhbnRVc2VyTmFtZTtcblx0XHRcdC8vIGJvb2xlYW4tZmxpcHBlZCBvcHRpb25zXG5cdFx0XHRibG9ja29wdGlvbnMuYW5vbm9ubHkgPSBibG9ja29wdGlvbnMuaGFyZGJsb2NrID8gdW5kZWZpbmVkIDogdHJ1ZTtcblx0XHRcdGJsb2Nrb3B0aW9ucy5hbGxvd3VzZXJ0YWxrID0gYmxvY2tvcHRpb25zLmRpc2FibGV0YWxrID8gdW5kZWZpbmVkIDogdHJ1ZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogQ2hlY2sgaWYgYmxvY2sgc3RhdHVzIGNoYW5nZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZm9ybS5cblx0XHRcdCAqIFRoZXJlJ3MgYSBsb3QgdG8gY29uc2lkZXIgaGVyZS4gbGlzdD1ibG9ja3MgcHJvdmlkZXMgdGhlXG5cdFx0XHQgKiBjdXJyZW50IGJsb2NrIHN0YXR1cywgYnV0IHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gaXNzdWVzIHdpdGhcblx0XHRcdCAqIHJlbHlpbmcgb24gaXQuIEZpcnN0LCB0aGUgaWQgZG9lc24ndCB1cGRhdGUgb24gYSByZWJsb2NrLFxuXHRcdFx0ICogbWVhbmluZyB0aGUgaW5kaXZpZHVhbCBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgY29tcGFyZWQuIFRoaXNcblx0XHRcdCAqIGNhbiBiZSBkb25lIHJvdWdobHkgd2l0aCBKU09OLnN0cmluZ2lmeSAtIHdlIGNhbiB0aGFua2Z1bGx5XG5cdFx0XHQgKiByZWx5IG9uIG9yZGVyIGZyb20gdGhlIHNlcnZlciwgYWx0aG91Z2ggc29ydGluZyB3b3VsZCBiZVxuXHRcdFx0ICogZmluZSBpZiBub3QgLSBidXQgZmFsc2V5IHZhbHVlcyBhcmUgcHJvYmxlbWF0aWMgYW5kIGlzXG5cdFx0XHQgKiBub24taWRlYWwuIE1vcmUgaW1wb3J0YW50bHksIGxpc3Q9YmxvY2tzIHdvbid0IGluZGljYXRlIGlmIGFcblx0XHRcdCAqIG5vbi1ibG9ja2VkIHVzZXIgaXMgYmxvY2tlZCB0aGVuIHVuYmxvY2tlZC4gVGhpcyBzaG91bGQgYmVcblx0XHRcdCAqIGV4Y2VlZGluZ3kgcmFyZSwgYnV0IHJlZ2FyZGxlc3MsIHdlIHRodXMgbmVlZCB0byBjaGVja1xuXHRcdFx0ICogbGlzdD1sb2dldmVudHMsIHdoaWNoIGhhcyBhIG5pY2VseSB1cGRhdGluZyBsb2dpZFxuXHRcdFx0ICogcGFyYW1ldGVyLiBXZSBjYW4ndCByZWx5IGp1c3Qgb24gdGhhdCwgdGhvdWdoLCBzaW5jZSBpdFxuXHRcdFx0ICogZG9lc24ndCBhY2NvdW50IGZvciBibG9ja3MgdGhhdCBoYXZlIGV4cGlyZWQgb24gdGhlaXIgb3duLlxuXHRcdFx0ICogQXMgc3VjaCwgd2UgdXNlIGJvdGguIFVzaW5nIHNvbWUgdGVybmFyaWVzLCB0aGUgbG9naWRcblx0XHRcdCAqIHZhcmlhYmxlcyBhcmUgZmFsc2UgaWYgdGhlcmUncyBubyBsb2dldmVudHMsIHNvIGlmIHRoZXlcblx0XHRcdCAqIGFyZW4ndCBlcXVhbCB3ZSBkZWZpbnRlbHkgaGF2ZSBhIGNoYW5nZWQgZW50cnkgKHNlbmRcblx0XHRcdCAqIGNvbmZpcm1hdGlvbikuIElmIHRoZXkgYXJlIGVxdWFsLCB0aGVuIGVpdGhlciB0aGUgdXNlciB3YXNcblx0XHRcdCAqIG5ldmVyIGJsb2NrZWQgKHRoZSBibG9jayBzdGF0dXNlcyB3aWxsIGJlIGVxdWFsLCBub1xuXHRcdFx0ICogY29uZmlybWF0aW9uKSBvciB0aGVyZSdzIG5vIG5ldyBibG9jaywgaW4gd2hpY2ggY2FzZSBlaXRoZXJcblx0XHRcdCAqIGEgYmxvY2sgZXhwaXJlZCAoZGlmZmVyZW50IHN0YXR1c2VzLCBjb25maXJtYXRpb24pIG9yIHRoZVxuXHRcdFx0ICogc2FtZSBibG9jayBpcyBzdGlsbCBhY3RpdmUgKHNhbWUgc3RhdHVzLCBubyBjb25maXJtYXRpb24pLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0bGlzdDogJ2Jsb2Nrc3xsb2dldmVudHMnLFxuXHRcdFx0XHRsZXR5cGU6ICdibG9jaycsXG5cdFx0XHRcdGxlbGltaXQ6IDEsXG5cdFx0XHRcdGxldGl0bGU6IGBVc2VyOiR7YmxvY2tvcHRpb25zLnVzZXJ9YCxcblx0XHRcdH07XG5cdFx0XHQvLyBia3VzZXJzIGRvZXNuJ3QgY2F0Y2ggc2luZ2xlIElQcyBibG9ja2VkIGFzIHBhcnQgb2YgYSByYW5nZSBibG9ja1xuXHRcdFx0aWYgKG13LnV0aWwuaXNJUEFkZHJlc3MoYmxvY2tvcHRpb25zLnVzZXIsIHRydWUpKSB7XG5cdFx0XHRcdHF1ZXJ5LmJraXAgPSBibG9ja29wdGlvbnMudXNlcjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHF1ZXJ5LmJrdXNlcnMgPSBibG9ja29wdGlvbnMudXNlcjtcblx0XHRcdFx0cXVlcnkubGlzdCArPSAnfHVzZXJzJztcblx0XHRcdFx0cXVlcnkudXNwcm9wID0gJ2dyb3Vwcyc7XG5cdFx0XHRcdHF1ZXJ5LnVzdXNlcnMgPSBibG9ja29wdGlvbnMudXNlcjtcblx0XHRcdFx0cXVlcnkubWV0YSA9ICd0b2tlbnMnO1xuXHRcdFx0XHRxdWVyeS50eXBlID0gJ3VzZXJyaWdodHMnO1xuXHRcdFx0fVxuXHRcdFx0YXBpLmdldChxdWVyeSkudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0XHRsZXQgW2Jsb2NrXSA9IGRhdGEucXVlcnkuYmxvY2tzO1xuXHRcdFx0XHQvLyBBcyB3aXRoIHRoZSBpbml0aWFsIGRhdGEgZmV0Y2gsIGlmIGFuIElQIGlzIGJsb2NrZWRcblx0XHRcdFx0Ly8gKmFuZCogcmFuZ2VibG9ja2VkLCB0aGlzIHdvdWxkIG9ubHkgZ3JhYiB3aGljaGV2ZXJcblx0XHRcdFx0Ly8gYmxvY2sgaXMgbW9yZSByZWNlbnQsIHdoaWNoIHdvdWxkIGxpa2VseSBtZWFuIGFcblx0XHRcdFx0Ly8gbWlzbWF0Y2guICBIb3dldmVyLCBpZiB0aGUgcmFuZ2VibG9jayBpcyB1cGRhdGVkXG5cdFx0XHRcdC8vIHdoaWxlIGZpbGxpbmcgb3V0IHRoZSBmb3JtLCB0aGlzIHdvbid0IGRldGVjdCB0aGF0LFxuXHRcdFx0XHQvLyBidXQgdGhhdCdzIHByb2JhYmx5IGZpbmUuXG5cdFx0XHRcdGlmIChkYXRhLnF1ZXJ5LmJsb2Nrcy5sZW5ndGggPiAxICYmIGJsb2NrLnVzZXIgIT09IHJlbGV2YW50VXNlck5hbWUpIHtcblx0XHRcdFx0XHRbLCBibG9ja10gPSBkYXRhLnF1ZXJ5LmJsb2Nrcztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBbbG9nZXZlbnRzXSA9IGRhdGEucXVlcnkubG9nZXZlbnRzO1xuXHRcdFx0XHRjb25zdCB1c2VyID0gZGF0YS5xdWVyeS51c2VycyA/IGRhdGEucXVlcnkudXNlcnNbMF0gOiBudWxsO1xuXHRcdFx0XHRjb25zdCBsb2dpZCA9IGRhdGEucXVlcnkubG9nZXZlbnRzLmxlbmd0aCA/IGxvZ2V2ZW50cy5sb2dpZCA6IGZhbHNlO1xuXHRcdFx0XHRpZiAobG9naWQgIT09IFR3aW5rbGUuYmxvY2suYmxvY2tMb2dJZCB8fCAhIWJsb2NrICE9PSAhIVR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbykge1xuXHRcdFx0XHRcdGxldCBtZXNzYWdlID0gYmxvY2tvcHRpb25zLnVzZXIgKyB3aW5kb3cud2dVTFMoJ+eahOWwgeemgeeKtuaAgeW3suiiq+S/ruaUueOAgicsICfnmoTlsIHpjpbni4DmhYvlt7Looqvkv67mlLnjgIInKTtcblx0XHRcdFx0XHRpZiAoYmxvY2spIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2UgKz0gd2luZG93LndnVUxTKCfmlrDnirbmgIHvvJonLCAn5paw54uA5oWL77yaJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2UgKz0gd2luZG93LndnVUxTKCfmnIDmlrDml6Xlv5fvvJonLCAn5pyA5paw5pel6KqM77yaJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGxldCBsb2dFeHBpcnkgPSAnJztcblx0XHRcdFx0XHRpZiAobG9nZXZlbnRzLnBhcmFtcy5kdXJhdGlvbikge1xuXHRcdFx0XHRcdFx0aWYgKGxvZ2V2ZW50cy5wYXJhbXMuZHVyYXRpb24gPT09ICdpbmZpbml0eScpIHtcblx0XHRcdFx0XHRcdFx0bG9nRXhwaXJ5ID0gd2luZG93LndnVUxTKCfml6DpmZDmnJ8nLCAn54Sh6ZmQ5pyfJyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBleHBpcnlEYXRlID0gbmV3IE1vcmViaXRzLmRhdGUobG9nZXZlbnRzLnBhcmFtcy5leHBpcnkpO1xuXHRcdFx0XHRcdFx0XHRsb2dFeHBpcnkgKz1cblx0XHRcdFx0XHRcdFx0XHQoZXhwaXJ5RGF0ZS5pc0JlZm9yZShuZXcgRGF0ZSgpKSA/IHdpbmRvdy53Z1VMUygn6L+H5pyf5LqOJywgJ+mBjuacn+aWvCcpIDogJ+ebtOWIsCcpICtcblx0XHRcdFx0XHRcdFx0XHRleHBpcnlEYXRlLmNhbGVuZGFyKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIG5vIGR1cmF0aW9uLCBhY3Rpb249dW5ibG9jaywganVzdCBzaG93IHRpbWVzdGFtcFxuXHRcdFx0XHRcdFx0bG9nRXhwaXJ5ID0gYOaWvCR7bmV3IE1vcmViaXRzLmRhdGUobG9nZXZlbnRzLnRpbWVzdGFtcCkuY2FsZW5kYXIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtZXNzYWdlICs9IGDnlLEke2xvZ2V2ZW50cy51c2VyfSR7d2luZG93LndnVUxTKCfku6XigJwnLCAn5Lul44CMJyl9JHtsb2dldmVudHMuY29tbWVudH0ke3dpbmRvdy53Z1VMUygn4oCdJywgJ+OAjScpfSR7XG5cdFx0XHRcdFx0XHRibG9ja0FjdGlvblRleHRbbG9nZXZlbnRzLmFjdGlvbl1cblx0XHRcdFx0XHR9JHtsb2dFeHBpcnl9JHt3aW5kb3cud2dVTFMoJ++8jOS9oOaDs+imgeS7peS9oOeahOiuvue9ruabtOaUueWwgeemgeWQl++8nycsICfvvIzkvaDmg7PopoHku6XkvaDnmoToqK3lrprorormm7TlsIHpjpbll47vvJ8nKX1gO1xuXHRcdFx0XHRcdGlmICghY29uZmlybShtZXNzYWdlKSkge1xuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5omn6KGM5bCB56aBJywgJ+Wft+ihjOWwgemOlicpLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nCcsICfkvb/nlKjogIXlj5bmtojmk43kvZwnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YmxvY2tvcHRpb25zLnJlYmxvY2sgPSAxOyAvLyBXcml0aW5nIG92ZXIgYSBibG9jayB3aWxsIGZhaWwgb3RoZXJ3aXNlXG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZ3JvdXBzQ2FuQmVSZW1vdmVkID0gW1xuXHRcdFx0XHRcdCdhdXRvcGF0cm9sbGVkJyxcblx0XHRcdFx0XHQnY29uZmlybWVkJyxcblx0XHRcdFx0XHQncm5yc3ZlcmlmeS1leGVtcHQnLFxuXHRcdFx0XHRcdCdtYXNzbWVzc2FnZS1zZW5kZXInLFxuXHRcdFx0XHRcdCdwYXRyb2xsZXInLFxuXHRcdFx0XHRcdCd0ZW1wbGF0ZWVkaXRvcicsXG5cdFx0XHRcdFx0J2ltcG9ydGVyJyxcblx0XHRcdFx0XTtcblx0XHRcdFx0bGV0IGdyb3Vwc1RvQmVSZW1vdmVkID0gW107XG5cdFx0XHRcdGlmICh1c2VyICYmIE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KGJsb2Nrb3B0aW9ucy5leHBpcnkpKSB7XG5cdFx0XHRcdFx0Z3JvdXBzVG9CZVJlbW92ZWQgPSB1c2VyLmdyb3Vwcy5maWx0ZXIoKGdyb3VwKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ3JvdXBzQ2FuQmVSZW1vdmVkLmluY2x1ZGVzKGdyb3VwKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBleGVjdXRlIGJsb2NrXG5cdFx0XHRcdGJsb2Nrb3B0aW9ucy50YWdzID0gVHdpbmtsZS5jaGFuZ2VUYWdzO1xuXHRcdFx0XHRibG9ja29wdGlvbnMudG9rZW4gPSBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdFx0XHRjb25zdCBtYkFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaSh3aW5kb3cud2dVTFMoJ+aJp+ihjOWwgeemgScsICfln7fooYzlsIHpjpYnKSwgYmxvY2tvcHRpb25zLCAoKSA9PiB7XG5cdFx0XHRcdFx0c3RhdHVzRWxlbWVudC5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0XHRpZiAodG9XYXJuKSB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmlzc3VlX3RlbXBsYXRlKHRlbXBsYXRlb3B0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0b0Nsb3NldmlwKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2aXBQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdFx0J0xJQl90YWxrOuaKpeWRiuW9k+WJjeegtOWdjycsXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5YWz6Zet6K+35rGCJywgJ+mXnOmWieiri+axgicpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dmlwUGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlKTtcblx0XHRcdFx0XHRcdHZpcFBhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKGJsb2Nrb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR2aXBQYWdlLmxvYWQoVHdpbmtsZS5ibG9jay5jYWxsYmFjay5jbG9zZVJlcXVlc3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZ3JvdXBzVG9CZVJlbW92ZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmlnaHRTdGF0dXNFbGVtZW50ID0gbmV3IE1vcmViaXRzLnN0YXR1cyh3aW5kb3cud2dVTFMoJ+enu+mZpOadg+mZkCcsICfnp7vpmaTmrIrpmZAnKSk7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm0oXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfor6XnlKjmiLfmnInku6XkuIvmnYPpmZDvvJonLCAn6Kmy5L2/55So6ICF5pyJ5Lul5LiL5qyK6ZmQ77yaJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0Z3JvdXBzVG9CZVJlbW92ZWQuam9pbign44CBJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfvvIzmgqjmmK/lkKbmg7PopoHlkIzml7bnp7vpmaTov5nkupvmnYPpmZDvvJ8nLCAn77yM5oKo5piv5ZCm5oOz6KaB5ZCM5pmC56e76Zmk6YCZ5Lqb5qyK6ZmQ77yfJylcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJldm9rZU9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiAndXNlcnJpZ2h0cycsXG5cdFx0XHRcdFx0XHRcdFx0dXNlcjogYmxvY2tvcHRpb25zLnVzZXIsXG5cdFx0XHRcdFx0XHRcdFx0cmVtb3ZlOiBncm91cHNUb0JlUmVtb3ZlZC5qb2luKCd8JyksXG5cdFx0XHRcdFx0XHRcdFx0cmVhc29uOiB3aW5kb3cud2dVTFMoJ+eUqOaIt+W3suiiq+aXoOmZkOacn+WwgeemgScsICfkvb/nlKjogIXlt7LooqvnhKHpmZDmnJ/lsIHpjpYnKSxcblx0XHRcdFx0XHRcdFx0XHR0b2tlbjogZGF0YS5xdWVyeS50b2tlbnMudXNlcnJpZ2h0c3Rva2VuLFxuXHRcdFx0XHRcdFx0XHRcdHRhZ3M6IFR3aW5rbGUuY2hhbmdlVGFncyxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbXJBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfnp7vpmaTmnYPpmZAnLCAn56e76Zmk5qyK6ZmQJyksXG5cdFx0XHRcdFx0XHRcdFx0cmV2b2tlT3B0aW9ucyxcblx0XHRcdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyaWdodFN0YXR1c0VsZW1lbnQuaW5mbyhg5bey56e76ZmkJHtncm91cHNUb0JlUmVtb3ZlZC5qb2luKCfjgIEnKX1gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdG1yQXBpLnBvc3QoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJpZ2h0U3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nOOAgicsICfkvb/nlKjogIXlj5bmtojmk43kvZzjgIInKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bWJBcGkucG9zdCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmICh0b1dhcm4pIHtcblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChlLnRhcmdldCk7XG5cdFx0XHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmlzc3VlX3RlbXBsYXRlKHRlbXBsYXRlb3B0aW9ucyk7XG5cdFx0fVxuXHRcdGlmICh0b1RhZyB8fCB0b1Byb3RlY3QpIHtcblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChlLnRhcmdldCk7XG5cdFx0XHRjb25zdCB1c2VyUGFnZSA9IGBVc2VyOiR7bXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyl9YDtcblx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdHVzZXJQYWdlLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+agh+iusOaIluS/neaKpOeUqOaIt+mhtScsICfmqJnoqJjmiJbkv53orbfkvb/nlKjogIXpoIHpnaInKVxuXHRcdFx0KTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuYmxvY2suY2FsbGJhY2sudGFndXNlcnBhZ2UpO1xuXHRcdH1cblx0XHRpZiAodG9VbmJsb2NrKSB7XG5cdFx0XHRpZiAoIXVuYmxvY2tvcHRpb25zLnJlYXNvbikge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fmj5Dkvpvop6PpmaTlsIHnpoHnkIbnlLHvvIEnLCAn6KuL5o+Q5L6b6Kej6Zmk5bCB6Y6W55CG55Sx77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChlLnRhcmdldCk7XG5cdFx0XHRjb25zdCB1bmJsb2NrU3RhdHVzRWxlbWVudCA9IG5ldyBNb3JlYml0cy5zdGF0dXMod2luZG93LndnVUxTKCfmiafooYzop6PpmaTlsIHnpoEnLCAn5Z+36KGM6Kej6Zmk5bCB6Y6WJykpO1xuXHRcdFx0dW5ibG9ja29wdGlvbnMuYWN0aW9uID0gJ3VuYmxvY2snO1xuXHRcdFx0dW5ibG9ja29wdGlvbnMudXNlciA9IG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpO1xuXHRcdFx0Ly8gZXhlY3V0ZSB1bmJsb2NrXG5cdFx0XHR1bmJsb2Nrb3B0aW9ucy50YWdzID0gVHdpbmtsZS5jaGFuZ2VUYWdzO1xuXHRcdFx0dW5ibG9ja29wdGlvbnMudG9rZW4gPSBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdFx0Y29uc3QgdW5ibG9ja01iQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aJp+ihjOino+mZpOWwgeemgScsICfln7fooYzop6PpmaTlsIHpjpYnKSxcblx0XHRcdFx0dW5ibG9ja29wdGlvbnMsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHR1bmJsb2NrU3RhdHVzRWxlbWVudC5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdHVuYmxvY2tNYkFwaS5wb3N0KCk7XG5cdFx0fVxuXHRcdGlmICghdG9CbG9jayAmJiAhdG9XYXJuICYmICF0b1RhZyAmJiAhdG9Qcm90ZWN0ICYmICF0b1VuYmxvY2spIHtcblx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ivt+e7mVR3aW5rbGXngrnkuovlgZrvvIEnLCAn6KuL57WmVHdpbmtsZem7nuS6i+WBmu+8gScpLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay50YWd1c2VycGFnZSA9IChwYWdlb2JqKSA9PiB7XG5cdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRjb25zdCBzdGF0ZWxlbSA9IHBhZ2VvYmouZ2V0U3RhdHVzRWxlbWVudCgpO1xuXHRcdGlmIChwYXJhbXMuYWN0aW9udHlwZS5pbmNsdWRlcygndGFnJykpIHtcblx0XHRcdGNvbnN0IHRhZ3MgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHBhcmFtcy50YWcpIHtcblx0XHRcdFx0bGV0IHRhZ3RleHQgPSBge3ske3RhZ31gO1xuXHRcdFx0XHRzd2l0Y2ggKHRhZykge1xuXHRcdFx0XHRcdGNhc2UgJ0Jsb2NrZWQgdXNlcic6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdTb2NrcHVwcGV0Jzpcblx0XHRcdFx0XHRcdHRhZ3RleHQgKz0gYFxcbnwgMSA9ICR7cGFyYW1zLnNwcFVzZXJuYW1lLnRyaW0oKX1gO1xuXHRcdFx0XHRcdFx0dGFndGV4dCArPSBgXFxufCAyID0gJHtwYXJhbXMuc3BwVHlwZS50cmltKCl9YDtcblx0XHRcdFx0XHRcdGlmIChwYXJhbXMuc3BwRXZpZGVuY2UudHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdHRhZ3RleHQgKz0gYFxcbnwgZXZpZGVuY2UgPSAke3BhcmFtcy5zcHBFdmlkZW5jZS50cmltKCl9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRhZ3RleHQgKz0gJ1xcbnwgbG9ja2VkID0gbm8nO1xuXHRcdFx0XHRcdFx0dGFndGV4dCArPSAnXFxufCBub3RibG9ja2VkID0gbm8nO1xuXHRcdFx0XHRcdFx0dGFndGV4dCArPSAnXFxuJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1NvY2twdXBwZXRlZXInOlxuXHRcdFx0XHRcdFx0dGFndGV4dCArPSAnXFxufCAxID0gYmxvY2tlZCc7XG5cdFx0XHRcdFx0XHR0YWd0ZXh0ICs9IGBcXG58IGNoZWNrZWQgPSAke3BhcmFtcy5zcG1DaGVja2VkID8gJ3llcycgOiAnJ31gO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5zcG1FdmlkZW5jZS50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0dGFndGV4dCArPSBgXFxufCBldmlkZW5jZSA9ICR7cGFyYW1zLnNwbUV2aWRlbmNlLnRyaW0oKX1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFndGV4dCArPSAnXFxuJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfmnKrnn6XnmoTnlKjmiLfpobXmqKHmnb/vvIEnLCAn5pyq55+l55qE5L2/55So6ICF6aCB6Z2i5qih5p2/77yBJyksIHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlYmxvY2snLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0YWd0ZXh0ICs9ICd9fSc7XG5cdFx0XHRcdHRhZ3MucHVzaCh0YWd0ZXh0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHRleHQgPSB0YWdzLmpvaW4oJ1xcbicpO1xuXHRcdFx0cGFnZW9iai5zZXRQYWdlVGV4dCh0ZXh0KTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkod2luZG93LndnVUxTKCfmoIforrDooqvmsLjkuYXlsIHnpoHnmoTnlKjmiLfpobUnLCAn5qiZ6KiY6KKr5rC45LmF5bCB6Y6W55qE5L2/55So6ICF6aCB6Z2iJykpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNhdmUoKCkgPT4ge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyh3aW5kb3cud2dVTFMoJ+agh+iusOeUqOaIt+mhtScsICfmqJnoqJjkvb/nlKjogIXpoIHpnaInKSwgJ+WujOaIkCcpO1xuXHRcdFx0XHRzdGF0ZWxlbS5zdGF0dXMod2luZG93LndnVUxTKCfmraPlnKjkv53miqTpobXpnaInLCAn5q2j5Zyo5L+d6K236aCB6Z2iJykpO1xuXHRcdFx0XHRwYWdlb2JqLmxvYWQoVHdpbmtsZS5ibG9jay5jYWxsYmFjay5wcm90ZWN0dXNlcnBhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2sucHJvdGVjdHVzZXJwYWdlKHBhZ2VvYmopO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5wcm90ZWN0dXNlcnBhZ2UgPSAocGFnZW9iaikgPT4ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0Y29uc3Qgc3RhdGVsZW0gPSBwYWdlb2JqLmdldFN0YXR1c0VsZW1lbnQoKTtcblx0XHRpZiAocGFyYW1zLmFjdGlvbnR5cGUuaW5jbHVkZXMoJ3Byb3RlY3QnKSkge1xuXHRcdFx0aWYgKHBhZ2VvYmouZXhpc3RzKCkpIHtcblx0XHRcdFx0cGFnZW9iai5zZXRFZGl0UHJvdGVjdGlvbignc3lzb3AnLCAnaW5kZWZpbml0ZScpO1xuXHRcdFx0XHRwYWdlb2JqLnNldE1vdmVQcm90ZWN0aW9uKCdzeXNvcCcsICdpbmRlZmluaXRlJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYWdlb2JqLnNldENyZWF0ZVByb3RlY3Rpb24oJ3N5c29wJywgJ2luZGVmaW5pdGUnKTtcblx0XHRcdH1cblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkod2luZG93LndnVUxTKCfooqvmsLjkuYXlsIHnpoHnmoTnlKjmiLfpobUnLCAn6KKr5rC45LmF5bCB6Y6W55qE5L2/55So6ICF6aCB6Z2iJykpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnByb3RlY3QoKCkgPT4ge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/neaKpOeUqOaIt+mhtScsICfkv53orbfkvb/nlKjogIXpoIHpnaInKSxcblx0XHRcdFx0XHRwYWdlb2JqLmV4aXN0cygpID8gd2luZG93LndnVUxTKCflt7Llhajkv53miqQnLCAn5bey5YWo5L+d6K23JykgOiB3aW5kb3cud2dVTFMoJ+W3sueZvee6uOS/neaKpCcsICflt7Lnmb3ntJnkv53orbcnKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRzdGF0ZWxlbS5pbmZvKCflhajpg6jlrozmiJAnKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGF0ZWxlbS5pbmZvKCflhajpg6jlrozmiJAnKTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suaXNzdWVfdGVtcGxhdGUgPSAoZm9ybURhdGEpID0+IHtcblx0XHQvLyBVc2Ugd2dSZWxldmFudFVzZXJOYW1lIHRvIGVuc3VyZSB0aGUgYmxvY2sgdGVtcGxhdGUgZ29lcyB0byBhIHNpbmdsZSBJUCBhbmQgbm90IHRvIHRoZVxuXHRcdC8vIFwidGFsayBwYWdlXCIgb2YgYW4gSVAgcmFuZ2UgKHdoaWNoIGRvZXMgbm90IGV4aXN0KVxuXHRcdGNvbnN0IHVzZXJUYWxrUGFnZSA9IGBVc2VyX3RhbGs6JHttdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKX1gO1xuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdC4uLmZvcm1EYXRhLFxuXHRcdFx0bWVzc2FnZURhdGE6IFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mb1tmb3JtRGF0YS50ZW1wbGF0ZV0sXG5cdFx0XHR1c2VydGFsa19zdW1tYXJ5OiBUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9bZm9ybURhdGEucHJlc2V0IHx8IGZvcm1EYXRhLnRlbXBsYXRlXS5zdW1tYXJ5LFxuXHRcdFx0cmVhc29uOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYmxvY2tfcmVhc29uLFxuXHRcdFx0ZGlzYWJsZXRhbGs6IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5ub3RhbGssXG5cdFx0XHRub2VtYWlsOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMubm9lbWFpbF90ZW1wbGF0ZSxcblx0XHRcdG5vY3JlYXRlOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMubm9jcmVhdGVfdGVtcGxhdGUsXG5cdFx0fTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHVzZXJUYWxrUGFnZTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoXG5cdFx0XHQn5a6M5oiQ77yM5bCG5Zyo5Yeg56eS5ZCO5Yqg6L2955So5oi36K6o6K666aG1Jyxcblx0XHRcdCflrozmiJDvvIzlsIflnKjlub7np5LlvozovInlhaXkvb/nlKjogIXoqI7oq5bpoIEnXG5cdFx0KTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0dXNlclRhbGtQYWdlLFxuXHRcdFx0d2luZG93LndnVUxTKCfnlKjmiLforqjorrrpobXkv67mlLknLCAn5L2/55So6ICF6KiO6KuW6aCB5L+u5pS5Jylcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmJsb2NrLmNhbGxiYWNrLm1haW4pO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNsb3NlUmVxdWVzdCA9ICh2aXBQYWdlKSA9PiB7XG5cdFx0Y29uc3QgcGFyYW1zID0gdmlwUGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRsZXQgdGV4dCA9IHZpcFBhZ2UuZ2V0UGFnZVRleHQoKTtcblx0XHRjb25zdCBzdGF0dXNFbGVtZW50ID0gdmlwUGFnZS5nZXRTdGF0dXNFbGVtZW50KCk7XG5cdFx0Y29uc3QgdXNlck5hbWUgPSBtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKTtcblx0XHRjb25zdCBleHBpcnlUZXh0ID0gTW9yZWJpdHMuc3RyaW5nLmZvcm1hdFRpbWUocGFyYW1zLmV4cGlyeSk7XG5cdFx0Y29uc3QgY29tbWVudCA9IGB7e0Jsb2NrZWR8JHtNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShwYXJhbXMuZXhwaXJ5KSA/ICdpbmRlZicgOiBleHBpcnlUZXh0fX1944CCYDtcblx0XHRjb25zdCByZXF1ZXN0TGlzdCA9IHRleHQuc3BsaXQoLyg/PVxcbj09PS4rPT09XFxzKlxcbikvKTtcblx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHRsZXQgaGlkZW5hbWUgPSBmYWxzZTtcblx0XHRjb25zdCB2aXBSZSA9IG5ldyBSZWdFeHAoXG5cdFx0XHRge3tcXFxccypbVnZdYW5kYWxcXFxccypcXFxcfFxcXFxzKigxXFxcXHMqPVxcXFxzKik/JHtNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KFxuXHRcdFx0XHR1c2VyTmFtZVxuXHRcdFx0KX1cXFxccyooXFxcXHxcXFxccypoaWRlbmFtZVxcXFxzKj1bXnxdKyk/fX1gLFxuXHRcdFx0J20nXG5cdFx0KTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHJlcXVlc3RMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodmlwUmUuZXhlYyhyZXF1ZXN0TGlzdFtpXSkpIHtcblx0XHRcdFx0aGlkZW5hbWUgPSAvXFx8XFxzKmhpZGVuYW1lXFxzKj1bXnxdKy8udGVzdChyZXF1ZXN0TGlzdFtpXSk7XG5cdFx0XHRcdHJlcXVlc3RMaXN0W2ldID0gcmVxdWVzdExpc3RbaV0udHJpbUVuZCgpO1xuXHRcdFx0XHRsZXQgbmV3VGV4dCA9IHJlcXVlc3RMaXN0W2ldLnJlcGxhY2UoXG5cdFx0XHRcdFx0L14oXFwqXFxzKuWkhOeQhu+8milbIFxcdF0qKDwhLS0g6Z2e566h55CG5ZOh5YOF5Y+v5qiZ6KiY5bey5Z+36KGM55qE5bCB56aB77yM6Yed5bCN5o+Q5aCx55qE5oSP6KaL6KuL5pS+5Zyo5LiL5LiA6KGMIC0tPik/WyBcXHRdKiQvbSxcblx0XHRcdFx0XHRgJDEke2NvbW1lbnR9LS1+fmAuY29uY2F0KCd+ficpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChyZXF1ZXN0TGlzdFtpXSA9PT0gbmV3VGV4dCkge1xuXHRcdFx0XHRcdG5ld1RleHQgPSBgJHtyZXF1ZXN0TGlzdFtpXX1cXG4qIOWkhOeQhu+8miR7Y29tbWVudH0tLX5+YC5jb25jYXQoJ35+Jyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVxdWVzdExpc3RbaV0gPSBgJHtuZXdUZXh0fVxcbmA7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghZm91bmQpIHtcblx0XHRcdHN0YXR1c0VsZW1lbnQud2Fybih3aW5kb3cud2dVTFMoJ+ayoeacieaJvuWIsOebuOWFs+eahOivt+axgicsICfmspLmnInmib7liLDnm7jpl5znmoToq4vmsYInKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRleHQgPSByZXF1ZXN0TGlzdC5qb2luKCcnKTtcblx0XHRsZXQgc3VtbWFyeTtcblx0XHRpZiAoaGlkZW5hbWUpIHtcblx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+agh+iusOS4uuW3suWkhOeQhicsICfmqJnoqJjngrrlt7LomZXnkIYnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VtbWFyeSA9IGAvKiAke3VzZXJOYW1lfSAqLyBgO1xuXHRcdFx0aWYgKE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHBhcmFtcy5leHBpcnkpKSB7XG5cdFx0XHRcdHN1bW1hcnkgKz0gd2luZG93LndnVUxTKCfkuI3pmZDmnJ/lsIHnpoEnLCAn5LiN6ZmQ5pyf5bCB6Y6WJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdW1tYXJ5ICs9IHdpbmRvdy53Z1VMUygn5bCB56aBJywgJ+WwgemOlicpICsgZXhwaXJ5VGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdFx0dmlwUGFnZS5zZXRFZGl0U3VtbWFyeShzdW1tYXJ5KTtcblx0XHR2aXBQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHR2aXBQYWdlLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdHZpcFBhZ2Uuc2F2ZSgpO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmdldEJsb2NrTm90aWNlV2lraXRleHQgPSAocGFyYW1zKSA9PiB7XG5cdFx0bGV0IHRleHQgPSAne3snO1xuXHRcdGNvbnN0IHNldHRpbmdzID0gVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvW3BhcmFtcy50ZW1wbGF0ZV07XG5cdFx0aWYgKHNldHRpbmdzLm5vbnN0YW5kYXJkKSB7XG5cdFx0XHR0ZXh0ICs9IHBhcmFtcy50ZW1wbGF0ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGV4dCArPSAnc3Vic3Q6Jy5jb25jYXQocGFyYW1zLnRlbXBsYXRlKTtcblx0XHRcdGlmIChwYXJhbXMuYXJ0aWNsZSAmJiBzZXR0aW5ncy5wYWdlUGFyYW0pIHtcblx0XHRcdFx0dGV4dCArPSBgfHBhZ2U9JHtwYXJhbXMuYXJ0aWNsZX1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCEvdGU/bXB8XlxccyokfG1pbi8uZXhlYyhwYXJhbXMuZXhwaXJ5KSkge1xuXHRcdFx0XHRpZiAocGFyYW1zLmluZGVmaW5pdGUpIHtcblx0XHRcdFx0XHR0ZXh0ICs9ICd8aW5kZWY9eWVzJztcblx0XHRcdFx0fSBlbHNlIGlmICghcGFyYW1zLmJsYW5rX2R1cmF0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gTm8gZXhwaXJ5IGNoZWNrc1xuXHRcdFx0XHRcdC8vIEJsb2NrIHRlbXBsYXRlIHdhbnRzIGEgZHVyYXRpb24sIG5vdCBkYXRlXG5cdFx0XHRcdFx0dGV4dCArPSBgfHRpbWU9JHtNb3JlYml0cy5zdHJpbmcuZm9ybWF0VGltZShwYXJhbXMuZXhwaXJ5KX1gOyAvLyBmb3JtYXRUaW1lXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghVHdpbmtsZS5ibG9jay5pc1JlZ2lzdGVyZWQgJiYgIXBhcmFtcy5oYXJkYmxvY2spIHtcblx0XHRcdFx0dGV4dCArPSAnfGFub249eWVzJztcblx0XHRcdH1cblx0XHRcdGlmIChwYXJhbXMucmVhc29uKSB7XG5cdFx0XHRcdHRleHQgKz0gYHxyZWFzb249JHtwYXJhbXMucmVhc29ufWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1zLmRpc2FibGV0YWxrKSB7XG5cdFx0XHRcdHRleHQgKz0gJ3xub3RhbGs9eWVzJztcblx0XHRcdH1cblx0XHRcdC8vIEN1cnJlbnRseSwgYWxsIHBhcnRpYWwgYmxvY2sgdGVtcGxhdGVzIGFyZSBcInN0YW5kYXJkXCJcblx0XHRcdC8vIEJ1aWxkaW5nIHRoZSB0ZW1wbGF0ZSwgaG93ZXZlciwgdGFrZXMgYSBmYWlyIGJpdCBvZiBsb2dpY1xuXHRcdFx0aWYgKHBhcmFtcy5wYXJ0aWFsKSB7XG5cdFx0XHRcdGlmIChwYXJhbXMucGFnZXJlc3RyaWN0aW9ucy5sZW5ndGggfHwgcGFyYW1zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBtYWtlU2VudGVuY2UgPSAoYXJyYXkpID0+IHtcblx0XHRcdFx0XHRcdGlmIChhcnJheS5sZW5ndGggPCAzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhcnJheS5qb2luKCflkownKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IGxhc3QgPSBhcnJheS5wb3AoKTtcblx0XHRcdFx0XHRcdHJldHVybiBgJHthcnJheS5qb2luKCfjgIEnKX3lkowke2xhc3R9YDtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdHRleHQgKz0gJ3xhcmVhPeafkOS6myc7XG5cdFx0XHRcdFx0aWYgKHBhcmFtcy5wYWdlcmVzdHJpY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGV4dCArPSBg6aCB6Z2i77yIJHttYWtlU2VudGVuY2UoXG5cdFx0XHRcdFx0XHRcdHBhcmFtcy5wYWdlcmVzdHJpY3Rpb25zLm1hcCgocCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBgW1s6JHtwfV1dYDtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCl9YDtcblx0XHRcdFx0XHRcdHRleHQgKz0gcGFyYW1zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucy5sZW5ndGggPyAn77yJ5ZKM5p+Q5LqbJyA6ICfvvIknO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocGFyYW1zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIDEgPT4gVGFsaywgMiA9PiBVc2VyLCBldGMuXG5cdFx0XHRcdFx0XHRjb25zdCBuYW1lc3BhY2VOYW1lcyA9IHBhcmFtcy5uYW1lc3BhY2VyZXN0cmljdGlvbnMubWFwKChpZCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbWVudUZvcm1hdHRlZE5hbWVzcGFjZXNbaWRdO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR0ZXh0ICs9IGAke1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ1tbSGVscDrlkb3lkI3nqbrpl7R85ZG95ZCN56m66Ze0XV3vvIgnLCAnW1tIZWxwOuWRveWQjeepuumWk3zlkb3lkI3nqbrplpNdXe+8iCcpICtcblx0XHRcdFx0XHRcdFx0bWFrZVNlbnRlbmNlKG5hbWVzcGFjZU5hbWVzKVxuXHRcdFx0XHRcdFx0fe+8iWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtcy5hcmVhKSB7XG5cdFx0XHRcdFx0dGV4dCArPSBgfGFyZWE9JHtwYXJhbXMuYXJlYX1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChwYXJhbXMubm9lbWFpbCkge1xuXHRcdFx0XHRcdFx0dGV4dCArPSAnfGVtYWlsPXllcyc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwYXJhbXMubm9jcmVhdGUpIHtcblx0XHRcdFx0XHRcdHRleHQgKz0gJ3xhY2NvdW50Y3JlYXRlPXllcyc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChzZXR0aW5ncy5zaWcpIHtcblx0XHRcdHRleHQgKz0gYHxzaWc9JHtzZXR0aW5ncy5zaWd9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGAke3RleHR9fX1gO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLm1haW4gPSAocGFnZW9iaikgPT4ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0Y29uc3QgZGF0ZSA9IG5ldyBNb3JlYml0cy5kYXRlKHBhZ2VvYmouZ2V0TG9hZFRpbWUoKSk7XG5cdFx0Y29uc3Qge21lc3NhZ2VEYXRhfSA9IHBhcmFtcztcblx0XHRsZXQgdGV4dDtcblx0XHRwYXJhbXMuaW5kZWZpbml0ZSA9IE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHBhcmFtcy5leHBpcnkpO1xuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ2JsYW5rVGFsa3BhZ2VPbkluZGVmQmxvY2snKSAmJiBwYXJhbXMudGVtcGxhdGUgIT09ICd1dy1sYmxvY2snICYmIHBhcmFtcy5pbmRlZmluaXRlKSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5qC55o2u5Y+C5pWw6K6+572u5riF56m66K6o6K666aG15bm25Li65pel5pyf5Yib5bu65pawMue6p+agh+mimCcsXG5cdFx0XHRcdFx0J+agueaTmuWBj+WlveioreWumua4heepuuiojuirlumggeS4pueCuuaXpeacn+W7uueri+aWsDLntJrmqJnpoYwnXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHR0ZXh0ID0gYCR7ZGF0ZS5tb250aEhlYWRlcigpfVxcbmA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRleHQgPSBwYWdlb2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRjb25zdCBkYXRlSGVhZGVyUmVnZXggPSBkYXRlLm1vbnRoSGVhZGVyUmVnZXgoKTtcblx0XHRcdGxldCBkYXRlSGVhZGVyUmVnZXhMYXN0O1xuXHRcdFx0bGV0IGRhdGVIZWFkZXJSZWdleFJlc3VsdDtcblx0XHRcdHdoaWxlICgoZGF0ZUhlYWRlclJlZ2V4TGFzdCA9IGRhdGVIZWFkZXJSZWdleC5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuXHRcdFx0XHRkYXRlSGVhZGVyUmVnZXhSZXN1bHQgPSBkYXRlSGVhZGVyUmVnZXhMYXN0O1xuXHRcdFx0fVxuXHRcdFx0Ly8gSWYgZGF0ZUhlYWRlclJlZ2V4UmVzdWx0IGlzIG51bGwgdGhlbiBsYXN0SGVhZGVySW5kZXggaXMgbmV2ZXIgY2hlY2tlZC4gSWYgaXQgaXMgbm90IG51bGwgYnV0XG5cdFx0XHQvLyBcXG49PSBpcyBub3QgZm91bmQsIHRoZW4gdGhlIGRhdGUgaGVhZGVyIG11c3QgYmUgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIHBhZ2UuIGxhc3RJbmRleE9mXG5cdFx0XHQvLyByZXR1cm5zIC0xIGluIHRoaXMgY2FzZSwgc28gbGFzdEhlYWRlckluZGV4IGdldHMgc2V0IHRvIDAgYXMgZGVzaXJlZC5cblx0XHRcdGNvbnN0IGxhc3RIZWFkZXJJbmRleCA9IHRleHQubGFzdEluZGV4T2YoJ1xcbj09JykgKyAxO1xuXHRcdFx0aWYgKHRleHQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0ZXh0ICs9ICdcXG5cXG4nO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFkYXRlSGVhZGVyUmVnZXhSZXN1bHQgfHwgZGF0ZUhlYWRlclJlZ2V4UmVzdWx0LmluZGV4ICE9PSBsYXN0SGVhZGVySW5kZXgpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmnKrmib7liLDlvZPmnIjnmoTkuoznuqfmoIfpopjvvIzlsIbliJvlu7rmlrDnmoQnLCAn5pyq5om+5Yiw55W25pyI55qE5LqM57Sa5qiZ6aGM77yM5bCH5bu656uL5paw55qEJylcblx0XHRcdFx0KTtcblx0XHRcdFx0dGV4dCArPSBgJHtkYXRlLm1vbnRoSGVhZGVyKCl9XFxuYDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cGFyYW1zLmV4cGlyeSA9IHBhcmFtcy50ZW1wbGF0ZV9leHBpcnkgPT09IHVuZGVmaW5lZCA/IHBhcmFtcy5leHBpcnkgOiBwYXJhbXMudGVtcGxhdGVfZXhwaXJ5O1xuXHRcdHRleHQgKz0gVHdpbmtsZS5ibG9jay5jYWxsYmFjay5nZXRCbG9ja05vdGljZVdpa2l0ZXh0KHBhcmFtcyk7XG5cdFx0Ly8gYnVpbGQgdGhlIGVkaXQgc3VtbWFyeVxuXHRcdGxldCBzdW1tYXJ5ID0gcGFyYW1zLnVzZXJ0YWxrX3N1bW1hcnk7XG5cdFx0aWYgKG1lc3NhZ2VEYXRhLnN1cHByZXNzQXJ0aWNsZUluU3VtbWFyeSAhPT0gdHJ1ZSAmJiBwYXJhbXMuYXJ0aWNsZSkge1xuXHRcdFx0c3VtbWFyeSArPSBgJHt3aW5kb3cud2dVTFMoJ++8jOS6jicsICfvvIzmlrwnKX1bWzoke3BhcmFtcy5hcnRpY2xlfV1dYDtcblx0XHR9XG5cdFx0cGFnZW9iai5zZXRQYWdlVGV4dCh0ZXh0KTtcblx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KHN1bW1hcnkpO1xuXHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZignd2F0Y2hCbG9ja05vdGljZXMnKSk7XG5cdFx0cGFnZW9iai5zYXZlKCk7XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUuYmxvY2ssICdibG9jaycpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5cbi8qISBUd2lua2xlLmpzIC0gZnJpZW5kbHl0YWxrYmFjay5qcyAqL1xuKGZ1bmN0aW9uIGZyaWVuZGx5dGFsa2JhY2soJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIGZyaWVuZGx5dGFsa2JhY2suanM6IFRhbGtiYWNrIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IFRhYiAoXCJUQlwiKVxuXHQgKiBBY3RpdmUgb246IEFueSBwYWdlIHdpdGggcmVsZXZhbnQgdXNlciBuYW1lICh1c2Vyc3BhY2UsIGNvbnRyaWJzLCBldGMuKSBleGNlcHQgSVAgcmFuZ2VzXG5cdCAqIENvbmZpZyBkaXJlY3RpdmVzIGluOiBGcmllbmRseUNvbmZpZ1xuXHQgKi9cblx0VHdpbmtsZS50YWxrYmFjayA9ICgpID0+IHtcblx0XHRpZiAoIW13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRUd2lua2xlLnRhbGtiYWNrLmNhbGxiYWNrLFxuXHRcdFx0J+mAmuWRiicsXG5cdFx0XHQnZnJpZW5kbHktdGFsa2JhY2snLFxuXHRcdFx0d2luZG93LndnVUxTKCflm57lpI3pgJrlkYonLCAn5Zue6KaG6YCa5ZGKJylcblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLnRhbGtiYWNrLmNhbGxiYWNrID0gKCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpID09PSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgJiZcblx0XHRcdCFjb25maXJtKHdpbmRvdy53Z1VMUygn5oKo5a+C5a+e5Yiw5LqG6KaB6Ieq5bex5Zue5aSN6Ieq5bex55qE56iL5bqm5LmI77yfJywgJ+aCqOWvguWvnuWIsOS6huimgeiHquW3seWbnuimhuiHquW3seeahOeoi+W6pum6vO+8nycpKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgMzUwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCflm57lpI3pgJrlkYonLCAn5Zue6KaG6YCa5ZGKJykpO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflhbPkuo57e3RhbGtiYWNrfX0nLCAn6Zec5pa8e3t0YWxrYmFja319JyksICdUZW1wbGF0ZTpUYWxrYmFjaycpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn6YCa5ZGK6K6+572uJywgJ+mAmuWRiuioreWumicpLCAnSDpUVy9QUkVGI3RhbGtiYWNrJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI3RhbGtiYWNrJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS50YWxrYmFjay5ldmFsdWF0ZSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3JhZGlvJyxcblx0XHRcdG5hbWU6ICd0YnRhcmdldCcsXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflm57lpI3vvJrmiJHnmoTorqjorrrpobUnLCAn5Zue6KaG77ya5oiR55qE6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdteXRhbGsnLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICd0cnVlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WbnuWkje+8muWFtuS7lueUqOaIt+eahOiuqOiuuumhtScsICflm57opobvvJrlhbbku5bkvb/nlKjogIXnmoToqI7oq5bpoIEnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3VzZXJ0YWxrJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WbnuWkje+8muWFtuWug+mhtemdoicsICflm57opobvvJrlhbblroPpoIHpnaInKSxcblx0XHRcdFx0XHR2YWx1ZTogJ290aGVyJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mCgOivt+iuqOiuuicsICfpgoDoq4voqI7oq5YnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3NlZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJ+mAmuWRiuadv+mAmuefpScsXG5cdFx0XHRcdFx0dmFsdWU6ICdub3RpY2UnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn4oCc5pyJ5paw6YKu5Lu24oCdJywgJ+OAjOacieaWsOmDteS7tuOAjScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbWFpbCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUudGFsa2JhY2suY2hhbmdlVGFyZ2V0LFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRsYWJlbDogJ+W3peS9nOWMuicsXG5cdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHR9KTtcblx0XHRjb25zdCBwcmV2aWV3bGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHQkKHByZXZpZXdsaW5rKS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRUd2lua2xlLnRhbGtiYWNrLnByZXZpZXcocmVzdWx0KTsgLy8gfHJlc3VsdHwgaXMgZGVmaW5lZCBiZWxvd1xuXHRcdH0pO1xuXG5cdFx0cHJldmlld2xpbmsuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuXHRcdHByZXZpZXdsaW5rLnRleHRDb250ZW50ID0gd2luZG93LndnVUxTKCfpooTop4gnLCAn6aCQ6Ka9Jyk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRpZDogJ3RhbGtiYWNrcHJldmlldycsXG5cdFx0XHRsYWJlbDogW3ByZXZpZXdsaW5rXSxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdGlkOiAnZnJpZW5kbHl0YWxrYmFjay1wcmV2aWV3Ym94Jyxcblx0XHRcdHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gZm9ybS5yZW5kZXIoKTtcblx0XHRXaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFdpbmRvdy5kaXNwbGF5KCk7XG5cdFx0cmVzdWx0LnByZXZpZXdlciA9IG5ldyBNb3JlYml0cy53aWtpLnByZXZpZXcoJChyZXN1bHQpLmZpbmQoJ2RpdiNmcmllbmRseXRhbGtiYWNrLXByZXZpZXdib3gnKS5sYXN0KClbMF0pO1xuXHRcdC8vIFdlIG11c3QgaW5pdCB0aGVcblx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRyZXN1bHQudGJ0YXJnZXRbMF0uZGlzcGF0Y2hFdmVudChldnQpO1xuXHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgaGFzIG9wdGVkIG91dCBmcm9tIHRhbGtiYWNrXG5cdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRwcm9wOiAnZXh0bGlua3MnLFxuXHRcdFx0dGl0bGVzOiBgVXNlciB0YWxrOiR7bXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyl9YCxcblx0XHRcdGVscXVlcnk6ICd1c2VyanMuaW52YWxpZC9ub1RhbGtiYWNrJyxcblx0XHRcdGVsbGltaXQ6ICcxJyxcblx0XHR9O1xuXHRcdGNvbnN0IHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0d2luZG93LndnVUxTKCfmipPlj5bpgIDlh7rpgJrlkYrkv6Hmga8nLCAn5oqT5Y+W6YCA5Ye66YCa5ZGK6LOH6KiKJyksXG5cdFx0XHRxdWVyeSxcblx0XHRcdFR3aW5rbGUudGFsa2JhY2suY2FsbGJhY2sub3B0b3V0U3RhdHVzXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdH07XG5cdFR3aW5rbGUudGFsa2JhY2sub3B0b3V0ID0gJyc7XG5cdFR3aW5rbGUudGFsa2JhY2suY2FsbGJhY2sub3B0b3V0U3RhdHVzID0gKGFwaW9iaikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoYXBpb2JqLmdldFhNTCgpKS5maW5kKCdlbCcpO1xuXHRcdGlmICgkZWwubGVuZ3RoKSB7XG5cdFx0XHRUd2lua2xlLnRhbGtiYWNrLm9wdG91dCA9XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpICsgd2luZG93LndnVUxTKCfkuI3luIzmnJvmlLbliLDlm57lpI3pgJrlkYonLCAn5LiN5biM5pyb5pS25Yiw5Zue6KaG6YCa5ZGKJyk7XG5cdFx0XHRjb25zdCB1cmwgPSAkZWwudGV4dCgpO1xuXHRcdFx0Y29uc3QgcmVhc29uID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdyZWFzb24nLCB1cmwpO1xuXHRcdFx0VHdpbmtsZS50YWxrYmFjay5vcHRvdXQgKz0gcmVhc29uID8gYO+8miR7TW9yZWJpdHMuc3RyaW5nLmFwcGVuZFB1bmN0dWF0aW9uKHJlYXNvbil9YCA6ICfjgIInO1xuXHRcdH1cblx0XHQkYm9keS5maW5kKCcjdHdpbmtsZS10YWxrYmFjay1vcHRvdXQtbWVzc2FnZScpLnRleHQoVHdpbmtsZS50YWxrYmFjay5vcHRvdXQpO1xuXHR9O1xuXHRsZXQgcHJldl9wYWdlID0gJyc7XG5cdGxldCBwcmV2X3NlY3Rpb24gPSAnJztcblx0bGV0IHByZXZfbWVzc2FnZSA9ICcnO1xuXHRUd2lua2xlLnRhbGtiYWNrLmNoYW5nZVRhcmdldCA9IChlKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBlLnRhcmdldC52YWx1ZXM7XG5cdFx0Y29uc3Qgcm9vdCA9IGUudGFyZ2V0LmZvcm07XG5cdFx0Y29uc3QgW29sZF9hcmVhXSA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyb290LCAnd29ya19hcmVhJyk7XG5cdFx0aWYgKHJvb3Quc2VjdGlvbikge1xuXHRcdFx0cHJldl9zZWN0aW9uID0gcm9vdC5zZWN0aW9uLnZhbHVlO1xuXHRcdH1cblx0XHRpZiAocm9vdC5tZXNzYWdlKSB7XG5cdFx0XHRwcmV2X21lc3NhZ2UgPSByb290Lm1lc3NhZ2UudmFsdWU7XG5cdFx0fVxuXHRcdGlmIChyb290LnBhZ2UpIHtcblx0XHRcdHByZXZfcGFnZSA9IHJvb3QucGFnZS52YWx1ZTtcblx0XHR9XG5cdFx0bGV0IHdvcmtfYXJlYSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zue5aSN6YCa5ZGK5L+h5oGvJywgJ+WbnuimhumAmuWRiuizh+ioiicpLFxuXHRcdFx0bmFtZTogJ3dvcmtfYXJlYScsXG5cdFx0fSk7XG5cdFx0cm9vdC5wcmV2aWV3ZXIuY2xvc2VQcmV2aWV3KCk7XG5cdFx0c3dpdGNoICh2YWx1ZSkge1xuXHRcdFx0Y2FzZSAndXNlcnRhbGsnOlxuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRsYWJlbDogJycsXG5cdFx0XHRcdFx0c3R5bGU6ICdjb2xvcjogI2YwMCcsXG5cdFx0XHRcdFx0aWQ6ICd0d2lua2xlLXRhbGtiYWNrLW9wdG91dC1tZXNzYWdlJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3BhZ2UnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eUqOaIt++8iOW/heWhq++8iScsICfkvb/nlKjogIXvvIjlv4XloavvvIknKSxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+aCqOeVmeiogOmhtemdoueahOeUqOaIt+WQje+8jOW/heWhq+OAgicsICfmgqjnlZnoqIDpoIHpnaLnmoTkvb/nlKjogIXlkI3nqLHvvIzlv4XloavjgIInKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJldl9wYWdlLFxuXHRcdFx0XHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAnc2VjdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56ug6IqC77yI5Y+v6YCJ77yJJywgJ+eroOevgO+8iOWPr+mBuO+8iScpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmgqjnlZnoqIDnmoTnq6DoioLmoIfpopjvvIznlZnnqbrliJnkuI3kvJrkuqfnlJ/nq6DoioLpk77mjqXjgIInLFxuXHRcdFx0XHRcdFx0J+aCqOeVmeiogOeahOeroOevgOaomemhjO+8jOeVmeepuuWJh+S4jeacg+eUoueUn+eroOevgOmAo+e1kOOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHZhbHVlOiBwcmV2X3NlY3Rpb24sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ25vdGljZSc6IHtcblx0XHRcdFx0Y29uc3Qgbm90aWNlYm9hcmQgPSB3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRuYW1lOiAnbm90aWNlYm9hcmQnLFxuXHRcdFx0XHRcdGxhYmVsOiAn6YCa5ZGK5p2/77yaJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvciAoY29uc3QgW25ibmFtZSwgZGF0YV0gb2YgT2JqZWN0LmVudHJpZXMoVHdpbmtsZS50YWxrYmFjay5ub3RpY2Vib2FyZHMpKSB7XG5cdFx0XHRcdFx0bm90aWNlYm9hcmQuYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwsXG5cdFx0XHRcdFx0XHR2YWx1ZTogbmJuYW1lLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ6ICEhZGF0YS5kZWZhdWx0U2VsZWN0ZWQsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAnc2VjdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56ug6IqC77yI5Y+v6YCJ77yJJywgJ+eroOevgO+8iOWPr+mBuO+8iScpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn56ug6IqC5qCH6aKY77yM55WZ56m65YiZ5LiN5Lya5Lqn55Sf56ug6IqC6ZO+5o6l44CCJywgJ+eroOevgOaomemhjO+8jOeVmeepuuWJh+S4jeacg+eUoueUn+eroOevgOmAo+e1kOOAgicpLFxuXHRcdFx0XHRcdHZhbHVlOiBwcmV2X3NlY3Rpb24sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgJ290aGVyJzpcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bGFiZWw6ICcnLFxuXHRcdFx0XHRcdHN0eWxlOiAnY29sb3I6ICNmMDAnLFxuXHRcdFx0XHRcdGlkOiAndHdpbmtsZS10YWxrYmFjay1vcHRvdXQtbWVzc2FnZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdwYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflrozmlbTpobXpnaLlkI0nLCAn5a6M5pW06aCB6Z2i5ZCNJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOeVmeS4i+a2iOaBr+eahOWujOaVtOmhtemdouWQje+8jOS+i+WmguKAnExJQl90YWxrOummlumhteKAneOAgicsXG5cdFx0XHRcdFx0XHQn5oKo55WZ5LiL6KiK5oGv55qE5a6M5pW06aCB6Z2i5ZCN77yM5L6L5aaC44CMTElCX3RhbGs66aaW6aCB44CN44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6IHByZXZfcGFnZSxcblx0XHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NlY3Rpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eroOiKgu+8iOWPr+mAie+8iScsICfnq6Dnr4DvvIjlj6/pgbjvvIknKSxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5oKo55WZ6KiA55qE56ug6IqC5qCH6aKY77yM55WZ56m65YiZ5LiN5Lya5Lqn55Sf56ug6IqC6ZO+5o6l44CCJyxcblx0XHRcdFx0XHRcdCfmgqjnlZnoqIDnmoTnq6Dnr4DmqJnpoYzvvIznlZnnqbrliYfkuI3mnIPnlKLnlJ/nq6Dnr4DpgKPntZDjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR2YWx1ZTogcHJldl9zZWN0aW9uLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdtYWlsJzpcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAnc2VjdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55S15a2Q6YKu5Lu25Li76aKY77yI5Y+v6YCJ77yJJywgJ+mbu+WtkOmDteS7tuS4u+mhjO+8iOWPr+mBuO+8iScpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5oKo5Y+R5Ye655qE55S15a2Q6YKu5Lu255qE5Li76aKY44CCJywgJ+aCqOeZvOWHuueahOmbu+WtkOmDteS7tueahOS4u+mhjOOAgicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzZWUnOlxuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdwYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflrozmlbTpobXpnaLlkI0nLCAn5a6M5pW06aCB6Z2i5ZCNJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOeVmeS4i+a2iOaBr+eahOWujOaVtOmhtemdouWQje+8jOS+i+WmguKAnExJQl90YWxrOummlumhteKAneOAgicsXG5cdFx0XHRcdFx0XHQn5oKo55WZ5LiL6KiK5oGv55qE5a6M5pW06aCB6Z2i5ZCN77yM5L6L5aaC44CMTElCX3RhbGs66aaW6aCB44CN44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6IHByZXZfcGFnZSxcblx0XHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NlY3Rpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eroOiKgu+8iOWPr+mAie+8iScsICfnq6Dnr4DvvIjlj6/pgbjvvIknKSxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5oKo55WZ6KiA55qE56ug6IqC5qCH6aKY77yM55WZ56m65YiZ5LiN5Lya5Lqn55Sf56ug6IqC6ZO+5o6l44CCJyxcblx0XHRcdFx0XHRcdCfmgqjnlZnoqIDnmoTnq6Dnr4DmqJnpoYzvvIznlZnnqbrliYfkuI3mnIPnlKLnlJ/nq6Dnr4DpgKPntZDjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR2YWx1ZTogcHJldl9zZWN0aW9uLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvKiBjYXNlICdteXRhbGsnOiAqL1xuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bGFiZWw6ICcnLFxuXHRcdFx0XHRcdHN0eWxlOiAnY29sb3I6ICNmMDAnLFxuXHRcdFx0XHRcdGlkOiAndHdpbmtsZS10YWxrYmFjay1vcHRvdXQtbWVzc2FnZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdzZWN0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnq6DoioLvvIjlj6/pgInvvIknLCAn56ug56+A77yI5Y+v6YG477yJJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOeVmeiogOeahOeroOiKguagh+mimO+8jOeVmeepuuWImeS4jeS8muS6p+eUn+eroOiKgumTvuaOpeOAgicsXG5cdFx0XHRcdFx0XHQn5oKo55WZ6KiA55qE56ug56+A5qiZ6aGM77yM55WZ56m65YmH5LiN5pyD55Si55Sf56ug56+A6YCj57WQ44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6IHByZXZfc2VjdGlvbixcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgIT09ICdub3RpY2UnKSB7XG5cdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6ZmE5Yqg5L+h5oGv77yI5Y+v6YCJ77yJ77yaJywgJ+mZhOWKoOizh+ioiu+8iOWPr+mBuO+8ie+8micpLFxuXHRcdFx0XHRuYW1lOiAnbWVzc2FnZScsXG5cdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5Lya5Zyo5Zue5aSN6YCa5ZGK5qih5p2/5LiL5Ye6546w55qE5raI5oGv77yM5oKo55qE562+5ZCN5Lya6KKr5Yqg5Zyo5pyA5ZCO44CCJyxcblx0XHRcdFx0XHQn5pyD5Zyo5Zue6KaG6YCa5ZGK5qih5p2/5LiL5Ye654++55qE6KiK5oGv77yM5oKo55qE57C95ZCN5pyD6KKr5Yqg5Zyo5pyA5b6M44CCJ1xuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRyb290LnJlcGxhY2VDaGlsZCh3b3JrX2FyZWEsIG9sZF9hcmVhKTtcblx0XHRpZiAocm9vdC5tZXNzYWdlKSB7XG5cdFx0XHRyb290Lm1lc3NhZ2UudmFsdWUgPSBwcmV2X21lc3NhZ2U7XG5cdFx0fVxuXHRcdCRib2R5LmZpbmQoJyN0d2lua2xlLXRhbGtiYWNrLW9wdG91dC1tZXNzYWdlJykudGV4dChUd2lua2xlLnRhbGtiYWNrLm9wdG91dCk7XG5cdH07XG5cdFR3aW5rbGUudGFsa2JhY2subm90aWNlYm9hcmRzID0ge1xuXHRcdGFmZnA6IHtcblx0XHRcdGxhYmVsOiBgTElCOkFGL0ZQ77yIJHt3aW5kb3cud2dVTFMoJ+i/h+a7pOWZqOWkhOeQhi/miqXlkYonLCAn6YGO5r++5Zmo6JmV55CGL+WgseWRiicpfe+8iWAsXG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfov4fmu6TlmajplJnor6/miqXlkYrmnInmlrDlm57lupQnLCAn6YGO5r++5Zmo6Yyv6Kqk5aCx5ZGK5pyJ5paw5Zue5oeJJyksXG5cdFx0XHRjb250ZW50OiBgJHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfmgqjnmoRbW0xJQl90YWxrOui/h+a7pOWZqOWkhOeQhi/miqXlkYp86L+H5ruk5Zmo6ZSZ6K+v5oql5ZGKXV3lt7LmnInlm57lupTvvIzor7fliY3lvoDmn6XnnIvjgIInLFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrov4fmu6TlmajlpITnkIYv5oql5ZGKfOmBjua/vuWZqOmMr+iqpOWgseWRil1d5bey5pyJ5Zue5oeJ77yM6KuL5YmN5b6A5p+l55yL44CCJ1xuXHRcdFx0KX0tLX5+YC5jb25jYXQoJ35+JyksXG5cdFx0XHRlZGl0U3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5pyJ5YWzW1tMSUJfdGFsazrov4fmu6TlmajlpITnkIYv5oql5ZGKfOi/h+a7pOWZqOmUmeivr+aKpeWRil1d55qE6YCa55+lJyxcblx0XHRcdFx0J+aciemXnFtbTElCX3RhbGs66L+H5ruk5Zmo5aSE55CGL+aKpeWRinzpgY7mv77lmajpjK/oqqTloLHlkYpdXeeahOmAmuefpSdcblx0XHRcdCksXG5cdFx0XHRkZWZhdWx0U2VsZWN0ZWQ6IHRydWUsXG5cdFx0fSxcblx0XHRzYmw6IHtcblx0XHRcdGxhYmVsOiAnU3BhbS1ibGFja2xpc3QnLFxuXHRcdFx0dGl0bGU6IHdpbmRvdy53Z1VMUygn5Z6D5Zy+6ZO+5o6l6buR5ZCN5Y2V6K+35rGC5pyJ5paw5Zue5bqUJywgJ+Weg+WcvumAo+e1kOm7keWQjeWWruiri+axguacieaWsOWbnuaHiScpLFxuXHRcdFx0Y29udGVudDogYCR7d2luZG93LndnVUxTKFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb985Z6D5Zy+6ZO+5o6l6buR5ZCN5Y2V6K+35rGCXV3lt7LmnInlm57lupTvvIzor7fliY3lvoDmn6XnnIvjgIInLFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb985Z6D5Zy+6YCj57WQ6buR5ZCN5Zau6KuL5rGCXV3lt7LmnInlm57mh4nvvIzoq4vliY3lvoDmn6XnnIvjgIInXG5cdFx0XHQpfS0tfn5gLmNvbmNhdCgnfn4nKSxcblx0XHRcdGVkaXRTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfmnInlhbNbW0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadv3zlnoPlnL7pk77mjqXpu5HlkI3ljZXor7fmsYJdXeeahOmAmuefpScsXG5cdFx0XHRcdCfmnInpl5xbW0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadv3zlnoPlnL7pgKPntZDpu5HlkI3llq7oq4vmsYJdXeeahOmAmuefpSdcblx0XHRcdCksXG5cdFx0fSxcblx0XHRzaGw6IHtcblx0XHRcdGxhYmVsOiAnU3BhbS13aGl0ZWxpc3QnLFxuXHRcdFx0dGl0bGU6IHdpbmRvdy53Z1VMUygn5Z6D5Zy+6ZO+5o6l55m95ZCN5Y2V6K+35rGC5pyJ5paw5Zue5bqUJywgJ+Weg+WcvumAo+e1kOeZveWQjeWWruiri+axguacieaWsOWbnuaHiScpLFxuXHRcdFx0Y29udGVudDogYCR7d2luZG93LndnVUxTKFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb985Z6D5Zy+6ZO+5o6l55m95ZCN5Y2V6K+35rGCXV3lt7LmnInlm57lupTvvIzor7fliY3lvoDmn6XnnIvjgIInLFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb985Z6D5Zy+6YCj57WQ55m95ZCN5Zau6KuL5rGCXV3lt7LmnInlm57mh4nvvIzoq4vliY3lvoDmn6XnnIvjgIInXG5cdFx0XHQpfS0tfn5gLmNvbmNhdCgnfn4nKSxcblx0XHRcdGVkaXRTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfmnInlhbNbW0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadv3zlnoPlnL7pk77mjqXnmb3lkI3ljZXor7fmsYJdXeeahOmAmuefpScsXG5cdFx0XHRcdCfmnInpl5xbW0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadv3zlnoPlnL7pgKPntZDnmb3lkI3llq7oq4vmsYJdXeeahOmAmuefpSdcblx0XHRcdCksXG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS50YWxrYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IFt0YnRhcmdldF0gPSBmb3JtLmdldENoZWNrZWQoJ3RidGFyZ2V0Jyk7XG5cdFx0bGV0IHBhZ2U7XG5cdFx0bGV0IG1lc3NhZ2U7XG5cdFx0Y29uc3Qgc2VjdGlvbiA9IGZvcm0uc2VjdGlvbi52YWx1ZTtcblx0XHRsZXQgZWRpdFN1bW1hcnk7XG5cdFx0aWYgKHRidGFyZ2V0ID09PSAnbm90aWNlJykge1xuXHRcdFx0cGFnZSA9IGZvcm0ubm90aWNlYm9hcmQudmFsdWU7XG5cdFx0XHQoe2VkaXRTdW1tYXJ5fSA9IFR3aW5rbGUudGFsa2JhY2subm90aWNlYm9hcmRzW3BhZ2VdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gdXNlcnRhbGssIG90aGVyLCBzZWVcblx0XHRcdHBhZ2UgPSBmb3JtLnBhZ2UgPyBmb3JtLnBhZ2UudmFsdWUgOiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyk7XG5cdFx0XHRpZiAoZm9ybS5tZXNzYWdlKSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBmb3JtLm1lc3NhZ2UudmFsdWUudHJpbSgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRidGFyZ2V0ID09PSAnbWFpbCcpIHtcblx0XHRcdFx0ZWRpdFN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+mAmuefpe+8muacieaWsOmCruS7ticsICfpgJrnn6XvvJrmnInmlrDpg7Xku7YnKTtcblx0XHRcdH0gZWxzZSBpZiAodGJ0YXJnZXQgPT09ICdzZWUnKSB7XG5cdFx0XHRcdGVkaXRTdW1tYXJ5ID0gYCR7d2luZG93LndnVUxTKCfor7fnnIvnnIsnLCAn6KuL55yL55yLJyl9W1s6JHtwYWdlfSR7c2VjdGlvbiA/IGAjJHtzZWN0aW9ufWAgOiAnJ31dXSR7d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdCfkuIrnmoTorqjorronLFxuXHRcdFx0XHRcdCfkuIrnmoToqI7oq5YnXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHRidGFyZ2V0IG9uZSBvZiBteXRhbGssIHVzZXJ0YWxrLCBvdGhlclxuXHRcdFx0XHRlZGl0U3VtbWFyeSA9IGAke3dpbmRvdy53Z1VMUygn5Zue5aSN6YCa5ZGKJywgJ+WbnuimhumAmuWRiicpfe+8iFtbOmA7XG5cdFx0XHRcdGlmICh0YnRhcmdldCAhPT0gJ290aGVyJyAmJiAhbmV3IFJlZ0V4cChgXlxcXFxzKiR7TW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoMyl9OmAsICdpJykudGVzdChwYWdlKSkge1xuXHRcdFx0XHRcdGVkaXRTdW1tYXJ5ICs9ICdVc2VyIHRhbGs6Jztcblx0XHRcdFx0fVxuXHRcdFx0XHRlZGl0U3VtbWFyeSArPSBgJHtwYWdlICsgKHNlY3Rpb24gPyBgIyR7c2VjdGlvbn1gIDogJycpfV1dKWA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0Y29uc3QgZnVsbFVzZXJUYWxrUGFnZU5hbWUgPSBgJHtcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW213LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlSWRzJykudXNlcl90YWxrXVxuXHRcdH06JHttdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKX1gO1xuXHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gZnVsbFVzZXJUYWxrUGFnZU5hbWU7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKFxuXHRcdFx0J+WbnuWkjemAmuWRiuWujOaIkO+8jOWwhuWcqOWHoOenkuWGheWIt+aWsOmhtemdoicsXG5cdFx0XHQn5Zue6KaG6YCa5ZGK5a6M5oiQ77yM5bCH5Zyo5bm+56eS5YWn6YeN5paw5pW055CG6aCB6Z2iJ1xuXHRcdCk7XG5cdFx0Y29uc3QgdGV4dCA9IGBcXG5cXG4ke1R3aW5rbGUudGFsa2JhY2suZ2V0Tm90aWNlV2lraXRleHQodGJ0YXJnZXQsIHBhZ2UsIHNlY3Rpb24sIG1lc3NhZ2UpWzBdfWA7XG5cdFx0Y29uc3QgdGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKGZ1bGxVc2VyVGFsa1BhZ2VOYW1lLCB3aW5kb3cud2dVTFMoJ+WKoOWFpeWbnuWkjemAmuWRiicsICfliqDlhaXlm57opobpgJrlkYonKSk7XG5cdFx0dGFsa3BhZ2Uuc2V0RWRpdFN1bW1hcnkoZWRpdFN1bW1hcnkpO1xuXHRcdHRhbGtwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHR0YWxrcGFnZS5zZXRBcHBlbmRUZXh0KHRleHQpO1xuXHRcdHRhbGtwYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHR0YWxrcGFnZS5zZXRNaW5vckVkaXQoVHdpbmtsZS5nZXRQcmVmKCdtYXJrVGFsa2JhY2tBc01pbm9yJykpO1xuXHRcdHRhbGtwYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdHRhbGtwYWdlLmFwcGVuZCgpO1xuXHR9O1xuXHRUd2lua2xlLnRhbGtiYWNrLnByZXZpZXcgPSAoZm9ybSkgPT4ge1xuXHRcdGNvbnN0IFt0YnRhcmdldF0gPSBmb3JtLmdldENoZWNrZWQoJ3RidGFyZ2V0Jyk7XG5cdFx0Y29uc3Qgc2VjdGlvbiA9IGZvcm0uc2VjdGlvbi52YWx1ZTtcblx0XHRsZXQgcGFnZTtcblx0XHRsZXQgbWVzc2FnZTtcblx0XHRpZiAodGJ0YXJnZXQgPT09ICdub3RpY2UnKSB7XG5cdFx0XHRwYWdlID0gZm9ybS5ub3RpY2Vib2FyZC52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gdXNlcnRhbGssIG90aGVyLCBzZWVcblx0XHRcdHBhZ2UgPSBmb3JtLnBhZ2UgPyBmb3JtLnBhZ2UudmFsdWUgOiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyk7XG5cdFx0XHRpZiAoZm9ybS5tZXNzYWdlKSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBmb3JtLm1lc3NhZ2UudmFsdWUudHJpbSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBbbm90aWNldGV4dF0gPSBUd2lua2xlLnRhbGtiYWNrLmdldE5vdGljZVdpa2l0ZXh0KHRidGFyZ2V0LCBwYWdlLCBzZWN0aW9uLCBtZXNzYWdlKTtcblx0XHRmb3JtLnByZXZpZXdlci5iZWdpblJlbmRlcihub3RpY2V0ZXh0LCBgVXNlcl90YWxrOiR7bXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyl9YCk7IC8vIEZvcmNlIHdpa2l0ZXh0L2NvcnJlY3QgdXNlcm5hbWVcblx0fTtcblxuXHRUd2lua2xlLnRhbGtiYWNrLmdldE5vdGljZVdpa2l0ZXh0ID0gKHRidGFyZ2V0LCBwYWdlLCBzZWN0aW9uLCBtZXNzYWdlKSA9PiB7XG5cdFx0bGV0IHRleHQ7XG5cdFx0bGV0IHRpdGxlO1xuXHRcdGxldCBjb250ZW50O1xuXHRcdGlmICh0YnRhcmdldCA9PT0gJ25vdGljZScpIHtcblx0XHRcdCh7dGl0bGV9ID0gVHdpbmtsZS50YWxrYmFjay5ub3RpY2Vib2FyZHNbcGFnZV0pO1xuXHRcdFx0Y29udGVudCA9IE1vcmViaXRzLnN0cmluZy5zYWZlUmVwbGFjZShUd2lua2xlLnRhbGtiYWNrLm5vdGljZWJvYXJkc1twYWdlXS5jb250ZW50LCAnJFNFQ1RJT04nLCBzZWN0aW9uKTtcblx0XHRcdHRleHQgPSBgPT0gJHt0aXRsZX0gPT1cXG4ke2NvbnRlbnR9YDtcblx0XHR9IGVsc2UgaWYgKHRidGFyZ2V0ID09PSAnc2VlJykge1xuXHRcdFx0dGl0bGUgPSBwYWdlICsgd2luZG93LndnVUxTKCfnmoTnm7jlhbPorqjorronLCAn55qE55u46Zec6KiO6KuWJyk7XG5cdFx0XHRjb250ZW50ID0gJ3t7Jy5jb25jYXQoXG5cdFx0XHRcdCdzdWJzdDonLFxuXHRcdFx0XHRgUGxlYXNlIHNlZXxsb2NhdGlvbj0ke3BhZ2V9JHtzZWN0aW9uID8gYCMke3NlY3Rpb259YCA6ICcnfXxtb3JlPSR7bWVzc2FnZS50cmltKCl9fX1gXG5cdFx0XHQpO1xuXHRcdFx0dGV4dCA9ICd7eycuY29uY2F0KFxuXHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0YFBsZWFzZSBzZWV8bG9jYXRpb249JHtwYWdlfSR7c2VjdGlvbiA/IGAjJHtzZWN0aW9ufWAgOiAnJ318bW9yZT0ke21lc3NhZ2UudHJpbSgpfX19YFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGV4dCA9ICc9PSc7XG5cdFx0XHRpZiAodGJ0YXJnZXQgPT09ICdtYWlsJykge1xuXHRcdFx0XHR0aXRsZSA9IFR3aW5rbGUuZ2V0UHJlZignbWFpbEhlYWRpbmcnKTtcblx0XHRcdFx0Y29udGVudCA9IGB7e1lvdSd2ZSBnb3QgbWFpbHxzdWJqZWN0PSR7c2VjdGlvbn18dHM9fn5gLmNvbmNhdCgnficsICd+fn19Jyk7XG5cdFx0XHRcdHRleHQgKz0gYCR7VHdpbmtsZS5nZXRQcmVmKCdtYWlsSGVhZGluZycpfT09XFxue3tZb3UndmUgZ290IG1haWx8c3ViamVjdD0ke3NlY3Rpb259YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHRidGFyZ2V0IG9uZSBvZiBteXRhbGssIHVzZXJ0YWxrLCBvdGhlclxuXHRcdFx0XHQvLyBjbGVhbiB0YWxrYmFjayBoZWFkaW5nOiBzdHJpcCBzZWN0aW9uIGhlYWRlciBtYXJrZXJzIHRoYXQgd2VyZSBlcnJvbmVvdXNseSBzdWdnZXN0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb25cblx0XHRcdFx0dGl0bGUgPSBUd2lua2xlLmdldFByZWYoJ3RhbGtiYWNrSGVhZGluZycpLnJlcGxhY2UoL15cXHMqPStcXHMqKC4qPylcXHMqPSskXFxzKi8sICckMScpO1xuXHRcdFx0XHRjb250ZW50ID0gYHt7dGFsa2JhY2t8JHtwYWdlfSR7c2VjdGlvbiA/IGB8JHtzZWN0aW9ufWAgOiAnJ31gO1xuXHRcdFx0XHR0ZXh0ICs9IGAke1R3aW5rbGUuZ2V0UHJlZigndGFsa2JhY2tIZWFkaW5nJykucmVwbGFjZShcblx0XHRcdFx0XHQvXlxccyo9K1xccyooLio/KVxccyo9KyRcXHMqLyxcblx0XHRcdFx0XHQnJDEnXG5cdFx0XHRcdCl9PT1cXG57e3RhbGtiYWNrfCR7cGFnZX0ke3NlY3Rpb24gPyBgfCR7c2VjdGlvbn1gIDogJyd9YDtcblx0XHRcdH1cblx0XHRcdGNvbnRlbnQgKz0gJ3x0cz1+ficuY29uY2F0KCd+JywgJ35+fX0nKTtcblx0XHRcdHRleHQgKz0gJ3x0cz1+ficuY29uY2F0KCd+JywgJ35+fX0nKTtcblx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdGNvbnRlbnQgKz0gYFxcbiR7bWVzc2FnZX1gO1xuXHRcdFx0XHR0ZXh0ICs9IGBcXG4ke21lc3NhZ2V9ICB+fmAuY29uY2F0KCd+ficpO1xuXHRcdFx0fSBlbHNlIGlmIChUd2lua2xlLmdldFByZWYoJ2luc2VydFRhbGtiYWNrU2lnbmF0dXJlJykpIHtcblx0XHRcdFx0dGV4dCArPSAnXFxufn4nLmNvbmNhdCgnfn4nKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFt0ZXh0LCB0aXRsZSwgY29udGVudF07XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUudGFsa2JhY2ssICd0YWxrYmFjaycpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge2dlbmVyYXRlQXJyYXl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZXNwZWVkeS5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGVzcGVlZHkoJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIHR3aW5rbGVzcGVlZHkuanM6IENTRCBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiQ1NEXCIpXG5cdCAqIEFjdGl2ZSBvbjogTm9uLXNwZWNpYWwsIGV4aXN0aW5nIHBhZ2VzXG5cdCAqXG5cdCAqIE5PVEUgRk9SIERFVkVMT1BFUlM6XG5cdCAqICBJZiBhZGRpbmcgYSBuZXcgY3JpdGVyaW9uLCBhZGQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlcyBhdCB0aGUgdG9wIG9mXG5cdCAqICB0d2lua2xlY29uZmlnLmpzLlxuXHQgKiAgQWxzbywgY2hlY2sgb3V0IHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgQ1NEIHByZWZlcmVuY2VzIGluIHR3aW5rbGUuanMsXG5cdCAqICBhbmQgYWRkIHlvdXIgbmV3IGNyaXRlcmlvbiB0byB0aG9zZSBpZiB5b3UgdGhpbmsgaXQgd291bGQgYmUgZ29vZC5cblx0ICovXG5cdFR3aW5rbGUuc3BlZWR5ID0gKCkgPT4ge1xuXHRcdC8vIERpc2FibGUgb246XG5cdFx0Ly8gKiBzcGVjaWFsIHBhZ2VzXG5cdFx0Ly8gKiBub24tZXhpc3RlbnQgcGFnZXNcblx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA8IDAgfHwgIW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLFxuXHRcdFx0d2luZG93LndnVUxTKCfpgJ/liKAnLCAn6YCf5YiqJyksXG5cdFx0XHQndHctY3NkJyxcblx0XHRcdE1vcmViaXRzLnVzZXJJc1N5c29wID8gd2luZG93LndnVUxTKCflv6vpgJ/liKDpmaQnLCAn5b+r6YCf5Yiq6ZmkJykgOiB3aW5kb3cud2dVTFMoJ+ivt+axguW/q+mAn+WIoOmZpCcsICfoq4vmsYLlv6vpgJ/liKrpmaQnKVxuXHRcdCk7XG5cdH07XG5cdC8vIFRoaXMgZnVuY3Rpb24gaXMgcnVuIHdoZW4gdGhlIENTRCB0YWIvaGVhZGVyIGxpbmsgaXMgY2xpY2tlZFxuXHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRUd2lua2xlLnNwZWVkeS5pbml0RGlhbG9nKFxuXHRcdFx0TW9yZWJpdHMudXNlcklzU3lzb3AgPyBUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5ldmFsdWF0ZVN5c29wIDogVHdpbmtsZS5zcGVlZHkuY2FsbGJhY2suZXZhbHVhdGVVc2VyLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH07XG5cdC8vIFVzZWQgYnkgdW5saW5rIGZlYXR1cmVcblx0VHdpbmtsZS5zcGVlZHkuZGlhbG9nID0gbnVsbDtcblx0Ly8gVXNlZCB0aHJvdWdob3V0XG5cdFR3aW5rbGUuc3BlZWR5Lmhhc0NTRCA9ICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RlbGV0ZS1yZWFzb24nKTtcblx0Ly8gVGhlIHNwZWVkeSBjcml0ZXJpYSBsaXN0IGNhbiBiZSBpbiBvbmUgb2Ygc2V2ZXJhbCBtb2Rlc1xuXHRUd2lua2xlLnNwZWVkeS5tb2RlID0ge1xuXHRcdHN5c29wU2luZ2xlU3VibWl0OiAxLFxuXHRcdC8vIHJhZGlvIGJ1dHRvbnMsIG5vIHN1Ymdyb3Vwcywgc3VibWl0IHdoZW4gXCJTdWJtaXRcIiBidXR0b24gaXMgY2xpY2tlZFxuXHRcdHN5c29wUmFkaW9DbGljazogMixcblx0XHQvLyByYWRpbyBidXR0b25zLCBubyBzdWJncm91cHMsIHN1Ym1pdCB3aGVuIGEgcmFkaW8gYnV0dG9uIGlzIGNsaWNrZWRcblx0XHRzeXNvcE11bHRpcGxlU3VibWl0OiAzLFxuXHRcdC8vIGNoZWNrIGJveGVzLCBzdWJncm91cHMsIFwiU3VibWl0XCIgYnV0dG9uIGFscmVhZHkgcHJlc2VudFxuXHRcdHN5c29wTXVsdGlwbGVSYWRpb0NsaWNrOiA0LFxuXHRcdC8vIGNoZWNrIGJveGVzLCBzdWJncm91cHMsIG5lZWQgdG8gYWRkIGEgXCJTdWJtaXRcIiBidXR0b25cblx0XHR1c2VyTXVsdGlwbGVTdWJtaXQ6IDUsXG5cdFx0Ly8gY2hlY2sgYm94ZXMsIHN1Ymdyb3VwcywgXCJTdWJtaXRcIiBidXR0b24gYWxyZWFkeSBwcmVzc2VudFxuXHRcdHVzZXJNdWx0aXBsZVJhZGlvQ2xpY2s6IDYsXG5cdFx0Ly8gY2hlY2sgYm94ZXMsIHN1Ymdyb3VwcywgbmVlZCB0byBhZGQgYSBcIlN1Ym1pdFwiIGJ1dHRvblxuXHRcdHVzZXJTaW5nbGVTdWJtaXQ6IDcsXG5cdFx0Ly8gcmFkaW8gYnV0dG9ucywgc3ViZ3JvdXBzLCBzdWJtaXQgd2hlbiBcIlN1Ym1pdFwiIGJ1dHRvbiBpcyBjbGlja2VkXG5cdFx0dXNlclNpbmdsZVJhZGlvQ2xpY2s6IDgsXG5cdFx0Ly8gcmFkaW8gYnV0dG9ucywgc3ViZ3JvdXBzLCBzdWJtaXQgd2hlbiBhIHJhZGlvIGJ1dHRvbiBpcyBjbGlja2VkXG5cdFx0Ly8gYXJlIHdlIGluIFwiZGVsZXRlIHBhZ2VcIiBtb2RlP1xuXHRcdC8vIChzeXNvcHMgY2FuIGFjY2VzcyBib3RoIFwiZGVsZXRlIHBhZ2VcIiBbc3lzb3BdIGFuZCBcInRhZyBwYWdlIG9ubHlcIiBbdXNlcl0gbW9kZXMpXG5cdFx0aXNTeXNvcDogKG1vZGUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BTaW5nbGVTdWJtaXQgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS5zeXNvcE11bHRpcGxlU3VibWl0IHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BSYWRpb0NsaWNrIHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BNdWx0aXBsZVJhZGlvQ2xpY2tcblx0XHRcdCk7XG5cdFx0fSxcblx0XHQvLyBkbyB3ZSBoYXZlIGEgXCJTdWJtaXRcIiBidXR0b24gb25jZSB0aGUgZm9ybSBpcyBjcmVhdGVkP1xuXHRcdGhhc1N1Ym1pdEJ1dHRvbjogKG1vZGUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BTaW5nbGVTdWJtaXQgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS5zeXNvcE11bHRpcGxlU3VibWl0IHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BNdWx0aXBsZVJhZGlvQ2xpY2sgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS51c2VyTXVsdGlwbGVTdWJtaXQgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS51c2VyTXVsdGlwbGVSYWRpb0NsaWNrIHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUudXNlclNpbmdsZVN1Ym1pdFxuXHRcdFx0KTtcblx0XHR9LFxuXHRcdC8vIGlzIGRiLW11bHRpcGxlIHRoZSBvdXRjb21lIGhlcmU/XG5cdFx0aXNNdWx0aXBsZTogKG1vZGUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUudXNlck11bHRpcGxlU3VibWl0IHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BNdWx0aXBsZVN1Ym1pdCB8fFxuXHRcdFx0XHRtb2RlID09PSBUd2lua2xlLnNwZWVkeS5tb2RlLnVzZXJNdWx0aXBsZVJhZGlvQ2xpY2sgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS5zeXNvcE11bHRpcGxlUmFkaW9DbGlja1xuXHRcdFx0KTtcblx0XHR9LFxuXHR9O1xuXHQvLyBQcmVwYXJlcyB0aGUgc3BlZWR5IGRlbGV0aW9uIGRpYWxvZyBhbmQgZGlzcGxheXMgaXRcblx0VHdpbmtsZS5zcGVlZHkuaW5pdERpYWxvZyA9IChjYWxsYmFja2Z1bmMpID0+IHtcblx0XHRUd2lua2xlLnNwZWVkeS5kaWFsb2cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KFxuXHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlXaW5kb3dXaWR0aCcpLFxuXHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlXaW5kb3dIZWlnaHQnKVxuXHRcdCk7XG5cdFx0Y29uc3Qge2RpYWxvZ30gPSBUd2lua2xlLnNwZWVkeTtcblx0XHRkaWFsb2cuc2V0VGl0bGUod2luZG93LndnVUxTKCfpgInmi6nlv6vpgJ/liKDpmaTnkIbnlLEnLCAn6YG45pOH5b+r6YCf5Yiq6Zmk55CG55SxJykpO1xuXHRcdGRpYWxvZy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0ZGlhbG9nLmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflv6vpgJ/liKDpmaTmlrnpkognLCAn5b+r6YCf5Yiq6Zmk5pa56YedJyksICdMSUI6Q1NEJyk7XG5cdFx0ZGlhbG9nLmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCfpgJ/liKDorr7nva4nLCAn6YCf5Yiq6Kit5a6aJyksICdIOlRXL1BSRUYjc3BlZWR5Jyk7XG5cdFx0ZGlhbG9nLmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI3NwZWVkeScpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFxuXHRcdFx0Y2FsbGJhY2tmdW5jLFxuXHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlTZWxlY3Rpb25TdHlsZScpID09PSAncmFkaW9DbGljaycgPyAnY2hhbmdlJyA6IG51bGxcblx0XHQpO1xuXHRcdGlmIChNb3JlYml0cy51c2VySXNTeXNvcCkge1xuXHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y+q5qCH6K6w77yM5LiN5Yig6ZmkJywgJ+WPquaomeiomO+8jOS4jeWIqumZpCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICd0YWdfb25seScsXG5cdFx0XHRcdFx0XHRuYW1lOiAndGFnX29ubHknLFxuXHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfoi6Xmgqjlj6rmg7PmoIforrDmraTpobXpnaLogIzkuI3mmK/lsIblhbbliKDpmaQnLCAn6Iul5oKo5Y+q5oOz5qiZ6KiY5q2k6aCB6Z2i6ICM5LiN5piv5bCH5YW25Yiq6ZmkJyksXG5cdFx0XHRcdFx0XHRjaGVja2VkOiAhKFR3aW5rbGUuc3BlZWR5Lmhhc0NTRCB8fCBUd2lua2xlLmdldFByZWYoJ2RlbGV0ZVN5c29wRGVmYXVsdFRvRGVsZXRlJykpLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjRm9ybSA9IGV2ZW50LnRhcmdldC5mb3JtO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuXHRcdFx0XHRcdFx0XHQvLyBlbmFibGUvZGlzYWJsZSB0YWxrIHBhZ2UgY2hlY2tib3hcblx0XHRcdFx0XHRcdFx0aWYgKGNGb3JtLnRhbGtwYWdlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y0Zvcm0udGFsa3BhZ2UuZGlzYWJsZWQgPSBjQ2hlY2tlZDtcblx0XHRcdFx0XHRcdFx0XHRjRm9ybS50YWxrcGFnZS5jaGVja2VkID0gIWNDaGVja2VkICYmIFR3aW5rbGUuZ2V0UHJlZignZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZScpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIGVuYWJsZS9kaXNhYmxlIHJlZGlyZWN0cyBjaGVja2JveFxuXHRcdFx0XHRcdFx0XHRjRm9ybS5yZWRpcmVjdHMuZGlzYWJsZWQgPSBjQ2hlY2tlZDtcblx0XHRcdFx0XHRcdFx0Y0Zvcm0ucmVkaXJlY3RzLmNoZWNrZWQgPSAhY0NoZWNrZWQ7XG5cdFx0XHRcdFx0XHRcdC8vIGVuYWJsZS9kaXNhYmxlIGRlbGV0ZSBtdWx0aXBsZVxuXHRcdFx0XHRcdFx0XHRjRm9ybS5kZWxtdWx0aXBsZS5kaXNhYmxlZCA9IGNDaGVja2VkO1xuXHRcdFx0XHRcdFx0XHRjRm9ybS5kZWxtdWx0aXBsZS5jaGVja2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdC8vIGVuYWJsZS9kaXNhYmxlIG9wZW4gdGFsayBwYWdlIGNoZWNrYm94XG5cdFx0XHRcdFx0XHRcdGNGb3JtLm9wZW51c2VydGFsay5kaXNhYmxlZCA9IGNDaGVja2VkO1xuXHRcdFx0XHRcdFx0XHRjRm9ybS5vcGVudXNlcnRhbGsuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHQvLyBlbmFibGUvZGlzYWJsZSBub3RpZnkgY2hlY2tib3hcblx0XHRcdFx0XHRcdFx0Y0Zvcm0ubm90aWZ5LmRpc2FibGVkID0gIWNDaGVja2VkO1xuXHRcdFx0XHRcdFx0XHRjRm9ybS5ub3RpZnkuY2hlY2tlZCA9IGNDaGVja2VkO1xuXHRcdFx0XHRcdFx0XHQvLyBlbmFibGUvZGlzYWJsZSBtdWx0aXBsZVxuXHRcdFx0XHRcdFx0XHRjRm9ybS5tdWx0aXBsZS5kaXNhYmxlZCA9ICFjQ2hlY2tlZDtcblx0XHRcdFx0XHRcdFx0Y0Zvcm0ubXVsdGlwbGUuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHQvLyBlbmFibGUgcmVxdWVzdGluZyBjcmVhdGlvbiBwcm90ZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNGb3JtLnNhbHRpbmcuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5tb2RlQ2hhbmdlZChjRm9ybSk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBkZWxldGVPcHRpb25zID0gZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0bmFtZTogJ2RlbGV0ZV9vcHRpb25zJyxcblx0XHRcdH0pO1xuXHRcdFx0ZGVsZXRlT3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk55u45YWz6YCJ6aG5JywgJ+WIqumZpOebuOmXnOmBuOmghScpLFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSAlIDIgPT09IDAgJiYgbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSAhPT0gMikge1xuXHRcdFx0XHQvLyBoaWRlIG9wdGlvbiBmb3IgdXNlciBwYWdlcywgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IGRlbGV0aW5nIHVzZXIgdGFsayBwYWdlXG5cdFx0XHRcdGRlbGV0ZU9wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk6K6o6K666aG1JywgJ+WIqumZpOiojuirlumggScpLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ3RhbGtwYWdlJyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3RhbGtwYWdlJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfliKDpmaTml7bpmYTluKbliKDpmaTmraTpobXpnaLnmoTorqjorrrpobXjgIInLCAn5Yiq6Zmk5pmC6ZmE5bi25Yiq6Zmk5q2k6aCB6Z2i55qE6KiO6KuW6aCB44CCJyksXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuZ2V0UHJlZignZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZScpLFxuXHRcdFx0XHRcdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlT3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk6YeN5a6a5ZCRJywgJ+WIqumZpOmHjeaWsOWwjuWQkScpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdyZWRpcmVjdHMnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+WIoOmZpOWIsOatpOmhteeahOmHjeWumuWQkeOAgicsICfliKrpmaTliLDmraTpoIHnmoTph43mlrDlsI7lkJHjgIInKSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuZ2V0UHJlZignZGVsZXRlUmVkaXJlY3RzT25EZWxldGUnKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHRcdGRlbGV0ZU9wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W6lOeUqOWkmuS4queQhueUseWIoOmZpCcsICfmh4nnlKjlpJrlgIvnkIbnlLHliKrpmaQnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnZGVsbXVsdGlwbGUnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ2RlbG11bHRpcGxlJyxcblx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5oKo5Y+v6YCJ5oup5bqU55So5LqO6K+l6aG155qE5aSa5Liq55CG55Sx44CCJywgJ+aCqOWPr+mBuOaTh+aHieeUqOaWvOipsumggeeahOWkmuWAi+eQhueUseOAgicpLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5tb2RlQ2hhbmdlZChldmVudC50YXJnZXQuZm9ybSk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0XHRkZWxldGVPcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvIDlkK/nlKjmiLforqjorrrpobUnLCAn6ZaL5ZWf5L2/55So6ICF6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ29wZW51c2VydGFsaycsXG5cdFx0XHRcdFx0XHRuYW1lOiAnb3BlbnVzZXJ0YWxrJyxcblx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+atpOmhueeahOm7mOiupOWAvOS4uuaCqOeahOW8gOWQr+iuqOiuuumhteiuvue9ruOAguWcqOaCqOmAieaLqeW6lOeUqOWkmuadoeeQhueUseWIoOmZpOaXtuatpOmhueWwhuS/neaMgeS4jeWPmOOAgicsXG5cdFx0XHRcdFx0XHRcdCfmraTpoIXnmoTpoJDoqK3lgLzngrrmgqjnmoTplovllZ/oqI7oq5bpoIHoqK3lrprjgILlnKjmgqjpgbjmk4fmh4nnlKjlpJrmop3nkIbnlLHliKrpmaTmmYLmraTpoIXlsIfkv53mjIHkuI3ororjgIInXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogZmFsc2UsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCB0YWdPcHRpb25zID0gZm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRuYW1lOiAndGFnX29wdGlvbnMnLFxuXHRcdH0pO1xuXHRcdGlmIChNb3JlYml0cy51c2VySXNTeXNvcCkge1xuXHRcdFx0dGFnT3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qCH6K6w55u45YWz6YCJ6aG5JywgJ+aomeiomOebuOmXnOmBuOmghScpLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhZ09wdGlvbnMuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflpoLlj6/og73vvIzpgJrnn6XliJvlu7rogIUnLCAn5aaC5Y+v6IO977yM6YCa55+l5bu656uL6ICFJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdG5hbWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfkuIDkuKrpgJrnn6XmqKHmnb/lsIbkvJrooqvliqDlhaXliJvlu7rogIXnmoTorqjorrrpobXvvIzoi6XmgqjlkK/nlKjkuobor6XnkIbmja7nmoTpgJrnn6XjgIInLFxuXHRcdFx0XHRcdFx0J+S4gOWAi+mAmuefpeaooeadv+Wwh+acg+iiq+WKoOWFpeW7uueri+iAheeahOiojuirlumgge+8jOiLpeaCqOWVn+eUqOS6huipsueQhuaTmueahOmAmuefpeOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6XG5cdFx0XHRcdFx0XHQhTW9yZWJpdHMudXNlcklzU3lzb3AgfHxcblx0XHRcdFx0XHRcdCEoVHdpbmtsZS5zcGVlZHkuaGFzQ1NEIHx8IFR3aW5rbGUuZ2V0UHJlZignZGVsZXRlU3lzb3BEZWZhdWx0VG9EZWxldGUnKSksXG5cdFx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+a4heepuumhtemdoicsICfmuIXnqbrpoIHpnaInKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2JsYW5rJyxcblx0XHRcdFx0XHRuYW1lOiAnYmxhbmsnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjmoIforrDmqKHmnb/liY3vvIzlhYjmuIXnqbrpobXpnaLvvIzpgILnlKjkuo7kuKXph43noLTlnY/miJbotJ/pnaLnlJ/ogIXkvKDorrDnrYnjgIInLFxuXHRcdFx0XHRcdFx0J+WcqOaomeiomOaooeadv+WJje+8jOWFiOa4heepuumggemdou+8jOmBqeeUqOaWvOWatOmHjeegtOWjnuaIluiyoOmdoueUn+iAheWCs+iomOetieOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5ZCM5pe25qCH6K6w5Lul6K+35rGC55m957q45L+d5oqkJywgJ+WQjOaZguaomeiomOS7peiri+axgueZvee0meS/neittycpLFxuXHRcdFx0XHRcdHZhbHVlOiAnc2FsdGluZycsXG5cdFx0XHRcdFx0bmFtZTogJ3NhbHRpbmcnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfpgInlj5blkI7vvIzlv6vpgJ/liKDpmaTmqKHmnb/lkI7lsIbpmYTluKYge3tzYWx0fX0g5qCH562+77yM5Lul6K+35rGC5omn6KGM5Yig6Zmk55qE566h55CG5ZGY6L+b6KGM55m957q45L+d5oqk77yM5LuF5Zyo6aG16Z2i5Yib5bu6M+asoeS7peS4iuaJjemAieaLqeatpOmhueOAgicsXG5cdFx0XHRcdFx0XHQn6YG45Y+W5b6M77yM5b+r6YCf5Yiq6Zmk5qih5p2/5b6M5bCH6ZmE5bi2IHt7c2FsdH19IOaomeexpO+8jOS7peiri+axguWft+ihjOWIqumZpOeahOeuoeeQhuWToemAsuihjOeZvee0meS/neitt++8jOWDheWcqOmggemdouW7uuerizPmrKHku6XkuIrmiY3pgbjmk4fmraTpoIXjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W6lOeUqOWkmuS4queQhueUsScsICfmh4nnlKjlpJrlgIvnkIbnlLEnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ211bHRpcGxlJyxcblx0XHRcdFx0XHRuYW1lOiAnbXVsdGlwbGUnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5oKo5Y+v6YCJ5oup5bqU55So5LqO6K+l6aG155qE5aSa5Liq55CG55Sx44CCJywgJ+aCqOWPr+mBuOaTh+aHieeUqOaWvOipsumggeeahOWkmuWAi+eQhueUseOAgicpLFxuXHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLm1vZGVDaGFuZ2VkKGV2ZW50LnRhcmdldC5mb3JtKTtcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0aWQ6ICdwcmlvci1kZWxldGlvbi1jb3VudCcsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfliJ3lp4vljJZDU0TmqKHlnZflpLHotKXvvIzor7fph43or5XvvIzmiJblsIbov5nmiqXlkYrnu5lUd2lua2xl5byA5Y+R6ICF44CCJyxcblx0XHRcdFx0J+WIneWni+WMlkNTROaooee1hOWkseaVl++8jOiri+mHjeippu+8jOaIluWwh+mAmeWgseWRiue1plR3aW5rbGXplovnmbzogIXjgIInXG5cdFx0XHQpLFxuXHRcdH0pO1xuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ3NwZWVkeVNlbGVjdGlvblN0eWxlJykgIT09ICdyYWRpb0NsaWNrJykge1xuXHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdFx0Y2xhc3NOYW1lOiAndHctc3BlZWR5LXN1Ym1pdCcsXG5cdFx0XHR9KTsgLy8gUmVuYW1lZCBpbiBtb2RlQ2hhbmdlZFxuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdCA9IGZvcm0ucmVuZGVyKCk7XG5cdFx0ZGlhbG9nLnNldENvbnRlbnQocmVzdWx0KTtcblx0XHRkaWFsb2cuZGlzcGxheSgpO1xuXHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLm1vZGVDaGFuZ2VkKHJlc3VsdCk7XG5cdFx0Ly8gQ2hlY2sgZm9yIHByaW9yIGRlbGV0aW9ucy4gIEp1c3Qgb25jZSwgdXBvbiBpbml0XG5cdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2sucHJpb3JEZWxldGlvbkNvdW50KCk7XG5cdH07XG5cdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLmdldE1vZGUgPSAoZm9ybSkgPT4ge1xuXHRcdGxldCBtb2RlID0gVHdpbmtsZS5zcGVlZHkubW9kZS51c2VyU2luZ2xlU3VibWl0O1xuXHRcdGlmIChmb3JtLnRhZ19vbmx5ICYmICFmb3JtLnRhZ19vbmx5LmNoZWNrZWQpIHtcblx0XHRcdGlmIChmb3JtLmRlbG11bHRpcGxlLmNoZWNrZWQpIHtcblx0XHRcdFx0bW9kZSA9IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BNdWx0aXBsZVN1Ym1pdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1vZGUgPSBUd2lua2xlLnNwZWVkeS5tb2RlLnN5c29wU2luZ2xlU3VibWl0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZm9ybS5tdWx0aXBsZS5jaGVja2VkKSB7XG5cdFx0XHRtb2RlID0gVHdpbmtsZS5zcGVlZHkubW9kZS51c2VyTXVsdGlwbGVTdWJtaXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1vZGUgPSBUd2lua2xlLnNwZWVkeS5tb2RlLnVzZXJTaW5nbGVTdWJtaXQ7XG5cdFx0fVxuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ3NwZWVkeVNlbGVjdGlvblN0eWxlJykgPT09ICdyYWRpb0NsaWNrJykge1xuXHRcdFx0bW9kZSsrO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9kZTtcblx0fTtcblx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2subW9kZUNoYW5nZWQgPSAoZm9ybSkgPT4ge1xuXHRcdGNvbnN0IG5hbWVzcGFjZSA9IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJyk7XG5cdFx0Ly8gZmlyc3QgZmlndXJlIG91dCB3aGF0IG1vZGUgd2UncmUgaW5cblx0XHRjb25zdCBtb2RlID0gVHdpbmtsZS5zcGVlZHkuY2FsbGJhY2suZ2V0TW9kZShmb3JtKTtcblx0XHRjb25zdCBpc1N5c29wTW9kZSA9IFR3aW5rbGUuc3BlZWR5Lm1vZGUuaXNTeXNvcChtb2RlKTtcblx0XHRpZiAoaXNTeXNvcE1vZGUpIHtcblx0XHRcdCRib2R5LmZpbmQoJ1tuYW1lPWRlbGV0ZV9vcHRpb25zXScpLnNob3coKTtcblx0XHRcdCRib2R5LmZpbmQoJ1tuYW1lPXRhZ19vcHRpb25zXScpLmhpZGUoKTtcblx0XHRcdCRib2R5LmZpbmQoJ2J1dHRvbi50dy1zcGVlZHktc3VibWl0JykudGV4dCh3aW5kb3cud2dVTFMoJ+WIoOmZpOmhtemdoicsICfliKrpmaTpoIHpnaInKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRib2R5LmZpbmQoJ1tuYW1lPWRlbGV0ZV9vcHRpb25zXScpLmhpZGUoKTtcblx0XHRcdCRib2R5LmZpbmQoJ1tuYW1lPXRhZ19vcHRpb25zXScpLnNob3coKTtcblx0XHRcdCRib2R5LmZpbmQoJ2J1dHRvbi50dy1zcGVlZHktc3VibWl0JykudGV4dCh3aW5kb3cud2dVTFMoJ+agh+iusOmhtemdoicsICfmqJnoqJjpoIHpnaInKSk7XG5cdFx0fVxuXHRcdGNvbnN0IHdvcmtfYXJlYSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdG5hbWU6ICd3b3JrX2FyZWEnLFxuXHRcdH0pO1xuXHRcdGlmIChcblx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUudXNlck11bHRpcGxlUmFkaW9DbGljayB8fFxuXHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS5zeXNvcE11bHRpcGxlUmFkaW9DbGlja1xuXHRcdCkge1xuXHRcdFx0Y29uc3QgZXZhbHVhdGVUeXBlID0gVHdpbmtsZS5zcGVlZHkubW9kZS5pc1N5c29wKG1vZGUpID8gJ2V2YWx1YXRlU3lzb3AnIDogJ2V2YWx1YXRlVXNlcic7XG5cdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W9k+mAieaLqeWujOaIkOWQju+8jOWNleWHu++8micsICfnlbbpgbjmk4flrozmiJDlvozvvIzpu57mk4rvvJonKSxcblx0XHRcdH0pO1xuXHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdidXR0b24nLFxuXHRcdFx0XHRuYW1lOiAnc3VibWl0LW11bHRpcGxlJyxcblx0XHRcdFx0bGFiZWw6IGlzU3lzb3BNb2RlID8gd2luZG93LndnVUxTKCfliKDpmaTpobXpnaInLCAn5Yiq6Zmk6aCB6Z2iJykgOiB3aW5kb3cud2dVTFMoJ+agh+iusOmhtemdoicsICfmqJnoqJjpoIHpnaInKSxcblx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrW2V2YWx1YXRlVHlwZV0oZXZlbnQpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IHJhZGlvT3JDaGVja2JveCA9IFR3aW5rbGUuc3BlZWR5Lm1vZGUuaXNNdWx0aXBsZShtb2RlKSA/ICdjaGVja2JveCcgOiAncmFkaW8nO1xuXHRcdGlmIChpc1N5c29wTW9kZSkge1xuXHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnnkIbnlLEnLCAn6Ieq6KiC55CG55SxJyksXG5cdFx0XHR9KTtcblx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiByYWRpb09yQ2hlY2tib3gsXG5cdFx0XHRcdG5hbWU6ICdjc2QnLFxuXHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuY3VzdG9tUmF0aW9uYWxlLCBtb2RlKSxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG5hbWVzcGFjZSkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHQvLyBhcnRpY2xlIGFuZCBwc2V1ZG8gbmFtZXNwYWNlXG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+adoeebricsICfmop3nm64nKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuYXJ0aWNsZUxpc3QsIG1vZGUpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdC8vIHVzZXJcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi36aG1JywgJ+S9v+eUqOiAhemggemdoicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogcmFkaW9PckNoZWNrYm94LFxuXHRcdFx0XHRcdG5hbWU6ICdjc2QnLFxuXHRcdFx0XHRcdGxpc3Q6IFR3aW5rbGUuc3BlZWR5LmdlbmVyYXRlQ3NkTGlzdChUd2lua2xlLnNwZWVkeS51c2VyTGlzdCwgbW9kZSksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMzpcblx0XHRcdFx0Ly8gdXNlciB0YWxrXG5cdFx0XHRcdGlmIChtdy51dGlsLmlzSVBBZGRyZXNzKG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKSkge1xuXHRcdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnlKjmiLforqjorrrpobUnLCAn5L2/55So6ICF6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiByYWRpb09yQ2hlY2tib3gsXG5cdFx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRcdGxpc3Q6IFR3aW5rbGUuc3BlZWR5LmdlbmVyYXRlQ3NkTGlzdChUd2lua2xlLnNwZWVkeS51c2VydGFsa0xpc3QsIG1vZGUpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSA2OlxuXHRcdFx0XHQvLyBmaWxlXG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWh+S7ticsICfmqpTmoYgnKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuZmlsZUxpc3QsIG1vZGUpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKCFUd2lua2xlLnNwZWVkeS5tb2RlLmlzU3lzb3AobW9kZSkpIHtcblx0XHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+agh+iusENTRCBGMeOAgUYz44CBRjXvvIzor7fkvb/nlKhUd2lua2xl55qE4oCc5Zu+5p2D4oCd5Yqf6IO944CCJyxcblx0XHRcdFx0XHRcdFx0J+aomeiomENTRCBGMeOAgUYz44CBRjXvvIzoq4vkvb/nlKhUd2lua2xl55qE44CM5ZyW5qyK44CN5Yqf6IO944CCJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMTQ6XG5cdFx0XHRcdC8vIGNhdGVnb3J5XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WIhuexuycsICfliIbpoZ4nKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuY2F0ZWdvcnlMaXN0LCBtb2RlKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAxMTg6XG5cdFx0XHRcdC8vIGRyYWZ0XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiAn6I2J56i/Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuZHJhZnRMaXN0LCBtb2RlKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBuYW1lc3BhY2UgJSAyID09PSAxICYmIG5hbWVzcGFjZSAhPT0gMzpcblx0XHRcdFx0Ly8gc2hvdyBkYi10YWxrIG9uIHRhbGsgcGFnZXMsIGJ1dCBub3QgdXNlciB0YWxrIHBhZ2VzXG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iuqOiuuumhtScsICfoqI7oq5bpoIEnKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkudGFsa0xpc3QsIG1vZGUpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gY3VzdG9tIHJhdGlvbmFsZSBsaXZlcyB1bmRlciBnZW5lcmFsIGNyaXRlcmlhIHdoZW4gdGFnZ2luZ1xuXHRcdGxldCBnZW5lcmFsQ3JpdGVyaWEgPSBUd2lua2xlLnNwZWVkeS5nZW5lcmFsTGlzdDtcblx0XHRpZiAoIVR3aW5rbGUuc3BlZWR5Lm1vZGUuaXNTeXNvcChtb2RlKSkge1xuXHRcdFx0Z2VuZXJhbENyaXRlcmlhID0gWy4uLlR3aW5rbGUuc3BlZWR5LmN1c3RvbVJhdGlvbmFsZSwgLi4uZ2VuZXJhdGVBcnJheShnZW5lcmFsQ3JpdGVyaWEpXTtcblx0XHR9XG5cdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W4uOinhCcsICfluLjopo8nKSxcblx0XHR9KTtcblx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdG5hbWU6ICdjc2QnLFxuXHRcdFx0bGlzdDogVHdpbmtsZS5zcGVlZHkuZ2VuZXJhdGVDc2RMaXN0KGdlbmVyYWxDcml0ZXJpYSwgbW9kZSksXG5cdFx0fSk7XG5cdFx0aWYgKCFUd2lua2xlLnNwZWVkeS5tb2RlLmlzU3lzb3AobW9kZSkpIHtcblx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5o+Q5oql5L615p2D6aG16Z2i77yM6K+35L2/55SoVHdpbmtsZeeahOKAnOS+teadg+KAneWKn+iDveOAgicsXG5cdFx0XHRcdFx0J+aPkOWgseS+teasiumggemdou+8jOiri+S9v+eUqFR3aW5rbGXnmoTjgIzkvrXmrIrjgI3lip/og73jgIInXG5cdFx0XHRcdCksXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnSXNSZWRpcmVjdCcpIHx8IE1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdGxhYmVsOiAn6YeN5a6a5ZCRJyxcblx0XHRcdH0pO1xuXHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0bmFtZTogJ2NzZCcsXG5cdFx0XHRcdGxpc3Q6IFR3aW5rbGUuc3BlZWR5LmdlbmVyYXRlQ3NkTGlzdChUd2lua2xlLnNwZWVkeS5yZWRpcmVjdExpc3QsIG1vZGUpLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IFtvbGRfYXJlYV0gPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMoZm9ybSwgJ3dvcmtfYXJlYScpO1xuXHRcdGZvcm0ucmVwbGFjZUNoaWxkKHdvcmtfYXJlYS5yZW5kZXIoKSwgb2xkX2FyZWEpO1xuXHRcdC8vIGlmIHN5c29wLCBjaGVjayBpZiBDU0QgaXMgYWxyZWFkeSBvbiB0aGUgcGFnZSBhbmQgZmlsbCBpbiBjdXN0b20gcmF0aW9uYWxlXG5cdFx0aWYgKGlzU3lzb3BNb2RlICYmIFR3aW5rbGUuc3BlZWR5Lmhhc0NTRCkge1xuXHRcdFx0Y29uc3QgW2N1c3RvbU9wdGlvbl0gPSAkYm9keS5maW5kKCdpbnB1dFtuYW1lPWNzZF1bdmFsdWU9cmVhc29uXScpO1xuXHRcdFx0aWYgKGN1c3RvbU9wdGlvbikge1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlTZWxlY3Rpb25TdHlsZScpICE9PSAncmFkaW9DbGljaycpIHtcblx0XHRcdFx0XHQvLyBmb3JjZSBsaXN0ZW5lcnMgdG8gcmUtaW5pdFxuXHRcdFx0XHRcdGN1c3RvbU9wdGlvbi5jbGljaygpO1xuXHRcdFx0XHRcdGN1c3RvbU9wdGlvbi5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGN1c3RvbU9wdGlvbi5zdWJncm91cCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VzdG9tT3B0aW9uLnN1Ymdyb3VwLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoXG5cdFx0XHRcdFx0JGJvZHkuZmluZCgnI2RlbGV0ZS1yZWFzb24nKS50ZXh0KClcblx0XHRcdFx0KS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZW5sYXJnZSBHNyByYWRpby9jaGVja2JveCBhbmQgaXRzIGxhYmVsXG5cdFx0aWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3ZhbHVlPVwiZzdcIl0nKSAmJiBUd2lua2xlLmdldFByZWYoJ2VubGFyZ2VHN0lucHV0JykpIHtcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3ZhbHVlPVwiZzdcIl0nKS5zdHlsZSA9XG5cdFx0XHRcdCdoZWlnaHQ6IDJlbTsgd2lkdGg6IDJlbTsgaGVpZ2h0OiAtbW96LWluaXRpYWw7IHdpZHRoOiAtbW96LWluaXRpYWw7IC1tb3otdHJhbnNmb3JtOiBzY2FsZSgyKTsgLW8tdHJhbnNmb3JtOiBzY2FsZSgyKTsnO1xuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdmFsdWU9XCJnN1wiXScpLmxhYmVsc1swXS5zdHlsZSA9ICdmb250LXNpemU6IDEuNWVtOyBsaW5lLWhlaWdodDogMS41ZW07Jztcblx0XHR9XG5cdFx0aWYgKCFpc1N5c29wTW9kZSAmJiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VDb250ZW50TW9kZWwnKSAhPT0gJ3dpa2l0ZXh0Jykge1xuXHRcdFx0JGJvZHkuZmluZCgnW25hbWU9dGFnX29wdGlvbnNdJykuaGlkZSgpO1xuXHRcdFx0JGJvZHkuZmluZCgnW25hbWU9d29ya19hcmVhXScpLmVtcHR5KCk7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gW1xuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ1R3aW5rbGXkuI3mlK/mjIHlnKjpobXpnaLlhoXlrrnmqKHlnovkuLonLCAnVHdpbmtsZeS4jeaUr+aPtOWcqOmggemdouWFp+WuueaooeWei+eCuicpLFxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VDb250ZW50TW9kZWwnKSxcblx0XHRcdFx0d2luZG93LndnVUxTKCfnmoTpobXpnaLkuIrmjILkuIrlv6vpgJ/liKDpmaTmqKHmnb/vvIzor7flj4Lop4EnLCAn55qE6aCB6Z2i5LiK5o6b5LiK5b+r6YCf5Yiq6Zmk5qih5p2/77yM6KuL5Y+D6KaLJyksXG5cdFx0XHRcdCQoJzxhPicpXG5cdFx0XHRcdFx0LmF0dHIoe1xuXHRcdFx0XHRcdFx0dGFyZ2V0OiAnX2JsYW5rJyxcblx0XHRcdFx0XHRcdHJlbDogJ25vb3BlbmVyIG5vcmVmZXJyZXInLFxuXHRcdFx0XHRcdFx0aHJlZjogbXcudXRpbC5nZXRVcmwoJ0xJQjpTUEVDSUFMU0QnKSxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn5omL5Yqo5pS+572u5qih5p2/5pe255qE5rOo5oSP5LqL6aG5JywgJ+aJi+WLleaUvue9ruaooeadv+aZgueahOazqOaEj+S6i+mghScpKVswXSxcblx0XHRcdFx0J+OAgicsXG5cdFx0XHRdO1xuXHRcdFx0JGJvZHkuZmluZCgnW25hbWU9d29ya19hcmVhXScpLmFwcGVuZChtZXNzYWdlKTtcblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZCh0cnVlKTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLnByaW9yRGVsZXRpb25Db3VudCA9ICgpID0+IHtcblx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0bGlzdDogJ2xvZ2V2ZW50cycsXG5cdFx0XHRsZXR5cGU6ICdkZWxldGUnLFxuXHRcdFx0bGVhY3Rpb246ICdkZWxldGUvZGVsZXRlJyxcblx0XHRcdC8vIEp1c3QgcHVyZSBwYWdlIGRlbGV0aW9uLCBubyByZWRpcmVjdCBvdmVyd3JpdGVzIG9yIHJldmRlbFxuXHRcdFx0bGV0aXRsZTogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0bGVwcm9wOiAnJyxcblx0XHRcdC8vIFdlJ3JlIGp1c3QgY291bnRpbmcgd2UgZG9uJ3QgYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgZW50cmllc1xuXHRcdFx0bGVsaW1pdDogNSxcblx0XHRcdC8vIEEgbGl0dGxlIGJpdCBnb2VzIGEgbG9uZyB3YXlcblx0XHR9O1xuXG5cdFx0bmV3IE1vcmViaXRzLndpa2kuYXBpKHdpbmRvdy53Z1VMUygn5qOA5p+l5LmL5YmN55qE5Yig6ZmkJywgJ+aqouafpeS5i+WJjeeahOWIqumZpCcpLCBxdWVyeSwgKGFwaW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhcGlvYmouZ2V0UmVzcG9uc2UoKTtcblx0XHRcdGNvbnN0IGRlbENvdW50ID0gcmVzcG9uc2UucXVlcnkubG9nZXZlbnRzLmxlbmd0aDtcblx0XHRcdGlmIChkZWxDb3VudCkge1xuXHRcdFx0XHRsZXQgbWVzc2FnZSA9IHdpbmRvdy53Z1VMUygn6KKr5Yig6ZmkJywgJ+iiq+WIqumZpCcpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UuY29udGludWUpIHtcblx0XHRcdFx0XHRtZXNzYWdlICs9IHdpbmRvdy53Z1VMUygn6LaF6L+HJywgJ+i2hemBjicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lc3NhZ2UgKz0gYCR7ZGVsQ291bnR95qyhYDtcblx0XHRcdFx0Ly8gMysgc2VlbXMgcHJvYmxlbWF0aWNcblx0XHRcdFx0aWYgKGRlbENvdW50ID49IDMpIHtcblx0XHRcdFx0XHQkYm9keS5maW5kKCcjcHJpb3ItZGVsZXRpb24tY291bnQnKS5jc3MoJ2NvbG9yJywgJyNmZjAwMDAnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBQcm92aWRlIGEgbGluayB0byBwYWdlIGxvZ3MgKENTRCB0ZW1wbGF0ZXMgaGF2ZSBvbmUgZm9yIHN5c29wcylcblx0XHRcdFx0Y29uc3QgbGluayA9IE1vcmViaXRzLmh0bWxOb2RlKCdhJywgd2luZG93LndnVUxTKCfvvIjml6Xlv5fvvIknLCAn77yI5pel6KqM77yJJykpO1xuXHRcdFx0XHRsaW5rLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0XHQnaHJlZicsXG5cdFx0XHRcdFx0bXcudXRpbC5nZXRVcmwoJ1NwZWNpYWw6TG9nJywge1xuXHRcdFx0XHRcdFx0cGFnZTogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG5cdFx0XHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuXHRcdFx0XHQkYm9keS5maW5kKCcjcHJpb3ItZGVsZXRpb24tY291bnQnKS50ZXh0KG1lc3NhZ2UpOyAvLyBTcGFjZSBiZWZvcmUgbG9nIGxpbmtcblx0XHRcdFx0JGJvZHkuZmluZCgnI3ByaW9yLWRlbGV0aW9uLWNvdW50JykuYXBwZW5kKGxpbmspO1xuXHRcdFx0fVxuXHRcdH0pLnBvc3QoKTtcblx0fTtcblx0VHdpbmtsZS5zcGVlZHkuZ2VuZXJhdGVDc2RMaXN0ID0gKGxpc3QsIG1vZGUpID0+IHtcblx0XHQvLyBtb2RlIHN3aXRjaGVzXG5cdFx0Y29uc3QgaXNTeXNvcE1vZGUgPSBUd2lua2xlLnNwZWVkeS5tb2RlLmlzU3lzb3AobW9kZSk7XG5cdFx0Y29uc3QgbXVsdGlwbGUgPSBUd2lua2xlLnNwZWVkeS5tb2RlLmlzTXVsdGlwbGUobW9kZSk7XG5cdFx0Y29uc3QgaGFzU3VibWl0QnV0dG9uID0gVHdpbmtsZS5zcGVlZHkubW9kZS5oYXNTdWJtaXRCdXR0b24obW9kZSk7XG5cdFx0Y29uc3Qgb3BlblN1Ymdyb3VwSGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHQkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2lucHV0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdCQoZS50YXJnZXQuZm9ybSkuY2hpbGRyZW4oKS5jc3MoJ2NvbG9yJywgJ2dyYXknKTtcblx0XHRcdCQoZS50YXJnZXQpLnBhcmVudCgpLmNzcygnY29sb3InLCAnYmxhY2snKS5maW5kKCdpbnB1dCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuXHRcdFx0JChlLnRhcmdldCkucGFyZW50KCkuZmluZCgnaW5wdXQ6dGV4dCcpWzBdLmZvY3VzKCk7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH07XG5cdFx0Y29uc3Qgc3VibWl0U3ViZ3JvdXBIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGV2YWx1YXRlVHlwZSA9IFR3aW5rbGUuc3BlZWR5Lm1vZGUuaXNTeXNvcChtb2RlKSA/ICdldmFsdWF0ZVN5c29wJyA6ICdldmFsdWF0ZVVzZXInO1xuXHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tbZXZhbHVhdGVUeXBlXShlKTtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fTtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGxpc3QsIChjcml0RWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgY3JpdGVyaW9uID0ge1xuXHRcdFx0XHQuLi5jcml0RWxlbWVudCxcblx0XHRcdH07XG5cdFx0XHRpZiAobXVsdGlwbGUpIHtcblx0XHRcdFx0aWYgKGNyaXRlcmlvbi5oaWRlV2hlbk11bHRpcGxlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNyaXRlcmlvbi5oaWRlU3ViZ3JvdXBXaGVuTXVsdGlwbGUpIHtcblx0XHRcdFx0XHRjcml0ZXJpb24uc3ViZ3JvdXAgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoY3JpdGVyaW9uLmhpZGVXaGVuU2luZ2xlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNyaXRlcmlvbi5oaWRlU3ViZ3JvdXBXaGVuU2luZ2xlKSB7XG5cdFx0XHRcdFx0Y3JpdGVyaW9uLnN1Ymdyb3VwID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGlzU3lzb3BNb2RlKSB7XG5cdFx0XHRcdGlmIChjcml0ZXJpb24uaGlkZVdoZW5TeXNvcCkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjcml0ZXJpb24uaGlkZVN1Ymdyb3VwV2hlblN5c29wKSB7XG5cdFx0XHRcdFx0Y3JpdGVyaW9uLnN1Ymdyb3VwID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGNyaXRlcmlvbi5oaWRlV2hlblVzZXIpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY3JpdGVyaW9uLmhpZGVTdWJncm91cFdoZW5Vc2VyKSB7XG5cdFx0XHRcdFx0Y3JpdGVyaW9uLnN1Ymdyb3VwID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnSXNSZWRpcmVjdCcpICYmIGNyaXRlcmlvbi5oaWRlV2hlblJlZGlyZWN0KSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjcml0ZXJpb24uc2hvd0luTmFtZXNwYWNlcyAmJlxuXHRcdFx0XHQhY3JpdGVyaW9uLnNob3dJbk5hbWVzcGFjZXMuaW5jbHVkZXMobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGNyaXRlcmlvbi5oaWRlSW5OYW1lc3BhY2VzICYmXG5cdFx0XHRcdGNyaXRlcmlvbi5oaWRlSW5OYW1lc3BhY2VzLmluY2x1ZGVzKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3JpdGVyaW9uLnN1Ymdyb3VwICYmICFoYXNTdWJtaXRCdXR0b24pIHtcblx0XHRcdFx0Y3JpdGVyaW9uLnN1Ymdyb3VwID0gZ2VuZXJhdGVBcnJheShjcml0ZXJpb24uc3ViZ3JvdXAsIHtcblx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRuYW1lOiAnc3VibWl0Jyxcblx0XHRcdFx0XHRsYWJlbDogaXNTeXNvcE1vZGUgPyB3aW5kb3cud2dVTFMoJ+WIoOmZpOmhtemdoicsICfliKrpmaTpoIHpnaInKSA6IHdpbmRvdy53Z1VMUygn5qCH6K6w6aG16Z2iJywgJ+aomeiomOmggemdoicpLFxuXHRcdFx0XHRcdGV2ZW50OiBzdWJtaXRTdWJncm91cEhhbmRsZXIsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQvLyBGSVhNRTogZG9lcyB0aGlzIGRvIGFueXRoaW5nP1xuXHRcdFx0XHRjcml0ZXJpb24uZXZlbnQgPSBvcGVuU3ViZ3JvdXBIYW5kbGVyO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzU3lzb3BNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsRXZlbnQgPSBjcml0ZXJpb24uZXZlbnQ7XG5cdFx0XHRcdGNyaXRlcmlvbi5ldmVudCA9IChlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudChlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgbm9ybWFsaXplZENyaXRlcmlvbiA9IFR3aW5rbGUuc3BlZWR5Lm5vcm1hbGl6ZUhhc2hbZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHRcdCRib2R5XG5cdFx0XHRcdFx0XHQuZmluZCgnW25hbWU9b3BlbnVzZXJ0YWxrXScpXG5cdFx0XHRcdFx0XHQucHJvcChcblx0XHRcdFx0XHRcdFx0J2NoZWNrZWQnLFxuXHRcdFx0XHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ29wZW5Vc2VyVGFsa1BhZ2VPblNwZWVkeURlbGV0ZScpLmluY2x1ZGVzKG5vcm1hbGl6ZWRDcml0ZXJpb24pXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChvcmlnaW5hbEV2ZW50KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudChlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3JpdGVyaW9uO1xuXHRcdH0pO1xuXHR9O1xuXHRUd2lua2xlLnNwZWVkeS5jdXN0b21SYXRpb25hbGUgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6IGDoh6rlrprkuYnnkIbnlLEke01vcmViaXRzLnVzZXJJc1N5c29wID8gJ++8iOiHquWumuS5ieWIoOmZpOeQhueUse+8iScgOiAnJ31gLFxuXHRcdFx0dmFsdWU6ICdyZWFzb24nLFxuXHRcdFx0dG9vbHRpcDogJ+ivpemhteiHs+WwkeW6lOivpeespuWQiOS4gOadoeW/q+mAn+WIoOmZpOeahOagh+WHhu+8jOW5tuS4lOaCqOW/hemhu+WcqOeQhueUseS4reaPkOWIsOOAgicsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAncmVhc29uXzEnLFxuXHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRsYWJlbDogJ+eQhueUse+8micsXG5cdFx0XHRcdHNpemU6IDYwLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLnNwZWVkeS5maWxlTGlzdCA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogJ0Yx77ya5piO5pi+5LiN56ym5ZCI5pys56uZ6JGX5L2c5p2D5pa56ZKI55qE5paH5Lu2Jyxcblx0XHRcdHZhbHVlOiAnZjEnLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+WMheaLrOS7peS4i+aDheWGte+8mjEu5LiK5Lyg5ZCOM+WkqeWGheS7jeeEtuadpea6kOS4jeaYjuOAgeiRl+S9nOadg+S4jeaYjueahOaWh+S7tuOAgjIu5LiK5Lyg6ICF5a6j56ew5oul5pyJ77yM6ICM5Zyo5YW25LuW5p2l5rqQ5om+5Yiw55qE5paH5Lu244CCMy7mlofku7blrqPnp7DnlLHmn5DkvZzogIXkvp3mja7mn5Doh6rnlLHokZfkvZzmnYPljY/orq7lj5HluIPvvIzkvYbmib7kuI3liLDor6Xoh6rnlLHljY/orq7nmoTlo7DmmI7jgII0LuWFtuS7luaYjuaYvuS+teadg+eahOaWh+S7tu+8jOWPr+mZhOWKoOS+teadg+eQhueUseOAgicsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ0Yy77ya6YeN5aSN5LiU5LiN5YaN6KKr5L2/55So55qE5paH5Lu2Jyxcblx0XHRcdHZhbHVlOiAnZjInLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+WMheaLrOS7peS4i+aDheWGte+8muS4jueOsOacieaWh+S7tuWujOWFqOebuOWQjO+8iOaIluS4jueOsOacieaWh+S7tuWGheWuueS4gOiHtOS9huWwuuWvuOi+g+Wwj++8ie+8jOS4lOayoeacieWuouingumcgOimge+8iOWmguafkOS6m+WcuuWQiOmcgOS9v+eUqOWwj+WwuuWvuOWbvueJh++8ieeahOaWh+S7tuOAguaIluaYr+iiq+abtOWKoOa4heaZsOeahOaWh+S7tuOAgVNWR+agvOW8j+aWh+S7tuaJgOWPluS7o+eahOaWh+S7tuOAguivt+aPkOaKpeiAheehruWumuaWh+S7tuayoeacieS7u+S9lemhtemdouS9v+eUqOWQjuWGjeaPkOaKpeWIoOmZpO+8jOW5tumZhOazqOWvueW6lOi0qOmHj+abtOWlveeahOaWh+S7tuWQjeOAgicsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAnZjJfZmlsZW5hbWUnLFxuXHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRsYWJlbDogJ+aWsOaWh+S7tuWQje+8micsXG5cdFx0XHRcdHRvb2x0aXA6ICflj6/kuI3lkKvigJxGaWxlOuKAneWJjee8gOOAgicsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuc3BlZWR5LmFydGljbGVMaXN0ID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiAnQTHvvJrlhoXlrrnnqbrms5vmiJblrozlhajmsqHmnInlhoXlrrnjgIInLFxuXHRcdFx0dmFsdWU6ICdhMScsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5p2h55uu55qE5YaF5a6556y857uf77yM5oiW55Sa6Iez5qC55pys5rKh5pyJ5o+Q5Y+K5p2h55uu5Li75L2T77yM5L2/5p2h55uu5LiN6IO955So5Lul5Yy65YiG5YW25LuW5LqL54mp77yb5oiW5p2h55uu5Y+q5YyF5ous5aSW6YOo6ZO+5o6l44CB5Y+C6KeB44CB5Y+C6ICD5p2l5rqQ44CB5YiG57G744CB5qih5p2/77yM6ICM5rKh5pyJ5paH5a2X5o+P6L+w44CC5raI5q2n5LmJ6aG144CB6YeN5a6a5ZCR6aG15LiN6YCC55So5q2k5p2h44CC6K+35rOo5oSP5pyJ5Lqb55So5oi35Y+v6IO95Lya5aSa5qyh5L+d5a2Y77yM6Iul5q2k57G76aG16Z2i55qE5pyA5ZCO5LiA5qyh57yW6L6R5pe26Ze06LaF6L+HMjTlsI/ml7bvvIzliJnlj6/mj5Dor7flv6vpgJ/liKDpmaTjgIInLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICdBMu+8muS4juWFtuS7luadoeebruaIluWFtuWOhuWPsueJiOacrOmHjeWkje+8jOS4lOS4jemAguWQiOS9nOS4uuWFtumHjeWumuWQkeOAgicsXG5cdFx0XHR2YWx1ZTogJ2EyJyxcblx0XHRcdHRvb2x0aXA6XG5cdFx0XHRcdCfmnaHnm67liJvlu7rml7bnmoTlhoXlrrnvvIzkuI7lhbbku5bnjrDmnInmnaHnm67vvIjmiJblhbbljoblj7LniYjmnKzvvInlhoXlrrnlrozlhajnm7jlkIzmiJbpnZ7luLjnm7jkvLzvvIzkuJTlkI3np7DkuI3pgILlkIjkvZzkuLrlkI7ogIXnmoTph43lrprlkJHjgILkuI3ljIXmi6zmi4bliIbjgIHlkIjlubbjgIHph43nu4TlkI7kuqfnlJ/nmoTmnaHnm67jgILlpoLmnInnlpHomZHvvIzlj6/ovazkuqTliKDpmaTorqjorrrjgILoi6XlkI7liJvlu7rnmoTmnaHnm67lkI3np7Dlj6/kvZzkuLrph43lrprlkJHvvIzlj6/nm7TmjqXmlLnkuLrph43lrprlkJHvvJvoi6XlhYjliJvlu7rnmoTmnaHnm67lrpzkvZzkuLrlkI7liJvlu7rmnaHnm67nmoTph43lrprlkJHvvIzor7fmj5Dor7fnp7vliqjor7fmsYLjgIInLFxuXHRcdFx0c3ViZ3JvdXA6IHtcblx0XHRcdFx0bmFtZTogJ2EyX3BhZ2VuYW1lJyxcblx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0bGFiZWw6ICfnjrDmnInmnaHnm67lkI3vvJonLFxuXHRcdFx0XHR0b29sdGlwOiAn5LiN6Ieq5Yqo5Yqg5LiK6ZO+5o6l77yM6Iul6ZyA6KaB6K+36Ieq6KGM5Yqg5LiKW1tdXeOAgicsXG5cdFx0XHRcdHNpemU6IDYwLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnQTPvvJrpnZ7njrDku6PmsYnor63miJbnv7vor5Hmi5nliqPnmoTmnaHnm64nLFxuXHRcdFx0dmFsdWU6ICdhMycsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5p2h55uu5YaF5a6557ud5aSn6YOo5YiG6Z2e546w5Luj5rGJ6K+t77yM5YyF5ous5pyq57+76K+R55qE5aSW6K+t44CB5pa56KiA5Y+K5paH6KiA5paH77yb5oiW57+76K+R6LSo6YeP5L2O5LiL77yM5Lul6Iez5LqO6Zq+5Lul55CG6Kej5oiW5Ye6546w6L6D5aSa6ZSZ6K+v44CCJyxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLnNwZWVkeS5jYXRlZ29yeUxpc3QgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICdPMu+8muepuuWIhuexu+OAgicsXG5cdFx0XHR2YWx1ZTogJ28yJyxcblx0XHRcdHRvb2x0aXA6ICfmsqHmnInmlLblvZXku7vkvZXpobXpnaLjgIHmlofku7bjgIHlrZDliIbnsbvnmoTliIbnsbvjgIJDYXRlZ29yeTror7fli7/liKDpmaTnmoTliIbnsbvkuK3nmoTliIbnsbvkuI3pgILnlKjjgIInLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuc3BlZWR5LmRyYWZ0TGlzdCA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogJ08z77ya5bqf5byD6I2J56i/44CCJyxcblx0XHRcdHZhbHVlOiAnbzMnLFxuXHRcdFx0dG9vbHRpcDogJ+iNieeov+WQjeWtl+epuumXtOWGheWFreS4quaciOWGheaXoOe8lui+keeahOmhtemdouOAgicsXG5cdFx0fSxcblx0XTtcblx0VHdpbmtsZS5zcGVlZHkudXNlckxpc3QgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICdPMe+8mueUqOaIt+ivt+axguWIoOmZpOiHquW3seeahOeUqOaIt+mhteOAgicsXG5cdFx0XHR2YWx1ZTogJ28xJyxcblx0XHRcdHRvb2x0aXA6ICfnrqHnkIblkZjpnIDmn6XnnIvnvJbovpHljoblj7LvvIznoa7orqTor6XpobXpnaLkuI3mmK/ku47lhbbku5blkI3lrZfnqbrpl7Tnp7vliqjogIzmnaXjgIInLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuc3BlZWR5LmdlbmVyYWxMaXN0ID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzHvvJrmmI7mmL7ov53lj43ms5Xlvovms5Xop4TmiJbov53og4zlhazluo/oia/kv5fnmoTpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnMScsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5piO5pi+6L+d5Y+N5pyN5Yqh5Zmo5omA5Zyo5Zyw55qE5rOV5b6L5rOV6KeE5Y+K5pyJ5YWz6KeE5a6a77yM5oiW56qB56C056S+5Lya5YWs5bqP6Imv5L+X5bqV57q/77yM5oyJ54Wn5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95LqS6IGU572R566h55CG6KeE5a6a5bqU5LqI5Yig6Zmk55qE6aG16Z2i44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzLvvJrmsqHmnInlrp7pmYXlhoXlrrnnmoTpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnMicsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5LuF5YyF5ous5peg5oSP5LmJ5a2X56ym5Liy6ICM5rKh5pyJ5a6e6ZmF5YaF5a6555qE6aG16Z2i44CC55Sx55So5oi35pys5Lq65Yib5bu655qE55So5oi36aG144CB55So5oi36K6o6K666aG177yM5Y+K5LiT5Li65rWL6K+V5o+Q5L6b55qE5rKZ55uS77yM5LiN6YCC55So5q2k5YeG5YiZ44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzPvvJrnuq/nsrnnoLTlnY8nLFxuXHRcdFx0dmFsdWU6ICdnMycsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5YyF5ous5L2G5LiN6ZmQ5LqO5piO5pi+55qE5oG25L2c5Ymn44CB6ZSZ6K+v5L+h5oGv44CB5Lq66Lqr5pS75Ye7562J77yM5Lul5Y+K5riF55CG56e75Yqo56C05Z2P5pe255WZ5LiL55qE6YeN5a6a5ZCR44CC6Iul5pS25Yiw5oiW5Y+R546w5Lil6YeN55qE5Lq66Lqr5pS75Ye75LiO6K+L5q+B77yM566h55CG5ZGY5Y+K5YW25LuW55So5oi35bqU6YCa55+l55uR552j5ZGY6L+b6KGM55uR552j6ZqQ6JeP44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzTvvJrph43mlrDliJvlu7rlt7LooqvliKDpmaTnmoTpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnNCcsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn6Iul546w5pyJ6aG16Z2i5LiO5pu+5Zyo5Yig6Zmk6K6o6K6677yI5ZCr6aG16Z2i5a2Y5bqf6K6o6K6644CB5paH5Lu25a2Y5bqf6K6o6K665ZKM5L615p2D5a6h5qC477yM5LiN5ZCr5b+r6YCf5Yig6Zmk77yJ5Lit6KKr5Yig6Zmk5YaF5a6555u45ZCM5oiW6Z2e5bi455u45Ly877yM5LiU546w5pyJ5YaF5a655LuN54S26YCC55So5Yig6Zmk6K6o6K665Lit55qE57uT6K6677yM5peg6K665qCH6aKY5piv5ZCm55u45ZCM77yM6YO96YCC55So5pys5qCH5YeG44CC6Iul546w5pyJ6aG16Z2i5qCH6aKY5LiO5bey5Yig54mI5pys5LiN5LiA6Ie077yM5YiZ5o+Q6K+36YCf5Yig6ICF5bqU5LiA5bm25rOo5piO5bey5Yig54mI5pys55qE6aG16Z2i5ZCN77yb6Iul6K+l6aG16Z2i5LmL5YmN6KKr5b+r6YCf5Yig6Zmk77yM6K+35Lul55u45ZCM55CG55Sx6YeN5paw5o+Q6K+36YCf5Yig44CC6Iul546w5pyJ5YaF5a655LiN6YCC55So5Yig6Zmk6K6o6K665Lit55qE57uT6K6677yM5bqU6YeN5paw5o+Q5Ye65Yig6Zmk6K6o6K6644CCJyxcblx0XHRcdHN1Ymdyb3VwOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZzRfcGFnZW5hbWUnLFxuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bGFiZWw6ICflt7LliKDniYjmraTpobXpnaLlkI3vvJonLFxuXHRcdFx0XHRcdHNpemU6IDYwLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHRcdGhpZGVTdWJncm91cFdoZW5NdWx0aXBsZTogdHJ1ZSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzXvvJrlm6DmioDmnK/ljp/lm6DliKDpmaTpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnNScsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5YyF5ous5Lul5LiL5oOF5b2i77ya5Zug56e75Yqo6K+35rGC6ICM5Yig6Zmk6aG16Z2i77yb5Lul6KaG55uW5Yig6Zmk6YeN5a6a5ZCR77yb5Yig6Zmk5peg55So55qETWVkaWFXaWtp6aG16Z2i77yM5Y+K5YW25LuW5oqA5pyv5Zui6Zif5oiW55WM6Z2i566h55CG5ZGY6K6k5Li65pyJ5b+F6KaB5omn6KGM55qE5b+r6YCf5Yig6Zmk5oOF5b2i44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzbvvJrljp/kvZzogIXmj5Dor7fliKDpmaTmiJbmuIXnqbrpobXpnaLvvIzkuJTpobXpnaLljp/kvZzogIXku4XmnInkuIDkuronLFxuXHRcdFx0dmFsdWU6ICdnNicsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn6aG16Z2i5Y6f5L2c6ICF5oyB5ZCI55CG55CG55Sx5o+Q5Ye655qE5b+r6YCf5Yig6Zmk77yb5oiW6aG16Z2i5Y6f5L2c6ICF77yI5a6e6ZmF6LSh54yu6ICF77yJ5riF56m66aG16Z2i77yM5YW25LuW55So5oi35o+Q5Lqk55qE5b+r6YCf5Yig6Zmk44CC6aG16Z2i5Y6f5L2c6ICF77yI5a6e6ZmF6LSh54yu6ICF77yJ5LuF5LiA5Lq65pe25ruh6Laz5pys5YeG5YiZ44CC6Iul6aG16Z2i5a6e6ZmF6LSh54yu6ICF5aSa5LqO5LiA5Lq677yM6K+35oyB5ZCI55CG55CG55Sx5o+Q5Lqk5Yig6Zmk6K6o6K6644CC5ZCO5LiA5oOF5b2i5LiN5YyF5ous55So5oi36aG144CB55So5oi36K6o6K666aG177yM5LiU5bqU5Zyo6aG16Z2i5pyA5ZCO5LiA5qyh57yW6L6RNuWwj+aXtuWQjuaPkOWHuuOAguiiq+WvvOWFpeeahOmhtemdou+8jOWvvOWFpeiAheinhuS4uuWOn+S9nOiAheOAgicsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAnZzZfcmF0aW9uYWxlJyxcblx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0bGFiZWw6ICfliKDpmaTljp/lm6DvvJonLFxuXHRcdFx0XHRzaXplOiA2MCxcblx0XHRcdH0sXG5cdFx0XHRoaWRlU3ViZ3JvdXBXaGVuU3lzb3A6IHRydWUsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ0c377ya5piO5pi+55qE5bm/5ZGK5a6j5LygJyxcblx0XHRcdHZhbHVlOiAnZzcnLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+W6lOeUqOS6juaYjuaYvueahOW5v+WRiuWuo+S8oO+8jOaIluWPquacieebuOWFs+S6uueJqeOAgee7hOe7h+etieS6i+eJqeiBlOezu+aWueazle+8iOWMheaLrOS9huS4jemZkOS6jueUteivneOAgeWcsOWdgOOAgeeUteWtkOmCrueuseOAgeWNs+aXtumAmuiur+i9r+S7tuiBlOezu+aWueW8j++8iOWmglFR5Y+344CB5b6u5L+h5Y+377yJ44CB56S+5Lqk5aqS5L2T6ZO+5o6l77yJ44CC6Iul5a6j5Lyg6K+t5rCU5LiN5piO5pi+77yM5bu66K6u6L2s5Lqk5Yig6Zmk6K6o6K6644CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzjvvJrmnKrliJfmmI7lj6/pnaDmnaXmupDkuJTor63osIPotJ/pnaLnmoTnlJ/ogIXkvKDorrAnLFxuXHRcdFx0dmFsdWU6ICdnOCcsXG5cdFx0XHR0b29sdGlwOiAn5pys5oOF5Ya15LiL5pyJ55qE6aG16Z2i5Lil6YeN5L6154qv5LuW5Lq65ZCN6KqJ5p2D77yM5pyJ5pe25Y+v6IO95L6154qv6ZqQ56eB5p2D77yM5Y+v6IO96ZyA6KaB5o+Q6K+355uR552j44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRznvvJrlraTnq4vpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnOScsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5YyF5ous5Lul5LiL5Yeg56eN57G75Z6L77yaMS7msqHmnInlr7nlupTmlofku7bnmoTmlofku7bpobXpnaLvvJsyLuayoeacieWvueW6lOavjemhtemdoueahOWtkOmhtemdou+8iOeUqOaIt+mhteWtkOmhtemdoumZpOWklu+8ie+8mzMu5oyH5ZCR5LiN5a2Y5Zyo6aG16Z2i55qE6YeN5a6a5ZCR77ybNC7msqHmnInlr7nlupTlhoXlrrnpobXpnaLnmoTorqjorrrpobXvvIjorqjorrrpobXlrZjmoaPjgIHnlKjmiLforqjorrrpobXvvIzku6Xlj4rlnKjkuLvpobXpnaLmjILmnIl7e0NTRCBQbGFjZWhvbGRlcn195qih5p2/55qE6K6o6K666aG16Zmk5aSW77yJ77ybNS7kuI3lrZjlnKjms6jlhoznlKjmiLfnmoTnlKjmiLfpobXlj4rnlKjmiLfpobXlrZDpobXpnaLvvIjpmo/nlKjmiLfmm7TlkI3kuqfnlJ/nmoTnlKjmiLfpobXph43lrprlkJHpmaTlpJbvvInjgILor7flnKjliKDpmaTml7bms6jmhI/mnInml6DlsIblhoXlrrnnp7voh7Pku5blpITnmoTlv4XopoHjgIInLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuc3BlZWR5LnJlZGlyZWN0TGlzdCA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogJ1Ix77ya5LiN6IO95Y+R5oyl5a6e6ZmF5L2c55So55qE6YeN5a6a5ZCR44CCJyxcblx0XHRcdHZhbHVlOiAncjEnLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+WMheaLrOS7peS4i+aDheWGte+8mjEu5oyH5ZCR5pys6Lqr5oiW5b6q546v55qE6YeN5a6a5ZCR77yM5aaCQeKGkkLihpJD4oaS4oCm4oCm4oaSQeaIlkHihpJB77yI57mB566A6YeN5a6a5ZCR5LiN6YCC55So5q2k6aG577yJ77ybMi7moLzlvI/plJnor6/nmoTph43lrprlkJHvvIzljIXmi6zmoIfpopjku4XkuLrnuYHkvZPjgIHnuYHnroDmt7fnlKjjgIHmtojmrafkuYnkvb/nlKjnmoTmi6zlvKfmiJbnqbrmoLzplJnor6/jgIHpl7TpmpTlj7fkvb/nlKjplJnor6/vvIjlm6DnsbvmjqjnroDljJblrZfmnKrmlLblvZXoh7PjgIrpgJrnlKjop4TojIPmsYnlrZfooajjgIvlr7zoh7TnmoTnuYHnroDmt7fmnYLmg4XlvaLvvIzmiJbns7vnu5/ml6Dms5Xoh6rliqjov5vooYznuYHnroDlpITnkIbnmoTmg4XlvaLvvIzliJnkuI3pgILnlKjvvInjgILoi6Xph43lrprlkJHpobXpnaLmoIfpopjvvIzkuI7lkIjkuY7lkb3lkI3luLjop4TnmoTnm67moIfpobXpnaLmoIfpopjkuYvpl7TvvIzku4XlrZjlnKjnuYHnroDlrZfkvZPnmoTljLrliKvvvIzogIzkuI3lrZjlnKjor43or63nlKjms5XljLrliKvvvIzliJnkuI3kv53nlZnor6Xph43lrprlkJHjgILlm6Dns7vnu5/ml6Dms5Xoh6rliqjnuYHnroDovazmjaLogIzlv4Xpobvkv53nlZnnmoTph43lrprlkJHpobXpnaLpmaTlpJbjgILlr7nkuo7lhbbku5bmnKrliJflh7rnmoTmg4XlhrXvvIzoi6XnlKjmiLforqTkuLror6Xph43lrprlkJHml6Dms5Xlj5HmjKXlrp7pmYXkvZznlKjvvIzkuJTkvp3mja7luLjor4bmsqHmnInku7vkvZXkuonorq7vvIzlj6/lh63lkIjnkIbnkIbnlLHmj5Dor7fpgJ/liKDvvIznlLHnrqHnkIblkZjliKTmlq3jgILmjIflkJHkuI3lrZjlnKjpobXpnaLnmoTph43lrprlkJHvvIzpgILnlKhHNeWHhuWImeOAgicsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAncjFfdHlwZScsXG5cdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRsYWJlbDogJ+mAgueUqOexu+Wei++8micsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+ivt+mAieaLqScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+aMh+WQkeacrOi6q+aIluW+queOr+eahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+aMh+WQkeacrOi6q+aIluW+queOr+eahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+agh+mimOe5geeugOa3t+eUqCcsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+agh+mimOe5geeugOa3t+eUqOOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+a2iOatp+S5ieS9v+eUqOeahOaLrOWPt+aIluepuuagvOmUmeivrycsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+a2iOatp+S5ieS9v+eUqOeahOaLrOWPt+aIluepuuagvOmUmeivr+OAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+mXtOmalOWPt+S9v+eUqOmUmeivrycsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+mXtOmalOWPt+S9v+eUqOmUmeivr+OAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+WFtuS7lueQhueUse+8iOivt+WLvumAieS4iuaWueKAnOW6lOeUqOWkmuS4queQhueUseKAne+8jOW5tuWhq+WGmeiHquWumuS5ieeQhueUse+8iScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ1Iy77ya5ZCN56ew5LiO5a+85ZCR55uu5qCH5Luj6KGo5LqL54mp5LiN5LiA6Ie05oiW5LiN5a6M5YWo5LiA6Ie055qE6YeN5a6a5ZCR44CCJyxcblx0XHRcdHZhbHVlOiAncjInLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+WMheaLrOS9huS4jemZkOS6juS7peS4i+aDheWGte+8mjEu55Sx5Lu75L2V6Z2e5p2h55uu6aG16Z2i77yI6Zmk55So5oi36aG177yJ5a+85ZCR5p2h55uu6aG155qE6YeN5a6a5ZCR77yM5Lul5Y+K55Sx5p2h55uu6aG15a+85ZCR5Lu75L2V6Z2e5p2h55uu6aG16Z2i55qE6YeN5a6a5ZCR44CCMi7mmI7mmL7nrJTor6/nmoTph43lrprlkJHvvIzlpoLlh7rnjrDkuI3luLjop4HnmoTplJnliKvlrZfnrYnjgILvvIjliKvnp7Dph43lrprlkJHkuI3pgILnlKjmraTpobnjgILoi6XlkKvplJnliKvlrZfmiJbmnInnrJTor6/nmoTph43lrprlkJHkvb/nlKjpopHnjofpq5jvvIzmraTnsbvph43lrprlkJHmnInliqnkuo7luK7liqnnlKjmiLflr7vmib7liLDmraPnoa7nmoTpobXpnaLvvIzkuI3pgILnlKjmraTmoIflh4bjgILmnInkuonorq7nmoTmraTnsbvph43lrprlkJHlrpzmj5DkuqTliKDpmaTorqjorrrjgILvvIkzLuaYjuaYvuS4juWvvOWQkeebruagh+aJgOa2teeblueahOS4u+mimOaXoOWFs++8jOaIluavlOWvvOWQkeebruagh+aJgOa2teeblueahOS4u+mimOabtOW5v+azm+eahOmHjeWumuWQkeOAgu+8iOiLpeS4jeaYjuaYvu+8jOWPr+aUueS4uuaPkOS6pOWIoOmZpOiuqOiuuuOAgu+8iScsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAncjJfdHlwZScsXG5cdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRsYWJlbDogJ+mAgueUqOexu+Wei++8micsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+ivt+mAieaLqScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+eUsemdnuadoeebrumhtemdou+8iOmZpOeUqOaIt+mhte+8ieWvvOWQkeadoeebrumhteeahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+eUsemdnuadoeebrumhtemdou+8iOmZpOeUqOaIt+mhte+8ieWvvOWQkeadoeebrumhteeahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+eUseadoeebrumhteWvvOWQkemdnuadoeebrumhtemdoueahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+eUseadoeebrumhteWvvOWQkeS7u+S9lemdnuadoeebrumhtemdoueahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+aYjuaYvueslOivr+eahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+aYjuaYvueslOivr+eahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+S4juWvvOWQkeebruagh+aXoOWFs+aIluavlOWFtuiMg+WbtOabtOW5v+azm+eahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+S4juWvvOWQkeebruagh+aXoOWFs+aIluavlOWFtuiMg+WbtOabtOW5v+azm+eahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+WFtuS7lueQhueUse+8iOivt+WLvumAieS4iuaWueKAnOW6lOeUqOWkmuS4queQhueUseKAne+8jOW5tuWhq+WGmeiHquWumuS5ieeQhueUse+8iScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0sXG5cdFx0fSxcblx0XTtcblx0VHdpbmtsZS5zcGVlZHkubm9ybWFsaXplSGFzaCA9IHtcblx0XHRyZWFzb246ICdkYicsXG5cdFx0bXVsdGlwbGU6ICdtdWx0aXBsZScsXG5cdFx0J211bHRpcGxlLWZpbmlzaCc6ICdtdWx0aXBsZS1maW5pc2gnLFxuXHRcdGcxOiAnZzEnLFxuXHRcdGcyOiAnZzInLFxuXHRcdGczOiAnZzMnLFxuXHRcdGc0OiAnZzQnLFxuXHRcdGc1OiAnZzUnLFxuXHRcdGc2OiAnZzYnLFxuXHRcdGc3OiAnZzcnLFxuXHRcdGc4OiAnZzgnLFxuXHRcdGc5OiAnZzknLFxuXHRcdGExOiAnYTEnLFxuXHRcdGEyOiAnYTInLFxuXHRcdGEzOiAnYTMnLFxuXHRcdHIxOiAncjEnLFxuXHRcdHIyOiAncjInLFxuXHRcdGYxOiAnZjEnLFxuXHRcdGYyOiAnZjInLFxuXHRcdGYzOiAnZjMnLFxuXHRcdGY0OiAnZjQnLFxuXHRcdGY1OiAnZjUnLFxuXHRcdG8xOiAnbzEnLFxuXHRcdG8yOiAnbzInLFxuXHRcdG8zOiAnbzMnLFxuXHR9O1xuXHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3MgPSB7XG5cdFx0Z2V0VGVtcGxhdGVDb2RlQW5kUGFyYW1zOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRsZXQgY29kZTtcblx0XHRcdGxldCBwYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IGk7XG5cdFx0XHRpZiAocGFyYW1zLm5vcm1hbGl6ZWRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Y29kZSA9ICd7e2RlbGV0ZSc7XG5cdFx0XHRcdHBhcmFtcy51dHBhcmFtcyA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgbm9ybV0gb2YgcGFyYW1zLm5vcm1hbGl6ZWRzLmVudHJpZXMoKSkge1xuXHRcdFx0XHRcdGlmIChub3JtICE9PSAnZGInKSB7XG5cdFx0XHRcdFx0XHRjb2RlICs9IGB8JHtub3JtLnRvVXBwZXJDYXNlKCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cGFyYW1ldGVycyA9IHBhcmFtcy50ZW1wbGF0ZVBhcmFtc1tpbmRleF0gfHwgW107XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpXyBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHBhcmFtZXRlcnNbaV9dID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRjb2RlICs9IGB8JHtwYXJhbWV0ZXJzW2lfXX1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwYXJhbXMudXRwYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHQuLi5wYXJhbXMudXRwYXJhbXMsXG5cdFx0XHRcdFx0XHQuLi5Ud2lua2xlLnNwZWVkeS5nZXRVc2VyVGFsa1BhcmFtZXRlcnMobm9ybSwgcGFyYW1ldGVycyksXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb2RlICs9ICd9fSc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJhbWV0ZXJzID0gcGFyYW1zLnRlbXBsYXRlUGFyYW1zWzBdIHx8IFtdO1xuXHRcdFx0XHRjb2RlID0gJ3t7ZGVsZXRlJztcblx0XHRcdFx0aWYgKHBhcmFtcy52YWx1ZXNbMF0gIT09ICdyZWFzb24nKSB7XG5cdFx0XHRcdFx0Y29kZSArPSBgfCR7cGFyYW1zLnZhbHVlc1swXX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoaSBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ldID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0Y29kZSArPSBgfCR7cGFyYW1ldGVyc1tpXX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb2RlICs9ICd9fSc7XG5cdFx0XHRcdHBhcmFtcy51dHBhcmFtcyA9IFR3aW5rbGUuc3BlZWR5LmdldFVzZXJUYWxrUGFyYW1ldGVycyhwYXJhbXMubm9ybWFsaXplZHNbMF0sIHBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtjb2RlLCBwYXJhbXMudXRwYXJhbXNdO1xuXHRcdH0sXG5cdFx0cGFyc2VXaWtpdGV4dDogKHRpdGxlLCB3aWtpdGV4dCwgY2FsbGJhY2spID0+IHtcblx0XHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdwYXJzZScsXG5cdFx0XHRcdHByb3A6ICd0ZXh0Jyxcblx0XHRcdFx0cHN0OiAndHJ1ZScsXG5cdFx0XHRcdHRleHQ6IHdpa2l0ZXh0LFxuXHRcdFx0XHRjb250ZW50bW9kZWw6ICd3aWtpdGV4dCcsXG5cdFx0XHRcdHRpdGxlLFxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHN0YXR1c0luZGljYXRvciA9IG5ldyBNb3JlYml0cy5zdGF0dXMod2luZG93LndnVUxTKCfmnoTpgKDliKDpmaTnkIbnlLEnLCAn5qeL6YCg5Yiq6Zmk55CG55SxJykpO1xuXHRcdFx0Y29uc3QgYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ino+aekOWIoOmZpOaooeadvycsICfop6PmnpDliKrpmaTmqKHmnb8nKSxcblx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdChhcGlPYmopID0+IHtcblx0XHRcdFx0XHRjb25zdCByZWFzb24gPSBkZWNvZGVVUklDb21wb25lbnQoXG5cdFx0XHRcdFx0XHQkKGFwaU9iai5nZXRYTUwoKS5xdWVyeVNlbGVjdG9yKCd0ZXh0JykuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUpXG5cdFx0XHRcdFx0XHRcdC5maW5kKCcjZGVsZXRlLXJlYXNvbicpXG5cdFx0XHRcdFx0XHRcdC50ZXh0KClcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xcKy9nLCAnICcpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAocmVhc29uKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXNJbmRpY2F0b3IuaW5mbygn5a6M5oiQJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN0YXR1c0luZGljYXRvci53YXJuKHdpbmRvdy53Z1VMUygn5pyq6IO95LuO5Yig6Zmk5qih5p2/55Sf5oiQ5Yig6Zmk55CG55SxJywgJ+acquiDveW+nuWIqumZpOaooeadv+eUn+aIkOWIqumZpOeQhueUsScpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FsbGJhY2socmVhc29uKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0c3RhdHVzSW5kaWNhdG9yXG5cdFx0XHQpO1xuXHRcdFx0YXBpLnBvc3QoKTtcblx0XHR9LFxuXHRcdHN5c29wOiB7XG5cdFx0XHRtYWluOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRcdGxldCByZWFzb247XG5cdFx0XHRcdGlmICghcGFyYW1zLm5vcm1hbGl6ZWRzLmxlbmd0aCAmJiBwYXJhbXMubm9ybWFsaXplZHNbMF0gPT09ICdkYicpIHtcblx0XHRcdFx0XHRyZWFzb24gPSBwcm9tcHQod2luZG93LndnVUxTKCfovpPlhaXliKDpmaTnkIbnlLHvvJonLCAn6Ly45YWl5Yiq6Zmk55CG55Sx77yaJyksICcnKTtcblx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3Muc3lzb3AuZGVsZXRlUGFnZShyZWFzb24sIHBhcmFtcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgW2NvZGVdID0gVHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLmdldFRlbXBsYXRlQ29kZUFuZFBhcmFtcyhwYXJhbXMpO1xuXHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrcy5wYXJzZVdpa2l0ZXh0KG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwgY29kZSwgKGRlbGV0ZVJlYXNvbikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5wcm9tcHRGb3JTdW1tYXJ5KSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZVJlYXNvbiA9IHByb21wdChcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn6L6T5YWl5Yig6Zmk55CG55Sx77yM5oiW5Y2V5Ye756Gu5a6a5Lul5o6l5Y+X6Ieq5Yqo55Sf5oiQ55qE77yaJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfovLjlhaXliKrpmaTnkIbnlLHvvIzmiJbpu57mk4rnorrlrprku6XmjqXlj5foh6rli5XnlJ/miJDnmoTvvJonXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRkZWxldGVSZWFzb25cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrcy5zeXNvcC5kZWxldGVQYWdlKGRlbGV0ZVJlYXNvbiwgcGFyYW1zKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGV0ZVBhZ2U6IChyZWFzb24sIHBhcmFtcykgPT4ge1xuXHRcdFx0XHRjb25zdCB0aGlzcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yig6Zmk6aG16Z2iJywgJ+WIqumZpOmggemdoicpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChyZWFzb24gPT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gTW9yZWJpdHMuc3RhdHVzLmVycm9yKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfor6Lpl67nkIbnlLEnLCAn6Kmi5ZWP55CG55SxJyksXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nOOAgicsICfkvb/nlKjogIXlj5bmtojmk43kvZzjgIInKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXJlYXNvbiB8fCAhcmVhc29uLnRyaW0oKSkge1xuXHRcdFx0XHRcdHJldHVybiBNb3JlYml0cy5zdGF0dXMuZXJyb3IoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivoumXrueQhueUsScsICfoqaLllY/nkIbnlLEnKSxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L2g5LiN57uZ5oiR55CG55Sx4oCm5oiR5bCx4oCm5LiN566h5LqG4oCmJywgJ+S9oOS4jee1puaIkeeQhueUseKApuaIkeWwseKApuS4jeeuoeS6huKApicpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBkZWxldGVNYWluID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXNwYWdlLnNldEVkaXRTdW1tYXJ5KHJlYXNvbik7XG5cdFx0XHRcdFx0dGhpc3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdHRoaXNwYWdlLnNldFdhdGNobGlzdChwYXJhbXMud2F0Y2gpO1xuXHRcdFx0XHRcdHRoaXNwYWdlLmRlbGV0ZVBhZ2UoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpc3BhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnN5c29wLmRlbGV0ZVRhbGsocGFyYW1zKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblx0XHRcdFx0Ly8gbG9vayB1cCBpbml0aWFsIGNvbnRyaWJ1dG9yLiBJZiBwcm9tcHRpbmcgdXNlciBmb3IgZGVsZXRpb24gcmVhc29uLCBqdXN0IGRpc3BsYXkgYSBsaW5rLlxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugb3BlbiB0aGUgdGFsayBwYWdlIGRpcmVjdGx5XG5cdFx0XHRcdGlmIChwYXJhbXMub3BlblVzZXJUYWxrKSB7XG5cdFx0XHRcdFx0dGhpc3BhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHBhcmFtcyk7XG5cdFx0XHRcdFx0dGhpc3BhZ2UubG9va3VwQ3JlYXRpb24oKCkgPT4ge1xuXHRcdFx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnN5c29wLm9wZW5Vc2VyVGFsa1BhZ2UodGhpc3BhZ2UpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlTWFpbigpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlbGV0ZU1haW4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGV0ZVRhbGs6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0Ly8gZGVsZXRlIHRhbGsgcGFnZVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cGFyYW1zLmRlbGV0ZVRhbGtQYWdlICYmXG5cdFx0XHRcdFx0cGFyYW1zLm5vcm1hbGl6ZWQgIT09ICdvMScgJiZcblx0XHRcdFx0XHQhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NhLXRhbGsnKS5jbGFzc0xpc3QuY29udGFpbnMoJ25ldycpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IHRhbGtwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdGAke1xuXHRcdFx0XHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVttdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpICsgMV1cblx0XHRcdFx0XHRcdH06JHttdy5jb25maWcuZ2V0KCd3Z1RpdGxlJyl9YCxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yig6Zmk6K6o6K666aG1JywgJ+WIqumZpOiojuirlumggScpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR0YWxrcGFnZS5zZXRFZGl0U3VtbWFyeShcblx0XHRcdFx0XHRcdGBbW0xJQjpDU0QjRzl8RzldXTog5a2k56uL6aG16Z2i77ya5bey5Yig6Zmk6aG16Z2i4oCcJHtNb3JlYml0cy5wYWdlTmFtZU5vcm194oCd55qE6K6o6K666aG1YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dGFsa3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdHRhbGtwYWdlLmRlbGV0ZVBhZ2UoKTtcblx0XHRcdFx0XHQvLyB0aGlzIGlzIHVnbHksIGJ1dCBiZWNhdXNlIG9mIHRoZSBhcmNoaXRlY3R1cmUgb2Ygd2lraS5hcGksIGl0IGlzIG5lZWRlZFxuXHRcdFx0XHRcdC8vIChvdGhlcndpc2Ugc3VjY2Vzcy9mYWlsdXJlIG1lc3NhZ2VzIGZvciB0aGUgcHJldmlvdXMgYWN0aW9uIHdvdWxkIGJlIHN1cHByZXNzZWQpXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3Muc3lzb3AuZGVsZXRlUmVkaXJlY3RzKHBhcmFtcyk7XG5cdFx0XHRcdFx0fSwgMTgwMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnN5c29wLmRlbGV0ZVJlZGlyZWN0cyhwYXJhbXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZXRlUmVkaXJlY3RzOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRcdC8vIGRlbGV0ZSByZWRpcmVjdHNcblx0XHRcdFx0aWYgKHBhcmFtcy5kZWxldGVSZWRpcmVjdHMpIHtcblx0XHRcdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHRpdGxlczogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdFx0cHJvcDogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0XHRyZGxpbWl0OiA1MDAwLCAvLyA1MDAgaXMgbWF4IGZvciBub3JtYWwgdXNlcnMsIDUwMDAgZm9yIGJvdHMgYW5kIHN5c29wc1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W6YeN5a6a5ZCR5YiX6KGo4oCmJywgJ+WPluW+l+mHjeaWsOWwjuWQkeWIl+ihqOKApicpLFxuXHRcdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3Muc3lzb3AuZGVsZXRlUmVkaXJlY3RzTWFpbixcblx0XHRcdFx0XHRcdG5ldyBNb3JlYml0cy5zdGF0dXMod2luZG93LndnVUxTKCfliKDpmaTph43lrprlkJEnLCAn5Yiq6Zmk6YeN5paw5bCO5ZCRJykpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHByb21wdCBmb3IgcHJvdGVjdCBvbiBHN1xuXHRcdFx0XHRsZXQgJGxpbms7XG5cdFx0XHRcdGxldCAkYmlndGV4dDtcblx0XHRcdFx0aWYgKHBhcmFtcy5ub3JtYWxpemVkID09PSAnZzcnKSB7XG5cdFx0XHRcdFx0JGxpbmsgPSAkKCc8YT4nKVxuXHRcdFx0XHRcdFx0LmF0dHIoJ2hyZWYnLCAnIycpXG5cdFx0XHRcdFx0XHQudGV4dCh3aW5kb3cud2dVTFMoJ+WNleWHu+i/memHjOaWveihjOS/neaKpCcsICfpu57mk4rpgJnoo6Hmlr3ooYzkv53orbcnKSlcblx0XHRcdFx0XHRcdC5jc3Moe1xuXHRcdFx0XHRcdFx0XHQnZm9udC1zaXplJzogJzEyNSUnLFxuXHRcdFx0XHRcdFx0XHQnZm9udC13ZWlnaHQnOiAnYm9sZCcsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0Lm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5kaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLnNldCgnd2dBcnRpY2xlSWQnLCAwKTtcblx0XHRcdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQkYmlndGV4dCA9ICQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMjUlJyxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn55m957q45L+d5oqk6K+l6aG1JywgJ+eZvee0meS/neitt+ipsumggScpKTtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygkYmlndGV4dFswXSwgJGxpbmtbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHByb21vdGUgVW5saW5rIHRvb2xcblx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYpIHtcblx0XHRcdFx0XHQkbGluayA9ICQoJzxhPicpXG5cdFx0XHRcdFx0XHQuYXR0cignaHJlZicsICcjJylcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn5Y2V5Ye76L+Z6YeM5YmN5b6A5Y+W5raI6ZO+5YWl5bel5YW3JywgJ+m7nuaTiumAmeijoeWJjeW+gOWPlua2iOmAo+WFpeW3peWFtycpKVxuXHRcdFx0XHRcdFx0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdCdmb250LXdlaWdodCc6ICdib2xkJyxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnVubGluay5jYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+WPlua2iOWvueW3suWIoOmZpOaWh+S7tiAnLCAn5Y+W5raI5bCN5bey5Yiq6Zmk5qqU5qGIICcpICsgTW9yZWJpdHMucGFnZU5hbWVOb3JtfSDnmoTkvb/nlKhgXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQkYmlndGV4dCA9ICQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn5Y+W5raI5a+55bey5Yig6Zmk5paH5Lu255qE5L2/55SoJywgJ+WPlua2iOWwjeW3suWIqumZpOaqlOahiOeahOS9v+eUqCcpKTtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygkYmlndGV4dFswXSwgJGxpbmtbMF0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCRsaW5rID0gJCgnPGE+Jylcblx0XHRcdFx0XHRcdC5hdHRyKCdocmVmJywgJyMnKVxuXHRcdFx0XHRcdFx0LnRleHQod2luZG93LndnVUxTKCfljZXlh7vov5nph4zliY3lvoDlj5bmtojpk77lhaXlt6XlhbcnLCAn6bue5pOK6YCZ6KOh5YmN5b6A5Y+W5raI6YCj5YWl5bel5YW3JykpXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUudW5saW5rLmNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Y+W5raI5a+55bey5Yig6Zmk6aG16Z2iICcsICflj5bmtojlsI3lt7LliKrpmaTpoIHpnaIgJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMucGFnZU5hbWVOb3JtICtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOeahOmTvuaOpScsICcg55qE6YCj57WQJylcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdCRiaWd0ZXh0ID0gJCgnPHNwYW4+JykudGV4dCh3aW5kb3cud2dVTFMoJ+WPlua2iOWvueW3suWIoOmZpOmhtemdoueahOmTvuaOpScsICflj5bmtojlsI3lt7LliKrpmaTpoIHpnaLnmoTpgKPntZAnKSkuY3NzKHtcblx0XHRcdFx0XHRcdCdmb250LXdlaWdodCc6ICdib2xkJyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygkYmlndGV4dFswXSwgJGxpbmtbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRsaW5rID0gJCgnPGE+Jylcblx0XHRcdFx0XHQuYXR0cignaHJlZicsIG13LnV0aWwuZ2V0VXJsKCdTcGVjaWFsOlJhbmRvbUluQ2F0ZWdvcnkv5b+r6YCf5Yig6Zmk5YCZ6YCJJykpXG5cdFx0XHRcdFx0LnRleHQod2luZG93LndnVUxTKCfljZXlh7vliY3lvoDkuIvkuIDkuKrlv6vpgJ/liKDpmaTlgJnpgIknLCAn6bue5pOK5YmN5b6A5LiL5LiA5YCL5b+r6YCf5Yiq6Zmk5YCZ6YG4JykpO1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygn5bel5YW3JywgJGxpbmtbMF0pO1xuXHRcdFx0fSxcblx0XHRcdG9wZW5Vc2VyVGFsa1BhZ2U6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRcdHBhZ2VvYmouZ2V0U3RhdHVzRWxlbWVudCgpLnVubGluaygpOyAvLyBkb24ndCBuZWVkIGl0IGFueW1vcmVcblx0XHRcdFx0Y29uc3QgdXNlciA9IHBhZ2VvYmouZ2V0Q3JlYXRvcigpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0XHRhY3Rpb246ICdlZGl0Jyxcblx0XHRcdFx0XHRwcmV2aWV3OiAneWVzJyxcblx0XHRcdFx0XHR2YW5hcnRpY2xlOiBNb3JlYml0cy5wYWdlTmFtZU5vcm0sXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IHRpdGxlID0gYFVzZXIgdGFsazoke3VzZXJ9YDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHBhcmFtcy5ub3JtYWxpemVkID09PSAnZGInIHx8XG5cdFx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdwcm9tcHRGb3JTcGVlZHlEZWxldGlvblN1bW1hcnknKS5pbmNsdWRlcyhwYXJhbXMubm9ybWFsaXplZClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gcHJvdmlkZSBhIGxpbmsgdG8gdGhlIHVzZXIgdGFsayBwYWdlXG5cdFx0XHRcdFx0Y29uc3QgJGxpbmsgPSAkKCc8YT4nKVxuXHRcdFx0XHRcdFx0LmF0dHIoe1xuXHRcdFx0XHRcdFx0XHRocmVmOiBtdy51dGlsLmdldFVybCh0aXRsZSwgcXVlcnkpLFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6ICdfYmxhbmsnLFxuXHRcdFx0XHRcdFx0XHRyZWw6ICdub29wZW5lciBub3JlZmVycmVyJyxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMjUlJyxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn54K55q2k5omT5byAVXNlciB0YWxrOicsICfpu57mraTmiZPplotVc2VyIHRhbGs6JykgKyB1c2VyKTtcblx0XHRcdFx0XHRjb25zdCAkYmlndGV4dCA9ICQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMjUlJyxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn6YCa55+l6aG16Z2i5Yib5bu66ICFJywgJ+mAmuefpemggemdouW7uueri+iAhScpKTtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygkYmlndGV4dFswXSwgJGxpbmtbMF0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIG9wZW4gdGhlIGluaXRpYWwgY29udHJpYnV0b3IncyB0YWxrIHBhZ2Vcblx0XHRcdFx0XHRjb25zdCBzdGF0dXNJbmRpY2F0b3IgPSBuZXcgTW9yZWJpdHMuc3RhdHVzKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmiZPlvIDnlKjmiLcnLCAn5omT6ZaL5L2/55So6ICFJykgK1xuXHRcdFx0XHRcdFx0XHR1c2VyICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfnmoTorqjorrrpobXnvJbovpHnqpflj6MnLCAn55qE6KiO6KuW6aCB57eo6Lyv6KaW56qXJyksXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aJk+W8gOS4reKApicsICfmiZPplovkuK3igKYnKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0c3dpdGNoIChUd2lua2xlLmdldFByZWYoJ3VzZXJUYWxrUGFnZU1vZGUnKSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAndGFiJzpcblx0XHRcdFx0XHRcdFx0d2luZG93Lm9wZW4obXcudXRpbC5nZXRVcmwodGl0bGUsIHF1ZXJ5KSwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYmxhbmsnOlxuXHRcdFx0XHRcdFx0XHR3aW5kb3cub3Blbihcblx0XHRcdFx0XHRcdFx0XHRtdy51dGlsLmdldFVybCh0aXRsZSwgcXVlcnkpLFxuXHRcdFx0XHRcdFx0XHRcdCdfYmxhbmsnLFxuXHRcdFx0XHRcdFx0XHRcdCdub29wZW5lcixub3JlZmVycmVyLGxvY2F0aW9uPW5vLHRvb2xiYXI9bm8sc3RhdHVzPW5vLGRpcmVjdG9yaWVzPW5vLHNjcm9sbGJhcnM9eWVzLHdpZHRoPTEyMDAsaGVpZ2h0PTgwMCdcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvKiBjYXNlICd3aW5kb3cnOiAqL1xuXHRcdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0d2luZG93Lm9wZW4oXG5cdFx0XHRcdFx0XHRcdFx0bXcudXRpbC5nZXRVcmwodGl0bGUsIHF1ZXJ5KSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubmFtZSA9PT0gJ3R3aW5rbGV3YXJud2luZG93JyA/ICdfYmxhbmsnIDogJ3R3aW5rbGV3YXJud2luZG93Jyxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubmFtZSA9PT0gJ3R3aW5rbGV3YXJud2luZG93J1xuXHRcdFx0XHRcdFx0XHRcdFx0PyAnbm9vcGVuZXIsbm9yZWZlcnJlciwnXG5cdFx0XHRcdFx0XHRcdFx0XHQ6ICcnICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbG9jYXRpb249bm8sdG9vbGJhcj1ubyxzdGF0dXM9bm8sZGlyZWN0b3JpZXM9bm8sc2Nyb2xsYmFycz15ZXMsd2lkdGg9MTIwMCxoZWlnaHQ9ODAwJ1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhdHVzSW5kaWNhdG9yLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZXRlUmVkaXJlY3RzTWFpbjogKGFwaW9iaikgPT4ge1xuXHRcdFx0XHRjb25zdCB4bWxEb2MgPSBhcGlvYmouZ2V0WE1MKCk7XG5cdFx0XHRcdGNvbnN0ICRzbmFwc2hvdCA9ICQoeG1sRG9jKS5maW5kKCdyZWRpcmVjdHMgcmQnKTtcblx0XHRcdFx0Y29uc3QgdG90YWwgPSAkc25hcHNob3QubGVuZ3RoO1xuXHRcdFx0XHRjb25zdCBzdGF0dXNJbmRpY2F0b3IgPSBhcGlvYmouc3RhdGVsZW07XG5cdFx0XHRcdGlmICghdG90YWwpIHtcblx0XHRcdFx0XHRzdGF0dXNJbmRpY2F0b3IuaW5mbyh3aW5kb3cud2dVTFMoJ+acquWPkeeOsOmHjeWumuWQkScsICfmnKrnmbznj77ph43mlrDlsI7lkJEnKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0YXR1c0luZGljYXRvci5zdGF0dXMoJzAlJyk7XG5cdFx0XHRcdGxldCBjdXJyZW50ID0gMDtcblx0XHRcdFx0Y29uc3Qgb25zdWNjZXNzID0gKGFwaW9iaklubmVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgbm93ID0gYCR7TnVtYmVyLnBhcnNlSW50KCgxMDAgKiArK2N1cnJlbnQpIC8gdG90YWwsIDEwKX0lYDtcblx0XHRcdFx0XHRzdGF0dXNJbmRpY2F0b3IudXBkYXRlKG5vdyk7XG5cdFx0XHRcdFx0YXBpb2JqSW5uZXIuc3RhdGVsZW0udW5saW5rKCk7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnQgPj0gdG90YWwpIHtcblx0XHRcdFx0XHRcdHN0YXR1c0luZGljYXRvci5pbmZvKGAke25vd33vvIjlrozmiJDvvIlgKTtcblx0XHRcdFx0XHRcdE1vcmViaXRzLndpa2kucmVtb3ZlQ2hlY2twb2ludCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0TW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50KCk7XG5cdFx0XHRcdCRzbmFwc2hvdC5lYWNoKChfa2V5LCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gJCh2YWx1ZSkuYXR0cigndGl0bGUnKTtcblx0XHRcdFx0XHRjb25zdCBwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfliKDpmaTph43lrprlkJEgXCInLCAn5Yiq6Zmk6YeN5paw5bCO5ZCRIFwiJykgKyB0aXRsZX1cImBcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHBhZ2Uuc2V0RWRpdFN1bW1hcnkoYFtbTElCOkNTRCNHOXxHOV1dOiDlraTnq4vpobXpnaLvvJrph43lrprlkJHliLDlt7LliKDpmaTpobXpnaLigJwke01vcmViaXRzLnBhZ2VOYW1lTm9ybX3igJ1gKTtcblx0XHRcdFx0XHRwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHRwYWdlLmRlbGV0ZVBhZ2Uob25zdWNjZXNzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0dXNlcjoge1xuXHRcdFx0bWFpbjogKHBhZ2VvYmopID0+IHtcblx0XHRcdFx0Y29uc3Qgc3RhdGVsZW0gPSBwYWdlb2JqLmdldFN0YXR1c0VsZW1lbnQoKTtcblx0XHRcdFx0aWYgKCFwYWdlb2JqLmV4aXN0cygpKSB7XG5cdFx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfpobXpnaLkuI3lrZjlnKjvvIzlj6/og73lt7LooqvliKDpmaQnLCAn6aCB6Z2i5LiN5a2Y5Zyo77yM5Y+v6IO95bey6KKr5Yiq6ZmkJykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdFx0c3RhdGVsZW0uc3RhdHVzKHdpbmRvdy53Z1VMUygn5qOA5p+l6aG16Z2i5bey5pyJ5qCH6K6w4oCmJywgJ+aqouafpemggemdouW3suacieaomeiomOKApicpKTtcblx0XHRcdFx0Ly8gY2hlY2sgZm9yIGV4aXN0aW5nIGRlbGV0aW9uIHRhZ3Ncblx0XHRcdFx0Y29uc3QgdGV4dE5vU2QgPSB0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdFx0L1xce1xce1xccyooZGIoLVxcdyopP3xkfGRlbGV0ZXxkZWxldGViZWNhdXNlfHNwZWVkeXxjc2R86YCf5YiqfOmAn+WIoHzlv6vliKB85b+r5YiqKVxccyooXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyovZ2ksXG5cdFx0XHRcdFx0Jydcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRleHQgIT09IHRleHROb1NkICYmXG5cdFx0XHRcdFx0IWNvbmZpcm0oXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCflnKjpobXpnaLkuIrmib7liLDlv6vpgJ/liKDpmaTmqKHmnb/vvIzopoHnp7vpmaTlubbliqDlhaXmlrDnmoTlkJfvvJ8nLFxuXHRcdFx0XHRcdFx0XHQn5Zyo6aCB6Z2i5LiK5om+5Yiw5b+r6YCf5Yiq6Zmk5qih5p2/77yM6KaB56e76Zmk5Lim5Yqg5YWl5paw55qE5ZeO77yfJ1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCflv6vpgJ/liKDpmaTmqKHmnb/lt7Looqvnva7kuo7pobXpnaLkuK3jgIInLCAn5b+r6YCf5Yiq6Zmk5qih5p2/5bey6KKr572u5pa86aCB6Z2i5Lit44CCJykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0ZXh0ID0gdGV4dE5vU2Q7XG5cdFx0XHRcdGNvbnN0IGNvcHl2aW8gPSAvKD86XFx7XFx7XFxzKihjb3B5dmlvfOS+teadg3zkvrXmrIopW157fV0qP1xcfVxcfSkvaS5leGVjKHRleHQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y29weXZpbyAmJlxuXHRcdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHQn6JGX5L2c5p2D6aqM6K+B5qih5p2/5bey6KKr572u5LqO6aG16Z2i5Lit77yM5oKo5piv5ZCm5LuN5oOz5Yqg5YWl5LiA5Liq5b+r6YCf5Yig6Zmk5qih5p2/77yfJyxcblx0XHRcdFx0XHRcdFx0J+iRl+S9nOasiumpl+itieaooeadv+W3suiiq+e9ruaWvOmggemdouS4re+8jOaCqOaYr+WQpuS7jeaDs+WKoOWFpeS4gOWAi+W/q+mAn+WIqumZpOaooeadv++8nydcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn6aG16Z2i5Lit5bey5pyJ6JGX5L2c5p2D6aqM6K+B5qih5p2/44CCJywgJ+mggemdouS4reW3suacieiRl+S9nOasiumpl+itieaooeadv+OAgicpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgeGZkID0gLyg/Olxce1xceyhbcnNhaWZ0Y212XWZkfG1kMXxwcm9wb3NlZCBkZWxldGlvbilbXnt9XSo/XFx9XFx9KS9pLmV4ZWModGV4dCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR4ZmQgJiZcblx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yig6Zmk55u45YWz5qih5p2/e3snLCAn5Yiq6Zmk55u46Zec5qih5p2/e3snKSArXG5cdFx0XHRcdFx0XHRcdHhmZFsxXSArXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQnfX3lt7Looqvnva7kuo7pobXpnaLkuK3vvIzmgqjmmK/lkKbku43mg7PliqDlhaXkuIDkuKrlv6vpgJ/liKDpmaTmqKHmnb/vvJ8nLFxuXHRcdFx0XHRcdFx0XHRcdCd9feW3suiiq+e9ruaWvOmggemdouS4re+8jOaCqOaYr+WQpuS7jeaDs+WKoOWFpeS4gOWAi+W/q+mAn+WIqumZpOaooeadv++8nydcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfpobXpnaLlt7Looqvmj5DkuqToh7PlrZjlup/orqjorrrjgIInLCAn6aCB6Z2i5bey6KKr5o+Q5Lqk6Iez5a2Y5bui6KiO6KuW44CCJykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBnaXZlbiB0aGUgcGFyYW1zLCBidWlsZHMgdGhlIHRlbXBsYXRlIGFuZCBhbHNvIGFkZHMgdGhlIHVzZXIgdGFsayBwYWdlIHBhcmFtZXRlcnMgdG8gdGhlIHBhcmFtcyB0aGF0IHdlcmUgcGFzc2VkIGluXG5cdFx0XHRcdC8vIHJldHVybnMgPT4gWzxzdHJpbmc+IHdpa2l0ZXh0LCA8b2JqZWN0PiB1dHBhcmFtc11cblx0XHRcdFx0Y29uc3QgYnVpbGREYXRhID0gVHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLmdldFRlbXBsYXRlQ29kZUFuZFBhcmFtcyhwYXJhbXMpO1xuXHRcdFx0XHRsZXQgW2NvZGVdID0gYnVpbGREYXRhO1xuXHRcdFx0XHRbLCBwYXJhbXMudXRwYXJhbXNdID0gYnVpbGREYXRhO1xuXHRcdFx0XHRjb25zdCB0aGlzcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpKTtcblx0XHRcdFx0Ly8gcGF0cm9sIHRoZSBwYWdlLCBpZiByZWFjaGVkIGZyb20gU3BlY2lhbDpOZXdQYWdlc1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdtYXJrU3BlZWR5UGFnZXNBc1BhdHJvbGxlZCcpKSB7XG5cdFx0XHRcdFx0dGhpc3BhZ2UucGF0cm9sKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV3JhcCBTRCB0ZW1wbGF0ZSBpbiBub2luY2x1ZGUgdGFncyBpZiB3ZSBhcmUgaW4gdGVtcGxhdGUgc3BhY2UuXG5cdFx0XHRcdC8vIFdvbid0IHdvcmsgd2l0aCB1c2VyYm94ZXMgaW4gdXNlcnNwYWNlLCBvciBhbnkgb3RoZXIgdHJhbnNjbHVkZWQgcGFnZSBvdXRzaWRlIHRlbXBsYXRlIHNwYWNlXG5cdFx0XHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAxMCkge1xuXHRcdFx0XHRcdC8vIFRlbXBsYXRlOlxuXHRcdFx0XHRcdGNvZGUgPSBgPG5vaW5jbHVkZT4ke2NvZGV9PC9ub2luY2x1ZGU+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBSZW1vdmUgdGFncyB0aGF0IGJlY29tZSBzdXBlcmZsdW91cyB3aXRoIHRoaXMgYWN0aW9uXG5cdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdFx0L1xce1xce1xccyooW05uXWV3IHVucmV2aWV3ZWQgYXJ0aWNsZXxbVXVdbnJldmlld2VkfFtVdV1zZXJzcGFjZSBkcmFmdClcXHMqKFxcfCg/Olxce1xce1tee31dKlxcfVxcfXxbXnt9XSkqKT9cXH1cXH1cXHMqL2csXG5cdFx0XHRcdFx0Jydcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYpIHtcblx0XHRcdFx0XHQvLyByZW1vdmUgXCJtb3ZlIHRvIENvbW1vbnNcIiB0YWcgLSBkZWxldGlvbi10YWdnZWQgZmlsZXMgY2Fubm90IGJlIG1vdmVkIHRvIENvbW1vbnNcblx0XHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0L1xce1xceyhtdGN8KGNvcHkgfG1vdmUgKT90byA/KHNoYXJlfGNvbW1vbnMpfG1vdmUgdG8gKHlzYXJjaGl2ZXMgc2hhcmV8d2lraW1lZGlhIGNvbW1vbnMpfGNvcHkgdG8gKHlzYXJjaGl2ZXMgc2hhcmV8d2lraW1lZGlhIGNvbW1vbnMpKVtefV0qXFx9XFx9L2dpLFxuXHRcdFx0XHRcdFx0Jydcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwYXJhbXMucmVxdWVzdHNhbHQpIHtcblx0XHRcdFx0XHRjb2RlID0gYHt7c2FsdH19XFxuJHtjb2RlfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gR2VuZXJhdGUgZWRpdCBzdW1tYXJ5IGZvciBlZGl0XG5cdFx0XHRcdGxldCBlZGl0c3VtbWFyeTtcblx0XHRcdFx0aWYgKHBhcmFtcy5ub3JtYWxpemVkcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0ZWRpdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+ivt+axguW/q+mAn+WIoOmZpO+8iCcsICfoq4vmsYLlv6vpgJ/liKrpmaTvvIgnKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG5vcm0gb2YgcGFyYW1zLm5vcm1hbGl6ZWRzKSB7XG5cdFx0XHRcdFx0XHRpZiAobm9ybSAhPT0gJ2RiJykge1xuXHRcdFx0XHRcdFx0XHRlZGl0c3VtbWFyeSArPSBgW1tMSUI6Q1NEIyR7bm9ybS50b1VwcGVyQ2FzZSgpfXxDU0QgJHtub3JtLnRvVXBwZXJDYXNlKCl9XV3jgIFgO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlZGl0c3VtbWFyeSA9IGVkaXRzdW1tYXJ5LnNsaWNlKDAsIE1hdGgubWF4KDAsIGVkaXRzdW1tYXJ5Lmxlbmd0aCAtIDEpKTsgLy8gcmVtb3ZlIHRyYWlsaW5nIGNvbW1hXG5cdFx0XHRcdFx0ZWRpdHN1bW1hcnkgKz0gJ++8iSc7XG5cdFx0XHRcdH0gZWxzZSBpZiAocGFyYW1zLm5vcm1hbGl6ZWRzWzBdID09PSAnZGInKSB7XG5cdFx0XHRcdFx0ZWRpdHN1bW1hcnkgPVxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfor7fmsYJbW0xJQjpDU0R85b+r6YCf5Yig6ZmkXV3vvJonLCAn6KuL5rGCW1tMSUI6Q1NEfOW/q+mAn+WIqumZpF1d77yaJykgK1xuXHRcdFx0XHRcdFx0cGFyYW1zLnRlbXBsYXRlUGFyYW1zWzBdWycxJ107XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWRpdHN1bW1hcnkgPSBgJHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6K+35rGC5b+r6YCf5Yig6ZmkJyxcblx0XHRcdFx0XHRcdCfoq4vmsYLlv6vpgJ/liKrpmaQnXG5cdFx0XHRcdFx0KX3vvIhbW0xJQjpDU0QjJHtwYXJhbXMubm9ybWFsaXplZHNbMF0udG9VcHBlckNhc2UoKX18Q1NEICR7cGFyYW1zLm5vcm1hbGl6ZWRzWzBdLnRvVXBwZXJDYXNlKCl9XV3vvIlgO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEJsYW5rIGF0dGFjayBwYWdlc1xuXHRcdFx0XHRpZiAocGFyYW1zLmJsYW5rKSB7XG5cdFx0XHRcdFx0dGV4dCA9IGNvZGU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IHRhZyBhZnRlciBzaG9ydCBkZXNjcmlwdGlvbiBvciBhbnkgaGF0bm90ZXNcblx0XHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraXRleHQucGFnZSh0ZXh0KTtcblx0XHRcdFx0XHR0ZXh0ID0geXNhcmNoaXZlc19wYWdlLmluc2VydEFmdGVyVGVtcGxhdGVzKGAke2NvZGV9XFxuYCwgVHdpbmtsZS5oYXRub3RlUmVnZXgpLmdldFRleHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KGVkaXRzdW1tYXJ5KTtcblx0XHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KHBhcmFtcy53YXRjaCk7XG5cdFx0XHRcdHBhZ2VvYmouc2F2ZShUd2lua2xlLnNwZWVkeS5jYWxsYmFja3MudXNlci50YWdDb21wbGV0ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGFnQ29tcGxldGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRcdC8vIE5vdGlmaWNhdGlvbiB0byBmaXJzdCBjb250cmlidXRvclxuXHRcdFx0XHRpZiAocGFyYW1zLnVzZXJ0YWxrKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSAocGFnZU9iaikgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGluaXRpYWxDb250cmliID0gcGFnZU9iai5nZXRDcmVhdG9yKCk7XG5cdFx0XHRcdFx0XHQvLyBkaXNhbGxvdyB3YXJuaW5nIHlvdXJzZWxmXG5cdFx0XHRcdFx0XHRpZiAoaW5pdGlhbENvbnRyaWIgPT09IG13LmNvbmZpZy5nZXQoJ3dnVXNlck5hbWUnKSkge1xuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHRcdFx0XHRg5oKo77yIJHtpbml0aWFsQ29udHJpYn0ke3dpbmRvdy53Z1VMUygn77yJ5Yib5bu65LqG6K+l6aG177yM6Lez6L+H6YCa55+lJywgJ++8ieW7uueri+S6huipsumgge+8jOi3s+mBjumAmuefpScpfWBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0aW5pdGlhbENvbnRyaWIgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHQvLyBkb24ndCBub3RpZnkgdXNlcnMgd2hlbiB0aGVpciB1c2VyIHRhbGsgcGFnZSBpcyBub21pbmF0ZWRcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGluaXRpYWxDb250cmliID09PSBtdy5jb25maWcuZ2V0KCd3Z1RpdGxlJykgJiZcblx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gM1xuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy53YXJuKFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfpgJrnn6XpobXpnaLliJvlu7rogIXvvJrnlKjmiLfliJvlu7rkuoboh6rlt7HnmoTorqjorrrpobUnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J+mAmuefpemggemdouW7uueri+iAhe+8muS9v+eUqOiAheW7uueri+S6huiHquW3seeahOiojuirlumggSdcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGluaXRpYWxDb250cmliID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Ly8gcXVpY2sgaGFjayB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSB1bndhbnRlZCBub3RpZmljYXRpb25zLiBTaG91bGQgYWN0dWFsbHkgYmUgY29uZmlndXJhYmxlIG9uIHJlY2lwaWVudCBwYWdlLi4uXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGluaXRpYWxDb250cmliID09PSAnQTIwOTMwNjQtYm90JyAmJiBwYXJhbXMubm9ybWFsaXplZHNbMF0gPT09ICdnMTUnKSB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy53YXJuKFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfpgJrnn6XpobXpnaLliJvlu7rogIXvvJrnlLHmnLrlmajkurrliJvlu7rvvIzot7Pov4fpgJrnn6UnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J+mAmuefpemggemdouW7uueri+iAhe+8mueUseapn+WZqOS6uuW7uueri++8jOi3s+mBjumAmuefpSdcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGluaXRpYWxDb250cmliID0gbnVsbDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhbGtQYWdlTmFtZSA9IGBVc2VyIHRhbGs6JHtpbml0aWFsQ29udHJpYn1gO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB1c2VydGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHRcdHRhbGtQYWdlTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+mAmuefpemhtemdouWIm+W7uuiAhe+8iCcsICfpgJrnn6XpoIHpnaLlu7rnq4vogIXvvIgnKSArIGluaXRpYWxDb250cmlife+8iWBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0bGV0IG5vdGlmeXRleHQ7XG5cdFx0XHRcdFx0XHRcdG5vdGlmeXRleHQgPSAnXFxue3snLmNvbmNhdCgnc3Vic3Q6JywgYGRiLW5vdGljZXx0YXJnZXQ9JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19YCk7XG5cdFx0XHRcdFx0XHRcdG5vdGlmeXRleHQgKz0gXCJ8bm93ZWxjb21lPXllcyd9fS0tfn5cIi5jb25jYXQoJ35+Jyk7XG5cdFx0XHRcdFx0XHRcdGxldCBlZGl0c3VtbWFyeSA9ICfpgJrnn6XvvJonO1xuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLm5vcm1hbGl6ZWRzLmluY2x1ZGVzKCdnMycpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWRpdHN1bW1hcnkgKz0gJ+S4gOaUu+WHu+aAp+mhtemdoic7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbm8gYXJ0aWNsZSBuYW1lIGluIHN1bW1hcnkgZm9yIEcxMCBkZWxldGlvbnNcblx0XHRcdFx0XHRcdFx0XHRlZGl0c3VtbWFyeSArPSBg6aG16Z2iW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWRpdHN1bW1hcnkgKz0gJ+W/q+mAn+WIoOmZpOaPkOWQjSc7XG5cdFx0XHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRBcHBlbmRUZXh0KG5vdGlmeXRleHQpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0RWRpdFN1bW1hcnkoZWRpdHN1bW1hcnkpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2UuYXBwZW5kKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBhZGQgdGhpcyBub21pbmF0aW9uIHRvIHRoZSB1c2VyJ3MgdXNlcnNwYWNlIGxvZywgaWYgdGhlIHVzZXIgaGFzIGVuYWJsZWQgaXRcblx0XHRcdFx0XHRcdGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3MudXNlci5hZGRUb0xvZyhwYXJhbXMsIGluaXRpYWxDb250cmliKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IHRoaXNwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShNb3JlYml0cy5wYWdlTmFtZU5vcm0pO1xuXHRcdFx0XHRcdHRoaXNwYWdlLmxvb2t1cENyZWF0aW9uKGNhbGxiYWNrKTtcblx0XHRcdFx0XHQvLyBvciwgaWYgbm90IG5vdGlmeWluZywgYWRkIHRoaXMgbm9taW5hdGlvbiB0byB0aGUgdXNlcidzIHVzZXJzcGFjZSBsb2cgd2l0aG91dCB0aGUgaW5pdGlhbCBjb250cmlidXRvcidzIG5hbWVcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrcy51c2VyLmFkZFRvTG9nKHBhcmFtcywgbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBub3RlOiB0aGlzIGNvZGUgaXMgYWxzbyBpbnZva2VkIGZyb20gdHdpbmtsZWltYWdlXG5cdFx0XHQvLyB0aGUgcGFyYW1zIHVzZWQgYXJlOlxuXHRcdFx0Ly8gICBmb3IgQ1NEOiBwYXJhbXMudmFsdWVzLCBwYXJhbXMubm9ybWFsaXplZHMgIChub3RlOiBub3JtYWxpemVkcyBpcyBhbiBhcnJheSlcblx0XHRcdC8vICAgZm9yIERJOiBwYXJhbXMuZnJvbURJID0gdHJ1ZSwgcGFyYW1zLnRlbXBsYXRlbmFtZSwgcGFyYW1zLm5vcm1hbGl6ZWQgIChub3RlOiBub3JtYWxpemVkIGlzIGEgc3RyaW5nKVxuXHRcdFx0YWRkVG9Mb2c6IChwYXJhbXMsIGluaXRpYWxDb250cmliKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHVzbCA9IG5ldyBNb3JlYml0cy51c2Vyc3BhY2VMb2dnZXIoVHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlMb2dQYWdlTmFtZScpKTtcblx0XHRcdFx0dXNsLmluaXRpYWxUZXh0ID0gYOi/meaYr+ivpeeUqOaIt+S9v+eUqFtbSDpUV3xUd2lua2xlXV3nmoTpgJ/liKDmqKHlnZflgZrlh7rnmoRbW0xJQjpDU0R85b+r6YCf5Yig6ZmkXV3mj5DlkI3liJfooajjgIJcXG5cXG7oi6XmgqjkuI3lho3mg7Pkv53nlZnmraTml6Xlv5fvvIzor7flnKhbWyR7VHdpbmtsZS5nZXRQcmVmKFxuXHRcdFx0XHRcdCdjb25maWdQYWdlJ1xuXHRcdFx0XHQpfXzlj4LmlbDorr7nva5dXeS4reWFs+aOie+8jOW5tuS9v+eUqFtbTElCOkNTRCNPMXxDU0QgTzFdXeaPkOS6pOW/q+mAn+WIoOmZpOOAgiR7XG5cdFx0XHRcdFx0TW9yZWJpdHMudXNlcklzU3lzb3AgPyAnXFxuXFxu5q2k5pel5b+X5bm25LiN6K6w5b2V55SoVHdpbmtsZeebtOaOpeaJp+ihjOeahOWIoOmZpOOAgicgOiAnJ1xuXHRcdFx0XHR9YDtcblx0XHRcdFx0bGV0IGFwcGVuZFRleHQgPSBgIyBbWzoke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXe+8mmA7XG5cdFx0XHRcdGlmIChwYXJhbXMuZnJvbURJKSB7XG5cdFx0XHRcdFx0YXBwZW5kVGV4dCArPSBg5Zu+54mIW1tMSUI6Q1NEIyR7cGFyYW1zLm5vcm1hbGl6ZWQudG9VcHBlckNhc2UoKX18Q1NEICR7cGFyYW1zLm5vcm1hbGl6ZWQudG9VcHBlckNhc2UoKX1dXe+8iHt7dGx8JHtcblx0XHRcdFx0XHRcdHBhcmFtcy50ZW1wbGF0ZW5hbWVcblx0XHRcdFx0XHR9fX3vvIlgO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtcy5ub3JtYWxpemVkcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0YXBwZW5kVGV4dCArPSAn5aSa5Liq55CG55Sx77yIJztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG5vcm0gb2YgcGFyYW1zLm5vcm1hbGl6ZWRzKSB7XG5cdFx0XHRcdFx0XHRhcHBlbmRUZXh0ICs9IGBbW0xJQjpDU0QjJHtub3JtLnRvVXBwZXJDYXNlKCl9fCR7bm9ybS50b1VwcGVyQ2FzZSgpfV1d44CBYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YXBwZW5kVGV4dCA9IGFwcGVuZFRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgYXBwZW5kVGV4dC5sZW5ndGggLSAxKSk7IC8vIHJlbW92ZSB0cmFpbGluZyBjb21tYVxuXHRcdFx0XHRcdGFwcGVuZFRleHQgKz0gJ++8iSc7XG5cdFx0XHRcdH0gZWxzZSBpZiAocGFyYW1zLm5vcm1hbGl6ZWRzWzBdID09PSAnZGInKSB7XG5cdFx0XHRcdFx0YXBwZW5kVGV4dCArPSAn6Ieq5a6a5LmJ55CG55SxJztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcHBlbmRUZXh0ICs9IGBbW0xJQjpDU0QjJHtwYXJhbXMubm9ybWFsaXplZHNbMF0udG9VcHBlckNhc2UoKX18Q1NEICR7cGFyYW1zLm5vcm1hbGl6ZWRzWzBdLnRvVXBwZXJDYXNlKCl9XV1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwYXJhbXMucmVxdWVzdHNhbHQpIHtcblx0XHRcdFx0XHRhcHBlbmRUZXh0ICs9IHdpbmRvdy53Z1VMUygn77yb6K+35rGC55m957q45L+d5oqkJywgJ++8m+iri+axgueZvee0meS/neittycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpbml0aWFsQ29udHJpYikge1xuXHRcdFx0XHRcdGFwcGVuZFRleHQgKz0gYO+8m+mAmuefpXt7dXNlcnwke2luaXRpYWxDb250cmlifX19YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcHBlbmRUZXh0ICs9ICcgfn4nLmNvbmNhdCgnficsICd+flxcbicpO1xuXHRcdFx0XHR1c2wuY2hhbmdlVGFncyA9IFR3aW5rbGUuY2hhbmdlVGFncztcblx0XHRcdFx0dXNsLmxvZyhcblx0XHRcdFx0XHRhcHBlbmRUZXh0LFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6K6w5b2V5a+5W1snLCAn6KiY6YyE5bCNW1snKSArXG5cdFx0XHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCddXeeahOW/q+mAn+WIoOmZpOaPkOWQjScsICddXeeahOW/q+mAn+WIqumZpOaPkOWQjScpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdH0sXG5cdH07XG5cdC8vIHZhbGlkYXRlIHN1Ymdyb3VwcyBpbiB0aGUgZm9ybSBwYXNzZWQgaW50byB0aGUgc3BlZWR5IGRlbGV0aW9uIHRhZ1xuXHRUd2lua2xlLnNwZWVkeS5nZXRQYXJhbWV0ZXJzID0gKGZvcm0sIHZhbHVlcykgPT4ge1xuXHRcdGxldCBwYXJhbWV0ZXJzID0gW107XG5cdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRQYXJhbXMgPSBbXTtcblx0XHRcdGxldCByZWRpbWFnZTtcblx0XHRcdHN3aXRjaCAodmFsdWUpIHtcblx0XHRcdFx0Y2FzZSAncmVhc29uJzpcblx0XHRcdFx0XHRpZiAoZm9ybVsnY3NkLnJlYXNvbl8xJ10pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGRicmF0aW9uYWxlID0gZm9ybVsnY3NkLnJlYXNvbl8xJ10udmFsdWU7XG5cdFx0XHRcdFx0XHRpZiAoIWRicmF0aW9uYWxlIHx8ICFkYnJhdGlvbmFsZS50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCfoh6rlrprkuYnnkIbnlLHvvJror7fmjIflrprnkIbnlLHjgIInLCAn6Ieq6KiC55CG55Sx77ya6KuL5oyH5a6a55CG55Sx44CCJyksIHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXNwZWVkeScsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYW1zWycxJ10gPSBkYnJhdGlvbmFsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2EyJzpcblx0XHRcdFx0XHRpZiAoZm9ybVsnY3NkLmEyX3BhZ2VuYW1lJ10pIHtcblx0XHRcdFx0XHRcdGNvbnN0IG90aGVycGFnZSA9IGZvcm1bJ2NzZC5hMl9wYWdlbmFtZSddLnZhbHVlO1xuXHRcdFx0XHRcdFx0aWYgKCFvdGhlcnBhZ2UgfHwgIW90aGVycGFnZS50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCdDU0QgQTLvvJror7fmj5DkvpvnjrDmnInmnaHnm67nmoTlkI3np7DjgIInLCAnQ1NEIEEy77ya6KuL5o+Q5L6b54++5pyJ5qKd55uu55qE5ZCN56ix44CCJyksXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXNwZWVkeScsXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYW1zLnBhZ2VuYW1lID0gb3RoZXJwYWdlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZzQnOlxuXHRcdFx0XHRcdGlmIChmb3JtWydjc2QuZzRfcGFnZW5hbWUnXSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFnZW5hbWUgPSBmb3JtWydjc2QuZzRfcGFnZW5hbWUnXS52YWx1ZTtcblx0XHRcdFx0XHRcdGlmICghcGFnZW5hbWUgfHwgIXBhZ2VuYW1lLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ0NTRCBHNO+8muivt+aPkOS+m+mhtemdouWQjeensOOAgicsICdDU0QgRzTvvJroq4vmj5DkvpvpoIHpnaLlkI3nqLHjgIInKSwge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlc3BlZWR5Jyxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnMgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhbXMucGFnZW5hbWUgPSBwYWdlbmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2YyJzpcblx0XHRcdFx0XHRpZiAoZm9ybVsnY3NkLmYyX2ZpbGVuYW1lJ10pIHtcblx0XHRcdFx0XHRcdHJlZGltYWdlID0gZm9ybVsnY3NkLmYyX2ZpbGVuYW1lJ10udmFsdWU7XG5cdFx0XHRcdFx0XHRpZiAoIXJlZGltYWdlIHx8ICFyZWRpbWFnZS50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCdDU0QgRjLvvJror7fmj5Dkvpvlj6bkuIDmlofku7bnmoTlkI3np7DjgIInLCAnQ1NEIEYy77ya6KuL5o+Q5L6b5Y+m5LiA5qqU5qGI55qE5ZCN56ix44CCJyksXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXNwZWVkeScsXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYW1zLmZpbGVuYW1lID0gcmVkaW1hZ2UucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChgXlxcXFxzKiR7TW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoNil9OmAsICdpJyksXG5cdFx0XHRcdFx0XHRcdCcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncjEnOlxuXHRcdFx0XHRcdGlmIChmb3JtWydjc2QucjFfdHlwZSddKSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZWRpcnR5cGUgPSBmb3JtWydjc2QucjFfdHlwZSddLnZhbHVlO1xuXHRcdFx0XHRcdFx0aWYgKCFyZWRpcnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCdDU0QgUjHvvJror7fpgInmi6npgILnlKjnsbvlnovjgIInLCAnQ1NEIFIx77ya6KuL6YG45pOH6YGp55So6aGe5Yil44CCJyksIHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXNwZWVkeScsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYW1zWycxJ10gPSByZWRpcnR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdyMic6XG5cdFx0XHRcdFx0aWYgKGZvcm1bJ2NzZC5yMl90eXBlJ10pIHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlZGlydHlwZSA9IGZvcm1bJ2NzZC5yMl90eXBlJ10udmFsdWU7XG5cdFx0XHRcdFx0XHRpZiAoIXJlZGlydHlwZSkge1xuXHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ0NTRCBSMu+8muivt+mAieaLqemAgueUqOexu+Wei+OAgicsICdDU0QgUjLvvJroq4vpgbjmk4fpgannlKjpoZ7liKXjgIInKSwge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlc3BlZWR5Jyxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnMgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhbXNbJzEnXSA9IHJlZGlydHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRwYXJhbWV0ZXJzW3BhcmFtZXRlcnMubGVuZ3RoXSA9IGN1cnJlbnRQYXJhbXM7XG5cdFx0fVxuXHRcdHJldHVybiBwYXJhbWV0ZXJzO1xuXHR9O1xuXHQvLyBGdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyB0YWxrIHBhZ2Ugbm90aWZpY2F0aW9uIHRlbXBsYXRlIHBhcmFtZXRlcnNcblx0VHdpbmtsZS5zcGVlZHkuZ2V0VXNlclRhbGtQYXJhbWV0ZXJzID0gKG5vcm1hbGl6ZWQpID0+IHtcblx0XHRjb25zdCB1dHBhcmFtcyA9IFtdO1xuXHRcdHN3aXRjaCAobm9ybWFsaXplZCkge1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiB1dHBhcmFtcztcblx0fTtcblx0VHdpbmtsZS5zcGVlZHkucmVzb2x2ZUNzZFZhbHVlcyA9IChlKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0gKGUudGFyZ2V0LmZvcm0gPz8gZS50YXJnZXQpLmdldENoZWNrZWQoJ2NzZCcpO1xuXHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ivt+mAieaLqeS4gOS4queQhuaNru+8gScsICfoq4vpgbjmk4fkuIDlgIvnkIbmk5rvvIEnKSwge1xuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdHRhZzogJ3R3aW5rbGVzcGVlZHknLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fTtcblx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2suZXZhbHVhdGVTeXNvcCA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0LmZvcm0gPz8gZS50YXJnZXQ7XG5cdFx0aWYgKGUudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcgfHwgZS50YXJnZXQudHlwZSA9PT0gJ3RleHQnIHx8IGUudGFyZ2V0LnR5cGUgPT09ICdzZWxlY3QnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHt0YWdfb25seX0gPSBmb3JtO1xuXHRcdGlmICh0YWdfb25seSAmJiB0YWdfb25seS5jaGVja2VkKSB7XG5cdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5ldmFsdWF0ZVVzZXIoZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlcyA9IFR3aW5rbGUuc3BlZWR5LnJlc29sdmVDc2RWYWx1ZXMoZSk7XG5cdFx0aWYgKCF2YWx1ZXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgbm9ybWFsaXplZHMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0cmV0dXJuIFR3aW5rbGUuc3BlZWR5Lm5vcm1hbGl6ZUhhc2hbdmFsdWVdO1xuXHRcdH0pO1xuXHRcdC8vIGFuYWx5c2UgZWFjaCBjcml0ZXJpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gd2F0Y2ggdGhlIHBhZ2UsIHByb21wdCBmb3Igc3VtbWFyeSwgb3Igb3BlbiB1c2VyIHRhbGsgcGFnZVxuXHRcdGxldCB3YXRjaFBhZ2U7XG5cdFx0bGV0IHByb21wdEZvclN1bW1hcnk7XG5cdFx0Zm9yIChjb25zdCBub3JtIG9mIG5vcm1hbGl6ZWRzKSB7XG5cdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFNwZWVkeVBhZ2VzJykuaW5jbHVkZXMobm9ybSkpIHtcblx0XHRcdFx0d2F0Y2hQYWdlID0gVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFNwZWVkeUV4cGlyeScpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZigncHJvbXB0Rm9yU3BlZWR5RGVsZXRpb25TdW1tYXJ5JykuaW5jbHVkZXMobm9ybSkpIHtcblx0XHRcdFx0cHJvbXB0Rm9yU3VtbWFyeSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdHZhbHVlcyxcblx0XHRcdG5vcm1hbGl6ZWRzLFxuXHRcdFx0d2F0Y2g6IHdhdGNoUGFnZSxcblx0XHRcdGRlbGV0ZVRhbGtQYWdlOiBmb3JtLnRhbGtwYWdlICYmIGZvcm0udGFsa3BhZ2UuY2hlY2tlZCxcblx0XHRcdGRlbGV0ZVJlZGlyZWN0czogZm9ybS5yZWRpcmVjdHMuY2hlY2tlZCxcblx0XHRcdG9wZW5Vc2VyVGFsazogZm9ybS5vcGVudXNlcnRhbGsuY2hlY2tlZCxcblx0XHRcdHByb21wdEZvclN1bW1hcnksXG5cdFx0XHR0ZW1wbGF0ZVBhcmFtczogVHdpbmtsZS5zcGVlZHkuZ2V0UGFyYW1ldGVycyhmb3JtLCB2YWx1ZXMpLFxuXHRcdH07XG5cdFx0aWYgKCFwYXJhbXMudGVtcGxhdGVQYXJhbXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3Muc3lzb3AubWFpbihwYXJhbXMpO1xuXHR9O1xuXHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5ldmFsdWF0ZVVzZXIgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IGZvcm0gPSBlLnRhcmdldC5mb3JtID8/IGUudGFyZ2V0O1xuXHRcdGlmIChlLnRhcmdldC50eXBlID09PSAnY2hlY2tib3gnIHx8IGUudGFyZ2V0LnR5cGUgPT09ICd0ZXh0JyB8fCBlLnRhcmdldC50eXBlID09PSAnc2VsZWN0Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB2YWx1ZXMgPSBUd2lua2xlLnNwZWVkeS5yZXNvbHZlQ3NkVmFsdWVzKGUpO1xuXHRcdGlmICghdmFsdWVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIGNvbnN0IG11bHRpcGxlID0gZm9ybS5tdWx0aXBsZS5jaGVja2VkO1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRzID0gW107XG5cdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcblx0XHRcdGNvbnN0IG5vcm0gPSBUd2lua2xlLnNwZWVkeS5ub3JtYWxpemVIYXNoW3ZhbHVlXTtcblx0XHRcdG5vcm1hbGl6ZWRzW25vcm1hbGl6ZWRzLmxlbmd0aF0gPSBub3JtO1xuXHRcdH1cblx0XHQvLyBhbmFseXNlIGVhY2ggY3JpdGVyaW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHdhdGNoIHRoZSBwYWdlL25vdGlmeSB0aGUgY3JlYXRvclxuXHRcdGxldCB3YXRjaFBhZ2UgPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IG5vcm0gb2Ygbm9ybWFsaXplZHMpIHtcblx0XHRcdGlmIChUd2lua2xlLmdldFByZWYoJ3dhdGNoU3BlZWR5UGFnZXMnKS5pbmNsdWRlcyhub3JtKSkge1xuXHRcdFx0XHR3YXRjaFBhZ2UgPSBUd2lua2xlLmdldFByZWYoJ3dhdGNoU3BlZWR5RXhwaXJ5Jyk7XG5cdFx0XHRcdGNvbnRpbnVlOyAvLyBicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBub3RpZnl1c2VyID0gZmFsc2U7XG5cdFx0aWYgKGZvcm0ubm90aWZ5LmNoZWNrZWQpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9ybSBvZiBub3JtYWxpemVkcykge1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdub3RpZnlVc2VyT25TcGVlZHlEZWxldGlvbk5vbWluYXRpb24nKS5pbmNsdWRlcyhub3JtKSkge1xuXHRcdFx0XHRcdG5vdGlmeXVzZXIgPSB0cnVlO1xuXHRcdFx0XHRcdGNvbnRpbnVlOyAvLyBicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGNzZGxvZyA9IGZhbHNlO1xuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ2xvZ1NwZWVkeU5vbWluYXRpb25zJykpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9ybSBvZiBub3JtYWxpemVkcykge1xuXHRcdFx0XHRpZiAoIVR3aW5rbGUuZ2V0UHJlZignbm9Mb2dPblNwZWVkeU5vbWluYXRpb24nKS5pbmNsdWRlcyhub3JtKSkge1xuXHRcdFx0XHRcdGNzZGxvZyA9IHRydWU7XG5cdFx0XHRcdFx0Y29udGludWU7IC8vIGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHR2YWx1ZXMsXG5cdFx0XHRub3JtYWxpemVkcyxcblx0XHRcdHdhdGNoOiB3YXRjaFBhZ2UsXG5cdFx0XHR1c2VydGFsazogbm90aWZ5dXNlcixcblx0XHRcdGxvZ25vbWluYXRpb246IGNzZGxvZyxcblx0XHRcdGJsYW5rOiBmb3JtLmJsYW5rLmNoZWNrZWQsXG5cdFx0XHRyZXF1ZXN0c2FsdDogZm9ybS5zYWx0aW5nLmNoZWNrZWQsXG5cdFx0XHR0ZW1wbGF0ZVBhcmFtczogVHdpbmtsZS5zcGVlZHkuZ2V0UGFyYW1ldGVycyhmb3JtLCB2YWx1ZXMpLFxuXHRcdH07XG5cdFx0aWYgKCFwYXJhbXMudGVtcGxhdGVQYXJhbXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+agh+iusOWujOaIkCcsICfmqJnoqJjlrozmiJAnKTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0d2luZG93LndnVUxTKCfmoIforrDpobXpnaInLCAn5qiZ6KiY6aCB6Z2iJylcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLnNwZWVkeS5jYWxsYmFja3MudXNlci5tYWluKTtcblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS5zcGVlZHksICdzcGVlZHknKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlY29weXZpby5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGVjb3B5dmlvKCkge1xuXHQvKipcblx0ICogdHdpbmtsZWNvcHl2aW8uanM6IENvcHl2aW8gbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjpcdFRhYiAoXCJDb3B5dmlvXCIpXG5cdCAqIEFjdGl2ZSBvbjogRXhpc3RpbmcsIG5vbi1zcGVjaWFsIHBhZ2VzLCBleGNlcHQgZm9yIGZpbGUgcGFnZXNcblx0ICogd2l0aCBubyBsb2NhbCBmaWxlIHdoaWNoIGFyZSBub3QgcmVkaXJlY3RzXG5cdCAqIENvbmZpZyBkaXJlY3RpdmVzIGluOiAgVHdpbmtsZUNvbmZpZ1xuXHQgKi9cblx0VHdpbmtsZS5jb3B5dmlvID0gKCkgPT4ge1xuXHRcdC8vIERpc2FibGUgb246XG5cdFx0Ly8gKiBzcGVjaWFsIHBhZ2VzXG5cdFx0Ly8gKiBub24tZXhpc3RlbnQgcGFnZXNcblx0XHQvLyAqIG5vbi1sb2NhbCBmaWxlcywgd2hldGhlciB0aGVyZSBpcyBhIGxvY2FsIHBhZ2Ugb3Igbm90ICh1bm5lZWRlZCBsb2NhbCBwYWdlcyBvZiBub24tbG9jYWwgZmlsZXMgYXJlIGVsaWdpYmxlIGZvciBDU0QgRjIpXG5cdFx0Ly8gKiBmaWxlIHBhZ2VzIHdpdGhvdXQgYWN0dWFsIGZpbGVzICh0aGVzZSBhcmUgZWxpZ2libGUgZm9yIENTRCBHOClcblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpIDwgMCB8fFxuXHRcdFx0IW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgfHxcblx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSA2ICYmXG5cdFx0XHRcdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctc2hhcmVkdXBsb2FkJykgfHxcblx0XHRcdFx0XHQoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1pbWFnZXBhZ2Utc2VjdGlvbi1maWxlaGlzdG9yeScpICYmICFNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCgpKSkpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRUd2lua2xlLmNvcHl2aW8uY2FsbGJhY2ssXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+S+teadgycsICfkvrXmrIonKSxcblx0XHRcdCd0dy1jb3B5dmlvJyxcblx0XHRcdHdpbmRvdy53Z1VMUygn5o+Q5oql5L615p2D6aG16Z2iJywgJ+aPkOWgseS+teasiumggemdoicpLFxuXHRcdFx0Jydcblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLmNvcHl2aW8uY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgV2luZG93ID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MDAsIDM1MCk7XG5cdFx0V2luZG93LnNldFRpdGxlKHdpbmRvdy53Z1VMUygn5o+Q5oql5L615p2D6aG16Z2iJywgJ+aPkOWgseS+teasiumggemdoicpKTtcblx0XHRXaW5kb3cuc2V0U2NyaXB0TmFtZSgnVHdpbmtsZScpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5L615p2D6K6+572uJywgJ+S+teasiuioreWumicpLCAnSDpUVy9QUkVGI2NvcHl2aW8nKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0MjY29weXZpbycpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUuY29weXZpby5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S+teadg+adpea6kO+8micsICfkvrXmrIrkvobmupDvvJonKSxcblx0XHRcdG5hbWU6ICdzb3VyY2UnLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J0NTRCBHNDog5pu+57uP5qC55o2u5L615p2D5a6h5qC45Yig6Zmk5ZCO5Y+I6YeN5paw5Yib5bu655qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdCdDU0QgRzQ6IOabvue2k+agueaTmuS+teasiuWvqeaguOWIqumZpOW+jOWPiOmHjeaWsOW7uueri+eahOWFp+WuuSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHZhbHVlOiAnZzQnLFxuXHRcdFx0XHRcdG5hbWU6ICdnNCcsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflkIzml7bku6VHNOWHhuWImeaPkOaKpeW/q+mAn+WIoOmZpCcsICflkIzmmYLku6VHNOa6luWJh+aPkOWgseW/q+mAn+WIqumZpCcpLFxuXHRcdFx0XHRcdHN1Ymdyb3VwOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdnNF9wYWdlbmFtZScsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WJjeasoeWIoOmZpOeahOmhtemdouWQjeensCcsICfliY3mrKHliKrpmaTnmoTpoIHpnaLlkI3nqLEnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpgInloavvvIzoi6XliY3mrKHliKDpmaTnmoTpobXpnaLlkI3np7DkuI3lkIzvvIzor7fmj5DkvpsnLFxuXHRcdFx0XHRcdFx0XHRcdCfpgbjloavvvIzoi6XliY3mrKHliKrpmaTnmoTpoIHpnaLlkI3nqLHkuI3lkIzvvIzoq4vmj5DkvpsnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgJrnn6XpobXpnaLliJvlu7rogIUnLCAn6YCa55+l6aCB6Z2i5bu656uL6ICFJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdG5hbWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjpobXpnaLliJvlu7rogIXorqjorrrpobXkuIrmlL7nva7kuIDpgJrnn6XmqKHmnb/jgIInLFxuXHRcdFx0XHRcdFx0J+WcqOmggemdouW7uueri+iAheiojuirlumggeS4iuaUvue9ruS4gOmAmuefpeaooeadv+OAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzdWJtaXQnLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGZvcm0ucmVuZGVyKCk7XG5cdFx0V2luZG93LnNldENvbnRlbnQocmVzdWx0KTtcblx0XHRXaW5kb3cuZGlzcGxheSgpO1xuXHR9O1xuXHRUd2lua2xlLmNvcHl2aW8uY2FsbGJhY2tzID0ge1xuXHRcdHRyeVRhZ2dpbmc6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHQvLyDlhYjlsJ3or5XmoIforrDpobXpnaLvvIzoi6Xlj5HnjrDlt7Lnu4/moIforrDliJnlgZzmraLmj5DmiqVcblx0XHRcdGNvbnN0IHRleHQgPSBwYWdlb2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRpZiAodGV4dC5pbmNsdWRlcygne3tDb3B5dmlvfCcpKSB7XG5cdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5lcnJvcihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+mUmeivrycsICfpjK/oqqQnKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6aG16Z2i5bey57uP5qCH6K6w5L615p2D77yM6K+35Lq65bel56Gu6K6k5piv5ZCm5bey57uP5o+Q5oql44CCJyxcblx0XHRcdFx0XHRcdCfpoIHpnaLlt7LntpPmqJnoqJjkvrXmrIrvvIzoq4vkurrlt6Xnorroqo3mmK/lkKblt7LntpPmj5DloLHjgIInXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0VHdpbmtsZS5jb3B5dmlvLmNhbGxiYWNrcy50YWdnaW5nQXJ0aWNsZShwYWdlb2JqKTtcblx0XHRcdFx0Ly8gQ29udHJpYnV0b3Igc3BlY2lmaWMgZWRpdHNcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCkpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9va3VwQ3JlYXRpb24oVHdpbmtsZS5jb3B5dmlvLmNhbGxiYWNrcy5tYWluKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG1haW46IChwYWdlb2JqKSA9PiB7XG5cdFx0XHQvLyB0aGlzIGlzIGNvbWluZyBpbiBmcm9tIGxvb2t1cENyZWF0aW9uLi4uIVxuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGNvbnN0IGluaXRpYWxDb250cmliID0gcGFnZW9iai5nZXRDcmVhdG9yKCk7XG5cdFx0XHQvLyBBZGRpbmcgZGlzY3Vzc2lvblxuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0cGFyYW1zLmxvZ3BhZ2UsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg5YWl5L615p2D6K6w5b2V6aG5JywgJ+WKoOWFpeS+teasiuiomOmMhOmghScpXG5cdFx0XHQpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLmxvYWQoVHdpbmtsZS5jb3B5dmlvLmNhbGxiYWNrcy5jb3B5dmlvTGlzdCk7XG5cdFx0XHQvLyBOb3RpZmljYXRpb24gdG8gZmlyc3QgY29udHJpYnV0b3Jcblx0XHRcdGlmIChwYXJhbXMubm90aWZ5KSB7XG5cdFx0XHRcdGNvbnN0IHVzZXJ0YWxrcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0YFVzZXIgdGFsazoke2luaXRpYWxDb250cmlifWAsXG5cdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfpgJrnn6XpobXpnaLliJvlu7rogIXvvIgnLCAn6YCa55+l6aCB6Z2i5bu656uL6ICF77yIJykgKyBpbml0aWFsQ29udHJpYn3vvIlgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG5vdGlmeXRleHQgPSAnXFxue3snLmNvbmNhdCgnc3Vic3Q6JywgYENvcHl2aW9Ob3RpY2V8JHttdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyl9fX1gKTtcblx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldEFwcGVuZFRleHQobm90aWZ5dGV4dCk7XG5cdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRFZGl0U3VtbWFyeShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+mAmuefpe+8mumhtemdoltbJywgJ+mAmuefpe+8mumggemdoltbJykgK1xuXHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnXV3nlpHkvLzkvrXniq/okZfkvZzmnYMnLCAnXV3nlpHkvLzkvrXniq/niYjmrIonKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZignY29weXZpb1dhdGNoVXNlcicpKTtcblx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUsIGZhbHNlKTtcblx0XHRcdFx0dXNlcnRhbGtwYWdlLmFwcGVuZCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dGFnZ2luZ0FydGljbGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0Y29uc3QgcmV2aXNpb25JZCA9XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUmV2aXNpb25JZCcpIHx8IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk5ld0lkJykgfHwgbXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJyk7XG5cdFx0XHRsZXQgdGFnID0gJ3t7Jy5jb25jYXQoXG5cdFx0XHRcdCdzdWJzdDonLFxuXHRcdFx0XHRgQ29weXZpby9hdXRvfHVybD0ke3BhcmFtcy5zb3VyY2Vcblx0XHRcdFx0XHQucmVwbGFjZSgvaHR0cC9nLCAnJiMxMDQ7dHRwJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXFxuKy9nLCAnXFxuJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXlxccyooW14qXSkvZ20sICcqICQxJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXlxcKiAkL20sICcnKX18T2xkUmV2aXNpb249JHtyZXZpc2lvbklkfX19YFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHRleHQgPSBwYWdlb2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRjb25zdCBvbGRjc2QgPSB0ZXh0Lm1hdGNoKC9cXHtcXHtcXHMqKGRiKC1cXHcqKT98ZHxkZWxldGUpXFxzKihcXHwoPzpcXHtcXHtbXnt9XSpcXH1cXH18W157fV0pKik/XFx9XFx9L2kpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvbGRjc2QgJiZcblx0XHRcdFx0Y29uZmlybShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Zyo6aG16Z2i5LiK5om+5Yiw5b+r6YCf5Yig6Zmk5qih5p2/77yM6KaB5L+d55WZ5ZCX77yfXFxuXFxu5b2T6aG16Z2i5ZCM5pe25L6154qv6JGX5L2c5p2D5Y+I56ym5ZCI5b+r6YCf5Yig6Zmk5qCH5YeG5pe277yM5bqU6K+l5LyY5YWI6LWw5b+r6YCf5Yig6Zmk56iL5bqP44CCXFxu5Y2V5Ye74oCc56Gu6K6k4oCd5Lul5L+d55WZ5b+r6YCf5Yig6Zmk5qih5p2/77yM6Iul5oKo6K6k5Li65b+r6YCf5Yig6Zmk55CG55Sx5LiN5ZCI77yM5Y2V5Ye74oCc5Y+W5raI4oCd5Lul56e76Zmk5b+r6YCf5Yig6Zmk5qih5p2/44CCJyxcblx0XHRcdFx0XHRcdCflnKjpoIHpnaLkuIrmib7liLDlv6vpgJ/liKrpmaTmqKHmnb/vvIzopoHkv53nlZnll47vvJ9cXG5cXG7nlbbpoIHpnaLlkIzmmYLkvrXniq/niYjmrIrlj4jnrKblkIjlv6vpgJ/liKrpmaTmqJnmupbmmYLvvIzmh4noqbLlhKrlhYjotbDlv6vpgJ/liKrpmaTnqIvluo/jgIJcXG7pu57mk4rjgIznorroqo3jgI3ku6Xkv53nlZnlv6vpgJ/liKrpmaTmqKHmnb/vvIzoi6Xmgqjoqo3ngrrlv6vpgJ/liKrpmaTnkIbnlLHkuI3lkIjvvIzpu57mk4rjgIzlj5bmtojjgI3ku6Xnp7vpmaTlv6vpgJ/liKrpmaTmqKHmnb/jgIInXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGFnID0gYCR7b2xkY3NkWzBdfVxcbiR7dGFnfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1zLmc0KSB7XG5cdFx0XHRcdGxldCBzcGVlZHlUYWcgPSAne3tkZWxldGUnO1xuXHRcdFx0XHRzcGVlZHlUYWcgKz0gJ3xnNCc7XG5cdFx0XHRcdGlmIChwYXJhbXMuZzRfcGFnZW5hbWUpIHtcblx0XHRcdFx0XHRzcGVlZHlUYWcgKz0gYHwke3BhcmFtcy5nNF9wYWdlbmFtZX18YzE9W1tTcGVjaWFsOlVuZGVsZXRlLyR7cGFyYW1zLmc0X3BhZ2VuYW1lfV1dYDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzcGVlZHlUYWcgKz0gYHxjMT1bW1NwZWNpYWw6VW5kZWxldGUvJHttdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyl9XV1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNwZWVkeVRhZyArPSAnfX0nO1xuXHRcdFx0XHR0YWcgPSBgJHtzcGVlZHlUYWd9XFxuJHt0YWd9YDtcblx0XHRcdH1cblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQodGFnKTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkod2luZG93LndnVUxTKCfmraTpobXpnaLnlpHkvLzkvrXniq/okZfkvZzmnYMnLCAn5q2k6aCB6Z2i55aR5Ly85L6154qv54mI5qyKJykpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ2NvcHl2aW9XYXRjaFBhZ2UnKSk7XG5cdFx0XHQvLyBwYWdlb2JqLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZSgpO1xuXHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignbWFya0NvcHl2aW9QYWdlc0FzUGF0cm9sbGVkJykpIHtcblx0XHRcdFx0cGFnZW9iai5wYXRyb2woKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGNvcHl2aW9MaXN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGxldCBvdXRwdXQgPSAnJztcblx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0Y29uc3QgZGF0ZUhlYWRlclJlZ2V4ID0gbmV3IFJlZ0V4cChcblx0XHRcdFx0YF49PStcXFxccyoke2RhdGUuZ2V0VVRDTW9udGgoKSArIDF95pyIJHtkYXRlLmdldFVUQ0RhdGUoKX3ml6VcXFxccyo9PStgLFxuXHRcdFx0XHQnbWcnXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCFkYXRlSGVhZGVyUmVnZXguZXhlYyh0ZXh0KSkge1xuXHRcdFx0XHRvdXRwdXQgPSBgXFxuXFxuPT0ke2RhdGUuZ2V0VVRDTW9udGgoKSArIDF95pyIJHtkYXRlLmdldFVUQ0RhdGUoKX3ml6U9PWA7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQgKz0gJ1xcbnt7Jy5jb25jYXQoJ3N1YnN0OicsIGBDb3B5dmlvVkZEUmVjb3JkfCR7bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpfX19YCk7XG5cdFx0XHRwYWdlb2JqLnNldEFwcGVuZFRleHQob3V0cHV0KTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoYOWKoOWFpVtbJHttdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyl9XV1gKTtcblx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRwYWdlb2JqLmFwcGVuZCgpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuY29weXZpby5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgcGFyYW1zID0gTW9yZWJpdHMucXVpY2tGb3JtLmdldElucHV0RGF0YShlLnRhcmdldCk7XG5cdFx0aWYgKCFwYXJhbXMuc291cmNlLnRyaW0oKSkge1xuXHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn6K+35oyH5a6a5L615p2D5p2l5rqQJywgJ+iri+aMh+WumuS+teasiuS+hua6kCcpLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZWNvcHl2aW8nLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZS50YXJnZXQpO1xuXHRcdHBhcmFtcy5sb2dwYWdlID0gJ0xJQl90YWxrOuS+teadg+aPkOaKpSc7XG5cdFx0TW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50KCk7XG5cdFx0Ly8gVXBkYXRpbmcgZGF0YSBmb3IgdGhlIGFjdGlvbiBjb21wbGV0ZWQgZXZlbnRcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoXG5cdFx0XHQn5o+Q5oql5a6M5oiQ77yM5bCG5Zyo5Yeg56eS5YaF5Yi35paw6aG16Z2iJyxcblx0XHRcdCfmj5DloLHlrozmiJDvvIzlsIflnKjlub7np5Llhafph43mlrDmlbTnkIbpoIHpnaInXG5cdFx0KTtcblx0XHQvLyBUYWdnaW5nIGZpbGVcblx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0d2luZG93LndnVUxTKCfliqDlhaXkvrXmnYPmqKHmnb/liLDpobXpnaInLCAn5Yqg5YWl5L615qyK5qih5p2/5Yiw6aCB6Z2iJylcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmNvcHl2aW8uY2FsbGJhY2tzLnRyeVRhZ2dpbmcpO1xuXHRcdE1vcmViaXRzLndpa2kucmVtb3ZlQ2hlY2twb2ludCgpO1xuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmNvcHl2aW8sICdjb3B5dmlvJyk7XG59KSgpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZXhmZC5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGV4ZmQoKSB7XG5cdC8qKlxuXHQgKiB0d2lua2xleGZkLmpzOiBYRkQgbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIChcIlhGRFwiKVxuXHQgKiBBY3RpdmUgb246IEV4aXN0aW5nLCBub24tc3BlY2lhbCBwYWdlcyxcblx0ICogZXhjZXB0IGZvciBmaWxlIHBhZ2VzIHdpdGggbm8gbG9jYWwgZmlsZVxuXHQgKiB3aGljaCBhcmUgbm90IHJlZGlyZWN0c1xuXHQgKi9cblx0VHdpbmtsZS54ZmQgPSAoKSA9PiB7XG5cdFx0Ly8gRGlzYWJsZSBvbjpcblx0XHQvLyAqIHNwZWNpYWwgcGFnZXNcblx0XHQvLyAqIG5vbi1leGlzdGVudCBwYWdlc1xuXHRcdC8vICogbm9uLWxvY2FsIGZpbGVzLCB3aGV0aGVyIHRoZXJlIGlzIGEgbG9jYWwgcGFnZSBvciBub3QgKHVubmVlZGVkIGxvY2FsIHBhZ2VzIG9mIGZpbGVzIG9uIFNoYXJlIGFyZSBlbGlnaWJsZSBmb3IgQ1NEIEYyKVxuXHRcdC8vICogZmlsZSBwYWdlcyB3aXRob3V0IGFjdHVhbCBmaWxlc1xuXHRcdGlmIChcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPCAwIHx8XG5cdFx0XHQhbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKSB8fFxuXHRcdFx0KG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYgJiZcblx0XHRcdFx0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1zaGFyZWR1cGxvYWQnKSB8fFxuXHRcdFx0XHRcdCghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI213LWltYWdlcGFnZS1zZWN0aW9uLWZpbGVoaXN0b3J5JykgJiYgIU1vcmViaXRzLmlzUGFnZVJlZGlyZWN0KCkpKSlcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFR3aW5rbGUueGZkLmNhbGxiYWNrLFxuXHRcdFx0d2luZG93LndnVUxTKCfmj5DliKAnLCAn5o+Q5YiqJyksXG5cdFx0XHQndHcteGZkJyxcblx0XHRcdHdpbmRvdy53Z1VMUygn5o+Q5Lqk5Yig6Zmk6K6o6K66JywgJ+aPkOS6pOWIqumZpOiojuirlicpXG5cdFx0KTtcblx0fTtcblx0VHdpbmtsZS54ZmQuY3VycmVudFJhdGlvbmFsZSA9IG51bGw7XG5cdC8vIGVycm9yIGNhbGxiYWNrIG9uIE1vcmViaXRzLnN0YXR1cy5vYmplY3Rcblx0VHdpbmtsZS54ZmQucHJpbnRSYXRpb25hbGUgPSAoKSA9PiB7XG5cdFx0aWYgKFR3aW5rbGUueGZkLmN1cnJlbnRSYXRpb25hbGUpIHtcblx0XHRcdE1vcmViaXRzLnN0YXR1cy5wcmludFVzZXJUZXh0KFxuXHRcdFx0XHRUd2lua2xlLnhmZC5jdXJyZW50UmF0aW9uYWxlLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+aCqOeahOeQhueUseW3suWcqOS4i+aWueaPkOS+m++8jOiLpeaCqOaDs+mHjeaWsOaPkOS6pO+8jOivt+WwhuWFtuWkjeWItuWIsOS4gOaWsOeql+WPo+S4re+8micsXG5cdFx0XHRcdFx0J+aCqOeahOeQhueUseW3suWcqOS4i+aWueaPkOS+m++8jOiLpeaCqOaDs+mHjeaWsOaPkOS6pO+8jOiri+Wwh+WFtuikh+ijveWIsOS4gOaWsOimlueql+S4re+8midcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdC8vIG9ubHkgbmVlZCB0byBwcmludCB0aGUgcmF0aW9uYWxlIG9uY2Vcblx0XHRcdFR3aW5rbGUueGZkLmN1cnJlbnRSYXRpb25hbGUgPSBudWxsO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS54ZmQuY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgV2luZG93ID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MDAsIDM1MCk7XG5cdFx0V2luZG93LnNldFRpdGxlKHdpbmRvdy53Z1VMUygn5o+Q5Lqk5a2Y5bqf6K6o6K66JywgJ+aPkOS6pOWtmOW7ouiojuirlicpKTtcblx0XHRXaW5kb3cuc2V0U2NyaXB0TmFtZSgnVHdpbmtsZScpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5o+Q5Yig6K6+572uJywgJ+aPkOWIquioreWumicpLCAnSDpUVy9QUkVGI3hmZCcpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygnVHdpbmtsZeW4ruWKqScsICdUd2lua2xl6Kqq5piOJyksICdIOlRXL0RPQyN4ZmQnKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLnhmZC5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0Y29uc3QgY2F0ZWdvcmllcyA9IGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ2NhdGVnb3J5Jyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aPkOS6pOexu+Wei++8micsICfmj5DkuqTpoZ7liKXvvJonKSxcblx0XHRcdGV2ZW50OiBUd2lua2xlLnhmZC5jYWxsYmFjay5jaGFuZ2VfY2F0ZWdvcnksXG5cdFx0fSk7XG5cdFx0Y2F0ZWdvcmllcy5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpobXpnaLlrZjlup/orqjorronLCAn6aCB6Z2i5a2Y5bui6KiO6KuWJyksXG5cdFx0XHRzZWxlY3RlZDogbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMCxcblx0XHRcdHZhbHVlOiAnYWZkJyxcblx0XHR9KTtcblx0XHRjYXRlZ29yaWVzLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWh+S7tuWtmOW6n+iuqOiuuicsICfmqpTmoYjlrZjlu6LoqI7oq5YnKSxcblx0XHRcdHNlbGVjdGVkOiBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSA2LFxuXHRcdFx0dmFsdWU6ICdmZmQnLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflpoLlj6/og73vvIzpgJrnn6XpobXpnaLliJvlu7rogIUnLCAn5aaC5Y+v6IO977yM6YCa55+l6aCB6Z2i5bu656uL6ICFJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdG5hbWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjpobXpnaLliJvlu7rogIXorqjorrrpobXkuIrmlL7nva7kuIDpgJrnn6XmqKHmnb/jgIInLFxuXHRcdFx0XHRcdFx0J+WcqOmggemdouW7uueri+iAheiojuirlumggeS4iuaUvue9ruS4gOmAmuefpeaooeadv+OAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRsYWJlbDogJ+W3peS9nOWMuicsXG5cdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHQvLyBXZSBtdXN0IGluaXQgdGhlIGNvbnRyb2xzXG5cdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0ZXZ0LmluaXRFdmVudCgnY2hhbmdlJywgdHJ1ZSwgdHJ1ZSk7XG5cdFx0cmVzdWx0LmNhdGVnb3J5LmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0fTtcblx0VHdpbmtsZS54ZmQuY2FsbGJhY2suY2hhbmdlX2NhdGVnb3J5ID0gKGUpID0+IHtcblx0XHRjb25zdCB7dmFsdWV9ID0gZS50YXJnZXQ7XG5cdFx0Y29uc3Qge2Zvcm19ID0gZS50YXJnZXQ7XG5cdFx0Y29uc3QgW29sZF9hcmVhXSA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnd29ya19hcmVhJyk7XG5cdFx0bGV0IHdvcmtfYXJlYSA9IG51bGw7XG5cdFx0Y29uc3Qgb2xkcmVhc29udGV4dGJveCA9IGZvcm0ucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKTtcblx0XHRsZXQgb2xkcmVhc29uID0gb2xkcmVhc29udGV4dGJveCA/IG9sZHJlYXNvbnRleHRib3gudmFsdWUgOiAnJztcblx0XHRjb25zdCBhcHBlbmRSZWFzb25Cb3ggPSAoeGZkX2NhdCkgPT4ge1xuXHRcdFx0c3dpdGNoICh4ZmRfY2F0KSB7XG5cdFx0XHRcdGNhc2UgJ2Z3ZGNzZCc6XG5cdFx0XHRcdFx0b2xkcmVhc29uID0gZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkZWxldGUtcmVhc29uJykudGV4dENvbnRlbnQpLnJlcGxhY2UoXG5cdFx0XHRcdFx0XHQvXFwrL2csXG5cdFx0XHRcdFx0XHQnICdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdmYW1lJzpcblx0XHRcdFx0XHRvbGRyZWFzb24gPSBUd2lua2xlLmdldFByZWYoJ2FmZEZhbWVEZWZhdWx0UmVhc29uJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3N1YnN0dWInOlxuXHRcdFx0XHRcdG9sZHJlYXNvbiA9IFR3aW5rbGUuZ2V0UHJlZignYWZkU3Vic3R1YkRlZmF1bHRSZWFzb24nKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRuYW1lOiAneGZkcmVhc29uJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5o+Q5Yig55CG55Sx77yaJywgJ+aPkOWIqueQhueUse+8micpLFxuXHRcdFx0XHR2YWx1ZTogb2xkcmVhc29uLFxuXHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+aCqOWPr+S7peS9v+eUqHdpa2l0ZXh077yMVHdpbmtsZeWwhuiHquWKqOS4uuaCqOWKoOWFpeetvuWQjeOAguiLpeaCqOS9v+eUqOaJuemHj+aPkOWIoOWKn+iDve+8jOWtmOW6n+iuqOiuuumhteWPquS8muS9v+eUqOesrOS4gOasoeaPkOS6pOeahOeQhueUse+8jOS9huS5i+WQjuaCqOS7jemcgOaPkOS+m+S7peeUqOS6juWIoOmZpOmAmuWRiuaooeadv+eahOWPguaVsOOAgicsXG5cdFx0XHRcdFx0J+aCqOWPr+S7peS9v+eUqHdpa2l0ZXh077yMVHdpbmtsZeWwh+iHquWLleeCuuaCqOWKoOWFpeewveWQjeOAguiLpeaCqOS9v+eUqOaJueasoeaPkOWIquWKn+iDve+8jOWtmOW7ouiojuirlumggeWPquacg+S9v+eUqOesrOS4gOasoeaPkOS6pOeahOeQhueUse+8jOS9huS5i+W+jOaCqOS7jemcgOaPkOS+m+S7peeUqOaWvOWIqumZpOmAmuWRiuaooeadv+eahOWPg+aVuOOAgidcblx0XHRcdFx0KSxcblx0XHRcdFx0cGxhY2Vob2xkZXI6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5q2k5YC85Lqm5pi+56S65LqO6aG16Z2i55qE5Yig6Zmk6YCa5ZGK5qih5p2/5YaF77yM5pWF5Yqh5b+F5o+Q5L6b5q2k5YC877yM6YG/5YWN5L2/55So4oCc5ZCM5LiK4oCd562J55So6K+t44CCJyxcblx0XHRcdFx0XHQn5q2k5YC85Lqm6aGv56S65pa86aCB6Z2i55qE5Yiq6Zmk6YCa5ZGK5qih5p2/5YWn77yM5pWF5YuZ5b+F5o+Q5L6b5q2k5YC877yM6YG/5YWN5L2/55So44CM5ZCM5LiK44CN562J55So6Kqe44CCJ1xuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdFx0XHQvLyBUT0RPIHBvc3NpYmxlIGZ1dHVyZSBcInByZXZpZXdcIiBsaW5rIGhlcmVcblx0XHR9O1xuXG5cdFx0c3dpdGNoICh2YWx1ZSkge1xuXHRcdFx0Y2FzZSAnYWZkJzoge1xuXHRcdFx0XHR3b3JrX2FyZWEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6aG16Z2i5a2Y5bqf6K6o6K66JywgJ+mggemdouWtmOW7ouiojuirlicpLFxuXHRcdFx0XHRcdG5hbWU6ICd3b3JrX2FyZWEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5L2/55SoJmx0O25vaW5jbHVkZSZndDvljIXoo7nmqKHmnb8nLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ25vaW5jbHVkZScsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdub2luY2x1ZGUnLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOlxuXHRcdFx0XHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDEwICYmXG5cdFx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlQ29udGVudE1vZGVsJykgIT09ICdTY3JpYnVudG8nLFxuXHRcdFx0XHRcdFx0XHQvLyBUZW1wbGF0ZSBuYW1lc3BhY2Vcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfkvb/lhbbkuI3kvJrlnKjooqvljIXlkKvml7blh7rnjrDjgIInLCAn5L2/5YW25LiN5pyD5Zyo6KKr5YyF5ZCr5pmC5Ye654++44CCJyksXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VDb250ZW50TW9kZWwnKSA9PT0gJ1NjcmlidW50bycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBhZmRfY2F0ZWdvcnkgPSB3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRuYW1lOiAneGZkY2F0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6nmj5DliKDnsbvlnovvvJonLCAn6YG45pOH5o+Q5Yiq6aGe5Yil77yaJyksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUueGZkLmNhbGxiYWNrLmNoYW5nZV9hZmRfY2F0ZWdvcnksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRsZXQgYWZkX2NhdCA9ICdkZWxldGUnO1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdhZmREZWZhdWx0Q2F0ZWdvcnknKSA9PT0gJ3NhbWUnKSB7XG5cdFx0XHRcdFx0aWYgKGxvY2FsU3RvcmFnZS5Ud2lua2xlX2FmZENhdGVnb3J5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGxvY2FsU3RvcmFnZS5Ud2lua2xlX2FmZENhdGVnb3J5ID0gJ2RlbGV0ZSc7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFmZF9jYXQgPSBsb2NhbFN0b3JhZ2UuVHdpbmtsZV9hZmRDYXRlZ29yeTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YWZkX2NhdGVnb3J5LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIqumZpCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnZGVsZXRlJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogYWZkX2NhdCA9PT0gJ2RlbGV0ZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhZmRfY2F0ZWdvcnkuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflkIjlubYnLCAn5ZCI5L21JyksXG5cdFx0XHRcdFx0dmFsdWU6ICdtZXJnZScsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGFmZF9jYXQgPT09ICdtZXJnZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdGd2RDc2RUb1hmZCcpKSB7XG5cdFx0XHRcdFx0YWZkX2NhdGVnb3J5LmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+i9rOS6pOiHquW/q+mAn+WIoOmZpOWAmemAiScsICfovYnkuqToh6rlv6vpgJ/liKrpmaTlgJnpgbgnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnZndkY3NkJyxcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiBhZmRfY2F0ID09PSAnZndkY3NkJyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhZmRfY2F0ZWdvcnkuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmibnph4/lhbPms6jluqbmj5DliKAnLCAn5om55qyh6Zec5rOo5bqm5o+Q5YiqJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdmYW1lJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogYWZkX2NhdCA9PT0gJ2ZhbWUnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YWZkX2NhdGVnb3J5LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5om56YeP5bCP5bCP5L2c5ZOB5o+Q5YigJywgJ+aJueasoeWwj+Wwj+S9nOWTgeaPkOWIqicpLFxuXHRcdFx0XHRcdHZhbHVlOiAnc3Vic3R1YicsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGFmZF9jYXQgPT09ICdzdWJzdHViJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFmZF9jYXRlZ29yeS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aJuemHj+WFtuS7luaPkOWIoCcsICfmibnmrKHlhbbku5bmj5DliKonKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2JhdGNoJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogYWZkX2NhdCA9PT0gJ2JhdGNoJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ21lcmdlaW50bycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5ZCI5bm25Yiw77yaJywgJ+WQiOS9teWIsO+8micpLFxuXHRcdFx0XHRcdGhpZGRlbjogdHJ1ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFwcGVuZFJlYXNvbkJveChhZmRfY2F0KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0XHRuYW1lOiAnZndkY3NkcmVhc29uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfovazkuqTnkIbnlLHvvJonLCAn6L2J5Lqk55CG55Sx77yaJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOWPr+S7peS9v+eUqHdpa2l0ZXh077yMVHdpbmtsZeWwhuiHquWKqOS4uuaCqOWKoOWFpeetvuWQjeOAgicsXG5cdFx0XHRcdFx0XHQn5oKo5Y+v5Lul5L2/55Sod2lraXRleHTvvIxUd2lua2xl5bCH6Ieq5YuV54K65oKo5Yqg5YWl57C95ZCN44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aGlkZGVuOiB0cnVlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhID0gd29ya19hcmVhLnJlbmRlcigpO1xuXHRcdFx0XHRvbGRfYXJlYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3b3JrX2FyZWEsIG9sZF9hcmVhKTtcblx0XHRcdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRcdGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRmb3JtLnhmZGNhdC5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnZmZkJzpcblx0XHRcdFx0d29ya19hcmVhID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWh+S7tuWtmOW6n+iuqOiuuicsICfmqpTmoYjlrZjlu6LoqI7oq5YnKSxcblx0XHRcdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFwcGVuZFJlYXNvbkJveCgnZmZkJyk7XG5cdFx0XHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRcdFx0b2xkX2FyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod29ya19hcmVhLCBvbGRfYXJlYSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0d29ya19hcmVhID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+acquWumuS5iScsICfmnKrlrprnvqknKSxcblx0XHRcdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRcdFx0b2xkX2FyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod29ya19hcmVhLCBvbGRfYXJlYSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBSZXR1cm4gdG8gY2hlY2tlZCBzdGF0ZSB3aGVuIHN3aXRjaGluZ1xuXHRcdGZvcm0ubm90aWZ5LmNoZWNrZWQgPSB0cnVlO1xuXHRcdGZvcm0ubm90aWZ5LmRpc2FibGVkID0gZmFsc2U7XG5cdH07XG5cdFR3aW5rbGUueGZkLmNhbGxiYWNrLmNoYW5nZV9hZmRfY2F0ZWdvcnkgPSAoZSkgPT4ge1xuXHRcdHN3aXRjaCAoZS50YXJnZXQudmFsdWUpIHtcblx0XHRcdGNhc2UgJ21lcmdlJzpcblx0XHRcdFx0ZS50YXJnZXQuZm9ybS5tZXJnZWludG8ucGFyZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmZ3ZGNzZHJlYXNvbi5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1lcmdlaW50by5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmlubmVySFRNTCA9IHdpbmRvdy53Z1VMUygn5ZCI5bm25Yiw77yaJywgJ+WQiOS9teWIsO+8micpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Z3ZGNzZCc6XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0ubWVyZ2VpbnRvLnBhcmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcblx0XHRcdFx0ZS50YXJnZXQuZm9ybS5md2Rjc2RyZWFzb24ucGFyZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1lcmdlaW50by5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmlubmVySFRNTCA9ICfmj5DkuqTkurrvvJonO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLnhmZHJlYXNvbi52YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChcblx0XHRcdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZGVsZXRlLXJlYXNvbicpLnRleHRDb250ZW50XG5cdFx0XHRcdCkucmVwbGFjZSgvXFwrL2csICcgJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZmFtZSc6XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0ubWVyZ2VpbnRvLnBhcmVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0uZndkY3NkcmVhc29uLnBhcmVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0ueGZkcmVhc29uLnZhbHVlID0gVHdpbmtsZS5nZXRQcmVmKCdhZmRGYW1lRGVmYXVsdFJlYXNvbicpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3N1YnN0dWInOlxuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1lcmdlaW50by5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmZ3ZGNzZHJlYXNvbi5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLnhmZHJlYXNvbi52YWx1ZSA9IFR3aW5rbGUuZ2V0UHJlZignYWZkU3Vic3R1YkRlZmF1bHRSZWFzb24nKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1lcmdlaW50by5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmZ3ZGNzZHJlYXNvbi5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdH1cblx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdhZmREZWZhdWx0Q2F0ZWdvcnknKSA9PT0gJ3NhbWUnKSB7XG5cdFx0XHRsb2NhbFN0b3JhZ2UuVHdpbmtsZV9hZmRDYXRlZ29yeSA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzID0ge1xuXHRcdGFmZDoge1xuXHRcdFx0bWFpbjogKHRhZ2dpbmdfcGFnZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSB0YWdnaW5nX3BhZ2UuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRcdFR3aW5rbGUueGZkLmNhbGxiYWNrcy5hZmQudGFnZ2luZ0FydGljbGUodGFnZ2luZ19wYWdlKTtcblx0XHRcdFx0Ly8gQWRkaW5nIGRpc2N1c3Npb25cblx0XHRcdFx0Y29uc3QgZGlzY3Vzc2lvbl9wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYXJhbXMubG9ncGFnZSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOWFpeiuqOiuuuWIsOW9k+aXpeWIl+ihqCcsICfliqDlhaXoqI7oq5bliLDnlbbml6XliJfooagnKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRkaXNjdXNzaW9uX3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdGRpc2N1c3Npb25fcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdFx0ZGlzY3Vzc2lvbl9wYWdlLmxvYWQoVHdpbmtsZS54ZmQuY2FsbGJhY2tzLmFmZC50b2RheXNMaXN0KTtcblx0XHRcdFx0Ly8gTm90aWZpY2F0aW9uIHRvIGZpcnN0IGNvbnRyaWJ1dG9yXG5cdFx0XHRcdGlmIChwYXJhbXMubm90aWZ5KSB7XG5cdFx0XHRcdFx0Ly8gRGlzYWxsb3cgd2FybmluZyB5b3Vyc2VsZlxuXHRcdFx0XHRcdGlmIChwYXJhbXMuY3JlYXRvciA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKSB7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfpgJrnn6XpobXpnaLliJvlu7rogIXvvIgnLCAn6YCa55+l6aCB6Z2i5bu656uL6ICF77yIJykgKyBwYXJhbXMuY3JlYXRvcn3vvIlgLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aCqOWIm+W7uuS6huivpemhte+8jOi3s+i/h+mAmuefpScsICfmgqjlu7rnq4vkuoboqbLpoIHvvIzot7PpgY7pgJrnn6UnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHBhcmFtcy5jcmVhdG9yID0gbnVsbDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFsa1BhZ2VOYW1lID0gYFVzZXIgdGFsazoke3BhcmFtcy5jcmVhdG9yfWA7XG5cdFx0XHRcdFx0XHRjb25zdCB1c2VydGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHR0YWxrUGFnZU5hbWUsXG5cdFx0XHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn6YCa55+l6aG16Z2i5Yib5bu66ICF77yIJywgJ+mAmuefpemggemdouW7uueri+iAhe+8iCcpICsgcGFyYW1zLmNyZWF0b3J977yJYFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IG5vdGlmeXRleHQgPSAnXFxue3snXG5cdFx0XHRcdFx0XHRcdC5jb25jYXQoJ3N1YnN0OicpXG5cdFx0XHRcdFx0XHRcdC5jb25jYXQoYEFGRE5vdGV8JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19fX0tLX5+YCwgJ35+Jyk7XG5cdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0QXBwZW5kVGV4dChub3RpZnl0ZXh0KTtcblx0XHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRFZGl0U3VtbWFyeShg6YCa55+l77ya6aG16Z2iW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXeWtmOW6n+iuqOiuuuaPkOWQjWApO1xuXHRcdFx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZigneGZkV2F0Y2hVc2VyJykpO1xuXHRcdFx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5hcHBlbmQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gYWRkIHRoaXMgbm9taW5hdGlvbiB0byB0aGUgdXNlcidzIHVzZXJzcGFjZSBsb2csIGlmIHRoZSB1c2VyIGhhcyBlbmFibGVkIGl0XG5cdFx0XHRcdFx0aWYgKHBhcmFtcy5sb2dub21pbmF0aW9uKSB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLnhmZC5jYWxsYmFja3MuYWRkVG9Mb2cocGFyYW1zLCBwYXJhbXMuY3JlYXRvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIG9yLCBpZiBub3Qgbm90aWZ5aW5nLCBhZGQgdGhpcyBub21pbmF0aW9uIHRvIHRoZSB1c2VyJ3MgdXNlcnNwYWNlIGxvZyB3aXRob3V0IHRoZSBpbml0aWFsIGNvbnRyaWJ1dG9yJ3MgbmFtZVxuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtcy5sb2dub21pbmF0aW9uKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzLmFkZFRvTG9nKHBhcmFtcywgbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0YWdnaW5nQXJ0aWNsZTogKHBhZ2VvYmopID0+IHtcblx0XHRcdFx0bGV0IHRleHQgPSBwYWdlb2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRcdGxldCB0YWcgPSBge3t2ZmR8JHtNb3JlYml0cy5zdHJpbmcuZm9ybWF0UmVhc29uVGV4dChwYXJhbXMueGZkcmVhc29uKX1gO1xuXHRcdFx0XHRpZiAoTW9yZWJpdHMuaXNQYWdlUmVkaXJlY3QoKSkge1xuXHRcdFx0XHRcdHRhZyArPSAnfHInO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRhZyArPSAnfGRhdGU9e3snLmNvbmNhdCgnc3Vic3Q6JywgJyN0aW1lOlkvbS9kfX19fScpO1xuXHRcdFx0XHRpZiAocGFyYW1zLm5vaW5jbHVkZSkge1xuXHRcdFx0XHRcdHRhZyA9IGA8bm9pbmNsdWRlPiR7dGFnfTwvbm9pbmNsdWRlPmA7XG5cdFx0XHRcdFx0Ly8g5Y+q5pyJ6KGo5qC86ZyA6KaB5Y2V54us5Yqg5Zue6L2m77yM5YW25LuW5oOF5Ya15Yqg5Zue6L2m5Lya56C05Z2P5qih5p2/44CCXG5cdFx0XHRcdFx0aWYgKHRleHQuaW5kZXhPZigne3wnKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0dGFnICs9ICdcXG4nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YWcgKz0gJ1xcbic7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlbiwgdGVzdCBpZiB0aGVyZSBhcmUgc3BlZWR5IGRlbGV0aW9uLXJlbGF0ZWQgdGVtcGxhdGVzIG9uIHRoZSBhcnRpY2xlLlxuXHRcdFx0XHRjb25zdCB0ZXh0Tm9TZCA9IHRleHQucmVwbGFjZShcblx0XHRcdFx0XHQvXFx7XFx7XFxzKihkYigtXFx3Kik/fGR8ZGVsZXRlfCg/Omhhbmd8aG9sZClbLSBdP29uKVxccyooXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyovZ2ksXG5cdFx0XHRcdFx0Jydcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRleHQgIT09IHRleHROb1NkICYmXG5cdFx0XHRcdFx0Y29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5LiK5om+5Yiw5b+r6YCf5Yig6Zmk5qih5p2/77yM6KaB56e76Zmk5ZCX77yfJywgJ+WcqOmggemdouS4iuaJvuWIsOW/q+mAn+WIqumZpOaooeadv++8jOimgeenu+mZpOWXju+8nycpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0ZXh0ID0gdGV4dE5vU2Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGV4dE5vTm90TWFuZGFyaW4gPSB0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdFx0L1xce1xce1xccyooTm90TWFuZGFyaW58Tm90Y2hpbmVzZXzpnZ7kuK3mlod86Z2e54++5Luj5ryi6KqefOmdnueOsOS7o+axieivrXzpnZ7nj77ku6PmqJnmupbmvKLoqp586Z2e546w5Luj5qCH5YeG5rGJ6K+tKVxccyooXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyovZ2ksXG5cdFx0XHRcdFx0Jydcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRleHQgIT09IHRleHROb05vdE1hbmRhcmluICYmXG5cdFx0XHRcdFx0Y29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+WcqOmhtemdouS4iuaJvuWIsOmdnueOsOS7o+agh+WHhuaxieivreaooeadv++8jOimgeenu+mZpOWQl++8nycsXG5cdFx0XHRcdFx0XHRcdCflnKjpoIHpnaLkuIrmib7liLDpnZ7nj77ku6PmqJnmupbmvKLoqp7mqKHmnb/vvIzopoHnp7vpmaTll47vvJ8nXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0ZXh0ID0gdGV4dE5vTm90TWFuZGFyaW47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGV4dE5vQWZjID0gdGV4dC5yZXBsYWNlKC97e1xccypBRkMgc3VibWlzc2lvblxccypcXHxcXHMqXFx8W159XSo/fX1cXHMqL2dpLCAnJyk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0ZXh0ICE9PSB0ZXh0Tm9BZmMgJiZcblx0XHRcdFx0XHRjb25maXJtKHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5LiK5om+5YiwQUZD5o+Q5Lqk5qih5p2/77yM6KaB56e76Zmk5ZCX77yfJywgJ+WcqOmggemdouS4iuaJvuWIsEFGQ+aPkOS6pOaooeadv++8jOimgeenu+mZpOWXju+8nycpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0ZXh0ID0gdGV4dE5vQWZjO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIE1hcmsgdGhlIHBhZ2UgYXMgcGF0cm9sbGVkLCBpZiB3YW50ZWRcblx0XHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignbWFya1hmZFBhZ2VzQXNQYXRyb2xsZWQnKSkge1xuXHRcdFx0XHRcdHBhZ2VvYmoucGF0cm9sKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gSW5zZXJ0IHRhZyBhZnRlciBzaG9ydCBkZXNjcmlwdGlvbiBvciBhbnkgaGF0bm90ZXNcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2l0ZXh0LnBhZ2UodGV4dCk7XG5cdFx0XHRcdHRleHQgPSB5c2FyY2hpdmVzX3BhZ2UuaW5zZXJ0QWZ0ZXJUZW1wbGF0ZXModGFnLCBUd2lua2xlLmhhdG5vdGVSZWdleCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn6aG16Z2i5a2Y5bqf6K6o6K6677yaW1snLCAn6aCB6Z2i5a2Y5bui6KiO6KuW77yaW1snKSArIHBhcmFtcy5sb2dwYWdlfSMke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXWBcblx0XHRcdFx0KTtcblx0XHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZigneGZkV2F0Y2hQYWdlJykpO1xuXHRcdFx0XHRwYWdlb2JqLnNhdmUoKTtcblx0XHRcdH0sXG5cdFx0XHR0b2RheXNMaXN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0XHRsZXQgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdFx0bGV0IHR5cGUgPSAnJztcblx0XHRcdFx0bGV0IHRvID0gJyc7XG5cdFx0XHRcdHN3aXRjaCAocGFyYW1zLnhmZGNhdCkge1xuXHRcdFx0XHRcdGNhc2UgJ2Z3ZGNzZCc6XG5cdFx0XHRcdFx0Y2FzZSAnbWVyZ2UnOlxuXHRcdFx0XHRcdFx0dG8gPSBwYXJhbXMubWVyZ2VpbnRvO1xuXHRcdFx0XHRcdC8qIEZhbGwgdGhyb3VnaCAqL1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0eXBlID0gcGFyYW1zLnhmZGNhdDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBhcHBlbmQgPSB0cnVlO1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlICdmYW1lJzpcblx0XHRcdFx0XHRjYXNlICdzdWJzdHViJzpcblx0XHRcdFx0XHRjYXNlICdiYXRjaCc6IHtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbW1lbnRUZXh0ID0gYDwhLS0gVHdpbmtsZTogVXNlcjoke213LmNvbmZpZy5nZXQoXG5cdFx0XHRcdFx0XHRcdCd3Z1VzZXJOYW1lJ1xuXHRcdFx0XHRcdFx0KX0g55qEICR7dHlwZX0g5o+Q5Yig5o+S5YWl54K577yM6K+35Yu/5pu05pS55oiW56e76Zmk5q2k6KGM77yM6Zmk6Z2e5LiN5YaN5LqO5q2k6aG16Z2i5o+Q5YigIC0tPmA7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VGV4dCA9IGA9PT1bWzoke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXT09PWA7XG5cdFx0XHRcdFx0XHRpZiAodHlwZSA9PT0gJ2ZhbWUnKSB7XG5cdFx0XHRcdFx0XHRcdG5ld1RleHQgKz0gYFxcbnt7RmluZHNvdXJjZXN8JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19fX1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRleHQuaW5jbHVkZXMoY29tbWVudFRleHQpKSB7XG5cdFx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoY29tbWVudFRleHQsIGAke25ld1RleHR9XFxuXFxuJHtjb21tZW50VGV4dH1gKTtcblx0XHRcdFx0XHRcdFx0cGFnZW9iai5zZXRQYWdlVGV4dCh0ZXh0KTtcblx0XHRcdFx0XHRcdFx0YXBwZW5kID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzYWZlc3Vic3QgPSAnc2FmZXN1YnN0Jztcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXBwZW5kVGV4dCA9IGBcXG57eyR7c2FmZXN1YnN0fSR7YDpTYWZlQWZkSGVhZH19XFxuJHtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRmYW1lOiAnPT0gMzDlpKnlkI7ku43mjILmnIl7e3RsfG5vdGFiaWxpdHl9feaooeadv+eahOadoeebriA9PVxcbjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiBzbWFsbGVyO1wiPu+8iOW3suaMgltbVGVtcGxhdGU6bm90YWJpbGl0eXzkuI3nrKbmlLblvZXmoIflh4bmqKHmnb9dXTMw5aSp77yJPC9zcGFuPicsXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJzdHViOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnPT0gMzDlpKnlkI7ku43mjILmnIl7e3RsfHN1YnN0dWJ9feaooeadv+eahOadoeebriA9PVxcbjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiBzbWFsbGVyO1wiPu+8iOW3suaMgltbVGVtcGxhdGU6c3Vic3R1YnzlsI/lsI/mnaHnm67mqKHmnb9dXTMw5aSp77yJPC9zcGFuPicsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYXRjaDogJz09IOaJuemHj+aPkOWIoCA9PScsXG5cdFx0XHRcdFx0XHRcdFx0fVt0eXBlXVxuXHRcdFx0XHRcdFx0XHR9XFxuJHtuZXdUZXh0fVxcblxcbiR7Y29tbWVudFRleHR9XFxuLS0tLVxcbjrlu7rorq7vvJrliKDpmaTliY3ov7DpobXpnaLvvJvnkIbnlLHvvJoke01vcmViaXRzLnN0cmluZy5mb3JtYXRSZWFzb25UZXh0KFxuXHRcdFx0XHRcdFx0XHRcdHBhcmFtcy54ZmRyZWFzb25cblx0XHRcdFx0XHRcdFx0KX1cXG7mj5DmiqXku6XkuIoke1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGZhbWU6ICc8dT7kuI3nrKblkIjmlLblvZXmoIflh4Y8L3U+5p2h55uuJyxcblx0XHRcdFx0XHRcdFx0XHRcdHN1YnN0dWI6ICc8dT7plb/luqbov4fnn608L3U+5p2h55uuJyxcblx0XHRcdFx0XHRcdFx0XHRcdGJhdGNoOiAn6aG16Z2iJyxcblx0XHRcdFx0XHRcdFx0XHR9W3R5cGVdXG5cdFx0XHRcdFx0XHRcdH3nmoTmsYLpl7vnvJbogIXlj4rml7bpl7TvvJo8YnIgaWQ9XCJuby1uZXctdGl0bGVcIj5+fmAuY29uY2F0KCd+ficpfWA7XG5cdFx0XHRcdFx0XHRcdHBhZ2VvYmouc2V0QXBwZW5kVGV4dChhcHBlbmRUZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cGFnZW9iai5zZXRBcHBlbmRUZXh0KFxuXHRcdFx0XHRcdFx0XHQnXFxue3snLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0XHRcdFx0XHRgRFJJdGVtfFR5cGU9JHt0eXBlfXxEUmFydGljbGVzPSR7XG5cdFx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm1cblx0XHRcdFx0XHRcdFx0XHR9fFJlYXNvbj0ke01vcmViaXRzLnN0cmluZy5mb3JtYXRSZWFzb25UZXh0KHBhcmFtcy54ZmRyZWFzb24pfSR7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMuZndkY3NkcmVhc29uLnRyaW0oKSA9PT0gJycgPyAnJyA6IGA8YnI+XFxu6L2s5Lqk55CG55Sx77yaJHtwYXJhbXMuZndkY3NkcmVhc29ufWBcblx0XHRcdFx0XHRcdFx0XHR9fFRvPSR7dG99fX1+fmAuY29uY2F0KCd+ficpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KGDliqDlhaVbWyR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dYCk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3hmZFdhdGNoRGlzY3Vzc2lvbicpKTtcblx0XHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdGlmIChhcHBlbmQpIHtcblx0XHRcdFx0XHRwYWdlb2JqLmFwcGVuZCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhZ2VvYmouc2F2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFR3aW5rbGUueGZkLmN1cnJlbnRSYXRpb25hbGUgPSBudWxsO1xuXHRcdFx0fSxcblx0XHRcdGxvb2t1cENyZWF0aW9uOiAodGFyZ2V0X3BhZ2UpID0+IHtcblx0XHRcdFx0dGFyZ2V0X3BhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSB0YXJnZXRfcGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdFx0cGFyYW1zLmNyZWF0b3IgPSB0YXJnZXRfcGFnZS5nZXRDcmVhdG9yKCk7XG5cdFx0XHRcdC8vIFRhZ2dpbmcgcGFnZVxuXHRcdFx0XHRjb25zdCB0YWdnaW5nX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOWFpeWtmOW6n+iuqOiuuuaooeadv+WIsOmhtemdoicsICfliqDlhaXlrZjlu6LoqI7oq5bmqKHmnb/liLDpoIHpnaInKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0YWdnaW5nX3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QoZmFsc2UpO1xuXHRcdFx0XHR0YWdnaW5nX3BhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHBhcmFtcyk7XG5cdFx0XHRcdHRhZ2dpbmdfcGFnZS5sb2FkKFR3aW5rbGUueGZkLmNhbGxiYWNrcy5hZmQudHJ5VGFnZ2luZyk7XG5cdFx0XHR9LFxuXHRcdFx0dHJ5VGFnZ2luZzogKHRhZ2dpbmdfcGFnZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdGF0ZWxlbSA9IHRhZ2dpbmdfcGFnZS5nZXRTdGF0dXNFbGVtZW50KCk7XG5cdFx0XHRcdC8vIGRlZmF1bHRzIHRvIC9kb2MgZm9yIGx1YSBtb2R1bGVzLCB3aGljaCBtYXkgbm90IGV4aXN0XG5cdFx0XHRcdGlmICghdGFnZ2luZ19wYWdlLmV4aXN0cygpKSB7XG5cdFx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfpobXpnaLkuI3lrZjlnKjvvIzlj6/og73lt7LooqvliKDpmaQnLCAn6aCB6Z2i5LiN5a2Y5Zyo77yM5Y+v6IO95bey6KKr5Yiq6ZmkJykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0ZXh0ID0gdGFnZ2luZ19wYWdlLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHhmZCA9IC8oPzpcXHtcXHsoW3JzYWlmdGNtdl1mZHxtZDF8cHJvcG9zZWQgZGVsZXRpb24pW157fV0qP1xcfVxcfSkvaS5leGVjKHRleHQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0eGZkICYmXG5cdFx0XHRcdFx0IWNvbmZpcm0oXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WIoOmZpOebuOWFs+aooeadv3t7JywgJ+WIqumZpOebuOmXnOaooeadv3t7JykgK1xuXHRcdFx0XHRcdFx0XHR4ZmRbMV0gK1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J3195bey6KKr572u5LqO6aG16Z2i5Lit77yM5oKo5piv5ZCm5LuN5oOz57un57ut5o+Q5oql77yfJyxcblx0XHRcdFx0XHRcdFx0XHQnfX3lt7Looqvnva7mlrzpoIHpnaLkuK3vvIzmgqjmmK/lkKbku43mg7Pnubznuozmj5DloLHvvJ8nXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn6aG16Z2i5bey6KKr5o+Q5Lqk6Iez5a2Y5bqf6K6o6K6644CCJywgJ+mggemdouW3suiiq+aPkOS6pOiHs+WtmOW7ouiojuirluOAgicpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY29weXZpbyA9IC8oPzpcXHtcXHtcXHMqKGNvcHl2aW8pW157fV0qP1xcfVxcfSkvaS5leGVjKHRleHQpO1xuXHRcdFx0XHRpZiAoY29weXZpbykge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn6aG16Z2i5Lit5bey5pyJ6JGX5L2c5p2D6aqM6K+B5qih5p2/44CCJywgJ+mggemdouS4reW3suacieiRl+S9nOasiumpl+itieaooeadv+OAgicpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzLmFmZC5tYWluKHRhZ2dpbmdfcGFnZSk7XG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0ZmZkOiB7XG5cdFx0XHRtYWluOiAodGFnZ2luZ19wYWdlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHRhZ2dpbmdfcGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdFx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzLmZmZC50YWdnaW5nSW1hZ2UodGFnZ2luZ19wYWdlKTtcblx0XHRcdFx0Ly8gQWRkaW5nIGRpc2N1c3Npb25cblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYXJhbXMubG9ncGFnZSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOWFpeiuqOiuuuWIsOW9k+aXpeWIl+ihqCcsICfliqDlhaXoqI7oq5bliLDnlbbml6XliJfooagnKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLmxvYWQoVHdpbmtsZS54ZmQuY2FsbGJhY2tzLmZmZC50b2RheXNMaXN0KTtcblx0XHRcdFx0Ly8gTm90aWZpY2F0aW9uIHRvIGZpcnN0IGNvbnRyaWJ1dG9yXG5cdFx0XHRcdGlmIChwYXJhbXMubm90aWZ5KSB7XG5cdFx0XHRcdFx0Ly8gRGlzYWxsb3cgd2FybmluZyB5b3Vyc2VsZlxuXHRcdFx0XHRcdGlmIChwYXJhbXMuY3JlYXRvciA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKSB7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfpgJrnn6XpobXpnaLliJvlu7rogIXvvIgnLCAn6YCa55+l6aCB6Z2i5bu656uL6ICF77yIJykgKyBwYXJhbXMuY3JlYXRvcn3vvIlgLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aCqOWIm+W7uuS6huivpemhte+8jOi3s+i/h+mAmuefpScsICfmgqjlu7rnq4vkuoboqbLpoIHvvIzot7PpgY7pgJrnn6UnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgdGFsa1BhZ2VOYW1lID0gYFVzZXIgdGFsazoke3BhcmFtcy5jcmVhdG9yfWA7XG5cdFx0XHRcdFx0Y29uc3QgdXNlcnRhbGtwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdHRhbGtQYWdlTmFtZSxcblx0XHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn6YCa55+l6aG16Z2i5Yib5bu66ICF77yIJywgJ+mAmuefpemggemdouW7uueri+iAhe+8iCcpICsgcGFyYW1zLmNyZWF0b3J977yJYFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3Qgbm90aWZ5dGV4dCA9ICdcXG57eycuY29uY2F0KCdzdWJzdDonLCBgaWR3fEZpbGU6JHttdy5jb25maWcuZ2V0KCd3Z1RpdGxlJyl9fX1gLCAnLS1+ficsICd+ficpO1xuXHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRBcHBlbmRUZXh0KG5vdGlmeXRleHQpO1xuXHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRFZGl0U3VtbWFyeShg6YCa55+l77ya5paH5Lu2W1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXeWtmOW6n+iuqOiuuuaPkOWQjWApO1xuXHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZigneGZkV2F0Y2hVc2VyJykpO1xuXHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdFx0dXNlcnRhbGtwYWdlLmFwcGVuZCgpO1xuXHRcdFx0XHRcdC8vIGFkZCB0aGlzIG5vbWluYXRpb24gdG8gdGhlIHVzZXIncyB1c2Vyc3BhY2UgbG9nLCBpZiB0aGUgdXNlciBoYXMgZW5hYmxlZCBpdFxuXHRcdFx0XHRcdGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRcdFx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzLmFkZFRvTG9nKHBhcmFtcywgcGFyYW1zLmNyZWF0b3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBvciwgaWYgbm90IG5vdGlmeWluZywgYWRkIHRoaXMgbm9taW5hdGlvbiB0byB0aGUgdXNlcidzIHVzZXJzcGFjZSBsb2cgd2l0aG91dCB0aGUgaW5pdGlhbCBjb250cmlidXRvcidzIG5hbWVcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRcdFR3aW5rbGUueGZkLmNhbGxiYWNrcy5hZGRUb0xvZyhwYXJhbXMsIG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGFnZ2luZ0ltYWdlOiAocGFnZW9iaikgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KFxuXHRcdFx0XHRcdGB7e2lmZHwke01vcmViaXRzLnN0cmluZy5mb3JtYXRSZWFzb25UZXh0KHBhcmFtcy54ZmRyZWFzb24pfXxkYXRlPXt7YC5jb25jYXQoXG5cdFx0XHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0XHRcdGAjdGltZTpjfX19fVxcbiR7dGV4dH1gXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn5paH5Lu25a2Y5bqf6K6o6K6677yaW1snLCAn5qqU5qGI5a2Y5bui6KiO6KuW77yaW1snKSArIHBhcmFtcy5sb2dwYWdlfSMke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXWBcblx0XHRcdFx0KTtcblx0XHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZigneGZkV2F0Y2hQYWdlJykpO1xuXHRcdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTsgLy8gaXQgbWlnaHQgYmUgcG9zc2libGUgZm9yIGEgZmlsZSB0byBleGlzdCB3aXRob3V0IGEgZGVzY3JpcHRpb24gcGFnZVxuXHRcdFx0XHRwYWdlb2JqLnNhdmUoKTtcblx0XHRcdH0sXG5cdFx0XHR0b2RheXNMaXN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0XHQvLyBjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEFwcGVuZFRleHQoXG5cdFx0XHRcdFx0J1xcbnt7Jy5jb25jYXQoXG5cdFx0XHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0XHRcdGBJZmRJdGVtfEZpbGVuYW1lPSR7bXcuY29uZmlnLmdldCgnd2dUaXRsZScpfXxVcGxvYWRlcj0ke1xuXHRcdFx0XHRcdFx0XHRwYXJhbXMuY3JlYXRvclxuXHRcdFx0XHRcdFx0fXxSZWFzb249JHtNb3JlYml0cy5zdHJpbmcuZm9ybWF0UmVhc29uVGV4dChwYXJhbXMueGZkcmVhc29uKX19fS0tfn5gLmNvbmNhdCgnfn4nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShg5Yqg5YWlW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXWApO1xuXHRcdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0cGFnZW9iai5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCd4ZmRXYXRjaERpc2N1c3Npb24nKSk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdFx0XHRwYWdlb2JqLmFwcGVuZCgoKSA9PiB7XG5cdFx0XHRcdFx0VHdpbmtsZS54ZmQuY3VycmVudFJhdGlvbmFsZSA9IG51bGw7IC8vIGFueSBlcnJvcnMgZnJvbSBub3cgb24gZG8gbm90IG5lZWQgdG8gcHJpbnQgdGhlIHJhdGlvbmFsZSwgYXMgaXQgaXMgc2FmZWx5IHNhdmVkIG9uLXdpa2lcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXG5cdFx0XHRsb29rdXBDcmVhdGlvbjogKHRhcmdldF9wYWdlKSA9PiB7XG5cdFx0XHRcdHRhcmdldF9wYWdlLmdldFN0YXR1c0VsZW1lbnQoKS5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0gdGFyZ2V0X3BhZ2UuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRcdHBhcmFtcy5jcmVhdG9yID0gdGFyZ2V0X3BhZ2UuZ2V0Q3JlYXRvcigpO1xuXHRcdFx0XHQvLyBUYWdnaW5nIGZpbGVcblx0XHRcdFx0Y29uc3QgdGFnZ2luZ19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDlhaXlrZjlup/orqjorrrmqKHmnb/liLDmlofku7bmj4/ov7DpobUnLCAn5Yqg5YWl5a2Y5bui6KiO6KuW5qih5p2/5Yiw5qqU5qGI5o+P6L+w6aCBJylcblx0XHRcdFx0KTtcblx0XHRcdFx0dGFnZ2luZ19wYWdlLnNldEZvbGxvd1JlZGlyZWN0KGZhbHNlKTtcblx0XHRcdFx0dGFnZ2luZ19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHR0YWdnaW5nX3BhZ2UubG9hZChUd2lua2xlLnhmZC5jYWxsYmFja3MuZmZkLnRyeVRhZ2dpbmcpO1xuXHRcdFx0fSxcblx0XHRcdHRyeVRhZ2dpbmc6ICh0YWdnaW5nX3BhZ2UpID0+IHtcblx0XHRcdFx0Y29uc3Qgc3RhdGVsZW0gPSB0YWdnaW5nX3BhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpO1xuXHRcdFx0XHRpZiAoIXRhZ2dpbmdfcGFnZS5leGlzdHMoKSkge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn6aG16Z2i5LiN5a2Y5Zyo77yM5Y+v6IO95bey6KKr5Yig6ZmkJywgJ+mggemdouS4jeWtmOWcqO+8jOWPr+iDveW3suiiq+WIqumZpCcpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGV4dCA9IHRhZ2dpbmdfcGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRjb25zdCB4ZmQgPSAvKD86XFx7XFx7KFtyc2FpZnRjbXZdZmR8bWQxfHByb3Bvc2VkIGRlbGV0aW9uKVtee31dKj9cXH1cXH0pL2kuZXhlYyh0ZXh0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHhmZCAmJlxuXHRcdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfliKDpmaTnm7jlhbPmqKHmnb97eycsICfliKrpmaTnm7jpl5zmqKHmnb97eycpICtcblx0XHRcdFx0XHRcdFx0eGZkWzFdICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCd9feW3suiiq+e9ruS6jumhtemdouS4re+8jOaCqOaYr+WQpuS7jeaDs+e7p+e7reaPkOaKpe+8nycsXG5cdFx0XHRcdFx0XHRcdFx0J3195bey6KKr572u5pa86aCB6Z2i5Lit77yM5oKo5piv5ZCm5LuN5oOz57m857qM5o+Q5aCx77yfJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzdGF0ZWxlbS5lcnJvcih3aW5kb3cud2dVTFMoJ+mhtemdouW3suiiq+aPkOS6pOiHs+WtmOW6n+iuqOiuuuOAgicsICfpoIHpnaLlt7Looqvmj5DkuqToh7PlrZjlu6LoqI7oq5bjgIInKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFR3aW5rbGUueGZkLmNhbGxiYWNrcy5mZmQubWFpbih0YWdnaW5nX3BhZ2UpO1xuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGFkZFRvTG9nOiAocGFyYW1zLCBpbml0aWFsQ29udHJpYikgPT4ge1xuXHRcdFx0Y29uc3QgZWRpdHN1bW1hcnkgPVxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iusOW9leWvuVtbJywgJ+iomOmMhOWwjVtbJykgK1xuXHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ11d55qE5a2Y5bqf6K6o6K665o+Q5ZCNJywgJ11d55qE5a2Y5bui6KiO6KuW5o+Q5ZCNJyk7XG5cdFx0XHRjb25zdCB1c2wgPSBuZXcgTW9yZWJpdHMudXNlcnNwYWNlTG9nZ2VyKFR3aW5rbGUuZ2V0UHJlZigneGZkTG9nUGFnZU5hbWUnKSk7XG5cdFx0XHR1c2wuaW5pdGlhbFRleHQgPSB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdGDov5nmmK/or6XnlKjmiLfkvb/nlKhbW0g6VFd8VHdpbmtsZV1d55qE5o+Q5Yig5qih5Z2X5YGa5Ye655qEW1tMSUI6WEZEfOWtmOW6n+iuqOiuul1d5o+Q5ZCN5YiX6KGo44CCXFxuXFxu6Iul5oKo5LiN5YaN5oOz5L+d55WZ5q2k5pel5b+X77yM6K+35ZyoW1ske1R3aW5rbGUuZ2V0UHJlZihcblx0XHRcdFx0XHQnY29uZmlnUGFnZSdcblx0XHRcdFx0KX185Y+C5pWw6K6+572uXV3kuK3lhbPmjonvvIzlubbkvb/nlKhbW0xJQjpDU0QjTzF8Q1NEIE8xXV3mj5DkuqTlv6vpgJ/liKDpmaTjgIJgLFxuXHRcdFx0XHRg6YCZ5piv6Kmy5L2/55So6ICF5L2/55SoW1tIOlRXfFR3aW5rbGVdXeeahOaPkOWIquaooeWhiuWBmuWHuueahFtbTElCOlhGRHzlrZjlu6LoqI7oq5ZdXeaPkOWQjeWIl+ihqOOAglxcblxcbuiLpeaCqOS4jeWGjeaDs+S/neeVmeatpOaXpeiqjO+8jOiri+WcqFtbJHtUd2lua2xlLmdldFByZWYoXG5cdFx0XHRcdFx0J2NvbmZpZ1BhZ2UnXG5cdFx0XHRcdCl9fOWBj+WlveioreWuml1d5Lit6Zec5o6J77yM5Lim5L2/55SoW1tMSUI6Q1NEI08xfENTRCBPMV1d5o+Q5Lqk5b+r6YCf5Yiq6Zmk44CCYFxuXHRcdFx0KTtcblx0XHRcdGxldCB4ZmRDYXROYW1lO1xuXHRcdFx0c3dpdGNoIChwYXJhbXMueGZkY2F0KSB7XG5cdFx0XHRcdGNhc2UgJ2RlbGV0ZSc6XG5cdFx0XHRcdFx0eGZkQ2F0TmFtZSA9IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIqumZpCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdtZXJnZSc6XG5cdFx0XHRcdFx0eGZkQ2F0TmFtZSA9IHdpbmRvdy53Z1VMUygn5ZCI5bm25YiwJywgJ+WQiOS9teWIsCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdmd2Rjc2QnOlxuXHRcdFx0XHRcdHhmZENhdE5hbWUgPSB3aW5kb3cud2dVTFMoJ+i9rOS6pOiHquW/q+mAn+WIoOmZpOWAmemAiScsICfovYnkuqToh6rlv6vpgJ/liKrpmaTlgJnpgbgnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZmFtZSc6XG5cdFx0XHRcdFx0eGZkQ2F0TmFtZSA9IHdpbmRvdy53Z1VMUygn5om56YeP5YWz5rOo5bqm5o+Q5YigJywgJ+aJueasoemXnOazqOW6puaPkOWIqicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdzdWJzdHViJzpcblx0XHRcdFx0XHR4ZmRDYXROYW1lID0gd2luZG93LndnVUxTKCfmibnph4/lsI/lsI/kvZzlk4Hmj5DliKAnLCAn5om55qyh5bCP5bCP5L2c5ZOB5o+Q5YiqJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2JhdGNoJzpcblx0XHRcdFx0XHR4ZmRDYXROYW1lID0gd2luZG93LndnVUxTKCfmibnph4/lhbbku5bmj5DliKAnLCAn5om55qyh5YW25LuW5o+Q5YiqJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0eGZkQ2F0TmFtZSA9IHdpbmRvdy53Z1VMUygn5paH5Lu25a2Y5bqf6K6o6K66JywgJ+aqlOahiOWtmOW7ouiojuirlicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gSWYgYSBsb2dnZWQgZmlsZSBpcyBkZWxldGVkIGJ1dCBleGlzdHMgb24gcmVtb3RlIHJlcG8sIHRoZSB3aWtpbGluayB3aWxsIGJlIGJsdWUsIHNvIHByb3ZpZGUgYSBsaW5rIHRvIHRoZSBsb2dcblx0XHRcdGxldCBhcHBlbmRUZXh0ID0gYCMgW1s6JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19XV1gO1xuXHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYpIHtcblx0XHRcdFx0YXBwZW5kVGV4dCArPSBg77yIW3t7ZnVsbHVybDpTcGVjaWFsOkxvZ3xwYWdlPSR7bXcudXRpbC53aWtpVXJsZW5jb2RlKFxuXHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKVxuXHRcdFx0XHQpfX19ICR7d2luZG93LndnVUxTKCfml6Xlv5cnLCAn5pel6KqMJyl9Xe+8iWA7XG5cdFx0XHR9XG5cdFx0XHRhcHBlbmRUZXh0ICs9IGDvvJoke3hmZENhdE5hbWV9YDtcblx0XHRcdGlmIChwYXJhbXMueGZkY2F0ID09PSAnbWVyZ2UnKSB7XG5cdFx0XHRcdGFwcGVuZFRleHQgKz0gYFtbOiR7cGFyYW1zLm1lcmdlaW50b31dXWA7XG5cdFx0XHR9XG5cdFx0XHRhcHBlbmRUZXh0ICs9ICfjgIInO1xuXHRcdFx0aWYgKHBhcmFtcy54ZmRyZWFzb24pIHtcblx0XHRcdFx0YXBwZW5kVGV4dCArPSBgJycnJHtcblx0XHRcdFx0XHRwYXJhbXMueGZkY2F0ID09PSAnZndkY3NkJyA/IHdpbmRvdy53Z1VMUygn5Y6f5Yig6Zmk55CG5o2uJywgJ+WOn+WIqumZpOeQhuaTmicpIDogd2luZG93LndnVUxTKCfnkIbmja4nLCAn55CG5pOaJylcblx0XHRcdFx0fScnJ++8miR7TW9yZWJpdHMuc3RyaW5nLmZvcm1hdFJlYXNvbkZvckxvZyhwYXJhbXMueGZkcmVhc29uKX1gO1xuXHRcdFx0XHRhcHBlbmRUZXh0ID0gTW9yZWJpdHMuc3RyaW5nLmFwcGVuZFB1bmN0dWF0aW9uKGFwcGVuZFRleHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy5md2Rjc2RyZWFzb24pIHtcblx0XHRcdFx0YXBwZW5kVGV4dCArPSBgJycnJHtcblx0XHRcdFx0XHRwYXJhbXMueGZkY2F0ID09PSAnZndkY3NkJyA/IHdpbmRvdy53Z1VMUygn6L2s5Lqk55CG5o2uJywgJ+i9ieS6pOeQhuaTmicpIDogd2luZG93LndnVUxTKCfnkIbmja4nLCAn55CG5pOaJylcblx0XHRcdFx0fScnJ++8miR7TW9yZWJpdHMuc3RyaW5nLmZvcm1hdFJlYXNvbkZvckxvZyhwYXJhbXMuZndkY3NkcmVhc29uKX1gO1xuXHRcdFx0XHRhcHBlbmRUZXh0ID0gTW9yZWJpdHMuc3RyaW5nLmFwcGVuZFB1bmN0dWF0aW9uKGFwcGVuZFRleHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGluaXRpYWxDb250cmliKSB7XG5cdFx0XHRcdGFwcGVuZFRleHQgKz0gYO+8m+mAmuefpXt7dXNlcnwke2luaXRpYWxDb250cmlifX19YDtcblx0XHRcdH1cblx0XHRcdGFwcGVuZFRleHQgKz0gJyB+ficuY29uY2F0KCd+ficsICd+XFxuJyk7XG5cdFx0XHR1c2wuY2hhbmdlVGFncyA9IFR3aW5rbGUuY2hhbmdlVGFncztcblx0XHRcdHVzbC5sb2coYXBwZW5kVGV4dCwgZWRpdHN1bW1hcnkpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUueGZkLmNhbGxiYWNrLmV2YWx1YXRlID0gKGUpID0+IHtcblx0XHRjb25zdCBwYXJhbXMgPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0SW5wdXREYXRhKGUudGFyZ2V0KTtcblx0XHRpZiAocGFyYW1zLnhmZGNhdCA9PT0gJ21lcmdlJyAmJiBwYXJhbXMubWVyZ2VpbnRvLnRyaW0oKSA9PT0gJycpIHtcblx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ivt+aPkOS+m+WQiOW5tuebruagh++8gScsICfoq4vmj5DkvpvlkIjkvbXnm67mqJnvvIEnKSwge1xuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdHRhZzogJ3R3aW5rbGV4ZmQnLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZS50YXJnZXQpO1xuXHRcdFR3aW5rbGUueGZkLmN1cnJlbnRSYXRpb25hbGUgPSBwYXJhbXMueGZkcmVhc29uO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5vbkVycm9yKFR3aW5rbGUueGZkLnByaW50UmF0aW9uYWxlKTtcblx0XHRpZiAoIXBhcmFtcy5jYXRlZ29yeSkge1xuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLmVycm9yKCfplJnor68nLCAn5pyq5a6a5LmJ55qE5Yqo5L2cJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRfcGFnZTtcblx0XHRjb25zdCBkYXRlID0gbmV3IE1vcmViaXRzLmRhdGUoKTsgLy8gWFhYOiBhdm9pZCB1c2Ugb2YgY2xpZW50IGNsb2NrLCBzdGlsbCB1c2VkIGJ5IFRmRCwgRmZEIGFuZCBDZkRcblx0XHRzd2l0Y2ggKHBhcmFtcy5jYXRlZ29yeSkge1xuXHRcdFx0Y2FzZSAnYWZkJzpcblx0XHRcdFx0Ly8gQUZEXG5cdFx0XHRcdHBhcmFtcy5sb2dwYWdlID0gYExJQl90YWxrOuWtmOW6n+iuqOiuui/orrDlvZUvJHtkYXRlLmZvcm1hdCgnWVlZWS9NTS9ERCcsICd1dGMnKX1gO1xuXHRcdFx0XHRwYXJhbXMubG9nbm9taW5hdGlvbiA9XG5cdFx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdsb2dYZmROb21pbmF0aW9ucycpICYmXG5cdFx0XHRcdFx0IVR3aW5rbGUuZ2V0UHJlZignbm9Mb2dPblhmZE5vbWluYXRpb24nKS5pbmNsdWRlcyhwYXJhbXMueGZkY2F0KTtcblx0XHRcdFx0TW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50KCk7XG5cdFx0XHRcdC8vIFVwZGF0aW5nIGRhdGEgZm9yIHRoZSBhY3Rpb24gY29tcGxldGVkIGV2ZW50XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gcGFyYW1zLmxvZ3BhZ2U7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5o+Q5ZCN5a6M5oiQ77yM6YeN5a6a5ZCR5Yiw6K6o6K666aG1Jyxcblx0XHRcdFx0XHQn5o+Q5ZCN5a6M5oiQ77yM6YeN5paw5bCO5ZCR5Yiw6KiO6KuW6aCBJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBMb29rdXAgY3JlYXRpb25cblx0XHRcdFx0dGFyZ2V0X3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPlumhtemdouWIm+W7uuS/oeaBrycsICflj5blvpfpoIHpnaLlu7rnq4vos4foqIonKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0YXJnZXRfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZUNvbnRlbnRNb2RlbCcpID09PSAnd2lraXRleHQnKSB7XG5cdFx0XHRcdFx0dGFyZ2V0X3BhZ2Uuc2V0TG9va3VwTm9uUmVkaXJlY3RDcmVhdG9yKHRydWUpOyAvLyBMb29rIGZvciBhdXRob3Igb2YgZmlyc3Qgbm9uLXJlZGlyZWN0IHJldmlzaW9uXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXRfcGFnZS5sb29rdXBDcmVhdGlvbihUd2lua2xlLnhmZC5jYWxsYmFja3MuYWZkLmxvb2t1cENyZWF0aW9uKTtcblx0XHRcdFx0TW9yZWJpdHMud2lraS5yZW1vdmVDaGVja3BvaW50KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZmZkJzoge1xuXHRcdFx0XHQvLyBGRkRcblx0XHRcdFx0cGFyYW1zLmxvZ3BhZ2UgPSBgTElCX3RhbGs65a2Y5bqf6K6o6K66L+iusOW9lS8ke2RhdGUuZm9ybWF0KCdZWVlZL01NL0REJywgJ3V0YycpfWA7XG5cdFx0XHRcdHBhcmFtcy5sb2dub21pbmF0aW9uID1cblx0XHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ2xvZ1hmZE5vbWluYXRpb25zJykgJiYgIVR3aW5rbGUuZ2V0UHJlZignbm9Mb2dPblhmZE5vbWluYXRpb24nKS5pbmNsdWRlcygnZmZkJyk7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWRkQ2hlY2twb2ludCgpO1xuXHRcdFx0XHQvLyBVcGRhdGluZyBkYXRhIGZvciB0aGUgYWN0aW9uIGNvbXBsZXRlZCBldmVudFxuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHBhcmFtcy5sb2dwYWdlO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+aPkOWQjeWujOaIkO+8jOmHjeWumuWQkeWIsOiuqOiuuumhtScsXG5cdFx0XHRcdFx0J+aPkOWQjeWujOaIkO+8jOmHjeaWsOWwjuWQkeWIsOiojuirlumggSdcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gTG9va3VwIGNyZWF0aW9uXG5cdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W6aG16Z2i5Yib5bu65L+h5oGvJywgJ+WPluW+l+mggemdouW7uueri+izh+ioiicpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldExvb2t1cE5vblJlZGlyZWN0Q3JlYXRvcih0cnVlKTsgLy8gTG9vayBmb3IgYXV0aG9yIG9mIGZpcnN0IG5vbi1yZWRpcmVjdCByZXZpc2lvblxuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9va3VwQ3JlYXRpb24oVHdpbmtsZS54ZmQuY2FsbGJhY2tzLmZmZC5sb29rdXBDcmVhdGlvbik7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kucmVtb3ZlQ2hlY2twb2ludCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdG13Lm5vdGlmeSgndHdpbmtsZXhmZO+8muacquWumuS5ieeahOexu+WIqycsIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZXhmZCcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUueGZkLCAneGZkJyk7XG59KSgpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZWltYWdlLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZWltYWdlKCkge1xuXHQvKipcblx0ICogdHdpbmtsZWltYWdlLmpzOiBJbWFnZSBDU0QgbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIChcIkRJXCIpXG5cdCAqIEFjdGl2ZSBvbjogTG9jYWwgbm9ucmVkaXJlY3QgZmlsZSBwYWdlcyAobm90IG9uIFNoYXJlKVxuXHQgKi9cblx0VHdpbmtsZS5pbWFnZSA9ICgpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSA2ICYmXG5cdFx0XHQhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI213LXNoYXJlZHVwbG9hZCcpICYmXG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctaW1hZ2VwYWdlLXNlY3Rpb24tZmlsZWhpc3RvcnknKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFx0VHdpbmtsZS5pbWFnZS5jYWxsYmFjayxcblx0XHRcdFx0d2luZG93LndnVUxTKCflm77mnYMnLCAn5ZyW5qyKJyksXG5cdFx0XHRcdCd0dy1kaScsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5o+Q5Lqk5paH5Lu25b+r6YCf5Yig6ZmkJywgJ+aPkOS6pOaqlOahiOW/q+mAn+WIqumZpCcpXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5pbWFnZS5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgMzMwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCfmlofku7blv6vpgJ/liKDpmaTlgJnpgIknLCAn5qqU5qGI5b+r6YCf5Yiq6Zmk5YCZ6YG4JykpO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflv6vpgJ/liKDpmaTmnaHkvosnLCAn5b+r6YCf5Yiq6Zmk5qKd5L6LJyksICdMSUI6Q1NEJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflm77mnYPorr7nva4nLCAn5ZyW5qyK6Kit5a6aJyksICdIOlRXL1BSRUYjaW1hZ2UnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0MjaW1hZ2UnKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLmltYWdlLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCa55+l5LiK5Lyg6ICFJywgJ+mAmuefpeS4iuWCs+iAhScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm90aWZ5Jyxcblx0XHRcdFx0XHRuYW1lOiAnbm90aWZ5Jyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Iul5oKo5Zyo5qCH6K6w5ZCM5LiA55So5oi355qE5b6I5aSa5paH5Lu277yM6K+35Y+W5raI5q2k5aSN6YCJ5qGG5Lul6YG/5YWN5Y+R6YCB6L+H5aSa5raI5oGv44CCQ1NEIEY15rC46L+c5LiN5Lya6YCa55+l44CCJyxcblx0XHRcdFx0XHRcdCfoi6XmgqjlnKjmqJnoqJjlkIzkuIDkvb/nlKjogIXnmoTlvojlpJrmqpTmoYjvvIzoq4vlj5bmtojmraTmoLjlj5bmlrnloYrku6Xpgb/lhY3nmbzpgIHpgY7lpJroqIrmga/jgIJDU0QgRjXmsLjpgaDkuI3mnIPpgJrnn6XjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmdldFByZWYoJ25vdGlmeVVzZXJPbkRlbGknKSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0Y29uc3QgZmllbGQgPSBmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6ZyA6KaB55qE5Yqo5L2cJywgJ+mcgOimgeeahOWLleS9nCcpLFxuXHRcdH0pO1xuXHRcdGZpZWxkLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAncmFkaW8nLFxuXHRcdFx0bmFtZTogJ3R5cGUnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5piO5pi+5L615p2D5LmL5paH5Lu277yIQ1NEIEYx77yJJywgJ+aYjumhr+S+teasiuS5i+aqlOahiO+8iENTRCBGMe+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm8gcGVybWlzc2lvbicsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+S4iuS8oOiAheWuo+ensOaLpeacie+8jOiAjOWcqOWFtuS7luadpea6kOaJvuWIsOeahOaWh+S7tu+8jOaIluS7juS+teadg+eahOadpea6kOiOt+WPlueahOaWh+S7tuOAgicsXG5cdFx0XHRcdFx0XHQn5LiK5YKz6ICF5a6j56ix5pOB5pyJ77yM6ICM5Zyo5YW25LuW5L6G5rqQ5om+5Yiw55qE5qqU5qGI77yM5oiW5b6e5L615qyK55qE5L6G5rqQ5Y+W5b6X55qE5qqU5qGI44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0c3ViZ3JvdXA6IHtcblx0XHRcdFx0XHRcdG5hbWU6ICdmMV9zb3VyY2UnLFxuXHRcdFx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S+teadg+adpea6kO+8micsICfkvrXmrIrkvobmupDvvJonKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p2l5rqQ5LiN5piO77yIQ1NEIEYz77yJJywgJ+S+hua6kOS4jeaYju+8iENTRCBGM++8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm8gc291cmNlJyxcblx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5pys5paH5Lu25bm25pyq5rOo5piO5Y6f5aeL5Ye65aSEJywgJ+acrOaqlOahiOS4puacquiou+aYjuWOn+Wni+WHuuiZlScpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pyq55+l6JGX5L2c5p2D5L+h5oGv77yIQ1NEIEYz77yJJywgJ+acquefpeiRl+S9nOasiuizh+ioiu+8iENTRCBGM++8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm8gbGljZW5zZScsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfmnKzmlofku7bnvLrlsJHokZfkvZzmnYPkv6Hmga8nLCAn5pys5qqU5qGI57y65bCR6JGX5L2c5qyK6LOH6KiKJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfokZfkvZzmnYPml6Dms5Xooqvmn6Xor4HvvIhDU0QgRjPvvIknLCAn6JGX5L2c5qyK54Sh5rOV6KKr5p+l6K2J77yIQ1NEIEYz77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdubyBsaWNlbnNlJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+acrOaWh+S7tuWjsOensOeahOiRl+S9nOadg+S/oeaBr+aXoOazleiiq+afpeivgScsICfmnKzmqpTmoYjogbLnqLHnmoTokZfkvZzmrIros4foqIrnhKHms5Xooqvmn6XorYknKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WPr+iiq+abv+S7o+eahOmdnuiHqueUseiRl+S9nOadg+aWh+S7tu+8iENTRCBGNO+8iScsICflj6/ooqvmm7/ku6PnmoTpnZ7oh6rnlLHokZfkvZzmrIrmqpTmoYjvvIhDU0QgRjTvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3JlcGxhY2VhYmxlIGZhaXIgdXNlJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5paH5Lu25LuF55So5LqO5o+P6L+w44CB6K+G5Yir5oiW6K+E6K665paH5Lu25Lit5bGV56S655qE5LqL54mp77yM5oiW5LuF55So5L2c5o+S5Zu+77yM5LiU5ruh6Laz5Lul5LiL5Zub5Liq5p2h5Lu25LmL5LiA44CC6Iul57uZ5Ye65LqG5YW25LuW5ZCI55CG5L2/55So5L6d5o2u77yM5LiN6YCC55So5pys5p2h44CC5aaC5a+55paH5Lu255qE5Y+v5pu/5Luj5oCn5a2Y5Zyo5LqJ6K6u77yM5bqU5Lqk5paH5Lu25a2Y5bqf6K6o6K665aSE55CG44CC5pys5p2h5Lmf5LiN6YCC55So5LqO5q2j5Zyo5oiW5pu+57uP55Sx5paH5Lu25a2Y5bqf6K6o6K665aSE55CG6L+H55qE5paH5Lu244CCJyxcblx0XHRcdFx0XHRcdCfmqpTmoYjlg4XnlKjmlrzmj4/ov7DjgIHovqjorZjmiJboqZXoq5bmqpTmoYjkuK3lsZXnpLrnmoTkuovnianvvIzmiJblg4XnlKjkvZzmj5LlnJbvvIzkuJTmu7/otrPku6XkuIvlm5vlgIvmop3ku7bkuYvkuIDjgILoi6Xntablh7rkuoblhbbku5blkIjnkIbkvb/nlKjkvp3mk5rvvIzkuI3pgannlKjmnKzmop3jgILlpoLlsI3mqpTmoYjnmoTlj6/mm7/ku6PmgKflrZjlnKjniK3orbDvvIzmh4nkuqTmqpTmoYjlrZjlu6LoqI7oq5bomZXnkIbjgILmnKzmop3kuZ/kuI3pgannlKjmlrzmraPlnKjmiJbmm77ntpPnlLHmqpTmoYjlrZjlu6LoqI7oq5bomZXnkIbpgY7nmoTmqpTmoYjjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRcdFx0bmFtZTogJ2Y0X3R5cGUnLFxuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgILnlKjnsbvlnovvvJonLCAn6YGp55So6aGe5Yil77yaJyksXG5cdFx0XHRcdFx0XHRzdHlsZTogJ3dpZHRoOiA4NSU7Jyxcblx0XHRcdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivt+mAieaLqScsICfoq4vpgbjmk4cnKSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0J+acieWFtuS7luiHqueUseiRl+S9nOadg+aWh+S7tuWxleekuuebuOWQjOeahOS6i+eJqScsXG5cdFx0XHRcdFx0XHRcdFx0XHQn5pyJ5YW25LuW6Ieq55Sx6JGX5L2c5qyK5qqU5qGI5bGV56S655u45ZCM55qE5LqL54mpJ1xuXHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICcxJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn5paH5Lu25o+P6L+w55qE5piv5Zyo5LiW5oiW5YGH5a6a5Zyo5LiW5Lq654mp44CB5LuN54S25a2Y5Zyo55qE5bu6562R44CB5a6k5aSW6ZuV5aGR5oiW5LuN54S25Zyo5ZSu55qE5ZWG5ZOB77yM5LiU6aKE6K6h6Ieq6KGM5ouN5pGE55qE54Wn54mH5LiN5Y+X5LuW5Lq66JGX5L2c5p2D5L+d5oqkJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfmqpTmoYjmj4/ov7DnmoTmmK/lnKjkuJbmiJblgYflrprlnKjkuJbkurrnianjgIHku43nhLblrZjlnKjnmoTlu7rnr4njgIHlrqTlpJbpm5XloZHmiJbku43nhLblnKjllK7nmoTllYblk4HvvIzkuJTpoJDoqIjoh6rooYzmi43mlJ3nmoTnm7jniYfkuI3lj5fku5bkurrokZfkvZzmrIrkv53orbcnXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJzInLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5paH5Lu25Li65Y+v6Ieq6KGM57uY5Yi255qE5Zyw5Zu+5oiW5Zu+6KGoJywgJ+aqlOahiOeCuuWPr+iHquihjOe5quijveeahOWcsOWcluaIluWcluihqCcpLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnMycsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0J+aWh+S7tuadpeiHquWVhuS4muWbvueJh+acuuaehO+8iOWmgkdldHR577yJJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfmqpTmoYjkvoboh6rllYbmpa3lnJbniYfmqZ/mp4vvvIjlpoJHZXR0ee+8iSdcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnNCcsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ayoeacieiiq+adoeebruS9v+eUqOeahOmdnuiHqueUseiRl+S9nOadg+aWh+S7tu+8iENTRCBGNe+8iScsXG5cdFx0XHRcdFx0XHQn5rKS5pyJ6KKr5qKd55uu5L2/55So55qE6Z2e6Ieq55Sx6JGX5L2c5qyK5qqU5qGI77yIQ1NEIEY177yJJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6ICdvcnBoYW5lZCBmYWlyIHVzZScsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+acrOaWh+S7tuS4uumdnuiHqueUseiRl+S9nOadg+S4lOayoeacieiiq+adoeebruS9v+eUqCcsXG5cdFx0XHRcdFx0XHQn5pys5qqU5qGI54K66Z2e6Ieq55Sx6JGX5L2c5qyK5LiU5rKS5pyJ6KKr5qKd55uu5L2/55SoJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ayoeacieWhq+WGmeS7u+S9leWQiOeQhuS9v+eUqOS+neaNrueahOmdnuiHqueUseiRl+S9nOadg+aWh+S7tu+8iENTRCBGNe+8iScsXG5cdFx0XHRcdFx0XHQn5rKS5pyJ5aGr5a+r5Lu75L2V5ZCI55CG5L2/55So5L6d5pOa55qE6Z2e6Ieq55Sx6JGX5L2c5qyK5qqU5qGI77yIQ1NEIEY177yJJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6ICdubyBmYWlyIHVzZSByYXRpb25hbGUnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfkuI3pgILnlKjkuo7mnInkuonorq7kvYblrozmlbTnmoTlkIjnkIbkvb/nlKjkvp3mja7jgILoi6XpnZ7oh6rnlLHokZfkvZzmnYPmlofku7blj6rmnInpg6jliIbmnaHnm67nmoTkvb/nlKjkvp3mja7vvIzkvYblkIzml7booqvkvb/nlKjkuo7mnKrmj5DkvpvlkIjnkIbkvb/nlKjkvp3mja7nmoTmnaHnm67vvIzliJnmnKzmlrnpkojkuZ/kuI3pgILnlKjjgIInLFxuXHRcdFx0XHRcdFx0J+S4jemBqeeUqOaWvOacieeIreitsOS9huWujOaVtOeahOWQiOeQhuS9v+eUqOS+neaTmuOAguiLpemdnuiHqueUseiRl+S9nOasiuaqlOahiOWPquaciemDqOWIhuaineebrueahOS9v+eUqOS+neaTmu+8jOS9huWQjOaZguiiq+S9v+eUqOaWvOacquaPkOS+m+WQiOeQhuS9v+eUqOS+neaTmueahOaineebru+8jOWJh+acrOaWuemHneS5n+S4jemBqeeUqOOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHQvLyBXZSBtdXN0IGluaXQgdGhlIHBhcmFtZXRlcnNcblx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRyZXN1bHQudHlwZVswXS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdH07XG5cdFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2suZXZhbHVhdGUgPSAoZXZlbnQpID0+IHtcblx0XHRsZXQgdHlwZTtcblx0XHRsZXQgbm90aWZ5ID0gZXZlbnQudGFyZ2V0Lm5vdGlmeS5jaGVja2VkO1xuXHRcdGNvbnN0IHR5cGVzID0gZXZlbnQudGFyZ2V0LnR5cGU7XG5cdFx0Zm9yIChjb25zdCB0eXBlXyBvZiB0eXBlcykge1xuXHRcdFx0aWYgKHR5cGVfLmNoZWNrZWQpIHtcblx0XHRcdFx0dHlwZSA9IHR5cGVfLnZhbHVlcztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBjc2Rjcml0O1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSAnbm8gc291cmNlJzpcblx0XHRcdFx0Y3NkY3JpdCA9ICdmMyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnbm8gbGljZW5zZSc6XG5cdFx0XHRcdGNzZGNyaXQgPSAnZjMnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ29ycGhhbmVkIGZhaXIgdXNlJzpcblx0XHRcdFx0Y3NkY3JpdCA9ICdmNSc7XG5cdFx0XHRcdG5vdGlmeSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ25vIHBlcm1pc3Npb24nOlxuXHRcdFx0XHRjc2Rjcml0ID0gJ2YxJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdubyBmYWlyIHVzZSByYXRpb25hbGUnOlxuXHRcdFx0XHRjc2Rjcml0ID0gJ2Y1Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyZXBsYWNlYWJsZSBmYWlyIHVzZSc6XG5cdFx0XHRcdGNzZGNyaXQgPSAnZjQnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVHdpbmtsZS5pbWFnZS5jYWxsYmFjay5ldmFsdWF0Ze+8muacquefpeadoeasvicpO1xuXHRcdH1cblx0XHRjb25zdCBsb2dub21pbmF0aW9uID1cblx0XHRcdFR3aW5rbGUuZ2V0UHJlZignbG9nU3BlZWR5Tm9taW5hdGlvbnMnKSAmJlxuXHRcdFx0IVR3aW5rbGUuZ2V0UHJlZignbm9Mb2dPblNwZWVkeU5vbWluYXRpb24nKS5pbmNsdWRlcyhjc2Rjcml0LnRvTG93ZXJDYXNlKCkpO1xuXHRcdGNvbnN0IHRlbXBsYXRlbmFtZSA9IHR5cGU7XG5cdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0dHlwZSxcblx0XHRcdHRlbXBsYXRlbmFtZSxcblx0XHRcdG5vcm1hbGl6ZWQ6IGNzZGNyaXQsXG5cdFx0XHRsb2dub21pbmF0aW9uLFxuXHRcdH07XG5cdFx0aWYgKGNzZGNyaXQgPT09ICdmMScpIHtcblx0XHRcdHBhcmFtcy5mMV9zb3VyY2UgPSBldmVudC50YXJnZXRbJ3R5cGUuZjFfc291cmNlJ10udmFsdWU7XG5cdFx0fVxuXHRcdGlmIChjc2Rjcml0ID09PSAnZjQnKSB7XG5cdFx0XHRjb25zdCBmNF90eXBlID0gZXZlbnQudGFyZ2V0Wyd0eXBlLmY0X3R5cGUnXS52YWx1ZTtcblx0XHRcdGlmICghZjRfdHlwZSkge1xuXHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ0NTRCBGNO+8muivt+mAieaLqemAgueUqOexu+Wei+OAgicsICdDU0QgRjTvvJroq4vpgbjmk4fpgannlKjpoZ7liKXjgIInKSwge1xuXHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHR0YWc6ICd0d2lua2xlaW1hZ2UnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cGFyYW1zLmY0X3R5cGUgPSBmNF90eXBlO1xuXHRcdH1cblx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGV2ZW50LnRhcmdldCk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKCfmoIforrDlrozmiJAnLCAn5qiZ6KiY5a6M5oiQJyk7XG5cdFx0Ly8gVGFnZ2luZyBpbWFnZVxuXHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOWFpeWIoOmZpOagh+iusCcsICfliqDlhaXliKrpmaTmqJnoqJgnKVxuXHRcdCk7XG5cdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2tzLnRhZ2dpbmdJbWFnZSk7XG5cdFx0Ly8gTm90aWZ5aW5nIHVwbG9hZGVyXG5cdFx0aWYgKG5vdGlmeSkge1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLmxvb2t1cENyZWF0aW9uKFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2tzLnVzZXJOb3RpZmljYXRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBhZGQgdG8gQ1NEIGxvZyBpZiBkZXNpcmVkXG5cdFx0XHRpZiAobG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRwYXJhbXMuZnJvbURJID0gdHJ1ZTtcblx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnVzZXIuYWRkVG9Mb2cocGFyYW1zLCBudWxsKTtcblx0XHRcdH1cblx0XHRcdC8vIE5vIGF1dG8tbm90aWZpY2F0aW9uLCBkaXNwbGF5IHdoYXQgd2FzIGdvaW5nIHRvIGJlIGFkZGVkLlxuXHRcdFx0aWYgKHR5cGUgIT09ICdvcnBoYW5lZCBmYWlyIHVzZScpIHtcblx0XHRcdFx0Y29uc3Qgbm90ZURhdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcblx0XHRcdFx0bm90ZURhdGEuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXG5cdFx0XHRcdFx0XHQne3snLmNvbmNhdCgnc3Vic3Q6JywgYFVwbG9hZHZpb25vdGljZXwke01vcmViaXRzLnBhZ2VOYW1lTm9ybX19fS0tfn5gLCAnfn4nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0J+aPkOekuicsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0Wyfov5nkupvlhoXlrrnlupTotLTov5vkuIrkvKDogIXlr7nor53pobXvvJonLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpLCBub3RlRGF0YV0sXG5cdFx0XHRcdFx0XHRbJ+mAmeS6m+WFp+WuueaHieiyvOmAsuS4iuWCs+iAheiojuirlumgge+8micsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyksIG5vdGVEYXRhXVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2tzID0ge1xuXHRcdHRhZ2dpbmdJbWFnZTogKHBhZ2VvYmopID0+IHtcblx0XHRcdGxldCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdC8vIHJlbW92ZSB0YWcgLSBkZWxldGlvbi10YWdnZWQgZmlsZXMgY2Fubm90IGJlIG1vdmVkXG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKFxuXHRcdFx0XHQvXFx7XFx7KG10Y3woY29weSB8bW92ZSApP3RvID8oc2hhcmV8Y29tbW9ucyl8bW92ZSB0byAocWl1d2VuIHNoYXJlfHdpa2ltZWRpYSBjb21tb25zKXxjb3B5IHRvIChxaXV3ZW4gc2hhcmV8d2lraW1lZGlhIGNvbW1vbnMpKVtefV0qXFx9XFx9L2dpLFxuXHRcdFx0XHQnJ1xuXHRcdFx0KTtcblx0XHRcdC8vIEFkZGluZyBkaXNjdXNzaW9uXG5cdFx0XHRpZiAocGFyYW1zLnR5cGUgIT09ICdvcnBoYW5lZCBmYWlyIHVzZScpIHtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHQnTElCX3RhbGs65a2Y5bqf6K6o6K66L+aWh+S7tuW/q+mAn+WIoOmZpOaPkOaKpScsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDlhaXlv6vpgJ/liKDpmaTorrDlvZXpobknLCAn5Yqg5YWl5b+r6YCf5Yiq6Zmk6KiY6YyE6aCFJylcblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHBhcmFtcyk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2tzLmltYWdlTGlzdCk7XG5cdFx0XHR9XG5cdFx0XHRsZXQgdGFnID0gJyc7XG5cdFx0XHRzd2l0Y2ggKHBhcmFtcy50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ29ycGhhbmVkIGZhaXIgdXNlJzpcblx0XHRcdFx0XHR0YWcgPSAne3snLmNvbmNhdCgnc3Vic3Q6JywgJ29ycGhhbmVkIGZhaXIgdXNlfX1cXG4nKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnbm8gcGVybWlzc2lvbic6XG5cdFx0XHRcdFx0dGFnID0gJ3t7Jy5jb25jYXQoXG5cdFx0XHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0XHRcdGAke3BhcmFtcy50ZW1wbGF0ZW5hbWV9L2F1dG98MT0ke3BhcmFtcy5mMV9zb3VyY2Vcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL2h0dHAvZywgJyYjMTA0O3R0cCcpXG5cdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXG4rL2csICdcXG4nKVxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXlxccyooW14qXSkvZ20sICcqICQxJylcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL15cXCogJC9tLCAnJyl9fX1cXG5gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncmVwbGFjZWFibGUgZmFpciB1c2UnOlxuXHRcdFx0XHRcdHRhZyA9ICd7eycuY29uY2F0KCdzdWJzdDonLCBgJHtwYXJhbXMudGVtcGxhdGVuYW1lfS9hdXRvfDE9JHtwYXJhbXMuZjRfdHlwZX19fVxcbmApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRhZyA9ICd7eycuY29uY2F0KCdzdWJzdDonLCBgJHtwYXJhbXMudGVtcGxhdGVuYW1lfS9hdXRvfX1cXG5gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNvbnN0IHRleHROb1NkID0gdGV4dC5yZXBsYWNlKFxuXHRcdFx0XHQvXFx7XFx7XFxzKihkYigtXFx3Kik/fGR8ZGVsZXRlfCg/Omhhbmd8aG9sZClbLSBdP29uKVxccyooXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyovZ2ksXG5cdFx0XHRcdCcnXG5cdFx0XHQpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0ZXh0ICE9PSB0ZXh0Tm9TZCAmJlxuXHRcdFx0XHRjb25maXJtKHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5LiK5om+5Yiw5b+r6YCf5Yig6Zmk5qih5p2/77yM6KaB56e76Zmk5ZCX77yfJywgJ+WcqOmggemdouS4iuaJvuWIsOW/q+mAn+WIqumZpOaooeadv++8jOimgeenu+mZpOWXju+8nycpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0Tm9TZDtcblx0XHRcdH1cblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQodGFnICsgdGV4dCk7XG5cdFx0XHRsZXQgZWRpdFN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+ivt+axguW/q+mAn+WIoOmZpO+8iCcsICfoq4vmsYLlv6vpgJ/liKrpmaTvvIgnKTtcblx0XHRcdGVkaXRTdW1tYXJ5ICs9IGBbW1FXOkNTRCMke3BhcmFtcy5ub3JtYWxpemVkLnRvVXBwZXJDYXNlKCl9fENTRCAke3BhcmFtcy5ub3JtYWxpemVkLnRvVXBwZXJDYXNlKCl9XV1gO1xuXHRcdFx0ZWRpdFN1bW1hcnkgKz0gJ++8iSc7XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KGVkaXRTdW1tYXJ5KTtcblx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZW9iai5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCdkZWxpV2F0Y2hQYWdlJykpO1xuXHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ25vY3JlYXRlJyk7XG5cdFx0XHRwYWdlb2JqLnNhdmUoKTtcblx0XHR9LFxuXHRcdHVzZXJOb3RpZmljYXRpb246IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0Y29uc3QgaW5pdGlhbENvbnRyaWIgPSBwYWdlb2JqLmdldENyZWF0b3IoKTtcblx0XHRcdC8vIGRpc2FsbG93IHdhcm5pbmcgeW91cnNlbGZcblx0XHRcdGlmIChpbml0aWFsQ29udHJpYiA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKSB7XG5cdFx0XHRcdHBhZ2VvYmpcblx0XHRcdFx0XHQuZ2V0U3RhdHVzRWxlbWVudCgpXG5cdFx0XHRcdFx0Lndhcm4oYOaCqO+8iCR7aW5pdGlhbENvbnRyaWJ977yJJHt3aW5kb3cud2dVTFMoJ+WIm+W7uuS6huivpemhte+8jOi3s+i/h+mAmuefpScsICflu7rnq4vkuoboqbLpoIHvvIzot7PpgY7pgJrnn6UnKX1gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHRhbGtQYWdlTmFtZSA9IGBVc2VyIHRhbGs6JHtpbml0aWFsQ29udHJpYn1gO1xuXHRcdFx0XHRjb25zdCB1c2VydGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdHRhbGtQYWdlTmFtZSxcblx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+mAmuefpeS4iuS8oOiAhScsICfpgJrnn6XkuIrlgrPogIUnKX3vvIgke2luaXRpYWxDb250cmlife+8iWBcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgbm90aWZ5dGV4dCA9ICdcXG57eycuY29uY2F0KFxuXHRcdFx0XHRcdCdzdWJzdDonLFxuXHRcdFx0XHRcdGBEaS0ke3BhcmFtcy50ZW1wbGF0ZW5hbWV9LW5vdGljZXwxPSR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfX19LS1+fmAsXG5cdFx0XHRcdFx0J35+J1xuXHRcdFx0XHQpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0QXBwZW5kVGV4dChub3RpZnl0ZXh0KTtcblx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6YCa55+l77ya5paH5Lu2W1snLCAn6YCa55+l77ya5qqU5qGIW1snKSArXG5cdFx0XHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCddXeW/q+mAn+WIoOmZpOaPkOWQjScsICddXeW/q+mAn+WIqumZpOaPkOWQjScpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCdkZWxpV2F0Y2hVc2VyJykpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2UuYXBwZW5kKCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBhZGQgdGhpcyBub21pbmF0aW9uIHRvIHRoZSB1c2VyJ3MgdXNlcnNwYWNlIGxvZywgaWYgdGhlIHVzZXIgaGFzIGVuYWJsZWQgaXRcblx0XHRcdGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRwYXJhbXMuZnJvbURJID0gdHJ1ZTtcblx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnVzZXIuYWRkVG9Mb2cocGFyYW1zLCBpbml0aWFsQ29udHJpYik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRpbWFnZUxpc3Q6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Ly8gY29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQoYCR7dGV4dH1cXG4qIFtbOiR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dLS1+fmAuY29uY2F0KCd+ficpKTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoYOWKoOWFpVtbJHtNb3JlYml0cy5wYWdlTmFtZU5vcm19XV1gKTtcblx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRwYWdlb2JqLnNhdmUoKTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmltYWdlLCAnaW1hZ2UnKTtcbn0pKCk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZXByb3RlY3QuanMgKi9cbihmdW5jdGlvbiB0d2lua2xlcHJvdGVjdCgkKSB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHQvKipcblx0ICogdHdpbmtsZXByb3RlY3QuanM6IFByb3RlY3QvUlBQIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IFRhYiAoXCJQUFwiL1wiUlBQXCIpXG5cdCAqIEFjdGl2ZSBvbjogTm9uLXNwZWNpYWwsIG5vbi1NZWRpYVdpa2kgcGFnZXNcblx0ICovXG5cdC8vIE5vdGU6IGEgbG90IG9mIGNvZGUgaW4gdGhpcyBtb2R1bGUgaXMgcmUtdXNlZC9jYWxsZWQgYnkgYmF0Y2hwcm90ZWN0LlxuXHRUd2lua2xlLnByb3RlY3QgPSAoKSA9PiB7XG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPCAwIHx8IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjayxcblx0XHRcdHdpbmRvdy53Z1VMUygn5L+d5oqkJywgJ+S/neittycpLFxuXHRcdFx0J3R3LXJwcCcsXG5cdFx0XHRNb3JlYml0cy51c2VySXNTeXNvcCA/IHdpbmRvdy53Z1VMUygn5L+d5oqk6aG16Z2iJywgJ+S/neitt+mggemdoicpIDogd2luZG93LndnVUxTKCfor7fmsYLkv53miqTpobXpnaInLCAn6KuL5rGC5L+d6K236aCB6Z2iJylcblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgV2luZG93ID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MjAsIDUzMCk7XG5cdFx0V2luZG93LnNldFRpdGxlKFxuXHRcdFx0TW9yZWJpdHMudXNlcklzU3lzb3Bcblx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+aWveihjOaIluivt+axguS/neaKpOmhtemdoicsICfmlr3ooYzmiJboq4vmsYLkv53orbfpoIHpnaInKVxuXHRcdFx0XHQ6IHdpbmRvdy53Z1VMUygn6K+35rGC5L+d5oqk6aG16Z2iJywgJ+iri+axguS/neitt+mggemdoicpXG5cdFx0KTtcblx0XHRXaW5kb3cuc2V0U2NyaXB0TmFtZSgnVHdpbmtsZScpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5L+d5oqk5p2h5L6LJywgJ+S/neitt+aineS+iycpLCAnTElCOlBST1QnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ+S/neaKpOiuvue9ricsICfkv53orbfoqK3lrponKSwgJ0g6VFcvUFJFRiNwcm90ZWN0Jyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI3Byb3RlY3QnKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suZXZhbHVhdGUpO1xuXHRcdGNvbnN0IGFjdGlvbmZpZWxkID0gZm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aTjeS9nOexu+WeiycsICfmk43kvZzpoZ7liKUnKSxcblx0XHR9KTtcblx0XHRpZiAoTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdGFjdGlvbmZpZWxkLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdyYWRpbycsXG5cdFx0XHRcdG5hbWU6ICdhY3Rpb250eXBlJyxcblx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5jaGFuZ2VBY3Rpb24sXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkv53miqTpobXpnaInLCAn5L+d6K236aCB6Z2iJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3Byb3RlY3QnLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFjdGlvbmZpZWxkLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAncmFkaW8nLFxuXHRcdFx0bmFtZTogJ2FjdGlvbnR5cGUnLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5jaGFuZ2VBY3Rpb24sXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor7fmsYLkv53miqTpobXpnaInLCAn6KuL5rGC5L+d6K236aCB6Z2iJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdyZXF1ZXN0Jyxcblx0XHRcdFx0XHR0b29sdGlwOlxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfoi6Xmgqjmg7PlnKhMSUI6UkZQUOivt+axguS/neaKpOatpOmhtScsICfoi6Xmgqjmg7PlnKhMSUI6UkZQUOiri+axguS/neitt+atpOmggScpICtcblx0XHRcdFx0XHRcdChNb3JlYml0cy51c2VySXNTeXNvcCA/ICfogIzkuI3mmK/oh6rooYzlrozmiJDjgIInIDogJ+OAgicpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICFNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eUqOS/neaKpOaooeadv+agh+iusOatpOmhtScsICfnlKjkv53orbfmqKHmnb/mqJnoqJjmraTpoIEnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3RhZycsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflj6/ku6XnlKjmraTkuLrpobXpnaLliqDkuIrlkIjpgILnmoTkv53miqTmqKHmnb/jgIInLCAn5Y+v5Lul55So5q2k54K66aCB6Z2i5Yqg5LiK5ZCI6YGp55qE5L+d6K235qih5p2/44CCJyksXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgPT09IDAgfHwgbXcuY29uZmlnLmdldCgnd2dQYWdlQ29udGVudE1vZGVsJykgPT09ICdTY3JpYnVudG8nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6kJywgJ+mgkOiorScpLFxuXHRcdFx0bmFtZTogJ2ZpZWxkX3ByZXNldCcsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdGxhYmVsOiAnMScsXG5cdFx0XHRuYW1lOiAnZmllbGQxJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6ICcyJyxcblx0XHRcdG5hbWU6ICdmaWVsZDInLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzdWJtaXQnLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGZvcm0ucmVuZGVyKCk7XG5cdFx0V2luZG93LnNldENvbnRlbnQocmVzdWx0KTtcblx0XHRXaW5kb3cuZGlzcGxheSgpO1xuXHRcdC8vIFdlIG11c3QgaW5pdCB0aGUgY29udHJvbHNcblx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRyZXN1bHQuYWN0aW9udHlwZVswXS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdFx0Ly8gZ2V0IGN1cnJlbnQgcHJvdGVjdGlvbiBsZXZlbCBhc3luY2hyb25vdXNseVxuXHRcdFR3aW5rbGUucHJvdGVjdC5mZXRjaFByb3RlY3Rpb25MZXZlbCgpO1xuXHR9O1xuXHQvLyBDdXN0b21pemFibGUgbmFtZXNwYWNlIGFuZCBGbGFnZ2VkUmV2cyBzZXR0aW5nc1xuXHQvLyBJbiB0aGVvcnkgaXQnZCBiZSBuaWNlIHRvIGhhdmUgcmVzdHJpY3Rpb25sZXZlbHMgZGVmaW5lZCBoZXJlLFxuXHQvLyBidXQgdGhvc2UgYXJlIG9ubHkgYXZhaWxhYmxlIHZpYSBhIHNpdGVpbmZvIHF1ZXJ5XG5cdC8vIExpbWl0IHRlbXBsYXRlIGVkaXRvcjsgYSBUd2lua2xlIHJlc3RyaWN0aW9uLCBub3QgYSBzaXRlIHNldHRpbmdcblx0Y29uc3QgaXNUZW1wbGF0ZSA9IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDEwIHx8IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDgyODtcblx0Ly8gQ29udGFpbnMgdGhlIGN1cnJlbnQgcHJvdGVjdGlvbiBsZXZlbCBpbiBhbiBvYmplY3Rcblx0Ly8gT25jZSBmaWxsZWQsIGl0IHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZTpcblx0Ly8geyBlZGl0OiB7IGxldmVsOiBcInN5c29wXCIsIGV4cGlyeTogPHNvbWUgZGF0ZT4sIGNhc2NhZGU6IHRydWUgfSwgLi4uIH1cblx0VHdpbmtsZS5wcm90ZWN0LmN1cnJlbnRQcm90ZWN0aW9uTGV2ZWxzID0ge307XG5cdFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25MZXZlbHMgPSB7fTtcblx0VHdpbmtsZS5wcm90ZWN0LmZldGNoUHJvdGVjdGlvbkxldmVsID0gYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IGFwaSA9IGluaXRNd0FwaSgnbW9yZWJpdHMuanM7IFR3aW5rbGUvMS4xJyk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdGluZGV4cGFnZWlkczogdHJ1ZSxcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRsaXN0OiAnbG9nZXZlbnRzJyxcblx0XHRcdFx0bGV0eXBlOiAncHJvdGVjdCcsXG5cdFx0XHRcdGxldGl0bGU6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdFx0cHJvcDogJ2luZm8nLFxuXHRcdFx0XHRpbnByb3A6ICdwcm90ZWN0aW9ufHdhdGNoZWQnLFxuXHRcdFx0XHR0aXRsZXM6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBwcm90ZWN0RGF0YSA9IGF3YWl0IGFwaS5nZXQocGFyYW1zKTtcblx0XHRcdGNvbnN0IFtwYWdlaWRdID0gcHJvdGVjdERhdGEucXVlcnkucGFnZWlkcztcblx0XHRcdGNvbnN0IHBhZ2UgPSBwcm90ZWN0RGF0YS5xdWVyeS5wYWdlc1twYWdlaWRdO1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IHt9O1xuXHRcdFx0Y29uc3QgcHJldmlvdXMgPSB7fTtcblx0XHRcdC8vIFNhdmUgcmVxdWVzdGVkIHBhZ2UncyB3YXRjaGVkIHN0YXR1cyBmb3IgbGF0ZXIgaW4gY2FzZSBuZWVkZWQgd2hlbiBmaWxpbmcgcmVxdWVzdFxuXHRcdFx0VHdpbmtsZS5wcm90ZWN0LndhdGNoZWQgPSBwYWdlLndhdGNobGlzdGV4cGlyeSB8fCBwYWdlLndhdGNoZWQgPT09ICcnO1xuXHRcdFx0Zm9yIChjb25zdCBwcm90ZWN0aW9uIG9mIHBhZ2UucHJvdGVjdGlvbikge1xuXHRcdFx0XHRpZiAocHJvdGVjdGlvbi50eXBlICE9PSAnYWZ0Jykge1xuXHRcdFx0XHRcdGN1cnJlbnRbcHJvdGVjdGlvbi50eXBlXSA9IHtcblx0XHRcdFx0XHRcdGxldmVsOiBwcm90ZWN0aW9uLmxldmVsLFxuXHRcdFx0XHRcdFx0ZXhwaXJ5OiBwcm90ZWN0aW9uLmV4cGlyeSxcblx0XHRcdFx0XHRcdGNhc2NhZGU6IHByb3RlY3Rpb24uY2FzY2FkZSA9PT0gJycsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gT25seSB1c2UgdGhlIGxvZyBleGNlcHQgdW5wcm90ZWN0XG5cdFx0XHRpZiAocHJvdGVjdERhdGEucXVlcnkubG9nZXZlbnRzLmxlbmd0aCA+PSAxICYmIHByb3RlY3REYXRhLnF1ZXJ5LmxvZ2V2ZW50c1swXS5hY3Rpb24gIT09ICd1bnByb3RlY3QnKSB7XG5cdFx0XHRcdFtUd2lua2xlLnByb3RlY3QucHJldmlvdXNQcm90ZWN0aW9uTG9nXSA9IHByb3RlY3REYXRhLnF1ZXJ5LmxvZ2V2ZW50cztcblx0XHRcdH0gZWxzZSBpZiAocHJvdGVjdERhdGEucXVlcnkubG9nZXZlbnRzLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRcdFssIFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25Mb2ddID0gcHJvdGVjdERhdGEucXVlcnkubG9nZXZlbnRzO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25Mb2cpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm90ZWN0aW9uIG9mIFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25Mb2cucGFyYW1zLmRldGFpbHMpIHtcblx0XHRcdFx0XHRpZiAocHJvdGVjdGlvbi50eXBlICE9PSAnYWZ0Jykge1xuXHRcdFx0XHRcdFx0cHJldmlvdXNbcHJvdGVjdGlvbi50eXBlXSA9IHtcblx0XHRcdFx0XHRcdFx0bGV2ZWw6IHByb3RlY3Rpb24ubGV2ZWwsXG5cdFx0XHRcdFx0XHRcdGV4cGlyeTogcHJvdGVjdGlvbi5leHBpcnksXG5cdFx0XHRcdFx0XHRcdGNhc2NhZGU6IHByb3RlY3Rpb24uY2FzY2FkZSA9PT0gJycsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gc2hvdyB0aGUgcHJvdGVjdGlvbiBsZXZlbCBhbmQgbG9nIGluZm9cblx0XHRcdFR3aW5rbGUucHJvdGVjdC5oYXNQcm90ZWN0TG9nID0gISFwcm90ZWN0RGF0YS5xdWVyeS5sb2dldmVudHMubGVuZ3RoO1xuXHRcdFx0VHdpbmtsZS5wcm90ZWN0LmN1cnJlbnRQcm90ZWN0aW9uTGV2ZWxzID0gY3VycmVudDtcblx0XHRcdFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25MZXZlbHMgPSBwcmV2aW91cztcblx0XHRcdFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5zaG93TG9nQW5kQ3VycmVudFByb3RlY3RJbmZvKCk7XG5cdFx0fSBjYXRjaCB7fVxuXHR9O1xuXHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suc2hvd0xvZ0FuZEN1cnJlbnRQcm90ZWN0SW5mbyA9ICgpID0+IHtcblx0XHRjb25zdCBjdXJyZW50bHlQcm90ZWN0ZWQgPSBPYmplY3Qua2V5cyhUd2lua2xlLnByb3RlY3QuY3VycmVudFByb3RlY3Rpb25MZXZlbHMpLmxlbmd0aCAhPT0gMDtcblx0XHRpZiAoVHdpbmtsZS5wcm90ZWN0Lmhhc1Byb3RlY3RMb2cgfHwgVHdpbmtsZS5wcm90ZWN0Lmhhc1N0YWJsZUxvZykge1xuXHRcdFx0Y29uc3QgJGxpbmtNYXJrdXAgPSAkKCc8c3Bhbj4nKTtcblx0XHRcdGlmIChUd2lua2xlLnByb3RlY3QuaGFzUHJvdGVjdExvZykge1xuXHRcdFx0XHQkbGlua01hcmt1cC5hcHBlbmQoXG5cdFx0XHRcdFx0JChcblx0XHRcdFx0XHRcdGA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIke213LnV0aWwuZ2V0VXJsKCdTcGVjaWFsOkxvZycsIHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiAndmlldycsXG5cdFx0XHRcdFx0XHRcdHBhZ2U6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ3Byb3RlY3QnLFxuXHRcdFx0XHRcdFx0fSl9XCI+JHt3aW5kb3cud2dVTFMoJ+S/neaKpOaXpeW/lycsICfkv53orbfml6XoqownKX08L2E+YFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0Lmhhc1N0YWJsZUxvZyA/ICQoJzxzcGFuPicpLmh0bWwoJyAmYnVsbDsgJykgOiBudWxsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdCgkYm9keS5maW5kKCdkaXZbbmFtZT1cImhhc3Byb3RlY3Rsb2dcIl0gc3BhbicpWzBdKTtcblx0XHRcdE1vcmViaXRzLnN0YXR1cy53YXJuKFxuXHRcdFx0XHRjdXJyZW50bHlQcm90ZWN0ZWRcblx0XHRcdFx0XHQ/IHdpbmRvdy53Z1VMUygn5YWI5YmN5L+d5oqkJywgJ+WFiOWJjeS/neittycpXG5cdFx0XHRcdFx0OiBbXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2k6aG16Z2i5pu+5ZyoJywgJ+atpOmggemdouabvuWcqCcpLFxuXHRcdFx0XHRcdFx0XHQkKFxuXHRcdFx0XHRcdFx0XHRcdGA8Yj4ke25ldyBNb3JlYml0cy5kYXRlKFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25Mb2cudGltZXN0YW1wKS5jYWxlbmRhcihcblx0XHRcdFx0XHRcdFx0XHRcdCd1dGMnXG5cdFx0XHRcdFx0XHRcdFx0KX08L2I+YFxuXHRcdFx0XHRcdFx0XHQpWzBdLFxuXHRcdFx0XHRcdFx0XHRg6KKrJHtUd2lua2xlLnByb3RlY3QucHJldmlvdXNQcm90ZWN0aW9uTG9nLnVzZXJ9JHt3aW5kb3cud2dVTFMoJ+S/neaKpCcsICfkv53orbcnKX3vvJpgLFxuXHRcdFx0XHRcdFx0XHQuLi5Ud2lua2xlLnByb3RlY3QuZm9ybWF0UHJvdGVjdGlvbkRlc2NyaXB0aW9uKFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25MZXZlbHMpLFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0JGxpbmtNYXJrdXBbMF1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KCRib2R5LmZpbmQoJ2RpdltuYW1lPVwiY3VycmVudHByb3RcIl0gc3BhbicpWzBdKTtcblx0XHRsZXQgcHJvdGVjdGlvbk5vZGUgPSBbXTtcblx0XHRsZXQgc3RhdHVzTGV2ZWwgPSAnaW5mbyc7XG5cdFx0cHJvdGVjdGlvbk5vZGUgPSBUd2lua2xlLnByb3RlY3QuZm9ybWF0UHJvdGVjdGlvbkRlc2NyaXB0aW9uKFR3aW5rbGUucHJvdGVjdC5jdXJyZW50UHJvdGVjdGlvbkxldmVscyk7XG5cdFx0aWYgKGN1cnJlbnRseVByb3RlY3RlZCkge1xuXHRcdFx0c3RhdHVzTGV2ZWwgPSAnd2Fybic7XG5cdFx0fVxuXHRcdE1vcmViaXRzLnN0YXR1c1tzdGF0dXNMZXZlbF0od2luZG93LndnVUxTKCflvZPliY3kv53miqTnrYnnuqcnLCAn55uu5YmN5L+d6K23562J57SaJyksIHByb3RlY3Rpb25Ob2RlKTtcblx0fTtcblx0VHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrLmNoYW5nZUFjdGlvbiA9IChlKSA9PiB7XG5cdFx0bGV0IGZpZWxkX3ByZXNldDtcblx0XHRsZXQgZmllbGQxO1xuXHRcdGxldCBmaWVsZDI7XG5cdFx0c3dpdGNoIChlLnRhcmdldC52YWx1ZXMpIHtcblx0XHRcdGNhc2UgJ3Byb3RlY3QnOlxuXHRcdFx0XHRmaWVsZF9wcmVzZXQgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6kJywgJ+mgkOiorScpLFxuXHRcdFx0XHRcdG5hbWU6ICdmaWVsZF9wcmVzZXQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZmllbGRfcHJlc2V0LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0bmFtZTogJ2NhdGVnb3J5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6npu5jorqTvvJonLCAn6YG45pOH6aCQ6Kit77yaJyksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5jaGFuZ2VQcmVzZXQsXG5cdFx0XHRcdFx0bGlzdDogbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKVxuXHRcdFx0XHRcdFx0PyBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblR5cGVzQWRtaW5cblx0XHRcdFx0XHRcdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25UeXBlc0NyZWF0ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZpZWxkMiA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkv53miqTpgInpobknLCAn5L+d6K236YG46aCFJyksXG5cdFx0XHRcdFx0bmFtZTogJ2ZpZWxkMicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRuYW1lOiAnY3VycmVudHByb3QnLFxuXHRcdFx0XHRcdGxhYmVsOiAnICcsXG5cdFx0XHRcdH0pOyAvLyBob2xkcyB0aGUgY3VycmVudCBwcm90ZWN0aW9uIGxldmVsLCBhcyBmaWxsZWQgb3V0IGJ5IHRoZSBhc3luYyBjYWxsYmFja1xuXHRcdFx0XHRmaWVsZDIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRuYW1lOiAnaGFzcHJvdGVjdGxvZycsXG5cdFx0XHRcdFx0bGFiZWw6ICcgJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIGZvciBleGlzdGluZyBwYWdlc1xuXHRcdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKSkge1xuXHRcdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5lZGl0bW9kaWZ5LFxuXHRcdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L+u5pS557yW6L6R5p2D6ZmQJywgJ+S/ruaUuee3qOi8r+asiumZkCcpLFxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdlZGl0bW9kaWZ5Jyxcblx0XHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn6Iul5q2k6aG55YWz6Zet77yM57yW6L6R5p2D6ZmQ5bCG5LiN5Lya5L+u5pS544CCJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfoi6XmraTpoIXpl5zplonvvIznt6jovK/mrIrpmZDlsIfkuI3mnIPkv67mlLnjgIInXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmaWVsZDIuYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ2VkaXRsZXZlbCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnvJbovpHmnYPpmZDvvJonLCAn57eo6Lyv5qyK6ZmQ77yaJyksXG5cdFx0XHRcdFx0XHRldmVudDogVHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMuZWRpdGxldmVsLFxuXHRcdFx0XHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZXZlbHMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHQvLyBGaWx0ZXIgVEUgb3V0c2lkZSBvZiB0ZW1wbGF0ZXMgYW5kIG1vZHVsZXNcblx0XHRcdFx0XHRcdFx0KGxldmVsKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGlzVGVtcGxhdGUgfHwgbGV2ZWwudmFsdWUgIT09ICd0ZW1wbGF0ZWVkaXRvcic7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZmllbGQyLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICdlZGl0ZXhwaXJ5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e7iOatouaXtumXtO+8micsICfntYLmraLmmYLplpPvvJonKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZG9DdXN0b21FeHBpcnkoZXZlbnQudGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQkKCdpbnB1dFtuYW1lPXNtYWxsXScsICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdmb3JtJykpWzBdLmNoZWNrZWQgPVxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LnRhcmdldC5zZWxlY3RlZEluZGV4ID49IDQ7IC8vIDEgbW9udGhcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vIGRlZmF1bHQgZXhwaXJ5IHNlbGVjdGlvbiAoMiBkYXlzKSBpcyBjb25kaXRpb25hbGx5IHNldCBpbiBUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suY2hhbmdlUHJlc2V0XG5cdFx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxlbmd0aHMsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZmllbGQyLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLm1vdmVtb2RpZnksXG5cdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkv67mlLnnp7vliqjmnYPpmZAnLCAn5L+u5pS556e75YuV5qyK6ZmQJyksXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ21vdmVtb2RpZnknLFxuXHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfoi6XmraTpobnooqvlhbPpl63vvIznp7vliqjmnYPpmZDlsIbkuI3ooqvkv67mlLnjgIInLFxuXHRcdFx0XHRcdFx0XHRcdFx0J+iLpeatpOmgheiiq+mXnOmWie+8jOenu+WLleasiumZkOWwh+S4jeiiq+S/ruaUueOAgidcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRuYW1lOiAnbW92ZWxldmVsJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+enu+WKqOadg+mZkO+8micsICfnp7vli5XmrIrpmZDvvJonKSxcblx0XHRcdFx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5tb3ZlbGV2ZWwsXG5cdFx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxldmVscy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdC8vIEF1dG9jb25maXJtZWQgaXMgcmVxdWlyZWQgZm9yIGEgbW92ZSwgcmVkdW5kYW50XG5cdFx0XHRcdFx0XHRcdChsZXZlbCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXZlbC52YWx1ZSAhPT0gJ2F1dG9jb25maXJtZWQnICYmIChpc1RlbXBsYXRlIHx8IGxldmVsLnZhbHVlICE9PSAndGVtcGxhdGVlZGl0b3InKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZmllbGQyLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICdtb3ZlZXhwaXJ5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e7iOatouaXtumXtO+8micsICfntYLmraLmmYLplpPvvJonKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZG9DdXN0b21FeHBpcnkoZXZlbnQudGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdC8vIGRlZmF1bHQgZXhwaXJ5IHNlbGVjdGlvbiAoMiBkYXlzKSBpcyBjb25kaXRpb25hbGx5IHNldCBpbiBUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suY2hhbmdlUHJlc2V0XG5cdFx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxlbmd0aHMsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZm9yIG5vbi1leGlzdGluZyBwYWdlc1xuXHRcdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRuYW1lOiAnY3JlYXRlbGV2ZWwnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yib5bu65p2D6ZmQ77yaJywgJ+W7uueri+asiumZkO+8micpLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLmNyZWF0ZWxldmVsLFxuXHRcdFx0XHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZXZlbHMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHQvLyBGaWx0ZXIgVEUgYWx3YXlzLCBhbmQgYXV0b2NvbmZpcm1lZCBpbiBtYWluc3BhY2Vcblx0XHRcdFx0XHRcdFx0KGxldmVsKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGxldmVsLnZhbHVlICE9PSAndGVtcGxhdGVlZGl0b3InO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRuYW1lOiAnY3JlYXRlZXhwaXJ5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e7iOatouaXtumXtO+8micsICfntYLmraLmmYLplpPvvJonKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZG9DdXN0b21FeHBpcnkoZXZlbnQudGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdC8vIGRlZmF1bHQgZXhwaXJ5IHNlbGVjdGlvbiAoaW5kZWZpbml0ZSkgaXMgY29uZGl0aW9uYWxseSBzZXQgaW4gVHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrLmNoYW5nZVByZXNldFxuXHRcdFx0XHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZW5ndGhzLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnY2xvc2UnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDor7fmsYLkv53miqTpobXpnaLkuK3nmoTor7fmsYInLCAn5qiZ6KiY6KuL5rGC5L+d6K236aCB6Z2i5Lit55qE6KuL5rGCJyksXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdG5hbWU6ICdwcm90ZWN0UmVhc29uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnkIbnlLHvvIjkv53miqTml6Xlv5fvvInvvJonLCAn55CG55Sx77yI5L+d6K235pel6KqM77yJ77yaJyksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoIW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgfHwgbXcuY29uZmlnLmdldCgnd2dQYWdlQ29udGVudE1vZGVsJykgPT09ICdTY3JpYnVudG8nKSB7XG5cdFx0XHRcdFx0Ly8gdGFnZ2luZyBpc24ndCByZWxldmFudCBmb3Igbm9uLWV4aXN0aW5nIG9yIG1vZHVsZSBwYWdlc1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRjYXNlICd0YWcnOlxuXHRcdFx0XHRmaWVsZDEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qCH6K6w6YCJ6aG5JywgJ+aomeiomOmBuOmghScpLFxuXHRcdFx0XHRcdG5hbWU6ICdmaWVsZDEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZmllbGQxLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bmFtZTogJ2N1cnJlbnRwcm90Jyxcblx0XHRcdFx0XHRsYWJlbDogJyAnLFxuXHRcdFx0XHR9KTsgLy8gaG9sZHMgdGhlIGN1cnJlbnQgcHJvdGVjdGlvbiBsZXZlbCwgYXMgZmlsbGVkIG91dCBieSB0aGUgYXN5bmMgY2FsbGJhY2tcblx0XHRcdFx0ZmllbGQxLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bmFtZTogJ2hhc3Byb3RlY3Rsb2cnLFxuXHRcdFx0XHRcdGxhYmVsOiAnICcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRuYW1lOiAndGFndHlwZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCJ5oup5L+d5oqk5qih5p2/77yaJywgJ+mBuOaTh+S/neitt+aooeadv++8micpLFxuXHRcdFx0XHRcdGxpc3Q6IFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVGFncyxcblx0XHRcdFx0XHRldmVudDogVHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMudGFndHlwZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZpZWxkMS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnc21hbGwnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkvb/nlKjlm77moIfvvIhzbWFsbD15ZXPvvIknLCAn5L2/55So5ZyW56S677yIc21hbGw9eWVz77yJJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5bCG57uZ5qih5p2/5Yqg5LiKfHNtYWxsPXllc+WPguaVsO+8jOaYvuekuuaIkOWPs+S4iuinkueahOS4gOaKiuaMgumUgeOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+Wwh+e1puaooeadv+WKoOS4inxzbWFsbD15ZXPlj4PmlbjvvIzpoa/npLrmiJDlj7PkuIrop5LnmoTkuIDmiormjpvpjpbjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnbm9pbmNsdWRlJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55SoJmx0O25vaW5jbHVkZSZndDvljIXoo7nkv53miqTmqKHmnb8nLCAn55SoJmx0O25vaW5jbHVkZSZndDvljIXoo7nkv53orbfmqKHmnb8nKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflsIbkv53miqTmqKHmnb/ljIXoo7nlnKgmbHQ7bm9pbmNsdWRlJmd0O+S4rScsXG5cdFx0XHRcdFx0XHRcdFx0J+Wwh+S/neitt+aooeadv+WMheijueWcqCZsdDtub2luY2x1ZGUmZ3Q75LitJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAxMCxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdzaG93ZXhwaXJ5Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5qih5p2/5pi+56S65Yiw5pyf5pe26Ze0JywgJ+WcqOaooeadv+mhr+ekuuWIsOacn+aZgumWkycpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+Wwhue7meaooeadv+WKoOS4inxleHBpcnnlj4LmlbAnLCAn5bCH57Wm5qih5p2/5Yqg5LiKfGV4cGlyeeWPg+aVuCcpLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRoaWRkZW46IGUudGFyZ2V0LnZhbHVlcyA9PT0gJ3RhZycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JlcXVlc3QnOlxuXHRcdFx0XHRmaWVsZF9wcmVzZXQgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L+d5oqk57G75Z6LJywgJ+S/neitt+mhnuWIpScpLFxuXHRcdFx0XHRcdG5hbWU6ICdmaWVsZF9wcmVzZXQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZmllbGRfcHJlc2V0LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0bmFtZTogJ2NhdGVnb3J5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnsbvlnovlkoznkIbnlLHvvJonLCAn6aGe5Yil5ZKM55CG55Sx77yaJyksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5jaGFuZ2VQcmVzZXQsXG5cdFx0XHRcdFx0bGlzdDogbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKVxuXHRcdFx0XHRcdFx0PyBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblR5cGVzXG5cdFx0XHRcdFx0XHQ6IFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVHlwZXNDcmVhdGUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCJ6aG5JywgJ+mBuOmghScpLFxuXHRcdFx0XHRcdG5hbWU6ICdmaWVsZDEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZmllbGQxLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bmFtZTogJ2N1cnJlbnRwcm90Jyxcblx0XHRcdFx0XHRsYWJlbDogJyAnLFxuXHRcdFx0XHR9KTsgLy8gaG9sZHMgdGhlIGN1cnJlbnQgcHJvdGVjdGlvbiBsZXZlbCwgYXMgZmlsbGVkIG91dCBieSB0aGUgYXN5bmMgY2FsbGJhY2tcblx0XHRcdFx0ZmllbGQxLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bmFtZTogJ2hhc3Byb3RlY3Rsb2cnLFxuXHRcdFx0XHRcdGxhYmVsOiAnICcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRuYW1lOiAnZXhwaXJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml7bplb/vvJonLCAn5pmC6ZW377yaJyksXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogJycsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuLTml7YnLCAn6Ieo5pmCJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAndGVtcG9yYXJ5Jyxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5rC45LmFJyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdpbmZpbml0eScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0XHRcdGxhYmVsOiAn55CG55Sx77yaJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn6L+Z546p5oSP5YS/6KKr5rW36LGa5ZCD5o6J5LqG77yBJywgJ+mAmeeOqeaEj+WFkuiiq+a1t+ixmuWQg+aOieS6hu+8gScpLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVwcm90ZWN0Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRsZXQgb2xkZmllbGQ7XG5cdFx0aWYgKGZpZWxkX3ByZXNldCkge1xuXHRcdFx0W29sZGZpZWxkXSA9ICQoZS50YXJnZXQuZm9ybSkuZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3ByZXNldFwiXScpO1xuXHRcdFx0b2xkZmllbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZmllbGRfcHJlc2V0LnJlbmRlcigpLCBvbGRmaWVsZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoZS50YXJnZXQuZm9ybSkuZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3ByZXNldFwiXScpLmNzcygnZGlzcGxheScsICdub25lJyk7XG5cdFx0fVxuXHRcdGlmIChmaWVsZDEpIHtcblx0XHRcdFtvbGRmaWVsZF0gPSAkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2ZpZWxkc2V0W25hbWU9XCJmaWVsZDFcIl0nKTtcblx0XHRcdG9sZGZpZWxkLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZpZWxkMS5yZW5kZXIoKSwgb2xkZmllbGQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2ZpZWxkc2V0W25hbWU9XCJmaWVsZDFcIl0nKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXHRcdH1cblx0XHRpZiAoZmllbGQyKSB7XG5cdFx0XHRbb2xkZmllbGRdID0gJChlLnRhcmdldC5mb3JtKS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGQyXCJdJyk7XG5cdFx0XHRvbGRmaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWVsZDIucmVuZGVyKCksIG9sZGZpZWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JChlLnRhcmdldC5mb3JtKS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGQyXCJdJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcblx0XHR9XG5cdFx0aWYgKGUudGFyZ2V0LnZhbHVlcyA9PT0gJ3Byb3RlY3QnKSB7XG5cdFx0XHQvLyBmYWtlIGEgY2hhbmdlIGV2ZW50IG9uIHRoZSBwcmVzZXQgZHJvcGRvd25cblx0XHRcdGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuXHRcdFx0ZXZ0LmluaXRFdmVudCgnY2hhbmdlJywgdHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmNhdGVnb3J5LmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdC8vIHJlZHVjZSB2ZXJ0aWNhbCBoZWlnaHQgb2YgZGlhbG9nXG5cdFx0XHQkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2ZpZWxkc2V0W25hbWU9XCJmaWVsZDJcIl0gc2VsZWN0JykucGFyZW50KCkuY3NzKHtcblx0XHRcdFx0ZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG5cdFx0XHRcdG1hcmdpblJpZ2h0OiAnMC41ZW0nLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIHJlLWFkZCBwcm90ZWN0aW9uIGxldmVsIGFuZCBsb2cgaW5mbywgaWYgaXQncyBhdmFpbGFibGVcblx0XHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suc2hvd0xvZ0FuZEN1cnJlbnRQcm90ZWN0SW5mbygpO1xuXHR9O1xuXHQvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYmF0Y2hwcm90ZWN0IGFzIHdlbGxcblx0VHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMgPSB7XG5cdFx0ZWRpdG1vZGlmeTogKGUpID0+IHtcblx0XHRcdGUudGFyZ2V0LmZvcm0uZWRpdGxldmVsLmRpc2FibGVkID0gIWUudGFyZ2V0LmNoZWNrZWQ7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmVkaXRleHBpcnkuZGlzYWJsZWQgPSAhZS50YXJnZXQuY2hlY2tlZCB8fCBlLnRhcmdldC5mb3JtLmVkaXRsZXZlbC52YWx1ZSA9PT0gJ2FsbCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmVkaXRsZXZlbC5zdHlsZS5jb2xvciA9IGUudGFyZ2V0LmNoZWNrZWQgPyAnJyA6ICd0cmFuc3BhcmVudCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmVkaXRleHBpcnkuc3R5bGUuY29sb3IgPSBlLnRhcmdldC5jaGVja2VkID8gJycgOiAndHJhbnNwYXJlbnQnO1xuXHRcdH0sXG5cdFx0ZWRpdGxldmVsOiAoZSkgPT4ge1xuXHRcdFx0ZS50YXJnZXQuZm9ybS5lZGl0ZXhwaXJ5LmRpc2FibGVkID0gZS50YXJnZXQudmFsdWUgPT09ICdhbGwnO1xuXHRcdH0sXG5cdFx0bW92ZW1vZGlmeTogKGUpID0+IHtcblx0XHRcdC8vIHN5bmMgbW92ZSBzZXR0aW5ncyB3aXRoIGVkaXQgc2V0dGluZ3MgaWYgYXBwbGljYWJsZVxuXHRcdFx0aWYgKGUudGFyZ2V0LmZvcm0ubW92ZWxldmVsLmRpc2FibGVkICYmICFlLnRhcmdldC5mb3JtLmVkaXRsZXZlbC5kaXNhYmxlZCkge1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVsZXZlbC52YWx1ZSA9IGUudGFyZ2V0LmZvcm0uZWRpdGxldmVsLnZhbHVlO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVleHBpcnkudmFsdWUgPSBlLnRhcmdldC5mb3JtLmVkaXRleHBpcnkudmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKGUudGFyZ2V0LmZvcm0uZWRpdGxldmVsLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0ubW92ZWxldmVsLnZhbHVlID0gJ3N5c29wJztcblx0XHRcdFx0ZS50YXJnZXQuZm9ybS5tb3ZlZXhwaXJ5LnZhbHVlID0gJ2luZmluaXR5Jztcblx0XHRcdH1cblx0XHRcdGUudGFyZ2V0LmZvcm0ubW92ZWxldmVsLmRpc2FibGVkID0gIWUudGFyZ2V0LmNoZWNrZWQ7XG5cdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVleHBpcnkuZGlzYWJsZWQgPSAhZS50YXJnZXQuY2hlY2tlZCB8fCBlLnRhcmdldC5mb3JtLm1vdmVsZXZlbC52YWx1ZSA9PT0gJ2FsbCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVsZXZlbC5zdHlsZS5jb2xvciA9IGUudGFyZ2V0LmNoZWNrZWQgPyAnJyA6ICd0cmFuc3BhcmVudCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVleHBpcnkuc3R5bGUuY29sb3IgPSBlLnRhcmdldC5jaGVja2VkID8gJycgOiAndHJhbnNwYXJlbnQnO1xuXHRcdH0sXG5cdFx0bW92ZWxldmVsOiAoZSkgPT4ge1xuXHRcdFx0ZS50YXJnZXQuZm9ybS5tb3ZlZXhwaXJ5LmRpc2FibGVkID0gZS50YXJnZXQudmFsdWUgPT09ICdhbGwnO1xuXHRcdH0sXG5cdFx0Y3JlYXRlbGV2ZWw6IChlKSA9PiB7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmNyZWF0ZWV4cGlyeS5kaXNhYmxlZCA9IGUudGFyZ2V0LnZhbHVlID09PSAnYWxsJztcblx0XHR9LFxuXHRcdHRhZ3R5cGU6IChlKSA9PiB7XG5cdFx0XHRlLnRhcmdldC5mb3JtLnNtYWxsLmRpc2FibGVkID0gZS50YXJnZXQudmFsdWUgPT09ICdub25lJyB8fCBlLnRhcmdldC52YWx1ZSA9PT0gJ25vb3AnO1xuXHRcdFx0ZS50YXJnZXQuZm9ybS5ub2luY2x1ZGUuZGlzYWJsZWQgPSBlLnRhcmdldC52YWx1ZSA9PT0gJ25vbmUnIHx8IGUudGFyZ2V0LnZhbHVlID09PSAnbm9vcCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLnNob3dleHBpcnkuZGlzYWJsZWQgPSBlLnRhcmdldC52YWx1ZSA9PT0gJ25vbmUnIHx8IGUudGFyZ2V0LnZhbHVlID09PSAnbm9vcCc7XG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS5wcm90ZWN0LmRvQ3VzdG9tRXhwaXJ5ID0gKHRhcmdldCkgPT4ge1xuXHRcdGNvbnN0IGN1c3RvbSA9IHByb21wdChcblx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+i+k+WFpeiHquWumuS5iee7iOatouaXtumXtOOAglxcbuaCqOWPr+S7peS9v+eUqOebuOWvueaXtumXtO+8jOWmguKAnDEgbWludXRl4oCd5oiW4oCcMTkgZGF5c+KAne+8jOaIlue7neWvueaXtumXtOKAnHl5eXltbWRkaGhtbeKAne+8iOWmguKAnDIwMDYwMjAxMTQwNeKAneaYrzIwMDblubQwMuaciDAx5pelMTTvvJowNe+8iFVUQ++8ie+8iScsXG5cdFx0XHRcdCfovLjlhaXoh6roqILntYLmraLmmYLplpPjgIJcXG7mgqjlj6/ku6Xkvb/nlKjnm7jlsI3mmYLplpPvvIzlpoLjgIwxIG1pbnV0ZeOAjeaIluOAjDE5IGRheXPjgI3vvIzmiJbntZXlsI3mmYLplpPjgIx5eXl5bW1kZGhobW3jgI3vvIjlpoLjgIwyMDA2MDIwMTE0MDXjgI3mmK8yMDA25bm0MDLmnIgwMeaXpTE077yaMDXvvIhVVEPvvInvvIknXG5cdFx0XHQpLFxuXHRcdFx0Jydcblx0XHQpO1xuXHRcdGlmIChjdXN0b20pIHtcblx0XHRcdGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXHRcdFx0b3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBjdXN0b20pO1xuXHRcdFx0b3B0aW9uLnRleHRDb250ZW50ID0gY3VzdG9tO1xuXHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKG9wdGlvbik7XG5cdFx0XHR0YXJnZXQudmFsdWUgPSBjdXN0b207XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5zZWxlY3RlZEluZGV4ID0gMDtcblx0XHR9XG5cdH07XG5cdC8vIE5PVEU6IFRoaXMgbGlzdCBpcyB1c2VkIGJ5IGJhdGNocHJvdGVjdCBhcyB3ZWxsXG5cdFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uTGV2ZWxzID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiAn5YWo6YOoJyxcblx0XHRcdHZhbHVlOiAnYWxsJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S7heWFgeiuuOiHquWKqOehruiupOeUqOaItycsICflg4XlhYHoqLHoh6rli5Xnorroqo3kvb/nlKjogIUnKSxcblx0XHRcdHZhbHVlOiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfku4XmqKHmnb/nvJbovpHlkZjlkoznrqHnkIblkZgnLCAn5YOF5qih5p2/57eo6Lyv5ZOh5ZKM566h55CG5ZOhJyksXG5cdFx0XHR2YWx1ZTogJ3RlbXBsYXRlZWRpdG9yJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S7heeuoeeQhuWRmCcsICflg4XnrqHnkIblk6EnKSxcblx0XHRcdHZhbHVlOiAnc3lzb3AnLFxuXHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfku4XlhYHorrjmoaPmoYjnkIbkuovlkZgnLCAn5YOF5YWB6Kix5qqU5qGI55CG5LqL5ZOhJyksXG5cdFx0XHR2YWx1ZTogJ29mZmljaWFscHJvdGVjdGVkJyxcblx0XHR9LFxuXHRdO1xuXHQvLyBkZWZhdWx0IGV4cGlyeSBzZWxlY3Rpb24gaXMgY29uZGl0aW9uYWxseSBzZXQgaW4gVHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrLmNoYW5nZVByZXNldFxuXHQvLyBOT1RFOiBUaGlzIGxpc3QgaXMgdXNlZCBieSBiYXRjaHByb3RlY3QgYXMgd2VsbFxuXHRUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxlbmd0aHMgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICcx5aSpJyxcblx0XHRcdHZhbHVlOiAnMSBkYXknLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICcz5aSpJyxcblx0XHRcdHZhbHVlOiAnMyBkYXlzJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJzHlkagnLCAnMemAsScpLFxuXHRcdFx0dmFsdWU6ICcxIHdlZWsnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnMuWRqCcsICcy6YCxJyksXG5cdFx0XHR2YWx1ZTogJzIgd2Vla3MnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnMeS4quaciCcsICcx5YCL5pyIJyksXG5cdFx0XHR2YWx1ZTogJzEgbW9udGgnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnM+S4quaciCcsICcz5YCL5pyIJyksXG5cdFx0XHR2YWx1ZTogJzMgbW9udGhzJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJzbkuKrmnIgnLCAnNuWAi+aciCcpLFxuXHRcdFx0dmFsdWU6ICc2IG1vbnRocycsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJzHlubQnLFxuXHRcdFx0dmFsdWU6ICcxIHllYXInLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5peg6ZmQ5pyfJywgJ+eEoemZkOacnycpLFxuXHRcdFx0dmFsdWU6ICdpbmZpbml0eScsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnigKbigKYnLCAn6Ieq6KiC4oCm4oCmJyksXG5cdFx0XHR2YWx1ZTogJ2N1c3RvbScsXG5cdFx0fSxcblx0XTtcblx0VHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25UeXBlc0FkbWluID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ino+mZpOS/neaKpCcsICfop6PpmaTkv53orbcnKSxcblx0XHRcdHZhbHVlOiAndW5wcm90ZWN0Jyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WFqOS/neaKpCcsICflhajkv53orbcnKSxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W4uOinhO+8iOWFqO+8iScsICfluLjopo/vvIjlhajvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXByb3RlY3RlZCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuonorq7jgIHnvJbovpHmiJjvvIjlhajvvIknLCAn54it6K2w44CB57eo6Lyv5oiw77yI5YWo77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1kaXNwdXRlJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmqKHmnb/kv53miqQnLCAn5qih5p2/5L+d6K23JyksXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpq5jpo47pmanmqKHmnb/vvIjmqKHmnb/vvIknLCAn6auY6aKo6Zqq5qih5p2/77yI5qih5p2/77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC10ZW1wbGF0ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y2K5L+d5oqkJywgJ+WNiuS/neittycpLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bi46KeE77yI5Y2K77yJJywgJ+W4uOimj++8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS1wcm90ZWN0ZWQnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5oyB57ut56C05Z2P77yI5Y2K77yJJywgJ+aMgee6jOegtOWjnu+8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS12YW5kYWxpc20nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N55Sf6ICF5Lyg6K6w5p2h5L6L77yI5Y2K77yJJywgJ+mBleWPjeeUn+iAheWCs+iomOaineS+i++8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS1ibHAnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YKA5YSh56C05Z2P77yI5Y2K77yJJywgJ+WCgOWEoeegtOWjnu+8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS1zb2NrJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mrmOmjjumZqeaooeadv++8iOWNiu+8iScsICfpq5jpoqjpmqrmqKHmnb/vvIjljYrvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXNlbWktdGVtcGxhdGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6KKr5bCB56aB55So5oi35rul55So6K6o6K666aG177yI5Y2K77yJJywgJ+iiq+WwgeemgeS9v+eUqOiAhea/q+eUqOiojuirlumgge+8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS11c2VydGFsaycsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56e75Yqo5L+d5oqkJywgJ+enu+WLleS/neittycpLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bi46KeE77yI56e75Yqo77yJJywgJ+W4uOimj++8iOenu+WLle+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtbW92ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuonorq7jgIHnp7vliqjmiJjvvIjnp7vliqjvvIknLCAn54it6K2w44CB56e75YuV5oiw77yI56e75YuV77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1tb3ZlLWRpc3B1dGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56e75Yqo56C05Z2P77yI56e75Yqo77yJJywgJ+enu+WLleegtOWjnu+8iOenu+WLle+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtbW92ZS12YW5kYWxpc20nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6auY6aOO6Zmp6aG16Z2i77yI56e75Yqo77yJJywgJ+mrmOmiqOmaqumggemdou+8iOenu+WLle+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtbW92ZS1pbmRlZicsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdF0uZmlsdGVyKFxuXHRcdChcblx0XHRcdC8vIEZpbHRlciBmb3IgdGVtcGxhdGVzXG5cdFx0XHR7bGFiZWx9XG5cdFx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNUZW1wbGF0ZSB8fCAobGFiZWwgIT09ICfmqKHmnb/kv53miqQnICYmIGxhYmVsICE9PSAn5qih5p2/5L+d6K23Jyk7XG5cdFx0fVxuXHQpO1xuXHRUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblR5cGVzQ3JlYXRlT25seSA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnmb3nurjkv53miqQnLCAn55m957SZ5L+d6K23JyksXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfluLjop4TvvIjnmb3nurjvvIknLCAn5bi46KaP77yI55m957SZ77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1jcmVhdGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5aSa5qyh6YeN5aSN5Yib5bu677yI55m957q477yJJywgJ+WkmuasoemHjeikh+W7uueri++8iOeZvee0me+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtY3JlYXRlLXJlcGVhdCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmjIHnu63noLTlnY/vvIjnmb3nurjvvIknLCAn5oyB57qM56C05aOe77yI55m957SZ77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1jcmVhdGUtdmFuZGFsaXNtJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W3suWwgeemgeeUqOaIt+eahOeUqOaIt+mhte+8iOeZvee6uO+8iScsICflt7LlsIHnpoHkvb/nlKjogIXnmoTkvb/nlKjogIXpoIHvvIjnmb3ntJnvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLWNyZWF0ZS11c2VycGFnZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVHlwZXMgPSBbXG5cdFx0Li4uVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25UeXBlc0FkbWluLFxuXHRcdC4uLlR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVHlwZXNDcmVhdGVPbmx5LFxuXHRdO1xuXHRUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblR5cGVzQ3JlYXRlID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiAn6Kej6Zmk5L+d5oqkJyxcblx0XHRcdHZhbHVlOiAndW5wcm90ZWN0Jyxcblx0XHR9LFxuXHRcdC4uLlR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVHlwZXNDcmVhdGVPbmx5LFxuXHRdO1xuXHQvLyBOT1RJQ0U6IGtlZXAgdGhpcyBzeW5jaGVkIHdpdGggW1tNZWRpYVdpa2k6UHJvdGVjdC1kcm9wZG93bl1dXG5cdC8vIGV4cGlyeSB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0c1xuXHRUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblByZXNldHNJbmZvID0ge1xuXHRcdCdwcC1wcm90ZWN0ZWQnOiB7XG5cdFx0XHRlZGl0OiAnc3lzb3AnLFxuXHRcdFx0bW92ZTogJ3N5c29wJyxcblx0XHRcdHJlYXNvbjogbnVsbCxcblx0XHR9LFxuXHRcdCdwcC1kaXNwdXRlJzoge1xuXHRcdFx0ZWRpdDogJ3N5c29wJyxcblx0XHRcdG1vdmU6ICdzeXNvcCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn57yW6L6R5oiYJywgJ+e3qOi8r+aIsCcpLFxuXHRcdH0sXG5cdFx0J3BwLXRlbXBsYXRlJzoge1xuXHRcdFx0ZWRpdDogJ3RlbXBsYXRlZWRpdG9yJyxcblx0XHRcdG1vdmU6ICd0ZW1wbGF0ZWVkaXRvcicsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygnW1tMSUI6SFJUfOmrmOmjjumZqeaooeadv11dJywgJ1tbTElCOkhSVHzpq5jpoqjpmqrmqKHmnb9dXScpLFxuXHRcdFx0dGVtcGxhdGU6ICdub29wJyxcblx0XHR9LFxuXHRcdCdwcC12YW5kYWxpc20nOiB7XG5cdFx0XHRlZGl0OiAnc3lzb3AnLFxuXHRcdFx0bW92ZTogJ3N5c29wJyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfooqvoh6rliqjnoa7orqTnlKjmiLfnoLTlnY8nLCAn6KKr6Ieq5YuV56K66KqN5L2/55So6ICF56C05aOeJyksXG5cdFx0fSxcblx0XHQncHAtc29jayc6IHtcblx0XHRcdGVkaXQ6ICdzeXNvcCcsXG5cdFx0XHRtb3ZlOiAnc3lzb3AnLFxuXHRcdFx0cmVhc29uOiB3aW5kb3cud2dVTFMoJ+aMgee7reeahOWCgOWEoeegtOWdjycsICfmjIHnuoznmoTlgoDlhKHnoLTlo54nKSxcblx0XHR9LFxuXHRcdCdwcC1zZW1pLXZhbmRhbGlzbSc6IHtcblx0XHRcdGVkaXQ6ICdhdXRvY29uZmlybWVkJyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfooqvmlrDnlKjmiLfnoLTlnY8nLCAn6KKr5paw5L2/55So6ICF56C05aOeJyksXG5cdFx0XHR0ZW1wbGF0ZTogJ3BwLXZhbmRhbGlzbScsXG5cdFx0fSxcblx0XHQncHAtc2VtaS1ibHAnOiB7XG5cdFx0XHRlZGl0OiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn5paw55So5oi36L+d5Y+N55Sf6ICF5Lyg6K6w5p2h5L6LJywgJ+aWsOS9v+eUqOiAhemBleWPjeeUn+iAheWCs+iomOaineS+iycpLFxuXHRcdH0sXG5cdFx0J3BwLXNlbWktdXNlcnRhbGsnOiB7XG5cdFx0XHRlZGl0OiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn6KKr5bCB56aB55So5oi35rul55So5YW26K6o6K666aG1JywgJ+iiq+WwgeemgeS9v+eUqOiAhea/q+eUqOWFtuiojuirlumggScpLFxuXHRcdH0sXG5cdFx0J3BwLXNlbWktdGVtcGxhdGUnOiB7XG5cdFx0XHQvLyByZW1vdmVkIGZvciBub3dcblx0XHRcdGVkaXQ6ICdhdXRvY29uZmlybWVkJyxcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCdbW0xJQjpIUlR86auY6aOO6Zmp5qih5p2/XV0nLCAnW1tMSUI6SFJUfOmrmOmiqOmaquaooeadv11dJyksXG5cdFx0XHR0ZW1wbGF0ZTogJ25vb3AnLFxuXHRcdH0sXG5cdFx0J3BwLXNlbWktc29jayc6IHtcblx0XHRcdGVkaXQ6ICdhdXRvY29uZmlybWVkJyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu63nmoTlgoDlhKHnoLTlnY8nLCAn5oyB57qM55qE5YKA5YSh56C05aOeJyksXG5cdFx0XHR0ZW1wbGF0ZTogJ3BwLXNvY2snLFxuXHRcdH0sXG5cdFx0J3BwLXNlbWktcHJvdGVjdGVkJzoge1xuXHRcdFx0ZWRpdDogJ2F1dG9jb25maXJtZWQnLFxuXHRcdFx0cmVhc29uOiBudWxsLFxuXHRcdFx0dGVtcGxhdGU6ICdwcC1wcm90ZWN0ZWQnLFxuXHRcdH0sXG5cdFx0J3BwLW1vdmUnOiB7XG5cdFx0XHRtb3ZlOiAnc3lzb3AnLFxuXHRcdFx0cmVhc29uOiBudWxsLFxuXHRcdH0sXG5cdFx0J3BwLW1vdmUtZGlzcHV0ZSc6IHtcblx0XHRcdG1vdmU6ICdzeXNvcCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn6aG16Z2i56e75Yqo5oiYJywgJ+mggemdouenu+WLleaIsCcpLFxuXHRcdH0sXG5cdFx0J3BwLW1vdmUtdmFuZGFsaXNtJzoge1xuXHRcdFx0bW92ZTogJ3N5c29wJyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfnp7vliqjnoLTlnY8nLCAn56e75YuV56C05aOeJyksXG5cdFx0fSxcblx0XHQncHAtbW92ZS1pbmRlZic6IHtcblx0XHRcdG1vdmU6ICdzeXNvcCcsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn6auY6aOO6Zmp6aG16Z2iJywgJ+mrmOmiqOmaqumggemdoicpLFxuXHRcdH0sXG5cdFx0dW5wcm90ZWN0OiB7XG5cdFx0XHRlZGl0OiAnYWxsJyxcblx0XHRcdG1vdmU6ICdhbGwnLFxuXHRcdFx0Y3JlYXRlOiAnYWxsJyxcblx0XHRcdHJlYXNvbjogbnVsbCxcblx0XHRcdHRlbXBsYXRlOiAnbm9uZScsXG5cdFx0fSxcblx0XHQncHAtY3JlYXRlJzoge1xuXHRcdFx0Y3JlYXRlOiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0XHRyZWFzb246IG51bGwsXG5cdFx0fSxcblx0XHQncHAtY3JlYXRlLXJlcGVhdCc6IHtcblx0XHRcdGNyZWF0ZTogJ2F1dG9jb25maXJtZWQnLFxuXHRcdFx0cmVhc29uOiB3aW5kb3cud2dVTFMoJ+WkmuasoemHjeWkjeWIm+W7uicsICflpJrmrKHph43opIflu7rnq4snKSxcblx0XHR9LFxuXHRcdCdwcC1jcmVhdGUtdmFuZGFsaXNtJzoge1xuXHRcdFx0Y3JlYXRlOiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn6KKr5paw55So5oi356C05Z2PJywgJ+iiq+aWsOS9v+eUqOiAheegtOWjnicpLFxuXHRcdH0sXG5cdFx0J3BwLWNyZWF0ZS11c2VycGFnZSc6IHtcblx0XHRcdGNyZWF0ZTogJ3N5c29wJyxcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfooqvmsLjkuYXlsIHnpoHnmoTnlKjmiLfpobUnLCAn6KKr5rC45LmF5bCB56aB55qE5L2/55So6ICF6aCB6Z2iJyksXG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25UYWdzID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aXoO+8iOenu+mZpOeOsOacieaooeadv++8iScsICfnhKHvvIjnp7vpmaTnj77mnInmqKHmnb/vvIknKSxcblx0XHRcdHZhbHVlOiAnbm9uZScsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml6DvvIjkuI3np7vpmaTnjrDmnInmqKHmnb/vvIknLCAn54Sh77yI5LiN56e76Zmk54++5pyJ5qih5p2/77yJJyksXG5cdFx0XHR2YWx1ZTogJ25vb3AnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICfpgJrnlKjmqKHmnb8nLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e3BwLWRpc3B1dGV9fTogJHt3aW5kb3cud2dVTFMoJ+S6ieiuricsICfniK3orbAnKX1gLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtZGlzcHV0ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7cHAtdmFuZGFsaXNtfX06ICR7d2luZG93LndnVUxTKCfnoLTlnY8nLCAn56C05aOeJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXZhbmRhbGlzbScsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJ3t7cHAtc29ja319OiDlgoDlhKEnLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc29jaycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7cHAtdGVtcGxhdGV9fTogJHt3aW5kb3cud2dVTFMoJ+mrmOmjjumZqeaooeadvycsICfpq5jpoqjpmqrmqKHmnb8nKX1gLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtdGVtcGxhdGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e3BwLXByb3RlY3RlZH19OiAke3dpbmRvdy53Z1VMUygn5bi46KeEJywgJ+W4uOimjycpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1wcm90ZWN0ZWQnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WNiuS/neaKpOaooeadvycsICfljYrkv53orbfmqKHmnb8nKSxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1zZW1pLXVzZXJ0YWxrfX06ICR7d2luZG93LndnVUxTKCflsIHnpoHnmoTnlKjmiLcnLCAn5bCB56aB55qE5L2/55So6ICFJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXNlbWktdXNlcnRhbGsnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e3BwLXNlbWktYmxwfX06ICR7d2luZG93LndnVUxTKCfnlJ/ogIXkvKDorrAnLCAn55Sf6ICF5YKz6KiYJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXNlbWktYmxwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1zZW1pLWluZGVmfX06ICR7d2luZG93LndnVUxTKCfplb/mnJ8nLCAn6ZW35pyfJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXNlbWktaW5kZWYnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+enu+WKqOS/neaKpOaooeadvycsICfnp7vli5Xkv53orbfmqKHmnb8nKSxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1tb3ZlLWRpc3B1dGV9fTogJHt3aW5kb3cud2dVTFMoJ+S6ieiuricsICfniK3orbAnKX1gLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtbW92ZS1kaXNwdXRlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1tb3ZlLXZhbmRhbGlzbX19OiAke3dpbmRvdy53Z1VMUygn56C05Z2PJywgJ+egtOWjnicpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1tb3ZlLXZhbmRhbGlzbScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7cHAtbW92ZS1pbmRlZn19OiAke3dpbmRvdy53Z1VMUygn6ZW/5pyfJywgJ+mVt+acnycpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1tb3ZlLWluZGVmJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1tb3ZlfX06ICR7d2luZG93LndnVUxTKCfluLjop4QnLCAn5bi46KaPJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLW1vdmUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suY2hhbmdlUHJlc2V0ID0gKGUpID0+IHtcblx0XHRjb25zdCB7Zm9ybX0gPSBlLnRhcmdldDtcblx0XHRjb25zdCBhY3Rpb250eXBlcyA9IGZvcm0uYWN0aW9udHlwZTtcblx0XHRsZXQgYWN0aW9udHlwZTtcblx0XHRmb3IgKGNvbnN0IGFjdGlvbl90eXBlX3ZhbHVlIG9mIGFjdGlvbnR5cGVzKSB7XG5cdFx0XHRpZiAoIWFjdGlvbl90eXBlX3ZhbHVlLmNoZWNrZWQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRhY3Rpb250eXBlID0gYWN0aW9uX3R5cGVfdmFsdWUudmFsdWVzO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmIChhY3Rpb250eXBlID09PSAncHJvdGVjdCcpIHtcblx0XHRcdC8vIGFjdHVhbGx5IHByb3RlY3RpbmcgdGhlIHBhZ2Vcblx0XHRcdGNvbnN0IGl0ZW0gPSBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblByZXNldHNJbmZvW2Zvcm0uY2F0ZWdvcnkudmFsdWVdO1xuXHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdFx0aWYgKGl0ZW0uZWRpdCkge1xuXHRcdFx0XHRcdGZvcm0uZWRpdG1vZGlmeS5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5lZGl0bW9kaWZ5KHtcblx0XHRcdFx0XHRcdHRhcmdldDogZm9ybS5lZGl0bW9kaWZ5LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGZvcm0uZWRpdGxldmVsLnZhbHVlID0gaXRlbS5lZGl0O1xuXHRcdFx0XHRcdFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLmVkaXRsZXZlbCh7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGZvcm0uZWRpdGxldmVsLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm0uZWRpdG1vZGlmeS5jaGVja2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMuZWRpdG1vZGlmeSh7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGZvcm0uZWRpdG1vZGlmeSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaXRlbS5tb3ZlKSB7XG5cdFx0XHRcdFx0Zm9ybS5tb3ZlbW9kaWZ5LmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLm1vdmVtb2RpZnkoe1xuXHRcdFx0XHRcdFx0dGFyZ2V0OiBmb3JtLm1vdmVtb2RpZnksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9ybS5tb3ZlbGV2ZWwudmFsdWUgPSBpdGVtLm1vdmU7XG5cdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMubW92ZWxldmVsKHtcblx0XHRcdFx0XHRcdHRhcmdldDogZm9ybS5tb3ZlbGV2ZWwsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybS5tb3ZlbW9kaWZ5LmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5tb3ZlbW9kaWZ5KHtcblx0XHRcdFx0XHRcdHRhcmdldDogZm9ybS5tb3ZlbW9kaWZ5LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvcm0uZWRpdGV4cGlyeS52YWx1ZSA9IGl0ZW0uZXhwaXJ5IHx8ICcxIHdlZWsnO1xuXHRcdFx0XHRmb3JtLm1vdmVleHBpcnkudmFsdWUgPSBpdGVtLmV4cGlyeSB8fCAnMSB3ZWVrJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpdGVtLmNyZWF0ZSkge1xuXHRcdFx0XHRcdGZvcm0uY3JlYXRlbGV2ZWwudmFsdWUgPSBpdGVtLmNyZWF0ZTtcblx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5jcmVhdGVsZXZlbCh7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGZvcm0uY3JlYXRlbGV2ZWwsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9ybS5jcmVhdGVleHBpcnkudmFsdWUgPSBpdGVtLmNyZWF0ZWV4cGlyeSB8fCAnMSB3ZWVrJztcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtLmNyZWF0ZWV4cGlyeS52YWx1ZSA9IGl0ZW0uZXhwaXJ5IHx8ICcxIHdlZWsnO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVhc29uRmllbGQgPSBhY3Rpb250eXBlID09PSAncHJvdGVjdCcgPyBmb3JtLnByb3RlY3RSZWFzb24gOiBmb3JtLnJlYXNvbjtcblx0XHRcdGlmIChpdGVtLnJlYXNvbikge1xuXHRcdFx0XHRyZWFzb25GaWVsZC52YWx1ZSA9IGl0ZW0ucmVhc29uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVhc29uRmllbGQudmFsdWUgPSAnJztcblx0XHRcdH1cblx0XHRcdC8vIHNvcnQgb3V0IHRhZ2dpbmcgb3B0aW9ucywgZGlzYWJsZWQgaWYgbm9uZXhpc3RlbnQgb3IgbHVhXG5cdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKSAmJiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VDb250ZW50TW9kZWwnKSAhPT0gJ1NjcmlidW50bycpIHtcblx0XHRcdFx0aWYgKGZvcm0uY2F0ZWdvcnkudmFsdWUgPT09ICd1bnByb3RlY3QnKSB7XG5cdFx0XHRcdFx0Zm9ybS50YWd0eXBlLnZhbHVlID0gJ25vbmUnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm0udGFndHlwZS52YWx1ZSA9IGl0ZW0udGVtcGxhdGUgPz8gZm9ybS5jYXRlZ29yeS52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy50YWd0eXBlKHtcblx0XHRcdFx0XHR0YXJnZXQ6IGZvcm0udGFndHlwZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmICgvdGVtcGxhdGUvLnRlc3QoZm9ybS5jYXRlZ29yeS52YWx1ZSkpIHtcblx0XHRcdFx0XHRmb3JtLm5vaW5jbHVkZS5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpICE9PSAxMCkge1xuXHRcdFx0XHRcdGZvcm0ubm9pbmNsdWRlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZm9ybS5jYXRlZ29yeS52YWx1ZSA9PT0gJ3VucHJvdGVjdCcpIHtcblx0XHRcdC8vIFJQUCByZXF1ZXN0XG5cdFx0XHRmb3JtLmV4cGlyeS52YWx1ZSA9ICcnO1xuXHRcdFx0Zm9ybS5leHBpcnkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtLmV4cGlyeS52YWx1ZSA9ICcnO1xuXHRcdFx0Zm9ybS5leHBpcnkuZGlzYWJsZWQgPSBmYWxzZTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IGlucHV0ID0gTW9yZWJpdHMucXVpY2tGb3JtLmdldElucHV0RGF0YShmb3JtKTtcblx0XHRsZXQgdGFncGFyYW1zO1xuXHRcdGlmIChcblx0XHRcdGlucHV0LmFjdGlvbnR5cGUgPT09ICd0YWcnIHx8XG5cdFx0XHQoaW5wdXQuYWN0aW9udHlwZSA9PT0gJ3Byb3RlY3QnICYmXG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlQ29udGVudE1vZGVsJykgIT09ICdTY3JpYnVudG8nKVxuXHRcdCkge1xuXHRcdFx0dGFncGFyYW1zID0ge1xuXHRcdFx0XHR0YWc6IGlucHV0LnRhZ3R5cGUsXG5cdFx0XHRcdHJlYXNvbjpcblx0XHRcdFx0XHQoaW5wdXQudGFndHlwZSA9PT0gJ3BwLXByb3RlY3RlZCcgfHxcblx0XHRcdFx0XHRcdGlucHV0LnRhZ3R5cGUgPT09ICdwcC1zZW1pLXByb3RlY3RlZCcgfHxcblx0XHRcdFx0XHRcdGlucHV0LnRhZ3R5cGUgPT09ICdwcC1tb3ZlJykgJiZcblx0XHRcdFx0XHRpbnB1dC5wcm90ZWN0UmVhc29uXG5cdFx0XHRcdFx0XHQ/IGlucHV0LnByb3RlY3RSZWFzb25cblx0XHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0c2hvd2V4cGlyeTogaW5wdXQuYWN0aW9udHlwZSA9PT0gJ3Byb3RlY3QnID8gaW5wdXQuc2hvd2V4cGlyeSA6IG51bGwsXG5cdFx0XHRcdHNtYWxsOiBpbnB1dC5zbWFsbCxcblx0XHRcdFx0bm9pbmNsdWRlOiBpbnB1dC5ub2luY2x1ZGUsXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGlucHV0LmFjdGlvbnR5cGUgPT09ICdwcm90ZWN0Jykge1xuXHRcdFx0XHRpZiAoaW5wdXQuZWRpdG1vZGlmeSkge1xuXHRcdFx0XHRcdHRhZ3BhcmFtcy5leHBpcnkgPSBpbnB1dC5lZGl0ZXhwaXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlucHV0Lm1vdmVtb2RpZnkpIHtcblx0XHRcdFx0XHR0YWdwYXJhbXMuZXhwaXJ5ID0gaW5wdXQubW92ZWV4cGlyeTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBjbG9zZXBhcmFtcyA9IHt9O1xuXHRcdGlmIChpbnB1dC5jbG9zZSkge1xuXHRcdFx0aWYgKGlucHV0LmNhdGVnb3J5ID09PSAndW5wcm90ZWN0Jykge1xuXHRcdFx0XHRjbG9zZXBhcmFtcy50eXBlID0gJ3VucHJvdGVjdCc7XG5cdFx0XHR9IGVsc2UgaWYgKG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdFx0aWYgKGlucHV0LmVkaXRtb2RpZnkpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGlucHV0LmVkaXRsZXZlbCkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnb2ZmaWNpYWxwcm90ZWN0ZWQnOlxuXHRcdFx0XHRcdFx0XHRjbG9zZXBhcmFtcy50eXBlID0gJ29mZmljaWFscHJvdGVjdGVkJztcblx0XHRcdFx0XHRcdFx0Y2xvc2VwYXJhbXMuZXhwaXJ5ID0gaW5wdXQuZWRpdGV4cGlyeTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdyZXZpc2lvbnByb3RlY3RlZCc6XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLnR5cGUgPSAncmV2aXNpb25wcm90ZWN0ZWQnO1xuXHRcdFx0XHRcdFx0XHRjbG9zZXBhcmFtcy5leHBpcnkgPSBpbnB1dC5lZGl0ZXhwaXJ5O1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3N5c29wJzpcblx0XHRcdFx0XHRcdFx0Y2xvc2VwYXJhbXMudHlwZSA9ICdmdWxsJztcblx0XHRcdFx0XHRcdFx0Y2xvc2VwYXJhbXMuZXhwaXJ5ID0gaW5wdXQuZWRpdGV4cGlyeTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd0ZW1wbGF0ZWVkaXRvcic6XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLnR5cGUgPSAndGVtcCc7XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLmV4cGlyeSA9IGlucHV0LmVkaXRleHBpcnk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYXV0b2NvbmZpcm1lZCc6XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLnR5cGUgPSAnc2VtaSc7XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLmV4cGlyeSA9IGlucHV0LmVkaXRleHBpcnk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRpbnB1dC5tb3ZlbW9kaWZ5ICYmXG5cdFx0XHRcdFx0WydvZmZpY2lhbHByb3RlY3RlZCcsICdyZXZpc2lvbnByb3RlY3RlZCcsICdzeXNvcCcsICd0ZW1wbGF0ZWVkaXRvciddLmluY2x1ZGVzKGlucHV0Lm1vdmVsZXZlbClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y2xvc2VwYXJhbXMudHlwZSA9ICdtb3ZlJztcblx0XHRcdFx0XHRjbG9zZXBhcmFtcy5leHBpcnkgPSBpbnB1dC5tb3ZlZXhwaXJ5O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlucHV0LmNyZWF0ZWxldmVsICE9PSAnYWxsJykge1xuXHRcdFx0XHRjbG9zZXBhcmFtcy50eXBlID0gJ3NhbHQnO1xuXHRcdFx0XHRjbG9zZXBhcmFtcy5leHBpcnkgPSBpbnB1dC5jcmVhdGVleHBpcnk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHN3aXRjaCAoaW5wdXQuYWN0aW9udHlwZSkge1xuXHRcdFx0Y2FzZSAncHJvdGVjdCc6IHtcblx0XHRcdFx0Ly8gcHJvdGVjdCB0aGUgcGFnZVxuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKCfkv53miqTlrozmiJAnLCAn5L+d6K235a6M5oiQJyk7XG5cdFx0XHRcdGxldCBzdGF0dXNJbml0ZWQgPSBmYWxzZTtcblx0XHRcdFx0bGV0IHRoaXNwYWdlO1xuXHRcdFx0XHRjb25zdCBhbGxEb25lID0gKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzcGFnZSkge1xuXHRcdFx0XHRcdFx0dGhpc3BhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFncGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2tzLnRhZ2dpbmdQYWdlSW5pdGlhbCh0YWdwYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2xvc2VwYXJhbXMgJiYgY2xvc2VwYXJhbXMudHlwZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcnBwUGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0XHRcdCdMSUJfdGFsazrpobXpnaLkv53miqTor7fmsYInLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WFs+mXreivt+axgicsICfpl5zplonoq4vmsYInKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJwcFBhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdFx0XHRycHBQYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhjbG9zZXBhcmFtcyk7XG5cdFx0XHRcdFx0XHRycHBQYWdlLmxvYWQoVHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrcy5jbG9zZVJlcXVlc3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgcHJvdGVjdEl0ID0gKG5leHQpID0+IHtcblx0XHRcdFx0XHR0aGlzcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/neaKpOmhtemdoicsICfkv53orbfpoIHpnaInKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdFx0XHRcdGlmIChpbnB1dC5lZGl0bW9kaWZ5KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXNwYWdlLnNldEVkaXRQcm90ZWN0aW9uKGlucHV0LmVkaXRsZXZlbCwgaW5wdXQuZWRpdGV4cGlyeSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoaW5wdXQubW92ZW1vZGlmeSkge1xuXHRcdFx0XHRcdFx0XHQvLyBFbnN1cmUgYSBsZXZlbCBoYXMgYWN0dWFsbHkgYmVlbiBjaG9zZW5cblx0XHRcdFx0XHRcdFx0aWYgKGlucHV0Lm1vdmVsZXZlbCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNwYWdlLnNldE1vdmVQcm90ZWN0aW9uKGlucHV0Lm1vdmVsZXZlbCwgaW5wdXQubW92ZWV4cGlyeSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5oKo6ZyA6KaB6YCJ5oup5L+d5oqk5bGC57qn77yBJywgJ+aCqOmcgOimgemBuOaTh+S/neitt+WxpOe0mu+8gScpLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlcHJvdGVjdCcsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzcGFnZS5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFByb3RlY3RlZFBhZ2VzJykpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzcGFnZS5zZXRDcmVhdGVQcm90ZWN0aW9uKGlucHV0LmNyZWF0ZWxldmVsLCBpbnB1dC5jcmVhdGVleHBpcnkpO1xuXHRcdFx0XHRcdFx0dGhpc3BhZ2Uuc2V0V2F0Y2hsaXN0KGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGlucHV0LnByb3RlY3RSZWFzb24pIHtcblx0XHRcdFx0XHRcdHRoaXNwYWdlLnNldEVkaXRTdW1tYXJ5KGlucHV0LnByb3RlY3RSZWFzb24pO1xuXHRcdFx0XHRcdFx0dGhpc3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5oKo5b+F6aG76L6T5YWl5L+d5oqk55CG55Sx77yM6L+Z5bCG6KKr6K6w5b2V5Zyo5L+d5oqk5pel5b+X5Lit44CCJyxcblx0XHRcdFx0XHRcdFx0XHQn5oKo5b+F6aCI6Ly45YWl5L+d6K2355CG55Sx77yM6YCZ5bCH6KKr6KiY6YyE5Zyo5L+d6K235pel6KqM5Lit44CCJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVwcm90ZWN0Jyxcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFzdGF0dXNJbml0ZWQpIHtcblx0XHRcdFx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRcdFx0XHRcdHN0YXR1c0luaXRlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXNwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHR0aGlzcGFnZS5wcm90ZWN0KG5leHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoaW5wdXQuZWRpdG1vZGlmeSB8fCBpbnB1dC5tb3ZlbW9kaWZ5IHx8ICFtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVJZCcpKSB7XG5cdFx0XHRcdFx0cHJvdGVjdEl0KGFsbERvbmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+ivt+WRiuiviVR3aW5rbGXopoHlgZrku4DkuYjvvIFcXG7oi6Xmgqjlj6rmmK/mg7PmoIforrDor6XpobXvvIzor7fpgInmi6nkuIrpnaLnmoTigJznlKjkv53miqTmqKHmnb/moIforrDmraTpobXigJ3pgInpobnjgIInLFxuXHRcdFx0XHRcdFx0XHQn6KuL5ZGK6Ki0VHdpbmtsZeimgeWBmuS7gOm6vO+8gVxcbuiLpeaCqOWPquaYr+aDs+aomeiomOipsumgge+8jOiri+mBuOaTh+S4iumdoueahOOAjOeUqOS/neitt+aooeadv+aomeiomOatpOmggeOAjemBuOmgheOAgidcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXByb3RlY3QnLFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlICd0YWcnOlxuXHRcdFx0XHQvLyBhcHBseSBhIHByb3RlY3Rpb24gdGVtcGxhdGVcblx0XHRcdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5mb2xsb3dSZWRpcmVjdCA9IGZhbHNlO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+agh+iusOWujOaIkCcsICfmqJnoqJjlrozmiJAnKTtcblx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrcy50YWdnaW5nUGFnZUluaXRpYWwodGFncGFyYW1zKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyZXF1ZXN0Jzoge1xuXHRcdFx0XHQvLyBmaWxlIHJlcXVlc3QgYXQgUkZQUFxuXHRcdFx0XHRsZXQgdHlwZW5hbWU7XG5cdFx0XHRcdGxldCB0eXBlcmVhc29uO1xuXHRcdFx0XHRzd2l0Y2ggKGlucHV0LmNhdGVnb3J5KSB7XG5cdFx0XHRcdFx0Y2FzZSAncHAtZGlzcHV0ZSc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtcHJvdGVjdGVkJzpcblx0XHRcdFx0XHRcdHR5cGVuYW1lID0gd2luZG93LndnVUxTKCflhajkv53miqQnLCAn5YWo5L+d6K23Jyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC10ZW1wbGF0ZSc6XG5cdFx0XHRcdFx0XHR0eXBlbmFtZSA9IHdpbmRvdy53Z1VMUygn5qih5p2/5L+d5oqkJywgJ+aooeadv+S/neittycpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHAtdmFuZGFsaXNtJzpcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLWRpc3J1cHRpdmUnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLXNlbWktdW5zb3VyY2VkJzpcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLXZhbmRhbGlzbSc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtc2VtaS11c2VydGFsayc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtc2VtaS10ZW1wbGF0ZSc6IC8vIHJlbW92ZWQgZm9yIG5vd1xuXHRcdFx0XHRcdGNhc2UgJ3BwLXNlbWktc29jayc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtc2VtaS1ibHAnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLXNlbWktcHJvdGVjdGVkJzpcblx0XHRcdFx0XHRcdHR5cGVuYW1lID0gd2luZG93LndnVUxTKCfljYrkv53miqQnLCAn5Y2K5L+d6K23Jyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1tb3ZlJzpcblx0XHRcdFx0XHRjYXNlICdwcC1tb3ZlLWRpc3B1dGUnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLW1vdmUtaW5kZWYnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLW1vdmUtdmFuZGFsaXNtJzpcblx0XHRcdFx0XHRcdHR5cGVuYW1lID0gd2luZG93LndnVUxTKCfnp7vliqjkv53miqQnLCAn56e75YuV5L+d6K23Jyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1jcmVhdGUnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS1vZmZlbnNpdmUnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS1ibHAnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS1zYWx0Jzpcblx0XHRcdFx0XHRjYXNlICdwcC1jcmVhdGUtdXNlcnBhZ2UnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS1yZXBlYXQnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS12YW5kYWxpc20nOlxuXHRcdFx0XHRcdFx0dHlwZW5hbWUgPSB3aW5kb3cud2dVTFMoJ+eZvee6uOS/neaKpCcsICfnmb3ntJnkv53orbcnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8qIGNhc2UgJ3VucHJvdGVjdCc6ICovXG5cdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0eXBlbmFtZSA9IHdpbmRvdy53Z1VMUygn6Kej6Zmk5L+d5oqkJywgJ+ino+mZpOS/neittycpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChpbnB1dC5jYXRlZ29yeSkge1xuXHRcdFx0XHRcdGNhc2UgJ3BwLWRpc3B1dGUnOlxuXHRcdFx0XHRcdFx0dHlwZXJlYXNvbiA9IHdpbmRvdy53Z1VMUygn5LqJ6K6u44CB57yW6L6R5oiYJywgJ+eIreitsOOAgee3qOi8r+aIsCcpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHAtdmFuZGFsaXNtJzpcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLXZhbmRhbGlzbSc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtY3JlYXRlLXZhbmRhbGlzbSc6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCfmjIHnu63noLTlnY8nLCAn5oyB57qM56C05aOeJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC10ZW1wbGF0ZSc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtc2VtaS10ZW1wbGF0ZSc6XG5cdFx0XHRcdFx0XHQvLyByZW1vdmVkIGZvciBub3dcblx0XHRcdFx0XHRcdHR5cGVyZWFzb24gPSB3aW5kb3cud2dVTFMoJ+mrmOmjjumZqeaooeadvycsICfpq5jpoqjpmqrmqKHmnb8nKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS11c2VycGFnZSc6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCfooqvmsLjkuYXlsIHnpoHnmoTnlKjmiLfpobUnLCAn6KKr5rC45LmF5bCB6Y6W55qE5L2/55So6ICF6aCB6Z2iJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLXVzZXJ0YWxrJzpcblx0XHRcdFx0XHRcdHR5cGVyZWFzb24gPSB3aW5kb3cud2dVTFMoJ+W3suWwgeemgeeUqOaIt+eahOiuqOiuuumhtScsICflt7LlsIHpjpbkvb/nlKjogIXnmoToqI7oq5bpoIEnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3BwLXNlbWktc29jayc6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCflgoDlhKHnoLTlnY8nLCAn5YKA5YSh56C05aOeJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLWJscCc6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCfov53lj43nlJ/ogIXkvKDorrDmnaHkvosnLCAn6YGV5Y+N55Sf6ICF5YKz6KiY5qKd5L6LJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1tb3ZlLWRpc3B1dGUnOlxuXHRcdFx0XHRcdFx0dHlwZXJlYXNvbiA9IHdpbmRvdy53Z1VMUygn5LqJ6K6u44CB56e75Yqo5oiYJywgJ+eIreitsOOAgeenu+WLleaIsCcpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHAtbW92ZS12YW5kYWxpc20nOlxuXHRcdFx0XHRcdFx0dHlwZXJlYXNvbiA9IHdpbmRvdy53Z1VMUygn56e75Yqo56C05Z2PJywgJ+enu+WLleegtOWjnicpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHAtbW92ZS1pbmRlZic6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCfpq5jpo47pmanpobXpnaInLCAn6auY6aKo6Zqq6aCB6Z2iJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1jcmVhdGUtcmVwZWF0Jzpcblx0XHRcdFx0XHRcdHR5cGVyZWFzb24gPSB3aW5kb3cud2dVTFMoJ+WkmuasoemHjeWkjeWIm+W7uicsICflpJrmrKHph43opIflu7rnq4snKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gJyc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgcmVhc29uID0gdHlwZXJlYXNvbjtcblx0XHRcdFx0aWYgKGlucHV0LnJlYXNvbiAhPT0gJycpIHtcblx0XHRcdFx0XHRpZiAodHlwZXJlYXNvbiAhPT0gJycpIHtcblx0XHRcdFx0XHRcdHJlYXNvbiArPSAn77yaJztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVhc29uICs9IGlucHV0LnJlYXNvbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVhc29uICE9PSAnJykge1xuXHRcdFx0XHRcdHJlYXNvbiA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihyZWFzb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJwcHBhcmFtcyA9IHtcblx0XHRcdFx0XHRyZWFzb24sXG5cdFx0XHRcdFx0dHlwZW5hbWUsXG5cdFx0XHRcdFx0Y2F0ZWdvcnk6IGlucHV0LmNhdGVnb3J5LFxuXHRcdFx0XHRcdGV4cGlyeTogaW5wdXQuZXhwaXJ5LFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRcdFx0Y29uc3QgcnBwTmFtZSA9ICdMSUJfdGFsazrpobXpnaLkv53miqTor7fmsYInO1xuXHRcdFx0XHQvLyBVcGRhdGluZyBkYXRhIGZvciB0aGUgYWN0aW9uIGNvbXBsZXRlZCBldmVudFxuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHJwcE5hbWU7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5o+Q5ZCN5a6M5oiQ77yM6YeN5a6a5ZCR5Yiw6K6o6K666aG1Jyxcblx0XHRcdFx0XHQn5o+Q5ZCN5a6M5oiQ77yM6YeN5paw5bCO5ZCR5Yiw6KiO6KuW6aCBJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBycHBQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShycHBOYW1lLCB3aW5kb3cud2dVTFMoJ+ivt+axguS/neaKpOmhtemdoicsICfoq4vmsYLkv53orbfpoIHpnaInKSk7XG5cdFx0XHRcdHJwcFBhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdHJwcFBhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHJwcHBhcmFtcyk7XG5cdFx0XHRcdHJwcFBhZ2UubG9hZChUd2lua2xlLnByb3RlY3QuY2FsbGJhY2tzLmZpbGVSZXF1ZXN0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtdy5ub3RpZnkoJ3R3aW5rbGVwcm90ZWN0OiDmnKrnn6Xmk43kvZznsbvlnosnLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVwcm90ZWN0Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrcyA9IHtcblx0XHR0YWdnaW5nUGFnZUluaXRpYWw6ICh0YWdwYXJhbXMpID0+IHtcblx0XHRcdGlmICh0YWdwYXJhbXMudGFnID09PSAnbm9vcCcpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCflupTnlKjkv53miqTmqKHmnb8nLCAn5oeJ55So5L+d6K235qih5p2/JyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmsqHku4DkuYjopoHlgZrnmoQnLCAn5rKS5LuA6bq86KaB5YGa55qEJylcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFnZU5hbWUgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5cdFx0XHRjb25zdCBwcm90ZWN0ZWRQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShwYWdlTmFtZSwgd2luZG93LndnVUxTKCfmoIforrDpobXpnaInLCAn5qiZ6KiY6aCB6Z2iJykpO1xuXHRcdFx0cHJvdGVjdGVkUGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnModGFncGFyYW1zKTtcblx0XHRcdHByb3RlY3RlZFBhZ2UubG9hZChUd2lua2xlLnByb3RlY3QuY2FsbGJhY2tzLnRhZ2dpbmdQYWdlKTtcblx0XHR9LFxuXHRcdGdldFRhZ2dlZFBhZ2U6IChwYXJhbXMsIHRleHQpID0+IHtcblx0XHRcdGxldCB0YWc7XG5cdFx0XHRsZXQgc3VtbWFyeTtcblx0XHRcdGNvbnN0IG9sZHRhZ19yZSA9XG5cdFx0XHRcdC8oPzo8bm9pbmNsdWRlPik/WyBcXHRdKlxce1xce1xccyoocHAtW157fV0qP3xwcm90ZWN0ZWR8KD86dHx2fHN8cC18dXNlcnRhbGstdnx1c2VydGFsay1zfHNifG1vdmUpcHJvdGVjdGVkKD86Mik/fHByb3RlY3RlZCB0ZW1wbGF0ZXxwcml2YWN5IHByb3RlY3Rpb24pXFxzKj9cXH1cXH1cXHMqKD86PFxcL25vaW5jbHVkZT4pP1xccyovZ2k7XG5cdFx0XHRjb25zdCByZV9yZXN1bHQgPSBvbGR0YWdfcmUuZXhlYyh0ZXh0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cmVfcmVzdWx0ICYmXG5cdFx0XHRcdChwYXJhbXMudGFnID09PSAnbm9uZScgfHxcblx0XHRcdFx0XHRjb25maXJtKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCflnKjpobXpnaLkuIrmib7liLB7eycsICflnKjpoIHpnaLkuIrmib7liLB7eycpICtcblx0XHRcdFx0XHRcdFx0cmVfcmVzdWx0WzFdICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCd9fVxcbuWNleWHu+ehruWumuS7peenu+mZpO+8jOaIluWNleWHu+WPlua2iOS7peWPlua2iOaTjeS9nOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J319XFxu6bue5pOK56K65a6a5Lul56e76Zmk77yM5oiW6bue5pOK5Y+W5raI5Lul5Y+W5raI5pON5L2c44CCJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSlcblx0XHRcdCkge1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKG9sZHRhZ19yZSwgJycpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy50YWcgPT09ICdub25lJykge1xuXHRcdFx0XHRzdW1tYXJ5ID0gd2luZG93LndnVUxTKCfnp7vpmaTkv53miqTmqKHmnb8nLCAn56e76Zmk5L+d6K235qih5p2/Jyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoe3RhZ30gPSBwYXJhbXMpO1xuXHRcdFx0XHRpZiAocGFyYW1zLnJlYXNvbikge1xuXHRcdFx0XHRcdHRhZyArPSBgfHJlYXNvbj0ke3BhcmFtcy5yZWFzb259YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocGFyYW1zLnNob3dleHBpcnkgJiYgcGFyYW1zLmV4cGlyeSAmJiAhTW9yZWJpdHMuc3RyaW5nLmlzSW5maW5pdHkocGFyYW1zLmV4cGlyeSkpIHtcblx0XHRcdFx0XHR0YWcgKz0gJ3xleHBpcnk9e3snLmNvbmNhdCgnc3Vic3Q6JywgYCN0aW1lOmN8JHtwYXJhbXMuZXhwaXJ5fX19YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHBhcmFtcy5zbWFsbCkge1xuXHRcdFx0XHRcdHRhZyArPSAnfHNtYWxsPXllcyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKC9eXFxzKiMoPzpyZWRpcmVjdHzph43lrprlkJF86YeN5paw5bCO5ZCRKS9pLnRlc3QodGV4dCkpIHtcblx0XHRcdFx0XHQvLyByZWRpcmVjdCBwYWdlXG5cdFx0XHRcdFx0Ly8gT25seSB0YWcgaWYgbm8ge3tyY2F0IHNoZWxsfX0gaXMgZm91bmRcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHR0ZXh0Lm1hdGNoKFxuXHRcdFx0XHRcdFx0XHQve3soPzpSZWRpcmVjdFsgX11jYXRlZ29yeSBzaGVsbHxSY2F0WyBfXXNoZWxsfFRoaXNbIF9daXMgYSByZWRpcmVjdHzlpJrnp43nsbvlnovph43lrprlkJF85aSa56iu6aGe5Z6L6YeN5a6a5ZCRfOWkmueorumhnuWei+mHjeaWsOWwjuWQkXzlpJrnp43nsbvlnovph43mlrDlr7zlkJF8UjB85YW25LuW6YeN5a6a5ZCRfFJDU3xSZWRpcmVjdFsgX11zaGVsbCkvaVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0XHRcdCflt7LlrZjlnKhSZWRpcmVjdCBjYXRlZ29yeSBzaGVsbCcsXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5rKh5LuA5LmI5Y+v5YGa55qEJywgJ+aykuS7gOm6vOWPr+WBmueahCcpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0LyMoPzpyZWRpcmVjdHzph43lrprlkJF86YeN5paw5bCO5ZCRKSA/KFxcW1xcWy4qP1xcXVxcXSkoLiopL2ksXG5cdFx0XHRcdFx0XHRgI1JFRElSRUNUICQxJDJcXG5cXG57eyR7dGFnfX19YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHBhcmFtcy5ub2luY2x1ZGUpIHtcblx0XHRcdFx0XHRcdHRhZyA9IGA8bm9pbmNsdWRlPnt7JHt0YWd9fX08L25vaW5jbHVkZT5gO1xuXHRcdFx0XHRcdFx0Ly8g5Y+q5pyJ6KGo5qC86ZyA6KaB5Y2V54us5Yqg5Zue6L2m77yM5YW25LuW5oOF5Ya15Yqg5Zue6L2m5Lya56C05Z2P5qih5p2/44CCXG5cdFx0XHRcdFx0XHRpZiAodGV4dC5pbmRleE9mKCd7fCcpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHRhZyArPSAnXFxuJztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFnID0gYHt7JHt0YWd9fX1cXG5gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBJbnNlcnQgdGFnIGFmdGVyIHNob3J0IGRlc2NyaXB0aW9uIG9yIGFueSBoYXRub3Rlc1xuXHRcdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpdGV4dC5wYWdlKHRleHQpO1xuXHRcdFx0XHRcdHRleHQgPSB5c2FyY2hpdmVzX3BhZ2UuaW5zZXJ0QWZ0ZXJUZW1wbGF0ZXModGFnLCBUd2lua2xlLmhhdG5vdGVSZWdleCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnkgPSBg5Yqg5YWle3ske3BhcmFtcy50YWd9fX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGV4dCxcblx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdH07XG5cdFx0fSxcblx0XHR0YWdnaW5nUGFnZTogKHByb3RlY3RlZFBhZ2UpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHByb3RlY3RlZFBhZ2UuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCB0ZXh0ID0gcHJvdGVjdGVkUGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3QgbmV3VmVyc2lvbiA9IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFja3MuZ2V0VGFnZ2VkUGFnZShwYXJhbXMsIHRleHQpO1xuXHRcdFx0aWYgKG5ld1ZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwcm90ZWN0ZWRQYWdlLmdldFN0YXR1c0VsZW1lbnQoKS5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cHJvdGVjdGVkUGFnZS5zZXRFZGl0U3VtbWFyeShuZXdWZXJzaW9uLnN1bW1hcnkpO1xuXHRcdFx0cHJvdGVjdGVkUGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwcm90ZWN0ZWRQYWdlLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3dhdGNoUFBUYWdnZWRQYWdlcycpKTtcblx0XHRcdHByb3RlY3RlZFBhZ2Uuc2V0UGFnZVRleHQobmV3VmVyc2lvbi50ZXh0KTtcblx0XHRcdHByb3RlY3RlZFBhZ2Uuc2V0Q3JlYXRlT3B0aW9uKCdub2NyZWF0ZScpO1xuXHRcdFx0cHJvdGVjdGVkUGFnZS5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nKCk7IC8vIG5vIG5lZWQgdG8gbGV0IGFkbWlucyBrbm93IHRoZXkgYXJlIGVkaXRpbmcgdGhyb3VnaCBwcm90ZWN0aW9uXG5cdFx0XHRwcm90ZWN0ZWRQYWdlLnNhdmUoKTtcblx0XHR9LFxuXHRcdGZpbGVSZXF1ZXN0OiAocnBwUGFnZSkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcnBwUGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGxldCB0ZXh0ID0gcnBwUGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3Qgc3RhdHVzRWxlbWVudCA9IHJwcFBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpO1xuXHRcdFx0Y29uc3QgcnBwUmUgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRgPT09XFxcXHMqKFxcXFxbXFxcXFspP1xcXFxzKjo/XFxcXHMqJHtNb3JlYml0cy5zdHJpbmcuZXNjYXBlUmVnRXhwKE1vcmViaXRzLnBhZ2VOYW1lTm9ybSl9XFxcXHMqKFxcXFxdXFxcXF0pP1xcXFxzKj09PWAsXG5cdFx0XHRcdCdtJ1xuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHRhZyA9IHJwcFJlLmV4ZWModGV4dCk7XG5cdFx0XHRjb25zdCBycHBMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdFx0cnBwTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybChycHBQYWdlLmdldFBhZ2VOYW1lKCkpKTtcblx0XHRcdHJwcExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnBwUGFnZS5nZXRQYWdlTmFtZSgpKSk7XG5cdFx0XHRpZiAodGFnKSB7XG5cdFx0XHRcdHN0YXR1c0VsZW1lbnQuZXJyb3IoW1xuXHRcdFx0XHRcdHJwcExpbmssXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCflt7LmnInlr7nmraTpobXpnaLnmoTkv53miqTmj5DlkI3vvIzlj5bmtojmk43kvZzjgIInLCAn5bey5pyJ5bCN5q2k6aCB6Z2i55qE5L+d6K235o+Q5ZCN77yM5Y+W5raI5pON5L2c44CCJyksXG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgbmV3dGFnID0gYD09PSBbWzoke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXSA9PT1cXG5gO1xuXHRcdFx0aWYgKG5ldyBSZWdFeHAoYF4ke213LnV0aWwuZXNjYXBlUmVnRXhwKG5ld3RhZykucmVwbGFjZSgvXFxzKy9nLCBTdHJpbmcucmF3YFxccypgKX1gLCAnbScpLnRlc3QodGV4dCkpIHtcblx0XHRcdFx0c3RhdHVzRWxlbWVudC5lcnJvcihbXG5cdFx0XHRcdFx0cnBwTGluayxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+W3suacieWvueatpOmhtemdoueahOS/neaKpOaPkOWQje+8jOWPlua2iOaTjeS9nOOAgicsICflt7LmnInlsI3mraTpoIHpnaLnmoTkv53orbfmj5DlkI3vvIzlj5bmtojmk43kvZzjgIInKSxcblx0XHRcdFx0XSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCB3b3Jkcztcblx0XHRcdHN3aXRjaCAocGFyYW1zLmV4cGlyeSkge1xuXHRcdFx0XHRjYXNlICd0ZW1wb3JhcnknOlxuXHRcdFx0XHRcdHdvcmRzID0gd2luZG93LndnVUxTKCfkuLTml7YnLCAn6Ieo5pmCJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2luZmluaXR5Jzpcblx0XHRcdFx0XHR3b3JkcyA9ICfmsLjkuYUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHdvcmRzID0gJyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR3b3JkcyArPSBwYXJhbXMudHlwZW5hbWU7XG5cdFx0XHRuZXd0YWcgKz0gYCogPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDkwJVwiPiR7d2luZG93LndnVUxTKCflvZPliY3kv53miqTnirbmgIEnLCAn55uu5YmN5L+d6K2354uA5oWLJyl977yae3twcm90ZWN0aW9uIHN0YXR1c3wke1xuXHRcdFx0XHQvWz1dLy50ZXN0KE1vcmViaXRzLnBhZ2VOYW1lTm9ybSkgPyAnMT0nIDogJydcblx0XHRcdH0ke01vcmViaXRzLnBhZ2VOYW1lTm9ybX19fTwvc3Bhbj5cXG5gO1xuXHRcdFx0bmV3dGFnICs9IGAke1xuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivt+axgicsICfoq4vmsYInKSArXG5cdFx0XHRcdE1vcmViaXRzLnN0cmluZy50b1VwcGVyQ2FzZUZpcnN0Q2hhcih3b3JkcykgK1xuXHRcdFx0XHQocGFyYW1zLnJlYXNvbiA9PT0gJycgPyAn44CCJyA6IGDvvJoke01vcmViaXRzLnN0cmluZy5mb3JtYXRSZWFzb25UZXh0KHBhcmFtcy5yZWFzb24pfWApXG5cdFx0XHR9LS1+fmAuY29uY2F0KCd+ficpO1xuXHRcdFx0bGV0IHJlZztcblx0XHRcdGlmIChwYXJhbXMuY2F0ZWdvcnkgPT09ICd1bnByb3RlY3QnKSB7XG5cdFx0XHRcdHJlZyA9IC8oPT1cXHMq6K+35rGC6Kej6Zmk5L+d5oqkXFxzKj09KS87XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZWcgPSAvKHt7XFxzKlxcL2hlYWRlclxccyp9fSkvO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxUZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlZywgYCQxXFxuJHtuZXd0YWd9XFxuYCk7XG5cdFx0XHRpZiAodGV4dC5sZW5ndGggPT09IG9yaWdpbmFsVGV4dExlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBsaW5rbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGlua25vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgbXcudXRpbC5nZXRVcmwoJ0hlbHA6VHdpbmtsZS/kv67lpI1SRlBQJykpO1xuXHRcdFx0XHRsaW5rbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3aW5kb3cud2dVTFMoJ+WmguS9leS/ruWkjVJGUFAnLCAn5aaC5L2V5L+u5b6pUkZQUCcpKSk7XG5cdFx0XHRcdHN0YXR1c0VsZW1lbnQuZXJyb3IoW1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfml6Dms5XlnKhMSUI6UkZQUOS4iuaJvuWIsOebuOWFs+WumuS9jeeCueagh+iusO+8jOimgeS/ruWkjeatpOmXrumimO+8jOivt+WPguingScsXG5cdFx0XHRcdFx0XHQn54Sh5rOV5ZyoTElCOlJGUFDkuIrmib7liLDnm7jpl5zlrprkvY3pu57mqJnoqJjvvIzopoHkv67lvqnmraTllY/poYzvvIzoq4vlj4PoposnXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRsaW5rbm9kZSxcblx0XHRcdFx0XHQn44CCJyxcblx0XHRcdFx0XSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHN0YXR1c0VsZW1lbnQuc3RhdHVzKCfliqDlhaXmlrDmj5DlkI3igKYnKTtcblx0XHRcdHJwcFBhZ2Uuc2V0RWRpdFN1bW1hcnkoXG5cdFx0XHRcdGAvKiAke01vcmViaXRzLnBhZ2VOYW1lTm9ybX0gKi8gJHt3aW5kb3cud2dVTFMoJ+ivt+axguWvuScsICfoq4vmsYLlsI0nKX1bWyR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dJHtcblx0XHRcdFx0XHRwYXJhbXMudHlwZW5hbWVcblx0XHRcdFx0fWBcblx0XHRcdCk7XG5cdFx0XHRycHBQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHJwcFBhZ2Uuc2V0UGFnZVRleHQodGV4dCk7XG5cdFx0XHRycHBQYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdHJwcFBhZ2Uuc2F2ZSgoKSA9PiB7XG5cdFx0XHRcdC8vIFdhdGNoIHRoZSBwYWdlIGJlaW5nIHJlcXVlc3RlZFxuXHRcdFx0XHRjb25zdCB3YXRjaFByZWYgPSBUd2lua2xlLmdldFByZWYoJ3dhdGNoUmVxdWVzdGVkUGFnZXMnKTtcblx0XHRcdFx0Ly8gYWN0aW9uPXdhdGNoIGhhcyBubyB3YXkgdG8gcmVseSBvbiB1c2VyIHByZWZlcmVuY2VzIChUMjYyOTEyKSwgc28gd2UgZG8gaXQgbWFudWFsbHkuXG5cdFx0XHRcdC8vIFRoZSB3YXRjaGRlZmF1bHQgcHJlZiBhcHBlYXJzIHRvIHJlbGlhYmx5IHJldHVybiAnMScgKHN0cmluZyksXG5cdFx0XHRcdC8vIGJ1dCB0aGF0J3Mgbm90IGNvbnNpc3RlbnQgYW1vbmcgcHJlZnMgc28gbWlnaHQgYXMgd2VsbCBiZSBcImNvcnJlY3RcIlxuXHRcdFx0XHRjb25zdCB3YXRjaCA9XG5cdFx0XHRcdFx0d2F0Y2hQcmVmICE9PSAnbm8nICYmXG5cdFx0XHRcdFx0KHdhdGNoUHJlZiAhPT0gJ2RlZmF1bHQnIHx8ICEhTnVtYmVyLnBhcnNlSW50KG13LnVzZXIub3B0aW9ucy5nZXQoJ3dhdGNoZGVmYXVsdCcpLCAxMCkpO1xuXHRcdFx0XHRpZiAod2F0Y2gpIHtcblx0XHRcdFx0XHRjb25zdCB3YXRjaF9xdWVyeSA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3dhdGNoJyxcblx0XHRcdFx0XHRcdHRpdGxlczogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdFx0dG9rZW46IG13LnVzZXIudG9rZW5zLmdldCgnd2F0Y2hUb2tlbicpLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Ly8gT25seSBhZGQgdGhlIGV4cGlyeSBpZiBwYWdlIGlzIHVud2F0Y2hlZCBvciBhbHJlYWR5IHRlbXBvcmFyaWx5IHdhdGNoZWRcblx0XHRcdFx0XHRpZiAoVHdpbmtsZS5wcm90ZWN0LndhdGNoZWQgIT09IHRydWUgJiYgd2F0Y2hQcmVmICE9PSAnZGVmYXVsdCcgJiYgd2F0Y2hQcmVmICE9PSAneWVzJykge1xuXHRcdFx0XHRcdFx0d2F0Y2hfcXVlcnkuZXhwaXJ5ID0gd2F0Y2hQcmVmO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+Wwhuivt+axguS/neaKpOeahOmhtemdouWKoOWFpeWIsOebkeinhuWIl+ihqCcsICflsIfoq4vmsYLkv53orbfnmoTpoIHpnaLliqDlhaXliLDnm6PoppbmuIXllq4nKSxcblx0XHRcdFx0XHRcdHdhdGNoX3F1ZXJ5XG5cdFx0XHRcdFx0KS5wb3N0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Y2xvc2VSZXF1ZXN0OiAocnBwUGFnZSkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcnBwUGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGxldCB0ZXh0ID0gcnBwUGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3Qgc3RhdHVzRWxlbWVudCA9IHJwcFBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpO1xuXHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0ZXh0LnNwbGl0KC8oPz1cXG49PVxccyror7fmsYLop6PpmaTkv53miqRcXHMqPT0pLyk7XG5cdFx0XHRpZiAoc2VjdGlvbnMubGVuZ3RoICE9PSAyKSB7XG5cdFx0XHRcdGNvbnN0IGxpbmtub2RlMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGlua25vZGUyLnNldEF0dHJpYnV0ZSgnaHJlZicsIG13LnV0aWwuZ2V0VXJsKCdIZWxwOlR3aW5rbGUv5L+u5aSNUkZQUCcpKTtcblx0XHRcdFx0bGlua25vZGUyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCflpoLkvZXkv67lpI1SRlBQJykpO1xuXHRcdFx0XHRzdGF0dXNFbGVtZW50LmVycm9yKFtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5peg5rOV5ZyoTElCOlJGUFDkuIrmib7liLDnm7jlhbPlrprkvY3ngrnmoIforrDvvIzopoHkv67lpI3mraTpl67popjvvIzor7flj4Lop4EnLFxuXHRcdFx0XHRcdFx0J+eEoeazleWcqExJQjpSRlBQ5LiK5om+5Yiw55u46Zec5a6a5L2N6bue5qiZ6KiY77yM6KaB5L+u5b6p5q2k5ZWP6aGM77yM6KuL5Y+D6KaLJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0bGlua25vZGUyLFxuXHRcdFx0XHRcdCfjgIInLFxuXHRcdFx0XHRdKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHNlY3Rpb25UZXh0O1xuXHRcdFx0bGV0IGV4cGlyeVRleHQgPSAnJztcblx0XHRcdGlmIChwYXJhbXMudHlwZSA9PT0gJ3VucHJvdGVjdCcpIHtcblx0XHRcdFx0Wywgc2VjdGlvblRleHRdID0gc2VjdGlvbnM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRbc2VjdGlvblRleHRdID0gc2VjdGlvbnM7XG5cdFx0XHRcdGV4cGlyeVRleHQgPSBNb3JlYml0cy5zdHJpbmcuZm9ybWF0VGltZShwYXJhbXMuZXhwaXJ5KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJlcXVlc3RMaXN0ID0gc2VjdGlvblRleHQuc3BsaXQoLyg/PVxcbj09PS4rPT09XFxzKlxcbikvKTtcblx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgcnBwUmUgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRgPT09XFxcXHMqKFxcXFxbXFxcXFspP1xcXFxzKjo/XFxcXHMqJHtNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KE1vcmViaXRzLnBhZ2VOYW1lTm9ybSl9XFxcXHMqKFxcXFxdXFxcXF0pP1xcXFxzKj09PWAsXG5cdFx0XHRcdCdtJ1xuXHRcdFx0KTtcblx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgcmVxdWVzdExpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHJwcFJlLmV4ZWMocmVxdWVzdExpc3RbaV0pKSB7XG5cdFx0XHRcdFx0cmVxdWVzdExpc3RbaV0gPSByZXF1ZXN0TGlzdFtpXS50cmltRW5kKCk7XG5cdFx0XHRcdFx0aWYgKHBhcmFtcy50eXBlID09PSAndW5wcm90ZWN0Jykge1xuXHRcdFx0XHRcdFx0cmVxdWVzdExpc3RbaV0gKz0gJ1xcbjoge3tSRlBQfGlzdW59feOAgi0tfn4nLmNvbmNhdCgnfn5cXG4nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWVzdExpc3RbaV0gKz0gYFxcbjoge3tSRlBQfCR7cGFyYW1zLnR5cGV9fCR7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHBhcmFtcy5leHBpcnkpID8gJ2luZmluaXR5JyA6IGV4cGlyeVRleHRcblx0XHRcdFx0XHRcdH19feOAgi0tfn5gLmNvbmNhdCgnfn5cXG4nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZvdW5kKSB7XG5cdFx0XHRcdHN0YXR1c0VsZW1lbnQud2Fybih3aW5kb3cud2dVTFMoJ+ayoeacieaJvuWIsOebuOWFs+eahOivt+axgicsICfmspLmnInmib7liLDnm7jpl5znmoToq4vmsYInKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwYXJhbXMudHlwZSA9PT0gJ3VucHJvdGVjdCcpIHtcblx0XHRcdFx0dGV4dCA9IHNlY3Rpb25zWzBdICsgcmVxdWVzdExpc3Quam9pbignJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0ZXh0ID0gcmVxdWVzdExpc3Quam9pbignJykgKyBzZWN0aW9uc1sxXTtcblx0XHRcdH1cblx0XHRcdGxldCBzdW1tYXJ5ID0gJyc7XG5cdFx0XHRpZiAocGFyYW1zLnR5cGUgPT09ICd1bnByb3RlY3QnKSB7XG5cdFx0XHRcdFssIHNlY3Rpb25UZXh0XSA9IHNlY3Rpb25zO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0W3NlY3Rpb25UZXh0XSA9IHNlY3Rpb25zO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChwYXJhbXMudHlwZSkge1xuXHRcdFx0XHRjYXNlICdzZW1pJzpcblx0XHRcdFx0XHRzdW1tYXJ5ID0gd2luZG93LndnVUxTKCfljYrkv53miqQnLCAn5Y2K5L+d6K23Jyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RlbXAnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+aooeadv+S/neaKpCcsICfmqKHmnb/kv53orbcnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZWNwJzpcblx0XHRcdFx0XHRzdW1tYXJ5ID0gd2luZG93LndnVUxTKCflu7bkvLjnoa7orqTkv53miqQnLCAn5bu25Ly456K66KqN5L+d6K23Jyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2Z1bGwnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+WFqOS/neaKpCcsICflhajkv53orbcnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncmV2aXNpb25wcm90ZWN0ZWQnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+eJiOacrOS/neaKpCcsICfniYjmnKzkv53orbcnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnb2ZmaWNpYWxwcm90ZWN0ZWQnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+ijgeWnlOS8muS/neaKpCcsICfoo4Hlp5TmnIPkv53orbcnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnbW92ZSc6XG5cdFx0XHRcdFx0c3VtbWFyeSA9IHdpbmRvdy53Z1VMUygn56e75Yqo5L+d5oqkJywgJ+enu+WLleS/neittycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdzYWx0Jzpcblx0XHRcdFx0XHRzdW1tYXJ5ID0gd2luZG93LndnVUxTKCfnmb3nurjkv53miqQnLCAn55m957SZ5L+d6K23Jyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3VucHJvdGVjdCc6XG5cdFx0XHRcdFx0c3VtbWFyeSA9IHdpbmRvdy53Z1VMUygn6Kej6Zmk5L+d5oqkJywgJ+ino+mZpOS/neittycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHN0YXR1c0VsZW1lbnQud2Fybih3aW5kb3cud2dVTFMoJ+acquefpeS/neaKpOexu+WeiycsICfmnKrnn6Xkv53orbfpoZ7liKUnKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHBhcmFtcy5leHBpcnkpKSB7XG5cdFx0XHRcdHN1bW1hcnkgPSBleHBpcnlUZXh0ICsgc3VtbWFyeTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN1bW1hcnkgKz0gZXhwaXJ5VGV4dDtcblx0XHRcdH1cblx0XHRcdHJwcFBhZ2Uuc2V0RWRpdFN1bW1hcnkoYC8qICR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfSAqLyAke3N1bW1hcnl9YCk7XG5cdFx0XHRycHBQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHJwcFBhZ2Uuc2V0UGFnZVRleHQodGV4dCk7XG5cdFx0XHRycHBQYWdlLnNhdmUoKTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLnByb3RlY3QuZm9ybWF0UHJvdGVjdGlvbkRlc2NyaXB0aW9uID0gKHByb3RlY3Rpb25MZXZlbHMpID0+IHtcblx0XHRjb25zdCBwcm90ZWN0aW9uTm9kZSA9IFtdO1xuXHRcdGlmIChPYmplY3Qua2V5cyhwcm90ZWN0aW9uTGV2ZWxzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHByb3RlY3Rpb25Ob2RlLnB1c2goJChgPGI+JHt3aW5kb3cud2dVTFMoJ+aXoOS/neaKpCcsICfnhKHkv53orbcnKX08L2I+YClbMF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IFt0eXBlLCBzZXR0aW5nc10gb2YgT2JqZWN0LmVudHJpZXMocHJvdGVjdGlvbkxldmVscykpIHtcblx0XHRcdFx0bGV0IGxhYmVsO1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlICdlZGl0Jzpcblx0XHRcdFx0XHRcdGxhYmVsID0gd2luZG93LndnVUxTKCfnvJbovpEnLCAn57eo6LyvJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdtb3ZlJzpcblx0XHRcdFx0XHRcdGxhYmVsID0gd2luZG93LndnVUxTKCfnp7vliqgnLCAn56e75YuVJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdjcmVhdGUnOlxuXHRcdFx0XHRcdFx0bGFiZWwgPSB3aW5kb3cud2dVTFMoJ+WIm+W7uicsICflu7rnq4snKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3VwbG9hZCc6XG5cdFx0XHRcdFx0XHRsYWJlbCA9IHdpbmRvdy53Z1VMUygn5LiK5LygJywgJ+S4iuWCsycpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGxhYmVsID0gdHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBsZXZlbDtcblx0XHRcdFx0c3dpdGNoIChzZXR0aW5ncy5sZXZlbCkge1xuXHRcdFx0XHRcdGNhc2UgJ29mZmljaWFscHJvdGVjdGVkJzpcblx0XHRcdFx0XHRcdGxldmVsID0gd2luZG93LndnVUxTKCfku4XlhYHorrjmoaPmoYjnkIbkuovlkZgnLCAn5YOF5YWB6Kix5qqU5qGI55CG5LqL5ZOhJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdhdXRvY29uZmlybWVkJzpcblx0XHRcdFx0XHRcdGxldmVsID0gd2luZG93LndnVUxTKCfku4XlhYHorrjoh6rliqjnoa7orqTnlKjmiLcnLCAn5YOF5YWB6Kix6Ieq5YuV56K66KqN5L2/55So6ICFJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd0ZW1wbGF0ZWVkaXRvcic6XG5cdFx0XHRcdFx0XHRsZXZlbCA9IHdpbmRvdy53Z1VMUygn5LuF5qih5p2/57yW6L6R5ZGY5ZKM566h55CG5ZGYJywgJ+WDheaooeadv+e3qOi8r+WToeWSjOeuoeeQhuWToScpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc3lzb3AnOlxuXHRcdFx0XHRcdFx0bGV2ZWwgPSB3aW5kb3cud2dVTFMoJ+S7heeuoeeQhuWRmCcsICflg4XnrqHnkIblk6EnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHQoe2xldmVsfSA9IHNldHRpbmdzKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3RlY3Rpb25Ob2RlLnB1c2goJChgPGI+JHtsYWJlbH3vvJoke2xldmVsfTwvYj5gKVswXSk7XG5cdFx0XHRcdGlmIChNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShzZXR0aW5ncy5leHBpcnkpKSB7XG5cdFx0XHRcdFx0cHJvdGVjdGlvbk5vZGUucHVzaCh3aW5kb3cud2dVTFMoJ++8iOaXoOmZkOacn++8iScsICfvvIjnhKHpmZDmnJ/vvIknKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cHJvdGVjdGlvbk5vZGUucHVzaChcblx0XHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn77yI6L+H5pyf77yaJywgJ++8iOmBjuacn++8micpICsgbmV3IE1vcmViaXRzLmRhdGUoc2V0dGluZ3MuZXhwaXJ5KS5jYWxlbmRhcigndXRjJyl977yJYFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNldHRpbmdzLmNhc2NhZGUpIHtcblx0XHRcdFx0XHRwcm90ZWN0aW9uTm9kZS5wdXNoKHdpbmRvdy53Z1VMUygn77yI6L+e6ZSB77yJJywgJ++8iOmAo+mOlu+8iScpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcHJvdGVjdGlvbk5vZGU7XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUucHJvdGVjdCwgJ3Byb3RlY3QnKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSBmcmllbmRseXRhZy5qcyAqL1xuKGZ1bmN0aW9uIGZyaWVuZGx5dGFnKCQpIHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdC8qKlxuXHQgKiBmcmllbmRseXRhZy5qczogVGFnIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IFRhYiAoXCJUYWdcIilcblx0ICogQWN0aXZlIG9uOiBFeGlzdGluZyBhcnRpY2xlcyBhbmQgZHJhZnRzOyBmaWxlIHBhZ2VzIHdpdGggYSBjb3JyZXNwb25kaW5nIGZpbGVcblx0ICogd2hpY2ggaXMgbG9jYWwgKG5vdCBvbiBTaGFyZSk7IGFsbCByZWRpcmVjdHNcblx0ICovXG5cdFR3aW5rbGUudGFnID0gKCkgPT4ge1xuXHRcdC8vIHJlZGlyZWN0IHRhZ2dpbmdcblx0XHRpZiAoTW9yZWJpdHMuaXNQYWdlUmVkaXJlY3QoKSkge1xuXHRcdFx0VHdpbmtsZS50YWcubW9kZSA9IHdpbmRvdy53Z1VMUygn6YeN5a6a5ZCRJywgJ+mHjeaWsOWwjuWQkScpO1xuXHRcdFx0VHdpbmtsZS50YWcubW9kZUVuID0gJ3JlZGlyZWN0Jztcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdFR3aW5rbGUudGFnLmNhbGxiYWNrLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+agh+iusCcsICfmqJnoqJgnKSxcblx0XHRcdFx0J2ZyaWVuZGx5LXRhZycsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5qCH6K6w6YeN5a6a5ZCRJywgJ+aomeiomOmHjeaWsOWwjuWQkScpXG5cdFx0XHQpO1xuXHRcdFx0Ly8gZmlsZSB0YWdnaW5nXG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYgJiZcblx0XHRcdCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctc2hhcmVkdXBsb2FkJykgJiZcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1pbWFnZXBhZ2Utc2VjdGlvbi1maWxlaGlzdG9yeScpXG5cdFx0KSB7XG5cdFx0XHRUd2lua2xlLnRhZy5tb2RlID0gd2luZG93LndnVUxTKCfmlofku7YnLCAn5qqU5qGIJyk7XG5cdFx0XHRUd2lua2xlLnRhZy5tb2RlRW4gPSAnZmlsZSc7XG5cdFx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0XHRUd2lua2xlLnRhZy5jYWxsYmFjayxcblx0XHRcdFx0d2luZG93LndnVUxTKCfmoIforrAnLCAn5qiZ6KiYJyksXG5cdFx0XHRcdCdmcmllbmRseS10YWcnLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+agh+iusOaWh+S7ticsICfmqJnoqJjmqpTmoYgnKVxuXHRcdFx0KTtcblx0XHRcdC8vIGFydGljbGUvZHJhZnQgdGFnZ2luZ1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoWzAsIDMwMl0uaW5jbHVkZXMobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSkgJiYgbXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJykpIHx8XG5cdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gPT09IFR3aW5rbGUuZ2V0UHJlZignc2FuZGJveFBhZ2UnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS50YWcubW9kZSA9IHdpbmRvdy53Z1VMUygn5p2h55uuJywgJ+aineebricpO1xuXHRcdFx0VHdpbmtsZS50YWcubW9kZUVuID0gJ2FydGljbGUnO1xuXHRcdFx0Ly8gQ2FuJ3QgcmVtb3ZlIHRhZ3Mgd2hlbiBub3Qgdmlld2luZyBjdXJyZW50IHZlcnNpb25cblx0XHRcdFR3aW5rbGUudGFnLmNhblJlbW92ZSA9XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpID09PSBtdy5jb25maWcuZ2V0KCd3Z1JldmlzaW9uSWQnKSAmJlxuXHRcdFx0XHQvLyBEaXNhYmxlZCBvbiBsYXRlc3QgZGlmZiBiZWNhdXNlIHRoZSBkaWZmIHNsaWRlciBjb3VsZCBiZSB1c2VkIHRvIHNsaWRlXG5cdFx0XHRcdC8vIGF3YXkgZnJvbSB0aGUgbGF0ZXN0IGRpZmYgd2l0aG91dCBjYXVzaW5nIHRoZSBzY3JpcHQgdG8gcmVsb2FkXG5cdFx0XHRcdCFtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpO1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFx0VHdpbmtsZS50YWcuY2FsbGJhY2ssXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5qCH6K6wJywgJ+aomeiomCcpLFxuXHRcdFx0XHQnZnJpZW5kbHktdGFnJyxcblx0XHRcdFx0d2luZG93LndnVUxTKCfmoIforrDmnaHnm64nLCAn5qiZ6KiY5qKd55uuJylcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLnRhZy5jaGVja2VkVGFncyA9IFtdO1xuXHRUd2lua2xlLnRhZy5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYzMCwgVHdpbmtsZS50YWcubW9kZUVuID09PSAnYXJ0aWNsZScgPyA1MDAgOiA0MDApO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCfmoIforrDorr7nva4nLCAn5qiZ6KiY6Kit5a6aJyksICdIOlRXL1BSRUYjdGFnJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI3RhZycpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUudGFnLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn562b6YCJ5qCH6K6w5YiX6KGo77yaJywgJ+evqemBuOaomeiomOWIl+ihqO+8micpLFxuXHRcdFx0bmFtZTogJ3F1aWNrZmlsdGVyJyxcblx0XHRcdHNpemU6ICczMCcsXG5cdFx0XHRldmVudDogZnVuY3Rpb24gZXZlbnQoKSB7XG5cdFx0XHRcdC8vIGZsdXNoIHRoZSBET00gb2YgYWxsIGV4aXN0aW5nIHVuZGVybGluZSBzcGFuc1xuXHRcdFx0XHQkYWxsQ2hlY2tib3hEaXZzLmZpbmQoJy5zZWFyY2gtaGl0JykuZWFjaCgoX2ksIGUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBsYWJlbF9lbGVtZW50ID0gZS5wYXJlbnRFbGVtZW50O1xuXHRcdFx0XHRcdC8vIFRoaXMgd291bGQgY29udmVydCA8bGFiZWw+SGVsbG8gPHNwYW4gY2xhc3M9c2VhcmNoLWhpdD53bzwvc3Bhbj5ybGQ8L2xhYmVsPlxuXHRcdFx0XHRcdC8vIHRvIDxsYWJlbD5IZWxsbyB3b3JsZDwvbGFiZWw+XG5cdFx0XHRcdFx0bGFiZWxfZWxlbWVudC5pbm5lckhUTUwgPSBsYWJlbF9lbGVtZW50LnRleHRDb250ZW50O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKHRoaXMudmFsdWUpIHtcblx0XHRcdFx0XHQkYWxsQ2hlY2tib3hEaXZzLmhpZGUoKTtcblx0XHRcdFx0XHQkYWxsSGVhZGVycy5oaWRlKCk7XG5cdFx0XHRcdFx0Y29uc3Qgc2VhcmNoU3RyaW5nID0gdGhpcy52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCBzZWFyY2hSZWdleCA9IG5ldyBSZWdFeHAobXcudXRpbC5lc2NhcGVSZWdFeHAoc2VhcmNoU3RyaW5nKSwgJ2knKTtcblx0XHRcdFx0XHQkYWxsQ2hlY2tib3hEaXZzLmZpbmQoJ2xhYmVsJykuZWFjaCgoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBsYWJlbF90ZXh0ID0gZWxlbWVudC50ZXh0Q29udGVudDtcblx0XHRcdFx0XHRcdGNvbnN0IHNlYXJjaEhpdCA9IHNlYXJjaFJlZ2V4LmV4ZWMobGFiZWxfdGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VhcmNoSGl0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgW3RleHRub2RlXSA9IGVsZW1lbnQuY2hpbGROb2Rlcztcblx0XHRcdFx0XHRcdFx0cmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRleHRub2RlKTtcblx0XHRcdFx0XHRcdFx0cmFuZ2Uuc2V0U3RhcnQodGV4dG5vZGUsIHNlYXJjaEhpdC5pbmRleCk7XG5cdFx0XHRcdFx0XHRcdHJhbmdlLnNldEVuZCh0ZXh0bm9kZSwgc2VhcmNoSGl0LmluZGV4ICsgc2VhcmNoU3RyaW5nLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IFt1bmRlcmxpbmVfc3Bhbl0gPSAkKCc8c3Bhbj4nKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRDbGFzcygnc2VhcmNoLWhpdCcpXG5cdFx0XHRcdFx0XHRcdFx0LmNzcygndGV4dC1kZWNvcmF0aW9uJywgJ3VuZGVybGluZScpO1xuXHRcdFx0XHRcdFx0XHRyYW5nZS5zdXJyb3VuZENvbnRlbnRzKHVuZGVybGluZV9zcGFuKTtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyAvLyBzaG93XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JGFsbENoZWNrYm94RGl2cy5zaG93KCk7XG5cdFx0XHRcdFx0JGFsbEhlYWRlcnMuc2hvdygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHRcdHN3aXRjaCAoVHdpbmtsZS50YWcubW9kZUVuKSB7XG5cdFx0XHRjYXNlICdhcnRpY2xlJzpcblx0XHRcdFx0V2luZG93LnNldFRpdGxlKHdpbmRvdy53Z1VMUygn5p2h55uu57u05oqk5qCH6K6wJywgJ+aineebrue2reitt+aomeiomCcpKTtcblx0XHRcdFx0Ly8gQnVpbGQgc29ydGluZyBhbmQgbG9va3VwIG9iamVjdCBmbGF0T2JqZWN0LCB3aGljaCBpcyBhbHdheXNcblx0XHRcdFx0Ly8gbmVlZGVkIGJ1dCBhbHNvIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGFscGhhYmV0aWNhbCBsaXN0XG5cdFx0XHRcdC8vIFdvdWxkIGJlIGluZmluaXRlbHkgYmV0dGVyIHdpdGggT2JqZWN0LnZhbHVlc1xuXHRcdFx0XHRUd2lua2xlLnRhZy5hcnRpY2xlLmZsYXRPYmplY3QgPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBncm91cCBvZiBUd2lua2xlLnRhZy5hcnRpY2xlLnRhZ0xpc3QpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHN1Ymdyb3VwIG9mIGdyb3VwLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHRpZiAoc3ViZ3JvdXAudmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHN1Ymdyb3VwLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0VHdpbmtsZS50YWcuYXJ0aWNsZS5mbGF0T2JqZWN0W2l0ZW0udGFnXSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXhjbHVkZU1JOiAhIWl0ZW0uZXhjbHVkZU1JLFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFtzdWJncm91cC50YWddID0ge1xuXHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBzdWJncm91cC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdFx0XHRleGNsdWRlTUk6ICEhc3ViZ3JvdXAuZXhjbHVkZU1JLFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NvcnRvcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p+l55yL5YiX6KGo77yaJywgJ+aqouimluWIl+ihqO+8micpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XlnKhUd2lua2xl5Y+C5pWw6K6+572u77yISDpUVy9QUkVG77yJ5Lit5pu05pS55q2k6aG544CCJyxcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XlnKhUd2lua2xl5YGP5aW96Kit5a6a77yISDpUVy9QUkVG77yJ5Lit5pu05pS55q2k6aCF44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUudGFnLnVwZGF0ZVNvcnRPcmRlcixcblx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2NhdCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aMieexu+WeiycsICfmjInpoZ7liKUnKSxcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IFR3aW5rbGUuZ2V0UHJlZigndGFnQXJ0aWNsZVNvcnRPcmRlcicpID09PSAnY2F0Jyxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2FscGhhJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6ICfmjInlrZfmr40nLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZDogVHdpbmtsZS5nZXRQcmVmKCd0YWdBcnRpY2xlU29ydE9yZGVyJykgPT09ICdhbHBoYScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoIVR3aW5rbGUudGFnLmNhblJlbW92ZSkge1xuXHRcdFx0XHRcdGNvbnN0IGRpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0XHRkaXZFbGVtZW50LmlubmVySFRNTCA9IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfopoHnp7vpmaTnjrDmnInnu7TmiqTmoIforrDvvIzor7fku47lvZPliY3mnaHnm67niYjmnKzkuK3miZPlvIDigJzmoIforrDigJ3oj5zljZUnLFxuXHRcdFx0XHRcdFx0J+imgeenu+mZpOePvuaciee2reitt+aomeiomO+8jOiri+W+nuebruWJjeaineebrueJiOacrOS4reaJk+mWi+OAjOaomeiomOOAjemBuOWWridcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3VudGFnbm90aWNlJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBkaXZFbGVtZW50LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ3RhZ1dvcmtBcmVhJyxcblx0XHRcdFx0XHRjbGFzc05hbWU6ICdtb3JlYml0cy1zY3JvbGxib3gnLFxuXHRcdFx0XHRcdHN0eWxlOiAnbWF4LWhlaWdodDogMjhlbScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WmguWPr+iDve+8jOWQiOW5tuWFpXt7bXVsdGlwbGUgaXNzdWVzfX0nLFxuXHRcdFx0XHRcdFx0XHRcdCflpoLlj6/og73vvIzlkIjkvbXlhaV7e211bHRpcGxlIGlzc3Vlc319J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2dyb3VwJyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ2dyb3VwJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfoi6XliqDlhaV7e211bHRpcGxlIGlzc3Vlc3195pSv5oyB55qE5LiJ5Liq5Lul5LiK55qE5qih5p2/77yM5omA5pyJ5pSv5oyB55qE5qih5p2/6YO95Lya6KKr5ZCI5bm25YWle3ttdWx0aXBsZSBpc3N1ZXN9feaooeadv+S4reOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+iLpeWKoOWFpXt7bXVsdGlwbGUgaXNzdWVzfX3mlK/mj7TnmoTkuInlgIvku6XkuIrnmoTmqKHmnb/vvIzmiYDmnInmlK/mj7TnmoTmqKHmnb/pg73mnIPooqvlkIjkvbXlhaV7e211bHRpcGxlIGlzc3Vlc3195qih5p2/5Lit44CCJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmdldFByZWYoJ2dyb3VwQnlEZWZhdWx0JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRsYWJlbDogJ+eQhueUse+8micsXG5cdFx0XHRcdFx0bmFtZTogJ3JlYXNvbicsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+mZhOWKoOS6jue8lui+keaRmOimgeeahOWPr+mAieeQhueUse+8jOS+i+WmguaMh+WHuuadoeebruWGheWuueeahOWTquS6m+mDqOWIhuaciemXrumimOaIluenu+mZpOaooeadv+eahOeQhueUse+8jOS9huiLpeeQhueUseW+iOmVv+WImeW6lOivpeWPkeihqOWcqOiuqOiuuumhteOAgicsXG5cdFx0XHRcdFx0XHQn6ZmE5Yqg5pa857eo6Lyv5pGY6KaB55qE5Y+v6YG455CG55Sx77yM5L6L5aaC5oyH5Ye65qKd55uu5YWn5a6555qE5ZOq5Lqb6YOo5YiG5pyJ5ZWP6aGM5oiW56e76Zmk5qih5p2/55qE55CG55Sx77yM5L2G6Iul55CG55Sx5b6I6ZW35YmH5oeJ6Kmy55m86KGo5Zyo6KiO6KuW6aCB44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0c2l6ZTogJzgwJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZmlsZSc6XG5cdFx0XHRcdFdpbmRvdy5zZXRUaXRsZSh3aW5kb3cud2dVTFMoJ+aWh+S7tue7tOaKpOagh+iusCcsICfmqpTmoYjntq3orbfmqJnoqJgnKSk7XG5cdFx0XHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgVHdpbmtsZS50YWcuZmlsZUxpc3QpIHtcblx0XHRcdFx0XHRpZiAoZ3JvdXAuYnVpbGRGaWxlbmFtZSkge1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBncm91cC52YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRlbC5zdWJncm91cCA9IHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+abv+aNoueahOaWh+S7tu+8micsICfmm7/mj5vnmoTmqpTmoYjvvJonKSxcblx0XHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn6L6T5YWl5pu/5o2i5q2k5paH5Lu255qE5paH5Lu25ZCN56ew77yI5b+F5aGr77yJJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfovLjlhaXmm7/mj5vmraTmqpTmoYjnmoTmqpTmoYjlkI3nqLHvvIjlv4XloavvvIknXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBgJHtlbC52YWx1ZS5yZXBsYWNlKC8gL2csICdfJyl9RmlsZWAsXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGdyb3VwLmtleSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3RhZ3MnLFxuXHRcdFx0XHRcdFx0bGlzdDogZ3JvdXAudmFsdWUsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tRmlsZVRhZ0xpc3QnKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieaooeadvycsICfoh6roqILmqKHmnb8nKSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3RhZ3MnLFxuXHRcdFx0XHRcdFx0bGlzdDogVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21GaWxlVGFnTGlzdCcpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAncmVkaXJlY3QnOiB7XG5cdFx0XHRcdFdpbmRvdy5zZXRUaXRsZSh3aW5kb3cud2dVTFMoJ+mHjeWumuWQkeagh+iusCcsICfph43mlrDlsI7lkJHmqJnoqJgnKSk7XG5cdFx0XHRcdGNvbnN0IGkgPSAxO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGdyb3VwIG9mIFR3aW5rbGUudGFnLnJlZGlyZWN0TGlzdCkge1xuXHRcdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdFx0aWQ6IGB0YWdIZWFkZXIke2l9YCxcblx0XHRcdFx0XHRcdGxhYmVsOiBncm91cC5rZXksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICd0YWdzJyxcblx0XHRcdFx0XHRcdGxpc3Q6IGdyb3VwLnZhbHVlLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtLnRhZyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7JHtpdGVtLnRhZ319fe+8miR7aXRlbS5kZXNjcmlwdGlvbn1gLFxuXHRcdFx0XHRcdFx0XHRcdHN1Ymdyb3VwOiBpdGVtLnN1Ymdyb3VwLFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tUmVkaXJlY3RUYWdMaXN0JykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnmqKHmnb8nLCAn6Ieq6KiC5qih5p2/JyksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICd0YWdzJyxcblx0XHRcdFx0XHRcdGxpc3Q6IFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tUmVkaXJlY3RUYWdMaXN0JyksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtdy5ub3RpZnkoYFR3aW5rbGUudGFn77ya5pyq55+l5qih5byPICR7VHdpbmtsZS50YWcubW9kZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ2ZyaWVuZGx5dGFnJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBhdHJvbGxpbmsnKS5sZW5ndGgpIHtcblx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOmhtemdouS4uuW3suW3oeafpScsICfmqJnoqJjpoIHpnaLngrrlt7Llt6Hmn6UnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAncGF0cm9sJyxcblx0XHRcdFx0XHRcdG5hbWU6ICdwYXRyb2wnLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogVHdpbmtsZS5nZXRQcmVmKCdtYXJrVGFnZ2VkUGFnZXNBc1BhdHJvbGxlZCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0XHRjbGFzc05hbWU6ICd0dy10YWctc3VibWl0Jyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHQvLyBmb3IgcXVpY2sgZmlsdGVyOlxuXHRcdCRhbGxDaGVja2JveERpdnMgPSAkKHJlc3VsdCkuZmluZCgnW25hbWUkPXRhZ3NdJykucGFyZW50KCk7XG5cdFx0JGFsbEhlYWRlcnMgPSAkKHJlc3VsdCkuZmluZCgnaDUnKTtcblx0XHRyZXN1bHQucXVpY2tmaWx0ZXIuZm9jdXMoKTsgLy8gcGxhY2UgY3Vyc29yIGluIHRoZSBxdWljayBmaWx0ZXIgZmllbGQgYXMgc29vbiBhcyB3aW5kb3cgaXMgb3BlbmVkXG5cdFx0cmVzdWx0LnF1aWNrZmlsdGVyLmF1dG9jb21wbGV0ZSA9ICdvZmYnOyAvLyBkaXNhYmxlIGJyb3dzZXIgc3VnZ2VzdGlvbnNcblx0XHRyZXN1bHQucXVpY2tmaWx0ZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAoZSkgPT4ge1xuXHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG5cdFx0XHRcdC8vIHByZXZlbnQgZW50ZXIga2V5IGZyb20gYWNjaWRlbnRhbGx5IHN1Ym1pdHRpbmcgdGhlIGZvcm1cblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKFR3aW5rbGUudGFnLm1vZGVFbiA9PT0gJ2FydGljbGUnKSB7XG5cdFx0XHRUd2lua2xlLnRhZy5hbHJlYWR5UHJlc2VudFRhZ3MgPSBbXTtcblx0XHRcdGlmIChUd2lua2xlLnRhZy5jYW5SZW1vdmUpIHtcblx0XHRcdFx0Ly8gTG9vayBmb3IgZXhpc3RpbmcgbWFpbnRlbmFuY2UgdGFncyBpbiB0aGUgbGVhZCBzZWN0aW9uIGFuZCBwdXQgdGhlbSBpbiBhcnJheVxuXHRcdFx0XHQvLyBBbGwgdGFncyBhcmUgSFRNTCB0YWJsZSBlbGVtZW50cyB0aGF0IGFyZSBkaXJlY3QgY2hpbGRyZW4gb2YgLm13LXBhcnNlci1vdXRwdXQsXG5cdFx0XHRcdC8vIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIHdpdGhpbiB7e211bHRpcGxlIGlzc3Vlc319XG5cdFx0XHRcdCRib2R5XG5cdFx0XHRcdFx0LmZpbmQoJy5tdy1wYXJzZXItb3V0cHV0Jylcblx0XHRcdFx0XHQuY2hpbGRyZW4oKVxuXHRcdFx0XHRcdC5lYWNoKChfaSwgZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gYnJlYWsgb3V0IG9uIGVuY291bnRlcmluZyB0aGUgZmlyc3QgaGVhZGluZywgd2hpY2ggbWVhbnMgd2UgYXJlIG5vXG5cdFx0XHRcdFx0XHQvLyBsb25nZXIgaW4gdGhlIGxlYWQgc2VjdGlvblxuXHRcdFx0XHRcdFx0aWYgKGUudGFnTmFtZSA9PT0gJ0gyJykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBUaGUgYWJpbGl0eSB0byByZW1vdmUgdGFncyBkZXBlbmRzIG9uIHRoZSB0ZW1wbGF0ZSdzIHt7YW1ib3h9fSB8bmFtZT1cblx0XHRcdFx0XHRcdC8vIHBhcmFtZXRlciBiZWFyaW5nIHRoZSB0ZW1wbGF0ZSdzIGNvcnJlY3QgbmFtZSAocHJlZmVyYWJseSkgb3IgYSBuYW1lIHRoYXQgYXRcblx0XHRcdFx0XHRcdC8vIGxlYXN0IHJlZGlyZWN0cyB0byB0aGUgYWN0dWFsIG5hbWVcblx0XHRcdFx0XHRcdC8vIEFsbCB0YWdzIGhhdmUgdGhlaXIgZmlyc3QgY2xhc3MgbmFtZSBhcyBcImJveC1cIiArIHRlbXBsYXRlIG5hbWVcblx0XHRcdFx0XHRcdGlmIChlLmNsYXNzTmFtZS5pbmRleE9mKCdib3gtJykgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKGUuY2xhc3NMaXN0WzBdID09PSAnYm94LemXrumimOadoeebricpIHtcblx0XHRcdFx0XHRcdFx0XHQkKGUpXG5cdFx0XHRcdFx0XHRcdFx0XHQuZmluZCgnLmFtYm94Jylcblx0XHRcdFx0XHRcdFx0XHRcdC5lYWNoKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuY2xhc3NMaXN0WzBdLmluZGV4T2YoJ2JveC0nKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGJveFRhZyA9IGVsZW1lbnQuY2xhc3NMaXN0WzBdLnNsaWNlKCdib3gtJy5sZW5ndGgpLnJlcGxhY2UoL18vZywgJyAnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRUd2lua2xlLnRhZy5hbHJlYWR5UHJlc2VudFRhZ3MucHVzaChib3hUYWcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gY29udGludWVcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhZyA9IGUuY2xhc3NMaXN0WzBdLnNsaWNlKCdib3gtJy5sZW5ndGgpLnJlcGxhY2UoL18vZywgJyAnKTtcblx0XHRcdFx0XHRcdFx0VHdpbmtsZS50YWcuYWxyZWFkeVByZXNlbnRUYWdzLnB1c2godGFnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0Ly8ge3tVbmNhdGVnb3JpemVkfX0gYW5kIHt7SW1wcm92ZSBjYXRlZ29yaWVzfX0gYXJlIHVzdWFsbHkgcGxhY2VkIGF0IHRoZSBlbmRcblx0XHRcdFx0aWYgKCRib2R5LmZpbmQoJy5ib3gtVW5jYXRlZ29yaXplZCcpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFR3aW5rbGUudGFnLmFscmVhZHlQcmVzZW50VGFncy5wdXNoKCdVbmNhdGVnb3JpemVkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCRib2R5LmZpbmQoJy5ib3gtSW1wcm92ZV9jYXRlZ29yaWVzJykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS50YWcuYWxyZWFkeVByZXNlbnRUYWdzLnB1c2goJ0ltcHJvdmUgY2F0ZWdvcmllcycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBBZGQgc3RhdHVzIHRleHQgbm9kZSBhZnRlciBTdWJtaXQgYnV0dG9uXG5cdFx0XHRjb25zdCBzdGF0dXNOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdFx0c3RhdHVzTm9kZS5zdHlsZS5mb250U2l6ZSA9ICc5MCUnO1xuXHRcdFx0c3RhdHVzTm9kZS5pZCA9ICd0dy10YWctc3RhdHVzJztcblx0XHRcdFR3aW5rbGUudGFnLnN0YXR1cyA9IHtcblx0XHRcdFx0Ly8gaW5pdGlhbCBzdGF0ZTsgZGVmaW5lZCBsaWtlIHRoaXMgYmVjYXVzZSB0aGVzZSBuZWVkIHRvIGJlIGF2YWlsYWJsZSBmb3IgcmVmZXJlbmNlXG5cdFx0XHRcdC8vIGluIHRoZSBjbGljayBldmVudCBoYW5kbGVyXG5cdFx0XHRcdG51bUFkZGVkOiAwLFxuXHRcdFx0XHRudW1SZW1vdmVkOiAwLFxuXHRcdFx0fTtcblx0XHRcdCRib2R5LmZpbmQoJ2J1dHRvbi50dy10YWctc3VibWl0JykuYWZ0ZXIoc3RhdHVzTm9kZSk7XG5cdFx0XHQvLyBmYWtlIGEgY2hhbmdlIGV2ZW50IG9uIHRoZSBzb3J0IGRyb3Bkb3duLCB0byBpbml0aWFsaXplIHRoZSB0YWcgbGlzdFxuXHRcdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRcdHJlc3VsdC5zb3J0b3JkZXIuZGlzcGF0Y2hFdmVudChldnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZWRpcmVjdHMgYW5kIGZpbGVzOiBBZGQgYSBsaW5rIHRvIGVhY2ggdGVtcGxhdGUncyBkZXNjcmlwdGlvbiBwYWdlXG5cdFx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyZXN1bHQsICd0YWdzJykpIHtcblx0XHRcdFx0Z2VuZXJhdGVMaW5rcyhjaGVja2JveCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHQvLyAkYWxsQ2hlY2tib3hEaXZzIGFuZCAkYWxsSGVhZGVycyBhcmUgZGVmaW5lZCBnbG9iYWxseSwgcmF0aGVyIHRoYW4gaW4gdGhlXG5cdC8vIHF1aWNrZmlsdGVyIGV2ZW50IGZ1bmN0aW9uLCB0byBhdm9pZCBoYXZpbmcgdG8gcmVjb21wdXRlIHRoZW0gb24gZXZlcnkga2V5ZG93blxuXHRsZXQgJGFsbENoZWNrYm94RGl2cztcblx0bGV0ICRhbGxIZWFkZXJzO1xuXHRUd2lua2xlLnRhZy51cGRhdGVTb3J0T3JkZXIgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHtmb3JtfSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHNvcnRvcmRlciA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdFR3aW5rbGUudGFnLmNoZWNrZWRUYWdzID0gZm9ybS5nZXRDaGVja2VkKCd0YWdzJyk7XG5cdFx0Y29uc3QgY29udGFpbmVyID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdHR5cGU6ICdmcmFnbWVudCcsXG5cdFx0fSk7XG5cdFx0Ly8gZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBjaGVja2JveCwgd2l0aCBhcHByb3ByaWF0ZSBzdWJncm91cCBpZiBuZWVkZWRcblx0XHRjb25zdCBtYWtlQ2hlY2tib3ggPSAodGFnLCBkZXNjcmlwdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY2hlY2tib3ggPSB7XG5cdFx0XHRcdHZhbHVlOiB0YWcsXG5cdFx0XHRcdGxhYmVsOiBge3ske3RhZ319fTogJHtkZXNjcmlwdGlvbn1gLFxuXHRcdFx0fTtcblx0XHRcdGlmIChUd2lua2xlLnRhZy5jaGVja2VkVGFncy5pbmNsdWRlcyh0YWcpKSB7XG5cdFx0XHRcdGNoZWNrYm94LmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoICh0YWcpIHtcblx0XHRcdFx0Y2FzZSAnRXhwZXJ0IG5lZWRlZCc6XG5cdFx0XHRcdFx0Y2hlY2tib3guc3ViZ3JvdXAgPSBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdleHBlcnQnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflk6rkuKrpoobln5/nmoTkuJPlrrbvvIjlv4XloavvvInvvJonLCAn5ZOq5YCL6aCY5Z+f55qE5bCI5a6277yI5b+F5aGr77yJ77yaJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5b+F5aGr77yM5Y+v5Y+C6ICDIENhdGVnb3J5OumcgOimgeS4k+S4muS6uuWjq+WFs+azqOeahOmhtemdoiDkvb/nlKjnjrDlrZjnmoTliIbnsbvjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCflv4XloavvvIzlj6/lj4PogIMgQ2F0ZWdvcnk66ZyA6KaB5bCI5qWt5Lq65aOr6Zec5rOo55qE6aCB6Z2iIOS9v+eUqOePvuWtmOeahOWIhumhnuOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdleHBlcnQyJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5ZOq5Liq6aKG5Z+f55qE5LiT5a6277yaJywgJ+WTquWAi+mgmOWfn+eahOWwiOWutu+8micpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mAie+8jOWPr+WPguiAgyBDYXRlZ29yeTrpnIDopoHkuJPkuJrkurrlo6vlhbPms6jnmoTpobXpnaIg5L2/55So546w5a2Y55qE5YiG57G744CCJyxcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6YG477yM5Y+v5Y+D6ICDIENhdGVnb3J5OumcgOimgeWwiOalreS6uuWjq+mXnOazqOeahOmggemdoiDkvb/nlKjnj77lrZjnmoTliIbpoZ7jgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnZXhwZXJ0MycsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WTquS4qumihuWfn+eahOS4k+Wutu+8micsICflk6rlgIvpoJjln5/nmoTlsIjlrrbvvJonKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflj6/pgInvvIzlj6/lj4LogIMgQ2F0ZWdvcnk66ZyA6KaB5LiT5Lia5Lq65aOr5YWz5rOo55qE6aG16Z2iIOS9v+eUqOeOsOWtmOeahOWIhuexu+OAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mBuO+8jOWPr+WPg+iAgyBDYXRlZ29yeTrpnIDopoHlsIjmpa3kurrlo6vpl5zms6jnmoTpoIHpnaIg5L2/55So54++5a2Y55qE5YiG6aGe44CCJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdNZXJnZSc6XG5cdFx0XHRcdGNhc2UgJ01lcmdlIGZyb20nOlxuXHRcdFx0XHRjYXNlICdNZXJnZSB0byc6IHtcblx0XHRcdFx0XHRsZXQgb3RoZXJUYWdOYW1lID0gJ01lcmdlJztcblx0XHRcdFx0XHRzd2l0Y2ggKHRhZykge1xuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UgZnJvbSc6XG5cdFx0XHRcdFx0XHRcdG90aGVyVGFnTmFtZSA9ICdNZXJnZSB0byc7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UgdG8nOlxuXHRcdFx0XHRcdFx0XHRvdGhlclRhZ05hbWUgPSAnTWVyZ2UgZnJvbSc7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnbWVyZ2VUYXJnZXQnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhbbku5bmnaHnm67vvJonLCAn5YW25LuW5qKd55uu77yaJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5aaC5oyH5a6a5aSa5Liq5p2h55uu77yM6K+355So566h6YGT56ym5YiG6ZqU77ya5p2h55uu55SyfOadoeebruS5mScsXG5cdFx0XHRcdFx0XHRcdFx0J+WmguaMh+WumuWkmuWAi+aineebru+8jOiri+eUqOeuoemBk+espuWIhumalO+8muaineebrueUsnzmop3nm67kuZknXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogJ21lcmdlVGFnT3RoZXInLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGDnlKh7eyR7b3RoZXJUYWdOYW1lfSR7d2luZG93LndnVUxTKCd9feagh+iusOWFtuS7luadoeebricsICd9feaomeiomOWFtuS7luaineebricpfWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQn5LuF5Zyo5Y+q6L6T5YWl5LqG5LiA5Liq5p2h55uu5ZCN5pe25Y+v55SoJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0J+WDheWcqOWPqui8uOWFpeS6huS4gOWAi+aineebruWQjeaZguWPr+eUqCdcblx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Y2hlY2tib3guc3ViZ3JvdXAucHVzaCh7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdtZXJnZVJlYXNvbicsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICd0ZXh0YXJlYScsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0YOWQiOW5tueQhueUse+8iOS8muiiq+i0tOS4iiR7dGFnID09PSAnTWVyZ2UgdG8nID8gJ+WFtuS7licgOiAn6L+ZJ33mnaHnm67nmoTorqjorrrpobXvvInvvJpgLFxuXHRcdFx0XHRcdFx0XHRcdGDlkIjkvbXnkIbnlLHvvIjmnIPooqvosrzkuIoke3RhZyA9PT0gJ01lcmdlIHRvJyA/ICflhbbku5YnIDogJ+mAmSd95qKd55uu55qE6KiO6KuW6aCB77yJ77yaYFxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mAie+8jOS9huW8uueDiOaOqOiNkOOAguWmguS4jemcgOimgeivt+eVmeepuuOAguS7heWcqOWPqui+k+WFpeS6huS4gOS4quadoeebruWQjeaXtuWPr+eUqOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mBuO+8jOS9huW8t+eDiOaOqOiWpuOAguWmguS4jemcgOimgeiri+eVmeepuuOAguWDheWcqOWPqui8uOWFpeS6huS4gOWAi+aineebruWQjeaZguWPr+eUqOOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlICdNaXNzaW5nIGluZm9ybWF0aW9uJzpcblx0XHRcdFx0XHRjaGVja2JveC5zdWJncm91cCA9IHtcblx0XHRcdFx0XHRcdG5hbWU6ICdtaXNzaW5nSW5mb3JtYXRpb24nLFxuXHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e8uuWwkeeahOWGheWuue+8iOW/heWhq++8ie+8micsICfnvLrlsJHnmoTlhaflrrnvvIjlv4XloavvvInvvJonKSxcblx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5b+F5aGr77yM5pi+56S65Li64oCc57y65bCR5pyJ5YWz4oCm4oCm55qE5L+h5oGv44CC4oCdJywgJ+W/heWhq++8jOmhr+ekuueCuuOAjOe8uuWwkeaciemXnOKApuKApueahOizh+ioiuOAguOAjScpLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ05vdGFiaWxpdHknOlxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0ge1xuXHRcdFx0XHRcdFx0bmFtZTogJ25vdGFiaWxpdHknLFxuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7Tm90YWJpbGl0eX1977yaJHt3aW5kb3cud2dVTFMoJ+mAmueUqOeahOWFs+azqOW6puaMh+W8lScsICfpgJrnlKjnmoTpl5zms6jluqbmjIflvJUnKX1gLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7Tm90YWJpbGl0eXxBc3Ryb31977yaJHt3aW5kb3cud2dVTFMoJ+WkqeS9kycsICflpKnpq5QnKX1gLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnQXN0cm8nLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGB7e05vdGFiaWxpdHl8QmlvZ3JhcGhpZXN9fe+8miR7d2luZG93LndnVUxTKCfkurrniankvKDorrAnLCAn5Lq654mp5YKz6KiYJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ0Jpb2dyYXBoaWVzJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fEJvb2t9fe+8miR7d2luZG93LndnVUxTKCfkuabnsY0nLCAn5pu457GNJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ0Jvb2snLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGB7e05vdGFiaWxpdHl8Q3ljbG9uZX1977yaJHt3aW5kb3cud2dVTFMoJ+awlOaXiycsICfmsKPml4snKX1gLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnQ3ljbG9uZScsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7Tm90YWJpbGl0eXxGaWN0aW9ufX3vvJoke3dpbmRvdy53Z1VMUygn6Jma5p6E5LqL54mpJywgJ+iZm+ani+S6i+eJqScpfWAsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdGaWN0aW9uJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fEdlb2dyYXBoaWN9fe+8miR7d2luZG93LndnVUxTKCflnLDnkIbnibnlvoEnLCAn5Zyw55CG54m55b61Jyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ0dlb2dyYXBoaWMnLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGB7e05vdGFiaWxpdHl8R2VvbWV0cnl9fe+8miR7d2luZG93LndnVUxTKCflh6DkvZXlm77lvaInLCAn5bm+5L2V5ZyW5b2iJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ0dlb21ldHJ5Jyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fEludmVudGlvbn1977yaJHt3aW5kb3cud2dVTFMoJ+WPkeaYjuOAgeeglOepticsICfnmbzmmI7jgIHnoJTnqbYnKX1gLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnSW52ZW50aW9uJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fE11c2ljfX3vvJoke3dpbmRvdy53Z1VMUygn6Z+z5LmQJywgJ+mfs+aogicpfWAsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdNdXNpYycsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7Tm90YWJpbGl0eXxOdW1iZXJzfX3vvJoke3dpbmRvdy53Z1VMUygn5pWw5a2XJywgJ+aVuOWtlycpfWAsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdOdW1iZXJzJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fE9yZ2FuaXphdGlvbnN9fe+8miR7d2luZG93LndnVUxTKCfnu4Tnu4cnLCAn57WE57mUJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ09yZ2FuaXphdGlvbnMnLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGB7e05vdGFiaWxpdHl8UHJvcGVydHl9fe+8miR7d2luZG93LndnVUxTKCfmgKfotKjooagnLCAn5oCn6LOq6KGoJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ1Byb3BlcnR5Jyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAne3tOb3RhYmlsaXR5fFRyYWZmaWN9fe+8muS6pOmAmicsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdUcmFmZmljJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fFdlYn1977yaJHt3aW5kb3cud2dVTFMoJ+e9keermeOAgee9kee7nOWGheWuuScsICfntrLnq5njgIHntrLot6/lhaflrrknKX3vvIjpnZ7mraPlvI/mjIflvJXvvIlgLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnV2ViJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnUmVxdWVzdGVkIG1vdmUnOlxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnbW92ZVRhcmdldCcsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWsOWQjeensO+8micsICfmlrDlkI3nqLHvvJonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdtb3ZlUmVhc29uJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn56e75Yqo55CG55Sx77yI5Lya6KKr57KY6LS06K+l5p2h55uu55qE6K6o6K666aG177yJ77yaJyxcblx0XHRcdFx0XHRcdFx0XHQn56e75YuV55CG55Sx77yI5pyD6KKr6LK85LiK6Kmy5qKd55uu55qE6KiO6KuW6aCB77yJ77yaJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mAie+8jOS9huW8uueDiOaOqOiNkOOAguWmguS4jemcgOimgeivt+eVmeepuuOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mBuO+8jOS9huW8t+eDiOaOqOiWpuOAguWmguS4jemcgOimgeiri+eVmeepuuOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnU3BsaXQnOlxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAndGFyZ2V0MScsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mhtemdouWQjTHvvJonLCAn6aCB6Z2i5ZCNMe+8micpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+WPr+mAieOAgicsICflj6/pgbjjgIInKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICd0YXJnZXQyJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6aG16Z2i5ZCNMu+8micsICfpoIHpnaLlkI0y77yaJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5Y+v6YCJ44CCJywgJ+WPr+mBuOOAgicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3RhcmdldDMnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpobXpnaLlkI0z77yaJywgJ+mggemdouWQjTPvvJonKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflj6/pgInjgIInLCAn5Y+v6YG444CCJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0NsZWFudXAnOlxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnY2xlYW51cFJlYXNvbicsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn6ZyA6KaB5riF55CG55qE55CG55SxJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflj6/pgInvvIzkvYblvLrng4jmjqjojZDjgILlpoLkuI3pnIDopoHor7fnlZnnqbrjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCflj6/pgbjvvIzkvYblvLfng4jmjqjolqbjgILlpoLkuI3pnIDopoHoq4vnlZnnqbrjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2hlY2tib3g7XG5cdFx0fTtcblx0XHRjb25zdCBtYWtlQ2hlY2tib3hlc0ZvckFscmVhZHlQcmVzZW50VGFncyA9ICgpID0+IHtcblx0XHRcdGNvbnRhaW5lci5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0aWQ6ICd0YWdIZWFkZXIwJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bey5pS+572u55qE57u05oqk5qCH6K6wJywgJ+W3suaUvue9rueahOe2reitt+aomeiomCcpLFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzdWJkaXYgPSBjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdGlkOiAndGFnU3ViZGl2MCcsXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGNoZWNrYm94ZXMgPSBbXTtcblx0XHRcdGNvbnN0IHVuQ2hlY2tlZFRhZ3MgPSBlLnRhcmdldC5mb3JtLmdldFVuY2hlY2tlZCgnZXhpc3RpbmdUYWdzJyk7XG5cdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiBUd2lua2xlLnRhZy5hbHJlYWR5UHJlc2VudFRhZ3MpIHtcblx0XHRcdFx0Y29uc3QgY2hlY2tib3ggPSB7XG5cdFx0XHRcdFx0dmFsdWU6IHRhZyxcblx0XHRcdFx0XHRsYWJlbDogYHt7JHt0YWd9fX0ke1xuXHRcdFx0XHRcdFx0VHdpbmtsZS50YWcuYXJ0aWNsZS5mbGF0T2JqZWN0W3RhZ11cblx0XHRcdFx0XHRcdFx0PyBgOiAke1R3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFt0YWddLmRlc2NyaXB0aW9ufWBcblx0XHRcdFx0XHRcdFx0OiAnJ1xuXHRcdFx0XHRcdH1gLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICF1bkNoZWNrZWRUYWdzLmluY2x1ZGVzKHRhZyksXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNoZWNrYm94ZXMucHVzaChjaGVja2JveCk7XG5cdFx0XHR9XG5cdFx0XHRzdWJkaXYuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ2V4aXN0aW5nVGFncycsXG5cdFx0XHRcdGxpc3Q6IGNoZWNrYm94ZXMsXG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGlmIChzb3J0b3JkZXIgPT09ICdjYXQnKSB7XG5cdFx0XHQvLyBjYXRlZ29yaWNhbCBzb3J0IG9yZGVyXG5cdFx0XHQvLyBmdW5jdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHRhZ3MgYW5kIGNyZWF0ZSBhIGNoZWNrYm94IGZvciBlYWNoIG9uZVxuXHRcdFx0Y29uc3QgZG9DYXRlZ29yeUNoZWNrYm94ZXMgPSAoc3ViZGl2LCBzdWJncm91cCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjaGVja2JveGVzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBzdWJncm91cCkge1xuXHRcdFx0XHRcdGlmICghVHdpbmtsZS50YWcuYWxyZWFkeVByZXNlbnRUYWdzLmluY2x1ZGVzKGl0ZW0udGFnKSkge1xuXHRcdFx0XHRcdFx0Y2hlY2tib3hlcy5wdXNoKG1ha2VDaGVja2JveChpdGVtLnRhZywgaXRlbS5kZXNjcmlwdGlvbikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdWJkaXYuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdG5hbWU6ICd0YWdzJyxcblx0XHRcdFx0XHRsaXN0OiBjaGVja2JveGVzLFxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cdFx0XHRpZiAoVHdpbmtsZS50YWcuYWxyZWFkeVByZXNlbnRUYWdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bWFrZUNoZWNrYm94ZXNGb3JBbHJlYWR5UHJlc2VudFRhZ3MoKTtcblx0XHRcdH1cblx0XHRcdGxldCBpID0gMTtcblx0XHRcdC8vIGdvIHRocm91Z2ggZWFjaCBjYXRlZ29yeSBhbmQgc3ViLWNhdGVnb3J5IGFuZCBhcHBlbmQgbGlzdHMgb2YgY2hlY2tib3hlc1xuXHRcdFx0Zm9yIChjb25zdCBncm91cCBvZiBUd2lua2xlLnRhZy5hcnRpY2xlLnRhZ0xpc3QpIHtcblx0XHRcdFx0Y29udGFpbmVyLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0aWQ6IGB0YWdIZWFkZXIke2l9YCxcblx0XHRcdFx0XHRsYWJlbDogZ3JvdXAua2V5LFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3Qgc3ViZGl2ID0gY29udGFpbmVyLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6IGB0YWdTdWJkaXYke2krK31gLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGdyb3VwLnZhbHVlWzBdLnRhZykge1xuXHRcdFx0XHRcdGRvQ2F0ZWdvcnlDaGVja2JveGVzKHN1YmRpdiwgZ3JvdXAudmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgc3ViZ3JvdXAgb2YgZ3JvdXAudmFsdWUpIHtcblx0XHRcdFx0XHRcdHN1YmRpdi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IFtNb3JlYml0cy5odG1sTm9kZSgnYicsIHN1Ymdyb3VwLmtleSldLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRkb0NhdGVnb3J5Q2hlY2tib3hlcyhzdWJkaXYsIHN1Ymdyb3VwLnZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYWxwaGFiZXRpY2FsIHNvcnQgb3JkZXJcblx0XHRcdGlmIChUd2lua2xlLnRhZy5hbHJlYWR5UHJlc2VudFRhZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRtYWtlQ2hlY2tib3hlc0ZvckFscmVhZHlQcmVzZW50VGFncygpO1xuXHRcdFx0XHRjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0XHRpZDogJ3RhZ0hlYWRlcjEnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WPr+eUqOeahOe7tOaKpOagh+iusCcsICflj6/nlKjnmoTntq3orbfmqJnoqJgnKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBBdm9pZCByZXBlYXRlZGx5IHJlc29ydGluZ1xuXHRcdFx0VHdpbmtsZS50YWcuYXJ0aWNsZS5hbHBoYWJldGljYWxMaXN0IHx8PSBPYmplY3Qua2V5cyhUd2lua2xlLnRhZy5hcnRpY2xlLmZsYXRPYmplY3QpLnNvcnQoKTtcblx0XHRcdGNvbnN0IGNoZWNrYm94ZXMgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgdGFnIG9mIFR3aW5rbGUudGFnLmFydGljbGUuYWxwaGFiZXRpY2FsTGlzdCkge1xuXHRcdFx0XHRpZiAoIVR3aW5rbGUudGFnLmFscmVhZHlQcmVzZW50VGFncy5pbmNsdWRlcyh0YWcpKSB7XG5cdFx0XHRcdFx0Y2hlY2tib3hlcy5wdXNoKG1ha2VDaGVja2JveCh0YWcsIFR3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFt0YWddLmRlc2NyaXB0aW9uKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnRhaW5lci5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRuYW1lOiAndGFncycsXG5cdFx0XHRcdGxpc3Q6IGNoZWNrYm94ZXMsXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gYXBwZW5kIGFueSBjdXN0b20gdGFnc1xuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ2N1c3RvbVRhZ0xpc3QnKS5sZW5ndGgpIHtcblx0XHRcdGNvbnRhaW5lci5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ5qih5p2/JywgJ+iHquioguaooeadvycpLFxuXHRcdFx0fSk7XG5cdFx0XHRjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ3RhZ3MnLFxuXHRcdFx0XHRsaXN0OiBUd2lua2xlLmdldFByZWYoJ2N1c3RvbVRhZ0xpc3QnKS5tYXAoKGVsKSA9PiB7XG5cdFx0XHRcdFx0ZWwuY2hlY2tlZCA9IFR3aW5rbGUudGFnLmNoZWNrZWRUYWdzLmluY2x1ZGVzKGVsLnZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHRcdH0pLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0ICR3b3JrYXJlYSA9ICQoZm9ybSkuZmluZCgnI3RhZ1dvcmtBcmVhJyk7XG5cdFx0Y29uc3QgcmVuZGVyZWQgPSBjb250YWluZXIucmVuZGVyKCk7XG5cdFx0JHdvcmthcmVhLmVtcHR5KCkuYXBwZW5kKHJlbmRlcmVkKTtcblx0XHQvLyBmb3IgcXVpY2sgZmlsdGVyOlxuXHRcdCRhbGxDaGVja2JveERpdnMgPSAkd29ya2FyZWEuZmluZCgnW25hbWU9dGFnc10sIFtuYW1lPWV4aXN0aW5nVGFnc10nKS5wYXJlbnQoKTtcblx0XHQkYWxsSGVhZGVycyA9ICR3b3JrYXJlYS5maW5kKCdoNSwgLnF1aWNrZm9ybURlc2NyaXB0aW9uJyk7XG5cdFx0Zm9ybS5xdWlja2ZpbHRlci52YWx1ZSA9ICcnOyAvLyBjbGVhciBzZWFyY2gsIGJlY2F1c2UgdGhlIHNlYXJjaCByZXN1bHRzIGFyZSBub3QgcHJlc2VydmVkIG92ZXIgbW9kZSBjaGFuZ2Vcblx0XHRmb3JtLnF1aWNrZmlsdGVyLmZvY3VzKCk7XG5cdFx0Ly8gc3R5bGUgYWRqdXN0bWVudHNcblx0XHQkd29ya2FyZWEuZmluZCgnaDUnKS5jc3Moe1xuXHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMTAlJyxcblx0XHR9KTtcblx0XHQkd29ya2FyZWEuZmluZCgnaDU6bm90KDpmaXJzdC1jaGlsZCknKS5jc3Moe1xuXHRcdFx0J21hcmdpbi10b3AnOiAnMWVtJyxcblx0XHR9KTtcblx0XHQkd29ya2FyZWEuZmluZCgnZGl2JykuZmlsdGVyKCc6aGFzKHNwYW4ucXVpY2tmb3JtRGVzY3JpcHRpb24pJykuY3NzKHtcblx0XHRcdCdtYXJnaW4tdG9wJzogJzAuNGVtJyxcblx0XHR9KTtcblx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhmb3JtLCAnZXhpc3RpbmdUYWdzJykpIHtcblx0XHRcdGdlbmVyYXRlTGlua3MoY2hlY2tib3gpO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhmb3JtLCAndGFncycpKSB7XG5cdFx0XHRnZW5lcmF0ZUxpbmtzKGNoZWNrYm94KTtcblx0XHR9XG5cdFx0Ly8gdGFsbHkgdGFncyBhZGRlZC9yZW1vdmVkLCB1cGRhdGUgc3RhdHVzTm9kZSB0ZXh0XG5cdFx0Y29uc3Qgc3RhdHVzTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0dy10YWctc3RhdHVzJyk7XG5cdFx0JGJvZHkuZmluZCgnW25hbWU9dGFnc10sIFtuYW1lPWV4aXN0aW5nVGFnc10nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAodGhpcy5uYW1lID09PSAndGFncycpIHtcblx0XHRcdFx0VHdpbmtsZS50YWcuc3RhdHVzLm51bUFkZGVkICs9IHRoaXMuY2hlY2tlZCA/IDEgOiAtMTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5uYW1lID09PSAnZXhpc3RpbmdUYWdzJykge1xuXHRcdFx0XHRUd2lua2xlLnRhZy5zdGF0dXMubnVtUmVtb3ZlZCArPSB0aGlzLmNoZWNrZWQgPyAtMSA6IDE7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmaXJzdFBhcnQgPSBg5Yqg5YWlJHtUd2lua2xlLnRhZy5zdGF0dXMubnVtQWRkZWR9JHt3aW5kb3cud2dVTFMoJ+S4quagh+iusCcsICflgIvmqJnoqJgnKX1gO1xuXHRcdFx0Y29uc3Qgc2Vjb25kUGFydCA9IGDnp7vpmaQke1R3aW5rbGUudGFnLnN0YXR1cy5udW1SZW1vdmVkfSR7d2luZG93LndnVUxTKCfkuKrmoIforrAnLCAn5YCL5qiZ6KiYJyl9YDtcblx0XHRcdHN0YXR1c05vZGUudGV4dENvbnRlbnQgPVxuXHRcdFx0XHQoVHdpbmtsZS50YWcuc3RhdHVzLm51bUFkZGVkID8gYCAgJHtmaXJzdFBhcnR9YCA6ICcnKSArXG5cdFx0XHRcdChUd2lua2xlLnRhZy5zdGF0dXMubnVtUmVtb3ZlZCA/IChUd2lua2xlLnRhZy5zdGF0dXMubnVtQWRkZWQgPyAn77ybJyA6ICcgICcpICsgc2Vjb25kUGFydCA6ICcnKTtcblx0XHR9KTtcblx0fTtcblx0LyoqXG5cdCAqIEFkZHMgYSBsaW5rIHRvIGVhY2ggdGVtcGxhdGUncyBkZXNjcmlwdGlvbiBwYWdlXG5cdCAqXG5cdCAqIEBwYXJhbSB7TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnR9IGNoZWNrYm94ICBhc3NvY2lhdGVkIHdpdGggdGhlIHRlbXBsYXRlXG5cdCAqL1xuXHRjb25zdCBnZW5lcmF0ZUxpbmtzID0gKGNoZWNrYm94KSA9PiB7XG5cdFx0Y29uc3QgbGluayA9IE1vcmViaXRzLmh0bWxOb2RlKCdhJywgJz4nKTtcblx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndGFnLXRlbXBsYXRlLWxpbmsnKTtcblx0XHRjb25zdCB0YWduYW1lID0gY2hlY2tib3gudmFsdWVzO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKFxuXHRcdFx0J2hyZWYnLFxuXHRcdFx0bXcudXRpbC5nZXRVcmwoXG5cdFx0XHRcdCh0YWduYW1lLmluY2x1ZGVzKCc6JykgPyAnJyA6ICdUZW1wbGF0ZTonKSArXG5cdFx0XHRcdFx0KHRhZ25hbWUuaW5jbHVkZXMoJ3wnKSA/IHRhZ25hbWUuc2xpY2UoMCwgdGFnbmFtZS5pbmRleE9mKCd8JykpIDogdGFnbmFtZSlcblx0XHRcdClcblx0XHQpO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG5cdFx0bGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lciBub3JlZmVycmVyJyk7XG5cdFx0JChjaGVja2JveCkucGFyZW50KCkuYXBwZW5kKFsnXFx1MDBBMCcsIGxpbmtdKTtcblx0fTtcblx0Ly8gVGFncyBmb3IgQVJUSUNMRVMgc3RhcnQgaGVyZVxuXHRUd2lua2xlLnRhZy5hcnRpY2xlID0ge307XG5cdC8vIFRhZ3MgYXJyYW5nZWQgYnkgY2F0ZWdvcnk7IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYWxwaGFiZXRpY2FsIGxpc3QsXG5cdC8vIGJ1dCB0YWdzIHNob3VsZCBiZSBpbiBhbHBoYWJldGljYWwgb3JkZXIgd2l0aGluIHRoZSBjYXRlZ29yaWVzXG5cdC8vIGV4Y2x1ZGVNSTogdHJ1ZSBpbmRpY2F0ZSBhIHRhZyB0aGF0ICpkb2VzIG5vdCogd29yayBpbnNpZGUge3ttdWx0aXBsZSBpc3N1ZXN9fVxuXHQvLyBBZGQgbmV3IGNhdGVnb3JpZXMgd2l0aCBkaXNjcmV0aW9uIC0gdGhlIGxpc3QgaXMgbG9uZyBlbm91Z2ggYXMgaXMhXG5cdFR3aW5rbGUudGFnLmFydGljbGUudGFnTGlzdCA9IFtcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5riF55CG5ZKM57u05oqk5qih5p2/JywgJ+a4heeQhuWSjOe2reitt+aooeadvycpLFxuXHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCfluLjop4TmuIXnkIYnLCAn5bi46KaP5riF55CGJyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQ2xlYW51cCcsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDvemcgOimgei/m+ihjOa4heeQhu+8jOS7peespuWQiOacieWFveaho+ahiOmmhueahOi0qOmHj+agh+WHhicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDvemcgOimgemAsuihjOa4heeQhu+8jOS7peespuWQiOacieeNuOaqlOahiOmkqOeahOizqumHj+aomea6lidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0NsZWFudXAgcmV3cml0ZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+S4jeespuWQiOacieWFveaho+ahiOmmhueahOi0qOmHj+agh+WHhu+8jOmcgOimgeWujOWFqOmHjeWGmScsXG5cdFx0XHRcdFx0XHRcdFx0J+S4jeespuWQiOacieeNuOaqlOahiOmkqOeahOizqumHj+aomea6lu+8jOmcgOimgeWujOWFqOmHjeWvqydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0NsZWFudXAtamFyZ29uJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5YyF5ZCr6L+H5aSa6KGM6K+d5oiW5LiT5Lia5pyv6K+t77yM5Y+v6IO96ZyA6KaB566A5YyW5oiW5o+Q5Ye66L+b5LiA5q2l6Kej6YeKJyxcblx0XHRcdFx0XHRcdFx0XHQn5YyF5ZCr6YGO5aSa6KGM6Kmx5oiW5bCI5qWt6KGT6Kqe77yM5Y+v6IO96ZyA6KaB57Ch5YyW5oiW5o+Q5Ye66YCy5LiA5q2l6Kej6YeLJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQ29weSBlZGl0Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6ZyA6KaB57yW5L+u77yM5Lul56Gu5L+d5paH5rOV44CB55So6K+N44CB6K+t5rCU44CB5qC85byP44CB5qCH54K5562J5L2/55So5oGw5b2TJyxcblx0XHRcdFx0XHRcdFx0XHQn6ZyA6KaB57eo5L+u77yM5Lul56K65L+d5paH5rOV44CB55So6Kme44CB6Kqe5rCj44CB5qC85byP44CB5qiZ6bue562J5L2/55So5oGw55W2J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+WPr+iDveWkmuS9meeahOWGheWuuScsICflj6/og73lpJrppJjnmoTlhaflrrknKSxcblx0XHRcdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdDb3B5cGFzdGUnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflhoXlrrnlj6/og73mmK/ku47mn5DkuKrmnaXmupDlpITmi7fotJ3lkI7nspjotLQnLFxuXHRcdFx0XHRcdFx0XHRcdCflhaflrrnlj6/og73mmK/lvp7mn5DlgIvkvobmupDomZXmi7fosp3lvozosrzkuIonXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdFeHRlcm5hbCBsaW5rcycsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+S9v+eUqOWklumDqOmTvuaOpeeahOaWueW8j+WPr+iDveS4jeespuWQiOacieWFveaho+ahiOmmhueahOadoeS+iycsXG5cdFx0XHRcdFx0XHRcdFx0J+S9v+eUqOWklumDqOmAo+e1kOeahOaWueW8j+WPr+iDveS4jeespuWQiOacieeNuOaqlOahiOmkqOeahOaineS+iydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ05vbi1mcmVlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6IO96L+H5aSa5oiW5LiN5b2T5Zyw5L2/55So5LqG5Y+X6JGX5L2c5p2D5L+d5oqk55qE5paH5a2X44CB5Zu+5YOP5oiW5aSa5aqS5L2T5paH5Lu2Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6IO96YGO5aSa5oiW5LiN55W25Zyw5L2/55So5LqG5Y+X54mI5qyK5L+d6K2355qE5paH5a2X44CB5ZyW5YOP5oiW5aSa5aqS6auU5qqU5qGIJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+e7k+aehOWSjOWvvOiogCcsICfntZDmp4vlkozlsI7oqIAnKSxcblx0XHRcdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdMZWFkIHRvbyBsb25nJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5a+86KiA6YOo5YiG5Lmf6K646L+H5LqO5YaX6ZW/JywgJ+WwjuiogOmDqOWIhuS5n+iosemBjuaWvOWGl+mVtycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnTGVhZCB0b28gc2hvcnQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflr7zoqIDpg6jliIbkuZ/orrjkuI3otrPku6XmpoLmi6zlhbblhoXlrrknLCAn5bCO6KiA6YOo5YiG5Lmf6Kix5LiN6Laz5Lul5qaC5ous5YW25YWn5a65JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdWZXJ5IGxvbmcnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflj6/og73ov4fkuo7lhpfplb8nLCAn5Y+v6IO96YGO5pa85YaX6ZW3JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn6Jma5p6E5L2c5ZOB55u45YWz5riF55CGJywgJ+iZm+ani+S9nOWTgeebuOmXnOa4heeQhicpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0luLXVuaXZlcnNlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So5bCP6K+05pWF5LqL5YaF55qE6KeC54K55o+P6L+w5LiA5Liq6Jma5p6E5LqL54mpJyxcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So5bCP6Kqq5pWF5LqL5YWn55qE6KeA6bue5o+P6L+w5LiA5YCL6Jmb5qeL5LqL54mpJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnTG9uZyBwbG90Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5Y+v6IO95YyF5ZCr6L+H5LqO6K+m57uG55qE5Ymn5oOF5pGY6KaBJywgJ+WPr+iDveWMheWQq+mBjuaWvOips+e0sOeahOWKh+aDheaRmOimgScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogd2luZG93LndnVUxTKCfluLjop4TmnaHnm67pl67popgnLCAn5bi46KaP5qKd55uu5ZWP6aGMJyksXG5cdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiAn6YeN6KaB5oCn5ZKM55+l5ZCN5bqmJyxcblx0XHRcdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdOb3RhYmlsaXR5Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5Y+v6IO95LiN56ym5ZCI6YCa55So5YWz5rOo5bqm5oyH5byVJywgJ+WPr+iDveS4jeespuWQiOmAmueUqOmXnOazqOW6puaMh+W8lScpLFxuXHRcdFx0XHRcdFx0XHRleGNsdWRlTUk6IHRydWUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdOb3RhYmlsaXR5IFVucmVmZXJlbmNlZCcsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDveWFt+Wkh+WFs+azqOW6pu+8jOS9humcgOimgeadpea6kOWKoOS7peW9sOaYvicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDveWFt+WCmemXnOazqOW6pu+8jOS9humcgOimgeS+hua6kOWKoOS7peW9sOmhrydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCflhpnkvZzpo47moLwnLCAn5a+r5L2c6aKo5qC8JyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQWR2ZXJ0Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn57G75Ly85bm/5ZGK5oiW5a6j5Lyg5oCn5YaF5a65JywgJ+mhnuS8vOW7o+WRiuaIluWuo+WCs+aAp+WFp+WuuScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnRmFucG92Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn57G75Ly854ix5aW96ICF572R6aG1JywgJ+mhnuS8vOaEm+WlveiAhee2sumggScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnSG93LXRvJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5YyF5ZCr5oyH5Y2X5oiW5pWZ5a2m5YaF5a65JywgJ+WMheWQq+aMh+WNl+aIluaVmeWtuOWFp+WuuScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnSW5hcHByb3ByaWF0ZSBwZXJzb24nLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfkvb/nlKjkuI3pgILlvZPnmoTnrKzkuIDkurrnp7DlkoznrKzkuozkurrnp7AnLFxuXHRcdFx0XHRcdFx0XHRcdCfkvb/nlKjkuI3pgannlbbnmoTnrKzkuIDkurrnqLHlkoznrKzkuozkurrnqLEnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdOZXdzcmVsZWFzZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+mYheivu+i1t+adpeWDj+aYr+aWsOmXu+eov+WPiuWMheWQq+i/h+W6pueahOWuo+S8oOaAp+ivreiwgycsXG5cdFx0XHRcdFx0XHRcdFx0J+mWseiugOi1t+S+huWDj+aYr+aWsOiBnueov+WPiuWMheWQq+mBjuW6pueahOWuo+WCs+aAp+iqnuiqvydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1Byb3NlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So5LqG5pel5pyf5oiW5pe26Ze05YiX6KGo5byP6K6w6L+w77yM6ZyA6KaB5pS55YaZ5Li66L+e6LSv55qE5Y+Z6L+w5oCn5paH5a2XJyxcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So5LqG5pel5pyf5oiW5pmC6ZaT5YiX6KGo5byP6KiY6L+w77yM6ZyA6KaB5pS55a+r54K66YCj6LKr55qE5pWY6L+w5oCn5paH5a2XJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnUmV2aWV3Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn6ZiF6K+76LW35p2l57G75Ly86K+E6K6677yM6ZyA6KaB5riF55CGJywgJ+mWseiugOi1t+S+humhnuS8vOipleirlu+8jOmcgOimgea4heeQhicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVG9uZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+ivreiwg+aIlumjjuagvOWPr+iDveS4jemAguWQiOeZvuenkeWFqOS5pueahOWGmeS9nOaWueW8jycsXG5cdFx0XHRcdFx0XHRcdFx0J+iqnuiqv+aIlumiqOagvOWPr+iDveS4jemBqeWQiOeZvuenkeWFqOabuOeahOWvq+S9nOaWueW8jydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCflhoXlrrknLCAn5YWn5a65JyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHt0YWc6ICdNaXNzaW5nIGluZm9ybWF0aW9uJywgZGVzY3JpcHRpb246ICfnvLrlsJHlv4XopoHnmoTkv6Hmga8nfSwgLy8gdGhlc2UgdGhyZWUgaGF2ZSBhIHN1Ymdyb3VwIHdpdGggc2V2ZXJhbCBvcHRpb25zXG5cdFx0XHRcdFx0XHR7dGFnOiAnU3Vic3R1YicsIGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+i/h+S6juefreWwjycsICfpgY7mlrznn63lsI8nKSwgZXhjbHVkZU1JOiB0cnVlfSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVW5lbmN5Y2xvcGVkaWMnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflj6/og73kuI3pgILlkIjlhpnlhaXnmb7np5HlhajkuaYnLCAn5Y+v6IO95LiN6YGp5ZCI5a+r5YWl55m+56eR5YWo5pu4JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5L+h5oGv5ZKM57uG6IqCJywgJ+izh+ioiuWSjOe0sOevgCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0V4cGVydCBuZWVkZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHnsr7pgJrmiJbnhp/mgonmnKzkuLvpopjnmoTkuJPkuJrkurrlo6vvvIjkuJPlrrbvvInlj4LkuI7lj4rljY/liqnnvJbovpEnLFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHnsr7pgJrmiJbnhp/mgonmnKzkuLvpoYznmoTlsIjmpa3kurrlo6vvvIjlsIjlrrbvvInlj4PoiIflj4rljZTliqnnt6jovK8nXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdPdmVybHkgZGV0YWlsZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfljIXlkKvlpKrlpJrov4fluqbnu4boioLlhoXlrrknLCAn5YyF5ZCr5aSq5aSa6YGO5bqm57Sw56+A5YWn5a65JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdUcml2aWEnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflupTpgb/lhY3mnInpmYjliJfmnYLpobnjgIHnkJDnoo7otYTmlpnnmoTpg6jliIYnLFxuXHRcdFx0XHRcdFx0XHRcdCfmh4npgb/lhY3mnInpmbPliJfpm5zpoIXjgIHnkaPnoo7os4fmlpnnmoTpg6jliIYnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5pe26Ze05oCnJywgJ+aZgumWk+aApycpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0N1cnJlbnQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCforrDov7DmlrDpl7vliqjmgIEnLCAn6KiY6L+w5paw6IGe5YuV5oWLJyksXG5cdFx0XHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1VwZGF0ZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+W9k+WJjeadoeebruaIlueroOiKgumcgOimgeabtOaWsCcsICfnlbbliY3mop3nm67miJbnq6Dnr4DpnIDopoHmm7TmlrAnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCflrqLop4LmgKflkozkuovlrp7lh4bnoa7mgKcnLCAn5a6i6KeA5oCn5ZKM5LqL5a+m5rqW56K65oCnJyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQXV0b2Jpb2dyYXBoeScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+exu+S8vOS4gOevh+iHquS8oO+8jOaIluWGheWuueS4u+imgeeUseadoeebruaPj+i/sOeahOW9k+S6i+S6uuaIlue7hOe7h+aSsOWGmeOAgee8lui+kScsXG5cdFx0XHRcdFx0XHRcdFx0J+mhnuS8vOS4gOevh+iHquWCs++8jOaIluWFp+WuueS4u+imgeeUseaineebruaPj+i/sOeahOeVtuS6i+S6uuaIlue1hOe5lOaSsOWvq+OAgee3qOi8rydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0NPSScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+S4u+imgei0oeeMruiAheS4juacrOadoeebruaJgOWuo+aJrOeahOWGheWuueWPr+iDveWtmOWcqOWIqeebiuWGsueqgScsXG5cdFx0XHRcdFx0XHRcdFx0J+S4u+imgeiyoueNu+iAheiIh+acrOaineebruaJgOWuo+aPmueahOWFp+WuueWPr+iDveWtmOWcqOWIqeebiuihneeqgSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0Rpc3B1dGVkJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5YaF5a6555aR5qyg5YeG56Gu77yM5pyJ5b6F5p+l6K+BJywgJ+WFp+WuueeWkeasoOa6lueiuu+8jOacieW+heafpeitiScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnR2xvYmFsaXplJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5LuF5YW35pyJ5LiA6YOo5YiG5Zyw5Yy655qE5L+h5oGv5oiW6KeC54K5JywgJ+WDheWFt+acieS4gOmDqOWIhuWcsOWNgOeahOizh+ioiuaIluingOm7nicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnSG9heCcsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+ecn+WunuaAp+iiq+i0qOeWkScsICfnnJ/lr6bmgKfooqvos6rnlpEnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1BPVicsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WuouinguaAp+acieS6ieiuruOAguWGheWuueOAgeivreiwg+WPr+iDveW4puacieaYjuaYvueahOS4quS6uuingueCueaIluWcsOaWueiJsuW9qScsXG5cdFx0XHRcdFx0XHRcdFx0J+WuouingOaAp+acieeIreitsOOAguWFp+WuueOAgeiqnuiqv+WPr+iDveW4tuacieaYjumhr+eahOWAi+S6uuingOm7nuaIluWcsOaWueiJsuW9qSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1NlbGYtY29udHJhZGljdG9yeScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+WGheWuueiHquebuOefm+ebvicsICflhaflrrnoh6rnm7jnn5vnm74nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1dlYXNlbCcsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+ivreS5ieaooeajseS4pOWPr+iAjOaNn+WPiuWFtuWuouinguaAp+aIluWHhuehruaApycsXG5cdFx0XHRcdFx0XHRcdFx0J+iqnuaEj+aooeajseWFqeWPr+iAjOaQjeWPiuWFtuWuouingOaAp+aIlua6lueiuuaApydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCflj6/kvpvmn6Xor4HlkozmnaXmupAnLCAn5Y+v5L6b5p+l6K2J5ZKM5L6G5rqQJyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQkxQZGlzcHV0ZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDvei/neWPjeS6huacieWFveaho+ahiOmmhuWFs+S6jueUn+iAheS8oOiusOeahOadoeS+iycsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDvemBleWPjeS6huacieeNuOaqlOahiOmkqOmXnOaWvOeUn+iAheWCs+iomOeahOaineS+iydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0JMUHNvdXJjZXMnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfnlJ/ogIXkvKDorrDpnIDopoHooaXlhYXmm7TlpJrlj6/kvpvmn6Xor4HnmoTmnaXmupAnLFxuXHRcdFx0XHRcdFx0XHRcdCfnlJ/ogIXlgrPoqJjpnIDopoHoo5zlhYXmm7TlpJrlj6/kvpvmn6XorYnnmoTkvobmupAnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdCTFAgdW5zb3VyY2VkJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn55Sf6ICF5Lyg6K6w5rKh5pyJ5YiX5Ye65Lu75L2V5Y+C6ICD5oiW5p2l5rqQJyxcblx0XHRcdFx0XHRcdFx0XHQn55Sf6ICF5YKz6KiY5rKS5pyJ5YiX5Ye65Lu75L2V5Y+D6ICD5oiW5L6G5rqQJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQ2l0ZWNoZWNrJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6IO95YyF5ZCr5LiN6YCC55So5oiW6KKr5puy6Kej55qE5byV55So6LWE5paZ77yM6YOo5YiG5YaF5a6555qE5YeG56Gu5oCn5peg5rOV6KKr6K+B5a6eJyxcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6IO95YyF5ZCr5LiN6YGp55So5oiW6KKr5puy6Kej55qE5byV55So6LOH5paZ77yM6YOo5YiG5YWn5a6555qE5rqW56K65oCn54Sh5rOV6KKr6K2J5a+mJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnTW9yZSBmb290bm90ZXMgbmVlZGVkJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zug5Li65paH5YaF5byV55So5LiN6Laz77yM6YOo5YiG5a2X5Y+l55qE5p2l5rqQ5LuN54S25LiN5piOJyxcblx0XHRcdFx0XHRcdFx0XHQn5Zug54K65paH5YWn5byV55So5LiN6Laz77yM6YOo5YiG5a2X5Y+l55qE5L6G5rqQ5LuN54S25LiN5piOJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnTm8gZm9vdG5vdGVzJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zug5Li65rKh5pyJ5YaF5paH5byV55So6ICM5p2l5rqQ5LuN54S25LiN5piOJyxcblx0XHRcdFx0XHRcdFx0XHQn5Zug54K65rKS5pyJ5YWn5paH5byV55So6ICM5L6G5rqQ5LuN54S25LiN5piOJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnT25lc291cmNlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5p6B5aSn5oiW5a6M5YWo5Zyw5L6d6LWW5LqO5p+Q5Liq5Y2V5LiA55qE5p2l5rqQJyxcblx0XHRcdFx0XHRcdFx0XHQn5qW15aSn5oiW5a6M5YWo5Zyw5L6d6LO05pa85p+Q5YCL5Zau5LiA55qE5L6G5rqQJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnT3JpZ2luYWwgcmVzZWFyY2gnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflj6/og73ljIXlkKvljp/liJvnoJTnqbbmiJbmnKrmn6Xor4HlhoXlrrknLCAn5Y+v6IO95YyF5ZCr5Y6f5Ym156CU56m25oiW5pyq5p+l6K2J5YWn5a65JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdQcmltYXJ5c291cmNlcycsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+S+nei1luesrOS4gOaJi+adpea6kCcsICfkvp3os7TnrKzkuIDmiYvkvobmupAnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1JlZmltcHJvdmUnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfpnIDopoHooaXlhYXmm7TlpJrmnaXmupAnLCAn6ZyA6KaB6KOc5YWF5pu05aSa5L6G5rqQJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdVbnJlZmVyZW5jZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfmsqHmnInliJflh7rku7vkvZXlj4LogIPmiJbmnaXmupAnLCAn5rKS5pyJ5YiX5Ye65Lu75L2V5Y+D6ICD5oiW5L6G5rqQJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+WFt+S9k+WGheWuuemXrumimCcsICflhbfpq5TlhaflrrnllY/poYwnKSxcblx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn6K+t6KiAJywgJ+iqnuiogCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ05vdE1hbmRhcmluJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5YyF5ZCr6L+H5aSa5LiN5piv546w5Luj5qCH5YeG5rGJ6K+t55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn5YyF5ZCr6YGO5aSa5LiN5piv54++5Luj5qiZ5rqW5ryi6Kqe55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRleGNsdWRlTUk6IHRydWUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdSb3VnaCB0cmFuc2xhdGlvbicsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+e/u+ivkeWTgei0qOS4jeS9sycsICfnv7vora/lk4Hos6rkuI3kvbMnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCfpk77mjqUnLCAn6YCj57WQJyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnRGVhZCBlbmQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHliqDkuIrlhoXpg6jpk77mjqXku6XmnoTnrZHnmb7np5HlhajkuabnmoTpk77mjqXnvZHnu5wnLFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHliqDkuIrlhafpg6jpgKPntZDku6Xmp4vnr4nnmb7np5Hlhajmm7jnmoTpgKPntZDntrLntaEnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdPcnBoYW4nLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfmsqHmnInmiJblj6rmnInlvojlsJHpk77lhaXpobXpnaInLCAn5rKS5pyJ5oiW5Y+q5pyJ5b6I5bCR6YCj5YWl6aCB6Z2iJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdPdmVybGlua2VkJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5ZCr5pyJ6L+H5aSa44CB6YeN5aSN44CB5oiW5LiN5b+F6KaB55qE5YaF6YOo6ZO+5o6lJyxcblx0XHRcdFx0XHRcdFx0XHQn5ZCr5pyJ6YGO5aSa44CB6YeN6KSH44CB5oiW5LiN5b+F6KaB55qE5YWn6YOo6YCj57WQJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVW5kZXJsaW5rZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHmm7TlpJrlhoXpg6jpk77mjqXku6XmnoTnrZHnmb7np5HlhajkuabnmoTpk77mjqXnvZHnu5wnLFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHmm7TlpJrlhafpg6jpgKPntZDku6Xmp4vnr4nnmb7np5Hlhajmm7jnmoTpgKPntZDntrLntaEnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5Y+C6ICD5oqA5pyvJywgJ+WPg+iAg+aKgOihkycpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0NpdGF0aW9uIHN0eWxlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5byV55So6ZyA6KaB6L+b6KGM5riF55CGJywgJ+W8leeUqOmcgOimgemAsuihjOa4heeQhicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+WIhuexuycsICfliIbpoZ4nKSxcblx0XHRcdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdJbXByb3ZlIGNhdGVnb3JpZXMnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfpnIDopoHmm7TlpJrpobXpnaLliIbnsbsnLCAn6ZyA6KaB5pu05aSa6aCB6Z2i5YiG6aGeJyksXG5cdFx0XHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1VuY2F0ZWdvcml6ZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfnvLrlsJHpobXpnaLliIbnsbsnLCAn57y65bCR6aCB6Z2i5YiG6aGeJyksXG5cdFx0XHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5ZCI5bm244CB5ouG5YiG44CB56e75YqoJywgJ+WQiOS9teOAgeaLhuWIhuOAgeenu+WLlScpLFxuXHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogJ01lcmdlIGZyb20nLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+W7uuiuruWwhumhtemdouW5tuWFpeatpOmhtemdoicsICflu7rorbDlsIfpoIHpnaLkvbXlhaXmraTpoIHpnaInKSxcblx0XHRcdFx0XHRleGNsdWRlTUk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICdNZXJnZSB0bycsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5bu66K6u5bCG5q2k6aG16Z2i5bm25YWl6aG16Z2iJywgJ+W7uuitsOWwh+atpOmggemdouS9teWFpemggemdoicpLFxuXHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogJ01lcmdlJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflu7rorq7mraTpobXpnaLkuI7pobXpnaLlkIjlubYnLCAn5bu66K2w5q2k6aCB6Z2i6IiH6aCB6Z2i5ZCI5L21JyksXG5cdFx0XHRcdFx0ZXhjbHVkZU1JOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAnUmVxdWVzdGVkIG1vdmUnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+W7uuiuruWwhuatpOmhtemdouenu+WKqOWIsOaWsOWQjeensCcsICflu7rorbDlsIfmraTpoIHpnaLnp7vli5XliLDmlrDlkI3nqLEnKSxcblx0XHRcdFx0XHRleGNsdWRlTUk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICdTcGxpdCcsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5bu66K6u5bCG5q2k6aG16Z2i5YiG5Ymy5Li65aSa5Liq6aG16Z2iJywgJ+W7uuitsOWwh+atpOmggemdouWIhuWJsueCuuWkmuWAi+mggemdoicpLFxuXHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XTtcblx0Ly8gVGFncyBmb3IgUkVESVJFQ1RTIHN0YXJ0IGhlcmVcblx0Ly8gTm90IGJ5IHBvbGljeSwgYnV0IHRoZSBsaXN0IHJvdWdobHkgYXBwcm94aW1hdGVzIGl0ZW1zIHdpdGggPjUwMFxuXHQvLyB0cmFuc2NsdXNpb25zIGZyb20gVGVtcGxhdGU6UiB0ZW1wbGF0ZSBpbmRleFxuXHRUd2lua2xlLnRhZy5yZWRpcmVjdExpc3QgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiAn5bi455So5qih5p2/Jyxcblx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn5ZCI5bm26YeN5a6a5ZCRJywgJ+WQiOS9temHjeWumuWQkScpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5L+d5oyB6aG16Z2i6aKY5ZCN6Iez55u45bqU5Li75p2h55uu77yM5Luk6aG16Z2i5YaF5a655Zyo5ZCI5bm25ZCO5LuN6IO95L+d5a2Y5YW257yW6L6R5Y6G5Y+yJyxcblx0XHRcdFx0XHRcdCfkv53mjIHpoIHpnaLpoYzlkI3oh7Pnm7jmh4nkuLvmop3nm67vvIzku6TpoIHpnaLlhaflrrnlnKjlkIjkvbXlvozku43og73lhLLlrZjlhbbnt6jovK/mrbflj7InXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfnroDnuYHph43lrprlkJEnLCAn57Ch57mB6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5byV5a+8566A5L2T6Iez57mB5L2T77yM5oiW57mB5L2T6Iez566A5L2TJywgJ+W8leWwjuewoemrlOiHs+e5gemrlO+8jOaIlue5gemrlOiHs+ewoemrlCcpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiB3aW5kb3cud2dVTFMoJ+WFs+azqOW6pumHjeWumuWQkScsICfpl5zms6jluqbph43lrprlkJEnKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+e8uuS5j+WFs+azqOW6pueahOWtkOS4u+mimOWQkeacieWFs+azqOW6pueahOavjeS4u+mimOeahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHQn57y65LmP6Zec5rOo5bqm55qE5a2Q5Li76aGM5ZCR5pyJ6Zec5rOo5bqm55qE5q+N5Li76aGM55qE6YeN5a6a5ZCRJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICfmqKHmnb/ph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+aMh+WQkeaooeadv+eahOmHjeWumuWQkemhtemdoicsICfmjIflkJHmqKHmnb/nmoTph43lrprlkJHpoIHpnaInKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfliKvlkI3ph43lrprlkJEnLCAn5Yil5ZCN6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmoIfpopjnmoTlhbbku5blkI3np7DjgIHnrJTlkI3jgIHnu7Dlj7fjgIHlkIzkuYnlrZfnrYknLFxuXHRcdFx0XHRcdFx0J+aomemhjOeahOWFtuS7luWQjeeoseOAgeethuWQjeOAgee2veiZn+OAgeWQjOe+qeWtl+etiSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiB3aW5kb3cud2dVTFMoJ+ivkeWQjemHjeWumuWQkScsICfora/lkI3ph43lrprlkJEnKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+S6uueJqeOAgeS9nOWTgeetieWQhOmhueS6i+eJqeeahOWFtuS7lue/u+ivkeWQjeensCcsXG5cdFx0XHRcdFx0XHQn5Lq654mp44CB5L2c5ZOB562J5ZCE6aCF5LqL54mp55qE5YW25LuW57+76K2v5ZCN56ixJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn57yp5YaZ6YeN5a6a5ZCRJywgJ+e4ruWvq+mHjeWumuWQkScpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+agh+mimOe8qeWGmScsICfmqJnpoYznuK7lr6snKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfmi7zlhpnph43lrprlkJEnLCAn5ou85a+r6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5qCH6aKY55qE5YW25LuW5LiN5ZCM5ou85YaZJywgJ+aomemhjOeahOWFtuS7luS4jeWQjOaLvOWvqycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiB3aW5kb3cud2dVTFMoJ+mUmeWtl+mHjeWumuWQkScsICfpjK/lrZfph43lrprlkJEnKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfnuqDmraPmoIfpopjnmoTluLjop4HplJnor6/mi7zlhpnmiJbor6/mpI0nLCAn57O+5q2j5qiZ6aGM55qE5bi46KaL6Yyv6Kqk5ou85a+r5oiW6Kqk5qSNJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn5pen5ZCN6YeN5a6a5ZCRJywgJ+iIiuWQjemHjeWumuWQkScpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5bCG5LqL54mp5pep5YmN55qE5ZCN56ew5byV5a+86Iez5pu05pS55ZCO55qE5Li76aKYJyxcblx0XHRcdFx0XHRcdCflsIfkuovnianml6nliY3nmoTlkI3nqLHlvJXlsI7oh7Pmm7TmlLnlvoznmoTkuLvpoYwnXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogJ+WFqOWQjemHjeWumuWQkScsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5qCH6aKY55qE5a6M5pW05oiW5pu05a6M5pW05ZCN56ewJywgJ+aomemhjOeahOWujOaVtOaIluabtOWujOaVtOWQjeeosScpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn55+t5ZCN6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WujOaVtOagh+mimOWQjeensOaIluS6uueJqeWFqOWQjeeahOmDqOWIhuOAgeS4jeWujOaVtOeahOWQjeensOaIlueugOensCcsXG5cdFx0XHRcdFx0XHQn5a6M5pW05qiZ6aGM5ZCN56ix5oiW5Lq654mp5YWo5ZCN55qE6YOo5YiG44CB5LiN5a6M5pW055qE5ZCN56ix5oiW57Ch56ixJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICflp5PmsI/ph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAn5Lq654mp5aeT5rCPJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogJ+WQjeWtl+mHjeWumuWQkScsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICfkurrniankurrlkI0nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn5pys5ZCN6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogJ+S6uueJqeacrOWQjScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICfpnZ7kuK3mlofph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+mdnuS4reaWh+agh+mimCcsICfpnZ7kuK3mlofmqJnpoYwnKSxcblx0XHRcdFx0XHRzdWJncm91cDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnYWx0TGFuZ0Zyb20nLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogJ+acrOmHjeaWsOWwjuWQkeeahOiqnuiogO+8iOWPr+mBuO+8iScsXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6XG5cdFx0XHRcdFx0XHRcdFx0J+i8uOWFpemHjeaWsOWwjuWQkeWQjeeoseaJgOS9v+eUqOiqnuiogOeahElTTyA2Mznku6PnorzvvIzkvovlpoJlbuS7o+ihqOiLseiqnu+8jOS7o+eivOWPr+WPg+imiyBUZW1wbGF0ZTpJU09fNjM5X25hbWUnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn5pel5paH6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfml6Xor63lkI3np7AnLCAn5pel6Kqe5ZCN56ixJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiAn5YG255So5qih5p2/Jyxcblx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICfop5LoibLph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+eUteinhuWJp+OAgeeUteW9seOAgeS5puexjeetieS9nOWTgeeahOinkuiJsicsICfpm7voppbliofjgIHpm7vlvbHjgIHmm7jnsY3nrYnkvZzlk4HnmoTop5LoibInKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfnq6DoioLph43lrprlkJEnLCAn56ug56+A6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5a+85ZCR6Iez6L6D6auY5a+G5bqm57uE57uH55qE6aG16Z2iJywgJ+WwjuWQkeiHs+i8g+mrmOWvhuW6pue1hOe5lOeahOmggemdoicpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn5YiX6KGo6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflr7zlkJHoh7PkvY7lr4bluqbnmoTliJfooagnLCAn5bCO5ZCR6Iez5L2O5a+G5bqm55qE5YiX6KGoJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICflj6/og73mgKfph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5a+85ZCR6Iez5b2T5YmN5o+Q5L6b5YaF5a655pu05Li66K+m5bC955qE55uu5qCH6aG16Z2iJyxcblx0XHRcdFx0XHRcdCflsI7lkJHoh7PnlbbliY3mj5Dkvpvlhaflrrnmm7TngrroqbPnm6HnmoTnm67mqJnpoIHpnaInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCflhbPogZTlrZfph43lrprlkJEnLCAn6Zec6IGv5a2X6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5qCH6aKY5ZCN56ew5YWz6IGU5a2XJywgJ+aomemhjOWQjeeosemXnOiBr+WtlycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiB3aW5kb3cud2dVTFMoJ+adoeebruivt+axgumHjeWumuWQkScsICfmop3nm67oq4vmsYLph43lrprlkJEnKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfpnIDopoHni6znq4vmnaHnm67nmoTpobXpnaInLCAn6ZyA6KaB542o56uL5qKd55uu55qE6aCB6Z2iJyksXG5cdFx0XHRcdFx0c3ViZ3JvdXA6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3JlcUFydGljbGVMYW5nJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6ICflpJboqp7oqp7oqIDku6PnorzvvJonLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiAn5L2/55SoSVNPIDYzOeS7o+eivO+8jOWPr+WPg+imiyBUZW1wbGF0ZTpJU09fNjM5X25hbWUnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3JlcUFydGljbGVUaXRsZScsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5aSW6Kqe6aCB6Z2i5ZCN56ix77yaJyxcblx0XHRcdFx0XHRcdFx0c2l6ZTogNjAsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn5b+r5o235pa55byP6YeN5a6a5ZCRJywgJ+aNt+W+kemHjeWumuWQkScpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+acieWFveaho+ahiOmmhuW/q+aNt+aWueW8jycsICfmnInnjbjmqpTmoYjppKjlv6vmjbfmlrnlvI8nKSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn6bKc55So5qih5p2/JywgJ+murueUqOaooeadvycpLFxuXHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfor43nu4Tph43lrprlkJEnLCAn6Kme57WE6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflsIbor43nu4Qv6K+N57uEL+aIkOivreaMh+WQkeWIh+mimOeahOadoeebruWPiuaBsOW9k+eroOiKgicsXG5cdFx0XHRcdFx0XHQn5bCH6Kme57WEL+ipnue1hC/miJDoqp7mjIflkJHliIfpoYznmoTmop3nm67lj4rmgbDnlbbnq6Dnr4AnXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfmtojmrafkuYnpobXph43lrprlkJEnLCAn5raI5q2n576p6aCB6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5oyH5ZCR5raI5q2n5LmJ6aG1JywgJ+aMh+WQkea2iOatp+e+qemggScpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn5Z+f5ZCN6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfln5/lkI0nLCAn57ay5Z+f5ZCN56ixJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICflubTku6Pph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+S6juW5tOS7veadoeebruWvvOWQkeiHs+W5tOS7o+adoeebricsICfmlrzlubTku73mop3nm67lsI7lkJHoh7PlubTku6Pmop3nm64nKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfnlKjmiLfmoYbmqKHmnb/ph43lrprlkJEnLCAn55So5oi25qGG5qih5p2/6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn55So5oi35qGG5qih5p2/JywgJ+eUqOaItuahhuaooeadvycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn6YeN5a6a5ZCR5qih5p2/55So6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflr7zlkJHoh7Pph43lrprlkJHmqKHmnb8nLCAn5bCO5ZCR6Iez6YeN5a6a5ZCR5qih5p2/JyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICdFWElG6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCdKUEVH5Zu+5YOP5paH5Lu25YyF5ZCrRVhJRuS/oeaBrycsICdKUEVH5ZyW5qqU5YyF5ZCrRVhJRuizh+ioiicpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRdO1xuXHQvLyBtYWludGVuYW5jZSB0YWdzIGZvciBGSUxFUyBzdGFydCBoZXJlXG5cdFR3aW5rbGUudGFnLmZpbGVMaXN0ID0gW1xuXHRcdHtcblx0XHRcdGtleTogd2luZG93LndnVUxTKCfokZfkvZzmnYPlkozmnaXmupDpl67popjmoIfnrb4nLCAn6JGX5L2c5qyK5ZKM5L6G5rqQ5ZWP6aGM5qiZ57GkJyksXG5cdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e05vbi1mcmVlIHJlZHVjZX1977yaJHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Z2e5L2O5YiG6L6o546H55qE5ZCI55CG5L2/55So5Zu+5YOP77yI5oiW6L+H6ZW/55qE6Z+z6aKR5Ymq6L6R562J77yJJyxcblx0XHRcdFx0XHRcdCfpnZ7kvY7op6PmnpDluqbnmoTlkIjnkIbkvb/nlKjlnJblg4/vvIjmiJbpgY7plbfnmoTpn7PpoLvliarovK/nrYnvvIknXG5cdFx0XHRcdFx0KX1gLFxuXHRcdFx0XHRcdHZhbHVlOiAnTm9uLWZyZWUgcmVkdWNlJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5riF55CG5qCH562+JywgJ+a4heeQhuaomeexpCcpLFxuXHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3tXYXRlcm1hcmt9fe+8miR7d2luZG93LndnVUxTKCflm77lg4/ljIXlkKvkuobmsLTljbAnLCAn5ZyW5YOP5YyF5ZCr5LqG5rWu5rC05Y2wJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ1dhdGVybWFyaycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7UmVuYW1lIG1lZGlhfX3vvJoke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmlofku7blupTor6XmoLnmja7mlofku7blkI3np7DmjIflvJXooqvph43lkb3lkI0nLFxuXHRcdFx0XHRcdFx0J+aqlOahiOaHieipsuagueaTmuaqlOahiOWQjeeoseaMh+W8leiiq+mHjeaWsOWRveWQjSdcblx0XHRcdFx0XHQpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdSZW5hbWUgbWVkaWEnLFxuXHRcdFx0XHRcdHN1Ymdyb3VwOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdyZW5hbWVtZWRpYU5ld25hbWUnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmlrDlkI3np7DvvJonLCAn5paw5ZCN56ix77yaJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn6L6T5YWl5Zu+5YOP55qE5paw5ZCN56ew77yI5Y+v6YCJ77yJJywgJ+i8uOWFpeWcluWDj+eahOaWsOWQjeeose+8iOWPr+mBuO+8iScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3JlbmFtZW1lZGlhUmVhc29uJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6ICfljp/lm6DvvJonLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+i+k+WFpemHjeWRveWQjeeahOWOn+WboO+8iOWPr+mAie+8iScsICfovLjlhaXph43mlrDlkb3lkI3nmoTljp/lm6DvvIjlj6/pgbjvvIknKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3tTaG91bGQgYmUgU1ZHfX3vvJoke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCdQTkfjgIFHSUbjgIFKUEVH5paH5Lu25bqU6K+l6YeN5Yi25oiQ55+i6YeP5Zu+5b2iJyxcblx0XHRcdFx0XHRcdCdQTkfjgIFHSUbjgIFKUEVH5qqU5qGI5oeJ6Kmy6YeN6KO95oiQ5ZCR6YeP5ZyW5b2iJ1xuXHRcdFx0XHRcdCl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ1Nob3VsZCBiZSBTVkcnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogd2luZG93LndnVUxTKCfmlofku7blj5bku6PmoIfnrb4nLCAn5qqU5qGI5Y+W5Luj5qiZ57GkJyksXG5cdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e09ic29sZXRlfX3vvJoke3dpbmRvdy53Z1VMUygn5pyJ5paw54mI5pys5Y+v55So55qE6L+H5pe25paH5Lu2JywgJ+acieaWsOeJiOacrOWPr+eUqOeahOmBjuaZguaqlOahiCcpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdPYnNvbGV0ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7VmVjdG9yIHZlcnNpb24gYXZhaWxhYmxlfX3vvJoke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmnInnn6Lph4/lm77lvaLlj6/nlKjnmoTpnZ7nn6Lph4/lm77lvaLmlofku7YnLFxuXHRcdFx0XHRcdFx0J+acieWQkemHj+WcluW9ouWPr+eUqOeahOmdnuWQkemHj+WcluW9ouaqlOahiCdcblx0XHRcdFx0XHQpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdWZWN0b3IgdmVyc2lvbiBhdmFpbGFibGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHRcdGJ1aWxkRmlsZW5hbWU6IHRydWUsXG5cdFx0fSxcblx0XTtcblx0VHdpbmtsZS50YWcuY2FsbGJhY2tzID0ge1xuXHRcdGFydGljbGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHQvLyBSZW1vdmUgdGFncyB0aGF0IGJlY29tZSBzdXBlcmZsdW91cyB3aXRoIHRoaXMgYWN0aW9uXG5cdFx0XHRsZXQgcGFnZVRleHQgPSBwYWdlb2JqXG5cdFx0XHRcdC5nZXRQYWdlVGV4dCgpXG5cdFx0XHRcdC5yZXBsYWNlKFxuXHRcdFx0XHRcdC9cXHtcXHtcXHMqKFtObl1ldyB1bnJldmlld2VkIGFydGljbGV8W1V1XW5yZXZpZXdlZHxbVXVdc2Vyc3BhY2UgZHJhZnQpXFxzKihcXHwoPzpcXHtcXHtbXnt9XSpcXH1cXH18W157fV0pKik/XFx9XFx9XFxzKi9nLFxuXHRcdFx0XHRcdCcnXG5cdFx0XHRcdCk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTYXZlcyB0aGUgcGFnZSBmb2xsb3dpbmcgdGhlIHJlbW92YWwgb2YgdGFncyBpZiBhbnkuIFRoZSBsYXN0IHN0ZXAuXG5cdFx0XHQgKiBDYWxsZWQgZnJvbSByZW1vdmVUYWdzKClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgcG9zdFJlbW92YWwgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChwYXJhbXMudGFnc1RvUmVtb3ZlLmxlbmd0aCkge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBlbXB0eSB7e211bHRpcGxlIGlzc3Vlc319IGlmIGZvdW5kXG5cdFx0XHRcdFx0cGFnZVRleHQgPSBwYWdlVGV4dC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0L1xce1xceyhtdWx0aXBsZSA/aXNzdWVzfGFydGljbGUgP2lzc3Vlc3xtaXxhaXxpc3N1ZXN85aSa5YCL5ZWP6aGMfOWkmuS4qumXrumimHzllY/poYzmop3nm6586Zeu6aKY5p2h55uufOaVuOWAi+WVj+mhjHzmlbDkuKrpl67popgpXFxzKlxcfFxccypcXH1cXH1cXG4/L2ltLFxuXHRcdFx0XHRcdFx0Jydcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBzaW5nbGUtZWxlbWVudCB7e211bHRpcGxlIGlzc3Vlc319IGlmIGZvdW5kXG5cdFx0XHRcdFx0cGFnZVRleHQgPSBwYWdlVGV4dC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0L1xce1xceyg/Om11bHRpcGxlID9pc3N1ZXN8YXJ0aWNsZSA/aXNzdWVzfG1pfGFpfGlzc3Vlc3zlpJrlgIvllY/poYx85aSa5Liq6Zeu6aKYfOWVj+mhjOaineebrnzpl67popjmnaHnm6585pW45YCL5ZWP6aGMfOaVsOS4qumXrumimClcXHMqXFx8XFxzKihcXHtcXHsoPzpcXHtcXHtbXnt9XSpcXH1cXH18W157fV0pK1xcfVxcfSlcXHMqXFx9XFx9L2ltLFxuXHRcdFx0XHRcdFx0JyQxJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQnVpbGQgZWRpdCBzdW1tYXJ5XG5cdFx0XHRcdGNvbnN0IG1ha2VTZW50ZW5jZSA9IChhcnJheSkgPT4ge1xuXHRcdFx0XHRcdGlmIChhcnJheS5sZW5ndGggPCAzKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXJyYXkuam9pbign5ZKMJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGxhc3QgPSBhcnJheS5wb3AoKTtcblx0XHRcdFx0XHRyZXR1cm4gYCR7YXJyYXkuam9pbign44CBJyl95ZKMJHtsYXN0fWA7XG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IG1ha2VUZW1wbGF0ZUxpbmsgPSAodGFnKSA9PiB7XG5cdFx0XHRcdFx0bGV0IHRleHQgPSAne3tbWyc7XG5cdFx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBjdXN0b20gdGFnIHdpdGggYSBwYXJhbWV0ZXJcblx0XHRcdFx0XHRpZiAodGFnLmluY2x1ZGVzKCd8JykpIHtcblx0XHRcdFx0XHRcdHRhZyA9IHRhZy5zbGljZSgwLCB0YWcuaW5kZXhPZignfCcpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGV4dCArPSB0YWcuaW5jbHVkZXMoJzonKSA/IHRhZyA6IGBUZW1wbGF0ZToke3RhZ318JHt0YWd9YDtcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGV4dH1dXX19YDtcblx0XHRcdFx0fTtcblx0XHRcdFx0bGV0IHN1bW1hcnlUZXh0O1xuXHRcdFx0XHRjb25zdCBhZGRlZFRhZ3MgPSBwYXJhbXMudGFncy5tYXAobWFrZVRlbXBsYXRlTGluayk7XG5cdFx0XHRcdGNvbnN0IHJlbW92ZWRUYWdzID0gcGFyYW1zLnRhZ3NUb1JlbW92ZS5tYXAobWFrZVRlbXBsYXRlTGluayk7XG5cdFx0XHRcdGlmIChhZGRlZFRhZ3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0c3VtbWFyeVRleHQgPSBg5Yqg5YWlJHttYWtlU2VudGVuY2UoYWRkZWRUYWdzKX1gO1xuXHRcdFx0XHRcdHN1bW1hcnlUZXh0ICs9IHJlbW92ZWRUYWdzLmxlbmd0aCA/IGDkuKbnp7vpmaQke21ha2VTZW50ZW5jZShyZW1vdmVkVGFncyl9YCA6ICcnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN1bW1hcnlUZXh0ID0gYOenu+mZpCR7bWFrZVNlbnRlbmNlKHJlbW92ZWRUYWdzKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnlUZXh0ICs9IHdpbmRvdy53Z1VMUygn5qCH6K6wJywgJ+aomeiomCcpO1xuXHRcdFx0XHRpZiAocGFyYW1zLnJlYXNvbikge1xuXHRcdFx0XHRcdHN1bW1hcnlUZXh0ICs9IGDvvJoke3BhcmFtcy5yZWFzb259YDtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBhdm9pZCB0cnVuY2F0ZWQgc3VtbWFyaWVzXG5cdFx0XHRcdGlmIChzdW1tYXJ5VGV4dC5sZW5ndGggPiA0OTkpIHtcblx0XHRcdFx0XHRzdW1tYXJ5VGV4dCA9IHN1bW1hcnlUZXh0LnJlcGxhY2UoL1xcW1xcW1tefF0rXFx8KFteXFxdXSspXFxdXFxdL2csICckMScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQocGFnZVRleHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KHN1bW1hcnlUZXh0KTtcblx0XHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZignd2F0Y2hUYWdnZWRQYWdlcycpKTtcblx0XHRcdFx0cGFnZW9iai5zZXRNaW5vckVkaXQoVHdpbmtsZS5nZXRQcmVmKCdtYXJrVGFnZ2VkUGFnZXNBc01pbm9yJykpO1xuXHRcdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdFx0cGFnZW9iai5zYXZlKCgpID0+IHtcblx0XHRcdFx0XHQvLyBzcGVjaWFsIGZ1bmN0aW9ucyBmb3IgbWVyZ2UgdGFnc1xuXHRcdFx0XHRcdGlmIChwYXJhbXMubWVyZ2VSZWFzb24pIHtcblx0XHRcdFx0XHRcdC8vIHBvc3QgdGhlIHJhdGlvbmFsZSBvbiB0aGUgdGFsayBwYWdlIChvbmx5IG9wZXJhdGVzIGluIG1haW4gbmFtZXNwYWNlKVxuXHRcdFx0XHRcdFx0Y29uc3QgdGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHRgVGFsazoke3BhcmFtcy5kaXNjdXNzQXJ0aWNsZX1gLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WwhueQhueUsei0tOi/m+iuqOiuuumhtScsICflsIfnkIbnlLHosrzpgLLoqI7oq5bpoIEnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHRhbGtwYWdlLnNldE5ld1NlY3Rpb25UZXh0KGAke3BhcmFtcy5tZXJnZVJlYXNvbi50cmltKCl9IH5+YC5jb25jYXQoJ35+JykpO1xuXHRcdFx0XHRcdFx0dGFsa3BhZ2Uuc2V0TmV3U2VjdGlvblRpdGxlKGDor7fmsYLkuI5bWyR7cGFyYW1zLm5vbkRpc2N1c3NBcnRpY2xlfV1d5ZCI5bm2YCk7XG5cdFx0XHRcdFx0XHR0YWxrcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0XHR0YWxrcGFnZS5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCd3YXRjaE1lcmdlRGlzY3Vzc2lvbnMnKSk7XG5cdFx0XHRcdFx0XHR0YWxrcGFnZS5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdFx0XHR0YWxrcGFnZS5uZXdTZWN0aW9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwYXJhbXMubWVyZ2VUYWdPdGhlcikge1xuXHRcdFx0XHRcdFx0Ly8gdGFnIHRoZSB0YXJnZXQgcGFnZSBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0XHRcdGxldCBvdGhlclRhZ05hbWUgPSAnTWVyZ2UnO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5tZXJnZVRhZyA9PT0gJ01lcmdlIGZyb20nKSB7XG5cdFx0XHRcdFx0XHRcdG90aGVyVGFnTmFtZSA9ICdNZXJnZSB0byc7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtcy5tZXJnZVRhZyA9PT0gJ01lcmdlIHRvJykge1xuXHRcdFx0XHRcdFx0XHRvdGhlclRhZ05hbWUgPSAnTWVyZ2UgZnJvbSc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdQYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRcdHRhZ3M6IFtvdGhlclRhZ05hbWVdLFxuXHRcdFx0XHRcdFx0XHR0YWdzVG9SZW1vdmU6IFtdLFxuXHRcdFx0XHRcdFx0XHR0YWdzVG9SZW1haW46IFtdLFxuXHRcdFx0XHRcdFx0XHRtZXJnZVRhcmdldDogTW9yZWJpdHMucGFnZU5hbWVOb3JtLFxuXHRcdFx0XHRcdFx0XHRkaXNjdXNzQXJ0aWNsZTogcGFyYW1zLmRpc2N1c3NBcnRpY2xlLFxuXHRcdFx0XHRcdFx0XHR0YWxrRGlzY3Vzc2lvblRpdGxlOiBwYXJhbXMudGFsa0Rpc2N1c3Npb25UaXRsZSxcblx0XHRcdFx0XHRcdFx0dGFsa0Rpc2N1c3Npb25UaXRsZUxpbmtlZDogcGFyYW1zLnRhbGtEaXNjdXNzaW9uVGl0bGVMaW5rZWQsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3RoZXJwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdFx0cGFyYW1zLm1lcmdlVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+agh+iusOWFtuS7lumhtemdou+8iCcsICfmqJnoqJjlhbbku5bpoIHpnaLvvIgnKSArIHBhcmFtcy5tZXJnZVRhcmdldH3vvIlgXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0b3RoZXJwYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhuZXdQYXJhbXMpO1xuXHRcdFx0XHRcdFx0b3RoZXJwYWdlLmxvYWQoVHdpbmtsZS50YWcuY2FsbGJhY2tzLmFydGljbGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBzcGVjaWFsIGZ1bmN0aW9ucyBmb3IgcmVxdWVzdGVkIG1vdmUgdGFnc1xuXHRcdFx0XHRcdGlmIChwYXJhbXMubW92ZVJlYXNvbikge1xuXHRcdFx0XHRcdFx0Ly8gcG9zdCB0aGUgcmF0aW9uYWxlIG9uIHRoZSB0YWxrIHBhZ2UgKG9ubHkgb3BlcmF0ZXMgaW4gbWFpbiBuYW1lc3BhY2UpXG5cdFx0XHRcdFx0XHRsZXQgbW92ZVRhbGtwYWdlVGV4dCA9ICdcXG5cXG57eycuY29uY2F0KCdzdWJzdDonLCBgUk18MT0ke3BhcmFtcy5tb3ZlUmVhc29uLnRyaW0oKX1gKTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbXMubW92ZVRhcmdldCkge1xuXHRcdFx0XHRcdFx0XHRtb3ZlVGFsa3BhZ2VUZXh0ICs9IGB8Mj0ke3BhcmFtcy5tb3ZlVGFyZ2V0fWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtb3ZlVGFsa3BhZ2VUZXh0ICs9ICd9fSc7XG5cdFx0XHRcdFx0XHRjb25zdCBtb3ZlVGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHRgVGFsazoke3BhcmFtcy5kaXNjdXNzQXJ0aWNsZX1gLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WwhueQhueUsei0tOi/m+iuqOiuuumhtScsICflsIfnkIbnlLHosrzpgLLoqI7oq5bpoIEnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdG1vdmVUYWxrcGFnZS5zZXRBcHBlbmRUZXh0KG1vdmVUYWxrcGFnZVRleHQpO1xuXHRcdFx0XHRcdFx0bW92ZVRhbGtwYWdlLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivt+axguenu+WKqCcsICfoq4vmsYLnp7vli5UnKSArXG5cdFx0XHRcdFx0XHRcdFx0KHBhcmFtcy5tb3ZlVGFyZ2V0ID8gYOiHs1tbJHtwYXJhbXMubW92ZVRhcmdldH1dXWAgOiAnJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRtb3ZlVGFsa3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdFx0bW92ZVRhbGtwYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdFx0XHRcdG1vdmVUYWxrcGFnZS5hcHBlbmQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAocGFyYW1zLnBhdHJvbCkge1xuXHRcdFx0XHRcdHBhZ2VvYmoucGF0cm9sKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHQvKipcblx0XHRcdCAqIFJlbW92ZXMgdGhlIGV4aXN0aW5nIHRhZ3MgdGhhdCB3ZXJlIGRlc2VsZWN0ZWQgKGlmIGFueSlcblx0XHRcdCAqIENhbGxzIHBvc3RSZW1vdmFsKCkgd2hlbiBkb25lXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IHJlbW92ZVRhZ3MgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChwYXJhbXMudGFnc1RvUmVtb3ZlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHBvc3RSZW1vdmFsKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbmZvKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn56e76Zmk5Y+W5raI6YCJ5oup55qE5bey5a2Y5Zyo5qCH6K6wJywgJ+enu+mZpOWPlua2iOmBuOaTh+eahOW3suWtmOWcqOaomeiomCcpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGdldFJlZGlyZWN0c0ZvciA9IFtdO1xuXHRcdFx0XHQvLyBSZW1vdmUgdGhlIHRhZ3MgZnJvbSB0aGUgcGFnZSB0ZXh0LCBpZiBmb3VuZCBpbiBpdHMgcHJvcGVyIG5hbWUsXG5cdFx0XHRcdC8vIG90aGVyd2lzZSBtb3ZlcyBpdCB0byBgZ2V0UmVkaXJlY3RzRm9yYCBhcnJheSBlYXJtYXJraW5nIGl0IGZvclxuXHRcdFx0XHQvLyBsYXRlciByZW1vdmFsXG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHBhcmFtcy50YWdzVG9SZW1vdmUpIHtcblx0XHRcdFx0XHRjb25zdCB0YWdfcmUgPSBuZXcgUmVnRXhwKGBcXFxce1xcXFx7JHtNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KHRhZyl9XFxcXHMqKFxcXFx8W159XSspP1xcXFx9XFxcXH1cXFxcbj9gKTtcblx0XHRcdFx0XHRpZiAodGFnX3JlLnRlc3QocGFnZVRleHQpKSB7XG5cdFx0XHRcdFx0XHRwYWdlVGV4dCA9IHBhZ2VUZXh0LnJlcGxhY2UodGFnX3JlLCAnJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGdldFJlZGlyZWN0c0Zvci5wdXNoKGBUZW1wbGF0ZToke3RhZ31gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFnZXRSZWRpcmVjdHNGb3IubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cG9zdFJlbW92YWwoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gUmVtb3ZlIHRhZ3Mgd2hpY2ggYXBwZWFyIGluIHBhZ2UgdGV4dCBhcyByZWRpcmVjdHNcblx0XHRcdFx0Y29uc3QgYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W5qih5p2/6YeN5a6a5ZCRJywgJ+WPluW+l+aooeadv+mHjeaWsOWwjuWQkScpLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHByb3A6ICdsaW5rc2hlcmUnLFxuXHRcdFx0XHRcdFx0dGl0bGVzOiBnZXRSZWRpcmVjdHNGb3Iuam9pbignfCcpLFxuXHRcdFx0XHRcdFx0cmVkaXJlY3RzOiAxLFxuXHRcdFx0XHRcdFx0bGhuYW1lc3BhY2U6ICcxMCcsXG5cdFx0XHRcdFx0XHRsaHNob3c6ICdyZWRpcmVjdCcsXG5cdFx0XHRcdFx0XHRsaGxpbWl0OiAnbWF4JywgLy8gNTAwIGlzIG1heCBmb3Igbm9ybWFsIHVzZXJzLCA1MDAwIGZvciBib3RzIGFuZCBzeXNvcHNcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdChhcGlvYmopID0+IHtcblx0XHRcdFx0XHRcdCQoYXBpb2JqLnJlc3BvbnNlWE1MKVxuXHRcdFx0XHRcdFx0XHQuZmluZCgncGFnZScpXG5cdFx0XHRcdFx0XHRcdC5lYWNoKChfaWR4LCBwYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHJlbW92ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHQkKHBhZ2UpXG5cdFx0XHRcdFx0XHRcdFx0XHQuZmluZCgnbGgnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmVhY2goKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0YWcgPSAkKGVsZW1lbnQpLmF0dHIoJ3RpdGxlJykuc2xpY2UoOSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRhZ19yZSA9IG5ldyBSZWdFeHAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YFxcXFx7XFxcXHske01vcmViaXRzLnBhZ2VOYW1lUmVnZXgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxcXFxzKihcXFxcfCg/OlxcXFx7XFxcXHtbXnt9XSpcXFxcfVxcXFx9fFtee31dKSopP1xcXFx9XFxcXH1cXFxcbj9gXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0YWdfcmUudGVzdChwYWdlVGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYWdlVGV4dCA9IHBhZ2VUZXh0LnJlcGxhY2UodGFnX3JlLCAnJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVtb3ZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBicmVhayBvdXQgb2YgJC5lYWNoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZW1vdmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5peg5rOV5Zyo6aG16Z2i5LiK5om+5Yiwe3snLCAn54Sh5rOV5Zyo6aCB6Z2i5LiK5om+5Yiwe3snKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JChwYWdlKS5hdHRyKCd0aXRsZScpLnNsaWNlKDkpICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ3194oCm4oCm6Lez6L+HJywgJ3194oCm4oCm6Lez6YGOJylcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHBvc3RSZW1vdmFsKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhcGkucG9zdCgpO1xuXHRcdFx0fTtcblx0XHRcdGlmICghcGFyYW1zLnRhZ3MubGVuZ3RoKSB7XG5cdFx0XHRcdHJlbW92ZVRhZ3MoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHRhZ1JlO1xuXHRcdFx0bGV0IHRhZ1RleHQgPSAnJztcblx0XHRcdGxldCB0YWdzID0gW107XG5cdFx0XHRjb25zdCBncm91cGFibGVUYWdzID0gW107XG5cdFx0XHRjb25zdCBncm91cGFibGVFeGlzdGluZ1RhZ3MgPSBbXTtcblx0XHRcdC8vIEV4ZWN1dGVzIGZpcnN0OiBhZGRpdGlvbiBvZiBzZWxlY3RlZCB0YWdzXG5cdFx0XHQvKipcblx0XHRcdCAqIFVwZGF0ZXMgYHRhZ1RleHRgIHdpdGggdGhlIHN5bnRheCBvZiBgdGFnTmFtZWAgdGVtcGxhdGUgd2l0aCBpdHMgcGFyYW1ldGVyc1xuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGFkZFRhZyA9ICh0YWdOYW1lKSA9PiB7XG5cdFx0XHRcdGxldCBjdXJyZW50VGFnID0gJyc7XG5cdFx0XHRcdGlmICh0YWdOYW1lID09PSAnVW5jYXRlZ29yaXplZCcgfHwgdGFnTmFtZSA9PT0gJ0ltcHJvdmUgY2F0ZWdvcmllcycpIHtcblx0XHRcdFx0XHRwYWdlVGV4dCArPSBgXFxuXFxue3ske3RhZ05hbWV9fHRpbWU9e3tgLmNvbmNhdCgnc3Vic3Q6JywgJyN0aW1lOmN9fX19Jyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3VycmVudFRhZyArPSBge3ske3RhZ05hbWV9YDtcblx0XHRcdFx0XHQvLyBmaWxsIGluIG90aGVyIHBhcmFtZXRlcnMsIGJhc2VkIG9uIHRoZSB0YWdcblx0XHRcdFx0XHRzd2l0Y2ggKHRhZ05hbWUpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ0V4cGVydCBuZWVkZWQnOlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8c3ViamVjdD0ke3BhcmFtcy5leHBlcnR9YDtcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5leHBlcnQyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfHN1YmplY3QyPSR7cGFyYW1zLmV4cGVydDJ9YDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLmV4cGVydDMpIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8c3ViamVjdDM9JHtwYXJhbXMuZXhwZXJ0M31gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UnOlxuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UgdG8nOlxuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UgZnJvbSc6XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbXMubWVyZ2VUYXJnZXQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBub3JtYWxpemUgdGhlIG1lcmdlIHRhcmdldCBmb3Igbm93IGFuZCBsYXRlclxuXHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tZXJnZVRhcmdldCA9IE1vcmViaXRzLnN0cmluZy50b1VwcGVyQ2FzZUZpcnN0Q2hhcihcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tZXJnZVRhcmdldC5yZXBsYWNlKC9fL2csICcgJylcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHwke3BhcmFtcy5tZXJnZVRhcmdldH1gO1xuXHRcdFx0XHRcdFx0XHRcdC8vIGxpbmsgdG8gdGhlIGNvcnJlY3Qgc2VjdGlvbiBvbiB0aGUgdGFsayBwYWdlLCBmb3IgYXJ0aWNsZSBzcGFjZSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KHBhcmFtcy5tZXJnZVJlYXNvbiB8fCBwYXJhbXMuZGlzY3Vzc0FydGljbGUpXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXBhcmFtcy5kaXNjdXNzQXJ0aWNsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBkaXNjdXNzQXJ0aWNsZSBpcyB0aGUgYXJ0aWNsZSB3aG9zZSB0YWxrIHBhZ2Ugd2lsbCBjb250YWluIHRoZSBkaXNjdXNzaW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5kaXNjdXNzQXJ0aWNsZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnTmFtZSA9PT0gJ01lcmdlIHRvJyA/IHBhcmFtcy5tZXJnZVRhcmdldCA6IG13LmNvbmZpZy5nZXQoJ3dnVGl0bGUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gbm9uRGlzY3Vzc0FydGljbGUgaXMgdGhlIGFydGljbGUgd2hpY2ggd29uJ3QgaGF2ZSB0aGUgZGlzY3Vzc2lvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubm9uRGlzY3Vzc0FydGljbGUgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhZ05hbWUgPT09ICdNZXJnZSB0bycgPyBtdy5jb25maWcuZ2V0KCd3Z1RpdGxlJykgOiBwYXJhbXMubWVyZ2VUYXJnZXQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy50YWxrRGlzY3Vzc2lvblRpdGxlID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivt+axguS4jicsICfoq4vmsYLoiIcnKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm5vbkRpc2N1c3NBcnRpY2xlICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WQiOW5ticsICflkIjkvbUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHxkaXNjdXNzPVRhbGs6JHtwYXJhbXMuZGlzY3Vzc0FydGljbGV9IyR7cGFyYW1zLnRhbGtEaXNjdXNzaW9uVGl0bGV9YDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdNaXNzaW5nIGluZm9ybWF0aW9uJzpcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDE9JHtwYXJhbXMubWlzc2luZ0luZm9ybWF0aW9ufWA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnTm90YWJpbGl0eSc6XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbXMubm90YWJpbGl0eSAhPT0gJ25vbmUnKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDM9JHtwYXJhbXMubm90YWJpbGl0eX1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnUmVxdWVzdGVkIG1vdmUnOlxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLm1vdmVUYXJnZXQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBub3JtYWxpemUgdGhlIG1vdmUgdGFyZ2V0IGZvciBub3cgYW5kIGxhdGVyXG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1vdmVUYXJnZXQgPSBNb3JlYml0cy5zdHJpbmcudG9VcHBlckNhc2VGaXJzdENoYXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubW92ZVRhcmdldC5yZXBsYWNlKC9fL2csICcgJylcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5kaXNjdXNzQXJ0aWNsZSA9IG13LmNvbmZpZy5nZXQoJ3dnVGl0bGUnKTtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8JHtwYXJhbXMubW92ZVRhcmdldH1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnU3BsaXQnOlxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLnRhcmdldDEpIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8MT0ke3BhcmFtcy50YXJnZXQxfWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy50YXJnZXQyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDI9JHtwYXJhbXMudGFyZ2V0Mn1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbXMudGFyZ2V0Mykge1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHwzPSR7cGFyYW1zLnRhcmdldDN9YDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0NsZWFudXAnOlxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLmNsZWFudXBSZWFzb24pIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8cmVhc29uPSR7cGFyYW1zLmNsZWFudXBSZWFzb259YDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjdXJyZW50VGFnICs9ICd8dGltZT17eycuY29uY2F0KCdzdWJzdDonLCAnI3RpbWU6Y319fX1cXG4nKTtcblx0XHRcdFx0XHR0YWdUZXh0ICs9IGN1cnJlbnRUYWc7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHQvKipcblx0XHRcdCAqIEFkZHMgdGhlIHRhZ3Mgd2hpY2ggZ28gb3V0c2lkZSB7e211bHRpcGxlIGlzc3Vlc319LCBlaXRoZXIgYmVjYXVzZVxuXHRcdFx0ICogdGhlc2UgdGFncyBhcmVuJ3Qgc3VwcG9ydGVkIGluIHt7bXVsdGlwbGUgaXNzdWVzfX0gb3IgYmVjYXVzZVxuXHRcdFx0ICoge3ttdWx0aXBsZSBpc3N1ZXN9fSBpcyBub3QgYmVpbmcgYWRkZWQgdG8gdGhlIHBhZ2UgYXQgYWxsXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGFkZFVuZ3JvdXBlZFRhZ3MgPSAoKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcblx0XHRcdFx0XHRhZGRUYWcodGFnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJbnNlcnQgdGFnIGFmdGVyIHNob3J0IGRlc2NyaXB0aW9uIG9yIGFueSBoYXRub3Rlcyxcblx0XHRcdFx0Ly8gYXMgd2VsbCBhcyBkZWxldGlvbi9wcm90ZWN0aW9uLXJlbGF0ZWQgdGVtcGxhdGVzXG5cdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpdGV4dC5wYWdlKHBhZ2VUZXh0KTtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVzQWZ0ZXIgPVxuXHRcdFx0XHRcdC8vIFByb3RlY3Rpb24gdGVtcGxhdGVzXG5cdFx0XHRcdFx0Ly8gQ1NEXG5cdFx0XHRcdFx0Ly8gQWZEXG5cdFx0XHRcdFx0YCR7VHdpbmtsZS5oYXRub3RlUmVnZXh9cHB8cHAtLio/fCg/OkRlbGV0ZXxEYi1yZWFzb258RHxEZWxldGViZWNhdXNlfERifOmAn+WIoHzpgJ/liKp8U3BlZWR5fFNEfOW/q+WIoHzlv6vliKp8Q1NEKXxbcnNhaWZ0Y212XWZkfHZmZC0oPzpifHF8c3xzb3VyY2V8dnx3aWt0KXwoPzrnp7vliqjliLDnu7Tln7p856e75YuV5Yiw57at5Z+6KSg/OuaVmeenkeS5pnzmlZnnp5Hmm7h86K+t5b2VfOiqnumMhHzmloflupN85paH5bqrfOWvvOa4uHzlsI7pgYp86K+N5YW4fOipnuWFuClgO1xuXHRcdFx0XHRwYWdlVGV4dCA9IHlzYXJjaGl2ZXNfcGFnZS5pbnNlcnRBZnRlclRlbXBsYXRlcyh0YWdUZXh0LCB0ZW1wbGF0ZXNBZnRlcikuZ2V0VGV4dCgpO1xuXHRcdFx0XHRyZW1vdmVUYWdzKCk7XG5cdFx0XHR9O1xuXHRcdFx0Ly8gU2VwYXJhdGUgdGFncyBpbnRvIGdyb3VwYWJsZSBvbmVzIChgZ3JvdXBhYmxlVGFnc2ApIGFuZCBub24tZ3JvdXBhYmxlIG9uZXMgKGB0YWdzYClcblx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHBhcmFtcy50YWdzKSB7XG5cdFx0XHRcdHRhZ1JlID0gbmV3IFJlZ0V4cChgXFxcXHtcXFxceyR7dGFnfShcXFxcfHxcXFxcfVxcXFx9KWAsICdpbScpO1xuXHRcdFx0XHQvLyByZWdleCBjaGVjayBmb3IgcHJlZXhpc3RlbmNlIG9mIHRhZyBjYW4gYmUgc2tpcHBlZCBpZiBpbiBjYW5SZW1vdmUgbW9kZVxuXHRcdFx0XHRpZiAoVHdpbmtsZS50YWcuY2FuUmVtb3ZlIHx8ICF0YWdSZS5leGVjKHBhZ2VUZXh0KSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHRhZyA9PT0gJ05vdGFiaWxpdHknICYmXG5cdFx0XHRcdFx0XHQobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMCB8fFxuXHRcdFx0XHRcdFx0XHRjb25maXJtKFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfor6XpobXpnaLkuI3mmK/mnaHnm67vvIzmgqjku43opoHmj5DmiqXliLDlhbPms6jluqbmj5DmiqXlkJfvvJ8nLFxuXHRcdFx0XHRcdFx0XHRcdFx0J+ipsumggemdouS4jeaYr+aineebru+8jOaCqOS7jeimgeaPkOWgseWIsOmXnOazqOW6puaPkOWgseWXju+8nydcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHQnTElCX3RhbGs65a2Y5bqf6K6o6K66L+WFs+azqOW6puaPkOaKpScsXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg5YWl5YWz5rOo5bqm6K6w5b2V6aG5JywgJ+WKoOWFpemXnOazqOW6puiomOmMhOmghScpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLmxvYWQoVHdpbmtsZS50YWcuY2FsbGJhY2tzLm5vdGFiaWxpdHlMaXN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uZGl0aW9uIFR3aW5rbGUudGFnLmFydGljbGUudGFnc1t0YWddIHRvIGVuc3VyZSB0aGF0IGl0cyBub3QgYSBjdXN0b20gdGFnXG5cdFx0XHRcdFx0Ly8gQ3VzdG9tIHRhZ3MgYXJlIGFzc3VtZWQgbm9uLWdyb3VwYWJsZSwgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGV0aGVyIE1JIHRlbXBsYXRlIHN1cHBvcnRzIHRoZW1cblx0XHRcdFx0XHRpZiAoVHdpbmtsZS50YWcuYXJ0aWNsZS5mbGF0T2JqZWN0W3RhZ10gJiYgIVR3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFt0YWddLmV4Y2x1ZGVNSSkge1xuXHRcdFx0XHRcdFx0Z3JvdXBhYmxlVGFncy5wdXNoKHRhZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhZ3MucHVzaCh0YWcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh0YWcgPT09ICdNZXJnZSBmcm9tJykge1xuXHRcdFx0XHRcdHRhZ3MucHVzaCh0YWcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy53YXJuKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WcqOmhtemdouS4iuaJvuWIsHt7JywgJ+WcqOmggemdouS4iuaJvuWIsHt7JykgKyB0YWcgKyB3aW5kb3cud2dVTFMoJ3194oCm4oCm6Lez6L+HJywgJ3194oCm4oCm6Lez6YGOJylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdC8vIGRvbid0IGRvIGFueXRoaW5nIGVsc2Ugd2l0aCBtZXJnZSB0YWdzXG5cdFx0XHRcdFx0aWYgKFsnTWVyZ2UnLCAnTWVyZ2UgdG8nXS5pbmNsdWRlcyh0YWcpKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXMubWVyZ2VUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHRcdFx0cGFyYW1zLm1lcmdlUmVhc29uID0gbnVsbDtcblx0XHRcdFx0XHRcdHBhcmFtcy5tZXJnZVRhZ090aGVyID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFRvLWJlLXJldGFpbmVkIGV4aXN0aW5nIHRhZ3MgdGhhdCBhcmUgZ3JvdXBhYmxlXG5cdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiBwYXJhbXMudGFnc1RvUmVtYWluKSB7XG5cdFx0XHRcdC8vIElmIHRoZSB0YWcgaXMgdW5rbm93biB0byB1cywgd2UgY29uc2lkZXIgaXQgbm9uLWdyb3VwYWJsZVxuXHRcdFx0XHRpZiAoVHdpbmtsZS50YWcuYXJ0aWNsZS5mbGF0T2JqZWN0W3RhZ10gJiYgIVR3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFt0YWddLmV4Y2x1ZGVNSSkge1xuXHRcdFx0XHRcdGdyb3VwYWJsZUV4aXN0aW5nVGFncy5wdXNoKHRhZyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IG1pVGVzdCA9XG5cdFx0XHRcdC9cXHtcXHsobXVsdGlwbGUgP2lzc3Vlc3xhcnRpY2xlID9pc3N1ZXN8bWl8YWl8aXNzdWVzfOWkmuWAi+WVj+mhjHzlpJrkuKrpl67poph85ZWP6aGM5qKd55uufOmXrumimOadoeebrnzmlbjlgIvllY/poYx85pWw5Liq6Zeu6aKYKVxccypcXHxbXn1dK1xcey9pbS5leGVjKFxuXHRcdFx0XHRcdHBhZ2VUZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHRpZiAobWlUZXN0ICYmIGdyb3VwYWJsZVRhZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Yqg5YWl5pSv5oyB55qE5qCH6K6w5YWl5bey5a2Y5Zyo55qEe3ttdWx0aXBsZSBpc3N1ZXN9fScsXG5cdFx0XHRcdFx0XHQn5Yqg5YWl5pSv5o+055qE5qiZ6KiY5YWl5bey5a2Y5Zyo55qEe3ttdWx0aXBsZSBpc3N1ZXN9fSdcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRhZ1RleHQgPSAnJztcblx0XHRcdFx0Zm9yIChjb25zdCB0YWcgb2YgZ3JvdXBhYmxlVGFncykge1xuXHRcdFx0XHRcdGFkZFRhZyh0YWcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1pUmVnZXggPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdGAoXFxcXHtcXFxce1xcXFxzKiR7bWlUZXN0WzFdfVxcXFxzKig/OlxcXFx8KD86XFxcXHtcXFxce1tee31dKlxcXFx9XFxcXH18W157fV0pKik/KVxcXFx9XFxcXH1cXFxccypgLFxuXHRcdFx0XHRcdCdpbSdcblx0XHRcdFx0KTtcblx0XHRcdFx0cGFnZVRleHQgPSBwYWdlVGV4dC5yZXBsYWNlKG1pUmVnZXgsIGAkMSR7dGFnVGV4dH19fVxcbmApO1xuXHRcdFx0XHR0YWdUZXh0ID0gJyc7XG5cdFx0XHRcdGFkZFVuZ3JvdXBlZFRhZ3MoKTtcblx0XHRcdH0gZWxzZSBpZiAocGFyYW1zLmdyb3VwICYmICFtaVRlc3QgJiYgZ3JvdXBhYmxlRXhpc3RpbmdUYWdzLmxlbmd0aCArIGdyb3VwYWJsZVRhZ3MubGVuZ3RoID49IDIpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDlhaXmlK/mjIHnmoTmoIforrDlhaV7e211bHRpcGxlIGlzc3Vlc319JywgJ+WKoOWFpeaUr+aPtOeahOaomeiomOWFpXt7bXVsdGlwbGUgaXNzdWVzfX0nKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0YWdUZXh0ICs9ICd7e011bHRpcGxlIGlzc3Vlc3xcXG4nO1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogQWRkcyBuZXdseSBhZGRlZCB0YWdzIHRvIE1JXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCBhZGROZXdUYWdzVG9NSSA9ICgpID0+IHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiBncm91cGFibGVUYWdzKSB7XG5cdFx0XHRcdFx0XHRhZGRUYWcodGFnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGFnVGV4dCArPSAnfX1cXG4nO1xuXHRcdFx0XHRcdGFkZFVuZ3JvdXBlZFRhZ3MoKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgZ2V0UmVkaXJlY3RzRm9yID0gW107XG5cdFx0XHRcdC8vIFJlcG9zaXRpb24gdGhlIHRhZ3Mgb24gdGhlIHBhZ2UgaW50byB7e211bHRpcGxlIGlzc3Vlc319LCBpZiBmb3VuZCB3aXRoIGl0c1xuXHRcdFx0XHQvLyBwcm9wZXIgbmFtZSwgZWxzZSBtb3ZlcyBpdCB0byBgZ2V0UmVkaXJlY3RzRm9yYCBhcnJheSB0byBiZSBoYW5kbGVkIGxhdGVyXG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIGdyb3VwYWJsZUV4aXN0aW5nVGFncykge1xuXHRcdFx0XHRcdGNvbnN0IHRhZ19yZSA9IG5ldyBSZWdFeHAoYChcXFxce1xcXFx7JHtNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KHRhZyl9XFxcXHMqKFxcXFx8W159XSspP1xcXFx9XFxcXH1cXFxcbj8pYCk7XG5cdFx0XHRcdFx0aWYgKHRhZ19yZS50ZXN0KHBhZ2VUZXh0KSkge1xuXHRcdFx0XHRcdFx0dGFnVGV4dCArPSB0YWdfcmUuZXhlYyhwYWdlVGV4dClbMV07XG5cdFx0XHRcdFx0XHRwYWdlVGV4dCA9IHBhZ2VUZXh0LnJlcGxhY2UodGFnX3JlLCAnJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGdldFJlZGlyZWN0c0Zvci5wdXNoKGBUZW1wbGF0ZToke3RhZ31gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFnZXRSZWRpcmVjdHNGb3IubGVuZ3RoKSB7XG5cdFx0XHRcdFx0YWRkTmV3VGFnc1RvTUkoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W5qih5p2/6YeN5a6a5ZCRJywgJ+WPluW+l+aooeadv+mHjeaWsOWwjuWQkScpLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHByb3A6ICdsaW5rc2hlcmUnLFxuXHRcdFx0XHRcdFx0dGl0bGVzOiBnZXRSZWRpcmVjdHNGb3Iuam9pbignfCcpLFxuXHRcdFx0XHRcdFx0cmVkaXJlY3RzOiAxLFxuXHRcdFx0XHRcdFx0bGhuYW1lc3BhY2U6ICcxMCcsXG5cdFx0XHRcdFx0XHRsaHNob3c6ICdyZWRpcmVjdCcsXG5cdFx0XHRcdFx0XHRsaGxpbWl0OiAnbWF4JywgLy8gNTAwIGlzIG1heCBmb3Igbm9ybWFsIHVzZXJzLCA1MDAwIGZvciBib3RzIGFuZCBzeXNvcHNcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdChhcGlvYmopID0+IHtcblx0XHRcdFx0XHRcdCQoYXBpb2JqLnJlc3BvbnNlWE1MKVxuXHRcdFx0XHRcdFx0XHQuZmluZCgncGFnZScpXG5cdFx0XHRcdFx0XHRcdC5lYWNoKChfaWR4LCBwYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0JChwYWdlKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmZpbmQoJ2xoJylcblx0XHRcdFx0XHRcdFx0XHRcdC5lYWNoKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGFnID0gJChlbGVtZW50KS5hdHRyKCd0aXRsZScpLnNsaWNlKDkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0YWdfcmUgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGAoXFxcXHtcXFxceyR7TW9yZWJpdHMucGFnZU5hbWVSZWdleCh0YWcpfVxcXFxzKihcXFxcfFtefV0qKT9cXFxcfVxcXFx9XFxcXG4/KWBcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRhZ19yZS50ZXN0KHBhZ2VUZXh0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhZ1RleHQgKz0gdGFnX3JlLmV4ZWMocGFnZVRleHQpWzFdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhZ2VUZXh0ID0gcGFnZVRleHQucmVwbGFjZSh0YWdfcmUsICcnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBicmVhayBvdXQgb2YgJC5lYWNoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFmb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aXoOazleWcqOmhtemdouS4iuaJvuWIsHt7JywgJ+eEoeazleWcqOmggemdouS4iuaJvuWIsHt7JykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCQocGFnZSkuYXR0cigndGl0bGUnKS5zbGljZSg5KSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCd9feKApuKApui3s+i/hycsICd9feKApuKApui3s+mBjicpXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRhZGROZXdUYWdzVG9NSSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdFx0YXBpLnBvc3QoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhZ3MgPSBbLi4udGFncywgLi4uZ3JvdXBhYmxlVGFnc107XG5cdFx0XHRcdGFkZFVuZ3JvdXBlZFRhZ3MoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG5vdGFiaWxpdHlMaXN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0cGFnZW9iai5zZXRBcHBlbmRUZXh0KCdcXG57eycuY29uY2F0KCdzdWJzdDonLCBgRmFtZWl0ZW18dGl0bGU9JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19fX1gKSk7XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KGDliqDlhaVbWyR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dYCk7XG5cdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdFx0cGFnZW9iai5hcHBlbmQoKTtcblx0XHR9LFxuXHRcdHJlZGlyZWN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGxldCBwYWdlVGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGxldCB0YWdSZTtcblx0XHRcdGxldCB0YWdUZXh0ID0gJyc7XG5cdFx0XHRsZXQgc3VtbWFyeVRleHQgPSAn5Yqg5YWlJztcblx0XHRcdGNvbnN0IHRhZ3MgPSBbXTtcblx0XHRcdGxldCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHBhcmFtcy50YWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHRhZ1JlID0gbmV3IFJlZ0V4cChgKFxcXFx7XFxcXHske3BhcmFtcy50YWdzW2ldfShcXFxcfHxcXFxcfVxcXFx9KSlgLCAnaW0nKTtcblx0XHRcdFx0aWYgKHRhZ1JlLmV4ZWMocGFnZVRleHQpKSB7XG5cdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Zyo6YeN5a6a5ZCR5LiK5om+5Yiwe3snLCAn5Zyo6YeN5paw5bCO5ZCR5LiK5om+5Yiwe3snKSArXG5cdFx0XHRcdFx0XHRcdHBhcmFtcy50YWdzW2ldICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCd9feKApuKApui3s+i/hycsICd9feKApuKApui3s+mBjicpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YWdzLnB1c2gocGFyYW1zLnRhZ3NbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyB1c2VkIGluIEFycmF5I2ZvckVhY2hcblx0XHRcdGNvbnN0IGFkZFRhZyA9ICh0YWdOYW1lLCB0YWdJbmRleCkgPT4ge1xuXHRcdFx0XHR0YWdUZXh0ICs9IGBcXG57eyR7dGFnTmFtZX1gO1xuXHRcdFx0XHRpZiAodGFnTmFtZSA9PT0gJ+mdnuS4reaWh+mHjeWumuWQkScpIHtcblx0XHRcdFx0XHRpZiAocGFyYW1zLmFsdExhbmdGcm9tKSB7XG5cdFx0XHRcdFx0XHR0YWdUZXh0ICs9IGB8MT0ke3BhcmFtcy5hbHRMYW5nRnJvbX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHQodGFnTmFtZSA9PT0gJ+adoeebruivt+axgumHjeWumuWQkScgfHwgdGFnTmFtZSA9PT0gJ+aineebruiri+axgumHjeWumuWQkScpICYmXG5cdFx0XHRcdFx0cGFyYW1zLnJlcUFydGljbGVMYW5nICYmXG5cdFx0XHRcdFx0cGFyYW1zLnJlcUFydGljbGVUaXRsZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWdUZXh0ICs9IGB8MT0ke3BhcmFtcy5yZXFBcnRpY2xlTGFuZ31gO1xuXHRcdFx0XHRcdHRhZ1RleHQgKz0gYHwyPSR7cGFyYW1zLnJlcUFydGljbGVUaXRsZX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRhZ1RleHQgKz0gJ319Jztcblx0XHRcdFx0aWYgKHRhZ0luZGV4ID4gMCkge1xuXHRcdFx0XHRcdGlmICh0YWdJbmRleCA9PT0gdGFncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzdW1tYXJ5VGV4dCArPSAn5ZKMJztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHRhZ0luZGV4IDwgdGFncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzdW1tYXJ5VGV4dCArPSAn44CBJztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3VtbWFyeVRleHQgKz0gYHt7W1s6JHt0YWdOYW1lLmluY2x1ZGVzKCc6JykgPyB0YWdOYW1lIDogYFRlbXBsYXRlOiR7dGFnTmFtZX18JHt0YWdOYW1lfWB9XV19fWA7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKCF0YWdzLmxlbmd0aCkge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ayoeacieagh+etvuWPr+S+m+agh+iusCcsICfmspLmnInmqJnnsaTlj6/kvpvmqJnoqJgnKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGFncy5zb3J0KCk7XG5cdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG5cdFx0XHRcdGFkZFRhZyh0YWcpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGFsbCBSY2F0IHNoZWxsIHJlZGlyZWN0cyAoZnJvbSAjNDMzKVxuXHRcdFx0aWYgKHBhZ2VUZXh0Lm1hdGNoKC97eyg/OnJlZHJ8dGhpcyBpcyBhIHJlZGlyZWN0fHIoPzplZGlyZWN0KT8oPzouP2NhdC4qKT9bIF9dP3NoKS9pKSkge1xuXHRcdFx0XHQvLyBSZWdleCBpbnNwaXJlZCBieSBbW1VzZXI6S2VwaGlyL2dhZGdldHMvc2FnaXR0YXJpdXMuanNdXSAoW1tTcGVjaWFsOlBlcm1hTGluay84MzE0MDI4OTNdXSlcblx0XHRcdFx0Y29uc3Qgb2xkVGFncyA9IHBhZ2VUZXh0Lm1hdGNoKC8oXFxzKnt7W0EtWmEtelxcc10rXFx8KD86XFxzKjE9KT8pKCg/OltefHt9XXx7e1tefV0rfX0pKykofX0pXFxzKi9pKTtcblx0XHRcdFx0cGFnZVRleHQgPSBwYWdlVGV4dC5yZXBsYWNlKG9sZFRhZ3NbMF0sIG9sZFRhZ3NbMV0gKyB0YWdUZXh0ICsgb2xkVGFnc1syXSArIG9sZFRhZ3NbM10pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRm9sZCBhbnkgcHJlLWV4aXN0aW5nIFJjYXRzIGludG8gdGFnbGlzdCBhbmQgdW5kZXIgUmNhdHNoZWxsXG5cdFx0XHRcdGNvbnN0IHBhZ2VUYWdzID0gcGFnZVRleHQubWF0Y2goL1xccyp7ey4rP+mHjeWumuWQkS4qP319L2dpbSk7XG5cdFx0XHRcdGxldCBvbGRQYWdlVGFncyA9ICcnO1xuXHRcdFx0XHRpZiAocGFnZVRhZ3MpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBwYWdlVGFnIG9mIHBhZ2VUYWdzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwYWdlUmUgPSBuZXcgUmVnRXhwKE1vcmViaXRzLnN0cmluZy5lc2NhcGVSZWdFeHAocGFnZVRhZyksICdpbWcnKTtcblx0XHRcdFx0XHRcdHBhZ2VUZXh0ID0gcGFnZVRleHQucmVwbGFjZShwYWdlUmUsICcnKTtcblx0XHRcdFx0XHRcdHBhZ2VUYWcgPSBwYWdlVGFnLnRyaW0oKTtcblx0XHRcdFx0XHRcdG9sZFBhZ2VUYWdzICs9IGBcXG4ke3BhZ2VUYWd9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFnZVRleHQgKz0gYFxcbnt7UmVkaXJlY3QgY2F0ZWdvcnkgc2hlbGx8JHt0YWdUZXh0fSR7b2xkUGFnZVRhZ3N9XFxufX1gO1xuXHRcdFx0fVxuXHRcdFx0c3VtbWFyeVRleHQgKz1cblx0XHRcdFx0KHRhZ3MubGVuZ3RoID4gMCA/IHdpbmRvdy53Z1VMUygn5qCH6K6wJywgJ+aomeiomCcpIDogJ3t7UmVkaXJlY3QgY2F0ZWdvcnkgc2hlbGx9fScpICtcblx0XHRcdFx0d2luZG93LndnVUxTKCfliLDph43lrprlkJEnLCAn5Yiw6YeN5paw5bCO5ZCRJyk7XG5cdFx0XHQvLyBhdm9pZCB0cnVuY2F0ZWQgc3VtbWFyaWVzXG5cdFx0XHRpZiAoc3VtbWFyeVRleHQubGVuZ3RoID4gNDk5KSB7XG5cdFx0XHRcdHN1bW1hcnlUZXh0ID0gc3VtbWFyeVRleHQucmVwbGFjZSgvXFxbXFxbW158XStcXHwoW15cXF1dKylcXF1cXF0vZywgJyQxJyk7XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHBhZ2VUZXh0KTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoc3VtbWFyeVRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3dhdGNoVGFnZ2VkUGFnZXMnKSk7XG5cdFx0XHRwYWdlb2JqLnNldE1pbm9yRWRpdChUd2lua2xlLmdldFByZWYoJ21hcmtUYWdnZWRQYWdlc0FzTWlub3InKSk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZSgpO1xuXHRcdFx0aWYgKHBhcmFtcy5wYXRyb2wpIHtcblx0XHRcdFx0cGFnZW9iai5wYXRyb2woKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGZpbGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRsZXQgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRsZXQgc3VtbWFyeSA9ICfliqDlhaUnO1xuXHRcdFx0Ly8gQWRkIG1haW50ZW5hbmNlIHRhZ3Ncblx0XHRcdGlmIChwYXJhbXMudGFncy5sZW5ndGgpIHtcblx0XHRcdFx0bGV0IHRhZ3RleHQgPSAnJztcblx0XHRcdFx0bGV0IGN1cnJlbnRUYWc7XG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHBhcmFtcy50YWdzKSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiBvdGhlciBjb21tb25zLXJlbGF0ZWQgdGFncyBhcmUgcGxhY2VkLCByZW1vdmUgXCJtb3ZlIHRvIFNoYXJlXCIgdGFnXG5cdFx0XHRcdFx0aWYgKFsnS2VlcCBsb2NhbCcsICdOb3cgWXNBcmNoaXZlcyBTaGFyZScsICdEbyBub3QgbW92ZSB0byBZc0FyY2hpdmVzIFNoYXJlJ10uaW5jbHVkZXModGFnKSkge1xuXHRcdFx0XHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0L3t7KG10Y3woY29weSB8bW92ZSApP3RvID9zaGFyZXxtb3ZlIHRvIHlzYXJjaGl2ZXMgc2hhcmV8Y29weSB0byB5c2FyY2hpdmVzIHNoYXJlKVtefV0qfX0vZ2ksXG5cdFx0XHRcdFx0XHRcdCcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFnID09PSAnVmVjdG9yIHZlcnNpb24gYXZhaWxhYmxlJykge1xuXHRcdFx0XHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0L1xce1xceygoY29udmVydCB0byB8Y29udmVydHRvfHNob3VsZCBiZSB8c2hvdWxkYmV8dG8pP3N2Z3xiYWRwbmd8dmVjdG9yaXplKVtefV0qXFx9XFx9L2dpLFxuXHRcdFx0XHRcdFx0XHQnJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3VycmVudFRhZyA9IHRhZztcblx0XHRcdFx0XHRzd2l0Y2ggKHRhZykge1xuXHRcdFx0XHRcdFx0Y2FzZSAnTm93IENvbW1vbnMnOlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnID0gYHN1YnN0OiR7Y3VycmVudFRhZ31gOyAvLyBzdWJzdFxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLm5vd2NvbW1vbnNOYW1lICE9PSAnJykge1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHwxPSR7cGFyYW1zLm5vd2NvbW1vbnNOYW1lfWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdLZWVwIGxvY2FsJzpcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5rZWVwbG9jYWxOYW1lICE9PSAnJykge1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHwxPSR7cGFyYW1zLmtlZXBsb2NhbE5hbWV9YDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLmtlZXBsb2NhbFJlYXNvbiAhPT0gJycpIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8cmVhc29uPSR7cGFyYW1zLmtlZXBsb2NhbFJlYXNvbn1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnUmVuYW1lIG1lZGlhJzpcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5yZW5hbWVtZWRpYU5ld25hbWUgIT09ICcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDE9JHtwYXJhbXMucmVuYW1lbWVkaWFOZXduYW1lfWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5yZW5hbWVtZWRpYVJlYXNvbiAhPT0gJycpIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8Mj0ke3BhcmFtcy5yZW5hbWVtZWRpYVJlYXNvbn1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnVmVjdG9yIHZlcnNpb24gYXZhaWxhYmxlJzpcblx0XHRcdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0XHRcdGNhc2UgJ09ic29sZXRlJzpcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDE9JHtwYXJhbXNbYCR7dGFnLnJlcGxhY2UoLyAvZywgJ18nKX1GaWxlYF19YDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdEbyBub3QgbW92ZSB0byBDb21tb25zJzpcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfHJlYXNvbj0ke3BhcmFtcy5Eb05vdE1vdmVUb0NvbW1vbnNfcmVhc29ufWA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnQ29weSB0byBXaWtpbWVkaWEgQ29tbW9ucyc6XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHxodW1hbj0ke213LmNvbmZpZy5nZXQoJ3dnVXNlck5hbWUnKX1gO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gZG9uJ3QgY2FyZVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGN1cnJlbnRUYWcgPSBge3ske2N1cnJlbnRUYWd9fX1cXG5gO1xuXHRcdFx0XHRcdHRhZ3RleHQgKz0gY3VycmVudFRhZztcblx0XHRcdFx0XHRzdW1tYXJ5ICs9IGB7eyR7dGFnfX1944CBYDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRhZ3RleHQpIHtcblx0XHRcdFx0XHRwYWdlb2JqXG5cdFx0XHRcdFx0XHQuZ2V0U3RhdHVzRWxlbWVudCgpXG5cdFx0XHRcdFx0XHQud2Fybih3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nO+8jOayoeS7gOS5iOimgeWBmueahCcsICfkvb/nlKjogIXlj5bmtojmk43kvZzvvIzmspLku4DpurzopoHlgZrnmoQnKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRleHQgPSB0YWd0ZXh0ICsgdGV4dDtcblx0XHRcdH1cblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQodGV4dCk7XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KHN1bW1hcnkuc2xpY2UoMCwgTWF0aC5tYXgoMCwgc3VtbWFyeS5sZW5ndGggLSAxKSkpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3dhdGNoVGFnZ2VkUGFnZXMnKSk7XG5cdFx0XHRwYWdlb2JqLnNldE1pbm9yRWRpdChUd2lua2xlLmdldFByZWYoJ21hcmtUYWdnZWRQYWdlc0FzTWlub3InKSk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZSgpO1xuXHRcdFx0aWYgKHBhcmFtcy5wYXRyb2wpIHtcblx0XHRcdFx0cGFnZW9iai5wYXRyb2woKTtcblx0XHRcdH1cblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLnRhZy5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHBhcmFtcyA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZm9ybSk7XG5cdFx0Ly8gVmFsaWRhdGlvblxuXHRcdC8vIEdpdmVuIGFuIGFycmF5IG9mIGluY29tcGF0aWJsZSB0YWdzLCBjaGVjayBpZiB3ZSBoYXZlIHR3byBvciBtb3JlIHNlbGVjdGVkXG5cdFx0Y29uc3QgY2hlY2tJbmNvbXBhdGlibGUgPSAoY29uZmxpY3RzLCBleHRyYSkgPT4ge1xuXHRcdFx0Y29uc3QgY291bnQgPSBjb25mbGljdHMucmVkdWNlKChzdW0sIHRhZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKHN1bSArPSBwYXJhbXMudGFncy5pbmNsdWRlcyh0YWcpKTtcblx0XHRcdH0sIDApO1xuXHRcdFx0aWYgKGNvdW50ID4gMSkge1xuXHRcdFx0XHRsZXQgbWVzc2FnZSA9IGAke3dpbmRvdy53Z1VMUygn6K+35Zyo5Lul5LiL5qCH562+5Lit5oup5LiA5L2/55SoJywgJ+iri+WcqOS7peS4i+aomeexpOS4reaTh+S4gOS9v+eUqCcpfe+8mnt7JHtjb25mbGljdHMuam9pbihcblx0XHRcdFx0XHQnfX3jgIF7eydcblx0XHRcdFx0KX19feOAgmA7XG5cdFx0XHRcdG1lc3NhZ2UgKz0gZXh0cmEgfHwgJyc7XG5cdFx0XHRcdG13Lm5vdGlmeShtZXNzYWdlLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ2ZyaWVuZGx5dGFnJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gR2l2ZW4gYSB0YWcsIGVuc3VyZSBhbiBhc3NvY2lhdGUgcGFyYW1ldGVyIGlzIHByZXNlbnRcblx0XHQvLyBNYXliZSBqdXN0IHNvY2sgdGhpcyBhd2F5IGluIGVhY2ggZnVuY3Rpb24/Pz9cblx0XHRjb25zdCBjaGVja1BhcmFtZXRlciA9ICh0YWcsIHBhcmFtZXRlciwgZGVzY3JpcHRpb24gPSAn55CG55SxJykgPT4ge1xuXHRcdFx0aWYgKHBhcmFtcy50YWdzLmluY2x1ZGVzKHRhZykgJiYgcGFyYW1zW3BhcmFtZXRlcl0udHJpbSgpID09PSAnJykge1xuXHRcdFx0XHRtdy5ub3RpZnkoYCR7d2luZG93LndnVUxTKCfmgqjlv4XpobvmjIflrponLCAn5oKo5b+F6aCI5oyH5a6aJyl9e3ske3RhZ319feeahCR7ZGVzY3JpcHRpb25944CCYCwge1xuXHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHR0YWc6ICdmcmllbmRseXRhZycsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8vIFdlIGNvdWxkIHRoZW9yZXRpY2FsbHkgcHV0IHRoZW0gYWxsIGNoZWNrSW5jb21wYXRpYmxlIGNhbGxzIGluIGFcblx0XHQvLyBmb3JFYWNoIGxvb3AsIGJ1dCBpdCdzIHByb2JhYmx5IGNsZWFyZXIgbm90IHRvIGhhdmUgW1thcnJheSBvbmVdLFxuXHRcdC8vIFthcnJheSB0d29dXSBkZXZvaWQgb2YgY29udGV4dC4gTGlrZXdpc2UsIGFsbCB0aGUgY2hlY2tQYXJhbWV0ZXJcblx0XHQvLyBjYWxscyBjb3VsZCBiZSBpbiBvbmUgaWYsIGJ1dCBjb3VsZCBiZSBzaW1pbGFybHkgY29uZnVzaW5nLlxuXHRcdHN3aXRjaCAoVHdpbmtsZS50YWcubW9kZUVuKSB7XG5cdFx0XHRjYXNlICdhcnRpY2xlJzpcblx0XHRcdFx0cGFyYW1zLnRhZ3NUb1JlbW92ZSA9IGZvcm0uZ2V0VW5jaGVja2VkKCdleGlzdGluZ1RhZ3MnKTsgLy8gbm90IGluIGBpbnB1dGBcblx0XHRcdFx0cGFyYW1zLnRhZ3NUb1JlbWFpbiA9IHBhcmFtcy5leGlzdGluZ1RhZ3MgfHwgW107IC8vIGNvbnRhaW5lciBub3QgY3JlYXRlZCBpZiBub25lIHByZXNlbnRcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHBhcmFtcy50YWdzLmluY2x1ZGVzKCdNZXJnZScpIHx8XG5cdFx0XHRcdFx0cGFyYW1zLnRhZ3MuaW5jbHVkZXMoJ01lcmdlIGZyb20nKSB8fFxuXHRcdFx0XHRcdHBhcmFtcy50YWdzLmluY2x1ZGVzKCdNZXJnZSB0bycpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGNoZWNrSW5jb21wYXRpYmxlKFxuXHRcdFx0XHRcdFx0XHRbJ01lcmdlJywgJ01lcmdlIGZyb20nLCAnTWVyZ2UgdG8nXSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfoi6XpnIDopoHlpJrmrKHlkIjlubbvvIzor7fkvb/nlKh7e01lcmdlfX3lubbnlKjnrqHpgZPnrKbliIbpmpTmnaHnm67lkI3vvIjkvYblnKjov5nnp43mg4XlvaLkuK1Ud2lua2xl5LiN6IO96Ieq5Yqo5qCH6K6w5YW25LuW5p2h55uu77yJ44CCJyxcblx0XHRcdFx0XHRcdFx0XHQn6Iul6ZyA6KaB5aSa5qyh5ZCI5L2177yM6KuL5L2/55Soe3tNZXJnZX195Lim55So566h6YGT56ym5YiG6ZqU5qKd55uu5ZCN77yI5L2G5Zyo6YCZ56iu5oOF5b2i5LitVHdpbmtsZeS4jeiDveiHquWLleaomeiomOWFtuS7luaineebru+8ieOAgidcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIXBhcmFtcy5tZXJnZVRhcmdldCkge1xuXHRcdFx0XHRcdFx0bXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+ivt+aMh+WumuS9v+eUqOS6jm1lcmdl5qih5p2/5Lit55qE5Y+m5LiA5Liq6aG16Z2i5qCH6aKY44CCJyxcblx0XHRcdFx0XHRcdFx0XHQn6KuL5oyH5a6a5L2/55So5pa8bWVyZ2XmqKHmnb/kuK3nmoTlj6bkuIDlgIvpoIHpnaLmqJnpoYzjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0dGFnOiAnZnJpZW5kbHl0YWcnLFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoKHBhcmFtcy5tZXJnZVRhZ090aGVyIHx8IHBhcmFtcy5tZXJnZVJlYXNvbikgJiYgcGFyYW1zLm1lcmdlVGFyZ2V0LmluY2x1ZGVzKCd8JykpIHtcblx0XHRcdFx0XHRcdG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflvZPliY3ov5jkuI3mlK/mjIHlnKjkuIDmrKHlkIjlubbkuK3moIforrDlpJrkuKrmnaHnm67vvIzkuI7lvIDlkK/lhbPkuo7lpJrkuKrmnaHnm67nmoTorqjorrrjgILor7fkuI3opoHli77pgInigJzmoIforrDlhbbku5bmnaHnm67igJ3lubbmuIXnqbrigJznkIbnlLHigJ3moYblkI7lho3mj5DkuqTjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfnm67liY3pgoTkuI3mlK/mj7TlnKjkuIDmrKHlkIjkvbXkuK3mqJnoqJjlpJrlgIvmop3nm67vvIzoiIfplovllZ/pl5zmlrzlpJrlgIvmop3nm67nmoToqI7oq5bjgILoq4vkuI3opoHli77pgbjjgIzmqJnoqJjlhbbku5bmop3nm67jgI3kuKbmuIXnqbrjgIznkIbnlLHjgI3moYblvozlho3mj5DkuqTjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0dGFnOiAnZnJpZW5kbHl0YWcnLFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y2hlY2tQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHQnTWlzc2luZyBpbmZvcm1hdGlvbicsXG5cdFx0XHRcdFx0XHQnbWlzc2luZ0luZm9ybWF0aW9uJyxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn57y65bCR55qE5YaF5a65JywgJ+e8uuWwkeeahOWFp+WuuScpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoZWNrUGFyYW1ldGVyKCdFeHBlcnQgbmVlZGVkJywgJ2V4cGVydCcsIHdpbmRvdy53Z1VMUygn5LiT5a626aKG5Z+fJywgJ+WwiOWutumgmOWfnycpKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2ZpbGUnOlxuXHRcdFx0XHQvLyBTaWxseSB0byBwcm92aWRlIHRoZSBzYW1lIHN0cmluZyB0byBlYWNoIG9mIHRoZXNlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRjaGVja1BhcmFtZXRlcignT2Jzb2xldGUnLCAnT2Jzb2xldGVGaWxlJywgd2luZG93LndnVUxTKCfmm7/mjaLnmoTmlofku7blkI3np7AnLCAn5pu/5o+b55qE5qqU5qGI5ZCN56ixJykpIHx8XG5cdFx0XHRcdFx0Y2hlY2tQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHQnVmVjdG9yIHZlcnNpb24gYXZhaWxhYmxlJyxcblx0XHRcdFx0XHRcdCdWZWN0b3JfdmVyc2lvbl9hdmFpbGFibGVGaWxlJyxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pu/5o2i55qE5paH5Lu25ZCN56ewJywgJ+abv+aPm+eahOaqlOahiOWQjeeosScpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoZWNrUGFyYW1ldGVyKCdEbyBub3QgbW92ZSB0byBDb21tb25zJywgJ0RvTm90TW92ZVRvQ29tbW9uc19yZWFzb24nKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JlZGlyZWN0Jzpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtdy5ub3RpZnkoYFR3aW5rbGUudGFn77ya5pyq55+l5qih5byPICR7VHdpbmtsZS50YWcubW9kZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ2ZyaWVuZGx5dGFnJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBGaWxlL3JlZGlyZWN0OiByZXR1cm4gaWYgbm8gdGFncyBzZWxlY3RlZFxuXHRcdC8vIEFydGljbGU6IHJldHVybiBpZiBubyB0YWcgaXMgc2VsZWN0ZWQgYW5kIG5vIGFscmVhZHkgcHJlc2VudCB0YWcgaXMgZGVzZWxlY3RlZFxuXHRcdGlmIChwYXJhbXMudGFncy5sZW5ndGggPT09IDAgJiYgKFR3aW5rbGUudGFnLm1vZGVFbiAhPT0gJ2FydGljbGUnIHx8IHBhcmFtcy50YWdzVG9SZW1vdmUubGVuZ3RoID09PSAwKSkge1xuXHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5b+F6aG76YCJ5oup6Iez5bCR5LiA5Liq5qCH6K6w77yBJywgJ+W/hemgiOmBuOaTh+iHs+WwkeS4gOWAi+aomeiomO+8gScpLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAnZnJpZW5kbHl0YWcnLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBNb3JlYml0cy5wYWdlTmFtZU5vcm07XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKFxuXHRcdFx0J+agh+iusOWujOaIkO+8jOWwhuWcqOWHoOenkuWGheWIt+aWsOmhtemdoicsXG5cdFx0XHQn5qiZ6KiY5a6M5oiQ77yM5bCH5Zyo5bm+56eS5YWn6YeN5paw5pW055CG6aCB6Z2iJ1xuXHRcdCk7XG5cdFx0aWYgKFR3aW5rbGUudGFnLm1vZGVFbiA9PT0gJ3JlZGlyZWN0Jykge1xuXHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZm9sbG93UmVkaXJlY3QgPSBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdE1vcmViaXRzLnBhZ2VOYW1lTm9ybSxcblx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5qCH6K6wJywgJ+ato+WcqOaomeiomCcpICsgVHdpbmtsZS50YWcubW9kZVxuXHRcdCk7XG5cdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUudGFnLmNhbGxiYWNrc1tUd2lua2xlLnRhZy5tb2RlRW5dKTtcblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS50YWcsICd0YWcnKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IHtnZW5lcmF0ZUFycmF5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG4vKiEgVHdpbmtsZS5qcyAtIHR3aW5rbGVzdHViLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZXN0dWIoJCkge1xuXHQvKipcblx0ICogdHdpbmtsZXN0dWIuanM6IFRhZyBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiU3R1YlwiKVxuXHQgKiBBY3RpdmUgb246IEV4aXN0aW5nIGFydGljbGVzXG5cdCAqIENvbmZpZyBkaXJlY3RpdmVzIGluOiBGcmllbmRseUNvbmZpZ1xuXHQgKiBOb3RlOiBjdXN0b21pc2VkIGZyaWVuZGx5dGFnIG1vZHVsZVxuXHQgKi9cblx0VHdpbmtsZS5zdHViID0gKCkgPT4ge1xuXHRcdGlmIChNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCgpKSB7XG5cdFx0XHQvLyBTa2lwXG5cdFx0XHQvLyBhcnRpY2xlL2RyYWZ0IGFydGljbGUgdGFnZ2luZ1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoWzAsIDExOF0uaW5jbHVkZXMobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSkgJiYgbXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJykpIHx8XG5cdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gPT09IFR3aW5rbGUuZ2V0UHJlZignc2FuZGJveFBhZ2UnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5zdHViLm1vZGUgPSAn5p2h55uuJztcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoVHdpbmtsZS5zdHViLmNhbGxiYWNrLCAn5bCP5L2c5ZOBJywgJ2ZyaWVuZGx5LXRhZycsICfmoIforrDlsI/kvZzlk4EnKTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuc3R1Yi5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRpZiAoTW9yZWJpdHMuaXNQYWdlUmVkaXJlY3QoKSkge1xuXHRcdFx0Ly8gU2tpcFxuXHRcdFx0Ly8gYXJ0aWNsZS9kcmFmdCBhcnRpY2xlIHRhZ2dpbmdcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAwIHx8IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDExOCkgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJykpIHx8XG5cdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gPT09IFR3aW5rbGUuZ2V0UHJlZignc2FuZGJveFBhZ2UnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5zdHViLm1vZGUgPSB3aW5kb3cud2dVTFMoJ+adoeebricsICfmop3nm64nKTtcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdFR3aW5rbGUuc3R1Yi5jYWxsYmFjayxcblx0XHRcdFx0J+Wwj+S9nOWTgScsXG5cdFx0XHRcdCdmcmllbmRseS10YWcnLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+agh+iusOWwj+S9nOWTgScsICfmqJnoqJjlsI/kvZzlk4EnKVxuXHRcdFx0KTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuc3R1Yi5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYzMCwgVHdpbmtsZS5zdHViLm1vZGUgPT09ICdhcnRpY2xlJyA/IDQ1MCA6IDQwMCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ+Wwj+S9nOWTgeiqquaYjicsICflsI/kvZzlk4Hor7TmmI4nKSwgJ1FXOuWwj+S9nOWTgScpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5bCP5L2c5ZOB6K6+572uJywgJ+Wwj+S9nOWTgeioreWumicpLCAnSDpUVy9QUkVGI3N0dWInKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0Mjc3R1YicpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUuc3R1Yi5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0aWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wYXRyb2xsaW5rJykubGVuZ3RoKSB7XG5cdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDpobXpnaLkuLrlt7Llt6Hmn6UnLCAn5qiZ6KiY6aCB6Z2i54K65bey5beh5p+lJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3BhdHJvbFBhZ2UnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3BhdHJvbFBhZ2UnLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogVHdpbmtsZS5nZXRQcmVmKCdtYXJrU3R1YmJlZFBhZ2VzQXNQYXRyb2xsZWQnKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHN3aXRjaCAoVHdpbmtsZS5zdHViLm1vZGUpIHtcblx0XHRcdGNhc2UgJ+aineebric6XG5cdFx0XHRjYXNlICfmnaHnm64nOlxuXHRcdFx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCfmnaHnm67lsI/kvZzlk4HmoIforrAnLCAn5qKd55uu5bCP5L2c5ZOB5qiZ6KiYJykpO1xuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NvcnRvcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p+l55yL5YiX6KGo77yaJywgJ+aqouimluWIl+ihqO+8micpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XlnKhUd2lua2xl5Y+C5pWw6K6+572u77yISDpUVy9QUkVG77yJ5Lit5pu05pS55q2k6aG544CCJyxcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XlnKhUd2lua2xl5YGP5aW96Kit5a6a77yISDpUVy9QUkVG77yJ5Lit5pu05pS55q2k6aCF44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUuc3R1Yi51cGRhdGVTb3J0T3JkZXIsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdjYXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmjInnsbvlnosnLCAn5oyJ6aGe5YilJyksXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiBUd2lua2xlLmdldFByZWYoJ3N0dWJBcnRpY2xlU29ydE9yZGVyJykgPT09ICdjYXQnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAnYWxwaGEnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogJ+aMieWtl+avjScsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiBUd2lua2xlLmdldFByZWYoJ3N0dWJBcnRpY2xlU29ydE9yZGVyJykgPT09ICdhbHBoYScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6ICd0YWdXb3JrQXJlYScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHZvaWQgbXcubm90aWZ5KGBUd2lua2xlLnN0dWLvvJrmnKrnn6XmqKHlvI8gJHtUd2lua2xlLnN0dWIubW9kZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVzdHViJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHRpZiAoWyfmnaHnm64nLCAn5qKd55uuJ10uaW5jbHVkZXMoVHdpbmtsZS5zdHViLm1vZGUpKSB7XG5cdFx0XHQvLyBmYWtlIGEgY2hhbmdlIGV2ZW50IG9uIHRoZSBzb3J0IGRyb3Bkb3duLCB0byBpbml0aWFsaXplIHRoZSB0YWcgbGlzdFxuXHRcdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRcdHJlc3VsdC5zb3J0b3JkZXIuZGlzcGF0Y2hFdmVudChldnQpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5zdHViLmNoZWNrZWRUYWdzID0gW107XG5cdFR3aW5rbGUuc3R1Yi51cGRhdGVTb3J0T3JkZXIgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHNvcnRvcmRlciA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdFR3aW5rbGUuc3R1Yi5jaGVja2VkVGFncyA9IGUudGFyZ2V0LmZvcm0uZ2V0Q2hlY2tlZCgnYXJ0aWNsZVRhZ3MnKTtcblx0XHRUd2lua2xlLnN0dWIuY2hlY2tlZFRhZ3MgPz89IFtdO1xuXHRcdGNvbnN0IGNvbnRhaW5lciA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHR0eXBlOiAnZnJhZ21lbnQnLFxuXHRcdH0pO1xuXHRcdC8vIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgY2hlY2tib3gsIHdpdGggYXBwcm9wcmlhdGUgc3ViZ3JvdXAgaWYgbmVlZGVkXG5cdFx0Y29uc3QgbWFrZUNoZWNrYm94ID0gKHRhZywgZGVzY3JpcHRpb24pID0+IHtcblx0XHRcdGNvbnN0IGNoZWNrYm94ID0ge1xuXHRcdFx0XHR2YWx1ZTogdGFnLFxuXHRcdFx0XHRsYWJlbDogYHt7JHt0YWd9fX06ICR7ZGVzY3JpcHRpb259YCxcblx0XHRcdH07XG5cdFx0XHRpZiAoVHdpbmtsZS5zdHViLmNoZWNrZWRUYWdzLmluY2x1ZGVzKHRhZykpIHtcblx0XHRcdFx0Y2hlY2tib3guY2hlY2tlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2hlY2tib3g7XG5cdFx0fTtcblx0XHQvLyBhcHBlbmQgYW55IGN1c3RvbSB0YWdzXG5cdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tU3R1Ykxpc3QnKS5sZW5ndGgpIHtcblx0XHRcdGNvbnRhaW5lci5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ5qih5p2/JywgJ+iHquioguaooeadvycpLFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBjdXN0b21jaGVja2JveGVzID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21TdHViTGlzdCcpKSB7XG5cdFx0XHRcdGN1c3RvbWNoZWNrYm94ZXNbY3VzdG9tY2hlY2tib3hlcy5sZW5ndGhdID0gbWFrZUNoZWNrYm94KGl0ZW0udmFsdWUsIGl0ZW0ubGFiZWwpO1xuXHRcdFx0fVxuXHRcdFx0Y29udGFpbmVyLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdG5hbWU6ICdhcnRpY2xlVGFncycsXG5cdFx0XHRcdGxpc3Q6IGN1c3RvbWNoZWNrYm94ZXMsXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gY2F0ZWdvcmljYWwgc29ydCBvcmRlclxuXHRcdGlmIChzb3J0b3JkZXIgPT09ICdjYXQnKSB7XG5cdFx0XHQvLyBmdW5jdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHRhZ3MgYW5kIGNyZWF0ZSBhIGNoZWNrYm94IGZvciBlYWNoIG9uZVxuXHRcdFx0Y29uc3QgZG9DYXRlZ29yeUNoZWNrYm94ZXMgPSAoc3ViZGl2LCBhcnJheSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjaGVja2JveGVzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIGFycmF5KSB7XG5cdFx0XHRcdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBUd2lua2xlLnN0dWIuYXJ0aWNsZS50YWdzW3RhZ107XG5cdFx0XHRcdFx0Y2hlY2tib3hlc1tjaGVja2JveGVzLmxlbmd0aF0gPSBtYWtlQ2hlY2tib3godGFnLCBkZXNjcmlwdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3ViZGl2LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRuYW1lOiAnYXJ0aWNsZVRhZ3MnLFxuXHRcdFx0XHRcdGxpc3Q6IGNoZWNrYm94ZXMsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHRcdGxldCBpID0gMDtcblx0XHRcdC8vIGdvIHRocm91Z2ggZWFjaCBjYXRlZ29yeSBhbmQgc3ViLWNhdGVnb3J5IGFuZCBhcHBlbmQgbGlzdHMgb2YgY2hlY2tib3hlc1xuXHRcdFx0Zm9yIChjb25zdCBbdGl0bGUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ0NhdGVnb3JpZXMpKSB7XG5cdFx0XHRcdGNvbnN0IHRpdGxlTmFtZSA9IFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ0NhdGVnb3JpZXNIZWFkZXJbdGl0bGVdO1xuXHRcdFx0XHRjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0XHRpZDogYHRhZ0hlYWRlciR7aX1gLFxuXHRcdFx0XHRcdGxhYmVsOiB0aXRsZU5hbWUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBzdWJkaXYgPSBjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogYHRhZ1N1YmRpdiR7aSsrfWAsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb250ZW50KSkge1xuXHRcdFx0XHRcdGRvQ2F0ZWdvcnlDaGVja2JveGVzKHN1YmRpdiwgY29udGVudCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbc3VidGl0bGUsIHN1YmNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbnRlbnQpKSB7XG5cdFx0XHRcdFx0XHRzdWJkaXYuYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBbTW9yZWJpdHMuaHRtbE5vZGUoJ2InLCBzdWJ0aXRsZSldLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRkb0NhdGVnb3J5Q2hlY2tib3hlcyhzdWJkaXYsIHN1YmNvbnRlbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gYWxwaGFiZXRpY2FsIHNvcnQgb3JkZXJcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY2hlY2tib3hlcyA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBbdGFnLCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoVHdpbmtsZS5zdHViLmFydGljbGUudGFncykpIHtcblx0XHRcdFx0Y2hlY2tib3hlc1tjaGVja2JveGVzLmxlbmd0aF0gPSBtYWtlQ2hlY2tib3godGFnLCBkZXNjcmlwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ2FydGljbGVUYWdzJyxcblx0XHRcdFx0bGlzdDogY2hlY2tib3hlcyxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCAkd29ya2FyZWEgPSAkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2RpdiN0YWdXb3JrQXJlYScpO1xuXHRcdGNvbnN0IHJlbmRlcmVkID0gY29udGFpbmVyLnJlbmRlcigpO1xuXHRcdCR3b3JrYXJlYS5lbXB0eSgpLmFwcGVuZChyZW5kZXJlZCk7XG5cdFx0Ly8gc3R5bGUgYWRqdXN0bWVudHNcblx0XHQkd29ya2FyZWEuZmluZCgnaDUnKS5jc3Moe1xuXHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMTAlJyxcblx0XHR9KTtcblx0XHQkd29ya2FyZWEuZmluZCgnaDU6bm90KDpmaXJzdC1jaGlsZCknKS5jc3Moe1xuXHRcdFx0J21hcmdpbi10b3AnOiAnMWVtJyxcblx0XHR9KTtcblx0XHQkd29ya2FyZWEuZmluZCgnZGl2JykuZmlsdGVyKCc6aGFzKHNwYW4ucXVpY2tmb3JtRGVzY3JpcHRpb24pJykuY3NzKHtcblx0XHRcdCdtYXJnaW4tdG9wJzogJzAuNGVtJyxcblx0XHR9KTtcblx0XHQvLyBhZGQgYSBsaW5rIHRvIGVhY2ggdGVtcGxhdGUncyBkZXNjcmlwdGlvbiBwYWdlXG5cdFx0Zm9yIChjb25zdCBjaGVja2JveCBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMoZS50YXJnZXQuZm9ybSwgJ2FydGljbGVUYWdzJykpIHtcblx0XHRcdGNvbnN0ICRjaGVja2JveCA9ICQoY2hlY2tib3gpO1xuXHRcdFx0Y29uc3QgbGluayA9IE1vcmViaXRzLmh0bWxOb2RlKCdhJywgJz4nKTtcblx0XHRcdGxpbmsuc2V0QXR0cmlidXRlKCdjbGFzcycsICd0YWctdGVtcGxhdGUtbGluaycpO1xuXHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdCdocmVmJyxcblx0XHRcdFx0bXcudXRpbC5nZXRVcmwoYFRlbXBsYXRlOiR7TW9yZWJpdHMuc3RyaW5nLnRvVXBwZXJDYXNlRmlyc3RDaGFyKGNoZWNrYm94LnZhbHVlcyl9YClcblx0XHRcdCk7XG5cdFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuXHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lciBub3JlZmVycmVyJyk7XG5cdFx0XHQkY2hlY2tib3gucGFyZW50KCkuYXBwZW5kKFsnXFx1MDBBMCcsIGxpbmtdKTtcblx0XHR9XG5cdH07XG5cdC8vIFRhZ3MgZm9yIEFSVElDTEVTIHN0YXJ0IGhlcmVcblx0VHdpbmtsZS5zdHViLmFydGljbGUgPSB7fTtcblx0Ly8gQSBsaXN0IG9mIGFsbCBhcnRpY2xlIHRhZ3MsIGluIGFscGhhYmV0aWNhbCBvcmRlclxuXHQvLyBUbyBlbnN1cmUgdGFncyBhcHBlYXIgaW4gdGhlIGRlZmF1bHQgXCJjYXRlZ29yaXplZFwiIHZpZXcsIGFkZCB0aGVtIHRvIHRoZSB0YWdDYXRlZ29yaWVzIGhhc2ggYmVsb3cuXG5cdFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ3MgPSB7XG5cdFx0J2FjdG9yLXN0dWInOiAn5ryU5ZGYJyxcblx0XHQnYXNpYS1zdHViJzogJ+S6mua0sicsXG5cdFx0J2Jpby1zdHViJzogJ+S6uueJqScsXG5cdFx0J2Jpb2xvZ3ktc3R1Yic6ICfnlJ/nianlraYnLFxuXHRcdCdjaGVtLXN0dWInOiAn5YyW5a2mJyxcblx0XHQnZXVyb3BlLXN0dWInOiAn5qyn5rSyJyxcblx0XHQnZXhwYW5kIGxpc3QnOiAn5pyq5a6M5oiQ5YiX6KGoJyxcblx0XHQnZm9vZC1zdHViJzogJ+mjn+eJqScsXG5cdFx0J2ZyYW5jZS1nZW8tc3R1Yic6ICfms5Xlm73lnLDnkIYnLFxuXHRcdCdnZW8tc3R1Yic6ICflnLDnkIbkvY3nva4nLFxuXHRcdCdoaXN0LXN0dWInOiAn5Y6G5Y+y5oiW5Y6G5Y+y5a2mJyxcblx0XHQnSlAtc3R1Yic6ICfml6XmnKwnLFxuXHRcdCdsaXQtc3R1Yic6ICfmloflraYnLFxuXHRcdCdtYXRoLXN0dWInOiAn5pWw5a2mJyxcblx0XHQnbWVkLXN0dWInOiAn5Yy75a2mJyxcblx0XHQnbWlsLXN0dWInOiAn5Yab5LqLJyxcblx0XHQnbW92aWUtc3R1Yic6ICfnlLXlvbEnLFxuXHRcdCdtdXNpYy1zdHViJzogJ+mfs+S5kCcsXG5cdFx0J3BoeXNpY3Mtc3R1Yic6ICfniannkIblraYnLFxuXHRcdCdwb2xpdGljLXN0dWInOiAn5pS/5rK7Jyxcblx0XHQncmVsaWdpb24tc3R1Yic6ICflrpfmlZknLFxuXHRcdCdzY2llbmNlLXN0dWInOiAn56eR5a2mJyxcblx0XHQnc3BvcnQtc3R1Yic6ICfkvZPogrInLFxuXHRcdHN0dWI6ICfpgJrnlKjlsI/kvZzlk4EnLFxuXHRcdCdzd2l0emVybGFuZC1zdHViJzogJ+eRnuWjqycsXG5cdFx0J3RlY2gtc3R1Yic6ICfnp5HmioAnLFxuXHRcdCd0cmFuc3Atc3R1Yic6ICfkuqTpgJonLFxuXHRcdCdUVi1zdHViJzogJ+eUteinhicsXG5cdFx0J1VLLXN0dWInOiAn6Iux5Zu9Jyxcblx0XHQnVVMtYmlvLXN0dWInOiAn576O5Zu95Lq654mpJyxcblx0XHQnVVMtZ2VvLXN0dWInOiAn576O5Zu95Zyw55CGJyxcblx0XHQnVVMtc3R1Yic6ICfnvo7lm70nLFxuXHRcdCd3ZWF0aGVyLXN0dWInOiAn5aSp5rCU5ZKM54m55Yir55qE5aSp5rCU5LqL5Lu2Jyxcblx0fTtcblx0Ly8gQSBsaXN0IG9mIHRhZ3MgaW4gb3JkZXIgb2YgY2F0ZWdvcnlcblx0Ly8gVGFncyBzaG91bGQgYmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHdpdGhpbiB0aGUgY2F0ZWdvcmllc1xuXHQvLyBBZGQgbmV3IGNhdGVnb3JpZXMgd2l0aCBkaXNjcmV0aW9uIC0gdGhlIGxpc3QgaXMgbG9uZyBlbm91Z2ggYXMgaXMhXG5cdFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ0NhdGVnb3JpZXNIZWFkZXIgPSB7XG5cdFx0Z2VuZXJhbDogJ+mAmueUqOaooeadvycsXG5cdFx0Z2VvOiAn5Zu95a625ZKM5Zyw55CGJyxcblx0XHRvdGhlcnM6ICfmnYLpobknLFxuXHRcdGJpbzogJ+S6uueJqScsXG5cdFx0c2NpZW5jZTogJ+enkeWtpicsXG5cdFx0c3BvcnQ6ICfkvZPogrInLFxuXHRcdHRlY2g6ICfmioDmnK8nLFxuXHRcdGFydDogJ+iJuuacrycsXG5cdH07XG5cdFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ0NhdGVnb3JpZXMgPSB7XG5cdFx0Z2VuZXJhbDogWydzdHViJywgJ2V4cGFuZCBsaXN0J10sXG5cdFx0Z2VvOiBbXG5cdFx0XHQnYXNpYS1zdHViJyxcblx0XHRcdCdldXJvcGUtc3R1YicsXG5cdFx0XHQnZnJhbmNlLWdlby1zdHViJyxcblx0XHRcdCdnZW8tc3R1YicsXG5cdFx0XHQnSlAtc3R1YicsXG5cdFx0XHQnc3dpdHplcmxhbmQtc3R1YicsXG5cdFx0XHQnVUstc3R1YicsXG5cdFx0XHQnVVMtYmlvLXN0dWInLFxuXHRcdFx0J1VTLWdlby1zdHViJyxcblx0XHRcdCdVUy1zdHViJyxcblx0XHRdLFxuXHRcdG90aGVyczogWydmb29kLXN0dWInLCAnaGlzdC1zdHViJywgJ21pbC1zdHViJywgJ3BvbGl0aWMtc3R1YicsICdyZWxpZ2lvbi1zdHViJywgJ3RyYW5zcC1zdHViJ10sXG5cdFx0YmlvOiBbJ2FjdG9yLXN0dWInLCAnYmlvLXN0dWInLCAnVVMtYmlvLXN0dWInXSxcblx0XHRzY2llbmNlOiBbJ2Jpb2xvZ3ktc3R1YicsICdjaGVtLXN0dWInLCAnbWF0aC1zdHViJywgJ21lZC1zdHViJywgJ3BoeXNpY3Mtc3R1YicsICdzY2llbmNlLXN0dWInLCAnd2VhdGhlci1zdHViJ10sXG5cdFx0c3BvcnQ6IFsnc3BvcnQtc3R1YiddLFxuXHRcdHRlY2g6IFsndGVjaC1zdHViJ10sXG5cdFx0YXJ0OiBbJ2FjdG9yLXN0dWInLCAnbGl0LXN0dWInLCAnbW92aWUtc3R1YicsICdtdXNpYy1zdHViJywgJ1RWLXN0dWInXSxcblx0fTtcblx0Ly8gVGFncyBmb3IgUkVESVJFQ1RTIHN0YXJ0IGhlcmVcblx0VHdpbmtsZS5zdHViLmNhbGxiYWNrcyA9IHtcblx0XHRtYWluOiAocGFnZW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGxldCB0YWdSZTtcblx0XHRcdGxldCBzdW1tYXJ5VGV4dCA9ICfliqDlhaUnO1xuXHRcdFx0bGV0IHRhZ3MgPSBbXTtcblx0XHRcdGNvbnN0IGdyb3VwYWJsZVRhZ3MgPSBbXTtcblx0XHRcdGxldCBpO1xuXHRcdFx0Ly8gUmVtb3ZlIHRhZ3MgdGhhdCBiZWNvbWUgc3VwZXJmbHVvdXMgd2l0aCB0aGlzIGFjdGlvblxuXHRcdFx0bGV0IHBhZ2VUZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Ly8gQ2hlY2sgZm9yIHByZWV4aXN0aW5nIHRhZ3MgYW5kIHNlcGFyYXRlIHRhZ3MgaW50byBncm91cGFibGUgYW5kIG5vbi1ncm91cGFibGUgYXJyYXlzXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLnRhZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dGFnUmUgPSBuZXcgUmVnRXhwKGAoXFxcXHtcXFxceyR7cGFyYW1zLnRhZ3NbaV19KFxcXFx8fFxcXFx9XFxcXH0pKWAsICdpbScpO1xuXHRcdFx0XHRpZiAodGFnUmUuZXhlYyhwYWdlVGV4dCkpIHtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRg5Zyo6aG16Z2i5LiK5om+5Yiwe3ske3BhcmFtcy50YWdzW2ldfX194oCm4oCm6Lez6L+HYCxcblx0XHRcdFx0XHRcdFx0YOWcqOmggemdouS4iuaJvuWIsHt7JHtwYXJhbXMudGFnc1tpXX19feKApuKApui3s+mBjmBcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRhZ3MgPSBbLi4udGFncywgLi4uZ2VuZXJhdGVBcnJheShwYXJhbXMudGFnc1tpXSldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0YWdzID0gWy4uLnRhZ3MsIC4uLmdyb3VwYWJsZVRhZ3NdO1xuXHRcdFx0dGFncy5zb3J0KCk7XG5cdFx0XHRjb25zdCB0b3RhbFRhZ3MgPSB0YWdzLmxlbmd0aDtcblx0XHRcdGNvbnN0IGFkZFRhZyA9ICh0YWdOYW1lLCB0YWdJbmRleCkgPT4ge1xuXHRcdFx0XHRwYWdlVGV4dCArPSBgXFxue3ske3RhZ05hbWV9fX1gO1xuXHRcdFx0XHRpZiAodGFnSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0aWYgKHRhZ0luZGV4ID09PSB0b3RhbFRhZ3MgLSAxKSB7XG5cdFx0XHRcdFx0XHRzdW1tYXJ5VGV4dCArPSAn5ZKMJztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHRhZ0luZGV4IDwgdG90YWxUYWdzIC0gMSkge1xuXHRcdFx0XHRcdFx0c3VtbWFyeVRleHQgKz0gJ+OAgSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnlUZXh0ICs9ICd7e1tbJztcblx0XHRcdFx0c3VtbWFyeVRleHQgKz0gdGFnTmFtZS5pbmNsdWRlcygnOicpID8gdGFnTmFtZSA6IGBUZW1wbGF0ZToke3RhZ05hbWV9fCR7dGFnTmFtZX1gO1xuXHRcdFx0XHRzdW1tYXJ5VGV4dCArPSAnXV19fSc7XG5cdFx0XHR9O1xuXHRcdFx0Zm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuXHRcdFx0XHRhZGRUYWcodGFnKTtcblx0XHRcdH1cblx0XHRcdHN1bW1hcnlUZXh0ICs9IHdpbmRvdy53Z1VMUygn5qCH6K6w5YiwJywgJ+aomeiomOWIsCcpICsgVHdpbmtsZS5zdHViLm1vZGU7XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHBhZ2VUZXh0KTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoc3VtbWFyeVRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3dhdGNoU3R1YmJlZFBhZ2VzJykpO1xuXHRcdFx0cGFnZW9iai5zZXRNaW5vckVkaXQoVHdpbmtsZS5nZXRQcmVmKCdtYXJrU3R1YmJlZFBhZ2VzQXNNaW5vcicpKTtcblx0XHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdub2NyZWF0ZScpO1xuXHRcdFx0cGFnZW9iai5zYXZlKCk7XG5cdFx0XHRpZiAocGFyYW1zLnBhdHJvbCkge1xuXHRcdFx0XHRwYWdlb2JqLnBhdHJvbCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuc3R1Yi5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHBhcmFtcyA9IHt9O1xuXHRcdGlmIChmb3JtLnBhdHJvbFBhZ2UpIHtcblx0XHRcdHBhcmFtcy5wYXRyb2wgPSBmb3JtLnBhdHJvbFBhZ2UuY2hlY2tlZDtcblx0XHR9XG5cdFx0c3dpdGNoIChUd2lua2xlLnN0dWIubW9kZSkge1xuXHRcdFx0Y2FzZSAn5qKd55uuJzpcblx0XHRcdGNhc2UgJ+adoeebric6XG5cdFx0XHRcdHBhcmFtcy50YWdzID0gZm9ybS5nZXRDaGVja2VkKCdhcnRpY2xlVGFncycpO1xuXHRcdFx0XHRwYXJhbXMuZ3JvdXAgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR2b2lkIG13Lm5vdGlmeShgVHdpbmtsZS5zdHVi77ya5pyq55+l5qih5byPICR7VHdpbmtsZS5zdHViLm1vZGV9YCwge1xuXHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHR0YWc6ICd0d2lua2xlc3R1YicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0aWYgKCFwYXJhbXMudGFncy5sZW5ndGgpIHtcblx0XHRcdHZvaWQgbXcubm90aWZ5KCflv4XpobvpgInmi6noh7PlsJHkuIDkuKrmoIforrDvvIEnLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZXN0dWInLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKFxuXHRcdFx0J+agh+iusOWujOaIkO+8jOWwhuWcqOWHoOenkuWGheWIt+aWsOmhtemdoicsXG5cdFx0XHQn5qiZ6KiY5a6M5oiQ77yM5bCH5Zyo5bm+56eS5YWn6YeN5paw5pW055CG6aCB6Z2iJ1xuXHRcdCk7XG5cdFx0aWYgKFR3aW5rbGUuc3R1Yi5tb2RlID09PSAn6YeN5a6a5ZCRJykge1xuXHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZm9sbG93UmVkaXJlY3QgPSBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5qCH6K6wJywgJ+ato+WcqOaomeiomCcpICsgVHdpbmtsZS5zdHViLm1vZGVcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRzd2l0Y2ggKFR3aW5rbGUuc3R1Yi5tb2RlKSB7XG5cdFx0XHRjYXNlICfmop3nm64nOlxuXHRcdFx0Y2FzZSAn5p2h55uuJzpcblx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdGNhc2UgJ+mHjeWumuWQkSc6XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuc3R1Yi5jYWxsYmFja3MubWFpbik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdGNhc2UgJ+aWh+S7tic6XG5cdFx0XHRjYXNlICfmqpTmoYgnOlxuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLnN0dWIuY2FsbGJhY2tzLmZpbGUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHZvaWQgbXcubm90aWZ5KGBUd2lua2xlLnN0dWLvvJrmnKrnn6XmqKHlvI8gJHtUd2lua2xlLnN0dWIubW9kZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVzdHViJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS5zdHViLCAnc3R1YicpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG4vKiEgVHdpbmtsZS5qcyAtIHR3aW5rbGVkaWZmLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZWRpZmYoJCkge1xuXHQvKipcblx0ICogdHdpbmtsZWRpZmYuanM6IERpZmYgbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIG9uIG5vbi1kaWZmIHBhZ2VzIChcIkxhc3RcIik7XG5cdCAqIHRhYnMgb24gZGlmZiBwYWdlcyAoXCJTaW5jZVwiLCBcIlNpbmNlIG1pbmVcIiwgXCJDdXJyZW50XCIpXG5cdCAqIEFjdGl2ZSBvbjogRXhpc3Rpbmcgbm9uLXNwZWNpYWwgcGFnZXNcblx0ICovXG5cdFR3aW5rbGUuZGlmZiA9ICgpID0+IHtcblx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA8IDAgfHwgIW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdG13LnV0aWwuZ2V0VXJsKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwge1xuXHRcdFx0XHRkaWZmOiAnY3VyJyxcblx0XHRcdFx0b2xkaWQ6ICdwcmV2Jyxcblx0XHRcdH0pLFxuXHRcdFx0d2luZG93LndnVUxTKCfmnIDlkI4nLCAn5pyA5b6MJyksXG5cdFx0XHQndHctbGFzdGRpZmYnLFxuXHRcdFx0d2luZG93LndnVUxTKCfmmL7npLrmnIDlkI7kv67mlLknLCAn6aGv56S65pyA5b6M5L+u5pS5Jylcblx0XHQpO1xuXHRcdC8vIFNob3cgYWRkaXRpb25hbCB0YWJzIG9ubHkgb24gZGlmZiBwYWdlc1xuXHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpKSB7XG5cdFx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0VHdpbmtsZS5kaWZmLmV2YWx1YXRlKGZhbHNlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0J+iHquS4iicsXG5cdFx0XHRcdCd0dy1zaW5jZScsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5pi+56S65LiO5LiK5LiA5L+u6K6i54mI5pys6Ze055qE5beu5byCJywgJ+mhr+ekuuiIh+S4iuS4gOS/ruiogueJiOacrOmWk+eahOW3rueVsCcpXG5cdFx0XHQpO1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFR3aW5rbGUuZGlmZi5ldmFsdWF0ZSh0cnVlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0J+iHquaIkScsXG5cdFx0XHRcdCd0dy1zaW5jZW1pbmUnLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aYvuekuuS4juaIkeWBmuWHuueahOS/ruiuoueJiOacrOeahOW3ruW8gicsICfpoa/npLroiIfmiJHlgZrlh7rnmoTkv67oqILniYjmnKznmoTlt67nlbAnKVxuXHRcdFx0KTtcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdG13LnV0aWwuZ2V0VXJsKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwge1xuXHRcdFx0XHRcdGRpZmY6ICdjdXInLFxuXHRcdFx0XHRcdG9sZGlkOiBtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpLFxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d2luZG93LndnVUxTKCflvZPliY0nLCAn55uu5YmNJyksXG5cdFx0XHRcdCd0dy1jdXJkaWZmJyxcblx0XHRcdFx0d2luZG93LndnVUxTKCfmmL7npLrkuI7lvZPliY3niYjmnKzpl7TnmoTlt67lvIInLCAn6aGv56S66IiH55uu5YmN54mI5pys6ZaT55qE5beu55WwJylcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmRpZmYuZXZhbHVhdGUgPSAobWUpID0+IHtcblx0XHRsZXQgdXNlcjtcblx0XHRpZiAobWUpIHtcblx0XHRcdHVzZXIgPSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctZGlmZi1udGl0bGUyJyk7XG5cdFx0XHRpZiAoIW5vZGUpIHtcblx0XHRcdFx0Ly8gbm90aGluZyB0byBkbz9cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dXNlciA9ICQobm9kZSkuZmluZCgnYScpLmZpcnN0KCkudGV4dCgpO1xuXHRcdH1cblx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0dGl0bGVzOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRydmxpbWl0OiAxLFxuXHRcdFx0cnZwcm9wOiBbJ2lkcycsICd1c2VyJ10sXG5cdFx0XHRydnN0YXJ0aWQ6IG13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpIC0gMSxcblx0XHRcdHJ2dXNlcjogdXNlcixcblx0XHR9O1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1jb250ZW50LXRleHQnKSk7XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+aKk+WPluacgOWInei0oeeMruiAheS/oeaBrycsICfmipPlj5bmnIDliJ3osqLnjbvogIXos4foqIonKSxcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0VHdpbmtsZS5kaWZmLmNhbGxiYWNrcy5tYWluXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHR1c2VyLFxuXHRcdH07XG5cdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHR9O1xuXHRUd2lua2xlLmRpZmYuY2FsbGJhY2tzID0ge1xuXHRcdG1haW46IChzZWxmKSA9PiB7XG5cdFx0XHRjb25zdCB4bWxEb2MgPSBzZWxmLnJlc3BvbnNlWE1MO1xuXHRcdFx0Y29uc3QgcmV2aWQgPSAkKHhtbERvYykuZmluZCgncmV2JykuYXR0cigncmV2aWQnKTtcblx0XHRcdGlmICghcmV2aWQpIHtcblx0XHRcdFx0c2VsZi5zdGF0ZWxlbS5lcnJvcihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+acquaJvuWIsOWQiOmAgueahOaXqeacn+eJiOacrO+8jOaIliAnLCAn5pyq5om+5Yiw5ZCI6YGp55qE5pep5pyf54mI5pys77yM5oiWICcpICtcblx0XHRcdFx0XHRcdHNlbGYucGFyYW1zLnVzZXIgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCcg5piv5ZSv5LiA6LSh54yu6ICF44CC5Y+W5raI44CCJywgJyDmmK/llK/kuIDosqLnjbvogIXjgILlj5bmtojjgIInKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsb2NhdGlvbiA9IG13LnV0aWwuZ2V0VXJsKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwge1xuXHRcdFx0XHRkaWZmOiBtdy5jb25maWcuZ2V0KCd3Z0N1clJldmlzaW9uSWQnKSxcblx0XHRcdFx0b2xkaWQ6IHJldmlkLFxuXHRcdFx0fSk7XG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS5kaWZmLCAnZGlmZicpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG4vKiEgVHdpbmtsZS5qcyAtIHR3aW5rbGV1bmxpbmsuanMgKi9cbihmdW5jdGlvbiB0d2lua2xldW5saW5rKCQpIHtcblx0LyoqXG5cdCAqIHR3aW5rbGV1bmxpbmsuanM6IFVubGluayBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiVW5saW5rXCIpXG5cdCAqIEFjdGl2ZSBvbjogTm9uLXNwZWNpYWwgcGFnZXMsIGV4Y2VwdCBMSUI65rKZ55uSXG5cdCAqL1xuXHRUd2lua2xlLnVubGluayA9ICgpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpIDwgMCB8fFxuXHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpID09PSBUd2lua2xlLmdldFByZWYoJ3NhbmRib3hQYWdlJykgfHxcblx0XHRcdCFNb3JlYml0cy51c2VySXNTeXNvcFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0VHdpbmtsZS51bmxpbmsuY2FsbGJhY2ssXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+a2iOmTvicsICfmtojpgKMnKSxcblx0XHRcdCd0dy11bmxpbmsnLFxuXHRcdFx0d2luZG93LndnVUxTKCflj5bmtojliLDmnKzpobXnmoTpk77mjqUnLCAn5Y+W5raI5Yiw5pys6aCB55qE6YCj57WQJylcblx0XHQpO1xuXHR9O1xuXHQvLyB0aGUgcGFyYW1ldGVyIGlzIHVzZWQgd2hlbiBpbnZva2luZyB1bmxpbmsgZnJvbSBhZG1pbiBzcGVlZHlcblx0VHdpbmtsZS51bmxpbmsuY2FsbGJhY2sgPSAocHJlc2V0UmVhc29uKSA9PiB7XG5cdFx0Y29uc3QgZmlsZVNwYWNlID0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gNjtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgNDQwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUoXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+WPlua2iOmTvuWFpScsICflj5bmtojpgKPlhaUnKSArXG5cdFx0XHRcdChmaWxlU3BhY2UgPyB3aW5kb3cud2dVTFMoJ+WSjOaooeadv+OAgeaWh+S7tuS9v+eUqCcsICflkozmqKHmnb/jgIHmqpTmoYjkvb/nlKgnKSA6ICcnKVxuXHRcdCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ+mTvuWFpeiuvue9ricsICfpgKPlhaXoqK3lrponKSwgJ0g6VFcvUFJFRiN1bmxpbmsnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0MjdW5saW5rJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS51bmxpbmsuY2FsbGJhY2suZXZhbHVhdGUpO1xuXHRcdC8vIHByZXBlbmQgc29tZSBkb2N1bWVudGF0aW9uOiBmaWxlcyBhcmUgY29tbWVudGVkIG91dCwgd2hpbGUgYW55XG5cdFx0Ly8gZGlzcGxheSB0ZXh0IGlzIHByZXNlcnZlZCBmb3IgbGlua3MgKG90aGVyd2lzZSB0aGUgbGluayBpdHNlbGYgaXMgdXNlZClcblx0XHRjb25zdCBsaW5rVGV4dEJlZm9yZSA9IE1vcmViaXRzLmh0bWxOb2RlKFxuXHRcdFx0J2NvZGUnLFxuXHRcdFx0YFtbJHtmaWxlU3BhY2UgPyAnOicgOiAnJ30ke01vcmViaXRzLnBhZ2VOYW1lTm9ybX0ke3dpbmRvdy53Z1VMUygnfOmTvuaOpeaWh+Wtl11dJywgJ3zpgKPntZDmloflrZddXScpfWBcblx0XHQpO1xuXHRcdGNvbnN0IGxpbmtUZXh0QWZ0ZXIgPSBNb3JlYml0cy5odG1sTm9kZSgnY29kZScsIHdpbmRvdy53Z1VMUygn6ZO+5o6l5paH5a2XJywgJ+mAo+e1kOaWh+WtlycpKTtcblx0XHRjb25zdCBsaW5rUGxhaW5CZWZvcmUgPSBNb3JlYml0cy5odG1sTm9kZSgnY29kZScsIGBbWyR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dYCk7XG5cdFx0Y29uc3QgbGlua1RlbXBsYXRlQmVmb3JlID0gTW9yZWJpdHMuaHRtbE5vZGUoJ2NvZGUnLCBge3ske213LmNvbmZpZy5nZXQoJ3dnVGl0bGUnKX19fWApO1xuXHRcdGxldCBsaW5rUGxhaW5BZnRlcjtcblx0XHRpZiAoZmlsZVNwYWNlKSB7XG5cdFx0XHRsaW5rUGxhaW5BZnRlciA9IE1vcmViaXRzLmh0bWxOb2RlKCdjb2RlJywgYDwhLS0gW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXSAtLT5gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlua1BsYWluQWZ0ZXIgPSBNb3JlYml0cy5odG1sTm9kZSgnY29kZScsIE1vcmViaXRzLnBhZ2VOYW1lTm9ybSk7XG5cdFx0fVxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBbbGlua1RleHRCZWZvcmUsIGxpbmtUZXh0QWZ0ZXIsIGxpbmtQbGFpbkJlZm9yZSwgbGlua1BsYWluQWZ0ZXIsIGxpbmtUZW1wbGF0ZUJlZm9yZV0pIHtcblx0XHRcdG5vZGUuc3R5bGUuZm9udEZhbWlseSA9ICdtb25vc3BhY2UnO1xuXHRcdFx0bm9kZS5zdHlsZS5mb250U3R5bGUgPSAnbm9ybWFsJztcblx0XHR9XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRzdHlsZTogJ21hcmdpbi1ib3R0b206IDAuNWVtOyBmb250LXN0eWxlOiBub3JtYWwnLFxuXHRcdFx0bGFiZWw6IFtcblx0XHRcdFx0YCR7XG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+i/meS4quW3peWFt+WPr+S7peWPlua2iOaJgOacieaMh+WQkeivpemhteeahOmTvuaOpe+8iOKAnOmTvuWFpeKAne+8iScsXG5cdFx0XHRcdFx0XHQn6YCZ5YCL5bel5YW35Y+v5Lul5Y+W5raI5omA5pyJ5oyH5ZCR6Kmy6aCB55qE6YCj57WQ77yI44CM6YCj5YWl44CN77yJJ1xuXHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdChmaWxlU3BhY2Vcblx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfvvIzmiJbpgJrov4fliqDlhaU8IS0tIC0tPuazqOmHiuagh+iusOmakOiXj+aJgOacieWvueatpOaWh+S7tueahOS9v+eUqCcsXG5cdFx0XHRcdFx0XHRcdFx0J++8jOaIlumAj+mBjuWKoOWFpTwhLS0gLS0+5rOo6YeL5qiZ6KiY6Zqx6JeP5omA5pyJ5bCN5q2k5qqU5qGI55qE5L2/55SoJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQ6ICcnKVxuXHRcdFx0XHR944CC5L6L5aaC77yaYCxcblx0XHRcdFx0bGlua1RleHRCZWZvcmUsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG5Lya5Y+Y5oiQJywgJ+Wwh+acg+iuiuaIkCcpLFxuXHRcdFx0XHRsaW5rVGV4dEFmdGVyLFxuXHRcdFx0XHQn77yMJyxcblx0XHRcdFx0bGlua1BsYWluQmVmb3JlLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WwhuS8muWPmOaIkCcsICflsIfmnIPorormiJAnKSxcblx0XHRcdFx0bGlua1BsYWluQWZ0ZXIsXG5cdFx0XHRcdCfvvIwnLFxuXHRcdFx0XHRsaW5rVGVtcGxhdGVCZWZvcmUsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG5Lya6KKr56e76ZmkJywgJ+Wwh+acg+iiq+enu+mZpCcpLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+OAguivt+Wwj+W/g+S9v+eUqOOAgicsICfjgILoq4vlsI/lv4Pkvb/nlKjjgIInKSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0bGFiZWw6ICfnkIbnlLHvvJonLFxuXHRcdFx0dmFsdWU6IHByZXNldFJlYXNvbiB8fCAnJyxcblx0XHRcdHNpemU6IDYwLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0bGlzdDogJ2JhY2tsaW5rcycsXG5cdFx0XHRibHRpdGxlOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRibGxpbWl0OiAnbWF4Jyxcblx0XHRcdC8vIDUwMCBpcyBtYXggZm9yIG5vcm1hbCB1c2VycywgNTAwMCBmb3IgYm90cyBhbmQgc3lzb3BzXG5cdFx0XHRibG5hbWVzcGFjZTogVHdpbmtsZS5nZXRQcmVmKCd1bmxpbmtOYW1lc3BhY2VzJyksXG5cdFx0XHRyYXdjb250aW51ZTogdHJ1ZSxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdH07XG5cdFx0aWYgKGZpbGVTcGFjZSkge1xuXHRcdFx0cXVlcnkubGlzdCArPSAnfGltYWdldXNhZ2UnO1xuXHRcdFx0cXVlcnkuaXV0aXRsZSA9IHF1ZXJ5LmJsdGl0bGU7XG5cdFx0XHRxdWVyeS5pdWxpbWl0ID0gcXVlcnkuYmxsaW1pdDtcblx0XHRcdHF1ZXJ5Lml1bmFtZXNwYWNlID0gcXVlcnkuYmxuYW1lc3BhY2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHF1ZXJ5LmJsZmlsdGVycmVkaXIgPSAnbm9ucmVkaXJlY3RzJztcblx0XHR9XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+aKk+WPlumTvuWFpScsICfmipPlj5bpgKPlhaUnKSxcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0VHdpbmtsZS51bmxpbmsuY2FsbGJhY2tzLmRpc3BsYXkuYmFja2xpbmtzXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHRmb3JtLFxuXHRcdFx0V2luZG93LFxuXHRcdFx0aW1hZ2U6IGZpbGVTcGFjZSxcblx0XHR9O1xuXHRcdHlzYXJjaGl2ZXNfYXBpLnBvc3QoKTtcblx0XHRjb25zdCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0cm9vdC5zdHlsZS5wYWRkaW5nID0gJzE1cHgnOyAvLyBqdXN0IHNvIGl0IGRvZXNuJ3QgbG9vayBicm9rZW5cblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChyb290KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5zdGF0ZWxlbS5zdGF0dXMod2luZG93LndnVUxTKCfliqDovb3kuK3igKbigKYnLCAn6LyJ5YWl5Lit4oCm4oCmJykpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJvb3QpO1xuXHRcdFdpbmRvdy5kaXNwbGF5KCk7XG5cdH07XG5cdFR3aW5rbGUudW5saW5rLmNhbGxiYWNrLmV2YWx1YXRlID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGV2ZW50LnRhcmdldDtcblx0XHRjb25zdCBpbnB1dCA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZm9ybSk7XG5cdFx0aWYgKCFpbnB1dC5yZWFzb24pIHtcblx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOW/hemhu+aMh+WumuWPlua2iOmTvuWFpeeahOeQhueUseOAgicsICfmgqjlv4XpoIjmjIflrprlj5bmtojpgKPlhaXnmoTnkIbnlLHjgIInKSwge1xuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdHRhZzogJ3R3aW5rbGV1bmxpbmsnLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlucHV0LmJhY2tsaW5rcyB8fD0gW107XG5cdFx0aW5wdXQuaW1hZ2V1c2FnZSB8fD0gW107XG5cdFx0Y29uc3QgcGFnZXMgPSBNb3JlYml0cy5hcnJheS51bmlxKFsuLi5pbnB1dC5iYWNrbGlua3MsIC4uLmlucHV0LmltYWdldXNhZ2VdKTtcblx0XHRpZiAoIXBhZ2VzLmxlbmd0aCkge1xuXHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5oKo5b+F6aG76Iez5bCR6YCJ5oup5LiA5Liq6KaB5Y+W5raI6ZO+5YWl55qE6aG16Z2i44CCJywgJ+aCqOW/hemgiOiHs+WwkemBuOaTh+S4gOWAi+imgeWPlua2iOmAo+WFpeeahOmggemdouOAgicpLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZXVubGluaycsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRjb25zdCB1bmxpbmtlciA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbihcblx0XHRcdGDlj5bmtogke1xuXHRcdFx0XHRpbnB1dC5iYWNrbGlua3MubGVuZ3RoXG5cdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+mTvuWFpScsICfpgKPlhaUnKSArXG5cdFx0XHRcdFx0XHQoaW5wdXQuaW1hZ2V1c2FnZS5sZW5ndGggPyB3aW5kb3cud2dVTFMoJ+S4juaWh+S7tuS9v+eUqCcsICfoiIfmqpTmoYjkvb/nlKgnKSA6ICcnKVxuXHRcdFx0XHRcdDogd2luZG93LndnVUxTKCfmlofku7bkvb/nlKgnLCAn5qqU5qGI5L2/55SoJylcblx0XHRcdH1gXG5cdFx0KTtcblx0XHR1bmxpbmtlci5zZXRPcHRpb24oJ3ByZXNlcnZlSW5kaXZpZHVhbFN0YXR1c0xpbmVzJywgdHJ1ZSk7XG5cdFx0dW5saW5rZXIuc2V0UGFnZUxpc3QocGFnZXMpO1xuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdHJlYXNvbjogaW5wdXQucmVhc29uLFxuXHRcdFx0dW5saW5rZXIsXG5cdFx0fTtcblx0XHR1bmxpbmtlci5ydW4oKHBhZ2VOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0d2luZG93LndnVUxTKCflnKjpobXpnaLigJwnLCAn5Zyo6aCB6Z2i44CMJykgKyBwYWdlTmFtZSArIHdpbmRvdy53Z1VMUygn4oCd5Lit5Y+W5raI6ZO+5YWlJywgJ+OAjeS4reWPlua2iOmAo+WFpScpXG5cdFx0XHQpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEJvdEVkaXQodHJ1ZSk7IC8vIHVubGluayBjb25zaWRlcmVkIGEgZmxvb2R5IG9wZXJhdGlvblxuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyh7XG5cdFx0XHRcdGRvQmFja2xpbmtzOiBpbnB1dC5iYWNrbGlua3MuaW5jbHVkZXMocGFnZU5hbWUpLFxuXHRcdFx0XHRkb0ltYWdldXNhZ2U6IGlucHV0LmltYWdldXNhZ2UuaW5jbHVkZXMocGFnZU5hbWUpLFxuXHRcdFx0XHQuLi5wYXJhbXMsXG5cdFx0XHR9KTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUudW5saW5rLmNhbGxiYWNrcy51bmxpbmtCYWNrbGlua3MpO1xuXHRcdH0pO1xuXHR9O1xuXHRUd2lua2xlLnVubGluay5jYWxsYmFja3MgPSB7XG5cdFx0ZGlzcGxheToge1xuXHRcdFx0YmFja2xpbmtzOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXBpb2JqLmdldFJlc3BvbnNlKCk7XG5cdFx0XHRcdGxldCBoYXZlY29udGVudCA9IGZhbHNlO1xuXHRcdFx0XHRsZXQgbGlzdDtcblx0XHRcdFx0bGV0IG5hbWVzcGFjZXM7XG5cdFx0XHRcdGxldCBpO1xuXHRcdFx0XHRpZiAoYXBpb2JqLnBhcmFtcy5pbWFnZSkge1xuXHRcdFx0XHRcdGNvbnN0IGltYWdldXNhZ2UgPSByZXNwb25zZS5xdWVyeS5pbWFnZXVzYWdlLnNvcnQoVHdpbmtsZS5zb3J0QnlOYW1lc3BhY2UpO1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgaW1hZ2V1c2FnZS5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Ly8gTGFiZWwgbWFkZSBieSBUd2lua2xlLmdlbmVyYXRlQmF0Y2hQYWdlTGlua3Ncblx0XHRcdFx0XHRcdGxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAnJyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGltYWdldXNhZ2VbaV0udGl0bGUsXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGxpc3QubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWh+S7tuS9v+eUqCcsICfmqpTmoYjkvb/nlKgnKSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0bmFtZXNwYWNlcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIFR3aW5rbGUuZ2V0UHJlZigndW5saW5rTmFtZXNwYWNlcycpKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWVzcGFjZXMucHVzaChcblx0XHRcdFx0XHRcdFx0XHR2ID09PSAnMCdcblx0XHRcdFx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCfvvIjmnaHnm67vvIknLCAn77yI5qKd55uu77yJJylcblx0XHRcdFx0XHRcdFx0XHRcdDogbXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbdl1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bey6YCJ5oup55qE5ZG95ZCN56m66Ze077yaJywgJ+W3sumBuOaTh+eahOWRveWQjeepuumWk++8micpICsgbmFtZXNwYWNlcy5qb2luKCfjgIEnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjlj6/lnKhUd2lua2xl5Y+C5pWw6K6+572u5Lit5pu05pS555u45YWz6YCJ6aG577yM6K+35Y+C6KeBW1tIOlRXL1BSRUZdXScsXG5cdFx0XHRcdFx0XHRcdFx0J+aCqOWPr+WcqFR3aW5rbGXlgY/lpb3oqK3lrprkuK3mm7TmlLnnm7jpl5zpgbjpoIXvvIzoq4vlj4PopotbW0g6VFcvUFJFRl1dJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAocmVzcG9uc2VbJ3F1ZXJ5LWNvbnRpbnVlJ10gJiYgcmVzcG9uc2VbJ3F1ZXJ5LWNvbnRpbnVlJ10uaW1hZ2V1c2FnZSkge1xuXHRcdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDpcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pi+56S65YmNJywgJ+mhr+ekuuWJjScpICtcblx0XHRcdFx0XHRcdFx0XHRcdG13Lmxhbmd1YWdlLmNvbnZlcnROdW1iZXIobGlzdC5sZW5ndGgpICtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Liq5paH5Lu25L2/55So44CCJywgJ+WAi+aqlOahiOS9v+eUqOOAgicpLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YWo6YCJJywgJ+WFqOmBuCcpLFxuXHRcdFx0XHRcdFx0XHRldmVudDogKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnaW1hZ2V1c2FnZScpKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YWo5LiN6YCJJywgJ+WFqOS4jemBuCcpLFxuXHRcdFx0XHRcdFx0XHRldmVudDogKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnaW1hZ2V1c2FnZScpKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ2ltYWdldXNhZ2UnLFxuXHRcdFx0XHRcdFx0XHRzaGlmdENsaWNrU3VwcG9ydDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bGlzdCxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aGF2ZWNvbnRlbnQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+acquaJvuWIsOaWh+S7tuS9v+eUqOOAgicsICfmnKrmib7liLDmqpTmoYjkvb/nlKjjgIInKSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBiYWNrbGlua3MgPSByZXNwb25zZS5xdWVyeS5iYWNrbGlua3Muc29ydChUd2lua2xlLnNvcnRCeU5hbWVzcGFjZSk7XG5cdFx0XHRcdGlmIChiYWNrbGlua3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYmFja2xpbmtzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdFx0XHQvLyBMYWJlbCBtYWRlIGJ5IFR3aW5rbGUuZ2VuZXJhdGVCYXRjaFBhZ2VMaW5rc1xuXHRcdFx0XHRcdFx0bGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6ICcnLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogYmFja2xpbmtzW2ldLnRpdGxlLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpk77lhaUnLCAn6YCj5YWlJyksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0bmFtZXNwYWNlcyA9IFtdO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdiBvZiBUd2lua2xlLmdldFByZWYoJ3VubGlua05hbWVzcGFjZXMnKSkge1xuXHRcdFx0XHRcdFx0bmFtZXNwYWNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHR2ID09PSAnMCcgPyB3aW5kb3cud2dVTFMoJ++8iOadoeebru+8iScsICfvvIjmop3nm67vvIknKSA6IG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3ZdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bey6YCJ5oup55qE5ZG95ZCN56m66Ze077yaJywgJ+W3sumBuOaTh+eahOWRveWQjeepuumWk++8micpICsgbmFtZXNwYWNlcy5qb2luKCfjgIEnKSxcblx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+aCqOWPr+WcqFR3aW5rbGXlj4LmlbDorr7nva7kuK3mm7TmlLnnm7jlhbPpgInpobnvvIzor7flj4Lop4FbW0g6VFcvUFJFRl1dJyxcblx0XHRcdFx0XHRcdFx0J+aCqOWPr+WcqFR3aW5rbGXlgY/lpb3oqK3lrprkuK3mm7TmlLnnm7jpl5zpgbjpoIXvvIzoq4vlj4PopotbW0g6VFcvUFJFRl1dJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VbJ3F1ZXJ5LWNvbnRpbnVlJ10gJiYgcmVzcG9uc2VbJ3F1ZXJ5LWNvbnRpbnVlJ10uYmFja2xpbmtzKSB7XG5cdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOlxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pi+56S65YmNJywgJ+mhr+ekuuWJjScpICtcblx0XHRcdFx0XHRcdFx0XHRtdy5sYW5ndWFnZS5jb252ZXJ0TnVtYmVyKGxpc3QubGVuZ3RoKSArXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuKrpk77lhaXjgIInLCAn5YCL6YCj5YWl44CCJyksXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YXBpb2JqLnBhcmFtcy5mb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WFqOmAiScsICflhajpgbgnKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnYmFja2xpbmtzJykpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YXBpb2JqLnBhcmFtcy5mb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WFqOS4jemAiScsICflhajkuI3pgbgnKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnYmFja2xpbmtzJykpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICdiYWNrbGlua3MnLFxuXHRcdFx0XHRcdFx0c2hpZnRDbGlja1N1cHBvcnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRsaXN0LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGhhdmVjb250ZW50ID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pyq5om+5Yiw6ZO+5YWl44CCJywgJ+acquaJvuWIsOmAo+WFpeOAgicpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChoYXZlY29udGVudCkge1xuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXBpb2JqLnBhcmFtcy5mb3JtLnJlbmRlcigpO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLldpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbGluayBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMocmVzdWx0LCAnYmFja2xpbmtzJykpIHtcblx0XHRcdFx0XHRUd2lua2xlLmdlbmVyYXRlQmF0Y2hQYWdlTGlua3MobGluayk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBsaW5rIG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyZXN1bHQsICdpbWFnZXVzYWdlJykpIHtcblx0XHRcdFx0XHRUd2lua2xlLmdlbmVyYXRlQmF0Y2hQYWdlTGlua3MobGluayk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fSxcblx0XHR1bmxpbmtCYWNrbGlua3M6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRsZXQgb2xkdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraXRleHQucGFnZShvbGR0ZXh0KTtcblx0XHRcdGxldCBzdW1tYXJ5VGV4dCA9ICcnO1xuXHRcdFx0bGV0IHdhcm5pbmdTdHJpbmcgPSBmYWxzZTtcblx0XHRcdGxldCB0ZXh0O1xuXHRcdFx0Ly8gcmVtb3ZlIGltYWdlIHVzYWdlc1xuXHRcdFx0aWYgKHBhcmFtcy5kb0ltYWdldXNhZ2UpIHtcblx0XHRcdFx0dGV4dCA9IHlzYXJjaGl2ZXNfcGFnZVxuXHRcdFx0XHRcdC5jb21tZW50T3V0SW1hZ2UobXcuY29uZmlnLmdldCgnd2dUaXRsZScpLCB3aW5kb3cud2dVTFMoJ+azqOmHiicsICfms6jph4snKSlcblx0XHRcdFx0XHQuZ2V0VGV4dCgpO1xuXHRcdFx0XHQvLyBkaWQgd2UgYWN0dWFsbHkgbWFrZSBhbnkgY2hhbmdlcz9cblx0XHRcdFx0aWYgKHRleHQgPT09IG9sZHRleHQpIHtcblx0XHRcdFx0XHR3YXJuaW5nU3RyaW5nID0gd2luZG93LndnVUxTKCfmlofku7bkvb/nlKgnLCAn5qqU5qGI5L2/55SoJyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3VtbWFyeVRleHQgPSB3aW5kb3cud2dVTFMoJ+azqOmHiuaWh+S7tuS9v+eUqCcsICfms6jph4vmqpTmoYjkvb/nlKgnKTtcblx0XHRcdFx0XHRvbGR0ZXh0ID0gdGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gcmVtb3ZlIGJhY2tsaW5rc1xuXHRcdFx0aWYgKHBhcmFtcy5kb0JhY2tsaW5rcykge1xuXHRcdFx0XHR0ZXh0ID0geXNhcmNoaXZlc19wYWdlLnJlbW92ZUxpbmsoTW9yZWJpdHMucGFnZU5hbWVOb3JtKS5nZXRUZXh0KCk7XG5cdFx0XHRcdHRleHQgPSB5c2FyY2hpdmVzX3BhZ2UucmVtb3ZlVGVtcGxhdGUobXcuY29uZmlnLmdldCgnd2dUaXRsZScpKS5nZXRUZXh0KCk7XG5cdFx0XHRcdC8vIGRpZCB3ZSBhY3R1YWxseSBtYWtlIGFueSBjaGFuZ2VzP1xuXHRcdFx0XHRpZiAodGV4dCA9PT0gb2xkdGV4dCkge1xuXHRcdFx0XHRcdHdhcm5pbmdTdHJpbmcgPSB3YXJuaW5nU3RyaW5nXG5cdFx0XHRcdFx0XHQ/IHdpbmRvdy53Z1VMUygn5Y+W5raI6ZO+5YWl5oiW5paH5Lu25L2/55SoJywgJ+WPlua2iOmAo+WFpeaIluaqlOahiOS9v+eUqCcpXG5cdFx0XHRcdFx0XHQ6IHdpbmRvdy53Z1VMUygn5Y+W5raI6ZO+5YWlJywgJ+WPlua2iOmAo+WFpScpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN1bW1hcnlUZXh0ID0gKHN1bW1hcnlUZXh0ID8gYCR7c3VtbWFyeVRleHR9IC8gYCA6ICcnKSArIHdpbmRvdy53Z1VMUygn5Y+W5raI6ZO+57uT5YiwJywgJ+WPlua2iOmAo+e1kOWIsCcpO1xuXHRcdFx0XHRcdG9sZHRleHQgPSB0ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAod2FybmluZ1N0cmluZykge1xuXHRcdFx0XHQvLyBub3RoaW5nIHRvIGRvIVxuXHRcdFx0XHRwYWdlb2JqXG5cdFx0XHRcdFx0LmdldFN0YXR1c0VsZW1lbnQoKVxuXHRcdFx0XHRcdC5lcnJvcihgJHt3aW5kb3cud2dVTFMoJ+acquiDveWcqOmhtemdouS4iuaJvuWIsCcsICfmnKrog73lnKjpoIHpnaLkuIrmib7liLAnKSArIHdhcm5pbmdTdHJpbmd944CCYCk7XG5cdFx0XHRcdHBhcmFtcy51bmxpbmtlci53b3JrZXJGYWlsdXJlKHBhZ2VvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShcblx0XHRcdFx0c3VtbWFyeVRleHQgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCcJywgJ+OAjCcpICtcblx0XHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCd77yaJywgJ+OAje+8micpICtcblx0XHRcdFx0XHRwYXJhbXMucmVhc29uXG5cdFx0XHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZShwYXJhbXMudW5saW5rZXIud29ya2VyU3VjY2VzcywgcGFyYW1zLnVubGlua2VyLndvcmtlckZhaWx1cmUpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUudW5saW5rLCAndW5saW5rJyk7XG59KShqUXVlcnkpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcblxuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlZmx1ZmYuanMgKi9cbihmdW5jdGlvbiB0d2lua2xlZmx1ZmYoJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIHR3aW5rbGVmbHVmZi5qczogUmV2ZXJ0L3JvbGxiYWNrIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IExpbmtzIG9uIGNvbnRyaWJ1dGlvbnMsXG5cdCAqIHJlY2VudCBjaGFuZ2VzLCBoaXN0b3J5LCBhbmQgZGlmZiBwYWdlc1xuXHQgKiBBY3RpdmUgb246IERpZmYgcGFnZXMsIGhpc3RvcnkgcGFnZXMsXG5cdCAqIFNwZWNpYWw6UmVjZW50Q2hhbmdlcyhMaW5rZWQpLCBhbmQgU3BlY2lhbDpDb250cmlidXRpb25zXG5cdCAqL1xuXHQvKipcblx0ICogVHdpbmtsZWZsdWZmIHJldmVydCBhbmQgYW50aXZhbmRhbGlzbSB1dGlsaXR5XG5cdCAqL1xuXHRUd2lua2xlLmZsdWZmID0gKCkgPT4ge1xuXHRcdC8vIE9ubHkgcHJvY2VlZCBpZiB0aGUgdXNlciBjYW4gYWN0dWFsbHkgZWRpdCB0aGUgcGFnZSBpbiBxdWVzdGlvbi5cblx0XHQvLyB3Z0lzUHJvYmFibHlFZGl0YWJsZSBzaG91bGQgdGFrZVxuXHRcdC8vIGNhcmUgb2YgbmFtZXNwYWNlL2NvbnRlbnRNb2RlbCByZXN0cmljdGlvbnMgYXMgd2VsbCBhcyBleHBsaWNpdFxuXHRcdC8vIHByb3RlY3Rpb25zOyBpdCB3b24ndCB0YWtlIGNhcmUgb2YgY2FzY2FkaW5nIG9yIFRpdGxlQmxhY2tsaXN0LlxuXHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0lzUHJvYmFibHlFZGl0YWJsZScpKSB7XG5cdFx0XHQvLyB3Z0RpZmZPbGRJZCBpbmNsdWRlZCBmb3IgY2xhcml0eSBpbiBpZiBlbHNlIGxvb3Bcblx0XHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpIHx8IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk9sZElkJykpIHtcblx0XHRcdFx0Ly8gUmVsb2FkIGFsb25nc2lkZSB0aGUgcmV2aXNpb24gc2xpZGVyXG5cdFx0XHRcdG13Lmhvb2soJ3dpa2lwYWdlLmRpZmYnKS5hZGQoKCkgPT4ge1xuXHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYuYWRkTGlua3MuZGlmZigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgPT09ICd2aWV3JyAmJlxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1JldmlzaW9uSWQnKSAmJlxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0N1clJldmlzaW9uSWQnKSAhPT0gbXcuY29uZmlnLmdldCgnd2dSZXZpc2lvbklkJylcblx0XHRcdCkge1xuXHRcdFx0XHRUd2lua2xlLmZsdWZmLmFkZExpbmtzLm9sZGlkKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgPT09ICdoaXN0b3J5Jykge1xuXHRcdFx0XHRUd2lua2xlLmZsdWZmLmFkZExpbmtzLmhpc3RvcnkoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IC0xKSB7XG5cdFx0XHRUd2lua2xlLmZsdWZmLnNraXBUYWxrID0gIVR3aW5rbGUuZ2V0UHJlZignb3BlblRhbGtQYWdlT25BdXRvUmV2ZXJ0Jyk7XG5cdFx0XHRUd2lua2xlLmZsdWZmLnJvbGxiYWNrSW5QbGFjZSA9IFR3aW5rbGUuZ2V0UHJlZigncm9sbGJhY2tJblBsYWNlJyk7XG5cdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dDYW5vbmljYWxTcGVjaWFsUGFnZU5hbWUnKSA9PT0gJ0NvbnRyaWJ1dGlvbnMnKSB7XG5cdFx0XHRcdFR3aW5rbGUuZmx1ZmYuYWRkTGlua3MuY29udHJpYnV0aW9ucygpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dDYW5vbmljYWxTcGVjaWFsUGFnZU5hbWUnKSA9PT0gJ1JlY2VudGNoYW5nZXMnIHx8XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQ2Fub25pY2FsU3BlY2lhbFBhZ2VOYW1lJykgPT09ICdSZWNlbnRjaGFuZ2VzbGlua2VkJ1xuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFJlbG9hZCB3aXRoIHJlY2VudCBjaGFuZ2VzIHVwZGF0ZXNcblx0XHRcdFx0Ly8gc3RydWN0dXJlZENoYW5nZUZpbHRlcnMudWkuaW5pdGlhbGl6ZWQgaXMganVzdCBvbiBsb2FkXG5cdFx0XHRcdG13Lmhvb2soJ3dpa2lwYWdlLmNvbnRlbnQnKS5hZGQoKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAoaXRlbS5pcygnZGl2JykpIHtcblx0XHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYuYWRkTGlua3MucmVjZW50Y2hhbmdlcygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHQvLyBBIGxpc3Qgb2YgdXNlcm5hbWVzLCB1c3VhbGx5IG9ubHkgYm90cywgdGhhdCB2YW5kYWxpc20gcmV2ZXJ0IGlzIGp1bXBlZFxuXHQvLyBvdmVyOyB0aGF0IGlzLCBpZiB2YW5kYWxpc20gcmV2ZXJ0IHdhcyBjaG9zZW4gb24gc3VjaCB1c2VybmFtZSwgdGhlbiBpdHNcblx0Ly8gdGFyZ2V0IGlzIG9uIHRoZSByZXZpc2lvbiBiZWZvcmUuICBUaGlzIGlzIGZvciBoYW5kbGluZyBxdWljayBib3RzIHRoYXRcblx0Ly8gbWFrZXMgZWRpdHMgc2Vjb25kcyBhZnRlciB0aGUgb3JpZ2luYWwgZWRpdCBpcyBtYWRlLiAgVGhpcyBvbmx5IGFmZmVjdHNcblx0Ly8gdmFuZGFsaXNtIHJvbGxiYWNrOyBmb3IgZ29vZCBmYWl0aCByb2xsYmFjaywgaXQgd2lsbCBzdG9wLCBpbmRpY2F0aW5nIGEgYm90XG5cdC8vIGhhcyBubyBmYWl0aCwgYW5kIGZvciBub3JtYWwgcm9sbGJhY2ssIGl0IHdpbGwgcm9sbGJhY2sgdGhhdCBlZGl0LlxuXHRUd2lua2xlLmZsdWZmLnRydXN0ZWRCb3RzID0gW107XG5cdFR3aW5rbGUuZmx1ZmYuc2tpcFRhbGsgPSBudWxsO1xuXHRUd2lua2xlLmZsdWZmLnJvbGxiYWNrSW5QbGFjZSA9IG51bGw7XG5cdC8vIFN0cmluZyB0byBpbnNlcnQgd2hlbiBhIHVzZXJuYW1lIGlzIGhpZGRlblxuXHRUd2lua2xlLmZsdWZmLmhpZGRlbk5hbWUgPSB3aW5kb3cud2dVTFMoJ+W3sumakOiXj+eahOeUqOaItycsICflt7LpmrHol4/nmoTkvb/nlKjogIUnKTtcblx0Ly8gQ29uc29saWRhdGVkIGNvbnN0cnVjdGlvbiBvZiBmbHVmZiBsaW5rc1xuXHRUd2lua2xlLmZsdWZmLmxpbmtCdWlsZGVyID0ge1xuXHRcdHNwYW5UYWc6IChjb2xvciwgY29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdHNwYW4uc3R5bGUuY29sb3IgPSBjb2xvcjtcblx0XHRcdHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpO1xuXHRcdFx0cmV0dXJuIHNwYW47XG5cdFx0fSxcblx0XHRidWlsZExpbms6IChjb2xvciwgdGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdGxpbmsuYXBwZW5kQ2hpbGQoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5zcGFuVGFnKCdCbGFjaycsICdbJykpO1xuXHRcdFx0bGluay5hcHBlbmRDaGlsZChUd2lua2xlLmZsdWZmLmxpbmtCdWlsZGVyLnNwYW5UYWcoY29sb3IsIHRleHQpKTtcblx0XHRcdGxpbmsuYXBwZW5kQ2hpbGQoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5zcGFuVGFnKCdCbGFjaycsICddJykpO1xuXHRcdFx0bGluay5ocmVmID0gJyMnO1xuXHRcdFx0cmV0dXJuIGxpbms7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbmRhbD1udWxsXSAtIFVzZXJuYW1lIG9mIHRoZSBlZGl0b3IgYmVpbmcgcmV2ZXJ0ZWRcblx0XHQgKiBQcm92aWRlIGEgZmFsc2V5IHZhbHVlIGlmIHRoZSB1c2VybmFtZSBpcyBoaWRkZW4sIGRlZmF1bHRzIHRvIG51bGxcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlubGluZSAtIFRydWUgdG8gY3JlYXRlIHR3byBsaW5rcyBpbiBhIHNwYW4sIGZhbHNlXG5cdFx0ICogdG8gY3JlYXRlIHRocmVlIGxpbmtzIGluIGEgZGl2IChvcHRpb25hbClcblx0XHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtyZXY9d2dDdXJSZXZpc2lvbklkXSAtIFJldmlzaW9uIElEIGJlaW5nIHJldmVydGVkIChvcHRpb25hbClcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW3BhZ2U9d2dQYWdlTmFtZV0gLSBQYWdlIGJlaW5nIHJldmVydGVkIChvcHRpb25hbClcblx0XHQgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gcmV2Tm9kZVxuXHRcdCAqL1xuXHRcdHJvbGxiYWNrTGlua3M6ICh2YW5kYWwsIGlubGluZSwgcmV2LCBwYWdlKSA9PiB7XG5cdFx0XHR2YW5kYWwgfHw9IG51bGw7XG5cdFx0XHRjb25zdCBlbGVtID0gaW5saW5lID8gJ3NwYW4nIDogJ2Rpdic7XG5cdFx0XHRjb25zdCByZXZOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtKTtcblx0XHRcdHJldiA9IE51bWJlci5wYXJzZUludChyZXYsIDEwKTtcblx0XHRcdGlmIChyZXYpIHtcblx0XHRcdFx0cmV2Tm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJywgYHR3LXJldmVydCR7cmV2fWApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV2Tm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3R3LXJldmVydCcpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgbm9ybU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHJvbmcnKTtcblx0XHRcdGNvbnN0IHZhbmROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Ryb25nJyk7XG5cdFx0XHRjb25zdCBub3JtTGluayA9IFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIuYnVpbGRMaW5rKCdTdGVlbEJsdWUnLCAn5Zue6YCAJyk7XG5cdFx0XHRjb25zdCB2YW5kTGluayA9IFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIuYnVpbGRMaW5rKCdSZWQnLCB3aW5kb3cud2dVTFMoJ+egtOWdjycsICfnoLTlo54nKSk7XG5cdFx0XHQkKG5vcm1MaW5rKS5vbignY2xpY2snLCAoZSkgPT4ge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFR3aW5rbGUuZmx1ZmYucmV2ZXJ0KCdub3JtJywgdmFuZGFsLCByZXYsIHBhZ2UpO1xuXHRcdFx0XHRUd2lua2xlLmZsdWZmLmRpc2FibGVMaW5rcyhyZXZOb2RlKTtcblx0XHRcdH0pO1xuXHRcdFx0JCh2YW5kTGluaykub24oJ2NsaWNrJywgKGUpID0+IHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRUd2lua2xlLmZsdWZmLnJldmVydCgndmFuZCcsIHZhbmRhbCwgcmV2LCBwYWdlKTtcblx0XHRcdFx0VHdpbmtsZS5mbHVmZi5kaXNhYmxlTGlua3MocmV2Tm9kZSk7XG5cdFx0XHR9KTtcblx0XHRcdHZhbmROb2RlLmFwcGVuZENoaWxkKHZhbmRMaW5rKTtcblx0XHRcdG5vcm1Ob2RlLmFwcGVuZENoaWxkKG5vcm1MaW5rKTtcblx0XHRcdGNvbnN0IHNlcGFyYXRvciA9IGlubGluZSA/ICcgJyA6ICcgfHwgJztcblx0XHRcdHJldk5vZGUuYXBwZW5kQ2hpbGQobm9ybU5vZGUpO1xuXHRcdFx0cmV2Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzZXBhcmF0b3IpKTtcblx0XHRcdHJldk5vZGUuYXBwZW5kQ2hpbGQodmFuZE5vZGUpO1xuXHRcdFx0cmV0dXJuIHJldk5vZGU7XG5cdFx0fSxcblx0XHQvLyBCdWlsZCBbcmVzdG9yZSB0aGlzIHJldmlzaW9uXSBsaW5rc1xuXHRcdHJlc3RvcmVUaGlzUmV2aXNpb25MaW5rOiAocmV2aXNpb25SZWYsIGlubGluZSkgPT4ge1xuXHRcdFx0Ly8gSWYgbm90IGEgc3BlY2lmaWMgcmV2aXNpb24gbnVtYmVyLCBzaG91bGQgYmUgd2dEaWZmTmV3SWQvd2dEaWZmT2xkSWQvd2dSZXZpc2lvbklkXG5cdFx0XHRyZXZpc2lvblJlZiA9IHR5cGVvZiByZXZpc2lvblJlZiA9PT0gJ251bWJlcicgPyByZXZpc2lvblJlZiA6IG13LmNvbmZpZy5nZXQocmV2aXNpb25SZWYpO1xuXHRcdFx0Y29uc3QgZWxlbSA9IGlubGluZSA/ICdzcGFuJyA6ICdkaXYnO1xuXHRcdFx0Y29uc3QgcmV2ZXJ0VG9SZXZpc2lvbk5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW0pO1xuXHRcdFx0cmV2ZXJ0VG9SZXZpc2lvbk5vZGUuc2V0QXR0cmlidXRlKCdpZCcsIGB0dy1yZXZlcnQtdG8tJHtyZXZpc2lvblJlZn1gKTtcblx0XHRcdHJldmVydFRvUmV2aXNpb25Ob2RlLnN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7XG5cdFx0XHRjb25zdCByZXZlcnRUb1JldmlzaW9uTGluayA9IFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIuYnVpbGRMaW5rKFxuXHRcdFx0XHQnU2FkZGxlQnJvd24nLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aBouWkjeatpOeJiOacrCcsICfmgaLlvqnmraTniYjmnKwnKVxuXHRcdFx0KTtcblx0XHRcdCQocmV2ZXJ0VG9SZXZpc2lvbkxpbmspLm9uKCdjbGljaycsIChlKSA9PiB7XG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0VHdpbmtsZS5mbHVmZi5yZXZlcnRUb1JldmlzaW9uKHJldmlzaW9uUmVmKTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGlubGluZSkge1xuXHRcdFx0XHRyZXZlcnRUb1JldmlzaW9uTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTtcblx0XHRcdH1cblx0XHRcdHJldmVydFRvUmV2aXNpb25Ob2RlLmFwcGVuZENoaWxkKHJldmVydFRvUmV2aXNpb25MaW5rKTtcblx0XHRcdHJldHVybiByZXZlcnRUb1JldmlzaW9uTm9kZTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLmZsdWZmLmFkZExpbmtzID0ge1xuXHRcdGNvbnRyaWJ1dGlvbnM6ICgpID0+IHtcblx0XHRcdC8vICQoJ3NwLWNvbnRyaWJ1dGlvbnMtZm9vdGVyLWFub24tcmFuZ2UnKSByZWxpZXMgb24gdGhlIGZtYm94XG5cdFx0XHQvLyBpZCBpbiBbW01lZGlhV2lraTpTcC1jb250cmlidXRpb25zLWZvb3Rlci1hbm9uLXJhbmdlXV0gYW5kXG5cdFx0XHQvLyBpcyB1c2VkIHRvIHNob3cgcm9sbGJhY2svdmFuZGFsaXNtIGxpbmtzIGZvciBJUCByYW5nZXNcblx0XHRcdGNvbnN0IGlzUmFuZ2UgPSAhISRib2R5LmZpbmQoJyNzcC1jb250cmlidXRpb25zLWZvb3Rlci1hbm9uLXJhbmdlJylbMF07XG5cdFx0XHRpZiAobXcuY29uZmlnLmV4aXN0cygnd2dSZWxldmFudFVzZXJOYW1lJykgfHwgaXNSYW5nZSkge1xuXHRcdFx0XHQvLyBHZXQgdGhlIHVzZXJuYW1lIHRoZXNlIGNvbnRyaWJ1dGlvbnMgYXJlIGZvclxuXHRcdFx0XHRsZXQgdXNlcm5hbWUgPSBtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZignc2hvd1JvbGxiYWNrTGlua3MnKS5pbmNsdWRlcygnY29udHJpYnMnKSB8fFxuXHRcdFx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgIT09IHVzZXJuYW1lICYmXG5cdFx0XHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ3Nob3dSb2xsYmFja0xpbmtzJykuaW5jbHVkZXMoJ290aGVycycpKSB8fFxuXHRcdFx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgPT09IHVzZXJuYW1lICYmIFR3aW5rbGUuZ2V0UHJlZignc2hvd1JvbGxiYWNrTGlua3MnKS5pbmNsdWRlcygnbWluZScpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb25zdCAkbGlzdCA9ICRib2R5XG5cdFx0XHRcdFx0XHQuZmluZCgnI213LWNvbnRlbnQtdGV4dCcpXG5cdFx0XHRcdFx0XHQuZmluZCgndWwgbGk6aGFzKHNwYW4ubXctdWN0b3ApOmhhcygubXctY2hhbmdlc2xpc3QtZGlmZiknKTtcblx0XHRcdFx0XHQkbGlzdC5lYWNoKChfa2V5LCBjdXJyZW50KSA9PiB7XG5cdFx0XHRcdFx0XHQvLyByZXZpZCBpcyBhbHNvIGF2YWlsYWJsZSBpbiB0aGUgaHJlZiBvZiBib3RoXG5cdFx0XHRcdFx0XHQvLyAubXctY2hhbmdlc2xpc3QtZGF0ZSBvciAubXctY2hhbmdlc2xpc3QtZGlmZlxuXHRcdFx0XHRcdFx0Y29uc3QgcGFnZSA9ICQoY3VycmVudCkuZmluZCgnLm13LWNvbnRyaWJ1dGlvbnMtdGl0bGUnKS50ZXh0KCk7XG5cdFx0XHRcdFx0XHQvLyBHZXQgdXNlcm5hbWUgZm9yIElQIHJhbmdlcyAod2dSZWxldmFudFVzZXJOYW1lIGlzIG51bGwpXG5cdFx0XHRcdFx0XHRpZiAoaXNSYW5nZSkge1xuXHRcdFx0XHRcdFx0XHQvLyBUaGUgOm5vdCBpcyBwb3NzaWJseSB1bm5lY2Vzc2FyeSwgYXMgaXQgYXBwZWFycyB0aGF0XG5cdFx0XHRcdFx0XHRcdC8vIC5tdy11c2VybGluayBpcyBzaW1wbHkgbm90IHByZXNlbnQgaWYgdGhlIHVzZXJuYW1lIGlzIGhpZGRlblxuXHRcdFx0XHRcdFx0XHR1c2VybmFtZSA9ICQoY3VycmVudCkuZmluZCgnLm13LXVzZXJsaW5rOm5vdCguaGlzdG9yeS1kZWxldGVkKScpLnRleHQoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIEl0J3MgdW5saWtlbHksIGJ1dCB3ZSBjYW4ndCBlYXNpbHkgY2hlY2sgZm9yIHJldmRlbCdkIHVzZXJuYW1lc1xuXHRcdFx0XHRcdFx0Ly8gc2luY2Ugb25seSBhIHN0cm9uZyBlbGVtZW50IGlzIHByb3ZpZGVkLCB3aXRoIG5vIGVhc3kgc2VsZWN0b3Jcblx0XHRcdFx0XHRcdGN1cnJlbnQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIucm9sbGJhY2tMaW5rcyh1c2VybmFtZSwgdHJ1ZSwgY3VycmVudC5kYXRhc2V0Lm13UmV2aWQsIHBhZ2UpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWNlbnRjaGFuZ2VzOiAoKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnUmVjZW50Y2hhbmdlcycgJiZcblx0XHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ3Nob3dSb2xsYmFja0xpbmtzJykuaW5jbHVkZXMoJ3JlY2VudGNoYW5nZXMnKSkgfHxcblx0XHRcdFx0KG13LmNvbmZpZy5nZXQoJ3dnQ2Fub25pY2FsU3BlY2lhbFBhZ2VOYW1lJykgPT09ICdSZWNlbnRjaGFuZ2VzbGlua2VkJyAmJlxuXHRcdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZignc2hvd1JvbGxiYWNrTGlua3MnKS5pbmNsdWRlcygncmVjZW50Y2hhbmdlc2xpbmtlZCcpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIExhdGVzdCBhbmQgcmV2ZXJ0YWJsZSAobm90IHBhZ2UgY3JlYXRpb25zLCBsb2dzLCBjYXRlZ29yaXphdGlvbnMsIGV0Yy4pXG5cdFx0XHRcdGxldCAkbGlzdCA9ICRib2R5LmZpbmQoJy5tdy1jaGFuZ2VzbGlzdCAubXctY2hhbmdlc2xpc3QtbGFzdC5tdy1jaGFuZ2VzbGlzdC1zcmMtbXctZWRpdCcpO1xuXHRcdFx0XHQvLyBFeGNsdWRlIHRvcC1sZXZlbCBoZWFkZXIgaWYgXCJncm91cCBjaGFuZ2VzXCIgcHJlZmVyZW5jZSBpcyB1c2VkXG5cdFx0XHRcdC8vIGFuZCBmaW5kIG9ubHkgaW5kaXZpZHVhbCBsaW5lcyBvciBuZXN0ZWQgbGluZXNcblx0XHRcdFx0JGxpc3QgPSAkbGlzdFxuXHRcdFx0XHRcdC5ub3QoJy5tdy1yY2ZpbHRlcnMtdWktaGlnaGxpZ2h0cy1lbmhhbmNlZC10b3BsZXZlbCcpXG5cdFx0XHRcdFx0LmZpbmQoJy5tdy1jaGFuZ2VzbGlzdC1saW5lLWlubmVyLCB0ZC5tdy1lbmhhbmNlZC1yYy1uZXN0ZWQnKTtcblx0XHRcdFx0JGxpc3QuZWFjaCgoX2tleSwgY3VycmVudCkgPT4ge1xuXHRcdFx0XHRcdC8vIFRoZSA6bm90IGlzIHBvc3NpYmx5IHVubmVjZXNzYXJ5LCBhcyBpdCBhcHBlYXJzIHRoYXRcblx0XHRcdFx0XHQvLyAubXctdXNlcmxpbmsgaXMgc2ltcGx5IG5vdCBwcmVzZW50IGlmIHRoZSB1c2VybmFtZSBpcyBoaWRkZW5cblx0XHRcdFx0XHRjb25zdCB2YW5kYWwgPSAkKGN1cnJlbnQpLmZpbmQoJy5tdy11c2VybGluazpub3QoLmhpc3RvcnktZGVsZXRlZCknKS50ZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3QgaHJlZiA9ICQoY3VycmVudCkuZmluZCgnLm13LWNoYW5nZXNsaXN0LWRpZmYnKS5hdHRyKCdocmVmJyk7XG5cdFx0XHRcdFx0Y29uc3QgcmV2ID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdkaWZmJywgaHJlZik7XG5cdFx0XHRcdFx0Y29uc3QgcGFnZSA9IGN1cnJlbnQuZGF0YXNldC50YXJnZXRQYWdlO1xuXHRcdFx0XHRcdGN1cnJlbnQuYXBwZW5kQ2hpbGQoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5yb2xsYmFja0xpbmtzKHZhbmRhbCwgdHJ1ZSwgcmV2LCBwYWdlKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aGlzdG9yeTogKCkgPT4ge1xuXHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignc2hvd1JvbGxiYWNrTGlua3MnKS5pbmNsdWRlcygnaGlzdG9yeScpKSB7XG5cdFx0XHRcdC8vIEFsbCByZXZzXG5cdFx0XHRcdGNvbnN0IGhpc3RMaXN0ID0gJGJvZHkuZmluZCgnI3BhZ2VoaXN0b3J5IGxpJykudG9BcnJheSgpO1xuXHRcdFx0XHQvLyBPbiBmaXJzdCBwYWdlIG9mIHJlc3VsdHMsIHNvIGFkZCByZXZlcnQvcm9sbGJhY2tcblx0XHRcdFx0Ly8gbGlua3MgdG8gdGhlIHRvcCByZXZpc2lvblxuXHRcdFx0XHRpZiAoISRib2R5LmZpbmQoJ2EubXctZmlyc3RsaW5rJykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlyc3QgPSBoaXN0TGlzdC5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbnN0IHZhbmRhbCA9ICQoZmlyc3QpLmZpbmQoJy5tdy11c2VybGluazpub3QoLmhpc3RvcnktZGVsZXRlZCknKS50ZXh0KCk7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZm9yIGZpcnN0IHVzZXJuYW1lIGRpZmZlcmVudCB0aGFuIHRoZSB0b3AgdXNlcixcblx0XHRcdFx0XHQvLyBvbmx5IGFwcGx5IHJvbGxiYWNrIGxpbmtzIGlmL3doZW4gZm91bmRcblx0XHRcdFx0XHQvLyBmb3IgZmFzdGVyIHRoYW4gZXZlcnlcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgaGlzdExpc3QpIHtcblx0XHRcdFx0XHRcdGlmICgkKGl0ZW0pLmZpbmQoJy5tdy11c2VybGluaycpLnRleHQoKSAhPT0gdmFuZGFsKSB7XG5cdFx0XHRcdFx0XHRcdGZpcnN0LmFwcGVuZENoaWxkKFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIucm9sbGJhY2tMaW5rcyh2YW5kYWwsIHRydWUpKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIG9sZGlkXG5cdFx0XHRcdGZvciAoY29uc3QgcmV2IG9mIGhpc3RMaXN0KSB7XG5cdFx0XHRcdFx0Ly8gRnJvbSByZXN0b3JlVGhpc1JldmlzaW9uLCBub24tdHJhbnNmZXJhYmxlXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHRleHQgaGFzIGJlZW4gcmV2ZGVsJ2QsIGl0IGdldHMgd3JhcHBlZCBpbiBhIHNwYW4gd2l0aCAuaGlzdG9yeS1kZWxldGVkLFxuXHRcdFx0XHRcdC8vIGFuZCBocmVmIHdpbGwgYmUgdW5kZWZpbmVkIChhbmQgdGh1cyBvbGRpZCBpcyBOYU4pXG5cdFx0XHRcdFx0Y29uc3Qge2hyZWZ9ID0gcmV2LnF1ZXJ5U2VsZWN0b3IoJy5tdy1jaGFuZ2VzbGlzdC1kYXRlJyk7XG5cdFx0XHRcdFx0Y29uc3Qgb2xkaWQgPSBOdW1iZXIucGFyc2VJbnQobXcudXRpbC5nZXRQYXJhbVZhbHVlKCdvbGRpZCcsIGhyZWYpLCAxMCk7XG5cdFx0XHRcdFx0aWYgKCFOdW1iZXIuaXNOYU4ob2xkaWQpKSB7XG5cdFx0XHRcdFx0XHRyZXYuYXBwZW5kQ2hpbGQoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5yZXN0b3JlVGhpc1JldmlzaW9uTGluayhvbGRpZCwgdHJ1ZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGlmZjogKCkgPT4ge1xuXHRcdFx0Ly8gQXV0b2ZpbGwgdXNlciB0YWxrIGxpbmtzIG9uIGRpZmZzIHdpdGggdmFuYXJ0aWNsZSBmb3IgZWFzeSB3YXJuaW5nLCBidXQgZG9uJ3QgYXV0b3dhcm5cblx0XHRcdGNvbnN0IHdhcm5Gcm9tVGFsayA9ICh4dGl0bGUpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFsa0xpbmsgPSAkKGAjbXctZGlmZi0ke3h0aXRsZX0yIC5tdy11c2VydG9vbGxpbmtzIGFgKS5maXJzdCgpO1xuXHRcdFx0XHRpZiAodGFsa0xpbmsubGVuZ3RoKSB7XG5cdFx0XHRcdFx0bGV0IGV4dHJhUGFyYW1zID0gYHZhbmFydGljbGU9JHttdy51dGlsLnJhd3VybGVuY29kZShNb3JlYml0cy5wYWdlTmFtZU5vcm0pfSZub2F1dG93YXJuPXRydWVgO1xuXHRcdFx0XHRcdC8vIGRpZmZJRHMgZm9yIHZhbmFydGljbGVyZXZpZFxuXHRcdFx0XHRcdGV4dHJhUGFyYW1zICs9ICcmdmFuYXJ0aWNsZXJldmlkPSc7XG5cdFx0XHRcdFx0ZXh0cmFQYXJhbXMgKz0geHRpdGxlID09PSAnb3RpdGxlJyA/IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk9sZElkJykgOiBtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpO1xuXHRcdFx0XHRcdGNvbnN0IGhyZWYgPSB0YWxrTGluay5hdHRyKCdocmVmJyk7XG5cdFx0XHRcdFx0aWYgKGhyZWYuaW5jbHVkZXMoJz8nKSkge1xuXHRcdFx0XHRcdFx0dGFsa0xpbmsuYXR0cignaHJlZicsIGAke2hyZWZ9JiR7ZXh0cmFQYXJhbXN9YCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhbGtMaW5rLmF0dHIoJ2hyZWYnLCBgJHtocmVmfT8ke2V4dHJhUGFyYW1zfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdC8vIE9sZGVyIHJldmlzaW9uXG5cdFx0XHR3YXJuRnJvbVRhbGsoJ290aXRsZScpOyAvLyBBZGQgcXVpY2std2FybiBsaW5rIHRvIHVzZXIgdGFsayBsaW5rXG5cdFx0XHQvLyBEb24ndCBsb2FkIGlmIHRoZXJlJ3MgYSBzaW5nbGUgcmV2aXNpb24gb3Igd2VpcmQgZGlmZiAoY3VyIG9uIGxhdGVzdClcblx0XHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0RpZmZPbGRJZCcpICYmIG13LmNvbmZpZy5nZXQoJ3dnRGlmZk9sZElkJykgIT09IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk5ld0lkJykpIHtcblx0XHRcdFx0Ly8gQWRkIGEgW3Jlc3RvcmUgdGhpcyByZXZpc2lvbl0gbGluayB0byB0aGUgb2xkZXIgcmV2aXNpb25cblx0XHRcdFx0Y29uc3Qgb2xkVGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctZGlmZi1vdGl0bGUxJykucGFyZW50Tm9kZTtcblx0XHRcdFx0Y29uc3QgcmV2ZXJ0VG9SZXZpc2lvbiA9IFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIucmVzdG9yZVRoaXNSZXZpc2lvbkxpbmsoJ3dnRGlmZk9sZElkJyk7XG5cdFx0XHRcdG9sZFRpdGxlLmluc2VydEJlZm9yZShyZXZlcnRUb1JldmlzaW9uLCBvbGRUaXRsZS5maXJzdENoaWxkKTtcblx0XHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tUmV2ZXJ0U3VtbWFyeScpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRyZXZlcnRUb1JldmlzaW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgfHwgJykpO1xuXHRcdFx0XHRcdGNvbnN0IHJldmVydHN1bW1hcnkgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRuYW1lOiAncmV2ZXJ0c3VtbWFyeScsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV2ZXJ0c3VtbWFyeS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6nlm57pgIDnkIbnlLEnLCAn6YG45pOH5Zue6YCA55CG55SxJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0JChUd2lua2xlLmdldFByZWYoJ2N1c3RvbVJldmVydFN1bW1hcnknKSkuZWFjaCgoXywgZSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV2ZXJ0c3VtbWFyeS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IGUubGFiZWwsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBlLnZhbHVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV2ZXJ0VG9SZXZpc2lvbi5hcHBlbmRDaGlsZChyZXZlcnRzdW1tYXJ5LnJlbmRlcigpLmNoaWxkTm9kZXNbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBOZXdlciByZXZpc2lvblxuXHRcdFx0d2FybkZyb21UYWxrKCdudGl0bGUnKTsgLy8gQWRkIHF1aWNrLXdhcm4gbGluayB0byB1c2VyIHRhbGsgbGlua1xuXHRcdFx0Ly8gQWRkIGVpdGhlciByZXN0b3JlIG9yIHJvbGxiYWNrIGxpbmtzIHRvIHRoZSBuZXdlciByZXZpc2lvblxuXHRcdFx0Ly8gRG9uJ3Qgc2hvdyBpZiB0aGVyZSdzIGEgc2luZ2xlIHJldmlzaW9uIG9yIHdlaXJkIGRpZmYgKHByZXYgb24gZmlyc3QpXG5cdFx0XHRpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RpZmZlcmVuY2VzLW5leHRsaW5rJykpIHtcblx0XHRcdFx0Ly8gTm90IGxhdGVzdCByZXZpc2lvbiwgYWRkIFtyZXN0b3JlIHRoaXMgcmV2aXNpb25dIGxpbmsgdG8gbmV3ZXIgcmV2aXNpb25cblx0XHRcdFx0Y29uc3QgbmV3VGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctZGlmZi1udGl0bGUxJykucGFyZW50Tm9kZTtcblx0XHRcdFx0bmV3VGl0bGUuaW5zZXJ0QmVmb3JlKFxuXHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIucmVzdG9yZVRoaXNSZXZpc2lvbkxpbmsoJ3dnRGlmZk5ld0lkJyksXG5cdFx0XHRcdFx0bmV3VGl0bGUuZmlyc3RDaGlsZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdzaG93Um9sbGJhY2tMaW5rcycpLmluY2x1ZGVzKCdkaWZmJykgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dEaWZmT2xkSWQnKSAmJlxuXHRcdFx0XHQobXcuY29uZmlnLmdldCgnd2dEaWZmT2xkSWQnKSAhPT0gbXcuY29uZmlnLmdldCgnd2dEaWZmTmV3SWQnKSB8fFxuXHRcdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkaWZmZXJlbmNlcy1wcmV2bGluaycpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIE5vcm1hbGx5IC5tdy11c2VybGluayBpcyBhIGxpbmssIGJ1dCBpZiB0aGVcblx0XHRcdFx0Ly8gdXNlcm5hbWUgaXMgaGlkZGVuLCBpdCB3aWxsIGJlIGEgc3BhbiB3aXRoXG5cdFx0XHRcdC8vIC5oaXN0b3J5LWRlbGV0ZWQgYXMgd2VsbC4gV2hlbiBhIHN5c29wIHZpZXdzIHRoZVxuXHRcdFx0XHQvLyBoaWRkZW4gY29udGVudCwgdGhlIHNwYW4gY29udGFpbnMgdGhlIHVzZXJuYW1lIGluIGFcblx0XHRcdFx0Ly8gbGluayBlbGVtZW50LCB3aGljaCB3aWxsICpqdXN0KiBoYXZlXG5cdFx0XHRcdC8vIC5tdy11c2VybGluay4gVGhlIGJlbG93IHRodXMgZmluZHMgdGhlIGZpcnN0XG5cdFx0XHRcdC8vIGluc3RhbmNlIG9mIHRoZSBjbGFzcywgd2hpY2ggaWYgaGlkZGVuIGlzIHRoZSBzcGFuXG5cdFx0XHRcdC8vIGFuZCB0aHVzIHRleHQgcmV0dXJucyB1bmRlZmluZWQuIFRlY2huaWNhbGx5LCB0aGlzXG5cdFx0XHRcdC8vIGlzIGEgcGxhY2Ugd2hlcmUgc3lzb3BzICpjb3VsZCogaGF2ZSBtb3JlXG5cdFx0XHRcdC8vIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byB0aGVtIChhcyBhYm92ZSwgdmlhXG5cdFx0XHRcdC8vICZ1bmhpZGU9MSksIHNpbmNlIHRoZSB1c2VybmFtZSB3aWxsIGJlIGF2YWlsYWJsZSBieVxuXHRcdFx0XHQvLyBjaGVja2luZyBhLm13LXVzZXJsaW5rIGluc3RlYWQsIGJ1dCByZXZlcnQoKSB3aWxsXG5cdFx0XHRcdC8vIG5lZWQgcmV3b3JraW5nIGFyb3VuZCB1c2VySGlkZGVuXG5cdFx0XHRcdGNvbnN0IHZhbmRhbCA9ICRib2R5LmZpbmQoJyNtdy1kaWZmLW50aXRsZTInKS5maW5kKCcubXctdXNlcmxpbmsnKVswXS50ZXh0O1xuXHRcdFx0XHRjb25zdCBudGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctZGlmZi1udGl0bGUxJykucGFyZW50Tm9kZTtcblx0XHRcdFx0bnRpdGxlLmluc2VydEJlZm9yZShUd2lua2xlLmZsdWZmLmxpbmtCdWlsZGVyLnJvbGxiYWNrTGlua3ModmFuZGFsKSwgbnRpdGxlLmZpcnN0Q2hpbGQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b2xkaWQ6ICgpID0+IHtcblx0XHRcdC8vIEFkZCBhIFtyZXN0b3JlIHRoaXMgcmV2aXNpb25dIGxpbmsgb24gb2xkIHJldmlzaW9uc1xuXHRcdFx0Y29uc3QgdGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctcmV2aXNpb24taW5mbycpLnBhcmVudE5vZGU7XG5cdFx0XHR0aXRsZS5pbnNlcnRCZWZvcmUoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5yZXN0b3JlVGhpc1JldmlzaW9uTGluaygnd2dSZXZpc2lvbklkJyksIHRpdGxlLmZpcnN0Q2hpbGQpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuZmx1ZmYuZGlzYWJsZUxpbmtzID0gKHBhcmVudE5vZGUpID0+IHtcblx0XHQvLyBBcnJheS5mcm9tIG5vdCBhdmFpbGFibGUgaW4gSUUxMSA6KFxuXHRcdCQocGFyZW50Tm9kZSlcblx0XHRcdC5jaGlsZHJlbigpXG5cdFx0XHQuZWFjaCgoX2ksIG5vZGUpID0+IHtcblx0XHRcdFx0bm9kZS5pbm5lckhUTUwgPSBub2RlLnRleHRDb250ZW50OyAvLyBGZWVscyBsaWtlIGNoZWF0aW5nXG5cdFx0XHRcdCQobm9kZSkuY3NzKCdmb250LXdlaWdodCcsICdub3JtYWwnKS5jc3MoJ2NvbG9yJywgJ2RhcmtncmF5Jyk7XG5cdFx0XHR9KTtcblx0fTtcblx0VHdpbmtsZS5mbHVmZi5yZXZlcnQgPSAodHlwZSwgdmFuZGFsLCByZXYsIHBhZ2UpID0+IHtcblx0XHRpZiAobXcudXRpbC5pc0lQdjZBZGRyZXNzKHZhbmRhbCkpIHtcblx0XHRcdHZhbmRhbCA9IE1vcmViaXRzLnNhbml0aXplSVB2Nih2YW5kYWwpO1xuXHRcdH1cblx0XHRjb25zdCBwYWdlbmFtZSA9IHBhZ2UgfHwgbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdGNvbnN0IHJldmlkID0gcmV2IHx8IG13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpO1xuXHRcdGxldCBzdW1tYXJ5ID0gJyc7XG5cdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdyZXZlcnRzdW1tYXJ5JylbMF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c3VtbWFyeSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdyZXZlcnRzdW1tYXJ5JylbMF0udmFsdWU7XG5cdFx0fVxuXHRcdGlmIChUd2lua2xlLmZsdWZmLnJvbGxiYWNrSW5QbGFjZSkge1xuXHRcdFx0Y29uc3Qgbm90aWZ5U3RhdHVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdFx0bXcubm90aWZ5KG5vdGlmeVN0YXR1cywge1xuXHRcdFx0XHRhdXRvSGlkZTogZmFsc2UsXG5cdFx0XHRcdHRpdGxlOiBg5Zue6YCAJHtwYWdlfWAsXG5cdFx0XHRcdHRhZzogYHR3aW5rbGVmbHVmZl8ke3Jldn1gLCAvLyBTaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGdpdmVuIGRpc2FibGVMaW5rXG5cdFx0XHR9KTtcblxuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQobm90aWZ5U3RhdHVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI213LWNvbnRlbnQtdGV4dCcpKTtcblx0XHRcdCRib2R5LmZpbmQoJyNjYXRsaW5rcycpLnJlbW92ZSgpO1xuXHRcdH1cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0dXNlcjogdmFuZGFsLFxuXHRcdFx0dXNlckhpZGRlbjogIXZhbmRhbCxcblx0XHRcdHBhZ2VuYW1lLFxuXHRcdFx0cmV2aWQsXG5cdFx0XHRzdW1tYXJ5LFxuXHRcdH07XG5cdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRwcm9wOiBbJ2luZm8nLCAncmV2aXNpb25zJ10sXG5cdFx0XHR0aXRsZXM6IHBhZ2VuYW1lLFxuXHRcdFx0aW50ZXN0YWN0aW9uczogJ2VkaXQnLFxuXHRcdFx0cnZsaW1pdDogVHdpbmtsZS5nZXRQcmVmKCdyZXZlcnRNYXhSZXZpc2lvbnMnKSxcblx0XHRcdHJ2cHJvcDogWydpZHMnLCAndGltZXN0YW1wJywgJ3VzZXInXSxcblx0XHRcdGN1cnRpbWVzdGFtcDogJycsXG5cdFx0XHRtZXRhOiAndG9rZW5zJyxcblx0XHRcdHR5cGU6ICdjc3JmJyxcblx0XHR9O1xuXHRcdGNvbnN0IHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0d2luZG93LndnVUxTKCfmipPlj5bovoPml6nkv67orqLniYjmnKzkv6Hmga8nLCAn5oqT5Y+W6LyD5pep5L+u6KiC54mI5pys6LOH6KiKJyksXG5cdFx0XHRxdWVyeSxcblx0XHRcdFR3aW5rbGUuZmx1ZmYuY2FsbGJhY2tzLm1haW5cblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHBhcmFtcztcblx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdH07XG5cdFR3aW5rbGUuZmx1ZmYucmV2ZXJ0VG9SZXZpc2lvbiA9IChvbGRyZXYpID0+IHtcblx0XHRsZXQgc3VtbWFyeSA9ICcnO1xuXHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgncmV2ZXJ0c3VtbWFyeScpWzBdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHN1bW1hcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgncmV2ZXJ0c3VtbWFyeScpWzBdLnZhbHVlO1xuXHRcdH1cblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctY29udGVudC10ZXh0JykpO1xuXHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0cHJvcDogWydpbmZvJywgJ3JldmlzaW9ucyddLFxuXHRcdFx0dGl0bGVzOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRydmxpbWl0OiAxLFxuXHRcdFx0cnZzdGFydGlkOiBvbGRyZXYsXG5cdFx0XHRydnByb3A6IFsnaWRzJywgJ3VzZXInXSxcblx0XHRcdGZvcm1hdDogJ3htbCcsXG5cdFx0XHRjdXJ0aW1lc3RhbXA6ICcnLFxuXHRcdFx0bWV0YTogJ3Rva2VucycsXG5cdFx0XHR0eXBlOiAnY3NyZicsXG5cdFx0fTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdHdpbmRvdy53Z1VMUygn5oqT5Y+W6L6D5pep5L+u6K6i54mI5pys5L+h5oGvJywgJ+aKk+WPlui8g+aXqeS/ruiogueJiOacrOizh+ioiicpLFxuXHRcdFx0cXVlcnksXG5cdFx0XHRUd2lua2xlLmZsdWZmLmNhbGxiYWNrcy50b1JldmlzaW9uXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHRyZXY6IG9sZHJldixcblx0XHRcdHN1bW1hcnksXG5cdFx0fTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdH07XG5cdFR3aW5rbGUuZmx1ZmYuY2FsbGJhY2tzID0ge1xuXHRcdHRvUmV2aXNpb246IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbERvYyA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGNvbnN0IGxhc3RyZXZpZCA9IE51bWJlci5wYXJzZUludCgkKHhtbERvYykuZmluZCgncGFnZScpLmF0dHIoJ2xhc3RyZXZpZCcpLCAxMCk7XG5cdFx0XHRjb25zdCB0b3VjaGVkID0gJCh4bWxEb2MpLmZpbmQoJ3BhZ2UnKS5hdHRyKCd0b3VjaGVkJyk7XG5cdFx0XHRjb25zdCBsb2FkdGltZXN0YW1wID0gJCh4bWxEb2MpLmZpbmQoJ2FwaScpLmF0dHIoJ2N1cnRpbWVzdGFtcCcpO1xuXHRcdFx0Y29uc3QgY3NyZnRva2VuID0gJCh4bWxEb2MpLmZpbmQoJ3Rva2VucycpLmF0dHIoJ2NzcmZ0b2tlbicpO1xuXHRcdFx0Y29uc3QgcmV2ZXJ0VG9SZXZJRCA9IE51bWJlci5wYXJzZUludCgkKHhtbERvYykuZmluZCgncmV2JykuYXR0cigncmV2aWQnKSwgMTApO1xuXHRcdFx0Y29uc3QgcmV2ZXJ0VG9Vc2VyID0gJCh4bWxEb2MpLmZpbmQoJ3JldicpLmF0dHIoJ3VzZXInKTtcblx0XHRcdGNvbnN0IHJldmVydFRvVXNlckhpZGRlbiA9IHR5cGVvZiAkKHhtbERvYykuZmluZCgncmV2JykuYXR0cigndXNlcmhpZGRlbicpID09PSAnc3RyaW5nJztcblx0XHRcdGlmIChyZXZlcnRUb1JldklEICE9PSBhcGlvYmoucGFyYW1zLnJldikge1xuXHRcdFx0XHRhcGlvYmouc3RhdGVsZW0uZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aKk+WPluWIsOeahOS/ruiuoueJiOacrOS4juivt+axgueahOS/ruiuoueJiOacrOS4jeespu+8jOWPlua2iOOAgicsXG5cdFx0XHRcdFx0XHQn5oqT5Y+W5Yiw55qE5L+u6KiC54mI5pys6IiH6KuL5rGC55qE5L+u6KiC54mI5pys5LiN56ym77yM5Y+W5raI44CCJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb3B0aW9uYWxfc3VtbWFyeSA9IHByb21wdChcblx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfor7fovpPlhaXlm57pgIDnkIbnlLHvvJonLCAn6KuL6Ly45YWl5Zue6YCA55CG55Sx77yaJyl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLFxuXHRcdFx0XHRhcGlvYmoucGFyYW1zLnN1bW1hcnlcblx0XHRcdCk7IC8vIHBhZGRlZCBvdXQgdG8gd2lkZW4gcHJvbXB0IGluIEZpcmVmb3hcblx0XHRcdGlmIChvcHRpb25hbF9zdW1tYXJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdGFwaW9iai5zdGF0ZWxlbS5lcnJvcih3aW5kb3cud2dVTFMoJ+eUseeUqOaIt+WPlua2iOOAgicsICfnlLHkvb/nlKjogIXlj5bmtojjgIInKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN1bW1hcnkgPSBUd2lua2xlLmZsdWZmLmZvcm1hdFN1bW1hcnkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5Zue6YCA5Yiw55SxJFVTRVLlgZrlh7rnmoTkv67orqLniYjmnKwnLCAn5Zue6YCA5Yiw55SxJFVTRVLlgZrlh7rnmoTkv67oqILniYjmnKwnKSArIHJldmVydFRvUmV2SUQsXG5cdFx0XHRcdHJldmVydFRvVXNlckhpZGRlbiA/IG51bGwgOiByZXZlcnRUb1VzZXIsXG5cdFx0XHRcdG9wdGlvbmFsX3N1bW1hcnlcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAnZWRpdCcsXG5cdFx0XHRcdHRpdGxlOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdHRhZ3M6IFR3aW5rbGUuY2hhbmdlVGFncyxcblx0XHRcdFx0dG9rZW46IGNzcmZ0b2tlbixcblx0XHRcdFx0dW5kbzogbGFzdHJldmlkLFxuXHRcdFx0XHR1bmRvYWZ0ZXI6IHJldmVydFRvUmV2SUQsXG5cdFx0XHRcdGJhc2V0aW1lc3RhbXA6IHRvdWNoZWQsXG5cdFx0XHRcdHN0YXJ0dGltZXN0YW1wOiBsb2FkdGltZXN0YW1wLFxuXHRcdFx0XHRtaW5vcjogVHdpbmtsZS5nZXRQcmVmKCdtYXJrUmV2ZXJ0ZWRQYWdlc0FzTWlub3InKS5pbmNsdWRlcygndG9yZXYnKSA/IHRydWUgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGJvdDogdHJ1ZSxcblx0XHRcdH07XG5cdFx0XHQvLyBIYW5kbGUgd2F0Y2hpbmcsIHBvc3NpYmxlIGV4cGlyeVxuXHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignd2F0Y2hSZXZlcnRlZFBhZ2VzJykuaW5jbHVkZXMoJ3RvcmV2JykpIHtcblx0XHRcdFx0Y29uc3Qgd2F0Y2hPckV4cGlyeSA9IFR3aW5rbGUuZ2V0UHJlZignd2F0Y2hSZXZlcnRlZEV4cGlyeScpO1xuXHRcdFx0XHRpZiAoIXdhdGNoT3JFeHBpcnkgfHwgd2F0Y2hPckV4cGlyeSA9PT0gJ25vJykge1xuXHRcdFx0XHRcdHF1ZXJ5LndhdGNobGlzdCA9ICdub2NoYW5nZSc7XG5cdFx0XHRcdH0gZWxzZSBpZiAod2F0Y2hPckV4cGlyeSA9PT0gJ2RlZmF1bHQnIHx8IHdhdGNoT3JFeHBpcnkgPT09ICdwcmVmZXJlbmNlcycpIHtcblx0XHRcdFx0XHRxdWVyeS53YXRjaGxpc3QgPSAncHJlZmVyZW5jZXMnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXJ5LndhdGNobGlzdCA9ICd3YXRjaCc7XG5cdFx0XHRcdFx0Ly8gbnVtYmVyIGFsbG93ZWQgYnV0IG5vdCB1c2VkIGluIFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB3YXRjaE9yRXhwaXJ5ID09PSAnc3RyaW5nJyAmJiB3YXRjaE9yRXhwaXJ5ICE9PSAneWVzJykge1xuXHRcdFx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ZXhwaXJ5ID0gd2F0Y2hPckV4cGlyeTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gJ+WbnumAgOWujOaIkCc7XG5cdFx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCfkv53lrZjlm57pgIDlhoXlrrknLCAn5YSy5a2Y5Zue6YCA5YWn5a65JyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRUd2lua2xlLmZsdWZmLmNhbGxiYWNrcy5jb21wbGV0ZSxcblx0XHRcdFx0YXBpb2JqLnN0YXRlbGVtXG5cdFx0XHQpO1xuXHRcdFx0eXNhcmNoaXZlc19hcGkucGFyYW1zID0gYXBpb2JqLnBhcmFtcztcblx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBvc3QoKTtcblx0XHR9LFxuXHRcdG1haW46IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbERvYyA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGlmICgkKHhtbERvYykuZmluZCgnYWN0aW9ucycpLmF0dHIoJ2VkaXQnKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGFwaW9iai5zdGF0ZWxlbS5lcnJvcihcIlVuYWJsZSB0byBlZGl0IHRoZSBwYWdlLCBpdCdzIHByb2JhYmx5IHByb3RlY3RlZC5cIik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGxhc3RyZXZpZCA9IE51bWJlci5wYXJzZUludCgkKHhtbERvYykuZmluZCgncGFnZScpLmF0dHIoJ2xhc3RyZXZpZCcpLCAxMCk7XG5cdFx0XHRjb25zdCB0b3VjaGVkID0gJCh4bWxEb2MpLmZpbmQoJ3BhZ2UnKS5hdHRyKCd0b3VjaGVkJyk7XG5cdFx0XHRjb25zdCBsb2FkdGltZXN0YW1wID0gJCh4bWxEb2MpLmZpbmQoJ2FwaScpLmF0dHIoJ2N1cnRpbWVzdGFtcCcpO1xuXHRcdFx0Y29uc3QgY3NyZnRva2VuID0gJCh4bWxEb2MpLmZpbmQoJ3Rva2VucycpLmF0dHIoJ2NzcmZ0b2tlbicpO1xuXHRcdFx0Y29uc3QgcmV2cyA9ICQoeG1sRG9jKS5maW5kKCdyZXYnKTtcblx0XHRcdGNvbnN0IHtzdGF0ZWxlbX0gPSBhcGlvYmo7XG5cdFx0XHRjb25zdCB7cGFyYW1zfSA9IGFwaW9iajtcblx0XHRcdGlmIChyZXZzLmxlbmd0aCA8IDEpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfmsqHmnInlhbblroPkv67orqLniYjmnKzvvIzml6Dms5Xlm57pgIAnLCAn5rKS5pyJ5YW25a6D5L+u6KiC54mI5pys77yM54Sh5rOV5Zue6YCAJykpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBbdG9wXSA9IHJldnM7XG5cdFx0XHRjb25zdCBsYXN0dXNlciA9IHRvcC5nZXRBdHRyaWJ1dGUoJ3VzZXInKTtcblx0XHRcdGlmIChsYXN0cmV2aWQgPCBwYXJhbXMucmV2aWQpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmVycm9yKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6ZSZ6K+vJywgJ+mMr+iqpCcpLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0J+S7juacjeWKoeWZqOiOt+WPlueahOacgOaWsOS/ruiuoueJiOacrElEICcsXG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLmh0bWxOb2RlKCdzdHJvbmcnLCBsYXN0cmV2aWQpLFxuXHRcdFx0XHRcdFx0XHQnIOWwj+S6juebruWJjeaJgOaYvuekuueahOS/ruiuoueJiOacrElE44CC6L+Z5Y+v6IO95oSP5ZGz552A5b2T5YmN5L+u6K6i54mI5pys5bey6KKr5Yig6Zmk44CB5pyN5Yqh5Zmo5bu26L+f44CB5oiW5oqT5Y+W5Yiw5LqG5Z2P5o6J55qE5L+h5oGv44CC5Y+W5raI44CCJyxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdCflvp7kvLrmnI3lmajlj5blvpfnmoTmnIDmlrDkv67oqILniYjmnKxJRCAnLFxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgbGFzdHJldmlkKSxcblx0XHRcdFx0XHRcdFx0JyDlsI/mlrznm67liY3miYDpoa/npLrnmoTkv67oqILniYjmnKxJROOAgumAmeWPr+iDveaEj+WRs+iRl+eVtuWJjeS/ruiogueJiOacrOW3suiiq+WIqumZpOOAgeS8uuacjeWZqOW7tumBsuOAgeaIluaTt+WPluWIsOS6huWjnuaOieeahOizh+ioiuOAguWPlua2iOOAgicsXG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBVc2VkIGZvciB1c2VyLWZhY2luZyBhbGVydHMsIG1lc3NhZ2VzLCBldGMuLCBub3QgZWRpdHMgb3Igc3VtbWFyaWVzXG5cdFx0XHRsZXQgdXNlck5vcm0gPSBwYXJhbXMudXNlciB8fCBUd2lua2xlLmZsdWZmLmhpZGRlbk5hbWU7XG5cdFx0XHRsZXQgaW5kZXggPSAxO1xuXHRcdFx0aWYgKHBhcmFtcy5yZXZpZCA9PT0gbGFzdHJldmlkKSB7XG5cdFx0XHRcdC8vIEV4cGVjdGVkIHJldmlzaW9uIGlzIHRoZSBzYW1lLCBzbyB0aGUgdXNlcnMgbXVzdCBtYXRjaDtcblx0XHRcdFx0Ly8gdGhpcyBhbGxvd3Mgc3lzb3BzIHRvIGtub3cgd2hldGhlciB0aGUgdXNlcnMgYXJlIHRoZSBzYW1lXG5cdFx0XHRcdHBhcmFtcy51c2VyID0gbGFzdHVzZXI7XG5cdFx0XHRcdHVzZXJOb3JtID0gcGFyYW1zLnVzZXIgfHwgVHdpbmtsZS5mbHVmZi5oaWRkZW5OYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0J+itpuWRiicsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHQn5pyA5paw5L+u6K6i54mI5pysICcsXG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLmh0bWxOb2RlKCdzdHJvbmcnLCBsYXN0cmV2aWQpLFxuXHRcdFx0XHRcdFx0XHQnIOS4juaIkeS7rOeahOS/ruiuoueJiOacrCAnLFxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLnJldmlkKSxcblx0XHRcdFx0XHRcdFx0J+S4jeWQjCcsXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHQn5pyA5paw5L+u6KiC54mI5pysICcsXG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLmh0bWxOb2RlKCdzdHJvbmcnLCBsYXN0cmV2aWQpLFxuXHRcdFx0XHRcdFx0XHQnIOiIh+aIkeWAkeeahOS/ruiogueJiOacrCAnLFxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLnJldmlkKSxcblx0XHRcdFx0XHRcdFx0JyDkuI3lkIwnLFxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGxhc3R1c2VyID09PSBwYXJhbXMudXNlcikge1xuXHRcdFx0XHRcdHN3aXRjaCAocGFyYW1zLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ3ZhbmQnOlxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyh3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSwgW1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pyA5paw5L+u6K6i54mI5pys55SxICcsICfmnIDmlrDkv67oqILniYjmnKznlLEgJyksXG5cdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQnIOWBmuWHuu+8jOWboOaIkeS7rOWBh+WumuegtOWdj++8jOe7p+e7reWbnumAgOaTjeS9nOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHQnIOWBmuWHuu+8jOWboOaIkeWAkeWBh+WumuegtOWjnu+8jOe5vOe6jOWbnumAgOaTjeS9nOOAgidcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybign5o+Q56S6JywgW1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pyA5paw5L+u6K6i54mI5pys55SxICcsICfmnIDmlrDkv67oqILniYjmnKznlLEgJyksXG5cdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDlgZrlh7rvvIzkvYbmiJHku6zov5jmmK/kuI3lm57pgIDkuobjgIInLCAnIOWBmuWHuu+8jOS9huaIkeWAkemChOaYr+S4jeWbnumAgOS6huOAgicpLFxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRwYXJhbXMudHlwZSA9PT0gJ3ZhbmQnICYmIC8vIE9rYXkgdG8gdGVzdCBvbiB1c2VyIHNpbmNlIGl0IHdpbGwgZWl0aGVyIGZhaWwgb3Igc3lzb3Agd2lsbCBjb3JyZWN0bHkgYWNjZXNzIGl0XG5cdFx0XHRcdFx0Ly8gQmVzaWRlcywgbm9uZSBvZiB0aGUgdHJ1c3RlZCBib3RzIGFyZSBnb2luZyB0byBiZSByZXZkZWwnZFxuXHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYudHJ1c3RlZEJvdHMuaW5jbHVkZXModG9wLmdldEF0dHJpYnV0ZSgndXNlcicpKSAmJlxuXHRcdFx0XHRcdHJldnMubGVuZ3RoID4gMSAmJlxuXHRcdFx0XHRcdHJldnNbMV0uZ2V0QXR0cmlidXRlKCdyZXZpZCcpID09PSBwYXJhbXMucmV2aWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdCfmnIDmlrDkv67orqLniYjmnKznlLEgJyxcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgbGFzdHVzZXIpLFxuXHRcdFx0XHRcdFx0XHRcdCfvvIzkuIDkuKrlj6/kv6HnmoTmnLrlmajkurrlgZrlh7rvvIzkvYbkuYvliY3nmoTniYjmnKzooqvorqTkuLrmmK/noLTlnY/vvIznu6fnu63lm57pgIDmk43kvZzjgIInLFxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0J+acgOaWsOS/ruiogueJiOacrOeUsSAnLFxuXHRcdFx0XHRcdFx0XHRcdE1vcmViaXRzLmh0bWxOb2RlKCdzdHJvbmcnLCBsYXN0dXNlciksXG5cdFx0XHRcdFx0XHRcdFx0J++8jOS4gOWAi+WPr+S/oeeahOapn+WZqOS6uuWBmuWHuu+8jOS9huS5i+WJjeeahOeJiOacrOiiq+iqjeeCuuaYr+egtOWjnu+8jOe5vOe6jOWbnumAgOaTjeS9nOOAgicsXG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGluZGV4ID0gMjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3IoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+mUmeivrycsICfpjK/oqqQnKSxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdCfmnIDmlrDkv67orqLniYjmnKznlLEgJyxcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgbGFzdHVzZXIpLFxuXHRcdFx0XHRcdFx0XHRcdCcg5YGa5Ye677yM5omA5Lul6L+Z5Liq5L+u6K6i54mI5pys5Y+v6IO95bey57uP6KKr5Zue6YCA5LqG77yM5Y+W5raI5Zue6YCA5pON5L2c44CCJyxcblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdCfmnIDmlrDkv67oqILniYjmnKznlLEgJyxcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgbGFzdHVzZXIpLFxuXHRcdFx0XHRcdFx0XHRcdCcg5YGa5Ye677yM5omA5Lul6YCZ5YCL5L+u6KiC54mI5pys5Y+v6IO95bey57aT6KKr5Zue6YCA5LqG77yM5Y+W5raI5Zue6YCA5pON5L2c44CCJyxcblx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoVHdpbmtsZS5mbHVmZi50cnVzdGVkQm90cy5pbmNsdWRlcyhwYXJhbXMudXNlcikpIHtcblx0XHRcdFx0c3dpdGNoIChwYXJhbXMudHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgJ3ZhbmQnOlxuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8od2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksIFtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCflsIblr7kgJywgJ+Wwh+WwjSAnKSxcblx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCcg5omn6KGM56C05Z2P5Zue6YCA77yM6L+Z5piv5LiA5Liq5Y+v5L+h55qE5py65Zmo5Lq677yM5oiR5Lus5YGH5a6a5oKo6KaB5Zue6YCA5YmN5LiA5Liq5L+u6K6i54mI5pys44CCJyxcblx0XHRcdFx0XHRcdFx0XHQnIOWft+ihjOegtOWjnuWbnumAgO+8jOmAmeaYr+S4gOWAi+WPr+S/oeeahOapn+WZqOS6uu+8jOaIkeWAkeWBh+WumuaCqOimgeWbnumAgOWJjeS4gOWAi+S/ruiogueJiOacrOOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0aW5kZXggPSAyO1xuXHRcdFx0XHRcdFx0cGFyYW1zLnVzZXIgPSByZXZzWzFdLmdldEF0dHJpYnV0ZSgndXNlcicpO1xuXHRcdFx0XHRcdFx0cGFyYW1zLnVzZXJIaWRkZW4gPSByZXZzWzFdLmdldEF0dHJpYnV0ZSgndXNlcmhpZGRlbicpID09PSAnJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8qIGNhc2UgJ25vcm0nOiAqL1xuXHRcdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250ID0gY29uZmlybShcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpgInmi6nkuobluLjop4Tlm57pgIDvvIzkvYbmnIDmlrDkv67mlLnmmK/nlLHkuIDkuKrlj6/kv6HnmoTmnLrlmajkurrvvIgnLFxuXHRcdFx0XHRcdFx0XHRcdCfpgbjmk4fkuobluLjopo/lm57pgIDvvIzkvYbmnIDmlrDkv67mlLnmmK/nlLHkuIDlgIvlj6/kv6HnmoTmqZ/lmajkurrvvIgnXG5cdFx0XHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0XHRcdHVzZXJOb3JtICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn77yJ5YGa5Ye655qE44CC56Gu5a6a5Lul5Zue6YCA5YmN5LiA5Liq5L+u6K6i54mI5pys77yM5Y+W5raI5Lul5Zue6YCA5py65Zmo5Lq655qE5L+u5pS5Jyxcblx0XHRcdFx0XHRcdFx0XHRcdCfvvInlgZrlh7rnmoTjgILnorrlrprku6Xlm57pgIDliY3kuIDlgIvkv67oqILniYjmnKzvvIzlj5bmtojku6Xlm57pgIDmqZ/lmajkurrnmoTkv67mlLknXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGlmIChjb250KSB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbmZvKHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLCBbXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCflsIblr7kgJywgJ+Wwh+WwjSAnKSxcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgdXNlck5vcm0pLFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCcg5omn6KGM5bi46KeE5Zue6YCA77yM6L+Z5piv5LiA5Liq5Y+v5L+h55qE5py65Zmo5Lq677yM5Z+65LqO56Gu6K6k77yM5oiR5Lus5bCG5Zue6YCA5YmN5LiA5Liq5L+u6K6i54mI5pys44CCJyxcblx0XHRcdFx0XHRcdFx0XHRcdCcg5Z+36KGM5bi46KaP5Zue6YCA77yM6YCZ5piv5LiA5YCL5Y+v5L+h55qE5qmf5Zmo5Lq677yM5Z+65pa856K66KqN77yM5oiR5YCR5bCH5Zue6YCA5YmN5LiA5YCL5L+u6KiC54mI5pys44CCJ1xuXHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0XHRpbmRleCA9IDI7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcy51c2VyID0gcmV2c1sxXS5nZXRBdHRyaWJ1dGUoJ3VzZXInKTtcblx0XHRcdFx0XHRcdFx0cGFyYW1zLnVzZXJIaWRkZW4gPSByZXZzWzFdLmdldEF0dHJpYnV0ZSgndXNlcmhpZGRlbicpID09PSAnJztcblx0XHRcdFx0XHRcdFx0dXNlck5vcm0gPSBwYXJhbXMudXNlciB8fCBUd2lua2xlLmZsdWZmLmhpZGRlbk5hbWU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybign5o+Q56S6JywgW1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG5a+5ICcsICflsIflsI0gJyksXG5cdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQnIOaJp+ihjOW4uOinhOWbnumAgO+8jOi/meaYr+S4gOS4quWPr+S/oeeahOacuuWZqOS6uu+8jOWfuuS6juehruiupO+8jOaIkeS7rOS7jeWwhuWbnumAgOi/meS4quS/ruiuoueJiOacrOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHQnIOWft+ihjOW4uOimj+WbnumAgO+8jOmAmeaYr+S4gOWAi+WPr+S/oeeahOapn+WZqOS6uu+8jOWfuuaWvOeiuuiqje+8jOaIkeWAkeS7jeWwh+WbnumAgOmAmeWAi+S/ruiogueJiOacrOOAgidcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cdFx0XHRsZXQgY291bnQgPSAwO1xuXHRcdFx0Zm9yIChsZXQgaSA9IGluZGV4OyBpIDwgcmV2cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHQrK2NvdW50O1xuXHRcdFx0XHRpZiAocmV2c1tpXS5nZXRBdHRyaWJ1dGUoJ3VzZXInKSAhPT0gcGFyYW1zLnVzZXIpIHtcblx0XHRcdFx0XHRmb3VuZCA9IGk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghZm91bmQpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3IoW1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pyq5om+5Yiw5LmL5YmN55qE5L+u6K6i54mI5pys77yM5Y+v6IO9ICcsICfmnKrmib7liLDkuYvliY3nmoTkv67oqILniYjmnKzvvIzlj6/og70gJyksXG5cdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQnIOaYr+WUr+S4gOi0oeeMruiAhe+8jOaIlui/meS4queUqOaIt+i/nue7reWBmuWHuuS6hui2hei/hyAnLFxuXHRcdFx0XHRcdFx0JyDmmK/llK/kuIDosqLnjbvogIXvvIzmiJbpgJnlgIvnlKjmiLbpgKPnuozlgZrlh7rkuobotoXpgY4gJ1xuXHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0bXcubGFuZ3VhZ2UuY29udmVydE51bWJlcihUd2lua2xlLmdldFByZWYoJ3JldmVydE1heFJldmlzaW9ucycpKSArXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDmrKHnvJbovpHjgIInLCAnIOasoee3qOi8r+OAgicpLFxuXHRcdFx0XHRdKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjb3VudCkge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfplJnor68nLCAn6Yyv6KqkJyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aIkeS7rOWwhuimgeWbnumAgDDkuKrkv67orqLniYjmnKzvvIzov5nmsqHmnInmhI/kuYnvvIzmiYDku6Xlj5bmtojlm57pgIDmk43kvZzjgILlj6/og73mmK/lm6DkuLrov5nkuKrkv67orqLniYjmnKzlt7Lnu4/ooqvlm57pgIDvvIzkvYbkv67orqLniYjmnKxJROS7jeaYr+S4gOagt+eahOOAgicsXG5cdFx0XHRcdFx0XHQn5oiR5YCR5bCH6KaB5Zue6YCAMOWAi+S/ruiogueJiOacrO+8jOmAmeaykuacieaEj+e+qe+8jOaJgOS7peWPlua2iOWbnumAgOaTjeS9nOOAguWPr+iDveaYr+WboOeCuumAmeWAi+S/ruiogueJiOacrOW3sue2k+iiq+WbnumAgO+8jOS9huS/ruiogueJiOacrElE5LuN5piv5LiA5qij55qE44CCJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZ29vZF9yZXZpc2lvbiA9IHJldnNbZm91bmRdO1xuXHRcdFx0bGV0IHVzZXJIYXNBbHJlYWR5Q29uZmlybWVkQWN0aW9uID0gZmFsc2U7XG5cdFx0XHRpZiAocGFyYW1zLnR5cGUgIT09ICd2YW5kJyAmJiBjb3VudCA+IDEpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdFx0dXNlck5vcm0gK1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDov57nu63lgZrlh7rkuoYgJywgJyDpgKPnuozlgZrlh7rkuoYgJykgK1xuXHRcdFx0XHRcdFx0XHRtdy5sYW5ndWFnZS5jb252ZXJ0TnVtYmVyKGNvdW50KSArXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOasoee8lui+ke+8jOaYr+WQpuimgeWFqOmDqOWbnumAgO+8nycsICcg5qyh57eo6Lyv77yM5piv5ZCm6KaB5YWo6YOo5Zue6YCA77yfJylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbmZvKCfmj5DnpLonLCB3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nCcsICfkvb/nlKjogIXlj5bmtojmk43kvZwnKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHVzZXJIYXNBbHJlYWR5Q29uZmlybWVkQWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhcmFtcy5jb3VudCA9IGNvdW50O1xuXHRcdFx0cGFyYW1zLmdvb2RpZCA9IGdvb2RfcmV2aXNpb24uZ2V0QXR0cmlidXRlKCdyZXZpZCcpO1xuXHRcdFx0cGFyYW1zLmdvb2R1c2VyID0gZ29vZF9yZXZpc2lvbi5nZXRBdHRyaWJ1dGUoJ3VzZXInKTtcblx0XHRcdHBhcmFtcy5nb29kdXNlckhpZGRlbiA9IGdvb2RfcmV2aXNpb24uZ2V0QXR0cmlidXRlKCd1c2VyaGlkZGVuJykgPT09ICcnO1xuXHRcdFx0c3RhdGVsZW0uc3RhdHVzKFtcblx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIG13Lmxhbmd1YWdlLmNvbnZlcnROdW1iZXIoY291bnQpKSxcblx0XHRcdFx0d2luZG93LndnVUxTKCcg5Liq5L+u6K6i54mI5pys5LmL5YmN55SxICcsICcg5YCL5L+u6KiC54mI5pys5LmL5YmN55SxICcpLFxuXHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLmdvb2R1c2VySGlkZGVuID8gVHdpbmtsZS5mbHVmZi5oaWRkZW5OYW1lIDogcGFyYW1zLmdvb2R1c2VyKSxcblx0XHRcdFx0d2luZG93LndnVUxTKCcg5YGa5Ye655qE5L+u6K6i54mI5pysICcsICcg5YGa5Ye655qE5L+u6KiC54mI5pysICcpLFxuXHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLmdvb2RpZCksXG5cdFx0XHRdKTtcblx0XHRcdGxldCBzdW1tYXJ5O1xuXHRcdFx0bGV0IGV4dHJhX3N1bW1hcnk7XG5cdFx0XHRzd2l0Y2ggKHBhcmFtcy50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ3ZhbmQnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSBUd2lua2xlLmZsdWZmLmZvcm1hdFN1bW1hcnkoXG5cdFx0XHRcdFx0XHRg5Zue6YCAJFVTRVLlgZrlh7rnmoQke3BhcmFtcy5jb3VudH0ke3dpbmRvdy53Z1VMUygn5qyh57yW6L6R77yM5Yiw55SxJywgJ+asoee3qOi8r++8jOWIsOeUsScpfSR7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcy5nb29kdXNlckhpZGRlbiA/IFR3aW5rbGUuZmx1ZmYuaGlkZGVuTmFtZSA6IHBhcmFtcy5nb29kdXNlclxuXHRcdFx0XHRcdFx0fSR7d2luZG93LndnVUxTKCflgZrlh7rnmoTmnIDlkI7kv67orqLniYjmnKwgJywgJ+WBmuWHuueahOacgOW+jOS/ruiogueJiOacrCAnKX1gLFxuXHRcdFx0XHRcdFx0cGFyYW1zLnVzZXJIaWRkZW4gPyBudWxsIDogcGFyYW1zLnVzZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvKiBjYXNlICdub3JtJzogKi9cblx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGlmIChUd2lua2xlLmdldFByZWYoJ29mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQnKSkge1xuXHRcdFx0XHRcdFx0ZXh0cmFfc3VtbWFyeSA9IHByb21wdChcblx0XHRcdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCflj6/pgInnmoTnvJbovpHmkZjopoHvvJonLCAn5Y+v6YG455qE57eo6Lyv5pGY6KaB77yaJyl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCxcblx0XHRcdFx0XHRcdFx0cGFyYW1zLnN1bW1hcnlcblx0XHRcdFx0XHRcdCk7IC8vIHBhZGRlZCBvdXQgdG8gd2lkZW4gcHJvbXB0IGluIEZpcmVmb3hcblx0XHRcdFx0XHRcdGlmIChleHRyYV9zdW1tYXJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn55So5oi35Y+W5raI5pON5L2c44CCJywgJ+S9v+eUqOiAheWPlua2iOaTjeS9nOOAgicpKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dXNlckhhc0FscmVhZHlDb25maXJtZWRBY3Rpb24gPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdW1tYXJ5ID0gVHdpbmtsZS5mbHVmZi5mb3JtYXRTdW1tYXJ5KFxuXHRcdFx0XHRcdFx0YOWbnumAgCRVU0VS5YGa5Ye655qEJHtwYXJhbXMuY291bnR9JHt3aW5kb3cud2dVTFMoJ+asoee8lui+kScsICfmrKHnt6jovK8nKX1gLFxuXHRcdFx0XHRcdFx0cGFyYW1zLnVzZXJIaWRkZW4gPyBudWxsIDogcGFyYW1zLnVzZXIsXG5cdFx0XHRcdFx0XHRleHRyYV9zdW1tYXJ5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdjb25maXJtT25GbHVmZicpICYmXG5cdFx0XHRcdCF1c2VySGFzQWxyZWFkeUNvbmZpcm1lZEFjdGlvbiAmJlxuXHRcdFx0XHQhY29uZmlybSh3aW5kb3cud2dVTFMoJ+WbnumAgOmhtemdou+8muaCqOehruWumuWQl++8nycsICflm57pgIDpoIHpnaLvvJrmgqjnorrlrprll47vvJ8nKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzdGF0ZWxlbS5lcnJvcih3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nOOAgicsICfkvb/nlKjogIXlj5bmtojmk43kvZzjgIInKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIERlY2lkZSB3aGV0aGVyIHRvIG5vdGlmeSB0aGUgdXNlciBvbiBzdWNjZXNzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFUd2lua2xlLmZsdWZmLnNraXBUYWxrICYmXG5cdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZignb3BlblRhbGtQYWdlJykuaW5jbHVkZXMocGFyYW1zLnR5cGUpICYmXG5cdFx0XHRcdCFwYXJhbXMudXNlckhpZGRlbiAmJlxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgIT09IHBhcmFtcy51c2VyXG5cdFx0XHQpIHtcblx0XHRcdFx0cGFyYW1zLm5vdGlmeVVzZXIgPSB0cnVlO1xuXHRcdFx0XHQvLyBQYXNzIGFsb25nIHRvIHRoZSB3YXJuIG1vZHVsZVxuXHRcdFx0XHRwYXJhbXMudmFudGltZXN0YW1wID0gdG9wLmdldEF0dHJpYnV0ZSgndGltZXN0YW1wJyk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAnZWRpdCcsXG5cdFx0XHRcdHRpdGxlOiBwYXJhbXMucGFnZW5hbWUsXG5cdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdHRhZ3M6IFR3aW5rbGUuY2hhbmdlVGFncyxcblx0XHRcdFx0dG9rZW46IGNzcmZ0b2tlbixcblx0XHRcdFx0dW5kbzogbGFzdHJldmlkLFxuXHRcdFx0XHR1bmRvYWZ0ZXI6IHBhcmFtcy5nb29kaWQsXG5cdFx0XHRcdGJhc2V0aW1lc3RhbXA6IHRvdWNoZWQsXG5cdFx0XHRcdHN0YXJ0dGltZXN0YW1wOiBsb2FkdGltZXN0YW1wLFxuXHRcdFx0XHRtaW5vcjogVHdpbmtsZS5nZXRQcmVmKCdtYXJrUmV2ZXJ0ZWRQYWdlc0FzTWlub3InKS5pbmNsdWRlcyhwYXJhbXMudHlwZSkgPyB0cnVlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRib3Q6IHRydWUsXG5cdFx0XHR9O1xuXHRcdFx0Ly8gSGFuZGxlIHdhdGNoaW5nLCBwb3NzaWJsZSBleHBpcnlcblx0XHRcdGlmIChUd2lua2xlLmdldFByZWYoJ3dhdGNoUmV2ZXJ0ZWRQYWdlcycpLmluY2x1ZGVzKHBhcmFtcy50eXBlKSkge1xuXHRcdFx0XHRjb25zdCB3YXRjaE9yRXhwaXJ5ID0gVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFJldmVydGVkRXhwaXJ5Jyk7XG5cdFx0XHRcdGlmICghd2F0Y2hPckV4cGlyeSB8fCB3YXRjaE9yRXhwaXJ5ID09PSAnbm8nKSB7XG5cdFx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ID0gJ25vY2hhbmdlJztcblx0XHRcdFx0fSBlbHNlIGlmICh3YXRjaE9yRXhwaXJ5ID09PSAnZGVmYXVsdCcgfHwgd2F0Y2hPckV4cGlyeSA9PT0gJ3ByZWZlcmVuY2VzJykge1xuXHRcdFx0XHRcdHF1ZXJ5LndhdGNobGlzdCA9ICdwcmVmZXJlbmNlcyc7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ID0gJ3dhdGNoJztcblx0XHRcdFx0XHQvLyBudW1iZXIgYWxsb3dlZCBidXQgbm90IHVzZWQgaW4gVHdpbmtsZS5jb25maWcud2F0Y2hsaXN0RW51bXNcblx0XHRcdFx0XHRpZiAodHlwZW9mIHdhdGNoT3JFeHBpcnkgPT09ICdzdHJpbmcnICYmIHdhdGNoT3JFeHBpcnkgIT09ICd5ZXMnKSB7XG5cdFx0XHRcdFx0XHRxdWVyeS53YXRjaGxpc3RleHBpcnkgPSB3YXRjaE9yRXhwaXJ5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFUd2lua2xlLmZsdWZmLnJvbGxiYWNrSW5QbGFjZSkge1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHBhcmFtcy5wYWdlbmFtZTtcblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9ICflm57pgIDlrozmiJAnO1xuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+d5a2Y5Zue6YCA5YaF5a65JywgJ+WEsuWtmOWbnumAgOWFp+WuuScpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0VHdpbmtsZS5mbHVmZi5jYWxsYmFja3MuY29tcGxldGUsXG5cdFx0XHRcdHN0YXRlbGVtXG5cdFx0XHQpO1xuXHRcdFx0eXNhcmNoaXZlc19hcGkucGFyYW1zID0gcGFyYW1zO1xuXHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdH0sXG5cdFx0Y29tcGxldGU6IChhcGlvYmopID0+IHtcblx0XHRcdC8vIFRPRE8gTW9zdCBvZiB0aGlzIGlzIGNvcHktcGFzdGVkIGZyb20gTW9yZWJpdHMud2lraS5wYWdlI2ZuU2F2ZVN1Y2Nlc3MuIFVuaWZ5IGl0XG5cdFx0XHRjb25zdCB4bWwgPSBhcGlvYmouZ2V0WE1MKCk7XG5cdFx0XHRjb25zdCAkZWRpdCA9ICQoeG1sKS5maW5kKCdlZGl0Jyk7XG5cdFx0XHRpZiAoJCh4bWwpLmZpbmQoJ2NhcHRjaGEnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGFwaW9iai5zdGF0ZWxlbS5lcnJvcihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S4jeiDveWbnumAgO+8jOWboOacjeWKoeWZqOimgeaxguaCqOi+k+WFpemqjOivgeeggeOAgicsICfkuI3og73lm57pgIDvvIzlm6DkvLrmnI3lmajopoHmsYLmgqjovLjlhaXpqZforYnnorzjgIInKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICgkZWRpdC5hdHRyKCdub2NoYW5nZScpID09PSAnJykge1xuXHRcdFx0XHRhcGlvYmouc3RhdGVsZW0uZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+imgeWbnumAgOWIsOeahOeJiOacrOS4juW9k+WJjeeJiOacrOebuOWQjO+8jOayoeS7gOS5iOimgeWBmueahCcsXG5cdFx0XHRcdFx0XHQn6KaB5Zue6YCA5Yiw55qE54mI5pys6IiH55uu5YmN54mI5pys55u45ZCM77yM5rKS5LuA6bq86KaB5YGa55qEJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFwaW9iai5zdGF0ZWxlbS5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0Y29uc3Qge3BhcmFtc30gPSBhcGlvYmo7XG5cdFx0XHRcdGlmIChwYXJhbXMubm90aWZ5VXNlciAmJiAhcGFyYW1zLnVzZXJIaWRkZW4pIHtcblx0XHRcdFx0XHQvLyBub3RpZnlVc2VyIG9ubHkgZnJvbSBtYWluLCBub3QgZnJvbSB0b1JldmlzaW9uXG5cdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8od2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksIFtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5byA5ZCv55So5oi3ICcsICfplovllZ/kvb/nlKjogIUgJyksXG5cdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLnVzZXIpLFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCcg55qE6K6o6K666aG1JywgJyDnmoToqI7oq5bpoIEnKSxcblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRjb25zdCB3aW5kb3dRdWVyeSA9IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBgVXNlciB0YWxrOiR7cGFyYW1zLnVzZXJ9YCxcblx0XHRcdFx0XHRcdGFjdGlvbjogJ2VkaXQnLFxuXHRcdFx0XHRcdFx0cHJldmlldzogJ3llcycsXG5cdFx0XHRcdFx0XHR2YW5hcnRpY2xlOiBwYXJhbXMucGFnZW5hbWUucmVwbGFjZSgvXy9nLCAnICcpLFxuXHRcdFx0XHRcdFx0dmFuYXJ0aWNsZXJldmlkOiBwYXJhbXMucmV2aWQsXG5cdFx0XHRcdFx0XHR2YW50aW1lc3RhbXA6IHBhcmFtcy52YW50aW1lc3RhbXAsXG5cdFx0XHRcdFx0XHR2YW5hcnRpY2xlZ29vZHJldmlkOiBwYXJhbXMuZ29vZGlkLFxuXHRcdFx0XHRcdFx0dHlwZTogcGFyYW1zLnR5cGUsXG5cdFx0XHRcdFx0XHRjb3VudDogcGFyYW1zLmNvdW50LFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0c3dpdGNoIChUd2lua2xlLmdldFByZWYoJ3VzZXJUYWxrUGFnZU1vZGUnKSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAndGFiJzpcblx0XHRcdFx0XHRcdFx0d2luZG93Lm9wZW4obXcudXRpbC5nZXRVcmwoJycsIHdpbmRvd1F1ZXJ5KSwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYmxhbmsnOlxuXHRcdFx0XHRcdFx0XHR3aW5kb3cub3Blbihcblx0XHRcdFx0XHRcdFx0XHRtdy51dGlsLmdldFVybCgnJywgd2luZG93UXVlcnkpLFxuXHRcdFx0XHRcdFx0XHRcdCdfYmxhbmsnLFxuXHRcdFx0XHRcdFx0XHRcdCdub29wZW5lcixub3JlZmVycmVyLGxvY2F0aW9uPW5vLHRvb2xiYXI9bm8sc3RhdHVzPW5vLGRpcmVjdG9yaWVzPW5vLHNjcm9sbGJhcnM9eWVzLHdpZHRoPTEyMDAsaGVpZ2h0PTgwMCdcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvKiBjYXNlICd3aW5kb3cnOiAqL1xuXHRcdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0d2luZG93Lm9wZW4oXG5cdFx0XHRcdFx0XHRcdFx0bXcudXRpbC5nZXRVcmwoJycsIHdpbmRvd1F1ZXJ5KSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubmFtZSA9PT0gJ3R3aW5rbGV3YXJud2luZG93JyA/ICdfYmxhbmsnIDogJ3R3aW5rbGV3YXJud2luZG93Jyxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubmFtZSA9PT0gJ3R3aW5rbGV3YXJud2luZG93J1xuXHRcdFx0XHRcdFx0XHRcdFx0PyAnbm9vcGVuZXIsbm9yZWZlcnJlciwnXG5cdFx0XHRcdFx0XHRcdFx0XHQ6ICcnICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbG9jYXRpb249bm8sdG9vbGJhcj1ubyxzdGF0dXM9bm8sZGlyZWN0b3JpZXM9bm8sc2Nyb2xsYmFycz15ZXMsd2lkdGg9MTIwMCxoZWlnaHQ9ODAwJ1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHR9O1xuXHQvLyBJZiBidWlsdEluU3RyaW5nIGNvbnRhaW5zIHRoZSBzdHJpbmcgXCIkVVNFUlwiLCBpdCB3aWxsIGJlIHJlcGxhY2VkXG5cdC8vIGJ5IGFuIGFwcHJvcHJpYXRlIHVzZXIgbGluayBpZiBhIHVzZXIgbmFtZSBpcyBwcm92aWRlZFxuXHRUd2lua2xlLmZsdWZmLmZvcm1hdFN1bW1hcnkgPSAoYnVpbHRJblN0cmluZywgdXNlck5hbWUsIGN1c3RvbVN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBidWlsdEluU3RyaW5nO1xuXHRcdC8vIGFwcGVuZCB1c2VyJ3MgY3VzdG9tIHJlYXNvblxuXHRcdGlmIChjdXN0b21TdHJpbmcpIHtcblx0XHRcdHJlc3VsdCArPSBg77yaJHtNb3JlYml0cy5zdHJpbmcudG9VcHBlckNhc2VGaXJzdENoYXIoY3VzdG9tU3RyaW5nKX1gO1xuXHRcdH1cblx0XHQvLyBmaW5kIG51bWJlciBvZiBVVEYtOCBieXRlcyB0aGUgcmVzdWx0aW5nIHN0cmluZyB0YWtlcyB1cCwgYW5kIHBvc3NpYmx5IGFkZFxuXHRcdC8vIGEgY29udHJpYnV0aW9ucyBvciBjb250cmlidXRpb25zK3RhbGsgbGluayBpZiBpdCBkb2Vzbid0IHB1c2ggdGhlIGVkaXQgc3VtbWFyeVxuXHRcdC8vIG92ZXIgdGhlIDQ5OS1ieXRlIGxpbWl0XG5cdFx0aWYgKC9cXCRVU0VSLy50ZXN0KGJ1aWx0SW5TdHJpbmcpKSB7XG5cdFx0XHRpZiAodXNlck5hbWUpIHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0TGVuID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHJlc3VsdC5yZXBsYWNlKCckVVNFUicsICcnKSkpLmxlbmd0aDtcblx0XHRcdFx0Y29uc3QgY29udHJpYnNMaW5rID0gYFtbU3BlY2lhbDpDb250cmlidXRpb25zLyR7dXNlck5hbWV9fCR7dXNlck5hbWV9XV1gO1xuXHRcdFx0XHRjb25zdCBjb250cmlic0xlbiA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb250cmlic0xpbmspKS5sZW5ndGg7XG5cdFx0XHRcdGlmIChyZXN1bHRMZW4gKyBjb250cmlic0xlbiA8PSA0OTkpIHtcblx0XHRcdFx0XHRjb25zdCB0YWxrTGluayA9IGDvvIhbW1VzZXIgdGFsazoke3VzZXJOYW1lfSR7d2luZG93LndnVUxTKCd86K6o6K66XV3vvIknLCAnfOiojuirll1d77yJJyl9YDtcblx0XHRcdFx0XHRpZiAocmVzdWx0TGVuICsgY29udHJpYnNMZW4gKyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGFsa0xpbmspKS5sZW5ndGggPD0gNDk5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBNb3JlYml0cy5zdHJpbmcuc2FmZVJlcGxhY2UocmVzdWx0LCAnJFVTRVInLCBjb250cmlic0xpbmsgKyB0YWxrTGluayk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IE1vcmViaXRzLnN0cmluZy5zYWZlUmVwbGFjZShyZXN1bHQsICckVVNFUicsIGNvbnRyaWJzTGluayk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdCA9IE1vcmViaXRzLnN0cmluZy5zYWZlUmVwbGFjZShyZXN1bHQsICckVVNFUicsIHVzZXJOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID0gTW9yZWJpdHMuc3RyaW5nLnNhZmVSZXBsYWNlKHJlc3VsdCwgJyRVU0VSJywgVHdpbmtsZS5mbHVmZi5oaWRkZW5OYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS5mbHVmZiwgJ2ZsdWZmJyk7XG59KShqUXVlcnkpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcblxuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlYmF0Y2hkZWxldGUuanMgKi9cbihmdW5jdGlvbiB0d2lua2xlYmF0Y2hkZWxldGUoJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIHR3aW5rbGViYXRjaGRlbGV0ZS5qczogQmF0Y2ggZGVsZXRlIG1vZHVsZSAoc3lzb3BzIG9ubHkpXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIChcIkQtYmF0Y2hcIilcblx0ICogQWN0aXZlIG9uOiBFeGlzdGluZyBub24tYXJ0aWNsZXMsIGFuZCBTcGVjaWFsOlByZWZpeEluZGV4XG5cdCAqL1xuXHRUd2lua2xlLmJhdGNoZGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdE1vcmViaXRzLnVzZXJJc1N5c29wICYmXG5cdFx0XHQoKG13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpICYmIG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPiAwKSB8fFxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnUHJlZml4aW5kZXgnIHx8XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQ2Fub25pY2FsU3BlY2lhbFBhZ2VOYW1lJykgPT09ICdCcm9rZW5SZWRpcmVjdHMnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFjayxcblx0XHRcdFx0d2luZG93LndnVUxTKCfmibnliKAnLCAn5om55YiqJyksXG5cdFx0XHRcdCd0dy1iYXRjaCcsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yig6Zmk5q2k5YiG57G75oiW6aG16Z2i5Lit55qE5omA5pyJ6ZO+5o6lJywgJ+WIqumZpOatpOWIhumhnuaIlumggemdouS4reeahOaJgOaciemAo+e1kCcpXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5iYXRjaGRlbGV0ZS51bmxpbmtDYWNoZSA9IHt9O1xuXHQvLyBIYXMgdGhlIHN1YnBhZ2VzIGxpc3QgYmVlbiBsb2FkZWQ/XG5cdGxldCBzdWJwYWdlc0xvYWRlZDtcblx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRzdWJwYWdlc0xvYWRlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IFdpbmRvdyA9IG5ldyBNb3JlYml0cy5zaW1wbGVXaW5kb3coNjAwLCA0MDApO1xuXHRcdFdpbmRvdy5zZXRUaXRsZSh3aW5kb3cud2dVTFMoJ+aJuemHj+WIoOmZpCcsICfmibnmrKHliKrpmaQnKSk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0MjYmF0Y2hkZWxldGUnKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk6aG16Z2iJywgJ+WIqumZpOmggemdoicpLFxuXHRcdFx0XHRcdG5hbWU6ICdkZWxldGVfcGFnZScsXG5cdFx0XHRcdFx0dmFsdWU6ICdkZWxldGUnLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0c3ViZ3JvdXA6IHtcblx0XHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0J+WIoOmZpOWFs+iBlOeahOiuqOiuuumhte+8iOeUqOaIt+iuqOiuuumhtemZpOWklu+8iScsXG5cdFx0XHRcdFx0XHRcdFx0XHQn5Yiq6Zmk6Zec6IGv55qE6KiO6KuW6aCB77yI5L2/55So6ICF6KiO6KuW6aCB6Zmk5aSW77yJJ1xuXHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ2RlbGV0ZV90YWxrJyxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2RlbGV0ZV90YWxrJyxcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk5Yiw5bey5Yig6aG16Z2i55qE6YeN5a6a5ZCR6aG1JywgJ+WIqumZpOWIsOW3suWIqumggemdoueahOmHjeaWsOWwjuWQkemggemdoicpLFxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdkZWxldGVfcmVkaXJlY3RzJyxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2RlbGV0ZV9yZWRpcmVjdHMnLFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliKDpmaTlt7LliKDpobXpnaLnmoTlrZDpobXpnaInLCAn5Yiq6Zmk5bey5Yiq6aCB6Z2i55qE5a2Q6aCB6Z2iJyksXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ2RlbGV0ZV9zdWJwYWdlcycsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdkZWxldGVfc3VicGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50OiBUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrLnRvZ2dsZVN1YnBhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdHN1Ymdyb3VwOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk5bey5Yig5a2Q6aG16Z2i55qE6K6o6K666aG1JywgJ+WIqumZpOW3suWIquWtkOmggemdoueahOiojuirlumggScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdkZWxldGVfc3VicGFnZV90YWxrcycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdkZWxldGVfc3VicGFnZV90YWxrcycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J+WIoOmZpOWIsOW3suWIoOWtkOmhtemdoueahOmHjeWumuWQkemhtScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQn5Yiq6Zmk5Yiw5bey5Yiq5a2Q6aCB6Z2i55qE6YeN5paw5bCO5ZCR6aCB6Z2iJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogJ2RlbGV0ZV9zdWJwYWdlX3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdkZWxldGVfc3VicGFnZV9yZWRpcmVjdHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCflj5bmtojmiYDmnInlt7LliKDpobXpnaLnmoTpk77lhaXvvIjku4XlpITnkIbmnaHnm67lkb3lkI3nqbrpl7TvvIknLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J+WPlua2iOaJgOacieW3suWIqumggemdoueahOmAo+WFpe+8iOWDheiZleeQhuaineebruWRveWQjeepuumWk++8iSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6ICd1bmxpbmtfc3VicGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAndW5saW5rX3N1YnBhZ2VzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WPlua2iOmTvuWFpe+8iOS7heWkhOeQhuadoeebruWRveWQjeepuumXtO+8iScsICflj5bmtojpgKPlhaXvvIjlg4XomZXnkIbmop3nm67lkb3lkI3nqbrplpPvvIknKSxcblx0XHRcdFx0XHRuYW1lOiAndW5saW5rX3BhZ2UnLFxuXHRcdFx0XHRcdHZhbHVlOiAndW5saW5rJyxcblx0XHRcdFx0XHRjaGVja2VkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+enu+mZpOaWh+S7tuS9v+eUqO+8iOaJgOacieWRveWQjeepuumXtO+8iScsICfnp7vpmaTmqpTmoYjkvb/nlKjvvIjmiYDmnInlkb3lkI3nqbrplpPvvIknKSxcblx0XHRcdFx0XHRuYW1lOiAndW5saW5rX2ZpbGUnLFxuXHRcdFx0XHRcdHZhbHVlOiAndW5saW5rX2ZpbGUnLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ2NvbW1vbl9yZWFzb24nLFxuXHRcdFx0bGFiZWw6ICfluLjnlKjnkIbnlLHvvJonLFxuXHRcdFx0c3R5bGU6ICd3aWR0aDogODUlOycsXG5cdFx0XHRsaXN0OiBUd2lua2xlLmJhdGNoZGVsZXRlLmRlbGV0ZXJlYXNvbmxpc3QsXG5cdFx0XHRldmVudDogVHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFjay5jaGFuZ2VfY29tbW9uX3JlYXNvbixcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRsYWJlbDogJ+eQhueUse+8micsXG5cdFx0XHRzaXplOiA3NSxcblx0XHR9KTtcblx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdHByb3A6ICdyZXZpc2lvbnN8aW5mb3xpbWFnZWluZm8nLFxuXHRcdFx0aW5wcm9wOiAncHJvdGVjdGlvbicsXG5cdFx0XHRydnByb3A6ICdzaXplfHVzZXInLFxuXHRcdH07XG5cdFx0Ly8gT24gY2F0ZWdvcmllc1xuXHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAxNCkge1xuXHRcdFx0cXVlcnkuZ2VuZXJhdG9yID0gJ2NhdGVnb3J5bWVtYmVycyc7XG5cdFx0XHRxdWVyeS5nY210aXRsZSA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRcdHF1ZXJ5LmdjbWxpbWl0ID0gVHdpbmtsZS5nZXRQcmVmKCdiYXRjaE1heCcpO1xuXHRcdFx0Ly8gT24gU3BlY2lhbDpQcmVmaXhJbmRleFxuXHRcdH0gZWxzZSBpZiAobXcuY29uZmlnLmdldCgnd2dDYW5vbmljYWxTcGVjaWFsUGFnZU5hbWUnKSA9PT0gJ1ByZWZpeGluZGV4Jykge1xuXHRcdFx0cXVlcnkuZ2VuZXJhdG9yID0gJ2FsbHBhZ2VzJztcblx0XHRcdHF1ZXJ5LmdhcGxpbWl0ID0gVHdpbmtsZS5nZXRQcmVmKCdiYXRjaE1heCcpO1xuXHRcdFx0aWYgKG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgncHJlZml4JykpIHtcblx0XHRcdFx0cXVlcnkuZ2FwbmFtZXNwYWNlID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCduYW1lc3BhY2UnKTtcblx0XHRcdFx0cXVlcnkuZ2FwcHJlZml4ID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdwcmVmaXgnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxldCBwYXRoU3BsaXQgPSBkZWNvZGVVUklDb21wb25lbnQobG9jYXRpb24ucGF0aG5hbWUpLnNwbGl0KCcvJyk7XG5cdFx0XHRcdGlmIChwYXRoU3BsaXQubGVuZ3RoIDwgMyB8fCBwYXRoU3BsaXRbMl0gIT09ICdTcGVjaWFsOuWJjee8gOe0ouW8lScpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGl0bGVTcGxpdCA9IHBhdGhTcGxpdFszXS5zcGxpdCgnOicpO1xuXHRcdFx0XHRxdWVyeS5nYXBuYW1lc3BhY2UgPSBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpW3RpdGxlU3BsaXRbMF0udG9Mb3dlckNhc2UoKV07XG5cdFx0XHRcdGlmICh0aXRsZVNwbGl0Lmxlbmd0aCA8IDIgfHwgcXVlcnkuZ2FwbmFtZXNwYWNlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRxdWVyeS5nYXBuYW1lc3BhY2UgPSAwOyAvLyBhcnRpY2xlIG5hbWVzcGFjZVxuXHRcdFx0XHRcdHF1ZXJ5LmdhcHByZWZpeCA9IHBhdGhTcGxpdC5zcGxpY2UoMykuam9pbignLycpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGhTcGxpdCA9IHBhdGhTcGxpdC5zcGxpY2UoNCk7XG5cdFx0XHRcdFx0cGF0aFNwbGl0LnNwbGljZSgwLCAwLCB0aXRsZVNwbGl0LnNwbGljZSgxKS5qb2luKCc6JykpO1xuXHRcdFx0XHRcdHF1ZXJ5LmdhcHByZWZpeCA9IHBhdGhTcGxpdC5qb2luKCcvJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIE9uIFNwZWNpYWw6QnJva2VuUmVkaXJlY3RzXG5cdFx0fSBlbHNlIGlmIChtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnQnJva2VuUmVkaXJlY3RzJykge1xuXHRcdFx0cXVlcnkuZ2VuZXJhdG9yID0gJ3F1ZXJ5cGFnZSc7XG5cdFx0XHRxdWVyeS5ncXBwYWdlID0gJ0Jyb2tlblJlZGlyZWN0cyc7XG5cdFx0XHRxdWVyeS5ncXBsaW1pdCA9IFR3aW5rbGUuZ2V0UHJlZignYmF0Y2hNYXgnKTtcblx0XHRcdC8vIE9uIG5vcm1hbCBwYWdlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRxdWVyeS5nZW5lcmF0b3IgPSAnbGlua3MnO1xuXHRcdFx0cXVlcnkudGl0bGVzID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0cXVlcnkuZ3BsbGltaXQgPSBUd2lua2xlLmdldFByZWYoJ2JhdGNoTWF4Jyk7XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXR1c2RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdHN0YXR1c2Rpdi5zdHlsZS5wYWRkaW5nID0gJzE1cHgnOyAvLyBqdXN0IHNvIGl0IGRvZXNuJ3QgbG9vayBicm9rZW5cblx0XHRXaW5kb3cuc2V0Q29udGVudChzdGF0dXNkaXYpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KHN0YXR1c2Rpdik7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHRUd2lua2xlLmJhdGNoZGVsZXRlLnBhZ2VzID0ge307XG5cdFx0Y29uc3Qgc3RhdGVsZW0gPSBuZXcgTW9yZWJpdHMuc3RhdHVzKHdpbmRvdy53Z1VMUygn5oqT5Y+W6aG16Z2i5YiX6KGoJywgJ+aKk+WPlumggemdouWIl+ihqCcpKTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg6L295Lit4oCmJywgJ+i8ieWFpeS4reKApicpLFxuXHRcdFx0cXVlcnksXG5cdFx0XHQoYXBpb2JqKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdFx0Y29uc3QgJHBhZ2VzID0gJCh4bWwpLmZpbmQoJ3BhZ2UnKS5maWx0ZXIoJzpub3QoW21pc3NpbmddKScpOyAvLyA6bm90KFtpbWFnZXJlcG9zaXRvcnk9XCJzaGFyZWRcIl0pXG5cdFx0XHRcdCRwYWdlcy5lYWNoKChfaW5kZXgsIHBhZ2UpID0+IHtcblx0XHRcdFx0XHRjb25zdCAkcGFnZSA9ICQocGFnZSk7XG5cdFx0XHRcdFx0Y29uc3QgbnMgPSAkcGFnZS5hdHRyKCducycpO1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gJHBhZ2UuYXR0cigndGl0bGUnKTtcblx0XHRcdFx0XHRjb25zdCBpc1JlZGlyID0gJHBhZ2UuYXR0cigncmVkaXJlY3QnKSA9PT0gJyc7XG5cdFx0XHRcdFx0Y29uc3QgJGVkaXRwcm90ID0gJHBhZ2UuZmluZCgncHJbdHlwZT1cImVkaXRcIl1bbGV2ZWw9XCJzeXNvcFwiXScpO1xuXHRcdFx0XHRcdGNvbnN0IGlzUHJvdGVjdGVkID0gJGVkaXRwcm90Lmxlbmd0aCA+IDA7XG5cdFx0XHRcdFx0Y29uc3Qgc2l6ZSA9ICRwYWdlLmZpbmQoJ3JldicpLmF0dHIoJ3NpemUnKTtcblx0XHRcdFx0XHRjb25zdCBtZXRhZGF0YSA9IFtdO1xuXHRcdFx0XHRcdGlmIChpc1JlZGlyKSB7XG5cdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKHdpbmRvdy53Z1VMUygn6YeN5a6a5ZCRJywgJ+mHjeaWsOWwjuWQkScpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGlzUHJvdGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WFqOS/neaKpO+8jCcsICflhajkv53orbfvvIwnKSArXG5cdFx0XHRcdFx0XHRcdFx0KCRlZGl0cHJvdC5hdHRyKCdleHBpcnknKSA9PT0gJ2luZmluaXR5J1xuXHRcdFx0XHRcdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+aXoOmZkOacnycsICfnhKHpmZDmnJ8nKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBgJHtuZXcgTW9yZWJpdHMuZGF0ZSgkZWRpdHByb3QuYXR0cignZXhwaXJ5JykpLmNhbGVuZGFyKCd1dGMnKX0gKFVUQylgKSArXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfov4fmnJ8nLCAn6YGO5pyfJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChucyA9PT0gJzYnKSB7XG5cdFx0XHRcdFx0XHQvLyBtaW1pYyB3aGF0IGRlbGltYWdlcyB1c2VkIHRvIHNob3cgZm9yIGZpbGVzXG5cdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S4iuS8oOiAhe+8micsICfkuIrlgrPogIXvvJonKSArICRwYWdlLmZpbmQoJ2lpJykuYXR0cigndXNlcicpLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+acgOWQjue8lui+ke+8micsICfmnIDlvoznt6jovK/vvJonKSArICRwYWdlLmZpbmQoJ3JldicpLmF0dHIoJ3VzZXInKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaChtdy5sYW5ndWFnZS5jb252ZXJ0TnVtYmVyKHNpemUpICsgd2luZG93LndnVUxTKCflrZfoioInLCAn5L2N5YWD57WEJykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRUd2lua2xlLmJhdGNoZGVsZXRlLnBhZ2VzW3RpdGxlXSA9IHtcblx0XHRcdFx0XHRcdGxhYmVsOiB0aXRsZSArIChtZXRhZGF0YS5sZW5ndGggPyBg77yIJHttZXRhZGF0YS5qb2luKCfvvIwnKX3vvIlgIDogJycpLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHRpdGxlLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHN0eWxlOiBpc1Byb3RlY3RlZCA/ICdjb2xvcjogI2YwMCcgOiAnJyxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgZm9ybV8gPSBhcGlvYmoucGFyYW1zLmZvcm07XG5cdFx0XHRcdGZvcm1fLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5b6F5Yig6Zmk6aG16Z2iJywgJ+W+heWIqumZpOmggemdoicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9ybV8uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhajpgIknLCAn5YWo6YG4JyksXG5cdFx0XHRcdFx0ZXZlbnQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdCQocmVzdWx0KVxuXHRcdFx0XHRcdFx0XHQuZmluZCgnaW5wdXRbbmFtZT1wYWdlc106bm90KDpjaGVja2VkKScpXG5cdFx0XHRcdFx0XHRcdC5lYWNoKChfLCBlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0ZS5jbGljaygpOyAvLyBjaGVjayBpdCwgYW5kIGludm9rZSBjbGljayBldmVudCBzbyB0aGF0IHN1Ymdyb3VwIGNhbiBiZSBzaG93blxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIENoZWNrIGFueSB1bmNoZWNrZWQgc3VicGFnZXMgdG9vXG5cdFx0XHRcdFx0XHQkYm9keS5maW5kKCdpbnB1dFtuYW1lPVwicGFnZXMuc3VicGFnZXNcIl0nKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvcm1fLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YWo5LiN6YCJJywgJ+WFqOS4jemBuCcpLFxuXHRcdFx0XHRcdGV2ZW50OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHQkKHJlc3VsdClcblx0XHRcdFx0XHRcdFx0LmZpbmQoJ2lucHV0W25hbWU9cGFnZXNdOmNoZWNrZWQnKVxuXHRcdFx0XHRcdFx0XHQuZWFjaCgoXywgZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGUuY2xpY2soKTsgLy8gdW5jaGVjayBpdCwgYW5kIGludm9rZSBjbGljayBldmVudCBzbyB0aGF0IHN1Ymdyb3VwIGNhbiBiZSBoaWRkZW5cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Zm9ybV8uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdG5hbWU6ICdwYWdlcycsXG5cdFx0XHRcdFx0aWQ6ICd0dy1kYmF0Y2gtcGFnZXMnLFxuXHRcdFx0XHRcdHNoaWZ0Q2xpY2tTdXBwb3J0OiB0cnVlLFxuXHRcdFx0XHRcdGxpc3Q6IE9iamVjdC52YWx1ZXMoVHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlcykubWFwKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvcm1fLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBmb3JtXy5yZW5kZXIoKTtcblx0XHRcdFx0YXBpb2JqLnBhcmFtcy5XaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyZXN1bHQsICdwYWdlcycpKSB7XG5cdFx0XHRcdFx0Z2VuZXJhdGVBcnJvd0xpbmtzKGNoZWNrYm94KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHN0YXRlbGVtXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHRmb3JtLFxuXHRcdFx0V2luZG93LFxuXHRcdH07XG5cdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHR9O1xuXHRjb25zdCBnZW5lcmF0ZUFycm93TGlua3MgPSAoY2hlY2tib3gpID0+IHtcblx0XHRjb25zdCBsaW5rID0gTW9yZWJpdHMuaHRtbE5vZGUoJ2EnLCAnID4nKTtcblx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndHctZGJhdGNoLXBhZ2UtbGluaycpO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgbXcudXRpbC5nZXRVcmwoY2hlY2tib3gudmFsdWUpKTtcblx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuXHRcdGNoZWNrYm94Lm5leHRFbGVtZW50U2libGluZy5hcHBlbmQobGluayk7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2hkZWxldGUuZ2VuZXJhdGVOZXdQYWdlTGlzdCA9IChmb3JtKSA9PiB7XG5cdFx0Ly8gVXBkYXRlIHRoZSBsaXN0IG9mIGNoZWNrZWQgcGFnZXMgaW4gVHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlcyBvYmplY3Rcblx0XHRjb25zdCBlbGVtZW50cyA9IGZvcm0uZWxlbWVudHMucGFnZXM7XG5cdFx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBwYWdlc1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG5cdFx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUucGFnZXNbZWxlbWVudC52YWx1ZV0uY2hlY2tlZCA9IGVsZW1lbnQuY2hlY2tlZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZVxuXHRcdFx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlc1tlbGVtZW50cy52YWx1ZV0uY2hlY2tlZCA9IGVsZW1lbnRzLmNoZWNrZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdG5hbWU6ICdwYWdlcycsXG5cdFx0XHRpZDogJ3R3LWRiYXRjaC1wYWdlcycsXG5cdFx0XHRzaGlmdENsaWNrU3VwcG9ydDogdHJ1ZSxcblx0XHRcdGxpc3Q6IE9iamVjdC52YWx1ZXMoVHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlcykubWFwKChlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBlO1xuXHRcdFx0fSksXG5cdFx0fSkucmVuZGVyKCk7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2hkZWxldGUuZGVsZXRlcmVhc29ubGlzdCA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor7fpgInmi6knLCAn6KuL6YG45pOHJyksXG5cdFx0XHR2YWx1ZTogJycsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHQnRzbvvJrljp/kvZzogIXmj5Dor7fliKDpmaTmiJbmuIXnqbrpobXpnaLvvIzkuJTpobXpnaLljp/kvZzogIXku4XmnInkuIDkuronLFxuXHRcdFx0XHQnRzbvvJrljp/kvZzogIXmj5Doq4vliKrpmaTmiJbmuIXnqbrpoIHpnaLvvIzkuJTpoIHpnaLljp/kvZzogIXlg4XmnInkuIDkuronXG5cdFx0XHQpLFxuXHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J1tbTElCOkNTRCNHNnxHNl1d77ya5Y6f5L2c6ICF5o+Q6K+35Yig6Zmk5oiW5riF56m66aG16Z2i77yM5LiU6aG16Z2i5Y6f5L2c6ICF5LuF5pyJ5LiA5Lq6Jyxcblx0XHRcdFx0J1tbTElCOkNTRCNHNnxHNl1d77ya5Y6f5L2c6ICF5o+Q6KuL5Yiq6Zmk5oiW5riF56m66aCB6Z2i77yM5LiU6aCB6Z2i5Y6f5L2c6ICF5YOF5pyJ5LiA5Lq6J1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCdHOe+8muWtpOeri+mhtemdou+8jOavlOWmguayoeacieS4u+mhtemdoueahOiuqOiuuumhteOAgeaMh+WQkeepuumhtemdoueahOmHjeWumuWQkeetiScsXG5cdFx0XHRcdCdHOe+8muWtpOeri+mggemdou+8jOavlOWmguaykuacieS4u+mggemdoueahOiojuirlumggeOAgeaMh+WQkeepuumggemdoueahOmHjeaWsOWwjuWQkeetiSdcblx0XHRcdCksXG5cdFx0XHR2YWx1ZTogd2luZG93LndnVUxTKCdbW0xJQjpDU0QjRzl8RzldXe+8muWtpOeri+mhtemdoicsICdbW0xJQjpDU0QjRzl8RzldXe+8muWtpOeri+mggemdoicpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnUjHvvJrkuI3og73lj5HmjKXlrp7pmYXkvZznlKjnmoTph43lrprlkJHjgIInLCAnUjHvvJrkuI3og73nmbzmj67lr6bpmpvkvZznlKjnmoTph43lrprlkJHjgIInKSxcblx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCdbW0xJQjpDU0QjUjF8UjFdXe+8muS4jeiDveWPkeaMpeWunumZheS9nOeUqOeahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdCdbW0xJQjpDU0QjUjF8UjFdXe+8muS4jeiDveeZvOaPruWvpumam+S9nOeUqOeahOmHjeWumuWQkeOAgidcblx0XHRcdCksXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHQnUjLvvJrlkI3np7DkuI7lr7zlkJHnm67moIfku6PooajkuovniankuI3kuIDoh7TmiJbkuI3lrozlhajkuIDoh7TnmoTph43lrprlkJHjgIInLFxuXHRcdFx0XHQnUjLvvJrlkI3nqLHoiIflsI7lkJHnm67mqJnku6PooajkuovniankuI3kuIDoh7TmiJbkuI3lrozlhajkuIDoh7TnmoTph43lrprlkJHjgIInXG5cdFx0XHQpLFxuXHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J1tbTElCOkNTRCNSMnxSMl1d77ya5ZCN56ew5LiO5a+85ZCR55uu5qCH5Luj6KGo5LqL54mp5LiN5LiA6Ie05oiW5LiN5a6M5YWo5LiA6Ie055qE6YeN5a6a5ZCR44CCJyxcblx0XHRcdFx0J1tbTElCOkNTRCNSMnxSMl1d77ya5ZCN56ix6IiH5bCO5ZCR55uu5qiZ5Luj6KGo5LqL54mp5LiN5LiA6Ie05oiW5LiN5a6M5YWo5LiA6Ie055qE6YeN5a6a5ZCR44CCJ1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ0Y077ya5Y+v6KKr5pu/5Luj55qE5ZCI55CG5L2/55So5paH5Lu2JywgJ0Y077ya5Y+v6KKr5pu/5Luj55qE5ZCI55CG5L2/55So5qqU5qGIJyksXG5cdFx0XHR2YWx1ZTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQnW1tMSUI6Q1NEI0Y0fEY0XV3vvJrlj6/ooqvmm7/ku6PnmoTlkIjnkIbkvb/nlKjmlofku7YnLFxuXHRcdFx0XHQnW1tMSUI6Q1NEI0Y0fEY0XV3vvJrlj6/ooqvmm7/ku6PnmoTlkIjnkIbkvb/nlKjmqpTmoYgnXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J0Y177ya5rKh5pyJ6KKr5p2h55uu5L2/55So55qE6Z2e6Ieq55Sx6JGX5L2c5p2D5paH5Lu244CB5rKh5pyJ5aGr5YaZ5Lu75L2V5ZCI55CG5L2/55So5L6d5o2u55qE6Z2e6Ieq55Sx6JGX5L2c5p2D5paH5Lu2Jyxcblx0XHRcdFx0J0Y177ya5rKS5pyJ6KKr5qKd55uu5L2/55So55qE6Z2e6Ieq55Sx54mI5qyK5qqU5qGI44CB5rKS5pyJ5aGr5a+r5Lu75L2V5ZCI55CG5L2/55So5L6d5pOa55qE6Z2e6Ieq55Sx54mI5qyK5qqU5qGIJ1xuXHRcdFx0KSxcblx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCdbW0xJQjpDU0QjRjV8RjVdXe+8muayoeacieiiq+adoeebruS9v+eUqOeahOmdnuiHqueUseiRl+S9nOadg+aWh+S7tuOAgeayoeacieWhq+WGmeS7u+S9leWQiOeQhuS9v+eUqOS+neaNrueahOmdnuiHqueUseiRl+S9nOadg+aWh+S7ticsXG5cdFx0XHRcdCdbW0xJQjpDU0QjRjV8RjVdXe+8muaykuacieiiq+aineebruS9v+eUqOeahOmdnuiHqueUseeJiOasiuaqlOahiOOAgeaykuacieWhq+Wvq+S7u+S9leWQiOeQhuS9v+eUqOS+neaTmueahOmdnuiHqueUseeJiOasiuaqlOahiCdcblx0XHRcdCksXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHQnTzHvvJrnlKjmiLfor7fmsYLliKDpmaToh6rlt7HnmoTnlKjmiLfpobXmiJblhbblrZDpobXpnaInLFxuXHRcdFx0XHQnTzHvvJrkvb/nlKjogIXoq4vmsYLliKrpmaToh6rlt7HnmoTkvb/nlKjogIXpoIHpnaLmiJblhbblrZDpoIHpnaInXG5cdFx0XHQpLFxuXHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J1tbTElCOkNTRCNPMXxPMV1d77ya55So5oi36K+35rGC5Yig6Zmk6Ieq5bex55qEW1tIZWxwOueUqOaIt+mhtXznlKjmiLfpobVdXeaIluWFtuWtkOmhtemdouOAgicsXG5cdFx0XHRcdCdbW0xJQjpDU0QjTzF8TzFdXe+8muS9v+eUqOiAheiri+axguWIqumZpOiHquW3seeahFtbSGVscDrnlKjmiLfpobV85L2/55So6ICF6aCB6Z2iXV3miJblhbblrZDpoIHpnaLjgIInXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnTzLvvJrnqbrnmoTliIbnsbvvvIjmsqHmnInmnaHnm67kuZ/msqHmnInlrZDliIbnsbvvvIknLCAnTzLvvJrnqbrnmoTliIbpoZ7vvIjmspLmnInmop3nm67kuZ/mspLmnInlrZDliIbpoZ7vvIknKSxcblx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCdbW0xJQjpDU0QjTzJ8TzJdXe+8muepuueahOWIhuexu++8iOayoeacieadoeebruS5n+ayoeacieWtkOWIhuexu++8ieOAgicsXG5cdFx0XHRcdCdbW0xJQjpDU0QjTzJ8TzJdXe+8muepuueahOWIhumhnu+8iOaykuacieaineebruS5n+aykuacieWtkOWIhumhnu+8ieOAgidcblx0XHRcdCksXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCdPM++8muW6n+W8g+iNieeovycsICdPM++8muW7ouajhOiNieeovycpLFxuXHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUygnW1tMSUI6Q1NEI08zfE8zXV3vvJrlup/lvIPojYnnqL/jgIInLCAnW1tMSUI6Q1NEI08zfE8zXV3vvJrlu6Lmo4TojYnnqL/jgIInKSxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrLmNoYW5nZV9jb21tb25fcmVhc29uID0gKGUpID0+IHtcblx0XHRpZiAoZS50YXJnZXQuZm9ybS5yZWFzb24udmFsdWUgIT09ICcnKSB7XG5cdFx0XHRlLnRhcmdldC5mb3JtLnJlYXNvbi52YWx1ZSA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihlLnRhcmdldC5mb3JtLnJlYXNvbi52YWx1ZSk7XG5cdFx0fVxuXHRcdGUudGFyZ2V0LmZvcm0ucmVhc29uLnZhbHVlICs9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdGUudGFyZ2V0LnZhbHVlID0gJyc7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2hkZWxldGUuY2FsbGJhY2sudG9nZ2xlU3VicGFnZXMgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHtmb3JtfSA9IGUudGFyZ2V0O1xuXHRcdGxldCBuZXdQYWdlTGlzdDtcblx0XHRpZiAoZS50YXJnZXQuY2hlY2tlZCkge1xuXHRcdFx0Zm9ybS5kZWxldGVfc3VicGFnZV9yZWRpcmVjdHMuY2hlY2tlZCA9IGZvcm0uZGVsZXRlX3JlZGlyZWN0cy5jaGVja2VkO1xuXHRcdFx0Zm9ybS5kZWxldGVfc3VicGFnZV90YWxrcy5jaGVja2VkID0gZm9ybS5kZWxldGVfdGFsay5jaGVja2VkO1xuXHRcdFx0Zm9ybS51bmxpbmtfc3VicGFnZXMuY2hlY2tlZCA9IGZvcm0udW5saW5rX3BhZ2UuY2hlY2tlZDtcblx0XHRcdC8vIElmIGxpc3RzIG9mIHN1YnBhZ2VzIHdlcmUgYWxyZWFkeSBsb2FkZWQgb25jZSwgdGhleSBhcmVcblx0XHRcdC8vIGF2YWlsYWJsZSB3aXRob3V0IHVzZSBvZiBhbnkgQVBJIGNhbGxzXG5cdFx0XHRpZiAoc3VicGFnZXNMb2FkZWQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBUd2lua2xlLmJhdGNoZGVsZXRlLnBhZ2VzKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IGJhY2sgdGhlIHN1Ymdyb3VwIGZyb20gc3ViZ3JvdXBfLCB3aGVyZSB3ZSBzYXZlZCBpdFxuXHRcdFx0XHRcdGlmIChlbC5zdWJncm91cCA9PT0gbnVsbCAmJiBlbC5zdWJncm91cF8pIHtcblx0XHRcdFx0XHRcdGVsLnN1Ymdyb3VwID0gZWwuc3ViZ3JvdXBfO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdQYWdlTGlzdCA9IFR3aW5rbGUuYmF0Y2hkZWxldGUuZ2VuZXJhdGVOZXdQYWdlTGlzdChmb3JtKTtcblx0XHRcdFx0JGJvZHkuZmluZCgnI3R3LWRiYXRjaC1wYWdlcycpLnJlcGxhY2VXaXRoKG5ld1BhZ2VMaXN0KTtcblx0XHRcdFx0Zm9yIChjb25zdCBjaGVja2JveCBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMobmV3UGFnZUxpc3QsICdwYWdlcycpKSB7XG5cdFx0XHRcdFx0Z2VuZXJhdGVBcnJvd0xpbmtzKGNoZWNrYm94KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhuZXdQYWdlTGlzdCwgJ3BhZ2VzLnN1YnBhZ2VzJykpIHtcblx0XHRcdFx0XHRnZW5lcmF0ZUFycm93TGlua3MoY2hlY2tib3gpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFByb2NlZWQgd2l0aCBBUEkgY2FsbHMgdG8gZ2V0IGxpc3Qgb2Ygc3VicGFnZXNcblx0XHRcdGNvbnN0IGxvYWRpbmdUZXh0ID0gYDxzdHJvbmcgaWQ9XCJkYmF0Y2gtc3VicGFnZS1sb2FkaW5nXCI+JHt3aW5kb3cud2dVTFMoJ+WKoOi9veS4rS4uLicsICfovInlhaXkuK0uLi4nKX08L3N0cm9uZz5gO1xuXHRcdFx0JChlLnRhcmdldCkuYWZ0ZXIobG9hZGluZ1RleHQpO1xuXHRcdFx0Y29uc3QgcGFnZXMgPSAkKGZvcm0ucGFnZXMpXG5cdFx0XHRcdC5tYXAoKF9pLCBlbCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbC52YWx1ZTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmdldCgpO1xuXHRcdFx0Y29uc3Qgc3VicGFnZUxpc3RlciA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbigpO1xuXHRcdFx0c3VicGFnZUxpc3Rlci5zZXRPcHRpb24oJ2NodW5rU2l6ZScsIFR3aW5rbGUuZ2V0UHJlZignYmF0Y2hDaHVua3MnKSk7XG5cdFx0XHRzdWJwYWdlTGlzdGVyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRcdHN1YnBhZ2VMaXN0ZXIucnVuKFxuXHRcdFx0XHQocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBwYWdlVGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChwYWdlTmFtZSk7XG5cdFx0XHRcdFx0Ly8gTm8gbmVlZCB0byBsb29rIGZvciBzdWJwYWdlcyBpbiBtYWluL2ZpbGUvbWVkaWF3aWtpIHNwYWNlXG5cdFx0XHRcdFx0aWYgKFswLCA2LCA4XS5pbmNsdWRlcyhwYWdlVGl0bGUubmFtZXNwYWNlKSkge1xuXHRcdFx0XHRcdFx0c3VicGFnZUxpc3Rlci53b3JrZXJTdWNjZXNzKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmraPlnKjojrflj5YgJywgJ+ato+WcqOWPluW+lyAnKSArIHBhZ2VOYW1lICsgd2luZG93LndnVUxTKCcg55qE5a2Q6aG16Z2iJywgJyDnmoTlrZDpoIHpnaInKSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdFx0XHRwcm9wOiAncmV2aXNpb25zfGluZm98aW1hZ2VpbmZvJyxcblx0XHRcdFx0XHRcdFx0Z2VuZXJhdG9yOiAnYWxscGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRydnByb3A6ICdzaXplJyxcblx0XHRcdFx0XHRcdFx0aW5wcm9wOiAncHJvdGVjdGlvbicsXG5cdFx0XHRcdFx0XHRcdGdhcHByZWZpeDogYCR7cGFnZVRpdGxlLnRpdGxlfS9gLFxuXHRcdFx0XHRcdFx0XHRnYXBuYW1lc3BhY2U6IHBhZ2VUaXRsZS5uYW1lc3BhY2UsXG5cdFx0XHRcdFx0XHRcdGdhcGxpbWl0OiAnbWF4Jyxcblx0XHRcdFx0XHRcdFx0cGFnZU5hbWVGdWxsOiBwYWdlTmFtZSwgLy8gTm90IHVzZWQgYnkgQVBJLCBidXQgYWRkZWQgZm9yIGFjY2VzcyBpbiBvblN1Y2Nlc3MoKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdChhcGlvYmopID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeG1sID0gYXBpb2JqLnJlc3BvbnNlWE1MO1xuXHRcdFx0XHRcdFx0XHRjb25zdCAkcGFnZXMgPSAkKHhtbCkuZmluZCgncGFnZScpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJwYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0XHQkcGFnZXMuZWFjaCgoX2luZGV4LCBwYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgJHBhZ2UgPSAkKHBhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5zID0gJHBhZ2UuYXR0cignbnMnKTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aXRsZSA9ICRwYWdlLmF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNSZWRpciA9ICRwYWdlLmF0dHIoJ3JlZGlyZWN0JykgPT09ICcnO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0ICRlZGl0cHJvdCA9ICRwYWdlLmZpbmQoJ3ByW3R5cGU9XCJlZGl0XCJdW2xldmVsPVwic3lzb3BcIl0nKTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1Byb3RlY3RlZCA9ICRlZGl0cHJvdC5sZW5ndGggPiAwO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNpemUgPSAkcGFnZS5maW5kKCdyZXYnKS5hdHRyKCdzaXplJyk7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbWV0YWRhdGEgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXNSZWRpcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaCgncmVkaXJlY3QnKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzUHJvdGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WFqOS/neaKpO+8jCcsICflhajkv53orbfvvIwnKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCRlZGl0cHJvdC5hdHRyKCdleHBpcnknKSA9PT0gJ2luZmluaXR5J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+aXoOmZkOacnycsICfnhKHpmZDmnJ8nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBgJHtuZXcgTW9yZWJpdHMuZGF0ZSgkZWRpdHByb3QuYXR0cignZXhwaXJ5JykpLmNhbGVuZGFyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1dGMnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9IChVVEMpYCkgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6L+H5pyfJywgJ+mBjuacnycpXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRpZiAobnMgPT09ICc2Jykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gbWltaWMgd2hhdCBkZWxpbWFnZXMgdXNlZCB0byBzaG93IGZvciBmaWxlc1xuXHRcdFx0XHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaChcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuIrkvKDogIXvvJonLCAn5LiK5YKz6ICF77yaJykgKyAkcGFnZS5maW5kKCdpaScpLmF0dHIoJ3VzZXInKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmnIDlkI7nvJbovpHvvJonLCAn5pyA5b6M57eo6Lyv77yaJykgKyAkcGFnZS5maW5kKCdyZXYnKS5hdHRyKCd1c2VyJylcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFkYXRhLnB1c2gobXcubGFuZ3VhZ2UuY29udmVydE51bWJlcihzaXplKSArIHdpbmRvdy53Z1VMUygn5a2X6IqCJywgJ+S9jeWFg+e1hCcpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0c3VicGFnZUxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogdGl0bGUgKyAobWV0YWRhdGEubGVuZ3RoID8gYCAoJHttZXRhZGF0YS5qb2luKCc7ICcpfSlgIDogJycpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiBpc1Byb3RlY3RlZCA/ICdjb2xvcjogI2YwMCcgOiAnJyxcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGlmIChzdWJwYWdlTGlzdC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYWdlTmFtZV8gPSBhcGlvYmoucXVlcnkucGFnZU5hbWVGdWxsO1xuXHRcdFx0XHRcdFx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUucGFnZXNbcGFnZU5hbWVfXS5zdWJncm91cCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiAnc3VicGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiAnZGJhdGNoLXN1YnBhZ2VzJyxcblx0XHRcdFx0XHRcdFx0XHRcdHNoaWZ0Q2xpY2tTdXBwb3J0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdDogc3VicGFnZUxpc3QsXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRzdWJwYWdlTGlzdGVyLndvcmtlclN1Y2Nlc3MoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRudWxsIC8qIHN0YXR1c0VsZW1lbnQgKi8sXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHN1YnBhZ2VMaXN0ZXIud29ya2VyRmFpbHVyZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gTGlzdCAnZW0gb24gdGhlIGludGVyZmFjZVxuXHRcdFx0XHRcdG5ld1BhZ2VMaXN0ID0gVHdpbmtsZS5iYXRjaGRlbGV0ZS5nZW5lcmF0ZU5ld1BhZ2VMaXN0KGZvcm0pO1xuXHRcdFx0XHRcdCRib2R5LmZpbmQoJyN0dy1kYmF0Y2gtcGFnZXMnKS5yZXBsYWNlV2l0aChuZXdQYWdlTGlzdCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGVja2JveCBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMobmV3UGFnZUxpc3QsICdwYWdlcycpKSB7XG5cdFx0XHRcdFx0XHRnZW5lcmF0ZUFycm93TGlua3MoY2hlY2tib3gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhuZXdQYWdlTGlzdCwgJ3BhZ2VzLnN1YnBhZ2VzJykpIHtcblx0XHRcdFx0XHRcdGdlbmVyYXRlQXJyb3dMaW5rcyhjaGVja2JveCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN1YnBhZ2VzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHQvLyBSZW1vdmUgXCJMb2FkaW5nLi4uIFwiIHRleHRcblx0XHRcdFx0XHQkYm9keS5maW5kKCcjZGJhdGNoLXN1YnBhZ2UtbG9hZGluZycpLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoIWUudGFyZ2V0LmNoZWNrZWQpIHtcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgVHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlcykge1xuXHRcdFx0XHRpZiAoZWwuc3ViZ3JvdXApIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgc3ViZ3JvdXAgYWZ0ZXIgc2F2aW5nIGl0cyBjb250ZW50cyBpbiBzdWJncm91cF9cblx0XHRcdFx0XHQvLyBzbyB0aGF0IGl0IGNhbiBiZSByZXRyaWV2ZWQgZWFzaWx5IGlmIHVzZXIgZGVjaWRlcyB0b1xuXHRcdFx0XHRcdC8vIGRlbGV0ZSB0aGUgc3VicGFnZXMgYWdhaW5cblx0XHRcdFx0XHRlbC5zdWJncm91cF8gPSBlbC5zdWJncm91cDtcblx0XHRcdFx0XHRlbC5zdWJncm91cCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG5ld1BhZ2VMaXN0ID0gVHdpbmtsZS5iYXRjaGRlbGV0ZS5nZW5lcmF0ZU5ld1BhZ2VMaXN0KGZvcm0pO1xuXHRcdFx0JGJvZHkuZmluZCgnI3R3LWRiYXRjaC1wYWdlcycpLnJlcGxhY2VXaXRoKG5ld1BhZ2VMaXN0KTtcblx0XHRcdGZvciAoY29uc3QgY2hlY2tib3ggb2YgTW9yZWJpdHMucXVpY2tGb3JtLmdldEVsZW1lbnRzKG5ld1BhZ2VMaXN0LCAncGFnZXMnKSkge1xuXHRcdFx0XHRnZW5lcmF0ZUFycm93TGlua3MoY2hlY2tib3gpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFjay5ldmFsdWF0ZSA9IChldmVudCkgPT4ge1xuXHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUygn5om56YeP5Yig6Zmk5bey5a6M5oiQJywgJ+aJueasoeWIqumZpOW3suWujOaIkCcpO1xuXHRcdGNvbnN0IGZvcm0gPSBldmVudC50YXJnZXQ7XG5cdFx0Y29uc3QgbnVtUHJvdGVjdGVkID0gJChNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMoZm9ybSwgJ3BhZ2VzJykpLmZpbHRlcigoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudC5jaGVja2VkICYmIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLnN0eWxlLmNvbG9yID09PSAncmVkJztcblx0XHR9KS5sZW5ndGg7XG5cdFx0aWYgKFxuXHRcdFx0bnVtUHJvdGVjdGVkID4gMCAmJlxuXHRcdFx0IWNvbmZpcm0oXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5oKo5q2j6KaB5Yig6ZmkICcsICfmgqjmraPopoHliKrpmaQgJykgK1xuXHRcdFx0XHRcdG13Lmxhbmd1YWdlLmNvbnZlcnROdW1iZXIobnVtUHJvdGVjdGVkKSArXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCcg5Liq5YWo5L+d5oqk6aG16Z2i77yM5oKo56Gu5a6a5ZCX77yfJywgJyDlgIvlhajkv53orbfpoIHpnaLvvIzmgqjnorrlrprll47vvJ8nKVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwYWdlcyA9IGZvcm0uZ2V0Q2hlY2tlZCgncGFnZXMnKTtcblx0XHRjb25zdCBzdWJwYWdlcyA9IGZvcm0uZ2V0Q2hlY2tlZCgncGFnZXMuc3VicGFnZXMnKTtcblx0XHRjb25zdCByZWFzb24gPSBmb3JtLnJlYXNvbi52YWx1ZTtcblx0XHRjb25zdCBkZWxldGVfcGFnZSA9IGZvcm0uZGVsZXRlX3BhZ2UuY2hlY2tlZDtcblx0XHRsZXQgZGVsZXRlX3RhbGs7XG5cdFx0bGV0IGRlbGV0ZV9yZWRpcmVjdHM7XG5cdFx0bGV0IGRlbGV0ZV9zdWJwYWdlcztcblx0XHRsZXQgZGVsZXRlX3N1YnBhZ2VfcmVkaXJlY3RzO1xuXHRcdGxldCBkZWxldGVfc3VicGFnZV90YWxrcztcblx0XHRsZXQgdW5saW5rX3N1YnBhZ2VzO1xuXHRcdGlmIChkZWxldGVfcGFnZSkge1xuXHRcdFx0ZGVsZXRlX3RhbGsgPSBmb3JtLmRlbGV0ZV90YWxrLmNoZWNrZWQ7XG5cdFx0XHRkZWxldGVfcmVkaXJlY3RzID0gZm9ybS5kZWxldGVfcmVkaXJlY3RzLmNoZWNrZWQ7XG5cdFx0XHRkZWxldGVfc3VicGFnZXMgPSBmb3JtLmRlbGV0ZV9zdWJwYWdlcy5jaGVja2VkO1xuXHRcdFx0aWYgKGRlbGV0ZV9zdWJwYWdlcykge1xuXHRcdFx0XHRkZWxldGVfc3VicGFnZV9yZWRpcmVjdHMgPSBmb3JtLmRlbGV0ZV9zdWJwYWdlX3JlZGlyZWN0cy5jaGVja2VkO1xuXHRcdFx0XHRkZWxldGVfc3VicGFnZV90YWxrcyA9IGZvcm0uZGVsZXRlX3N1YnBhZ2VfdGFsa3MuY2hlY2tlZDtcblx0XHRcdFx0dW5saW5rX3N1YnBhZ2VzID0gZm9ybS51bmxpbmtfc3VicGFnZXMuY2hlY2tlZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdW5saW5rX3BhZ2UgPSBmb3JtLnVubGlua19wYWdlLmNoZWNrZWQ7XG5cdFx0Y29uc3QgdW5saW5rX2ZpbGUgPSBmb3JtLnVubGlua19maWxlLmNoZWNrZWQ7XG5cdFx0aWYgKCFyZWFzb24pIHtcblx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOmcgOimgee7meWHuuS4gOS4queQhueUsScsICfmgqjpnIDopoHntablh7rkuIDlgIvnkIbnlLEnKSwge1xuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdHRhZzogJ3R3aW5rbGViYXRjaGRlbGV0ZScsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRpZiAoIXBhZ2VzKSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3IoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn6ZSZ6K+vJywgJ+mMr+iqpCcpLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ayoeacieimgeWIoOmZpOeahOWGheWuue+8jOS4reatoicsICfmspLmnInopoHliKrpmaTnmoTlhaflrrnvvIzkuK3mraInKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcGFnZURlbGV0ZXIgPSBuZXcgTW9yZWJpdHMuYmF0Y2hPcGVyYXRpb24oXG5cdFx0XHRkZWxldGVfcGFnZVxuXHRcdFx0XHQ/IHdpbmRvdy53Z1VMUygn5q2j5Zyo5Yig6Zmk6aG16Z2iJywgJ+ato+WcqOWIqumZpOmggemdoicpXG5cdFx0XHRcdDogd2luZG93LndnVUxTKCfmraPlnKjlkK/liqjopoHmsYLnmoTku7vliqEnLCAn5q2j5Zyo5ZWf5YuV6KaB5rGC55qE5Lu75YuZJylcblx0XHQpO1xuXHRcdHBhZ2VEZWxldGVyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHQvLyB3ZSBvbmx5IG5lZWQgdGhlIGluaXRpYWwgc3RhdHVzIGxpbmVzIGlmIHdlJ3JlIGRlbGV0aW5nIHRoZSBwYWdlcyBpbiB0aGUgcGFnZXMgYXJyYXlcblx0XHRwYWdlRGVsZXRlci5zZXRPcHRpb24oJ3ByZXNlcnZlSW5kaXZpZHVhbFN0YXR1c0xpbmVzJywgZGVsZXRlX3BhZ2UpO1xuXHRcdHBhZ2VEZWxldGVyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRwYWdlRGVsZXRlci5ydW4oXG5cdFx0XHQocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRcdHBhZ2U6IHBhZ2VOYW1lLFxuXHRcdFx0XHRcdGRlbGV0ZV9wYWdlLFxuXHRcdFx0XHRcdGRlbGV0ZV90YWxrLFxuXHRcdFx0XHRcdGRlbGV0ZV9yZWRpcmVjdHMsXG5cdFx0XHRcdFx0dW5saW5rX3BhZ2UsXG5cdFx0XHRcdFx0dW5saW5rX2ZpbGU6IHVubGlua19maWxlICYmIG5ldyBSZWdFeHAoYF4ke01vcmViaXRzLm5hbWVzcGFjZVJlZ2V4KDYpfTpgLCAnaScpLnRlc3QocGFnZU5hbWUpLFxuXHRcdFx0XHRcdHJlYXNvbixcblx0XHRcdFx0XHRwYWdlRGVsZXRlcixcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOWIoOmZpOmhtemdoiAnLCAn5q2j5Zyo5Yiq6Zmk6aCB6Z2iICcpICsgcGFnZU5hbWVcblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHRpZiAoZGVsZXRlX3BhZ2UpIHtcblx0XHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0RWRpdFN1bW1hcnkoYCR7cmVhc29ufe+8iOaJuemHj++8iWApO1xuXHRcdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnN1cHByZXNzUHJvdGVjdFdhcm5pbmcoKTtcblx0XHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UuZGVsZXRlUGFnZShUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrcy5kb0V4dHJhcywgcGFnZURlbGV0ZXIud29ya2VyRmFpbHVyZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFja3MuZG9FeHRyYXMoeXNhcmNoaXZlc19wYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKGRlbGV0ZV9zdWJwYWdlcykge1xuXHRcdFx0XHRcdGNvbnN0IHN1YnBhZ2VEZWxldGVyID0gbmV3IE1vcmViaXRzLmJhdGNoT3BlcmF0aW9uKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmraPlnKjliKDpmaTlrZDpobXpnaInLCAn5q2j5Zyo5Yiq6Zmk5a2Q6aCB6Z2iJylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHN1YnBhZ2VEZWxldGVyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHRcdFx0XHRzdWJwYWdlRGVsZXRlci5zZXRPcHRpb24oJ3ByZXNlcnZlSW5kaXZpZHVhbFN0YXR1c0xpbmVzJywgdHJ1ZSk7XG5cdFx0XHRcdFx0c3VicGFnZURlbGV0ZXIuc2V0UGFnZUxpc3Qoc3VicGFnZXMpO1xuXHRcdFx0XHRcdHN1YnBhZ2VEZWxldGVyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0cGFnZTogcGFnZU5hbWUsXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZV9wYWdlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRkZWxldGVfdGFsazogZGVsZXRlX3N1YnBhZ2VfdGFsa3MsXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZV9yZWRpcmVjdHM6IGRlbGV0ZV9zdWJwYWdlX3JlZGlyZWN0cyxcblx0XHRcdFx0XHRcdFx0dW5saW5rX3BhZ2U6IHVubGlua19zdWJwYWdlcyxcblx0XHRcdFx0XHRcdFx0dW5saW5rX2ZpbGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRyZWFzb24sXG5cdFx0XHRcdFx0XHRcdHBhZ2VEZWxldGVyOiBzdWJwYWdlRGVsZXRlcixcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmraPlnKjliKDpmaTlrZDpobXpnaIgJywgJ+ato+WcqOWIqumZpOWtkOmggemdoiAnKSArIHBhZ2VOYW1lXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEVkaXRTdW1tYXJ5KGAke3JlYXNvbn3vvIjmibnph4/vvIlgKTtcblx0XHRcdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc3VwcHJlc3NQcm90ZWN0V2FybmluZygpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLmRlbGV0ZVBhZ2UoVHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFja3MuZG9FeHRyYXMsIHBhZ2VEZWxldGVyLndvcmtlckZhaWx1cmUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fTtcblx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFja3MgPSB7XG5cdFx0Ly8gdGhpcyBzdHVwaWQgcGFyYW1ldGVyIG5hbWUgaXMgYSB0ZW1wb3JhcnkgdGhpbmcgdW50aWwgSSBpbXBsZW1lbnQgYW4gb3ZlcmhhdWxcblx0XHQvLyBvZiBNb3JlYml0cy53aWtpLiogY2FsbGJhY2sgcGFyYW1ldGVyc1xuXHRcdGRvRXh0cmFzOiAodGhpbmdXaXRoUGFyYW1ldGVycykgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gdGhpbmdXaXRoUGFyYW1ldGVycy5wYXJlbnRcblx0XHRcdFx0PyB0aGluZ1dpdGhQYXJhbWV0ZXJzLnBhcmVudC5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKVxuXHRcdFx0XHQ6IHRoaW5nV2l0aFBhcmFtZXRlcnMuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHQvLyB0aGUgaW5pdGlhbCBiYXRjaCBvcGVyYXRpb24ncyBqb2IgaXMgdG8gZGVsZXRlIHRoZSBwYWdlLCBhbmQgdGhhdCBoYXNcblx0XHRcdC8vIHN1Y2NlZWRlZCBieSBub3dcblx0XHRcdHBhcmFtcy5wYWdlRGVsZXRlci53b3JrZXJTdWNjZXNzKHRoaW5nV2l0aFBhcmFtZXRlcnMpO1xuXHRcdFx0bGV0IHF1ZXJ5O1xuXHRcdFx0bGV0IHlzYXJjaGl2ZXNfYXBpO1xuXHRcdFx0aWYgKHBhcmFtcy51bmxpbmtfcGFnZSkge1xuXHRcdFx0XHRUd2lua2xlLmJhdGNoZGVsZXRlLnVubGlua0NhY2hlID0ge307XG5cdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRsaXN0OiAnYmFja2xpbmtzJyxcblx0XHRcdFx0XHRibGZpbHRlcnJlZGlyOiAnbm9ucmVkaXJlY3RzJyxcblx0XHRcdFx0XHRibG5hbWVzcGFjZTogWzBdLFxuXHRcdFx0XHRcdGJsdGl0bGU6IHBhcmFtcy5wYWdlLFxuXHRcdFx0XHRcdGJsbGltaXQ6ICdtYXgnLCAvLyA1MDAgaXMgbWF4IGZvciBub3JtYWwgdXNlcnMsIDUwMDAgZm9yIGJvdHMgYW5kIHN5c29wc1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo6I635Y+W6ZO+5YWlJywgJ+ato+WcqOWPluW+l+mAo+WFpScpLFxuXHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUuY2FsbGJhY2tzLnVubGlua0JhY2tsaW5rc01haW5cblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19hcGkucGFyYW1zID0gcGFyYW1zO1xuXHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1zLnVubGlua19maWxlKSB7XG5cdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRsaXN0OiAnaW1hZ2V1c2FnZScsXG5cdFx0XHRcdFx0aXV0aXRsZTogcGFyYW1zLnBhZ2UsXG5cdFx0XHRcdFx0aXVsaW1pdDogJ21heCcsIC8vIDUwMCBpcyBtYXggZm9yIG5vcm1hbCB1c2VycywgNTAwMCBmb3IgYm90cyBhbmQgc3lzb3BzXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0eXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmraPlnKjojrflj5bmlofku7bpk77lhaUnLCAn5q2j5Zyo5Y+W5b6X5qqU5qGI6YCj5YWlJyksXG5cdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFja3MudW5saW5rSW1hZ2VJbnN0YW5jZXNNYWluXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHBhcmFtcztcblx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy5kZWxldGVfcGFnZSkge1xuXHRcdFx0XHRpZiAocGFyYW1zLmRlbGV0ZV9yZWRpcmVjdHMpIHtcblx0XHRcdFx0XHRxdWVyeSA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHRpdGxlczogcGFyYW1zLnBhZ2UsXG5cdFx0XHRcdFx0XHRwcm9wOiAncmVkaXJlY3RzJyxcblx0XHRcdFx0XHRcdHJkbGltaXQ6ICdtYXgnLCAvLyA1MDAgaXMgbWF4IGZvciBub3JtYWwgdXNlcnMsIDUwMDAgZm9yIGJvdHMgYW5kIHN5c29wc1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo6I635Y+W6YeN5a6a5ZCRJywgJ+ato+WcqOWPluW+l+mHjeaWsOWwjuWQkScpLFxuXHRcdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0XHRUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrcy5kZWxldGVSZWRpcmVjdHNNYWluXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwYXJhbXMuZGVsZXRlX3RhbGspIHtcblx0XHRcdFx0XHRjb25zdCBwYWdlVGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChwYXJhbXMucGFnZSk7XG5cdFx0XHRcdFx0aWYgKHBhZ2VUaXRsZSAmJiBwYWdlVGl0bGUubmFtZXNwYWNlICUgMiA9PT0gMCAmJiBwYWdlVGl0bGUubmFtZXNwYWNlICE9PSAyKSB7XG5cdFx0XHRcdFx0XHRwYWdlVGl0bGUubmFtZXNwYWNlKys7IC8vIG5vdyBwYWdlVGl0bGUgaXMgdGhlIHRhbGsgcGFnZSB0aXRsZSFcblx0XHRcdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0XHRcdHRpdGxlczogcGFnZVRpdGxlLnRvVGV4dCgpLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOajgOafpeiuqOiuuumhtemdouaYr+WQpuWtmOWcqCcsICfmraPlnKjmqqLmn6XoqI7oq5bpoIHpnaLmmK/lkKblrZjlnKgnKSxcblx0XHRcdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUuY2FsbGJhY2tzLmRlbGV0ZVRhbGtcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMudGFsa1BhZ2UgPSBwYWdlVGl0bGUudG9UZXh0KCk7XG5cdFx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkZWxldGVSZWRpcmVjdHNNYWluOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB4bWwgPSBhcGlvYmoucmVzcG9uc2VYTUw7XG5cdFx0XHRjb25zdCBwYWdlcyA9ICQoeG1sKVxuXHRcdFx0XHQuZmluZCgncmQnKVxuXHRcdFx0XHQubWFwKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJChlbGVtZW50KS5hdHRyKCd0aXRsZScpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZ2V0KCk7XG5cdFx0XHRpZiAoIXBhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCByZWRpcmVjdERlbGV0ZXIgPSBuZXcgTW9yZWJpdHMuYmF0Y2hPcGVyYXRpb24oXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5Yig6Zmk5YiwICcsICfmraPlnKjliKrpmaTliLAgJykgK1xuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMucGFnZSArXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCcg55qE6YeN5a6a5ZCRJywgJyDnmoTph43mlrDlsI7lkJEnKVxuXHRcdFx0KTtcblx0XHRcdHJlZGlyZWN0RGVsZXRlci5zZXRPcHRpb24oJ2NodW5rU2l6ZScsIFR3aW5rbGUuZ2V0UHJlZignYmF0Y2hDaHVua3MnKSk7XG5cdFx0XHRyZWRpcmVjdERlbGV0ZXIuc2V0UGFnZUxpc3QocGFnZXMpO1xuXHRcdFx0cmVkaXJlY3REZWxldGVyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOWIoOmZpCAnLCAn5q2j5Zyo5Yiq6ZmkICcpICsgcGFnZU5hbWVcblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdGBbW0xJQjpDU0QjRzl8RzldXTogJHt3aW5kb3cud2dVTFMoJ+aMh+WQkeW3suWIoOmhtemdouKAnCcsICfmjIflkJHlt7LliKrpoIHpnaLjgIwnKX0ke2FwaW9iai5wYXJhbXMucGFnZX0ke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfigJ3nmoTph43lrprlkJEnLFxuXHRcdFx0XHRcdFx0J+OAjeeahOmHjeaWsOWwjuWQkSdcblx0XHRcdFx0XHQpfWBcblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLmRlbGV0ZVBhZ2UocmVkaXJlY3REZWxldGVyLndvcmtlclN1Y2Nlc3MsIHJlZGlyZWN0RGVsZXRlci53b3JrZXJGYWlsdXJlKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0ZGVsZXRlVGFsazogKGFwaW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgeG1sID0gYXBpb2JqLnJlc3BvbnNlWE1MO1xuXHRcdFx0Y29uc3QgZXhpc3RzID0gJCh4bWwpLmZpbmQoJ3BhZ2U6bm90KFttaXNzaW5nXSknKS5sZW5ndGggPiAwO1xuXHRcdFx0aWYgKCFleGlzdHMpIHtcblx0XHRcdFx0Ly8gbm8gdGFsayBwYWdlOyBmb3JnZXQgYWJvdXQgaXRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdGFwaW9iai5wYXJhbXMudGFsa1BhZ2UsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5Yig6Zmk6aG16Z2iICcsICfmraPlnKjliKrpmaTpoIHpnaIgJykgK1xuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMucGFnZSArXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCcg55qE6K6o6K666aG1JywgJyDnmoToqI7oq5bpoIEnKVxuXHRcdFx0KTtcblx0XHRcdHBhZ2Uuc2V0RWRpdFN1bW1hcnkoXG5cdFx0XHRcdGBbW0xJQjpDU0QjRzl8RzldXTogJHt3aW5kb3cud2dVTFMoJ+W3suWIoOmhtemdouKAnCcsICflt7LliKrpoIHpnaLjgIwnKX0ke2FwaW9iai5wYXJhbXMucGFnZX0ke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn4oCd55qEW1tIZWxwOuiuqOiuuumhtXzorqjorrrpobVdXScsXG5cdFx0XHRcdFx0J+OAjeeahFtbSGVscDroqI7oq5bpoIF86KiO6KuW6aCBXV0nXG5cdFx0XHRcdCl9YFxuXHRcdFx0KTtcblx0XHRcdHBhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZS5kZWxldGVQYWdlKCk7XG5cdFx0fSxcblx0XHR1bmxpbmtCYWNrbGlua3NNYWluOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB4bWwgPSBhcGlvYmoucmVzcG9uc2VYTUw7XG5cdFx0XHRjb25zdCBwYWdlcyA9ICQoeG1sKVxuXHRcdFx0XHQuZmluZCgnYmwnKVxuXHRcdFx0XHQubWFwKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJChlbGVtZW50KS5hdHRyKCd0aXRsZScpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZ2V0KCk7XG5cdFx0XHRpZiAoIXBhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB1bmxpbmtlciA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbihcblx0XHRcdFx0YOato+WcqOWPlua2iOWIsCAke2FwaW9iai5wYXJhbXMucGFnZX0ke3dpbmRvdy53Z1VMUygnIOeahOmTvuWFpScsICcg55qE6YCj5YWlJyl9YFxuXHRcdFx0KTtcblx0XHRcdHVubGlua2VyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHRcdHVubGlua2VyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRcdHVubGlua2VyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHRg5q2j5Zyo5Y+W5raIICR7cGFnZU5hbWV9JHt3aW5kb3cud2dVTFMoJyDkuIrnmoTpk77lhaUnLCAnIOS4iueahOmAo+WFpScpfWBcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRcdC4uLmFwaW9iai5wYXJhbXMsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHBhcmFtcy50aXRsZSA9IHBhZ2VOYW1lO1xuXHRcdFx0XHRwYXJhbXMudW5saW5rZXIgPSB1bmxpbmtlcjtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrcy51bmxpbmtCYWNrbGlua3MpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHR1bmxpbmtCYWNrbGlua3M6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0aWYgKCFwYWdlb2JqLmV4aXN0cygpKSB7XG5cdFx0XHRcdC8vIHdlIHByb2JhYmx5IGp1c3QgZGVsZXRlZCBpdCwgYXMgYSByZWN1cnNpdmUgYmFja2xpbmtcblx0XHRcdFx0cGFyYW1zLnVubGlua2VyLndvcmtlclN1Y2Nlc3MocGFnZW9iaik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCB0ZXh0O1xuXHRcdFx0aWYgKHBhcmFtcy50aXRsZSBpbiBUd2lua2xlLmJhdGNoZGVsZXRlLnVubGlua0NhY2hlKSB7XG5cdFx0XHRcdHRleHQgPSBUd2lua2xlLmJhdGNoZGVsZXRlLnVubGlua0NhY2hlW3BhcmFtcy50aXRsZV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb2xkX3RleHQgPSB0ZXh0O1xuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2l0ZXh0LnBhZ2UodGV4dCk7XG5cdFx0XHR0ZXh0ID0geXNhcmNoaXZlc19wYWdlLnJlbW92ZUxpbmsocGFyYW1zLnBhZ2UpLmdldFRleHQoKTtcblx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUudW5saW5rQ2FjaGVbcGFyYW1zLnRpdGxlXSA9IHRleHQ7XG5cdFx0XHRpZiAodGV4dCA9PT0gb2xkX3RleHQpIHtcblx0XHRcdFx0Ly8gTm90aGluZyB0byBkbywgcmV0dXJuXG5cdFx0XHRcdHBhcmFtcy51bmxpbmtlci53b3JrZXJTdWNjZXNzKHBhZ2VvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WPlua2iOWIsOW3suWIoOmhtemdoicsICflj5bmtojliLDlt7LliKrpoIHpnaInKSArIHBhcmFtcy5wYWdlICsgd2luZG93LndnVUxTKCfnmoTpk77lhaUnLCAn55qE6YCj5YWlJylcblx0XHRcdCk7XG5cdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQodGV4dCk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2V0TWF4Q29uZmxpY3RSZXRyaWVzKDEwKTtcblx0XHRcdHBhZ2VvYmouc2F2ZShwYXJhbXMudW5saW5rZXIud29ya2VyU3VjY2VzcywgcGFyYW1zLnVubGlua2VyLndvcmtlckZhaWx1cmUpO1xuXHRcdH0sXG5cdFx0dW5saW5rSW1hZ2VJbnN0YW5jZXNNYWluOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB4bWwgPSBhcGlvYmoucmVzcG9uc2VYTUw7XG5cdFx0XHRjb25zdCBwYWdlcyA9ICQoeG1sKVxuXHRcdFx0XHQuZmluZCgnaXUnKVxuXHRcdFx0XHQubWFwKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJChlbGVtZW50KS5hdHRyKCd0aXRsZScpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZ2V0KCk7XG5cdFx0XHRpZiAoIXBhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB1bmxpbmtlciA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbihcblx0XHRcdFx0YOato+WcqOWPlua2iOWIsCAke2FwaW9iai5wYXJhbXMucGFnZX0ke3dpbmRvdy53Z1VMUygnIOeahOmTvuWFpScsICcg55qE6YCj5YWlJyl9YFxuXHRcdFx0KTtcblx0XHRcdHVubGlua2VyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHRcdHVubGlua2VyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRcdHVubGlua2VyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHRg5Y+W5raIICR7cGFnZU5hbWV9JHt3aW5kb3cud2dVTFMoJyDnmoTmlofku7bkvb/nlKgnLCAnIOeahOaqlOahiOS9v+eUqCcpfWBcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRcdC4uLmFwaW9iai5wYXJhbXMsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHBhcmFtcy50aXRsZSA9IHBhZ2VOYW1lO1xuXHRcdFx0XHRwYXJhbXMudW5saW5rZXIgPSB1bmxpbmtlcjtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrcy51bmxpbmtJbWFnZUluc3RhbmNlcyk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHVubGlua0ltYWdlSW5zdGFuY2VzOiAocGFnZW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGlmICghcGFnZW9iai5leGlzdHMoKSkge1xuXHRcdFx0XHQvLyB3ZSBwcm9iYWJseSBqdXN0IGRlbGV0ZWQgaXQsIGFzIGEgcmVjdXJzaXZlIGJhY2tsaW5rXG5cdFx0XHRcdHBhcmFtcy51bmxpbmtlci53b3JrZXJTdWNjZXNzKHBhZ2VvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbWFnZSA9IHBhcmFtcy5wYWdlLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7TW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoNil9OmApLCAnJyk7XG5cdFx0XHRsZXQgdGV4dDtcblx0XHRcdGlmIChwYXJhbXMudGl0bGUgaW4gVHdpbmtsZS5iYXRjaGRlbGV0ZS51bmxpbmtDYWNoZSkge1xuXHRcdFx0XHR0ZXh0ID0gVHdpbmtsZS5iYXRjaGRlbGV0ZS51bmxpbmtDYWNoZVtwYXJhbXMudGl0bGVdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9sZF90ZXh0ID0gdGV4dDtcblx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpdGV4dC5wYWdlKHRleHQpO1xuXHRcdFx0dGV4dCA9IHlzYXJjaGl2ZXNfcGFnZVxuXHRcdFx0XHQuY29tbWVudE91dEltYWdlKGltYWdlLCB3aW5kb3cud2dVTFMoJ+WboOaWh+S7tuW3suWIoO+8jOaVheazqOinoycsICflm6DmqpTmoYjlt7LliKrvvIzmlYXoqLvop6MnKSlcblx0XHRcdFx0LmdldFRleHQoKTtcblx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUudW5saW5rQ2FjaGVbcGFyYW1zLnRpdGxlXSA9IHRleHQ7XG5cdFx0XHRpZiAodGV4dCA9PT0gb2xkX3RleHQpIHtcblx0XHRcdFx0cGFnZW9ialxuXHRcdFx0XHRcdC5nZXRTdGF0dXNFbGVtZW50KClcblx0XHRcdFx0XHQuZXJyb3IoXG5cdFx0XHRcdFx0XHRg5ZyoICR7cGFnZW9iai5nZXRQYWdlTmFtZSgpfSDkuIrlj5bmtoggJHtpbWFnZX0ke3dpbmRvdy53Z1VMUygnIOeahOaWh+S7tuS9v+eUqOWksei0pScsICcg55qE5qqU5qGI5L2/55So5aSx5pWXJyl9YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdHBhcmFtcy51bmxpbmtlci53b3JrZXJGYWlsdXJlKHBhZ2VvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WPlua2iOS9v+eUqOW3suiiq+WIoOmZpOaWh+S7ticsICflj5bmtojkvb/nlKjlt7LooqvliKrpmaTmqpTmoYgnKSArXG5cdFx0XHRcdFx0aW1hZ2UgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn77yM5Zug5Li677yaJywgJ++8jOWboOeCuu+8micpICtcblx0XHRcdFx0XHRwYXJhbXMucmVhc29uXG5cdFx0XHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ25vY3JlYXRlJyk7XG5cdFx0XHRwYWdlb2JqLnNldE1heENvbmZsaWN0UmV0cmllcygxMCk7XG5cdFx0XHRwYWdlb2JqLnNhdmUocGFyYW1zLnVubGlua2VyLndvcmtlclN1Y2Nlc3MsIHBhcmFtcy51bmxpbmtlci53b3JrZXJGYWlsdXJlKTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmJhdGNoZGVsZXRlLCAnYmF0Y2hkZWxldGUnKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlYmF0Y2h1bmRlbGV0ZS5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGViYXRjaHVuZGVsZXRlKCQpIHtcblx0LyoqXG5cdCAqIHR3aW5rbGViYXRjaHVuZGVsZXRlLmpzOiBCYXRjaCB1bmRlbGV0ZSBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiVW5kLWJhdGNoXCIpXG5cdCAqIEFjdGl2ZSBvbjogRXhpc3RpbmcgdXNlciBhbmQgcHJvamVjdCBwYWdlc1xuXHQgKi9cblx0VHdpbmtsZS5iYXRjaHVuZGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdCFNb3JlYml0cy51c2VySXNTeXNvcCB8fFxuXHRcdFx0IW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgfHxcblx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpICE9PSBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpLnVzZXIgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSAhPT0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKS5wcm9qZWN0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0VHdpbmtsZS5iYXRjaHVuZGVsZXRlLmNhbGxiYWNrLFxuXHRcdFx0d2luZG93LndnVUxTKCfmibnlpI0nLCAn5om55b6pJyksXG5cdFx0XHQndHctYmF0Y2gtdW5kZWwnLFxuXHRcdFx0d2luZG93LndnVUxTKCflj43liKDpmaTpobXpnaInLCAn5Y+N5Yiq6Zmk6aCB6Z2iJylcblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLmJhdGNodW5kZWxldGUuY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgV2luZG93ID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MDAsIDQwMCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCfmibnph4/lj43liKDpmaQnLCAn5om55qyh5Y+N5Yiq6ZmkJykpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygnVHdpbmtsZeW4ruWKqScsICdUd2lua2xl6Kqq5piOJyksICdIOlRXL0RPQyNiYXRjaHVuZGVsZXRlJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS5iYXRjaHVuZGVsZXRlLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Iul5a2Y5Zyo5bey5Yig6Zmk55qE6K6o6K666aG177yM5Lmf5oGi5aSNJywgJ+iLpeWtmOWcqOW3suWIqumZpOeahOiojuirlumgge+8jOS5n+aBouW+qScpLFxuXHRcdFx0XHRcdG5hbWU6ICd1bmRlbF90YWxrJyxcblx0XHRcdFx0XHR2YWx1ZTogJ3VuZGVsX3RhbGsnLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdGxhYmVsOiAn55CG55Sx77yaJyxcblx0XHRcdHNpemU6IDYwLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHN0YXR1c2RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdHN0YXR1c2Rpdi5zdHlsZS5wYWRkaW5nID0gJzE1cHgnOyAvLyBqdXN0IHNvIGl0IGRvZXNuJ3QgbG9vayBicm9rZW5cblx0XHRXaW5kb3cuc2V0Q29udGVudChzdGF0dXNkaXYpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KHN0YXR1c2Rpdik7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGdlbmVyYXRvcjogJ2xpbmtzJyxcblx0XHRcdHByb3A6ICdpbmZvJyxcblx0XHRcdGlucHJvcDogJ3Byb3RlY3Rpb24nLFxuXHRcdFx0dGl0bGVzOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRncGxsaW1pdDogVHdpbmtsZS5nZXRQcmVmKCdiYXRjaE1heCcpLFxuXHRcdH07XG5cdFx0Y29uc3Qgc3RhdGVsZW0gPSBuZXcgTW9yZWJpdHMuc3RhdHVzKHdpbmRvdy53Z1VMUygn5oqT5Y+W6aG16Z2i5YiX6KGoJywgJ+aKk+WPlumggemdouWIl+ihqCcpKTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg6L295Lit4oCmJywgJ+i8ieWFpeS4reKApicpLFxuXHRcdFx0cXVlcnksXG5cdFx0XHQoYXBpb2JqKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdFx0Y29uc3QgJHBhZ2VzID0gJCh4bWwpLmZpbmQoJ3BhZ2VbbWlzc2luZ10nKTtcblx0XHRcdFx0Y29uc3QgbGlzdCA9IFtdO1xuXHRcdFx0XHQkcGFnZXMuZWFjaCgoX2luZGV4LCBwYWdlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgJHBhZ2UgPSAkKHBhZ2UpO1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gJHBhZ2UuYXR0cigndGl0bGUnKTtcblx0XHRcdFx0XHRjb25zdCAkZWRpdHByb3QgPSAkcGFnZS5maW5kKCdwclt0eXBlPVwiY3JlYXRlXCJdW2xldmVsPVwic3lzb3BcIl0nKTtcblx0XHRcdFx0XHRjb25zdCBpc1Byb3RlY3RlZCA9ICRlZGl0cHJvdC5sZW5ndGggPiAwO1xuXHRcdFx0XHRcdGxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRsYWJlbDpcblx0XHRcdFx0XHRcdFx0dGl0bGUgK1xuXHRcdFx0XHRcdFx0XHQoaXNQcm90ZWN0ZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGDvvIgke3dpbmRvdy53Z1VMUygn5YWo5L+d5oqk77yMJywgJ+WFqOS/neitt++8jCcpfSR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCRlZGl0cHJvdC5hdHRyKCdleHBpcnknKSA9PT0gJ2luZmluaXR5J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCfml6DpmZDmnJ8nLCAn54Sh6ZmQ5pyfJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IGAke25ldyBNb3JlYml0cy5kYXRlKCRlZGl0cHJvdC5hdHRyKCdleHBpcnknKSkuY2FsZW5kYXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1dGMnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfSAoVVRDKSR7d2luZG93LndnVUxTKCfov4fmnJ8nLCAn6YGO5pyfJyl9YFxuXHRcdFx0XHRcdFx0XHRcdFx0fe+8iWBcblx0XHRcdFx0XHRcdFx0XHQ6ICcnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiB0aXRsZSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRzdHlsZTogaXNQcm90ZWN0ZWQgPyAnY29sb3I6ICNmMDAnIDogJycsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvoXmgaLlpI3pobXpnaInLCAn5b6F5oGi5b6p6aCB6Z2iJyksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhajpgIknLCAn5YWo6YG4JyksXG5cdFx0XHRcdFx0ZXZlbnQ6IChlKSA9PiB7XG5cdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAncGFnZXMnKSkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhajkuI3pgIknLCAn5YWo5LiN6YG4JyksXG5cdFx0XHRcdFx0ZXZlbnQ6IChlKSA9PiB7XG5cdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAncGFnZXMnKSkucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YXBpb2JqLnBhcmFtcy5mb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRuYW1lOiAncGFnZXMnLFxuXHRcdFx0XHRcdHNoaWZ0Q2xpY2tTdXBwb3J0OiB0cnVlLFxuXHRcdFx0XHRcdGxpc3QsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGFwaW9iai5wYXJhbXMuZm9ybS5yZW5kZXIoKTtcblx0XHRcdFx0YXBpb2JqLnBhcmFtcy5XaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFx0fSxcblx0XHRcdHN0YXRlbGVtXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHRmb3JtLFxuXHRcdFx0V2luZG93LFxuXHRcdH07XG5cdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHR9O1xuXHRUd2lua2xlLmJhdGNodW5kZWxldGUuY2FsbGJhY2suZXZhbHVhdGUgPSAoZXZlbnQpID0+IHtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+WPjeWIoOmZpOW3suWujOaIkCcsICflj43liKrpmaTlt7LlrozmiJAnKTtcblx0XHRjb25zdCBudW1Qcm90ZWN0ZWQgPSAkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhldmVudC50YXJnZXQsICdwYWdlcycpKS5maWx0ZXIoKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQuY2hlY2tlZCAmJiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5zdHlsZS5jb2xvciA9PT0gJ3JlZCc7XG5cdFx0fSkubGVuZ3RoO1xuXHRcdGlmIChcblx0XHRcdG51bVByb3RlY3RlZCA+IDAgJiZcblx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aCqOato+imgeWPjeWIoOmZpCAnLCAn5oKo5q2j6KaB5Y+N5Yiq6ZmkICcpICtcblx0XHRcdFx0XHRudW1Qcm90ZWN0ZWQgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOS4quWFqOS/neaKpOmhtemdou+8jOaCqOehruWumuWQl++8nycsICcg5YCL5YWo5L+d6K236aCB6Z2i77yM5oKo56K65a6a5ZeO77yfJylcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcGFnZXMgPSBldmVudC50YXJnZXQuZ2V0Q2hlY2tlZCgncGFnZXMnKTtcblx0XHRjb25zdCByZWFzb24gPSBldmVudC50YXJnZXQucmVhc29uLnZhbHVlO1xuXHRcdGNvbnN0IHVuZGVsX3RhbGsgPSBldmVudC50YXJnZXQucmVhc29uLnZhbHVlO1xuXHRcdGlmICghcmVhc29uKSB7XG5cdFx0XHRtdy5ub3RpZnkoJ+aCqOmcgOimgeaMh+WumueQhueUseOAgicsIHtcblx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHR0YWc6ICd0d2lua2xlYmF0Y2h1bmRlbGV0ZScsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChldmVudC50YXJnZXQpO1xuXHRcdGlmICghcGFnZXMpIHtcblx0XHRcdE1vcmViaXRzLnN0YXR1cy5lcnJvcihcblx0XHRcdFx0d2luZG93LndnVUxTKCfplJnor68nLCAn6Yyv6KqkJyksXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5rKh5LuA5LmI6KaB5Y+N5Yig6Zmk55qE77yM5Y+W5raI5pON5L2cJywgJ+aykuS7gOm6vOimgeWPjeWIqumZpOeahO+8jOWPlua2iOaTjeS9nCcpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwYWdlVW5kZWxldGVyID0gbmV3IE1vcmViaXRzLmJhdGNoT3BlcmF0aW9uKHdpbmRvdy53Z1VMUygn5Y+N5Yig6Zmk6aG16Z2iJywgJ+WPjeWIqumZpOmggemdoicpKTtcblx0XHRwYWdlVW5kZWxldGVyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHRwYWdlVW5kZWxldGVyLnNldE9wdGlvbigncHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMnLCB0cnVlKTtcblx0XHRwYWdlVW5kZWxldGVyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRwYWdlVW5kZWxldGVyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0cGFnZTogcGFnZU5hbWUsXG5cdFx0XHRcdHVuZGVsX3RhbGssXG5cdFx0XHRcdHJlYXNvbixcblx0XHRcdFx0cGFnZVVuZGVsZXRlcixcblx0XHRcdH07XG5cdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0d2luZG93LndnVUxTKCflj43liKDpmaTpobXpnaInLCAn5Y+N5Yiq6Zmk6aCB6Z2iJykgKyBwYWdlTmFtZVxuXHRcdFx0KTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRFZGl0U3VtbWFyeShgJHtyZWFzb259ICjmibnph48pYCk7XG5cdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnN1cHByZXNzUHJvdGVjdFdhcm5pbmcoKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRNYXhSZXRyaWVzKDMpOyAvLyB0ZW1wb3JhcnkgaW5jcmVhc2UgZnJvbSAyIHRvIG1ha2UgYmF0Y2h1bmRlbGV0ZSBtb3JlIGxpa2VseSB0byBzdWNjZWVkXG5cdFx0XHR5c2FyY2hpdmVzX3BhZ2UudW5kZWxldGVQYWdlKFR3aW5rbGUuYmF0Y2h1bmRlbGV0ZS5jYWxsYmFja3MuZG9FeHRyYXMsIHBhZ2VVbmRlbGV0ZXIud29ya2VyRmFpbHVyZSk7XG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2h1bmRlbGV0ZS5jYWxsYmFja3MgPSB7XG5cdFx0Ly8gdGhpcyBzdHVwaWQgcGFyYW1ldGVyIG5hbWUgaXMgYSB0ZW1wb3JhcnkgdGhpbmcgdW50aWwgSSBpbXBsZW1lbnQgYW4gb3ZlcmhhdWxcblx0XHQvLyBvZiBNb3JlYml0cy53aWtpLiogY2FsbGJhY2sgcGFyYW1ldGVyc1xuXHRcdGRvRXh0cmFzOiAodGhpbmdXaXRoUGFyYW1ldGVycykgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gdGhpbmdXaXRoUGFyYW1ldGVycy5wYXJlbnRcblx0XHRcdFx0PyB0aGluZ1dpdGhQYXJhbWV0ZXJzLnBhcmVudC5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKVxuXHRcdFx0XHQ6IHRoaW5nV2l0aFBhcmFtZXRlcnMuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHQvLyB0aGUgaW5pdGlhbCBiYXRjaCBvcGVyYXRpb24ncyBqb2IgaXMgdG8gZGVsZXRlIHRoZSBwYWdlLCBhbmQgdGhhdCBoYXNcblx0XHRcdC8vIHN1Y2NlZWRlZCBieSBub3dcblx0XHRcdHBhcmFtcy5wYWdlVW5kZWxldGVyLndvcmtlclN1Y2Nlc3ModGhpbmdXaXRoUGFyYW1ldGVycyk7XG5cdFx0XHRsZXQgcXVlcnk7XG5cdFx0XHRsZXQgeXNhcmNoaXZlc19hcGk7XG5cdFx0XHRpZiAocGFyYW1zLnVuZGVsX3RhbGspIHtcblx0XHRcdFx0Y29uc3QgdGFsa3BhZ2VuYW1lID0gbmV3IG13LlRpdGxlKHBhcmFtcy5wYWdlKS5nZXRUYWxrUGFnZSgpLmdldFByZWZpeGVkVGV4dCgpO1xuXHRcdFx0XHRpZiAodGFsa3BhZ2VuYW1lICE9PSBwYXJhbXMucGFnZSkge1xuXHRcdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdFx0cHJvcDogJ2RlbGV0ZWRyZXZpc2lvbnMnLFxuXHRcdFx0XHRcdFx0ZHJ2cHJvcDogJ2lkcycsXG5cdFx0XHRcdFx0XHRkcnZsaW1pdDogMSxcblx0XHRcdFx0XHRcdHRpdGxlczogdGFsa3BhZ2VuYW1lLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ajgOafpeiuqOiuuumhteeahOW3suWIoOeJiOacrCcsICfmqqLmn6XoqI7oq5bpoIHnmoTlt7LliKrniYjmnKwnKSxcblx0XHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdFx0VHdpbmtsZS5iYXRjaHVuZGVsZXRlLmNhbGxiYWNrcy51bmRlbGV0ZVRhbGtcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHBhcmFtcztcblx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMudGFsa1BhZ2UgPSB0YWxrcGFnZW5hbWU7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR1bmRlbGV0ZVRhbGs6IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGNvbnN0IGV4aXN0cyA9ICQoeG1sKS5maW5kKCdwYWdlOm5vdChbbWlzc2luZ10pJykubGVuZ3RoID4gMDtcblx0XHRcdGNvbnN0IGRlbHJldnMgPSAkKHhtbCkuZmluZCgncmV2JykuYXR0cigncmV2aWQnKTtcblx0XHRcdGlmIChleGlzdHMgfHwgIWRlbHJldnMpIHtcblx0XHRcdFx0Ly8gcGFnZSBleGlzdHMgb3IgaGFzIG5vIGRlbGV0ZWQgcmV2aXNpb25zOyBmb3JnZXQgYWJvdXQgaXRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdGFwaW9iai5wYXJhbXMudGFsa1BhZ2UsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5Y+N5Yig6ZmkJywgJ+ato+WcqOWPjeWIqumZpCcpICsgYXBpb2JqLnBhcmFtcy5wYWdlICsgd2luZG93LndnVUxTKCfnmoTorqjorrrpobUnLCAn55qE6KiO6KuW6aCBJylcblx0XHRcdCk7XG5cdFx0XHRwYWdlLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WPjeWIoOmZpOKAnCcsICflj43liKrpmaTjgIwnKSArXG5cdFx0XHRcdFx0YXBpb2JqLnBhcmFtcy5wYWdlICtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+KAneeahFtbSGVscDrorqjorrrpobV86K6o6K666aG1XV0nLCAn44CN55qEW1tIZWxwOuiojuirlumggXzoqI7oq5bpoIFdXScpXG5cdFx0XHQpO1xuXHRcdFx0cGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlLnVuZGVsZXRlUGFnZSgpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUuYmF0Y2h1bmRlbGV0ZSwgJ2JhdGNodW5kZWxldGUnKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuXG4vKiEgVHdpbmtsZS5qcyAtIHR3aW5rbGViYXRjaHByb3RlY3QuanMgKi9cbihmdW5jdGlvbiB0d2lua2xlYmF0Y2hwcm90ZWN0KCQpIHtcblx0LyoqXG5cdCAqIHR3aW5rbGViYXRjaHByb3RlY3QuanM6IEJhdGNoIHByb3RlY3QgbW9kdWxlIChzeXNvcHMgb25seSlcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiUC1iYXRjaFwiKVxuXHQgKiBBY3RpdmUgb246IEV4aXN0aW5nIHByb2plY3QgcGFnZXMgYW5kIHVzZXIgcGFnZXM7XG5cdCAqIGV4aXN0aW5nIGFuZCBub24tZXhpc3RpbmcgY2F0ZWdvcmllczsgU3BlY2lhbDpQcmVmaXhJbmRleFxuXHQgKi9cblx0VHdpbmtsZS5iYXRjaHByb3RlY3QgPSAoKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0TW9yZWJpdHMudXNlcklzU3lzb3AgJiZcblx0XHRcdCgobXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKSA+IDAgJiYgWzIsIDRdLmluY2x1ZGVzKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykpKSB8fFxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAxNCB8fFxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnUHJlZml4aW5kZXgnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhUd2lua2xlLmJhdGNocHJvdGVjdC5jYWxsYmFjaywgJ+aJueS/nScsICd0dy1wYmF0Y2gnLCAn5om56YeP5L+d5oqk6ZO+5Ye66aG16Z2iJyk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmJhdGNocHJvdGVjdC51bmxpbmtDYWNoZSA9IHt9O1xuXHRUd2lua2xlLmJhdGNocHJvdGVjdC5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgNDAwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUoJ+aJueS/nScpO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3RlckxpbmsoJ+S/neaKpOadoeS+iycsICdMSUI6UFJPVCcpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5biu5Yqp5paH5qGjJywgJ+W5q+WKqeaWh+aqlCcpLCAnSDpUVy9ET0Mj5L+d5oqkJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCfpl67popjlj43ppognLCAn5ZWP6aGM5Y+N6aWLJyksICdIVDpUVycpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUuYmF0Y2hwcm90ZWN0LmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLmVkaXRtb2RpZnksXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJ+S/ruaUuee8lui+keS/neaKpCcsXG5cdFx0XHRcdFx0dmFsdWU6ICdlZGl0bW9kaWZ5Jyxcblx0XHRcdFx0XHRuYW1lOiAnZWRpdG1vZGlmeScsXG5cdFx0XHRcdFx0dG9vbHRpcDogJ+S7hemZkOeOsOaciemhtemdouOAgicsXG5cdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRuYW1lOiAnZWRpdGxldmVsJyxcblx0XHRcdGxhYmVsOiAn57yW6L6R5p2D6ZmQ77yaJyxcblx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5lZGl0bGV2ZWwsXG5cdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxldmVscyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdG5hbWU6ICdlZGl0ZXhwaXJ5Jyxcblx0XHRcdGxhYmVsOiAn57uI5q2i5pe26Ze077yaJyxcblx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZG9DdXN0b21FeHBpcnkoZXZlbnQudGFyZ2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGxpc3Q6IFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uTGVuZ3RocywgLy8gRGVmYXVsdCAoMiBkYXlzKSBzZXQgYWZ0ZXIgcmVuZGVyXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5tb3ZlbW9kaWZ5LFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICfkv67mlLnnp7vliqjkv53miqQnLFxuXHRcdFx0XHRcdHZhbHVlOiAnbW92ZW1vZGlmeScsXG5cdFx0XHRcdFx0bmFtZTogJ21vdmVtb2RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6ICfku4XpmZDnjrDmnInpobXpnaLjgIInLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ21vdmVsZXZlbCcsXG5cdFx0XHRsYWJlbDogJ+enu+WKqOadg+mZkO+8micsXG5cdFx0XHRldmVudDogVHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMubW92ZWxldmVsLFxuXHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZXZlbHMuZmlsdGVyKFxuXHRcdFx0XHQvLyBBdXRvY29uZmlybWVkIGlzIHJlcXVpcmVkIGZvciBhIG1vdmUsIHJlZHVuZGFudFxuXHRcdFx0XHQocHJvdExldmVsKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3RMZXZlbC52YWx1ZSAhPT0gJ2F1dG9jb25maXJtZWQnO1xuXHRcdFx0XHR9XG5cdFx0XHQpLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ21vdmVleHBpcnknLFxuXHRcdFx0bGFiZWw6ICfnu4jmraLml7bpl7TvvJonLFxuXHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQudGFyZ2V0LnZhbHVlID09PSAnY3VzdG9tJykge1xuXHRcdFx0XHRcdFR3aW5rbGUucHJvdGVjdC5kb0N1c3RvbUV4cGlyeShldmVudC50YXJnZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZW5ndGhzLCAvLyBEZWZhdWx0ICgyIGRheXMpIHNldCBhZnRlciByZW5kZXJcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRldmVudC50YXJnZXQuZm9ybS5jcmVhdGVsZXZlbC5kaXNhYmxlZCA9ICFldmVudC50YXJnZXQuY2hlY2tlZDtcblx0XHRcdFx0ZXZlbnQudGFyZ2V0LmZvcm0uY3JlYXRlZXhwaXJ5LmRpc2FibGVkID1cblx0XHRcdFx0XHQhZXZlbnQudGFyZ2V0LmNoZWNrZWQgfHwgZXZlbnQudGFyZ2V0LmZvcm0uY3JlYXRlbGV2ZWwudmFsdWUgPT09ICdhbGwnO1xuXHRcdFx0XHRldmVudC50YXJnZXQuZm9ybS5jcmVhdGVsZXZlbC5zdHlsZS5jb2xvciA9IGV2ZW50LnRhcmdldC5jaGVja2VkID8gJycgOiAndHJhbnNwYXJlbnQnO1xuXHRcdFx0XHRldmVudC50YXJnZXQuZm9ybS5jcmVhdGVleHBpcnkuc3R5bGUuY29sb3IgPSBldmVudC50YXJnZXQuY2hlY2tlZCA/ICcnIDogJ3RyYW5zcGFyZW50Jztcblx0XHRcdH0sXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJ+S/ruaUueWIm+W7uuS/neaKpCcsXG5cdFx0XHRcdFx0dmFsdWU6ICdjcmVhdGVtb2RpZnknLFxuXHRcdFx0XHRcdG5hbWU6ICdjcmVhdGVtb2RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6ICfku4XpmZDkuI3lrZjlnKjnmoTpobXpnaLjgIInLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ2NyZWF0ZWxldmVsJyxcblx0XHRcdGxhYmVsOiAn5Yib5bu65p2D6ZmQ77yaJyxcblx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5jcmVhdGVsZXZlbCxcblx0XHRcdGxpc3Q6IFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uTGV2ZWxzLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ2NyZWF0ZWV4cGlyeScsXG5cdFx0XHRsYWJlbDogJ+e7iOatouaXtumXtO+8micsXG5cdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC50YXJnZXQudmFsdWUgPT09ICdjdXN0b20nKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmRvQ3VzdG9tRXhwaXJ5KGV2ZW50LnRhcmdldCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxlbmd0aHMsIC8vIERlZmF1bHQgKGluZGVmaW5pdGUpIHNldCBhZnRlciByZW5kZXJcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdGxhYmVsOiAnJywgLy8gaG9yaXpvbnRhbCBydWxlXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0bGFiZWw6ICfnkIbnlLHvvIjkv53miqTml6Xlv5fvvIknLFxuXHRcdFx0c2l6ZTogNjAsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRwcm9wOiAncmV2aXNpb25zfGluZm98aW1hZ2VpbmZvJyxcblx0XHRcdHJ2cHJvcDogJ3NpemV8dXNlcicsXG5cdFx0XHRpbnByb3A6ICdwcm90ZWN0aW9uJyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdH07XG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDE0KSB7XG5cdFx0XHQvLyBjYXRlZ29yaWVzXG5cdFx0XHRxdWVyeS5nZW5lcmF0b3IgPSAnY2F0ZWdvcnltZW1iZXJzJztcblx0XHRcdHF1ZXJ5LmdjbXRpdGxlID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0cXVlcnkuZ2NtbGltaXQgPSBUd2lua2xlLmdldFByZWYoJ2JhdGNoTWF4Jyk7XG5cdFx0fSBlbHNlIGlmIChtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnUHJlZml4aW5kZXgnKSB7XG5cdFx0XHRxdWVyeS5nZW5lcmF0b3IgPSAnYWxscGFnZXMnO1xuXHRcdFx0cXVlcnkuZ2FwbmFtZXNwYWNlID1cblx0XHRcdFx0bXcudXRpbC5nZXRQYXJhbVZhbHVlKCduYW1lc3BhY2UnKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbbmFtZT1uYW1lc3BhY2VdJylbMF0udmFsdWU7XG5cdFx0XHRxdWVyeS5nYXBwcmVmaXggPVxuXHRcdFx0XHRtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ByZWZpeCcpIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9cHJlZml4XScpWzBdLnZhbHVlO1xuXHRcdFx0cXVlcnkuZ2FwbGltaXQgPSBUd2lua2xlLmdldFByZWYoJ2JhdGNoTWF4Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHF1ZXJ5LmdlbmVyYXRvciA9ICdsaW5rcyc7XG5cdFx0XHRxdWVyeS50aXRsZXMgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5cdFx0XHRxdWVyeS5ncGxsaW1pdCA9IFR3aW5rbGUuZ2V0UHJlZignYmF0Y2hNYXgnKTtcblx0XHR9XG5cdFx0Y29uc3Qgc3RhdHVzZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0c3RhdHVzZGl2LnN0eWxlLnBhZGRpbmcgPSAnMTVweCc7IC8vIGp1c3Qgc28gaXQgZG9lc24ndCBsb29rIGJyb2tlblxuXHRcdFdpbmRvdy5zZXRDb250ZW50KHN0YXR1c2Rpdik7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoc3RhdHVzZGl2KTtcblx0XHRXaW5kb3cuZGlzcGxheSgpO1xuXHRcdGNvbnN0IHN0YXRlbGVtID0gbmV3IE1vcmViaXRzLnN0YXR1cygn5oqT5Y+W6aG16Z2i5YiX6KGoJyk7XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHQn5Yqg6L295Lit4oCm4oCmJyxcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0KGFwaW9iaikgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGFwaW9iai5nZXRSZXNwb25zZSgpO1xuXHRcdFx0XHRjb25zdCBwYWdlcyA9IChyZXNwb25zZS5xdWVyeSAmJiByZXNwb25zZS5xdWVyeS5wYWdlcykgfHwgW107XG5cdFx0XHRcdGNvbnN0IGxpc3QgPSBbXTtcblx0XHRcdFx0cGFnZXMuc29ydChUd2lua2xlLnNvcnRCeU5hbWVzcGFjZSk7XG5cdFx0XHRcdGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuXHRcdFx0XHRcdGNvbnN0IG1ldGFkYXRhID0gW107XG5cdFx0XHRcdFx0Y29uc3QgbWlzc2luZyA9ICEhcGFnZS5taXNzaW5nO1xuXHRcdFx0XHRcdGxldCBlZGl0UHJvdDtcblx0XHRcdFx0XHRpZiAobWlzc2luZykge1xuXHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaCgn6aG16Z2i5LiN5a2Y5ZyoJyk7XG5cdFx0XHRcdFx0XHRlZGl0UHJvdCA9IHBhZ2UucHJvdGVjdGlvblxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKChwcm90ZWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3RlY3Rpb24udHlwZSA9PT0gJ2NyZWF0ZScgJiYgcHJvdGVjdGlvbi5sZXZlbCA9PT0gJ3N5c29wJztcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnBvcCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAocGFnZS5yZWRpcmVjdCkge1xuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKCfph43lrprlkJEnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChwYWdlLm5zID09PSA2KSB7XG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhLnB1c2goYOS4iuS8oOiAhe+8miR7cGFnZS5pbWFnZWluZm9bMF0udXNlcn1gLCBg5pyA5ZCO57yW6L6R6ICF77yaJHtwYWdlLnJldmlzaW9uc1swXS51c2VyfWApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaChgJHttdy5sYW5ndWFnZS5jb252ZXJ0TnVtYmVyKHBhZ2UucmV2aXNpb25zWzBdLnNpemUpfeWtl+iKgmApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWRpdFByb3QgPSBwYWdlLnByb3RlY3Rpb25cblx0XHRcdFx0XHRcdFx0LmZpbHRlcigocHJvdGVjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm90ZWN0aW9uLnR5cGUgPT09ICdlZGl0JyAmJiBwcm90ZWN0aW9uLmxldmVsID09PSAnc3lzb3AnO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQucG9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlZGl0UHJvdCkge1xuXHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaChcblx0XHRcdFx0XHRcdFx0YCR7bWlzc2luZyA/ICfnmb3nurgnIDogJyd95YWo5L+d5oqkJHtcblx0XHRcdFx0XHRcdFx0XHRlZGl0UHJvdC5leHBpcnkgPT09ICdpbmZpbml0eSdcblx0XHRcdFx0XHRcdFx0XHRcdD8gJ++8iOawuOS5he+8iSdcblx0XHRcdFx0XHRcdFx0XHRcdDogYO+8iCR7bmV3IE1vcmViaXRzLmRhdGUoZWRpdFByb3QuZXhwaXJ5KS5jYWxlbmRhcigndXRjJyl9IChVVEMp6L+H5pyf77yJYFxuXHRcdFx0XHRcdFx0XHR9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qge3RpdGxlfSA9IHBhZ2U7XG5cdFx0XHRcdFx0bGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdGxhYmVsOiB0aXRsZSArIChtZXRhZGF0YS5sZW5ndGggPiAwID8gYCAoJHttZXRhZGF0YS5qb2luKCc7ICcpfSlgIDogJycpLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHRpdGxlLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHN0eWxlOiBlZGl0UHJvdCA/ICdjb2xvcjogI2YwMCcgOiAnJyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0bGFiZWw6ICflvoXkv53miqTpobXpnaInLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdidXR0b24nLFxuXHRcdFx0XHRcdGxhYmVsOiAn5YWo6YCJJyxcblx0XHRcdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhldmVudC50YXJnZXQuZm9ybSwgJ3BhZ2VzJykpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdidXR0b24nLFxuXHRcdFx0XHRcdGxhYmVsOiAn5YWo5LiN6YCJJyxcblx0XHRcdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhldmVudC50YXJnZXQuZm9ybSwgJ3BhZ2VzJykpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdG5hbWU6ICdwYWdlcycsXG5cdFx0XHRcdFx0c2hpZnRDbGlja1N1cHBvcnQ6IHRydWUsXG5cdFx0XHRcdFx0bGlzdCxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGZvcm0ucmVuZGVyKCk7XG5cdFx0XHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0XHRcdC8vIFNldCBkZWZhdWx0c1xuXHRcdFx0XHRyZXN1bHQuZWRpdGV4cGlyeS52YWx1ZSA9ICcyIGRheXMnO1xuXHRcdFx0XHRyZXN1bHQubW92ZWV4cGlyeS52YWx1ZSA9ICcyIGRheXMnO1xuXHRcdFx0XHRyZXN1bHQuY3JlYXRlZXhwaXJ5LnZhbHVlID0gJ2luZmluaXR5Jztcblx0XHRcdFx0Zm9yIChjb25zdCBsaW5rcyBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMocmVzdWx0LCAn5Liq6aG16Z2iJykpIHtcblx0XHRcdFx0XHRUd2lua2xlLmdlbmVyYXRlQXJyb3dMaW5rcyhsaW5rcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzdGF0ZWxlbVxuXHRcdCk7XG5cdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHR9O1xuXHRUd2lua2xlLmJhdGNocHJvdGVjdC5jdXJyZW50UHJvdGVjdENvdW50ZXIgPSAwO1xuXHRUd2lua2xlLmJhdGNocHJvdGVjdC5jdXJyZW50cHJvdGVjdG9yID0gMDtcblx0VHdpbmtsZS5iYXRjaHByb3RlY3QuY2FsbGJhY2suZXZhbHVhdGUgPSAoZXZlbnQpID0+IHtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSAn5om56YeP5L+d5oqk5a6M5oiQJztcblx0XHRjb25zdCBmb3JtID0gZXZlbnQudGFyZ2V0O1xuXHRcdGNvbnN0IG51bVByb3RlY3RlZCA9ICQoTW9yZWJpdHMucXVpY2tGb3JtLmdldEVsZW1lbnRzKGZvcm0sICfkuKrpobXpnaInKSkuZmlsdGVyKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBlbGVtZW50LmNoZWNrZWQgJiYgZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcuc3R5bGUuY29sb3IgPT09ICcjZjAwJztcblx0XHR9KS5sZW5ndGg7XG5cdFx0aWYgKFxuXHRcdFx0bnVtUHJvdGVjdGVkID4gMCAmJlxuXHRcdFx0IWNvbmZpcm0oYOaCqOWNs+WwhuWvuSR7bXcubGFuZ3VhZ2UuY29udmVydE51bWJlcihudW1Qcm90ZWN0ZWQpfeS4quWFqOS/neaKpOmhtemdoui/m+ihjOaTjeS9nOOAguaCqOehruWumuWQl++8n2ApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGlucHV0ID0gTW9yZWJpdHMucXVpY2tGb3JtLmdldElucHV0RGF0YShmb3JtKTtcblx0XHRpZiAoIWlucHV0LnJlYXNvbikge1xuXHRcdFx0bXcubm90aWZ5KCfmgqjlv4Xpobvnu5nlh7rkuIDkuKrnkIbnlLHjgIInLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZWJhdGNocHJvdGVjdCcsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRpZiAoaW5wdXQucGFnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3IoJ0Vycm9yJywgJ+W+heS/neaKpOmhtemdouS4jeWtmOWcqO+8jOeoi+W6j+e7iOatoicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBiYXRjaE9wZXJhdGlvbiA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbign5bqU55So5L+d5oqk6K6+572uJyk7XG5cdFx0YmF0Y2hPcGVyYXRpb24uc2V0T3B0aW9uKCdjaHVua1NpemUnLCBUd2lua2xlLmdldFByZWYoJ2JhdGNoQ2h1bmtzJykpO1xuXHRcdGJhdGNoT3BlcmF0aW9uLnNldE9wdGlvbigncHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMnLCB0cnVlKTtcblx0XHRiYXRjaE9wZXJhdGlvbi5zZXRQYWdlTGlzdChpbnB1dC5wYWdlcyk7XG5cdFx0YmF0Y2hPcGVyYXRpb24ucnVuKChwYWdlTmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0dGl0bGVzOiBwYWdlTmFtZSxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdGDmraPlnKjmo4Dmn6XpobXpnaLigJwke3BhZ2VOYW1lfeKAneaYr+WQpuWtmOWcqGAsXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRUd2lua2xlLmJhdGNocHJvdGVjdC5jYWxsYmFja3MubWFpbixcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0YmF0Y2hPcGVyYXRpb24ud29ya2VyRmFpbHVyZVxuXHRcdFx0KTtcblx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHtcblx0XHRcdFx0cGFnZTogcGFnZU5hbWUsXG5cdFx0XHRcdGJhdGNoT3BlcmF0aW9uLFxuXHRcdFx0XHQuLi5pbnB1dCxcblx0XHRcdH07XG5cdFx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2hwcm90ZWN0LmNhbGxiYWNrcyA9IHtcblx0XHRtYWluOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGFwaW9iai5nZXRSZXNwb25zZSgpO1xuXHRcdFx0aWYgKHJlc3BvbnNlLnF1ZXJ5Lm5vcm1hbGl6ZWQpIHtcblx0XHRcdFx0YXBpb2JqLnBhcmFtcy5wYWdlID0gcmVzcG9uc2UucXVlcnkubm9ybWFsaXplZFswXS50bztcblx0XHRcdH1cblx0XHRcdGNvbnN0IGV4aXN0cyA9ICFyZXNwb25zZS5xdWVyeS5wYWdlc1swXS5taXNzaW5nO1xuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoYXBpb2JqLnBhcmFtcy5wYWdlLCBg5q2j5Zyo5L+d5oqkJHthcGlvYmoucGFyYW1zLnBhZ2V9YCk7XG5cdFx0XHRsZXQgdGFrZW5BY3Rpb24gPSBmYWxzZTtcblx0XHRcdGlmIChleGlzdHMgJiYgYXBpb2JqLnBhcmFtcy5lZGl0bW9kaWZ5KSB7XG5cdFx0XHRcdHBhZ2Uuc2V0RWRpdFByb3RlY3Rpb24oYXBpb2JqLnBhcmFtcy5lZGl0bGV2ZWwsIGFwaW9iai5wYXJhbXMuZWRpdGV4cGlyeSk7XG5cdFx0XHRcdHRha2VuQWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChleGlzdHMgJiYgYXBpb2JqLnBhcmFtcy5tb3ZlbW9kaWZ5KSB7XG5cdFx0XHRcdHBhZ2Uuc2V0TW92ZVByb3RlY3Rpb24oYXBpb2JqLnBhcmFtcy5tb3ZlbGV2ZWwsIGFwaW9iai5wYXJhbXMubW92ZWV4cGlyeSk7XG5cdFx0XHRcdHRha2VuQWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmICghZXhpc3RzICYmIGFwaW9iai5wYXJhbXMuY3JlYXRlbW9kaWZ5KSB7XG5cdFx0XHRcdHBhZ2Uuc2V0Q3JlYXRlUHJvdGVjdGlvbihhcGlvYmoucGFyYW1zLmNyZWF0ZWxldmVsLCBhcGlvYmoucGFyYW1zLmNyZWF0ZWV4cGlyeSk7XG5cdFx0XHRcdHRha2VuQWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmICghdGFrZW5BY3Rpb24pIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0YOato+WcqOS/neaKpOKAnCR7YXBpb2JqLnBhcmFtcy5wYWdlfWAsXG5cdFx0XHRcdFx0YOKAnemhtemdoiR7ZXhpc3RzID8gJ+WtmOWcqCcgOiAn5LiN5a2Y5ZyoJ33vvJvml6Dkuovlj6/lgZrvvIzot7Pov4dgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFwaW9iai5wYXJhbXMuYmF0Y2hPcGVyYXRpb24ud29ya2VyRmFpbHVyZShhcGlvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwYWdlLnNldEVkaXRTdW1tYXJ5KGFwaW9iai5wYXJhbXMucmVhc29uKTtcblx0XHRcdHBhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZS5wcm90ZWN0KGFwaW9iai5wYXJhbXMuYmF0Y2hPcGVyYXRpb24ud29ya2VyU3VjY2VzcywgYXBpb2JqLnBhcmFtcy5iYXRjaE9wZXJhdGlvbi53b3JrZXJGYWlsdXJlKTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmJhdGNocHJvdGVjdCwgJ2JhdGNocHJvdGVjdCcpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZWNsb3NlLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZWNsb3NlKCQpIHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdC8qKlxuXHQgKiB0d2lua2xlY2xvc2UuanM6IFhGRCBjbG9zaW5nIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IExpbmtzIGFmdGVyIHNlY3Rpb24gaGVhZGluZ1xuXHQgKiBBY3RpdmUgb246IEFmRCBkYXRlZCBhcmNoaXZlIHBhZ2VzXG5cdCAqIENvbmZpZyBkaXJlY3RpdmVzIGluOiBUd2lua2xlQ29uZmlnXG5cdCAqL1xuXHRUd2lua2xlLmNsb3NlID0gKCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdFR3aW5rbGUuZ2V0UHJlZignWGZkQ2xvc2UnKSA9PT0gJ2hpZGUnIHx8XG5cdFx0XHQhL17mnInlhb3moaPmoYjppoYoW18gXXRhbGspPzrlrZjlup/orqjorrpcXC/orrDlvZUoPzpcXC9cXGQrKXszfSQvLnRlc3QobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRtdy5ob29rKCd3aWtpcGFnZS5jb250ZW50JykuYWRkKChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5hdHRyKCdpZCcpID09PSAnbXctY29udGVudC10ZXh0Jykge1xuXHRcdFx0XHRUd2lua2xlLmNsb3NlLmFkZExpbmtzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuY2xvc2UuYWRkTGlua3MgPSAoKSA9PiB7XG5cdFx0Y29uc3Qgc3BhblRhZyA9IChjb2xvciwgY29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdHNwYW4uc3R5bGUuY29sb3IgPSBjb2xvcjtcblx0XHRcdHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpO1xuXHRcdFx0cmV0dXJuIHNwYW47XG5cdFx0fTtcblx0XHQkYm9keVxuXHRcdFx0LmZpbmQoXG5cdFx0XHRcdCdoMTpoYXMoLm13LWhlYWRsaW5lKSxoMjpoYXMoLm13LWhlYWRsaW5lKSxoMzpoYXMoLm13LWhlYWRsaW5lKSxoNDpoYXMoLm13LWhlYWRsaW5lKSxoNTpoYXMoLm13LWhlYWRsaW5lKSxoNjpoYXMoLm13LWhlYWRsaW5lKScsXG5cdFx0XHRcdCcjYm9keUNvbnRlbnQnXG5cdFx0XHQpXG5cdFx0XHQuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5kYXRhc2V0LnNlY3Rpb24gPSBpbmRleCArIDE7XG5cdFx0XHR9KTtcblx0XHRjb25zdCBzZWxlY3RvciA9ICc6aGFzKC5tdy1oZWFkbGluZSBhOm9ubHktb2YtdHlwZSk6bm90KDpoYXMoKyBkaXYuTmF2RnJhbWUpKSc7XG5cdFx0Y29uc3QgdGl0bGVzID0gJGJvZHkuZmluZCgnI2JvZHlDb250ZW50JykuZmluZChgaDIke3NlbGVjdG9yfTpub3QoOmhhcygrIHAgKyBoMykpLCBoMyR7c2VsZWN0b3J9YCk7IC8vIHJlYWxseSBuZWVkcyB0byB3b3JrIG9uXG5cdFx0Y29uc3QgZGVsTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0cm9uZycpO1xuXHRcdGNvbnN0IGRlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0ZGVsTGluay5hcHBlbmRDaGlsZChzcGFuVGFnKCdCbGFjaycsICdbJykpO1xuXHRcdGRlbExpbmsuYXBwZW5kQ2hpbGQoc3BhblRhZygnUmVkJywgd2luZG93LndnVUxTKCflhbPpl63orqjorronLCAn6Zec6ZaJ6KiO6KuWJykpKTtcblx0XHRkZWxMaW5rLmFwcGVuZENoaWxkKHNwYW5UYWcoJ0JsYWNrJywgJ10nKSk7XG5cdFx0ZGVsTm9kZS5hcHBlbmRDaGlsZChkZWxMaW5rKTtcblx0XHRmb3IgKGNvbnN0IGN1cnJlbnQgb2YgdGl0bGVzKSB7XG5cdFx0XHRjb25zdCBoZWFkbGluZWhyZWYgPSAkKGN1cnJlbnQpLmZpbmQoJy5tdy1oZWFkbGluZSBhJykuYXR0cignaHJlZicpO1xuXHRcdFx0aWYgKGhlYWRsaW5laHJlZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGxldCB0aXRsZSA9IG51bGw7XG5cdFx0XHRcdGlmIChoZWFkbGluZWhyZWYuaW5jbHVkZXMoJ3JlZGxpbms9MScpKSB7XG5cdFx0XHRcdFx0dGl0bGUgPSBoZWFkbGluZWhyZWYuc2xpY2UoMTksIC0yMik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgbSA9IGhlYWRsaW5laHJlZi5tYXRjaCgvXFwvd2lraVxcLyhbXj9dKykvLCAnJDEnKTtcblx0XHRcdFx0XHRpZiAobSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0WywgdGl0bGVdID0gbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRpdGxlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0dGl0bGUgPSBkZWNvZGVVUklDb21wb25lbnQodGl0bGUpO1xuXHRcdFx0XHRcdHRpdGxlID0gdGl0bGUucmVwbGFjZSgvXy9nLCAnICcpOyAvLyBOb3JtYWxpemUgZm9yIHVzaW5nIGluIGludGVyZmFjZSBhbmQgc3VtbWFyeVxuXHRcdFx0XHRcdGNvbnN0IHBhZ2Vub3RleGlzdCA9ICQoY3VycmVudCkuZmluZCgnLm13LWhlYWRsaW5lIGEnKS5oYXNDbGFzcygnbmV3Jyk7XG5cdFx0XHRcdFx0Y29uc3Qge3NlY3Rpb259ID0gY3VycmVudC5kYXRhc2V0O1xuXHRcdFx0XHRcdGNvbnN0IFtub2RlXSA9IGN1cnJlbnQucXVlcnlTZWxlY3RvckFsbCgnLm13LWhlYWRsaW5lJyk7XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTtcblx0XHRcdFx0XHRjb25zdCB0bXBOb2RlID0gZGVsTm9kZS5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdFx0dG1wTm9kZS5maXJzdENoaWxkLmhyZWYgPSBgIyR7c2VjdGlvbn1gO1xuXHRcdFx0XHRcdCQodG1wTm9kZS5maXJzdENoaWxkKS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrKHRpdGxlLCBzZWN0aW9uLCBwYWdlbm90ZXhpc3QpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQodG1wTm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdC8vIEtlZXAgdGhpcyBzeW5jaHJvbml6ZWQgd2l0aCB7e2RlbGh9fVxuXHRUd2lua2xlLmNsb3NlLmNvZGVzID0gW1xuXHRcdHtcblx0XHRcdGtleTogd2luZG93LndnVUxTKCfor7fmsYLml6DmlYgnLCAn6KuL5rGC54Sh5pWIJyksXG5cdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRpcjoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivt+axguaXoOaViCcsICfoq4vmsYLnhKHmlYgnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVwOiB7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YeN5aSN5o+Q5Ye677yM5peg5pWIJywgJ+mHjeikh+aPkOWHuu+8jOeEoeaViCcpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2tlZXAnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuZToge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ebruagh+mhtemdouaIluaWh+S7tuS4jeWtmOWcqO+8jOaXoOaViCcsICfnm67mqJnpoIHpnaLmiJbmqpTmoYjkuI3lrZjlnKjvvIznhKHmlYgnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0bnE6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmj5DliKDogIXmnKrojrflj5bmj5DliKDotYTmoLzvvIzml6DmlYgnLCAn5o+Q5Yiq6ICF5pyq5Y+W5b6X5o+Q5Yiq6LOH5qC877yM54Sh5pWIJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiAn5L+d55WZJyxcblx0XHRcdHZhbHVlOiB7XG5cdFx0XHRcdGs6IHtcblx0XHRcdFx0XHRsYWJlbDogJ+S/neeVmScsXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdFx0YWRtaW5vbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzazoge1xuXHRcdFx0XHRcdGxhYmVsOiAn5b+r6YCf5L+d55WZJyxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGs6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmmoLml7bkv53nlZnvvIzmlLnmjILnu7TmiqTmqKHmnb/vvIjlhbPms6jluqbnrYnvvIknLCAn5pqr5pmC5L+d55WZ77yM5pS55o6b57at6K235qih5p2/77yI6Zec5rOo5bqm562J77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUygn5pqC5pe25L+d55WZJywgJ+aaq+aZguS/neeVmScpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2tlZXAnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRycjoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivt+axgueQhueUsea2iOWksScsICfoq4vmsYLnkIbnlLHmtojlpLEnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogVHdpbmtsZS5nZXRQcmVmKCdYZmRDbG9zZScpID09PSAnbm9uYWRtaW5vbmx5Jyxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGFuOiB7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig5ZCO6YeN5bu6JywgJ+WIquW+jOmHjeW7uicpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2tlZXAnLFxuXHRcdFx0XHRcdGFkbWlub25seTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIqumZpCcpLFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0ZDoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WIoOmZpCcsICfliKrpmaQnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdkZWwnLFxuXHRcdFx0XHRcdGFkbWlub25seTogdHJ1ZSxcblx0XHRcdFx0XHRzZWxlY3RlZDogVHdpbmtsZS5nZXRQcmVmKCdYZmRDbG9zZScpID09PSAnYWxsJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0aWM6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflm77lg4/lm6DkvrXmnYPooqvliKAnLCAn5ZyW5YOP5Zug5L615qyK6KKr5YiqJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAnZGVsJyxcblx0XHRcdFx0XHRhZG1pbm9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+W/q+mAn+WIoOmZpCcsICflv6vpgJ/liKrpmaQnKSxcblx0XHRcdHZhbHVlOiB7XG5cdFx0XHRcdHNkOiB7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5b+r6YCf5Yig6ZmkJywgJ+W/q+mAn+WIqumZpCcpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2RlbCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxzc2Q6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml6DmnaXmupDmiJbokZfkvZzmnYPkv6Hmga/vvIzlv6vpgJ/liKDpmaQnLCAn54Sh5L6G5rqQ5oiW54mI5qyK6LOH6KiK77yM5b+r6YCf5Yiq6ZmkJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAnZGVsJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0c3ZnOiB7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bey5pS555SoU1ZH5Zu+5b2i77yM5b+r6YCf5Yig6ZmkJywgJ+W3suaUueeUqFNWR+WcluW9ou+8jOW/q+mAn+WIqumZpCcpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2RlbCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRyZXA6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflpJrmrKHooqvliKDpmaTvvIzmnaHnm67plIHlrponLCAn5aSa5qyh6KKr5Yiq6Zmk77yM5qKd55uu6Y6W5a6aJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAnZGVsJyxcblx0XHRcdFx0XHRhZG1pbm9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+WFtuS7luWkhOeQhuaWueazlScsICflhbbku5bomZXnkIbmlrnms5UnKSxcblx0XHRcdHZhbHVlOiB7XG5cdFx0XHRcdGM6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfovazkuqTkvrXmnYMnLCAn6L2J5Lqk5L615qyKJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAnbm9vcCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHI6IHtcblx0XHRcdFx0XHRsYWJlbDogJ+mHjeWumuWQkScsXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdFx0YWRtaW5vbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjcjoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WIhuexu+mHjeWumuWQkScsICfliIbpoZ7ph43lrprlkJEnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0XHRhZG1pbm9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG06IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnp7vliqgnLCAn56e75YuVJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdFx0YWRtaW5vbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXJnZToge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W5tuWFpScsICfkvbXlhaUnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0XHRhZG1pbm9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lcmdlYXBwcm92ZWQ6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhYHorrjlubblhaUnLCAn5YWB6Kix5L215YWlJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdFx0YWRtaW5vbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYzoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aXoOWFseivhuaaguaXtuS/neeVmScsICfnhKHlhbHorZjmmqvmmYLkv53nlZknKSxcblx0XHRcdFx0XHR2YWx1ZTogd2luZG93LndnVUxTKCfml6DlhbHor4YnLCAn54Sh5YWx6K2YJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuY2xvc2UuY2FsbGJhY2sgPSAodGl0bGUsIHNlY3Rpb24sIG5vb3ApID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDQxMCwgMjAwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUoYOWFs+mXreWtmOW6n+iuqOiuuiBcXHUwMEI3ICR7dGl0bGV9YCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluaygn5a2Y5bqf6K6o6K666K6+572uJywgJ0g6VFcvUFJFRiPlhbPpl63lrZjlup/orqjorronKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluaygnVHdpbmtsZeW4ruWKqScsICdIOlRXL0RPQyPlhbPpl63lrZjlup/orqjorronKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLmNsb3NlLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdGxhYmVsOiAn5aSE55CG57uT5p6c77yaJyxcblx0XHRcdG5hbWU6ICdzdWJfZ3JvdXAnLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUuY2xvc2UuY2FsbGJhY2suY2hhbmdlX2NvZGUsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdG5hbWU6ICdzZHJlYXNvbicsXG5cdFx0XHRsYWJlbDogJ+mAn+WIoOeQhueUse+8micsXG5cdFx0XHR0b29sdGlwOiAn55So5LqO5Yig6Zmk5pel5b+X77yM5L2/55Soe3tkZWxldGV9feeahOWPguaVsOagvOW8j++8jOS+i+WmgiBBMSDmiJYgQTF8RzEnLFxuXHRcdFx0aGlkZGVuOiB0cnVlLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRuYW1lOiAncmVtYXJrJyxcblx0XHRcdGxhYmVsOiAn6KGl5YWF6K+05piO77yaJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICflj6rlhbPpl63orqjorrrvvIzkuI3ov5vooYzlhbbku5bmk43kvZwnLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm9vcCcsXG5cdFx0XHRcdFx0bmFtZTogJ25vb3AnLFxuXHRcdFx0XHRcdGV2ZW50OiBUd2lua2xlLmNsb3NlLmNhbGxiYWNrLmNoYW5nZV9vcGVyYXRpb24sXG5cdFx0XHRcdFx0Y2hlY2tlZDogbm9vcCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0aWYgKG5ldyBtdy5UaXRsZSh0aXRsZSkubmFtZXNwYWNlICUgMiA9PT0gMCAmJiBuZXcgbXcuVGl0bGUodGl0bGUpLm5hbWVzcGFjZSAhPT0gMikge1xuXHRcdFx0Ly8gaGlkZSBvcHRpb24gZm9yIHVzZXIgcGFnZXMsIHRvIGF2b2lkIGFjY2lkZW50YWxseSBkZWxldGluZyB1c2VyIHRhbGsgcGFnZVxuXHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6ICfliKDpmaTlhbPogZTnmoTorqjorrrpobUnLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICd0YWxrcGFnZScsXG5cdFx0XHRcdFx0XHRuYW1lOiAndGFsa3BhZ2UnLFxuXHRcdFx0XHRcdFx0dG9vbHRpcDogJ+WIoOmZpOaXtumZhOW4puWIoOmZpOatpOmhtemdoueahOiuqOiuuumhteOAgicsXG5cdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAn5Yig6Zmk6YeN5a6a5ZCR6aG1Jyxcblx0XHRcdFx0XHR2YWx1ZTogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0bmFtZTogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0dG9vbHRpcDogJ+WIoOmZpOWIsOatpOmhteeahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHRldmVudDogKGUpID0+IHtcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gZm9ybS5yZW5kZXIoKTtcblx0XHRXaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFdpbmRvdy5kaXNwbGF5KCk7XG5cdFx0Y29uc3QgW3N1Yl9ncm91cF0gPSByZXN1bHQucXVlcnlTZWxlY3RvckFsbCgnc2VsZWN0Jyk7IC8vIGhhY2tcblx0XHRjb25zdCByZXN1bHREYXRhID0ge1xuXHRcdFx0dGl0bGUsXG5cdFx0XHRzZWN0aW9uOiBOdW1iZXIucGFyc2VJbnQoc2VjdGlvbiwgMTApLFxuXHRcdFx0bm9vcCxcblx0XHR9O1xuXHRcdCQocmVzdWx0KS5kYXRhKCdyZXN1bHREYXRhJywgcmVzdWx0RGF0YSk7XG5cdFx0Ly8gd29ya2VyIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgY29tYm8gYm94IGVudHJpZXNcblx0XHRjb25zdCBjcmVhdGVFbnRyaWVzID0gKGNvbnRlbnRzLCBjb250YWluZXIpID0+IHtcblx0XHRcdGZvciAoY29uc3QgW2l0ZW1LZXksIGl0ZW1Qcm9wZXJ0aWVzXSBvZiBPYmplY3QuZW50cmllcyhjb250ZW50cykpIHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gdHlwZW9mIGl0ZW1LZXkgPT09ICdzdHJpbmcnID8gaXRlbUtleSA6IGl0ZW1Qcm9wZXJ0aWVzLnZhbHVlO1xuXHRcdFx0XHRjb25zdCBlbGVtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogYCR7a2V5fe+8miR7aXRlbVByb3BlcnRpZXMubGFiZWx9YCxcblx0XHRcdFx0XHR2YWx1ZToga2V5LFxuXHRcdFx0XHRcdHNlbGVjdGVkOiBpdGVtUHJvcGVydGllcy5zZWxlY3RlZCxcblx0XHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHRcdChUd2lua2xlLmdldFByZWYoJ1hmZENsb3NlJykgIT09ICdhbGwnICYmIGl0ZW1Qcm9wZXJ0aWVzLmFkbWlub25seSkgfHwgaXRlbVByb3BlcnRpZXMuZGlzYWJsZWQsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBlbGVtUmVuZGVyZWQgPSBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbS5yZW5kZXIoKSk7XG5cdFx0XHRcdCQoZWxlbVJlbmRlcmVkKS5kYXRhKCdtZXNzYWdlRGF0YScsIGl0ZW1Qcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgVHdpbmtsZS5jbG9zZS5jb2Rlcykge1xuXHRcdFx0bGV0IG9wdGdyb3VwID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0dHlwZTogJ29wdGdyb3VwJyxcblx0XHRcdFx0bGFiZWw6IGdyb3VwLmtleSxcblx0XHRcdH0pO1xuXHRcdFx0b3B0Z3JvdXAgPSBvcHRncm91cC5yZW5kZXIoKTtcblx0XHRcdHN1Yl9ncm91cC5hcHBlbmRDaGlsZChvcHRncm91cCk7XG5cdFx0XHQvLyBjcmVhdGUgdGhlIG9wdGlvbnNcblx0XHRcdGNyZWF0ZUVudHJpZXMoZ3JvdXAudmFsdWUsIG9wdGdyb3VwKTtcblx0XHR9XG5cdFx0Y29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldmVudC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdHJlc3VsdC5zdWJfZ3JvdXAuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH07XG5cdFR3aW5rbGUuY2xvc2UuY2FsbGJhY2suY2hhbmdlX29wZXJhdGlvbiA9IChlKSA9PiB7XG5cdFx0Y29uc3Qgbm9vcCA9IGUudGFyZ2V0LmNoZWNrZWQ7XG5cdFx0Y29uc3QgY29kZSA9IGUudGFyZ2V0LmZvcm0uc3ViX2dyb3VwLnZhbHVlO1xuXHRcdGNvbnN0IG1lc3NhZ2VEYXRhID0gJChlLnRhcmdldC5mb3JtLnN1Yl9ncm91cCkuZmluZChgb3B0aW9uW3ZhbHVlPVwiJHtjb2RlfVwiXWApLmRhdGEoJ21lc3NhZ2VEYXRhJyk7XG5cdFx0Y29uc3Qge3RhbGtwYWdlfSA9IGUudGFyZ2V0LmZvcm07XG5cdFx0Y29uc3Qge3JlZGlyZWN0c30gPSBlLnRhcmdldC5mb3JtO1xuXHRcdGlmIChub29wIHx8IG1lc3NhZ2VEYXRhLmFjdGlvbiA9PT0gJ2tlZXAnKSB7XG5cdFx0XHRpZiAodGFsa3BhZ2UpIHtcblx0XHRcdFx0dGFsa3BhZ2UuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHR0YWxrcGFnZS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZWRpcmVjdHMuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmVkaXJlY3RzLmRpc2FibGVkID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRhbGtwYWdlKSB7XG5cdFx0XHRcdHRhbGtwYWdlLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHR0YWxrcGFnZS5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmVkaXJlY3RzLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0cmVkaXJlY3RzLmRpc2FibGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrLmNoYW5nZV9jb2RlID0gKGUpID0+IHtcblx0XHRjb25zdCByZXN1bHREYXRhID0gJChlLnRhcmdldC5mb3JtKS5kYXRhKCdyZXN1bHREYXRhJyk7XG5cdFx0Y29uc3QgbWVzc2FnZURhdGEgPSAkKGUudGFyZ2V0KS5maW5kKGBvcHRpb25bdmFsdWU9XCIke2UudGFyZ2V0LnZhbHVlfVwiXWApLmRhdGEoJ21lc3NhZ2VEYXRhJyk7XG5cdFx0Y29uc3Qge25vb3B9ID0gZS50YXJnZXQuZm9ybTtcblx0XHRjb25zdCB7dGFsa3BhZ2V9ID0gZS50YXJnZXQuZm9ybTtcblx0XHRjb25zdCB7cmVkaXJlY3RzfSA9IGUudGFyZ2V0LmZvcm07XG5cdFx0aWYgKHJlc3VsdERhdGEubm9vcCB8fCBtZXNzYWdlRGF0YS5hY3Rpb24gPT09ICdub29wJykge1xuXHRcdFx0bm9vcC5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdG5vb3AuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKHRhbGtwYWdlKSB7XG5cdFx0XHRcdHRhbGtwYWdlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0dGFsa3BhZ2UuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmVkaXJlY3RzLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdHJlZGlyZWN0cy5kaXNhYmxlZCA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vb3AuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0bm9vcC5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0aWYgKG1lc3NhZ2VEYXRhLmFjdGlvbiA9PT0gJ2tlZXAnKSB7XG5cdFx0XHRcdGlmICh0YWxrcGFnZSkge1xuXHRcdFx0XHRcdHRhbGtwYWdlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR0YWxrcGFnZS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVkaXJlY3RzLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0cmVkaXJlY3RzLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICh0YWxrcGFnZSkge1xuXHRcdFx0XHRcdHRhbGtwYWdlLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRhbGtwYWdlLmRpc2FibGVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVkaXJlY3RzLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRyZWRpcmVjdHMuZGlzYWJsZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChlLnRhcmdldC52YWx1ZSA9PT0gJ3NkJykge1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLnNkcmVhc29uLnBhcmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0uc2RyZWFzb24ucGFyZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICcnKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuY2xvc2UuY2FsbGJhY2suZXZhbHVhdGUgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IGNvZGUgPSBlLnRhcmdldC5zdWJfZ3JvdXAudmFsdWU7XG5cdFx0Y29uc3QgcmVzdWx0RGF0YSA9ICQoZS50YXJnZXQpLmRhdGEoJ3Jlc3VsdERhdGEnKTtcblx0XHRjb25zdCBtZXNzYWdlRGF0YSA9ICQoZS50YXJnZXQuc3ViX2dyb3VwKS5maW5kKGBvcHRpb25bdmFsdWU9XCIke2NvZGV9XCJdYCkuZGF0YSgnbWVzc2FnZURhdGEnKTtcblx0XHRjb25zdCBub29wID0gZS50YXJnZXQubm9vcC5jaGVja2VkO1xuXHRcdGNvbnN0IHRhbGtwYWdlID0gZS50YXJnZXQudGFsa3BhZ2UgJiYgZS50YXJnZXQudGFsa3BhZ2UuY2hlY2tlZDtcblx0XHRjb25zdCByZWRpcmVjdHMgPSBlLnRhcmdldC5yZWRpcmVjdHMuY2hlY2tlZDtcblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHR0aXRsZTogcmVzdWx0RGF0YS50aXRsZSxcblx0XHRcdGNvZGUsXG5cdFx0XHRyZW1hcms6IGUudGFyZ2V0LnJlbWFyay52YWx1ZSxcblx0XHRcdHNkcmVhc29uOiBlLnRhcmdldC5zZHJlYXNvbi52YWx1ZSxcblx0XHRcdHNlY3Rpb246IHJlc3VsdERhdGEuc2VjdGlvbixcblx0XHRcdHBhcmVudFNlY3Rpb246IHJlc3VsdERhdGEucGFyZW50U2VjdGlvbixcblx0XHRcdG1lc3NhZ2VEYXRhLFxuXHRcdFx0dGFsa3BhZ2UsXG5cdFx0XHRyZWRpcmVjdHMsXG5cdFx0fTtcblx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGUudGFyZ2V0KTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSAn5pON5L2c5a6M5oiQJztcblx0XHRpZiAobm9vcCB8fCBtZXNzYWdlRGF0YS5hY3Rpb24gPT09ICdub29wJykge1xuXHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzd2l0Y2ggKG1lc3NhZ2VEYXRhLmFjdGlvbikge1xuXHRcdFx0XHRjYXNlICdkZWwnOlxuXHRcdFx0XHRcdFR3aW5rbGUuY2xvc2UuY2FsbGJhY2tzLmRlbChwYXJhbXMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdrZWVwJzoge1xuXHRcdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UocGFyYW1zLnRpdGxlLCAn56e76Zmk5a2Y5bqf6K6o6K665qih5p2/Jyk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuY2xvc2UuY2FsbGJhY2tzLmtlZXApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0bXcubm90aWZ5KGDlhbPpl63lrZjlup/orqjorrrvvJrmnKrlrprkuYkgJHtjb2RlfWAsIHtcblx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVjbG9zZScsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrcyA9IHtcblx0XHRkZWw6IChwYXJhbXMpID0+IHtcblx0XHRcdGxldCBxdWVyeTtcblx0XHRcdGxldCB5c2FyY2hpdmVzX2FwaTtcblx0XHRcdE1vcmViaXRzLndpa2kuYWRkQ2hlY2twb2ludCgpO1xuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UocGFyYW1zLnRpdGxlLCAn5Yig6Zmk6aG16Z2iJyk7XG5cdFx0XHRpZiAocGFyYW1zLmNvZGUgPT09ICdzZCcpIHtcblx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnBhcnNlV2lraXRleHQocGFyYW1zLnRpdGxlLCBge3tkZWxldGV8JHtwYXJhbXMuc2RyZWFzb259fX1gLCAocmVhc29uKSA9PiB7XG5cdFx0XHRcdFx0cmVhc29uID0gcHJvbXB0KCfovpPlhaXliKDpmaTnkIbnlLHvvIzmiJbngrnlh7vnoa7lrprku6XmjqXlj5foh6rliqjnlJ/miJDnmoTvvJonLCByZWFzb24pO1xuXHRcdFx0XHRcdGlmIChyZWFzb24gPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLndhcm4oJ+ayoeacieaJp+ihjOWIoOmZpCcpO1xuXHRcdFx0XHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRwYWdlLnNldEVkaXRTdW1tYXJ5KHJlYXNvbik7XG5cdFx0XHRcdFx0XHRwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHRcdHBhZ2UuZGVsZXRlUGFnZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrcy50YWxrZW5kKHBhcmFtcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFnZS5zZXRFZGl0U3VtbWFyeShg5a2Y5bqf6K6o6K666YCa6L+H77yaW1ske213LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKX0jJHtwYXJhbXMudGl0bGV9XV1gKTtcblx0XHRcdFx0cGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2UuZGVsZXRlUGFnZSgoKSA9PiB7XG5cdFx0XHRcdFx0cGFnZS5nZXRTdGF0dXNFbGVtZW50KCkuaW5mbygn5a6M5oiQJyk7XG5cdFx0XHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChwYXJhbXMucmVkaXJlY3RzKSB7XG5cdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHR0aXRsZXM6IHBhcmFtcy50aXRsZSxcblx0XHRcdFx0XHRwcm9wOiAncmVkaXJlY3RzJyxcblx0XHRcdFx0XHRyZGxpbWl0OiAnbWF4JywgLy8gNTAwIGlzIG1heCBmb3Igbm9ybWFsIHVzZXJzLCA1MDAwIGZvciBib3RzIGFuZCBzeXNvcHNcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHQn5q2j5Zyo6I635Y+W6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrcy5kZWxldGVSZWRpcmVjdHNNYWluXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHBhcmFtcztcblx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy50YWxrUGFnZSkge1xuXHRcdFx0XHRjb25zdCBwYWdlVGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChwYXJhbXMudGl0bGUpO1xuXHRcdFx0XHRpZiAocGFnZVRpdGxlICYmIHBhZ2VUaXRsZS5uYW1lc3BhY2UgJSAyID09PSAwICYmIHBhZ2VUaXRsZS5uYW1lc3BhY2UgIT09IDIpIHtcblx0XHRcdFx0XHRwYWdlVGl0bGUubmFtZXNwYWNlKys7IC8vIG5vdyBwYWdlVGl0bGUgaXMgdGhlIHRhbGsgcGFnZSB0aXRsZSFcblx0XHRcdFx0XHRxdWVyeSA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHRpdGxlczogcGFnZVRpdGxlLnRvVGV4dCgpLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0XHQn5q2j5Zyo5qOA5p+l6K6o6K666aG16Z2i5piv5ZCm5a2Y5ZyoJyxcblx0XHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MuZGVsZXRlVGFsa1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucGFyYW1zID0gcGFyYW1zO1xuXHRcdFx0XHRcdHlzYXJjaGl2ZXNfYXBpLmFwaW9iai5wYXJhbXMudGFsa1BhZ2UgPSBwYWdlVGl0bGUudG9UZXh0KCk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRNb3JlYml0cy53aWtpLnJlbW92ZUNoZWNrcG9pbnQoKTtcblx0XHR9LFxuXHRcdGRlbGV0ZVJlZGlyZWN0c01haW46IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGNvbnN0IHBhZ2VzID0gJCh4bWwpXG5cdFx0XHRcdC5maW5kKCdyZCcpXG5cdFx0XHRcdC5tYXAoKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAkKGVsZW1lbnQpLmF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5nZXQoKTtcblx0XHRcdGlmIChwYWdlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVkaXJlY3REZWxldGVyID0gbmV3IE1vcmViaXRzLmJhdGNoT3BlcmF0aW9uKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOWIoOmZpOWIsCAnLCAn5q2j5Zyo5Yiq6Zmk5YiwICcpICtcblx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLnRpdGxlICtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDnmoTph43lrprlkJEnLCAnIOeahOmHjeaWsOWwjuWQkScpXG5cdFx0XHQpO1xuXHRcdFx0cmVkaXJlY3REZWxldGVyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaGRlbGV0ZUNodW5rcycpKTtcblx0XHRcdHJlZGlyZWN0RGVsZXRlci5zZXRQYWdlTGlzdChwYWdlcyk7XG5cdFx0XHRyZWRpcmVjdERlbGV0ZXIucnVuKChwYWdlTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdHBhZ2VOYW1lLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5Yig6ZmkICcsICfmraPlnKjliKrpmaQgJykgKyBwYWdlTmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0RWRpdFN1bW1hcnkoXG5cdFx0XHRcdFx0YFtbTElCOkNTRCNHNXxHNV1d77yaJHt3aW5kb3cud2dVTFMoJ+aMh+WQkeW3suWIoOmhtemdouKAnCcsICfmjIflkJHlt7LliKrpoIHpnaLjgIwnKX0ke2FwaW9iai5wYXJhbXMudGl0bGV9JHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn4oCd55qE6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRcdCfjgI3nmoTph43mlrDlsI7lkJEnXG5cdFx0XHRcdFx0KX1gXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5kZWxldGVQYWdlKHJlZGlyZWN0RGVsZXRlci53b3JrZXJTdWNjZXNzLCByZWRpcmVjdERlbGV0ZXIud29ya2VyRmFpbHVyZSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGRlbGV0ZVRhbGs6IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGNvbnN0IGV4aXN0cyA9ICQoeG1sKS5maW5kKCdwYWdlOm5vdChbbWlzc2luZ10pJykubGVuZ3RoID4gMDtcblx0XHRcdGlmICghZXhpc3RzKSB7XG5cdFx0XHRcdC8vIG5vIHRhbGsgcGFnZTsgZm9yZ2V0IGFib3V0IGl0XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHBhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRhcGlvYmoucGFyYW1zLnRhbGtQYWdlLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOWIoOmZpOmhtemdoiAnLCAn5q2j5Zyo5Yiq6Zmk6aCB6Z2iICcpICtcblx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLnRpdGxlICtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDnmoTorqjorrrpobUnLCAnIOeahOiojuirlumggScpXG5cdFx0XHQpO1xuXHRcdFx0cGFnZS5zZXRFZGl0U3VtbWFyeShcblx0XHRcdFx0YFtbTElCOkNTRCNHNXxHNV1d77yaJHt3aW5kb3cud2dVTFMoJ+W3suWIoOmhtemdouKAnCcsICflt7LliKrpoIHpnaLjgIwnKX0ke2FwaW9iai5wYXJhbXMudGl0bGV9JHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+KAneeahFtbSGVscDrorqjorrrpobV86K6o6K666aG1XV0nLFxuXHRcdFx0XHRcdCfjgI3nmoRbW0hlbHA66KiO6KuW6aCBfOiojuirlumggV1dJ1xuXHRcdFx0XHQpfWBcblx0XHRcdCk7XG5cdFx0XHRwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHBhZ2UuZGVsZXRlUGFnZSgpO1xuXHRcdH0sXG5cdFx0a2VlcDogKHBhZ2VvYmopID0+IHtcblx0XHRcdGNvbnN0IHN0YXRlbGVtID0gcGFnZW9iai5nZXRTdGF0dXNFbGVtZW50KCk7XG5cdFx0XHRpZiAoIXBhZ2VvYmouZXhpc3RzKCkpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3IoJ+mhtemdouS4jeWtmOWcqO+8jOWPr+iDveW3suiiq+WIoOmZpCcpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGNvbnN0IHBhZ2V0aXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHBhcmFtcy50aXRsZSk7XG5cdFx0XHRpZiAocGFnZXRpdGxlLmdldE5hbWVzcGFjZUlkKCkgJSAyID09PSAwKSB7XG5cdFx0XHRcdGNvbnN0IHRhbGtwYWdldGl0bGUgPSBuZXcgbXcuVGl0bGUocGFnZXRpdGxlLmdldE1haW5UZXh0KCksIHBhZ2V0aXRsZS5nZXROYW1lc3BhY2VJZCgpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHRhbGtwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHR0YWxrcGFnZXRpdGxlLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmoIforrDorqjorrrpobUnLCAn5qiZ6KiY6KiO6KuW6aCBJylcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgcmVhc29uID0gcGFyYW1zLm1lc3NhZ2VEYXRhLnZhbHVlIHx8IHBhcmFtcy5tZXNzYWdlRGF0YS5sYWJlbDtcblx0XHRcdFx0Y29uc3QgdmZka2VwdCA9IGB7e09sZCB2ZmQgbXVsdGl8JHttdy5jb25maWdcblx0XHRcdFx0XHQuZ2V0KCd3Z1BhZ2VOYW1lJylcblx0XHRcdFx0XHQuc3BsaXQoJy8nKVxuXHRcdFx0XHRcdC5zbGljZSgyKVxuXHRcdFx0XHRcdC5qb2luKCcvJyl9fCR7cmVhc29ufX19XFxuYDtcblx0XHRcdFx0dGFsa3BhZ2Uuc2V0UHJlcGVuZFRleHQodmZka2VwdCk7XG5cdFx0XHRcdHRhbGtwYWdlLnNldEVkaXRTdW1tYXJ5KGBbWyR7bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpfSMke3BhcmFtcy50aXRsZX1dXe+8miR7cmVhc29ufWApO1xuXHRcdFx0XHR0YWxrcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHRhbGtwYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdFx0dGFsa3BhZ2UucHJlcGVuZCgpO1xuXHRcdFx0fVxuXHRcdFx0bGV0IG5ld3RleHQgPSB0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdC88bm9pbmNsdWRlPlxccypcXHtcXHsoW3JzYWlmdGNtdl1mZCkoXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyo8XFwvbm9pbmNsdWRlPlxccyovZ2ksXG5cdFx0XHRcdCcnXG5cdFx0XHQpO1xuXHRcdFx0bmV3dGV4dCA9IG5ld3RleHQucmVwbGFjZSgvXFx7XFx7KFtyc2FpZnRjbXZdZmQpKFxcfCg/Olxce1xce1tee31dKlxcfVxcfXxbXnt9XSkqKT9cXH1cXH1cXHMqL2dpLCAnJyk7XG5cdFx0XHRpZiAocGFyYW1zLmNvZGUgIT09ICd0aycpIHtcblx0XHRcdFx0bmV3dGV4dCA9IG5ld3RleHQucmVwbGFjZShcblx0XHRcdFx0XHQve3sobm90YWJpbGl0eXxmYW1lfG1haXJ855+l5ZCN5bqmfOmHjeimgeaAp3zmmL7okZfmgKd86aGv6JGX5oCnfOefpeWQjeW6puS4jei2s3zkurrnianph43opoHmgKd86YeN6KaB5oCn5LiN6LazfG5vdGFibGV85YWz5rOo5bqmfOWFs+azqOW6puS4jei2s3zpl5zms6jluqZ86Zec5rOo5bqm5LiN6LazfOmHjeimgXzph43opoHluqYpKFxcfCg/Ont7W157fV0qfX18W157fV0pKik/fX1cXG4qL2dpLFxuXHRcdFx0XHRcdCcnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG5ld3RleHQgPSBuZXd0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdFx0L3t7KHN1YnN0dWJ85bCP5bCP5L2c5ZOBfGNvZHzlsI/lsI/mop3nm6585bCP5bCP5p2h55uuKShcXHwoPzp7e1tee31dKn19fFtee31dKSopP319XFxuKi9naSxcblx0XHRcdFx0XHQnJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy5jb2RlID09PSAnbWVyZ2VhcHByb3ZlZCcpIHtcblx0XHRcdFx0Y29uc3QgdGFnID0gJ3t7J1xuXHRcdFx0XHRcdC5jb25jYXQoJ3N1YnN0OicpXG5cdFx0XHRcdFx0LmNvbmNhdChgTWVyZ2UgYXBwcm92ZWQvYXV0b3xkaXNjdXNzPSR7bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpfSMke3BhcmFtcy50aXRsZX19fVxcbmApO1xuXHRcdFx0XHQvLyBJbnNlcnQgdGFnIGFmdGVyIHNob3J0IGRlc2NyaXB0aW9uIG9yIGFueSBoYXRub3Rlc1xuXHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraXRleHQucGFnZShuZXd0ZXh0KTtcblx0XHRcdFx0bmV3dGV4dCA9IHlzYXJjaGl2ZXNfcGFnZS5pbnNlcnRBZnRlclRlbXBsYXRlcyh0YWcsIFR3aW5rbGUuaGF0bm90ZVJlZ2V4KS5nZXRUZXh0KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobmV3dGV4dCA9PT0gdGV4dCkge1xuXHRcdFx0XHRzdGF0ZWxlbS53YXJuKCfmnKrmib7liLDlrZjlup/orqjorrrmqKHmnb/vvIzlj6/og73lt7Looqvnp7vpmaQnKTtcblx0XHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlZGl0c3VtbWFyeSA9IGDlrZjlup/orqjorrrlhbPpl63vvJpbWyR7bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpfSMke3BhcmFtcy50aXRsZX1dXWA7XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KG5ld3RleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShlZGl0c3VtbWFyeSk7XG5cdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdub2NyZWF0ZScpO1xuXHRcdFx0cGFnZW9iai5zYXZlKFR3aW5rbGUuY2xvc2UuY2FsbGJhY2tzLmtlZXBDb21wbGV0ZSk7XG5cdFx0fSxcblx0XHRrZWVwQ29tcGxldGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdH0sXG5cdFx0dGFsa2VuZDogKHBhcmFtcykgPT4ge1xuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksICflhbPpl63orqjorronKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRQYWdlU2VjdGlvbihwYXJhbXMuc2VjdGlvbik7XG5cdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmNsb3NlLmNhbGxiYWNrcy5zYXZlVGFsayk7XG5cdFx0fSxcblx0XHRzYXZlVGFsazogKHBhZ2VvYmopID0+IHtcblx0XHRcdGNvbnN0IHN0YXRlbGVtID0gcGFnZW9iai5nZXRTdGF0dXNFbGVtZW50KCk7XG5cdFx0XHRsZXQgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRpZiAodGV4dC5pbmNsdWRlcygne3tkZWxoJykpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3IoJ+iuqOiuuuW3suiiq+WFs+mXrScpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzYmVnaW4gPSB0ZXh0LmluY2x1ZGVzKCc8c2VjdGlvbiBiZWdpbj1iYWNrbG9nIC8+Jyk7XG5cdFx0XHRjb25zdCBzZW5kID0gdGV4dC5pbmNsdWRlcygnPHNlY3Rpb24gZW5kPWJhY2tsb2cgLz4nKTtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoJ1xcbjxzZWN0aW9uIGJlZ2luPWJhY2tsb2cgLz4nLCAnJyk7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCdcXG48c2VjdGlvbiBlbmQ9YmFja2xvZyAvPicsICcnKTtcblx0XHRcdGNvbnN0IGJhciA9IHRleHQuc3BsaXQoJ1xcbi0tLS1cXG4nKTtcblx0XHRcdGNvbnN0IHNwbGl0ID0gYmFyWzBdLnNwbGl0KCdcXG4nKTtcblx0XHRcdHRleHQgPSBgJHtzcGxpdFswXX1cXG57e2RlbGh8JHtwYXJhbXMuY29kZX19fVxcbmA7XG5cdFx0XHR0ZXh0ICs9IHNwbGl0LnNsaWNlKDEpLmpvaW4oJ1xcbicpO1xuXHRcdFx0Y29uc3QgcmVhc29uID0gcGFyYW1zLm1lc3NhZ2VEYXRhLnZhbHVlIHx8IHBhcmFtcy5tZXNzYWdlRGF0YS5sYWJlbDtcblx0XHRcdHRleHQgKz0gYFxcbjxocj5cXG46ICR7cmVhc29ufWA7XG5cdFx0XHRpZiAocGFyYW1zLnJlbWFyaykge1xuXHRcdFx0XHR0ZXh0ICs9IGDvvJoke01vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihwYXJhbXMucmVtYXJrKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGV4dCArPSAn44CCJztcblx0XHRcdH1cblx0XHRcdGlmICghTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0dGV4dCArPSAne3snLmNvbmNhdCgnc3Vic3Q6JykuY29uY2F0KCdOQUN9fScpO1xuXHRcdFx0fVxuXHRcdFx0dGV4dCArPSAnLS1+ficuY29uY2F0KCd+ficsICdcXG57e2RlbGZ9fScpO1xuXHRcdFx0aWYgKGJhclsxXSkge1xuXHRcdFx0XHR0ZXh0ICs9IGBcXG4tLS0tXFxuJHtiYXIuc2xpY2UoMSkuam9pbignXFxuLS0tLVxcbicpfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2VuZCkge1xuXHRcdFx0XHR0ZXh0ICs9ICdcXG48c2VjdGlvbiBlbmQ9YmFja2xvZyAvPic7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2JlZ2luKSB7XG5cdFx0XHRcdC8vIGd1YXJhbnRlZWQgdG8gYmUgYXQgdG5lIGVuZD9cblx0XHRcdFx0dGV4dCArPSAnXFxuPHNlY3Rpb24gYmVnaW49YmFja2xvZyAvPic7XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShgLyogJHtwYXJhbXMudGl0bGV9ICovICR7cmVhc29ufWApO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZShUd2lua2xlLmNsb3NlLmNhbGxiYWNrcy5kaXNhYmxlTGluayk7XG5cdFx0fSxcblx0XHRkaXNhYmxlTGluazogKHBhZ2VvYmopID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHQkKGBzdHJvbmcgYVtocmVmPSMke3BhcmFtcy5zZWN0aW9ufV0gc3BhbmApLmNzcygnY29sb3InLCAnIzgwODA4MCcpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUuY2xvc2UsICdjbG9zZScpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZWNvbmZpZy5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGVjb25maWcoJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIHR3aW5rbGVjb25maWcuanM6IFByZWZlcmVuY2VzIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IEFkZHMgY29uZmlndXJhdGlvbiBmb3JtIHRvIEhlbHA6VHdpbmtsZS/lj4LmlbDorr7nva4sXG5cdCAqIGFuZCBhZGRzIGFuIGFkIGJveCB0byB0aGUgdG9wIG9mIHVzZXIgc3VicGFnZXMgYmVsb25naW5nIHRvIHRoZVxuXHQgKiBjdXJyZW50bHkgbG9nZ2VkLWluIHVzZXIgd2hpY2ggZW5kIGluICcuanMnXG5cdCAqIEFjdGl2ZSBvbjogV2hhdCBJIGp1c3Qgc2FpZC4gWWVhaC5cblx0ICovXG5cdFR3aW5rbGUuY29uZmlnID0ge307XG5cdFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zID0ge1xuXHRcdHllczogd2luZG93LndnVUxTKCfmsLjkuYXliqDlhaXliLDnm5Hop4bliJfooagnLCAn5rC45LmF5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0bm86IHdpbmRvdy53Z1VMUygn5LiN5Yqg5YWl5Yiw55uR6KeG5YiX6KGoJywgJ+S4jeWKoOWFpeWIsOebo+imlua4heWWricpLFxuXHRcdGRlZmF1bHQ6IHdpbmRvdy53Z1VMUygn6YG15a6I56uZ54K56K6+572uJywgJ+mBteWuiOermem7nuioreWumicpLFxuXHRcdCcxIHdlZWsnOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeWIsOebkeinhuWIl+ihqDHlkagnLCAn5Yqg5YWl5Yiw55uj6KaW5riF5ZauMemAsScpLFxuXHRcdCcxIG1vbnRoJzogd2luZG93LndnVUxTKCfliqDlhaXliLDnm5Hop4bliJfooagx5Liq5pyIJywgJ+WKoOWFpeWIsOebo+imlua4heWWrjHlgIvmnIgnKSxcblx0XHQnMyBtb250aHMnOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeWIsOebkeinhuWIl+ihqDPkuKrmnIgnLCAn5Yqg5YWl5Yiw55uj6KaW5riF5ZauM+WAi+aciCcpLFxuXHRcdCc2IG1vbnRocyc6IHdpbmRvdy53Z1VMUygn5Yqg5YWl5Yiw55uR6KeG5YiX6KGoNuS4quaciCcsICfliqDlhaXliLDnm6PoppbmuIXllq425YCL5pyIJyksXG5cdH07XG5cdFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMgPSB7XG5cdFx0Y3NkQ3JpdGVyaWE6IHtcblx0XHRcdGRiOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieeQhueUsScsICfoh6roqILnkIbnlLEnKSxcblx0XHRcdGcxOiAnRzEnLFxuXHRcdFx0ZzI6ICdHMicsXG5cdFx0XHRnMzogJ0czJyxcblx0XHRcdGc0OiAnRzQnLFxuXHRcdFx0ZzU6ICdHNScsXG5cdFx0XHRnNjogJ0c2Jyxcblx0XHRcdGc3OiAnRzcnLFxuXHRcdFx0Zzg6ICdHOCcsXG5cdFx0XHRnOTogJ0c5Jyxcblx0XHRcdGExOiAnQTEnLFxuXHRcdFx0YTI6ICdBMicsXG5cdFx0XHRhMzogJ0EzJyxcblx0XHRcdG8xOiAnTzEnLFxuXHRcdFx0bzI6ICdPMicsXG5cdFx0XHRvMzogJ08zJyxcblx0XHRcdGYxOiAnRjEnLFxuXHRcdFx0ZjI6ICdGMicsXG5cdFx0XHRmMzogJ0YzJyxcblx0XHRcdGY0OiAnRjQnLFxuXHRcdFx0ZjU6ICdGNScsXG5cdFx0XHRyMTogJ1IxJyxcblx0XHRcdHIyOiAnUjInLFxuXHRcdH0sXG5cdFx0Y3NkQ3JpdGVyaWFEaXNwbGF5T3JkZXI6IFtcblx0XHRcdCdkYicsXG5cdFx0XHQnZzEnLFxuXHRcdFx0J2cyJyxcblx0XHRcdCdnMycsXG5cdFx0XHQnZzQnLFxuXHRcdFx0J2c1Jyxcblx0XHRcdCdnNicsXG5cdFx0XHQnZzcnLFxuXHRcdFx0J2c4Jyxcblx0XHRcdCdnOScsXG5cdFx0XHQnYTEnLFxuXHRcdFx0J2EyJyxcblx0XHRcdCdhMycsXG5cdFx0XHQnbzEnLFxuXHRcdFx0J28yJyxcblx0XHRcdCdvMycsXG5cdFx0XHQnZjEnLFxuXHRcdFx0J2YyJyxcblx0XHRcdCdmMycsXG5cdFx0XHQnZjQnLFxuXHRcdFx0J2Y1Jyxcblx0XHRcdCdyMScsXG5cdFx0XHQncjInLFxuXHRcdF0sXG5cdFx0Y3NkQ3JpdGVyaWFOb3RpZmljYXRpb246IHtcblx0XHRcdGRiOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieeQhueUsScsICfoh6roqILnkIbnlLEnKSxcblx0XHRcdGcxOiAnRzEnLFxuXHRcdFx0ZzI6ICdHMicsXG5cdFx0XHRnMzogJ0czJyxcblx0XHRcdGc0OiAnRzQnLFxuXHRcdFx0ZzU6ICdHNScsXG5cdFx0XHRnNjogJ0c2Jyxcblx0XHRcdGc3OiAnRzcnLFxuXHRcdFx0Zzg6ICdHOCcsXG5cdFx0XHRnOTogJ0c5Jyxcblx0XHRcdGExOiAnQTEnLFxuXHRcdFx0YTI6ICdBMicsXG5cdFx0XHRhMzogJ0EzJyxcblx0XHRcdG8xOiAnTzEnLFxuXHRcdFx0bzI6ICdPMicsXG5cdFx0XHRvMzogJ08zJyxcblx0XHRcdGYxOiAnRjEnLFxuXHRcdFx0ZjI6ICdGMicsXG5cdFx0XHRmMzogJ0YzJyxcblx0XHRcdGY0OiAnRjQnLFxuXHRcdFx0ZjU6ICdGNScsXG5cdFx0XHRyMTogJ1IxJyxcblx0XHRcdHIyOiAnUjInLFxuXHRcdH0sXG5cdFx0Y3NkQ3JpdGVyaWFOb3RpZmljYXRpb25EaXNwbGF5T3JkZXI6IFtcblx0XHRcdCdkYicsXG5cdFx0XHQnZzEnLFxuXHRcdFx0J2cyJyxcblx0XHRcdCdnMycsXG5cdFx0XHQnZzQnLFxuXHRcdFx0J2c1Jyxcblx0XHRcdCdnNicsXG5cdFx0XHQnZzcnLFxuXHRcdFx0J2c4Jyxcblx0XHRcdCdnOScsXG5cdFx0XHQnYTEnLFxuXHRcdFx0J2EyJyxcblx0XHRcdCdhMycsXG5cdFx0XHQnbzEnLFxuXHRcdFx0J28yJyxcblx0XHRcdCdvMycsXG5cdFx0XHQnZjEnLFxuXHRcdFx0J2YyJyxcblx0XHRcdCdmMycsXG5cdFx0XHQnZjQnLFxuXHRcdFx0J2Y1Jyxcblx0XHRcdCdyMScsXG5cdFx0XHQncjInLFxuXHRcdF0sXG5cdFx0Y3NkQW5kRElDcml0ZXJpYToge1xuXHRcdFx0ZGI6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ55CG55SxJywgJ+iHquiogueQhueUsScpLFxuXHRcdFx0ZzE6ICdHMScsXG5cdFx0XHRnMjogJ0cyJyxcblx0XHRcdGczOiAnRzMnLFxuXHRcdFx0ZzQ6ICdHNCcsXG5cdFx0XHRnNTogJ0c1Jyxcblx0XHRcdGc2OiAnRzYnLFxuXHRcdFx0Zzc6ICdHNycsXG5cdFx0XHRnODogJ0c4Jyxcblx0XHRcdGc5OiAnRzknLFxuXHRcdFx0YTE6ICdBMScsXG5cdFx0XHRhMjogJ0EyJyxcblx0XHRcdGEzOiAnQTMnLFxuXHRcdFx0bzE6ICdPMScsXG5cdFx0XHRvMjogJ08yJyxcblx0XHRcdG8zOiAnTzMnLFxuXHRcdFx0ZjE6ICdGMScsXG5cdFx0XHRmMjogJ0YyJyxcblx0XHRcdGYzOiAnRjMnLFxuXHRcdFx0ZjQ6ICdGNCcsXG5cdFx0XHRmNTogJ0Y1Jyxcblx0XHRcdHIxOiAnUjEnLFxuXHRcdFx0cjI6ICdSMicsXG5cdFx0fSxcblx0XHRjc2RBbmRESUNyaXRlcmlhRGlzcGxheU9yZGVyOiBbXG5cdFx0XHQnZGInLFxuXHRcdFx0J2cxJyxcblx0XHRcdCdnMicsXG5cdFx0XHQnZzMnLFxuXHRcdFx0J2c0Jyxcblx0XHRcdCdnNScsXG5cdFx0XHQnZzYnLFxuXHRcdFx0J2c3Jyxcblx0XHRcdCdnOCcsXG5cdFx0XHQnZzknLFxuXHRcdFx0J2ExJyxcblx0XHRcdCdhMicsXG5cdFx0XHQnYTMnLFxuXHRcdFx0J28xJyxcblx0XHRcdCdvMicsXG5cdFx0XHQnbzMnLFxuXHRcdFx0J2YxJyxcblx0XHRcdCdmMicsXG5cdFx0XHQnZjMnLFxuXHRcdFx0J2Y0Jyxcblx0XHRcdCdmNScsXG5cdFx0XHQncjEnLFxuXHRcdFx0J3IyJyxcblx0XHRdLFxuXHRcdHhmZENyaXRlcmlhOiB7XG5cdFx0XHRkZWxldGU6IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIqumZpCcpLFxuXHRcdFx0bWVyZ2U6IHdpbmRvdy53Z1VMUygn5ZCI5bm2JywgJ+WQiOS9tScpLFxuXHRcdFx0ZndkY3NkOiB3aW5kb3cud2dVTFMoJ+i9rOS6pOiHquW/q+mAn+WIoOmZpOWAmemAiScsICfovYnkuqToh6rlv6vpgJ/liKrpmaTlgJnpgbgnKSxcblx0XHRcdGZhbWU6IHdpbmRvdy53Z1VMUygn5om56YeP5YWz5rOo5bqm5o+Q5YigJywgJ+aJueasoemXnOazqOW6puaPkOWIqicpLFxuXHRcdFx0c3Vic3R1Yjogd2luZG93LndnVUxTKCfmibnph4/lsI/lsI/kvZzlk4Hmj5DliKAnLCAn5om55qyh5bCP5bCP5L2c5ZOB5o+Q5YiqJyksXG5cdFx0XHRiYXRjaDogd2luZG93LndnVUxTKCfmibnph4/lhbbku5bmj5DliKAnLCAn5om55qyh5YW25LuW5o+Q5YiqJyksXG5cdFx0fSxcblx0XHR4ZmRDcml0ZXJpYURpc3BsYXlPcmRlcjogWydkZWxldGUnLCAnbWVyZ2UnLCAnZndkY3NkJywgJ2ZhbWUnLCAnc3Vic3R1YicsICdiYXRjaCddLFxuXHRcdG5hbWVzcGFjZXNOb1NwZWNpYWw6IHtcblx0XHRcdDA6IHdpbmRvdy53Z1VMUygn77yI5p2h55uu77yJJywgJ++8iOaineebru+8iScpLFxuXHRcdFx0MTogJ1RhbGsnLFxuXHRcdFx0MjogJ1VzZXInLFxuXHRcdFx0MzogJ1VzZXIgdGFsaycsXG5cdFx0XHQ0OiAnTElCJyxcblx0XHRcdDU6ICdMSUIgdGFsaycsXG5cdFx0XHQ2OiAnRmlsZScsXG5cdFx0XHQ3OiAnRmlsZSB0YWxrJyxcblx0XHRcdDg6ICdNZWRpYVdpa2knLFxuXHRcdFx0OTogJ01lZGlhV2lraSB0YWxrJyxcblx0XHRcdDEwOiAnVGVtcGxhdGUnLFxuXHRcdFx0MTE6ICdUZW1wbGF0ZSB0YWxrJyxcblx0XHRcdDEyOiAnSGVscCcsXG5cdFx0XHQxMzogJ0hlbHAgdGFsaycsXG5cdFx0XHQxNDogJ0NhdGVnb3J5Jyxcblx0XHRcdDE1OiAnQ2F0ZWdvcnkgdGFsaycsXG5cdFx0XHQyNzQ6ICdXaWRnZXQnLFxuXHRcdFx0Mjc1OiAnV2lkZ2V0IHRhbGsnLFxuXHRcdFx0MzAwOiAnRmFubWFkZScsXG5cdFx0XHQzMDE6ICdGYW5tYWRlIHRhbGsnLFxuXHRcdFx0MzAyOiAnRHJhZnQnLFxuXHRcdFx0MzAzOiAnRHJhZnQgdGFsaycsXG5cdFx0XHQzMDQ6ICdTTVdEYXRhJyxcblx0XHRcdDMwNTogJ1NNV0RhdGEgdGFsaycsXG5cdFx0XHQ4Mjk6ICdNb2R1bGUgdGFsaycsXG5cdFx0fSxcblx0fTtcblx0LyoqXG5cdCAqIFNlY3Rpb24gZW50cnkgZm9ybWF0OlxuXHQgKlxuXHQgKiB7XG5cdCAqICAgdGl0bGU6IDxodW1hbi1yZWFkYWJsZSBzZWN0aW9uIHRpdGxlPixcblx0ICogICBtb2R1bGU6IDxuYW1lIG9mIHRoZSBhc3NvY2lhdGVkIG1vZHVsZSwgdXNlZCB0byBsaW5rIHRvIHNlY3Rpb25zPixcblx0ICogICBhZG1pbk9ubHk6IDx0cnVlIGZvciBhZG1pbi1vbmx5IHNlY3Rpb25zPixcblx0ICogICBoaWRkZW46IDx0cnVlIGZvciBhZHZhbmNlZCBwcmVmZXJlbmNlcyB0aGF0IHJhcmVseSBuZWVkIHRvIGJlIGNoYW5nZWQgLSB0aGV5IGNhbiBzdGlsbCBiZSBtb2RpZmllZCBieSBtYW51YWxseSBlZGl0aW5nIHR3aW5rbGVvcHRpb25zLmpzPixcblx0ICogICBwcmVmZXJlbmNlczogW1xuXHQgKiAgICAge1xuXHQgKiAgICAgICBuYW1lOiA8VHdpbmtsZUNvbmZpZyBwcm9wZXJ0eSBuYW1lPixcblx0ICogICAgICAgbGFiZWw6IDxodW1hbi1yZWFkYWJsZSBzaG9ydCBkZXNjcmlwdGlvbiAtIHVzZWQgYXMgYSBmb3JtIGxhYmVsPixcblx0ICogICAgICAgaGVscHRpcDogPChvcHRpb25hbCkgaHVtYW4tcmVhZGFibGUgdGV4dCAodXNpbmcgdmFsaWQgSFRNTCkgdGhhdCBjb21wbGVtZW50cyB0aGUgZGVzY3JpcHRpb24sIGxpa2UgbGltaXRzLCB3YXJuaW5ncywgZXRjLj5cblx0ICogICAgICAgYWRtaW5Pbmx5OiA8dHJ1ZSBmb3IgYWRtaW4tb25seSBwcmVmZXJlbmNlcz4sXG5cdCAqICAgICAgIHR5cGU6IDxzdHJpbmd8Ym9vbGVhbnxpbnRlZ2VyfGVudW18c2V0fGN1c3RvbUxpc3Q+IChjdXN0b21MaXN0IHN0b3JlcyBhbiBhcnJheSBvZiBKU09OIG9iamVjdHMgeyB2YWx1ZSwgbGFiZWwgfSksXG5cdCAqICAgICAgIGVudW1WYWx1ZXM6IDxmb3IgdHlwZSA9IFwiZW51bVwiOiBhIEpTT04gb2JqZWN0IHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgaW50ZXJuYWwgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIGh1bWFuLXJlYWRhYmxlIHN0cmluZ3M+LFxuXHQgKiAgICAgICBzZXRWYWx1ZXM6IDxmb3IgdHlwZSA9IFwic2V0XCI6IGEgSlNPTiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBpbnRlcm5hbCBuYW1lcyBhbmQgdGhlIHZhbHVlcyBhcmUgaHVtYW4tcmVhZGFibGUgc3RyaW5ncz4sXG5cdCAqICAgICAgIHNldERpc3BsYXlPcmRlcjogPChvcHRpb25hbCkgZm9yIHR5cGUgPSBcInNldFwiOiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBrZXlzIG9mIHNldFZhbHVlcyAoYXMgc3RyaW5ncykgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgZGlzcGxheWVkPixcblx0ICogICAgICAgY3VzdG9tTGlzdFZhbHVlVGl0bGU6IDxmb3IgdHlwZSA9IFwiY3VzdG9tTGlzdFwiOiB0aGUgaGVhZGluZyBmb3IgdGhlIGxlZnQgXCJ2YWx1ZVwiIGNvbHVtbiBpbiB0aGUgY3VzdG9tIGxpc3QgZWRpdG9yPixcblx0ICogICAgICAgY3VzdG9tTGlzdExhYmVsVGl0bGU6IDxmb3IgdHlwZSA9IFwiY3VzdG9tTGlzdFwiOiB0aGUgaGVhZGluZyBmb3IgdGhlIHJpZ2h0IFwibGFiZWxcIiBjb2x1bW4gaW4gdGhlIGN1c3RvbSBsaXN0IGVkaXRvcj5cblx0ICogICAgIH0sXG5cdCAqICAgICAuIC4gLlxuXHQgKiAgIF1cblx0ICogfSxcblx0ICogLiAuIC5cblx0ICpcblx0ICovXG5cdFR3aW5rbGUuY29uZmlnLnNlY3Rpb25zID0gW1xuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+W4uOinhCcsICfluLjopo8nKSxcblx0XHRcdG1vZHVsZTogJ2dlbmVyYWwnLFxuXHRcdFx0cHJlZmVyZW5jZXM6IFtcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy51c2VyVGFsa1BhZ2VNb2RlIG1heSB0YWtlIGFyZ3VtZW50czpcblx0XHRcdFx0Ly8gJ3dpbmRvdyc6IG9wZW4gYSBuZXcgd2luZG93LCByZW1lbWJlciB0aGUgb3BlbmVkIHdpbmRvd1xuXHRcdFx0XHQvLyAndGFiJzogb3BlbnMgaW4gYSBuZXcgdGFiLCBpZiBwb3NzaWJsZS5cblx0XHRcdFx0Ly8gJ2JsYW5rJzogZm9yY2Ugb3BlbiBpbiBhIG5ldyB3aW5kb3csIGV2ZW4gaWYgc3VjaCBhIHdpbmRvdyBleGlzdHNcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd1c2VyVGFsa1BhZ2VNb2RlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvZPopoHmiZPlvIDnlKjmiLforqjorrrpobXml7YnLCAn55W26KaB5omT6ZaL5L2/55So6ICF6KiO6KuW6aCB5pmCJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IHtcblx0XHRcdFx0XHRcdHdpbmRvdzogd2luZG93LndnVUxTKCflnKjnqpflj6PkuK3vvIzmm7/mjaLmiJDlhbblroPnlKjmiLflr7nor53pobUnLCAn5Zyo55W25YmN5YiG6aCB77yM5pu/5o+b5oiQ5YW25a6D55So5oi26KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0XHR0YWI6IHdpbmRvdy53Z1VMUygn5Zyo5paw5qCH562+6aG15LitJywgJ+WcqOaWsOWIhumggeS4rScpLFxuXHRcdFx0XHRcdFx0Ymxhbms6IHdpbmRvdy53Z1VMUygn5Zyo5YWo5paw55qE56qX5Y+j5LitJywgJ+WcqOaWsOimlueql+S4rScpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGlhbG9nTGFyZ2VGb250IChib29sZWFuKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2RpYWxvZ0xhcmdlRm9udCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5ZyoVHdpbmtsZeWvueivneahhuS4reS9v+eUqOWkp+WPt+Wtl+S9kycsICflnKhUd2lua2xl5bCN6Kmx5pa55aGK5Lit5L2/55So5aSn6Jmf5a2X5Z6LJyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlLmNvbmZpZy5kaXNhYmxlZE1vZHVsZXMgKGFycmF5KVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2Rpc2FibGVkTW9kdWxlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YWz6Zet5oyH5a6a55qEVHdpbmtsZeaooeWdlycsICfpl5zplonmjIflrprnmoRUd2lua2xl5qih57WEJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOWcqOatpOmAieaLqeeahOWKn+iDveWwhuaXoOazleS9v+eUqO+8jOWPlua2iOmAieaLqeS7pemHjeaWsOWQr+eUqOWKn+iDveOAgicsXG5cdFx0XHRcdFx0XHQn5oKo5Zyo5q2k6YG45pOH55qE5Yqf6IO95bCH54Sh5rOV5L2/55So77yM5Y+W5raI6YG45pOH5Lul6YeN5paw5ZWf55So5Yqf6IO944CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ3NldCcsXG5cdFx0XHRcdFx0c2V0VmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRhcnY6IHdpbmRvdy53Z1VMUygn5ZGK54q2JywgJ+WRiueLgCcpLFxuXHRcdFx0XHRcdFx0d2FybjogJ+itpuWRiicsXG5cdFx0XHRcdFx0XHRibG9jazogd2luZG93LndnVUxTKCflsIHnpoEnLCAn5bCB6Y6WJyksXG5cdFx0XHRcdFx0XHR0YWxrYmFjazogJ+mAmuWRiicsXG5cdFx0XHRcdFx0XHRzcGVlZHk6IHdpbmRvdy53Z1VMUygn6YCf5YigJywgJ+mAn+WIqicpLFxuXHRcdFx0XHRcdFx0Y29weXZpbzogd2luZG93LndnVUxTKCfkvrXmnYMnLCAn5L615qyKJyksXG5cdFx0XHRcdFx0XHR4ZmQ6IHdpbmRvdy53Z1VMUygn5o+Q5YigJywgJ+aPkOWIqicpLFxuXHRcdFx0XHRcdFx0aW1hZ2U6IHdpbmRvdy53Z1VMUygn5Zu+5p2DJywgJ+WcluasiicpLFxuXHRcdFx0XHRcdFx0cHJvdGVjdDogd2luZG93LndnVUxTKCfkv53miqQnLCAn5L+d6K23JyksXG5cdFx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn5qCH6K6wJywgJ+aomeiomCcpLFxuXHRcdFx0XHRcdFx0c3R1YjogJ+Wwj+S9nOWTgScsXG5cdFx0XHRcdFx0XHRkaWZmOiB3aW5kb3cud2dVTFMoJ+W3ruW8gicsICflt67nlbAnKSxcblx0XHRcdFx0XHRcdHVubGluazogd2luZG93LndnVUxTKCfpk77lhaUnLCAn6YCj5YWlJyksXG5cdFx0XHRcdFx0XHRmbHVmZjogJ+WbnumAgCcsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZS5jb25maWcuZGlzYWJsZWRTeXNvcE1vZHVsZXMgKGFycmF5KVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2Rpc2FibGVkU3lzb3BNb2R1bGVzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhbPpl63mjIflrprnmoRUd2lua2xl566h55CG5ZGY5qih5Z2XJywgJ+mXnOmWieaMh+WumueahFR3aW5rbGXnrqHnkIblk6HmqKHntYQnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5oKo5Zyo5q2k6YCJ5oup55qE5Yqf6IO95bCG5peg5rOV5L2/55So77yM5Y+W5raI6YCJ5oup5Lul6YeN5paw5ZCv55So5Yqf6IO944CCJyxcblx0XHRcdFx0XHRcdCfmgqjlnKjmraTpgbjmk4fnmoTlip/og73lsIfnhKHms5Xkvb/nlKjvvIzlj5bmtojpgbjmk4fku6Xph43mlrDllZ/nlKjlip/og73jgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogJ3NldCcsXG5cdFx0XHRcdFx0c2V0VmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRiYXRjaGRlbGV0ZTogd2luZG93LndnVUxTKCfmibnliKAnLCAn5om55YiqJyksXG5cdFx0XHRcdFx0XHRiYXRjaHVuZGVsZXRlOiB3aW5kb3cud2dVTFMoJ+aJueWkjScsICfmibnlvqknKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WRiueKticsICflkYrni4AnKSxcblx0XHRcdG1vZHVsZTogJ2FydicsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3NwaVdhdGNoUmVwb3J0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj5HotbflgoDlhKHosIPmn6Xml7bliqDlhaXliLDnm5Hop4bliJfooagnLCAn55m86LW35YKA5YSh6Kq/5p+l5pmC5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WwgeemgeeUqOaItycsICflsIHpjpbkvb/nlKjogIUnKSxcblx0XHRcdG1vZHVsZTogJ2Jsb2NrJyxcblx0XHRcdGFkbWluT25seTogdHJ1ZSxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGVmYXVsdFRvQmxvY2s2NCAoYm9vbGVhbilcblx0XHRcdFx0Ly8gV2hldGhlciB0byBkZWZhdWx0IHRvIGp1c3QgYmxvY2tpbmcgdGhlIC82NCBvbiBvciBvZmZcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdkZWZhdWx0VG9CbG9jazY0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflr7nkuo5JUHY25Zyw5Z2A77yM6buY6K6k6YCJ5oup5bCB56aBLzY05q61JywgJ+WwjeaWvElQdjblnLDlnYDvvIzpoJDoqK3pgbjmk4flsIHpjpYvNjTmrrUnKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGVmYXVsdFRvUGFydGlhbEJsb2NrcyAoYm9vbGVhbilcblx0XHRcdFx0Ly8gV2hldGhlciB0byBkZWZhdWx0IHBhcnRpYWwgYmxvY2tzIG9uIG9yIG9mZlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2RlZmF1bHRUb1BhcnRpYWxCbG9ja3MnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aJk+W8gOWwgeemgeiPnOWNleaXtum7mOiupOmAieaLqemDqOWIhuWwgeemgScsICfmiZPplovlsIHpjpbpgbjllq7mmYLpoJDoqK3pgbjmk4fpg6jliIblsIHpjpYnKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcud2F0Y2hCbG9ja05vdGljZXMgKHN0cmluZylcblx0XHRcdFx0Ly8gV2F0Y2hsaXN0IHNldHRpbmcgZm9yIHRoZSBwYWdlIHdoaWNoIGhhcyBiZWVuIGRpc3BhdGNoZWQgYW4gd2FybmluZyBvciBub3RpY2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaEJsb2NrTm90aWNlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflj5HpgIHlsIHnpoHmqKHmnb/ml7bliqDlhaXnlKjmiLforqjorrrpobXliLDnm5Hop4bliJfooagnLFxuXHRcdFx0XHRcdFx0J+eZvOmAgeWwgemOluaooeadv+aZguWKoOWFpeS9v+eUqOiAheiojuirlumggeWIsOebo+imlua4heWWridcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdjdXN0b21CbG9ja1JlYXNvbkxpc3QnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieWwgeemgeeQhueUsScsICfoh6roqILlsIHpjpbnkIbnlLEnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5oKo5Y+v5Lul5Yqg5YWl5bi455So55qE5bCB56aB55CG55Sx44CC6Ieq5a6a5LmJ55qE5bCB56aB55CG55Sx5Lya5Ye6546w5Zyo5LiA6Iis55qE5bCB56aB55CG55Sx5LiL5pa544CCJyxcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XliqDlhaXluLjnlKjnmoTlsIHpjpbnkIbnlLHjgILoh6roqILnmoTlsIHpjpbnkIbnlLHmnIPlh7rnj77lnKjkuIDoiKznmoTlsIHpjpbnkIbnlLHkuIvmlrnjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnY3VzdG9tTGlzdCcsXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdFZhbHVlVGl0bGU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfkvb/nlKjlsIHnpoHmqKHmnb/vvIjpu5jorqTkuLogdXctYmxvY2sx77yJJyxcblx0XHRcdFx0XHRcdCfkvb/nlKjlsIHpjpbmqKHmnb/vvIjpoJDoqK3ngrogdXctYmxvY2sx77yJJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdExhYmVsVGl0bGU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfigJznlLHkuo7igKbmgqjlt7LooqvlsIHnpoHigJ3lj4rlsIHnpoHml6Xlv5fnkIbnlLEnLFxuXHRcdFx0XHRcdFx0J+OAjOeUseaWvOKApuaCqOW3suiiq+WwgemOluOAjeWPiuWwgemOluaXpeiqjOeQhueUsSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WbvueJh+WIoOmZpCcsICflnJbniYfliKrpmaQnKSxcblx0XHRcdG1vZHVsZTogJ2ltYWdlJyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcubm90aWZ5VXNlck9uRGVsaSAoYm9vbGVhbilcblx0XHRcdFx0Ly8gSWYgdGhlIHVzZXIgc2hvdWxkIGJlIG5vdGlmaWVkIGFmdGVyIHBsYWNpbmcgYSBmaWxlIGRlbGV0aW9uIHRhZ1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ25vdGlmeVVzZXJPbkRlbGknLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOWLvumAieKAnOmAmuefpeWIm+W7uuiAheKAnScsICfpoJDoqK3li77pgbjjgIzpgJrnn6Xlu7rnq4vogIXjgI0nKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGVsaVdhdGNoUGFnZSAoc3RyaW5nKVxuXHRcdFx0XHQvLyBUaGUgd2F0Y2hsaXN0IHNldHRpbmcgb2YgdGhlIHBhZ2UgdGFnZ2VkIGZvciBkZWxldGlvbi5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdkZWxpV2F0Y2hQYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDlm77niYfml7bliqDlhaXliLDnm5Hop4bliJfooagnLCAn5qiZ6KiY5ZyW54mH5pmC5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLmRlbGlXYXRjaFVzZXIgKHN0cmluZylcblx0XHRcdFx0Ly8gVGhlIHdhdGNobGlzdCBzZXR0aW5nIG9mIHRoZSB1c2VyIHRhbGsgcGFnZSBpZiBhIG5vdGlmaWNhdGlvbiBpcyBwbGFjZWQuXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVsaVdhdGNoVXNlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qCH6K6w5Zu+54mH5pe25Yqg5YWl5Yib5bu66ICF6K6o6K666aG15Yiw55uR6KeG5YiX6KGoJywgJ+aomeiomOWclueJh+aZguWKoOWFpeW7uueri+iAheiojuirlumggeWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfkv53miqQnLCAn5L+d6K23JyksXG5cdFx0XHRtb2R1bGU6ICdwcm90ZWN0Jyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnd2F0Y2hSZXF1ZXN0ZWRQYWdlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6K+35rGC5L+d5oqk6aG16Z2i5pe25Yqg5YWl5Yiw55uR6KeG5YiX6KGoJywgJ+iri+axguS/neitt+mggemdouaZguWKoOWFpeWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFBQVGFnZ2VkUGFnZXMnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOS/neaKpOaooeadv+aXtuWKoOWFpeWIsOebkeinhuWIl+ihqCcsICfmqJnoqJjkv53orbfmqKHmnb/mmYLliqDlhaXliLDnm6PoppbmuIXllq4nKSxcblx0XHRcdFx0XHR0eXBlOiAnZW51bScsXG5cdFx0XHRcdFx0ZW51bVZhbHVlczogVHdpbmtsZS5jb25maWcud2F0Y2hsaXN0RW51bXMsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnd2F0Y2hQcm90ZWN0ZWRQYWdlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L+d5oqk5pe25Yqg5YWl5Yiw55uR6KeG5YiX6KGoJywgJ+S/neitt+aZguWKoOWFpeWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfoi6XlnKjkv53miqTlkI7kuZ/moIforrDpobXpnaLvvIzliJnkvb/nlKjmoIforrDpobXpnaLnmoTlj4LmlbDorr7nva7jgIInLFxuXHRcdFx0XHRcdFx0J+iLpeWcqOS/neitt+W+jOS5n+aomeiomOmggemdou+8jOWJh+S9v+eUqOaomeiomOmggemdoueahOWBj+WlveioreWumuOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGFkbWluT25seTogdHJ1ZSxcblx0XHRcdFx0XHR0eXBlOiAnZW51bScsXG5cdFx0XHRcdFx0ZW51bVZhbHVlczogVHdpbmtsZS5jb25maWcud2F0Y2hsaXN0RW51bXMsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dGl0bGU6ICflm57pgIAnLFxuXHRcdFx0Ly8gdHdpbmtsZWZsdWZmIG1vZHVsZVxuXHRcdFx0bW9kdWxlOiAnZmx1ZmYnLFxuXHRcdFx0cHJlZmVyZW5jZXM6IFtcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5hdXRvTWVudUFmdGVyUm9sbGJhY2sgKGJvb2wpXG5cdFx0XHRcdC8vIE9wdGlvbiB0byBhdXRvbWF0aWNhbGx5IG9wZW4gdGhlIHdhcm5pbmcgbWVudSBpZiB0aGUgdXNlciB0YWxrIHBhZ2UgaXMgb3BlbmVkIHBvc3QtcmV2ZXJzaW9uXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnYXV0b01lbnVBZnRlclJvbGxiYWNrJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WcqFR3aW5rbGXlm57pgIDlkI7oh6rliqjmiZPlvIDnlKjmiLforqjorrrpobXkuIrnmoRUd2lua2xl6K2m5ZGK6I+c5Y2VJyxcblx0XHRcdFx0XHRcdCflnKhUd2lua2xl5Zue6YCA5b6M6Ieq5YuV5omT6ZaL5L2/55So6ICF6KiO6KuW6aCB5LiK55qEVHdpbmtsZeitpuWRiumBuOWWridcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn5LuF5Zyo6YCJ5Y+W5LiL5pa55a+55bqU5qGG5pe25omN5omn6KGMJywgJ+WDheWcqOmBuOWPluS4i+aWueWwjeaHieahhuaZguaJjeWft+ihjCcpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5vcGVuVGFsa1BhZ2UgKGFycmF5KVxuXHRcdFx0XHQvLyBXaGF0IHR5cGVzIG9mIGFjdGlvbnMgdGhhdCBzaG91bGQgcmVzdWx0IGluIG9wZW5pbmcgb2YgdGFsayBwYWdlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnb3BlblRhbGtQYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflnKjov5nkupvnsbvlnovnmoTlm57pgIDlkI7miZPlvIDnlKjmiLforqjorrrpobUnLCAn5Zyo6YCZ5Lqb6aGe5Yil55qE5Zue6YCA5b6M5omT6ZaL5L2/55So6ICF6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0dHlwZTogJ3NldCcsXG5cdFx0XHRcdFx0c2V0VmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRub3JtOiB3aW5kb3cud2dVTFMoJ+W4uOinhOWbnumAgCcsICfluLjopo/lm57pgIAnKSxcblx0XHRcdFx0XHRcdHZhbmQ6IHdpbmRvdy53Z1VMUygn56C05Z2P5Zue6YCAJywgJ+egtOWjnuWbnumAgCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcub3BlblRhbGtQYWdlT25BdXRvUmV2ZXJ0IChib29sKVxuXHRcdFx0XHQvLyBEZWZpbmVzIGlmIHRhbGsgcGFnZSBzaG91bGQgYmUgb3BlbmVkIHdoZW4gY2FsbGluZyByZXZlcnQgZnJvbSBjb250cmlicyBvciByZWNlbnQgY2hhbmdlcyBwYWdlcy4gSWYgc2V0IHRvIHRydWUsIG9wZW5UYWxrUGFnZSBkZWZpbmVzIHRoZW4gaWYgdGFsayBwYWdlIHdpbGwgYmUgb3BlbmVkLlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ29wZW5UYWxrUGFnZU9uQXV0b1JldmVydCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjku47nlKjmiLfotKHnjK7lj4rmnIDov5Hmm7TmlLnkuK3lj5Hotbflm57pgIDml7bmiZPlvIDnlKjmiLforqjorrrpobUnLFxuXHRcdFx0XHRcdFx0J+WcqOW+nuS9v+eUqOiAheiyoueNu+WPiui/keacn+iuiuabtOS4reeZvOi1t+WbnumAgOaZguaJk+mWi+S9v+eUqOiAheiojuirlumggSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn5b2T5a6D5omT5byA5pe277yM5L6d6LWW5LiK5LiA5Liq6K6+572u44CCJywgJ+eVtuWug+aJk+mWi+aZgu+8jOS+neiztOS4iuS4gOWAi+ioreWumuOAgicpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5yb2xsYmFja0luUGxhY2UgKGJvb2wpXG5cdFx0XHRcdC8vXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAncm9sbGJhY2tJblBsYWNlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WcqOS7jueUqOaIt+i0oeeMruWPiuacgOi/keabtOaUueS4reWPkei1t+WbnumAgOaXtuS4jeWIt+aWsOmhtemdoicsXG5cdFx0XHRcdFx0XHQn5Zyo5b6e5L2/55So6ICF6LKi54275Y+K6L+R5pyf6K6K5pu05Lit55m86LW35Zue6YCA5pmC5LiN6YeN5paw5pW055CG6aCB6Z2iJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+W9k+Wug+aJk+W8gOaXtu+8jFR3aW5rbGXlsIbkuI3kvJrlnKjku47nlKjmiLfotKHnjK7lj4rmnIDov5Hmm7TmlLnkuK3lj5Hotbflm57pgIDml7bliLfmlrDpobXpnaLvvIzlhYHorrjmgqjkuIDmrKHmgKflm57pgIDlpJrkuKrnvJbovpHjgIInLFxuXHRcdFx0XHRcdFx0J+eVtuWug+aJk+mWi+aZgu+8jFR3aW5rbGXlsIfkuI3mnIPlnKjlvp7kvb/nlKjogIXosqLnjbvlj4rov5HmnJ/orormm7TkuK3nmbzotbflm57pgIDmmYLph43mlrDmlbTnkIbpoIHpnaLvvIzlhYHoqLHmgqjkuIDmrKHmgKflm57pgIDlpJrlgIvnt6jovK/jgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcubWFya1JldmVydGVkUGFnZXNBc01pbm9yIChhcnJheSlcblx0XHRcdFx0Ly8gV2hhdCB0eXBlcyBvZiBhY3Rpb25zIHRoYXQgc2hvdWxkIHJlc3VsdCBpbiBtYXJraW5nIGVkaXQgYXMgbWlub3Jcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdtYXJrUmV2ZXJ0ZWRQYWdlc0FzTWlub3InLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+Wwhui/meS6m+exu+Wei+eahOWbnumAgOagh+iusOS4uuWwj+S/ruaUuScsICflsIfpgJnkupvpoZ7liKXnmoTlm57pgIDmqJnoqJjngrrlsI/kv67mlLknKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IHtcblx0XHRcdFx0XHRcdG5vcm06IHdpbmRvdy53Z1VMUygn5bi46KeE5Zue6YCAJywgJ+W4uOimj+WbnumAgCcpLFxuXHRcdFx0XHRcdFx0dmFuZDogd2luZG93LndnVUxTKCfnoLTlnY/lm57pgIAnLCAn56C05aOe5Zue6YCAJyksXG5cdFx0XHRcdFx0XHR0b3Jldjogd2luZG93LndnVUxTKCfigJzmgaLlpI3mraTniYjmnKzigJ0nLCAn44CM5oGi5b6p5q2k54mI5pys44CNJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy53YXRjaFJldmVydGVkUGFnZXMgKGFycmF5KVxuXHRcdFx0XHQvLyBXaGF0IHR5cGVzIG9mIGFjdGlvbnMgdGhhdCBzaG91bGQgcmVzdWx0IGluIGZvcmNlZCBhZGRpdGlvbiB0byB3YXRjaGxpc3Rcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFJldmVydGVkUGFnZXMnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aKiui/meS6m+exu+Wei+eahOWbnumAgOWKoOWFpeWIsOebkeinhuWIl+ihqCcsICfmiorpgJnkupvpoZ7liKXnmoTlm57pgIDliqDlhaXliLDnm6PoppbmuIXllq4nKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IHtcblx0XHRcdFx0XHRcdG5vcm06IHdpbmRvdy53Z1VMUygn5bi46KeE5Zue6YCAJywgJ+W4uOimj+WbnumAgCcpLFxuXHRcdFx0XHRcdFx0dmFuZDogd2luZG93LndnVUxTKCfnoLTlnY/lm57pgIAnLCAn56C05aOe5Zue6YCAJyksXG5cdFx0XHRcdFx0XHR0b3Jldjogd2luZG93LndnVUxTKCfigJzmgaLlpI3mraTniYjmnKzigJ0nLCAn44CM5oGi5b6p5q2k54mI5pys44CNJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy53YXRjaFJldmVydGVkRXhwaXJ5XG5cdFx0XHRcdC8vIElmIGFueSBvZiB0aGUgYWJvdmUgaXRlbXMgYXJlIHNlbGVjdGVkLCB3aGV0aGVyIHRvIGV4cGlyZSB0aGUgd2F0Y2hcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFJldmVydGVkRXhwaXJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvZPlm57pgIDpobXpnaLml7bvvIzliqDlhaXliLDnm5Hop4bliJfooajnmoTmnJ/pmZAnLCAn55W25Zue6YCA6aCB6Z2i5pmC77yM5Yqg5YWl5Yiw55uj6KaW5riF5Zau55qE5pyf6ZmQJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLm9mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQgKGJvb2xlYW4pXG5cdFx0XHRcdC8vIElmIHRvIG9mZmVyIGEgcHJvbXB0IGZvciBleHRyYSBzdW1tYXJ5IHJlYXNvbiBmb3Igbm9ybWFsIHJldmVydHMsIGRlZmF1bHQgdG8gdHJ1ZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ29mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W4uOinhOWbnumAgOaXtuivoumXrueQhueUsScsICfluLjopo/lm57pgIDmmYLoqaLllY/nkIbnlLEnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoJ+KAnOW4uOinhOKAneWbnumAgOaYr+S4remXtOeahOmCo+S4qlvlm57pgIBd6ZO+5o6l44CCJywgJ+OAjOW4uOimj+OAjeWbnumAgOaYr+S4remWk+eahOmCo+WAi1vlm57pgIBd6YCj57WQ44CCJyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2NvbmZpcm1PbkZsdWZmJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflm57pgIDliY3opoHmsYLnoa7orqTvvIjmiYDmnInorr7lpIfvvIknLCAn5Zue6YCA5YmN6KaB5rGC56K66KqN77yI5omA5pyJ6KOd572u77yJJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WvueS6juS9v+eUqOenu+WKqOiuvuWkh+eahOeUqOaIt++8jOaIluiAheaEj+W/l+S4jeWdmuWumueahOOAgicsXG5cdFx0XHRcdFx0XHQn5bCN5pa85L2/55So6KGM5YuV6KOd572u55qE5L2/55So6ICF77yM5oiW6ICF5oSP5b+X5LiN5aCF5a6a55qE44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnNob3dSb2xsYmFja0xpbmtzIChhcnJheSlcblx0XHRcdFx0Ly8gV2hlcmUgVHdpbmtsZSBzaG91bGQgc2hvdyByb2xsYmFjayBsaW5rczpcblx0XHRcdFx0Ly8gZGlmZiwgb3RoZXJzLCBtaW5lLCBjb250cmlicywgaGlzdG9yeSwgcmVjZW50XG5cdFx0XHRcdC8vIE5vdGUgZnJvbSBUVE86IHxjb250cmlic3wgc2VlbXMgdG8gYmUgZXF1YWwgdG8gfG90aGVyc3wgKyB8bWluZXwsIGkuZS4gcmVkdW5kYW50LCBzbyBJIGxlZnQgaXQgb3V0IGhlcmVzXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnc2hvd1JvbGxiYWNrTGlua3MnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOi/meS6m+mhtemdouS4iuaYvuekuuWbnumAgOmTvuaOpScsICflnKjpgJnkupvpoIHpnaLkuIrpoa/npLrlm57pgIDpgKPntZAnKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IHtcblx0XHRcdFx0XHRcdGRpZmY6IHdpbmRvdy53Z1VMUygn5beu5byCJywgJ+W3rueVsCcpLFxuXHRcdFx0XHRcdFx0aGlzdG9yeTogd2luZG93LndnVUxTKCfljoblj7LorrDlvZUnLCAn5q235Y+y6KiY6YyEJyksXG5cdFx0XHRcdFx0XHRvdGhlcnM6IHdpbmRvdy53Z1VMUygn5YW25a6D55So5oi355qE6LSh54yuJywgJ+WFtuWug+S9v+eUqOiAheeahOiyoueNuycpLFxuXHRcdFx0XHRcdFx0bWluZTogd2luZG93LndnVUxTKCfmiJHnmoTotKHnjK4nLCAn5oiR55qE6LKi5427JyksXG5cdFx0XHRcdFx0XHRyZWNlbnRjaGFuZ2VzOiB3aW5kb3cud2dVTFMoJ+acgOi/keabtOaUuScsICfov5HmnJ/orormm7QnKSxcblx0XHRcdFx0XHRcdHJlY2VudGNoYW5nZXNsaW5rZWQ6IHdpbmRvdy53Z1VMUygn55u45YWz5pu05pS5JywgJ+ebuOmXnOiuiuabtCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY3VzdG9tUmV2ZXJ0U3VtbWFyeScsXG5cdFx0XHRcdFx0bGFiZWw6ICflm57pgIDnkIbnlLEnLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjmn6XnnIvlt67lvILml7blj6/pgInvvIzku4XlloTmhI/lm57pgIDjgIHluLjop4Tlm57pgIDjgIHmgaLlpI3mraTniYjmnKwnLFxuXHRcdFx0XHRcdFx0J+WcqOaqouimluW3rueVsOaZguWPr+mBuO+8jOWDheWWhOaEj+WbnumAgOOAgeW4uOimj+WbnumAgOOAgeaBouW+qeatpOeJiOacrCdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdjdXN0b21MaXN0Jyxcblx0XHRcdFx0XHRjdXN0b21MaXN0VmFsdWVUaXRsZTogJ+eQhueUsScsXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdExhYmVsVGl0bGU6IHdpbmRvdy53Z1VMUygn5pi+56S655qE5paH5a2XJywgJ+mhr+ekuueahOaWh+WtlycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+W/q+mAn+WIoOmZpCcsICflv6vpgJ/liKrpmaQnKSxcblx0XHRcdG1vZHVsZTogJ3NwZWVkeScsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3NwZWVkeVNlbGVjdGlvblN0eWxlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfku4DkuYjml7blgJnmiafooYzmoIforrDmiJbliKDpmaQnLCAn5LuA6bq85pmC5YCZ5Z+36KGM5qiZ6KiY5oiW5Yiq6ZmkJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IHtcblx0XHRcdFx0XHRcdGJ1dHRvbkNsaWNrOiB3aW5kb3cud2dVTFMoJ+W9k+aIkeeCueKAnOaPkOS6pOKAneaXticsICfnlbbmiJHpu57jgIzmj5DkuqTjgI3mmYInKSxcblx0XHRcdFx0XHRcdHJhZGlvQ2xpY2s6IHdpbmRvdy53Z1VMUygn5b2T5oiR54K55LiA5Liq6YCJ6aG55pe2JywgJ+eVtuaIkem7nuS4gOWAi+mBuOmgheaZgicpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcud2F0Y2hTcGVlZHlQYWdlcyAoYXJyYXkpXG5cdFx0XHRcdC8vIFdoZXRoZXIgdG8gYWRkIHNwZWVkeSB0YWdnZWQgcGFnZXMgdG8gd2F0Y2hsaXN0XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnd2F0Y2hTcGVlZHlQYWdlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCG5Lul5LiL55CG55Sx5Yqg5YWl5Yiw55uR6KeG5YiX6KGoJywgJ+Wwh+S7peS4i+eQhueUseWKoOWFpeWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdzZXQnLFxuXHRcdFx0XHRcdHNldFZhbHVlczogVHdpbmtsZS5jb25maWcuY29tbW9uU2V0cy5jc2RDcml0ZXJpYSxcblx0XHRcdFx0XHRzZXREaXNwbGF5T3JkZXI6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQ3JpdGVyaWFEaXNwbGF5T3JkZXIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcud2F0Y2hTcGVlZHlFeHBpcnlcblx0XHRcdFx0Ly8gSWYgYW55IG9mIHRoZSBhYm92ZSBpdGVtcyBhcmUgc2VsZWN0ZWQsIHdoZXRoZXIgdG8gZXhwaXJlIHRoZSB3YXRjaFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3dhdGNoU3BlZWR5RXhwaXJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvZPmoIforrDpobXpnaLml7bvvIzliqDlhaXliLDnm5Hop4bliJfooajnmoTmnJ/pmZAnLCAn55W25qiZ6KiY6aCB6Z2i5pmC77yM5Yqg5YWl5Yiw55uj6KaW5riF5Zau55qE5pyf6ZmQJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLm1hcmtTcGVlZHlQYWdlc0FzUGF0cm9sbGVkIChib29sZWFuKVxuXHRcdFx0XHQvLyBJZiwgd2hlbiBhcHBseWluZyBzcGVlZHkgdGVtcGxhdGUgdG8gcGFnZSwgdG8gbWFyayB0aGUgcGFnZSBhcyBwYXRyb2xsZWQgKGlmIHRoZSBwYWdlIHdhcyByZWFjaGVkIGZyb20gTmV3UGFnZXMpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbWFya1NwZWVkeVBhZ2VzQXNQYXRyb2xsZWQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOaXtuagh+iusOmhtemdouS4uuW3suW3oeafpe+8iOWmguWPr+iDve+8iScsICfmqJnoqJjmmYLmqJnoqJjpoIHpnaLngrrlt7Llt6Hmn6XvvIjlpoLlj6/og73vvIknKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcubm90aWZ5VXNlck9uU3BlZWR5RGVsZXRpb25Ob21pbmF0aW9uIChhcnJheSlcblx0XHRcdFx0Ly8gV2hhdCB0eXBlcyBvZiBhY3Rpb25zIHNob3VsZCByZXN1bHQgdGhhdCB0aGUgYXV0aG9yIG9mIHRoZSBwYWdlIGJlaW5nIG5vdGlmaWVkIG9mIG5vbWluYXRpb25cblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdub3RpZnlVc2VyT25TcGVlZHlEZWxldGlvbk5vbWluYXRpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S7heWcqOS9v+eUqOS7peS4i+eQhueUseaXtumAmuefpemhtemdouWIm+W7uuiAhScsICflg4XlnKjkvb/nlKjku6XkuIvnkIbnlLHmmYLpgJrnn6XpoIHpnaLlu7rnq4vogIUnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5bC9566h5oKo5Zyo5a+56K+d5qGG5Lit6YCJ5oup6YCa55+l77yM6YCa55+l5LuN5Y+q5Lya5Zyo5L2/55So6L+Z5Lqb55CG55Sx5pe25Y+R5Ye644CCJyxcblx0XHRcdFx0XHRcdCflhJjnrqHmgqjlnKjlsI3oqbHmlrnloYrkuK3pgbjmk4fpgJrnn6XvvIzpgJrnn6Xku43lj6rmnIPlnKjkvb/nlKjpgJnkupvnkIbnlLHmmYLnmbzlh7rjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQ3JpdGVyaWFOb3RpZmljYXRpb24sXG5cdFx0XHRcdFx0c2V0RGlzcGxheU9yZGVyOiBUd2lua2xlLmNvbmZpZy5jb21tb25TZXRzLmNzZENyaXRlcmlhTm90aWZpY2F0aW9uRGlzcGxheU9yZGVyLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnByb21wdEZvclNwZWVkeURlbGV0aW9uU3VtbWFyeSAoYXJyYXkgb2Ygc3RyaW5ncylcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdwcm9tcHRGb3JTcGVlZHlEZWxldGlvblN1bW1hcnknLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S9v+eUqOS7peS4i+eQhueUseWIoOmZpOaXtuWFgeiuuOe8lui+keWIoOmZpOeQhueUsScsICfkvb/nlKjku6XkuIvnkIbnlLHliKrpmaTmmYLlhYHoqLHnt6jovK/liKrpmaTnkIbnlLEnKSxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogJ3NldCcsXG5cdFx0XHRcdFx0c2V0VmFsdWVzOiBUd2lua2xlLmNvbmZpZy5jb21tb25TZXRzLmNzZEFuZERJQ3JpdGVyaWEsXG5cdFx0XHRcdFx0c2V0RGlzcGxheU9yZGVyOiBUd2lua2xlLmNvbmZpZy5jb21tb25TZXRzLmNzZEFuZERJQ3JpdGVyaWFEaXNwbGF5T3JkZXIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcub3BlblVzZXJUYWxrUGFnZU9uU3BlZWR5RGVsZXRlIChhcnJheSBvZiBzdHJpbmdzKVxuXHRcdFx0XHQvLyBXaGF0IHR5cGVzIG9mIGFjdGlvbnMgdGhhdCBzaG91bGQgcmVzdWx0IHVzZXIgdGFsayBwYWdlIHRvIGJlIG9wZW5lZCB3aGVuIHNwZWVkaWx5IGRlbGV0aW5nIChhZG1pbiBvbmx5KVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ29wZW5Vc2VyVGFsa1BhZ2VPblNwZWVkeURlbGV0ZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L2/55So5Lul5LiL55CG55Sx5pe25omT5byA55So5oi36K6o6K666aG1JywgJ+S9v+eUqOS7peS4i+eQhueUseaZguaJk+mWi+S9v+eUqOiAheiojuirlumggScpLFxuXHRcdFx0XHRcdGFkbWluT25seTogdHJ1ZSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQW5kRElDcml0ZXJpYSxcblx0XHRcdFx0XHRzZXREaXNwbGF5T3JkZXI6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQW5kRElDcml0ZXJpYURpc3BsYXlPcmRlcixcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5kZWxldGVUYWxrUGFnZU9uRGVsZXRlIChib29sZWFuKVxuXHRcdFx0XHQvLyBJZiB0YWxrIHBhZ2UgaWYgZXhpc3RzIHNob3VsZCBhbHNvIGJlIGRlbGV0ZWQgKENTRCBHOCkgd2hlbiBzcGVkeWluZyBhIHBhZ2UgKGFkbWluIG9ubHkpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6k5Yu+6YCJ4oCc5Yig6Zmk6K6o6K666aG14oCdJywgJ+mgkOioreWLvumBuOOAjOWIqumZpOiojuirlumggeOAjScpLFxuXHRcdFx0XHRcdGFkbWluT25seTogdHJ1ZSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVsZXRlUmVkaXJlY3RzT25EZWxldGUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOWLvumAieKAnOWIoOmZpOmHjeWumuWQkeKAnScsICfpoJDoqK3li77pgbjjgIzliKrpmaTph43mlrDlsI7lkJHjgI0nKSxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLmRlbGV0ZVN5c29wRGVmYXVsdFRvRGVsZXRlIChib29sZWFuKVxuXHRcdFx0XHQvLyBNYWtlIHRoZSBDU0Qgc2NyZWVuIGRlZmF1bHQgdG8gXCJkZWxldGVcIiBpbnN0ZWFkIG9mIFwidGFnXCIgKGFkbWluIG9ubHkpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVsZXRlU3lzb3BEZWZhdWx0VG9EZWxldGUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOS4uuebtOaOpeWIoOmZpOiAjOS4jeaYr+agh+iusCcsICfpoJDoqK3ngrrnm7TmjqXliKrpmaTogIzkuI3mmK/mqJnoqJgnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Iul5bey5pS+572u5b+r6YCf5Yig6Zmk5qCH6K6w77yM5YiZ5rC46L+c6buY6K6k5Li65Yig6Zmk5qih5byP44CCJyxcblx0XHRcdFx0XHRcdCfoi6Xlt7LmlL7nva7lv6vpgJ/liKrpmaTmqJnoqJjvvIzliYfmsLjpgaDpoJDoqK3ngrrliKrpmaTmqKHlvI/jgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnNwZWVkeVdpbmRvd1dpZHRoIChpbnRlZ2VyKVxuXHRcdFx0XHQvLyBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgVHdpbmtsZSBTRCB3aW5kb3cgaW4gcGl4ZWxzXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnc3BlZWR5V2luZG93V2lkdGgnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W/q+mAn+WIoOmZpOWvueivneahhuWuveW6pu+8iOWDj+e0oO+8iScsICflv6vpgJ/liKrpmaTlsI3oqbHmlrnloYrlr6zluqbvvIjlg4/ntKDvvIknKSxcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlcicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuc3BlZWR5V2luZG93V2lkdGggKGludGVnZXIpXG5cdFx0XHRcdC8vIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBUd2lua2xlIFNEIHdpbmRvdyBpbiBwaXhlbHNcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdzcGVlZHlXaW5kb3dIZWlnaHQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W/q+mAn+WIoOmZpOWvueivneahhumrmOW6pu+8iOWDj+e0oO+8iScsICflv6vpgJ/liKrpmaTlsI3oqbHmlrnloYrpq5jluqbvvIjlg4/ntKDvvIknKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Iul5oKo5pyJ5LiA5Y+w5b6I5aSn55qE5pi+56S65Zmo77yM5oKo5Y+v5Lul5bCG5q2k6LCD6auY44CCJyxcblx0XHRcdFx0XHRcdCfoi6XmgqjmnInkuIDlj7DlvojlpKfnmoTpoa/npLrlmajvvIzmgqjlj6/ku6XlsIfmraToqr/pq5jjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlcicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbG9nU3BlZWR5Tm9taW5hdGlvbnMnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOeUqOaIt+epuumXtOS4reiusOW9leaJgOacieW/q+mAn+WIoOmZpOaPkOWQjScsICflnKjkvb/nlKjogIXnqbrplpPkuK3oqJjpjITmiYDmnInlv6vpgJ/liKrpmaTmj5DlkI0nKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Z2e566h55CG5ZGY5peg5rOV6K6/6Zeu5Yiw5bey5Yig6Zmk55qE6LSh54yu77yM55So5oi356m66Ze05pel5b+X5o+Q5L6b5LqG5LiA5Liq5b6I5aW955qE5pa55rOV5p2l6K6w5b2V6L+Z5Lqb5Y6G5Y+y44CCJyxcblx0XHRcdFx0XHRcdCfpnZ7nrqHnkIblk6HnhKHms5XlrZjlj5bliLDlt7LliKrpmaTnmoTosqLnjbvvvIzkvb/nlKjogIXnqbrplpPml6Xoqozmj5DkvpvkuobkuIDlgIvlvojlpb3nmoTmlrnms5XkvoboqJjpjITpgJnkupvmrbflj7LjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnc3BlZWR5TG9nUGFnZU5hbWUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOatpOmhteS/neeVmeaXpeW/lycsICflnKjmraTpoIHkv53nlZnml6XoqownKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Zyo5q2k5qGG5Lit6L6T5YWl5a2Q6aG16Z2i5ZCN56ew77yM5oKo5bCG5ZyoVXNlcjo8aT7nlKjmiLflkI08L2k+LzxpPuWtkOmhtemdojwvaT7mib7liLBDU0Tml6Xlv5fjgILku4XlnKjlkK/nlKjml6Xlv5fml7blt6XkvZzjgIInLFxuXHRcdFx0XHRcdFx0J+WcqOatpOahhuS4rei8uOWFpeWtkOmggemdouWQjeeose+8jOaCqOWwh+WcqFVzZXI6PGk+5L2/55So6ICF5ZCN56ixPC9pPi88aT7lrZDpoIHpnaI8L2k+5om+5YiwQ1NE5pel6KqM44CC5YOF5Zyo5ZWf55So5pel6KqM5pmC5bel5L2c44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbm9Mb2dPblNwZWVkeU5vbWluYXRpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOS9v+eUqOS7peS4i+eQhueUseaXtuS4jeWBmuiusOW9lScsICflnKjkvb/nlKjku6XkuIvnkIbnlLHmmYLkuI3lgZroqJjpjIQnKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQW5kRElDcml0ZXJpYSxcblx0XHRcdFx0XHRzZXREaXNwbGF5T3JkZXI6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQW5kRElDcml0ZXJpYURpc3BsYXlPcmRlcixcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdlbmxhcmdlRzdJbnB1dCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5omp5aSnQ1NEIEc355qE5oyJ6ZKuJywgJ+aTtOWkp0NTRCBHN+eahOaMiemIlScpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn5omp5Li66buY6K6k55qE5Lik5YCN5aSn44CCJywgJ+aTtOeCuumgkOioreeahOWFqeWAjeWkp+OAgicpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfmoIforrAnLCAn5qiZ6KiYJyksXG5cdFx0XHRtb2R1bGU6ICd0YWcnLFxuXHRcdFx0cHJlZmVyZW5jZXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFRhZ2dlZFBhZ2VzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDml7bliqDlhaXliLDnm5Hop4bliJfooagnLCAn5qiZ6KiY5pmC5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3dhdGNoTWVyZ2VEaXNjdXNzaW9ucycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yqg5YWl5ZCI5bm26K6o6K665pe255uR6KeG6K6o6K666aG1JywgJ+WKoOWFpeWQiOS9teiojuirluaZguebo+imluiojuirlumggScpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdtYXJrVGFnZ2VkUGFnZXNBc01pbm9yJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflsIbmoIforrDmoIforrDkuLrlsI/kv67mlLknLCAn5bCH5qiZ6KiY5qiZ6KiY54K65bCP5L+u5pS5JyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ21hcmtUYWdnZWRQYWdlc0FzUGF0cm9sbGVkJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpu5jorqTli77pgInigJzmoIforrDpobXpnaLkuLrlt7Llt6Hmn6XigJ3moYYnLCAn6aCQ6Kit5Yu+6YG444CM5qiZ6KiY6aCB6Z2i54K65bey5beh5p+l44CN5qGGJyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2dyb3VwQnlEZWZhdWx0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+m7mOiupOWLvumAieKAnOWQiOW5tuWIsHt7bXVsdGlwbGUgaXNzdWVzfX3igJ3lpI3pgInmoYYnLFxuXHRcdFx0XHRcdFx0J+mgkOioreWLvumBuOOAjOWQiOS9teWIsHt7bXVsdGlwbGUgaXNzdWVzfX3jgI3moLjlj5bmlrnloYonXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAndGFnQXJ0aWNsZVNvcnRPcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p2h55uu5qCH6K6w55qE6buY6K6k5p+l55yL5pa55byPJywgJ+aineebruaomeiomOeahOmgkOioreaqouimluaWueW8jycpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRjYXQ6IHdpbmRvdy53Z1VMUygn5oyJ57G75Z6LJywgJ+aMiemhnuWIpScpLFxuXHRcdFx0XHRcdFx0YWxwaGE6ICfmjInlrZfmr40nLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY3VzdG9tVGFnTGlzdCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ5p2h55uu57u05oqk5qCH6K6wJywgJ+iHquioguaineebrue2reitt+aomeiomCcpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn6L+Z5Lqb5Lya5Ye6546w5Zyo5YiX6KGo55qE5pyr5bC+44CCJywgJ+mAmeS6m+acg+WHuuePvuWcqOWIl+ihqOeahOacq+WwvuOAgicpLFxuXHRcdFx0XHRcdHR5cGU6ICdjdXN0b21MaXN0Jyxcblx0XHRcdFx0XHRjdXN0b21MaXN0VmFsdWVUaXRsZTogd2luZG93LndnVUxTKCfmqKHmnb/lkI3vvIjkuI3lkKvlpKfmi6zlj7fvvIknLCAn5qih5p2/5ZCN77yI5LiN5ZCr5aSn5ous6Jmf77yJJyksXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdExhYmVsVGl0bGU6IHdpbmRvdy53Z1VMUygn5pi+56S655qE5paH5a2XJywgJ+mhr+ekuueahOaWh+WtlycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2N1c3RvbUZpbGVUYWdMaXN0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnmlofku7bnu7TmiqTmoIforrAnLCAn6Ieq6KiC5qqU5qGI57at6K235qiZ6KiYJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKCfov5nkupvkvJrlh7rnjrDlnKjliJfooajnmoTmnKvlsL7jgIInLCAn6YCZ5Lqb5pyD5Ye654++5Zyo5YiX6KGo55qE5pyr5bC+44CCJyksXG5cdFx0XHRcdFx0dHlwZTogJ2N1c3RvbUxpc3QnLFxuXHRcdFx0XHRcdGN1c3RvbUxpc3RWYWx1ZVRpdGxlOiB3aW5kb3cud2dVTFMoJ+aooeadv+WQje+8iOS4jeWQq+Wkp+aLrOWPt++8iScsICfmqKHmnb/lkI3vvIjkuI3lkKvlpKfmi6zomZ/vvIknKSxcblx0XHRcdFx0XHRjdXN0b21MaXN0TGFiZWxUaXRsZTogd2luZG93LndnVUxTKCfmmL7npLrnmoTmloflrZcnLCAn6aGv56S655qE5paH5a2XJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY3VzdG9tUmVkaXJlY3RUYWdMaXN0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnph43lrprlkJHnu7TmiqTmoIforrAnLCAn6Ieq6KiC6YeN5paw5bCO5ZCR57at6K235qiZ6KiYJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKCfov5nkupvkvJrlh7rnjrDlnKjliJfooajnmoTmnKvlsL7jgIInLCAn6YCZ5Lqb5pyD5Ye654++5Zyo5YiX6KGo55qE5pyr5bC+44CCJyksXG5cdFx0XHRcdFx0dHlwZTogJ2N1c3RvbUxpc3QnLFxuXHRcdFx0XHRcdGN1c3RvbUxpc3RWYWx1ZVRpdGxlOiB3aW5kb3cud2dVTFMoJ+aooeadv+WQje+8iOS4jeWQq+Wkp+aLrOWPt++8iScsICfmqKHmnb/lkI3vvIjkuI3lkKvlpKfmi6zomZ/vvIknKSxcblx0XHRcdFx0XHRjdXN0b21MaXN0TGFiZWxUaXRsZTogd2luZG93LndnVUxTKCfmmL7npLrnmoTmloflrZcnLCAn6aGv56S655qE5paH5a2XJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dGl0bGU6ICflsI/kvZzlk4EnLFxuXHRcdFx0bW9kdWxlOiAnc3R1YicsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3dhdGNoU3R1YmJlZFBhZ2VzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDml7bliqDlhaXliLDnm5Hop4bliJfooagnLCAn5qiZ6KiY5pmC5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ21hcmtTdHViYmVkUGFnZXNBc01pbm9yJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflsIblsI/kvZzlk4HmoIforrDkuLrlsI/kv67mlLknLCAn5bCH5bCP5L2c5ZOB5qiZ6KiY54K65bCP5L+u5pS5JyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ21hcmtTdHViYmVkUGFnZXNBc1BhdHJvbGxlZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6k5Yu+6YCJ4oCc5qCH6K6w6aG16Z2i5Li65bey5beh5p+l4oCd5qGGJywgJ+mgkOioreWLvumBuOOAjOaomeiomOmggemdoueCuuW3suW3oeafpeOAjeahhicpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdzdHViQXJ0aWNsZVNvcnRPcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p2h55uu5bCP5L2c5ZOB55qE6buY6K6k5p+l55yL5pa55byPJywgJ+aineebruWwj+S9nOWTgeeahOmgkOioreaqouimluaWueW8jycpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRjYXQ6IHdpbmRvdy53Z1VMUygn5oyJ57G75Z6LJywgJ+aMiemhnuWIpScpLFxuXHRcdFx0XHRcdFx0YWxwaGE6ICfmjInlrZfmr40nLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY3VzdG9tU3R1Ykxpc3QnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieadoeebruWwj+S9nOWTgeagh+iusCcsICfoh6roqILmop3nm67lsI/kvZzlk4HmqJnoqJgnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoJ+i/meS6m+S8muWHuueOsOWcqOWIl+ihqOeahOacq+WwvuOAgicsICfpgJnkupvmnIPlh7rnj77lnKjliJfooajnmoTmnKvlsL7jgIInKSxcblx0XHRcdFx0XHR0eXBlOiAnY3VzdG9tTGlzdCcsXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdFZhbHVlVGl0bGU6IHdpbmRvdy53Z1VMUygn5qih5p2/5ZCN77yI5LiN5ZCr5aSn5ous5Y+377yJJywgJ+aooeadv+WQje+8iOS4jeWQq+Wkp+aLrOiZn++8iScpLFxuXHRcdFx0XHRcdGN1c3RvbUxpc3RMYWJlbFRpdGxlOiB3aW5kb3cud2dVTFMoJ+aYvuekuueahOaWh+WtlycsICfpoa/npLrnmoTmloflrZcnKSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogJ+mAmuWRiicsXG5cdFx0XHRtb2R1bGU6ICd0YWxrYmFjaycsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ21hcmtUYWxrYmFja0FzTWlub3InLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WwhumAmuWRiuagh+iusOS4uuWwj+S/ruaUuScsICflsIfpgJrlkYrmqJnoqJjngrrlsI/kv67mlLknKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnaW5zZXJ0VGFsa2JhY2tTaWduYXR1cmUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mAmuWRiuaXtuWKoOWFpeetvuWQjScsICfpgJrlkYrmmYLliqDlhaXnsL3lkI0nKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAndGFsa2JhY2tIZWFkaW5nJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgJrlkYrmiYDnlKjnmoTlsI/oioLmoIfpopgnLCAn6YCa5ZGK5omA55So55qE5bCP56+A5qiZ6aGMJyksXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbWFpbEhlYWRpbmcnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+KAnOacieaWsOmCruS7tuKAneaJgOeUqOeahOWwj+iKguagh+mimCcsICfjgIzmnInmlrDpg7Xku7bjgI3miYDnlKjnmoTlsI/nr4DmqJnpoYwnKSxcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCflj5bmtojpk77lhaUnLCAn5Y+W5raI6YCj5YWlJyksXG5cdFx0XHRtb2R1bGU6ICd1bmxpbmsnLFxuXHRcdFx0cHJlZmVyZW5jZXM6IFtcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy51bmxpbmtOYW1lc3BhY2VzIChhcnJheSlcblx0XHRcdFx0Ly8gSW4gd2hhdCBuYW1lc3BhY2VzIHVubGluayBzaG91bGQgaGFwcGVuLCBkZWZhdWx0IGluIDAgKGFydGljbGUpIGFuZCAxMDAgKHBvcnRhbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd1bmxpbmtOYW1lc3BhY2VzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj5bmtojku6XkuIvlkb3lkI3nqbrpl7TkuK3nmoTlj43lkJHpk77mjqUnLCAn5Y+W5raI5Lul5LiL5ZG95ZCN56m66ZaT5Lit55qE5Y+N5ZCR6YCj57WQJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ivt+mBv+WFjemAieaLqeiuqOiuuumhte+8jOWboOi/meagt+S8muWvvOiHtFR3aW5rbGXor5Xlm77kv67mlLnorqjorrrlrZjmoaPjgIInLFxuXHRcdFx0XHRcdFx0J+iri+mBv+WFjemBuOaTh+iojuirlumgge+8jOWboOmAmeaoo+acg+WwjuiHtFR3aW5rbGXoqablnJbkv67mlLnoqI7oq5blrZjmqpTjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMubmFtZXNwYWNlc05vU3BlY2lhbCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCforablkYrnlKjmiLcnLCAn6K2m5ZGK5L2/55So6ICFJyksXG5cdFx0XHRtb2R1bGU6ICd3YXJuJyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGVmYXVsdFdhcm5pbmdHcm91cCAoaW50KVxuXHRcdFx0XHQvLyBpZiB0cnVlLCB3YXRjaCB0aGUgcGFnZSB3aGljaCBoYXMgYmVlbiBkaXNwYXRjaGVkIGFuIHdhcm5pbmcgb3Igbm90aWNlLCBpZiBmYWxzZSwgZGVmYXVsdCBhcHBsaWVzXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVmYXVsdFdhcm5pbmdHcm91cCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6k6K2m5ZGK57qn5YirJywgJ+mgkOioreitpuWRiue0muWIpScpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiB7XG5cdFx0XHRcdFx0XHQxOiAnMe+8muazqOaEjycsXG5cdFx0XHRcdFx0XHQyOiAnMu+8muitpuWRiicsXG5cdFx0XHRcdFx0XHQzOiB3aW5kb3cud2dVTFMoJ+WNleWxgue6p+aPkOmGkicsICfllq7lsaTntJrmj5DphpInKSxcblx0XHRcdFx0XHRcdDQ6IHdpbmRvdy53Z1VMUygn5Y2V5bGC57qn6K2m5ZGKJywgJ+WWruWxpOe0muitpuWRiicpLFxuXHRcdFx0XHRcdFx0NTogd2luZG93LndnVUxTKCfoh6rlrprkuYnmj5DphpLmiJborablkYonLCAn6Ieq6KiC5o+Q6YaS5oiW6K2m5ZGKJyksXG5cdFx0XHRcdFx0XHQ2OiAn5omA5pyJ6K2m5ZGK5qih5p2/Jyxcblx0XHRcdFx0XHRcdDc6IHdpbmRvdy53Z1VMUygn6Ieq5Yqo6YCJ5oup5bGC57qnJywgJ+iHquWLlemBuOaTh+WxpOe0micpLFxuXHRcdFx0XHRcdFx0Ly8gOCB3YXMgdXNlZCBmb3IgYmxvY2sgdGVtcGxhdGVzIGJlZm9yZSAjMjYwXG5cdFx0XHRcdFx0XHQvLyA5IHdhcyBkZXByZWNhdGVkXG5cdFx0XHRcdFx0XHQvLyAxMCB3YXMgZGVwcmVjYXRlZFxuXHRcdFx0XHRcdFx0Ly8gMTEgd2FzIGRlcHJlY2F0ZWRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLmNvbWJpbmVkU2luZ2xldE1lbnVzIChib29sZWFuKVxuXHRcdFx0XHQvLyBpZiB0cnVlLCBzaG93IG9uZSBtZW51IHdpdGggYm90aCBzaW5nbGUtaXNzdWUgbm90aWNlcyBhbmQgd2FybmluZ3MgaW5zdGVhZCBvZiB0d28gc2VwYXJhdGVseVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2NvbWJpbmVkU2luZ2xldE1lbnVzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflsIbkuKTkuKrljZXlsYLnuqfoj5zljZXlkIjlubbmiJDkuIDkuKonLCAn5bCH5YWp5YCL5Zau5bGk57Sa6YG45Zau5ZCI5L215oiQ5LiA5YCLJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+W9k+WQr+eUqOatpOmAiemhueaXtu+8jOaXoOiuuum7mOiupOitpuWRiue6p+WIq+mAieaLqeWNleWxgue6p+mAmuefpeaIluWNleWxgue6p+itpuWRiueahuWxnuS6juatpOmhueOAgicsXG5cdFx0XHRcdFx0XHQn55W25ZWf55So5q2k6YG46aCF5pmC77yM54Sh6KuW6aCQ6Kit6K2m5ZGK57Sa5Yil6YG45pOH5Zau5bGk57Sa6YCa55+l5oiW5Zau5bGk57Sa6K2m5ZGK55qG5bGs5pa85q2k6aCF44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLndhdGNoV2FybmluZ3MgKHN0cmluZylcblx0XHRcdFx0Ly8gV2F0Y2hsaXN0IHNldHRpbmcgZm9yIHRoZSBwYWdlIHdoaWNoIGhhcyBiZWVuIGRpc3BhdGNoZWQgYW4gd2FybmluZyBvciBub3RpY2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFdhcm5pbmdzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCforablkYrml7bliqDlhaXnlKjmiLforqjorrrpobXliLDnm5Hop4bliJfooagnLCAn6K2m5ZGK5pmC5Yqg5YWl5L2/55So6ICF6KiO6KuW6aCB5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLm9sZFNlbGVjdCAoYm9vbGVhbilcblx0XHRcdFx0Ly8gaWYgdHJ1ZSwgdXNlIHRoZSBuYXRpdmUgc2VsZWN0IG1lbnUgcmF0aGVyIHRoZSBqcXVlcnkgY2hvc2VuLWJhc2VkIG9uZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ29sZFNlbGVjdCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L2/55So5LiN5Y+v5pCc57Si55qE57uP5YW46I+c5Y2VJywgJ+S9v+eUqOS4jeWPr+aQnOWwi+eahOe2k+WFuOmBuOWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdjdXN0b21XYXJuaW5nTGlzdCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ6K2m5ZGK5qih5p2/JywgJ+iHquioguitpuWRiuaooeadvycpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XliqDlhaXmqKHmnb/miJbnlKjmiLflrZDpobXpnaLjgILoh6rlrprkuYnorablkYrkvJrlh7rnjrDlnKjorablkYrlr7nor53moYbkuK3igJzoh6rlrprkuYnorablkYrigJ3kuIDoioLjgIInLFxuXHRcdFx0XHRcdFx0J+aCqOWPr+S7peWKoOWFpeaooeadv+aIluS9v+eUqOiAheWtkOmggemdouOAguiHquioguitpuWRiuacg+WHuuePvuWcqOitpuWRiuWwjeipseaWueWhiuS4reOAjOiHquioguitpuWRiuOAjeS4gOevgOOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdjdXN0b21MaXN0Jyxcblx0XHRcdFx0XHRjdXN0b21MaXN0VmFsdWVUaXRsZTogd2luZG93LndnVUxTKCfmqKHmnb/lkI3vvIjkuI3lkKvlpKfmi6zlj7fvvIknLCAn5qih5p2/5ZCN77yI5LiN5ZCr5aSn5ous6Jmf77yJJyksXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdExhYmVsVGl0bGU6IHdpbmRvdy53Z1VMUygn5pi+56S655qE5paH5a2X77yI5ZKM57yW6L6R5pGY6KaB77yJJywgJ+mhr+ekuueahOaWh+Wtl++8iOWSjOe3qOi8r+aRmOimge+8iScpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WtmOW6n+iuqOiuuicsICflrZjlu6LoqI7oq5YnKSxcblx0XHRcdG1vZHVsZTogJ3hmZCcsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2xvZ1hmZE5vbWluYXRpb25zJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflnKjnlKjmiLfnqbrpl7TkuK3orrDlvZXmiYDmnInlrZjlup/orqjorrrmj5DlkI0nLCAn5Zyo5L2/55So6ICF56m66ZaT5Lit6KiY6YyE5omA5pyJ5a2Y5bui6KiO6KuW5o+Q5ZCNJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ivpeaXpeW/l+S+m+aCqOi/vei4quaJgOaciemAmui/h1R3aW5rbGXmj5DkuqTnmoTlrZjlup/orqjorronLFxuXHRcdFx0XHRcdFx0J+ipsuaXpeiqjOS+m+aCqOi/vei5pOaJgOaciemAj+mBjlR3aW5rbGXmj5DkuqTnmoTlrZjlu6LoqI7oq5YnXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAneGZkTG9nUGFnZU5hbWUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOatpOmhteS/neeVmeaXpeW/lycsICflnKjmraTpoIHkv53nlZnml6XoqownKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Zyo5q2k5qGG5Lit6L6T5YWl5a2Q6aG16Z2i5ZCN56ew77yM5oKo5bCG5ZyoVXNlcjo8aT7nlKjmiLflkI08L2k+LzxpPuWtkOmhtemdojwvaT7mib7liLBYRkTml6Xlv5fjgILku4XlnKjlkK/nlKjml6Xlv5fml7blt6XkvZzjgIInLFxuXHRcdFx0XHRcdFx0J+WcqOatpOahhuS4rei8uOWFpeWtkOmggemdouWQjeeose+8jOaCqOWwh+WcqFVzZXI6PGk+5L2/55So6ICF5ZCN56ixPC9pPi88aT7lrZDpoIHpnaI8L2k+5om+5YiwWEZE5pel6KqM44CC5YOF5Zyo5ZWf55So5pel6KqM5pmC5bel5L2c44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbm9Mb2dPblhmZE5vbWluYXRpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOS9v+eUqOS7peS4i+eQhueUseaXtuS4jeWBmuiusOW9lScsICflnKjkvb/nlKjku6XkuIvnkIbnlLHmmYLkuI3lgZroqJjpjIQnKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMueGZkQ3JpdGVyaWEsXG5cdFx0XHRcdFx0c2V0RGlzcGxheU9yZGVyOiBUd2lua2xlLmNvbmZpZy5jb21tb25TZXRzLnhmZENyaXRlcmlhRGlzcGxheU9yZGVyLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnhmZFdhdGNoUGFnZSAoc3RyaW5nKVxuXHRcdFx0XHQvLyBUaGUgd2F0Y2hsaXN0IHNldHRpbmcgb2YgdGhlIHBhZ2UgYmVpbmcgbm9taW5hdGVkIGZvciBYZkQuXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAneGZkV2F0Y2hQYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXmj5DlkI3nmoTpobXpnaLliLDnm5Hop4bliJfooagnLCAn5Yqg5YWl5o+Q5ZCN55qE6aCB6Z2i5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnhmZFdhdGNoRGlzY3Vzc2lvbiAoc3RyaW5nKVxuXHRcdFx0XHQvLyBUaGUgd2F0Y2hsaXN0IHNldHRpbmcgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgWGZEIHBhZ2UgKGZvciB0aG9zZSBwcm9jZXNzZXMgdGhhdCBjcmVhdGUgZGlzY3Vzc2lvbiBwYWdlcyBmb3IgZWFjaCBub21pbmF0aW9uKSxcblx0XHRcdFx0Ly8gb3IgdGhlIGxpc3QgcGFnZSBmb3IgdGhlIG90aGVyIHByb2Nlc3Nlcy5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd4ZmRXYXRjaERpc2N1c3Npb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeWtmOW6n+iuqOiuuumhteWIsOebkeinhuWIl+ihqCcsICfliqDlhaXlrZjlu6LoqI7oq5bpoIHliLDnm6PoppbmuIXllq4nKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoJ+W9k+aXpeeahOmhtemdouOAgicsICfnlbbml6XnmoTpoIHpnaLjgIInKSxcblx0XHRcdFx0XHR0eXBlOiAnZW51bScsXG5cdFx0XHRcdFx0ZW51bVZhbHVlczogVHdpbmtsZS5jb25maWcud2F0Y2hsaXN0RW51bXMsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcueGZkV2F0Y2hVc2VyIChzdHJpbmcpXG5cdFx0XHRcdC8vIFRoZSB3YXRjaGxpc3Qgc2V0dGluZyBvZiB0aGUgdXNlciB0YWxrIHBhZ2UgaWYgdGhleSByZWNlaXZlIGEgbm90aWZpY2F0aW9uLlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3hmZFdhdGNoVXNlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfliqDlhaXliJvlu7rogIXorqjorrrpobXliLDnm5Hop4bliJfooajvvIjlnKjpgJrnn6Xml7bvvIknLFxuXHRcdFx0XHRcdFx0J+WKoOWFpeW7uueri+iAheiojuirlumggeWIsOebo+imlua4heWWru+8iOWcqOmAmuefpeaZgu+8iSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdtYXJrWGZkUGFnZXNBc1BhdHJvbGxlZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qCH6K6w5pe25qCH6K6w6aG16Z2i5Li65bey5beh5p+l77yI5aaC5Y+v6IO977yJJywgJ+aomeiomOaZguaomeiomOmggemdoueCuuW3suW3oeafpe+8iOWmguWPr+iDve+8iScpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfln7rkuo7mioDmnK/ljp/lm6DvvIzpobXpnaLku4XkvJrlnKjnlLFTcGVjaWFsOk5ld1BhZ2Vz5Yiw6L6+5pe26KKr5qCH6K6w5Li65bey5beh5p+l44CCJyxcblx0XHRcdFx0XHRcdCfln7rmlrzmioDooZPljp/lm6DvvIzpoIHpnaLlg4XmnIPlnKjnlLFTcGVjaWFsOk5ld1BhZ2Vz5Yiw6YGU5pmC6KKr5qiZ6KiY54K65bey5beh5p+l44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ0Z3ZENzZFRvWGZkJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmj5DliKDnsbvlnovlop7liqDovazkuqToh6rlv6vpgJ/liKDpmaTlgJnpgIknLCAn5o+Q5Yiq6aGe5Yil5aKe5Yqg6L2J5Lqk6Ieq5b+r6YCf5Yiq6Zmk5YCZ6YG4JyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ivt+ehruS/neaCqOWFheWIhuS6huino1tbTElCOuW/q+mAn+WIoOmZpOadoeS+i11d5omN5byA5ZCv5q2k5Yqf6IO944CCJyxcblx0XHRcdFx0XHRcdCfoq4vnorrkv53mgqjlhYXliIbkuobop6NbW0xJQjrlv6vpgJ/liKrpmaTmop3kvotdXeaJjemWi+WVn+atpOWKn+iDveOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdhZmREZWZhdWx0Q2F0ZWdvcnknLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOaPkOWIoOexu+WeiycsICfpoJDoqK3mj5DliKrpoZ7liKUnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Iul6YCJ5oup4oCc55u45ZCM5LqO5LiK5qyh6YCJ5oup4oCd5bCG5L2/55SobG9jYWxTdG9yYWdl5p2l6K6w5b+G44CCJyxcblx0XHRcdFx0XHRcdCfoi6Xpgbjmk4fjgIznm7jlkIzmlrzkuIrmrKHpgbjmk4fjgI3lsIfkvb/nlKhsb2NhbFN0b3JhZ2XkvoboqJjmhrbjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnZW51bScsXG5cdFx0XHRcdFx0ZW51bVZhbHVlczoge1xuXHRcdFx0XHRcdFx0ZGVsZXRlOiB3aW5kb3cud2dVTFMoJ+WIoOmZpCcsICfliKrpmaQnKSxcblx0XHRcdFx0XHRcdHNhbWU6IHdpbmRvdy53Z1VMUygn55u45ZCM5LqO5LiK5qyh6YCJ5oupJywgJ+ebuOWQjOaWvOS4iuasoemBuOaThycpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnYWZkRmFtZURlZmF1bHRSZWFzb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOWFs+azqOW6puaPkOWIoOeQhueUsScsICfpoJDoqK3pl5zms6jluqbmj5DliKrnkIbnlLEnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoJ+eUqOS6juaJuemHj+aPkOWIoOOAgicsICfnlKjmlrzmibnmrKHmj5DliKrjgIInKSxcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdhZmRTdWJzdHViRGVmYXVsdFJlYXNvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6k5bCP5bCP5L2c5ZOB5o+Q5Yig55CG55SxJywgJ+mgkOioreWwj+Wwj+S9nOWTgeaPkOWIqueQhueUsScpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn55So5LqO5om56YeP5o+Q5Yig44CCJywgJ+eUqOaWvOaJueasoeaPkOWIquOAgicpLFxuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WFs+mXreWtmOW6n+iuqOiuuicsICfpl5zplonlrZjlu6LoqI7oq5YnKSxcblx0XHRcdG1vZHVsZTogJ2Nsb3NlJyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnWGZkQ2xvc2UnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOWtmOW6n+iuqOiuuuaYvuekuuWFs+mXreiuqOiuuuaMiemSricsICflnKjlrZjlu6LoqI7oq5bpoa/npLrpl5zplonoqI7oq5bmjInpiJUnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6K+356Gu5L+d5oKo5YWF5YiG5LqG6KejW1tMSUI65Yig6Zmk5p2h5L6LXV3miY3lvIDlkK/mraTlip/og73jgIInLFxuXHRcdFx0XHRcdFx0J+iri+eiuuS/neaCqOWFheWIhuS6huino1tbTElCOuWIqumZpOaineS+i11d5omN6ZaL5ZWf5q2k5Yqf6IO944CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IHtcblx0XHRcdFx0XHRcdGhpZGU6IHdpbmRvdy53Z1VMUygn5LiN5pi+56S6JywgJ+S4jemhr+ekuicpLFxuXHRcdFx0XHRcdFx0bm9uYWRtaW5vbmx5OiB3aW5kb3cud2dVTFMoJ+WPquWMheWQq+mdnueuoeeQhuWRmOWPr+S9v+eUqOmAiemhuScsICflj6rljIXlkKvpnZ7nrqHnkIblk6Hlj6/kvb/nlKjpgbjpoIUnKSxcblx0XHRcdFx0XHRcdGFsbDogd2luZG93LndnVUxTKCfmmL7npLrmiYDmnInpgInpobknLCAn6aGv56S65omA5pyJ6YG46aCFJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfkvrXniq/okZfkvZzmnYMnLCAn5L6154qv6JGX5L2c5qyKJyksXG5cdFx0XHRtb2R1bGU6ICdjb3B5dmlvJyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuY29weXZpb1dhdGNoUGFnZSAoc3RyaW5nKVxuXHRcdFx0XHQvLyBUaGUgd2F0Y2hsaXN0IHNldHRpbmcgb2YgdGhlIHBhZ2UgYmVpbmcgbm9taW5hdGVkIGZvciBYZkQuXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY29weXZpb1dhdGNoUGFnZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yqg5YWl5o+Q5oql55qE6aG16Z2i5Yiw55uR6KeG5YiX6KGoJywgJ+WKoOWFpeaPkOWgseeahOmggemdouWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5jb3B5dmlvV2F0Y2hVc2VyIChzdHJpbmcpXG5cdFx0XHRcdC8vIFRoZSB3YXRjaGxpc3Qgc2V0dGluZyBvZiB0aGUgdXNlciBpZiBoZSByZWNlaXZlcyBhIG5vdGlmaWNhdGlvbi5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdjb3B5dmlvV2F0Y2hVc2VyJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WKoOWFpeWIm+W7uuiAheiuqOiuuumhteWIsOebkeinhuWIl+ihqO+8iOWcqOmAmuefpeaXtu+8iScsXG5cdFx0XHRcdFx0XHQn5Yqg5YWl5bu656uL6ICF6KiO6KuW6aCB5Yiw55uj6KaW5riF5Zau77yI5Zyo6YCa55+l5pmC77yJJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLm1hcmtDb3B5dmlvUGFnZXNBc1BhdHJvbGxlZCAoYm9vbGVhbilcblx0XHRcdFx0Ly8gSWYsIHdoZW4gYXBwbHlpbmcgY29weXZpbyB0ZW1wbGF0ZSB0byBwYWdlLCB0byBtYXJrIHRoZSBwYWdlIGFzIHBhdHJvbGxlZCAoaWYgdGhlIHBhZ2Ugd2FzIHJlYWNoZWQgZnJvbSBOZXdQYWdlcylcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdtYXJrQ29weXZpb1BhZ2VzQXNQYXRyb2xsZWQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOaXtuagh+iusOmhtemdouS4uuW3suW3oeafpe+8iOWmguWPr+iDve+8iScsICfmqJnoqJjmmYLmqJnoqJjpoIHpnaLngrrlt7Llt6Hmn6XvvIjlpoLlj6/og73vvIknKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Z+65LqO5oqA5pyv5Y6f5Zug77yM6aG16Z2i5LuF5Lya5Zyo55SxU3BlY2lhbDpOZXdQYWdlc+WIsOi+vuaXtuiiq+agh+iusOS4uuW3suW3oeafpeOAgicsXG5cdFx0XHRcdFx0XHQn5Z+65pa85oqA6KGT5Y6f5Zug77yM6aCB6Z2i5YOF5pyD5Zyo55SxU3BlY2lhbDpOZXdQYWdlc+WIsOmBlOaZguiiq+aomeiomOeCuuW3suW3oeafpeOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfpmpDol48nLCAn6Zqx6JePJyksXG5cdFx0XHRoaWRkZW46IHRydWUsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHQvLyB0d2lua2xlLmpzOiBwb3J0bGV0IHNldHVwXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAncG9ydGxldEFyZWEnLFxuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3BvcnRsZXRJZCcsXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAncG9ydGxldE5hbWUnLFxuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3BvcnRsZXRUeXBlJyxcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdwb3J0bGV0TmV4dCcsXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIHR3aW5rbGVmbHVmZi5qczogZGVmaW5lcyBob3cgbWFueSByZXZpc2lvbiB0byBxdWVyeSBtYXhpbXVtLCBtYXhpbXVtIHBvc3NpYmxlIGlzIDUwLCBkZWZhdWx0IGlzIDUwXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAncmV2ZXJ0TWF4UmV2aXNpb25zJyxcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlcicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIHR3aW5rbGViYXRjaGRlbGV0ZS5qczogSG93IG1hbnkgcGFnZXMgc2hvdWxkIGJlIHByb2Nlc3NlZCBtYXhpbXVtXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnYmF0Y2hNYXgnLFxuXHRcdFx0XHRcdHR5cGU6ICdpbnRlZ2VyJyxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIEhvdyBtYW55IHBhZ2VzIHNob3VsZCBiZSBwcm9jZXNzZWQgYXQgYSB0aW1lIGJ5IGRlcHJvZCBhbmQgYmF0Y2hkZWxldGUvcHJvdGVjdC91bmRlbGV0ZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2JhdGNoQ2h1bmtzJyxcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlcicsXG5cdFx0XHRcdFx0YWRtaW5Pbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRdOyAvLyBlbmQgb2YgVHdpbmtsZS5jb25maWcuc2VjdGlvbnNcblx0VHdpbmtsZS5jb25maWcuaW5pdCA9ICgpID0+IHtcblx0XHQvLyBjcmVhdGUgdGhlIGNvbmZpZyBwYWdlIGF0IFR3aW5rbGUuZ2V0UHJlZignY29uZmlnUGFnZScpXG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSA9PT0gVHdpbmtsZS5nZXRQcmVmKCdjb25maWdQYWdlJykgJiYgbXcuY29uZmlnLmdldCgnd2dBY3Rpb24nKSA9PT0gJ3ZpZXcnKSB7XG5cdFx0XHRpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0d2lua2xlLWNvbmZpZycpKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gbWF5YmUgdGhlIHBhZ2UgaXMgbWlzY29uZmlndXJlZCwgb3Igc29tZXRoaW5nIC0gYnV0IGFueSBhdHRlbXB0IHRvIG1vZGlmeSBpdCB3aWxsIGJlIHBvaW50bGVzc1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udGVudGRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0d2lua2xlLWNvbmZpZy1jb250ZW50Jyk7XG5cdFx0XHRjb250ZW50ZGl2LnRleHRDb250ZW50ID0gJyc7IC8vIGNsZWFyIGNoaWxkcmVuXG5cdFx0XHQvLyBzdGFydCBhIHRhYmxlIG9mIGNvbnRlbnRzXG5cdFx0XHRjb25zdCB0b2N0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0dG9jdGFibGUuY2xhc3NOYW1lID0gJ3RvYyc7XG5cdFx0XHR0b2N0YWJsZS5zdHlsZS5tYXJnaW5MZWZ0ID0gJzAuNGVtJztcblx0XHRcdC8vIGNyZWF0ZSBUT0MgdGl0bGVcblx0XHRcdGNvbnN0IHRvY3RpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHR0b2N0aXRsZS5pZCA9ICd0b2N0aXRsZSc7XG5cdFx0XHRjb25zdCB0b2NoMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gyJyk7XG5cdFx0XHR0b2NoMi50ZXh0Q29udGVudCA9IHdpbmRvdy53Z1VMUygn55uu5b2VICcsICfnm67pjIQgJyk7XG5cdFx0XHR0b2N0aXRsZS5hcHBlbmRDaGlsZCh0b2NoMik7XG5cdFx0XHQvLyBhZGQgVE9DIHNob3cvaGlkZSBsaW5rXG5cdFx0XHRjb25zdCB0b2N0b2dnbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0XHR0b2N0b2dnbGUuY2xhc3NOYW1lID0gJ3RvY3RvZ2dsZSc7XG5cdFx0XHR0b2N0b2dnbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1snKSk7XG5cdFx0XHRjb25zdCB0b2N0b2dnbGVsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdFx0dG9jdG9nZ2xlbGluay5jbGFzc05hbWUgPSAnaW50ZXJuYWwnO1xuXHRcdFx0dG9jdG9nZ2xlbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnI3R3LXRvY3Nob3doaWRlJyk7XG5cdFx0XHR0b2N0b2dnbGVsaW5rLnRleHRDb250ZW50ID0gd2luZG93LndnVUxTKCfpmpDol48nLCAn6Zqx6JePJyk7XG5cdFx0XHR0b2N0b2dnbGUuYXBwZW5kQ2hpbGQodG9jdG9nZ2xlbGluayk7XG5cdFx0XHR0b2N0b2dnbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ10nKSk7XG5cdFx0XHR0b2N0aXRsZS5hcHBlbmRDaGlsZCh0b2N0b2dnbGUpO1xuXHRcdFx0dG9jdGFibGUuYXBwZW5kQ2hpbGQodG9jdGl0bGUpO1xuXHRcdFx0Ly8gY3JlYXRlIGl0ZW0gY29udGFpbmVyOiB0aGlzIGlzIHdoYXQgd2UgYWRkIHN0dWZmIHRvXG5cdFx0XHRjb25zdCB0b2N1bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG5cdFx0XHR0b2N0b2dnbGVsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdCdjbGljaycsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCAkdG9jdWwgPSAkKHRvY3VsKTtcblx0XHRcdFx0XHQkdG9jdWwudG9nZ2xlKCk7XG5cdFx0XHRcdFx0aWYgKCR0b2N1bC5maW5kKCc6dmlzaWJsZScpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dG9jdG9nZ2xlbGluay50ZXh0Q29udGVudCA9IHdpbmRvdy53Z1VMUygn6ZqQ6JePJywgJ+maseiXjycpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0b2N0b2dnbGVsaW5rLnRleHRDb250ZW50ID0gd2luZG93LndnVUxTKCfmmL7npLonLCAn6aGv56S6Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHRcdHRvY3RhYmxlLmFwcGVuZENoaWxkKHRvY3VsKTtcblx0XHRcdGNvbnRlbnRkaXYuYXBwZW5kQ2hpbGQodG9jdGFibGUpO1xuXHRcdFx0Y29uc3QgY29udGVudGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2NyaXB0LXVybFxuXHRcdFx0Y29udGVudGZvcm0uc2V0QXR0cmlidXRlKCdhY3Rpb24nLCAnamF2YXNjcmlwdDp2b2lkKDApJyk7IC8vIHdhcyAjdHctc2F2ZSAtIGNoYW5nZWQgdG8gdm9pZCgwKSB0byB3b3JrIGFyb3VuZCBDaHJvbWUgaXNzdWVcblx0XHRcdGNvbnRlbnRmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIFR3aW5rbGUuY29uZmlnLnNhdmUsIHRydWUpO1xuXHRcdFx0Y29udGVudGRpdi5hcHBlbmRDaGlsZChjb250ZW50Zm9ybSk7XG5cdFx0XHRjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHRcdFx0Y29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuXHRcdFx0Y29udGVudGZvcm0uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0XHRcdCQoVHdpbmtsZS5jb25maWcuc2VjdGlvbnMpLmVhY2goKHNlY3Rpb25rZXksIHNlY3Rpb24pID0+IHtcblx0XHRcdFx0aWYgKHNlY3Rpb24uaGlkZGVuIHx8IChzZWN0aW9uLmFkbWluT25seSAmJiAhTW9yZWJpdHMudXNlcklzU3lzb3ApKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIGkuZS4gXCJjb250aW51ZVwiIGluIHRoaXMgY29udGV4dFxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGFkZCB0byBUT0Ncblx0XHRcdFx0Y29uc3QgdG9jbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuXHRcdFx0XHR0b2NsaS5jbGFzc05hbWUgPSAndG9jbGV2ZWwtMSc7XG5cdFx0XHRcdGNvbnN0IHRvY2EgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRcdHRvY2Euc2V0QXR0cmlidXRlKCdocmVmJywgYCMke3NlY3Rpb24ubW9kdWxlfWApO1xuXHRcdFx0XHR0b2NhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHNlY3Rpb24udGl0bGUpKTtcblx0XHRcdFx0dG9jbGkuYXBwZW5kQ2hpbGQodG9jYSk7XG5cdFx0XHRcdHRvY3VsLmFwcGVuZENoaWxkKHRvY2xpKTtcblx0XHRcdFx0bGV0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG5cdFx0XHRcdGxldCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRcdFx0Y2VsbC5zZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nLCAnMycpO1xuXHRcdFx0XHRjb25zdCBoZWFkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDQnKTtcblx0XHRcdFx0aGVhZGluZy5zdHlsZS5ib3JkZXJCb3R0b20gPSAnMXB4IHNvbGlkICM4MDgwODAnO1xuXHRcdFx0XHRoZWFkaW5nLnN0eWxlLm1hcmdpblRvcCA9ICcwLjJlbSc7XG5cdFx0XHRcdGhlYWRpbmcuaWQgPSBzZWN0aW9uLm1vZHVsZTtcblx0XHRcdFx0aGVhZGluZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzZWN0aW9uLnRpdGxlKSk7XG5cdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQoaGVhZGluZyk7XG5cdFx0XHRcdHJvdy5hcHBlbmRDaGlsZChjZWxsKTtcblx0XHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHJvdyk7XG5cdFx0XHRcdGxldCByb3djb3VudCA9IDE7IC8vIGZvciByb3cgYmFuZGluZ1xuXHRcdFx0XHQvLyBhZGQgZWFjaCBvZiB0aGUgcHJlZmVyZW5jZXMgdG8gdGhlIGZvcm1cblx0XHRcdFx0JChzZWN0aW9uLnByZWZlcmVuY2VzKS5lYWNoKChwcmVma2V5LCBwcmVmKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHByZWYuYWRtaW5Pbmx5ICYmICFNb3JlYml0cy51c2VySXNTeXNvcCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIGkuZS4gXCJjb250aW51ZVwiIGluIHRoaXMgY29udGV4dFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG5cdFx0XHRcdFx0cm93LnN0eWxlLm1hcmdpbkJvdHRvbSA9ICcwLjJlbSc7XG5cdFx0XHRcdFx0Ly8gY3JlYXRlIG9kZCByb3cgYmFuZGluZ1xuXHRcdFx0XHRcdGlmIChyb3djb3VudCsrICUgMiA9PT0gMCkge1xuXHRcdFx0XHRcdFx0cm93LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2IoMTI4IDEyOCAxMjgvLjEpJztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cdFx0XHRcdFx0bGV0IGxhYmVsO1xuXHRcdFx0XHRcdGxldCBpbnB1dDtcblx0XHRcdFx0XHRjb25zdCBnb3RQcmVmID0gVHdpbmtsZS5nZXRQcmVmKHByZWYubmFtZSk7XG5cdFx0XHRcdFx0c3dpdGNoIChwcmVmLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXHRcdFx0XHRcdFx0XHQvLyBjcmVhdGUgYSBjaGVja2JveFxuXHRcdFx0XHRcdFx0XHRjZWxsLnNldEF0dHJpYnV0ZSgnY29sc3BhbicsICcyJyk7XG5cdFx0XHRcdFx0XHRcdGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcblx0XHRcdFx0XHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdFx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnY2hlY2tib3gnKTtcblx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChnb3RQcmVmID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuY2hlY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHRsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwcmVmLmxhYmVsKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3N0cmluZyc6IC8vIGNyZWF0ZSBhbiBpbnB1dCBib3hcblx0XHRcdFx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0XHRcdFx0XHQvLyBhZGQgbGFiZWwgdG8gZmlyc3QgY29sdW1uXG5cdFx0XHRcdFx0XHRcdGNlbGwuc3R5bGUudGV4dEFsaWduID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMC41ZW0nO1xuXHRcdFx0XHRcdFx0XHRsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG5cdFx0XHRcdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7cHJlZi5sYWJlbH3vvJpgKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0XHRcdC8vIGFkZCBpbnB1dCBib3ggdG8gc2Vjb25kIGNvbHVtblxuXHRcdFx0XHRcdFx0XHRjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMWVtJztcblx0XHRcdFx0XHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdFx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuXHRcdFx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0aWYgKHByZWYudHlwZSA9PT0gJ2ludGVnZXInKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCdzaXplJywgNik7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ251bWJlcicpO1xuXHRcdFx0XHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsICcxJyk7IC8vIGludGVnZXJzIG9ubHlcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChnb3RQcmVmKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGdvdFByZWYpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2VudW0nOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGNyZWF0ZSBhIGNvbWJvIGJveFxuXHRcdFx0XHRcdFx0XHQvLyBhZGQgbGFiZWwgdG8gZmlyc3QgY29sdW1uXG5cdFx0XHRcdFx0XHRcdC8vIG5vdGU6IGR1cGxpY2F0ZXMgdGhlIGNvZGUgYWJvdmUsIHVuZGVyIHN0cmluZy9pbnRlZ2VyXG5cdFx0XHRcdFx0XHRcdGNlbGwuc3R5bGUudGV4dEFsaWduID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMC41ZW0nO1xuXHRcdFx0XHRcdFx0XHRsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG5cdFx0XHRcdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7cHJlZi5sYWJlbH3vvJpgKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0XHRcdC8vIGFkZCBpbnB1dCBib3ggdG8gc2Vjb25kIGNvbHVtblxuXHRcdFx0XHRcdFx0XHRjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMWVtJztcblx0XHRcdFx0XHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcblx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGxldCBvcHRpb25FeGlzdHMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBbZW51bXZhbHVlLCBlbnVtZGlzcGxheV0gb2YgT2JqZWN0LmVudHJpZXMocHJlZi5lbnVtVmFsdWVzKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgZW51bXZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRnb3RQcmVmID09PSBlbnVtdmFsdWUgfHxcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhY2sgdG8gY29udmVydCBvbGQgYm9vbGVhbiB3YXRjaGxpc3QgcHJlZnNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHRvIGNvcnJlc3BvbmRpbmcgZW51bXMgKGFkZGVkIGluIHYyLjEpXG5cdFx0XHRcdFx0XHRcdFx0XHQodHlwZW9mIGdvdFByZWYgPT09ICdib29sZWFuJyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoKGdvdFByZWYgJiYgZW51bXZhbHVlID09PSAneWVzJykgfHwgKCFnb3RQcmVmICYmIGVudW12YWx1ZSA9PT0gJ25vJykpKVxuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTtcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbkV4aXN0cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlbnVtZGlzcGxheSkpO1xuXHRcdFx0XHRcdFx0XHRcdGlucHV0LmFwcGVuZENoaWxkKG9wdGlvbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gQXBwZW5kIHVzZXItZGVmaW5lZCB2YWx1ZSB0byBvcHRpb25zXG5cdFx0XHRcdFx0XHRcdGlmICghb3B0aW9uRXhpc3RzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBnb3RQcmVmKTtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb24uc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnb3RQcmVmKSk7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuYXBwZW5kQ2hpbGQob3B0aW9uKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjZWxsLmFwcGVuZENoaWxkKGlucHV0KTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjYXNlICdzZXQnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGNyZWF0ZSBhIHNldCBvZiBjaGVjayBib3hlc1xuXHRcdFx0XHRcdFx0XHQvLyBhZGQgbGFiZWwgZmlyc3Qgb2YgYWxsXG5cdFx0XHRcdFx0XHRcdGNlbGwuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgJzInKTtcblx0XHRcdFx0XHRcdFx0bGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpOyAvLyBub3QgcmVhbGx5IG5lY2Vzc2FyeSB0byB1c2UgYSBsYWJlbCBlbGVtZW50IGhlcmUsIGJ1dCB3ZSBkbyBpdCBmb3IgY29uc2lzdGVuY3kgb2Ygc3R5bGluZ1xuXHRcdFx0XHRcdFx0XHRsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgJHtwcmVmLmxhYmVsfe+8mmApKTtcblx0XHRcdFx0XHRcdFx0Y2VsbC5hcHBlbmRDaGlsZChsYWJlbCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoZWNrZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRcdFx0XHRcdGNoZWNrZGl2LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzFlbSc7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHdvcmtlciA9IChpdGVta2V5LCBpdGVtdmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjaGVja2xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcblx0XHRcdFx0XHRcdFx0XHRjaGVja2xhYmVsLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzAuN2VtJztcblx0XHRcdFx0XHRcdFx0XHRjaGVja2xhYmVsLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjaGVjayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2suc2V0QXR0cmlidXRlKCd0eXBlJywgJ2NoZWNrYm94Jyk7XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2suc2V0QXR0cmlidXRlKCdpZCcsIGAke3ByZWYubmFtZX1fJHtpdGVta2V5fWApO1xuXHRcdFx0XHRcdFx0XHRcdGNoZWNrLnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke3ByZWYubmFtZX1fJHtpdGVta2V5fWApO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChnb3RQcmVmICYmIGdvdFByZWYuaW5jbHVkZXMoaXRlbWtleSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBjYXRlciBmb3IgbGVnYWN5IGludGVnZXIgYXJyYXkgdmFsdWVzIGZvciB1bmxpbmtOYW1lc3BhY2VzICh0aGlzIGNhbiBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGRvd24gdGhlIHRyYWNrLi4uKVxuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdHByZWYubmFtZSA9PT0gJ3VubGlua05hbWVzcGFjZXMnICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRnb3RQcmVmICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRnb3RQcmVmLmluY2x1ZGVzKE51bWJlci5wYXJzZUludChpdGVta2V5LCAxMCkpXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGVjay5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tsYWJlbC5hcHBlbmRDaGlsZChjaGVjayk7XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpdGVtdmFsdWUpKTtcblx0XHRcdFx0XHRcdFx0XHRjaGVja2Rpdi5hcHBlbmRDaGlsZChjaGVja2xhYmVsKTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0aWYgKHByZWYuc2V0RGlzcGxheU9yZGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYWRkIGNoZWNrIGJveGVzIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZGlzcGxheSBvcmRlclxuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBwcmVmLnNldERpc3BsYXlPcmRlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0d29ya2VyKGl0ZW0sIHByZWYuc2V0VmFsdWVzW2l0ZW1dKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYWRkIGNoZWNrIGJveGVzIGFjY29yZGluZyB0byB0aGUgb3JkZXIgaXQgZ2V0cyBmZWQgdG8gdXMgKHByb2JhYmx5IHN0cmljdCBhbHBoYWJldGljYWwpXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBbaXRlbWtleSwgaXRlbXZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcmVmLnNldFZhbHVlcykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdvcmtlcihpdGVta2V5LCBpdGVtdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjZWxsLmFwcGVuZENoaWxkKGNoZWNrZGl2KTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjYXNlICdjdXN0b21MaXN0Jzoge1xuXHRcdFx0XHRcdFx0XHQvLyBhZGQgbGFiZWwgdG8gZmlyc3QgY29sdW1uXG5cdFx0XHRcdFx0XHRcdGNlbGwuc3R5bGUudGV4dEFsaWduID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMC41ZW0nO1xuXHRcdFx0XHRcdFx0XHRsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG5cdFx0XHRcdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7cHJlZi5sYWJlbH3vvJpgKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0XHRcdC8vIGFkZCBidXR0b24gdG8gc2Vjb25kIGNvbHVtblxuXHRcdFx0XHRcdFx0XHRjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMWVtJztcblx0XHRcdFx0XHRcdFx0Y29uc3QgY3VzdG9tTGlzdEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MaXN0QnV0dG9uLnNldEF0dHJpYnV0ZSgnaWQnLCBwcmVmLm5hbWUpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MaXN0QnV0dG9uLnNldEF0dHJpYnV0ZSgnbmFtZScsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbUxpc3RCdXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MaXN0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgVHdpbmtsZS5jb25maWcubGlzdERpYWxvZy5kaXNwbGF5LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdC8vIHVzZSBqUXVlcnkgZGF0YSBvbiB0aGUgYnV0dG9uIHRvIHN0b3JlIHRoZSBjdXJyZW50IGNvbmZpZyB2YWx1ZVxuXHRcdFx0XHRcdFx0XHQkKGN1c3RvbUxpc3RCdXR0b24pLmRhdGEoe1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBnb3RQcmVmLFxuXHRcdFx0XHRcdFx0XHRcdHByZWYsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MaXN0QnV0dG9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHdpbmRvdy53Z1VMUygn57yW6L6R6aG555uuJywgJ+e3qOi8r+mgheebricpKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQoY3VzdG9tTGlzdEJ1dHRvbik7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0bXcubm90aWZ5KGB0d2lua2xlY29uZmlnOiDmnKrnn6XnsbvlnovnmoTlsZ7mgKcgJHtwcmVmLm5hbWV9YCwge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlY29uZmlnJyxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0Ly8gYWRkIGhlbHAgdGlwXG5cdFx0XHRcdFx0Y2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cdFx0XHRcdFx0Y2VsbC5zdHlsZS5mb250U2l6ZSA9ICc5MCUnO1xuXHRcdFx0XHRcdGNlbGwuc3R5bGUuY29sb3IgPSAnZ3JheSc7XG5cdFx0XHRcdFx0aWYgKHByZWYuaGVscHRpcCkge1xuXHRcdFx0XHRcdFx0Ly8gY29udmVydCBtZW50aW9ucyBvZiB0ZW1wbGF0ZXMgaW4gdGhlIGhlbHB0aXAgdG8gY2xpY2thYmxlIGxpbmtzXG5cdFx0XHRcdFx0XHRjZWxsLmlubmVySFRNTCA9IHByZWYuaGVscHRpcFxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0XHQve3soLis/KX19L2csXG5cdFx0XHRcdFx0XHRcdFx0YHt7PGEgaHJlZj1cIiR7bXcudXRpbC5nZXRVcmwoJ1RlbXBsYXRlOicpfSQxXCIgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT59fWBcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0XHQvXFxbXFxbKC4rPyldXS9nLFxuXHRcdFx0XHRcdFx0XHRcdGA8YSBocmVmPVwiJHttdy51dGlsLmdldFVybCgnJyl9JDFcIiByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiPiQxPC9hPmBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gYWRkIHJlc2V0IGxpbmsgKGN1c3RvbSBsaXN0cyBkb24ndCBuZWVkIHRoaXMsIGFzIHRoZWlyIGNvbmZpZyB2YWx1ZSBpc24ndCBkaXNwbGF5ZWQgb24gdGhlIGZvcm0pXG5cdFx0XHRcdFx0aWYgKHByZWYudHlwZSAhPT0gJ2N1c3RvbUxpc3QnKSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZXNldGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRcdFx0XHRyZXNldGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgJyN0dy1yZXNldCcpO1xuXHRcdFx0XHRcdFx0cmVzZXRsaW5rLnNldEF0dHJpYnV0ZSgnaWQnLCBgdHdpbmtsZS1jb25maWctcmVzZXQtJHtwcmVmLm5hbWV9YCk7XG5cdFx0XHRcdFx0XHRyZXNldGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBUd2lua2xlLmNvbmZpZy5yZXNldFByZWZMaW5rLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRyZXNldGxpbmsuc3R5bGUuY3NzRmxvYXQgPSAncmlnaHQnO1xuXHRcdFx0XHRcdFx0cmVzZXRsaW5rLnN0eWxlLm1hcmdpbiA9ICcwIDAuNmVtJztcblx0XHRcdFx0XHRcdHJlc2V0bGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3aW5kb3cud2dVTFMoJ+WkjeS9jScsICflvqnkvY0nKSkpO1xuXHRcdFx0XHRcdFx0Y2VsbC5hcHBlbmRDaGlsZChyZXNldGxpbmspO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHJvdyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgZm9vdGVyYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRmb290ZXJib3guc2V0QXR0cmlidXRlKCdpZCcsICd0d2lua2xlLWNvbmZpZy1idXR0b25wYW5lJyk7XG5cdFx0XHRmb290ZXJib3guc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNCQ0NBREYnO1xuXHRcdFx0Zm9vdGVyYm94LnN0eWxlLnBhZGRpbmcgPSAnMC41ZW0nO1xuXHRcdFx0Y29uc3Qgc3VibWl0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG5cdFx0XHRzdWJtaXRCdXR0b24uc2V0QXR0cmlidXRlKCdpZCcsICd0d2lua2xlLWNvbmZpZy1zdWJtaXQnKTtcblx0XHRcdHN1Ym1pdEJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnc3VibWl0Jyk7XG5cdFx0XHRzdWJtaXRCdXR0b24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod2luZG93LndnVUxTKCfkv53lrZjkv67mlLknLCAn5YSy5a2Y5L+u5pS5JykpKTtcblx0XHRcdGZvb3RlcmJveC5hcHBlbmRDaGlsZChzdWJtaXRCdXR0b24pO1xuXHRcdFx0Y29uc3QgZm9vdGVyc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdGZvb3RlcnNwYW4uY2xhc3NOYW1lID0gJ3BsYWlubGlua3MnO1xuXHRcdFx0Zm9vdGVyc3Bhbi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzIuNGVtJztcblx0XHRcdGZvb3RlcnNwYW4uc3R5bGUuZm9udFNpemUgPSAnOTAlJztcblx0XHRcdGNvbnN0IGZvb3RlcmEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRmb290ZXJhLnNldEF0dHJpYnV0ZSgnaHJlZicsICcjdHctcmVzZXQtYWxsJyk7XG5cdFx0XHRmb290ZXJhLnNldEF0dHJpYnV0ZSgnaWQnLCAndHdpbmtsZS1jb25maWctcmVzZXRhbGwnKTtcblx0XHRcdGZvb3RlcmEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBUd2lua2xlLmNvbmZpZy5yZXNldEFsbFByZWZzLCBmYWxzZSk7XG5cdFx0XHRmb290ZXJhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHdpbmRvdy53Z1VMUygn5oGi5aSN6buY6K6kJywgJ+aBouW+qemgkOiorScpKSk7XG5cdFx0XHRmb290ZXJzcGFuLmFwcGVuZENoaWxkKGZvb3RlcmEpO1xuXHRcdFx0Zm9vdGVyYm94LmFwcGVuZENoaWxkKGZvb3RlcnNwYW4pO1xuXHRcdFx0Y29udGVudGZvcm0uYXBwZW5kQ2hpbGQoZm9vdGVyYm94KTtcblx0XHRcdC8vIHNpbmNlIGFsbCB0aGUgc2VjdGlvbiBoZWFkZXJzIGV4aXN0IG5vdywgd2UgY2FuIHRyeSBnb2luZyB0byB0aGUgcmVxdWVzdGVkIGFuY2hvclxuXHRcdFx0aWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7XG5cdFx0XHRcdGNvbnN0IGxvYyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcnO1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaGFzaCA9IGxvYztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKS51c2VyICYmXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1RpdGxlJykuaW5kZXhPZihtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykpID09PSAwICYmXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykuc2xpY2UoLTMpID09PSAnLmpzJ1xuXHRcdCkge1xuXHRcdFx0Y29uc3QgYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHQvLyBTdHlsZWQgaW4gdHdpbmtsZS5jc3Ncblx0XHRcdGJveC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3R3aW5rbGUtY29uZmlnLWhlYWRlcmJveCcpO1xuXHRcdFx0bGV0IGxpbms7XG5cdFx0XHRjb25zdCBzY3JpcHRQYWdlTmFtZSA9IG13LmNvbmZpZ1xuXHRcdFx0XHQuZ2V0KCd3Z1BhZ2VOYW1lJylcblx0XHRcdFx0LnNsaWNlKFxuXHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKS5sYXN0SW5kZXhPZignLycpICsgMSxcblx0XHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykubGFzdEluZGV4T2YoJy5qcycpXG5cdFx0XHRcdCk7XG5cdFx0XHRpZiAoc2NyaXB0UGFnZU5hbWUgPT09ICd0d2lua2xlb3B0aW9ucycpIHtcblx0XHRcdFx0Ly8gcGxhY2UgXCJ3aHkgbm90IHRyeSB0aGUgcHJlZmVyZW5jZSBwYW5lbFwiIG5vdGljZVxuXHRcdFx0XHRib3guc2V0QXR0cmlidXRlKCdjbGFzcycsICdjb25maWctdHdvcHQtYm94Jyk7XG5cdFx0XHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVJZCcpID4gMCkge1xuXHRcdFx0XHRcdC8vIHBhZ2UgZXhpc3RzXG5cdFx0XHRcdFx0Ym94LmFwcGVuZENoaWxkKFxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6L+Z6aG15YyF5ZCr5oKo55qEVHdpbmtsZeWPguaVsOiuvue9ru+8jOaCqOWPr+S9v+eUqCcsXG5cdFx0XHRcdFx0XHRcdFx0J+mAmemggeWMheWQq+aCqOeahFR3aW5rbGXlgY/lpb3oqK3lrprvvIzmgqjlj6/kvb/nlKgnXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHBhZ2UgZG9lcyBub3QgZXhpc3Rcblx0XHRcdFx0XHRib3guYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmgqjlj6/phY3nva7mgqjnmoRUd2lua2xl77yM6YCa6L+H5L2/55SoJywgJ+aCqOWPr+mFjee9ruaCqOeahFR3aW5rbGXvvIzpgJrpgY7kvb/nlKgnKVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybChUd2lua2xlLmdldFByZWYoJ2NvbmZpZ1BhZ2UnKSkpO1xuXHRcdFx0XHRsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHdpbmRvdy53Z1VMUygnVHdpbmtsZeWPguaVsOiuvue9rumdouadvycsICdUd2lua2xl5YGP5aW96Kit5a6a6Z2i5p2/JykpKTtcblx0XHRcdFx0Ym94LmFwcGVuZENoaWxkKGxpbmspO1xuXHRcdFx0XHRib3guYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod2luZG93LndnVUxTKCfvvIzmiJbnm7TmjqXnvJbovpHmnKzpobXjgIInLCAn77yM5oiW55u05o6l57eo6Lyv5pys6aCB44CCJykpKTtcblx0XHRcdFx0JChib3gpLmluc2VydEFmdGVyKCRib2R5LmZpbmQoJyNjb250ZW50U3ViJykpO1xuXHRcdFx0fSBlbHNlIGlmIChbJ3ZlY3RvcicsICd2ZWN0b3ItMjAyMicsICdnb25nYmknLCAnY2l0aXplbicsICdjb21tb24nXS5pbmNsdWRlcyhzY3JpcHRQYWdlTmFtZSkpIHtcblx0XHRcdFx0Ly8gcGxhY2UgXCJMb29raW5nIGZvciBUd2lua2xlIG9wdGlvbnM/XCIgbm90aWNlXG5cdFx0XHRcdGJveC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2NvbmZpZy11c2Vyc2tpbi1ib3gnKTtcblx0XHRcdFx0Ym94LmFwcGVuZENoaWxkKFxuXHRcdFx0XHRcdGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfoi6Xmgqjmg7PphY3nva7mgqjnmoRUd2lua2xl77yM6K+35L2/55SoJywgJ+iLpeaCqOaDs+mFjee9ruaCqOeahFR3aW5rbGXvvIzoq4vkvb/nlKgnKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0bGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybChUd2lua2xlLmdldFByZWYoJ2NvbmZpZ1BhZ2UnKSkpO1xuXHRcdFx0XHRsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHdpbmRvdy53Z1VMUygnVHdpbmtsZeWPguaVsOiuvue9rumdouadvycsICdUd2lua2xl5YGP5aW96Kit5a6a6Z2i5p2/JykpKTtcblx0XHRcdFx0Ym94LmFwcGVuZENoaWxkKGxpbmspO1xuXHRcdFx0XHRib3guYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ+OAgicpKTtcblx0XHRcdFx0JChib3gpLmluc2VydEFmdGVyKCRib2R5LmZpbmQoJyNjb250ZW50U3ViJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Ly8gY3VzdG9tIGxpc3QtcmVsYXRlZCBzdHVmZlxuXHRUd2lua2xlLmNvbmZpZy5saXN0RGlhbG9nID0ge307XG5cdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cuYWRkUm93ID0gKGRsZ3RhYmxlLCB2YWx1ZSwgbGFiZWwpID0+IHtcblx0XHRjb25zdCBjb250ZW50dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1xuXHRcdC8vIFwicmVtb3ZlXCIgYnV0dG9uXG5cdFx0bGV0IGNvbnRlbnR0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cdFx0Y29uc3QgcmVtb3ZlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG5cdFx0cmVtb3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcblx0XHRyZW1vdmVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbGljaycsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdCQoY29udGVudHRyKS5yZW1vdmUoKTtcblx0XHRcdH0sXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdFx0cmVtb3ZlQnV0dG9uLnRleHRDb250ZW50ID0gJ+enu+mZpCc7XG5cdFx0Y29udGVudHRkLmFwcGVuZENoaWxkKHJlbW92ZUJ1dHRvbik7XG5cdFx0Y29udGVudHRyLmFwcGVuZENoaWxkKGNvbnRlbnR0ZCk7XG5cdFx0Ly8gdmFsdWUgaW5wdXQgYm94XG5cdFx0Y29udGVudHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRsZXQgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7XG5cdFx0aW5wdXQuY2xhc3NOYW1lID0gJ3R3aW5rbGUtY29uZmlnLWN1c3RvbWxpc3QtdmFsdWUnO1xuXHRcdGlucHV0LnN0eWxlLndpZHRoID0gJzk3JSc7XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdmFsdWUpO1xuXHRcdH1cblx0XHRjb250ZW50dGQuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuXHRcdGNvbnRlbnR0ci5hcHBlbmRDaGlsZChjb250ZW50dGQpO1xuXHRcdC8vIGxhYmVsIGlucHV0IGJveFxuXHRcdGNvbnRlbnR0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7XG5cdFx0aW5wdXQuY2xhc3NOYW1lID0gJ3R3aW5rbGUtY29uZmlnLWN1c3RvbWxpc3QtbGFiZWwnO1xuXHRcdGlucHV0LnN0eWxlLndpZHRoID0gJzk4JSc7XG5cdFx0aWYgKGxhYmVsKSB7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgbGFiZWwpO1xuXHRcdH1cblx0XHRjb250ZW50dGQuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuXHRcdGNvbnRlbnR0ci5hcHBlbmRDaGlsZChjb250ZW50dGQpO1xuXHRcdGRsZ3RhYmxlLmFwcGVuZENoaWxkKGNvbnRlbnR0cik7XG5cdH07XG5cdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cuZGlzcGxheSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgJHByZWZidXR0b24gPSAkKGUudGFyZ2V0KTtcblx0XHRjb25zdCBjdXJ2YWx1ZSA9ICRwcmVmYnV0dG9uLmRhdGEoJ3ZhbHVlJyk7XG5cdFx0Y29uc3QgY3VycHJlZiA9ICRwcmVmYnV0dG9uLmRhdGEoJ3ByZWYnKTtcblx0XHRjb25zdCBkaWFsb2cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDcyMCwgNDAwKTtcblx0XHRkaWFsb2cuc2V0VGl0bGUoY3VycHJlZi5sYWJlbCk7XG5cdFx0ZGlhbG9nLnNldFNjcmlwdE5hbWUod2luZG93LndnVUxTKCdUd2lua2xl5Y+C5pWw6K6+572uJywgJ1R3aW5rbGXlgY/lpb3oqK3lrponKSk7XG5cdFx0Y29uc3QgZGlhbG9nY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdGNvbnN0IGRsZ3RhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcblx0XHRkbGd0YWJsZS5jbGFzc05hbWUgPSAnd2lraXRhYmxlJztcblx0XHRkbGd0YWJsZS5zdHlsZS5tYXJnaW4gPSAnMS40ZW0gMWVtJztcblx0XHRkbGd0YWJsZS5zdHlsZS53aWR0aCA9ICc5NyUnO1xuXHRcdGNvbnN0IGRsZ3Rib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTtcblx0XHQvLyBoZWFkZXIgcm93XG5cdFx0bGV0IGRsZ3RyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcblx0XHQvLyB0b3AtbGVmdCBjZWxsXG5cdFx0bGV0IGRsZ3RoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcblx0XHRkbGd0aC5zdHlsZS53aWR0aCA9ICc1JSc7XG5cdFx0ZGxndHIuYXBwZW5kQ2hpbGQoZGxndGgpO1xuXHRcdC8vIHZhbHVlIGNvbHVtbiBoZWFkZXJcblx0XHRkbGd0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG5cdFx0ZGxndGguc3R5bGUud2lkdGggPSAnMzUlJztcblx0XHRkbGd0aC50ZXh0Q29udGVudCA9IGN1cnByZWYuY3VzdG9tTGlzdFZhbHVlVGl0bGUgPz8gd2luZG93LndnVUxTKCfmlbDlgLwnLCAn5pW45YC8Jyk7XG5cdFx0ZGxndHIuYXBwZW5kQ2hpbGQoZGxndGgpO1xuXHRcdC8vIGxhYmVsIGNvbHVtbiBoZWFkZXJcblx0XHRkbGd0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG5cdFx0ZGxndGguc3R5bGUud2lkdGggPSAnNjAlJztcblx0XHRkbGd0aC50ZXh0Q29udGVudCA9IGN1cnByZWYuY3VzdG9tTGlzdExhYmVsVGl0bGUgPz8gd2luZG93LndnVUxTKCfmoIfnrb4nLCAn5qiZ57GkJyk7XG5cdFx0ZGxndHIuYXBwZW5kQ2hpbGQoZGxndGgpO1xuXHRcdGRsZ3Rib2R5LmFwcGVuZENoaWxkKGRsZ3RyKTtcblx0XHQvLyBjb250ZW50IHJvd3Ncblx0XHRsZXQgZ290Um93ID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCB2IG9mIGN1cnZhbHVlKSB7XG5cdFx0XHRnb3RSb3cgPSB0cnVlO1xuXHRcdFx0VHdpbmtsZS5jb25maWcubGlzdERpYWxvZy5hZGRSb3coZGxndGJvZHksIHYudmFsdWUsIHYubGFiZWwpO1xuXHRcdH1cblx0XHQvLyBpZiB0aGVyZSBhcmUgbm8gdmFsdWVzIHByZXNlbnQsIGFkZCBhIGJsYW5rIHJvdyB0byBzdGFydCB0aGUgdXNlciBvZmZcblx0XHRpZiAoIWdvdFJvdykge1xuXHRcdFx0VHdpbmtsZS5jb25maWcubGlzdERpYWxvZy5hZGRSb3coZGxndGJvZHkpO1xuXHRcdH1cblx0XHQvLyBmaW5hbCBcImFkZFwiIGJ1dHRvblxuXHRcdGNvbnN0IGRsZ3Rmb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGZvb3QnKTtcblx0XHRkbGd0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG5cdFx0Y29uc3QgZGxndGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuXHRcdGRsZ3RkLnNldEF0dHJpYnV0ZSgnY29sc3BhbicsICczJyk7XG5cdFx0Y29uc3QgYWRkQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG5cdFx0YWRkQnV0dG9uLnN0eWxlLm1pbldpZHRoID0gJzhlbSc7XG5cdFx0YWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcblx0XHRhZGRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbGljaycsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cuYWRkUm93KGRsZ3Rib2R5KTtcblx0XHRcdH0sXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdFx0YWRkQnV0dG9uLnRleHRDb250ZW50ID0gJ+a3u+WKoCc7XG5cdFx0ZGxndGQuYXBwZW5kQ2hpbGQoYWRkQnV0dG9uKTtcblx0XHRkbGd0ci5hcHBlbmRDaGlsZChkbGd0ZCk7XG5cdFx0ZGxndGZvb3QuYXBwZW5kQ2hpbGQoZGxndHIpO1xuXHRcdGRsZ3RhYmxlLmFwcGVuZENoaWxkKGRsZ3Rib2R5KTtcblx0XHRkbGd0YWJsZS5hcHBlbmRDaGlsZChkbGd0Zm9vdCk7XG5cdFx0ZGlhbG9nY29udGVudC5hcHBlbmRDaGlsZChkbGd0YWJsZSk7XG5cdFx0Ly8gYnV0dG9ucGFuZSBidXR0b25zOiBbU2F2ZSBjaGFuZ2VzXSBbUmVzZXRdIFtDYW5jZWxdXG5cdFx0bGV0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuXHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnc3VibWl0Jyk7IC8vIHNvIE1vcmViaXRzLnNpbXBsZVdpbmRvdyBwdXRzIHRoZSBidXR0b24gaW4gdGhlIGJ1dHRvbiBwYW5lXG5cdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHQnY2xpY2snLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRUd2lua2xlLmNvbmZpZy5saXN0RGlhbG9nLnNhdmUoJHByZWZidXR0b24sIGRsZ3Rib2R5KTtcblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9IHdpbmRvdy53Z1VMUygn5L+d5a2Y5L+u5pS5JywgJ+WEsuWtmOS/ruaUuScpO1xuXHRcdGRpYWxvZ2NvbnRlbnQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblx0XHRidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcblx0XHRidXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ3N1Ym1pdCcpOyAvLyBzbyBNb3JlYml0cy5zaW1wbGVXaW5kb3cgcHV0cyB0aGUgYnV0dG9uIGluIHRoZSBidXR0b24gcGFuZVxuXHRcdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0J2NsaWNrJyxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0VHdpbmtsZS5jb25maWcubGlzdERpYWxvZy5yZXNldCgkcHJlZmJ1dHRvbiwgZGxndGJvZHkpO1xuXHRcdFx0fSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblx0XHRidXR0b24udGV4dENvbnRlbnQgPSB3aW5kb3cud2dVTFMoJ+WkjeS9jScsICflvqnkvY0nKTtcblx0XHRkaWFsb2djb250ZW50LmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cdFx0YnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG5cdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdzdWJtaXQnKTsgLy8gc28gTW9yZWJpdHMuc2ltcGxlV2luZG93IHB1dHMgdGhlIGJ1dHRvbiBpbiB0aGUgYnV0dG9uIHBhbmVcblx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbGljaycsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyB0aGUgZXZlbnQgcGFyYW1ldGVyIG9uIHRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYnJva2VuXG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICflj5bmtognO1xuXHRcdGRpYWxvZ2NvbnRlbnQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblx0XHRkaWFsb2cuc2V0Q29udGVudChkaWFsb2djb250ZW50KTtcblx0XHRkaWFsb2cuZGlzcGxheSgpO1xuXHR9O1xuXHQvLyBSZXNldHMgdGhlIGRhdGEgdmFsdWUsIHJlLXBvcHVsYXRlcyBiYXNlZCBvbiB0aGUgbmV3IChkZWZhdWx0KSB2YWx1ZSwgdGhlbiBzYXZlcyB0aGVcblx0Ly8gb2xkIGRhdGEgdmFsdWUgYWdhaW4gKGxlc3Mgc3VycHJpc2luZyBiZWhhdmlvdXIpXG5cdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cucmVzZXQgPSAoYnV0dG9uLCB0Ym9keSkgPT4ge1xuXHRcdC8vIHJlc2V0IHZhbHVlIG9uIGJ1dHRvblxuXHRcdGNvbnN0ICRidXR0b24gPSAkKGJ1dHRvbik7XG5cdFx0Y29uc3QgY3VycHJlZiA9ICRidXR0b24uZGF0YSgncHJlZicpO1xuXHRcdGNvbnN0IG9sZHZhbHVlID0gJGJ1dHRvbi5kYXRhKCd2YWx1ZScpO1xuXHRcdFR3aW5rbGUuY29uZmlnLnJlc2V0UHJlZihjdXJwcmVmKTtcblx0XHQvLyByZXNldCBmb3JtXG5cdFx0Y29uc3QgJHRib2R5ID0gJCh0Ym9keSk7XG5cdFx0JHRib2R5LmZpbmQoJ3RyJykuc2xpY2UoMSkucmVtb3ZlKCk7IC8vIGFsbCByb3dzIGV4Y2VwdCB0aGUgZmlyc3QgKGhlYWRlcikgcm93XG5cdFx0Ly8gYWRkIHRoZSBuZXcgdmFsdWVzXG5cdFx0Y29uc3QgY3VydmFsdWUgPSAkYnV0dG9uLmRhdGEoJ3ZhbHVlJyk7XG5cdFx0Zm9yIChjb25zdCB2IG9mIGN1cnZhbHVlKSB7XG5cdFx0XHRUd2lua2xlLmNvbmZpZy5saXN0RGlhbG9nLmFkZFJvdyh0Ym9keSwgdi52YWx1ZSwgdi5sYWJlbCk7XG5cdFx0fVxuXHRcdC8vIHNhdmUgdGhlIG9sZCB2YWx1ZVxuXHRcdCRidXR0b24uZGF0YSgndmFsdWUnLCBvbGR2YWx1ZSk7XG5cdH07XG5cdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cuc2F2ZSA9IChidXR0b24sIHRib2R5KSA9PiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0bGV0IGN1cnJlbnQgPSB7fTtcblx0XHQkKHRib2R5KVxuXHRcdFx0LmZpbmQoJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdJylcblx0XHRcdC5lYWNoKChpbnB1dGtleSwgaW5wdXQpID0+IHtcblx0XHRcdFx0aWYgKCQoaW5wdXQpLmhhc0NsYXNzKCd0d2lua2xlLWNvbmZpZy1jdXN0b21saXN0LXZhbHVlJykpIHtcblx0XHRcdFx0XHRjdXJyZW50ID0ge1xuXHRcdFx0XHRcdFx0dmFsdWU6IGlucHV0LnZhbHVlLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3VycmVudC5sYWJlbCA9IGlucHV0LnZhbHVlO1xuXHRcdFx0XHRcdC8vIGV4Y2x1ZGUgdG90YWxseSBlbXB0eSByb3dzXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnQudmFsdWUgfHwgY3VycmVudC5sYWJlbCkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goY3VycmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHQkKGJ1dHRvbikuZGF0YSgndmFsdWUnLCByZXN1bHQpO1xuXHR9O1xuXHQvLyByZXNldC9yZXN0b3JlIGRlZmF1bHRzXG5cdFR3aW5rbGUuY29uZmlnLnJlc2V0UHJlZkxpbmsgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHdhbnRlZHByZWYgPSBlLnRhcmdldC5pZC5zbGljZSgyMSk7IC8vIFwidHdpbmtsZS1jb25maWctcmVzZXQtXCIgcHJlZml4IGlzIHN0cmlwcGVkXG5cdFx0Ly8gc2VhcmNoIHRhY3RpY3Ncblx0XHQkKFR3aW5rbGUuY29uZmlnLnNlY3Rpb25zKS5lYWNoKChzZWN0aW9ua2V5LCBzZWN0aW9uKSA9PiB7XG5cdFx0XHRpZiAoc2VjdGlvbi5oaWRkZW4gfHwgKHNlY3Rpb24uYWRtaW5Pbmx5ICYmICFNb3JlYml0cy51c2VySXNTeXNvcCkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIGNvbnRpbnVlOiBza2lwIGltcG9zc2liaWxpdGllc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgZm91bmRpdCA9IGZhbHNlO1xuXHRcdFx0JChzZWN0aW9uLnByZWZlcmVuY2VzKS5lYWNoKChwcmVma2V5LCBwcmVmKSA9PiB7XG5cdFx0XHRcdGlmIChwcmVmLm5hbWUgIT09IHdhbnRlZHByZWYpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gY29udGludWVcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFR3aW5rbGUuY29uZmlnLnJlc2V0UHJlZihwcmVmKTtcblx0XHRcdFx0Zm91bmRpdCA9IHRydWU7XG5cdFx0XHRcdHJldHVybiBmYWxzZTsgLy8gYnJlYWtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoZm91bmRpdCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGJyZWFrXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZmFsc2U7IC8vIHN0b3AgbGluayBmcm9tIHNjcm9sbGluZyBwYWdlXG5cdH07XG5cblx0VHdpbmtsZS5jb25maWcucmVzZXRQcmVmID0gKHByZWYpID0+IHtcblx0XHRzd2l0Y2ggKHByZWYudHlwZSkge1xuXHRcdFx0Y2FzZSAnYm9vbGVhbic6XG5cdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWYubmFtZX1gKS5jaGVja2VkID0gVHdpbmtsZS5kZWZhdWx0Q29uZmlnW3ByZWYubmFtZV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWYubmFtZX1gKS52YWx1ZSA9IFR3aW5rbGUuZGVmYXVsdENvbmZpZ1twcmVmLm5hbWVdO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3NldCc6XG5cdFx0XHRcdGZvciAoY29uc3QgW2l0ZW1rZXldIG9mIE9iamVjdC5lbnRyaWVzKHByZWYuc2V0VmFsdWVzKSkge1xuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmLm5hbWV9XyR7aXRlbWtleX1gKSkge1xuXHRcdFx0XHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZi5uYW1lfV8ke2l0ZW1rZXl9YCkuY2hlY2tlZCA9XG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZ1twcmVmLm5hbWVdLmluY2x1ZGVzKGl0ZW1rZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2N1c3RvbUxpc3QnOlxuXHRcdFx0XHQkKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWYubmFtZX1gKSkuZGF0YSgndmFsdWUnLCBUd2lua2xlLmRlZmF1bHRDb25maWdbcHJlZi5uYW1lXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0bXcubm90aWZ5KGB0d2lua2xlY29uZmlnOiB1bmtub3duIGRhdGEgdHlwZSBmb3IgcHJlZmVyZW5jZSAke3ByZWYubmFtZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVjb25maWcnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmNvbmZpZy5yZXNldEFsbFByZWZzID0gKCkgPT4ge1xuXHRcdC8vIG5vIGNvbmZpcm1hdGlvbiBtZXNzYWdlIC0gdGhlIHVzZXIgY2FuIGp1c3QgcmVmcmVzaC9jbG9zZSB0aGUgcGFnZSB0byBhYm9ydFxuXHRcdCQoVHdpbmtsZS5jb25maWcuc2VjdGlvbnMpLmVhY2goKHNlY3Rpb25rZXksIHNlY3Rpb24pID0+IHtcblx0XHRcdGlmIChzZWN0aW9uLmhpZGRlbiB8fCAoc2VjdGlvbi5hZG1pbk9ubHkgJiYgIU1vcmViaXRzLnVzZXJJc1N5c29wKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gY29udGludWU6IHNraXAgaW1wb3NzaWJpbGl0aWVzXG5cdFx0XHR9XG5cblx0XHRcdCQoc2VjdGlvbi5wcmVmZXJlbmNlcykuZWFjaCgocHJlZmtleSwgcHJlZikgPT4ge1xuXHRcdFx0XHRpZiAoIXByZWYuYWRtaW5Pbmx5IHx8IE1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5jb25maWcucmVzZXRQcmVmKHByZWYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXHRcdHJldHVybiBmYWxzZTsgLy8gc3RvcCBsaW5rIGZyb20gc2Nyb2xsaW5nIHBhZ2Vcblx0fTtcblxuXHRUd2lua2xlLmNvbmZpZy5zYXZlID0gKGUpID0+IHtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdHdpbmtsZS1jb25maWctY29udGVudCcpKTtcblx0XHRjb25zdCB1c2VyanMgPSBgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVttdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpLnVzZXJdfToke213LmNvbmZpZy5nZXQoXG5cdFx0XHQnd2dVc2VyTmFtZSdcblx0XHQpfS90d2lua2xlb3B0aW9ucy5qc2A7XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdHVzZXJqcyxcblx0XHRcdHdpbmRvdy53Z1VMUygn5L+d5a2Y5Y+C5pWw6K6+572u5YiwICcsICflhLLlrZjlgY/lpb3oqK3lrprliLAgJykgKyB1c2VyanNcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMoZS50YXJnZXQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuY29uZmlnLndyaXRlUHJlZnMpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblx0VHdpbmtsZS5jb25maWcud3JpdGVQcmVmcyA9IChwYWdlb2JqKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0Ly8gdGhpcyBpcyB0aGUgb2JqZWN0IHdoaWNoIGdldHMgc2VyaWFsaXplZCBpbnRvIEpTT047IG9ubHlcblx0XHQvLyBwcmVmZXJlbmNlcyB0aGF0IHRoaXMgc2NyaXB0IGtub3dzIGFib3V0IGFyZSBrZXB0XG5cdFx0Y29uc3QgbmV3Q29uZmlnID0ge1xuXHRcdFx0b3B0aW9uc1ZlcnNpb246IDIuMSxcblx0XHR9O1xuXHRcdC8vIGEgY29tcGFyaXNvbiBmdW5jdGlvbiBpcyBuZWVkZWQgbGF0ZXIgb25cblx0XHQvLyBpdCBpcyBqdXN0IGVub3VnaCBmb3Igb3VyIHB1cnBvc2VzIChpLmUuIGNvbXBhcmluZyBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucyxcblx0XHQvLyBhcnJheXMgb2Ygc3RyaW5ncywgYW5kIGFycmF5cyBvZiB7IHZhbHVlLCBsYWJlbCB9KVxuXHRcdC8vIGFuZCBpdCBpcyBub3QgdmVyeSByb2J1c3Q6IGUuZy4gY29tcGFyZShbMl0sIFtcIjJcIl0pID09PSB0cnVlLCBhbmRcblx0XHQvLyBjb21wYXJlKHt9LCB7fSkgPT09IGZhbHNlLCBidXQgaXQncyBnb29kIGVub3VnaCBmb3Igb3VyIHB1cnBvc2VzIGhlcmVcblx0XHRjb25zdCBjb21wYXJlID0gKGEsIGIpID0+IHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG5cdFx0XHRcdGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0YS5zb3J0KCk7XG5cdFx0XHRcdGIuc29ydCgpO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgYVtpXTsgKytpKSB7XG5cdFx0XHRcdFx0Ly8gY29tcGFyaXNvbiBvZiB0aGUgdHdvIHByb3BlcnRpZXMgb2YgY3VzdG9tIGxpc3RzXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBhW2ldID09PSAnb2JqZWN0JyAmJiAoYVtpXS5sYWJlbCAhPT0gYltpXS5sYWJlbCB8fCBhW2ldLnZhbHVlICE9PSBiW2ldLnZhbHVlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYVtpXS50b1N0cmluZygpICE9PSBiW2ldLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYSA9PT0gYjtcblx0XHR9O1xuXHRcdCQoVHdpbmtsZS5jb25maWcuc2VjdGlvbnMpLmVhY2goKHNlY3Rpb25rZXksIHNlY3Rpb24pID0+IHtcblx0XHRcdGlmIChzZWN0aW9uLmFkbWluT25seSAmJiAhTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0cmV0dXJuOyAvLyBpLmUuIFwiY29udGludWVcIiBpbiB0aGlzIGNvbnRleHRcblx0XHRcdH1cblx0XHRcdC8vIHJlYWNoIGVhY2ggb2YgdGhlIHByZWZlcmVuY2VzIGZyb20gdGhlIGZvcm1cblx0XHRcdCQoc2VjdGlvbi5wcmVmZXJlbmNlcykuZWFjaCgocHJlZmtleSwgcHJlZikgPT4ge1xuXHRcdFx0XHRsZXQgdXNlclZhbHVlOyAvLyA9IHVuZGVmaW5lZFxuXHRcdFx0XHQvLyBvbmx5IHJlYWQgZm9ybSB2YWx1ZXMgZm9yIHRob3NlIHByZWZzIHRoYXQgaGF2ZSB0aGVtXG5cdFx0XHRcdGlmICghcHJlZi5hZG1pbk9ubHkgfHwgTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0XHRpZiAoIXNlY3Rpb24uaGlkZGVuKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHByZWYudHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlICdib29sZWFuJzpcblx0XHRcdFx0XHRcdFx0XHQvLyByZWFkIGZyb20gdGhlIGNoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlID0gZm9ybVtwcmVmLm5hbWVdLmNoZWNrZWQ7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3N0cmluZyc6IC8vIHJlYWQgZnJvbSB0aGUgaW5wdXQgYm94IG9yIGNvbWJvIGJveFxuXHRcdFx0XHRcdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdFx0XHRcdFx0XHR1c2VyVmFsdWUgPSBmb3JtW3ByZWYubmFtZV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0XHRcdFx0XHRcdC8vIHJlYWQgZnJvbSB0aGUgaW5wdXQgYm94XG5cdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlID0gTnVtYmVyLnBhcnNlSW50KGZvcm1bcHJlZi5uYW1lXS52YWx1ZSwgMTApO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChOdW1iZXIuaXNOYU4odXNlclZhbHVlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+d5a2YJywgJ+WEsuWtmCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+aCqOS4uiAnLCAn5oKo54K6ICcpICsgcHJlZi5uYW1lfSDmjIflrprnmoTlgLzvvIgke3ByZWYudmFsdWV9JHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J++8ieS4jeWQiOazle+8jOS8mue7p+e7reS/neWtmOaTjeS9nO+8jOS9huatpOWAvOWwhuS8mui3s+i/h+OAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J++8ieS4jeWQiOazle+8jOacg+e5vOe6jOWEsuWtmOaTjeS9nO+8jOS9huatpOWAvOWwh+acg+i3s+mBjuOAgidcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1gXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3NldCc6XG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmVhZCBmcm9tIHRoZSBzZXQgb2YgY2hlY2sgYm94ZXNcblx0XHRcdFx0XHRcdFx0XHR1c2VyVmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJlZi5zZXREaXNwbGF5T3JkZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlYWQgb25seSB0aG9zZSBrZXlzIHNwZWNpZmllZCBpbiB0aGUgZGlzcGxheSBvcmRlclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHByZWYuc2V0RGlzcGxheU9yZGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb3JtW2Ake3ByZWYubmFtZX1fJHtpdGVtfWBdLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyVmFsdWUucHVzaChpdGVtKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyByZWFkIGFsbCB0aGUga2V5cyBpbiB0aGUgbGlzdCBvZiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgW2l0ZW1rZXldIG9mIE9iamVjdC5lbnRyaWVzKHByZWYuc2V0VmFsdWVzKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZm9ybVtgJHtwcmVmLm5hbWV9XyR7aXRlbWtleX1gXS5jaGVja2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlLnB1c2goaXRlbWtleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2N1c3RvbUxpc3QnOlxuXHRcdFx0XHRcdFx0XHRcdC8vIHJlYWQgZnJvbSB0aGUgalF1ZXJ5IGRhdGEgc3RvcmVkIG9uIHRoZSBidXR0b24gb2JqZWN0XG5cdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlID0gJChmb3JtW3ByZWYubmFtZV0pLmRhdGEoJ3ZhbHVlJyk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0bXcubm90aWZ5KGB0d2lua2xlY29uZmlnOiDmnKrnn6XmlbDmja7nsbvlnovvvIzlsZ7mgKcgJHtwcmVmLm5hbWV9YCwge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWNvbmZpZycsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChUd2lua2xlLnByZWZzKSB7XG5cdFx0XHRcdFx0XHQvLyBSZXRhaW4gdGhlIGhpZGRlbiBwcmVmZXJlbmNlcyB0aGF0IG1heSBoYXZlIGN1c3RvbWlzZWQgYnkgdGhlIHVzZXIgZnJvbSB0d2lua2xlb3B0aW9ucy5qc1xuXHRcdFx0XHRcdFx0Ly8gdW5kZWZpbmVkIGlmIG5vdCBzZXRcblx0XHRcdFx0XHRcdHVzZXJWYWx1ZSA9IFR3aW5rbGUucHJlZnNbcHJlZi5uYW1lXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gb25seSBzYXZlIHRob3NlIHByZWZlcmVuY2VzIHRoYXQgYXJlICpkaWZmZXJlbnQqIGZyb20gdGhlIGRlZmF1bHRcblx0XHRcdFx0aWYgKHVzZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFjb21wYXJlKHVzZXJWYWx1ZSwgVHdpbmtsZS5kZWZhdWx0Q29uZmlnW3ByZWYubmFtZV0pKSB7XG5cdFx0XHRcdFx0bmV3Q29uZmlnW3ByZWYubmFtZV0gPSB1c2VyVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG5vd2lraSA9ICdub3dpa2knO1xuXHRcdGxldCB0ZXh0ID0gYC8vIDwke25vd2lraX0+XFxuJHt3aW5kb3cud2dVTFMoXG5cdFx0XHRgLy8gdHdpbmtsZW9wdGlvbnMuanPvvJrnlKjmiLdUd2lua2xl5Y+C5pWw6K6+572u5paH5Lu2XFxuLy9cXG4vLyDms6jvvJrkv67mlLnmgqjnmoTlj4LmlbDorr7nva7mnIDnroDljZXnmoTlip7ms5XmmK/kvb/nlKhcXG4vLyBUd2lua2xl5Y+C5pWw6K6+572u6Z2i5p2/77yM5ZyoW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXeOAglxcbi8vXFxuLy8g6L+Z5Liq5paH5Lu25piv6Ieq5Yqo55Sf5oiQ55qE77yM5oKo5omA5YGa55qE5Lu75L2V5L+u5pS577yI6Zmk5LqGXFxuLy8g5Lul5LiA56eN5ZCI5rOV55qESmF2YVNjcmlwdOeahOaWueW8j+adpeS/ruaUuei/meS6m+WxnuaAp+WAvO+8ieS8mlxcbi8vIOWcqOS4i+S4gOasoeaCqOeCueWHu+KAnOS/neWtmOKAneaXtuiiq+imhuebluOAglxcbi8vIOS/ruaUueatpOaWh+S7tuaXtu+8jOivt+iusOW+l+S9v+eUqOWQiOazleeahEphdmFTY3JpcHTjgIJcXG5gLFxuXHRcdFx0YC8vIHR3aW5rbGVvcHRpb25zLmpz77ya5L2/55So6ICFVHdpbmtsZeWPg+aVuOioreWumuaqlOahiFxcbi8vXFxuLy8g6Ki777ya5L+u5pS55oKo55qE5Y+D5pW46Kit5a6a5pyA57Ch5Zau55qE6L6m5rOV5piv5L2/55SoXFxuLy8gVHdpbmtsZeWPg+aVuOioreWumumdouadv++8jOWcqFtbJHtNb3JlYml0cy5wYWdlTmFtZU5vcm19XV3jgIJcXG4vL1xcbi8vIOmAmeWAi+aqlOahiOaYr+iHquWLleeUoueUn+eahO+8jOaCqOaJgOWBmueahOS7u+S9leS/ruaUue+8iOmZpOS6hlxcbi8vIOS7peS4gOeoruWQiOazleeahEphdmFTY3JpcHTnmoTmlrnlvI/kvobkv67mlLnpgJnkupvlsazmgKflgLzvvInmnINcXG4vLyDlnKjkuIvkuIDmrKHmgqjpu57mk4rjgIzlhLLlrZjjgI3mmYLooqvopobok4vjgIJcXG4vLyDkv67mlLnmraTmqpTmoYjmmYLvvIzoq4voqJjlvpfkvb/nlKjlkIjms5XnmoRKYXZhU2NyaXB044CCXFxuYFxuXHRcdCl9YDtcblx0XHR0ZXh0ICs9XG5cdFx0XHQnXFxud2luZG93LlR3aW5rbGUgPSB3aW5kb3cuVHdpbmtsZSB8fCB7fTtcXG53aW5kb3cuVHdpbmtsZS5wcmVmcyA9IHdpbmRvdy5Ud2lua2xlLnByZWZzIHx8IHt9O1xcbndpbmRvdy5Ud2lua2xlLnByZWZzID0gJztcblx0XHR0ZXh0ICs9IEpTT04uc3RyaW5naWZ5KG5ld0NvbmZpZywgbnVsbCwgMik7XG5cdFx0dGV4dCArPSBgO1xcblxcbiR7d2luZG93LndnVUxTKCcvLyB0d2lua2xlb3B0aW9ucy5qc+WIsOatpOS4uuatolxcbicsICcvLyB0d2lua2xlb3B0aW9ucy5qc+WIsOatpOeCuuatolxcbicpfS8vIDwvJHtub3dpa2l9PmA7XG5cdFx0cGFnZW9iai5zZXRQYWdlVGV4dCh0ZXh0KTtcblx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0d2luZG93LndnVUxTKCfkv53lrZhUd2lua2xl5Y+C5pWw6K6+572u77ya5p2l6IeqW1snLCAn5YSy5a2YVHdpbmtsZeWBj+WlveioreWumu+8muS+huiHqltbJykgK1xuXHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ11d55qE6Ieq5Yqo57yW6L6RJywgJ11d55qE6Ieq5YuV57eo6LyvJylcblx0XHQpO1xuXHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdHBhZ2VvYmouc2F2ZShUd2lua2xlLmNvbmZpZy5zYXZlU3VjY2Vzcyk7XG5cdH07XG5cdFR3aW5rbGUuY29uZmlnLnNhdmVTdWNjZXNzID0gKHBhZ2VvYmopID0+IHtcblx0XHRwYWdlb2JqLmdldFN0YXR1c0VsZW1lbnQoKS5pbmZvKCfmiJDlip8nKTtcblx0XHRjb25zdCBub3RpY2Vib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRub3RpY2Vib3guY2xhc3NOYW1lID0gJ213LW1lc3NhZ2UtYm94IG13LW1lc3NhZ2UtYm94LXN1Y2Nlc3MnO1xuXHRcdG5vdGljZWJveC5zdHlsZS5mb250U2l6ZSA9ICcxMDAlJztcblx0XHRub3RpY2Vib3guc3R5bGUubWFyZ2luVG9wID0gJzJlbSc7XG5cdFx0bm90aWNlYm94LmlubmVySFRNTCA9IGA8cD48Yj4ke3dpbmRvdy53Z1VMUyhcblx0XHRcdCfmgqjnmoRUd2lua2xl5Y+C5pWw6K6+572u5bey6KKr5L+d5a2Y44CCJyxcblx0XHRcdCfmgqjnmoRUd2lua2xl5YGP5aW96Kit5a6a5bey6KKr5YSy5a2Y44CCJ1xuXHRcdCl9PC9iPjwvcD48cD4ke3dpbmRvdy53Z1VMUygn6KaB55yL5Yiw6L+Z5Lqb5pu05pS577yM5oKo5Y+v6IO96ZyA6KaBJywgJ+imgeeci+WIsOmAmeS6m+abtOaUue+8jOaCqOWPr+iDvemcgOimgScpfTxhIGhyZWY9XCIke213LnV0aWwuZ2V0VXJsKFxuXHRcdFx0J0xJQjpCWVBBU1MnXG5cdFx0KX1cIiB0aXRsZT1cIkxJQjpCWVBBU1NcIj48Yj4ke3dpbmRvdy53Z1VMUygn57uV6L+H5rWP6KeI5Zmo57yT5a2YJywgJ+e5numBjueAj+imveWZqOW/q+WPlicpfTwvYj48L2E+44CCPC9wPmA7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLnJvb3QuYXBwZW5kQ2hpbGQobm90aWNlYm94KTtcblx0XHRjb25zdCBub3RpY2VjbGVhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyk7XG5cdFx0bm90aWNlY2xlYXIuc3R5bGUuY2xlYXIgPSAnYm90aCc7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLnJvb3QuYXBwZW5kQ2hpbGQobm90aWNlY2xlYXIpO1xuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmNvbmZpZy5pbml0KTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICJpbXBvcnQgJy4vVHdpbmtsZS5sZXNzJztcblxuKGFzeW5jIGZ1bmN0aW9uIHR3aW5rbGVMb2FkKCkge1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlJyk7XG5cdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL3R3aW5rbGVhcnYnKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZXdhcm4nKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZWJsb2NrJyk7XG5cdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL2ZyaWVuZGx5dGFsa2JhY2snKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZXNwZWVkeScpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlY29weXZpbycpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xleGZkJyk7XG5cdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL3R3aW5rbGVpbWFnZScpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlcHJvdGVjdCcpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy9mcmllbmRseXRhZycpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlc3R1YicpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlZGlmZicpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xldW5saW5rJyk7XG5cdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL3R3aW5rbGVmbHVmZicpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlYmF0Y2hkZWxldGUnKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZWJhdGNodW5kZWxldGUnKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZWJhdGNocHJvdGVjdCcpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlY2xvc2UnKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZWNvbmZpZycpO1xufSkoKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFN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LE9BQUE2aEIsa0JBQUEsR0FBQUQscUJBQUE7QUFDTixVQUFNczBCLFFBQUFDLFFBQUEsRUFBQW4yQyxLQUFBLE9BQUE4aUIsb0JBQUEsR0FBQUYsdUJBQUE7QUFDTixVQUFNc3pCLFFBQUFDLFFBQUEsRUFBQW4yQyxLQUFBLE9BQUErcEIsaUJBQUEsR0FBQUQsb0JBQUE7QUFDTixVQUFNb3NCLFFBQUFDLFFBQUEsRUFBQW4yQyxLQUFBLE9BQUErMEIsaUJBQUEsR0FBQUYsb0JBQUE7QUFDTixVQUFNcWhCLFFBQUFDLFFBQUEsRUFBQW4yQyxLQUFBLE9BQUFtM0IsaUJBQUEsR0FBQUQsb0JBQUE7QUFDTixVQUFNZ2YsUUFBQUMsUUFBQSxFQUFBbjJDLEtBQUEsT0FBQTQzQixtQkFBQSxHQUFBRCxzQkFBQTtBQUNOLFVBQU11ZSxRQUFBQyxRQUFBLEVBQUFuMkMsS0FBQSxPQUFBZzdCLGtCQUFBLEdBQUFELHFCQUFBO0FBQ04sVUFBTW1iLFFBQUFDLFFBQUEsRUFBQW4yQyxLQUFBLE9BQUF1aEMsd0JBQUEsR0FBQUQsMkJBQUE7QUFDTixVQUFNNFUsUUFBQUMsUUFBQSxFQUFBbjJDLEtBQUEsT0FBQTJtQywwQkFBQSxHQUFBRCw2QkFBQTtBQUNOLFVBQU13UCxRQUFBQyxRQUFBLEVBQUFuMkMsS0FBQSxPQUFBMG5DLHlCQUFBLEdBQUFELDRCQUFBO0FBQ04sVUFBTXlPLFFBQUFDLFFBQUEsRUFBQW4yQyxLQUFBLE9BQUE0b0Msa0JBQUEsR0FBQUQscUJBQUE7QUFDTixVQUFNdU4sUUFBQUMsUUFBQSxFQUFBbjJDLEtBQUEsT0FBQTZzQyxtQkFBQSxHQUFBRCxzQkFBQTtFQUNQLENBQUE7QUFBQSxXQXJCZ0J3SixjQUFBO0FBQUEsV0FBQUMsYUFBQUMsTUFBQSxNQUFBQyxTQUFBO0VBQUE7QUFBQSxTQUFBSDtBQUFBLEdBQUEsRUFxQmI7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgInR3aW5rbGVfZXhwb3J0cyIsICJpbml0X3R3aW5rbGUiLCAiX19lc20iLCAidHdpbmtsZSIsICIkIiwgIl93aW5kb3ciLCAiJGJvZHkiLCAiVHdpbmtsZTIiLCAid2luZG93IiwgIlR3aW5rbGUiLCAiTW9yZWJpdHMiLCAidXNlcklzSW5Hcm91cCIsICJjb25zb2xlIiwgIndhcm4iLCAiY2hhbmdlVGFncyIsICJzdW1tYXJ5QWQiLCAiaGF0bm90ZVJlZ2V4IiwgImluaXRDYWxsYmFja3MiLCAiYWRkSW5pdENhbGxiYWNrIiwgImZ1bmMiLCAibmFtZSIsICJwdXNoIiwgImRlZmF1bHRDb25maWciLCAidXNlclRhbGtQYWdlTW9kZSIsICJkaWFsb2dMYXJnZUZvbnQiLCAiZGlzYWJsZWRNb2R1bGVzIiwgInVzZXJJc1N5c29wIiwgImRpc2FibGVkU3lzb3BNb2R1bGVzIiwgInNwaVdhdGNoUmVwb3J0IiwgImRlZmF1bHRUb0Jsb2NrNjQiLCAiZGVmYXVsdFRvUGFydGlhbEJsb2NrcyIsICJibGFua1RhbGtwYWdlT25JbmRlZkJsb2NrIiwgIndhdGNoQmxvY2tOb3RpY2VzIiwgImN1c3RvbUJsb2NrUmVhc29uTGlzdCIsICJvcGVuVGFsa1BhZ2UiLCAib3BlblRhbGtQYWdlT25BdXRvUmV2ZXJ0IiwgInJvbGxiYWNrSW5QbGFjZSIsICJtYXJrUmV2ZXJ0ZWRQYWdlc0FzTWlub3IiLCAid2F0Y2hSZXZlcnRlZFBhZ2VzIiwgIndhdGNoUmV2ZXJ0ZWRFeHBpcnkiLCAib2ZmZXJSZWFzb25Pbk5vcm1hbFJldmVydCIsICJjb25maXJtT25GbHVmZiIsICJzaG93Um9sbGJhY2tMaW5rcyIsICJjdXN0b21SZXZlcnRTdW1tYXJ5IiwgIm5vdGlmeVVzZXJPbkRlbGkiLCAiZGVsaVdhdGNoUGFnZSIsICJkZWxpV2F0Y2hVc2VyIiwgIndhdGNoUmVxdWVzdGVkUGFnZXMiLCAid2F0Y2hQUFRhZ2dlZFBhZ2VzIiwgIndhdGNoUHJvdGVjdGVkUGFnZXMiLCAic3BlZWR5U2VsZWN0aW9uU3R5bGUiLCAid2F0Y2hTcGVlZHlQYWdlcyIsICJ3YXRjaFNwZWVkeUV4cGlyeSIsICJtYXJrU3BlZWR5UGFnZXNBc1BhdHJvbGxlZCIsICJ3YXRjaFNwZWVkeVVzZXIiLCAibm90aWZ5VXNlck9uU3BlZWR5RGVsZXRpb25Ob21pbmF0aW9uIiwgIndhcm5Vc2VyT25TcGVlZHlEZWxldGUiLCAicHJvbXB0Rm9yU3BlZWR5RGVsZXRpb25TdW1tYXJ5IiwgIm9wZW5Vc2VyVGFsa1BhZ2VPblNwZWVkeURlbGV0ZSIsICJkZWxldGVUYWxrUGFnZU9uRGVsZXRlIiwgImRlbGV0ZVJlZGlyZWN0c09uRGVsZXRlIiwgImRlbGV0ZVN5c29wRGVmYXVsdFRvRGVsZXRlIiwgInNwZWVkeVdpbmRvd0hlaWdodCIsICJzcGVlZHlXaW5kb3dXaWR0aCIsICJsb2dTcGVlZHlOb21pbmF0aW9ucyIsICJzcGVlZHlMb2dQYWdlTmFtZSIsICJub0xvZ09uU3BlZWR5Tm9taW5hdGlvbiIsICJlbmxhcmdlRzdJbnB1dCIsICJ1bmxpbmtOYW1lc3BhY2VzIiwgImRlZmF1bHRXYXJuaW5nR3JvdXAiLCAiY29tYmluZWRTaW5nbGV0TWVudXMiLCAid2F0Y2hXYXJuaW5ncyIsICJvbGRTZWxlY3QiLCAiY3VzdG9tV2FybmluZ0xpc3QiLCAiYXV0b01lbnVBZnRlclJvbGxiYWNrIiwgImxvZ1hmZE5vbWluYXRpb25zIiwgInhmZExvZ1BhZ2VOYW1lIiwgIm5vTG9nT25YZmROb21pbmF0aW9uIiwgInhmZFdhdGNoRGlzY3Vzc2lvbiIsICJ4ZmRXYXRjaFBhZ2UiLCAieGZkV2F0Y2hVc2VyIiwgIm1hcmtYZmRQYWdlc0FzUGF0cm9sbGVkIiwgIkZ3ZENzZFRvWGZkIiwgImFmZERlZmF1bHRDYXRlZ29yeSIsICJhZmRGYW1lRGVmYXVsdFJlYXNvbiIsICJhZmRTdWJzdHViRGVmYXVsdFJlYXNvbiIsICJYZmRDbG9zZSIsICJjb3B5dmlvV2F0Y2hQYWdlIiwgImNvcHl2aW9XYXRjaFVzZXIiLCAibWFya0NvcHl2aW9QYWdlc0FzUGF0cm9sbGVkIiwgImF1dG9sZXZlbFN0YWxlRGF5cyIsICJyZXZlcnRNYXhSZXZpc2lvbnMiLCAiYmF0Y2hNYXgiLCAiYmF0Y2hDaHVua3MiLCAiY29uZmlnUGFnZSIsICJwcm9qZWN0TmFtZXNwYWNlTmFtZSIsICJtdyIsICJjb25maWciLCAiZ2V0IiwgInNhbmRib3hQYWdlIiwgImRlbGV0aW9uU3VtbWFyeUFkIiwgInByb3RlY3Rpb25TdW1tYXJ5QWQiLCAiYmxvY2tTdW1tYXJ5QWQiLCAiZ3JvdXBCeURlZmF1bHQiLCAid2F0Y2hUYWdnZWRQYWdlcyIsICJ3YXRjaE1lcmdlRGlzY3Vzc2lvbnMiLCAibWFya1RhZ2dlZFBhZ2VzQXNNaW5vciIsICJtYXJrVGFnZ2VkUGFnZXNBc1BhdHJvbGxlZCIsICJ0YWdBcnRpY2xlU29ydE9yZGVyIiwgImN1c3RvbVRhZ0xpc3QiLCAiY3VzdG9tRmlsZVRhZ0xpc3QiLCAiY3VzdG9tUmVkaXJlY3RUYWdMaXN0IiwgIndhdGNoU3R1YmJlZFBhZ2VzIiwgIm1hcmtTdHViYmVkUGFnZXNBc01pbm9yIiwgIm1hcmtTdHViYmVkUGFnZXNBc1BhdHJvbGxlZCIsICJzdHViQXJ0aWNsZVNvcnRPcmRlciIsICJjdXN0b21TdHViTGlzdCIsICJtYXJrVGFsa2JhY2tBc01pbm9yIiwgImluc2VydFRhbGtiYWNrU2lnbmF0dXJlIiwgInRhbGtiYWNrSGVhZGluZyIsICJ3Z1VMUyIsICJtYWlsSGVhZGluZyIsICJwb3J0bGV0QXJlYSIsICJwb3J0bGV0SWQiLCAicG9ydGxldE5hbWUiLCAicG9ydGxldFR5cGUiLCAicG9ydGxldE5leHQiLCAiZmluZCIsICJsZW5ndGgiLCAiZ2V0UHJlZiIsICJwcmVmcyIsICJUd2lua2xlQ29uZmlnIiwgImFkZFBvcnRsZXQiLCAibmF2aWdhdGlvbiIsICJpZCIsICJ0ZXh0IiwgInR5cGUiLCAibmV4dG5vZGVpZCIsICJyb290IiwgImRvY3VtZW50IiwgInF1ZXJ5U2VsZWN0b3IiLCAidGVzdCIsICJjb25jYXQiLCAiaXRlbSIsICJwYXJlbnROb2RlIiwgIm5leHRub2RlIiwgInNraW4iLCAib3V0ZXJOYXZDbGFzcyIsICJpbm5lckRpdkNsYXNzIiwgIm91dGVyTmF2IiwgImhlYWRpbmciLCAiY3JlYXRlRWxlbWVudCIsICJzZXRBdHRyaWJ1dGUiLCAiY2xhc3NOYW1lIiwgImluc2VydEJlZm9yZSIsICJhcHBlbmRDaGlsZCIsICJ1bCIsICJpbmNsdWRlcyIsICJjaGtib3giLCAic3BhbiIsICJjcmVhdGVUZXh0Tm9kZSIsICJhIiwgImhyZWYiLCAib24iLCAiZSIsICJwcmV2ZW50RGVmYXVsdCIsICJpbm5lckRpdiIsICJhZGRQb3J0bGV0TGluayIsICJ0YXNrIiwgInRvb2x0aXAiLCAibGluayIsICJ1dGlsIiwgImNzcyIsICJldiIsICJjb2xsYXBzaWJsZVRhYnMiLCAiaGFuZGxlUmVzaXplIiwgInNjcmlwdHVybCIsICJnZXRVcmwiLCAiYWN0aW9uIiwgImN0eXBlIiwgImhhcHB5IiwgImxvYWRlciIsICJnZXRTY3JpcHQiLCAiZmFpbCIsICJub3RpZnkiLCAidGFnIiwgImFsd2F5cyIsICJsb2FkIiwgImFjdGl2ZVNwZWNpYWxQYWdlTGlzdCIsICJ0b3AiLCAic2VsZiIsICJ1c2VyQWdlbnQiLCAid2lraSIsICJhcGkiLCAic2V0QXBpVXNlckFnZW50IiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfc3RlcCIsICJzIiwgIm4iLCAiZG9uZSIsICJtb2R1bGUyIiwgInZhbHVlIiwgImVyciIsICJmIiwgImFkZENTUyIsICJpc1ZlY3RvciIsICJzb3J0QnlOYW1lc3BhY2UiLCAiZmlyc3QiLCAic2Vjb25kIiwgIm5zIiwgInRpdGxlIiwgImdlbmVyYXRlQmF0Y2hQYWdlTGlua3MiLCAiY2hlY2tib3giLCAiJGNoZWNrYm94IiwgImh0bWxOb2RlIiwgInZhbCIsICJuZXh0IiwgInByZXBlbmQiLCAialF1ZXJ5IiwgInR3aW5rbGVhcnZfZXhwb3J0cyIsICJpbml0X3R3aW5rbGVhcnYiLCAidHdpbmtsZWFydiIsICJhcnYiLCAidXNlcm5hbWUiLCAiaXNJUCIsICJpc0lQQWRkcmVzcyIsICJjYWxsYmFjayIsICJ1aWQiLCAiV2luZG93IiwgInNpbXBsZVdpbmRvdyIsICJzZXRUaXRsZSIsICJzZXRTY3JpcHROYW1lIiwgImFkZEZvb3RlckxpbmsiLCAiZm9ybSIsICJxdWlja0Zvcm0iLCAiZXZhbHVhdGUiLCAiY2F0ZWdvcmllcyIsICJhcHBlbmQiLCAibGFiZWwiLCAiZXZlbnQiLCAiY2hhbmdlQ2F0ZWdvcnkiLCAiZGlzYWJsZWQiLCAic3R5bGUiLCAicmVzdWx0IiwgInJlbmRlciIsICJzZXRDb250ZW50IiwgImRpc3BsYXkiLCAicXVlcnkiLCAibGlzdCIsICJia3Byb3AiLCAiZm9ybWF0IiwgImJraXAiLCAiYmt1c2VycyIsICJhcGlvYmoiLCAiYmxvY2tsaXN0IiwgImdldFJlc3BvbnNlIiwgImJsb2NrcyIsICJibG9jayIsICJtZXNzYWdlIiwgInBhcnRpYWwiLCAicmFuZ2VzdGFydCIsICJyYW5nZWVuZCIsICJwb3N0IiwgImV2dCIsICJjcmVhdGVFdmVudCIsICJpbml0RXZlbnQiLCAiY2F0ZWdvcnkiLCAiZGlzcGF0Y2hFdmVudCIsICJsdGFfbGlzdCIsICJzb2NrbWFzdGVyX2NoYW5nZWQiLCAic2V0X3NvY2ttYXN0ZXIiLCAidGFyZ2V0IiwgInNvY2ttYXN0ZXIiLCAidmFsdWVfIiwgInJvb3RfIiwgIm9sZF9hcmVhIiwgImdldEVsZW1lbnRzIiwgIndvcmtfYXJlYSIsICJwcmV2aWV3bGluayIsICJjdXJzb3IiLCAidGV4dENvbnRlbnQiLCAicHJldmlldyIsICJlbGVtZW50IiwgInN1YmxhYmVsIiwgIm1pbiIsICJtYXgiLCAicmVwbGFjZUNoaWxkIiwgImFkZENsYXNzIiwgInNwaW5vdGljZXByZXZpZXdlciIsICJsYXN0IiwgImdldFBhcmFtVmFsdWUiLCAiYmFkaWQiLCAiZ29vZGlkIiwgInByZXZpZXdlciIsICJyZWFzb24iLCAiZ2V0UmVwb3J0V2lraXRleHQiLCAiaW5wdXQiLCAiZ2V0SW5wdXREYXRhIiwgImJlZ2luUmVuZGVyIiwgImNvbW1lbnQiLCAiY2hlY2tUaXRsZSIsICJyZXZpZCIsICJwYWdlXyIsICJUaXRsZSIsICJuYW1lc3BhY2UiLCAicGFnZSIsICJwYWdlcyIsICJtYXAiLCAibyIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJnZXRQcmVmaXhlZFRleHQiLCAicmVwbGFjZSIsICJ0cmltIiwgInN0cmluZyIsICJhcHBlbmRQdW5jdHVhdGlvbiIsICJ0eXBlcyIsICJhcnZ0eXBlIiwgInRvTG93ZXJDYXNlRmlyc3RDaGFyIiwgImhhc1NoYXJlZCIsICJzcGxpY2UiLCAiaW5kZXhPZiIsICJjb25maXJtIiwgImpvaW4iLCAic2xpY2UiLCAiaGlkZW5hbWUiLCAidG9VcHBlckNhc2VGaXJzdENoYXIiLCAic29ja3B1cHBldHMiLCAiYXJyYXkiLCAidW5pcSIsICJzb2NrIiwgImluZGV4IiwgImNoZWNrdXNlciIsICJ2IiwgIl9pbnB1dCRnb29kaWQiLCAic3VtbWFyeSIsICJzZXRCdXR0b25zRW5hYmxlZCIsICJzdGF0dXMiLCAiaW5pdCIsICJhY3Rpb25Db21wbGV0ZWQiLCAicmVkaXJlY3QiLCAibm90aWNlIiwgImV3aXBQYWdlIiwgInNldEZvbGxvd1JlZGlyZWN0IiwgImdldFBhZ2VUZXh0IiwgIiRld2lwTGluayIsICJSZWdFeHAiLCAiZXNjYXBlUmVnRXhwIiwgImdldFN0YXR1c0VsZW1lbnQiLCAiZXJyb3IiLCAicHJpbnRVc2VyVGV4dCIsICJzZXRQYWdlU2VjdGlvbiIsICJzZXRFZGl0U3VtbWFyeSIsICJzZXRDaGFuZ2VUYWdzIiwgInNldEFwcGVuZFRleHQiLCAidWFhUGFnZSIsICIkdWFhTGluayIsICJyZXBvcnRwYWdlIiwgInNwaVBhZ2UiLCAic2V0V2F0Y2hsaXN0IiwgImFpdlBhZ2UiLCAiJGFpdkxpbmsiLCAidHdpbmtsZXdhcm5fZXhwb3J0cyIsICJpbml0X3R3aW5rbGV3YXJuIiwgInR3aW5rbGV3YXJuIiwgInJlbGV2YW50VXNlck5hbWUiLCAiJHZhbmRhbFRhbGtMaW5rIiwgIm1ha2VWYW5kYWxUYWxrTGluayIsICJwYWdlTmFtZU5vcm0iLCAiYWZUYWxrTGluayIsICJwYWdlX3ByZWZpeGVkdGl0bGUiLCAicGFnZW5hbWUiLCAid3JhcElubmVyIiwgImF0dHIiLCAiZXh0cmFQYXJhbSIsICJyYXd1cmxlbmNvZGUiLCAiZGlhbG9nIiwgIm1haW5fc2VsZWN0IiwgIm1haW5fZ3JvdXAiLCAiY2hhbmdlX2NhdGVnb3J5IiwgImRlZmF1bHRHcm91cCIsICJOdW1iZXIiLCAicGFyc2VJbnQiLCAic2VsZWN0ZWQiLCAiY2hhbmdlX3N1YmNhdGVnb3J5IiwgInNpemUiLCAicGxhY2Vob2xkZXIiLCAibW9yZSIsICJjYWxsYmFja3MiLCAidmFucmV2aWQiLCAidGl0bGVzIiwgInByb3AiLCAicnZzdGFydGlkIiwgInJ2bGltaXQiLCAicnZkaXIiLCAicnZwcm9wIiwgInJldmVydFVzZXIiLCAiZ2V0QXR0cmlidXRlIiwgImNoZWNrU3RhbGUiLCAidmFudGltZXN0YW1wXyIsICJyZXZEYXRlIiwgImRhdGUiLCAiaXNWYWxpZCIsICJhZGQiLCAiaXNCZWZvcmUiLCAiRGF0ZSIsICJ2YW50aW1lc3RhbXAiLCAicmV2aWRzIiwgIm1lc3NhZ2VzIiwgImxldmVscyIsICJsZXZlbDEiLCAibGV2ZWwyIiwgInNpbmdsZW5vdGljZSIsICJzaW5nbGV3YXJuIiwgInN1cHByZXNzQXJ0aWNsZUluU3VtbWFyeSIsICJwcmV2X2FydGljbGUiLCAicHJldl9yZWFzb24iLCAidGFsa3BhZ2VPYmoiLCAic3ViX2dyb3VwIiwgIm9sZF9zdWJ2YWx1ZSIsICJvbGRfc3VidmFsdWVfcmUiLCAiaGFzQ2hpbGROb2RlcyIsICJyZW1vdmVDaGlsZCIsICJmaXJzdENoaWxkIiwgImNyZWF0ZUVudHJpZXMiLCAiY29udGVudHMiLCAiY29udGFpbmVyIiwgIndyYXBJbk9wdGdyb3VwIiwgImxldmVsIiwgImNsaWVudCIsICJwcm9maWxlIiwgInBsYXRmb3JtIiwgIndyYXBwZXJPcHRncm91cCIsICJfaTIiLCAiX09iamVjdCRlbnRyaWVzIiwgIk9iamVjdCIsICJlbnRyaWVzIiwgIml0ZW1LZXkiLCAiaXRlbVByb3BlcnRpZXMiLCAia2V5IiwgInRlbXBsYXRlIiwgImVsZW0iLCAiZGF0YSIsICJlbGVtUmVuZGVyZWQiLCAidW5Tb3J0ZWRTaW5nbGV0cyIsICJzb3J0ZWRTaW5nbGV0TWVzc2FnZXMiLCAiX2l0ZXJhdG9yMyIsICJrZXlzIiwgInNvcnQiLCAiX3N0ZXAzIiwgIl9pMyIsICJfYXJyIiwgImx2bCIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJsZXZlbEdyb3VwIiwgIl9pdGVyYXRvcjUiLCAiX3N0ZXA1IiwgIm9wdGdyb3VwIiwgImF1dG9sZXZlbFByb2MiLCAid2lraXRleHQiLCAibGF0ZXN0IiwgImRhdGVQcm9jZXNzaW5nIiwgInBhcmFtcyIsICJhcnRpY2xlIiwgImF1dG9sZXZlbFBhcnNlV2lraXRleHQiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYiLCAicG9zdENhdGVnb3J5Q2xlYW51cCIsICJ1c2VydGFsa19wYWdlIiwgInBhZ2VvYmoiLCAiJG5vVGFsa1BhZ2VOb2RlIiwgImNsb3NlUHJldmlldyIsICJyZW1vdmUiLCAic2V0RWxlbWVudFRvb2x0aXBWaXNpYmlsaXR5IiwgInJlc2V0RWxlbWVudExhYmVsIiwgInNlbGVjdDIiLCAid2lkdGgiLCAibWF0Y2hlciIsICJtYXRjaGVycyIsICJvcHRncm91cEZ1bGwiLCAidGVtcGxhdGVSZXN1bHQiLCAiaGlnaGxpZ2h0U2VhcmNoTWF0Y2hlcyIsICJsYW5ndWFnZSIsICJzZWFyY2hpbmciLCAicXVlcnlJbnRlcmNlcHRvciIsICJjaGFuZ2UiLCAiYXV0b1N0YXJ0IiwgInRyaWdnZXIiLCAibm90TGlua2VkQXJ0aWNsZSIsICJub3RBcnRpY2xlIiwgIm92ZXJyaWRlRWxlbWVudExhYmVsIiwgImdldFdhcm5pbmdXaWtpdGV4dCIsICJ0ZW1wbGF0ZU5hbWUiLCAiaXNDdXN0b20iLCAibm9TaWduIiwgInNob3dQcmV2aWV3IiwgInRlbXBsYXRlbmFtZSIsICJsaW5rZWRhcnRpY2xlIiwgInRlbXBsYXRldGV4dCIsICJtZXNzYWdlRGF0YSIsICJoaXN0b3J5X3JlIiwgImhpc3RvcnkiLCAiY3VycmVudCIsICJleGVjIiwgImN1cnJlbnRfZGF0ZSIsICJpc0FmdGVyIiwgInN0YXRlbGVtIiwgIiRhdXRvbGV2ZWxNZXNzYWdlIiwgImlzTmFOIiwgImF1dG9UaW1lb3V0IiwgImdldFRpbWUiLCAiJGxpbmsiLCAiY2xvc2UiLCAic3RhdHVzTm9kZSIsICJpbnNlcnRBZnRlciIsICJtYWluIiwgImdldENhbGxiYWNrUGFyYW1ldGVycyIsICJ3YXJuaW5nSGlzdG9yeSIsICJub3ciLCAiZ2V0TG9hZFRpbWUiLCAidGVtcGxhdGVBbmRMZXZlbCIsICJjdXN0b21Qcm9jZXNzIiwgInNwbGl0IiwgInByZWZpeCIsICJzdWIiLCAid2FybmluZ1RleHQiLCAic2VjdGlvbkV4aXN0cyIsICJzZWN0aW9uTnVtYmVyIiwgInNlY3Rpb25zIiwgIm1hdGNoIiwgImRhdGVIZWFkZXJSZWdleCIsICJtb250aEhlYWRlclJlZ2V4IiwgInJldmVyc2UiLCAic29tZSIsICJzZWMiLCAiaWR4IiwgInNldE5ld1NlY3Rpb25UaXRsZSIsICJpbmZvIiwgIm1vbnRoSGVhZGVyIiwgInNldE5ld1NlY3Rpb25UZXh0IiwgIm5ld1NlY3Rpb24iLCAidXNlclRhbGtQYWdlIiwgImdldEZyYWdtZW50IiwgImFsZXJ0IiwgIiRzZWxlY3RlZEVsIiwgInlzYXJjaGl2ZXNfcGFnZSIsICJzZXRDYWxsYmFja1BhcmFtZXRlcnMiLCAidHdpbmtsZWJsb2NrX2V4cG9ydHMiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiaW5pdF90d2lua2xlYmxvY2siLCAicmVxdWlyZSIsICJ0d2lua2xlYmxvY2siLCAiaW5pdE13QXBpIiwgImJsb2NrZWRVc2VyTmFtZSIsICJtZW51Rm9ybWF0dGVkTmFtZXNwYWNlcyIsICJibG9ja0FjdGlvblRleHQiLCAicmVibG9jayIsICJ1bmJsb2NrIiwgImlwIiwgImlzUmFuZ2UiLCAidmFsaWRDSURSIiwgImN1cnJlbnRCbG9ja0luZm8iLCAiZmllbGRfYmxvY2tfb3B0aW9ucyIsICJmaWVsZF90ZW1wbGF0ZV9vcHRpb25zIiwgImFjdGlvbmZpZWxkIiwgImNoYW5nZV9hY3Rpb24iLCAiaGlkZGVuIiwgImNoZWNrZWQiLCAic2l4dHlGb3VyIiwgImdldDY0IiwgImJsb2NrNjRmaWVsZCIsICJjaGFuZ2VfYmxvY2s2NCIsICJmZXRjaFVzZXJJbmZvIiwgImlzUmVnaXN0ZXJlZCIsICIkZm9ybSIsICJzZXRFbGVtZW50VmlzaWJpbGl0eSIsICJwYXJlbnQiLCAidHJhbnNmb3JtQmxvY2tQcmVzZXRzIiwgImJsb2NrNjQiLCAiYWN0aW9udHlwZSIsICJmZXRjaGVkRGF0YSIsICJwcm9jZXNzVXNlckluZm8iLCAiZm4iLCAiYmxvY2tpbmZvIiwgInVzZXJpbmZvIiwgInVzZXJzIiwgInVzZXIiLCAidXNlcmlkIiwgInVzZXJJc0JvdCIsICJncm91cG1lbWJlcnNoaXBzIiwgImdyb3VwIiwgImRpc2FibGV0YWxrIiwgImFsbG93dXNlcnRhbGsiLCAiaGFyZGJsb2NrIiwgImFub25vbmx5IiwgImhhc0Jsb2NrTG9nIiwgImxvZ2V2ZW50cyIsICJibG9ja0xvZyIsICJibG9ja0xvZ0lkIiwgImxvZ2lkIiwgImxldHlwZSIsICJsZWxpbWl0IiwgImxldGl0bGUiLCAidXN1c2VycyIsICJ1c3Byb3AiLCAidGhlbiIsICJzYXZlRmllbGRzZXQiLCAiZmllbGRzZXQiLCAiX2l0ZXJhdG9yNyIsICJzZXJpYWxpemVBcnJheSIsICJfc3RlcDciLCAiZWwiLCAiJGJsb2NrNjQiLCAicHJpb3JOYW1lIiwgImlzIiwgIm9yaWdpbmFsSXNSYW5nZSIsICJyZWdlbmVyYXRlRm9ybSIsICJ0aXRsZUJhciIsICJuZXh0U2libGluZyIsICJub2RlVmFsdWUiLCAiZmllbGRfcHJlc2V0IiwgImZpZWxkX3RhZ19vcHRpb25zIiwgImZpZWxkX3VuYmxvY2tfb3B0aW9ucyIsICIkYmxvY2siLCAiYmxvY2tCb3giLCAiJHRlbXBsYXRlIiwgInRlbXBsYXRlQm94IiwgIiR0YWciLCAidGFnQm94IiwgIiRwcm90ZWN0IiwgIiRwYXJ0aWFsIiwgInBhcnRpYWxCb3giLCAiJHVuYmxvY2siLCAidW5ibG9ja0JveCIsICJibG9ja0dyb3VwIiwgImJsb2NrR3JvdXBzUGFydGlhbCIsICJibG9ja0dyb3VwcyIsICJwcmlvciIsICJibG9ja1ByZXNldHNJbmZvIiwgImJnIiwgImlzSW5maW5pdHkiLCAiZXhwaXJ5IiwgImZpbHRlciIsICJjaGFuZ2VfcHJlc2V0IiwgImZpbHRlcmVkX2Jsb2NrX2dyb3VwcyIsICJjaGFuZ2VfZXhwaXJ5IiwgInRlbXBsYXRlX2V4cGlyeSIsICJtdWx0aXBsZSIsICJfaTQiLCAiX09iamVjdCRlbnRyaWVzMiIsICJudW1iZXIiLCAiYmxvY2tvcHRpb25zIiwgIm5vY3JlYXRlIiwgIm5vZW1haWwiLCAiYXV0b2Jsb2NrIiwgIndhdGNodXNlciIsICJ0b2dnbGVfc2VlX2Fsc29zIiwgImNoYW5nZV90ZW1wbGF0ZSIsICJibG9ja19yZWFzb24iLCAiYmxhbmtfZHVyYXRpb24iLCAibm90YWxrIiwgIm5vZW1haWxfdGVtcGxhdGUiLCAibm9jcmVhdGVfdGVtcGxhdGUiLCAiJHByZXZpZXdsaW5rIiwgIm9mZiIsICJzdWJncm91cCIsICJvbGRmaWVsZCIsICJoaWRlIiwgInNob3ciLCAiZXJyb3JMb2FkaW5nIiwgIm1heGltdW1TZWxlY3Rpb25MZW5ndGgiLCAibWluaW11bUlucHV0TGVuZ3RoIiwgImFqYXgiLCAidXJsIiwgIndpa2lTY3JpcHQiLCAiZGF0YVR5cGUiLCAiZGVsYXkiLCAibmV3RnJvbVRleHQiLCAidGVybSIsICJhcGZyb20iLCAiYXBuYW1lc3BhY2UiLCAiYXBsaW1pdCIsICJwcm9jZXNzUmVzdWx0cyIsICJyZXN1bHRzIiwgImFsbHBhZ2VzIiwgInRvVGV4dCIsICJ0ZW1wbGF0ZVNlbGVjdGlvbiIsICJjaG9pY2UiLCAicmVsIiwgIndvcmRCZWdpbm5pbmciLCAic2FtZVVzZXIiLCAic3RhdHVzU3RyIiwgIiRyYW5nZWJsb2NrbG9nbGluayIsICJodG1sIiwgImNhbGVuZGFyIiwgImluZm9TdHIiLCAidXBkYXRlX2Zvcm0iLCAiYmxvY2tsb2dpbmZvIiwgIiRibG9ja2xvZ2xpbmsiLCAibGFzdEJsb2NrQWN0aW9uIiwgImJsb2NrQWN0aW9uIiwgInRpbWVzdGFtcCIsICJmb3JtYXRUaW1lIiwgImR1cmF0aW9uIiwgImZvclJlZ2lzdGVyZWRPbmx5IiwgInBhZ2VQYXJhbSIsICJyZWFzb25QYXJhbSIsICJub25zdGFuZGFyZCIsICJmb3JBbm9uT25seSIsICJzaWciLCAiY2hlY2t1c2VyYmxvY2siLCAiYmlvYmxvY2siLCAidWNibG9jayIsICJucGJsb2NrIiwgIl9pdGVyYXRvcjgiLCAiX3N0ZXA4IiwgIm5ld0tleSIsICJjdXN0b20iLCAiX2k1IiwgIl9PYmplY3QkZW50cmllczMiLCAicHJlc2V0IiwgInNldHRpbmdzIiwgImluZGVmaW5pdGUiLCAibWV0YSIsICJzaG93X3RlbXBsYXRlIiwgInRlbXBsYXRlcyIsICJibG9ja1ByZXNldCIsICJibG9ja1NldHRpbmdzIiwgInJlZ2lzdHJhdGlvblJlc3RyaWN0IiwgInNlZUFsc29zIiwgInNlZUFsc29NZXNzYWdlIiwgInVzZUluaXRpYWxPcHRpb25zIiwgInBhcnNlIiwgInRvR01UU3RyaW5nIiwgImV4cGlyeV9wcmVzZXQiLCAiZWFjaCIsICJfaSIsICJjaGVjayIsICJwcmVwZW5kUmVhc29uIiwgInBhZ2VyZXN0cmljdGlvbnMiLCAiJHBhZ2VTZWxlY3QiLCAiJG5hbWVzcGFjZVNlbGVjdCIsICJyZXN0cmljdGlvbnMiLCAicHIiLCAiX2l0ZXJhdG9yOSIsICJfc3RlcDkiLCAiZXNjYXBlU2VsZWN0b3IiLCAibmV3T3B0aW9uIiwgIk9wdGlvbiIsICJBcnJheSIsICJpc0FycmF5IiwgIm5hbWVzcGFjZXMiLCAicHJldl90ZW1wbGF0ZV9leHBpcnkiLCAiYXJlYSIsICJuYW1lc3BhY2VyZXN0cmljdGlvbnMiLCAidGVtcGxhdGVUZXh0IiwgImdldEJsb2NrTm90aWNlV2lraXRleHQiLCAiX3RlbXBsYXRlb3B0aW9ucyIsICJ0b0Jsb2NrIiwgInRvV2FybiIsICJ0b1BhcnRpYWwiLCAidG9UYWciLCAidG9Qcm90ZWN0IiwgInRvVW5ibG9jayIsICJ0ZW1wbGF0ZW9wdGlvbnMiLCAidW5ibG9ja29wdGlvbnMiLCAidG9DbG9zZXZpcCIsICJjbG9zZXZpcCIsICJjaGVja0luY29tcGF0aWJsZSIsICJjb25mbGljdHMiLCAiZXh0cmEiLCAiY291bnQiLCAicmVkdWNlIiwgInN1bSIsICJzcHBVc2VybmFtZSIsICJzdGF0dXNFbGVtZW50IiwgImxvZ0V4cGlyeSIsICJleHBpcnlEYXRlIiwgImdyb3Vwc0NhbkJlUmVtb3ZlZCIsICJncm91cHNUb0JlUmVtb3ZlZCIsICJncm91cHMiLCAidGFncyIsICJ0b2tlbiIsICJ0b2tlbnMiLCAibWJBcGkiLCAiaXNzdWVfdGVtcGxhdGUiLCAidmlwUGFnZSIsICJjbG9zZVJlcXVlc3QiLCAicmlnaHRTdGF0dXNFbGVtZW50IiwgInJldm9rZU9wdGlvbnMiLCAidXNlcnJpZ2h0c3Rva2VuIiwgIm1yQXBpIiwgInVzZXJQYWdlIiwgInRhZ3VzZXJwYWdlIiwgInVuYmxvY2tTdGF0dXNFbGVtZW50IiwgInVuYmxvY2tNYkFwaSIsICJfaXRlcmF0b3IxMCIsICJfc3RlcDEwIiwgInRhZ3RleHQiLCAic3BwVHlwZSIsICJzcHBFdmlkZW5jZSIsICJzcG1DaGVja2VkIiwgInNwbUV2aWRlbmNlIiwgInNldFBhZ2VUZXh0IiwgInNhdmUiLCAicHJvdGVjdHVzZXJwYWdlIiwgImV4aXN0cyIsICJzZXRFZGl0UHJvdGVjdGlvbiIsICJzZXRNb3ZlUHJvdGVjdGlvbiIsICJzZXRDcmVhdGVQcm90ZWN0aW9uIiwgInByb3RlY3QiLCAiZm9ybURhdGEiLCAidXNlcnRhbGtfc3VtbWFyeSIsICJ1c2VyTmFtZSIsICJleHBpcnlUZXh0IiwgInJlcXVlc3RMaXN0IiwgImZvdW5kIiwgInZpcFJlIiwgInBhZ2VOYW1lUmVnZXgiLCAiaSIsICJ0cmltRW5kIiwgIm5ld1RleHQiLCAibWFrZVNlbnRlbmNlIiwgInBvcCIsICJwIiwgIm5hbWVzcGFjZU5hbWVzIiwgImRhdGVIZWFkZXJSZWdleExhc3QiLCAiZGF0ZUhlYWRlclJlZ2V4UmVzdWx0IiwgImxhc3RIZWFkZXJJbmRleCIsICJsYXN0SW5kZXhPZiIsICJmcmllbmRseXRhbGtiYWNrX2V4cG9ydHMiLCAiaW5pdF9mcmllbmRseXRhbGtiYWNrIiwgImZyaWVuZGx5dGFsa2JhY2siLCAidGFsa2JhY2siLCAiY2hhbmdlVGFyZ2V0IiwgInRidGFyZ2V0IiwgImVscXVlcnkiLCAiZWxsaW1pdCIsICJ5c2FyY2hpdmVzX2FwaSIsICJvcHRvdXRTdGF0dXMiLCAib3B0b3V0IiwgIiRlbCIsICJnZXRYTUwiLCAicHJldl9wYWdlIiwgInByZXZfc2VjdGlvbiIsICJwcmV2X21lc3NhZ2UiLCAidmFsdWVzIiwgInNlY3Rpb24iLCAicmVxdWlyZWQiLCAibm90aWNlYm9hcmQiLCAiX2k2IiwgIl9PYmplY3QkZW50cmllczQiLCAibm90aWNlYm9hcmRzIiwgIm5ibmFtZSIsICJkZWZhdWx0U2VsZWN0ZWQiLCAiYWZmcCIsICJjb250ZW50IiwgImVkaXRTdW1tYXJ5IiwgInNibCIsICJzaGwiLCAiZ2V0Q2hlY2tlZCIsICJuYW1lc3BhY2VSZWdleCIsICJmdWxsVXNlclRhbGtQYWdlTmFtZSIsICJ1c2VyX3RhbGsiLCAiZ2V0Tm90aWNlV2lraXRleHQiLCAidGFsa3BhZ2UiLCAic2V0Q3JlYXRlT3B0aW9uIiwgInNldE1pbm9yRWRpdCIsICJub3RpY2V0ZXh0IiwgInNhZmVSZXBsYWNlIiwgInR3aW5rbGVzcGVlZHlfZXhwb3J0cyIsICJpbXBvcnRfZXh0X2dhZGdldDIiLCAiaW5pdF90d2lua2xlc3BlZWR5IiwgInR3aW5rbGVzcGVlZHkiLCAic3BlZWR5IiwgImluaXREaWFsb2ciLCAiZXZhbHVhdGVTeXNvcCIsICJldmFsdWF0ZVVzZXIiLCAiaGFzQ1NEIiwgIm1vZGUiLCAic3lzb3BTaW5nbGVTdWJtaXQiLCAic3lzb3BSYWRpb0NsaWNrIiwgInN5c29wTXVsdGlwbGVTdWJtaXQiLCAic3lzb3BNdWx0aXBsZVJhZGlvQ2xpY2siLCAidXNlck11bHRpcGxlU3VibWl0IiwgInVzZXJNdWx0aXBsZVJhZGlvQ2xpY2siLCAidXNlclNpbmdsZVN1Ym1pdCIsICJ1c2VyU2luZ2xlUmFkaW9DbGljayIsICJpc1N5c29wIiwgImhhc1N1Ym1pdEJ1dHRvbiIsICJpc011bHRpcGxlIiwgImNhbGxiYWNrZnVuYyIsICJjRm9ybSIsICJjQ2hlY2tlZCIsICJyZWRpcmVjdHMiLCAiZGVsbXVsdGlwbGUiLCAib3BlbnVzZXJ0YWxrIiwgInNhbHRpbmciLCAibW9kZUNoYW5nZWQiLCAic3RvcFByb3BhZ2F0aW9uIiwgImRlbGV0ZU9wdGlvbnMiLCAidGFnT3B0aW9ucyIsICJwcmlvckRlbGV0aW9uQ291bnQiLCAiZ2V0TW9kZSIsICJ0YWdfb25seSIsICJpc1N5c29wTW9kZSIsICJldmFsdWF0ZVR5cGUiLCAicmFkaW9PckNoZWNrYm94IiwgImdlbmVyYXRlQ3NkTGlzdCIsICJjdXN0b21SYXRpb25hbGUiLCAiYXJ0aWNsZUxpc3QiLCAidXNlckxpc3QiLCAidXNlcnRhbGtMaXN0IiwgImZpbGVMaXN0IiwgImNhdGVnb3J5TGlzdCIsICJkcmFmdExpc3QiLCAidGFsa0xpc3QiLCAiZ2VuZXJhbENyaXRlcmlhIiwgImdlbmVyYWxMaXN0IiwgImdlbmVyYXRlQXJyYXkiLCAicmVkaXJlY3RMaXN0IiwgImN1c3RvbU9wdGlvbiIsICJjbGljayIsICJkZWNvZGVVUklDb21wb25lbnQiLCAibGFiZWxzIiwgImVtcHR5IiwgImxlYWN0aW9uIiwgImxlcHJvcCIsICJyZXNwb25zZSIsICJkZWxDb3VudCIsICJjb250aW51ZSIsICJvcGVuU3ViZ3JvdXBIYW5kbGVyIiwgImNoaWxkcmVuIiwgImZvY3VzIiwgInN1Ym1pdFN1Ymdyb3VwSGFuZGxlciIsICJwcm90b3R5cGUiLCAiY2FsbCIsICJjcml0RWxlbWVudCIsICJjcml0ZXJpb24iLCAiaGlkZVdoZW5NdWx0aXBsZSIsICJoaWRlU3ViZ3JvdXBXaGVuTXVsdGlwbGUiLCAiaGlkZVdoZW5TaW5nbGUiLCAiaGlkZVN1Ymdyb3VwV2hlblNpbmdsZSIsICJoaWRlV2hlblN5c29wIiwgImhpZGVTdWJncm91cFdoZW5TeXNvcCIsICJoaWRlV2hlblVzZXIiLCAiaGlkZVN1Ymdyb3VwV2hlblVzZXIiLCAiaGlkZVdoZW5SZWRpcmVjdCIsICJzaG93SW5OYW1lc3BhY2VzIiwgImhpZGVJbk5hbWVzcGFjZXMiLCAib3JpZ2luYWxFdmVudCIsICJub3JtYWxpemVkQ3JpdGVyaW9uIiwgIm5vcm1hbGl6ZUhhc2giLCAiZzEiLCAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLCAiZzYiLCAiZzciLCAiZzgiLCAiZzkiLCAiYTEiLCAiYTIiLCAiYTMiLCAicjEiLCAicjIiLCAiZjEiLCAiZjIiLCAiZjMiLCAiZjQiLCAiZjUiLCAibzEiLCAibzIiLCAibzMiLCAiZ2V0VGVtcGxhdGVDb2RlQW5kUGFyYW1zIiwgImNvZGUiLCAicGFyYW1ldGVycyIsICJub3JtYWxpemVkcyIsICJ1dHBhcmFtcyIsICJfaXRlcmF0b3IxMSIsICJfc3RlcDExIiwgIm5vcm0iLCAidG9VcHBlckNhc2UiLCAidGVtcGxhdGVQYXJhbXMiLCAiaV8iLCAiZ2V0VXNlclRhbGtQYXJhbWV0ZXJzIiwgInBhcnNlV2lraXRleHQiLCAicHN0IiwgImNvbnRlbnRtb2RlbCIsICJzdGF0dXNJbmRpY2F0b3IiLCAiYXBpT2JqIiwgImNoaWxkTm9kZXMiLCAic3lzb3AiLCAicHJvbXB0IiwgImRlbGV0ZVBhZ2UiLCAiZGVsZXRlUmVhc29uIiwgInByb21wdEZvclN1bW1hcnkiLCAidGhpc3BhZ2UiLCAiZGVsZXRlTWFpbiIsICJ3YXRjaCIsICJkZWxldGVUYWxrIiwgIm9wZW5Vc2VyVGFsayIsICJsb29rdXBDcmVhdGlvbiIsICJvcGVuVXNlclRhbGtQYWdlIiwgImRlbGV0ZVRhbGtQYWdlIiwgIm5vcm1hbGl6ZWQiLCAiY2xhc3NMaXN0IiwgImNvbnRhaW5zIiwgInNldFRpbWVvdXQiLCAiZGVsZXRlUmVkaXJlY3RzIiwgInJkbGltaXQiLCAiZGVsZXRlUmVkaXJlY3RzTWFpbiIsICIkYmlndGV4dCIsICJzZXQiLCAidW5saW5rIiwgImdldENyZWF0b3IiLCAidmFuYXJ0aWNsZSIsICJvcGVuIiwgInhtbERvYyIsICIkc25hcHNob3QiLCAidG90YWwiLCAib25zdWNjZXNzIiwgImFwaW9iaklubmVyIiwgInVwZGF0ZSIsICJyZW1vdmVDaGVja3BvaW50IiwgImFkZENoZWNrcG9pbnQiLCAiX2tleSIsICJ0ZXh0Tm9TZCIsICJjb3B5dmlvIiwgInhmZCIsICJidWlsZERhdGEiLCAicGF0cm9sIiwgInJlcXVlc3RzYWx0IiwgImVkaXRzdW1tYXJ5IiwgIl9pdGVyYXRvcjEyIiwgIl9zdGVwMTIiLCAiTWF0aCIsICJibGFuayIsICJpbnNlcnRBZnRlclRlbXBsYXRlcyIsICJnZXRUZXh0IiwgInRhZ0NvbXBsZXRlIiwgInVzZXJ0YWxrIiwgInBhZ2VPYmoiLCAiaW5pdGlhbENvbnRyaWIiLCAidGFsa1BhZ2VOYW1lIiwgInVzZXJ0YWxrcGFnZSIsICJub3RpZnl0ZXh0IiwgImxvZ25vbWluYXRpb24iLCAiYWRkVG9Mb2ciLCAidXNsIiwgInVzZXJzcGFjZUxvZ2dlciIsICJpbml0aWFsVGV4dCIsICJhcHBlbmRUZXh0IiwgImZyb21ESSIsICJfaXRlcmF0b3IxMyIsICJfc3RlcDEzIiwgImxvZyIsICJnZXRQYXJhbWV0ZXJzIiwgIl9pdGVyYXRvcjE0IiwgIl9zdGVwMTQiLCAiY3VycmVudFBhcmFtcyIsICJyZWRpbWFnZSIsICJkYnJhdGlvbmFsZSIsICJvdGhlcnBhZ2UiLCAiZmlsZW5hbWUiLCAicmVkaXJ0eXBlIiwgInJlc29sdmVDc2RWYWx1ZXMiLCAiX2UkdGFyZ2V0JGZvcm0iLCAiX2UkdGFyZ2V0JGZvcm0yIiwgIndhdGNoUGFnZSIsICJfaXRlcmF0b3IxNSIsICJfc3RlcDE1IiwgIl9lJHRhcmdldCRmb3JtMyIsICJfaXRlcmF0b3IxNiIsICJfc3RlcDE2IiwgIl9pNyIsICJfbm9ybWFsaXplZHMiLCAibm90aWZ5dXNlciIsICJfaXRlcmF0b3IxNyIsICJfc3RlcDE3IiwgImNzZGxvZyIsICJfaXRlcmF0b3IxOCIsICJfc3RlcDE4IiwgInR3aW5rbGVjb3B5dmlvX2V4cG9ydHMiLCAiaW5pdF90d2lua2xlY29weXZpbyIsICJ0d2lua2xlY29weXZpbyIsICJpc1BhZ2VSZWRpcmVjdCIsICJ0cnlUYWdnaW5nIiwgInRhZ2dpbmdBcnRpY2xlIiwgImxvZ3BhZ2UiLCAiY29weXZpb0xpc3QiLCAicmV2aXNpb25JZCIsICJzb3VyY2UiLCAib2xkY3NkIiwgInNwZWVkeVRhZyIsICJnNF9wYWdlbmFtZSIsICJvdXRwdXQiLCAiZ2V0VVRDTW9udGgiLCAiZ2V0VVRDRGF0ZSIsICJ0d2lua2xleGZkX2V4cG9ydHMiLCAiaW5pdF90d2lua2xleGZkIiwgInR3aW5rbGV4ZmQiLCAiY3VycmVudFJhdGlvbmFsZSIsICJwcmludFJhdGlvbmFsZSIsICJvbGRyZWFzb250ZXh0Ym94IiwgIm9sZHJlYXNvbiIsICJhcHBlbmRSZWFzb25Cb3giLCAieGZkX2NhdCIsICJhZmRfY2F0ZWdvcnkiLCAiY2hhbmdlX2FmZF9jYXRlZ29yeSIsICJhZmRfY2F0IiwgImxvY2FsU3RvcmFnZSIsICJUd2lua2xlX2FmZENhdGVnb3J5IiwgInhmZGNhdCIsICJtZXJnZWludG8iLCAicGFyZW50RWxlbWVudCIsICJyZW1vdmVBdHRyaWJ1dGUiLCAiZndkY3NkcmVhc29uIiwgInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCAiaW5uZXJIVE1MIiwgInhmZHJlYXNvbiIsICJhZmQiLCAidGFnZ2luZ19wYWdlIiwgImRpc2N1c3Npb25fcGFnZSIsICJ0b2RheXNMaXN0IiwgImNyZWF0b3IiLCAiZm9ybWF0UmVhc29uVGV4dCIsICJub2luY2x1ZGUiLCAidGV4dE5vTm90TWFuZGFyaW4iLCAidGV4dE5vQWZjIiwgInRvIiwgImNvbW1lbnRUZXh0IiwgInNhZmVzdWJzdCIsICJmYW1lIiwgInN1YnN0dWIiLCAiYmF0Y2giLCAidGFyZ2V0X3BhZ2UiLCAiZmZkIiwgInRhZ2dpbmdJbWFnZSIsICJ4ZmRDYXROYW1lIiwgIndpa2lVcmxlbmNvZGUiLCAiZm9ybWF0UmVhc29uRm9yTG9nIiwgIm9uRXJyb3IiLCAic2V0TG9va3VwTm9uUmVkaXJlY3RDcmVhdG9yIiwgInR3aW5rbGVpbWFnZV9leHBvcnRzIiwgImluaXRfdHdpbmtsZWltYWdlIiwgInR3aW5rbGVpbWFnZSIsICJpbWFnZSIsICJmaWVsZCIsICJfaXRlcmF0b3IxOSIsICJfc3RlcDE5IiwgInR5cGVfIiwgImNzZGNyaXQiLCAiRXJyb3IiLCAidG9Mb3dlckNhc2UiLCAiZjFfc291cmNlIiwgImY0X3R5cGUiLCAidXNlck5vdGlmaWNhdGlvbiIsICJub3RlRGF0YSIsICJpbWFnZUxpc3QiLCAidHdpbmtsZXByb3RlY3RfZXhwb3J0cyIsICJpbXBvcnRfZXh0X2dhZGdldDMiLCAiaW5pdF90d2lua2xlcHJvdGVjdCIsICJ0d2lua2xlcHJvdGVjdCIsICJjaGFuZ2VBY3Rpb24iLCAiZmV0Y2hQcm90ZWN0aW9uTGV2ZWwiLCAiaXNUZW1wbGF0ZSIsICJjdXJyZW50UHJvdGVjdGlvbkxldmVscyIsICJwcmV2aW91c1Byb3RlY3Rpb25MZXZlbHMiLCAiX2FzeW5jVG9HZW5lcmF0b3IiLCAiaW5kZXhwYWdlaWRzIiwgImlucHJvcCIsICJwcm90ZWN0RGF0YSIsICJwYWdlaWQiLCAicGFnZWlkcyIsICJwcmV2aW91cyIsICJ3YXRjaGVkIiwgIndhdGNobGlzdGV4cGlyeSIsICJfaXRlcmF0b3IyMCIsICJwcm90ZWN0aW9uIiwgIl9zdGVwMjAiLCAiY2FzY2FkZSIsICJwcmV2aW91c1Byb3RlY3Rpb25Mb2ciLCAiX2l0ZXJhdG9yMjEiLCAiZGV0YWlscyIsICJfc3RlcDIxIiwgImhhc1Byb3RlY3RMb2ciLCAic2hvd0xvZ0FuZEN1cnJlbnRQcm90ZWN0SW5mbyIsICJjdXJyZW50bHlQcm90ZWN0ZWQiLCAiaGFzU3RhYmxlTG9nIiwgIiRsaW5rTWFya3VwIiwgImZvcm1hdFByb3RlY3Rpb25EZXNjcmlwdGlvbiIsICJwcm90ZWN0aW9uTm9kZSIsICJzdGF0dXNMZXZlbCIsICJmaWVsZDEiLCAiZmllbGQyIiwgImNoYW5nZVByZXNldCIsICJwcm90ZWN0aW9uVHlwZXNBZG1pbiIsICJwcm90ZWN0aW9uVHlwZXNDcmVhdGUiLCAiZm9ybWV2ZW50cyIsICJlZGl0bW9kaWZ5IiwgImVkaXRsZXZlbCIsICJwcm90ZWN0aW9uTGV2ZWxzIiwgImRvQ3VzdG9tRXhwaXJ5IiwgImNsb3Nlc3QiLCAic2VsZWN0ZWRJbmRleCIsICJwcm90ZWN0aW9uTGVuZ3RocyIsICJtb3ZlbW9kaWZ5IiwgIm1vdmVsZXZlbCIsICJjcmVhdGVsZXZlbCIsICJwcm90ZWN0aW9uVGFncyIsICJ0YWd0eXBlIiwgInByb3RlY3Rpb25UeXBlcyIsICJtYXJnaW5SaWdodCIsICJlZGl0ZXhwaXJ5IiwgImNvbG9yIiwgIm1vdmVleHBpcnkiLCAiY3JlYXRlZXhwaXJ5IiwgInNtYWxsIiwgInNob3dleHBpcnkiLCAib3B0aW9uIiwgInByb3RlY3Rpb25UeXBlc0NyZWF0ZU9ubHkiLCAicHJvdGVjdGlvblByZXNldHNJbmZvIiwgImVkaXQiLCAibW92ZSIsICJ1bnByb3RlY3QiLCAiY3JlYXRlIiwgImFjdGlvbnR5cGVzIiwgIl9pdGVyYXRvcjIyIiwgIl9zdGVwMjIiLCAiYWN0aW9uX3R5cGVfdmFsdWUiLCAicmVhc29uRmllbGQiLCAicHJvdGVjdFJlYXNvbiIsICJfaXRlbSR0ZW1wbGF0ZSIsICJ0YWdwYXJhbXMiLCAiY2xvc2VwYXJhbXMiLCAic3RhdHVzSW5pdGVkIiwgImFsbERvbmUiLCAidGFnZ2luZ1BhZ2VJbml0aWFsIiwgInJwcFBhZ2UiLCAicHJvdGVjdEl0IiwgImZvbGxvd1JlZGlyZWN0IiwgInR5cGVuYW1lIiwgInR5cGVyZWFzb24iLCAicnBwcGFyYW1zIiwgInJwcE5hbWUiLCAiZmlsZVJlcXVlc3QiLCAicGFnZU5hbWUiLCAicHJvdGVjdGVkUGFnZSIsICJ0YWdnaW5nUGFnZSIsICJnZXRUYWdnZWRQYWdlIiwgIm9sZHRhZ19yZSIsICJyZV9yZXN1bHQiLCAibmV3VmVyc2lvbiIsICJzdXBwcmVzc1Byb3RlY3RXYXJuaW5nIiwgInJwcFJlIiwgInJwcExpbmsiLCAiZ2V0UGFnZU5hbWUiLCAibmV3dGFnIiwgIlN0cmluZyIsICJyYXciLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAid29yZHMiLCAicmVnIiwgIm9yaWdpbmFsVGV4dExlbmd0aCIsICJsaW5rbm9kZSIsICJ3YXRjaFByZWYiLCAib3B0aW9ucyIsICJ3YXRjaF9xdWVyeSIsICJsaW5rbm9kZTIiLCAic2VjdGlvblRleHQiLCAiX2k4IiwgIl9PYmplY3QkZW50cmllczUiLCAiZnJpZW5kbHl0YWdfZXhwb3J0cyIsICJpbml0X2ZyaWVuZGx5dGFnIiwgImZyaWVuZGx5dGFnIiwgIm1vZGVFbiIsICJjYW5SZW1vdmUiLCAiY2hlY2tlZFRhZ3MiLCAiJGFsbENoZWNrYm94RGl2cyIsICJsYWJlbF9lbGVtZW50IiwgIiRhbGxIZWFkZXJzIiwgInNlYXJjaFN0cmluZyIsICJzZWFyY2hSZWdleCIsICJfaW5kZXgiLCAibGFiZWxfdGV4dCIsICJzZWFyY2hIaXQiLCAicmFuZ2UiLCAiY3JlYXRlUmFuZ2UiLCAidGV4dG5vZGUiLCAic2VsZWN0Tm9kZUNvbnRlbnRzIiwgInNldFN0YXJ0IiwgInNldEVuZCIsICJ1bmRlcmxpbmVfc3BhbiIsICJzdXJyb3VuZENvbnRlbnRzIiwgImZsYXRPYmplY3QiLCAiX2l0ZXJhdG9yMjMiLCAidGFnTGlzdCIsICJfc3RlcDIzIiwgIl9pdGVyYXRvcjI0IiwgIl9zdGVwMjQiLCAiX2l0ZXJhdG9yMjUiLCAiX3N0ZXAyNSIsICJkZXNjcmlwdGlvbiIsICJleGNsdWRlTUkiLCAidXBkYXRlU29ydE9yZGVyIiwgImRpdkVsZW1lbnQiLCAiX2l0ZXJhdG9yMjYiLCAiX3N0ZXAyNiIsICJidWlsZEZpbGVuYW1lIiwgIl9pdGVyYXRvcjI3IiwgIl9zdGVwMjciLCAiX2l0ZXJhdG9yMjgiLCAiX3N0ZXAyOCIsICJxdWVyeVNlbGVjdG9yQWxsIiwgInF1aWNrZmlsdGVyIiwgImF1dG9jb21wbGV0ZSIsICJhZGRFdmVudExpc3RlbmVyIiwgImFscmVhZHlQcmVzZW50VGFncyIsICJ0YWdOYW1lIiwgImJveFRhZyIsICJmb250U2l6ZSIsICJudW1BZGRlZCIsICJudW1SZW1vdmVkIiwgImFmdGVyIiwgInNvcnRvcmRlciIsICJfaXRlcmF0b3IyOSIsICJfc3RlcDI5IiwgImdlbmVyYXRlTGlua3MiLCAibWFrZUNoZWNrYm94IiwgIm90aGVyVGFnTmFtZSIsICJtYWtlQ2hlY2tib3hlc0ZvckFscmVhZHlQcmVzZW50VGFncyIsICJzdWJkaXYiLCAiY2hlY2tib3hlcyIsICJ1bkNoZWNrZWRUYWdzIiwgImdldFVuY2hlY2tlZCIsICJfaXRlcmF0b3IzMCIsICJfc3RlcDMwIiwgImRvQ2F0ZWdvcnlDaGVja2JveGVzIiwgIl9pdGVyYXRvcjMxIiwgIl9zdGVwMzEiLCAiX2l0ZXJhdG9yMzIiLCAiX3N0ZXAzMiIsICJfaXRlcmF0b3IzMyIsICJfc3RlcDMzIiwgIl9Ud2lua2xlJHRhZyRhcnRpY2xlIiwgImFscGhhYmV0aWNhbExpc3QiLCAiX2l0ZXJhdG9yMzQiLCAiX3N0ZXAzNCIsICIkd29ya2FyZWEiLCAicmVuZGVyZWQiLCAiX2l0ZXJhdG9yMzUiLCAiX3N0ZXAzNSIsICJfaXRlcmF0b3IzNiIsICJfc3RlcDM2IiwgImZpcnN0UGFydCIsICJzZWNvbmRQYXJ0IiwgInRhZ25hbWUiLCAicGFnZVRleHQiLCAicG9zdFJlbW92YWwiLCAidGFnc1RvUmVtb3ZlIiwgIm1ha2VUZW1wbGF0ZUxpbmsiLCAic3VtbWFyeVRleHQiLCAiYWRkZWRUYWdzIiwgInJlbW92ZWRUYWdzIiwgIm1lcmdlUmVhc29uIiwgImRpc2N1c3NBcnRpY2xlIiwgIm5vbkRpc2N1c3NBcnRpY2xlIiwgIm1lcmdlVGFnT3RoZXIiLCAibWVyZ2VUYWciLCAibmV3UGFyYW1zIiwgInRhZ3NUb1JlbWFpbiIsICJtZXJnZVRhcmdldCIsICJ0YWxrRGlzY3Vzc2lvblRpdGxlIiwgInRhbGtEaXNjdXNzaW9uVGl0bGVMaW5rZWQiLCAibW92ZVJlYXNvbiIsICJtb3ZlVGFsa3BhZ2VUZXh0IiwgIm1vdmVUYXJnZXQiLCAibW92ZVRhbGtwYWdlIiwgInJlbW92ZVRhZ3MiLCAiZ2V0UmVkaXJlY3RzRm9yIiwgIl9pdGVyYXRvcjM3IiwgIl9zdGVwMzciLCAidGFnX3JlIiwgImxobmFtZXNwYWNlIiwgImxoc2hvdyIsICJsaGxpbWl0IiwgInJlc3BvbnNlWE1MIiwgIl9pZHgiLCAicmVtb3ZlZCIsICJ0YWdSZSIsICJ0YWdUZXh0IiwgImdyb3VwYWJsZVRhZ3MiLCAiZ3JvdXBhYmxlRXhpc3RpbmdUYWdzIiwgImFkZFRhZyIsICJjdXJyZW50VGFnIiwgImV4cGVydCIsICJleHBlcnQyIiwgImV4cGVydDMiLCAibWlzc2luZ0luZm9ybWF0aW9uIiwgIm5vdGFiaWxpdHkiLCAidGFyZ2V0MSIsICJ0YXJnZXQyIiwgInRhcmdldDMiLCAiY2xlYW51cFJlYXNvbiIsICJhZGRVbmdyb3VwZWRUYWdzIiwgIl9pOSIsICJfdGFncyIsICJ0ZW1wbGF0ZXNBZnRlciIsICJfaXRlcmF0b3IzOCIsICJfc3RlcDM4IiwgIm5vdGFiaWxpdHlMaXN0IiwgIl9pdGVyYXRvcjM5IiwgIl9zdGVwMzkiLCAibWlUZXN0IiwgIl9pdGVyYXRvcjQwIiwgIl9zdGVwNDAiLCAibWlSZWdleCIsICJhZGROZXdUYWdzVG9NSSIsICJfaXRlcmF0b3I0MSIsICJfc3RlcDQxIiwgIl9pdGVyYXRvcjQyIiwgIl9zdGVwNDIiLCAidGFnSW5kZXgiLCAiYWx0TGFuZ0Zyb20iLCAicmVxQXJ0aWNsZUxhbmciLCAicmVxQXJ0aWNsZVRpdGxlIiwgIl9pMTAiLCAiX3RhZ3MyIiwgIm9sZFRhZ3MiLCAicGFnZVRhZ3MiLCAib2xkUGFnZVRhZ3MiLCAiX2l0ZXJhdG9yNDMiLCAiX3N0ZXA0MyIsICJwYWdlVGFnIiwgInBhZ2VSZSIsICJmaWxlIiwgIl9pdGVyYXRvcjQ0IiwgIl9zdGVwNDQiLCAibm93Y29tbW9uc05hbWUiLCAia2VlcGxvY2FsTmFtZSIsICJrZWVwbG9jYWxSZWFzb24iLCAicmVuYW1lbWVkaWFOZXduYW1lIiwgInJlbmFtZW1lZGlhUmVhc29uIiwgIkRvTm90TW92ZVRvQ29tbW9uc19yZWFzb24iLCAiY2hlY2tQYXJhbWV0ZXIiLCAicGFyYW1ldGVyIiwgImV4aXN0aW5nVGFncyIsICJ0d2lua2xlc3R1Yl9leHBvcnRzIiwgImltcG9ydF9leHRfZ2FkZ2V0NCIsICJpbml0X3R3aW5rbGVzdHViIiwgInR3aW5rbGVzdHViIiwgInN0dWIiLCAiX1R3aW5rbGUkc3R1YiIsICJfVHdpbmtsZSRzdHViJGNoZWNrZWQiLCAiY3VzdG9tY2hlY2tib3hlcyIsICJfaXRlcmF0b3I0NSIsICJfc3RlcDQ1IiwgIl9pdGVyYXRvcjQ2IiwgIl9zdGVwNDYiLCAiX2kxMSIsICJfT2JqZWN0JGVudHJpZXM2IiwgInRhZ0NhdGVnb3JpZXMiLCAidGl0bGVOYW1lIiwgInRhZ0NhdGVnb3JpZXNIZWFkZXIiLCAiX2kxMiIsICJfT2JqZWN0JGVudHJpZXM3IiwgInN1YnRpdGxlIiwgInN1YmNvbnRlbnQiLCAiX2kxMyIsICJfT2JqZWN0JGVudHJpZXM4IiwgIl9pdGVyYXRvcjQ3IiwgIl9zdGVwNDciLCAiZ2VuZXJhbCIsICJnZW8iLCAib3RoZXJzIiwgImJpbyIsICJzY2llbmNlIiwgInNwb3J0IiwgInRlY2giLCAiYXJ0IiwgInRvdGFsVGFncyIsICJfaTE0IiwgIl90YWdzMyIsICJwYXRyb2xQYWdlIiwgInR3aW5rbGVkaWZmX2V4cG9ydHMiLCAiaW5pdF90d2lua2xlZGlmZiIsICJ0d2lua2xlZGlmZiIsICJkaWZmIiwgIm9sZGlkIiwgIm1lIiwgIm5vZGUiLCAicnZ1c2VyIiwgImxvY2F0aW9uIiwgInR3aW5rbGV1bmxpbmtfZXhwb3J0cyIsICJpbml0X3R3aW5rbGV1bmxpbmsiLCAidHdpbmtsZXVubGluayIsICJwcmVzZXRSZWFzb24iLCAiZmlsZVNwYWNlIiwgImxpbmtUZXh0QmVmb3JlIiwgImxpbmtUZXh0QWZ0ZXIiLCAibGlua1BsYWluQmVmb3JlIiwgImxpbmtUZW1wbGF0ZUJlZm9yZSIsICJsaW5rUGxhaW5BZnRlciIsICJfaTE1IiwgIl9hcnIyIiwgImZvbnRGYW1pbHkiLCAiZm9udFN0eWxlIiwgImJsdGl0bGUiLCAiYmxsaW1pdCIsICJibG5hbWVzcGFjZSIsICJyYXdjb250aW51ZSIsICJpdXRpdGxlIiwgIml1bGltaXQiLCAiaXVuYW1lc3BhY2UiLCAiYmxmaWx0ZXJyZWRpciIsICJiYWNrbGlua3MiLCAicGFkZGluZyIsICJpbWFnZXVzYWdlIiwgInVubGlua2VyIiwgImJhdGNoT3BlcmF0aW9uIiwgInNldE9wdGlvbiIsICJzZXRQYWdlTGlzdCIsICJydW4iLCAic2V0Qm90RWRpdCIsICJkb0JhY2tsaW5rcyIsICJkb0ltYWdldXNhZ2UiLCAidW5saW5rQmFja2xpbmtzIiwgImhhdmVjb250ZW50IiwgIl9pdGVyYXRvcjQ4IiwgIl9zdGVwNDgiLCAiY29udmVydE51bWJlciIsICJzaGlmdENsaWNrU3VwcG9ydCIsICJfaXRlcmF0b3I0OSIsICJfc3RlcDQ5IiwgIl9pdGVyYXRvcjUwIiwgIl9zdGVwNTAiLCAiX2l0ZXJhdG9yNTEiLCAiX3N0ZXA1MSIsICJvbGR0ZXh0IiwgIndhcm5pbmdTdHJpbmciLCAiY29tbWVudE91dEltYWdlIiwgInJlbW92ZUxpbmsiLCAicmVtb3ZlVGVtcGxhdGUiLCAid29ya2VyRmFpbHVyZSIsICJ3b3JrZXJTdWNjZXNzIiwgInR3aW5rbGVmbHVmZl9leHBvcnRzIiwgImluaXRfdHdpbmtsZWZsdWZmIiwgInR3aW5rbGVmbHVmZiIsICJmbHVmZiIsICJob29rIiwgImFkZExpbmtzIiwgInNraXBUYWxrIiwgImNvbnRyaWJ1dGlvbnMiLCAicmVjZW50Y2hhbmdlcyIsICJ0cnVzdGVkQm90cyIsICJoaWRkZW5OYW1lIiwgImxpbmtCdWlsZGVyIiwgInNwYW5UYWciLCAiYnVpbGRMaW5rIiwgInJvbGxiYWNrTGlua3MiLCAidmFuZGFsIiwgImlubGluZSIsICJyZXYiLCAicmV2Tm9kZSIsICJub3JtTm9kZSIsICJ2YW5kTm9kZSIsICJub3JtTGluayIsICJ2YW5kTGluayIsICJyZXZlcnQiLCAiZGlzYWJsZUxpbmtzIiwgInNlcGFyYXRvciIsICJyZXN0b3JlVGhpc1JldmlzaW9uTGluayIsICJyZXZpc2lvblJlZiIsICJyZXZlcnRUb1JldmlzaW9uTm9kZSIsICJmb250V2VpZ2h0IiwgInJldmVydFRvUmV2aXNpb25MaW5rIiwgInJldmVydFRvUmV2aXNpb24iLCAiJGxpc3QiLCAiZGF0YXNldCIsICJtd1JldmlkIiwgIm5vdCIsICJ0YXJnZXRQYWdlIiwgImhpc3RMaXN0IiwgInRvQXJyYXkiLCAic2hpZnQiLCAiX2l0ZXJhdG9yNTIiLCAiX3N0ZXA1MiIsICJfaXRlcmF0b3I1MyIsICJfc3RlcDUzIiwgIndhcm5Gcm9tVGFsayIsICJ4dGl0bGUiLCAidGFsa0xpbmsiLCAiZXh0cmFQYXJhbXMiLCAib2xkVGl0bGUiLCAicmV2ZXJ0c3VtbWFyeSIsICJfIiwgIm5ld1RpdGxlIiwgIm50aXRsZSIsICJpc0lQdjZBZGRyZXNzIiwgInNhbml0aXplSVB2NiIsICJnZXRFbGVtZW50c0J5TmFtZSIsICJub3RpZnlTdGF0dXMiLCAiYXV0b0hpZGUiLCAidXNlckhpZGRlbiIsICJpbnRlc3RhY3Rpb25zIiwgImN1cnRpbWVzdGFtcCIsICJvbGRyZXYiLCAidG9SZXZpc2lvbiIsICJsYXN0cmV2aWQiLCAidG91Y2hlZCIsICJsb2FkdGltZXN0YW1wIiwgImNzcmZ0b2tlbiIsICJyZXZlcnRUb1JldklEIiwgInJldmVydFRvVXNlciIsICJyZXZlcnRUb1VzZXJIaWRkZW4iLCAib3B0aW9uYWxfc3VtbWFyeSIsICJmb3JtYXRTdW1tYXJ5IiwgInVuZG8iLCAidW5kb2FmdGVyIiwgImJhc2V0aW1lc3RhbXAiLCAic3RhcnR0aW1lc3RhbXAiLCAibWlub3IiLCAiYm90IiwgIndhdGNoT3JFeHBpcnkiLCAid2F0Y2hsaXN0IiwgImNvbXBsZXRlIiwgInJldnMiLCAibGFzdHVzZXIiLCAidXNlck5vcm0iLCAiY29udCIsICJnb29kX3JldmlzaW9uIiwgInVzZXJIYXNBbHJlYWR5Q29uZmlybWVkQWN0aW9uIiwgImdvb2R1c2VyIiwgImdvb2R1c2VySGlkZGVuIiwgImV4dHJhX3N1bW1hcnkiLCAibm90aWZ5VXNlciIsICJ4bWwiLCAiJGVkaXQiLCAid2luZG93UXVlcnkiLCAidmFuYXJ0aWNsZXJldmlkIiwgInZhbmFydGljbGVnb29kcmV2aWQiLCAiYnVpbHRJblN0cmluZyIsICJjdXN0b21TdHJpbmciLCAicmVzdWx0TGVuIiwgInVuZXNjYXBlIiwgImVuY29kZVVSSUNvbXBvbmVudCIsICJjb250cmlic0xpbmsiLCAiY29udHJpYnNMZW4iLCAidHdpbmtsZWJhdGNoZGVsZXRlX2V4cG9ydHMiLCAiaW5pdF90d2lua2xlYmF0Y2hkZWxldGUiLCAidHdpbmtsZWJhdGNoZGVsZXRlIiwgImJhdGNoZGVsZXRlIiwgInVubGlua0NhY2hlIiwgInN1YnBhZ2VzTG9hZGVkIiwgInRvZ2dsZVN1YnBhZ2VzIiwgImRlbGV0ZXJlYXNvbmxpc3QiLCAiY2hhbmdlX2NvbW1vbl9yZWFzb24iLCAiZ2VuZXJhdG9yIiwgImdjbXRpdGxlIiwgImdjbWxpbWl0IiwgImdhcGxpbWl0IiwgImdhcG5hbWVzcGFjZSIsICJnYXBwcmVmaXgiLCAicGF0aFNwbGl0IiwgInBhdGhuYW1lIiwgInRpdGxlU3BsaXQiLCAiZ3FwcGFnZSIsICJncXBsaW1pdCIsICJncGxsaW1pdCIsICJzdGF0dXNkaXYiLCAiJHBhZ2VzIiwgIiRwYWdlIiwgImlzUmVkaXIiLCAiJGVkaXRwcm90IiwgImlzUHJvdGVjdGVkIiwgIm1ldGFkYXRhIiwgImZvcm1fIiwgIl9pdGVyYXRvcjU0IiwgIl9zdGVwNTQiLCAiZ2VuZXJhdGVBcnJvd0xpbmtzIiwgIm5leHRFbGVtZW50U2libGluZyIsICJnZW5lcmF0ZU5ld1BhZ2VMaXN0IiwgImVsZW1lbnRzIiwgIk5vZGVMaXN0IiwgIl9pdGVyYXRvcjU1IiwgIl9zdGVwNTUiLCAiSFRNTElucHV0RWxlbWVudCIsICJuZXdQYWdlTGlzdCIsICJkZWxldGVfc3VicGFnZV9yZWRpcmVjdHMiLCAiZGVsZXRlX3JlZGlyZWN0cyIsICJkZWxldGVfc3VicGFnZV90YWxrcyIsICJkZWxldGVfdGFsayIsICJ1bmxpbmtfc3VicGFnZXMiLCAidW5saW5rX3BhZ2UiLCAiX2l0ZXJhdG9yNTYiLCAiX3N0ZXA1NiIsICJzdWJncm91cF8iLCAicmVwbGFjZVdpdGgiLCAiX2l0ZXJhdG9yNTciLCAiX3N0ZXA1NyIsICJfaXRlcmF0b3I1OCIsICJfc3RlcDU4IiwgImxvYWRpbmdUZXh0IiwgInN1YnBhZ2VMaXN0ZXIiLCAicGFnZVRpdGxlIiwgInBhZ2VOYW1lRnVsbCIsICJzdWJwYWdlTGlzdCIsICJwYWdlTmFtZV8iLCAiX2l0ZXJhdG9yNTkiLCAiX3N0ZXA1OSIsICJfaXRlcmF0b3I2MCIsICJfc3RlcDYwIiwgIl9pdGVyYXRvcjYxIiwgIl9zdGVwNjEiLCAiX2l0ZXJhdG9yNjIiLCAiX3N0ZXA2MiIsICJudW1Qcm90ZWN0ZWQiLCAic3VicGFnZXMiLCAiZGVsZXRlX3BhZ2UiLCAiZGVsZXRlX3N1YnBhZ2VzIiwgInVubGlua19maWxlIiwgInBhZ2VEZWxldGVyIiwgImRvRXh0cmFzIiwgInN1YnBhZ2VEZWxldGVyIiwgInRoaW5nV2l0aFBhcmFtZXRlcnMiLCAidW5saW5rQmFja2xpbmtzTWFpbiIsICJ1bmxpbmtJbWFnZUluc3RhbmNlc01haW4iLCAidGFsa1BhZ2UiLCAicmVkaXJlY3REZWxldGVyIiwgIm9sZF90ZXh0IiwgInNldE1heENvbmZsaWN0UmV0cmllcyIsICJ1bmxpbmtJbWFnZUluc3RhbmNlcyIsICJ0d2lua2xlYmF0Y2h1bmRlbGV0ZV9leHBvcnRzIiwgImluaXRfdHdpbmtsZWJhdGNodW5kZWxldGUiLCAidHdpbmtsZWJhdGNodW5kZWxldGUiLCAiYmF0Y2h1bmRlbGV0ZSIsICJwcm9qZWN0IiwgInVuZGVsX3RhbGsiLCAicGFnZVVuZGVsZXRlciIsICJzZXRNYXhSZXRyaWVzIiwgInVuZGVsZXRlUGFnZSIsICJ0YWxrcGFnZW5hbWUiLCAiZ2V0VGFsa1BhZ2UiLCAiZHJ2cHJvcCIsICJkcnZsaW1pdCIsICJ1bmRlbGV0ZVRhbGsiLCAiZGVscmV2cyIsICJ0d2lua2xlYmF0Y2hwcm90ZWN0X2V4cG9ydHMiLCAiaW5pdF90d2lua2xlYmF0Y2hwcm90ZWN0IiwgInR3aW5rbGViYXRjaHByb3RlY3QiLCAiYmF0Y2hwcm90ZWN0IiwgInByb3RMZXZlbCIsICJfaXRlcmF0b3I2MyIsICJfc3RlcDYzIiwgIm1pc3NpbmciLCAiZWRpdFByb3QiLCAiaW1hZ2VpbmZvIiwgInJldmlzaW9ucyIsICJfaXRlcmF0b3I2NCIsICJfc3RlcDY0IiwgImxpbmtzIiwgImN1cnJlbnRQcm90ZWN0Q291bnRlciIsICJjdXJyZW50cHJvdGVjdG9yIiwgInRha2VuQWN0aW9uIiwgImNyZWF0ZW1vZGlmeSIsICJ0d2lua2xlY2xvc2VfZXhwb3J0cyIsICJpbml0X3R3aW5rbGVjbG9zZSIsICJ0d2lua2xlY2xvc2UiLCAic2VsZWN0b3IiLCAiZGVsTm9kZSIsICJkZWxMaW5rIiwgIl9pdGVyYXRvcjY1IiwgIl9zdGVwNjUiLCAiaGVhZGxpbmVocmVmIiwgIm0iLCAicGFnZW5vdGV4aXN0IiwgImhhc0NsYXNzIiwgInRtcE5vZGUiLCAiY2xvbmVOb2RlIiwgImNvZGVzIiwgImlyIiwgInJlcCIsICJuZSIsICJucSIsICJrIiwgImFkbWlub25seSIsICJzayIsICJ0ayIsICJyciIsICJkYW4iLCAiZCIsICJpYyIsICJzZCIsICJsc3NkIiwgInN2ZyIsICJkcmVwIiwgImMiLCAiciIsICJjciIsICJtZXJnZSIsICJtZXJnZWFwcHJvdmVkIiwgIm5jIiwgIm5vb3AiLCAiY2hhbmdlX2NvZGUiLCAiY2hhbmdlX29wZXJhdGlvbiIsICJyZXN1bHREYXRhIiwgIl9pMTYiLCAiX09iamVjdCRlbnRyaWVzOSIsICJfaXRlcmF0b3I2NiIsICJfc3RlcDY2IiwgInNkcmVhc29uIiwgInJlbWFyayIsICJwYXJlbnRTZWN0aW9uIiwgInRhbGtlbmQiLCAiZGVsIiwgImtlZXAiLCAicGFnZXRpdGxlIiwgImdldE5hbWVzcGFjZUlkIiwgInRhbGtwYWdldGl0bGUiLCAiZ2V0TWFpblRleHQiLCAidG9TdHJpbmciLCAidmZka2VwdCIsICJzZXRQcmVwZW5kVGV4dCIsICJuZXd0ZXh0IiwgImtlZXBDb21wbGV0ZSIsICJzYXZlVGFsayIsICJzYmVnaW4iLCAic2VuZCIsICJiYXIiLCAiZGlzYWJsZUxpbmsiLCAidHdpbmtsZWNvbmZpZ19leHBvcnRzIiwgImluaXRfdHdpbmtsZWNvbmZpZyIsICJ0d2lua2xlY29uZmlnIiwgIndhdGNobGlzdEVudW1zIiwgInllcyIsICJubyIsICJkZWZhdWx0IiwgImNvbW1vblNldHMiLCAiY3NkQ3JpdGVyaWEiLCAiZGIiLCAiY3NkQ3JpdGVyaWFEaXNwbGF5T3JkZXIiLCAiY3NkQ3JpdGVyaWFOb3RpZmljYXRpb24iLCAiY3NkQ3JpdGVyaWFOb3RpZmljYXRpb25EaXNwbGF5T3JkZXIiLCAiY3NkQW5kRElDcml0ZXJpYSIsICJjc2RBbmRESUNyaXRlcmlhRGlzcGxheU9yZGVyIiwgInhmZENyaXRlcmlhIiwgImRlbGV0ZSIsICJmd2Rjc2QiLCAieGZkQ3JpdGVyaWFEaXNwbGF5T3JkZXIiLCAibmFtZXNwYWNlc05vU3BlY2lhbCIsICJtb2R1bGUiLCAicHJlZmVyZW5jZXMiLCAiZW51bVZhbHVlcyIsICJ0YWIiLCAiaGVscHRpcCIsICJzZXRWYWx1ZXMiLCAiYWRtaW5Pbmx5IiwgImN1c3RvbUxpc3RWYWx1ZVRpdGxlIiwgImN1c3RvbUxpc3RMYWJlbFRpdGxlIiwgInZhbmQiLCAidG9yZXYiLCAibWluZSIsICJyZWNlbnRjaGFuZ2VzbGlua2VkIiwgImJ1dHRvbkNsaWNrIiwgInJhZGlvQ2xpY2siLCAic2V0RGlzcGxheU9yZGVyIiwgImNhdCIsICJhbHBoYSIsICJzYW1lIiwgIm5vbmFkbWlub25seSIsICJhbGwiLCAiY29udGVudGRpdiIsICJ0b2N0YWJsZSIsICJtYXJnaW5MZWZ0IiwgInRvY3RpdGxlIiwgInRvY2gyIiwgInRvY3RvZ2dsZSIsICJ0b2N0b2dnbGVsaW5rIiwgInRvY3VsIiwgIiR0b2N1bCIsICJ0b2dnbGUiLCAiY29udGVudGZvcm0iLCAic2VjdGlvbmtleSIsICJ0b2NsaSIsICJ0b2NhIiwgInJvdyIsICJjZWxsIiwgImJvcmRlckJvdHRvbSIsICJtYXJnaW5Ub3AiLCAicm93Y291bnQiLCAicHJlZmtleSIsICJwcmVmIiwgIm1hcmdpbkJvdHRvbSIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiZ290UHJlZiIsICJ0ZXh0QWxpZ24iLCAicGFkZGluZ1JpZ2h0IiwgIm9wdGlvbkV4aXN0cyIsICJfaTE3IiwgIl9PYmplY3QkZW50cmllczEwIiwgImVudW12YWx1ZSIsICJlbnVtZGlzcGxheSIsICJjaGVja2RpdiIsICJwYWRkaW5nTGVmdCIsICJ3b3JrZXIiLCAiaXRlbWtleSIsICJpdGVtdmFsdWUiLCAiY2hlY2tsYWJlbCIsICJfaXRlcmF0b3I2NyIsICJfc3RlcDY3IiwgIl9pMTgiLCAiX09iamVjdCRlbnRyaWVzMTEiLCAiY3VzdG9tTGlzdEJ1dHRvbiIsICJsaXN0RGlhbG9nIiwgInJlc2V0bGluayIsICJyZXNldFByZWZMaW5rIiwgImNzc0Zsb2F0IiwgIm1hcmdpbiIsICJmb290ZXJib3giLCAic3VibWl0QnV0dG9uIiwgImZvb3RlcnNwYW4iLCAiZm9vdGVyYSIsICJyZXNldEFsbFByZWZzIiwgImhhc2giLCAibG9jIiwgImJveCIsICJzY3JpcHRQYWdlTmFtZSIsICJhZGRSb3ciLCAiZGxndGFibGUiLCAiY29udGVudHRyIiwgImNvbnRlbnR0ZCIsICJyZW1vdmVCdXR0b24iLCAiX2N1cnByZWYkY3VzdG9tTGlzdFZhIiwgIl9jdXJwcmVmJGN1c3RvbUxpc3RMYSIsICIkcHJlZmJ1dHRvbiIsICJjdXJ2YWx1ZSIsICJjdXJwcmVmIiwgImRpYWxvZ2NvbnRlbnQiLCAiZGxndGJvZHkiLCAiZGxndHIiLCAiZGxndGgiLCAiZ290Um93IiwgIl9pdGVyYXRvcjY4IiwgIl9zdGVwNjgiLCAiZGxndGZvb3QiLCAiZGxndGQiLCAiYWRkQnV0dG9uIiwgIm1pbldpZHRoIiwgImJ1dHRvbiIsICJyZXNldCIsICJ0Ym9keSIsICIkYnV0dG9uIiwgIm9sZHZhbHVlIiwgInJlc2V0UHJlZiIsICIkdGJvZHkiLCAiX2l0ZXJhdG9yNjkiLCAiX3N0ZXA2OSIsICJpbnB1dGtleSIsICJ3YW50ZWRwcmVmIiwgImZvdW5kaXQiLCAiX2kxOSIsICJfT2JqZWN0JGVudHJpZXMxMiIsICJ1c2VyanMiLCAid3JpdGVQcmVmcyIsICJuZXdDb25maWciLCAib3B0aW9uc1ZlcnNpb24iLCAiY29tcGFyZSIsICJiIiwgInVzZXJWYWx1ZSIsICJfaXRlcmF0b3I3MCIsICJfc3RlcDcwIiwgIl9pMjAiLCAiX09iamVjdCRlbnRyaWVzMTMiLCAibm93aWtpIiwgIkpTT04iLCAic3RyaW5naWZ5IiwgInNhdmVTdWNjZXNzIiwgIm5vdGljZWJveCIsICJub3RpY2VjbGVhciIsICJjbGVhciIsICJQcm9taXNlIiwgInJlc29sdmUiLCAidHdpbmtsZUxvYWQiLCAiX3R3aW5rbGVMb2FkIiwgImFwcGx5IiwgImFyZ3VtZW50cyJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZS5qcyIsICJzcmMvVHdpbmtsZS9tb2R1bGVzL3R3aW5rbGVhcnYuanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xld2Fybi5qcyIsICJzcmMvVHdpbmtsZS9tb2R1bGVzL3R3aW5rbGVibG9jay5qcyIsICJzcmMvVHdpbmtsZS9tb2R1bGVzL2ZyaWVuZGx5dGFsa2JhY2suanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xlc3BlZWR5LmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWNvcHl2aW8uanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xleGZkLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWltYWdlLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZXByb3RlY3QuanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy9mcmllbmRseXRhZy5qcyIsICJzcmMvVHdpbmtsZS9tb2R1bGVzL3R3aW5rbGVzdHViLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWRpZmYuanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xldW5saW5rLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWZsdWZmLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWJhdGNoZGVsZXRlLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWJhdGNodW5kZWxldGUuanMiLCAic3JjL1R3aW5rbGUvbW9kdWxlcy90d2lua2xlYmF0Y2hwcm90ZWN0LmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWNsb3NlLmpzIiwgInNyYy9Ud2lua2xlL21vZHVsZXMvdHdpbmtsZWNvbmZpZy5qcyIsICJzcmMvVHdpbmtsZS9Ud2lua2xlLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZSgkKSB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHRjb25zdCBUd2lua2xlID0ge307XG5cdHdpbmRvdy5Ud2lua2xlIHx8PSBUd2lua2xlOyAvLyBhbGxvdyBnbG9iYWwgYWNjZXNzXG5cdC8vIFdyYXAgd2l0aCBhbm9ueW1vdXMgZnVuY3Rpb25cblx0Ly8gQ2hlY2sgaWYgYWNjb3VudCBpcyBleHBlcmllbmNlZCBlbm91Z2ggdG8gdXNlIFR3aW5rbGVcblx0aWYgKCFNb3JlYml0cy51c2VySXNJbkdyb3VwKCdhdXRvY29uZmlybWVkJykgJiYgIU1vcmViaXRzLnVzZXJJc0luR3JvdXAoJ2NvbmZpcm1lZCcpKSB7XG5cdFx0Y29uc29sZS53YXJuKCdbVHdpbmtsZV0g6Z2e56Gu6K6k55So5oi35oiW6Ieq5Yqo56Gu6K6k55So5oi377yMVHdpbmtsZeS4jeS8mui/kOihjOOAgicpO1xuXHRcdHJldHVybjtcblx0fVxuXHQvKipcblx0ICogVHdpbmtsZS1zcGVjaWZpYyBkYXRhIHNoYXJlZCBieSBtdWx0aXBsZSBtb2R1bGVzXG5cdCAqIExpa2VseSBjdXN0b21pemVkIHBlciBpbnN0YWxsYXRpb25cblx0ICovXG5cdC8vIEN1c3RvbSBjaGFuZ2UgdGFnKHMpIHRvIGJlIGFwcGxpZWQgdG8gYWxsIFR3aW5rbGUgYWN0aW9ucywgY3JlYXRlIGF0IFNwZWNpYWw6VGFnc1xuXHRUd2lua2xlLmNoYW5nZVRhZ3MgPSAnVHdpbmtsZSc7XG5cdC8vIEF2YWlsYWJsZSBmb3IgYWN0aW9ucyB0aGF0IGRvbid0ICh5ZXQpIHN1cHBvcnQgdGFnc1xuXHRUd2lua2xlLnN1bW1hcnlBZCA9ICfvvIhbW0g6VFd8VHdpbmtsZV1d77yJJztcblx0Ly8gVmFyaW91cyBoYXRub3RlIHRlbXBsYXRlcywgdXNlZCB3aGVuIHRhZ2dpbmcgKGNzZC94ZmQvdGFnL3Byb2QvcHJvdGVjdCkgdG8gZW5zdXJlIG9yZGVyXG5cdFR3aW5rbGUuaGF0bm90ZVJlZ2V4ID1cblx0XHQnKD86U2hvcnRbIF9dZGVzY3JpcHRpb24pfCg/OlJlbGxpbmt8SGF0bm90ZXxIQVQpfCg/Ok1haW58W+e7hue0sF1b6IqC56+AXXxNYWluWyBfXWFydGljbGVzfOS4u1vmnaHmop1d55uufEh1cnJpY2FuZVsgX11tYWlufFvmnaHmop1d55uufOS4u3xb6aCB6aG1XemdonzkuLtb6aCB6aG1XemdonzkuLtb6aCB6aG1XXzkuLtb6aGM6aKYXeebrnxNYWluWyBfXWFydGljbGV8QVApfCg/Oldyb25ndGl0bGV8Q29ycmVjdFsgX110aXRsZSl8KD865Li75p2h55uu5raI5q2n5LmJfOS4u+aineebrua2iOatp+e+qXzmtojmrafkuYnpk77mjqV85raI5q2n576p6Y+I5o6lfOa2iOatp+e+qemAo+e1kHzmtojov5585raI6YCjfOa2iOatp+S5iei/nue7k3xEaXNhbWJMaW5rfE5vdGVyZWZ8RGFibGluayl8KD86RGlzdGluZ3Vpc2h85LiN5pivfE5vdHzmj5DnpLp85re35reGfOWIhuWIpXzliIbliKt85Y2A5YilfOWMuuWIq3zmnKzmnaHnm67nmoTkuLvpopjkuI3mmK985pys5qKd55uu55qE5Li76aGM5LiN5pivfOacrOadoeebruS4u+mimOS4jeaYr3zmnKzmop3nm67kuLvpoYzkuI3mmK985p2h55uu5Li76aKY5LiN5pivfOaineebruS4u+mhjOS4jeaYr3zkuLvpopjkuI3mmK985Li76aGM5LiN5pivfENvbmZ1c2VkfOWMuuWIhnzljYDliIZ8Q29uZnVzaW9ufENvbmZ1c2V8UmVkaXJlY3ROT1R8TWlzc3BlbGxpbmcpfCg/OkRpc3Rpbmd1aXNoMnxTZWxmRGlzdGluZ3Vpc2h8Tm90MnzkuI3mmK8yKXwoPzpGb3IpfCg/OkRldGFpbHN8RnVydGhlcnxTZWV85Y+m6KeBfOWPpuimi3xNb3JlfOebuOmXnOaineebrnznm7jlhbPmnaHnm658RGV0YWlsfOingXzopot85pu05aSa6LWE5paZfOabtOWkmuizh+aWmXxGdXJ0aGVyWyBfXWluZm9ybWF0aW9ufOabtOWkmui1hOiur3zmm7TlpJros4foqIp8TW9yZVsgX11pbmZvcm1hdGlvbnzmm7TlpJrkv6Hmga8pfCg/OlNlbGZyZWYpfCg/OkFib3V0fE90aGVydXNlczR85YWz5LqOfOmXnOaWvCl8KD86T3RoZXJbIF9ddXNlc3xPdGhlcnVzZXzmnaHnm67mtojmrafkuYl85qKd55uu5raI5q2n576pfOS7lueUqHxPdGhlcnVzZXMpfCg/Ok90aGVyWyBfXXVzZXMgbGlzdHxPdGhlcnVzZWxpc3R85Li75qKd55uu5raI5q2n576p5YiX6KGofOS4u+adoeebrua2iOatp+S5ieWIl+ihqHxPdGhlcnVzZXNsaXN0fEFib3V0bGlzdHxBYm91dFsgX11saXN0fE90aGVydXNlc1sgX11saXN0KXwoPzpSZWRpcmVjdHzph43lrprlkJHoh7PmraR8UmVkaXJlY3RzWyBfXWhlcmV8UmVkaXJlY3RbIF9ddG8pfCg/OlJlZGlyZWN0MnzkuLvmop3nm67mtojmrafnvqkyfOS4u+adoeebrua2iOatp+S5iTJ8UmVkaXJ86YeN5a6a5ZCR6Iez5q2kMil8KD86UmVkaXJlY3QzKXwoPzpSZWRpcmVjdDQpfCg/OlJlZGlyZWN0LWRpc3Rpbmd1aXNoKXwoPzpSZWRpcmVjdC1zeW5vbnltKXwoPzpSZWRpcmVjdC1tdWx0aSl8KD86U2VlWyBfXVdpa3Rpb25hcnl8U2Vld2lrdCl8KD86U2VlYWxzb3zlj4LnnIt85Y+D55yLfFNlZVsgX11hbHNvfOWPguingXzlj4Popot8QWxzbyl8KD86U2VlWyBfXWFsc28yfFNlZWFsc28yfOS4jei9ieaPm+WPg+imi3zkuI3ovazmjaLlj4Lop4EpfCg/Ok90aGVyWyBfXXBsYWNlcyl8KD86Q29udHJhc3R85bCN5q+UfOWvueavlCknO1xuXHRUd2lua2xlLmluaXRDYWxsYmFja3MgPSBbXTtcblx0LyoqXG5cdCAqIEFkZHMgYSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gVHdpbmtsZSBoYXMgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gLSBuYW1lIG9mIG1vZHVsZSB1c2VkIHRvIGNoZWNrIGlmIGlzIGRpc2FibGVkLlxuXHQgKiBJZiBuYW1lIGlzIG5vdCBnaXZlbiwgbW9kdWxlIGlzIGxvYWRlZCB1bmNvbmRpdGlvbmFsbHkuXG5cdCAqL1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayA9IChmdW5jLCBuYW1lKSA9PiB7XG5cdFx0VHdpbmtsZS5pbml0Q2FsbGJhY2tzLnB1c2goe1xuXHRcdFx0ZnVuYyxcblx0XHRcdG5hbWUsXG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuZGVmYXVsdENvbmZpZyA9IHt9O1xuXHQvKipcblx0ICogVGhpcyBob2xkcyB0aGUgZGVmYXVsdCBzZXQgb2YgcHJlZmVyZW5jZXMgdXNlZCBieSBUd2lua2xlLlxuXHQgKiBJdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgbmV3IHByZWZlcmVuY2VzIGFkZGVkIGhlcmUsIGVzcGVjaWFsbHkgYWRtaW4tb25seSBvbmVzLCBhcmUgYWxzbyBhZGRlZCB0b1xuXHQgKiB8VHdpbmtsZS5jb25maWcuc2VjdGlvbnN8IGluIHR3aW5rbGVjb25maWcuanMsIHNvIHRoZXkgYXJlIGNvbmZpZ3VyYWJsZSB2aWEgdGhlIFR3aW5rbGUgcHJlZmVyZW5jZXMgcGFuZWwuXG5cdCAqIEZvciBoZWxwIG9uIHRoZSBhY3R1YWwgcHJlZmVyZW5jZXMsIHNlZSB0aGUgY29tbWVudHMgaW4gdHdpbmtsZWNvbmZpZy5qcy5cblx0ICpcblx0ICogRm9ybWVybHkgVHdpbmtsZS5kZWZhdWx0Q29uZmlnLnR3aW5rbGVcblx0ICovXG5cdFR3aW5rbGUuZGVmYXVsdENvbmZpZyA9IHtcblx0XHQvLyBHZW5lcmFsXG5cdFx0dXNlclRhbGtQYWdlTW9kZTogJ3RhYicsXG5cdFx0ZGlhbG9nTGFyZ2VGb250OiBmYWxzZSxcblx0XHRkaXNhYmxlZE1vZHVsZXM6IE1vcmViaXRzLnVzZXJJc1N5c29wID8gW10gOiBbJ2Jsb2NrJ10sXG5cdFx0Ly8gZGVmYXVsdCB0byBkaXNhYmxlIGJsb2NrIGZvciBub24tc3lzb3AsIGlmIGVuYWJsZSBtYW51YWxseSwgdGhleSBjYW4gb25seSB1c2UgaXQgdG8gdGFnIHVzZXJwYWdlXG5cdFx0ZGlzYWJsZWRTeXNvcE1vZHVsZXM6IFtdLFxuXHRcdC8vIEFSVlxuXHRcdHNwaVdhdGNoUmVwb3J0OiAneWVzJyxcblx0XHQvLyBCbG9ja1xuXHRcdGRlZmF1bHRUb0Jsb2NrNjQ6IGZhbHNlLFxuXHRcdGRlZmF1bHRUb1BhcnRpYWxCbG9ja3M6IGZhbHNlLFxuXHRcdGJsYW5rVGFsa3BhZ2VPbkluZGVmQmxvY2s6IGZhbHNlLFxuXHRcdHdhdGNoQmxvY2tOb3RpY2VzOiAneWVzJyxcblx0XHRjdXN0b21CbG9ja1JlYXNvbkxpc3Q6IFtdLFxuXHRcdC8vIEZsdWZmIChyZXZlcnQgYW5kIHJvbGxiYWNrKVxuXHRcdG9wZW5UYWxrUGFnZTogW10sXG5cdFx0b3BlblRhbGtQYWdlT25BdXRvUmV2ZXJ0OiBmYWxzZSxcblx0XHRyb2xsYmFja0luUGxhY2U6IGZhbHNlLFxuXHRcdG1hcmtSZXZlcnRlZFBhZ2VzQXNNaW5vcjogWyd2YW5kJ10sXG5cdFx0d2F0Y2hSZXZlcnRlZFBhZ2VzOiBbJ25vcm0nLCAndmFuZCcsICd0b3JldiddLFxuXHRcdHdhdGNoUmV2ZXJ0ZWRFeHBpcnk6ICd5ZXMnLFxuXHRcdG9mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQ6IHRydWUsXG5cdFx0Y29uZmlybU9uRmx1ZmY6IGZhbHNlLFxuXHRcdHNob3dSb2xsYmFja0xpbmtzOiBbJ2RpZmYnLCAnb3RoZXJzJ10sXG5cdFx0Y3VzdG9tUmV2ZXJ0U3VtbWFyeTogW10sXG5cdFx0Ly8gREkgKHR3aW5rbGVpbWFnZSlcblx0XHRub3RpZnlVc2VyT25EZWxpOiB0cnVlLFxuXHRcdGRlbGlXYXRjaFBhZ2U6ICdkZWZhdWx0Jyxcblx0XHRkZWxpV2F0Y2hVc2VyOiAnZGVmYXVsdCcsXG5cdFx0Ly8gUHJvdGVjdFxuXHRcdHdhdGNoUmVxdWVzdGVkUGFnZXM6ICd5ZXMnLFxuXHRcdHdhdGNoUFBUYWdnZWRQYWdlczogJ2RlZmF1bHQnLFxuXHRcdHdhdGNoUHJvdGVjdGVkUGFnZXM6ICdkZWZhdWx0Jyxcblx0XHQvLyBDU0Rcblx0XHRzcGVlZHlTZWxlY3Rpb25TdHlsZTogJ2J1dHRvbkNsaWNrJyxcblx0XHR3YXRjaFNwZWVkeVBhZ2VzOiBbJ2cxJywgJ2czJywgJ2c0JywgJ2c3JywgJ2c4J10sXG5cdFx0d2F0Y2hTcGVlZHlFeHBpcnk6ICd5ZXMnLFxuXHRcdG1hcmtTcGVlZHlQYWdlc0FzUGF0cm9sbGVkOiBmYWxzZSxcblx0XHR3YXRjaFNwZWVkeVVzZXI6ICcxIG1vbnRoJyxcblx0XHQvLyB0aGVzZSBuZXh0IHR3byBzaG91bGQgcHJvYmFibHkgYmUgaWRlbnRpY2FsIGJ5IGRlZmF1bHRcblx0XHRub3RpZnlVc2VyT25TcGVlZHlEZWxldGlvbk5vbWluYXRpb246IFtcblx0XHRcdCdkYicsXG5cdFx0XHQnZzEnLFxuXHRcdFx0J2cyJyxcblx0XHRcdCdnMycsXG5cdFx0XHQnZzQnLFxuXHRcdFx0J2c1Jyxcblx0XHRcdCdnNicsXG5cdFx0XHQnZzcnLFxuXHRcdFx0J2c4Jyxcblx0XHRcdCdnOScsXG5cdFx0XHQnYTEnLFxuXHRcdFx0J2EyJyxcblx0XHRcdCdhMycsXG5cdFx0XHQncjEnLFxuXHRcdFx0J3IyJyxcblx0XHRcdCdmMScsXG5cdFx0XHQnZjInLFxuXHRcdFx0J2YzJyxcblx0XHRcdCdmNCcsXG5cdFx0XHQnZjUnLFxuXHRcdFx0J28xJyxcblx0XHRcdCdvMicsXG5cdFx0XHQnbzMnLFxuXHRcdF0sXG5cdFx0d2FyblVzZXJPblNwZWVkeURlbGV0ZTogW1xuXHRcdFx0J2RiJyxcblx0XHRcdCdnMScsXG5cdFx0XHQnZzInLFxuXHRcdFx0J2czJyxcblx0XHRcdCdnNCcsXG5cdFx0XHQnZzUnLFxuXHRcdFx0J2c2Jyxcblx0XHRcdCdnNycsXG5cdFx0XHQnZzgnLFxuXHRcdFx0J2c5Jyxcblx0XHRcdCdhMScsXG5cdFx0XHQnYTInLFxuXHRcdFx0J2EzJyxcblx0XHRcdCdyMScsXG5cdFx0XHQncjInLFxuXHRcdFx0J2YxJyxcblx0XHRcdCdmMicsXG5cdFx0XHQnZjMnLFxuXHRcdFx0J2Y0Jyxcblx0XHRcdCdmNScsXG5cdFx0XHQnbzEnLFxuXHRcdFx0J28yJyxcblx0XHRcdCdvMycsXG5cdFx0XSxcblx0XHRwcm9tcHRGb3JTcGVlZHlEZWxldGlvblN1bW1hcnk6IFtdLFxuXHRcdG9wZW5Vc2VyVGFsa1BhZ2VPblNwZWVkeURlbGV0ZTogW10sXG5cdFx0ZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZTogdHJ1ZSxcblx0XHRkZWxldGVSZWRpcmVjdHNPbkRlbGV0ZTogdHJ1ZSxcblx0XHRkZWxldGVTeXNvcERlZmF1bHRUb0RlbGV0ZTogZmFsc2UsXG5cdFx0c3BlZWR5V2luZG93SGVpZ2h0OiA1MDAsXG5cdFx0c3BlZWR5V2luZG93V2lkdGg6IDgwMCxcblx0XHRsb2dTcGVlZHlOb21pbmF0aW9uczogdHJ1ZSxcblx0XHRzcGVlZHlMb2dQYWdlTmFtZTogJ0NTROaXpeW/lycsXG5cdFx0bm9Mb2dPblNwZWVkeU5vbWluYXRpb246IFsnbzEnXSxcblx0XHRlbmxhcmdlRzdJbnB1dDogZmFsc2UsXG5cdFx0Ly8gVW5saW5rXG5cdFx0dW5saW5rTmFtZXNwYWNlczogWycwJywgJzYnLCAnMTAnLCAnMzAyJ10sXG5cdFx0Ly8gV2FyblxuXHRcdGRlZmF1bHRXYXJuaW5nR3JvdXA6ICcxJyxcblx0XHRjb21iaW5lZFNpbmdsZXRNZW51czogZmFsc2UsXG5cdFx0d2F0Y2hXYXJuaW5nczogJ3llcycsXG5cdFx0b2xkU2VsZWN0OiBmYWxzZSxcblx0XHRjdXN0b21XYXJuaW5nTGlzdDogW10sXG5cdFx0YXV0b01lbnVBZnRlclJvbGxiYWNrOiBmYWxzZSxcblx0XHQvLyBYZkRcblx0XHRsb2dYZmROb21pbmF0aW9uczogdHJ1ZSxcblx0XHR4ZmRMb2dQYWdlTmFtZTogJ1hmROaXpeW/lycsXG5cdFx0bm9Mb2dPblhmZE5vbWluYXRpb246IFtdLFxuXHRcdHhmZFdhdGNoRGlzY3Vzc2lvbjogJ2RlZmF1bHQnLFxuXHRcdHhmZFdhdGNoUGFnZTogJ2RlZmF1bHQnLFxuXHRcdHhmZFdhdGNoVXNlcjogJ2RlZmF1bHQnLFxuXHRcdG1hcmtYZmRQYWdlc0FzUGF0cm9sbGVkOiB0cnVlLFxuXHRcdEZ3ZENzZFRvWGZkOiBNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRhZmREZWZhdWx0Q2F0ZWdvcnk6ICdkZWxldGUnLFxuXHRcdGFmZEZhbWVEZWZhdWx0UmVhc29uOiAn5rKh5pyJ6Laz5aSf55qE5Y+v6Z2g5p2l5rqQ6K+B5piO5q2k5p2h55uu56ym5ZCIW1tMSUI65pS25b2V5qCH5YeGfOaUtuW9leagh+WHhl1dJyxcblx0XHRhZmRTdWJzdHViRGVmYXVsdFJlYXNvbjogJ+i/h+acn+Wwj+Wwj+S9nOWTgScsXG5cdFx0WGZkQ2xvc2U6IE1vcmViaXRzLnVzZXJJc1N5c29wID8gJ2FsbCcgOiAnaGlkZScsXG5cdFx0Ly8gQ29weXZpb1xuXHRcdGNvcHl2aW9XYXRjaFBhZ2U6ICd5ZXMnLFxuXHRcdGNvcHl2aW9XYXRjaFVzZXI6ICd5ZXMnLFxuXHRcdG1hcmtDb3B5dmlvUGFnZXNBc1BhdHJvbGxlZDogdHJ1ZSxcblx0XHQvLyBIaWRkZW4gcHJlZmVyZW5jZXNcblx0XHRhdXRvbGV2ZWxTdGFsZURheXM6IDMsXG5cdFx0cmV2ZXJ0TWF4UmV2aXNpb25zOiA1MCxcblx0XHQvLyBpbnRlbnRpb25hbGx5IGxpbWl0ZWRcblx0XHRiYXRjaE1heDogNTAwMCxcblx0XHRiYXRjaENodW5rczogNTAsXG5cdFx0Y29uZmlnUGFnZTogJ0hlbHA6VHdpbmtsZS/lj4LmlbDorr7nva4nLFxuXHRcdHByb2plY3ROYW1lc3BhY2VOYW1lOiBtdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVs0XSxcblx0XHRzYW5kYm94UGFnZTogJ0xJQjrmspnnm5InLFxuXHRcdC8vIERlcHJlY2F0ZWQgb3B0aW9ucywgYXMgYSBmYWxsYmFjayBmb3IgYWRkLW9uIHNjcmlwdHMvbW9kdWxlc1xuXHRcdHN1bW1hcnlBZDogJ++8iFtbSDpUV3xUd2lua2xlXV3vvIknLFxuXHRcdGRlbGV0aW9uU3VtbWFyeUFkOiAn77yIW1tIOlRXfFR3aW5rbGVdXe+8iScsXG5cdFx0cHJvdGVjdGlvblN1bW1hcnlBZDogJ++8iFtbSDpUV3xUd2lua2xlXV3vvIknLFxuXHRcdGJsb2NrU3VtbWFyeUFkOiAn77yIW1tIOlRXfFR3aW5rbGVdXe+8iScsXG5cdFx0Ly8gVGFnXG5cdFx0Z3JvdXBCeURlZmF1bHQ6IHRydWUsXG5cdFx0d2F0Y2hUYWdnZWRQYWdlczogJ3llcycsXG5cdFx0d2F0Y2hNZXJnZURpc2N1c3Npb25zOiAneWVzJyxcblx0XHRtYXJrVGFnZ2VkUGFnZXNBc01pbm9yOiBmYWxzZSxcblx0XHRtYXJrVGFnZ2VkUGFnZXNBc1BhdHJvbGxlZDogdHJ1ZSxcblx0XHR0YWdBcnRpY2xlU29ydE9yZGVyOiAnY2F0Jyxcblx0XHRjdXN0b21UYWdMaXN0OiBbXSxcblx0XHRjdXN0b21GaWxlVGFnTGlzdDogW10sXG5cdFx0Y3VzdG9tUmVkaXJlY3RUYWdMaXN0OiBbXSxcblx0XHQvLyBTdHViXG5cdFx0d2F0Y2hTdHViYmVkUGFnZXM6IGZhbHNlLFxuXHRcdG1hcmtTdHViYmVkUGFnZXNBc01pbm9yOiBmYWxzZSxcblx0XHRtYXJrU3R1YmJlZFBhZ2VzQXNQYXRyb2xsZWQ6IHRydWUsXG5cdFx0c3R1YkFydGljbGVTb3J0T3JkZXI6ICdjYXQnLFxuXHRcdGN1c3RvbVN0dWJMaXN0OiBbXSxcblx0XHQvLyBUYWxrYmFja1xuXHRcdG1hcmtUYWxrYmFja0FzTWlub3I6IHRydWUsXG5cdFx0aW5zZXJ0VGFsa2JhY2tTaWduYXR1cmU6IHRydWUsXG5cdFx0Ly8gYWx3YXlzIHNpZ24gdGFsa2JhY2sgdGVtcGxhdGVzXG5cdFx0dGFsa2JhY2tIZWFkaW5nOiB3aW5kb3cud2dVTFMoJ+WbnuWkjemAmuWRiicsICflm57opobpgJrlkYonKSxcblx0XHRtYWlsSGVhZGluZzogd2luZG93LndnVUxTKCfmgqjmnInmlrDpgq7ku7bvvIEnLCAn5oKo5pyJ5paw6YO15Lu277yBJyksXG5cdH07XG5cdC8vIG5vdyBzb21lIHNraW4gZGVwZW5kZW50IGNvbmZpZy5cblx0c3dpdGNoIChtdy5jb25maWcuZ2V0KCdza2luJykpIHtcblx0XHRjYXNlICd2ZWN0b3InOlxuXHRcdGNhc2UgJ3ZlY3Rvci0yMDIyJzpcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0QXJlYSA9ICdyaWdodC1uYXZpZ2F0aW9uJztcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0SWQgPSAncC10d2lua2xlJztcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0TmFtZSA9ICdUVyc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldFR5cGUgPSAnbWVudSc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldE5leHQgPSAncC1zZWFyY2gnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnZ29uZ2JpJzpcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0QXJlYSA9XG5cdFx0XHRcdCRib2R5LmZpbmQoJyNwYWdlLXRvb2xzIC5zaWRlYmFyLWlubmVyJykubGVuZ3RoID4gMFxuXHRcdFx0XHRcdD8gJyNwYWdlLXRvb2xzIC5zaWRlYmFyLWlubmVyJ1xuXHRcdFx0XHRcdDogJyNwYWdlLW1vcmUgLnNpZGViYXItaW5uZXInO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXRJZCA9ICdwLXR3aW5rbGUnO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXROYW1lID0gJ1R3aW5rbGUnO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXRUeXBlID0gbnVsbDtcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0TmV4dCA9XG5cdFx0XHRcdCRib2R5LmZpbmQoJyNwYWdlLXRvb2xzIC5zaWRlYmFyLWlubmVyJykubGVuZ3RoID4gMCA/ICdwYWdlLW1vcmUnIDogbnVsbDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2NpdGl6ZW4nOlxuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXRBcmVhID0gJyNwYWdlLWFjdGlvbnMtbW9yZV9fY2FyZCc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldElkID0gJ3AtdHdpbmtsZSc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldE5hbWUgPSAnVHdpbmtsZSc7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldFR5cGUgPSAnbmF2Jztcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0TmV4dCA9ICdwLXRiJztcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldEFyZWEgPSBudWxsO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXRJZCA9ICdwLWNhY3Rpb25zJztcblx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZy5wb3J0bGV0TmFtZSA9IG51bGw7XG5cdFx0XHRUd2lua2xlLmRlZmF1bHRDb25maWcucG9ydGxldFR5cGUgPSBudWxsO1xuXHRcdFx0VHdpbmtsZS5kZWZhdWx0Q29uZmlnLnBvcnRsZXROZXh0ID0gbnVsbDtcblx0fVxuXHRUd2lua2xlLmdldFByZWYgPSAobmFtZSkgPT4ge1xuXHRcdGlmICh0eXBlb2YgVHdpbmtsZS5wcmVmcyA9PT0gJ29iamVjdCcgJiYgVHdpbmtsZS5wcmVmc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gVHdpbmtsZS5wcmVmc1tuYW1lXTtcblx0XHR9XG5cdFx0Ly8gT2xkIHByZWZlcmVuY2VzIGZvcm1hdCwgdXNlZCBiZWZvcmUgdHdpbmtsZW9wdGlvbnMuanMgd2FzIGEgdGhpbmdcblx0XHRpZiAodHlwZW9mIHdpbmRvdy5Ud2lua2xlQ29uZmlnID09PSAnb2JqZWN0JyAmJiB3aW5kb3cuVHdpbmtsZUNvbmZpZ1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gd2luZG93LlR3aW5rbGVDb25maWdbbmFtZV07XG5cdFx0fVxuXHRcdHJldHVybiBUd2lua2xlLmRlZmF1bHRDb25maWdbbmFtZV07XG5cdH07XG5cdC8qKlxuXHQgKiAqKioqKioqKioqKioqKioqIFR3aW5rbGUuYWRkUG9ydGxldCgpICoqKioqKioqKioqKioqKipcblx0ICpcblx0ICogQWRkcyBhIHBvcnRsZXQgbWVudSB0byBvbmUgb2YgdGhlIG5hdmlnYXRpb24gYXJlYXMgb24gdGhlIHBhZ2UuXG5cdCAqIFRoaXMgaXMgbmVjZXNzYXJpbHkgcXVpdGUgYSBoYWNrIHNpbmNlIHNraW5zLCBuYXZpZ2F0aW9uIGFyZWFzLCBhbmRcblx0ICogcG9ydGxldCBtZW51IHR5cGVzIGFsbCB3b3JrIHNsaWdodGx5IGRpZmZlcmVudC5cblx0ICpcblx0ICogQXZhaWxhYmxlIG5hdmlnYXRpb24gYXJlYXMgZGVwZW5kIG9uIHRoZSBza2luIHVzZWQuXG5cdCAqIFZlY3Rvcjpcblx0ICogLSBGb3IgZWFjaCBvcHRpb24sIHRoZSBvdXRlciBuYXYgY2xhc3MgY29udGFpbnMgXCJ2ZWN0b3ItbWVudVwiLCB0aGUgaW5uZXIgZGl2IGNsYXNzIGlzIFwidmVjdG9yLW1lbnUtY29udGVudFwiLCBhbmQgdGhlIHVsIGlzIFwidmVjdG9yLW1lbnUtY29udGVudC1saXN0XCJcblx0ICogLSBcIm13LXBhbmVsXCIsIG91dGVyIG5hdiBjbGFzcyBjb250YWlucyBcInZlY3Rvci1tZW51LXBvcnRhbFwiLiBFeGlzdGluZyBwb3J0bGV0cy9lbGVtZW50czogXCJwLWxvZ29cIiwgXCJwLW5hdmlnYXRpb25cIiwgXCJwLWludGVyYWN0aW9uXCIsIFwicC10YlwiLCBcInAtY29sbC1wcmludF9leHBvcnRcIlxuXHQgKiAtIFwibGVmdC1uYXZpZ2F0aW9uXCIsIG91dGVyIG5hdiBjbGFzcyBjb250YWlucyBcInZlY3Rvci1tZW51LXRhYnNcIiBvciBcInZlY3Rvci1tZW51LWRyb3Bkb3duXCIuIEV4aXN0aW5nIHBvcnRsZXRzOiBcInAtbmFtZXNwYWNlc1wiLCBcInAtdmFyaWFudHNcIiAobWVudSlcblx0ICogLSBcInJpZ2h0LW5hdmlnYXRpb25cIiwgb3V0ZXIgbmF2IGNsYXNzIGNvbnRhaW5zIFwidmVjdG9yLW1lbnUtdGFic1wiIG9yIFwidmVjdG9yLW1lbnUtZHJvcGRvd25cIi4gRXhpc3RpbmcgcG9ydGxldHM6IFwicC12aWV3c1wiLCBcInAtY2FjdGlvbnNcIiAobWVudSksIFwicC1zZWFyY2hcIlxuXHQgKiAtIFNwZWNpYWwgbGF5b3V0IG9mIHAtcGVyc29uYWwgcG9ydGxldCAocGFydCBvZiBcImhlYWRcIikgdGhyb3VnaCBzcGVjaWFsaXplZCBzdHlsZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYXZpZ2F0aW9uIC0tIGlkIG9mIHRoZSB0YXJnZXQgbmF2aWdhdGlvbiBhcmVhIChza2luIGRlcGVuZGFudCwgb24gdmVjdG9yIGVpdGhlciBvZiBcImxlZnQtbmF2aWdhdGlvblwiLCBcInJpZ2h0LW5hdmlnYXRpb25cIiwgb3IgXCJtdy1wYW5lbFwiKVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLS0gaWQgb2YgdGhlIHBvcnRsZXQgbWVudSB0byBjcmVhdGUsIHByZWZlcmFibHkgc3RhcnQgd2l0aCBcInAtXCIuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0tIG5hbWUgb2YgdGhlIHBvcnRsZXQgbWVudSB0byBjcmVhdGUuIFZpc2liaWxpdHkgZGVwZW5kcyBvbiB0aGUgY2xhc3MgdXNlZC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLS0gdHlwZSBvZiBwb3J0bGV0LiBDdXJyZW50bHkgb25seSB1c2VkIGZvciB0aGUgdmVjdG9yIG5vbi1zaWRlYmFyIHBvcnRsZXRzLCBwYXNzIFwibWVudVwiIHRvIG1ha2UgdGhpcyBwb3J0bGV0IGEgZHJvcCBkb3duIG1lbnUuXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbmV4dG5vZGVpZCAtLSB0aGUgaWQgb2YgdGhlIG5vZGUgYmVmb3JlIHdoaWNoIHRoZSBuZXcgaXRlbSBzaG91bGQgYmUgYWRkZWQsIHNob3VsZCBiZSBhbm90aGVyIGl0ZW0gaW4gdGhlIHNhbWUgbGlzdCwgb3IgdW5kZWZpbmVkIHRvIHBsYWNlIGl0IGF0IHRoZSBlbmQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge05vZGV9IC0tIHRoZSBET00gbm9kZSBvZiB0aGUgbmV3IGl0ZW0gKGEgRElWIGVsZW1lbnQpIG9yIG51bGxcblx0ICovXG5cdFR3aW5rbGUuYWRkUG9ydGxldCA9IChuYXZpZ2F0aW9uLCBpZCwgdGV4dCwgdHlwZSwgbmV4dG5vZGVpZCkgPT4ge1xuXHRcdC8vIHNhbml0eSBjaGVja3MsIGFuZCBnZXQgcmVxdWlyZWQgRE9NIG5vZGVzXG5cdFx0Y29uc3Qgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoL14oPzojfFxcLikvLnRlc3QobmF2aWdhdGlvbikgPyBuYXZpZ2F0aW9uIDogYCMke25hdmlnYXRpb259YCk7XG5cdFx0aWYgKCFyb290KSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfWApO1xuXHRcdGlmIChpdGVtKSB7XG5cdFx0XHRpZiAoaXRlbS5wYXJlbnROb2RlICYmIGl0ZW0ucGFyZW50Tm9kZSA9PT0gcm9vdCkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRsZXQgbmV4dG5vZGU7XG5cdFx0aWYgKG5leHRub2RlaWQpIHtcblx0XHRcdG5leHRub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7bmV4dG5vZGVpZH1gKTtcblx0XHR9XG5cdFx0Ly8gdmVyaWZ5L25vcm1hbGl6ZSBpbnB1dFxuXHRcdGNvbnN0IHNraW4gPSBtdy5jb25maWcuZ2V0KCdza2luJyk7XG5cdFx0aWYgKFxuXHRcdFx0KHNraW4gIT09ICd2ZWN0b3InICYmIHNraW4gIT09ICd2ZWN0b3ItMjAyMicpIHx8XG5cdFx0XHQobmF2aWdhdGlvbiAhPT0gJ2xlZnQtbmF2aWdhdGlvbicgJiYgbmF2aWdhdGlvbiAhPT0gJ3JpZ2h0LW5hdmlnYXRpb24nKVxuXHRcdCkge1xuXHRcdFx0dHlwZSA9IG51bGw7IC8vIG1lbnUgc3VwcG9ydGVkIG9ubHkgaW4gdmVjdG9yJ3MgI2xlZnQtbmF2aWdhdGlvbiAmICNyaWdodC1uYXZpZ2F0aW9uXG5cdFx0fVxuXHRcdGxldCBvdXRlck5hdkNsYXNzO1xuXHRcdGxldCBpbm5lckRpdkNsYXNzO1xuXHRcdHN3aXRjaCAoc2tpbikge1xuXHRcdFx0Y2FzZSAndmVjdG9yJzpcblx0XHRcdGNhc2UgJ3ZlY3Rvci0yMDIyJzpcblx0XHRcdFx0Ly8gWFhYOiBwb3J0YWwgZG9lc24ndCB3b3JrXG5cdFx0XHRcdGlmIChuYXZpZ2F0aW9uICE9PSAncG9ydGFsJyAmJiBuYXZpZ2F0aW9uICE9PSAnbGVmdC1uYXZpZ2F0aW9uJyAmJiBuYXZpZ2F0aW9uICE9PSAncmlnaHQtbmF2aWdhdGlvbicpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uID0gJ213LXBhbmVsJztcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRlck5hdkNsYXNzID0gJ213LXBvcnRsZXQgdmVjdG9yLW1lbnUnO1xuXHRcdFx0XHRpZiAobmF2aWdhdGlvbiA9PT0gJ213LXBhbmVsJykge1xuXHRcdFx0XHRcdG91dGVyTmF2Q2xhc3MgKz0gJyB2ZWN0b3ItbWVudS1wb3J0YWwnO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdtZW51Jykge1xuXHRcdFx0XHRcdG91dGVyTmF2Q2xhc3MgKz0gJyB2ZWN0b3ItbWVudS1kcm9wZG93biB2ZWN0b3ItZHJvcGRvd24gdmVjdG9yLW1lbnUtZHJvcGRvd24tbm9pY29uJztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvdXRlck5hdkNsYXNzICs9ICcgdmVjdG9yLW1lbnUtdGFicyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5uZXJEaXZDbGFzcyA9ICd2ZWN0b3ItbWVudS1jb250ZW50IHZlY3Rvci1kcm9wZG93bi1jb250ZW50Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdnb25nYmknOlxuXHRcdFx0XHRvdXRlck5hdkNsYXNzID0gJ213LXBvcnRsZXQnO1xuXHRcdFx0XHRpbm5lckRpdkNsYXNzID0gJ213LXBvcnRsZXQtYm9keSc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnY2l0aXplbic6XG5cdFx0XHRcdG91dGVyTmF2Q2xhc3MgPSAnbXctcG9ydGxldCc7XG5cdFx0XHRcdGlubmVyRGl2Q2xhc3MgPSAnbXctcG9ydGxldC10d2lua2xlJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRuYXZpZ2F0aW9uID0gJ2NvbHVtbi1vbmUnO1xuXHRcdFx0XHRvdXRlck5hdkNsYXNzID0gJ3BvcnRsZXQnO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gQnVpbGQgdGhlIERPTSBlbGVtZW50cy5cblx0XHRsZXQgb3V0ZXJOYXY7XG5cdFx0bGV0IGhlYWRpbmc7XG5cdFx0aWYgKHNraW4gPT09ICd2ZWN0b3ItMjAyMicpIHtcblx0XHRcdG91dGVyTmF2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRoZWFkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0ZXJOYXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduYXYnKTtcblx0XHRcdGhlYWRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1xuXHRcdH1cblx0XHRvdXRlck5hdi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGAke2lkfS1sYWJlbGApO1xuXHRcdC8vIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgdXNlZCBoZXJlIChvdXRlck5hdkNsYXNzKTpcblx0XHQvLyAqIG13LXBvcnRsZXQgdmVjdG9yLW1lbnUgdmVjdG9yLW1lbnUtKlxuXHRcdC8vICogbXctcG9ydGxldFxuXHRcdC8vICogY29sdW1uLW9uZVxuXHRcdC8vIFZlY3RvciBnZXR0aW5nIHZlY3Rvci1tZW51LWVtcHR5IEZJWE1FIFRPRE9cblx0XHRvdXRlck5hdi5jbGFzc05hbWUgPSBgJHtvdXRlck5hdkNsYXNzfSBlbXB0eVBvcnRsZXRgO1xuXHRcdG91dGVyTmF2LmlkID0gaWQ7XG5cdFx0aWYgKG5leHRub2RlICYmIG5leHRub2RlLnBhcmVudE5vZGUgPT09IHJvb3QpIHtcblx0XHRcdHJvb3QuaW5zZXJ0QmVmb3JlKG91dGVyTmF2LCBuZXh0bm9kZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvb3QuYXBwZW5kQ2hpbGQob3V0ZXJOYXYpO1xuXHRcdH1cblx0XHRoZWFkaW5nLmlkID0gYCR7aWR9LWxhYmVsYDtcblx0XHRjb25zdCB1bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG5cdFx0aWYgKHNraW4gPT09ICd2ZWN0b3InIHx8IHNraW4gPT09ICd2ZWN0b3ItMjAyMicpIHtcblx0XHRcdGhlYWRpbmcuc2V0QXR0cmlidXRlKCdmb3InLCBgJHtpZH0tZHJvcGRvd24tY2hlY2tib3hgKTtcblx0XHRcdHVsLmNsYXNzTmFtZSA9ICd2ZWN0b3ItbWVudS1jb250ZW50LWxpc3QnO1xuXHRcdFx0aGVhZGluZy5jbGFzc05hbWUgPSAndmVjdG9yLW1lbnUtaGVhZGluZyB2ZWN0b3ItZHJvcGRvd24tbGFiZWwnO1xuXHRcdFx0Ly8gYWRkIGludmlzaWJsZSBjaGVja2JveCB0byBrZWVwIG1lbnUgb3BlbiB3aGVuIGNsaWNrZWRcblx0XHRcdC8vIHNpbWlsYXIgdG8gdGhlIHAtY2FjdGlvbnMgKFwiTW9yZVwiKSBtZW51XG5cdFx0XHRpZiAob3V0ZXJOYXZDbGFzcy5pbmNsdWRlcygndmVjdG9yLW1lbnUtZHJvcGRvd24nKSkge1xuXHRcdFx0XHRjb25zdCBjaGtib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdFx0XHRjaGtib3guaWQgPSBgJHtpZH0tZHJvcGRvd24tY2hlY2tib3hgO1xuXHRcdFx0XHRjaGtib3guY2xhc3NOYW1lID0gJ3ZlY3Rvci1tZW51LWNoZWNrYm94IHZlY3Rvci1kcm9wZG93bi1jaGVja2JveCc7XG5cdFx0XHRcdGNoa2JveC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnY2hlY2tib3gnKTtcblx0XHRcdFx0Y2hrYm94LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgYCR7aWR9LWxhYmVsYCk7XG5cdFx0XHRcdG91dGVyTmF2LmFwcGVuZENoaWxkKGNoa2JveCk7XG5cdFx0XHRcdC8vIFZlY3RvciBnZXRzIGl0cyB0aXRsZSBpbiBhIHNwYW47IGFsbCBvdGhlcnMgZXhjZXB0XG5cdFx0XHRcdC8vIGdvbmdiaSBoYXZlIG5vIHRpdGxlLCBhbmQgaXQgaGFzIG5vIHNwYW5cblx0XHRcdFx0Y29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0c3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG5cdFx0XHRcdGhlYWRpbmcuYXBwZW5kQ2hpbGQoc3Bhbik7XG5cdFx0XHRcdGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRcdGEuaHJlZiA9ICcjJztcblx0XHRcdFx0JChhKS5vbignY2xpY2snLCAoZSkgPT4ge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGhlYWRpbmcuYXBwZW5kQ2hpbGQoYSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEJhc2ljYWxseSBqdXN0IEdvbmdiaVxuXHRcdFx0aGVhZGluZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG5cdFx0fVxuXHRcdG91dGVyTmF2LmFwcGVuZENoaWxkKGhlYWRpbmcpO1xuXHRcdGlmIChpbm5lckRpdkNsYXNzKSB7XG5cdFx0XHRjb25zdCBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0Ly8gVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSB1c2VkIGhlcmUgKGlubmVyRGl2Q2xhc3MpOlxuXHRcdFx0Ly8gKiB2ZWN0b3ItbWVudS1jb250ZW50XG5cdFx0XHQvLyAqIG13LXBvcnRsZXQtYm9keVxuXHRcdFx0Ly8gKiBtdy1wb3J0bGV0LXR3aW5rbGVcblx0XHRcdC8vICogcG9ydGxldFxuXHRcdFx0aW5uZXJEaXYuY2xhc3NOYW1lID0gaW5uZXJEaXZDbGFzcztcblx0XHRcdGlubmVyRGl2LmFwcGVuZENoaWxkKHVsKTtcblx0XHRcdG91dGVyTmF2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0ZXJOYXYuYXBwZW5kQ2hpbGQodWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0ZXJOYXY7XG5cdH07XG5cdC8qKlxuXHQgKiAqKioqKioqKioqKioqKioqIFR3aW5rbGUuYWRkUG9ydGxldExpbmsoKSAqKioqKioqKioqKioqKioqXG5cdCAqIEJ1aWxkcyBhIHBvcnRsZXQgbWVudSBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldCwgYW5kIGFkZCB0aGUgcG9ydGxldCBsaW5rLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gdGFzayAtLSBFaXRoZXIgYSBVUkwgZm9yIHRoZSBwb3J0bGV0IGxpbmsgb3IgYSBmdW5jdGlvbiB0byBleGVjdXRlLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRvb2x0aXBcblx0ICogQHJldHVybiB7T2JqZWN0fSBsaW5rXG5cdCAqL1xuXHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rID0gKHRhc2ssIHRleHQsIGlkLCB0b29sdGlwKSA9PiB7XG5cdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZigncG9ydGxldEFyZWEnKSAhPT0gbnVsbCkge1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0KFxuXHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ3BvcnRsZXRBcmVhJyksXG5cdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZigncG9ydGxldElkJyksXG5cdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZigncG9ydGxldE5hbWUnKSxcblx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdwb3J0bGV0VHlwZScpLFxuXHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ3BvcnRsZXROZXh0Jylcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnN0IGxpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdwb3J0bGV0SWQnKSxcblx0XHRcdHR5cGVvZiB0YXNrID09PSAnc3RyaW5nJyA/IHRhc2sgOiAnIycsXG5cdFx0XHR0ZXh0LFxuXHRcdFx0aWQsXG5cdFx0XHR0b29sdGlwXG5cdFx0KTtcblx0XHQkYm9keS5maW5kKCcuY2xpZW50LWpzIC5za2luLXZlY3RvciAjcC1jYWN0aW9ucycpLmNzcygnbWFyZ2luLXJpZ2h0JywgJ2luaXRpYWwnKTtcblx0XHRpZiAodHlwZW9mIHRhc2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdCQobGluaylcblx0XHRcdFx0LmZpbmQoJ2EnKVxuXHRcdFx0XHQub24oJ2NsaWNrJywgKGV2KSA9PiB7XG5cdFx0XHRcdFx0dGFzaygpO1xuXHRcdFx0XHRcdGV2LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoJC5jb2xsYXBzaWJsZVRhYnMpIHtcblx0XHRcdCQuY29sbGFwc2libGVUYWJzLmhhbmRsZVJlc2l6ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbGluaztcblx0fTtcblx0LyoqXG5cdCAqICoqKioqKioqKioqKioqKiogR2VuZXJhbCBpbml0aWFsaXphdGlvbiBjb2RlICoqKioqKioqKioqKioqKipcblx0ICovXG5cdGNvbnN0IHNjcmlwdHVybCA9IG13LnV0aWwuZ2V0VXJsKGBVc2VyOiR7bXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpfS90d2lua2xlb3B0aW9ucy5qc2AsIHtcblx0XHRhY3Rpb246ICdyYXcnLFxuXHRcdGN0eXBlOiAndGV4dC9qYXZhc2NyaXB0Jyxcblx0XHRoYXBweTogJ3llcycsXG5cdH0pO1xuXHQvLyBSZXRyaWV2ZSB0aGUgdXNlcidzIFR3aW5rbGUgcHJlZmVyZW5jZXMgKHdpbmRvdy5Ud2lua2xlLnByZWZzKVxuXHRUd2lua2xlLnByZWZzIHx8PSB7fTtcblx0bXcubG9hZGVyXG5cdFx0LmdldFNjcmlwdChzY3JpcHR1cmwpXG5cdFx0LmZhaWwoKCkgPT4ge1xuXHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5pyq6IO95Yqg6L295oKo55qEVHdpbmtsZeWPguaVsOiuvue9ricsICfmnKrog73ovInlhaXmgqjnmoRUd2lua2xl5YGP5aW96Kit5a6aJyksIHtcblx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZScsXG5cdFx0XHR9KTtcblx0XHR9KVxuXHRcdC5hbHdheXMoKCkgPT4ge1xuXHRcdFx0JChUd2lua2xlLmxvYWQpO1xuXHRcdH0pO1xuXHQvLyBEZXZlbG9wZXJzOiB5b3UgY2FuIGltcG9ydCBjdXN0b20gVHdpbmtsZSBtb2R1bGVzIGhlcmVcblx0Ly8gRm9yIGV4YW1wbGUsIG13LmxvYWRlci5sb2FkKHNjcmlwdHBhdGhiZWZvcmUgKyBcIlVzZXI6VW5jbGVEb3VnZ2llL21vcmViaXRzLXRlc3QuanNcIiArIHNjcmlwdHBhdGhhZnRlcik7XG5cdFR3aW5rbGUubG9hZCA9ICgpID0+IHtcblx0XHQvLyBEb24ndCBhY3RpdmF0ZSBvbiBzcGVjaWFsIHBhZ2VzIG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGhlcmUsIHNvXG5cdFx0Ly8gdGhhdCBvdGhlcnMgbG9hZCBmYXN0ZXIsIGVzcGVjaWFsbHkgdGhlIHdhdGNobGlzdC5cblx0XHRsZXQgYWN0aXZlU3BlY2lhbFBhZ2VMaXN0ID0gWydCbG9jaycsICdDb250cmlidXRpb25zJywgJ0FidXNlTG9nJywgJ1JlY2VudGNoYW5nZXMnLCAnUmVjZW50Y2hhbmdlc2xpbmtlZCddOyAvLyB3Z1JlbGV2YW50VXNlck5hbWUgZGVmaW5lZCBmb3Igbm9uLXN5c29wcyBvbiBTcGVjaWFsOkJsb2NrXG5cdFx0aWYgKE1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHRhY3RpdmVTcGVjaWFsUGFnZUxpc3QgPSBbXG5cdFx0XHRcdC4uLmFjdGl2ZVNwZWNpYWxQYWdlTGlzdCxcblx0XHRcdFx0J0RlbGV0ZWRDb250cmlidXRpb25zJyxcblx0XHRcdFx0J1ByZWZpeGluZGV4Jyxcblx0XHRcdFx0J0Jyb2tlblJlZGlyZWN0cycsXG5cdFx0XHRdO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAtMSAmJlxuXHRcdFx0IWFjdGl2ZVNwZWNpYWxQYWdlTGlzdC5pbmNsdWRlcyhtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBQcmV2ZW50IGNsaWNramFja2luZ1xuXHRcdGlmICh3aW5kb3cudG9wICE9PSB3aW5kb3cuc2VsZikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBTZXQgY3VzdG9tIEFwaS1Vc2VyLUFnZW50IGhlYWRlciwgZm9yIHNlcnZlci1zaWRlIGxvZ2dpbmcgcHVycG9zZXNcblx0XHRUd2lua2xlLnVzZXJBZ2VudCA9ICdUd2lua2xlLzEuMSc7XG5cdFx0TW9yZWJpdHMud2lraS5hcGkuc2V0QXBpVXNlckFnZW50KFR3aW5rbGUudXNlckFnZW50KTtcblx0XHRUd2lua2xlLmRpc2FibGVkTW9kdWxlcyA9IFsuLi5Ud2lua2xlLmdldFByZWYoJ2Rpc2FibGVkTW9kdWxlcycpLCAuLi5Ud2lua2xlLmdldFByZWYoJ2Rpc2FibGVkU3lzb3BNb2R1bGVzJyldO1xuXHRcdC8vIFJlZGVmaW5lIGFkZEluaXRDYWxsYmFjayBzbyB0aGF0IGFueSBtb2R1bGVzIGJlaW5nIGxvYWRlZCBub3cgb24gYXJlIGRpcmVjdGx5XG5cdFx0Ly8gaW5pdGlhbGlzZWQgcmF0aGVyIHRoYW4gYWRkZWQgdG8gaW5pdENhbGxiYWNrcyBhcnJheVxuXHRcdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrID0gKGZ1bmMsIG5hbWUpID0+IHtcblx0XHRcdGlmICghbmFtZSB8fCAhVHdpbmtsZS5kaXNhYmxlZE1vZHVsZXMuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0ZnVuYygpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gSW5pdGlhbGlzZSBtb2R1bGVzIHRoYXQgd2VyZSBzYXZlZCBpbiBpbml0Q2FsbGJhY2tzIGFycmF5XG5cdFx0Zm9yIChjb25zdCBtb2R1bGUgb2YgVHdpbmtsZS5pbml0Q2FsbGJhY2tzKSB7XG5cdFx0XHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhtb2R1bGUuZnVuYywgbW9kdWxlLm5hbWUpO1xuXHRcdH1cblx0XHQvLyBJbmNyZWFzZXMgdGV4dCBzaXplIGluIFR3aW5rbGUgZGlhbG9ncywgaWYgc28gY29uZmlndXJlZFxuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ2RpYWxvZ0xhcmdlRm9udCcpKSB7XG5cdFx0XHRtdy51dGlsLmFkZENTUyhcblx0XHRcdFx0Jy5tb3JlYml0cy1kaWFsb2ctY29udGVudCwubW9yZWJpdHMtZGlhbG9nLWZvb3Rlcmxpbmtze2ZvbnQtc2l6ZToxMDAlIWltcG9ydGFudH0ubW9yZWJpdHMtZGlhbG9nIGlucHV0LC5tb3JlYml0cy1kaWFsb2cgc2VsZWN0LC5tb3JlYml0cy1kaWFsb2ctY29udGVudCBidXR0b257Zm9udC1zaXplOmluaGVyaXQgIWltcG9ydGFudH0nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvLyBIaWRlIHRoZSBsaW5nZXJpbmcgc3BhY2UgaWYgdGhlIFRXIG1lbnUgaXMgZW1wdHlcblx0XHRjb25zdCBpc1ZlY3RvciA9IFsndmVjdG9yJywgJ3ZlY3Rvci0yMDIyJ10uaW5jbHVkZXMobXcuY29uZmlnLmdldCgnc2tpbicpKTtcblx0XHRpZiAoaXNWZWN0b3IgJiYgVHdpbmtsZS5nZXRQcmVmKCdwb3J0bGV0VHlwZScpID09PSAnbWVudScgJiYgJGJvZHkuZmluZCgnI3AtdHdpbmtsZScpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0JGJvZHkuZmluZCgnI3AtY2FjdGlvbnMnKS5jc3MoJ21hcmdpbi1yaWdodCcsICdpbml0aWFsJyk7XG5cdFx0fVxuXHR9O1xuXHQvKipcblx0ICogVHdpbmtsZS1zcGVjaWZpYyB1dGlsaXR5IGZ1bmN0aW9ucyBzaGFyZWQgYnkgbXVsdGlwbGUgbW9kdWxlc1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGZpcnN0XG5cdCAqIEBwYXJhbSB7Kn0gc2Vjb25kXG5cdCAqL1xuXHQvLyBVc2VkIGluIGJhdGNoLCB1bmxpbmssIGFuZCBkZXByb2QgdG8gc29ydCBwYWdlcyBieSBuYW1lc3BhY2UsIGFzXG5cdC8vIGpzb24gZm9ybWF0dmVyc2lvbj0yIHNvcnRzIGJ5IHBhZ2VpZCBpbnN0ZWFkICgjMTI1MSlcblx0VHdpbmtsZS5zb3J0QnlOYW1lc3BhY2UgPSAoZmlyc3QsIHNlY29uZCkgPT4ge1xuXHRcdHJldHVybiBmaXJzdC5ucyAtIHNlY29uZC5ucyB8fCAoZmlyc3QudGl0bGUgPiBzZWNvbmQudGl0bGUgPyAxIDogLTEpO1xuXHR9O1xuXHQvLyBVc2VkIGluIHVubGluayBsaXN0aW5ncyB0byBsaW5rIHRoZSBwYWdlIHRpdGxlXG5cdFR3aW5rbGUuZ2VuZXJhdGVCYXRjaFBhZ2VMaW5rcyA9IChjaGVja2JveCkgPT4ge1xuXHRcdGNvbnN0ICRjaGVja2JveCA9ICQoY2hlY2tib3gpO1xuXHRcdGNvbnN0IGxpbmsgPSBNb3JlYml0cy5odG1sTm9kZSgnYScsICRjaGVja2JveC52YWwoKSk7XG5cdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3R3LWJhdGNocGFnZS1saW5rJyk7XG5cdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybCgkY2hlY2tib3gudmFsKCkpKTtcblx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuXHRcdCRjaGVja2JveC5uZXh0KCkucHJlcGVuZChbbGluaywgJyAnXSk7XG5cdH07XG59KShqUXVlcnkpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcblxuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlYXJ2LmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZWFydigkKSB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHQvKipcblx0ICogdHdpbmtsZWFydi5qczogQVJWIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IFRhYiAoXCJBUlZcIilcblx0ICogQWN0aXZlIG9uOiBBbnkgcGFnZSB3aXRoIHJlbGV2YW50IHVzZXIgbmFtZSAodXNlcnNwYWNlLCBjb250cmlicywgZXRjLilcblx0ICovXG5cdFR3aW5rbGUuYXJ2ID0gKCkgPT4ge1xuXHRcdGNvbnN0IHVzZXJuYW1lID0gbXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyk7XG5cdFx0aWYgKCF1c2VybmFtZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBpc0lQID0gbXcudXRpbC5pc0lQQWRkcmVzcyh1c2VybmFtZSk7XG5cdFx0Y29uc3QgdGl0bGUgPSBpc0lQXG5cdFx0XHQ/IHdpbmRvdy53Z1VMUygn5oql5ZGKSVDnu5nnrqHnkIblkZgnLCAn5aCx5ZGKSVDntabnrqHnkIblk6EnKVxuXHRcdFx0OiB3aW5kb3cud2dVTFMoJ+aKpeWRiueUqOaIt+e7meeuoeeQhuS6uuWRmCcsICfloLHlkYrkvb/nlKjogIXntabnrqHnkIbkurrlk6EnKTtcblx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRUd2lua2xlLmFydi5jYWxsYmFjayh1c2VybmFtZSwgaXNJUCk7XG5cdFx0XHR9LFxuXHRcdFx0d2luZG93LndnVUxTKCflkYrnirYnLCAn5ZGK54uAJyksXG5cdFx0XHQndHctYXJ2Jyxcblx0XHRcdHRpdGxlXG5cdFx0KTtcblx0fTtcblx0VHdpbmtsZS5hcnYuY2FsbGJhY2sgPSAodWlkLCBpc0lQKSA9PiB7XG5cdFx0aWYgKHVpZCA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKSB7XG5cdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfkvaDkuI3mg7PmiqXlkYrkvaDoh6rlt7HvvIzlr7nlkKfvvJ8nLCAn5L2g5LiN5oOz5aCx5ZGK5L2g6Ieq5bex77yM5bCN5ZCn77yfJyksIHtcblx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHR0YWc6ICd0d2lua2xlYXJ2Jyxcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgNTAwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCfmiqXlkYrnlKjmiLfnu5nnrqHnkIbkurrlkZgnLCAn5aCx5ZGK5L2/55So6ICF57Wm566h55CG5Lq65ZOhJykpO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflkYrnirborr7nva4nLCAn5ZGK54uA6Kit5a6aJyksICdIOlRXL1BSRUYjYXJ2Jyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcj5ZGK54uAJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS5hcnYuY2FsbGJhY2suZXZhbHVhdGUpO1xuXHRcdGNvbnN0IGNhdGVnb3JpZXMgPSBmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdG5hbWU6ICdjYXRlZ29yeScsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6nmiqXlkYrnsbvlnovvvJonLCAn6YG45pOH5aCx5ZGK6aGe5Yil77yaJyksXG5cdFx0XHRldmVudDogVHdpbmtsZS5hcnYuY2FsbGJhY2suY2hhbmdlQ2F0ZWdvcnksXG5cdFx0fSk7XG5cdFx0Y2F0ZWdvcmllcy5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnoLTlnY/vvIhMSUI6VklQ77yJJywgJ+egtOWjnu+8iExJQjpWSVDvvIknKSxcblx0XHRcdHZhbHVlOiAnYWl2Jyxcblx0XHR9KTtcblx0XHRjYXRlZ29yaWVzLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e8lui+keS6ieiuru+8iExJQjpFV0lQ77yJJywgJ+e3qOi8r+eIreitsO+8iExJQjpFV0lQ77yJJyksXG5cdFx0XHR2YWx1ZTogJ2V3aXAnLFxuXHRcdH0pO1xuXHRcdGNhdGVnb3JpZXMuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35ZCN77yITElCOlVBQe+8iScsICfkvb/nlKjogIXlkI3nqLHvvIhMSUI6VUFB77yJJyksXG5cdFx0XHR2YWx1ZTogJ3VzZXJuYW1lJyxcblx0XHRcdGRpc2FibGVkOiBtdy51dGlsLmlzSVBBZGRyZXNzKHVpZCksXG5cdFx0fSk7XG5cdFx0Y2F0ZWdvcmllcy5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflgoDlhKHosIPmn6XvvIhMSUI6U1BJ77yJJywgJ+WCgOWEoeiqv+afpe+8iExJQjpTUEnvvIknKSxcblx0XHRcdHZhbHVlOiAnc3BpJyxcblx0XHRcdGRpc2FibGVkOiBtdy51dGlsLmlzSVBBZGRyZXNzKHVpZCksXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRsYWJlbDogJycsXG5cdFx0XHRzdHlsZTogJ2NvbG9yOiAjZjAwJyxcblx0XHRcdGlkOiAndHdpbmtsZS1hcnYtYmxvY2t3YXJuaW5nJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6ICdXb3JrIGFyZWEnLFxuXHRcdFx0bmFtZTogJ3dvcmtfYXJlYScsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0XHRsYWJlbDogJ+aPkOS6pCcsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2hpZGRlbicsXG5cdFx0XHRuYW1lOiAndWlkJyxcblx0XHRcdHZhbHVlOiB1aWQsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gZm9ybS5yZW5kZXIoKTtcblx0XHRXaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFdpbmRvdy5kaXNwbGF5KCk7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIHVzZXIgaXMgYmxvY2tlZCwgdXBkYXRlIG5vdGljZVxuXHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0bGlzdDogJ2Jsb2NrcycsXG5cdFx0XHRia3Byb3A6ICdyYW5nZXxmbGFncycsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHR9O1xuXHRcdGlmIChpc0lQKSB7XG5cdFx0XHRxdWVyeS5ia2lwID0gdWlkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRxdWVyeS5ia3VzZXJzID0gdWlkO1xuXHRcdH1cblx0XHRuZXcgTW9yZWJpdHMud2lraS5hcGkod2luZG93LndnVUxTKCfmo4Dmn6XnlKjmiLfnmoTlsIHnpoHnirbmgIEnLCAn5qqi5p+l5L2/55So6ICF55qE5bCB6Y6W54uA5oWLJyksIHF1ZXJ5LCAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBibG9ja2xpc3QgPSBhcGlvYmouZ2V0UmVzcG9uc2UoKS5xdWVyeS5ibG9ja3M7XG5cdFx0XHRpZiAoYmxvY2tsaXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBbYmxvY2tdID0gYmxvY2tsaXN0O1xuXHRcdFx0XHRsZXQgbWVzc2FnZSA9XG5cdFx0XHRcdFx0KGlzSVAgPyB3aW5kb3cud2dVTFMoJ+atpElQ5Zyw5Z2AJywgJ+atpElQ5L2N5Z2AJykgOiB3aW5kb3cud2dVTFMoJ+atpOi0puWPtycsICfmraTos6zomZ8nKSkgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5bey57uP6KKrJywgJ+W3sue2k+iiqycpICtcblx0XHRcdFx0XHQoYmxvY2sucGFydGlhbCA/ICfpg6jliIYnIDogJycpO1xuXHRcdFx0XHQvLyBTdGFydCBhbmQgZW5kIGRpZmZlciwgcmFuZ2UgYmxvY2tlZFxuXHRcdFx0XHRtZXNzYWdlICs9IGJsb2NrLnJhbmdlc3RhcnQgPT09IChibG9jay5yYW5nZWVuZCA/ICfmrrUnIDogJycpICsgd2luZG93LndnVUxTKCflsIHnpoHjgIInLCAn5bCB6Y6W44CCJyk7XG5cdFx0XHRcdGlmIChibG9jay5wYXJ0aWFsKSB7XG5cdFx0XHRcdFx0JGJvZHkuZmluZCgnI3R3aW5rbGUtYXJ2LWJsb2Nrd2FybmluZycpLmNzcygnY29sb3InLCAnYmxhY2snKTsgLy8gTGVzcyBzZXZlcmVcblx0XHRcdFx0fVxuXHRcdFx0XHQkYm9keS5maW5kKCcjdHdpbmtsZS1hcnYtYmxvY2t3YXJuaW5nJykudGV4dChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KS5wb3N0KCk7XG5cdFx0Ly8gV2UgbXVzdCBpbml0IHRoZVxuXHRcdGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuXHRcdGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdHJlc3VsdC5jYXRlZ29yeS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdH07XG5cdFR3aW5rbGUuYXJ2Lmx0YV9saXN0ID0gW1xuXHRcdHtcblx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivt+mAieaLqScsICfoq4vpgbjmk4cnKSxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLmFydi5jYWxsYmFjay5zb2NrbWFzdGVyX2NoYW5nZWQgPSAoZSkgPT4ge1xuXHRcdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLnNldF9zb2NrbWFzdGVyKGUudGFyZ2V0LnZhbHVlKTtcblx0fTtcblx0VHdpbmtsZS5hcnYuY2FsbGJhY2suc2V0X3NvY2ttYXN0ZXIgPSAoc29ja21hc3RlcikgPT4ge1xuXHRcdCRib2R5LmZpbmQoJ2NvZGUudHctYXJ2LXNvY2ttYXN0ZXInKS50ZXh0KCd7eycuY29uY2F0KCdzdWJzdDonLCBgU29ja3N1c3BlY3Rub3RpY2V8MT0ke3NvY2ttYXN0ZXJ9fX1gKSk7XG5cdH07XG5cdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLmNoYW5nZUNhdGVnb3J5ID0gKGUpID0+IHtcblx0XHRjb25zdCB2YWx1ZV8gPSBlLnRhcmdldC52YWx1ZTtcblx0XHRjb25zdCByb290XyA9IGUudGFyZ2V0LmZvcm07XG5cdFx0Y29uc3QgW29sZF9hcmVhXSA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyb290XywgJ3dvcmtfYXJlYScpO1xuXHRcdGxldCB3b3JrX2FyZWEgPSBudWxsO1xuXHRcdGNvbnN0IHByZXZpZXdsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdHByZXZpZXdsaW5rLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcblx0XHRwcmV2aWV3bGluay50ZXh0Q29udGVudCA9IHdpbmRvdy53Z1VMUygn6aKE6KeIJywgJ+mgkOimvScpO1xuXHRcdCQocHJldmlld2xpbmspLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLnByZXZpZXcocm9vdF8pO1xuXHRcdH0pO1xuXHRcdHN3aXRjaCAodmFsdWVfKSB7XG5cdFx0XHRjYXNlICdld2lwJzpcblx0XHRcdFx0d29ya19hcmVhID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aKpeWRiue8lui+keS6ieiuricsICfloLHlkYrnt6jovK/niK3orbAnKSxcblx0XHRcdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdkeW5pbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3BhZ2UnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ebuOWFs+mhtemdou+8micsICfnm7jpl5zpoIHpnaLvvJonKSxcblx0XHRcdFx0XHRzdWJsYWJlbDogd2luZG93LndnVUxTKCfpobXpnaLvvJonLCAn6aCB6Z2i77yaJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflpoLkuI3luIzmnJvorqnmiqXlkYrpk77mjqXliLDpobXpnaLvvIzor7fnlZnnqbonLCAn5aaC5LiN5biM5pyb6K6T5aCx5ZGK6YCj57WQ5Yiw6aCB6Z2i77yM6KuL55WZ56m6JyksXG5cdFx0XHRcdFx0bWluOiAxLFxuXHRcdFx0XHRcdG1heDogMTAsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivhOiuuu+8micsICfoqZXoq5bvvJonKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdGlkOiAnYXJ2cHJldmlldycsXG5cdFx0XHRcdFx0bGFiZWw6IFtwcmV2aWV3bGlua10sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ3R3aW5rbGVhcnYtcHJldmlld2JveCcsXG5cdFx0XHRcdFx0c3R5bGU6ICdkaXNwbGF5OiBub25lJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRcdFx0b2xkX2FyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod29ya19hcmVhLCBvbGRfYXJlYSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAndXNlcm5hbWUnOlxuXHRcdFx0XHR3b3JrX2FyZWEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5oql5ZGK5LiN5b2T55So5oi35ZCNJywgJ+WgseWRiuS4jeeVtuS9v+eUqOiAheWQjeeosScpLFxuXHRcdFx0XHRcdG5hbWU6ICd3b3JrX2FyZWEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiN5b2T55So5oi35ZCN57G75Z6LJywgJ+S4jeeVtuS9v+eUqOiAheWQjeeosemhnuWIpScpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmnInlhb3moaPmoYjppobkuI3lhYHorrjkvb/nlKjluKbmnInor6/lr7zmgKfjgIHlrqPkvKDmgKfjgIHkvq7ovrHmgKfmiJbnoLTlnY/mgKfnmoTnlKjmiLflkI3jgILmraTlpJbvvIzkvb/nlKjln5/lkI3lj4rpgq7nrrHlnLDlnYDnmoTnlKjmiLflkI3kuqbooqvnpoHmraLjgILov5nkupvlh4bliJnkv7HlupTlupTnlKjoh7PnlKjmiLflkI3lj4rnrb7lkI3jgILlnKjlhbbku5bor63oqIDkuK3kuI3lvZPnmoTnlKjmiLflkI3miJbpgJrov4fplJnmi7zjgIHmm7/ku6PjgIHmmpfnpLrjgIHmi4blrZfmiJbku7vkvZXpl7TmjqXmlrnms5Xovr7miJDnmoTpnZ7lpqXlvZPnlKjmiLflkI3lkIzmoLfop4bkuLrov53op4TjgIInLFxuXHRcdFx0XHRcdFx0J+acieeNuOaqlOahiOmkqOS4jeWFgeioseS9v+eUqOW4tuacieiqpOWwjuaAp+OAgeWuo+WCs+aAp+OAgeS+rui+seaAp+aIluegtOWjnuaAp+eahOS9v+eUqOiAheWQjeeoseOAguatpOWklu+8jOS9v+eUqOWfn+WQjeWPiumbu+WtkOS/oeeuseS9jeWdgOeahOS9v+eUqOiAheWQjeeoseS6puiiq+emgeatouOAgumAmeS6m+a6luWJh+S/seaHieaHieeUqOiHs+S9v+eUqOiAheWQjeeoseWPiuewveWQjeOAguWcqOWFtuS7luiqnuiogOS4reS4jeeVtueahOS9v+eUqOiAheWQjeeoseaIlumAmumBjumMr+aLvOOAgeabv+S7o+OAgeaal+ekuuOAgeaLhuWtl+aIluS7u+S9lemWk+aOpeaWueazlemBlOaIkOeahOmdnuWmpeeVtuS9v+eUqOiAheWQjeeoseWQjOaoo+imlueCuumBleimj+OAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRuYW1lOiAnYXJ2dHlwZScsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor6/lr7zmgKfnlKjmiLflkI0nLCAn6Kqk5bCO5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoJ+ivr+WvvOaApycsICfoqqTlsI7mgKcnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfor6/lr7zmgKfnlKjmiLflkI3pmpDlkKvnnYDkuI7otKHnjK7ogIXnm7jlhbPmiJbor6/lr7zku5bkurrnmoTkuovmg4XjgILkvovlpoLvuLDkuI3lrp7op4LngrnjgIHmmpfnpLrotKblj7fmi6XmnInnibnlrprmnYPpmZDmiJbmmpfnpLror6XotKblj7flubbpnZ7nlLHkuIDkurrmi6XmnInogIzmmK/nlLHkuIDkuKrnu4TnvqTjgIHkuIDkuKrpobnnm67miJbkuIDkuKrpm4bkvZPov5DkvZzjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfoqqTlsI7mgKfkvb/nlKjogIXlkI3nqLHpmrHlkKvokZfoiIfosqLnjbvogIXnm7jpl5zmiJboqqTlsI7ku5bkurrnmoTkuovmg4XjgILkvovlpoLvuLDkuI3lr6bop4Dpu57jgIHmmpfnpLros6zomZ/mk4HmnInnibnlrprmrIrpmZDmiJbmmpfnpLroqbLos6zomZ/kuKbpnZ7nlLHkuIDkurrmk4HmnInogIzmmK/nlLHkuIDlgIvnvqTntYTjgIHkuIDlgIvoqIjnlavmiJbkuIDlgIvpm4bpq5TpgYvkvZzjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflrqPkvKDmgKfnlKjmiLflkI0nLCAn5a6j5YKz5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoJ+Wuo+S8oOaApycsICflrqPlgrPmgKcnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflrqPkvKDmgKfnlKjmiLflkI3kvJrkuo7mnInlhb3moaPmoYjppobkuIrotbfmjqjplIDkuIDkuKrnu4TnvqTmiJbkuIDpl7Tlhazlj7jnmoTkvZznlKjjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCflrqPlgrPmgKfkvb/nlKjogIXlkI3nqLHmnIPmlrzmnInnjbjmqpTmoYjppKjkuIrotbfmjqjpirfkuIDlgIvnvqTntYTmiJbkuIDplpPlhazlj7jnmoTkvZznlKjjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmmpfnpLrlubbpnZ7nlLHkuIDkurrmi6XmnIknLCAn5pqX56S65Lim6Z2e55Sx5LiA5Lq65pOB5pyJJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAnc2hhcmVkJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmr4/kuKrotKblj7flj6rlj6/ku6Xku6PooajkuKrkurrvvIjlrrnorrjkuIDkupvkvovlpJbmg4XlhrXvvInvvIzmiYDmnInkuI7ku5bkurrliIbkuqvotKblj7fnmoTooYzkuLrvvIjljIXmi6zliIbkuqvotKblj7flr4bnoIHvvInlnYfooqvnpoHmraLjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfmr4/lgIvos6zomZ/lj6rlj6/ku6Xku6PooajlgIvkurrvvIjlrrnoqLHkuIDkupvkvovlpJbmg4Xms4HvvInvvIzmiYDmnInoiIfku5bkurrliIbkuqvos6zomZ/nmoTooYzngrrvvIjljIXmi6zliIbkuqvos6zomZ/lr4bnorzvvInlnYfooqvnpoHmraLjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkvq7ovrHmgKfnlKjmiLflkI0nLCAn5L6u6L6x5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAn5L6u6L6x5oCnJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfkvq7ovrHmgKfnlKjmiLflkI3ku6TljY/osIPnvJbovpHlj5jlvpflm7Dpmr7vvIznlJroh7Pml6Dlj6/og73jgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfkvq7ovrHmgKfkvb/nlKjogIXlkI3nqLHku6TljZToqr/nt6jovK/ororlvpflm7Dpm6PvvIznlJroh7PnhKHlj6/og73jgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnoLTlnY/mgKfnlKjmiLflkI0nLCAn56C05aOe5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoJ+egtOWdj+aApycsICfnoLTlo57mgKcnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfnoLTlnY/mgKfnlKjmiLflkI3ljIXmi6zkurrouqvmlLvlh7vjgIHkvKrlhpLku5bkurrmiJblhbbku5bkuIDliIfmnInnnYDmuIXmmbDlj6/op4HnmoTnoLTlnY/mnInlhb3moaPmoYjppobmhI/lm77nmoTnlKjmiLflkI3jgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfnoLTlo57mgKfkvb/nlKjogIXlkI3nqLHljIXmi6zkurrouqvmlLvmk4rjgIHlgb3lhpLku5bkurrmiJblhbbku5bkuIDliIfmnInokZfmuIXmmbDlj6/opovnmoTnoLTlo57mnInnjbjmqpTmoYjppKjmhI/lnJbnmoTkvb/nlKjogIXlkI3nqLHjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo6aG16Z2i5LiK6ZqQ6JeP55So5oi35ZCN77yI6ZyA55uR552j55qE55So5oi35ZCN6K+35Yu/5LqO56uZ5YaF5oql5ZGK77yM5Yu+6YCJ5q2k6aG55bm25LiN5p6E5oiQ6IO95Zyo56uZ5YaF5oql5ZGK55qE55CG55Sx77yJJyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo6aCB6Z2i5LiK6Zqx6JeP5L2/55So6ICF5ZCN56ix77yI6ZyA55uj552j55qE5L2/55So6ICF5ZCN56ix6KuL5Yu/5pa856uZ5YWn5aCx5ZGK77yM5Yu+6YG45q2k6aCF5Lim5LiN5qeL5oiQ6IO95Zyo56uZ5YWn5aCx5ZGK55qE55CG55Sx77yJJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+iLpeeUqOaIt+WQjeS4jeW9k+ivt+WLvumAieatpOmhue+8jOazqOaEj++8muivt+iAg+iZkeengeS4i+iBlOezu+euoeeQhuWRmOWkhOeQhuOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+iLpeS9v+eUqOiAheWQjeeoseS4jeeVtuiri+WLvumBuOatpOmghe+8jOazqOaEj++8muiri+iAg+aFruengeS4i+iBr+e1oeeuoeeQhuWToeiZleeQhuOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ2hpZGVuYW1lJyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdoaWRlbmFtZScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0c3R5bGU6ICdmb250LXdlaWdodDogYm9sZDsnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor4TorrrvvJonLCAn6KmV6KuW77yaJyksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ2FydnByZXZpZXcnLFxuXHRcdFx0XHRcdGxhYmVsOiBbcHJldmlld2xpbmtdLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6ICd0d2lua2xlYXJ2LXByZXZpZXdib3gnLFxuXHRcdFx0XHRcdHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEgPSB3b3JrX2FyZWEucmVuZGVyKCk7XG5cdFx0XHRcdG9sZF9hcmVhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHdvcmtfYXJlYSwgb2xkX2FyZWEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3NwaSc6XG5cdFx0XHRcdHdvcmtfYXJlYSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj5HotbflgoDlhKHosIPmn6UnLCAn55m86LW35YKA5YSh6Kq/5p+lJyksXG5cdFx0XHRcdFx0bmFtZTogJ3dvcmtfYXJlYScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdzb2NrbWFzdGVyJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+S4u+i0puWPt+eahOeUqOaIt+WQje+8iOS4jeWQq1VzZXI65YmN57yA77yJJywgJ+S4u+izrOiZn+eahOS9v+eUqOiAheWQjeeose+8iOS4jeWQq1VzZXI65a2X6aaW77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6IHJvb3RfLnVpZC52YWx1ZSxcblx0XHRcdFx0XHRldmVudDogVHdpbmtsZS5hcnYuY2FsbGJhY2suc29ja21hc3Rlcl9jaGFuZ2VkLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6ICd0d2lua2xlYXJ2LXNwaW5vdGljZWJveCcsXG5cdFx0XHRcdFx0c3R5bGU6ICdkaXNwbGF5OiBub25lJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdkeW5pbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NvY2twdXBwZXQnLFxuXHRcdFx0XHRcdGxhYmVsOiAn5YKA5YShJyxcblx0XHRcdFx0XHRzdWJsYWJlbDogJ+WCgOWEoe+8micsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflgoDlhKHnmoTnlKjmiLflkI3vvIjkuI3lkKtVc2VyOuWJjee8gO+8iScsICflgoDlhKHnmoTkvb/nlKjogIXlkI3nqLHvvIjkuI3lkKtVc2VyOuWtl+mmlu+8iScpLFxuXHRcdFx0XHRcdG1pbjogMixcblx0XHRcdFx0XHRtYXg6IDksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivgeaNru+8micsICforYnmk5rvvJonKSxcblx0XHRcdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6L6T5YWl6IO95aSf55So5p2l5L2T546w6L+Z5Lqb55So5oi35Y+v6IO95rul55So5aSa6YeN6LSm5Y+355qE6K+B5o2u77yM6L+Z6YCa5bi45YyF5ous6Iy26aaG5Y+R6KiA44CB6aG16Z2i5Y6G5Y+y5oiW5YW25LuW5pyJ5YWz55qE5L+h5oGv44CC6K+36YG/5YWN5Zyo5q2k5aSE5o+Q5L6b6Z2e5LiO5YKA5YSh5oiW5rul55So5aSa6YeN6LSm5Y+355u45YWz55qE5YW25LuW6K6o6K6644CCJyxcblx0XHRcdFx0XHRcdCfovLjlhaXog73lpKDnlKjkvobpq5Tnj77pgJnkupvkvb/nlKjogIXlj6/og73mv6vnlKjlpJrph43os6zomZ/nmoTorYnmk5rvvIzpgJnpgJrluLjljIXmi6zojLbppKjnmbzoqIDjgIHpoIHpnaLmrbflj7LmiJblhbbku5bmnInpl5znmoTos4foqIrjgILoq4vpgb/lhY3lnKjmraTomZXmj5DkvpvpnZ7oiIflgoDlhKHmiJbmv6vnlKjlpJrph43os6zomZ/nm7jpl5znmoTlhbbku5boqI7oq5bjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor7fmsYLnlKjmiLfmn6XmoLgnLCAn6KuL5rGC5L2/55So6ICF5p+l5qC4JyksXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdjaGVja3VzZXInLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+eUqOaIt+afpeaguOaYr+S4gOenjeeUqOS6juiOt+WPluWCgOWEoeaMh+aOp+ebuOWFs+aKgOacr+ivgeaNrueahOW3peWFt++8jOiLpeayoeacieato+W9k+eQhueUseWImeS4jeS8muS9v+eUqO+8jOaCqOW/hemhu+WcqOivgeaNruWtl+auteWFheWIhuino+mHiuS4uuS7gOS5iOmcgOimgeS9v+eUqOivpeW3peWFt+OAgueUqOaIt+afpeaguOS4jeS8mueUqOS6juWFrOW8gOi/nuaOpeeUqOaIt+i0puWPt+S9v+eUqOeahElQ5Zyw5Z2A44CCJyxcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So6ICF5p+l5qC45piv5LiA56iu55So5pa8542y5Y+W5YKA5YSh5oyH5o6n55u46Zec5oqA6KGT6K2J5pOa55qE5bel5YW377yM6Iul5rKS5pyJ5q2j55W255CG55Sx5YmH5LiN5pyD5L2/55So77yM5oKo5b+F6aCI5Zyo6K2J5pOa5qyE5L2N5YWF5YiG6Kej6YeL54K65LuA6bq86ZyA6KaB5L2/55So6Kmy5bel5YW344CC5L2/55So6ICF5p+l5qC45LiN5pyD55So5pa85YWs6ZaL6YCj5o6l5L2/55So6ICF6LOs6Jmf5L2/55So55qESVDkvY3lnYDjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ2FydnByZXZpZXcnLFxuXHRcdFx0XHRcdGxhYmVsOiBbcHJldmlld2xpbmtdLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6ICd0d2lua2xlYXJ2LXByZXZpZXdib3gnLFxuXHRcdFx0XHRcdHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRsYWJlbDogW1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfor7fkvb/nlKjluLjor4blhrPlrprmmK/lkKbku6UnLCAn6KuL5L2/55So5bi46K2Y5rG65a6a5piv5ZCm5LulJyksXG5cdFx0XHRcdFx0XHQkKCc8Y29kZT4nKS5hZGRDbGFzcygndHctYXJ2LXNvY2ttYXN0ZXInKS5jc3MoJ21hcmdpbicsICcycHg7JylbMF0sXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCfpgJrnn6XnlKjmiLfjgILov5nkuI3mmK/lv4XpobvnmoTvvIzlr7nkuo7mtonlj4rmlrDnlKjmiLfnmoTmiqXlkYrogIzoqIDvvIzpgJrnn6Xku5bku6zog73orqnmiqXlkYrmmL7lvpfmm7TlhazlubPvvIzkvYbmmK/orrjlpJrmg4XlhrXkuIvvvIjlpoLplb/mnJ/noLTlnY/ogIXvvInpgJrnn6Xmm7Tlj6/og73pgILlvpflhbblj43jgIInLFxuXHRcdFx0XHRcdFx0XHQn6YCa55+l5L2/55So6ICF44CC6YCZ5LiN5piv5b+F6aCI55qE77yM5bCN5pa85raJ5Y+K5paw5L2/55So6ICF55qE5aCx5ZGK6ICM6KiA77yM6YCa55+l5LuW5YCR6IO96K6T5aCx5ZGK6aGv5b6X5pu05YWs5bmz77yM5L2G5piv6Kix5aSa5oOF5rOB5LiL77yI5aaC6ZW35pyf56C05aOe6ICF77yJ6YCa55+l5pu05Y+v6IO96YGp5b6X5YW25Y+N44CCJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhID0gd29ya19hcmVhLnJlbmRlcigpO1xuXHRcdFx0XHQkKCdpbnB1dDp0ZXh0W25hbWU9c29ja3B1cHBldF0nLCB3b3JrX2FyZWEpLmZpcnN0KCkudmFsKHJvb3RfLnVpZC52YWx1ZSk7XG5cdFx0XHRcdG9sZF9hcmVhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHdvcmtfYXJlYSwgb2xkX2FyZWEpO1xuXHRcdFx0XHRyb290Xy5zcGlub3RpY2VwcmV2aWV3ZXIgPSBuZXcgTW9yZWJpdHMud2lraS5wcmV2aWV3KFxuXHRcdFx0XHRcdCQod29ya19hcmVhKS5maW5kKCcjdHdpbmtsZWFydi1zcGlub3RpY2Vib3gnKS5sYXN0KClbMF1cblx0XHRcdFx0KTtcblx0XHRcdFx0VHdpbmtsZS5hcnYuY2FsbGJhY2suc2V0X3NvY2ttYXN0ZXIocm9vdF8udWlkLnZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdC8qIGNhc2UgJ2Fpdic6ICovXG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR3b3JrX2FyZWEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5oql5ZGK55So5oi356C05Z2PJywgJ+WgseWRiuS9v+eUqOiAheegtOWjnicpLFxuXHRcdFx0XHRcdG5hbWU6ICd3b3JrX2FyZWEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmj5DmiqXlgoDlhKHlupTkvJjlhYjlj5HpgIHoh7PlgoDlhKHosIPmn6XvvIzpmaTpnZ7nm7jlhbPnmoTotKblj7fmnInpq5jpopHnjofjgIHmtonlj4rlpJrkuKrpobXpnaLnrYnntKfmgKXkuKXph43nmoTnoLTlnY/ooYzkuLrjgIInLFxuXHRcdFx0XHRcdFx0J+aPkOWgseWCgOWEoeaHieWEquWFiOeZvOmAgeiHs+WCgOWEoeiqv+afpe+8jOmZpOmdnuebuOmXnOeahOizrOiZn+aciemrmOmgu+eOh+OAgea2ieWPiuWkmuWAi+mggemdouetiee3iuaApeWatOmHjeeahOegtOWjnuihjOeCuuOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAncGFnZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55u45YWz6aG16Z2i77yaJywgJ+ebuOmXnOmggemdou+8micpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5aaC5LiN5biM5pyb6K6p5oql5ZGK6ZO+5o6l5Yiw6aG16Z2i77yM6K+355WZ56m6JywgJ+WmguS4jeW4jOacm+iuk+WgseWRiumAo+e1kOWIsOmggemdou+8jOiri+eVmeepuicpLFxuXHRcdFx0XHRcdHZhbHVlOiBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGUnKSB8fCAnJyxcblx0XHRcdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCB7dmFsdWV9ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRcdFx0Y29uc3Qgcm9vdCA9IGV2ZW50LnRhcmdldC5mb3JtO1xuXHRcdFx0XHRcdFx0aWYgKHZhbHVlID09PSAnJykge1xuXHRcdFx0XHRcdFx0XHRyb290LmJhZGlkLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0cm9vdC5nb29kaWQuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cm9vdC5iYWRpZC5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRyb290Lmdvb2RpZC5kaXNhYmxlZCA9IHJvb3QuYmFkaWQudmFsdWUgPT09ICcnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdiYWRpZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y+X5Yiw56C05Z2P55qE5L+u6K6i54mI5pys77yaJywgJ+WPl+WIsOegtOWjnueahOS/ruiogueJiOacrO+8micpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn55WZ56m65Lul55Wl6L+H5beu5byCJywgJ+eVmeepuuS7peeVpemBjuW3rueVsCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGVyZXZpZCcpIHx8ICcnLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd2YW5hcnRpY2xlJyksXG5cdFx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qge3ZhbHVlfSA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0XHRcdGNvbnN0IHJvb3QgPSBldmVudC50YXJnZXQuZm9ybTtcblx0XHRcdFx0XHRcdHJvb3QuZ29vZGlkLmRpc2FibGVkID0gdmFsdWUgPT09ICcnO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdnb29kaWQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+egtOWdj+WJjeeahOS/ruiuoueJiOacrO+8micsICfnoLTlo57liY3nmoTkv67oqILniYjmnKzvvJonKSxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+eVmeepuuS7peeVpei/h+W3ruW8gueahOi+g+aXqeeJiOacrCcsICfnlZnnqbrku6XnlaXpgY7lt67nlbDnmoTovIPml6nniYjmnKwnKSxcblx0XHRcdFx0XHR2YWx1ZTogbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd2YW5hcnRpY2xlZ29vZHJldmlkJykgfHwgJycsXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6ICFtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGUnKSB8fCBtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGVyZXZpZCcpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRuYW1lOiAnYXJ2dHlwZScsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflt7Llj5Hlh7rmnIDlkI7orablkYonLCAn5bey55m85Ye65pyA5b6M6K2m5ZGKJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAnZmluYWwnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCB56aB6L+H5pyf5ZCO6ZqP5Y2z56C05Z2PJywgJ+WwgemOlumBjuacn+W+jOmaqOWNs+egtOWjnicpLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ3Bvc3RibG9jaycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmmL7ogIzmmJPop4HnmoTnuq/noLTlnY/nlKjmiLcnLCAn6aGv6ICM5piT6KaL55qE57SU56C05aOe5L2/55So6ICFJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAndmFuZGFsb25seScsXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiBtdy51dGlsLmlzSVBBZGRyZXNzKHJvb3RfLnVpZC52YWx1ZSksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmmL7ogIzmmJPop4HnmoRzcGFtYm905oiW5aSx56qD6LSm5Y+3JywgJ+mhr+iAjOaYk+imi+eahHNwYW1ib3TmiJblpLHnq4ros6zomZ8nKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdzcGFtYm90Jyxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S7heeUqOadpeaVo+WPkeW5v+WRiuWuo+S8oOeahOeUqOaItycsICflg4XnlKjkvobmlaPnmbzlu6PlkYrlrqPlgrPnmoTkvb/nlKjogIUnKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdwcm9tb29ubHknLFxuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogbXcudXRpbC5pc0lQQWRkcmVzcyhyb290Xy51aWQudmFsdWUpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKCFtdy51dGlsLmlzSVBBZGRyZXNzKG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKSkge1xuXHRcdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOmhtemdouS4iuWPiue8lui+keaRmOimgemakOiXj+eUqOaIt+WQjScsICflnKjpoIHpnaLkuIrlj4rnt6jovK/mkZjopoHpmrHol4/kvb/nlKjogIXlkI3nqLEnKSxcblx0XHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn6Iul55So5oi35ZCN5LiN5b2T6K+35Yu+6YCJ5q2k6aG577yM5rOo5oSP77ya6K+36ICD6JmR56eB5LiL6IGU57O7566h55CG5ZGY5aSE55CG44CCJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfoi6Xkvb/nlKjogIXlkI3nqLHkuI3nlbboq4vli77pgbjmraTpoIXvvIzms6jmhI/vvJroq4vogIPmha7np4HkuIvoga/ntaHnrqHnkIblk6HomZXnkIbjgIInXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiAnaGlkZW5hbWUnLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnaGlkZW5hbWUnLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivhOiuuu+8micsICfoqZXoq5bvvJonKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdGlkOiAnYXJ2cHJldmlldycsXG5cdFx0XHRcdFx0bGFiZWw6IFtwcmV2aWV3bGlua10sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ3R3aW5rbGVhcnYtcHJldmlld2JveCcsXG5cdFx0XHRcdFx0c3R5bGU6ICdkaXNwbGF5OiBub25lJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRcdFx0b2xkX2FyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod29ya19hcmVhLCBvbGRfYXJlYSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyb290Xy5wcmV2aWV3ZXIgPSBuZXcgTW9yZWJpdHMud2lraS5wcmV2aWV3KCQod29ya19hcmVhKS5maW5kKCcjdHdpbmtsZWFydi1wcmV2aWV3Ym94JykubGFzdCgpWzBdKTtcblx0fTtcblx0VHdpbmtsZS5hcnYuY2FsbGJhY2sucHJldmlldyA9IChmb3JtKSA9PiB7XG5cdFx0Y29uc3QgcmVhc29uID0gVHdpbmtsZS5hcnYuY2FsbGJhY2suZ2V0UmVwb3J0V2lraXRleHQoZm9ybSk7XG5cdFx0aWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGlucHV0ID0gTW9yZWJpdHMucXVpY2tGb3JtLmdldElucHV0RGF0YShmb3JtKTtcblx0XHRsZXQgdGl0bGU7XG5cdFx0c3dpdGNoIChpbnB1dC5jYXRlZ29yeSkge1xuXHRcdFx0Y2FzZSAndmlwJzpcblx0XHRcdFx0dGl0bGUgPSAnTElCX3RhbGs65oql5ZGK5b2T5YmN56C05Z2PJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdld2lwJzpcblx0XHRcdFx0dGl0bGUgPSAnTElCX3RhbGs6566h55CG5ZGY5ZGK56S65p2/Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd1c2VybmFtZSc6XG5cdFx0XHRcdHRpdGxlID0gJ0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadvyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc3BpJzpcblx0XHRcdFx0dGl0bGUgPSAnTElCX3RhbGs6566h55CG5ZGY5ZGK56S65p2/Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aXRsZSA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGZvcm0ucHJldmlld2VyLmJlZ2luUmVuZGVyKGBfX05PVE9DX18ke3JlYXNvblswXX1gLCB0aXRsZSk7XG5cdH07XG5cdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLmdldFJlcG9ydFdpa2l0ZXh0ID0gKGZvcm0pID0+IHtcblx0XHRjb25zdCBpbnB1dCA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZm9ybSk7XG5cdFx0bGV0IHJlYXNvbiA9ICcnO1xuXHRcdGxldCBjb21tZW50ID0gJyc7XG5cdFx0Y29uc3Qge3VpZH0gPSBpbnB1dDtcblx0XHRjb25zdCBjaGVja1RpdGxlID0gKHRpdGxlLCByZXZpZCkgPT4ge1xuXHRcdFx0aWYgKC9odHRwcz86XFwvXFwvLy50ZXN0KHRpdGxlKSkge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfpobXpnaLlkI3np7DkuI3og73kvb/nlKjnvZHlnYDjgIInLCAn6aCB6Z2i5ZCN56ix5LiN6IO95L2/55So57ay5Z2A44CCJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRsZXQgcGFnZV87XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwYWdlXyA9IG5ldyBtdy5UaXRsZSh0aXRsZSk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0bXcubm90aWZ5KFxuXHRcdFx0XHRcdGAke1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfigJwnLCAn44CMJykgK1xuXHRcdFx0XHRcdFx0dGl0bGUgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHQn4oCd5LiN5piv5LiA5Liq5pyJ5pWI55qE6aG16Z2i5ZCN56ew77yM5aaC6KaB5L2/55So5beu5byC6ZO+5o6l6K+35pS+5Zyo4oCc6K+E6K664oCdJyxcblx0XHRcdFx0XHRcdFx0J+OAjeS4jeaYr+S4gOWAi+acieaViOeahOmggemdouWQjeeose+8jOWmguimgeS9v+eUqOW3rueVsOmAo+e1kOiri+aUvuWcqOOAjOipleirluOAjSdcblx0XHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0KHJldmlkID8gd2luZG93LndnVUxTKCfvvIzmiJbmraPnoa7ovpPlhaXigJzkv67orqLniYjmnKzigJ0nLCAn77yM5oiW5q2j56K66Ly45YWl44CM5L+u6KiC54mI5pys44CNJykgOiAnJylcblx0XHRcdFx0XHR944CCYCxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlYXJ2Jyxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChwYWdlXy5uYW1lc3BhY2UgPT09IC0xKSB7XG5cdFx0XHRcdG13Lm5vdGlmeShcblx0XHRcdFx0XHRgJHtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCcJywgJ+OAjCcpICtcblx0XHRcdFx0XHRcdHRpdGxlICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+KAneWxnuS6jueJueauiumhtemdou+8jOWmguimgeS9v+eUqOW3ruW8gumTvuaOpeivt+aUvuWcqOKAnOivhOiuuuKAnScsXG5cdFx0XHRcdFx0XHRcdCfjgI3lsazmlrznibnmrorpoIHpnaLvvIzlpoLopoHkvb/nlKjlt67nlbDpgKPntZDoq4vmlL7lnKjjgIzoqZXoq5bjgI0nXG5cdFx0XHRcdFx0XHQpICtcblx0XHRcdFx0XHRcdChyZXZpZCA/IHdpbmRvdy53Z1VMUygn77yM5oiW5q2j56Gu6L6T5YWl4oCc5L+u6K6i54mI5pys4oCdJywgJ++8jOaIluato+eiuui8uOWFpeOAjOS/ruiogueJiOacrOOAjScpIDogJycpXG5cdFx0XHRcdFx0feOAgmAsXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGFnZV87XG5cdFx0fTtcblx0XHRsZXQgcGFnZTtcblx0XHRzd2l0Y2ggKGlucHV0LmNhdGVnb3J5KSB7XG5cdFx0XHQvLyBSZXBvcnQgM1JSXG5cdFx0XHRjYXNlICdld2lwJzoge1xuXHRcdFx0XHRpZiAoaW5wdXQucmVhc29uID09PSAnJykge1xuXHRcdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOW/hemhu+aMh+WumueQhueUsScsICfmgqjlv4XpoIjmjIflrprnkIbnlLEnKSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlYXNvbiArPSBgPT0g57yW6L6R5oiY5Li+5oql77yIJHt1aWR977yJID09XFxuYDtcblx0XHRcdFx0cmVhc29uICs9IGAqICcnJ3t7dmFuZGFsfCR7L1s9XS8udGVzdCh1aWQpID8gJzE9JyA6ICcnfSR7dWlkfX19JycnXFxuYDtcblx0XHRcdFx0Y29uc3QgcGFnZXMgPSAkKCdpbnB1dDp0ZXh0W25hbWU9cGFnZV0nLCBmb3JtKS5tYXAoKG8sIGUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJChlKS52YWwoKSB8fCBudWxsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9yIChjb25zdCBwYWdlXyBvZiBwYWdlcykge1xuXHRcdFx0XHRcdHBhZ2UgPSBjaGVja1RpdGxlKHBhZ2VfLCBmYWxzZSk7XG5cdFx0XHRcdFx0aWYgKCFwYWdlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbW1lbnQgKz0gYCoge3twYWdlbGlua3N8JHtcblx0XHRcdFx0XHRcdHBhZ2UuZ2V0UHJlZml4ZWRUZXh0KCkuaW5jbHVkZXMoJz0nKSA/ICcxPScgOiAnJ1xuXHRcdFx0XHRcdH0ke3BhZ2UuZ2V0UHJlZml4ZWRUZXh0KCl9fX1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlucHV0LnJlYXNvbiA9IGlucHV0LnJlYXNvbi5yZXBsYWNlKC9cXG5cXG4rL2csICdcXG4nKTtcblx0XHRcdFx0aW5wdXQucmVhc29uID0gaW5wdXQucmVhc29uLnJlcGxhY2UoL1xccj9cXG4vZywgJ1xcbio6Jyk7IC8vIGluZGVudCBuZXdsaW5lc1xuXHRcdFx0XHRjb21tZW50ICs9IGAqICR7aW5wdXQucmVhc29ufVxcbmA7XG5cdFx0XHRcdGNvbW1lbnQgPSBjb21tZW50LnRyaW0oKTtcblx0XHRcdFx0Y29tbWVudCA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihjb21tZW50KTtcblx0XHRcdFx0cmVhc29uICs9IGAke2NvbW1lbnR9XFxuKiDmj5DmiqXkurrvvJp+fmAuY29uY2F0KCd+flxcbiog5aSE55CG77yaJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gUmVwb3J0IGluYXBwcm9wcmlhdGUgdXNlcm5hbWVcblx0XHRcdGNhc2UgJ3VzZXJuYW1lJzoge1xuXHRcdFx0XHRsZXQgdHlwZXMgPSBpbnB1dC5hcnZ0eXBlLm1hcChNb3JlYml0cy5zdHJpbmcudG9Mb3dlckNhc2VGaXJzdENoYXIpO1xuXHRcdFx0XHRjb25zdCBoYXNTaGFyZWQgPSB0eXBlcy5pbmNsdWRlcygnc2hhcmVkJyk7XG5cdFx0XHRcdGlmIChoYXNTaGFyZWQpIHtcblx0XHRcdFx0XHR0eXBlcy5zcGxpY2UodHlwZXMuaW5kZXhPZignc2hhcmVkJyksIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0eXBlcy5pbmNsdWRlcygn5L6u6L6x5oCnJykgJiZcblx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muS4pemHjeeahOS+rui+seaAp+eUqOaIt+WQjeWSjOmSiOWvueeJueWumuS4quS6uueahOS+rui+seaAp+eUqOaIt+WQjeS4jeW6lOWcqOWFrOW8gOmhtemdouaKpeWRiu+8jOiAjOaYr+W6lOW9k+engeS4i+iBlOezu+ebkeedo+WRmOWkhOeQhuOAguaYr+WQpue7p+e7re+8nycsXG5cdFx0XHRcdFx0XHRcdCforablkYrvvJrlmrTph43nmoTkvq7ovrHmgKfkvb/nlKjogIXlkI3nqLHlkozph53lsI3nibnlrprlgIvkurrnmoTkvq7ovrHmgKfkvb/nlKjogIXlkI3nqLHkuI3mh4nlnKjlhazplovpoIHpnaLloLHlkYrvvIzogIzmmK/mh4nnlbbnp4HkuIvoga/ntaHnm6PnnaPlk6HomZXnkIbjgILmmK/lkKbnubznuozvvJ8nXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHR5cGVzLmxlbmd0aCA8PSAyKSB7XG5cdFx0XHRcdFx0dHlwZXMgPSB0eXBlcy5qb2luKCflkownKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0eXBlcyA9IFt0eXBlcy5zbGljZSgwLCAtMSkuam9pbign44CBJyksIHR5cGVzLnNsaWNlKC0xKV0uam9pbign5ZKMJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29tbWVudCArPSBgKnt7dXNlci11YWF8MT0ke3VpZH1gO1xuXHRcdFx0XHRpZiAoaW5wdXQuaGlkZW5hbWUpIHtcblx0XHRcdFx0XHRjb21tZW50ICs9ICd8aGlkZW5hbWU9MSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29tbWVudCArPSAnfX0gJm5kYXNoOyAnO1xuXHRcdFx0XHRpZiAodHlwZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSB0eXBlcyArIHdpbmRvdy53Z1VMUygn55So5oi35ZCNJywgJ+S9v+eUqOiAheWQjeeosScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlcy5sZW5ndGggJiYgaGFzU2hhcmVkKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSAn77yMJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGFzU2hhcmVkKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSB3aW5kb3cud2dVTFMoJ+aal+ekuuivpei0puWPt+W5tumdnueUseS4gOS6uuaLpeaciScsICfmmpfnpLroqbLos6zomZ/kuKbpnZ7nlLHkuIDkurrmk4HmnIknKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZXMubGVuZ3RoIHx8IGhhc1NoYXJlZCkge1xuXHRcdFx0XHRcdGNvbW1lbnQgKz0gJ+OAgic7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlucHV0LnJlYXNvbikge1xuXHRcdFx0XHRcdGNvbW1lbnQgKz0gTW9yZWJpdHMuc3RyaW5nLnRvVXBwZXJDYXNlRmlyc3RDaGFyKGlucHV0LnJlYXNvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29tbWVudCA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihjb21tZW50KTtcblx0XHRcdFx0Y29tbWVudCArPSAnLS1+ficuY29uY2F0KCd+ficpO1xuXHRcdFx0XHRjb21tZW50ID0gY29tbWVudC5yZXBsYWNlKC9cXHI/XFxuL2csICdcXG4qOicpOyAvLyBpbmRlbnQgbmV3bGluZXNcblx0XHRcdFx0cmVhc29uID0gYD09IOS4jeW9k+eUqOaIt+WQjeaKpeWRiu+8iCR7XG5cdFx0XHRcdFx0aW5wdXQuaGlkZW5hbWUgPyB3aW5kb3cud2dVTFMoJ+W3sumakOiXj+eUqOaIt+WQjScsICflt7LpmrHol4/kvb/nlKjogIXlkI3nqLEnKSA6IHVpZFxuXHRcdFx0XHR977yJID09XFxuYDtcblx0XHRcdFx0cmVhc29uICs9IGNvbW1lbnQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTElCOlNQSVxuXHRcdFx0Y2FzZSAnc3BpJzoge1xuXHRcdFx0XHRpZiAoIWlucHV0LnJlYXNvbikge1xuXHRcdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ivt+i+k+WFpeivgeaNruOAgicsICfoq4vovLjlhaXorYnmk5rjgIInKSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHNvY2twdXBwZXRzID0gTW9yZWJpdHMuYXJyYXkudW5pcShcblx0XHRcdFx0XHRbLi4uJCgnaW5wdXQ6dGV4dFtuYW1lPXNvY2twdXBwZXRdJywgZm9ybSldLm1hcCgobykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuICQobykudmFsKCkudHJpbSgpIHx8IG51bGw7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCFzb2NrcHVwcGV0c1swXSkge1xuXHRcdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOayoeacieaMh+WumuS7u+S9leWCgOWEoeOAgicsICfmgqjmspLmnInmjIflrprku7vkvZXlgoDlhKHjgIInKSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbW1lbnQgKz0gJ3t7Jy5jb25jYXQoJ3N1YnN0OicsICdTUEkgcmVwb3J0fCcpO1xuXHRcdFx0XHRpZiAoIXNvY2twdXBwZXRzLmluY2x1ZGVzKGlucHV0LnNvY2ttYXN0ZXIpKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSAnMT17eycuY29uY2F0KFxuXHRcdFx0XHRcdFx0J3N1YnN0OicsXG5cdFx0XHRcdFx0XHQnI2lmZXhpc3Q6e3snLFxuXHRcdFx0XHRcdFx0J3N1YnN0OicsXG5cdFx0XHRcdFx0XHRgRlVMTFBBR0VOQU1FfX18fCR7aW5wdXQuc29ja21hc3Rlcn19fXxgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb21tZW50ICs9IGAke3NvY2twdXBwZXRzXG5cdFx0XHRcdFx0Lm1hcCgoc29jaywgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBgJHtpbmRleCArIDJ9PSR7c29ja31gO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oJ3wnKX1cXG58ZXZpZGVuY2U9JHtNb3JlYml0cy5zdHJpbmcuYXBwZW5kUHVuY3R1YXRpb24oaW5wdXQucmVhc29uKX1cXG5gO1xuXHRcdFx0XHRpZiAoaW5wdXQuY2hlY2t1c2VyKSB7XG5cdFx0XHRcdFx0Y29tbWVudCArPSAnfGNoZWNrdXNlcj15ZXMnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbW1lbnQgKz0gJ319Jztcblx0XHRcdFx0cmVhc29uID0gY29tbWVudDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlcG9ydCB1c2VyIGZvciB2YW5kYWxpc21cblx0XHRcdC8qIGNhc2UgJ2Fpdic6ICovXG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdGlmICghaW5wdXQuYXJ2dHlwZS5sZW5ndGggJiYgaW5wdXQucmVhc29uID09PSAnJykge1xuXHRcdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOW/hemhu+aMh+WumueQhueUsScsICfmgqjlv4XpoIjmjIflrprnkIbnlLEnKSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWFydicsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlYXNvbiArPSBgPT0gJHtpbnB1dC5oaWRlbmFtZSA/IHdpbmRvdy53Z1VMUygn5bey6ZqQ6JeP55So5oi35ZCNJywgJ+W3sumaseiXj+S9v+eUqOiAheWQjeeosScpIDogdWlkfSA9PVxcbmA7XG5cdFx0XHRcdHJlYXNvbiArPSBgKiAnJyd7e3ZhbmRhbHwkey9bPV0vLnRlc3QodWlkKSA/ICcxPScgOiAnJ30ke3VpZH1gO1xuXHRcdFx0XHRpZiAoaW5wdXQuaGlkZW5hbWUpIHtcblx0XHRcdFx0XHRyZWFzb24gKz0gJ3xoaWRlbmFtZT0xJztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZWFzb24gKz0gXCJ9fScnJ1xcblwiO1xuXHRcdFx0XHRjb25zdCB0eXBlcyA9IGlucHV0LmFydnR5cGVcblx0XHRcdFx0XHQubWFwKCh2KSA9PiB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHYpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAnZmluYWwnOlxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAn5bey5Y+R5Ye65pyA5ZCO6K2m5ZGKJztcblx0XHRcdFx0XHRcdFx0Y2FzZSAncG9zdGJsb2NrJzpcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gJ+Wwgeemgei/h+acn+WQjumaj+WNs+egtOWdjyc7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3NwYW1ib3QnOlxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAn5pi+6ICM5piT6KeB55qEc3BhbWJvdOaIluWkseeqg+i0puWPtyc7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3ZhbmRhbG9ubHknOlxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAn5pi+6ICM5piT6KeB55qE57qv56C05Z2P55So5oi3Jztcblx0XHRcdFx0XHRcdFx0Y2FzZSAncHJvbW9vbmx5Jzpcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gJ+S7heeUqOadpeaVo+WPkeW5v+WRiuWuo+S8oOeahOeUqOaItyc7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuICfmnKrnn6XnkIbnlLEnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oJ++8jCcpO1xuXHRcdFx0XHRpZiAoaW5wdXQucGFnZSAhPT0gJycpIHtcblx0XHRcdFx0XHRwYWdlID0gY2hlY2tUaXRsZShpbnB1dC5wYWdlLCB0cnVlKTtcblx0XHRcdFx0XHRpZiAoIXBhZ2UpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29tbWVudCArPSBgKiB7e3BhZ2VsaW5rc3wke1xuXHRcdFx0XHRcdFx0cGFnZS5nZXRQcmVmaXhlZFRleHQoKS5pbmNsdWRlcygnPScpID8gJzE9JyA6ICcnXG5cdFx0XHRcdFx0fSR7cGFnZS5nZXRQcmVmaXhlZFRleHQoKX19fWA7XG5cdFx0XHRcdFx0aWYgKGlucHV0LmJhZGlkKSB7XG5cdFx0XHRcdFx0XHRjb21tZW50ICs9IGDvvIh7e2RpZmZ8JHtwYWdlLmdldFByZWZpeGVkVGV4dCgpfXwke2lucHV0LmJhZGlkfXwke2lucHV0Lmdvb2RpZCA/PyAnJ318ZGlmZn1977yJYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29tbWVudCArPSAnXFxuJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZXMpIHtcblx0XHRcdFx0XHRjb21tZW50ICs9IGAqICR7dHlwZXN9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5wdXQucmVhc29uICE9PSAnJykge1xuXHRcdFx0XHRcdGlucHV0LnJlYXNvbiA9IGlucHV0LnJlYXNvbi5yZXBsYWNlKC9cXG5cXG4rL2csICdcXG4nKTtcblx0XHRcdFx0XHRpbnB1dC5yZWFzb24gPSBpbnB1dC5yZWFzb24ucmVwbGFjZSgvXFxyP1xcbi9nLCAnXFxuKjonKTsgLy8gaW5kZW50IG5ld2xpbmVzXG5cdFx0XHRcdFx0Y29tbWVudCArPSAodHlwZXMgPyAn44CCJyA6ICcqICcpICsgaW5wdXQucmVhc29uO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbW1lbnQgPSBjb21tZW50LnRyaW0oKTtcblx0XHRcdFx0Y29tbWVudCA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihjb21tZW50KTtcblx0XHRcdFx0cmVhc29uICs9IGAke2NvbW1lbnR9XFxuKiDlj5HnjrDkurrvvJp+fmAuY29uY2F0KCd+flxcbiog5aSE55CG77yaJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gW3JlYXNvbiwgY29tbWVudF07XG5cdH07XG5cdFR3aW5rbGUuYXJ2LmNhbGxiYWNrLmV2YWx1YXRlID0gKGUpID0+IHtcblx0XHRjb25zdCBmb3JtID0gZS50YXJnZXQ7XG5cdFx0Y29uc3QgaW5wdXQgPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0SW5wdXREYXRhKGZvcm0pO1xuXHRcdGNvbnN0IHt1aWR9ID0gaW5wdXQ7XG5cdFx0bGV0IHJlYXNvbjtcblx0XHRsZXQgc3VtbWFyeTtcblx0XHRzd2l0Y2ggKGlucHV0LmNhdGVnb3J5KSB7XG5cdFx0XHQvLyBSZXBvcnQgM1JSXG5cdFx0XHRjYXNlICdld2lwJzoge1xuXHRcdFx0XHRyZWFzb24gPSBUd2lua2xlLmFydi5jYWxsYmFjay5nZXRSZXBvcnRXaWtpdGV4dChmb3JtKTtcblx0XHRcdFx0aWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnkgPSBgJHt3aW5kb3cud2dVTFMoJ+aKpeWRiicsICfloLHlkYonKX1bW1NwZWNpYWw6Q29udHJpYnMvJHt1aWR9fCR7dWlkfV1dYDtcblx0XHRcdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gJ0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadvyc7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUygn5oql5ZGK5a6M5oiQJywgJ+WgseWRiuWujOaIkCcpO1xuXHRcdFx0XHRjb25zdCBld2lwUGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0J0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadvycsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCflpITnkIZFV0lQ6K+35rGCJywgJ+iZleeQhkVXSVDoq4vmsYInKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRld2lwUGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlKTtcblx0XHRcdFx0ZXdpcFBhZ2UubG9hZCgoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGV3aXBQYWdlLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3QgJGV3aXBMaW5rID0gJzxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpFV0lQXCI+TElCOkVXSVA8L2E+Jztcblx0XHRcdFx0XHQvLyBjaGVjayBpZiB1c2VyIGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWRcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0XHRgPT09XFxcXHMqXFxcXHtcXFxce1xcXFxzKig/OltWdl1hbmRhbClcXFxccypcXFxcfFxcXFxzKig/OjE9KT9cXFxccyoke01vcmViaXRzLnN0cmluZy5lc2NhcGVSZWdFeHAoXG5cdFx0XHRcdFx0XHRcdFx0dWlkXG5cdFx0XHRcdFx0XHRcdCl9XFxcXHMqXFxcXH1cXFxcfVxcXFxzKj09PWBcblx0XHRcdFx0XHRcdCkudGVzdCh0ZXh0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0ZXdpcFBhZ2Vcblx0XHRcdFx0XHRcdFx0LmdldFN0YXR1c0VsZW1lbnQoKVxuXHRcdFx0XHRcdFx0XHQuZXJyb3Iod2luZG93LndnVUxTKCfmiqXlkYrlt7LlrZjlnKjvvIzlsIbkuI3kvJrliqDlhaXmlrDnmoQnLCAn5aCx5ZGK5bey5a2Y5Zyo77yM5bCH5LiN5pyD5Yqg5YWl5paw55qEJykpO1xuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLnByaW50VXNlclRleHQoXG5cdFx0XHRcdFx0XHRcdHJlYXNvblsxXSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjovpPlhaXnmoTor4Torrrlt7LlnKjkuIvmlrnmj5DkvpvvvIzmgqjlj6/ku6XlsIblhbbliqDlhaXliLAnLFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjovLjlhaXnmoToqZXoq5blt7LlnKjkuIvmlrnmj5DkvpvvvIzmgqjlj6/ku6XlsIflhbbliqDlhaXliLAnXG5cdFx0XHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0XHRcdCRld2lwTGluayArXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCflt7LlrZjlnKjnmoTlsI/oioLkuK3vvJonLCAn5bey5a2Y5Zyo55qE5bCP56+A5Lit77yaJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGV3aXBQYWdlLnNldFBhZ2VTZWN0aW9uKDApO1xuXHRcdFx0XHRcdGV3aXBQYWdlLmdldFN0YXR1c0VsZW1lbnQoKS5zdGF0dXMod2luZG93LndnVUxTKCfliqDlhaXmlrDmiqXlkYrigKYnLCAn5Yqg5YWl5paw5aCx5ZGK4oCmJykpO1xuXHRcdFx0XHRcdGV3aXBQYWdlLnNldEVkaXRTdW1tYXJ5KHN1bW1hcnkpO1xuXHRcdFx0XHRcdGV3aXBQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHRld2lwUGFnZS5zZXRBcHBlbmRUZXh0KGBcXG4ke3JlYXNvblswXX1gKTtcblx0XHRcdFx0XHRld2lwUGFnZS5hcHBlbmQoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gUmVwb3J0IGluYXBwcm9wcmlhdGUgdXNlcm5hbWVcblx0XHRcdGNhc2UgJ3VzZXJuYW1lJzoge1xuXHRcdFx0XHRyZWFzb24gPSBUd2lua2xlLmFydi5jYWxsYmFjay5nZXRSZXBvcnRXaWtpdGV4dChmb3JtKTtcblx0XHRcdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gJ0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadvyc7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUygn5oql5ZGK5a6M5oiQJywgJ+WgseWRiuWujOaIkCcpO1xuXHRcdFx0XHRjb25zdCB1YWFQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHQnTElCX3RhbGs6566h55CG5ZGY5ZGK56S65p2/Jyxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WkhOeQhlVBQeivt+axgicsICfomZXnkIZVQUHoq4vmsYInKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR1YWFQYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdFx0XHR1YWFQYWdlLmxvYWQoKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRleHQgPSB1YWFQYWdlLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdXNlciBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHRcdFx0YFxcXFx7XFxcXHtcXFxccyp1c2VyLXVhYVxcXFxzKlxcXFx8XFxcXHMqKDFcXFxccyo9XFxcXHMqKT8ke01vcmViaXRzLnN0cmluZy5lc2NhcGVSZWdFeHAoXG5cdFx0XHRcdFx0XHRcdFx0dWlkXG5cdFx0XHRcdFx0XHRcdCl9XFxcXHMqKFxcXFx8fFxcXFx9KWBcblx0XHRcdFx0XHRcdCkudGVzdCh0ZXh0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0dWFhUGFnZS5nZXRTdGF0dXNFbGVtZW50KCkuZXJyb3Iod2luZG93LndnVUxTKCfnlKjmiLflt7LooqvliJflhaXjgIInLCAn5L2/55So6ICF5bey6KKr5YiX5YWl44CCJykpO1xuXHRcdFx0XHRcdFx0Y29uc3QgJHVhYUxpbmsgPSAnPGEgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiL3dpa2kvTElCOlVBQVwiPkxJQjpVQUE8L2E+Jztcblx0XHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5wcmludFVzZXJUZXh0KFxuXHRcdFx0XHRcdFx0XHRyZWFzb25bMV0sXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5oKo6L6T5YWl55qE6K+E6K665bey5Zyo5LiL5pa55o+Q5L6b77yM5oKo5Y+v5Lul5bCG5YW25omL5bel5Yqg5YWlJyxcblx0XHRcdFx0XHRcdFx0XHQn5oKo6Ly45YWl55qE6KmV6KuW5bey5Zyo5LiL5pa55o+Q5L6b77yM5oKo5Y+v5Lul5bCH5YW25omL5bel5Yqg5YWlJ1xuXHRcdFx0XHRcdFx0XHQpICtcblx0XHRcdFx0XHRcdFx0XHQkdWFhTGluayArXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuIror6XnlKjmiLfnmoTmiqXlkYrkuK3vvJonLCAn5LiK6Kmy5L2/55So6ICF55qE5aCx5ZGK5Lit77yaJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHVhYVBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLnN0YXR1cyh3aW5kb3cud2dVTFMoJ+WKoOWFpeaWsOaKpeWRiuKApicsICfliqDlhaXmlrDloLHlkYrigKYnKSk7XG5cdFx0XHRcdFx0dWFhUGFnZS5zZXRFZGl0U3VtbWFyeSh3aW5kb3cud2dVTFMoJ+aWsOaPkOaKpScsICfmlrDmj5DloLEnKSk7XG5cdFx0XHRcdFx0dWFhUGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0dWFhUGFnZS5zZXRBcHBlbmRUZXh0KGBcXG5cXG4ke3JlYXNvblswXX1gKTtcblx0XHRcdFx0XHR1YWFQYWdlLmFwcGVuZCgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyBMSUI6U1BJXG5cdFx0XHRjYXNlICdzcGknOiB7XG5cdFx0XHRcdHJlYXNvbiA9IFR3aW5rbGUuYXJ2LmNhbGxiYWNrLmdldFJlcG9ydFdpa2l0ZXh0KGZvcm0pO1xuXHRcdFx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRcdFx0Y29uc3QgcmVwb3J0cGFnZSA9ICdMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb8nO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHJlcG9ydHBhZ2U7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUygn5oql5ZGK5a6M5oiQJywgJ+WgseWRiuWujOaIkCcpO1xuXHRcdFx0XHRjb25zdCBzcGlQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShyZXBvcnRwYWdlLCB3aW5kb3cud2dVTFMoJ+aKk+WPluiuqOiuuumhtemdoicsICfmipPlj5boqI7oq5bpoIHpnaInKSk7XG5cdFx0XHRcdHNwaVBhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdHNwaVBhZ2Uuc2V0RWRpdFN1bW1hcnkod2luZG93LndnVUxTKCfliqDlhaXmlrDmj5DmiqUnLCAn5Yqg5YWl5paw5o+Q5aCxJykpO1xuXHRcdFx0XHRzcGlQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0c3BpUGFnZS5zZXRBcHBlbmRUZXh0KHJlYXNvblswXSk7XG5cdFx0XHRcdHNwaVBhZ2Uuc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZignc3BpV2F0Y2hSZXBvcnQnKSk7XG5cdFx0XHRcdHNwaVBhZ2UuYXBwZW5kKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXBvcnQgdXNlciBmb3IgdmFuZGFsaXNtXG5cdFx0XHQvKiBjYXNlICdhaXYnOiAqL1xuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRyZWFzb24gPSBUd2lua2xlLmFydi5jYWxsYmFjay5nZXRSZXBvcnRXaWtpdGV4dChmb3JtKTtcblx0XHRcdFx0aWYgKHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnkgPSBgJHt3aW5kb3cud2dVTFMoJ+aKpeWRiicsICfloLHlkYonKX1bW1NwZWNpYWw6Q29udHJpYnMvJHt1aWR9fCR7dWlkfV1dYDtcblx0XHRcdFx0aWYgKGlucHV0LmhpZGVuYW1lKSB7XG5cdFx0XHRcdFx0c3VtbWFyeSA9IHdpbmRvdy53Z1VMUygn5oql5ZGK5LiA5ZCN55So5oi3JywgJ+WgseWRiuS4gOWQjeS9v+eUqOiAhScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGZvcm0pO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9ICdMSUJfdGFsazrmiqXlkYrlvZPliY3noLTlnY8nO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+aKpeWRiuWujOaIkCcsICfloLHlkYrlrozmiJAnKTtcblx0XHRcdFx0Y29uc3QgYWl2UGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0J0xJQl90YWxrOuaKpeWRiuW9k+WJjeegtOWdjycsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCflpITnkIZWSVDor7fmsYInLCAn6JmV55CGVklQ6KuL5rGCJylcblx0XHRcdFx0KTtcblx0XHRcdFx0YWl2UGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlKTtcblx0XHRcdFx0YWl2UGFnZS5sb2FkKCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCB0ZXh0ID0gYWl2UGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRcdGNvbnN0ICRhaXZMaW5rID0gJzxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIi93aWtpL0xJQjpWSVBcIj5MSUI6VklQPC9hPic7XG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdXNlciBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHRcdFx0YD09PVxcXFxzKlxcXFx7XFxcXHtcXFxccyooPzpbVnZdYW5kYWwpXFxcXHMqXFxcXHxcXFxccyooPzoxPSk/XFxcXHMqJHtNb3JlYml0cy5zdHJpbmcuZXNjYXBlUmVnRXhwKFxuXHRcdFx0XHRcdFx0XHRcdHVpZFxuXHRcdFx0XHRcdFx0XHQpfVxcXFxzKlxcXFx9XFxcXH1cXFxccyo9PT1gXG5cdFx0XHRcdFx0XHQpLnRlc3QodGV4dClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGFpdlBhZ2Vcblx0XHRcdFx0XHRcdFx0LmdldFN0YXR1c0VsZW1lbnQoKVxuXHRcdFx0XHRcdFx0XHQuZXJyb3Iod2luZG93LndnVUxTKCfmiqXlkYrlt7LlrZjlnKjvvIzlsIbkuI3kvJrliqDlhaXmlrDnmoQnLCAn5aCx5ZGK5bey5a2Y5Zyo77yM5bCH5LiN5pyD5Yqg5YWl5paw55qEJykpO1xuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLnByaW50VXNlclRleHQoXG5cdFx0XHRcdFx0XHRcdHJlYXNvblsxXSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjovpPlhaXnmoTor4Torrrlt7LlnKjkuIvmlrnmj5DkvpvvvIzmgqjlj6/ku6XlsIblhbbliqDlhaXliLAnLFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjovLjlhaXnmoToqZXoq5blt7LlnKjkuIvmlrnmj5DkvpvvvIzmgqjlj6/ku6XlsIflhbbliqDlhaXliLAnXG5cdFx0XHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0XHRcdCRhaXZMaW5rICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+W3suWtmOWcqOeahOWwj+iKguS4re+8micsICflt7LlrZjlnKjnmoTlsI/nr4DkuK3vvJonKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YWl2UGFnZS5zZXRQYWdlU2VjdGlvbigwKTtcblx0XHRcdFx0XHRhaXZQYWdlLmdldFN0YXR1c0VsZW1lbnQoKS5zdGF0dXMod2luZG93LndnVUxTKCfliqDlhaXmlrDmiqXlkYrigKYnLCAn5Yqg5YWl5paw5aCx5ZGK4oCmJykpO1xuXHRcdFx0XHRcdGFpdlBhZ2Uuc2V0RWRpdFN1bW1hcnkoc3VtbWFyeSk7XG5cdFx0XHRcdFx0YWl2UGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0YWl2UGFnZS5zZXRBcHBlbmRUZXh0KGBcXG4ke3JlYXNvblswXX1gKTtcblx0XHRcdFx0XHRhaXZQYWdlLmFwcGVuZCgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmFydiwgJ2FydicpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZXdhcm4uanMgKi9cbihmdW5jdGlvbiB0d2lua2xld2FybigkKSB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHQvKipcblx0ICogdHdpbmtsZXdhcm4uanM6IFdhcm4gbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIChcIldhcm5cIilcblx0ICogQWN0aXZlIG9uOiBBbnkgcGFnZSB3aXRoIHJlbGV2YW50IHVzZXIgbmFtZSAodXNlcnNwYWNlLCBjb250cmlicyxcblx0ICogZXRjLiksIGFzIHdlbGwgYXMgdGhlIHJvbGxiYWNrIHN1Y2Nlc3MgcGFnZVxuXHQgKi9cblx0Y29uc3QgcmVsZXZhbnRVc2VyTmFtZSA9IG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpO1xuXHRUd2lua2xlLndhcm4gPSAoKSA9PiB7XG5cdFx0aWYgKHJlbGV2YW50VXNlck5hbWUpIHtcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdFR3aW5rbGUud2Fybi5jYWxsYmFjayxcblx0XHRcdFx0J+itpuWRiicsXG5cdFx0XHRcdCd0dy13YXJuJyxcblx0XHRcdFx0d2luZG93LndnVUxTKCforablkYrmiJbmj5DphpLnlKjmiLcnLCAn6K2m5ZGK5oiW5o+Q6YaS5L2/55So6ICFJylcblx0XHRcdCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZignYXV0b01lbnVBZnRlclJvbGxiYWNrJykgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMyAmJlxuXHRcdFx0XHRtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ZhbmFydGljbGUnKSAmJlxuXHRcdFx0XHQhbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdub2F1dG93YXJuJylcblx0XHRcdCkge1xuXHRcdFx0XHRUd2lua2xlLndhcm4uY2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gTW9kaWZ5IFVSTCBvZiB0YWxrIHBhZ2Ugb24gcm9sbGJhY2sgc3VjY2VzcyBwYWdlcywgbWFrZXMgdXNlIG9mIGFcblx0XHQvLyBjdXN0b20gbWVzc2FnZSBib3ggaW4gW1tNZWRpYVdpa2k6Um9sbGJhY2stc3VjY2Vzc11dXG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgPT09ICdyb2xsYmFjaycpIHtcblx0XHRcdGNvbnN0ICR2YW5kYWxUYWxrTGluayA9ICRib2R5LmZpbmQoJyNtdy1yb2xsYmFjay1zdWNjZXNzJykuZmluZCgnLm13LXVzZXJ0b29sbGlua3MgYScpLmZpcnN0KCk7XG5cdFx0XHRpZiAoJHZhbmRhbFRhbGtMaW5rLmxlbmd0aCkge1xuXHRcdFx0XHRUd2lua2xlLndhcm4ubWFrZVZhbmRhbFRhbGtMaW5rKCR2YW5kYWxUYWxrTGluaywgTW9yZWJpdHMucGFnZU5hbWVOb3JtKTtcblx0XHRcdFx0JHZhbmRhbFRhbGtMaW5rLmNzcygnZm9udC13ZWlnaHQnLCAnYm9sZCcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnQWJ1c2VMb2cnICYmXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0FidXNlRmlsdGVyVmFyaWFibGVzJykgIT09IG51bGxcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFmVGFsa0xpbmsgPSAkYm9keS5maW5kKCcubXctdXNlcnRvb2xsaW5rcy10YWxrJykuZmlyc3QoKTtcblx0XHRcdGlmIChhZlRhbGtMaW5rLmxlbmd0aCkge1xuXHRcdFx0XHRUd2lua2xlLndhcm4ubWFrZVZhbmRhbFRhbGtMaW5rKGFmVGFsa0xpbmssIG13LmNvbmZpZy5nZXQoJ3dnQWJ1c2VGaWx0ZXJWYXJpYWJsZXMnKS5wYWdlX3ByZWZpeGVkdGl0bGUpO1xuXHRcdFx0XHRhZlRhbGtMaW5rLmNzcygnZm9udC13ZWlnaHQnLCAnYm9sZCcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0VHdpbmtsZS53YXJuLm1ha2VWYW5kYWxUYWxrTGluayA9ICgkdmFuZGFsVGFsa0xpbmssIHBhZ2VuYW1lKSA9PiB7XG5cdFx0JHZhbmRhbFRhbGtMaW5rLndyYXBJbm5lcihcblx0XHRcdCQoJzxzcGFuPicpLmF0dHIoXG5cdFx0XHRcdCd0aXRsZScsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5aaC5p6c5ZCI6YCC77yM5oKo5Y+v5Lul55SoVHdpbmtsZeWcqOivpeeUqOaIt+iuqOiuuumhteS4iuWBmuWHuuitpuWRiuOAgicsXG5cdFx0XHRcdFx0J+WmguaenOWQiOmBqe+8jOaCqOWPr+S7peeUqFR3aW5rbGXlnKjoqbLkvb/nlKjogIXoqI7oq5bpoIHkuIrlgZrlh7rorablkYrjgIInXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpO1xuXHRcdGNvbnN0IGV4dHJhUGFyYW0gPSBgdmFuYXJ0aWNsZT0ke213LnV0aWwucmF3dXJsZW5jb2RlKHBhZ2VuYW1lKX1gO1xuXHRcdGNvbnN0IGhyZWYgPSAkdmFuZGFsVGFsa0xpbmsuYXR0cignaHJlZicpO1xuXHRcdGlmIChocmVmLmluY2x1ZGVzKCc/JykpIHtcblx0XHRcdCR2YW5kYWxUYWxrTGluay5hdHRyKCdocmVmJywgYCR7aHJlZn0mJHtleHRyYVBhcmFtfWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkdmFuZGFsVGFsa0xpbmsuYXR0cignaHJlZicsIGAke2hyZWZ9PyR7ZXh0cmFQYXJhbX1gKTtcblx0XHR9XG5cdH07XG5cdC8vIFVzZWQgdG8gY2xvc2Ugd2luZG93IHdoZW4gc3dpdGNoaW5nIHRvIEFSViBpbiBhdXRvbGV2ZWxcblx0VHdpbmtsZS53YXJuLmRpYWxvZyA9IG51bGw7XG5cdFR3aW5rbGUud2Fybi5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRyZWxldmFudFVzZXJOYW1lID09PSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgJiZcblx0XHRcdCFjb25maXJtKHdpbmRvdy53Z1VMUygn5oKo5bCG6KaB6K2m5ZGK6Ieq5bex77yB5oKo56Gu5a6a6KaB57un57ut5ZCX77yfJywgJ+aCqOWwh+imgeitpuWRiuiHquW3se+8geaCqOeiuuWumuimgee5vOe6jOWXju+8nycpKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRUd2lua2xlLndhcm4uZGlhbG9nID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MDAsIDQ0MCk7XG5cdFx0Y29uc3Qge2RpYWxvZ30gPSBUd2lua2xlLndhcm47XG5cdFx0ZGlhbG9nLnNldFRpdGxlKHdpbmRvdy53Z1VMUygn6K2m5ZGK44CB5o+Q6YaS55So5oi3JywgJ+itpuWRiuOAgeaPkOmGkuS9v+eUqOiAhScpKTtcblx0XHRkaWFsb2cuc2V0U2NyaXB0TmFtZSgnVHdpbmtsZScpO1xuXHRcdGRpYWxvZy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn6K2m5ZGK6K6+572uJywgJ+itpuWRiuioreWumicpLCAnSDpUVy9QUkVGI3dhcm4nKTtcblx0XHRkaWFsb2cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0Mjd2FybicpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUud2Fybi5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0Y29uc3QgbWFpbl9zZWxlY3QgPSBmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCJ5oup6KaB5Y+R6YCB55qE6K2m5ZGK5oiW5o+Q6YaS57G75Z6LJywgJ+mBuOaTh+imgeWCs+mAgeeahOitpuWRiuaIluaPkOmGkumhnuWIpScpLFxuXHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfpppblhYjpgInmi6nkuIDnu4TvvIzlho3pgInmi6nlhbfkvZPnmoTorablkYrmqKHmnb/jgIInLCAn6aaW5YWI6YG45pOH5LiA57WE77yM5YaN6YG45pOH5YW36auU55qE6K2m5ZGK5qih5p2/44CCJyksXG5cdFx0fSk7XG5cdFx0Y29uc3QgbWFpbl9ncm91cCA9IG1haW5fc2VsZWN0LmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdG5hbWU6ICdtYWluX2dyb3VwJyxcblx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+aCqOWPr+WcqFR3aW5rbGXlj4LmlbDorr7nva7kuK3orr7nva7pu5jorqTpgInmi6nnmoTpgInpobknLFxuXHRcdFx0XHQn5oKo5Y+v5ZyoVHdpbmtsZeWBj+WlveioreWumuS4reioreWumumgkOioremBuOaTh+eahOmBuOmghSdcblx0XHRcdCksXG5cdFx0XHRldmVudDogVHdpbmtsZS53YXJuLmNhbGxiYWNrLmNoYW5nZV9jYXRlZ29yeSxcblx0XHR9KTtcblx0XHRjb25zdCBkZWZhdWx0R3JvdXAgPSBOdW1iZXIucGFyc2VJbnQoVHdpbmtsZS5nZXRQcmVmKCdkZWZhdWx0V2FybmluZ0dyb3VwJyksIDYpO1xuXHRcdG1haW5fZ3JvdXAuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5Yqo6YCJ5oup5bGC57qnJywgJ+iHquWLlemBuOaTh+WxpOe0micpLFxuXHRcdFx0dmFsdWU6ICdhdXRvbGV2ZWwnLFxuXHRcdFx0c2VsZWN0ZWQ6IGRlZmF1bHRHcm91cCA9PT0gNyxcblx0XHR9KTtcblx0XHRtYWluX2dyb3VwLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdGxhYmVsOiAnMe+8muaPkOmGkicsXG5cdFx0XHR2YWx1ZTogJ2xldmVsMScsXG5cdFx0XHRzZWxlY3RlZDogZGVmYXVsdEdyb3VwID09PSAxLFxuXHRcdH0pO1xuXHRcdG1haW5fZ3JvdXAuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0bGFiZWw6ICcy77ya6K2m5ZGKJyxcblx0XHRcdHZhbHVlOiAnbGV2ZWwyJyxcblx0XHRcdHNlbGVjdGVkOiBkZWZhdWx0R3JvdXAgPT09IDIsXG5cdFx0fSk7XG5cdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY29tYmluZWRTaW5nbGV0TWVudXMnKSkge1xuXHRcdFx0bWFpbl9ncm91cC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y2V5bGC57qn5raI5oGvJywgJ+WWruWxpOe0muioiuaBrycpLFxuXHRcdFx0XHR2YWx1ZTogJ3NpbmdsZWNvbWJpbmVkJyxcblx0XHRcdFx0c2VsZWN0ZWQ6IGRlZmF1bHRHcm91cCA9PT0gMyB8fCBkZWZhdWx0R3JvdXAgPT09IDQsXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWFpbl9ncm91cC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y2V5bGC57qn5o+Q6YaSJywgJ+WWruWxpOe0muaPkOmGkicpLFxuXHRcdFx0XHR2YWx1ZTogJ3NpbmdsZW5vdGljZScsXG5cdFx0XHRcdHNlbGVjdGVkOiBkZWZhdWx0R3JvdXAgPT09IDMsXG5cdFx0XHR9KTtcblx0XHRcdG1haW5fZ3JvdXAuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WNleWxgue6p+itpuWRiicsICfllq7lsaTntJrorablkYonKSxcblx0XHRcdFx0dmFsdWU6ICdzaW5nbGV3YXJuJyxcblx0XHRcdFx0c2VsZWN0ZWQ6IGRlZmF1bHRHcm91cCA9PT0gNCxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21XYXJuaW5nTGlzdCcpLmxlbmd0aCkge1xuXHRcdFx0bWFpbl9ncm91cC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ6K2m5ZGKJywgJ+iHquioguitpuWRiicpLFxuXHRcdFx0XHR2YWx1ZTogJ2N1c3RvbScsXG5cdFx0XHRcdHNlbGVjdGVkOiBkZWZhdWx0R3JvdXAgPT09IDUsXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0bWFpbl9ncm91cC5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRsYWJlbDogJ+aJgOacieitpuWRiuaooeadvycsXG5cdFx0XHR2YWx1ZTogJ2tpdGNoZW5zaW5rJyxcblx0XHRcdHNlbGVjdGVkOiBkZWZhdWx0R3JvdXAgPT09IDYsXG5cdFx0fSk7XG5cdFx0bWFpbl9zZWxlY3QuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ3N1Yl9ncm91cCcsXG5cdFx0XHRldmVudDogVHdpbmtsZS53YXJuLmNhbGxiYWNrLmNoYW5nZV9zdWJjYXRlZ29yeSxcblx0XHR9KTsgLy8gV2lsbCBiZSBlbXB0eSB0byBiZWdpbiB3aXRoLlxuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRuYW1lOiAnYXJ0aWNsZScsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpobXpnaLpk77mjqUnLCAn6aCB6Z2i6YCj57WQJyksXG5cdFx0XHR2YWx1ZTogbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd2YW5hcnRpY2xlJykgfHwgJycsXG5cdFx0XHRzaXplOiA1MCxcblx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn57uZ5qih5p2/5Lit5Yqg5YWl5LiA6aG16Z2i6ZO+5o6l77yM5Y+v55WZ56m644CCJywgJ+e1puaooeadv+S4reWKoOWFpeS4gOmggemdoumAo+e1kO+8jOWPr+eVmeepuuOAgicpLFxuXHRcdFx0cGxhY2Vob2xkZXI6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+S7hemZkOS4gOS4qu+8jOWLv+S9v+eUqOe9keWdgOOAgVtbIF1d77yM5Y+v5L2/55SoU3BlY2lhbDpEaWZmJyxcblx0XHRcdFx0J+WDhemZkOS4gOWAi++8jOWLv+S9v+eUqOe2suWdgOOAgVtbIF1d77yM5Y+v5L2/55SoU3BlY2lhbDpEaWZmJ1xuXHRcdFx0KSxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdGxhYmVsOiAnJyxcblx0XHRcdHN0eWxlOiAnY29sb3I6ICNmMDAnLFxuXHRcdFx0aWQ6ICd0d2lua2xlLXdhcm4td2FybmluZy1tZXNzYWdlcycsXG5cdFx0fSk7XG5cdFx0Y29uc3QgbW9yZSA9IGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRuYW1lOiAncmVhc29uR3JvdXAnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6K2m5ZGK5L+h5oGvJywgJ+itpuWRiuizh+ioiicpLFxuXHRcdH0pO1xuXHRcdG1vcmUuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICd0ZXh0YXJlYScsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj6/pgInkv6Hmga/vvJonLCAn5Y+v6YG46LOH6KiK77yaJyksXG5cdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn55CG55Sx5oiW5piv6ZmE5Yqg5L+h5oGvJywgJ+eQhueUseaIluaYr+mZhOWKoOizh+ioiicpLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHByZXZpZXdsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdCQocHJldmlld2xpbmspLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFR3aW5rbGUud2Fybi5jYWxsYmFja3MucHJldmlldyhyZXN1bHQpOyAvLyB8cmVzdWx0fCBpcyBkZWZpbmVkIGJlbG93XG5cdFx0fSk7XG5cblx0XHRwcmV2aWV3bGluay5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG5cdFx0cHJldmlld2xpbmsudGV4dENvbnRlbnQgPSB3aW5kb3cud2dVTFMoJ+mihOiniCcsICfpoJDopr0nKTtcblx0XHRtb3JlLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdGlkOiAnd2FybmluZ3ByZXZpZXcnLFxuXHRcdFx0bGFiZWw6IFtwcmV2aWV3bGlua10sXG5cdFx0fSk7XG5cdFx0bW9yZS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRpZDogJ3R3aW5rbGV3YXJuLXByZXZpZXdib3gnLFxuXHRcdFx0c3R5bGU6ICdkaXNwbGF5OiBub25lJyxcblx0XHR9KTtcblx0XHRtb3JlLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdGxhYmVsOiAn5o+Q5LqkJyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdGRpYWxvZy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0ZGlhbG9nLmRpc3BsYXkoKTtcblx0XHRyZXN1bHQubWFpbl9ncm91cC5yb290ID0gcmVzdWx0O1xuXHRcdHJlc3VsdC5wcmV2aWV3ZXIgPSBuZXcgTW9yZWJpdHMud2lraS5wcmV2aWV3KCQocmVzdWx0KS5maW5kKCdkaXYjdHdpbmtsZXdhcm4tcHJldmlld2JveCcpLmxhc3QoKVswXSk7XG5cdFx0Ly8gUG90ZW50aWFsIG5vdGljZXMgZm9yIHN0YWxlbmVzcyBhbmQgbWlzc2VkIHJldmVydHNcblx0XHRsZXQgbWVzc2FnZSA9ICcnO1xuXHRcdGxldCBxdWVyeSA9IHt9O1xuXHRcdGNvbnN0IHZhbnJldmlkID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCd2YW5hcnRpY2xlcmV2aWQnKTtcblx0XHRpZiAodmFucmV2aWQpIHtcblx0XHRcdC8vIElmIHlvdSB0cmllZCByZXZlcnRpbmcsIGNoZWNrIGlmICp5b3UqIGFjdHVhbGx5IHJldmVydGVkXG5cdFx0XHRpZiAoIW13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgnbm9hdXRvd2FybicpICYmIG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgndmFuYXJ0aWNsZScpKSB7XG5cdFx0XHRcdC8vIFZpYSBmbHVmZiBsaW5rXG5cdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHR0aXRsZXM6IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgndmFuYXJ0aWNsZScpLFxuXHRcdFx0XHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdFx0XHRcdHJ2c3RhcnRpZDogdmFucmV2aWQsXG5cdFx0XHRcdFx0cnZsaW1pdDogMixcblx0XHRcdFx0XHRydmRpcjogJ25ld2VyJyxcblx0XHRcdFx0XHRydnByb3A6ICd1c2VyJyxcblx0XHRcdFx0fTtcblx0XHRcdFx0bmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5qOA5p+l5oKo5piv5ZCm5oiQ5Yqf5Zue6YCA6K+l6aG16Z2iJywgJ+aqouafpeaCqOaYr+WQpuaIkOWKn+WbnumAgOipsumggemdoicpLFxuXHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdChhcGlvYmopID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJldmVydFVzZXIgPSAkKGFwaW9iai5nZXRSZXNwb25zZSgpKS5maW5kKCdyZXZpc2lvbnMgcmV2JylbMV0uZ2V0QXR0cmlidXRlKCd1c2VyJyk7XG5cdFx0XHRcdFx0XHRpZiAocmV2ZXJ0VXNlciAmJiByZXZlcnRVc2VyICE9PSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZSArPSB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WFtuS7luS6uuWbnumAgOS6huivpemhtemdou+8jOW5tuWPr+iDveW3sue7j+itpuWRiuivpeeUqOaIt+OAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+WFtuS7luS6uuWbnumAgOS6huipsumggemdou+8jOS4puWPr+iDveW3sue2k+itpuWRiuipsuS9v+eUqOiAheOAgidcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0JGJvZHkuZmluZCgnI3R3aW5rbGUtd2Fybi13YXJuaW5nLW1lc3NhZ2VzJykudGV4dChg6K2m5ZGK77yaJHttZXNzYWdlfWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBDb25maXJtIGVkaXQgd2Fzbid0IHRvbyBvbGQgZm9yIGEgd2FybmluZ1xuXHRcdFx0Y29uc3QgY2hlY2tTdGFsZSA9ICh2YW50aW1lc3RhbXBfKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJldkRhdGUgPSBuZXcgTW9yZWJpdHMuZGF0ZSh2YW50aW1lc3RhbXBfKTtcblx0XHRcdFx0aWYgKHZhbnRpbWVzdGFtcF8gJiYgcmV2RGF0ZS5pc1ZhbGlkKCkgJiYgcmV2RGF0ZS5hZGQoMjQsICdob3VycycpLmlzQmVmb3JlKG5ldyBEYXRlKCkpKSB7XG5cdFx0XHRcdFx0bWVzc2FnZSArPSB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6L+Z56yU57yW6L6R5piv5ZyoMjTlsI/ml7bliY3lgZrlh7rnmoTvvIznjrDlnKjorablkYrlj6/og73lt7Lov4fml7bjgIInLFxuXHRcdFx0XHRcdFx0J+mAmeethue3qOi8r+aYr+WcqDI05bCP5pmC5YmN5YGa5Ye655qE77yM54++5Zyo6K2m5ZGK5Y+v6IO95bey6YGO5pmC44CCJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0JGJvZHkuZmluZCgnI3R3aW5rbGUtd2Fybi13YXJuaW5nLW1lc3NhZ2VzJykudGV4dChg6K2m5ZGK77yaJHttZXNzYWdlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0bGV0IHZhbnRpbWVzdGFtcCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgndmFudGltZXN0YW1wJyk7XG5cdFx0XHQvLyBQcm92aWRlZCBmcm9tIGEgZmx1ZmYgbW9kdWxlLWJhc2VkIHJldmVydCwgbm8gQVBJIGxvb2t1cCBuZWNlc3Nhcnlcblx0XHRcdGlmICh2YW50aW1lc3RhbXApIHtcblx0XHRcdFx0Y2hlY2tTdGFsZSh2YW50aW1lc3RhbXApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cXVlcnkgPSB7XG5cdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdFx0XHRcdHJ2cHJvcDogJ3RpbWVzdGFtcCcsXG5cdFx0XHRcdFx0cmV2aWRzOiB2YW5yZXZpZCxcblx0XHRcdFx0fTtcblx0XHRcdFx0bmV3IE1vcmViaXRzLndpa2kuYXBpKHdpbmRvdy53Z1VMUygn6I635Y+W54mI5pys5pe26Ze05oizJywgJ+WPluW+l+eJiOacrOaZgumWk+aIsycpLCBxdWVyeSwgKGFwaW9iaikgPT4ge1xuXHRcdFx0XHRcdHZhbnRpbWVzdGFtcCA9ICQoYXBpb2JqLmdldFJlc3BvbnNlKCkpLmZpbmQoJ3JldmlzaW9ucyByZXYnKS5hdHRyKCd0aW1lc3RhbXAnKTtcblx0XHRcdFx0XHRjaGVja1N0YWxlKHZhbnRpbWVzdGFtcCk7XG5cdFx0XHRcdH0pLnBvc3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgaW5pdCA9ICgpID0+IHtcblx0XHRcdC8vIFdlIG11c3QgaW5pdCB0aGUgZmlyc3QgY2hvaWNlIChHZW5lcmFsIE5vdGUpO1xuXHRcdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRcdHJlc3VsdC5tYWluX2dyb3VwLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHR9O1xuXHRcdGluaXQoKTtcblx0fTtcblx0Ly8gVGhpcyBpcyBhbGwgdGhlIG1lc3NhZ2VzIHRoYXQgbWlnaHQgYmUgZGlzcGF0Y2hlZCBieSB0aGUgY29kZVxuXHQvLyBFYWNoIG9mIHRoZSBpbmRpdmlkdWFsIHRlbXBsYXRlcyByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cdC8vICAgbGFiZWwgKHJlcXVpcmVkKTogQSBzaG9ydCBkZXNjcmlwdGlvbiBkaXNwbGF5ZWQgaW4gdGhlIGRpYWxvZ1xuXHQvLyAgIHN1bW1hcnkgKHJlcXVpcmVkKTogVGhlIGVkaXQgc3VtbWFyeSB1c2VkLiBJZiBhbiBhcnRpY2xlIG5hbWUgaXMgZW50ZXJlZCwgdGhlIHN1bW1hcnkgaXMgcG9zdGZpeGVkIHdpdGggXCJvbiBbW2FydGljbGVdXVwiLCBhbmQgaXQgaXMgYWx3YXlzIHBvc3RmaXhlZCB3aXRoIFwiLiAkc3VtbWFyeUFkXCJcblx0Ly8gICBzdXBwcmVzc0FydGljbGVJblN1bW1hcnkgKG9wdGlvbmFsKTogU2V0IHRvIHRydWUgdG8gc3VwcHJlc3Mgc2hvd2luZyB0aGUgYXJ0aWNsZSBuYW1lIGluIHRoZSBlZGl0IHN1bW1hcnkuIFVzZWZ1bCBpZiB0aGUgd2FybmluZyByZWxhdGVzIHRvIGF0dGFjayBwYWdlcywgb3Igc29tZSBzdWNoLlxuXHRUd2lua2xlLndhcm4ubWVzc2FnZXMgPSB7XG5cdFx0bGV2ZWxzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdGNhdGVnb3J5OiB3aW5kb3cud2dVTFMoJ+S4jeWQjOexu+Wei+eahOmdnuW7uuiuvue8lui+kScsICfkuI3lkIzpoZ7liKXnmoTpnZ7lu7roqK3nt6jovK8nKSxcblx0XHRcdFx0bGlzdDoge1xuXHRcdFx0XHRcdCd1dy1jb3B5cmlnaHQnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L6154qv6JGX5L2c5p2DJywgJ+S+teeKr+eJiOasiicpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS+teeKr+iRl+S9nOadgycsICfms6jmhI/vvJrkvrXniq/niYjmrIonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5aSa5qyh5L6154qv6JGX5L2c5p2DJywgJ+WkmuasoeS+teeKr+eJiOasiicpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muWkmuasoeS+teeKr+iRl+S9nOadgycsICforablkYrvvJrlpJrmrKHkvrXniq/niYjmrIonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctY3J5c3RhbCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXoh4bmtYvmiJbmnKrnoa7orqTnmoTmtojmga8nLCAn5Yqg5YWl6IeG5ris5oiW5pyq56K66KqN55qE6KiK5oGvJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Yqg5YWl6IeG5rWL5oiW5pyq56Gu6K6k55qE5raI5oGvJywgJ+azqOaEj++8muWKoOWFpeiHhua4rOaIluacqueiuuiqjeeahOioiuaBrycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflpJrmrKHliqDlhaXoh4bmtYvmiJbmnKrnoa7orqTnmoTmtojmga8nLCAn5aSa5qyh5Yqg5YWl6IeG5ris5oiW5pyq56K66KqN55qE6KiK5oGvJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5aSa5qyh5Yqg5YWl6IeG5rWL5oiW5pyq56Gu6K6k55qE5raI5oGvJyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5aSa5qyh5Yqg5YWl6IeG5ris5oiW5pyq56K66KqN55qE6KiK5oGvJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1kZWxldGUnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiN5oGw5b2T5Zyw56e76Zmk6aG16Z2i5YaF5a6544CB5qih5p2/5oiW6LWE5paZJywgJ+S4jeaBsOeVtuWcsOenu+mZpOmggemdouWFp+WuueOAgeaooeadv+aIluizh+aWmScpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muS4jeaBsOW9k+WcsOenu+mZpOmhtemdouWGheWuueOAgeaooeadv+aIlui1hOaWmScsXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muS4jeaBsOeVtuWcsOenu+mZpOmggemdouWFp+WuueOAgeaooeadv+aIluizh+aWmSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiN5oGw5b2T5Zyw56e76Zmk6aG16Z2i5YaF5a6544CB5qih5p2/5oiW6LWE5paZJywgJ+S4jeaBsOeVtuWcsOenu+mZpOmggemdouWFp+WuueOAgeaooeadv+aIluizh+aWmScpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muS4jeaBsOW9k+WcsOenu+mZpOmhtemdouWGheWuueOAgeaooeadv+aIlui1hOaWmScsXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muS4jeaBsOeVtuWcsOenu+mZpOmggemdouWFp+WuueOAgeaooeadv+aIluizh+aWmSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctaW1hZ2UnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5Lit5Yqg5YWl5LiN5b2T5Zu+54mHJywgJ+WcqOmggemdouS4reWKoOWFpeS4jeeVtuWclueJhycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWcqOmhtemdouS4reWKoOWFpeS4jeW9k+WbvueJhycsICfms6jmhI/vvJrlnKjpoIHpnaLkuK3liqDlhaXkuI3nlbblnJbniYcnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5Lit5Yqg5YWl5LiN5b2T5Zu+54mHJywgJ+WcqOmggemdouS4reWKoOWFpeS4jeeVtuWclueJhycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muWcqOmhtemdouS4reWKoOWFpeS4jeW9k+WbvueJhycsICforablkYrvvJrlnKjpoIHpnaLkuK3liqDlhaXkuI3nlbblnJbniYcnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctbmV3cGFnZSc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliJvlu7rkuI3lvZPpobXpnaInLCAn5bu656uL5LiN55W26aCB6Z2iJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Yib5bu65LiN5b2T6aG16Z2iJywgJ+azqOaEj++8muW7uueri+S4jeeVtumggemdoicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliJvlu7rkuI3lvZPpobXpnaInLCAn5bu656uL5LiN55W26aCB6Z2iJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya5Yib5bu65LiN5b2T6aG16Z2iJywgJ+itpuWRiu+8muW7uueri+S4jeeVtumggemdoicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1ub3InOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu5Lit5Yqg5YWl5Y6f5Yib56CU56m2JywgJ+WcqOaineebruS4reWKoOWFpeWOn+WJteeglOepticpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWcqOadoeebruS4reWKoOWFpeWOn+WIm+eglOepticsICfms6jmhI/vvJrlnKjmop3nm67kuK3liqDlhaXljp/libXnoJTnqbYnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu5Lit5Yqg5YWl5Y6f5Yib56CU56m2JywgJ+WcqOaineebruS4reWKoOWFpeWOn+WJteeglOepticpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muWcqOadoeebruS4reWKoOWFpeWOn+WIm+eglOepticsICforablkYrvvJrlnKjmop3nm67kuK3liqDlhaXljp/libXnoJTnqbYnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctb3Bvdic6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfov53lj43lrqLop4Lljp/liJknLCAn6YGV5Y+N5a6i6KeA5Y6f5YmHJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya6L+d5Y+N5a6i6KeC5Y6f5YiZJywgJ+azqOaEj++8mumBleWPjeWuouingOWOn+WJhycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfov53lj43lrqLop4Lljp/liJknLCAn6YGV5Y+N5a6i6KeA5Y6f5YmHJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya6L+d5Y+N5a6i6KeC5Y6f5YiZJywgJ+itpuWRiu+8mumBleWPjeWuouingOWOn+WJhycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1yZWRpcmVjdCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliJvlu7rnoLTlnY/mgKfnmoTph43lrprlkJEnLCAn5bu656uL56C05aOe5oCn55qE6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Yib5bu656C05Z2P5oCn55qE6YeN5a6a5ZCRJywgJ+azqOaEj++8muW7uueri+egtOWjnuaAp+eahOmHjeWumuWQkScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliJvlu7rmgbbmhI/ph43lrprlkJEnLCAn5bu656uL5oOh5oSP6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya5Yib5bu65oG25oSP6YeN5a6a5ZCRJywgJ+itpuWRiu+8muW7uueri+aDoeaEj+mHjeWumuWQkScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy11cGxvYWQnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiK5Lyg5LiN5b2T5Zu+5YOPJywgJ+S4iuWCs+S4jeeVtuWcluWDjycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS4iuS8oOS4jeW9k+WbvuWDjycsICfms6jmhI/vvJrkuIrlgrPkuI3nlbblnJblg48nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiK5Lyg5LiN5b2T5Zu+5YOPJywgJ+S4iuWCs+S4jeeVtuWcluWDjycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muS4iuS8oOS4jeW9k+WbvuWDjycsICforablkYrvvJrkuIrlgrPkuI3nlbblnJblg48nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctdmFuZGFsaXNtJzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aYjuaYvueahOegtOWdjycsICfmmI7poa/nmoTnoLTlo54nKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrmmI7mmL7noLTlnY8nLCAn5rOo5oSP77ya5piO6aGv56C05aOeJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bGV2ZWwyOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aYjuaYvueahOegtOWdjycsICfmmI7poa/nmoTnoLTlo54nKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCforablkYrvvJrmmI7mmL7noLTlnY8nLCAn6K2m5ZGK77ya5piO6aGv56C05aOeJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3V3LXRkZWwnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo6Zeu6aKY5LuN5pyq6Kej5Yaz55qE5oOF5Ya15LiL56e76Zmk57u05oqk5oCn5qih5p2/Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5ZWP6aGM5LuN5pyq6Kej5rG655qE5oOF5rOB5LiL56e76Zmk57at6K235oCn5qih5p2/J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muenu+mZpOe7tOaKpOaAp+aooeadvycsICfms6jmhI/vvJrnp7vpmaTntq3orbfmgKfmqKHmnb8nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo6Zeu6aKY5LuN5pyq6Kej5Yaz55qE5oOF5Ya15LiL56e76Zmk57u05oqk5oCn5qih5p2/Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5ZWP6aGM5LuN5pyq6Kej5rG655qE5oOF5rOB5LiL56e76Zmk57at6K235oCn5qih5p2/J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muenu+mZpOe7tOaKpOaAp+aooeadvycsICforablkYrvvJrnp7vpmaTntq3orbfmgKfmqKHmnb8nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGNhdGVnb3J5OiB3aW5kb3cud2dVTFMoJ+WinuWKoOW5v+WRiicsICflop7liqDlu6PlkYonKSxcblx0XHRcdFx0bGlzdDoge1xuXHRcdFx0XHRcdCd1dy1zcGFtJzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WinuWKoOS4jeWQiOmAgueahOWklumDqOmTvuaOpScsICflop7liqDkuI3lkIjpgannmoTlpJbpg6jpgKPntZAnKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrlop7liqDkuI3lkIjpgILnmoTlpJbpg6jpk77mjqUnLCAn5rOo5oSP77ya5aKe5Yqg5LiN5ZCI6YGp55qE5aSW6YOo6YCj57WQJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bGV2ZWwyOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WinuWKoOWeg+WcvumTvuaOpScsICflop7liqDlnoPlnL7pgKPntZAnKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCforablkYrvvJrlop7liqDlnoPlnL7pk77mjqUnLCAn6K2m5ZGK77ya5aKe5Yqg5Z6D5Zy+6YCj57WQJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3V3LWFkdmVydCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliKnnlKjmnInlhb3moaPmoYjppobmnaXlj5HluIPlub/lkYrmiJbmjqjlub8nLCAn5Yip55So5pyJ54245qqU5qGI6aSo5L6G55m85biD5buj5ZGK5oiW5o6o5bujJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5Yip55So5pyJ5YW95qGj5qGI6aaG5p2l5Y+R5biD5bm/5ZGK5oiW5o6o5bm/Jyxcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5Yip55So5pyJ54245qqU5qGI6aSo5L6G55m85biD5buj5ZGK5oiW5o6o5bujJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliKnnlKjmnInlhb3moaPmoYjppobmnaXlj5HluIPlub/lkYrmiJbmjqjlub8nLCAn5Yip55So5pyJ54245qqU5qGI6aSo5L6G55m85biD5buj5ZGK5oiW5o6o5bujJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5Yip55So5pyJ5YW95qGj5qGI6aaG5p2l5Y+R5biD5bm/5ZGK5oiW5o6o5bm/Jyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5Yip55So5pyJ54245qqU5qGI6aSo5L6G55m85biD5buj5ZGK5oiW5o6o5bujJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Y2F0ZWdvcnk6IHdpbmRvdy53Z1VMUygn5Yqg5o+S5LiN5a6e44CB6K+96LCk5paH5a2XJywgJ+WKoOaPkuS4jeWvpuOAgeiqueisl+aWh+WtlycpLFxuXHRcdFx0XHRsaXN0OiB7XG5cdFx0XHRcdFx0J3V3LWJpb2cnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5Lq654mp5Lyg6K6w5Lit5Yqg5YWl5rKh5pyJ5Y+v6Z2g5p2l5rqQ5L2Q6K+B6ICM5LiU5Y+v6IO95byV5Y+R5LqJ6K6u55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5Lq654mp5YKz6KiY5Lit5Yqg5YWl5rKS5pyJ5Y+v6Z2g5L6G5rqQ5L2Q6K2J6ICM5LiU5Y+v6IO95byV55m854it6K2w55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muWcqOS6uueJqeS8oOiusOS4reWKoOWFpeayoeacieWPr+mdoOadpea6kOS9kOivgeiAjOS4lOWPr+iDveW8leWPkeS6ieiurueahOWGheWuuScsXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muWcqOS6uueJqeWCs+iomOS4reWKoOWFpeaykuacieWPr+mdoOS+hua6kOS9kOitieiAjOS4lOWPr+iDveW8leeZvOeIreitsOeahOWFp+WuuSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5Lq654mp5Lyg6K6w5Lit5Yqg5YWl5rKh5pyJ5Y+v6Z2g5p2l5rqQ5L2Q6K+B6ICM5LiU5Y+v6IO95byV5Y+R5LqJ6K6u55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Zyo5Lq654mp5YKz6KiY5Lit5Yqg5YWl5rKS5pyJ5Y+v6Z2g5L6G5rqQ5L2Q6K2J6ICM5LiU5Y+v6IO95byV55m854it6K2w55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muWcqOS6uueJqeS8oOiusOS4reWKoOWFpeayoeacieWPr+mdoOadpea6kOS9kOivgeiAjOS4lOWPr+iDveW8leWPkeS6ieiurueahOWGheWuuScsXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muWcqOS6uueJqeWCs+iomOS4reWKoOWFpeaykuacieWPr+mdoOS+hua6kOS9kOitieiAjOS4lOWPr+iDveW8leeZvOeIreitsOeahOWFp+WuuSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctZXJyb3InOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pWF5oSP5Yqg5YWl5LiN5a6e5YaF5a65JywgJ+aVheaEj+WKoOWFpeS4jeWvpuWFp+WuuScpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muaVheaEj+WKoOWFpeS4jeWunuWGheWuuScsICfms6jmhI/vvJrmlYXmhI/liqDlhaXkuI3lr6blhaflrrknKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pWF5oSP5Yqg5YWl5LiN5a6e5YaF5a65JywgJ+aVheaEj+WKoOWFpeS4jeWvpuWFp+WuuScpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muaVheaEj+WKoOWFpeS4jeWunuWGheWuuScsICforablkYrvvJrmlYXmhI/liqDlhaXkuI3lr6blhaflrrknKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctdW5zb3VyY2VkJzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeayoeacieWPr+mdoOadpea6kOS9kOivgeeahOWGheWuuScsICfliqDlhaXmspLmnInlj6/pnaDkvobmupDkvZDorYnnmoTlhaflrrknKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfms6jmhI/vvJrliqDlhaXmsqHmnInlj6/pnaDmnaXmupDkvZDor4HnmoTlhoXlrrknLFxuXHRcdFx0XHRcdFx0XHRcdCfms6jmhI/vvJrliqDlhaXmspLmnInlj6/pnaDkvobmupDkvZDorYnnmoTlhaflrrknXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bGV2ZWwyOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeayoeacieWPr+mdoOadpea6kOS9kOivgeeahOWGheWuuScsICfliqDlhaXmspLmnInlj6/pnaDkvobmupDkvZDorYnnmoTlhaflrrknKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCforablkYrvvJrliqDlhaXmsqHmnInlj6/pnaDmnaXmupDkvZDor4HnmoTlhoXlrrknLFxuXHRcdFx0XHRcdFx0XHRcdCforablkYrvvJrliqDlhaXmspLmnInlj6/pnaDkvobmupDkvZDorYnnmoTlhaflrrknXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRjYXRlZ29yeTogd2luZG93LndnVUxTKCfnv7vor5Hlk4HotKgnLCAn57+76K2v5ZOB6LOqJyksXG5cdFx0XHRcdGxpc3Q6IHtcblx0XHRcdFx0XHQndXctcm91Z2h0cmFuc2xhdGlvbic6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmgqjnv7vor5HnmoTotKjph4/mnInlvoXmlLnlloQnLCAn5oKo57+76K2v55qE6LOq6YeP5pyJ5b6F5pS55ZaEJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5oKo57+76K+R55qE6LSo6YeP5pyJ5b6F5pS55ZaEJywgJ+azqOaEj++8muaCqOe/u+itr+eahOizqumHj+acieW+heaUueWWhCcpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnspfliqPnv7vor5EnLCAn57KX5Yqj57+76K2vJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya57KX5Yqj57+76K+RJywgJ+itpuWRiu+8mueyl+WKo+e/u+itrycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Y2F0ZWdvcnk6IHdpbmRvdy53Z1VMUygn6Z2e6IO95o6l5Y+X5LiU6L+d5Y+N5p2h5L6L55qE5Y2V5pa56Z2i6KGM5Li65oiW5pON5L2cJywgJ+mdnuiDveaOpeWPl+S4lOmBleWPjeaineS+i+eahOWWruaWuemdouihjOeCuuaIluaTjeS9nCcpLFxuXHRcdFx0XHRsaXN0OiB7XG5cdFx0XHRcdFx0J3V3LWFmZCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnp7vpmaR7e2FmZH1977yI6aG16Z2i5a2Y5bqf6K6o6K6677yJ5qih5p2/JywgJ+enu+mZpHt7YWZkfX3vvIjpoIHpnaLlrZjlu6LoqI7oq5bvvInmqKHmnb8nKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfms6jmhI/vvJrnp7vpmaR7e2FmZH1977yI6aG16Z2i5a2Y5bqf6K6o6K6677yJ5qih5p2/Jyxcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya56e76Zmke3thZmR9fe+8iOmggemdouWtmOW7ouiojuirlu+8ieaooeadvydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56e76Zmke3thZmR9fe+8iOmhtemdouWtmOW6n+iuqOiuuu+8ieaooeadvycsICfnp7vpmaR7e2FmZH1977yI6aCB6Z2i5a2Y5bui6KiO6KuW77yJ5qih5p2/JyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya56e76Zmke3thZmR9fe+8iOmhtemdouWtmOW6n+iuqOiuuu+8ieaooeadvycsXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muenu+mZpHt7YWZkfX3vvIjpoIHpnaLlrZjlu6LoqI7oq5bvvInmqKHmnb8nXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3V3LW1vcyc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3mgbDlvZPnmoTmnaHnm67moLzlvI/jgIHml6XmnJ/jgIHor63oqIDnrYknLCAn5LiN5oGw55W255qE5qKd55uu5qC85byP44CB5pel5pyf44CB6Kqe6KiA562JJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5LiN5oGw5b2T55qE5p2h55uu5qC85byP44CB5pel5pyf44CB6K+t6KiA562JJyxcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5LiN5oGw55W255qE5qKd55uu5qC85byP44CB5pel5pyf44CB6Kqe6KiA562JJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3mgbDlvZPnmoTmnaHnm67moLzlvI/jgIHml6XmnJ/jgIHor63oqIDnrYknLCAn5LiN5oGw55W255qE5qKd55uu5qC85byP44CB5pel5pyf44CB6Kqe6KiA562JJyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5LiN5oGw5b2T55qE5p2h55uu5qC85byP44CB5pel5pyf44CB6K+t6KiA562JJyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5LiN5oGw55W255qE5qKd55uu5qC85byP44CB5pel5pyf44CB6Kqe6KiA562JJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1tb3ZlJzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+aXoOaVheenu+WKqOadoeebri/mlrDlkI3np7DkuI3nrKblkIjlkb3lkI3op4TojIMnLFxuXHRcdFx0XHRcdFx0XHRcdCfnhKHmlYXnp7vli5Xmop3nm64v5paw5ZCN56ix5LiN56ym5ZCI5ZG95ZCN6KaP56+EJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS4jeaBsOW9k+WcsOenu+WKqOmhtemdoicsICfms6jmhI/vvJrkuI3mgbDnlbblnLDnp7vli5XpoIHpnaInKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5oqK6aG16Z2i56e75Yqo5Yiw5LiN5oGw5b2T44CB6L+d5Y+N5ZG95ZCN5bi46KeE5oiW6L+d5Y+N5YWx6K+G55qE5qCH6aKYJyxcblx0XHRcdFx0XHRcdFx0XHQn5oqK6aCB6Z2i56e75YuV5Yiw5LiN5oGw55W244CB6YGV5Y+N5ZG95ZCN5bi46KaP5oiW6YGV5Y+N5YWx6K2Y55qE5qiZ6aGMJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muS4jeaBsOW9k+WcsOenu+WKqOmhtemdoicsICforablkYrvvJrkuI3mgbDnlbblnLDnp7vli5XpoIHpnaInKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctc3BlZWR5Jzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+enu+mZpHt7ZGVsZXRlfX3vvIjlv6vpgJ/liKDpmaTvvInmqKHmnb8nLCAn56e76Zmke3tkZWxldGV9fe+8iOW/q+mAn+WIqumZpO+8ieaooeadvycpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muenu+mZpHt7ZGVsZXRlfX3vvIjlv6vpgJ/liKDpmaTvvInmqKHmnb8nLFxuXHRcdFx0XHRcdFx0XHRcdCfms6jmhI/vvJrnp7vpmaR7e2RlbGV0ZX1977yI5b+r6YCf5Yiq6Zmk77yJ5qih5p2/J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnp7vpmaR7e2RlbGV0ZX1977yI5b+r6YCf5Yig6Zmk77yJ5qih5p2/JywgJ+enu+mZpHt7ZGVsZXRlfX3vvIjlv6vpgJ/liKrpmaTvvInmqKHmnb8nKSxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCforablkYrvvJrnp7vpmaR7e2RlbGV0ZX1977yI5b+r6YCf5Yig6Zmk77yJ5qih5p2/Jyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya56e76Zmke3tkZWxldGV9fe+8iOW/q+mAn+WIqumZpO+8ieaooeadvydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctdGFsa3BhZ2UnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N6K6o6K666aG16KeE6IyDJywgJ+mBleWPjeiojuirlumggeimj+evhCcpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8mui/neWPjeiuqOiuuumhteinhOiMgycsICfms6jmhI/vvJrpgZXlj43oqI7oq5bpoIHopo/nr4QnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N6K6o6K666aG16KeE6IyDJywgJ+mBleWPjeiojuirlumggeimj+evhCcpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8mui/neWPjeiuqOiuuumhteinhOiMgycsICforablkYrvvJrpgZXlj43oqI7oq5bpoIHopo/nr4QnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctdHB2Jzoge1xuXHRcdFx0XHRcdFx0bGV2ZWwxOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5L+u5pS55LuW5Lq655WZ6KiAJyxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogJ+azqOaEj++8muS/ruaUueS7luS6uueVmeiogCcsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bGV2ZWwyOiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5L+u5pS55LuW5Lq655WZ6KiAJyxcblx0XHRcdFx0XHRcdFx0c3VtbWFyeTogJ+itpuWRiu+8muS/ruaUueS7luS6uueVmeiogCcsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRjYXRlZ29yeTogd2luZG93LndnVUxTKCflr7nlhbbku5bnlKjmiLflkozmnaHnm67nmoTmgIHluqYnLCAn5bCN5YW25LuW55So5oi25ZKM5qKd55uu55qE5oWL5bqmJyksXG5cdFx0XHRcdGxpc3Q6IHtcblx0XHRcdFx0XHQndXctaWxsZWdhbCc6IHtcblx0XHRcdFx0XHRcdGxldmVsMToge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXkuI3nrKblkIjkuK3lm73ku7flgLzop4LnmoTlhoXlrrknLCAn5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE5YWn5a65JyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5Yqg5YWl5LiN56ym5ZCI5Lit5Zu95Lu35YC86KeC55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn5rOo5oSP77ya5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxldmVsMjoge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXkuI3nrKblkIjkuK3lm73ku7flgLzop4LnmoTlhoXlrrknLCAn5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE5YWn5a65JyksXG5cdFx0XHRcdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5Yqg5YWl5LiN56ym5ZCI5Lit5Zu95Lu35YC86KeC55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn6K2m5ZGK77ya5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd1dy1vd24nOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Li75byg5p2h55uu5omA5pyJ5p2DJywgJ+S4u+W8teaineebruaJgOacieasiicpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS4u+W8oOadoeebruaJgOacieadgycsICfms6jmhI/vvJrkuLvlvLXmop3nm67miYDmnInmrIonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Li75byg5p2h55uu55qE5omA5pyJ5p2DJywgJ+S4u+W8teaineebrueahOaJgOacieasiicpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muS4u+W8oOadoeebrueahOaJgOacieadgycsICforablkYrvvJrkuLvlvLXmop3nm67nmoTmiYDmnInmrIonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndXctc29jaWFsbWVkaWEnOiB7XG5cdFx0XHRcdFx0XHRsZXZlbDE6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCG5pyJ5YW95qGj5qGI6aaG5b2T5L2c56S+5Lqk5aqS5L2T5L2/55SoJywgJ+Wwh+acieeNuOaqlOahiOmkqOeVtuS9nOekvuS6pOWqkumrlOS9v+eUqCcpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muWwhuacieWFveaho+ahiOmmhuW9k+S9nOekvuS6pOWqkuS9k+S9v+eUqCcsXG5cdFx0XHRcdFx0XHRcdFx0J+azqOaEj++8muWwh+acieeNuOaqlOahiOmkqOeVtuS9nOekvuS6pOWqkumrlOS9v+eUqCdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsZXZlbDI6IHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCG5pyJ5YW95qGj5qGI6aaG5b2T5L2c56S+5Lqk5aqS5L2T5L2/55SoJywgJ+Wwh+acieeNuOaqlOahiOmkqOeVtuS9nOekvuS6pOWqkumrlOS9v+eUqCcpLFxuXHRcdFx0XHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muWwhuacieWFveaho+ahiOmmhuW9k+S9nOekvuS6pOWqkuS9k+S9v+eUqCcsXG5cdFx0XHRcdFx0XHRcdFx0J+itpuWRiu+8muWwh+acieeNuOaqlOahiOmkqOeVtuS9nOekvuS6pOWqkumrlOS9v+eUqCdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XSxcblx0XHRzaW5nbGVub3RpY2U6IHtcblx0XHRcdCd1dy0ycmVkaXJlY3QnOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOenu+WKqOmhtemdouWQjuW6lOivpeS/ruWkjeWPjOmHjemHjeWumuWQkScsICflnKjnp7vli5XpoIHpnaLlvozmh4noqbLkv67lvqnpm5nph43ph43lrprlkJEnKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrlnKjnp7vliqjpobXpnaLlkI7lupTor6Xkv67lpI3lj4zph43ph43lrprlkJEnLCAn5rOo5oSP77ya5Zyo56e75YuV6aCB6Z2i5b6M5oeJ6Kmy5L+u5b6p6ZuZ6YeN6YeN5a6a5ZCRJyksXG5cdFx0XHR9LFxuXHRcdFx0J3V3LWFpdic6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Li+5oql5LqL6aG55bm25LiN5piv56C05Z2P6KGM5Li6JywgJ+iIieWgseS6i+mgheS4puS4jeaYr+egtOWjnuihjOS4uicpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muS4jeaBsOW9k+WcsOS4vuaKpeegtOWdjycsICfms6jmhI/vvJrkuI3mgbDnlbblnLDoiInloLHnoLTlo54nKSxcblx0XHRcdH0sXG5cdFx0XHQndXctYXJ0aWNsZXNpZyc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu5Lit562+5ZCNJywgJ+WcqOaineebruS4reewveWQjScpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWcqOadoeebruS4reetvuWQjScsICfms6jmhI/vvJrlnKjmop3nm67kuK3nsL3lkI0nKSxcblx0XHRcdH0sXG5cdFx0XHQndXctYXV0b2Jpb2dyYXBoeSc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yib5bu66Ieq5LygJywgJ+W7uueri+iHquWCsycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWIm+W7uuiHquS8oCcsICfms6jmhI/vvJrlu7rnq4voh6rlgrMnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctYmFkY2F0Jzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXplJnor6/nmoTpobXpnaLliIbnsbsnLCAn5Yqg5YWl6Yyv6Kqk55qE6aCB6Z2i5YiG6aGeJyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Yqg5YWl6ZSZ6K+v55qE6aG16Z2i5YiG57G7JywgJ+azqOaEj++8muWKoOWFpemMr+iqpOeahOmggemdouWIhumhnicpLFxuXHRcdFx0fSxcblx0XHRcdCd1dy1iaXRlJzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkvKTlrrPmlrDmiYsnLCAn5YK35a6z5paw5omLJyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5Lyk5a6z5paw5omLJywgJ+azqOaEj++8muWCt+Wus+aWsOaJiycpLFxuXHRcdFx0fSxcblx0XHRcdCd1dy1jaGluZXNlJzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor7fkvb/nlKjmoIflh4bmsYnor63msp/pgJonLCAn6KuL5L2/55So5qiZ5rqW5ryi6Kqe5rqd6YCaJyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya6K+35L2/55So5qCH5YeG5rGJ6K+t5rKf6YCaJywgJ+azqOaEj++8muiri+S9v+eUqOaomea6lua8ouiqnua6nemAmicpLFxuXHRcdFx0fSxcblx0XHRcdCd1dy1jcG1vdmUnOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WJqui0tOenu+WKqCcsICfliarosrznp7vli5UnKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrliarotLTnp7vliqgnLCAn5rOo5oSP77ya5Ymq6LK856e75YuVJyksXG5cdFx0XHR9LFxuXHRcdFx0J3V3LWRhYic6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5raI5q2n5LmJ6aG15qC85byP6ZSZ6K+vJywgJ+a2iOatp+e+qemggeagvOW8j+mMr+iqpCcpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8mua2iOatp+S5iemhteagvOW8j+mUmeivrycsICfms6jmhI/vvJrmtojmrafnvqnpoIHmoLzlvI/pjK/oqqQnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctbmV3cGFnZS1kcmFmdCc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pyA6L+R5Yib5bu655qE6aG16Z2i6KKr56e75Yqo5Yiw6I2J56i/JywgJ+acgOi/keW7uueri+eahOmggemdouiiq+enu+WLleWIsOiNieeovycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muacgOi/keWIm+W7uueahOmhtemdouiiq+enu+WKqOWIsOiNieeovycsICfms6jmhI/vvJrmnIDov5Hlu7rnq4vnmoTpoIHpnaLooqvnp7vli5XliLDojYnnqL8nKSxcblx0XHRcdH0sXG5cdFx0XHQndXctc2VsZnJldmVydCc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5oSf6LCi5oKo6Ieq6KGM5Zue6YCA6Ieq5bex55qE5rWL6K+V77yM5Lul5ZCO5LiN6KaB5YaN6L+Z5qC35YGa5LqGJyxcblx0XHRcdFx0XHQn5oSf6Kyd5oKo6Ieq6KGM5Zue6YCA6Ieq5bex55qE5ris6Kmm77yM5Lul5b6M5LiN6KaB5YaN6YCZ5qij5YGa5LqGJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWbnumAgOS4quS6uueahOa1i+ivlScsICfms6jmhI/vvJrlm57pgIDlgIvkurrnmoTmuKzoqaYnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctc3Vic3R1Yic6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yib5bu65bCP5bCP5L2c5ZOBJywgJ+W7uueri+Wwj+Wwj+S9nOWTgScpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muWIm+W7uuWwj+Wwj+S9nOWTgScsICforablkYrvvJrlu7rnq4vlsI/lsI/kvZzlk4EnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctdGFsa2luYXJ0aWNsZSc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu6aG15Lit55WZ5LiL5oSP6KeBJywgJ+WcqOaineebrumggeS4reeVmeS4i+aEj+imiycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWcqOadoeebrumhteS4reeVmeS4i+aEj+ingScsICfms6jmhI/vvJrlnKjmop3nm67poIHkuK3nlZnkuIvmhI/oposnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctdW5zaWduZWQnOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ayoeacieWcqOiuqOiuuumhteS4iuetvuWQjScsICfmspLmnInlnKjoqI7oq5bpoIHkuIrnsL3lkI0nKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfms6jmhI/vvJrmsqHmnInlnKjorqjorrrpobXkuIrnrb7lkI0nLCAn5rOo5oSP77ya5rKS5pyJ5Zyo6KiO6KuW6aCB5LiK57C95ZCNJyksXG5cdFx0XHR9LFxuXHRcdFx0J3V3LXdyb25nY3NkJzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflv6vpgJ/liKDpmaTnkIbnlLHkuI3lvZMnLCAn5b+r6YCf5Yiq6Zmk55CG55Sx5LiN55W2JyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5rOo5oSP77ya5b+r6YCf5Yig6Zmk55CG55Sx5LiN5b2TJywgJ+azqOaEj++8muW/q+mAn+WIqumZpOeQhueUseS4jeeVticpLFxuXHRcdFx0fSxcblx0XHRcdCd1dy13cm9uZ3N1bW1hcnknOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOe8lui+keaRmOimgeWItumAoOS4jemAguW9k+eahOWGheWuuScsICflnKjnt6jovK/mkZjopoHoo73pgKDkuI3pgannlbbnmoTlhaflrrknKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCforablkYrvvJrlnKjnvJbovpHmkZjopoHliLbpgKDkuI3pgILlvZPnmoTlhoXlrrknLCAn6K2m5ZGK77ya5Zyo57eo6Lyv5pGY6KaB6KO96YCg5LiN6YGp55W255qE5YWn5a65JyksXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0c2luZ2xld2Fybjoge1xuXHRcdFx0J3V3LTNycic6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35r2c5Zyo6L+d5Y+N5Zue6YCA5LiN6L+H5LiJ5Y6f5YiZ55qE5Y+v6IO95oCnJywgJ+eUqOaItua9m+WcqOmBleWPjeWbnumAgOS4jemBjuS4ieWOn+WJh+eahOWPr+iDveaApycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+itpuWRiu+8mueUqOaIt+a9nOWcqOi/neWPjeWbnumAgOS4jei/h+S4ieWOn+WImeeahOWPr+iDveaApycsXG5cdFx0XHRcdFx0J+itpuWRiu+8mueUqOaItua9m+WcqOmBleWPjeWbnumAgOS4jemBjuS4ieWOn+WJh+eahOWPr+iDveaApydcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XHQndXctYXR0YWNrJzoge1xuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkurrouqvmlLvlh7snLCAn5Lq66Lqr5pS75pOKJyksXG5cdFx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn6K2m5ZGK77ya5Lq66Lqr5pS75Ye7JywgJ+itpuWRiu+8muS6uui6q+aUu+aTiicpLFxuXHRcdFx0XHRzdXBwcmVzc0FydGljbGVJblN1bW1hcnk6IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0J3V3LWNvaSc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yip55uK5Yay56qBJywgJ+WIqeebiuihneeqgScpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+azqOaEj++8muWIqeebiuWGsueqgScsICfms6jmhI/vvJrliKnnm4rooZ3nqoEnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctZmFrZXNvdXJjZSc6IHtcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Jma5p6E5pWw5o2u5rqQ5oiW5byV5paHJywgJ+iZm+ani+izh+aWmeS+hua6kOaIluW8leaWhycpLFxuXHRcdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+itpuWRiu+8muiZmuaehOaVsOaNrua6kOaIluW8leaWhycsICforablkYrvvJromZvmp4vos4fmlpnkvobmupDmiJblvJXmlocnKSxcblx0XHRcdH0sXG5cdFx0XHQndXctcGluZm8nOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W8oOi0tOS7luS6uumakOengScsICflvLXosrzku5bkurrpmrHnp4EnKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCforablkYrvvJrlvKDotLTku5bkurrpmpDnp4EnLCAn6K2m5ZGK77ya5by16LK85LuW5Lq66Zqx56eBJyksXG5cdFx0XHR9LFxuXHRcdFx0J3V3LWlsbGVnYWxhdmF0YXInOiB7XG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WktOWDj+i/neinhCcsICfpoK3lg4/pgZXopo8nKSxcblx0XHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCfmgqjov5HmnJ/kuIrkvKDnmoTlpLTlg4/ov53op4QnLCAn5oKo6L+R5pyf5LiK5YKz55qE6aCt5YOP6YGV6KaPJyksXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH07XG5cdC8vIFVzZWQgcmVwZWF0ZWRseSBiZWxvdyBhY3Jvc3MgbWVudSByZWJ1aWxkc1xuXHRUd2lua2xlLndhcm4ucHJldl9hcnRpY2xlID0gbnVsbDtcblx0VHdpbmtsZS53YXJuLnByZXZfcmVhc29uID0gbnVsbDtcblx0VHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqID0gbnVsbDtcblx0VHdpbmtsZS53YXJuLmNhbGxiYWNrLmNoYW5nZV9jYXRlZ29yeSA9IGZ1bmN0aW9uIGNoYW5nZV9jYXRlZ29yeShlKSB7XG5cdFx0Y29uc3Qge3ZhbHVlfSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHtzdWJfZ3JvdXB9ID0gZS50YXJnZXQucm9vdDtcblx0XHRzdWJfZ3JvdXAubWFpbl9ncm91cCA9IHZhbHVlO1xuXHRcdGxldCBvbGRfc3VidmFsdWUgPSBzdWJfZ3JvdXAudmFsdWU7XG5cdFx0bGV0IG9sZF9zdWJ2YWx1ZV9yZTtcblx0XHRpZiAob2xkX3N1YnZhbHVlKSB7XG5cdFx0XHRpZiAodmFsdWUgPT09ICdraXRjaGVuc2luaycpIHtcblx0XHRcdFx0Ly8gRXhhY3QgbWF0Y2ggcG9zc2libGUgaW4ga2l0Y2hlbnNpbmsgbWVudVxuXHRcdFx0XHRvbGRfc3VidmFsdWVfcmUgPSBuZXcgUmVnRXhwKG13LnV0aWwuZXNjYXBlUmVnRXhwKG9sZF9zdWJ2YWx1ZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2xkX3N1YnZhbHVlID0gb2xkX3N1YnZhbHVlLnJlcGxhY2UoL1xcZCooaW0pPyQvLCAnJyk7XG5cdFx0XHRcdG9sZF9zdWJ2YWx1ZV9yZSA9IG5ldyBSZWdFeHAoYCR7bXcudXRpbC5lc2NhcGVSZWdFeHAob2xkX3N1YnZhbHVlKX0oXFxcXGQqPykkYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlIChzdWJfZ3JvdXAuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRzdWJfZ3JvdXAucmVtb3ZlQ2hpbGQoc3ViX2dyb3VwLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblx0XHRsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHQvLyB3b3JrZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBjb21ibyBib3ggZW50cmllc1xuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAoY29udGVudHMsIGNvbnRhaW5lciwgd3JhcEluT3B0Z3JvdXAsIHZhbCA9IHZhbHVlKSA9PiB7XG5cdFx0XHQvLyBsZXZlbDItPjIsIHNpbmdsZXdhcm4tPicnOyBhbHNvIHVzZWQgdG8gZGlzdGluZ3Vpc2ggdGhlXG5cdFx0XHQvLyBzY2FsZWQgbGV2ZWxzIGZyb20gc2luZ2xlbm90aWNlLCBzaW5nbGV3YXJuLCBhbmQgY3VzdG9tXG5cdFx0XHRjb25zdCBsZXZlbCA9IHZhbC5yZXBsYWNlKC9eXFxEKy9nLCAnJyk7XG5cdFx0XHQvLyBkdWUgdG8gYW4gYXBwYXJlbnQgaU9TIGJ1Zywgd2UgaGF2ZSB0byBhZGQgYW4gb3B0aW9uLWdyb3VwIHRvIHByZXZlbnQgdHJ1bmNhdGlvbiBvZiB0ZXh0XG5cdFx0XHQvLyAoc2VhcmNoIFdUOlRXIGFyY2hpdmVzIGZvciBcIlByb2JsZW0gc2VsZWN0aW5nIHdhcm5pbmdzIG9uIGFuIGlQaG9uZVwiKVxuXHRcdFx0aWYgKHdyYXBJbk9wdGdyb3VwICYmICQuY2xpZW50LnByb2ZpbGUoKS5wbGF0Zm9ybSA9PT0gJ2lwaG9uZScpIHtcblx0XHRcdFx0bGV0IHdyYXBwZXJPcHRncm91cCA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHRcdFx0dHlwZTogJ29wdGdyb3VwJyxcblx0XHRcdFx0XHRsYWJlbDogJ+WPr+eUqOaooeadvycsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3cmFwcGVyT3B0Z3JvdXAgPSB3cmFwcGVyT3B0Z3JvdXAucmVuZGVyKCk7XG5cdFx0XHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZCh3cmFwcGVyT3B0Z3JvdXApO1xuXHRcdFx0XHRjb250YWluZXIgPSB3cmFwcGVyT3B0Z3JvdXA7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IFtpdGVtS2V5LCBpdGVtUHJvcGVydGllc10gb2YgT2JqZWN0LmVudHJpZXMoY29udGVudHMpKSB7XG5cdFx0XHRcdC8vIFNraXAgaWYgdGhlIGN1cnJlbnQgdGVtcGxhdGUgZG9lc24ndCBoYXZlIGEgdmVyc2lvbiBmb3IgdGhlIGN1cnJlbnQgbGV2ZWxcblx0XHRcdFx0aWYgKCEhbGV2ZWwgJiYgIWl0ZW1Qcm9wZXJ0aWVzW3ZhbF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qga2V5ID0gdHlwZW9mIGl0ZW1LZXkgPT09ICdzdHJpbmcnID8gaXRlbUtleSA6IGl0ZW1Qcm9wZXJ0aWVzLnZhbHVlO1xuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IGtleSArIGxldmVsO1xuXHRcdFx0XHRjb25zdCBlbGVtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogYHt7JHt0ZW1wbGF0ZX19fTogJHtsZXZlbCA/IGl0ZW1Qcm9wZXJ0aWVzW3ZhbF0ubGFiZWwgOiBpdGVtUHJvcGVydGllcy5sYWJlbH1gLFxuXHRcdFx0XHRcdHZhbHVlOiB0ZW1wbGF0ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIFNlbGVjdCBpdGVtIGJlc3QgY29ycmVzcG9uZGluZyB0byBwcmV2aW91cyBzZWxlY3Rpb25cblx0XHRcdFx0aWYgKCFzZWxlY3RlZCAmJiBvbGRfc3VidmFsdWUgJiYgb2xkX3N1YnZhbHVlX3JlLnRlc3QodGVtcGxhdGUpKSB7XG5cdFx0XHRcdFx0ZWxlbS5kYXRhLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRzZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZWxlbVJlbmRlcmVkID0gY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW0ucmVuZGVyKCkpO1xuXHRcdFx0XHQkKGVsZW1SZW5kZXJlZCkuZGF0YSgnbWVzc2FnZURhdGEnLCBpdGVtUHJvcGVydGllcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRzd2l0Y2ggKHZhbHVlKSB7XG5cdFx0XHRjYXNlICdzaW5nbGVub3RpY2UnOlxuXHRcdFx0Y2FzZSAnc2luZ2xld2Fybic6XG5cdFx0XHRcdGNyZWF0ZUVudHJpZXMoVHdpbmtsZS53YXJuLm1lc3NhZ2VzW3ZhbHVlXSwgc3ViX2dyb3VwLCB0cnVlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzaW5nbGVjb21iaW5lZCc6IHtcblx0XHRcdFx0Y29uc3QgdW5Tb3J0ZWRTaW5nbGV0cyA9IHtcblx0XHRcdFx0XHQuLi5Ud2lua2xlLndhcm4ubWVzc2FnZXMuc2luZ2xlbm90aWNlLFxuXHRcdFx0XHRcdC4uLlR3aW5rbGUud2Fybi5tZXNzYWdlcy5zaW5nbGV3YXJuLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBzb3J0ZWRTaW5nbGV0TWVzc2FnZXMgPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModW5Tb3J0ZWRTaW5nbGV0cykuc29ydCgpKSB7XG5cdFx0XHRcdFx0c29ydGVkU2luZ2xldE1lc3NhZ2VzW2tleV0gPSB1blNvcnRlZFNpbmdsZXRzW2tleV07XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3JlYXRlRW50cmllcyhzb3J0ZWRTaW5nbGV0TWVzc2FnZXMsIHN1Yl9ncm91cCwgdHJ1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnY3VzdG9tJzpcblx0XHRcdFx0Y3JlYXRlRW50cmllcyhUd2lua2xlLmdldFByZWYoJ2N1c3RvbVdhcm5pbmdMaXN0JyksIHN1Yl9ncm91cCwgdHJ1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAna2l0Y2hlbnNpbmsnOlxuXHRcdFx0XHRmb3IgKGNvbnN0IGx2bCBvZiBbJ2xldmVsMScsICdsZXZlbDInXSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgbGV2ZWxHcm91cCBvZiBUd2lua2xlLndhcm4ubWVzc2FnZXMubGV2ZWxzKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGxldmVsR3JvdXAubGlzdCwgc3ViX2dyb3VwLCB0cnVlLCBsdmwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjcmVhdGVFbnRyaWVzKFR3aW5rbGUud2Fybi5tZXNzYWdlcy5zaW5nbGVub3RpY2UsIHN1Yl9ncm91cCwgdHJ1ZSk7XG5cdFx0XHRcdGNyZWF0ZUVudHJpZXMoVHdpbmtsZS53YXJuLm1lc3NhZ2VzLnNpbmdsZXdhcm4sIHN1Yl9ncm91cCwgdHJ1ZSk7XG5cdFx0XHRcdGNyZWF0ZUVudHJpZXMoVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21XYXJuaW5nTGlzdCcpLCBzdWJfZ3JvdXAsIHRydWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2xldmVsMSc6XG5cdFx0XHRjYXNlICdsZXZlbDInOlxuXHRcdFx0XHQvLyBDcmVhdGVzIHN1Ymdyb3VwIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyB0byBwbGFjZSBpbiBpdDtcblx0XHRcdFx0Ly8gbGVhdmVzIFwiUmVtb3ZhbCBvZiBkZWxldGlvbiB0YWdzXCIgZW1wdHkgZm9yIGxldmVsIDJcblx0XHRcdFx0Zm9yIChjb25zdCBsZXZlbEdyb3VwIG9mIFR3aW5rbGUud2Fybi5tZXNzYWdlcy5sZXZlbHMpIHtcblx0XHRcdFx0XHRsZXQgb3B0Z3JvdXAgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ29wdGdyb3VwJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBsZXZlbEdyb3VwLmNhdGVnb3J5LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9wdGdyb3VwID0gb3B0Z3JvdXAucmVuZGVyKCk7XG5cdFx0XHRcdFx0c3ViX2dyb3VwLmFwcGVuZENoaWxkKG9wdGdyb3VwKTtcblx0XHRcdFx0XHQvLyBjcmVhdGUgdGhlIG9wdGlvbnNcblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGxldmVsR3JvdXAubGlzdCwgb3B0Z3JvdXAsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2F1dG9sZXZlbCc6IHtcblx0XHRcdFx0Ly8gQ2hlY2sgdXNlciBwYWdlIHRvIGRldGVybWluZSBhcHByb3ByaWF0ZSBsZXZlbFxuXHRcdFx0XHRjb25zdCBhdXRvbGV2ZWxQcm9jID0gKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHdpa2l0ZXh0ID0gVHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdFx0Ly8gaGlzdG9yeSBub3QgbmVlZGVkIGZvciBhdXRvbGV2ZWxcblx0XHRcdFx0XHRjb25zdCBbbGF0ZXN0XSA9IFR3aW5rbGUud2Fybi5jYWxsYmFja3MuZGF0ZVByb2Nlc3Npbmcod2lraXRleHQpO1xuXHRcdFx0XHRcdC8vIFBzZXVkby1wYXJhbXMgd2l0aCBvbmx5IHdoYXQncyBuZWVkZWQgdG8gcGFyc2UgdGhlIGxldmVsIGkuZS4gbm8gbWVzc2FnZURhdGFcblx0XHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRzdWJfZ3JvdXA6IG9sZF9zdWJ2YWx1ZSxcblx0XHRcdFx0XHRcdGFydGljbGU6IGUudGFyZ2V0LnJvb3QuYXJ0aWNsZS52YWx1ZSxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGx2bCA9IGBsZXZlbCR7VHdpbmtsZS53YXJuLmNhbGxiYWNrcy5hdXRvbGV2ZWxQYXJzZVdpa2l0ZXh0KHdpa2l0ZXh0LCBwYXJhbXMsIGxhdGVzdClbMV19YDtcblx0XHRcdFx0XHQvLyBJZGVudGljYWwgdG8gbGV2ZWwxLCBldGMuIGFib3ZlIGJ1dCBleHBsaWNpdGx5IHByb3ZpZGVzIHRoZSBsZXZlbFxuXHRcdFx0XHRcdGZvciAoY29uc3QgbGV2ZWxHcm91cCBvZiBUd2lua2xlLndhcm4ubWVzc2FnZXMubGV2ZWxzKSB7XG5cdFx0XHRcdFx0XHRsZXQgb3B0Z3JvdXAgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0Z3JvdXAnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogbGV2ZWxHcm91cC5jYXRlZ29yeSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0b3B0Z3JvdXAgPSBvcHRncm91cC5yZW5kZXIoKTtcblx0XHRcdFx0XHRcdHN1Yl9ncm91cC5hcHBlbmRDaGlsZChvcHRncm91cCk7XG5cdFx0XHRcdFx0XHQvLyBjcmVhdGUgdGhlIG9wdGlvbnNcblx0XHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMobGV2ZWxHcm91cC5saXN0LCBvcHRncm91cCwgZmFsc2UsIGx2bCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgc3ViY2F0ZWdvcnkgY2hhbmdlLCBhZGQgc2VsZWN0IG1lbnUsIGV0Yy5cblx0XHRcdFx0XHRUd2lua2xlLndhcm4uY2FsbGJhY2sucG9zdENhdGVnb3J5Q2xlYW51cChlKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKFR3aW5rbGUud2Fybi50YWxrcGFnZU9iaikge1xuXHRcdFx0XHRcdGF1dG9sZXZlbFByb2MoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCB1c2VydGFsa19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdGBVc2VyX3RhbGs6JHtyZWxldmFudFVzZXJOYW1lfWAsXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOi9veS4iuasoeitpuWRiicsICfovInlhaXkuIrmrKHorablkYonKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dXNlcnRhbGtfcGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdFx0dXNlcnRhbGtfcGFnZS5sb2FkKFxuXHRcdFx0XHRcdFx0KHBhZ2VvYmopID0+IHtcblx0XHRcdFx0XHRcdFx0VHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqID0gcGFnZW9iajsgLy8gVXBkYXRlIHRhbGtwYWdlT2JqXG5cdFx0XHRcdFx0XHRcdGF1dG9sZXZlbFByb2MoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIENhdGNoIGFuZCB3YXJuIGlmIHRoZSB0YWxrcGFnZSBjYW4ndCBsb2FkLFxuXHRcdFx0XHRcdFx0XHQvLyBtb3N0IGxpa2VseSBiZWNhdXNlIGl0J3MgYSBjcm9zcy1uYW1lc3BhY2UgcmVkaXJlY3Rcblx0XHRcdFx0XHRcdFx0Ly8gU3VwZXJzZWRlcyB0aGUgdHlwaWNhbCAkYXV0b2xldmVsTWVzc2FnZSBhZGRlZCBpbiBhdXRvbGV2ZWxQYXJzZVdpa2l0ZXh0XG5cdFx0XHRcdFx0XHRcdGNvbnN0ICRub1RhbGtQYWdlTm9kZSA9ICQoJzxzdHJvbmc+Jylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignaWQnLCAndHdpbmtsZS13YXJuLWF1dG9sZXZlbC1tZXNzYWdlJylcblx0XHRcdFx0XHRcdFx0XHQuY3NzKCdjb2xvcicsICcjZjAwJylcblx0XHRcdFx0XHRcdFx0XHQudGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0J+aXoOazleWKoOi9veeUqOaIt+iuqOiuuumhte+8jOi/meWPr+iDveaYr+WboOS4uuWug+aYr+i3qOWRveWQjeepuumXtOmHjeWumuWQke+8jOiHquWKqOmAieaLqeitpuWRiue6p+WIq+WwhuS4jeS8mui/kOS9nOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCfnhKHms5XovInlhaXkvb/nlKjogIXoqI7oq5bpoIHvvIzpgJnlj6/og73mmK/lm6DngrrlroPmmK/ot6jlkb3lkI3nqbrplpPph43mlrDlsI7lkJHvvIzoh6rli5Xpgbjmk4forablkYrntJrliKXlsIfkuI3mnIPpgYvkvZzjgIInXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0JG5vVGFsa1BhZ2VOb2RlLmluc2VydEJlZm9yZSgkYm9keS5maW5kKCcjdHdpbmtsZS13YXJuLXdhcm5pbmctbWVzc2FnZXMnKSk7XG5cdFx0XHRcdFx0XHRcdC8vIElmIGEgcHJldmlldyB3YXMgb3BlbmVkIHdoaWxlIGluIGEgZGlmZmVyZW50IG1vZGUsIGNsb3NlIGl0XG5cdFx0XHRcdFx0XHRcdC8vIFNob3VsZCBudWxsaWZ5IHRoZSBuZWVkIHRvIGNhdGNoIHRoZSBlcnJvciBpbiBwcmV2aWV3IGNhbGxiYWNrXG5cdFx0XHRcdFx0XHRcdGUudGFyZ2V0LnJvb3QucHJldmlld2VyLmNsb3NlUHJldmlldygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCd0d2lua2xld2Fybu+8muacquefpeeahOitpuWRiue7hCcsICd0d2lua2xld2Fybu+8muacquefpeeahOitpuWRiue1hCcpLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGV3YXJuJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBUcmlnZ2VyIHN1YmNhdGVnb3J5IGNoYW5nZSwgYWRkIHNlbGVjdCBtZW51LCBldGMuXG5cdFx0Ly8gSGVyZSBiZWNhdXNlIG9mIHRoZSBhc3luYyBsb2FkIGZvciBhdXRvbGV2ZWxcblx0XHRpZiAodmFsdWUgIT09ICdhdXRvbGV2ZWwnKSB7XG5cdFx0XHQvLyByZXNldCBhbnkgYXV0b2xldmVsLXNwZWNpZmljIG1lc3NhZ2VzIHdoaWxlIHdlJ3JlIGhlcmVcblx0XHRcdCRib2R5LmZpbmQoJyN0d2lua2xlLXdhcm4tYXV0b2xldmVsLW1lc3NhZ2UnKS5yZW1vdmUoKTtcblx0XHRcdFR3aW5rbGUud2Fybi5jYWxsYmFjay5wb3N0Q2F0ZWdvcnlDbGVhbnVwKGUpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS53YXJuLmNhbGxiYWNrLnBvc3RDYXRlZ29yeUNsZWFudXAgPSAoZSkgPT4ge1xuXHRcdC8vIGNsZWFyIG92ZXJyaWRkZW4gbGFiZWwgb24gYXJ0aWNsZSB0ZXh0Ym94XG5cdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRUb29sdGlwVmlzaWJpbGl0eShlLnRhcmdldC5yb290LmFydGljbGUsIHRydWUpO1xuXHRcdE1vcmViaXRzLnF1aWNrRm9ybS5yZXNldEVsZW1lbnRMYWJlbChlLnRhcmdldC5yb290LmFydGljbGUpO1xuXHRcdC8vIFRyaWdnZXIgY3VzdG9tIGxhYmVsL2NoYW5nZSBvbiBtYWluIGNhdGVnb3J5IGNoYW5nZVxuXHRcdFR3aW5rbGUud2Fybi5jYWxsYmFjay5jaGFuZ2Vfc3ViY2F0ZWdvcnkoZSk7XG5cdFx0Ly8gVXNlIHNlbGVjdDIgdG8gbWFrZSB0aGUgc2VsZWN0IG1lbnUgc2VhcmNoYWJsZVxuXHRcdGlmICghVHdpbmtsZS5nZXRQcmVmKCdvbGRTZWxlY3QnKSkge1xuXHRcdFx0JGJvZHlcblx0XHRcdFx0LmZpbmQoJ3NlbGVjdFtuYW1lPXN1Yl9ncm91cF0nKVxuXHRcdFx0XHQuc2VsZWN0Mih7XG5cdFx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0XHRtYXRjaGVyOiBNb3JlYml0cy5zZWxlY3QyLm1hdGNoZXJzLm9wdGdyb3VwRnVsbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3VsdDogTW9yZWJpdHMuc2VsZWN0Mi5oaWdobGlnaHRTZWFyY2hNYXRjaGVzLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiB7XG5cdFx0XHRcdFx0XHRzZWFyY2hpbmc6IE1vcmViaXRzLnNlbGVjdDIucXVlcnlJbnRlcmNlcHRvcixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2hhbmdlKFR3aW5rbGUud2Fybi5jYWxsYmFjay5jaGFuZ2Vfc3ViY2F0ZWdvcnkpO1xuXHRcdFx0JGJvZHkuZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uJykub24oJ2tleWRvd24nLCBNb3JlYml0cy5zZWxlY3QyLmF1dG9TdGFydCkudHJpZ2dlcignZm9jdXMnKTtcblx0XHRcdG13LnV0aWwuYWRkQ1NTKFxuXHRcdFx0XHQvKiBJbmNyZWFzZSBoZWlnaHQ7XG5cdFx0XHRcdCAqIFJlZHVjZSBwYWRkaW5nO1xuXHRcdFx0XHQgKiBBZGp1c3QgZm9udCBzaXplLlxuXHRcdFx0XHQgKiAqL1xuXHRcdFx0XHQnLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWRyb3Bkb3duIC5zZWxlY3QyLXJlc3VsdHM+LnNlbGVjdDItcmVzdWx0c19fb3B0aW9uc3ttYXgtaGVpZ2h0OjM1MHB4fS5zZWxlY3QyLXJlc3VsdHMgLnNlbGVjdDItcmVzdWx0c19fZ3JvdXAsLnNlbGVjdDItcmVzdWx0cyAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb257cGFkZGluZy10b3A6MXB4O3BhZGRpbmctYm90dG9tOjFweH0uc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItZHJvcGRvd24gLnNlbGVjdDItcmVzdWx0cywuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdGlvbiAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVke2ZvbnQtc2l6ZToxM3B4fSdcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLndhcm4uY2FsbGJhY2suY2hhbmdlX3N1YmNhdGVnb3J5ID0gKGUpID0+IHtcblx0XHRjb25zdCBtYWluX2dyb3VwID0gZS50YXJnZXQuZm9ybS5tYWluX2dyb3VwLnZhbHVlO1xuXHRcdGNvbnN0IHt2YWx1ZX0gPSBlLnRhcmdldC5mb3JtLnN1Yl9ncm91cDtcblx0XHQvLyBUYWdzIHRoYXQgZG9uJ3QgdGFrZSBhIGxpbmtlZCBhcnRpY2xlLCBidXQgc29tZXRoaW5nIGVsc2UgKG9mdGVuIGEgdXNlcm5hbWUpLlxuXHRcdC8vIFRoZSB2YWx1ZSBvZiBlYWNoIHRhZyBpcyB0aGUgbGFiZWwgbmV4dCB0byB0aGUgaW5wdXQgZmllbGRcblx0XHRjb25zdCBub3RMaW5rZWRBcnRpY2xlID0ge1xuXHRcdFx0J3V3LWJpdGUnOiB3aW5kb3cud2dVTFMoJ+iiq+KAnOWSrOWIsOKAneeahOeUqOaIt++8iOS4jeWQq1VzZXI677yJICcsICfooqvjgIzlkqzliLDjgI3nmoTkvb/nlKjogIXvvIjkuI3lkKtVc2VyOu+8iSAnKSxcblx0XHRcdCd1dy1haXYnOiB3aW5kb3cud2dVTFMoJ+WPr+mAiei+k+WFpeiiq+itpuWRiueahOeUqOaIt+WQje+8iOS4jeWQq1VzZXI677yJICcsICflj6/pgbjovLjlhaXooqvorablkYrnmoTkvb/nlKjogIXlkI3nqLHvvIjkuI3lkKtVc2VyOu+8iSAnKSxcblx0XHR9O1xuXHRcdGlmIChbJ3NpbmdsZW5vdGljZScsICdzaW5nbGV3YXJuJywgJ3NpbmdsZWNvbWJpbmVkJywgJ2tpdGNoZW5zaW5rJ10uaW5jbHVkZXMobWFpbl9ncm91cCkpIHtcblx0XHRcdGlmIChub3RMaW5rZWRBcnRpY2xlW3ZhbHVlXSkge1xuXHRcdFx0XHRpZiAoVHdpbmtsZS53YXJuLnByZXZfYXJ0aWNsZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFR3aW5rbGUud2Fybi5wcmV2X2FydGljbGUgPSBlLnRhcmdldC5mb3JtLmFydGljbGUudmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZS50YXJnZXQuZm9ybS5hcnRpY2xlLm5vdEFydGljbGUgPSB0cnVlO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmFydGljbGUudmFsdWUgPSAnJztcblx0XHRcdFx0Ly8gY2hhbmdlIGZvcm0gbGFiZWxzIGFjY29yZGluZyB0byB0aGUgd2FybmluZyBzZWxlY3RlZFxuXHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFRvb2x0aXBWaXNpYmlsaXR5KGUudGFyZ2V0LmZvcm0uYXJ0aWNsZSwgZmFsc2UpO1xuXHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0ub3ZlcnJpZGVFbGVtZW50TGFiZWwoZS50YXJnZXQuZm9ybS5hcnRpY2xlLCBub3RMaW5rZWRBcnRpY2xlW3ZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKGUudGFyZ2V0LmZvcm0uYXJ0aWNsZS5ub3RBcnRpY2xlKSB7XG5cdFx0XHRcdGlmIChUd2lua2xlLndhcm4ucHJldl9hcnRpY2xlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0ZS50YXJnZXQuZm9ybS5hcnRpY2xlLnZhbHVlID0gVHdpbmtsZS53YXJuLnByZXZfYXJ0aWNsZTtcblx0XHRcdFx0XHRUd2lua2xlLndhcm4ucHJldl9hcnRpY2xlID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmFydGljbGUubm90QXJ0aWNsZSA9IGZhbHNlO1xuXHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFRvb2x0aXBWaXNpYmlsaXR5KGUudGFyZ2V0LmZvcm0uYXJ0aWNsZSwgdHJ1ZSk7XG5cdFx0XHRcdE1vcmViaXRzLnF1aWNrRm9ybS5yZXNldEVsZW1lbnRMYWJlbChlLnRhcmdldC5mb3JtLmFydGljbGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBhZGQgYmlnIHJlZCBub3RpY2UsIHdhcm5pbmcgdXNlcnMgYWJvdXQgaG93IHRvIHVzZSB7e3V3LVtjb2ktXXVzZXJuYW1lfX0gYXBwcm9wcmlhdGVseVxuXHRcdCRib2R5LmZpbmQoJyN0dy13YXJuLXJlZC1ub3RpY2UnKS5yZW1vdmUoKTtcblx0fTtcblx0VHdpbmtsZS53YXJuLmNhbGxiYWNrcyA9IHtcblx0XHRnZXRXYXJuaW5nV2lraXRleHQ6ICh0ZW1wbGF0ZU5hbWUsIGFydGljbGUsIHJlYXNvbiwgaXNDdXN0b20sIG5vU2lnbikgPT4ge1xuXHRcdFx0bGV0IHRleHQgPSAne3snLmNvbmNhdCgnc3Vic3Q6JywgdGVtcGxhdGVOYW1lKTtcblx0XHRcdC8vIGFkZCBsaW5rZWQgYXJ0aWNsZSBmb3IgdXNlciB3YXJuaW5nc1xuXHRcdFx0aWYgKGFydGljbGUpIHtcblx0XHRcdFx0dGV4dCArPSBgfDE9JHthcnRpY2xlfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVhc29uKSB7XG5cdFx0XHRcdC8vIGFkZCBleHRyYSBtZXNzYWdlXG5cdFx0XHRcdHRleHQgKz0gYHwyPSR7cmVhc29ufWA7XG5cdFx0XHR9XG5cdFx0XHR0ZXh0ICs9ICd8c3Vic3Q9Jy5jb25jYXQoJ3N1YnN0OicpO1xuXHRcdFx0aWYgKCFub1NpZ24pIHtcblx0XHRcdFx0dGV4dCArPSAnfHNpZz1+ficuY29uY2F0KCd+ficpO1xuXHRcdFx0fVxuXHRcdFx0dGV4dCArPSAnfX0nO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fSxcblx0XHRzaG93UHJldmlldzogKGZvcm0sIHRlbXBsYXRlbmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgaW5wdXQgPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0SW5wdXREYXRhKGZvcm0pO1xuXHRcdFx0Ly8gUHJvdmlkZWQgb24gYXV0b2xldmVsLCBub3Qgb3RoZXJ3aXNlXG5cdFx0XHR0ZW1wbGF0ZW5hbWUgfHw9IGlucHV0LnN1Yl9ncm91cDtcblx0XHRcdGNvbnN0IGxpbmtlZGFydGljbGUgPSBpbnB1dC5hcnRpY2xlO1xuXHRcdFx0Y29uc3QgdGVtcGxhdGV0ZXh0ID0gVHdpbmtsZS53YXJuLmNhbGxiYWNrcy5nZXRXYXJuaW5nV2lraXRleHQoXG5cdFx0XHRcdHRlbXBsYXRlbmFtZSxcblx0XHRcdFx0bGlua2VkYXJ0aWNsZSxcblx0XHRcdFx0aW5wdXQucmVhc29uLFxuXHRcdFx0XHRpbnB1dC5tYWluX2dyb3VwID09PSAnY3VzdG9tJ1xuXHRcdFx0KTtcblx0XHRcdGZvcm0ucHJldmlld2VyLmJlZ2luUmVuZGVyKHRlbXBsYXRldGV4dCwgYFVzZXJfdGFsazoke3JlbGV2YW50VXNlck5hbWV9YCk7IC8vIEZvcmNlIHdpa2l0ZXh0L2NvcnJlY3QgdXNlcm5hbWVcblx0XHR9LFxuXG5cdFx0Ly8gSnVzdCBhIHBhc3MtdGhyb3VnaCB1bmxlc3MgdGhlIGF1dG9sZXZlbCBvcHRpb24gd2FzIHNlbGVjdGVkXG5cdFx0cHJldmlldzogKGZvcm0pID0+IHtcblx0XHRcdGlmIChmb3JtLm1haW5fZ3JvdXAudmFsdWUgPT09ICdhdXRvbGV2ZWwnKSB7XG5cdFx0XHRcdC8vIEFsd2F5cyBnZXQgYSBuZXcsIHVwZGF0ZWQgdGFsa3BhZ2UgZm9yIGF1dG9sZXZlbCBwcm9jZXNzaW5nXG5cdFx0XHRcdGNvbnN0IHVzZXJ0YWxrX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdGBVc2VyX3RhbGs6JHtyZWxldmFudFVzZXJOYW1lfWAsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDovb3kuIrmrKHorablkYonLCAn6LyJ5YWl5LiK5qyh6K2m5ZGKJylcblx0XHRcdFx0KTtcblx0XHRcdFx0dXNlcnRhbGtfcGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdC8vIFdpbGwgZmFpbCBzaWxlbnRseSBpZiB0aGUgdGFsayBwYWdlIGlzIGEgY3Jvc3MtbnMgcmVkaXJlY3QsXG5cdFx0XHRcdC8vIHJlbW92YWwgb2YgdGhlIHByZXZpZXcgYm94IGhhbmRsZWQgd2hlbiBsb2FkaW5nIHRoZSBtZW51XG5cdFx0XHRcdHVzZXJ0YWxrX3BhZ2UubG9hZCgocGFnZW9iaikgPT4ge1xuXHRcdFx0XHRcdFR3aW5rbGUud2Fybi50YWxrcGFnZU9iaiA9IHBhZ2VvYmo7IC8vIFVwZGF0ZSB0YWxrcGFnZU9ialxuXHRcdFx0XHRcdGNvbnN0IHdpa2l0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRcdC8vIGhpc3Rvcnkgbm90IG5lZWRlZCBmb3IgYXV0b2xldmVsXG5cdFx0XHRcdFx0Y29uc3QgW2xhdGVzdF0gPSBUd2lua2xlLndhcm4uY2FsbGJhY2tzLmRhdGVQcm9jZXNzaW5nKHdpa2l0ZXh0KTtcblx0XHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRzdWJfZ3JvdXA6IGZvcm0uc3ViX2dyb3VwLnZhbHVlLFxuXHRcdFx0XHRcdFx0YXJ0aWNsZTogZm9ybS5hcnRpY2xlLnZhbHVlLFxuXHRcdFx0XHRcdFx0bWVzc2FnZURhdGE6ICQoZm9ybS5zdWJfZ3JvdXApXG5cdFx0XHRcdFx0XHRcdC5maW5kKGBvcHRpb25bdmFsdWU9XCIkeyQoZm9ybS5zdWJfZ3JvdXApLnZhbCgpfVwiXWApXG5cdFx0XHRcdFx0XHRcdC5kYXRhKCdtZXNzYWdlRGF0YScpLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgW3RlbXBsYXRlXSA9IFR3aW5rbGUud2Fybi5jYWxsYmFja3MuYXV0b2xldmVsUGFyc2VXaWtpdGV4dCh3aWtpdGV4dCwgcGFyYW1zLCBsYXRlc3QpO1xuXHRcdFx0XHRcdFR3aW5rbGUud2Fybi5jYWxsYmFja3Muc2hvd1ByZXZpZXcoZm9ybSwgdGVtcGxhdGUpO1xuXHRcdFx0XHRcdC8vIElmIHRoZSB0ZW1wbGF0ZXMgaGF2ZSBkaXZlcmdlZCwgZmFrZSBhIGNoYW5nZSBldmVudFxuXHRcdFx0XHRcdC8vIHRvIHJlbG9hZCB0aGUgbWVudSB3aXRoIHRoZSB1cGRhdGVkIHBhZ2VvYmpcblx0XHRcdFx0XHRpZiAoZm9ybS5zdWJfZ3JvdXAudmFsdWUgIT09IHRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRcdFx0XHRcdGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdFx0Zm9ybS5tYWluX2dyb3VwLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0VHdpbmtsZS53YXJuLmNhbGxiYWNrcy5zaG93UHJldmlldyhmb3JtKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFVzZWQgaW4gdGhlIG1haW4gYW5kIGF1dG9sZXZlbCBsb29wcyB0byBkZXRlcm1pbmUgd2hlbiB0byB3YXJuXG5cdFx0ICogYWJvdXQgZXhjZXNzaXZlbHkgcmVjZW50LCBzdGFsZSwgb3IgaWRlbnRpY2FsIHdhcm5pbmdzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHdpa2l0ZXh0ICBUaGUgdGV4dCBvZiBhIHVzZXIncyB0YWxrIHBhZ2UsIGZyb20gZ2V0UGFnZVRleHQoKVxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3RbXX0gLSBBcnJheSBvZiBvYmplY3RzOiBsYXRlc3QgY29udGFpbnMgbW9zdCByZWNlbnRcblx0XHQgKiB3YXJuaW5nIGFuZCBkYXRlOyBoaXN0b3J5IGxpc3RzIGFsbCBwcmlvciB3YXJuaW5nc1xuXHRcdCAqL1xuXHRcdGRhdGVQcm9jZXNzaW5nOiAod2lraXRleHQpID0+IHtcblx0XHRcdGNvbnN0IGhpc3RvcnlfcmUgPVxuXHRcdFx0XHQvPCEtLVxccz9UZW1wbGF0ZTooW3VVXXctLio/KVxccz8tLT4uKj8oXFxkezR9KeW5tChcXGR7MSwyfSnmnIgoXFxkezEsMn0p5pelIFxcKFvml6XkuIDkuozkuInlm5vkupTlha1dXFwpIChcXGR7MSwyfSk6KFxcZHsxLDJ9KSBcXChDU1RcXCkvZztcblx0XHRcdGNvbnN0IGhpc3RvcnkgPSB7fTtcblx0XHRcdGNvbnN0IGxhdGVzdCA9IHtcblx0XHRcdFx0ZGF0ZTogbmV3IE1vcmViaXRzLmRhdGUoMCksXG5cdFx0XHRcdHR5cGU6ICcnLFxuXHRcdFx0fTtcblx0XHRcdGxldCBjdXJyZW50O1xuXHRcdFx0d2hpbGUgKChjdXJyZW50ID0gaGlzdG9yeV9yZS5leGVjKHdpa2l0ZXh0KSkgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgWywgdGVtcGxhdGVdID0gY3VycmVudDtcblx0XHRcdFx0Y29uc3QgY3VycmVudF9kYXRlID0gbmV3IE1vcmViaXRzLmRhdGUoXG5cdFx0XHRcdFx0YCR7Y3VycmVudFsyXX0tJHtjdXJyZW50WzNdfS0ke2N1cnJlbnRbNF19ICR7Y3VycmVudFs1XX06JHtjdXJyZW50WzZdfSAoQ1NUKWBcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCEodGVtcGxhdGUgaW4gaGlzdG9yeSkgfHwgaGlzdG9yeVt0ZW1wbGF0ZV0uaXNCZWZvcmUoY3VycmVudF9kYXRlKSkge1xuXHRcdFx0XHRcdGhpc3RvcnlbdGVtcGxhdGVdID0gY3VycmVudF9kYXRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghbGF0ZXN0LmRhdGUuaXNBZnRlcihjdXJyZW50X2RhdGUpKSB7XG5cdFx0XHRcdFx0bGF0ZXN0LmRhdGUgPSBjdXJyZW50X2RhdGU7XG5cdFx0XHRcdFx0bGF0ZXN0LnR5cGUgPSB0ZW1wbGF0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtsYXRlc3QsIGhpc3RvcnldO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogTWFpbiBsb29wIGZvciBkZWNpZGluZyB3aGF0IHRoZSBsZXZlbCBzaG91bGQgaW5jcmVtZW50IHRvLiBNb3N0IG9mXG5cdFx0ICogdGhpcyBpcyByZWFsbHkganVzdCBlcnJvciBjYXRjaGluZyBhbmQgdXBkYXRpbmcgdGhlIHN1YnNlcXVlbnQgZGF0YS5cblx0XHQgKiBNYXkgcHJvZHVjZSB1cCB0byB0d28gbm90aWNlcyBpbiBhIHR3aW5rbGUtd2Fybi1hdXRvbGV2ZWwtbWVzc2FnZXMgZGl2XG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gd2lraXRleHQgIFRoZSB0ZXh0IG9mIGEgdXNlcidzIHRhbGsgcGFnZSwgZnJvbSBnZXRQYWdlVGV4dCgpIChyZXF1aXJlZClcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zICBQYXJhbXMgb2JqZWN0OiBzdWJfZ3JvdXAgaXMgdGhlIHRlbXBsYXRlIChyZXF1aXJlZCk7XG5cdFx0ICogYXJ0aWNsZSBpcyB0aGUgdXNlci1wcm92aWRlZCBhcnRpY2xlIChmb3JtLmFydGljbGUpIHVzZWQgdG8gbGluayBBUlYgb24gcmVjZW50IGxldmVsMiB3YXJuaW5ncztcblx0XHQgKiBtZXNzYWdlRGF0YSBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBnZXR0aW5nIHRoZSBmdWxsIHRlbXBsYXRlLCBhcyBpdCdzXG5cdFx0ICogdXNlZCB0byBlbnN1cmUgYSB2YWxpZCB0ZW1wbGF0ZSBvZiB0aGF0IGxldmVsIGV4aXN0c1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBsYXRlc3QgIEZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IHJldHVybmVkIGZyb21cblx0XHQgKiBkYXRlUHJvY2Vzc2luZy4gUHJvdmlkZWQgaGVyZSByYXRoZXIgdGhhbiBwcm9jZXNzZWQgd2l0aGluIHRvIGF2b2lkXG5cdFx0ICogcmVwZWF0ZWQgY2FsbCB0byBkYXRlUHJvY2Vzc2luZ1xuXHRcdCAqIEBwYXJhbSB7KERhdGV8TW9yZWJpdHMuZGF0ZSl9IGRhdGUgIERhdGUgZnJvbSB3aGljaCBzdGFsZW5lc3MgaXMgZGV0ZXJtaW5lZFxuXHRcdCAqIEBwYXJhbSB7TW9yZWJpdHMuc3RhdHVzfSBzdGF0ZWxlbSAgU3RhdHVzIGVsZW1lbnQsIG9ubHkgdXNlZCBmb3IgaGFuZGxpbmcgZXJyb3IgaW4gZmluYWwgZXhlY3V0aW9uXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7QXJyYXl9IC0gQXJyYXkgdGhhdCBjb250YWlucyB0aGUgZnVsbCB0ZW1wbGF0ZSBhbmQganVzdCB0aGUgd2FybmluZyBsZXZlbFxuXHRcdCAqL1xuXHRcdGF1dG9sZXZlbFBhcnNlV2lraXRleHQ6ICh3aWtpdGV4dCwgcGFyYW1zLCBsYXRlc3QsIGRhdGUsIHN0YXRlbGVtKSA9PiB7XG5cdFx0XHRsZXQgbGV2ZWw7IC8vIHVuZGVmaW5lZCByYXRoZXIgdGhhbiAnJyBtZWFucyB0aGUgaXNOYU4gYmVsb3cgd2lsbCByZXR1cm4gdHJ1ZVxuXHRcdFx0aWYgKC9cXGQ/JC8udGVzdChsYXRlc3QudHlwZSkpIHtcblx0XHRcdFx0Ly8gbGV2ZWwxLTJcblx0XHRcdFx0bGV2ZWwgPSBOdW1iZXIucGFyc2VJbnQobGF0ZXN0LnR5cGUucmVwbGFjZSgvLiooXFxkKT8kLywgJyQxJyksIDEwKTtcblx0XHRcdH0gZWxzZSBpZiAobGF0ZXN0LnR5cGUpIHtcblx0XHRcdFx0bGV2ZWwgPSAxOyAvLyBzaW5nbGVub3RpY2Ugb3Igbm90IGZvdW5kXG5cdFx0XHR9XG5cdFx0XHRjb25zdCAkYXV0b2xldmVsTWVzc2FnZSA9ICQoJzxkaXY+JykuYXR0cignaWQnLCAndHdpbmtsZS13YXJuLWF1dG9sZXZlbC1tZXNzYWdlJyk7XG5cdFx0XHRpZiAoTnVtYmVyLmlzTmFOKGxldmVsKSkge1xuXHRcdFx0XHQvLyBObyBwcmlvciB3YXJuaW5ncyBmb3VuZCwgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRcdFx0bGV2ZWwgPSAxO1xuXHRcdFx0fSBlbHNlIGlmIChsZXZlbCA+IDIgfHwgbGV2ZWwgPCAxKSB7XG5cdFx0XHRcdC8vIFNob3VsZG4ndCBoYXBwZW5cblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5peg5rOV6Kej5p6Q5LiK5qyh55qE6K2m5ZGK5bGC57qn77yM6K+35omL5Yqo6YCJ5oup5LiA5Liq6K2m5ZGK5bGC57qn44CCJyxcblx0XHRcdFx0XHQn54Sh5rOV6Kej5p6Q5LiK5qyh55qE6K2m5ZGK5bGk57Sa77yM6KuL5omL5YuV6YG45pOH5LiA5YCL6K2m5ZGK5bGk57Sa44CCJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoc3RhdGVsZW0pIHtcblx0XHRcdFx0XHRzdGF0ZWxlbS5lcnJvcihtZXNzYWdlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtdy5ub3RpZnkobWVzc2FnZSwge1xuXHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXdhcm4nLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGUgfHw9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdGNvbnN0IGF1dG9UaW1lb3V0ID0gbmV3IE1vcmViaXRzLmRhdGUobGF0ZXN0LmRhdGUuZ2V0VGltZSgpKS5hZGQoXG5cdFx0XHRcdFx0TnVtYmVyLnBhcnNlSW50KFR3aW5rbGUuZ2V0UHJlZignYXV0b2xldmVsU3RhbGVEYXlzJyksIDEwKSxcblx0XHRcdFx0XHQnZGF5J1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYXV0b1RpbWVvdXQuaXNBZnRlcihkYXRlKSkge1xuXHRcdFx0XHRcdGlmIChsZXZlbCA9PT0gMikge1xuXHRcdFx0XHRcdFx0bGV2ZWwgPSAyO1xuXHRcdFx0XHRcdFx0Ly8gQmFzaWNhbGx5IGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBmaW5hbCBNYWluIGV2YWx1YXRpb24gb3Igbm90LFxuXHRcdFx0XHRcdFx0Ly8gYW5kIHRodXMgd2hldGhlciB3ZSBjYW4gY29udGludWUgb3IgbmVlZCB0byBkaXNwbGF5IHRoZSB3YXJuaW5nIGFuZCBsaW5rXG5cdFx0XHRcdFx0XHRpZiAoIXN0YXRlbGVtKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0ICRsaW5rID0gJCgnPGE+Jylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignaHJlZicsICcjJylcblx0XHRcdFx0XHRcdFx0XHQudGV4dCh3aW5kb3cud2dVTFMoJ+WNleWHu+atpOWkhOaJk+W8gOWRiueKtuW3peWFtycsICfpu57mk4rmraTomZXmiZPplovlkYrni4Dlt6XlhbcnKSlcblx0XHRcdFx0XHRcdFx0XHQuY3NzKCdmb250LXdlaWdodCcsICdib2xkJylcblx0XHRcdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0VHdpbmtsZS53YXJuLmRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0VHdpbmtsZS5hcnYuY2FsbGJhY2socmVsZXZhbnRVc2VyTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQkYm9keS5maW5kKCdpbnB1dFtuYW1lPXBhZ2VdJykudmFsKHBhcmFtcy5hcnRpY2xlKTsgLy8gVGFyZ2V0IHBhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdCRib2R5LmZpbmQoJ2lucHV0W3ZhbHVlPWZpbmFsXScpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTsgLy8gVmFuZGFsaXNtIGFmdGVyIGZpbmFsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RhdHVzTm9kZSA9ICQoJzxkaXY+Jylcblx0XHRcdFx0XHRcdFx0XHQuY3NzKCdjb2xvcicsICcjZjAwJylcblx0XHRcdFx0XHRcdFx0XHQudGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdHJlbGV2YW50VXNlck5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+acgOWQjuaUtuWIsOS6huS4gOS4quWxgue6pzLorablkYrvvIgnLCAn5pyA5b6M5pS25Yiw5LqG5LiA5YCL5bGk57SaMuitpuWRiu+8iCcpICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGF0ZXN0LnR5cGUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J++8ie+8jOaJgOS7peWwhuWFtuaKpeWRiue7meeuoeeQhuS6uuWRmOS8muavlOi+g+Wlve+8mycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J++8ie+8jOaJgOS7peWwh+WFtuWgseWRiue1pueuoeeQhuS6uuWToeacg+avlOi8g+Wlve+8mydcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHN0YXR1c05vZGUuYXBwZW5kKCRsaW5rWzBdKTtcblx0XHRcdFx0XHRcdFx0JGF1dG9sZXZlbE1lc3NhZ2UuYXBwZW5kKHN0YXR1c05vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBBdXRvbWF0aWNhbGx5IGluY3JlYXNlIHNldmVyaXR5XG5cdFx0XHRcdFx0XHRsZXZlbCArPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBSZXNldCB3YXJuaW5nIGxldmVsIGlmIG1vc3QtcmVjZW50IHdhcm5pbmcgaXMgdG9vIG9sZFxuXHRcdFx0XHRcdGxldmVsID0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0JGF1dG9sZXZlbE1lc3NhZ2UucHJlcGVuZChcblx0XHRcdFx0JChcblx0XHRcdFx0XHRgPGRpdj4ke3dpbmRvdy53Z1VMUygn5bCG5Y+R6YCBJywgJ+Wwh+eZvOmAgScpfTxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+JHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5bGC57qnJyxcblx0XHRcdFx0XHRcdCflsaTntJonXG5cdFx0XHRcdFx0KX0ke2xldmVsfTwvc3Bhbj7orablkYrmqKHmnb/jgII8L2Rpdj5gXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHQvLyBQbGFjZSBhZnRlciB0aGUgc3RhbGUgYW5kIG90aGVyLXVzZXItcmV2ZXJ0ZWQgKHRleHQtb25seSkgbWVzc2FnZXNcblx0XHRcdCRib2R5LmZpbmQoJyN0d2lua2xlLXdhcm4tYXV0b2xldmVsLW1lc3NhZ2UnKS5yZW1vdmUoKTsgLy8gY2xlYW4gc2xhdGVcblx0XHRcdCRhdXRvbGV2ZWxNZXNzYWdlLmluc2VydEFmdGVyKCRib2R5LmZpbmQoJyN0d2lua2xlLXdhcm4td2FybmluZy1tZXNzYWdlcycpKTtcblx0XHRcdGxldCB0ZW1wbGF0ZSA9IHBhcmFtcy5zdWJfZ3JvdXAucmVwbGFjZSgvKC4qKVxcZCQvLCAnJDEnKTtcblx0XHRcdC8vIFZhbGlkYXRlIHdhcm5pbmcgbGV2ZWwsIGZhbGxpbmcgYmFjayB0byB0aGUgdXctZ2VuZXJpYyBzZXJpZXMuXG5cdFx0XHQvLyBPbmx5IGEgZmV3IGl0ZW1zIGFyZSBtaXNzaW5nIGEgbGV2ZWwsIGFuZCBpbiBhbGwgYnV0IGEgaGFuZGZ1bFxuXHRcdFx0Ly8gb2YgY2FzZXMsIHRoZSB1dy1nZW5lcmljIHNlcmllcyBpcyBleHBsaWNpdGx5IHVzZWQgZWxzZXdoZXJlLlxuXHRcdFx0aWYgKHBhcmFtcy5tZXNzYWdlRGF0YSAmJiAhcGFyYW1zLm1lc3NhZ2VEYXRhW2BsZXZlbCR7bGV2ZWx9YF0pIHtcblx0XHRcdFx0dGVtcGxhdGUgPSAndXctZ2VuZXJpYyc7XG5cdFx0XHR9XG5cdFx0XHR0ZW1wbGF0ZSArPSBsZXZlbDtcblx0XHRcdHJldHVybiBbdGVtcGxhdGUsIGxldmVsXTtcblx0XHR9LFxuXHRcdG1haW46IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3Qgc3RhdGVsZW0gPSBwYWdlb2JqLmdldFN0YXR1c0VsZW1lbnQoKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRsZXQge21lc3NhZ2VEYXRhfSA9IHBhcmFtcztcblx0XHRcdGNvbnN0IHdhcm5pbmdIaXN0b3J5ID0gVHdpbmtsZS53YXJuLmNhbGxiYWNrcy5kYXRlUHJvY2Vzc2luZyh0ZXh0KTtcblx0XHRcdGNvbnN0IFtsYXRlc3QsIGhpc3RvcnldID0gd2FybmluZ0hpc3Rvcnk7XG5cdFx0XHRjb25zdCBub3cgPSBuZXcgTW9yZWJpdHMuZGF0ZShwYWdlb2JqLmdldExvYWRUaW1lKCkpO1xuXHRcdFx0VHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqID0gcGFnZW9iajsgLy8gVXBkYXRlIHRhbGtwYWdlT2JqLCBqdXN0IGluIGNhc2Vcblx0XHRcdGlmIChwYXJhbXMubWFpbl9ncm91cCA9PT0gJ2F1dG9sZXZlbCcpIHtcblx0XHRcdFx0Ly8gW3RlbXBsYXRlLCBsZXZlbF1cblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVBbmRMZXZlbCA9IFR3aW5rbGUud2Fybi5jYWxsYmFja3MuYXV0b2xldmVsUGFyc2VXaWtpdGV4dChcblx0XHRcdFx0XHR0ZXh0LFxuXHRcdFx0XHRcdHBhcmFtcyxcblx0XHRcdFx0XHRsYXRlc3QsXG5cdFx0XHRcdFx0bm93LFxuXHRcdFx0XHRcdHN0YXRlbGVtXG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8vIE9ubHkgaWYgdGhlcmUncyBhIGNoYW5nZSBmcm9tIHRoZSBwcmlvciBkaXNwbGF5L2xvYWRcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHBhcmFtcy5zdWJfZ3JvdXAgIT09IHRlbXBsYXRlQW5kTGV2ZWxbMF0gJiZcblx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG5Y+R6YCB57uZ55So5oi3e3snLCAn5bCH55m86YCB57Wm5L2/55So6ICFe3snKSArXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlQW5kTGV2ZWxbMF0gK1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ3195qih5p2/77yM5aW95ZCX77yfJywgJ3195qih5p2/77yM5aW95ZeO77yfJylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn55So5oi35Y+W5raIJywgJ+S9v+eUqOiAheWPlua2iCcpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVXBkYXRlIHBhcmFtcyBub3cgdGhhdCB3ZSd2ZSBzZWxlY3RlZCBhIHdhcm5pbmdcblx0XHRcdFx0W3BhcmFtcy5zdWJfZ3JvdXBdID0gdGVtcGxhdGVBbmRMZXZlbDtcblx0XHRcdFx0bWVzc2FnZURhdGEgPSBwYXJhbXMubWVzc2FnZURhdGFbYGxldmVsJHt0ZW1wbGF0ZUFuZExldmVsWzFdfWBdO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0cGFyYW1zLnN1Yl9ncm91cCBpbiBoaXN0b3J5ICYmXG5cdFx0XHRcdG5ldyBNb3JlYml0cy5kYXRlKGhpc3RvcnlbcGFyYW1zLnN1Yl9ncm91cF0pLmFkZCgxLCAnZGF5JykuaXNBZnRlcihub3cpICYmXG5cdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6L+RMjTlsI/ml7blhoXkuIDkuKrlkIzmoLfnmoQgJywgJ+i/kTI05bCP5pmC5YWn5LiA5YCL5ZCM5qij55qEICcpICtcblx0XHRcdFx0XHRcdHBhcmFtcy5zdWJfZ3JvdXAgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCcg5qih5p2/5bey6KKr5Y+R5Ye644CCXFxu5piv5ZCm57un57ut77yfJywgJyDmqKHmnb/lt7Looqvnmbzlh7rjgIJcXG7mmK/lkKbnubznuozvvJ8nKVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfnlKjmiLflj5bmtognLCAn5L2/55So6ICF5Y+W5raIJykpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsYXRlc3QuZGF0ZS5hZGQoMSwgJ21pbnV0ZScpOyAvLyBhZnRlciBsb25nIGRlYmF0ZSwgb25lIG1pbnV0ZSBpcyBtYXhcblx0XHRcdGlmIChcblx0XHRcdFx0bGF0ZXN0LmRhdGUuaXNBZnRlcihub3cpICYmXG5cdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6L+RMeWIhumSn+WGhSAnLCAn6L+RMeWIhumQmOWFpyAnKSArXG5cdFx0XHRcdFx0XHRsYXRlc3QudHlwZSArXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDmqKHmnb/lt7Looqvlj5Hlh7rjgIJcXG7mmK/lkKbnu6fnu63vvJ8nLCAnIOaooeadv+W3suiiq+eZvOWHuuOAglxcbuaYr+WQpue5vOe6jO+8nycpXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRzdGF0ZWxlbS5lcnJvcih3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iCcsICfkvb/nlKjogIXlj5bmtognKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGJ1aWxkIHRoZSBlZGl0IHN1bW1hcnlcblx0XHRcdC8vIEZ1bmN0aW9uIHRvIGhhbmRsZSBnZW5lcmF0aW9uIG9mIHN1bW1hcnkgcHJlZml4IGZvciBjdXN0b20gdGVtcGxhdGVzXG5cdFx0XHRjb25zdCBjdXN0b21Qcm9jZXNzID0gKHRlbXBsYXRlKSA9PiB7XG5cdFx0XHRcdFt0ZW1wbGF0ZV0gPSB0ZW1wbGF0ZS5zcGxpdCgnfCcpO1xuXHRcdFx0XHRsZXQgcHJlZml4O1xuXHRcdFx0XHRzd2l0Y2ggKHRlbXBsYXRlLnNsaWNlKC0xKSkge1xuXHRcdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdFx0cHJlZml4ID0gJ+azqOaEjyc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICcyJzpcblx0XHRcdFx0XHRcdHByZWZpeCA9ICforablkYonO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gZmFsbHMgdGhyb3VnaFxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRwcmVmaXggPSAn5o+Q6YaSJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBgJHtwcmVmaXh977yaJHtNb3JlYml0cy5zdHJpbmcudG9VcHBlckNhc2VGaXJzdENoYXIobWVzc2FnZURhdGEubGFiZWwpfWA7XG5cdFx0XHR9O1xuXHRcdFx0bGV0IHN1bW1hcnk7XG5cdFx0XHRpZiAocGFyYW1zLm1haW5fZ3JvdXAgPT09ICdjdXN0b20nKSB7XG5cdFx0XHRcdHN1bW1hcnkgPSBjdXN0b21Qcm9jZXNzKHBhcmFtcy5zdWJfZ3JvdXApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gTm9ybWFsaXplIGtpdGNoZW5zaW5rIHRvIHRoZSAxLTIgc3R5bGVcblx0XHRcdFx0aWYgKHBhcmFtcy5tYWluX2dyb3VwID09PSAna2l0Y2hlbnNpbmsnICYmICEvXkQrJC8udGVzdChwYXJhbXMuc3ViX2dyb3VwKSkge1xuXHRcdFx0XHRcdGxldCBzdWIgPSBwYXJhbXMuc3ViX2dyb3VwLnNsaWNlKC0xKTtcblx0XHRcdFx0XHRpZiAoc3ViID09PSAnbScpIHtcblx0XHRcdFx0XHRcdHN1YiA9IHBhcmFtcy5zdWJfZ3JvdXAuc2xpY2UoLTMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBEb24ndCBvdmVyd3JpdGUgdXctM3JyLCB0ZWNobmljYWxseSB1bm5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICgvXFxkLy50ZXN0KHN1YikpIHtcblx0XHRcdFx0XHRcdHBhcmFtcy5tYWluX2dyb3VwID0gYGxldmVsJHtzdWJ9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gc2luZ2xldCB8fCBsZXZlbDEtMiwgbm8gbmVlZCB0byAvXlxcRCskLy50ZXN0KHBhcmFtcy5tYWluX2dyb3VwKVxuXHRcdFx0XHRzdW1tYXJ5ID1cblx0XHRcdFx0XHRtZXNzYWdlRGF0YS5zdW1tYXJ5IHx8IChtZXNzYWdlRGF0YVtwYXJhbXMubWFpbl9ncm91cF0gJiYgbWVzc2FnZURhdGFbcGFyYW1zLm1haW5fZ3JvdXBdLnN1bW1hcnkpO1xuXHRcdFx0XHQvLyBOb3QgaW4gVHdpbmtsZS53YXJuLm1lc3NhZ2VzLCBhc3N1bWUgY3VzdG9tIHRlbXBsYXRlXG5cdFx0XHRcdHN1bW1hcnkgfHw9IGN1c3RvbVByb2Nlc3MocGFyYW1zLnN1Yl9ncm91cCk7XG5cdFx0XHRcdGlmIChtZXNzYWdlRGF0YS5zdXBwcmVzc0FydGljbGVJblN1bW1hcnkgIT09IHRydWUgJiYgcGFyYW1zLmFydGljbGUpIHtcblx0XHRcdFx0XHRpZiAocGFyYW1zLnN1Yl9ncm91cCA9PT0gJ3V3LWFpdicpIHtcblx0XHRcdFx0XHRcdC8vIHRoZXNlIHRlbXBsYXRlcyByZXF1aXJlIGEgdXNlcm5hbWVcblx0XHRcdFx0XHRcdHN1bW1hcnkgKz0gYO+8iCR7d2luZG93LndnVUxTKCflr7nkuo4nLCAn5bCN5pa8Jyl9W1tVc2VyOiR7cGFyYW1zLmFydGljbGV9XV3vvIlgO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocGFyYW1zLnN1Yl9ncm91cCA9PT0gJ3V3LWJpdGUnKSB7XG5cdFx0XHRcdFx0XHQvLyB0aGlzIHRlbXBsYXRlIHJlcXVpcmVzIGEgdXNlcm5hbWVcblx0XHRcdFx0XHRcdHN1bW1hcnkgKz0gYO+8jCR7d2luZG93LndnVUxTKCfkuo4nLCAn5pa8Jyl9W1tVc2VyIHRhbGs6JHtwYXJhbXMuYXJ0aWNsZX1dXWA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN1bW1hcnkgKz0gYCR7d2luZG93LndnVUxTKCfvvIzkuo5bWycsICfvvIzmlrxbWycpICsgcGFyYW1zLmFydGljbGV9XV1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShzdW1tYXJ5KTtcblx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZW9iai5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFdhcm5pbmdzJykpO1xuXHRcdFx0Ly8gR2V0IGFjdHVhbCB3YXJuaW5nIHRleHRcblx0XHRcdGNvbnN0IHdhcm5pbmdUZXh0ID0gVHdpbmtsZS53YXJuLmNhbGxiYWNrcy5nZXRXYXJuaW5nV2lraXRleHQoXG5cdFx0XHRcdHBhcmFtcy5zdWJfZ3JvdXAsXG5cdFx0XHRcdHBhcmFtcy5hcnRpY2xlLFxuXHRcdFx0XHRwYXJhbXMucmVhc29uLFxuXHRcdFx0XHRwYXJhbXMubWFpbl9ncm91cCA9PT0gJ2N1c3RvbSdcblx0XHRcdCk7XG5cdFx0XHRsZXQgc2VjdGlvbkV4aXN0cyA9IGZhbHNlO1xuXHRcdFx0bGV0IHNlY3Rpb25OdW1iZXIgPSAwO1xuXHRcdFx0Ly8gT25seSBjaGVjayBzZWN0aW9ucyBpZiB0aGVyZSBhcmUgc2VjdGlvbnMgb3IgdGhlcmUncyBhIGNoYW5jZSB3ZSB3b24ndCBjcmVhdGUgb3VyIG93blxuXHRcdFx0aWYgKCFtZXNzYWdlRGF0YS5oZWFkaW5nICYmIHRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIEdldCBhbGwgc2VjdGlvbnNcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0ZXh0Lm1hdGNoKC9eKD09KikuK1xcMS9nbSk7XG5cdFx0XHRcdGlmIChzZWN0aW9ucyAmJiBzZWN0aW9ucy5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0XHQvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgc2VjdGlvbiBoZWFkZXIgaW4gcXVlc3Rpb25cblx0XHRcdFx0XHRjb25zdCBkYXRlSGVhZGVyUmVnZXggPSBub3cubW9udGhIZWFkZXJSZWdleCgpO1xuXHRcdFx0XHRcdHNlY3Rpb25OdW1iZXIgPSAwO1xuXHRcdFx0XHRcdC8vIEZpbmQgdGhpcyBtb250aCdzIHNlY3Rpb24gYW1vbmcgTDIgc2VjdGlvbnMsIHByZWZlcnJpbmcgdGhlIGJvdHRvbS1tb3N0XG5cdFx0XHRcdFx0c2VjdGlvbkV4aXN0cyA9IHNlY3Rpb25zLnJldmVyc2UoKS5zb21lKChzZWMsIGlkeCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0L14oPT0pW149XS4rXFwxL20udGVzdChzZWMpICYmXG5cdFx0XHRcdFx0XHRcdGRhdGVIZWFkZXJSZWdleC50ZXN0KHNlYykgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIChzZWN0aW9uTnVtYmVyID0gc2VjdGlvbnMubGVuZ3RoIC0gMSAtIGlkeCkgPT09ICdudW1iZXInXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2VjdGlvbkV4aXN0cykge1xuXHRcdFx0XHQvLyBhcHBlbmQgdG8gZXhpc3Rpbmcgc2VjdGlvblxuXHRcdFx0XHRwYWdlb2JqLnNldFBhZ2VTZWN0aW9uKHNlY3Rpb25OdW1iZXIgKyAxKTtcblx0XHRcdFx0cGFnZW9iai5zZXRBcHBlbmRUZXh0KGBcXG5cXG4ke3dhcm5pbmdUZXh0fWApO1xuXHRcdFx0XHRwYWdlb2JqLmFwcGVuZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG1lc3NhZ2VEYXRhLmhlYWRpbmcpIHtcblx0XHRcdFx0XHQvLyBjcmVhdGUgbmV3IHNlY3Rpb25cblx0XHRcdFx0XHRwYWdlb2JqLnNldE5ld1NlY3Rpb25UaXRsZShtZXNzYWdlRGF0YS5oZWFkaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmnKrmib7liLDlvZPmnIjnmoTkuoznuqfmoIfpopjvvIzlsIbliJvlu7rmlrDnmoQnLCAn5pyq5om+5Yiw55W25pyI55qE5LqM57Sa5qiZ6aGM77yM5bCH5bu656uL5paw55qEJylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHBhZ2VvYmouc2V0TmV3U2VjdGlvblRpdGxlKG5vdy5tb250aEhlYWRlcigwKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFnZW9iai5zZXROZXdTZWN0aW9uVGV4dCh3YXJuaW5nVGV4dCk7XG5cdFx0XHRcdHBhZ2VvYmoubmV3U2VjdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUud2Fybi5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgdXNlclRhbGtQYWdlID0gYFVzZXJfdGFsazoke3JlbGV2YW50VXNlck5hbWV9YDtcblx0XHQvLyByZWFzb24sIG1haW5fZ3JvdXAsIHN1Yl9ncm91cCwgYXJ0aWNsZVxuXHRcdGNvbnN0IHBhcmFtcyA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZS50YXJnZXQpO1xuXHRcdGlmIChwYXJhbXMuYXJ0aWNsZSkge1xuXHRcdFx0aWYgKC9odHRwcz86XFwvXFwvLy50ZXN0KHBhcmFtcy5hcnRpY2xlKSkge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfigJzpobXpnaLpk77mjqXigJ3kuI3og73kvb/nlKjnvZHlnYDjgIInLCAn44CM6aCB6Z2i6YCj57WQ44CN5LiN6IO95L2/55So57ay5Z2A44CCJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAnd2FybicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBhcnRpY2xlID0gbmV3IG13LlRpdGxlKHBhcmFtcy5hcnRpY2xlKTtcblx0XHRcdFx0cGFyYW1zLmFydGljbGUgPSBhcnRpY2xlLmdldFByZWZpeGVkVGV4dCgpO1xuXHRcdFx0XHRpZiAoYXJ0aWNsZS5nZXRGcmFnbWVudCgpKSB7XG5cdFx0XHRcdFx0cGFyYW1zLmFydGljbGUgKz0gYCMke2FydGljbGUuZ2V0RnJhZ21lbnQoKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0YWxlcnQoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+KAnOmhtemdoumTvuaOpeKAneS4jeWQiOazle+8jOS7heiDvei+k+WFpeS4gOS4qumhtemdouWQjeensO+8jOWLv+S9v+eUqOe9keWdgOOAgVtbIF1d77yM5Y+v5L2/55SoU3BlY2lhbDpEaWZm44CCJyxcblx0XHRcdFx0XHRcdCfjgIzpoIHpnaLpgKPntZDjgI3kuI3lkIjms5XvvIzlg4Xog73ovLjlhaXkuIDlgIvpoIHpnaLlkI3nqLHvvIzli7/kvb/nlKjntrLlnYDjgIFbWyBdXe+8jOWPr+S9v+eUqFNwZWNpYWw6RGlmZuOAgidcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gVGhlIGF1dG9sZXZlbCBvcHRpb24gd2lsbCBhbHJlYWR5IGtub3cgYnkgbm93IGlmIGEgdXNlciB0YWxrIHBhZ2Vcblx0XHQvLyBpcyBhIGNyb3NzLW5hbWVzcGFjZSByZWRpcmVjdCAodmlhICEhVHdpbmtsZS53YXJuLnRhbGtwYWdlT2JqKSwgc29cblx0XHQvLyB0ZWNobmljYWxseSB3ZSBjb3VsZCBhbGVydCBhbiBlcnJvciBoZXJlLCBidXQgdGhlIHVzZXIgd2lsbCBoYXZlXG5cdFx0Ly8gYWxyZWFkeSBpZ25vcmVkIHRoZSBib2xkIHJlZCBlcnJvciBhYm92ZS4gTW9yZW92ZXIsIHRoZXkgcHJvYmFibHlcblx0XHQvLyAqZG9uJ3QqIHdhbnQgdG8gYWN0dWFsbHkgaXNzdWUgYSB3YXJuaW5nLCBzbyB0aGUgZXJyb3IgaGFuZGxpbmdcblx0XHQvLyBhZnRlciB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgaXMgcHJvYmFibHkgcHJlZmVyYWJsZVxuXHRcdC8vIEZpbmQgdGhlIHNlbGVjdGVkIDxvcHRpb24+IGVsZW1lbnQgc28gd2UgY2FuIGZldGNoIHRoZSBkYXRhIHN0cnVjdHVyZVxuXHRcdGNvbnN0ICRzZWxlY3RlZEVsID0gJChlLnRhcmdldC5zdWJfZ3JvdXApLmZpbmQoYG9wdGlvblt2YWx1ZT1cIiR7JChlLnRhcmdldC5zdWJfZ3JvdXApLnZhbCgpfVwiXWApO1xuXHRcdHBhcmFtcy5tZXNzYWdlRGF0YSA9ICRzZWxlY3RlZEVsLmRhdGEoJ21lc3NhZ2VEYXRhJyk7XG5cdFx0aWYgKHBhcmFtcy5tZXNzYWdlRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fpgInmi6norablkYrmqKHmnb/jgIInLCAn6KuL6YG45pOH6K2m5ZGK5qih5p2/44CCJyksIHtcblx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHR0YWc6ICd3YXJuJyxcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGUudGFyZ2V0KTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHVzZXJUYWxrUGFnZTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+itpuWRiuWujOaIkO+8jOWwhuWcqOWHoOenkuWQjuWIt+aWsCcsICforablkYrlrozmiJDvvIzlsIflnKjlub7np5Llvozph43mlrDmlbTnkIYnKTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0dXNlclRhbGtQYWdlLFxuXHRcdFx0d2luZG93LndnVUxTKCfnlKjmiLforqjorrrpobXkv67mlLknLCAn5L2/55So6ICF6KiO6KuW6aCB5L+u5pS5Jylcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSwgZmFsc2UpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUud2Fybi5jYWxsYmFja3MubWFpbik7XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUud2FybiwgJ3dhcm4nKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBuby1qcXVlcnkvbm8tbWFwLXV0aWwgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlYmxvY2suanMgKi9cbihmdW5jdGlvbiB0d2lua2xlYmxvY2soJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0Y29uc3QgYXBpID0gaW5pdE13QXBpKCdtb3JlYml0cy5qczsgVHdpbmtsZS8xLjEnKTtcblx0bGV0IHJlbGV2YW50VXNlck5hbWU7XG5cdGxldCBibG9ja2VkVXNlck5hbWU7XG5cdGNvbnN0IG1lbnVGb3JtYXR0ZWROYW1lc3BhY2VzID0ge1xuXHRcdC4uLm13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpLFxuXHR9O1xuXHRtZW51Rm9ybWF0dGVkTmFtZXNwYWNlc1swXSA9IHdpbmRvdy53Z1VMUygn77yI5p2h55uu77yJJywgJ++8iOaineebru+8iScpO1xuXHRjb25zdCBibG9ja0FjdGlvblRleHQgPSB7XG5cdFx0YmxvY2s6IHdpbmRvdy53Z1VMUygn5bCB56aBJywgJ+WwgemOlicpLFxuXHRcdHJlYmxvY2s6IHdpbmRvdy53Z1VMUygn6YeN5paw5bCB56aBJywgJ+mHjeaWsOWwgemOlicpLFxuXHRcdHVuYmxvY2s6IHdpbmRvdy53Z1VMUygn6Kej6Zmk5bCB56aBJywgJ+ino+mZpOWwgemOlicpLFxuXHR9O1xuXHQvKipcblx0ICogdHdpbmtsZWJsb2NrLmpzOiBCbG9jayBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiQmxvY2tcIilcblx0ICogQWN0aXZlIG9uOiBBbnkgcGFnZSB3aXRoIHJlbGV2YW50IHVzZXIgbmFtZSAodXNlcnNwYWNlLCBjb250cmlicywgZXRjLilcblx0ICovXG5cdFR3aW5rbGUuYmxvY2sgPSAoKSA9PiB7XG5cdFx0cmVsZXZhbnRVc2VyTmFtZSA9IG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpO1xuXHRcdC8vIHNob3VsZCBzaG93IG9uIENvbnRyaWJ1dGlvbnMgb3IgQmxvY2sgcGFnZXMsIGFueXdoZXJlIHRoZXJlJ3MgYSByZWxldmFudCB1c2VyXG5cdFx0Ly8gSWdub3JlIHJhbmdlcyB3aWRlciB0aGFuIHRoZSBDSURSIGxpbWl0XG5cdFx0Ly8gRW5hYmxlIGZvciBub24tYWRtaW5zXG5cdFx0aWYgKFxuXHRcdFx0KE1vcmViaXRzLnVzZXJJc1N5c29wIHx8ICFtdy51dGlsLmlzSVBBZGRyZXNzKHJlbGV2YW50VXNlck5hbWUsIHRydWUpKSAmJlxuXHRcdFx0cmVsZXZhbnRVc2VyTmFtZSAmJlxuXHRcdFx0KCFNb3JlYml0cy5pcC5pc1JhbmdlKHJlbGV2YW50VXNlck5hbWUpIHx8IE1vcmViaXRzLmlwLnZhbGlkQ0lEUihyZWxldmFudFVzZXJOYW1lKSlcblx0XHQpIHtcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2ssXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCB56aBJywgJ+WwgemOlicpLFxuXHRcdFx0XHQndHctYmxvY2snLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WwgeemgeebuOWFs+eUqOaItycsICflsIHpjpbnm7jpl5zkvb/nlKjogIUnKVxuXHRcdFx0KTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0cmVsZXZhbnRVc2VyTmFtZSA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpICYmXG5cdFx0XHQhY29uZmlybShcblx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdCfmgqjljbPlsIblr7noh6rlt7HmiafooYzlsIHnpoHnm7jlhbPmk43kvZzvvIHnoa7orqTopoHnu6fnu63lkJfvvJ8nLFxuXHRcdFx0XHRcdCfmgqjljbPlsIflsI3oh6rlt7Hln7fooYzlsIHpjpbnm7jpl5zmk43kvZzvvIHnorroqo3opoHnubznuozll47vvJ8nXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvID0gdW5kZWZpbmVkO1xuXHRcdFR3aW5rbGUuYmxvY2suZmllbGRfYmxvY2tfb3B0aW9ucyA9IHt9O1xuXHRcdFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucyA9IHt9O1xuXHRcdGNvbnN0IFdpbmRvdyA9IG5ldyBNb3JlYml0cy5zaW1wbGVXaW5kb3coNjUwLCA1MzApO1xuXHRcdC8vIG5lZWQgdG8gYmUgdmVyYm9zZSBhYm91dCB3aG8gd2UncmUgYmxvY2tpbmdcblx0XHRXaW5kb3cuc2V0VGl0bGUoXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+WwgeemgeaIluWQkScsICflsIHpjpbmiJblkJEnKSArIHJlbGV2YW50VXNlck5hbWUgKyB3aW5kb3cud2dVTFMoJ+WPkeWHuuWwgeemgeaooeadvycsICfnmbzlh7rlsIHpjpbmqKHmnb8nKVxuXHRcdCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ+WwgeemgeadoeS+iycsICflsIHpjpbmop3kvosnKSwgJ0xJQjpCTE9DSycpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5bCB56aB6K6+572uJywgJ+WwgemOluioreWumicpLCAnSDpUVy9QUkVGI2Jsb2NrJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI2Jsb2NrJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS5ibG9jay5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0Y29uc3QgYWN0aW9uZmllbGQgPSBmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pON5L2c57G75Z6LJywgJ+aTjeS9nOmhnuWIpScpLFxuXHRcdH0pO1xuXHRcdGFjdGlvbmZpZWxkLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bmFtZTogJ2FjdGlvbnR5cGUnLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2FjdGlvbixcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WwgeemgeeUqOaItycsICflsIHpjpbkvb/nlKjogIUnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2Jsb2NrJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn55So6YCJ5oup55qE6YCJ6aG55YWo56uZ5bCB56aB55u45YWz55So5oi377yM6Iul5pyq5Yu+6YCJ6YOo5YiG5bCB56aB5YiZ5Li65YWo56uZ5bCB56aB44CCJyxcblx0XHRcdFx0XHRcdCfnlKjpgbjmk4fnmoTpgbjpoIXlhajnq5nlsIHpjpbnm7jpl5zkvb/nlKjogIXvvIzoi6XmnKrli77pgbjpg6jliIblsIHpjpbliYfngrrlhajnq5nlsIHpjpbjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRoaWRkZW46ICFNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRcdFx0XHRjaGVja2VkOiBNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mDqOWIhuWwgeemgScsICfpg6jliIblsIHpjpYnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3BhcnRpYWwnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5ZCv55So6YOo5YiG5bCB56aB5Y+K6YOo5YiG5bCB56aB5qih5p2/44CCJywgJ+WVn+eUqOmDqOWIhuWwgemOluWPiumDqOWIhuWwgemOluaooeadv+OAgicpLFxuXHRcdFx0XHRcdGhpZGRlbjogIU1vcmViaXRzLnVzZXJJc1N5c29wLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuZ2V0UHJlZignZGVmYXVsdFRvUGFydGlhbEJsb2NrcycpLCAvLyBPdmVycmlkZGVuIGlmIGFscmVhZHkgYmxvY2tlZFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yqg5YWl5bCB56aB5qih5p2/5Yiw55So5oi36K6o6K666aG1JywgJ+WKoOWFpeWwgemOluaooeadv+WIsOS9v+eUqOiAheiojuirlumggScpLFxuXHRcdFx0XHRcdHZhbHVlOiAndGVtcGxhdGUnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfoi6XmiafooYzlsIHnpoHnmoTnrqHnkIblkZjlv5jorrDlj5Hlh7rlsIHnpoHmqKHmnb/vvIzmiJbkvaDlsIHnpoHkuobnlKjmiLfogIzmsqHmnInnu5nlhbblj5Hlh7rmqKHmnb/vvIzliJnkvaDlj6/ku6XnlKjmraTmnaXlj5Hlh7rlkIjpgILnmoTmqKHmnb/jgILli77pgInpg6jliIblsIHnpoHku6Xkvb/nlKjpg6jliIblsIHnpoHmqKHmnb/jgIInLFxuXHRcdFx0XHRcdFx0J+iLpeWft+ihjOWwgemOlueahOeuoeeQhuWToeW/mOiomOeZvOWHuuWwgemOluaooeadv++8jOaIluS9oOWwgemOluS6huS9v+eUqOiAheiAjOaykuaciee1puWFtueZvOWHuuaooeadv++8jOWJh+S9oOWPr+S7peeUqOatpOS+hueZvOWHuuWQiOmBqeeahOaooeadv+OAguWLvumBuOmDqOWIhuWwgemOluS7peS9v+eUqOmDqOWIhuWwgemOluaooeadv+OAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdC8vIERpc2FsbG93IHdoZW4gdmlld2luZyB0aGUgYmxvY2sgZGlhbG9nIG9uIGFuIElQIHJhbmdlXG5cdFx0XHRcdFx0aGlkZGVuOiAhTW9yZWJpdHMudXNlcklzU3lzb3AsXG5cdFx0XHRcdFx0Y2hlY2tlZDogTW9yZWJpdHMudXNlcklzU3lzb3AgJiYgIU1vcmViaXRzLmlwLmlzUmFuZ2UocmVsZXZhbnRVc2VyTmFtZSksXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IE1vcmViaXRzLmlwLmlzUmFuZ2UocmVsZXZhbnRVc2VyTmFtZSksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDnlKjmiLfpobUnLCAn5qiZ6KiY5L2/55So6ICF6aCB6Z2iJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd0YWcnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflsIbnlKjmiLfpobXmm7/mjaLmiJDnm7jlhbPnmoTmoIforrDmqKHmnb/vvIzku4XpmZDmsLjkuYXlsIHnpoHkvb/nlKjjgIInLFxuXHRcdFx0XHRcdFx0J+Wwh+S9v+eUqOiAhemggemdouabv+aPm+aIkOebuOmXnOeahOaomeiomOaooeadv++8jOWDhemZkOawuOS5heWwgemOluS9v+eUqOOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGhpZGRlbjogdHJ1ZSxcblx0XHRcdFx0XHRjaGVja2VkOiAhTW9yZWJpdHMudXNlcklzU3lzb3AsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkv53miqTnlKjmiLfpobUnLCAn5L+d6K235L2/55So6ICF6aCB6Z2iJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcm90ZWN0Jyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+WFqOS/neaKpOeUqOaIt+mhte+8jOS7hemZkOawuOS5heWwgeemgeS9v+eUqOOAgicsICflhajkv53orbfkvb/nlKjogIXpoIHpnaLvvIzlg4XpmZDmsLjkuYXlsIHpjpbkvb/nlKjjgIInKSxcblx0XHRcdFx0XHRoaWRkZW46IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfop6PpmaTlsIHnpoHnlKjmiLcnLCAn6Kej6Zmk5bCB6Y6W5L2/55So6ICFJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd1bmJsb2NrJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+ino+mZpOWwgeemgeebuOWFs+eUqOaIt+OAgicsICfop6PpmaTlsIHpjpbnm7jpl5zkvb/nlKjogIXjgIInKSxcblx0XHRcdFx0XHRoaWRkZW46ICFNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0LyoqXG5cdFx0ICogQWRkIG9wdGlvbiBmb3IgSVB2NiByYW5nZXMgc21hbGxlciB0aGFuIC82NCB0byB1cGdyYWRlIHRvIHRoZSA2NFxuXHRcdCAqIENJRFIuIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcgcGxhY2VzIHdoZXJlIHdlIHdhbnRcblx0XHQgKiB3Z1JlbGV2YW50VXNlck5hbWUgc2luY2UgdGhpcyBkZXBlbmRzIGVudGlyZWx5IG9uIHRoZSBvcmlnaW5hbCB1c2VyLlxuXHRcdCAqIEluIHRoZW9yeSwgd2Ugc2hvdWxkbid0IHVzZSBNb3JlYml0cy5pcC5nZXQ2NCBoZXJlIHNpbmNlIHNpbmNlIHdlIHdhbnRcblx0XHQgKiB0byBleGNsdWRlIGZ1bmN0aW9uYWxseS1lcXVpdmFsZW50IC82NHMuICBUaGF0J2QgYmU6XG5cdFx0ICogLy8gaWYgKG13LnV0aWwuaXNJUHY2QWRkcmVzcyhtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKSwgdHJ1ZSkgJiZcblx0XHQgKiAvLyAobXcudXRpbC5pc0lQdjZBZGRyZXNzKG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKSB8fCBwYXJzZUludChtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKS5yZXBsYWNlKC9eKC4rPylcXC8/KFxcZHsxLDN9KT8kLywgJyQyJyksIDEwKSA+IDY0KSkge1xuXHRcdCAqIEluIHByYWN0aWNlLCB0aG91Z2gsIHNpbmNlIGZ1bmN0aW9uYWxseS1lcXVpdmFsZW50IHJhbmdlcyBhcmVcblx0XHQgKiAobWlzKXRyZWF0ZWQgYXMgc2VwYXJhdGUgYnkgTWVkaWFXaWtpJ3MgbG9nZ2luZyxcblx0XHQgKiB1c2luZyBNb3JlYml0cy5pcC5nZXQ2NCBwcm92aWRlcyBhIG1vZGljdW0gb2YgcmVsaWVmIGluIHRoaXNlIGNhc2UuXG5cdFx0ICovXG5cdFx0Y29uc3Qgc2l4dHlGb3VyID0gTW9yZWJpdHMuaXAuZ2V0NjQobXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJykpO1xuXHRcdGlmIChzaXh0eUZvdXIgJiYgc2l4dHlGb3VyICE9PSBtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKSkge1xuXHRcdFx0Y29uc3QgYmxvY2s2NGZpZWxkID0gZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfovazmjaLkuLovNjTmrrXlsIHnpoEnLCAn6L2J5o+b54K6LzY05q615bCB6Y6WJyksXG5cdFx0XHRcdG5hbWU6ICdmaWVsZF82NCcsXG5cdFx0XHR9KTtcblx0XHRcdGJsb2NrNjRmaWVsZC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0c3R5bGU6ICdtYXJnaW4tYm90dG9tOiAwLjVlbScsXG5cdFx0XHRcdGxhYmVsOiBbd2dVTFMoJ+ebtOaOpeWwgeemgS82NOauteacieebiuaXoOWus+OAgicsICfnm7TmjqXlsIHpjpYvNjTmrrXmnInnm4rnhKHlrrPjgIInKV0sXG5cdFx0XHR9KTtcblx0XHRcdGJsb2NrNjRmaWVsZC5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRuYW1lOiAnYmxvY2s2NCcsXG5cdFx0XHRcdGV2ZW50OiBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNoYW5nZV9ibG9jazY0LFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y2hlY2tlZDogVHdpbmtsZS5nZXRQcmVmKCdkZWZhdWx0VG9CbG9jazY0JyksXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmlLnmiJDlsIHnpoEvNjQnLCAn5pS55oiQ5bCB6Y6WLzY0JyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2Jsb2NrNjQnLFxuXHRcdFx0XHRcdFx0dG9vbHRpcDogTW9yZWJpdHMuaXAuaXNSYW5nZShtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKSlcblx0XHRcdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+WwhuS4jeS8muWPkemAgeaooeadv+mAmuefpeOAgicsICflsIfkuI3mnIPnmbzpgIHmqKHmnb/pgJrnn6XjgIInKVxuXHRcdFx0XHRcdFx0XHQ6IHdpbmRvdy53Z1VMUygn5Lu75L2V5qih5p2/5bCG5Lya5Y+R6YCB57uZ5Y6f5aeLSVDvvJonLCAn5Lu75L2V5qih5p2/5bCH5pyD55m86YCB57Wm5Y6f5aeLSVDvvJonKSArXG5cdFx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6kJywgJ+mgkOiorScpLFxuXHRcdFx0bmFtZTogJ2ZpZWxkX3ByZXNldCcsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aooeadv+mAiemhuScsICfmqKHmnb/pgbjpoIUnKSxcblx0XHRcdG5hbWU6ICdmaWVsZF90ZW1wbGF0ZV9vcHRpb25zJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCJ6aG5JywgJ+WwgemOlumBuOmghScpLFxuXHRcdFx0bmFtZTogJ2ZpZWxkX2Jsb2NrX29wdGlvbnMnLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDnlKjmiLfpobUnLCAn5qiZ6KiY5L2/55So6ICF6aCB6Z2iJyksXG5cdFx0XHRuYW1lOiAnZmllbGRfdGFnX29wdGlvbnMnLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfop6PpmaTlsIHnpoHpgInpobknLCAn6Kej6Zmk5bCB6Y6W6YG46aCFJyksXG5cdFx0XHRuYW1lOiAnZmllbGRfdW5ibG9ja19vcHRpb25zJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdGxhYmVsOiAn5o+Q5LqkJyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHRyZXN1bHQucm9vdCA9IHJlc3VsdDtcblx0XHRUd2lua2xlLmJsb2NrLmZldGNoVXNlckluZm8oKCkgPT4ge1xuXHRcdFx0aWYgKFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkKSB7XG5cdFx0XHRcdGNvbnN0ICRmb3JtID0gJChyZXN1bHQpO1xuXHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoJGZvcm0uZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9dGFnXScpLnBhcmVudCgpLCB0cnVlKTtcblx0XHRcdFx0aWYgKE1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KFxuXHRcdFx0XHRcdFx0JGZvcm0uZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9cHJvdGVjdF0nKS5wYXJlbnQoKSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBUb2dnbGUgaW5pdGlhbCBwYXJ0aWFsIHN0YXRlIGRlcGVuZGluZyBvbiBwcmlvciBibG9jayB0eXBlLFxuXHRcdFx0Ly8gd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdFRvUGFydGlhbEJsb2NrcyBwcmVmXG5cdFx0XHRpZiAoYmxvY2tlZFVzZXJOYW1lID09PSByZWxldmFudFVzZXJOYW1lKSB7XG5cdFx0XHRcdCQocmVzdWx0KVxuXHRcdFx0XHRcdC5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT1wYXJ0aWFsXScpXG5cdFx0XHRcdFx0LnByb3AoJ2NoZWNrZWQnLCBUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8ucGFydGlhbCA9PT0gJycpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2xlYW4gdXAgcHJlc2V0IGRhdGEgKGRlZmF1bHRzLCBldGMuKSwgZG9uZSBleGFjdGx5IG9uY2UsIG11c3QgYmUgYmVmb3JlIFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2FjdGlvbiBpcyBjYWxsZWRcblx0XHRcdFR3aW5rbGUuYmxvY2sudHJhbnNmb3JtQmxvY2tQcmVzZXRzKCk7XG5cdFx0XHQvLyBpbml0IHRoZSBjb250cm9scyBhZnRlciB1c2VyIGFuZCBibG9jayBpbmZvIGhhdmUgYmVlbiBmZXRjaGVkXG5cdFx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRcdGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdFx0aWYgKHJlc3VsdC5ibG9jazY0ICYmIHJlc3VsdC5ibG9jazY0LmNoZWNrZWQpIHtcblx0XHRcdFx0Ly8gQ2FsbHMgdGhlIHNhbWUgY2hhbmdlX2FjdGlvbiBldmVudCBvbmNlIGZpbmlzaGVkXG5cdFx0XHRcdHJlc3VsdC5ibG9jazY0LmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5hY3Rpb250eXBlWzBdLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblx0Ly8gU3RvcmUgZmV0Y2hlZCB1c2VyIGRhdGEsIG9ubHkgcmVsZXZhbnQgaWYgc3dpdGNoaW5nIElQdjYgdG8gYSAvNjRcblx0VHdpbmtsZS5ibG9jay5mZXRjaGVkRGF0YSA9IHt9O1xuXHQvLyBQcm9jZXNzZXMgdGhlIGRhdGEgZnJvbSBhIGEgcXVlcnkgcmVzcG9uc2UsIHNlcGFyYXRlZCBmcm9tXG5cdC8vIFR3aW5rbGUuYmxvY2suZmV0Y2hVc2VySW5mbyB0byBhbGxvdyByZXByb2Nlc3Npbmcgb2YgYWxyZWFkeS1mZXRjaGVkIGRhdGFcblx0VHdpbmtsZS5ibG9jay5wcm9jZXNzVXNlckluZm8gPSAoZGF0YSwgZm4pID0+IHtcblx0XHRsZXQgW2Jsb2NraW5mb10gPSBkYXRhLnF1ZXJ5LmJsb2Nrcztcblx0XHRjb25zdCBbdXNlcmluZm9dID0gZGF0YS5xdWVyeS51c2Vycztcblx0XHQvLyBJZiBhbiBJUCBpcyBibG9ja2VkICphbmQqIHJhbmdlYmxvY2tlZCwgdGhlIGFib3ZlIGZpbmRzXG5cdFx0Ly8gd2hpY2hldmVyIGJsb2NrIGlzIG1vcmUgcmVjZW50LCBub3QgbmVjZXNzYXJpbHkgY29ycmVjdC5cblx0XHQvLyBUaHJlZSBzZWVtcy4uLiB1bmxpa2VseVxuXHRcdGlmIChkYXRhLnF1ZXJ5LmJsb2Nrcy5sZW5ndGggPiAxICYmIGJsb2NraW5mby51c2VyICE9PSByZWxldmFudFVzZXJOYW1lKSB7XG5cdFx0XHRbLCBibG9ja2luZm9dID0gZGF0YS5xdWVyeS5ibG9ja3M7XG5cdFx0fVxuXHRcdC8vIENhY2hlIHJlc3BvbnNlLCB1c2VkIHdoZW4gdG9nZ2xpbmcgLzY0IGJsb2Nrc1xuXHRcdFR3aW5rbGUuYmxvY2suZmV0Y2hlZERhdGFbdXNlcmluZm8ubmFtZV0gPSBkYXRhO1xuXHRcdFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkID0gISF1c2VyaW5mby51c2VyaWQ7XG5cdFx0aWYgKFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkKSB7XG5cdFx0XHRUd2lua2xlLmJsb2NrLnVzZXJJc0JvdCA9XG5cdFx0XHRcdCEhdXNlcmluZm8uZ3JvdXBtZW1iZXJzaGlwcyAmJlxuXHRcdFx0XHR1c2VyaW5mby5ncm91cG1lbWJlcnNoaXBzXG5cdFx0XHRcdFx0Lm1hcCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGUuZ3JvdXA7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuaW5jbHVkZXMoJ2JvdCcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2lua2xlLmJsb2NrLnVzZXJJc0JvdCA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoYmxvY2tpbmZvKSB7XG5cdFx0XHQvLyBoYW5kbGUgZnJ1c3RyYXRpbmcgc3lzdGVtIG9mIGludmVydGVkIGJvb2xlYW4gdmFsdWVzXG5cdFx0XHRibG9ja2luZm8uZGlzYWJsZXRhbGsgPSBibG9ja2luZm8uYWxsb3d1c2VydGFsayA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0YmxvY2tpbmZvLmhhcmRibG9jayA9IGJsb2NraW5mby5hbm9ub25seSA9PT0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHQvLyB3aWxsIHVuZGVmaW5lIGlmIG5vIGJsb2NrcyBwcmVzZW50XG5cdFx0VHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvID0gYmxvY2tpbmZvO1xuXHRcdGJsb2NrZWRVc2VyTmFtZSA9IFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbyAmJiBUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8udXNlcjtcblx0XHQvLyBTZW1pLWJ1c3RlZCBvbiByYW5nZXMuXG5cdFx0Ly8gQmFzaWNhbGx5LCBsb2dldmVudHMgZG9lc24ndCB0cmVhdCBmdW5jdGlvbmFsbHktZXF1aXZhbGVudCByYW5nZXNcblx0XHQvLyBhcyBlcXVpdmFsZW50LCBtZWFuaW5nIGFueSBmdW5jdGlvbmFsbHktZXF1aXZhbGVudCBJUCByYW5nZSBpc1xuXHRcdC8vIG1pc2ludGVycHJldGVkIGJ5IHRoZSBsb2cgdGhyb3VnaG91dC4gIFdpdGhvdXQgbG9nZXZlbnRzXG5cdFx0Ly8gcmVkaXJlY3RpbmcgKGxpa2UgU3BlY2lhbDpCbG9jayBkb2VzKSB3ZSB3b3VsZCBuZWVkIGEgZnVuY3Rpb24gdG9cblx0XHQvLyBwYXJzZSByYW5nZXMsIHdoaWNoIGlzIGEgcGFpbi4gIElQVXRpbHMgaGFzIHRoZSBjb2RlLCBidXQgaXQnZCBiZSBhXG5cdFx0Ly8gbG90IG9mIGNydWZ0IGZvciBvbmUgcHVycG9zZS5cblx0XHRUd2lua2xlLmJsb2NrLmhhc0Jsb2NrTG9nID0gISFkYXRhLnF1ZXJ5LmxvZ2V2ZW50cy5sZW5ndGg7XG5cdFx0VHdpbmtsZS5ibG9jay5ibG9ja0xvZyA9IFR3aW5rbGUuYmxvY2suaGFzQmxvY2tMb2cgJiYgZGF0YS5xdWVyeS5sb2dldmVudHM7XG5cdFx0Ly8gVXNlZCBsYXRlciB0byBjaGVjayBpZiBibG9jayBzdGF0dXMgY2hhbmdlZCB3aGlsZSBmaWxsaW5nIG91dCB0aGUgZm9ybVxuXHRcdFR3aW5rbGUuYmxvY2suYmxvY2tMb2dJZCA9IFR3aW5rbGUuYmxvY2suaGFzQmxvY2tMb2cgPyBkYXRhLnF1ZXJ5LmxvZ2V2ZW50c1swXS5sb2dpZCA6IGZhbHNlO1xuXHRcdGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBmbigpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5mZXRjaFVzZXJJbmZvID0gKGZuKSA9PiB7XG5cdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGxpc3Q6ICdibG9ja3N8dXNlcnN8bG9nZXZlbnRzJyxcblx0XHRcdGxldHlwZTogJ2Jsb2NrJyxcblx0XHRcdGxlbGltaXQ6IDIsXG5cdFx0XHRsZXRpdGxlOiBgVXNlcjoke3JlbGV2YW50VXNlck5hbWV9YCxcblx0XHRcdGJrcHJvcDogJ2V4cGlyeXxyZWFzb258ZmxhZ3N8cmVzdHJpY3Rpb25zfHJhbmdlfHVzZXInLFxuXHRcdFx0dXN1c2VyczogcmVsZXZhbnRVc2VyTmFtZSxcblx0XHR9O1xuXHRcdC8vIGJrdXNlcnMgZG9lc24ndCBjYXRjaCBzaW5nbGUgSVBzIGJsb2NrZWQgYXMgcGFydCBvZiBhIHJhbmdlIGJsb2NrXG5cdFx0aWYgKG13LnV0aWwuaXNJUEFkZHJlc3MocmVsZXZhbnRVc2VyTmFtZSwgdHJ1ZSkpIHtcblx0XHRcdHF1ZXJ5LmJraXAgPSByZWxldmFudFVzZXJOYW1lO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRxdWVyeS5ia3VzZXJzID0gcmVsZXZhbnRVc2VyTmFtZTtcblx0XHRcdC8vIGdyb3VwbWVtYmVyc2hpcHMgb25seSByZWxldmFudCBmb3IgcmVnaXN0ZXJlZCB1c2Vyc1xuXHRcdFx0cXVlcnkudXNwcm9wID0gJ2dyb3VwbWVtYmVyc2hpcHMnO1xuXHRcdH1cblx0XHRhcGkuZ2V0KHF1ZXJ5KS50aGVuKFxuXHRcdFx0KGRhdGEpID0+IHtcblx0XHRcdFx0VHdpbmtsZS5ibG9jay5wcm9jZXNzVXNlckluZm8oZGF0YSwgZm4pO1xuXHRcdFx0fSxcblx0XHRcdChlcnJvcikgPT4ge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdCgkYm9keS5maW5kKCdkaXZbbmFtZT1cImN1cnJlbnRibG9ja1wiXSBzcGFuJykubGFzdCgpWzBdKTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4od2luZG93LndnVUxTKCfmipPlj5bnlKjmiLfkv6Hmga/lh7rplJknLCAn5oqT5Y+W5L2/55So6ICF6LOH6KiK5Ye66YyvJyksIGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLnNhdmVGaWVsZHNldCA9IChmaWVsZHNldCkgPT4ge1xuXHRcdFR3aW5rbGUuYmxvY2tbJChmaWVsZHNldCkucHJvcCgnbmFtZScpXSA9IHt9O1xuXHRcdGZvciAoY29uc3QgZWwgb2YgJChmaWVsZHNldCkuc2VyaWFsaXplQXJyYXkoKSkge1xuXHRcdFx0Ly8gbmFtZXNwYWNlcyBhbmQgcGFnZXMgZm9yIHBhcnRpYWwgYmxvY2tzIGFyZSBvdmVyd3JpdHRlblxuXHRcdFx0Ly8gaGVyZSwgYnV0IHdlJ3JlIGhhbmRsaW5nIHRoZW0gZWxzZXdoZXJlIHNvIHRoYXQncyBmaW5lXG5cdFx0XHRUd2lua2xlLmJsb2NrWyQoZmllbGRzZXQpLnByb3AoJ25hbWUnKV1bZWwubmFtZV0gPSBlbC52YWx1ZTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2Jsb2NrNjQgPSAoZSkgPT4ge1xuXHRcdGNvbnN0ICRmb3JtID0gJChlLnRhcmdldC5mb3JtKTtcblx0XHRjb25zdCAkYmxvY2s2NCA9ICRmb3JtLmZpbmQoJ1tuYW1lPWJsb2NrNjRdJyk7XG5cdFx0Ly8gU2hvdy9oaWRlIGJsb2NrNjQgYnV0dG9uXG5cdFx0Ly8gU2luZ2xlIElQdjYsIG9yIElQdjYgcmFuZ2Ugc21hbGxlciB0aGFuIGEgLzY0XG5cdFx0Y29uc3QgcHJpb3JOYW1lID0gcmVsZXZhbnRVc2VyTmFtZTtcblx0XHRpZiAoJGJsb2NrNjQuaXMoJzpjaGVja2VkJykpIHtcblx0XHRcdHJlbGV2YW50VXNlck5hbWUgPSBNb3JlYml0cy5pcC5nZXQ2NChtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGV2YW50VXNlck5hbWUgPSBtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKTtcblx0XHR9XG5cdFx0Ly8gTm8gdGVtcGxhdGVzIGZvciByYW5nZXMsIGJ1dCBpZiB0aGUgb3JpZ2luYWwgdXNlciBpcyBhIHNpbmdsZSBJUCwgb2ZmZXIgdGhlIG9wdGlvblxuXHRcdC8vIChkb25lIHNlcGFyYXRlbHkgaW4gVHdpbmtsZS5ibG9jay5jYWxsYmFjay5pc3N1ZV90ZW1wbGF0ZSlcblx0XHRjb25zdCBvcmlnaW5hbElzUmFuZ2UgPSBNb3JlYml0cy5pcC5pc1JhbmdlKG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKTtcblx0XHQkZm9ybVxuXHRcdFx0LmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXRlbXBsYXRlXScpXG5cdFx0XHQucHJvcCgnZGlzYWJsZWQnLCBvcmlnaW5hbElzUmFuZ2UpXG5cdFx0XHQucHJvcCgnY2hlY2tlZCcsICFvcmlnaW5hbElzUmFuZ2UpO1xuXHRcdC8vIFJlZmV0Y2gvcmVwcm9jZXNzIHVzZXIgaW5mbyB0aGVuIHJlZ2VuZXJhdGUgdGhlIG1haW4gY29udGVudFxuXHRcdGNvbnN0IHJlZ2VuZXJhdGVGb3JtID0gKCkgPT4ge1xuXHRcdFx0Ly8gVHdlYWsgdGl0bGViYXIgdGV4dC4gIEluIHRoZW9yeSwgd2UgY291bGQgc2F2ZSB0aGUgZGlhbG9nXG5cdFx0XHQvLyBhdCBpbml0aWFsaXphdGlvbiBhbmQgdGhlbiB1c2UgYC5zZXRUaXRsZWAgb3Jcblx0XHRcdC8vIGBkaWFsb2coJ29wdGlvbicsICd0aXRsZScpYCwgYnV0IGluIHByYWN0aWNlIHRoYXQgc3dhbGxvd3Ncblx0XHRcdC8vIHRoZSBzY3JpcHROYW1lIGFuZCByZXF1aXJlcyBgLmRpc3BsYXlgaW5nLCB3aGljaCBqdW1wcyB0aGVcblx0XHRcdC8vIHdpbmRvdy4gIEl0J3MganVzdCBhIGxpbmUgb2YgdGV4dCwgc28gdGhpcyBpcyBmaW5lLlxuXHRcdFx0Y29uc3QgdGl0bGVCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudWktZGlhbG9nLXRpdGxlJykuZmlyc3RDaGlsZC5uZXh0U2libGluZztcblx0XHRcdHRpdGxlQmFyLm5vZGVWYWx1ZSA9IHRpdGxlQmFyLm5vZGVWYWx1ZS5yZXBsYWNlKHByaW9yTmFtZSwgcmVsZXZhbnRVc2VyTmFtZSk7XG5cdFx0XHQvLyBDb3JyZWN0IHBhcnRpYWwgc3RhdGVcblx0XHRcdCRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXBhcnRpYWxdJykucHJvcCgnY2hlY2tlZCcsIFR3aW5rbGUuZ2V0UHJlZignZGVmYXVsdFRvUGFydGlhbEJsb2NrcycpKTtcblx0XHRcdGlmIChibG9ja2VkVXNlck5hbWUgPT09IHJlbGV2YW50VXNlck5hbWUpIHtcblx0XHRcdFx0JGZvcm1cblx0XHRcdFx0XHQuZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9cGFydGlhbF0nKVxuXHRcdFx0XHRcdC5wcm9wKCdjaGVja2VkJywgVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLnBhcnRpYWwgPT09ICcnKTtcblx0XHRcdH1cblx0XHRcdC8vIFNldCBjb250ZW50IGFwcHJvcHJpYXRlbHlcblx0XHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2FjdGlvbihlKTtcblx0XHR9O1xuXHRcdGlmIChUd2lua2xlLmJsb2NrLmZldGNoZWREYXRhW3JlbGV2YW50VXNlck5hbWVdKSB7XG5cdFx0XHRUd2lua2xlLmJsb2NrLnByb2Nlc3NVc2VySW5mbyhUd2lua2xlLmJsb2NrLmZldGNoZWREYXRhW3JlbGV2YW50VXNlck5hbWVdLCByZWdlbmVyYXRlRm9ybSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3aW5rbGUuYmxvY2suZmV0Y2hVc2VySW5mbyhyZWdlbmVyYXRlRm9ybSk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNoYW5nZV9hY3Rpb24gPSAoZSkgPT4ge1xuXHRcdGxldCBmaWVsZF9wcmVzZXQ7XG5cdFx0bGV0IGZpZWxkX3RlbXBsYXRlX29wdGlvbnM7XG5cdFx0bGV0IGZpZWxkX2Jsb2NrX29wdGlvbnM7XG5cdFx0bGV0IGZpZWxkX3RhZ19vcHRpb25zO1xuXHRcdGxldCBmaWVsZF91bmJsb2NrX29wdGlvbnM7XG5cdFx0Y29uc3QgJGZvcm0gPSAkKGUudGFyZ2V0LmZvcm0pO1xuXHRcdC8vIE1ha2UgaWZzIHNob3J0ZXJcblx0XHRjb25zdCAkYmxvY2sgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT1ibG9ja10nKTtcblx0XHRsZXQgYmxvY2tCb3ggPSAkYmxvY2suaXMoJzpjaGVja2VkJyk7XG5cdFx0Y29uc3QgJHRlbXBsYXRlID0gJGZvcm0uZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9dGVtcGxhdGVdJyk7XG5cdFx0bGV0IHRlbXBsYXRlQm94ID0gJHRlbXBsYXRlLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGNvbnN0ICR0YWcgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT10YWddJyk7XG5cdFx0Y29uc3QgdGFnQm94ID0gJHRhZy5pcygnOmNoZWNrZWQnKTtcblx0XHRjb25zdCAkcHJvdGVjdCA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXByb3RlY3RdJyk7XG5cdFx0Y29uc3QgJHBhcnRpYWwgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT1wYXJ0aWFsXScpO1xuXHRcdGNvbnN0IHBhcnRpYWxCb3ggPSAkcGFydGlhbC5pcygnOmNoZWNrZWQnKTtcblx0XHRjb25zdCAkdW5ibG9jayA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXVuYmxvY2tdJyk7XG5cdFx0Y29uc3QgdW5ibG9ja0JveCA9ICR1bmJsb2NrLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGxldCBibG9ja0dyb3VwID0gcGFydGlhbEJveCA/IFR3aW5rbGUuYmxvY2suYmxvY2tHcm91cHNQYXJ0aWFsIDogVHdpbmtsZS5ibG9jay5ibG9ja0dyb3Vwcztcblx0XHRpZiAoZS50YXJnZXQudmFsdWUgPT09ICd1bmJsb2NrJykge1xuXHRcdFx0aWYgKCFUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8pIHtcblx0XHRcdFx0JHVuYmxvY2sucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn55So5oi35rKh5pyJ6KKr5bCB56aBJywgJ+S9v+eUqOiAheaykuacieiiq+WwgemOlicpLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVibG9jaycsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQkYmxvY2sucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHRcdGJsb2NrQm94ID0gZmFsc2U7XG5cdFx0XHQkdGVtcGxhdGUucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHRcdHRlbXBsYXRlQm94ID0gZmFsc2U7XG5cdFx0XHQkdGFnLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG5cdFx0XHQkcHJvdGVjdC5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuXHRcdFx0JHBhcnRpYWwucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHVuYmxvY2sucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHR9XG5cdFx0JHBhcnRpYWwucHJvcCgnZGlzYWJsZWQnLCAhYmxvY2tCb3ggJiYgIXRlbXBsYXRlQm94KTtcblx0XHQvLyBBZGQgY3VycmVudCBibG9jayBwYXJhbWV0ZXJzIGFzIGRlZmF1bHQgcHJlc2V0XG5cdFx0Y29uc3QgcHJpb3IgPSB7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvZPliY3lsIHnpoEnLCAn55uu5YmN5bCB6Y6WJyksXG5cdFx0fTtcblx0XHRpZiAoYmxvY2tlZFVzZXJOYW1lID09PSByZWxldmFudFVzZXJOYW1lKSB7XG5cdFx0XHRUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm8ucHJpb3IgPSBUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm87XG5cdFx0XHQvLyB2YWx1ZSBub3QgYSB2YWxpZCB0ZW1wbGF0ZSBzZWxlY3Rpb24sIGNob3NlbiBiZWxvdyBieSBzZXR0aW5nIHRlbXBsYXRlTmFtZVxuXHRcdFx0cHJpb3IubGlzdCA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W9k+WJjeWwgeemgeiuvue9ricsICfnm67liY3lsIHpjpboqK3lrponKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3ByaW9yJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdF07XG5cdFx0XHQvLyBBcnJheXMgb2Ygb2JqZWN0cyBhcmUgYW5ub3lpbmcgdG8gY2hlY2tcblx0XHRcdGlmIChcblx0XHRcdFx0IWJsb2NrR3JvdXAuc29tZSgoYmcpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gYmcubGFiZWwgPT09IHByaW9yLmxhYmVsO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdGJsb2NrR3JvdXAucHVzaChwcmlvcik7XG5cdFx0XHR9XG5cdFx0XHQvLyBBbHdheXMgZW5zdXJlIHByb3BlciB0ZW1wbGF0ZSBleGlzdHMvaXMgc2VsZWN0ZWQgd2hlbiBzd2l0Y2hpbmcgbW9kZXNcblx0XHRcdGlmIChwYXJ0aWFsQm94KSB7XG5cdFx0XHRcdFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mby5wcmlvci50ZW1wbGF0ZU5hbWUgPSBNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShcblx0XHRcdFx0XHRUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8uZXhwaXJ5XG5cdFx0XHRcdClcblx0XHRcdFx0XHQ/ICd1dy1wYmxvY2tpbmRlZidcblx0XHRcdFx0XHQ6ICd1dy1wYmxvY2snO1xuXHRcdFx0fSBlbHNlIGlmIChUd2lua2xlLmJsb2NrLmlzUmVnaXN0ZXJlZCkge1xuXHRcdFx0XHRUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm8ucHJpb3IudGVtcGxhdGVOYW1lID0gTW9yZWJpdHMuc3RyaW5nLmlzSW5maW5pdHkoXG5cdFx0XHRcdFx0VHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLmV4cGlyeVxuXHRcdFx0XHQpXG5cdFx0XHRcdFx0PyAndXctYmxvY2tpbmRlZidcblx0XHRcdFx0XHQ6ICd1dy1ibG9jayc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm8ucHJpb3IudGVtcGxhdGVOYW1lID0gJ3V3LWFibG9jayc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEJ1dCBmaXJzdCByZW1vdmUgYW55IHByaW9yIHByaW9yXG5cdFx0XHRibG9ja0dyb3VwID0gYmxvY2tHcm91cC5maWx0ZXIoKGJnKSA9PiB7XG5cdFx0XHRcdHJldHVybiBiZy5sYWJlbCAhPT0gcHJpb3IubGFiZWw7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGJvZHkuZmluZCgnW25hbWU9ZmllbGRfYmxvY2tfb3B0aW9uc10nKSk7XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGJvZHkuZmluZCgnW25hbWU9ZmllbGRfdGVtcGxhdGVfb3B0aW9uc10nKSk7XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGJvZHkuZmluZCgnW25hbWU9ZmllbGRfdGFnX29wdGlvbnNdJykpO1xuXHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suc2F2ZUZpZWxkc2V0KCRib2R5LmZpbmQoJ1tuYW1lPWZpZWxkX3VuYmxvY2tfb3B0aW9uc10nKSk7XG5cdFx0aWYgKGJsb2NrQm94KSB7XG5cdFx0XHRmaWVsZF9wcmVzZXQgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpu5jorqQnLCAn6aCQ6KitJyksXG5cdFx0XHRcdG5hbWU6ICdmaWVsZF9wcmVzZXQnLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9wcmVzZXQuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdG5hbWU6ICdwcmVzZXQnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6npu5jorqTvvJonLCAn6YG45pOH6aCQ6Kit77yaJyksXG5cdFx0XHRcdGV2ZW50OiBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNoYW5nZV9wcmVzZXQsXG5cdFx0XHRcdGxpc3Q6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2suZmlsdGVyZWRfYmxvY2tfZ3JvdXBzKGJsb2NrR3JvdXApLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCJ6aG5JywgJ+WwgemOlumBuOmghScpLFxuXHRcdFx0XHRuYW1lOiAnZmllbGRfYmxvY2tfb3B0aW9ucycsXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdG5hbWU6ICdjdXJyZW50YmxvY2snLFxuXHRcdFx0XHRsYWJlbDogJyAnLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRuYW1lOiAnaGFzYmxvY2tsb2cnLFxuXHRcdFx0XHRsYWJlbDogJyAnLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRuYW1lOiAnZXhwaXJ5X3ByZXNldCcsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+i/h+acn+aXtumXtO+8micsICfpgY7mnJ/mmYLplpPvvJonKSxcblx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX2V4cGlyeSxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5iScsICfoh6roqIInKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnY3VzdG9tJyxcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5peg6ZmQ5pyfJywgJ+eEoemZkOacnycpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdpbmZpbml0eScsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCcz5bCP5pe2JywgJzPlsI/mmYInKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnMyBob3VycycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCcxMuWwj+aXticsICcxMuWwj+aZgicpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcxMiBob3VycycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJzHlpKknLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcxIGRheScsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCczMeWwj+aXticsICczMeWwj+aZgicpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICczMSBob3VycycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJzLlpKknLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcyIGRheXMnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6ICcz5aSpJyxcblx0XHRcdFx0XHRcdHZhbHVlOiAnMyBkYXlzJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJzHlkagnLCAnMemAsScpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcxIHdlZWsnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnMuWRqCcsICcy6YCxJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJzIgd2Vla3MnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnMeS4quaciCcsICcx5YCL5pyIJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJzEgbW9udGgnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnM+S4quaciCcsICcz5YCL5pyIJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJzMgbW9udGhzJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJzbkuKrmnIgnLCAnNuWAi+aciCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICc2IG1vbnRocycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJzHlubQnLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICcxIHllYXInLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6ICcy5bm0Jyxcblx0XHRcdFx0XHRcdHZhbHVlOiAnMiB5ZWFycycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJzPlubQnLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICczIHllYXJzJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdG5hbWU6ICdleHBpcnknLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnov4fmnJ/ml7bpl7QnLCAn6Ieq6KiC6YGO5pyf5pmC6ZaTJyksXG5cdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5oKo5Y+v5Lul5L2/55So55u45a+55pe26Ze077yM5aaC4oCcMSBtaW51dGXigJ3miJbigJwxOSBkYXlz4oCd77yb5oiW57ud5a+55pe26Ze077yM4oCceXl5eW1tZGRoaG1t4oCd77yI5aaC4oCcMjAwNjAyMDExNDA14oCd5pivMjAwNuW5tDLmnIgx5pelMTQ6MDUgVVRD44CC77yJJyxcblx0XHRcdFx0XHQn5oKo5Y+v5Lul5L2/55So55u45bCN5pmC6ZaT77yM5aaC44CMMSBtaW51dGXjgI3miJbjgIwxOSBkYXlz44CN77yb5oiW57WV5bCN5pmC6ZaT77yM44CMeXl5eW1tZGRoaG1t44CN77yI5aaC44CMMjAwNjAyMDExNDA144CN5pivMjAwNuW5tDLmnIgx5pelMTQ6MDUgVVRD44CC77yJJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHR2YWx1ZTogVHdpbmtsZS5ibG9jay5maWVsZF9ibG9ja19vcHRpb25zLmV4cGlyeSB8fCBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMudGVtcGxhdGVfZXhwaXJ5LFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAocGFydGlhbEJveCkge1xuXHRcdFx0XHQvLyBQYXJ0aWFsIGJsb2NrXG5cdFx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0XHRuYW1lOiAncGFnZXJlc3RyaWN0aW9ucycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6aG16Z2i5bCB56aBJywgJ+mggemdouWwgemOlicpLFxuXHRcdFx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+acgOWkmjEw5Liq6aG16Z2i44CCJywgJ+acgOWkmjEw5YCL6aCB6Z2i44CCJyksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBucyA9IGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0XHRuYW1lOiAnbmFtZXNwYWNlcmVzdHJpY3Rpb25zJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflkb3lkI3nqbrpl7TlsIHnpoEnLCAn5ZG95ZCN56m66ZaT5bCB6Y6WJyksXG5cdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5oyH5a6a5bCB56aB55qE5ZG95ZCN56m66Ze044CCJywgJ+aMh+WumuWwgemOlueahOWRveWQjeepuumWk+OAgicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9yIChjb25zdCBbbnVtYmVyLCBuYW1lXSBvZiBPYmplY3QuZW50cmllcyhtZW51Rm9ybWF0dGVkTmFtZXNwYWNlcykpIHtcblx0XHRcdFx0XHQvLyBJZ25vcmUgLTE6IFNwZWNpYWw7IC0yOiBNZWRpYTsgYW5kIDIzMDAtMjMwMzogR2FkZ2V0ICh0YWxrKSBhbmQgR2FkZ2V0IGRlZmluaXRpb24gKHRhbGspXG5cdFx0XHRcdFx0aWYgKG51bWJlciA+PSAwICYmIG51bWJlciA8IDgzMCkge1xuXHRcdFx0XHRcdFx0bnMuYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBuYW1lLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogbnVtYmVyLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBibG9ja29wdGlvbnMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX2Jsb2NrX29wdGlvbnMubm9jcmVhdGUsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56aB5q2i5Yib5bu66LSm5Y+3JywgJ+emgeatouW7uueri+izrOiZnycpLFxuXHRcdFx0XHRcdG5hbWU6ICdub2NyZWF0ZScsXG5cdFx0XHRcdFx0dmFsdWU6ICcxJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfYmxvY2tfb3B0aW9ucy5ub2VtYWlsLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eUteWtkOmCruS7tuWBnOeUqCcsICfpm7vlrZDpg7Xku7blgZznlKgnKSxcblx0XHRcdFx0XHRuYW1lOiAnbm9lbWFpbCcsXG5cdFx0XHRcdFx0dmFsdWU6ICcxJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfYmxvY2tfb3B0aW9ucy5kaXNhYmxldGFsayxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3og73nvJbovpHoh6rlt7HnmoTorqjorrrpobUnLCAn5LiN6IO957eo6Lyv6Ieq5bex55qE6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0bmFtZTogJ2Rpc2FibGV0YWxrJyxcblx0XHRcdFx0XHR2YWx1ZTogJzEnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHBhcnRpYWxCb3hcblx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfoi6Xkvb/nlKjpg6jliIblsIHnpoHvvIzkuI3lupTpgInmi6nmraTpobnvvIzpmaTpnZ7mgqjkuZ/mg7PopoHnpoHmraLnvJbovpHnlKjmiLforqjorrrpobXjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfoi6Xkvb/nlKjpg6jliIblsIHpjpbvvIzkuI3mh4npgbjmk4fmraTpoIXvvIzpmaTpnZ7mgqjkuZ/mg7PopoHnpoHmraLnt6jovK/kvb/nlKjogIXoqI7oq5bpoIHjgIInXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdDogJycsXG5cdFx0XHRcdH0sXG5cdFx0XHRdO1xuXHRcdFx0aWYgKFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkKSB7XG5cdFx0XHRcdGJsb2Nrb3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX2Jsb2NrX29wdGlvbnMuYXV0b2Jsb2NrLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWKqOWwgeemgScsICfoh6rli5XlsIHpjpYnKSxcblx0XHRcdFx0XHRuYW1lOiAnYXV0b2Jsb2NrJyxcblx0XHRcdFx0XHR2YWx1ZTogJzEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJsb2Nrb3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX2Jsb2NrX29wdGlvbnMuaGFyZGJsb2NrLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mYu+atoueZu+W9leeUqOaIt+S9v+eUqOivpUlQ5Zyw5Z2A57yW6L6RJywgJ+mYu+atoueZu+WFpeS9v+eUqOiAheS9v+eUqOipsklQ5L2N5Z2A57eo6LyvJyksXG5cdFx0XHRcdFx0bmFtZTogJ2hhcmRibG9jaycsXG5cdFx0XHRcdFx0dmFsdWU6ICcxJyxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRibG9ja29wdGlvbnMucHVzaChcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfYmxvY2tfb3B0aW9ucy53YXRjaHVzZXIsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55uR6KeG6K+l55So5oi355qE55So5oi36aG15ZKM6K6o6K666aG1JywgJ+ebo+imluipsuS9v+eUqOiAheeahOS9v+eUqOiAhemggemdouWSjOiojuirlumggScpLFxuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaHVzZXInLFxuXHRcdFx0XHRcdHZhbHVlOiAnMScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOW9k+WJjeeahOegtOWdj+S4reeahOivt+axgicsICfmqJnoqJjnlbbliY3nmoTnoLTlo57kuK3nmoToq4vmsYInKSxcblx0XHRcdFx0XHRuYW1lOiAnY2xvc2V2aXAnLFxuXHRcdFx0XHRcdHZhbHVlOiAnMScsXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdG5hbWU6ICdibG9ja29wdGlvbnMnLFxuXHRcdFx0XHRsaXN0OiBibG9ja29wdGlvbnMsXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55CG55Sx77yI55So5LqO5bCB56aB5pel5b+X77yJ77yaJywgJ+eQhueUse+8iOeUqOaWvOWwgemOluaXpeiqjO+8ie+8micpLFxuXHRcdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdCfor7fogIPomZHlnKjpu5jorqTnmoTmtojmga/kuK3liqDlhaXmnInnlKjnmoTor6bnu4bkv6Hmga/jgIInLFxuXHRcdFx0XHRcdCfoq4vogIPmha7lnKjpoJDoqK3nmoToqIrmga/kuK3liqDlhaXmnInnlKjnmoToqbPntLDos4foqIrjgIInXG5cdFx0XHRcdCksXG5cdFx0XHRcdHZhbHVlOiBUd2lua2xlLmJsb2NrLmZpZWxkX2Jsb2NrX29wdGlvbnMucmVhc29uLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRuYW1lOiAnZmlsZXJsb2dfbGFiZWwnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj4Lop4HvvJonLCAn5Y+D6KaL77yaJyksXG5cdFx0XHRcdHN0eWxlOiAnZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zdHlsZTpub3JtYWwgIWltcG9ydGFudCcsXG5cdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5Zyo5bCB56aB55CG55Sx5Lit5qCH5riF54m55q6K5oOF5Ya15Lul5L6b5YW25LuW566h55CG5ZGY5Y+C6ICDJyxcblx0XHRcdFx0XHQn5Zyo5bCB6Y6W55CG55Sx5Lit5qiZ5riF54m55q6K5oOF5rOB5Lul5L6b5YW25LuW566h55CG5ZOh5Y+D6ICDJ1xuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF9ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdG5hbWU6ICdmaWx0ZXJfc2VlX2Fsc28nLFxuXHRcdFx0XHRldmVudDogVHdpbmtsZS5ibG9jay5jYWxsYmFjay50b2dnbGVfc2VlX2Fsc29zLFxuXHRcdFx0XHRzdHlsZTogJ2Rpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXJnaW4tcmlnaHQ6NXB4Jyxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+i/h+a7pOWZqOaXpeW/lycsICfpgY7mv77lmajml6XoqownKSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUygn6L+H5ruk5Zmo5pel5b+XJywgJ+mBjua/vuWZqOaXpeiqjCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ2RlbGV0ZWRfc2VlX2Fsc28nLFxuXHRcdFx0XHRldmVudDogVHdpbmtsZS5ibG9jay5jYWxsYmFjay50b2dnbGVfc2VlX2Fsc29zLFxuXHRcdFx0XHRzdHlsZTogJ2Rpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXJnaW4tcmlnaHQ6NXB4Jyxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W3suWIoOmZpOeahOe8lui+kScsICflt7LliKrpmaTnmoTnt6jovK8nKSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUygn5bey5Yig6Zmk55qE57yW6L6RJywgJ+W3suWIqumZpOeahOe3qOi8rycpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX2Jsb2NrX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ2ZpbHRlcl9zZWVfYWxzbycsXG5cdFx0XHRcdGV2ZW50OiBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLnRvZ2dsZV9zZWVfYWxzb3MsXG5cdFx0XHRcdHN0eWxlOiAnZGlzcGxheTppbmxpbmUtYmxvY2s7IG1hcmdpbi1yaWdodDo1cHgnLFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi36K6o6K666aG1JywgJ+S9v+eUqOiAheiojuirlumggScpLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHR2YWx1ZTogd2luZG93LndnVUxTKCfnlKjmiLforqjorrrpobUnLCAn5L2/55So6ICF6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHRcdFx0ZmllbGRfYmxvY2tfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRuYW1lOiAnZmlsdGVyX3NlZV9hbHNvJyxcblx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2sudG9nZ2xlX3NlZV9hbHNvcyxcblx0XHRcdFx0c3R5bGU6ICdkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luLXJpZ2h0OjVweCcsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfov4fljrvnmoTlsIHnpoHorrDlvZUnLCAn6YGO5Y6755qE5bCB6Y6W6KiY6YyEJyksXG5cdFx0XHRcdFx0XHRjaGVja2VkOiBmYWxzZSxcblx0XHRcdFx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoJ+i/h+WOu+eahOWwgeemgeiusOW9lScsICfpgY7ljrvnmoTlsIHpjpboqJjpjIQnKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0XHQvLyBZZXQtYW5vdGhlci1sb2dldmVudHMtZG9lc24ndC1oYW5kbGUtcmFuZ2VzLXdlbGxcblx0XHRcdGlmIChibG9ja2VkVXNlck5hbWUgPT09IHJlbGV2YW50VXNlck5hbWUpIHtcblx0XHRcdFx0ZmllbGRfYmxvY2tfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoaWRkZW4nLFxuXHRcdFx0XHRcdG5hbWU6ICdyZWJsb2NrJyxcblx0XHRcdFx0XHR2YWx1ZTogJzEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHRlbXBsYXRlQm94KSB7XG5cdFx0XHRmaWVsZF90ZW1wbGF0ZV9vcHRpb25zID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qih5p2/6YCJ6aG5JywgJ+aooeadv+mBuOmghScpLFxuXHRcdFx0XHRuYW1lOiAnZmllbGRfdGVtcGxhdGVfb3B0aW9ucycsXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdG5hbWU6ICd0ZW1wbGF0ZScsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mAieaLqeiuqOiuuumhteaooeadv++8micsICfpgbjmk4foqI7oq5bpoIHmqKHmnb/vvJonKSxcblx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX3RlbXBsYXRlLFxuXHRcdFx0XHRsaXN0OiBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmZpbHRlcmVkX2Jsb2NrX2dyb3VwcyhibG9ja0dyb3VwLCB0cnVlKSxcblx0XHRcdFx0dmFsdWU6IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucy50ZW1wbGF0ZSxcblx0XHRcdH0pO1xuXHRcdFx0ZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRuYW1lOiAnYXJ0aWNsZScsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mTvuaOpemhtemdoicsICfpgKPntZDpoIHpnaInKSxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+WPr+S7pemaj+mAmuefpemTvuaOpemhtemdou+8jOS+i+WmguegtOWdj+eahOebruagh+OAguayoeacieadoeebrumcgOimgemTvuaOpeWImeivt+eVmeepuuOAgicsXG5cdFx0XHRcdFx0J+WPr+S7pemaqOmAmuefpemAo+e1kOmggemdou+8jOS+i+WmguegtOWjnueahOebruaomeOAguaykuacieaineebrumcgOimgemAo+e1kOWJh+iri+eVmeepuuOAgidcblx0XHRcdFx0KSxcblx0XHRcdH0pO1xuXHRcdFx0Ly8gT25seSB2aXNpYmxlIGlmIHBhcnRpYWwgYW5kIG5vdCBibG9ja2luZ1xuXHRcdFx0ZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRuYW1lOiAnYXJlYScsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WwgeemgeiMg+WbtCcsICflsIHpjpbnr4TlnI0nKSxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+mYu+atoueUqOaIt+e8lui+keeahOmhtemdouaIluWRveWQjeepuumXtOeahOWPr+mAieivtOaYjuOAgicsXG5cdFx0XHRcdFx0J+mYu+atouS9v+eUqOiAhee3qOi8r+eahOmggemdouaIluWRveWQjeepuumWk+eahOWPr+mBuOiqquaYjuOAgidcblx0XHRcdFx0KSxcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCFibG9ja0JveCkge1xuXHRcdFx0XHRmaWVsZF90ZW1wbGF0ZV9vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAndGVtcGxhdGVfZXhwaXJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogJ+Wwgeemgeacn+mZkO+8micsXG5cdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5bCB56aB5pe26ZW/77yM5aaCMjTlsI/ml7bjgIEy5ZGo44CB5peg6ZmQ5pyf562J44CCJywgJ+WwgemOluaZgumVt++8jOWmgjI05bCP5pmC44CBMumAseOAgeeEoemZkOacn+etieOAgicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0bmFtZTogJ2Jsb2NrX3JlYXNvbicsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+KAnOeUseS6juKApuKApuaCqOW3suiiq+WwgeemgeKAnScsICfjgIznlLHmlrzigKbigKbmgqjlt7LooqvlsIHpjpbjgI0nKSxcblx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdCflj6/pgInnmoTnkIbnlLHvvIznlKjkuo7mm7/mjaLpu5jorqTnkIbnlLHjgILlj6rlnKjluLjop4TlsIHnpoHmqKHmnb/kuK3mnInmlYjjgIInLFxuXHRcdFx0XHRcdCflj6/pgbjnmoTnkIbnlLHvvIznlKjmlrzmm7/mj5vpoJDoqK3nkIbnlLHjgILlj6rlnKjluLjopo/lsIHpjpbmqKHmnb/kuK3mnInmlYjjgIInXG5cdFx0XHRcdCksXG5cdFx0XHRcdHZhbHVlOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYmxvY2tfcmVhc29uLFxuXHRcdFx0XHRzaXplOiA2MCxcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGJsb2NrQm94KSB7XG5cdFx0XHRcdGZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdG5hbWU6ICdibGFua19kdXJhdGlvbicsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3lnKjmqKHmnb/kuK3ljIXlkKvlsIHnpoHmnJ/pmZAnLCAn5LiN5Zyo5qih5p2/5Lit5YyF5ZCr5bCB6Y6W5pyf6ZmQJyksXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5ibGFua19kdXJhdGlvbixcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmqKHmnb/lsIbkvJrmmL7npLrigJzkuIDmrrXml7bpl7TigJ3ogIzkuI3mmK/lhbfkvZPml7bplb8nLFxuXHRcdFx0XHRcdFx0XHRcdCfmqKHmnb/lsIfmnIPpoa/npLrjgIzkuIDmrrXmmYLplpPjgI3ogIzkuI3mmK/lhbfpq5TmmYLplbcnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3og73nvJbovpHoh6rlt7HnmoTorqjorrrpobUnLCAn5LiN6IO957eo6Lyv6Ieq5bex55qE6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdub3RhbGsnLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMubm90YWxrLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+eUqOatpOWcqOWwgeemgeaooeadv+S4reaMh+aYjuivpeeUqOaIt+e8lui+keiuqOiuuumhteeahOadg+mZkOW3suiiq+enu+mZpCcsXG5cdFx0XHRcdFx0XHRcdFx0J+eUqOatpOWcqOWwgemOluaooeadv+S4reaMh+aYjuipsuS9v+eUqOiAhee3qOi8r+iojuirlumggeeahOasiumZkOW3suiiq+enu+mZpCdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S4jeiDveWPkemAgeeUteWtkOmCruS7ticsICfkuI3og73lgrPpgIHpm7vlrZDpg7Xku7YnKSxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ25vZW1haWxfdGVtcGxhdGUnLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMubm9lbWFpbF90ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfnlKjmraTlnKjlsIHnpoHmqKHmnb/kuK3mjIfmmI7or6XnlKjmiLflj5HpgIHnlLXlrZDpgq7ku7bnmoTmnYPpmZDlt7Looqvnp7vpmaQnLFxuXHRcdFx0XHRcdFx0XHRcdCfnlKjmraTlnKjlsIHpjpbmqKHmnb/kuK3mjIfmmI7oqbLkvb/nlKjogIXlgrPpgIHpm7vlrZDpg7Xku7bnmoTmrIrpmZDlt7Looqvnp7vpmaQnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuI3og73liJvlu7rotKblj7cnLCAn5LiN6IO95bu656uL6LOs6JmfJyksXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdub2NyZWF0ZV90ZW1wbGF0ZScsXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5ub2NyZWF0ZV90ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfnlKjmraTlnKjlsIHnpoHmqKHmnb/kuK3mjIfmmI7or6XnlKjmiLfliJvlu7rotKblj7fnmoTmnYPpmZDlt7Looqvnp7vpmaQnLFxuXHRcdFx0XHRcdFx0XHRcdCfnlKjmraTlnKjlsIHpjpbmqKHmnb/kuK3mjIfmmI7oqbLkvb/nlKjogIXlu7rnq4vos6zomZ/nmoTmrIrpmZDlt7Looqvnp7vpmaQnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgJHByZXZpZXdsaW5rID0gJChgPGEgaWQ9XCJ0d2lua2xlYmxvY2stcHJldmlldy1saW5rXCI+JHt3aW5kb3cud2dVTFMoJ+mihOiniCcsICfpoJDopr0nKX08L2E+YCk7XG5cdFx0XHQkcHJldmlld2xpbmsub2ZmKCdjbGljaycpLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5wcmV2aWV3KCRmb3JtWzBdKTtcblx0XHRcdH0pO1xuXHRcdFx0JHByZXZpZXdsaW5rLmNzcyh7XG5cdFx0XHRcdGN1cnNvcjogJ3BvaW50ZXInLFxuXHRcdFx0fSk7XG5cdFx0XHRmaWVsZF90ZW1wbGF0ZV9vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRpZDogJ2Jsb2NrcHJldmlldycsXG5cdFx0XHRcdGxhYmVsOiBbJHByZXZpZXdsaW5rWzBdXSxcblx0XHRcdH0pO1xuXHRcdFx0ZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0aWQ6ICd0d2lua2xlYmxvY2stcHJldmlld2JveCcsXG5cdFx0XHRcdHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRhZ0JveCkge1xuXHRcdFx0ZmllbGRfdGFnX29wdGlvbnMgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDnlKjmiLfpobUnLCAn5qiZ6KiY5L2/55So6ICF6aCB6Z2iJyksXG5cdFx0XHRcdG5hbWU6ICdmaWVsZF90YWdfb3B0aW9ucycsXG5cdFx0XHR9KTtcblx0XHRcdGZpZWxkX3RhZ19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdG5hbWU6ICd0YWcnLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6nnlKjmiLfpobXmqKHmnb/vvJonLCAn6YG45pOH5L2/55So6ICF6aCB6Z2i5qih5p2/77yaJyksXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogYHt7QmxvY2tlZCB1c2VyfX3vvJoke3dpbmRvdy53Z1VMUygn5LiA6Iis5rC45LmF5bCB56aBJywgJ+S4gOiIrOawuOS5heWwgemOlicpfWAsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ0Jsb2NrZWQgdXNlcicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogYHt7U29ja3B1cHBldH1977yaJHt3aW5kb3cud2dVTFMoJ+WCgOWEoei0puWPtycsICflgoDlhKHos6zomZ8nKX1gLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdTb2NrcHVwcGV0Jyxcblx0XHRcdFx0XHRcdHN1Ymdyb3VwOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiAnc3BwVXNlcm5hbWUnLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Li76LSm5Y+355So5oi35ZCN77yaJywgJ+S4u+izrOiZn+S9v+eUqOiAheWQjeeose+8micpLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ3NwcFR5cGUnLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eKtuaAge+8micsICfni4DmhYvvvJonKSxcblx0XHRcdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2Jsb2NrZWQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYGJsb2NrZWQgLSAke3dpbmRvdy53Z1VMUygn5LuF5L6d6KGM5Li66K+B5o2u6K6k5a6aJywgJ+WDheS+neihjOeCuuitieaTmuiqjeWumicpfWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAncHJvdmVuJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGBwcm92ZW4gLSAke3dpbmRvdy53Z1VMUygn57uP5YKA5YSh6LCD5p+l56Gu6K6kJywgJ+e2k+WCgOWEoeiqv+afpeeiuuiqjScpfWAsXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdjb25maXJtZWQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYGNvbmZpcm1lZCAtICR7d2luZG93LndnVUxTKCfnu4/mn6XmoLjnoa7orqQnLCAn57aT5p+l5qC456K66KqNJyl9YCxcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdzcHBFdmlkZW5jZScsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoLnmja7igKbigKbnoa7lrprvvJonLCAn5qC55pOa4oCm4oCm56K65a6a77yaJyksXG5cdFx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0J+e6r+aWh+Wtl+aIluaYr+W4pltbXV3nmoTpk77mjqXvvIzkvovlpoLvvJpbW1NwZWNpYWw65Zu65a6a6ZO+5o6lL3h4eHh4eHh4fOeUqOaIt+afpeaguF1dJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfntJTmloflrZfmiJbmmK/luLZbW11d55qE6YCj57WQ77yM5L6L5aaC77yaW1tTcGVjaWFsOuWbuuWumumTvuaOpS94eHh4eHh4eHznlKjmiLbmn6XmoLhdXSdcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiBge3tTb2NrcHVwcGV0ZWVyfGJsb2NrZWR9fe+8miR7d2luZG93LndnVUxTKCflgoDlhKHkuLvotKblj7cnLCAn5YKA5YSh5Li76LOs6JmfJyl9YCxcblx0XHRcdFx0XHRcdHZhbHVlOiAnU29ja3B1cHBldGVlcicsXG5cdFx0XHRcdFx0XHRzdWJncm91cDogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdzcG1DaGVja2VkJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdzcG1DaGVja2VkJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn57uP55So5oi35p+l5qC456Gu6K6kJywgJ+e2k+S9v+eUqOiAheafpeaguOeiuuiqjScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ3NwbUV2aWRlbmNlJyxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mineWklueQhueUse+8micsICfpoY3lpJbnkIbnlLHvvJonKSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAodW5ibG9ja0JveCkge1xuXHRcdFx0ZmllbGRfdW5ibG9ja19vcHRpb25zID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Kej6Zmk5bCB56aB6YCJ6aG5JywgJ+ino+mZpOWwgemOlumBuOmghScpLFxuXHRcdFx0XHRuYW1lOiAnZmllbGRfdW5ibG9ja19vcHRpb25zJyxcblx0XHRcdH0pO1xuXHRcdFx0ZmllbGRfdW5ibG9ja19vcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICd0ZXh0YXJlYScsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eQhueUse+8iOeUqOS6juWwgeemgeaXpeW/l++8ie+8micsICfnkIbnlLHvvIjnlKjmlrzlsIHpjpbml6XoqozvvInvvJonKSxcblx0XHRcdFx0bmFtZTogJ3JlYXNvbicsXG5cdFx0XHRcdHZhbHVlOiBUd2lua2xlLmJsb2NrLmZpZWxkX3VuYmxvY2tfb3B0aW9ucy5yZWFzb24sXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0bGV0IG9sZGZpZWxkO1xuXHRcdGlmIChmaWVsZF9wcmVzZXQpIHtcblx0XHRcdFtvbGRmaWVsZF0gPSAkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfcHJlc2V0XCJdJyk7XG5cdFx0XHRvbGRmaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWVsZF9wcmVzZXQucmVuZGVyKCksIG9sZGZpZWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3ByZXNldFwiXScpLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKGZpZWxkX2Jsb2NrX29wdGlvbnMpIHtcblx0XHRcdFtvbGRmaWVsZF0gPSAkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfYmxvY2tfb3B0aW9uc1wiXScpO1xuXHRcdFx0b2xkZmllbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZmllbGRfYmxvY2tfb3B0aW9ucy5yZW5kZXIoKSwgb2xkZmllbGQpO1xuXHRcdFx0JGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkXzY0XCJdJykuc2hvdygpO1xuXHRcdFx0JGZvcm0uZmluZCgnW25hbWU9cGFnZXJlc3RyaWN0aW9uc10nKS5zZWxlY3QyKHtcblx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0cGxhY2Vob2xkZXI6IHdpbmRvdy53Z1VMUygn6L6T5YWl6KaB6Zi75q2i55So5oi357yW6L6R55qE6aG16Z2iJywgJ+i8uOWFpeimgemYu+atouS9v+eUqOiAhee3qOi8r+eahOmggemdoicpLFxuXHRcdFx0XHRsYW5ndWFnZToge1xuXHRcdFx0XHRcdGVycm9yTG9hZGluZzogKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHdpbmRvdy53Z1VMUygn5pCc57Si6K+N5rGH5LiN5a6M5pW05oiW5peg5pWIJywgJ+aQnOWwi+ipnuW9meS4jeWujOaVtOaIlueEoeaViCcpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1heGltdW1TZWxlY3Rpb25MZW5ndGg6IDEwLFxuXHRcdFx0XHRtaW5pbXVtSW5wdXRMZW5ndGg6IDEsXG5cdFx0XHRcdGFqYXg6IHtcblx0XHRcdFx0XHR1cmw6IG13LnV0aWwud2lraVNjcmlwdCgnYXBpJyksXG5cdFx0XHRcdFx0ZGF0YVR5cGU6ICdqc29uJyxcblx0XHRcdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0XHRcdGRhdGE6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQocGFyYW1zLnRlcm0pO1xuXHRcdFx0XHRcdFx0aWYgKCF0aXRsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHRcdFx0XHRsaXN0OiAnYWxscGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRhcGZyb206IHRpdGxlLnRpdGxlLFxuXHRcdFx0XHRcdFx0XHRhcG5hbWVzcGFjZTogdGl0bGUubmFtZXNwYWNlLFxuXHRcdFx0XHRcdFx0XHRhcGxpbWl0OiAnMTAnLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHByb2Nlc3NSZXN1bHRzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0czogZGF0YS5xdWVyeS5hbGxwYWdlcy5tYXAoKHBhZ2UpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHBhZ2UudGl0bGUsIHBhZ2UubnMpLnRvVGV4dCgpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogdGl0bGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiB0aXRsZSxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVTZWxlY3Rpb246IChjaG9pY2UpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJCgnPGE+Jylcblx0XHRcdFx0XHRcdC50ZXh0KGNob2ljZS50ZXh0KVxuXHRcdFx0XHRcdFx0LmF0dHIoe1xuXHRcdFx0XHRcdFx0XHRocmVmOiBtdy51dGlsLmdldFVybChjaG9pY2UudGV4dCksXG5cdFx0XHRcdFx0XHRcdHRhcmdldDogJ19ibGFuaycsXG5cdFx0XHRcdFx0XHRcdHJlbDogJ25vb3BlbmVyIG5vcmVmZXJyZXInLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblx0XHRcdCRmb3JtLmZpbmQoJ1tuYW1lPW5hbWVzcGFjZXJlc3RyaWN0aW9uc10nKS5zZWxlY3QyKHtcblx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0bWF0Y2hlcjogTW9yZWJpdHMuc2VsZWN0Mi5tYXRjaGVycy53b3JkQmVnaW5uaW5nLFxuXHRcdFx0XHRsYW5ndWFnZToge1xuXHRcdFx0XHRcdHNlYXJjaGluZzogTW9yZWJpdHMuc2VsZWN0Mi5xdWVyeUludGVyY2VwdG9yLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZVJlc3VsdDogTW9yZWJpdHMuc2VsZWN0Mi5oaWdobGlnaHRTZWFyY2hNYXRjaGVzLFxuXHRcdFx0XHRwbGFjZWhvbGRlcjogd2luZG93LndnVUxTKCfpgInmi6nopoHnpoHmraLnlKjmiLfnvJbovpHnmoTlkb3lkI3nqbrpl7QnLCAn6YG45pOH6KaB56aB5q2i5L2/55So6ICF57eo6Lyv55qE5ZG95ZCN56m66ZaTJyksXG5cdFx0XHR9KTtcblx0XHRcdG13LnV0aWwuYWRkQ1NTKFxuXHRcdFx0XHQvKiBSZWR1Y2UgcGFkZGluZztcblx0XHRcdFx0ICogQWRqdXN0IGZvbnQgc2l6ZTtcblx0XHRcdFx0ICogUmVtb3ZlIGJsYWNrIGJvcmRlcjtcblx0XHRcdFx0ICogTWFrZSB0aGUgdGlueSBjcm9zcyBsYXJnZXJcblx0XHRcdFx0ICovXG5cdFx0XHRcdCcuc2VsZWN0Mi1yZXN1bHRzIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbntwYWRkaW5nLXRvcDoxcHg7cGFkZGluZy1ib3R0b206MXB4fS5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1kcm9wZG93biAuc2VsZWN0Mi1yZXN1bHRzLC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0aW9uIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWR7Zm9udC1zaXplOjEzcHh9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1mb2N1cyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxle2JvcmRlcjoxcHggc29saWQgI2FhYX0uc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3Zle2ZvbnQtc2l6ZToxMjUlfSdcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRmb3JtLmZpbmQoJ2ZpZWxkc2V0W25hbWU9XCJmaWVsZF9ibG9ja19vcHRpb25zXCJdJykuaGlkZSgpO1xuXHRcdFx0JGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkXzY0XCJdJykuaGlkZSgpO1xuXHRcdFx0Ly8gQ2xlYXIgc2VsZWN0MiBvcHRpb25zXG5cdFx0XHQkZm9ybS5maW5kKCdbbmFtZT1wYWdlcmVzdHJpY3Rpb25zXScpLnZhbChudWxsKS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdCRmb3JtLmZpbmQoJ1tuYW1lPW5hbWVzcGFjZXJlc3RyaWN0aW9uc10nKS52YWwobnVsbCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0fVxuXHRcdGlmIChmaWVsZF90ZW1wbGF0ZV9vcHRpb25zKSB7XG5cdFx0XHRbb2xkZmllbGRdID0gJGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3RlbXBsYXRlX29wdGlvbnNcIl0nKTtcblx0XHRcdG9sZGZpZWxkLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZpZWxkX3RlbXBsYXRlX29wdGlvbnMucmVuZGVyKCksIG9sZGZpZWxkKTtcblx0XHRcdGUudGFyZ2V0LmZvcm0ucm9vdC5wcmV2aWV3ZXIgPSBuZXcgTW9yZWJpdHMud2lraS5wcmV2aWV3KFxuXHRcdFx0XHQkKGUudGFyZ2V0LmZvcm0ucm9vdCkuZmluZCgnI3R3aW5rbGVibG9jay1wcmV2aWV3Ym94JykubGFzdCgpWzBdXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfdGVtcGxhdGVfb3B0aW9uc1wiXScpLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKGZpZWxkX3RhZ19vcHRpb25zKSB7XG5cdFx0XHRbb2xkZmllbGRdID0gJGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3RhZ19vcHRpb25zXCJdJyk7XG5cdFx0XHRvbGRmaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWVsZF90YWdfb3B0aW9ucy5yZW5kZXIoKSwgb2xkZmllbGQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfdGFnX29wdGlvbnNcIl0nKS5oaWRlKCk7XG5cdFx0fVxuXHRcdGlmIChmaWVsZF91bmJsb2NrX29wdGlvbnMpIHtcblx0XHRcdFtvbGRmaWVsZF0gPSAkZm9ybS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGRfdW5ibG9ja19vcHRpb25zXCJdJyk7XG5cdFx0XHRvbGRmaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWVsZF91bmJsb2NrX29wdGlvbnMucmVuZGVyKCksIG9sZGZpZWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGZvcm0uZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3VuYmxvY2tfb3B0aW9uc1wiXScpLmhpZGUoKTtcblx0XHR9XG5cdFx0Ly8gQW55IGJsb2NrLCBpbmNsdWRpbmcgcmFuZ2VzXG5cdFx0aWYgKFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbykge1xuXHRcdFx0Ly8gZmFsc2UgZm9yIGFuIGlwIGNvdmVyZWQgYnkgYSByYW5nZSBvciBhIHNtYWxsZXIgcmFuZ2Ugd2l0aGluIGEgbGFyZ2VyIHJhbmdlO1xuXHRcdFx0Ly8gdHJ1ZSBmb3IgYSB1c2VyLCBzaW5nbGUgaXAgYmxvY2ssIG9yIHRoZSBleGFjdCByYW5nZSBmb3IgYSByYW5nZSBibG9ja1xuXHRcdFx0Y29uc3Qgc2FtZVVzZXIgPSBibG9ja2VkVXNlck5hbWUgPT09IHJlbGV2YW50VXNlck5hbWU7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdCgkYm9keS5maW5kKCdkaXZbbmFtZT1cImN1cnJlbnRibG9ja1wiXSBzcGFuJykubGFzdCgpWzBdKTtcblx0XHRcdGxldCBzdGF0dXNTdHIgPSBgJHtyZWxldmFudFVzZXJOYW1lfeW3suiiqyR7XG5cdFx0XHRcdFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mby5wYXJ0aWFsID09PSAnJ1xuXHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCfpg6jliIblsIHnpoEnLCAn6YOo5YiG5bCB6Y6WJylcblx0XHRcdFx0XHQ6IHdpbmRvdy53Z1VMUygn5YWo56uZ5bCB56aBJywgJ+WFqOermeWwgemOlicpXG5cdFx0XHR9YDtcblx0XHRcdC8vIFJhbmdlIGJsb2NrZWRcblx0XHRcdGlmIChUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8ucmFuZ2VzdGFydCAhPT0gVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLnJhbmdlZW5kKSB7XG5cdFx0XHRcdGlmIChzYW1lVXNlcikge1xuXHRcdFx0XHRcdHN0YXR1c1N0ciArPSB3aW5kb3cud2dVTFMoJ++8iOauteWwgeemge+8iScsICfvvIjmrrXlsIHpjpbvvIknKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBDaGFuZ2Ugb3JkZXJcblx0XHRcdFx0XHQvLyBMaW5rIHRvIHRoZSBmdWxsIHJhbmdlXG5cdFx0XHRcdFx0Y29uc3QgJHJhbmdlYmxvY2tsb2dsaW5rID0gJCgnPHNwYW4+JykuYXBwZW5kKFxuXHRcdFx0XHRcdFx0JChcblx0XHRcdFx0XHRcdFx0YDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiR7bXcudXRpbC5nZXRVcmwoJ1NwZWNpYWw6TG9nJywge1xuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogJ3ZpZXcnLFxuXHRcdFx0XHRcdFx0XHRcdHBhZ2U6IGJsb2NrZWRVc2VyTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnYmxvY2snLFxuXHRcdFx0XHRcdFx0XHR9KX1cIj4ke1xuXHRcdFx0XHRcdFx0XHRcdE1vcmViaXRzLmlwLmdldDY0KHJlbGV2YW50VXNlck5hbWUpID09PSBibG9ja2VkVXNlck5hbWUgPyAnLzY0JyA6IGJsb2NrZWRVc2VyTmFtZVxuXHRcdFx0XHRcdFx0XHR9PC9hPilgXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRzdGF0dXNTdHIgKz1cblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn77yI5L2N5LqOJywgJ++8iOS9jeaWvCcpICtcblx0XHRcdFx0XHRcdCRyYW5nZWJsb2NrbG9nbGluay5odG1sKCkgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmrrXlsIHnpoHlhoXvvIknLCAn5q615bCB6Y6W5YWn77yJJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8uZXhwaXJ5ID09PSAnaW5maW5pdHknKSB7XG5cdFx0XHRcdHN0YXR1c1N0ciArPSB3aW5kb3cud2dVTFMoJ++8iOaXoOmZkOacn++8iScsICfvvIjnhKHpmZDmnJ/vvIknKTtcblx0XHRcdH0gZWxzZSBpZiAobmV3IE1vcmViaXRzLmRhdGUoVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLmV4cGlyeSkuaXNWYWxpZCgpKSB7XG5cdFx0XHRcdHN0YXR1c1N0ciArPSBgJHtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ++8iOe7iOatouS6jicsICfvvIjntYLmraLmlrwnKSArXG5cdFx0XHRcdFx0bmV3IE1vcmViaXRzLmRhdGUoVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLmV4cGlyeSkuY2FsZW5kYXIoJ3V0YycpXG5cdFx0XHRcdH3vvIlgO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGluZm9TdHIgPSB3aW5kb3cud2dVTFMoJ+atpOihqOWNleWwhicsICfmraTooajllq7lsIcnKTtcblx0XHRcdGlmIChzYW1lVXNlcikge1xuXHRcdFx0XHRpbmZvU3RyICs9IHdpbmRvdy53Z1VMUygn5pu05pS55bCB56aBJywgJ+iuiuabtOWwgemOlicpO1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5ibG9jay5jdXJyZW50QmxvY2tJbmZvLnBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQm94KSB7XG5cdFx0XHRcdFx0aW5mb1N0ciArPSB3aW5kb3cud2dVTFMoJ+S4uumDqOWIhuWwgeemgScsICfngrrpg6jliIblsIHpjpYnKTtcblx0XHRcdFx0fSBlbHNlIGlmIChUd2lua2xlLmJsb2NrLmN1cnJlbnRCbG9ja0luZm8ucGFydGlhbCA9PT0gJycgJiYgIXBhcnRpYWxCb3gpIHtcblx0XHRcdFx0XHRpbmZvU3RyICs9IHdpbmRvdy53Z1VMUygn5Li65YWo56uZ5bCB56aBJywgJ+eCuuWFqOermeWwgemOlicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZm9TdHIgKz0gJ+OAgic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbmZvU3RyICs9XG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDkuIrpop3lpJbnmoQnLCAn5Yqg5LiK6aGN5aSW55qEJykgK1xuXHRcdFx0XHRcdChwYXJ0aWFsQm94ID8gJ+mDqOWIhicgOiAnJykgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCB56aB44CCJywgJ+WwgemOluOAgicpO1xuXHRcdFx0fVxuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oc3RhdHVzU3RyLCBpbmZvU3RyKTtcblx0XHRcdC8vIERlZmF1bHQgdG8gdGhlIGN1cnJlbnQgYmxvY2sgY29uZGl0aW9ucyBvbiBpbnRpYWwgZm9ybSBnZW5lcmF0aW9uXG5cdFx0XHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLnVwZGF0ZV9mb3JtKGUsIFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbyk7XG5cdFx0fVxuXHRcdC8vIFRoaXMgaXMgd2hlcmUgVDE0NjYyOCByZWFsbHkgY29tZXMgaW50byBwbGF5OiBhIHJhbmdlYmxvY2sgd2lsbFxuXHRcdC8vIG9ubHkgcmV0dXJuIHRoZSBjb3JyZWN0IGJsb2NrIGxvZyBpZiB3Z1JlbGV2YW50VXNlck5hbWUgaXMgdGhlXG5cdFx0Ly8gZXhhY3QgcmFuZ2UsIG5vdCBtZXJlbHkgYSBmdW50aW9uYWwgZXF1aXZhbGVudFxuXHRcdGlmIChUd2lua2xlLmJsb2NrLmhhc0Jsb2NrTG9nKSB7XG5cdFx0XHQvLyBBZGQgbW9yZSBkZXRhaWxzXG5cdFx0XHRjb25zdCBibG9ja2xvZ2luZm8gPSBbXTtcblx0XHRcdGNvbnN0ICRibG9ja2xvZ2xpbmsgPSAkKCc8c3Bhbj4nKS5hcHBlbmQoXG5cdFx0XHRcdCQoXG5cdFx0XHRcdFx0YDxhIHJlbD1cIm5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiR7bXcudXRpbC5nZXRVcmwoJ1NwZWNpYWw6TG9nJywge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiAndmlldycsXG5cdFx0XHRcdFx0XHRwYWdlOiByZWxldmFudFVzZXJOYW1lLFxuXHRcdFx0XHRcdFx0dHlwZTogJ2Jsb2NrJyxcblx0XHRcdFx0XHR9KX1cIj4ke3dpbmRvdy53Z1VMUygn5bCB56aB5pel5b+XJywgJ+WwgemOluaXpeiqjCcpfTwvYT4pYFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKFR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbykge1xuXHRcdFx0XHRibG9ja2xvZ2luZm8ucHVzaCh3aW5kb3cud2dVTFMoJ+WwgeemgeivpuaDhScsICflsIHpjpboqbPmg4UnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBbbGFzdEJsb2NrQWN0aW9uXSA9IFR3aW5rbGUuYmxvY2suYmxvY2tMb2c7XG5cdFx0XHRcdGNvbnN0IGJsb2NrQWN0aW9uID0gbGFzdEJsb2NrQWN0aW9uLmFjdGlvbiA9PT0gJ3VuYmxvY2snID8gVHdpbmtsZS5ibG9jay5ibG9ja0xvZ1sxXSA6IGxhc3RCbG9ja0FjdGlvbjtcblx0XHRcdFx0YmxvY2tsb2dpbmZvLnB1c2goXG5cdFx0XHRcdFx0YOatpCR7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5pcC5pc1JhbmdlKHJlbGV2YW50VXNlck5hbWUpXG5cdFx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCdJUOiMg+WbtCcsICdJUOevhOWcjScpXG5cdFx0XHRcdFx0XHRcdDogd2luZG93LndnVUxTKCfnlKjmiLcnLCAn5L2/55So6ICFJylcblx0XHRcdFx0XHR95pu+5ZyoYCxcblx0XHRcdFx0XHQkKGA8Yj4ke25ldyBNb3JlYml0cy5kYXRlKGJsb2NrQWN0aW9uLnRpbWVzdGFtcCkuY2FsZW5kYXIoJ3V0YycpfTwvYj5gKVswXSxcblx0XHRcdFx0XHRg6KKrJHtibG9ja0FjdGlvbi51c2VyfSR7d2luZG93LndnVUxTKCflsIHnpoEnLCAn5bCB6Y6WJyl9YCxcblx0XHRcdFx0XHQkKGA8Yj4ke01vcmViaXRzLnN0cmluZy5mb3JtYXRUaW1lKGJsb2NrQWN0aW9uLnBhcmFtcy5kdXJhdGlvbil9PC9iPmApWzBdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChsYXN0QmxvY2tBY3Rpb24uYWN0aW9uID09PSAndW5ibG9jaycpIHtcblx0XHRcdFx0XHRibG9ja2xvZ2luZm8ucHVzaChg77yMJHtuZXcgTW9yZWJpdHMuZGF0ZShsYXN0QmxvY2tBY3Rpb24udGltZXN0YW1wKS5jYWxlbmRhcigndXRjJyl96Kej5bCBYCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gYmxvY2sgb3IgcmVibG9ja1xuXHRcdFx0XHRcdGJsb2NrbG9naW5mby5wdXNoKFxuXHRcdFx0XHRcdFx0YO+8jCR7bmV3IE1vcmViaXRzLmRhdGUoYmxvY2tBY3Rpb24ucGFyYW1zLmV4cGlyeSkuY2FsZW5kYXIoJ3V0YycpfSR7d2luZG93LndnVUxTKCfov4fmnJ8nLCAn6YGO5pyfJyl9YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KCRib2R5LmZpbmQoJ2RpdltuYW1lPVwiaGFzYmxvY2tsb2dcIl0gc3BhbicpLmxhc3QoKVswXSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMud2FybihibG9ja2xvZ2luZm8sICRibG9ja2xvZ2xpbmtbMF0pO1xuXHRcdH1cblx0XHQvLyBNYWtlIHN1cmUgYWxsIHRoZSBmaWVsZHMgYXJlIGNvcnJlY3QgYmFzZWQgb24gaW5pdGlhbCBkZWZhdWx0c1xuXHRcdGlmIChibG9ja0JveCkge1xuXHRcdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5jaGFuZ2VfcHJlc2V0KGUpO1xuXHRcdH0gZWxzZSBpZiAodGVtcGxhdGVCb3gpIHtcblx0XHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX3RlbXBsYXRlKGUpO1xuXHRcdH1cblx0fTtcblx0LyoqXG5cdCAqIEtlZXAgYWxwaGFiZXRpemVkIGJ5IGtleSBuYW1lLCBUd2lua2xlLmJsb2NrLmJsb2NrR3JvdXBzIGVzdGFibGlzaGVzXG5cdCAqICAgIHRoZSBvcmRlciB0aGV5IHdpbGwgYXBwZWFyIGluIHRoZSBpbnRlcmZhY2Vcblx0ICpcblx0ICogQmxvY2sgcHJlc2V0IGZvcm1hdCwgYWxsIGtleXMgYWNjZXB0IG9ubHkgJ3RydWUnIChvbWl0IGZvciBmYWxzZSkgZXhjZXB0IHdoZXJlIG5vdGVkOlxuXHQgKiA8dGl0bGUgb2YgYmxvY2sgdGVtcGxhdGU+IDoge1xuXHQgKiAgIGF1dG9ibG9jazogPGF1dG9ibG9jayBhbnkgSVAgYWRkcmVzc2VzIHVzZWQgKGZvciByZWdpc3RlcmVkIHVzZXJzIG9ubHkpPlxuXHQgKiAgIGRpc2FibGV0YWxrOiA8ZGlzYWJsZSB1c2VyIGZyb20gZWRpdGluZyB0aGVpciBvd24gdGFsayBwYWdlIHdoaWxlIGJsb2NrZWQ+XG5cdCAqICAgZXhwaXJ5OiA8c3RyaW5nIC0gZXhwaXJ5IHRpbWVzdGFtcCwgY2FuIGluY2x1ZGUgcmVsYXRpdmUgdGltZXMgbGlrZSBcIjUgbW9udGhzXCIsIFwiMiB3ZWVrc1wiIGV0Yz5cblx0ICogICBmb3JBbm9uT25seTogPHNob3cgYmxvY2sgb3B0aW9uIGluIHRoZSBpbnRlcmZhY2Ugb25seSBpZiB0aGUgcmVsZXZhbnQgdXNlciBpcyBhbiBJUD5cblx0ICogICBmb3JSZWdpc3RlcmVkT25seTogPHNob3cgYmxvY2sgb3B0aW9uIGluIHRoZSBpbnRlcmZhY2Ugb25seSBpZiB0aGUgcmVsZXZhbnQgdXNlciBpcyByZWdpc3RlcmVkPlxuXHQgKiAgIGxhYmVsOiA8c3RyaW5nIC0gbGFiZWwgZm9yIHRoZSBvcHRpb24gb2YgdGhlIGRyb3Bkb3duIGluIHRoZSBpbnRlcmZhY2UgKGtlZXAgYnJpZWYpPlxuXHQgKiAgIG5vZW1haWw6IHByZXZlbnQgdGhlIHVzZXIgZnJvbSBzZW5kaW5nIGVtYWlsIHRocm91Z2ggU3BlY2lhbDpFbWFpbHVzZXJcblx0ICogICBwYWdlUGFyYW06IDxzZXQgaWYgdGhlIGFzc29jaWF0ZWQgYmxvY2sgdGVtcGxhdGUgYWNjZXB0cyBhIHBhZ2UgcGFyYW1ldGVyPlxuXHQgKiAgIHByZXBlbmRSZWFzb246IDxzdHJpbmcgLSBwcmVwZW5kcyB0aGUgdmFsdWUgb2YgJ3JlYXNvbicgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgcmVhc29uLCBuYW1lbHkgZm9yIHdoZW4gcmV2b2tpbmcgdGFsayBwYWdlIGFjY2Vzcz5cblx0ICogICBub2NyZWF0ZTogPGJsb2NrIGFjY291bnQgY3JlYXRpb24gZnJvbSB0aGUgdXNlcidzIElQIChmb3IgYW5vbnltb3VzIHVzZXJzIG9ubHkpPlxuXHQgKiAgIG5vbnN0YW5kYXJkOiA8dGVtcGxhdGUgZG9lcyBub3QgY29uZm9ybSB0byBzdGV3YXJkc2hpcCBvZiBbW2Vud2lraTpXaWtpUHJvamVjdCBVc2VyIFdhcm5pbmdzXV0gYW5kIG1heSBub3QgYWNjZXB0IHN0YW5kYXJkIHBhcmFtZXRlcnM+XG5cdCAqICAgcmVhc29uOiA8c3RyaW5nIC0gYmxvY2sgcmF0aW9uYWxlLCBhcyB3b3VsZCBhcHBlYXIgaW4gdGhlIGJsb2NrIGxvZyxcblx0ICogICAgICAgICAgICBhbmQgdGhlIGVkaXQgc3VtbWFyeSBmb3Igd2hlbiBhZGRpbmcgYmxvY2sgdGVtcGxhdGUsIHVubGVzcyAnc3VtbWFyeScgaXMgc2V0PlxuXHQgKiAgIHJlYXNvblBhcmFtOiA8c2V0IGlmIHRoZSBhc3NvY2lhdGVkIGJsb2NrIHRlbXBsYXRlIGFjY2VwdHMgYSByZWFzb24gcGFyYW1ldGVyPlxuXHQgKiAgIHNpZzogPHN0cmluZyAtIHNldCB0byB+fn5+IGlmIGJsb2NrIHRlbXBsYXRlIGRvZXMgbm90IGFjY2VwdCBcInRydWVcIiBhcyB0aGUgdmFsdWUsIG9yIHNldCBudWxsIHRvIG9taXQgc2lnIHBhcmFtIGFsdG9nZXRoZXI+XG5cdCAqICAgc3VtbWFyeTogPHN0cmluZyAtIGVkaXQgc3VtbWFyeSBmb3Igd2hlbiBhZGRpbmcgYmxvY2sgdGVtcGxhdGUgdG8gdXNlcidzIHRhbGsgcGFnZSwgaWYgbm90IHNldCwgJ3JlYXNvbicgaXMgdXNlZD5cblx0ICogICBzdXBwcmVzc0FydGljbGVJblN1bW1hcnk6IDxzZXQgdG8gc3VwcHJlc3Mgc2hvd2luZyB0aGUgYXJ0aWNsZSBuYW1lIGluIHRoZSBlZGl0IHN1bW1hcnksIGFzIHdpdGggYXR0YWNrIHBhZ2VzPlxuXHQgKiAgIHRlbXBsYXRlTmFtZTogPHN0cmluZyAtIG5hbWUgb2YgdGVtcGxhdGUgdG8gdXNlIChpbnN0ZWFkIG9mIGtleSBuYW1lKSwgZW50cnkgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIFRlbXBsYXRlcyBsaXN0LlxuXHQgKiAgICAgICAgICAgICAgICAgIChlLmcuIHVzZSBhbm90aGVyIHRlbXBsYXRlIGJ1dCB3aXRoIGRpZmZlcmVudCBibG9jayBvcHRpb25zKT5cblx0ICogICB1c2VJbml0aWFsT3B0aW9uczogPHdoZW4gcHJlc2V0IGlzIGNob3Nlbiwgb25seSBjaGFuZ2UgZ2l2ZW4gYmxvY2sgb3B0aW9ucywgbGVhdmUgb3RoZXJzIGFzIHRoZXkgd2VyZT5cblx0ICpcblx0ICogV0FSTklORzogJ2Fub25vbmx5JyBhbmQgJ2FsbG93dXNlcnRhbGsnIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cdCAqICAgVG8gZGlzYWJsZSwgc2V0ICdoYXJkYmxvY2snIGFuZCAnZGlzYWJsZXRhbGsnLCByZXNwZWN0aXZlbHlcblx0ICovXG5cdFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mbyA9IHtcblx0XHQvLyB1dy1wcmVmaXhlZFxuXHRcdCd1dy1ibG9jayc6IHtcblx0XHRcdGF1dG9ibG9jazogdHJ1ZSxcblx0XHRcdGV4cGlyeTogJzEgZGF5Jyxcblx0XHRcdGZvclJlZ2lzdGVyZWRPbmx5OiB0cnVlLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRwYWdlUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb25QYXJhbTogdHJ1ZSxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCa55+lJywgJ+WwgemOlumAmuefpScpLFxuXHRcdFx0c3VwcHJlc3NBcnRpY2xlSW5TdW1tYXJ5OiB0cnVlLFxuXHRcdH0sXG5cdFx0J3V3LWJsb2NraW5kZWYnOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRmb3JSZWdpc3RlcmVkT25seTogdHJ1ZSxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0cGFnZVBhcmFtOiB0cnVlLFxuXHRcdFx0cmVhc29uUGFyYW06IHRydWUsXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpScsICflsIHpjpbpgJrnn6UnKSxcblx0XHRcdHN1cHByZXNzQXJ0aWNsZUluU3VtbWFyeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCd1dy1ibG9ja25vdGFsayc6IHtcblx0XHRcdGRpc2FibGV0YWxrOiB0cnVlLFxuXHRcdFx0cGFnZVBhcmFtOiB0cnVlLFxuXHRcdFx0cmVhc29uUGFyYW06IHRydWUsXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8muemgeatoue8lui+keiuqOiuuumhtScsICflsIHpjpbpgJrnn6XvvJrnpoHmraLnt6jovK/oqI7oq5bpoIEnKSxcblx0XHRcdHN1cHByZXNzQXJ0aWNsZUluU3VtbWFyeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCd1dy0zYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfov53lj41bW0xJQjozUlJ85Zue6YCA5LiN6L+H5LiJ5Y6f5YiZXV0nLCAn6YGV5Y+NW1tMSUI6M1JSfOWbnumAgOS4jemBjuS4ieWOn+WJh11dJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrov53lj41bW0xJQjozUlJ85Zue6YCA5LiN6L+H5LiJ5Y6f5YiZXV0nLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya6YGV5Y+NW1tMSUI6M1JSfOWbnumAgOS4jemBjuS4ieWOn+WJh11dJ1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdCd1dy1hZGJsb2NrJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRwYWdlUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn5pWj5Y+RW1tMSUI6U09BUHzmlaPlj5Hlub/lkYrmiJblrqPkvKBdXScsICfmlaPnmbxbW0xJQjpTT0FQfOaVo+eZvOW7o+WRiuaIluWuo+WCs11dJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrmlaPlj5FbW0xJQjpTT0FQfOaVo+WPkeW5v+WRiuaIluWuo+S8oF1dJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8muaVo+eZvFtbTElCOlNPQVB85pWj55m85buj5ZGK5oiW5a6j5YKzXV0nXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0J3V3LWF0dGFja2Jsb2NrJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnMSBkYXknLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J1tbTElCOkNJVnzooYzkuLrml6DnpLxdXeaIlltbTElCOk5QQXzkurrouqvmlLvlh7tdXScsXG5cdFx0XHRcdCdbW0xJQjpDSVZ86KGM54K654Sh56auXV3miJZbW0xJQjpOUEF85Lq66Lqr5pS75pOKXV0nXG5cdFx0XHQpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77yaW1tMSUI6Q0lWfOihjOS4uuaXoOekvF1d5oiWW1tMSUI6TlBBfOS6uui6q+aUu+WHu11dJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8mltbTElCOkNJVnzooYzngrrnhKHnpq5dXeaIlltbTElCOk5QQXzkurrouqvmlLvmk4pdXSdcblx0XHRcdCksXG5cdFx0fSxcblx0XHQndXctY29weXJpZ2h0YmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu61bW0xJQjpDT1BZVklPfOS+teeKr+iRl+S9nOadg11dJywgJ+aMgee6jFtbTElCOkNPUFlWSU985L6154qv6JGX5L2c5qyKXV0nKSxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+WwgeemgemAmuefpe+8muaMgee7rVtbTElCOkNPUFlWSU985L6154qv6JGX5L2c5p2DXV0nLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5oyB57qMW1tMSUI6Q09QWVZJT3zkvrXniq/okZfkvZzmrIpdXSdcblx0XHRcdCksXG5cdFx0XHR0ZW1wbGF0ZU5hbWU6ICd1dy1ibG9ja2luZGVmJyxcblx0XHR9LFxuXHRcdCd1dy1kYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu61bW0xJQjpWQU585Yig6Zmk5YaF5a65XV0nLCAn5oyB57qMW1tMSUI6VkFOfOWIqumZpOWFp+WuuV1dJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8muaMgee7rVtbTElCOlZBTnzliKDpmaTlhoXlrrldXScsICflsIHpjpbpgJrnn6XvvJrmjIHnuoxbW0xJQjpWQU585Yiq6Zmk5YWn5a65XV0nKSxcblx0XHR9LFxuXHRcdCd1dy1oYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCdbW0xJQjrpqprmibB86aqa5omwXV3lhbbku5bnlKjmiLcnLCAnW1tMSUI66ai35pO+fOmot+aTvl1d5YW25LuW5L2/55So6ICFJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8mltbTElCOumqmuaJsHzpqprmibBdXeWFtuS7lueUqOaItycsICflsIHpjpbpgJrnn6XvvJpbW0xJQjrpqLfmk7586ai35pO+XV3lhbbku5bkvb/nlKjogIUnKSxcblx0XHR9LFxuXHRcdCd1dy12YmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCdbW0xJQjpWQU5856C05Z2PXV0nLCAnW1tMSUI6VkFOfOegtOWjnl1dJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8mltbTElCOlZBTnznoLTlnY9dXScsICflsIHpjpbpgJrnn6XvvJpbW0xJQjpWQU5856C05aOeXV0nKSxcblx0XHR9LFxuXHRcdCd1dy1pbGxlZ2FsYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu63liqDlhaXkuI3nrKblkIjkuK3lm73ku7flgLzop4LnmoTpnZ7ms5XlhoXlrrknLCAn5oyB57qM5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE6Z2e5rOV5YWn5a65JyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrmjIHnu63liqDlhaXkuI3nrKblkIjkuK3lm73ku7flgLzop4LnmoTpnZ7ms5XlhoXlrrknLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5oyB57qM5Yqg5YWl5LiN56ym5ZCI5Lit5ZyL5YO55YC86KeA55qE6Z2e5rOV5YWn5a65J1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdCd1dy1zb2NrYmxvY2snOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIHdlZWsnLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmu6XnlKhbW0xJQjpTT0NLfOWkmuS4qui0puWPt11dJywgJ+a/q+eUqFtbTElCOlNPQ0t85aSa5YCL6LOs6JmfXV0nKSxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCa55+l77ya5rul55SoW1tMSUI6U09DS3zlpJrkuKrotKblj7ddXScsICflsIHpjpbpgJrnn6XvvJrmv6vnlKhbW0xJQjpTT0NLfOWkmuWAi+izrOiZn11dJyksXG5cdFx0XHR0ZW1wbGF0ZU5hbWU6ICd1dy1ibG9jaycsXG5cdFx0fSxcblx0XHQvLyB1dy11LXByZWZpeGVkXG5cdFx0J3V3LXVibG9jayc6IHtcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdGZvclJlZ2lzdGVyZWRPbmx5OiB0cnVlLFxuXHRcdFx0cmVhc29uOiBge3t1dy11YmxvY2t9fTwhLS0gJHt3aW5kb3cud2dVTFMoJ+S4jeW9k+eUqOaIt+WQjeOAgei9r+WwgeemgScsICfkuI3nlbbkvb/nlKjogIXlkI3nqLEnKX0gLS0+YCxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+WwgeemgemAmuefpe+8muaCqOeahOeUqOaIt+WQjei/neWPjVtbTElCOlV855So5oi35ZCN5p2h5L6LXV0nLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5oKo55qE5L2/55So6ICF5ZCN56ix6YGV5Y+NW1tMSUI6VXzkvb/nlKjogIXlkI3nqLHmop3kvotdXSdcblx0XHRcdCksXG5cdFx0fSxcblx0XHQndXctdWJsb2NrLWlsbGVnYWwnOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRmb3JSZWdpc3RlcmVkT25seTogdHJ1ZSxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0cmVhc29uOiBge3t1dy11YmxvY2staWxsZWdhbH19PCEtLSAke3dpbmRvdy53Z1VMUygn5LiN5ZCI6KeE55qE55So5oi35ZCNJywgJ+S4jeWQiOimj+eahOS9v+eUqOiAheWQjeeosScpfSAtLT5gLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77ya5oKo55qE55So5oi35ZCN6L+d5Y+NW1tMSUI6VXznlKjmiLflkI3mnaHkvotdXScsXG5cdFx0XHRcdCflsIHpjpbpgJrnn6XvvJrmgqjnmoTkvb/nlKjogIXlkI3nqLHpgZXlj41bW0xJQjpVfOS9v+eUqOiAheWQjeeoseaineS+i11dJ1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdCd1dy11YmxvY2stc3VnZ2VzdGl2ZSc6IHtcblx0XHRcdGF1dG9ibG9jazogdHJ1ZSxcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdGZvclJlZ2lzdGVyZWRPbmx5OiB0cnVlLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRyZWFzb246IGB7e3V3LXVibG9jay1zdWdnZXN0aXZlfX08IS0tICR7d2luZG93LndnVUxTKCfor6/lr7zjgIHmt7fmt4bmgKfnlKjmiLflkI0nLCAn6Kqk5bCO44CB5re35reG5oCn5L2/55So6ICF5ZCN56ixJyl9IC0tPmAsXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrmgqjnmoTnlKjmiLflkI3ov53lj41bW0xJQjpVfOeUqOaIt+WQjeadoeS+i11dJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8muaCqOeahOS9v+eUqOiAheWQjeeosemBleWPjVtbTElCOlV85L2/55So6ICF5ZCN56ix5qKd5L6LXV0nXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0J3V3LXVibG9jay1zcGFtJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogYHt7dXctdWJsb2NrLXNwYW19fTwhLS0gJHt3aW5kb3cud2dVTFMoJ+Wuo+S8oOaAp+eUqOaIt+WQjeaIluWuo+S8oOaAp+e8lui+kScsICflrqPlgrPmgKfkvb/nlKjogIXlkI3nqLHmiJblrqPlgrPmgKfnt6jovK8nKX0gLS0+YCxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+WwgeemgemAmuefpe+8muaCqOeahOeUqOaIt+WQjei/neWPjVtbTElCOlV855So5oi35ZCN5p2h5L6LXV0nLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5oKo55qE5L2/55So6ICF5ZCN56ix6YGV5Y+NW1tMSUI6VXzkvb/nlKjogIXlkI3nqLHmop3kvotdXSdcblx0XHRcdCksXG5cdFx0fSxcblx0XHQvLyBvdGhlciBibG9jayB0ZW1wbGF0ZXNcblx0XHQncmFuZ2UgYmxvY2snOiB7XG5cdFx0XHRleHBpcnk6ICcxIHdlZWsnLFxuXHRcdFx0cmVhc29uOiAne3tyYW5nZSBibG9ja319Jyxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0bm9uc3RhbmRhcmQ6IHRydWUsXG5cdFx0XHRmb3JBbm9uT25seTogdHJ1ZSxcblx0XHRcdHNpZzogJ35+Jy5jb25jYXQoJ35+JyksXG5cdFx0fSxcblx0XHQnYmxvY2tlZCBwcm94eSc6IHtcblx0XHRcdGV4cGlyeTogJzIgeWVhcnMnLFxuXHRcdFx0Zm9yQW5vbk9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdG5vbnN0YW5kYXJkOiB0cnVlLFxuXHRcdFx0aGFyZGJsb2NrOiB0cnVlLFxuXHRcdFx0cmVhc29uOiAne3tibG9ja2VkIHByb3h5fX0nLFxuXHRcdFx0c2lnOiBudWxsLFxuXHRcdH0sXG5cdFx0Y2hlY2t1c2VyYmxvY2s6IHtcblx0XHRcdGV4cGlyeTogJzEgd2VlaycsXG5cdFx0XHRmb3JBbm9uT25seTogdHJ1ZSxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0bm9uc3RhbmRhcmQ6IHRydWUsXG5cdFx0XHRyZWFzb246ICd7e2NoZWNrdXNlcmJsb2NrfX0nLFxuXHRcdFx0c2lnOiAnfn4nLmNvbmNhdCgnfn4nKSxcblx0XHR9LFxuXHRcdCdjaGVja3VzZXJibG9jay1hY2NvdW50Jzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdG5vbnN0YW5kYXJkOiB0cnVlLFxuXHRcdFx0cmVhc29uOiAne3tjaGVja3VzZXJibG9jay1hY2NvdW50fX0nLFxuXHRcdFx0c2lnOiAnfn4nLmNvbmNhdCgnfn4nKSxcblx0XHR9LFxuXHRcdCdzY2hvb2wgYmxvY2snOiB7XG5cdFx0XHRleHBpcnk6ICcxIHdlZWsnLFxuXHRcdFx0Zm9yQW5vbk9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdG5vbnN0YW5kYXJkOiB0cnVlLFxuXHRcdFx0cmVhc29uOiAne3tzY2hvb2wgYmxvY2t9fScsXG5cdFx0XHRzaWc6ICd+ficuY29uY2F0KCd+ficpLFxuXHRcdH0sXG5cdFx0J0JvdCBibG9jayBtZXNzYWdlJzoge1xuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn5py65Zmo5Lq65pWF6ZqcJywgJ+apn+WZqOS6uuaVhemanCcpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCflsIHnpoHpgJrnn6XvvJrmnLrlmajkurrmlYXpmpwnLCAn5bCB6Y6W6YCa55+l77ya5qmf5Zmo5Lq65pWF6ZqcJyksXG5cdFx0XHRzaWc6ICd+ficuY29uY2F0KCd+ficpLFxuXHRcdH0sXG5cdFx0Ly8gb3RoZXIgYmxvY2sgcmVhc29uc1xuXHRcdGJpb2Jsb2NrOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfov53lj43nlJ/ogIXkvKDorrDmnaHkvosnLCAn6YGV5Y+N55Sf6ICF5YKz6KiY5qKd5L6LJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8mui/neWPjeeUn+iAheS8oOiusOadoeS+iycsICflsIHpjpbpgJrnn6XvvJrpgZXlj43nlJ/ogIXlgrPoqJjmop3kvosnKSxcblx0XHRcdHRlbXBsYXRlTmFtZTogJ3V3LXZibG9jaycsXG5cdFx0fSxcblx0XHR1Y2Jsb2NrOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICcxIGRheScsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHBhZ2VQYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCflsaHmrKHlop7liqDmsqHmnIlbW0xJQjpSU3zlj6/pnaDmnaXmupBdXeeahOi1hOaWmScsICflsaLmrKHlop7liqDmspLmnIlbW0xJQjpSU3zlj6/pnaDkvobmupBdXeeahOizh+aWmScpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77ya5bGh5qyh5aKe5Yqg5rKh5pyJW1tMSUI6UlN85Y+v6Z2g5p2l5rqQXV3nmoTotYTmlpknLFxuXHRcdFx0XHQn5bCB6Y6W6YCa55+l77ya5bGi5qyh5aKe5Yqg5rKS5pyJW1tMSUI6UlN85Y+v6Z2g5L6G5rqQXV3nmoTos4fmlpknXG5cdFx0XHQpLFxuXHRcdFx0dGVtcGxhdGVOYW1lOiAndXctYmxvY2snLFxuXHRcdH0sXG5cdFx0bnBibG9jazoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnMSBkYXknLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRwYWdlUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn5Zyo5p2h55uu5Lit5aKe5Yqg5peg5oSP5LmJ5paH5a2XJywgJ+WcqOaineebruS4reWinuWKoOeEoeaEj+e+qeaWh+WtlycpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKCflsIHnpoHpgJrnn6XvvJrlnKjmnaHnm67kuK3lop7liqDml6DmhI/kuYnmloflrZcnLCAn5bCB6Y6W6YCa55+l77ya5Zyo5qKd55uu5Lit5aKe5Yqg54Sh5oSP576p5paH5a2XJyksXG5cdFx0XHR0ZW1wbGF0ZU5hbWU6ICd1dy12YmxvY2snLFxuXHRcdH0sXG5cdFx0J3BvaW50LWJsb2NrJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnMSBkYXknLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRwYWdlUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb25QYXJhbTogdHJ1ZSxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu63miZPliLbluqbmk6bovrnnkIMnLCAn5oyB57qM5omT5Yi25bqm5pOm6YKK55CDJyksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoJ+WwgeemgemAmuefpe+8muaMgee7reaJk+WItuW6puaTpui+ueeQgycsICflsIHpjpbpgJrnn6XvvJrmjIHnuozmiZPliLbluqbmk6bpgornkIMnKSxcblx0XHRcdHRlbXBsYXRlTmFtZTogJ3V3LWJsb2NrJyxcblx0XHR9LFxuXHRcdCdzb2NrLWNvbnRyaWJzJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRub2NyZWF0ZTogdHJ1ZSxcblx0XHRcdHJlYXNvblBhcmFtOiB0cnVlLFxuXHRcdFx0cmVhc29uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfnoa7orqTkuLpbW0xJQjpTT0NLfOWCgOWEoV1d5oiW55yf5Lq65YKA5YShIC0g5qC55o2u55So5oi36LSh54yu56Gu5a6aJyxcblx0XHRcdFx0J+eiuuiqjeeCultbTElCOlNPQ0t85YKA5YShXV3miJbnnJ/kurrlgoDlhKEgLSDmoLnmk5rkvb/nlKjogIXosqLnjbvnorrlrponXG5cdFx0XHQpLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77ya56Gu6K6k5Li6W1tMSUI6U09DS3zlgoDlhKFdXeaIluecn+S6uuWCgOWEoScsXG5cdFx0XHRcdCflsIHpjpbpgJrnn6XvvJrnorroqo3ngrpbW0xJQjpTT0NLfOWCgOWEoV1d5oiW55yf5Lq65YKA5YShJ1xuXHRcdFx0KSxcblx0XHRcdHRlbXBsYXRlTmFtZTogJ3V3LWJsb2NraW5kZWYnLFxuXHRcdH0sXG5cdFx0J3NvY2stY3UnOiB7XG5cdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRmb3JSZWdpc3RlcmVkT25seTogdHJ1ZSxcblx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0cmVhc29uUGFyYW06IHRydWUsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+ehruiupOS4ultbTElCOlNPQ0t85YKA5YShXV3miJbnnJ/kurrlgoDlhKEgLSDnlKjmiLfmn6XmoLjnoa7orqQnLFxuXHRcdFx0XHQn56K66KqN54K6W1tMSUI6U09DS3zlgoDlhKFdXeaIluecn+S6uuWCgOWEoSAtIOS9v+eUqOiAheafpeaguOeiuuiqjSdcblx0XHRcdCksXG5cdFx0XHRzdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCflsIHnpoHpgJrnn6XvvJrnoa7orqTkuLpbW0xJQjpTT0NLfOWCgOWEoV1d5oiW55yf5Lq65YKA5YShJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8mueiuuiqjeeCultbTElCOlNPQ0t85YKA5YShXV3miJbnnJ/kurrlgoDlhKEnXG5cdFx0XHQpLFxuXHRcdFx0dGVtcGxhdGVOYW1lOiAndXctYmxvY2tpbmRlZicsXG5cdFx0fSxcblx0XHQndXctdWJsb2NrLWF0dGFjayc6IHtcblx0XHRcdGF1dG9ibG9jazogdHJ1ZSxcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdGZvclJlZ2lzdGVyZWRPbmx5OiB0cnVlLFxuXHRcdFx0bm9jcmVhdGU6IHRydWUsXG5cdFx0XHRyZWFzb246IGB7e3V3LXVibG9jay1hdHRhY2t9fTwhLS0gJHt3aW5kb3cud2dVTFMoJ+aUu+WHu+aAp+eUqOaIt+WQjScsICfmlLvmk4rmgKfkvb/nlKjogIXlkI3nqLEnKX0gLS0+YCxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUygn5bCB56aB6YCa55+l77ya5pS75Ye75oCn55So5oi35ZCNJywgJ+WwgemOlumAmuefpe+8muaUu+aTiuaAp+S9v+eUqOiAheWQjeeosScpLFxuXHRcdH0sXG5cdFx0Ly8gQmVnaW4gcGFydGlhbCBibG9jayB0ZW1wbGF0ZXMsIGFjY2Vzc2VkIGluIFR3aW5rbGUuYmxvY2suYmxvY2tHcm91cHNQYXJ0aWFsXG5cdFx0J3V3LXBibG9jayc6IHtcblx0XHRcdGF1dG9ibG9jazogdHJ1ZSxcblx0XHRcdGV4cGlyeTogJzEgZGF5Jyxcblx0XHRcdG5vY3JlYXRlOiBmYWxzZSxcblx0XHRcdHBhZ2VQYXJhbTogZmFsc2UsXG5cdFx0XHRyZWFzb25QYXJhbTogdHJ1ZSxcblx0XHRcdHN1bW1hcnk6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+WwgeemgemAmuefpe+8muaCqOW3suiiq+emgeatoue8lui+keacieWFveaho+ahiOmmhueahOmDqOWIhuWMuuWfnycsXG5cdFx0XHRcdCflsIHpjpbpgJrnn6XvvJrmgqjlt7LooqvnpoHmraLnt6jovK/mnInnjbjmqpTmoYjppKjnmoTpg6jliIbljYDln58nXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0J3V3LXBibG9ja2luZGVmJzoge1xuXHRcdFx0YXV0b2Jsb2NrOiB0cnVlLFxuXHRcdFx0ZXhwaXJ5OiAnaW5maW5pdHknLFxuXHRcdFx0bm9jcmVhdGU6IGZhbHNlLFxuXHRcdFx0cGFnZVBhcmFtOiBmYWxzZSxcblx0XHRcdHJlYXNvblBhcmFtOiB0cnVlLFxuXHRcdFx0c3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5bCB56aB6YCa55+l77ya5oKo5bey6KKr5rC45LmF56aB5q2i57yW6L6R5pyJ5YW95qGj5qGI6aaG55qE6YOo5YiG5Yy65Z+fJyxcblx0XHRcdFx0J+WwgemOlumAmuefpe+8muaCqOW3suiiq+awuOS5heemgeatoue3qOi8r+acieeNuOaqlOahiOmkqOeahOmDqOWIhuWNgOWfnydcblx0XHRcdCksXG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS5ibG9jay50cmFuc2Zvcm1CbG9ja1ByZXNldHMgPSAoKSA9PiB7XG5cdFx0Ly8gTWVyZ2UgY3VzdG9tIHJlYXNvblxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBUd2lua2xlLmdldFByZWYoJ2N1c3RvbUJsb2NrUmVhc29uTGlzdCcpKSB7XG5cdFx0XHRjb25zdCBuZXdLZXkgPSBgJHtpdGVtLnZhbHVlfXwke2l0ZW0ubGFiZWx9YDtcblx0XHRcdFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mb1tuZXdLZXldID0ge1xuXHRcdFx0XHRhdXRvYmxvY2s6IHRydWUsXG5cdFx0XHRcdG5vY3JlYXRlOiB0cnVlLFxuXHRcdFx0XHQuLi5Ud2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9baXRlbS52YWx1ZV0sXG5cdFx0XHRcdHJlYXNvbjogaXRlbS5sYWJlbCxcblx0XHRcdFx0dGVtcGxhdGVOYW1lOiBpdGVtLnZhbHVlLFxuXHRcdFx0fTtcblx0XHRcdGlmIChUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9baXRlbS52YWx1ZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9baXRlbS52YWx1ZV0gPSB7XG5cdFx0XHRcdFx0cGFnZVBhcmFtOiB0cnVlLFxuXHRcdFx0XHRcdHJlYXNvblBhcmFtOiB0cnVlLFxuXHRcdFx0XHRcdGN1c3RvbTogdHJ1ZSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gc3VwcGx5IHNlbnNpYmxlIGRlZmF1bHRzXG5cdFx0Zm9yIChjb25zdCBbcHJlc2V0LCBzZXR0aW5nc10gb2YgT2JqZWN0LmVudHJpZXMoVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvKSkge1xuXHRcdFx0c2V0dGluZ3Muc3VtbWFyeSB8fD0gc2V0dGluZ3MucmVhc29uO1xuXHRcdFx0c2V0dGluZ3Muc2lnID0gc2V0dGluZ3Muc2lnID09PSB1bmRlZmluZWQgPyAneWVzJyA6IHNldHRpbmdzLnNpZztcblx0XHRcdHNldHRpbmdzLmluZGVmaW5pdGUgfHw9IE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHNldHRpbmdzLmV4cGlyeSk7XG5cdFx0XHRpZiAoIVR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkICYmIHNldHRpbmdzLmluZGVmaW5pdGUpIHtcblx0XHRcdFx0c2V0dGluZ3MuZXhwaXJ5ID0gJzEgZGF5Jztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNldHRpbmdzLmV4cGlyeSB8fD0gJzEgZGF5Jztcblx0XHRcdH1cblx0XHRcdFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mb1twcmVzZXRdID0gc2V0dGluZ3M7XG5cdFx0fVxuXHR9O1xuXHQvLyBUaGVzZSBhcmUgdGhlIGdyb3VwcyBvZiBwcmVzZXRzIGFuZCBkZWZpbmVzIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhci4gRm9yIGVhY2ggbGlzdCBpdGVtOlxuXHQvLyAgIGxhYmVsOiA8c3RyaW5nLCB0aGUgZGVzY3JpcHRpb24gdGhhdCB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGRyb3Bkb3duPlxuXHQvLyAgIHZhbHVlOiA8c3RyaW5nLCB0aGUga2V5IG9mIGEgcHJlc2V0IGluIGJsb2NrUHJlc2V0c0luZm8+XG5cdC8vICAgbWV0YTogPGJvb2xlYW4sIHNob3cgaW4gdGVtcGxhdGVzIG9ubHk+XG5cdFR3aW5rbGUuYmxvY2suYmxvY2tHcm91cHMgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pmu6YCa5bCB56aBJywgJ+aZrumAmuWwgemOlicpLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCa55So5bCB56aB77yI6Ieq5a6a5LmJ55CG55Sx77yJJywgJ+mAmueUqOWwgemOlu+8iOiHquiogueQhueUse+8iScpLCB2YWx1ZTogJ3V3LWJsb2NrJ30sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml6DpmZDmnJ/lsIHnpoHvvIjoh6rlrprkuYnnkIbnlLHvvIknLCAn54Sh6ZmQ5pyf5bCB6Y6W77yI6Ieq6KiC55CG55Sx77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd1dy1ibG9ja2luZGVmJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+emgeatoue8lui+keiuqOiuuumhtScsICfnpoHmraLnt6jovK/oqI7oq5bpoIEnKSwgdmFsdWU6ICd1dy1ibG9ja25vdGFsaycsIG1ldGE6IHRydWV9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N5Zue6YCA5LiN6L+H5LiJ5Y6f5YiZJywgJ+mBleWPjeWbnumAgOS4jemBjuS4ieWOn+WJhycpLCB2YWx1ZTogJ3V3LTNibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn5pWj5Y+R5bm/5ZGK5oiW5a6j5LygJywgJ+aVo+eZvOW7o+WRiuaIluWuo+WCsycpLCB2YWx1ZTogJ3V3LWFkYmxvY2snfSxcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+ihjOS4uuaXoOekvOaIluS6uui6q+aUu+WHuycsICfooYzngrrnhKHnpq7miJbkurrouqvmlLvmk4onKSwgdmFsdWU6ICd1dy1hdHRhY2tibG9jayd9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5aSa5qyh5Yqg5YWl5L6154qv6JGX5L2c5p2D55qE5YaF5a65JywgJ+WkmuasoeWKoOWFpeS+teeKr+iRl+S9nOasiueahOWFp+WuuScpLFxuXHRcdFx0XHRcdHZhbHVlOiAndXctY29weXJpZ2h0YmxvY2snLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn5peg5pWF5Yig6Zmk5YaF5a65JywgJ+eEoeaVheWIqumZpOWFp+WuuScpLCB2YWx1ZTogJ3V3LWRibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn6aqa5omw55So5oi3JywgJ+mot+aTvuS9v+eUqOiAhScpLCB2YWx1ZTogJ3V3LWhibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn56C05Z2PJywgJ+egtOWjnicpLCB2YWx1ZTogJ3V3LXZibG9jaycsIHNlbGVjdGVkOiB0cnVlfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aMgee7reWKoOWFpeS4jeespuWQiOS4reWbveS7t+WAvOingueahOmdnuazleWGheWuuScsICfmjIHnuozliqDlhaXkuI3nrKblkIjkuK3lnIvlg7nlgLzop4DnmoTpnZ7ms5XlhaflrrknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3V3LWlsbGVnYWxibG9jaycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtsYWJlbDogd2luZG93LndnVUxTKCfmu6XnlKjlpJrkuKrotKblj7cnLCAn5r+r55So5aSa5YCL6LOs6JmfJyksIHZhbHVlOiAndXctc29ja2Jsb2NrJ30sXG5cdFx0XHRcdC8vIG90aGVyIGJsb2NrIHJlYXNvbnNcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+i/neWPjeeUn+iAheS8oOiusOadoeS+iycsICfpgZXlj43nlJ/ogIXlgrPoqJjmop3kvosnKSwgdmFsdWU6ICdiaW9ibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn5bGh5qyh5aKe5Yqg5rKh5pyJ5Y+v6Z2g5p2l5rqQ55qE6LWE5paZJywgJ+WxouasoeWinuWKoOaykuacieWPr+mdoOS+hua6kOeahOizh+aWmScpLCB2YWx1ZTogJ3VjYmxvY2snfSxcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOadoeebruS4reWinuWKoOaXoOaEj+S5ieaWh+WtlycsICflnKjmop3nm67kuK3lop7liqDnhKHmhI/nvqnmloflrZcnKSwgdmFsdWU6ICducGJsb2NrJ30sXG5cdFx0XHRcdHtsYWJlbDogd2luZG93LndnVUxTKCfmjIHnu63miZPliLbluqbmk6bovrnnkIMnLCAn5oyB57qM5omT5Yi25bqm5pOm6YKK55CDJyksIHZhbHVlOiAncG9pbnQtYmxvY2snfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn56Gu6K6k5Li65YKA5YSh5oiW55yf5Lq65YKA5YSh77yI5qC55o2u55So5oi36LSh54yu56Gu5a6a77yJJyxcblx0XHRcdFx0XHRcdCfnorroqo3ngrrlgoDlhKHmiJbnnJ/kurrlgoDlhKHvvIjmoLnmk5rkvb/nlKjogIXosqLnjbvnorrlrprvvIknXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR2YWx1ZTogJ3NvY2stY29udHJpYnMnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfnoa7orqTkuLrlgoDlhKHmiJbnnJ/kurrlgoDlhKHvvIjnlKjmiLfmn6XmoLjnoa7orqTvvIknLFxuXHRcdFx0XHRcdFx0J+eiuuiqjeeCuuWCgOWEoeaIluecn+S6uuWCgOWEoe+8iOS9v+eUqOiAheafpeaguOeiuuiqje+8iSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHZhbHVlOiAnc29jay1jdScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmnLrlmajkurrlj5HnlJ/mlYXpmpzlubblv4XpobvntKfmgKXlgZzmraInLCAn5qmf5Zmo5Lq655m855Sf5pWF6Zqc5Lim5b+F6aCI57eK5oCl5YGc5q2iJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdCb3QgYmxvY2sgbWVzc2FnZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Y3VzdG9tOiB0cnVlLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ5bCB56aB55CG55SxJywgJ+iHquioguWwgemOlueQhueUsScpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35ZCN5bCB56aBJywgJ+S9v+eUqOiAheWQjeeoseWwgemOlicpLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N55So5oi35ZCN5p2h5L6LJywgJ+mBleWPjeS9v+eUqOiAheWQjeeoseaineS+iycpLCB2YWx1ZTogJ3V3LXVibG9jayd9LFxuXHRcdFx0XHR7bGFiZWw6IHdpbmRvdy53Z1VMUygn5LiN5ZCI6KeE55qE55So5oi35ZCNJywgJ+S4jeWQiOimj+eahOS9v+eUqOiAheWQjeeosScpLCB2YWx1ZTogJ3V3LXVibG9jay1pbGxlZ2FsJ30sXG5cdFx0XHRcdHtsYWJlbDogd2luZG93LndnVUxTKCflrqPkvKDmgKfnlKjmiLflkI0nLCAn5a6j5YKz5oCn5L2/55So6ICF5ZCN56ixJyksIHZhbHVlOiAndXctdWJsb2NrLXNwYW0nfSxcblx0XHRcdFx0e2xhYmVsOiB3aW5kb3cud2dVTFMoJ+aUu+WHu+aAp+eUqOaIt+WQjScsICfmlLvmk4rmgKfkvb/nlKjogIXlkI3nqLEnKSwgdmFsdWU6ICd1dy11YmxvY2stYXR0YWNrJ30sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmt7fmt4bmgKfmiJbor6/lr7zmgKfnlKjmiLflkI0nLCAn5re35reG5oCn5oiW6Kqk5bCO5oCn5L2/55So6ICF5ZCN56ixJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd1dy11YmxvY2stc3VnZ2VzdGl2ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICflhbbku5bmqKHmnb8nLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7bGFiZWw6ICdyYW5nZSBibG9jaycsIHZhbHVlOiAncmFuZ2UgYmxvY2snLCBmb3JBbm9uT25seTogdHJ1ZX0sXG5cdFx0XHRcdHtsYWJlbDogJ3NjaG9vbCBibG9jaycsIHZhbHVlOiAnc2Nob29sIGJsb2NrJywgZm9yQW5vbk9ubHk6IHRydWV9LFxuXHRcdFx0XHR7bGFiZWw6ICdibG9ja2VkIHByb3h5JywgdmFsdWU6ICdibG9ja2VkIHByb3h5JywgZm9yQW5vbk9ubHk6IHRydWV9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35p+l5qC45bCB56aB77yI5Li755So5oi377yJJywgJ+S9v+eUqOiAheafpeaguOWwgemOlu+8iOS4u+S9v+eUqOiAhe+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnY2hlY2t1c2VyYmxvY2snLFxuXHRcdFx0XHRcdGZvckFub25Pbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi35p+l5qC45bCB56aB77yI5a2Q55So5oi377yJJywgJ+S9v+eUqOiAheafpeaguOWwgemOlu+8iOWtkOS9v+eUqOiAhe+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnY2hlY2t1c2VyYmxvY2stYWNjb3VudCcsXG5cdFx0XHRcdFx0Zm9yUmVnaXN0ZXJlZE9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuYmxvY2suYmxvY2tHcm91cHNQYXJ0aWFsID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W4uOingemDqOWIhuWwgeemgeeQhueUsScsICfluLjopovpg6jliIblsIHpjpbnkIbnlLEnKSxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mAmueUqOmDqOWIhuWwgeemge+8iOiHquWumuS5ieeQhueUse+8iScsICfpgJrnlKjpg6jliIblsIHpjpbvvIjoh6roqILnkIbnlLHvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3V3LXBibG9jaycsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml6DpmZDmnJ/pg6jliIblsIHnpoHvvIjoh6rlrprkuYnnkIbnlLHvvIknLCAn54Sh6ZmQ5pyf6YOo5YiG5bCB6Y6W77yI6Ieq6KiC55CG55Sx77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICd1dy1wYmxvY2tpbmRlZicsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suZmlsdGVyZWRfYmxvY2tfZ3JvdXBzID0gKGdyb3VwLCBzaG93X3RlbXBsYXRlKSA9PiB7XG5cdFx0cmV0dXJuICQubWFwKGdyb3VwLCAoYmxvY2tHcm91cCkgPT4ge1xuXHRcdFx0Ly8gQWRkIGN1c3RvbSByZWFzb25cblx0XHRcdGlmIChibG9ja0dyb3VwLmN1c3RvbSkge1xuXHRcdFx0XHRpZiAoc2hvd190ZW1wbGF0ZSkge1xuXHRcdFx0XHRcdGxldCB0ZW1wbGF0ZXMgPSAkLm1hcChUd2lua2xlLmdldFByZWYoJ2N1c3RvbUJsb2NrUmVhc29uTGlzdCcpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mb1tpdGVtLnZhbHVlXS5jdXN0b20pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGVtcGxhdGVzID0gTW9yZWJpdHMuYXJyYXkudW5pcSh0ZW1wbGF0ZXMpO1xuXHRcdFx0XHRcdGJsb2NrR3JvdXAubGlzdCA9ICQubWFwKHRlbXBsYXRlcywgKHRlbXBsYXRlKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnmqKHmnb8nLCAn6Ieq6KiC5qih5p2/JyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB0ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YmxvY2tHcm91cC5saXN0ID0gJC5tYXAoVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21CbG9ja1JlYXNvbkxpc3QnKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBpdGVtLmxhYmVsLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogYCR7aXRlbS52YWx1ZX18JHtpdGVtLmxhYmVsfWAsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBsaXN0ID0gJC5tYXAoYmxvY2tHcm91cC5saXN0LCAoYmxvY2tQcmVzZXQpID0+IHtcblx0XHRcdFx0aWYgKCFzaG93X3RlbXBsYXRlICYmIGJsb2NrUHJlc2V0Lm1ldGEpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChibG9ja1ByZXNldC52YWx1ZSkge1xuXHRcdFx0XHRcdGNhc2UgJ3JhbmdlIGJsb2NrJzpcblx0XHRcdFx0XHRcdGlmICghTW9yZWJpdHMuaXAuaXNSYW5nZShyZWxldmFudFVzZXJOYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRibG9ja1ByZXNldC5zZWxlY3RlZCA9ICFNb3JlYml0cy5pcC5nZXQ2NChyZWxldmFudFVzZXJOYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBibG9ja1NldHRpbmdzID0gVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvW2Jsb2NrUHJlc2V0LnZhbHVlXTtcblx0XHRcdFx0bGV0IHJlZ2lzdHJhdGlvblJlc3RyaWN0O1xuXHRcdFx0XHRpZiAoYmxvY2tTZXR0aW5ncy5mb3JSZWdpc3RlcmVkT25seSkge1xuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvblJlc3RyaWN0ID0gVHdpbmtsZS5ibG9jay5pc1JlZ2lzdGVyZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tTZXR0aW5ncy5mb3JBbm9uT25seSkge1xuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvblJlc3RyaWN0ID0gIVR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlZ2lzdHJhdGlvblJlc3RyaWN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIShibG9ja1NldHRpbmdzLnRlbXBsYXRlTmFtZSAmJiBzaG93X3RlbXBsYXRlKSAmJiByZWdpc3RyYXRpb25SZXN0cmljdCkge1xuXHRcdFx0XHRcdGNvbnN0IHRlbXBsYXRlTmFtZSA9IGJsb2NrU2V0dGluZ3MudGVtcGxhdGVOYW1lIHx8IGJsb2NrUHJlc2V0LnZhbHVlO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRsYWJlbDogKHNob3dfdGVtcGxhdGUgPyBge3ske3RlbXBsYXRlTmFtZX19fTogYCA6ICcnKSArIGJsb2NrUHJlc2V0LmxhYmVsLFxuXHRcdFx0XHRcdFx0dmFsdWU6IGJsb2NrUHJlc2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0ZGF0YTogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ3RlbXBsYXRlLW5hbWUnLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB0ZW1wbGF0ZU5hbWUsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ6ICEhYmxvY2tQcmVzZXQuc2VsZWN0ZWQsXG5cdFx0XHRcdFx0XHRkaXNhYmxlZDogISFibG9ja1ByZXNldC5kaXNhYmxlZCxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmIChsaXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGxhYmVsOiBibG9ja0dyb3VwLmxhYmVsLFxuXHRcdFx0XHRcdGxpc3QsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suY2hhbmdlX3ByZXNldCA9IChlKSA9PiB7XG5cdFx0Y29uc3Qge2Zvcm19ID0gZS50YXJnZXQ7XG5cdFx0Y29uc3Qga2V5ID0gZm9ybS5wcmVzZXQudmFsdWU7XG5cdFx0aWYgKCFrZXkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay51cGRhdGVfZm9ybShlLCBUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9ba2V5XSk7XG5cdFx0aWYgKGZvcm0udGVtcGxhdGUpIHtcblx0XHRcdGZvcm0udGVtcGxhdGUudmFsdWUgPSBUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9ba2V5XS50ZW1wbGF0ZU5hbWUgfHwga2V5O1xuXHRcdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5jaGFuZ2VfdGVtcGxhdGUoZSk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNoYW5nZV9leHBpcnkgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHtleHBpcnl9ID0gZS50YXJnZXQuZm9ybTtcblx0XHRpZiAoZS50YXJnZXQudmFsdWUgPT09ICdjdXN0b20nKSB7XG5cdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoZXhwaXJ5LnBhcmVudE5vZGUsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoZXhwaXJ5LnBhcmVudE5vZGUsIGZhbHNlKTtcblx0XHRcdGV4cGlyeS52YWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5zZWVBbHNvcyA9IFtdO1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLnRvZ2dsZV9zZWVfYWxzb3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Y29uc3QgcmVhc29uID0gdGhpcy5mb3JtLnJlYXNvbi52YWx1ZS5yZXBsYWNlKFxuXHRcdFx0bmV3IFJlZ0V4cChgKDwhLS0gKSjlj4Lop4F85Y+D6KaLKSR7VHdpbmtsZS5ibG9jay5zZWVBbHNvcy5qb2luKCfjgIEnKX0oIC0tPilgKSxcblx0XHRcdCcnXG5cdFx0KTtcblx0XHRUd2lua2xlLmJsb2NrLnNlZUFsc29zID0gVHdpbmtsZS5ibG9jay5zZWVBbHNvcy5maWx0ZXIoKGVsKSA9PiB7XG5cdFx0XHRyZXR1cm4gZWwgIT09IHRoaXMudmFsdWU7XG5cdFx0fSk7XG5cdFx0aWYgKHRoaXMuY2hlY2tlZCkge1xuXHRcdFx0VHdpbmtsZS5ibG9jay5zZWVBbHNvcy5wdXNoKHRoaXMudmFsdWUpO1xuXHRcdH1cblx0XHRjb25zdCBzZWVBbHNvTWVzc2FnZSA9IFR3aW5rbGUuYmxvY2suc2VlQWxzb3Muam9pbign44CBJyk7XG5cdFx0aWYgKFR3aW5rbGUuYmxvY2suc2VlQWxzb3MubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmZvcm0ucmVhc29uLnZhbHVlID0gYCR7cmVhc29ufTwhLS0gJHt3aW5kb3cud2dVTFMoJ+WPguingScsICflj4PoposnKX0ke3NlZUFsc29NZXNzYWdlfSAtLT5gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvcm0ucmVhc29uLnZhbHVlID0gcmVhc29uO1xuXHRcdH1cblx0fTtcblx0Ly8gTm8gZHNcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay51cGRhdGVfZm9ybSA9IChlLCBkYXRhKSA9PiB7XG5cdFx0Y29uc3Qge2Zvcm19ID0gZS50YXJnZXQ7XG5cdFx0bGV0IHtleHBpcnl9ID0gZGF0YTtcblx0XHQvLyBkb24ndCBvdmVycmlkZSBvcmlnaW5hbCBleHBpcnkgaWYgdXNlSW5pdGlhbE9wdGlvbnMgaXMgc2V0XG5cdFx0aWYgKCFkYXRhLnVzZUluaXRpYWxPcHRpb25zKSB7XG5cdFx0XHRpZiAoRGF0ZS5wYXJzZShleHBpcnkpKSB7XG5cdFx0XHRcdGV4cGlyeSA9IG5ldyBEYXRlKGV4cGlyeSkudG9HTVRTdHJpbmcoKTtcblx0XHRcdFx0Zm9ybS5leHBpcnlfcHJlc2V0LnZhbHVlID0gJ2N1c3RvbSc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtLmV4cGlyeV9wcmVzZXQudmFsdWUgPSBkYXRhLmV4cGlyeSB8fCAnY3VzdG9tJztcblx0XHRcdH1cblx0XHRcdGZvcm0uZXhwaXJ5LnZhbHVlID0gZXhwaXJ5O1xuXHRcdFx0aWYgKGZvcm0uZXhwaXJ5X3ByZXNldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0uZXhwaXJ5LnBhcmVudE5vZGUsIHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0uZXhwaXJ5LnBhcmVudE5vZGUsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYm9vbGVhbi1mbGlwcGVkIG9wdGlvbnMsIG1vcmUgYXQgW1ttdzpBUEk6QmxvY2tdXVxuXHRcdGRhdGEuZGlzYWJsZXRhbGsgPSBkYXRhLmRpc2FibGV0YWxrID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGRhdGEuZGlzYWJsZXRhbGs7XG5cdFx0ZGF0YS5oYXJkYmxvY2sgPSBkYXRhLmhhcmRibG9jayA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBkYXRhLmhhcmRibG9jaztcblx0XHQvLyBkaXNhYmxlIGF1dG9ibG9jayBpZiBibG9ja2luZyBhIGJvdFxuXHRcdGlmIChUd2lua2xlLmJsb2NrLnVzZXJJc0JvdCB8fCAvYm90XFxiL2kudGVzdChyZWxldmFudFVzZXJOYW1lKSkge1xuXHRcdFx0ZGF0YS5hdXRvYmxvY2sgPSBmYWxzZTtcblx0XHR9XG5cdFx0JChmb3JtKVxuXHRcdFx0LmZpbmQoJ1tuYW1lPWZpZWxkX2Jsb2NrX29wdGlvbnNdJylcblx0XHRcdC5maW5kKCc6Y2hlY2tib3gnKVxuXHRcdFx0LmVhY2goKF9pLCBlbCkgPT4ge1xuXHRcdFx0XHQvLyBkb24ndCBvdmVycmlkZSBvcmlnaW5hbCBvcHRpb25zIGlmIHVzZUluaXRpYWxPcHRpb25zIGlzIHNldFxuXHRcdFx0XHRpZiAoZGF0YS51c2VJbml0aWFsT3B0aW9ucyAmJiBkYXRhW2VsLm5hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGVsLm5hbWUgPT09ICdjbG9zZXZpcCcpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY2hlY2sgPSBkYXRhW2VsLm5hbWVdID09PSAnJyB8fCAhIWRhdGFbZWwubmFtZV07XG5cdFx0XHRcdCQoZWwpLnByb3AoJ2NoZWNrZWQnLCBjaGVjayk7XG5cdFx0XHR9KTtcblx0XHRpZiAoZGF0YS5wcmVwZW5kUmVhc29uICYmIGRhdGEucmVhc29uKSB7XG5cdFx0XHRmb3JtLnJlYXNvbi52YWx1ZSA9IGAke2RhdGEucmVhc29ufe+8myR7Zm9ybS5yZWFzb24udmFsdWV9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9ybS5yZWFzb24udmFsdWUgPSBkYXRhLnJlYXNvbiB8fCAnJztcblx0XHR9XG5cdFx0Ly8gQ2xlYXIgYW5kL29yIHNldCBhbnkgcGFydGlhbCBwYWdlIG9yIG5hbWVzcGFjZSByZXN0cmljdGlvbnNcblx0XHRpZiAoZm9ybS5wYWdlcmVzdHJpY3Rpb25zKSB7XG5cdFx0XHRjb25zdCAkcGFnZVNlbGVjdCA9ICQoZm9ybSkuZmluZCgnW25hbWU9cGFnZXJlc3RyaWN0aW9uc10nKTtcblx0XHRcdGNvbnN0ICRuYW1lc3BhY2VTZWxlY3QgPSAkKGZvcm0pLmZpbmQoJ1tuYW1lPW5hbWVzcGFjZXJlc3RyaWN0aW9uc10nKTtcblx0XHRcdC8vIFJlc3BlY3QgdXNlSW5pdGlhbE9wdGlvbnMgYnkgY2xlYXJpbmcgZGF0YSB3aGVuIHN3aXRjaGluZyBwcmVzZXRzXG5cdFx0XHQvLyBJbiBwcmFjdGljZSwgdGhpcyB3aWxsIGFsd2F5cyBjbGVhciwgc2luY2Ugbm8gcGFydGlhbCBwcmVzZXRzIHVzZSBpdFxuXHRcdFx0aWYgKCFkYXRhLnVzZUluaXRpYWxPcHRpb25zKSB7XG5cdFx0XHRcdCRwYWdlU2VsZWN0LnZhbChudWxsKS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0JG5hbWVzcGFjZVNlbGVjdC52YWwobnVsbCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBBZGQgYW55IHByZXNldCBvcHRpb25zOyBpbiBwcmFjdGljZSwganVzdCB1c2VkIGZvciBwcmlvciBibG9jayBzZXR0aW5nc1xuXHRcdFx0aWYgKGRhdGEucmVzdHJpY3Rpb25zKSB7XG5cdFx0XHRcdGlmIChkYXRhLnJlc3RyaWN0aW9ucy5wYWdlcyAmJiAhJHBhZ2VTZWxlY3QudmFsKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFnZXMgPSBkYXRhLnJlc3RyaWN0aW9ucy5wYWdlcy5tYXAoKHByKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcHIudGl0bGU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gc2luY2UgcGFnZSByZXN0cmljdGlvbnMgdXNlIGFuIGFqYXggc291cmNlLCB3ZVxuXHRcdFx0XHRcdC8vIHNob3J0LWNpcmN1aXQgdGhhdCBhbmQganVzdCBhZGQgYSBuZXcgb3B0aW9uXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSB7XG5cdFx0XHRcdFx0XHRpZiAoISRwYWdlU2VsZWN0LmZpbmQoYG9wdGlvblt2YWx1ZT0nJHskLmVzY2FwZVNlbGVjdG9yKHBhZ2UpfSddYCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld09wdGlvbiA9IG5ldyBPcHRpb24ocGFnZSwgcGFnZSwgdHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdCRwYWdlU2VsZWN0LmFwcGVuZChuZXdPcHRpb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQkcGFnZVNlbGVjdFxuXHRcdFx0XHRcdFx0LnZhbChbLi4uJHBhZ2VTZWxlY3QudmFsKCksIC4uLihBcnJheS5pc0FycmF5KHBhZ2VzKSA/IHBhZ2VzIDogW3BhZ2VzXSldKVxuXHRcdFx0XHRcdFx0LnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnJlc3RyaWN0aW9ucy5uYW1lc3BhY2VzKSB7XG5cdFx0XHRcdFx0JG5hbWVzcGFjZVNlbGVjdFxuXHRcdFx0XHRcdFx0LnZhbChbXG5cdFx0XHRcdFx0XHRcdC4uLiRuYW1lc3BhY2VTZWxlY3QudmFsKCksXG5cdFx0XHRcdFx0XHRcdC4uLihBcnJheS5pc0FycmF5KGRhdGEucmVzdHJpY3Rpb25zLm5hbWVzcGFjZXMpXG5cdFx0XHRcdFx0XHRcdFx0PyBkYXRhLnJlc3RyaWN0aW9ucy5uYW1lc3BhY2VzXG5cdFx0XHRcdFx0XHRcdFx0OiBbZGF0YS5yZXN0cmljdGlvbnMubmFtZXNwYWNlc10pLFxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHRcdC50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5jaGFuZ2VfdGVtcGxhdGUgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHtmb3JtfSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHt2YWx1ZX0gPSBmb3JtLnRlbXBsYXRlO1xuXHRcdGNvbnN0IHNldHRpbmdzID0gVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvW3ZhbHVlXTtcblx0XHRjb25zdCBibG9ja0JveCA9ICQoZm9ybSkuZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9YmxvY2tdJykuaXMoJzpjaGVja2VkJyk7XG5cdFx0Y29uc3QgcGFydGlhbEJveCA9ICQoZm9ybSkuZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9cGFydGlhbF0nKS5pcygnOmNoZWNrZWQnKTtcblx0XHRjb25zdCB0ZW1wbGF0ZUJveCA9ICQoZm9ybSkuZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9dGVtcGxhdGVdJykuaXMoJzpjaGVja2VkJyk7XG5cdFx0Ly8gQmxvY2sgZm9ybSBpcyBub3QgcHJlc2VudFxuXHRcdGlmICghYmxvY2tCb3gpIHtcblx0XHRcdGlmIChzZXR0aW5ncy5pbmRlZmluaXRlIHx8IHNldHRpbmdzLm5vbnN0YW5kYXJkKSB7XG5cdFx0XHRcdGlmIChUd2lua2xlLmJsb2NrLnByZXZfdGVtcGxhdGVfZXhwaXJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5ibG9jay5wcmV2X3RlbXBsYXRlX2V4cGlyeSA9IGZvcm0udGVtcGxhdGVfZXhwaXJ5LnZhbHVlIHx8ICcnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvcm0udGVtcGxhdGVfZXhwaXJ5LnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0Zm9ybS50ZW1wbGF0ZV9leHBpcnkudmFsdWUgPSAnaW5maW5pdHknO1xuXHRcdFx0fSBlbHNlIGlmIChmb3JtLnRlbXBsYXRlX2V4cGlyeS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5ibG9jay5wcmV2X3RlbXBsYXRlX2V4cGlyeSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGZvcm0udGVtcGxhdGVfZXhwaXJ5LnZhbHVlID0gVHdpbmtsZS5ibG9jay5wcmV2X3RlbXBsYXRlX2V4cGlyeTtcblx0XHRcdFx0XHRUd2lua2xlLmJsb2NrLnByZXZfdGVtcGxhdGVfZXhwaXJ5ID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtLnRlbXBsYXRlX2V4cGlyeS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFR3aW5rbGUuYmxvY2sucHJldl90ZW1wbGF0ZV9leHBpcnkpIHtcblx0XHRcdFx0Zm9ybS5leHBpcnkudmFsdWUgPSBUd2lua2xlLmJsb2NrLnByZXZfdGVtcGxhdGVfZXhwaXJ5O1xuXHRcdFx0fVxuXHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0ubm90YWxrLnBhcmVudE5vZGUsICFzZXR0aW5ncy5ub25zdGFuZGFyZCk7XG5cdFx0XHQvLyBQYXJ0aWFsXG5cdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoZm9ybS5ub2VtYWlsX3RlbXBsYXRlLnBhcmVudE5vZGUsIHBhcnRpYWxCb3gpO1xuXHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0ubm9jcmVhdGVfdGVtcGxhdGUucGFyZW50Tm9kZSwgcGFydGlhbEJveCk7XG5cdFx0fSBlbHNlIGlmICh0ZW1wbGF0ZUJveCkge1xuXHRcdFx0Ly8gT25seSBwcmVzZW50IGlmIGJsb2NrICYmIHRlbXBsYXRlIGZvcm1zIGJvdGggdmlzaWJsZVxuXHRcdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KFxuXHRcdFx0XHRmb3JtLmJsYW5rX2R1cmF0aW9uLnBhcmVudE5vZGUsXG5cdFx0XHRcdCFzZXR0aW5ncy5pbmRlZmluaXRlICYmICFzZXR0aW5ncy5ub25zdGFuZGFyZFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly8gT25seSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaWYgdGVtcGxhdGUgZm9ybSBpcyBwcmVzZW50XG5cdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0uYXJ0aWNsZS5wYXJlbnROb2RlLCBzZXR0aW5ncyAmJiAhIXNldHRpbmdzLnBhZ2VQYXJhbSk7XG5cdFx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm0uYmxvY2tfcmVhc29uLnBhcmVudE5vZGUsIHNldHRpbmdzICYmICEhc2V0dGluZ3MucmVhc29uUGFyYW0pO1xuXHRcdC8vIEFwcGx5IHJlYXNvbiBmcm9tIGJsb2NrUHJlc2V0c0luZm9cblx0XHRpZiAoc2V0dGluZ3MucmVhc29uUGFyYW0pIHtcblx0XHRcdGZvcm0uYmxvY2tfcmVhc29uLnZhbHVlID0gVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvW2Zvcm0ucHJlc2V0LnZhbHVlXS5yZWFzb24gfHwgJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm0uYmxvY2tfcmVhc29uLnZhbHVlID0gJyc7XG5cdFx0fVxuXHRcdC8vIFBhcnRpYWwgYmxvY2tcblx0XHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFZpc2liaWxpdHkoZm9ybS5hcmVhLnBhcmVudE5vZGUsIHBhcnRpYWxCb3ggJiYgIWJsb2NrQm94KTtcblx0XHRmb3JtLnJvb3QucHJldmlld2VyLmNsb3NlUHJldmlldygpO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLnByZXZfdGVtcGxhdGVfZXhwaXJ5ID0gbnVsbDtcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5wcmV2aWV3ID0gKGZvcm0pID0+IHtcblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRhcnRpY2xlOiBmb3JtLmFydGljbGUudmFsdWUsXG5cdFx0XHRibGFua19kdXJhdGlvbjogZm9ybS5ibGFua19kdXJhdGlvbiA/IGZvcm0uYmxhbmtfZHVyYXRpb24uY2hlY2tlZCA6IGZhbHNlLFxuXHRcdFx0ZGlzYWJsZXRhbGs6IGZvcm0uZGlzYWJsZXRhbGsuY2hlY2tlZCB8fCAoZm9ybS5ub3RhbGsgPyBmb3JtLm5vdGFsay5jaGVja2VkIDogZmFsc2UpLFxuXHRcdFx0ZXhwaXJ5OiBmb3JtLnRlbXBsYXRlX2V4cGlyeSA/IGZvcm0udGVtcGxhdGVfZXhwaXJ5LnZhbHVlIDogZm9ybS5leHBpcnkudmFsdWUsXG5cdFx0XHRoYXJkYmxvY2s6IFR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkID8gZm9ybS5hdXRvYmxvY2suY2hlY2tlZCA6IGZvcm0uaGFyZGJsb2NrLmNoZWNrZWQsXG5cdFx0XHRpbmRlZmluaXRlOiBNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShcblx0XHRcdFx0Zm9ybS50ZW1wbGF0ZV9leHBpcnkgPyBmb3JtLnRlbXBsYXRlX2V4cGlyeS52YWx1ZSA6IGZvcm0uZXhwaXJ5LnZhbHVlXG5cdFx0XHQpLFxuXHRcdFx0cmVhc29uOiBmb3JtLmJsb2NrX3JlYXNvbi52YWx1ZSxcblx0XHRcdHRlbXBsYXRlOiBmb3JtLnRlbXBsYXRlLnZhbHVlLFxuXHRcdFx0cGFydGlhbDogJChmb3JtKS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT1wYXJ0aWFsXScpLmlzKCc6Y2hlY2tlZCcpLFxuXHRcdFx0cGFnZXJlc3RyaWN0aW9uczogJChmb3JtLnBhZ2VyZXN0cmljdGlvbnMpLnZhbCgpIHx8IFtdLFxuXHRcdFx0bmFtZXNwYWNlcmVzdHJpY3Rpb25zOiAkKGZvcm0ubmFtZXNwYWNlcmVzdHJpY3Rpb25zKS52YWwoKSB8fCBbXSxcblx0XHRcdG5vZW1haWw6IGZvcm0ubm9lbWFpbC5jaGVja2VkIHx8IChmb3JtLm5vZW1haWxfdGVtcGxhdGUgPyBmb3JtLm5vZW1haWxfdGVtcGxhdGUuY2hlY2tlZCA6IGZhbHNlKSxcblx0XHRcdG5vY3JlYXRlOiBmb3JtLm5vY3JlYXRlLmNoZWNrZWQgfHwgKGZvcm0ubm9jcmVhdGVfdGVtcGxhdGUgPyBmb3JtLm5vY3JlYXRlX3RlbXBsYXRlLmNoZWNrZWQgOiBmYWxzZSksXG5cdFx0XHRhcmVhOiBmb3JtLmFyZWEudmFsdWUsXG5cdFx0fTtcblx0XHRjb25zdCB0ZW1wbGF0ZVRleHQgPSBUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmdldEJsb2NrTm90aWNlV2lraXRleHQocGFyYW1zKTtcblx0XHRmb3JtLnByZXZpZXdlci5iZWdpblJlbmRlcih0ZW1wbGF0ZVRleHQsIGBVc2VyX3RhbGs6JHtyZWxldmFudFVzZXJOYW1lfS9XaWtpdGV4dGApOyAvLyBGb3JjZSB3aWtpdGV4dC9jb3JyZWN0IHVzZXJuYW1lXG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suZXZhbHVhdGUgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZS50YXJnZXQpO1xuXHRcdGNvbnN0ICRmb3JtID0gJChlLnRhcmdldCk7XG5cdFx0Y29uc3QgdG9CbG9jayA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPWJsb2NrXScpLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGNvbnN0IHRvV2FybiA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXRlbXBsYXRlXScpLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGNvbnN0IHRvUGFydGlhbCA9ICRmb3JtLmZpbmQoJ1tuYW1lPWFjdGlvbnR5cGVdW3ZhbHVlPXBhcnRpYWxdJykuaXMoJzpjaGVja2VkJyk7XG5cdFx0Y29uc3QgdG9UYWcgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT10YWddJykuaXMoJzpjaGVja2VkJyk7XG5cdFx0Y29uc3QgdG9Qcm90ZWN0ID0gJGZvcm0uZmluZCgnW25hbWU9YWN0aW9udHlwZV1bdmFsdWU9cHJvdGVjdF0nKS5pcygnOmNoZWNrZWQnKTtcblx0XHRjb25zdCB0b1VuYmxvY2sgPSAkZm9ybS5maW5kKCdbbmFtZT1hY3Rpb250eXBlXVt2YWx1ZT11bmJsb2NrXScpLmlzKCc6Y2hlY2tlZCcpO1xuXHRcdGxldCBibG9ja29wdGlvbnMgPSB7fTtcblx0XHRsZXQgdGVtcGxhdGVvcHRpb25zID0ge307XG5cdFx0bGV0IHVuYmxvY2tvcHRpb25zID0ge307XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGZvcm0uZmluZCgnW25hbWU9ZmllbGRfYmxvY2tfb3B0aW9uc10nKSk7XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGZvcm0uZmluZCgnW25hbWU9ZmllbGRfdGVtcGxhdGVfb3B0aW9uc10nKSk7XG5cdFx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5zYXZlRmllbGRzZXQoJGZvcm0uZmluZCgnW25hbWU9ZmllbGRfdGFnX29wdGlvbnNdJykpO1xuXHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suc2F2ZUZpZWxkc2V0KCRmb3JtLmZpbmQoJ1tuYW1lPWZpZWxkX3VuYmxvY2tfb3B0aW9uc10nKSk7XG5cdFx0YmxvY2tvcHRpb25zID0gVHdpbmtsZS5ibG9jay5maWVsZF9ibG9ja19vcHRpb25zO1xuXHRcdHVuYmxvY2tvcHRpb25zID0gVHdpbmtsZS5ibG9jay5maWVsZF91bmJsb2NrX29wdGlvbnM7XG5cdFx0Y29uc3QgdG9DbG9zZXZpcCA9ICEhYmxvY2tvcHRpb25zLmNsb3NldmlwO1xuXHRcdHRlbXBsYXRlb3B0aW9ucyA9IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucztcblx0XHR0ZW1wbGF0ZW9wdGlvbnMuZGlzYWJsZXRhbGsgPSAhISh0ZW1wbGF0ZW9wdGlvbnMuZGlzYWJsZXRhbGsgfHwgYmxvY2tvcHRpb25zLmRpc2FibGV0YWxrKTtcblx0XHR0ZW1wbGF0ZW9wdGlvbnMuaGFyZGJsb2NrID0gISFibG9ja29wdGlvbnMuaGFyZGJsb2NrO1xuXHRcdC8vIHJlbW92ZSBleHRyYW5lb3VzXG5cdFx0ZGVsZXRlIGJsb2Nrb3B0aW9ucy5leHBpcnlfcHJlc2V0O1xuXHRcdGRlbGV0ZSBibG9ja29wdGlvbnMuY2xvc2V2aXA7XG5cdFx0Ly8gUGFydGlhbCBBUEkgcmVxdWlyZXMgdGhpcyB0byBiZSBnb25lLCBub3QgZmFsc2Ugb3IgMFxuXHRcdGlmICh0b1BhcnRpYWwpIHtcblx0XHRcdGJsb2Nrb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcblx0XHRcdHRlbXBsYXRlb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcblx0XHR9XG5cdFx0dGVtcGxhdGVvcHRpb25zLnBhZ2VyZXN0cmljdGlvbnMgPSAkZm9ybS5maW5kKCdbbmFtZT1wYWdlcmVzdHJpY3Rpb25zXScpLnZhbCgpIHx8IFtdO1xuXHRcdHRlbXBsYXRlb3B0aW9ucy5uYW1lc3BhY2VyZXN0cmljdGlvbnMgPSAkZm9ybS5maW5kKCdbbmFtZT1uYW1lc3BhY2VyZXN0cmljdGlvbnNdJykudmFsKCkgfHwgW107XG5cdFx0Ly8gRm9ybWF0IGZvciBBUEkgaGVyZSByYXRoZXIgdGhhbiBpbiBzYXZlRmllbGRzZXRcblx0XHRibG9ja29wdGlvbnMucGFnZXJlc3RyaWN0aW9ucyA9IHRlbXBsYXRlb3B0aW9ucy5wYWdlcmVzdHJpY3Rpb25zLmpvaW4oJ3wnKTtcblx0XHRibG9ja29wdGlvbnMubmFtZXNwYWNlcmVzdHJpY3Rpb25zID0gdGVtcGxhdGVvcHRpb25zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucy5qb2luKCd8Jyk7XG5cdFx0Ly8gdXNlIGJsb2NrIHNldHRpbmdzIGFzIHdhcm4gb3B0aW9ucyB3aGVyZSBub3Qgc3VwcGxpZWRcblx0XHR0ZW1wbGF0ZW9wdGlvbnMuc3VtbWFyeSB8fD0gYmxvY2tvcHRpb25zLnJlYXNvbjtcblx0XHR0ZW1wbGF0ZW9wdGlvbnMuZXhwaXJ5ID0gdGVtcGxhdGVvcHRpb25zLnRlbXBsYXRlX2V4cGlyeSB8fCBibG9ja29wdGlvbnMuZXhwaXJ5O1xuXHRcdHRlbXBsYXRlb3B0aW9ucy5wcmVzZXQgPSB0b0Jsb2NrID8gcGFyYW1zLnByZXNldCA6IG51bGw7XG5cdFx0Ly8gQ2hlY2sgdGFnc1xuXHRcdC8vIEdpdmVuIGFuIGFycmF5IG9mIGluY29tcGF0aWJsZSB0YWdzLCBjaGVjayBpZiB3ZSBoYXZlIHR3byBvciBtb3JlIHNlbGVjdGVkXG5cdFx0Y29uc3QgY2hlY2tJbmNvbXBhdGlibGUgPSAoY29uZmxpY3RzLCBleHRyYSkgPT4ge1xuXHRcdFx0Y29uc3QgY291bnQgPSBjb25mbGljdHMucmVkdWNlKChzdW0sIHRhZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKHN1bSArPSBwYXJhbXMudGFnLmluY2x1ZGVzKHRhZykpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRpZiAoY291bnQgPiAxKSB7XG5cdFx0XHRcdGxldCBtZXNzYWdlID0gYCR7d2luZG93LndnVUxTKCfor7flnKjku6XkuIvmoIfnrb7kuK3mi6nkuIDkvb/nlKgnLCAn6KuL5Zyo5Lul5LiL5qiZ57Gk5Lit5pOH5LiA5L2/55SoJyl977yae3ske2NvbmZsaWN0cy5qb2luKFxuXHRcdFx0XHRcdCd9feOAgXt7J1xuXHRcdFx0XHQpfX1944CCYDtcblx0XHRcdFx0bWVzc2FnZSArPSBleHRyYSB8fCAnJztcblx0XHRcdFx0bXcubm90aWZ5KG1lc3NhZ2UsIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKHRvVGFnKSB7XG5cdFx0XHRpZiAocGFyYW1zLnRhZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn6K+36Iez5bCR6YCJ5oup5LiA5Liq55So5oi36aG15qCH6K6w77yBJywgJ+iri+iHs+WwkemBuOaTh+S4gOWAi+S9v+eUqOiAhemggemdouaomeiomO+8gScpLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVibG9jaycsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNoZWNrSW5jb21wYXRpYmxlKFxuXHRcdFx0XHRcdFsnQmxvY2tlZCB1c2VyJywgJ1NvY2twdXBwZXQnXSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQne3tTb2NrcHVwcGV0fX3lt7LmtrXnm5Z7e0Jsb2NrZWQgdXNlcn1955qE5Yqf6IO944CCJyxcblx0XHRcdFx0XHRcdCd7e1NvY2twdXBwZXR9feW3sua2teiTi3t7QmxvY2tlZCB1c2VyfX3nmoTlip/og73jgIInXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjaGVja0luY29tcGF0aWJsZShcblx0XHRcdFx0XHRbJ0Jsb2NrZWQgdXNlcicsICdTb2NrcHVwcGV0ZWVyJ10sXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J3t7U29ja3B1cHBldGVlcn195bey5ra155uWe3tCbG9ja2VkIHVzZXJ9feeahOWKn+iDveOAgicsXG5cdFx0XHRcdFx0XHQne3tTb2NrcHVwcGV0ZWVyfX3lt7LmtrXok4t7e0Jsb2NrZWQgdXNlcn1955qE5Yqf6IO944CCJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0Y2hlY2tJbmNvbXBhdGlibGUoXG5cdFx0XHRcdFx0WydTb2NrcHVwcGV0JywgJ1NvY2twdXBwZXRlZXInXSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivt+S7juS4u+i0puWPt+WSjOWIhui6q+i0puWPt+S4remAieaLqeS4gOS4quOAgicsICfoq4vlvp7kuLvos6zomZ/lkozliIbouqvos6zomZ/kuK3pgbjmk4fkuIDlgIvjgIInKVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy50YWcuaW5jbHVkZXMoJ1NvY2twdXBwZXQnKSAmJiBwYXJhbXMuc3BwVXNlcm5hbWUudHJpbSgpID09PSAnJykge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fmj5DkvpvlgoDlhKHotKblj7fnmoTkuLvotKblj7fnlKjmiLflkI3vvIEnLCAn6KuL5o+Q5L6b5YKA5YSh6LOs6Jmf55qE5Li76LOs6Jmf5L2/55So6ICF5ZCN56ix77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHRvQmxvY2spIHtcblx0XHRcdGlmIChibG9ja29wdGlvbnMucGFydGlhbCkge1xuXHRcdFx0XHRpZiAoYmxvY2tvcHRpb25zLmRpc2FibGV0YWxrICYmICFibG9ja29wdGlvbnMubmFtZXNwYWNlcmVzdHJpY3Rpb25zLmluY2x1ZGVzKCczJykpIHtcblx0XHRcdFx0XHRtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCfpg6jliIblsIHnpoHml6Dms5XpmLvmraLnvJbovpHoh6rlt7HnmoTorqjorrrpobXvvIzpmaTpnZ7kuZ/lsIHnpoHkuoZVc2VyIHRhbGvlkb3lkI3nqbrpl7TvvIEnLFxuXHRcdFx0XHRcdFx0XHQn6YOo5YiG5bCB6Y6W54Sh5rOV6Zi75q2i57eo6Lyv6Ieq5bex55qE6KiO6KuW6aCB77yM6Zmk6Z2e5Lmf5bCB6Y6W5LqGVXNlciB0YWxr5ZG95ZCN56m66ZaT77yBJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlYmxvY2snLFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghYmxvY2tvcHRpb25zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucyAmJiAhYmxvY2tvcHRpb25zLnBhZ2VyZXN0cmljdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAoIWJsb2Nrb3B0aW9ucy5ub2VtYWlsICYmICFibG9ja29wdGlvbnMubm9jcmVhdGUpIHtcblx0XHRcdFx0XHRcdC8vIEJsYW5rIGVudHJpZXMgdGVjaG5pY2FsbHkgYWxsb3dlZFxuXHRcdFx0XHRcdFx0bXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+ayoeaciemAieaLqemhtemdouaIluWRveWQjeepuumXtO+8jOS5n+ayoeacieWBnOeUqOeUteWtkOmCruS7tuaIluemgeatouWIm+W7uui0puWPt++8m+ivt+mAieaLqeiHs+WwkeS4gOS4qumAiemhueS7peW6lOeUqOmDqOWIhuWwgeemge+8gScsXG5cdFx0XHRcdFx0XHRcdFx0J+aykuaciemBuOaTh+mggemdouaIluWRveWQjeepuumWk++8jOS5n+aykuacieWBnOeUqOmbu+WtkOmDteS7tuaIluemgeatouW7uueri+izrOiZn++8m+iri+mBuOaTh+iHs+WwkeS4gOWAi+mBuOmgheS7peaHieeUqOmDqOWIhuWwgemOlu+8gSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlYmxvY2snLFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjlsIbopoHov5vooYzlsIHnpoHvvIzkvYbmsqHmnInpmLvmraLku7vkvZXpobXpnaLmiJblkb3lkI3nqbrpl7TnmoTnvJbovpHvvIznoa7lrpropoHnu6fnu63vvJ8nLFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjlsIfopoHpgLLooYzlsIHpjpbvvIzkvYbmspLmnInpmLvmraLku7vkvZXpoIHpnaLmiJblkb3lkI3nqbrplpPnmoTnt6jovK/vvIznorrlrpropoHnubznuozvvJ8nXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghYmxvY2tvcHRpb25zLmV4cGlyeSkge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fmj5Dkvpvov4fmnJ/ml7bpl7TvvIEnLCAn6KuL5o+Q5L6b6YGO5pyf5pmC6ZaT77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gZWxzZSBpZiAoTW9yZWJpdHMuc3RyaW5nLmlzSW5maW5pdHkoYmxvY2tvcHRpb25zLmV4cGlyeSkgJiYgIVR3aW5rbGUuYmxvY2suaXNSZWdpc3RlcmVkKSB7XG5cdFx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+emgeatouaXoOmZkOacn+WwgeemgUlQ5Zyw5Z2A77yBJywgJ+emgeatoueEoemZkOacn+WwgemOlklQ5L2N5Z2A77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICghYmxvY2tvcHRpb25zLnJlYXNvbikge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fmj5DkvpvlsIHnpoHnkIbnlLHvvIEnLCAn6KuL5o+Q5L6b5bCB6Y6W55CG55Sx77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChlLnRhcmdldCk7XG5cdFx0XHRjb25zdCBzdGF0dXNFbGVtZW50ID0gbmV3IE1vcmViaXRzLnN0YXR1cyh3aW5kb3cud2dVTFMoJ+aJp+ihjOWwgeemgScsICfln7fooYzlsIHpjpYnKSk7XG5cdFx0XHRibG9ja29wdGlvbnMuYWN0aW9uID0gJ2Jsb2NrJztcblx0XHRcdGJsb2Nrb3B0aW9ucy51c2VyID0gcmVsZXZhbnRVc2VyTmFtZTtcblx0XHRcdC8vIGJvb2xlYW4tZmxpcHBlZCBvcHRpb25zXG5cdFx0XHRibG9ja29wdGlvbnMuYW5vbm9ubHkgPSBibG9ja29wdGlvbnMuaGFyZGJsb2NrID8gdW5kZWZpbmVkIDogdHJ1ZTtcblx0XHRcdGJsb2Nrb3B0aW9ucy5hbGxvd3VzZXJ0YWxrID0gYmxvY2tvcHRpb25zLmRpc2FibGV0YWxrID8gdW5kZWZpbmVkIDogdHJ1ZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogQ2hlY2sgaWYgYmxvY2sgc3RhdHVzIGNoYW5nZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZm9ybS5cblx0XHRcdCAqIFRoZXJlJ3MgYSBsb3QgdG8gY29uc2lkZXIgaGVyZS4gbGlzdD1ibG9ja3MgcHJvdmlkZXMgdGhlXG5cdFx0XHQgKiBjdXJyZW50IGJsb2NrIHN0YXR1cywgYnV0IHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gaXNzdWVzIHdpdGhcblx0XHRcdCAqIHJlbHlpbmcgb24gaXQuIEZpcnN0LCB0aGUgaWQgZG9lc24ndCB1cGRhdGUgb24gYSByZWJsb2NrLFxuXHRcdFx0ICogbWVhbmluZyB0aGUgaW5kaXZpZHVhbCBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgY29tcGFyZWQuIFRoaXNcblx0XHRcdCAqIGNhbiBiZSBkb25lIHJvdWdobHkgd2l0aCBKU09OLnN0cmluZ2lmeSAtIHdlIGNhbiB0aGFua2Z1bGx5XG5cdFx0XHQgKiByZWx5IG9uIG9yZGVyIGZyb20gdGhlIHNlcnZlciwgYWx0aG91Z2ggc29ydGluZyB3b3VsZCBiZVxuXHRcdFx0ICogZmluZSBpZiBub3QgLSBidXQgZmFsc2V5IHZhbHVlcyBhcmUgcHJvYmxlbWF0aWMgYW5kIGlzXG5cdFx0XHQgKiBub24taWRlYWwuIE1vcmUgaW1wb3J0YW50bHksIGxpc3Q9YmxvY2tzIHdvbid0IGluZGljYXRlIGlmIGFcblx0XHRcdCAqIG5vbi1ibG9ja2VkIHVzZXIgaXMgYmxvY2tlZCB0aGVuIHVuYmxvY2tlZC4gVGhpcyBzaG91bGQgYmVcblx0XHRcdCAqIGV4Y2VlZGluZ3kgcmFyZSwgYnV0IHJlZ2FyZGxlc3MsIHdlIHRodXMgbmVlZCB0byBjaGVja1xuXHRcdFx0ICogbGlzdD1sb2dldmVudHMsIHdoaWNoIGhhcyBhIG5pY2VseSB1cGRhdGluZyBsb2dpZFxuXHRcdFx0ICogcGFyYW1ldGVyLiBXZSBjYW4ndCByZWx5IGp1c3Qgb24gdGhhdCwgdGhvdWdoLCBzaW5jZSBpdFxuXHRcdFx0ICogZG9lc24ndCBhY2NvdW50IGZvciBibG9ja3MgdGhhdCBoYXZlIGV4cGlyZWQgb24gdGhlaXIgb3duLlxuXHRcdFx0ICogQXMgc3VjaCwgd2UgdXNlIGJvdGguIFVzaW5nIHNvbWUgdGVybmFyaWVzLCB0aGUgbG9naWRcblx0XHRcdCAqIHZhcmlhYmxlcyBhcmUgZmFsc2UgaWYgdGhlcmUncyBubyBsb2dldmVudHMsIHNvIGlmIHRoZXlcblx0XHRcdCAqIGFyZW4ndCBlcXVhbCB3ZSBkZWZpbnRlbHkgaGF2ZSBhIGNoYW5nZWQgZW50cnkgKHNlbmRcblx0XHRcdCAqIGNvbmZpcm1hdGlvbikuIElmIHRoZXkgYXJlIGVxdWFsLCB0aGVuIGVpdGhlciB0aGUgdXNlciB3YXNcblx0XHRcdCAqIG5ldmVyIGJsb2NrZWQgKHRoZSBibG9jayBzdGF0dXNlcyB3aWxsIGJlIGVxdWFsLCBub1xuXHRcdFx0ICogY29uZmlybWF0aW9uKSBvciB0aGVyZSdzIG5vIG5ldyBibG9jaywgaW4gd2hpY2ggY2FzZSBlaXRoZXJcblx0XHRcdCAqIGEgYmxvY2sgZXhwaXJlZCAoZGlmZmVyZW50IHN0YXR1c2VzLCBjb25maXJtYXRpb24pIG9yIHRoZVxuXHRcdFx0ICogc2FtZSBibG9jayBpcyBzdGlsbCBhY3RpdmUgKHNhbWUgc3RhdHVzLCBubyBjb25maXJtYXRpb24pLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0bGlzdDogJ2Jsb2Nrc3xsb2dldmVudHMnLFxuXHRcdFx0XHRsZXR5cGU6ICdibG9jaycsXG5cdFx0XHRcdGxlbGltaXQ6IDEsXG5cdFx0XHRcdGxldGl0bGU6IGBVc2VyOiR7YmxvY2tvcHRpb25zLnVzZXJ9YCxcblx0XHRcdH07XG5cdFx0XHQvLyBia3VzZXJzIGRvZXNuJ3QgY2F0Y2ggc2luZ2xlIElQcyBibG9ja2VkIGFzIHBhcnQgb2YgYSByYW5nZSBibG9ja1xuXHRcdFx0aWYgKG13LnV0aWwuaXNJUEFkZHJlc3MoYmxvY2tvcHRpb25zLnVzZXIsIHRydWUpKSB7XG5cdFx0XHRcdHF1ZXJ5LmJraXAgPSBibG9ja29wdGlvbnMudXNlcjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHF1ZXJ5LmJrdXNlcnMgPSBibG9ja29wdGlvbnMudXNlcjtcblx0XHRcdFx0cXVlcnkubGlzdCArPSAnfHVzZXJzJztcblx0XHRcdFx0cXVlcnkudXNwcm9wID0gJ2dyb3Vwcyc7XG5cdFx0XHRcdHF1ZXJ5LnVzdXNlcnMgPSBibG9ja29wdGlvbnMudXNlcjtcblx0XHRcdFx0cXVlcnkubWV0YSA9ICd0b2tlbnMnO1xuXHRcdFx0XHRxdWVyeS50eXBlID0gJ3VzZXJyaWdodHMnO1xuXHRcdFx0fVxuXHRcdFx0YXBpLmdldChxdWVyeSkudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0XHRsZXQgW2Jsb2NrXSA9IGRhdGEucXVlcnkuYmxvY2tzO1xuXHRcdFx0XHQvLyBBcyB3aXRoIHRoZSBpbml0aWFsIGRhdGEgZmV0Y2gsIGlmIGFuIElQIGlzIGJsb2NrZWRcblx0XHRcdFx0Ly8gKmFuZCogcmFuZ2VibG9ja2VkLCB0aGlzIHdvdWxkIG9ubHkgZ3JhYiB3aGljaGV2ZXJcblx0XHRcdFx0Ly8gYmxvY2sgaXMgbW9yZSByZWNlbnQsIHdoaWNoIHdvdWxkIGxpa2VseSBtZWFuIGFcblx0XHRcdFx0Ly8gbWlzbWF0Y2guICBIb3dldmVyLCBpZiB0aGUgcmFuZ2VibG9jayBpcyB1cGRhdGVkXG5cdFx0XHRcdC8vIHdoaWxlIGZpbGxpbmcgb3V0IHRoZSBmb3JtLCB0aGlzIHdvbid0IGRldGVjdCB0aGF0LFxuXHRcdFx0XHQvLyBidXQgdGhhdCdzIHByb2JhYmx5IGZpbmUuXG5cdFx0XHRcdGlmIChkYXRhLnF1ZXJ5LmJsb2Nrcy5sZW5ndGggPiAxICYmIGJsb2NrLnVzZXIgIT09IHJlbGV2YW50VXNlck5hbWUpIHtcblx0XHRcdFx0XHRbLCBibG9ja10gPSBkYXRhLnF1ZXJ5LmJsb2Nrcztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBbbG9nZXZlbnRzXSA9IGRhdGEucXVlcnkubG9nZXZlbnRzO1xuXHRcdFx0XHRjb25zdCB1c2VyID0gZGF0YS5xdWVyeS51c2VycyA/IGRhdGEucXVlcnkudXNlcnNbMF0gOiBudWxsO1xuXHRcdFx0XHRjb25zdCBsb2dpZCA9IGRhdGEucXVlcnkubG9nZXZlbnRzLmxlbmd0aCA/IGxvZ2V2ZW50cy5sb2dpZCA6IGZhbHNlO1xuXHRcdFx0XHRpZiAobG9naWQgIT09IFR3aW5rbGUuYmxvY2suYmxvY2tMb2dJZCB8fCAhIWJsb2NrICE9PSAhIVR3aW5rbGUuYmxvY2suY3VycmVudEJsb2NrSW5mbykge1xuXHRcdFx0XHRcdGxldCBtZXNzYWdlID0gYmxvY2tvcHRpb25zLnVzZXIgKyB3aW5kb3cud2dVTFMoJ+eahOWwgeemgeeKtuaAgeW3suiiq+S/ruaUueOAgicsICfnmoTlsIHpjpbni4DmhYvlt7Looqvkv67mlLnjgIInKTtcblx0XHRcdFx0XHRpZiAoYmxvY2spIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2UgKz0gd2luZG93LndnVUxTKCfmlrDnirbmgIHvvJonLCAn5paw54uA5oWL77yaJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2UgKz0gd2luZG93LndnVUxTKCfmnIDmlrDml6Xlv5fvvJonLCAn5pyA5paw5pel6KqM77yaJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGxldCBsb2dFeHBpcnkgPSAnJztcblx0XHRcdFx0XHRpZiAobG9nZXZlbnRzLnBhcmFtcy5kdXJhdGlvbikge1xuXHRcdFx0XHRcdFx0aWYgKGxvZ2V2ZW50cy5wYXJhbXMuZHVyYXRpb24gPT09ICdpbmZpbml0eScpIHtcblx0XHRcdFx0XHRcdFx0bG9nRXhwaXJ5ID0gd2luZG93LndnVUxTKCfml6DpmZDmnJ8nLCAn54Sh6ZmQ5pyfJyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBleHBpcnlEYXRlID0gbmV3IE1vcmViaXRzLmRhdGUobG9nZXZlbnRzLnBhcmFtcy5leHBpcnkpO1xuXHRcdFx0XHRcdFx0XHRsb2dFeHBpcnkgKz1cblx0XHRcdFx0XHRcdFx0XHQoZXhwaXJ5RGF0ZS5pc0JlZm9yZShuZXcgRGF0ZSgpKSA/IHdpbmRvdy53Z1VMUygn6L+H5pyf5LqOJywgJ+mBjuacn+aWvCcpIDogJ+ebtOWIsCcpICtcblx0XHRcdFx0XHRcdFx0XHRleHBpcnlEYXRlLmNhbGVuZGFyKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIG5vIGR1cmF0aW9uLCBhY3Rpb249dW5ibG9jaywganVzdCBzaG93IHRpbWVzdGFtcFxuXHRcdFx0XHRcdFx0bG9nRXhwaXJ5ID0gYOaWvCR7bmV3IE1vcmViaXRzLmRhdGUobG9nZXZlbnRzLnRpbWVzdGFtcCkuY2FsZW5kYXIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtZXNzYWdlICs9IGDnlLEke2xvZ2V2ZW50cy51c2VyfSR7d2luZG93LndnVUxTKCfku6XigJwnLCAn5Lul44CMJyl9JHtsb2dldmVudHMuY29tbWVudH0ke3dpbmRvdy53Z1VMUygn4oCdJywgJ+OAjScpfSR7XG5cdFx0XHRcdFx0XHRibG9ja0FjdGlvblRleHRbbG9nZXZlbnRzLmFjdGlvbl1cblx0XHRcdFx0XHR9JHtsb2dFeHBpcnl9JHt3aW5kb3cud2dVTFMoJ++8jOS9oOaDs+imgeS7peS9oOeahOiuvue9ruabtOaUueWwgeemgeWQl++8nycsICfvvIzkvaDmg7PopoHku6XkvaDnmoToqK3lrprorormm7TlsIHpjpbll47vvJ8nKX1gO1xuXHRcdFx0XHRcdGlmICghY29uZmlybShtZXNzYWdlKSkge1xuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5omn6KGM5bCB56aBJywgJ+Wft+ihjOWwgemOlicpLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nCcsICfkvb/nlKjogIXlj5bmtojmk43kvZwnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YmxvY2tvcHRpb25zLnJlYmxvY2sgPSAxOyAvLyBXcml0aW5nIG92ZXIgYSBibG9jayB3aWxsIGZhaWwgb3RoZXJ3aXNlXG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZ3JvdXBzQ2FuQmVSZW1vdmVkID0gW1xuXHRcdFx0XHRcdCdhdXRvcGF0cm9sbGVkJyxcblx0XHRcdFx0XHQnY29uZmlybWVkJyxcblx0XHRcdFx0XHQncm5yc3ZlcmlmeS1leGVtcHQnLFxuXHRcdFx0XHRcdCdtYXNzbWVzc2FnZS1zZW5kZXInLFxuXHRcdFx0XHRcdCdwYXRyb2xsZXInLFxuXHRcdFx0XHRcdCd0ZW1wbGF0ZWVkaXRvcicsXG5cdFx0XHRcdFx0J2ltcG9ydGVyJyxcblx0XHRcdFx0XTtcblx0XHRcdFx0bGV0IGdyb3Vwc1RvQmVSZW1vdmVkID0gW107XG5cdFx0XHRcdGlmICh1c2VyICYmIE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KGJsb2Nrb3B0aW9ucy5leHBpcnkpKSB7XG5cdFx0XHRcdFx0Z3JvdXBzVG9CZVJlbW92ZWQgPSB1c2VyLmdyb3Vwcy5maWx0ZXIoKGdyb3VwKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ3JvdXBzQ2FuQmVSZW1vdmVkLmluY2x1ZGVzKGdyb3VwKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBleGVjdXRlIGJsb2NrXG5cdFx0XHRcdGJsb2Nrb3B0aW9ucy50YWdzID0gVHdpbmtsZS5jaGFuZ2VUYWdzO1xuXHRcdFx0XHRibG9ja29wdGlvbnMudG9rZW4gPSBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdFx0XHRjb25zdCBtYkFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaSh3aW5kb3cud2dVTFMoJ+aJp+ihjOWwgeemgScsICfln7fooYzlsIHpjpYnKSwgYmxvY2tvcHRpb25zLCAoKSA9PiB7XG5cdFx0XHRcdFx0c3RhdHVzRWxlbWVudC5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0XHRpZiAodG9XYXJuKSB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmlzc3VlX3RlbXBsYXRlKHRlbXBsYXRlb3B0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0b0Nsb3NldmlwKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2aXBQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdFx0J0xJQl90YWxrOuaKpeWRiuW9k+WJjeegtOWdjycsXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5YWz6Zet6K+35rGCJywgJ+mXnOmWieiri+axgicpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dmlwUGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlKTtcblx0XHRcdFx0XHRcdHZpcFBhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKGJsb2Nrb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR2aXBQYWdlLmxvYWQoVHdpbmtsZS5ibG9jay5jYWxsYmFjay5jbG9zZVJlcXVlc3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZ3JvdXBzVG9CZVJlbW92ZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmlnaHRTdGF0dXNFbGVtZW50ID0gbmV3IE1vcmViaXRzLnN0YXR1cyh3aW5kb3cud2dVTFMoJ+enu+mZpOadg+mZkCcsICfnp7vpmaTmrIrpmZAnKSk7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm0oXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfor6XnlKjmiLfmnInku6XkuIvmnYPpmZDvvJonLCAn6Kmy5L2/55So6ICF5pyJ5Lul5LiL5qyK6ZmQ77yaJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0Z3JvdXBzVG9CZVJlbW92ZWQuam9pbign44CBJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfvvIzmgqjmmK/lkKbmg7PopoHlkIzml7bnp7vpmaTov5nkupvmnYPpmZDvvJ8nLCAn77yM5oKo5piv5ZCm5oOz6KaB5ZCM5pmC56e76Zmk6YCZ5Lqb5qyK6ZmQ77yfJylcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJldm9rZU9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiAndXNlcnJpZ2h0cycsXG5cdFx0XHRcdFx0XHRcdFx0dXNlcjogYmxvY2tvcHRpb25zLnVzZXIsXG5cdFx0XHRcdFx0XHRcdFx0cmVtb3ZlOiBncm91cHNUb0JlUmVtb3ZlZC5qb2luKCd8JyksXG5cdFx0XHRcdFx0XHRcdFx0cmVhc29uOiB3aW5kb3cud2dVTFMoJ+eUqOaIt+W3suiiq+aXoOmZkOacn+WwgeemgScsICfkvb/nlKjogIXlt7LooqvnhKHpmZDmnJ/lsIHpjpYnKSxcblx0XHRcdFx0XHRcdFx0XHR0b2tlbjogZGF0YS5xdWVyeS50b2tlbnMudXNlcnJpZ2h0c3Rva2VuLFxuXHRcdFx0XHRcdFx0XHRcdHRhZ3M6IFR3aW5rbGUuY2hhbmdlVGFncyxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbXJBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfnp7vpmaTmnYPpmZAnLCAn56e76Zmk5qyK6ZmQJyksXG5cdFx0XHRcdFx0XHRcdFx0cmV2b2tlT3B0aW9ucyxcblx0XHRcdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyaWdodFN0YXR1c0VsZW1lbnQuaW5mbyhg5bey56e76ZmkJHtncm91cHNUb0JlUmVtb3ZlZC5qb2luKCfjgIEnKX1gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdG1yQXBpLnBvc3QoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJpZ2h0U3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nOOAgicsICfkvb/nlKjogIXlj5bmtojmk43kvZzjgIInKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bWJBcGkucG9zdCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmICh0b1dhcm4pIHtcblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChlLnRhcmdldCk7XG5cdFx0XHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmlzc3VlX3RlbXBsYXRlKHRlbXBsYXRlb3B0aW9ucyk7XG5cdFx0fVxuXHRcdGlmICh0b1RhZyB8fCB0b1Byb3RlY3QpIHtcblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChlLnRhcmdldCk7XG5cdFx0XHRjb25zdCB1c2VyUGFnZSA9IGBVc2VyOiR7bXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyl9YDtcblx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdHVzZXJQYWdlLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+agh+iusOaIluS/neaKpOeUqOaIt+mhtScsICfmqJnoqJjmiJbkv53orbfkvb/nlKjogIXpoIHpnaInKVxuXHRcdFx0KTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuYmxvY2suY2FsbGJhY2sudGFndXNlcnBhZ2UpO1xuXHRcdH1cblx0XHRpZiAodG9VbmJsb2NrKSB7XG5cdFx0XHRpZiAoIXVuYmxvY2tvcHRpb25zLnJlYXNvbikge1xuXHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfor7fmj5Dkvpvop6PpmaTlsIHnpoHnkIbnlLHvvIEnLCAn6KuL5o+Q5L6b6Kej6Zmk5bCB6Y6W55CG55Sx77yBJyksIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChlLnRhcmdldCk7XG5cdFx0XHRjb25zdCB1bmJsb2NrU3RhdHVzRWxlbWVudCA9IG5ldyBNb3JlYml0cy5zdGF0dXMod2luZG93LndnVUxTKCfmiafooYzop6PpmaTlsIHnpoEnLCAn5Z+36KGM6Kej6Zmk5bCB6Y6WJykpO1xuXHRcdFx0dW5ibG9ja29wdGlvbnMuYWN0aW9uID0gJ3VuYmxvY2snO1xuXHRcdFx0dW5ibG9ja29wdGlvbnMudXNlciA9IG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpO1xuXHRcdFx0Ly8gZXhlY3V0ZSB1bmJsb2NrXG5cdFx0XHR1bmJsb2Nrb3B0aW9ucy50YWdzID0gVHdpbmtsZS5jaGFuZ2VUYWdzO1xuXHRcdFx0dW5ibG9ja29wdGlvbnMudG9rZW4gPSBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdFx0Y29uc3QgdW5ibG9ja01iQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aJp+ihjOino+mZpOWwgeemgScsICfln7fooYzop6PpmaTlsIHpjpYnKSxcblx0XHRcdFx0dW5ibG9ja29wdGlvbnMsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHR1bmJsb2NrU3RhdHVzRWxlbWVudC5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdHVuYmxvY2tNYkFwaS5wb3N0KCk7XG5cdFx0fVxuXHRcdGlmICghdG9CbG9jayAmJiAhdG9XYXJuICYmICF0b1RhZyAmJiAhdG9Qcm90ZWN0ICYmICF0b1VuYmxvY2spIHtcblx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ivt+e7mVR3aW5rbGXngrnkuovlgZrvvIEnLCAn6KuL57WmVHdpbmtsZem7nuS6i+WBmu+8gScpLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZWJsb2NrJyxcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay50YWd1c2VycGFnZSA9IChwYWdlb2JqKSA9PiB7XG5cdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRjb25zdCBzdGF0ZWxlbSA9IHBhZ2VvYmouZ2V0U3RhdHVzRWxlbWVudCgpO1xuXHRcdGlmIChwYXJhbXMuYWN0aW9udHlwZS5pbmNsdWRlcygndGFnJykpIHtcblx0XHRcdGNvbnN0IHRhZ3MgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHBhcmFtcy50YWcpIHtcblx0XHRcdFx0bGV0IHRhZ3RleHQgPSBge3ske3RhZ31gO1xuXHRcdFx0XHRzd2l0Y2ggKHRhZykge1xuXHRcdFx0XHRcdGNhc2UgJ0Jsb2NrZWQgdXNlcic6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdTb2NrcHVwcGV0Jzpcblx0XHRcdFx0XHRcdHRhZ3RleHQgKz0gYFxcbnwgMSA9ICR7cGFyYW1zLnNwcFVzZXJuYW1lLnRyaW0oKX1gO1xuXHRcdFx0XHRcdFx0dGFndGV4dCArPSBgXFxufCAyID0gJHtwYXJhbXMuc3BwVHlwZS50cmltKCl9YDtcblx0XHRcdFx0XHRcdGlmIChwYXJhbXMuc3BwRXZpZGVuY2UudHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdHRhZ3RleHQgKz0gYFxcbnwgZXZpZGVuY2UgPSAke3BhcmFtcy5zcHBFdmlkZW5jZS50cmltKCl9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRhZ3RleHQgKz0gJ1xcbnwgbG9ja2VkID0gbm8nO1xuXHRcdFx0XHRcdFx0dGFndGV4dCArPSAnXFxufCBub3RibG9ja2VkID0gbm8nO1xuXHRcdFx0XHRcdFx0dGFndGV4dCArPSAnXFxuJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1NvY2twdXBwZXRlZXInOlxuXHRcdFx0XHRcdFx0dGFndGV4dCArPSAnXFxufCAxID0gYmxvY2tlZCc7XG5cdFx0XHRcdFx0XHR0YWd0ZXh0ICs9IGBcXG58IGNoZWNrZWQgPSAke3BhcmFtcy5zcG1DaGVja2VkID8gJ3llcycgOiAnJ31gO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5zcG1FdmlkZW5jZS50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0dGFndGV4dCArPSBgXFxufCBldmlkZW5jZSA9ICR7cGFyYW1zLnNwbUV2aWRlbmNlLnRyaW0oKX1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFndGV4dCArPSAnXFxuJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRtdy5ub3RpZnkod2luZG93LndnVUxTKCfmnKrnn6XnmoTnlKjmiLfpobXmqKHmnb/vvIEnLCAn5pyq55+l55qE5L2/55So6ICF6aCB6Z2i5qih5p2/77yBJyksIHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlYmxvY2snLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0YWd0ZXh0ICs9ICd9fSc7XG5cdFx0XHRcdHRhZ3MucHVzaCh0YWd0ZXh0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHRleHQgPSB0YWdzLmpvaW4oJ1xcbicpO1xuXHRcdFx0cGFnZW9iai5zZXRQYWdlVGV4dCh0ZXh0KTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkod2luZG93LndnVUxTKCfmoIforrDooqvmsLjkuYXlsIHnpoHnmoTnlKjmiLfpobUnLCAn5qiZ6KiY6KKr5rC45LmF5bCB6Y6W55qE5L2/55So6ICF6aCB6Z2iJykpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNhdmUoKCkgPT4ge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyh3aW5kb3cud2dVTFMoJ+agh+iusOeUqOaIt+mhtScsICfmqJnoqJjkvb/nlKjogIXpoIHpnaInKSwgJ+WujOaIkCcpO1xuXHRcdFx0XHRzdGF0ZWxlbS5zdGF0dXMod2luZG93LndnVUxTKCfmraPlnKjkv53miqTpobXpnaInLCAn5q2j5Zyo5L+d6K236aCB6Z2iJykpO1xuXHRcdFx0XHRwYWdlb2JqLmxvYWQoVHdpbmtsZS5ibG9jay5jYWxsYmFjay5wcm90ZWN0dXNlcnBhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3aW5rbGUuYmxvY2suY2FsbGJhY2sucHJvdGVjdHVzZXJwYWdlKHBhZ2VvYmopO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5ibG9jay5jYWxsYmFjay5wcm90ZWN0dXNlcnBhZ2UgPSAocGFnZW9iaikgPT4ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0Y29uc3Qgc3RhdGVsZW0gPSBwYWdlb2JqLmdldFN0YXR1c0VsZW1lbnQoKTtcblx0XHRpZiAocGFyYW1zLmFjdGlvbnR5cGUuaW5jbHVkZXMoJ3Byb3RlY3QnKSkge1xuXHRcdFx0aWYgKHBhZ2VvYmouZXhpc3RzKCkpIHtcblx0XHRcdFx0cGFnZW9iai5zZXRFZGl0UHJvdGVjdGlvbignc3lzb3AnLCAnaW5kZWZpbml0ZScpO1xuXHRcdFx0XHRwYWdlb2JqLnNldE1vdmVQcm90ZWN0aW9uKCdzeXNvcCcsICdpbmRlZmluaXRlJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYWdlb2JqLnNldENyZWF0ZVByb3RlY3Rpb24oJ3N5c29wJywgJ2luZGVmaW5pdGUnKTtcblx0XHRcdH1cblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkod2luZG93LndnVUxTKCfooqvmsLjkuYXlsIHnpoHnmoTnlKjmiLfpobUnLCAn6KKr5rC45LmF5bCB6Y6W55qE5L2/55So6ICF6aCB6Z2iJykpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnByb3RlY3QoKCkgPT4ge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/neaKpOeUqOaIt+mhtScsICfkv53orbfkvb/nlKjogIXpoIHpnaInKSxcblx0XHRcdFx0XHRwYWdlb2JqLmV4aXN0cygpID8gd2luZG93LndnVUxTKCflt7Llhajkv53miqQnLCAn5bey5YWo5L+d6K23JykgOiB3aW5kb3cud2dVTFMoJ+W3sueZvee6uOS/neaKpCcsICflt7Lnmb3ntJnkv53orbcnKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRzdGF0ZWxlbS5pbmZvKCflhajpg6jlrozmiJAnKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGF0ZWxlbS5pbmZvKCflhajpg6jlrozmiJAnKTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuYmxvY2suY2FsbGJhY2suaXNzdWVfdGVtcGxhdGUgPSAoZm9ybURhdGEpID0+IHtcblx0XHQvLyBVc2Ugd2dSZWxldmFudFVzZXJOYW1lIHRvIGVuc3VyZSB0aGUgYmxvY2sgdGVtcGxhdGUgZ29lcyB0byBhIHNpbmdsZSBJUCBhbmQgbm90IHRvIHRoZVxuXHRcdC8vIFwidGFsayBwYWdlXCIgb2YgYW4gSVAgcmFuZ2UgKHdoaWNoIGRvZXMgbm90IGV4aXN0KVxuXHRcdGNvbnN0IHVzZXJUYWxrUGFnZSA9IGBVc2VyX3RhbGs6JHttdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKX1gO1xuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdC4uLmZvcm1EYXRhLFxuXHRcdFx0bWVzc2FnZURhdGE6IFR3aW5rbGUuYmxvY2suYmxvY2tQcmVzZXRzSW5mb1tmb3JtRGF0YS50ZW1wbGF0ZV0sXG5cdFx0XHR1c2VydGFsa19zdW1tYXJ5OiBUd2lua2xlLmJsb2NrLmJsb2NrUHJlc2V0c0luZm9bZm9ybURhdGEucHJlc2V0IHx8IGZvcm1EYXRhLnRlbXBsYXRlXS5zdW1tYXJ5LFxuXHRcdFx0cmVhc29uOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMuYmxvY2tfcmVhc29uLFxuXHRcdFx0ZGlzYWJsZXRhbGs6IFR3aW5rbGUuYmxvY2suZmllbGRfdGVtcGxhdGVfb3B0aW9ucy5ub3RhbGssXG5cdFx0XHRub2VtYWlsOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMubm9lbWFpbF90ZW1wbGF0ZSxcblx0XHRcdG5vY3JlYXRlOiBUd2lua2xlLmJsb2NrLmZpZWxkX3RlbXBsYXRlX29wdGlvbnMubm9jcmVhdGVfdGVtcGxhdGUsXG5cdFx0fTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHVzZXJUYWxrUGFnZTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoXG5cdFx0XHQn5a6M5oiQ77yM5bCG5Zyo5Yeg56eS5ZCO5Yqg6L2955So5oi36K6o6K666aG1Jyxcblx0XHRcdCflrozmiJDvvIzlsIflnKjlub7np5LlvozovInlhaXkvb/nlKjogIXoqI7oq5bpoIEnXG5cdFx0KTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0dXNlclRhbGtQYWdlLFxuXHRcdFx0d2luZG93LndnVUxTKCfnlKjmiLforqjorrrpobXkv67mlLknLCAn5L2/55So6ICF6KiO6KuW6aCB5L+u5pS5Jylcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmJsb2NrLmNhbGxiYWNrLm1haW4pO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmNsb3NlUmVxdWVzdCA9ICh2aXBQYWdlKSA9PiB7XG5cdFx0Y29uc3QgcGFyYW1zID0gdmlwUGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRsZXQgdGV4dCA9IHZpcFBhZ2UuZ2V0UGFnZVRleHQoKTtcblx0XHRjb25zdCBzdGF0dXNFbGVtZW50ID0gdmlwUGFnZS5nZXRTdGF0dXNFbGVtZW50KCk7XG5cdFx0Y29uc3QgdXNlck5hbWUgPSBtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKTtcblx0XHRjb25zdCBleHBpcnlUZXh0ID0gTW9yZWJpdHMuc3RyaW5nLmZvcm1hdFRpbWUocGFyYW1zLmV4cGlyeSk7XG5cdFx0Y29uc3QgY29tbWVudCA9IGB7e0Jsb2NrZWR8JHtNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShwYXJhbXMuZXhwaXJ5KSA/ICdpbmRlZicgOiBleHBpcnlUZXh0fX1944CCYDtcblx0XHRjb25zdCByZXF1ZXN0TGlzdCA9IHRleHQuc3BsaXQoLyg/PVxcbj09PS4rPT09XFxzKlxcbikvKTtcblx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHRsZXQgaGlkZW5hbWUgPSBmYWxzZTtcblx0XHRjb25zdCB2aXBSZSA9IG5ldyBSZWdFeHAoXG5cdFx0XHRge3tcXFxccypbVnZdYW5kYWxcXFxccypcXFxcfFxcXFxzKigxXFxcXHMqPVxcXFxzKik/JHtNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KFxuXHRcdFx0XHR1c2VyTmFtZVxuXHRcdFx0KX1cXFxccyooXFxcXHxcXFxccypoaWRlbmFtZVxcXFxzKj1bXnxdKyk/fX1gLFxuXHRcdFx0J20nXG5cdFx0KTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHJlcXVlc3RMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodmlwUmUuZXhlYyhyZXF1ZXN0TGlzdFtpXSkpIHtcblx0XHRcdFx0aGlkZW5hbWUgPSAvXFx8XFxzKmhpZGVuYW1lXFxzKj1bXnxdKy8udGVzdChyZXF1ZXN0TGlzdFtpXSk7XG5cdFx0XHRcdHJlcXVlc3RMaXN0W2ldID0gcmVxdWVzdExpc3RbaV0udHJpbUVuZCgpO1xuXHRcdFx0XHRsZXQgbmV3VGV4dCA9IHJlcXVlc3RMaXN0W2ldLnJlcGxhY2UoXG5cdFx0XHRcdFx0L14oXFwqXFxzKuWkhOeQhu+8milbIFxcdF0qKDwhLS0g6Z2e566h55CG5ZOh5YOF5Y+v5qiZ6KiY5bey5Z+36KGM55qE5bCB56aB77yM6Yed5bCN5o+Q5aCx55qE5oSP6KaL6KuL5pS+5Zyo5LiL5LiA6KGMIC0tPik/WyBcXHRdKiQvbSxcblx0XHRcdFx0XHRgJDEke2NvbW1lbnR9LS1+fmAuY29uY2F0KCd+ficpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChyZXF1ZXN0TGlzdFtpXSA9PT0gbmV3VGV4dCkge1xuXHRcdFx0XHRcdG5ld1RleHQgPSBgJHtyZXF1ZXN0TGlzdFtpXX1cXG4qIOWkhOeQhu+8miR7Y29tbWVudH0tLX5+YC5jb25jYXQoJ35+Jyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVxdWVzdExpc3RbaV0gPSBgJHtuZXdUZXh0fVxcbmA7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghZm91bmQpIHtcblx0XHRcdHN0YXR1c0VsZW1lbnQud2Fybih3aW5kb3cud2dVTFMoJ+ayoeacieaJvuWIsOebuOWFs+eahOivt+axgicsICfmspLmnInmib7liLDnm7jpl5znmoToq4vmsYInKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRleHQgPSByZXF1ZXN0TGlzdC5qb2luKCcnKTtcblx0XHRsZXQgc3VtbWFyeTtcblx0XHRpZiAoaGlkZW5hbWUpIHtcblx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+agh+iusOS4uuW3suWkhOeQhicsICfmqJnoqJjngrrlt7LomZXnkIYnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VtbWFyeSA9IGAvKiAke3VzZXJOYW1lfSAqLyBgO1xuXHRcdFx0aWYgKE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHBhcmFtcy5leHBpcnkpKSB7XG5cdFx0XHRcdHN1bW1hcnkgKz0gd2luZG93LndnVUxTKCfkuI3pmZDmnJ/lsIHnpoEnLCAn5LiN6ZmQ5pyf5bCB6Y6WJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdW1tYXJ5ICs9IHdpbmRvdy53Z1VMUygn5bCB56aBJywgJ+WwgemOlicpICsgZXhwaXJ5VGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdFx0dmlwUGFnZS5zZXRFZGl0U3VtbWFyeShzdW1tYXJ5KTtcblx0XHR2aXBQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHR2aXBQYWdlLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdHZpcFBhZ2Uuc2F2ZSgpO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLmdldEJsb2NrTm90aWNlV2lraXRleHQgPSAocGFyYW1zKSA9PiB7XG5cdFx0bGV0IHRleHQgPSAne3snO1xuXHRcdGNvbnN0IHNldHRpbmdzID0gVHdpbmtsZS5ibG9jay5ibG9ja1ByZXNldHNJbmZvW3BhcmFtcy50ZW1wbGF0ZV07XG5cdFx0aWYgKHNldHRpbmdzLm5vbnN0YW5kYXJkKSB7XG5cdFx0XHR0ZXh0ICs9IHBhcmFtcy50ZW1wbGF0ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGV4dCArPSAnc3Vic3Q6Jy5jb25jYXQocGFyYW1zLnRlbXBsYXRlKTtcblx0XHRcdGlmIChwYXJhbXMuYXJ0aWNsZSAmJiBzZXR0aW5ncy5wYWdlUGFyYW0pIHtcblx0XHRcdFx0dGV4dCArPSBgfHBhZ2U9JHtwYXJhbXMuYXJ0aWNsZX1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCEvdGU/bXB8XlxccyokfG1pbi8uZXhlYyhwYXJhbXMuZXhwaXJ5KSkge1xuXHRcdFx0XHRpZiAocGFyYW1zLmluZGVmaW5pdGUpIHtcblx0XHRcdFx0XHR0ZXh0ICs9ICd8aW5kZWY9eWVzJztcblx0XHRcdFx0fSBlbHNlIGlmICghcGFyYW1zLmJsYW5rX2R1cmF0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gTm8gZXhwaXJ5IGNoZWNrc1xuXHRcdFx0XHRcdC8vIEJsb2NrIHRlbXBsYXRlIHdhbnRzIGEgZHVyYXRpb24sIG5vdCBkYXRlXG5cdFx0XHRcdFx0dGV4dCArPSBgfHRpbWU9JHtNb3JlYml0cy5zdHJpbmcuZm9ybWF0VGltZShwYXJhbXMuZXhwaXJ5KX1gOyAvLyBmb3JtYXRUaW1lXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghVHdpbmtsZS5ibG9jay5pc1JlZ2lzdGVyZWQgJiYgIXBhcmFtcy5oYXJkYmxvY2spIHtcblx0XHRcdFx0dGV4dCArPSAnfGFub249eWVzJztcblx0XHRcdH1cblx0XHRcdGlmIChwYXJhbXMucmVhc29uKSB7XG5cdFx0XHRcdHRleHQgKz0gYHxyZWFzb249JHtwYXJhbXMucmVhc29ufWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1zLmRpc2FibGV0YWxrKSB7XG5cdFx0XHRcdHRleHQgKz0gJ3xub3RhbGs9eWVzJztcblx0XHRcdH1cblx0XHRcdC8vIEN1cnJlbnRseSwgYWxsIHBhcnRpYWwgYmxvY2sgdGVtcGxhdGVzIGFyZSBcInN0YW5kYXJkXCJcblx0XHRcdC8vIEJ1aWxkaW5nIHRoZSB0ZW1wbGF0ZSwgaG93ZXZlciwgdGFrZXMgYSBmYWlyIGJpdCBvZiBsb2dpY1xuXHRcdFx0aWYgKHBhcmFtcy5wYXJ0aWFsKSB7XG5cdFx0XHRcdGlmIChwYXJhbXMucGFnZXJlc3RyaWN0aW9ucy5sZW5ndGggfHwgcGFyYW1zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBtYWtlU2VudGVuY2UgPSAoYXJyYXkpID0+IHtcblx0XHRcdFx0XHRcdGlmIChhcnJheS5sZW5ndGggPCAzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhcnJheS5qb2luKCflkownKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IGxhc3QgPSBhcnJheS5wb3AoKTtcblx0XHRcdFx0XHRcdHJldHVybiBgJHthcnJheS5qb2luKCfjgIEnKX3lkowke2xhc3R9YDtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdHRleHQgKz0gJ3xhcmVhPeafkOS6myc7XG5cdFx0XHRcdFx0aWYgKHBhcmFtcy5wYWdlcmVzdHJpY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGV4dCArPSBg6aCB6Z2i77yIJHttYWtlU2VudGVuY2UoXG5cdFx0XHRcdFx0XHRcdHBhcmFtcy5wYWdlcmVzdHJpY3Rpb25zLm1hcCgocCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBgW1s6JHtwfV1dYDtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCl9YDtcblx0XHRcdFx0XHRcdHRleHQgKz0gcGFyYW1zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucy5sZW5ndGggPyAn77yJ5ZKM5p+Q5LqbJyA6ICfvvIknO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocGFyYW1zLm5hbWVzcGFjZXJlc3RyaWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIDEgPT4gVGFsaywgMiA9PiBVc2VyLCBldGMuXG5cdFx0XHRcdFx0XHRjb25zdCBuYW1lc3BhY2VOYW1lcyA9IHBhcmFtcy5uYW1lc3BhY2VyZXN0cmljdGlvbnMubWFwKChpZCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbWVudUZvcm1hdHRlZE5hbWVzcGFjZXNbaWRdO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR0ZXh0ICs9IGAke1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ1tbSGVscDrlkb3lkI3nqbrpl7R85ZG95ZCN56m66Ze0XV3vvIgnLCAnW1tIZWxwOuWRveWQjeepuumWk3zlkb3lkI3nqbrplpNdXe+8iCcpICtcblx0XHRcdFx0XHRcdFx0bWFrZVNlbnRlbmNlKG5hbWVzcGFjZU5hbWVzKVxuXHRcdFx0XHRcdFx0fe+8iWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtcy5hcmVhKSB7XG5cdFx0XHRcdFx0dGV4dCArPSBgfGFyZWE9JHtwYXJhbXMuYXJlYX1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChwYXJhbXMubm9lbWFpbCkge1xuXHRcdFx0XHRcdFx0dGV4dCArPSAnfGVtYWlsPXllcyc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwYXJhbXMubm9jcmVhdGUpIHtcblx0XHRcdFx0XHRcdHRleHQgKz0gJ3xhY2NvdW50Y3JlYXRlPXllcyc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChzZXR0aW5ncy5zaWcpIHtcblx0XHRcdHRleHQgKz0gYHxzaWc9JHtzZXR0aW5ncy5zaWd9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGAke3RleHR9fX1gO1xuXHR9O1xuXHRUd2lua2xlLmJsb2NrLmNhbGxiYWNrLm1haW4gPSAocGFnZW9iaikgPT4ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0Y29uc3QgZGF0ZSA9IG5ldyBNb3JlYml0cy5kYXRlKHBhZ2VvYmouZ2V0TG9hZFRpbWUoKSk7XG5cdFx0Y29uc3Qge21lc3NhZ2VEYXRhfSA9IHBhcmFtcztcblx0XHRsZXQgdGV4dDtcblx0XHRwYXJhbXMuaW5kZWZpbml0ZSA9IE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHBhcmFtcy5leHBpcnkpO1xuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ2JsYW5rVGFsa3BhZ2VPbkluZGVmQmxvY2snKSAmJiBwYXJhbXMudGVtcGxhdGUgIT09ICd1dy1sYmxvY2snICYmIHBhcmFtcy5pbmRlZmluaXRlKSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5qC55o2u5Y+C5pWw6K6+572u5riF56m66K6o6K666aG15bm25Li65pel5pyf5Yib5bu65pawMue6p+agh+mimCcsXG5cdFx0XHRcdFx0J+agueaTmuWBj+WlveioreWumua4heepuuiojuirlumggeS4pueCuuaXpeacn+W7uueri+aWsDLntJrmqJnpoYwnXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHR0ZXh0ID0gYCR7ZGF0ZS5tb250aEhlYWRlcigpfVxcbmA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRleHQgPSBwYWdlb2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRjb25zdCBkYXRlSGVhZGVyUmVnZXggPSBkYXRlLm1vbnRoSGVhZGVyUmVnZXgoKTtcblx0XHRcdGxldCBkYXRlSGVhZGVyUmVnZXhMYXN0O1xuXHRcdFx0bGV0IGRhdGVIZWFkZXJSZWdleFJlc3VsdDtcblx0XHRcdHdoaWxlICgoZGF0ZUhlYWRlclJlZ2V4TGFzdCA9IGRhdGVIZWFkZXJSZWdleC5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuXHRcdFx0XHRkYXRlSGVhZGVyUmVnZXhSZXN1bHQgPSBkYXRlSGVhZGVyUmVnZXhMYXN0O1xuXHRcdFx0fVxuXHRcdFx0Ly8gSWYgZGF0ZUhlYWRlclJlZ2V4UmVzdWx0IGlzIG51bGwgdGhlbiBsYXN0SGVhZGVySW5kZXggaXMgbmV2ZXIgY2hlY2tlZC4gSWYgaXQgaXMgbm90IG51bGwgYnV0XG5cdFx0XHQvLyBcXG49PSBpcyBub3QgZm91bmQsIHRoZW4gdGhlIGRhdGUgaGVhZGVyIG11c3QgYmUgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIHBhZ2UuIGxhc3RJbmRleE9mXG5cdFx0XHQvLyByZXR1cm5zIC0xIGluIHRoaXMgY2FzZSwgc28gbGFzdEhlYWRlckluZGV4IGdldHMgc2V0IHRvIDAgYXMgZGVzaXJlZC5cblx0XHRcdGNvbnN0IGxhc3RIZWFkZXJJbmRleCA9IHRleHQubGFzdEluZGV4T2YoJ1xcbj09JykgKyAxO1xuXHRcdFx0aWYgKHRleHQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0ZXh0ICs9ICdcXG5cXG4nO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFkYXRlSGVhZGVyUmVnZXhSZXN1bHQgfHwgZGF0ZUhlYWRlclJlZ2V4UmVzdWx0LmluZGV4ICE9PSBsYXN0SGVhZGVySW5kZXgpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmnKrmib7liLDlvZPmnIjnmoTkuoznuqfmoIfpopjvvIzlsIbliJvlu7rmlrDnmoQnLCAn5pyq5om+5Yiw55W25pyI55qE5LqM57Sa5qiZ6aGM77yM5bCH5bu656uL5paw55qEJylcblx0XHRcdFx0KTtcblx0XHRcdFx0dGV4dCArPSBgJHtkYXRlLm1vbnRoSGVhZGVyKCl9XFxuYDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cGFyYW1zLmV4cGlyeSA9IHBhcmFtcy50ZW1wbGF0ZV9leHBpcnkgPT09IHVuZGVmaW5lZCA/IHBhcmFtcy5leHBpcnkgOiBwYXJhbXMudGVtcGxhdGVfZXhwaXJ5O1xuXHRcdHRleHQgKz0gVHdpbmtsZS5ibG9jay5jYWxsYmFjay5nZXRCbG9ja05vdGljZVdpa2l0ZXh0KHBhcmFtcyk7XG5cdFx0Ly8gYnVpbGQgdGhlIGVkaXQgc3VtbWFyeVxuXHRcdGxldCBzdW1tYXJ5ID0gcGFyYW1zLnVzZXJ0YWxrX3N1bW1hcnk7XG5cdFx0aWYgKG1lc3NhZ2VEYXRhLnN1cHByZXNzQXJ0aWNsZUluU3VtbWFyeSAhPT0gdHJ1ZSAmJiBwYXJhbXMuYXJ0aWNsZSkge1xuXHRcdFx0c3VtbWFyeSArPSBgJHt3aW5kb3cud2dVTFMoJ++8jOS6jicsICfvvIzmlrwnKX1bWzoke3BhcmFtcy5hcnRpY2xlfV1dYDtcblx0XHR9XG5cdFx0cGFnZW9iai5zZXRQYWdlVGV4dCh0ZXh0KTtcblx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KHN1bW1hcnkpO1xuXHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZignd2F0Y2hCbG9ja05vdGljZXMnKSk7XG5cdFx0cGFnZW9iai5zYXZlKCk7XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUuYmxvY2ssICdibG9jaycpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5cbi8qISBUd2lua2xlLmpzIC0gZnJpZW5kbHl0YWxrYmFjay5qcyAqL1xuKGZ1bmN0aW9uIGZyaWVuZGx5dGFsa2JhY2soJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIGZyaWVuZGx5dGFsa2JhY2suanM6IFRhbGtiYWNrIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IFRhYiAoXCJUQlwiKVxuXHQgKiBBY3RpdmUgb246IEFueSBwYWdlIHdpdGggcmVsZXZhbnQgdXNlciBuYW1lICh1c2Vyc3BhY2UsIGNvbnRyaWJzLCBldGMuKSBleGNlcHQgSVAgcmFuZ2VzXG5cdCAqIENvbmZpZyBkaXJlY3RpdmVzIGluOiBGcmllbmRseUNvbmZpZ1xuXHQgKi9cblx0VHdpbmtsZS50YWxrYmFjayA9ICgpID0+IHtcblx0XHRpZiAoIW13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRUd2lua2xlLnRhbGtiYWNrLmNhbGxiYWNrLFxuXHRcdFx0J+mAmuWRiicsXG5cdFx0XHQnZnJpZW5kbHktdGFsa2JhY2snLFxuXHRcdFx0d2luZG93LndnVUxTKCflm57lpI3pgJrlkYonLCAn5Zue6KaG6YCa5ZGKJylcblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLnRhbGtiYWNrLmNhbGxiYWNrID0gKCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpID09PSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgJiZcblx0XHRcdCFjb25maXJtKHdpbmRvdy53Z1VMUygn5oKo5a+C5a+e5Yiw5LqG6KaB6Ieq5bex5Zue5aSN6Ieq5bex55qE56iL5bqm5LmI77yfJywgJ+aCqOWvguWvnuWIsOS6huimgeiHquW3seWbnuimhuiHquW3seeahOeoi+W6pum6vO+8nycpKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgMzUwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCflm57lpI3pgJrlkYonLCAn5Zue6KaG6YCa5ZGKJykpO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflhbPkuo57e3RhbGtiYWNrfX0nLCAn6Zec5pa8e3t0YWxrYmFja319JyksICdUZW1wbGF0ZTpUYWxrYmFjaycpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn6YCa5ZGK6K6+572uJywgJ+mAmuWRiuioreWumicpLCAnSDpUVy9QUkVGI3RhbGtiYWNrJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI3RhbGtiYWNrJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS50YWxrYmFjay5ldmFsdWF0ZSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3JhZGlvJyxcblx0XHRcdG5hbWU6ICd0YnRhcmdldCcsXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflm57lpI3vvJrmiJHnmoTorqjorrrpobUnLCAn5Zue6KaG77ya5oiR55qE6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdteXRhbGsnLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICd0cnVlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WbnuWkje+8muWFtuS7lueUqOaIt+eahOiuqOiuuumhtScsICflm57opobvvJrlhbbku5bkvb/nlKjogIXnmoToqI7oq5bpoIEnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3VzZXJ0YWxrJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WbnuWkje+8muWFtuWug+mhtemdoicsICflm57opobvvJrlhbblroPpoIHpnaInKSxcblx0XHRcdFx0XHR2YWx1ZTogJ290aGVyJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mCgOivt+iuqOiuuicsICfpgoDoq4voqI7oq5YnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3NlZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJ+mAmuWRiuadv+mAmuefpScsXG5cdFx0XHRcdFx0dmFsdWU6ICdub3RpY2UnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn4oCc5pyJ5paw6YKu5Lu24oCdJywgJ+OAjOacieaWsOmDteS7tuOAjScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbWFpbCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUudGFsa2JhY2suY2hhbmdlVGFyZ2V0LFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRsYWJlbDogJ+W3peS9nOWMuicsXG5cdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHR9KTtcblx0XHRjb25zdCBwcmV2aWV3bGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHQkKHByZXZpZXdsaW5rKS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRUd2lua2xlLnRhbGtiYWNrLnByZXZpZXcocmVzdWx0KTsgLy8gfHJlc3VsdHwgaXMgZGVmaW5lZCBiZWxvd1xuXHRcdH0pO1xuXG5cdFx0cHJldmlld2xpbmsuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuXHRcdHByZXZpZXdsaW5rLnRleHRDb250ZW50ID0gd2luZG93LndnVUxTKCfpooTop4gnLCAn6aCQ6Ka9Jyk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRpZDogJ3RhbGtiYWNrcHJldmlldycsXG5cdFx0XHRsYWJlbDogW3ByZXZpZXdsaW5rXSxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdGlkOiAnZnJpZW5kbHl0YWxrYmFjay1wcmV2aWV3Ym94Jyxcblx0XHRcdHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gZm9ybS5yZW5kZXIoKTtcblx0XHRXaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFdpbmRvdy5kaXNwbGF5KCk7XG5cdFx0cmVzdWx0LnByZXZpZXdlciA9IG5ldyBNb3JlYml0cy53aWtpLnByZXZpZXcoJChyZXN1bHQpLmZpbmQoJ2RpdiNmcmllbmRseXRhbGtiYWNrLXByZXZpZXdib3gnKS5sYXN0KClbMF0pO1xuXHRcdC8vIFdlIG11c3QgaW5pdCB0aGVcblx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRyZXN1bHQudGJ0YXJnZXRbMF0uZGlzcGF0Y2hFdmVudChldnQpO1xuXHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgaGFzIG9wdGVkIG91dCBmcm9tIHRhbGtiYWNrXG5cdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRwcm9wOiAnZXh0bGlua3MnLFxuXHRcdFx0dGl0bGVzOiBgVXNlciB0YWxrOiR7bXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyl9YCxcblx0XHRcdGVscXVlcnk6ICd1c2VyanMuaW52YWxpZC9ub1RhbGtiYWNrJyxcblx0XHRcdGVsbGltaXQ6ICcxJyxcblx0XHR9O1xuXHRcdGNvbnN0IHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0d2luZG93LndnVUxTKCfmipPlj5bpgIDlh7rpgJrlkYrkv6Hmga8nLCAn5oqT5Y+W6YCA5Ye66YCa5ZGK6LOH6KiKJyksXG5cdFx0XHRxdWVyeSxcblx0XHRcdFR3aW5rbGUudGFsa2JhY2suY2FsbGJhY2sub3B0b3V0U3RhdHVzXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdH07XG5cdFR3aW5rbGUudGFsa2JhY2sub3B0b3V0ID0gJyc7XG5cdFR3aW5rbGUudGFsa2JhY2suY2FsbGJhY2sub3B0b3V0U3RhdHVzID0gKGFwaW9iaikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoYXBpb2JqLmdldFhNTCgpKS5maW5kKCdlbCcpO1xuXHRcdGlmICgkZWwubGVuZ3RoKSB7XG5cdFx0XHRUd2lua2xlLnRhbGtiYWNrLm9wdG91dCA9XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpICsgd2luZG93LndnVUxTKCfkuI3luIzmnJvmlLbliLDlm57lpI3pgJrlkYonLCAn5LiN5biM5pyb5pS25Yiw5Zue6KaG6YCa5ZGKJyk7XG5cdFx0XHRjb25zdCB1cmwgPSAkZWwudGV4dCgpO1xuXHRcdFx0Y29uc3QgcmVhc29uID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdyZWFzb24nLCB1cmwpO1xuXHRcdFx0VHdpbmtsZS50YWxrYmFjay5vcHRvdXQgKz0gcmVhc29uID8gYO+8miR7TW9yZWJpdHMuc3RyaW5nLmFwcGVuZFB1bmN0dWF0aW9uKHJlYXNvbil9YCA6ICfjgIInO1xuXHRcdH1cblx0XHQkYm9keS5maW5kKCcjdHdpbmtsZS10YWxrYmFjay1vcHRvdXQtbWVzc2FnZScpLnRleHQoVHdpbmtsZS50YWxrYmFjay5vcHRvdXQpO1xuXHR9O1xuXHRsZXQgcHJldl9wYWdlID0gJyc7XG5cdGxldCBwcmV2X3NlY3Rpb24gPSAnJztcblx0bGV0IHByZXZfbWVzc2FnZSA9ICcnO1xuXHRUd2lua2xlLnRhbGtiYWNrLmNoYW5nZVRhcmdldCA9IChlKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBlLnRhcmdldC52YWx1ZXM7XG5cdFx0Y29uc3Qgcm9vdCA9IGUudGFyZ2V0LmZvcm07XG5cdFx0Y29uc3QgW29sZF9hcmVhXSA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyb290LCAnd29ya19hcmVhJyk7XG5cdFx0aWYgKHJvb3Quc2VjdGlvbikge1xuXHRcdFx0cHJldl9zZWN0aW9uID0gcm9vdC5zZWN0aW9uLnZhbHVlO1xuXHRcdH1cblx0XHRpZiAocm9vdC5tZXNzYWdlKSB7XG5cdFx0XHRwcmV2X21lc3NhZ2UgPSByb290Lm1lc3NhZ2UudmFsdWU7XG5cdFx0fVxuXHRcdGlmIChyb290LnBhZ2UpIHtcblx0XHRcdHByZXZfcGFnZSA9IHJvb3QucGFnZS52YWx1ZTtcblx0XHR9XG5cdFx0bGV0IHdvcmtfYXJlYSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zue5aSN6YCa5ZGK5L+h5oGvJywgJ+WbnuimhumAmuWRiuizh+ioiicpLFxuXHRcdFx0bmFtZTogJ3dvcmtfYXJlYScsXG5cdFx0fSk7XG5cdFx0cm9vdC5wcmV2aWV3ZXIuY2xvc2VQcmV2aWV3KCk7XG5cdFx0c3dpdGNoICh2YWx1ZSkge1xuXHRcdFx0Y2FzZSAndXNlcnRhbGsnOlxuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRsYWJlbDogJycsXG5cdFx0XHRcdFx0c3R5bGU6ICdjb2xvcjogI2YwMCcsXG5cdFx0XHRcdFx0aWQ6ICd0d2lua2xlLXRhbGtiYWNrLW9wdG91dC1tZXNzYWdlJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3BhZ2UnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eUqOaIt++8iOW/heWhq++8iScsICfkvb/nlKjogIXvvIjlv4XloavvvIknKSxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+aCqOeVmeiogOmhtemdoueahOeUqOaIt+WQje+8jOW/heWhq+OAgicsICfmgqjnlZnoqIDpoIHpnaLnmoTkvb/nlKjogIXlkI3nqLHvvIzlv4XloavjgIInKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJldl9wYWdlLFxuXHRcdFx0XHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAnc2VjdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56ug6IqC77yI5Y+v6YCJ77yJJywgJ+eroOevgO+8iOWPr+mBuO+8iScpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmgqjnlZnoqIDnmoTnq6DoioLmoIfpopjvvIznlZnnqbrliJnkuI3kvJrkuqfnlJ/nq6DoioLpk77mjqXjgIInLFxuXHRcdFx0XHRcdFx0J+aCqOeVmeiogOeahOeroOevgOaomemhjO+8jOeVmeepuuWJh+S4jeacg+eUoueUn+eroOevgOmAo+e1kOOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHZhbHVlOiBwcmV2X3NlY3Rpb24sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ25vdGljZSc6IHtcblx0XHRcdFx0Y29uc3Qgbm90aWNlYm9hcmQgPSB3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRuYW1lOiAnbm90aWNlYm9hcmQnLFxuXHRcdFx0XHRcdGxhYmVsOiAn6YCa5ZGK5p2/77yaJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvciAoY29uc3QgW25ibmFtZSwgZGF0YV0gb2YgT2JqZWN0LmVudHJpZXMoVHdpbmtsZS50YWxrYmFjay5ub3RpY2Vib2FyZHMpKSB7XG5cdFx0XHRcdFx0bm90aWNlYm9hcmQuYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwsXG5cdFx0XHRcdFx0XHR2YWx1ZTogbmJuYW1lLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ6ICEhZGF0YS5kZWZhdWx0U2VsZWN0ZWQsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAnc2VjdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56ug6IqC77yI5Y+v6YCJ77yJJywgJ+eroOevgO+8iOWPr+mBuO+8iScpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn56ug6IqC5qCH6aKY77yM55WZ56m65YiZ5LiN5Lya5Lqn55Sf56ug6IqC6ZO+5o6l44CCJywgJ+eroOevgOaomemhjO+8jOeVmeepuuWJh+S4jeacg+eUoueUn+eroOevgOmAo+e1kOOAgicpLFxuXHRcdFx0XHRcdHZhbHVlOiBwcmV2X3NlY3Rpb24sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgJ290aGVyJzpcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bGFiZWw6ICcnLFxuXHRcdFx0XHRcdHN0eWxlOiAnY29sb3I6ICNmMDAnLFxuXHRcdFx0XHRcdGlkOiAndHdpbmtsZS10YWxrYmFjay1vcHRvdXQtbWVzc2FnZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdwYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflrozmlbTpobXpnaLlkI0nLCAn5a6M5pW06aCB6Z2i5ZCNJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOeVmeS4i+a2iOaBr+eahOWujOaVtOmhtemdouWQje+8jOS+i+WmguKAnExJQl90YWxrOummlumhteKAneOAgicsXG5cdFx0XHRcdFx0XHQn5oKo55WZ5LiL6KiK5oGv55qE5a6M5pW06aCB6Z2i5ZCN77yM5L6L5aaC44CMTElCX3RhbGs66aaW6aCB44CN44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6IHByZXZfcGFnZSxcblx0XHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NlY3Rpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eroOiKgu+8iOWPr+mAie+8iScsICfnq6Dnr4DvvIjlj6/pgbjvvIknKSxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5oKo55WZ6KiA55qE56ug6IqC5qCH6aKY77yM55WZ56m65YiZ5LiN5Lya5Lqn55Sf56ug6IqC6ZO+5o6l44CCJyxcblx0XHRcdFx0XHRcdCfmgqjnlZnoqIDnmoTnq6Dnr4DmqJnpoYzvvIznlZnnqbrliYfkuI3mnIPnlKLnlJ/nq6Dnr4DpgKPntZDjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR2YWx1ZTogcHJldl9zZWN0aW9uLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdtYWlsJzpcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRuYW1lOiAnc2VjdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55S15a2Q6YKu5Lu25Li76aKY77yI5Y+v6YCJ77yJJywgJ+mbu+WtkOmDteS7tuS4u+mhjO+8iOWPr+mBuO+8iScpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5oKo5Y+R5Ye655qE55S15a2Q6YKu5Lu255qE5Li76aKY44CCJywgJ+aCqOeZvOWHuueahOmbu+WtkOmDteS7tueahOS4u+mhjOOAgicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzZWUnOlxuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdwYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflrozmlbTpobXpnaLlkI0nLCAn5a6M5pW06aCB6Z2i5ZCNJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOeVmeS4i+a2iOaBr+eahOWujOaVtOmhtemdouWQje+8jOS+i+WmguKAnExJQl90YWxrOummlumhteKAneOAgicsXG5cdFx0XHRcdFx0XHQn5oKo55WZ5LiL6KiK5oGv55qE5a6M5pW06aCB6Z2i5ZCN77yM5L6L5aaC44CMTElCX3RhbGs66aaW6aCB44CN44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6IHByZXZfcGFnZSxcblx0XHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NlY3Rpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eroOiKgu+8iOWPr+mAie+8iScsICfnq6Dnr4DvvIjlj6/pgbjvvIknKSxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5oKo55WZ6KiA55qE56ug6IqC5qCH6aKY77yM55WZ56m65YiZ5LiN5Lya5Lqn55Sf56ug6IqC6ZO+5o6l44CCJyxcblx0XHRcdFx0XHRcdCfmgqjnlZnoqIDnmoTnq6Dnr4DmqJnpoYzvvIznlZnnqbrliYfkuI3mnIPnlKLnlJ/nq6Dnr4DpgKPntZDjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR2YWx1ZTogcHJldl9zZWN0aW9uLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvKiBjYXNlICdteXRhbGsnOiAqL1xuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bGFiZWw6ICcnLFxuXHRcdFx0XHRcdHN0eWxlOiAnY29sb3I6ICNmMDAnLFxuXHRcdFx0XHRcdGlkOiAndHdpbmtsZS10YWxrYmFjay1vcHRvdXQtbWVzc2FnZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdG5hbWU6ICdzZWN0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnq6DoioLvvIjlj6/pgInvvIknLCAn56ug56+A77yI5Y+v6YG477yJJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOeVmeiogOeahOeroOiKguagh+mimO+8jOeVmeepuuWImeS4jeS8muS6p+eUn+eroOiKgumTvuaOpeOAgicsXG5cdFx0XHRcdFx0XHQn5oKo55WZ6KiA55qE56ug56+A5qiZ6aGM77yM55WZ56m65YmH5LiN5pyD55Si55Sf56ug56+A6YCj57WQ44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6IHByZXZfc2VjdGlvbixcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgIT09ICdub3RpY2UnKSB7XG5cdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6ZmE5Yqg5L+h5oGv77yI5Y+v6YCJ77yJ77yaJywgJ+mZhOWKoOizh+ioiu+8iOWPr+mBuO+8ie+8micpLFxuXHRcdFx0XHRuYW1lOiAnbWVzc2FnZScsXG5cdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5Lya5Zyo5Zue5aSN6YCa5ZGK5qih5p2/5LiL5Ye6546w55qE5raI5oGv77yM5oKo55qE562+5ZCN5Lya6KKr5Yqg5Zyo5pyA5ZCO44CCJyxcblx0XHRcdFx0XHQn5pyD5Zyo5Zue6KaG6YCa5ZGK5qih5p2/5LiL5Ye654++55qE6KiK5oGv77yM5oKo55qE57C95ZCN5pyD6KKr5Yqg5Zyo5pyA5b6M44CCJ1xuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRyb290LnJlcGxhY2VDaGlsZCh3b3JrX2FyZWEsIG9sZF9hcmVhKTtcblx0XHRpZiAocm9vdC5tZXNzYWdlKSB7XG5cdFx0XHRyb290Lm1lc3NhZ2UudmFsdWUgPSBwcmV2X21lc3NhZ2U7XG5cdFx0fVxuXHRcdCRib2R5LmZpbmQoJyN0d2lua2xlLXRhbGtiYWNrLW9wdG91dC1tZXNzYWdlJykudGV4dChUd2lua2xlLnRhbGtiYWNrLm9wdG91dCk7XG5cdH07XG5cdFR3aW5rbGUudGFsa2JhY2subm90aWNlYm9hcmRzID0ge1xuXHRcdGFmZnA6IHtcblx0XHRcdGxhYmVsOiBgTElCOkFGL0ZQ77yIJHt3aW5kb3cud2dVTFMoJ+i/h+a7pOWZqOWkhOeQhi/miqXlkYonLCAn6YGO5r++5Zmo6JmV55CGL+WgseWRiicpfe+8iWAsXG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfov4fmu6TlmajplJnor6/miqXlkYrmnInmlrDlm57lupQnLCAn6YGO5r++5Zmo6Yyv6Kqk5aCx5ZGK5pyJ5paw5Zue5oeJJyksXG5cdFx0XHRjb250ZW50OiBgJHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfmgqjnmoRbW0xJQl90YWxrOui/h+a7pOWZqOWkhOeQhi/miqXlkYp86L+H5ruk5Zmo6ZSZ6K+v5oql5ZGKXV3lt7LmnInlm57lupTvvIzor7fliY3lvoDmn6XnnIvjgIInLFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrov4fmu6TlmajlpITnkIYv5oql5ZGKfOmBjua/vuWZqOmMr+iqpOWgseWRil1d5bey5pyJ5Zue5oeJ77yM6KuL5YmN5b6A5p+l55yL44CCJ1xuXHRcdFx0KX0tLX5+YC5jb25jYXQoJ35+JyksXG5cdFx0XHRlZGl0U3VtbWFyeTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQn5pyJ5YWzW1tMSUJfdGFsazrov4fmu6TlmajlpITnkIYv5oql5ZGKfOi/h+a7pOWZqOmUmeivr+aKpeWRil1d55qE6YCa55+lJyxcblx0XHRcdFx0J+aciemXnFtbTElCX3RhbGs66L+H5ruk5Zmo5aSE55CGL+aKpeWRinzpgY7mv77lmajpjK/oqqTloLHlkYpdXeeahOmAmuefpSdcblx0XHRcdCksXG5cdFx0XHRkZWZhdWx0U2VsZWN0ZWQ6IHRydWUsXG5cdFx0fSxcblx0XHRzYmw6IHtcblx0XHRcdGxhYmVsOiAnU3BhbS1ibGFja2xpc3QnLFxuXHRcdFx0dGl0bGU6IHdpbmRvdy53Z1VMUygn5Z6D5Zy+6ZO+5o6l6buR5ZCN5Y2V6K+35rGC5pyJ5paw5Zue5bqUJywgJ+Weg+WcvumAo+e1kOm7keWQjeWWruiri+axguacieaWsOWbnuaHiScpLFxuXHRcdFx0Y29udGVudDogYCR7d2luZG93LndnVUxTKFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb985Z6D5Zy+6ZO+5o6l6buR5ZCN5Y2V6K+35rGCXV3lt7LmnInlm57lupTvvIzor7fliY3lvoDmn6XnnIvjgIInLFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb985Z6D5Zy+6YCj57WQ6buR5ZCN5Zau6KuL5rGCXV3lt7LmnInlm57mh4nvvIzoq4vliY3lvoDmn6XnnIvjgIInXG5cdFx0XHQpfS0tfn5gLmNvbmNhdCgnfn4nKSxcblx0XHRcdGVkaXRTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfmnInlhbNbW0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadv3zlnoPlnL7pk77mjqXpu5HlkI3ljZXor7fmsYJdXeeahOmAmuefpScsXG5cdFx0XHRcdCfmnInpl5xbW0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadv3zlnoPlnL7pgKPntZDpu5HlkI3llq7oq4vmsYJdXeeahOmAmuefpSdcblx0XHRcdCksXG5cdFx0fSxcblx0XHRzaGw6IHtcblx0XHRcdGxhYmVsOiAnU3BhbS13aGl0ZWxpc3QnLFxuXHRcdFx0dGl0bGU6IHdpbmRvdy53Z1VMUygn5Z6D5Zy+6ZO+5o6l55m95ZCN5Y2V6K+35rGC5pyJ5paw5Zue5bqUJywgJ+Weg+WcvumAo+e1kOeZveWQjeWWruiri+axguacieaWsOWbnuaHiScpLFxuXHRcdFx0Y29udGVudDogYCR7d2luZG93LndnVUxTKFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb985Z6D5Zy+6ZO+5o6l55m95ZCN5Y2V6K+35rGCXV3lt7LmnInlm57lupTvvIzor7fliY3lvoDmn6XnnIvjgIInLFxuXHRcdFx0XHQn5oKo55qEW1tMSUJfdGFsazrnrqHnkIblkZjlkYrnpLrmnb985Z6D5Zy+6YCj57WQ55m95ZCN5Zau6KuL5rGCXV3lt7LmnInlm57mh4nvvIzoq4vliY3lvoDmn6XnnIvjgIInXG5cdFx0XHQpfS0tfn5gLmNvbmNhdCgnfn4nKSxcblx0XHRcdGVkaXRTdW1tYXJ5OiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfmnInlhbNbW0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadv3zlnoPlnL7pk77mjqXnmb3lkI3ljZXor7fmsYJdXeeahOmAmuefpScsXG5cdFx0XHRcdCfmnInpl5xbW0xJQl90YWxrOueuoeeQhuWRmOWRiuekuuadv3zlnoPlnL7pgKPntZDnmb3lkI3llq7oq4vmsYJdXeeahOmAmuefpSdcblx0XHRcdCksXG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS50YWxrYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IFt0YnRhcmdldF0gPSBmb3JtLmdldENoZWNrZWQoJ3RidGFyZ2V0Jyk7XG5cdFx0bGV0IHBhZ2U7XG5cdFx0bGV0IG1lc3NhZ2U7XG5cdFx0Y29uc3Qgc2VjdGlvbiA9IGZvcm0uc2VjdGlvbi52YWx1ZTtcblx0XHRsZXQgZWRpdFN1bW1hcnk7XG5cdFx0aWYgKHRidGFyZ2V0ID09PSAnbm90aWNlJykge1xuXHRcdFx0cGFnZSA9IGZvcm0ubm90aWNlYm9hcmQudmFsdWU7XG5cdFx0XHQoe2VkaXRTdW1tYXJ5fSA9IFR3aW5rbGUudGFsa2JhY2subm90aWNlYm9hcmRzW3BhZ2VdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gdXNlcnRhbGssIG90aGVyLCBzZWVcblx0XHRcdHBhZ2UgPSBmb3JtLnBhZ2UgPyBmb3JtLnBhZ2UudmFsdWUgOiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyk7XG5cdFx0XHRpZiAoZm9ybS5tZXNzYWdlKSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBmb3JtLm1lc3NhZ2UudmFsdWUudHJpbSgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRidGFyZ2V0ID09PSAnbWFpbCcpIHtcblx0XHRcdFx0ZWRpdFN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+mAmuefpe+8muacieaWsOmCruS7ticsICfpgJrnn6XvvJrmnInmlrDpg7Xku7YnKTtcblx0XHRcdH0gZWxzZSBpZiAodGJ0YXJnZXQgPT09ICdzZWUnKSB7XG5cdFx0XHRcdGVkaXRTdW1tYXJ5ID0gYCR7d2luZG93LndnVUxTKCfor7fnnIvnnIsnLCAn6KuL55yL55yLJyl9W1s6JHtwYWdlfSR7c2VjdGlvbiA/IGAjJHtzZWN0aW9ufWAgOiAnJ31dXSR7d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdCfkuIrnmoTorqjorronLFxuXHRcdFx0XHRcdCfkuIrnmoToqI7oq5YnXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHRidGFyZ2V0IG9uZSBvZiBteXRhbGssIHVzZXJ0YWxrLCBvdGhlclxuXHRcdFx0XHRlZGl0U3VtbWFyeSA9IGAke3dpbmRvdy53Z1VMUygn5Zue5aSN6YCa5ZGKJywgJ+WbnuimhumAmuWRiicpfe+8iFtbOmA7XG5cdFx0XHRcdGlmICh0YnRhcmdldCAhPT0gJ290aGVyJyAmJiAhbmV3IFJlZ0V4cChgXlxcXFxzKiR7TW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoMyl9OmAsICdpJykudGVzdChwYWdlKSkge1xuXHRcdFx0XHRcdGVkaXRTdW1tYXJ5ICs9ICdVc2VyIHRhbGs6Jztcblx0XHRcdFx0fVxuXHRcdFx0XHRlZGl0U3VtbWFyeSArPSBgJHtwYWdlICsgKHNlY3Rpb24gPyBgIyR7c2VjdGlvbn1gIDogJycpfV1dKWA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0Y29uc3QgZnVsbFVzZXJUYWxrUGFnZU5hbWUgPSBgJHtcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW213LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlSWRzJykudXNlcl90YWxrXVxuXHRcdH06JHttdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKX1gO1xuXHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gZnVsbFVzZXJUYWxrUGFnZU5hbWU7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKFxuXHRcdFx0J+WbnuWkjemAmuWRiuWujOaIkO+8jOWwhuWcqOWHoOenkuWGheWIt+aWsOmhtemdoicsXG5cdFx0XHQn5Zue6KaG6YCa5ZGK5a6M5oiQ77yM5bCH5Zyo5bm+56eS5YWn6YeN5paw5pW055CG6aCB6Z2iJ1xuXHRcdCk7XG5cdFx0Y29uc3QgdGV4dCA9IGBcXG5cXG4ke1R3aW5rbGUudGFsa2JhY2suZ2V0Tm90aWNlV2lraXRleHQodGJ0YXJnZXQsIHBhZ2UsIHNlY3Rpb24sIG1lc3NhZ2UpWzBdfWA7XG5cdFx0Y29uc3QgdGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKGZ1bGxVc2VyVGFsa1BhZ2VOYW1lLCB3aW5kb3cud2dVTFMoJ+WKoOWFpeWbnuWkjemAmuWRiicsICfliqDlhaXlm57opobpgJrlkYonKSk7XG5cdFx0dGFsa3BhZ2Uuc2V0RWRpdFN1bW1hcnkoZWRpdFN1bW1hcnkpO1xuXHRcdHRhbGtwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHR0YWxrcGFnZS5zZXRBcHBlbmRUZXh0KHRleHQpO1xuXHRcdHRhbGtwYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHR0YWxrcGFnZS5zZXRNaW5vckVkaXQoVHdpbmtsZS5nZXRQcmVmKCdtYXJrVGFsa2JhY2tBc01pbm9yJykpO1xuXHRcdHRhbGtwYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdHRhbGtwYWdlLmFwcGVuZCgpO1xuXHR9O1xuXHRUd2lua2xlLnRhbGtiYWNrLnByZXZpZXcgPSAoZm9ybSkgPT4ge1xuXHRcdGNvbnN0IFt0YnRhcmdldF0gPSBmb3JtLmdldENoZWNrZWQoJ3RidGFyZ2V0Jyk7XG5cdFx0Y29uc3Qgc2VjdGlvbiA9IGZvcm0uc2VjdGlvbi52YWx1ZTtcblx0XHRsZXQgcGFnZTtcblx0XHRsZXQgbWVzc2FnZTtcblx0XHRpZiAodGJ0YXJnZXQgPT09ICdub3RpY2UnKSB7XG5cdFx0XHRwYWdlID0gZm9ybS5ub3RpY2Vib2FyZC52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gdXNlcnRhbGssIG90aGVyLCBzZWVcblx0XHRcdHBhZ2UgPSBmb3JtLnBhZ2UgPyBmb3JtLnBhZ2UudmFsdWUgOiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyk7XG5cdFx0XHRpZiAoZm9ybS5tZXNzYWdlKSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBmb3JtLm1lc3NhZ2UudmFsdWUudHJpbSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBbbm90aWNldGV4dF0gPSBUd2lua2xlLnRhbGtiYWNrLmdldE5vdGljZVdpa2l0ZXh0KHRidGFyZ2V0LCBwYWdlLCBzZWN0aW9uLCBtZXNzYWdlKTtcblx0XHRmb3JtLnByZXZpZXdlci5iZWdpblJlbmRlcihub3RpY2V0ZXh0LCBgVXNlcl90YWxrOiR7bXcuY29uZmlnLmdldCgnd2dSZWxldmFudFVzZXJOYW1lJyl9YCk7IC8vIEZvcmNlIHdpa2l0ZXh0L2NvcnJlY3QgdXNlcm5hbWVcblx0fTtcblxuXHRUd2lua2xlLnRhbGtiYWNrLmdldE5vdGljZVdpa2l0ZXh0ID0gKHRidGFyZ2V0LCBwYWdlLCBzZWN0aW9uLCBtZXNzYWdlKSA9PiB7XG5cdFx0bGV0IHRleHQ7XG5cdFx0bGV0IHRpdGxlO1xuXHRcdGxldCBjb250ZW50O1xuXHRcdGlmICh0YnRhcmdldCA9PT0gJ25vdGljZScpIHtcblx0XHRcdCh7dGl0bGV9ID0gVHdpbmtsZS50YWxrYmFjay5ub3RpY2Vib2FyZHNbcGFnZV0pO1xuXHRcdFx0Y29udGVudCA9IE1vcmViaXRzLnN0cmluZy5zYWZlUmVwbGFjZShUd2lua2xlLnRhbGtiYWNrLm5vdGljZWJvYXJkc1twYWdlXS5jb250ZW50LCAnJFNFQ1RJT04nLCBzZWN0aW9uKTtcblx0XHRcdHRleHQgPSBgPT0gJHt0aXRsZX0gPT1cXG4ke2NvbnRlbnR9YDtcblx0XHR9IGVsc2UgaWYgKHRidGFyZ2V0ID09PSAnc2VlJykge1xuXHRcdFx0dGl0bGUgPSBwYWdlICsgd2luZG93LndnVUxTKCfnmoTnm7jlhbPorqjorronLCAn55qE55u46Zec6KiO6KuWJyk7XG5cdFx0XHRjb250ZW50ID0gJ3t7Jy5jb25jYXQoXG5cdFx0XHRcdCdzdWJzdDonLFxuXHRcdFx0XHRgUGxlYXNlIHNlZXxsb2NhdGlvbj0ke3BhZ2V9JHtzZWN0aW9uID8gYCMke3NlY3Rpb259YCA6ICcnfXxtb3JlPSR7bWVzc2FnZS50cmltKCl9fX1gXG5cdFx0XHQpO1xuXHRcdFx0dGV4dCA9ICd7eycuY29uY2F0KFxuXHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0YFBsZWFzZSBzZWV8bG9jYXRpb249JHtwYWdlfSR7c2VjdGlvbiA/IGAjJHtzZWN0aW9ufWAgOiAnJ318bW9yZT0ke21lc3NhZ2UudHJpbSgpfX19YFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGV4dCA9ICc9PSc7XG5cdFx0XHRpZiAodGJ0YXJnZXQgPT09ICdtYWlsJykge1xuXHRcdFx0XHR0aXRsZSA9IFR3aW5rbGUuZ2V0UHJlZignbWFpbEhlYWRpbmcnKTtcblx0XHRcdFx0Y29udGVudCA9IGB7e1lvdSd2ZSBnb3QgbWFpbHxzdWJqZWN0PSR7c2VjdGlvbn18dHM9fn5gLmNvbmNhdCgnficsICd+fn19Jyk7XG5cdFx0XHRcdHRleHQgKz0gYCR7VHdpbmtsZS5nZXRQcmVmKCdtYWlsSGVhZGluZycpfT09XFxue3tZb3UndmUgZ290IG1haWx8c3ViamVjdD0ke3NlY3Rpb259YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHRidGFyZ2V0IG9uZSBvZiBteXRhbGssIHVzZXJ0YWxrLCBvdGhlclxuXHRcdFx0XHQvLyBjbGVhbiB0YWxrYmFjayBoZWFkaW5nOiBzdHJpcCBzZWN0aW9uIGhlYWRlciBtYXJrZXJzIHRoYXQgd2VyZSBlcnJvbmVvdXNseSBzdWdnZXN0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb25cblx0XHRcdFx0dGl0bGUgPSBUd2lua2xlLmdldFByZWYoJ3RhbGtiYWNrSGVhZGluZycpLnJlcGxhY2UoL15cXHMqPStcXHMqKC4qPylcXHMqPSskXFxzKi8sICckMScpO1xuXHRcdFx0XHRjb250ZW50ID0gYHt7dGFsa2JhY2t8JHtwYWdlfSR7c2VjdGlvbiA/IGB8JHtzZWN0aW9ufWAgOiAnJ31gO1xuXHRcdFx0XHR0ZXh0ICs9IGAke1R3aW5rbGUuZ2V0UHJlZigndGFsa2JhY2tIZWFkaW5nJykucmVwbGFjZShcblx0XHRcdFx0XHQvXlxccyo9K1xccyooLio/KVxccyo9KyRcXHMqLyxcblx0XHRcdFx0XHQnJDEnXG5cdFx0XHRcdCl9PT1cXG57e3RhbGtiYWNrfCR7cGFnZX0ke3NlY3Rpb24gPyBgfCR7c2VjdGlvbn1gIDogJyd9YDtcblx0XHRcdH1cblx0XHRcdGNvbnRlbnQgKz0gJ3x0cz1+ficuY29uY2F0KCd+JywgJ35+fX0nKTtcblx0XHRcdHRleHQgKz0gJ3x0cz1+ficuY29uY2F0KCd+JywgJ35+fX0nKTtcblx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdGNvbnRlbnQgKz0gYFxcbiR7bWVzc2FnZX1gO1xuXHRcdFx0XHR0ZXh0ICs9IGBcXG4ke21lc3NhZ2V9ICB+fmAuY29uY2F0KCd+ficpO1xuXHRcdFx0fSBlbHNlIGlmIChUd2lua2xlLmdldFByZWYoJ2luc2VydFRhbGtiYWNrU2lnbmF0dXJlJykpIHtcblx0XHRcdFx0dGV4dCArPSAnXFxufn4nLmNvbmNhdCgnfn4nKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFt0ZXh0LCB0aXRsZSwgY29udGVudF07XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUudGFsa2JhY2ssICd0YWxrYmFjaycpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge2dlbmVyYXRlQXJyYXl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZXNwZWVkeS5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGVzcGVlZHkoJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIHR3aW5rbGVzcGVlZHkuanM6IENTRCBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiQ1NEXCIpXG5cdCAqIEFjdGl2ZSBvbjogTm9uLXNwZWNpYWwsIGV4aXN0aW5nIHBhZ2VzXG5cdCAqXG5cdCAqIE5PVEUgRk9SIERFVkVMT1BFUlM6XG5cdCAqICBJZiBhZGRpbmcgYSBuZXcgY3JpdGVyaW9uLCBhZGQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlcyBhdCB0aGUgdG9wIG9mXG5cdCAqICB0d2lua2xlY29uZmlnLmpzLlxuXHQgKiAgQWxzbywgY2hlY2sgb3V0IHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgQ1NEIHByZWZlcmVuY2VzIGluIHR3aW5rbGUuanMsXG5cdCAqICBhbmQgYWRkIHlvdXIgbmV3IGNyaXRlcmlvbiB0byB0aG9zZSBpZiB5b3UgdGhpbmsgaXQgd291bGQgYmUgZ29vZC5cblx0ICovXG5cdFR3aW5rbGUuc3BlZWR5ID0gKCkgPT4ge1xuXHRcdC8vIERpc2FibGUgb246XG5cdFx0Ly8gKiBzcGVjaWFsIHBhZ2VzXG5cdFx0Ly8gKiBub24tZXhpc3RlbnQgcGFnZXNcblx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA8IDAgfHwgIW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLFxuXHRcdFx0d2luZG93LndnVUxTKCfpgJ/liKAnLCAn6YCf5YiqJyksXG5cdFx0XHQndHctY3NkJyxcblx0XHRcdE1vcmViaXRzLnVzZXJJc1N5c29wID8gd2luZG93LndnVUxTKCflv6vpgJ/liKDpmaQnLCAn5b+r6YCf5Yiq6ZmkJykgOiB3aW5kb3cud2dVTFMoJ+ivt+axguW/q+mAn+WIoOmZpCcsICfoq4vmsYLlv6vpgJ/liKrpmaQnKVxuXHRcdCk7XG5cdH07XG5cdC8vIFRoaXMgZnVuY3Rpb24gaXMgcnVuIHdoZW4gdGhlIENTRCB0YWIvaGVhZGVyIGxpbmsgaXMgY2xpY2tlZFxuXHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRUd2lua2xlLnNwZWVkeS5pbml0RGlhbG9nKFxuXHRcdFx0TW9yZWJpdHMudXNlcklzU3lzb3AgPyBUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5ldmFsdWF0ZVN5c29wIDogVHdpbmtsZS5zcGVlZHkuY2FsbGJhY2suZXZhbHVhdGVVc2VyLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH07XG5cdC8vIFVzZWQgYnkgdW5saW5rIGZlYXR1cmVcblx0VHdpbmtsZS5zcGVlZHkuZGlhbG9nID0gbnVsbDtcblx0Ly8gVXNlZCB0aHJvdWdob3V0XG5cdFR3aW5rbGUuc3BlZWR5Lmhhc0NTRCA9ICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RlbGV0ZS1yZWFzb24nKTtcblx0Ly8gVGhlIHNwZWVkeSBjcml0ZXJpYSBsaXN0IGNhbiBiZSBpbiBvbmUgb2Ygc2V2ZXJhbCBtb2Rlc1xuXHRUd2lua2xlLnNwZWVkeS5tb2RlID0ge1xuXHRcdHN5c29wU2luZ2xlU3VibWl0OiAxLFxuXHRcdC8vIHJhZGlvIGJ1dHRvbnMsIG5vIHN1Ymdyb3Vwcywgc3VibWl0IHdoZW4gXCJTdWJtaXRcIiBidXR0b24gaXMgY2xpY2tlZFxuXHRcdHN5c29wUmFkaW9DbGljazogMixcblx0XHQvLyByYWRpbyBidXR0b25zLCBubyBzdWJncm91cHMsIHN1Ym1pdCB3aGVuIGEgcmFkaW8gYnV0dG9uIGlzIGNsaWNrZWRcblx0XHRzeXNvcE11bHRpcGxlU3VibWl0OiAzLFxuXHRcdC8vIGNoZWNrIGJveGVzLCBzdWJncm91cHMsIFwiU3VibWl0XCIgYnV0dG9uIGFscmVhZHkgcHJlc2VudFxuXHRcdHN5c29wTXVsdGlwbGVSYWRpb0NsaWNrOiA0LFxuXHRcdC8vIGNoZWNrIGJveGVzLCBzdWJncm91cHMsIG5lZWQgdG8gYWRkIGEgXCJTdWJtaXRcIiBidXR0b25cblx0XHR1c2VyTXVsdGlwbGVTdWJtaXQ6IDUsXG5cdFx0Ly8gY2hlY2sgYm94ZXMsIHN1Ymdyb3VwcywgXCJTdWJtaXRcIiBidXR0b24gYWxyZWFkeSBwcmVzc2VudFxuXHRcdHVzZXJNdWx0aXBsZVJhZGlvQ2xpY2s6IDYsXG5cdFx0Ly8gY2hlY2sgYm94ZXMsIHN1Ymdyb3VwcywgbmVlZCB0byBhZGQgYSBcIlN1Ym1pdFwiIGJ1dHRvblxuXHRcdHVzZXJTaW5nbGVTdWJtaXQ6IDcsXG5cdFx0Ly8gcmFkaW8gYnV0dG9ucywgc3ViZ3JvdXBzLCBzdWJtaXQgd2hlbiBcIlN1Ym1pdFwiIGJ1dHRvbiBpcyBjbGlja2VkXG5cdFx0dXNlclNpbmdsZVJhZGlvQ2xpY2s6IDgsXG5cdFx0Ly8gcmFkaW8gYnV0dG9ucywgc3ViZ3JvdXBzLCBzdWJtaXQgd2hlbiBhIHJhZGlvIGJ1dHRvbiBpcyBjbGlja2VkXG5cdFx0Ly8gYXJlIHdlIGluIFwiZGVsZXRlIHBhZ2VcIiBtb2RlP1xuXHRcdC8vIChzeXNvcHMgY2FuIGFjY2VzcyBib3RoIFwiZGVsZXRlIHBhZ2VcIiBbc3lzb3BdIGFuZCBcInRhZyBwYWdlIG9ubHlcIiBbdXNlcl0gbW9kZXMpXG5cdFx0aXNTeXNvcDogKG1vZGUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BTaW5nbGVTdWJtaXQgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS5zeXNvcE11bHRpcGxlU3VibWl0IHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BSYWRpb0NsaWNrIHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BNdWx0aXBsZVJhZGlvQ2xpY2tcblx0XHRcdCk7XG5cdFx0fSxcblx0XHQvLyBkbyB3ZSBoYXZlIGEgXCJTdWJtaXRcIiBidXR0b24gb25jZSB0aGUgZm9ybSBpcyBjcmVhdGVkP1xuXHRcdGhhc1N1Ym1pdEJ1dHRvbjogKG1vZGUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BTaW5nbGVTdWJtaXQgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS5zeXNvcE11bHRpcGxlU3VibWl0IHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BNdWx0aXBsZVJhZGlvQ2xpY2sgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS51c2VyTXVsdGlwbGVTdWJtaXQgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS51c2VyTXVsdGlwbGVSYWRpb0NsaWNrIHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUudXNlclNpbmdsZVN1Ym1pdFxuXHRcdFx0KTtcblx0XHR9LFxuXHRcdC8vIGlzIGRiLW11bHRpcGxlIHRoZSBvdXRjb21lIGhlcmU/XG5cdFx0aXNNdWx0aXBsZTogKG1vZGUpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUudXNlck11bHRpcGxlU3VibWl0IHx8XG5cdFx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BNdWx0aXBsZVN1Ym1pdCB8fFxuXHRcdFx0XHRtb2RlID09PSBUd2lua2xlLnNwZWVkeS5tb2RlLnVzZXJNdWx0aXBsZVJhZGlvQ2xpY2sgfHxcblx0XHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS5zeXNvcE11bHRpcGxlUmFkaW9DbGlja1xuXHRcdFx0KTtcblx0XHR9LFxuXHR9O1xuXHQvLyBQcmVwYXJlcyB0aGUgc3BlZWR5IGRlbGV0aW9uIGRpYWxvZyBhbmQgZGlzcGxheXMgaXRcblx0VHdpbmtsZS5zcGVlZHkuaW5pdERpYWxvZyA9IChjYWxsYmFja2Z1bmMpID0+IHtcblx0XHRUd2lua2xlLnNwZWVkeS5kaWFsb2cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KFxuXHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlXaW5kb3dXaWR0aCcpLFxuXHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlXaW5kb3dIZWlnaHQnKVxuXHRcdCk7XG5cdFx0Y29uc3Qge2RpYWxvZ30gPSBUd2lua2xlLnNwZWVkeTtcblx0XHRkaWFsb2cuc2V0VGl0bGUod2luZG93LndnVUxTKCfpgInmi6nlv6vpgJ/liKDpmaTnkIbnlLEnLCAn6YG45pOH5b+r6YCf5Yiq6Zmk55CG55SxJykpO1xuXHRcdGRpYWxvZy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0ZGlhbG9nLmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflv6vpgJ/liKDpmaTmlrnpkognLCAn5b+r6YCf5Yiq6Zmk5pa56YedJyksICdMSUI6Q1NEJyk7XG5cdFx0ZGlhbG9nLmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCfpgJ/liKDorr7nva4nLCAn6YCf5Yiq6Kit5a6aJyksICdIOlRXL1BSRUYjc3BlZWR5Jyk7XG5cdFx0ZGlhbG9nLmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI3NwZWVkeScpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFxuXHRcdFx0Y2FsbGJhY2tmdW5jLFxuXHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlTZWxlY3Rpb25TdHlsZScpID09PSAncmFkaW9DbGljaycgPyAnY2hhbmdlJyA6IG51bGxcblx0XHQpO1xuXHRcdGlmIChNb3JlYml0cy51c2VySXNTeXNvcCkge1xuXHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y+q5qCH6K6w77yM5LiN5Yig6ZmkJywgJ+WPquaomeiomO+8jOS4jeWIqumZpCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICd0YWdfb25seScsXG5cdFx0XHRcdFx0XHRuYW1lOiAndGFnX29ubHknLFxuXHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfoi6Xmgqjlj6rmg7PmoIforrDmraTpobXpnaLogIzkuI3mmK/lsIblhbbliKDpmaQnLCAn6Iul5oKo5Y+q5oOz5qiZ6KiY5q2k6aCB6Z2i6ICM5LiN5piv5bCH5YW25Yiq6ZmkJyksXG5cdFx0XHRcdFx0XHRjaGVja2VkOiAhKFR3aW5rbGUuc3BlZWR5Lmhhc0NTRCB8fCBUd2lua2xlLmdldFByZWYoJ2RlbGV0ZVN5c29wRGVmYXVsdFRvRGVsZXRlJykpLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjRm9ybSA9IGV2ZW50LnRhcmdldC5mb3JtO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuXHRcdFx0XHRcdFx0XHQvLyBlbmFibGUvZGlzYWJsZSB0YWxrIHBhZ2UgY2hlY2tib3hcblx0XHRcdFx0XHRcdFx0aWYgKGNGb3JtLnRhbGtwYWdlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y0Zvcm0udGFsa3BhZ2UuZGlzYWJsZWQgPSBjQ2hlY2tlZDtcblx0XHRcdFx0XHRcdFx0XHRjRm9ybS50YWxrcGFnZS5jaGVja2VkID0gIWNDaGVja2VkICYmIFR3aW5rbGUuZ2V0UHJlZignZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZScpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIGVuYWJsZS9kaXNhYmxlIHJlZGlyZWN0cyBjaGVja2JveFxuXHRcdFx0XHRcdFx0XHRjRm9ybS5yZWRpcmVjdHMuZGlzYWJsZWQgPSBjQ2hlY2tlZDtcblx0XHRcdFx0XHRcdFx0Y0Zvcm0ucmVkaXJlY3RzLmNoZWNrZWQgPSAhY0NoZWNrZWQ7XG5cdFx0XHRcdFx0XHRcdC8vIGVuYWJsZS9kaXNhYmxlIGRlbGV0ZSBtdWx0aXBsZVxuXHRcdFx0XHRcdFx0XHRjRm9ybS5kZWxtdWx0aXBsZS5kaXNhYmxlZCA9IGNDaGVja2VkO1xuXHRcdFx0XHRcdFx0XHRjRm9ybS5kZWxtdWx0aXBsZS5jaGVja2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdC8vIGVuYWJsZS9kaXNhYmxlIG9wZW4gdGFsayBwYWdlIGNoZWNrYm94XG5cdFx0XHRcdFx0XHRcdGNGb3JtLm9wZW51c2VydGFsay5kaXNhYmxlZCA9IGNDaGVja2VkO1xuXHRcdFx0XHRcdFx0XHRjRm9ybS5vcGVudXNlcnRhbGsuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHQvLyBlbmFibGUvZGlzYWJsZSBub3RpZnkgY2hlY2tib3hcblx0XHRcdFx0XHRcdFx0Y0Zvcm0ubm90aWZ5LmRpc2FibGVkID0gIWNDaGVja2VkO1xuXHRcdFx0XHRcdFx0XHRjRm9ybS5ub3RpZnkuY2hlY2tlZCA9IGNDaGVja2VkO1xuXHRcdFx0XHRcdFx0XHQvLyBlbmFibGUvZGlzYWJsZSBtdWx0aXBsZVxuXHRcdFx0XHRcdFx0XHRjRm9ybS5tdWx0aXBsZS5kaXNhYmxlZCA9ICFjQ2hlY2tlZDtcblx0XHRcdFx0XHRcdFx0Y0Zvcm0ubXVsdGlwbGUuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHQvLyBlbmFibGUgcmVxdWVzdGluZyBjcmVhdGlvbiBwcm90ZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNGb3JtLnNhbHRpbmcuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5tb2RlQ2hhbmdlZChjRm9ybSk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBkZWxldGVPcHRpb25zID0gZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0bmFtZTogJ2RlbGV0ZV9vcHRpb25zJyxcblx0XHRcdH0pO1xuXHRcdFx0ZGVsZXRlT3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk55u45YWz6YCJ6aG5JywgJ+WIqumZpOebuOmXnOmBuOmghScpLFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSAlIDIgPT09IDAgJiYgbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSAhPT0gMikge1xuXHRcdFx0XHQvLyBoaWRlIG9wdGlvbiBmb3IgdXNlciBwYWdlcywgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IGRlbGV0aW5nIHVzZXIgdGFsayBwYWdlXG5cdFx0XHRcdGRlbGV0ZU9wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk6K6o6K666aG1JywgJ+WIqumZpOiojuirlumggScpLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ3RhbGtwYWdlJyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3RhbGtwYWdlJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfliKDpmaTml7bpmYTluKbliKDpmaTmraTpobXpnaLnmoTorqjorrrpobXjgIInLCAn5Yiq6Zmk5pmC6ZmE5bi25Yiq6Zmk5q2k6aCB6Z2i55qE6KiO6KuW6aCB44CCJyksXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuZ2V0UHJlZignZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZScpLFxuXHRcdFx0XHRcdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlT3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk6YeN5a6a5ZCRJywgJ+WIqumZpOmHjeaWsOWwjuWQkScpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICdyZWRpcmVjdHMnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+WIoOmZpOWIsOatpOmhteeahOmHjeWumuWQkeOAgicsICfliKrpmaTliLDmraTpoIHnmoTph43mlrDlsI7lkJHjgIInKSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IFR3aW5rbGUuZ2V0UHJlZignZGVsZXRlUmVkaXJlY3RzT25EZWxldGUnKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHRcdGRlbGV0ZU9wdGlvbnMuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W6lOeUqOWkmuS4queQhueUseWIoOmZpCcsICfmh4nnlKjlpJrlgIvnkIbnlLHliKrpmaQnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnZGVsbXVsdGlwbGUnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ2RlbG11bHRpcGxlJyxcblx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5oKo5Y+v6YCJ5oup5bqU55So5LqO6K+l6aG155qE5aSa5Liq55CG55Sx44CCJywgJ+aCqOWPr+mBuOaTh+aHieeUqOaWvOipsumggeeahOWkmuWAi+eQhueUseOAgicpLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5tb2RlQ2hhbmdlZChldmVudC50YXJnZXQuZm9ybSk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0XHRkZWxldGVPcHRpb25zLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvIDlkK/nlKjmiLforqjorrrpobUnLCAn6ZaL5ZWf5L2/55So6ICF6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ29wZW51c2VydGFsaycsXG5cdFx0XHRcdFx0XHRuYW1lOiAnb3BlbnVzZXJ0YWxrJyxcblx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+atpOmhueeahOm7mOiupOWAvOS4uuaCqOeahOW8gOWQr+iuqOiuuumhteiuvue9ruOAguWcqOaCqOmAieaLqeW6lOeUqOWkmuadoeeQhueUseWIoOmZpOaXtuatpOmhueWwhuS/neaMgeS4jeWPmOOAgicsXG5cdFx0XHRcdFx0XHRcdCfmraTpoIXnmoTpoJDoqK3lgLzngrrmgqjnmoTplovllZ/oqI7oq5bpoIHoqK3lrprjgILlnKjmgqjpgbjmk4fmh4nnlKjlpJrmop3nkIbnlLHliKrpmaTmmYLmraTpoIXlsIfkv53mjIHkuI3ororjgIInXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogZmFsc2UsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCB0YWdPcHRpb25zID0gZm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRuYW1lOiAndGFnX29wdGlvbnMnLFxuXHRcdH0pO1xuXHRcdGlmIChNb3JlYml0cy51c2VySXNTeXNvcCkge1xuXHRcdFx0dGFnT3B0aW9ucy5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qCH6K6w55u45YWz6YCJ6aG5JywgJ+aomeiomOebuOmXnOmBuOmghScpLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhZ09wdGlvbnMuYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflpoLlj6/og73vvIzpgJrnn6XliJvlu7rogIUnLCAn5aaC5Y+v6IO977yM6YCa55+l5bu656uL6ICFJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdG5hbWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfkuIDkuKrpgJrnn6XmqKHmnb/lsIbkvJrooqvliqDlhaXliJvlu7rogIXnmoTorqjorrrpobXvvIzoi6XmgqjlkK/nlKjkuobor6XnkIbmja7nmoTpgJrnn6XjgIInLFxuXHRcdFx0XHRcdFx0J+S4gOWAi+mAmuefpeaooeadv+Wwh+acg+iiq+WKoOWFpeW7uueri+iAheeahOiojuirlumgge+8jOiLpeaCqOWVn+eUqOS6huipsueQhuaTmueahOmAmuefpeOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6XG5cdFx0XHRcdFx0XHQhTW9yZWJpdHMudXNlcklzU3lzb3AgfHxcblx0XHRcdFx0XHRcdCEoVHdpbmtsZS5zcGVlZHkuaGFzQ1NEIHx8IFR3aW5rbGUuZ2V0UHJlZignZGVsZXRlU3lzb3BEZWZhdWx0VG9EZWxldGUnKSksXG5cdFx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+a4heepuumhtemdoicsICfmuIXnqbrpoIHpnaInKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2JsYW5rJyxcblx0XHRcdFx0XHRuYW1lOiAnYmxhbmsnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjmoIforrDmqKHmnb/liY3vvIzlhYjmuIXnqbrpobXpnaLvvIzpgILnlKjkuo7kuKXph43noLTlnY/miJbotJ/pnaLnlJ/ogIXkvKDorrDnrYnjgIInLFxuXHRcdFx0XHRcdFx0J+WcqOaomeiomOaooeadv+WJje+8jOWFiOa4heepuumggemdou+8jOmBqeeUqOaWvOWatOmHjeegtOWjnuaIluiyoOmdoueUn+iAheWCs+iomOetieOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5ZCM5pe25qCH6K6w5Lul6K+35rGC55m957q45L+d5oqkJywgJ+WQjOaZguaomeiomOS7peiri+axgueZvee0meS/neittycpLFxuXHRcdFx0XHRcdHZhbHVlOiAnc2FsdGluZycsXG5cdFx0XHRcdFx0bmFtZTogJ3NhbHRpbmcnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfpgInlj5blkI7vvIzlv6vpgJ/liKDpmaTmqKHmnb/lkI7lsIbpmYTluKYge3tzYWx0fX0g5qCH562+77yM5Lul6K+35rGC5omn6KGM5Yig6Zmk55qE566h55CG5ZGY6L+b6KGM55m957q45L+d5oqk77yM5LuF5Zyo6aG16Z2i5Yib5bu6M+asoeS7peS4iuaJjemAieaLqeatpOmhueOAgicsXG5cdFx0XHRcdFx0XHQn6YG45Y+W5b6M77yM5b+r6YCf5Yiq6Zmk5qih5p2/5b6M5bCH6ZmE5bi2IHt7c2FsdH19IOaomeexpO+8jOS7peiri+axguWft+ihjOWIqumZpOeahOeuoeeQhuWToemAsuihjOeZvee0meS/neitt++8jOWDheWcqOmggemdouW7uuerizPmrKHku6XkuIrmiY3pgbjmk4fmraTpoIXjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W6lOeUqOWkmuS4queQhueUsScsICfmh4nnlKjlpJrlgIvnkIbnlLEnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ211bHRpcGxlJyxcblx0XHRcdFx0XHRuYW1lOiAnbXVsdGlwbGUnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5oKo5Y+v6YCJ5oup5bqU55So5LqO6K+l6aG155qE5aSa5Liq55CG55Sx44CCJywgJ+aCqOWPr+mBuOaTh+aHieeUqOaWvOipsumggeeahOWkmuWAi+eQhueUseOAgicpLFxuXHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLm1vZGVDaGFuZ2VkKGV2ZW50LnRhcmdldC5mb3JtKTtcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0aWQ6ICdwcmlvci1kZWxldGlvbi1jb3VudCcsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfliJ3lp4vljJZDU0TmqKHlnZflpLHotKXvvIzor7fph43or5XvvIzmiJblsIbov5nmiqXlkYrnu5lUd2lua2xl5byA5Y+R6ICF44CCJyxcblx0XHRcdFx0J+WIneWni+WMlkNTROaooee1hOWkseaVl++8jOiri+mHjeippu+8jOaIluWwh+mAmeWgseWRiue1plR3aW5rbGXplovnmbzogIXjgIInXG5cdFx0XHQpLFxuXHRcdH0pO1xuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ3NwZWVkeVNlbGVjdGlvblN0eWxlJykgIT09ICdyYWRpb0NsaWNrJykge1xuXHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdFx0Y2xhc3NOYW1lOiAndHctc3BlZWR5LXN1Ym1pdCcsXG5cdFx0XHR9KTsgLy8gUmVuYW1lZCBpbiBtb2RlQ2hhbmdlZFxuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdCA9IGZvcm0ucmVuZGVyKCk7XG5cdFx0ZGlhbG9nLnNldENvbnRlbnQocmVzdWx0KTtcblx0XHRkaWFsb2cuZGlzcGxheSgpO1xuXHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLm1vZGVDaGFuZ2VkKHJlc3VsdCk7XG5cdFx0Ly8gQ2hlY2sgZm9yIHByaW9yIGRlbGV0aW9ucy4gIEp1c3Qgb25jZSwgdXBvbiBpbml0XG5cdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2sucHJpb3JEZWxldGlvbkNvdW50KCk7XG5cdH07XG5cdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLmdldE1vZGUgPSAoZm9ybSkgPT4ge1xuXHRcdGxldCBtb2RlID0gVHdpbmtsZS5zcGVlZHkubW9kZS51c2VyU2luZ2xlU3VibWl0O1xuXHRcdGlmIChmb3JtLnRhZ19vbmx5ICYmICFmb3JtLnRhZ19vbmx5LmNoZWNrZWQpIHtcblx0XHRcdGlmIChmb3JtLmRlbG11bHRpcGxlLmNoZWNrZWQpIHtcblx0XHRcdFx0bW9kZSA9IFR3aW5rbGUuc3BlZWR5Lm1vZGUuc3lzb3BNdWx0aXBsZVN1Ym1pdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1vZGUgPSBUd2lua2xlLnNwZWVkeS5tb2RlLnN5c29wU2luZ2xlU3VibWl0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZm9ybS5tdWx0aXBsZS5jaGVja2VkKSB7XG5cdFx0XHRtb2RlID0gVHdpbmtsZS5zcGVlZHkubW9kZS51c2VyTXVsdGlwbGVTdWJtaXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1vZGUgPSBUd2lua2xlLnNwZWVkeS5tb2RlLnVzZXJTaW5nbGVTdWJtaXQ7XG5cdFx0fVxuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ3NwZWVkeVNlbGVjdGlvblN0eWxlJykgPT09ICdyYWRpb0NsaWNrJykge1xuXHRcdFx0bW9kZSsrO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9kZTtcblx0fTtcblx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2subW9kZUNoYW5nZWQgPSAoZm9ybSkgPT4ge1xuXHRcdGNvbnN0IG5hbWVzcGFjZSA9IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJyk7XG5cdFx0Ly8gZmlyc3QgZmlndXJlIG91dCB3aGF0IG1vZGUgd2UncmUgaW5cblx0XHRjb25zdCBtb2RlID0gVHdpbmtsZS5zcGVlZHkuY2FsbGJhY2suZ2V0TW9kZShmb3JtKTtcblx0XHRjb25zdCBpc1N5c29wTW9kZSA9IFR3aW5rbGUuc3BlZWR5Lm1vZGUuaXNTeXNvcChtb2RlKTtcblx0XHRpZiAoaXNTeXNvcE1vZGUpIHtcblx0XHRcdCRib2R5LmZpbmQoJ1tuYW1lPWRlbGV0ZV9vcHRpb25zXScpLnNob3coKTtcblx0XHRcdCRib2R5LmZpbmQoJ1tuYW1lPXRhZ19vcHRpb25zXScpLmhpZGUoKTtcblx0XHRcdCRib2R5LmZpbmQoJ2J1dHRvbi50dy1zcGVlZHktc3VibWl0JykudGV4dCh3aW5kb3cud2dVTFMoJ+WIoOmZpOmhtemdoicsICfliKrpmaTpoIHpnaInKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRib2R5LmZpbmQoJ1tuYW1lPWRlbGV0ZV9vcHRpb25zXScpLmhpZGUoKTtcblx0XHRcdCRib2R5LmZpbmQoJ1tuYW1lPXRhZ19vcHRpb25zXScpLnNob3coKTtcblx0XHRcdCRib2R5LmZpbmQoJ2J1dHRvbi50dy1zcGVlZHktc3VibWl0JykudGV4dCh3aW5kb3cud2dVTFMoJ+agh+iusOmhtemdoicsICfmqJnoqJjpoIHpnaInKSk7XG5cdFx0fVxuXHRcdGNvbnN0IHdvcmtfYXJlYSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdG5hbWU6ICd3b3JrX2FyZWEnLFxuXHRcdH0pO1xuXHRcdGlmIChcblx0XHRcdG1vZGUgPT09IFR3aW5rbGUuc3BlZWR5Lm1vZGUudXNlck11bHRpcGxlUmFkaW9DbGljayB8fFxuXHRcdFx0bW9kZSA9PT0gVHdpbmtsZS5zcGVlZHkubW9kZS5zeXNvcE11bHRpcGxlUmFkaW9DbGlja1xuXHRcdCkge1xuXHRcdFx0Y29uc3QgZXZhbHVhdGVUeXBlID0gVHdpbmtsZS5zcGVlZHkubW9kZS5pc1N5c29wKG1vZGUpID8gJ2V2YWx1YXRlU3lzb3AnIDogJ2V2YWx1YXRlVXNlcic7XG5cdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W9k+mAieaLqeWujOaIkOWQju+8jOWNleWHu++8micsICfnlbbpgbjmk4flrozmiJDlvozvvIzpu57mk4rvvJonKSxcblx0XHRcdH0pO1xuXHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdidXR0b24nLFxuXHRcdFx0XHRuYW1lOiAnc3VibWl0LW11bHRpcGxlJyxcblx0XHRcdFx0bGFiZWw6IGlzU3lzb3BNb2RlID8gd2luZG93LndnVUxTKCfliKDpmaTpobXpnaInLCAn5Yiq6Zmk6aCB6Z2iJykgOiB3aW5kb3cud2dVTFMoJ+agh+iusOmhtemdoicsICfmqJnoqJjpoIHpnaInKSxcblx0XHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrW2V2YWx1YXRlVHlwZV0oZXZlbnQpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IHJhZGlvT3JDaGVja2JveCA9IFR3aW5rbGUuc3BlZWR5Lm1vZGUuaXNNdWx0aXBsZShtb2RlKSA/ICdjaGVja2JveCcgOiAncmFkaW8nO1xuXHRcdGlmIChpc1N5c29wTW9kZSkge1xuXHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnnkIbnlLEnLCAn6Ieq6KiC55CG55SxJyksXG5cdFx0XHR9KTtcblx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiByYWRpb09yQ2hlY2tib3gsXG5cdFx0XHRcdG5hbWU6ICdjc2QnLFxuXHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuY3VzdG9tUmF0aW9uYWxlLCBtb2RlKSxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG5hbWVzcGFjZSkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHQvLyBhcnRpY2xlIGFuZCBwc2V1ZG8gbmFtZXNwYWNlXG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+adoeebricsICfmop3nm64nKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuYXJ0aWNsZUxpc3QsIG1vZGUpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdC8vIHVzZXJcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55So5oi36aG1JywgJ+S9v+eUqOiAhemggemdoicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogcmFkaW9PckNoZWNrYm94LFxuXHRcdFx0XHRcdG5hbWU6ICdjc2QnLFxuXHRcdFx0XHRcdGxpc3Q6IFR3aW5rbGUuc3BlZWR5LmdlbmVyYXRlQ3NkTGlzdChUd2lua2xlLnNwZWVkeS51c2VyTGlzdCwgbW9kZSksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMzpcblx0XHRcdFx0Ly8gdXNlciB0YWxrXG5cdFx0XHRcdGlmIChtdy51dGlsLmlzSVBBZGRyZXNzKG13LmNvbmZpZy5nZXQoJ3dnUmVsZXZhbnRVc2VyTmFtZScpKSkge1xuXHRcdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnlKjmiLforqjorrrpobUnLCAn5L2/55So6ICF6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiByYWRpb09yQ2hlY2tib3gsXG5cdFx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRcdGxpc3Q6IFR3aW5rbGUuc3BlZWR5LmdlbmVyYXRlQ3NkTGlzdChUd2lua2xlLnNwZWVkeS51c2VydGFsa0xpc3QsIG1vZGUpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSA2OlxuXHRcdFx0XHQvLyBmaWxlXG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWh+S7ticsICfmqpTmoYgnKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuZmlsZUxpc3QsIG1vZGUpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKCFUd2lua2xlLnNwZWVkeS5tb2RlLmlzU3lzb3AobW9kZSkpIHtcblx0XHRcdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+agh+iusENTRCBGMeOAgUYz44CBRjXvvIzor7fkvb/nlKhUd2lua2xl55qE4oCc5Zu+5p2D4oCd5Yqf6IO944CCJyxcblx0XHRcdFx0XHRcdFx0J+aomeiomENTRCBGMeOAgUYz44CBRjXvvIzoq4vkvb/nlKhUd2lua2xl55qE44CM5ZyW5qyK44CN5Yqf6IO944CCJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMTQ6XG5cdFx0XHRcdC8vIGNhdGVnb3J5XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WIhuexuycsICfliIbpoZ4nKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuY2F0ZWdvcnlMaXN0LCBtb2RlKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAxMTg6XG5cdFx0XHRcdC8vIGRyYWZ0XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiAn6I2J56i/Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkuZHJhZnRMaXN0LCBtb2RlKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBuYW1lc3BhY2UgJSAyID09PSAxICYmIG5hbWVzcGFjZSAhPT0gMzpcblx0XHRcdFx0Ly8gc2hvdyBkYi10YWxrIG9uIHRhbGsgcGFnZXMsIGJ1dCBub3QgdXNlciB0YWxrIHBhZ2VzXG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iuqOiuuumhtScsICfoqI7oq5bpoIEnKSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0XHRuYW1lOiAnY3NkJyxcblx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnNwZWVkeS5nZW5lcmF0ZUNzZExpc3QoVHdpbmtsZS5zcGVlZHkudGFsa0xpc3QsIG1vZGUpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gY3VzdG9tIHJhdGlvbmFsZSBsaXZlcyB1bmRlciBnZW5lcmFsIGNyaXRlcmlhIHdoZW4gdGFnZ2luZ1xuXHRcdGxldCBnZW5lcmFsQ3JpdGVyaWEgPSBUd2lua2xlLnNwZWVkeS5nZW5lcmFsTGlzdDtcblx0XHRpZiAoIVR3aW5rbGUuc3BlZWR5Lm1vZGUuaXNTeXNvcChtb2RlKSkge1xuXHRcdFx0Z2VuZXJhbENyaXRlcmlhID0gWy4uLlR3aW5rbGUuc3BlZWR5LmN1c3RvbVJhdGlvbmFsZSwgLi4uZ2VuZXJhdGVBcnJheShnZW5lcmFsQ3JpdGVyaWEpXTtcblx0XHR9XG5cdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W4uOinhCcsICfluLjopo8nKSxcblx0XHR9KTtcblx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdG5hbWU6ICdjc2QnLFxuXHRcdFx0bGlzdDogVHdpbmtsZS5zcGVlZHkuZ2VuZXJhdGVDc2RMaXN0KGdlbmVyYWxDcml0ZXJpYSwgbW9kZSksXG5cdFx0fSk7XG5cdFx0aWYgKCFUd2lua2xlLnNwZWVkeS5tb2RlLmlzU3lzb3AobW9kZSkpIHtcblx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5o+Q5oql5L615p2D6aG16Z2i77yM6K+35L2/55SoVHdpbmtsZeeahOKAnOS+teadg+KAneWKn+iDveOAgicsXG5cdFx0XHRcdFx0J+aPkOWgseS+teasiumggemdou+8jOiri+S9v+eUqFR3aW5rbGXnmoTjgIzkvrXmrIrjgI3lip/og73jgIInXG5cdFx0XHRcdCksXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnSXNSZWRpcmVjdCcpIHx8IE1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHR3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdGxhYmVsOiAn6YeN5a6a5ZCRJyxcblx0XHRcdH0pO1xuXHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6IHJhZGlvT3JDaGVja2JveCxcblx0XHRcdFx0bmFtZTogJ2NzZCcsXG5cdFx0XHRcdGxpc3Q6IFR3aW5rbGUuc3BlZWR5LmdlbmVyYXRlQ3NkTGlzdChUd2lua2xlLnNwZWVkeS5yZWRpcmVjdExpc3QsIG1vZGUpLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IFtvbGRfYXJlYV0gPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMoZm9ybSwgJ3dvcmtfYXJlYScpO1xuXHRcdGZvcm0ucmVwbGFjZUNoaWxkKHdvcmtfYXJlYS5yZW5kZXIoKSwgb2xkX2FyZWEpO1xuXHRcdC8vIGlmIHN5c29wLCBjaGVjayBpZiBDU0QgaXMgYWxyZWFkeSBvbiB0aGUgcGFnZSBhbmQgZmlsbCBpbiBjdXN0b20gcmF0aW9uYWxlXG5cdFx0aWYgKGlzU3lzb3BNb2RlICYmIFR3aW5rbGUuc3BlZWR5Lmhhc0NTRCkge1xuXHRcdFx0Y29uc3QgW2N1c3RvbU9wdGlvbl0gPSAkYm9keS5maW5kKCdpbnB1dFtuYW1lPWNzZF1bdmFsdWU9cmVhc29uXScpO1xuXHRcdFx0aWYgKGN1c3RvbU9wdGlvbikge1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlTZWxlY3Rpb25TdHlsZScpICE9PSAncmFkaW9DbGljaycpIHtcblx0XHRcdFx0XHQvLyBmb3JjZSBsaXN0ZW5lcnMgdG8gcmUtaW5pdFxuXHRcdFx0XHRcdGN1c3RvbU9wdGlvbi5jbGljaygpO1xuXHRcdFx0XHRcdGN1c3RvbU9wdGlvbi5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGN1c3RvbU9wdGlvbi5zdWJncm91cCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VzdG9tT3B0aW9uLnN1Ymdyb3VwLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoXG5cdFx0XHRcdFx0JGJvZHkuZmluZCgnI2RlbGV0ZS1yZWFzb24nKS50ZXh0KClcblx0XHRcdFx0KS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZW5sYXJnZSBHNyByYWRpby9jaGVja2JveCBhbmQgaXRzIGxhYmVsXG5cdFx0aWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3ZhbHVlPVwiZzdcIl0nKSAmJiBUd2lua2xlLmdldFByZWYoJ2VubGFyZ2VHN0lucHV0JykpIHtcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3ZhbHVlPVwiZzdcIl0nKS5zdHlsZSA9XG5cdFx0XHRcdCdoZWlnaHQ6IDJlbTsgd2lkdGg6IDJlbTsgaGVpZ2h0OiAtbW96LWluaXRpYWw7IHdpZHRoOiAtbW96LWluaXRpYWw7IC1tb3otdHJhbnNmb3JtOiBzY2FsZSgyKTsgLW8tdHJhbnNmb3JtOiBzY2FsZSgyKTsnO1xuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdmFsdWU9XCJnN1wiXScpLmxhYmVsc1swXS5zdHlsZSA9ICdmb250LXNpemU6IDEuNWVtOyBsaW5lLWhlaWdodDogMS41ZW07Jztcblx0XHR9XG5cdFx0aWYgKCFpc1N5c29wTW9kZSAmJiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VDb250ZW50TW9kZWwnKSAhPT0gJ3dpa2l0ZXh0Jykge1xuXHRcdFx0JGJvZHkuZmluZCgnW25hbWU9dGFnX29wdGlvbnNdJykuaGlkZSgpO1xuXHRcdFx0JGJvZHkuZmluZCgnW25hbWU9d29ya19hcmVhXScpLmVtcHR5KCk7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gW1xuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ1R3aW5rbGXkuI3mlK/mjIHlnKjpobXpnaLlhoXlrrnmqKHlnovkuLonLCAnVHdpbmtsZeS4jeaUr+aPtOWcqOmggemdouWFp+WuueaooeWei+eCuicpLFxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VDb250ZW50TW9kZWwnKSxcblx0XHRcdFx0d2luZG93LndnVUxTKCfnmoTpobXpnaLkuIrmjILkuIrlv6vpgJ/liKDpmaTmqKHmnb/vvIzor7flj4Lop4EnLCAn55qE6aCB6Z2i5LiK5o6b5LiK5b+r6YCf5Yiq6Zmk5qih5p2/77yM6KuL5Y+D6KaLJyksXG5cdFx0XHRcdCQoJzxhPicpXG5cdFx0XHRcdFx0LmF0dHIoe1xuXHRcdFx0XHRcdFx0dGFyZ2V0OiAnX2JsYW5rJyxcblx0XHRcdFx0XHRcdHJlbDogJ25vb3BlbmVyIG5vcmVmZXJyZXInLFxuXHRcdFx0XHRcdFx0aHJlZjogbXcudXRpbC5nZXRVcmwoJ0xJQjpTUEVDSUFMU0QnKSxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn5omL5Yqo5pS+572u5qih5p2/5pe255qE5rOo5oSP5LqL6aG5JywgJ+aJi+WLleaUvue9ruaooeadv+aZgueahOazqOaEj+S6i+mghScpKVswXSxcblx0XHRcdFx0J+OAgicsXG5cdFx0XHRdO1xuXHRcdFx0JGJvZHkuZmluZCgnW25hbWU9d29ya19hcmVhXScpLmFwcGVuZChtZXNzYWdlKTtcblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZCh0cnVlKTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrLnByaW9yRGVsZXRpb25Db3VudCA9ICgpID0+IHtcblx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0bGlzdDogJ2xvZ2V2ZW50cycsXG5cdFx0XHRsZXR5cGU6ICdkZWxldGUnLFxuXHRcdFx0bGVhY3Rpb246ICdkZWxldGUvZGVsZXRlJyxcblx0XHRcdC8vIEp1c3QgcHVyZSBwYWdlIGRlbGV0aW9uLCBubyByZWRpcmVjdCBvdmVyd3JpdGVzIG9yIHJldmRlbFxuXHRcdFx0bGV0aXRsZTogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0bGVwcm9wOiAnJyxcblx0XHRcdC8vIFdlJ3JlIGp1c3QgY291bnRpbmcgd2UgZG9uJ3QgYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgZW50cmllc1xuXHRcdFx0bGVsaW1pdDogNSxcblx0XHRcdC8vIEEgbGl0dGxlIGJpdCBnb2VzIGEgbG9uZyB3YXlcblx0XHR9O1xuXG5cdFx0bmV3IE1vcmViaXRzLndpa2kuYXBpKHdpbmRvdy53Z1VMUygn5qOA5p+l5LmL5YmN55qE5Yig6ZmkJywgJ+aqouafpeS5i+WJjeeahOWIqumZpCcpLCBxdWVyeSwgKGFwaW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhcGlvYmouZ2V0UmVzcG9uc2UoKTtcblx0XHRcdGNvbnN0IGRlbENvdW50ID0gcmVzcG9uc2UucXVlcnkubG9nZXZlbnRzLmxlbmd0aDtcblx0XHRcdGlmIChkZWxDb3VudCkge1xuXHRcdFx0XHRsZXQgbWVzc2FnZSA9IHdpbmRvdy53Z1VMUygn6KKr5Yig6ZmkJywgJ+iiq+WIqumZpCcpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UuY29udGludWUpIHtcblx0XHRcdFx0XHRtZXNzYWdlICs9IHdpbmRvdy53Z1VMUygn6LaF6L+HJywgJ+i2hemBjicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lc3NhZ2UgKz0gYCR7ZGVsQ291bnR95qyhYDtcblx0XHRcdFx0Ly8gMysgc2VlbXMgcHJvYmxlbWF0aWNcblx0XHRcdFx0aWYgKGRlbENvdW50ID49IDMpIHtcblx0XHRcdFx0XHQkYm9keS5maW5kKCcjcHJpb3ItZGVsZXRpb24tY291bnQnKS5jc3MoJ2NvbG9yJywgJyNmZjAwMDAnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBQcm92aWRlIGEgbGluayB0byBwYWdlIGxvZ3MgKENTRCB0ZW1wbGF0ZXMgaGF2ZSBvbmUgZm9yIHN5c29wcylcblx0XHRcdFx0Y29uc3QgbGluayA9IE1vcmViaXRzLmh0bWxOb2RlKCdhJywgd2luZG93LndnVUxTKCfvvIjml6Xlv5fvvIknLCAn77yI5pel6KqM77yJJykpO1xuXHRcdFx0XHRsaW5rLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0XHQnaHJlZicsXG5cdFx0XHRcdFx0bXcudXRpbC5nZXRVcmwoJ1NwZWNpYWw6TG9nJywge1xuXHRcdFx0XHRcdFx0cGFnZTogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG5cdFx0XHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuXHRcdFx0XHQkYm9keS5maW5kKCcjcHJpb3ItZGVsZXRpb24tY291bnQnKS50ZXh0KG1lc3NhZ2UpOyAvLyBTcGFjZSBiZWZvcmUgbG9nIGxpbmtcblx0XHRcdFx0JGJvZHkuZmluZCgnI3ByaW9yLWRlbGV0aW9uLWNvdW50JykuYXBwZW5kKGxpbmspO1xuXHRcdFx0fVxuXHRcdH0pLnBvc3QoKTtcblx0fTtcblx0VHdpbmtsZS5zcGVlZHkuZ2VuZXJhdGVDc2RMaXN0ID0gKGxpc3QsIG1vZGUpID0+IHtcblx0XHQvLyBtb2RlIHN3aXRjaGVzXG5cdFx0Y29uc3QgaXNTeXNvcE1vZGUgPSBUd2lua2xlLnNwZWVkeS5tb2RlLmlzU3lzb3AobW9kZSk7XG5cdFx0Y29uc3QgbXVsdGlwbGUgPSBUd2lua2xlLnNwZWVkeS5tb2RlLmlzTXVsdGlwbGUobW9kZSk7XG5cdFx0Y29uc3QgaGFzU3VibWl0QnV0dG9uID0gVHdpbmtsZS5zcGVlZHkubW9kZS5oYXNTdWJtaXRCdXR0b24obW9kZSk7XG5cdFx0Y29uc3Qgb3BlblN1Ymdyb3VwSGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHQkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2lucHV0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdCQoZS50YXJnZXQuZm9ybSkuY2hpbGRyZW4oKS5jc3MoJ2NvbG9yJywgJ2dyYXknKTtcblx0XHRcdCQoZS50YXJnZXQpLnBhcmVudCgpLmNzcygnY29sb3InLCAnYmxhY2snKS5maW5kKCdpbnB1dCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuXHRcdFx0JChlLnRhcmdldCkucGFyZW50KCkuZmluZCgnaW5wdXQ6dGV4dCcpWzBdLmZvY3VzKCk7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH07XG5cdFx0Y29uc3Qgc3VibWl0U3ViZ3JvdXBIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGV2YWx1YXRlVHlwZSA9IFR3aW5rbGUuc3BlZWR5Lm1vZGUuaXNTeXNvcChtb2RlKSA/ICdldmFsdWF0ZVN5c29wJyA6ICdldmFsdWF0ZVVzZXInO1xuXHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tbZXZhbHVhdGVUeXBlXShlKTtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fTtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGxpc3QsIChjcml0RWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgY3JpdGVyaW9uID0ge1xuXHRcdFx0XHQuLi5jcml0RWxlbWVudCxcblx0XHRcdH07XG5cdFx0XHRpZiAobXVsdGlwbGUpIHtcblx0XHRcdFx0aWYgKGNyaXRlcmlvbi5oaWRlV2hlbk11bHRpcGxlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNyaXRlcmlvbi5oaWRlU3ViZ3JvdXBXaGVuTXVsdGlwbGUpIHtcblx0XHRcdFx0XHRjcml0ZXJpb24uc3ViZ3JvdXAgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoY3JpdGVyaW9uLmhpZGVXaGVuU2luZ2xlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNyaXRlcmlvbi5oaWRlU3ViZ3JvdXBXaGVuU2luZ2xlKSB7XG5cdFx0XHRcdFx0Y3JpdGVyaW9uLnN1Ymdyb3VwID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGlzU3lzb3BNb2RlKSB7XG5cdFx0XHRcdGlmIChjcml0ZXJpb24uaGlkZVdoZW5TeXNvcCkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjcml0ZXJpb24uaGlkZVN1Ymdyb3VwV2hlblN5c29wKSB7XG5cdFx0XHRcdFx0Y3JpdGVyaW9uLnN1Ymdyb3VwID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGNyaXRlcmlvbi5oaWRlV2hlblVzZXIpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY3JpdGVyaW9uLmhpZGVTdWJncm91cFdoZW5Vc2VyKSB7XG5cdFx0XHRcdFx0Y3JpdGVyaW9uLnN1Ymdyb3VwID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnSXNSZWRpcmVjdCcpICYmIGNyaXRlcmlvbi5oaWRlV2hlblJlZGlyZWN0KSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjcml0ZXJpb24uc2hvd0luTmFtZXNwYWNlcyAmJlxuXHRcdFx0XHQhY3JpdGVyaW9uLnNob3dJbk5hbWVzcGFjZXMuaW5jbHVkZXMobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGNyaXRlcmlvbi5oaWRlSW5OYW1lc3BhY2VzICYmXG5cdFx0XHRcdGNyaXRlcmlvbi5oaWRlSW5OYW1lc3BhY2VzLmluY2x1ZGVzKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3JpdGVyaW9uLnN1Ymdyb3VwICYmICFoYXNTdWJtaXRCdXR0b24pIHtcblx0XHRcdFx0Y3JpdGVyaW9uLnN1Ymdyb3VwID0gZ2VuZXJhdGVBcnJheShjcml0ZXJpb24uc3ViZ3JvdXAsIHtcblx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRuYW1lOiAnc3VibWl0Jyxcblx0XHRcdFx0XHRsYWJlbDogaXNTeXNvcE1vZGUgPyB3aW5kb3cud2dVTFMoJ+WIoOmZpOmhtemdoicsICfliKrpmaTpoIHpnaInKSA6IHdpbmRvdy53Z1VMUygn5qCH6K6w6aG16Z2iJywgJ+aomeiomOmggemdoicpLFxuXHRcdFx0XHRcdGV2ZW50OiBzdWJtaXRTdWJncm91cEhhbmRsZXIsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQvLyBGSVhNRTogZG9lcyB0aGlzIGRvIGFueXRoaW5nP1xuXHRcdFx0XHRjcml0ZXJpb24uZXZlbnQgPSBvcGVuU3ViZ3JvdXBIYW5kbGVyO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzU3lzb3BNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsRXZlbnQgPSBjcml0ZXJpb24uZXZlbnQ7XG5cdFx0XHRcdGNyaXRlcmlvbi5ldmVudCA9IChlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudChlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgbm9ybWFsaXplZENyaXRlcmlvbiA9IFR3aW5rbGUuc3BlZWR5Lm5vcm1hbGl6ZUhhc2hbZS50YXJnZXQudmFsdWVdO1xuXHRcdFx0XHRcdCRib2R5XG5cdFx0XHRcdFx0XHQuZmluZCgnW25hbWU9b3BlbnVzZXJ0YWxrXScpXG5cdFx0XHRcdFx0XHQucHJvcChcblx0XHRcdFx0XHRcdFx0J2NoZWNrZWQnLFxuXHRcdFx0XHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ29wZW5Vc2VyVGFsa1BhZ2VPblNwZWVkeURlbGV0ZScpLmluY2x1ZGVzKG5vcm1hbGl6ZWRDcml0ZXJpb24pXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChvcmlnaW5hbEV2ZW50KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudChlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3JpdGVyaW9uO1xuXHRcdH0pO1xuXHR9O1xuXHRUd2lua2xlLnNwZWVkeS5jdXN0b21SYXRpb25hbGUgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6IGDoh6rlrprkuYnnkIbnlLEke01vcmViaXRzLnVzZXJJc1N5c29wID8gJ++8iOiHquWumuS5ieWIoOmZpOeQhueUse+8iScgOiAnJ31gLFxuXHRcdFx0dmFsdWU6ICdyZWFzb24nLFxuXHRcdFx0dG9vbHRpcDogJ+ivpemhteiHs+WwkeW6lOivpeespuWQiOS4gOadoeW/q+mAn+WIoOmZpOeahOagh+WHhu+8jOW5tuS4lOaCqOW/hemhu+WcqOeQhueUseS4reaPkOWIsOOAgicsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAncmVhc29uXzEnLFxuXHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRsYWJlbDogJ+eQhueUse+8micsXG5cdFx0XHRcdHNpemU6IDYwLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLnNwZWVkeS5maWxlTGlzdCA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogJ0Yx77ya5piO5pi+5LiN56ym5ZCI5pys56uZ6JGX5L2c5p2D5pa56ZKI55qE5paH5Lu2Jyxcblx0XHRcdHZhbHVlOiAnZjEnLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+WMheaLrOS7peS4i+aDheWGte+8mjEu5LiK5Lyg5ZCOM+WkqeWGheS7jeeEtuadpea6kOS4jeaYjuOAgeiRl+S9nOadg+S4jeaYjueahOaWh+S7tuOAgjIu5LiK5Lyg6ICF5a6j56ew5oul5pyJ77yM6ICM5Zyo5YW25LuW5p2l5rqQ5om+5Yiw55qE5paH5Lu244CCMy7mlofku7blrqPnp7DnlLHmn5DkvZzogIXkvp3mja7mn5Doh6rnlLHokZfkvZzmnYPljY/orq7lj5HluIPvvIzkvYbmib7kuI3liLDor6Xoh6rnlLHljY/orq7nmoTlo7DmmI7jgII0LuWFtuS7luaYjuaYvuS+teadg+eahOaWh+S7tu+8jOWPr+mZhOWKoOS+teadg+eQhueUseOAgicsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ0Yy77ya6YeN5aSN5LiU5LiN5YaN6KKr5L2/55So55qE5paH5Lu2Jyxcblx0XHRcdHZhbHVlOiAnZjInLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+WMheaLrOS7peS4i+aDheWGte+8muS4jueOsOacieaWh+S7tuWujOWFqOebuOWQjO+8iOaIluS4jueOsOacieaWh+S7tuWGheWuueS4gOiHtOS9huWwuuWvuOi+g+Wwj++8ie+8jOS4lOayoeacieWuouingumcgOimge+8iOWmguafkOS6m+WcuuWQiOmcgOS9v+eUqOWwj+WwuuWvuOWbvueJh++8ieeahOaWh+S7tuOAguaIluaYr+iiq+abtOWKoOa4heaZsOeahOaWh+S7tuOAgVNWR+agvOW8j+aWh+S7tuaJgOWPluS7o+eahOaWh+S7tuOAguivt+aPkOaKpeiAheehruWumuaWh+S7tuayoeacieS7u+S9lemhtemdouS9v+eUqOWQjuWGjeaPkOaKpeWIoOmZpO+8jOW5tumZhOazqOWvueW6lOi0qOmHj+abtOWlveeahOaWh+S7tuWQjeOAgicsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAnZjJfZmlsZW5hbWUnLFxuXHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRsYWJlbDogJ+aWsOaWh+S7tuWQje+8micsXG5cdFx0XHRcdHRvb2x0aXA6ICflj6/kuI3lkKvigJxGaWxlOuKAneWJjee8gOOAgicsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuc3BlZWR5LmFydGljbGVMaXN0ID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiAnQTHvvJrlhoXlrrnnqbrms5vmiJblrozlhajmsqHmnInlhoXlrrnjgIInLFxuXHRcdFx0dmFsdWU6ICdhMScsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5p2h55uu55qE5YaF5a6556y857uf77yM5oiW55Sa6Iez5qC55pys5rKh5pyJ5o+Q5Y+K5p2h55uu5Li75L2T77yM5L2/5p2h55uu5LiN6IO955So5Lul5Yy65YiG5YW25LuW5LqL54mp77yb5oiW5p2h55uu5Y+q5YyF5ous5aSW6YOo6ZO+5o6l44CB5Y+C6KeB44CB5Y+C6ICD5p2l5rqQ44CB5YiG57G744CB5qih5p2/77yM6ICM5rKh5pyJ5paH5a2X5o+P6L+w44CC5raI5q2n5LmJ6aG144CB6YeN5a6a5ZCR6aG15LiN6YCC55So5q2k5p2h44CC6K+35rOo5oSP5pyJ5Lqb55So5oi35Y+v6IO95Lya5aSa5qyh5L+d5a2Y77yM6Iul5q2k57G76aG16Z2i55qE5pyA5ZCO5LiA5qyh57yW6L6R5pe26Ze06LaF6L+HMjTlsI/ml7bvvIzliJnlj6/mj5Dor7flv6vpgJ/liKDpmaTjgIInLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICdBMu+8muS4juWFtuS7luadoeebruaIluWFtuWOhuWPsueJiOacrOmHjeWkje+8jOS4lOS4jemAguWQiOS9nOS4uuWFtumHjeWumuWQkeOAgicsXG5cdFx0XHR2YWx1ZTogJ2EyJyxcblx0XHRcdHRvb2x0aXA6XG5cdFx0XHRcdCfmnaHnm67liJvlu7rml7bnmoTlhoXlrrnvvIzkuI7lhbbku5bnjrDmnInmnaHnm67vvIjmiJblhbbljoblj7LniYjmnKzvvInlhoXlrrnlrozlhajnm7jlkIzmiJbpnZ7luLjnm7jkvLzvvIzkuJTlkI3np7DkuI3pgILlkIjkvZzkuLrlkI7ogIXnmoTph43lrprlkJHjgILkuI3ljIXmi6zmi4bliIbjgIHlkIjlubbjgIHph43nu4TlkI7kuqfnlJ/nmoTmnaHnm67jgILlpoLmnInnlpHomZHvvIzlj6/ovazkuqTliKDpmaTorqjorrrjgILoi6XlkI7liJvlu7rnmoTmnaHnm67lkI3np7Dlj6/kvZzkuLrph43lrprlkJHvvIzlj6/nm7TmjqXmlLnkuLrph43lrprlkJHvvJvoi6XlhYjliJvlu7rnmoTmnaHnm67lrpzkvZzkuLrlkI7liJvlu7rmnaHnm67nmoTph43lrprlkJHvvIzor7fmj5Dor7fnp7vliqjor7fmsYLjgIInLFxuXHRcdFx0c3ViZ3JvdXA6IHtcblx0XHRcdFx0bmFtZTogJ2EyX3BhZ2VuYW1lJyxcblx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0bGFiZWw6ICfnjrDmnInmnaHnm67lkI3vvJonLFxuXHRcdFx0XHR0b29sdGlwOiAn5LiN6Ieq5Yqo5Yqg5LiK6ZO+5o6l77yM6Iul6ZyA6KaB6K+36Ieq6KGM5Yqg5LiKW1tdXeOAgicsXG5cdFx0XHRcdHNpemU6IDYwLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnQTPvvJrpnZ7njrDku6PmsYnor63miJbnv7vor5Hmi5nliqPnmoTmnaHnm64nLFxuXHRcdFx0dmFsdWU6ICdhMycsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5p2h55uu5YaF5a6557ud5aSn6YOo5YiG6Z2e546w5Luj5rGJ6K+t77yM5YyF5ous5pyq57+76K+R55qE5aSW6K+t44CB5pa56KiA5Y+K5paH6KiA5paH77yb5oiW57+76K+R6LSo6YeP5L2O5LiL77yM5Lul6Iez5LqO6Zq+5Lul55CG6Kej5oiW5Ye6546w6L6D5aSa6ZSZ6K+v44CCJyxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLnNwZWVkeS5jYXRlZ29yeUxpc3QgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICdPMu+8muepuuWIhuexu+OAgicsXG5cdFx0XHR2YWx1ZTogJ28yJyxcblx0XHRcdHRvb2x0aXA6ICfmsqHmnInmlLblvZXku7vkvZXpobXpnaLjgIHmlofku7bjgIHlrZDliIbnsbvnmoTliIbnsbvjgIJDYXRlZ29yeTror7fli7/liKDpmaTnmoTliIbnsbvkuK3nmoTliIbnsbvkuI3pgILnlKjjgIInLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuc3BlZWR5LmRyYWZ0TGlzdCA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogJ08z77ya5bqf5byD6I2J56i/44CCJyxcblx0XHRcdHZhbHVlOiAnbzMnLFxuXHRcdFx0dG9vbHRpcDogJ+iNieeov+WQjeWtl+epuumXtOWGheWFreS4quaciOWGheaXoOe8lui+keeahOmhtemdouOAgicsXG5cdFx0fSxcblx0XTtcblx0VHdpbmtsZS5zcGVlZHkudXNlckxpc3QgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICdPMe+8mueUqOaIt+ivt+axguWIoOmZpOiHquW3seeahOeUqOaIt+mhteOAgicsXG5cdFx0XHR2YWx1ZTogJ28xJyxcblx0XHRcdHRvb2x0aXA6ICfnrqHnkIblkZjpnIDmn6XnnIvnvJbovpHljoblj7LvvIznoa7orqTor6XpobXpnaLkuI3mmK/ku47lhbbku5blkI3lrZfnqbrpl7Tnp7vliqjogIzmnaXjgIInLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuc3BlZWR5LmdlbmVyYWxMaXN0ID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzHvvJrmmI7mmL7ov53lj43ms5Xlvovms5Xop4TmiJbov53og4zlhazluo/oia/kv5fnmoTpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnMScsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5piO5pi+6L+d5Y+N5pyN5Yqh5Zmo5omA5Zyo5Zyw55qE5rOV5b6L5rOV6KeE5Y+K5pyJ5YWz6KeE5a6a77yM5oiW56qB56C056S+5Lya5YWs5bqP6Imv5L+X5bqV57q/77yM5oyJ54Wn5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu95LqS6IGU572R566h55CG6KeE5a6a5bqU5LqI5Yig6Zmk55qE6aG16Z2i44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzLvvJrmsqHmnInlrp7pmYXlhoXlrrnnmoTpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnMicsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5LuF5YyF5ous5peg5oSP5LmJ5a2X56ym5Liy6ICM5rKh5pyJ5a6e6ZmF5YaF5a6555qE6aG16Z2i44CC55Sx55So5oi35pys5Lq65Yib5bu655qE55So5oi36aG144CB55So5oi36K6o6K666aG177yM5Y+K5LiT5Li65rWL6K+V5o+Q5L6b55qE5rKZ55uS77yM5LiN6YCC55So5q2k5YeG5YiZ44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzPvvJrnuq/nsrnnoLTlnY8nLFxuXHRcdFx0dmFsdWU6ICdnMycsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5YyF5ous5L2G5LiN6ZmQ5LqO5piO5pi+55qE5oG25L2c5Ymn44CB6ZSZ6K+v5L+h5oGv44CB5Lq66Lqr5pS75Ye7562J77yM5Lul5Y+K5riF55CG56e75Yqo56C05Z2P5pe255WZ5LiL55qE6YeN5a6a5ZCR44CC6Iul5pS25Yiw5oiW5Y+R546w5Lil6YeN55qE5Lq66Lqr5pS75Ye75LiO6K+L5q+B77yM566h55CG5ZGY5Y+K5YW25LuW55So5oi35bqU6YCa55+l55uR552j5ZGY6L+b6KGM55uR552j6ZqQ6JeP44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzTvvJrph43mlrDliJvlu7rlt7LooqvliKDpmaTnmoTpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnNCcsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn6Iul546w5pyJ6aG16Z2i5LiO5pu+5Zyo5Yig6Zmk6K6o6K6677yI5ZCr6aG16Z2i5a2Y5bqf6K6o6K6644CB5paH5Lu25a2Y5bqf6K6o6K665ZKM5L615p2D5a6h5qC477yM5LiN5ZCr5b+r6YCf5Yig6Zmk77yJ5Lit6KKr5Yig6Zmk5YaF5a6555u45ZCM5oiW6Z2e5bi455u45Ly877yM5LiU546w5pyJ5YaF5a655LuN54S26YCC55So5Yig6Zmk6K6o6K665Lit55qE57uT6K6677yM5peg6K665qCH6aKY5piv5ZCm55u45ZCM77yM6YO96YCC55So5pys5qCH5YeG44CC6Iul546w5pyJ6aG16Z2i5qCH6aKY5LiO5bey5Yig54mI5pys5LiN5LiA6Ie077yM5YiZ5o+Q6K+36YCf5Yig6ICF5bqU5LiA5bm25rOo5piO5bey5Yig54mI5pys55qE6aG16Z2i5ZCN77yb6Iul6K+l6aG16Z2i5LmL5YmN6KKr5b+r6YCf5Yig6Zmk77yM6K+35Lul55u45ZCM55CG55Sx6YeN5paw5o+Q6K+36YCf5Yig44CC6Iul546w5pyJ5YaF5a655LiN6YCC55So5Yig6Zmk6K6o6K665Lit55qE57uT6K6677yM5bqU6YeN5paw5o+Q5Ye65Yig6Zmk6K6o6K6644CCJyxcblx0XHRcdHN1Ymdyb3VwOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZzRfcGFnZW5hbWUnLFxuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bGFiZWw6ICflt7LliKDniYjmraTpobXpnaLlkI3vvJonLFxuXHRcdFx0XHRcdHNpemU6IDYwLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHRcdGhpZGVTdWJncm91cFdoZW5NdWx0aXBsZTogdHJ1ZSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzXvvJrlm6DmioDmnK/ljp/lm6DliKDpmaTpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnNScsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5YyF5ous5Lul5LiL5oOF5b2i77ya5Zug56e75Yqo6K+35rGC6ICM5Yig6Zmk6aG16Z2i77yb5Lul6KaG55uW5Yig6Zmk6YeN5a6a5ZCR77yb5Yig6Zmk5peg55So55qETWVkaWFXaWtp6aG16Z2i77yM5Y+K5YW25LuW5oqA5pyv5Zui6Zif5oiW55WM6Z2i566h55CG5ZGY6K6k5Li65pyJ5b+F6KaB5omn6KGM55qE5b+r6YCf5Yig6Zmk5oOF5b2i44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzbvvJrljp/kvZzogIXmj5Dor7fliKDpmaTmiJbmuIXnqbrpobXpnaLvvIzkuJTpobXpnaLljp/kvZzogIXku4XmnInkuIDkuronLFxuXHRcdFx0dmFsdWU6ICdnNicsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn6aG16Z2i5Y6f5L2c6ICF5oyB5ZCI55CG55CG55Sx5o+Q5Ye655qE5b+r6YCf5Yig6Zmk77yb5oiW6aG16Z2i5Y6f5L2c6ICF77yI5a6e6ZmF6LSh54yu6ICF77yJ5riF56m66aG16Z2i77yM5YW25LuW55So5oi35o+Q5Lqk55qE5b+r6YCf5Yig6Zmk44CC6aG16Z2i5Y6f5L2c6ICF77yI5a6e6ZmF6LSh54yu6ICF77yJ5LuF5LiA5Lq65pe25ruh6Laz5pys5YeG5YiZ44CC6Iul6aG16Z2i5a6e6ZmF6LSh54yu6ICF5aSa5LqO5LiA5Lq677yM6K+35oyB5ZCI55CG55CG55Sx5o+Q5Lqk5Yig6Zmk6K6o6K6644CC5ZCO5LiA5oOF5b2i5LiN5YyF5ous55So5oi36aG144CB55So5oi36K6o6K666aG177yM5LiU5bqU5Zyo6aG16Z2i5pyA5ZCO5LiA5qyh57yW6L6RNuWwj+aXtuWQjuaPkOWHuuOAguiiq+WvvOWFpeeahOmhtemdou+8jOWvvOWFpeiAheinhuS4uuWOn+S9nOiAheOAgicsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAnZzZfcmF0aW9uYWxlJyxcblx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0bGFiZWw6ICfliKDpmaTljp/lm6DvvJonLFxuXHRcdFx0XHRzaXplOiA2MCxcblx0XHRcdH0sXG5cdFx0XHRoaWRlU3ViZ3JvdXBXaGVuU3lzb3A6IHRydWUsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ0c377ya5piO5pi+55qE5bm/5ZGK5a6j5LygJyxcblx0XHRcdHZhbHVlOiAnZzcnLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+W6lOeUqOS6juaYjuaYvueahOW5v+WRiuWuo+S8oO+8jOaIluWPquacieebuOWFs+S6uueJqeOAgee7hOe7h+etieS6i+eJqeiBlOezu+aWueazle+8iOWMheaLrOS9huS4jemZkOS6jueUteivneOAgeWcsOWdgOOAgeeUteWtkOmCrueuseOAgeWNs+aXtumAmuiur+i9r+S7tuiBlOezu+aWueW8j++8iOWmglFR5Y+344CB5b6u5L+h5Y+377yJ44CB56S+5Lqk5aqS5L2T6ZO+5o6l77yJ44CC6Iul5a6j5Lyg6K+t5rCU5LiN5piO5pi+77yM5bu66K6u6L2s5Lqk5Yig6Zmk6K6o6K6644CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRzjvvJrmnKrliJfmmI7lj6/pnaDmnaXmupDkuJTor63osIPotJ/pnaLnmoTnlJ/ogIXkvKDorrAnLFxuXHRcdFx0dmFsdWU6ICdnOCcsXG5cdFx0XHR0b29sdGlwOiAn5pys5oOF5Ya15LiL5pyJ55qE6aG16Z2i5Lil6YeN5L6154qv5LuW5Lq65ZCN6KqJ5p2D77yM5pyJ5pe25Y+v6IO95L6154qv6ZqQ56eB5p2D77yM5Y+v6IO96ZyA6KaB5o+Q6K+355uR552j44CCJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiAnRznvvJrlraTnq4vpobXpnaInLFxuXHRcdFx0dmFsdWU6ICdnOScsXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHQn5YyF5ous5Lul5LiL5Yeg56eN57G75Z6L77yaMS7msqHmnInlr7nlupTmlofku7bnmoTmlofku7bpobXpnaLvvJsyLuayoeacieWvueW6lOavjemhtemdoueahOWtkOmhtemdou+8iOeUqOaIt+mhteWtkOmhtemdoumZpOWklu+8ie+8mzMu5oyH5ZCR5LiN5a2Y5Zyo6aG16Z2i55qE6YeN5a6a5ZCR77ybNC7msqHmnInlr7nlupTlhoXlrrnpobXpnaLnmoTorqjorrrpobXvvIjorqjorrrpobXlrZjmoaPjgIHnlKjmiLforqjorrrpobXvvIzku6Xlj4rlnKjkuLvpobXpnaLmjILmnIl7e0NTRCBQbGFjZWhvbGRlcn195qih5p2/55qE6K6o6K666aG16Zmk5aSW77yJ77ybNS7kuI3lrZjlnKjms6jlhoznlKjmiLfnmoTnlKjmiLfpobXlj4rnlKjmiLfpobXlrZDpobXpnaLvvIjpmo/nlKjmiLfmm7TlkI3kuqfnlJ/nmoTnlKjmiLfpobXph43lrprlkJHpmaTlpJbvvInjgILor7flnKjliKDpmaTml7bms6jmhI/mnInml6DlsIblhoXlrrnnp7voh7Pku5blpITnmoTlv4XopoHjgIInLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuc3BlZWR5LnJlZGlyZWN0TGlzdCA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogJ1Ix77ya5LiN6IO95Y+R5oyl5a6e6ZmF5L2c55So55qE6YeN5a6a5ZCR44CCJyxcblx0XHRcdHZhbHVlOiAncjEnLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+WMheaLrOS7peS4i+aDheWGte+8mjEu5oyH5ZCR5pys6Lqr5oiW5b6q546v55qE6YeN5a6a5ZCR77yM5aaCQeKGkkLihpJD4oaS4oCm4oCm4oaSQeaIlkHihpJB77yI57mB566A6YeN5a6a5ZCR5LiN6YCC55So5q2k6aG577yJ77ybMi7moLzlvI/plJnor6/nmoTph43lrprlkJHvvIzljIXmi6zmoIfpopjku4XkuLrnuYHkvZPjgIHnuYHnroDmt7fnlKjjgIHmtojmrafkuYnkvb/nlKjnmoTmi6zlvKfmiJbnqbrmoLzplJnor6/jgIHpl7TpmpTlj7fkvb/nlKjplJnor6/vvIjlm6DnsbvmjqjnroDljJblrZfmnKrmlLblvZXoh7PjgIrpgJrnlKjop4TojIPmsYnlrZfooajjgIvlr7zoh7TnmoTnuYHnroDmt7fmnYLmg4XlvaLvvIzmiJbns7vnu5/ml6Dms5Xoh6rliqjov5vooYznuYHnroDlpITnkIbnmoTmg4XlvaLvvIzliJnkuI3pgILnlKjvvInjgILoi6Xph43lrprlkJHpobXpnaLmoIfpopjvvIzkuI7lkIjkuY7lkb3lkI3luLjop4TnmoTnm67moIfpobXpnaLmoIfpopjkuYvpl7TvvIzku4XlrZjlnKjnuYHnroDlrZfkvZPnmoTljLrliKvvvIzogIzkuI3lrZjlnKjor43or63nlKjms5XljLrliKvvvIzliJnkuI3kv53nlZnor6Xph43lrprlkJHjgILlm6Dns7vnu5/ml6Dms5Xoh6rliqjnuYHnroDovazmjaLogIzlv4Xpobvkv53nlZnnmoTph43lrprlkJHpobXpnaLpmaTlpJbjgILlr7nkuo7lhbbku5bmnKrliJflh7rnmoTmg4XlhrXvvIzoi6XnlKjmiLforqTkuLror6Xph43lrprlkJHml6Dms5Xlj5HmjKXlrp7pmYXkvZznlKjvvIzkuJTkvp3mja7luLjor4bmsqHmnInku7vkvZXkuonorq7vvIzlj6/lh63lkIjnkIbnkIbnlLHmj5Dor7fpgJ/liKDvvIznlLHnrqHnkIblkZjliKTmlq3jgILmjIflkJHkuI3lrZjlnKjpobXpnaLnmoTph43lrprlkJHvvIzpgILnlKhHNeWHhuWImeOAgicsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAncjFfdHlwZScsXG5cdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRsYWJlbDogJ+mAgueUqOexu+Wei++8micsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+ivt+mAieaLqScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+aMh+WQkeacrOi6q+aIluW+queOr+eahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+aMh+WQkeacrOi6q+aIluW+queOr+eahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+agh+mimOe5geeugOa3t+eUqCcsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+agh+mimOe5geeugOa3t+eUqOOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+a2iOatp+S5ieS9v+eUqOeahOaLrOWPt+aIluepuuagvOmUmeivrycsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+a2iOatp+S5ieS9v+eUqOeahOaLrOWPt+aIluepuuagvOmUmeivr+OAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+mXtOmalOWPt+S9v+eUqOmUmeivrycsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+mXtOmalOWPt+S9v+eUqOmUmeivr+OAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+WFtuS7lueQhueUse+8iOivt+WLvumAieS4iuaWueKAnOW6lOeUqOWkmuS4queQhueUseKAne+8jOW5tuWhq+WGmeiHquWumuS5ieeQhueUse+8iScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJ1Iy77ya5ZCN56ew5LiO5a+85ZCR55uu5qCH5Luj6KGo5LqL54mp5LiN5LiA6Ie05oiW5LiN5a6M5YWo5LiA6Ie055qE6YeN5a6a5ZCR44CCJyxcblx0XHRcdHZhbHVlOiAncjInLFxuXHRcdFx0dG9vbHRpcDpcblx0XHRcdFx0J+WMheaLrOS9huS4jemZkOS6juS7peS4i+aDheWGte+8mjEu55Sx5Lu75L2V6Z2e5p2h55uu6aG16Z2i77yI6Zmk55So5oi36aG177yJ5a+85ZCR5p2h55uu6aG155qE6YeN5a6a5ZCR77yM5Lul5Y+K55Sx5p2h55uu6aG15a+85ZCR5Lu75L2V6Z2e5p2h55uu6aG16Z2i55qE6YeN5a6a5ZCR44CCMi7mmI7mmL7nrJTor6/nmoTph43lrprlkJHvvIzlpoLlh7rnjrDkuI3luLjop4HnmoTplJnliKvlrZfnrYnjgILvvIjliKvnp7Dph43lrprlkJHkuI3pgILnlKjmraTpobnjgILoi6XlkKvplJnliKvlrZfmiJbmnInnrJTor6/nmoTph43lrprlkJHkvb/nlKjpopHnjofpq5jvvIzmraTnsbvph43lrprlkJHmnInliqnkuo7luK7liqnnlKjmiLflr7vmib7liLDmraPnoa7nmoTpobXpnaLvvIzkuI3pgILnlKjmraTmoIflh4bjgILmnInkuonorq7nmoTmraTnsbvph43lrprlkJHlrpzmj5DkuqTliKDpmaTorqjorrrjgILvvIkzLuaYjuaYvuS4juWvvOWQkeebruagh+aJgOa2teeblueahOS4u+mimOaXoOWFs++8jOaIluavlOWvvOWQkeebruagh+aJgOa2teeblueahOS4u+mimOabtOW5v+azm+eahOmHjeWumuWQkeOAgu+8iOiLpeS4jeaYjuaYvu+8jOWPr+aUueS4uuaPkOS6pOWIoOmZpOiuqOiuuuOAgu+8iScsXG5cdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRuYW1lOiAncjJfdHlwZScsXG5cdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRsYWJlbDogJ+mAgueUqOexu+Wei++8micsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+ivt+mAieaLqScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+eUsemdnuadoeebrumhtemdou+8iOmZpOeUqOaIt+mhte+8ieWvvOWQkeadoeebrumhteeahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+eUsemdnuadoeebrumhtemdou+8iOmZpOeUqOaIt+mhte+8ieWvvOWQkeadoeebrumhteeahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+eUseadoeebrumhteWvvOWQkemdnuadoeebrumhtemdoueahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+eUseadoeebrumhteWvvOWQkeS7u+S9lemdnuadoeebrumhtemdoueahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+aYjuaYvueslOivr+eahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+aYjuaYvueslOivr+eahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+S4juWvvOWQkeebruagh+aXoOWFs+aIluavlOWFtuiMg+WbtOabtOW5v+azm+eahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ+S4juWvvOWQkeebruagh+aXoOWFs+aIluavlOWFtuiMg+WbtOabtOW5v+azm+eahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogJ+WFtuS7lueQhueUse+8iOivt+WLvumAieS4iuaWueKAnOW6lOeUqOWkmuS4queQhueUseKAne+8jOW5tuWhq+WGmeiHquWumuS5ieeQhueUse+8iScsXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0sXG5cdFx0fSxcblx0XTtcblx0VHdpbmtsZS5zcGVlZHkubm9ybWFsaXplSGFzaCA9IHtcblx0XHRyZWFzb246ICdkYicsXG5cdFx0bXVsdGlwbGU6ICdtdWx0aXBsZScsXG5cdFx0J211bHRpcGxlLWZpbmlzaCc6ICdtdWx0aXBsZS1maW5pc2gnLFxuXHRcdGcxOiAnZzEnLFxuXHRcdGcyOiAnZzInLFxuXHRcdGczOiAnZzMnLFxuXHRcdGc0OiAnZzQnLFxuXHRcdGc1OiAnZzUnLFxuXHRcdGc2OiAnZzYnLFxuXHRcdGc3OiAnZzcnLFxuXHRcdGc4OiAnZzgnLFxuXHRcdGc5OiAnZzknLFxuXHRcdGExOiAnYTEnLFxuXHRcdGEyOiAnYTInLFxuXHRcdGEzOiAnYTMnLFxuXHRcdHIxOiAncjEnLFxuXHRcdHIyOiAncjInLFxuXHRcdGYxOiAnZjEnLFxuXHRcdGYyOiAnZjInLFxuXHRcdGYzOiAnZjMnLFxuXHRcdGY0OiAnZjQnLFxuXHRcdGY1OiAnZjUnLFxuXHRcdG8xOiAnbzEnLFxuXHRcdG8yOiAnbzInLFxuXHRcdG8zOiAnbzMnLFxuXHR9O1xuXHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3MgPSB7XG5cdFx0Z2V0VGVtcGxhdGVDb2RlQW5kUGFyYW1zOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRsZXQgY29kZTtcblx0XHRcdGxldCBwYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IGk7XG5cdFx0XHRpZiAocGFyYW1zLm5vcm1hbGl6ZWRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Y29kZSA9ICd7e2RlbGV0ZSc7XG5cdFx0XHRcdHBhcmFtcy51dHBhcmFtcyA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgbm9ybV0gb2YgcGFyYW1zLm5vcm1hbGl6ZWRzLmVudHJpZXMoKSkge1xuXHRcdFx0XHRcdGlmIChub3JtICE9PSAnZGInKSB7XG5cdFx0XHRcdFx0XHRjb2RlICs9IGB8JHtub3JtLnRvVXBwZXJDYXNlKCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cGFyYW1ldGVycyA9IHBhcmFtcy50ZW1wbGF0ZVBhcmFtc1tpbmRleF0gfHwgW107XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpXyBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHBhcmFtZXRlcnNbaV9dID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRjb2RlICs9IGB8JHtwYXJhbWV0ZXJzW2lfXX1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwYXJhbXMudXRwYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHQuLi5wYXJhbXMudXRwYXJhbXMsXG5cdFx0XHRcdFx0XHQuLi5Ud2lua2xlLnNwZWVkeS5nZXRVc2VyVGFsa1BhcmFtZXRlcnMobm9ybSwgcGFyYW1ldGVycyksXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb2RlICs9ICd9fSc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJhbWV0ZXJzID0gcGFyYW1zLnRlbXBsYXRlUGFyYW1zWzBdIHx8IFtdO1xuXHRcdFx0XHRjb2RlID0gJ3t7ZGVsZXRlJztcblx0XHRcdFx0aWYgKHBhcmFtcy52YWx1ZXNbMF0gIT09ICdyZWFzb24nKSB7XG5cdFx0XHRcdFx0Y29kZSArPSBgfCR7cGFyYW1zLnZhbHVlc1swXX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoaSBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ldID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0Y29kZSArPSBgfCR7cGFyYW1ldGVyc1tpXX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb2RlICs9ICd9fSc7XG5cdFx0XHRcdHBhcmFtcy51dHBhcmFtcyA9IFR3aW5rbGUuc3BlZWR5LmdldFVzZXJUYWxrUGFyYW1ldGVycyhwYXJhbXMubm9ybWFsaXplZHNbMF0sIHBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtjb2RlLCBwYXJhbXMudXRwYXJhbXNdO1xuXHRcdH0sXG5cdFx0cGFyc2VXaWtpdGV4dDogKHRpdGxlLCB3aWtpdGV4dCwgY2FsbGJhY2spID0+IHtcblx0XHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdwYXJzZScsXG5cdFx0XHRcdHByb3A6ICd0ZXh0Jyxcblx0XHRcdFx0cHN0OiAndHJ1ZScsXG5cdFx0XHRcdHRleHQ6IHdpa2l0ZXh0LFxuXHRcdFx0XHRjb250ZW50bW9kZWw6ICd3aWtpdGV4dCcsXG5cdFx0XHRcdHRpdGxlLFxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHN0YXR1c0luZGljYXRvciA9IG5ldyBNb3JlYml0cy5zdGF0dXMod2luZG93LndnVUxTKCfmnoTpgKDliKDpmaTnkIbnlLEnLCAn5qeL6YCg5Yiq6Zmk55CG55SxJykpO1xuXHRcdFx0Y29uc3QgYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ino+aekOWIoOmZpOaooeadvycsICfop6PmnpDliKrpmaTmqKHmnb8nKSxcblx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdChhcGlPYmopID0+IHtcblx0XHRcdFx0XHRjb25zdCByZWFzb24gPSBkZWNvZGVVUklDb21wb25lbnQoXG5cdFx0XHRcdFx0XHQkKGFwaU9iai5nZXRYTUwoKS5xdWVyeVNlbGVjdG9yKCd0ZXh0JykuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUpXG5cdFx0XHRcdFx0XHRcdC5maW5kKCcjZGVsZXRlLXJlYXNvbicpXG5cdFx0XHRcdFx0XHRcdC50ZXh0KClcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xcKy9nLCAnICcpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAocmVhc29uKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXNJbmRpY2F0b3IuaW5mbygn5a6M5oiQJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN0YXR1c0luZGljYXRvci53YXJuKHdpbmRvdy53Z1VMUygn5pyq6IO95LuO5Yig6Zmk5qih5p2/55Sf5oiQ5Yig6Zmk55CG55SxJywgJ+acquiDveW+nuWIqumZpOaooeadv+eUn+aIkOWIqumZpOeQhueUsScpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FsbGJhY2socmVhc29uKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0c3RhdHVzSW5kaWNhdG9yXG5cdFx0XHQpO1xuXHRcdFx0YXBpLnBvc3QoKTtcblx0XHR9LFxuXHRcdHN5c29wOiB7XG5cdFx0XHRtYWluOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRcdGxldCByZWFzb247XG5cdFx0XHRcdGlmICghcGFyYW1zLm5vcm1hbGl6ZWRzLmxlbmd0aCAmJiBwYXJhbXMubm9ybWFsaXplZHNbMF0gPT09ICdkYicpIHtcblx0XHRcdFx0XHRyZWFzb24gPSBwcm9tcHQod2luZG93LndnVUxTKCfovpPlhaXliKDpmaTnkIbnlLHvvJonLCAn6Ly45YWl5Yiq6Zmk55CG55Sx77yaJyksICcnKTtcblx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3Muc3lzb3AuZGVsZXRlUGFnZShyZWFzb24sIHBhcmFtcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgW2NvZGVdID0gVHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLmdldFRlbXBsYXRlQ29kZUFuZFBhcmFtcyhwYXJhbXMpO1xuXHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrcy5wYXJzZVdpa2l0ZXh0KG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwgY29kZSwgKGRlbGV0ZVJlYXNvbikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5wcm9tcHRGb3JTdW1tYXJ5KSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZVJlYXNvbiA9IHByb21wdChcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn6L6T5YWl5Yig6Zmk55CG55Sx77yM5oiW5Y2V5Ye756Gu5a6a5Lul5o6l5Y+X6Ieq5Yqo55Sf5oiQ55qE77yaJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfovLjlhaXliKrpmaTnkIbnlLHvvIzmiJbpu57mk4rnorrlrprku6XmjqXlj5foh6rli5XnlJ/miJDnmoTvvJonXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRkZWxldGVSZWFzb25cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrcy5zeXNvcC5kZWxldGVQYWdlKGRlbGV0ZVJlYXNvbiwgcGFyYW1zKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGV0ZVBhZ2U6IChyZWFzb24sIHBhcmFtcykgPT4ge1xuXHRcdFx0XHRjb25zdCB0aGlzcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yig6Zmk6aG16Z2iJywgJ+WIqumZpOmggemdoicpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChyZWFzb24gPT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gTW9yZWJpdHMuc3RhdHVzLmVycm9yKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfor6Lpl67nkIbnlLEnLCAn6Kmi5ZWP55CG55SxJyksXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nOOAgicsICfkvb/nlKjogIXlj5bmtojmk43kvZzjgIInKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXJlYXNvbiB8fCAhcmVhc29uLnRyaW0oKSkge1xuXHRcdFx0XHRcdHJldHVybiBNb3JlYml0cy5zdGF0dXMuZXJyb3IoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivoumXrueQhueUsScsICfoqaLllY/nkIbnlLEnKSxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L2g5LiN57uZ5oiR55CG55Sx4oCm5oiR5bCx4oCm5LiN566h5LqG4oCmJywgJ+S9oOS4jee1puaIkeeQhueUseKApuaIkeWwseKApuS4jeeuoeS6huKApicpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBkZWxldGVNYWluID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXNwYWdlLnNldEVkaXRTdW1tYXJ5KHJlYXNvbik7XG5cdFx0XHRcdFx0dGhpc3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdHRoaXNwYWdlLnNldFdhdGNobGlzdChwYXJhbXMud2F0Y2gpO1xuXHRcdFx0XHRcdHRoaXNwYWdlLmRlbGV0ZVBhZ2UoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpc3BhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnN5c29wLmRlbGV0ZVRhbGsocGFyYW1zKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblx0XHRcdFx0Ly8gbG9vayB1cCBpbml0aWFsIGNvbnRyaWJ1dG9yLiBJZiBwcm9tcHRpbmcgdXNlciBmb3IgZGVsZXRpb24gcmVhc29uLCBqdXN0IGRpc3BsYXkgYSBsaW5rLlxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugb3BlbiB0aGUgdGFsayBwYWdlIGRpcmVjdGx5XG5cdFx0XHRcdGlmIChwYXJhbXMub3BlblVzZXJUYWxrKSB7XG5cdFx0XHRcdFx0dGhpc3BhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHBhcmFtcyk7XG5cdFx0XHRcdFx0dGhpc3BhZ2UubG9va3VwQ3JlYXRpb24oKCkgPT4ge1xuXHRcdFx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnN5c29wLm9wZW5Vc2VyVGFsa1BhZ2UodGhpc3BhZ2UpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlTWFpbigpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlbGV0ZU1haW4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGV0ZVRhbGs6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0Ly8gZGVsZXRlIHRhbGsgcGFnZVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cGFyYW1zLmRlbGV0ZVRhbGtQYWdlICYmXG5cdFx0XHRcdFx0cGFyYW1zLm5vcm1hbGl6ZWQgIT09ICdvMScgJiZcblx0XHRcdFx0XHQhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NhLXRhbGsnKS5jbGFzc0xpc3QuY29udGFpbnMoJ25ldycpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IHRhbGtwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdGAke1xuXHRcdFx0XHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVttdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpICsgMV1cblx0XHRcdFx0XHRcdH06JHttdy5jb25maWcuZ2V0KCd3Z1RpdGxlJyl9YCxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yig6Zmk6K6o6K666aG1JywgJ+WIqumZpOiojuirlumggScpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR0YWxrcGFnZS5zZXRFZGl0U3VtbWFyeShcblx0XHRcdFx0XHRcdGBbW0xJQjpDU0QjRzl8RzldXTog5a2k56uL6aG16Z2i77ya5bey5Yig6Zmk6aG16Z2i4oCcJHtNb3JlYml0cy5wYWdlTmFtZU5vcm194oCd55qE6K6o6K666aG1YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dGFsa3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdHRhbGtwYWdlLmRlbGV0ZVBhZ2UoKTtcblx0XHRcdFx0XHQvLyB0aGlzIGlzIHVnbHksIGJ1dCBiZWNhdXNlIG9mIHRoZSBhcmNoaXRlY3R1cmUgb2Ygd2lraS5hcGksIGl0IGlzIG5lZWRlZFxuXHRcdFx0XHRcdC8vIChvdGhlcndpc2Ugc3VjY2Vzcy9mYWlsdXJlIG1lc3NhZ2VzIGZvciB0aGUgcHJldmlvdXMgYWN0aW9uIHdvdWxkIGJlIHN1cHByZXNzZWQpXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3Muc3lzb3AuZGVsZXRlUmVkaXJlY3RzKHBhcmFtcyk7XG5cdFx0XHRcdFx0fSwgMTgwMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnN5c29wLmRlbGV0ZVJlZGlyZWN0cyhwYXJhbXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZXRlUmVkaXJlY3RzOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRcdC8vIGRlbGV0ZSByZWRpcmVjdHNcblx0XHRcdFx0aWYgKHBhcmFtcy5kZWxldGVSZWRpcmVjdHMpIHtcblx0XHRcdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHRpdGxlczogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdFx0cHJvcDogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0XHRyZGxpbWl0OiA1MDAwLCAvLyA1MDAgaXMgbWF4IGZvciBub3JtYWwgdXNlcnMsIDUwMDAgZm9yIGJvdHMgYW5kIHN5c29wc1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W6YeN5a6a5ZCR5YiX6KGo4oCmJywgJ+WPluW+l+mHjeaWsOWwjuWQkeWIl+ihqOKApicpLFxuXHRcdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3Muc3lzb3AuZGVsZXRlUmVkaXJlY3RzTWFpbixcblx0XHRcdFx0XHRcdG5ldyBNb3JlYml0cy5zdGF0dXMod2luZG93LndnVUxTKCfliKDpmaTph43lrprlkJEnLCAn5Yiq6Zmk6YeN5paw5bCO5ZCRJykpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHByb21wdCBmb3IgcHJvdGVjdCBvbiBHN1xuXHRcdFx0XHRsZXQgJGxpbms7XG5cdFx0XHRcdGxldCAkYmlndGV4dDtcblx0XHRcdFx0aWYgKHBhcmFtcy5ub3JtYWxpemVkID09PSAnZzcnKSB7XG5cdFx0XHRcdFx0JGxpbmsgPSAkKCc8YT4nKVxuXHRcdFx0XHRcdFx0LmF0dHIoJ2hyZWYnLCAnIycpXG5cdFx0XHRcdFx0XHQudGV4dCh3aW5kb3cud2dVTFMoJ+WNleWHu+i/memHjOaWveihjOS/neaKpCcsICfpu57mk4rpgJnoo6Hmlr3ooYzkv53orbcnKSlcblx0XHRcdFx0XHRcdC5jc3Moe1xuXHRcdFx0XHRcdFx0XHQnZm9udC1zaXplJzogJzEyNSUnLFxuXHRcdFx0XHRcdFx0XHQnZm9udC13ZWlnaHQnOiAnYm9sZCcsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0Lm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5kaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLnNldCgnd2dBcnRpY2xlSWQnLCAwKTtcblx0XHRcdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQkYmlndGV4dCA9ICQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMjUlJyxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn55m957q45L+d5oqk6K+l6aG1JywgJ+eZvee0meS/neitt+ipsumggScpKTtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygkYmlndGV4dFswXSwgJGxpbmtbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHByb21vdGUgVW5saW5rIHRvb2xcblx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYpIHtcblx0XHRcdFx0XHQkbGluayA9ICQoJzxhPicpXG5cdFx0XHRcdFx0XHQuYXR0cignaHJlZicsICcjJylcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn5Y2V5Ye76L+Z6YeM5YmN5b6A5Y+W5raI6ZO+5YWl5bel5YW3JywgJ+m7nuaTiumAmeijoeWJjeW+gOWPlua2iOmAo+WFpeW3peWFtycpKVxuXHRcdFx0XHRcdFx0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdCdmb250LXdlaWdodCc6ICdib2xkJyxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnVubGluay5jYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+WPlua2iOWvueW3suWIoOmZpOaWh+S7tiAnLCAn5Y+W5raI5bCN5bey5Yiq6Zmk5qqU5qGIICcpICsgTW9yZWJpdHMucGFnZU5hbWVOb3JtfSDnmoTkvb/nlKhgXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQkYmlndGV4dCA9ICQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn5Y+W5raI5a+55bey5Yig6Zmk5paH5Lu255qE5L2/55SoJywgJ+WPlua2iOWwjeW3suWIqumZpOaqlOahiOeahOS9v+eUqCcpKTtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygkYmlndGV4dFswXSwgJGxpbmtbMF0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCRsaW5rID0gJCgnPGE+Jylcblx0XHRcdFx0XHRcdC5hdHRyKCdocmVmJywgJyMnKVxuXHRcdFx0XHRcdFx0LnRleHQod2luZG93LndnVUxTKCfljZXlh7vov5nph4zliY3lvoDlj5bmtojpk77lhaXlt6XlhbcnLCAn6bue5pOK6YCZ6KOh5YmN5b6A5Y+W5raI6YCj5YWl5bel5YW3JykpXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUudW5saW5rLmNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Y+W5raI5a+55bey5Yig6Zmk6aG16Z2iICcsICflj5bmtojlsI3lt7LliKrpmaTpoIHpnaIgJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMucGFnZU5hbWVOb3JtICtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOeahOmTvuaOpScsICcg55qE6YCj57WQJylcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdCRiaWd0ZXh0ID0gJCgnPHNwYW4+JykudGV4dCh3aW5kb3cud2dVTFMoJ+WPlua2iOWvueW3suWIoOmZpOmhtemdoueahOmTvuaOpScsICflj5bmtojlsI3lt7LliKrpmaTpoIHpnaLnmoTpgKPntZAnKSkuY3NzKHtcblx0XHRcdFx0XHRcdCdmb250LXdlaWdodCc6ICdib2xkJyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygkYmlndGV4dFswXSwgJGxpbmtbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRsaW5rID0gJCgnPGE+Jylcblx0XHRcdFx0XHQuYXR0cignaHJlZicsIG13LnV0aWwuZ2V0VXJsKCdTcGVjaWFsOlJhbmRvbUluQ2F0ZWdvcnkv5b+r6YCf5Yig6Zmk5YCZ6YCJJykpXG5cdFx0XHRcdFx0LnRleHQod2luZG93LndnVUxTKCfljZXlh7vliY3lvoDkuIvkuIDkuKrlv6vpgJ/liKDpmaTlgJnpgIknLCAn6bue5pOK5YmN5b6A5LiL5LiA5YCL5b+r6YCf5Yiq6Zmk5YCZ6YG4JykpO1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygn5bel5YW3JywgJGxpbmtbMF0pO1xuXHRcdFx0fSxcblx0XHRcdG9wZW5Vc2VyVGFsa1BhZ2U6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRcdHBhZ2VvYmouZ2V0U3RhdHVzRWxlbWVudCgpLnVubGluaygpOyAvLyBkb24ndCBuZWVkIGl0IGFueW1vcmVcblx0XHRcdFx0Y29uc3QgdXNlciA9IHBhZ2VvYmouZ2V0Q3JlYXRvcigpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0XHRhY3Rpb246ICdlZGl0Jyxcblx0XHRcdFx0XHRwcmV2aWV3OiAneWVzJyxcblx0XHRcdFx0XHR2YW5hcnRpY2xlOiBNb3JlYml0cy5wYWdlTmFtZU5vcm0sXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IHRpdGxlID0gYFVzZXIgdGFsazoke3VzZXJ9YDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHBhcmFtcy5ub3JtYWxpemVkID09PSAnZGInIHx8XG5cdFx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdwcm9tcHRGb3JTcGVlZHlEZWxldGlvblN1bW1hcnknKS5pbmNsdWRlcyhwYXJhbXMubm9ybWFsaXplZClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gcHJvdmlkZSBhIGxpbmsgdG8gdGhlIHVzZXIgdGFsayBwYWdlXG5cdFx0XHRcdFx0Y29uc3QgJGxpbmsgPSAkKCc8YT4nKVxuXHRcdFx0XHRcdFx0LmF0dHIoe1xuXHRcdFx0XHRcdFx0XHRocmVmOiBtdy51dGlsLmdldFVybCh0aXRsZSwgcXVlcnkpLFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6ICdfYmxhbmsnLFxuXHRcdFx0XHRcdFx0XHRyZWw6ICdub29wZW5lciBub3JlZmVycmVyJyxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMjUlJyxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn54K55q2k5omT5byAVXNlciB0YWxrOicsICfpu57mraTmiZPplotVc2VyIHRhbGs6JykgKyB1c2VyKTtcblx0XHRcdFx0XHRjb25zdCAkYmlndGV4dCA9ICQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHQuY3NzKHtcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMjUlJyxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50ZXh0KHdpbmRvdy53Z1VMUygn6YCa55+l6aG16Z2i5Yib5bu66ICFJywgJ+mAmuefpemggemdouW7uueri+iAhScpKTtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbygkYmlndGV4dFswXSwgJGxpbmtbMF0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIG9wZW4gdGhlIGluaXRpYWwgY29udHJpYnV0b3IncyB0YWxrIHBhZ2Vcblx0XHRcdFx0XHRjb25zdCBzdGF0dXNJbmRpY2F0b3IgPSBuZXcgTW9yZWJpdHMuc3RhdHVzKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmiZPlvIDnlKjmiLcnLCAn5omT6ZaL5L2/55So6ICFJykgK1xuXHRcdFx0XHRcdFx0XHR1c2VyICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfnmoTorqjorrrpobXnvJbovpHnqpflj6MnLCAn55qE6KiO6KuW6aCB57eo6Lyv6KaW56qXJyksXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aJk+W8gOS4reKApicsICfmiZPplovkuK3igKYnKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0c3dpdGNoIChUd2lua2xlLmdldFByZWYoJ3VzZXJUYWxrUGFnZU1vZGUnKSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAndGFiJzpcblx0XHRcdFx0XHRcdFx0d2luZG93Lm9wZW4obXcudXRpbC5nZXRVcmwodGl0bGUsIHF1ZXJ5KSwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYmxhbmsnOlxuXHRcdFx0XHRcdFx0XHR3aW5kb3cub3Blbihcblx0XHRcdFx0XHRcdFx0XHRtdy51dGlsLmdldFVybCh0aXRsZSwgcXVlcnkpLFxuXHRcdFx0XHRcdFx0XHRcdCdfYmxhbmsnLFxuXHRcdFx0XHRcdFx0XHRcdCdub29wZW5lcixub3JlZmVycmVyLGxvY2F0aW9uPW5vLHRvb2xiYXI9bm8sc3RhdHVzPW5vLGRpcmVjdG9yaWVzPW5vLHNjcm9sbGJhcnM9eWVzLHdpZHRoPTEyMDAsaGVpZ2h0PTgwMCdcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvKiBjYXNlICd3aW5kb3cnOiAqL1xuXHRcdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0d2luZG93Lm9wZW4oXG5cdFx0XHRcdFx0XHRcdFx0bXcudXRpbC5nZXRVcmwodGl0bGUsIHF1ZXJ5KSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubmFtZSA9PT0gJ3R3aW5rbGV3YXJud2luZG93JyA/ICdfYmxhbmsnIDogJ3R3aW5rbGV3YXJud2luZG93Jyxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubmFtZSA9PT0gJ3R3aW5rbGV3YXJud2luZG93J1xuXHRcdFx0XHRcdFx0XHRcdFx0PyAnbm9vcGVuZXIsbm9yZWZlcnJlciwnXG5cdFx0XHRcdFx0XHRcdFx0XHQ6ICcnICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbG9jYXRpb249bm8sdG9vbGJhcj1ubyxzdGF0dXM9bm8sZGlyZWN0b3JpZXM9bm8sc2Nyb2xsYmFycz15ZXMsd2lkdGg9MTIwMCxoZWlnaHQ9ODAwJ1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhdHVzSW5kaWNhdG9yLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZXRlUmVkaXJlY3RzTWFpbjogKGFwaW9iaikgPT4ge1xuXHRcdFx0XHRjb25zdCB4bWxEb2MgPSBhcGlvYmouZ2V0WE1MKCk7XG5cdFx0XHRcdGNvbnN0ICRzbmFwc2hvdCA9ICQoeG1sRG9jKS5maW5kKCdyZWRpcmVjdHMgcmQnKTtcblx0XHRcdFx0Y29uc3QgdG90YWwgPSAkc25hcHNob3QubGVuZ3RoO1xuXHRcdFx0XHRjb25zdCBzdGF0dXNJbmRpY2F0b3IgPSBhcGlvYmouc3RhdGVsZW07XG5cdFx0XHRcdGlmICghdG90YWwpIHtcblx0XHRcdFx0XHRzdGF0dXNJbmRpY2F0b3IuaW5mbyh3aW5kb3cud2dVTFMoJ+acquWPkeeOsOmHjeWumuWQkScsICfmnKrnmbznj77ph43mlrDlsI7lkJEnKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0YXR1c0luZGljYXRvci5zdGF0dXMoJzAlJyk7XG5cdFx0XHRcdGxldCBjdXJyZW50ID0gMDtcblx0XHRcdFx0Y29uc3Qgb25zdWNjZXNzID0gKGFwaW9iaklubmVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgbm93ID0gYCR7TnVtYmVyLnBhcnNlSW50KCgxMDAgKiArK2N1cnJlbnQpIC8gdG90YWwsIDEwKX0lYDtcblx0XHRcdFx0XHRzdGF0dXNJbmRpY2F0b3IudXBkYXRlKG5vdyk7XG5cdFx0XHRcdFx0YXBpb2JqSW5uZXIuc3RhdGVsZW0udW5saW5rKCk7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnQgPj0gdG90YWwpIHtcblx0XHRcdFx0XHRcdHN0YXR1c0luZGljYXRvci5pbmZvKGAke25vd33vvIjlrozmiJDvvIlgKTtcblx0XHRcdFx0XHRcdE1vcmViaXRzLndpa2kucmVtb3ZlQ2hlY2twb2ludCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0TW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50KCk7XG5cdFx0XHRcdCRzbmFwc2hvdC5lYWNoKChfa2V5LCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gJCh2YWx1ZSkuYXR0cigndGl0bGUnKTtcblx0XHRcdFx0XHRjb25zdCBwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfliKDpmaTph43lrprlkJEgXCInLCAn5Yiq6Zmk6YeN5paw5bCO5ZCRIFwiJykgKyB0aXRsZX1cImBcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHBhZ2Uuc2V0RWRpdFN1bW1hcnkoYFtbTElCOkNTRCNHOXxHOV1dOiDlraTnq4vpobXpnaLvvJrph43lrprlkJHliLDlt7LliKDpmaTpobXpnaLigJwke01vcmViaXRzLnBhZ2VOYW1lTm9ybX3igJ1gKTtcblx0XHRcdFx0XHRwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHRwYWdlLmRlbGV0ZVBhZ2Uob25zdWNjZXNzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0dXNlcjoge1xuXHRcdFx0bWFpbjogKHBhZ2VvYmopID0+IHtcblx0XHRcdFx0Y29uc3Qgc3RhdGVsZW0gPSBwYWdlb2JqLmdldFN0YXR1c0VsZW1lbnQoKTtcblx0XHRcdFx0aWYgKCFwYWdlb2JqLmV4aXN0cygpKSB7XG5cdFx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfpobXpnaLkuI3lrZjlnKjvvIzlj6/og73lt7LooqvliKDpmaQnLCAn6aCB6Z2i5LiN5a2Y5Zyo77yM5Y+v6IO95bey6KKr5Yiq6ZmkJykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdFx0c3RhdGVsZW0uc3RhdHVzKHdpbmRvdy53Z1VMUygn5qOA5p+l6aG16Z2i5bey5pyJ5qCH6K6w4oCmJywgJ+aqouafpemggemdouW3suacieaomeiomOKApicpKTtcblx0XHRcdFx0Ly8gY2hlY2sgZm9yIGV4aXN0aW5nIGRlbGV0aW9uIHRhZ3Ncblx0XHRcdFx0Y29uc3QgdGV4dE5vU2QgPSB0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdFx0L1xce1xce1xccyooZGIoLVxcdyopP3xkfGRlbGV0ZXxkZWxldGViZWNhdXNlfHNwZWVkeXxjc2R86YCf5YiqfOmAn+WIoHzlv6vliKB85b+r5YiqKVxccyooXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyovZ2ksXG5cdFx0XHRcdFx0Jydcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRleHQgIT09IHRleHROb1NkICYmXG5cdFx0XHRcdFx0IWNvbmZpcm0oXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCflnKjpobXpnaLkuIrmib7liLDlv6vpgJ/liKDpmaTmqKHmnb/vvIzopoHnp7vpmaTlubbliqDlhaXmlrDnmoTlkJfvvJ8nLFxuXHRcdFx0XHRcdFx0XHQn5Zyo6aCB6Z2i5LiK5om+5Yiw5b+r6YCf5Yiq6Zmk5qih5p2/77yM6KaB56e76Zmk5Lim5Yqg5YWl5paw55qE5ZeO77yfJ1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCflv6vpgJ/liKDpmaTmqKHmnb/lt7Looqvnva7kuo7pobXpnaLkuK3jgIInLCAn5b+r6YCf5Yiq6Zmk5qih5p2/5bey6KKr572u5pa86aCB6Z2i5Lit44CCJykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0ZXh0ID0gdGV4dE5vU2Q7XG5cdFx0XHRcdGNvbnN0IGNvcHl2aW8gPSAvKD86XFx7XFx7XFxzKihjb3B5dmlvfOS+teadg3zkvrXmrIopW157fV0qP1xcfVxcfSkvaS5leGVjKHRleHQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y29weXZpbyAmJlxuXHRcdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHQn6JGX5L2c5p2D6aqM6K+B5qih5p2/5bey6KKr572u5LqO6aG16Z2i5Lit77yM5oKo5piv5ZCm5LuN5oOz5Yqg5YWl5LiA5Liq5b+r6YCf5Yig6Zmk5qih5p2/77yfJyxcblx0XHRcdFx0XHRcdFx0J+iRl+S9nOasiumpl+itieaooeadv+W3suiiq+e9ruaWvOmggemdouS4re+8jOaCqOaYr+WQpuS7jeaDs+WKoOWFpeS4gOWAi+W/q+mAn+WIqumZpOaooeadv++8nydcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn6aG16Z2i5Lit5bey5pyJ6JGX5L2c5p2D6aqM6K+B5qih5p2/44CCJywgJ+mggemdouS4reW3suacieiRl+S9nOasiumpl+itieaooeadv+OAgicpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgeGZkID0gLyg/Olxce1xceyhbcnNhaWZ0Y212XWZkfG1kMXxwcm9wb3NlZCBkZWxldGlvbilbXnt9XSo/XFx9XFx9KS9pLmV4ZWModGV4dCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR4ZmQgJiZcblx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yig6Zmk55u45YWz5qih5p2/e3snLCAn5Yiq6Zmk55u46Zec5qih5p2/e3snKSArXG5cdFx0XHRcdFx0XHRcdHhmZFsxXSArXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQnfX3lt7Looqvnva7kuo7pobXpnaLkuK3vvIzmgqjmmK/lkKbku43mg7PliqDlhaXkuIDkuKrlv6vpgJ/liKDpmaTmqKHmnb/vvJ8nLFxuXHRcdFx0XHRcdFx0XHRcdCd9feW3suiiq+e9ruaWvOmggemdouS4re+8jOaCqOaYr+WQpuS7jeaDs+WKoOWFpeS4gOWAi+W/q+mAn+WIqumZpOaooeadv++8nydcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfpobXpnaLlt7Looqvmj5DkuqToh7PlrZjlup/orqjorrrjgIInLCAn6aCB6Z2i5bey6KKr5o+Q5Lqk6Iez5a2Y5bui6KiO6KuW44CCJykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBnaXZlbiB0aGUgcGFyYW1zLCBidWlsZHMgdGhlIHRlbXBsYXRlIGFuZCBhbHNvIGFkZHMgdGhlIHVzZXIgdGFsayBwYWdlIHBhcmFtZXRlcnMgdG8gdGhlIHBhcmFtcyB0aGF0IHdlcmUgcGFzc2VkIGluXG5cdFx0XHRcdC8vIHJldHVybnMgPT4gWzxzdHJpbmc+IHdpa2l0ZXh0LCA8b2JqZWN0PiB1dHBhcmFtc11cblx0XHRcdFx0Y29uc3QgYnVpbGREYXRhID0gVHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLmdldFRlbXBsYXRlQ29kZUFuZFBhcmFtcyhwYXJhbXMpO1xuXHRcdFx0XHRsZXQgW2NvZGVdID0gYnVpbGREYXRhO1xuXHRcdFx0XHRbLCBwYXJhbXMudXRwYXJhbXNdID0gYnVpbGREYXRhO1xuXHRcdFx0XHRjb25zdCB0aGlzcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpKTtcblx0XHRcdFx0Ly8gcGF0cm9sIHRoZSBwYWdlLCBpZiByZWFjaGVkIGZyb20gU3BlY2lhbDpOZXdQYWdlc1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdtYXJrU3BlZWR5UGFnZXNBc1BhdHJvbGxlZCcpKSB7XG5cdFx0XHRcdFx0dGhpc3BhZ2UucGF0cm9sKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV3JhcCBTRCB0ZW1wbGF0ZSBpbiBub2luY2x1ZGUgdGFncyBpZiB3ZSBhcmUgaW4gdGVtcGxhdGUgc3BhY2UuXG5cdFx0XHRcdC8vIFdvbid0IHdvcmsgd2l0aCB1c2VyYm94ZXMgaW4gdXNlcnNwYWNlLCBvciBhbnkgb3RoZXIgdHJhbnNjbHVkZWQgcGFnZSBvdXRzaWRlIHRlbXBsYXRlIHNwYWNlXG5cdFx0XHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAxMCkge1xuXHRcdFx0XHRcdC8vIFRlbXBsYXRlOlxuXHRcdFx0XHRcdGNvZGUgPSBgPG5vaW5jbHVkZT4ke2NvZGV9PC9ub2luY2x1ZGU+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBSZW1vdmUgdGFncyB0aGF0IGJlY29tZSBzdXBlcmZsdW91cyB3aXRoIHRoaXMgYWN0aW9uXG5cdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdFx0L1xce1xce1xccyooW05uXWV3IHVucmV2aWV3ZWQgYXJ0aWNsZXxbVXVdbnJldmlld2VkfFtVdV1zZXJzcGFjZSBkcmFmdClcXHMqKFxcfCg/Olxce1xce1tee31dKlxcfVxcfXxbXnt9XSkqKT9cXH1cXH1cXHMqL2csXG5cdFx0XHRcdFx0Jydcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYpIHtcblx0XHRcdFx0XHQvLyByZW1vdmUgXCJtb3ZlIHRvIENvbW1vbnNcIiB0YWcgLSBkZWxldGlvbi10YWdnZWQgZmlsZXMgY2Fubm90IGJlIG1vdmVkIHRvIENvbW1vbnNcblx0XHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0L1xce1xceyhtdGN8KGNvcHkgfG1vdmUgKT90byA/KHNoYXJlfGNvbW1vbnMpfG1vdmUgdG8gKHlzYXJjaGl2ZXMgc2hhcmV8d2lraW1lZGlhIGNvbW1vbnMpfGNvcHkgdG8gKHlzYXJjaGl2ZXMgc2hhcmV8d2lraW1lZGlhIGNvbW1vbnMpKVtefV0qXFx9XFx9L2dpLFxuXHRcdFx0XHRcdFx0Jydcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwYXJhbXMucmVxdWVzdHNhbHQpIHtcblx0XHRcdFx0XHRjb2RlID0gYHt7c2FsdH19XFxuJHtjb2RlfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gR2VuZXJhdGUgZWRpdCBzdW1tYXJ5IGZvciBlZGl0XG5cdFx0XHRcdGxldCBlZGl0c3VtbWFyeTtcblx0XHRcdFx0aWYgKHBhcmFtcy5ub3JtYWxpemVkcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0ZWRpdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+ivt+axguW/q+mAn+WIoOmZpO+8iCcsICfoq4vmsYLlv6vpgJ/liKrpmaTvvIgnKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG5vcm0gb2YgcGFyYW1zLm5vcm1hbGl6ZWRzKSB7XG5cdFx0XHRcdFx0XHRpZiAobm9ybSAhPT0gJ2RiJykge1xuXHRcdFx0XHRcdFx0XHRlZGl0c3VtbWFyeSArPSBgW1tMSUI6Q1NEIyR7bm9ybS50b1VwcGVyQ2FzZSgpfXxDU0QgJHtub3JtLnRvVXBwZXJDYXNlKCl9XV3jgIFgO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlZGl0c3VtbWFyeSA9IGVkaXRzdW1tYXJ5LnNsaWNlKDAsIE1hdGgubWF4KDAsIGVkaXRzdW1tYXJ5Lmxlbmd0aCAtIDEpKTsgLy8gcmVtb3ZlIHRyYWlsaW5nIGNvbW1hXG5cdFx0XHRcdFx0ZWRpdHN1bW1hcnkgKz0gJ++8iSc7XG5cdFx0XHRcdH0gZWxzZSBpZiAocGFyYW1zLm5vcm1hbGl6ZWRzWzBdID09PSAnZGInKSB7XG5cdFx0XHRcdFx0ZWRpdHN1bW1hcnkgPVxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfor7fmsYJbW0xJQjpDU0R85b+r6YCf5Yig6ZmkXV3vvJonLCAn6KuL5rGCW1tMSUI6Q1NEfOW/q+mAn+WIqumZpF1d77yaJykgK1xuXHRcdFx0XHRcdFx0cGFyYW1zLnRlbXBsYXRlUGFyYW1zWzBdWycxJ107XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWRpdHN1bW1hcnkgPSBgJHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6K+35rGC5b+r6YCf5Yig6ZmkJyxcblx0XHRcdFx0XHRcdCfoq4vmsYLlv6vpgJ/liKrpmaQnXG5cdFx0XHRcdFx0KX3vvIhbW0xJQjpDU0QjJHtwYXJhbXMubm9ybWFsaXplZHNbMF0udG9VcHBlckNhc2UoKX18Q1NEICR7cGFyYW1zLm5vcm1hbGl6ZWRzWzBdLnRvVXBwZXJDYXNlKCl9XV3vvIlgO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEJsYW5rIGF0dGFjayBwYWdlc1xuXHRcdFx0XHRpZiAocGFyYW1zLmJsYW5rKSB7XG5cdFx0XHRcdFx0dGV4dCA9IGNvZGU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IHRhZyBhZnRlciBzaG9ydCBkZXNjcmlwdGlvbiBvciBhbnkgaGF0bm90ZXNcblx0XHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraXRleHQucGFnZSh0ZXh0KTtcblx0XHRcdFx0XHR0ZXh0ID0geXNhcmNoaXZlc19wYWdlLmluc2VydEFmdGVyVGVtcGxhdGVzKGAke2NvZGV9XFxuYCwgVHdpbmtsZS5oYXRub3RlUmVnZXgpLmdldFRleHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KGVkaXRzdW1tYXJ5KTtcblx0XHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KHBhcmFtcy53YXRjaCk7XG5cdFx0XHRcdHBhZ2VvYmouc2F2ZShUd2lua2xlLnNwZWVkeS5jYWxsYmFja3MudXNlci50YWdDb21wbGV0ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGFnQ29tcGxldGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRcdC8vIE5vdGlmaWNhdGlvbiB0byBmaXJzdCBjb250cmlidXRvclxuXHRcdFx0XHRpZiAocGFyYW1zLnVzZXJ0YWxrKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSAocGFnZU9iaikgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGluaXRpYWxDb250cmliID0gcGFnZU9iai5nZXRDcmVhdG9yKCk7XG5cdFx0XHRcdFx0XHQvLyBkaXNhbGxvdyB3YXJuaW5nIHlvdXJzZWxmXG5cdFx0XHRcdFx0XHRpZiAoaW5pdGlhbENvbnRyaWIgPT09IG13LmNvbmZpZy5nZXQoJ3dnVXNlck5hbWUnKSkge1xuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHRcdFx0XHRg5oKo77yIJHtpbml0aWFsQ29udHJpYn0ke3dpbmRvdy53Z1VMUygn77yJ5Yib5bu65LqG6K+l6aG177yM6Lez6L+H6YCa55+lJywgJ++8ieW7uueri+S6huipsumgge+8jOi3s+mBjumAmuefpScpfWBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0aW5pdGlhbENvbnRyaWIgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHQvLyBkb24ndCBub3RpZnkgdXNlcnMgd2hlbiB0aGVpciB1c2VyIHRhbGsgcGFnZSBpcyBub21pbmF0ZWRcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGluaXRpYWxDb250cmliID09PSBtdy5jb25maWcuZ2V0KCd3Z1RpdGxlJykgJiZcblx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gM1xuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy53YXJuKFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfpgJrnn6XpobXpnaLliJvlu7rogIXvvJrnlKjmiLfliJvlu7rkuoboh6rlt7HnmoTorqjorrrpobUnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J+mAmuefpemggemdouW7uueri+iAhe+8muS9v+eUqOiAheW7uueri+S6huiHquW3seeahOiojuirlumggSdcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGluaXRpYWxDb250cmliID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Ly8gcXVpY2sgaGFjayB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSB1bndhbnRlZCBub3RpZmljYXRpb25zLiBTaG91bGQgYWN0dWFsbHkgYmUgY29uZmlndXJhYmxlIG9uIHJlY2lwaWVudCBwYWdlLi4uXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGluaXRpYWxDb250cmliID09PSAnQTIwOTMwNjQtYm90JyAmJiBwYXJhbXMubm9ybWFsaXplZHNbMF0gPT09ICdnMTUnKSB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy53YXJuKFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfpgJrnn6XpobXpnaLliJvlu7rogIXvvJrnlLHmnLrlmajkurrliJvlu7rvvIzot7Pov4fpgJrnn6UnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J+mAmuefpemggemdouW7uueri+iAhe+8mueUseapn+WZqOS6uuW7uueri++8jOi3s+mBjumAmuefpSdcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGluaXRpYWxDb250cmliID0gbnVsbDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhbGtQYWdlTmFtZSA9IGBVc2VyIHRhbGs6JHtpbml0aWFsQ29udHJpYn1gO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB1c2VydGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHRcdHRhbGtQYWdlTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+mAmuefpemhtemdouWIm+W7uuiAhe+8iCcsICfpgJrnn6XpoIHpnaLlu7rnq4vogIXvvIgnKSArIGluaXRpYWxDb250cmlife+8iWBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0bGV0IG5vdGlmeXRleHQ7XG5cdFx0XHRcdFx0XHRcdG5vdGlmeXRleHQgPSAnXFxue3snLmNvbmNhdCgnc3Vic3Q6JywgYGRiLW5vdGljZXx0YXJnZXQ9JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19YCk7XG5cdFx0XHRcdFx0XHRcdG5vdGlmeXRleHQgKz0gXCJ8bm93ZWxjb21lPXllcyd9fS0tfn5cIi5jb25jYXQoJ35+Jyk7XG5cdFx0XHRcdFx0XHRcdGxldCBlZGl0c3VtbWFyeSA9ICfpgJrnn6XvvJonO1xuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLm5vcm1hbGl6ZWRzLmluY2x1ZGVzKCdnMycpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWRpdHN1bW1hcnkgKz0gJ+S4gOaUu+WHu+aAp+mhtemdoic7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbm8gYXJ0aWNsZSBuYW1lIGluIHN1bW1hcnkgZm9yIEcxMCBkZWxldGlvbnNcblx0XHRcdFx0XHRcdFx0XHRlZGl0c3VtbWFyeSArPSBg6aG16Z2iW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWRpdHN1bW1hcnkgKz0gJ+W/q+mAn+WIoOmZpOaPkOWQjSc7XG5cdFx0XHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRBcHBlbmRUZXh0KG5vdGlmeXRleHQpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0RWRpdFN1bW1hcnkoZWRpdHN1bW1hcnkpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2UuYXBwZW5kKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBhZGQgdGhpcyBub21pbmF0aW9uIHRvIHRoZSB1c2VyJ3MgdXNlcnNwYWNlIGxvZywgaWYgdGhlIHVzZXIgaGFzIGVuYWJsZWQgaXRcblx0XHRcdFx0XHRcdGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3MudXNlci5hZGRUb0xvZyhwYXJhbXMsIGluaXRpYWxDb250cmliKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IHRoaXNwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShNb3JlYml0cy5wYWdlTmFtZU5vcm0pO1xuXHRcdFx0XHRcdHRoaXNwYWdlLmxvb2t1cENyZWF0aW9uKGNhbGxiYWNrKTtcblx0XHRcdFx0XHQvLyBvciwgaWYgbm90IG5vdGlmeWluZywgYWRkIHRoaXMgbm9taW5hdGlvbiB0byB0aGUgdXNlcidzIHVzZXJzcGFjZSBsb2cgd2l0aG91dCB0aGUgaW5pdGlhbCBjb250cmlidXRvcidzIG5hbWVcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRcdFR3aW5rbGUuc3BlZWR5LmNhbGxiYWNrcy51c2VyLmFkZFRvTG9nKHBhcmFtcywgbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBub3RlOiB0aGlzIGNvZGUgaXMgYWxzbyBpbnZva2VkIGZyb20gdHdpbmtsZWltYWdlXG5cdFx0XHQvLyB0aGUgcGFyYW1zIHVzZWQgYXJlOlxuXHRcdFx0Ly8gICBmb3IgQ1NEOiBwYXJhbXMudmFsdWVzLCBwYXJhbXMubm9ybWFsaXplZHMgIChub3RlOiBub3JtYWxpemVkcyBpcyBhbiBhcnJheSlcblx0XHRcdC8vICAgZm9yIERJOiBwYXJhbXMuZnJvbURJID0gdHJ1ZSwgcGFyYW1zLnRlbXBsYXRlbmFtZSwgcGFyYW1zLm5vcm1hbGl6ZWQgIChub3RlOiBub3JtYWxpemVkIGlzIGEgc3RyaW5nKVxuXHRcdFx0YWRkVG9Mb2c6IChwYXJhbXMsIGluaXRpYWxDb250cmliKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHVzbCA9IG5ldyBNb3JlYml0cy51c2Vyc3BhY2VMb2dnZXIoVHdpbmtsZS5nZXRQcmVmKCdzcGVlZHlMb2dQYWdlTmFtZScpKTtcblx0XHRcdFx0dXNsLmluaXRpYWxUZXh0ID0gYOi/meaYr+ivpeeUqOaIt+S9v+eUqFtbSDpUV3xUd2lua2xlXV3nmoTpgJ/liKDmqKHlnZflgZrlh7rnmoRbW0xJQjpDU0R85b+r6YCf5Yig6ZmkXV3mj5DlkI3liJfooajjgIJcXG5cXG7oi6XmgqjkuI3lho3mg7Pkv53nlZnmraTml6Xlv5fvvIzor7flnKhbWyR7VHdpbmtsZS5nZXRQcmVmKFxuXHRcdFx0XHRcdCdjb25maWdQYWdlJ1xuXHRcdFx0XHQpfXzlj4LmlbDorr7nva5dXeS4reWFs+aOie+8jOW5tuS9v+eUqFtbTElCOkNTRCNPMXxDU0QgTzFdXeaPkOS6pOW/q+mAn+WIoOmZpOOAgiR7XG5cdFx0XHRcdFx0TW9yZWJpdHMudXNlcklzU3lzb3AgPyAnXFxuXFxu5q2k5pel5b+X5bm25LiN6K6w5b2V55SoVHdpbmtsZeebtOaOpeaJp+ihjOeahOWIoOmZpOOAgicgOiAnJ1xuXHRcdFx0XHR9YDtcblx0XHRcdFx0bGV0IGFwcGVuZFRleHQgPSBgIyBbWzoke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXe+8mmA7XG5cdFx0XHRcdGlmIChwYXJhbXMuZnJvbURJKSB7XG5cdFx0XHRcdFx0YXBwZW5kVGV4dCArPSBg5Zu+54mIW1tMSUI6Q1NEIyR7cGFyYW1zLm5vcm1hbGl6ZWQudG9VcHBlckNhc2UoKX18Q1NEICR7cGFyYW1zLm5vcm1hbGl6ZWQudG9VcHBlckNhc2UoKX1dXe+8iHt7dGx8JHtcblx0XHRcdFx0XHRcdHBhcmFtcy50ZW1wbGF0ZW5hbWVcblx0XHRcdFx0XHR9fX3vvIlgO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtcy5ub3JtYWxpemVkcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0YXBwZW5kVGV4dCArPSAn5aSa5Liq55CG55Sx77yIJztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG5vcm0gb2YgcGFyYW1zLm5vcm1hbGl6ZWRzKSB7XG5cdFx0XHRcdFx0XHRhcHBlbmRUZXh0ICs9IGBbW0xJQjpDU0QjJHtub3JtLnRvVXBwZXJDYXNlKCl9fCR7bm9ybS50b1VwcGVyQ2FzZSgpfV1d44CBYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YXBwZW5kVGV4dCA9IGFwcGVuZFRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgYXBwZW5kVGV4dC5sZW5ndGggLSAxKSk7IC8vIHJlbW92ZSB0cmFpbGluZyBjb21tYVxuXHRcdFx0XHRcdGFwcGVuZFRleHQgKz0gJ++8iSc7XG5cdFx0XHRcdH0gZWxzZSBpZiAocGFyYW1zLm5vcm1hbGl6ZWRzWzBdID09PSAnZGInKSB7XG5cdFx0XHRcdFx0YXBwZW5kVGV4dCArPSAn6Ieq5a6a5LmJ55CG55SxJztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcHBlbmRUZXh0ICs9IGBbW0xJQjpDU0QjJHtwYXJhbXMubm9ybWFsaXplZHNbMF0udG9VcHBlckNhc2UoKX18Q1NEICR7cGFyYW1zLm5vcm1hbGl6ZWRzWzBdLnRvVXBwZXJDYXNlKCl9XV1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwYXJhbXMucmVxdWVzdHNhbHQpIHtcblx0XHRcdFx0XHRhcHBlbmRUZXh0ICs9IHdpbmRvdy53Z1VMUygn77yb6K+35rGC55m957q45L+d5oqkJywgJ++8m+iri+axgueZvee0meS/neittycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpbml0aWFsQ29udHJpYikge1xuXHRcdFx0XHRcdGFwcGVuZFRleHQgKz0gYO+8m+mAmuefpXt7dXNlcnwke2luaXRpYWxDb250cmlifX19YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcHBlbmRUZXh0ICs9ICcgfn4nLmNvbmNhdCgnficsICd+flxcbicpO1xuXHRcdFx0XHR1c2wuY2hhbmdlVGFncyA9IFR3aW5rbGUuY2hhbmdlVGFncztcblx0XHRcdFx0dXNsLmxvZyhcblx0XHRcdFx0XHRhcHBlbmRUZXh0LFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6K6w5b2V5a+5W1snLCAn6KiY6YyE5bCNW1snKSArXG5cdFx0XHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCddXeeahOW/q+mAn+WIoOmZpOaPkOWQjScsICddXeeahOW/q+mAn+WIqumZpOaPkOWQjScpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdH0sXG5cdH07XG5cdC8vIHZhbGlkYXRlIHN1Ymdyb3VwcyBpbiB0aGUgZm9ybSBwYXNzZWQgaW50byB0aGUgc3BlZWR5IGRlbGV0aW9uIHRhZ1xuXHRUd2lua2xlLnNwZWVkeS5nZXRQYXJhbWV0ZXJzID0gKGZvcm0sIHZhbHVlcykgPT4ge1xuXHRcdGxldCBwYXJhbWV0ZXJzID0gW107XG5cdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRQYXJhbXMgPSBbXTtcblx0XHRcdGxldCByZWRpbWFnZTtcblx0XHRcdHN3aXRjaCAodmFsdWUpIHtcblx0XHRcdFx0Y2FzZSAncmVhc29uJzpcblx0XHRcdFx0XHRpZiAoZm9ybVsnY3NkLnJlYXNvbl8xJ10pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGRicmF0aW9uYWxlID0gZm9ybVsnY3NkLnJlYXNvbl8xJ10udmFsdWU7XG5cdFx0XHRcdFx0XHRpZiAoIWRicmF0aW9uYWxlIHx8ICFkYnJhdGlvbmFsZS50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCfoh6rlrprkuYnnkIbnlLHvvJror7fmjIflrprnkIbnlLHjgIInLCAn6Ieq6KiC55CG55Sx77ya6KuL5oyH5a6a55CG55Sx44CCJyksIHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXNwZWVkeScsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYW1zWycxJ10gPSBkYnJhdGlvbmFsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2EyJzpcblx0XHRcdFx0XHRpZiAoZm9ybVsnY3NkLmEyX3BhZ2VuYW1lJ10pIHtcblx0XHRcdFx0XHRcdGNvbnN0IG90aGVycGFnZSA9IGZvcm1bJ2NzZC5hMl9wYWdlbmFtZSddLnZhbHVlO1xuXHRcdFx0XHRcdFx0aWYgKCFvdGhlcnBhZ2UgfHwgIW90aGVycGFnZS50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCdDU0QgQTLvvJror7fmj5DkvpvnjrDmnInmnaHnm67nmoTlkI3np7DjgIInLCAnQ1NEIEEy77ya6KuL5o+Q5L6b54++5pyJ5qKd55uu55qE5ZCN56ix44CCJyksXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXNwZWVkeScsXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYW1zLnBhZ2VuYW1lID0gb3RoZXJwYWdlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZzQnOlxuXHRcdFx0XHRcdGlmIChmb3JtWydjc2QuZzRfcGFnZW5hbWUnXSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFnZW5hbWUgPSBmb3JtWydjc2QuZzRfcGFnZW5hbWUnXS52YWx1ZTtcblx0XHRcdFx0XHRcdGlmICghcGFnZW5hbWUgfHwgIXBhZ2VuYW1lLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ0NTRCBHNO+8muivt+aPkOS+m+mhtemdouWQjeensOOAgicsICdDU0QgRzTvvJroq4vmj5DkvpvpoIHpnaLlkI3nqLHjgIInKSwge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlc3BlZWR5Jyxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnMgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhbXMucGFnZW5hbWUgPSBwYWdlbmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2YyJzpcblx0XHRcdFx0XHRpZiAoZm9ybVsnY3NkLmYyX2ZpbGVuYW1lJ10pIHtcblx0XHRcdFx0XHRcdHJlZGltYWdlID0gZm9ybVsnY3NkLmYyX2ZpbGVuYW1lJ10udmFsdWU7XG5cdFx0XHRcdFx0XHRpZiAoIXJlZGltYWdlIHx8ICFyZWRpbWFnZS50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCdDU0QgRjLvvJror7fmj5Dkvpvlj6bkuIDmlofku7bnmoTlkI3np7DjgIInLCAnQ1NEIEYy77ya6KuL5o+Q5L6b5Y+m5LiA5qqU5qGI55qE5ZCN56ix44CCJyksXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXNwZWVkeScsXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYW1zLmZpbGVuYW1lID0gcmVkaW1hZ2UucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0bmV3IFJlZ0V4cChgXlxcXFxzKiR7TW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoNil9OmAsICdpJyksXG5cdFx0XHRcdFx0XHRcdCcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncjEnOlxuXHRcdFx0XHRcdGlmIChmb3JtWydjc2QucjFfdHlwZSddKSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZWRpcnR5cGUgPSBmb3JtWydjc2QucjFfdHlwZSddLnZhbHVlO1xuXHRcdFx0XHRcdFx0aWYgKCFyZWRpcnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCdDU0QgUjHvvJror7fpgInmi6npgILnlKjnsbvlnovjgIInLCAnQ1NEIFIx77ya6KuL6YG45pOH6YGp55So6aGe5Yil44CCJyksIHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXNwZWVkeScsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYW1zWycxJ10gPSByZWRpcnR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdyMic6XG5cdFx0XHRcdFx0aWYgKGZvcm1bJ2NzZC5yMl90eXBlJ10pIHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlZGlydHlwZSA9IGZvcm1bJ2NzZC5yMl90eXBlJ10udmFsdWU7XG5cdFx0XHRcdFx0XHRpZiAoIXJlZGlydHlwZSkge1xuXHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ0NTRCBSMu+8muivt+mAieaLqemAgueUqOexu+Wei+OAgicsICdDU0QgUjLvvJroq4vpgbjmk4fpgannlKjpoZ7liKXjgIInKSwge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlc3BlZWR5Jyxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnMgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhbXNbJzEnXSA9IHJlZGlydHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRwYXJhbWV0ZXJzW3BhcmFtZXRlcnMubGVuZ3RoXSA9IGN1cnJlbnRQYXJhbXM7XG5cdFx0fVxuXHRcdHJldHVybiBwYXJhbWV0ZXJzO1xuXHR9O1xuXHQvLyBGdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyB0YWxrIHBhZ2Ugbm90aWZpY2F0aW9uIHRlbXBsYXRlIHBhcmFtZXRlcnNcblx0VHdpbmtsZS5zcGVlZHkuZ2V0VXNlclRhbGtQYXJhbWV0ZXJzID0gKG5vcm1hbGl6ZWQpID0+IHtcblx0XHRjb25zdCB1dHBhcmFtcyA9IFtdO1xuXHRcdHN3aXRjaCAobm9ybWFsaXplZCkge1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiB1dHBhcmFtcztcblx0fTtcblx0VHdpbmtsZS5zcGVlZHkucmVzb2x2ZUNzZFZhbHVlcyA9IChlKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0gKGUudGFyZ2V0LmZvcm0gPz8gZS50YXJnZXQpLmdldENoZWNrZWQoJ2NzZCcpO1xuXHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ivt+mAieaLqeS4gOS4queQhuaNru+8gScsICfoq4vpgbjmk4fkuIDlgIvnkIbmk5rvvIEnKSwge1xuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdHRhZzogJ3R3aW5rbGVzcGVlZHknLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fTtcblx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2suZXZhbHVhdGVTeXNvcCA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0LmZvcm0gPz8gZS50YXJnZXQ7XG5cdFx0aWYgKGUudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcgfHwgZS50YXJnZXQudHlwZSA9PT0gJ3RleHQnIHx8IGUudGFyZ2V0LnR5cGUgPT09ICdzZWxlY3QnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHt0YWdfb25seX0gPSBmb3JtO1xuXHRcdGlmICh0YWdfb25seSAmJiB0YWdfb25seS5jaGVja2VkKSB7XG5cdFx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5ldmFsdWF0ZVVzZXIoZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlcyA9IFR3aW5rbGUuc3BlZWR5LnJlc29sdmVDc2RWYWx1ZXMoZSk7XG5cdFx0aWYgKCF2YWx1ZXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgbm9ybWFsaXplZHMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0cmV0dXJuIFR3aW5rbGUuc3BlZWR5Lm5vcm1hbGl6ZUhhc2hbdmFsdWVdO1xuXHRcdH0pO1xuXHRcdC8vIGFuYWx5c2UgZWFjaCBjcml0ZXJpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gd2F0Y2ggdGhlIHBhZ2UsIHByb21wdCBmb3Igc3VtbWFyeSwgb3Igb3BlbiB1c2VyIHRhbGsgcGFnZVxuXHRcdGxldCB3YXRjaFBhZ2U7XG5cdFx0bGV0IHByb21wdEZvclN1bW1hcnk7XG5cdFx0Zm9yIChjb25zdCBub3JtIG9mIG5vcm1hbGl6ZWRzKSB7XG5cdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFNwZWVkeVBhZ2VzJykuaW5jbHVkZXMobm9ybSkpIHtcblx0XHRcdFx0d2F0Y2hQYWdlID0gVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFNwZWVkeUV4cGlyeScpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZigncHJvbXB0Rm9yU3BlZWR5RGVsZXRpb25TdW1tYXJ5JykuaW5jbHVkZXMobm9ybSkpIHtcblx0XHRcdFx0cHJvbXB0Rm9yU3VtbWFyeSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdHZhbHVlcyxcblx0XHRcdG5vcm1hbGl6ZWRzLFxuXHRcdFx0d2F0Y2g6IHdhdGNoUGFnZSxcblx0XHRcdGRlbGV0ZVRhbGtQYWdlOiBmb3JtLnRhbGtwYWdlICYmIGZvcm0udGFsa3BhZ2UuY2hlY2tlZCxcblx0XHRcdGRlbGV0ZVJlZGlyZWN0czogZm9ybS5yZWRpcmVjdHMuY2hlY2tlZCxcblx0XHRcdG9wZW5Vc2VyVGFsazogZm9ybS5vcGVudXNlcnRhbGsuY2hlY2tlZCxcblx0XHRcdHByb21wdEZvclN1bW1hcnksXG5cdFx0XHR0ZW1wbGF0ZVBhcmFtczogVHdpbmtsZS5zcGVlZHkuZ2V0UGFyYW1ldGVycyhmb3JtLCB2YWx1ZXMpLFxuXHRcdH07XG5cdFx0aWYgKCFwYXJhbXMudGVtcGxhdGVQYXJhbXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRUd2lua2xlLnNwZWVkeS5jYWxsYmFja3Muc3lzb3AubWFpbihwYXJhbXMpO1xuXHR9O1xuXHRUd2lua2xlLnNwZWVkeS5jYWxsYmFjay5ldmFsdWF0ZVVzZXIgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IGZvcm0gPSBlLnRhcmdldC5mb3JtID8/IGUudGFyZ2V0O1xuXHRcdGlmIChlLnRhcmdldC50eXBlID09PSAnY2hlY2tib3gnIHx8IGUudGFyZ2V0LnR5cGUgPT09ICd0ZXh0JyB8fCBlLnRhcmdldC50eXBlID09PSAnc2VsZWN0Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB2YWx1ZXMgPSBUd2lua2xlLnNwZWVkeS5yZXNvbHZlQ3NkVmFsdWVzKGUpO1xuXHRcdGlmICghdmFsdWVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIGNvbnN0IG11bHRpcGxlID0gZm9ybS5tdWx0aXBsZS5jaGVja2VkO1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRzID0gW107XG5cdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcblx0XHRcdGNvbnN0IG5vcm0gPSBUd2lua2xlLnNwZWVkeS5ub3JtYWxpemVIYXNoW3ZhbHVlXTtcblx0XHRcdG5vcm1hbGl6ZWRzW25vcm1hbGl6ZWRzLmxlbmd0aF0gPSBub3JtO1xuXHRcdH1cblx0XHQvLyBhbmFseXNlIGVhY2ggY3JpdGVyaW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHdhdGNoIHRoZSBwYWdlL25vdGlmeSB0aGUgY3JlYXRvclxuXHRcdGxldCB3YXRjaFBhZ2UgPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IG5vcm0gb2Ygbm9ybWFsaXplZHMpIHtcblx0XHRcdGlmIChUd2lua2xlLmdldFByZWYoJ3dhdGNoU3BlZWR5UGFnZXMnKS5pbmNsdWRlcyhub3JtKSkge1xuXHRcdFx0XHR3YXRjaFBhZ2UgPSBUd2lua2xlLmdldFByZWYoJ3dhdGNoU3BlZWR5RXhwaXJ5Jyk7XG5cdFx0XHRcdGNvbnRpbnVlOyAvLyBicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBub3RpZnl1c2VyID0gZmFsc2U7XG5cdFx0aWYgKGZvcm0ubm90aWZ5LmNoZWNrZWQpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9ybSBvZiBub3JtYWxpemVkcykge1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdub3RpZnlVc2VyT25TcGVlZHlEZWxldGlvbk5vbWluYXRpb24nKS5pbmNsdWRlcyhub3JtKSkge1xuXHRcdFx0XHRcdG5vdGlmeXVzZXIgPSB0cnVlO1xuXHRcdFx0XHRcdGNvbnRpbnVlOyAvLyBicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGNzZGxvZyA9IGZhbHNlO1xuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ2xvZ1NwZWVkeU5vbWluYXRpb25zJykpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9ybSBvZiBub3JtYWxpemVkcykge1xuXHRcdFx0XHRpZiAoIVR3aW5rbGUuZ2V0UHJlZignbm9Mb2dPblNwZWVkeU5vbWluYXRpb24nKS5pbmNsdWRlcyhub3JtKSkge1xuXHRcdFx0XHRcdGNzZGxvZyA9IHRydWU7XG5cdFx0XHRcdFx0Y29udGludWU7IC8vIGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHR2YWx1ZXMsXG5cdFx0XHRub3JtYWxpemVkcyxcblx0XHRcdHdhdGNoOiB3YXRjaFBhZ2UsXG5cdFx0XHR1c2VydGFsazogbm90aWZ5dXNlcixcblx0XHRcdGxvZ25vbWluYXRpb246IGNzZGxvZyxcblx0XHRcdGJsYW5rOiBmb3JtLmJsYW5rLmNoZWNrZWQsXG5cdFx0XHRyZXF1ZXN0c2FsdDogZm9ybS5zYWx0aW5nLmNoZWNrZWQsXG5cdFx0XHR0ZW1wbGF0ZVBhcmFtczogVHdpbmtsZS5zcGVlZHkuZ2V0UGFyYW1ldGVycyhmb3JtLCB2YWx1ZXMpLFxuXHRcdH07XG5cdFx0aWYgKCFwYXJhbXMudGVtcGxhdGVQYXJhbXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+agh+iusOWujOaIkCcsICfmqJnoqJjlrozmiJAnKTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0d2luZG93LndnVUxTKCfmoIforrDpobXpnaInLCAn5qiZ6KiY6aCB6Z2iJylcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLnNwZWVkeS5jYWxsYmFja3MudXNlci5tYWluKTtcblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS5zcGVlZHksICdzcGVlZHknKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlY29weXZpby5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGVjb3B5dmlvKCkge1xuXHQvKipcblx0ICogdHdpbmtsZWNvcHl2aW8uanM6IENvcHl2aW8gbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjpcdFRhYiAoXCJDb3B5dmlvXCIpXG5cdCAqIEFjdGl2ZSBvbjogRXhpc3RpbmcsIG5vbi1zcGVjaWFsIHBhZ2VzLCBleGNlcHQgZm9yIGZpbGUgcGFnZXNcblx0ICogd2l0aCBubyBsb2NhbCBmaWxlIHdoaWNoIGFyZSBub3QgcmVkaXJlY3RzXG5cdCAqIENvbmZpZyBkaXJlY3RpdmVzIGluOiAgVHdpbmtsZUNvbmZpZ1xuXHQgKi9cblx0VHdpbmtsZS5jb3B5dmlvID0gKCkgPT4ge1xuXHRcdC8vIERpc2FibGUgb246XG5cdFx0Ly8gKiBzcGVjaWFsIHBhZ2VzXG5cdFx0Ly8gKiBub24tZXhpc3RlbnQgcGFnZXNcblx0XHQvLyAqIG5vbi1sb2NhbCBmaWxlcywgd2hldGhlciB0aGVyZSBpcyBhIGxvY2FsIHBhZ2Ugb3Igbm90ICh1bm5lZWRlZCBsb2NhbCBwYWdlcyBvZiBub24tbG9jYWwgZmlsZXMgYXJlIGVsaWdpYmxlIGZvciBDU0QgRjIpXG5cdFx0Ly8gKiBmaWxlIHBhZ2VzIHdpdGhvdXQgYWN0dWFsIGZpbGVzICh0aGVzZSBhcmUgZWxpZ2libGUgZm9yIENTRCBHOClcblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpIDwgMCB8fFxuXHRcdFx0IW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgfHxcblx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSA2ICYmXG5cdFx0XHRcdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctc2hhcmVkdXBsb2FkJykgfHxcblx0XHRcdFx0XHQoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1pbWFnZXBhZ2Utc2VjdGlvbi1maWxlaGlzdG9yeScpICYmICFNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCgpKSkpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRUd2lua2xlLmNvcHl2aW8uY2FsbGJhY2ssXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+S+teadgycsICfkvrXmrIonKSxcblx0XHRcdCd0dy1jb3B5dmlvJyxcblx0XHRcdHdpbmRvdy53Z1VMUygn5o+Q5oql5L615p2D6aG16Z2iJywgJ+aPkOWgseS+teasiumggemdoicpLFxuXHRcdFx0Jydcblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLmNvcHl2aW8uY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgV2luZG93ID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MDAsIDM1MCk7XG5cdFx0V2luZG93LnNldFRpdGxlKHdpbmRvdy53Z1VMUygn5o+Q5oql5L615p2D6aG16Z2iJywgJ+aPkOWgseS+teasiumggemdoicpKTtcblx0XHRXaW5kb3cuc2V0U2NyaXB0TmFtZSgnVHdpbmtsZScpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5L615p2D6K6+572uJywgJ+S+teasiuioreWumicpLCAnSDpUVy9QUkVGI2NvcHl2aW8nKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0MjY29weXZpbycpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUuY29weXZpby5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S+teadg+adpea6kO+8micsICfkvrXmrIrkvobmupDvvJonKSxcblx0XHRcdG5hbWU6ICdzb3VyY2UnLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J0NTRCBHNDog5pu+57uP5qC55o2u5L615p2D5a6h5qC45Yig6Zmk5ZCO5Y+I6YeN5paw5Yib5bu655qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdCdDU0QgRzQ6IOabvue2k+agueaTmuS+teasiuWvqeaguOWIqumZpOW+jOWPiOmHjeaWsOW7uueri+eahOWFp+WuuSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHZhbHVlOiAnZzQnLFxuXHRcdFx0XHRcdG5hbWU6ICdnNCcsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflkIzml7bku6VHNOWHhuWImeaPkOaKpeW/q+mAn+WIoOmZpCcsICflkIzmmYLku6VHNOa6luWJh+aPkOWgseW/q+mAn+WIqumZpCcpLFxuXHRcdFx0XHRcdHN1Ymdyb3VwOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdnNF9wYWdlbmFtZScsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WJjeasoeWIoOmZpOeahOmhtemdouWQjeensCcsICfliY3mrKHliKrpmaTnmoTpoIHpnaLlkI3nqLEnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpgInloavvvIzoi6XliY3mrKHliKDpmaTnmoTpobXpnaLlkI3np7DkuI3lkIzvvIzor7fmj5DkvpsnLFxuXHRcdFx0XHRcdFx0XHRcdCfpgbjloavvvIzoi6XliY3mrKHliKrpmaTnmoTpoIHpnaLlkI3nqLHkuI3lkIzvvIzoq4vmj5DkvpsnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgJrnn6XpobXpnaLliJvlu7rogIUnLCAn6YCa55+l6aCB6Z2i5bu656uL6ICFJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdG5hbWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjpobXpnaLliJvlu7rogIXorqjorrrpobXkuIrmlL7nva7kuIDpgJrnn6XmqKHmnb/jgIInLFxuXHRcdFx0XHRcdFx0J+WcqOmggemdouW7uueri+iAheiojuirlumggeS4iuaUvue9ruS4gOmAmuefpeaooeadv+OAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzdWJtaXQnLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGZvcm0ucmVuZGVyKCk7XG5cdFx0V2luZG93LnNldENvbnRlbnQocmVzdWx0KTtcblx0XHRXaW5kb3cuZGlzcGxheSgpO1xuXHR9O1xuXHRUd2lua2xlLmNvcHl2aW8uY2FsbGJhY2tzID0ge1xuXHRcdHRyeVRhZ2dpbmc6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHQvLyDlhYjlsJ3or5XmoIforrDpobXpnaLvvIzoi6Xlj5HnjrDlt7Lnu4/moIforrDliJnlgZzmraLmj5DmiqVcblx0XHRcdGNvbnN0IHRleHQgPSBwYWdlb2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRpZiAodGV4dC5pbmNsdWRlcygne3tDb3B5dmlvfCcpKSB7XG5cdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5lcnJvcihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+mUmeivrycsICfpjK/oqqQnKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6aG16Z2i5bey57uP5qCH6K6w5L615p2D77yM6K+35Lq65bel56Gu6K6k5piv5ZCm5bey57uP5o+Q5oql44CCJyxcblx0XHRcdFx0XHRcdCfpoIHpnaLlt7LntpPmqJnoqJjkvrXmrIrvvIzoq4vkurrlt6Xnorroqo3mmK/lkKblt7LntpPmj5DloLHjgIInXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0VHdpbmtsZS5jb3B5dmlvLmNhbGxiYWNrcy50YWdnaW5nQXJ0aWNsZShwYWdlb2JqKTtcblx0XHRcdFx0Ly8gQ29udHJpYnV0b3Igc3BlY2lmaWMgZWRpdHNcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCkpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9va3VwQ3JlYXRpb24oVHdpbmtsZS5jb3B5dmlvLmNhbGxiYWNrcy5tYWluKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG1haW46IChwYWdlb2JqKSA9PiB7XG5cdFx0XHQvLyB0aGlzIGlzIGNvbWluZyBpbiBmcm9tIGxvb2t1cENyZWF0aW9uLi4uIVxuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGNvbnN0IGluaXRpYWxDb250cmliID0gcGFnZW9iai5nZXRDcmVhdG9yKCk7XG5cdFx0XHQvLyBBZGRpbmcgZGlzY3Vzc2lvblxuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0cGFyYW1zLmxvZ3BhZ2UsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg5YWl5L615p2D6K6w5b2V6aG5JywgJ+WKoOWFpeS+teasiuiomOmMhOmghScpXG5cdFx0XHQpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLmxvYWQoVHdpbmtsZS5jb3B5dmlvLmNhbGxiYWNrcy5jb3B5dmlvTGlzdCk7XG5cdFx0XHQvLyBOb3RpZmljYXRpb24gdG8gZmlyc3QgY29udHJpYnV0b3Jcblx0XHRcdGlmIChwYXJhbXMubm90aWZ5KSB7XG5cdFx0XHRcdGNvbnN0IHVzZXJ0YWxrcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0YFVzZXIgdGFsazoke2luaXRpYWxDb250cmlifWAsXG5cdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfpgJrnn6XpobXpnaLliJvlu7rogIXvvIgnLCAn6YCa55+l6aCB6Z2i5bu656uL6ICF77yIJykgKyBpbml0aWFsQ29udHJpYn3vvIlgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG5vdGlmeXRleHQgPSAnXFxue3snLmNvbmNhdCgnc3Vic3Q6JywgYENvcHl2aW9Ob3RpY2V8JHttdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyl9fX1gKTtcblx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldEFwcGVuZFRleHQobm90aWZ5dGV4dCk7XG5cdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRFZGl0U3VtbWFyeShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+mAmuefpe+8mumhtemdoltbJywgJ+mAmuefpe+8mumggemdoltbJykgK1xuXHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnXV3nlpHkvLzkvrXniq/okZfkvZzmnYMnLCAnXV3nlpHkvLzkvrXniq/niYjmrIonKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZignY29weXZpb1dhdGNoVXNlcicpKTtcblx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUsIGZhbHNlKTtcblx0XHRcdFx0dXNlcnRhbGtwYWdlLmFwcGVuZCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dGFnZ2luZ0FydGljbGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0Y29uc3QgcmV2aXNpb25JZCA9XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUmV2aXNpb25JZCcpIHx8IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk5ld0lkJykgfHwgbXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJyk7XG5cdFx0XHRsZXQgdGFnID0gJ3t7Jy5jb25jYXQoXG5cdFx0XHRcdCdzdWJzdDonLFxuXHRcdFx0XHRgQ29weXZpby9hdXRvfHVybD0ke3BhcmFtcy5zb3VyY2Vcblx0XHRcdFx0XHQucmVwbGFjZSgvaHR0cC9nLCAnJiMxMDQ7dHRwJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXFxuKy9nLCAnXFxuJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXlxccyooW14qXSkvZ20sICcqICQxJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXlxcKiAkL20sICcnKX18T2xkUmV2aXNpb249JHtyZXZpc2lvbklkfX19YFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHRleHQgPSBwYWdlb2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRjb25zdCBvbGRjc2QgPSB0ZXh0Lm1hdGNoKC9cXHtcXHtcXHMqKGRiKC1cXHcqKT98ZHxkZWxldGUpXFxzKihcXHwoPzpcXHtcXHtbXnt9XSpcXH1cXH18W157fV0pKik/XFx9XFx9L2kpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvbGRjc2QgJiZcblx0XHRcdFx0Y29uZmlybShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Zyo6aG16Z2i5LiK5om+5Yiw5b+r6YCf5Yig6Zmk5qih5p2/77yM6KaB5L+d55WZ5ZCX77yfXFxuXFxu5b2T6aG16Z2i5ZCM5pe25L6154qv6JGX5L2c5p2D5Y+I56ym5ZCI5b+r6YCf5Yig6Zmk5qCH5YeG5pe277yM5bqU6K+l5LyY5YWI6LWw5b+r6YCf5Yig6Zmk56iL5bqP44CCXFxu5Y2V5Ye74oCc56Gu6K6k4oCd5Lul5L+d55WZ5b+r6YCf5Yig6Zmk5qih5p2/77yM6Iul5oKo6K6k5Li65b+r6YCf5Yig6Zmk55CG55Sx5LiN5ZCI77yM5Y2V5Ye74oCc5Y+W5raI4oCd5Lul56e76Zmk5b+r6YCf5Yig6Zmk5qih5p2/44CCJyxcblx0XHRcdFx0XHRcdCflnKjpoIHpnaLkuIrmib7liLDlv6vpgJ/liKrpmaTmqKHmnb/vvIzopoHkv53nlZnll47vvJ9cXG5cXG7nlbbpoIHpnaLlkIzmmYLkvrXniq/niYjmrIrlj4jnrKblkIjlv6vpgJ/liKrpmaTmqJnmupbmmYLvvIzmh4noqbLlhKrlhYjotbDlv6vpgJ/liKrpmaTnqIvluo/jgIJcXG7pu57mk4rjgIznorroqo3jgI3ku6Xkv53nlZnlv6vpgJ/liKrpmaTmqKHmnb/vvIzoi6Xmgqjoqo3ngrrlv6vpgJ/liKrpmaTnkIbnlLHkuI3lkIjvvIzpu57mk4rjgIzlj5bmtojjgI3ku6Xnp7vpmaTlv6vpgJ/liKrpmaTmqKHmnb/jgIInXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGFnID0gYCR7b2xkY3NkWzBdfVxcbiR7dGFnfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1zLmc0KSB7XG5cdFx0XHRcdGxldCBzcGVlZHlUYWcgPSAne3tkZWxldGUnO1xuXHRcdFx0XHRzcGVlZHlUYWcgKz0gJ3xnNCc7XG5cdFx0XHRcdGlmIChwYXJhbXMuZzRfcGFnZW5hbWUpIHtcblx0XHRcdFx0XHRzcGVlZHlUYWcgKz0gYHwke3BhcmFtcy5nNF9wYWdlbmFtZX18YzE9W1tTcGVjaWFsOlVuZGVsZXRlLyR7cGFyYW1zLmc0X3BhZ2VuYW1lfV1dYDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzcGVlZHlUYWcgKz0gYHxjMT1bW1NwZWNpYWw6VW5kZWxldGUvJHttdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyl9XV1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNwZWVkeVRhZyArPSAnfX0nO1xuXHRcdFx0XHR0YWcgPSBgJHtzcGVlZHlUYWd9XFxuJHt0YWd9YDtcblx0XHRcdH1cblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQodGFnKTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkod2luZG93LndnVUxTKCfmraTpobXpnaLnlpHkvLzkvrXniq/okZfkvZzmnYMnLCAn5q2k6aCB6Z2i55aR5Ly85L6154qv54mI5qyKJykpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ2NvcHl2aW9XYXRjaFBhZ2UnKSk7XG5cdFx0XHQvLyBwYWdlb2JqLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZSgpO1xuXHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignbWFya0NvcHl2aW9QYWdlc0FzUGF0cm9sbGVkJykpIHtcblx0XHRcdFx0cGFnZW9iai5wYXRyb2woKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGNvcHl2aW9MaXN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGxldCBvdXRwdXQgPSAnJztcblx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0Y29uc3QgZGF0ZUhlYWRlclJlZ2V4ID0gbmV3IFJlZ0V4cChcblx0XHRcdFx0YF49PStcXFxccyoke2RhdGUuZ2V0VVRDTW9udGgoKSArIDF95pyIJHtkYXRlLmdldFVUQ0RhdGUoKX3ml6VcXFxccyo9PStgLFxuXHRcdFx0XHQnbWcnXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCFkYXRlSGVhZGVyUmVnZXguZXhlYyh0ZXh0KSkge1xuXHRcdFx0XHRvdXRwdXQgPSBgXFxuXFxuPT0ke2RhdGUuZ2V0VVRDTW9udGgoKSArIDF95pyIJHtkYXRlLmdldFVUQ0RhdGUoKX3ml6U9PWA7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQgKz0gJ1xcbnt7Jy5jb25jYXQoJ3N1YnN0OicsIGBDb3B5dmlvVkZEUmVjb3JkfCR7bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpfX19YCk7XG5cdFx0XHRwYWdlb2JqLnNldEFwcGVuZFRleHQob3V0cHV0KTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoYOWKoOWFpVtbJHttdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyl9XV1gKTtcblx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRwYWdlb2JqLmFwcGVuZCgpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuY29weXZpby5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgcGFyYW1zID0gTW9yZWJpdHMucXVpY2tGb3JtLmdldElucHV0RGF0YShlLnRhcmdldCk7XG5cdFx0aWYgKCFwYXJhbXMuc291cmNlLnRyaW0oKSkge1xuXHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn6K+35oyH5a6a5L615p2D5p2l5rqQJywgJ+iri+aMh+WumuS+teasiuS+hua6kCcpLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZWNvcHl2aW8nLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZS50YXJnZXQpO1xuXHRcdHBhcmFtcy5sb2dwYWdlID0gJ0xJQl90YWxrOuS+teadg+aPkOaKpSc7XG5cdFx0TW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50KCk7XG5cdFx0Ly8gVXBkYXRpbmcgZGF0YSBmb3IgdGhlIGFjdGlvbiBjb21wbGV0ZWQgZXZlbnRcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoXG5cdFx0XHQn5o+Q5oql5a6M5oiQ77yM5bCG5Zyo5Yeg56eS5YaF5Yi35paw6aG16Z2iJyxcblx0XHRcdCfmj5DloLHlrozmiJDvvIzlsIflnKjlub7np5Llhafph43mlrDmlbTnkIbpoIHpnaInXG5cdFx0KTtcblx0XHQvLyBUYWdnaW5nIGZpbGVcblx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0d2luZG93LndnVUxTKCfliqDlhaXkvrXmnYPmqKHmnb/liLDpobXpnaInLCAn5Yqg5YWl5L615qyK5qih5p2/5Yiw6aCB6Z2iJylcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmNvcHl2aW8uY2FsbGJhY2tzLnRyeVRhZ2dpbmcpO1xuXHRcdE1vcmViaXRzLndpa2kucmVtb3ZlQ2hlY2twb2ludCgpO1xuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmNvcHl2aW8sICdjb3B5dmlvJyk7XG59KSgpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZXhmZC5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGV4ZmQoKSB7XG5cdC8qKlxuXHQgKiB0d2lua2xleGZkLmpzOiBYRkQgbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIChcIlhGRFwiKVxuXHQgKiBBY3RpdmUgb246IEV4aXN0aW5nLCBub24tc3BlY2lhbCBwYWdlcyxcblx0ICogZXhjZXB0IGZvciBmaWxlIHBhZ2VzIHdpdGggbm8gbG9jYWwgZmlsZVxuXHQgKiB3aGljaCBhcmUgbm90IHJlZGlyZWN0c1xuXHQgKi9cblx0VHdpbmtsZS54ZmQgPSAoKSA9PiB7XG5cdFx0Ly8gRGlzYWJsZSBvbjpcblx0XHQvLyAqIHNwZWNpYWwgcGFnZXNcblx0XHQvLyAqIG5vbi1leGlzdGVudCBwYWdlc1xuXHRcdC8vICogbm9uLWxvY2FsIGZpbGVzLCB3aGV0aGVyIHRoZXJlIGlzIGEgbG9jYWwgcGFnZSBvciBub3QgKHVubmVlZGVkIGxvY2FsIHBhZ2VzIG9mIGZpbGVzIG9uIFNoYXJlIGFyZSBlbGlnaWJsZSBmb3IgQ1NEIEYyKVxuXHRcdC8vICogZmlsZSBwYWdlcyB3aXRob3V0IGFjdHVhbCBmaWxlc1xuXHRcdGlmIChcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPCAwIHx8XG5cdFx0XHQhbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKSB8fFxuXHRcdFx0KG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYgJiZcblx0XHRcdFx0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1zaGFyZWR1cGxvYWQnKSB8fFxuXHRcdFx0XHRcdCghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI213LWltYWdlcGFnZS1zZWN0aW9uLWZpbGVoaXN0b3J5JykgJiYgIU1vcmViaXRzLmlzUGFnZVJlZGlyZWN0KCkpKSlcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFR3aW5rbGUueGZkLmNhbGxiYWNrLFxuXHRcdFx0d2luZG93LndnVUxTKCfmj5DliKAnLCAn5o+Q5YiqJyksXG5cdFx0XHQndHcteGZkJyxcblx0XHRcdHdpbmRvdy53Z1VMUygn5o+Q5Lqk5Yig6Zmk6K6o6K66JywgJ+aPkOS6pOWIqumZpOiojuirlicpXG5cdFx0KTtcblx0fTtcblx0VHdpbmtsZS54ZmQuY3VycmVudFJhdGlvbmFsZSA9IG51bGw7XG5cdC8vIGVycm9yIGNhbGxiYWNrIG9uIE1vcmViaXRzLnN0YXR1cy5vYmplY3Rcblx0VHdpbmtsZS54ZmQucHJpbnRSYXRpb25hbGUgPSAoKSA9PiB7XG5cdFx0aWYgKFR3aW5rbGUueGZkLmN1cnJlbnRSYXRpb25hbGUpIHtcblx0XHRcdE1vcmViaXRzLnN0YXR1cy5wcmludFVzZXJUZXh0KFxuXHRcdFx0XHRUd2lua2xlLnhmZC5jdXJyZW50UmF0aW9uYWxlLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+aCqOeahOeQhueUseW3suWcqOS4i+aWueaPkOS+m++8jOiLpeaCqOaDs+mHjeaWsOaPkOS6pO+8jOivt+WwhuWFtuWkjeWItuWIsOS4gOaWsOeql+WPo+S4re+8micsXG5cdFx0XHRcdFx0J+aCqOeahOeQhueUseW3suWcqOS4i+aWueaPkOS+m++8jOiLpeaCqOaDs+mHjeaWsOaPkOS6pO+8jOiri+Wwh+WFtuikh+ijveWIsOS4gOaWsOimlueql+S4re+8midcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdC8vIG9ubHkgbmVlZCB0byBwcmludCB0aGUgcmF0aW9uYWxlIG9uY2Vcblx0XHRcdFR3aW5rbGUueGZkLmN1cnJlbnRSYXRpb25hbGUgPSBudWxsO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS54ZmQuY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgV2luZG93ID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MDAsIDM1MCk7XG5cdFx0V2luZG93LnNldFRpdGxlKHdpbmRvdy53Z1VMUygn5o+Q5Lqk5a2Y5bqf6K6o6K66JywgJ+aPkOS6pOWtmOW7ouiojuirlicpKTtcblx0XHRXaW5kb3cuc2V0U2NyaXB0TmFtZSgnVHdpbmtsZScpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5o+Q5Yig6K6+572uJywgJ+aPkOWIquioreWumicpLCAnSDpUVy9QUkVGI3hmZCcpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygnVHdpbmtsZeW4ruWKqScsICdUd2lua2xl6Kqq5piOJyksICdIOlRXL0RPQyN4ZmQnKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLnhmZC5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0Y29uc3QgY2F0ZWdvcmllcyA9IGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ2NhdGVnb3J5Jyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aPkOS6pOexu+Wei++8micsICfmj5DkuqTpoZ7liKXvvJonKSxcblx0XHRcdGV2ZW50OiBUd2lua2xlLnhmZC5jYWxsYmFjay5jaGFuZ2VfY2F0ZWdvcnksXG5cdFx0fSk7XG5cdFx0Y2F0ZWdvcmllcy5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpobXpnaLlrZjlup/orqjorronLCAn6aCB6Z2i5a2Y5bui6KiO6KuWJyksXG5cdFx0XHRzZWxlY3RlZDogbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMCxcblx0XHRcdHZhbHVlOiAnYWZkJyxcblx0XHR9KTtcblx0XHRjYXRlZ29yaWVzLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWh+S7tuWtmOW6n+iuqOiuuicsICfmqpTmoYjlrZjlu6LoqI7oq5YnKSxcblx0XHRcdHNlbGVjdGVkOiBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSA2LFxuXHRcdFx0dmFsdWU6ICdmZmQnLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflpoLlj6/og73vvIzpgJrnn6XpobXpnaLliJvlu7rogIUnLCAn5aaC5Y+v6IO977yM6YCa55+l6aCB6Z2i5bu656uL6ICFJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdG5hbWU6ICdub3RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjpobXpnaLliJvlu7rogIXorqjorrrpobXkuIrmlL7nva7kuIDpgJrnn6XmqKHmnb/jgIInLFxuXHRcdFx0XHRcdFx0J+WcqOmggemdouW7uueri+iAheiojuirlumggeS4iuaUvue9ruS4gOmAmuefpeaooeadv+OAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRsYWJlbDogJ+W3peS9nOWMuicsXG5cdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHQvLyBXZSBtdXN0IGluaXQgdGhlIGNvbnRyb2xzXG5cdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0ZXZ0LmluaXRFdmVudCgnY2hhbmdlJywgdHJ1ZSwgdHJ1ZSk7XG5cdFx0cmVzdWx0LmNhdGVnb3J5LmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0fTtcblx0VHdpbmtsZS54ZmQuY2FsbGJhY2suY2hhbmdlX2NhdGVnb3J5ID0gKGUpID0+IHtcblx0XHRjb25zdCB7dmFsdWV9ID0gZS50YXJnZXQ7XG5cdFx0Y29uc3Qge2Zvcm19ID0gZS50YXJnZXQ7XG5cdFx0Y29uc3QgW29sZF9hcmVhXSA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnd29ya19hcmVhJyk7XG5cdFx0bGV0IHdvcmtfYXJlYSA9IG51bGw7XG5cdFx0Y29uc3Qgb2xkcmVhc29udGV4dGJveCA9IGZvcm0ucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKTtcblx0XHRsZXQgb2xkcmVhc29uID0gb2xkcmVhc29udGV4dGJveCA/IG9sZHJlYXNvbnRleHRib3gudmFsdWUgOiAnJztcblx0XHRjb25zdCBhcHBlbmRSZWFzb25Cb3ggPSAoeGZkX2NhdCkgPT4ge1xuXHRcdFx0c3dpdGNoICh4ZmRfY2F0KSB7XG5cdFx0XHRcdGNhc2UgJ2Z3ZGNzZCc6XG5cdFx0XHRcdFx0b2xkcmVhc29uID0gZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkZWxldGUtcmVhc29uJykudGV4dENvbnRlbnQpLnJlcGxhY2UoXG5cdFx0XHRcdFx0XHQvXFwrL2csXG5cdFx0XHRcdFx0XHQnICdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdmYW1lJzpcblx0XHRcdFx0XHRvbGRyZWFzb24gPSBUd2lua2xlLmdldFByZWYoJ2FmZEZhbWVEZWZhdWx0UmVhc29uJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3N1YnN0dWInOlxuXHRcdFx0XHRcdG9sZHJlYXNvbiA9IFR3aW5rbGUuZ2V0UHJlZignYWZkU3Vic3R1YkRlZmF1bHRSZWFzb24nKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRuYW1lOiAneGZkcmVhc29uJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5o+Q5Yig55CG55Sx77yaJywgJ+aPkOWIqueQhueUse+8micpLFxuXHRcdFx0XHR2YWx1ZTogb2xkcmVhc29uLFxuXHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+aCqOWPr+S7peS9v+eUqHdpa2l0ZXh077yMVHdpbmtsZeWwhuiHquWKqOS4uuaCqOWKoOWFpeetvuWQjeOAguiLpeaCqOS9v+eUqOaJuemHj+aPkOWIoOWKn+iDve+8jOWtmOW6n+iuqOiuuumhteWPquS8muS9v+eUqOesrOS4gOasoeaPkOS6pOeahOeQhueUse+8jOS9huS5i+WQjuaCqOS7jemcgOaPkOS+m+S7peeUqOS6juWIoOmZpOmAmuWRiuaooeadv+eahOWPguaVsOOAgicsXG5cdFx0XHRcdFx0J+aCqOWPr+S7peS9v+eUqHdpa2l0ZXh077yMVHdpbmtsZeWwh+iHquWLleeCuuaCqOWKoOWFpeewveWQjeOAguiLpeaCqOS9v+eUqOaJueasoeaPkOWIquWKn+iDve+8jOWtmOW7ouiojuirlumggeWPquacg+S9v+eUqOesrOS4gOasoeaPkOS6pOeahOeQhueUse+8jOS9huS5i+W+jOaCqOS7jemcgOaPkOS+m+S7peeUqOaWvOWIqumZpOmAmuWRiuaooeadv+eahOWPg+aVuOOAgidcblx0XHRcdFx0KSxcblx0XHRcdFx0cGxhY2Vob2xkZXI6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5q2k5YC85Lqm5pi+56S65LqO6aG16Z2i55qE5Yig6Zmk6YCa5ZGK5qih5p2/5YaF77yM5pWF5Yqh5b+F5o+Q5L6b5q2k5YC877yM6YG/5YWN5L2/55So4oCc5ZCM5LiK4oCd562J55So6K+t44CCJyxcblx0XHRcdFx0XHQn5q2k5YC85Lqm6aGv56S65pa86aCB6Z2i55qE5Yiq6Zmk6YCa5ZGK5qih5p2/5YWn77yM5pWF5YuZ5b+F5o+Q5L6b5q2k5YC877yM6YG/5YWN5L2/55So44CM5ZCM5LiK44CN562J55So6Kqe44CCJ1xuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdFx0XHQvLyBUT0RPIHBvc3NpYmxlIGZ1dHVyZSBcInByZXZpZXdcIiBsaW5rIGhlcmVcblx0XHR9O1xuXG5cdFx0c3dpdGNoICh2YWx1ZSkge1xuXHRcdFx0Y2FzZSAnYWZkJzoge1xuXHRcdFx0XHR3b3JrX2FyZWEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6aG16Z2i5a2Y5bqf6K6o6K66JywgJ+mggemdouWtmOW7ouiojuirlicpLFxuXHRcdFx0XHRcdG5hbWU6ICd3b3JrX2FyZWEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5L2/55SoJmx0O25vaW5jbHVkZSZndDvljIXoo7nmqKHmnb8nLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ25vaW5jbHVkZScsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdub2luY2x1ZGUnLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOlxuXHRcdFx0XHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDEwICYmXG5cdFx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlQ29udGVudE1vZGVsJykgIT09ICdTY3JpYnVudG8nLFxuXHRcdFx0XHRcdFx0XHQvLyBUZW1wbGF0ZSBuYW1lc3BhY2Vcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfkvb/lhbbkuI3kvJrlnKjooqvljIXlkKvml7blh7rnjrDjgIInLCAn5L2/5YW25LiN5pyD5Zyo6KKr5YyF5ZCr5pmC5Ye654++44CCJyksXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VDb250ZW50TW9kZWwnKSA9PT0gJ1NjcmlidW50bycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBhZmRfY2F0ZWdvcnkgPSB3b3JrX2FyZWEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRuYW1lOiAneGZkY2F0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6nmj5DliKDnsbvlnovvvJonLCAn6YG45pOH5o+Q5Yiq6aGe5Yil77yaJyksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUueGZkLmNhbGxiYWNrLmNoYW5nZV9hZmRfY2F0ZWdvcnksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRsZXQgYWZkX2NhdCA9ICdkZWxldGUnO1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdhZmREZWZhdWx0Q2F0ZWdvcnknKSA9PT0gJ3NhbWUnKSB7XG5cdFx0XHRcdFx0aWYgKGxvY2FsU3RvcmFnZS5Ud2lua2xlX2FmZENhdGVnb3J5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGxvY2FsU3RvcmFnZS5Ud2lua2xlX2FmZENhdGVnb3J5ID0gJ2RlbGV0ZSc7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFmZF9jYXQgPSBsb2NhbFN0b3JhZ2UuVHdpbmtsZV9hZmRDYXRlZ29yeTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YWZkX2NhdGVnb3J5LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIqumZpCcpLFxuXHRcdFx0XHRcdHZhbHVlOiAnZGVsZXRlJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogYWZkX2NhdCA9PT0gJ2RlbGV0ZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhZmRfY2F0ZWdvcnkuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflkIjlubYnLCAn5ZCI5L21JyksXG5cdFx0XHRcdFx0dmFsdWU6ICdtZXJnZScsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGFmZF9jYXQgPT09ICdtZXJnZScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdGd2RDc2RUb1hmZCcpKSB7XG5cdFx0XHRcdFx0YWZkX2NhdGVnb3J5LmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+i9rOS6pOiHquW/q+mAn+WIoOmZpOWAmemAiScsICfovYnkuqToh6rlv6vpgJ/liKrpmaTlgJnpgbgnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnZndkY3NkJyxcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiBhZmRfY2F0ID09PSAnZndkY3NkJyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhZmRfY2F0ZWdvcnkuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmibnph4/lhbPms6jluqbmj5DliKAnLCAn5om55qyh6Zec5rOo5bqm5o+Q5YiqJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdmYW1lJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogYWZkX2NhdCA9PT0gJ2ZhbWUnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YWZkX2NhdGVnb3J5LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5om56YeP5bCP5bCP5L2c5ZOB5o+Q5YigJywgJ+aJueasoeWwj+Wwj+S9nOWTgeaPkOWIqicpLFxuXHRcdFx0XHRcdHZhbHVlOiAnc3Vic3R1YicsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGFmZF9jYXQgPT09ICdzdWJzdHViJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFmZF9jYXRlZ29yeS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aJuemHj+WFtuS7luaPkOWIoCcsICfmibnmrKHlhbbku5bmj5DliKonKSxcblx0XHRcdFx0XHR2YWx1ZTogJ2JhdGNoJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogYWZkX2NhdCA9PT0gJ2JhdGNoJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0bmFtZTogJ21lcmdlaW50bycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5ZCI5bm25Yiw77yaJywgJ+WQiOS9teWIsO+8micpLFxuXHRcdFx0XHRcdGhpZGRlbjogdHJ1ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFwcGVuZFJlYXNvbkJveChhZmRfY2F0KTtcblx0XHRcdFx0d29ya19hcmVhLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0XHRuYW1lOiAnZndkY3NkcmVhc29uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfovazkuqTnkIbnlLHvvJonLCAn6L2J5Lqk55CG55Sx77yaJyksXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOWPr+S7peS9v+eUqHdpa2l0ZXh077yMVHdpbmtsZeWwhuiHquWKqOS4uuaCqOWKoOWFpeetvuWQjeOAgicsXG5cdFx0XHRcdFx0XHQn5oKo5Y+v5Lul5L2/55Sod2lraXRleHTvvIxUd2lua2xl5bCH6Ieq5YuV54K65oKo5Yqg5YWl57C95ZCN44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aGlkZGVuOiB0cnVlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d29ya19hcmVhID0gd29ya19hcmVhLnJlbmRlcigpO1xuXHRcdFx0XHRvbGRfYXJlYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3b3JrX2FyZWEsIG9sZF9hcmVhKTtcblx0XHRcdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRcdGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRmb3JtLnhmZGNhdC5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnZmZkJzpcblx0XHRcdFx0d29ya19hcmVhID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWh+S7tuWtmOW6n+iuqOiuuicsICfmqpTmoYjlrZjlu6LoqI7oq5YnKSxcblx0XHRcdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFwcGVuZFJlYXNvbkJveCgnZmZkJyk7XG5cdFx0XHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRcdFx0b2xkX2FyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod29ya19hcmVhLCBvbGRfYXJlYSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0d29ya19hcmVhID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+acquWumuS5iScsICfmnKrlrprnvqknKSxcblx0XHRcdFx0XHRuYW1lOiAnd29ya19hcmVhJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdvcmtfYXJlYSA9IHdvcmtfYXJlYS5yZW5kZXIoKTtcblx0XHRcdFx0b2xkX2FyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod29ya19hcmVhLCBvbGRfYXJlYSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBSZXR1cm4gdG8gY2hlY2tlZCBzdGF0ZSB3aGVuIHN3aXRjaGluZ1xuXHRcdGZvcm0ubm90aWZ5LmNoZWNrZWQgPSB0cnVlO1xuXHRcdGZvcm0ubm90aWZ5LmRpc2FibGVkID0gZmFsc2U7XG5cdH07XG5cdFR3aW5rbGUueGZkLmNhbGxiYWNrLmNoYW5nZV9hZmRfY2F0ZWdvcnkgPSAoZSkgPT4ge1xuXHRcdHN3aXRjaCAoZS50YXJnZXQudmFsdWUpIHtcblx0XHRcdGNhc2UgJ21lcmdlJzpcblx0XHRcdFx0ZS50YXJnZXQuZm9ybS5tZXJnZWludG8ucGFyZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmZ3ZGNzZHJlYXNvbi5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1lcmdlaW50by5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmlubmVySFRNTCA9IHdpbmRvdy53Z1VMUygn5ZCI5bm25Yiw77yaJywgJ+WQiOS9teWIsO+8micpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Z3ZGNzZCc6XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0ubWVyZ2VpbnRvLnBhcmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcblx0XHRcdFx0ZS50YXJnZXQuZm9ybS5md2Rjc2RyZWFzb24ucGFyZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1lcmdlaW50by5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmlubmVySFRNTCA9ICfmj5DkuqTkurrvvJonO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLnhmZHJlYXNvbi52YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChcblx0XHRcdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZGVsZXRlLXJlYXNvbicpLnRleHRDb250ZW50XG5cdFx0XHRcdCkucmVwbGFjZSgvXFwrL2csICcgJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZmFtZSc6XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0ubWVyZ2VpbnRvLnBhcmVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0uZndkY3NkcmVhc29uLnBhcmVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0ueGZkcmVhc29uLnZhbHVlID0gVHdpbmtsZS5nZXRQcmVmKCdhZmRGYW1lRGVmYXVsdFJlYXNvbicpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3N1YnN0dWInOlxuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1lcmdlaW50by5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmZ3ZGNzZHJlYXNvbi5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLnhmZHJlYXNvbi52YWx1ZSA9IFR3aW5rbGUuZ2V0UHJlZignYWZkU3Vic3R1YkRlZmF1bHRSZWFzb24nKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1lcmdlaW50by5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLmZ3ZGNzZHJlYXNvbi5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdH1cblx0XHRpZiAoVHdpbmtsZS5nZXRQcmVmKCdhZmREZWZhdWx0Q2F0ZWdvcnknKSA9PT0gJ3NhbWUnKSB7XG5cdFx0XHRsb2NhbFN0b3JhZ2UuVHdpbmtsZV9hZmRDYXRlZ29yeSA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzID0ge1xuXHRcdGFmZDoge1xuXHRcdFx0bWFpbjogKHRhZ2dpbmdfcGFnZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSB0YWdnaW5nX3BhZ2UuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRcdFR3aW5rbGUueGZkLmNhbGxiYWNrcy5hZmQudGFnZ2luZ0FydGljbGUodGFnZ2luZ19wYWdlKTtcblx0XHRcdFx0Ly8gQWRkaW5nIGRpc2N1c3Npb25cblx0XHRcdFx0Y29uc3QgZGlzY3Vzc2lvbl9wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYXJhbXMubG9ncGFnZSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOWFpeiuqOiuuuWIsOW9k+aXpeWIl+ihqCcsICfliqDlhaXoqI7oq5bliLDnlbbml6XliJfooagnKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRkaXNjdXNzaW9uX3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdGRpc2N1c3Npb25fcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdFx0ZGlzY3Vzc2lvbl9wYWdlLmxvYWQoVHdpbmtsZS54ZmQuY2FsbGJhY2tzLmFmZC50b2RheXNMaXN0KTtcblx0XHRcdFx0Ly8gTm90aWZpY2F0aW9uIHRvIGZpcnN0IGNvbnRyaWJ1dG9yXG5cdFx0XHRcdGlmIChwYXJhbXMubm90aWZ5KSB7XG5cdFx0XHRcdFx0Ly8gRGlzYWxsb3cgd2FybmluZyB5b3Vyc2VsZlxuXHRcdFx0XHRcdGlmIChwYXJhbXMuY3JlYXRvciA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKSB7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfpgJrnn6XpobXpnaLliJvlu7rogIXvvIgnLCAn6YCa55+l6aCB6Z2i5bu656uL6ICF77yIJykgKyBwYXJhbXMuY3JlYXRvcn3vvIlgLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aCqOWIm+W7uuS6huivpemhte+8jOi3s+i/h+mAmuefpScsICfmgqjlu7rnq4vkuoboqbLpoIHvvIzot7PpgY7pgJrnn6UnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHBhcmFtcy5jcmVhdG9yID0gbnVsbDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFsa1BhZ2VOYW1lID0gYFVzZXIgdGFsazoke3BhcmFtcy5jcmVhdG9yfWA7XG5cdFx0XHRcdFx0XHRjb25zdCB1c2VydGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHR0YWxrUGFnZU5hbWUsXG5cdFx0XHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn6YCa55+l6aG16Z2i5Yib5bu66ICF77yIJywgJ+mAmuefpemggemdouW7uueri+iAhe+8iCcpICsgcGFyYW1zLmNyZWF0b3J977yJYFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IG5vdGlmeXRleHQgPSAnXFxue3snXG5cdFx0XHRcdFx0XHRcdC5jb25jYXQoJ3N1YnN0OicpXG5cdFx0XHRcdFx0XHRcdC5jb25jYXQoYEFGRE5vdGV8JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19fX0tLX5+YCwgJ35+Jyk7XG5cdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0QXBwZW5kVGV4dChub3RpZnl0ZXh0KTtcblx0XHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRFZGl0U3VtbWFyeShg6YCa55+l77ya6aG16Z2iW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXeWtmOW6n+iuqOiuuuaPkOWQjWApO1xuXHRcdFx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZigneGZkV2F0Y2hVc2VyJykpO1xuXHRcdFx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5hcHBlbmQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gYWRkIHRoaXMgbm9taW5hdGlvbiB0byB0aGUgdXNlcidzIHVzZXJzcGFjZSBsb2csIGlmIHRoZSB1c2VyIGhhcyBlbmFibGVkIGl0XG5cdFx0XHRcdFx0aWYgKHBhcmFtcy5sb2dub21pbmF0aW9uKSB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLnhmZC5jYWxsYmFja3MuYWRkVG9Mb2cocGFyYW1zLCBwYXJhbXMuY3JlYXRvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIG9yLCBpZiBub3Qgbm90aWZ5aW5nLCBhZGQgdGhpcyBub21pbmF0aW9uIHRvIHRoZSB1c2VyJ3MgdXNlcnNwYWNlIGxvZyB3aXRob3V0IHRoZSBpbml0aWFsIGNvbnRyaWJ1dG9yJ3MgbmFtZVxuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtcy5sb2dub21pbmF0aW9uKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzLmFkZFRvTG9nKHBhcmFtcywgbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0YWdnaW5nQXJ0aWNsZTogKHBhZ2VvYmopID0+IHtcblx0XHRcdFx0bGV0IHRleHQgPSBwYWdlb2JqLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRcdGxldCB0YWcgPSBge3t2ZmR8JHtNb3JlYml0cy5zdHJpbmcuZm9ybWF0UmVhc29uVGV4dChwYXJhbXMueGZkcmVhc29uKX1gO1xuXHRcdFx0XHRpZiAoTW9yZWJpdHMuaXNQYWdlUmVkaXJlY3QoKSkge1xuXHRcdFx0XHRcdHRhZyArPSAnfHInO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRhZyArPSAnfGRhdGU9e3snLmNvbmNhdCgnc3Vic3Q6JywgJyN0aW1lOlkvbS9kfX19fScpO1xuXHRcdFx0XHRpZiAocGFyYW1zLm5vaW5jbHVkZSkge1xuXHRcdFx0XHRcdHRhZyA9IGA8bm9pbmNsdWRlPiR7dGFnfTwvbm9pbmNsdWRlPmA7XG5cdFx0XHRcdFx0Ly8g5Y+q5pyJ6KGo5qC86ZyA6KaB5Y2V54us5Yqg5Zue6L2m77yM5YW25LuW5oOF5Ya15Yqg5Zue6L2m5Lya56C05Z2P5qih5p2/44CCXG5cdFx0XHRcdFx0aWYgKHRleHQuaW5kZXhPZigne3wnKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0dGFnICs9ICdcXG4nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YWcgKz0gJ1xcbic7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlbiwgdGVzdCBpZiB0aGVyZSBhcmUgc3BlZWR5IGRlbGV0aW9uLXJlbGF0ZWQgdGVtcGxhdGVzIG9uIHRoZSBhcnRpY2xlLlxuXHRcdFx0XHRjb25zdCB0ZXh0Tm9TZCA9IHRleHQucmVwbGFjZShcblx0XHRcdFx0XHQvXFx7XFx7XFxzKihkYigtXFx3Kik/fGR8ZGVsZXRlfCg/Omhhbmd8aG9sZClbLSBdP29uKVxccyooXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyovZ2ksXG5cdFx0XHRcdFx0Jydcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRleHQgIT09IHRleHROb1NkICYmXG5cdFx0XHRcdFx0Y29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5LiK5om+5Yiw5b+r6YCf5Yig6Zmk5qih5p2/77yM6KaB56e76Zmk5ZCX77yfJywgJ+WcqOmggemdouS4iuaJvuWIsOW/q+mAn+WIqumZpOaooeadv++8jOimgeenu+mZpOWXju+8nycpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0ZXh0ID0gdGV4dE5vU2Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGV4dE5vTm90TWFuZGFyaW4gPSB0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdFx0L1xce1xce1xccyooTm90TWFuZGFyaW58Tm90Y2hpbmVzZXzpnZ7kuK3mlod86Z2e54++5Luj5ryi6KqefOmdnueOsOS7o+axieivrXzpnZ7nj77ku6PmqJnmupbmvKLoqp586Z2e546w5Luj5qCH5YeG5rGJ6K+tKVxccyooXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyovZ2ksXG5cdFx0XHRcdFx0Jydcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRleHQgIT09IHRleHROb05vdE1hbmRhcmluICYmXG5cdFx0XHRcdFx0Y29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+WcqOmhtemdouS4iuaJvuWIsOmdnueOsOS7o+agh+WHhuaxieivreaooeadv++8jOimgeenu+mZpOWQl++8nycsXG5cdFx0XHRcdFx0XHRcdCflnKjpoIHpnaLkuIrmib7liLDpnZ7nj77ku6PmqJnmupbmvKLoqp7mqKHmnb/vvIzopoHnp7vpmaTll47vvJ8nXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0ZXh0ID0gdGV4dE5vTm90TWFuZGFyaW47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGV4dE5vQWZjID0gdGV4dC5yZXBsYWNlKC97e1xccypBRkMgc3VibWlzc2lvblxccypcXHxcXHMqXFx8W159XSo/fX1cXHMqL2dpLCAnJyk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0ZXh0ICE9PSB0ZXh0Tm9BZmMgJiZcblx0XHRcdFx0XHRjb25maXJtKHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5LiK5om+5YiwQUZD5o+Q5Lqk5qih5p2/77yM6KaB56e76Zmk5ZCX77yfJywgJ+WcqOmggemdouS4iuaJvuWIsEFGQ+aPkOS6pOaooeadv++8jOimgeenu+mZpOWXju+8nycpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0ZXh0ID0gdGV4dE5vQWZjO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIE1hcmsgdGhlIHBhZ2UgYXMgcGF0cm9sbGVkLCBpZiB3YW50ZWRcblx0XHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignbWFya1hmZFBhZ2VzQXNQYXRyb2xsZWQnKSkge1xuXHRcdFx0XHRcdHBhZ2VvYmoucGF0cm9sKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gSW5zZXJ0IHRhZyBhZnRlciBzaG9ydCBkZXNjcmlwdGlvbiBvciBhbnkgaGF0bm90ZXNcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2l0ZXh0LnBhZ2UodGV4dCk7XG5cdFx0XHRcdHRleHQgPSB5c2FyY2hpdmVzX3BhZ2UuaW5zZXJ0QWZ0ZXJUZW1wbGF0ZXModGFnLCBUd2lua2xlLmhhdG5vdGVSZWdleCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn6aG16Z2i5a2Y5bqf6K6o6K6677yaW1snLCAn6aCB6Z2i5a2Y5bui6KiO6KuW77yaW1snKSArIHBhcmFtcy5sb2dwYWdlfSMke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXWBcblx0XHRcdFx0KTtcblx0XHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZigneGZkV2F0Y2hQYWdlJykpO1xuXHRcdFx0XHRwYWdlb2JqLnNhdmUoKTtcblx0XHRcdH0sXG5cdFx0XHR0b2RheXNMaXN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0XHRsZXQgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdFx0bGV0IHR5cGUgPSAnJztcblx0XHRcdFx0bGV0IHRvID0gJyc7XG5cdFx0XHRcdHN3aXRjaCAocGFyYW1zLnhmZGNhdCkge1xuXHRcdFx0XHRcdGNhc2UgJ2Z3ZGNzZCc6XG5cdFx0XHRcdFx0Y2FzZSAnbWVyZ2UnOlxuXHRcdFx0XHRcdFx0dG8gPSBwYXJhbXMubWVyZ2VpbnRvO1xuXHRcdFx0XHRcdC8qIEZhbGwgdGhyb3VnaCAqL1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0eXBlID0gcGFyYW1zLnhmZGNhdDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBhcHBlbmQgPSB0cnVlO1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlICdmYW1lJzpcblx0XHRcdFx0XHRjYXNlICdzdWJzdHViJzpcblx0XHRcdFx0XHRjYXNlICdiYXRjaCc6IHtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbW1lbnRUZXh0ID0gYDwhLS0gVHdpbmtsZTogVXNlcjoke213LmNvbmZpZy5nZXQoXG5cdFx0XHRcdFx0XHRcdCd3Z1VzZXJOYW1lJ1xuXHRcdFx0XHRcdFx0KX0g55qEICR7dHlwZX0g5o+Q5Yig5o+S5YWl54K577yM6K+35Yu/5pu05pS55oiW56e76Zmk5q2k6KGM77yM6Zmk6Z2e5LiN5YaN5LqO5q2k6aG16Z2i5o+Q5YigIC0tPmA7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VGV4dCA9IGA9PT1bWzoke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXT09PWA7XG5cdFx0XHRcdFx0XHRpZiAodHlwZSA9PT0gJ2ZhbWUnKSB7XG5cdFx0XHRcdFx0XHRcdG5ld1RleHQgKz0gYFxcbnt7RmluZHNvdXJjZXN8JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19fX1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRleHQuaW5jbHVkZXMoY29tbWVudFRleHQpKSB7XG5cdFx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoY29tbWVudFRleHQsIGAke25ld1RleHR9XFxuXFxuJHtjb21tZW50VGV4dH1gKTtcblx0XHRcdFx0XHRcdFx0cGFnZW9iai5zZXRQYWdlVGV4dCh0ZXh0KTtcblx0XHRcdFx0XHRcdFx0YXBwZW5kID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzYWZlc3Vic3QgPSAnc2FmZXN1YnN0Jztcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXBwZW5kVGV4dCA9IGBcXG57eyR7c2FmZXN1YnN0fSR7YDpTYWZlQWZkSGVhZH19XFxuJHtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRmYW1lOiAnPT0gMzDlpKnlkI7ku43mjILmnIl7e3RsfG5vdGFiaWxpdHl9feaooeadv+eahOadoeebriA9PVxcbjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiBzbWFsbGVyO1wiPu+8iOW3suaMgltbVGVtcGxhdGU6bm90YWJpbGl0eXzkuI3nrKbmlLblvZXmoIflh4bmqKHmnb9dXTMw5aSp77yJPC9zcGFuPicsXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJzdHViOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnPT0gMzDlpKnlkI7ku43mjILmnIl7e3RsfHN1YnN0dWJ9feaooeadv+eahOadoeebriA9PVxcbjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiBzbWFsbGVyO1wiPu+8iOW3suaMgltbVGVtcGxhdGU6c3Vic3R1YnzlsI/lsI/mnaHnm67mqKHmnb9dXTMw5aSp77yJPC9zcGFuPicsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYXRjaDogJz09IOaJuemHj+aPkOWIoCA9PScsXG5cdFx0XHRcdFx0XHRcdFx0fVt0eXBlXVxuXHRcdFx0XHRcdFx0XHR9XFxuJHtuZXdUZXh0fVxcblxcbiR7Y29tbWVudFRleHR9XFxuLS0tLVxcbjrlu7rorq7vvJrliKDpmaTliY3ov7DpobXpnaLvvJvnkIbnlLHvvJoke01vcmViaXRzLnN0cmluZy5mb3JtYXRSZWFzb25UZXh0KFxuXHRcdFx0XHRcdFx0XHRcdHBhcmFtcy54ZmRyZWFzb25cblx0XHRcdFx0XHRcdFx0KX1cXG7mj5DmiqXku6XkuIoke1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGZhbWU6ICc8dT7kuI3nrKblkIjmlLblvZXmoIflh4Y8L3U+5p2h55uuJyxcblx0XHRcdFx0XHRcdFx0XHRcdHN1YnN0dWI6ICc8dT7plb/luqbov4fnn608L3U+5p2h55uuJyxcblx0XHRcdFx0XHRcdFx0XHRcdGJhdGNoOiAn6aG16Z2iJyxcblx0XHRcdFx0XHRcdFx0XHR9W3R5cGVdXG5cdFx0XHRcdFx0XHRcdH3nmoTmsYLpl7vnvJbogIXlj4rml7bpl7TvvJo8YnIgaWQ9XCJuby1uZXctdGl0bGVcIj5+fmAuY29uY2F0KCd+ficpfWA7XG5cdFx0XHRcdFx0XHRcdHBhZ2VvYmouc2V0QXBwZW5kVGV4dChhcHBlbmRUZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cGFnZW9iai5zZXRBcHBlbmRUZXh0KFxuXHRcdFx0XHRcdFx0XHQnXFxue3snLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0XHRcdFx0XHRgRFJJdGVtfFR5cGU9JHt0eXBlfXxEUmFydGljbGVzPSR7XG5cdFx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm1cblx0XHRcdFx0XHRcdFx0XHR9fFJlYXNvbj0ke01vcmViaXRzLnN0cmluZy5mb3JtYXRSZWFzb25UZXh0KHBhcmFtcy54ZmRyZWFzb24pfSR7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMuZndkY3NkcmVhc29uLnRyaW0oKSA9PT0gJycgPyAnJyA6IGA8YnI+XFxu6L2s5Lqk55CG55Sx77yaJHtwYXJhbXMuZndkY3NkcmVhc29ufWBcblx0XHRcdFx0XHRcdFx0XHR9fFRvPSR7dG99fX1+fmAuY29uY2F0KCd+ficpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KGDliqDlhaVbWyR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dYCk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3hmZFdhdGNoRGlzY3Vzc2lvbicpKTtcblx0XHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdGlmIChhcHBlbmQpIHtcblx0XHRcdFx0XHRwYWdlb2JqLmFwcGVuZCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhZ2VvYmouc2F2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFR3aW5rbGUueGZkLmN1cnJlbnRSYXRpb25hbGUgPSBudWxsO1xuXHRcdFx0fSxcblx0XHRcdGxvb2t1cENyZWF0aW9uOiAodGFyZ2V0X3BhZ2UpID0+IHtcblx0XHRcdFx0dGFyZ2V0X3BhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSB0YXJnZXRfcGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdFx0cGFyYW1zLmNyZWF0b3IgPSB0YXJnZXRfcGFnZS5nZXRDcmVhdG9yKCk7XG5cdFx0XHRcdC8vIFRhZ2dpbmcgcGFnZVxuXHRcdFx0XHRjb25zdCB0YWdnaW5nX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOWFpeWtmOW6n+iuqOiuuuaooeadv+WIsOmhtemdoicsICfliqDlhaXlrZjlu6LoqI7oq5bmqKHmnb/liLDpoIHpnaInKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0YWdnaW5nX3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QoZmFsc2UpO1xuXHRcdFx0XHR0YWdnaW5nX3BhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHBhcmFtcyk7XG5cdFx0XHRcdHRhZ2dpbmdfcGFnZS5sb2FkKFR3aW5rbGUueGZkLmNhbGxiYWNrcy5hZmQudHJ5VGFnZ2luZyk7XG5cdFx0XHR9LFxuXHRcdFx0dHJ5VGFnZ2luZzogKHRhZ2dpbmdfcGFnZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdGF0ZWxlbSA9IHRhZ2dpbmdfcGFnZS5nZXRTdGF0dXNFbGVtZW50KCk7XG5cdFx0XHRcdC8vIGRlZmF1bHRzIHRvIC9kb2MgZm9yIGx1YSBtb2R1bGVzLCB3aGljaCBtYXkgbm90IGV4aXN0XG5cdFx0XHRcdGlmICghdGFnZ2luZ19wYWdlLmV4aXN0cygpKSB7XG5cdFx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfpobXpnaLkuI3lrZjlnKjvvIzlj6/og73lt7LooqvliKDpmaQnLCAn6aCB6Z2i5LiN5a2Y5Zyo77yM5Y+v6IO95bey6KKr5Yiq6ZmkJykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0ZXh0ID0gdGFnZ2luZ19wYWdlLmdldFBhZ2VUZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHhmZCA9IC8oPzpcXHtcXHsoW3JzYWlmdGNtdl1mZHxtZDF8cHJvcG9zZWQgZGVsZXRpb24pW157fV0qP1xcfVxcfSkvaS5leGVjKHRleHQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0eGZkICYmXG5cdFx0XHRcdFx0IWNvbmZpcm0oXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WIoOmZpOebuOWFs+aooeadv3t7JywgJ+WIqumZpOebuOmXnOaooeadv3t7JykgK1xuXHRcdFx0XHRcdFx0XHR4ZmRbMV0gK1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J3195bey6KKr572u5LqO6aG16Z2i5Lit77yM5oKo5piv5ZCm5LuN5oOz57un57ut5o+Q5oql77yfJyxcblx0XHRcdFx0XHRcdFx0XHQnfX3lt7Looqvnva7mlrzpoIHpnaLkuK3vvIzmgqjmmK/lkKbku43mg7Pnubznuozmj5DloLHvvJ8nXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn6aG16Z2i5bey6KKr5o+Q5Lqk6Iez5a2Y5bqf6K6o6K6644CCJywgJ+mggemdouW3suiiq+aPkOS6pOiHs+WtmOW7ouiojuirluOAgicpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY29weXZpbyA9IC8oPzpcXHtcXHtcXHMqKGNvcHl2aW8pW157fV0qP1xcfVxcfSkvaS5leGVjKHRleHQpO1xuXHRcdFx0XHRpZiAoY29weXZpbykge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn6aG16Z2i5Lit5bey5pyJ6JGX5L2c5p2D6aqM6K+B5qih5p2/44CCJywgJ+mggemdouS4reW3suacieiRl+S9nOasiumpl+itieaooeadv+OAgicpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzLmFmZC5tYWluKHRhZ2dpbmdfcGFnZSk7XG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0ZmZkOiB7XG5cdFx0XHRtYWluOiAodGFnZ2luZ19wYWdlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHRhZ2dpbmdfcGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdFx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzLmZmZC50YWdnaW5nSW1hZ2UodGFnZ2luZ19wYWdlKTtcblx0XHRcdFx0Ly8gQWRkaW5nIGRpc2N1c3Npb25cblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYXJhbXMubG9ncGFnZSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOWFpeiuqOiuuuWIsOW9k+aXpeWIl+ihqCcsICfliqDlhaXoqI7oq5bliLDnlbbml6XliJfooagnKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLmxvYWQoVHdpbmtsZS54ZmQuY2FsbGJhY2tzLmZmZC50b2RheXNMaXN0KTtcblx0XHRcdFx0Ly8gTm90aWZpY2F0aW9uIHRvIGZpcnN0IGNvbnRyaWJ1dG9yXG5cdFx0XHRcdGlmIChwYXJhbXMubm90aWZ5KSB7XG5cdFx0XHRcdFx0Ly8gRGlzYWxsb3cgd2FybmluZyB5b3Vyc2VsZlxuXHRcdFx0XHRcdGlmIChwYXJhbXMuY3JlYXRvciA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKSB7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfpgJrnn6XpobXpnaLliJvlu7rogIXvvIgnLCAn6YCa55+l6aCB6Z2i5bu656uL6ICF77yIJykgKyBwYXJhbXMuY3JlYXRvcn3vvIlgLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aCqOWIm+W7uuS6huivpemhte+8jOi3s+i/h+mAmuefpScsICfmgqjlu7rnq4vkuoboqbLpoIHvvIzot7PpgY7pgJrnn6UnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgdGFsa1BhZ2VOYW1lID0gYFVzZXIgdGFsazoke3BhcmFtcy5jcmVhdG9yfWA7XG5cdFx0XHRcdFx0Y29uc3QgdXNlcnRhbGtwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdHRhbGtQYWdlTmFtZSxcblx0XHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn6YCa55+l6aG16Z2i5Yib5bu66ICF77yIJywgJ+mAmuefpemggemdouW7uueri+iAhe+8iCcpICsgcGFyYW1zLmNyZWF0b3J977yJYFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3Qgbm90aWZ5dGV4dCA9ICdcXG57eycuY29uY2F0KCdzdWJzdDonLCBgaWR3fEZpbGU6JHttdy5jb25maWcuZ2V0KCd3Z1RpdGxlJyl9fX1gLCAnLS1+ficsICd+ficpO1xuXHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRBcHBlbmRUZXh0KG5vdGlmeXRleHQpO1xuXHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRFZGl0U3VtbWFyeShg6YCa55+l77ya5paH5Lu2W1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXeWtmOW6n+iuqOiuuuaPkOWQjWApO1xuXHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZigneGZkV2F0Y2hVc2VyJykpO1xuXHRcdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRGb2xsb3dSZWRpcmVjdCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdFx0dXNlcnRhbGtwYWdlLmFwcGVuZCgpO1xuXHRcdFx0XHRcdC8vIGFkZCB0aGlzIG5vbWluYXRpb24gdG8gdGhlIHVzZXIncyB1c2Vyc3BhY2UgbG9nLCBpZiB0aGUgdXNlciBoYXMgZW5hYmxlZCBpdFxuXHRcdFx0XHRcdGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRcdFx0VHdpbmtsZS54ZmQuY2FsbGJhY2tzLmFkZFRvTG9nKHBhcmFtcywgcGFyYW1zLmNyZWF0b3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBvciwgaWYgbm90IG5vdGlmeWluZywgYWRkIHRoaXMgbm9taW5hdGlvbiB0byB0aGUgdXNlcidzIHVzZXJzcGFjZSBsb2cgd2l0aG91dCB0aGUgaW5pdGlhbCBjb250cmlidXRvcidzIG5hbWVcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRcdFR3aW5rbGUueGZkLmNhbGxiYWNrcy5hZGRUb0xvZyhwYXJhbXMsIG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGFnZ2luZ0ltYWdlOiAocGFnZW9iaikgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KFxuXHRcdFx0XHRcdGB7e2lmZHwke01vcmViaXRzLnN0cmluZy5mb3JtYXRSZWFzb25UZXh0KHBhcmFtcy54ZmRyZWFzb24pfXxkYXRlPXt7YC5jb25jYXQoXG5cdFx0XHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0XHRcdGAjdGltZTpjfX19fVxcbiR7dGV4dH1gXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn5paH5Lu25a2Y5bqf6K6o6K6677yaW1snLCAn5qqU5qGI5a2Y5bui6KiO6KuW77yaW1snKSArIHBhcmFtcy5sb2dwYWdlfSMke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXWBcblx0XHRcdFx0KTtcblx0XHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZigneGZkV2F0Y2hQYWdlJykpO1xuXHRcdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTsgLy8gaXQgbWlnaHQgYmUgcG9zc2libGUgZm9yIGEgZmlsZSB0byBleGlzdCB3aXRob3V0IGEgZGVzY3JpcHRpb24gcGFnZVxuXHRcdFx0XHRwYWdlb2JqLnNhdmUoKTtcblx0XHRcdH0sXG5cdFx0XHR0b2RheXNMaXN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0XHQvLyBjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEFwcGVuZFRleHQoXG5cdFx0XHRcdFx0J1xcbnt7Jy5jb25jYXQoXG5cdFx0XHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0XHRcdGBJZmRJdGVtfEZpbGVuYW1lPSR7bXcuY29uZmlnLmdldCgnd2dUaXRsZScpfXxVcGxvYWRlcj0ke1xuXHRcdFx0XHRcdFx0XHRwYXJhbXMuY3JlYXRvclxuXHRcdFx0XHRcdFx0fXxSZWFzb249JHtNb3JlYml0cy5zdHJpbmcuZm9ybWF0UmVhc29uVGV4dChwYXJhbXMueGZkcmVhc29uKX19fS0tfn5gLmNvbmNhdCgnfn4nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShg5Yqg5YWlW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXWApO1xuXHRcdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0cGFnZW9iai5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCd4ZmRXYXRjaERpc2N1c3Npb24nKSk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdFx0XHRwYWdlb2JqLmFwcGVuZCgoKSA9PiB7XG5cdFx0XHRcdFx0VHdpbmtsZS54ZmQuY3VycmVudFJhdGlvbmFsZSA9IG51bGw7IC8vIGFueSBlcnJvcnMgZnJvbSBub3cgb24gZG8gbm90IG5lZWQgdG8gcHJpbnQgdGhlIHJhdGlvbmFsZSwgYXMgaXQgaXMgc2FmZWx5IHNhdmVkIG9uLXdpa2lcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXG5cdFx0XHRsb29rdXBDcmVhdGlvbjogKHRhcmdldF9wYWdlKSA9PiB7XG5cdFx0XHRcdHRhcmdldF9wYWdlLmdldFN0YXR1c0VsZW1lbnQoKS5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0gdGFyZ2V0X3BhZ2UuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRcdHBhcmFtcy5jcmVhdG9yID0gdGFyZ2V0X3BhZ2UuZ2V0Q3JlYXRvcigpO1xuXHRcdFx0XHQvLyBUYWdnaW5nIGZpbGVcblx0XHRcdFx0Y29uc3QgdGFnZ2luZ19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDlhaXlrZjlup/orqjorrrmqKHmnb/liLDmlofku7bmj4/ov7DpobUnLCAn5Yqg5YWl5a2Y5bui6KiO6KuW5qih5p2/5Yiw5qqU5qGI5o+P6L+w6aCBJylcblx0XHRcdFx0KTtcblx0XHRcdFx0dGFnZ2luZ19wYWdlLnNldEZvbGxvd1JlZGlyZWN0KGZhbHNlKTtcblx0XHRcdFx0dGFnZ2luZ19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHR0YWdnaW5nX3BhZ2UubG9hZChUd2lua2xlLnhmZC5jYWxsYmFja3MuZmZkLnRyeVRhZ2dpbmcpO1xuXHRcdFx0fSxcblx0XHRcdHRyeVRhZ2dpbmc6ICh0YWdnaW5nX3BhZ2UpID0+IHtcblx0XHRcdFx0Y29uc3Qgc3RhdGVsZW0gPSB0YWdnaW5nX3BhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpO1xuXHRcdFx0XHRpZiAoIXRhZ2dpbmdfcGFnZS5leGlzdHMoKSkge1xuXHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn6aG16Z2i5LiN5a2Y5Zyo77yM5Y+v6IO95bey6KKr5Yig6ZmkJywgJ+mggemdouS4jeWtmOWcqO+8jOWPr+iDveW3suiiq+WIqumZpCcpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGV4dCA9IHRhZ2dpbmdfcGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0XHRjb25zdCB4ZmQgPSAvKD86XFx7XFx7KFtyc2FpZnRjbXZdZmR8bWQxfHByb3Bvc2VkIGRlbGV0aW9uKVtee31dKj9cXH1cXH0pL2kuZXhlYyh0ZXh0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHhmZCAmJlxuXHRcdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfliKDpmaTnm7jlhbPmqKHmnb97eycsICfliKrpmaTnm7jpl5zmqKHmnb97eycpICtcblx0XHRcdFx0XHRcdFx0eGZkWzFdICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCd9feW3suiiq+e9ruS6jumhtemdouS4re+8jOaCqOaYr+WQpuS7jeaDs+e7p+e7reaPkOaKpe+8nycsXG5cdFx0XHRcdFx0XHRcdFx0J3195bey6KKr572u5pa86aCB6Z2i5Lit77yM5oKo5piv5ZCm5LuN5oOz57m857qM5o+Q5aCx77yfJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzdGF0ZWxlbS5lcnJvcih3aW5kb3cud2dVTFMoJ+mhtemdouW3suiiq+aPkOS6pOiHs+WtmOW6n+iuqOiuuuOAgicsICfpoIHpnaLlt7Looqvmj5DkuqToh7PlrZjlu6LoqI7oq5bjgIInKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFR3aW5rbGUueGZkLmNhbGxiYWNrcy5mZmQubWFpbih0YWdnaW5nX3BhZ2UpO1xuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGFkZFRvTG9nOiAocGFyYW1zLCBpbml0aWFsQ29udHJpYikgPT4ge1xuXHRcdFx0Y29uc3QgZWRpdHN1bW1hcnkgPVxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iusOW9leWvuVtbJywgJ+iomOmMhOWwjVtbJykgK1xuXHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ11d55qE5a2Y5bqf6K6o6K665o+Q5ZCNJywgJ11d55qE5a2Y5bui6KiO6KuW5o+Q5ZCNJyk7XG5cdFx0XHRjb25zdCB1c2wgPSBuZXcgTW9yZWJpdHMudXNlcnNwYWNlTG9nZ2VyKFR3aW5rbGUuZ2V0UHJlZigneGZkTG9nUGFnZU5hbWUnKSk7XG5cdFx0XHR1c2wuaW5pdGlhbFRleHQgPSB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdGDov5nmmK/or6XnlKjmiLfkvb/nlKhbW0g6VFd8VHdpbmtsZV1d55qE5o+Q5Yig5qih5Z2X5YGa5Ye655qEW1tMSUI6WEZEfOWtmOW6n+iuqOiuul1d5o+Q5ZCN5YiX6KGo44CCXFxuXFxu6Iul5oKo5LiN5YaN5oOz5L+d55WZ5q2k5pel5b+X77yM6K+35ZyoW1ske1R3aW5rbGUuZ2V0UHJlZihcblx0XHRcdFx0XHQnY29uZmlnUGFnZSdcblx0XHRcdFx0KX185Y+C5pWw6K6+572uXV3kuK3lhbPmjonvvIzlubbkvb/nlKhbW0xJQjpDU0QjTzF8Q1NEIE8xXV3mj5DkuqTlv6vpgJ/liKDpmaTjgIJgLFxuXHRcdFx0XHRg6YCZ5piv6Kmy5L2/55So6ICF5L2/55SoW1tIOlRXfFR3aW5rbGVdXeeahOaPkOWIquaooeWhiuWBmuWHuueahFtbTElCOlhGRHzlrZjlu6LoqI7oq5ZdXeaPkOWQjeWIl+ihqOOAglxcblxcbuiLpeaCqOS4jeWGjeaDs+S/neeVmeatpOaXpeiqjO+8jOiri+WcqFtbJHtUd2lua2xlLmdldFByZWYoXG5cdFx0XHRcdFx0J2NvbmZpZ1BhZ2UnXG5cdFx0XHRcdCl9fOWBj+WlveioreWuml1d5Lit6Zec5o6J77yM5Lim5L2/55SoW1tMSUI6Q1NEI08xfENTRCBPMV1d5o+Q5Lqk5b+r6YCf5Yiq6Zmk44CCYFxuXHRcdFx0KTtcblx0XHRcdGxldCB4ZmRDYXROYW1lO1xuXHRcdFx0c3dpdGNoIChwYXJhbXMueGZkY2F0KSB7XG5cdFx0XHRcdGNhc2UgJ2RlbGV0ZSc6XG5cdFx0XHRcdFx0eGZkQ2F0TmFtZSA9IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIqumZpCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdtZXJnZSc6XG5cdFx0XHRcdFx0eGZkQ2F0TmFtZSA9IHdpbmRvdy53Z1VMUygn5ZCI5bm25YiwJywgJ+WQiOS9teWIsCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdmd2Rjc2QnOlxuXHRcdFx0XHRcdHhmZENhdE5hbWUgPSB3aW5kb3cud2dVTFMoJ+i9rOS6pOiHquW/q+mAn+WIoOmZpOWAmemAiScsICfovYnkuqToh6rlv6vpgJ/liKrpmaTlgJnpgbgnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZmFtZSc6XG5cdFx0XHRcdFx0eGZkQ2F0TmFtZSA9IHdpbmRvdy53Z1VMUygn5om56YeP5YWz5rOo5bqm5o+Q5YigJywgJ+aJueasoemXnOazqOW6puaPkOWIqicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdzdWJzdHViJzpcblx0XHRcdFx0XHR4ZmRDYXROYW1lID0gd2luZG93LndnVUxTKCfmibnph4/lsI/lsI/kvZzlk4Hmj5DliKAnLCAn5om55qyh5bCP5bCP5L2c5ZOB5o+Q5YiqJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2JhdGNoJzpcblx0XHRcdFx0XHR4ZmRDYXROYW1lID0gd2luZG93LndnVUxTKCfmibnph4/lhbbku5bmj5DliKAnLCAn5om55qyh5YW25LuW5o+Q5YiqJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0eGZkQ2F0TmFtZSA9IHdpbmRvdy53Z1VMUygn5paH5Lu25a2Y5bqf6K6o6K66JywgJ+aqlOahiOWtmOW7ouiojuirlicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gSWYgYSBsb2dnZWQgZmlsZSBpcyBkZWxldGVkIGJ1dCBleGlzdHMgb24gcmVtb3RlIHJlcG8sIHRoZSB3aWtpbGluayB3aWxsIGJlIGJsdWUsIHNvIHByb3ZpZGUgYSBsaW5rIHRvIHRoZSBsb2dcblx0XHRcdGxldCBhcHBlbmRUZXh0ID0gYCMgW1s6JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19XV1gO1xuXHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYpIHtcblx0XHRcdFx0YXBwZW5kVGV4dCArPSBg77yIW3t7ZnVsbHVybDpTcGVjaWFsOkxvZ3xwYWdlPSR7bXcudXRpbC53aWtpVXJsZW5jb2RlKFxuXHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKVxuXHRcdFx0XHQpfX19ICR7d2luZG93LndnVUxTKCfml6Xlv5cnLCAn5pel6KqMJyl9Xe+8iWA7XG5cdFx0XHR9XG5cdFx0XHRhcHBlbmRUZXh0ICs9IGDvvJoke3hmZENhdE5hbWV9YDtcblx0XHRcdGlmIChwYXJhbXMueGZkY2F0ID09PSAnbWVyZ2UnKSB7XG5cdFx0XHRcdGFwcGVuZFRleHQgKz0gYFtbOiR7cGFyYW1zLm1lcmdlaW50b31dXWA7XG5cdFx0XHR9XG5cdFx0XHRhcHBlbmRUZXh0ICs9ICfjgIInO1xuXHRcdFx0aWYgKHBhcmFtcy54ZmRyZWFzb24pIHtcblx0XHRcdFx0YXBwZW5kVGV4dCArPSBgJycnJHtcblx0XHRcdFx0XHRwYXJhbXMueGZkY2F0ID09PSAnZndkY3NkJyA/IHdpbmRvdy53Z1VMUygn5Y6f5Yig6Zmk55CG5o2uJywgJ+WOn+WIqumZpOeQhuaTmicpIDogd2luZG93LndnVUxTKCfnkIbmja4nLCAn55CG5pOaJylcblx0XHRcdFx0fScnJ++8miR7TW9yZWJpdHMuc3RyaW5nLmZvcm1hdFJlYXNvbkZvckxvZyhwYXJhbXMueGZkcmVhc29uKX1gO1xuXHRcdFx0XHRhcHBlbmRUZXh0ID0gTW9yZWJpdHMuc3RyaW5nLmFwcGVuZFB1bmN0dWF0aW9uKGFwcGVuZFRleHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy5md2Rjc2RyZWFzb24pIHtcblx0XHRcdFx0YXBwZW5kVGV4dCArPSBgJycnJHtcblx0XHRcdFx0XHRwYXJhbXMueGZkY2F0ID09PSAnZndkY3NkJyA/IHdpbmRvdy53Z1VMUygn6L2s5Lqk55CG5o2uJywgJ+i9ieS6pOeQhuaTmicpIDogd2luZG93LndnVUxTKCfnkIbmja4nLCAn55CG5pOaJylcblx0XHRcdFx0fScnJ++8miR7TW9yZWJpdHMuc3RyaW5nLmZvcm1hdFJlYXNvbkZvckxvZyhwYXJhbXMuZndkY3NkcmVhc29uKX1gO1xuXHRcdFx0XHRhcHBlbmRUZXh0ID0gTW9yZWJpdHMuc3RyaW5nLmFwcGVuZFB1bmN0dWF0aW9uKGFwcGVuZFRleHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGluaXRpYWxDb250cmliKSB7XG5cdFx0XHRcdGFwcGVuZFRleHQgKz0gYO+8m+mAmuefpXt7dXNlcnwke2luaXRpYWxDb250cmlifX19YDtcblx0XHRcdH1cblx0XHRcdGFwcGVuZFRleHQgKz0gJyB+ficuY29uY2F0KCd+ficsICd+XFxuJyk7XG5cdFx0XHR1c2wuY2hhbmdlVGFncyA9IFR3aW5rbGUuY2hhbmdlVGFncztcblx0XHRcdHVzbC5sb2coYXBwZW5kVGV4dCwgZWRpdHN1bW1hcnkpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUueGZkLmNhbGxiYWNrLmV2YWx1YXRlID0gKGUpID0+IHtcblx0XHRjb25zdCBwYXJhbXMgPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0SW5wdXREYXRhKGUudGFyZ2V0KTtcblx0XHRpZiAocGFyYW1zLnhmZGNhdCA9PT0gJ21lcmdlJyAmJiBwYXJhbXMubWVyZ2VpbnRvLnRyaW0oKSA9PT0gJycpIHtcblx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+ivt+aPkOS+m+WQiOW5tuebruagh++8gScsICfoq4vmj5DkvpvlkIjkvbXnm67mqJnvvIEnKSwge1xuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdHRhZzogJ3R3aW5rbGV4ZmQnLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZS50YXJnZXQpO1xuXHRcdFR3aW5rbGUueGZkLmN1cnJlbnRSYXRpb25hbGUgPSBwYXJhbXMueGZkcmVhc29uO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5vbkVycm9yKFR3aW5rbGUueGZkLnByaW50UmF0aW9uYWxlKTtcblx0XHRpZiAoIXBhcmFtcy5jYXRlZ29yeSkge1xuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLmVycm9yKCfplJnor68nLCAn5pyq5a6a5LmJ55qE5Yqo5L2cJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRfcGFnZTtcblx0XHRjb25zdCBkYXRlID0gbmV3IE1vcmViaXRzLmRhdGUoKTsgLy8gWFhYOiBhdm9pZCB1c2Ugb2YgY2xpZW50IGNsb2NrLCBzdGlsbCB1c2VkIGJ5IFRmRCwgRmZEIGFuZCBDZkRcblx0XHRzd2l0Y2ggKHBhcmFtcy5jYXRlZ29yeSkge1xuXHRcdFx0Y2FzZSAnYWZkJzpcblx0XHRcdFx0Ly8gQUZEXG5cdFx0XHRcdHBhcmFtcy5sb2dwYWdlID0gYExJQl90YWxrOuWtmOW6n+iuqOiuui/orrDlvZUvJHtkYXRlLmZvcm1hdCgnWVlZWS9NTS9ERCcsICd1dGMnKX1gO1xuXHRcdFx0XHRwYXJhbXMubG9nbm9taW5hdGlvbiA9XG5cdFx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdsb2dYZmROb21pbmF0aW9ucycpICYmXG5cdFx0XHRcdFx0IVR3aW5rbGUuZ2V0UHJlZignbm9Mb2dPblhmZE5vbWluYXRpb24nKS5pbmNsdWRlcyhwYXJhbXMueGZkY2F0KTtcblx0XHRcdFx0TW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50KCk7XG5cdFx0XHRcdC8vIFVwZGF0aW5nIGRhdGEgZm9yIHRoZSBhY3Rpb24gY29tcGxldGVkIGV2ZW50XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gcGFyYW1zLmxvZ3BhZ2U7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5o+Q5ZCN5a6M5oiQ77yM6YeN5a6a5ZCR5Yiw6K6o6K666aG1Jyxcblx0XHRcdFx0XHQn5o+Q5ZCN5a6M5oiQ77yM6YeN5paw5bCO5ZCR5Yiw6KiO6KuW6aCBJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBMb29rdXAgY3JlYXRpb25cblx0XHRcdFx0dGFyZ2V0X3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPlumhtemdouWIm+W7uuS/oeaBrycsICflj5blvpfpoIHpnaLlu7rnq4vos4foqIonKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0YXJnZXRfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZUNvbnRlbnRNb2RlbCcpID09PSAnd2lraXRleHQnKSB7XG5cdFx0XHRcdFx0dGFyZ2V0X3BhZ2Uuc2V0TG9va3VwTm9uUmVkaXJlY3RDcmVhdG9yKHRydWUpOyAvLyBMb29rIGZvciBhdXRob3Igb2YgZmlyc3Qgbm9uLXJlZGlyZWN0IHJldmlzaW9uXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXRfcGFnZS5sb29rdXBDcmVhdGlvbihUd2lua2xlLnhmZC5jYWxsYmFja3MuYWZkLmxvb2t1cENyZWF0aW9uKTtcblx0XHRcdFx0TW9yZWJpdHMud2lraS5yZW1vdmVDaGVja3BvaW50KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZmZkJzoge1xuXHRcdFx0XHQvLyBGRkRcblx0XHRcdFx0cGFyYW1zLmxvZ3BhZ2UgPSBgTElCX3RhbGs65a2Y5bqf6K6o6K66L+iusOW9lS8ke2RhdGUuZm9ybWF0KCdZWVlZL01NL0REJywgJ3V0YycpfWA7XG5cdFx0XHRcdHBhcmFtcy5sb2dub21pbmF0aW9uID1cblx0XHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ2xvZ1hmZE5vbWluYXRpb25zJykgJiYgIVR3aW5rbGUuZ2V0UHJlZignbm9Mb2dPblhmZE5vbWluYXRpb24nKS5pbmNsdWRlcygnZmZkJyk7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWRkQ2hlY2twb2ludCgpO1xuXHRcdFx0XHQvLyBVcGRhdGluZyBkYXRhIGZvciB0aGUgYWN0aW9uIGNvbXBsZXRlZCBldmVudFxuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHBhcmFtcy5sb2dwYWdlO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+aPkOWQjeWujOaIkO+8jOmHjeWumuWQkeWIsOiuqOiuuumhtScsXG5cdFx0XHRcdFx0J+aPkOWQjeWujOaIkO+8jOmHjeaWsOWwjuWQkeWIsOiojuirlumggSdcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gTG9va3VwIGNyZWF0aW9uXG5cdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W6aG16Z2i5Yib5bu65L+h5oGvJywgJ+WPluW+l+mggemdouW7uueri+izh+ioiicpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldExvb2t1cE5vblJlZGlyZWN0Q3JlYXRvcih0cnVlKTsgLy8gTG9vayBmb3IgYXV0aG9yIG9mIGZpcnN0IG5vbi1yZWRpcmVjdCByZXZpc2lvblxuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9va3VwQ3JlYXRpb24oVHdpbmtsZS54ZmQuY2FsbGJhY2tzLmZmZC5sb29rdXBDcmVhdGlvbik7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kucmVtb3ZlQ2hlY2twb2ludCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdG13Lm5vdGlmeSgndHdpbmtsZXhmZO+8muacquWumuS5ieeahOexu+WIqycsIHtcblx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0dGFnOiAndHdpbmtsZXhmZCcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUueGZkLCAneGZkJyk7XG59KSgpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZWltYWdlLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZWltYWdlKCkge1xuXHQvKipcblx0ICogdHdpbmtsZWltYWdlLmpzOiBJbWFnZSBDU0QgbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIChcIkRJXCIpXG5cdCAqIEFjdGl2ZSBvbjogTG9jYWwgbm9ucmVkaXJlY3QgZmlsZSBwYWdlcyAobm90IG9uIFNoYXJlKVxuXHQgKi9cblx0VHdpbmtsZS5pbWFnZSA9ICgpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSA2ICYmXG5cdFx0XHQhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI213LXNoYXJlZHVwbG9hZCcpICYmXG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctaW1hZ2VwYWdlLXNlY3Rpb24tZmlsZWhpc3RvcnknKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFx0VHdpbmtsZS5pbWFnZS5jYWxsYmFjayxcblx0XHRcdFx0d2luZG93LndnVUxTKCflm77mnYMnLCAn5ZyW5qyKJyksXG5cdFx0XHRcdCd0dy1kaScsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5o+Q5Lqk5paH5Lu25b+r6YCf5Yig6ZmkJywgJ+aPkOS6pOaqlOahiOW/q+mAn+WIqumZpCcpXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5pbWFnZS5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgMzMwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCfmlofku7blv6vpgJ/liKDpmaTlgJnpgIknLCAn5qqU5qGI5b+r6YCf5Yiq6Zmk5YCZ6YG4JykpO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflv6vpgJ/liKDpmaTmnaHkvosnLCAn5b+r6YCf5Yiq6Zmk5qKd5L6LJyksICdMSUI6Q1NEJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCflm77mnYPorr7nva4nLCAn5ZyW5qyK6Kit5a6aJyksICdIOlRXL1BSRUYjaW1hZ2UnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0MjaW1hZ2UnKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLmltYWdlLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCa55+l5LiK5Lyg6ICFJywgJ+mAmuefpeS4iuWCs+iAhScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm90aWZ5Jyxcblx0XHRcdFx0XHRuYW1lOiAnbm90aWZ5Jyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Iul5oKo5Zyo5qCH6K6w5ZCM5LiA55So5oi355qE5b6I5aSa5paH5Lu277yM6K+35Y+W5raI5q2k5aSN6YCJ5qGG5Lul6YG/5YWN5Y+R6YCB6L+H5aSa5raI5oGv44CCQ1NEIEY15rC46L+c5LiN5Lya6YCa55+l44CCJyxcblx0XHRcdFx0XHRcdCfoi6XmgqjlnKjmqJnoqJjlkIzkuIDkvb/nlKjogIXnmoTlvojlpJrmqpTmoYjvvIzoq4vlj5bmtojmraTmoLjlj5bmlrnloYrku6Xpgb/lhY3nmbzpgIHpgY7lpJroqIrmga/jgIJDU0QgRjXmsLjpgaDkuI3mnIPpgJrnn6XjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmdldFByZWYoJ25vdGlmeVVzZXJPbkRlbGknKSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0Y29uc3QgZmllbGQgPSBmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6ZyA6KaB55qE5Yqo5L2cJywgJ+mcgOimgeeahOWLleS9nCcpLFxuXHRcdH0pO1xuXHRcdGZpZWxkLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAncmFkaW8nLFxuXHRcdFx0bmFtZTogJ3R5cGUnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5piO5pi+5L615p2D5LmL5paH5Lu277yIQ1NEIEYx77yJJywgJ+aYjumhr+S+teasiuS5i+aqlOahiO+8iENTRCBGMe+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm8gcGVybWlzc2lvbicsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+S4iuS8oOiAheWuo+ensOaLpeacie+8jOiAjOWcqOWFtuS7luadpea6kOaJvuWIsOeahOaWh+S7tu+8jOaIluS7juS+teadg+eahOadpea6kOiOt+WPlueahOaWh+S7tuOAgicsXG5cdFx0XHRcdFx0XHQn5LiK5YKz6ICF5a6j56ix5pOB5pyJ77yM6ICM5Zyo5YW25LuW5L6G5rqQ5om+5Yiw55qE5qqU5qGI77yM5oiW5b6e5L615qyK55qE5L6G5rqQ5Y+W5b6X55qE5qqU5qGI44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0c3ViZ3JvdXA6IHtcblx0XHRcdFx0XHRcdG5hbWU6ICdmMV9zb3VyY2UnLFxuXHRcdFx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S+teadg+adpea6kO+8micsICfkvrXmrIrkvobmupDvvJonKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p2l5rqQ5LiN5piO77yIQ1NEIEYz77yJJywgJ+S+hua6kOS4jeaYju+8iENTRCBGM++8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm8gc291cmNlJyxcblx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5pys5paH5Lu25bm25pyq5rOo5piO5Y6f5aeL5Ye65aSEJywgJ+acrOaqlOahiOS4puacquiou+aYjuWOn+Wni+WHuuiZlScpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pyq55+l6JGX5L2c5p2D5L+h5oGv77yIQ1NEIEYz77yJJywgJ+acquefpeiRl+S9nOasiuizh+ioiu+8iENTRCBGM++8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm8gbGljZW5zZScsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCfmnKzmlofku7bnvLrlsJHokZfkvZzmnYPkv6Hmga8nLCAn5pys5qqU5qGI57y65bCR6JGX5L2c5qyK6LOH6KiKJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfokZfkvZzmnYPml6Dms5Xooqvmn6Xor4HvvIhDU0QgRjPvvIknLCAn6JGX5L2c5qyK54Sh5rOV6KKr5p+l6K2J77yIQ1NEIEYz77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdubyBsaWNlbnNlJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+acrOaWh+S7tuWjsOensOeahOiRl+S9nOadg+S/oeaBr+aXoOazleiiq+afpeivgScsICfmnKzmqpTmoYjogbLnqLHnmoTokZfkvZzmrIros4foqIrnhKHms5Xooqvmn6XorYknKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WPr+iiq+abv+S7o+eahOmdnuiHqueUseiRl+S9nOadg+aWh+S7tu+8iENTRCBGNO+8iScsICflj6/ooqvmm7/ku6PnmoTpnZ7oh6rnlLHokZfkvZzmrIrmqpTmoYjvvIhDU0QgRjTvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3JlcGxhY2VhYmxlIGZhaXIgdXNlJyxcblx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5paH5Lu25LuF55So5LqO5o+P6L+w44CB6K+G5Yir5oiW6K+E6K665paH5Lu25Lit5bGV56S655qE5LqL54mp77yM5oiW5LuF55So5L2c5o+S5Zu+77yM5LiU5ruh6Laz5Lul5LiL5Zub5Liq5p2h5Lu25LmL5LiA44CC6Iul57uZ5Ye65LqG5YW25LuW5ZCI55CG5L2/55So5L6d5o2u77yM5LiN6YCC55So5pys5p2h44CC5aaC5a+55paH5Lu255qE5Y+v5pu/5Luj5oCn5a2Y5Zyo5LqJ6K6u77yM5bqU5Lqk5paH5Lu25a2Y5bqf6K6o6K665aSE55CG44CC5pys5p2h5Lmf5LiN6YCC55So5LqO5q2j5Zyo5oiW5pu+57uP55Sx5paH5Lu25a2Y5bqf6K6o6K665aSE55CG6L+H55qE5paH5Lu244CCJyxcblx0XHRcdFx0XHRcdCfmqpTmoYjlg4XnlKjmlrzmj4/ov7DjgIHovqjorZjmiJboqZXoq5bmqpTmoYjkuK3lsZXnpLrnmoTkuovnianvvIzmiJblg4XnlKjkvZzmj5LlnJbvvIzkuJTmu7/otrPku6XkuIvlm5vlgIvmop3ku7bkuYvkuIDjgILoi6Xntablh7rkuoblhbbku5blkIjnkIbkvb/nlKjkvp3mk5rvvIzkuI3pgannlKjmnKzmop3jgILlpoLlsI3mqpTmoYjnmoTlj6/mm7/ku6PmgKflrZjlnKjniK3orbDvvIzmh4nkuqTmqpTmoYjlrZjlu6LoqI7oq5bomZXnkIbjgILmnKzmop3kuZ/kuI3pgannlKjmlrzmraPlnKjmiJbmm77ntpPnlLHmqpTmoYjlrZjlu6LoqI7oq5bomZXnkIbpgY7nmoTmqpTmoYjjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRzdWJncm91cDoge1xuXHRcdFx0XHRcdFx0bmFtZTogJ2Y0X3R5cGUnLFxuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgILnlKjnsbvlnovvvJonLCAn6YGp55So6aGe5Yil77yaJyksXG5cdFx0XHRcdFx0XHRzdHlsZTogJ3dpZHRoOiA4NSU7Jyxcblx0XHRcdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivt+mAieaLqScsICfoq4vpgbjmk4cnKSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0J+acieWFtuS7luiHqueUseiRl+S9nOadg+aWh+S7tuWxleekuuebuOWQjOeahOS6i+eJqScsXG5cdFx0XHRcdFx0XHRcdFx0XHQn5pyJ5YW25LuW6Ieq55Sx6JGX5L2c5qyK5qqU5qGI5bGV56S655u45ZCM55qE5LqL54mpJ1xuXHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICcxJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn5paH5Lu25o+P6L+w55qE5piv5Zyo5LiW5oiW5YGH5a6a5Zyo5LiW5Lq654mp44CB5LuN54S25a2Y5Zyo55qE5bu6562R44CB5a6k5aSW6ZuV5aGR5oiW5LuN54S25Zyo5ZSu55qE5ZWG5ZOB77yM5LiU6aKE6K6h6Ieq6KGM5ouN5pGE55qE54Wn54mH5LiN5Y+X5LuW5Lq66JGX5L2c5p2D5L+d5oqkJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfmqpTmoYjmj4/ov7DnmoTmmK/lnKjkuJbmiJblgYflrprlnKjkuJbkurrnianjgIHku43nhLblrZjlnKjnmoTlu7rnr4njgIHlrqTlpJbpm5XloZHmiJbku43nhLblnKjllK7nmoTllYblk4HvvIzkuJTpoJDoqIjoh6rooYzmi43mlJ3nmoTnm7jniYfkuI3lj5fku5bkurrokZfkvZzmrIrkv53orbcnXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJzInLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5paH5Lu25Li65Y+v6Ieq6KGM57uY5Yi255qE5Zyw5Zu+5oiW5Zu+6KGoJywgJ+aqlOahiOeCuuWPr+iHquihjOe5quijveeahOWcsOWcluaIluWcluihqCcpLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnMycsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0J+aWh+S7tuadpeiHquWVhuS4muWbvueJh+acuuaehO+8iOWmgkdldHR577yJJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfmqpTmoYjkvoboh6rllYbmpa3lnJbniYfmqZ/mp4vvvIjlpoJHZXR0ee+8iSdcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnNCcsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ayoeacieiiq+adoeebruS9v+eUqOeahOmdnuiHqueUseiRl+S9nOadg+aWh+S7tu+8iENTRCBGNe+8iScsXG5cdFx0XHRcdFx0XHQn5rKS5pyJ6KKr5qKd55uu5L2/55So55qE6Z2e6Ieq55Sx6JGX5L2c5qyK5qqU5qGI77yIQ1NEIEY177yJJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6ICdvcnBoYW5lZCBmYWlyIHVzZScsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+acrOaWh+S7tuS4uumdnuiHqueUseiRl+S9nOadg+S4lOayoeacieiiq+adoeebruS9v+eUqCcsXG5cdFx0XHRcdFx0XHQn5pys5qqU5qGI54K66Z2e6Ieq55Sx6JGX5L2c5qyK5LiU5rKS5pyJ6KKr5qKd55uu5L2/55SoJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ayoeacieWhq+WGmeS7u+S9leWQiOeQhuS9v+eUqOS+neaNrueahOmdnuiHqueUseiRl+S9nOadg+aWh+S7tu+8iENTRCBGNe+8iScsXG5cdFx0XHRcdFx0XHQn5rKS5pyJ5aGr5a+r5Lu75L2V5ZCI55CG5L2/55So5L6d5pOa55qE6Z2e6Ieq55Sx6JGX5L2c5qyK5qqU5qGI77yIQ1NEIEY177yJJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dmFsdWU6ICdubyBmYWlyIHVzZSByYXRpb25hbGUnLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfkuI3pgILnlKjkuo7mnInkuonorq7kvYblrozmlbTnmoTlkIjnkIbkvb/nlKjkvp3mja7jgILoi6XpnZ7oh6rnlLHokZfkvZzmnYPmlofku7blj6rmnInpg6jliIbmnaHnm67nmoTkvb/nlKjkvp3mja7vvIzkvYblkIzml7booqvkvb/nlKjkuo7mnKrmj5DkvpvlkIjnkIbkvb/nlKjkvp3mja7nmoTmnaHnm67vvIzliJnmnKzmlrnpkojkuZ/kuI3pgILnlKjjgIInLFxuXHRcdFx0XHRcdFx0J+S4jemBqeeUqOaWvOacieeIreitsOS9huWujOaVtOeahOWQiOeQhuS9v+eUqOS+neaTmuOAguiLpemdnuiHqueUseiRl+S9nOasiuaqlOahiOWPquaciemDqOWIhuaineebrueahOS9v+eUqOS+neaTmu+8jOS9huWQjOaZguiiq+S9v+eUqOaWvOacquaPkOS+m+WQiOeQhuS9v+eUqOS+neaTmueahOaineebru+8jOWJh+acrOaWuemHneS5n+S4jemBqeeUqOOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHQvLyBXZSBtdXN0IGluaXQgdGhlIHBhcmFtZXRlcnNcblx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRyZXN1bHQudHlwZVswXS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdH07XG5cdFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2suZXZhbHVhdGUgPSAoZXZlbnQpID0+IHtcblx0XHRsZXQgdHlwZTtcblx0XHRsZXQgbm90aWZ5ID0gZXZlbnQudGFyZ2V0Lm5vdGlmeS5jaGVja2VkO1xuXHRcdGNvbnN0IHR5cGVzID0gZXZlbnQudGFyZ2V0LnR5cGU7XG5cdFx0Zm9yIChjb25zdCB0eXBlXyBvZiB0eXBlcykge1xuXHRcdFx0aWYgKHR5cGVfLmNoZWNrZWQpIHtcblx0XHRcdFx0dHlwZSA9IHR5cGVfLnZhbHVlcztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBjc2Rjcml0O1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSAnbm8gc291cmNlJzpcblx0XHRcdFx0Y3NkY3JpdCA9ICdmMyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnbm8gbGljZW5zZSc6XG5cdFx0XHRcdGNzZGNyaXQgPSAnZjMnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ29ycGhhbmVkIGZhaXIgdXNlJzpcblx0XHRcdFx0Y3NkY3JpdCA9ICdmNSc7XG5cdFx0XHRcdG5vdGlmeSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ25vIHBlcm1pc3Npb24nOlxuXHRcdFx0XHRjc2Rjcml0ID0gJ2YxJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdubyBmYWlyIHVzZSByYXRpb25hbGUnOlxuXHRcdFx0XHRjc2Rjcml0ID0gJ2Y1Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyZXBsYWNlYWJsZSBmYWlyIHVzZSc6XG5cdFx0XHRcdGNzZGNyaXQgPSAnZjQnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVHdpbmtsZS5pbWFnZS5jYWxsYmFjay5ldmFsdWF0Ze+8muacquefpeadoeasvicpO1xuXHRcdH1cblx0XHRjb25zdCBsb2dub21pbmF0aW9uID1cblx0XHRcdFR3aW5rbGUuZ2V0UHJlZignbG9nU3BlZWR5Tm9taW5hdGlvbnMnKSAmJlxuXHRcdFx0IVR3aW5rbGUuZ2V0UHJlZignbm9Mb2dPblNwZWVkeU5vbWluYXRpb24nKS5pbmNsdWRlcyhjc2Rjcml0LnRvTG93ZXJDYXNlKCkpO1xuXHRcdGNvbnN0IHRlbXBsYXRlbmFtZSA9IHR5cGU7XG5cdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0dHlwZSxcblx0XHRcdHRlbXBsYXRlbmFtZSxcblx0XHRcdG5vcm1hbGl6ZWQ6IGNzZGNyaXQsXG5cdFx0XHRsb2dub21pbmF0aW9uLFxuXHRcdH07XG5cdFx0aWYgKGNzZGNyaXQgPT09ICdmMScpIHtcblx0XHRcdHBhcmFtcy5mMV9zb3VyY2UgPSBldmVudC50YXJnZXRbJ3R5cGUuZjFfc291cmNlJ10udmFsdWU7XG5cdFx0fVxuXHRcdGlmIChjc2Rjcml0ID09PSAnZjQnKSB7XG5cdFx0XHRjb25zdCBmNF90eXBlID0gZXZlbnQudGFyZ2V0Wyd0eXBlLmY0X3R5cGUnXS52YWx1ZTtcblx0XHRcdGlmICghZjRfdHlwZSkge1xuXHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ0NTRCBGNO+8muivt+mAieaLqemAgueUqOexu+Wei+OAgicsICdDU0QgRjTvvJroq4vpgbjmk4fpgannlKjpoZ7liKXjgIInKSwge1xuXHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHR0YWc6ICd0d2lua2xlaW1hZ2UnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cGFyYW1zLmY0X3R5cGUgPSBmNF90eXBlO1xuXHRcdH1cblx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGV2ZW50LnRhcmdldCk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKCfmoIforrDlrozmiJAnLCAn5qiZ6KiY5a6M5oiQJyk7XG5cdFx0Ly8gVGFnZ2luZyBpbWFnZVxuXHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+WKoOWFpeWIoOmZpOagh+iusCcsICfliqDlhaXliKrpmaTmqJnoqJgnKVxuXHRcdCk7XG5cdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2tzLnRhZ2dpbmdJbWFnZSk7XG5cdFx0Ly8gTm90aWZ5aW5nIHVwbG9hZGVyXG5cdFx0aWYgKG5vdGlmeSkge1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLmxvb2t1cENyZWF0aW9uKFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2tzLnVzZXJOb3RpZmljYXRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBhZGQgdG8gQ1NEIGxvZyBpZiBkZXNpcmVkXG5cdFx0XHRpZiAobG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRwYXJhbXMuZnJvbURJID0gdHJ1ZTtcblx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnVzZXIuYWRkVG9Mb2cocGFyYW1zLCBudWxsKTtcblx0XHRcdH1cblx0XHRcdC8vIE5vIGF1dG8tbm90aWZpY2F0aW9uLCBkaXNwbGF5IHdoYXQgd2FzIGdvaW5nIHRvIGJlIGFkZGVkLlxuXHRcdFx0aWYgKHR5cGUgIT09ICdvcnBoYW5lZCBmYWlyIHVzZScpIHtcblx0XHRcdFx0Y29uc3Qgbm90ZURhdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcblx0XHRcdFx0bm90ZURhdGEuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXG5cdFx0XHRcdFx0XHQne3snLmNvbmNhdCgnc3Vic3Q6JywgYFVwbG9hZHZpb25vdGljZXwke01vcmViaXRzLnBhZ2VOYW1lTm9ybX19fS0tfn5gLCAnfn4nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0J+aPkOekuicsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0Wyfov5nkupvlhoXlrrnlupTotLTov5vkuIrkvKDogIXlr7nor53pobXvvJonLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpLCBub3RlRGF0YV0sXG5cdFx0XHRcdFx0XHRbJ+mAmeS6m+WFp+WuueaHieiyvOmAsuS4iuWCs+iAheiojuirlumgge+8micsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyksIG5vdGVEYXRhXVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2tzID0ge1xuXHRcdHRhZ2dpbmdJbWFnZTogKHBhZ2VvYmopID0+IHtcblx0XHRcdGxldCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdC8vIHJlbW92ZSB0YWcgLSBkZWxldGlvbi10YWdnZWQgZmlsZXMgY2Fubm90IGJlIG1vdmVkXG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKFxuXHRcdFx0XHQvXFx7XFx7KG10Y3woY29weSB8bW92ZSApP3RvID8oc2hhcmV8Y29tbW9ucyl8bW92ZSB0byAocWl1d2VuIHNoYXJlfHdpa2ltZWRpYSBjb21tb25zKXxjb3B5IHRvIChxaXV3ZW4gc2hhcmV8d2lraW1lZGlhIGNvbW1vbnMpKVtefV0qXFx9XFx9L2dpLFxuXHRcdFx0XHQnJ1xuXHRcdFx0KTtcblx0XHRcdC8vIEFkZGluZyBkaXNjdXNzaW9uXG5cdFx0XHRpZiAocGFyYW1zLnR5cGUgIT09ICdvcnBoYW5lZCBmYWlyIHVzZScpIHtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHQnTElCX3RhbGs65a2Y5bqf6K6o6K66L+aWh+S7tuW/q+mAn+WIoOmZpOaPkOaKpScsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDlhaXlv6vpgJ/liKDpmaTorrDlvZXpobknLCAn5Yqg5YWl5b+r6YCf5Yiq6Zmk6KiY6YyE6aCFJylcblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHBhcmFtcyk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuaW1hZ2UuY2FsbGJhY2tzLmltYWdlTGlzdCk7XG5cdFx0XHR9XG5cdFx0XHRsZXQgdGFnID0gJyc7XG5cdFx0XHRzd2l0Y2ggKHBhcmFtcy50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ29ycGhhbmVkIGZhaXIgdXNlJzpcblx0XHRcdFx0XHR0YWcgPSAne3snLmNvbmNhdCgnc3Vic3Q6JywgJ29ycGhhbmVkIGZhaXIgdXNlfX1cXG4nKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnbm8gcGVybWlzc2lvbic6XG5cdFx0XHRcdFx0dGFnID0gJ3t7Jy5jb25jYXQoXG5cdFx0XHRcdFx0XHQnc3Vic3Q6Jyxcblx0XHRcdFx0XHRcdGAke3BhcmFtcy50ZW1wbGF0ZW5hbWV9L2F1dG98MT0ke3BhcmFtcy5mMV9zb3VyY2Vcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL2h0dHAvZywgJyYjMTA0O3R0cCcpXG5cdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXG4rL2csICdcXG4nKVxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXlxccyooW14qXSkvZ20sICcqICQxJylcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL15cXCogJC9tLCAnJyl9fX1cXG5gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncmVwbGFjZWFibGUgZmFpciB1c2UnOlxuXHRcdFx0XHRcdHRhZyA9ICd7eycuY29uY2F0KCdzdWJzdDonLCBgJHtwYXJhbXMudGVtcGxhdGVuYW1lfS9hdXRvfDE9JHtwYXJhbXMuZjRfdHlwZX19fVxcbmApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRhZyA9ICd7eycuY29uY2F0KCdzdWJzdDonLCBgJHtwYXJhbXMudGVtcGxhdGVuYW1lfS9hdXRvfX1cXG5gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNvbnN0IHRleHROb1NkID0gdGV4dC5yZXBsYWNlKFxuXHRcdFx0XHQvXFx7XFx7XFxzKihkYigtXFx3Kik/fGR8ZGVsZXRlfCg/Omhhbmd8aG9sZClbLSBdP29uKVxccyooXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyovZ2ksXG5cdFx0XHRcdCcnXG5cdFx0XHQpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0ZXh0ICE9PSB0ZXh0Tm9TZCAmJlxuXHRcdFx0XHRjb25maXJtKHdpbmRvdy53Z1VMUygn5Zyo6aG16Z2i5LiK5om+5Yiw5b+r6YCf5Yig6Zmk5qih5p2/77yM6KaB56e76Zmk5ZCX77yfJywgJ+WcqOmggemdouS4iuaJvuWIsOW/q+mAn+WIqumZpOaooeadv++8jOimgeenu+mZpOWXju+8nycpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0Tm9TZDtcblx0XHRcdH1cblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQodGFnICsgdGV4dCk7XG5cdFx0XHRsZXQgZWRpdFN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+ivt+axguW/q+mAn+WIoOmZpO+8iCcsICfoq4vmsYLlv6vpgJ/liKrpmaTvvIgnKTtcblx0XHRcdGVkaXRTdW1tYXJ5ICs9IGBbW1FXOkNTRCMke3BhcmFtcy5ub3JtYWxpemVkLnRvVXBwZXJDYXNlKCl9fENTRCAke3BhcmFtcy5ub3JtYWxpemVkLnRvVXBwZXJDYXNlKCl9XV1gO1xuXHRcdFx0ZWRpdFN1bW1hcnkgKz0gJ++8iSc7XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KGVkaXRTdW1tYXJ5KTtcblx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZW9iai5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCdkZWxpV2F0Y2hQYWdlJykpO1xuXHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ25vY3JlYXRlJyk7XG5cdFx0XHRwYWdlb2JqLnNhdmUoKTtcblx0XHR9LFxuXHRcdHVzZXJOb3RpZmljYXRpb246IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0Y29uc3QgaW5pdGlhbENvbnRyaWIgPSBwYWdlb2JqLmdldENyZWF0b3IoKTtcblx0XHRcdC8vIGRpc2FsbG93IHdhcm5pbmcgeW91cnNlbGZcblx0XHRcdGlmIChpbml0aWFsQ29udHJpYiA9PT0gbXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpKSB7XG5cdFx0XHRcdHBhZ2VvYmpcblx0XHRcdFx0XHQuZ2V0U3RhdHVzRWxlbWVudCgpXG5cdFx0XHRcdFx0Lndhcm4oYOaCqO+8iCR7aW5pdGlhbENvbnRyaWJ977yJJHt3aW5kb3cud2dVTFMoJ+WIm+W7uuS6huivpemhte+8jOi3s+i/h+mAmuefpScsICflu7rnq4vkuoboqbLpoIHvvIzot7PpgY7pgJrnn6UnKX1gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHRhbGtQYWdlTmFtZSA9IGBVc2VyIHRhbGs6JHtpbml0aWFsQ29udHJpYn1gO1xuXHRcdFx0XHRjb25zdCB1c2VydGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdHRhbGtQYWdlTmFtZSxcblx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+mAmuefpeS4iuS8oOiAhScsICfpgJrnn6XkuIrlgrPogIUnKX3vvIgke2luaXRpYWxDb250cmlife+8iWBcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgbm90aWZ5dGV4dCA9ICdcXG57eycuY29uY2F0KFxuXHRcdFx0XHRcdCdzdWJzdDonLFxuXHRcdFx0XHRcdGBEaS0ke3BhcmFtcy50ZW1wbGF0ZW5hbWV9LW5vdGljZXwxPSR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfX19LS1+fmAsXG5cdFx0XHRcdFx0J35+J1xuXHRcdFx0XHQpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0QXBwZW5kVGV4dChub3RpZnl0ZXh0KTtcblx0XHRcdFx0dXNlcnRhbGtwYWdlLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6YCa55+l77ya5paH5Lu2W1snLCAn6YCa55+l77ya5qqU5qGIW1snKSArXG5cdFx0XHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCddXeW/q+mAn+WIoOmZpOaPkOWQjScsICddXeW/q+mAn+WIqumZpOaPkOWQjScpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdHVzZXJ0YWxrcGFnZS5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCdkZWxpV2F0Y2hVc2VyJykpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0XHR1c2VydGFsa3BhZ2UuYXBwZW5kKCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBhZGQgdGhpcyBub21pbmF0aW9uIHRvIHRoZSB1c2VyJ3MgdXNlcnNwYWNlIGxvZywgaWYgdGhlIHVzZXIgaGFzIGVuYWJsZWQgaXRcblx0XHRcdGlmIChwYXJhbXMubG9nbm9taW5hdGlvbikge1xuXHRcdFx0XHRwYXJhbXMuZnJvbURJID0gdHJ1ZTtcblx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnVzZXIuYWRkVG9Mb2cocGFyYW1zLCBpbml0aWFsQ29udHJpYik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRpbWFnZUxpc3Q6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Ly8gY29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQoYCR7dGV4dH1cXG4qIFtbOiR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dLS1+fmAuY29uY2F0KCd+ficpKTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoYOWKoOWFpVtbJHtNb3JlYml0cy5wYWdlTmFtZU5vcm19XV1gKTtcblx0XHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRwYWdlb2JqLnNhdmUoKTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmltYWdlLCAnaW1hZ2UnKTtcbn0pKCk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZXByb3RlY3QuanMgKi9cbihmdW5jdGlvbiB0d2lua2xlcHJvdGVjdCgkKSB7XG5cdGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuXHQvKipcblx0ICogdHdpbmtsZXByb3RlY3QuanM6IFByb3RlY3QvUlBQIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IFRhYiAoXCJQUFwiL1wiUlBQXCIpXG5cdCAqIEFjdGl2ZSBvbjogTm9uLXNwZWNpYWwsIG5vbi1NZWRpYVdpa2kgcGFnZXNcblx0ICovXG5cdC8vIE5vdGU6IGEgbG90IG9mIGNvZGUgaW4gdGhpcyBtb2R1bGUgaXMgcmUtdXNlZC9jYWxsZWQgYnkgYmF0Y2hwcm90ZWN0LlxuXHRUd2lua2xlLnByb3RlY3QgPSAoKSA9PiB7XG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPCAwIHx8IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjayxcblx0XHRcdHdpbmRvdy53Z1VMUygn5L+d5oqkJywgJ+S/neittycpLFxuXHRcdFx0J3R3LXJwcCcsXG5cdFx0XHRNb3JlYml0cy51c2VySXNTeXNvcCA/IHdpbmRvdy53Z1VMUygn5L+d5oqk6aG16Z2iJywgJ+S/neitt+mggemdoicpIDogd2luZG93LndnVUxTKCfor7fmsYLkv53miqTpobXpnaInLCAn6KuL5rGC5L+d6K236aCB6Z2iJylcblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgV2luZG93ID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MjAsIDUzMCk7XG5cdFx0V2luZG93LnNldFRpdGxlKFxuXHRcdFx0TW9yZWJpdHMudXNlcklzU3lzb3Bcblx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+aWveihjOaIluivt+axguS/neaKpOmhtemdoicsICfmlr3ooYzmiJboq4vmsYLkv53orbfpoIHpnaInKVxuXHRcdFx0XHQ6IHdpbmRvdy53Z1VMUygn6K+35rGC5L+d5oqk6aG16Z2iJywgJ+iri+axguS/neitt+mggemdoicpXG5cdFx0KTtcblx0XHRXaW5kb3cuc2V0U2NyaXB0TmFtZSgnVHdpbmtsZScpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5L+d5oqk5p2h5L6LJywgJ+S/neitt+aineS+iycpLCAnTElCOlBST1QnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ+S/neaKpOiuvue9ricsICfkv53orbfoqK3lrponKSwgJ0g6VFcvUFJFRiNwcm90ZWN0Jyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI3Byb3RlY3QnKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suZXZhbHVhdGUpO1xuXHRcdGNvbnN0IGFjdGlvbmZpZWxkID0gZm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aTjeS9nOexu+WeiycsICfmk43kvZzpoZ7liKUnKSxcblx0XHR9KTtcblx0XHRpZiAoTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdGFjdGlvbmZpZWxkLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdyYWRpbycsXG5cdFx0XHRcdG5hbWU6ICdhY3Rpb250eXBlJyxcblx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5jaGFuZ2VBY3Rpb24sXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkv53miqTpobXpnaInLCAn5L+d6K236aCB6Z2iJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3Byb3RlY3QnLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFjdGlvbmZpZWxkLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAncmFkaW8nLFxuXHRcdFx0bmFtZTogJ2FjdGlvbnR5cGUnLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5jaGFuZ2VBY3Rpb24sXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor7fmsYLkv53miqTpobXpnaInLCAn6KuL5rGC5L+d6K236aCB6Z2iJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdyZXF1ZXN0Jyxcblx0XHRcdFx0XHR0b29sdGlwOlxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfoi6Xmgqjmg7PlnKhMSUI6UkZQUOivt+axguS/neaKpOatpOmhtScsICfoi6Xmgqjmg7PlnKhMSUI6UkZQUOiri+axguS/neitt+atpOmggScpICtcblx0XHRcdFx0XHRcdChNb3JlYml0cy51c2VySXNTeXNvcCA/ICfogIzkuI3mmK/oh6rooYzlrozmiJDjgIInIDogJ+OAgicpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICFNb3JlYml0cy51c2VySXNTeXNvcCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+eUqOS/neaKpOaooeadv+agh+iusOatpOmhtScsICfnlKjkv53orbfmqKHmnb/mqJnoqJjmraTpoIEnKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3RhZycsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflj6/ku6XnlKjmraTkuLrpobXpnaLliqDkuIrlkIjpgILnmoTkv53miqTmqKHmnb/jgIInLCAn5Y+v5Lul55So5q2k54K66aCB6Z2i5Yqg5LiK5ZCI6YGp55qE5L+d6K235qih5p2/44CCJyksXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgPT09IDAgfHwgbXcuY29uZmlnLmdldCgnd2dQYWdlQ29udGVudE1vZGVsJykgPT09ICdTY3JpYnVudG8nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6kJywgJ+mgkOiorScpLFxuXHRcdFx0bmFtZTogJ2ZpZWxkX3ByZXNldCcsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdGxhYmVsOiAnMScsXG5cdFx0XHRuYW1lOiAnZmllbGQxJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnZmllbGQnLFxuXHRcdFx0bGFiZWw6ICcyJyxcblx0XHRcdG5hbWU6ICdmaWVsZDInLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzdWJtaXQnLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGZvcm0ucmVuZGVyKCk7XG5cdFx0V2luZG93LnNldENvbnRlbnQocmVzdWx0KTtcblx0XHRXaW5kb3cuZGlzcGxheSgpO1xuXHRcdC8vIFdlIG11c3QgaW5pdCB0aGUgY29udHJvbHNcblx0XHRjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRyZXN1bHQuYWN0aW9udHlwZVswXS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdFx0Ly8gZ2V0IGN1cnJlbnQgcHJvdGVjdGlvbiBsZXZlbCBhc3luY2hyb25vdXNseVxuXHRcdFR3aW5rbGUucHJvdGVjdC5mZXRjaFByb3RlY3Rpb25MZXZlbCgpO1xuXHR9O1xuXHQvLyBDdXN0b21pemFibGUgbmFtZXNwYWNlIGFuZCBGbGFnZ2VkUmV2cyBzZXR0aW5nc1xuXHQvLyBJbiB0aGVvcnkgaXQnZCBiZSBuaWNlIHRvIGhhdmUgcmVzdHJpY3Rpb25sZXZlbHMgZGVmaW5lZCBoZXJlLFxuXHQvLyBidXQgdGhvc2UgYXJlIG9ubHkgYXZhaWxhYmxlIHZpYSBhIHNpdGVpbmZvIHF1ZXJ5XG5cdC8vIExpbWl0IHRlbXBsYXRlIGVkaXRvcjsgYSBUd2lua2xlIHJlc3RyaWN0aW9uLCBub3QgYSBzaXRlIHNldHRpbmdcblx0Y29uc3QgaXNUZW1wbGF0ZSA9IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDEwIHx8IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDgyODtcblx0Ly8gQ29udGFpbnMgdGhlIGN1cnJlbnQgcHJvdGVjdGlvbiBsZXZlbCBpbiBhbiBvYmplY3Rcblx0Ly8gT25jZSBmaWxsZWQsIGl0IHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZTpcblx0Ly8geyBlZGl0OiB7IGxldmVsOiBcInN5c29wXCIsIGV4cGlyeTogPHNvbWUgZGF0ZT4sIGNhc2NhZGU6IHRydWUgfSwgLi4uIH1cblx0VHdpbmtsZS5wcm90ZWN0LmN1cnJlbnRQcm90ZWN0aW9uTGV2ZWxzID0ge307XG5cdFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25MZXZlbHMgPSB7fTtcblx0VHdpbmtsZS5wcm90ZWN0LmZldGNoUHJvdGVjdGlvbkxldmVsID0gYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IGFwaSA9IGluaXRNd0FwaSgnbW9yZWJpdHMuanM7IFR3aW5rbGUvMS4xJyk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdGluZGV4cGFnZWlkczogdHJ1ZSxcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRsaXN0OiAnbG9nZXZlbnRzJyxcblx0XHRcdFx0bGV0eXBlOiAncHJvdGVjdCcsXG5cdFx0XHRcdGxldGl0bGU6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdFx0cHJvcDogJ2luZm8nLFxuXHRcdFx0XHRpbnByb3A6ICdwcm90ZWN0aW9ufHdhdGNoZWQnLFxuXHRcdFx0XHR0aXRsZXM6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBwcm90ZWN0RGF0YSA9IGF3YWl0IGFwaS5nZXQocGFyYW1zKTtcblx0XHRcdGNvbnN0IFtwYWdlaWRdID0gcHJvdGVjdERhdGEucXVlcnkucGFnZWlkcztcblx0XHRcdGNvbnN0IHBhZ2UgPSBwcm90ZWN0RGF0YS5xdWVyeS5wYWdlc1twYWdlaWRdO1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IHt9O1xuXHRcdFx0Y29uc3QgcHJldmlvdXMgPSB7fTtcblx0XHRcdC8vIFNhdmUgcmVxdWVzdGVkIHBhZ2UncyB3YXRjaGVkIHN0YXR1cyBmb3IgbGF0ZXIgaW4gY2FzZSBuZWVkZWQgd2hlbiBmaWxpbmcgcmVxdWVzdFxuXHRcdFx0VHdpbmtsZS5wcm90ZWN0LndhdGNoZWQgPSBwYWdlLndhdGNobGlzdGV4cGlyeSB8fCBwYWdlLndhdGNoZWQgPT09ICcnO1xuXHRcdFx0Zm9yIChjb25zdCBwcm90ZWN0aW9uIG9mIHBhZ2UucHJvdGVjdGlvbikge1xuXHRcdFx0XHRpZiAocHJvdGVjdGlvbi50eXBlICE9PSAnYWZ0Jykge1xuXHRcdFx0XHRcdGN1cnJlbnRbcHJvdGVjdGlvbi50eXBlXSA9IHtcblx0XHRcdFx0XHRcdGxldmVsOiBwcm90ZWN0aW9uLmxldmVsLFxuXHRcdFx0XHRcdFx0ZXhwaXJ5OiBwcm90ZWN0aW9uLmV4cGlyeSxcblx0XHRcdFx0XHRcdGNhc2NhZGU6IHByb3RlY3Rpb24uY2FzY2FkZSA9PT0gJycsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gT25seSB1c2UgdGhlIGxvZyBleGNlcHQgdW5wcm90ZWN0XG5cdFx0XHRpZiAocHJvdGVjdERhdGEucXVlcnkubG9nZXZlbnRzLmxlbmd0aCA+PSAxICYmIHByb3RlY3REYXRhLnF1ZXJ5LmxvZ2V2ZW50c1swXS5hY3Rpb24gIT09ICd1bnByb3RlY3QnKSB7XG5cdFx0XHRcdFtUd2lua2xlLnByb3RlY3QucHJldmlvdXNQcm90ZWN0aW9uTG9nXSA9IHByb3RlY3REYXRhLnF1ZXJ5LmxvZ2V2ZW50cztcblx0XHRcdH0gZWxzZSBpZiAocHJvdGVjdERhdGEucXVlcnkubG9nZXZlbnRzLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRcdFssIFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25Mb2ddID0gcHJvdGVjdERhdGEucXVlcnkubG9nZXZlbnRzO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25Mb2cpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm90ZWN0aW9uIG9mIFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25Mb2cucGFyYW1zLmRldGFpbHMpIHtcblx0XHRcdFx0XHRpZiAocHJvdGVjdGlvbi50eXBlICE9PSAnYWZ0Jykge1xuXHRcdFx0XHRcdFx0cHJldmlvdXNbcHJvdGVjdGlvbi50eXBlXSA9IHtcblx0XHRcdFx0XHRcdFx0bGV2ZWw6IHByb3RlY3Rpb24ubGV2ZWwsXG5cdFx0XHRcdFx0XHRcdGV4cGlyeTogcHJvdGVjdGlvbi5leHBpcnksXG5cdFx0XHRcdFx0XHRcdGNhc2NhZGU6IHByb3RlY3Rpb24uY2FzY2FkZSA9PT0gJycsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gc2hvdyB0aGUgcHJvdGVjdGlvbiBsZXZlbCBhbmQgbG9nIGluZm9cblx0XHRcdFR3aW5rbGUucHJvdGVjdC5oYXNQcm90ZWN0TG9nID0gISFwcm90ZWN0RGF0YS5xdWVyeS5sb2dldmVudHMubGVuZ3RoO1xuXHRcdFx0VHdpbmtsZS5wcm90ZWN0LmN1cnJlbnRQcm90ZWN0aW9uTGV2ZWxzID0gY3VycmVudDtcblx0XHRcdFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25MZXZlbHMgPSBwcmV2aW91cztcblx0XHRcdFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5zaG93TG9nQW5kQ3VycmVudFByb3RlY3RJbmZvKCk7XG5cdFx0fSBjYXRjaCB7fVxuXHR9O1xuXHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suc2hvd0xvZ0FuZEN1cnJlbnRQcm90ZWN0SW5mbyA9ICgpID0+IHtcblx0XHRjb25zdCBjdXJyZW50bHlQcm90ZWN0ZWQgPSBPYmplY3Qua2V5cyhUd2lua2xlLnByb3RlY3QuY3VycmVudFByb3RlY3Rpb25MZXZlbHMpLmxlbmd0aCAhPT0gMDtcblx0XHRpZiAoVHdpbmtsZS5wcm90ZWN0Lmhhc1Byb3RlY3RMb2cgfHwgVHdpbmtsZS5wcm90ZWN0Lmhhc1N0YWJsZUxvZykge1xuXHRcdFx0Y29uc3QgJGxpbmtNYXJrdXAgPSAkKCc8c3Bhbj4nKTtcblx0XHRcdGlmIChUd2lua2xlLnByb3RlY3QuaGFzUHJvdGVjdExvZykge1xuXHRcdFx0XHQkbGlua01hcmt1cC5hcHBlbmQoXG5cdFx0XHRcdFx0JChcblx0XHRcdFx0XHRcdGA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIke213LnV0aWwuZ2V0VXJsKCdTcGVjaWFsOkxvZycsIHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiAndmlldycsXG5cdFx0XHRcdFx0XHRcdHBhZ2U6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ3Byb3RlY3QnLFxuXHRcdFx0XHRcdFx0fSl9XCI+JHt3aW5kb3cud2dVTFMoJ+S/neaKpOaXpeW/lycsICfkv53orbfml6XoqownKX08L2E+YFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0Lmhhc1N0YWJsZUxvZyA/ICQoJzxzcGFuPicpLmh0bWwoJyAmYnVsbDsgJykgOiBudWxsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdCgkYm9keS5maW5kKCdkaXZbbmFtZT1cImhhc3Byb3RlY3Rsb2dcIl0gc3BhbicpWzBdKTtcblx0XHRcdE1vcmViaXRzLnN0YXR1cy53YXJuKFxuXHRcdFx0XHRjdXJyZW50bHlQcm90ZWN0ZWRcblx0XHRcdFx0XHQ/IHdpbmRvdy53Z1VMUygn5YWI5YmN5L+d5oqkJywgJ+WFiOWJjeS/neittycpXG5cdFx0XHRcdFx0OiBbXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2k6aG16Z2i5pu+5ZyoJywgJ+atpOmggemdouabvuWcqCcpLFxuXHRcdFx0XHRcdFx0XHQkKFxuXHRcdFx0XHRcdFx0XHRcdGA8Yj4ke25ldyBNb3JlYml0cy5kYXRlKFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25Mb2cudGltZXN0YW1wKS5jYWxlbmRhcihcblx0XHRcdFx0XHRcdFx0XHRcdCd1dGMnXG5cdFx0XHRcdFx0XHRcdFx0KX08L2I+YFxuXHRcdFx0XHRcdFx0XHQpWzBdLFxuXHRcdFx0XHRcdFx0XHRg6KKrJHtUd2lua2xlLnByb3RlY3QucHJldmlvdXNQcm90ZWN0aW9uTG9nLnVzZXJ9JHt3aW5kb3cud2dVTFMoJ+S/neaKpCcsICfkv53orbcnKX3vvJpgLFxuXHRcdFx0XHRcdFx0XHQuLi5Ud2lua2xlLnByb3RlY3QuZm9ybWF0UHJvdGVjdGlvbkRlc2NyaXB0aW9uKFR3aW5rbGUucHJvdGVjdC5wcmV2aW91c1Byb3RlY3Rpb25MZXZlbHMpLFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0JGxpbmtNYXJrdXBbMF1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KCRib2R5LmZpbmQoJ2RpdltuYW1lPVwiY3VycmVudHByb3RcIl0gc3BhbicpWzBdKTtcblx0XHRsZXQgcHJvdGVjdGlvbk5vZGUgPSBbXTtcblx0XHRsZXQgc3RhdHVzTGV2ZWwgPSAnaW5mbyc7XG5cdFx0cHJvdGVjdGlvbk5vZGUgPSBUd2lua2xlLnByb3RlY3QuZm9ybWF0UHJvdGVjdGlvbkRlc2NyaXB0aW9uKFR3aW5rbGUucHJvdGVjdC5jdXJyZW50UHJvdGVjdGlvbkxldmVscyk7XG5cdFx0aWYgKGN1cnJlbnRseVByb3RlY3RlZCkge1xuXHRcdFx0c3RhdHVzTGV2ZWwgPSAnd2Fybic7XG5cdFx0fVxuXHRcdE1vcmViaXRzLnN0YXR1c1tzdGF0dXNMZXZlbF0od2luZG93LndnVUxTKCflvZPliY3kv53miqTnrYnnuqcnLCAn55uu5YmN5L+d6K23562J57SaJyksIHByb3RlY3Rpb25Ob2RlKTtcblx0fTtcblx0VHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrLmNoYW5nZUFjdGlvbiA9IChlKSA9PiB7XG5cdFx0bGV0IGZpZWxkX3ByZXNldDtcblx0XHRsZXQgZmllbGQxO1xuXHRcdGxldCBmaWVsZDI7XG5cdFx0c3dpdGNoIChlLnRhcmdldC52YWx1ZXMpIHtcblx0XHRcdGNhc2UgJ3Byb3RlY3QnOlxuXHRcdFx0XHRmaWVsZF9wcmVzZXQgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6kJywgJ+mgkOiorScpLFxuXHRcdFx0XHRcdG5hbWU6ICdmaWVsZF9wcmVzZXQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZmllbGRfcHJlc2V0LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0bmFtZTogJ2NhdGVnb3J5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6npu5jorqTvvJonLCAn6YG45pOH6aCQ6Kit77yaJyksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5jaGFuZ2VQcmVzZXQsXG5cdFx0XHRcdFx0bGlzdDogbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKVxuXHRcdFx0XHRcdFx0PyBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblR5cGVzQWRtaW5cblx0XHRcdFx0XHRcdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25UeXBlc0NyZWF0ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZpZWxkMiA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHRcdFx0dHlwZTogJ2ZpZWxkJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkv53miqTpgInpobknLCAn5L+d6K236YG46aCFJyksXG5cdFx0XHRcdFx0bmFtZTogJ2ZpZWxkMicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRuYW1lOiAnY3VycmVudHByb3QnLFxuXHRcdFx0XHRcdGxhYmVsOiAnICcsXG5cdFx0XHRcdH0pOyAvLyBob2xkcyB0aGUgY3VycmVudCBwcm90ZWN0aW9uIGxldmVsLCBhcyBmaWxsZWQgb3V0IGJ5IHRoZSBhc3luYyBjYWxsYmFja1xuXHRcdFx0XHRmaWVsZDIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRuYW1lOiAnaGFzcHJvdGVjdGxvZycsXG5cdFx0XHRcdFx0bGFiZWw6ICcgJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vIGZvciBleGlzdGluZyBwYWdlc1xuXHRcdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKSkge1xuXHRcdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5lZGl0bW9kaWZ5LFxuXHRcdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L+u5pS557yW6L6R5p2D6ZmQJywgJ+S/ruaUuee3qOi8r+asiumZkCcpLFxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdlZGl0bW9kaWZ5Jyxcblx0XHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn6Iul5q2k6aG55YWz6Zet77yM57yW6L6R5p2D6ZmQ5bCG5LiN5Lya5L+u5pS544CCJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfoi6XmraTpoIXpl5zplonvvIznt6jovK/mrIrpmZDlsIfkuI3mnIPkv67mlLnjgIInXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmaWVsZDIuYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ2VkaXRsZXZlbCcsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnvJbovpHmnYPpmZDvvJonLCAn57eo6Lyv5qyK6ZmQ77yaJyksXG5cdFx0XHRcdFx0XHRldmVudDogVHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMuZWRpdGxldmVsLFxuXHRcdFx0XHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZXZlbHMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHQvLyBGaWx0ZXIgVEUgb3V0c2lkZSBvZiB0ZW1wbGF0ZXMgYW5kIG1vZHVsZXNcblx0XHRcdFx0XHRcdFx0KGxldmVsKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGlzVGVtcGxhdGUgfHwgbGV2ZWwudmFsdWUgIT09ICd0ZW1wbGF0ZWVkaXRvcic7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZmllbGQyLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICdlZGl0ZXhwaXJ5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e7iOatouaXtumXtO+8micsICfntYLmraLmmYLplpPvvJonKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZG9DdXN0b21FeHBpcnkoZXZlbnQudGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQkKCdpbnB1dFtuYW1lPXNtYWxsXScsICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdmb3JtJykpWzBdLmNoZWNrZWQgPVxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LnRhcmdldC5zZWxlY3RlZEluZGV4ID49IDQ7IC8vIDEgbW9udGhcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vIGRlZmF1bHQgZXhwaXJ5IHNlbGVjdGlvbiAoMiBkYXlzKSBpcyBjb25kaXRpb25hbGx5IHNldCBpbiBUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suY2hhbmdlUHJlc2V0XG5cdFx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxlbmd0aHMsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZmllbGQyLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLm1vdmVtb2RpZnksXG5cdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkv67mlLnnp7vliqjmnYPpmZAnLCAn5L+u5pS556e75YuV5qyK6ZmQJyksXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ21vdmVtb2RpZnknLFxuXHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfoi6XmraTpobnooqvlhbPpl63vvIznp7vliqjmnYPpmZDlsIbkuI3ooqvkv67mlLnjgIInLFxuXHRcdFx0XHRcdFx0XHRcdFx0J+iLpeatpOmgheiiq+mXnOmWie+8jOenu+WLleasiumZkOWwh+S4jeiiq+S/ruaUueOAgidcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRuYW1lOiAnbW92ZWxldmVsJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+enu+WKqOadg+mZkO+8micsICfnp7vli5XmrIrpmZDvvJonKSxcblx0XHRcdFx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5tb3ZlbGV2ZWwsXG5cdFx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxldmVscy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdC8vIEF1dG9jb25maXJtZWQgaXMgcmVxdWlyZWQgZm9yIGEgbW92ZSwgcmVkdW5kYW50XG5cdFx0XHRcdFx0XHRcdChsZXZlbCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXZlbC52YWx1ZSAhPT0gJ2F1dG9jb25maXJtZWQnICYmIChpc1RlbXBsYXRlIHx8IGxldmVsLnZhbHVlICE9PSAndGVtcGxhdGVlZGl0b3InKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZmllbGQyLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICdtb3ZlZXhwaXJ5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e7iOatouaXtumXtO+8micsICfntYLmraLmmYLplpPvvJonKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZG9DdXN0b21FeHBpcnkoZXZlbnQudGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdC8vIGRlZmF1bHQgZXhwaXJ5IHNlbGVjdGlvbiAoMiBkYXlzKSBpcyBjb25kaXRpb25hbGx5IHNldCBpbiBUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suY2hhbmdlUHJlc2V0XG5cdFx0XHRcdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxlbmd0aHMsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZm9yIG5vbi1leGlzdGluZyBwYWdlc1xuXHRcdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRuYW1lOiAnY3JlYXRlbGV2ZWwnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yib5bu65p2D6ZmQ77yaJywgJ+W7uueri+asiumZkO+8micpLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLmNyZWF0ZWxldmVsLFxuXHRcdFx0XHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZXZlbHMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHQvLyBGaWx0ZXIgVEUgYWx3YXlzLCBhbmQgYXV0b2NvbmZpcm1lZCBpbiBtYWluc3BhY2Vcblx0XHRcdFx0XHRcdFx0KGxldmVsKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGxldmVsLnZhbHVlICE9PSAndGVtcGxhdGVlZGl0b3InO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRuYW1lOiAnY3JlYXRlZXhwaXJ5Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e7iOatouaXtumXtO+8micsICfntYLmraLmmYLplpPvvJonKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZG9DdXN0b21FeHBpcnkoZXZlbnQudGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdC8vIGRlZmF1bHQgZXhwaXJ5IHNlbGVjdGlvbiAoaW5kZWZpbml0ZSkgaXMgY29uZGl0aW9uYWxseSBzZXQgaW4gVHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrLmNoYW5nZVByZXNldFxuXHRcdFx0XHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZW5ndGhzLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkMi5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnY2xvc2UnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDor7fmsYLkv53miqTpobXpnaLkuK3nmoTor7fmsYInLCAn5qiZ6KiY6KuL5rGC5L+d6K236aCB6Z2i5Lit55qE6KuL5rGCJyksXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdG5hbWU6ICdwcm90ZWN0UmVhc29uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnkIbnlLHvvIjkv53miqTml6Xlv5fvvInvvJonLCAn55CG55Sx77yI5L+d6K235pel6KqM77yJ77yaJyksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoIW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgfHwgbXcuY29uZmlnLmdldCgnd2dQYWdlQ29udGVudE1vZGVsJykgPT09ICdTY3JpYnVudG8nKSB7XG5cdFx0XHRcdFx0Ly8gdGFnZ2luZyBpc24ndCByZWxldmFudCBmb3Igbm9uLWV4aXN0aW5nIG9yIG1vZHVsZSBwYWdlc1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRjYXNlICd0YWcnOlxuXHRcdFx0XHRmaWVsZDEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qCH6K6w6YCJ6aG5JywgJ+aomeiomOmBuOmghScpLFxuXHRcdFx0XHRcdG5hbWU6ICdmaWVsZDEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZmllbGQxLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bmFtZTogJ2N1cnJlbnRwcm90Jyxcblx0XHRcdFx0XHRsYWJlbDogJyAnLFxuXHRcdFx0XHR9KTsgLy8gaG9sZHMgdGhlIGN1cnJlbnQgcHJvdGVjdGlvbiBsZXZlbCwgYXMgZmlsbGVkIG91dCBieSB0aGUgYXN5bmMgY2FsbGJhY2tcblx0XHRcdFx0ZmllbGQxLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bmFtZTogJ2hhc3Byb3RlY3Rsb2cnLFxuXHRcdFx0XHRcdGxhYmVsOiAnICcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRuYW1lOiAndGFndHlwZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCJ5oup5L+d5oqk5qih5p2/77yaJywgJ+mBuOaTh+S/neitt+aooeadv++8micpLFxuXHRcdFx0XHRcdGxpc3Q6IFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVGFncyxcblx0XHRcdFx0XHRldmVudDogVHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMudGFndHlwZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZpZWxkMS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnc21hbGwnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkvb/nlKjlm77moIfvvIhzbWFsbD15ZXPvvIknLCAn5L2/55So5ZyW56S677yIc21hbGw9eWVz77yJJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5bCG57uZ5qih5p2/5Yqg5LiKfHNtYWxsPXllc+WPguaVsO+8jOaYvuekuuaIkOWPs+S4iuinkueahOS4gOaKiuaMgumUgeOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+Wwh+e1puaooeadv+WKoOS4inxzbWFsbD15ZXPlj4PmlbjvvIzpoa/npLrmiJDlj7PkuIrop5LnmoTkuIDmiormjpvpjpbjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnbm9pbmNsdWRlJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn55SoJmx0O25vaW5jbHVkZSZndDvljIXoo7nkv53miqTmqKHmnb8nLCAn55SoJmx0O25vaW5jbHVkZSZndDvljIXoo7nkv53orbfmqKHmnb8nKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflsIbkv53miqTmqKHmnb/ljIXoo7nlnKgmbHQ7bm9pbmNsdWRlJmd0O+S4rScsXG5cdFx0XHRcdFx0XHRcdFx0J+Wwh+S/neitt+aooeadv+WMheijueWcqCZsdDtub2luY2x1ZGUmZ3Q75LitJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAxMCxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdzaG93ZXhwaXJ5Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Zyo5qih5p2/5pi+56S65Yiw5pyf5pe26Ze0JywgJ+WcqOaooeadv+mhr+ekuuWIsOacn+aZgumWkycpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+Wwhue7meaooeadv+WKoOS4inxleHBpcnnlj4LmlbAnLCAn5bCH57Wm5qih5p2/5Yqg5LiKfGV4cGlyeeWPg+aVuCcpLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRoaWRkZW46IGUudGFyZ2V0LnZhbHVlcyA9PT0gJ3RhZycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JlcXVlc3QnOlxuXHRcdFx0XHRmaWVsZF9wcmVzZXQgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L+d5oqk57G75Z6LJywgJ+S/neitt+mhnuWIpScpLFxuXHRcdFx0XHRcdG5hbWU6ICdmaWVsZF9wcmVzZXQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZmllbGRfcHJlc2V0LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0bmFtZTogJ2NhdGVnb3J5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnsbvlnovlkoznkIbnlLHvvJonLCAn6aGe5Yil5ZKM55CG55Sx77yaJyksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5jaGFuZ2VQcmVzZXQsXG5cdFx0XHRcdFx0bGlzdDogbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKVxuXHRcdFx0XHRcdFx0PyBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblR5cGVzXG5cdFx0XHRcdFx0XHQ6IFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVHlwZXNDcmVhdGUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDEgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdHR5cGU6ICdmaWVsZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YCJ6aG5JywgJ+mBuOmghScpLFxuXHRcdFx0XHRcdG5hbWU6ICdmaWVsZDEnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZmllbGQxLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bmFtZTogJ2N1cnJlbnRwcm90Jyxcblx0XHRcdFx0XHRsYWJlbDogJyAnLFxuXHRcdFx0XHR9KTsgLy8gaG9sZHMgdGhlIGN1cnJlbnQgcHJvdGVjdGlvbiBsZXZlbCwgYXMgZmlsbGVkIG91dCBieSB0aGUgYXN5bmMgY2FsbGJhY2tcblx0XHRcdFx0ZmllbGQxLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0bmFtZTogJ2hhc3Byb3RlY3Rsb2cnLFxuXHRcdFx0XHRcdGxhYmVsOiAnICcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdFx0XHRuYW1lOiAnZXhwaXJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml7bplb/vvJonLCAn5pmC6ZW377yaJyksXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogJycsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuLTml7YnLCAn6Ieo5pmCJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAndGVtcG9yYXJ5Jyxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5rC45LmFJyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdpbmZpbml0eScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWVsZDEuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnLFxuXHRcdFx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0XHRcdGxhYmVsOiAn55CG55Sx77yaJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn6L+Z546p5oSP5YS/6KKr5rW36LGa5ZCD5o6J5LqG77yBJywgJ+mAmeeOqeaEj+WFkuiiq+a1t+ixmuWQg+aOieS6hu+8gScpLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVwcm90ZWN0Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRsZXQgb2xkZmllbGQ7XG5cdFx0aWYgKGZpZWxkX3ByZXNldCkge1xuXHRcdFx0W29sZGZpZWxkXSA9ICQoZS50YXJnZXQuZm9ybSkuZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3ByZXNldFwiXScpO1xuXHRcdFx0b2xkZmllbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZmllbGRfcHJlc2V0LnJlbmRlcigpLCBvbGRmaWVsZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoZS50YXJnZXQuZm9ybSkuZmluZCgnZmllbGRzZXRbbmFtZT1cImZpZWxkX3ByZXNldFwiXScpLmNzcygnZGlzcGxheScsICdub25lJyk7XG5cdFx0fVxuXHRcdGlmIChmaWVsZDEpIHtcblx0XHRcdFtvbGRmaWVsZF0gPSAkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2ZpZWxkc2V0W25hbWU9XCJmaWVsZDFcIl0nKTtcblx0XHRcdG9sZGZpZWxkLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZpZWxkMS5yZW5kZXIoKSwgb2xkZmllbGQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2ZpZWxkc2V0W25hbWU9XCJmaWVsZDFcIl0nKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXHRcdH1cblx0XHRpZiAoZmllbGQyKSB7XG5cdFx0XHRbb2xkZmllbGRdID0gJChlLnRhcmdldC5mb3JtKS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGQyXCJdJyk7XG5cdFx0XHRvbGRmaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmaWVsZDIucmVuZGVyKCksIG9sZGZpZWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JChlLnRhcmdldC5mb3JtKS5maW5kKCdmaWVsZHNldFtuYW1lPVwiZmllbGQyXCJdJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcblx0XHR9XG5cdFx0aWYgKGUudGFyZ2V0LnZhbHVlcyA9PT0gJ3Byb3RlY3QnKSB7XG5cdFx0XHQvLyBmYWtlIGEgY2hhbmdlIGV2ZW50IG9uIHRoZSBwcmVzZXQgZHJvcGRvd25cblx0XHRcdGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuXHRcdFx0ZXZ0LmluaXRFdmVudCgnY2hhbmdlJywgdHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmNhdGVnb3J5LmRpc3BhdGNoRXZlbnQoZXZ0KTtcblx0XHRcdC8vIHJlZHVjZSB2ZXJ0aWNhbCBoZWlnaHQgb2YgZGlhbG9nXG5cdFx0XHQkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2ZpZWxkc2V0W25hbWU9XCJmaWVsZDJcIl0gc2VsZWN0JykucGFyZW50KCkuY3NzKHtcblx0XHRcdFx0ZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG5cdFx0XHRcdG1hcmdpblJpZ2h0OiAnMC41ZW0nLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIHJlLWFkZCBwcm90ZWN0aW9uIGxldmVsIGFuZCBsb2cgaW5mbywgaWYgaXQncyBhdmFpbGFibGVcblx0XHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suc2hvd0xvZ0FuZEN1cnJlbnRQcm90ZWN0SW5mbygpO1xuXHR9O1xuXHQvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYmF0Y2hwcm90ZWN0IGFzIHdlbGxcblx0VHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMgPSB7XG5cdFx0ZWRpdG1vZGlmeTogKGUpID0+IHtcblx0XHRcdGUudGFyZ2V0LmZvcm0uZWRpdGxldmVsLmRpc2FibGVkID0gIWUudGFyZ2V0LmNoZWNrZWQ7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmVkaXRleHBpcnkuZGlzYWJsZWQgPSAhZS50YXJnZXQuY2hlY2tlZCB8fCBlLnRhcmdldC5mb3JtLmVkaXRsZXZlbC52YWx1ZSA9PT0gJ2FsbCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmVkaXRsZXZlbC5zdHlsZS5jb2xvciA9IGUudGFyZ2V0LmNoZWNrZWQgPyAnJyA6ICd0cmFuc3BhcmVudCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmVkaXRleHBpcnkuc3R5bGUuY29sb3IgPSBlLnRhcmdldC5jaGVja2VkID8gJycgOiAndHJhbnNwYXJlbnQnO1xuXHRcdH0sXG5cdFx0ZWRpdGxldmVsOiAoZSkgPT4ge1xuXHRcdFx0ZS50YXJnZXQuZm9ybS5lZGl0ZXhwaXJ5LmRpc2FibGVkID0gZS50YXJnZXQudmFsdWUgPT09ICdhbGwnO1xuXHRcdH0sXG5cdFx0bW92ZW1vZGlmeTogKGUpID0+IHtcblx0XHRcdC8vIHN5bmMgbW92ZSBzZXR0aW5ncyB3aXRoIGVkaXQgc2V0dGluZ3MgaWYgYXBwbGljYWJsZVxuXHRcdFx0aWYgKGUudGFyZ2V0LmZvcm0ubW92ZWxldmVsLmRpc2FibGVkICYmICFlLnRhcmdldC5mb3JtLmVkaXRsZXZlbC5kaXNhYmxlZCkge1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVsZXZlbC52YWx1ZSA9IGUudGFyZ2V0LmZvcm0uZWRpdGxldmVsLnZhbHVlO1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVleHBpcnkudmFsdWUgPSBlLnRhcmdldC5mb3JtLmVkaXRleHBpcnkudmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKGUudGFyZ2V0LmZvcm0uZWRpdGxldmVsLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0ubW92ZWxldmVsLnZhbHVlID0gJ3N5c29wJztcblx0XHRcdFx0ZS50YXJnZXQuZm9ybS5tb3ZlZXhwaXJ5LnZhbHVlID0gJ2luZmluaXR5Jztcblx0XHRcdH1cblx0XHRcdGUudGFyZ2V0LmZvcm0ubW92ZWxldmVsLmRpc2FibGVkID0gIWUudGFyZ2V0LmNoZWNrZWQ7XG5cdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVleHBpcnkuZGlzYWJsZWQgPSAhZS50YXJnZXQuY2hlY2tlZCB8fCBlLnRhcmdldC5mb3JtLm1vdmVsZXZlbC52YWx1ZSA9PT0gJ2FsbCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVsZXZlbC5zdHlsZS5jb2xvciA9IGUudGFyZ2V0LmNoZWNrZWQgPyAnJyA6ICd0cmFuc3BhcmVudCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLm1vdmVleHBpcnkuc3R5bGUuY29sb3IgPSBlLnRhcmdldC5jaGVja2VkID8gJycgOiAndHJhbnNwYXJlbnQnO1xuXHRcdH0sXG5cdFx0bW92ZWxldmVsOiAoZSkgPT4ge1xuXHRcdFx0ZS50YXJnZXQuZm9ybS5tb3ZlZXhwaXJ5LmRpc2FibGVkID0gZS50YXJnZXQudmFsdWUgPT09ICdhbGwnO1xuXHRcdH0sXG5cdFx0Y3JlYXRlbGV2ZWw6IChlKSA9PiB7XG5cdFx0XHRlLnRhcmdldC5mb3JtLmNyZWF0ZWV4cGlyeS5kaXNhYmxlZCA9IGUudGFyZ2V0LnZhbHVlID09PSAnYWxsJztcblx0XHR9LFxuXHRcdHRhZ3R5cGU6IChlKSA9PiB7XG5cdFx0XHRlLnRhcmdldC5mb3JtLnNtYWxsLmRpc2FibGVkID0gZS50YXJnZXQudmFsdWUgPT09ICdub25lJyB8fCBlLnRhcmdldC52YWx1ZSA9PT0gJ25vb3AnO1xuXHRcdFx0ZS50YXJnZXQuZm9ybS5ub2luY2x1ZGUuZGlzYWJsZWQgPSBlLnRhcmdldC52YWx1ZSA9PT0gJ25vbmUnIHx8IGUudGFyZ2V0LnZhbHVlID09PSAnbm9vcCc7XG5cdFx0XHRlLnRhcmdldC5mb3JtLnNob3dleHBpcnkuZGlzYWJsZWQgPSBlLnRhcmdldC52YWx1ZSA9PT0gJ25vbmUnIHx8IGUudGFyZ2V0LnZhbHVlID09PSAnbm9vcCc7XG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS5wcm90ZWN0LmRvQ3VzdG9tRXhwaXJ5ID0gKHRhcmdldCkgPT4ge1xuXHRcdGNvbnN0IGN1c3RvbSA9IHByb21wdChcblx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J+i+k+WFpeiHquWumuS5iee7iOatouaXtumXtOOAglxcbuaCqOWPr+S7peS9v+eUqOebuOWvueaXtumXtO+8jOWmguKAnDEgbWludXRl4oCd5oiW4oCcMTkgZGF5c+KAne+8jOaIlue7neWvueaXtumXtOKAnHl5eXltbWRkaGhtbeKAne+8iOWmguKAnDIwMDYwMjAxMTQwNeKAneaYrzIwMDblubQwMuaciDAx5pelMTTvvJowNe+8iFVUQ++8ie+8iScsXG5cdFx0XHRcdCfovLjlhaXoh6roqILntYLmraLmmYLplpPjgIJcXG7mgqjlj6/ku6Xkvb/nlKjnm7jlsI3mmYLplpPvvIzlpoLjgIwxIG1pbnV0ZeOAjeaIluOAjDE5IGRheXPjgI3vvIzmiJbntZXlsI3mmYLplpPjgIx5eXl5bW1kZGhobW3jgI3vvIjlpoLjgIwyMDA2MDIwMTE0MDXjgI3mmK8yMDA25bm0MDLmnIgwMeaXpTE077yaMDXvvIhVVEPvvInvvIknXG5cdFx0XHQpLFxuXHRcdFx0Jydcblx0XHQpO1xuXHRcdGlmIChjdXN0b20pIHtcblx0XHRcdGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXHRcdFx0b3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBjdXN0b20pO1xuXHRcdFx0b3B0aW9uLnRleHRDb250ZW50ID0gY3VzdG9tO1xuXHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKG9wdGlvbik7XG5cdFx0XHR0YXJnZXQudmFsdWUgPSBjdXN0b207XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5zZWxlY3RlZEluZGV4ID0gMDtcblx0XHR9XG5cdH07XG5cdC8vIE5PVEU6IFRoaXMgbGlzdCBpcyB1c2VkIGJ5IGJhdGNocHJvdGVjdCBhcyB3ZWxsXG5cdFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uTGV2ZWxzID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiAn5YWo6YOoJyxcblx0XHRcdHZhbHVlOiAnYWxsJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S7heWFgeiuuOiHquWKqOehruiupOeUqOaItycsICflg4XlhYHoqLHoh6rli5Xnorroqo3kvb/nlKjogIUnKSxcblx0XHRcdHZhbHVlOiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfku4XmqKHmnb/nvJbovpHlkZjlkoznrqHnkIblkZgnLCAn5YOF5qih5p2/57eo6Lyv5ZOh5ZKM566h55CG5ZOhJyksXG5cdFx0XHR2YWx1ZTogJ3RlbXBsYXRlZWRpdG9yJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S7heeuoeeQhuWRmCcsICflg4XnrqHnkIblk6EnKSxcblx0XHRcdHZhbHVlOiAnc3lzb3AnLFxuXHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfku4XlhYHorrjmoaPmoYjnkIbkuovlkZgnLCAn5YOF5YWB6Kix5qqU5qGI55CG5LqL5ZOhJyksXG5cdFx0XHR2YWx1ZTogJ29mZmljaWFscHJvdGVjdGVkJyxcblx0XHR9LFxuXHRdO1xuXHQvLyBkZWZhdWx0IGV4cGlyeSBzZWxlY3Rpb24gaXMgY29uZGl0aW9uYWxseSBzZXQgaW4gVHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrLmNoYW5nZVByZXNldFxuXHQvLyBOT1RFOiBUaGlzIGxpc3QgaXMgdXNlZCBieSBiYXRjaHByb3RlY3QgYXMgd2VsbFxuXHRUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxlbmd0aHMgPSBbXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICcx5aSpJyxcblx0XHRcdHZhbHVlOiAnMSBkYXknLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICcz5aSpJyxcblx0XHRcdHZhbHVlOiAnMyBkYXlzJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJzHlkagnLCAnMemAsScpLFxuXHRcdFx0dmFsdWU6ICcxIHdlZWsnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnMuWRqCcsICcy6YCxJyksXG5cdFx0XHR2YWx1ZTogJzIgd2Vla3MnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnMeS4quaciCcsICcx5YCL5pyIJyksXG5cdFx0XHR2YWx1ZTogJzEgbW9udGgnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnM+S4quaciCcsICcz5YCL5pyIJyksXG5cdFx0XHR2YWx1ZTogJzMgbW9udGhzJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJzbkuKrmnIgnLCAnNuWAi+aciCcpLFxuXHRcdFx0dmFsdWU6ICc2IG1vbnRocycsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogJzHlubQnLFxuXHRcdFx0dmFsdWU6ICcxIHllYXInLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5peg6ZmQ5pyfJywgJ+eEoemZkOacnycpLFxuXHRcdFx0dmFsdWU6ICdpbmZpbml0eScsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnigKbigKYnLCAn6Ieq6KiC4oCm4oCmJyksXG5cdFx0XHR2YWx1ZTogJ2N1c3RvbScsXG5cdFx0fSxcblx0XTtcblx0VHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25UeXBlc0FkbWluID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ino+mZpOS/neaKpCcsICfop6PpmaTkv53orbcnKSxcblx0XHRcdHZhbHVlOiAndW5wcm90ZWN0Jyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WFqOS/neaKpCcsICflhajkv53orbcnKSxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W4uOinhO+8iOWFqO+8iScsICfluLjopo/vvIjlhajvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXByb3RlY3RlZCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuonorq7jgIHnvJbovpHmiJjvvIjlhajvvIknLCAn54it6K2w44CB57eo6Lyv5oiw77yI5YWo77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1kaXNwdXRlJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmqKHmnb/kv53miqQnLCAn5qih5p2/5L+d6K23JyksXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpq5jpo47pmanmqKHmnb/vvIjmqKHmnb/vvIknLCAn6auY6aKo6Zqq5qih5p2/77yI5qih5p2/77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC10ZW1wbGF0ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Y2K5L+d5oqkJywgJ+WNiuS/neittycpLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bi46KeE77yI5Y2K77yJJywgJ+W4uOimj++8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS1wcm90ZWN0ZWQnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5oyB57ut56C05Z2P77yI5Y2K77yJJywgJ+aMgee6jOegtOWjnu+8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS12YW5kYWxpc20nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6L+d5Y+N55Sf6ICF5Lyg6K6w5p2h5L6L77yI5Y2K77yJJywgJ+mBleWPjeeUn+iAheWCs+iomOaineS+i++8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS1ibHAnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YKA5YSh56C05Z2P77yI5Y2K77yJJywgJ+WCgOWEoeegtOWjnu+8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS1zb2NrJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mrmOmjjumZqeaooeadv++8iOWNiu+8iScsICfpq5jpoqjpmqrmqKHmnb/vvIjljYrvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXNlbWktdGVtcGxhdGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6KKr5bCB56aB55So5oi35rul55So6K6o6K666aG177yI5Y2K77yJJywgJ+iiq+WwgeemgeS9v+eUqOiAhea/q+eUqOiojuirlumgge+8iOWNiu+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc2VtaS11c2VydGFsaycsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56e75Yqo5L+d5oqkJywgJ+enu+WLleS/neittycpLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bi46KeE77yI56e75Yqo77yJJywgJ+W4uOimj++8iOenu+WLle+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtbW92ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfkuonorq7jgIHnp7vliqjmiJjvvIjnp7vliqjvvIknLCAn54it6K2w44CB56e75YuV5oiw77yI56e75YuV77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1tb3ZlLWRpc3B1dGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn56e75Yqo56C05Z2P77yI56e75Yqo77yJJywgJ+enu+WLleegtOWjnu+8iOenu+WLle+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtbW92ZS12YW5kYWxpc20nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6auY6aOO6Zmp6aG16Z2i77yI56e75Yqo77yJJywgJ+mrmOmiqOmaqumggemdou+8iOenu+WLle+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtbW92ZS1pbmRlZicsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdF0uZmlsdGVyKFxuXHRcdChcblx0XHRcdC8vIEZpbHRlciBmb3IgdGVtcGxhdGVzXG5cdFx0XHR7bGFiZWx9XG5cdFx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNUZW1wbGF0ZSB8fCAobGFiZWwgIT09ICfmqKHmnb/kv53miqQnICYmIGxhYmVsICE9PSAn5qih5p2/5L+d6K23Jyk7XG5cdFx0fVxuXHQpO1xuXHRUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblR5cGVzQ3JlYXRlT25seSA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnmb3nurjkv53miqQnLCAn55m957SZ5L+d6K23JyksXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfluLjop4TvvIjnmb3nurjvvIknLCAn5bi46KaP77yI55m957SZ77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1jcmVhdGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5aSa5qyh6YeN5aSN5Yib5bu677yI55m957q477yJJywgJ+WkmuasoemHjeikh+W7uueri++8iOeZvee0me+8iScpLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtY3JlYXRlLXJlcGVhdCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmjIHnu63noLTlnY/vvIjnmb3nurjvvIknLCAn5oyB57qM56C05aOe77yI55m957SZ77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1jcmVhdGUtdmFuZGFsaXNtJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W3suWwgeemgeeUqOaIt+eahOeUqOaIt+mhte+8iOeZvee6uO+8iScsICflt7LlsIHnpoHkvb/nlKjogIXnmoTkvb/nlKjogIXpoIHvvIjnmb3ntJnvvIknKSxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLWNyZWF0ZS11c2VycGFnZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVHlwZXMgPSBbXG5cdFx0Li4uVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25UeXBlc0FkbWluLFxuXHRcdC4uLlR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVHlwZXNDcmVhdGVPbmx5LFxuXHRdO1xuXHRUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblR5cGVzQ3JlYXRlID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiAn6Kej6Zmk5L+d5oqkJyxcblx0XHRcdHZhbHVlOiAndW5wcm90ZWN0Jyxcblx0XHR9LFxuXHRcdC4uLlR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uVHlwZXNDcmVhdGVPbmx5LFxuXHRdO1xuXHQvLyBOT1RJQ0U6IGtlZXAgdGhpcyBzeW5jaGVkIHdpdGggW1tNZWRpYVdpa2k6UHJvdGVjdC1kcm9wZG93bl1dXG5cdC8vIGV4cGlyeSB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0c1xuXHRUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblByZXNldHNJbmZvID0ge1xuXHRcdCdwcC1wcm90ZWN0ZWQnOiB7XG5cdFx0XHRlZGl0OiAnc3lzb3AnLFxuXHRcdFx0bW92ZTogJ3N5c29wJyxcblx0XHRcdHJlYXNvbjogbnVsbCxcblx0XHR9LFxuXHRcdCdwcC1kaXNwdXRlJzoge1xuXHRcdFx0ZWRpdDogJ3N5c29wJyxcblx0XHRcdG1vdmU6ICdzeXNvcCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn57yW6L6R5oiYJywgJ+e3qOi8r+aIsCcpLFxuXHRcdH0sXG5cdFx0J3BwLXRlbXBsYXRlJzoge1xuXHRcdFx0ZWRpdDogJ3RlbXBsYXRlZWRpdG9yJyxcblx0XHRcdG1vdmU6ICd0ZW1wbGF0ZWVkaXRvcicsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygnW1tMSUI6SFJUfOmrmOmjjumZqeaooeadv11dJywgJ1tbTElCOkhSVHzpq5jpoqjpmqrmqKHmnb9dXScpLFxuXHRcdFx0dGVtcGxhdGU6ICdub29wJyxcblx0XHR9LFxuXHRcdCdwcC12YW5kYWxpc20nOiB7XG5cdFx0XHRlZGl0OiAnc3lzb3AnLFxuXHRcdFx0bW92ZTogJ3N5c29wJyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfooqvoh6rliqjnoa7orqTnlKjmiLfnoLTlnY8nLCAn6KKr6Ieq5YuV56K66KqN5L2/55So6ICF56C05aOeJyksXG5cdFx0fSxcblx0XHQncHAtc29jayc6IHtcblx0XHRcdGVkaXQ6ICdzeXNvcCcsXG5cdFx0XHRtb3ZlOiAnc3lzb3AnLFxuXHRcdFx0cmVhc29uOiB3aW5kb3cud2dVTFMoJ+aMgee7reeahOWCgOWEoeegtOWdjycsICfmjIHnuoznmoTlgoDlhKHnoLTlo54nKSxcblx0XHR9LFxuXHRcdCdwcC1zZW1pLXZhbmRhbGlzbSc6IHtcblx0XHRcdGVkaXQ6ICdhdXRvY29uZmlybWVkJyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfooqvmlrDnlKjmiLfnoLTlnY8nLCAn6KKr5paw5L2/55So6ICF56C05aOeJyksXG5cdFx0XHR0ZW1wbGF0ZTogJ3BwLXZhbmRhbGlzbScsXG5cdFx0fSxcblx0XHQncHAtc2VtaS1ibHAnOiB7XG5cdFx0XHRlZGl0OiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn5paw55So5oi36L+d5Y+N55Sf6ICF5Lyg6K6w5p2h5L6LJywgJ+aWsOS9v+eUqOiAhemBleWPjeeUn+iAheWCs+iomOaineS+iycpLFxuXHRcdH0sXG5cdFx0J3BwLXNlbWktdXNlcnRhbGsnOiB7XG5cdFx0XHRlZGl0OiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn6KKr5bCB56aB55So5oi35rul55So5YW26K6o6K666aG1JywgJ+iiq+WwgeemgeS9v+eUqOiAhea/q+eUqOWFtuiojuirlumggScpLFxuXHRcdH0sXG5cdFx0J3BwLXNlbWktdGVtcGxhdGUnOiB7XG5cdFx0XHQvLyByZW1vdmVkIGZvciBub3dcblx0XHRcdGVkaXQ6ICdhdXRvY29uZmlybWVkJyxcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCdbW0xJQjpIUlR86auY6aOO6Zmp5qih5p2/XV0nLCAnW1tMSUI6SFJUfOmrmOmiqOmaquaooeadv11dJyksXG5cdFx0XHR0ZW1wbGF0ZTogJ25vb3AnLFxuXHRcdH0sXG5cdFx0J3BwLXNlbWktc29jayc6IHtcblx0XHRcdGVkaXQ6ICdhdXRvY29uZmlybWVkJyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfmjIHnu63nmoTlgoDlhKHnoLTlnY8nLCAn5oyB57qM55qE5YKA5YSh56C05aOeJyksXG5cdFx0XHR0ZW1wbGF0ZTogJ3BwLXNvY2snLFxuXHRcdH0sXG5cdFx0J3BwLXNlbWktcHJvdGVjdGVkJzoge1xuXHRcdFx0ZWRpdDogJ2F1dG9jb25maXJtZWQnLFxuXHRcdFx0cmVhc29uOiBudWxsLFxuXHRcdFx0dGVtcGxhdGU6ICdwcC1wcm90ZWN0ZWQnLFxuXHRcdH0sXG5cdFx0J3BwLW1vdmUnOiB7XG5cdFx0XHRtb3ZlOiAnc3lzb3AnLFxuXHRcdFx0cmVhc29uOiBudWxsLFxuXHRcdH0sXG5cdFx0J3BwLW1vdmUtZGlzcHV0ZSc6IHtcblx0XHRcdG1vdmU6ICdzeXNvcCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn6aG16Z2i56e75Yqo5oiYJywgJ+mggemdouenu+WLleaIsCcpLFxuXHRcdH0sXG5cdFx0J3BwLW1vdmUtdmFuZGFsaXNtJzoge1xuXHRcdFx0bW92ZTogJ3N5c29wJyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfnp7vliqjnoLTlnY8nLCAn56e75YuV56C05aOeJyksXG5cdFx0fSxcblx0XHQncHAtbW92ZS1pbmRlZic6IHtcblx0XHRcdG1vdmU6ICdzeXNvcCcsXG5cdFx0XHRleHBpcnk6ICdpbmZpbml0eScsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn6auY6aOO6Zmp6aG16Z2iJywgJ+mrmOmiqOmaqumggemdoicpLFxuXHRcdH0sXG5cdFx0dW5wcm90ZWN0OiB7XG5cdFx0XHRlZGl0OiAnYWxsJyxcblx0XHRcdG1vdmU6ICdhbGwnLFxuXHRcdFx0Y3JlYXRlOiAnYWxsJyxcblx0XHRcdHJlYXNvbjogbnVsbCxcblx0XHRcdHRlbXBsYXRlOiAnbm9uZScsXG5cdFx0fSxcblx0XHQncHAtY3JlYXRlJzoge1xuXHRcdFx0Y3JlYXRlOiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0XHRyZWFzb246IG51bGwsXG5cdFx0fSxcblx0XHQncHAtY3JlYXRlLXJlcGVhdCc6IHtcblx0XHRcdGNyZWF0ZTogJ2F1dG9jb25maXJtZWQnLFxuXHRcdFx0cmVhc29uOiB3aW5kb3cud2dVTFMoJ+WkmuasoemHjeWkjeWIm+W7uicsICflpJrmrKHph43opIflu7rnq4snKSxcblx0XHR9LFxuXHRcdCdwcC1jcmVhdGUtdmFuZGFsaXNtJzoge1xuXHRcdFx0Y3JlYXRlOiAnYXV0b2NvbmZpcm1lZCcsXG5cdFx0XHRyZWFzb246IHdpbmRvdy53Z1VMUygn6KKr5paw55So5oi356C05Z2PJywgJ+iiq+aWsOS9v+eUqOiAheegtOWjnicpLFxuXHRcdH0sXG5cdFx0J3BwLWNyZWF0ZS11c2VycGFnZSc6IHtcblx0XHRcdGNyZWF0ZTogJ3N5c29wJyxcblx0XHRcdGV4cGlyeTogJ2luZmluaXR5Jyxcblx0XHRcdHJlYXNvbjogd2luZG93LndnVUxTKCfooqvmsLjkuYXlsIHnpoHnmoTnlKjmiLfpobUnLCAn6KKr5rC45LmF5bCB56aB55qE5L2/55So6ICF6aCB6Z2iJyksXG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25UYWdzID0gW1xuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aXoO+8iOenu+mZpOeOsOacieaooeadv++8iScsICfnhKHvvIjnp7vpmaTnj77mnInmqKHmnb/vvIknKSxcblx0XHRcdHZhbHVlOiAnbm9uZScsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml6DvvIjkuI3np7vpmaTnjrDmnInmqKHmnb/vvIknLCAn54Sh77yI5LiN56e76Zmk54++5pyJ5qih5p2/77yJJyksXG5cdFx0XHR2YWx1ZTogJ25vb3AnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6ICfpgJrnlKjmqKHmnb8nLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e3BwLWRpc3B1dGV9fTogJHt3aW5kb3cud2dVTFMoJ+S6ieiuricsICfniK3orbAnKX1gLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtZGlzcHV0ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7cHAtdmFuZGFsaXNtfX06ICR7d2luZG93LndnVUxTKCfnoLTlnY8nLCAn56C05aOeJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXZhbmRhbGlzbScsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJ3t7cHAtc29ja319OiDlgoDlhKEnLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtc29jaycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7cHAtdGVtcGxhdGV9fTogJHt3aW5kb3cud2dVTFMoJ+mrmOmjjumZqeaooeadvycsICfpq5jpoqjpmqrmqKHmnb8nKX1gLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtdGVtcGxhdGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e3BwLXByb3RlY3RlZH19OiAke3dpbmRvdy53Z1VMUygn5bi46KeEJywgJ+W4uOimjycpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1wcm90ZWN0ZWQnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WNiuS/neaKpOaooeadvycsICfljYrkv53orbfmqKHmnb8nKSxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1zZW1pLXVzZXJ0YWxrfX06ICR7d2luZG93LndnVUxTKCflsIHnpoHnmoTnlKjmiLcnLCAn5bCB56aB55qE5L2/55So6ICFJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXNlbWktdXNlcnRhbGsnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e3BwLXNlbWktYmxwfX06ICR7d2luZG93LndnVUxTKCfnlJ/ogIXkvKDorrAnLCAn55Sf6ICF5YKz6KiYJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXNlbWktYmxwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1zZW1pLWluZGVmfX06ICR7d2luZG93LndnVUxTKCfplb/mnJ8nLCAn6ZW35pyfJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLXNlbWktaW5kZWYnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+enu+WKqOS/neaKpOaooeadvycsICfnp7vli5Xkv53orbfmqKHmnb8nKSxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1tb3ZlLWRpc3B1dGV9fTogJHt3aW5kb3cud2dVTFMoJ+S6ieiuricsICfniK3orbAnKX1gLFxuXHRcdFx0XHRcdHZhbHVlOiAncHAtbW92ZS1kaXNwdXRlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1tb3ZlLXZhbmRhbGlzbX19OiAke3dpbmRvdy53Z1VMUygn56C05Z2PJywgJ+egtOWjnicpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1tb3ZlLXZhbmRhbGlzbScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7cHAtbW92ZS1pbmRlZn19OiAke3dpbmRvdy53Z1VMUygn6ZW/5pyfJywgJ+mVt+acnycpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdwcC1tb3ZlLWluZGVmJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3twcC1tb3ZlfX06ICR7d2luZG93LndnVUxTKCfluLjop4QnLCAn5bi46KaPJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ3BwLW1vdmUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2suY2hhbmdlUHJlc2V0ID0gKGUpID0+IHtcblx0XHRjb25zdCB7Zm9ybX0gPSBlLnRhcmdldDtcblx0XHRjb25zdCBhY3Rpb250eXBlcyA9IGZvcm0uYWN0aW9udHlwZTtcblx0XHRsZXQgYWN0aW9udHlwZTtcblx0XHRmb3IgKGNvbnN0IGFjdGlvbl90eXBlX3ZhbHVlIG9mIGFjdGlvbnR5cGVzKSB7XG5cdFx0XHRpZiAoIWFjdGlvbl90eXBlX3ZhbHVlLmNoZWNrZWQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRhY3Rpb250eXBlID0gYWN0aW9uX3R5cGVfdmFsdWUudmFsdWVzO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmIChhY3Rpb250eXBlID09PSAncHJvdGVjdCcpIHtcblx0XHRcdC8vIGFjdHVhbGx5IHByb3RlY3RpbmcgdGhlIHBhZ2Vcblx0XHRcdGNvbnN0IGl0ZW0gPSBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvblByZXNldHNJbmZvW2Zvcm0uY2F0ZWdvcnkudmFsdWVdO1xuXHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdFx0aWYgKGl0ZW0uZWRpdCkge1xuXHRcdFx0XHRcdGZvcm0uZWRpdG1vZGlmeS5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5lZGl0bW9kaWZ5KHtcblx0XHRcdFx0XHRcdHRhcmdldDogZm9ybS5lZGl0bW9kaWZ5LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGZvcm0uZWRpdGxldmVsLnZhbHVlID0gaXRlbS5lZGl0O1xuXHRcdFx0XHRcdFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLmVkaXRsZXZlbCh7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGZvcm0uZWRpdGxldmVsLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm0uZWRpdG1vZGlmeS5jaGVja2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMuZWRpdG1vZGlmeSh7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGZvcm0uZWRpdG1vZGlmeSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaXRlbS5tb3ZlKSB7XG5cdFx0XHRcdFx0Zm9ybS5tb3ZlbW9kaWZ5LmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLm1vdmVtb2RpZnkoe1xuXHRcdFx0XHRcdFx0dGFyZ2V0OiBmb3JtLm1vdmVtb2RpZnksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9ybS5tb3ZlbGV2ZWwudmFsdWUgPSBpdGVtLm1vdmU7XG5cdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMubW92ZWxldmVsKHtcblx0XHRcdFx0XHRcdHRhcmdldDogZm9ybS5tb3ZlbGV2ZWwsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybS5tb3ZlbW9kaWZ5LmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5tb3ZlbW9kaWZ5KHtcblx0XHRcdFx0XHRcdHRhcmdldDogZm9ybS5tb3ZlbW9kaWZ5LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvcm0uZWRpdGV4cGlyeS52YWx1ZSA9IGl0ZW0uZXhwaXJ5IHx8ICcxIHdlZWsnO1xuXHRcdFx0XHRmb3JtLm1vdmVleHBpcnkudmFsdWUgPSBpdGVtLmV4cGlyeSB8fCAnMSB3ZWVrJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpdGVtLmNyZWF0ZSkge1xuXHRcdFx0XHRcdGZvcm0uY3JlYXRlbGV2ZWwudmFsdWUgPSBpdGVtLmNyZWF0ZTtcblx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5jcmVhdGVsZXZlbCh7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGZvcm0uY3JlYXRlbGV2ZWwsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9ybS5jcmVhdGVleHBpcnkudmFsdWUgPSBpdGVtLmNyZWF0ZWV4cGlyeSB8fCAnMSB3ZWVrJztcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtLmNyZWF0ZWV4cGlyeS52YWx1ZSA9IGl0ZW0uZXhwaXJ5IHx8ICcxIHdlZWsnO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVhc29uRmllbGQgPSBhY3Rpb250eXBlID09PSAncHJvdGVjdCcgPyBmb3JtLnByb3RlY3RSZWFzb24gOiBmb3JtLnJlYXNvbjtcblx0XHRcdGlmIChpdGVtLnJlYXNvbikge1xuXHRcdFx0XHRyZWFzb25GaWVsZC52YWx1ZSA9IGl0ZW0ucmVhc29uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVhc29uRmllbGQudmFsdWUgPSAnJztcblx0XHRcdH1cblx0XHRcdC8vIHNvcnQgb3V0IHRhZ2dpbmcgb3B0aW9ucywgZGlzYWJsZWQgaWYgbm9uZXhpc3RlbnQgb3IgbHVhXG5cdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKSAmJiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VDb250ZW50TW9kZWwnKSAhPT0gJ1NjcmlidW50bycpIHtcblx0XHRcdFx0aWYgKGZvcm0uY2F0ZWdvcnkudmFsdWUgPT09ICd1bnByb3RlY3QnKSB7XG5cdFx0XHRcdFx0Zm9ybS50YWd0eXBlLnZhbHVlID0gJ25vbmUnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm0udGFndHlwZS52YWx1ZSA9IGl0ZW0udGVtcGxhdGUgPz8gZm9ybS5jYXRlZ29yeS52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy50YWd0eXBlKHtcblx0XHRcdFx0XHR0YXJnZXQ6IGZvcm0udGFndHlwZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmICgvdGVtcGxhdGUvLnRlc3QoZm9ybS5jYXRlZ29yeS52YWx1ZSkpIHtcblx0XHRcdFx0XHRmb3JtLm5vaW5jbHVkZS5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpICE9PSAxMCkge1xuXHRcdFx0XHRcdGZvcm0ubm9pbmNsdWRlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZm9ybS5jYXRlZ29yeS52YWx1ZSA9PT0gJ3VucHJvdGVjdCcpIHtcblx0XHRcdC8vIFJQUCByZXF1ZXN0XG5cdFx0XHRmb3JtLmV4cGlyeS52YWx1ZSA9ICcnO1xuXHRcdFx0Zm9ybS5leHBpcnkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtLmV4cGlyeS52YWx1ZSA9ICcnO1xuXHRcdFx0Zm9ybS5leHBpcnkuZGlzYWJsZWQgPSBmYWxzZTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUucHJvdGVjdC5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IGlucHV0ID0gTW9yZWJpdHMucXVpY2tGb3JtLmdldElucHV0RGF0YShmb3JtKTtcblx0XHRsZXQgdGFncGFyYW1zO1xuXHRcdGlmIChcblx0XHRcdGlucHV0LmFjdGlvbnR5cGUgPT09ICd0YWcnIHx8XG5cdFx0XHQoaW5wdXQuYWN0aW9udHlwZSA9PT0gJ3Byb3RlY3QnICYmXG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlQ29udGVudE1vZGVsJykgIT09ICdTY3JpYnVudG8nKVxuXHRcdCkge1xuXHRcdFx0dGFncGFyYW1zID0ge1xuXHRcdFx0XHR0YWc6IGlucHV0LnRhZ3R5cGUsXG5cdFx0XHRcdHJlYXNvbjpcblx0XHRcdFx0XHQoaW5wdXQudGFndHlwZSA9PT0gJ3BwLXByb3RlY3RlZCcgfHxcblx0XHRcdFx0XHRcdGlucHV0LnRhZ3R5cGUgPT09ICdwcC1zZW1pLXByb3RlY3RlZCcgfHxcblx0XHRcdFx0XHRcdGlucHV0LnRhZ3R5cGUgPT09ICdwcC1tb3ZlJykgJiZcblx0XHRcdFx0XHRpbnB1dC5wcm90ZWN0UmVhc29uXG5cdFx0XHRcdFx0XHQ/IGlucHV0LnByb3RlY3RSZWFzb25cblx0XHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0c2hvd2V4cGlyeTogaW5wdXQuYWN0aW9udHlwZSA9PT0gJ3Byb3RlY3QnID8gaW5wdXQuc2hvd2V4cGlyeSA6IG51bGwsXG5cdFx0XHRcdHNtYWxsOiBpbnB1dC5zbWFsbCxcblx0XHRcdFx0bm9pbmNsdWRlOiBpbnB1dC5ub2luY2x1ZGUsXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGlucHV0LmFjdGlvbnR5cGUgPT09ICdwcm90ZWN0Jykge1xuXHRcdFx0XHRpZiAoaW5wdXQuZWRpdG1vZGlmeSkge1xuXHRcdFx0XHRcdHRhZ3BhcmFtcy5leHBpcnkgPSBpbnB1dC5lZGl0ZXhwaXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlucHV0Lm1vdmVtb2RpZnkpIHtcblx0XHRcdFx0XHR0YWdwYXJhbXMuZXhwaXJ5ID0gaW5wdXQubW92ZWV4cGlyeTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBjbG9zZXBhcmFtcyA9IHt9O1xuXHRcdGlmIChpbnB1dC5jbG9zZSkge1xuXHRcdFx0aWYgKGlucHV0LmNhdGVnb3J5ID09PSAndW5wcm90ZWN0Jykge1xuXHRcdFx0XHRjbG9zZXBhcmFtcy50eXBlID0gJ3VucHJvdGVjdCc7XG5cdFx0XHR9IGVsc2UgaWYgKG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdFx0aWYgKGlucHV0LmVkaXRtb2RpZnkpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGlucHV0LmVkaXRsZXZlbCkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnb2ZmaWNpYWxwcm90ZWN0ZWQnOlxuXHRcdFx0XHRcdFx0XHRjbG9zZXBhcmFtcy50eXBlID0gJ29mZmljaWFscHJvdGVjdGVkJztcblx0XHRcdFx0XHRcdFx0Y2xvc2VwYXJhbXMuZXhwaXJ5ID0gaW5wdXQuZWRpdGV4cGlyeTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdyZXZpc2lvbnByb3RlY3RlZCc6XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLnR5cGUgPSAncmV2aXNpb25wcm90ZWN0ZWQnO1xuXHRcdFx0XHRcdFx0XHRjbG9zZXBhcmFtcy5leHBpcnkgPSBpbnB1dC5lZGl0ZXhwaXJ5O1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3N5c29wJzpcblx0XHRcdFx0XHRcdFx0Y2xvc2VwYXJhbXMudHlwZSA9ICdmdWxsJztcblx0XHRcdFx0XHRcdFx0Y2xvc2VwYXJhbXMuZXhwaXJ5ID0gaW5wdXQuZWRpdGV4cGlyeTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd0ZW1wbGF0ZWVkaXRvcic6XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLnR5cGUgPSAndGVtcCc7XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLmV4cGlyeSA9IGlucHV0LmVkaXRleHBpcnk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYXV0b2NvbmZpcm1lZCc6XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLnR5cGUgPSAnc2VtaSc7XG5cdFx0XHRcdFx0XHRcdGNsb3NlcGFyYW1zLmV4cGlyeSA9IGlucHV0LmVkaXRleHBpcnk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRpbnB1dC5tb3ZlbW9kaWZ5ICYmXG5cdFx0XHRcdFx0WydvZmZpY2lhbHByb3RlY3RlZCcsICdyZXZpc2lvbnByb3RlY3RlZCcsICdzeXNvcCcsICd0ZW1wbGF0ZWVkaXRvciddLmluY2x1ZGVzKGlucHV0Lm1vdmVsZXZlbClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y2xvc2VwYXJhbXMudHlwZSA9ICdtb3ZlJztcblx0XHRcdFx0XHRjbG9zZXBhcmFtcy5leHBpcnkgPSBpbnB1dC5tb3ZlZXhwaXJ5O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlucHV0LmNyZWF0ZWxldmVsICE9PSAnYWxsJykge1xuXHRcdFx0XHRjbG9zZXBhcmFtcy50eXBlID0gJ3NhbHQnO1xuXHRcdFx0XHRjbG9zZXBhcmFtcy5leHBpcnkgPSBpbnB1dC5jcmVhdGVleHBpcnk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHN3aXRjaCAoaW5wdXQuYWN0aW9udHlwZSkge1xuXHRcdFx0Y2FzZSAncHJvdGVjdCc6IHtcblx0XHRcdFx0Ly8gcHJvdGVjdCB0aGUgcGFnZVxuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKCfkv53miqTlrozmiJAnLCAn5L+d6K235a6M5oiQJyk7XG5cdFx0XHRcdGxldCBzdGF0dXNJbml0ZWQgPSBmYWxzZTtcblx0XHRcdFx0bGV0IHRoaXNwYWdlO1xuXHRcdFx0XHRjb25zdCBhbGxEb25lID0gKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzcGFnZSkge1xuXHRcdFx0XHRcdFx0dGhpc3BhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFncGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuY2FsbGJhY2tzLnRhZ2dpbmdQYWdlSW5pdGlhbCh0YWdwYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2xvc2VwYXJhbXMgJiYgY2xvc2VwYXJhbXMudHlwZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcnBwUGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0XHRcdCdMSUJfdGFsazrpobXpnaLkv53miqTor7fmsYInLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WFs+mXreivt+axgicsICfpl5zplonoq4vmsYInKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJwcFBhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdFx0XHRycHBQYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhjbG9zZXBhcmFtcyk7XG5cdFx0XHRcdFx0XHRycHBQYWdlLmxvYWQoVHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrcy5jbG9zZVJlcXVlc3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgcHJvdGVjdEl0ID0gKG5leHQpID0+IHtcblx0XHRcdFx0XHR0aGlzcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/neaKpOmhtemdoicsICfkv53orbfpoIHpnaInKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdFx0XHRcdGlmIChpbnB1dC5lZGl0bW9kaWZ5KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXNwYWdlLnNldEVkaXRQcm90ZWN0aW9uKGlucHV0LmVkaXRsZXZlbCwgaW5wdXQuZWRpdGV4cGlyeSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoaW5wdXQubW92ZW1vZGlmeSkge1xuXHRcdFx0XHRcdFx0XHQvLyBFbnN1cmUgYSBsZXZlbCBoYXMgYWN0dWFsbHkgYmVlbiBjaG9zZW5cblx0XHRcdFx0XHRcdFx0aWYgKGlucHV0Lm1vdmVsZXZlbCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNwYWdlLnNldE1vdmVQcm90ZWN0aW9uKGlucHV0Lm1vdmVsZXZlbCwgaW5wdXQubW92ZWV4cGlyeSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5oKo6ZyA6KaB6YCJ5oup5L+d5oqk5bGC57qn77yBJywgJ+aCqOmcgOimgemBuOaTh+S/neitt+WxpOe0mu+8gScpLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlcHJvdGVjdCcsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzcGFnZS5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFByb3RlY3RlZFBhZ2VzJykpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzcGFnZS5zZXRDcmVhdGVQcm90ZWN0aW9uKGlucHV0LmNyZWF0ZWxldmVsLCBpbnB1dC5jcmVhdGVleHBpcnkpO1xuXHRcdFx0XHRcdFx0dGhpc3BhZ2Uuc2V0V2F0Y2hsaXN0KGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGlucHV0LnByb3RlY3RSZWFzb24pIHtcblx0XHRcdFx0XHRcdHRoaXNwYWdlLnNldEVkaXRTdW1tYXJ5KGlucHV0LnByb3RlY3RSZWFzb24pO1xuXHRcdFx0XHRcdFx0dGhpc3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5oKo5b+F6aG76L6T5YWl5L+d5oqk55CG55Sx77yM6L+Z5bCG6KKr6K6w5b2V5Zyo5L+d5oqk5pel5b+X5Lit44CCJyxcblx0XHRcdFx0XHRcdFx0XHQn5oKo5b+F6aCI6Ly45YWl5L+d6K2355CG55Sx77yM6YCZ5bCH6KKr6KiY6YyE5Zyo5L+d6K235pel6KqM5Lit44CCJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVwcm90ZWN0Jyxcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFzdGF0dXNJbml0ZWQpIHtcblx0XHRcdFx0XHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRcdFx0XHRcdHN0YXR1c0luaXRlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXNwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHR0aGlzcGFnZS5wcm90ZWN0KG5leHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoaW5wdXQuZWRpdG1vZGlmeSB8fCBpbnB1dC5tb3ZlbW9kaWZ5IHx8ICFtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVJZCcpKSB7XG5cdFx0XHRcdFx0cHJvdGVjdEl0KGFsbERvbmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+ivt+WRiuiviVR3aW5rbGXopoHlgZrku4DkuYjvvIFcXG7oi6Xmgqjlj6rmmK/mg7PmoIforrDor6XpobXvvIzor7fpgInmi6nkuIrpnaLnmoTigJznlKjkv53miqTmqKHmnb/moIforrDmraTpobXigJ3pgInpobnjgIInLFxuXHRcdFx0XHRcdFx0XHQn6KuL5ZGK6Ki0VHdpbmtsZeimgeWBmuS7gOm6vO+8gVxcbuiLpeaCqOWPquaYr+aDs+aomeiomOipsumgge+8jOiri+mBuOaTh+S4iumdoueahOOAjOeUqOS/neitt+aooeadv+aomeiomOatpOmggeOAjemBuOmgheOAgidcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZXByb3RlY3QnLFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlICd0YWcnOlxuXHRcdFx0XHQvLyBhcHBseSBhIHByb3RlY3Rpb24gdGVtcGxhdGVcblx0XHRcdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5mb2xsb3dSZWRpcmVjdCA9IGZhbHNlO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+agh+iusOWujOaIkCcsICfmqJnoqJjlrozmiJAnKTtcblx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrcy50YWdnaW5nUGFnZUluaXRpYWwodGFncGFyYW1zKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyZXF1ZXN0Jzoge1xuXHRcdFx0XHQvLyBmaWxlIHJlcXVlc3QgYXQgUkZQUFxuXHRcdFx0XHRsZXQgdHlwZW5hbWU7XG5cdFx0XHRcdGxldCB0eXBlcmVhc29uO1xuXHRcdFx0XHRzd2l0Y2ggKGlucHV0LmNhdGVnb3J5KSB7XG5cdFx0XHRcdFx0Y2FzZSAncHAtZGlzcHV0ZSc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtcHJvdGVjdGVkJzpcblx0XHRcdFx0XHRcdHR5cGVuYW1lID0gd2luZG93LndnVUxTKCflhajkv53miqQnLCAn5YWo5L+d6K23Jyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC10ZW1wbGF0ZSc6XG5cdFx0XHRcdFx0XHR0eXBlbmFtZSA9IHdpbmRvdy53Z1VMUygn5qih5p2/5L+d5oqkJywgJ+aooeadv+S/neittycpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHAtdmFuZGFsaXNtJzpcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLWRpc3J1cHRpdmUnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLXNlbWktdW5zb3VyY2VkJzpcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLXZhbmRhbGlzbSc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtc2VtaS11c2VydGFsayc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtc2VtaS10ZW1wbGF0ZSc6IC8vIHJlbW92ZWQgZm9yIG5vd1xuXHRcdFx0XHRcdGNhc2UgJ3BwLXNlbWktc29jayc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtc2VtaS1ibHAnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLXNlbWktcHJvdGVjdGVkJzpcblx0XHRcdFx0XHRcdHR5cGVuYW1lID0gd2luZG93LndnVUxTKCfljYrkv53miqQnLCAn5Y2K5L+d6K23Jyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1tb3ZlJzpcblx0XHRcdFx0XHRjYXNlICdwcC1tb3ZlLWRpc3B1dGUnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLW1vdmUtaW5kZWYnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLW1vdmUtdmFuZGFsaXNtJzpcblx0XHRcdFx0XHRcdHR5cGVuYW1lID0gd2luZG93LndnVUxTKCfnp7vliqjkv53miqQnLCAn56e75YuV5L+d6K23Jyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1jcmVhdGUnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS1vZmZlbnNpdmUnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS1ibHAnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS1zYWx0Jzpcblx0XHRcdFx0XHRjYXNlICdwcC1jcmVhdGUtdXNlcnBhZ2UnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS1yZXBlYXQnOlxuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS12YW5kYWxpc20nOlxuXHRcdFx0XHRcdFx0dHlwZW5hbWUgPSB3aW5kb3cud2dVTFMoJ+eZvee6uOS/neaKpCcsICfnmb3ntJnkv53orbcnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8qIGNhc2UgJ3VucHJvdGVjdCc6ICovXG5cdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0eXBlbmFtZSA9IHdpbmRvdy53Z1VMUygn6Kej6Zmk5L+d5oqkJywgJ+ino+mZpOS/neittycpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChpbnB1dC5jYXRlZ29yeSkge1xuXHRcdFx0XHRcdGNhc2UgJ3BwLWRpc3B1dGUnOlxuXHRcdFx0XHRcdFx0dHlwZXJlYXNvbiA9IHdpbmRvdy53Z1VMUygn5LqJ6K6u44CB57yW6L6R5oiYJywgJ+eIreitsOOAgee3qOi8r+aIsCcpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHAtdmFuZGFsaXNtJzpcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLXZhbmRhbGlzbSc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtY3JlYXRlLXZhbmRhbGlzbSc6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCfmjIHnu63noLTlnY8nLCAn5oyB57qM56C05aOeJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC10ZW1wbGF0ZSc6XG5cdFx0XHRcdFx0Y2FzZSAncHAtc2VtaS10ZW1wbGF0ZSc6XG5cdFx0XHRcdFx0XHQvLyByZW1vdmVkIGZvciBub3dcblx0XHRcdFx0XHRcdHR5cGVyZWFzb24gPSB3aW5kb3cud2dVTFMoJ+mrmOmjjumZqeaooeadvycsICfpq5jpoqjpmqrmqKHmnb8nKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3BwLWNyZWF0ZS11c2VycGFnZSc6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCfooqvmsLjkuYXlsIHnpoHnmoTnlKjmiLfpobUnLCAn6KKr5rC45LmF5bCB6Y6W55qE5L2/55So6ICF6aCB6Z2iJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLXVzZXJ0YWxrJzpcblx0XHRcdFx0XHRcdHR5cGVyZWFzb24gPSB3aW5kb3cud2dVTFMoJ+W3suWwgeemgeeUqOaIt+eahOiuqOiuuumhtScsICflt7LlsIHpjpbkvb/nlKjogIXnmoToqI7oq5bpoIEnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3BwLXNlbWktc29jayc6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCflgoDlhKHnoLTlnY8nLCAn5YKA5YSh56C05aOeJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1zZW1pLWJscCc6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCfov53lj43nlJ/ogIXkvKDorrDmnaHkvosnLCAn6YGV5Y+N55Sf6ICF5YKz6KiY5qKd5L6LJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1tb3ZlLWRpc3B1dGUnOlxuXHRcdFx0XHRcdFx0dHlwZXJlYXNvbiA9IHdpbmRvdy53Z1VMUygn5LqJ6K6u44CB56e75Yqo5oiYJywgJ+eIreitsOOAgeenu+WLleaIsCcpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHAtbW92ZS12YW5kYWxpc20nOlxuXHRcdFx0XHRcdFx0dHlwZXJlYXNvbiA9IHdpbmRvdy53Z1VMUygn56e75Yqo56C05Z2PJywgJ+enu+WLleegtOWjnicpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHAtbW92ZS1pbmRlZic6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gd2luZG93LndnVUxTKCfpq5jpo47pmanpobXpnaInLCAn6auY6aKo6Zqq6aCB6Z2iJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwcC1jcmVhdGUtcmVwZWF0Jzpcblx0XHRcdFx0XHRcdHR5cGVyZWFzb24gPSB3aW5kb3cud2dVTFMoJ+WkmuasoemHjeWkjeWIm+W7uicsICflpJrmrKHph43opIflu7rnq4snKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0eXBlcmVhc29uID0gJyc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgcmVhc29uID0gdHlwZXJlYXNvbjtcblx0XHRcdFx0aWYgKGlucHV0LnJlYXNvbiAhPT0gJycpIHtcblx0XHRcdFx0XHRpZiAodHlwZXJlYXNvbiAhPT0gJycpIHtcblx0XHRcdFx0XHRcdHJlYXNvbiArPSAn77yaJztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVhc29uICs9IGlucHV0LnJlYXNvbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVhc29uICE9PSAnJykge1xuXHRcdFx0XHRcdHJlYXNvbiA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihyZWFzb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJwcHBhcmFtcyA9IHtcblx0XHRcdFx0XHRyZWFzb24sXG5cdFx0XHRcdFx0dHlwZW5hbWUsXG5cdFx0XHRcdFx0Y2F0ZWdvcnk6IGlucHV0LmNhdGVnb3J5LFxuXHRcdFx0XHRcdGV4cGlyeTogaW5wdXQuZXhwaXJ5LFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRcdFx0Y29uc3QgcnBwTmFtZSA9ICdMSUJfdGFsazrpobXpnaLkv53miqTor7fmsYInO1xuXHRcdFx0XHQvLyBVcGRhdGluZyBkYXRhIGZvciB0aGUgYWN0aW9uIGNvbXBsZXRlZCBldmVudFxuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHJwcE5hbWU7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn5o+Q5ZCN5a6M5oiQ77yM6YeN5a6a5ZCR5Yiw6K6o6K666aG1Jyxcblx0XHRcdFx0XHQn5o+Q5ZCN5a6M5oiQ77yM6YeN5paw5bCO5ZCR5Yiw6KiO6KuW6aCBJ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBycHBQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShycHBOYW1lLCB3aW5kb3cud2dVTFMoJ+ivt+axguS/neaKpOmhtemdoicsICfoq4vmsYLkv53orbfpoIHpnaInKSk7XG5cdFx0XHRcdHJwcFBhZ2Uuc2V0Rm9sbG93UmVkaXJlY3QodHJ1ZSk7XG5cdFx0XHRcdHJwcFBhZ2Uuc2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKHJwcHBhcmFtcyk7XG5cdFx0XHRcdHJwcFBhZ2UubG9hZChUd2lua2xlLnByb3RlY3QuY2FsbGJhY2tzLmZpbGVSZXF1ZXN0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtdy5ub3RpZnkoJ3R3aW5rbGVwcm90ZWN0OiDmnKrnn6Xmk43kvZznsbvlnosnLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVwcm90ZWN0Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5wcm90ZWN0LmNhbGxiYWNrcyA9IHtcblx0XHR0YWdnaW5nUGFnZUluaXRpYWw6ICh0YWdwYXJhbXMpID0+IHtcblx0XHRcdGlmICh0YWdwYXJhbXMudGFnID09PSAnbm9vcCcpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCflupTnlKjkv53miqTmqKHmnb8nLCAn5oeJ55So5L+d6K235qih5p2/JyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmsqHku4DkuYjopoHlgZrnmoQnLCAn5rKS5LuA6bq86KaB5YGa55qEJylcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFnZU5hbWUgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5cdFx0XHRjb25zdCBwcm90ZWN0ZWRQYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShwYWdlTmFtZSwgd2luZG93LndnVUxTKCfmoIforrDpobXpnaInLCAn5qiZ6KiY6aCB6Z2iJykpO1xuXHRcdFx0cHJvdGVjdGVkUGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnModGFncGFyYW1zKTtcblx0XHRcdHByb3RlY3RlZFBhZ2UubG9hZChUd2lua2xlLnByb3RlY3QuY2FsbGJhY2tzLnRhZ2dpbmdQYWdlKTtcblx0XHR9LFxuXHRcdGdldFRhZ2dlZFBhZ2U6IChwYXJhbXMsIHRleHQpID0+IHtcblx0XHRcdGxldCB0YWc7XG5cdFx0XHRsZXQgc3VtbWFyeTtcblx0XHRcdGNvbnN0IG9sZHRhZ19yZSA9XG5cdFx0XHRcdC8oPzo8bm9pbmNsdWRlPik/WyBcXHRdKlxce1xce1xccyoocHAtW157fV0qP3xwcm90ZWN0ZWR8KD86dHx2fHN8cC18dXNlcnRhbGstdnx1c2VydGFsay1zfHNifG1vdmUpcHJvdGVjdGVkKD86Mik/fHByb3RlY3RlZCB0ZW1wbGF0ZXxwcml2YWN5IHByb3RlY3Rpb24pXFxzKj9cXH1cXH1cXHMqKD86PFxcL25vaW5jbHVkZT4pP1xccyovZ2k7XG5cdFx0XHRjb25zdCByZV9yZXN1bHQgPSBvbGR0YWdfcmUuZXhlYyh0ZXh0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cmVfcmVzdWx0ICYmXG5cdFx0XHRcdChwYXJhbXMudGFnID09PSAnbm9uZScgfHxcblx0XHRcdFx0XHRjb25maXJtKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCflnKjpobXpnaLkuIrmib7liLB7eycsICflnKjpoIHpnaLkuIrmib7liLB7eycpICtcblx0XHRcdFx0XHRcdFx0cmVfcmVzdWx0WzFdICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCd9fVxcbuWNleWHu+ehruWumuS7peenu+mZpO+8jOaIluWNleWHu+WPlua2iOS7peWPlua2iOaTjeS9nOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J319XFxu6bue5pOK56K65a6a5Lul56e76Zmk77yM5oiW6bue5pOK5Y+W5raI5Lul5Y+W5raI5pON5L2c44CCJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSlcblx0XHRcdCkge1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKG9sZHRhZ19yZSwgJycpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy50YWcgPT09ICdub25lJykge1xuXHRcdFx0XHRzdW1tYXJ5ID0gd2luZG93LndnVUxTKCfnp7vpmaTkv53miqTmqKHmnb8nLCAn56e76Zmk5L+d6K235qih5p2/Jyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoe3RhZ30gPSBwYXJhbXMpO1xuXHRcdFx0XHRpZiAocGFyYW1zLnJlYXNvbikge1xuXHRcdFx0XHRcdHRhZyArPSBgfHJlYXNvbj0ke3BhcmFtcy5yZWFzb259YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocGFyYW1zLnNob3dleHBpcnkgJiYgcGFyYW1zLmV4cGlyeSAmJiAhTW9yZWJpdHMuc3RyaW5nLmlzSW5maW5pdHkocGFyYW1zLmV4cGlyeSkpIHtcblx0XHRcdFx0XHR0YWcgKz0gJ3xleHBpcnk9e3snLmNvbmNhdCgnc3Vic3Q6JywgYCN0aW1lOmN8JHtwYXJhbXMuZXhwaXJ5fX19YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHBhcmFtcy5zbWFsbCkge1xuXHRcdFx0XHRcdHRhZyArPSAnfHNtYWxsPXllcyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKC9eXFxzKiMoPzpyZWRpcmVjdHzph43lrprlkJF86YeN5paw5bCO5ZCRKS9pLnRlc3QodGV4dCkpIHtcblx0XHRcdFx0XHQvLyByZWRpcmVjdCBwYWdlXG5cdFx0XHRcdFx0Ly8gT25seSB0YWcgaWYgbm8ge3tyY2F0IHNoZWxsfX0gaXMgZm91bmRcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHR0ZXh0Lm1hdGNoKFxuXHRcdFx0XHRcdFx0XHQve3soPzpSZWRpcmVjdFsgX11jYXRlZ29yeSBzaGVsbHxSY2F0WyBfXXNoZWxsfFRoaXNbIF9daXMgYSByZWRpcmVjdHzlpJrnp43nsbvlnovph43lrprlkJF85aSa56iu6aGe5Z6L6YeN5a6a5ZCRfOWkmueorumhnuWei+mHjeaWsOWwjuWQkXzlpJrnp43nsbvlnovph43mlrDlr7zlkJF8UjB85YW25LuW6YeN5a6a5ZCRfFJDU3xSZWRpcmVjdFsgX11zaGVsbCkvaVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0XHRcdCflt7LlrZjlnKhSZWRpcmVjdCBjYXRlZ29yeSBzaGVsbCcsXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5rKh5LuA5LmI5Y+v5YGa55qEJywgJ+aykuS7gOm6vOWPr+WBmueahCcpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0LyMoPzpyZWRpcmVjdHzph43lrprlkJF86YeN5paw5bCO5ZCRKSA/KFxcW1xcWy4qP1xcXVxcXSkoLiopL2ksXG5cdFx0XHRcdFx0XHRgI1JFRElSRUNUICQxJDJcXG5cXG57eyR7dGFnfX19YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHBhcmFtcy5ub2luY2x1ZGUpIHtcblx0XHRcdFx0XHRcdHRhZyA9IGA8bm9pbmNsdWRlPnt7JHt0YWd9fX08L25vaW5jbHVkZT5gO1xuXHRcdFx0XHRcdFx0Ly8g5Y+q5pyJ6KGo5qC86ZyA6KaB5Y2V54us5Yqg5Zue6L2m77yM5YW25LuW5oOF5Ya15Yqg5Zue6L2m5Lya56C05Z2P5qih5p2/44CCXG5cdFx0XHRcdFx0XHRpZiAodGV4dC5pbmRleE9mKCd7fCcpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHRhZyArPSAnXFxuJztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFnID0gYHt7JHt0YWd9fX1cXG5gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBJbnNlcnQgdGFnIGFmdGVyIHNob3J0IGRlc2NyaXB0aW9uIG9yIGFueSBoYXRub3Rlc1xuXHRcdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpdGV4dC5wYWdlKHRleHQpO1xuXHRcdFx0XHRcdHRleHQgPSB5c2FyY2hpdmVzX3BhZ2UuaW5zZXJ0QWZ0ZXJUZW1wbGF0ZXModGFnLCBUd2lua2xlLmhhdG5vdGVSZWdleCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnkgPSBg5Yqg5YWle3ske3BhcmFtcy50YWd9fX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGV4dCxcblx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdH07XG5cdFx0fSxcblx0XHR0YWdnaW5nUGFnZTogKHByb3RlY3RlZFBhZ2UpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHByb3RlY3RlZFBhZ2UuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCB0ZXh0ID0gcHJvdGVjdGVkUGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3QgbmV3VmVyc2lvbiA9IFR3aW5rbGUucHJvdGVjdC5jYWxsYmFja3MuZ2V0VGFnZ2VkUGFnZShwYXJhbXMsIHRleHQpO1xuXHRcdFx0aWYgKG5ld1ZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwcm90ZWN0ZWRQYWdlLmdldFN0YXR1c0VsZW1lbnQoKS5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cHJvdGVjdGVkUGFnZS5zZXRFZGl0U3VtbWFyeShuZXdWZXJzaW9uLnN1bW1hcnkpO1xuXHRcdFx0cHJvdGVjdGVkUGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwcm90ZWN0ZWRQYWdlLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3dhdGNoUFBUYWdnZWRQYWdlcycpKTtcblx0XHRcdHByb3RlY3RlZFBhZ2Uuc2V0UGFnZVRleHQobmV3VmVyc2lvbi50ZXh0KTtcblx0XHRcdHByb3RlY3RlZFBhZ2Uuc2V0Q3JlYXRlT3B0aW9uKCdub2NyZWF0ZScpO1xuXHRcdFx0cHJvdGVjdGVkUGFnZS5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nKCk7IC8vIG5vIG5lZWQgdG8gbGV0IGFkbWlucyBrbm93IHRoZXkgYXJlIGVkaXRpbmcgdGhyb3VnaCBwcm90ZWN0aW9uXG5cdFx0XHRwcm90ZWN0ZWRQYWdlLnNhdmUoKTtcblx0XHR9LFxuXHRcdGZpbGVSZXF1ZXN0OiAocnBwUGFnZSkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcnBwUGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGxldCB0ZXh0ID0gcnBwUGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3Qgc3RhdHVzRWxlbWVudCA9IHJwcFBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpO1xuXHRcdFx0Y29uc3QgcnBwUmUgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRgPT09XFxcXHMqKFxcXFxbXFxcXFspP1xcXFxzKjo/XFxcXHMqJHtNb3JlYml0cy5zdHJpbmcuZXNjYXBlUmVnRXhwKE1vcmViaXRzLnBhZ2VOYW1lTm9ybSl9XFxcXHMqKFxcXFxdXFxcXF0pP1xcXFxzKj09PWAsXG5cdFx0XHRcdCdtJ1xuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHRhZyA9IHJwcFJlLmV4ZWModGV4dCk7XG5cdFx0XHRjb25zdCBycHBMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdFx0cnBwTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybChycHBQYWdlLmdldFBhZ2VOYW1lKCkpKTtcblx0XHRcdHJwcExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnBwUGFnZS5nZXRQYWdlTmFtZSgpKSk7XG5cdFx0XHRpZiAodGFnKSB7XG5cdFx0XHRcdHN0YXR1c0VsZW1lbnQuZXJyb3IoW1xuXHRcdFx0XHRcdHJwcExpbmssXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCflt7LmnInlr7nmraTpobXpnaLnmoTkv53miqTmj5DlkI3vvIzlj5bmtojmk43kvZzjgIInLCAn5bey5pyJ5bCN5q2k6aCB6Z2i55qE5L+d6K235o+Q5ZCN77yM5Y+W5raI5pON5L2c44CCJyksXG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgbmV3dGFnID0gYD09PSBbWzoke01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXSA9PT1cXG5gO1xuXHRcdFx0aWYgKG5ldyBSZWdFeHAoYF4ke213LnV0aWwuZXNjYXBlUmVnRXhwKG5ld3RhZykucmVwbGFjZSgvXFxzKy9nLCBTdHJpbmcucmF3YFxccypgKX1gLCAnbScpLnRlc3QodGV4dCkpIHtcblx0XHRcdFx0c3RhdHVzRWxlbWVudC5lcnJvcihbXG5cdFx0XHRcdFx0cnBwTGluayxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+W3suacieWvueatpOmhtemdoueahOS/neaKpOaPkOWQje+8jOWPlua2iOaTjeS9nOOAgicsICflt7LmnInlsI3mraTpoIHpnaLnmoTkv53orbfmj5DlkI3vvIzlj5bmtojmk43kvZzjgIInKSxcblx0XHRcdFx0XSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCB3b3Jkcztcblx0XHRcdHN3aXRjaCAocGFyYW1zLmV4cGlyeSkge1xuXHRcdFx0XHRjYXNlICd0ZW1wb3JhcnknOlxuXHRcdFx0XHRcdHdvcmRzID0gd2luZG93LndnVUxTKCfkuLTml7YnLCAn6Ieo5pmCJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2luZmluaXR5Jzpcblx0XHRcdFx0XHR3b3JkcyA9ICfmsLjkuYUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHdvcmRzID0gJyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR3b3JkcyArPSBwYXJhbXMudHlwZW5hbWU7XG5cdFx0XHRuZXd0YWcgKz0gYCogPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDkwJVwiPiR7d2luZG93LndnVUxTKCflvZPliY3kv53miqTnirbmgIEnLCAn55uu5YmN5L+d6K2354uA5oWLJyl977yae3twcm90ZWN0aW9uIHN0YXR1c3wke1xuXHRcdFx0XHQvWz1dLy50ZXN0KE1vcmViaXRzLnBhZ2VOYW1lTm9ybSkgPyAnMT0nIDogJydcblx0XHRcdH0ke01vcmViaXRzLnBhZ2VOYW1lTm9ybX19fTwvc3Bhbj5cXG5gO1xuXHRcdFx0bmV3dGFnICs9IGAke1xuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivt+axgicsICfoq4vmsYInKSArXG5cdFx0XHRcdE1vcmViaXRzLnN0cmluZy50b1VwcGVyQ2FzZUZpcnN0Q2hhcih3b3JkcykgK1xuXHRcdFx0XHQocGFyYW1zLnJlYXNvbiA9PT0gJycgPyAn44CCJyA6IGDvvJoke01vcmViaXRzLnN0cmluZy5mb3JtYXRSZWFzb25UZXh0KHBhcmFtcy5yZWFzb24pfWApXG5cdFx0XHR9LS1+fmAuY29uY2F0KCd+ficpO1xuXHRcdFx0bGV0IHJlZztcblx0XHRcdGlmIChwYXJhbXMuY2F0ZWdvcnkgPT09ICd1bnByb3RlY3QnKSB7XG5cdFx0XHRcdHJlZyA9IC8oPT1cXHMq6K+35rGC6Kej6Zmk5L+d5oqkXFxzKj09KS87XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZWcgPSAvKHt7XFxzKlxcL2hlYWRlclxccyp9fSkvO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxUZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlZywgYCQxXFxuJHtuZXd0YWd9XFxuYCk7XG5cdFx0XHRpZiAodGV4dC5sZW5ndGggPT09IG9yaWdpbmFsVGV4dExlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBsaW5rbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGlua25vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgbXcudXRpbC5nZXRVcmwoJ0hlbHA6VHdpbmtsZS/kv67lpI1SRlBQJykpO1xuXHRcdFx0XHRsaW5rbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3aW5kb3cud2dVTFMoJ+WmguS9leS/ruWkjVJGUFAnLCAn5aaC5L2V5L+u5b6pUkZQUCcpKSk7XG5cdFx0XHRcdHN0YXR1c0VsZW1lbnQuZXJyb3IoW1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfml6Dms5XlnKhMSUI6UkZQUOS4iuaJvuWIsOebuOWFs+WumuS9jeeCueagh+iusO+8jOimgeS/ruWkjeatpOmXrumimO+8jOivt+WPguingScsXG5cdFx0XHRcdFx0XHQn54Sh5rOV5ZyoTElCOlJGUFDkuIrmib7liLDnm7jpl5zlrprkvY3pu57mqJnoqJjvvIzopoHkv67lvqnmraTllY/poYzvvIzoq4vlj4PoposnXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRsaW5rbm9kZSxcblx0XHRcdFx0XHQn44CCJyxcblx0XHRcdFx0XSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHN0YXR1c0VsZW1lbnQuc3RhdHVzKCfliqDlhaXmlrDmj5DlkI3igKYnKTtcblx0XHRcdHJwcFBhZ2Uuc2V0RWRpdFN1bW1hcnkoXG5cdFx0XHRcdGAvKiAke01vcmViaXRzLnBhZ2VOYW1lTm9ybX0gKi8gJHt3aW5kb3cud2dVTFMoJ+ivt+axguWvuScsICfoq4vmsYLlsI0nKX1bWyR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dJHtcblx0XHRcdFx0XHRwYXJhbXMudHlwZW5hbWVcblx0XHRcdFx0fWBcblx0XHRcdCk7XG5cdFx0XHRycHBQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHJwcFBhZ2Uuc2V0UGFnZVRleHQodGV4dCk7XG5cdFx0XHRycHBQYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdHJwcFBhZ2Uuc2F2ZSgoKSA9PiB7XG5cdFx0XHRcdC8vIFdhdGNoIHRoZSBwYWdlIGJlaW5nIHJlcXVlc3RlZFxuXHRcdFx0XHRjb25zdCB3YXRjaFByZWYgPSBUd2lua2xlLmdldFByZWYoJ3dhdGNoUmVxdWVzdGVkUGFnZXMnKTtcblx0XHRcdFx0Ly8gYWN0aW9uPXdhdGNoIGhhcyBubyB3YXkgdG8gcmVseSBvbiB1c2VyIHByZWZlcmVuY2VzIChUMjYyOTEyKSwgc28gd2UgZG8gaXQgbWFudWFsbHkuXG5cdFx0XHRcdC8vIFRoZSB3YXRjaGRlZmF1bHQgcHJlZiBhcHBlYXJzIHRvIHJlbGlhYmx5IHJldHVybiAnMScgKHN0cmluZyksXG5cdFx0XHRcdC8vIGJ1dCB0aGF0J3Mgbm90IGNvbnNpc3RlbnQgYW1vbmcgcHJlZnMgc28gbWlnaHQgYXMgd2VsbCBiZSBcImNvcnJlY3RcIlxuXHRcdFx0XHRjb25zdCB3YXRjaCA9XG5cdFx0XHRcdFx0d2F0Y2hQcmVmICE9PSAnbm8nICYmXG5cdFx0XHRcdFx0KHdhdGNoUHJlZiAhPT0gJ2RlZmF1bHQnIHx8ICEhTnVtYmVyLnBhcnNlSW50KG13LnVzZXIub3B0aW9ucy5nZXQoJ3dhdGNoZGVmYXVsdCcpLCAxMCkpO1xuXHRcdFx0XHRpZiAod2F0Y2gpIHtcblx0XHRcdFx0XHRjb25zdCB3YXRjaF9xdWVyeSA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3dhdGNoJyxcblx0XHRcdFx0XHRcdHRpdGxlczogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuXHRcdFx0XHRcdFx0dG9rZW46IG13LnVzZXIudG9rZW5zLmdldCgnd2F0Y2hUb2tlbicpLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Ly8gT25seSBhZGQgdGhlIGV4cGlyeSBpZiBwYWdlIGlzIHVud2F0Y2hlZCBvciBhbHJlYWR5IHRlbXBvcmFyaWx5IHdhdGNoZWRcblx0XHRcdFx0XHRpZiAoVHdpbmtsZS5wcm90ZWN0LndhdGNoZWQgIT09IHRydWUgJiYgd2F0Y2hQcmVmICE9PSAnZGVmYXVsdCcgJiYgd2F0Y2hQcmVmICE9PSAneWVzJykge1xuXHRcdFx0XHRcdFx0d2F0Y2hfcXVlcnkuZXhwaXJ5ID0gd2F0Y2hQcmVmO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+Wwhuivt+axguS/neaKpOeahOmhtemdouWKoOWFpeWIsOebkeinhuWIl+ihqCcsICflsIfoq4vmsYLkv53orbfnmoTpoIHpnaLliqDlhaXliLDnm6PoppbmuIXllq4nKSxcblx0XHRcdFx0XHRcdHdhdGNoX3F1ZXJ5XG5cdFx0XHRcdFx0KS5wb3N0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Y2xvc2VSZXF1ZXN0OiAocnBwUGFnZSkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcnBwUGFnZS5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGxldCB0ZXh0ID0gcnBwUGFnZS5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3Qgc3RhdHVzRWxlbWVudCA9IHJwcFBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpO1xuXHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0ZXh0LnNwbGl0KC8oPz1cXG49PVxccyror7fmsYLop6PpmaTkv53miqRcXHMqPT0pLyk7XG5cdFx0XHRpZiAoc2VjdGlvbnMubGVuZ3RoICE9PSAyKSB7XG5cdFx0XHRcdGNvbnN0IGxpbmtub2RlMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGlua25vZGUyLnNldEF0dHJpYnV0ZSgnaHJlZicsIG13LnV0aWwuZ2V0VXJsKCdIZWxwOlR3aW5rbGUv5L+u5aSNUkZQUCcpKTtcblx0XHRcdFx0bGlua25vZGUyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCflpoLkvZXkv67lpI1SRlBQJykpO1xuXHRcdFx0XHRzdGF0dXNFbGVtZW50LmVycm9yKFtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5peg5rOV5ZyoTElCOlJGUFDkuIrmib7liLDnm7jlhbPlrprkvY3ngrnmoIforrDvvIzopoHkv67lpI3mraTpl67popjvvIzor7flj4Lop4EnLFxuXHRcdFx0XHRcdFx0J+eEoeazleWcqExJQjpSRlBQ5LiK5om+5Yiw55u46Zec5a6a5L2N6bue5qiZ6KiY77yM6KaB5L+u5b6p5q2k5ZWP6aGM77yM6KuL5Y+D6KaLJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0bGlua25vZGUyLFxuXHRcdFx0XHRcdCfjgIInLFxuXHRcdFx0XHRdKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHNlY3Rpb25UZXh0O1xuXHRcdFx0bGV0IGV4cGlyeVRleHQgPSAnJztcblx0XHRcdGlmIChwYXJhbXMudHlwZSA9PT0gJ3VucHJvdGVjdCcpIHtcblx0XHRcdFx0Wywgc2VjdGlvblRleHRdID0gc2VjdGlvbnM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRbc2VjdGlvblRleHRdID0gc2VjdGlvbnM7XG5cdFx0XHRcdGV4cGlyeVRleHQgPSBNb3JlYml0cy5zdHJpbmcuZm9ybWF0VGltZShwYXJhbXMuZXhwaXJ5KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJlcXVlc3RMaXN0ID0gc2VjdGlvblRleHQuc3BsaXQoLyg/PVxcbj09PS4rPT09XFxzKlxcbikvKTtcblx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgcnBwUmUgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRgPT09XFxcXHMqKFxcXFxbXFxcXFspP1xcXFxzKjo/XFxcXHMqJHtNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KE1vcmViaXRzLnBhZ2VOYW1lTm9ybSl9XFxcXHMqKFxcXFxdXFxcXF0pP1xcXFxzKj09PWAsXG5cdFx0XHRcdCdtJ1xuXHRcdFx0KTtcblx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgcmVxdWVzdExpc3QubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHJwcFJlLmV4ZWMocmVxdWVzdExpc3RbaV0pKSB7XG5cdFx0XHRcdFx0cmVxdWVzdExpc3RbaV0gPSByZXF1ZXN0TGlzdFtpXS50cmltRW5kKCk7XG5cdFx0XHRcdFx0aWYgKHBhcmFtcy50eXBlID09PSAndW5wcm90ZWN0Jykge1xuXHRcdFx0XHRcdFx0cmVxdWVzdExpc3RbaV0gKz0gJ1xcbjoge3tSRlBQfGlzdW59feOAgi0tfn4nLmNvbmNhdCgnfn5cXG4nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWVzdExpc3RbaV0gKz0gYFxcbjoge3tSRlBQfCR7cGFyYW1zLnR5cGV9fCR7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHBhcmFtcy5leHBpcnkpID8gJ2luZmluaXR5JyA6IGV4cGlyeVRleHRcblx0XHRcdFx0XHRcdH19feOAgi0tfn5gLmNvbmNhdCgnfn5cXG4nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZvdW5kKSB7XG5cdFx0XHRcdHN0YXR1c0VsZW1lbnQud2Fybih3aW5kb3cud2dVTFMoJ+ayoeacieaJvuWIsOebuOWFs+eahOivt+axgicsICfmspLmnInmib7liLDnm7jpl5znmoToq4vmsYInKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwYXJhbXMudHlwZSA9PT0gJ3VucHJvdGVjdCcpIHtcblx0XHRcdFx0dGV4dCA9IHNlY3Rpb25zWzBdICsgcmVxdWVzdExpc3Quam9pbignJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0ZXh0ID0gcmVxdWVzdExpc3Quam9pbignJykgKyBzZWN0aW9uc1sxXTtcblx0XHRcdH1cblx0XHRcdGxldCBzdW1tYXJ5ID0gJyc7XG5cdFx0XHRpZiAocGFyYW1zLnR5cGUgPT09ICd1bnByb3RlY3QnKSB7XG5cdFx0XHRcdFssIHNlY3Rpb25UZXh0XSA9IHNlY3Rpb25zO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0W3NlY3Rpb25UZXh0XSA9IHNlY3Rpb25zO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChwYXJhbXMudHlwZSkge1xuXHRcdFx0XHRjYXNlICdzZW1pJzpcblx0XHRcdFx0XHRzdW1tYXJ5ID0gd2luZG93LndnVUxTKCfljYrkv53miqQnLCAn5Y2K5L+d6K23Jyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RlbXAnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+aooeadv+S/neaKpCcsICfmqKHmnb/kv53orbcnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZWNwJzpcblx0XHRcdFx0XHRzdW1tYXJ5ID0gd2luZG93LndnVUxTKCflu7bkvLjnoa7orqTkv53miqQnLCAn5bu25Ly456K66KqN5L+d6K23Jyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2Z1bGwnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+WFqOS/neaKpCcsICflhajkv53orbcnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncmV2aXNpb25wcm90ZWN0ZWQnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+eJiOacrOS/neaKpCcsICfniYjmnKzkv53orbcnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnb2ZmaWNpYWxwcm90ZWN0ZWQnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSB3aW5kb3cud2dVTFMoJ+ijgeWnlOS8muS/neaKpCcsICfoo4Hlp5TmnIPkv53orbcnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnbW92ZSc6XG5cdFx0XHRcdFx0c3VtbWFyeSA9IHdpbmRvdy53Z1VMUygn56e75Yqo5L+d5oqkJywgJ+enu+WLleS/neittycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdzYWx0Jzpcblx0XHRcdFx0XHRzdW1tYXJ5ID0gd2luZG93LndnVUxTKCfnmb3nurjkv53miqQnLCAn55m957SZ5L+d6K23Jyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3VucHJvdGVjdCc6XG5cdFx0XHRcdFx0c3VtbWFyeSA9IHdpbmRvdy53Z1VMUygn6Kej6Zmk5L+d5oqkJywgJ+ino+mZpOS/neittycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHN0YXR1c0VsZW1lbnQud2Fybih3aW5kb3cud2dVTFMoJ+acquefpeS/neaKpOexu+WeiycsICfmnKrnn6Xkv53orbfpoZ7liKUnKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHBhcmFtcy5leHBpcnkpKSB7XG5cdFx0XHRcdHN1bW1hcnkgPSBleHBpcnlUZXh0ICsgc3VtbWFyeTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN1bW1hcnkgKz0gZXhwaXJ5VGV4dDtcblx0XHRcdH1cblx0XHRcdHJwcFBhZ2Uuc2V0RWRpdFN1bW1hcnkoYC8qICR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfSAqLyAke3N1bW1hcnl9YCk7XG5cdFx0XHRycHBQYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHJwcFBhZ2Uuc2V0UGFnZVRleHQodGV4dCk7XG5cdFx0XHRycHBQYWdlLnNhdmUoKTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLnByb3RlY3QuZm9ybWF0UHJvdGVjdGlvbkRlc2NyaXB0aW9uID0gKHByb3RlY3Rpb25MZXZlbHMpID0+IHtcblx0XHRjb25zdCBwcm90ZWN0aW9uTm9kZSA9IFtdO1xuXHRcdGlmIChPYmplY3Qua2V5cyhwcm90ZWN0aW9uTGV2ZWxzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHByb3RlY3Rpb25Ob2RlLnB1c2goJChgPGI+JHt3aW5kb3cud2dVTFMoJ+aXoOS/neaKpCcsICfnhKHkv53orbcnKX08L2I+YClbMF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IFt0eXBlLCBzZXR0aW5nc10gb2YgT2JqZWN0LmVudHJpZXMocHJvdGVjdGlvbkxldmVscykpIHtcblx0XHRcdFx0bGV0IGxhYmVsO1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlICdlZGl0Jzpcblx0XHRcdFx0XHRcdGxhYmVsID0gd2luZG93LndnVUxTKCfnvJbovpEnLCAn57eo6LyvJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdtb3ZlJzpcblx0XHRcdFx0XHRcdGxhYmVsID0gd2luZG93LndnVUxTKCfnp7vliqgnLCAn56e75YuVJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdjcmVhdGUnOlxuXHRcdFx0XHRcdFx0bGFiZWwgPSB3aW5kb3cud2dVTFMoJ+WIm+W7uicsICflu7rnq4snKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3VwbG9hZCc6XG5cdFx0XHRcdFx0XHRsYWJlbCA9IHdpbmRvdy53Z1VMUygn5LiK5LygJywgJ+S4iuWCsycpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGxhYmVsID0gdHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBsZXZlbDtcblx0XHRcdFx0c3dpdGNoIChzZXR0aW5ncy5sZXZlbCkge1xuXHRcdFx0XHRcdGNhc2UgJ29mZmljaWFscHJvdGVjdGVkJzpcblx0XHRcdFx0XHRcdGxldmVsID0gd2luZG93LndnVUxTKCfku4XlhYHorrjmoaPmoYjnkIbkuovlkZgnLCAn5YOF5YWB6Kix5qqU5qGI55CG5LqL5ZOhJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdhdXRvY29uZmlybWVkJzpcblx0XHRcdFx0XHRcdGxldmVsID0gd2luZG93LndnVUxTKCfku4XlhYHorrjoh6rliqjnoa7orqTnlKjmiLcnLCAn5YOF5YWB6Kix6Ieq5YuV56K66KqN5L2/55So6ICFJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd0ZW1wbGF0ZWVkaXRvcic6XG5cdFx0XHRcdFx0XHRsZXZlbCA9IHdpbmRvdy53Z1VMUygn5LuF5qih5p2/57yW6L6R5ZGY5ZKM566h55CG5ZGYJywgJ+WDheaooeadv+e3qOi8r+WToeWSjOeuoeeQhuWToScpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc3lzb3AnOlxuXHRcdFx0XHRcdFx0bGV2ZWwgPSB3aW5kb3cud2dVTFMoJ+S7heeuoeeQhuWRmCcsICflg4XnrqHnkIblk6EnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHQoe2xldmVsfSA9IHNldHRpbmdzKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3RlY3Rpb25Ob2RlLnB1c2goJChgPGI+JHtsYWJlbH3vvJoke2xldmVsfTwvYj5gKVswXSk7XG5cdFx0XHRcdGlmIChNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShzZXR0aW5ncy5leHBpcnkpKSB7XG5cdFx0XHRcdFx0cHJvdGVjdGlvbk5vZGUucHVzaCh3aW5kb3cud2dVTFMoJ++8iOaXoOmZkOacn++8iScsICfvvIjnhKHpmZDmnJ/vvIknKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cHJvdGVjdGlvbk5vZGUucHVzaChcblx0XHRcdFx0XHRcdGAke3dpbmRvdy53Z1VMUygn77yI6L+H5pyf77yaJywgJ++8iOmBjuacn++8micpICsgbmV3IE1vcmViaXRzLmRhdGUoc2V0dGluZ3MuZXhwaXJ5KS5jYWxlbmRhcigndXRjJyl977yJYFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNldHRpbmdzLmNhc2NhZGUpIHtcblx0XHRcdFx0XHRwcm90ZWN0aW9uTm9kZS5wdXNoKHdpbmRvdy53Z1VMUygn77yI6L+e6ZSB77yJJywgJ++8iOmAo+mOlu+8iScpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcHJvdGVjdGlvbk5vZGU7XG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUucHJvdGVjdCwgJ3Byb3RlY3QnKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSBmcmllbmRseXRhZy5qcyAqL1xuKGZ1bmN0aW9uIGZyaWVuZGx5dGFnKCQpIHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdC8qKlxuXHQgKiBmcmllbmRseXRhZy5qczogVGFnIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IFRhYiAoXCJUYWdcIilcblx0ICogQWN0aXZlIG9uOiBFeGlzdGluZyBhcnRpY2xlcyBhbmQgZHJhZnRzOyBmaWxlIHBhZ2VzIHdpdGggYSBjb3JyZXNwb25kaW5nIGZpbGVcblx0ICogd2hpY2ggaXMgbG9jYWwgKG5vdCBvbiBTaGFyZSk7IGFsbCByZWRpcmVjdHNcblx0ICovXG5cdFR3aW5rbGUudGFnID0gKCkgPT4ge1xuXHRcdC8vIHJlZGlyZWN0IHRhZ2dpbmdcblx0XHRpZiAoTW9yZWJpdHMuaXNQYWdlUmVkaXJlY3QoKSkge1xuXHRcdFx0VHdpbmtsZS50YWcubW9kZSA9IHdpbmRvdy53Z1VMUygn6YeN5a6a5ZCRJywgJ+mHjeaWsOWwjuWQkScpO1xuXHRcdFx0VHdpbmtsZS50YWcubW9kZUVuID0gJ3JlZGlyZWN0Jztcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdFR3aW5rbGUudGFnLmNhbGxiYWNrLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+agh+iusCcsICfmqJnoqJgnKSxcblx0XHRcdFx0J2ZyaWVuZGx5LXRhZycsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5qCH6K6w6YeN5a6a5ZCRJywgJ+aomeiomOmHjeaWsOWwjuWQkScpXG5cdFx0XHQpO1xuXHRcdFx0Ly8gZmlsZSB0YWdnaW5nXG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDYgJiZcblx0XHRcdCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctc2hhcmVkdXBsb2FkJykgJiZcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1pbWFnZXBhZ2Utc2VjdGlvbi1maWxlaGlzdG9yeScpXG5cdFx0KSB7XG5cdFx0XHRUd2lua2xlLnRhZy5tb2RlID0gd2luZG93LndnVUxTKCfmlofku7YnLCAn5qqU5qGIJyk7XG5cdFx0XHRUd2lua2xlLnRhZy5tb2RlRW4gPSAnZmlsZSc7XG5cdFx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0XHRUd2lua2xlLnRhZy5jYWxsYmFjayxcblx0XHRcdFx0d2luZG93LndnVUxTKCfmoIforrAnLCAn5qiZ6KiYJyksXG5cdFx0XHRcdCdmcmllbmRseS10YWcnLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+agh+iusOaWh+S7ticsICfmqJnoqJjmqpTmoYgnKVxuXHRcdFx0KTtcblx0XHRcdC8vIGFydGljbGUvZHJhZnQgdGFnZ2luZ1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoWzAsIDMwMl0uaW5jbHVkZXMobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSkgJiYgbXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJykpIHx8XG5cdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gPT09IFR3aW5rbGUuZ2V0UHJlZignc2FuZGJveFBhZ2UnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS50YWcubW9kZSA9IHdpbmRvdy53Z1VMUygn5p2h55uuJywgJ+aineebricpO1xuXHRcdFx0VHdpbmtsZS50YWcubW9kZUVuID0gJ2FydGljbGUnO1xuXHRcdFx0Ly8gQ2FuJ3QgcmVtb3ZlIHRhZ3Mgd2hlbiBub3Qgdmlld2luZyBjdXJyZW50IHZlcnNpb25cblx0XHRcdFR3aW5rbGUudGFnLmNhblJlbW92ZSA9XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpID09PSBtdy5jb25maWcuZ2V0KCd3Z1JldmlzaW9uSWQnKSAmJlxuXHRcdFx0XHQvLyBEaXNhYmxlZCBvbiBsYXRlc3QgZGlmZiBiZWNhdXNlIHRoZSBkaWZmIHNsaWRlciBjb3VsZCBiZSB1c2VkIHRvIHNsaWRlXG5cdFx0XHRcdC8vIGF3YXkgZnJvbSB0aGUgbGF0ZXN0IGRpZmYgd2l0aG91dCBjYXVzaW5nIHRoZSBzY3JpcHQgdG8gcmVsb2FkXG5cdFx0XHRcdCFtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpO1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFx0VHdpbmtsZS50YWcuY2FsbGJhY2ssXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5qCH6K6wJywgJ+aomeiomCcpLFxuXHRcdFx0XHQnZnJpZW5kbHktdGFnJyxcblx0XHRcdFx0d2luZG93LndnVUxTKCfmoIforrDmnaHnm64nLCAn5qiZ6KiY5qKd55uuJylcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLnRhZy5jaGVja2VkVGFncyA9IFtdO1xuXHRUd2lua2xlLnRhZy5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYzMCwgVHdpbmtsZS50YWcubW9kZUVuID09PSAnYXJ0aWNsZScgPyA1MDAgOiA0MDApO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCfmoIforrDorr7nva4nLCAn5qiZ6KiY6Kit5a6aJyksICdIOlRXL1BSRUYjdGFnJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCdUd2lua2xl5biu5YqpJywgJ1R3aW5rbGXoqqrmmI4nKSwgJ0g6VFcvRE9DI3RhZycpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUudGFnLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn562b6YCJ5qCH6K6w5YiX6KGo77yaJywgJ+evqemBuOaomeiomOWIl+ihqO+8micpLFxuXHRcdFx0bmFtZTogJ3F1aWNrZmlsdGVyJyxcblx0XHRcdHNpemU6ICczMCcsXG5cdFx0XHRldmVudDogZnVuY3Rpb24gZXZlbnQoKSB7XG5cdFx0XHRcdC8vIGZsdXNoIHRoZSBET00gb2YgYWxsIGV4aXN0aW5nIHVuZGVybGluZSBzcGFuc1xuXHRcdFx0XHQkYWxsQ2hlY2tib3hEaXZzLmZpbmQoJy5zZWFyY2gtaGl0JykuZWFjaCgoX2ksIGUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBsYWJlbF9lbGVtZW50ID0gZS5wYXJlbnRFbGVtZW50O1xuXHRcdFx0XHRcdC8vIFRoaXMgd291bGQgY29udmVydCA8bGFiZWw+SGVsbG8gPHNwYW4gY2xhc3M9c2VhcmNoLWhpdD53bzwvc3Bhbj5ybGQ8L2xhYmVsPlxuXHRcdFx0XHRcdC8vIHRvIDxsYWJlbD5IZWxsbyB3b3JsZDwvbGFiZWw+XG5cdFx0XHRcdFx0bGFiZWxfZWxlbWVudC5pbm5lckhUTUwgPSBsYWJlbF9lbGVtZW50LnRleHRDb250ZW50O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKHRoaXMudmFsdWUpIHtcblx0XHRcdFx0XHQkYWxsQ2hlY2tib3hEaXZzLmhpZGUoKTtcblx0XHRcdFx0XHQkYWxsSGVhZGVycy5oaWRlKCk7XG5cdFx0XHRcdFx0Y29uc3Qgc2VhcmNoU3RyaW5nID0gdGhpcy52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCBzZWFyY2hSZWdleCA9IG5ldyBSZWdFeHAobXcudXRpbC5lc2NhcGVSZWdFeHAoc2VhcmNoU3RyaW5nKSwgJ2knKTtcblx0XHRcdFx0XHQkYWxsQ2hlY2tib3hEaXZzLmZpbmQoJ2xhYmVsJykuZWFjaCgoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBsYWJlbF90ZXh0ID0gZWxlbWVudC50ZXh0Q29udGVudDtcblx0XHRcdFx0XHRcdGNvbnN0IHNlYXJjaEhpdCA9IHNlYXJjaFJlZ2V4LmV4ZWMobGFiZWxfdGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VhcmNoSGl0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgW3RleHRub2RlXSA9IGVsZW1lbnQuY2hpbGROb2Rlcztcblx0XHRcdFx0XHRcdFx0cmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRleHRub2RlKTtcblx0XHRcdFx0XHRcdFx0cmFuZ2Uuc2V0U3RhcnQodGV4dG5vZGUsIHNlYXJjaEhpdC5pbmRleCk7XG5cdFx0XHRcdFx0XHRcdHJhbmdlLnNldEVuZCh0ZXh0bm9kZSwgc2VhcmNoSGl0LmluZGV4ICsgc2VhcmNoU3RyaW5nLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IFt1bmRlcmxpbmVfc3Bhbl0gPSAkKCc8c3Bhbj4nKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRDbGFzcygnc2VhcmNoLWhpdCcpXG5cdFx0XHRcdFx0XHRcdFx0LmNzcygndGV4dC1kZWNvcmF0aW9uJywgJ3VuZGVybGluZScpO1xuXHRcdFx0XHRcdFx0XHRyYW5nZS5zdXJyb3VuZENvbnRlbnRzKHVuZGVybGluZV9zcGFuKTtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyAvLyBzaG93XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JGFsbENoZWNrYm94RGl2cy5zaG93KCk7XG5cdFx0XHRcdFx0JGFsbEhlYWRlcnMuc2hvdygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHRcdHN3aXRjaCAoVHdpbmtsZS50YWcubW9kZUVuKSB7XG5cdFx0XHRjYXNlICdhcnRpY2xlJzpcblx0XHRcdFx0V2luZG93LnNldFRpdGxlKHdpbmRvdy53Z1VMUygn5p2h55uu57u05oqk5qCH6K6wJywgJ+aineebrue2reitt+aomeiomCcpKTtcblx0XHRcdFx0Ly8gQnVpbGQgc29ydGluZyBhbmQgbG9va3VwIG9iamVjdCBmbGF0T2JqZWN0LCB3aGljaCBpcyBhbHdheXNcblx0XHRcdFx0Ly8gbmVlZGVkIGJ1dCBhbHNvIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGFscGhhYmV0aWNhbCBsaXN0XG5cdFx0XHRcdC8vIFdvdWxkIGJlIGluZmluaXRlbHkgYmV0dGVyIHdpdGggT2JqZWN0LnZhbHVlc1xuXHRcdFx0XHRUd2lua2xlLnRhZy5hcnRpY2xlLmZsYXRPYmplY3QgPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBncm91cCBvZiBUd2lua2xlLnRhZy5hcnRpY2xlLnRhZ0xpc3QpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHN1Ymdyb3VwIG9mIGdyb3VwLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHRpZiAoc3ViZ3JvdXAudmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHN1Ymdyb3VwLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0VHdpbmtsZS50YWcuYXJ0aWNsZS5mbGF0T2JqZWN0W2l0ZW0udGFnXSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXhjbHVkZU1JOiAhIWl0ZW0uZXhjbHVkZU1JLFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFtzdWJncm91cC50YWddID0ge1xuXHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBzdWJncm91cC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdFx0XHRleGNsdWRlTUk6ICEhc3ViZ3JvdXAuZXhjbHVkZU1JLFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NvcnRvcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p+l55yL5YiX6KGo77yaJywgJ+aqouimluWIl+ihqO+8micpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XlnKhUd2lua2xl5Y+C5pWw6K6+572u77yISDpUVy9QUkVG77yJ5Lit5pu05pS55q2k6aG544CCJyxcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XlnKhUd2lua2xl5YGP5aW96Kit5a6a77yISDpUVy9QUkVG77yJ5Lit5pu05pS55q2k6aCF44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUudGFnLnVwZGF0ZVNvcnRPcmRlcixcblx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2NhdCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aMieexu+WeiycsICfmjInpoZ7liKUnKSxcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IFR3aW5rbGUuZ2V0UHJlZigndGFnQXJ0aWNsZVNvcnRPcmRlcicpID09PSAnY2F0Jyxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2FscGhhJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6ICfmjInlrZfmr40nLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZDogVHdpbmtsZS5nZXRQcmVmKCd0YWdBcnRpY2xlU29ydE9yZGVyJykgPT09ICdhbHBoYScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoIVR3aW5rbGUudGFnLmNhblJlbW92ZSkge1xuXHRcdFx0XHRcdGNvbnN0IGRpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0XHRkaXZFbGVtZW50LmlubmVySFRNTCA9IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfopoHnp7vpmaTnjrDmnInnu7TmiqTmoIforrDvvIzor7fku47lvZPliY3mnaHnm67niYjmnKzkuK3miZPlvIDigJzmoIforrDigJ3oj5zljZUnLFxuXHRcdFx0XHRcdFx0J+imgeenu+mZpOePvuaciee2reitt+aomeiomO+8jOiri+W+nuebruWJjeaineebrueJiOacrOS4reaJk+mWi+OAjOaomeiomOOAjemBuOWWridcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3VudGFnbm90aWNlJyxcblx0XHRcdFx0XHRcdGxhYmVsOiBkaXZFbGVtZW50LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogJ3RhZ1dvcmtBcmVhJyxcblx0XHRcdFx0XHRjbGFzc05hbWU6ICdtb3JlYml0cy1zY3JvbGxib3gnLFxuXHRcdFx0XHRcdHN0eWxlOiAnbWF4LWhlaWdodDogMjhlbScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WmguWPr+iDve+8jOWQiOW5tuWFpXt7bXVsdGlwbGUgaXNzdWVzfX0nLFxuXHRcdFx0XHRcdFx0XHRcdCflpoLlj6/og73vvIzlkIjkvbXlhaV7e211bHRpcGxlIGlzc3Vlc319J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2dyb3VwJyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ2dyb3VwJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfoi6XliqDlhaV7e211bHRpcGxlIGlzc3Vlc3195pSv5oyB55qE5LiJ5Liq5Lul5LiK55qE5qih5p2/77yM5omA5pyJ5pSv5oyB55qE5qih5p2/6YO95Lya6KKr5ZCI5bm25YWle3ttdWx0aXBsZSBpc3N1ZXN9feaooeadv+S4reOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+iLpeWKoOWFpXt7bXVsdGlwbGUgaXNzdWVzfX3mlK/mj7TnmoTkuInlgIvku6XkuIrnmoTmqKHmnb/vvIzmiYDmnInmlK/mj7TnmoTmqKHmnb/pg73mnIPooqvlkIjkvbXlhaV7e211bHRpcGxlIGlzc3Vlc3195qih5p2/5Lit44CCJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiBUd2lua2xlLmdldFByZWYoJ2dyb3VwQnlEZWZhdWx0JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRsYWJlbDogJ+eQhueUse+8micsXG5cdFx0XHRcdFx0bmFtZTogJ3JlYXNvbicsXG5cdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+mZhOWKoOS6jue8lui+keaRmOimgeeahOWPr+mAieeQhueUse+8jOS+i+WmguaMh+WHuuadoeebruWGheWuueeahOWTquS6m+mDqOWIhuaciemXrumimOaIluenu+mZpOaooeadv+eahOeQhueUse+8jOS9huiLpeeQhueUseW+iOmVv+WImeW6lOivpeWPkeihqOWcqOiuqOiuuumhteOAgicsXG5cdFx0XHRcdFx0XHQn6ZmE5Yqg5pa857eo6Lyv5pGY6KaB55qE5Y+v6YG455CG55Sx77yM5L6L5aaC5oyH5Ye65qKd55uu5YWn5a6555qE5ZOq5Lqb6YOo5YiG5pyJ5ZWP6aGM5oiW56e76Zmk5qih5p2/55qE55CG55Sx77yM5L2G6Iul55CG55Sx5b6I6ZW35YmH5oeJ6Kmy55m86KGo5Zyo6KiO6KuW6aCB44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0c2l6ZTogJzgwJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZmlsZSc6XG5cdFx0XHRcdFdpbmRvdy5zZXRUaXRsZSh3aW5kb3cud2dVTFMoJ+aWh+S7tue7tOaKpOagh+iusCcsICfmqpTmoYjntq3orbfmqJnoqJgnKSk7XG5cdFx0XHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgVHdpbmtsZS50YWcuZmlsZUxpc3QpIHtcblx0XHRcdFx0XHRpZiAoZ3JvdXAuYnVpbGRGaWxlbmFtZSkge1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBncm91cC52YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRlbC5zdWJncm91cCA9IHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+abv+aNoueahOaWh+S7tu+8micsICfmm7/mj5vnmoTmqpTmoYjvvJonKSxcblx0XHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn6L6T5YWl5pu/5o2i5q2k5paH5Lu255qE5paH5Lu25ZCN56ew77yI5b+F5aGr77yJJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfovLjlhaXmm7/mj5vmraTmqpTmoYjnmoTmqpTmoYjlkI3nqLHvvIjlv4XloavvvIknXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBgJHtlbC52YWx1ZS5yZXBsYWNlKC8gL2csICdfJyl9RmlsZWAsXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGdyb3VwLmtleSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3RhZ3MnLFxuXHRcdFx0XHRcdFx0bGlzdDogZ3JvdXAudmFsdWUsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tRmlsZVRhZ0xpc3QnKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieaooeadvycsICfoh6roqILmqKHmnb8nKSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3RhZ3MnLFxuXHRcdFx0XHRcdFx0bGlzdDogVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21GaWxlVGFnTGlzdCcpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAncmVkaXJlY3QnOiB7XG5cdFx0XHRcdFdpbmRvdy5zZXRUaXRsZSh3aW5kb3cud2dVTFMoJ+mHjeWumuWQkeagh+iusCcsICfph43mlrDlsI7lkJHmqJnoqJgnKSk7XG5cdFx0XHRcdGNvbnN0IGkgPSAxO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGdyb3VwIG9mIFR3aW5rbGUudGFnLnJlZGlyZWN0TGlzdCkge1xuXHRcdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdoZWFkZXInLFxuXHRcdFx0XHRcdFx0aWQ6IGB0YWdIZWFkZXIke2l9YCxcblx0XHRcdFx0XHRcdGxhYmVsOiBncm91cC5rZXksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICd0YWdzJyxcblx0XHRcdFx0XHRcdGxpc3Q6IGdyb3VwLnZhbHVlLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtLnRhZyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7JHtpdGVtLnRhZ319fe+8miR7aXRlbS5kZXNjcmlwdGlvbn1gLFxuXHRcdFx0XHRcdFx0XHRcdHN1Ymdyb3VwOiBpdGVtLnN1Ymdyb3VwLFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tUmVkaXJlY3RUYWdMaXN0JykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnmqKHmnb8nLCAn6Ieq6KiC5qih5p2/JyksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICd0YWdzJyxcblx0XHRcdFx0XHRcdGxpc3Q6IFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tUmVkaXJlY3RUYWdMaXN0JyksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtdy5ub3RpZnkoYFR3aW5rbGUudGFn77ya5pyq55+l5qih5byPICR7VHdpbmtsZS50YWcubW9kZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ2ZyaWVuZGx5dGFnJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBhdHJvbGxpbmsnKS5sZW5ndGgpIHtcblx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOmhtemdouS4uuW3suW3oeafpScsICfmqJnoqJjpoIHpnaLngrrlt7Llt6Hmn6UnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAncGF0cm9sJyxcblx0XHRcdFx0XHRcdG5hbWU6ICdwYXRyb2wnLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogVHdpbmtsZS5nZXRQcmVmKCdtYXJrVGFnZ2VkUGFnZXNBc1BhdHJvbGxlZCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0XHRjbGFzc05hbWU6ICd0dy10YWctc3VibWl0Jyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHQvLyBmb3IgcXVpY2sgZmlsdGVyOlxuXHRcdCRhbGxDaGVja2JveERpdnMgPSAkKHJlc3VsdCkuZmluZCgnW25hbWUkPXRhZ3NdJykucGFyZW50KCk7XG5cdFx0JGFsbEhlYWRlcnMgPSAkKHJlc3VsdCkuZmluZCgnaDUnKTtcblx0XHRyZXN1bHQucXVpY2tmaWx0ZXIuZm9jdXMoKTsgLy8gcGxhY2UgY3Vyc29yIGluIHRoZSBxdWljayBmaWx0ZXIgZmllbGQgYXMgc29vbiBhcyB3aW5kb3cgaXMgb3BlbmVkXG5cdFx0cmVzdWx0LnF1aWNrZmlsdGVyLmF1dG9jb21wbGV0ZSA9ICdvZmYnOyAvLyBkaXNhYmxlIGJyb3dzZXIgc3VnZ2VzdGlvbnNcblx0XHRyZXN1bHQucXVpY2tmaWx0ZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAoZSkgPT4ge1xuXHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG5cdFx0XHRcdC8vIHByZXZlbnQgZW50ZXIga2V5IGZyb20gYWNjaWRlbnRhbGx5IHN1Ym1pdHRpbmcgdGhlIGZvcm1cblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKFR3aW5rbGUudGFnLm1vZGVFbiA9PT0gJ2FydGljbGUnKSB7XG5cdFx0XHRUd2lua2xlLnRhZy5hbHJlYWR5UHJlc2VudFRhZ3MgPSBbXTtcblx0XHRcdGlmIChUd2lua2xlLnRhZy5jYW5SZW1vdmUpIHtcblx0XHRcdFx0Ly8gTG9vayBmb3IgZXhpc3RpbmcgbWFpbnRlbmFuY2UgdGFncyBpbiB0aGUgbGVhZCBzZWN0aW9uIGFuZCBwdXQgdGhlbSBpbiBhcnJheVxuXHRcdFx0XHQvLyBBbGwgdGFncyBhcmUgSFRNTCB0YWJsZSBlbGVtZW50cyB0aGF0IGFyZSBkaXJlY3QgY2hpbGRyZW4gb2YgLm13LXBhcnNlci1vdXRwdXQsXG5cdFx0XHRcdC8vIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIHdpdGhpbiB7e211bHRpcGxlIGlzc3Vlc319XG5cdFx0XHRcdCRib2R5XG5cdFx0XHRcdFx0LmZpbmQoJy5tdy1wYXJzZXItb3V0cHV0Jylcblx0XHRcdFx0XHQuY2hpbGRyZW4oKVxuXHRcdFx0XHRcdC5lYWNoKChfaSwgZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gYnJlYWsgb3V0IG9uIGVuY291bnRlcmluZyB0aGUgZmlyc3QgaGVhZGluZywgd2hpY2ggbWVhbnMgd2UgYXJlIG5vXG5cdFx0XHRcdFx0XHQvLyBsb25nZXIgaW4gdGhlIGxlYWQgc2VjdGlvblxuXHRcdFx0XHRcdFx0aWYgKGUudGFnTmFtZSA9PT0gJ0gyJykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBUaGUgYWJpbGl0eSB0byByZW1vdmUgdGFncyBkZXBlbmRzIG9uIHRoZSB0ZW1wbGF0ZSdzIHt7YW1ib3h9fSB8bmFtZT1cblx0XHRcdFx0XHRcdC8vIHBhcmFtZXRlciBiZWFyaW5nIHRoZSB0ZW1wbGF0ZSdzIGNvcnJlY3QgbmFtZSAocHJlZmVyYWJseSkgb3IgYSBuYW1lIHRoYXQgYXRcblx0XHRcdFx0XHRcdC8vIGxlYXN0IHJlZGlyZWN0cyB0byB0aGUgYWN0dWFsIG5hbWVcblx0XHRcdFx0XHRcdC8vIEFsbCB0YWdzIGhhdmUgdGhlaXIgZmlyc3QgY2xhc3MgbmFtZSBhcyBcImJveC1cIiArIHRlbXBsYXRlIG5hbWVcblx0XHRcdFx0XHRcdGlmIChlLmNsYXNzTmFtZS5pbmRleE9mKCdib3gtJykgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKGUuY2xhc3NMaXN0WzBdID09PSAnYm94LemXrumimOadoeebricpIHtcblx0XHRcdFx0XHRcdFx0XHQkKGUpXG5cdFx0XHRcdFx0XHRcdFx0XHQuZmluZCgnLmFtYm94Jylcblx0XHRcdFx0XHRcdFx0XHRcdC5lYWNoKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuY2xhc3NMaXN0WzBdLmluZGV4T2YoJ2JveC0nKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGJveFRhZyA9IGVsZW1lbnQuY2xhc3NMaXN0WzBdLnNsaWNlKCdib3gtJy5sZW5ndGgpLnJlcGxhY2UoL18vZywgJyAnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRUd2lua2xlLnRhZy5hbHJlYWR5UHJlc2VudFRhZ3MucHVzaChib3hUYWcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gY29udGludWVcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhZyA9IGUuY2xhc3NMaXN0WzBdLnNsaWNlKCdib3gtJy5sZW5ndGgpLnJlcGxhY2UoL18vZywgJyAnKTtcblx0XHRcdFx0XHRcdFx0VHdpbmtsZS50YWcuYWxyZWFkeVByZXNlbnRUYWdzLnB1c2godGFnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0Ly8ge3tVbmNhdGVnb3JpemVkfX0gYW5kIHt7SW1wcm92ZSBjYXRlZ29yaWVzfX0gYXJlIHVzdWFsbHkgcGxhY2VkIGF0IHRoZSBlbmRcblx0XHRcdFx0aWYgKCRib2R5LmZpbmQoJy5ib3gtVW5jYXRlZ29yaXplZCcpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFR3aW5rbGUudGFnLmFscmVhZHlQcmVzZW50VGFncy5wdXNoKCdVbmNhdGVnb3JpemVkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCRib2R5LmZpbmQoJy5ib3gtSW1wcm92ZV9jYXRlZ29yaWVzJykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS50YWcuYWxyZWFkeVByZXNlbnRUYWdzLnB1c2goJ0ltcHJvdmUgY2F0ZWdvcmllcycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBBZGQgc3RhdHVzIHRleHQgbm9kZSBhZnRlciBTdWJtaXQgYnV0dG9uXG5cdFx0XHRjb25zdCBzdGF0dXNOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdFx0c3RhdHVzTm9kZS5zdHlsZS5mb250U2l6ZSA9ICc5MCUnO1xuXHRcdFx0c3RhdHVzTm9kZS5pZCA9ICd0dy10YWctc3RhdHVzJztcblx0XHRcdFR3aW5rbGUudGFnLnN0YXR1cyA9IHtcblx0XHRcdFx0Ly8gaW5pdGlhbCBzdGF0ZTsgZGVmaW5lZCBsaWtlIHRoaXMgYmVjYXVzZSB0aGVzZSBuZWVkIHRvIGJlIGF2YWlsYWJsZSBmb3IgcmVmZXJlbmNlXG5cdFx0XHRcdC8vIGluIHRoZSBjbGljayBldmVudCBoYW5kbGVyXG5cdFx0XHRcdG51bUFkZGVkOiAwLFxuXHRcdFx0XHRudW1SZW1vdmVkOiAwLFxuXHRcdFx0fTtcblx0XHRcdCRib2R5LmZpbmQoJ2J1dHRvbi50dy10YWctc3VibWl0JykuYWZ0ZXIoc3RhdHVzTm9kZSk7XG5cdFx0XHQvLyBmYWtlIGEgY2hhbmdlIGV2ZW50IG9uIHRoZSBzb3J0IGRyb3Bkb3duLCB0byBpbml0aWFsaXplIHRoZSB0YWcgbGlzdFxuXHRcdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRcdHJlc3VsdC5zb3J0b3JkZXIuZGlzcGF0Y2hFdmVudChldnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZWRpcmVjdHMgYW5kIGZpbGVzOiBBZGQgYSBsaW5rIHRvIGVhY2ggdGVtcGxhdGUncyBkZXNjcmlwdGlvbiBwYWdlXG5cdFx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyZXN1bHQsICd0YWdzJykpIHtcblx0XHRcdFx0Z2VuZXJhdGVMaW5rcyhjaGVja2JveCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHQvLyAkYWxsQ2hlY2tib3hEaXZzIGFuZCAkYWxsSGVhZGVycyBhcmUgZGVmaW5lZCBnbG9iYWxseSwgcmF0aGVyIHRoYW4gaW4gdGhlXG5cdC8vIHF1aWNrZmlsdGVyIGV2ZW50IGZ1bmN0aW9uLCB0byBhdm9pZCBoYXZpbmcgdG8gcmVjb21wdXRlIHRoZW0gb24gZXZlcnkga2V5ZG93blxuXHRsZXQgJGFsbENoZWNrYm94RGl2cztcblx0bGV0ICRhbGxIZWFkZXJzO1xuXHRUd2lua2xlLnRhZy51cGRhdGVTb3J0T3JkZXIgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHtmb3JtfSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHNvcnRvcmRlciA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdFR3aW5rbGUudGFnLmNoZWNrZWRUYWdzID0gZm9ybS5nZXRDaGVja2VkKCd0YWdzJyk7XG5cdFx0Y29uc3QgY29udGFpbmVyID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdHR5cGU6ICdmcmFnbWVudCcsXG5cdFx0fSk7XG5cdFx0Ly8gZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBjaGVja2JveCwgd2l0aCBhcHByb3ByaWF0ZSBzdWJncm91cCBpZiBuZWVkZWRcblx0XHRjb25zdCBtYWtlQ2hlY2tib3ggPSAodGFnLCBkZXNjcmlwdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY2hlY2tib3ggPSB7XG5cdFx0XHRcdHZhbHVlOiB0YWcsXG5cdFx0XHRcdGxhYmVsOiBge3ske3RhZ319fTogJHtkZXNjcmlwdGlvbn1gLFxuXHRcdFx0fTtcblx0XHRcdGlmIChUd2lua2xlLnRhZy5jaGVja2VkVGFncy5pbmNsdWRlcyh0YWcpKSB7XG5cdFx0XHRcdGNoZWNrYm94LmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoICh0YWcpIHtcblx0XHRcdFx0Y2FzZSAnRXhwZXJ0IG5lZWRlZCc6XG5cdFx0XHRcdFx0Y2hlY2tib3guc3ViZ3JvdXAgPSBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdleHBlcnQnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflk6rkuKrpoobln5/nmoTkuJPlrrbvvIjlv4XloavvvInvvJonLCAn5ZOq5YCL6aCY5Z+f55qE5bCI5a6277yI5b+F5aGr77yJ77yaJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5b+F5aGr77yM5Y+v5Y+C6ICDIENhdGVnb3J5OumcgOimgeS4k+S4muS6uuWjq+WFs+azqOeahOmhtemdoiDkvb/nlKjnjrDlrZjnmoTliIbnsbvjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCflv4XloavvvIzlj6/lj4PogIMgQ2F0ZWdvcnk66ZyA6KaB5bCI5qWt5Lq65aOr6Zec5rOo55qE6aCB6Z2iIOS9v+eUqOePvuWtmOeahOWIhumhnuOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdleHBlcnQyJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5ZOq5Liq6aKG5Z+f55qE5LiT5a6277yaJywgJ+WTquWAi+mgmOWfn+eahOWwiOWutu+8micpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mAie+8jOWPr+WPguiAgyBDYXRlZ29yeTrpnIDopoHkuJPkuJrkurrlo6vlhbPms6jnmoTpobXpnaIg5L2/55So546w5a2Y55qE5YiG57G744CCJyxcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6YG477yM5Y+v5Y+D6ICDIENhdGVnb3J5OumcgOimgeWwiOalreS6uuWjq+mXnOazqOeahOmggemdoiDkvb/nlKjnj77lrZjnmoTliIbpoZ7jgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnZXhwZXJ0MycsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WTquS4qumihuWfn+eahOS4k+Wutu+8micsICflk6rlgIvpoJjln5/nmoTlsIjlrrbvvJonKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflj6/pgInvvIzlj6/lj4LogIMgQ2F0ZWdvcnk66ZyA6KaB5LiT5Lia5Lq65aOr5YWz5rOo55qE6aG16Z2iIOS9v+eUqOeOsOWtmOeahOWIhuexu+OAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mBuO+8jOWPr+WPg+iAgyBDYXRlZ29yeTrpnIDopoHlsIjmpa3kurrlo6vpl5zms6jnmoTpoIHpnaIg5L2/55So54++5a2Y55qE5YiG6aGe44CCJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdNZXJnZSc6XG5cdFx0XHRcdGNhc2UgJ01lcmdlIGZyb20nOlxuXHRcdFx0XHRjYXNlICdNZXJnZSB0byc6IHtcblx0XHRcdFx0XHRsZXQgb3RoZXJUYWdOYW1lID0gJ01lcmdlJztcblx0XHRcdFx0XHRzd2l0Y2ggKHRhZykge1xuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UgZnJvbSc6XG5cdFx0XHRcdFx0XHRcdG90aGVyVGFnTmFtZSA9ICdNZXJnZSB0byc7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UgdG8nOlxuXHRcdFx0XHRcdFx0XHRvdGhlclRhZ05hbWUgPSAnTWVyZ2UgZnJvbSc7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnbWVyZ2VUYXJnZXQnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhbbku5bmnaHnm67vvJonLCAn5YW25LuW5qKd55uu77yaJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5aaC5oyH5a6a5aSa5Liq5p2h55uu77yM6K+355So566h6YGT56ym5YiG6ZqU77ya5p2h55uu55SyfOadoeebruS5mScsXG5cdFx0XHRcdFx0XHRcdFx0J+WmguaMh+WumuWkmuWAi+aineebru+8jOiri+eUqOeuoemBk+espuWIhumalO+8muaineebrueUsnzmop3nm67kuZknXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogJ21lcmdlVGFnT3RoZXInLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGDnlKh7eyR7b3RoZXJUYWdOYW1lfSR7d2luZG93LndnVUxTKCd9feagh+iusOWFtuS7luadoeebricsICd9feaomeiomOWFtuS7luaineebricpfWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQn5LuF5Zyo5Y+q6L6T5YWl5LqG5LiA5Liq5p2h55uu5ZCN5pe25Y+v55SoJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0J+WDheWcqOWPqui8uOWFpeS6huS4gOWAi+aineebruWQjeaZguWPr+eUqCdcblx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Y2hlY2tib3guc3ViZ3JvdXAucHVzaCh7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdtZXJnZVJlYXNvbicsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICd0ZXh0YXJlYScsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0YOWQiOW5tueQhueUse+8iOS8muiiq+i0tOS4iiR7dGFnID09PSAnTWVyZ2UgdG8nID8gJ+WFtuS7licgOiAn6L+ZJ33mnaHnm67nmoTorqjorrrpobXvvInvvJpgLFxuXHRcdFx0XHRcdFx0XHRcdGDlkIjkvbXnkIbnlLHvvIjmnIPooqvosrzkuIoke3RhZyA9PT0gJ01lcmdlIHRvJyA/ICflhbbku5YnIDogJ+mAmSd95qKd55uu55qE6KiO6KuW6aCB77yJ77yaYFxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mAie+8jOS9huW8uueDiOaOqOiNkOOAguWmguS4jemcgOimgeivt+eVmeepuuOAguS7heWcqOWPqui+k+WFpeS6huS4gOS4quadoeebruWQjeaXtuWPr+eUqOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mBuO+8jOS9huW8t+eDiOaOqOiWpuOAguWmguS4jemcgOimgeiri+eVmeepuuOAguWDheWcqOWPqui8uOWFpeS6huS4gOWAi+aineebruWQjeaZguWPr+eUqOOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlICdNaXNzaW5nIGluZm9ybWF0aW9uJzpcblx0XHRcdFx0XHRjaGVja2JveC5zdWJncm91cCA9IHtcblx0XHRcdFx0XHRcdG5hbWU6ICdtaXNzaW5nSW5mb3JtYXRpb24nLFxuXHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+e8uuWwkeeahOWGheWuue+8iOW/heWhq++8ie+8micsICfnvLrlsJHnmoTlhaflrrnvvIjlv4XloavvvInvvJonKSxcblx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5b+F5aGr77yM5pi+56S65Li64oCc57y65bCR5pyJ5YWz4oCm4oCm55qE5L+h5oGv44CC4oCdJywgJ+W/heWhq++8jOmhr+ekuueCuuOAjOe8uuWwkeaciemXnOKApuKApueahOizh+ioiuOAguOAjScpLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ05vdGFiaWxpdHknOlxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0ge1xuXHRcdFx0XHRcdFx0bmFtZTogJ25vdGFiaWxpdHknLFxuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7Tm90YWJpbGl0eX1977yaJHt3aW5kb3cud2dVTFMoJ+mAmueUqOeahOWFs+azqOW6puaMh+W8lScsICfpgJrnlKjnmoTpl5zms6jluqbmjIflvJUnKX1gLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7Tm90YWJpbGl0eXxBc3Ryb31977yaJHt3aW5kb3cud2dVTFMoJ+WkqeS9kycsICflpKnpq5QnKX1gLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnQXN0cm8nLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGB7e05vdGFiaWxpdHl8QmlvZ3JhcGhpZXN9fe+8miR7d2luZG93LndnVUxTKCfkurrniankvKDorrAnLCAn5Lq654mp5YKz6KiYJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ0Jpb2dyYXBoaWVzJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fEJvb2t9fe+8miR7d2luZG93LndnVUxTKCfkuabnsY0nLCAn5pu457GNJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ0Jvb2snLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGB7e05vdGFiaWxpdHl8Q3ljbG9uZX1977yaJHt3aW5kb3cud2dVTFMoJ+awlOaXiycsICfmsKPml4snKX1gLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnQ3ljbG9uZScsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7Tm90YWJpbGl0eXxGaWN0aW9ufX3vvJoke3dpbmRvdy53Z1VMUygn6Jma5p6E5LqL54mpJywgJ+iZm+ani+S6i+eJqScpfWAsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdGaWN0aW9uJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fEdlb2dyYXBoaWN9fe+8miR7d2luZG93LndnVUxTKCflnLDnkIbnibnlvoEnLCAn5Zyw55CG54m55b61Jyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ0dlb2dyYXBoaWMnLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGB7e05vdGFiaWxpdHl8R2VvbWV0cnl9fe+8miR7d2luZG93LndnVUxTKCflh6DkvZXlm77lvaInLCAn5bm+5L2V5ZyW5b2iJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ0dlb21ldHJ5Jyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fEludmVudGlvbn1977yaJHt3aW5kb3cud2dVTFMoJ+WPkeaYjuOAgeeglOepticsICfnmbzmmI7jgIHnoJTnqbYnKX1gLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnSW52ZW50aW9uJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fE11c2ljfX3vvJoke3dpbmRvdy53Z1VMUygn6Z+z5LmQJywgJ+mfs+aogicpfWAsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdNdXNpYycsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYHt7Tm90YWJpbGl0eXxOdW1iZXJzfX3vvJoke3dpbmRvdy53Z1VMUygn5pWw5a2XJywgJ+aVuOWtlycpfWAsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdOdW1iZXJzJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fE9yZ2FuaXphdGlvbnN9fe+8miR7d2luZG93LndnVUxTKCfnu4Tnu4cnLCAn57WE57mUJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ09yZ2FuaXphdGlvbnMnLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGB7e05vdGFiaWxpdHl8UHJvcGVydHl9fe+8miR7d2luZG93LndnVUxTKCfmgKfotKjooagnLCAn5oCn6LOq6KGoJyl9YCxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ1Byb3BlcnR5Jyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAne3tOb3RhYmlsaXR5fFRyYWZmaWN9fe+8muS6pOmAmicsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdUcmFmZmljJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBge3tOb3RhYmlsaXR5fFdlYn1977yaJHt3aW5kb3cud2dVTFMoJ+e9keermeOAgee9kee7nOWGheWuuScsICfntrLnq5njgIHntrLot6/lhaflrrknKX3vvIjpnZ7mraPlvI/mjIflvJXvvIlgLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAnV2ViJyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnUmVxdWVzdGVkIG1vdmUnOlxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnbW92ZVRhcmdldCcsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWsOWQjeensO+8micsICfmlrDlkI3nqLHvvJonKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdtb3ZlUmVhc29uJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn56e75Yqo55CG55Sx77yI5Lya6KKr57KY6LS06K+l5p2h55uu55qE6K6o6K666aG177yJ77yaJyxcblx0XHRcdFx0XHRcdFx0XHQn56e75YuV55CG55Sx77yI5pyD6KKr6LK85LiK6Kmy5qKd55uu55qE6KiO6KuW6aCB77yJ77yaJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mAie+8jOS9huW8uueDiOaOqOiNkOOAguWmguS4jemcgOimgeivt+eVmeepuuOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+mBuO+8jOS9huW8t+eDiOaOqOiWpuOAguWmguS4jemcgOimgeiri+eVmeepuuOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnU3BsaXQnOlxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAndGFyZ2V0MScsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mhtemdouWQjTHvvJonLCAn6aCB6Z2i5ZCNMe+8micpLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+WPr+mAieOAgicsICflj6/pgbjjgIInKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG5hbWU6ICd0YXJnZXQyJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6aG16Z2i5ZCNMu+8micsICfpoIHpnaLlkI0y77yaJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn5Y+v6YCJ44CCJywgJ+WPr+mBuOOAgicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3RhcmdldDMnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpobXpnaLlkI0z77yaJywgJ+mggemdouWQjTPvvJonKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKCflj6/pgInjgIInLCAn5Y+v6YG444CCJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0NsZWFudXAnOlxuXHRcdFx0XHRcdGNoZWNrYm94LnN1Ymdyb3VwID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnY2xlYW51cFJlYXNvbicsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn6ZyA6KaB5riF55CG55qE55CG55SxJyxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflj6/pgInvvIzkvYblvLrng4jmjqjojZDjgILlpoLkuI3pnIDopoHor7fnlZnnqbrjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCflj6/pgbjvvIzkvYblvLfng4jmjqjolqbjgILlpoLkuI3pnIDopoHoq4vnlZnnqbrjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2hlY2tib3g7XG5cdFx0fTtcblx0XHRjb25zdCBtYWtlQ2hlY2tib3hlc0ZvckFscmVhZHlQcmVzZW50VGFncyA9ICgpID0+IHtcblx0XHRcdGNvbnRhaW5lci5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0aWQ6ICd0YWdIZWFkZXIwJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bey5pS+572u55qE57u05oqk5qCH6K6wJywgJ+W3suaUvue9rueahOe2reitt+aomeiomCcpLFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzdWJkaXYgPSBjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdGlkOiAndGFnU3ViZGl2MCcsXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGNoZWNrYm94ZXMgPSBbXTtcblx0XHRcdGNvbnN0IHVuQ2hlY2tlZFRhZ3MgPSBlLnRhcmdldC5mb3JtLmdldFVuY2hlY2tlZCgnZXhpc3RpbmdUYWdzJyk7XG5cdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiBUd2lua2xlLnRhZy5hbHJlYWR5UHJlc2VudFRhZ3MpIHtcblx0XHRcdFx0Y29uc3QgY2hlY2tib3ggPSB7XG5cdFx0XHRcdFx0dmFsdWU6IHRhZyxcblx0XHRcdFx0XHRsYWJlbDogYHt7JHt0YWd9fX0ke1xuXHRcdFx0XHRcdFx0VHdpbmtsZS50YWcuYXJ0aWNsZS5mbGF0T2JqZWN0W3RhZ11cblx0XHRcdFx0XHRcdFx0PyBgOiAke1R3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFt0YWddLmRlc2NyaXB0aW9ufWBcblx0XHRcdFx0XHRcdFx0OiAnJ1xuXHRcdFx0XHRcdH1gLFxuXHRcdFx0XHRcdGNoZWNrZWQ6ICF1bkNoZWNrZWRUYWdzLmluY2x1ZGVzKHRhZyksXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNoZWNrYm94ZXMucHVzaChjaGVja2JveCk7XG5cdFx0XHR9XG5cdFx0XHRzdWJkaXYuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ2V4aXN0aW5nVGFncycsXG5cdFx0XHRcdGxpc3Q6IGNoZWNrYm94ZXMsXG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGlmIChzb3J0b3JkZXIgPT09ICdjYXQnKSB7XG5cdFx0XHQvLyBjYXRlZ29yaWNhbCBzb3J0IG9yZGVyXG5cdFx0XHQvLyBmdW5jdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHRhZ3MgYW5kIGNyZWF0ZSBhIGNoZWNrYm94IGZvciBlYWNoIG9uZVxuXHRcdFx0Y29uc3QgZG9DYXRlZ29yeUNoZWNrYm94ZXMgPSAoc3ViZGl2LCBzdWJncm91cCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjaGVja2JveGVzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBzdWJncm91cCkge1xuXHRcdFx0XHRcdGlmICghVHdpbmtsZS50YWcuYWxyZWFkeVByZXNlbnRUYWdzLmluY2x1ZGVzKGl0ZW0udGFnKSkge1xuXHRcdFx0XHRcdFx0Y2hlY2tib3hlcy5wdXNoKG1ha2VDaGVja2JveChpdGVtLnRhZywgaXRlbS5kZXNjcmlwdGlvbikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdWJkaXYuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdG5hbWU6ICd0YWdzJyxcblx0XHRcdFx0XHRsaXN0OiBjaGVja2JveGVzLFxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cdFx0XHRpZiAoVHdpbmtsZS50YWcuYWxyZWFkeVByZXNlbnRUYWdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bWFrZUNoZWNrYm94ZXNGb3JBbHJlYWR5UHJlc2VudFRhZ3MoKTtcblx0XHRcdH1cblx0XHRcdGxldCBpID0gMTtcblx0XHRcdC8vIGdvIHRocm91Z2ggZWFjaCBjYXRlZ29yeSBhbmQgc3ViLWNhdGVnb3J5IGFuZCBhcHBlbmQgbGlzdHMgb2YgY2hlY2tib3hlc1xuXHRcdFx0Zm9yIChjb25zdCBncm91cCBvZiBUd2lua2xlLnRhZy5hcnRpY2xlLnRhZ0xpc3QpIHtcblx0XHRcdFx0Y29udGFpbmVyLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0aWQ6IGB0YWdIZWFkZXIke2l9YCxcblx0XHRcdFx0XHRsYWJlbDogZ3JvdXAua2V5LFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3Qgc3ViZGl2ID0gY29udGFpbmVyLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6IGB0YWdTdWJkaXYke2krK31gLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGdyb3VwLnZhbHVlWzBdLnRhZykge1xuXHRcdFx0XHRcdGRvQ2F0ZWdvcnlDaGVja2JveGVzKHN1YmRpdiwgZ3JvdXAudmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgc3ViZ3JvdXAgb2YgZ3JvdXAudmFsdWUpIHtcblx0XHRcdFx0XHRcdHN1YmRpdi5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IFtNb3JlYml0cy5odG1sTm9kZSgnYicsIHN1Ymdyb3VwLmtleSldLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRkb0NhdGVnb3J5Q2hlY2tib3hlcyhzdWJkaXYsIHN1Ymdyb3VwLnZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYWxwaGFiZXRpY2FsIHNvcnQgb3JkZXJcblx0XHRcdGlmIChUd2lua2xlLnRhZy5hbHJlYWR5UHJlc2VudFRhZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRtYWtlQ2hlY2tib3hlc0ZvckFscmVhZHlQcmVzZW50VGFncygpO1xuXHRcdFx0XHRjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0XHRpZDogJ3RhZ0hlYWRlcjEnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WPr+eUqOeahOe7tOaKpOagh+iusCcsICflj6/nlKjnmoTntq3orbfmqJnoqJgnKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBBdm9pZCByZXBlYXRlZGx5IHJlc29ydGluZ1xuXHRcdFx0VHdpbmtsZS50YWcuYXJ0aWNsZS5hbHBoYWJldGljYWxMaXN0IHx8PSBPYmplY3Qua2V5cyhUd2lua2xlLnRhZy5hcnRpY2xlLmZsYXRPYmplY3QpLnNvcnQoKTtcblx0XHRcdGNvbnN0IGNoZWNrYm94ZXMgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgdGFnIG9mIFR3aW5rbGUudGFnLmFydGljbGUuYWxwaGFiZXRpY2FsTGlzdCkge1xuXHRcdFx0XHRpZiAoIVR3aW5rbGUudGFnLmFscmVhZHlQcmVzZW50VGFncy5pbmNsdWRlcyh0YWcpKSB7XG5cdFx0XHRcdFx0Y2hlY2tib3hlcy5wdXNoKG1ha2VDaGVja2JveCh0YWcsIFR3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFt0YWddLmRlc2NyaXB0aW9uKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnRhaW5lci5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRuYW1lOiAndGFncycsXG5cdFx0XHRcdGxpc3Q6IGNoZWNrYm94ZXMsXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gYXBwZW5kIGFueSBjdXN0b20gdGFnc1xuXHRcdGlmIChUd2lua2xlLmdldFByZWYoJ2N1c3RvbVRhZ0xpc3QnKS5sZW5ndGgpIHtcblx0XHRcdGNvbnRhaW5lci5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ5qih5p2/JywgJ+iHquioguaooeadvycpLFxuXHRcdFx0fSk7XG5cdFx0XHRjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ3RhZ3MnLFxuXHRcdFx0XHRsaXN0OiBUd2lua2xlLmdldFByZWYoJ2N1c3RvbVRhZ0xpc3QnKS5tYXAoKGVsKSA9PiB7XG5cdFx0XHRcdFx0ZWwuY2hlY2tlZCA9IFR3aW5rbGUudGFnLmNoZWNrZWRUYWdzLmluY2x1ZGVzKGVsLnZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHRcdH0pLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0ICR3b3JrYXJlYSA9ICQoZm9ybSkuZmluZCgnI3RhZ1dvcmtBcmVhJyk7XG5cdFx0Y29uc3QgcmVuZGVyZWQgPSBjb250YWluZXIucmVuZGVyKCk7XG5cdFx0JHdvcmthcmVhLmVtcHR5KCkuYXBwZW5kKHJlbmRlcmVkKTtcblx0XHQvLyBmb3IgcXVpY2sgZmlsdGVyOlxuXHRcdCRhbGxDaGVja2JveERpdnMgPSAkd29ya2FyZWEuZmluZCgnW25hbWU9dGFnc10sIFtuYW1lPWV4aXN0aW5nVGFnc10nKS5wYXJlbnQoKTtcblx0XHQkYWxsSGVhZGVycyA9ICR3b3JrYXJlYS5maW5kKCdoNSwgLnF1aWNrZm9ybURlc2NyaXB0aW9uJyk7XG5cdFx0Zm9ybS5xdWlja2ZpbHRlci52YWx1ZSA9ICcnOyAvLyBjbGVhciBzZWFyY2gsIGJlY2F1c2UgdGhlIHNlYXJjaCByZXN1bHRzIGFyZSBub3QgcHJlc2VydmVkIG92ZXIgbW9kZSBjaGFuZ2Vcblx0XHRmb3JtLnF1aWNrZmlsdGVyLmZvY3VzKCk7XG5cdFx0Ly8gc3R5bGUgYWRqdXN0bWVudHNcblx0XHQkd29ya2FyZWEuZmluZCgnaDUnKS5jc3Moe1xuXHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMTAlJyxcblx0XHR9KTtcblx0XHQkd29ya2FyZWEuZmluZCgnaDU6bm90KDpmaXJzdC1jaGlsZCknKS5jc3Moe1xuXHRcdFx0J21hcmdpbi10b3AnOiAnMWVtJyxcblx0XHR9KTtcblx0XHQkd29ya2FyZWEuZmluZCgnZGl2JykuZmlsdGVyKCc6aGFzKHNwYW4ucXVpY2tmb3JtRGVzY3JpcHRpb24pJykuY3NzKHtcblx0XHRcdCdtYXJnaW4tdG9wJzogJzAuNGVtJyxcblx0XHR9KTtcblx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhmb3JtLCAnZXhpc3RpbmdUYWdzJykpIHtcblx0XHRcdGdlbmVyYXRlTGlua3MoY2hlY2tib3gpO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhmb3JtLCAndGFncycpKSB7XG5cdFx0XHRnZW5lcmF0ZUxpbmtzKGNoZWNrYm94KTtcblx0XHR9XG5cdFx0Ly8gdGFsbHkgdGFncyBhZGRlZC9yZW1vdmVkLCB1cGRhdGUgc3RhdHVzTm9kZSB0ZXh0XG5cdFx0Y29uc3Qgc3RhdHVzTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0dy10YWctc3RhdHVzJyk7XG5cdFx0JGJvZHkuZmluZCgnW25hbWU9dGFnc10sIFtuYW1lPWV4aXN0aW5nVGFnc10nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAodGhpcy5uYW1lID09PSAndGFncycpIHtcblx0XHRcdFx0VHdpbmtsZS50YWcuc3RhdHVzLm51bUFkZGVkICs9IHRoaXMuY2hlY2tlZCA/IDEgOiAtMTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5uYW1lID09PSAnZXhpc3RpbmdUYWdzJykge1xuXHRcdFx0XHRUd2lua2xlLnRhZy5zdGF0dXMubnVtUmVtb3ZlZCArPSB0aGlzLmNoZWNrZWQgPyAtMSA6IDE7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmaXJzdFBhcnQgPSBg5Yqg5YWlJHtUd2lua2xlLnRhZy5zdGF0dXMubnVtQWRkZWR9JHt3aW5kb3cud2dVTFMoJ+S4quagh+iusCcsICflgIvmqJnoqJgnKX1gO1xuXHRcdFx0Y29uc3Qgc2Vjb25kUGFydCA9IGDnp7vpmaQke1R3aW5rbGUudGFnLnN0YXR1cy5udW1SZW1vdmVkfSR7d2luZG93LndnVUxTKCfkuKrmoIforrAnLCAn5YCL5qiZ6KiYJyl9YDtcblx0XHRcdHN0YXR1c05vZGUudGV4dENvbnRlbnQgPVxuXHRcdFx0XHQoVHdpbmtsZS50YWcuc3RhdHVzLm51bUFkZGVkID8gYCAgJHtmaXJzdFBhcnR9YCA6ICcnKSArXG5cdFx0XHRcdChUd2lua2xlLnRhZy5zdGF0dXMubnVtUmVtb3ZlZCA/IChUd2lua2xlLnRhZy5zdGF0dXMubnVtQWRkZWQgPyAn77ybJyA6ICcgICcpICsgc2Vjb25kUGFydCA6ICcnKTtcblx0XHR9KTtcblx0fTtcblx0LyoqXG5cdCAqIEFkZHMgYSBsaW5rIHRvIGVhY2ggdGVtcGxhdGUncyBkZXNjcmlwdGlvbiBwYWdlXG5cdCAqXG5cdCAqIEBwYXJhbSB7TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnR9IGNoZWNrYm94ICBhc3NvY2lhdGVkIHdpdGggdGhlIHRlbXBsYXRlXG5cdCAqL1xuXHRjb25zdCBnZW5lcmF0ZUxpbmtzID0gKGNoZWNrYm94KSA9PiB7XG5cdFx0Y29uc3QgbGluayA9IE1vcmViaXRzLmh0bWxOb2RlKCdhJywgJz4nKTtcblx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndGFnLXRlbXBsYXRlLWxpbmsnKTtcblx0XHRjb25zdCB0YWduYW1lID0gY2hlY2tib3gudmFsdWVzO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKFxuXHRcdFx0J2hyZWYnLFxuXHRcdFx0bXcudXRpbC5nZXRVcmwoXG5cdFx0XHRcdCh0YWduYW1lLmluY2x1ZGVzKCc6JykgPyAnJyA6ICdUZW1wbGF0ZTonKSArXG5cdFx0XHRcdFx0KHRhZ25hbWUuaW5jbHVkZXMoJ3wnKSA/IHRhZ25hbWUuc2xpY2UoMCwgdGFnbmFtZS5pbmRleE9mKCd8JykpIDogdGFnbmFtZSlcblx0XHRcdClcblx0XHQpO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG5cdFx0bGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lciBub3JlZmVycmVyJyk7XG5cdFx0JChjaGVja2JveCkucGFyZW50KCkuYXBwZW5kKFsnXFx1MDBBMCcsIGxpbmtdKTtcblx0fTtcblx0Ly8gVGFncyBmb3IgQVJUSUNMRVMgc3RhcnQgaGVyZVxuXHRUd2lua2xlLnRhZy5hcnRpY2xlID0ge307XG5cdC8vIFRhZ3MgYXJyYW5nZWQgYnkgY2F0ZWdvcnk7IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYWxwaGFiZXRpY2FsIGxpc3QsXG5cdC8vIGJ1dCB0YWdzIHNob3VsZCBiZSBpbiBhbHBoYWJldGljYWwgb3JkZXIgd2l0aGluIHRoZSBjYXRlZ29yaWVzXG5cdC8vIGV4Y2x1ZGVNSTogdHJ1ZSBpbmRpY2F0ZSBhIHRhZyB0aGF0ICpkb2VzIG5vdCogd29yayBpbnNpZGUge3ttdWx0aXBsZSBpc3N1ZXN9fVxuXHQvLyBBZGQgbmV3IGNhdGVnb3JpZXMgd2l0aCBkaXNjcmV0aW9uIC0gdGhlIGxpc3QgaXMgbG9uZyBlbm91Z2ggYXMgaXMhXG5cdFR3aW5rbGUudGFnLmFydGljbGUudGFnTGlzdCA9IFtcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5riF55CG5ZKM57u05oqk5qih5p2/JywgJ+a4heeQhuWSjOe2reitt+aooeadvycpLFxuXHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCfluLjop4TmuIXnkIYnLCAn5bi46KaP5riF55CGJyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQ2xlYW51cCcsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDvemcgOimgei/m+ihjOa4heeQhu+8jOS7peespuWQiOacieWFveaho+ahiOmmhueahOi0qOmHj+agh+WHhicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDvemcgOimgemAsuihjOa4heeQhu+8jOS7peespuWQiOacieeNuOaqlOahiOmkqOeahOizqumHj+aomea6lidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0NsZWFudXAgcmV3cml0ZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+S4jeespuWQiOacieWFveaho+ahiOmmhueahOi0qOmHj+agh+WHhu+8jOmcgOimgeWujOWFqOmHjeWGmScsXG5cdFx0XHRcdFx0XHRcdFx0J+S4jeespuWQiOacieeNuOaqlOahiOmkqOeahOizqumHj+aomea6lu+8jOmcgOimgeWujOWFqOmHjeWvqydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0NsZWFudXAtamFyZ29uJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5YyF5ZCr6L+H5aSa6KGM6K+d5oiW5LiT5Lia5pyv6K+t77yM5Y+v6IO96ZyA6KaB566A5YyW5oiW5o+Q5Ye66L+b5LiA5q2l6Kej6YeKJyxcblx0XHRcdFx0XHRcdFx0XHQn5YyF5ZCr6YGO5aSa6KGM6Kmx5oiW5bCI5qWt6KGT6Kqe77yM5Y+v6IO96ZyA6KaB57Ch5YyW5oiW5o+Q5Ye66YCy5LiA5q2l6Kej6YeLJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQ29weSBlZGl0Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6ZyA6KaB57yW5L+u77yM5Lul56Gu5L+d5paH5rOV44CB55So6K+N44CB6K+t5rCU44CB5qC85byP44CB5qCH54K5562J5L2/55So5oGw5b2TJyxcblx0XHRcdFx0XHRcdFx0XHQn6ZyA6KaB57eo5L+u77yM5Lul56K65L+d5paH5rOV44CB55So6Kme44CB6Kqe5rCj44CB5qC85byP44CB5qiZ6bue562J5L2/55So5oGw55W2J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+WPr+iDveWkmuS9meeahOWGheWuuScsICflj6/og73lpJrppJjnmoTlhaflrrknKSxcblx0XHRcdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdDb3B5cGFzdGUnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflhoXlrrnlj6/og73mmK/ku47mn5DkuKrmnaXmupDlpITmi7fotJ3lkI7nspjotLQnLFxuXHRcdFx0XHRcdFx0XHRcdCflhaflrrnlj6/og73mmK/lvp7mn5DlgIvkvobmupDomZXmi7fosp3lvozosrzkuIonXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdFeHRlcm5hbCBsaW5rcycsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+S9v+eUqOWklumDqOmTvuaOpeeahOaWueW8j+WPr+iDveS4jeespuWQiOacieWFveaho+ahiOmmhueahOadoeS+iycsXG5cdFx0XHRcdFx0XHRcdFx0J+S9v+eUqOWklumDqOmAo+e1kOeahOaWueW8j+WPr+iDveS4jeespuWQiOacieeNuOaqlOahiOmkqOeahOaineS+iydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ05vbi1mcmVlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6IO96L+H5aSa5oiW5LiN5b2T5Zyw5L2/55So5LqG5Y+X6JGX5L2c5p2D5L+d5oqk55qE5paH5a2X44CB5Zu+5YOP5oiW5aSa5aqS5L2T5paH5Lu2Jyxcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6IO96YGO5aSa5oiW5LiN55W25Zyw5L2/55So5LqG5Y+X54mI5qyK5L+d6K2355qE5paH5a2X44CB5ZyW5YOP5oiW5aSa5aqS6auU5qqU5qGIJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+e7k+aehOWSjOWvvOiogCcsICfntZDmp4vlkozlsI7oqIAnKSxcblx0XHRcdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdMZWFkIHRvbyBsb25nJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5a+86KiA6YOo5YiG5Lmf6K646L+H5LqO5YaX6ZW/JywgJ+WwjuiogOmDqOWIhuS5n+iosemBjuaWvOWGl+mVtycpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnTGVhZCB0b28gc2hvcnQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflr7zoqIDpg6jliIbkuZ/orrjkuI3otrPku6XmpoLmi6zlhbblhoXlrrknLCAn5bCO6KiA6YOo5YiG5Lmf6Kix5LiN6Laz5Lul5qaC5ous5YW25YWn5a65JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdWZXJ5IGxvbmcnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflj6/og73ov4fkuo7lhpfplb8nLCAn5Y+v6IO96YGO5pa85YaX6ZW3JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn6Jma5p6E5L2c5ZOB55u45YWz5riF55CGJywgJ+iZm+ani+S9nOWTgeebuOmXnOa4heeQhicpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0luLXVuaXZlcnNlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So5bCP6K+05pWF5LqL5YaF55qE6KeC54K55o+P6L+w5LiA5Liq6Jma5p6E5LqL54mpJyxcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So5bCP6Kqq5pWF5LqL5YWn55qE6KeA6bue5o+P6L+w5LiA5YCL6Jmb5qeL5LqL54mpJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnTG9uZyBwbG90Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5Y+v6IO95YyF5ZCr6L+H5LqO6K+m57uG55qE5Ymn5oOF5pGY6KaBJywgJ+WPr+iDveWMheWQq+mBjuaWvOips+e0sOeahOWKh+aDheaRmOimgScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogd2luZG93LndnVUxTKCfluLjop4TmnaHnm67pl67popgnLCAn5bi46KaP5qKd55uu5ZWP6aGMJyksXG5cdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiAn6YeN6KaB5oCn5ZKM55+l5ZCN5bqmJyxcblx0XHRcdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdOb3RhYmlsaXR5Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5Y+v6IO95LiN56ym5ZCI6YCa55So5YWz5rOo5bqm5oyH5byVJywgJ+WPr+iDveS4jeespuWQiOmAmueUqOmXnOazqOW6puaMh+W8lScpLFxuXHRcdFx0XHRcdFx0XHRleGNsdWRlTUk6IHRydWUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdOb3RhYmlsaXR5IFVucmVmZXJlbmNlZCcsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDveWFt+Wkh+WFs+azqOW6pu+8jOS9humcgOimgeadpea6kOWKoOS7peW9sOaYvicsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDveWFt+WCmemXnOazqOW6pu+8jOS9humcgOimgeS+hua6kOWKoOS7peW9sOmhrydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCflhpnkvZzpo47moLwnLCAn5a+r5L2c6aKo5qC8JyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQWR2ZXJ0Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn57G75Ly85bm/5ZGK5oiW5a6j5Lyg5oCn5YaF5a65JywgJ+mhnuS8vOW7o+WRiuaIluWuo+WCs+aAp+WFp+WuuScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnRmFucG92Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn57G75Ly854ix5aW96ICF572R6aG1JywgJ+mhnuS8vOaEm+WlveiAhee2sumggScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnSG93LXRvJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5YyF5ZCr5oyH5Y2X5oiW5pWZ5a2m5YaF5a65JywgJ+WMheWQq+aMh+WNl+aIluaVmeWtuOWFp+WuuScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnSW5hcHByb3ByaWF0ZSBwZXJzb24nLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfkvb/nlKjkuI3pgILlvZPnmoTnrKzkuIDkurrnp7DlkoznrKzkuozkurrnp7AnLFxuXHRcdFx0XHRcdFx0XHRcdCfkvb/nlKjkuI3pgannlbbnmoTnrKzkuIDkurrnqLHlkoznrKzkuozkurrnqLEnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdOZXdzcmVsZWFzZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+mYheivu+i1t+adpeWDj+aYr+aWsOmXu+eov+WPiuWMheWQq+i/h+W6pueahOWuo+S8oOaAp+ivreiwgycsXG5cdFx0XHRcdFx0XHRcdFx0J+mWseiugOi1t+S+huWDj+aYr+aWsOiBnueov+WPiuWMheWQq+mBjuW6pueahOWuo+WCs+aAp+iqnuiqvydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1Byb3NlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So5LqG5pel5pyf5oiW5pe26Ze05YiX6KGo5byP6K6w6L+w77yM6ZyA6KaB5pS55YaZ5Li66L+e6LSv55qE5Y+Z6L+w5oCn5paH5a2XJyxcblx0XHRcdFx0XHRcdFx0XHQn5L2/55So5LqG5pel5pyf5oiW5pmC6ZaT5YiX6KGo5byP6KiY6L+w77yM6ZyA6KaB5pS55a+r54K66YCj6LKr55qE5pWY6L+w5oCn5paH5a2XJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnUmV2aWV3Jyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn6ZiF6K+76LW35p2l57G75Ly86K+E6K6677yM6ZyA6KaB5riF55CGJywgJ+mWseiugOi1t+S+humhnuS8vOipleirlu+8jOmcgOimgea4heeQhicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVG9uZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+ivreiwg+aIlumjjuagvOWPr+iDveS4jemAguWQiOeZvuenkeWFqOS5pueahOWGmeS9nOaWueW8jycsXG5cdFx0XHRcdFx0XHRcdFx0J+iqnuiqv+aIlumiqOagvOWPr+iDveS4jemBqeWQiOeZvuenkeWFqOabuOeahOWvq+S9nOaWueW8jydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCflhoXlrrknLCAn5YWn5a65JyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHt0YWc6ICdNaXNzaW5nIGluZm9ybWF0aW9uJywgZGVzY3JpcHRpb246ICfnvLrlsJHlv4XopoHnmoTkv6Hmga8nfSwgLy8gdGhlc2UgdGhyZWUgaGF2ZSBhIHN1Ymdyb3VwIHdpdGggc2V2ZXJhbCBvcHRpb25zXG5cdFx0XHRcdFx0XHR7dGFnOiAnU3Vic3R1YicsIGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+i/h+S6juefreWwjycsICfpgY7mlrznn63lsI8nKSwgZXhjbHVkZU1JOiB0cnVlfSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVW5lbmN5Y2xvcGVkaWMnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflj6/og73kuI3pgILlkIjlhpnlhaXnmb7np5HlhajkuaYnLCAn5Y+v6IO95LiN6YGp5ZCI5a+r5YWl55m+56eR5YWo5pu4JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5L+h5oGv5ZKM57uG6IqCJywgJ+izh+ioiuWSjOe0sOevgCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0V4cGVydCBuZWVkZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHnsr7pgJrmiJbnhp/mgonmnKzkuLvpopjnmoTkuJPkuJrkurrlo6vvvIjkuJPlrrbvvInlj4LkuI7lj4rljY/liqnnvJbovpEnLFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHnsr7pgJrmiJbnhp/mgonmnKzkuLvpoYznmoTlsIjmpa3kurrlo6vvvIjlsIjlrrbvvInlj4PoiIflj4rljZTliqnnt6jovK8nXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdPdmVybHkgZGV0YWlsZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfljIXlkKvlpKrlpJrov4fluqbnu4boioLlhoXlrrknLCAn5YyF5ZCr5aSq5aSa6YGO5bqm57Sw56+A5YWn5a65JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdUcml2aWEnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflupTpgb/lhY3mnInpmYjliJfmnYLpobnjgIHnkJDnoo7otYTmlpnnmoTpg6jliIYnLFxuXHRcdFx0XHRcdFx0XHRcdCfmh4npgb/lhY3mnInpmbPliJfpm5zpoIXjgIHnkaPnoo7os4fmlpnnmoTpg6jliIYnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5pe26Ze05oCnJywgJ+aZgumWk+aApycpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0N1cnJlbnQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCforrDov7DmlrDpl7vliqjmgIEnLCAn6KiY6L+w5paw6IGe5YuV5oWLJyksXG5cdFx0XHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1VwZGF0ZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+W9k+WJjeadoeebruaIlueroOiKgumcgOimgeabtOaWsCcsICfnlbbliY3mop3nm67miJbnq6Dnr4DpnIDopoHmm7TmlrAnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCflrqLop4LmgKflkozkuovlrp7lh4bnoa7mgKcnLCAn5a6i6KeA5oCn5ZKM5LqL5a+m5rqW56K65oCnJyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQXV0b2Jpb2dyYXBoeScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+exu+S8vOS4gOevh+iHquS8oO+8jOaIluWGheWuueS4u+imgeeUseadoeebruaPj+i/sOeahOW9k+S6i+S6uuaIlue7hOe7h+aSsOWGmeOAgee8lui+kScsXG5cdFx0XHRcdFx0XHRcdFx0J+mhnuS8vOS4gOevh+iHquWCs++8jOaIluWFp+WuueS4u+imgeeUseaineebruaPj+i/sOeahOeVtuS6i+S6uuaIlue1hOe5lOaSsOWvq+OAgee3qOi8rydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0NPSScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+S4u+imgei0oeeMruiAheS4juacrOadoeebruaJgOWuo+aJrOeahOWGheWuueWPr+iDveWtmOWcqOWIqeebiuWGsueqgScsXG5cdFx0XHRcdFx0XHRcdFx0J+S4u+imgeiyoueNu+iAheiIh+acrOaineebruaJgOWuo+aPmueahOWFp+WuueWPr+iDveWtmOWcqOWIqeebiuihneeqgSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0Rpc3B1dGVkJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5YaF5a6555aR5qyg5YeG56Gu77yM5pyJ5b6F5p+l6K+BJywgJ+WFp+WuueeWkeasoOa6lueiuu+8jOacieW+heafpeitiScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnR2xvYmFsaXplJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5LuF5YW35pyJ5LiA6YOo5YiG5Zyw5Yy655qE5L+h5oGv5oiW6KeC54K5JywgJ+WDheWFt+acieS4gOmDqOWIhuWcsOWNgOeahOizh+ioiuaIluingOm7nicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnSG9heCcsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+ecn+WunuaAp+iiq+i0qOeWkScsICfnnJ/lr6bmgKfooqvos6rnlpEnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1BPVicsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WuouinguaAp+acieS6ieiuruOAguWGheWuueOAgeivreiwg+WPr+iDveW4puacieaYjuaYvueahOS4quS6uuingueCueaIluWcsOaWueiJsuW9qScsXG5cdFx0XHRcdFx0XHRcdFx0J+WuouingOaAp+acieeIreitsOOAguWFp+WuueOAgeiqnuiqv+WPr+iDveW4tuacieaYjumhr+eahOWAi+S6uuingOm7nuaIluWcsOaWueiJsuW9qSdcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1NlbGYtY29udHJhZGljdG9yeScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+WGheWuueiHquebuOefm+ebvicsICflhaflrrnoh6rnm7jnn5vnm74nKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1dlYXNlbCcsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+ivreS5ieaooeajseS4pOWPr+iAjOaNn+WPiuWFtuWuouinguaAp+aIluWHhuehruaApycsXG5cdFx0XHRcdFx0XHRcdFx0J+iqnuaEj+aooeajseWFqeWPr+iAjOaQjeWPiuWFtuWuouingOaAp+aIlua6lueiuuaApydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCflj6/kvpvmn6Xor4HlkozmnaXmupAnLCAn5Y+v5L6b5p+l6K2J5ZKM5L6G5rqQJyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQkxQZGlzcHV0ZScsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDvei/neWPjeS6huacieWFveaho+ahiOmmhuWFs+S6jueUn+iAheS8oOiusOeahOadoeS+iycsXG5cdFx0XHRcdFx0XHRcdFx0J+WPr+iDvemBleWPjeS6huacieeNuOaqlOahiOmkqOmXnOaWvOeUn+iAheWCs+iomOeahOaineS+iydcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0JMUHNvdXJjZXMnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfnlJ/ogIXkvKDorrDpnIDopoHooaXlhYXmm7TlpJrlj6/kvpvmn6Xor4HnmoTmnaXmupAnLFxuXHRcdFx0XHRcdFx0XHRcdCfnlJ/ogIXlgrPoqJjpnIDopoHoo5zlhYXmm7TlpJrlj6/kvpvmn6XorYnnmoTkvobmupAnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdCTFAgdW5zb3VyY2VkJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn55Sf6ICF5Lyg6K6w5rKh5pyJ5YiX5Ye65Lu75L2V5Y+C6ICD5oiW5p2l5rqQJyxcblx0XHRcdFx0XHRcdFx0XHQn55Sf6ICF5YKz6KiY5rKS5pyJ5YiX5Ye65Lu75L2V5Y+D6ICD5oiW5L6G5rqQJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnQ2l0ZWNoZWNrJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6IO95YyF5ZCr5LiN6YCC55So5oiW6KKr5puy6Kej55qE5byV55So6LWE5paZ77yM6YOo5YiG5YaF5a6555qE5YeG56Gu5oCn5peg5rOV6KKr6K+B5a6eJyxcblx0XHRcdFx0XHRcdFx0XHQn5Y+v6IO95YyF5ZCr5LiN6YGp55So5oiW6KKr5puy6Kej55qE5byV55So6LOH5paZ77yM6YOo5YiG5YWn5a6555qE5rqW56K65oCn54Sh5rOV6KKr6K2J5a+mJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnTW9yZSBmb290bm90ZXMgbmVlZGVkJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zug5Li65paH5YaF5byV55So5LiN6Laz77yM6YOo5YiG5a2X5Y+l55qE5p2l5rqQ5LuN54S25LiN5piOJyxcblx0XHRcdFx0XHRcdFx0XHQn5Zug54K65paH5YWn5byV55So5LiN6Laz77yM6YOo5YiG5a2X5Y+l55qE5L6G5rqQ5LuN54S25LiN5piOJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnTm8gZm9vdG5vdGVzJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Zug5Li65rKh5pyJ5YaF5paH5byV55So6ICM5p2l5rqQ5LuN54S25LiN5piOJyxcblx0XHRcdFx0XHRcdFx0XHQn5Zug54K65rKS5pyJ5YWn5paH5byV55So6ICM5L6G5rqQ5LuN54S25LiN5piOJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnT25lc291cmNlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5p6B5aSn5oiW5a6M5YWo5Zyw5L6d6LWW5LqO5p+Q5Liq5Y2V5LiA55qE5p2l5rqQJyxcblx0XHRcdFx0XHRcdFx0XHQn5qW15aSn5oiW5a6M5YWo5Zyw5L6d6LO05pa85p+Q5YCL5Zau5LiA55qE5L6G5rqQJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnT3JpZ2luYWwgcmVzZWFyY2gnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflj6/og73ljIXlkKvljp/liJvnoJTnqbbmiJbmnKrmn6Xor4HlhoXlrrknLCAn5Y+v6IO95YyF5ZCr5Y6f5Ym156CU56m25oiW5pyq5p+l6K2J5YWn5a65JyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdQcmltYXJ5c291cmNlcycsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+S+nei1luesrOS4gOaJi+adpea6kCcsICfkvp3os7TnrKzkuIDmiYvkvobmupAnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1JlZmltcHJvdmUnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfpnIDopoHooaXlhYXmm7TlpJrmnaXmupAnLCAn6ZyA6KaB6KOc5YWF5pu05aSa5L6G5rqQJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdVbnJlZmVyZW5jZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfmsqHmnInliJflh7rku7vkvZXlj4LogIPmiJbmnaXmupAnLCAn5rKS5pyJ5YiX5Ye65Lu75L2V5Y+D6ICD5oiW5L6G5rqQJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+WFt+S9k+WGheWuuemXrumimCcsICflhbfpq5TlhaflrrnllY/poYwnKSxcblx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn6K+t6KiAJywgJ+iqnuiogCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ05vdE1hbmRhcmluJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5YyF5ZCr6L+H5aSa5LiN5piv546w5Luj5qCH5YeG5rGJ6K+t55qE5YaF5a65Jyxcblx0XHRcdFx0XHRcdFx0XHQn5YyF5ZCr6YGO5aSa5LiN5piv54++5Luj5qiZ5rqW5ryi6Kqe55qE5YWn5a65J1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRleGNsdWRlTUk6IHRydWUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdSb3VnaCB0cmFuc2xhdGlvbicsXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+e/u+ivkeWTgei0qOS4jeS9sycsICfnv7vora/lk4Hos6rkuI3kvbMnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogd2luZG93LndnVUxTKCfpk77mjqUnLCAn6YCj57WQJyksXG5cdFx0XHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnRGVhZCBlbmQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHliqDkuIrlhoXpg6jpk77mjqXku6XmnoTnrZHnmb7np5HlhajkuabnmoTpk77mjqXnvZHnu5wnLFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHliqDkuIrlhafpg6jpgKPntZDku6Xmp4vnr4nnmb7np5Hlhajmm7jnmoTpgKPntZDntrLntaEnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdPcnBoYW4nLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfmsqHmnInmiJblj6rmnInlvojlsJHpk77lhaXpobXpnaInLCAn5rKS5pyJ5oiW5Y+q5pyJ5b6I5bCR6YCj5YWl6aCB6Z2iJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdPdmVybGlua2VkJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5ZCr5pyJ6L+H5aSa44CB6YeN5aSN44CB5oiW5LiN5b+F6KaB55qE5YaF6YOo6ZO+5o6lJyxcblx0XHRcdFx0XHRcdFx0XHQn5ZCr5pyJ6YGO5aSa44CB6YeN6KSH44CB5oiW5LiN5b+F6KaB55qE5YWn6YOo6YCj57WQJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVW5kZXJsaW5rZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHmm7TlpJrlhoXpg6jpk77mjqXku6XmnoTnrZHnmb7np5HlhajkuabnmoTpk77mjqXnvZHnu5wnLFxuXHRcdFx0XHRcdFx0XHRcdCfpnIDopoHmm7TlpJrlhafpg6jpgKPntZDku6Xmp4vnr4nnmb7np5Hlhajmm7jnmoTpgKPntZDntrLntaEnXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5Y+C6ICD5oqA5pyvJywgJ+WPg+iAg+aKgOihkycpLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ0NpdGF0aW9uIHN0eWxlJyxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5byV55So6ZyA6KaB6L+b6KGM5riF55CGJywgJ+W8leeUqOmcgOimgemAsuihjOa4heeQhicpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+WIhuexuycsICfliIbpoZ4nKSxcblx0XHRcdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YWc6ICdJbXByb3ZlIGNhdGVnb3JpZXMnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfpnIDopoHmm7TlpJrpobXpnaLliIbnsbsnLCAn6ZyA6KaB5pu05aSa6aCB6Z2i5YiG6aGeJyksXG5cdFx0XHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1VuY2F0ZWdvcml6ZWQnLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfnvLrlsJHpobXpnaLliIbnsbsnLCAn57y65bCR6aCB6Z2i5YiG6aGeJyksXG5cdFx0XHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5ZCI5bm244CB5ouG5YiG44CB56e75YqoJywgJ+WQiOS9teOAgeaLhuWIhuOAgeenu+WLlScpLFxuXHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogJ01lcmdlIGZyb20nLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+W7uuiuruWwhumhtemdouW5tuWFpeatpOmhtemdoicsICflu7rorbDlsIfpoIHpnaLkvbXlhaXmraTpoIHpnaInKSxcblx0XHRcdFx0XHRleGNsdWRlTUk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICdNZXJnZSB0bycsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5bu66K6u5bCG5q2k6aG16Z2i5bm25YWl6aG16Z2iJywgJ+W7uuitsOWwh+atpOmggemdouS9teWFpemggemdoicpLFxuXHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogJ01lcmdlJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflu7rorq7mraTpobXpnaLkuI7pobXpnaLlkIjlubYnLCAn5bu66K2w5q2k6aCB6Z2i6IiH6aCB6Z2i5ZCI5L21JyksXG5cdFx0XHRcdFx0ZXhjbHVkZU1JOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAnUmVxdWVzdGVkIG1vdmUnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+W7uuiuruWwhuatpOmhtemdouenu+WKqOWIsOaWsOWQjeensCcsICflu7rorbDlsIfmraTpoIHpnaLnp7vli5XliLDmlrDlkI3nqLEnKSxcblx0XHRcdFx0XHRleGNsdWRlTUk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICdTcGxpdCcsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5bu66K6u5bCG5q2k6aG16Z2i5YiG5Ymy5Li65aSa5Liq6aG16Z2iJywgJ+W7uuitsOWwh+atpOmggemdouWIhuWJsueCuuWkmuWAi+mggemdoicpLFxuXHRcdFx0XHRcdGV4Y2x1ZGVNSTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XTtcblx0Ly8gVGFncyBmb3IgUkVESVJFQ1RTIHN0YXJ0IGhlcmVcblx0Ly8gTm90IGJ5IHBvbGljeSwgYnV0IHRoZSBsaXN0IHJvdWdobHkgYXBwcm94aW1hdGVzIGl0ZW1zIHdpdGggPjUwMFxuXHQvLyB0cmFuc2NsdXNpb25zIGZyb20gVGVtcGxhdGU6UiB0ZW1wbGF0ZSBpbmRleFxuXHRUd2lua2xlLnRhZy5yZWRpcmVjdExpc3QgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiAn5bi455So5qih5p2/Jyxcblx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn5ZCI5bm26YeN5a6a5ZCRJywgJ+WQiOS9temHjeWumuWQkScpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5L+d5oyB6aG16Z2i6aKY5ZCN6Iez55u45bqU5Li75p2h55uu77yM5Luk6aG16Z2i5YaF5a655Zyo5ZCI5bm25ZCO5LuN6IO95L+d5a2Y5YW257yW6L6R5Y6G5Y+yJyxcblx0XHRcdFx0XHRcdCfkv53mjIHpoIHpnaLpoYzlkI3oh7Pnm7jmh4nkuLvmop3nm67vvIzku6TpoIHpnaLlhaflrrnlnKjlkIjkvbXlvozku43og73lhLLlrZjlhbbnt6jovK/mrbflj7InXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfnroDnuYHph43lrprlkJEnLCAn57Ch57mB6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5byV5a+8566A5L2T6Iez57mB5L2T77yM5oiW57mB5L2T6Iez566A5L2TJywgJ+W8leWwjuewoemrlOiHs+e5gemrlO+8jOaIlue5gemrlOiHs+ewoemrlCcpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiB3aW5kb3cud2dVTFMoJ+WFs+azqOW6pumHjeWumuWQkScsICfpl5zms6jluqbph43lrprlkJEnKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+e8uuS5j+WFs+azqOW6pueahOWtkOS4u+mimOWQkeacieWFs+azqOW6pueahOavjeS4u+mimOeahOmHjeWumuWQkScsXG5cdFx0XHRcdFx0XHQn57y65LmP6Zec5rOo5bqm55qE5a2Q5Li76aGM5ZCR5pyJ6Zec5rOo5bqm55qE5q+N5Li76aGM55qE6YeN5a6a5ZCRJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICfmqKHmnb/ph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+aMh+WQkeaooeadv+eahOmHjeWumuWQkemhtemdoicsICfmjIflkJHmqKHmnb/nmoTph43lrprlkJHpoIHpnaInKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfliKvlkI3ph43lrprlkJEnLCAn5Yil5ZCN6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmoIfpopjnmoTlhbbku5blkI3np7DjgIHnrJTlkI3jgIHnu7Dlj7fjgIHlkIzkuYnlrZfnrYknLFxuXHRcdFx0XHRcdFx0J+aomemhjOeahOWFtuS7luWQjeeoseOAgeethuWQjeOAgee2veiZn+OAgeWQjOe+qeWtl+etiSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiB3aW5kb3cud2dVTFMoJ+ivkeWQjemHjeWumuWQkScsICfora/lkI3ph43lrprlkJEnKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+S6uueJqeOAgeS9nOWTgeetieWQhOmhueS6i+eJqeeahOWFtuS7lue/u+ivkeWQjeensCcsXG5cdFx0XHRcdFx0XHQn5Lq654mp44CB5L2c5ZOB562J5ZCE6aCF5LqL54mp55qE5YW25LuW57+76K2v5ZCN56ixJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn57yp5YaZ6YeN5a6a5ZCRJywgJ+e4ruWvq+mHjeWumuWQkScpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+agh+mimOe8qeWGmScsICfmqJnpoYznuK7lr6snKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfmi7zlhpnph43lrprlkJEnLCAn5ou85a+r6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5qCH6aKY55qE5YW25LuW5LiN5ZCM5ou85YaZJywgJ+aomemhjOeahOWFtuS7luS4jeWQjOaLvOWvqycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiB3aW5kb3cud2dVTFMoJ+mUmeWtl+mHjeWumuWQkScsICfpjK/lrZfph43lrprlkJEnKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfnuqDmraPmoIfpopjnmoTluLjop4HplJnor6/mi7zlhpnmiJbor6/mpI0nLCAn57O+5q2j5qiZ6aGM55qE5bi46KaL6Yyv6Kqk5ou85a+r5oiW6Kqk5qSNJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn5pen5ZCN6YeN5a6a5ZCRJywgJ+iIiuWQjemHjeWumuWQkScpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5bCG5LqL54mp5pep5YmN55qE5ZCN56ew5byV5a+86Iez5pu05pS55ZCO55qE5Li76aKYJyxcblx0XHRcdFx0XHRcdCflsIfkuovnianml6nliY3nmoTlkI3nqLHlvJXlsI7oh7Pmm7TmlLnlvoznmoTkuLvpoYwnXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogJ+WFqOWQjemHjeWumuWQkScsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5qCH6aKY55qE5a6M5pW05oiW5pu05a6M5pW05ZCN56ewJywgJ+aomemhjOeahOWujOaVtOaIluabtOWujOaVtOWQjeeosScpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn55+t5ZCN6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WujOaVtOagh+mimOWQjeensOaIluS6uueJqeWFqOWQjeeahOmDqOWIhuOAgeS4jeWujOaVtOeahOWQjeensOaIlueugOensCcsXG5cdFx0XHRcdFx0XHQn5a6M5pW05qiZ6aGM5ZCN56ix5oiW5Lq654mp5YWo5ZCN55qE6YOo5YiG44CB5LiN5a6M5pW055qE5ZCN56ix5oiW57Ch56ixJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICflp5PmsI/ph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAn5Lq654mp5aeT5rCPJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogJ+WQjeWtl+mHjeWumuWQkScsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICfkurrniankurrlkI0nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn5pys5ZCN6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogJ+S6uueJqeacrOWQjScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICfpnZ7kuK3mlofph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+mdnuS4reaWh+agh+mimCcsICfpnZ7kuK3mlofmqJnpoYwnKSxcblx0XHRcdFx0XHRzdWJncm91cDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRuYW1lOiAnYWx0TGFuZ0Zyb20nLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnaW5wdXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogJ+acrOmHjeaWsOWwjuWQkeeahOiqnuiogO+8iOWPr+mBuO+8iScsXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6XG5cdFx0XHRcdFx0XHRcdFx0J+i8uOWFpemHjeaWsOWwjuWQkeWQjeeoseaJgOS9v+eUqOiqnuiogOeahElTTyA2Mznku6PnorzvvIzkvovlpoJlbuS7o+ihqOiLseiqnu+8jOS7o+eivOWPr+WPg+imiyBUZW1wbGF0ZTpJU09fNjM5X25hbWUnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn5pel5paH6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfml6Xor63lkI3np7AnLCAn5pel6Kqe5ZCN56ixJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiAn5YG255So5qih5p2/Jyxcblx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICfop5LoibLph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+eUteinhuWJp+OAgeeUteW9seOAgeS5puexjeetieS9nOWTgeeahOinkuiJsicsICfpm7voppbliofjgIHpm7vlvbHjgIHmm7jnsY3nrYnkvZzlk4HnmoTop5LoibInKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfnq6DoioLph43lrprlkJEnLCAn56ug56+A6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5a+85ZCR6Iez6L6D6auY5a+G5bqm57uE57uH55qE6aG16Z2iJywgJ+WwjuWQkeiHs+i8g+mrmOWvhuW6pue1hOe5lOeahOmggemdoicpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn5YiX6KGo6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflr7zlkJHoh7PkvY7lr4bluqbnmoTliJfooagnLCAn5bCO5ZCR6Iez5L2O5a+G5bqm55qE5YiX6KGoJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICflj6/og73mgKfph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5a+85ZCR6Iez5b2T5YmN5o+Q5L6b5YaF5a655pu05Li66K+m5bC955qE55uu5qCH6aG16Z2iJyxcblx0XHRcdFx0XHRcdCflsI7lkJHoh7PnlbbliY3mj5Dkvpvlhaflrrnmm7TngrroqbPnm6HnmoTnm67mqJnpoIHpnaInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCflhbPogZTlrZfph43lrprlkJEnLCAn6Zec6IGv5a2X6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5qCH6aKY5ZCN56ew5YWz6IGU5a2XJywgJ+aomemhjOWQjeeosemXnOiBr+WtlycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiB3aW5kb3cud2dVTFMoJ+adoeebruivt+axgumHjeWumuWQkScsICfmop3nm67oq4vmsYLph43lrprlkJEnKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfpnIDopoHni6znq4vmnaHnm67nmoTpobXpnaInLCAn6ZyA6KaB542o56uL5qKd55uu55qE6aCB6Z2iJyksXG5cdFx0XHRcdFx0c3ViZ3JvdXA6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3JlcUFydGljbGVMYW5nJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6ICflpJboqp7oqp7oqIDku6PnorzvvJonLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiAn5L2/55SoSVNPIDYzOeS7o+eivO+8jOWPr+WPg+imiyBUZW1wbGF0ZTpJU09fNjM5X25hbWUnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3JlcUFydGljbGVUaXRsZScsXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAn5aSW6Kqe6aCB6Z2i5ZCN56ix77yaJyxcblx0XHRcdFx0XHRcdFx0c2l6ZTogNjAsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn5b+r5o235pa55byP6YeN5a6a5ZCRJywgJ+aNt+W+kemHjeWumuWQkScpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+acieWFveaho+ahiOmmhuW/q+aNt+aWueW8jycsICfmnInnjbjmqpTmoYjppKjlv6vmjbfmlrnlvI8nKSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn6bKc55So5qih5p2/JywgJ+murueUqOaooeadvycpLFxuXHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfor43nu4Tph43lrprlkJEnLCAn6Kme57WE6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflsIbor43nu4Qv6K+N57uEL+aIkOivreaMh+WQkeWIh+mimOeahOadoeebruWPiuaBsOW9k+eroOiKgicsXG5cdFx0XHRcdFx0XHQn5bCH6Kme57WEL+ipnue1hC/miJDoqp7mjIflkJHliIfpoYznmoTmop3nm67lj4rmgbDnlbbnq6Dnr4AnXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfmtojmrafkuYnpobXph43lrprlkJEnLCAn5raI5q2n576p6aCB6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn5oyH5ZCR5raI5q2n5LmJ6aG1JywgJ+aMh+WQkea2iOatp+e+qemggScpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn5Z+f5ZCN6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCfln5/lkI0nLCAn57ay5Z+f5ZCN56ixJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICflubTku6Pph43lrprlkJEnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB3aW5kb3cud2dVTFMoJ+S6juW5tOS7veadoeebruWvvOWQkeiHs+W5tOS7o+adoeebricsICfmlrzlubTku73mop3nm67lsI7lkJHoh7PlubTku6Pmop3nm64nKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRhZzogd2luZG93LndnVUxTKCfnlKjmiLfmoYbmqKHmnb/ph43lrprlkJEnLCAn55So5oi25qGG5qih5p2/6YeN5a6a5ZCRJyksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHdpbmRvdy53Z1VMUygn55So5oi35qGG5qih5p2/JywgJ+eUqOaItuahhuaooeadvycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGFnOiAn6YeN5a6a5ZCR5qih5p2/55So6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCflr7zlkJHoh7Pph43lrprlkJHmqKHmnb8nLCAn5bCO5ZCR6Iez6YeN5a6a5ZCR5qih5p2/JyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0YWc6ICdFWElG6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogd2luZG93LndnVUxTKCdKUEVH5Zu+5YOP5paH5Lu25YyF5ZCrRVhJRuS/oeaBrycsICdKUEVH5ZyW5qqU5YyF5ZCrRVhJRuizh+ioiicpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRdO1xuXHQvLyBtYWludGVuYW5jZSB0YWdzIGZvciBGSUxFUyBzdGFydCBoZXJlXG5cdFR3aW5rbGUudGFnLmZpbGVMaXN0ID0gW1xuXHRcdHtcblx0XHRcdGtleTogd2luZG93LndnVUxTKCfokZfkvZzmnYPlkozmnaXmupDpl67popjmoIfnrb4nLCAn6JGX5L2c5qyK5ZKM5L6G5rqQ5ZWP6aGM5qiZ57GkJyksXG5cdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e05vbi1mcmVlIHJlZHVjZX1977yaJHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Z2e5L2O5YiG6L6o546H55qE5ZCI55CG5L2/55So5Zu+5YOP77yI5oiW6L+H6ZW/55qE6Z+z6aKR5Ymq6L6R562J77yJJyxcblx0XHRcdFx0XHRcdCfpnZ7kvY7op6PmnpDluqbnmoTlkIjnkIbkvb/nlKjlnJblg4/vvIjmiJbpgY7plbfnmoTpn7PpoLvliarovK/nrYnvvIknXG5cdFx0XHRcdFx0KX1gLFxuXHRcdFx0XHRcdHZhbHVlOiAnTm9uLWZyZWUgcmVkdWNlJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5riF55CG5qCH562+JywgJ+a4heeQhuaomeexpCcpLFxuXHRcdFx0dmFsdWU6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3tXYXRlcm1hcmt9fe+8miR7d2luZG93LndnVUxTKCflm77lg4/ljIXlkKvkuobmsLTljbAnLCAn5ZyW5YOP5YyF5ZCr5LqG5rWu5rC05Y2wJyl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ1dhdGVybWFyaycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7UmVuYW1lIG1lZGlhfX3vvJoke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmlofku7blupTor6XmoLnmja7mlofku7blkI3np7DmjIflvJXooqvph43lkb3lkI0nLFxuXHRcdFx0XHRcdFx0J+aqlOahiOaHieipsuagueaTmuaqlOahiOWQjeeoseaMh+W8leiiq+mHjeaWsOWRveWQjSdcblx0XHRcdFx0XHQpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdSZW5hbWUgbWVkaWEnLFxuXHRcdFx0XHRcdHN1Ymdyb3VwOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdyZW5hbWVtZWRpYU5ld25hbWUnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmlrDlkI3np7DvvJonLCAn5paw5ZCN56ix77yaJyksXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUygn6L6T5YWl5Zu+5YOP55qE5paw5ZCN56ew77yI5Y+v6YCJ77yJJywgJ+i8uOWFpeWcluWDj+eahOaWsOWQjeeose+8iOWPr+mBuO+8iScpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ3JlbmFtZW1lZGlhUmVhc29uJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6ICfljp/lm6DvvJonLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiB3aW5kb3cud2dVTFMoJ+i+k+WFpemHjeWRveWQjeeahOWOn+WboO+8iOWPr+mAie+8iScsICfovLjlhaXph43mlrDlkb3lkI3nmoTljp/lm6DvvIjlj6/pgbjvvIknKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiBge3tTaG91bGQgYmUgU1ZHfX3vvJoke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCdQTkfjgIFHSUbjgIFKUEVH5paH5Lu25bqU6K+l6YeN5Yi25oiQ55+i6YeP5Zu+5b2iJyxcblx0XHRcdFx0XHRcdCdQTkfjgIFHSUbjgIFKUEVH5qqU5qGI5oeJ6Kmy6YeN6KO95oiQ5ZCR6YeP5ZyW5b2iJ1xuXHRcdFx0XHRcdCl9YCxcblx0XHRcdFx0XHR2YWx1ZTogJ1Nob3VsZCBiZSBTVkcnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogd2luZG93LndnVUxTKCfmlofku7blj5bku6PmoIfnrb4nLCAn5qqU5qGI5Y+W5Luj5qiZ57GkJyksXG5cdFx0XHR2YWx1ZTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IGB7e09ic29sZXRlfX3vvJoke3dpbmRvdy53Z1VMUygn5pyJ5paw54mI5pys5Y+v55So55qE6L+H5pe25paH5Lu2JywgJ+acieaWsOeJiOacrOWPr+eUqOeahOmBjuaZguaqlOahiCcpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdPYnNvbGV0ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogYHt7VmVjdG9yIHZlcnNpb24gYXZhaWxhYmxlfX3vvJoke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmnInnn6Lph4/lm77lvaLlj6/nlKjnmoTpnZ7nn6Lph4/lm77lvaLmlofku7YnLFxuXHRcdFx0XHRcdFx0J+acieWQkemHj+WcluW9ouWPr+eUqOeahOmdnuWQkemHj+WcluW9ouaqlOahiCdcblx0XHRcdFx0XHQpfWAsXG5cdFx0XHRcdFx0dmFsdWU6ICdWZWN0b3IgdmVyc2lvbiBhdmFpbGFibGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHRcdGJ1aWxkRmlsZW5hbWU6IHRydWUsXG5cdFx0fSxcblx0XTtcblx0VHdpbmtsZS50YWcuY2FsbGJhY2tzID0ge1xuXHRcdGFydGljbGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHQvLyBSZW1vdmUgdGFncyB0aGF0IGJlY29tZSBzdXBlcmZsdW91cyB3aXRoIHRoaXMgYWN0aW9uXG5cdFx0XHRsZXQgcGFnZVRleHQgPSBwYWdlb2JqXG5cdFx0XHRcdC5nZXRQYWdlVGV4dCgpXG5cdFx0XHRcdC5yZXBsYWNlKFxuXHRcdFx0XHRcdC9cXHtcXHtcXHMqKFtObl1ldyB1bnJldmlld2VkIGFydGljbGV8W1V1XW5yZXZpZXdlZHxbVXVdc2Vyc3BhY2UgZHJhZnQpXFxzKihcXHwoPzpcXHtcXHtbXnt9XSpcXH1cXH18W157fV0pKik/XFx9XFx9XFxzKi9nLFxuXHRcdFx0XHRcdCcnXG5cdFx0XHRcdCk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTYXZlcyB0aGUgcGFnZSBmb2xsb3dpbmcgdGhlIHJlbW92YWwgb2YgdGFncyBpZiBhbnkuIFRoZSBsYXN0IHN0ZXAuXG5cdFx0XHQgKiBDYWxsZWQgZnJvbSByZW1vdmVUYWdzKClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgcG9zdFJlbW92YWwgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChwYXJhbXMudGFnc1RvUmVtb3ZlLmxlbmd0aCkge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBlbXB0eSB7e211bHRpcGxlIGlzc3Vlc319IGlmIGZvdW5kXG5cdFx0XHRcdFx0cGFnZVRleHQgPSBwYWdlVGV4dC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0L1xce1xceyhtdWx0aXBsZSA/aXNzdWVzfGFydGljbGUgP2lzc3Vlc3xtaXxhaXxpc3N1ZXN85aSa5YCL5ZWP6aGMfOWkmuS4qumXrumimHzllY/poYzmop3nm6586Zeu6aKY5p2h55uufOaVuOWAi+WVj+mhjHzmlbDkuKrpl67popgpXFxzKlxcfFxccypcXH1cXH1cXG4/L2ltLFxuXHRcdFx0XHRcdFx0Jydcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBzaW5nbGUtZWxlbWVudCB7e211bHRpcGxlIGlzc3Vlc319IGlmIGZvdW5kXG5cdFx0XHRcdFx0cGFnZVRleHQgPSBwYWdlVGV4dC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0L1xce1xceyg/Om11bHRpcGxlID9pc3N1ZXN8YXJ0aWNsZSA/aXNzdWVzfG1pfGFpfGlzc3Vlc3zlpJrlgIvllY/poYx85aSa5Liq6Zeu6aKYfOWVj+mhjOaineebrnzpl67popjmnaHnm6585pW45YCL5ZWP6aGMfOaVsOS4qumXrumimClcXHMqXFx8XFxzKihcXHtcXHsoPzpcXHtcXHtbXnt9XSpcXH1cXH18W157fV0pK1xcfVxcfSlcXHMqXFx9XFx9L2ltLFxuXHRcdFx0XHRcdFx0JyQxJ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQnVpbGQgZWRpdCBzdW1tYXJ5XG5cdFx0XHRcdGNvbnN0IG1ha2VTZW50ZW5jZSA9IChhcnJheSkgPT4ge1xuXHRcdFx0XHRcdGlmIChhcnJheS5sZW5ndGggPCAzKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXJyYXkuam9pbign5ZKMJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGxhc3QgPSBhcnJheS5wb3AoKTtcblx0XHRcdFx0XHRyZXR1cm4gYCR7YXJyYXkuam9pbign44CBJyl95ZKMJHtsYXN0fWA7XG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IG1ha2VUZW1wbGF0ZUxpbmsgPSAodGFnKSA9PiB7XG5cdFx0XHRcdFx0bGV0IHRleHQgPSAne3tbWyc7XG5cdFx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBjdXN0b20gdGFnIHdpdGggYSBwYXJhbWV0ZXJcblx0XHRcdFx0XHRpZiAodGFnLmluY2x1ZGVzKCd8JykpIHtcblx0XHRcdFx0XHRcdHRhZyA9IHRhZy5zbGljZSgwLCB0YWcuaW5kZXhPZignfCcpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGV4dCArPSB0YWcuaW5jbHVkZXMoJzonKSA/IHRhZyA6IGBUZW1wbGF0ZToke3RhZ318JHt0YWd9YDtcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGV4dH1dXX19YDtcblx0XHRcdFx0fTtcblx0XHRcdFx0bGV0IHN1bW1hcnlUZXh0O1xuXHRcdFx0XHRjb25zdCBhZGRlZFRhZ3MgPSBwYXJhbXMudGFncy5tYXAobWFrZVRlbXBsYXRlTGluayk7XG5cdFx0XHRcdGNvbnN0IHJlbW92ZWRUYWdzID0gcGFyYW1zLnRhZ3NUb1JlbW92ZS5tYXAobWFrZVRlbXBsYXRlTGluayk7XG5cdFx0XHRcdGlmIChhZGRlZFRhZ3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0c3VtbWFyeVRleHQgPSBg5Yqg5YWlJHttYWtlU2VudGVuY2UoYWRkZWRUYWdzKX1gO1xuXHRcdFx0XHRcdHN1bW1hcnlUZXh0ICs9IHJlbW92ZWRUYWdzLmxlbmd0aCA/IGDkuKbnp7vpmaQke21ha2VTZW50ZW5jZShyZW1vdmVkVGFncyl9YCA6ICcnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN1bW1hcnlUZXh0ID0gYOenu+mZpCR7bWFrZVNlbnRlbmNlKHJlbW92ZWRUYWdzKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnlUZXh0ICs9IHdpbmRvdy53Z1VMUygn5qCH6K6wJywgJ+aomeiomCcpO1xuXHRcdFx0XHRpZiAocGFyYW1zLnJlYXNvbikge1xuXHRcdFx0XHRcdHN1bW1hcnlUZXh0ICs9IGDvvJoke3BhcmFtcy5yZWFzb259YDtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBhdm9pZCB0cnVuY2F0ZWQgc3VtbWFyaWVzXG5cdFx0XHRcdGlmIChzdW1tYXJ5VGV4dC5sZW5ndGggPiA0OTkpIHtcblx0XHRcdFx0XHRzdW1tYXJ5VGV4dCA9IHN1bW1hcnlUZXh0LnJlcGxhY2UoL1xcW1xcW1tefF0rXFx8KFteXFxdXSspXFxdXFxdL2csICckMScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQocGFnZVRleHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KHN1bW1hcnlUZXh0KTtcblx0XHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0V2F0Y2hsaXN0KFR3aW5rbGUuZ2V0UHJlZignd2F0Y2hUYWdnZWRQYWdlcycpKTtcblx0XHRcdFx0cGFnZW9iai5zZXRNaW5vckVkaXQoVHdpbmtsZS5nZXRQcmVmKCdtYXJrVGFnZ2VkUGFnZXNBc01pbm9yJykpO1xuXHRcdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdFx0cGFnZW9iai5zYXZlKCgpID0+IHtcblx0XHRcdFx0XHQvLyBzcGVjaWFsIGZ1bmN0aW9ucyBmb3IgbWVyZ2UgdGFnc1xuXHRcdFx0XHRcdGlmIChwYXJhbXMubWVyZ2VSZWFzb24pIHtcblx0XHRcdFx0XHRcdC8vIHBvc3QgdGhlIHJhdGlvbmFsZSBvbiB0aGUgdGFsayBwYWdlIChvbmx5IG9wZXJhdGVzIGluIG1haW4gbmFtZXNwYWNlKVxuXHRcdFx0XHRcdFx0Y29uc3QgdGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHRgVGFsazoke3BhcmFtcy5kaXNjdXNzQXJ0aWNsZX1gLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WwhueQhueUsei0tOi/m+iuqOiuuumhtScsICflsIfnkIbnlLHosrzpgLLoqI7oq5bpoIEnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHRhbGtwYWdlLnNldE5ld1NlY3Rpb25UZXh0KGAke3BhcmFtcy5tZXJnZVJlYXNvbi50cmltKCl9IH5+YC5jb25jYXQoJ35+JykpO1xuXHRcdFx0XHRcdFx0dGFsa3BhZ2Uuc2V0TmV3U2VjdGlvblRpdGxlKGDor7fmsYLkuI5bWyR7cGFyYW1zLm5vbkRpc2N1c3NBcnRpY2xlfV1d5ZCI5bm2YCk7XG5cdFx0XHRcdFx0XHR0YWxrcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0XHR0YWxrcGFnZS5zZXRXYXRjaGxpc3QoVHdpbmtsZS5nZXRQcmVmKCd3YXRjaE1lcmdlRGlzY3Vzc2lvbnMnKSk7XG5cdFx0XHRcdFx0XHR0YWxrcGFnZS5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdFx0XHR0YWxrcGFnZS5uZXdTZWN0aW9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwYXJhbXMubWVyZ2VUYWdPdGhlcikge1xuXHRcdFx0XHRcdFx0Ly8gdGFnIHRoZSB0YXJnZXQgcGFnZSBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0XHRcdGxldCBvdGhlclRhZ05hbWUgPSAnTWVyZ2UnO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5tZXJnZVRhZyA9PT0gJ01lcmdlIGZyb20nKSB7XG5cdFx0XHRcdFx0XHRcdG90aGVyVGFnTmFtZSA9ICdNZXJnZSB0byc7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtcy5tZXJnZVRhZyA9PT0gJ01lcmdlIHRvJykge1xuXHRcdFx0XHRcdFx0XHRvdGhlclRhZ05hbWUgPSAnTWVyZ2UgZnJvbSc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdQYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRcdHRhZ3M6IFtvdGhlclRhZ05hbWVdLFxuXHRcdFx0XHRcdFx0XHR0YWdzVG9SZW1vdmU6IFtdLFxuXHRcdFx0XHRcdFx0XHR0YWdzVG9SZW1haW46IFtdLFxuXHRcdFx0XHRcdFx0XHRtZXJnZVRhcmdldDogTW9yZWJpdHMucGFnZU5hbWVOb3JtLFxuXHRcdFx0XHRcdFx0XHRkaXNjdXNzQXJ0aWNsZTogcGFyYW1zLmRpc2N1c3NBcnRpY2xlLFxuXHRcdFx0XHRcdFx0XHR0YWxrRGlzY3Vzc2lvblRpdGxlOiBwYXJhbXMudGFsa0Rpc2N1c3Npb25UaXRsZSxcblx0XHRcdFx0XHRcdFx0dGFsa0Rpc2N1c3Npb25UaXRsZUxpbmtlZDogcGFyYW1zLnRhbGtEaXNjdXNzaW9uVGl0bGVMaW5rZWQsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3RoZXJwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRcdFx0cGFyYW1zLm1lcmdlVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+agh+iusOWFtuS7lumhtemdou+8iCcsICfmqJnoqJjlhbbku5bpoIHpnaLvvIgnKSArIHBhcmFtcy5tZXJnZVRhcmdldH3vvIlgXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0b3RoZXJwYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhuZXdQYXJhbXMpO1xuXHRcdFx0XHRcdFx0b3RoZXJwYWdlLmxvYWQoVHdpbmtsZS50YWcuY2FsbGJhY2tzLmFydGljbGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBzcGVjaWFsIGZ1bmN0aW9ucyBmb3IgcmVxdWVzdGVkIG1vdmUgdGFnc1xuXHRcdFx0XHRcdGlmIChwYXJhbXMubW92ZVJlYXNvbikge1xuXHRcdFx0XHRcdFx0Ly8gcG9zdCB0aGUgcmF0aW9uYWxlIG9uIHRoZSB0YWxrIHBhZ2UgKG9ubHkgb3BlcmF0ZXMgaW4gbWFpbiBuYW1lc3BhY2UpXG5cdFx0XHRcdFx0XHRsZXQgbW92ZVRhbGtwYWdlVGV4dCA9ICdcXG5cXG57eycuY29uY2F0KCdzdWJzdDonLCBgUk18MT0ke3BhcmFtcy5tb3ZlUmVhc29uLnRyaW0oKX1gKTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbXMubW92ZVRhcmdldCkge1xuXHRcdFx0XHRcdFx0XHRtb3ZlVGFsa3BhZ2VUZXh0ICs9IGB8Mj0ke3BhcmFtcy5tb3ZlVGFyZ2V0fWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtb3ZlVGFsa3BhZ2VUZXh0ICs9ICd9fSc7XG5cdFx0XHRcdFx0XHRjb25zdCBtb3ZlVGFsa3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHRgVGFsazoke3BhcmFtcy5kaXNjdXNzQXJ0aWNsZX1gLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WwhueQhueUsei0tOi/m+iuqOiuuumhtScsICflsIfnkIbnlLHosrzpgLLoqI7oq5bpoIEnKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdG1vdmVUYWxrcGFnZS5zZXRBcHBlbmRUZXh0KG1vdmVUYWxrcGFnZVRleHQpO1xuXHRcdFx0XHRcdFx0bW92ZVRhbGtwYWdlLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivt+axguenu+WKqCcsICfoq4vmsYLnp7vli5UnKSArXG5cdFx0XHRcdFx0XHRcdFx0KHBhcmFtcy5tb3ZlVGFyZ2V0ID8gYOiHs1tbJHtwYXJhbXMubW92ZVRhcmdldH1dXWAgOiAnJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRtb3ZlVGFsa3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0XHRcdFx0bW92ZVRhbGtwYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdFx0XHRcdG1vdmVUYWxrcGFnZS5hcHBlbmQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAocGFyYW1zLnBhdHJvbCkge1xuXHRcdFx0XHRcdHBhZ2VvYmoucGF0cm9sKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHQvKipcblx0XHRcdCAqIFJlbW92ZXMgdGhlIGV4aXN0aW5nIHRhZ3MgdGhhdCB3ZXJlIGRlc2VsZWN0ZWQgKGlmIGFueSlcblx0XHRcdCAqIENhbGxzIHBvc3RSZW1vdmFsKCkgd2hlbiBkb25lXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IHJlbW92ZVRhZ3MgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChwYXJhbXMudGFnc1RvUmVtb3ZlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHBvc3RSZW1vdmFsKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbmZvKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn56e76Zmk5Y+W5raI6YCJ5oup55qE5bey5a2Y5Zyo5qCH6K6wJywgJ+enu+mZpOWPlua2iOmBuOaTh+eahOW3suWtmOWcqOaomeiomCcpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGdldFJlZGlyZWN0c0ZvciA9IFtdO1xuXHRcdFx0XHQvLyBSZW1vdmUgdGhlIHRhZ3MgZnJvbSB0aGUgcGFnZSB0ZXh0LCBpZiBmb3VuZCBpbiBpdHMgcHJvcGVyIG5hbWUsXG5cdFx0XHRcdC8vIG90aGVyd2lzZSBtb3ZlcyBpdCB0byBgZ2V0UmVkaXJlY3RzRm9yYCBhcnJheSBlYXJtYXJraW5nIGl0IGZvclxuXHRcdFx0XHQvLyBsYXRlciByZW1vdmFsXG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHBhcmFtcy50YWdzVG9SZW1vdmUpIHtcblx0XHRcdFx0XHRjb25zdCB0YWdfcmUgPSBuZXcgUmVnRXhwKGBcXFxce1xcXFx7JHtNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KHRhZyl9XFxcXHMqKFxcXFx8W159XSspP1xcXFx9XFxcXH1cXFxcbj9gKTtcblx0XHRcdFx0XHRpZiAodGFnX3JlLnRlc3QocGFnZVRleHQpKSB7XG5cdFx0XHRcdFx0XHRwYWdlVGV4dCA9IHBhZ2VUZXh0LnJlcGxhY2UodGFnX3JlLCAnJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGdldFJlZGlyZWN0c0Zvci5wdXNoKGBUZW1wbGF0ZToke3RhZ31gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFnZXRSZWRpcmVjdHNGb3IubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cG9zdFJlbW92YWwoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gUmVtb3ZlIHRhZ3Mgd2hpY2ggYXBwZWFyIGluIHBhZ2UgdGV4dCBhcyByZWRpcmVjdHNcblx0XHRcdFx0Y29uc3QgYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W5qih5p2/6YeN5a6a5ZCRJywgJ+WPluW+l+aooeadv+mHjeaWsOWwjuWQkScpLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHByb3A6ICdsaW5rc2hlcmUnLFxuXHRcdFx0XHRcdFx0dGl0bGVzOiBnZXRSZWRpcmVjdHNGb3Iuam9pbignfCcpLFxuXHRcdFx0XHRcdFx0cmVkaXJlY3RzOiAxLFxuXHRcdFx0XHRcdFx0bGhuYW1lc3BhY2U6ICcxMCcsXG5cdFx0XHRcdFx0XHRsaHNob3c6ICdyZWRpcmVjdCcsXG5cdFx0XHRcdFx0XHRsaGxpbWl0OiAnbWF4JywgLy8gNTAwIGlzIG1heCBmb3Igbm9ybWFsIHVzZXJzLCA1MDAwIGZvciBib3RzIGFuZCBzeXNvcHNcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdChhcGlvYmopID0+IHtcblx0XHRcdFx0XHRcdCQoYXBpb2JqLnJlc3BvbnNlWE1MKVxuXHRcdFx0XHRcdFx0XHQuZmluZCgncGFnZScpXG5cdFx0XHRcdFx0XHRcdC5lYWNoKChfaWR4LCBwYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHJlbW92ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHQkKHBhZ2UpXG5cdFx0XHRcdFx0XHRcdFx0XHQuZmluZCgnbGgnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmVhY2goKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0YWcgPSAkKGVsZW1lbnQpLmF0dHIoJ3RpdGxlJykuc2xpY2UoOSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRhZ19yZSA9IG5ldyBSZWdFeHAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YFxcXFx7XFxcXHske01vcmViaXRzLnBhZ2VOYW1lUmVnZXgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxcXFxzKihcXFxcfCg/OlxcXFx7XFxcXHtbXnt9XSpcXFxcfVxcXFx9fFtee31dKSopP1xcXFx9XFxcXH1cXFxcbj9gXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0YWdfcmUudGVzdChwYWdlVGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYWdlVGV4dCA9IHBhZ2VUZXh0LnJlcGxhY2UodGFnX3JlLCAnJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVtb3ZlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBicmVhayBvdXQgb2YgJC5lYWNoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFyZW1vdmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5peg5rOV5Zyo6aG16Z2i5LiK5om+5Yiwe3snLCAn54Sh5rOV5Zyo6aCB6Z2i5LiK5om+5Yiwe3snKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JChwYWdlKS5hdHRyKCd0aXRsZScpLnNsaWNlKDkpICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ3194oCm4oCm6Lez6L+HJywgJ3194oCm4oCm6Lez6YGOJylcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHBvc3RSZW1vdmFsKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhcGkucG9zdCgpO1xuXHRcdFx0fTtcblx0XHRcdGlmICghcGFyYW1zLnRhZ3MubGVuZ3RoKSB7XG5cdFx0XHRcdHJlbW92ZVRhZ3MoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHRhZ1JlO1xuXHRcdFx0bGV0IHRhZ1RleHQgPSAnJztcblx0XHRcdGxldCB0YWdzID0gW107XG5cdFx0XHRjb25zdCBncm91cGFibGVUYWdzID0gW107XG5cdFx0XHRjb25zdCBncm91cGFibGVFeGlzdGluZ1RhZ3MgPSBbXTtcblx0XHRcdC8vIEV4ZWN1dGVzIGZpcnN0OiBhZGRpdGlvbiBvZiBzZWxlY3RlZCB0YWdzXG5cdFx0XHQvKipcblx0XHRcdCAqIFVwZGF0ZXMgYHRhZ1RleHRgIHdpdGggdGhlIHN5bnRheCBvZiBgdGFnTmFtZWAgdGVtcGxhdGUgd2l0aCBpdHMgcGFyYW1ldGVyc1xuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGFkZFRhZyA9ICh0YWdOYW1lKSA9PiB7XG5cdFx0XHRcdGxldCBjdXJyZW50VGFnID0gJyc7XG5cdFx0XHRcdGlmICh0YWdOYW1lID09PSAnVW5jYXRlZ29yaXplZCcgfHwgdGFnTmFtZSA9PT0gJ0ltcHJvdmUgY2F0ZWdvcmllcycpIHtcblx0XHRcdFx0XHRwYWdlVGV4dCArPSBgXFxuXFxue3ske3RhZ05hbWV9fHRpbWU9e3tgLmNvbmNhdCgnc3Vic3Q6JywgJyN0aW1lOmN9fX19Jyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3VycmVudFRhZyArPSBge3ske3RhZ05hbWV9YDtcblx0XHRcdFx0XHQvLyBmaWxsIGluIG90aGVyIHBhcmFtZXRlcnMsIGJhc2VkIG9uIHRoZSB0YWdcblx0XHRcdFx0XHRzd2l0Y2ggKHRhZ05hbWUpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ0V4cGVydCBuZWVkZWQnOlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8c3ViamVjdD0ke3BhcmFtcy5leHBlcnR9YDtcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5leHBlcnQyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfHN1YmplY3QyPSR7cGFyYW1zLmV4cGVydDJ9YDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLmV4cGVydDMpIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8c3ViamVjdDM9JHtwYXJhbXMuZXhwZXJ0M31gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UnOlxuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UgdG8nOlxuXHRcdFx0XHRcdFx0Y2FzZSAnTWVyZ2UgZnJvbSc6XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbXMubWVyZ2VUYXJnZXQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBub3JtYWxpemUgdGhlIG1lcmdlIHRhcmdldCBmb3Igbm93IGFuZCBsYXRlclxuXHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tZXJnZVRhcmdldCA9IE1vcmViaXRzLnN0cmluZy50b1VwcGVyQ2FzZUZpcnN0Q2hhcihcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tZXJnZVRhcmdldC5yZXBsYWNlKC9fL2csICcgJylcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHwke3BhcmFtcy5tZXJnZVRhcmdldH1gO1xuXHRcdFx0XHRcdFx0XHRcdC8vIGxpbmsgdG8gdGhlIGNvcnJlY3Qgc2VjdGlvbiBvbiB0aGUgdGFsayBwYWdlLCBmb3IgYXJ0aWNsZSBzcGFjZSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KHBhcmFtcy5tZXJnZVJlYXNvbiB8fCBwYXJhbXMuZGlzY3Vzc0FydGljbGUpXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXBhcmFtcy5kaXNjdXNzQXJ0aWNsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBkaXNjdXNzQXJ0aWNsZSBpcyB0aGUgYXJ0aWNsZSB3aG9zZSB0YWxrIHBhZ2Ugd2lsbCBjb250YWluIHRoZSBkaXNjdXNzaW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5kaXNjdXNzQXJ0aWNsZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnTmFtZSA9PT0gJ01lcmdlIHRvJyA/IHBhcmFtcy5tZXJnZVRhcmdldCA6IG13LmNvbmZpZy5nZXQoJ3dnVGl0bGUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gbm9uRGlzY3Vzc0FydGljbGUgaXMgdGhlIGFydGljbGUgd2hpY2ggd29uJ3QgaGF2ZSB0aGUgZGlzY3Vzc2lvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubm9uRGlzY3Vzc0FydGljbGUgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhZ05hbWUgPT09ICdNZXJnZSB0bycgPyBtdy5jb25maWcuZ2V0KCd3Z1RpdGxlJykgOiBwYXJhbXMubWVyZ2VUYXJnZXQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy50YWxrRGlzY3Vzc2lvblRpdGxlID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ivt+axguS4jicsICfoq4vmsYLoiIcnKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm5vbkRpc2N1c3NBcnRpY2xlICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WQiOW5ticsICflkIjkvbUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHxkaXNjdXNzPVRhbGs6JHtwYXJhbXMuZGlzY3Vzc0FydGljbGV9IyR7cGFyYW1zLnRhbGtEaXNjdXNzaW9uVGl0bGV9YDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdNaXNzaW5nIGluZm9ybWF0aW9uJzpcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDE9JHtwYXJhbXMubWlzc2luZ0luZm9ybWF0aW9ufWA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnTm90YWJpbGl0eSc6XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbXMubm90YWJpbGl0eSAhPT0gJ25vbmUnKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDM9JHtwYXJhbXMubm90YWJpbGl0eX1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnUmVxdWVzdGVkIG1vdmUnOlxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLm1vdmVUYXJnZXQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBub3JtYWxpemUgdGhlIG1vdmUgdGFyZ2V0IGZvciBub3cgYW5kIGxhdGVyXG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1vdmVUYXJnZXQgPSBNb3JlYml0cy5zdHJpbmcudG9VcHBlckNhc2VGaXJzdENoYXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubW92ZVRhcmdldC5yZXBsYWNlKC9fL2csICcgJylcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5kaXNjdXNzQXJ0aWNsZSA9IG13LmNvbmZpZy5nZXQoJ3dnVGl0bGUnKTtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8JHtwYXJhbXMubW92ZVRhcmdldH1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnU3BsaXQnOlxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLnRhcmdldDEpIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8MT0ke3BhcmFtcy50YXJnZXQxfWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy50YXJnZXQyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDI9JHtwYXJhbXMudGFyZ2V0Mn1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbXMudGFyZ2V0Mykge1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHwzPSR7cGFyYW1zLnRhcmdldDN9YDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0NsZWFudXAnOlxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLmNsZWFudXBSZWFzb24pIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8cmVhc29uPSR7cGFyYW1zLmNsZWFudXBSZWFzb259YDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjdXJyZW50VGFnICs9ICd8dGltZT17eycuY29uY2F0KCdzdWJzdDonLCAnI3RpbWU6Y319fX1cXG4nKTtcblx0XHRcdFx0XHR0YWdUZXh0ICs9IGN1cnJlbnRUYWc7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHQvKipcblx0XHRcdCAqIEFkZHMgdGhlIHRhZ3Mgd2hpY2ggZ28gb3V0c2lkZSB7e211bHRpcGxlIGlzc3Vlc319LCBlaXRoZXIgYmVjYXVzZVxuXHRcdFx0ICogdGhlc2UgdGFncyBhcmVuJ3Qgc3VwcG9ydGVkIGluIHt7bXVsdGlwbGUgaXNzdWVzfX0gb3IgYmVjYXVzZVxuXHRcdFx0ICoge3ttdWx0aXBsZSBpc3N1ZXN9fSBpcyBub3QgYmVpbmcgYWRkZWQgdG8gdGhlIHBhZ2UgYXQgYWxsXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGFkZFVuZ3JvdXBlZFRhZ3MgPSAoKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcblx0XHRcdFx0XHRhZGRUYWcodGFnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJbnNlcnQgdGFnIGFmdGVyIHNob3J0IGRlc2NyaXB0aW9uIG9yIGFueSBoYXRub3Rlcyxcblx0XHRcdFx0Ly8gYXMgd2VsbCBhcyBkZWxldGlvbi9wcm90ZWN0aW9uLXJlbGF0ZWQgdGVtcGxhdGVzXG5cdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpdGV4dC5wYWdlKHBhZ2VUZXh0KTtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVzQWZ0ZXIgPVxuXHRcdFx0XHRcdC8vIFByb3RlY3Rpb24gdGVtcGxhdGVzXG5cdFx0XHRcdFx0Ly8gQ1NEXG5cdFx0XHRcdFx0Ly8gQWZEXG5cdFx0XHRcdFx0YCR7VHdpbmtsZS5oYXRub3RlUmVnZXh9cHB8cHAtLio/fCg/OkRlbGV0ZXxEYi1yZWFzb258RHxEZWxldGViZWNhdXNlfERifOmAn+WIoHzpgJ/liKp8U3BlZWR5fFNEfOW/q+WIoHzlv6vliKp8Q1NEKXxbcnNhaWZ0Y212XWZkfHZmZC0oPzpifHF8c3xzb3VyY2V8dnx3aWt0KXwoPzrnp7vliqjliLDnu7Tln7p856e75YuV5Yiw57at5Z+6KSg/OuaVmeenkeS5pnzmlZnnp5Hmm7h86K+t5b2VfOiqnumMhHzmloflupN85paH5bqrfOWvvOa4uHzlsI7pgYp86K+N5YW4fOipnuWFuClgO1xuXHRcdFx0XHRwYWdlVGV4dCA9IHlzYXJjaGl2ZXNfcGFnZS5pbnNlcnRBZnRlclRlbXBsYXRlcyh0YWdUZXh0LCB0ZW1wbGF0ZXNBZnRlcikuZ2V0VGV4dCgpO1xuXHRcdFx0XHRyZW1vdmVUYWdzKCk7XG5cdFx0XHR9O1xuXHRcdFx0Ly8gU2VwYXJhdGUgdGFncyBpbnRvIGdyb3VwYWJsZSBvbmVzIChgZ3JvdXBhYmxlVGFnc2ApIGFuZCBub24tZ3JvdXBhYmxlIG9uZXMgKGB0YWdzYClcblx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHBhcmFtcy50YWdzKSB7XG5cdFx0XHRcdHRhZ1JlID0gbmV3IFJlZ0V4cChgXFxcXHtcXFxceyR7dGFnfShcXFxcfHxcXFxcfVxcXFx9KWAsICdpbScpO1xuXHRcdFx0XHQvLyByZWdleCBjaGVjayBmb3IgcHJlZXhpc3RlbmNlIG9mIHRhZyBjYW4gYmUgc2tpcHBlZCBpZiBpbiBjYW5SZW1vdmUgbW9kZVxuXHRcdFx0XHRpZiAoVHdpbmtsZS50YWcuY2FuUmVtb3ZlIHx8ICF0YWdSZS5leGVjKHBhZ2VUZXh0KSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHRhZyA9PT0gJ05vdGFiaWxpdHknICYmXG5cdFx0XHRcdFx0XHQobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gMCB8fFxuXHRcdFx0XHRcdFx0XHRjb25maXJtKFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfor6XpobXpnaLkuI3mmK/mnaHnm67vvIzmgqjku43opoHmj5DmiqXliLDlhbPms6jluqbmj5DmiqXlkJfvvJ8nLFxuXHRcdFx0XHRcdFx0XHRcdFx0J+ipsumggemdouS4jeaYr+aineebru+8jOaCqOS7jeimgeaPkOWgseWIsOmXnOazqOW6puaPkOWgseWXju+8nydcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHQnTElCX3RhbGs65a2Y5bqf6K6o6K66L+WFs+azqOW6puaPkOaKpScsXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg5YWl5YWz5rOo5bqm6K6w5b2V6aG5JywgJ+WKoOWFpemXnOazqOW6puiomOmMhOmghScpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEZvbGxvd1JlZGlyZWN0KHRydWUpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLmxvYWQoVHdpbmtsZS50YWcuY2FsbGJhY2tzLm5vdGFiaWxpdHlMaXN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY29uZGl0aW9uIFR3aW5rbGUudGFnLmFydGljbGUudGFnc1t0YWddIHRvIGVuc3VyZSB0aGF0IGl0cyBub3QgYSBjdXN0b20gdGFnXG5cdFx0XHRcdFx0Ly8gQ3VzdG9tIHRhZ3MgYXJlIGFzc3VtZWQgbm9uLWdyb3VwYWJsZSwgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGV0aGVyIE1JIHRlbXBsYXRlIHN1cHBvcnRzIHRoZW1cblx0XHRcdFx0XHRpZiAoVHdpbmtsZS50YWcuYXJ0aWNsZS5mbGF0T2JqZWN0W3RhZ10gJiYgIVR3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFt0YWddLmV4Y2x1ZGVNSSkge1xuXHRcdFx0XHRcdFx0Z3JvdXBhYmxlVGFncy5wdXNoKHRhZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhZ3MucHVzaCh0YWcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh0YWcgPT09ICdNZXJnZSBmcm9tJykge1xuXHRcdFx0XHRcdHRhZ3MucHVzaCh0YWcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy53YXJuKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WcqOmhtemdouS4iuaJvuWIsHt7JywgJ+WcqOmggemdouS4iuaJvuWIsHt7JykgKyB0YWcgKyB3aW5kb3cud2dVTFMoJ3194oCm4oCm6Lez6L+HJywgJ3194oCm4oCm6Lez6YGOJylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdC8vIGRvbid0IGRvIGFueXRoaW5nIGVsc2Ugd2l0aCBtZXJnZSB0YWdzXG5cdFx0XHRcdFx0aWYgKFsnTWVyZ2UnLCAnTWVyZ2UgdG8nXS5pbmNsdWRlcyh0YWcpKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXMubWVyZ2VUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHRcdFx0cGFyYW1zLm1lcmdlUmVhc29uID0gbnVsbDtcblx0XHRcdFx0XHRcdHBhcmFtcy5tZXJnZVRhZ090aGVyID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFRvLWJlLXJldGFpbmVkIGV4aXN0aW5nIHRhZ3MgdGhhdCBhcmUgZ3JvdXBhYmxlXG5cdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiBwYXJhbXMudGFnc1RvUmVtYWluKSB7XG5cdFx0XHRcdC8vIElmIHRoZSB0YWcgaXMgdW5rbm93biB0byB1cywgd2UgY29uc2lkZXIgaXQgbm9uLWdyb3VwYWJsZVxuXHRcdFx0XHRpZiAoVHdpbmtsZS50YWcuYXJ0aWNsZS5mbGF0T2JqZWN0W3RhZ10gJiYgIVR3aW5rbGUudGFnLmFydGljbGUuZmxhdE9iamVjdFt0YWddLmV4Y2x1ZGVNSSkge1xuXHRcdFx0XHRcdGdyb3VwYWJsZUV4aXN0aW5nVGFncy5wdXNoKHRhZyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IG1pVGVzdCA9XG5cdFx0XHRcdC9cXHtcXHsobXVsdGlwbGUgP2lzc3Vlc3xhcnRpY2xlID9pc3N1ZXN8bWl8YWl8aXNzdWVzfOWkmuWAi+WVj+mhjHzlpJrkuKrpl67poph85ZWP6aGM5qKd55uufOmXrumimOadoeebrnzmlbjlgIvllY/poYx85pWw5Liq6Zeu6aKYKVxccypcXHxbXn1dK1xcey9pbS5leGVjKFxuXHRcdFx0XHRcdHBhZ2VUZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHRpZiAobWlUZXN0ICYmIGdyb3VwYWJsZVRhZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Yqg5YWl5pSv5oyB55qE5qCH6K6w5YWl5bey5a2Y5Zyo55qEe3ttdWx0aXBsZSBpc3N1ZXN9fScsXG5cdFx0XHRcdFx0XHQn5Yqg5YWl5pSv5o+055qE5qiZ6KiY5YWl5bey5a2Y5Zyo55qEe3ttdWx0aXBsZSBpc3N1ZXN9fSdcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRhZ1RleHQgPSAnJztcblx0XHRcdFx0Zm9yIChjb25zdCB0YWcgb2YgZ3JvdXBhYmxlVGFncykge1xuXHRcdFx0XHRcdGFkZFRhZyh0YWcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1pUmVnZXggPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdGAoXFxcXHtcXFxce1xcXFxzKiR7bWlUZXN0WzFdfVxcXFxzKig/OlxcXFx8KD86XFxcXHtcXFxce1tee31dKlxcXFx9XFxcXH18W157fV0pKik/KVxcXFx9XFxcXH1cXFxccypgLFxuXHRcdFx0XHRcdCdpbSdcblx0XHRcdFx0KTtcblx0XHRcdFx0cGFnZVRleHQgPSBwYWdlVGV4dC5yZXBsYWNlKG1pUmVnZXgsIGAkMSR7dGFnVGV4dH19fVxcbmApO1xuXHRcdFx0XHR0YWdUZXh0ID0gJyc7XG5cdFx0XHRcdGFkZFVuZ3JvdXBlZFRhZ3MoKTtcblx0XHRcdH0gZWxzZSBpZiAocGFyYW1zLmdyb3VwICYmICFtaVRlc3QgJiYgZ3JvdXBhYmxlRXhpc3RpbmdUYWdzLmxlbmd0aCArIGdyb3VwYWJsZVRhZ3MubGVuZ3RoID49IDIpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfliqDlhaXmlK/mjIHnmoTmoIforrDlhaV7e211bHRpcGxlIGlzc3Vlc319JywgJ+WKoOWFpeaUr+aPtOeahOaomeiomOWFpXt7bXVsdGlwbGUgaXNzdWVzfX0nKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0YWdUZXh0ICs9ICd7e011bHRpcGxlIGlzc3Vlc3xcXG4nO1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogQWRkcyBuZXdseSBhZGRlZCB0YWdzIHRvIE1JXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCBhZGROZXdUYWdzVG9NSSA9ICgpID0+IHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiBncm91cGFibGVUYWdzKSB7XG5cdFx0XHRcdFx0XHRhZGRUYWcodGFnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGFnVGV4dCArPSAnfX1cXG4nO1xuXHRcdFx0XHRcdGFkZFVuZ3JvdXBlZFRhZ3MoKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgZ2V0UmVkaXJlY3RzRm9yID0gW107XG5cdFx0XHRcdC8vIFJlcG9zaXRpb24gdGhlIHRhZ3Mgb24gdGhlIHBhZ2UgaW50byB7e211bHRpcGxlIGlzc3Vlc319LCBpZiBmb3VuZCB3aXRoIGl0c1xuXHRcdFx0XHQvLyBwcm9wZXIgbmFtZSwgZWxzZSBtb3ZlcyBpdCB0byBgZ2V0UmVkaXJlY3RzRm9yYCBhcnJheSB0byBiZSBoYW5kbGVkIGxhdGVyXG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIGdyb3VwYWJsZUV4aXN0aW5nVGFncykge1xuXHRcdFx0XHRcdGNvbnN0IHRhZ19yZSA9IG5ldyBSZWdFeHAoYChcXFxce1xcXFx7JHtNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KHRhZyl9XFxcXHMqKFxcXFx8W159XSspP1xcXFx9XFxcXH1cXFxcbj8pYCk7XG5cdFx0XHRcdFx0aWYgKHRhZ19yZS50ZXN0KHBhZ2VUZXh0KSkge1xuXHRcdFx0XHRcdFx0dGFnVGV4dCArPSB0YWdfcmUuZXhlYyhwYWdlVGV4dClbMV07XG5cdFx0XHRcdFx0XHRwYWdlVGV4dCA9IHBhZ2VUZXh0LnJlcGxhY2UodGFnX3JlLCAnJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGdldFJlZGlyZWN0c0Zvci5wdXNoKGBUZW1wbGF0ZToke3RhZ31gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFnZXRSZWRpcmVjdHNGb3IubGVuZ3RoKSB7XG5cdFx0XHRcdFx0YWRkTmV3VGFnc1RvTUkoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W5qih5p2/6YeN5a6a5ZCRJywgJ+WPluW+l+aooeadv+mHjeaWsOWwjuWQkScpLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHByb3A6ICdsaW5rc2hlcmUnLFxuXHRcdFx0XHRcdFx0dGl0bGVzOiBnZXRSZWRpcmVjdHNGb3Iuam9pbignfCcpLFxuXHRcdFx0XHRcdFx0cmVkaXJlY3RzOiAxLFxuXHRcdFx0XHRcdFx0bGhuYW1lc3BhY2U6ICcxMCcsXG5cdFx0XHRcdFx0XHRsaHNob3c6ICdyZWRpcmVjdCcsXG5cdFx0XHRcdFx0XHRsaGxpbWl0OiAnbWF4JywgLy8gNTAwIGlzIG1heCBmb3Igbm9ybWFsIHVzZXJzLCA1MDAwIGZvciBib3RzIGFuZCBzeXNvcHNcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdChhcGlvYmopID0+IHtcblx0XHRcdFx0XHRcdCQoYXBpb2JqLnJlc3BvbnNlWE1MKVxuXHRcdFx0XHRcdFx0XHQuZmluZCgncGFnZScpXG5cdFx0XHRcdFx0XHRcdC5lYWNoKChfaWR4LCBwYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0JChwYWdlKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmZpbmQoJ2xoJylcblx0XHRcdFx0XHRcdFx0XHRcdC5lYWNoKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGFnID0gJChlbGVtZW50KS5hdHRyKCd0aXRsZScpLnNsaWNlKDkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0YWdfcmUgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGAoXFxcXHtcXFxceyR7TW9yZWJpdHMucGFnZU5hbWVSZWdleCh0YWcpfVxcXFxzKihcXFxcfFtefV0qKT9cXFxcfVxcXFx9XFxcXG4/KWBcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRhZ19yZS50ZXN0KHBhZ2VUZXh0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhZ1RleHQgKz0gdGFnX3JlLmV4ZWMocGFnZVRleHQpWzFdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhZ2VUZXh0ID0gcGFnZVRleHQucmVwbGFjZSh0YWdfcmUsICcnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBicmVhayBvdXQgb2YgJC5lYWNoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFmb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aXoOazleWcqOmhtemdouS4iuaJvuWIsHt7JywgJ+eEoeazleWcqOmggemdouS4iuaJvuWIsHt7JykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCQocGFnZSkuYXR0cigndGl0bGUnKS5zbGljZSg5KSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCd9feKApuKApui3s+i/hycsICd9feKApuKApui3s+mBjicpXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRhZGROZXdUYWdzVG9NSSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdFx0YXBpLnBvc3QoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhZ3MgPSBbLi4udGFncywgLi4uZ3JvdXBhYmxlVGFnc107XG5cdFx0XHRcdGFkZFVuZ3JvdXBlZFRhZ3MoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG5vdGFiaWxpdHlMaXN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0cGFnZW9iai5zZXRBcHBlbmRUZXh0KCdcXG57eycuY29uY2F0KCdzdWJzdDonLCBgRmFtZWl0ZW18dGl0bGU9JHtNb3JlYml0cy5wYWdlTmFtZU5vcm19fX1gKSk7XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KGDliqDlhaVbWyR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dYCk7XG5cdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdFx0cGFnZW9iai5hcHBlbmQoKTtcblx0XHR9LFxuXHRcdHJlZGlyZWN0OiAocGFnZW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGxldCBwYWdlVGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGxldCB0YWdSZTtcblx0XHRcdGxldCB0YWdUZXh0ID0gJyc7XG5cdFx0XHRsZXQgc3VtbWFyeVRleHQgPSAn5Yqg5YWlJztcblx0XHRcdGNvbnN0IHRhZ3MgPSBbXTtcblx0XHRcdGxldCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHBhcmFtcy50YWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHRhZ1JlID0gbmV3IFJlZ0V4cChgKFxcXFx7XFxcXHske3BhcmFtcy50YWdzW2ldfShcXFxcfHxcXFxcfVxcXFx9KSlgLCAnaW0nKTtcblx0XHRcdFx0aWYgKHRhZ1JlLmV4ZWMocGFnZVRleHQpKSB7XG5cdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Zyo6YeN5a6a5ZCR5LiK5om+5Yiwe3snLCAn5Zyo6YeN5paw5bCO5ZCR5LiK5om+5Yiwe3snKSArXG5cdFx0XHRcdFx0XHRcdHBhcmFtcy50YWdzW2ldICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCd9feKApuKApui3s+i/hycsICd9feKApuKApui3s+mBjicpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YWdzLnB1c2gocGFyYW1zLnRhZ3NbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyB1c2VkIGluIEFycmF5I2ZvckVhY2hcblx0XHRcdGNvbnN0IGFkZFRhZyA9ICh0YWdOYW1lLCB0YWdJbmRleCkgPT4ge1xuXHRcdFx0XHR0YWdUZXh0ICs9IGBcXG57eyR7dGFnTmFtZX1gO1xuXHRcdFx0XHRpZiAodGFnTmFtZSA9PT0gJ+mdnuS4reaWh+mHjeWumuWQkScpIHtcblx0XHRcdFx0XHRpZiAocGFyYW1zLmFsdExhbmdGcm9tKSB7XG5cdFx0XHRcdFx0XHR0YWdUZXh0ICs9IGB8MT0ke3BhcmFtcy5hbHRMYW5nRnJvbX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHQodGFnTmFtZSA9PT0gJ+adoeebruivt+axgumHjeWumuWQkScgfHwgdGFnTmFtZSA9PT0gJ+aineebruiri+axgumHjeWumuWQkScpICYmXG5cdFx0XHRcdFx0cGFyYW1zLnJlcUFydGljbGVMYW5nICYmXG5cdFx0XHRcdFx0cGFyYW1zLnJlcUFydGljbGVUaXRsZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWdUZXh0ICs9IGB8MT0ke3BhcmFtcy5yZXFBcnRpY2xlTGFuZ31gO1xuXHRcdFx0XHRcdHRhZ1RleHQgKz0gYHwyPSR7cGFyYW1zLnJlcUFydGljbGVUaXRsZX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRhZ1RleHQgKz0gJ319Jztcblx0XHRcdFx0aWYgKHRhZ0luZGV4ID4gMCkge1xuXHRcdFx0XHRcdGlmICh0YWdJbmRleCA9PT0gdGFncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzdW1tYXJ5VGV4dCArPSAn5ZKMJztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHRhZ0luZGV4IDwgdGFncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzdW1tYXJ5VGV4dCArPSAn44CBJztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3VtbWFyeVRleHQgKz0gYHt7W1s6JHt0YWdOYW1lLmluY2x1ZGVzKCc6JykgPyB0YWdOYW1lIDogYFRlbXBsYXRlOiR7dGFnTmFtZX18JHt0YWdOYW1lfWB9XV19fWA7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKCF0YWdzLmxlbmd0aCkge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ayoeacieagh+etvuWPr+S+m+agh+iusCcsICfmspLmnInmqJnnsaTlj6/kvpvmqJnoqJgnKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGFncy5zb3J0KCk7XG5cdFx0XHRmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG5cdFx0XHRcdGFkZFRhZyh0YWcpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGFsbCBSY2F0IHNoZWxsIHJlZGlyZWN0cyAoZnJvbSAjNDMzKVxuXHRcdFx0aWYgKHBhZ2VUZXh0Lm1hdGNoKC97eyg/OnJlZHJ8dGhpcyBpcyBhIHJlZGlyZWN0fHIoPzplZGlyZWN0KT8oPzouP2NhdC4qKT9bIF9dP3NoKS9pKSkge1xuXHRcdFx0XHQvLyBSZWdleCBpbnNwaXJlZCBieSBbW1VzZXI6S2VwaGlyL2dhZGdldHMvc2FnaXR0YXJpdXMuanNdXSAoW1tTcGVjaWFsOlBlcm1hTGluay84MzE0MDI4OTNdXSlcblx0XHRcdFx0Y29uc3Qgb2xkVGFncyA9IHBhZ2VUZXh0Lm1hdGNoKC8oXFxzKnt7W0EtWmEtelxcc10rXFx8KD86XFxzKjE9KT8pKCg/OltefHt9XXx7e1tefV0rfX0pKykofX0pXFxzKi9pKTtcblx0XHRcdFx0cGFnZVRleHQgPSBwYWdlVGV4dC5yZXBsYWNlKG9sZFRhZ3NbMF0sIG9sZFRhZ3NbMV0gKyB0YWdUZXh0ICsgb2xkVGFnc1syXSArIG9sZFRhZ3NbM10pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRm9sZCBhbnkgcHJlLWV4aXN0aW5nIFJjYXRzIGludG8gdGFnbGlzdCBhbmQgdW5kZXIgUmNhdHNoZWxsXG5cdFx0XHRcdGNvbnN0IHBhZ2VUYWdzID0gcGFnZVRleHQubWF0Y2goL1xccyp7ey4rP+mHjeWumuWQkS4qP319L2dpbSk7XG5cdFx0XHRcdGxldCBvbGRQYWdlVGFncyA9ICcnO1xuXHRcdFx0XHRpZiAocGFnZVRhZ3MpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBwYWdlVGFnIG9mIHBhZ2VUYWdzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwYWdlUmUgPSBuZXcgUmVnRXhwKE1vcmViaXRzLnN0cmluZy5lc2NhcGVSZWdFeHAocGFnZVRhZyksICdpbWcnKTtcblx0XHRcdFx0XHRcdHBhZ2VUZXh0ID0gcGFnZVRleHQucmVwbGFjZShwYWdlUmUsICcnKTtcblx0XHRcdFx0XHRcdHBhZ2VUYWcgPSBwYWdlVGFnLnRyaW0oKTtcblx0XHRcdFx0XHRcdG9sZFBhZ2VUYWdzICs9IGBcXG4ke3BhZ2VUYWd9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFnZVRleHQgKz0gYFxcbnt7UmVkaXJlY3QgY2F0ZWdvcnkgc2hlbGx8JHt0YWdUZXh0fSR7b2xkUGFnZVRhZ3N9XFxufX1gO1xuXHRcdFx0fVxuXHRcdFx0c3VtbWFyeVRleHQgKz1cblx0XHRcdFx0KHRhZ3MubGVuZ3RoID4gMCA/IHdpbmRvdy53Z1VMUygn5qCH6K6wJywgJ+aomeiomCcpIDogJ3t7UmVkaXJlY3QgY2F0ZWdvcnkgc2hlbGx9fScpICtcblx0XHRcdFx0d2luZG93LndnVUxTKCfliLDph43lrprlkJEnLCAn5Yiw6YeN5paw5bCO5ZCRJyk7XG5cdFx0XHQvLyBhdm9pZCB0cnVuY2F0ZWQgc3VtbWFyaWVzXG5cdFx0XHRpZiAoc3VtbWFyeVRleHQubGVuZ3RoID4gNDk5KSB7XG5cdFx0XHRcdHN1bW1hcnlUZXh0ID0gc3VtbWFyeVRleHQucmVwbGFjZSgvXFxbXFxbW158XStcXHwoW15cXF1dKylcXF1cXF0vZywgJyQxJyk7XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHBhZ2VUZXh0KTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoc3VtbWFyeVRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3dhdGNoVGFnZ2VkUGFnZXMnKSk7XG5cdFx0XHRwYWdlb2JqLnNldE1pbm9yRWRpdChUd2lua2xlLmdldFByZWYoJ21hcmtUYWdnZWRQYWdlc0FzTWlub3InKSk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZSgpO1xuXHRcdFx0aWYgKHBhcmFtcy5wYXRyb2wpIHtcblx0XHRcdFx0cGFnZW9iai5wYXRyb2woKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGZpbGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRsZXQgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRsZXQgc3VtbWFyeSA9ICfliqDlhaUnO1xuXHRcdFx0Ly8gQWRkIG1haW50ZW5hbmNlIHRhZ3Ncblx0XHRcdGlmIChwYXJhbXMudGFncy5sZW5ndGgpIHtcblx0XHRcdFx0bGV0IHRhZ3RleHQgPSAnJztcblx0XHRcdFx0bGV0IGN1cnJlbnRUYWc7XG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIHBhcmFtcy50YWdzKSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiBvdGhlciBjb21tb25zLXJlbGF0ZWQgdGFncyBhcmUgcGxhY2VkLCByZW1vdmUgXCJtb3ZlIHRvIFNoYXJlXCIgdGFnXG5cdFx0XHRcdFx0aWYgKFsnS2VlcCBsb2NhbCcsICdOb3cgWXNBcmNoaXZlcyBTaGFyZScsICdEbyBub3QgbW92ZSB0byBZc0FyY2hpdmVzIFNoYXJlJ10uaW5jbHVkZXModGFnKSkge1xuXHRcdFx0XHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0L3t7KG10Y3woY29weSB8bW92ZSApP3RvID9zaGFyZXxtb3ZlIHRvIHlzYXJjaGl2ZXMgc2hhcmV8Y29weSB0byB5c2FyY2hpdmVzIHNoYXJlKVtefV0qfX0vZ2ksXG5cdFx0XHRcdFx0XHRcdCcnXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFnID09PSAnVmVjdG9yIHZlcnNpb24gYXZhaWxhYmxlJykge1xuXHRcdFx0XHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0L1xce1xceygoY29udmVydCB0byB8Y29udmVydHRvfHNob3VsZCBiZSB8c2hvdWxkYmV8dG8pP3N2Z3xiYWRwbmd8dmVjdG9yaXplKVtefV0qXFx9XFx9L2dpLFxuXHRcdFx0XHRcdFx0XHQnJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3VycmVudFRhZyA9IHRhZztcblx0XHRcdFx0XHRzd2l0Y2ggKHRhZykge1xuXHRcdFx0XHRcdFx0Y2FzZSAnTm93IENvbW1vbnMnOlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnID0gYHN1YnN0OiR7Y3VycmVudFRhZ31gOyAvLyBzdWJzdFxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLm5vd2NvbW1vbnNOYW1lICE9PSAnJykge1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHwxPSR7cGFyYW1zLm5vd2NvbW1vbnNOYW1lfWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdLZWVwIGxvY2FsJzpcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5rZWVwbG9jYWxOYW1lICE9PSAnJykge1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHwxPSR7cGFyYW1zLmtlZXBsb2NhbE5hbWV9YDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLmtlZXBsb2NhbFJlYXNvbiAhPT0gJycpIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8cmVhc29uPSR7cGFyYW1zLmtlZXBsb2NhbFJlYXNvbn1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnUmVuYW1lIG1lZGlhJzpcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5yZW5hbWVtZWRpYU5ld25hbWUgIT09ICcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDE9JHtwYXJhbXMucmVuYW1lbWVkaWFOZXduYW1lfWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy5yZW5hbWVtZWRpYVJlYXNvbiAhPT0gJycpIHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VGFnICs9IGB8Mj0ke3BhcmFtcy5yZW5hbWVtZWRpYVJlYXNvbn1gO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnVmVjdG9yIHZlcnNpb24gYXZhaWxhYmxlJzpcblx0XHRcdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0XHRcdGNhc2UgJ09ic29sZXRlJzpcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfDE9JHtwYXJhbXNbYCR7dGFnLnJlcGxhY2UoLyAvZywgJ18nKX1GaWxlYF19YDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdEbyBub3QgbW92ZSB0byBDb21tb25zJzpcblx0XHRcdFx0XHRcdFx0Y3VycmVudFRhZyArPSBgfHJlYXNvbj0ke3BhcmFtcy5Eb05vdE1vdmVUb0NvbW1vbnNfcmVhc29ufWA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnQ29weSB0byBXaWtpbWVkaWEgQ29tbW9ucyc6XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUYWcgKz0gYHxodW1hbj0ke213LmNvbmZpZy5nZXQoJ3dnVXNlck5hbWUnKX1gO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gZG9uJ3QgY2FyZVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGN1cnJlbnRUYWcgPSBge3ske2N1cnJlbnRUYWd9fX1cXG5gO1xuXHRcdFx0XHRcdHRhZ3RleHQgKz0gY3VycmVudFRhZztcblx0XHRcdFx0XHRzdW1tYXJ5ICs9IGB7eyR7dGFnfX1944CBYDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRhZ3RleHQpIHtcblx0XHRcdFx0XHRwYWdlb2JqXG5cdFx0XHRcdFx0XHQuZ2V0U3RhdHVzRWxlbWVudCgpXG5cdFx0XHRcdFx0XHQud2Fybih3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nO+8jOayoeS7gOS5iOimgeWBmueahCcsICfkvb/nlKjogIXlj5bmtojmk43kvZzvvIzmspLku4DpurzopoHlgZrnmoQnKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRleHQgPSB0YWd0ZXh0ICsgdGV4dDtcblx0XHRcdH1cblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQodGV4dCk7XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KHN1bW1hcnkuc2xpY2UoMCwgTWF0aC5tYXgoMCwgc3VtbWFyeS5sZW5ndGggLSAxKSkpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3dhdGNoVGFnZ2VkUGFnZXMnKSk7XG5cdFx0XHRwYWdlb2JqLnNldE1pbm9yRWRpdChUd2lua2xlLmdldFByZWYoJ21hcmtUYWdnZWRQYWdlc0FzTWlub3InKSk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZSgpO1xuXHRcdFx0aWYgKHBhcmFtcy5wYXRyb2wpIHtcblx0XHRcdFx0cGFnZW9iai5wYXRyb2woKTtcblx0XHRcdH1cblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLnRhZy5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHBhcmFtcyA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZm9ybSk7XG5cdFx0Ly8gVmFsaWRhdGlvblxuXHRcdC8vIEdpdmVuIGFuIGFycmF5IG9mIGluY29tcGF0aWJsZSB0YWdzLCBjaGVjayBpZiB3ZSBoYXZlIHR3byBvciBtb3JlIHNlbGVjdGVkXG5cdFx0Y29uc3QgY2hlY2tJbmNvbXBhdGlibGUgPSAoY29uZmxpY3RzLCBleHRyYSkgPT4ge1xuXHRcdFx0Y29uc3QgY291bnQgPSBjb25mbGljdHMucmVkdWNlKChzdW0sIHRhZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKHN1bSArPSBwYXJhbXMudGFncy5pbmNsdWRlcyh0YWcpKTtcblx0XHRcdH0sIDApO1xuXHRcdFx0aWYgKGNvdW50ID4gMSkge1xuXHRcdFx0XHRsZXQgbWVzc2FnZSA9IGAke3dpbmRvdy53Z1VMUygn6K+35Zyo5Lul5LiL5qCH562+5Lit5oup5LiA5L2/55SoJywgJ+iri+WcqOS7peS4i+aomeexpOS4reaTh+S4gOS9v+eUqCcpfe+8mnt7JHtjb25mbGljdHMuam9pbihcblx0XHRcdFx0XHQnfX3jgIF7eydcblx0XHRcdFx0KX19feOAgmA7XG5cdFx0XHRcdG1lc3NhZ2UgKz0gZXh0cmEgfHwgJyc7XG5cdFx0XHRcdG13Lm5vdGlmeShtZXNzYWdlLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ2ZyaWVuZGx5dGFnJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gR2l2ZW4gYSB0YWcsIGVuc3VyZSBhbiBhc3NvY2lhdGUgcGFyYW1ldGVyIGlzIHByZXNlbnRcblx0XHQvLyBNYXliZSBqdXN0IHNvY2sgdGhpcyBhd2F5IGluIGVhY2ggZnVuY3Rpb24/Pz9cblx0XHRjb25zdCBjaGVja1BhcmFtZXRlciA9ICh0YWcsIHBhcmFtZXRlciwgZGVzY3JpcHRpb24gPSAn55CG55SxJykgPT4ge1xuXHRcdFx0aWYgKHBhcmFtcy50YWdzLmluY2x1ZGVzKHRhZykgJiYgcGFyYW1zW3BhcmFtZXRlcl0udHJpbSgpID09PSAnJykge1xuXHRcdFx0XHRtdy5ub3RpZnkoYCR7d2luZG93LndnVUxTKCfmgqjlv4XpobvmjIflrponLCAn5oKo5b+F6aCI5oyH5a6aJyl9e3ske3RhZ319feeahCR7ZGVzY3JpcHRpb25944CCYCwge1xuXHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHR0YWc6ICdmcmllbmRseXRhZycsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8vIFdlIGNvdWxkIHRoZW9yZXRpY2FsbHkgcHV0IHRoZW0gYWxsIGNoZWNrSW5jb21wYXRpYmxlIGNhbGxzIGluIGFcblx0XHQvLyBmb3JFYWNoIGxvb3AsIGJ1dCBpdCdzIHByb2JhYmx5IGNsZWFyZXIgbm90IHRvIGhhdmUgW1thcnJheSBvbmVdLFxuXHRcdC8vIFthcnJheSB0d29dXSBkZXZvaWQgb2YgY29udGV4dC4gTGlrZXdpc2UsIGFsbCB0aGUgY2hlY2tQYXJhbWV0ZXJcblx0XHQvLyBjYWxscyBjb3VsZCBiZSBpbiBvbmUgaWYsIGJ1dCBjb3VsZCBiZSBzaW1pbGFybHkgY29uZnVzaW5nLlxuXHRcdHN3aXRjaCAoVHdpbmtsZS50YWcubW9kZUVuKSB7XG5cdFx0XHRjYXNlICdhcnRpY2xlJzpcblx0XHRcdFx0cGFyYW1zLnRhZ3NUb1JlbW92ZSA9IGZvcm0uZ2V0VW5jaGVja2VkKCdleGlzdGluZ1RhZ3MnKTsgLy8gbm90IGluIGBpbnB1dGBcblx0XHRcdFx0cGFyYW1zLnRhZ3NUb1JlbWFpbiA9IHBhcmFtcy5leGlzdGluZ1RhZ3MgfHwgW107IC8vIGNvbnRhaW5lciBub3QgY3JlYXRlZCBpZiBub25lIHByZXNlbnRcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHBhcmFtcy50YWdzLmluY2x1ZGVzKCdNZXJnZScpIHx8XG5cdFx0XHRcdFx0cGFyYW1zLnRhZ3MuaW5jbHVkZXMoJ01lcmdlIGZyb20nKSB8fFxuXHRcdFx0XHRcdHBhcmFtcy50YWdzLmluY2x1ZGVzKCdNZXJnZSB0bycpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGNoZWNrSW5jb21wYXRpYmxlKFxuXHRcdFx0XHRcdFx0XHRbJ01lcmdlJywgJ01lcmdlIGZyb20nLCAnTWVyZ2UgdG8nXSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfoi6XpnIDopoHlpJrmrKHlkIjlubbvvIzor7fkvb/nlKh7e01lcmdlfX3lubbnlKjnrqHpgZPnrKbliIbpmpTmnaHnm67lkI3vvIjkvYblnKjov5nnp43mg4XlvaLkuK1Ud2lua2xl5LiN6IO96Ieq5Yqo5qCH6K6w5YW25LuW5p2h55uu77yJ44CCJyxcblx0XHRcdFx0XHRcdFx0XHQn6Iul6ZyA6KaB5aSa5qyh5ZCI5L2177yM6KuL5L2/55Soe3tNZXJnZX195Lim55So566h6YGT56ym5YiG6ZqU5qKd55uu5ZCN77yI5L2G5Zyo6YCZ56iu5oOF5b2i5LitVHdpbmtsZeS4jeiDveiHquWLleaomeiomOWFtuS7luaineebru+8ieOAgidcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIXBhcmFtcy5tZXJnZVRhcmdldCkge1xuXHRcdFx0XHRcdFx0bXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+ivt+aMh+WumuS9v+eUqOS6jm1lcmdl5qih5p2/5Lit55qE5Y+m5LiA5Liq6aG16Z2i5qCH6aKY44CCJyxcblx0XHRcdFx0XHRcdFx0XHQn6KuL5oyH5a6a5L2/55So5pa8bWVyZ2XmqKHmnb/kuK3nmoTlj6bkuIDlgIvpoIHpnaLmqJnpoYzjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0dGFnOiAnZnJpZW5kbHl0YWcnLFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoKHBhcmFtcy5tZXJnZVRhZ090aGVyIHx8IHBhcmFtcy5tZXJnZVJlYXNvbikgJiYgcGFyYW1zLm1lcmdlVGFyZ2V0LmluY2x1ZGVzKCd8JykpIHtcblx0XHRcdFx0XHRcdG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCflvZPliY3ov5jkuI3mlK/mjIHlnKjkuIDmrKHlkIjlubbkuK3moIforrDlpJrkuKrmnaHnm67vvIzkuI7lvIDlkK/lhbPkuo7lpJrkuKrmnaHnm67nmoTorqjorrrjgILor7fkuI3opoHli77pgInigJzmoIforrDlhbbku5bmnaHnm67igJ3lubbmuIXnqbrigJznkIbnlLHigJ3moYblkI7lho3mj5DkuqTjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfnm67liY3pgoTkuI3mlK/mj7TlnKjkuIDmrKHlkIjkvbXkuK3mqJnoqJjlpJrlgIvmop3nm67vvIzoiIfplovllZ/pl5zmlrzlpJrlgIvmop3nm67nmoToqI7oq5bjgILoq4vkuI3opoHli77pgbjjgIzmqJnoqJjlhbbku5bmop3nm67jgI3kuKbmuIXnqbrjgIznkIbnlLHjgI3moYblvozlho3mj5DkuqTjgIInXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdFx0XHRcdFx0dGFnOiAnZnJpZW5kbHl0YWcnLFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y2hlY2tQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHQnTWlzc2luZyBpbmZvcm1hdGlvbicsXG5cdFx0XHRcdFx0XHQnbWlzc2luZ0luZm9ybWF0aW9uJyxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn57y65bCR55qE5YaF5a65JywgJ+e8uuWwkeeahOWFp+WuuScpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoZWNrUGFyYW1ldGVyKCdFeHBlcnQgbmVlZGVkJywgJ2V4cGVydCcsIHdpbmRvdy53Z1VMUygn5LiT5a626aKG5Z+fJywgJ+WwiOWutumgmOWfnycpKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2ZpbGUnOlxuXHRcdFx0XHQvLyBTaWxseSB0byBwcm92aWRlIHRoZSBzYW1lIHN0cmluZyB0byBlYWNoIG9mIHRoZXNlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRjaGVja1BhcmFtZXRlcignT2Jzb2xldGUnLCAnT2Jzb2xldGVGaWxlJywgd2luZG93LndnVUxTKCfmm7/mjaLnmoTmlofku7blkI3np7AnLCAn5pu/5o+b55qE5qqU5qGI5ZCN56ixJykpIHx8XG5cdFx0XHRcdFx0Y2hlY2tQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHQnVmVjdG9yIHZlcnNpb24gYXZhaWxhYmxlJyxcblx0XHRcdFx0XHRcdCdWZWN0b3JfdmVyc2lvbl9hdmFpbGFibGVGaWxlJyxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pu/5o2i55qE5paH5Lu25ZCN56ewJywgJ+abv+aPm+eahOaqlOahiOWQjeeosScpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoZWNrUGFyYW1ldGVyKCdEbyBub3QgbW92ZSB0byBDb21tb25zJywgJ0RvTm90TW92ZVRvQ29tbW9uc19yZWFzb24nKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JlZGlyZWN0Jzpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtdy5ub3RpZnkoYFR3aW5rbGUudGFn77ya5pyq55+l5qih5byPICR7VHdpbmtsZS50YWcubW9kZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ2ZyaWVuZGx5dGFnJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBGaWxlL3JlZGlyZWN0OiByZXR1cm4gaWYgbm8gdGFncyBzZWxlY3RlZFxuXHRcdC8vIEFydGljbGU6IHJldHVybiBpZiBubyB0YWcgaXMgc2VsZWN0ZWQgYW5kIG5vIGFscmVhZHkgcHJlc2VudCB0YWcgaXMgZGVzZWxlY3RlZFxuXHRcdGlmIChwYXJhbXMudGFncy5sZW5ndGggPT09IDAgJiYgKFR3aW5rbGUudGFnLm1vZGVFbiAhPT0gJ2FydGljbGUnIHx8IHBhcmFtcy50YWdzVG9SZW1vdmUubGVuZ3RoID09PSAwKSkge1xuXHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5b+F6aG76YCJ5oup6Iez5bCR5LiA5Liq5qCH6K6w77yBJywgJ+W/hemgiOmBuOaTh+iHs+WwkeS4gOWAi+aomeiomO+8gScpLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAnZnJpZW5kbHl0YWcnLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBNb3JlYml0cy5wYWdlTmFtZU5vcm07XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKFxuXHRcdFx0J+agh+iusOWujOaIkO+8jOWwhuWcqOWHoOenkuWGheWIt+aWsOmhtemdoicsXG5cdFx0XHQn5qiZ6KiY5a6M5oiQ77yM5bCH5Zyo5bm+56eS5YWn6YeN5paw5pW055CG6aCB6Z2iJ1xuXHRcdCk7XG5cdFx0aWYgKFR3aW5rbGUudGFnLm1vZGVFbiA9PT0gJ3JlZGlyZWN0Jykge1xuXHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZm9sbG93UmVkaXJlY3QgPSBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdE1vcmViaXRzLnBhZ2VOYW1lTm9ybSxcblx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5qCH6K6wJywgJ+ato+WcqOaomeiomCcpICsgVHdpbmtsZS50YWcubW9kZVxuXHRcdCk7XG5cdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUudGFnLmNhbGxiYWNrc1tUd2lua2xlLnRhZy5tb2RlRW5dKTtcblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS50YWcsICd0YWcnKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IHtnZW5lcmF0ZUFycmF5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG4vKiEgVHdpbmtsZS5qcyAtIHR3aW5rbGVzdHViLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZXN0dWIoJCkge1xuXHQvKipcblx0ICogdHdpbmtsZXN0dWIuanM6IFRhZyBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiU3R1YlwiKVxuXHQgKiBBY3RpdmUgb246IEV4aXN0aW5nIGFydGljbGVzXG5cdCAqIENvbmZpZyBkaXJlY3RpdmVzIGluOiBGcmllbmRseUNvbmZpZ1xuXHQgKiBOb3RlOiBjdXN0b21pc2VkIGZyaWVuZGx5dGFnIG1vZHVsZVxuXHQgKi9cblx0VHdpbmtsZS5zdHViID0gKCkgPT4ge1xuXHRcdGlmIChNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCgpKSB7XG5cdFx0XHQvLyBTa2lwXG5cdFx0XHQvLyBhcnRpY2xlL2RyYWZ0IGFydGljbGUgdGFnZ2luZ1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoWzAsIDExOF0uaW5jbHVkZXMobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSkgJiYgbXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJykpIHx8XG5cdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gPT09IFR3aW5rbGUuZ2V0UHJlZignc2FuZGJveFBhZ2UnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5zdHViLm1vZGUgPSAn5p2h55uuJztcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoVHdpbmtsZS5zdHViLmNhbGxiYWNrLCAn5bCP5L2c5ZOBJywgJ2ZyaWVuZGx5LXRhZycsICfmoIforrDlsI/kvZzlk4EnKTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuc3R1Yi5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRpZiAoTW9yZWJpdHMuaXNQYWdlUmVkaXJlY3QoKSkge1xuXHRcdFx0Ly8gU2tpcFxuXHRcdFx0Ly8gYXJ0aWNsZS9kcmFmdCBhcnRpY2xlIHRhZ2dpbmdcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAwIHx8IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDExOCkgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJykpIHx8XG5cdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gPT09IFR3aW5rbGUuZ2V0UHJlZignc2FuZGJveFBhZ2UnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5zdHViLm1vZGUgPSB3aW5kb3cud2dVTFMoJ+adoeebricsICfmop3nm64nKTtcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdFR3aW5rbGUuc3R1Yi5jYWxsYmFjayxcblx0XHRcdFx0J+Wwj+S9nOWTgScsXG5cdFx0XHRcdCdmcmllbmRseS10YWcnLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+agh+iusOWwj+S9nOWTgScsICfmqJnoqJjlsI/kvZzlk4EnKVxuXHRcdFx0KTtcblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuc3R1Yi5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYzMCwgVHdpbmtsZS5zdHViLm1vZGUgPT09ICdhcnRpY2xlJyA/IDQ1MCA6IDQwMCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ+Wwj+S9nOWTgeiqquaYjicsICflsI/kvZzlk4Hor7TmmI4nKSwgJ1FXOuWwj+S9nOWTgScpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5bCP5L2c5ZOB6K6+572uJywgJ+Wwj+S9nOWTgeioreWumicpLCAnSDpUVy9QUkVGI3N0dWInKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0Mjc3R1YicpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUuc3R1Yi5jYWxsYmFjay5ldmFsdWF0ZSk7XG5cdFx0aWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wYXRyb2xsaW5rJykubGVuZ3RoKSB7XG5cdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDpobXpnaLkuLrlt7Llt6Hmn6UnLCAn5qiZ6KiY6aCB6Z2i54K65bey5beh5p+lJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ3BhdHJvbFBhZ2UnLFxuXHRcdFx0XHRcdFx0bmFtZTogJ3BhdHJvbFBhZ2UnLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogVHdpbmtsZS5nZXRQcmVmKCdtYXJrU3R1YmJlZFBhZ2VzQXNQYXRyb2xsZWQnKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHN3aXRjaCAoVHdpbmtsZS5zdHViLm1vZGUpIHtcblx0XHRcdGNhc2UgJ+aineebric6XG5cdFx0XHRjYXNlICfmnaHnm64nOlxuXHRcdFx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCfmnaHnm67lsI/kvZzlk4HmoIforrAnLCAn5qKd55uu5bCP5L2c5ZOB5qiZ6KiYJykpO1xuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0bmFtZTogJ3NvcnRvcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p+l55yL5YiX6KGo77yaJywgJ+aqouimluWIl+ihqO+8micpLFxuXHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XlnKhUd2lua2xl5Y+C5pWw6K6+572u77yISDpUVy9QUkVG77yJ5Lit5pu05pS55q2k6aG544CCJyxcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XlnKhUd2lua2xl5YGP5aW96Kit5a6a77yISDpUVy9QUkVG77yJ5Lit5pu05pS55q2k6aCF44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZXZlbnQ6IFR3aW5rbGUuc3R1Yi51cGRhdGVTb3J0T3JkZXIsXG5cdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6ICdjYXQnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmjInnsbvlnosnLCAn5oyJ6aGe5YilJyksXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiBUd2lua2xlLmdldFByZWYoJ3N0dWJBcnRpY2xlU29ydE9yZGVyJykgPT09ICdjYXQnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiAnYWxwaGEnLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogJ+aMieWtl+avjScsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiBUd2lua2xlLmdldFByZWYoJ3N0dWJBcnRpY2xlU29ydE9yZGVyJykgPT09ICdhbHBoYScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0aWQ6ICd0YWdXb3JrQXJlYScsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHZvaWQgbXcubm90aWZ5KGBUd2lua2xlLnN0dWLvvJrmnKrnn6XmqKHlvI8gJHtUd2lua2xlLnN0dWIubW9kZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVzdHViJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHR9KTtcblx0XHRjb25zdCByZXN1bHQgPSBmb3JtLnJlbmRlcigpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHRpZiAoWyfmnaHnm64nLCAn5qKd55uuJ10uaW5jbHVkZXMoVHdpbmtsZS5zdHViLm1vZGUpKSB7XG5cdFx0XHQvLyBmYWtlIGEgY2hhbmdlIGV2ZW50IG9uIHRoZSBzb3J0IGRyb3Bkb3duLCB0byBpbml0aWFsaXplIHRoZSB0YWcgbGlzdFxuXHRcdFx0Y29uc3QgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHRldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCB0cnVlLCB0cnVlKTtcblx0XHRcdHJlc3VsdC5zb3J0b3JkZXIuZGlzcGF0Y2hFdmVudChldnQpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5zdHViLmNoZWNrZWRUYWdzID0gW107XG5cdFR3aW5rbGUuc3R1Yi51cGRhdGVTb3J0T3JkZXIgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHNvcnRvcmRlciA9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdFR3aW5rbGUuc3R1Yi5jaGVja2VkVGFncyA9IGUudGFyZ2V0LmZvcm0uZ2V0Q2hlY2tlZCgnYXJ0aWNsZVRhZ3MnKTtcblx0XHRUd2lua2xlLnN0dWIuY2hlY2tlZFRhZ3MgPz89IFtdO1xuXHRcdGNvbnN0IGNvbnRhaW5lciA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCh7XG5cdFx0XHR0eXBlOiAnZnJhZ21lbnQnLFxuXHRcdH0pO1xuXHRcdC8vIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgY2hlY2tib3gsIHdpdGggYXBwcm9wcmlhdGUgc3ViZ3JvdXAgaWYgbmVlZGVkXG5cdFx0Y29uc3QgbWFrZUNoZWNrYm94ID0gKHRhZywgZGVzY3JpcHRpb24pID0+IHtcblx0XHRcdGNvbnN0IGNoZWNrYm94ID0ge1xuXHRcdFx0XHR2YWx1ZTogdGFnLFxuXHRcdFx0XHRsYWJlbDogYHt7JHt0YWd9fX06ICR7ZGVzY3JpcHRpb259YCxcblx0XHRcdH07XG5cdFx0XHRpZiAoVHdpbmtsZS5zdHViLmNoZWNrZWRUYWdzLmluY2x1ZGVzKHRhZykpIHtcblx0XHRcdFx0Y2hlY2tib3guY2hlY2tlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2hlY2tib3g7XG5cdFx0fTtcblx0XHQvLyBhcHBlbmQgYW55IGN1c3RvbSB0YWdzXG5cdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tU3R1Ykxpc3QnKS5sZW5ndGgpIHtcblx0XHRcdGNvbnRhaW5lci5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ5qih5p2/JywgJ+iHquioguaooeadvycpLFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBjdXN0b21jaGVja2JveGVzID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgVHdpbmtsZS5nZXRQcmVmKCdjdXN0b21TdHViTGlzdCcpKSB7XG5cdFx0XHRcdGN1c3RvbWNoZWNrYm94ZXNbY3VzdG9tY2hlY2tib3hlcy5sZW5ndGhdID0gbWFrZUNoZWNrYm94KGl0ZW0udmFsdWUsIGl0ZW0ubGFiZWwpO1xuXHRcdFx0fVxuXHRcdFx0Y29udGFpbmVyLmFwcGVuZCh7XG5cdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdG5hbWU6ICdhcnRpY2xlVGFncycsXG5cdFx0XHRcdGxpc3Q6IGN1c3RvbWNoZWNrYm94ZXMsXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gY2F0ZWdvcmljYWwgc29ydCBvcmRlclxuXHRcdGlmIChzb3J0b3JkZXIgPT09ICdjYXQnKSB7XG5cdFx0XHQvLyBmdW5jdGlvbiB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHRhZ3MgYW5kIGNyZWF0ZSBhIGNoZWNrYm94IGZvciBlYWNoIG9uZVxuXHRcdFx0Y29uc3QgZG9DYXRlZ29yeUNoZWNrYm94ZXMgPSAoc3ViZGl2LCBhcnJheSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjaGVja2JveGVzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgdGFnIG9mIGFycmF5KSB7XG5cdFx0XHRcdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBUd2lua2xlLnN0dWIuYXJ0aWNsZS50YWdzW3RhZ107XG5cdFx0XHRcdFx0Y2hlY2tib3hlc1tjaGVja2JveGVzLmxlbmd0aF0gPSBtYWtlQ2hlY2tib3godGFnLCBkZXNjcmlwdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3ViZGl2LmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRuYW1lOiAnYXJ0aWNsZVRhZ3MnLFxuXHRcdFx0XHRcdGxpc3Q6IGNoZWNrYm94ZXMsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHRcdGxldCBpID0gMDtcblx0XHRcdC8vIGdvIHRocm91Z2ggZWFjaCBjYXRlZ29yeSBhbmQgc3ViLWNhdGVnb3J5IGFuZCBhcHBlbmQgbGlzdHMgb2YgY2hlY2tib3hlc1xuXHRcdFx0Zm9yIChjb25zdCBbdGl0bGUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ0NhdGVnb3JpZXMpKSB7XG5cdFx0XHRcdGNvbnN0IHRpdGxlTmFtZSA9IFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ0NhdGVnb3JpZXNIZWFkZXJbdGl0bGVdO1xuXHRcdFx0XHRjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0XHRpZDogYHRhZ0hlYWRlciR7aX1gLFxuXHRcdFx0XHRcdGxhYmVsOiB0aXRsZU5hbWUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBzdWJkaXYgPSBjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRpZDogYHRhZ1N1YmRpdiR7aSsrfWAsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb250ZW50KSkge1xuXHRcdFx0XHRcdGRvQ2F0ZWdvcnlDaGVja2JveGVzKHN1YmRpdiwgY29udGVudCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbc3VidGl0bGUsIHN1YmNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbnRlbnQpKSB7XG5cdFx0XHRcdFx0XHRzdWJkaXYuYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBbTW9yZWJpdHMuaHRtbE5vZGUoJ2InLCBzdWJ0aXRsZSldLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRkb0NhdGVnb3J5Q2hlY2tib3hlcyhzdWJkaXYsIHN1YmNvbnRlbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gYWxwaGFiZXRpY2FsIHNvcnQgb3JkZXJcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY2hlY2tib3hlcyA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBbdGFnLCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoVHdpbmtsZS5zdHViLmFydGljbGUudGFncykpIHtcblx0XHRcdFx0Y2hlY2tib3hlc1tjaGVja2JveGVzLmxlbmd0aF0gPSBtYWtlQ2hlY2tib3godGFnLCBkZXNjcmlwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRjb250YWluZXIuYXBwZW5kKHtcblx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0bmFtZTogJ2FydGljbGVUYWdzJyxcblx0XHRcdFx0bGlzdDogY2hlY2tib3hlcyxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCAkd29ya2FyZWEgPSAkKGUudGFyZ2V0LmZvcm0pLmZpbmQoJ2RpdiN0YWdXb3JrQXJlYScpO1xuXHRcdGNvbnN0IHJlbmRlcmVkID0gY29udGFpbmVyLnJlbmRlcigpO1xuXHRcdCR3b3JrYXJlYS5lbXB0eSgpLmFwcGVuZChyZW5kZXJlZCk7XG5cdFx0Ly8gc3R5bGUgYWRqdXN0bWVudHNcblx0XHQkd29ya2FyZWEuZmluZCgnaDUnKS5jc3Moe1xuXHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMTAlJyxcblx0XHR9KTtcblx0XHQkd29ya2FyZWEuZmluZCgnaDU6bm90KDpmaXJzdC1jaGlsZCknKS5jc3Moe1xuXHRcdFx0J21hcmdpbi10b3AnOiAnMWVtJyxcblx0XHR9KTtcblx0XHQkd29ya2FyZWEuZmluZCgnZGl2JykuZmlsdGVyKCc6aGFzKHNwYW4ucXVpY2tmb3JtRGVzY3JpcHRpb24pJykuY3NzKHtcblx0XHRcdCdtYXJnaW4tdG9wJzogJzAuNGVtJyxcblx0XHR9KTtcblx0XHQvLyBhZGQgYSBsaW5rIHRvIGVhY2ggdGVtcGxhdGUncyBkZXNjcmlwdGlvbiBwYWdlXG5cdFx0Zm9yIChjb25zdCBjaGVja2JveCBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMoZS50YXJnZXQuZm9ybSwgJ2FydGljbGVUYWdzJykpIHtcblx0XHRcdGNvbnN0ICRjaGVja2JveCA9ICQoY2hlY2tib3gpO1xuXHRcdFx0Y29uc3QgbGluayA9IE1vcmViaXRzLmh0bWxOb2RlKCdhJywgJz4nKTtcblx0XHRcdGxpbmsuc2V0QXR0cmlidXRlKCdjbGFzcycsICd0YWctdGVtcGxhdGUtbGluaycpO1xuXHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdCdocmVmJyxcblx0XHRcdFx0bXcudXRpbC5nZXRVcmwoYFRlbXBsYXRlOiR7TW9yZWJpdHMuc3RyaW5nLnRvVXBwZXJDYXNlRmlyc3RDaGFyKGNoZWNrYm94LnZhbHVlcyl9YClcblx0XHRcdCk7XG5cdFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuXHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lciBub3JlZmVycmVyJyk7XG5cdFx0XHQkY2hlY2tib3gucGFyZW50KCkuYXBwZW5kKFsnXFx1MDBBMCcsIGxpbmtdKTtcblx0XHR9XG5cdH07XG5cdC8vIFRhZ3MgZm9yIEFSVElDTEVTIHN0YXJ0IGhlcmVcblx0VHdpbmtsZS5zdHViLmFydGljbGUgPSB7fTtcblx0Ly8gQSBsaXN0IG9mIGFsbCBhcnRpY2xlIHRhZ3MsIGluIGFscGhhYmV0aWNhbCBvcmRlclxuXHQvLyBUbyBlbnN1cmUgdGFncyBhcHBlYXIgaW4gdGhlIGRlZmF1bHQgXCJjYXRlZ29yaXplZFwiIHZpZXcsIGFkZCB0aGVtIHRvIHRoZSB0YWdDYXRlZ29yaWVzIGhhc2ggYmVsb3cuXG5cdFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ3MgPSB7XG5cdFx0J2FjdG9yLXN0dWInOiAn5ryU5ZGYJyxcblx0XHQnYXNpYS1zdHViJzogJ+S6mua0sicsXG5cdFx0J2Jpby1zdHViJzogJ+S6uueJqScsXG5cdFx0J2Jpb2xvZ3ktc3R1Yic6ICfnlJ/nianlraYnLFxuXHRcdCdjaGVtLXN0dWInOiAn5YyW5a2mJyxcblx0XHQnZXVyb3BlLXN0dWInOiAn5qyn5rSyJyxcblx0XHQnZXhwYW5kIGxpc3QnOiAn5pyq5a6M5oiQ5YiX6KGoJyxcblx0XHQnZm9vZC1zdHViJzogJ+mjn+eJqScsXG5cdFx0J2ZyYW5jZS1nZW8tc3R1Yic6ICfms5Xlm73lnLDnkIYnLFxuXHRcdCdnZW8tc3R1Yic6ICflnLDnkIbkvY3nva4nLFxuXHRcdCdoaXN0LXN0dWInOiAn5Y6G5Y+y5oiW5Y6G5Y+y5a2mJyxcblx0XHQnSlAtc3R1Yic6ICfml6XmnKwnLFxuXHRcdCdsaXQtc3R1Yic6ICfmloflraYnLFxuXHRcdCdtYXRoLXN0dWInOiAn5pWw5a2mJyxcblx0XHQnbWVkLXN0dWInOiAn5Yy75a2mJyxcblx0XHQnbWlsLXN0dWInOiAn5Yab5LqLJyxcblx0XHQnbW92aWUtc3R1Yic6ICfnlLXlvbEnLFxuXHRcdCdtdXNpYy1zdHViJzogJ+mfs+S5kCcsXG5cdFx0J3BoeXNpY3Mtc3R1Yic6ICfniannkIblraYnLFxuXHRcdCdwb2xpdGljLXN0dWInOiAn5pS/5rK7Jyxcblx0XHQncmVsaWdpb24tc3R1Yic6ICflrpfmlZknLFxuXHRcdCdzY2llbmNlLXN0dWInOiAn56eR5a2mJyxcblx0XHQnc3BvcnQtc3R1Yic6ICfkvZPogrInLFxuXHRcdHN0dWI6ICfpgJrnlKjlsI/kvZzlk4EnLFxuXHRcdCdzd2l0emVybGFuZC1zdHViJzogJ+eRnuWjqycsXG5cdFx0J3RlY2gtc3R1Yic6ICfnp5HmioAnLFxuXHRcdCd0cmFuc3Atc3R1Yic6ICfkuqTpgJonLFxuXHRcdCdUVi1zdHViJzogJ+eUteinhicsXG5cdFx0J1VLLXN0dWInOiAn6Iux5Zu9Jyxcblx0XHQnVVMtYmlvLXN0dWInOiAn576O5Zu95Lq654mpJyxcblx0XHQnVVMtZ2VvLXN0dWInOiAn576O5Zu95Zyw55CGJyxcblx0XHQnVVMtc3R1Yic6ICfnvo7lm70nLFxuXHRcdCd3ZWF0aGVyLXN0dWInOiAn5aSp5rCU5ZKM54m55Yir55qE5aSp5rCU5LqL5Lu2Jyxcblx0fTtcblx0Ly8gQSBsaXN0IG9mIHRhZ3MgaW4gb3JkZXIgb2YgY2F0ZWdvcnlcblx0Ly8gVGFncyBzaG91bGQgYmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHdpdGhpbiB0aGUgY2F0ZWdvcmllc1xuXHQvLyBBZGQgbmV3IGNhdGVnb3JpZXMgd2l0aCBkaXNjcmV0aW9uIC0gdGhlIGxpc3QgaXMgbG9uZyBlbm91Z2ggYXMgaXMhXG5cdFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ0NhdGVnb3JpZXNIZWFkZXIgPSB7XG5cdFx0Z2VuZXJhbDogJ+mAmueUqOaooeadvycsXG5cdFx0Z2VvOiAn5Zu95a625ZKM5Zyw55CGJyxcblx0XHRvdGhlcnM6ICfmnYLpobknLFxuXHRcdGJpbzogJ+S6uueJqScsXG5cdFx0c2NpZW5jZTogJ+enkeWtpicsXG5cdFx0c3BvcnQ6ICfkvZPogrInLFxuXHRcdHRlY2g6ICfmioDmnK8nLFxuXHRcdGFydDogJ+iJuuacrycsXG5cdH07XG5cdFR3aW5rbGUuc3R1Yi5hcnRpY2xlLnRhZ0NhdGVnb3JpZXMgPSB7XG5cdFx0Z2VuZXJhbDogWydzdHViJywgJ2V4cGFuZCBsaXN0J10sXG5cdFx0Z2VvOiBbXG5cdFx0XHQnYXNpYS1zdHViJyxcblx0XHRcdCdldXJvcGUtc3R1YicsXG5cdFx0XHQnZnJhbmNlLWdlby1zdHViJyxcblx0XHRcdCdnZW8tc3R1YicsXG5cdFx0XHQnSlAtc3R1YicsXG5cdFx0XHQnc3dpdHplcmxhbmQtc3R1YicsXG5cdFx0XHQnVUstc3R1YicsXG5cdFx0XHQnVVMtYmlvLXN0dWInLFxuXHRcdFx0J1VTLWdlby1zdHViJyxcblx0XHRcdCdVUy1zdHViJyxcblx0XHRdLFxuXHRcdG90aGVyczogWydmb29kLXN0dWInLCAnaGlzdC1zdHViJywgJ21pbC1zdHViJywgJ3BvbGl0aWMtc3R1YicsICdyZWxpZ2lvbi1zdHViJywgJ3RyYW5zcC1zdHViJ10sXG5cdFx0YmlvOiBbJ2FjdG9yLXN0dWInLCAnYmlvLXN0dWInLCAnVVMtYmlvLXN0dWInXSxcblx0XHRzY2llbmNlOiBbJ2Jpb2xvZ3ktc3R1YicsICdjaGVtLXN0dWInLCAnbWF0aC1zdHViJywgJ21lZC1zdHViJywgJ3BoeXNpY3Mtc3R1YicsICdzY2llbmNlLXN0dWInLCAnd2VhdGhlci1zdHViJ10sXG5cdFx0c3BvcnQ6IFsnc3BvcnQtc3R1YiddLFxuXHRcdHRlY2g6IFsndGVjaC1zdHViJ10sXG5cdFx0YXJ0OiBbJ2FjdG9yLXN0dWInLCAnbGl0LXN0dWInLCAnbW92aWUtc3R1YicsICdtdXNpYy1zdHViJywgJ1RWLXN0dWInXSxcblx0fTtcblx0Ly8gVGFncyBmb3IgUkVESVJFQ1RTIHN0YXJ0IGhlcmVcblx0VHdpbmtsZS5zdHViLmNhbGxiYWNrcyA9IHtcblx0XHRtYWluOiAocGFnZW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGxldCB0YWdSZTtcblx0XHRcdGxldCBzdW1tYXJ5VGV4dCA9ICfliqDlhaUnO1xuXHRcdFx0bGV0IHRhZ3MgPSBbXTtcblx0XHRcdGNvbnN0IGdyb3VwYWJsZVRhZ3MgPSBbXTtcblx0XHRcdGxldCBpO1xuXHRcdFx0Ly8gUmVtb3ZlIHRhZ3MgdGhhdCBiZWNvbWUgc3VwZXJmbHVvdXMgd2l0aCB0aGlzIGFjdGlvblxuXHRcdFx0bGV0IHBhZ2VUZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Ly8gQ2hlY2sgZm9yIHByZWV4aXN0aW5nIHRhZ3MgYW5kIHNlcGFyYXRlIHRhZ3MgaW50byBncm91cGFibGUgYW5kIG5vbi1ncm91cGFibGUgYXJyYXlzXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLnRhZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dGFnUmUgPSBuZXcgUmVnRXhwKGAoXFxcXHtcXFxceyR7cGFyYW1zLnRhZ3NbaV19KFxcXFx8fFxcXFx9XFxcXH0pKWAsICdpbScpO1xuXHRcdFx0XHRpZiAodGFnUmUuZXhlYyhwYWdlVGV4dCkpIHtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyhcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRg5Zyo6aG16Z2i5LiK5om+5Yiwe3ske3BhcmFtcy50YWdzW2ldfX194oCm4oCm6Lez6L+HYCxcblx0XHRcdFx0XHRcdFx0YOWcqOmggemdouS4iuaJvuWIsHt7JHtwYXJhbXMudGFnc1tpXX19feKApuKApui3s+mBjmBcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRhZ3MgPSBbLi4udGFncywgLi4uZ2VuZXJhdGVBcnJheShwYXJhbXMudGFnc1tpXSldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0YWdzID0gWy4uLnRhZ3MsIC4uLmdyb3VwYWJsZVRhZ3NdO1xuXHRcdFx0dGFncy5zb3J0KCk7XG5cdFx0XHRjb25zdCB0b3RhbFRhZ3MgPSB0YWdzLmxlbmd0aDtcblx0XHRcdGNvbnN0IGFkZFRhZyA9ICh0YWdOYW1lLCB0YWdJbmRleCkgPT4ge1xuXHRcdFx0XHRwYWdlVGV4dCArPSBgXFxue3ske3RhZ05hbWV9fX1gO1xuXHRcdFx0XHRpZiAodGFnSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0aWYgKHRhZ0luZGV4ID09PSB0b3RhbFRhZ3MgLSAxKSB7XG5cdFx0XHRcdFx0XHRzdW1tYXJ5VGV4dCArPSAn5ZKMJztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHRhZ0luZGV4IDwgdG90YWxUYWdzIC0gMSkge1xuXHRcdFx0XHRcdFx0c3VtbWFyeVRleHQgKz0gJ+OAgSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN1bW1hcnlUZXh0ICs9ICd7e1tbJztcblx0XHRcdFx0c3VtbWFyeVRleHQgKz0gdGFnTmFtZS5pbmNsdWRlcygnOicpID8gdGFnTmFtZSA6IGBUZW1wbGF0ZToke3RhZ05hbWV9fCR7dGFnTmFtZX1gO1xuXHRcdFx0XHRzdW1tYXJ5VGV4dCArPSAnXV19fSc7XG5cdFx0XHR9O1xuXHRcdFx0Zm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuXHRcdFx0XHRhZGRUYWcodGFnKTtcblx0XHRcdH1cblx0XHRcdHN1bW1hcnlUZXh0ICs9IHdpbmRvdy53Z1VMUygn5qCH6K6w5YiwJywgJ+aomeiomOWIsCcpICsgVHdpbmtsZS5zdHViLm1vZGU7XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHBhZ2VUZXh0KTtcblx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoc3VtbWFyeVRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFdhdGNobGlzdChUd2lua2xlLmdldFByZWYoJ3dhdGNoU3R1YmJlZFBhZ2VzJykpO1xuXHRcdFx0cGFnZW9iai5zZXRNaW5vckVkaXQoVHdpbmtsZS5nZXRQcmVmKCdtYXJrU3R1YmJlZFBhZ2VzQXNNaW5vcicpKTtcblx0XHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdub2NyZWF0ZScpO1xuXHRcdFx0cGFnZW9iai5zYXZlKCk7XG5cdFx0XHRpZiAocGFyYW1zLnBhdHJvbCkge1xuXHRcdFx0XHRwYWdlb2JqLnBhdHJvbCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuc3R1Yi5jYWxsYmFjay5ldmFsdWF0ZSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGUudGFyZ2V0O1xuXHRcdGNvbnN0IHBhcmFtcyA9IHt9O1xuXHRcdGlmIChmb3JtLnBhdHJvbFBhZ2UpIHtcblx0XHRcdHBhcmFtcy5wYXRyb2wgPSBmb3JtLnBhdHJvbFBhZ2UuY2hlY2tlZDtcblx0XHR9XG5cdFx0c3dpdGNoIChUd2lua2xlLnN0dWIubW9kZSkge1xuXHRcdFx0Y2FzZSAn5qKd55uuJzpcblx0XHRcdGNhc2UgJ+adoeebric6XG5cdFx0XHRcdHBhcmFtcy50YWdzID0gZm9ybS5nZXRDaGVja2VkKCdhcnRpY2xlVGFncycpO1xuXHRcdFx0XHRwYXJhbXMuZ3JvdXAgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR2b2lkIG13Lm5vdGlmeShgVHdpbmtsZS5zdHVi77ya5pyq55+l5qih5byPICR7VHdpbmtsZS5zdHViLm1vZGV9YCwge1xuXHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHR0YWc6ICd0d2lua2xlc3R1YicsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0aWYgKCFwYXJhbXMudGFncy5sZW5ndGgpIHtcblx0XHRcdHZvaWQgbXcubm90aWZ5KCflv4XpobvpgInmi6noh7PlsJHkuIDkuKrmoIforrDvvIEnLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZXN0dWInLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE1vcmViaXRzLnNpbXBsZVdpbmRvdy5zZXRCdXR0b25zRW5hYmxlZChmYWxzZSk7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZm9ybSk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5cdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gd2luZG93LndnVUxTKFxuXHRcdFx0J+agh+iusOWujOaIkO+8jOWwhuWcqOWHoOenkuWGheWIt+aWsOmhtemdoicsXG5cdFx0XHQn5qiZ6KiY5a6M5oiQ77yM5bCH5Zyo5bm+56eS5YWn6YeN5paw5pW055CG6aCB6Z2iJ1xuXHRcdCk7XG5cdFx0aWYgKFR3aW5rbGUuc3R1Yi5tb2RlID09PSAn6YeN5a6a5ZCRJykge1xuXHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZm9sbG93UmVkaXJlY3QgPSBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcblx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5qCH6K6wJywgJ+ato+WcqOaomeiomCcpICsgVHdpbmtsZS5zdHViLm1vZGVcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRzd2l0Y2ggKFR3aW5rbGUuc3R1Yi5tb2RlKSB7XG5cdFx0XHRjYXNlICfmop3nm64nOlxuXHRcdFx0Y2FzZSAn5p2h55uuJzpcblx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdGNhc2UgJ+mHjeWumuWQkSc6XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuc3R1Yi5jYWxsYmFja3MubWFpbik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdGNhc2UgJ+aWh+S7tic6XG5cdFx0XHRjYXNlICfmqpTmoYgnOlxuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLnN0dWIuY2FsbGJhY2tzLmZpbGUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHZvaWQgbXcubm90aWZ5KGBUd2lua2xlLnN0dWLvvJrmnKrnn6XmqKHlvI8gJHtUd2lua2xlLnN0dWIubW9kZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVzdHViJyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS5zdHViLCAnc3R1YicpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG4vKiEgVHdpbmtsZS5qcyAtIHR3aW5rbGVkaWZmLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZWRpZmYoJCkge1xuXHQvKipcblx0ICogdHdpbmtsZWRpZmYuanM6IERpZmYgbW9kdWxlXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIG9uIG5vbi1kaWZmIHBhZ2VzIChcIkxhc3RcIik7XG5cdCAqIHRhYnMgb24gZGlmZiBwYWdlcyAoXCJTaW5jZVwiLCBcIlNpbmNlIG1pbmVcIiwgXCJDdXJyZW50XCIpXG5cdCAqIEFjdGl2ZSBvbjogRXhpc3Rpbmcgbm9uLXNwZWNpYWwgcGFnZXNcblx0ICovXG5cdFR3aW5rbGUuZGlmZiA9ICgpID0+IHtcblx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA8IDAgfHwgIW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdG13LnV0aWwuZ2V0VXJsKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwge1xuXHRcdFx0XHRkaWZmOiAnY3VyJyxcblx0XHRcdFx0b2xkaWQ6ICdwcmV2Jyxcblx0XHRcdH0pLFxuXHRcdFx0d2luZG93LndnVUxTKCfmnIDlkI4nLCAn5pyA5b6MJyksXG5cdFx0XHQndHctbGFzdGRpZmYnLFxuXHRcdFx0d2luZG93LndnVUxTKCfmmL7npLrmnIDlkI7kv67mlLknLCAn6aGv56S65pyA5b6M5L+u5pS5Jylcblx0XHQpO1xuXHRcdC8vIFNob3cgYWRkaXRpb25hbCB0YWJzIG9ubHkgb24gZGlmZiBwYWdlc1xuXHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpKSB7XG5cdFx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0VHdpbmtsZS5kaWZmLmV2YWx1YXRlKGZhbHNlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0J+iHquS4iicsXG5cdFx0XHRcdCd0dy1zaW5jZScsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5pi+56S65LiO5LiK5LiA5L+u6K6i54mI5pys6Ze055qE5beu5byCJywgJ+mhr+ekuuiIh+S4iuS4gOS/ruiogueJiOacrOmWk+eahOW3rueVsCcpXG5cdFx0XHQpO1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFR3aW5rbGUuZGlmZi5ldmFsdWF0ZSh0cnVlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0J+iHquaIkScsXG5cdFx0XHRcdCd0dy1zaW5jZW1pbmUnLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aYvuekuuS4juaIkeWBmuWHuueahOS/ruiuoueJiOacrOeahOW3ruW8gicsICfpoa/npLroiIfmiJHlgZrlh7rnmoTkv67oqILniYjmnKznmoTlt67nlbAnKVxuXHRcdFx0KTtcblx0XHRcdFR3aW5rbGUuYWRkUG9ydGxldExpbmsoXG5cdFx0XHRcdG13LnV0aWwuZ2V0VXJsKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwge1xuXHRcdFx0XHRcdGRpZmY6ICdjdXInLFxuXHRcdFx0XHRcdG9sZGlkOiBtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpLFxuXHRcdFx0XHR9KSxcblx0XHRcdFx0d2luZG93LndnVUxTKCflvZPliY0nLCAn55uu5YmNJyksXG5cdFx0XHRcdCd0dy1jdXJkaWZmJyxcblx0XHRcdFx0d2luZG93LndnVUxTKCfmmL7npLrkuI7lvZPliY3niYjmnKzpl7TnmoTlt67lvIInLCAn6aGv56S66IiH55uu5YmN54mI5pys6ZaT55qE5beu55WwJylcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmRpZmYuZXZhbHVhdGUgPSAobWUpID0+IHtcblx0XHRsZXQgdXNlcjtcblx0XHRpZiAobWUpIHtcblx0XHRcdHVzZXIgPSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctZGlmZi1udGl0bGUyJyk7XG5cdFx0XHRpZiAoIW5vZGUpIHtcblx0XHRcdFx0Ly8gbm90aGluZyB0byBkbz9cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dXNlciA9ICQobm9kZSkuZmluZCgnYScpLmZpcnN0KCkudGV4dCgpO1xuXHRcdH1cblx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdHByb3A6ICdyZXZpc2lvbnMnLFxuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0dGl0bGVzOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRydmxpbWl0OiAxLFxuXHRcdFx0cnZwcm9wOiBbJ2lkcycsICd1c2VyJ10sXG5cdFx0XHRydnN0YXJ0aWQ6IG13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpIC0gMSxcblx0XHRcdHJ2dXNlcjogdXNlcixcblx0XHR9O1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1jb250ZW50LXRleHQnKSk7XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+aKk+WPluacgOWInei0oeeMruiAheS/oeaBrycsICfmipPlj5bmnIDliJ3osqLnjbvogIXos4foqIonKSxcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0VHdpbmtsZS5kaWZmLmNhbGxiYWNrcy5tYWluXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHR1c2VyLFxuXHRcdH07XG5cdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHR9O1xuXHRUd2lua2xlLmRpZmYuY2FsbGJhY2tzID0ge1xuXHRcdG1haW46IChzZWxmKSA9PiB7XG5cdFx0XHRjb25zdCB4bWxEb2MgPSBzZWxmLnJlc3BvbnNlWE1MO1xuXHRcdFx0Y29uc3QgcmV2aWQgPSAkKHhtbERvYykuZmluZCgncmV2JykuYXR0cigncmV2aWQnKTtcblx0XHRcdGlmICghcmV2aWQpIHtcblx0XHRcdFx0c2VsZi5zdGF0ZWxlbS5lcnJvcihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+acquaJvuWIsOWQiOmAgueahOaXqeacn+eJiOacrO+8jOaIliAnLCAn5pyq5om+5Yiw5ZCI6YGp55qE5pep5pyf54mI5pys77yM5oiWICcpICtcblx0XHRcdFx0XHRcdHNlbGYucGFyYW1zLnVzZXIgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCcg5piv5ZSv5LiA6LSh54yu6ICF44CC5Y+W5raI44CCJywgJyDmmK/llK/kuIDosqLnjbvogIXjgILlj5bmtojjgIInKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsb2NhdGlvbiA9IG13LnV0aWwuZ2V0VXJsKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwge1xuXHRcdFx0XHRkaWZmOiBtdy5jb25maWcuZ2V0KCd3Z0N1clJldmlzaW9uSWQnKSxcblx0XHRcdFx0b2xkaWQ6IHJldmlkLFxuXHRcdFx0fSk7XG5cdFx0fSxcblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS5kaWZmLCAnZGlmZicpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG4vKiEgVHdpbmtsZS5qcyAtIHR3aW5rbGV1bmxpbmsuanMgKi9cbihmdW5jdGlvbiB0d2lua2xldW5saW5rKCQpIHtcblx0LyoqXG5cdCAqIHR3aW5rbGV1bmxpbmsuanM6IFVubGluayBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiVW5saW5rXCIpXG5cdCAqIEFjdGl2ZSBvbjogTm9uLXNwZWNpYWwgcGFnZXMsIGV4Y2VwdCBMSUI65rKZ55uSXG5cdCAqL1xuXHRUd2lua2xlLnVubGluayA9ICgpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpIDwgMCB8fFxuXHRcdFx0bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpID09PSBUd2lua2xlLmdldFByZWYoJ3NhbmRib3hQYWdlJykgfHxcblx0XHRcdCFNb3JlYml0cy51c2VySXNTeXNvcFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0VHdpbmtsZS51bmxpbmsuY2FsbGJhY2ssXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+a2iOmTvicsICfmtojpgKMnKSxcblx0XHRcdCd0dy11bmxpbmsnLFxuXHRcdFx0d2luZG93LndnVUxTKCflj5bmtojliLDmnKzpobXnmoTpk77mjqUnLCAn5Y+W5raI5Yiw5pys6aCB55qE6YCj57WQJylcblx0XHQpO1xuXHR9O1xuXHQvLyB0aGUgcGFyYW1ldGVyIGlzIHVzZWQgd2hlbiBpbnZva2luZyB1bmxpbmsgZnJvbSBhZG1pbiBzcGVlZHlcblx0VHdpbmtsZS51bmxpbmsuY2FsbGJhY2sgPSAocHJlc2V0UmVhc29uKSA9PiB7XG5cdFx0Y29uc3QgZmlsZVNwYWNlID0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gNjtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgNDQwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUoXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+WPlua2iOmTvuWFpScsICflj5bmtojpgKPlhaUnKSArXG5cdFx0XHRcdChmaWxlU3BhY2UgPyB3aW5kb3cud2dVTFMoJ+WSjOaooeadv+OAgeaWh+S7tuS9v+eUqCcsICflkozmqKHmnb/jgIHmqpTmoYjkvb/nlKgnKSA6ICcnKVxuXHRcdCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ+mTvuWFpeiuvue9ricsICfpgKPlhaXoqK3lrponKSwgJ0g6VFcvUFJFRiN1bmxpbmsnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0MjdW5saW5rJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS51bmxpbmsuY2FsbGJhY2suZXZhbHVhdGUpO1xuXHRcdC8vIHByZXBlbmQgc29tZSBkb2N1bWVudGF0aW9uOiBmaWxlcyBhcmUgY29tbWVudGVkIG91dCwgd2hpbGUgYW55XG5cdFx0Ly8gZGlzcGxheSB0ZXh0IGlzIHByZXNlcnZlZCBmb3IgbGlua3MgKG90aGVyd2lzZSB0aGUgbGluayBpdHNlbGYgaXMgdXNlZClcblx0XHRjb25zdCBsaW5rVGV4dEJlZm9yZSA9IE1vcmViaXRzLmh0bWxOb2RlKFxuXHRcdFx0J2NvZGUnLFxuXHRcdFx0YFtbJHtmaWxlU3BhY2UgPyAnOicgOiAnJ30ke01vcmViaXRzLnBhZ2VOYW1lTm9ybX0ke3dpbmRvdy53Z1VMUygnfOmTvuaOpeaWh+Wtl11dJywgJ3zpgKPntZDmloflrZddXScpfWBcblx0XHQpO1xuXHRcdGNvbnN0IGxpbmtUZXh0QWZ0ZXIgPSBNb3JlYml0cy5odG1sTm9kZSgnY29kZScsIHdpbmRvdy53Z1VMUygn6ZO+5o6l5paH5a2XJywgJ+mAo+e1kOaWh+WtlycpKTtcblx0XHRjb25zdCBsaW5rUGxhaW5CZWZvcmUgPSBNb3JlYml0cy5odG1sTm9kZSgnY29kZScsIGBbWyR7TW9yZWJpdHMucGFnZU5hbWVOb3JtfV1dYCk7XG5cdFx0Y29uc3QgbGlua1RlbXBsYXRlQmVmb3JlID0gTW9yZWJpdHMuaHRtbE5vZGUoJ2NvZGUnLCBge3ske213LmNvbmZpZy5nZXQoJ3dnVGl0bGUnKX19fWApO1xuXHRcdGxldCBsaW5rUGxhaW5BZnRlcjtcblx0XHRpZiAoZmlsZVNwYWNlKSB7XG5cdFx0XHRsaW5rUGxhaW5BZnRlciA9IE1vcmViaXRzLmh0bWxOb2RlKCdjb2RlJywgYDwhLS0gW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXSAtLT5gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlua1BsYWluQWZ0ZXIgPSBNb3JlYml0cy5odG1sTm9kZSgnY29kZScsIE1vcmViaXRzLnBhZ2VOYW1lTm9ybSk7XG5cdFx0fVxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBbbGlua1RleHRCZWZvcmUsIGxpbmtUZXh0QWZ0ZXIsIGxpbmtQbGFpbkJlZm9yZSwgbGlua1BsYWluQWZ0ZXIsIGxpbmtUZW1wbGF0ZUJlZm9yZV0pIHtcblx0XHRcdG5vZGUuc3R5bGUuZm9udEZhbWlseSA9ICdtb25vc3BhY2UnO1xuXHRcdFx0bm9kZS5zdHlsZS5mb250U3R5bGUgPSAnbm9ybWFsJztcblx0XHR9XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRzdHlsZTogJ21hcmdpbi1ib3R0b206IDAuNWVtOyBmb250LXN0eWxlOiBub3JtYWwnLFxuXHRcdFx0bGFiZWw6IFtcblx0XHRcdFx0YCR7XG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+i/meS4quW3peWFt+WPr+S7peWPlua2iOaJgOacieaMh+WQkeivpemhteeahOmTvuaOpe+8iOKAnOmTvuWFpeKAne+8iScsXG5cdFx0XHRcdFx0XHQn6YCZ5YCL5bel5YW35Y+v5Lul5Y+W5raI5omA5pyJ5oyH5ZCR6Kmy6aCB55qE6YCj57WQ77yI44CM6YCj5YWl44CN77yJJ1xuXHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdChmaWxlU3BhY2Vcblx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfvvIzmiJbpgJrov4fliqDlhaU8IS0tIC0tPuazqOmHiuagh+iusOmakOiXj+aJgOacieWvueatpOaWh+S7tueahOS9v+eUqCcsXG5cdFx0XHRcdFx0XHRcdFx0J++8jOaIlumAj+mBjuWKoOWFpTwhLS0gLS0+5rOo6YeL5qiZ6KiY6Zqx6JeP5omA5pyJ5bCN5q2k5qqU5qGI55qE5L2/55SoJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQ6ICcnKVxuXHRcdFx0XHR944CC5L6L5aaC77yaYCxcblx0XHRcdFx0bGlua1RleHRCZWZvcmUsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG5Lya5Y+Y5oiQJywgJ+Wwh+acg+iuiuaIkCcpLFxuXHRcdFx0XHRsaW5rVGV4dEFmdGVyLFxuXHRcdFx0XHQn77yMJyxcblx0XHRcdFx0bGlua1BsYWluQmVmb3JlLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WwhuS8muWPmOaIkCcsICflsIfmnIPorormiJAnKSxcblx0XHRcdFx0bGlua1BsYWluQWZ0ZXIsXG5cdFx0XHRcdCfvvIwnLFxuXHRcdFx0XHRsaW5rVGVtcGxhdGVCZWZvcmUsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG5Lya6KKr56e76ZmkJywgJ+Wwh+acg+iiq+enu+mZpCcpLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+OAguivt+Wwj+W/g+S9v+eUqOOAgicsICfjgILoq4vlsI/lv4Pkvb/nlKjjgIInKSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0bGFiZWw6ICfnkIbnlLHvvJonLFxuXHRcdFx0dmFsdWU6IHByZXNldFJlYXNvbiB8fCAnJyxcblx0XHRcdHNpemU6IDYwLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0bGlzdDogJ2JhY2tsaW5rcycsXG5cdFx0XHRibHRpdGxlOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRibGxpbWl0OiAnbWF4Jyxcblx0XHRcdC8vIDUwMCBpcyBtYXggZm9yIG5vcm1hbCB1c2VycywgNTAwMCBmb3IgYm90cyBhbmQgc3lzb3BzXG5cdFx0XHRibG5hbWVzcGFjZTogVHdpbmtsZS5nZXRQcmVmKCd1bmxpbmtOYW1lc3BhY2VzJyksXG5cdFx0XHRyYXdjb250aW51ZTogdHJ1ZSxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdH07XG5cdFx0aWYgKGZpbGVTcGFjZSkge1xuXHRcdFx0cXVlcnkubGlzdCArPSAnfGltYWdldXNhZ2UnO1xuXHRcdFx0cXVlcnkuaXV0aXRsZSA9IHF1ZXJ5LmJsdGl0bGU7XG5cdFx0XHRxdWVyeS5pdWxpbWl0ID0gcXVlcnkuYmxsaW1pdDtcblx0XHRcdHF1ZXJ5Lml1bmFtZXNwYWNlID0gcXVlcnkuYmxuYW1lc3BhY2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHF1ZXJ5LmJsZmlsdGVycmVkaXIgPSAnbm9ucmVkaXJlY3RzJztcblx0XHR9XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHR3aW5kb3cud2dVTFMoJ+aKk+WPlumTvuWFpScsICfmipPlj5bpgKPlhaUnKSxcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0VHdpbmtsZS51bmxpbmsuY2FsbGJhY2tzLmRpc3BsYXkuYmFja2xpbmtzXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHRmb3JtLFxuXHRcdFx0V2luZG93LFxuXHRcdFx0aW1hZ2U6IGZpbGVTcGFjZSxcblx0XHR9O1xuXHRcdHlzYXJjaGl2ZXNfYXBpLnBvc3QoKTtcblx0XHRjb25zdCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0cm9vdC5zdHlsZS5wYWRkaW5nID0gJzE1cHgnOyAvLyBqdXN0IHNvIGl0IGRvZXNuJ3QgbG9vayBicm9rZW5cblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChyb290KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5zdGF0ZWxlbS5zdGF0dXMod2luZG93LndnVUxTKCfliqDovb3kuK3igKbigKYnLCAn6LyJ5YWl5Lit4oCm4oCmJykpO1xuXHRcdFdpbmRvdy5zZXRDb250ZW50KHJvb3QpO1xuXHRcdFdpbmRvdy5kaXNwbGF5KCk7XG5cdH07XG5cdFR3aW5rbGUudW5saW5rLmNhbGxiYWNrLmV2YWx1YXRlID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IGV2ZW50LnRhcmdldDtcblx0XHRjb25zdCBpbnB1dCA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRJbnB1dERhdGEoZm9ybSk7XG5cdFx0aWYgKCFpbnB1dC5yZWFzb24pIHtcblx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOW/hemhu+aMh+WumuWPlua2iOmTvuWFpeeahOeQhueUseOAgicsICfmgqjlv4XpoIjmjIflrprlj5bmtojpgKPlhaXnmoTnkIbnlLHjgIInKSwge1xuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdHRhZzogJ3R3aW5rbGV1bmxpbmsnLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlucHV0LmJhY2tsaW5rcyB8fD0gW107XG5cdFx0aW5wdXQuaW1hZ2V1c2FnZSB8fD0gW107XG5cdFx0Y29uc3QgcGFnZXMgPSBNb3JlYml0cy5hcnJheS51bmlxKFsuLi5pbnB1dC5iYWNrbGlua3MsIC4uLmlucHV0LmltYWdldXNhZ2VdKTtcblx0XHRpZiAoIXBhZ2VzLmxlbmd0aCkge1xuXHRcdFx0bXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5oKo5b+F6aG76Iez5bCR6YCJ5oup5LiA5Liq6KaB5Y+W5raI6ZO+5YWl55qE6aG16Z2i44CCJywgJ+aCqOW/hemgiOiHs+WwkemBuOaTh+S4gOWAi+imgeWPlua2iOmAo+WFpeeahOmggemdouOAgicpLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZXVubGluaycsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRjb25zdCB1bmxpbmtlciA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbihcblx0XHRcdGDlj5bmtogke1xuXHRcdFx0XHRpbnB1dC5iYWNrbGlua3MubGVuZ3RoXG5cdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+mTvuWFpScsICfpgKPlhaUnKSArXG5cdFx0XHRcdFx0XHQoaW5wdXQuaW1hZ2V1c2FnZS5sZW5ndGggPyB3aW5kb3cud2dVTFMoJ+S4juaWh+S7tuS9v+eUqCcsICfoiIfmqpTmoYjkvb/nlKgnKSA6ICcnKVxuXHRcdFx0XHRcdDogd2luZG93LndnVUxTKCfmlofku7bkvb/nlKgnLCAn5qqU5qGI5L2/55SoJylcblx0XHRcdH1gXG5cdFx0KTtcblx0XHR1bmxpbmtlci5zZXRPcHRpb24oJ3ByZXNlcnZlSW5kaXZpZHVhbFN0YXR1c0xpbmVzJywgdHJ1ZSk7XG5cdFx0dW5saW5rZXIuc2V0UGFnZUxpc3QocGFnZXMpO1xuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdHJlYXNvbjogaW5wdXQucmVhc29uLFxuXHRcdFx0dW5saW5rZXIsXG5cdFx0fTtcblx0XHR1bmxpbmtlci5ydW4oKHBhZ2VOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0d2luZG93LndnVUxTKCflnKjpobXpnaLigJwnLCAn5Zyo6aCB6Z2i44CMJykgKyBwYWdlTmFtZSArIHdpbmRvdy53Z1VMUygn4oCd5Lit5Y+W5raI6ZO+5YWlJywgJ+OAjeS4reWPlua2iOmAo+WFpScpXG5cdFx0XHQpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEJvdEVkaXQodHJ1ZSk7IC8vIHVubGluayBjb25zaWRlcmVkIGEgZmxvb2R5IG9wZXJhdGlvblxuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyh7XG5cdFx0XHRcdGRvQmFja2xpbmtzOiBpbnB1dC5iYWNrbGlua3MuaW5jbHVkZXMocGFnZU5hbWUpLFxuXHRcdFx0XHRkb0ltYWdldXNhZ2U6IGlucHV0LmltYWdldXNhZ2UuaW5jbHVkZXMocGFnZU5hbWUpLFxuXHRcdFx0XHQuLi5wYXJhbXMsXG5cdFx0XHR9KTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUudW5saW5rLmNhbGxiYWNrcy51bmxpbmtCYWNrbGlua3MpO1xuXHRcdH0pO1xuXHR9O1xuXHRUd2lua2xlLnVubGluay5jYWxsYmFja3MgPSB7XG5cdFx0ZGlzcGxheToge1xuXHRcdFx0YmFja2xpbmtzOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXBpb2JqLmdldFJlc3BvbnNlKCk7XG5cdFx0XHRcdGxldCBoYXZlY29udGVudCA9IGZhbHNlO1xuXHRcdFx0XHRsZXQgbGlzdDtcblx0XHRcdFx0bGV0IG5hbWVzcGFjZXM7XG5cdFx0XHRcdGxldCBpO1xuXHRcdFx0XHRpZiAoYXBpb2JqLnBhcmFtcy5pbWFnZSkge1xuXHRcdFx0XHRcdGNvbnN0IGltYWdldXNhZ2UgPSByZXNwb25zZS5xdWVyeS5pbWFnZXVzYWdlLnNvcnQoVHdpbmtsZS5zb3J0QnlOYW1lc3BhY2UpO1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgaW1hZ2V1c2FnZS5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Ly8gTGFiZWwgbWFkZSBieSBUd2lua2xlLmdlbmVyYXRlQmF0Y2hQYWdlTGlua3Ncblx0XHRcdFx0XHRcdGxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGxhYmVsOiAnJyxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGltYWdldXNhZ2VbaV0udGl0bGUsXG5cdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGxpc3QubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aWh+S7tuS9v+eUqCcsICfmqpTmoYjkvb/nlKgnKSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0bmFtZXNwYWNlcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIFR3aW5rbGUuZ2V0UHJlZigndW5saW5rTmFtZXNwYWNlcycpKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWVzcGFjZXMucHVzaChcblx0XHRcdFx0XHRcdFx0XHR2ID09PSAnMCdcblx0XHRcdFx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCfvvIjmnaHnm67vvIknLCAn77yI5qKd55uu77yJJylcblx0XHRcdFx0XHRcdFx0XHRcdDogbXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJylbdl1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bey6YCJ5oup55qE5ZG95ZCN56m66Ze077yaJywgJ+W3sumBuOaTh+eahOWRveWQjeepuumWk++8micpICsgbmFtZXNwYWNlcy5qb2luKCfjgIEnKSxcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfmgqjlj6/lnKhUd2lua2xl5Y+C5pWw6K6+572u5Lit5pu05pS555u45YWz6YCJ6aG577yM6K+35Y+C6KeBW1tIOlRXL1BSRUZdXScsXG5cdFx0XHRcdFx0XHRcdFx0J+aCqOWPr+WcqFR3aW5rbGXlgY/lpb3oqK3lrprkuK3mm7TmlLnnm7jpl5zpgbjpoIXvvIzoq4vlj4PopotbW0g6VFcvUFJFRl1dJ1xuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAocmVzcG9uc2VbJ3F1ZXJ5LWNvbnRpbnVlJ10gJiYgcmVzcG9uc2VbJ3F1ZXJ5LWNvbnRpbnVlJ10uaW1hZ2V1c2FnZSkge1xuXHRcdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnZGl2Jyxcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDpcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pi+56S65YmNJywgJ+mhr+ekuuWJjScpICtcblx0XHRcdFx0XHRcdFx0XHRcdG13Lmxhbmd1YWdlLmNvbnZlcnROdW1iZXIobGlzdC5sZW5ndGgpICtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Liq5paH5Lu25L2/55So44CCJywgJ+WAi+aqlOahiOS9v+eUqOOAgicpLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YWo6YCJJywgJ+WFqOmBuCcpLFxuXHRcdFx0XHRcdFx0XHRldmVudDogKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnaW1hZ2V1c2FnZScpKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YWo5LiN6YCJJywgJ+WFqOS4jemBuCcpLFxuXHRcdFx0XHRcdFx0XHRldmVudDogKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnaW1hZ2V1c2FnZScpKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJ2ltYWdldXNhZ2UnLFxuXHRcdFx0XHRcdFx0XHRzaGlmdENsaWNrU3VwcG9ydDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bGlzdCxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aGF2ZWNvbnRlbnQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+acquaJvuWIsOaWh+S7tuS9v+eUqOOAgicsICfmnKrmib7liLDmqpTmoYjkvb/nlKjjgIInKSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBiYWNrbGlua3MgPSByZXNwb25zZS5xdWVyeS5iYWNrbGlua3Muc29ydChUd2lua2xlLnNvcnRCeU5hbWVzcGFjZSk7XG5cdFx0XHRcdGlmIChiYWNrbGlua3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYmFja2xpbmtzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdFx0XHQvLyBMYWJlbCBtYWRlIGJ5IFR3aW5rbGUuZ2VuZXJhdGVCYXRjaFBhZ2VMaW5rc1xuXHRcdFx0XHRcdFx0bGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6ICcnLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogYmFja2xpbmtzW2ldLnRpdGxlLFxuXHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpk77lhaUnLCAn6YCj5YWlJyksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0bmFtZXNwYWNlcyA9IFtdO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdiBvZiBUd2lua2xlLmdldFByZWYoJ3VubGlua05hbWVzcGFjZXMnKSkge1xuXHRcdFx0XHRcdFx0bmFtZXNwYWNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHR2ID09PSAnMCcgPyB3aW5kb3cud2dVTFMoJ++8iOadoeebru+8iScsICfvvIjmop3nm67vvIknKSA6IG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpW3ZdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bey6YCJ5oup55qE5ZG95ZCN56m66Ze077yaJywgJ+W3sumBuOaTh+eahOWRveWQjeepuumWk++8micpICsgbmFtZXNwYWNlcy5qb2luKCfjgIEnKSxcblx0XHRcdFx0XHRcdHRvb2x0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0J+aCqOWPr+WcqFR3aW5rbGXlj4LmlbDorr7nva7kuK3mm7TmlLnnm7jlhbPpgInpobnvvIzor7flj4Lop4FbW0g6VFcvUFJFRl1dJyxcblx0XHRcdFx0XHRcdFx0J+aCqOWPr+WcqFR3aW5rbGXlgY/lpb3oqK3lrprkuK3mm7TmlLnnm7jpl5zpgbjpoIXvvIzoq4vlj4PopotbW0g6VFcvUFJFRl1dJ1xuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VbJ3F1ZXJ5LWNvbnRpbnVlJ10gJiYgcmVzcG9uc2VbJ3F1ZXJ5LWNvbnRpbnVlJ10uYmFja2xpbmtzKSB7XG5cdFx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2RpdicsXG5cdFx0XHRcdFx0XHRcdGxhYmVsOlxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pi+56S65YmNJywgJ+mhr+ekuuWJjScpICtcblx0XHRcdFx0XHRcdFx0XHRtdy5sYW5ndWFnZS5jb252ZXJ0TnVtYmVyKGxpc3QubGVuZ3RoKSArXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuKrpk77lhaXjgIInLCAn5YCL6YCj5YWl44CCJyksXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YXBpb2JqLnBhcmFtcy5mb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WFqOmAiScsICflhajpgbgnKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnYmFja2xpbmtzJykpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YXBpb2JqLnBhcmFtcy5mb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WFqOS4jemAiScsICflhajkuI3pgbgnKSxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAnYmFja2xpbmtzJykpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRcdG5hbWU6ICdiYWNrbGlua3MnLFxuXHRcdFx0XHRcdFx0c2hpZnRDbGlja1N1cHBvcnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRsaXN0LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGhhdmVjb250ZW50ID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5pyq5om+5Yiw6ZO+5YWl44CCJywgJ+acquaJvuWIsOmAo+WFpeOAgicpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChoYXZlY29udGVudCkge1xuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMuZm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXBpb2JqLnBhcmFtcy5mb3JtLnJlbmRlcigpO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLldpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbGluayBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMocmVzdWx0LCAnYmFja2xpbmtzJykpIHtcblx0XHRcdFx0XHRUd2lua2xlLmdlbmVyYXRlQmF0Y2hQYWdlTGlua3MobGluayk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBsaW5rIG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyZXN1bHQsICdpbWFnZXVzYWdlJykpIHtcblx0XHRcdFx0XHRUd2lua2xlLmdlbmVyYXRlQmF0Y2hQYWdlTGlua3MobGluayk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fSxcblx0XHR1bmxpbmtCYWNrbGlua3M6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRsZXQgb2xkdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraXRleHQucGFnZShvbGR0ZXh0KTtcblx0XHRcdGxldCBzdW1tYXJ5VGV4dCA9ICcnO1xuXHRcdFx0bGV0IHdhcm5pbmdTdHJpbmcgPSBmYWxzZTtcblx0XHRcdGxldCB0ZXh0O1xuXHRcdFx0Ly8gcmVtb3ZlIGltYWdlIHVzYWdlc1xuXHRcdFx0aWYgKHBhcmFtcy5kb0ltYWdldXNhZ2UpIHtcblx0XHRcdFx0dGV4dCA9IHlzYXJjaGl2ZXNfcGFnZVxuXHRcdFx0XHRcdC5jb21tZW50T3V0SW1hZ2UobXcuY29uZmlnLmdldCgnd2dUaXRsZScpLCB3aW5kb3cud2dVTFMoJ+azqOmHiicsICfms6jph4snKSlcblx0XHRcdFx0XHQuZ2V0VGV4dCgpO1xuXHRcdFx0XHQvLyBkaWQgd2UgYWN0dWFsbHkgbWFrZSBhbnkgY2hhbmdlcz9cblx0XHRcdFx0aWYgKHRleHQgPT09IG9sZHRleHQpIHtcblx0XHRcdFx0XHR3YXJuaW5nU3RyaW5nID0gd2luZG93LndnVUxTKCfmlofku7bkvb/nlKgnLCAn5qqU5qGI5L2/55SoJyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3VtbWFyeVRleHQgPSB3aW5kb3cud2dVTFMoJ+azqOmHiuaWh+S7tuS9v+eUqCcsICfms6jph4vmqpTmoYjkvb/nlKgnKTtcblx0XHRcdFx0XHRvbGR0ZXh0ID0gdGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gcmVtb3ZlIGJhY2tsaW5rc1xuXHRcdFx0aWYgKHBhcmFtcy5kb0JhY2tsaW5rcykge1xuXHRcdFx0XHR0ZXh0ID0geXNhcmNoaXZlc19wYWdlLnJlbW92ZUxpbmsoTW9yZWJpdHMucGFnZU5hbWVOb3JtKS5nZXRUZXh0KCk7XG5cdFx0XHRcdHRleHQgPSB5c2FyY2hpdmVzX3BhZ2UucmVtb3ZlVGVtcGxhdGUobXcuY29uZmlnLmdldCgnd2dUaXRsZScpKS5nZXRUZXh0KCk7XG5cdFx0XHRcdC8vIGRpZCB3ZSBhY3R1YWxseSBtYWtlIGFueSBjaGFuZ2VzP1xuXHRcdFx0XHRpZiAodGV4dCA9PT0gb2xkdGV4dCkge1xuXHRcdFx0XHRcdHdhcm5pbmdTdHJpbmcgPSB3YXJuaW5nU3RyaW5nXG5cdFx0XHRcdFx0XHQ/IHdpbmRvdy53Z1VMUygn5Y+W5raI6ZO+5YWl5oiW5paH5Lu25L2/55SoJywgJ+WPlua2iOmAo+WFpeaIluaqlOahiOS9v+eUqCcpXG5cdFx0XHRcdFx0XHQ6IHdpbmRvdy53Z1VMUygn5Y+W5raI6ZO+5YWlJywgJ+WPlua2iOmAo+WFpScpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN1bW1hcnlUZXh0ID0gKHN1bW1hcnlUZXh0ID8gYCR7c3VtbWFyeVRleHR9IC8gYCA6ICcnKSArIHdpbmRvdy53Z1VMUygn5Y+W5raI6ZO+57uT5YiwJywgJ+WPlua2iOmAo+e1kOWIsCcpO1xuXHRcdFx0XHRcdG9sZHRleHQgPSB0ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAod2FybmluZ1N0cmluZykge1xuXHRcdFx0XHQvLyBub3RoaW5nIHRvIGRvIVxuXHRcdFx0XHRwYWdlb2JqXG5cdFx0XHRcdFx0LmdldFN0YXR1c0VsZW1lbnQoKVxuXHRcdFx0XHRcdC5lcnJvcihgJHt3aW5kb3cud2dVTFMoJ+acquiDveWcqOmhtemdouS4iuaJvuWIsCcsICfmnKrog73lnKjpoIHpnaLkuIrmib7liLAnKSArIHdhcm5pbmdTdHJpbmd944CCYCk7XG5cdFx0XHRcdHBhcmFtcy51bmxpbmtlci53b3JrZXJGYWlsdXJlKHBhZ2VvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShcblx0XHRcdFx0c3VtbWFyeVRleHQgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCcJywgJ+OAjCcpICtcblx0XHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCd77yaJywgJ+OAje+8micpICtcblx0XHRcdFx0XHRwYXJhbXMucmVhc29uXG5cdFx0XHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZShwYXJhbXMudW5saW5rZXIud29ya2VyU3VjY2VzcywgcGFyYW1zLnVubGlua2VyLndvcmtlckZhaWx1cmUpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUudW5saW5rLCAndW5saW5rJyk7XG59KShqUXVlcnkpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcblxuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlZmx1ZmYuanMgKi9cbihmdW5jdGlvbiB0d2lua2xlZmx1ZmYoJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIHR3aW5rbGVmbHVmZi5qczogUmV2ZXJ0L3JvbGxiYWNrIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IExpbmtzIG9uIGNvbnRyaWJ1dGlvbnMsXG5cdCAqIHJlY2VudCBjaGFuZ2VzLCBoaXN0b3J5LCBhbmQgZGlmZiBwYWdlc1xuXHQgKiBBY3RpdmUgb246IERpZmYgcGFnZXMsIGhpc3RvcnkgcGFnZXMsXG5cdCAqIFNwZWNpYWw6UmVjZW50Q2hhbmdlcyhMaW5rZWQpLCBhbmQgU3BlY2lhbDpDb250cmlidXRpb25zXG5cdCAqL1xuXHQvKipcblx0ICogVHdpbmtsZWZsdWZmIHJldmVydCBhbmQgYW50aXZhbmRhbGlzbSB1dGlsaXR5XG5cdCAqL1xuXHRUd2lua2xlLmZsdWZmID0gKCkgPT4ge1xuXHRcdC8vIE9ubHkgcHJvY2VlZCBpZiB0aGUgdXNlciBjYW4gYWN0dWFsbHkgZWRpdCB0aGUgcGFnZSBpbiBxdWVzdGlvbi5cblx0XHQvLyB3Z0lzUHJvYmFibHlFZGl0YWJsZSBzaG91bGQgdGFrZVxuXHRcdC8vIGNhcmUgb2YgbmFtZXNwYWNlL2NvbnRlbnRNb2RlbCByZXN0cmljdGlvbnMgYXMgd2VsbCBhcyBleHBsaWNpdFxuXHRcdC8vIHByb3RlY3Rpb25zOyBpdCB3b24ndCB0YWtlIGNhcmUgb2YgY2FzY2FkaW5nIG9yIFRpdGxlQmxhY2tsaXN0LlxuXHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0lzUHJvYmFibHlFZGl0YWJsZScpKSB7XG5cdFx0XHQvLyB3Z0RpZmZPbGRJZCBpbmNsdWRlZCBmb3IgY2xhcml0eSBpbiBpZiBlbHNlIGxvb3Bcblx0XHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpIHx8IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk9sZElkJykpIHtcblx0XHRcdFx0Ly8gUmVsb2FkIGFsb25nc2lkZSB0aGUgcmV2aXNpb24gc2xpZGVyXG5cdFx0XHRcdG13Lmhvb2soJ3dpa2lwYWdlLmRpZmYnKS5hZGQoKCkgPT4ge1xuXHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYuYWRkTGlua3MuZGlmZigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgPT09ICd2aWV3JyAmJlxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1JldmlzaW9uSWQnKSAmJlxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0N1clJldmlzaW9uSWQnKSAhPT0gbXcuY29uZmlnLmdldCgnd2dSZXZpc2lvbklkJylcblx0XHRcdCkge1xuXHRcdFx0XHRUd2lua2xlLmZsdWZmLmFkZExpbmtzLm9sZGlkKCk7XG5cdFx0XHR9IGVsc2UgaWYgKG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgPT09ICdoaXN0b3J5Jykge1xuXHRcdFx0XHRUd2lua2xlLmZsdWZmLmFkZExpbmtzLmhpc3RvcnkoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IC0xKSB7XG5cdFx0XHRUd2lua2xlLmZsdWZmLnNraXBUYWxrID0gIVR3aW5rbGUuZ2V0UHJlZignb3BlblRhbGtQYWdlT25BdXRvUmV2ZXJ0Jyk7XG5cdFx0XHRUd2lua2xlLmZsdWZmLnJvbGxiYWNrSW5QbGFjZSA9IFR3aW5rbGUuZ2V0UHJlZigncm9sbGJhY2tJblBsYWNlJyk7XG5cdFx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dDYW5vbmljYWxTcGVjaWFsUGFnZU5hbWUnKSA9PT0gJ0NvbnRyaWJ1dGlvbnMnKSB7XG5cdFx0XHRcdFR3aW5rbGUuZmx1ZmYuYWRkTGlua3MuY29udHJpYnV0aW9ucygpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dDYW5vbmljYWxTcGVjaWFsUGFnZU5hbWUnKSA9PT0gJ1JlY2VudGNoYW5nZXMnIHx8XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQ2Fub25pY2FsU3BlY2lhbFBhZ2VOYW1lJykgPT09ICdSZWNlbnRjaGFuZ2VzbGlua2VkJ1xuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFJlbG9hZCB3aXRoIHJlY2VudCBjaGFuZ2VzIHVwZGF0ZXNcblx0XHRcdFx0Ly8gc3RydWN0dXJlZENoYW5nZUZpbHRlcnMudWkuaW5pdGlhbGl6ZWQgaXMganVzdCBvbiBsb2FkXG5cdFx0XHRcdG13Lmhvb2soJ3dpa2lwYWdlLmNvbnRlbnQnKS5hZGQoKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAoaXRlbS5pcygnZGl2JykpIHtcblx0XHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYuYWRkTGlua3MucmVjZW50Y2hhbmdlcygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHQvLyBBIGxpc3Qgb2YgdXNlcm5hbWVzLCB1c3VhbGx5IG9ubHkgYm90cywgdGhhdCB2YW5kYWxpc20gcmV2ZXJ0IGlzIGp1bXBlZFxuXHQvLyBvdmVyOyB0aGF0IGlzLCBpZiB2YW5kYWxpc20gcmV2ZXJ0IHdhcyBjaG9zZW4gb24gc3VjaCB1c2VybmFtZSwgdGhlbiBpdHNcblx0Ly8gdGFyZ2V0IGlzIG9uIHRoZSByZXZpc2lvbiBiZWZvcmUuICBUaGlzIGlzIGZvciBoYW5kbGluZyBxdWljayBib3RzIHRoYXRcblx0Ly8gbWFrZXMgZWRpdHMgc2Vjb25kcyBhZnRlciB0aGUgb3JpZ2luYWwgZWRpdCBpcyBtYWRlLiAgVGhpcyBvbmx5IGFmZmVjdHNcblx0Ly8gdmFuZGFsaXNtIHJvbGxiYWNrOyBmb3IgZ29vZCBmYWl0aCByb2xsYmFjaywgaXQgd2lsbCBzdG9wLCBpbmRpY2F0aW5nIGEgYm90XG5cdC8vIGhhcyBubyBmYWl0aCwgYW5kIGZvciBub3JtYWwgcm9sbGJhY2ssIGl0IHdpbGwgcm9sbGJhY2sgdGhhdCBlZGl0LlxuXHRUd2lua2xlLmZsdWZmLnRydXN0ZWRCb3RzID0gW107XG5cdFR3aW5rbGUuZmx1ZmYuc2tpcFRhbGsgPSBudWxsO1xuXHRUd2lua2xlLmZsdWZmLnJvbGxiYWNrSW5QbGFjZSA9IG51bGw7XG5cdC8vIFN0cmluZyB0byBpbnNlcnQgd2hlbiBhIHVzZXJuYW1lIGlzIGhpZGRlblxuXHRUd2lua2xlLmZsdWZmLmhpZGRlbk5hbWUgPSB3aW5kb3cud2dVTFMoJ+W3sumakOiXj+eahOeUqOaItycsICflt7LpmrHol4/nmoTkvb/nlKjogIUnKTtcblx0Ly8gQ29uc29saWRhdGVkIGNvbnN0cnVjdGlvbiBvZiBmbHVmZiBsaW5rc1xuXHRUd2lua2xlLmZsdWZmLmxpbmtCdWlsZGVyID0ge1xuXHRcdHNwYW5UYWc6IChjb2xvciwgY29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdHNwYW4uc3R5bGUuY29sb3IgPSBjb2xvcjtcblx0XHRcdHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpO1xuXHRcdFx0cmV0dXJuIHNwYW47XG5cdFx0fSxcblx0XHRidWlsZExpbms6IChjb2xvciwgdGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdGxpbmsuYXBwZW5kQ2hpbGQoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5zcGFuVGFnKCdCbGFjaycsICdbJykpO1xuXHRcdFx0bGluay5hcHBlbmRDaGlsZChUd2lua2xlLmZsdWZmLmxpbmtCdWlsZGVyLnNwYW5UYWcoY29sb3IsIHRleHQpKTtcblx0XHRcdGxpbmsuYXBwZW5kQ2hpbGQoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5zcGFuVGFnKCdCbGFjaycsICddJykpO1xuXHRcdFx0bGluay5ocmVmID0gJyMnO1xuXHRcdFx0cmV0dXJuIGxpbms7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbmRhbD1udWxsXSAtIFVzZXJuYW1lIG9mIHRoZSBlZGl0b3IgYmVpbmcgcmV2ZXJ0ZWRcblx0XHQgKiBQcm92aWRlIGEgZmFsc2V5IHZhbHVlIGlmIHRoZSB1c2VybmFtZSBpcyBoaWRkZW4sIGRlZmF1bHRzIHRvIG51bGxcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlubGluZSAtIFRydWUgdG8gY3JlYXRlIHR3byBsaW5rcyBpbiBhIHNwYW4sIGZhbHNlXG5cdFx0ICogdG8gY3JlYXRlIHRocmVlIGxpbmtzIGluIGEgZGl2IChvcHRpb25hbClcblx0XHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtyZXY9d2dDdXJSZXZpc2lvbklkXSAtIFJldmlzaW9uIElEIGJlaW5nIHJldmVydGVkIChvcHRpb25hbClcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW3BhZ2U9d2dQYWdlTmFtZV0gLSBQYWdlIGJlaW5nIHJldmVydGVkIChvcHRpb25hbClcblx0XHQgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gcmV2Tm9kZVxuXHRcdCAqL1xuXHRcdHJvbGxiYWNrTGlua3M6ICh2YW5kYWwsIGlubGluZSwgcmV2LCBwYWdlKSA9PiB7XG5cdFx0XHR2YW5kYWwgfHw9IG51bGw7XG5cdFx0XHRjb25zdCBlbGVtID0gaW5saW5lID8gJ3NwYW4nIDogJ2Rpdic7XG5cdFx0XHRjb25zdCByZXZOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtKTtcblx0XHRcdHJldiA9IE51bWJlci5wYXJzZUludChyZXYsIDEwKTtcblx0XHRcdGlmIChyZXYpIHtcblx0XHRcdFx0cmV2Tm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJywgYHR3LXJldmVydCR7cmV2fWApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV2Tm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3R3LXJldmVydCcpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgbm9ybU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHJvbmcnKTtcblx0XHRcdGNvbnN0IHZhbmROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Ryb25nJyk7XG5cdFx0XHRjb25zdCBub3JtTGluayA9IFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIuYnVpbGRMaW5rKCdTdGVlbEJsdWUnLCAn5Zue6YCAJyk7XG5cdFx0XHRjb25zdCB2YW5kTGluayA9IFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIuYnVpbGRMaW5rKCdSZWQnLCB3aW5kb3cud2dVTFMoJ+egtOWdjycsICfnoLTlo54nKSk7XG5cdFx0XHQkKG5vcm1MaW5rKS5vbignY2xpY2snLCAoZSkgPT4ge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFR3aW5rbGUuZmx1ZmYucmV2ZXJ0KCdub3JtJywgdmFuZGFsLCByZXYsIHBhZ2UpO1xuXHRcdFx0XHRUd2lua2xlLmZsdWZmLmRpc2FibGVMaW5rcyhyZXZOb2RlKTtcblx0XHRcdH0pO1xuXHRcdFx0JCh2YW5kTGluaykub24oJ2NsaWNrJywgKGUpID0+IHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRUd2lua2xlLmZsdWZmLnJldmVydCgndmFuZCcsIHZhbmRhbCwgcmV2LCBwYWdlKTtcblx0XHRcdFx0VHdpbmtsZS5mbHVmZi5kaXNhYmxlTGlua3MocmV2Tm9kZSk7XG5cdFx0XHR9KTtcblx0XHRcdHZhbmROb2RlLmFwcGVuZENoaWxkKHZhbmRMaW5rKTtcblx0XHRcdG5vcm1Ob2RlLmFwcGVuZENoaWxkKG5vcm1MaW5rKTtcblx0XHRcdGNvbnN0IHNlcGFyYXRvciA9IGlubGluZSA/ICcgJyA6ICcgfHwgJztcblx0XHRcdHJldk5vZGUuYXBwZW5kQ2hpbGQobm9ybU5vZGUpO1xuXHRcdFx0cmV2Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzZXBhcmF0b3IpKTtcblx0XHRcdHJldk5vZGUuYXBwZW5kQ2hpbGQodmFuZE5vZGUpO1xuXHRcdFx0cmV0dXJuIHJldk5vZGU7XG5cdFx0fSxcblx0XHQvLyBCdWlsZCBbcmVzdG9yZSB0aGlzIHJldmlzaW9uXSBsaW5rc1xuXHRcdHJlc3RvcmVUaGlzUmV2aXNpb25MaW5rOiAocmV2aXNpb25SZWYsIGlubGluZSkgPT4ge1xuXHRcdFx0Ly8gSWYgbm90IGEgc3BlY2lmaWMgcmV2aXNpb24gbnVtYmVyLCBzaG91bGQgYmUgd2dEaWZmTmV3SWQvd2dEaWZmT2xkSWQvd2dSZXZpc2lvbklkXG5cdFx0XHRyZXZpc2lvblJlZiA9IHR5cGVvZiByZXZpc2lvblJlZiA9PT0gJ251bWJlcicgPyByZXZpc2lvblJlZiA6IG13LmNvbmZpZy5nZXQocmV2aXNpb25SZWYpO1xuXHRcdFx0Y29uc3QgZWxlbSA9IGlubGluZSA/ICdzcGFuJyA6ICdkaXYnO1xuXHRcdFx0Y29uc3QgcmV2ZXJ0VG9SZXZpc2lvbk5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW0pO1xuXHRcdFx0cmV2ZXJ0VG9SZXZpc2lvbk5vZGUuc2V0QXR0cmlidXRlKCdpZCcsIGB0dy1yZXZlcnQtdG8tJHtyZXZpc2lvblJlZn1gKTtcblx0XHRcdHJldmVydFRvUmV2aXNpb25Ob2RlLnN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7XG5cdFx0XHRjb25zdCByZXZlcnRUb1JldmlzaW9uTGluayA9IFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIuYnVpbGRMaW5rKFxuXHRcdFx0XHQnU2FkZGxlQnJvd24nLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aBouWkjeatpOeJiOacrCcsICfmgaLlvqnmraTniYjmnKwnKVxuXHRcdFx0KTtcblx0XHRcdCQocmV2ZXJ0VG9SZXZpc2lvbkxpbmspLm9uKCdjbGljaycsIChlKSA9PiB7XG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0VHdpbmtsZS5mbHVmZi5yZXZlcnRUb1JldmlzaW9uKHJldmlzaW9uUmVmKTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGlubGluZSkge1xuXHRcdFx0XHRyZXZlcnRUb1JldmlzaW9uTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTtcblx0XHRcdH1cblx0XHRcdHJldmVydFRvUmV2aXNpb25Ob2RlLmFwcGVuZENoaWxkKHJldmVydFRvUmV2aXNpb25MaW5rKTtcblx0XHRcdHJldHVybiByZXZlcnRUb1JldmlzaW9uTm9kZTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLmZsdWZmLmFkZExpbmtzID0ge1xuXHRcdGNvbnRyaWJ1dGlvbnM6ICgpID0+IHtcblx0XHRcdC8vICQoJ3NwLWNvbnRyaWJ1dGlvbnMtZm9vdGVyLWFub24tcmFuZ2UnKSByZWxpZXMgb24gdGhlIGZtYm94XG5cdFx0XHQvLyBpZCBpbiBbW01lZGlhV2lraTpTcC1jb250cmlidXRpb25zLWZvb3Rlci1hbm9uLXJhbmdlXV0gYW5kXG5cdFx0XHQvLyBpcyB1c2VkIHRvIHNob3cgcm9sbGJhY2svdmFuZGFsaXNtIGxpbmtzIGZvciBJUCByYW5nZXNcblx0XHRcdGNvbnN0IGlzUmFuZ2UgPSAhISRib2R5LmZpbmQoJyNzcC1jb250cmlidXRpb25zLWZvb3Rlci1hbm9uLXJhbmdlJylbMF07XG5cdFx0XHRpZiAobXcuY29uZmlnLmV4aXN0cygnd2dSZWxldmFudFVzZXJOYW1lJykgfHwgaXNSYW5nZSkge1xuXHRcdFx0XHQvLyBHZXQgdGhlIHVzZXJuYW1lIHRoZXNlIGNvbnRyaWJ1dGlvbnMgYXJlIGZvclxuXHRcdFx0XHRsZXQgdXNlcm5hbWUgPSBtdy5jb25maWcuZ2V0KCd3Z1JlbGV2YW50VXNlck5hbWUnKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZignc2hvd1JvbGxiYWNrTGlua3MnKS5pbmNsdWRlcygnY29udHJpYnMnKSB8fFxuXHRcdFx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgIT09IHVzZXJuYW1lICYmXG5cdFx0XHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ3Nob3dSb2xsYmFja0xpbmtzJykuaW5jbHVkZXMoJ290aGVycycpKSB8fFxuXHRcdFx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgPT09IHVzZXJuYW1lICYmIFR3aW5rbGUuZ2V0UHJlZignc2hvd1JvbGxiYWNrTGlua3MnKS5pbmNsdWRlcygnbWluZScpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb25zdCAkbGlzdCA9ICRib2R5XG5cdFx0XHRcdFx0XHQuZmluZCgnI213LWNvbnRlbnQtdGV4dCcpXG5cdFx0XHRcdFx0XHQuZmluZCgndWwgbGk6aGFzKHNwYW4ubXctdWN0b3ApOmhhcygubXctY2hhbmdlc2xpc3QtZGlmZiknKTtcblx0XHRcdFx0XHQkbGlzdC5lYWNoKChfa2V5LCBjdXJyZW50KSA9PiB7XG5cdFx0XHRcdFx0XHQvLyByZXZpZCBpcyBhbHNvIGF2YWlsYWJsZSBpbiB0aGUgaHJlZiBvZiBib3RoXG5cdFx0XHRcdFx0XHQvLyAubXctY2hhbmdlc2xpc3QtZGF0ZSBvciAubXctY2hhbmdlc2xpc3QtZGlmZlxuXHRcdFx0XHRcdFx0Y29uc3QgcGFnZSA9ICQoY3VycmVudCkuZmluZCgnLm13LWNvbnRyaWJ1dGlvbnMtdGl0bGUnKS50ZXh0KCk7XG5cdFx0XHRcdFx0XHQvLyBHZXQgdXNlcm5hbWUgZm9yIElQIHJhbmdlcyAod2dSZWxldmFudFVzZXJOYW1lIGlzIG51bGwpXG5cdFx0XHRcdFx0XHRpZiAoaXNSYW5nZSkge1xuXHRcdFx0XHRcdFx0XHQvLyBUaGUgOm5vdCBpcyBwb3NzaWJseSB1bm5lY2Vzc2FyeSwgYXMgaXQgYXBwZWFycyB0aGF0XG5cdFx0XHRcdFx0XHRcdC8vIC5tdy11c2VybGluayBpcyBzaW1wbHkgbm90IHByZXNlbnQgaWYgdGhlIHVzZXJuYW1lIGlzIGhpZGRlblxuXHRcdFx0XHRcdFx0XHR1c2VybmFtZSA9ICQoY3VycmVudCkuZmluZCgnLm13LXVzZXJsaW5rOm5vdCguaGlzdG9yeS1kZWxldGVkKScpLnRleHQoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIEl0J3MgdW5saWtlbHksIGJ1dCB3ZSBjYW4ndCBlYXNpbHkgY2hlY2sgZm9yIHJldmRlbCdkIHVzZXJuYW1lc1xuXHRcdFx0XHRcdFx0Ly8gc2luY2Ugb25seSBhIHN0cm9uZyBlbGVtZW50IGlzIHByb3ZpZGVkLCB3aXRoIG5vIGVhc3kgc2VsZWN0b3Jcblx0XHRcdFx0XHRcdGN1cnJlbnQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIucm9sbGJhY2tMaW5rcyh1c2VybmFtZSwgdHJ1ZSwgY3VycmVudC5kYXRhc2V0Lm13UmV2aWQsIHBhZ2UpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWNlbnRjaGFuZ2VzOiAoKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnUmVjZW50Y2hhbmdlcycgJiZcblx0XHRcdFx0XHRUd2lua2xlLmdldFByZWYoJ3Nob3dSb2xsYmFja0xpbmtzJykuaW5jbHVkZXMoJ3JlY2VudGNoYW5nZXMnKSkgfHxcblx0XHRcdFx0KG13LmNvbmZpZy5nZXQoJ3dnQ2Fub25pY2FsU3BlY2lhbFBhZ2VOYW1lJykgPT09ICdSZWNlbnRjaGFuZ2VzbGlua2VkJyAmJlxuXHRcdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZignc2hvd1JvbGxiYWNrTGlua3MnKS5pbmNsdWRlcygncmVjZW50Y2hhbmdlc2xpbmtlZCcpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIExhdGVzdCBhbmQgcmV2ZXJ0YWJsZSAobm90IHBhZ2UgY3JlYXRpb25zLCBsb2dzLCBjYXRlZ29yaXphdGlvbnMsIGV0Yy4pXG5cdFx0XHRcdGxldCAkbGlzdCA9ICRib2R5LmZpbmQoJy5tdy1jaGFuZ2VzbGlzdCAubXctY2hhbmdlc2xpc3QtbGFzdC5tdy1jaGFuZ2VzbGlzdC1zcmMtbXctZWRpdCcpO1xuXHRcdFx0XHQvLyBFeGNsdWRlIHRvcC1sZXZlbCBoZWFkZXIgaWYgXCJncm91cCBjaGFuZ2VzXCIgcHJlZmVyZW5jZSBpcyB1c2VkXG5cdFx0XHRcdC8vIGFuZCBmaW5kIG9ubHkgaW5kaXZpZHVhbCBsaW5lcyBvciBuZXN0ZWQgbGluZXNcblx0XHRcdFx0JGxpc3QgPSAkbGlzdFxuXHRcdFx0XHRcdC5ub3QoJy5tdy1yY2ZpbHRlcnMtdWktaGlnaGxpZ2h0cy1lbmhhbmNlZC10b3BsZXZlbCcpXG5cdFx0XHRcdFx0LmZpbmQoJy5tdy1jaGFuZ2VzbGlzdC1saW5lLWlubmVyLCB0ZC5tdy1lbmhhbmNlZC1yYy1uZXN0ZWQnKTtcblx0XHRcdFx0JGxpc3QuZWFjaCgoX2tleSwgY3VycmVudCkgPT4ge1xuXHRcdFx0XHRcdC8vIFRoZSA6bm90IGlzIHBvc3NpYmx5IHVubmVjZXNzYXJ5LCBhcyBpdCBhcHBlYXJzIHRoYXRcblx0XHRcdFx0XHQvLyAubXctdXNlcmxpbmsgaXMgc2ltcGx5IG5vdCBwcmVzZW50IGlmIHRoZSB1c2VybmFtZSBpcyBoaWRkZW5cblx0XHRcdFx0XHRjb25zdCB2YW5kYWwgPSAkKGN1cnJlbnQpLmZpbmQoJy5tdy11c2VybGluazpub3QoLmhpc3RvcnktZGVsZXRlZCknKS50ZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3QgaHJlZiA9ICQoY3VycmVudCkuZmluZCgnLm13LWNoYW5nZXNsaXN0LWRpZmYnKS5hdHRyKCdocmVmJyk7XG5cdFx0XHRcdFx0Y29uc3QgcmV2ID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdkaWZmJywgaHJlZik7XG5cdFx0XHRcdFx0Y29uc3QgcGFnZSA9IGN1cnJlbnQuZGF0YXNldC50YXJnZXRQYWdlO1xuXHRcdFx0XHRcdGN1cnJlbnQuYXBwZW5kQ2hpbGQoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5yb2xsYmFja0xpbmtzKHZhbmRhbCwgdHJ1ZSwgcmV2LCBwYWdlKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aGlzdG9yeTogKCkgPT4ge1xuXHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignc2hvd1JvbGxiYWNrTGlua3MnKS5pbmNsdWRlcygnaGlzdG9yeScpKSB7XG5cdFx0XHRcdC8vIEFsbCByZXZzXG5cdFx0XHRcdGNvbnN0IGhpc3RMaXN0ID0gJGJvZHkuZmluZCgnI3BhZ2VoaXN0b3J5IGxpJykudG9BcnJheSgpO1xuXHRcdFx0XHQvLyBPbiBmaXJzdCBwYWdlIG9mIHJlc3VsdHMsIHNvIGFkZCByZXZlcnQvcm9sbGJhY2tcblx0XHRcdFx0Ly8gbGlua3MgdG8gdGhlIHRvcCByZXZpc2lvblxuXHRcdFx0XHRpZiAoISRib2R5LmZpbmQoJ2EubXctZmlyc3RsaW5rJykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlyc3QgPSBoaXN0TGlzdC5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbnN0IHZhbmRhbCA9ICQoZmlyc3QpLmZpbmQoJy5tdy11c2VybGluazpub3QoLmhpc3RvcnktZGVsZXRlZCknKS50ZXh0KCk7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZm9yIGZpcnN0IHVzZXJuYW1lIGRpZmZlcmVudCB0aGFuIHRoZSB0b3AgdXNlcixcblx0XHRcdFx0XHQvLyBvbmx5IGFwcGx5IHJvbGxiYWNrIGxpbmtzIGlmL3doZW4gZm91bmRcblx0XHRcdFx0XHQvLyBmb3IgZmFzdGVyIHRoYW4gZXZlcnlcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgaGlzdExpc3QpIHtcblx0XHRcdFx0XHRcdGlmICgkKGl0ZW0pLmZpbmQoJy5tdy11c2VybGluaycpLnRleHQoKSAhPT0gdmFuZGFsKSB7XG5cdFx0XHRcdFx0XHRcdGZpcnN0LmFwcGVuZENoaWxkKFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIucm9sbGJhY2tMaW5rcyh2YW5kYWwsIHRydWUpKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIG9sZGlkXG5cdFx0XHRcdGZvciAoY29uc3QgcmV2IG9mIGhpc3RMaXN0KSB7XG5cdFx0XHRcdFx0Ly8gRnJvbSByZXN0b3JlVGhpc1JldmlzaW9uLCBub24tdHJhbnNmZXJhYmxlXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHRleHQgaGFzIGJlZW4gcmV2ZGVsJ2QsIGl0IGdldHMgd3JhcHBlZCBpbiBhIHNwYW4gd2l0aCAuaGlzdG9yeS1kZWxldGVkLFxuXHRcdFx0XHRcdC8vIGFuZCBocmVmIHdpbGwgYmUgdW5kZWZpbmVkIChhbmQgdGh1cyBvbGRpZCBpcyBOYU4pXG5cdFx0XHRcdFx0Y29uc3Qge2hyZWZ9ID0gcmV2LnF1ZXJ5U2VsZWN0b3IoJy5tdy1jaGFuZ2VzbGlzdC1kYXRlJyk7XG5cdFx0XHRcdFx0Y29uc3Qgb2xkaWQgPSBOdW1iZXIucGFyc2VJbnQobXcudXRpbC5nZXRQYXJhbVZhbHVlKCdvbGRpZCcsIGhyZWYpLCAxMCk7XG5cdFx0XHRcdFx0aWYgKCFOdW1iZXIuaXNOYU4ob2xkaWQpKSB7XG5cdFx0XHRcdFx0XHRyZXYuYXBwZW5kQ2hpbGQoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5yZXN0b3JlVGhpc1JldmlzaW9uTGluayhvbGRpZCwgdHJ1ZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGlmZjogKCkgPT4ge1xuXHRcdFx0Ly8gQXV0b2ZpbGwgdXNlciB0YWxrIGxpbmtzIG9uIGRpZmZzIHdpdGggdmFuYXJ0aWNsZSBmb3IgZWFzeSB3YXJuaW5nLCBidXQgZG9uJ3QgYXV0b3dhcm5cblx0XHRcdGNvbnN0IHdhcm5Gcm9tVGFsayA9ICh4dGl0bGUpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFsa0xpbmsgPSAkKGAjbXctZGlmZi0ke3h0aXRsZX0yIC5tdy11c2VydG9vbGxpbmtzIGFgKS5maXJzdCgpO1xuXHRcdFx0XHRpZiAodGFsa0xpbmsubGVuZ3RoKSB7XG5cdFx0XHRcdFx0bGV0IGV4dHJhUGFyYW1zID0gYHZhbmFydGljbGU9JHttdy51dGlsLnJhd3VybGVuY29kZShNb3JlYml0cy5wYWdlTmFtZU5vcm0pfSZub2F1dG93YXJuPXRydWVgO1xuXHRcdFx0XHRcdC8vIGRpZmZJRHMgZm9yIHZhbmFydGljbGVyZXZpZFxuXHRcdFx0XHRcdGV4dHJhUGFyYW1zICs9ICcmdmFuYXJ0aWNsZXJldmlkPSc7XG5cdFx0XHRcdFx0ZXh0cmFQYXJhbXMgKz0geHRpdGxlID09PSAnb3RpdGxlJyA/IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk9sZElkJykgOiBtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpO1xuXHRcdFx0XHRcdGNvbnN0IGhyZWYgPSB0YWxrTGluay5hdHRyKCdocmVmJyk7XG5cdFx0XHRcdFx0aWYgKGhyZWYuaW5jbHVkZXMoJz8nKSkge1xuXHRcdFx0XHRcdFx0dGFsa0xpbmsuYXR0cignaHJlZicsIGAke2hyZWZ9JiR7ZXh0cmFQYXJhbXN9YCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhbGtMaW5rLmF0dHIoJ2hyZWYnLCBgJHtocmVmfT8ke2V4dHJhUGFyYW1zfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdC8vIE9sZGVyIHJldmlzaW9uXG5cdFx0XHR3YXJuRnJvbVRhbGsoJ290aXRsZScpOyAvLyBBZGQgcXVpY2std2FybiBsaW5rIHRvIHVzZXIgdGFsayBsaW5rXG5cdFx0XHQvLyBEb24ndCBsb2FkIGlmIHRoZXJlJ3MgYSBzaW5nbGUgcmV2aXNpb24gb3Igd2VpcmQgZGlmZiAoY3VyIG9uIGxhdGVzdClcblx0XHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0RpZmZPbGRJZCcpICYmIG13LmNvbmZpZy5nZXQoJ3dnRGlmZk9sZElkJykgIT09IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk5ld0lkJykpIHtcblx0XHRcdFx0Ly8gQWRkIGEgW3Jlc3RvcmUgdGhpcyByZXZpc2lvbl0gbGluayB0byB0aGUgb2xkZXIgcmV2aXNpb25cblx0XHRcdFx0Y29uc3Qgb2xkVGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctZGlmZi1vdGl0bGUxJykucGFyZW50Tm9kZTtcblx0XHRcdFx0Y29uc3QgcmV2ZXJ0VG9SZXZpc2lvbiA9IFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIucmVzdG9yZVRoaXNSZXZpc2lvbkxpbmsoJ3dnRGlmZk9sZElkJyk7XG5cdFx0XHRcdG9sZFRpdGxlLmluc2VydEJlZm9yZShyZXZlcnRUb1JldmlzaW9uLCBvbGRUaXRsZS5maXJzdENoaWxkKTtcblx0XHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignY3VzdG9tUmV2ZXJ0U3VtbWFyeScpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRyZXZlcnRUb1JldmlzaW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgfHwgJykpO1xuXHRcdFx0XHRcdGNvbnN0IHJldmVydHN1bW1hcnkgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRcdFx0XHRuYW1lOiAncmV2ZXJ0c3VtbWFyeScsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV2ZXJ0c3VtbWFyeS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0dHlwZTogJ29wdGlvbicsXG5cdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgInmi6nlm57pgIDnkIbnlLEnLCAn6YG45pOH5Zue6YCA55CG55SxJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0JChUd2lua2xlLmdldFByZWYoJ2N1c3RvbVJldmVydFN1bW1hcnknKSkuZWFjaCgoXywgZSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV2ZXJ0c3VtbWFyeS5hcHBlbmQoe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRcdFx0bGFiZWw6IGUubGFiZWwsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBlLnZhbHVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV2ZXJ0VG9SZXZpc2lvbi5hcHBlbmRDaGlsZChyZXZlcnRzdW1tYXJ5LnJlbmRlcigpLmNoaWxkTm9kZXNbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBOZXdlciByZXZpc2lvblxuXHRcdFx0d2FybkZyb21UYWxrKCdudGl0bGUnKTsgLy8gQWRkIHF1aWNrLXdhcm4gbGluayB0byB1c2VyIHRhbGsgbGlua1xuXHRcdFx0Ly8gQWRkIGVpdGhlciByZXN0b3JlIG9yIHJvbGxiYWNrIGxpbmtzIHRvIHRoZSBuZXdlciByZXZpc2lvblxuXHRcdFx0Ly8gRG9uJ3Qgc2hvdyBpZiB0aGVyZSdzIGEgc2luZ2xlIHJldmlzaW9uIG9yIHdlaXJkIGRpZmYgKHByZXYgb24gZmlyc3QpXG5cdFx0XHRpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RpZmZlcmVuY2VzLW5leHRsaW5rJykpIHtcblx0XHRcdFx0Ly8gTm90IGxhdGVzdCByZXZpc2lvbiwgYWRkIFtyZXN0b3JlIHRoaXMgcmV2aXNpb25dIGxpbmsgdG8gbmV3ZXIgcmV2aXNpb25cblx0XHRcdFx0Y29uc3QgbmV3VGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctZGlmZi1udGl0bGUxJykucGFyZW50Tm9kZTtcblx0XHRcdFx0bmV3VGl0bGUuaW5zZXJ0QmVmb3JlKFxuXHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYubGlua0J1aWxkZXIucmVzdG9yZVRoaXNSZXZpc2lvbkxpbmsoJ3dnRGlmZk5ld0lkJyksXG5cdFx0XHRcdFx0bmV3VGl0bGUuZmlyc3RDaGlsZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdzaG93Um9sbGJhY2tMaW5rcycpLmluY2x1ZGVzKCdkaWZmJykgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dEaWZmT2xkSWQnKSAmJlxuXHRcdFx0XHQobXcuY29uZmlnLmdldCgnd2dEaWZmT2xkSWQnKSAhPT0gbXcuY29uZmlnLmdldCgnd2dEaWZmTmV3SWQnKSB8fFxuXHRcdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkaWZmZXJlbmNlcy1wcmV2bGluaycpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIE5vcm1hbGx5IC5tdy11c2VybGluayBpcyBhIGxpbmssIGJ1dCBpZiB0aGVcblx0XHRcdFx0Ly8gdXNlcm5hbWUgaXMgaGlkZGVuLCBpdCB3aWxsIGJlIGEgc3BhbiB3aXRoXG5cdFx0XHRcdC8vIC5oaXN0b3J5LWRlbGV0ZWQgYXMgd2VsbC4gV2hlbiBhIHN5c29wIHZpZXdzIHRoZVxuXHRcdFx0XHQvLyBoaWRkZW4gY29udGVudCwgdGhlIHNwYW4gY29udGFpbnMgdGhlIHVzZXJuYW1lIGluIGFcblx0XHRcdFx0Ly8gbGluayBlbGVtZW50LCB3aGljaCB3aWxsICpqdXN0KiBoYXZlXG5cdFx0XHRcdC8vIC5tdy11c2VybGluay4gVGhlIGJlbG93IHRodXMgZmluZHMgdGhlIGZpcnN0XG5cdFx0XHRcdC8vIGluc3RhbmNlIG9mIHRoZSBjbGFzcywgd2hpY2ggaWYgaGlkZGVuIGlzIHRoZSBzcGFuXG5cdFx0XHRcdC8vIGFuZCB0aHVzIHRleHQgcmV0dXJucyB1bmRlZmluZWQuIFRlY2huaWNhbGx5LCB0aGlzXG5cdFx0XHRcdC8vIGlzIGEgcGxhY2Ugd2hlcmUgc3lzb3BzICpjb3VsZCogaGF2ZSBtb3JlXG5cdFx0XHRcdC8vIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byB0aGVtIChhcyBhYm92ZSwgdmlhXG5cdFx0XHRcdC8vICZ1bmhpZGU9MSksIHNpbmNlIHRoZSB1c2VybmFtZSB3aWxsIGJlIGF2YWlsYWJsZSBieVxuXHRcdFx0XHQvLyBjaGVja2luZyBhLm13LXVzZXJsaW5rIGluc3RlYWQsIGJ1dCByZXZlcnQoKSB3aWxsXG5cdFx0XHRcdC8vIG5lZWQgcmV3b3JraW5nIGFyb3VuZCB1c2VySGlkZGVuXG5cdFx0XHRcdGNvbnN0IHZhbmRhbCA9ICRib2R5LmZpbmQoJyNtdy1kaWZmLW50aXRsZTInKS5maW5kKCcubXctdXNlcmxpbmsnKVswXS50ZXh0O1xuXHRcdFx0XHRjb25zdCBudGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctZGlmZi1udGl0bGUxJykucGFyZW50Tm9kZTtcblx0XHRcdFx0bnRpdGxlLmluc2VydEJlZm9yZShUd2lua2xlLmZsdWZmLmxpbmtCdWlsZGVyLnJvbGxiYWNrTGlua3ModmFuZGFsKSwgbnRpdGxlLmZpcnN0Q2hpbGQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b2xkaWQ6ICgpID0+IHtcblx0XHRcdC8vIEFkZCBhIFtyZXN0b3JlIHRoaXMgcmV2aXNpb25dIGxpbmsgb24gb2xkIHJldmlzaW9uc1xuXHRcdFx0Y29uc3QgdGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctcmV2aXNpb24taW5mbycpLnBhcmVudE5vZGU7XG5cdFx0XHR0aXRsZS5pbnNlcnRCZWZvcmUoVHdpbmtsZS5mbHVmZi5saW5rQnVpbGRlci5yZXN0b3JlVGhpc1JldmlzaW9uTGluaygnd2dSZXZpc2lvbklkJyksIHRpdGxlLmZpcnN0Q2hpbGQpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuZmx1ZmYuZGlzYWJsZUxpbmtzID0gKHBhcmVudE5vZGUpID0+IHtcblx0XHQvLyBBcnJheS5mcm9tIG5vdCBhdmFpbGFibGUgaW4gSUUxMSA6KFxuXHRcdCQocGFyZW50Tm9kZSlcblx0XHRcdC5jaGlsZHJlbigpXG5cdFx0XHQuZWFjaCgoX2ksIG5vZGUpID0+IHtcblx0XHRcdFx0bm9kZS5pbm5lckhUTUwgPSBub2RlLnRleHRDb250ZW50OyAvLyBGZWVscyBsaWtlIGNoZWF0aW5nXG5cdFx0XHRcdCQobm9kZSkuY3NzKCdmb250LXdlaWdodCcsICdub3JtYWwnKS5jc3MoJ2NvbG9yJywgJ2RhcmtncmF5Jyk7XG5cdFx0XHR9KTtcblx0fTtcblx0VHdpbmtsZS5mbHVmZi5yZXZlcnQgPSAodHlwZSwgdmFuZGFsLCByZXYsIHBhZ2UpID0+IHtcblx0XHRpZiAobXcudXRpbC5pc0lQdjZBZGRyZXNzKHZhbmRhbCkpIHtcblx0XHRcdHZhbmRhbCA9IE1vcmViaXRzLnNhbml0aXplSVB2Nih2YW5kYWwpO1xuXHRcdH1cblx0XHRjb25zdCBwYWdlbmFtZSA9IHBhZ2UgfHwgbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdGNvbnN0IHJldmlkID0gcmV2IHx8IG13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpO1xuXHRcdGxldCBzdW1tYXJ5ID0gJyc7XG5cdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdyZXZlcnRzdW1tYXJ5JylbMF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c3VtbWFyeSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdyZXZlcnRzdW1tYXJ5JylbMF0udmFsdWU7XG5cdFx0fVxuXHRcdGlmIChUd2lua2xlLmZsdWZmLnJvbGxiYWNrSW5QbGFjZSkge1xuXHRcdFx0Y29uc3Qgbm90aWZ5U3RhdHVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdFx0bXcubm90aWZ5KG5vdGlmeVN0YXR1cywge1xuXHRcdFx0XHRhdXRvSGlkZTogZmFsc2UsXG5cdFx0XHRcdHRpdGxlOiBg5Zue6YCAJHtwYWdlfWAsXG5cdFx0XHRcdHRhZzogYHR3aW5rbGVmbHVmZl8ke3Jldn1gLCAvLyBTaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGdpdmVuIGRpc2FibGVMaW5rXG5cdFx0XHR9KTtcblxuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQobm90aWZ5U3RhdHVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI213LWNvbnRlbnQtdGV4dCcpKTtcblx0XHRcdCRib2R5LmZpbmQoJyNjYXRsaW5rcycpLnJlbW92ZSgpO1xuXHRcdH1cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0dXNlcjogdmFuZGFsLFxuXHRcdFx0dXNlckhpZGRlbjogIXZhbmRhbCxcblx0XHRcdHBhZ2VuYW1lLFxuXHRcdFx0cmV2aWQsXG5cdFx0XHRzdW1tYXJ5LFxuXHRcdH07XG5cdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRwcm9wOiBbJ2luZm8nLCAncmV2aXNpb25zJ10sXG5cdFx0XHR0aXRsZXM6IHBhZ2VuYW1lLFxuXHRcdFx0aW50ZXN0YWN0aW9uczogJ2VkaXQnLFxuXHRcdFx0cnZsaW1pdDogVHdpbmtsZS5nZXRQcmVmKCdyZXZlcnRNYXhSZXZpc2lvbnMnKSxcblx0XHRcdHJ2cHJvcDogWydpZHMnLCAndGltZXN0YW1wJywgJ3VzZXInXSxcblx0XHRcdGN1cnRpbWVzdGFtcDogJycsXG5cdFx0XHRtZXRhOiAndG9rZW5zJyxcblx0XHRcdHR5cGU6ICdjc3JmJyxcblx0XHR9O1xuXHRcdGNvbnN0IHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0d2luZG93LndnVUxTKCfmipPlj5bovoPml6nkv67orqLniYjmnKzkv6Hmga8nLCAn5oqT5Y+W6LyD5pep5L+u6KiC54mI5pys6LOH6KiKJyksXG5cdFx0XHRxdWVyeSxcblx0XHRcdFR3aW5rbGUuZmx1ZmYuY2FsbGJhY2tzLm1haW5cblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHBhcmFtcztcblx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdH07XG5cdFR3aW5rbGUuZmx1ZmYucmV2ZXJ0VG9SZXZpc2lvbiA9IChvbGRyZXYpID0+IHtcblx0XHRsZXQgc3VtbWFyeSA9ICcnO1xuXHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgncmV2ZXJ0c3VtbWFyeScpWzBdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHN1bW1hcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgncmV2ZXJ0c3VtbWFyeScpWzBdLnZhbHVlO1xuXHRcdH1cblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctY29udGVudC10ZXh0JykpO1xuXHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0cHJvcDogWydpbmZvJywgJ3JldmlzaW9ucyddLFxuXHRcdFx0dGl0bGVzOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRydmxpbWl0OiAxLFxuXHRcdFx0cnZzdGFydGlkOiBvbGRyZXYsXG5cdFx0XHRydnByb3A6IFsnaWRzJywgJ3VzZXInXSxcblx0XHRcdGZvcm1hdDogJ3htbCcsXG5cdFx0XHRjdXJ0aW1lc3RhbXA6ICcnLFxuXHRcdFx0bWV0YTogJ3Rva2VucycsXG5cdFx0XHR0eXBlOiAnY3NyZicsXG5cdFx0fTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdHdpbmRvdy53Z1VMUygn5oqT5Y+W6L6D5pep5L+u6K6i54mI5pys5L+h5oGvJywgJ+aKk+WPlui8g+aXqeS/ruiogueJiOacrOizh+ioiicpLFxuXHRcdFx0cXVlcnksXG5cdFx0XHRUd2lua2xlLmZsdWZmLmNhbGxiYWNrcy50b1JldmlzaW9uXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHRyZXY6IG9sZHJldixcblx0XHRcdHN1bW1hcnksXG5cdFx0fTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdH07XG5cdFR3aW5rbGUuZmx1ZmYuY2FsbGJhY2tzID0ge1xuXHRcdHRvUmV2aXNpb246IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbERvYyA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGNvbnN0IGxhc3RyZXZpZCA9IE51bWJlci5wYXJzZUludCgkKHhtbERvYykuZmluZCgncGFnZScpLmF0dHIoJ2xhc3RyZXZpZCcpLCAxMCk7XG5cdFx0XHRjb25zdCB0b3VjaGVkID0gJCh4bWxEb2MpLmZpbmQoJ3BhZ2UnKS5hdHRyKCd0b3VjaGVkJyk7XG5cdFx0XHRjb25zdCBsb2FkdGltZXN0YW1wID0gJCh4bWxEb2MpLmZpbmQoJ2FwaScpLmF0dHIoJ2N1cnRpbWVzdGFtcCcpO1xuXHRcdFx0Y29uc3QgY3NyZnRva2VuID0gJCh4bWxEb2MpLmZpbmQoJ3Rva2VucycpLmF0dHIoJ2NzcmZ0b2tlbicpO1xuXHRcdFx0Y29uc3QgcmV2ZXJ0VG9SZXZJRCA9IE51bWJlci5wYXJzZUludCgkKHhtbERvYykuZmluZCgncmV2JykuYXR0cigncmV2aWQnKSwgMTApO1xuXHRcdFx0Y29uc3QgcmV2ZXJ0VG9Vc2VyID0gJCh4bWxEb2MpLmZpbmQoJ3JldicpLmF0dHIoJ3VzZXInKTtcblx0XHRcdGNvbnN0IHJldmVydFRvVXNlckhpZGRlbiA9IHR5cGVvZiAkKHhtbERvYykuZmluZCgncmV2JykuYXR0cigndXNlcmhpZGRlbicpID09PSAnc3RyaW5nJztcblx0XHRcdGlmIChyZXZlcnRUb1JldklEICE9PSBhcGlvYmoucGFyYW1zLnJldikge1xuXHRcdFx0XHRhcGlvYmouc3RhdGVsZW0uZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aKk+WPluWIsOeahOS/ruiuoueJiOacrOS4juivt+axgueahOS/ruiuoueJiOacrOS4jeespu+8jOWPlua2iOOAgicsXG5cdFx0XHRcdFx0XHQn5oqT5Y+W5Yiw55qE5L+u6KiC54mI5pys6IiH6KuL5rGC55qE5L+u6KiC54mI5pys5LiN56ym77yM5Y+W5raI44CCJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb3B0aW9uYWxfc3VtbWFyeSA9IHByb21wdChcblx0XHRcdFx0YCR7d2luZG93LndnVUxTKCfor7fovpPlhaXlm57pgIDnkIbnlLHvvJonLCAn6KuL6Ly45YWl5Zue6YCA55CG55Sx77yaJyl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLFxuXHRcdFx0XHRhcGlvYmoucGFyYW1zLnN1bW1hcnlcblx0XHRcdCk7IC8vIHBhZGRlZCBvdXQgdG8gd2lkZW4gcHJvbXB0IGluIEZpcmVmb3hcblx0XHRcdGlmIChvcHRpb25hbF9zdW1tYXJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdGFwaW9iai5zdGF0ZWxlbS5lcnJvcih3aW5kb3cud2dVTFMoJ+eUseeUqOaIt+WPlua2iOOAgicsICfnlLHkvb/nlKjogIXlj5bmtojjgIInKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN1bW1hcnkgPSBUd2lua2xlLmZsdWZmLmZvcm1hdFN1bW1hcnkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5Zue6YCA5Yiw55SxJFVTRVLlgZrlh7rnmoTkv67orqLniYjmnKwnLCAn5Zue6YCA5Yiw55SxJFVTRVLlgZrlh7rnmoTkv67oqILniYjmnKwnKSArIHJldmVydFRvUmV2SUQsXG5cdFx0XHRcdHJldmVydFRvVXNlckhpZGRlbiA/IG51bGwgOiByZXZlcnRUb1VzZXIsXG5cdFx0XHRcdG9wdGlvbmFsX3N1bW1hcnlcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAnZWRpdCcsXG5cdFx0XHRcdHRpdGxlOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdHRhZ3M6IFR3aW5rbGUuY2hhbmdlVGFncyxcblx0XHRcdFx0dG9rZW46IGNzcmZ0b2tlbixcblx0XHRcdFx0dW5kbzogbGFzdHJldmlkLFxuXHRcdFx0XHR1bmRvYWZ0ZXI6IHJldmVydFRvUmV2SUQsXG5cdFx0XHRcdGJhc2V0aW1lc3RhbXA6IHRvdWNoZWQsXG5cdFx0XHRcdHN0YXJ0dGltZXN0YW1wOiBsb2FkdGltZXN0YW1wLFxuXHRcdFx0XHRtaW5vcjogVHdpbmtsZS5nZXRQcmVmKCdtYXJrUmV2ZXJ0ZWRQYWdlc0FzTWlub3InKS5pbmNsdWRlcygndG9yZXYnKSA/IHRydWUgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGJvdDogdHJ1ZSxcblx0XHRcdH07XG5cdFx0XHQvLyBIYW5kbGUgd2F0Y2hpbmcsIHBvc3NpYmxlIGV4cGlyeVxuXHRcdFx0aWYgKFR3aW5rbGUuZ2V0UHJlZignd2F0Y2hSZXZlcnRlZFBhZ2VzJykuaW5jbHVkZXMoJ3RvcmV2JykpIHtcblx0XHRcdFx0Y29uc3Qgd2F0Y2hPckV4cGlyeSA9IFR3aW5rbGUuZ2V0UHJlZignd2F0Y2hSZXZlcnRlZEV4cGlyeScpO1xuXHRcdFx0XHRpZiAoIXdhdGNoT3JFeHBpcnkgfHwgd2F0Y2hPckV4cGlyeSA9PT0gJ25vJykge1xuXHRcdFx0XHRcdHF1ZXJ5LndhdGNobGlzdCA9ICdub2NoYW5nZSc7XG5cdFx0XHRcdH0gZWxzZSBpZiAod2F0Y2hPckV4cGlyeSA9PT0gJ2RlZmF1bHQnIHx8IHdhdGNoT3JFeHBpcnkgPT09ICdwcmVmZXJlbmNlcycpIHtcblx0XHRcdFx0XHRxdWVyeS53YXRjaGxpc3QgPSAncHJlZmVyZW5jZXMnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXJ5LndhdGNobGlzdCA9ICd3YXRjaCc7XG5cdFx0XHRcdFx0Ly8gbnVtYmVyIGFsbG93ZWQgYnV0IG5vdCB1c2VkIGluIFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB3YXRjaE9yRXhwaXJ5ID09PSAnc3RyaW5nJyAmJiB3YXRjaE9yRXhwaXJ5ICE9PSAneWVzJykge1xuXHRcdFx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ZXhwaXJ5ID0gd2F0Y2hPckV4cGlyeTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQubm90aWNlID0gJ+WbnumAgOWujOaIkCc7XG5cdFx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCfkv53lrZjlm57pgIDlhoXlrrknLCAn5YSy5a2Y5Zue6YCA5YWn5a65JyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRUd2lua2xlLmZsdWZmLmNhbGxiYWNrcy5jb21wbGV0ZSxcblx0XHRcdFx0YXBpb2JqLnN0YXRlbGVtXG5cdFx0XHQpO1xuXHRcdFx0eXNhcmNoaXZlc19hcGkucGFyYW1zID0gYXBpb2JqLnBhcmFtcztcblx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBvc3QoKTtcblx0XHR9LFxuXHRcdG1haW46IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbERvYyA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGlmICgkKHhtbERvYykuZmluZCgnYWN0aW9ucycpLmF0dHIoJ2VkaXQnKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGFwaW9iai5zdGF0ZWxlbS5lcnJvcihcIlVuYWJsZSB0byBlZGl0IHRoZSBwYWdlLCBpdCdzIHByb2JhYmx5IHByb3RlY3RlZC5cIik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGxhc3RyZXZpZCA9IE51bWJlci5wYXJzZUludCgkKHhtbERvYykuZmluZCgncGFnZScpLmF0dHIoJ2xhc3RyZXZpZCcpLCAxMCk7XG5cdFx0XHRjb25zdCB0b3VjaGVkID0gJCh4bWxEb2MpLmZpbmQoJ3BhZ2UnKS5hdHRyKCd0b3VjaGVkJyk7XG5cdFx0XHRjb25zdCBsb2FkdGltZXN0YW1wID0gJCh4bWxEb2MpLmZpbmQoJ2FwaScpLmF0dHIoJ2N1cnRpbWVzdGFtcCcpO1xuXHRcdFx0Y29uc3QgY3NyZnRva2VuID0gJCh4bWxEb2MpLmZpbmQoJ3Rva2VucycpLmF0dHIoJ2NzcmZ0b2tlbicpO1xuXHRcdFx0Y29uc3QgcmV2cyA9ICQoeG1sRG9jKS5maW5kKCdyZXYnKTtcblx0XHRcdGNvbnN0IHtzdGF0ZWxlbX0gPSBhcGlvYmo7XG5cdFx0XHRjb25zdCB7cGFyYW1zfSA9IGFwaW9iajtcblx0XHRcdGlmIChyZXZzLmxlbmd0aCA8IDEpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3Iod2luZG93LndnVUxTKCfmsqHmnInlhbblroPkv67orqLniYjmnKzvvIzml6Dms5Xlm57pgIAnLCAn5rKS5pyJ5YW25a6D5L+u6KiC54mI5pys77yM54Sh5rOV5Zue6YCAJykpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBbdG9wXSA9IHJldnM7XG5cdFx0XHRjb25zdCBsYXN0dXNlciA9IHRvcC5nZXRBdHRyaWJ1dGUoJ3VzZXInKTtcblx0XHRcdGlmIChsYXN0cmV2aWQgPCBwYXJhbXMucmV2aWQpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmVycm9yKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6ZSZ6K+vJywgJ+mMr+iqpCcpLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0J+S7juacjeWKoeWZqOiOt+WPlueahOacgOaWsOS/ruiuoueJiOacrElEICcsXG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLmh0bWxOb2RlKCdzdHJvbmcnLCBsYXN0cmV2aWQpLFxuXHRcdFx0XHRcdFx0XHQnIOWwj+S6juebruWJjeaJgOaYvuekuueahOS/ruiuoueJiOacrElE44CC6L+Z5Y+v6IO95oSP5ZGz552A5b2T5YmN5L+u6K6i54mI5pys5bey6KKr5Yig6Zmk44CB5pyN5Yqh5Zmo5bu26L+f44CB5oiW5oqT5Y+W5Yiw5LqG5Z2P5o6J55qE5L+h5oGv44CC5Y+W5raI44CCJyxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdCflvp7kvLrmnI3lmajlj5blvpfnmoTmnIDmlrDkv67oqILniYjmnKxJRCAnLFxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgbGFzdHJldmlkKSxcblx0XHRcdFx0XHRcdFx0JyDlsI/mlrznm67liY3miYDpoa/npLrnmoTkv67oqILniYjmnKxJROOAgumAmeWPr+iDveaEj+WRs+iRl+eVtuWJjeS/ruiogueJiOacrOW3suiiq+WIqumZpOOAgeS8uuacjeWZqOW7tumBsuOAgeaIluaTt+WPluWIsOS6huWjnuaOieeahOizh+ioiuOAguWPlua2iOOAgicsXG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBVc2VkIGZvciB1c2VyLWZhY2luZyBhbGVydHMsIG1lc3NhZ2VzLCBldGMuLCBub3QgZWRpdHMgb3Igc3VtbWFyaWVzXG5cdFx0XHRsZXQgdXNlck5vcm0gPSBwYXJhbXMudXNlciB8fCBUd2lua2xlLmZsdWZmLmhpZGRlbk5hbWU7XG5cdFx0XHRsZXQgaW5kZXggPSAxO1xuXHRcdFx0aWYgKHBhcmFtcy5yZXZpZCA9PT0gbGFzdHJldmlkKSB7XG5cdFx0XHRcdC8vIEV4cGVjdGVkIHJldmlzaW9uIGlzIHRoZSBzYW1lLCBzbyB0aGUgdXNlcnMgbXVzdCBtYXRjaDtcblx0XHRcdFx0Ly8gdGhpcyBhbGxvd3Mgc3lzb3BzIHRvIGtub3cgd2hldGhlciB0aGUgdXNlcnMgYXJlIHRoZSBzYW1lXG5cdFx0XHRcdHBhcmFtcy51c2VyID0gbGFzdHVzZXI7XG5cdFx0XHRcdHVzZXJOb3JtID0gcGFyYW1zLnVzZXIgfHwgVHdpbmtsZS5mbHVmZi5oaWRkZW5OYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0J+itpuWRiicsXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHQn5pyA5paw5L+u6K6i54mI5pysICcsXG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLmh0bWxOb2RlKCdzdHJvbmcnLCBsYXN0cmV2aWQpLFxuXHRcdFx0XHRcdFx0XHQnIOS4juaIkeS7rOeahOS/ruiuoueJiOacrCAnLFxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLnJldmlkKSxcblx0XHRcdFx0XHRcdFx0J+S4jeWQjCcsXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHQn5pyA5paw5L+u6KiC54mI5pysICcsXG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLmh0bWxOb2RlKCdzdHJvbmcnLCBsYXN0cmV2aWQpLFxuXHRcdFx0XHRcdFx0XHQnIOiIh+aIkeWAkeeahOS/ruiogueJiOacrCAnLFxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLnJldmlkKSxcblx0XHRcdFx0XHRcdFx0JyDkuI3lkIwnLFxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGxhc3R1c2VyID09PSBwYXJhbXMudXNlcikge1xuXHRcdFx0XHRcdHN3aXRjaCAocGFyYW1zLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ3ZhbmQnOlxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5mbyh3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSwgW1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pyA5paw5L+u6K6i54mI5pys55SxICcsICfmnIDmlrDkv67oqILniYjmnKznlLEgJyksXG5cdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQnIOWBmuWHuu+8jOWboOaIkeS7rOWBh+WumuegtOWdj++8jOe7p+e7reWbnumAgOaTjeS9nOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHQnIOWBmuWHuu+8jOWboOaIkeWAkeWBh+WumuegtOWjnu+8jOe5vOe6jOWbnumAgOaTjeS9nOOAgidcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybign5o+Q56S6JywgW1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pyA5paw5L+u6K6i54mI5pys55SxICcsICfmnIDmlrDkv67oqILniYjmnKznlLEgJyksXG5cdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDlgZrlh7rvvIzkvYbmiJHku6zov5jmmK/kuI3lm57pgIDkuobjgIInLCAnIOWBmuWHuu+8jOS9huaIkeWAkemChOaYr+S4jeWbnumAgOS6huOAgicpLFxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRwYXJhbXMudHlwZSA9PT0gJ3ZhbmQnICYmIC8vIE9rYXkgdG8gdGVzdCBvbiB1c2VyIHNpbmNlIGl0IHdpbGwgZWl0aGVyIGZhaWwgb3Igc3lzb3Agd2lsbCBjb3JyZWN0bHkgYWNjZXNzIGl0XG5cdFx0XHRcdFx0Ly8gQmVzaWRlcywgbm9uZSBvZiB0aGUgdHJ1c3RlZCBib3RzIGFyZSBnb2luZyB0byBiZSByZXZkZWwnZFxuXHRcdFx0XHRcdFR3aW5rbGUuZmx1ZmYudHJ1c3RlZEJvdHMuaW5jbHVkZXModG9wLmdldEF0dHJpYnV0ZSgndXNlcicpKSAmJlxuXHRcdFx0XHRcdHJldnMubGVuZ3RoID4gMSAmJlxuXHRcdFx0XHRcdHJldnNbMV0uZ2V0QXR0cmlidXRlKCdyZXZpZCcpID09PSBwYXJhbXMucmV2aWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8oXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S/oeaBrycsICfos4foqIonKSxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdCfmnIDmlrDkv67orqLniYjmnKznlLEgJyxcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgbGFzdHVzZXIpLFxuXHRcdFx0XHRcdFx0XHRcdCfvvIzkuIDkuKrlj6/kv6HnmoTmnLrlmajkurrlgZrlh7rvvIzkvYbkuYvliY3nmoTniYjmnKzooqvorqTkuLrmmK/noLTlnY/vvIznu6fnu63lm57pgIDmk43kvZzjgIInLFxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0J+acgOaWsOS/ruiogueJiOacrOeUsSAnLFxuXHRcdFx0XHRcdFx0XHRcdE1vcmViaXRzLmh0bWxOb2RlKCdzdHJvbmcnLCBsYXN0dXNlciksXG5cdFx0XHRcdFx0XHRcdFx0J++8jOS4gOWAi+WPr+S/oeeahOapn+WZqOS6uuWBmuWHuu+8jOS9huS5i+WJjeeahOeJiOacrOiiq+iqjeeCuuaYr+egtOWjnu+8jOe5vOe6jOWbnumAgOaTjeS9nOOAgicsXG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGluZGV4ID0gMjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3IoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+mUmeivrycsICfpjK/oqqQnKSxcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdCfmnIDmlrDkv67orqLniYjmnKznlLEgJyxcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgbGFzdHVzZXIpLFxuXHRcdFx0XHRcdFx0XHRcdCcg5YGa5Ye677yM5omA5Lul6L+Z5Liq5L+u6K6i54mI5pys5Y+v6IO95bey57uP6KKr5Zue6YCA5LqG77yM5Y+W5raI5Zue6YCA5pON5L2c44CCJyxcblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdCfmnIDmlrDkv67oqILniYjmnKznlLEgJyxcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgbGFzdHVzZXIpLFxuXHRcdFx0XHRcdFx0XHRcdCcg5YGa5Ye677yM5omA5Lul6YCZ5YCL5L+u6KiC54mI5pys5Y+v6IO95bey57aT6KKr5Zue6YCA5LqG77yM5Y+W5raI5Zue6YCA5pON5L2c44CCJyxcblx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoVHdpbmtsZS5mbHVmZi50cnVzdGVkQm90cy5pbmNsdWRlcyhwYXJhbXMudXNlcikpIHtcblx0XHRcdFx0c3dpdGNoIChwYXJhbXMudHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgJ3ZhbmQnOlxuXHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8od2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksIFtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCflsIblr7kgJywgJ+Wwh+WwjSAnKSxcblx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCcg5omn6KGM56C05Z2P5Zue6YCA77yM6L+Z5piv5LiA5Liq5Y+v5L+h55qE5py65Zmo5Lq677yM5oiR5Lus5YGH5a6a5oKo6KaB5Zue6YCA5YmN5LiA5Liq5L+u6K6i54mI5pys44CCJyxcblx0XHRcdFx0XHRcdFx0XHQnIOWft+ihjOegtOWjnuWbnumAgO+8jOmAmeaYr+S4gOWAi+WPr+S/oeeahOapn+WZqOS6uu+8jOaIkeWAkeWBh+WumuaCqOimgeWbnumAgOWJjeS4gOWAi+S/ruiogueJiOacrOOAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0aW5kZXggPSAyO1xuXHRcdFx0XHRcdFx0cGFyYW1zLnVzZXIgPSByZXZzWzFdLmdldEF0dHJpYnV0ZSgndXNlcicpO1xuXHRcdFx0XHRcdFx0cGFyYW1zLnVzZXJIaWRkZW4gPSByZXZzWzFdLmdldEF0dHJpYnV0ZSgndXNlcmhpZGRlbicpID09PSAnJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8qIGNhc2UgJ25vcm0nOiAqL1xuXHRcdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250ID0gY29uZmlybShcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfpgInmi6nkuobluLjop4Tlm57pgIDvvIzkvYbmnIDmlrDkv67mlLnmmK/nlLHkuIDkuKrlj6/kv6HnmoTmnLrlmajkurrvvIgnLFxuXHRcdFx0XHRcdFx0XHRcdCfpgbjmk4fkuobluLjopo/lm57pgIDvvIzkvYbmnIDmlrDkv67mlLnmmK/nlLHkuIDlgIvlj6/kv6HnmoTmqZ/lmajkurrvvIgnXG5cdFx0XHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0XHRcdHVzZXJOb3JtICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn77yJ5YGa5Ye655qE44CC56Gu5a6a5Lul5Zue6YCA5YmN5LiA5Liq5L+u6K6i54mI5pys77yM5Y+W5raI5Lul5Zue6YCA5py65Zmo5Lq655qE5L+u5pS5Jyxcblx0XHRcdFx0XHRcdFx0XHRcdCfvvInlgZrlh7rnmoTjgILnorrlrprku6Xlm57pgIDliY3kuIDlgIvkv67oqILniYjmnKzvvIzlj5bmtojku6Xlm57pgIDmqZ/lmajkurrnmoTkv67mlLknXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGlmIChjb250KSB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbmZvKHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLCBbXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCflsIblr7kgJywgJ+Wwh+WwjSAnKSxcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgdXNlck5vcm0pLFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCcg5omn6KGM5bi46KeE5Zue6YCA77yM6L+Z5piv5LiA5Liq5Y+v5L+h55qE5py65Zmo5Lq677yM5Z+65LqO56Gu6K6k77yM5oiR5Lus5bCG5Zue6YCA5YmN5LiA5Liq5L+u6K6i54mI5pys44CCJyxcblx0XHRcdFx0XHRcdFx0XHRcdCcg5Z+36KGM5bi46KaP5Zue6YCA77yM6YCZ5piv5LiA5YCL5Y+v5L+h55qE5qmf5Zmo5Lq677yM5Z+65pa856K66KqN77yM5oiR5YCR5bCH5Zue6YCA5YmN5LiA5YCL5L+u6KiC54mI5pys44CCJ1xuXHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0XHRpbmRleCA9IDI7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcy51c2VyID0gcmV2c1sxXS5nZXRBdHRyaWJ1dGUoJ3VzZXInKTtcblx0XHRcdFx0XHRcdFx0cGFyYW1zLnVzZXJIaWRkZW4gPSByZXZzWzFdLmdldEF0dHJpYnV0ZSgndXNlcmhpZGRlbicpID09PSAnJztcblx0XHRcdFx0XHRcdFx0dXNlck5vcm0gPSBwYXJhbXMudXNlciB8fCBUd2lua2xlLmZsdWZmLmhpZGRlbk5hbWU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMud2Fybign5o+Q56S6JywgW1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG5a+5ICcsICflsIflsI0gJyksXG5cdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQnIOaJp+ihjOW4uOinhOWbnumAgO+8jOi/meaYr+S4gOS4quWPr+S/oeeahOacuuWZqOS6uu+8jOWfuuS6juehruiupO+8jOaIkeS7rOS7jeWwhuWbnumAgOi/meS4quS/ruiuoueJiOacrOOAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHQnIOWft+ihjOW4uOimj+WbnumAgO+8jOmAmeaYr+S4gOWAi+WPr+S/oeeahOapn+WZqOS6uu+8jOWfuuaWvOeiuuiqje+8jOaIkeWAkeS7jeWwh+WbnumAgOmAmeWAi+S/ruiogueJiOacrOOAgidcblx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cdFx0XHRsZXQgY291bnQgPSAwO1xuXHRcdFx0Zm9yIChsZXQgaSA9IGluZGV4OyBpIDwgcmV2cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHQrK2NvdW50O1xuXHRcdFx0XHRpZiAocmV2c1tpXS5nZXRBdHRyaWJ1dGUoJ3VzZXInKSAhPT0gcGFyYW1zLnVzZXIpIHtcblx0XHRcdFx0XHRmb3VuZCA9IGk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghZm91bmQpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3IoW1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5pyq5om+5Yiw5LmL5YmN55qE5L+u6K6i54mI5pys77yM5Y+v6IO9ICcsICfmnKrmib7liLDkuYvliY3nmoTkv67oqILniYjmnKzvvIzlj6/og70gJyksXG5cdFx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIHVzZXJOb3JtKSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQnIOaYr+WUr+S4gOi0oeeMruiAhe+8jOaIlui/meS4queUqOaIt+i/nue7reWBmuWHuuS6hui2hei/hyAnLFxuXHRcdFx0XHRcdFx0JyDmmK/llK/kuIDosqLnjbvogIXvvIzmiJbpgJnlgIvnlKjmiLbpgKPnuozlgZrlh7rkuobotoXpgY4gJ1xuXHRcdFx0XHRcdCkgK1xuXHRcdFx0XHRcdFx0bXcubGFuZ3VhZ2UuY29udmVydE51bWJlcihUd2lua2xlLmdldFByZWYoJ3JldmVydE1heFJldmlzaW9ucycpKSArXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDmrKHnvJbovpHjgIInLCAnIOasoee3qOi8r+OAgicpLFxuXHRcdFx0XHRdKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjb3VudCkge1xuXHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfplJnor68nLCAn6Yyv6KqkJyksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aIkeS7rOWwhuimgeWbnumAgDDkuKrkv67orqLniYjmnKzvvIzov5nmsqHmnInmhI/kuYnvvIzmiYDku6Xlj5bmtojlm57pgIDmk43kvZzjgILlj6/og73mmK/lm6DkuLrov5nkuKrkv67orqLniYjmnKzlt7Lnu4/ooqvlm57pgIDvvIzkvYbkv67orqLniYjmnKxJROS7jeaYr+S4gOagt+eahOOAgicsXG5cdFx0XHRcdFx0XHQn5oiR5YCR5bCH6KaB5Zue6YCAMOWAi+S/ruiogueJiOacrO+8jOmAmeaykuacieaEj+e+qe+8jOaJgOS7peWPlua2iOWbnumAgOaTjeS9nOOAguWPr+iDveaYr+WboOeCuumAmeWAi+S/ruiogueJiOacrOW3sue2k+iiq+WbnumAgO+8jOS9huS/ruiogueJiOacrElE5LuN5piv5LiA5qij55qE44CCJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZ29vZF9yZXZpc2lvbiA9IHJldnNbZm91bmRdO1xuXHRcdFx0bGV0IHVzZXJIYXNBbHJlYWR5Q29uZmlybWVkQWN0aW9uID0gZmFsc2U7XG5cdFx0XHRpZiAocGFyYW1zLnR5cGUgIT09ICd2YW5kJyAmJiBjb3VudCA+IDEpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdFx0dXNlck5vcm0gK1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDov57nu63lgZrlh7rkuoYgJywgJyDpgKPnuozlgZrlh7rkuoYgJykgK1xuXHRcdFx0XHRcdFx0XHRtdy5sYW5ndWFnZS5jb252ZXJ0TnVtYmVyKGNvdW50KSArXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOasoee8lui+ke+8jOaYr+WQpuimgeWFqOmDqOWbnumAgO+8nycsICcg5qyh57eo6Lyv77yM5piv5ZCm6KaB5YWo6YOo5Zue6YCA77yfJylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5pbmZvKCfmj5DnpLonLCB3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nCcsICfkvb/nlKjogIXlj5bmtojmk43kvZwnKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHVzZXJIYXNBbHJlYWR5Q29uZmlybWVkQWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhcmFtcy5jb3VudCA9IGNvdW50O1xuXHRcdFx0cGFyYW1zLmdvb2RpZCA9IGdvb2RfcmV2aXNpb24uZ2V0QXR0cmlidXRlKCdyZXZpZCcpO1xuXHRcdFx0cGFyYW1zLmdvb2R1c2VyID0gZ29vZF9yZXZpc2lvbi5nZXRBdHRyaWJ1dGUoJ3VzZXInKTtcblx0XHRcdHBhcmFtcy5nb29kdXNlckhpZGRlbiA9IGdvb2RfcmV2aXNpb24uZ2V0QXR0cmlidXRlKCd1c2VyaGlkZGVuJykgPT09ICcnO1xuXHRcdFx0c3RhdGVsZW0uc3RhdHVzKFtcblx0XHRcdFx0TW9yZWJpdHMuaHRtbE5vZGUoJ3N0cm9uZycsIG13Lmxhbmd1YWdlLmNvbnZlcnROdW1iZXIoY291bnQpKSxcblx0XHRcdFx0d2luZG93LndnVUxTKCcg5Liq5L+u6K6i54mI5pys5LmL5YmN55SxICcsICcg5YCL5L+u6KiC54mI5pys5LmL5YmN55SxICcpLFxuXHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLmdvb2R1c2VySGlkZGVuID8gVHdpbmtsZS5mbHVmZi5oaWRkZW5OYW1lIDogcGFyYW1zLmdvb2R1c2VyKSxcblx0XHRcdFx0d2luZG93LndnVUxTKCcg5YGa5Ye655qE5L+u6K6i54mI5pysICcsICcg5YGa5Ye655qE5L+u6KiC54mI5pysICcpLFxuXHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLmdvb2RpZCksXG5cdFx0XHRdKTtcblx0XHRcdGxldCBzdW1tYXJ5O1xuXHRcdFx0bGV0IGV4dHJhX3N1bW1hcnk7XG5cdFx0XHRzd2l0Y2ggKHBhcmFtcy50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ3ZhbmQnOlxuXHRcdFx0XHRcdHN1bW1hcnkgPSBUd2lua2xlLmZsdWZmLmZvcm1hdFN1bW1hcnkoXG5cdFx0XHRcdFx0XHRg5Zue6YCAJFVTRVLlgZrlh7rnmoQke3BhcmFtcy5jb3VudH0ke3dpbmRvdy53Z1VMUygn5qyh57yW6L6R77yM5Yiw55SxJywgJ+asoee3qOi8r++8jOWIsOeUsScpfSR7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcy5nb29kdXNlckhpZGRlbiA/IFR3aW5rbGUuZmx1ZmYuaGlkZGVuTmFtZSA6IHBhcmFtcy5nb29kdXNlclxuXHRcdFx0XHRcdFx0fSR7d2luZG93LndnVUxTKCflgZrlh7rnmoTmnIDlkI7kv67orqLniYjmnKwgJywgJ+WBmuWHuueahOacgOW+jOS/ruiogueJiOacrCAnKX1gLFxuXHRcdFx0XHRcdFx0cGFyYW1zLnVzZXJIaWRkZW4gPyBudWxsIDogcGFyYW1zLnVzZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvKiBjYXNlICdub3JtJzogKi9cblx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGlmIChUd2lua2xlLmdldFByZWYoJ29mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQnKSkge1xuXHRcdFx0XHRcdFx0ZXh0cmFfc3VtbWFyeSA9IHByb21wdChcblx0XHRcdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCflj6/pgInnmoTnvJbovpHmkZjopoHvvJonLCAn5Y+v6YG455qE57eo6Lyv5pGY6KaB77yaJyl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCxcblx0XHRcdFx0XHRcdFx0cGFyYW1zLnN1bW1hcnlcblx0XHRcdFx0XHRcdCk7IC8vIHBhZGRlZCBvdXQgdG8gd2lkZW4gcHJvbXB0IGluIEZpcmVmb3hcblx0XHRcdFx0XHRcdGlmIChleHRyYV9zdW1tYXJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdHN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn55So5oi35Y+W5raI5pON5L2c44CCJywgJ+S9v+eUqOiAheWPlua2iOaTjeS9nOOAgicpKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dXNlckhhc0FscmVhZHlDb25maXJtZWRBY3Rpb24gPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdW1tYXJ5ID0gVHdpbmtsZS5mbHVmZi5mb3JtYXRTdW1tYXJ5KFxuXHRcdFx0XHRcdFx0YOWbnumAgCRVU0VS5YGa5Ye655qEJHtwYXJhbXMuY291bnR9JHt3aW5kb3cud2dVTFMoJ+asoee8lui+kScsICfmrKHnt6jovK8nKX1gLFxuXHRcdFx0XHRcdFx0cGFyYW1zLnVzZXJIaWRkZW4gPyBudWxsIDogcGFyYW1zLnVzZXIsXG5cdFx0XHRcdFx0XHRleHRyYV9zdW1tYXJ5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0VHdpbmtsZS5nZXRQcmVmKCdjb25maXJtT25GbHVmZicpICYmXG5cdFx0XHRcdCF1c2VySGFzQWxyZWFkeUNvbmZpcm1lZEFjdGlvbiAmJlxuXHRcdFx0XHQhY29uZmlybSh3aW5kb3cud2dVTFMoJ+WbnumAgOmhtemdou+8muaCqOehruWumuWQl++8nycsICflm57pgIDpoIHpnaLvvJrmgqjnorrlrprll47vvJ8nKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzdGF0ZWxlbS5lcnJvcih3aW5kb3cud2dVTFMoJ+eUqOaIt+WPlua2iOaTjeS9nOOAgicsICfkvb/nlKjogIXlj5bmtojmk43kvZzjgIInKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIERlY2lkZSB3aGV0aGVyIHRvIG5vdGlmeSB0aGUgdXNlciBvbiBzdWNjZXNzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFUd2lua2xlLmZsdWZmLnNraXBUYWxrICYmXG5cdFx0XHRcdFR3aW5rbGUuZ2V0UHJlZignb3BlblRhbGtQYWdlJykuaW5jbHVkZXMocGFyYW1zLnR5cGUpICYmXG5cdFx0XHRcdCFwYXJhbXMudXNlckhpZGRlbiAmJlxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgIT09IHBhcmFtcy51c2VyXG5cdFx0XHQpIHtcblx0XHRcdFx0cGFyYW1zLm5vdGlmeVVzZXIgPSB0cnVlO1xuXHRcdFx0XHQvLyBQYXNzIGFsb25nIHRvIHRoZSB3YXJuIG1vZHVsZVxuXHRcdFx0XHRwYXJhbXMudmFudGltZXN0YW1wID0gdG9wLmdldEF0dHJpYnV0ZSgndGltZXN0YW1wJyk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAnZWRpdCcsXG5cdFx0XHRcdHRpdGxlOiBwYXJhbXMucGFnZW5hbWUsXG5cdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdHRhZ3M6IFR3aW5rbGUuY2hhbmdlVGFncyxcblx0XHRcdFx0dG9rZW46IGNzcmZ0b2tlbixcblx0XHRcdFx0dW5kbzogbGFzdHJldmlkLFxuXHRcdFx0XHR1bmRvYWZ0ZXI6IHBhcmFtcy5nb29kaWQsXG5cdFx0XHRcdGJhc2V0aW1lc3RhbXA6IHRvdWNoZWQsXG5cdFx0XHRcdHN0YXJ0dGltZXN0YW1wOiBsb2FkdGltZXN0YW1wLFxuXHRcdFx0XHRtaW5vcjogVHdpbmtsZS5nZXRQcmVmKCdtYXJrUmV2ZXJ0ZWRQYWdlc0FzTWlub3InKS5pbmNsdWRlcyhwYXJhbXMudHlwZSkgPyB0cnVlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRib3Q6IHRydWUsXG5cdFx0XHR9O1xuXHRcdFx0Ly8gSGFuZGxlIHdhdGNoaW5nLCBwb3NzaWJsZSBleHBpcnlcblx0XHRcdGlmIChUd2lua2xlLmdldFByZWYoJ3dhdGNoUmV2ZXJ0ZWRQYWdlcycpLmluY2x1ZGVzKHBhcmFtcy50eXBlKSkge1xuXHRcdFx0XHRjb25zdCB3YXRjaE9yRXhwaXJ5ID0gVHdpbmtsZS5nZXRQcmVmKCd3YXRjaFJldmVydGVkRXhwaXJ5Jyk7XG5cdFx0XHRcdGlmICghd2F0Y2hPckV4cGlyeSB8fCB3YXRjaE9yRXhwaXJ5ID09PSAnbm8nKSB7XG5cdFx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ID0gJ25vY2hhbmdlJztcblx0XHRcdFx0fSBlbHNlIGlmICh3YXRjaE9yRXhwaXJ5ID09PSAnZGVmYXVsdCcgfHwgd2F0Y2hPckV4cGlyeSA9PT0gJ3ByZWZlcmVuY2VzJykge1xuXHRcdFx0XHRcdHF1ZXJ5LndhdGNobGlzdCA9ICdwcmVmZXJlbmNlcyc7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ID0gJ3dhdGNoJztcblx0XHRcdFx0XHQvLyBudW1iZXIgYWxsb3dlZCBidXQgbm90IHVzZWQgaW4gVHdpbmtsZS5jb25maWcud2F0Y2hsaXN0RW51bXNcblx0XHRcdFx0XHRpZiAodHlwZW9mIHdhdGNoT3JFeHBpcnkgPT09ICdzdHJpbmcnICYmIHdhdGNoT3JFeHBpcnkgIT09ICd5ZXMnKSB7XG5cdFx0XHRcdFx0XHRxdWVyeS53YXRjaGxpc3RleHBpcnkgPSB3YXRjaE9yRXhwaXJ5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFUd2lua2xlLmZsdWZmLnJvbGxiYWNrSW5QbGFjZSkge1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IHBhcmFtcy5wYWdlbmFtZTtcblx0XHRcdH1cblx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9ICflm57pgIDlrozmiJAnO1xuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+d5a2Y5Zue6YCA5YaF5a65JywgJ+WEsuWtmOWbnumAgOWFp+WuuScpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0VHdpbmtsZS5mbHVmZi5jYWxsYmFja3MuY29tcGxldGUsXG5cdFx0XHRcdHN0YXRlbGVtXG5cdFx0XHQpO1xuXHRcdFx0eXNhcmNoaXZlc19hcGkucGFyYW1zID0gcGFyYW1zO1xuXHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdH0sXG5cdFx0Y29tcGxldGU6IChhcGlvYmopID0+IHtcblx0XHRcdC8vIFRPRE8gTW9zdCBvZiB0aGlzIGlzIGNvcHktcGFzdGVkIGZyb20gTW9yZWJpdHMud2lraS5wYWdlI2ZuU2F2ZVN1Y2Nlc3MuIFVuaWZ5IGl0XG5cdFx0XHRjb25zdCB4bWwgPSBhcGlvYmouZ2V0WE1MKCk7XG5cdFx0XHRjb25zdCAkZWRpdCA9ICQoeG1sKS5maW5kKCdlZGl0Jyk7XG5cdFx0XHRpZiAoJCh4bWwpLmZpbmQoJ2NhcHRjaGEnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGFwaW9iai5zdGF0ZWxlbS5lcnJvcihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S4jeiDveWbnumAgO+8jOWboOacjeWKoeWZqOimgeaxguaCqOi+k+WFpemqjOivgeeggeOAgicsICfkuI3og73lm57pgIDvvIzlm6DkvLrmnI3lmajopoHmsYLmgqjovLjlhaXpqZforYnnorzjgIInKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICgkZWRpdC5hdHRyKCdub2NoYW5nZScpID09PSAnJykge1xuXHRcdFx0XHRhcGlvYmouc3RhdGVsZW0uZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+imgeWbnumAgOWIsOeahOeJiOacrOS4juW9k+WJjeeJiOacrOebuOWQjO+8jOayoeS7gOS5iOimgeWBmueahCcsXG5cdFx0XHRcdFx0XHQn6KaB5Zue6YCA5Yiw55qE54mI5pys6IiH55uu5YmN54mI5pys55u45ZCM77yM5rKS5LuA6bq86KaB5YGa55qEJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFwaW9iai5zdGF0ZWxlbS5pbmZvKCflrozmiJAnKTtcblx0XHRcdFx0Y29uc3Qge3BhcmFtc30gPSBhcGlvYmo7XG5cdFx0XHRcdGlmIChwYXJhbXMubm90aWZ5VXNlciAmJiAhcGFyYW1zLnVzZXJIaWRkZW4pIHtcblx0XHRcdFx0XHQvLyBub3RpZnlVc2VyIG9ubHkgZnJvbSBtYWluLCBub3QgZnJvbSB0b1JldmlzaW9uXG5cdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLmluZm8od2luZG93LndnVUxTKCfkv6Hmga8nLCAn6LOH6KiKJyksIFtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5byA5ZCv55So5oi3ICcsICfplovllZ/kvb/nlKjogIUgJyksXG5cdFx0XHRcdFx0XHRNb3JlYml0cy5odG1sTm9kZSgnc3Ryb25nJywgcGFyYW1zLnVzZXIpLFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCcg55qE6K6o6K666aG1JywgJyDnmoToqI7oq5bpoIEnKSxcblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRjb25zdCB3aW5kb3dRdWVyeSA9IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBgVXNlciB0YWxrOiR7cGFyYW1zLnVzZXJ9YCxcblx0XHRcdFx0XHRcdGFjdGlvbjogJ2VkaXQnLFxuXHRcdFx0XHRcdFx0cHJldmlldzogJ3llcycsXG5cdFx0XHRcdFx0XHR2YW5hcnRpY2xlOiBwYXJhbXMucGFnZW5hbWUucmVwbGFjZSgvXy9nLCAnICcpLFxuXHRcdFx0XHRcdFx0dmFuYXJ0aWNsZXJldmlkOiBwYXJhbXMucmV2aWQsXG5cdFx0XHRcdFx0XHR2YW50aW1lc3RhbXA6IHBhcmFtcy52YW50aW1lc3RhbXAsXG5cdFx0XHRcdFx0XHR2YW5hcnRpY2xlZ29vZHJldmlkOiBwYXJhbXMuZ29vZGlkLFxuXHRcdFx0XHRcdFx0dHlwZTogcGFyYW1zLnR5cGUsXG5cdFx0XHRcdFx0XHRjb3VudDogcGFyYW1zLmNvdW50LFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0c3dpdGNoIChUd2lua2xlLmdldFByZWYoJ3VzZXJUYWxrUGFnZU1vZGUnKSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAndGFiJzpcblx0XHRcdFx0XHRcdFx0d2luZG93Lm9wZW4obXcudXRpbC5nZXRVcmwoJycsIHdpbmRvd1F1ZXJ5KSwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYmxhbmsnOlxuXHRcdFx0XHRcdFx0XHR3aW5kb3cub3Blbihcblx0XHRcdFx0XHRcdFx0XHRtdy51dGlsLmdldFVybCgnJywgd2luZG93UXVlcnkpLFxuXHRcdFx0XHRcdFx0XHRcdCdfYmxhbmsnLFxuXHRcdFx0XHRcdFx0XHRcdCdub29wZW5lcixub3JlZmVycmVyLGxvY2F0aW9uPW5vLHRvb2xiYXI9bm8sc3RhdHVzPW5vLGRpcmVjdG9yaWVzPW5vLHNjcm9sbGJhcnM9eWVzLHdpZHRoPTEyMDAsaGVpZ2h0PTgwMCdcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvKiBjYXNlICd3aW5kb3cnOiAqL1xuXHRcdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0d2luZG93Lm9wZW4oXG5cdFx0XHRcdFx0XHRcdFx0bXcudXRpbC5nZXRVcmwoJycsIHdpbmRvd1F1ZXJ5KSxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubmFtZSA9PT0gJ3R3aW5rbGV3YXJud2luZG93JyA/ICdfYmxhbmsnIDogJ3R3aW5rbGV3YXJud2luZG93Jyxcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubmFtZSA9PT0gJ3R3aW5rbGV3YXJud2luZG93J1xuXHRcdFx0XHRcdFx0XHRcdFx0PyAnbm9vcGVuZXIsbm9yZWZlcnJlciwnXG5cdFx0XHRcdFx0XHRcdFx0XHQ6ICcnICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnbG9jYXRpb249bm8sdG9vbGJhcj1ubyxzdGF0dXM9bm8sZGlyZWN0b3JpZXM9bm8sc2Nyb2xsYmFycz15ZXMsd2lkdGg9MTIwMCxoZWlnaHQ9ODAwJ1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHR9O1xuXHQvLyBJZiBidWlsdEluU3RyaW5nIGNvbnRhaW5zIHRoZSBzdHJpbmcgXCIkVVNFUlwiLCBpdCB3aWxsIGJlIHJlcGxhY2VkXG5cdC8vIGJ5IGFuIGFwcHJvcHJpYXRlIHVzZXIgbGluayBpZiBhIHVzZXIgbmFtZSBpcyBwcm92aWRlZFxuXHRUd2lua2xlLmZsdWZmLmZvcm1hdFN1bW1hcnkgPSAoYnVpbHRJblN0cmluZywgdXNlck5hbWUsIGN1c3RvbVN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBidWlsdEluU3RyaW5nO1xuXHRcdC8vIGFwcGVuZCB1c2VyJ3MgY3VzdG9tIHJlYXNvblxuXHRcdGlmIChjdXN0b21TdHJpbmcpIHtcblx0XHRcdHJlc3VsdCArPSBg77yaJHtNb3JlYml0cy5zdHJpbmcudG9VcHBlckNhc2VGaXJzdENoYXIoY3VzdG9tU3RyaW5nKX1gO1xuXHRcdH1cblx0XHQvLyBmaW5kIG51bWJlciBvZiBVVEYtOCBieXRlcyB0aGUgcmVzdWx0aW5nIHN0cmluZyB0YWtlcyB1cCwgYW5kIHBvc3NpYmx5IGFkZFxuXHRcdC8vIGEgY29udHJpYnV0aW9ucyBvciBjb250cmlidXRpb25zK3RhbGsgbGluayBpZiBpdCBkb2Vzbid0IHB1c2ggdGhlIGVkaXQgc3VtbWFyeVxuXHRcdC8vIG92ZXIgdGhlIDQ5OS1ieXRlIGxpbWl0XG5cdFx0aWYgKC9cXCRVU0VSLy50ZXN0KGJ1aWx0SW5TdHJpbmcpKSB7XG5cdFx0XHRpZiAodXNlck5hbWUpIHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0TGVuID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHJlc3VsdC5yZXBsYWNlKCckVVNFUicsICcnKSkpLmxlbmd0aDtcblx0XHRcdFx0Y29uc3QgY29udHJpYnNMaW5rID0gYFtbU3BlY2lhbDpDb250cmlidXRpb25zLyR7dXNlck5hbWV9fCR7dXNlck5hbWV9XV1gO1xuXHRcdFx0XHRjb25zdCBjb250cmlic0xlbiA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb250cmlic0xpbmspKS5sZW5ndGg7XG5cdFx0XHRcdGlmIChyZXN1bHRMZW4gKyBjb250cmlic0xlbiA8PSA0OTkpIHtcblx0XHRcdFx0XHRjb25zdCB0YWxrTGluayA9IGDvvIhbW1VzZXIgdGFsazoke3VzZXJOYW1lfSR7d2luZG93LndnVUxTKCd86K6o6K66XV3vvIknLCAnfOiojuirll1d77yJJyl9YDtcblx0XHRcdFx0XHRpZiAocmVzdWx0TGVuICsgY29udHJpYnNMZW4gKyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGFsa0xpbmspKS5sZW5ndGggPD0gNDk5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBNb3JlYml0cy5zdHJpbmcuc2FmZVJlcGxhY2UocmVzdWx0LCAnJFVTRVInLCBjb250cmlic0xpbmsgKyB0YWxrTGluayk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IE1vcmViaXRzLnN0cmluZy5zYWZlUmVwbGFjZShyZXN1bHQsICckVVNFUicsIGNvbnRyaWJzTGluayk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdCA9IE1vcmViaXRzLnN0cmluZy5zYWZlUmVwbGFjZShyZXN1bHQsICckVVNFUicsIHVzZXJOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID0gTW9yZWJpdHMuc3RyaW5nLnNhZmVSZXBsYWNlKHJlc3VsdCwgJyRVU0VSJywgVHdpbmtsZS5mbHVmZi5oaWRkZW5OYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblx0VHdpbmtsZS5hZGRJbml0Q2FsbGJhY2soVHdpbmtsZS5mbHVmZiwgJ2ZsdWZmJyk7XG59KShqUXVlcnkpO1xuXG5leHBvcnQge307XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcblxuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlYmF0Y2hkZWxldGUuanMgKi9cbihmdW5jdGlvbiB0d2lua2xlYmF0Y2hkZWxldGUoJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIHR3aW5rbGViYXRjaGRlbGV0ZS5qczogQmF0Y2ggZGVsZXRlIG1vZHVsZSAoc3lzb3BzIG9ubHkpXG5cdCAqIE1vZGUgb2YgaW52b2NhdGlvbjogVGFiIChcIkQtYmF0Y2hcIilcblx0ICogQWN0aXZlIG9uOiBFeGlzdGluZyBub24tYXJ0aWNsZXMsIGFuZCBTcGVjaWFsOlByZWZpeEluZGV4XG5cdCAqL1xuXHRUd2lua2xlLmJhdGNoZGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdE1vcmViaXRzLnVzZXJJc1N5c29wICYmXG5cdFx0XHQoKG13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpICYmIG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPiAwKSB8fFxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnUHJlZml4aW5kZXgnIHx8XG5cdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnQ2Fub25pY2FsU3BlY2lhbFBhZ2VOYW1lJykgPT09ICdCcm9rZW5SZWRpcmVjdHMnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhcblx0XHRcdFx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFjayxcblx0XHRcdFx0d2luZG93LndnVUxTKCfmibnliKAnLCAn5om55YiqJyksXG5cdFx0XHRcdCd0dy1iYXRjaCcsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yig6Zmk5q2k5YiG57G75oiW6aG16Z2i5Lit55qE5omA5pyJ6ZO+5o6lJywgJ+WIqumZpOatpOWIhumhnuaIlumggemdouS4reeahOaJgOaciemAo+e1kCcpXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5iYXRjaGRlbGV0ZS51bmxpbmtDYWNoZSA9IHt9O1xuXHQvLyBIYXMgdGhlIHN1YnBhZ2VzIGxpc3QgYmVlbiBsb2FkZWQ/XG5cdGxldCBzdWJwYWdlc0xvYWRlZDtcblx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRzdWJwYWdlc0xvYWRlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IFdpbmRvdyA9IG5ldyBNb3JlYml0cy5zaW1wbGVXaW5kb3coNjAwLCA0MDApO1xuXHRcdFdpbmRvdy5zZXRUaXRsZSh3aW5kb3cud2dVTFMoJ+aJuemHj+WIoOmZpCcsICfmibnmrKHliKrpmaQnKSk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluayh3aW5kb3cud2dVTFMoJ1R3aW5rbGXluK7liqknLCAnVHdpbmtsZeiqquaYjicpLCAnSDpUVy9ET0MjYmF0Y2hkZWxldGUnKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk6aG16Z2iJywgJ+WIqumZpOmggemdoicpLFxuXHRcdFx0XHRcdG5hbWU6ICdkZWxldGVfcGFnZScsXG5cdFx0XHRcdFx0dmFsdWU6ICdkZWxldGUnLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0c3ViZ3JvdXA6IHtcblx0XHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0J+WIoOmZpOWFs+iBlOeahOiuqOiuuumhte+8iOeUqOaIt+iuqOiuuumhtemZpOWklu+8iScsXG5cdFx0XHRcdFx0XHRcdFx0XHQn5Yiq6Zmk6Zec6IGv55qE6KiO6KuW6aCB77yI5L2/55So6ICF6KiO6KuW6aCB6Zmk5aSW77yJJ1xuXHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ2RlbGV0ZV90YWxrJyxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2RlbGV0ZV90YWxrJyxcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk5Yiw5bey5Yig6aG16Z2i55qE6YeN5a6a5ZCR6aG1JywgJ+WIqumZpOWIsOW3suWIqumggemdoueahOmHjeaWsOWwjuWQkemggemdoicpLFxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdkZWxldGVfcmVkaXJlY3RzJyxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogJ2RlbGV0ZV9yZWRpcmVjdHMnLFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliKDpmaTlt7LliKDpobXpnaLnmoTlrZDpobXpnaInLCAn5Yiq6Zmk5bey5Yiq6aCB6Z2i55qE5a2Q6aCB6Z2iJyksXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ2RlbGV0ZV9zdWJwYWdlcycsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdkZWxldGVfc3VicGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50OiBUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrLnRvZ2dsZVN1YnBhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdHN1Ymdyb3VwOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdDogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig6Zmk5bey5Yig5a2Q6aG16Z2i55qE6K6o6K666aG1JywgJ+WIqumZpOW3suWIquWtkOmggemdoueahOiojuirlumggScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdkZWxldGVfc3VicGFnZV90YWxrcycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdkZWxldGVfc3VicGFnZV90YWxrcycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J+WIoOmZpOWIsOW3suWIoOWtkOmhtemdoueahOmHjeWumuWQkemhtScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQn5Yiq6Zmk5Yiw5bey5Yiq5a2Q6aCB6Z2i55qE6YeN5paw5bCO5ZCR6aCB6Z2iJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogJ2RlbGV0ZV9zdWJwYWdlX3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICdkZWxldGVfc3VicGFnZV9yZWRpcmVjdHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCflj5bmtojmiYDmnInlt7LliKDpobXpnaLnmoTpk77lhaXvvIjku4XlpITnkIbmnaHnm67lkb3lkI3nqbrpl7TvvIknLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J+WPlua2iOaJgOacieW3suWIqumggemdoueahOmAo+WFpe+8iOWDheiZleeQhuaineebruWRveWQjeepuumWk++8iSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6ICd1bmxpbmtfc3VicGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAndW5saW5rX3N1YnBhZ2VzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WPlua2iOmTvuWFpe+8iOS7heWkhOeQhuadoeebruWRveWQjeepuumXtO+8iScsICflj5bmtojpgKPlhaXvvIjlg4XomZXnkIbmop3nm67lkb3lkI3nqbrplpPvvIknKSxcblx0XHRcdFx0XHRuYW1lOiAndW5saW5rX3BhZ2UnLFxuXHRcdFx0XHRcdHZhbHVlOiAndW5saW5rJyxcblx0XHRcdFx0XHRjaGVja2VkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+enu+mZpOaWh+S7tuS9v+eUqO+8iOaJgOacieWRveWQjeepuumXtO+8iScsICfnp7vpmaTmqpTmoYjkvb/nlKjvvIjmiYDmnInlkb3lkI3nqbrplpPvvIknKSxcblx0XHRcdFx0XHRuYW1lOiAndW5saW5rX2ZpbGUnLFxuXHRcdFx0XHRcdHZhbHVlOiAndW5saW5rX2ZpbGUnLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ2NvbW1vbl9yZWFzb24nLFxuXHRcdFx0bGFiZWw6ICfluLjnlKjnkIbnlLHvvJonLFxuXHRcdFx0c3R5bGU6ICd3aWR0aDogODUlOycsXG5cdFx0XHRsaXN0OiBUd2lua2xlLmJhdGNoZGVsZXRlLmRlbGV0ZXJlYXNvbmxpc3QsXG5cdFx0XHRldmVudDogVHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFjay5jaGFuZ2VfY29tbW9uX3JlYXNvbixcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRsYWJlbDogJ+eQhueUse+8micsXG5cdFx0XHRzaXplOiA3NSxcblx0XHR9KTtcblx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdHByb3A6ICdyZXZpc2lvbnN8aW5mb3xpbWFnZWluZm8nLFxuXHRcdFx0aW5wcm9wOiAncHJvdGVjdGlvbicsXG5cdFx0XHRydnByb3A6ICdzaXplfHVzZXInLFxuXHRcdH07XG5cdFx0Ly8gT24gY2F0ZWdvcmllc1xuXHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAxNCkge1xuXHRcdFx0cXVlcnkuZ2VuZXJhdG9yID0gJ2NhdGVnb3J5bWVtYmVycyc7XG5cdFx0XHRxdWVyeS5nY210aXRsZSA9IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKTtcblx0XHRcdHF1ZXJ5LmdjbWxpbWl0ID0gVHdpbmtsZS5nZXRQcmVmKCdiYXRjaE1heCcpO1xuXHRcdFx0Ly8gT24gU3BlY2lhbDpQcmVmaXhJbmRleFxuXHRcdH0gZWxzZSBpZiAobXcuY29uZmlnLmdldCgnd2dDYW5vbmljYWxTcGVjaWFsUGFnZU5hbWUnKSA9PT0gJ1ByZWZpeGluZGV4Jykge1xuXHRcdFx0cXVlcnkuZ2VuZXJhdG9yID0gJ2FsbHBhZ2VzJztcblx0XHRcdHF1ZXJ5LmdhcGxpbWl0ID0gVHdpbmtsZS5nZXRQcmVmKCdiYXRjaE1heCcpO1xuXHRcdFx0aWYgKG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgncHJlZml4JykpIHtcblx0XHRcdFx0cXVlcnkuZ2FwbmFtZXNwYWNlID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCduYW1lc3BhY2UnKTtcblx0XHRcdFx0cXVlcnkuZ2FwcHJlZml4ID0gbXcudXRpbC5nZXRQYXJhbVZhbHVlKCdwcmVmaXgnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxldCBwYXRoU3BsaXQgPSBkZWNvZGVVUklDb21wb25lbnQobG9jYXRpb24ucGF0aG5hbWUpLnNwbGl0KCcvJyk7XG5cdFx0XHRcdGlmIChwYXRoU3BsaXQubGVuZ3RoIDwgMyB8fCBwYXRoU3BsaXRbMl0gIT09ICdTcGVjaWFsOuWJjee8gOe0ouW8lScpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGl0bGVTcGxpdCA9IHBhdGhTcGxpdFszXS5zcGxpdCgnOicpO1xuXHRcdFx0XHRxdWVyeS5nYXBuYW1lc3BhY2UgPSBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpW3RpdGxlU3BsaXRbMF0udG9Mb3dlckNhc2UoKV07XG5cdFx0XHRcdGlmICh0aXRsZVNwbGl0Lmxlbmd0aCA8IDIgfHwgcXVlcnkuZ2FwbmFtZXNwYWNlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRxdWVyeS5nYXBuYW1lc3BhY2UgPSAwOyAvLyBhcnRpY2xlIG5hbWVzcGFjZVxuXHRcdFx0XHRcdHF1ZXJ5LmdhcHByZWZpeCA9IHBhdGhTcGxpdC5zcGxpY2UoMykuam9pbignLycpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGhTcGxpdCA9IHBhdGhTcGxpdC5zcGxpY2UoNCk7XG5cdFx0XHRcdFx0cGF0aFNwbGl0LnNwbGljZSgwLCAwLCB0aXRsZVNwbGl0LnNwbGljZSgxKS5qb2luKCc6JykpO1xuXHRcdFx0XHRcdHF1ZXJ5LmdhcHByZWZpeCA9IHBhdGhTcGxpdC5qb2luKCcvJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIE9uIFNwZWNpYWw6QnJva2VuUmVkaXJlY3RzXG5cdFx0fSBlbHNlIGlmIChtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnQnJva2VuUmVkaXJlY3RzJykge1xuXHRcdFx0cXVlcnkuZ2VuZXJhdG9yID0gJ3F1ZXJ5cGFnZSc7XG5cdFx0XHRxdWVyeS5ncXBwYWdlID0gJ0Jyb2tlblJlZGlyZWN0cyc7XG5cdFx0XHRxdWVyeS5ncXBsaW1pdCA9IFR3aW5rbGUuZ2V0UHJlZignYmF0Y2hNYXgnKTtcblx0XHRcdC8vIE9uIG5vcm1hbCBwYWdlc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRxdWVyeS5nZW5lcmF0b3IgPSAnbGlua3MnO1xuXHRcdFx0cXVlcnkudGl0bGVzID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0cXVlcnkuZ3BsbGltaXQgPSBUd2lua2xlLmdldFByZWYoJ2JhdGNoTWF4Jyk7XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXR1c2RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdHN0YXR1c2Rpdi5zdHlsZS5wYWRkaW5nID0gJzE1cHgnOyAvLyBqdXN0IHNvIGl0IGRvZXNuJ3QgbG9vayBicm9rZW5cblx0XHRXaW5kb3cuc2V0Q29udGVudChzdGF0dXNkaXYpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KHN0YXR1c2Rpdik7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHRUd2lua2xlLmJhdGNoZGVsZXRlLnBhZ2VzID0ge307XG5cdFx0Y29uc3Qgc3RhdGVsZW0gPSBuZXcgTW9yZWJpdHMuc3RhdHVzKHdpbmRvdy53Z1VMUygn5oqT5Y+W6aG16Z2i5YiX6KGoJywgJ+aKk+WPlumggemdouWIl+ihqCcpKTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg6L295Lit4oCmJywgJ+i8ieWFpeS4reKApicpLFxuXHRcdFx0cXVlcnksXG5cdFx0XHQoYXBpb2JqKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdFx0Y29uc3QgJHBhZ2VzID0gJCh4bWwpLmZpbmQoJ3BhZ2UnKS5maWx0ZXIoJzpub3QoW21pc3NpbmddKScpOyAvLyA6bm90KFtpbWFnZXJlcG9zaXRvcnk9XCJzaGFyZWRcIl0pXG5cdFx0XHRcdCRwYWdlcy5lYWNoKChfaW5kZXgsIHBhZ2UpID0+IHtcblx0XHRcdFx0XHRjb25zdCAkcGFnZSA9ICQocGFnZSk7XG5cdFx0XHRcdFx0Y29uc3QgbnMgPSAkcGFnZS5hdHRyKCducycpO1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gJHBhZ2UuYXR0cigndGl0bGUnKTtcblx0XHRcdFx0XHRjb25zdCBpc1JlZGlyID0gJHBhZ2UuYXR0cigncmVkaXJlY3QnKSA9PT0gJyc7XG5cdFx0XHRcdFx0Y29uc3QgJGVkaXRwcm90ID0gJHBhZ2UuZmluZCgncHJbdHlwZT1cImVkaXRcIl1bbGV2ZWw9XCJzeXNvcFwiXScpO1xuXHRcdFx0XHRcdGNvbnN0IGlzUHJvdGVjdGVkID0gJGVkaXRwcm90Lmxlbmd0aCA+IDA7XG5cdFx0XHRcdFx0Y29uc3Qgc2l6ZSA9ICRwYWdlLmZpbmQoJ3JldicpLmF0dHIoJ3NpemUnKTtcblx0XHRcdFx0XHRjb25zdCBtZXRhZGF0YSA9IFtdO1xuXHRcdFx0XHRcdGlmIChpc1JlZGlyKSB7XG5cdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKHdpbmRvdy53Z1VMUygn6YeN5a6a5ZCRJywgJ+mHjeaWsOWwjuWQkScpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGlzUHJvdGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WFqOS/neaKpO+8jCcsICflhajkv53orbfvvIwnKSArXG5cdFx0XHRcdFx0XHRcdFx0KCRlZGl0cHJvdC5hdHRyKCdleHBpcnknKSA9PT0gJ2luZmluaXR5J1xuXHRcdFx0XHRcdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+aXoOmZkOacnycsICfnhKHpmZDmnJ8nKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBgJHtuZXcgTW9yZWJpdHMuZGF0ZSgkZWRpdHByb3QuYXR0cignZXhwaXJ5JykpLmNhbGVuZGFyKCd1dGMnKX0gKFVUQylgKSArXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfov4fmnJ8nLCAn6YGO5pyfJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChucyA9PT0gJzYnKSB7XG5cdFx0XHRcdFx0XHQvLyBtaW1pYyB3aGF0IGRlbGltYWdlcyB1c2VkIHRvIHNob3cgZm9yIGZpbGVzXG5cdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S4iuS8oOiAhe+8micsICfkuIrlgrPogIXvvJonKSArICRwYWdlLmZpbmQoJ2lpJykuYXR0cigndXNlcicpLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+acgOWQjue8lui+ke+8micsICfmnIDlvoznt6jovK/vvJonKSArICRwYWdlLmZpbmQoJ3JldicpLmF0dHIoJ3VzZXInKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaChtdy5sYW5ndWFnZS5jb252ZXJ0TnVtYmVyKHNpemUpICsgd2luZG93LndnVUxTKCflrZfoioInLCAn5L2N5YWD57WEJykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRUd2lua2xlLmJhdGNoZGVsZXRlLnBhZ2VzW3RpdGxlXSA9IHtcblx0XHRcdFx0XHRcdGxhYmVsOiB0aXRsZSArIChtZXRhZGF0YS5sZW5ndGggPyBg77yIJHttZXRhZGF0YS5qb2luKCfvvIwnKX3vvIlgIDogJycpLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHRpdGxlLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHN0eWxlOiBpc1Byb3RlY3RlZCA/ICdjb2xvcjogI2YwMCcgOiAnJyxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgZm9ybV8gPSBhcGlvYmoucGFyYW1zLmZvcm07XG5cdFx0XHRcdGZvcm1fLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5b6F5Yig6Zmk6aG16Z2iJywgJ+W+heWIqumZpOmggemdoicpLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9ybV8uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhajpgIknLCAn5YWo6YG4JyksXG5cdFx0XHRcdFx0ZXZlbnQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdCQocmVzdWx0KVxuXHRcdFx0XHRcdFx0XHQuZmluZCgnaW5wdXRbbmFtZT1wYWdlc106bm90KDpjaGVja2VkKScpXG5cdFx0XHRcdFx0XHRcdC5lYWNoKChfLCBlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0ZS5jbGljaygpOyAvLyBjaGVjayBpdCwgYW5kIGludm9rZSBjbGljayBldmVudCBzbyB0aGF0IHN1Ymdyb3VwIGNhbiBiZSBzaG93blxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIENoZWNrIGFueSB1bmNoZWNrZWQgc3VicGFnZXMgdG9vXG5cdFx0XHRcdFx0XHQkYm9keS5maW5kKCdpbnB1dFtuYW1lPVwicGFnZXMuc3VicGFnZXNcIl0nKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvcm1fLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YWo5LiN6YCJJywgJ+WFqOS4jemBuCcpLFxuXHRcdFx0XHRcdGV2ZW50OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHQkKHJlc3VsdClcblx0XHRcdFx0XHRcdFx0LmZpbmQoJ2lucHV0W25hbWU9cGFnZXNdOmNoZWNrZWQnKVxuXHRcdFx0XHRcdFx0XHQuZWFjaCgoXywgZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGUuY2xpY2soKTsgLy8gdW5jaGVjayBpdCwgYW5kIGludm9rZSBjbGljayBldmVudCBzbyB0aGF0IHN1Ymdyb3VwIGNhbiBiZSBoaWRkZW5cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Zm9ybV8uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdG5hbWU6ICdwYWdlcycsXG5cdFx0XHRcdFx0aWQ6ICd0dy1kYmF0Y2gtcGFnZXMnLFxuXHRcdFx0XHRcdHNoaWZ0Q2xpY2tTdXBwb3J0OiB0cnVlLFxuXHRcdFx0XHRcdGxpc3Q6IE9iamVjdC52YWx1ZXMoVHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlcykubWFwKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvcm1fLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBmb3JtXy5yZW5kZXIoKTtcblx0XHRcdFx0YXBpb2JqLnBhcmFtcy5XaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhyZXN1bHQsICdwYWdlcycpKSB7XG5cdFx0XHRcdFx0Z2VuZXJhdGVBcnJvd0xpbmtzKGNoZWNrYm94KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHN0YXRlbGVtXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHRmb3JtLFxuXHRcdFx0V2luZG93LFxuXHRcdH07XG5cdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHR9O1xuXHRjb25zdCBnZW5lcmF0ZUFycm93TGlua3MgPSAoY2hlY2tib3gpID0+IHtcblx0XHRjb25zdCBsaW5rID0gTW9yZWJpdHMuaHRtbE5vZGUoJ2EnLCAnID4nKTtcblx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndHctZGJhdGNoLXBhZ2UtbGluaycpO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgbXcudXRpbC5nZXRVcmwoY2hlY2tib3gudmFsdWUpKTtcblx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuXHRcdGNoZWNrYm94Lm5leHRFbGVtZW50U2libGluZy5hcHBlbmQobGluayk7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2hkZWxldGUuZ2VuZXJhdGVOZXdQYWdlTGlzdCA9IChmb3JtKSA9PiB7XG5cdFx0Ly8gVXBkYXRlIHRoZSBsaXN0IG9mIGNoZWNrZWQgcGFnZXMgaW4gVHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlcyBvYmplY3Rcblx0XHRjb25zdCBlbGVtZW50cyA9IGZvcm0uZWxlbWVudHMucGFnZXM7XG5cdFx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBwYWdlc1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG5cdFx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUucGFnZXNbZWxlbWVudC52YWx1ZV0uY2hlY2tlZCA9IGVsZW1lbnQuY2hlY2tlZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZVxuXHRcdFx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlc1tlbGVtZW50cy52YWx1ZV0uY2hlY2tlZCA9IGVsZW1lbnRzLmNoZWNrZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdG5hbWU6ICdwYWdlcycsXG5cdFx0XHRpZDogJ3R3LWRiYXRjaC1wYWdlcycsXG5cdFx0XHRzaGlmdENsaWNrU3VwcG9ydDogdHJ1ZSxcblx0XHRcdGxpc3Q6IE9iamVjdC52YWx1ZXMoVHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlcykubWFwKChlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBlO1xuXHRcdFx0fSksXG5cdFx0fSkucmVuZGVyKCk7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2hkZWxldGUuZGVsZXRlcmVhc29ubGlzdCA9IFtcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfor7fpgInmi6knLCAn6KuL6YG45pOHJyksXG5cdFx0XHR2YWx1ZTogJycsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHQnRzbvvJrljp/kvZzogIXmj5Dor7fliKDpmaTmiJbmuIXnqbrpobXpnaLvvIzkuJTpobXpnaLljp/kvZzogIXku4XmnInkuIDkuronLFxuXHRcdFx0XHQnRzbvvJrljp/kvZzogIXmj5Doq4vliKrpmaTmiJbmuIXnqbrpoIHpnaLvvIzkuJTpoIHpnaLljp/kvZzogIXlg4XmnInkuIDkuronXG5cdFx0XHQpLFxuXHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J1tbTElCOkNTRCNHNnxHNl1d77ya5Y6f5L2c6ICF5o+Q6K+35Yig6Zmk5oiW5riF56m66aG16Z2i77yM5LiU6aG16Z2i5Y6f5L2c6ICF5LuF5pyJ5LiA5Lq6Jyxcblx0XHRcdFx0J1tbTElCOkNTRCNHNnxHNl1d77ya5Y6f5L2c6ICF5o+Q6KuL5Yiq6Zmk5oiW5riF56m66aCB6Z2i77yM5LiU6aCB6Z2i5Y6f5L2c6ICF5YOF5pyJ5LiA5Lq6J1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCdHOe+8muWtpOeri+mhtemdou+8jOavlOWmguayoeacieS4u+mhtemdoueahOiuqOiuuumhteOAgeaMh+WQkeepuumhtemdoueahOmHjeWumuWQkeetiScsXG5cdFx0XHRcdCdHOe+8muWtpOeri+mggemdou+8jOavlOWmguaykuacieS4u+mggemdoueahOiojuirlumggeOAgeaMh+WQkeepuumggemdoueahOmHjeaWsOWwjuWQkeetiSdcblx0XHRcdCksXG5cdFx0XHR2YWx1ZTogd2luZG93LndnVUxTKCdbW0xJQjpDU0QjRzl8RzldXe+8muWtpOeri+mhtemdoicsICdbW0xJQjpDU0QjRzl8RzldXe+8muWtpOeri+mggemdoicpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnUjHvvJrkuI3og73lj5HmjKXlrp7pmYXkvZznlKjnmoTph43lrprlkJHjgIInLCAnUjHvvJrkuI3og73nmbzmj67lr6bpmpvkvZznlKjnmoTph43lrprlkJHjgIInKSxcblx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCdbW0xJQjpDU0QjUjF8UjFdXe+8muS4jeiDveWPkeaMpeWunumZheS9nOeUqOeahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdCdbW0xJQjpDU0QjUjF8UjFdXe+8muS4jeiDveeZvOaPruWvpumam+S9nOeUqOeahOmHjeWumuWQkeOAgidcblx0XHRcdCksXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHQnUjLvvJrlkI3np7DkuI7lr7zlkJHnm67moIfku6PooajkuovniankuI3kuIDoh7TmiJbkuI3lrozlhajkuIDoh7TnmoTph43lrprlkJHjgIInLFxuXHRcdFx0XHQnUjLvvJrlkI3nqLHoiIflsI7lkJHnm67mqJnku6PooajkuovniankuI3kuIDoh7TmiJbkuI3lrozlhajkuIDoh7TnmoTph43lrprlkJHjgIInXG5cdFx0XHQpLFxuXHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J1tbTElCOkNTRCNSMnxSMl1d77ya5ZCN56ew5LiO5a+85ZCR55uu5qCH5Luj6KGo5LqL54mp5LiN5LiA6Ie05oiW5LiN5a6M5YWo5LiA6Ie055qE6YeN5a6a5ZCR44CCJyxcblx0XHRcdFx0J1tbTElCOkNTRCNSMnxSMl1d77ya5ZCN56ix6IiH5bCO5ZCR55uu5qiZ5Luj6KGo5LqL54mp5LiN5LiA6Ie05oiW5LiN5a6M5YWo5LiA6Ie055qE6YeN5a6a5ZCR44CCJ1xuXHRcdFx0KSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ0Y077ya5Y+v6KKr5pu/5Luj55qE5ZCI55CG5L2/55So5paH5Lu2JywgJ0Y077ya5Y+v6KKr5pu/5Luj55qE5ZCI55CG5L2/55So5qqU5qGIJyksXG5cdFx0XHR2YWx1ZTogd2luZG93LndnVUxTKFxuXHRcdFx0XHQnW1tMSUI6Q1NEI0Y0fEY0XV3vvJrlj6/ooqvmm7/ku6PnmoTlkIjnkIbkvb/nlKjmlofku7YnLFxuXHRcdFx0XHQnW1tMSUI6Q1NEI0Y0fEY0XV3vvJrlj6/ooqvmm7/ku6PnmoTlkIjnkIbkvb/nlKjmqpTmoYgnXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J0Y177ya5rKh5pyJ6KKr5p2h55uu5L2/55So55qE6Z2e6Ieq55Sx6JGX5L2c5p2D5paH5Lu244CB5rKh5pyJ5aGr5YaZ5Lu75L2V5ZCI55CG5L2/55So5L6d5o2u55qE6Z2e6Ieq55Sx6JGX5L2c5p2D5paH5Lu2Jyxcblx0XHRcdFx0J0Y177ya5rKS5pyJ6KKr5qKd55uu5L2/55So55qE6Z2e6Ieq55Sx54mI5qyK5qqU5qGI44CB5rKS5pyJ5aGr5a+r5Lu75L2V5ZCI55CG5L2/55So5L6d5pOa55qE6Z2e6Ieq55Sx54mI5qyK5qqU5qGIJ1xuXHRcdFx0KSxcblx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCdbW0xJQjpDU0QjRjV8RjVdXe+8muayoeacieiiq+adoeebruS9v+eUqOeahOmdnuiHqueUseiRl+S9nOadg+aWh+S7tuOAgeayoeacieWhq+WGmeS7u+S9leWQiOeQhuS9v+eUqOS+neaNrueahOmdnuiHqueUseiRl+S9nOadg+aWh+S7ticsXG5cdFx0XHRcdCdbW0xJQjpDU0QjRjV8RjVdXe+8muaykuacieiiq+aineebruS9v+eUqOeahOmdnuiHqueUseeJiOasiuaqlOahiOOAgeaykuacieWhq+Wvq+S7u+S9leWQiOeQhuS9v+eUqOS+neaTmueahOmdnuiHqueUseeJiOasiuaqlOahiCdcblx0XHRcdCksXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHQnTzHvvJrnlKjmiLfor7fmsYLliKDpmaToh6rlt7HnmoTnlKjmiLfpobXmiJblhbblrZDpobXpnaInLFxuXHRcdFx0XHQnTzHvvJrkvb/nlKjogIXoq4vmsYLliKrpmaToh6rlt7HnmoTkvb/nlKjogIXpoIHpnaLmiJblhbblrZDpoIHpnaInXG5cdFx0XHQpLFxuXHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0J1tbTElCOkNTRCNPMXxPMV1d77ya55So5oi36K+35rGC5Yig6Zmk6Ieq5bex55qEW1tIZWxwOueUqOaIt+mhtXznlKjmiLfpobVdXeaIluWFtuWtkOmhtemdouOAgicsXG5cdFx0XHRcdCdbW0xJQjpDU0QjTzF8TzFdXe+8muS9v+eUqOiAheiri+axguWIqumZpOiHquW3seeahFtbSGVscDrnlKjmiLfpobV85L2/55So6ICF6aCB6Z2iXV3miJblhbblrZDpoIHpnaLjgIInXG5cdFx0XHQpLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygnTzLvvJrnqbrnmoTliIbnsbvvvIjmsqHmnInmnaHnm67kuZ/msqHmnInlrZDliIbnsbvvvIknLCAnTzLvvJrnqbrnmoTliIbpoZ7vvIjmspLmnInmop3nm67kuZ/mspLmnInlrZDliIbpoZ7vvIknKSxcblx0XHRcdHZhbHVlOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCdbW0xJQjpDU0QjTzJ8TzJdXe+8muepuueahOWIhuexu++8iOayoeacieadoeebruS5n+ayoeacieWtkOWIhuexu++8ieOAgicsXG5cdFx0XHRcdCdbW0xJQjpDU0QjTzJ8TzJdXe+8muepuueahOWIhumhnu+8iOaykuacieaineebruS5n+aykuacieWtkOWIhumhnu+8ieOAgidcblx0XHRcdCksXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCdPM++8muW6n+W8g+iNieeovycsICdPM++8muW7ouajhOiNieeovycpLFxuXHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUygnW1tMSUI6Q1NEI08zfE8zXV3vvJrlup/lvIPojYnnqL/jgIInLCAnW1tMSUI6Q1NEI08zfE8zXV3vvJrlu6Lmo4TojYnnqL/jgIInKSxcblx0XHR9LFxuXHRdO1xuXHRUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrLmNoYW5nZV9jb21tb25fcmVhc29uID0gKGUpID0+IHtcblx0XHRpZiAoZS50YXJnZXQuZm9ybS5yZWFzb24udmFsdWUgIT09ICcnKSB7XG5cdFx0XHRlLnRhcmdldC5mb3JtLnJlYXNvbi52YWx1ZSA9IE1vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihlLnRhcmdldC5mb3JtLnJlYXNvbi52YWx1ZSk7XG5cdFx0fVxuXHRcdGUudGFyZ2V0LmZvcm0ucmVhc29uLnZhbHVlICs9IGUudGFyZ2V0LnZhbHVlO1xuXHRcdGUudGFyZ2V0LnZhbHVlID0gJyc7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2hkZWxldGUuY2FsbGJhY2sudG9nZ2xlU3VicGFnZXMgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHtmb3JtfSA9IGUudGFyZ2V0O1xuXHRcdGxldCBuZXdQYWdlTGlzdDtcblx0XHRpZiAoZS50YXJnZXQuY2hlY2tlZCkge1xuXHRcdFx0Zm9ybS5kZWxldGVfc3VicGFnZV9yZWRpcmVjdHMuY2hlY2tlZCA9IGZvcm0uZGVsZXRlX3JlZGlyZWN0cy5jaGVja2VkO1xuXHRcdFx0Zm9ybS5kZWxldGVfc3VicGFnZV90YWxrcy5jaGVja2VkID0gZm9ybS5kZWxldGVfdGFsay5jaGVja2VkO1xuXHRcdFx0Zm9ybS51bmxpbmtfc3VicGFnZXMuY2hlY2tlZCA9IGZvcm0udW5saW5rX3BhZ2UuY2hlY2tlZDtcblx0XHRcdC8vIElmIGxpc3RzIG9mIHN1YnBhZ2VzIHdlcmUgYWxyZWFkeSBsb2FkZWQgb25jZSwgdGhleSBhcmVcblx0XHRcdC8vIGF2YWlsYWJsZSB3aXRob3V0IHVzZSBvZiBhbnkgQVBJIGNhbGxzXG5cdFx0XHRpZiAoc3VicGFnZXNMb2FkZWQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBUd2lua2xlLmJhdGNoZGVsZXRlLnBhZ2VzKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IGJhY2sgdGhlIHN1Ymdyb3VwIGZyb20gc3ViZ3JvdXBfLCB3aGVyZSB3ZSBzYXZlZCBpdFxuXHRcdFx0XHRcdGlmIChlbC5zdWJncm91cCA9PT0gbnVsbCAmJiBlbC5zdWJncm91cF8pIHtcblx0XHRcdFx0XHRcdGVsLnN1Ymdyb3VwID0gZWwuc3ViZ3JvdXBfO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdQYWdlTGlzdCA9IFR3aW5rbGUuYmF0Y2hkZWxldGUuZ2VuZXJhdGVOZXdQYWdlTGlzdChmb3JtKTtcblx0XHRcdFx0JGJvZHkuZmluZCgnI3R3LWRiYXRjaC1wYWdlcycpLnJlcGxhY2VXaXRoKG5ld1BhZ2VMaXN0KTtcblx0XHRcdFx0Zm9yIChjb25zdCBjaGVja2JveCBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMobmV3UGFnZUxpc3QsICdwYWdlcycpKSB7XG5cdFx0XHRcdFx0Z2VuZXJhdGVBcnJvd0xpbmtzKGNoZWNrYm94KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhuZXdQYWdlTGlzdCwgJ3BhZ2VzLnN1YnBhZ2VzJykpIHtcblx0XHRcdFx0XHRnZW5lcmF0ZUFycm93TGlua3MoY2hlY2tib3gpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFByb2NlZWQgd2l0aCBBUEkgY2FsbHMgdG8gZ2V0IGxpc3Qgb2Ygc3VicGFnZXNcblx0XHRcdGNvbnN0IGxvYWRpbmdUZXh0ID0gYDxzdHJvbmcgaWQ9XCJkYmF0Y2gtc3VicGFnZS1sb2FkaW5nXCI+JHt3aW5kb3cud2dVTFMoJ+WKoOi9veS4rS4uLicsICfovInlhaXkuK0uLi4nKX08L3N0cm9uZz5gO1xuXHRcdFx0JChlLnRhcmdldCkuYWZ0ZXIobG9hZGluZ1RleHQpO1xuXHRcdFx0Y29uc3QgcGFnZXMgPSAkKGZvcm0ucGFnZXMpXG5cdFx0XHRcdC5tYXAoKF9pLCBlbCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbC52YWx1ZTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmdldCgpO1xuXHRcdFx0Y29uc3Qgc3VicGFnZUxpc3RlciA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbigpO1xuXHRcdFx0c3VicGFnZUxpc3Rlci5zZXRPcHRpb24oJ2NodW5rU2l6ZScsIFR3aW5rbGUuZ2V0UHJlZignYmF0Y2hDaHVua3MnKSk7XG5cdFx0XHRzdWJwYWdlTGlzdGVyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRcdHN1YnBhZ2VMaXN0ZXIucnVuKFxuXHRcdFx0XHQocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBwYWdlVGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChwYWdlTmFtZSk7XG5cdFx0XHRcdFx0Ly8gTm8gbmVlZCB0byBsb29rIGZvciBzdWJwYWdlcyBpbiBtYWluL2ZpbGUvbWVkaWF3aWtpIHNwYWNlXG5cdFx0XHRcdFx0aWYgKFswLCA2LCA4XS5pbmNsdWRlcyhwYWdlVGl0bGUubmFtZXNwYWNlKSkge1xuXHRcdFx0XHRcdFx0c3VicGFnZUxpc3Rlci53b3JrZXJTdWNjZXNzKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmraPlnKjojrflj5YgJywgJ+ato+WcqOWPluW+lyAnKSArIHBhZ2VOYW1lICsgd2luZG93LndnVUxTKCcg55qE5a2Q6aG16Z2iJywgJyDnmoTlrZDpoIHpnaInKSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdFx0XHRwcm9wOiAncmV2aXNpb25zfGluZm98aW1hZ2VpbmZvJyxcblx0XHRcdFx0XHRcdFx0Z2VuZXJhdG9yOiAnYWxscGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRydnByb3A6ICdzaXplJyxcblx0XHRcdFx0XHRcdFx0aW5wcm9wOiAncHJvdGVjdGlvbicsXG5cdFx0XHRcdFx0XHRcdGdhcHByZWZpeDogYCR7cGFnZVRpdGxlLnRpdGxlfS9gLFxuXHRcdFx0XHRcdFx0XHRnYXBuYW1lc3BhY2U6IHBhZ2VUaXRsZS5uYW1lc3BhY2UsXG5cdFx0XHRcdFx0XHRcdGdhcGxpbWl0OiAnbWF4Jyxcblx0XHRcdFx0XHRcdFx0cGFnZU5hbWVGdWxsOiBwYWdlTmFtZSwgLy8gTm90IHVzZWQgYnkgQVBJLCBidXQgYWRkZWQgZm9yIGFjY2VzcyBpbiBvblN1Y2Nlc3MoKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdChhcGlvYmopID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeG1sID0gYXBpb2JqLnJlc3BvbnNlWE1MO1xuXHRcdFx0XHRcdFx0XHRjb25zdCAkcGFnZXMgPSAkKHhtbCkuZmluZCgncGFnZScpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJwYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0XHQkcGFnZXMuZWFjaCgoX2luZGV4LCBwYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgJHBhZ2UgPSAkKHBhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5zID0gJHBhZ2UuYXR0cignbnMnKTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aXRsZSA9ICRwYWdlLmF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNSZWRpciA9ICRwYWdlLmF0dHIoJ3JlZGlyZWN0JykgPT09ICcnO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0ICRlZGl0cHJvdCA9ICRwYWdlLmZpbmQoJ3ByW3R5cGU9XCJlZGl0XCJdW2xldmVsPVwic3lzb3BcIl0nKTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1Byb3RlY3RlZCA9ICRlZGl0cHJvdC5sZW5ndGggPiAwO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNpemUgPSAkcGFnZS5maW5kKCdyZXYnKS5hdHRyKCdzaXplJyk7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbWV0YWRhdGEgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXNSZWRpcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaCgncmVkaXJlY3QnKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzUHJvdGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WFqOS/neaKpO+8jCcsICflhajkv53orbfvvIwnKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCRlZGl0cHJvdC5hdHRyKCdleHBpcnknKSA9PT0gJ2luZmluaXR5J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+aXoOmZkOacnycsICfnhKHpmZDmnJ8nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBgJHtuZXcgTW9yZWJpdHMuZGF0ZSgkZWRpdHByb3QuYXR0cignZXhwaXJ5JykpLmNhbGVuZGFyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1dGMnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9IChVVEMpYCkgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6L+H5pyfJywgJ+mBjuacnycpXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRpZiAobnMgPT09ICc2Jykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gbWltaWMgd2hhdCBkZWxpbWFnZXMgdXNlZCB0byBzaG93IGZvciBmaWxlc1xuXHRcdFx0XHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaChcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuIrkvKDogIXvvJonLCAn5LiK5YKz6ICF77yaJykgKyAkcGFnZS5maW5kKCdpaScpLmF0dHIoJ3VzZXInKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmnIDlkI7nvJbovpHvvJonLCAn5pyA5b6M57eo6Lyv77yaJykgKyAkcGFnZS5maW5kKCdyZXYnKS5hdHRyKCd1c2VyJylcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFkYXRhLnB1c2gobXcubGFuZ3VhZ2UuY29udmVydE51bWJlcihzaXplKSArIHdpbmRvdy53Z1VMUygn5a2X6IqCJywgJ+S9jeWFg+e1hCcpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0c3VicGFnZUxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogdGl0bGUgKyAobWV0YWRhdGEubGVuZ3RoID8gYCAoJHttZXRhZGF0YS5qb2luKCc7ICcpfSlgIDogJycpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlOiBpc1Byb3RlY3RlZCA/ICdjb2xvcjogI2YwMCcgOiAnJyxcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGlmIChzdWJwYWdlTGlzdC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYWdlTmFtZV8gPSBhcGlvYmoucXVlcnkucGFnZU5hbWVGdWxsO1xuXHRcdFx0XHRcdFx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUucGFnZXNbcGFnZU5hbWVfXS5zdWJncm91cCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdjaGVja2JveCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiAnc3VicGFnZXMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiAnZGJhdGNoLXN1YnBhZ2VzJyxcblx0XHRcdFx0XHRcdFx0XHRcdHNoaWZ0Q2xpY2tTdXBwb3J0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdDogc3VicGFnZUxpc3QsXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRzdWJwYWdlTGlzdGVyLndvcmtlclN1Y2Nlc3MoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRudWxsIC8qIHN0YXR1c0VsZW1lbnQgKi8sXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHN1YnBhZ2VMaXN0ZXIud29ya2VyRmFpbHVyZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gTGlzdCAnZW0gb24gdGhlIGludGVyZmFjZVxuXHRcdFx0XHRcdG5ld1BhZ2VMaXN0ID0gVHdpbmtsZS5iYXRjaGRlbGV0ZS5nZW5lcmF0ZU5ld1BhZ2VMaXN0KGZvcm0pO1xuXHRcdFx0XHRcdCRib2R5LmZpbmQoJyN0dy1kYmF0Y2gtcGFnZXMnKS5yZXBsYWNlV2l0aChuZXdQYWdlTGlzdCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGVja2JveCBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMobmV3UGFnZUxpc3QsICdwYWdlcycpKSB7XG5cdFx0XHRcdFx0XHRnZW5lcmF0ZUFycm93TGlua3MoY2hlY2tib3gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNoZWNrYm94IG9mIE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhuZXdQYWdlTGlzdCwgJ3BhZ2VzLnN1YnBhZ2VzJykpIHtcblx0XHRcdFx0XHRcdGdlbmVyYXRlQXJyb3dMaW5rcyhjaGVja2JveCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN1YnBhZ2VzTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHQvLyBSZW1vdmUgXCJMb2FkaW5nLi4uIFwiIHRleHRcblx0XHRcdFx0XHQkYm9keS5maW5kKCcjZGJhdGNoLXN1YnBhZ2UtbG9hZGluZycpLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoIWUudGFyZ2V0LmNoZWNrZWQpIHtcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgVHdpbmtsZS5iYXRjaGRlbGV0ZS5wYWdlcykge1xuXHRcdFx0XHRpZiAoZWwuc3ViZ3JvdXApIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgc3ViZ3JvdXAgYWZ0ZXIgc2F2aW5nIGl0cyBjb250ZW50cyBpbiBzdWJncm91cF9cblx0XHRcdFx0XHQvLyBzbyB0aGF0IGl0IGNhbiBiZSByZXRyaWV2ZWQgZWFzaWx5IGlmIHVzZXIgZGVjaWRlcyB0b1xuXHRcdFx0XHRcdC8vIGRlbGV0ZSB0aGUgc3VicGFnZXMgYWdhaW5cblx0XHRcdFx0XHRlbC5zdWJncm91cF8gPSBlbC5zdWJncm91cDtcblx0XHRcdFx0XHRlbC5zdWJncm91cCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG5ld1BhZ2VMaXN0ID0gVHdpbmtsZS5iYXRjaGRlbGV0ZS5nZW5lcmF0ZU5ld1BhZ2VMaXN0KGZvcm0pO1xuXHRcdFx0JGJvZHkuZmluZCgnI3R3LWRiYXRjaC1wYWdlcycpLnJlcGxhY2VXaXRoKG5ld1BhZ2VMaXN0KTtcblx0XHRcdGZvciAoY29uc3QgY2hlY2tib3ggb2YgTW9yZWJpdHMucXVpY2tGb3JtLmdldEVsZW1lbnRzKG5ld1BhZ2VMaXN0LCAncGFnZXMnKSkge1xuXHRcdFx0XHRnZW5lcmF0ZUFycm93TGlua3MoY2hlY2tib3gpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFjay5ldmFsdWF0ZSA9IChldmVudCkgPT4ge1xuXHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSA9IHdpbmRvdy53Z1VMUygn5om56YeP5Yig6Zmk5bey5a6M5oiQJywgJ+aJueasoeWIqumZpOW3suWujOaIkCcpO1xuXHRcdGNvbnN0IGZvcm0gPSBldmVudC50YXJnZXQ7XG5cdFx0Y29uc3QgbnVtUHJvdGVjdGVkID0gJChNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMoZm9ybSwgJ3BhZ2VzJykpLmZpbHRlcigoX2luZGV4LCBlbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudC5jaGVja2VkICYmIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLnN0eWxlLmNvbG9yID09PSAncmVkJztcblx0XHR9KS5sZW5ndGg7XG5cdFx0aWYgKFxuXHRcdFx0bnVtUHJvdGVjdGVkID4gMCAmJlxuXHRcdFx0IWNvbmZpcm0oXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5oKo5q2j6KaB5Yig6ZmkICcsICfmgqjmraPopoHliKrpmaQgJykgK1xuXHRcdFx0XHRcdG13Lmxhbmd1YWdlLmNvbnZlcnROdW1iZXIobnVtUHJvdGVjdGVkKSArXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCcg5Liq5YWo5L+d5oqk6aG16Z2i77yM5oKo56Gu5a6a5ZCX77yfJywgJyDlgIvlhajkv53orbfpoIHpnaLvvIzmgqjnorrlrprll47vvJ8nKVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwYWdlcyA9IGZvcm0uZ2V0Q2hlY2tlZCgncGFnZXMnKTtcblx0XHRjb25zdCBzdWJwYWdlcyA9IGZvcm0uZ2V0Q2hlY2tlZCgncGFnZXMuc3VicGFnZXMnKTtcblx0XHRjb25zdCByZWFzb24gPSBmb3JtLnJlYXNvbi52YWx1ZTtcblx0XHRjb25zdCBkZWxldGVfcGFnZSA9IGZvcm0uZGVsZXRlX3BhZ2UuY2hlY2tlZDtcblx0XHRsZXQgZGVsZXRlX3RhbGs7XG5cdFx0bGV0IGRlbGV0ZV9yZWRpcmVjdHM7XG5cdFx0bGV0IGRlbGV0ZV9zdWJwYWdlcztcblx0XHRsZXQgZGVsZXRlX3N1YnBhZ2VfcmVkaXJlY3RzO1xuXHRcdGxldCBkZWxldGVfc3VicGFnZV90YWxrcztcblx0XHRsZXQgdW5saW5rX3N1YnBhZ2VzO1xuXHRcdGlmIChkZWxldGVfcGFnZSkge1xuXHRcdFx0ZGVsZXRlX3RhbGsgPSBmb3JtLmRlbGV0ZV90YWxrLmNoZWNrZWQ7XG5cdFx0XHRkZWxldGVfcmVkaXJlY3RzID0gZm9ybS5kZWxldGVfcmVkaXJlY3RzLmNoZWNrZWQ7XG5cdFx0XHRkZWxldGVfc3VicGFnZXMgPSBmb3JtLmRlbGV0ZV9zdWJwYWdlcy5jaGVja2VkO1xuXHRcdFx0aWYgKGRlbGV0ZV9zdWJwYWdlcykge1xuXHRcdFx0XHRkZWxldGVfc3VicGFnZV9yZWRpcmVjdHMgPSBmb3JtLmRlbGV0ZV9zdWJwYWdlX3JlZGlyZWN0cy5jaGVja2VkO1xuXHRcdFx0XHRkZWxldGVfc3VicGFnZV90YWxrcyA9IGZvcm0uZGVsZXRlX3N1YnBhZ2VfdGFsa3MuY2hlY2tlZDtcblx0XHRcdFx0dW5saW5rX3N1YnBhZ2VzID0gZm9ybS51bmxpbmtfc3VicGFnZXMuY2hlY2tlZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdW5saW5rX3BhZ2UgPSBmb3JtLnVubGlua19wYWdlLmNoZWNrZWQ7XG5cdFx0Y29uc3QgdW5saW5rX2ZpbGUgPSBmb3JtLnVubGlua19maWxlLmNoZWNrZWQ7XG5cdFx0aWYgKCFyZWFzb24pIHtcblx0XHRcdG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+aCqOmcgOimgee7meWHuuS4gOS4queQhueUsScsICfmgqjpnIDopoHntablh7rkuIDlgIvnkIbnlLEnKSwge1xuXHRcdFx0XHR0eXBlOiAnd2FybicsXG5cdFx0XHRcdHRhZzogJ3R3aW5rbGViYXRjaGRlbGV0ZScsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRpZiAoIXBhZ2VzKSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3IoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn6ZSZ6K+vJywgJ+mMr+iqpCcpLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ayoeacieimgeWIoOmZpOeahOWGheWuue+8jOS4reatoicsICfmspLmnInopoHliKrpmaTnmoTlhaflrrnvvIzkuK3mraInKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcGFnZURlbGV0ZXIgPSBuZXcgTW9yZWJpdHMuYmF0Y2hPcGVyYXRpb24oXG5cdFx0XHRkZWxldGVfcGFnZVxuXHRcdFx0XHQ/IHdpbmRvdy53Z1VMUygn5q2j5Zyo5Yig6Zmk6aG16Z2iJywgJ+ato+WcqOWIqumZpOmggemdoicpXG5cdFx0XHRcdDogd2luZG93LndnVUxTKCfmraPlnKjlkK/liqjopoHmsYLnmoTku7vliqEnLCAn5q2j5Zyo5ZWf5YuV6KaB5rGC55qE5Lu75YuZJylcblx0XHQpO1xuXHRcdHBhZ2VEZWxldGVyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHQvLyB3ZSBvbmx5IG5lZWQgdGhlIGluaXRpYWwgc3RhdHVzIGxpbmVzIGlmIHdlJ3JlIGRlbGV0aW5nIHRoZSBwYWdlcyBpbiB0aGUgcGFnZXMgYXJyYXlcblx0XHRwYWdlRGVsZXRlci5zZXRPcHRpb24oJ3ByZXNlcnZlSW5kaXZpZHVhbFN0YXR1c0xpbmVzJywgZGVsZXRlX3BhZ2UpO1xuXHRcdHBhZ2VEZWxldGVyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRwYWdlRGVsZXRlci5ydW4oXG5cdFx0XHQocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRcdHBhZ2U6IHBhZ2VOYW1lLFxuXHRcdFx0XHRcdGRlbGV0ZV9wYWdlLFxuXHRcdFx0XHRcdGRlbGV0ZV90YWxrLFxuXHRcdFx0XHRcdGRlbGV0ZV9yZWRpcmVjdHMsXG5cdFx0XHRcdFx0dW5saW5rX3BhZ2UsXG5cdFx0XHRcdFx0dW5saW5rX2ZpbGU6IHVubGlua19maWxlICYmIG5ldyBSZWdFeHAoYF4ke01vcmViaXRzLm5hbWVzcGFjZVJlZ2V4KDYpfTpgLCAnaScpLnRlc3QocGFnZU5hbWUpLFxuXHRcdFx0XHRcdHJlYXNvbixcblx0XHRcdFx0XHRwYWdlRGVsZXRlcixcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOWIoOmZpOmhtemdoiAnLCAn5q2j5Zyo5Yiq6Zmk6aCB6Z2iICcpICsgcGFnZU5hbWVcblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHRpZiAoZGVsZXRlX3BhZ2UpIHtcblx0XHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0RWRpdFN1bW1hcnkoYCR7cmVhc29ufe+8iOaJuemHj++8iWApO1xuXHRcdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnN1cHByZXNzUHJvdGVjdFdhcm5pbmcoKTtcblx0XHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UuZGVsZXRlUGFnZShUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrcy5kb0V4dHJhcywgcGFnZURlbGV0ZXIud29ya2VyRmFpbHVyZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFja3MuZG9FeHRyYXMoeXNhcmNoaXZlc19wYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKGRlbGV0ZV9zdWJwYWdlcykge1xuXHRcdFx0XHRcdGNvbnN0IHN1YnBhZ2VEZWxldGVyID0gbmV3IE1vcmViaXRzLmJhdGNoT3BlcmF0aW9uKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmraPlnKjliKDpmaTlrZDpobXpnaInLCAn5q2j5Zyo5Yiq6Zmk5a2Q6aCB6Z2iJylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHN1YnBhZ2VEZWxldGVyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHRcdFx0XHRzdWJwYWdlRGVsZXRlci5zZXRPcHRpb24oJ3ByZXNlcnZlSW5kaXZpZHVhbFN0YXR1c0xpbmVzJywgdHJ1ZSk7XG5cdFx0XHRcdFx0c3VicGFnZURlbGV0ZXIuc2V0UGFnZUxpc3Qoc3VicGFnZXMpO1xuXHRcdFx0XHRcdHN1YnBhZ2VEZWxldGVyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0cGFnZTogcGFnZU5hbWUsXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZV9wYWdlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRkZWxldGVfdGFsazogZGVsZXRlX3N1YnBhZ2VfdGFsa3MsXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZV9yZWRpcmVjdHM6IGRlbGV0ZV9zdWJwYWdlX3JlZGlyZWN0cyxcblx0XHRcdFx0XHRcdFx0dW5saW5rX3BhZ2U6IHVubGlua19zdWJwYWdlcyxcblx0XHRcdFx0XHRcdFx0dW5saW5rX2ZpbGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRyZWFzb24sXG5cdFx0XHRcdFx0XHRcdHBhZ2VEZWxldGVyOiBzdWJwYWdlRGVsZXRlcixcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmraPlnKjliKDpmaTlrZDpobXpnaIgJywgJ+ato+WcqOWIqumZpOWtkOmggemdoiAnKSArIHBhZ2VOYW1lXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEVkaXRTdW1tYXJ5KGAke3JlYXNvbn3vvIjmibnph4/vvIlgKTtcblx0XHRcdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc3VwcHJlc3NQcm90ZWN0V2FybmluZygpO1xuXHRcdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLmRlbGV0ZVBhZ2UoVHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFja3MuZG9FeHRyYXMsIHBhZ2VEZWxldGVyLndvcmtlckZhaWx1cmUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fTtcblx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFja3MgPSB7XG5cdFx0Ly8gdGhpcyBzdHVwaWQgcGFyYW1ldGVyIG5hbWUgaXMgYSB0ZW1wb3JhcnkgdGhpbmcgdW50aWwgSSBpbXBsZW1lbnQgYW4gb3ZlcmhhdWxcblx0XHQvLyBvZiBNb3JlYml0cy53aWtpLiogY2FsbGJhY2sgcGFyYW1ldGVyc1xuXHRcdGRvRXh0cmFzOiAodGhpbmdXaXRoUGFyYW1ldGVycykgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gdGhpbmdXaXRoUGFyYW1ldGVycy5wYXJlbnRcblx0XHRcdFx0PyB0aGluZ1dpdGhQYXJhbWV0ZXJzLnBhcmVudC5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKVxuXHRcdFx0XHQ6IHRoaW5nV2l0aFBhcmFtZXRlcnMuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHQvLyB0aGUgaW5pdGlhbCBiYXRjaCBvcGVyYXRpb24ncyBqb2IgaXMgdG8gZGVsZXRlIHRoZSBwYWdlLCBhbmQgdGhhdCBoYXNcblx0XHRcdC8vIHN1Y2NlZWRlZCBieSBub3dcblx0XHRcdHBhcmFtcy5wYWdlRGVsZXRlci53b3JrZXJTdWNjZXNzKHRoaW5nV2l0aFBhcmFtZXRlcnMpO1xuXHRcdFx0bGV0IHF1ZXJ5O1xuXHRcdFx0bGV0IHlzYXJjaGl2ZXNfYXBpO1xuXHRcdFx0aWYgKHBhcmFtcy51bmxpbmtfcGFnZSkge1xuXHRcdFx0XHRUd2lua2xlLmJhdGNoZGVsZXRlLnVubGlua0NhY2hlID0ge307XG5cdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRsaXN0OiAnYmFja2xpbmtzJyxcblx0XHRcdFx0XHRibGZpbHRlcnJlZGlyOiAnbm9ucmVkaXJlY3RzJyxcblx0XHRcdFx0XHRibG5hbWVzcGFjZTogWzBdLFxuXHRcdFx0XHRcdGJsdGl0bGU6IHBhcmFtcy5wYWdlLFxuXHRcdFx0XHRcdGJsbGltaXQ6ICdtYXgnLCAvLyA1MDAgaXMgbWF4IGZvciBub3JtYWwgdXNlcnMsIDUwMDAgZm9yIGJvdHMgYW5kIHN5c29wc1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo6I635Y+W6ZO+5YWlJywgJ+ato+WcqOWPluW+l+mAo+WFpScpLFxuXHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUuY2FsbGJhY2tzLnVubGlua0JhY2tsaW5rc01haW5cblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19hcGkucGFyYW1zID0gcGFyYW1zO1xuXHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1zLnVubGlua19maWxlKSB7XG5cdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRsaXN0OiAnaW1hZ2V1c2FnZScsXG5cdFx0XHRcdFx0aXV0aXRsZTogcGFyYW1zLnBhZ2UsXG5cdFx0XHRcdFx0aXVsaW1pdDogJ21heCcsIC8vIDUwMCBpcyBtYXggZm9yIG5vcm1hbCB1c2VycywgNTAwMCBmb3IgYm90cyBhbmQgc3lzb3BzXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0eXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmraPlnKjojrflj5bmlofku7bpk77lhaUnLCAn5q2j5Zyo5Y+W5b6X5qqU5qGI6YCj5YWlJyksXG5cdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0VHdpbmtsZS5iYXRjaGRlbGV0ZS5jYWxsYmFja3MudW5saW5rSW1hZ2VJbnN0YW5jZXNNYWluXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHBhcmFtcztcblx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy5kZWxldGVfcGFnZSkge1xuXHRcdFx0XHRpZiAocGFyYW1zLmRlbGV0ZV9yZWRpcmVjdHMpIHtcblx0XHRcdFx0XHRxdWVyeSA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHRpdGxlczogcGFyYW1zLnBhZ2UsXG5cdFx0XHRcdFx0XHRwcm9wOiAncmVkaXJlY3RzJyxcblx0XHRcdFx0XHRcdHJkbGltaXQ6ICdtYXgnLCAvLyA1MDAgaXMgbWF4IGZvciBub3JtYWwgdXNlcnMsIDUwMDAgZm9yIGJvdHMgYW5kIHN5c29wc1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo6I635Y+W6YeN5a6a5ZCRJywgJ+ato+WcqOWPluW+l+mHjeaWsOWwjuWQkScpLFxuXHRcdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0XHRUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrcy5kZWxldGVSZWRpcmVjdHNNYWluXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwYXJhbXMuZGVsZXRlX3RhbGspIHtcblx0XHRcdFx0XHRjb25zdCBwYWdlVGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChwYXJhbXMucGFnZSk7XG5cdFx0XHRcdFx0aWYgKHBhZ2VUaXRsZSAmJiBwYWdlVGl0bGUubmFtZXNwYWNlICUgMiA9PT0gMCAmJiBwYWdlVGl0bGUubmFtZXNwYWNlICE9PSAyKSB7XG5cdFx0XHRcdFx0XHRwYWdlVGl0bGUubmFtZXNwYWNlKys7IC8vIG5vdyBwYWdlVGl0bGUgaXMgdGhlIHRhbGsgcGFnZSB0aXRsZSFcblx0XHRcdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0XHRcdHRpdGxlczogcGFnZVRpdGxlLnRvVGV4dCgpLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHlzYXJjaGl2ZXNfYXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOajgOafpeiuqOiuuumhtemdouaYr+WQpuWtmOWcqCcsICfmraPlnKjmqqLmn6XoqI7oq5bpoIHpnaLmmK/lkKblrZjlnKgnKSxcblx0XHRcdFx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUuY2FsbGJhY2tzLmRlbGV0ZVRhbGtcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMudGFsa1BhZ2UgPSBwYWdlVGl0bGUudG9UZXh0KCk7XG5cdFx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkZWxldGVSZWRpcmVjdHNNYWluOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB4bWwgPSBhcGlvYmoucmVzcG9uc2VYTUw7XG5cdFx0XHRjb25zdCBwYWdlcyA9ICQoeG1sKVxuXHRcdFx0XHQuZmluZCgncmQnKVxuXHRcdFx0XHQubWFwKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJChlbGVtZW50KS5hdHRyKCd0aXRsZScpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZ2V0KCk7XG5cdFx0XHRpZiAoIXBhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCByZWRpcmVjdERlbGV0ZXIgPSBuZXcgTW9yZWJpdHMuYmF0Y2hPcGVyYXRpb24oXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5Yig6Zmk5YiwICcsICfmraPlnKjliKrpmaTliLAgJykgK1xuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMucGFnZSArXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCcg55qE6YeN5a6a5ZCRJywgJyDnmoTph43mlrDlsI7lkJEnKVxuXHRcdFx0KTtcblx0XHRcdHJlZGlyZWN0RGVsZXRlci5zZXRPcHRpb24oJ2NodW5rU2l6ZScsIFR3aW5rbGUuZ2V0UHJlZignYmF0Y2hDaHVua3MnKSk7XG5cdFx0XHRyZWRpcmVjdERlbGV0ZXIuc2V0UGFnZUxpc3QocGFnZXMpO1xuXHRcdFx0cmVkaXJlY3REZWxldGVyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOWIoOmZpCAnLCAn5q2j5Zyo5Yiq6ZmkICcpICsgcGFnZU5hbWVcblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHRcdGBbW0xJQjpDU0QjRzl8RzldXTogJHt3aW5kb3cud2dVTFMoJ+aMh+WQkeW3suWIoOmhtemdouKAnCcsICfmjIflkJHlt7LliKrpoIHpnaLjgIwnKX0ke2FwaW9iai5wYXJhbXMucGFnZX0ke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfigJ3nmoTph43lrprlkJEnLFxuXHRcdFx0XHRcdFx0J+OAjeeahOmHjeaWsOWwjuWQkSdcblx0XHRcdFx0XHQpfWBcblx0XHRcdFx0KTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLmRlbGV0ZVBhZ2UocmVkaXJlY3REZWxldGVyLndvcmtlclN1Y2Nlc3MsIHJlZGlyZWN0RGVsZXRlci53b3JrZXJGYWlsdXJlKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0ZGVsZXRlVGFsazogKGFwaW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgeG1sID0gYXBpb2JqLnJlc3BvbnNlWE1MO1xuXHRcdFx0Y29uc3QgZXhpc3RzID0gJCh4bWwpLmZpbmQoJ3BhZ2U6bm90KFttaXNzaW5nXSknKS5sZW5ndGggPiAwO1xuXHRcdFx0aWYgKCFleGlzdHMpIHtcblx0XHRcdFx0Ly8gbm8gdGFsayBwYWdlOyBmb3JnZXQgYWJvdXQgaXRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdGFwaW9iai5wYXJhbXMudGFsa1BhZ2UsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5Yig6Zmk6aG16Z2iICcsICfmraPlnKjliKrpmaTpoIHpnaIgJykgK1xuXHRcdFx0XHRcdGFwaW9iai5wYXJhbXMucGFnZSArXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCcg55qE6K6o6K666aG1JywgJyDnmoToqI7oq5bpoIEnKVxuXHRcdFx0KTtcblx0XHRcdHBhZ2Uuc2V0RWRpdFN1bW1hcnkoXG5cdFx0XHRcdGBbW0xJQjpDU0QjRzl8RzldXTogJHt3aW5kb3cud2dVTFMoJ+W3suWIoOmhtemdouKAnCcsICflt7LliKrpoIHpnaLjgIwnKX0ke2FwaW9iai5wYXJhbXMucGFnZX0ke3dpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHQn4oCd55qEW1tIZWxwOuiuqOiuuumhtXzorqjorrrpobVdXScsXG5cdFx0XHRcdFx0J+OAjeeahFtbSGVscDroqI7oq5bpoIF86KiO6KuW6aCBXV0nXG5cdFx0XHRcdCl9YFxuXHRcdFx0KTtcblx0XHRcdHBhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZS5kZWxldGVQYWdlKCk7XG5cdFx0fSxcblx0XHR1bmxpbmtCYWNrbGlua3NNYWluOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB4bWwgPSBhcGlvYmoucmVzcG9uc2VYTUw7XG5cdFx0XHRjb25zdCBwYWdlcyA9ICQoeG1sKVxuXHRcdFx0XHQuZmluZCgnYmwnKVxuXHRcdFx0XHQubWFwKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJChlbGVtZW50KS5hdHRyKCd0aXRsZScpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZ2V0KCk7XG5cdFx0XHRpZiAoIXBhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB1bmxpbmtlciA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbihcblx0XHRcdFx0YOato+WcqOWPlua2iOWIsCAke2FwaW9iai5wYXJhbXMucGFnZX0ke3dpbmRvdy53Z1VMUygnIOeahOmTvuWFpScsICcg55qE6YCj5YWlJyl9YFxuXHRcdFx0KTtcblx0XHRcdHVubGlua2VyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHRcdHVubGlua2VyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRcdHVubGlua2VyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHRg5q2j5Zyo5Y+W5raIICR7cGFnZU5hbWV9JHt3aW5kb3cud2dVTFMoJyDkuIrnmoTpk77lhaUnLCAnIOS4iueahOmAo+WFpScpfWBcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRcdC4uLmFwaW9iai5wYXJhbXMsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHBhcmFtcy50aXRsZSA9IHBhZ2VOYW1lO1xuXHRcdFx0XHRwYXJhbXMudW5saW5rZXIgPSB1bmxpbmtlcjtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrcy51bmxpbmtCYWNrbGlua3MpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHR1bmxpbmtCYWNrbGlua3M6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0aWYgKCFwYWdlb2JqLmV4aXN0cygpKSB7XG5cdFx0XHRcdC8vIHdlIHByb2JhYmx5IGp1c3QgZGVsZXRlZCBpdCwgYXMgYSByZWN1cnNpdmUgYmFja2xpbmtcblx0XHRcdFx0cGFyYW1zLnVubGlua2VyLndvcmtlclN1Y2Nlc3MocGFnZW9iaik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCB0ZXh0O1xuXHRcdFx0aWYgKHBhcmFtcy50aXRsZSBpbiBUd2lua2xlLmJhdGNoZGVsZXRlLnVubGlua0NhY2hlKSB7XG5cdFx0XHRcdHRleHQgPSBUd2lua2xlLmJhdGNoZGVsZXRlLnVubGlua0NhY2hlW3BhcmFtcy50aXRsZV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb2xkX3RleHQgPSB0ZXh0O1xuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2l0ZXh0LnBhZ2UodGV4dCk7XG5cdFx0XHR0ZXh0ID0geXNhcmNoaXZlc19wYWdlLnJlbW92ZUxpbmsocGFyYW1zLnBhZ2UpLmdldFRleHQoKTtcblx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUudW5saW5rQ2FjaGVbcGFyYW1zLnRpdGxlXSA9IHRleHQ7XG5cdFx0XHRpZiAodGV4dCA9PT0gb2xkX3RleHQpIHtcblx0XHRcdFx0Ly8gTm90aGluZyB0byBkbywgcmV0dXJuXG5cdFx0XHRcdHBhcmFtcy51bmxpbmtlci53b3JrZXJTdWNjZXNzKHBhZ2VvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WPlua2iOWIsOW3suWIoOmhtemdoicsICflj5bmtojliLDlt7LliKrpoIHpnaInKSArIHBhcmFtcy5wYWdlICsgd2luZG93LndnVUxTKCfnmoTpk77lhaUnLCAn55qE6YCj5YWlJylcblx0XHRcdCk7XG5cdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQodGV4dCk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2V0TWF4Q29uZmxpY3RSZXRyaWVzKDEwKTtcblx0XHRcdHBhZ2VvYmouc2F2ZShwYXJhbXMudW5saW5rZXIud29ya2VyU3VjY2VzcywgcGFyYW1zLnVubGlua2VyLndvcmtlckZhaWx1cmUpO1xuXHRcdH0sXG5cdFx0dW5saW5rSW1hZ2VJbnN0YW5jZXNNYWluOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCB4bWwgPSBhcGlvYmoucmVzcG9uc2VYTUw7XG5cdFx0XHRjb25zdCBwYWdlcyA9ICQoeG1sKVxuXHRcdFx0XHQuZmluZCgnaXUnKVxuXHRcdFx0XHQubWFwKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gJChlbGVtZW50KS5hdHRyKCd0aXRsZScpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZ2V0KCk7XG5cdFx0XHRpZiAoIXBhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB1bmxpbmtlciA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbihcblx0XHRcdFx0YOato+WcqOWPlua2iOWIsCAke2FwaW9iai5wYXJhbXMucGFnZX0ke3dpbmRvdy53Z1VMUygnIOeahOmTvuWFpScsICcg55qE6YCj5YWlJyl9YFxuXHRcdFx0KTtcblx0XHRcdHVubGlua2VyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHRcdHVubGlua2VyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRcdHVubGlua2VyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0XHRg5Y+W5raIICR7cGFnZU5hbWV9JHt3aW5kb3cud2dVTFMoJyDnmoTmlofku7bkvb/nlKgnLCAnIOeahOaqlOahiOS9v+eUqCcpfWBcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRcdC4uLmFwaW9iai5wYXJhbXMsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHBhcmFtcy50aXRsZSA9IHBhZ2VOYW1lO1xuXHRcdFx0XHRwYXJhbXMudW5saW5rZXIgPSB1bmxpbmtlcjtcblx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmJhdGNoZGVsZXRlLmNhbGxiYWNrcy51bmxpbmtJbWFnZUluc3RhbmNlcyk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdHVubGlua0ltYWdlSW5zdGFuY2VzOiAocGFnZW9iaikgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGlmICghcGFnZW9iai5leGlzdHMoKSkge1xuXHRcdFx0XHQvLyB3ZSBwcm9iYWJseSBqdXN0IGRlbGV0ZWQgaXQsIGFzIGEgcmVjdXJzaXZlIGJhY2tsaW5rXG5cdFx0XHRcdHBhcmFtcy51bmxpbmtlci53b3JrZXJTdWNjZXNzKHBhZ2VvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbWFnZSA9IHBhcmFtcy5wYWdlLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7TW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoNil9OmApLCAnJyk7XG5cdFx0XHRsZXQgdGV4dDtcblx0XHRcdGlmIChwYXJhbXMudGl0bGUgaW4gVHdpbmtsZS5iYXRjaGRlbGV0ZS51bmxpbmtDYWNoZSkge1xuXHRcdFx0XHR0ZXh0ID0gVHdpbmtsZS5iYXRjaGRlbGV0ZS51bmxpbmtDYWNoZVtwYXJhbXMudGl0bGVdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9sZF90ZXh0ID0gdGV4dDtcblx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpdGV4dC5wYWdlKHRleHQpO1xuXHRcdFx0dGV4dCA9IHlzYXJjaGl2ZXNfcGFnZVxuXHRcdFx0XHQuY29tbWVudE91dEltYWdlKGltYWdlLCB3aW5kb3cud2dVTFMoJ+WboOaWh+S7tuW3suWIoO+8jOaVheazqOinoycsICflm6DmqpTmoYjlt7LliKrvvIzmlYXoqLvop6MnKSlcblx0XHRcdFx0LmdldFRleHQoKTtcblx0XHRcdFR3aW5rbGUuYmF0Y2hkZWxldGUudW5saW5rQ2FjaGVbcGFyYW1zLnRpdGxlXSA9IHRleHQ7XG5cdFx0XHRpZiAodGV4dCA9PT0gb2xkX3RleHQpIHtcblx0XHRcdFx0cGFnZW9ialxuXHRcdFx0XHRcdC5nZXRTdGF0dXNFbGVtZW50KClcblx0XHRcdFx0XHQuZXJyb3IoXG5cdFx0XHRcdFx0XHRg5ZyoICR7cGFnZW9iai5nZXRQYWdlTmFtZSgpfSDkuIrlj5bmtoggJHtpbWFnZX0ke3dpbmRvdy53Z1VMUygnIOeahOaWh+S7tuS9v+eUqOWksei0pScsICcg55qE5qqU5qGI5L2/55So5aSx5pWXJyl9YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdHBhcmFtcy51bmxpbmtlci53b3JrZXJGYWlsdXJlKHBhZ2VvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WPlua2iOS9v+eUqOW3suiiq+WIoOmZpOaWh+S7ticsICflj5bmtojkvb/nlKjlt7LooqvliKrpmaTmqpTmoYgnKSArXG5cdFx0XHRcdFx0aW1hZ2UgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn77yM5Zug5Li677yaJywgJ++8jOWboOeCuu+8micpICtcblx0XHRcdFx0XHRwYXJhbXMucmVhc29uXG5cdFx0XHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ25vY3JlYXRlJyk7XG5cdFx0XHRwYWdlb2JqLnNldE1heENvbmZsaWN0UmV0cmllcygxMCk7XG5cdFx0XHRwYWdlb2JqLnNhdmUocGFyYW1zLnVubGlua2VyLndvcmtlclN1Y2Nlc3MsIHBhcmFtcy51bmxpbmtlci53b3JrZXJGYWlsdXJlKTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmJhdGNoZGVsZXRlLCAnYmF0Y2hkZWxldGUnKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSB0d2lua2xlYmF0Y2h1bmRlbGV0ZS5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGViYXRjaHVuZGVsZXRlKCQpIHtcblx0LyoqXG5cdCAqIHR3aW5rbGViYXRjaHVuZGVsZXRlLmpzOiBCYXRjaCB1bmRlbGV0ZSBtb2R1bGVcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiVW5kLWJhdGNoXCIpXG5cdCAqIEFjdGl2ZSBvbjogRXhpc3RpbmcgdXNlciBhbmQgcHJvamVjdCBwYWdlc1xuXHQgKi9cblx0VHdpbmtsZS5iYXRjaHVuZGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdCFNb3JlYml0cy51c2VySXNTeXNvcCB8fFxuXHRcdFx0IW13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJykgfHxcblx0XHRcdChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpICE9PSBtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpLnVzZXIgJiZcblx0XHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSAhPT0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKS5wcm9qZWN0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRUd2lua2xlLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0VHdpbmtsZS5iYXRjaHVuZGVsZXRlLmNhbGxiYWNrLFxuXHRcdFx0d2luZG93LndnVUxTKCfmibnlpI0nLCAn5om55b6pJyksXG5cdFx0XHQndHctYmF0Y2gtdW5kZWwnLFxuXHRcdFx0d2luZG93LndnVUxTKCflj43liKDpmaTpobXpnaInLCAn5Y+N5Yiq6Zmk6aCB6Z2iJylcblx0XHQpO1xuXHR9O1xuXHRUd2lua2xlLmJhdGNodW5kZWxldGUuY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0Y29uc3QgV2luZG93ID0gbmV3IE1vcmViaXRzLnNpbXBsZVdpbmRvdyg2MDAsIDQwMCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUod2luZG93LndnVUxTKCfmibnph4/lj43liKDpmaQnLCAn5om55qyh5Y+N5Yiq6ZmkJykpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygnVHdpbmtsZeW4ruWKqScsICdUd2lua2xl6Kqq5piOJyksICdIOlRXL0RPQyNiYXRjaHVuZGVsZXRlJyk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0oVHdpbmtsZS5iYXRjaHVuZGVsZXRlLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Iul5a2Y5Zyo5bey5Yig6Zmk55qE6K6o6K666aG177yM5Lmf5oGi5aSNJywgJ+iLpeWtmOWcqOW3suWIqumZpOeahOiojuirlumgge+8jOS5n+aBouW+qScpLFxuXHRcdFx0XHRcdG5hbWU6ICd1bmRlbF90YWxrJyxcblx0XHRcdFx0XHR2YWx1ZTogJ3VuZGVsX3RhbGsnLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRuYW1lOiAncmVhc29uJyxcblx0XHRcdGxhYmVsOiAn55CG55Sx77yaJyxcblx0XHRcdHNpemU6IDYwLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHN0YXR1c2RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdHN0YXR1c2Rpdi5zdHlsZS5wYWRkaW5nID0gJzE1cHgnOyAvLyBqdXN0IHNvIGl0IGRvZXNuJ3QgbG9vayBicm9rZW5cblx0XHRXaW5kb3cuc2V0Q29udGVudChzdGF0dXNkaXYpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KHN0YXR1c2Rpdik7XG5cdFx0V2luZG93LmRpc3BsYXkoKTtcblx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdGdlbmVyYXRvcjogJ2xpbmtzJyxcblx0XHRcdHByb3A6ICdpbmZvJyxcblx0XHRcdGlucHJvcDogJ3Byb3RlY3Rpb24nLFxuXHRcdFx0dGl0bGVzOiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksXG5cdFx0XHRncGxsaW1pdDogVHdpbmtsZS5nZXRQcmVmKCdiYXRjaE1heCcpLFxuXHRcdH07XG5cdFx0Y29uc3Qgc3RhdGVsZW0gPSBuZXcgTW9yZWJpdHMuc3RhdHVzKHdpbmRvdy53Z1VMUygn5oqT5Y+W6aG16Z2i5YiX6KGoJywgJ+aKk+WPlumggemdouWIl+ihqCcpKTtcblx0XHRjb25zdCB5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg6L295Lit4oCmJywgJ+i8ieWFpeS4reKApicpLFxuXHRcdFx0cXVlcnksXG5cdFx0XHQoYXBpb2JqKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdFx0Y29uc3QgJHBhZ2VzID0gJCh4bWwpLmZpbmQoJ3BhZ2VbbWlzc2luZ10nKTtcblx0XHRcdFx0Y29uc3QgbGlzdCA9IFtdO1xuXHRcdFx0XHQkcGFnZXMuZWFjaCgoX2luZGV4LCBwYWdlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgJHBhZ2UgPSAkKHBhZ2UpO1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gJHBhZ2UuYXR0cigndGl0bGUnKTtcblx0XHRcdFx0XHRjb25zdCAkZWRpdHByb3QgPSAkcGFnZS5maW5kKCdwclt0eXBlPVwiY3JlYXRlXCJdW2xldmVsPVwic3lzb3BcIl0nKTtcblx0XHRcdFx0XHRjb25zdCBpc1Byb3RlY3RlZCA9ICRlZGl0cHJvdC5sZW5ndGggPiAwO1xuXHRcdFx0XHRcdGxpc3QucHVzaCh7XG5cdFx0XHRcdFx0XHRsYWJlbDpcblx0XHRcdFx0XHRcdFx0dGl0bGUgK1xuXHRcdFx0XHRcdFx0XHQoaXNQcm90ZWN0ZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGDvvIgke3dpbmRvdy53Z1VMUygn5YWo5L+d5oqk77yMJywgJ+WFqOS/neitt++8jCcpfSR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCRlZGl0cHJvdC5hdHRyKCdleHBpcnknKSA9PT0gJ2luZmluaXR5J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCfml6DpmZDmnJ8nLCAn54Sh6ZmQ5pyfJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IGAke25ldyBNb3JlYml0cy5kYXRlKCRlZGl0cHJvdC5hdHRyKCdleHBpcnknKSkuY2FsZW5kYXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1dGMnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfSAoVVRDKSR7d2luZG93LndnVUxTKCfov4fmnJ8nLCAn6YGO5pyfJyl9YFxuXHRcdFx0XHRcdFx0XHRcdFx0fe+8iWBcblx0XHRcdFx0XHRcdFx0XHQ6ICcnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiB0aXRsZSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRzdHlsZTogaXNQcm90ZWN0ZWQgPyAnY29sb3I6ICNmMDAnIDogJycsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvoXmgaLlpI3pobXpnaInLCAn5b6F5oGi5b6p6aCB6Z2iJyksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhajpgIknLCAn5YWo6YG4JyksXG5cdFx0XHRcdFx0ZXZlbnQ6IChlKSA9PiB7XG5cdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAncGFnZXMnKSkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhajkuI3pgIknLCAn5YWo5LiN6YG4JyksXG5cdFx0XHRcdFx0ZXZlbnQ6IChlKSA9PiB7XG5cdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhlLnRhcmdldC5mb3JtLCAncGFnZXMnKSkucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YXBpb2JqLnBhcmFtcy5mb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdFx0XHRuYW1lOiAncGFnZXMnLFxuXHRcdFx0XHRcdHNoaWZ0Q2xpY2tTdXBwb3J0OiB0cnVlLFxuXHRcdFx0XHRcdGxpc3QsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhcGlvYmoucGFyYW1zLmZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGFwaW9iai5wYXJhbXMuZm9ybS5yZW5kZXIoKTtcblx0XHRcdFx0YXBpb2JqLnBhcmFtcy5XaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFx0fSxcblx0XHRcdHN0YXRlbGVtXG5cdFx0KTtcblx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMgPSB7XG5cdFx0XHRmb3JtLFxuXHRcdFx0V2luZG93LFxuXHRcdH07XG5cdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHR9O1xuXHRUd2lua2xlLmJhdGNodW5kZWxldGUuY2FsbGJhY2suZXZhbHVhdGUgPSAoZXZlbnQpID0+IHtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSB3aW5kb3cud2dVTFMoJ+WPjeWIoOmZpOW3suWujOaIkCcsICflj43liKrpmaTlt7LlrozmiJAnKTtcblx0XHRjb25zdCBudW1Qcm90ZWN0ZWQgPSAkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhldmVudC50YXJnZXQsICdwYWdlcycpKS5maWx0ZXIoKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQuY2hlY2tlZCAmJiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5zdHlsZS5jb2xvciA9PT0gJ3JlZCc7XG5cdFx0fSkubGVuZ3RoO1xuXHRcdGlmIChcblx0XHRcdG51bVByb3RlY3RlZCA+IDAgJiZcblx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aCqOato+imgeWPjeWIoOmZpCAnLCAn5oKo5q2j6KaB5Y+N5Yiq6ZmkICcpICtcblx0XHRcdFx0XHRudW1Qcm90ZWN0ZWQgK1xuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOS4quWFqOS/neaKpOmhtemdou+8jOaCqOehruWumuWQl++8nycsICcg5YCL5YWo5L+d6K236aCB6Z2i77yM5oKo56K65a6a5ZeO77yfJylcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcGFnZXMgPSBldmVudC50YXJnZXQuZ2V0Q2hlY2tlZCgncGFnZXMnKTtcblx0XHRjb25zdCByZWFzb24gPSBldmVudC50YXJnZXQucmVhc29uLnZhbHVlO1xuXHRcdGNvbnN0IHVuZGVsX3RhbGsgPSBldmVudC50YXJnZXQucmVhc29uLnZhbHVlO1xuXHRcdGlmICghcmVhc29uKSB7XG5cdFx0XHRtdy5ub3RpZnkoJ+aCqOmcgOimgeaMh+WumueQhueUseOAgicsIHtcblx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHR0YWc6ICd0d2lua2xlYmF0Y2h1bmRlbGV0ZScsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChldmVudC50YXJnZXQpO1xuXHRcdGlmICghcGFnZXMpIHtcblx0XHRcdE1vcmViaXRzLnN0YXR1cy5lcnJvcihcblx0XHRcdFx0d2luZG93LndnVUxTKCfplJnor68nLCAn6Yyv6KqkJyksXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5rKh5LuA5LmI6KaB5Y+N5Yig6Zmk55qE77yM5Y+W5raI5pON5L2cJywgJ+aykuS7gOm6vOimgeWPjeWIqumZpOeahO+8jOWPlua2iOaTjeS9nCcpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwYWdlVW5kZWxldGVyID0gbmV3IE1vcmViaXRzLmJhdGNoT3BlcmF0aW9uKHdpbmRvdy53Z1VMUygn5Y+N5Yig6Zmk6aG16Z2iJywgJ+WPjeWIqumZpOmggemdoicpKTtcblx0XHRwYWdlVW5kZWxldGVyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaENodW5rcycpKTtcblx0XHRwYWdlVW5kZWxldGVyLnNldE9wdGlvbigncHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMnLCB0cnVlKTtcblx0XHRwYWdlVW5kZWxldGVyLnNldFBhZ2VMaXN0KHBhZ2VzKTtcblx0XHRwYWdlVW5kZWxldGVyLnJ1bigocGFnZU5hbWUpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0cGFnZTogcGFnZU5hbWUsXG5cdFx0XHRcdHVuZGVsX3RhbGssXG5cdFx0XHRcdHJlYXNvbixcblx0XHRcdFx0cGFnZVVuZGVsZXRlcixcblx0XHRcdH07XG5cdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRwYWdlTmFtZSxcblx0XHRcdFx0d2luZG93LndnVUxTKCflj43liKDpmaTpobXpnaInLCAn5Y+N5Yiq6Zmk6aCB6Z2iJykgKyBwYWdlTmFtZVxuXHRcdFx0KTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRFZGl0U3VtbWFyeShgJHtyZWFzb259ICjmibnph48pYCk7XG5cdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0eXNhcmNoaXZlc19wYWdlLnN1cHByZXNzUHJvdGVjdFdhcm5pbmcoKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRNYXhSZXRyaWVzKDMpOyAvLyB0ZW1wb3JhcnkgaW5jcmVhc2UgZnJvbSAyIHRvIG1ha2UgYmF0Y2h1bmRlbGV0ZSBtb3JlIGxpa2VseSB0byBzdWNjZWVkXG5cdFx0XHR5c2FyY2hpdmVzX3BhZ2UudW5kZWxldGVQYWdlKFR3aW5rbGUuYmF0Y2h1bmRlbGV0ZS5jYWxsYmFja3MuZG9FeHRyYXMsIHBhZ2VVbmRlbGV0ZXIud29ya2VyRmFpbHVyZSk7XG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2h1bmRlbGV0ZS5jYWxsYmFja3MgPSB7XG5cdFx0Ly8gdGhpcyBzdHVwaWQgcGFyYW1ldGVyIG5hbWUgaXMgYSB0ZW1wb3JhcnkgdGhpbmcgdW50aWwgSSBpbXBsZW1lbnQgYW4gb3ZlcmhhdWxcblx0XHQvLyBvZiBNb3JlYml0cy53aWtpLiogY2FsbGJhY2sgcGFyYW1ldGVyc1xuXHRcdGRvRXh0cmFzOiAodGhpbmdXaXRoUGFyYW1ldGVycykgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gdGhpbmdXaXRoUGFyYW1ldGVycy5wYXJlbnRcblx0XHRcdFx0PyB0aGluZ1dpdGhQYXJhbWV0ZXJzLnBhcmVudC5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKVxuXHRcdFx0XHQ6IHRoaW5nV2l0aFBhcmFtZXRlcnMuZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHQvLyB0aGUgaW5pdGlhbCBiYXRjaCBvcGVyYXRpb24ncyBqb2IgaXMgdG8gZGVsZXRlIHRoZSBwYWdlLCBhbmQgdGhhdCBoYXNcblx0XHRcdC8vIHN1Y2NlZWRlZCBieSBub3dcblx0XHRcdHBhcmFtcy5wYWdlVW5kZWxldGVyLndvcmtlclN1Y2Nlc3ModGhpbmdXaXRoUGFyYW1ldGVycyk7XG5cdFx0XHRsZXQgcXVlcnk7XG5cdFx0XHRsZXQgeXNhcmNoaXZlc19hcGk7XG5cdFx0XHRpZiAocGFyYW1zLnVuZGVsX3RhbGspIHtcblx0XHRcdFx0Y29uc3QgdGFsa3BhZ2VuYW1lID0gbmV3IG13LlRpdGxlKHBhcmFtcy5wYWdlKS5nZXRUYWxrUGFnZSgpLmdldFByZWZpeGVkVGV4dCgpO1xuXHRcdFx0XHRpZiAodGFsa3BhZ2VuYW1lICE9PSBwYXJhbXMucGFnZSkge1xuXHRcdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdFx0cHJvcDogJ2RlbGV0ZWRyZXZpc2lvbnMnLFxuXHRcdFx0XHRcdFx0ZHJ2cHJvcDogJ2lkcycsXG5cdFx0XHRcdFx0XHRkcnZsaW1pdDogMSxcblx0XHRcdFx0XHRcdHRpdGxlczogdGFsa3BhZ2VuYW1lLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ajgOafpeiuqOiuuumhteeahOW3suWIoOeJiOacrCcsICfmqqLmn6XoqI7oq5bpoIHnmoTlt7LliKrniYjmnKwnKSxcblx0XHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdFx0VHdpbmtsZS5iYXRjaHVuZGVsZXRlLmNhbGxiYWNrcy51bmRlbGV0ZVRhbGtcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHBhcmFtcztcblx0XHRcdFx0XHR5c2FyY2hpdmVzX2FwaS5wYXJhbXMudGFsa1BhZ2UgPSB0YWxrcGFnZW5hbWU7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR1bmRlbGV0ZVRhbGs6IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGNvbnN0IGV4aXN0cyA9ICQoeG1sKS5maW5kKCdwYWdlOm5vdChbbWlzc2luZ10pJykubGVuZ3RoID4gMDtcblx0XHRcdGNvbnN0IGRlbHJldnMgPSAkKHhtbCkuZmluZCgncmV2JykuYXR0cigncmV2aWQnKTtcblx0XHRcdGlmIChleGlzdHMgfHwgIWRlbHJldnMpIHtcblx0XHRcdFx0Ly8gcGFnZSBleGlzdHMgb3IgaGFzIG5vIGRlbGV0ZWQgcmV2aXNpb25zOyBmb3JnZXQgYWJvdXQgaXRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdGFwaW9iai5wYXJhbXMudGFsa1BhZ2UsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5Y+N5Yig6ZmkJywgJ+ato+WcqOWPjeWIqumZpCcpICsgYXBpb2JqLnBhcmFtcy5wYWdlICsgd2luZG93LndnVUxTKCfnmoTorqjorrrpobUnLCAn55qE6KiO6KuW6aCBJylcblx0XHRcdCk7XG5cdFx0XHRwYWdlLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+WPjeWIoOmZpOKAnCcsICflj43liKrpmaTjgIwnKSArXG5cdFx0XHRcdFx0YXBpb2JqLnBhcmFtcy5wYWdlICtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+KAneeahFtbSGVscDrorqjorrrpobV86K6o6K666aG1XV0nLCAn44CN55qEW1tIZWxwOuiojuirlumggXzoqI7oq5bpoIFdXScpXG5cdFx0XHQpO1xuXHRcdFx0cGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlLnVuZGVsZXRlUGFnZSgpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUuYmF0Y2h1bmRlbGV0ZSwgJ2JhdGNodW5kZWxldGUnKTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuXG4vKiEgVHdpbmtsZS5qcyAtIHR3aW5rbGViYXRjaHByb3RlY3QuanMgKi9cbihmdW5jdGlvbiB0d2lua2xlYmF0Y2hwcm90ZWN0KCQpIHtcblx0LyoqXG5cdCAqIHR3aW5rbGViYXRjaHByb3RlY3QuanM6IEJhdGNoIHByb3RlY3QgbW9kdWxlIChzeXNvcHMgb25seSlcblx0ICogTW9kZSBvZiBpbnZvY2F0aW9uOiBUYWIgKFwiUC1iYXRjaFwiKVxuXHQgKiBBY3RpdmUgb246IEV4aXN0aW5nIHByb2plY3QgcGFnZXMgYW5kIHVzZXIgcGFnZXM7XG5cdCAqIGV4aXN0aW5nIGFuZCBub24tZXhpc3RpbmcgY2F0ZWdvcmllczsgU3BlY2lhbDpQcmVmaXhJbmRleFxuXHQgKi9cblx0VHdpbmtsZS5iYXRjaHByb3RlY3QgPSAoKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0TW9yZWJpdHMudXNlcklzU3lzb3AgJiZcblx0XHRcdCgobXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKSA+IDAgJiYgWzIsIDRdLmluY2x1ZGVzKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykpKSB8fFxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID09PSAxNCB8fFxuXHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnUHJlZml4aW5kZXgnKVxuXHRcdCkge1xuXHRcdFx0VHdpbmtsZS5hZGRQb3J0bGV0TGluayhUd2lua2xlLmJhdGNocHJvdGVjdC5jYWxsYmFjaywgJ+aJueS/nScsICd0dy1wYmF0Y2gnLCAn5om56YeP5L+d5oqk6ZO+5Ye66aG16Z2iJyk7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmJhdGNocHJvdGVjdC51bmxpbmtDYWNoZSA9IHt9O1xuXHRUd2lua2xlLmJhdGNocHJvdGVjdC5jYWxsYmFjayA9ICgpID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDYwMCwgNDAwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUoJ+aJueS/nScpO1xuXHRcdFdpbmRvdy5zZXRTY3JpcHROYW1lKCdUd2lua2xlJyk7XG5cdFx0V2luZG93LmFkZEZvb3RlckxpbmsoJ+S/neaKpOadoeS+iycsICdMSUI6UFJPVCcpO1xuXHRcdFdpbmRvdy5hZGRGb290ZXJMaW5rKHdpbmRvdy53Z1VMUygn5biu5Yqp5paH5qGjJywgJ+W5q+WKqeaWh+aqlCcpLCAnSDpUVy9ET0Mj5L+d5oqkJyk7XG5cdFx0V2luZG93LmFkZEZvb3Rlckxpbmsod2luZG93LndnVUxTKCfpl67popjlj43ppognLCAn5ZWP6aGM5Y+N6aWLJyksICdIVDpUVycpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtKFR3aW5rbGUuYmF0Y2hwcm90ZWN0LmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUucHJvdGVjdC5mb3JtZXZlbnRzLmVkaXRtb2RpZnksXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJ+S/ruaUuee8lui+keS/neaKpCcsXG5cdFx0XHRcdFx0dmFsdWU6ICdlZGl0bW9kaWZ5Jyxcblx0XHRcdFx0XHRuYW1lOiAnZWRpdG1vZGlmeScsXG5cdFx0XHRcdFx0dG9vbHRpcDogJ+S7hemZkOeOsOaciemhtemdouOAgicsXG5cdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3NlbGVjdCcsXG5cdFx0XHRuYW1lOiAnZWRpdGxldmVsJyxcblx0XHRcdGxhYmVsOiAn57yW6L6R5p2D6ZmQ77yaJyxcblx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5lZGl0bGV2ZWwsXG5cdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxldmVscyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdG5hbWU6ICdlZGl0ZXhwaXJ5Jyxcblx0XHRcdGxhYmVsOiAn57uI5q2i5pe26Ze077yaJyxcblx0XHRcdGV2ZW50OiAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0XHRUd2lua2xlLnByb3RlY3QuZG9DdXN0b21FeHBpcnkoZXZlbnQudGFyZ2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGxpc3Q6IFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uTGVuZ3RocywgLy8gRGVmYXVsdCAoMiBkYXlzKSBzZXQgYWZ0ZXIgcmVuZGVyXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5tb3ZlbW9kaWZ5LFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICfkv67mlLnnp7vliqjkv53miqQnLFxuXHRcdFx0XHRcdHZhbHVlOiAnbW92ZW1vZGlmeScsXG5cdFx0XHRcdFx0bmFtZTogJ21vdmVtb2RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6ICfku4XpmZDnjrDmnInpobXpnaLjgIInLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ21vdmVsZXZlbCcsXG5cdFx0XHRsYWJlbDogJ+enu+WKqOadg+mZkO+8micsXG5cdFx0XHRldmVudDogVHdpbmtsZS5wcm90ZWN0LmZvcm1ldmVudHMubW92ZWxldmVsLFxuXHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZXZlbHMuZmlsdGVyKFxuXHRcdFx0XHQvLyBBdXRvY29uZmlybWVkIGlzIHJlcXVpcmVkIGZvciBhIG1vdmUsIHJlZHVuZGFudFxuXHRcdFx0XHQocHJvdExldmVsKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3RMZXZlbC52YWx1ZSAhPT0gJ2F1dG9jb25maXJtZWQnO1xuXHRcdFx0XHR9XG5cdFx0XHQpLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ21vdmVleHBpcnknLFxuXHRcdFx0bGFiZWw6ICfnu4jmraLml7bpl7TvvJonLFxuXHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQudGFyZ2V0LnZhbHVlID09PSAnY3VzdG9tJykge1xuXHRcdFx0XHRcdFR3aW5rbGUucHJvdGVjdC5kb0N1c3RvbUV4cGlyeShldmVudC50YXJnZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bGlzdDogVHdpbmtsZS5wcm90ZWN0LnByb3RlY3Rpb25MZW5ndGhzLCAvLyBEZWZhdWx0ICgyIGRheXMpIHNldCBhZnRlciByZW5kZXJcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0ZXZlbnQ6IChldmVudCkgPT4ge1xuXHRcdFx0XHRldmVudC50YXJnZXQuZm9ybS5jcmVhdGVsZXZlbC5kaXNhYmxlZCA9ICFldmVudC50YXJnZXQuY2hlY2tlZDtcblx0XHRcdFx0ZXZlbnQudGFyZ2V0LmZvcm0uY3JlYXRlZXhwaXJ5LmRpc2FibGVkID1cblx0XHRcdFx0XHQhZXZlbnQudGFyZ2V0LmNoZWNrZWQgfHwgZXZlbnQudGFyZ2V0LmZvcm0uY3JlYXRlbGV2ZWwudmFsdWUgPT09ICdhbGwnO1xuXHRcdFx0XHRldmVudC50YXJnZXQuZm9ybS5jcmVhdGVsZXZlbC5zdHlsZS5jb2xvciA9IGV2ZW50LnRhcmdldC5jaGVja2VkID8gJycgOiAndHJhbnNwYXJlbnQnO1xuXHRcdFx0XHRldmVudC50YXJnZXQuZm9ybS5jcmVhdGVleHBpcnkuc3R5bGUuY29sb3IgPSBldmVudC50YXJnZXQuY2hlY2tlZCA/ICcnIDogJ3RyYW5zcGFyZW50Jztcblx0XHRcdH0sXG5cdFx0XHRsaXN0OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsYWJlbDogJ+S/ruaUueWIm+W7uuS/neaKpCcsXG5cdFx0XHRcdFx0dmFsdWU6ICdjcmVhdGVtb2RpZnknLFxuXHRcdFx0XHRcdG5hbWU6ICdjcmVhdGVtb2RpZnknLFxuXHRcdFx0XHRcdHRvb2x0aXA6ICfku4XpmZDkuI3lrZjlnKjnmoTpobXpnaLjgIInLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ2NyZWF0ZWxldmVsJyxcblx0XHRcdGxhYmVsOiAn5Yib5bu65p2D6ZmQ77yaJyxcblx0XHRcdGV2ZW50OiBUd2lua2xlLnByb3RlY3QuZm9ybWV2ZW50cy5jcmVhdGVsZXZlbCxcblx0XHRcdGxpc3Q6IFR3aW5rbGUucHJvdGVjdC5wcm90ZWN0aW9uTGV2ZWxzLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdzZWxlY3QnLFxuXHRcdFx0bmFtZTogJ2NyZWF0ZWV4cGlyeScsXG5cdFx0XHRsYWJlbDogJ+e7iOatouaXtumXtO+8micsXG5cdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC50YXJnZXQudmFsdWUgPT09ICdjdXN0b20nKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5wcm90ZWN0LmRvQ3VzdG9tRXhwaXJ5KGV2ZW50LnRhcmdldCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRsaXN0OiBUd2lua2xlLnByb3RlY3QucHJvdGVjdGlvbkxlbmd0aHMsIC8vIERlZmF1bHQgKGluZGVmaW5pdGUpIHNldCBhZnRlciByZW5kZXJcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnaGVhZGVyJyxcblx0XHRcdGxhYmVsOiAnJywgLy8gaG9yaXpvbnRhbCBydWxlXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdG5hbWU6ICdyZWFzb24nLFxuXHRcdFx0bGFiZWw6ICfnkIbnlLHvvIjkv53miqTml6Xlv5fvvIknLFxuXHRcdFx0c2l6ZTogNjAsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRwcm9wOiAncmV2aXNpb25zfGluZm98aW1hZ2VpbmZvJyxcblx0XHRcdHJ2cHJvcDogJ3NpemV8dXNlcicsXG5cdFx0XHRpbnByb3A6ICdwcm90ZWN0aW9uJyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdH07XG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IDE0KSB7XG5cdFx0XHQvLyBjYXRlZ29yaWVzXG5cdFx0XHRxdWVyeS5nZW5lcmF0b3IgPSAnY2F0ZWdvcnltZW1iZXJzJztcblx0XHRcdHF1ZXJ5LmdjbXRpdGxlID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0cXVlcnkuZ2NtbGltaXQgPSBUd2lua2xlLmdldFByZWYoJ2JhdGNoTWF4Jyk7XG5cdFx0fSBlbHNlIGlmIChtdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZScpID09PSAnUHJlZml4aW5kZXgnKSB7XG5cdFx0XHRxdWVyeS5nZW5lcmF0b3IgPSAnYWxscGFnZXMnO1xuXHRcdFx0cXVlcnkuZ2FwbmFtZXNwYWNlID1cblx0XHRcdFx0bXcudXRpbC5nZXRQYXJhbVZhbHVlKCduYW1lc3BhY2UnKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbbmFtZT1uYW1lc3BhY2VdJylbMF0udmFsdWU7XG5cdFx0XHRxdWVyeS5nYXBwcmVmaXggPVxuXHRcdFx0XHRtdy51dGlsLmdldFBhcmFtVmFsdWUoJ3ByZWZpeCcpIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9cHJlZml4XScpWzBdLnZhbHVlO1xuXHRcdFx0cXVlcnkuZ2FwbGltaXQgPSBUd2lua2xlLmdldFByZWYoJ2JhdGNoTWF4Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHF1ZXJ5LmdlbmVyYXRvciA9ICdsaW5rcyc7XG5cdFx0XHRxdWVyeS50aXRsZXMgPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyk7XG5cdFx0XHRxdWVyeS5ncGxsaW1pdCA9IFR3aW5rbGUuZ2V0UHJlZignYmF0Y2hNYXgnKTtcblx0XHR9XG5cdFx0Y29uc3Qgc3RhdHVzZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0c3RhdHVzZGl2LnN0eWxlLnBhZGRpbmcgPSAnMTVweCc7IC8vIGp1c3Qgc28gaXQgZG9lc24ndCBsb29rIGJyb2tlblxuXHRcdFdpbmRvdy5zZXRDb250ZW50KHN0YXR1c2Rpdik7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLmluaXQoc3RhdHVzZGl2KTtcblx0XHRXaW5kb3cuZGlzcGxheSgpO1xuXHRcdGNvbnN0IHN0YXRlbGVtID0gbmV3IE1vcmViaXRzLnN0YXR1cygn5oqT5Y+W6aG16Z2i5YiX6KGoJyk7XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHQn5Yqg6L295Lit4oCm4oCmJyxcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0KGFwaW9iaikgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGFwaW9iai5nZXRSZXNwb25zZSgpO1xuXHRcdFx0XHRjb25zdCBwYWdlcyA9IChyZXNwb25zZS5xdWVyeSAmJiByZXNwb25zZS5xdWVyeS5wYWdlcykgfHwgW107XG5cdFx0XHRcdGNvbnN0IGxpc3QgPSBbXTtcblx0XHRcdFx0cGFnZXMuc29ydChUd2lua2xlLnNvcnRCeU5hbWVzcGFjZSk7XG5cdFx0XHRcdGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuXHRcdFx0XHRcdGNvbnN0IG1ldGFkYXRhID0gW107XG5cdFx0XHRcdFx0Y29uc3QgbWlzc2luZyA9ICEhcGFnZS5taXNzaW5nO1xuXHRcdFx0XHRcdGxldCBlZGl0UHJvdDtcblx0XHRcdFx0XHRpZiAobWlzc2luZykge1xuXHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaCgn6aG16Z2i5LiN5a2Y5ZyoJyk7XG5cdFx0XHRcdFx0XHRlZGl0UHJvdCA9IHBhZ2UucHJvdGVjdGlvblxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKChwcm90ZWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3RlY3Rpb24udHlwZSA9PT0gJ2NyZWF0ZScgJiYgcHJvdGVjdGlvbi5sZXZlbCA9PT0gJ3N5c29wJztcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnBvcCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAocGFnZS5yZWRpcmVjdCkge1xuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YS5wdXNoKCfph43lrprlkJEnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChwYWdlLm5zID09PSA2KSB7XG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhLnB1c2goYOS4iuS8oOiAhe+8miR7cGFnZS5pbWFnZWluZm9bMF0udXNlcn1gLCBg5pyA5ZCO57yW6L6R6ICF77yaJHtwYWdlLnJldmlzaW9uc1swXS51c2VyfWApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaChgJHttdy5sYW5ndWFnZS5jb252ZXJ0TnVtYmVyKHBhZ2UucmV2aXNpb25zWzBdLnNpemUpfeWtl+iKgmApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWRpdFByb3QgPSBwYWdlLnByb3RlY3Rpb25cblx0XHRcdFx0XHRcdFx0LmZpbHRlcigocHJvdGVjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm90ZWN0aW9uLnR5cGUgPT09ICdlZGl0JyAmJiBwcm90ZWN0aW9uLmxldmVsID09PSAnc3lzb3AnO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQucG9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlZGl0UHJvdCkge1xuXHRcdFx0XHRcdFx0bWV0YWRhdGEucHVzaChcblx0XHRcdFx0XHRcdFx0YCR7bWlzc2luZyA/ICfnmb3nurgnIDogJyd95YWo5L+d5oqkJHtcblx0XHRcdFx0XHRcdFx0XHRlZGl0UHJvdC5leHBpcnkgPT09ICdpbmZpbml0eSdcblx0XHRcdFx0XHRcdFx0XHRcdD8gJ++8iOawuOS5he+8iSdcblx0XHRcdFx0XHRcdFx0XHRcdDogYO+8iCR7bmV3IE1vcmViaXRzLmRhdGUoZWRpdFByb3QuZXhwaXJ5KS5jYWxlbmRhcigndXRjJyl9IChVVEMp6L+H5pyf77yJYFxuXHRcdFx0XHRcdFx0XHR9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qge3RpdGxlfSA9IHBhZ2U7XG5cdFx0XHRcdFx0bGlzdC5wdXNoKHtcblx0XHRcdFx0XHRcdGxhYmVsOiB0aXRsZSArIChtZXRhZGF0YS5sZW5ndGggPiAwID8gYCAoJHttZXRhZGF0YS5qb2luKCc7ICcpfSlgIDogJycpLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHRpdGxlLFxuXHRcdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHN0eWxlOiBlZGl0UHJvdCA/ICdjb2xvcjogI2YwMCcgOiAnJyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHRcdFx0dHlwZTogJ2hlYWRlcicsXG5cdFx0XHRcdFx0bGFiZWw6ICflvoXkv53miqTpobXpnaInLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdidXR0b24nLFxuXHRcdFx0XHRcdGxhYmVsOiAn5YWo6YCJJyxcblx0XHRcdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhldmVudC50YXJnZXQuZm9ybSwgJ3BhZ2VzJykpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHRcdHR5cGU6ICdidXR0b24nLFxuXHRcdFx0XHRcdGxhYmVsOiAn5YWo5LiN6YCJJyxcblx0XHRcdFx0XHRldmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhldmVudC50YXJnZXQuZm9ybSwgJ3BhZ2VzJykpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRcdG5hbWU6ICdwYWdlcycsXG5cdFx0XHRcdFx0c2hpZnRDbGlja1N1cHBvcnQ6IHRydWUsXG5cdFx0XHRcdFx0bGlzdCxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdFx0XHR0eXBlOiAnc3VibWl0Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGZvcm0ucmVuZGVyKCk7XG5cdFx0XHRcdFdpbmRvdy5zZXRDb250ZW50KHJlc3VsdCk7XG5cdFx0XHRcdC8vIFNldCBkZWZhdWx0c1xuXHRcdFx0XHRyZXN1bHQuZWRpdGV4cGlyeS52YWx1ZSA9ICcyIGRheXMnO1xuXHRcdFx0XHRyZXN1bHQubW92ZWV4cGlyeS52YWx1ZSA9ICcyIGRheXMnO1xuXHRcdFx0XHRyZXN1bHQuY3JlYXRlZXhwaXJ5LnZhbHVlID0gJ2luZmluaXR5Jztcblx0XHRcdFx0Zm9yIChjb25zdCBsaW5rcyBvZiBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMocmVzdWx0LCAn5Liq6aG16Z2iJykpIHtcblx0XHRcdFx0XHRUd2lua2xlLmdlbmVyYXRlQXJyb3dMaW5rcyhsaW5rcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzdGF0ZWxlbVxuXHRcdCk7XG5cdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHR9O1xuXHRUd2lua2xlLmJhdGNocHJvdGVjdC5jdXJyZW50UHJvdGVjdENvdW50ZXIgPSAwO1xuXHRUd2lua2xlLmJhdGNocHJvdGVjdC5jdXJyZW50cHJvdGVjdG9yID0gMDtcblx0VHdpbmtsZS5iYXRjaHByb3RlY3QuY2FsbGJhY2suZXZhbHVhdGUgPSAoZXZlbnQpID0+IHtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSAn5om56YeP5L+d5oqk5a6M5oiQJztcblx0XHRjb25zdCBmb3JtID0gZXZlbnQudGFyZ2V0O1xuXHRcdGNvbnN0IG51bVByb3RlY3RlZCA9ICQoTW9yZWJpdHMucXVpY2tGb3JtLmdldEVsZW1lbnRzKGZvcm0sICfkuKrpobXpnaInKSkuZmlsdGVyKChfaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBlbGVtZW50LmNoZWNrZWQgJiYgZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcuc3R5bGUuY29sb3IgPT09ICcjZjAwJztcblx0XHR9KS5sZW5ndGg7XG5cdFx0aWYgKFxuXHRcdFx0bnVtUHJvdGVjdGVkID4gMCAmJlxuXHRcdFx0IWNvbmZpcm0oYOaCqOWNs+WwhuWvuSR7bXcubGFuZ3VhZ2UuY29udmVydE51bWJlcihudW1Qcm90ZWN0ZWQpfeS4quWFqOS/neaKpOmhtemdoui/m+ihjOaTjeS9nOOAguaCqOehruWumuWQl++8n2ApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGlucHV0ID0gTW9yZWJpdHMucXVpY2tGb3JtLmdldElucHV0RGF0YShmb3JtKTtcblx0XHRpZiAoIWlucHV0LnJlYXNvbikge1xuXHRcdFx0bXcubm90aWZ5KCfmgqjlv4Xpobvnu5nlh7rkuIDkuKrnkIbnlLHjgIInLCB7XG5cdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0dGFnOiAndHdpbmtsZWJhdGNocHJvdGVjdCcsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkKGZhbHNlKTtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChmb3JtKTtcblx0XHRpZiAoaW5wdXQucGFnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3IoJ0Vycm9yJywgJ+W+heS/neaKpOmhtemdouS4jeWtmOWcqO+8jOeoi+W6j+e7iOatoicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBiYXRjaE9wZXJhdGlvbiA9IG5ldyBNb3JlYml0cy5iYXRjaE9wZXJhdGlvbign5bqU55So5L+d5oqk6K6+572uJyk7XG5cdFx0YmF0Y2hPcGVyYXRpb24uc2V0T3B0aW9uKCdjaHVua1NpemUnLCBUd2lua2xlLmdldFByZWYoJ2JhdGNoQ2h1bmtzJykpO1xuXHRcdGJhdGNoT3BlcmF0aW9uLnNldE9wdGlvbigncHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMnLCB0cnVlKTtcblx0XHRiYXRjaE9wZXJhdGlvbi5zZXRQYWdlTGlzdChpbnB1dC5wYWdlcyk7XG5cdFx0YmF0Y2hPcGVyYXRpb24ucnVuKChwYWdlTmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0dGl0bGVzOiBwYWdlTmFtZSxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdGDmraPlnKjmo4Dmn6XpobXpnaLigJwke3BhZ2VOYW1lfeKAneaYr+WQpuWtmOWcqGAsXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRUd2lua2xlLmJhdGNocHJvdGVjdC5jYWxsYmFja3MubWFpbixcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0YmF0Y2hPcGVyYXRpb24ud29ya2VyRmFpbHVyZVxuXHRcdFx0KTtcblx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHtcblx0XHRcdFx0cGFnZTogcGFnZU5hbWUsXG5cdFx0XHRcdGJhdGNoT3BlcmF0aW9uLFxuXHRcdFx0XHQuLi5pbnB1dCxcblx0XHRcdH07XG5cdFx0XHR5c2FyY2hpdmVzX2FwaS5wb3N0KCk7XG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuYmF0Y2hwcm90ZWN0LmNhbGxiYWNrcyA9IHtcblx0XHRtYWluOiAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGFwaW9iai5nZXRSZXNwb25zZSgpO1xuXHRcdFx0aWYgKHJlc3BvbnNlLnF1ZXJ5Lm5vcm1hbGl6ZWQpIHtcblx0XHRcdFx0YXBpb2JqLnBhcmFtcy5wYWdlID0gcmVzcG9uc2UucXVlcnkubm9ybWFsaXplZFswXS50bztcblx0XHRcdH1cblx0XHRcdGNvbnN0IGV4aXN0cyA9ICFyZXNwb25zZS5xdWVyeS5wYWdlc1swXS5taXNzaW5nO1xuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoYXBpb2JqLnBhcmFtcy5wYWdlLCBg5q2j5Zyo5L+d5oqkJHthcGlvYmoucGFyYW1zLnBhZ2V9YCk7XG5cdFx0XHRsZXQgdGFrZW5BY3Rpb24gPSBmYWxzZTtcblx0XHRcdGlmIChleGlzdHMgJiYgYXBpb2JqLnBhcmFtcy5lZGl0bW9kaWZ5KSB7XG5cdFx0XHRcdHBhZ2Uuc2V0RWRpdFByb3RlY3Rpb24oYXBpb2JqLnBhcmFtcy5lZGl0bGV2ZWwsIGFwaW9iai5wYXJhbXMuZWRpdGV4cGlyeSk7XG5cdFx0XHRcdHRha2VuQWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChleGlzdHMgJiYgYXBpb2JqLnBhcmFtcy5tb3ZlbW9kaWZ5KSB7XG5cdFx0XHRcdHBhZ2Uuc2V0TW92ZVByb3RlY3Rpb24oYXBpb2JqLnBhcmFtcy5tb3ZlbGV2ZWwsIGFwaW9iai5wYXJhbXMubW92ZWV4cGlyeSk7XG5cdFx0XHRcdHRha2VuQWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmICghZXhpc3RzICYmIGFwaW9iai5wYXJhbXMuY3JlYXRlbW9kaWZ5KSB7XG5cdFx0XHRcdHBhZ2Uuc2V0Q3JlYXRlUHJvdGVjdGlvbihhcGlvYmoucGFyYW1zLmNyZWF0ZWxldmVsLCBhcGlvYmoucGFyYW1zLmNyZWF0ZWV4cGlyeSk7XG5cdFx0XHRcdHRha2VuQWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmICghdGFrZW5BY3Rpb24pIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0YOato+WcqOS/neaKpOKAnCR7YXBpb2JqLnBhcmFtcy5wYWdlfWAsXG5cdFx0XHRcdFx0YOKAnemhtemdoiR7ZXhpc3RzID8gJ+WtmOWcqCcgOiAn5LiN5a2Y5ZyoJ33vvJvml6Dkuovlj6/lgZrvvIzot7Pov4dgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFwaW9iai5wYXJhbXMuYmF0Y2hPcGVyYXRpb24ud29ya2VyRmFpbHVyZShhcGlvYmopO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwYWdlLnNldEVkaXRTdW1tYXJ5KGFwaW9iai5wYXJhbXMucmVhc29uKTtcblx0XHRcdHBhZ2Uuc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdFx0cGFnZS5wcm90ZWN0KGFwaW9iai5wYXJhbXMuYmF0Y2hPcGVyYXRpb24ud29ya2VyU3VjY2VzcywgYXBpb2JqLnBhcmFtcy5iYXRjaE9wZXJhdGlvbi53b3JrZXJGYWlsdXJlKTtcblx0XHR9LFxuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmJhdGNocHJvdGVjdCwgJ2JhdGNocHJvdGVjdCcpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZWNsb3NlLmpzICovXG4oZnVuY3Rpb24gdHdpbmtsZWNsb3NlKCQpIHtcblx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdC8qKlxuXHQgKiB0d2lua2xlY2xvc2UuanM6IFhGRCBjbG9zaW5nIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IExpbmtzIGFmdGVyIHNlY3Rpb24gaGVhZGluZ1xuXHQgKiBBY3RpdmUgb246IEFmRCBkYXRlZCBhcmNoaXZlIHBhZ2VzXG5cdCAqIENvbmZpZyBkaXJlY3RpdmVzIGluOiBUd2lua2xlQ29uZmlnXG5cdCAqL1xuXHRUd2lua2xlLmNsb3NlID0gKCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdFR3aW5rbGUuZ2V0UHJlZignWGZkQ2xvc2UnKSA9PT0gJ2hpZGUnIHx8XG5cdFx0XHQhL17mnInlhb3moaPmoYjppoYoW18gXXRhbGspPzrlrZjlup/orqjorrpcXC/orrDlvZUoPzpcXC9cXGQrKXszfSQvLnRlc3QobXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRtdy5ob29rKCd3aWtpcGFnZS5jb250ZW50JykuYWRkKChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5hdHRyKCdpZCcpID09PSAnbXctY29udGVudC10ZXh0Jykge1xuXHRcdFx0XHRUd2lua2xlLmNsb3NlLmFkZExpbmtzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cdFR3aW5rbGUuY2xvc2UuYWRkTGlua3MgPSAoKSA9PiB7XG5cdFx0Y29uc3Qgc3BhblRhZyA9IChjb2xvciwgY29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdHNwYW4uc3R5bGUuY29sb3IgPSBjb2xvcjtcblx0XHRcdHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpO1xuXHRcdFx0cmV0dXJuIHNwYW47XG5cdFx0fTtcblx0XHQkYm9keVxuXHRcdFx0LmZpbmQoXG5cdFx0XHRcdCdoMTpoYXMoLm13LWhlYWRsaW5lKSxoMjpoYXMoLm13LWhlYWRsaW5lKSxoMzpoYXMoLm13LWhlYWRsaW5lKSxoNDpoYXMoLm13LWhlYWRsaW5lKSxoNTpoYXMoLm13LWhlYWRsaW5lKSxoNjpoYXMoLm13LWhlYWRsaW5lKScsXG5cdFx0XHRcdCcjYm9keUNvbnRlbnQnXG5cdFx0XHQpXG5cdFx0XHQuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5kYXRhc2V0LnNlY3Rpb24gPSBpbmRleCArIDE7XG5cdFx0XHR9KTtcblx0XHRjb25zdCBzZWxlY3RvciA9ICc6aGFzKC5tdy1oZWFkbGluZSBhOm9ubHktb2YtdHlwZSk6bm90KDpoYXMoKyBkaXYuTmF2RnJhbWUpKSc7XG5cdFx0Y29uc3QgdGl0bGVzID0gJGJvZHkuZmluZCgnI2JvZHlDb250ZW50JykuZmluZChgaDIke3NlbGVjdG9yfTpub3QoOmhhcygrIHAgKyBoMykpLCBoMyR7c2VsZWN0b3J9YCk7IC8vIHJlYWxseSBuZWVkcyB0byB3b3JrIG9uXG5cdFx0Y29uc3QgZGVsTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0cm9uZycpO1xuXHRcdGNvbnN0IGRlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0ZGVsTGluay5hcHBlbmRDaGlsZChzcGFuVGFnKCdCbGFjaycsICdbJykpO1xuXHRcdGRlbExpbmsuYXBwZW5kQ2hpbGQoc3BhblRhZygnUmVkJywgd2luZG93LndnVUxTKCflhbPpl63orqjorronLCAn6Zec6ZaJ6KiO6KuWJykpKTtcblx0XHRkZWxMaW5rLmFwcGVuZENoaWxkKHNwYW5UYWcoJ0JsYWNrJywgJ10nKSk7XG5cdFx0ZGVsTm9kZS5hcHBlbmRDaGlsZChkZWxMaW5rKTtcblx0XHRmb3IgKGNvbnN0IGN1cnJlbnQgb2YgdGl0bGVzKSB7XG5cdFx0XHRjb25zdCBoZWFkbGluZWhyZWYgPSAkKGN1cnJlbnQpLmZpbmQoJy5tdy1oZWFkbGluZSBhJykuYXR0cignaHJlZicpO1xuXHRcdFx0aWYgKGhlYWRsaW5laHJlZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGxldCB0aXRsZSA9IG51bGw7XG5cdFx0XHRcdGlmIChoZWFkbGluZWhyZWYuaW5jbHVkZXMoJ3JlZGxpbms9MScpKSB7XG5cdFx0XHRcdFx0dGl0bGUgPSBoZWFkbGluZWhyZWYuc2xpY2UoMTksIC0yMik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgbSA9IGhlYWRsaW5laHJlZi5tYXRjaCgvXFwvd2lraVxcLyhbXj9dKykvLCAnJDEnKTtcblx0XHRcdFx0XHRpZiAobSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0WywgdGl0bGVdID0gbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRpdGxlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0dGl0bGUgPSBkZWNvZGVVUklDb21wb25lbnQodGl0bGUpO1xuXHRcdFx0XHRcdHRpdGxlID0gdGl0bGUucmVwbGFjZSgvXy9nLCAnICcpOyAvLyBOb3JtYWxpemUgZm9yIHVzaW5nIGluIGludGVyZmFjZSBhbmQgc3VtbWFyeVxuXHRcdFx0XHRcdGNvbnN0IHBhZ2Vub3RleGlzdCA9ICQoY3VycmVudCkuZmluZCgnLm13LWhlYWRsaW5lIGEnKS5oYXNDbGFzcygnbmV3Jyk7XG5cdFx0XHRcdFx0Y29uc3Qge3NlY3Rpb259ID0gY3VycmVudC5kYXRhc2V0O1xuXHRcdFx0XHRcdGNvbnN0IFtub2RlXSA9IGN1cnJlbnQucXVlcnlTZWxlY3RvckFsbCgnLm13LWhlYWRsaW5lJyk7XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTtcblx0XHRcdFx0XHRjb25zdCB0bXBOb2RlID0gZGVsTm9kZS5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdFx0dG1wTm9kZS5maXJzdENoaWxkLmhyZWYgPSBgIyR7c2VjdGlvbn1gO1xuXHRcdFx0XHRcdCQodG1wTm9kZS5maXJzdENoaWxkKS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrKHRpdGxlLCBzZWN0aW9uLCBwYWdlbm90ZXhpc3QpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQodG1wTm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdC8vIEtlZXAgdGhpcyBzeW5jaHJvbml6ZWQgd2l0aCB7e2RlbGh9fVxuXHRUd2lua2xlLmNsb3NlLmNvZGVzID0gW1xuXHRcdHtcblx0XHRcdGtleTogd2luZG93LndnVUxTKCfor7fmsYLml6DmlYgnLCAn6KuL5rGC54Sh5pWIJyksXG5cdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRpcjoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivt+axguaXoOaViCcsICfoq4vmsYLnhKHmlYgnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVwOiB7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6YeN5aSN5o+Q5Ye677yM5peg5pWIJywgJ+mHjeikh+aPkOWHuu+8jOeEoeaViCcpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2tlZXAnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuZToge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ebruagh+mhtemdouaIluaWh+S7tuS4jeWtmOWcqO+8jOaXoOaViCcsICfnm67mqJnpoIHpnaLmiJbmqpTmoYjkuI3lrZjlnKjvvIznhKHmlYgnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0bnE6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmj5DliKDogIXmnKrojrflj5bmj5DliKDotYTmoLzvvIzml6DmlYgnLCAn5o+Q5Yiq6ICF5pyq5Y+W5b6X5o+Q5Yiq6LOH5qC877yM54Sh5pWIJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiAn5L+d55WZJyxcblx0XHRcdHZhbHVlOiB7XG5cdFx0XHRcdGs6IHtcblx0XHRcdFx0XHRsYWJlbDogJ+S/neeVmScsXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdFx0YWRtaW5vbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzazoge1xuXHRcdFx0XHRcdGxhYmVsOiAn5b+r6YCf5L+d55WZJyxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGs6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmmoLml7bkv53nlZnvvIzmlLnmjILnu7TmiqTmqKHmnb/vvIjlhbPms6jluqbnrYnvvIknLCAn5pqr5pmC5L+d55WZ77yM5pS55o6b57at6K235qih5p2/77yI6Zec5rOo5bqm562J77yJJyksXG5cdFx0XHRcdFx0dmFsdWU6IHdpbmRvdy53Z1VMUygn5pqC5pe25L+d55WZJywgJ+aaq+aZguS/neeVmScpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2tlZXAnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRycjoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+ivt+axgueQhueUsea2iOWksScsICfoq4vmsYLnkIbnlLHmtojlpLEnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0XHRzZWxlY3RlZDogVHdpbmtsZS5nZXRQcmVmKCdYZmRDbG9zZScpID09PSAnbm9uYWRtaW5vbmx5Jyxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGFuOiB7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yig5ZCO6YeN5bu6JywgJ+WIquW+jOmHjeW7uicpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2tlZXAnLFxuXHRcdFx0XHRcdGFkbWlub25seTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIqumZpCcpLFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0ZDoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WIoOmZpCcsICfliKrpmaQnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdkZWwnLFxuXHRcdFx0XHRcdGFkbWlub25seTogdHJ1ZSxcblx0XHRcdFx0XHRzZWxlY3RlZDogVHdpbmtsZS5nZXRQcmVmKCdYZmRDbG9zZScpID09PSAnYWxsJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0aWM6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflm77lg4/lm6DkvrXmnYPooqvliKAnLCAn5ZyW5YOP5Zug5L615qyK6KKr5YiqJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAnZGVsJyxcblx0XHRcdFx0XHRhZG1pbm9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+W/q+mAn+WIoOmZpCcsICflv6vpgJ/liKrpmaQnKSxcblx0XHRcdHZhbHVlOiB7XG5cdFx0XHRcdHNkOiB7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5b+r6YCf5Yig6ZmkJywgJ+W/q+mAn+WIqumZpCcpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2RlbCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxzc2Q6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfml6DmnaXmupDmiJbokZfkvZzmnYPkv6Hmga/vvIzlv6vpgJ/liKDpmaQnLCAn54Sh5L6G5rqQ5oiW54mI5qyK6LOH6KiK77yM5b+r6YCf5Yiq6ZmkJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAnZGVsJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0c3ZnOiB7XG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bey5pS555SoU1ZH5Zu+5b2i77yM5b+r6YCf5Yig6ZmkJywgJ+W3suaUueeUqFNWR+WcluW9ou+8jOW/q+mAn+WIqumZpCcpLFxuXHRcdFx0XHRcdGFjdGlvbjogJ2RlbCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRyZXA6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflpJrmrKHooqvliKDpmaTvvIzmnaHnm67plIHlrponLCAn5aSa5qyh6KKr5Yiq6Zmk77yM5qKd55uu6Y6W5a6aJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAnZGVsJyxcblx0XHRcdFx0XHRhZG1pbm9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiB3aW5kb3cud2dVTFMoJ+WFtuS7luWkhOeQhuaWueazlScsICflhbbku5bomZXnkIbmlrnms5UnKSxcblx0XHRcdHZhbHVlOiB7XG5cdFx0XHRcdGM6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfovazkuqTkvrXmnYMnLCAn6L2J5Lqk5L615qyKJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAnbm9vcCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHI6IHtcblx0XHRcdFx0XHRsYWJlbDogJ+mHjeWumuWQkScsXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdFx0YWRtaW5vbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjcjoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WIhuexu+mHjeWumuWQkScsICfliIbpoZ7ph43lrprlkJEnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0XHRhZG1pbm9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG06IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfnp7vliqgnLCAn56e75YuVJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdFx0YWRtaW5vbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXJnZToge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W5tuWFpScsICfkvbXlhaUnKSxcblx0XHRcdFx0XHRhY3Rpb246ICdrZWVwJyxcblx0XHRcdFx0XHRhZG1pbm9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lcmdlYXBwcm92ZWQ6IHtcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhYHorrjlubblhaUnLCAn5YWB6Kix5L215YWlJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdFx0YWRtaW5vbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYzoge1xuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aXoOWFseivhuaaguaXtuS/neeVmScsICfnhKHlhbHorZjmmqvmmYLkv53nlZknKSxcblx0XHRcdFx0XHR2YWx1ZTogd2luZG93LndnVUxTKCfml6DlhbHor4YnLCAn54Sh5YWx6K2YJyksXG5cdFx0XHRcdFx0YWN0aW9uOiAna2VlcCcsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdF07XG5cdFR3aW5rbGUuY2xvc2UuY2FsbGJhY2sgPSAodGl0bGUsIHNlY3Rpb24sIG5vb3ApID0+IHtcblx0XHRjb25zdCBXaW5kb3cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDQxMCwgMjAwKTtcblx0XHRXaW5kb3cuc2V0VGl0bGUoYOWFs+mXreWtmOW6n+iuqOiuuiBcXHUwMEI3ICR7dGl0bGV9YCk7XG5cdFx0V2luZG93LnNldFNjcmlwdE5hbWUoJ1R3aW5rbGUnKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluaygn5a2Y5bqf6K6o6K666K6+572uJywgJ0g6VFcvUFJFRiPlhbPpl63lrZjlup/orqjorronKTtcblx0XHRXaW5kb3cuYWRkRm9vdGVyTGluaygnVHdpbmtsZeW4ruWKqScsICdIOlRXL0RPQyPlhbPpl63lrZjlup/orqjorronKTtcblx0XHRjb25zdCBmb3JtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybShUd2lua2xlLmNsb3NlLmNhbGxiYWNrLmV2YWx1YXRlKTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnc2VsZWN0Jyxcblx0XHRcdGxhYmVsOiAn5aSE55CG57uT5p6c77yaJyxcblx0XHRcdG5hbWU6ICdzdWJfZ3JvdXAnLFxuXHRcdFx0ZXZlbnQ6IFR3aW5rbGUuY2xvc2UuY2FsbGJhY2suY2hhbmdlX2NvZGUsXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2lucHV0Jyxcblx0XHRcdG5hbWU6ICdzZHJlYXNvbicsXG5cdFx0XHRsYWJlbDogJ+mAn+WIoOeQhueUse+8micsXG5cdFx0XHR0b29sdGlwOiAn55So5LqO5Yig6Zmk5pel5b+X77yM5L2/55Soe3tkZWxldGV9feeahOWPguaVsOagvOW8j++8jOS+i+WmgiBBMSDmiJYgQTF8RzEnLFxuXHRcdFx0aGlkZGVuOiB0cnVlLFxuXHRcdH0pO1xuXHRcdGZvcm0uYXBwZW5kKHtcblx0XHRcdHR5cGU6ICdpbnB1dCcsXG5cdFx0XHRuYW1lOiAncmVtYXJrJyxcblx0XHRcdGxhYmVsOiAn6KGl5YWF6K+05piO77yaJyxcblx0XHR9KTtcblx0XHRmb3JtLmFwcGVuZCh7XG5cdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0bGlzdDogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICflj6rlhbPpl63orqjorrrvvIzkuI3ov5vooYzlhbbku5bmk43kvZwnLFxuXHRcdFx0XHRcdHZhbHVlOiAnbm9vcCcsXG5cdFx0XHRcdFx0bmFtZTogJ25vb3AnLFxuXHRcdFx0XHRcdGV2ZW50OiBUd2lua2xlLmNsb3NlLmNhbGxiYWNrLmNoYW5nZV9vcGVyYXRpb24sXG5cdFx0XHRcdFx0Y2hlY2tlZDogbm9vcCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0aWYgKG5ldyBtdy5UaXRsZSh0aXRsZSkubmFtZXNwYWNlICUgMiA9PT0gMCAmJiBuZXcgbXcuVGl0bGUodGl0bGUpLm5hbWVzcGFjZSAhPT0gMikge1xuXHRcdFx0Ly8gaGlkZSBvcHRpb24gZm9yIHVzZXIgcGFnZXMsIHRvIGF2b2lkIGFjY2lkZW50YWxseSBkZWxldGluZyB1c2VyIHRhbGsgcGFnZVxuXHRcdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0XHR0eXBlOiAnY2hlY2tib3gnLFxuXHRcdFx0XHRsaXN0OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGFiZWw6ICfliKDpmaTlhbPogZTnmoTorqjorrrpobUnLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICd0YWxrcGFnZScsXG5cdFx0XHRcdFx0XHRuYW1lOiAndGFsa3BhZ2UnLFxuXHRcdFx0XHRcdFx0dG9vbHRpcDogJ+WIoOmZpOaXtumZhOW4puWIoOmZpOatpOmhtemdoueahOiuqOiuuumhteOAgicsXG5cdFx0XHRcdFx0XHRjaGVja2VkOiB0cnVlLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ2NoZWNrYm94Jyxcblx0XHRcdGxpc3Q6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAn5Yig6Zmk6YeN5a6a5ZCR6aG1Jyxcblx0XHRcdFx0XHR2YWx1ZTogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0bmFtZTogJ3JlZGlyZWN0cycsXG5cdFx0XHRcdFx0dG9vbHRpcDogJ+WIoOmZpOWIsOatpOmhteeahOmHjeWumuWQkeOAgicsXG5cdFx0XHRcdFx0Y2hlY2tlZDogdHJ1ZSxcblx0XHRcdFx0XHRldmVudDogKGUpID0+IHtcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0Zm9ybS5hcHBlbmQoe1xuXHRcdFx0dHlwZTogJ3N1Ym1pdCcsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gZm9ybS5yZW5kZXIoKTtcblx0XHRXaW5kb3cuc2V0Q29udGVudChyZXN1bHQpO1xuXHRcdFdpbmRvdy5kaXNwbGF5KCk7XG5cdFx0Y29uc3QgW3N1Yl9ncm91cF0gPSByZXN1bHQucXVlcnlTZWxlY3RvckFsbCgnc2VsZWN0Jyk7IC8vIGhhY2tcblx0XHRjb25zdCByZXN1bHREYXRhID0ge1xuXHRcdFx0dGl0bGUsXG5cdFx0XHRzZWN0aW9uOiBOdW1iZXIucGFyc2VJbnQoc2VjdGlvbiwgMTApLFxuXHRcdFx0bm9vcCxcblx0XHR9O1xuXHRcdCQocmVzdWx0KS5kYXRhKCdyZXN1bHREYXRhJywgcmVzdWx0RGF0YSk7XG5cdFx0Ly8gd29ya2VyIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgY29tYm8gYm94IGVudHJpZXNcblx0XHRjb25zdCBjcmVhdGVFbnRyaWVzID0gKGNvbnRlbnRzLCBjb250YWluZXIpID0+IHtcblx0XHRcdGZvciAoY29uc3QgW2l0ZW1LZXksIGl0ZW1Qcm9wZXJ0aWVzXSBvZiBPYmplY3QuZW50cmllcyhjb250ZW50cykpIHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gdHlwZW9mIGl0ZW1LZXkgPT09ICdzdHJpbmcnID8gaXRlbUtleSA6IGl0ZW1Qcm9wZXJ0aWVzLnZhbHVlO1xuXHRcdFx0XHRjb25zdCBlbGVtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0XHR0eXBlOiAnb3B0aW9uJyxcblx0XHRcdFx0XHRsYWJlbDogYCR7a2V5fe+8miR7aXRlbVByb3BlcnRpZXMubGFiZWx9YCxcblx0XHRcdFx0XHR2YWx1ZToga2V5LFxuXHRcdFx0XHRcdHNlbGVjdGVkOiBpdGVtUHJvcGVydGllcy5zZWxlY3RlZCxcblx0XHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHRcdChUd2lua2xlLmdldFByZWYoJ1hmZENsb3NlJykgIT09ICdhbGwnICYmIGl0ZW1Qcm9wZXJ0aWVzLmFkbWlub25seSkgfHwgaXRlbVByb3BlcnRpZXMuZGlzYWJsZWQsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBlbGVtUmVuZGVyZWQgPSBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbS5yZW5kZXIoKSk7XG5cdFx0XHRcdCQoZWxlbVJlbmRlcmVkKS5kYXRhKCdtZXNzYWdlRGF0YScsIGl0ZW1Qcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgVHdpbmtsZS5jbG9zZS5jb2Rlcykge1xuXHRcdFx0bGV0IG9wdGdyb3VwID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdFx0dHlwZTogJ29wdGdyb3VwJyxcblx0XHRcdFx0bGFiZWw6IGdyb3VwLmtleSxcblx0XHRcdH0pO1xuXHRcdFx0b3B0Z3JvdXAgPSBvcHRncm91cC5yZW5kZXIoKTtcblx0XHRcdHN1Yl9ncm91cC5hcHBlbmRDaGlsZChvcHRncm91cCk7XG5cdFx0XHQvLyBjcmVhdGUgdGhlIG9wdGlvbnNcblx0XHRcdGNyZWF0ZUVudHJpZXMoZ3JvdXAudmFsdWUsIG9wdGdyb3VwKTtcblx0XHR9XG5cdFx0Y29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldmVudC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUpO1xuXHRcdHJlc3VsdC5zdWJfZ3JvdXAuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH07XG5cdFR3aW5rbGUuY2xvc2UuY2FsbGJhY2suY2hhbmdlX29wZXJhdGlvbiA9IChlKSA9PiB7XG5cdFx0Y29uc3Qgbm9vcCA9IGUudGFyZ2V0LmNoZWNrZWQ7XG5cdFx0Y29uc3QgY29kZSA9IGUudGFyZ2V0LmZvcm0uc3ViX2dyb3VwLnZhbHVlO1xuXHRcdGNvbnN0IG1lc3NhZ2VEYXRhID0gJChlLnRhcmdldC5mb3JtLnN1Yl9ncm91cCkuZmluZChgb3B0aW9uW3ZhbHVlPVwiJHtjb2RlfVwiXWApLmRhdGEoJ21lc3NhZ2VEYXRhJyk7XG5cdFx0Y29uc3Qge3RhbGtwYWdlfSA9IGUudGFyZ2V0LmZvcm07XG5cdFx0Y29uc3Qge3JlZGlyZWN0c30gPSBlLnRhcmdldC5mb3JtO1xuXHRcdGlmIChub29wIHx8IG1lc3NhZ2VEYXRhLmFjdGlvbiA9PT0gJ2tlZXAnKSB7XG5cdFx0XHRpZiAodGFsa3BhZ2UpIHtcblx0XHRcdFx0dGFsa3BhZ2UuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHR0YWxrcGFnZS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZWRpcmVjdHMuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmVkaXJlY3RzLmRpc2FibGVkID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRhbGtwYWdlKSB7XG5cdFx0XHRcdHRhbGtwYWdlLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHR0YWxrcGFnZS5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmVkaXJlY3RzLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0cmVkaXJlY3RzLmRpc2FibGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrLmNoYW5nZV9jb2RlID0gKGUpID0+IHtcblx0XHRjb25zdCByZXN1bHREYXRhID0gJChlLnRhcmdldC5mb3JtKS5kYXRhKCdyZXN1bHREYXRhJyk7XG5cdFx0Y29uc3QgbWVzc2FnZURhdGEgPSAkKGUudGFyZ2V0KS5maW5kKGBvcHRpb25bdmFsdWU9XCIke2UudGFyZ2V0LnZhbHVlfVwiXWApLmRhdGEoJ21lc3NhZ2VEYXRhJyk7XG5cdFx0Y29uc3Qge25vb3B9ID0gZS50YXJnZXQuZm9ybTtcblx0XHRjb25zdCB7dGFsa3BhZ2V9ID0gZS50YXJnZXQuZm9ybTtcblx0XHRjb25zdCB7cmVkaXJlY3RzfSA9IGUudGFyZ2V0LmZvcm07XG5cdFx0aWYgKHJlc3VsdERhdGEubm9vcCB8fCBtZXNzYWdlRGF0YS5hY3Rpb24gPT09ICdub29wJykge1xuXHRcdFx0bm9vcC5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdG5vb3AuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKHRhbGtwYWdlKSB7XG5cdFx0XHRcdHRhbGtwYWdlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0dGFsa3BhZ2UuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmVkaXJlY3RzLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdHJlZGlyZWN0cy5kaXNhYmxlZCA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vb3AuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0bm9vcC5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0aWYgKG1lc3NhZ2VEYXRhLmFjdGlvbiA9PT0gJ2tlZXAnKSB7XG5cdFx0XHRcdGlmICh0YWxrcGFnZSkge1xuXHRcdFx0XHRcdHRhbGtwYWdlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR0YWxrcGFnZS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVkaXJlY3RzLmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0cmVkaXJlY3RzLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICh0YWxrcGFnZSkge1xuXHRcdFx0XHRcdHRhbGtwYWdlLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRhbGtwYWdlLmRpc2FibGVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVkaXJlY3RzLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRyZWRpcmVjdHMuZGlzYWJsZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChlLnRhcmdldC52YWx1ZSA9PT0gJ3NkJykge1xuXHRcdFx0XHRlLnRhcmdldC5mb3JtLnNkcmVhc29uLnBhcmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGUudGFyZ2V0LmZvcm0uc2RyZWFzb24ucGFyZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICcnKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdFR3aW5rbGUuY2xvc2UuY2FsbGJhY2suZXZhbHVhdGUgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IGNvZGUgPSBlLnRhcmdldC5zdWJfZ3JvdXAudmFsdWU7XG5cdFx0Y29uc3QgcmVzdWx0RGF0YSA9ICQoZS50YXJnZXQpLmRhdGEoJ3Jlc3VsdERhdGEnKTtcblx0XHRjb25zdCBtZXNzYWdlRGF0YSA9ICQoZS50YXJnZXQuc3ViX2dyb3VwKS5maW5kKGBvcHRpb25bdmFsdWU9XCIke2NvZGV9XCJdYCkuZGF0YSgnbWVzc2FnZURhdGEnKTtcblx0XHRjb25zdCBub29wID0gZS50YXJnZXQubm9vcC5jaGVja2VkO1xuXHRcdGNvbnN0IHRhbGtwYWdlID0gZS50YXJnZXQudGFsa3BhZ2UgJiYgZS50YXJnZXQudGFsa3BhZ2UuY2hlY2tlZDtcblx0XHRjb25zdCByZWRpcmVjdHMgPSBlLnRhcmdldC5yZWRpcmVjdHMuY2hlY2tlZDtcblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHR0aXRsZTogcmVzdWx0RGF0YS50aXRsZSxcblx0XHRcdGNvZGUsXG5cdFx0XHRyZW1hcms6IGUudGFyZ2V0LnJlbWFyay52YWx1ZSxcblx0XHRcdHNkcmVhc29uOiBlLnRhcmdldC5zZHJlYXNvbi52YWx1ZSxcblx0XHRcdHNlY3Rpb246IHJlc3VsdERhdGEuc2VjdGlvbixcblx0XHRcdHBhcmVudFNlY3Rpb246IHJlc3VsdERhdGEucGFyZW50U2VjdGlvbixcblx0XHRcdG1lc3NhZ2VEYXRhLFxuXHRcdFx0dGFsa3BhZ2UsXG5cdFx0XHRyZWRpcmVjdHMsXG5cdFx0fTtcblx0XHRNb3JlYml0cy5zaW1wbGVXaW5kb3cuc2V0QnV0dG9uc0VuYWJsZWQoZmFsc2UpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5pbml0KGUudGFyZ2V0KTtcblx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSAn5pON5L2c5a6M5oiQJztcblx0XHRpZiAobm9vcCB8fCBtZXNzYWdlRGF0YS5hY3Rpb24gPT09ICdub29wJykge1xuXHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzd2l0Y2ggKG1lc3NhZ2VEYXRhLmFjdGlvbikge1xuXHRcdFx0XHRjYXNlICdkZWwnOlxuXHRcdFx0XHRcdFR3aW5rbGUuY2xvc2UuY2FsbGJhY2tzLmRlbChwYXJhbXMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdrZWVwJzoge1xuXHRcdFx0XHRcdGNvbnN0IHlzYXJjaGl2ZXNfcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UocGFyYW1zLnRpdGxlLCAn56e76Zmk5a2Y5bqf6K6o6K665qih5p2/Jyk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19wYWdlLnNldENhbGxiYWNrUGFyYW1ldGVycyhwYXJhbXMpO1xuXHRcdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuY2xvc2UuY2FsbGJhY2tzLmtlZXApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0bXcubm90aWZ5KGDlhbPpl63lrZjlup/orqjorrrvvJrmnKrlrprkuYkgJHtjb2RlfWAsIHtcblx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVjbG9zZScsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrcyA9IHtcblx0XHRkZWw6IChwYXJhbXMpID0+IHtcblx0XHRcdGxldCBxdWVyeTtcblx0XHRcdGxldCB5c2FyY2hpdmVzX2FwaTtcblx0XHRcdE1vcmViaXRzLndpa2kuYWRkQ2hlY2twb2ludCgpO1xuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UocGFyYW1zLnRpdGxlLCAn5Yig6Zmk6aG16Z2iJyk7XG5cdFx0XHRpZiAocGFyYW1zLmNvZGUgPT09ICdzZCcpIHtcblx0XHRcdFx0VHdpbmtsZS5zcGVlZHkuY2FsbGJhY2tzLnBhcnNlV2lraXRleHQocGFyYW1zLnRpdGxlLCBge3tkZWxldGV8JHtwYXJhbXMuc2RyZWFzb259fX1gLCAocmVhc29uKSA9PiB7XG5cdFx0XHRcdFx0cmVhc29uID0gcHJvbXB0KCfovpPlhaXliKDpmaTnkIbnlLHvvIzmiJbngrnlh7vnoa7lrprku6XmjqXlj5foh6rliqjnlJ/miJDnmoTvvJonLCByZWFzb24pO1xuXHRcdFx0XHRcdGlmIChyZWFzb24gPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLndhcm4oJ+ayoeacieaJp+ihjOWIoOmZpCcpO1xuXHRcdFx0XHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRwYWdlLnNldEVkaXRTdW1tYXJ5KHJlYXNvbik7XG5cdFx0XHRcdFx0XHRwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0XHRcdHBhZ2UuZGVsZXRlUGFnZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHBhZ2UuZ2V0U3RhdHVzRWxlbWVudCgpLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdFx0XHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrcy50YWxrZW5kKHBhcmFtcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFnZS5zZXRFZGl0U3VtbWFyeShg5a2Y5bqf6K6o6K666YCa6L+H77yaW1ske213LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKX0jJHtwYXJhbXMudGl0bGV9XV1gKTtcblx0XHRcdFx0cGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHBhZ2UuZGVsZXRlUGFnZSgoKSA9PiB7XG5cdFx0XHRcdFx0cGFnZS5nZXRTdGF0dXNFbGVtZW50KCkuaW5mbygn5a6M5oiQJyk7XG5cdFx0XHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChwYXJhbXMucmVkaXJlY3RzKSB7XG5cdFx0XHRcdHF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHR0aXRsZXM6IHBhcmFtcy50aXRsZSxcblx0XHRcdFx0XHRwcm9wOiAncmVkaXJlY3RzJyxcblx0XHRcdFx0XHRyZGxpbWl0OiAnbWF4JywgLy8gNTAwIGlzIG1heCBmb3Igbm9ybWFsIHVzZXJzLCA1MDAwIGZvciBib3RzIGFuZCBzeXNvcHNcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR5c2FyY2hpdmVzX2FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHQn5q2j5Zyo6I635Y+W6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHRUd2lua2xlLmNsb3NlLmNhbGxiYWNrcy5kZWxldGVSZWRpcmVjdHNNYWluXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfYXBpLnBhcmFtcyA9IHBhcmFtcztcblx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy50YWxrUGFnZSkge1xuXHRcdFx0XHRjb25zdCBwYWdlVGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChwYXJhbXMudGl0bGUpO1xuXHRcdFx0XHRpZiAocGFnZVRpdGxlICYmIHBhZ2VUaXRsZS5uYW1lc3BhY2UgJSAyID09PSAwICYmIHBhZ2VUaXRsZS5uYW1lc3BhY2UgIT09IDIpIHtcblx0XHRcdFx0XHRwYWdlVGl0bGUubmFtZXNwYWNlKys7IC8vIG5vdyBwYWdlVGl0bGUgaXMgdGhlIHRhbGsgcGFnZSB0aXRsZSFcblx0XHRcdFx0XHRxdWVyeSA9IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0XHRcdHRpdGxlczogcGFnZVRpdGxlLnRvVGV4dCgpLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0XHQn5q2j5Zyo5qOA5p+l6K6o6K666aG16Z2i5piv5ZCm5a2Y5ZyoJyxcblx0XHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MuZGVsZXRlVGFsa1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucGFyYW1zID0gcGFyYW1zO1xuXHRcdFx0XHRcdHlzYXJjaGl2ZXNfYXBpLmFwaW9iai5wYXJhbXMudGFsa1BhZ2UgPSBwYWdlVGl0bGUudG9UZXh0KCk7XG5cdFx0XHRcdFx0eXNhcmNoaXZlc19hcGkucG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRNb3JlYml0cy53aWtpLnJlbW92ZUNoZWNrcG9pbnQoKTtcblx0XHR9LFxuXHRcdGRlbGV0ZVJlZGlyZWN0c01haW46IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGNvbnN0IHBhZ2VzID0gJCh4bWwpXG5cdFx0XHRcdC5maW5kKCdyZCcpXG5cdFx0XHRcdC5tYXAoKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAkKGVsZW1lbnQpLmF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5nZXQoKTtcblx0XHRcdGlmIChwYWdlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVkaXJlY3REZWxldGVyID0gbmV3IE1vcmViaXRzLmJhdGNoT3BlcmF0aW9uKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOWIoOmZpOWIsCAnLCAn5q2j5Zyo5Yiq6Zmk5YiwICcpICtcblx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLnRpdGxlICtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDnmoTph43lrprlkJEnLCAnIOeahOmHjeaWsOWwjuWQkScpXG5cdFx0XHQpO1xuXHRcdFx0cmVkaXJlY3REZWxldGVyLnNldE9wdGlvbignY2h1bmtTaXplJywgVHdpbmtsZS5nZXRQcmVmKCdiYXRjaGRlbGV0ZUNodW5rcycpKTtcblx0XHRcdHJlZGlyZWN0RGVsZXRlci5zZXRQYWdlTGlzdChwYWdlcyk7XG5cdFx0XHRyZWRpcmVjdERlbGV0ZXIucnVuKChwYWdlTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRcdHBhZ2VOYW1lLFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5q2j5Zyo5Yig6ZmkICcsICfmraPlnKjliKrpmaQgJykgKyBwYWdlTmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR5c2FyY2hpdmVzX3BhZ2Uuc2V0RWRpdFN1bW1hcnkoXG5cdFx0XHRcdFx0YFtbTElCOkNTRCNHNXxHNV1d77yaJHt3aW5kb3cud2dVTFMoJ+aMh+WQkeW3suWIoOmhtemdouKAnCcsICfmjIflkJHlt7LliKrpoIHpnaLjgIwnKX0ke2FwaW9iai5wYXJhbXMudGl0bGV9JHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn4oCd55qE6YeN5a6a5ZCRJyxcblx0XHRcdFx0XHRcdCfjgI3nmoTph43mlrDlsI7lkJEnXG5cdFx0XHRcdFx0KX1gXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5kZWxldGVQYWdlKHJlZGlyZWN0RGVsZXRlci53b3JrZXJTdWNjZXNzLCByZWRpcmVjdERlbGV0ZXIud29ya2VyRmFpbHVyZSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGRlbGV0ZVRhbGs6IChhcGlvYmopID0+IHtcblx0XHRcdGNvbnN0IHhtbCA9IGFwaW9iai5yZXNwb25zZVhNTDtcblx0XHRcdGNvbnN0IGV4aXN0cyA9ICQoeG1sKS5maW5kKCdwYWdlOm5vdChbbWlzc2luZ10pJykubGVuZ3RoID4gMDtcblx0XHRcdGlmICghZXhpc3RzKSB7XG5cdFx0XHRcdC8vIG5vIHRhbGsgcGFnZTsgZm9yZ2V0IGFib3V0IGl0XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHBhZ2UgPSBuZXcgTW9yZWJpdHMud2lraS5wYWdlKFxuXHRcdFx0XHRhcGlvYmoucGFyYW1zLnRhbGtQYWdlLFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+ato+WcqOWIoOmZpOmhtemdoiAnLCAn5q2j5Zyo5Yiq6Zmk6aCB6Z2iICcpICtcblx0XHRcdFx0XHRhcGlvYmoucGFyYW1zLnRpdGxlICtcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDnmoTorqjorrrpobUnLCAnIOeahOiojuirlumggScpXG5cdFx0XHQpO1xuXHRcdFx0cGFnZS5zZXRFZGl0U3VtbWFyeShcblx0XHRcdFx0YFtbTElCOkNTRCNHNXxHNV1d77yaJHt3aW5kb3cud2dVTFMoJ+W3suWIoOmhtemdouKAnCcsICflt7LliKrpoIHpnaLjgIwnKX0ke2FwaW9iai5wYXJhbXMudGl0bGV9JHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0J+KAneeahFtbSGVscDrorqjorrrpobV86K6o6K666aG1XV0nLFxuXHRcdFx0XHRcdCfjgI3nmoRbW0hlbHA66KiO6KuW6aCBfOiojuirlumggV1dJ1xuXHRcdFx0XHQpfWBcblx0XHRcdCk7XG5cdFx0XHRwYWdlLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHBhZ2UuZGVsZXRlUGFnZSgpO1xuXHRcdH0sXG5cdFx0a2VlcDogKHBhZ2VvYmopID0+IHtcblx0XHRcdGNvbnN0IHN0YXRlbGVtID0gcGFnZW9iai5nZXRTdGF0dXNFbGVtZW50KCk7XG5cdFx0XHRpZiAoIXBhZ2VvYmouZXhpc3RzKCkpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3IoJ+mhtemdouS4jeWtmOWcqO+8jOWPr+iDveW3suiiq+WIoOmZpCcpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpO1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gcGFnZW9iai5nZXRDYWxsYmFja1BhcmFtZXRlcnMoKTtcblx0XHRcdGNvbnN0IHBhZ2V0aXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHBhcmFtcy50aXRsZSk7XG5cdFx0XHRpZiAocGFnZXRpdGxlLmdldE5hbWVzcGFjZUlkKCkgJSAyID09PSAwKSB7XG5cdFx0XHRcdGNvbnN0IHRhbGtwYWdldGl0bGUgPSBuZXcgbXcuVGl0bGUocGFnZXRpdGxlLmdldE1haW5UZXh0KCksIHBhZ2V0aXRsZS5nZXROYW1lc3BhY2VJZCgpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHRhbGtwYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdFx0XHR0YWxrcGFnZXRpdGxlLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmoIforrDorqjorrrpobUnLCAn5qiZ6KiY6KiO6KuW6aCBJylcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgcmVhc29uID0gcGFyYW1zLm1lc3NhZ2VEYXRhLnZhbHVlIHx8IHBhcmFtcy5tZXNzYWdlRGF0YS5sYWJlbDtcblx0XHRcdFx0Y29uc3QgdmZka2VwdCA9IGB7e09sZCB2ZmQgbXVsdGl8JHttdy5jb25maWdcblx0XHRcdFx0XHQuZ2V0KCd3Z1BhZ2VOYW1lJylcblx0XHRcdFx0XHQuc3BsaXQoJy8nKVxuXHRcdFx0XHRcdC5zbGljZSgyKVxuXHRcdFx0XHRcdC5qb2luKCcvJyl9fCR7cmVhc29ufX19XFxuYDtcblx0XHRcdFx0dGFsa3BhZ2Uuc2V0UHJlcGVuZFRleHQodmZka2VwdCk7XG5cdFx0XHRcdHRhbGtwYWdlLnNldEVkaXRTdW1tYXJ5KGBbWyR7bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpfSMke3BhcmFtcy50aXRsZX1dXe+8miR7cmVhc29ufWApO1xuXHRcdFx0XHR0YWxrcGFnZS5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRcdHRhbGtwYWdlLnNldENyZWF0ZU9wdGlvbigncmVjcmVhdGUnKTtcblx0XHRcdFx0dGFsa3BhZ2UucHJlcGVuZCgpO1xuXHRcdFx0fVxuXHRcdFx0bGV0IG5ld3RleHQgPSB0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdC88bm9pbmNsdWRlPlxccypcXHtcXHsoW3JzYWlmdGNtdl1mZCkoXFx8KD86XFx7XFx7W157fV0qXFx9XFx9fFtee31dKSopP1xcfVxcfVxccyo8XFwvbm9pbmNsdWRlPlxccyovZ2ksXG5cdFx0XHRcdCcnXG5cdFx0XHQpO1xuXHRcdFx0bmV3dGV4dCA9IG5ld3RleHQucmVwbGFjZSgvXFx7XFx7KFtyc2FpZnRjbXZdZmQpKFxcfCg/Olxce1xce1tee31dKlxcfVxcfXxbXnt9XSkqKT9cXH1cXH1cXHMqL2dpLCAnJyk7XG5cdFx0XHRpZiAocGFyYW1zLmNvZGUgIT09ICd0aycpIHtcblx0XHRcdFx0bmV3dGV4dCA9IG5ld3RleHQucmVwbGFjZShcblx0XHRcdFx0XHQve3sobm90YWJpbGl0eXxmYW1lfG1haXJ855+l5ZCN5bqmfOmHjeimgeaAp3zmmL7okZfmgKd86aGv6JGX5oCnfOefpeWQjeW6puS4jei2s3zkurrnianph43opoHmgKd86YeN6KaB5oCn5LiN6LazfG5vdGFibGV85YWz5rOo5bqmfOWFs+azqOW6puS4jei2s3zpl5zms6jluqZ86Zec5rOo5bqm5LiN6LazfOmHjeimgXzph43opoHluqYpKFxcfCg/Ont7W157fV0qfX18W157fV0pKik/fX1cXG4qL2dpLFxuXHRcdFx0XHRcdCcnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG5ld3RleHQgPSBuZXd0ZXh0LnJlcGxhY2UoXG5cdFx0XHRcdFx0L3t7KHN1YnN0dWJ85bCP5bCP5L2c5ZOBfGNvZHzlsI/lsI/mop3nm6585bCP5bCP5p2h55uuKShcXHwoPzp7e1tee31dKn19fFtee31dKSopP319XFxuKi9naSxcblx0XHRcdFx0XHQnJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy5jb2RlID09PSAnbWVyZ2VhcHByb3ZlZCcpIHtcblx0XHRcdFx0Y29uc3QgdGFnID0gJ3t7J1xuXHRcdFx0XHRcdC5jb25jYXQoJ3N1YnN0OicpXG5cdFx0XHRcdFx0LmNvbmNhdChgTWVyZ2UgYXBwcm92ZWQvYXV0b3xkaXNjdXNzPSR7bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpfSMke3BhcmFtcy50aXRsZX19fVxcbmApO1xuXHRcdFx0XHQvLyBJbnNlcnQgdGFnIGFmdGVyIHNob3J0IGRlc2NyaXB0aW9uIG9yIGFueSBoYXRub3Rlc1xuXHRcdFx0XHRjb25zdCB5c2FyY2hpdmVzX3BhZ2UgPSBuZXcgTW9yZWJpdHMud2lraXRleHQucGFnZShuZXd0ZXh0KTtcblx0XHRcdFx0bmV3dGV4dCA9IHlzYXJjaGl2ZXNfcGFnZS5pbnNlcnRBZnRlclRlbXBsYXRlcyh0YWcsIFR3aW5rbGUuaGF0bm90ZVJlZ2V4KS5nZXRUZXh0KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobmV3dGV4dCA9PT0gdGV4dCkge1xuXHRcdFx0XHRzdGF0ZWxlbS53YXJuKCfmnKrmib7liLDlrZjlup/orqjorrrmqKHmnb/vvIzlj6/og73lt7Looqvnp7vpmaQnKTtcblx0XHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlZGl0c3VtbWFyeSA9IGDlrZjlup/orqjorrrlhbPpl63vvJpbWyR7bXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpfSMke3BhcmFtcy50aXRsZX1dXWA7XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KG5ld3RleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShlZGl0c3VtbWFyeSk7XG5cdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3MoVHdpbmtsZS5jaGFuZ2VUYWdzKTtcblx0XHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdub2NyZWF0ZScpO1xuXHRcdFx0cGFnZW9iai5zYXZlKFR3aW5rbGUuY2xvc2UuY2FsbGJhY2tzLmtlZXBDb21wbGV0ZSk7XG5cdFx0fSxcblx0XHRrZWVwQ29tcGxldGU6IChwYWdlb2JqKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYWdlb2JqLmdldENhbGxiYWNrUGFyYW1ldGVycygpO1xuXHRcdFx0VHdpbmtsZS5jbG9zZS5jYWxsYmFja3MudGFsa2VuZChwYXJhbXMpO1xuXHRcdH0sXG5cdFx0dGFsa2VuZDogKHBhcmFtcykgPT4ge1xuXHRcdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksICflhbPpl63orqjorronKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMocGFyYW1zKTtcblx0XHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRQYWdlU2VjdGlvbihwYXJhbXMuc2VjdGlvbik7XG5cdFx0XHR5c2FyY2hpdmVzX3BhZ2UubG9hZChUd2lua2xlLmNsb3NlLmNhbGxiYWNrcy5zYXZlVGFsayk7XG5cdFx0fSxcblx0XHRzYXZlVGFsazogKHBhZ2VvYmopID0+IHtcblx0XHRcdGNvbnN0IHN0YXRlbGVtID0gcGFnZW9iai5nZXRTdGF0dXNFbGVtZW50KCk7XG5cdFx0XHRsZXQgdGV4dCA9IHBhZ2VvYmouZ2V0UGFnZVRleHQoKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHRpZiAodGV4dC5pbmNsdWRlcygne3tkZWxoJykpIHtcblx0XHRcdFx0c3RhdGVsZW0uZXJyb3IoJ+iuqOiuuuW3suiiq+WFs+mXrScpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzYmVnaW4gPSB0ZXh0LmluY2x1ZGVzKCc8c2VjdGlvbiBiZWdpbj1iYWNrbG9nIC8+Jyk7XG5cdFx0XHRjb25zdCBzZW5kID0gdGV4dC5pbmNsdWRlcygnPHNlY3Rpb24gZW5kPWJhY2tsb2cgLz4nKTtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoJ1xcbjxzZWN0aW9uIGJlZ2luPWJhY2tsb2cgLz4nLCAnJyk7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCdcXG48c2VjdGlvbiBlbmQ9YmFja2xvZyAvPicsICcnKTtcblx0XHRcdGNvbnN0IGJhciA9IHRleHQuc3BsaXQoJ1xcbi0tLS1cXG4nKTtcblx0XHRcdGNvbnN0IHNwbGl0ID0gYmFyWzBdLnNwbGl0KCdcXG4nKTtcblx0XHRcdHRleHQgPSBgJHtzcGxpdFswXX1cXG57e2RlbGh8JHtwYXJhbXMuY29kZX19fVxcbmA7XG5cdFx0XHR0ZXh0ICs9IHNwbGl0LnNsaWNlKDEpLmpvaW4oJ1xcbicpO1xuXHRcdFx0Y29uc3QgcmVhc29uID0gcGFyYW1zLm1lc3NhZ2VEYXRhLnZhbHVlIHx8IHBhcmFtcy5tZXNzYWdlRGF0YS5sYWJlbDtcblx0XHRcdHRleHQgKz0gYFxcbjxocj5cXG46ICR7cmVhc29ufWA7XG5cdFx0XHRpZiAocGFyYW1zLnJlbWFyaykge1xuXHRcdFx0XHR0ZXh0ICs9IGDvvJoke01vcmViaXRzLnN0cmluZy5hcHBlbmRQdW5jdHVhdGlvbihwYXJhbXMucmVtYXJrKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGV4dCArPSAn44CCJztcblx0XHRcdH1cblx0XHRcdGlmICghTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0dGV4dCArPSAne3snLmNvbmNhdCgnc3Vic3Q6JykuY29uY2F0KCdOQUN9fScpO1xuXHRcdFx0fVxuXHRcdFx0dGV4dCArPSAnLS1+ficuY29uY2F0KCd+ficsICdcXG57e2RlbGZ9fScpO1xuXHRcdFx0aWYgKGJhclsxXSkge1xuXHRcdFx0XHR0ZXh0ICs9IGBcXG4tLS0tXFxuJHtiYXIuc2xpY2UoMSkuam9pbignXFxuLS0tLVxcbicpfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2VuZCkge1xuXHRcdFx0XHR0ZXh0ICs9ICdcXG48c2VjdGlvbiBlbmQ9YmFja2xvZyAvPic7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2JlZ2luKSB7XG5cdFx0XHRcdC8vIGd1YXJhbnRlZWQgdG8gYmUgYXQgdG5lIGVuZD9cblx0XHRcdFx0dGV4dCArPSAnXFxuPHNlY3Rpb24gYmVnaW49YmFja2xvZyAvPic7XG5cdFx0XHR9XG5cdFx0XHRwYWdlb2JqLnNldFBhZ2VUZXh0KHRleHQpO1xuXHRcdFx0cGFnZW9iai5zZXRFZGl0U3VtbWFyeShgLyogJHtwYXJhbXMudGl0bGV9ICovICR7cmVhc29ufWApO1xuXHRcdFx0cGFnZW9iai5zZXRDaGFuZ2VUYWdzKFR3aW5rbGUuY2hhbmdlVGFncyk7XG5cdFx0XHRwYWdlb2JqLnNldENyZWF0ZU9wdGlvbignbm9jcmVhdGUnKTtcblx0XHRcdHBhZ2VvYmouc2F2ZShUd2lua2xlLmNsb3NlLmNhbGxiYWNrcy5kaXNhYmxlTGluayk7XG5cdFx0fSxcblx0XHRkaXNhYmxlTGluazogKHBhZ2VvYmopID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0XHQkKGBzdHJvbmcgYVtocmVmPSMke3BhcmFtcy5zZWN0aW9ufV0gc3BhbmApLmNzcygnY29sb3InLCAnIzgwODA4MCcpO1xuXHRcdH0sXG5cdH07XG5cdFR3aW5rbGUuYWRkSW5pdENhbGxiYWNrKFR3aW5rbGUuY2xvc2UsICdjbG9zZScpO1xufSkoalF1ZXJ5KTtcblxuZXhwb3J0IHt9O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5cbi8qISBUd2lua2xlLmpzIC0gdHdpbmtsZWNvbmZpZy5qcyAqL1xuKGZ1bmN0aW9uIHR3aW5rbGVjb25maWcoJCkge1xuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0LyoqXG5cdCAqIHR3aW5rbGVjb25maWcuanM6IFByZWZlcmVuY2VzIG1vZHVsZVxuXHQgKiBNb2RlIG9mIGludm9jYXRpb246IEFkZHMgY29uZmlndXJhdGlvbiBmb3JtIHRvIEhlbHA6VHdpbmtsZS/lj4LmlbDorr7nva4sXG5cdCAqIGFuZCBhZGRzIGFuIGFkIGJveCB0byB0aGUgdG9wIG9mIHVzZXIgc3VicGFnZXMgYmVsb25naW5nIHRvIHRoZVxuXHQgKiBjdXJyZW50bHkgbG9nZ2VkLWluIHVzZXIgd2hpY2ggZW5kIGluICcuanMnXG5cdCAqIEFjdGl2ZSBvbjogV2hhdCBJIGp1c3Qgc2FpZC4gWWVhaC5cblx0ICovXG5cdFR3aW5rbGUuY29uZmlnID0ge307XG5cdFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zID0ge1xuXHRcdHllczogd2luZG93LndnVUxTKCfmsLjkuYXliqDlhaXliLDnm5Hop4bliJfooagnLCAn5rC45LmF5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0bm86IHdpbmRvdy53Z1VMUygn5LiN5Yqg5YWl5Yiw55uR6KeG5YiX6KGoJywgJ+S4jeWKoOWFpeWIsOebo+imlua4heWWricpLFxuXHRcdGRlZmF1bHQ6IHdpbmRvdy53Z1VMUygn6YG15a6I56uZ54K56K6+572uJywgJ+mBteWuiOermem7nuioreWumicpLFxuXHRcdCcxIHdlZWsnOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeWIsOebkeinhuWIl+ihqDHlkagnLCAn5Yqg5YWl5Yiw55uj6KaW5riF5ZauMemAsScpLFxuXHRcdCcxIG1vbnRoJzogd2luZG93LndnVUxTKCfliqDlhaXliLDnm5Hop4bliJfooagx5Liq5pyIJywgJ+WKoOWFpeWIsOebo+imlua4heWWrjHlgIvmnIgnKSxcblx0XHQnMyBtb250aHMnOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeWIsOebkeinhuWIl+ihqDPkuKrmnIgnLCAn5Yqg5YWl5Yiw55uj6KaW5riF5ZauM+WAi+aciCcpLFxuXHRcdCc2IG1vbnRocyc6IHdpbmRvdy53Z1VMUygn5Yqg5YWl5Yiw55uR6KeG5YiX6KGoNuS4quaciCcsICfliqDlhaXliLDnm6PoppbmuIXllq425YCL5pyIJyksXG5cdH07XG5cdFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMgPSB7XG5cdFx0Y3NkQ3JpdGVyaWE6IHtcblx0XHRcdGRiOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieeQhueUsScsICfoh6roqILnkIbnlLEnKSxcblx0XHRcdGcxOiAnRzEnLFxuXHRcdFx0ZzI6ICdHMicsXG5cdFx0XHRnMzogJ0czJyxcblx0XHRcdGc0OiAnRzQnLFxuXHRcdFx0ZzU6ICdHNScsXG5cdFx0XHRnNjogJ0c2Jyxcblx0XHRcdGc3OiAnRzcnLFxuXHRcdFx0Zzg6ICdHOCcsXG5cdFx0XHRnOTogJ0c5Jyxcblx0XHRcdGExOiAnQTEnLFxuXHRcdFx0YTI6ICdBMicsXG5cdFx0XHRhMzogJ0EzJyxcblx0XHRcdG8xOiAnTzEnLFxuXHRcdFx0bzI6ICdPMicsXG5cdFx0XHRvMzogJ08zJyxcblx0XHRcdGYxOiAnRjEnLFxuXHRcdFx0ZjI6ICdGMicsXG5cdFx0XHRmMzogJ0YzJyxcblx0XHRcdGY0OiAnRjQnLFxuXHRcdFx0ZjU6ICdGNScsXG5cdFx0XHRyMTogJ1IxJyxcblx0XHRcdHIyOiAnUjInLFxuXHRcdH0sXG5cdFx0Y3NkQ3JpdGVyaWFEaXNwbGF5T3JkZXI6IFtcblx0XHRcdCdkYicsXG5cdFx0XHQnZzEnLFxuXHRcdFx0J2cyJyxcblx0XHRcdCdnMycsXG5cdFx0XHQnZzQnLFxuXHRcdFx0J2c1Jyxcblx0XHRcdCdnNicsXG5cdFx0XHQnZzcnLFxuXHRcdFx0J2c4Jyxcblx0XHRcdCdnOScsXG5cdFx0XHQnYTEnLFxuXHRcdFx0J2EyJyxcblx0XHRcdCdhMycsXG5cdFx0XHQnbzEnLFxuXHRcdFx0J28yJyxcblx0XHRcdCdvMycsXG5cdFx0XHQnZjEnLFxuXHRcdFx0J2YyJyxcblx0XHRcdCdmMycsXG5cdFx0XHQnZjQnLFxuXHRcdFx0J2Y1Jyxcblx0XHRcdCdyMScsXG5cdFx0XHQncjInLFxuXHRcdF0sXG5cdFx0Y3NkQ3JpdGVyaWFOb3RpZmljYXRpb246IHtcblx0XHRcdGRiOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieeQhueUsScsICfoh6roqILnkIbnlLEnKSxcblx0XHRcdGcxOiAnRzEnLFxuXHRcdFx0ZzI6ICdHMicsXG5cdFx0XHRnMzogJ0czJyxcblx0XHRcdGc0OiAnRzQnLFxuXHRcdFx0ZzU6ICdHNScsXG5cdFx0XHRnNjogJ0c2Jyxcblx0XHRcdGc3OiAnRzcnLFxuXHRcdFx0Zzg6ICdHOCcsXG5cdFx0XHRnOTogJ0c5Jyxcblx0XHRcdGExOiAnQTEnLFxuXHRcdFx0YTI6ICdBMicsXG5cdFx0XHRhMzogJ0EzJyxcblx0XHRcdG8xOiAnTzEnLFxuXHRcdFx0bzI6ICdPMicsXG5cdFx0XHRvMzogJ08zJyxcblx0XHRcdGYxOiAnRjEnLFxuXHRcdFx0ZjI6ICdGMicsXG5cdFx0XHRmMzogJ0YzJyxcblx0XHRcdGY0OiAnRjQnLFxuXHRcdFx0ZjU6ICdGNScsXG5cdFx0XHRyMTogJ1IxJyxcblx0XHRcdHIyOiAnUjInLFxuXHRcdH0sXG5cdFx0Y3NkQ3JpdGVyaWFOb3RpZmljYXRpb25EaXNwbGF5T3JkZXI6IFtcblx0XHRcdCdkYicsXG5cdFx0XHQnZzEnLFxuXHRcdFx0J2cyJyxcblx0XHRcdCdnMycsXG5cdFx0XHQnZzQnLFxuXHRcdFx0J2c1Jyxcblx0XHRcdCdnNicsXG5cdFx0XHQnZzcnLFxuXHRcdFx0J2c4Jyxcblx0XHRcdCdnOScsXG5cdFx0XHQnYTEnLFxuXHRcdFx0J2EyJyxcblx0XHRcdCdhMycsXG5cdFx0XHQnbzEnLFxuXHRcdFx0J28yJyxcblx0XHRcdCdvMycsXG5cdFx0XHQnZjEnLFxuXHRcdFx0J2YyJyxcblx0XHRcdCdmMycsXG5cdFx0XHQnZjQnLFxuXHRcdFx0J2Y1Jyxcblx0XHRcdCdyMScsXG5cdFx0XHQncjInLFxuXHRcdF0sXG5cdFx0Y3NkQW5kRElDcml0ZXJpYToge1xuXHRcdFx0ZGI6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ55CG55SxJywgJ+iHquiogueQhueUsScpLFxuXHRcdFx0ZzE6ICdHMScsXG5cdFx0XHRnMjogJ0cyJyxcblx0XHRcdGczOiAnRzMnLFxuXHRcdFx0ZzQ6ICdHNCcsXG5cdFx0XHRnNTogJ0c1Jyxcblx0XHRcdGc2OiAnRzYnLFxuXHRcdFx0Zzc6ICdHNycsXG5cdFx0XHRnODogJ0c4Jyxcblx0XHRcdGc5OiAnRzknLFxuXHRcdFx0YTE6ICdBMScsXG5cdFx0XHRhMjogJ0EyJyxcblx0XHRcdGEzOiAnQTMnLFxuXHRcdFx0bzE6ICdPMScsXG5cdFx0XHRvMjogJ08yJyxcblx0XHRcdG8zOiAnTzMnLFxuXHRcdFx0ZjE6ICdGMScsXG5cdFx0XHRmMjogJ0YyJyxcblx0XHRcdGYzOiAnRjMnLFxuXHRcdFx0ZjQ6ICdGNCcsXG5cdFx0XHRmNTogJ0Y1Jyxcblx0XHRcdHIxOiAnUjEnLFxuXHRcdFx0cjI6ICdSMicsXG5cdFx0fSxcblx0XHRjc2RBbmRESUNyaXRlcmlhRGlzcGxheU9yZGVyOiBbXG5cdFx0XHQnZGInLFxuXHRcdFx0J2cxJyxcblx0XHRcdCdnMicsXG5cdFx0XHQnZzMnLFxuXHRcdFx0J2c0Jyxcblx0XHRcdCdnNScsXG5cdFx0XHQnZzYnLFxuXHRcdFx0J2c3Jyxcblx0XHRcdCdnOCcsXG5cdFx0XHQnZzknLFxuXHRcdFx0J2ExJyxcblx0XHRcdCdhMicsXG5cdFx0XHQnYTMnLFxuXHRcdFx0J28xJyxcblx0XHRcdCdvMicsXG5cdFx0XHQnbzMnLFxuXHRcdFx0J2YxJyxcblx0XHRcdCdmMicsXG5cdFx0XHQnZjMnLFxuXHRcdFx0J2Y0Jyxcblx0XHRcdCdmNScsXG5cdFx0XHQncjEnLFxuXHRcdFx0J3IyJyxcblx0XHRdLFxuXHRcdHhmZENyaXRlcmlhOiB7XG5cdFx0XHRkZWxldGU6IHdpbmRvdy53Z1VMUygn5Yig6ZmkJywgJ+WIqumZpCcpLFxuXHRcdFx0bWVyZ2U6IHdpbmRvdy53Z1VMUygn5ZCI5bm2JywgJ+WQiOS9tScpLFxuXHRcdFx0ZndkY3NkOiB3aW5kb3cud2dVTFMoJ+i9rOS6pOiHquW/q+mAn+WIoOmZpOWAmemAiScsICfovYnkuqToh6rlv6vpgJ/liKrpmaTlgJnpgbgnKSxcblx0XHRcdGZhbWU6IHdpbmRvdy53Z1VMUygn5om56YeP5YWz5rOo5bqm5o+Q5YigJywgJ+aJueasoemXnOazqOW6puaPkOWIqicpLFxuXHRcdFx0c3Vic3R1Yjogd2luZG93LndnVUxTKCfmibnph4/lsI/lsI/kvZzlk4Hmj5DliKAnLCAn5om55qyh5bCP5bCP5L2c5ZOB5o+Q5YiqJyksXG5cdFx0XHRiYXRjaDogd2luZG93LndnVUxTKCfmibnph4/lhbbku5bmj5DliKAnLCAn5om55qyh5YW25LuW5o+Q5YiqJyksXG5cdFx0fSxcblx0XHR4ZmRDcml0ZXJpYURpc3BsYXlPcmRlcjogWydkZWxldGUnLCAnbWVyZ2UnLCAnZndkY3NkJywgJ2ZhbWUnLCAnc3Vic3R1YicsICdiYXRjaCddLFxuXHRcdG5hbWVzcGFjZXNOb1NwZWNpYWw6IHtcblx0XHRcdDA6IHdpbmRvdy53Z1VMUygn77yI5p2h55uu77yJJywgJ++8iOaineebru+8iScpLFxuXHRcdFx0MTogJ1RhbGsnLFxuXHRcdFx0MjogJ1VzZXInLFxuXHRcdFx0MzogJ1VzZXIgdGFsaycsXG5cdFx0XHQ0OiAnTElCJyxcblx0XHRcdDU6ICdMSUIgdGFsaycsXG5cdFx0XHQ2OiAnRmlsZScsXG5cdFx0XHQ3OiAnRmlsZSB0YWxrJyxcblx0XHRcdDg6ICdNZWRpYVdpa2knLFxuXHRcdFx0OTogJ01lZGlhV2lraSB0YWxrJyxcblx0XHRcdDEwOiAnVGVtcGxhdGUnLFxuXHRcdFx0MTE6ICdUZW1wbGF0ZSB0YWxrJyxcblx0XHRcdDEyOiAnSGVscCcsXG5cdFx0XHQxMzogJ0hlbHAgdGFsaycsXG5cdFx0XHQxNDogJ0NhdGVnb3J5Jyxcblx0XHRcdDE1OiAnQ2F0ZWdvcnkgdGFsaycsXG5cdFx0XHQyNzQ6ICdXaWRnZXQnLFxuXHRcdFx0Mjc1OiAnV2lkZ2V0IHRhbGsnLFxuXHRcdFx0MzAwOiAnRmFubWFkZScsXG5cdFx0XHQzMDE6ICdGYW5tYWRlIHRhbGsnLFxuXHRcdFx0MzAyOiAnRHJhZnQnLFxuXHRcdFx0MzAzOiAnRHJhZnQgdGFsaycsXG5cdFx0XHQzMDQ6ICdTTVdEYXRhJyxcblx0XHRcdDMwNTogJ1NNV0RhdGEgdGFsaycsXG5cdFx0XHQ4Mjk6ICdNb2R1bGUgdGFsaycsXG5cdFx0fSxcblx0fTtcblx0LyoqXG5cdCAqIFNlY3Rpb24gZW50cnkgZm9ybWF0OlxuXHQgKlxuXHQgKiB7XG5cdCAqICAgdGl0bGU6IDxodW1hbi1yZWFkYWJsZSBzZWN0aW9uIHRpdGxlPixcblx0ICogICBtb2R1bGU6IDxuYW1lIG9mIHRoZSBhc3NvY2lhdGVkIG1vZHVsZSwgdXNlZCB0byBsaW5rIHRvIHNlY3Rpb25zPixcblx0ICogICBhZG1pbk9ubHk6IDx0cnVlIGZvciBhZG1pbi1vbmx5IHNlY3Rpb25zPixcblx0ICogICBoaWRkZW46IDx0cnVlIGZvciBhZHZhbmNlZCBwcmVmZXJlbmNlcyB0aGF0IHJhcmVseSBuZWVkIHRvIGJlIGNoYW5nZWQgLSB0aGV5IGNhbiBzdGlsbCBiZSBtb2RpZmllZCBieSBtYW51YWxseSBlZGl0aW5nIHR3aW5rbGVvcHRpb25zLmpzPixcblx0ICogICBwcmVmZXJlbmNlczogW1xuXHQgKiAgICAge1xuXHQgKiAgICAgICBuYW1lOiA8VHdpbmtsZUNvbmZpZyBwcm9wZXJ0eSBuYW1lPixcblx0ICogICAgICAgbGFiZWw6IDxodW1hbi1yZWFkYWJsZSBzaG9ydCBkZXNjcmlwdGlvbiAtIHVzZWQgYXMgYSBmb3JtIGxhYmVsPixcblx0ICogICAgICAgaGVscHRpcDogPChvcHRpb25hbCkgaHVtYW4tcmVhZGFibGUgdGV4dCAodXNpbmcgdmFsaWQgSFRNTCkgdGhhdCBjb21wbGVtZW50cyB0aGUgZGVzY3JpcHRpb24sIGxpa2UgbGltaXRzLCB3YXJuaW5ncywgZXRjLj5cblx0ICogICAgICAgYWRtaW5Pbmx5OiA8dHJ1ZSBmb3IgYWRtaW4tb25seSBwcmVmZXJlbmNlcz4sXG5cdCAqICAgICAgIHR5cGU6IDxzdHJpbmd8Ym9vbGVhbnxpbnRlZ2VyfGVudW18c2V0fGN1c3RvbUxpc3Q+IChjdXN0b21MaXN0IHN0b3JlcyBhbiBhcnJheSBvZiBKU09OIG9iamVjdHMgeyB2YWx1ZSwgbGFiZWwgfSksXG5cdCAqICAgICAgIGVudW1WYWx1ZXM6IDxmb3IgdHlwZSA9IFwiZW51bVwiOiBhIEpTT04gb2JqZWN0IHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgaW50ZXJuYWwgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIGh1bWFuLXJlYWRhYmxlIHN0cmluZ3M+LFxuXHQgKiAgICAgICBzZXRWYWx1ZXM6IDxmb3IgdHlwZSA9IFwic2V0XCI6IGEgSlNPTiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBpbnRlcm5hbCBuYW1lcyBhbmQgdGhlIHZhbHVlcyBhcmUgaHVtYW4tcmVhZGFibGUgc3RyaW5ncz4sXG5cdCAqICAgICAgIHNldERpc3BsYXlPcmRlcjogPChvcHRpb25hbCkgZm9yIHR5cGUgPSBcInNldFwiOiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBrZXlzIG9mIHNldFZhbHVlcyAoYXMgc3RyaW5ncykgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgZGlzcGxheWVkPixcblx0ICogICAgICAgY3VzdG9tTGlzdFZhbHVlVGl0bGU6IDxmb3IgdHlwZSA9IFwiY3VzdG9tTGlzdFwiOiB0aGUgaGVhZGluZyBmb3IgdGhlIGxlZnQgXCJ2YWx1ZVwiIGNvbHVtbiBpbiB0aGUgY3VzdG9tIGxpc3QgZWRpdG9yPixcblx0ICogICAgICAgY3VzdG9tTGlzdExhYmVsVGl0bGU6IDxmb3IgdHlwZSA9IFwiY3VzdG9tTGlzdFwiOiB0aGUgaGVhZGluZyBmb3IgdGhlIHJpZ2h0IFwibGFiZWxcIiBjb2x1bW4gaW4gdGhlIGN1c3RvbSBsaXN0IGVkaXRvcj5cblx0ICogICAgIH0sXG5cdCAqICAgICAuIC4gLlxuXHQgKiAgIF1cblx0ICogfSxcblx0ICogLiAuIC5cblx0ICpcblx0ICovXG5cdFR3aW5rbGUuY29uZmlnLnNlY3Rpb25zID0gW1xuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+W4uOinhCcsICfluLjopo8nKSxcblx0XHRcdG1vZHVsZTogJ2dlbmVyYWwnLFxuXHRcdFx0cHJlZmVyZW5jZXM6IFtcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy51c2VyVGFsa1BhZ2VNb2RlIG1heSB0YWtlIGFyZ3VtZW50czpcblx0XHRcdFx0Ly8gJ3dpbmRvdyc6IG9wZW4gYSBuZXcgd2luZG93LCByZW1lbWJlciB0aGUgb3BlbmVkIHdpbmRvd1xuXHRcdFx0XHQvLyAndGFiJzogb3BlbnMgaW4gYSBuZXcgdGFiLCBpZiBwb3NzaWJsZS5cblx0XHRcdFx0Ly8gJ2JsYW5rJzogZm9yY2Ugb3BlbiBpbiBhIG5ldyB3aW5kb3csIGV2ZW4gaWYgc3VjaCBhIHdpbmRvdyBleGlzdHNcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd1c2VyVGFsa1BhZ2VNb2RlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvZPopoHmiZPlvIDnlKjmiLforqjorrrpobXml7YnLCAn55W26KaB5omT6ZaL5L2/55So6ICF6KiO6KuW6aCB5pmCJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IHtcblx0XHRcdFx0XHRcdHdpbmRvdzogd2luZG93LndnVUxTKCflnKjnqpflj6PkuK3vvIzmm7/mjaLmiJDlhbblroPnlKjmiLflr7nor53pobUnLCAn5Zyo55W25YmN5YiG6aCB77yM5pu/5o+b5oiQ5YW25a6D55So5oi26KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0XHR0YWI6IHdpbmRvdy53Z1VMUygn5Zyo5paw5qCH562+6aG15LitJywgJ+WcqOaWsOWIhumggeS4rScpLFxuXHRcdFx0XHRcdFx0Ymxhbms6IHdpbmRvdy53Z1VMUygn5Zyo5YWo5paw55qE56qX5Y+j5LitJywgJ+WcqOaWsOimlueql+S4rScpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGlhbG9nTGFyZ2VGb250IChib29sZWFuKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2RpYWxvZ0xhcmdlRm9udCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5ZyoVHdpbmtsZeWvueivneahhuS4reS9v+eUqOWkp+WPt+Wtl+S9kycsICflnKhUd2lua2xl5bCN6Kmx5pa55aGK5Lit5L2/55So5aSn6Jmf5a2X5Z6LJyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlLmNvbmZpZy5kaXNhYmxlZE1vZHVsZXMgKGFycmF5KVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2Rpc2FibGVkTW9kdWxlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5YWz6Zet5oyH5a6a55qEVHdpbmtsZeaooeWdlycsICfpl5zplonmjIflrprnmoRUd2lua2xl5qih57WEJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+aCqOWcqOatpOmAieaLqeeahOWKn+iDveWwhuaXoOazleS9v+eUqO+8jOWPlua2iOmAieaLqeS7pemHjeaWsOWQr+eUqOWKn+iDveOAgicsXG5cdFx0XHRcdFx0XHQn5oKo5Zyo5q2k6YG45pOH55qE5Yqf6IO95bCH54Sh5rOV5L2/55So77yM5Y+W5raI6YG45pOH5Lul6YeN5paw5ZWf55So5Yqf6IO944CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ3NldCcsXG5cdFx0XHRcdFx0c2V0VmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRhcnY6IHdpbmRvdy53Z1VMUygn5ZGK54q2JywgJ+WRiueLgCcpLFxuXHRcdFx0XHRcdFx0d2FybjogJ+itpuWRiicsXG5cdFx0XHRcdFx0XHRibG9jazogd2luZG93LndnVUxTKCflsIHnpoEnLCAn5bCB6Y6WJyksXG5cdFx0XHRcdFx0XHR0YWxrYmFjazogJ+mAmuWRiicsXG5cdFx0XHRcdFx0XHRzcGVlZHk6IHdpbmRvdy53Z1VMUygn6YCf5YigJywgJ+mAn+WIqicpLFxuXHRcdFx0XHRcdFx0Y29weXZpbzogd2luZG93LndnVUxTKCfkvrXmnYMnLCAn5L615qyKJyksXG5cdFx0XHRcdFx0XHR4ZmQ6IHdpbmRvdy53Z1VMUygn5o+Q5YigJywgJ+aPkOWIqicpLFxuXHRcdFx0XHRcdFx0aW1hZ2U6IHdpbmRvdy53Z1VMUygn5Zu+5p2DJywgJ+WcluasiicpLFxuXHRcdFx0XHRcdFx0cHJvdGVjdDogd2luZG93LndnVUxTKCfkv53miqQnLCAn5L+d6K23JyksXG5cdFx0XHRcdFx0XHR0YWc6IHdpbmRvdy53Z1VMUygn5qCH6K6wJywgJ+aomeiomCcpLFxuXHRcdFx0XHRcdFx0c3R1YjogJ+Wwj+S9nOWTgScsXG5cdFx0XHRcdFx0XHRkaWZmOiB3aW5kb3cud2dVTFMoJ+W3ruW8gicsICflt67nlbAnKSxcblx0XHRcdFx0XHRcdHVubGluazogd2luZG93LndnVUxTKCfpk77lhaUnLCAn6YCj5YWlJyksXG5cdFx0XHRcdFx0XHRmbHVmZjogJ+WbnumAgCcsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZS5jb25maWcuZGlzYWJsZWRTeXNvcE1vZHVsZXMgKGFycmF5KVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2Rpc2FibGVkU3lzb3BNb2R1bGVzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflhbPpl63mjIflrprnmoRUd2lua2xl566h55CG5ZGY5qih5Z2XJywgJ+mXnOmWieaMh+WumueahFR3aW5rbGXnrqHnkIblk6HmqKHntYQnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5oKo5Zyo5q2k6YCJ5oup55qE5Yqf6IO95bCG5peg5rOV5L2/55So77yM5Y+W5raI6YCJ5oup5Lul6YeN5paw5ZCv55So5Yqf6IO944CCJyxcblx0XHRcdFx0XHRcdCfmgqjlnKjmraTpgbjmk4fnmoTlip/og73lsIfnhKHms5Xkvb/nlKjvvIzlj5bmtojpgbjmk4fku6Xph43mlrDllZ/nlKjlip/og73jgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogJ3NldCcsXG5cdFx0XHRcdFx0c2V0VmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRiYXRjaGRlbGV0ZTogd2luZG93LndnVUxTKCfmibnliKAnLCAn5om55YiqJyksXG5cdFx0XHRcdFx0XHRiYXRjaHVuZGVsZXRlOiB3aW5kb3cud2dVTFMoJ+aJueWkjScsICfmibnlvqknKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WRiueKticsICflkYrni4AnKSxcblx0XHRcdG1vZHVsZTogJ2FydicsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3NwaVdhdGNoUmVwb3J0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj5HotbflgoDlhKHosIPmn6Xml7bliqDlhaXliLDnm5Hop4bliJfooagnLCAn55m86LW35YKA5YSh6Kq/5p+l5pmC5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WwgeemgeeUqOaItycsICflsIHpjpbkvb/nlKjogIUnKSxcblx0XHRcdG1vZHVsZTogJ2Jsb2NrJyxcblx0XHRcdGFkbWluT25seTogdHJ1ZSxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGVmYXVsdFRvQmxvY2s2NCAoYm9vbGVhbilcblx0XHRcdFx0Ly8gV2hldGhlciB0byBkZWZhdWx0IHRvIGp1c3QgYmxvY2tpbmcgdGhlIC82NCBvbiBvciBvZmZcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdkZWZhdWx0VG9CbG9jazY0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflr7nkuo5JUHY25Zyw5Z2A77yM6buY6K6k6YCJ5oup5bCB56aBLzY05q61JywgJ+WwjeaWvElQdjblnLDlnYDvvIzpoJDoqK3pgbjmk4flsIHpjpYvNjTmrrUnKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGVmYXVsdFRvUGFydGlhbEJsb2NrcyAoYm9vbGVhbilcblx0XHRcdFx0Ly8gV2hldGhlciB0byBkZWZhdWx0IHBhcnRpYWwgYmxvY2tzIG9uIG9yIG9mZlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2RlZmF1bHRUb1BhcnRpYWxCbG9ja3MnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aJk+W8gOWwgeemgeiPnOWNleaXtum7mOiupOmAieaLqemDqOWIhuWwgeemgScsICfmiZPplovlsIHpjpbpgbjllq7mmYLpoJDoqK3pgbjmk4fpg6jliIblsIHpjpYnKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcud2F0Y2hCbG9ja05vdGljZXMgKHN0cmluZylcblx0XHRcdFx0Ly8gV2F0Y2hsaXN0IHNldHRpbmcgZm9yIHRoZSBwYWdlIHdoaWNoIGhhcyBiZWVuIGRpc3BhdGNoZWQgYW4gd2FybmluZyBvciBub3RpY2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaEJsb2NrTm90aWNlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflj5HpgIHlsIHnpoHmqKHmnb/ml7bliqDlhaXnlKjmiLforqjorrrpobXliLDnm5Hop4bliJfooagnLFxuXHRcdFx0XHRcdFx0J+eZvOmAgeWwgemOluaooeadv+aZguWKoOWFpeS9v+eUqOiAheiojuirlumggeWIsOebo+imlua4heWWridcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdjdXN0b21CbG9ja1JlYXNvbkxpc3QnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieWwgeemgeeQhueUsScsICfoh6roqILlsIHpjpbnkIbnlLEnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5oKo5Y+v5Lul5Yqg5YWl5bi455So55qE5bCB56aB55CG55Sx44CC6Ieq5a6a5LmJ55qE5bCB56aB55CG55Sx5Lya5Ye6546w5Zyo5LiA6Iis55qE5bCB56aB55CG55Sx5LiL5pa544CCJyxcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XliqDlhaXluLjnlKjnmoTlsIHpjpbnkIbnlLHjgILoh6roqILnmoTlsIHpjpbnkIbnlLHmnIPlh7rnj77lnKjkuIDoiKznmoTlsIHpjpbnkIbnlLHkuIvmlrnjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnY3VzdG9tTGlzdCcsXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdFZhbHVlVGl0bGU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfkvb/nlKjlsIHnpoHmqKHmnb/vvIjpu5jorqTkuLogdXctYmxvY2sx77yJJyxcblx0XHRcdFx0XHRcdCfkvb/nlKjlsIHpjpbmqKHmnb/vvIjpoJDoqK3ngrogdXctYmxvY2sx77yJJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdExhYmVsVGl0bGU6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfigJznlLHkuo7igKbmgqjlt7LooqvlsIHnpoHigJ3lj4rlsIHnpoHml6Xlv5fnkIbnlLEnLFxuXHRcdFx0XHRcdFx0J+OAjOeUseaWvOKApuaCqOW3suiiq+WwgemOluOAjeWPiuWwgemOluaXpeiqjOeQhueUsSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WbvueJh+WIoOmZpCcsICflnJbniYfliKrpmaQnKSxcblx0XHRcdG1vZHVsZTogJ2ltYWdlJyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcubm90aWZ5VXNlck9uRGVsaSAoYm9vbGVhbilcblx0XHRcdFx0Ly8gSWYgdGhlIHVzZXIgc2hvdWxkIGJlIG5vdGlmaWVkIGFmdGVyIHBsYWNpbmcgYSBmaWxlIGRlbGV0aW9uIHRhZ1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ25vdGlmeVVzZXJPbkRlbGknLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOWLvumAieKAnOmAmuefpeWIm+W7uuiAheKAnScsICfpoJDoqK3li77pgbjjgIzpgJrnn6Xlu7rnq4vogIXjgI0nKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGVsaVdhdGNoUGFnZSAoc3RyaW5nKVxuXHRcdFx0XHQvLyBUaGUgd2F0Y2hsaXN0IHNldHRpbmcgb2YgdGhlIHBhZ2UgdGFnZ2VkIGZvciBkZWxldGlvbi5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdkZWxpV2F0Y2hQYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDlm77niYfml7bliqDlhaXliLDnm5Hop4bliJfooagnLCAn5qiZ6KiY5ZyW54mH5pmC5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLmRlbGlXYXRjaFVzZXIgKHN0cmluZylcblx0XHRcdFx0Ly8gVGhlIHdhdGNobGlzdCBzZXR0aW5nIG9mIHRoZSB1c2VyIHRhbGsgcGFnZSBpZiBhIG5vdGlmaWNhdGlvbiBpcyBwbGFjZWQuXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVsaVdhdGNoVXNlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qCH6K6w5Zu+54mH5pe25Yqg5YWl5Yib5bu66ICF6K6o6K666aG15Yiw55uR6KeG5YiX6KGoJywgJ+aomeiomOWclueJh+aZguWKoOWFpeW7uueri+iAheiojuirlumggeWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfkv53miqQnLCAn5L+d6K23JyksXG5cdFx0XHRtb2R1bGU6ICdwcm90ZWN0Jyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnd2F0Y2hSZXF1ZXN0ZWRQYWdlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6K+35rGC5L+d5oqk6aG16Z2i5pe25Yqg5YWl5Yiw55uR6KeG5YiX6KGoJywgJ+iri+axguS/neitt+mggemdouaZguWKoOWFpeWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFBQVGFnZ2VkUGFnZXMnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOS/neaKpOaooeadv+aXtuWKoOWFpeWIsOebkeinhuWIl+ihqCcsICfmqJnoqJjkv53orbfmqKHmnb/mmYLliqDlhaXliLDnm6PoppbmuIXllq4nKSxcblx0XHRcdFx0XHR0eXBlOiAnZW51bScsXG5cdFx0XHRcdFx0ZW51bVZhbHVlczogVHdpbmtsZS5jb25maWcud2F0Y2hsaXN0RW51bXMsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnd2F0Y2hQcm90ZWN0ZWRQYWdlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L+d5oqk5pe25Yqg5YWl5Yiw55uR6KeG5YiX6KGoJywgJ+S/neitt+aZguWKoOWFpeWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfoi6XlnKjkv53miqTlkI7kuZ/moIforrDpobXpnaLvvIzliJnkvb/nlKjmoIforrDpobXpnaLnmoTlj4LmlbDorr7nva7jgIInLFxuXHRcdFx0XHRcdFx0J+iLpeWcqOS/neitt+W+jOS5n+aomeiomOmggemdou+8jOWJh+S9v+eUqOaomeiomOmggemdoueahOWBj+WlveioreWumuOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGFkbWluT25seTogdHJ1ZSxcblx0XHRcdFx0XHR0eXBlOiAnZW51bScsXG5cdFx0XHRcdFx0ZW51bVZhbHVlczogVHdpbmtsZS5jb25maWcud2F0Y2hsaXN0RW51bXMsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dGl0bGU6ICflm57pgIAnLFxuXHRcdFx0Ly8gdHdpbmtsZWZsdWZmIG1vZHVsZVxuXHRcdFx0bW9kdWxlOiAnZmx1ZmYnLFxuXHRcdFx0cHJlZmVyZW5jZXM6IFtcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5hdXRvTWVudUFmdGVyUm9sbGJhY2sgKGJvb2wpXG5cdFx0XHRcdC8vIE9wdGlvbiB0byBhdXRvbWF0aWNhbGx5IG9wZW4gdGhlIHdhcm5pbmcgbWVudSBpZiB0aGUgdXNlciB0YWxrIHBhZ2UgaXMgb3BlbmVkIHBvc3QtcmV2ZXJzaW9uXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnYXV0b01lbnVBZnRlclJvbGxiYWNrJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WcqFR3aW5rbGXlm57pgIDlkI7oh6rliqjmiZPlvIDnlKjmiLforqjorrrpobXkuIrnmoRUd2lua2xl6K2m5ZGK6I+c5Y2VJyxcblx0XHRcdFx0XHRcdCflnKhUd2lua2xl5Zue6YCA5b6M6Ieq5YuV5omT6ZaL5L2/55So6ICF6KiO6KuW6aCB5LiK55qEVHdpbmtsZeitpuWRiumBuOWWridcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn5LuF5Zyo6YCJ5Y+W5LiL5pa55a+55bqU5qGG5pe25omN5omn6KGMJywgJ+WDheWcqOmBuOWPluS4i+aWueWwjeaHieahhuaZguaJjeWft+ihjCcpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5vcGVuVGFsa1BhZ2UgKGFycmF5KVxuXHRcdFx0XHQvLyBXaGF0IHR5cGVzIG9mIGFjdGlvbnMgdGhhdCBzaG91bGQgcmVzdWx0IGluIG9wZW5pbmcgb2YgdGFsayBwYWdlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnb3BlblRhbGtQYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflnKjov5nkupvnsbvlnovnmoTlm57pgIDlkI7miZPlvIDnlKjmiLforqjorrrpobUnLCAn5Zyo6YCZ5Lqb6aGe5Yil55qE5Zue6YCA5b6M5omT6ZaL5L2/55So6ICF6KiO6KuW6aCBJyksXG5cdFx0XHRcdFx0dHlwZTogJ3NldCcsXG5cdFx0XHRcdFx0c2V0VmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRub3JtOiB3aW5kb3cud2dVTFMoJ+W4uOinhOWbnumAgCcsICfluLjopo/lm57pgIAnKSxcblx0XHRcdFx0XHRcdHZhbmQ6IHdpbmRvdy53Z1VMUygn56C05Z2P5Zue6YCAJywgJ+egtOWjnuWbnumAgCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcub3BlblRhbGtQYWdlT25BdXRvUmV2ZXJ0IChib29sKVxuXHRcdFx0XHQvLyBEZWZpbmVzIGlmIHRhbGsgcGFnZSBzaG91bGQgYmUgb3BlbmVkIHdoZW4gY2FsbGluZyByZXZlcnQgZnJvbSBjb250cmlicyBvciByZWNlbnQgY2hhbmdlcyBwYWdlcy4gSWYgc2V0IHRvIHRydWUsIG9wZW5UYWxrUGFnZSBkZWZpbmVzIHRoZW4gaWYgdGFsayBwYWdlIHdpbGwgYmUgb3BlbmVkLlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ29wZW5UYWxrUGFnZU9uQXV0b1JldmVydCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjku47nlKjmiLfotKHnjK7lj4rmnIDov5Hmm7TmlLnkuK3lj5Hotbflm57pgIDml7bmiZPlvIDnlKjmiLforqjorrrpobUnLFxuXHRcdFx0XHRcdFx0J+WcqOW+nuS9v+eUqOiAheiyoueNu+WPiui/keacn+iuiuabtOS4reeZvOi1t+WbnumAgOaZguaJk+mWi+S9v+eUqOiAheiojuirlumggSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn5b2T5a6D5omT5byA5pe277yM5L6d6LWW5LiK5LiA5Liq6K6+572u44CCJywgJ+eVtuWug+aJk+mWi+aZgu+8jOS+neiztOS4iuS4gOWAi+ioreWumuOAgicpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5yb2xsYmFja0luUGxhY2UgKGJvb2wpXG5cdFx0XHRcdC8vXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAncm9sbGJhY2tJblBsYWNlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WcqOS7jueUqOaIt+i0oeeMruWPiuacgOi/keabtOaUueS4reWPkei1t+WbnumAgOaXtuS4jeWIt+aWsOmhtemdoicsXG5cdFx0XHRcdFx0XHQn5Zyo5b6e5L2/55So6ICF6LKi54275Y+K6L+R5pyf6K6K5pu05Lit55m86LW35Zue6YCA5pmC5LiN6YeN5paw5pW055CG6aCB6Z2iJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+W9k+Wug+aJk+W8gOaXtu+8jFR3aW5rbGXlsIbkuI3kvJrlnKjku47nlKjmiLfotKHnjK7lj4rmnIDov5Hmm7TmlLnkuK3lj5Hotbflm57pgIDml7bliLfmlrDpobXpnaLvvIzlhYHorrjmgqjkuIDmrKHmgKflm57pgIDlpJrkuKrnvJbovpHjgIInLFxuXHRcdFx0XHRcdFx0J+eVtuWug+aJk+mWi+aZgu+8jFR3aW5rbGXlsIfkuI3mnIPlnKjlvp7kvb/nlKjogIXosqLnjbvlj4rov5HmnJ/orormm7TkuK3nmbzotbflm57pgIDmmYLph43mlrDmlbTnkIbpoIHpnaLvvIzlhYHoqLHmgqjkuIDmrKHmgKflm57pgIDlpJrlgIvnt6jovK/jgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcubWFya1JldmVydGVkUGFnZXNBc01pbm9yIChhcnJheSlcblx0XHRcdFx0Ly8gV2hhdCB0eXBlcyBvZiBhY3Rpb25zIHRoYXQgc2hvdWxkIHJlc3VsdCBpbiBtYXJraW5nIGVkaXQgYXMgbWlub3Jcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdtYXJrUmV2ZXJ0ZWRQYWdlc0FzTWlub3InLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+Wwhui/meS6m+exu+Wei+eahOWbnumAgOagh+iusOS4uuWwj+S/ruaUuScsICflsIfpgJnkupvpoZ7liKXnmoTlm57pgIDmqJnoqJjngrrlsI/kv67mlLknKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IHtcblx0XHRcdFx0XHRcdG5vcm06IHdpbmRvdy53Z1VMUygn5bi46KeE5Zue6YCAJywgJ+W4uOimj+WbnumAgCcpLFxuXHRcdFx0XHRcdFx0dmFuZDogd2luZG93LndnVUxTKCfnoLTlnY/lm57pgIAnLCAn56C05aOe5Zue6YCAJyksXG5cdFx0XHRcdFx0XHR0b3Jldjogd2luZG93LndnVUxTKCfigJzmgaLlpI3mraTniYjmnKzigJ0nLCAn44CM5oGi5b6p5q2k54mI5pys44CNJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy53YXRjaFJldmVydGVkUGFnZXMgKGFycmF5KVxuXHRcdFx0XHQvLyBXaGF0IHR5cGVzIG9mIGFjdGlvbnMgdGhhdCBzaG91bGQgcmVzdWx0IGluIGZvcmNlZCBhZGRpdGlvbiB0byB3YXRjaGxpc3Rcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFJldmVydGVkUGFnZXMnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+aKiui/meS6m+exu+Wei+eahOWbnumAgOWKoOWFpeWIsOebkeinhuWIl+ihqCcsICfmiorpgJnkupvpoZ7liKXnmoTlm57pgIDliqDlhaXliLDnm6PoppbmuIXllq4nKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IHtcblx0XHRcdFx0XHRcdG5vcm06IHdpbmRvdy53Z1VMUygn5bi46KeE5Zue6YCAJywgJ+W4uOimj+WbnumAgCcpLFxuXHRcdFx0XHRcdFx0dmFuZDogd2luZG93LndnVUxTKCfnoLTlnY/lm57pgIAnLCAn56C05aOe5Zue6YCAJyksXG5cdFx0XHRcdFx0XHR0b3Jldjogd2luZG93LndnVUxTKCfigJzmgaLlpI3mraTniYjmnKzigJ0nLCAn44CM5oGi5b6p5q2k54mI5pys44CNJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy53YXRjaFJldmVydGVkRXhwaXJ5XG5cdFx0XHRcdC8vIElmIGFueSBvZiB0aGUgYWJvdmUgaXRlbXMgYXJlIHNlbGVjdGVkLCB3aGV0aGVyIHRvIGV4cGlyZSB0aGUgd2F0Y2hcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFJldmVydGVkRXhwaXJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvZPlm57pgIDpobXpnaLml7bvvIzliqDlhaXliLDnm5Hop4bliJfooajnmoTmnJ/pmZAnLCAn55W25Zue6YCA6aCB6Z2i5pmC77yM5Yqg5YWl5Yiw55uj6KaW5riF5Zau55qE5pyf6ZmQJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLm9mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQgKGJvb2xlYW4pXG5cdFx0XHRcdC8vIElmIHRvIG9mZmVyIGEgcHJvbXB0IGZvciBleHRyYSBzdW1tYXJ5IHJlYXNvbiBmb3Igbm9ybWFsIHJldmVydHMsIGRlZmF1bHQgdG8gdHJ1ZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ29mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W4uOinhOWbnumAgOaXtuivoumXrueQhueUsScsICfluLjopo/lm57pgIDmmYLoqaLllY/nkIbnlLEnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoJ+KAnOW4uOinhOKAneWbnumAgOaYr+S4remXtOeahOmCo+S4qlvlm57pgIBd6ZO+5o6l44CCJywgJ+OAjOW4uOimj+OAjeWbnumAgOaYr+S4remWk+eahOmCo+WAi1vlm57pgIBd6YCj57WQ44CCJyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2NvbmZpcm1PbkZsdWZmJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflm57pgIDliY3opoHmsYLnoa7orqTvvIjmiYDmnInorr7lpIfvvIknLCAn5Zue6YCA5YmN6KaB5rGC56K66KqN77yI5omA5pyJ6KOd572u77yJJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WvueS6juS9v+eUqOenu+WKqOiuvuWkh+eahOeUqOaIt++8jOaIluiAheaEj+W/l+S4jeWdmuWumueahOOAgicsXG5cdFx0XHRcdFx0XHQn5bCN5pa85L2/55So6KGM5YuV6KOd572u55qE5L2/55So6ICF77yM5oiW6ICF5oSP5b+X5LiN5aCF5a6a55qE44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnNob3dSb2xsYmFja0xpbmtzIChhcnJheSlcblx0XHRcdFx0Ly8gV2hlcmUgVHdpbmtsZSBzaG91bGQgc2hvdyByb2xsYmFjayBsaW5rczpcblx0XHRcdFx0Ly8gZGlmZiwgb3RoZXJzLCBtaW5lLCBjb250cmlicywgaGlzdG9yeSwgcmVjZW50XG5cdFx0XHRcdC8vIE5vdGUgZnJvbSBUVE86IHxjb250cmlic3wgc2VlbXMgdG8gYmUgZXF1YWwgdG8gfG90aGVyc3wgKyB8bWluZXwsIGkuZS4gcmVkdW5kYW50LCBzbyBJIGxlZnQgaXQgb3V0IGhlcmVzXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnc2hvd1JvbGxiYWNrTGlua3MnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOi/meS6m+mhtemdouS4iuaYvuekuuWbnumAgOmTvuaOpScsICflnKjpgJnkupvpoIHpnaLkuIrpoa/npLrlm57pgIDpgKPntZAnKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IHtcblx0XHRcdFx0XHRcdGRpZmY6IHdpbmRvdy53Z1VMUygn5beu5byCJywgJ+W3rueVsCcpLFxuXHRcdFx0XHRcdFx0aGlzdG9yeTogd2luZG93LndnVUxTKCfljoblj7LorrDlvZUnLCAn5q235Y+y6KiY6YyEJyksXG5cdFx0XHRcdFx0XHRvdGhlcnM6IHdpbmRvdy53Z1VMUygn5YW25a6D55So5oi355qE6LSh54yuJywgJ+WFtuWug+S9v+eUqOiAheeahOiyoueNuycpLFxuXHRcdFx0XHRcdFx0bWluZTogd2luZG93LndnVUxTKCfmiJHnmoTotKHnjK4nLCAn5oiR55qE6LKi5427JyksXG5cdFx0XHRcdFx0XHRyZWNlbnRjaGFuZ2VzOiB3aW5kb3cud2dVTFMoJ+acgOi/keabtOaUuScsICfov5HmnJ/orormm7QnKSxcblx0XHRcdFx0XHRcdHJlY2VudGNoYW5nZXNsaW5rZWQ6IHdpbmRvdy53Z1VMUygn55u45YWz5pu05pS5JywgJ+ebuOmXnOiuiuabtCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY3VzdG9tUmV2ZXJ0U3VtbWFyeScsXG5cdFx0XHRcdFx0bGFiZWw6ICflm57pgIDnkIbnlLEnLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCflnKjmn6XnnIvlt67lvILml7blj6/pgInvvIzku4XlloTmhI/lm57pgIDjgIHluLjop4Tlm57pgIDjgIHmgaLlpI3mraTniYjmnKwnLFxuXHRcdFx0XHRcdFx0J+WcqOaqouimluW3rueVsOaZguWPr+mBuO+8jOWDheWWhOaEj+WbnumAgOOAgeW4uOimj+WbnumAgOOAgeaBouW+qeatpOeJiOacrCdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdjdXN0b21MaXN0Jyxcblx0XHRcdFx0XHRjdXN0b21MaXN0VmFsdWVUaXRsZTogJ+eQhueUsScsXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdExhYmVsVGl0bGU6IHdpbmRvdy53Z1VMUygn5pi+56S655qE5paH5a2XJywgJ+mhr+ekuueahOaWh+WtlycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+W/q+mAn+WIoOmZpCcsICflv6vpgJ/liKrpmaQnKSxcblx0XHRcdG1vZHVsZTogJ3NwZWVkeScsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3NwZWVkeVNlbGVjdGlvblN0eWxlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfku4DkuYjml7blgJnmiafooYzmoIforrDmiJbliKDpmaQnLCAn5LuA6bq85pmC5YCZ5Z+36KGM5qiZ6KiY5oiW5Yiq6ZmkJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IHtcblx0XHRcdFx0XHRcdGJ1dHRvbkNsaWNrOiB3aW5kb3cud2dVTFMoJ+W9k+aIkeeCueKAnOaPkOS6pOKAneaXticsICfnlbbmiJHpu57jgIzmj5DkuqTjgI3mmYInKSxcblx0XHRcdFx0XHRcdHJhZGlvQ2xpY2s6IHdpbmRvdy53Z1VMUygn5b2T5oiR54K55LiA5Liq6YCJ6aG55pe2JywgJ+eVtuaIkem7nuS4gOWAi+mBuOmgheaZgicpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcud2F0Y2hTcGVlZHlQYWdlcyAoYXJyYXkpXG5cdFx0XHRcdC8vIFdoZXRoZXIgdG8gYWRkIHNwZWVkeSB0YWdnZWQgcGFnZXMgdG8gd2F0Y2hsaXN0XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnd2F0Y2hTcGVlZHlQYWdlcycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5bCG5Lul5LiL55CG55Sx5Yqg5YWl5Yiw55uR6KeG5YiX6KGoJywgJ+Wwh+S7peS4i+eQhueUseWKoOWFpeWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdzZXQnLFxuXHRcdFx0XHRcdHNldFZhbHVlczogVHdpbmtsZS5jb25maWcuY29tbW9uU2V0cy5jc2RDcml0ZXJpYSxcblx0XHRcdFx0XHRzZXREaXNwbGF5T3JkZXI6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQ3JpdGVyaWFEaXNwbGF5T3JkZXIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcud2F0Y2hTcGVlZHlFeHBpcnlcblx0XHRcdFx0Ly8gSWYgYW55IG9mIHRoZSBhYm92ZSBpdGVtcyBhcmUgc2VsZWN0ZWQsIHdoZXRoZXIgdG8gZXhwaXJlIHRoZSB3YXRjaFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3dhdGNoU3BlZWR5RXhwaXJ5Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflvZPmoIforrDpobXpnaLml7bvvIzliqDlhaXliLDnm5Hop4bliJfooajnmoTmnJ/pmZAnLCAn55W25qiZ6KiY6aCB6Z2i5pmC77yM5Yqg5YWl5Yiw55uj6KaW5riF5Zau55qE5pyf6ZmQJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLm1hcmtTcGVlZHlQYWdlc0FzUGF0cm9sbGVkIChib29sZWFuKVxuXHRcdFx0XHQvLyBJZiwgd2hlbiBhcHBseWluZyBzcGVlZHkgdGVtcGxhdGUgdG8gcGFnZSwgdG8gbWFyayB0aGUgcGFnZSBhcyBwYXRyb2xsZWQgKGlmIHRoZSBwYWdlIHdhcyByZWFjaGVkIGZyb20gTmV3UGFnZXMpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbWFya1NwZWVkeVBhZ2VzQXNQYXRyb2xsZWQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOaXtuagh+iusOmhtemdouS4uuW3suW3oeafpe+8iOWmguWPr+iDve+8iScsICfmqJnoqJjmmYLmqJnoqJjpoIHpnaLngrrlt7Llt6Hmn6XvvIjlpoLlj6/og73vvIknKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcubm90aWZ5VXNlck9uU3BlZWR5RGVsZXRpb25Ob21pbmF0aW9uIChhcnJheSlcblx0XHRcdFx0Ly8gV2hhdCB0eXBlcyBvZiBhY3Rpb25zIHNob3VsZCByZXN1bHQgdGhhdCB0aGUgYXV0aG9yIG9mIHRoZSBwYWdlIGJlaW5nIG5vdGlmaWVkIG9mIG5vbWluYXRpb25cblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdub3RpZnlVc2VyT25TcGVlZHlEZWxldGlvbk5vbWluYXRpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S7heWcqOS9v+eUqOS7peS4i+eQhueUseaXtumAmuefpemhtemdouWIm+W7uuiAhScsICflg4XlnKjkvb/nlKjku6XkuIvnkIbnlLHmmYLpgJrnn6XpoIHpnaLlu7rnq4vogIUnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5bC9566h5oKo5Zyo5a+56K+d5qGG5Lit6YCJ5oup6YCa55+l77yM6YCa55+l5LuN5Y+q5Lya5Zyo5L2/55So6L+Z5Lqb55CG55Sx5pe25Y+R5Ye644CCJyxcblx0XHRcdFx0XHRcdCflhJjnrqHmgqjlnKjlsI3oqbHmlrnloYrkuK3pgbjmk4fpgJrnn6XvvIzpgJrnn6Xku43lj6rmnIPlnKjkvb/nlKjpgJnkupvnkIbnlLHmmYLnmbzlh7rjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQ3JpdGVyaWFOb3RpZmljYXRpb24sXG5cdFx0XHRcdFx0c2V0RGlzcGxheU9yZGVyOiBUd2lua2xlLmNvbmZpZy5jb21tb25TZXRzLmNzZENyaXRlcmlhTm90aWZpY2F0aW9uRGlzcGxheU9yZGVyLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnByb21wdEZvclNwZWVkeURlbGV0aW9uU3VtbWFyeSAoYXJyYXkgb2Ygc3RyaW5ncylcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdwcm9tcHRGb3JTcGVlZHlEZWxldGlvblN1bW1hcnknLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+S9v+eUqOS7peS4i+eQhueUseWIoOmZpOaXtuWFgeiuuOe8lui+keWIoOmZpOeQhueUsScsICfkvb/nlKjku6XkuIvnkIbnlLHliKrpmaTmmYLlhYHoqLHnt6jovK/liKrpmaTnkIbnlLEnKSxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogJ3NldCcsXG5cdFx0XHRcdFx0c2V0VmFsdWVzOiBUd2lua2xlLmNvbmZpZy5jb21tb25TZXRzLmNzZEFuZERJQ3JpdGVyaWEsXG5cdFx0XHRcdFx0c2V0RGlzcGxheU9yZGVyOiBUd2lua2xlLmNvbmZpZy5jb21tb25TZXRzLmNzZEFuZERJQ3JpdGVyaWFEaXNwbGF5T3JkZXIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcub3BlblVzZXJUYWxrUGFnZU9uU3BlZWR5RGVsZXRlIChhcnJheSBvZiBzdHJpbmdzKVxuXHRcdFx0XHQvLyBXaGF0IHR5cGVzIG9mIGFjdGlvbnMgdGhhdCBzaG91bGQgcmVzdWx0IHVzZXIgdGFsayBwYWdlIHRvIGJlIG9wZW5lZCB3aGVuIHNwZWVkaWx5IGRlbGV0aW5nIChhZG1pbiBvbmx5KVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ29wZW5Vc2VyVGFsa1BhZ2VPblNwZWVkeURlbGV0ZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L2/55So5Lul5LiL55CG55Sx5pe25omT5byA55So5oi36K6o6K666aG1JywgJ+S9v+eUqOS7peS4i+eQhueUseaZguaJk+mWi+S9v+eUqOiAheiojuirlumggScpLFxuXHRcdFx0XHRcdGFkbWluT25seTogdHJ1ZSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQW5kRElDcml0ZXJpYSxcblx0XHRcdFx0XHRzZXREaXNwbGF5T3JkZXI6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQW5kRElDcml0ZXJpYURpc3BsYXlPcmRlcixcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5kZWxldGVUYWxrUGFnZU9uRGVsZXRlIChib29sZWFuKVxuXHRcdFx0XHQvLyBJZiB0YWxrIHBhZ2UgaWYgZXhpc3RzIHNob3VsZCBhbHNvIGJlIGRlbGV0ZWQgKENTRCBHOCkgd2hlbiBzcGVkeWluZyBhIHBhZ2UgKGFkbWluIG9ubHkpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6k5Yu+6YCJ4oCc5Yig6Zmk6K6o6K666aG14oCdJywgJ+mgkOioreWLvumBuOOAjOWIqumZpOiojuirlumggeOAjScpLFxuXHRcdFx0XHRcdGFkbWluT25seTogdHJ1ZSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVsZXRlUmVkaXJlY3RzT25EZWxldGUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOWLvumAieKAnOWIoOmZpOmHjeWumuWQkeKAnScsICfpoJDoqK3li77pgbjjgIzliKrpmaTph43mlrDlsI7lkJHjgI0nKSxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLmRlbGV0ZVN5c29wRGVmYXVsdFRvRGVsZXRlIChib29sZWFuKVxuXHRcdFx0XHQvLyBNYWtlIHRoZSBDU0Qgc2NyZWVuIGRlZmF1bHQgdG8gXCJkZWxldGVcIiBpbnN0ZWFkIG9mIFwidGFnXCIgKGFkbWluIG9ubHkpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVsZXRlU3lzb3BEZWZhdWx0VG9EZWxldGUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOS4uuebtOaOpeWIoOmZpOiAjOS4jeaYr+agh+iusCcsICfpoJDoqK3ngrrnm7TmjqXliKrpmaTogIzkuI3mmK/mqJnoqJgnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Iul5bey5pS+572u5b+r6YCf5Yig6Zmk5qCH6K6w77yM5YiZ5rC46L+c6buY6K6k5Li65Yig6Zmk5qih5byP44CCJyxcblx0XHRcdFx0XHRcdCfoi6Xlt7LmlL7nva7lv6vpgJ/liKrpmaTmqJnoqJjvvIzliYfmsLjpgaDpoJDoqK3ngrrliKrpmaTmqKHlvI/jgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnNwZWVkeVdpbmRvd1dpZHRoIChpbnRlZ2VyKVxuXHRcdFx0XHQvLyBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgVHdpbmtsZSBTRCB3aW5kb3cgaW4gcGl4ZWxzXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnc3BlZWR5V2luZG93V2lkdGgnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W/q+mAn+WIoOmZpOWvueivneahhuWuveW6pu+8iOWDj+e0oO+8iScsICflv6vpgJ/liKrpmaTlsI3oqbHmlrnloYrlr6zluqbvvIjlg4/ntKDvvIknKSxcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlcicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuc3BlZWR5V2luZG93V2lkdGggKGludGVnZXIpXG5cdFx0XHRcdC8vIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBUd2lua2xlIFNEIHdpbmRvdyBpbiBwaXhlbHNcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdzcGVlZHlXaW5kb3dIZWlnaHQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+W/q+mAn+WIoOmZpOWvueivneahhumrmOW6pu+8iOWDj+e0oO+8iScsICflv6vpgJ/liKrpmaTlsI3oqbHmlrnloYrpq5jluqbvvIjlg4/ntKDvvIknKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Iul5oKo5pyJ5LiA5Y+w5b6I5aSn55qE5pi+56S65Zmo77yM5oKo5Y+v5Lul5bCG5q2k6LCD6auY44CCJyxcblx0XHRcdFx0XHRcdCfoi6XmgqjmnInkuIDlj7DlvojlpKfnmoTpoa/npLrlmajvvIzmgqjlj6/ku6XlsIfmraToqr/pq5jjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlcicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbG9nU3BlZWR5Tm9taW5hdGlvbnMnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOeUqOaIt+epuumXtOS4reiusOW9leaJgOacieW/q+mAn+WIoOmZpOaPkOWQjScsICflnKjkvb/nlKjogIXnqbrplpPkuK3oqJjpjITmiYDmnInlv6vpgJ/liKrpmaTmj5DlkI0nKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Z2e566h55CG5ZGY5peg5rOV6K6/6Zeu5Yiw5bey5Yig6Zmk55qE6LSh54yu77yM55So5oi356m66Ze05pel5b+X5o+Q5L6b5LqG5LiA5Liq5b6I5aW955qE5pa55rOV5p2l6K6w5b2V6L+Z5Lqb5Y6G5Y+y44CCJyxcblx0XHRcdFx0XHRcdCfpnZ7nrqHnkIblk6HnhKHms5XlrZjlj5bliLDlt7LliKrpmaTnmoTosqLnjbvvvIzkvb/nlKjogIXnqbrplpPml6Xoqozmj5DkvpvkuobkuIDlgIvlvojlpb3nmoTmlrnms5XkvoboqJjpjITpgJnkupvmrbflj7LjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnc3BlZWR5TG9nUGFnZU5hbWUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOatpOmhteS/neeVmeaXpeW/lycsICflnKjmraTpoIHkv53nlZnml6XoqownKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Zyo5q2k5qGG5Lit6L6T5YWl5a2Q6aG16Z2i5ZCN56ew77yM5oKo5bCG5ZyoVXNlcjo8aT7nlKjmiLflkI08L2k+LzxpPuWtkOmhtemdojwvaT7mib7liLBDU0Tml6Xlv5fjgILku4XlnKjlkK/nlKjml6Xlv5fml7blt6XkvZzjgIInLFxuXHRcdFx0XHRcdFx0J+WcqOatpOahhuS4rei8uOWFpeWtkOmggemdouWQjeeose+8jOaCqOWwh+WcqFVzZXI6PGk+5L2/55So6ICF5ZCN56ixPC9pPi88aT7lrZDpoIHpnaI8L2k+5om+5YiwQ1NE5pel6KqM44CC5YOF5Zyo5ZWf55So5pel6KqM5pmC5bel5L2c44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbm9Mb2dPblNwZWVkeU5vbWluYXRpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOS9v+eUqOS7peS4i+eQhueUseaXtuS4jeWBmuiusOW9lScsICflnKjkvb/nlKjku6XkuIvnkIbnlLHmmYLkuI3lgZroqJjpjIQnKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQW5kRElDcml0ZXJpYSxcblx0XHRcdFx0XHRzZXREaXNwbGF5T3JkZXI6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMuY3NkQW5kRElDcml0ZXJpYURpc3BsYXlPcmRlcixcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdlbmxhcmdlRzdJbnB1dCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5omp5aSnQ1NEIEc355qE5oyJ6ZKuJywgJ+aTtOWkp0NTRCBHN+eahOaMiemIlScpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn5omp5Li66buY6K6k55qE5Lik5YCN5aSn44CCJywgJ+aTtOeCuumgkOioreeahOWFqeWAjeWkp+OAgicpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfmoIforrAnLCAn5qiZ6KiYJyksXG5cdFx0XHRtb2R1bGU6ICd0YWcnLFxuXHRcdFx0cHJlZmVyZW5jZXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFRhZ2dlZFBhZ2VzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDml7bliqDlhaXliLDnm5Hop4bliJfooagnLCAn5qiZ6KiY5pmC5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3dhdGNoTWVyZ2VEaXNjdXNzaW9ucycsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yqg5YWl5ZCI5bm26K6o6K665pe255uR6KeG6K6o6K666aG1JywgJ+WKoOWFpeWQiOS9teiojuirluaZguebo+imluiojuirlumggScpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdtYXJrVGFnZ2VkUGFnZXNBc01pbm9yJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflsIbmoIforrDmoIforrDkuLrlsI/kv67mlLknLCAn5bCH5qiZ6KiY5qiZ6KiY54K65bCP5L+u5pS5JyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ21hcmtUYWdnZWRQYWdlc0FzUGF0cm9sbGVkJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpu5jorqTli77pgInigJzmoIforrDpobXpnaLkuLrlt7Llt6Hmn6XigJ3moYYnLCAn6aCQ6Kit5Yu+6YG444CM5qiZ6KiY6aCB6Z2i54K65bey5beh5p+l44CN5qGGJyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2dyb3VwQnlEZWZhdWx0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+m7mOiupOWLvumAieKAnOWQiOW5tuWIsHt7bXVsdGlwbGUgaXNzdWVzfX3igJ3lpI3pgInmoYYnLFxuXHRcdFx0XHRcdFx0J+mgkOioreWLvumBuOOAjOWQiOS9teWIsHt7bXVsdGlwbGUgaXNzdWVzfX3jgI3moLjlj5bmlrnloYonXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAndGFnQXJ0aWNsZVNvcnRPcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p2h55uu5qCH6K6w55qE6buY6K6k5p+l55yL5pa55byPJywgJ+aineebruaomeiomOeahOmgkOioreaqouimluaWueW8jycpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRjYXQ6IHdpbmRvdy53Z1VMUygn5oyJ57G75Z6LJywgJ+aMiemhnuWIpScpLFxuXHRcdFx0XHRcdFx0YWxwaGE6ICfmjInlrZfmr40nLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY3VzdG9tVGFnTGlzdCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ5p2h55uu57u05oqk5qCH6K6wJywgJ+iHquioguaineebrue2reitt+aomeiomCcpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn6L+Z5Lqb5Lya5Ye6546w5Zyo5YiX6KGo55qE5pyr5bC+44CCJywgJ+mAmeS6m+acg+WHuuePvuWcqOWIl+ihqOeahOacq+WwvuOAgicpLFxuXHRcdFx0XHRcdHR5cGU6ICdjdXN0b21MaXN0Jyxcblx0XHRcdFx0XHRjdXN0b21MaXN0VmFsdWVUaXRsZTogd2luZG93LndnVUxTKCfmqKHmnb/lkI3vvIjkuI3lkKvlpKfmi6zlj7fvvIknLCAn5qih5p2/5ZCN77yI5LiN5ZCr5aSn5ous6Jmf77yJJyksXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdExhYmVsVGl0bGU6IHdpbmRvdy53Z1VMUygn5pi+56S655qE5paH5a2XJywgJ+mhr+ekuueahOaWh+WtlycpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2N1c3RvbUZpbGVUYWdMaXN0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnmlofku7bnu7TmiqTmoIforrAnLCAn6Ieq6KiC5qqU5qGI57at6K235qiZ6KiYJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKCfov5nkupvkvJrlh7rnjrDlnKjliJfooajnmoTmnKvlsL7jgIInLCAn6YCZ5Lqb5pyD5Ye654++5Zyo5YiX6KGo55qE5pyr5bC+44CCJyksXG5cdFx0XHRcdFx0dHlwZTogJ2N1c3RvbUxpc3QnLFxuXHRcdFx0XHRcdGN1c3RvbUxpc3RWYWx1ZVRpdGxlOiB3aW5kb3cud2dVTFMoJ+aooeadv+WQje+8iOS4jeWQq+Wkp+aLrOWPt++8iScsICfmqKHmnb/lkI3vvIjkuI3lkKvlpKfmi6zomZ/vvIknKSxcblx0XHRcdFx0XHRjdXN0b21MaXN0TGFiZWxUaXRsZTogd2luZG93LndnVUxTKCfmmL7npLrnmoTmloflrZcnLCAn6aGv56S655qE5paH5a2XJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY3VzdG9tUmVkaXJlY3RUYWdMaXN0Jyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfoh6rlrprkuYnph43lrprlkJHnu7TmiqTmoIforrAnLCAn6Ieq6KiC6YeN5paw5bCO5ZCR57at6K235qiZ6KiYJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKCfov5nkupvkvJrlh7rnjrDlnKjliJfooajnmoTmnKvlsL7jgIInLCAn6YCZ5Lqb5pyD5Ye654++5Zyo5YiX6KGo55qE5pyr5bC+44CCJyksXG5cdFx0XHRcdFx0dHlwZTogJ2N1c3RvbUxpc3QnLFxuXHRcdFx0XHRcdGN1c3RvbUxpc3RWYWx1ZVRpdGxlOiB3aW5kb3cud2dVTFMoJ+aooeadv+WQje+8iOS4jeWQq+Wkp+aLrOWPt++8iScsICfmqKHmnb/lkI3vvIjkuI3lkKvlpKfmi6zomZ/vvIknKSxcblx0XHRcdFx0XHRjdXN0b21MaXN0TGFiZWxUaXRsZTogd2luZG93LndnVUxTKCfmmL7npLrnmoTmloflrZcnLCAn6aGv56S655qE5paH5a2XJyksXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dGl0bGU6ICflsI/kvZzlk4EnLFxuXHRcdFx0bW9kdWxlOiAnc3R1YicsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3dhdGNoU3R1YmJlZFBhZ2VzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmoIforrDml7bliqDlhaXliLDnm5Hop4bliJfooagnLCAn5qiZ6KiY5pmC5Yqg5YWl5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ21hcmtTdHViYmVkUGFnZXNBc01pbm9yJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflsIblsI/kvZzlk4HmoIforrDkuLrlsI/kv67mlLknLCAn5bCH5bCP5L2c5ZOB5qiZ6KiY54K65bCP5L+u5pS5JyksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ21hcmtTdHViYmVkUGFnZXNBc1BhdHJvbGxlZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6k5Yu+6YCJ4oCc5qCH6K6w6aG16Z2i5Li65bey5beh5p+l4oCd5qGGJywgJ+mgkOioreWLvumBuOOAjOaomeiomOmggemdoueCuuW3suW3oeafpeOAjeahhicpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdzdHViQXJ0aWNsZVNvcnRPcmRlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5p2h55uu5bCP5L2c5ZOB55qE6buY6K6k5p+l55yL5pa55byPJywgJ+aineebruWwj+S9nOWTgeeahOmgkOioreaqouimluaWueW8jycpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiB7XG5cdFx0XHRcdFx0XHRjYXQ6IHdpbmRvdy53Z1VMUygn5oyJ57G75Z6LJywgJ+aMiemhnuWIpScpLFxuXHRcdFx0XHRcdFx0YWxwaGE6ICfmjInlrZfmr40nLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY3VzdG9tU3R1Ykxpc3QnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+iHquWumuS5ieadoeebruWwj+S9nOWTgeagh+iusCcsICfoh6roqILmop3nm67lsI/kvZzlk4HmqJnoqJgnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoJ+i/meS6m+S8muWHuueOsOWcqOWIl+ihqOeahOacq+WwvuOAgicsICfpgJnkupvmnIPlh7rnj77lnKjliJfooajnmoTmnKvlsL7jgIInKSxcblx0XHRcdFx0XHR0eXBlOiAnY3VzdG9tTGlzdCcsXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdFZhbHVlVGl0bGU6IHdpbmRvdy53Z1VMUygn5qih5p2/5ZCN77yI5LiN5ZCr5aSn5ous5Y+377yJJywgJ+aooeadv+WQje+8iOS4jeWQq+Wkp+aLrOiZn++8iScpLFxuXHRcdFx0XHRcdGN1c3RvbUxpc3RMYWJlbFRpdGxlOiB3aW5kb3cud2dVTFMoJ+aYvuekuueahOaWh+WtlycsICfpoa/npLrnmoTmloflrZcnKSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogJ+mAmuWRiicsXG5cdFx0XHRtb2R1bGU6ICd0YWxrYmFjaycsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ21hcmtUYWxrYmFja0FzTWlub3InLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WwhumAmuWRiuagh+iusOS4uuWwj+S/ruaUuScsICflsIfpgJrlkYrmqJnoqJjngrrlsI/kv67mlLknKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnaW5zZXJ0VGFsa2JhY2tTaWduYXR1cmUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+mAmuWRiuaXtuWKoOWFpeetvuWQjScsICfpgJrlkYrmmYLliqDlhaXnsL3lkI0nKSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAndGFsa2JhY2tIZWFkaW5nJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfpgJrlkYrmiYDnlKjnmoTlsI/oioLmoIfpopgnLCAn6YCa5ZGK5omA55So55qE5bCP56+A5qiZ6aGMJyksXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbWFpbEhlYWRpbmcnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+KAnOacieaWsOmCruS7tuKAneaJgOeUqOeahOWwj+iKguagh+mimCcsICfjgIzmnInmlrDpg7Xku7bjgI3miYDnlKjnmoTlsI/nr4DmqJnpoYwnKSxcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCflj5bmtojpk77lhaUnLCAn5Y+W5raI6YCj5YWlJyksXG5cdFx0XHRtb2R1bGU6ICd1bmxpbmsnLFxuXHRcdFx0cHJlZmVyZW5jZXM6IFtcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy51bmxpbmtOYW1lc3BhY2VzIChhcnJheSlcblx0XHRcdFx0Ly8gSW4gd2hhdCBuYW1lc3BhY2VzIHVubGluayBzaG91bGQgaGFwcGVuLCBkZWZhdWx0IGluIDAgKGFydGljbGUpIGFuZCAxMDAgKHBvcnRhbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd1bmxpbmtOYW1lc3BhY2VzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflj5bmtojku6XkuIvlkb3lkI3nqbrpl7TkuK3nmoTlj43lkJHpk77mjqUnLCAn5Y+W5raI5Lul5LiL5ZG95ZCN56m66ZaT5Lit55qE5Y+N5ZCR6YCj57WQJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ivt+mBv+WFjemAieaLqeiuqOiuuumhte+8jOWboOi/meagt+S8muWvvOiHtFR3aW5rbGXor5Xlm77kv67mlLnorqjorrrlrZjmoaPjgIInLFxuXHRcdFx0XHRcdFx0J+iri+mBv+WFjemBuOaTh+iojuirlumgge+8jOWboOmAmeaoo+acg+WwjuiHtFR3aW5rbGXoqablnJbkv67mlLnoqI7oq5blrZjmqpTjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMubmFtZXNwYWNlc05vU3BlY2lhbCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCforablkYrnlKjmiLcnLCAn6K2m5ZGK5L2/55So6ICFJyksXG5cdFx0XHRtb2R1bGU6ICd3YXJuJyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuZGVmYXVsdFdhcm5pbmdHcm91cCAoaW50KVxuXHRcdFx0XHQvLyBpZiB0cnVlLCB3YXRjaCB0aGUgcGFnZSB3aGljaCBoYXMgYmVlbiBkaXNwYXRjaGVkIGFuIHdhcm5pbmcgb3Igbm90aWNlLCBpZiBmYWxzZSwgZGVmYXVsdCBhcHBsaWVzXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnZGVmYXVsdFdhcm5pbmdHcm91cCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6k6K2m5ZGK57qn5YirJywgJ+mgkOioreitpuWRiue0muWIpScpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiB7XG5cdFx0XHRcdFx0XHQxOiAnMe+8muazqOaEjycsXG5cdFx0XHRcdFx0XHQyOiAnMu+8muitpuWRiicsXG5cdFx0XHRcdFx0XHQzOiB3aW5kb3cud2dVTFMoJ+WNleWxgue6p+aPkOmGkicsICfllq7lsaTntJrmj5DphpInKSxcblx0XHRcdFx0XHRcdDQ6IHdpbmRvdy53Z1VMUygn5Y2V5bGC57qn6K2m5ZGKJywgJ+WWruWxpOe0muitpuWRiicpLFxuXHRcdFx0XHRcdFx0NTogd2luZG93LndnVUxTKCfoh6rlrprkuYnmj5DphpLmiJborablkYonLCAn6Ieq6KiC5o+Q6YaS5oiW6K2m5ZGKJyksXG5cdFx0XHRcdFx0XHQ2OiAn5omA5pyJ6K2m5ZGK5qih5p2/Jyxcblx0XHRcdFx0XHRcdDc6IHdpbmRvdy53Z1VMUygn6Ieq5Yqo6YCJ5oup5bGC57qnJywgJ+iHquWLlemBuOaTh+WxpOe0micpLFxuXHRcdFx0XHRcdFx0Ly8gOCB3YXMgdXNlZCBmb3IgYmxvY2sgdGVtcGxhdGVzIGJlZm9yZSAjMjYwXG5cdFx0XHRcdFx0XHQvLyA5IHdhcyBkZXByZWNhdGVkXG5cdFx0XHRcdFx0XHQvLyAxMCB3YXMgZGVwcmVjYXRlZFxuXHRcdFx0XHRcdFx0Ly8gMTEgd2FzIGRlcHJlY2F0ZWRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLmNvbWJpbmVkU2luZ2xldE1lbnVzIChib29sZWFuKVxuXHRcdFx0XHQvLyBpZiB0cnVlLCBzaG93IG9uZSBtZW51IHdpdGggYm90aCBzaW5nbGUtaXNzdWUgbm90aWNlcyBhbmQgd2FybmluZ3MgaW5zdGVhZCBvZiB0d28gc2VwYXJhdGVseVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2NvbWJpbmVkU2luZ2xldE1lbnVzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflsIbkuKTkuKrljZXlsYLnuqfoj5zljZXlkIjlubbmiJDkuIDkuKonLCAn5bCH5YWp5YCL5Zau5bGk57Sa6YG45Zau5ZCI5L215oiQ5LiA5YCLJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+W9k+WQr+eUqOatpOmAiemhueaXtu+8jOaXoOiuuum7mOiupOitpuWRiue6p+WIq+mAieaLqeWNleWxgue6p+mAmuefpeaIluWNleWxgue6p+itpuWRiueahuWxnuS6juatpOmhueOAgicsXG5cdFx0XHRcdFx0XHQn55W25ZWf55So5q2k6YG46aCF5pmC77yM54Sh6KuW6aCQ6Kit6K2m5ZGK57Sa5Yil6YG45pOH5Zau5bGk57Sa6YCa55+l5oiW5Zau5bGk57Sa6K2m5ZGK55qG5bGs5pa85q2k6aCF44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLndhdGNoV2FybmluZ3MgKHN0cmluZylcblx0XHRcdFx0Ly8gV2F0Y2hsaXN0IHNldHRpbmcgZm9yIHRoZSBwYWdlIHdoaWNoIGhhcyBiZWVuIGRpc3BhdGNoZWQgYW4gd2FybmluZyBvciBub3RpY2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd3YXRjaFdhcm5pbmdzJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCforablkYrml7bliqDlhaXnlKjmiLforqjorrrpobXliLDnm5Hop4bliJfooagnLCAn6K2m5ZGK5pmC5Yqg5YWl5L2/55So6ICF6KiO6KuW6aCB5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLm9sZFNlbGVjdCAoYm9vbGVhbilcblx0XHRcdFx0Ly8gaWYgdHJ1ZSwgdXNlIHRoZSBuYXRpdmUgc2VsZWN0IG1lbnUgcmF0aGVyIHRoZSBqcXVlcnkgY2hvc2VuLWJhc2VkIG9uZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ29sZFNlbGVjdCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5L2/55So5LiN5Y+v5pCc57Si55qE57uP5YW46I+c5Y2VJywgJ+S9v+eUqOS4jeWPr+aQnOWwi+eahOe2k+WFuOmBuOWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdjdXN0b21XYXJuaW5nTGlzdCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6Ieq5a6a5LmJ6K2m5ZGK5qih5p2/JywgJ+iHquioguitpuWRiuaooeadvycpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfmgqjlj6/ku6XliqDlhaXmqKHmnb/miJbnlKjmiLflrZDpobXpnaLjgILoh6rlrprkuYnorablkYrkvJrlh7rnjrDlnKjorablkYrlr7nor53moYbkuK3igJzoh6rlrprkuYnorablkYrigJ3kuIDoioLjgIInLFxuXHRcdFx0XHRcdFx0J+aCqOWPr+S7peWKoOWFpeaooeadv+aIluS9v+eUqOiAheWtkOmggemdouOAguiHquioguitpuWRiuacg+WHuuePvuWcqOitpuWRiuWwjeipseaWueWhiuS4reOAjOiHquioguitpuWRiuOAjeS4gOevgOOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdjdXN0b21MaXN0Jyxcblx0XHRcdFx0XHRjdXN0b21MaXN0VmFsdWVUaXRsZTogd2luZG93LndnVUxTKCfmqKHmnb/lkI3vvIjkuI3lkKvlpKfmi6zlj7fvvIknLCAn5qih5p2/5ZCN77yI5LiN5ZCr5aSn5ous6Jmf77yJJyksXG5cdFx0XHRcdFx0Y3VzdG9tTGlzdExhYmVsVGl0bGU6IHdpbmRvdy53Z1VMUygn5pi+56S655qE5paH5a2X77yI5ZKM57yW6L6R5pGY6KaB77yJJywgJ+mhr+ekuueahOaWh+Wtl++8iOWSjOe3qOi8r+aRmOimge+8iScpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WtmOW6n+iuqOiuuicsICflrZjlu6LoqI7oq5YnKSxcblx0XHRcdG1vZHVsZTogJ3hmZCcsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2xvZ1hmZE5vbWluYXRpb25zJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCflnKjnlKjmiLfnqbrpl7TkuK3orrDlvZXmiYDmnInlrZjlup/orqjorrrmj5DlkI0nLCAn5Zyo5L2/55So6ICF56m66ZaT5Lit6KiY6YyE5omA5pyJ5a2Y5bui6KiO6KuW5o+Q5ZCNJyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ivpeaXpeW/l+S+m+aCqOi/vei4quaJgOaciemAmui/h1R3aW5rbGXmj5DkuqTnmoTlrZjlup/orqjorronLFxuXHRcdFx0XHRcdFx0J+ipsuaXpeiqjOS+m+aCqOi/vei5pOaJgOaciemAj+mBjlR3aW5rbGXmj5DkuqTnmoTlrZjlu6LoqI7oq5YnXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnYm9vbGVhbicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAneGZkTG9nUGFnZU5hbWUnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOatpOmhteS/neeVmeaXpeW/lycsICflnKjmraTpoIHkv53nlZnml6XoqownKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Zyo5q2k5qGG5Lit6L6T5YWl5a2Q6aG16Z2i5ZCN56ew77yM5oKo5bCG5ZyoVXNlcjo8aT7nlKjmiLflkI08L2k+LzxpPuWtkOmhtemdojwvaT7mib7liLBYRkTml6Xlv5fjgILku4XlnKjlkK/nlKjml6Xlv5fml7blt6XkvZzjgIInLFxuXHRcdFx0XHRcdFx0J+WcqOatpOahhuS4rei8uOWFpeWtkOmggemdouWQjeeose+8jOaCqOWwh+WcqFVzZXI6PGk+5L2/55So6ICF5ZCN56ixPC9pPi88aT7lrZDpoIHpnaI8L2k+5om+5YiwWEZE5pel6KqM44CC5YOF5Zyo5ZWf55So5pel6KqM5pmC5bel5L2c44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnbm9Mb2dPblhmZE5vbWluYXRpb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOS9v+eUqOS7peS4i+eQhueUseaXtuS4jeWBmuiusOW9lScsICflnKjkvb/nlKjku6XkuIvnkIbnlLHmmYLkuI3lgZroqJjpjIQnKSxcblx0XHRcdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHRcdFx0XHRzZXRWYWx1ZXM6IFR3aW5rbGUuY29uZmlnLmNvbW1vblNldHMueGZkQ3JpdGVyaWEsXG5cdFx0XHRcdFx0c2V0RGlzcGxheU9yZGVyOiBUd2lua2xlLmNvbmZpZy5jb21tb25TZXRzLnhmZENyaXRlcmlhRGlzcGxheU9yZGVyLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnhmZFdhdGNoUGFnZSAoc3RyaW5nKVxuXHRcdFx0XHQvLyBUaGUgd2F0Y2hsaXN0IHNldHRpbmcgb2YgdGhlIHBhZ2UgYmVpbmcgbm9taW5hdGVkIGZvciBYZkQuXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAneGZkV2F0Y2hQYWdlJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfliqDlhaXmj5DlkI3nmoTpobXpnaLliLDnm5Hop4bliJfooagnLCAn5Yqg5YWl5o+Q5ZCN55qE6aCB6Z2i5Yiw55uj6KaW5riF5ZauJyksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLnhmZFdhdGNoRGlzY3Vzc2lvbiAoc3RyaW5nKVxuXHRcdFx0XHQvLyBUaGUgd2F0Y2hsaXN0IHNldHRpbmcgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgWGZEIHBhZ2UgKGZvciB0aG9zZSBwcm9jZXNzZXMgdGhhdCBjcmVhdGUgZGlzY3Vzc2lvbiBwYWdlcyBmb3IgZWFjaCBub21pbmF0aW9uKSxcblx0XHRcdFx0Ly8gb3IgdGhlIGxpc3QgcGFnZSBmb3IgdGhlIG90aGVyIHByb2Nlc3Nlcy5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICd4ZmRXYXRjaERpc2N1c3Npb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WKoOWFpeWtmOW6n+iuqOiuuumhteWIsOebkeinhuWIl+ihqCcsICfliqDlhaXlrZjlu6LoqI7oq5bpoIHliLDnm6PoppbmuIXllq4nKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoJ+W9k+aXpeeahOmhtemdouOAgicsICfnlbbml6XnmoTpoIHpnaLjgIInKSxcblx0XHRcdFx0XHR0eXBlOiAnZW51bScsXG5cdFx0XHRcdFx0ZW51bVZhbHVlczogVHdpbmtsZS5jb25maWcud2F0Y2hsaXN0RW51bXMsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcueGZkV2F0Y2hVc2VyIChzdHJpbmcpXG5cdFx0XHRcdC8vIFRoZSB3YXRjaGxpc3Qgc2V0dGluZyBvZiB0aGUgdXNlciB0YWxrIHBhZ2UgaWYgdGhleSByZWNlaXZlIGEgbm90aWZpY2F0aW9uLlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3hmZFdhdGNoVXNlcicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfliqDlhaXliJvlu7rogIXorqjorrrpobXliLDnm5Hop4bliJfooajvvIjlnKjpgJrnn6Xml7bvvIknLFxuXHRcdFx0XHRcdFx0J+WKoOWFpeW7uueri+iAheiojuirlumggeWIsOebo+imlua4heWWru+8iOWcqOmAmuefpeaZgu+8iSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdtYXJrWGZkUGFnZXNBc1BhdHJvbGxlZCcsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5qCH6K6w5pe25qCH6K6w6aG16Z2i5Li65bey5beh5p+l77yI5aaC5Y+v6IO977yJJywgJ+aomeiomOaZguaomeiomOmggemdoueCuuW3suW3oeafpe+8iOWmguWPr+iDve+8iScpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfln7rkuo7mioDmnK/ljp/lm6DvvIzpobXpnaLku4XkvJrlnKjnlLFTcGVjaWFsOk5ld1BhZ2Vz5Yiw6L6+5pe26KKr5qCH6K6w5Li65bey5beh5p+l44CCJyxcblx0XHRcdFx0XHRcdCfln7rmlrzmioDooZPljp/lm6DvvIzpoIHpnaLlg4XmnIPlnKjnlLFTcGVjaWFsOk5ld1BhZ2Vz5Yiw6YGU5pmC6KKr5qiZ6KiY54K65bey5beh5p+l44CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2Jvb2xlYW4nLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ0Z3ZENzZFRvWGZkJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKCfmj5DliKDnsbvlnovlop7liqDovazkuqToh6rlv6vpgJ/liKDpmaTlgJnpgIknLCAn5o+Q5Yiq6aGe5Yil5aKe5Yqg6L2J5Lqk6Ieq5b+r6YCf5Yiq6Zmk5YCZ6YG4JyksXG5cdFx0XHRcdFx0aGVscHRpcDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+ivt+ehruS/neaCqOWFheWIhuS6huino1tbTElCOuW/q+mAn+WIoOmZpOadoeS+i11d5omN5byA5ZCv5q2k5Yqf6IO944CCJyxcblx0XHRcdFx0XHRcdCfoq4vnorrkv53mgqjlhYXliIbkuobop6NbW0xJQjrlv6vpgJ/liKrpmaTmop3kvotdXeaJjemWi+WVn+atpOWKn+iDveOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdhZmREZWZhdWx0Q2F0ZWdvcnknLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOaPkOWIoOexu+WeiycsICfpoJDoqK3mj5DliKrpoZ7liKUnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6Iul6YCJ5oup4oCc55u45ZCM5LqO5LiK5qyh6YCJ5oup4oCd5bCG5L2/55SobG9jYWxTdG9yYWdl5p2l6K6w5b+G44CCJyxcblx0XHRcdFx0XHRcdCfoi6Xpgbjmk4fjgIznm7jlkIzmlrzkuIrmrKHpgbjmk4fjgI3lsIfkvb/nlKhsb2NhbFN0b3JhZ2XkvoboqJjmhrbjgIInXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0eXBlOiAnZW51bScsXG5cdFx0XHRcdFx0ZW51bVZhbHVlczoge1xuXHRcdFx0XHRcdFx0ZGVsZXRlOiB3aW5kb3cud2dVTFMoJ+WIoOmZpCcsICfliKrpmaQnKSxcblx0XHRcdFx0XHRcdHNhbWU6IHdpbmRvdy53Z1VMUygn55u45ZCM5LqO5LiK5qyh6YCJ5oupJywgJ+ebuOWQjOaWvOS4iuasoemBuOaThycpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnYWZkRmFtZURlZmF1bHRSZWFzb24nLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+m7mOiupOWFs+azqOW6puaPkOWIoOeQhueUsScsICfpoJDoqK3pl5zms6jluqbmj5DliKrnkIbnlLEnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoJ+eUqOS6juaJuemHj+aPkOWIoOOAgicsICfnlKjmlrzmibnmrKHmj5DliKrjgIInKSxcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdhZmRTdWJzdHViRGVmYXVsdFJlYXNvbicsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn6buY6K6k5bCP5bCP5L2c5ZOB5o+Q5Yig55CG55SxJywgJ+mgkOioreWwj+Wwj+S9nOWTgeaPkOWIqueQhueUsScpLFxuXHRcdFx0XHRcdGhlbHB0aXA6IHdpbmRvdy53Z1VMUygn55So5LqO5om56YeP5o+Q5Yig44CCJywgJ+eUqOaWvOaJueasoeaPkOWIquOAgicpLFxuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHRpdGxlOiB3aW5kb3cud2dVTFMoJ+WFs+mXreWtmOW6n+iuqOiuuicsICfpl5zplonlrZjlu6LoqI7oq5YnKSxcblx0XHRcdG1vZHVsZTogJ2Nsb3NlJyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnWGZkQ2xvc2UnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+WcqOWtmOW6n+iuqOiuuuaYvuekuuWFs+mXreiuqOiuuuaMiemSricsICflnKjlrZjlu6LoqI7oq5bpoa/npLrpl5zplonoqI7oq5bmjInpiJUnKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn6K+356Gu5L+d5oKo5YWF5YiG5LqG6KejW1tMSUI65Yig6Zmk5p2h5L6LXV3miY3lvIDlkK/mraTlip/og73jgIInLFxuXHRcdFx0XHRcdFx0J+iri+eiuuS/neaCqOWFheWIhuS6huino1tbTElCOuWIqumZpOaineS+i11d5omN6ZaL5ZWf5q2k5Yqf6IO944CCJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IHtcblx0XHRcdFx0XHRcdGhpZGU6IHdpbmRvdy53Z1VMUygn5LiN5pi+56S6JywgJ+S4jemhr+ekuicpLFxuXHRcdFx0XHRcdFx0bm9uYWRtaW5vbmx5OiB3aW5kb3cud2dVTFMoJ+WPquWMheWQq+mdnueuoeeQhuWRmOWPr+S9v+eUqOmAiemhuScsICflj6rljIXlkKvpnZ7nrqHnkIblk6Hlj6/kvb/nlKjpgbjpoIUnKSxcblx0XHRcdFx0XHRcdGFsbDogd2luZG93LndnVUxTKCfmmL7npLrmiYDmnInpgInpobknLCAn6aGv56S65omA5pyJ6YG46aCFJyksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfkvrXniq/okZfkvZzmnYMnLCAn5L6154qv6JGX5L2c5qyKJyksXG5cdFx0XHRtb2R1bGU6ICdjb3B5dmlvJyxcblx0XHRcdHByZWZlcmVuY2VzOiBbXG5cdFx0XHRcdC8vIFR3aW5rbGVDb25maWcuY29weXZpb1dhdGNoUGFnZSAoc3RyaW5nKVxuXHRcdFx0XHQvLyBUaGUgd2F0Y2hsaXN0IHNldHRpbmcgb2YgdGhlIHBhZ2UgYmVpbmcgbm9taW5hdGVkIGZvciBYZkQuXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnY29weXZpb1dhdGNoUGFnZScsXG5cdFx0XHRcdFx0bGFiZWw6IHdpbmRvdy53Z1VMUygn5Yqg5YWl5o+Q5oql55qE6aG16Z2i5Yiw55uR6KeG5YiX6KGoJywgJ+WKoOWFpeaPkOWgseeahOmggemdouWIsOebo+imlua4heWWricpLFxuXHRcdFx0XHRcdHR5cGU6ICdlbnVtJyxcblx0XHRcdFx0XHRlbnVtVmFsdWVzOiBUd2lua2xlLmNvbmZpZy53YXRjaGxpc3RFbnVtcyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gVHdpbmtsZUNvbmZpZy5jb3B5dmlvV2F0Y2hVc2VyIChzdHJpbmcpXG5cdFx0XHRcdC8vIFRoZSB3YXRjaGxpc3Qgc2V0dGluZyBvZiB0aGUgdXNlciBpZiBoZSByZWNlaXZlcyBhIG5vdGlmaWNhdGlvbi5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdjb3B5dmlvV2F0Y2hVc2VyJyxcblx0XHRcdFx0XHRsYWJlbDogd2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0J+WKoOWFpeWIm+W7uuiAheiuqOiuuumhteWIsOebkeinhuWIl+ihqO+8iOWcqOmAmuefpeaXtu+8iScsXG5cdFx0XHRcdFx0XHQn5Yqg5YWl5bu656uL6ICF6KiO6KuW6aCB5Yiw55uj6KaW5riF5Zau77yI5Zyo6YCa55+l5pmC77yJJ1xuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0dHlwZTogJ2VudW0nLFxuXHRcdFx0XHRcdGVudW1WYWx1ZXM6IFR3aW5rbGUuY29uZmlnLndhdGNobGlzdEVudW1zLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBUd2lua2xlQ29uZmlnLm1hcmtDb3B5dmlvUGFnZXNBc1BhdHJvbGxlZCAoYm9vbGVhbilcblx0XHRcdFx0Ly8gSWYsIHdoZW4gYXBwbHlpbmcgY29weXZpbyB0ZW1wbGF0ZSB0byBwYWdlLCB0byBtYXJrIHRoZSBwYWdlIGFzIHBhdHJvbGxlZCAoaWYgdGhlIHBhZ2Ugd2FzIHJlYWNoZWQgZnJvbSBOZXdQYWdlcylcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdtYXJrQ29weXZpb1BhZ2VzQXNQYXRyb2xsZWQnLFxuXHRcdFx0XHRcdGxhYmVsOiB3aW5kb3cud2dVTFMoJ+agh+iusOaXtuagh+iusOmhtemdouS4uuW3suW3oeafpe+8iOWmguWPr+iDve+8iScsICfmqJnoqJjmmYLmqJnoqJjpoIHpnaLngrrlt7Llt6Hmn6XvvIjlpoLlj6/og73vvIknKSxcblx0XHRcdFx0XHRoZWxwdGlwOiB3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHQn5Z+65LqO5oqA5pyv5Y6f5Zug77yM6aG16Z2i5LuF5Lya5Zyo55SxU3BlY2lhbDpOZXdQYWdlc+WIsOi+vuaXtuiiq+agh+iusOS4uuW3suW3oeafpeOAgicsXG5cdFx0XHRcdFx0XHQn5Z+65pa85oqA6KGT5Y6f5Zug77yM6aCB6Z2i5YOF5pyD5Zyo55SxU3BlY2lhbDpOZXdQYWdlc+WIsOmBlOaZguiiq+aomeiomOeCuuW3suW3oeafpeOAgidcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHR5cGU6ICdib29sZWFuJyxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0aXRsZTogd2luZG93LndnVUxTKCfpmpDol48nLCAn6Zqx6JePJyksXG5cdFx0XHRoaWRkZW46IHRydWUsXG5cdFx0XHRwcmVmZXJlbmNlczogW1xuXHRcdFx0XHQvLyB0d2lua2xlLmpzOiBwb3J0bGV0IHNldHVwXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAncG9ydGxldEFyZWEnLFxuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3BvcnRsZXRJZCcsXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAncG9ydGxldE5hbWUnLFxuXHRcdFx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ3BvcnRsZXRUeXBlJyxcblx0XHRcdFx0XHR0eXBlOiAnc3RyaW5nJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6ICdwb3J0bGV0TmV4dCcsXG5cdFx0XHRcdFx0dHlwZTogJ3N0cmluZycsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIHR3aW5rbGVmbHVmZi5qczogZGVmaW5lcyBob3cgbWFueSByZXZpc2lvbiB0byBxdWVyeSBtYXhpbXVtLCBtYXhpbXVtIHBvc3NpYmxlIGlzIDUwLCBkZWZhdWx0IGlzIDUwXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAncmV2ZXJ0TWF4UmV2aXNpb25zJyxcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlcicsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIHR3aW5rbGViYXRjaGRlbGV0ZS5qczogSG93IG1hbnkgcGFnZXMgc2hvdWxkIGJlIHByb2Nlc3NlZCBtYXhpbXVtXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiAnYmF0Y2hNYXgnLFxuXHRcdFx0XHRcdHR5cGU6ICdpbnRlZ2VyJyxcblx0XHRcdFx0XHRhZG1pbk9ubHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIEhvdyBtYW55IHBhZ2VzIHNob3VsZCBiZSBwcm9jZXNzZWQgYXQgYSB0aW1lIGJ5IGRlcHJvZCBhbmQgYmF0Y2hkZWxldGUvcHJvdGVjdC91bmRlbGV0ZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogJ2JhdGNoQ2h1bmtzJyxcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlcicsXG5cdFx0XHRcdFx0YWRtaW5Pbmx5OiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRdOyAvLyBlbmQgb2YgVHdpbmtsZS5jb25maWcuc2VjdGlvbnNcblx0VHdpbmtsZS5jb25maWcuaW5pdCA9ICgpID0+IHtcblx0XHQvLyBjcmVhdGUgdGhlIGNvbmZpZyBwYWdlIGF0IFR3aW5rbGUuZ2V0UHJlZignY29uZmlnUGFnZScpXG5cdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSA9PT0gVHdpbmtsZS5nZXRQcmVmKCdjb25maWdQYWdlJykgJiYgbXcuY29uZmlnLmdldCgnd2dBY3Rpb24nKSA9PT0gJ3ZpZXcnKSB7XG5cdFx0XHRpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0d2lua2xlLWNvbmZpZycpKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gbWF5YmUgdGhlIHBhZ2UgaXMgbWlzY29uZmlndXJlZCwgb3Igc29tZXRoaW5nIC0gYnV0IGFueSBhdHRlbXB0IHRvIG1vZGlmeSBpdCB3aWxsIGJlIHBvaW50bGVzc1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udGVudGRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0d2lua2xlLWNvbmZpZy1jb250ZW50Jyk7XG5cdFx0XHRjb250ZW50ZGl2LnRleHRDb250ZW50ID0gJyc7IC8vIGNsZWFyIGNoaWxkcmVuXG5cdFx0XHQvLyBzdGFydCBhIHRhYmxlIG9mIGNvbnRlbnRzXG5cdFx0XHRjb25zdCB0b2N0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0dG9jdGFibGUuY2xhc3NOYW1lID0gJ3RvYyc7XG5cdFx0XHR0b2N0YWJsZS5zdHlsZS5tYXJnaW5MZWZ0ID0gJzAuNGVtJztcblx0XHRcdC8vIGNyZWF0ZSBUT0MgdGl0bGVcblx0XHRcdGNvbnN0IHRvY3RpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHR0b2N0aXRsZS5pZCA9ICd0b2N0aXRsZSc7XG5cdFx0XHRjb25zdCB0b2NoMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gyJyk7XG5cdFx0XHR0b2NoMi50ZXh0Q29udGVudCA9IHdpbmRvdy53Z1VMUygn55uu5b2VICcsICfnm67pjIQgJyk7XG5cdFx0XHR0b2N0aXRsZS5hcHBlbmRDaGlsZCh0b2NoMik7XG5cdFx0XHQvLyBhZGQgVE9DIHNob3cvaGlkZSBsaW5rXG5cdFx0XHRjb25zdCB0b2N0b2dnbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0XHR0b2N0b2dnbGUuY2xhc3NOYW1lID0gJ3RvY3RvZ2dsZSc7XG5cdFx0XHR0b2N0b2dnbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1snKSk7XG5cdFx0XHRjb25zdCB0b2N0b2dnbGVsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdFx0dG9jdG9nZ2xlbGluay5jbGFzc05hbWUgPSAnaW50ZXJuYWwnO1xuXHRcdFx0dG9jdG9nZ2xlbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnI3R3LXRvY3Nob3doaWRlJyk7XG5cdFx0XHR0b2N0b2dnbGVsaW5rLnRleHRDb250ZW50ID0gd2luZG93LndnVUxTKCfpmpDol48nLCAn6Zqx6JePJyk7XG5cdFx0XHR0b2N0b2dnbGUuYXBwZW5kQ2hpbGQodG9jdG9nZ2xlbGluayk7XG5cdFx0XHR0b2N0b2dnbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ10nKSk7XG5cdFx0XHR0b2N0aXRsZS5hcHBlbmRDaGlsZCh0b2N0b2dnbGUpO1xuXHRcdFx0dG9jdGFibGUuYXBwZW5kQ2hpbGQodG9jdGl0bGUpO1xuXHRcdFx0Ly8gY3JlYXRlIGl0ZW0gY29udGFpbmVyOiB0aGlzIGlzIHdoYXQgd2UgYWRkIHN0dWZmIHRvXG5cdFx0XHRjb25zdCB0b2N1bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG5cdFx0XHR0b2N0b2dnbGVsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdCdjbGljaycsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCAkdG9jdWwgPSAkKHRvY3VsKTtcblx0XHRcdFx0XHQkdG9jdWwudG9nZ2xlKCk7XG5cdFx0XHRcdFx0aWYgKCR0b2N1bC5maW5kKCc6dmlzaWJsZScpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dG9jdG9nZ2xlbGluay50ZXh0Q29udGVudCA9IHdpbmRvdy53Z1VMUygn6ZqQ6JePJywgJ+maseiXjycpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0b2N0b2dnbGVsaW5rLnRleHRDb250ZW50ID0gd2luZG93LndnVUxTKCfmmL7npLonLCAn6aGv56S6Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHRcdHRvY3RhYmxlLmFwcGVuZENoaWxkKHRvY3VsKTtcblx0XHRcdGNvbnRlbnRkaXYuYXBwZW5kQ2hpbGQodG9jdGFibGUpO1xuXHRcdFx0Y29uc3QgY29udGVudGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2NyaXB0LXVybFxuXHRcdFx0Y29udGVudGZvcm0uc2V0QXR0cmlidXRlKCdhY3Rpb24nLCAnamF2YXNjcmlwdDp2b2lkKDApJyk7IC8vIHdhcyAjdHctc2F2ZSAtIGNoYW5nZWQgdG8gdm9pZCgwKSB0byB3b3JrIGFyb3VuZCBDaHJvbWUgaXNzdWVcblx0XHRcdGNvbnRlbnRmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIFR3aW5rbGUuY29uZmlnLnNhdmUsIHRydWUpO1xuXHRcdFx0Y29udGVudGRpdi5hcHBlbmRDaGlsZChjb250ZW50Zm9ybSk7XG5cdFx0XHRjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuXHRcdFx0Y29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuXHRcdFx0Y29udGVudGZvcm0uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0XHRcdCQoVHdpbmtsZS5jb25maWcuc2VjdGlvbnMpLmVhY2goKHNlY3Rpb25rZXksIHNlY3Rpb24pID0+IHtcblx0XHRcdFx0aWYgKHNlY3Rpb24uaGlkZGVuIHx8IChzZWN0aW9uLmFkbWluT25seSAmJiAhTW9yZWJpdHMudXNlcklzU3lzb3ApKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIGkuZS4gXCJjb250aW51ZVwiIGluIHRoaXMgY29udGV4dFxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGFkZCB0byBUT0Ncblx0XHRcdFx0Y29uc3QgdG9jbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuXHRcdFx0XHR0b2NsaS5jbGFzc05hbWUgPSAndG9jbGV2ZWwtMSc7XG5cdFx0XHRcdGNvbnN0IHRvY2EgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRcdHRvY2Euc2V0QXR0cmlidXRlKCdocmVmJywgYCMke3NlY3Rpb24ubW9kdWxlfWApO1xuXHRcdFx0XHR0b2NhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHNlY3Rpb24udGl0bGUpKTtcblx0XHRcdFx0dG9jbGkuYXBwZW5kQ2hpbGQodG9jYSk7XG5cdFx0XHRcdHRvY3VsLmFwcGVuZENoaWxkKHRvY2xpKTtcblx0XHRcdFx0bGV0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG5cdFx0XHRcdGxldCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRcdFx0Y2VsbC5zZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nLCAnMycpO1xuXHRcdFx0XHRjb25zdCBoZWFkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDQnKTtcblx0XHRcdFx0aGVhZGluZy5zdHlsZS5ib3JkZXJCb3R0b20gPSAnMXB4IHNvbGlkICM4MDgwODAnO1xuXHRcdFx0XHRoZWFkaW5nLnN0eWxlLm1hcmdpblRvcCA9ICcwLjJlbSc7XG5cdFx0XHRcdGhlYWRpbmcuaWQgPSBzZWN0aW9uLm1vZHVsZTtcblx0XHRcdFx0aGVhZGluZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzZWN0aW9uLnRpdGxlKSk7XG5cdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQoaGVhZGluZyk7XG5cdFx0XHRcdHJvdy5hcHBlbmRDaGlsZChjZWxsKTtcblx0XHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHJvdyk7XG5cdFx0XHRcdGxldCByb3djb3VudCA9IDE7IC8vIGZvciByb3cgYmFuZGluZ1xuXHRcdFx0XHQvLyBhZGQgZWFjaCBvZiB0aGUgcHJlZmVyZW5jZXMgdG8gdGhlIGZvcm1cblx0XHRcdFx0JChzZWN0aW9uLnByZWZlcmVuY2VzKS5lYWNoKChwcmVma2V5LCBwcmVmKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHByZWYuYWRtaW5Pbmx5ICYmICFNb3JlYml0cy51c2VySXNTeXNvcCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIGkuZS4gXCJjb250aW51ZVwiIGluIHRoaXMgY29udGV4dFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG5cdFx0XHRcdFx0cm93LnN0eWxlLm1hcmdpbkJvdHRvbSA9ICcwLjJlbSc7XG5cdFx0XHRcdFx0Ly8gY3JlYXRlIG9kZCByb3cgYmFuZGluZ1xuXHRcdFx0XHRcdGlmIChyb3djb3VudCsrICUgMiA9PT0gMCkge1xuXHRcdFx0XHRcdFx0cm93LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2IoMTI4IDEyOCAxMjgvLjEpJztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cdFx0XHRcdFx0bGV0IGxhYmVsO1xuXHRcdFx0XHRcdGxldCBpbnB1dDtcblx0XHRcdFx0XHRjb25zdCBnb3RQcmVmID0gVHdpbmtsZS5nZXRQcmVmKHByZWYubmFtZSk7XG5cdFx0XHRcdFx0c3dpdGNoIChwcmVmLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXHRcdFx0XHRcdFx0XHQvLyBjcmVhdGUgYSBjaGVja2JveFxuXHRcdFx0XHRcdFx0XHRjZWxsLnNldEF0dHJpYnV0ZSgnY29sc3BhbicsICcyJyk7XG5cdFx0XHRcdFx0XHRcdGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcblx0XHRcdFx0XHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdFx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnY2hlY2tib3gnKTtcblx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChnb3RQcmVmID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuY2hlY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHRsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwcmVmLmxhYmVsKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3N0cmluZyc6IC8vIGNyZWF0ZSBhbiBpbnB1dCBib3hcblx0XHRcdFx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0XHRcdFx0XHQvLyBhZGQgbGFiZWwgdG8gZmlyc3QgY29sdW1uXG5cdFx0XHRcdFx0XHRcdGNlbGwuc3R5bGUudGV4dEFsaWduID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMC41ZW0nO1xuXHRcdFx0XHRcdFx0XHRsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG5cdFx0XHRcdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7cHJlZi5sYWJlbH3vvJpgKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0XHRcdC8vIGFkZCBpbnB1dCBib3ggdG8gc2Vjb25kIGNvbHVtblxuXHRcdFx0XHRcdFx0XHRjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMWVtJztcblx0XHRcdFx0XHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdFx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuXHRcdFx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0aWYgKHByZWYudHlwZSA9PT0gJ2ludGVnZXInKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCdzaXplJywgNik7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ251bWJlcicpO1xuXHRcdFx0XHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsICcxJyk7IC8vIGludGVnZXJzIG9ubHlcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChnb3RQcmVmKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGdvdFByZWYpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2VudW0nOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGNyZWF0ZSBhIGNvbWJvIGJveFxuXHRcdFx0XHRcdFx0XHQvLyBhZGQgbGFiZWwgdG8gZmlyc3QgY29sdW1uXG5cdFx0XHRcdFx0XHRcdC8vIG5vdGU6IGR1cGxpY2F0ZXMgdGhlIGNvZGUgYWJvdmUsIHVuZGVyIHN0cmluZy9pbnRlZ2VyXG5cdFx0XHRcdFx0XHRcdGNlbGwuc3R5bGUudGV4dEFsaWduID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMC41ZW0nO1xuXHRcdFx0XHRcdFx0XHRsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG5cdFx0XHRcdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7cHJlZi5sYWJlbH3vvJpgKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0XHRcdC8vIGFkZCBpbnB1dCBib3ggdG8gc2Vjb25kIGNvbHVtblxuXHRcdFx0XHRcdFx0XHRjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMWVtJztcblx0XHRcdFx0XHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcblx0XHRcdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGxldCBvcHRpb25FeGlzdHMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBbZW51bXZhbHVlLCBlbnVtZGlzcGxheV0gb2YgT2JqZWN0LmVudHJpZXMocHJlZi5lbnVtVmFsdWVzKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgZW51bXZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRnb3RQcmVmID09PSBlbnVtdmFsdWUgfHxcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhY2sgdG8gY29udmVydCBvbGQgYm9vbGVhbiB3YXRjaGxpc3QgcHJlZnNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHRvIGNvcnJlc3BvbmRpbmcgZW51bXMgKGFkZGVkIGluIHYyLjEpXG5cdFx0XHRcdFx0XHRcdFx0XHQodHlwZW9mIGdvdFByZWYgPT09ICdib29sZWFuJyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoKGdvdFByZWYgJiYgZW51bXZhbHVlID09PSAneWVzJykgfHwgKCFnb3RQcmVmICYmIGVudW12YWx1ZSA9PT0gJ25vJykpKVxuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTtcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbkV4aXN0cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlbnVtZGlzcGxheSkpO1xuXHRcdFx0XHRcdFx0XHRcdGlucHV0LmFwcGVuZENoaWxkKG9wdGlvbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gQXBwZW5kIHVzZXItZGVmaW5lZCB2YWx1ZSB0byBvcHRpb25zXG5cdFx0XHRcdFx0XHRcdGlmICghb3B0aW9uRXhpc3RzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBnb3RQcmVmKTtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb24uc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnb3RQcmVmKSk7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQuYXBwZW5kQ2hpbGQob3B0aW9uKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjZWxsLmFwcGVuZENoaWxkKGlucHV0KTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjYXNlICdzZXQnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGNyZWF0ZSBhIHNldCBvZiBjaGVjayBib3hlc1xuXHRcdFx0XHRcdFx0XHQvLyBhZGQgbGFiZWwgZmlyc3Qgb2YgYWxsXG5cdFx0XHRcdFx0XHRcdGNlbGwuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgJzInKTtcblx0XHRcdFx0XHRcdFx0bGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpOyAvLyBub3QgcmVhbGx5IG5lY2Vzc2FyeSB0byB1c2UgYSBsYWJlbCBlbGVtZW50IGhlcmUsIGJ1dCB3ZSBkbyBpdCBmb3IgY29uc2lzdGVuY3kgb2Ygc3R5bGluZ1xuXHRcdFx0XHRcdFx0XHRsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgJHtwcmVmLmxhYmVsfe+8mmApKTtcblx0XHRcdFx0XHRcdFx0Y2VsbC5hcHBlbmRDaGlsZChsYWJlbCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoZWNrZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRcdFx0XHRcdGNoZWNrZGl2LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzFlbSc7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHdvcmtlciA9IChpdGVta2V5LCBpdGVtdmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjaGVja2xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcblx0XHRcdFx0XHRcdFx0XHRjaGVja2xhYmVsLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzAuN2VtJztcblx0XHRcdFx0XHRcdFx0XHRjaGVja2xhYmVsLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjaGVjayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2suc2V0QXR0cmlidXRlKCd0eXBlJywgJ2NoZWNrYm94Jyk7XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2suc2V0QXR0cmlidXRlKCdpZCcsIGAke3ByZWYubmFtZX1fJHtpdGVta2V5fWApO1xuXHRcdFx0XHRcdFx0XHRcdGNoZWNrLnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke3ByZWYubmFtZX1fJHtpdGVta2V5fWApO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChnb3RQcmVmICYmIGdvdFByZWYuaW5jbHVkZXMoaXRlbWtleSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBjYXRlciBmb3IgbGVnYWN5IGludGVnZXIgYXJyYXkgdmFsdWVzIGZvciB1bmxpbmtOYW1lc3BhY2VzICh0aGlzIGNhbiBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGRvd24gdGhlIHRyYWNrLi4uKVxuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdHByZWYubmFtZSA9PT0gJ3VubGlua05hbWVzcGFjZXMnICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRnb3RQcmVmICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRnb3RQcmVmLmluY2x1ZGVzKE51bWJlci5wYXJzZUludChpdGVta2V5LCAxMCkpXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGVjay5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tsYWJlbC5hcHBlbmRDaGlsZChjaGVjayk7XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpdGVtdmFsdWUpKTtcblx0XHRcdFx0XHRcdFx0XHRjaGVja2Rpdi5hcHBlbmRDaGlsZChjaGVja2xhYmVsKTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0aWYgKHByZWYuc2V0RGlzcGxheU9yZGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYWRkIGNoZWNrIGJveGVzIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZGlzcGxheSBvcmRlclxuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBwcmVmLnNldERpc3BsYXlPcmRlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0d29ya2VyKGl0ZW0sIHByZWYuc2V0VmFsdWVzW2l0ZW1dKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYWRkIGNoZWNrIGJveGVzIGFjY29yZGluZyB0byB0aGUgb3JkZXIgaXQgZ2V0cyBmZWQgdG8gdXMgKHByb2JhYmx5IHN0cmljdCBhbHBoYWJldGljYWwpXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBbaXRlbWtleSwgaXRlbXZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcmVmLnNldFZhbHVlcykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdvcmtlcihpdGVta2V5LCBpdGVtdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjZWxsLmFwcGVuZENoaWxkKGNoZWNrZGl2KTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjYXNlICdjdXN0b21MaXN0Jzoge1xuXHRcdFx0XHRcdFx0XHQvLyBhZGQgbGFiZWwgdG8gZmlyc3QgY29sdW1uXG5cdFx0XHRcdFx0XHRcdGNlbGwuc3R5bGUudGV4dEFsaWduID0gJ3JpZ2h0Jztcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMC41ZW0nO1xuXHRcdFx0XHRcdFx0XHRsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG5cdFx0XHRcdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgcHJlZi5uYW1lKTtcblx0XHRcdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7cHJlZi5sYWJlbH3vvJpgKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0XHRcdC8vIGFkZCBidXR0b24gdG8gc2Vjb25kIGNvbHVtblxuXHRcdFx0XHRcdFx0XHRjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRcdFx0XHRcdFx0Y2VsbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnMWVtJztcblx0XHRcdFx0XHRcdFx0Y29uc3QgY3VzdG9tTGlzdEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MaXN0QnV0dG9uLnNldEF0dHJpYnV0ZSgnaWQnLCBwcmVmLm5hbWUpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MaXN0QnV0dG9uLnNldEF0dHJpYnV0ZSgnbmFtZScsIHByZWYubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbUxpc3RCdXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MaXN0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgVHdpbmtsZS5jb25maWcubGlzdERpYWxvZy5kaXNwbGF5LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdC8vIHVzZSBqUXVlcnkgZGF0YSBvbiB0aGUgYnV0dG9uIHRvIHN0b3JlIHRoZSBjdXJyZW50IGNvbmZpZyB2YWx1ZVxuXHRcdFx0XHRcdFx0XHQkKGN1c3RvbUxpc3RCdXR0b24pLmRhdGEoe1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBnb3RQcmVmLFxuXHRcdFx0XHRcdFx0XHRcdHByZWYsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MaXN0QnV0dG9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHdpbmRvdy53Z1VMUygn57yW6L6R6aG555uuJywgJ+e3qOi8r+mgheebricpKSk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuYXBwZW5kQ2hpbGQoY3VzdG9tTGlzdEJ1dHRvbik7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0bXcubm90aWZ5KGB0d2lua2xlY29uZmlnOiDmnKrnn6XnsbvlnovnmoTlsZ7mgKcgJHtwcmVmLm5hbWV9YCwge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd3YXJuJyxcblx0XHRcdFx0XHRcdFx0XHR0YWc6ICd0d2lua2xlY29uZmlnJyxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0Ly8gYWRkIGhlbHAgdGlwXG5cdFx0XHRcdFx0Y2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cdFx0XHRcdFx0Y2VsbC5zdHlsZS5mb250U2l6ZSA9ICc5MCUnO1xuXHRcdFx0XHRcdGNlbGwuc3R5bGUuY29sb3IgPSAnZ3JheSc7XG5cdFx0XHRcdFx0aWYgKHByZWYuaGVscHRpcCkge1xuXHRcdFx0XHRcdFx0Ly8gY29udmVydCBtZW50aW9ucyBvZiB0ZW1wbGF0ZXMgaW4gdGhlIGhlbHB0aXAgdG8gY2xpY2thYmxlIGxpbmtzXG5cdFx0XHRcdFx0XHRjZWxsLmlubmVySFRNTCA9IHByZWYuaGVscHRpcFxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0XHQve3soLis/KX19L2csXG5cdFx0XHRcdFx0XHRcdFx0YHt7PGEgaHJlZj1cIiR7bXcudXRpbC5nZXRVcmwoJ1RlbXBsYXRlOicpfSQxXCIgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT59fWBcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0XHQvXFxbXFxbKC4rPyldXS9nLFxuXHRcdFx0XHRcdFx0XHRcdGA8YSBocmVmPVwiJHttdy51dGlsLmdldFVybCgnJyl9JDFcIiByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiPiQxPC9hPmBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gYWRkIHJlc2V0IGxpbmsgKGN1c3RvbSBsaXN0cyBkb24ndCBuZWVkIHRoaXMsIGFzIHRoZWlyIGNvbmZpZyB2YWx1ZSBpc24ndCBkaXNwbGF5ZWQgb24gdGhlIGZvcm0pXG5cdFx0XHRcdFx0aWYgKHByZWYudHlwZSAhPT0gJ2N1c3RvbUxpc3QnKSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZXNldGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRcdFx0XHRyZXNldGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgJyN0dy1yZXNldCcpO1xuXHRcdFx0XHRcdFx0cmVzZXRsaW5rLnNldEF0dHJpYnV0ZSgnaWQnLCBgdHdpbmtsZS1jb25maWctcmVzZXQtJHtwcmVmLm5hbWV9YCk7XG5cdFx0XHRcdFx0XHRyZXNldGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBUd2lua2xlLmNvbmZpZy5yZXNldFByZWZMaW5rLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRyZXNldGxpbmsuc3R5bGUuY3NzRmxvYXQgPSAncmlnaHQnO1xuXHRcdFx0XHRcdFx0cmVzZXRsaW5rLnN0eWxlLm1hcmdpbiA9ICcwIDAuNmVtJztcblx0XHRcdFx0XHRcdHJlc2V0bGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3aW5kb3cud2dVTFMoJ+WkjeS9jScsICflvqnkvY0nKSkpO1xuXHRcdFx0XHRcdFx0Y2VsbC5hcHBlbmRDaGlsZChyZXNldGxpbmspO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoY2VsbCk7XG5cdFx0XHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHJvdyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgZm9vdGVyYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRmb290ZXJib3guc2V0QXR0cmlidXRlKCdpZCcsICd0d2lua2xlLWNvbmZpZy1idXR0b25wYW5lJyk7XG5cdFx0XHRmb290ZXJib3guc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNCQ0NBREYnO1xuXHRcdFx0Zm9vdGVyYm94LnN0eWxlLnBhZGRpbmcgPSAnMC41ZW0nO1xuXHRcdFx0Y29uc3Qgc3VibWl0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG5cdFx0XHRzdWJtaXRCdXR0b24uc2V0QXR0cmlidXRlKCdpZCcsICd0d2lua2xlLWNvbmZpZy1zdWJtaXQnKTtcblx0XHRcdHN1Ym1pdEJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnc3VibWl0Jyk7XG5cdFx0XHRzdWJtaXRCdXR0b24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod2luZG93LndnVUxTKCfkv53lrZjkv67mlLknLCAn5YSy5a2Y5L+u5pS5JykpKTtcblx0XHRcdGZvb3RlcmJveC5hcHBlbmRDaGlsZChzdWJtaXRCdXR0b24pO1xuXHRcdFx0Y29uc3QgZm9vdGVyc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdGZvb3RlcnNwYW4uY2xhc3NOYW1lID0gJ3BsYWlubGlua3MnO1xuXHRcdFx0Zm9vdGVyc3Bhbi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzIuNGVtJztcblx0XHRcdGZvb3RlcnNwYW4uc3R5bGUuZm9udFNpemUgPSAnOTAlJztcblx0XHRcdGNvbnN0IGZvb3RlcmEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRmb290ZXJhLnNldEF0dHJpYnV0ZSgnaHJlZicsICcjdHctcmVzZXQtYWxsJyk7XG5cdFx0XHRmb290ZXJhLnNldEF0dHJpYnV0ZSgnaWQnLCAndHdpbmtsZS1jb25maWctcmVzZXRhbGwnKTtcblx0XHRcdGZvb3RlcmEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBUd2lua2xlLmNvbmZpZy5yZXNldEFsbFByZWZzLCBmYWxzZSk7XG5cdFx0XHRmb290ZXJhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHdpbmRvdy53Z1VMUygn5oGi5aSN6buY6K6kJywgJ+aBouW+qemgkOiorScpKSk7XG5cdFx0XHRmb290ZXJzcGFuLmFwcGVuZENoaWxkKGZvb3RlcmEpO1xuXHRcdFx0Zm9vdGVyYm94LmFwcGVuZENoaWxkKGZvb3RlcnNwYW4pO1xuXHRcdFx0Y29udGVudGZvcm0uYXBwZW5kQ2hpbGQoZm9vdGVyYm94KTtcblx0XHRcdC8vIHNpbmNlIGFsbCB0aGUgc2VjdGlvbiBoZWFkZXJzIGV4aXN0IG5vdywgd2UgY2FuIHRyeSBnb2luZyB0byB0aGUgcmVxdWVzdGVkIGFuY2hvclxuXHRcdFx0aWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7XG5cdFx0XHRcdGNvbnN0IGxvYyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcnO1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaGFzaCA9IGxvYztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSA9PT0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKS51c2VyICYmXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1RpdGxlJykuaW5kZXhPZihtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykpID09PSAwICYmXG5cdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykuc2xpY2UoLTMpID09PSAnLmpzJ1xuXHRcdCkge1xuXHRcdFx0Y29uc3QgYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHQvLyBTdHlsZWQgaW4gdHdpbmtsZS5jc3Ncblx0XHRcdGJveC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3R3aW5rbGUtY29uZmlnLWhlYWRlcmJveCcpO1xuXHRcdFx0bGV0IGxpbms7XG5cdFx0XHRjb25zdCBzY3JpcHRQYWdlTmFtZSA9IG13LmNvbmZpZ1xuXHRcdFx0XHQuZ2V0KCd3Z1BhZ2VOYW1lJylcblx0XHRcdFx0LnNsaWNlKFxuXHRcdFx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKS5sYXN0SW5kZXhPZignLycpICsgMSxcblx0XHRcdFx0XHRtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykubGFzdEluZGV4T2YoJy5qcycpXG5cdFx0XHRcdCk7XG5cdFx0XHRpZiAoc2NyaXB0UGFnZU5hbWUgPT09ICd0d2lua2xlb3B0aW9ucycpIHtcblx0XHRcdFx0Ly8gcGxhY2UgXCJ3aHkgbm90IHRyeSB0aGUgcHJlZmVyZW5jZSBwYW5lbFwiIG5vdGljZVxuXHRcdFx0XHRib3guc2V0QXR0cmlidXRlKCdjbGFzcycsICdjb25maWctdHdvcHQtYm94Jyk7XG5cdFx0XHRcdGlmIChtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVJZCcpID4gMCkge1xuXHRcdFx0XHRcdC8vIHBhZ2UgZXhpc3RzXG5cdFx0XHRcdFx0Ym94LmFwcGVuZENoaWxkKFxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn6L+Z6aG15YyF5ZCr5oKo55qEVHdpbmtsZeWPguaVsOiuvue9ru+8jOaCqOWPr+S9v+eUqCcsXG5cdFx0XHRcdFx0XHRcdFx0J+mAmemggeWMheWQq+aCqOeahFR3aW5rbGXlgY/lpb3oqK3lrprvvIzmgqjlj6/kvb/nlKgnXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHBhZ2UgZG9lcyBub3QgZXhpc3Rcblx0XHRcdFx0XHRib3guYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfmgqjlj6/phY3nva7mgqjnmoRUd2lua2xl77yM6YCa6L+H5L2/55SoJywgJ+aCqOWPr+mFjee9ruaCqOeahFR3aW5rbGXvvIzpgJrpgY7kvb/nlKgnKVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybChUd2lua2xlLmdldFByZWYoJ2NvbmZpZ1BhZ2UnKSkpO1xuXHRcdFx0XHRsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHdpbmRvdy53Z1VMUygnVHdpbmtsZeWPguaVsOiuvue9rumdouadvycsICdUd2lua2xl5YGP5aW96Kit5a6a6Z2i5p2/JykpKTtcblx0XHRcdFx0Ym94LmFwcGVuZENoaWxkKGxpbmspO1xuXHRcdFx0XHRib3guYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod2luZG93LndnVUxTKCfvvIzmiJbnm7TmjqXnvJbovpHmnKzpobXjgIInLCAn77yM5oiW55u05o6l57eo6Lyv5pys6aCB44CCJykpKTtcblx0XHRcdFx0JChib3gpLmluc2VydEFmdGVyKCRib2R5LmZpbmQoJyNjb250ZW50U3ViJykpO1xuXHRcdFx0fSBlbHNlIGlmIChbJ3ZlY3RvcicsICd2ZWN0b3ItMjAyMicsICdnb25nYmknLCAnY2l0aXplbicsICdjb21tb24nXS5pbmNsdWRlcyhzY3JpcHRQYWdlTmFtZSkpIHtcblx0XHRcdFx0Ly8gcGxhY2UgXCJMb29raW5nIGZvciBUd2lua2xlIG9wdGlvbnM/XCIgbm90aWNlXG5cdFx0XHRcdGJveC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2NvbmZpZy11c2Vyc2tpbi1ib3gnKTtcblx0XHRcdFx0Ym94LmFwcGVuZENoaWxkKFxuXHRcdFx0XHRcdGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfoi6Xmgqjmg7PphY3nva7mgqjnmoRUd2lua2xl77yM6K+35L2/55SoJywgJ+iLpeaCqOaDs+mFjee9ruaCqOeahFR3aW5rbGXvvIzoq4vkvb/nlKgnKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0bGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybChUd2lua2xlLmdldFByZWYoJ2NvbmZpZ1BhZ2UnKSkpO1xuXHRcdFx0XHRsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHdpbmRvdy53Z1VMUygnVHdpbmtsZeWPguaVsOiuvue9rumdouadvycsICdUd2lua2xl5YGP5aW96Kit5a6a6Z2i5p2/JykpKTtcblx0XHRcdFx0Ym94LmFwcGVuZENoaWxkKGxpbmspO1xuXHRcdFx0XHRib3guYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ+OAgicpKTtcblx0XHRcdFx0JChib3gpLmluc2VydEFmdGVyKCRib2R5LmZpbmQoJyNjb250ZW50U3ViJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Ly8gY3VzdG9tIGxpc3QtcmVsYXRlZCBzdHVmZlxuXHRUd2lua2xlLmNvbmZpZy5saXN0RGlhbG9nID0ge307XG5cdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cuYWRkUm93ID0gKGRsZ3RhYmxlLCB2YWx1ZSwgbGFiZWwpID0+IHtcblx0XHRjb25zdCBjb250ZW50dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1xuXHRcdC8vIFwicmVtb3ZlXCIgYnV0dG9uXG5cdFx0bGV0IGNvbnRlbnR0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cdFx0Y29uc3QgcmVtb3ZlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG5cdFx0cmVtb3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcblx0XHRyZW1vdmVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbGljaycsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdCQoY29udGVudHRyKS5yZW1vdmUoKTtcblx0XHRcdH0sXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdFx0cmVtb3ZlQnV0dG9uLnRleHRDb250ZW50ID0gJ+enu+mZpCc7XG5cdFx0Y29udGVudHRkLmFwcGVuZENoaWxkKHJlbW92ZUJ1dHRvbik7XG5cdFx0Y29udGVudHRyLmFwcGVuZENoaWxkKGNvbnRlbnR0ZCk7XG5cdFx0Ly8gdmFsdWUgaW5wdXQgYm94XG5cdFx0Y29udGVudHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcblx0XHRsZXQgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7XG5cdFx0aW5wdXQuY2xhc3NOYW1lID0gJ3R3aW5rbGUtY29uZmlnLWN1c3RvbWxpc3QtdmFsdWUnO1xuXHRcdGlucHV0LnN0eWxlLndpZHRoID0gJzk3JSc7XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdmFsdWUpO1xuXHRcdH1cblx0XHRjb250ZW50dGQuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuXHRcdGNvbnRlbnR0ci5hcHBlbmRDaGlsZChjb250ZW50dGQpO1xuXHRcdC8vIGxhYmVsIGlucHV0IGJveFxuXHRcdGNvbnRlbnR0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7XG5cdFx0aW5wdXQuY2xhc3NOYW1lID0gJ3R3aW5rbGUtY29uZmlnLWN1c3RvbWxpc3QtbGFiZWwnO1xuXHRcdGlucHV0LnN0eWxlLndpZHRoID0gJzk4JSc7XG5cdFx0aWYgKGxhYmVsKSB7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgbGFiZWwpO1xuXHRcdH1cblx0XHRjb250ZW50dGQuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuXHRcdGNvbnRlbnR0ci5hcHBlbmRDaGlsZChjb250ZW50dGQpO1xuXHRcdGRsZ3RhYmxlLmFwcGVuZENoaWxkKGNvbnRlbnR0cik7XG5cdH07XG5cdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cuZGlzcGxheSA9IChlKSA9PiB7XG5cdFx0Y29uc3QgJHByZWZidXR0b24gPSAkKGUudGFyZ2V0KTtcblx0XHRjb25zdCBjdXJ2YWx1ZSA9ICRwcmVmYnV0dG9uLmRhdGEoJ3ZhbHVlJyk7XG5cdFx0Y29uc3QgY3VycHJlZiA9ICRwcmVmYnV0dG9uLmRhdGEoJ3ByZWYnKTtcblx0XHRjb25zdCBkaWFsb2cgPSBuZXcgTW9yZWJpdHMuc2ltcGxlV2luZG93KDcyMCwgNDAwKTtcblx0XHRkaWFsb2cuc2V0VGl0bGUoY3VycHJlZi5sYWJlbCk7XG5cdFx0ZGlhbG9nLnNldFNjcmlwdE5hbWUod2luZG93LndnVUxTKCdUd2lua2xl5Y+C5pWw6K6+572uJywgJ1R3aW5rbGXlgY/lpb3oqK3lrponKSk7XG5cdFx0Y29uc3QgZGlhbG9nY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdGNvbnN0IGRsZ3RhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcblx0XHRkbGd0YWJsZS5jbGFzc05hbWUgPSAnd2lraXRhYmxlJztcblx0XHRkbGd0YWJsZS5zdHlsZS5tYXJnaW4gPSAnMS40ZW0gMWVtJztcblx0XHRkbGd0YWJsZS5zdHlsZS53aWR0aCA9ICc5NyUnO1xuXHRcdGNvbnN0IGRsZ3Rib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTtcblx0XHQvLyBoZWFkZXIgcm93XG5cdFx0bGV0IGRsZ3RyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcblx0XHQvLyB0b3AtbGVmdCBjZWxsXG5cdFx0bGV0IGRsZ3RoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcblx0XHRkbGd0aC5zdHlsZS53aWR0aCA9ICc1JSc7XG5cdFx0ZGxndHIuYXBwZW5kQ2hpbGQoZGxndGgpO1xuXHRcdC8vIHZhbHVlIGNvbHVtbiBoZWFkZXJcblx0XHRkbGd0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG5cdFx0ZGxndGguc3R5bGUud2lkdGggPSAnMzUlJztcblx0XHRkbGd0aC50ZXh0Q29udGVudCA9IGN1cnByZWYuY3VzdG9tTGlzdFZhbHVlVGl0bGUgPz8gd2luZG93LndnVUxTKCfmlbDlgLwnLCAn5pW45YC8Jyk7XG5cdFx0ZGxndHIuYXBwZW5kQ2hpbGQoZGxndGgpO1xuXHRcdC8vIGxhYmVsIGNvbHVtbiBoZWFkZXJcblx0XHRkbGd0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG5cdFx0ZGxndGguc3R5bGUud2lkdGggPSAnNjAlJztcblx0XHRkbGd0aC50ZXh0Q29udGVudCA9IGN1cnByZWYuY3VzdG9tTGlzdExhYmVsVGl0bGUgPz8gd2luZG93LndnVUxTKCfmoIfnrb4nLCAn5qiZ57GkJyk7XG5cdFx0ZGxndHIuYXBwZW5kQ2hpbGQoZGxndGgpO1xuXHRcdGRsZ3Rib2R5LmFwcGVuZENoaWxkKGRsZ3RyKTtcblx0XHQvLyBjb250ZW50IHJvd3Ncblx0XHRsZXQgZ290Um93ID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCB2IG9mIGN1cnZhbHVlKSB7XG5cdFx0XHRnb3RSb3cgPSB0cnVlO1xuXHRcdFx0VHdpbmtsZS5jb25maWcubGlzdERpYWxvZy5hZGRSb3coZGxndGJvZHksIHYudmFsdWUsIHYubGFiZWwpO1xuXHRcdH1cblx0XHQvLyBpZiB0aGVyZSBhcmUgbm8gdmFsdWVzIHByZXNlbnQsIGFkZCBhIGJsYW5rIHJvdyB0byBzdGFydCB0aGUgdXNlciBvZmZcblx0XHRpZiAoIWdvdFJvdykge1xuXHRcdFx0VHdpbmtsZS5jb25maWcubGlzdERpYWxvZy5hZGRSb3coZGxndGJvZHkpO1xuXHRcdH1cblx0XHQvLyBmaW5hbCBcImFkZFwiIGJ1dHRvblxuXHRcdGNvbnN0IGRsZ3Rmb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGZvb3QnKTtcblx0XHRkbGd0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG5cdFx0Y29uc3QgZGxndGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuXHRcdGRsZ3RkLnNldEF0dHJpYnV0ZSgnY29sc3BhbicsICczJyk7XG5cdFx0Y29uc3QgYWRkQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG5cdFx0YWRkQnV0dG9uLnN0eWxlLm1pbldpZHRoID0gJzhlbSc7XG5cdFx0YWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcblx0XHRhZGRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbGljaycsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cuYWRkUm93KGRsZ3Rib2R5KTtcblx0XHRcdH0sXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdFx0YWRkQnV0dG9uLnRleHRDb250ZW50ID0gJ+a3u+WKoCc7XG5cdFx0ZGxndGQuYXBwZW5kQ2hpbGQoYWRkQnV0dG9uKTtcblx0XHRkbGd0ci5hcHBlbmRDaGlsZChkbGd0ZCk7XG5cdFx0ZGxndGZvb3QuYXBwZW5kQ2hpbGQoZGxndHIpO1xuXHRcdGRsZ3RhYmxlLmFwcGVuZENoaWxkKGRsZ3Rib2R5KTtcblx0XHRkbGd0YWJsZS5hcHBlbmRDaGlsZChkbGd0Zm9vdCk7XG5cdFx0ZGlhbG9nY29udGVudC5hcHBlbmRDaGlsZChkbGd0YWJsZSk7XG5cdFx0Ly8gYnV0dG9ucGFuZSBidXR0b25zOiBbU2F2ZSBjaGFuZ2VzXSBbUmVzZXRdIFtDYW5jZWxdXG5cdFx0bGV0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuXHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnc3VibWl0Jyk7IC8vIHNvIE1vcmViaXRzLnNpbXBsZVdpbmRvdyBwdXRzIHRoZSBidXR0b24gaW4gdGhlIGJ1dHRvbiBwYW5lXG5cdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHQnY2xpY2snLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRUd2lua2xlLmNvbmZpZy5saXN0RGlhbG9nLnNhdmUoJHByZWZidXR0b24sIGRsZ3Rib2R5KTtcblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9IHdpbmRvdy53Z1VMUygn5L+d5a2Y5L+u5pS5JywgJ+WEsuWtmOS/ruaUuScpO1xuXHRcdGRpYWxvZ2NvbnRlbnQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblx0XHRidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcblx0XHRidXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ3N1Ym1pdCcpOyAvLyBzbyBNb3JlYml0cy5zaW1wbGVXaW5kb3cgcHV0cyB0aGUgYnV0dG9uIGluIHRoZSBidXR0b24gcGFuZVxuXHRcdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0J2NsaWNrJyxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0VHdpbmtsZS5jb25maWcubGlzdERpYWxvZy5yZXNldCgkcHJlZmJ1dHRvbiwgZGxndGJvZHkpO1xuXHRcdFx0fSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblx0XHRidXR0b24udGV4dENvbnRlbnQgPSB3aW5kb3cud2dVTFMoJ+WkjeS9jScsICflvqnkvY0nKTtcblx0XHRkaWFsb2djb250ZW50LmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cdFx0YnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG5cdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdzdWJtaXQnKTsgLy8gc28gTW9yZWJpdHMuc2ltcGxlV2luZG93IHB1dHMgdGhlIGJ1dHRvbiBpbiB0aGUgYnV0dG9uIHBhbmVcblx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbGljaycsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyB0aGUgZXZlbnQgcGFyYW1ldGVyIG9uIHRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYnJva2VuXG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICflj5bmtognO1xuXHRcdGRpYWxvZ2NvbnRlbnQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblx0XHRkaWFsb2cuc2V0Q29udGVudChkaWFsb2djb250ZW50KTtcblx0XHRkaWFsb2cuZGlzcGxheSgpO1xuXHR9O1xuXHQvLyBSZXNldHMgdGhlIGRhdGEgdmFsdWUsIHJlLXBvcHVsYXRlcyBiYXNlZCBvbiB0aGUgbmV3IChkZWZhdWx0KSB2YWx1ZSwgdGhlbiBzYXZlcyB0aGVcblx0Ly8gb2xkIGRhdGEgdmFsdWUgYWdhaW4gKGxlc3Mgc3VycHJpc2luZyBiZWhhdmlvdXIpXG5cdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cucmVzZXQgPSAoYnV0dG9uLCB0Ym9keSkgPT4ge1xuXHRcdC8vIHJlc2V0IHZhbHVlIG9uIGJ1dHRvblxuXHRcdGNvbnN0ICRidXR0b24gPSAkKGJ1dHRvbik7XG5cdFx0Y29uc3QgY3VycHJlZiA9ICRidXR0b24uZGF0YSgncHJlZicpO1xuXHRcdGNvbnN0IG9sZHZhbHVlID0gJGJ1dHRvbi5kYXRhKCd2YWx1ZScpO1xuXHRcdFR3aW5rbGUuY29uZmlnLnJlc2V0UHJlZihjdXJwcmVmKTtcblx0XHQvLyByZXNldCBmb3JtXG5cdFx0Y29uc3QgJHRib2R5ID0gJCh0Ym9keSk7XG5cdFx0JHRib2R5LmZpbmQoJ3RyJykuc2xpY2UoMSkucmVtb3ZlKCk7IC8vIGFsbCByb3dzIGV4Y2VwdCB0aGUgZmlyc3QgKGhlYWRlcikgcm93XG5cdFx0Ly8gYWRkIHRoZSBuZXcgdmFsdWVzXG5cdFx0Y29uc3QgY3VydmFsdWUgPSAkYnV0dG9uLmRhdGEoJ3ZhbHVlJyk7XG5cdFx0Zm9yIChjb25zdCB2IG9mIGN1cnZhbHVlKSB7XG5cdFx0XHRUd2lua2xlLmNvbmZpZy5saXN0RGlhbG9nLmFkZFJvdyh0Ym9keSwgdi52YWx1ZSwgdi5sYWJlbCk7XG5cdFx0fVxuXHRcdC8vIHNhdmUgdGhlIG9sZCB2YWx1ZVxuXHRcdCRidXR0b24uZGF0YSgndmFsdWUnLCBvbGR2YWx1ZSk7XG5cdH07XG5cdFR3aW5rbGUuY29uZmlnLmxpc3REaWFsb2cuc2F2ZSA9IChidXR0b24sIHRib2R5KSA9PiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0bGV0IGN1cnJlbnQgPSB7fTtcblx0XHQkKHRib2R5KVxuXHRcdFx0LmZpbmQoJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdJylcblx0XHRcdC5lYWNoKChpbnB1dGtleSwgaW5wdXQpID0+IHtcblx0XHRcdFx0aWYgKCQoaW5wdXQpLmhhc0NsYXNzKCd0d2lua2xlLWNvbmZpZy1jdXN0b21saXN0LXZhbHVlJykpIHtcblx0XHRcdFx0XHRjdXJyZW50ID0ge1xuXHRcdFx0XHRcdFx0dmFsdWU6IGlucHV0LnZhbHVlLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3VycmVudC5sYWJlbCA9IGlucHV0LnZhbHVlO1xuXHRcdFx0XHRcdC8vIGV4Y2x1ZGUgdG90YWxseSBlbXB0eSByb3dzXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnQudmFsdWUgfHwgY3VycmVudC5sYWJlbCkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goY3VycmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHQkKGJ1dHRvbikuZGF0YSgndmFsdWUnLCByZXN1bHQpO1xuXHR9O1xuXHQvLyByZXNldC9yZXN0b3JlIGRlZmF1bHRzXG5cdFR3aW5rbGUuY29uZmlnLnJlc2V0UHJlZkxpbmsgPSAoZSkgPT4ge1xuXHRcdGNvbnN0IHdhbnRlZHByZWYgPSBlLnRhcmdldC5pZC5zbGljZSgyMSk7IC8vIFwidHdpbmtsZS1jb25maWctcmVzZXQtXCIgcHJlZml4IGlzIHN0cmlwcGVkXG5cdFx0Ly8gc2VhcmNoIHRhY3RpY3Ncblx0XHQkKFR3aW5rbGUuY29uZmlnLnNlY3Rpb25zKS5lYWNoKChzZWN0aW9ua2V5LCBzZWN0aW9uKSA9PiB7XG5cdFx0XHRpZiAoc2VjdGlvbi5oaWRkZW4gfHwgKHNlY3Rpb24uYWRtaW5Pbmx5ICYmICFNb3JlYml0cy51c2VySXNTeXNvcCkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7IC8vIGNvbnRpbnVlOiBza2lwIGltcG9zc2liaWxpdGllc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgZm91bmRpdCA9IGZhbHNlO1xuXHRcdFx0JChzZWN0aW9uLnByZWZlcmVuY2VzKS5lYWNoKChwcmVma2V5LCBwcmVmKSA9PiB7XG5cdFx0XHRcdGlmIChwcmVmLm5hbWUgIT09IHdhbnRlZHByZWYpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gY29udGludWVcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFR3aW5rbGUuY29uZmlnLnJlc2V0UHJlZihwcmVmKTtcblx0XHRcdFx0Zm91bmRpdCA9IHRydWU7XG5cdFx0XHRcdHJldHVybiBmYWxzZTsgLy8gYnJlYWtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoZm91bmRpdCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGJyZWFrXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZmFsc2U7IC8vIHN0b3AgbGluayBmcm9tIHNjcm9sbGluZyBwYWdlXG5cdH07XG5cblx0VHdpbmtsZS5jb25maWcucmVzZXRQcmVmID0gKHByZWYpID0+IHtcblx0XHRzd2l0Y2ggKHByZWYudHlwZSkge1xuXHRcdFx0Y2FzZSAnYm9vbGVhbic6XG5cdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWYubmFtZX1gKS5jaGVja2VkID0gVHdpbmtsZS5kZWZhdWx0Q29uZmlnW3ByZWYubmFtZV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc3RyaW5nJzpcblx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWYubmFtZX1gKS52YWx1ZSA9IFR3aW5rbGUuZGVmYXVsdENvbmZpZ1twcmVmLm5hbWVdO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3NldCc6XG5cdFx0XHRcdGZvciAoY29uc3QgW2l0ZW1rZXldIG9mIE9iamVjdC5lbnRyaWVzKHByZWYuc2V0VmFsdWVzKSkge1xuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmLm5hbWV9XyR7aXRlbWtleX1gKSkge1xuXHRcdFx0XHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZi5uYW1lfV8ke2l0ZW1rZXl9YCkuY2hlY2tlZCA9XG5cdFx0XHRcdFx0XHRcdFR3aW5rbGUuZGVmYXVsdENvbmZpZ1twcmVmLm5hbWVdLmluY2x1ZGVzKGl0ZW1rZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2N1c3RvbUxpc3QnOlxuXHRcdFx0XHQkKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWYubmFtZX1gKSkuZGF0YSgndmFsdWUnLCBUd2lua2xlLmRlZmF1bHRDb25maWdbcHJlZi5uYW1lXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0bXcubm90aWZ5KGB0d2lua2xlY29uZmlnOiB1bmtub3duIGRhdGEgdHlwZSBmb3IgcHJlZmVyZW5jZSAke3ByZWYubmFtZX1gLCB7XG5cdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdHRhZzogJ3R3aW5rbGVjb25maWcnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9O1xuXHRUd2lua2xlLmNvbmZpZy5yZXNldEFsbFByZWZzID0gKCkgPT4ge1xuXHRcdC8vIG5vIGNvbmZpcm1hdGlvbiBtZXNzYWdlIC0gdGhlIHVzZXIgY2FuIGp1c3QgcmVmcmVzaC9jbG9zZSB0aGUgcGFnZSB0byBhYm9ydFxuXHRcdCQoVHdpbmtsZS5jb25maWcuc2VjdGlvbnMpLmVhY2goKHNlY3Rpb25rZXksIHNlY3Rpb24pID0+IHtcblx0XHRcdGlmIChzZWN0aW9uLmhpZGRlbiB8fCAoc2VjdGlvbi5hZG1pbk9ubHkgJiYgIU1vcmViaXRzLnVzZXJJc1N5c29wKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTsgLy8gY29udGludWU6IHNraXAgaW1wb3NzaWJpbGl0aWVzXG5cdFx0XHR9XG5cblx0XHRcdCQoc2VjdGlvbi5wcmVmZXJlbmNlcykuZWFjaCgocHJlZmtleSwgcHJlZikgPT4ge1xuXHRcdFx0XHRpZiAoIXByZWYuYWRtaW5Pbmx5IHx8IE1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHRcdFx0VHdpbmtsZS5jb25maWcucmVzZXRQcmVmKHByZWYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXHRcdHJldHVybiBmYWxzZTsgLy8gc3RvcCBsaW5rIGZyb20gc2Nyb2xsaW5nIHBhZ2Vcblx0fTtcblxuXHRUd2lua2xlLmNvbmZpZy5zYXZlID0gKGUpID0+IHtcblx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdHdpbmtsZS1jb25maWctY29udGVudCcpKTtcblx0XHRjb25zdCB1c2VyanMgPSBgJHttdy5jb25maWcuZ2V0KCd3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMnKVttdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZUlkcycpLnVzZXJdfToke213LmNvbmZpZy5nZXQoXG5cdFx0XHQnd2dVc2VyTmFtZSdcblx0XHQpfS90d2lua2xlb3B0aW9ucy5qc2A7XG5cdFx0Y29uc3QgeXNhcmNoaXZlc19wYWdlID0gbmV3IE1vcmViaXRzLndpa2kucGFnZShcblx0XHRcdHVzZXJqcyxcblx0XHRcdHdpbmRvdy53Z1VMUygn5L+d5a2Y5Y+C5pWw6K6+572u5YiwICcsICflhLLlrZjlgY/lpb3oqK3lrprliLAgJykgKyB1c2VyanNcblx0XHQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5zZXRDYWxsYmFja1BhcmFtZXRlcnMoZS50YXJnZXQpO1xuXHRcdHlzYXJjaGl2ZXNfcGFnZS5sb2FkKFR3aW5rbGUuY29uZmlnLndyaXRlUHJlZnMpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblx0VHdpbmtsZS5jb25maWcud3JpdGVQcmVmcyA9IChwYWdlb2JqKSA9PiB7XG5cdFx0Y29uc3QgZm9ybSA9IHBhZ2VvYmouZ2V0Q2FsbGJhY2tQYXJhbWV0ZXJzKCk7XG5cdFx0Ly8gdGhpcyBpcyB0aGUgb2JqZWN0IHdoaWNoIGdldHMgc2VyaWFsaXplZCBpbnRvIEpTT047IG9ubHlcblx0XHQvLyBwcmVmZXJlbmNlcyB0aGF0IHRoaXMgc2NyaXB0IGtub3dzIGFib3V0IGFyZSBrZXB0XG5cdFx0Y29uc3QgbmV3Q29uZmlnID0ge1xuXHRcdFx0b3B0aW9uc1ZlcnNpb246IDIuMSxcblx0XHR9O1xuXHRcdC8vIGEgY29tcGFyaXNvbiBmdW5jdGlvbiBpcyBuZWVkZWQgbGF0ZXIgb25cblx0XHQvLyBpdCBpcyBqdXN0IGVub3VnaCBmb3Igb3VyIHB1cnBvc2VzIChpLmUuIGNvbXBhcmluZyBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucyxcblx0XHQvLyBhcnJheXMgb2Ygc3RyaW5ncywgYW5kIGFycmF5cyBvZiB7IHZhbHVlLCBsYWJlbCB9KVxuXHRcdC8vIGFuZCBpdCBpcyBub3QgdmVyeSByb2J1c3Q6IGUuZy4gY29tcGFyZShbMl0sIFtcIjJcIl0pID09PSB0cnVlLCBhbmRcblx0XHQvLyBjb21wYXJlKHt9LCB7fSkgPT09IGZhbHNlLCBidXQgaXQncyBnb29kIGVub3VnaCBmb3Igb3VyIHB1cnBvc2VzIGhlcmVcblx0XHRjb25zdCBjb21wYXJlID0gKGEsIGIpID0+IHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG5cdFx0XHRcdGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0YS5zb3J0KCk7XG5cdFx0XHRcdGIuc29ydCgpO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgYVtpXTsgKytpKSB7XG5cdFx0XHRcdFx0Ly8gY29tcGFyaXNvbiBvZiB0aGUgdHdvIHByb3BlcnRpZXMgb2YgY3VzdG9tIGxpc3RzXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBhW2ldID09PSAnb2JqZWN0JyAmJiAoYVtpXS5sYWJlbCAhPT0gYltpXS5sYWJlbCB8fCBhW2ldLnZhbHVlICE9PSBiW2ldLnZhbHVlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYVtpXS50b1N0cmluZygpICE9PSBiW2ldLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYSA9PT0gYjtcblx0XHR9O1xuXHRcdCQoVHdpbmtsZS5jb25maWcuc2VjdGlvbnMpLmVhY2goKHNlY3Rpb25rZXksIHNlY3Rpb24pID0+IHtcblx0XHRcdGlmIChzZWN0aW9uLmFkbWluT25seSAmJiAhTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0cmV0dXJuOyAvLyBpLmUuIFwiY29udGludWVcIiBpbiB0aGlzIGNvbnRleHRcblx0XHRcdH1cblx0XHRcdC8vIHJlYWNoIGVhY2ggb2YgdGhlIHByZWZlcmVuY2VzIGZyb20gdGhlIGZvcm1cblx0XHRcdCQoc2VjdGlvbi5wcmVmZXJlbmNlcykuZWFjaCgocHJlZmtleSwgcHJlZikgPT4ge1xuXHRcdFx0XHRsZXQgdXNlclZhbHVlOyAvLyA9IHVuZGVmaW5lZFxuXHRcdFx0XHQvLyBvbmx5IHJlYWQgZm9ybSB2YWx1ZXMgZm9yIHRob3NlIHByZWZzIHRoYXQgaGF2ZSB0aGVtXG5cdFx0XHRcdGlmICghcHJlZi5hZG1pbk9ubHkgfHwgTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0XHRpZiAoIXNlY3Rpb24uaGlkZGVuKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHByZWYudHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlICdib29sZWFuJzpcblx0XHRcdFx0XHRcdFx0XHQvLyByZWFkIGZyb20gdGhlIGNoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlID0gZm9ybVtwcmVmLm5hbWVdLmNoZWNrZWQ7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3N0cmluZyc6IC8vIHJlYWQgZnJvbSB0aGUgaW5wdXQgYm94IG9yIGNvbWJvIGJveFxuXHRcdFx0XHRcdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdFx0XHRcdFx0XHR1c2VyVmFsdWUgPSBmb3JtW3ByZWYubmFtZV0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0XHRcdFx0XHRcdC8vIHJlYWQgZnJvbSB0aGUgaW5wdXQgYm94XG5cdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlID0gTnVtYmVyLnBhcnNlSW50KGZvcm1bcHJlZi5uYW1lXS52YWx1ZSwgMTApO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChOdW1iZXIuaXNOYU4odXNlclZhbHVlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLndhcm4oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+d5a2YJywgJ+WEsuWtmCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRgJHt3aW5kb3cud2dVTFMoJ+aCqOS4uiAnLCAn5oKo54K6ICcpICsgcHJlZi5uYW1lfSDmjIflrprnmoTlgLzvvIgke3ByZWYudmFsdWV9JHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J++8ieS4jeWQiOazle+8jOS8mue7p+e7reS/neWtmOaTjeS9nO+8jOS9huatpOWAvOWwhuS8mui3s+i/h+OAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J++8ieS4jeWQiOazle+8jOacg+e5vOe6jOWEsuWtmOaTjeS9nO+8jOS9huatpOWAvOWwh+acg+i3s+mBjuOAgidcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1gXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3NldCc6XG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmVhZCBmcm9tIHRoZSBzZXQgb2YgY2hlY2sgYm94ZXNcblx0XHRcdFx0XHRcdFx0XHR1c2VyVmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJlZi5zZXREaXNwbGF5T3JkZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlYWQgb25seSB0aG9zZSBrZXlzIHNwZWNpZmllZCBpbiB0aGUgZGlzcGxheSBvcmRlclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHByZWYuc2V0RGlzcGxheU9yZGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb3JtW2Ake3ByZWYubmFtZX1fJHtpdGVtfWBdLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyVmFsdWUucHVzaChpdGVtKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyByZWFkIGFsbCB0aGUga2V5cyBpbiB0aGUgbGlzdCBvZiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgW2l0ZW1rZXldIG9mIE9iamVjdC5lbnRyaWVzKHByZWYuc2V0VmFsdWVzKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZm9ybVtgJHtwcmVmLm5hbWV9XyR7aXRlbWtleX1gXS5jaGVja2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlLnB1c2goaXRlbWtleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2N1c3RvbUxpc3QnOlxuXHRcdFx0XHRcdFx0XHRcdC8vIHJlYWQgZnJvbSB0aGUgalF1ZXJ5IGRhdGEgc3RvcmVkIG9uIHRoZSBidXR0b24gb2JqZWN0XG5cdFx0XHRcdFx0XHRcdFx0dXNlclZhbHVlID0gJChmb3JtW3ByZWYubmFtZV0pLmRhdGEoJ3ZhbHVlJyk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0bXcubm90aWZ5KGB0d2lua2xlY29uZmlnOiDmnKrnn6XmlbDmja7nsbvlnovvvIzlsZ7mgKcgJHtwcmVmLm5hbWV9YCwge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3dhcm4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAndHdpbmtsZWNvbmZpZycsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChUd2lua2xlLnByZWZzKSB7XG5cdFx0XHRcdFx0XHQvLyBSZXRhaW4gdGhlIGhpZGRlbiBwcmVmZXJlbmNlcyB0aGF0IG1heSBoYXZlIGN1c3RvbWlzZWQgYnkgdGhlIHVzZXIgZnJvbSB0d2lua2xlb3B0aW9ucy5qc1xuXHRcdFx0XHRcdFx0Ly8gdW5kZWZpbmVkIGlmIG5vdCBzZXRcblx0XHRcdFx0XHRcdHVzZXJWYWx1ZSA9IFR3aW5rbGUucHJlZnNbcHJlZi5uYW1lXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gb25seSBzYXZlIHRob3NlIHByZWZlcmVuY2VzIHRoYXQgYXJlICpkaWZmZXJlbnQqIGZyb20gdGhlIGRlZmF1bHRcblx0XHRcdFx0aWYgKHVzZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFjb21wYXJlKHVzZXJWYWx1ZSwgVHdpbmtsZS5kZWZhdWx0Q29uZmlnW3ByZWYubmFtZV0pKSB7XG5cdFx0XHRcdFx0bmV3Q29uZmlnW3ByZWYubmFtZV0gPSB1c2VyVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG5vd2lraSA9ICdub3dpa2knO1xuXHRcdGxldCB0ZXh0ID0gYC8vIDwke25vd2lraX0+XFxuJHt3aW5kb3cud2dVTFMoXG5cdFx0XHRgLy8gdHdpbmtsZW9wdGlvbnMuanPvvJrnlKjmiLdUd2lua2xl5Y+C5pWw6K6+572u5paH5Lu2XFxuLy9cXG4vLyDms6jvvJrkv67mlLnmgqjnmoTlj4LmlbDorr7nva7mnIDnroDljZXnmoTlip7ms5XmmK/kvb/nlKhcXG4vLyBUd2lua2xl5Y+C5pWw6K6+572u6Z2i5p2/77yM5ZyoW1ske01vcmViaXRzLnBhZ2VOYW1lTm9ybX1dXeOAglxcbi8vXFxuLy8g6L+Z5Liq5paH5Lu25piv6Ieq5Yqo55Sf5oiQ55qE77yM5oKo5omA5YGa55qE5Lu75L2V5L+u5pS577yI6Zmk5LqGXFxuLy8g5Lul5LiA56eN5ZCI5rOV55qESmF2YVNjcmlwdOeahOaWueW8j+adpeS/ruaUuei/meS6m+WxnuaAp+WAvO+8ieS8mlxcbi8vIOWcqOS4i+S4gOasoeaCqOeCueWHu+KAnOS/neWtmOKAneaXtuiiq+imhuebluOAglxcbi8vIOS/ruaUueatpOaWh+S7tuaXtu+8jOivt+iusOW+l+S9v+eUqOWQiOazleeahEphdmFTY3JpcHTjgIJcXG5gLFxuXHRcdFx0YC8vIHR3aW5rbGVvcHRpb25zLmpz77ya5L2/55So6ICFVHdpbmtsZeWPg+aVuOioreWumuaqlOahiFxcbi8vXFxuLy8g6Ki777ya5L+u5pS55oKo55qE5Y+D5pW46Kit5a6a5pyA57Ch5Zau55qE6L6m5rOV5piv5L2/55SoXFxuLy8gVHdpbmtsZeWPg+aVuOioreWumumdouadv++8jOWcqFtbJHtNb3JlYml0cy5wYWdlTmFtZU5vcm19XV3jgIJcXG4vL1xcbi8vIOmAmeWAi+aqlOahiOaYr+iHquWLleeUoueUn+eahO+8jOaCqOaJgOWBmueahOS7u+S9leS/ruaUue+8iOmZpOS6hlxcbi8vIOS7peS4gOeoruWQiOazleeahEphdmFTY3JpcHTnmoTmlrnlvI/kvobkv67mlLnpgJnkupvlsazmgKflgLzvvInmnINcXG4vLyDlnKjkuIvkuIDmrKHmgqjpu57mk4rjgIzlhLLlrZjjgI3mmYLooqvopobok4vjgIJcXG4vLyDkv67mlLnmraTmqpTmoYjmmYLvvIzoq4voqJjlvpfkvb/nlKjlkIjms5XnmoRKYXZhU2NyaXB044CCXFxuYFxuXHRcdCl9YDtcblx0XHR0ZXh0ICs9XG5cdFx0XHQnXFxud2luZG93LlR3aW5rbGUgPSB3aW5kb3cuVHdpbmtsZSB8fCB7fTtcXG53aW5kb3cuVHdpbmtsZS5wcmVmcyA9IHdpbmRvdy5Ud2lua2xlLnByZWZzIHx8IHt9O1xcbndpbmRvdy5Ud2lua2xlLnByZWZzID0gJztcblx0XHR0ZXh0ICs9IEpTT04uc3RyaW5naWZ5KG5ld0NvbmZpZywgbnVsbCwgMik7XG5cdFx0dGV4dCArPSBgO1xcblxcbiR7d2luZG93LndnVUxTKCcvLyB0d2lua2xlb3B0aW9ucy5qc+WIsOatpOS4uuatolxcbicsICcvLyB0d2lua2xlb3B0aW9ucy5qc+WIsOatpOeCuuatolxcbicpfS8vIDwvJHtub3dpa2l9PmA7XG5cdFx0cGFnZW9iai5zZXRQYWdlVGV4dCh0ZXh0KTtcblx0XHRwYWdlb2JqLnNldEVkaXRTdW1tYXJ5KFxuXHRcdFx0d2luZG93LndnVUxTKCfkv53lrZhUd2lua2xl5Y+C5pWw6K6+572u77ya5p2l6IeqW1snLCAn5YSy5a2YVHdpbmtsZeWBj+WlveioreWumu+8muS+huiHqltbJykgK1xuXHRcdFx0XHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gK1xuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ11d55qE6Ieq5Yqo57yW6L6RJywgJ11d55qE6Ieq5YuV57eo6LyvJylcblx0XHQpO1xuXHRcdHBhZ2VvYmouc2V0Q2hhbmdlVGFncyhUd2lua2xlLmNoYW5nZVRhZ3MpO1xuXHRcdHBhZ2VvYmouc2V0Q3JlYXRlT3B0aW9uKCdyZWNyZWF0ZScpO1xuXHRcdHBhZ2VvYmouc2F2ZShUd2lua2xlLmNvbmZpZy5zYXZlU3VjY2Vzcyk7XG5cdH07XG5cdFR3aW5rbGUuY29uZmlnLnNhdmVTdWNjZXNzID0gKHBhZ2VvYmopID0+IHtcblx0XHRwYWdlb2JqLmdldFN0YXR1c0VsZW1lbnQoKS5pbmZvKCfmiJDlip8nKTtcblx0XHRjb25zdCBub3RpY2Vib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRub3RpY2Vib3guY2xhc3NOYW1lID0gJ213LW1lc3NhZ2UtYm94IG13LW1lc3NhZ2UtYm94LXN1Y2Nlc3MnO1xuXHRcdG5vdGljZWJveC5zdHlsZS5mb250U2l6ZSA9ICcxMDAlJztcblx0XHRub3RpY2Vib3guc3R5bGUubWFyZ2luVG9wID0gJzJlbSc7XG5cdFx0bm90aWNlYm94LmlubmVySFRNTCA9IGA8cD48Yj4ke3dpbmRvdy53Z1VMUyhcblx0XHRcdCfmgqjnmoRUd2lua2xl5Y+C5pWw6K6+572u5bey6KKr5L+d5a2Y44CCJyxcblx0XHRcdCfmgqjnmoRUd2lua2xl5YGP5aW96Kit5a6a5bey6KKr5YSy5a2Y44CCJ1xuXHRcdCl9PC9iPjwvcD48cD4ke3dpbmRvdy53Z1VMUygn6KaB55yL5Yiw6L+Z5Lqb5pu05pS577yM5oKo5Y+v6IO96ZyA6KaBJywgJ+imgeeci+WIsOmAmeS6m+abtOaUue+8jOaCqOWPr+iDvemcgOimgScpfTxhIGhyZWY9XCIke213LnV0aWwuZ2V0VXJsKFxuXHRcdFx0J0xJQjpCWVBBU1MnXG5cdFx0KX1cIiB0aXRsZT1cIkxJQjpCWVBBU1NcIj48Yj4ke3dpbmRvdy53Z1VMUygn57uV6L+H5rWP6KeI5Zmo57yT5a2YJywgJ+e5numBjueAj+imveWZqOW/q+WPlicpfTwvYj48L2E+44CCPC9wPmA7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLnJvb3QuYXBwZW5kQ2hpbGQobm90aWNlYm94KTtcblx0XHRjb25zdCBub3RpY2VjbGVhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyk7XG5cdFx0bm90aWNlY2xlYXIuc3R5bGUuY2xlYXIgPSAnYm90aCc7XG5cdFx0TW9yZWJpdHMuc3RhdHVzLnJvb3QuYXBwZW5kQ2hpbGQobm90aWNlY2xlYXIpO1xuXHR9O1xuXHRUd2lua2xlLmFkZEluaXRDYWxsYmFjayhUd2lua2xlLmNvbmZpZy5pbml0KTtcbn0pKGpRdWVyeSk7XG5cbmV4cG9ydCB7fTtcbiIsICJpbXBvcnQgJy4vVHdpbmtsZS5sZXNzJztcblxuKGFzeW5jIGZ1bmN0aW9uIHR3aW5rbGVMb2FkKCkge1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlJyk7XG5cdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL3R3aW5rbGVhcnYnKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZXdhcm4nKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZWJsb2NrJyk7XG5cdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL2ZyaWVuZGx5dGFsa2JhY2snKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZXNwZWVkeScpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlY29weXZpbycpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xleGZkJyk7XG5cdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL3R3aW5rbGVpbWFnZScpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlcHJvdGVjdCcpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy9mcmllbmRseXRhZycpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlc3R1YicpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlZGlmZicpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xldW5saW5rJyk7XG5cdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL3R3aW5rbGVmbHVmZicpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlYmF0Y2hkZWxldGUnKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZWJhdGNodW5kZWxldGUnKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZWJhdGNocHJvdGVjdCcpO1xuXHRhd2FpdCBpbXBvcnQoJy4vbW9kdWxlcy90d2lua2xlY2xvc2UnKTtcblx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvdHdpbmtsZWNvbmZpZycpO1xufSkoKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFN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dWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJ0d2lua2xlX2V4cG9ydHMiLCAiaW5pdF90d2lua2xlIiwgIl9fZXNtIiwgInR3aW5rbGUiLCAiJCIsICJfd2luZG93IiwgIiRib2R5IiwgIlR3aW5rbGUyIiwgIndpbmRvdyIsICJUd2lua2xlIiwgIk1vcmViaXRzIiwgInVzZXJJc0luR3JvdXAiLCAiY29uc29sZSIsICJ3YXJuIiwgImNoYW5nZVRhZ3MiLCAic3VtbWFyeUFkIiwgImhhdG5vdGVSZWdleCIsICJpbml0Q2FsbGJhY2tzIiwgImFkZEluaXRDYWxsYmFjayIsICJmdW5jIiwgIm5hbWUiLCAicHVzaCIsICJkZWZhdWx0Q29uZmlnIiwgInVzZXJUYWxrUGFnZU1vZGUiLCAiZGlhbG9nTGFyZ2VGb250IiwgImRpc2FibGVkTW9kdWxlcyIsICJ1c2VySXNTeXNvcCIsICJkaXNhYmxlZFN5c29wTW9kdWxlcyIsICJzcGlXYXRjaFJlcG9ydCIsICJkZWZhdWx0VG9CbG9jazY0IiwgImRlZmF1bHRUb1BhcnRpYWxCbG9ja3MiLCAiYmxhbmtUYWxrcGFnZU9uSW5kZWZCbG9jayIsICJ3YXRjaEJsb2NrTm90aWNlcyIsICJjdXN0b21CbG9ja1JlYXNvbkxpc3QiLCAib3BlblRhbGtQYWdlIiwgIm9wZW5UYWxrUGFnZU9uQXV0b1JldmVydCIsICJyb2xsYmFja0luUGxhY2UiLCAibWFya1JldmVydGVkUGFnZXNBc01pbm9yIiwgIndhdGNoUmV2ZXJ0ZWRQYWdlcyIsICJ3YXRjaFJldmVydGVkRXhwaXJ5IiwgIm9mZmVyUmVhc29uT25Ob3JtYWxSZXZlcnQiLCAiY29uZmlybU9uRmx1ZmYiLCAic2hvd1JvbGxiYWNrTGlua3MiLCAiY3VzdG9tUmV2ZXJ0U3VtbWFyeSIsICJub3RpZnlVc2VyT25EZWxpIiwgImRlbGlXYXRjaFBhZ2UiLCAiZGVsaVdhdGNoVXNlciIsICJ3YXRjaFJlcXVlc3RlZFBhZ2VzIiwgIndhdGNoUFBUYWdnZWRQYWdlcyIsICJ3YXRjaFByb3RlY3RlZFBhZ2VzIiwgInNwZWVkeVNlbGVjdGlvblN0eWxlIiwgIndhdGNoU3BlZWR5UGFnZXMiLCAid2F0Y2hTcGVlZHlFeHBpcnkiLCAibWFya1NwZWVkeVBhZ2VzQXNQYXRyb2xsZWQiLCAid2F0Y2hTcGVlZHlVc2VyIiwgIm5vdGlmeVVzZXJPblNwZWVkeURlbGV0aW9uTm9taW5hdGlvbiIsICJ3YXJuVXNlck9uU3BlZWR5RGVsZXRlIiwgInByb21wdEZvclNwZWVkeURlbGV0aW9uU3VtbWFyeSIsICJvcGVuVXNlclRhbGtQYWdlT25TcGVlZHlEZWxldGUiLCAiZGVsZXRlVGFsa1BhZ2VPbkRlbGV0ZSIsICJkZWxldGVSZWRpcmVjdHNPbkRlbGV0ZSIsICJkZWxldGVTeXNvcERlZmF1bHRUb0RlbGV0ZSIsICJzcGVlZHlXaW5kb3dIZWlnaHQiLCAic3BlZWR5V2luZG93V2lkdGgiLCAibG9nU3BlZWR5Tm9taW5hdGlvbnMiLCAic3BlZWR5TG9nUGFnZU5hbWUiLCAibm9Mb2dPblNwZWVkeU5vbWluYXRpb24iLCAiZW5sYXJnZUc3SW5wdXQiLCAidW5saW5rTmFtZXNwYWNlcyIsICJkZWZhdWx0V2FybmluZ0dyb3VwIiwgImNvbWJpbmVkU2luZ2xldE1lbnVzIiwgIndhdGNoV2FybmluZ3MiLCAib2xkU2VsZWN0IiwgImN1c3RvbVdhcm5pbmdMaXN0IiwgImF1dG9NZW51QWZ0ZXJSb2xsYmFjayIsICJsb2dYZmROb21pbmF0aW9ucyIsICJ4ZmRMb2dQYWdlTmFtZSIsICJub0xvZ09uWGZkTm9taW5hdGlvbiIsICJ4ZmRXYXRjaERpc2N1c3Npb24iLCAieGZkV2F0Y2hQYWdlIiwgInhmZFdhdGNoVXNlciIsICJtYXJrWGZkUGFnZXNBc1BhdHJvbGxlZCIsICJGd2RDc2RUb1hmZCIsICJhZmREZWZhdWx0Q2F0ZWdvcnkiLCAiYWZkRmFtZURlZmF1bHRSZWFzb24iLCAiYWZkU3Vic3R1YkRlZmF1bHRSZWFzb24iLCAiWGZkQ2xvc2UiLCAiY29weXZpb1dhdGNoUGFnZSIsICJjb3B5dmlvV2F0Y2hVc2VyIiwgIm1hcmtDb3B5dmlvUGFnZXNBc1BhdHJvbGxlZCIsICJhdXRvbGV2ZWxTdGFsZURheXMiLCAicmV2ZXJ0TWF4UmV2aXNpb25zIiwgImJhdGNoTWF4IiwgImJhdGNoQ2h1bmtzIiwgImNvbmZpZ1BhZ2UiLCAicHJvamVjdE5hbWVzcGFjZU5hbWUiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJzYW5kYm94UGFnZSIsICJkZWxldGlvblN1bW1hcnlBZCIsICJwcm90ZWN0aW9uU3VtbWFyeUFkIiwgImJsb2NrU3VtbWFyeUFkIiwgImdyb3VwQnlEZWZhdWx0IiwgIndhdGNoVGFnZ2VkUGFnZXMiLCAid2F0Y2hNZXJnZURpc2N1c3Npb25zIiwgIm1hcmtUYWdnZWRQYWdlc0FzTWlub3IiLCAibWFya1RhZ2dlZFBhZ2VzQXNQYXRyb2xsZWQiLCAidGFnQXJ0aWNsZVNvcnRPcmRlciIsICJjdXN0b21UYWdMaXN0IiwgImN1c3RvbUZpbGVUYWdMaXN0IiwgImN1c3RvbVJlZGlyZWN0VGFnTGlzdCIsICJ3YXRjaFN0dWJiZWRQYWdlcyIsICJtYXJrU3R1YmJlZFBhZ2VzQXNNaW5vciIsICJtYXJrU3R1YmJlZFBhZ2VzQXNQYXRyb2xsZWQiLCAic3R1YkFydGljbGVTb3J0T3JkZXIiLCAiY3VzdG9tU3R1Ykxpc3QiLCAibWFya1RhbGtiYWNrQXNNaW5vciIsICJpbnNlcnRUYWxrYmFja1NpZ25hdHVyZSIsICJ0YWxrYmFja0hlYWRpbmciLCAid2dVTFMiLCAibWFpbEhlYWRpbmciLCAicG9ydGxldEFyZWEiLCAicG9ydGxldElkIiwgInBvcnRsZXROYW1lIiwgInBvcnRsZXRUeXBlIiwgInBvcnRsZXROZXh0IiwgImZpbmQiLCAibGVuZ3RoIiwgImdldFByZWYiLCAicHJlZnMiLCAiVHdpbmtsZUNvbmZpZyIsICJhZGRQb3J0bGV0IiwgIm5hdmlnYXRpb24iLCAiaWQiLCAidGV4dCIsICJ0eXBlIiwgIm5leHRub2RlaWQiLCAicm9vdCIsICJkb2N1bWVudCIsICJxdWVyeVNlbGVjdG9yIiwgInRlc3QiLCAiY29uY2F0IiwgIml0ZW0iLCAicGFyZW50Tm9kZSIsICJuZXh0bm9kZSIsICJza2luIiwgIm91dGVyTmF2Q2xhc3MiLCAiaW5uZXJEaXZDbGFzcyIsICJvdXRlck5hdiIsICJoZWFkaW5nIiwgImNyZWF0ZUVsZW1lbnQiLCAic2V0QXR0cmlidXRlIiwgImNsYXNzTmFtZSIsICJpbnNlcnRCZWZvcmUiLCAiYXBwZW5kQ2hpbGQiLCAidWwiLCAiaW5jbHVkZXMiLCAiY2hrYm94IiwgInNwYW4iLCAiY3JlYXRlVGV4dE5vZGUiLCAiYSIsICJocmVmIiwgIm9uIiwgImUiLCAicHJldmVudERlZmF1bHQiLCAiaW5uZXJEaXYiLCAiYWRkUG9ydGxldExpbmsiLCAidGFzayIsICJ0b29sdGlwIiwgImxpbmsiLCAidXRpbCIsICJjc3MiLCAiZXYiLCAiY29sbGFwc2libGVUYWJzIiwgImhhbmRsZVJlc2l6ZSIsICJzY3JpcHR1cmwiLCAiZ2V0VXJsIiwgImFjdGlvbiIsICJjdHlwZSIsICJoYXBweSIsICJsb2FkZXIiLCAiZ2V0U2NyaXB0IiwgImZhaWwiLCAibm90aWZ5IiwgInRhZyIsICJhbHdheXMiLCAibG9hZCIsICJhY3RpdmVTcGVjaWFsUGFnZUxpc3QiLCAidG9wIiwgInNlbGYiLCAidXNlckFnZW50IiwgIndpa2kiLCAiYXBpIiwgInNldEFwaVVzZXJBZ2VudCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAibW9kdWxlMiIsICJ2YWx1ZSIsICJlcnIiLCAiZiIsICJhZGRDU1MiLCAiaXNWZWN0b3IiLCAic29ydEJ5TmFtZXNwYWNlIiwgImZpcnN0IiwgInNlY29uZCIsICJucyIsICJ0aXRsZSIsICJnZW5lcmF0ZUJhdGNoUGFnZUxpbmtzIiwgImNoZWNrYm94IiwgIiRjaGVja2JveCIsICJodG1sTm9kZSIsICJ2YWwiLCAibmV4dCIsICJwcmVwZW5kIiwgImpRdWVyeSIsICJ0d2lua2xlYXJ2X2V4cG9ydHMiLCAiaW5pdF90d2lua2xlYXJ2IiwgInR3aW5rbGVhcnYiLCAiYXJ2IiwgInVzZXJuYW1lIiwgImlzSVAiLCAiaXNJUEFkZHJlc3MiLCAiY2FsbGJhY2siLCAidWlkIiwgIldpbmRvdyIsICJzaW1wbGVXaW5kb3ciLCAic2V0VGl0bGUiLCAic2V0U2NyaXB0TmFtZSIsICJhZGRGb290ZXJMaW5rIiwgImZvcm0iLCAicXVpY2tGb3JtIiwgImV2YWx1YXRlIiwgImNhdGVnb3JpZXMiLCAiYXBwZW5kIiwgImxhYmVsIiwgImV2ZW50IiwgImNoYW5nZUNhdGVnb3J5IiwgImRpc2FibGVkIiwgInN0eWxlIiwgInJlc3VsdCIsICJyZW5kZXIiLCAic2V0Q29udGVudCIsICJkaXNwbGF5IiwgInF1ZXJ5IiwgImxpc3QiLCAiYmtwcm9wIiwgImZvcm1hdCIsICJia2lwIiwgImJrdXNlcnMiLCAiYXBpb2JqIiwgImJsb2NrbGlzdCIsICJnZXRSZXNwb25zZSIsICJibG9ja3MiLCAiYmxvY2siLCAibWVzc2FnZSIsICJwYXJ0aWFsIiwgInJhbmdlc3RhcnQiLCAicmFuZ2VlbmQiLCAicG9zdCIsICJldnQiLCAiY3JlYXRlRXZlbnQiLCAiaW5pdEV2ZW50IiwgImNhdGVnb3J5IiwgImRpc3BhdGNoRXZlbnQiLCAibHRhX2xpc3QiLCAic29ja21hc3Rlcl9jaGFuZ2VkIiwgInNldF9zb2NrbWFzdGVyIiwgInRhcmdldCIsICJzb2NrbWFzdGVyIiwgInZhbHVlXyIsICJyb290XyIsICJvbGRfYXJlYSIsICJnZXRFbGVtZW50cyIsICJ3b3JrX2FyZWEiLCAicHJldmlld2xpbmsiLCAiY3Vyc29yIiwgInRleHRDb250ZW50IiwgInByZXZpZXciLCAiZWxlbWVudCIsICJzdWJsYWJlbCIsICJtaW4iLCAibWF4IiwgInJlcGxhY2VDaGlsZCIsICJhZGRDbGFzcyIsICJzcGlub3RpY2VwcmV2aWV3ZXIiLCAibGFzdCIsICJnZXRQYXJhbVZhbHVlIiwgImJhZGlkIiwgImdvb2RpZCIsICJwcmV2aWV3ZXIiLCAicmVhc29uIiwgImdldFJlcG9ydFdpa2l0ZXh0IiwgImlucHV0IiwgImdldElucHV0RGF0YSIsICJiZWdpblJlbmRlciIsICJjb21tZW50IiwgImNoZWNrVGl0bGUiLCAicmV2aWQiLCAicGFnZV8iLCAiVGl0bGUiLCAibmFtZXNwYWNlIiwgInBhZ2UiLCAicGFnZXMiLCAibWFwIiwgIm8iLCAiX2l0ZXJhdG9yMiIsICJfc3RlcDIiLCAiZ2V0UHJlZml4ZWRUZXh0IiwgInJlcGxhY2UiLCAidHJpbSIsICJzdHJpbmciLCAiYXBwZW5kUHVuY3R1YXRpb24iLCAidHlwZXMiLCAiYXJ2dHlwZSIsICJ0b0xvd2VyQ2FzZUZpcnN0Q2hhciIsICJoYXNTaGFyZWQiLCAic3BsaWNlIiwgImluZGV4T2YiLCAiY29uZmlybSIsICJqb2luIiwgInNsaWNlIiwgImhpZGVuYW1lIiwgInRvVXBwZXJDYXNlRmlyc3RDaGFyIiwgInNvY2twdXBwZXRzIiwgImFycmF5IiwgInVuaXEiLCAic29jayIsICJpbmRleCIsICJjaGVja3VzZXIiLCAidiIsICJfaW5wdXQkZ29vZGlkIiwgInN1bW1hcnkiLCAic2V0QnV0dG9uc0VuYWJsZWQiLCAic3RhdHVzIiwgImluaXQiLCAiYWN0aW9uQ29tcGxldGVkIiwgInJlZGlyZWN0IiwgIm5vdGljZSIsICJld2lwUGFnZSIsICJzZXRGb2xsb3dSZWRpcmVjdCIsICJnZXRQYWdlVGV4dCIsICIkZXdpcExpbmsiLCAiUmVnRXhwIiwgImVzY2FwZVJlZ0V4cCIsICJnZXRTdGF0dXNFbGVtZW50IiwgImVycm9yIiwgInByaW50VXNlclRleHQiLCAic2V0UGFnZVNlY3Rpb24iLCAic2V0RWRpdFN1bW1hcnkiLCAic2V0Q2hhbmdlVGFncyIsICJzZXRBcHBlbmRUZXh0IiwgInVhYVBhZ2UiLCAiJHVhYUxpbmsiLCAicmVwb3J0cGFnZSIsICJzcGlQYWdlIiwgInNldFdhdGNobGlzdCIsICJhaXZQYWdlIiwgIiRhaXZMaW5rIiwgInR3aW5rbGV3YXJuX2V4cG9ydHMiLCAiaW5pdF90d2lua2xld2FybiIsICJ0d2lua2xld2FybiIsICJyZWxldmFudFVzZXJOYW1lIiwgIiR2YW5kYWxUYWxrTGluayIsICJtYWtlVmFuZGFsVGFsa0xpbmsiLCAicGFnZU5hbWVOb3JtIiwgImFmVGFsa0xpbmsiLCAicGFnZV9wcmVmaXhlZHRpdGxlIiwgInBhZ2VuYW1lIiwgIndyYXBJbm5lciIsICJhdHRyIiwgImV4dHJhUGFyYW0iLCAicmF3dXJsZW5jb2RlIiwgImRpYWxvZyIsICJtYWluX3NlbGVjdCIsICJtYWluX2dyb3VwIiwgImNoYW5nZV9jYXRlZ29yeSIsICJkZWZhdWx0R3JvdXAiLCAiTnVtYmVyIiwgInBhcnNlSW50IiwgInNlbGVjdGVkIiwgImNoYW5nZV9zdWJjYXRlZ29yeSIsICJzaXplIiwgInBsYWNlaG9sZGVyIiwgIm1vcmUiLCAiY2FsbGJhY2tzIiwgInZhbnJldmlkIiwgInRpdGxlcyIsICJwcm9wIiwgInJ2c3RhcnRpZCIsICJydmxpbWl0IiwgInJ2ZGlyIiwgInJ2cHJvcCIsICJyZXZlcnRVc2VyIiwgImdldEF0dHJpYnV0ZSIsICJjaGVja1N0YWxlIiwgInZhbnRpbWVzdGFtcF8iLCAicmV2RGF0ZSIsICJkYXRlIiwgImlzVmFsaWQiLCAiYWRkIiwgImlzQmVmb3JlIiwgIkRhdGUiLCAidmFudGltZXN0YW1wIiwgInJldmlkcyIsICJtZXNzYWdlcyIsICJsZXZlbHMiLCAibGV2ZWwxIiwgImxldmVsMiIsICJzaW5nbGVub3RpY2UiLCAic2luZ2xld2FybiIsICJzdXBwcmVzc0FydGljbGVJblN1bW1hcnkiLCAicHJldl9hcnRpY2xlIiwgInByZXZfcmVhc29uIiwgInRhbGtwYWdlT2JqIiwgInN1Yl9ncm91cCIsICJvbGRfc3VidmFsdWUiLCAib2xkX3N1YnZhbHVlX3JlIiwgImhhc0NoaWxkTm9kZXMiLCAicmVtb3ZlQ2hpbGQiLCAiZmlyc3RDaGlsZCIsICJjcmVhdGVFbnRyaWVzIiwgImNvbnRlbnRzIiwgImNvbnRhaW5lciIsICJ3cmFwSW5PcHRncm91cCIsICJsZXZlbCIsICJjbGllbnQiLCAicHJvZmlsZSIsICJwbGF0Zm9ybSIsICJ3cmFwcGVyT3B0Z3JvdXAiLCAiX2kyIiwgIl9PYmplY3QkZW50cmllcyIsICJPYmplY3QiLCAiZW50cmllcyIsICJpdGVtS2V5IiwgIml0ZW1Qcm9wZXJ0aWVzIiwgImtleSIsICJ0ZW1wbGF0ZSIsICJlbGVtIiwgImRhdGEiLCAiZWxlbVJlbmRlcmVkIiwgInVuU29ydGVkU2luZ2xldHMiLCAic29ydGVkU2luZ2xldE1lc3NhZ2VzIiwgIl9pdGVyYXRvcjMiLCAia2V5cyIsICJzb3J0IiwgIl9zdGVwMyIsICJfaTMiLCAiX2FyciIsICJsdmwiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAibGV2ZWxHcm91cCIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSIsICJvcHRncm91cCIsICJhdXRvbGV2ZWxQcm9jIiwgIndpa2l0ZXh0IiwgImxhdGVzdCIsICJkYXRlUHJvY2Vzc2luZyIsICJwYXJhbXMiLCAiYXJ0aWNsZSIsICJhdXRvbGV2ZWxQYXJzZVdpa2l0ZXh0IiwgIl9pdGVyYXRvcjYiLCAiX3N0ZXA2IiwgInBvc3RDYXRlZ29yeUNsZWFudXAiLCAidXNlcnRhbGtfcGFnZSIsICJwYWdlb2JqIiwgIiRub1RhbGtQYWdlTm9kZSIsICJjbG9zZVByZXZpZXciLCAicmVtb3ZlIiwgInNldEVsZW1lbnRUb29sdGlwVmlzaWJpbGl0eSIsICJyZXNldEVsZW1lbnRMYWJlbCIsICJzZWxlY3QyIiwgIndpZHRoIiwgIm1hdGNoZXIiLCAibWF0Y2hlcnMiLCAib3B0Z3JvdXBGdWxsIiwgInRlbXBsYXRlUmVzdWx0IiwgImhpZ2hsaWdodFNlYXJjaE1hdGNoZXMiLCAibGFuZ3VhZ2UiLCAic2VhcmNoaW5nIiwgInF1ZXJ5SW50ZXJjZXB0b3IiLCAiY2hhbmdlIiwgImF1dG9TdGFydCIsICJ0cmlnZ2VyIiwgIm5vdExpbmtlZEFydGljbGUiLCAibm90QXJ0aWNsZSIsICJvdmVycmlkZUVsZW1lbnRMYWJlbCIsICJnZXRXYXJuaW5nV2lraXRleHQiLCAidGVtcGxhdGVOYW1lIiwgImlzQ3VzdG9tIiwgIm5vU2lnbiIsICJzaG93UHJldmlldyIsICJ0ZW1wbGF0ZW5hbWUiLCAibGlua2VkYXJ0aWNsZSIsICJ0ZW1wbGF0ZXRleHQiLCAibWVzc2FnZURhdGEiLCAiaGlzdG9yeV9yZSIsICJoaXN0b3J5IiwgImN1cnJlbnQiLCAiZXhlYyIsICJjdXJyZW50X2RhdGUiLCAiaXNBZnRlciIsICJzdGF0ZWxlbSIsICIkYXV0b2xldmVsTWVzc2FnZSIsICJpc05hTiIsICJhdXRvVGltZW91dCIsICJnZXRUaW1lIiwgIiRsaW5rIiwgImNsb3NlIiwgInN0YXR1c05vZGUiLCAiaW5zZXJ0QWZ0ZXIiLCAibWFpbiIsICJnZXRDYWxsYmFja1BhcmFtZXRlcnMiLCAid2FybmluZ0hpc3RvcnkiLCAibm93IiwgImdldExvYWRUaW1lIiwgInRlbXBsYXRlQW5kTGV2ZWwiLCAiY3VzdG9tUHJvY2VzcyIsICJzcGxpdCIsICJwcmVmaXgiLCAic3ViIiwgIndhcm5pbmdUZXh0IiwgInNlY3Rpb25FeGlzdHMiLCAic2VjdGlvbk51bWJlciIsICJzZWN0aW9ucyIsICJtYXRjaCIsICJkYXRlSGVhZGVyUmVnZXgiLCAibW9udGhIZWFkZXJSZWdleCIsICJyZXZlcnNlIiwgInNvbWUiLCAic2VjIiwgImlkeCIsICJzZXROZXdTZWN0aW9uVGl0bGUiLCAiaW5mbyIsICJtb250aEhlYWRlciIsICJzZXROZXdTZWN0aW9uVGV4dCIsICJuZXdTZWN0aW9uIiwgInVzZXJUYWxrUGFnZSIsICJnZXRGcmFnbWVudCIsICJhbGVydCIsICIkc2VsZWN0ZWRFbCIsICJ5c2FyY2hpdmVzX3BhZ2UiLCAic2V0Q2FsbGJhY2tQYXJhbWV0ZXJzIiwgInR3aW5rbGVibG9ja19leHBvcnRzIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgImluaXRfdHdpbmtsZWJsb2NrIiwgInJlcXVpcmUiLCAidHdpbmtsZWJsb2NrIiwgImluaXRNd0FwaSIsICJibG9ja2VkVXNlck5hbWUiLCAibWVudUZvcm1hdHRlZE5hbWVzcGFjZXMiLCAiYmxvY2tBY3Rpb25UZXh0IiwgInJlYmxvY2siLCAidW5ibG9jayIsICJpcCIsICJpc1JhbmdlIiwgInZhbGlkQ0lEUiIsICJjdXJyZW50QmxvY2tJbmZvIiwgImZpZWxkX2Jsb2NrX29wdGlvbnMiLCAiZmllbGRfdGVtcGxhdGVfb3B0aW9ucyIsICJhY3Rpb25maWVsZCIsICJjaGFuZ2VfYWN0aW9uIiwgImhpZGRlbiIsICJjaGVja2VkIiwgInNpeHR5Rm91ciIsICJnZXQ2NCIsICJibG9jazY0ZmllbGQiLCAiY2hhbmdlX2Jsb2NrNjQiLCAiZmV0Y2hVc2VySW5mbyIsICJpc1JlZ2lzdGVyZWQiLCAiJGZvcm0iLCAic2V0RWxlbWVudFZpc2liaWxpdHkiLCAicGFyZW50IiwgInRyYW5zZm9ybUJsb2NrUHJlc2V0cyIsICJibG9jazY0IiwgImFjdGlvbnR5cGUiLCAiZmV0Y2hlZERhdGEiLCAicHJvY2Vzc1VzZXJJbmZvIiwgImZuIiwgImJsb2NraW5mbyIsICJ1c2VyaW5mbyIsICJ1c2VycyIsICJ1c2VyIiwgInVzZXJpZCIsICJ1c2VySXNCb3QiLCAiZ3JvdXBtZW1iZXJzaGlwcyIsICJncm91cCIsICJkaXNhYmxldGFsayIsICJhbGxvd3VzZXJ0YWxrIiwgImhhcmRibG9jayIsICJhbm9ub25seSIsICJoYXNCbG9ja0xvZyIsICJsb2dldmVudHMiLCAiYmxvY2tMb2ciLCAiYmxvY2tMb2dJZCIsICJsb2dpZCIsICJsZXR5cGUiLCAibGVsaW1pdCIsICJsZXRpdGxlIiwgInVzdXNlcnMiLCAidXNwcm9wIiwgInRoZW4iLCAic2F2ZUZpZWxkc2V0IiwgImZpZWxkc2V0IiwgIl9pdGVyYXRvcjciLCAic2VyaWFsaXplQXJyYXkiLCAiX3N0ZXA3IiwgImVsIiwgIiRibG9jazY0IiwgInByaW9yTmFtZSIsICJpcyIsICJvcmlnaW5hbElzUmFuZ2UiLCAicmVnZW5lcmF0ZUZvcm0iLCAidGl0bGVCYXIiLCAibmV4dFNpYmxpbmciLCAibm9kZVZhbHVlIiwgImZpZWxkX3ByZXNldCIsICJmaWVsZF90YWdfb3B0aW9ucyIsICJmaWVsZF91bmJsb2NrX29wdGlvbnMiLCAiJGJsb2NrIiwgImJsb2NrQm94IiwgIiR0ZW1wbGF0ZSIsICJ0ZW1wbGF0ZUJveCIsICIkdGFnIiwgInRhZ0JveCIsICIkcHJvdGVjdCIsICIkcGFydGlhbCIsICJwYXJ0aWFsQm94IiwgIiR1bmJsb2NrIiwgInVuYmxvY2tCb3giLCAiYmxvY2tHcm91cCIsICJibG9ja0dyb3Vwc1BhcnRpYWwiLCAiYmxvY2tHcm91cHMiLCAicHJpb3IiLCAiYmxvY2tQcmVzZXRzSW5mbyIsICJiZyIsICJpc0luZmluaXR5IiwgImV4cGlyeSIsICJmaWx0ZXIiLCAiY2hhbmdlX3ByZXNldCIsICJmaWx0ZXJlZF9ibG9ja19ncm91cHMiLCAiY2hhbmdlX2V4cGlyeSIsICJ0ZW1wbGF0ZV9leHBpcnkiLCAibXVsdGlwbGUiLCAiX2k0IiwgIl9PYmplY3QkZW50cmllczIiLCAibnVtYmVyIiwgImJsb2Nrb3B0aW9ucyIsICJub2NyZWF0ZSIsICJub2VtYWlsIiwgImF1dG9ibG9jayIsICJ3YXRjaHVzZXIiLCAidG9nZ2xlX3NlZV9hbHNvcyIsICJjaGFuZ2VfdGVtcGxhdGUiLCAiYmxvY2tfcmVhc29uIiwgImJsYW5rX2R1cmF0aW9uIiwgIm5vdGFsayIsICJub2VtYWlsX3RlbXBsYXRlIiwgIm5vY3JlYXRlX3RlbXBsYXRlIiwgIiRwcmV2aWV3bGluayIsICJvZmYiLCAic3ViZ3JvdXAiLCAib2xkZmllbGQiLCAiaGlkZSIsICJzaG93IiwgImVycm9yTG9hZGluZyIsICJtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIiwgIm1pbmltdW1JbnB1dExlbmd0aCIsICJhamF4IiwgInVybCIsICJ3aWtpU2NyaXB0IiwgImRhdGFUeXBlIiwgImRlbGF5IiwgIm5ld0Zyb21UZXh0IiwgInRlcm0iLCAiYXBmcm9tIiwgImFwbmFtZXNwYWNlIiwgImFwbGltaXQiLCAicHJvY2Vzc1Jlc3VsdHMiLCAicmVzdWx0cyIsICJhbGxwYWdlcyIsICJ0b1RleHQiLCAidGVtcGxhdGVTZWxlY3Rpb24iLCAiY2hvaWNlIiwgInJlbCIsICJ3b3JkQmVnaW5uaW5nIiwgInNhbWVVc2VyIiwgInN0YXR1c1N0ciIsICIkcmFuZ2VibG9ja2xvZ2xpbmsiLCAiaHRtbCIsICJjYWxlbmRhciIsICJpbmZvU3RyIiwgInVwZGF0ZV9mb3JtIiwgImJsb2NrbG9naW5mbyIsICIkYmxvY2tsb2dsaW5rIiwgImxhc3RCbG9ja0FjdGlvbiIsICJibG9ja0FjdGlvbiIsICJ0aW1lc3RhbXAiLCAiZm9ybWF0VGltZSIsICJkdXJhdGlvbiIsICJmb3JSZWdpc3RlcmVkT25seSIsICJwYWdlUGFyYW0iLCAicmVhc29uUGFyYW0iLCAibm9uc3RhbmRhcmQiLCAiZm9yQW5vbk9ubHkiLCAic2lnIiwgImNoZWNrdXNlcmJsb2NrIiwgImJpb2Jsb2NrIiwgInVjYmxvY2siLCAibnBibG9jayIsICJfaXRlcmF0b3I4IiwgIl9zdGVwOCIsICJuZXdLZXkiLCAiY3VzdG9tIiwgIl9pNSIsICJfT2JqZWN0JGVudHJpZXMzIiwgInByZXNldCIsICJzZXR0aW5ncyIsICJpbmRlZmluaXRlIiwgIm1ldGEiLCAic2hvd190ZW1wbGF0ZSIsICJ0ZW1wbGF0ZXMiLCAiYmxvY2tQcmVzZXQiLCAiYmxvY2tTZXR0aW5ncyIsICJyZWdpc3RyYXRpb25SZXN0cmljdCIsICJzZWVBbHNvcyIsICJzZWVBbHNvTWVzc2FnZSIsICJ1c2VJbml0aWFsT3B0aW9ucyIsICJwYXJzZSIsICJ0b0dNVFN0cmluZyIsICJleHBpcnlfcHJlc2V0IiwgImVhY2giLCAiX2kiLCAiY2hlY2siLCAicHJlcGVuZFJlYXNvbiIsICJwYWdlcmVzdHJpY3Rpb25zIiwgIiRwYWdlU2VsZWN0IiwgIiRuYW1lc3BhY2VTZWxlY3QiLCAicmVzdHJpY3Rpb25zIiwgInByIiwgIl9pdGVyYXRvcjkiLCAiX3N0ZXA5IiwgImVzY2FwZVNlbGVjdG9yIiwgIm5ld09wdGlvbiIsICJPcHRpb24iLCAiQXJyYXkiLCAiaXNBcnJheSIsICJuYW1lc3BhY2VzIiwgInByZXZfdGVtcGxhdGVfZXhwaXJ5IiwgImFyZWEiLCAibmFtZXNwYWNlcmVzdHJpY3Rpb25zIiwgInRlbXBsYXRlVGV4dCIsICJnZXRCbG9ja05vdGljZVdpa2l0ZXh0IiwgIl90ZW1wbGF0ZW9wdGlvbnMiLCAidG9CbG9jayIsICJ0b1dhcm4iLCAidG9QYXJ0aWFsIiwgInRvVGFnIiwgInRvUHJvdGVjdCIsICJ0b1VuYmxvY2siLCAidGVtcGxhdGVvcHRpb25zIiwgInVuYmxvY2tvcHRpb25zIiwgInRvQ2xvc2V2aXAiLCAiY2xvc2V2aXAiLCAiY2hlY2tJbmNvbXBhdGlibGUiLCAiY29uZmxpY3RzIiwgImV4dHJhIiwgImNvdW50IiwgInJlZHVjZSIsICJzdW0iLCAic3BwVXNlcm5hbWUiLCAic3RhdHVzRWxlbWVudCIsICJsb2dFeHBpcnkiLCAiZXhwaXJ5RGF0ZSIsICJncm91cHNDYW5CZVJlbW92ZWQiLCAiZ3JvdXBzVG9CZVJlbW92ZWQiLCAiZ3JvdXBzIiwgInRhZ3MiLCAidG9rZW4iLCAidG9rZW5zIiwgIm1iQXBpIiwgImlzc3VlX3RlbXBsYXRlIiwgInZpcFBhZ2UiLCAiY2xvc2VSZXF1ZXN0IiwgInJpZ2h0U3RhdHVzRWxlbWVudCIsICJyZXZva2VPcHRpb25zIiwgInVzZXJyaWdodHN0b2tlbiIsICJtckFwaSIsICJ1c2VyUGFnZSIsICJ0YWd1c2VycGFnZSIsICJ1bmJsb2NrU3RhdHVzRWxlbWVudCIsICJ1bmJsb2NrTWJBcGkiLCAiX2l0ZXJhdG9yMTAiLCAiX3N0ZXAxMCIsICJ0YWd0ZXh0IiwgInNwcFR5cGUiLCAic3BwRXZpZGVuY2UiLCAic3BtQ2hlY2tlZCIsICJzcG1FdmlkZW5jZSIsICJzZXRQYWdlVGV4dCIsICJzYXZlIiwgInByb3RlY3R1c2VycGFnZSIsICJleGlzdHMiLCAic2V0RWRpdFByb3RlY3Rpb24iLCAic2V0TW92ZVByb3RlY3Rpb24iLCAic2V0Q3JlYXRlUHJvdGVjdGlvbiIsICJwcm90ZWN0IiwgImZvcm1EYXRhIiwgInVzZXJ0YWxrX3N1bW1hcnkiLCAidXNlck5hbWUiLCAiZXhwaXJ5VGV4dCIsICJyZXF1ZXN0TGlzdCIsICJmb3VuZCIsICJ2aXBSZSIsICJwYWdlTmFtZVJlZ2V4IiwgImkiLCAidHJpbUVuZCIsICJuZXdUZXh0IiwgIm1ha2VTZW50ZW5jZSIsICJwb3AiLCAicCIsICJuYW1lc3BhY2VOYW1lcyIsICJkYXRlSGVhZGVyUmVnZXhMYXN0IiwgImRhdGVIZWFkZXJSZWdleFJlc3VsdCIsICJsYXN0SGVhZGVySW5kZXgiLCAibGFzdEluZGV4T2YiLCAiZnJpZW5kbHl0YWxrYmFja19leHBvcnRzIiwgImluaXRfZnJpZW5kbHl0YWxrYmFjayIsICJmcmllbmRseXRhbGtiYWNrIiwgInRhbGtiYWNrIiwgImNoYW5nZVRhcmdldCIsICJ0YnRhcmdldCIsICJlbHF1ZXJ5IiwgImVsbGltaXQiLCAieXNhcmNoaXZlc19hcGkiLCAib3B0b3V0U3RhdHVzIiwgIm9wdG91dCIsICIkZWwiLCAiZ2V0WE1MIiwgInByZXZfcGFnZSIsICJwcmV2X3NlY3Rpb24iLCAicHJldl9tZXNzYWdlIiwgInZhbHVlcyIsICJzZWN0aW9uIiwgInJlcXVpcmVkIiwgIm5vdGljZWJvYXJkIiwgIl9pNiIsICJfT2JqZWN0JGVudHJpZXM0IiwgIm5vdGljZWJvYXJkcyIsICJuYm5hbWUiLCAiZGVmYXVsdFNlbGVjdGVkIiwgImFmZnAiLCAiY29udGVudCIsICJlZGl0U3VtbWFyeSIsICJzYmwiLCAic2hsIiwgImdldENoZWNrZWQiLCAibmFtZXNwYWNlUmVnZXgiLCAiZnVsbFVzZXJUYWxrUGFnZU5hbWUiLCAidXNlcl90YWxrIiwgImdldE5vdGljZVdpa2l0ZXh0IiwgInRhbGtwYWdlIiwgInNldENyZWF0ZU9wdGlvbiIsICJzZXRNaW5vckVkaXQiLCAibm90aWNldGV4dCIsICJzYWZlUmVwbGFjZSIsICJ0d2lua2xlc3BlZWR5X2V4cG9ydHMiLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgImluaXRfdHdpbmtsZXNwZWVkeSIsICJ0d2lua2xlc3BlZWR5IiwgInNwZWVkeSIsICJpbml0RGlhbG9nIiwgImV2YWx1YXRlU3lzb3AiLCAiZXZhbHVhdGVVc2VyIiwgImhhc0NTRCIsICJtb2RlIiwgInN5c29wU2luZ2xlU3VibWl0IiwgInN5c29wUmFkaW9DbGljayIsICJzeXNvcE11bHRpcGxlU3VibWl0IiwgInN5c29wTXVsdGlwbGVSYWRpb0NsaWNrIiwgInVzZXJNdWx0aXBsZVN1Ym1pdCIsICJ1c2VyTXVsdGlwbGVSYWRpb0NsaWNrIiwgInVzZXJTaW5nbGVTdWJtaXQiLCAidXNlclNpbmdsZVJhZGlvQ2xpY2siLCAiaXNTeXNvcCIsICJoYXNTdWJtaXRCdXR0b24iLCAiaXNNdWx0aXBsZSIsICJjYWxsYmFja2Z1bmMiLCAiY0Zvcm0iLCAiY0NoZWNrZWQiLCAicmVkaXJlY3RzIiwgImRlbG11bHRpcGxlIiwgIm9wZW51c2VydGFsayIsICJzYWx0aW5nIiwgIm1vZGVDaGFuZ2VkIiwgInN0b3BQcm9wYWdhdGlvbiIsICJkZWxldGVPcHRpb25zIiwgInRhZ09wdGlvbnMiLCAicHJpb3JEZWxldGlvbkNvdW50IiwgImdldE1vZGUiLCAidGFnX29ubHkiLCAiaXNTeXNvcE1vZGUiLCAiZXZhbHVhdGVUeXBlIiwgInJhZGlvT3JDaGVja2JveCIsICJnZW5lcmF0ZUNzZExpc3QiLCAiY3VzdG9tUmF0aW9uYWxlIiwgImFydGljbGVMaXN0IiwgInVzZXJMaXN0IiwgInVzZXJ0YWxrTGlzdCIsICJmaWxlTGlzdCIsICJjYXRlZ29yeUxpc3QiLCAiZHJhZnRMaXN0IiwgInRhbGtMaXN0IiwgImdlbmVyYWxDcml0ZXJpYSIsICJnZW5lcmFsTGlzdCIsICJnZW5lcmF0ZUFycmF5IiwgInJlZGlyZWN0TGlzdCIsICJjdXN0b21PcHRpb24iLCAiY2xpY2siLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwgImxhYmVscyIsICJlbXB0eSIsICJsZWFjdGlvbiIsICJsZXByb3AiLCAicmVzcG9uc2UiLCAiZGVsQ291bnQiLCAiY29udGludWUiLCAib3BlblN1Ymdyb3VwSGFuZGxlciIsICJjaGlsZHJlbiIsICJmb2N1cyIsICJzdWJtaXRTdWJncm91cEhhbmRsZXIiLCAicHJvdG90eXBlIiwgImNhbGwiLCAiY3JpdEVsZW1lbnQiLCAiY3JpdGVyaW9uIiwgImhpZGVXaGVuTXVsdGlwbGUiLCAiaGlkZVN1Ymdyb3VwV2hlbk11bHRpcGxlIiwgImhpZGVXaGVuU2luZ2xlIiwgImhpZGVTdWJncm91cFdoZW5TaW5nbGUiLCAiaGlkZVdoZW5TeXNvcCIsICJoaWRlU3ViZ3JvdXBXaGVuU3lzb3AiLCAiaGlkZVdoZW5Vc2VyIiwgImhpZGVTdWJncm91cFdoZW5Vc2VyIiwgImhpZGVXaGVuUmVkaXJlY3QiLCAic2hvd0luTmFtZXNwYWNlcyIsICJoaWRlSW5OYW1lc3BhY2VzIiwgIm9yaWdpbmFsRXZlbnQiLCAibm9ybWFsaXplZENyaXRlcmlvbiIsICJub3JtYWxpemVIYXNoIiwgImcxIiwgImcyIiwgImczIiwgImc0IiwgImc1IiwgImc2IiwgImc3IiwgImc4IiwgImc5IiwgImExIiwgImEyIiwgImEzIiwgInIxIiwgInIyIiwgImYxIiwgImYyIiwgImYzIiwgImY0IiwgImY1IiwgIm8xIiwgIm8yIiwgIm8zIiwgImdldFRlbXBsYXRlQ29kZUFuZFBhcmFtcyIsICJjb2RlIiwgInBhcmFtZXRlcnMiLCAibm9ybWFsaXplZHMiLCAidXRwYXJhbXMiLCAiX2l0ZXJhdG9yMTEiLCAiX3N0ZXAxMSIsICJub3JtIiwgInRvVXBwZXJDYXNlIiwgInRlbXBsYXRlUGFyYW1zIiwgImlfIiwgImdldFVzZXJUYWxrUGFyYW1ldGVycyIsICJwYXJzZVdpa2l0ZXh0IiwgInBzdCIsICJjb250ZW50bW9kZWwiLCAic3RhdHVzSW5kaWNhdG9yIiwgImFwaU9iaiIsICJjaGlsZE5vZGVzIiwgInN5c29wIiwgInByb21wdCIsICJkZWxldGVQYWdlIiwgImRlbGV0ZVJlYXNvbiIsICJwcm9tcHRGb3JTdW1tYXJ5IiwgInRoaXNwYWdlIiwgImRlbGV0ZU1haW4iLCAid2F0Y2giLCAiZGVsZXRlVGFsayIsICJvcGVuVXNlclRhbGsiLCAibG9va3VwQ3JlYXRpb24iLCAib3BlblVzZXJUYWxrUGFnZSIsICJkZWxldGVUYWxrUGFnZSIsICJub3JtYWxpemVkIiwgImNsYXNzTGlzdCIsICJjb250YWlucyIsICJzZXRUaW1lb3V0IiwgImRlbGV0ZVJlZGlyZWN0cyIsICJyZGxpbWl0IiwgImRlbGV0ZVJlZGlyZWN0c01haW4iLCAiJGJpZ3RleHQiLCAic2V0IiwgInVubGluayIsICJnZXRDcmVhdG9yIiwgInZhbmFydGljbGUiLCAib3BlbiIsICJ4bWxEb2MiLCAiJHNuYXBzaG90IiwgInRvdGFsIiwgIm9uc3VjY2VzcyIsICJhcGlvYmpJbm5lciIsICJ1cGRhdGUiLCAicmVtb3ZlQ2hlY2twb2ludCIsICJhZGRDaGVja3BvaW50IiwgIl9rZXkiLCAidGV4dE5vU2QiLCAiY29weXZpbyIsICJ4ZmQiLCAiYnVpbGREYXRhIiwgInBhdHJvbCIsICJyZXF1ZXN0c2FsdCIsICJlZGl0c3VtbWFyeSIsICJfaXRlcmF0b3IxMiIsICJfc3RlcDEyIiwgIk1hdGgiLCAiYmxhbmsiLCAiaW5zZXJ0QWZ0ZXJUZW1wbGF0ZXMiLCAiZ2V0VGV4dCIsICJ0YWdDb21wbGV0ZSIsICJ1c2VydGFsayIsICJwYWdlT2JqIiwgImluaXRpYWxDb250cmliIiwgInRhbGtQYWdlTmFtZSIsICJ1c2VydGFsa3BhZ2UiLCAibm90aWZ5dGV4dCIsICJsb2dub21pbmF0aW9uIiwgImFkZFRvTG9nIiwgInVzbCIsICJ1c2Vyc3BhY2VMb2dnZXIiLCAiaW5pdGlhbFRleHQiLCAiYXBwZW5kVGV4dCIsICJmcm9tREkiLCAiX2l0ZXJhdG9yMTMiLCAiX3N0ZXAxMyIsICJsb2ciLCAiZ2V0UGFyYW1ldGVycyIsICJfaXRlcmF0b3IxNCIsICJfc3RlcDE0IiwgImN1cnJlbnRQYXJhbXMiLCAicmVkaW1hZ2UiLCAiZGJyYXRpb25hbGUiLCAib3RoZXJwYWdlIiwgImZpbGVuYW1lIiwgInJlZGlydHlwZSIsICJyZXNvbHZlQ3NkVmFsdWVzIiwgIl9lJHRhcmdldCRmb3JtIiwgIl9lJHRhcmdldCRmb3JtMiIsICJ3YXRjaFBhZ2UiLCAiX2l0ZXJhdG9yMTUiLCAiX3N0ZXAxNSIsICJfZSR0YXJnZXQkZm9ybTMiLCAiX2l0ZXJhdG9yMTYiLCAiX3N0ZXAxNiIsICJfaTciLCAiX25vcm1hbGl6ZWRzIiwgIm5vdGlmeXVzZXIiLCAiX2l0ZXJhdG9yMTciLCAiX3N0ZXAxNyIsICJjc2Rsb2ciLCAiX2l0ZXJhdG9yMTgiLCAiX3N0ZXAxOCIsICJ0d2lua2xlY29weXZpb19leHBvcnRzIiwgImluaXRfdHdpbmtsZWNvcHl2aW8iLCAidHdpbmtsZWNvcHl2aW8iLCAiaXNQYWdlUmVkaXJlY3QiLCAidHJ5VGFnZ2luZyIsICJ0YWdnaW5nQXJ0aWNsZSIsICJsb2dwYWdlIiwgImNvcHl2aW9MaXN0IiwgInJldmlzaW9uSWQiLCAic291cmNlIiwgIm9sZGNzZCIsICJzcGVlZHlUYWciLCAiZzRfcGFnZW5hbWUiLCAib3V0cHV0IiwgImdldFVUQ01vbnRoIiwgImdldFVUQ0RhdGUiLCAidHdpbmtsZXhmZF9leHBvcnRzIiwgImluaXRfdHdpbmtsZXhmZCIsICJ0d2lua2xleGZkIiwgImN1cnJlbnRSYXRpb25hbGUiLCAicHJpbnRSYXRpb25hbGUiLCAib2xkcmVhc29udGV4dGJveCIsICJvbGRyZWFzb24iLCAiYXBwZW5kUmVhc29uQm94IiwgInhmZF9jYXQiLCAiYWZkX2NhdGVnb3J5IiwgImNoYW5nZV9hZmRfY2F0ZWdvcnkiLCAiYWZkX2NhdCIsICJsb2NhbFN0b3JhZ2UiLCAiVHdpbmtsZV9hZmRDYXRlZ29yeSIsICJ4ZmRjYXQiLCAibWVyZ2VpbnRvIiwgInBhcmVudEVsZW1lbnQiLCAicmVtb3ZlQXR0cmlidXRlIiwgImZ3ZGNzZHJlYXNvbiIsICJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwgImlubmVySFRNTCIsICJ4ZmRyZWFzb24iLCAiYWZkIiwgInRhZ2dpbmdfcGFnZSIsICJkaXNjdXNzaW9uX3BhZ2UiLCAidG9kYXlzTGlzdCIsICJjcmVhdG9yIiwgImZvcm1hdFJlYXNvblRleHQiLCAibm9pbmNsdWRlIiwgInRleHROb05vdE1hbmRhcmluIiwgInRleHROb0FmYyIsICJ0byIsICJjb21tZW50VGV4dCIsICJzYWZlc3Vic3QiLCAiZmFtZSIsICJzdWJzdHViIiwgImJhdGNoIiwgInRhcmdldF9wYWdlIiwgImZmZCIsICJ0YWdnaW5nSW1hZ2UiLCAieGZkQ2F0TmFtZSIsICJ3aWtpVXJsZW5jb2RlIiwgImZvcm1hdFJlYXNvbkZvckxvZyIsICJvbkVycm9yIiwgInNldExvb2t1cE5vblJlZGlyZWN0Q3JlYXRvciIsICJ0d2lua2xlaW1hZ2VfZXhwb3J0cyIsICJpbml0X3R3aW5rbGVpbWFnZSIsICJ0d2lua2xlaW1hZ2UiLCAiaW1hZ2UiLCAiZmllbGQiLCAiX2l0ZXJhdG9yMTkiLCAiX3N0ZXAxOSIsICJ0eXBlXyIsICJjc2Rjcml0IiwgIkVycm9yIiwgInRvTG93ZXJDYXNlIiwgImYxX3NvdXJjZSIsICJmNF90eXBlIiwgInVzZXJOb3RpZmljYXRpb24iLCAibm90ZURhdGEiLCAiaW1hZ2VMaXN0IiwgInR3aW5rbGVwcm90ZWN0X2V4cG9ydHMiLCAiaW1wb3J0X2V4dF9nYWRnZXQzIiwgImluaXRfdHdpbmtsZXByb3RlY3QiLCAidHdpbmtsZXByb3RlY3QiLCAiY2hhbmdlQWN0aW9uIiwgImZldGNoUHJvdGVjdGlvbkxldmVsIiwgImlzVGVtcGxhdGUiLCAiY3VycmVudFByb3RlY3Rpb25MZXZlbHMiLCAicHJldmlvdXNQcm90ZWN0aW9uTGV2ZWxzIiwgIl9hc3luY1RvR2VuZXJhdG9yIiwgImluZGV4cGFnZWlkcyIsICJpbnByb3AiLCAicHJvdGVjdERhdGEiLCAicGFnZWlkIiwgInBhZ2VpZHMiLCAicHJldmlvdXMiLCAid2F0Y2hlZCIsICJ3YXRjaGxpc3RleHBpcnkiLCAiX2l0ZXJhdG9yMjAiLCAicHJvdGVjdGlvbiIsICJfc3RlcDIwIiwgImNhc2NhZGUiLCAicHJldmlvdXNQcm90ZWN0aW9uTG9nIiwgIl9pdGVyYXRvcjIxIiwgImRldGFpbHMiLCAiX3N0ZXAyMSIsICJoYXNQcm90ZWN0TG9nIiwgInNob3dMb2dBbmRDdXJyZW50UHJvdGVjdEluZm8iLCAiY3VycmVudGx5UHJvdGVjdGVkIiwgImhhc1N0YWJsZUxvZyIsICIkbGlua01hcmt1cCIsICJmb3JtYXRQcm90ZWN0aW9uRGVzY3JpcHRpb24iLCAicHJvdGVjdGlvbk5vZGUiLCAic3RhdHVzTGV2ZWwiLCAiZmllbGQxIiwgImZpZWxkMiIsICJjaGFuZ2VQcmVzZXQiLCAicHJvdGVjdGlvblR5cGVzQWRtaW4iLCAicHJvdGVjdGlvblR5cGVzQ3JlYXRlIiwgImZvcm1ldmVudHMiLCAiZWRpdG1vZGlmeSIsICJlZGl0bGV2ZWwiLCAicHJvdGVjdGlvbkxldmVscyIsICJkb0N1c3RvbUV4cGlyeSIsICJjbG9zZXN0IiwgInNlbGVjdGVkSW5kZXgiLCAicHJvdGVjdGlvbkxlbmd0aHMiLCAibW92ZW1vZGlmeSIsICJtb3ZlbGV2ZWwiLCAiY3JlYXRlbGV2ZWwiLCAicHJvdGVjdGlvblRhZ3MiLCAidGFndHlwZSIsICJwcm90ZWN0aW9uVHlwZXMiLCAibWFyZ2luUmlnaHQiLCAiZWRpdGV4cGlyeSIsICJjb2xvciIsICJtb3ZlZXhwaXJ5IiwgImNyZWF0ZWV4cGlyeSIsICJzbWFsbCIsICJzaG93ZXhwaXJ5IiwgIm9wdGlvbiIsICJwcm90ZWN0aW9uVHlwZXNDcmVhdGVPbmx5IiwgInByb3RlY3Rpb25QcmVzZXRzSW5mbyIsICJlZGl0IiwgIm1vdmUiLCAidW5wcm90ZWN0IiwgImNyZWF0ZSIsICJhY3Rpb250eXBlcyIsICJfaXRlcmF0b3IyMiIsICJfc3RlcDIyIiwgImFjdGlvbl90eXBlX3ZhbHVlIiwgInJlYXNvbkZpZWxkIiwgInByb3RlY3RSZWFzb24iLCAiX2l0ZW0kdGVtcGxhdGUiLCAidGFncGFyYW1zIiwgImNsb3NlcGFyYW1zIiwgInN0YXR1c0luaXRlZCIsICJhbGxEb25lIiwgInRhZ2dpbmdQYWdlSW5pdGlhbCIsICJycHBQYWdlIiwgInByb3RlY3RJdCIsICJmb2xsb3dSZWRpcmVjdCIsICJ0eXBlbmFtZSIsICJ0eXBlcmVhc29uIiwgInJwcHBhcmFtcyIsICJycHBOYW1lIiwgImZpbGVSZXF1ZXN0IiwgInBhZ2VOYW1lIiwgInByb3RlY3RlZFBhZ2UiLCAidGFnZ2luZ1BhZ2UiLCAiZ2V0VGFnZ2VkUGFnZSIsICJvbGR0YWdfcmUiLCAicmVfcmVzdWx0IiwgIm5ld1ZlcnNpb24iLCAic3VwcHJlc3NQcm90ZWN0V2FybmluZyIsICJycHBSZSIsICJycHBMaW5rIiwgImdldFBhZ2VOYW1lIiwgIm5ld3RhZyIsICJTdHJpbmciLCAicmF3IiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgIndvcmRzIiwgInJlZyIsICJvcmlnaW5hbFRleHRMZW5ndGgiLCAibGlua25vZGUiLCAid2F0Y2hQcmVmIiwgIm9wdGlvbnMiLCAid2F0Y2hfcXVlcnkiLCAibGlua25vZGUyIiwgInNlY3Rpb25UZXh0IiwgIl9pOCIsICJfT2JqZWN0JGVudHJpZXM1IiwgImZyaWVuZGx5dGFnX2V4cG9ydHMiLCAiaW5pdF9mcmllbmRseXRhZyIsICJmcmllbmRseXRhZyIsICJtb2RlRW4iLCAiY2FuUmVtb3ZlIiwgImNoZWNrZWRUYWdzIiwgIiRhbGxDaGVja2JveERpdnMiLCAibGFiZWxfZWxlbWVudCIsICIkYWxsSGVhZGVycyIsICJzZWFyY2hTdHJpbmciLCAic2VhcmNoUmVnZXgiLCAiX2luZGV4IiwgImxhYmVsX3RleHQiLCAic2VhcmNoSGl0IiwgInJhbmdlIiwgImNyZWF0ZVJhbmdlIiwgInRleHRub2RlIiwgInNlbGVjdE5vZGVDb250ZW50cyIsICJzZXRTdGFydCIsICJzZXRFbmQiLCAidW5kZXJsaW5lX3NwYW4iLCAic3Vycm91bmRDb250ZW50cyIsICJmbGF0T2JqZWN0IiwgIl9pdGVyYXRvcjIzIiwgInRhZ0xpc3QiLCAiX3N0ZXAyMyIsICJfaXRlcmF0b3IyNCIsICJfc3RlcDI0IiwgIl9pdGVyYXRvcjI1IiwgIl9zdGVwMjUiLCAiZGVzY3JpcHRpb24iLCAiZXhjbHVkZU1JIiwgInVwZGF0ZVNvcnRPcmRlciIsICJkaXZFbGVtZW50IiwgIl9pdGVyYXRvcjI2IiwgIl9zdGVwMjYiLCAiYnVpbGRGaWxlbmFtZSIsICJfaXRlcmF0b3IyNyIsICJfc3RlcDI3IiwgIl9pdGVyYXRvcjI4IiwgIl9zdGVwMjgiLCAicXVlcnlTZWxlY3RvckFsbCIsICJxdWlja2ZpbHRlciIsICJhdXRvY29tcGxldGUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJhbHJlYWR5UHJlc2VudFRhZ3MiLCAidGFnTmFtZSIsICJib3hUYWciLCAiZm9udFNpemUiLCAibnVtQWRkZWQiLCAibnVtUmVtb3ZlZCIsICJhZnRlciIsICJzb3J0b3JkZXIiLCAiX2l0ZXJhdG9yMjkiLCAiX3N0ZXAyOSIsICJnZW5lcmF0ZUxpbmtzIiwgIm1ha2VDaGVja2JveCIsICJvdGhlclRhZ05hbWUiLCAibWFrZUNoZWNrYm94ZXNGb3JBbHJlYWR5UHJlc2VudFRhZ3MiLCAic3ViZGl2IiwgImNoZWNrYm94ZXMiLCAidW5DaGVja2VkVGFncyIsICJnZXRVbmNoZWNrZWQiLCAiX2l0ZXJhdG9yMzAiLCAiX3N0ZXAzMCIsICJkb0NhdGVnb3J5Q2hlY2tib3hlcyIsICJfaXRlcmF0b3IzMSIsICJfc3RlcDMxIiwgIl9pdGVyYXRvcjMyIiwgIl9zdGVwMzIiLCAiX2l0ZXJhdG9yMzMiLCAiX3N0ZXAzMyIsICJfVHdpbmtsZSR0YWckYXJ0aWNsZSIsICJhbHBoYWJldGljYWxMaXN0IiwgIl9pdGVyYXRvcjM0IiwgIl9zdGVwMzQiLCAiJHdvcmthcmVhIiwgInJlbmRlcmVkIiwgIl9pdGVyYXRvcjM1IiwgIl9zdGVwMzUiLCAiX2l0ZXJhdG9yMzYiLCAiX3N0ZXAzNiIsICJmaXJzdFBhcnQiLCAic2Vjb25kUGFydCIsICJ0YWduYW1lIiwgInBhZ2VUZXh0IiwgInBvc3RSZW1vdmFsIiwgInRhZ3NUb1JlbW92ZSIsICJtYWtlVGVtcGxhdGVMaW5rIiwgInN1bW1hcnlUZXh0IiwgImFkZGVkVGFncyIsICJyZW1vdmVkVGFncyIsICJtZXJnZVJlYXNvbiIsICJkaXNjdXNzQXJ0aWNsZSIsICJub25EaXNjdXNzQXJ0aWNsZSIsICJtZXJnZVRhZ090aGVyIiwgIm1lcmdlVGFnIiwgIm5ld1BhcmFtcyIsICJ0YWdzVG9SZW1haW4iLCAibWVyZ2VUYXJnZXQiLCAidGFsa0Rpc2N1c3Npb25UaXRsZSIsICJ0YWxrRGlzY3Vzc2lvblRpdGxlTGlua2VkIiwgIm1vdmVSZWFzb24iLCAibW92ZVRhbGtwYWdlVGV4dCIsICJtb3ZlVGFyZ2V0IiwgIm1vdmVUYWxrcGFnZSIsICJyZW1vdmVUYWdzIiwgImdldFJlZGlyZWN0c0ZvciIsICJfaXRlcmF0b3IzNyIsICJfc3RlcDM3IiwgInRhZ19yZSIsICJsaG5hbWVzcGFjZSIsICJsaHNob3ciLCAibGhsaW1pdCIsICJyZXNwb25zZVhNTCIsICJfaWR4IiwgInJlbW92ZWQiLCAidGFnUmUiLCAidGFnVGV4dCIsICJncm91cGFibGVUYWdzIiwgImdyb3VwYWJsZUV4aXN0aW5nVGFncyIsICJhZGRUYWciLCAiY3VycmVudFRhZyIsICJleHBlcnQiLCAiZXhwZXJ0MiIsICJleHBlcnQzIiwgIm1pc3NpbmdJbmZvcm1hdGlvbiIsICJub3RhYmlsaXR5IiwgInRhcmdldDEiLCAidGFyZ2V0MiIsICJ0YXJnZXQzIiwgImNsZWFudXBSZWFzb24iLCAiYWRkVW5ncm91cGVkVGFncyIsICJfaTkiLCAiX3RhZ3MiLCAidGVtcGxhdGVzQWZ0ZXIiLCAiX2l0ZXJhdG9yMzgiLCAiX3N0ZXAzOCIsICJub3RhYmlsaXR5TGlzdCIsICJfaXRlcmF0b3IzOSIsICJfc3RlcDM5IiwgIm1pVGVzdCIsICJfaXRlcmF0b3I0MCIsICJfc3RlcDQwIiwgIm1pUmVnZXgiLCAiYWRkTmV3VGFnc1RvTUkiLCAiX2l0ZXJhdG9yNDEiLCAiX3N0ZXA0MSIsICJfaXRlcmF0b3I0MiIsICJfc3RlcDQyIiwgInRhZ0luZGV4IiwgImFsdExhbmdGcm9tIiwgInJlcUFydGljbGVMYW5nIiwgInJlcUFydGljbGVUaXRsZSIsICJfaTEwIiwgIl90YWdzMiIsICJvbGRUYWdzIiwgInBhZ2VUYWdzIiwgIm9sZFBhZ2VUYWdzIiwgIl9pdGVyYXRvcjQzIiwgIl9zdGVwNDMiLCAicGFnZVRhZyIsICJwYWdlUmUiLCAiZmlsZSIsICJfaXRlcmF0b3I0NCIsICJfc3RlcDQ0IiwgIm5vd2NvbW1vbnNOYW1lIiwgImtlZXBsb2NhbE5hbWUiLCAia2VlcGxvY2FsUmVhc29uIiwgInJlbmFtZW1lZGlhTmV3bmFtZSIsICJyZW5hbWVtZWRpYVJlYXNvbiIsICJEb05vdE1vdmVUb0NvbW1vbnNfcmVhc29uIiwgImNoZWNrUGFyYW1ldGVyIiwgInBhcmFtZXRlciIsICJleGlzdGluZ1RhZ3MiLCAidHdpbmtsZXN0dWJfZXhwb3J0cyIsICJpbXBvcnRfZXh0X2dhZGdldDQiLCAiaW5pdF90d2lua2xlc3R1YiIsICJ0d2lua2xlc3R1YiIsICJzdHViIiwgIl9Ud2lua2xlJHN0dWIiLCAiX1R3aW5rbGUkc3R1YiRjaGVja2VkIiwgImN1c3RvbWNoZWNrYm94ZXMiLCAiX2l0ZXJhdG9yNDUiLCAiX3N0ZXA0NSIsICJfaXRlcmF0b3I0NiIsICJfc3RlcDQ2IiwgIl9pMTEiLCAiX09iamVjdCRlbnRyaWVzNiIsICJ0YWdDYXRlZ29yaWVzIiwgInRpdGxlTmFtZSIsICJ0YWdDYXRlZ29yaWVzSGVhZGVyIiwgIl9pMTIiLCAiX09iamVjdCRlbnRyaWVzNyIsICJzdWJ0aXRsZSIsICJzdWJjb250ZW50IiwgIl9pMTMiLCAiX09iamVjdCRlbnRyaWVzOCIsICJfaXRlcmF0b3I0NyIsICJfc3RlcDQ3IiwgImdlbmVyYWwiLCAiZ2VvIiwgIm90aGVycyIsICJiaW8iLCAic2NpZW5jZSIsICJzcG9ydCIsICJ0ZWNoIiwgImFydCIsICJ0b3RhbFRhZ3MiLCAiX2kxNCIsICJfdGFnczMiLCAicGF0cm9sUGFnZSIsICJ0d2lua2xlZGlmZl9leHBvcnRzIiwgImluaXRfdHdpbmtsZWRpZmYiLCAidHdpbmtsZWRpZmYiLCAiZGlmZiIsICJvbGRpZCIsICJtZSIsICJub2RlIiwgInJ2dXNlciIsICJsb2NhdGlvbiIsICJ0d2lua2xldW5saW5rX2V4cG9ydHMiLCAiaW5pdF90d2lua2xldW5saW5rIiwgInR3aW5rbGV1bmxpbmsiLCAicHJlc2V0UmVhc29uIiwgImZpbGVTcGFjZSIsICJsaW5rVGV4dEJlZm9yZSIsICJsaW5rVGV4dEFmdGVyIiwgImxpbmtQbGFpbkJlZm9yZSIsICJsaW5rVGVtcGxhdGVCZWZvcmUiLCAibGlua1BsYWluQWZ0ZXIiLCAiX2kxNSIsICJfYXJyMiIsICJmb250RmFtaWx5IiwgImZvbnRTdHlsZSIsICJibHRpdGxlIiwgImJsbGltaXQiLCAiYmxuYW1lc3BhY2UiLCAicmF3Y29udGludWUiLCAiaXV0aXRsZSIsICJpdWxpbWl0IiwgIml1bmFtZXNwYWNlIiwgImJsZmlsdGVycmVkaXIiLCAiYmFja2xpbmtzIiwgInBhZGRpbmciLCAiaW1hZ2V1c2FnZSIsICJ1bmxpbmtlciIsICJiYXRjaE9wZXJhdGlvbiIsICJzZXRPcHRpb24iLCAic2V0UGFnZUxpc3QiLCAicnVuIiwgInNldEJvdEVkaXQiLCAiZG9CYWNrbGlua3MiLCAiZG9JbWFnZXVzYWdlIiwgInVubGlua0JhY2tsaW5rcyIsICJoYXZlY29udGVudCIsICJfaXRlcmF0b3I0OCIsICJfc3RlcDQ4IiwgImNvbnZlcnROdW1iZXIiLCAic2hpZnRDbGlja1N1cHBvcnQiLCAiX2l0ZXJhdG9yNDkiLCAiX3N0ZXA0OSIsICJfaXRlcmF0b3I1MCIsICJfc3RlcDUwIiwgIl9pdGVyYXRvcjUxIiwgIl9zdGVwNTEiLCAib2xkdGV4dCIsICJ3YXJuaW5nU3RyaW5nIiwgImNvbW1lbnRPdXRJbWFnZSIsICJyZW1vdmVMaW5rIiwgInJlbW92ZVRlbXBsYXRlIiwgIndvcmtlckZhaWx1cmUiLCAid29ya2VyU3VjY2VzcyIsICJ0d2lua2xlZmx1ZmZfZXhwb3J0cyIsICJpbml0X3R3aW5rbGVmbHVmZiIsICJ0d2lua2xlZmx1ZmYiLCAiZmx1ZmYiLCAiaG9vayIsICJhZGRMaW5rcyIsICJza2lwVGFsayIsICJjb250cmlidXRpb25zIiwgInJlY2VudGNoYW5nZXMiLCAidHJ1c3RlZEJvdHMiLCAiaGlkZGVuTmFtZSIsICJsaW5rQnVpbGRlciIsICJzcGFuVGFnIiwgImJ1aWxkTGluayIsICJyb2xsYmFja0xpbmtzIiwgInZhbmRhbCIsICJpbmxpbmUiLCAicmV2IiwgInJldk5vZGUiLCAibm9ybU5vZGUiLCAidmFuZE5vZGUiLCAibm9ybUxpbmsiLCAidmFuZExpbmsiLCAicmV2ZXJ0IiwgImRpc2FibGVMaW5rcyIsICJzZXBhcmF0b3IiLCAicmVzdG9yZVRoaXNSZXZpc2lvbkxpbmsiLCAicmV2aXNpb25SZWYiLCAicmV2ZXJ0VG9SZXZpc2lvbk5vZGUiLCAiZm9udFdlaWdodCIsICJyZXZlcnRUb1JldmlzaW9uTGluayIsICJyZXZlcnRUb1JldmlzaW9uIiwgIiRsaXN0IiwgImRhdGFzZXQiLCAibXdSZXZpZCIsICJub3QiLCAidGFyZ2V0UGFnZSIsICJoaXN0TGlzdCIsICJ0b0FycmF5IiwgInNoaWZ0IiwgIl9pdGVyYXRvcjUyIiwgIl9zdGVwNTIiLCAiX2l0ZXJhdG9yNTMiLCAiX3N0ZXA1MyIsICJ3YXJuRnJvbVRhbGsiLCAieHRpdGxlIiwgInRhbGtMaW5rIiwgImV4dHJhUGFyYW1zIiwgIm9sZFRpdGxlIiwgInJldmVydHN1bW1hcnkiLCAiXyIsICJuZXdUaXRsZSIsICJudGl0bGUiLCAiaXNJUHY2QWRkcmVzcyIsICJzYW5pdGl6ZUlQdjYiLCAiZ2V0RWxlbWVudHNCeU5hbWUiLCAibm90aWZ5U3RhdHVzIiwgImF1dG9IaWRlIiwgInVzZXJIaWRkZW4iLCAiaW50ZXN0YWN0aW9ucyIsICJjdXJ0aW1lc3RhbXAiLCAib2xkcmV2IiwgInRvUmV2aXNpb24iLCAibGFzdHJldmlkIiwgInRvdWNoZWQiLCAibG9hZHRpbWVzdGFtcCIsICJjc3JmdG9rZW4iLCAicmV2ZXJ0VG9SZXZJRCIsICJyZXZlcnRUb1VzZXIiLCAicmV2ZXJ0VG9Vc2VySGlkZGVuIiwgIm9wdGlvbmFsX3N1bW1hcnkiLCAiZm9ybWF0U3VtbWFyeSIsICJ1bmRvIiwgInVuZG9hZnRlciIsICJiYXNldGltZXN0YW1wIiwgInN0YXJ0dGltZXN0YW1wIiwgIm1pbm9yIiwgImJvdCIsICJ3YXRjaE9yRXhwaXJ5IiwgIndhdGNobGlzdCIsICJjb21wbGV0ZSIsICJyZXZzIiwgImxhc3R1c2VyIiwgInVzZXJOb3JtIiwgImNvbnQiLCAiZ29vZF9yZXZpc2lvbiIsICJ1c2VySGFzQWxyZWFkeUNvbmZpcm1lZEFjdGlvbiIsICJnb29kdXNlciIsICJnb29kdXNlckhpZGRlbiIsICJleHRyYV9zdW1tYXJ5IiwgIm5vdGlmeVVzZXIiLCAieG1sIiwgIiRlZGl0IiwgIndpbmRvd1F1ZXJ5IiwgInZhbmFydGljbGVyZXZpZCIsICJ2YW5hcnRpY2xlZ29vZHJldmlkIiwgImJ1aWx0SW5TdHJpbmciLCAiY3VzdG9tU3RyaW5nIiwgInJlc3VsdExlbiIsICJ1bmVzY2FwZSIsICJlbmNvZGVVUklDb21wb25lbnQiLCAiY29udHJpYnNMaW5rIiwgImNvbnRyaWJzTGVuIiwgInR3aW5rbGViYXRjaGRlbGV0ZV9leHBvcnRzIiwgImluaXRfdHdpbmtsZWJhdGNoZGVsZXRlIiwgInR3aW5rbGViYXRjaGRlbGV0ZSIsICJiYXRjaGRlbGV0ZSIsICJ1bmxpbmtDYWNoZSIsICJzdWJwYWdlc0xvYWRlZCIsICJ0b2dnbGVTdWJwYWdlcyIsICJkZWxldGVyZWFzb25saXN0IiwgImNoYW5nZV9jb21tb25fcmVhc29uIiwgImdlbmVyYXRvciIsICJnY210aXRsZSIsICJnY21saW1pdCIsICJnYXBsaW1pdCIsICJnYXBuYW1lc3BhY2UiLCAiZ2FwcHJlZml4IiwgInBhdGhTcGxpdCIsICJwYXRobmFtZSIsICJ0aXRsZVNwbGl0IiwgImdxcHBhZ2UiLCAiZ3FwbGltaXQiLCAiZ3BsbGltaXQiLCAic3RhdHVzZGl2IiwgIiRwYWdlcyIsICIkcGFnZSIsICJpc1JlZGlyIiwgIiRlZGl0cHJvdCIsICJpc1Byb3RlY3RlZCIsICJtZXRhZGF0YSIsICJmb3JtXyIsICJfaXRlcmF0b3I1NCIsICJfc3RlcDU0IiwgImdlbmVyYXRlQXJyb3dMaW5rcyIsICJuZXh0RWxlbWVudFNpYmxpbmciLCAiZ2VuZXJhdGVOZXdQYWdlTGlzdCIsICJlbGVtZW50cyIsICJOb2RlTGlzdCIsICJfaXRlcmF0b3I1NSIsICJfc3RlcDU1IiwgIkhUTUxJbnB1dEVsZW1lbnQiLCAibmV3UGFnZUxpc3QiLCAiZGVsZXRlX3N1YnBhZ2VfcmVkaXJlY3RzIiwgImRlbGV0ZV9yZWRpcmVjdHMiLCAiZGVsZXRlX3N1YnBhZ2VfdGFsa3MiLCAiZGVsZXRlX3RhbGsiLCAidW5saW5rX3N1YnBhZ2VzIiwgInVubGlua19wYWdlIiwgIl9pdGVyYXRvcjU2IiwgIl9zdGVwNTYiLCAic3ViZ3JvdXBfIiwgInJlcGxhY2VXaXRoIiwgIl9pdGVyYXRvcjU3IiwgIl9zdGVwNTciLCAiX2l0ZXJhdG9yNTgiLCAiX3N0ZXA1OCIsICJsb2FkaW5nVGV4dCIsICJzdWJwYWdlTGlzdGVyIiwgInBhZ2VUaXRsZSIsICJwYWdlTmFtZUZ1bGwiLCAic3VicGFnZUxpc3QiLCAicGFnZU5hbWVfIiwgIl9pdGVyYXRvcjU5IiwgIl9zdGVwNTkiLCAiX2l0ZXJhdG9yNjAiLCAiX3N0ZXA2MCIsICJfaXRlcmF0b3I2MSIsICJfc3RlcDYxIiwgIl9pdGVyYXRvcjYyIiwgIl9zdGVwNjIiLCAibnVtUHJvdGVjdGVkIiwgInN1YnBhZ2VzIiwgImRlbGV0ZV9wYWdlIiwgImRlbGV0ZV9zdWJwYWdlcyIsICJ1bmxpbmtfZmlsZSIsICJwYWdlRGVsZXRlciIsICJkb0V4dHJhcyIsICJzdWJwYWdlRGVsZXRlciIsICJ0aGluZ1dpdGhQYXJhbWV0ZXJzIiwgInVubGlua0JhY2tsaW5rc01haW4iLCAidW5saW5rSW1hZ2VJbnN0YW5jZXNNYWluIiwgInRhbGtQYWdlIiwgInJlZGlyZWN0RGVsZXRlciIsICJvbGRfdGV4dCIsICJzZXRNYXhDb25mbGljdFJldHJpZXMiLCAidW5saW5rSW1hZ2VJbnN0YW5jZXMiLCAidHdpbmtsZWJhdGNodW5kZWxldGVfZXhwb3J0cyIsICJpbml0X3R3aW5rbGViYXRjaHVuZGVsZXRlIiwgInR3aW5rbGViYXRjaHVuZGVsZXRlIiwgImJhdGNodW5kZWxldGUiLCAicHJvamVjdCIsICJ1bmRlbF90YWxrIiwgInBhZ2VVbmRlbGV0ZXIiLCAic2V0TWF4UmV0cmllcyIsICJ1bmRlbGV0ZVBhZ2UiLCAidGFsa3BhZ2VuYW1lIiwgImdldFRhbGtQYWdlIiwgImRydnByb3AiLCAiZHJ2bGltaXQiLCAidW5kZWxldGVUYWxrIiwgImRlbHJldnMiLCAidHdpbmtsZWJhdGNocHJvdGVjdF9leHBvcnRzIiwgImluaXRfdHdpbmtsZWJhdGNocHJvdGVjdCIsICJ0d2lua2xlYmF0Y2hwcm90ZWN0IiwgImJhdGNocHJvdGVjdCIsICJwcm90TGV2ZWwiLCAiX2l0ZXJhdG9yNjMiLCAiX3N0ZXA2MyIsICJtaXNzaW5nIiwgImVkaXRQcm90IiwgImltYWdlaW5mbyIsICJyZXZpc2lvbnMiLCAiX2l0ZXJhdG9yNjQiLCAiX3N0ZXA2NCIsICJsaW5rcyIsICJjdXJyZW50UHJvdGVjdENvdW50ZXIiLCAiY3VycmVudHByb3RlY3RvciIsICJ0YWtlbkFjdGlvbiIsICJjcmVhdGVtb2RpZnkiLCAidHdpbmtsZWNsb3NlX2V4cG9ydHMiLCAiaW5pdF90d2lua2xlY2xvc2UiLCAidHdpbmtsZWNsb3NlIiwgInNlbGVjdG9yIiwgImRlbE5vZGUiLCAiZGVsTGluayIsICJfaXRlcmF0b3I2NSIsICJfc3RlcDY1IiwgImhlYWRsaW5laHJlZiIsICJtIiwgInBhZ2Vub3RleGlzdCIsICJoYXNDbGFzcyIsICJ0bXBOb2RlIiwgImNsb25lTm9kZSIsICJjb2RlcyIsICJpciIsICJyZXAiLCAibmUiLCAibnEiLCAiayIsICJhZG1pbm9ubHkiLCAic2siLCAidGsiLCAicnIiLCAiZGFuIiwgImQiLCAiaWMiLCAic2QiLCAibHNzZCIsICJzdmciLCAiZHJlcCIsICJjIiwgInIiLCAiY3IiLCAibWVyZ2UiLCAibWVyZ2VhcHByb3ZlZCIsICJuYyIsICJub29wIiwgImNoYW5nZV9jb2RlIiwgImNoYW5nZV9vcGVyYXRpb24iLCAicmVzdWx0RGF0YSIsICJfaTE2IiwgIl9PYmplY3QkZW50cmllczkiLCAiX2l0ZXJhdG9yNjYiLCAiX3N0ZXA2NiIsICJzZHJlYXNvbiIsICJyZW1hcmsiLCAicGFyZW50U2VjdGlvbiIsICJ0YWxrZW5kIiwgImRlbCIsICJrZWVwIiwgInBhZ2V0aXRsZSIsICJnZXROYW1lc3BhY2VJZCIsICJ0YWxrcGFnZXRpdGxlIiwgImdldE1haW5UZXh0IiwgInRvU3RyaW5nIiwgInZmZGtlcHQiLCAic2V0UHJlcGVuZFRleHQiLCAibmV3dGV4dCIsICJrZWVwQ29tcGxldGUiLCAic2F2ZVRhbGsiLCAic2JlZ2luIiwgInNlbmQiLCAiYmFyIiwgImRpc2FibGVMaW5rIiwgInR3aW5rbGVjb25maWdfZXhwb3J0cyIsICJpbml0X3R3aW5rbGVjb25maWciLCAidHdpbmtsZWNvbmZpZyIsICJ3YXRjaGxpc3RFbnVtcyIsICJ5ZXMiLCAibm8iLCAiZGVmYXVsdCIsICJjb21tb25TZXRzIiwgImNzZENyaXRlcmlhIiwgImRiIiwgImNzZENyaXRlcmlhRGlzcGxheU9yZGVyIiwgImNzZENyaXRlcmlhTm90aWZpY2F0aW9uIiwgImNzZENyaXRlcmlhTm90aWZpY2F0aW9uRGlzcGxheU9yZGVyIiwgImNzZEFuZERJQ3JpdGVyaWEiLCAiY3NkQW5kRElDcml0ZXJpYURpc3BsYXlPcmRlciIsICJ4ZmRDcml0ZXJpYSIsICJkZWxldGUiLCAiZndkY3NkIiwgInhmZENyaXRlcmlhRGlzcGxheU9yZGVyIiwgIm5hbWVzcGFjZXNOb1NwZWNpYWwiLCAibW9kdWxlIiwgInByZWZlcmVuY2VzIiwgImVudW1WYWx1ZXMiLCAidGFiIiwgImhlbHB0aXAiLCAic2V0VmFsdWVzIiwgImFkbWluT25seSIsICJjdXN0b21MaXN0VmFsdWVUaXRsZSIsICJjdXN0b21MaXN0TGFiZWxUaXRsZSIsICJ2YW5kIiwgInRvcmV2IiwgIm1pbmUiLCAicmVjZW50Y2hhbmdlc2xpbmtlZCIsICJidXR0b25DbGljayIsICJyYWRpb0NsaWNrIiwgInNldERpc3BsYXlPcmRlciIsICJjYXQiLCAiYWxwaGEiLCAic2FtZSIsICJub25hZG1pbm9ubHkiLCAiYWxsIiwgImNvbnRlbnRkaXYiLCAidG9jdGFibGUiLCAibWFyZ2luTGVmdCIsICJ0b2N0aXRsZSIsICJ0b2NoMiIsICJ0b2N0b2dnbGUiLCAidG9jdG9nZ2xlbGluayIsICJ0b2N1bCIsICIkdG9jdWwiLCAidG9nZ2xlIiwgImNvbnRlbnRmb3JtIiwgInNlY3Rpb25rZXkiLCAidG9jbGkiLCAidG9jYSIsICJyb3ciLCAiY2VsbCIsICJib3JkZXJCb3R0b20iLCAibWFyZ2luVG9wIiwgInJvd2NvdW50IiwgInByZWZrZXkiLCAicHJlZiIsICJtYXJnaW5Cb3R0b20iLCAiYmFja2dyb3VuZENvbG9yIiwgImdvdFByZWYiLCAidGV4dEFsaWduIiwgInBhZGRpbmdSaWdodCIsICJvcHRpb25FeGlzdHMiLCAiX2kxNyIsICJfT2JqZWN0JGVudHJpZXMxMCIsICJlbnVtdmFsdWUiLCAiZW51bWRpc3BsYXkiLCAiY2hlY2tkaXYiLCAicGFkZGluZ0xlZnQiLCAid29ya2VyIiwgIml0ZW1rZXkiLCAiaXRlbXZhbHVlIiwgImNoZWNrbGFiZWwiLCAiX2l0ZXJhdG9yNjciLCAiX3N0ZXA2NyIsICJfaTE4IiwgIl9PYmplY3QkZW50cmllczExIiwgImN1c3RvbUxpc3RCdXR0b24iLCAibGlzdERpYWxvZyIsICJyZXNldGxpbmsiLCAicmVzZXRQcmVmTGluayIsICJjc3NGbG9hdCIsICJtYXJnaW4iLCAiZm9vdGVyYm94IiwgInN1Ym1pdEJ1dHRvbiIsICJmb290ZXJzcGFuIiwgImZvb3RlcmEiLCAicmVzZXRBbGxQcmVmcyIsICJoYXNoIiwgImxvYyIsICJib3giLCAic2NyaXB0UGFnZU5hbWUiLCAiYWRkUm93IiwgImRsZ3RhYmxlIiwgImNvbnRlbnR0ciIsICJjb250ZW50dGQiLCAicmVtb3ZlQnV0dG9uIiwgIl9jdXJwcmVmJGN1c3RvbUxpc3RWYSIsICJfY3VycHJlZiRjdXN0b21MaXN0TGEiLCAiJHByZWZidXR0b24iLCAiY3VydmFsdWUiLCAiY3VycHJlZiIsICJkaWFsb2djb250ZW50IiwgImRsZ3Rib2R5IiwgImRsZ3RyIiwgImRsZ3RoIiwgImdvdFJvdyIsICJfaXRlcmF0b3I2OCIsICJfc3RlcDY4IiwgImRsZ3Rmb290IiwgImRsZ3RkIiwgImFkZEJ1dHRvbiIsICJtaW5XaWR0aCIsICJidXR0b24iLCAicmVzZXQiLCAidGJvZHkiLCAiJGJ1dHRvbiIsICJvbGR2YWx1ZSIsICJyZXNldFByZWYiLCAiJHRib2R5IiwgIl9pdGVyYXRvcjY5IiwgIl9zdGVwNjkiLCAiaW5wdXRrZXkiLCAid2FudGVkcHJlZiIsICJmb3VuZGl0IiwgIl9pMTkiLCAiX09iamVjdCRlbnRyaWVzMTIiLCAidXNlcmpzIiwgIndyaXRlUHJlZnMiLCAibmV3Q29uZmlnIiwgIm9wdGlvbnNWZXJzaW9uIiwgImNvbXBhcmUiLCAiYiIsICJ1c2VyVmFsdWUiLCAiX2l0ZXJhdG9yNzAiLCAiX3N0ZXA3MCIsICJfaTIwIiwgIl9PYmplY3QkZW50cmllczEzIiwgIm5vd2lraSIsICJKU09OIiwgInN0cmluZ2lmeSIsICJzYXZlU3VjY2VzcyIsICJub3RpY2Vib3giLCAibm90aWNlY2xlYXIiLCAiY2xlYXIiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgInR3aW5rbGVMb2FkIiwgIl90d2lua2xlTG9hZCIsICJhcHBseSIsICJhcmd1bWVudHMiXQp9Cg== diff --git a/dist/VariantAlly/VariantAlly.js b/dist/VariantAlly/VariantAlly.js index 00b96947..b5f10c6c 100644 --- a/dist/VariantAlly/VariantAlly.js +++ b/dist/VariantAlly/VariantAlly.js @@ -27,9 +27,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports2, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -40,9 +40,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports2, module2) { "use strict"; module2.exports = function(exec) { try { @@ -54,9 +54,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -67,9 +67,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports2, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -83,9 +83,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -94,9 +94,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -108,9 +108,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -125,9 +125,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -141,9 +141,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports2, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -155,9 +155,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -168,9 +168,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -180,9 +180,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -195,9 +195,9 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -211,18 +211,18 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator2 = globalThis2.navigator; @@ -231,9 +231,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -258,9 +258,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -274,18 +274,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -301,9 +301,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -316,9 +316,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -330,9 +330,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -340,9 +340,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports2, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -353,9 +353,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -371,17 +371,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports2, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -396,9 +396,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports2, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -406,18 +406,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports2, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -426,9 +426,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -439,9 +439,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports2, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -451,9 +451,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -464,9 +464,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -478,9 +478,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -500,9 +500,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -528,9 +528,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -541,9 +541,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -587,9 +587,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -607,9 +607,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -624,9 +624,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -635,9 +635,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -650,9 +650,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -666,9 +666,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports2, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -679,17 +679,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports2, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -762,9 +762,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -817,9 +817,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -852,9 +852,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-string-tag-support.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-string-tag-support.js var require_to_string_tag_support = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-string-tag-support.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-string-tag-support.js"(exports2, module2) { "use strict"; var wellKnownSymbol = require_well_known_symbol(); var TO_STRING_TAG = wellKnownSymbol("toStringTag"); @@ -864,9 +864,9 @@ var require_to_string_tag_support = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -877,9 +877,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof.js var require_classof = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof.js"(exports2, module2) { "use strict"; var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); var isCallable = require_is_callable(); @@ -903,9 +903,9 @@ var require_classof = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-string.js var require_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-string.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-string.js"(exports2, module2) { "use strict"; var classof = require_classof(); var $String = String; @@ -916,9 +916,9 @@ var require_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/validate-arguments-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/validate-arguments-length.js var require_validate_arguments_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/validate-arguments-length.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/validate-arguments-length.js"(exports2, module2) { "use strict"; var $TypeError = TypeError; module2.exports = function(passed, required) { @@ -928,9 +928,9 @@ var require_validate_arguments_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.delete.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.delete.js var require_web_url_search_params_delete = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.delete.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.delete.js"() { "use strict"; var defineBuiltIn = require_define_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -978,9 +978,9 @@ var require_web_url_search_params_delete = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.has.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.has.js var require_web_url_search_params_has = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.has.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.has.js"() { "use strict"; var defineBuiltIn = require_define_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1009,9 +1009,9 @@ var require_web_url_search_params_has = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in-accessor.js var require_define_built_in_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in-accessor.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in-accessor.js"(exports2, module2) { "use strict"; var makeBuiltIn = require_make_built_in(); var defineProperty = require_object_define_property(); @@ -1023,9 +1023,9 @@ var require_define_built_in_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.size.js var require_web_url_search_params_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.size.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.size.js"() { "use strict"; var DESCRIPTORS = require_descriptors(); var uncurryThis = require_function_uncurry_this(); @@ -1404,4 +1404,4 @@ main(); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5kZWxldGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmhhcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qcyIsICJzcmMvVmFyaWFudEFsbHkvVmFyaWFudEFsbHkudHMiLCAic3JjL1ZhcmlhbnRBbGx5L21vZHVsZXMvdXRpbHMudHMiLCAic3JjL1ZhcmlhbnRBbGx5L21vZHVsZXMvbW9kZWwudHMiLCAic3JjL1ZhcmlhbnRBbGx5L21vZHVsZXMvY29udHJvbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciAkVVJMU2VhcmNoUGFyYW1zID0gVVJMU2VhcmNoUGFyYW1zO1xudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9ICRVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xudmFyIGFwcGVuZCA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5hcHBlbmQpO1xudmFyICRkZWxldGUgPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGVbJ2RlbGV0ZSddKTtcbnZhciBmb3JFYWNoID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmZvckVhY2gpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBwYXJhbXMgPSBuZXcgJFVSTFNlYXJjaFBhcmFtcygnYT0xJmE9MiZiPTMnKTtcblxucGFyYW1zWydkZWxldGUnXSgnYScsIDEpO1xuLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG5wYXJhbXNbJ2RlbGV0ZSddKCdiJywgdW5kZWZpbmVkKTtcblxuaWYgKHBhcmFtcyArICcnICE9PSAnYT0yJykge1xuICBkZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ2RlbGV0ZScsIGZ1bmN0aW9uIChuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBpZiAobGVuZ3RoICYmICR2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJGRlbGV0ZSh0aGlzLCBuYW1lKTtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIGZvckVhY2godGhpcywgZnVuY3Rpb24gKHYsIGspIHsgLy8gYWxzbyB2YWxpZGF0ZXMgYHRoaXNgXG4gICAgICBwdXNoKGVudHJpZXMsIHsga2V5OiBrLCB2YWx1ZTogdiB9KTtcbiAgICB9KTtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChsZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSB0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgdmFsdWUgPSB0b1N0cmluZygkdmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGRpbmRleCA9IDA7XG4gICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgdmFyIGVudHJpZXNMZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllc0xlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgaWYgKGZvdW5kIHx8IGVudHJ5LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgJGRlbGV0ZSh0aGlzLCBlbnRyeS5rZXkpO1xuICAgICAgfSBlbHNlIGRpbmRleCsrO1xuICAgIH1cbiAgICB3aGlsZSAoZGluZGV4IDwgZW50cmllc0xlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2RpbmRleCsrXTtcbiAgICAgIGlmICghKGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlID09PSB2YWx1ZSkpIGFwcGVuZCh0aGlzLCBlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTtcbiAgICB9XG4gIH0sIHsgZW51bWVyYWJsZTogdHJ1ZSwgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyICRVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXM7XG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gJFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgZ2V0QWxsID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmdldEFsbCk7XG52YXIgJGhhcyA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5oYXMpO1xudmFyIHBhcmFtcyA9IG5ldyAkVVJMU2VhcmNoUGFyYW1zKCdhPTEnKTtcblxuLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG5pZiAocGFyYW1zLmhhcygnYScsIDIpIHx8ICFwYXJhbXMuaGFzKCdhJywgdW5kZWZpbmVkKSkge1xuICBkZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ2hhcycsIGZ1bmN0aW9uIGhhcyhuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBpZiAobGVuZ3RoICYmICR2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJGhhcyh0aGlzLCBuYW1lKTtcbiAgICB2YXIgdmFsdWVzID0gZ2V0QWxsKHRoaXMsIG5hbWUpOyAvLyBhbHNvIHZhbGlkYXRlcyBgdGhpc2BcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChsZW5ndGgsIDEpO1xuICAgIHZhciB2YWx1ZSA9IHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBpZiAodmFsdWVzW2luZGV4KytdID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgfSByZXR1cm4gZmFsc2U7XG4gIH0sIHsgZW51bWVyYWJsZTogdHJ1ZSwgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZm9yRWFjaCk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNpemVgIGdldHRlclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy91cmwvcHVsbC83MzRcbmlmIChERVNDUklQVE9SUyAmJiAhKCdzaXplJyBpbiBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUpKSB7XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsICdzaXplJywge1xuICAgIGdldDogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICBmb3JFYWNoKHRoaXMsIGZ1bmN0aW9uICgpIHsgY291bnQrKzsgfSk7XG4gICAgICByZXR1cm4gY291bnQ7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9KTtcbn1cbiIsICJpbXBvcnQge1xuXHRjaGVja1RoaXNQYWdlLFxuXHRyZXdyaXRlQW5jaG9ycyxcblx0YXBwbHlVUkxWYXJpYW50LFxuXHRzaG93VmFyaWFudFByb21wdCxcblx0aXNFbGlnaWJsZUZvclJld3JpdGluZyxcbn0gZnJvbSAnLi9tb2R1bGVzL2NvbnRyb2xsZXInO1xuaW1wb3J0IHtjYWxjdWxhdGVQcmVmZXJyZWRWYXJpYW50LCBnZXRQYWdlVmFyaWFudCwgaXNPcHRPdXRlZCwgc2V0TG9jYWxWYXJpYW50fSBmcm9tICcuL21vZHVsZXMvbW9kZWwnO1xuaW1wb3J0IHtpc0xvZ2dlZEluLCBpc0xhbmdDaGluZXNlLCBpc1dpa2l0ZXh0UGFnZSwgaXNWaWV3aW5nUGFnZSwgaXNSZWZlcnJlclNlbGZ9IGZyb20gJy4vbW9kdWxlcy91dGlscyc7XG5cbmZ1bmN0aW9uIG1haW4oKSB7XG5cdC8vIE1hbnVhbGx5IG9wdCBvdXRlZCB1c2Vyc1xuXHRpZiAoaXNPcHRPdXRlZCgpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGlzTG9nZ2VkSW4oKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIE5vbi1DaGluZXNlIHBhZ2VzL3VzZXJzXG5cdGlmICghaXNMYW5nQ2hpbmVzZSgpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0YXBwbHlVUkxWYXJpYW50KCk7XG5cblx0Y29uc3QgcHJlZmVycmVkVmFyaWFudCA9IGNhbGN1bGF0ZVByZWZlcnJlZFZhcmlhbnQoKTtcblx0aWYgKHByZWZlcnJlZFZhcmlhbnQgIT09IG51bGwpIHtcblx0XHQvLyBPcHRpbWlzdGljYWxseSBzZXQgbG9jYWwgdmFyaWFudCB0byBiZSBlcXVhbCB0byBicm93c2VyIHZhcmlhbnRcblx0XHQvLyBJbiBjYXNlIHRoZSB1c2VyJ3MgYnJvd3NlciBsYW5ndWFnZSBiZWNvbWVzIGludmFsaWQgaW4gdGhlIGZ1dHVyZSxcblx0XHQvLyB0aGlzIHJlZHVjZXMgdGhlIHBvc3NpYmlsaXR5IHRvIHNob3cgcHJvbXB0IHRvIGRpc3J1cHQgdXNlcnMuXG5cdFx0c2V0TG9jYWxWYXJpYW50KHByZWZlcnJlZFZhcmlhbnQpO1xuXHR9XG5cblx0Y29uc3QgcGFnZVZhcmlhbnQgPSBnZXRQYWdlVmFyaWFudCgpO1xuXG5cdC8vIE5vbi1hcnRpY2xlIHBhZ2UgKEpTL0NTUyBwYWdlcywgU3BlY2lhbCBwYWdlcyBldGMuKVxuXHRpZiAocGFnZVZhcmlhbnQgPT09IG51bGwgfHwgIWlzV2lraXRleHRQYWdlKCkpIHtcblx0XHQvLyBTdWNoIHBhZ2UgY2FuJ3QgaGF2ZSB2YXJpYW50LCBidXQgcHJlZmVycmVkIHZhcmlhbnQgbWF5IGJlIGF2YWlsYWJsZVxuXHRcdC8vIFNvIHN0aWxsIHJld3JpdGUgbGlua3Ncblx0XHRpZiAocHJlZmVycmVkVmFyaWFudCAhPT0gbnVsbCkge1xuXHRcdFx0cmV3cml0ZUFuY2hvcnMocHJlZmVycmVkVmFyaWFudCk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFByZWZlcnJlZCB2YXJpYW50IHVuYXZhaWxhYmxlXG5cdGlmIChwcmVmZXJyZWRWYXJpYW50ID09PSBudWxsKSB7XG5cdFx0aWYgKGlzVmlld2luZ1BhZ2UoKSkge1xuXHRcdFx0c2hvd1ZhcmlhbnRQcm9tcHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBPbi1zaXRlIG5hdmlnYXRpb24gdG8gbGlua3MgaW5lbGlnaWJsZSBmb3Igd3JpdGluZ1xuXHQvLyBUaGUgZWxpZ2liaWxpdHkgY2hlY2sgaXMgcmVxdWlyZSBiZWNhdXNlIHVzZXIgbWF5IGNsaWNrIG9uIGEgbGluayB3aXRoIHZhcmlhbnQgaW50ZW50aW9uYWxseVxuXHQvLyBlLmcuIHZhcmlhbnQgZHJvcGRvd24gYW5kIHt7VmFyaWFudC1jbmhrdHdzZ319XG5cdGlmIChpc1JlZmVycmVyU2VsZigpICYmICFpc0VsaWdpYmxlRm9yUmV3cml0aW5nKGxvY2F0aW9uLmhyZWYpKSB7XG5cdFx0cmV3cml0ZUFuY2hvcnMocHJlZmVycmVkVmFyaWFudCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y2hlY2tUaGlzUGFnZShwcmVmZXJyZWRWYXJpYW50LCBwYWdlVmFyaWFudCk7XG5cdHJld3JpdGVBbmNob3JzKHByZWZlcnJlZFZhcmlhbnQpO1xufVxuXG5tYWluKCk7XG5cbi8vIEV4cG9zZSBmb3IgVmFyaWFudEFsbHlEaWFsb2cncyB1c2VcbmV4cG9ydCB7c2V0TG9jYWxWYXJpYW50LCBzZXRPcHRPdXR9IGZyb20gJy4vbW9kdWxlcy9tb2RlbCc7XG5leHBvcnQge3JlZGlyZWN0fSBmcm9tICcuL21vZHVsZXMvY29udHJvbGxlcic7XG4iLCAiZnVuY3Rpb24gaXNMb2dnZWRJbigpOiBib29sZWFuIHtcblx0cmV0dXJuIG13LmNvbmZpZy5leGlzdHMoJ3dnVXNlcklkJyk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciByZWZlcnJlciBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgZG9tYWluLlxuICovXG5mdW5jdGlvbiBpc1JlZmVycmVyU2VsZigpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IFVSTChkb2N1bWVudC5yZWZlcnJlcikuaG9zdG5hbWUgPT09IGxvY2F0aW9uLmhvc3RuYW1lO1xuXHR9IGNhdGNoIHtcblx0XHQvLyBJbnZhbGlkIFVSTFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5mdW5jdGlvbiBpc1ZpZXdpbmdQYWdlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbXcuY29uZmlnLmdldCgnd2dBY3Rpb24nKSA9PT0gJ3ZpZXcnO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKHNldCBpbiB1c2VyIHByZWZlcmVuY2Ugb3IgYnkgP3VzZWxhbmc9eHh4KVxuICogaXMgQ2hpbmVzZSBvciBub3QuXG4gKi9cbmZ1bmN0aW9uIGlzTGFuZ0NoaW5lc2UoKTogYm9vbGVhbiB7XG5cdHJldHVybiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJMYW5ndWFnZScpLnN0YXJ0c1dpdGgoJ3poJyk7XG59XG5cbmZ1bmN0aW9uIGlzV2lraXRleHRQYWdlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbXcuY29uZmlnLmdldCgnd2dDYW5vbmljYWxOYW1lc3BhY2UnKSAhPT0gJ1NwZWNpYWwnICYmIG13LmNvbmZpZy5nZXQoJ3dnUGFnZUNvbnRlbnRNb2RlbCcpID09PSAnd2lraXRleHQnO1xufVxuXG5leHBvcnQge2lzTG9nZ2VkSW4sIGlzUmVmZXJyZXJTZWxmLCBpc1ZpZXdpbmdQYWdlLCBpc0xhbmdDaGluZXNlLCBpc1dpa2l0ZXh0UGFnZX07XG4iLCAiaW1wb3J0IHtpc0xvZ2dlZElufSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgTE9DQUxfVkFSSUFOVF9LRVkgPSAndmEtdmFyJztcbmNvbnN0IE9QVE9VVF9LRVkgPSAndmEtb3B0b3V0JztcbmNvbnN0IFZBTElEX1ZBUklBTlRTID0gWyd6aC1jbicsICd6aC1zZycsICd6aC1teScsICd6aC10dycsICd6aC1oaycsICd6aC1tbyddIGFzIGNvbnN0O1xuY29uc3QgVkFSSUFOVFMgPSBbJ3poJywgJ3poLWhhbnMnLCAnemgtaGFudCcsIC4uLlZBTElEX1ZBUklBTlRTXSBhcyBjb25zdDtcbmNvbnN0IEVYVF9WQVJJQU5UUyA9IFtcblx0J3poLWhhbnMtY24nLFxuXHQnemgtaGFucy1zZycsXG5cdCd6aC1oYW5zLW15Jyxcblx0J3poLWhhbnQtdHcnLFxuXHQnemgtaGFudC1oaycsXG5cdCd6aC1oYW50LW1vJyxcblx0Li4uVkFSSUFOVFMsXG5dIGFzIGNvbnN0O1xuLy8gU29tZSBicm93c2VycyAoZS5nLiBGaXJlZm94IEFuZHJvaWQpIG1heSByZXR1cm4gc3VjaCBsYW5ndWFnZXNcbmNvbnN0IEVYVF9NQVBQSU5HOiBSZWNvcmQ8c3RyaW5nLCBWYWxpZFZhcmlhbnQ+ID0ge1xuXHQnemgtaGFucy1jbic6ICd6aC1jbicsXG5cdCd6aC1oYW5zLXNnJzogJ3poLXNnJyxcblx0J3poLWhhbnMtbXknOiAnemgtbXknLFxuXHQnemgtaGFudC10dyc6ICd6aC10dycsXG5cdCd6aC1oYW50LWhrJzogJ3poLWhrJyxcblx0J3poLWhhbnQtbW8nOiAnemgtbW8nLFxufTtcblxudHlwZSBWYWxpZFZhcmlhbnQgPSAodHlwZW9mIFZBTElEX1ZBUklBTlRTKVtudW1iZXJdO1xudHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWQVJJQU5UUylbbnVtYmVyXTtcbnR5cGUgRXh0VmFyaWFudCA9ICh0eXBlb2YgRVhUX1ZBUklBTlRTKVtudW1iZXJdO1xuXG5mdW5jdGlvbiBpc1ZhcmlhbnQoc3RyOiBzdHJpbmcpOiBzdHIgaXMgVmFyaWFudCB7XG5cdHJldHVybiAoVkFSSUFOVFMgYXMgUmVhZG9ubHlBcnJheTxzdHJpbmc+KS5pbmNsdWRlcyhzdHIpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkVmFyaWFudChzdHI6IHN0cmluZyk6IHN0ciBpcyBWYWxpZFZhcmlhbnQge1xuXHRyZXR1cm4gKFZBTElEX1ZBUklBTlRTIGFzIFJlYWRvbmx5QXJyYXk8c3RyaW5nPikuaW5jbHVkZXMoc3RyKTtcbn1cblxuZnVuY3Rpb24gaXNFeHRWYXJpYW50KHN0cjogc3RyaW5nKTogc3RyIGlzIEV4dFZhcmlhbnQge1xuXHRyZXR1cm4gKEVYVF9WQVJJQU5UUyBhcyBSZWFkb25seUFycmF5PHN0cmluZz4pLmluY2x1ZGVzKHN0cik7XG59XG5cbi8qKlxuICogTWFwcyBhZGRpdGlvbmFsIGxhbmcgY29kZXMgdG8gc3RhbmRhcmQgdmFyaWFudHMuXG4gKlxuICogQHJldHVybnMgc3RhbmRhcmQgdmFyaWFudFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVWYXJpYW50KGV4dFZhcmlhbnQ6IEV4dFZhcmlhbnQpOiBWYXJpYW50IHtcblx0cmV0dXJuIChFWFRfTUFQUElOR1tleHRWYXJpYW50XSA/PyBleHRWYXJpYW50KSBhcyBWYXJpYW50O1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IHZhcmlhbnQgb2YgdGhlIHBhZ2UgKGRvbid0IGJlIG1pc2xlZCBieSBjb25maWcgbmFtaW5nKS5cbiAqXG4gKiBAcmV0dXJucyB2YXJpYW50LCBudWxsIGZvciBub24td2lraXRleHQgcGFnZSAoYnV0IE5PVCBhbGwgc3VjaCBwYWdlcyByZXR1cm5zIG51bGwhKVxuICovXG5mdW5jdGlvbiBnZXRQYWdlVmFyaWFudCgpOiBWYXJpYW50IHwgbnVsbCB7XG5cdGNvbnN0IHJlc3VsdCA9IG13LmNvbmZpZy5nZXQoJ3dnVXNlclZhcmlhbnQnKTtcblx0cmV0dXJuIHJlc3VsdCAhPT0gbnVsbCAmJiBpc0V4dFZhcmlhbnQocmVzdWx0KSA/IG5vcm1hbGl6ZVZhcmlhbnQocmVzdWx0KSA6IG51bGw7XG59XG5cbi8qKlxuICogR2V0IGFjY291bnQgdmFyaWFudC5cbiAqXG4gKiBAcmV0dXJucyBhY2NvdW50IHZhcmlhbnQsIG51bGwgZm9yIGFub255bW91cyB1c2VyXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnRWYXJpYW50KCk6IFZhcmlhbnQgfCBudWxsIHtcblx0aWYgKGlzTG9nZ2VkSW4oKSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG13LnVzZXIub3B0aW9ucy5nZXQoJ3ZhcmlhbnQnKSBhcyBzdHJpbmc7XG5cdFx0cmV0dXJuIGlzRXh0VmFyaWFudChyZXN1bHQpID8gbm9ybWFsaXplVmFyaWFudChyZXN1bHQpIDogbnVsbDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYWxWYXJpYW50KCk6IFZhcmlhbnQgfCBudWxsIHtcblx0Y29uc3QgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTE9DQUxfVkFSSUFOVF9LRVkpO1xuXHRpZiAocmVzdWx0ID09PSBudWxsIHx8ICFpc0V4dFZhcmlhbnQocmVzdWx0KSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVWYXJpYW50KHJlc3VsdCk7XG59XG5cbi8qKlxuICogUmV0dXJuIGJyb3dzZXIgbGFuZ3VhZ2UgaWYgaXQncyBhIENoaW5lc2UgdmFyaWFudC5cbiAqXG4gKiBAcmV0dXJucyBicm93c2VyIHZhcmlhbnRcbiAqL1xuZnVuY3Rpb24gZ2V0QnJvd3NlclZhcmlhbnQoKTogVmFyaWFudCB8IG51bGwge1xuXHRyZXR1cm4gKFxuXHRcdG5hdmlnYXRvci5sYW5ndWFnZXNcblx0XHRcdC5tYXAoKGxhbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKGlzRXh0VmFyaWFudClcblx0XHRcdC5tYXAobm9ybWFsaXplVmFyaWFudClcblx0XHRcdC5maW5kKGlzVmFyaWFudCkgPz8gbnVsbFxuXHQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgXCJuYXR1cmFsXCIgdmFyaWFudCBpbmZlcnJlZCBieSBNZWRpYVdpa2kgZm9yIGFub255bW91cyB1c2Vyc1xuICogd2hlbiB0aGUgbGluayBkb2Vzbid0IHNwZWNpZnkgYSB2YXJpYW50LlxuICpcbiAqIFVzZWQgaW4gbGluayBub3JtYWxpemF0aW9uLlxuICpcbiAqIEZJWE1FOiBPbGQgU2FmYXJpIGlzIGtub3duIHRvIGJyZWFrIHRoaXMgbWV0aG9kLlxuICogVXNlciByZXBvcnRlZCB0aGF0IG9uIGFuIGlPUyAxNCBkZXZpY2Ugd2l0aCBDaGluZXNlIGxhbmd1YWdlIGFuZCBTaW5nYXBvcmUgcmVnaW9uIHNldHRpbmdzLFxuICogQWNjZXB0LUxhbmd1YWdlIGlzIHpoLWNuICh0aHVzIGluZmVycmVkIGJ5IE1lZGlhV2lraSkgYnV0IHRoaXMgbWV0aG9kIHJldHVybnMgemgtc2cuXG4gKlxuICogQHJldHVybnMgdmFyaWFudFxuICovXG5mdW5jdGlvbiBnZXRNZWRpYVdpa2lWYXJpYW50KCk6IFZhcmlhbnQgfCBudWxsIHtcblx0cmV0dXJuIGdldEFjY291bnRWYXJpYW50KCkgPz8gZ2V0QnJvd3NlclZhcmlhbnQoKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgcHJlZmVycmVkIHZhcmlhbnQgZnJvbSBicm93c2VyIHZhcmlhbnQsIGxvY2FsIHZhcmlhbnQgYW5kIGFjY291bnQgdmFyaWFudC5cbiAqXG4gKiBQcmlvcml0eTogYWNjb3VudCB2YXJpYW50ID4gYnJvd3NlciB2YXJpYW50ID4gbG9jYWwgdmFyaWFudFxuICpcbiAqIEByZXR1cm5zIHByZWZlcnJlZCB2YXJpYW50XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZVByZWZlcnJlZFZhcmlhbnQoKTogVmFsaWRWYXJpYW50IHwgbnVsbCB7XG5cdHJldHVybiBbZ2V0QWNjb3VudFZhcmlhbnQoKSwgZ2V0QnJvd3NlclZhcmlhbnQoKSwgZ2V0TG9jYWxWYXJpYW50KCldXG5cdFx0Lm1hcCgodmFyaWFudCkgPT4ge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgIT09IG51bGwgJiYgaXNWYWxpZFZhcmlhbnQodmFyaWFudCkgPyB2YXJpYW50IDogbnVsbDtcblx0XHR9KVxuXHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcblx0XHRcdHJldHVybiBwcmV2ID8/IGN1cnI7XG5cdFx0fSk7XG59XG5cbnR5cGUgU2V0TG9jYWxWYXJpYW50ID0gdHlwZW9mIHNldExvY2FsVmFyaWFudDtcblxuZnVuY3Rpb24gc2V0TG9jYWxWYXJpYW50KHZhcmlhbnQ6IFZhcmlhbnQpOiB2b2lkIHtcblx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxfVkFSSUFOVF9LRVksIHZhcmlhbnQpO1xufVxuXG50eXBlIFNldE9wdE91dCA9IHR5cGVvZiBzZXRPcHRPdXQ7XG5cbmZ1bmN0aW9uIHNldE9wdE91dCgpOiB2b2lkIHtcblx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oT1BUT1VUX0tFWSwgJycpO1xufVxuXG5mdW5jdGlvbiBpc09wdE91dGVkKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oT1BUT1VUX0tFWSkgIT09IG51bGw7XG59XG5cbmV4cG9ydCB7XG5cdHR5cGUgU2V0TG9jYWxWYXJpYW50LFxuXHR0eXBlIFNldE9wdE91dCxcblx0dHlwZSBWYWxpZFZhcmlhbnQsXG5cdHR5cGUgVmFyaWFudCxcblx0aXNWYXJpYW50LFxuXHRpc1ZhbGlkVmFyaWFudCxcblx0Z2V0UGFnZVZhcmlhbnQsXG5cdGdldEFjY291bnRWYXJpYW50LFxuXHRnZXRMb2NhbFZhcmlhbnQsXG5cdGdldEJyb3dzZXJWYXJpYW50LFxuXHRnZXRNZWRpYVdpa2lWYXJpYW50LFxuXHRjYWxjdWxhdGVQcmVmZXJyZWRWYXJpYW50LFxuXHRzZXRMb2NhbFZhcmlhbnQsXG5cdHNldE9wdE91dCxcblx0aXNPcHRPdXRlZCxcbn07XG4iLCAiaW1wb3J0IHtWYXJpYW50LCBnZXRNZWRpYVdpa2lWYXJpYW50LCBpc1ZhbGlkVmFyaWFudCwgc2V0TG9jYWxWYXJpYW50fSBmcm9tICcuL21vZGVsJztcblxuY29uc3QgUkVHRVhfV0lLSV9VUkwgPSAvXlxcLyg/Ondpa2l8emgoPzotXFx3Kyk/KVxcLy9pO1xuY29uc3QgUkVHRVhfVkFSSUFOVF9VUkwgPSAvXlxcL3poKD86LVxcdyspP1xcLy9pO1xuY29uc3QgVkFSSUFOVF9QQVJBTSA9ICd2YS12YXJpYW50JztcblxuZnVuY3Rpb24gaXNFbGlnaWJsZUZvclJld3JpdGluZyhsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHQvLyBObyByZXdyaXRpbmcgZm9yIGVtcHR5IGxpbmtzXG5cdFx0aWYgKGxpbmsgPT09ICcnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHVybCA9IG5ldyBVUkwobGluaywgbG9jYXRpb24ub3JpZ2luKTtcblx0XHQvLyBObyByZXdyaXRpbmcgaWYgbGluayBpdHNlbGYgaGFzIHZhcmlhbnQgaW5mb1xuXHRcdGlmIChSRUdFWF9WQVJJQU5UX1VSTC50ZXN0KHVybC5wYXRobmFtZSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKCd2YXJpYW50JykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gTm8gcmV3cml0aW5nIGZvciBmb3JlaWduIG9yaWdpbiBVUkxzXG5cdFx0Ly8gTm90ZSB0aGF0IGxpbmtzIGxpa2UgamF2YXNjcmlwdDp2b2lkKDApIGFyZSBibG9ja2VkIGJ5IHRoaXNcblx0XHRpZiAodXJsLmhvc3QgIT09IGxvY2F0aW9uLmhvc3QpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVMaW5rKGxpbms6IHN0cmluZywgdmFyaWFudDogVmFyaWFudCk6IHN0cmluZyB7XG5cdHRyeSB7XG5cdFx0Y29uc3Qgbm9ybWFsaXphdGlvblRhcmdldFZhcmlhbnQgPSBnZXRNZWRpYVdpa2lWYXJpYW50KCk7XG5cdFx0Y29uc3QgdXJsID0gbmV3IFVSTChsaW5rLCBsb2NhdGlvbi5vcmlnaW4pO1xuXHRcdGNvbnN0IHtwYXRobmFtZSwgc2VhcmNoUGFyYW1zfSA9IHVybDtcblxuXHRcdGlmIChSRUdFWF9XSUtJX1VSTC50ZXN0KHBhdGhuYW1lKSkge1xuXHRcdFx0dXJsLnBhdGhuYW1lID0gYC8ke3ZhcmlhbnR9LyR7dXJsLnBhdGhuYW1lLnJlcGxhY2UoUkVHRVhfV0lLSV9VUkwsICcnKX1gO1xuXHRcdFx0c2VhcmNoUGFyYW1zLmRlbGV0ZSgndmFyaWFudCcpOyAvLyBGb3IgdGhpbmdzIGxpa2UgL3poLWNuL0E/dmFyaWFudD16aC1oa1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWFyY2hQYXJhbXMuc2V0KCd2YXJpYW50JywgdmFyaWFudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHZhcmlhbnQgPT09IG5vcm1hbGl6YXRpb25UYXJnZXRWYXJpYW50KSB7XG5cdFx0XHQvLyBOb3JtYWxpemUgdGhlIGxpbmsuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gRm9yIGV4YW1wbGUsIGZvciBsaW5rIC96aC10dy9UaXRsZSBhbmQgbm9ybWFsaXphdGlvbiB2YXJpYW50IHpoLXR3LCB0aGUgcmVzdWx0IGlzIC93aWtpL1RpdGxlLFxuXHRcdFx0Ly8gd2hpbGUgZm9yIHRoZSBzYW1lIGxpbmsgYW5kIG5vcm1hbGl6YXRpb24gdmFyaWFudCB6aC1jbiwgdGhlIHJlc3VsdCBpcyAvemgtdHcvVGl0bGUgKHVuY2hhbmdlZCkuXG5cdFx0XHR1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUucmVwbGFjZShSRUdFWF9XSUtJX1VSTCwgJy93aWtpLycpO1xuXHRcdFx0dXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ3ZhcmlhbnQnKTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSB1cmwudG9TdHJpbmcoKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBsaW5rO1xuXHR9XG59XG5cbmludGVyZmFjZSBSZWRpcmVjdGlvbk9wdGlvbnMge1xuXHRsaW5rPzogc3RyaW5nO1xuXHQvKiogU2hvdWxkIHN0aWxsIHJlZGlyZWN0IGV2ZW4gZGVzdGluYXRpb24gbGluayBpcyB0aGUgc2FtZSBhcyBjdXJyZW50IHBhZ2UgKi9cblx0Zm9yY2VkPzogYm9vbGVhbjtcbn1cblxudHlwZSBSZWRpcmVjdCA9IHR5cGVvZiByZWRpcmVjdDtcblxuZnVuY3Rpb24gcmVkaXJlY3QocHJlZmVycmVkVmFyaWFudDogVmFyaWFudCwgb3B0aW9uczogUmVkaXJlY3Rpb25PcHRpb25zID0ge30pOiB2b2lkIHtcblx0Y29uc3Qgb3JpZ0xpbmsgPSBvcHRpb25zLmxpbmsgPz8gbG9jYXRpb24uaHJlZjtcblx0Y29uc3QgbmV3TGluayA9IHJld3JpdGVMaW5rKG9yaWdMaW5rLCBwcmVmZXJyZWRWYXJpYW50KTtcblxuXHQvLyBQcmV2ZW50IGluZmluaXRlIHJlZGlyZWN0c1xuXHQvLyBUaGlzIGNvdWxkIGhhcHBlbiBvY2Nhc2lvbmFsbHksIHNlZSBnZXRNZWRpYVdpa2lWYXJpYW50KCkncyBjb21tZW50c1xuXHRpZiAob3B0aW9ucy5mb3JjZWQgfHwgbmV3TGluayAhPT0gbG9jYXRpb24uaHJlZikge1xuXHRcdC8vIFVzZSByZXBsYWNlKCkgdG8gcHJldmVudCBuYXZpZ2F0aW5nIGJhY2tcblx0XHRsb2NhdGlvbi5yZXBsYWNlKG5ld0xpbmspO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGhpc1BhZ2UocHJlZmVycmVkVmFyaWFudDogVmFyaWFudCwgcGFnZVZhcmlhbnQ/OiBWYXJpYW50KTogdm9pZCB7XG5cdGlmIChwYWdlVmFyaWFudCA9PT0gcHJlZmVycmVkVmFyaWFudCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHJlZGlyZWN0aW9uT3JpZ2luOiBzdHJpbmcgfCBudWxsID0gbXcuY29uZmlnLmdldCgnd2dSZWRpcmVjdGVkRnJvbScpO1xuXHRpZiAocmVkaXJlY3Rpb25PcmlnaW4gPT09IG51bGwpIHtcblx0XHRyZWRpcmVjdChwcmVmZXJyZWRWYXJpYW50KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBVc2UgVVJMIHRvIHJlc2VydmUgb3RoZXIgcGFydHMgb2YgdGhlIGxpbmtcblx0Y29uc3QgcmVkaXJlY3Rpb25VUkwgPSBuZXcgVVJMKGxvY2F0aW9uLmhyZWYpO1xuXHRyZWRpcmVjdGlvblVSTC5wYXRobmFtZSA9IGAvd2lraS8ke3JlZGlyZWN0aW9uT3JpZ2lufWA7XG5cdHJlZGlyZWN0KHByZWZlcnJlZFZhcmlhbnQsIHtsaW5rOiByZWRpcmVjdGlvblVSTC50b1N0cmluZygpfSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVBbmNob3JzKHZhcmlhbnQ6IFZhcmlhbnQpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBuYW1lIG9mIFsnY2xpY2snLCAnYXV4Y2xpY2snLCAnZHJhZ3N0YXJ0J10pIHtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIChldikgPT4ge1xuXHRcdFx0Y29uc3Qge3RhcmdldH0gPSBldjtcblxuXHRcdFx0aWYgKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcblx0XHRcdFx0Ly8gRG8gbm90IHdyaXRlIDxhPiB3aXRoIGhhc2ggb25seSBocmVmIG9yIG5vIGhyZWZcblx0XHRcdFx0Ly8gd2hpY2ggaXMga25vd24gdG8gY2F1c2UgYnJlYWthZ2UgaW4gZS5nLiBWaXN1YWwgRWRpdG9yXG5cdFx0XHRcdGNvbnN0IGFuY2hvcjogSFRNTEFuY2hvckVsZW1lbnQgfCBudWxsID0gdGFyZ2V0LmNsb3Nlc3QoJ2FbaHJlZl06bm90KFtocmVmXj1cIiNcIl0pJyk7XG5cblx0XHRcdFx0aWYgKGFuY2hvciAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9yaWdMaW5rID0gYW5jaG9yLmhyZWY7XG5cdFx0XHRcdFx0aWYgKCFpc0VsaWdpYmxlRm9yUmV3cml0aW5nKG9yaWdMaW5rKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IG5ld0xpbmsgPSByZXdyaXRlTGluayhvcmlnTGluaywgdmFyaWFudCk7XG5cdFx0XHRcdFx0aWYgKG5ld0xpbmsgPT09IG9yaWdMaW5rKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQnJvd3NlciBzdXBwb3J0OiBTYWZhcmkgPCAxNFxuXHRcdFx0XHRcdC8vIEZhaWwgc2lsZW50bHkgd2hlbiBEcmFnRXZlbnQgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRpZiAod2luZG93LkRyYWdFdmVudCAmJiBldiBpbnN0YW5jZW9mIERyYWdFdmVudCAmJiBldi5kYXRhVHJhbnNmZXIpIHtcblx0XHRcdFx0XHRcdC8vIE1vZGlmeSBkcmFnIGRhdGEgZGlyZWN0bHkgYmVjYXVzZSBzZXR0aW5nIGhyZWYgaGFzIG5vIGVmZmVjdCBpbiBkcmFnIGV2ZW50XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHR5cGUgb2YgZXYuZGF0YVRyYW5zZmVyLnR5cGVzKSB7XG5cdFx0XHRcdFx0XHRcdGV2LmRhdGFUcmFuc2Zlci5zZXREYXRhKHR5cGUsIG5ld0xpbmspO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBVc2UgYSBtdXRleCB0byBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbiBieSBvdmVybGFwcGVkIGhhbmRsZXIgY2FsbHNcblx0XHRcdFx0XHRcdGlmIChhbmNob3IuZGF0YXNldFsndmFNdXRleCddID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0YW5jaG9yLmRhdGFzZXRbJ3ZhTXV0ZXgnXSA9ICcnO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhbmNob3IuaHJlZiA9IG5ld0xpbms7XG5cblx0XHRcdFx0XHRcdC8vIEhBQ0s6IHdvcmthcm91bmQgcG9wdXBzIG5vdCB3b3JraW5nIG9uIG1vZGlmaWVkIGxpbmtzXG5cdFx0XHRcdFx0XHQvLyBBZGQgaGFuZGxlciB0byA8YT4gZGlyZWN0bHkgc28gaXQgd2FzIHRyaWdnZXJlZCBiZWZvcmUgYW55dGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpbm5lck5hbWUgb2YgWydtb3VzZW92ZXInLCAnbW91c2VsZWF2ZScsICdrZXl1cCddKSB7XG5cdFx0XHRcdFx0XHRcdGFuY2hvci5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFx0XHRcdGlubmVyTmFtZSxcblx0XHRcdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYW5jaG9yLmRhdGFzZXRbJ3ZhTXV0ZXgnXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFuY2hvci5ocmVmID0gb3JpZ0xpbms7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBhbmNob3IuZGF0YXNldFsndmFNdXRleCddO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0e29uY2U6IHRydWV9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2hvd1ZhcmlhbnRQcm9tcHQoKTogdm9pZCB7XG5cdGNvbnN0IG1vZHVsZU5hbWUgPSAnZXh0LmdhZGdldC5WYXJpYW50QWxseURpYWxvZyc7XG5cdHZvaWQgbXcubG9hZGVyLnVzaW5nKG1vZHVsZU5hbWUsIChyZXF1aXJlKSA9PiB7XG5cdFx0cmVxdWlyZShtb2R1bGVOYW1lKTtcblx0fSk7XG59XG5cbi8qKlxuICogU2V0IGxvY2FsIHZhcmlhbnQgYWNjb3JkaW5nIHRvIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLlxuICpcbiAqIGUuZy4gYSBVUkwgd2l0aCA/dmEtdmFyaWFudD16aC1jbiB3aWxsIHNldCBsb2NhbCB2YXJpYW50IHRvIHpoLWNuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5VVJMVmFyaWFudCgpOiB2b2lkIHtcblx0Y29uc3QgdmFyaWFudCA9IG5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChWQVJJQU5UX1BBUkFNKTtcblx0aWYgKHZhcmlhbnQgIT09IG51bGwgJiYgaXNWYWxpZFZhcmlhbnQodmFyaWFudCkpIHtcblx0XHRzZXRMb2NhbFZhcmlhbnQodmFyaWFudCk7XG5cdH1cbn1cblxuZXhwb3J0IHtcblx0dHlwZSBSZWRpcmVjdCxcblx0aXNFbGlnaWJsZUZvclJld3JpdGluZyxcblx0cmV3cml0ZUxpbmssXG5cdHJlZGlyZWN0LFxuXHRjaGVja1RoaXNQYWdlLFxuXHRyZXdyaXRlQW5jaG9ycyxcblx0c2hvd1ZhcmlhbnRQcm9tcHQsXG5cdGFwcGx5VVJMVmFyaWFudCxcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLG9GQUFBQSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJLGNBQWMsT0FBTyxZQUFZLFlBQVksU0FBUztBQUsxRCxJQUFBQSxRQUFPLFVBQVUsT0FBTyxlQUFlLGVBQWUsZ0JBQWdCLFNBQVksU0FBVSxVQUFVO0FBQ3BHLGFBQU8sT0FBTyxZQUFZLGNBQWMsYUFBYTtBQUFBLElBQ3ZELElBQUksU0FBVSxVQUFVO0FBQ3RCLGFBQU8sT0FBTyxZQUFZO0FBQUEsSUFDNUI7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLDhFQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSxvRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBR1osSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBRWxDLGFBQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxXQUFZO0FBQUUsZUFBTztBQUFBLE1BQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQUEsSUFDakYsQ0FBQztBQUFBO0FBQUE7OztBQ1BEO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU9ELFlBQVEsWUFBWUEsUUFBSTtBQUFBLElBRXBDLDJCQUFZO0FBQUUsYUFBTztBQUFBLElBQU0sRUFBRyxLQUFLLFNBQVMsYUFBYSxFQUFFO0FBQUE7QUFBQTs7O0FDZjlEO0FBQUEsa0ZBQUFFLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUVqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sT0FBTyxNQUFNLFdBQVcsT0FBTyxPQUFPLFdBQVcsRUFBRTtBQUFBLElBQzVEO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSxnR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLFdBQVc7QUFFZixRQUFJQyxZQUFXRCxZQUFXO0FBRTFCLFFBQUksU0FBUyxTQUFTQyxTQUFRLEtBQUssU0FBU0EsVUFBUyxhQUFhO0FBRWxFLElBQUFGLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxTQUFTRSxVQUFTLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFBQSxJQUNoRDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsdUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFDWixRQUFJLGdCQUFnQjtBQUdwQixJQUFBQSxRQUFPLFVBQVUsQ0FBQyxlQUFlLENBQUMsTUFBTSxXQUFZO0FBRWxELGFBQU8sT0FBTyxlQUFlLGNBQWMsS0FBSyxHQUFHLEtBQUs7QUFBQSxRQUN0RCxLQUFLLFdBQVk7QUFBRSxpQkFBTztBQUFBLFFBQUc7QUFBQSxNQUMvQixDQUFDLEVBQUUsTUFBTTtBQUFBLElBQ1gsQ0FBQztBQUFBO0FBQUE7OztBQ1hEO0FBQUEsZ0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFJWixJQUFBQSxRQUFPLFVBQVUsZUFBZSxNQUFNLFdBQVk7QUFFaEQsYUFBTyxPQUFPLGVBQWUsV0FBWTtBQUFBLE1BQWMsR0FBRyxhQUFhO0FBQUEsUUFDckUsT0FBTztBQUFBLFFBQ1AsVUFBVTtBQUFBLE1BQ1osQ0FBQyxFQUFFLGNBQWM7QUFBQSxJQUNuQixDQUFDO0FBQUE7QUFBQTs7O0FDWkQ7QUFBQSxrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxXQUFXO0FBRWYsUUFBSSxVQUFVO0FBQ2QsUUFBSSxhQUFhO0FBR2pCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxTQUFTLFFBQVEsRUFBRyxRQUFPO0FBQy9CLFlBQU0sSUFBSSxXQUFXLFFBQVEsUUFBUSxJQUFJLG1CQUFtQjtBQUFBLElBQzlEO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSw2RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBRVosSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBRWxDLFVBQUksT0FBUSxXQUFZO0FBQUEsTUFBYyxFQUFHLEtBQUs7QUFFOUMsYUFBTyxPQUFPLFFBQVEsY0FBYyxLQUFLLGVBQWUsV0FBVztBQUFBLElBQ3JFLENBQUM7QUFBQTtBQUFBOzs7QUNSRDtBQUFBLHNGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUU5QixJQUFBQSxRQUFPLFVBQVUsY0FBYyxLQUFLLEtBQUssSUFBSSxJQUFJLFdBQVk7QUFDM0QsYUFBTyxLQUFLLE1BQU0sTUFBTSxTQUFTO0FBQUEsSUFDbkM7QUFBQTtBQUFBOzs7QUNQQTtBQUFBLHFGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksYUFBYTtBQUVqQixRQUFJLFlBQVksU0FBVSxVQUFVO0FBQ2xDLGFBQU8sV0FBVyxRQUFRLElBQUksV0FBVztBQUFBLElBQzNDO0FBRUEsSUFBQUQsUUFBTyxVQUFVLFNBQVUsV0FBVyxRQUFRO0FBQzVDLGFBQU8sVUFBVSxTQUFTLElBQUksVUFBVUMsWUFBVyxTQUFTLENBQUMsSUFBSUEsWUFBVyxTQUFTLEtBQUtBLFlBQVcsU0FBUyxFQUFFLE1BQU07QUFBQSxJQUN4SDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsOEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLG9CQUFvQixTQUFTO0FBQ2pDLFFBQUksT0FBTyxrQkFBa0I7QUFDN0IsUUFBSSxzQkFBc0IsZUFBZSxrQkFBa0IsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUUvRSxJQUFBQSxRQUFPLFVBQVUsY0FBYyxzQkFBc0IsU0FBVSxJQUFJO0FBQ2pFLGFBQU8sV0FBWTtBQUNqQixlQUFPLEtBQUssTUFBTSxJQUFJLFNBQVM7QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLCtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsSUFBQUEsUUFBTyxVQUFVLFlBQVksQ0FBQyxFQUFFLGFBQWE7QUFBQTtBQUFBOzs7QUNIN0M7QUFBQSwrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUVqQixRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksWUFBWUMsY0FBYUEsV0FBVTtBQUV2QyxJQUFBRixRQUFPLFVBQVUsWUFBWSxPQUFPLFNBQVMsSUFBSTtBQUFBO0FBQUE7OztBQ05qRDtBQUFBLCtGQUFBRyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksWUFBWTtBQUVoQixRQUFJLFVBQVVBLFlBQVc7QUFDekIsUUFBSSxPQUFPQSxZQUFXO0FBQ3RCLFFBQUksV0FBVyxXQUFXLFFBQVEsWUFBWSxRQUFRLEtBQUs7QUFDM0QsUUFBSSxLQUFLLFlBQVksU0FBUztBQUM5QixRQUFJO0FBQUosUUFBVztBQUVYLFFBQUksSUFBSTtBQUNOLGNBQVEsR0FBRyxNQUFNLEdBQUc7QUFHcEIsZ0JBQVUsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUM7QUFBQSxJQUNuRTtBQUlBLFFBQUksQ0FBQyxXQUFXLFdBQVc7QUFDekIsY0FBUSxVQUFVLE1BQU0sYUFBYTtBQUNyQyxVQUFJLENBQUMsU0FBUyxNQUFNLENBQUMsS0FBSyxJQUFJO0FBQzVCLGdCQUFRLFVBQVUsTUFBTSxlQUFlO0FBQ3ZDLFlBQUksTUFBTyxXQUFVLENBQUMsTUFBTSxDQUFDO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDM0JqQjtBQUFBLHFHQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBQ1osUUFBSUMsY0FBYTtBQUVqQixRQUFJLFVBQVVBLFlBQVc7QUFHekIsSUFBQUQsUUFBTyxVQUFVLENBQUMsQ0FBQyxPQUFPLHlCQUF5QixDQUFDLE1BQU0sV0FBWTtBQUNwRSxVQUFJLFNBQVMsT0FBTyxrQkFBa0I7QUFLdEMsYUFBTyxDQUFDLFFBQVEsTUFBTSxLQUFLLEVBQUUsT0FBTyxNQUFNLGFBQWE7QUFBQSxNQUVyRCxDQUFDLE9BQU8sUUFBUSxjQUFjLGFBQWE7QUFBQSxJQUMvQyxDQUFDO0FBQUE7QUFBQTs7O0FDbEJEO0FBQUEsMEZBQUFFLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksZ0JBQWdCO0FBRXBCLElBQUFBLFFBQU8sVUFBVSxpQkFDWixDQUFDLE9BQU8sUUFDUixPQUFPLE9BQU8sWUFBWTtBQUFBO0FBQUE7OztBQ04vQjtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksb0JBQW9CO0FBRXhCLFFBQUksVUFBVTtBQUVkLElBQUFBLFFBQU8sVUFBVSxvQkFBb0IsU0FBVSxJQUFJO0FBQ2pELGFBQU8sT0FBTyxNQUFNO0FBQUEsSUFDdEIsSUFBSSxTQUFVLElBQUk7QUFDaEIsVUFBSSxVQUFVLFdBQVcsUUFBUTtBQUNqQyxhQUFPLFdBQVcsT0FBTyxLQUFLLGNBQWMsUUFBUSxXQUFXLFFBQVEsRUFBRSxDQUFDO0FBQUEsSUFDNUU7QUFBQTtBQUFBOzs7QUNiQTtBQUFBLHNGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFFZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUk7QUFDRixlQUFPLFFBQVEsUUFBUTtBQUFBLE1BQ3pCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsbUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxhQUFhO0FBR2pCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxXQUFXLFFBQVEsRUFBRyxRQUFPO0FBQ2pDLFlBQU0sSUFBSSxXQUFXLFlBQVksUUFBUSxJQUFJLG9CQUFvQjtBQUFBLElBQ25FO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSw2RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBR0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsSUFBSTtBQUM3QixhQUFPLE9BQU8sUUFBUSxPQUFPO0FBQUEsSUFDL0I7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLG1GQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFlBQVk7QUFDaEIsUUFBSSxvQkFBb0I7QUFJeEIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsR0FBRyxHQUFHO0FBQy9CLFVBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxhQUFPLGtCQUFrQixJQUFJLElBQUksU0FBWSxVQUFVLElBQUk7QUFBQSxJQUM3RDtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsOEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksYUFBYTtBQUNqQixRQUFJLFdBQVc7QUFFZixRQUFJLGFBQWE7QUFJakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNO0FBQ3RDLFVBQUksSUFBSTtBQUNSLFVBQUksU0FBUyxZQUFZLFdBQVcsS0FBSyxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUNyRyxVQUFJLFdBQVcsS0FBSyxNQUFNLE9BQU8sS0FBSyxDQUFDLFNBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUMvRSxVQUFJLFNBQVMsWUFBWSxXQUFXLEtBQUssTUFBTSxRQUFRLEtBQUssQ0FBQyxTQUFTLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFHLFFBQU87QUFDckcsWUFBTSxJQUFJLFdBQVcseUNBQXlDO0FBQUEsSUFDaEU7QUFBQTtBQUFBOzs7QUNmQTtBQUFBLGdGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNEakI7QUFBQSwrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUdqQixRQUFJLGlCQUFpQixPQUFPO0FBRTVCLElBQUFELFFBQU8sVUFBVSxTQUFVLEtBQUssT0FBTztBQUNyQyxVQUFJO0FBQ0YsdUJBQWVDLGFBQVksS0FBSyxFQUFFLE9BQWMsY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDdEYsU0FBUyxPQUFPO0FBQ2QsUUFBQUEsWUFBVyxHQUFHLElBQUk7QUFBQSxNQUNwQjtBQUFFLGFBQU87QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSxxRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxVQUFVO0FBQ2QsUUFBSUMsY0FBYTtBQUNqQixRQUFJLHVCQUF1QjtBQUUzQixRQUFJLFNBQVM7QUFDYixRQUFJLFFBQVFELFFBQU8sVUFBVUMsWUFBVyxNQUFNLEtBQUsscUJBQXFCLFFBQVEsQ0FBQyxDQUFDO0FBRWxGLEtBQUMsTUFBTSxhQUFhLE1BQU0sV0FBVyxDQUFDLElBQUksS0FBSztBQUFBLE1BQzdDLFNBQVM7QUFBQSxNQUNULE1BQU0sVUFBVSxTQUFTO0FBQUEsTUFDekIsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUFBO0FBQUE7OztBQ2REO0FBQUEsK0VBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUVaLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUssT0FBTztBQUNyQyxhQUFPLE1BQU0sR0FBRyxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQy9DO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSxpR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxvQkFBb0I7QUFFeEIsUUFBSSxhQUFhO0FBSWpCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsVUFBSSxrQkFBa0IsRUFBRSxFQUFHLE9BQU0sSUFBSSxXQUFXLDBCQUEwQixFQUFFO0FBQzVFLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSxrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSx5QkFBeUI7QUFFN0IsUUFBSSxVQUFVO0FBSWQsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxhQUFPLFFBQVEsdUJBQXVCLFFBQVEsQ0FBQztBQUFBLElBQ2pEO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSx5RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUVmLFFBQUksaUJBQWlCLFlBQVksQ0FBQyxFQUFFLGNBQWM7QUFLbEQsSUFBQUEsUUFBTyxVQUFVLE9BQU8sVUFBVSxTQUFTLE9BQU8sSUFBSSxLQUFLO0FBQ3pELGFBQU8sZUFBZSxTQUFTLEVBQUUsR0FBRyxHQUFHO0FBQUEsSUFDekM7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLDRFQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxLQUFLO0FBQ1QsUUFBSSxVQUFVLEtBQUssT0FBTztBQUMxQixRQUFJLFdBQVcsWUFBWSxHQUFJLFFBQVE7QUFFdkMsSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSztBQUM5QixhQUFPLGFBQWEsUUFBUSxTQUFZLEtBQUssT0FBTyxPQUFPLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRTtBQUFBLElBQ3hGO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSwwRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLFNBQVM7QUFDYixRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFDVixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLG9CQUFvQjtBQUV4QixRQUFJQyxVQUFTRCxZQUFXO0FBQ3hCLFFBQUksd0JBQXdCLE9BQU8sS0FBSztBQUN4QyxRQUFJLHdCQUF3QixvQkFBb0JDLFFBQU8sS0FBSyxLQUFLQSxVQUFTQSxXQUFVQSxRQUFPLGlCQUFpQjtBQUU1RyxJQUFBRixRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUksQ0FBQyxPQUFPLHVCQUF1QixJQUFJLEdBQUc7QUFDeEMsOEJBQXNCLElBQUksSUFBSSxpQkFBaUIsT0FBT0UsU0FBUSxJQUFJLElBQzlEQSxRQUFPLElBQUksSUFDWCxzQkFBc0IsWUFBWSxJQUFJO0FBQUEsTUFDNUM7QUFBRSxhQUFPLHNCQUFzQixJQUFJO0FBQUEsSUFDckM7QUFBQTtBQUFBOzs7QUNsQkE7QUFBQSxxRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxXQUFXO0FBQ2YsUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksc0JBQXNCO0FBQzFCLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWUsZ0JBQWdCLGFBQWE7QUFJaEQsSUFBQUEsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNO0FBQ3RDLFVBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxTQUFTLEtBQUssRUFBRyxRQUFPO0FBQ2hELFVBQUksZUFBZSxVQUFVLE9BQU8sWUFBWTtBQUNoRCxVQUFJO0FBQ0osVUFBSSxjQUFjO0FBQ2hCLFlBQUksU0FBUyxPQUFXLFFBQU87QUFDL0IsaUJBQVMsS0FBSyxjQUFjLE9BQU8sSUFBSTtBQUN2QyxZQUFJLENBQUMsU0FBUyxNQUFNLEtBQUssU0FBUyxNQUFNLEVBQUcsUUFBTztBQUNsRCxjQUFNLElBQUksV0FBVyx5Q0FBeUM7QUFBQSxNQUNoRTtBQUNBLFVBQUksU0FBUyxPQUFXLFFBQU87QUFDL0IsYUFBTyxvQkFBb0IsT0FBTyxJQUFJO0FBQUEsSUFDeEM7QUFBQTtBQUFBOzs7QUN6QkE7QUFBQSx3RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUlmLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxNQUFNLFlBQVksVUFBVSxRQUFRO0FBQ3hDLGFBQU8sU0FBUyxHQUFHLElBQUksTUFBTSxNQUFNO0FBQUEsSUFDckM7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLCtGQUFBQyxVQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSwwQkFBMEI7QUFDOUIsUUFBSSxXQUFXO0FBQ2YsUUFBSSxnQkFBZ0I7QUFFcEIsUUFBSSxhQUFhO0FBRWpCLFFBQUksa0JBQWtCLE9BQU87QUFFN0IsUUFBSSw0QkFBNEIsT0FBTztBQUN2QyxRQUFJLGFBQWE7QUFDakIsUUFBSSxlQUFlO0FBQ25CLFFBQUksV0FBVztBQUlmLElBQUFBLFNBQVEsSUFBSSxjQUFjLDBCQUEwQixTQUFTLGVBQWUsR0FBRyxHQUFHLFlBQVk7QUFDNUYsZUFBUyxDQUFDO0FBQ1YsVUFBSSxjQUFjLENBQUM7QUFDbkIsZUFBUyxVQUFVO0FBQ25CLFVBQUksT0FBTyxNQUFNLGNBQWMsTUFBTSxlQUFlLFdBQVcsY0FBYyxZQUFZLGNBQWMsQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUM1SCxZQUFJLFVBQVUsMEJBQTBCLEdBQUcsQ0FBQztBQUM1QyxZQUFJLFdBQVcsUUFBUSxRQUFRLEdBQUc7QUFDaEMsWUFBRSxDQUFDLElBQUksV0FBVztBQUNsQix1QkFBYTtBQUFBLFlBQ1gsY0FBYyxnQkFBZ0IsYUFBYSxXQUFXLFlBQVksSUFBSSxRQUFRLFlBQVk7QUFBQSxZQUMxRixZQUFZLGNBQWMsYUFBYSxXQUFXLFVBQVUsSUFBSSxRQUFRLFVBQVU7QUFBQSxZQUNsRixVQUFVO0FBQUEsVUFDWjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUUsYUFBTyxnQkFBZ0IsR0FBRyxHQUFHLFVBQVU7QUFBQSxJQUMzQyxJQUFJLGtCQUFrQixTQUFTLGVBQWUsR0FBRyxHQUFHLFlBQVk7QUFDOUQsZUFBUyxDQUFDO0FBQ1YsVUFBSSxjQUFjLENBQUM7QUFDbkIsZUFBUyxVQUFVO0FBQ25CLFVBQUksZUFBZ0IsS0FBSTtBQUN0QixlQUFPLGdCQUFnQixHQUFHLEdBQUcsVUFBVTtBQUFBLE1BQ3pDLFNBQVMsT0FBTztBQUFBLE1BQWM7QUFDOUIsVUFBSSxTQUFTLGNBQWMsU0FBUyxXQUFZLE9BQU0sSUFBSSxXQUFXLHlCQUF5QjtBQUM5RixVQUFJLFdBQVcsV0FBWSxHQUFFLENBQUMsSUFBSSxXQUFXO0FBQzdDLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDM0NBO0FBQUEsc0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFNBQVM7QUFFYixRQUFJLG9CQUFvQixTQUFTO0FBRWpDLFFBQUksZ0JBQWdCLGVBQWUsT0FBTztBQUUxQyxRQUFJLFNBQVMsT0FBTyxtQkFBbUIsTUFBTTtBQUU3QyxRQUFJLFNBQVMsVUFBVyxTQUFTLFlBQVk7QUFBQSxJQUFjLEVBQUcsU0FBUztBQUN2RSxRQUFJLGVBQWUsV0FBVyxDQUFDLGVBQWdCLGVBQWUsY0FBYyxtQkFBbUIsTUFBTSxFQUFFO0FBRXZHLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNqQkE7QUFBQSx1RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksYUFBYTtBQUNqQixRQUFJLFFBQVE7QUFFWixRQUFJLG1CQUFtQixZQUFZLFNBQVMsUUFBUTtBQUdwRCxRQUFJLENBQUMsV0FBVyxNQUFNLGFBQWEsR0FBRztBQUNwQyxZQUFNLGdCQUFnQixTQUFVLElBQUk7QUFDbEMsZUFBTyxpQkFBaUIsRUFBRTtBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUVBLElBQUFBLFFBQU8sVUFBVSxNQUFNO0FBQUE7QUFBQTs7O0FDZHZCO0FBQUEsaUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxhQUFhO0FBRWpCLFFBQUksVUFBVUEsWUFBVztBQUV6QixJQUFBRCxRQUFPLFVBQVUsV0FBVyxPQUFPLEtBQUssY0FBYyxLQUFLLE9BQU8sT0FBTyxDQUFDO0FBQUE7QUFBQTs7O0FDTjFFO0FBQUEsbUdBQUFFLFVBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsT0FBTztBQUN4QyxhQUFPO0FBQUEsUUFDTCxZQUFZLEVBQUUsU0FBUztBQUFBLFFBQ3ZCLGNBQWMsRUFBRSxTQUFTO0FBQUEsUUFDekIsVUFBVSxFQUFFLFNBQVM7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUkE7QUFBQSx1R0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksMkJBQTJCO0FBRS9CLElBQUFBLFFBQU8sVUFBVSxjQUFjLFNBQVUsUUFBUSxLQUFLLE9BQU87QUFDM0QsYUFBTyxxQkFBcUIsRUFBRSxRQUFRLEtBQUsseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBQUEsSUFDL0UsSUFBSSxTQUFVLFFBQVEsS0FBSyxPQUFPO0FBQ2hDLGFBQU8sR0FBRyxJQUFJO0FBQ2QsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLG1GQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFFVixRQUFJLE9BQU8sT0FBTyxNQUFNO0FBRXhCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUs7QUFDOUIsYUFBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUc7QUFBQSxJQUMxQztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVSxDQUFDO0FBQUE7QUFBQTs7O0FDRGxCO0FBQUEsdUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxXQUFXO0FBQ2YsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxTQUFTO0FBQ2IsUUFBSSxTQUFTO0FBQ2IsUUFBSSxZQUFZO0FBQ2hCLFFBQUksYUFBYTtBQUVqQixRQUFJLDZCQUE2QjtBQUNqQyxRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksVUFBVUEsWUFBVztBQUN6QixRQUFJO0FBQUosUUFBUztBQUFULFFBQWM7QUFFZCxRQUFJLFVBQVUsU0FBVSxJQUFJO0FBQzFCLGFBQU8sSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLElBQ3ZDO0FBRUEsUUFBSSxZQUFZLFNBQVUsTUFBTTtBQUM5QixhQUFPLFNBQVUsSUFBSTtBQUNuQixZQUFJO0FBQ0osWUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsU0FBUyxNQUFNO0FBQ3BELGdCQUFNLElBQUlDLFdBQVUsNEJBQTRCLE9BQU8sV0FBVztBQUFBLFFBQ3BFO0FBQUUsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsUUFBSSxtQkFBbUIsT0FBTyxPQUFPO0FBQy9CLGNBQVEsT0FBTyxVQUFVLE9BQU8sUUFBUSxJQUFJLFFBQVE7QUFFeEQsWUFBTSxNQUFNLE1BQU07QUFDbEIsWUFBTSxNQUFNLE1BQU07QUFDbEIsWUFBTSxNQUFNLE1BQU07QUFFbEIsWUFBTSxTQUFVLElBQUksVUFBVTtBQUM1QixZQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUcsT0FBTSxJQUFJQSxXQUFVLDBCQUEwQjtBQUNqRSxpQkFBUyxTQUFTO0FBQ2xCLGNBQU0sSUFBSSxJQUFJLFFBQVE7QUFDdEIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxZQUFNLFNBQVUsSUFBSTtBQUNsQixlQUFPLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQztBQUFBLE1BQzNCO0FBQ0EsWUFBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxNQUFNLElBQUksRUFBRTtBQUFBLE1BQ3JCO0FBQUEsSUFDRixPQUFPO0FBQ0QsY0FBUSxVQUFVLE9BQU87QUFDN0IsaUJBQVcsS0FBSyxJQUFJO0FBQ3BCLFlBQU0sU0FBVSxJQUFJLFVBQVU7QUFDNUIsWUFBSSxPQUFPLElBQUksS0FBSyxFQUFHLE9BQU0sSUFBSUEsV0FBVSwwQkFBMEI7QUFDckUsaUJBQVMsU0FBUztBQUNsQixvQ0FBNEIsSUFBSSxPQUFPLFFBQVE7QUFDL0MsZUFBTztBQUFBLE1BQ1Q7QUFDQSxZQUFNLFNBQVUsSUFBSTtBQUNsQixlQUFPLE9BQU8sSUFBSSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUFBLE1BQzFDO0FBQ0EsWUFBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxPQUFPLElBQUksS0FBSztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQWpDTTtBQW1CQTtBQWdCTixJQUFBRixRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUN0RUE7QUFBQSxzRkFBQUcsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksYUFBYTtBQUNqQixRQUFJLFNBQVM7QUFDYixRQUFJLGNBQWM7QUFDbEIsUUFBSSw2QkFBNkIsd0JBQXNDO0FBQ3ZFLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksc0JBQXNCO0FBRTFCLFFBQUksdUJBQXVCLG9CQUFvQjtBQUMvQyxRQUFJLG1CQUFtQixvQkFBb0I7QUFDM0MsUUFBSSxVQUFVO0FBRWQsUUFBSSxpQkFBaUIsT0FBTztBQUM1QixRQUFJLGNBQWMsWUFBWSxHQUFHLEtBQUs7QUFDdEMsUUFBSSxVQUFVLFlBQVksR0FBRyxPQUFPO0FBQ3BDLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRTlCLFFBQUksc0JBQXNCLGVBQWUsQ0FBQyxNQUFNLFdBQVk7QUFDMUQsYUFBTyxlQUFlLFdBQVk7QUFBQSxNQUFjLEdBQUcsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsV0FBVztBQUFBLElBQ3hGLENBQUM7QUFFRCxRQUFJLFdBQVcsT0FBTyxNQUFNLEVBQUUsTUFBTSxRQUFRO0FBRTVDLFFBQUksY0FBY0EsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNLFNBQVM7QUFDakUsVUFBSSxZQUFZLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLFdBQVc7QUFDbEQsZUFBTyxNQUFNLFFBQVEsUUFBUSxJQUFJLEdBQUcseUJBQXlCLElBQUksSUFBSTtBQUFBLE1BQ3ZFO0FBQ0EsVUFBSSxXQUFXLFFBQVEsT0FBUSxRQUFPLFNBQVM7QUFDL0MsVUFBSSxXQUFXLFFBQVEsT0FBUSxRQUFPLFNBQVM7QUFDL0MsVUFBSSxDQUFDLE9BQU8sT0FBTyxNQUFNLEtBQU0sOEJBQThCLE1BQU0sU0FBUyxNQUFPO0FBQ2pGLFlBQUksWUFBYSxnQkFBZSxPQUFPLFFBQVEsRUFBRSxPQUFPLE1BQU0sY0FBYyxLQUFLLENBQUM7QUFBQSxZQUM3RSxPQUFNLE9BQU87QUFBQSxNQUNwQjtBQUNBLFVBQUksdUJBQXVCLFdBQVcsT0FBTyxTQUFTLE9BQU8sS0FBSyxNQUFNLFdBQVcsUUFBUSxPQUFPO0FBQ2hHLHVCQUFlLE9BQU8sVUFBVSxFQUFFLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFBQSxNQUMxRDtBQUNBLFVBQUk7QUFDRixZQUFJLFdBQVcsT0FBTyxTQUFTLGFBQWEsS0FBSyxRQUFRLGFBQWE7QUFDcEUsY0FBSSxZQUFhLGdCQUFlLE9BQU8sYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQUEsUUFFekUsV0FBVyxNQUFNLFVBQVcsT0FBTSxZQUFZO0FBQUEsTUFDaEQsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLFFBQVEscUJBQXFCLEtBQUs7QUFDdEMsVUFBSSxDQUFDLE9BQU8sT0FBTyxRQUFRLEdBQUc7QUFDNUIsY0FBTSxTQUFTLEtBQUssVUFBVSxPQUFPLFFBQVEsV0FBVyxPQUFPLEVBQUU7QUFBQSxNQUNuRTtBQUFFLGFBQU87QUFBQSxJQUNYO0FBSUEsYUFBUyxVQUFVLFdBQVcsWUFBWSxTQUFTLFdBQVc7QUFDNUQsYUFBTyxXQUFXLElBQUksS0FBSyxpQkFBaUIsSUFBSSxFQUFFLFVBQVUsY0FBYyxJQUFJO0FBQUEsSUFDaEYsR0FBRyxVQUFVO0FBQUE7QUFBQTs7O0FDdERiO0FBQUEsd0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLGNBQWM7QUFDbEIsUUFBSSx1QkFBdUI7QUFFM0IsSUFBQUEsUUFBTyxVQUFVLFNBQVUsR0FBRyxLQUFLLE9BQU8sU0FBUztBQUNqRCxVQUFJLENBQUMsUUFBUyxXQUFVLENBQUM7QUFDekIsVUFBSSxTQUFTLFFBQVE7QUFDckIsVUFBSSxPQUFPLFFBQVEsU0FBUyxTQUFZLFFBQVEsT0FBTztBQUN2RCxVQUFJLFdBQVcsS0FBSyxFQUFHLGFBQVksT0FBTyxNQUFNLE9BQU87QUFDdkQsVUFBSSxRQUFRLFFBQVE7QUFDbEIsWUFBSSxPQUFRLEdBQUUsR0FBRyxJQUFJO0FBQUEsWUFDaEIsc0JBQXFCLEtBQUssS0FBSztBQUFBLE1BQ3RDLE9BQU87QUFDTCxZQUFJO0FBQ0YsY0FBSSxDQUFDLFFBQVEsT0FBUSxRQUFPLEVBQUUsR0FBRztBQUFBLG1CQUN4QixFQUFFLEdBQUcsRUFBRyxVQUFTO0FBQUEsUUFDNUIsU0FBUyxPQUFPO0FBQUEsUUFBYztBQUM5QixZQUFJLE9BQVEsR0FBRSxHQUFHLElBQUk7QUFBQSxZQUNoQixzQkFBcUIsRUFBRSxHQUFHLEtBQUs7QUFBQSxVQUNsQztBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osY0FBYyxDQUFDLFFBQVE7QUFBQSxVQUN2QixVQUFVLENBQUMsUUFBUTtBQUFBLFFBQ3JCLENBQUM7QUFBQSxNQUNIO0FBQUUsYUFBTztBQUFBLElBQ1g7QUFBQTtBQUFBOzs7QUMzQkE7QUFBQSw4RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxrQkFBa0I7QUFFdEIsUUFBSSxnQkFBZ0IsZ0JBQWdCLGFBQWE7QUFDakQsUUFBSSxPQUFPLENBQUM7QUFFWixTQUFLLGFBQWEsSUFBSTtBQUV0QixJQUFBQSxRQUFPLFVBQVUsT0FBTyxJQUFJLE1BQU07QUFBQTtBQUFBOzs7QUNSbEM7QUFBQSxvRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksV0FBVyxZQUFZLENBQUMsRUFBRSxRQUFRO0FBQ3RDLFFBQUksY0FBYyxZQUFZLEdBQUcsS0FBSztBQUV0QyxJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sWUFBWSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUU7QUFBQSxJQUN4QztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsZ0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksd0JBQXdCO0FBQzVCLFFBQUksYUFBYTtBQUNqQixRQUFJLGFBQWE7QUFDakIsUUFBSSxrQkFBa0I7QUFFdEIsUUFBSSxnQkFBZ0IsZ0JBQWdCLGFBQWE7QUFDakQsUUFBSSxVQUFVO0FBR2QsUUFBSSxvQkFBb0IsV0FBVywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFXLEVBQUUsQ0FBQyxNQUFNO0FBRzVFLFFBQUksU0FBUyxTQUFVLElBQUksS0FBSztBQUM5QixVQUFJO0FBQ0YsZUFBTyxHQUFHLEdBQUc7QUFBQSxNQUNmLFNBQVMsT0FBTztBQUFBLE1BQWM7QUFBQSxJQUNoQztBQUdBLElBQUFBLFFBQU8sVUFBVSx3QkFBd0IsYUFBYSxTQUFVLElBQUk7QUFDbEUsVUFBSSxHQUFHLEtBQUs7QUFDWixhQUFPLE9BQU8sU0FBWSxjQUFjLE9BQU8sT0FBTyxTQUVsRCxRQUFRLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxHQUFHLGFBQWEsTUFBTSxXQUFXLE1BRXBFLG9CQUFvQixXQUFXLENBQUMsS0FFL0IsU0FBUyxXQUFXLENBQUMsT0FBTyxZQUFZLFdBQVcsRUFBRSxNQUFNLElBQUksY0FBYztBQUFBLElBQ3BGO0FBQUE7QUFBQTs7O0FDN0JBO0FBQUEsa0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksVUFBVTtBQUVkLFFBQUksVUFBVTtBQUVkLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxRQUFRLFFBQVEsTUFBTSxTQUFVLE9BQU0sSUFBSSxVQUFVLDJDQUEyQztBQUNuRyxhQUFPLFFBQVEsUUFBUTtBQUFBLElBQ3pCO0FBQUE7QUFBQTs7O0FDUkE7QUFBQSxrR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBRWpCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsVUFBVTtBQUMzQyxVQUFJLFNBQVMsU0FBVSxPQUFNLElBQUksV0FBVyxzQkFBc0I7QUFDbEUsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNOQTtBQUFBO0FBQUE7QUFDQSxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXO0FBQ2YsUUFBSSwwQkFBMEI7QUFFOUIsUUFBSSxtQkFBbUI7QUFDdkIsUUFBSSwyQkFBMkIsaUJBQWlCO0FBQ2hELFFBQUksU0FBUyxZQUFZLHlCQUF5QixNQUFNO0FBQ3hELFFBQUksVUFBVSxZQUFZLHlCQUF5QixRQUFRLENBQUM7QUFDNUQsUUFBSSxVQUFVLFlBQVkseUJBQXlCLE9BQU87QUFDMUQsUUFBSSxPQUFPLFlBQVksQ0FBQyxFQUFFLElBQUk7QUFDOUIsUUFBSSxTQUFTLElBQUksaUJBQWlCLGFBQWE7QUFFL0MsV0FBTyxRQUFRLEVBQUUsS0FBSyxDQUFDO0FBR3ZCLFdBQU8sUUFBUSxFQUFFLEtBQUssTUFBUztBQUUvQixRQUFJLFNBQVMsT0FBTyxPQUFPO0FBQ3pCLG9CQUFjLDBCQUEwQixVQUFVLFNBQVUsTUFBb0I7QUFDOUUsWUFBSSxTQUFTLFVBQVU7QUFDdkIsWUFBSSxTQUFTLFNBQVMsSUFBSSxTQUFZLFVBQVUsQ0FBQztBQUNqRCxZQUFJLFVBQVUsV0FBVyxPQUFXLFFBQU8sUUFBUSxNQUFNLElBQUk7QUFDN0QsWUFBSSxVQUFVLENBQUM7QUFDZixnQkFBUSxNQUFNLFNBQVUsR0FBRyxHQUFHO0FBQzVCLGVBQUssU0FBUyxFQUFFLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUFBLFFBQ3BDLENBQUM7QUFDRCxnQ0FBd0IsUUFBUSxDQUFDO0FBQ2pDLFlBQUksTUFBTSxTQUFTLElBQUk7QUFDdkIsWUFBSSxRQUFRLFNBQVMsTUFBTTtBQUMzQixZQUFJLFFBQVE7QUFDWixZQUFJLFNBQVM7QUFDYixZQUFJLFFBQVE7QUFDWixZQUFJLGdCQUFnQixRQUFRO0FBQzVCLFlBQUk7QUFDSixlQUFPLFFBQVEsZUFBZTtBQUM1QixrQkFBUSxRQUFRLE9BQU87QUFDdkIsY0FBSSxTQUFTLE1BQU0sUUFBUSxLQUFLO0FBQzlCLG9CQUFRO0FBQ1Isb0JBQVEsTUFBTSxNQUFNLEdBQUc7QUFBQSxVQUN6QixNQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU8sU0FBUyxlQUFlO0FBQzdCLGtCQUFRLFFBQVEsUUFBUTtBQUN4QixjQUFJLEVBQUUsTUFBTSxRQUFRLE9BQU8sTUFBTSxVQUFVLE9BQVEsUUFBTyxNQUFNLE1BQU0sS0FBSyxNQUFNLEtBQUs7QUFBQSxRQUN4RjtBQUFBLE1BQ0YsR0FBRyxFQUFFLFlBQVksTUFBTSxRQUFRLEtBQUssQ0FBQztBQUFBLElBQ3ZDO0FBQUE7QUFBQTs7O0FDaERBO0FBQUE7QUFBQTtBQUNBLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksY0FBYztBQUNsQixRQUFJLFdBQVc7QUFDZixRQUFJLDBCQUEwQjtBQUU5QixRQUFJLG1CQUFtQjtBQUN2QixRQUFJLDJCQUEyQixpQkFBaUI7QUFDaEQsUUFBSSxTQUFTLFlBQVkseUJBQXlCLE1BQU07QUFDeEQsUUFBSSxPQUFPLFlBQVkseUJBQXlCLEdBQUc7QUFDbkQsUUFBSSxTQUFTLElBQUksaUJBQWlCLEtBQUs7QUFJdkMsUUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxNQUFTLEdBQUc7QUFDckQsb0JBQWMsMEJBQTBCLE9BQU8sU0FBUyxJQUFJLE1BQW9CO0FBQzlFLFlBQUksU0FBUyxVQUFVO0FBQ3ZCLFlBQUksU0FBUyxTQUFTLElBQUksU0FBWSxVQUFVLENBQUM7QUFDakQsWUFBSSxVQUFVLFdBQVcsT0FBVyxRQUFPLEtBQUssTUFBTSxJQUFJO0FBQzFELFlBQUksU0FBUyxPQUFPLE1BQU0sSUFBSTtBQUM5QixnQ0FBd0IsUUFBUSxDQUFDO0FBQ2pDLFlBQUksUUFBUSxTQUFTLE1BQU07QUFDM0IsWUFBSSxRQUFRO0FBQ1osZUFBTyxRQUFRLE9BQU8sUUFBUTtBQUM1QixjQUFJLE9BQU8sT0FBTyxNQUFNLE1BQU8sUUFBTztBQUFBLFFBQ3hDO0FBQUUsZUFBTztBQUFBLE1BQ1gsR0FBRyxFQUFFLFlBQVksTUFBTSxRQUFRLEtBQUssQ0FBQztBQUFBLElBQ3ZDO0FBQUE7QUFBQTs7O0FDM0JBO0FBQUEsaUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGlCQUFpQjtBQUVyQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLE1BQU0sWUFBWTtBQUNuRCxVQUFJLFdBQVcsSUFBSyxhQUFZLFdBQVcsS0FBSyxNQUFNLEVBQUUsUUFBUSxLQUFLLENBQUM7QUFDdEUsVUFBSSxXQUFXLElBQUssYUFBWSxXQUFXLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDO0FBQ3RFLGFBQU8sZUFBZSxFQUFFLFFBQVEsTUFBTSxVQUFVO0FBQUEsSUFDbEQ7QUFBQTtBQUFBOzs7QUNSQTtBQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxjQUFjO0FBQ2xCLFFBQUksd0JBQXdCO0FBRTVCLFFBQUksMkJBQTJCLGdCQUFnQjtBQUMvQyxRQUFJLFVBQVUsWUFBWSx5QkFBeUIsT0FBTztBQUkxRCxRQUFJLGVBQWUsRUFBRSxVQUFVLDJCQUEyQjtBQUN4RCw0QkFBc0IsMEJBQTBCLFFBQVE7QUFBQSxRQUN0RCxLQUFLLFNBQVMsT0FBTztBQUNuQixjQUFJLFFBQVE7QUFDWixrQkFBUSxNQUFNLFdBQVk7QUFBRTtBQUFBLFVBQVMsQ0FBQztBQUN0QyxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBLGNBQWM7QUFBQSxRQUNkLFlBQVk7QUFBQSxNQUNkLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BCQSxJQUFBQyxzQkFBQSxDQUFBO0FBQUFDLFNBQUFELHFCQUFBO0VBQUFFLFVBQUFBLE1BQUFBO0VBQUFDLGlCQUFBQSxNQUFBQTtFQUFBQyxXQUFBQSxNQUFBQTtBQUFBLENBQUE7QUFBQUMsT0FBQUMsVUFBQUMsYUFBQVAsbUJBQUE7O0FDQUEsU0FBU1EsYUFBc0I7QUFDOUIsU0FBT0MsR0FBR0MsT0FBT0MsT0FBTyxVQUFVO0FBQ25DO0FBS0EsU0FBU0MsaUJBQTBCO0FBQ2xDLE1BQUk7QUFDSCxXQUFPLElBQUlDLElBQUlDLFNBQVNDLFFBQVEsRUFBRUMsYUFBYUMsU0FBU0Q7RUFDekQsUUFBUTtBQUVQLFdBQU87RUFDUjtBQUNEO0FBRUEsU0FBU0UsZ0JBQXlCO0FBQ2pDLFNBQU9ULEdBQUdDLE9BQU9TLElBQUksVUFBVSxNQUFNO0FBQ3RDO0FBTUEsU0FBU0MsZ0JBQXlCO0FBQ2pDLFNBQU9YLEdBQUdDLE9BQU9TLElBQUksZ0JBQWdCLEVBQUVFLFdBQVcsSUFBSTtBQUN2RDtBQUVBLFNBQVNDLGlCQUEwQjtBQUNsQyxTQUFPYixHQUFHQyxPQUFPUyxJQUFJLHNCQUFzQixNQUFNLGFBQWFWLEdBQUdDLE9BQU9TLElBQUksb0JBQW9CLE1BQU07QUFDdkc7O0FDNUJBLElBQU1JLG9CQUFvQjtBQUMxQixJQUFNQyxhQUFhO0FBQ25CLElBQU1DLGlCQUFpQixDQUFDLFNBQVMsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPO0FBQzVFLElBQU1DLFdBQVcsQ0FBQyxNQUFNLFdBQVcsV0FBVyxHQUFHRCxjQUFjO0FBQy9ELElBQU1FLGVBQWUsQ0FDcEIsY0FDQSxjQUNBLGNBQ0EsY0FDQSxjQUNBLGNBQ0EsR0FBR0QsUUFBQTtBQUdKLElBQU1FLGNBQTRDO0VBQ2pELGNBQWM7RUFDZCxjQUFjO0VBQ2QsY0FBYztFQUNkLGNBQWM7RUFDZCxjQUFjO0VBQ2QsY0FBYztBQUNmO0FBTUEsU0FBU0MsVUFBVUMsS0FBNkI7QUFDL0MsU0FBUUosU0FBbUNLLFNBQVNELEdBQUc7QUFDeEQ7QUFFQSxTQUFTRSxlQUFlRixLQUFrQztBQUN6RCxTQUFRTCxlQUF5Q00sU0FBU0QsR0FBRztBQUM5RDtBQUVBLFNBQVNHLGFBQWFILEtBQWdDO0FBQ3JELFNBQVFILGFBQXVDSSxTQUFTRCxHQUFHO0FBQzVEO0FBT0EsU0FBU0ksaUJBQWlCQyxZQUFpQztBQUFBLE1BQUFDO0FBQzFELFVBQUFBLHdCQUFRUixZQUFZTyxVQUFVLE9BQUEsUUFBQUMsMEJBQUEsU0FBQUEsd0JBQUtEO0FBQ3BDO0FBT0EsU0FBU0UsaUJBQWlDO0FBQ3pDLFFBQU1DLFNBQVM3QixHQUFHQyxPQUFPUyxJQUFJLGVBQWU7QUFDNUMsU0FBT21CLFdBQVcsUUFBUUwsYUFBYUssTUFBTSxJQUFJSixpQkFBaUJJLE1BQU0sSUFBSTtBQUM3RTtBQU9BLFNBQVNDLG9CQUFvQztBQUM1QyxNQUFJL0IsV0FBVyxHQUFHO0FBQ2pCLFVBQU04QixTQUFTN0IsR0FBRytCLEtBQUtDLFFBQVF0QixJQUFJLFNBQVM7QUFDNUMsV0FBT2MsYUFBYUssTUFBTSxJQUFJSixpQkFBaUJJLE1BQU0sSUFBSTtFQUMxRDtBQUNBLFNBQU87QUFDUjtBQUVBLFNBQVNJLGtCQUFrQztBQUMxQyxRQUFNSixTQUFTSyxhQUFhQyxRQUFRckIsaUJBQWlCO0FBQ3JELE1BQUllLFdBQVcsUUFBUSxDQUFDTCxhQUFhSyxNQUFNLEdBQUc7QUFDN0MsV0FBTztFQUNSO0FBQ0EsU0FBT0osaUJBQWlCSSxNQUFNO0FBQy9CO0FBT0EsU0FBU08sb0JBQW9DO0FBQUEsTUFBQUM7QUFDNUMsVUFBQUEsd0JBQ0NDLFVBQVVDLFVBQ1JDLElBQUtDLFVBQVM7QUFDZCxXQUFPQSxLQUFLQyxZQUFZO0VBQ3pCLENBQUMsRUFDQUMsT0FBT25CLFlBQVksRUFDbkJnQixJQUFJZixnQkFBZ0IsRUFDcEJtQixLQUFLeEIsU0FBUyxPQUFBLFFBQUFpQiwwQkFBQSxTQUFBQSx3QkFBSztBQUV2QjtBQWNBLFNBQVNRLHNCQUFzQztBQUFBLE1BQUFDO0FBQzlDLFVBQUFBLHFCQUFPaEIsa0JBQWtCLE9BQUEsUUFBQWdCLHVCQUFBLFNBQUFBLHFCQUFLVixrQkFBa0I7QUFDakQ7QUFTQSxTQUFTVyw0QkFBaUQ7QUFDekQsU0FBTyxDQUFDakIsa0JBQWtCLEdBQUdNLGtCQUFrQixHQUFHSCxnQkFBZ0IsQ0FBQyxFQUNqRU8sSUFBS1EsYUFBWTtBQUNqQixXQUFPQSxZQUFZLFFBQVF6QixlQUFleUIsT0FBTyxJQUFJQSxVQUFVO0VBQ2hFLENBQUMsRUFDQUMsT0FBTyxDQUFDQyxNQUFNQyxTQUFTO0FBQ3ZCLFdBQU9ELFNBQUEsUUFBQUEsU0FBQSxTQUFBQSxPQUFRQztFQUNoQixDQUFDO0FBQ0g7QUFJQSxTQUFTekQsZ0JBQWdCc0QsU0FBd0I7QUFDaERkLGVBQWFrQixRQUFRdEMsbUJBQW1Ca0MsT0FBTztBQUNoRDtBQUlBLFNBQVNyRCxZQUFrQjtBQUMxQnVDLGVBQWFrQixRQUFRckMsWUFBWSxFQUFFO0FBQ3BDO0FBRUEsU0FBU3NDLGFBQXNCO0FBQzlCLFNBQU9uQixhQUFhQyxRQUFRcEIsVUFBVSxNQUFNO0FBQzdDOztBQy9JQSxJQUFNdUMsaUJBQWlCO0FBQ3ZCLElBQU1DLG9CQUFvQjtBQUMxQixJQUFNQyxnQkFBZ0I7QUFFdEIsU0FBU0MsdUJBQXVCQyxNQUF1QjtBQUN0RCxNQUFJO0FBRUgsUUFBSUEsU0FBUyxJQUFJO0FBQ2hCLGFBQU87SUFDUjtBQUNBLFVBQU1DLE1BQU0sSUFBSXZELElBQUlzRCxNQUFNbEQsU0FBU29ELE1BQU07QUFFekMsUUFBSUwsa0JBQWtCTSxLQUFLRixJQUFJRyxRQUFRLEdBQUc7QUFDekMsYUFBTztJQUNSO0FBQ0EsUUFBSUgsSUFBSUksYUFBYUMsSUFBSSxTQUFTLEdBQUc7QUFDcEMsYUFBTztJQUNSO0FBR0EsUUFBSUwsSUFBSU0sU0FBU3pELFNBQVN5RCxNQUFNO0FBQy9CLGFBQU87SUFDUjtBQUVBLFdBQU87RUFDUixRQUFRO0FBQ1AsV0FBTztFQUNSO0FBQ0Q7QUFFQSxTQUFTQyxZQUFZUixNQUFjVixTQUEwQjtBQUM1RCxNQUFJO0FBQ0gsVUFBTW1CLDZCQUE2QnRCLG9CQUFvQjtBQUN2RCxVQUFNYyxNQUFNLElBQUl2RCxJQUFJc0QsTUFBTWxELFNBQVNvRCxNQUFNO0FBQ3pDLFVBQU07TUFBQ0U7TUFBVUM7SUFBWSxJQUFJSjtBQUVqQyxRQUFJTCxlQUFlTyxLQUFLQyxRQUFRLEdBQUc7QUFDbENILFVBQUlHLFdBQUEsSUFBQU0sT0FBZXBCLFNBQU8sR0FBQSxFQUFBb0IsT0FBSVQsSUFBSUcsU0FBU08sUUFBUWYsZ0JBQWdCLEVBQUUsQ0FBQztBQUN0RVMsbUJBQWFPLE9BQU8sU0FBUztJQUM5QixPQUFPO0FBQ05QLG1CQUFhUSxJQUFJLFdBQVd2QixPQUFPO0lBQ3BDO0FBRUEsUUFBSUEsWUFBWW1CLDRCQUE0QjtBQUszQ1IsVUFBSUcsV0FBV0gsSUFBSUcsU0FBU08sUUFBUWYsZ0JBQWdCLFFBQVE7QUFDNURLLFVBQUlJLGFBQWFPLE9BQU8sU0FBUztJQUNsQztBQUVBLFVBQU16QyxTQUFTOEIsSUFBSWEsU0FBUztBQUU1QixXQUFPM0M7RUFDUixRQUFRO0FBQ1AsV0FBTzZCO0VBQ1I7QUFDRDtBQVVBLFNBQVNqRSxTQUFTZ0Ysa0JBQTJCekMsVUFBOEIsQ0FBQyxHQUFTO0FBQUEsTUFBQTBDO0FBQ3BGLFFBQU1DLFlBQUFELGdCQUFXMUMsUUFBUTBCLFVBQUEsUUFBQWdCLGtCQUFBLFNBQUFBLGdCQUFRbEUsU0FBU29FO0FBQzFDLFFBQU1DLFVBQVVYLFlBQVlTLFVBQVVGLGdCQUFnQjtBQUl0RCxNQUFJekMsUUFBUThDLFVBQVVELFlBQVlyRSxTQUFTb0UsTUFBTTtBQUVoRHBFLGFBQVM2RCxRQUFRUSxPQUFPO0VBQ3pCO0FBQ0Q7QUFFQSxTQUFTRSxjQUFjTixrQkFBMkJPLGFBQTZCO0FBQzlFLE1BQUlBLGdCQUFnQlAsa0JBQWtCO0FBQ3JDO0VBQ0Q7QUFFQSxRQUFNUSxvQkFBbUNqRixHQUFHQyxPQUFPUyxJQUFJLGtCQUFrQjtBQUN6RSxNQUFJdUUsc0JBQXNCLE1BQU07QUFDL0J4RixhQUFTZ0YsZ0JBQWdCO0FBQ3pCO0VBQ0Q7QUFHQSxRQUFNUyxpQkFBaUIsSUFBSTlFLElBQUlJLFNBQVNvRSxJQUFJO0FBQzVDTSxpQkFBZXBCLFdBQUEsU0FBQU0sT0FBb0JhLGlCQUFpQjtBQUNwRHhGLFdBQVNnRixrQkFBa0I7SUFBQ2YsTUFBTXdCLGVBQWVWLFNBQVM7RUFBQyxDQUFDO0FBQzdEO0FBRUEsU0FBU1csZUFBZW5DLFNBQXdCO0FBQy9DLFdBQUFvQyxLQUFBLEdBQUFDLE9BQW1CLENBQUMsU0FBUyxZQUFZLFdBQVcsR0FBQUQsS0FBQUMsS0FBQUMsUUFBQUYsTUFBRztBQUF2RCxVQUFXRyxPQUFBRixLQUFBRCxFQUFBO0FBQ1YvRSxhQUFTbUYsaUJBQWlCRCxNQUFPRSxRQUFPO0FBQ3ZDLFlBQU07UUFBQ0M7TUFBTSxJQUFJRDtBQUVqQixVQUFJQyxrQkFBa0JDLFNBQVM7QUFHOUIsY0FBTUMsU0FBbUNGLE9BQU9HLFFBQVEsMEJBQTBCO0FBRWxGLFlBQUlELFdBQVcsTUFBTTtBQUNwQixnQkFBTWpCLFdBQVdpQixPQUFPaEI7QUFDeEIsY0FBSSxDQUFDbkIsdUJBQXVCa0IsUUFBUSxHQUFHO0FBQ3RDO1VBQ0Q7QUFFQSxnQkFBTUUsVUFBVVgsWUFBWVMsVUFBVTNCLE9BQU87QUFDN0MsY0FBSTZCLFlBQVlGLFVBQVU7QUFDekI7VUFDRDtBQUlBLGNBQUltQixPQUFPQyxhQUFhTixjQUFjTSxhQUFhTixHQUFHTyxjQUFjO0FBQUEsZ0JBQUFDLGFBQUFDLDJCQUVoRFQsR0FBR08sYUFBYUcsS0FBQSxHQUFBQztBQUFBLGdCQUFBO0FBQW5DLG1CQUFBSCxXQUFBSSxFQUFBLEdBQUEsRUFBQUQsU0FBQUgsV0FBQUssRUFBQSxHQUFBQyxRQUEwQztBQUFBLHNCQUEvQkMsT0FBQUosT0FBQUs7QUFDVmhCLG1CQUFHTyxhQUFhVSxRQUFRRixNQUFNM0IsT0FBTztjQUN0QztZQUFBLFNBQUE4QixLQUFBO0FBQUFWLHlCQUFBVyxFQUFBRCxHQUFBO1lBQUEsVUFBQTtBQUFBVix5QkFBQVksRUFBQTtZQUFBO1VBQ0QsT0FBTztBQUVOLGdCQUFJakIsT0FBT2tCLFFBQVEsU0FBUyxNQUFNLFFBQVc7QUFDNUNsQixxQkFBT2tCLFFBQVEsU0FBUyxJQUFJO1lBQzdCO0FBRUFsQixtQkFBT2hCLE9BQU9DO0FBSWQscUJBQUFrQyxNQUFBLEdBQUFDLFFBQXdCLENBQUMsYUFBYSxjQUFjLE9BQU8sR0FBQUQsTUFBQUMsTUFBQTFCLFFBQUF5QixPQUFHO0FBQTlELG9CQUFXRSxZQUFBRCxNQUFBRCxHQUFBO0FBQ1ZuQixxQkFBT0osaUJBQ055QixXQUNBLE1BQU07QUFDTCxvQkFBSXJCLE9BQU9rQixRQUFRLFNBQVMsTUFBTSxRQUFXO0FBQzVDbEIseUJBQU9oQixPQUFPRDtBQUNkLHlCQUFPaUIsT0FBT2tCLFFBQVEsU0FBUztnQkFDaEM7Y0FDRCxHQUNBO2dCQUFDSSxNQUFNO2NBQUksQ0FDWjtZQUNEO1VBQ0Q7UUFDRDtNQUNEO0lBQ0QsQ0FBQztFQUNGO0FBQ0Q7QUFFQSxTQUFTQyxvQkFBMEI7QUFDbEMsUUFBTUMsYUFBYTtBQUNuQixPQUFLcEgsR0FBR3FILE9BQU9DLE1BQU1GLFlBQWFHLGNBQVk7QUFDN0NBLGFBQVFILFVBQVU7RUFDbkIsQ0FBQztBQUNGO0FBT0EsU0FBU0ksa0JBQXdCO0FBQ2hDLFFBQU14RSxVQUFVLElBQUk1QyxJQUFJSSxTQUFTb0UsSUFBSSxFQUFFYixhQUFhckQsSUFBSThDLGFBQWE7QUFDckUsTUFBSVIsWUFBWSxRQUFRekIsZUFBZXlCLE9BQU8sR0FBRztBQUNoRHRELG9CQUFnQnNELE9BQU87RUFDeEI7QUFDRDs7QUhuS0EsU0FBU3lFLE9BQU87QUFFZixNQUFJcEUsV0FBVyxHQUFHO0FBQ2pCO0VBQ0Q7QUFFQSxNQUFJdEQsV0FBVyxHQUFHO0FBQ2pCO0VBQ0Q7QUFHQSxNQUFJLENBQUNZLGNBQWMsR0FBRztBQUNyQjtFQUNEO0FBRUE2RyxrQkFBZ0I7QUFFaEIsUUFBTS9DLG1CQUFtQjFCLDBCQUEwQjtBQUNuRCxNQUFJMEIscUJBQXFCLE1BQU07QUFJOUIvRSxvQkFBZ0IrRSxnQkFBZ0I7RUFDakM7QUFFQSxRQUFNTyxjQUFjcEQsZUFBZTtBQUduQyxNQUFJb0QsZ0JBQWdCLFFBQVEsQ0FBQ25FLGVBQWUsR0FBRztBQUc5QyxRQUFJNEQscUJBQXFCLE1BQU07QUFDOUJVLHFCQUFlVixnQkFBZ0I7SUFDaEM7QUFDQTtFQUNEO0FBR0EsTUFBSUEscUJBQXFCLE1BQU07QUFDOUIsUUFBSWhFLGNBQWMsR0FBRztBQUNwQjBHLHdCQUFrQjtBQUNsQjtJQUNEO0FBRUE7RUFDRDtBQUtBLE1BQUloSCxlQUFlLEtBQUssQ0FBQ3NELHVCQUF1QmpELFNBQVNvRSxJQUFJLEdBQUc7QUFDL0RPLG1CQUFlVixnQkFBZ0I7QUFDL0I7RUFDRDtBQUVBTSxnQkFBY04sa0JBQWtCTyxXQUFXO0FBQzNDRyxpQkFBZVYsZ0JBQWdCO0FBQ2hDO0FBRUFnRCxLQUFLOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJuYXZpZ2F0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVmFyaWFudEFsbHlfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJyZWRpcmVjdCIsICJzZXRMb2NhbFZhcmlhbnQiLCAic2V0T3B0T3V0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJpc0xvZ2dlZEluIiwgIm13IiwgImNvbmZpZyIsICJleGlzdHMiLCAiaXNSZWZlcnJlclNlbGYiLCAiVVJMIiwgImRvY3VtZW50IiwgInJlZmVycmVyIiwgImhvc3RuYW1lIiwgImxvY2F0aW9uIiwgImlzVmlld2luZ1BhZ2UiLCAiZ2V0IiwgImlzTGFuZ0NoaW5lc2UiLCAic3RhcnRzV2l0aCIsICJpc1dpa2l0ZXh0UGFnZSIsICJMT0NBTF9WQVJJQU5UX0tFWSIsICJPUFRPVVRfS0VZIiwgIlZBTElEX1ZBUklBTlRTIiwgIlZBUklBTlRTIiwgIkVYVF9WQVJJQU5UUyIsICJFWFRfTUFQUElORyIsICJpc1ZhcmlhbnQiLCAic3RyIiwgImluY2x1ZGVzIiwgImlzVmFsaWRWYXJpYW50IiwgImlzRXh0VmFyaWFudCIsICJub3JtYWxpemVWYXJpYW50IiwgImV4dFZhcmlhbnQiLCAiX0VYVF9NQVBQSU5HJGV4dFZhcmlhIiwgImdldFBhZ2VWYXJpYW50IiwgInJlc3VsdCIsICJnZXRBY2NvdW50VmFyaWFudCIsICJ1c2VyIiwgIm9wdGlvbnMiLCAiZ2V0TG9jYWxWYXJpYW50IiwgImxvY2FsU3RvcmFnZSIsICJnZXRJdGVtIiwgImdldEJyb3dzZXJWYXJpYW50IiwgIl9uYXZpZ2F0b3IkbGFuZ3VhZ2VzJCIsICJuYXZpZ2F0b3IiLCAibGFuZ3VhZ2VzIiwgIm1hcCIsICJsYW5nIiwgInRvTG93ZXJDYXNlIiwgImZpbHRlciIsICJmaW5kIiwgImdldE1lZGlhV2lraVZhcmlhbnQiLCAiX2dldEFjY291bnRWYXJpYW50IiwgImNhbGN1bGF0ZVByZWZlcnJlZFZhcmlhbnQiLCAidmFyaWFudCIsICJyZWR1Y2UiLCAicHJldiIsICJjdXJyIiwgInNldEl0ZW0iLCAiaXNPcHRPdXRlZCIsICJSRUdFWF9XSUtJX1VSTCIsICJSRUdFWF9WQVJJQU5UX1VSTCIsICJWQVJJQU5UX1BBUkFNIiwgImlzRWxpZ2libGVGb3JSZXdyaXRpbmciLCAibGluayIsICJ1cmwiLCAib3JpZ2luIiwgInRlc3QiLCAicGF0aG5hbWUiLCAic2VhcmNoUGFyYW1zIiwgImhhcyIsICJob3N0IiwgInJld3JpdGVMaW5rIiwgIm5vcm1hbGl6YXRpb25UYXJnZXRWYXJpYW50IiwgImNvbmNhdCIsICJyZXBsYWNlIiwgImRlbGV0ZSIsICJzZXQiLCAidG9TdHJpbmciLCAicHJlZmVycmVkVmFyaWFudCIsICJfb3B0aW9ucyRsaW5rIiwgIm9yaWdMaW5rIiwgImhyZWYiLCAibmV3TGluayIsICJmb3JjZWQiLCAiY2hlY2tUaGlzUGFnZSIsICJwYWdlVmFyaWFudCIsICJyZWRpcmVjdGlvbk9yaWdpbiIsICJyZWRpcmVjdGlvblVSTCIsICJyZXdyaXRlQW5jaG9ycyIsICJfaSIsICJfYXJyIiwgImxlbmd0aCIsICJuYW1lIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAiZXYiLCAidGFyZ2V0IiwgIkVsZW1lbnQiLCAiYW5jaG9yIiwgImNsb3Nlc3QiLCAid2luZG93IiwgIkRyYWdFdmVudCIsICJkYXRhVHJhbnNmZXIiLCAiX2l0ZXJhdG9yMiIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJ0eXBlcyIsICJfc3RlcDIiLCAicyIsICJuIiwgImRvbmUiLCAidHlwZSIsICJ2YWx1ZSIsICJzZXREYXRhIiwgImVyciIsICJlIiwgImYiLCAiZGF0YXNldCIsICJfaTIiLCAiX2FycjIiLCAiaW5uZXJOYW1lIiwgIm9uY2UiLCAic2hvd1ZhcmlhbnRQcm9tcHQiLCAibW9kdWxlTmFtZSIsICJsb2FkZXIiLCAidXNpbmciLCAicmVxdWlyZTIiLCAiYXBwbHlVUkxWYXJpYW50IiwgIm1haW4iXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5kZWxldGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmhhcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qcyIsICJzcmMvVmFyaWFudEFsbHkvVmFyaWFudEFsbHkudHMiLCAic3JjL1ZhcmlhbnRBbGx5L21vZHVsZXMvdXRpbHMudHMiLCAic3JjL1ZhcmlhbnRBbGx5L21vZHVsZXMvbW9kZWwudHMiLCAic3JjL1ZhcmlhbnRBbGx5L21vZHVsZXMvY29udHJvbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciAkVVJMU2VhcmNoUGFyYW1zID0gVVJMU2VhcmNoUGFyYW1zO1xudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9ICRVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xudmFyIGFwcGVuZCA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5hcHBlbmQpO1xudmFyICRkZWxldGUgPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGVbJ2RlbGV0ZSddKTtcbnZhciBmb3JFYWNoID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmZvckVhY2gpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBwYXJhbXMgPSBuZXcgJFVSTFNlYXJjaFBhcmFtcygnYT0xJmE9MiZiPTMnKTtcblxucGFyYW1zWydkZWxldGUnXSgnYScsIDEpO1xuLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG5wYXJhbXNbJ2RlbGV0ZSddKCdiJywgdW5kZWZpbmVkKTtcblxuaWYgKHBhcmFtcyArICcnICE9PSAnYT0yJykge1xuICBkZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ2RlbGV0ZScsIGZ1bmN0aW9uIChuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBpZiAobGVuZ3RoICYmICR2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJGRlbGV0ZSh0aGlzLCBuYW1lKTtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIGZvckVhY2godGhpcywgZnVuY3Rpb24gKHYsIGspIHsgLy8gYWxzbyB2YWxpZGF0ZXMgYHRoaXNgXG4gICAgICBwdXNoKGVudHJpZXMsIHsga2V5OiBrLCB2YWx1ZTogdiB9KTtcbiAgICB9KTtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChsZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSB0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgdmFsdWUgPSB0b1N0cmluZygkdmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGRpbmRleCA9IDA7XG4gICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgdmFyIGVudHJpZXNMZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllc0xlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgaWYgKGZvdW5kIHx8IGVudHJ5LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgJGRlbGV0ZSh0aGlzLCBlbnRyeS5rZXkpO1xuICAgICAgfSBlbHNlIGRpbmRleCsrO1xuICAgIH1cbiAgICB3aGlsZSAoZGluZGV4IDwgZW50cmllc0xlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2RpbmRleCsrXTtcbiAgICAgIGlmICghKGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlID09PSB2YWx1ZSkpIGFwcGVuZCh0aGlzLCBlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTtcbiAgICB9XG4gIH0sIHsgZW51bWVyYWJsZTogdHJ1ZSwgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyICRVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXM7XG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gJFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgZ2V0QWxsID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmdldEFsbCk7XG52YXIgJGhhcyA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5oYXMpO1xudmFyIHBhcmFtcyA9IG5ldyAkVVJMU2VhcmNoUGFyYW1zKCdhPTEnKTtcblxuLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG5pZiAocGFyYW1zLmhhcygnYScsIDIpIHx8ICFwYXJhbXMuaGFzKCdhJywgdW5kZWZpbmVkKSkge1xuICBkZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ2hhcycsIGZ1bmN0aW9uIGhhcyhuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBpZiAobGVuZ3RoICYmICR2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJGhhcyh0aGlzLCBuYW1lKTtcbiAgICB2YXIgdmFsdWVzID0gZ2V0QWxsKHRoaXMsIG5hbWUpOyAvLyBhbHNvIHZhbGlkYXRlcyBgdGhpc2BcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChsZW5ndGgsIDEpO1xuICAgIHZhciB2YWx1ZSA9IHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBpZiAodmFsdWVzW2luZGV4KytdID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgfSByZXR1cm4gZmFsc2U7XG4gIH0sIHsgZW51bWVyYWJsZTogdHJ1ZSwgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZm9yRWFjaCk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNpemVgIGdldHRlclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy91cmwvcHVsbC83MzRcbmlmIChERVNDUklQVE9SUyAmJiAhKCdzaXplJyBpbiBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUpKSB7XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsICdzaXplJywge1xuICAgIGdldDogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICBmb3JFYWNoKHRoaXMsIGZ1bmN0aW9uICgpIHsgY291bnQrKzsgfSk7XG4gICAgICByZXR1cm4gY291bnQ7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9KTtcbn1cbiIsICJpbXBvcnQge1xuXHRjaGVja1RoaXNQYWdlLFxuXHRyZXdyaXRlQW5jaG9ycyxcblx0YXBwbHlVUkxWYXJpYW50LFxuXHRzaG93VmFyaWFudFByb21wdCxcblx0aXNFbGlnaWJsZUZvclJld3JpdGluZyxcbn0gZnJvbSAnLi9tb2R1bGVzL2NvbnRyb2xsZXInO1xuaW1wb3J0IHtjYWxjdWxhdGVQcmVmZXJyZWRWYXJpYW50LCBnZXRQYWdlVmFyaWFudCwgaXNPcHRPdXRlZCwgc2V0TG9jYWxWYXJpYW50fSBmcm9tICcuL21vZHVsZXMvbW9kZWwnO1xuaW1wb3J0IHtpc0xvZ2dlZEluLCBpc0xhbmdDaGluZXNlLCBpc1dpa2l0ZXh0UGFnZSwgaXNWaWV3aW5nUGFnZSwgaXNSZWZlcnJlclNlbGZ9IGZyb20gJy4vbW9kdWxlcy91dGlscyc7XG5cbmZ1bmN0aW9uIG1haW4oKSB7XG5cdC8vIE1hbnVhbGx5IG9wdCBvdXRlZCB1c2Vyc1xuXHRpZiAoaXNPcHRPdXRlZCgpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGlzTG9nZ2VkSW4oKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIE5vbi1DaGluZXNlIHBhZ2VzL3VzZXJzXG5cdGlmICghaXNMYW5nQ2hpbmVzZSgpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0YXBwbHlVUkxWYXJpYW50KCk7XG5cblx0Y29uc3QgcHJlZmVycmVkVmFyaWFudCA9IGNhbGN1bGF0ZVByZWZlcnJlZFZhcmlhbnQoKTtcblx0aWYgKHByZWZlcnJlZFZhcmlhbnQgIT09IG51bGwpIHtcblx0XHQvLyBPcHRpbWlzdGljYWxseSBzZXQgbG9jYWwgdmFyaWFudCB0byBiZSBlcXVhbCB0byBicm93c2VyIHZhcmlhbnRcblx0XHQvLyBJbiBjYXNlIHRoZSB1c2VyJ3MgYnJvd3NlciBsYW5ndWFnZSBiZWNvbWVzIGludmFsaWQgaW4gdGhlIGZ1dHVyZSxcblx0XHQvLyB0aGlzIHJlZHVjZXMgdGhlIHBvc3NpYmlsaXR5IHRvIHNob3cgcHJvbXB0IHRvIGRpc3J1cHQgdXNlcnMuXG5cdFx0c2V0TG9jYWxWYXJpYW50KHByZWZlcnJlZFZhcmlhbnQpO1xuXHR9XG5cblx0Y29uc3QgcGFnZVZhcmlhbnQgPSBnZXRQYWdlVmFyaWFudCgpO1xuXG5cdC8vIE5vbi1hcnRpY2xlIHBhZ2UgKEpTL0NTUyBwYWdlcywgU3BlY2lhbCBwYWdlcyBldGMuKVxuXHRpZiAocGFnZVZhcmlhbnQgPT09IG51bGwgfHwgIWlzV2lraXRleHRQYWdlKCkpIHtcblx0XHQvLyBTdWNoIHBhZ2UgY2FuJ3QgaGF2ZSB2YXJpYW50LCBidXQgcHJlZmVycmVkIHZhcmlhbnQgbWF5IGJlIGF2YWlsYWJsZVxuXHRcdC8vIFNvIHN0aWxsIHJld3JpdGUgbGlua3Ncblx0XHRpZiAocHJlZmVycmVkVmFyaWFudCAhPT0gbnVsbCkge1xuXHRcdFx0cmV3cml0ZUFuY2hvcnMocHJlZmVycmVkVmFyaWFudCk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFByZWZlcnJlZCB2YXJpYW50IHVuYXZhaWxhYmxlXG5cdGlmIChwcmVmZXJyZWRWYXJpYW50ID09PSBudWxsKSB7XG5cdFx0aWYgKGlzVmlld2luZ1BhZ2UoKSkge1xuXHRcdFx0c2hvd1ZhcmlhbnRQcm9tcHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBPbi1zaXRlIG5hdmlnYXRpb24gdG8gbGlua3MgaW5lbGlnaWJsZSBmb3Igd3JpdGluZ1xuXHQvLyBUaGUgZWxpZ2liaWxpdHkgY2hlY2sgaXMgcmVxdWlyZSBiZWNhdXNlIHVzZXIgbWF5IGNsaWNrIG9uIGEgbGluayB3aXRoIHZhcmlhbnQgaW50ZW50aW9uYWxseVxuXHQvLyBlLmcuIHZhcmlhbnQgZHJvcGRvd24gYW5kIHt7VmFyaWFudC1jbmhrdHdzZ319XG5cdGlmIChpc1JlZmVycmVyU2VsZigpICYmICFpc0VsaWdpYmxlRm9yUmV3cml0aW5nKGxvY2F0aW9uLmhyZWYpKSB7XG5cdFx0cmV3cml0ZUFuY2hvcnMocHJlZmVycmVkVmFyaWFudCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y2hlY2tUaGlzUGFnZShwcmVmZXJyZWRWYXJpYW50LCBwYWdlVmFyaWFudCk7XG5cdHJld3JpdGVBbmNob3JzKHByZWZlcnJlZFZhcmlhbnQpO1xufVxuXG5tYWluKCk7XG5cbi8vIEV4cG9zZSBmb3IgVmFyaWFudEFsbHlEaWFsb2cncyB1c2VcbmV4cG9ydCB7c2V0TG9jYWxWYXJpYW50LCBzZXRPcHRPdXR9IGZyb20gJy4vbW9kdWxlcy9tb2RlbCc7XG5leHBvcnQge3JlZGlyZWN0fSBmcm9tICcuL21vZHVsZXMvY29udHJvbGxlcic7XG4iLCAiZnVuY3Rpb24gaXNMb2dnZWRJbigpOiBib29sZWFuIHtcblx0cmV0dXJuIG13LmNvbmZpZy5leGlzdHMoJ3dnVXNlcklkJyk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciByZWZlcnJlciBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgZG9tYWluLlxuICovXG5mdW5jdGlvbiBpc1JlZmVycmVyU2VsZigpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IFVSTChkb2N1bWVudC5yZWZlcnJlcikuaG9zdG5hbWUgPT09IGxvY2F0aW9uLmhvc3RuYW1lO1xuXHR9IGNhdGNoIHtcblx0XHQvLyBJbnZhbGlkIFVSTFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5mdW5jdGlvbiBpc1ZpZXdpbmdQYWdlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbXcuY29uZmlnLmdldCgnd2dBY3Rpb24nKSA9PT0gJ3ZpZXcnO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKHNldCBpbiB1c2VyIHByZWZlcmVuY2Ugb3IgYnkgP3VzZWxhbmc9eHh4KVxuICogaXMgQ2hpbmVzZSBvciBub3QuXG4gKi9cbmZ1bmN0aW9uIGlzTGFuZ0NoaW5lc2UoKTogYm9vbGVhbiB7XG5cdHJldHVybiBtdy5jb25maWcuZ2V0KCd3Z1VzZXJMYW5ndWFnZScpLnN0YXJ0c1dpdGgoJ3poJyk7XG59XG5cbmZ1bmN0aW9uIGlzV2lraXRleHRQYWdlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbXcuY29uZmlnLmdldCgnd2dDYW5vbmljYWxOYW1lc3BhY2UnKSAhPT0gJ1NwZWNpYWwnICYmIG13LmNvbmZpZy5nZXQoJ3dnUGFnZUNvbnRlbnRNb2RlbCcpID09PSAnd2lraXRleHQnO1xufVxuXG5leHBvcnQge2lzTG9nZ2VkSW4sIGlzUmVmZXJyZXJTZWxmLCBpc1ZpZXdpbmdQYWdlLCBpc0xhbmdDaGluZXNlLCBpc1dpa2l0ZXh0UGFnZX07XG4iLCAiaW1wb3J0IHtpc0xvZ2dlZElufSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgTE9DQUxfVkFSSUFOVF9LRVkgPSAndmEtdmFyJztcbmNvbnN0IE9QVE9VVF9LRVkgPSAndmEtb3B0b3V0JztcbmNvbnN0IFZBTElEX1ZBUklBTlRTID0gWyd6aC1jbicsICd6aC1zZycsICd6aC1teScsICd6aC10dycsICd6aC1oaycsICd6aC1tbyddIGFzIGNvbnN0O1xuY29uc3QgVkFSSUFOVFMgPSBbJ3poJywgJ3poLWhhbnMnLCAnemgtaGFudCcsIC4uLlZBTElEX1ZBUklBTlRTXSBhcyBjb25zdDtcbmNvbnN0IEVYVF9WQVJJQU5UUyA9IFtcblx0J3poLWhhbnMtY24nLFxuXHQnemgtaGFucy1zZycsXG5cdCd6aC1oYW5zLW15Jyxcblx0J3poLWhhbnQtdHcnLFxuXHQnemgtaGFudC1oaycsXG5cdCd6aC1oYW50LW1vJyxcblx0Li4uVkFSSUFOVFMsXG5dIGFzIGNvbnN0O1xuLy8gU29tZSBicm93c2VycyAoZS5nLiBGaXJlZm94IEFuZHJvaWQpIG1heSByZXR1cm4gc3VjaCBsYW5ndWFnZXNcbmNvbnN0IEVYVF9NQVBQSU5HOiBSZWNvcmQ8c3RyaW5nLCBWYWxpZFZhcmlhbnQ+ID0ge1xuXHQnemgtaGFucy1jbic6ICd6aC1jbicsXG5cdCd6aC1oYW5zLXNnJzogJ3poLXNnJyxcblx0J3poLWhhbnMtbXknOiAnemgtbXknLFxuXHQnemgtaGFudC10dyc6ICd6aC10dycsXG5cdCd6aC1oYW50LWhrJzogJ3poLWhrJyxcblx0J3poLWhhbnQtbW8nOiAnemgtbW8nLFxufTtcblxudHlwZSBWYWxpZFZhcmlhbnQgPSAodHlwZW9mIFZBTElEX1ZBUklBTlRTKVtudW1iZXJdO1xudHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWQVJJQU5UUylbbnVtYmVyXTtcbnR5cGUgRXh0VmFyaWFudCA9ICh0eXBlb2YgRVhUX1ZBUklBTlRTKVtudW1iZXJdO1xuXG5mdW5jdGlvbiBpc1ZhcmlhbnQoc3RyOiBzdHJpbmcpOiBzdHIgaXMgVmFyaWFudCB7XG5cdHJldHVybiAoVkFSSUFOVFMgYXMgUmVhZG9ubHlBcnJheTxzdHJpbmc+KS5pbmNsdWRlcyhzdHIpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkVmFyaWFudChzdHI6IHN0cmluZyk6IHN0ciBpcyBWYWxpZFZhcmlhbnQge1xuXHRyZXR1cm4gKFZBTElEX1ZBUklBTlRTIGFzIFJlYWRvbmx5QXJyYXk8c3RyaW5nPikuaW5jbHVkZXMoc3RyKTtcbn1cblxuZnVuY3Rpb24gaXNFeHRWYXJpYW50KHN0cjogc3RyaW5nKTogc3RyIGlzIEV4dFZhcmlhbnQge1xuXHRyZXR1cm4gKEVYVF9WQVJJQU5UUyBhcyBSZWFkb25seUFycmF5PHN0cmluZz4pLmluY2x1ZGVzKHN0cik7XG59XG5cbi8qKlxuICogTWFwcyBhZGRpdGlvbmFsIGxhbmcgY29kZXMgdG8gc3RhbmRhcmQgdmFyaWFudHMuXG4gKlxuICogQHJldHVybnMgc3RhbmRhcmQgdmFyaWFudFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVWYXJpYW50KGV4dFZhcmlhbnQ6IEV4dFZhcmlhbnQpOiBWYXJpYW50IHtcblx0cmV0dXJuIChFWFRfTUFQUElOR1tleHRWYXJpYW50XSA/PyBleHRWYXJpYW50KSBhcyBWYXJpYW50O1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IHZhcmlhbnQgb2YgdGhlIHBhZ2UgKGRvbid0IGJlIG1pc2xlZCBieSBjb25maWcgbmFtaW5nKS5cbiAqXG4gKiBAcmV0dXJucyB2YXJpYW50LCBudWxsIGZvciBub24td2lraXRleHQgcGFnZSAoYnV0IE5PVCBhbGwgc3VjaCBwYWdlcyByZXR1cm5zIG51bGwhKVxuICovXG5mdW5jdGlvbiBnZXRQYWdlVmFyaWFudCgpOiBWYXJpYW50IHwgbnVsbCB7XG5cdGNvbnN0IHJlc3VsdCA9IG13LmNvbmZpZy5nZXQoJ3dnVXNlclZhcmlhbnQnKTtcblx0cmV0dXJuIHJlc3VsdCAhPT0gbnVsbCAmJiBpc0V4dFZhcmlhbnQocmVzdWx0KSA/IG5vcm1hbGl6ZVZhcmlhbnQocmVzdWx0KSA6IG51bGw7XG59XG5cbi8qKlxuICogR2V0IGFjY291bnQgdmFyaWFudC5cbiAqXG4gKiBAcmV0dXJucyBhY2NvdW50IHZhcmlhbnQsIG51bGwgZm9yIGFub255bW91cyB1c2VyXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnRWYXJpYW50KCk6IFZhcmlhbnQgfCBudWxsIHtcblx0aWYgKGlzTG9nZ2VkSW4oKSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG13LnVzZXIub3B0aW9ucy5nZXQoJ3ZhcmlhbnQnKSBhcyBzdHJpbmc7XG5cdFx0cmV0dXJuIGlzRXh0VmFyaWFudChyZXN1bHQpID8gbm9ybWFsaXplVmFyaWFudChyZXN1bHQpIDogbnVsbDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYWxWYXJpYW50KCk6IFZhcmlhbnQgfCBudWxsIHtcblx0Y29uc3QgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTE9DQUxfVkFSSUFOVF9LRVkpO1xuXHRpZiAocmVzdWx0ID09PSBudWxsIHx8ICFpc0V4dFZhcmlhbnQocmVzdWx0KSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiBub3JtYWxpemVWYXJpYW50KHJlc3VsdCk7XG59XG5cbi8qKlxuICogUmV0dXJuIGJyb3dzZXIgbGFuZ3VhZ2UgaWYgaXQncyBhIENoaW5lc2UgdmFyaWFudC5cbiAqXG4gKiBAcmV0dXJucyBicm93c2VyIHZhcmlhbnRcbiAqL1xuZnVuY3Rpb24gZ2V0QnJvd3NlclZhcmlhbnQoKTogVmFyaWFudCB8IG51bGwge1xuXHRyZXR1cm4gKFxuXHRcdG5hdmlnYXRvci5sYW5ndWFnZXNcblx0XHRcdC5tYXAoKGxhbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKGlzRXh0VmFyaWFudClcblx0XHRcdC5tYXAobm9ybWFsaXplVmFyaWFudClcblx0XHRcdC5maW5kKGlzVmFyaWFudCkgPz8gbnVsbFxuXHQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgXCJuYXR1cmFsXCIgdmFyaWFudCBpbmZlcnJlZCBieSBNZWRpYVdpa2kgZm9yIGFub255bW91cyB1c2Vyc1xuICogd2hlbiB0aGUgbGluayBkb2Vzbid0IHNwZWNpZnkgYSB2YXJpYW50LlxuICpcbiAqIFVzZWQgaW4gbGluayBub3JtYWxpemF0aW9uLlxuICpcbiAqIEZJWE1FOiBPbGQgU2FmYXJpIGlzIGtub3duIHRvIGJyZWFrIHRoaXMgbWV0aG9kLlxuICogVXNlciByZXBvcnRlZCB0aGF0IG9uIGFuIGlPUyAxNCBkZXZpY2Ugd2l0aCBDaGluZXNlIGxhbmd1YWdlIGFuZCBTaW5nYXBvcmUgcmVnaW9uIHNldHRpbmdzLFxuICogQWNjZXB0LUxhbmd1YWdlIGlzIHpoLWNuICh0aHVzIGluZmVycmVkIGJ5IE1lZGlhV2lraSkgYnV0IHRoaXMgbWV0aG9kIHJldHVybnMgemgtc2cuXG4gKlxuICogQHJldHVybnMgdmFyaWFudFxuICovXG5mdW5jdGlvbiBnZXRNZWRpYVdpa2lWYXJpYW50KCk6IFZhcmlhbnQgfCBudWxsIHtcblx0cmV0dXJuIGdldEFjY291bnRWYXJpYW50KCkgPz8gZ2V0QnJvd3NlclZhcmlhbnQoKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgcHJlZmVycmVkIHZhcmlhbnQgZnJvbSBicm93c2VyIHZhcmlhbnQsIGxvY2FsIHZhcmlhbnQgYW5kIGFjY291bnQgdmFyaWFudC5cbiAqXG4gKiBQcmlvcml0eTogYWNjb3VudCB2YXJpYW50ID4gYnJvd3NlciB2YXJpYW50ID4gbG9jYWwgdmFyaWFudFxuICpcbiAqIEByZXR1cm5zIHByZWZlcnJlZCB2YXJpYW50XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZVByZWZlcnJlZFZhcmlhbnQoKTogVmFsaWRWYXJpYW50IHwgbnVsbCB7XG5cdHJldHVybiBbZ2V0QWNjb3VudFZhcmlhbnQoKSwgZ2V0QnJvd3NlclZhcmlhbnQoKSwgZ2V0TG9jYWxWYXJpYW50KCldXG5cdFx0Lm1hcCgodmFyaWFudCkgPT4ge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgIT09IG51bGwgJiYgaXNWYWxpZFZhcmlhbnQodmFyaWFudCkgPyB2YXJpYW50IDogbnVsbDtcblx0XHR9KVxuXHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcblx0XHRcdHJldHVybiBwcmV2ID8/IGN1cnI7XG5cdFx0fSk7XG59XG5cbnR5cGUgU2V0TG9jYWxWYXJpYW50ID0gdHlwZW9mIHNldExvY2FsVmFyaWFudDtcblxuZnVuY3Rpb24gc2V0TG9jYWxWYXJpYW50KHZhcmlhbnQ6IFZhcmlhbnQpOiB2b2lkIHtcblx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxfVkFSSUFOVF9LRVksIHZhcmlhbnQpO1xufVxuXG50eXBlIFNldE9wdE91dCA9IHR5cGVvZiBzZXRPcHRPdXQ7XG5cbmZ1bmN0aW9uIHNldE9wdE91dCgpOiB2b2lkIHtcblx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oT1BUT1VUX0tFWSwgJycpO1xufVxuXG5mdW5jdGlvbiBpc09wdE91dGVkKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oT1BUT1VUX0tFWSkgIT09IG51bGw7XG59XG5cbmV4cG9ydCB7XG5cdHR5cGUgU2V0TG9jYWxWYXJpYW50LFxuXHR0eXBlIFNldE9wdE91dCxcblx0dHlwZSBWYWxpZFZhcmlhbnQsXG5cdHR5cGUgVmFyaWFudCxcblx0aXNWYXJpYW50LFxuXHRpc1ZhbGlkVmFyaWFudCxcblx0Z2V0UGFnZVZhcmlhbnQsXG5cdGdldEFjY291bnRWYXJpYW50LFxuXHRnZXRMb2NhbFZhcmlhbnQsXG5cdGdldEJyb3dzZXJWYXJpYW50LFxuXHRnZXRNZWRpYVdpa2lWYXJpYW50LFxuXHRjYWxjdWxhdGVQcmVmZXJyZWRWYXJpYW50LFxuXHRzZXRMb2NhbFZhcmlhbnQsXG5cdHNldE9wdE91dCxcblx0aXNPcHRPdXRlZCxcbn07XG4iLCAiaW1wb3J0IHtWYXJpYW50LCBnZXRNZWRpYVdpa2lWYXJpYW50LCBpc1ZhbGlkVmFyaWFudCwgc2V0TG9jYWxWYXJpYW50fSBmcm9tICcuL21vZGVsJztcblxuY29uc3QgUkVHRVhfV0lLSV9VUkwgPSAvXlxcLyg/Ondpa2l8emgoPzotXFx3Kyk/KVxcLy9pO1xuY29uc3QgUkVHRVhfVkFSSUFOVF9VUkwgPSAvXlxcL3poKD86LVxcdyspP1xcLy9pO1xuY29uc3QgVkFSSUFOVF9QQVJBTSA9ICd2YS12YXJpYW50JztcblxuZnVuY3Rpb24gaXNFbGlnaWJsZUZvclJld3JpdGluZyhsaW5rOiBzdHJpbmcpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHQvLyBObyByZXdyaXRpbmcgZm9yIGVtcHR5IGxpbmtzXG5cdFx0aWYgKGxpbmsgPT09ICcnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHVybCA9IG5ldyBVUkwobGluaywgbG9jYXRpb24ub3JpZ2luKTtcblx0XHQvLyBObyByZXdyaXRpbmcgaWYgbGluayBpdHNlbGYgaGFzIHZhcmlhbnQgaW5mb1xuXHRcdGlmIChSRUdFWF9WQVJJQU5UX1VSTC50ZXN0KHVybC5wYXRobmFtZSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKCd2YXJpYW50JykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gTm8gcmV3cml0aW5nIGZvciBmb3JlaWduIG9yaWdpbiBVUkxzXG5cdFx0Ly8gTm90ZSB0aGF0IGxpbmtzIGxpa2UgamF2YXNjcmlwdDp2b2lkKDApIGFyZSBibG9ja2VkIGJ5IHRoaXNcblx0XHRpZiAodXJsLmhvc3QgIT09IGxvY2F0aW9uLmhvc3QpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVMaW5rKGxpbms6IHN0cmluZywgdmFyaWFudDogVmFyaWFudCk6IHN0cmluZyB7XG5cdHRyeSB7XG5cdFx0Y29uc3Qgbm9ybWFsaXphdGlvblRhcmdldFZhcmlhbnQgPSBnZXRNZWRpYVdpa2lWYXJpYW50KCk7XG5cdFx0Y29uc3QgdXJsID0gbmV3IFVSTChsaW5rLCBsb2NhdGlvbi5vcmlnaW4pO1xuXHRcdGNvbnN0IHtwYXRobmFtZSwgc2VhcmNoUGFyYW1zfSA9IHVybDtcblxuXHRcdGlmIChSRUdFWF9XSUtJX1VSTC50ZXN0KHBhdGhuYW1lKSkge1xuXHRcdFx0dXJsLnBhdGhuYW1lID0gYC8ke3ZhcmlhbnR9LyR7dXJsLnBhdGhuYW1lLnJlcGxhY2UoUkVHRVhfV0lLSV9VUkwsICcnKX1gO1xuXHRcdFx0c2VhcmNoUGFyYW1zLmRlbGV0ZSgndmFyaWFudCcpOyAvLyBGb3IgdGhpbmdzIGxpa2UgL3poLWNuL0E/dmFyaWFudD16aC1oa1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWFyY2hQYXJhbXMuc2V0KCd2YXJpYW50JywgdmFyaWFudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHZhcmlhbnQgPT09IG5vcm1hbGl6YXRpb25UYXJnZXRWYXJpYW50KSB7XG5cdFx0XHQvLyBOb3JtYWxpemUgdGhlIGxpbmsuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gRm9yIGV4YW1wbGUsIGZvciBsaW5rIC96aC10dy9UaXRsZSBhbmQgbm9ybWFsaXphdGlvbiB2YXJpYW50IHpoLXR3LCB0aGUgcmVzdWx0IGlzIC93aWtpL1RpdGxlLFxuXHRcdFx0Ly8gd2hpbGUgZm9yIHRoZSBzYW1lIGxpbmsgYW5kIG5vcm1hbGl6YXRpb24gdmFyaWFudCB6aC1jbiwgdGhlIHJlc3VsdCBpcyAvemgtdHcvVGl0bGUgKHVuY2hhbmdlZCkuXG5cdFx0XHR1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUucmVwbGFjZShSRUdFWF9XSUtJX1VSTCwgJy93aWtpLycpO1xuXHRcdFx0dXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ3ZhcmlhbnQnKTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSB1cmwudG9TdHJpbmcoKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBsaW5rO1xuXHR9XG59XG5cbmludGVyZmFjZSBSZWRpcmVjdGlvbk9wdGlvbnMge1xuXHRsaW5rPzogc3RyaW5nO1xuXHQvKiogU2hvdWxkIHN0aWxsIHJlZGlyZWN0IGV2ZW4gZGVzdGluYXRpb24gbGluayBpcyB0aGUgc2FtZSBhcyBjdXJyZW50IHBhZ2UgKi9cblx0Zm9yY2VkPzogYm9vbGVhbjtcbn1cblxudHlwZSBSZWRpcmVjdCA9IHR5cGVvZiByZWRpcmVjdDtcblxuZnVuY3Rpb24gcmVkaXJlY3QocHJlZmVycmVkVmFyaWFudDogVmFyaWFudCwgb3B0aW9uczogUmVkaXJlY3Rpb25PcHRpb25zID0ge30pOiB2b2lkIHtcblx0Y29uc3Qgb3JpZ0xpbmsgPSBvcHRpb25zLmxpbmsgPz8gbG9jYXRpb24uaHJlZjtcblx0Y29uc3QgbmV3TGluayA9IHJld3JpdGVMaW5rKG9yaWdMaW5rLCBwcmVmZXJyZWRWYXJpYW50KTtcblxuXHQvLyBQcmV2ZW50IGluZmluaXRlIHJlZGlyZWN0c1xuXHQvLyBUaGlzIGNvdWxkIGhhcHBlbiBvY2Nhc2lvbmFsbHksIHNlZSBnZXRNZWRpYVdpa2lWYXJpYW50KCkncyBjb21tZW50c1xuXHRpZiAob3B0aW9ucy5mb3JjZWQgfHwgbmV3TGluayAhPT0gbG9jYXRpb24uaHJlZikge1xuXHRcdC8vIFVzZSByZXBsYWNlKCkgdG8gcHJldmVudCBuYXZpZ2F0aW5nIGJhY2tcblx0XHRsb2NhdGlvbi5yZXBsYWNlKG5ld0xpbmspO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGhpc1BhZ2UocHJlZmVycmVkVmFyaWFudDogVmFyaWFudCwgcGFnZVZhcmlhbnQ/OiBWYXJpYW50KTogdm9pZCB7XG5cdGlmIChwYWdlVmFyaWFudCA9PT0gcHJlZmVycmVkVmFyaWFudCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHJlZGlyZWN0aW9uT3JpZ2luOiBzdHJpbmcgfCBudWxsID0gbXcuY29uZmlnLmdldCgnd2dSZWRpcmVjdGVkRnJvbScpO1xuXHRpZiAocmVkaXJlY3Rpb25PcmlnaW4gPT09IG51bGwpIHtcblx0XHRyZWRpcmVjdChwcmVmZXJyZWRWYXJpYW50KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBVc2UgVVJMIHRvIHJlc2VydmUgb3RoZXIgcGFydHMgb2YgdGhlIGxpbmtcblx0Y29uc3QgcmVkaXJlY3Rpb25VUkwgPSBuZXcgVVJMKGxvY2F0aW9uLmhyZWYpO1xuXHRyZWRpcmVjdGlvblVSTC5wYXRobmFtZSA9IGAvd2lraS8ke3JlZGlyZWN0aW9uT3JpZ2lufWA7XG5cdHJlZGlyZWN0KHByZWZlcnJlZFZhcmlhbnQsIHtsaW5rOiByZWRpcmVjdGlvblVSTC50b1N0cmluZygpfSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVBbmNob3JzKHZhcmlhbnQ6IFZhcmlhbnQpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBuYW1lIG9mIFsnY2xpY2snLCAnYXV4Y2xpY2snLCAnZHJhZ3N0YXJ0J10pIHtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIChldikgPT4ge1xuXHRcdFx0Y29uc3Qge3RhcmdldH0gPSBldjtcblxuXHRcdFx0aWYgKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcblx0XHRcdFx0Ly8gRG8gbm90IHdyaXRlIDxhPiB3aXRoIGhhc2ggb25seSBocmVmIG9yIG5vIGhyZWZcblx0XHRcdFx0Ly8gd2hpY2ggaXMga25vd24gdG8gY2F1c2UgYnJlYWthZ2UgaW4gZS5nLiBWaXN1YWwgRWRpdG9yXG5cdFx0XHRcdGNvbnN0IGFuY2hvcjogSFRNTEFuY2hvckVsZW1lbnQgfCBudWxsID0gdGFyZ2V0LmNsb3Nlc3QoJ2FbaHJlZl06bm90KFtocmVmXj1cIiNcIl0pJyk7XG5cblx0XHRcdFx0aWYgKGFuY2hvciAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9yaWdMaW5rID0gYW5jaG9yLmhyZWY7XG5cdFx0XHRcdFx0aWYgKCFpc0VsaWdpYmxlRm9yUmV3cml0aW5nKG9yaWdMaW5rKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IG5ld0xpbmsgPSByZXdyaXRlTGluayhvcmlnTGluaywgdmFyaWFudCk7XG5cdFx0XHRcdFx0aWYgKG5ld0xpbmsgPT09IG9yaWdMaW5rKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQnJvd3NlciBzdXBwb3J0OiBTYWZhcmkgPCAxNFxuXHRcdFx0XHRcdC8vIEZhaWwgc2lsZW50bHkgd2hlbiBEcmFnRXZlbnQgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRpZiAod2luZG93LkRyYWdFdmVudCAmJiBldiBpbnN0YW5jZW9mIERyYWdFdmVudCAmJiBldi5kYXRhVHJhbnNmZXIpIHtcblx0XHRcdFx0XHRcdC8vIE1vZGlmeSBkcmFnIGRhdGEgZGlyZWN0bHkgYmVjYXVzZSBzZXR0aW5nIGhyZWYgaGFzIG5vIGVmZmVjdCBpbiBkcmFnIGV2ZW50XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHR5cGUgb2YgZXYuZGF0YVRyYW5zZmVyLnR5cGVzKSB7XG5cdFx0XHRcdFx0XHRcdGV2LmRhdGFUcmFuc2Zlci5zZXREYXRhKHR5cGUsIG5ld0xpbmspO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBVc2UgYSBtdXRleCB0byBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbiBieSBvdmVybGFwcGVkIGhhbmRsZXIgY2FsbHNcblx0XHRcdFx0XHRcdGlmIChhbmNob3IuZGF0YXNldFsndmFNdXRleCddID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0YW5jaG9yLmRhdGFzZXRbJ3ZhTXV0ZXgnXSA9ICcnO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhbmNob3IuaHJlZiA9IG5ld0xpbms7XG5cblx0XHRcdFx0XHRcdC8vIEhBQ0s6IHdvcmthcm91bmQgcG9wdXBzIG5vdCB3b3JraW5nIG9uIG1vZGlmaWVkIGxpbmtzXG5cdFx0XHRcdFx0XHQvLyBBZGQgaGFuZGxlciB0byA8YT4gZGlyZWN0bHkgc28gaXQgd2FzIHRyaWdnZXJlZCBiZWZvcmUgYW55dGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpbm5lck5hbWUgb2YgWydtb3VzZW92ZXInLCAnbW91c2VsZWF2ZScsICdrZXl1cCddKSB7XG5cdFx0XHRcdFx0XHRcdGFuY2hvci5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFx0XHRcdGlubmVyTmFtZSxcblx0XHRcdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYW5jaG9yLmRhdGFzZXRbJ3ZhTXV0ZXgnXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFuY2hvci5ocmVmID0gb3JpZ0xpbms7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBhbmNob3IuZGF0YXNldFsndmFNdXRleCddO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0e29uY2U6IHRydWV9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2hvd1ZhcmlhbnRQcm9tcHQoKTogdm9pZCB7XG5cdGNvbnN0IG1vZHVsZU5hbWUgPSAnZXh0LmdhZGdldC5WYXJpYW50QWxseURpYWxvZyc7XG5cdHZvaWQgbXcubG9hZGVyLnVzaW5nKG1vZHVsZU5hbWUsIChyZXF1aXJlKSA9PiB7XG5cdFx0cmVxdWlyZShtb2R1bGVOYW1lKTtcblx0fSk7XG59XG5cbi8qKlxuICogU2V0IGxvY2FsIHZhcmlhbnQgYWNjb3JkaW5nIHRvIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLlxuICpcbiAqIGUuZy4gYSBVUkwgd2l0aCA/dmEtdmFyaWFudD16aC1jbiB3aWxsIHNldCBsb2NhbCB2YXJpYW50IHRvIHpoLWNuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5VVJMVmFyaWFudCgpOiB2b2lkIHtcblx0Y29uc3QgdmFyaWFudCA9IG5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChWQVJJQU5UX1BBUkFNKTtcblx0aWYgKHZhcmlhbnQgIT09IG51bGwgJiYgaXNWYWxpZFZhcmlhbnQodmFyaWFudCkpIHtcblx0XHRzZXRMb2NhbFZhcmlhbnQodmFyaWFudCk7XG5cdH1cbn1cblxuZXhwb3J0IHtcblx0dHlwZSBSZWRpcmVjdCxcblx0aXNFbGlnaWJsZUZvclJld3JpdGluZyxcblx0cmV3cml0ZUxpbmssXG5cdHJlZGlyZWN0LFxuXHRjaGVja1RoaXNQYWdlLFxuXHRyZXdyaXRlQW5jaG9ycyxcblx0c2hvd1ZhcmlhbnRQcm9tcHQsXG5cdGFwcGx5VVJMVmFyaWFudCxcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLG9GQUFBQSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJLGNBQWMsT0FBTyxZQUFZLFlBQVksU0FBUztBQUsxRCxJQUFBQSxRQUFPLFVBQVUsT0FBTyxlQUFlLGVBQWUsZ0JBQWdCLFNBQVksU0FBVSxVQUFVO0FBQ3BHLGFBQU8sT0FBTyxZQUFZLGNBQWMsYUFBYTtBQUFBLElBQ3ZELElBQUksU0FBVSxVQUFVO0FBQ3RCLGFBQU8sT0FBTyxZQUFZO0FBQUEsSUFDNUI7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLDhFQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSxvRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBR1osSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBRWxDLGFBQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxXQUFZO0FBQUUsZUFBTztBQUFBLE1BQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQUEsSUFDakYsQ0FBQztBQUFBO0FBQUE7OztBQ1BEO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxR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Q2hDO0FBRUFnRCxLQUFLOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJuYXZpZ2F0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiVmFyaWFudEFsbHlfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJyZWRpcmVjdCIsICJzZXRMb2NhbFZhcmlhbnQiLCAic2V0T3B0T3V0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJpc0xvZ2dlZEluIiwgIm13IiwgImNvbmZpZyIsICJleGlzdHMiLCAiaXNSZWZlcnJlclNlbGYiLCAiVVJMIiwgImRvY3VtZW50IiwgInJlZmVycmVyIiwgImhvc3RuYW1lIiwgImxvY2F0aW9uIiwgImlzVmlld2luZ1BhZ2UiLCAiZ2V0IiwgImlzTGFuZ0NoaW5lc2UiLCAic3RhcnRzV2l0aCIsICJpc1dpa2l0ZXh0UGFnZSIsICJMT0NBTF9WQVJJQU5UX0tFWSIsICJPUFRPVVRfS0VZIiwgIlZBTElEX1ZBUklBTlRTIiwgIlZBUklBTlRTIiwgIkVYVF9WQVJJQU5UUyIsICJFWFRfTUFQUElORyIsICJpc1ZhcmlhbnQiLCAic3RyIiwgImluY2x1ZGVzIiwgImlzVmFsaWRWYXJpYW50IiwgImlzRXh0VmFyaWFudCIsICJub3JtYWxpemVWYXJpYW50IiwgImV4dFZhcmlhbnQiLCAiX0VYVF9NQVBQSU5HJGV4dFZhcmlhIiwgImdldFBhZ2VWYXJpYW50IiwgInJlc3VsdCIsICJnZXRBY2NvdW50VmFyaWFudCIsICJ1c2VyIiwgIm9wdGlvbnMiLCAiZ2V0TG9jYWxWYXJpYW50IiwgImxvY2FsU3RvcmFnZSIsICJnZXRJdGVtIiwgImdldEJyb3dzZXJWYXJpYW50IiwgIl9uYXZpZ2F0b3IkbGFuZ3VhZ2VzJCIsICJuYXZpZ2F0b3IiLCAibGFuZ3VhZ2VzIiwgIm1hcCIsICJsYW5nIiwgInRvTG93ZXJDYXNlIiwgImZpbHRlciIsICJmaW5kIiwgImdldE1lZGlhV2lraVZhcmlhbnQiLCAiX2dldEFjY291bnRWYXJpYW50IiwgImNhbGN1bGF0ZVByZWZlcnJlZFZhcmlhbnQiLCAidmFyaWFudCIsICJyZWR1Y2UiLCAicHJldiIsICJjdXJyIiwgInNldEl0ZW0iLCAiaXNPcHRPdXRlZCIsICJSRUdFWF9XSUtJX1VSTCIsICJSRUdFWF9WQVJJQU5UX1VSTCIsICJWQVJJQU5UX1BBUkFNIiwgImlzRWxpZ2libGVGb3JSZXdyaXRpbmciLCAibGluayIsICJ1cmwiLCAib3JpZ2luIiwgInRlc3QiLCAicGF0aG5hbWUiLCAic2VhcmNoUGFyYW1zIiwgImhhcyIsICJob3N0IiwgInJld3JpdGVMaW5rIiwgIm5vcm1hbGl6YXRpb25UYXJnZXRWYXJpYW50IiwgImNvbmNhdCIsICJyZXBsYWNlIiwgImRlbGV0ZSIsICJzZXQiLCAidG9TdHJpbmciLCAicHJlZmVycmVkVmFyaWFudCIsICJfb3B0aW9ucyRsaW5rIiwgIm9yaWdMaW5rIiwgImhyZWYiLCAibmV3TGluayIsICJmb3JjZWQiLCAiY2hlY2tUaGlzUGFnZSIsICJwYWdlVmFyaWFudCIsICJyZWRpcmVjdGlvbk9yaWdpbiIsICJyZWRpcmVjdGlvblVSTCIsICJyZXdyaXRlQW5jaG9ycyIsICJfaSIsICJfYXJyIiwgImxlbmd0aCIsICJuYW1lIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAiZXYiLCAidGFyZ2V0IiwgIkVsZW1lbnQiLCAiYW5jaG9yIiwgImNsb3Nlc3QiLCAid2luZG93IiwgIkRyYWdFdmVudCIsICJkYXRhVHJhbnNmZXIiLCAiX2l0ZXJhdG9yMiIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJ0eXBlcyIsICJfc3RlcDIiLCAicyIsICJuIiwgImRvbmUiLCAidHlwZSIsICJ2YWx1ZSIsICJzZXREYXRhIiwgImVyciIsICJlIiwgImYiLCAiZGF0YXNldCIsICJfaTIiLCAiX2FycjIiLCAiaW5uZXJOYW1lIiwgIm9uY2UiLCAic2hvd1ZhcmlhbnRQcm9tcHQiLCAibW9kdWxlTmFtZSIsICJsb2FkZXIiLCAidXNpbmciLCAicmVxdWlyZTIiLCAiYXBwbHlVUkxWYXJpYW50IiwgIm1haW4iXQp9Cg== diff --git a/dist/VariantAllyDialog/VariantAllyDialog.js b/dist/VariantAllyDialog/VariantAllyDialog.js index ccc0a823..649b912f 100644 --- a/dist/VariantAllyDialog/VariantAllyDialog.js +++ b/dist/VariantAllyDialog/VariantAllyDialog.js @@ -64,50 +64,12 @@ var _hoisted_1 = ["width", "height"]; var _hoisted_2 = { key: 0 }; -var _hoisted_3 = /* @__PURE__ */ (0, import_vue2.createElementVNode)( - "path", - { - d: "M20 18h-1.44a.61.61 0 01-.4-.12.81.81 0 01-.23-.31L17 15h-5l-1 2.54a.77.77 0 01-.22.3.59.59 0 01-.4.14H9l4.55-11.47h1.89zm-3.53-4.31L14.89 9.5a11.62 11.62 0 01-.39-1.24q-.09.37-.19.69l-.19.56-1.58 4.19zm-6.3-1.58a13.43 13.43 0 01-2.91-1.41 11.46 11.46 0 002.81-5.37H12V4H7.31a4 4 0 00-.2-.56C6.87 2.79 6.6 2 6.6 2l-1.47.5s.4.89.6 1.5H0v1.33h2.15A11.23 11.23 0 005 10.7a17.19 17.19 0 01-5 2.1q.56.82.87 1.38a23.28 23.28 0 005.22-2.51 15.64 15.64 0 003.56 1.77zM3.63 5.33h4.91a8.11 8.11 0 01-2.45 4.45 9.11 9.11 0 01-2.46-4.45z" - }, - null, - -1 - /* HOISTED */ -); -var _hoisted_4 = { +var _hoisted_3 = { key: 1 }; -var _hoisted_5 = /* @__PURE__ */ (0, import_vue2.createElementVNode)( - "path", - { - d: "m4.34 2.93 12.73 12.73-1.41 1.41L2.93 4.35z" - }, - null, - -1 - /* HOISTED */ -); -var _hoisted_6 = /* @__PURE__ */ (0, import_vue2.createElementVNode)( - "path", - { - d: "M17.07 4.34 4.34 17.07l-1.41-1.41L15.66 2.93z" - }, - null, - -1 - /* HOISTED */ -); -var _hoisted_7 = [_hoisted_5, _hoisted_6]; -var _hoisted_8 = { +var _hoisted_4 = { key: 2 }; -var _hoisted_9 = /* @__PURE__ */ (0, import_vue2.createElementVNode)( - "path", - { - d: "M8.59 3.42 14.17 9H2v2h12.17l-5.58 5.59L10 18l8-8-8-8z" - }, - null, - -1 - /* HOISTED */ -); -var _hoisted_10 = [_hoisted_9]; function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("svg", { class: "va-icon-button__icon", @@ -117,7 +79,39 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { height: $props.size, viewBox: "0 0 20 20", "aria-hidden": "true" - }, [$props.icon === "lang" ? ((0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("g", _hoisted_2, [(0, import_vue2.createCommentVNode)(" eslint-disable "), _hoisted_3, (0, import_vue2.createCommentVNode)(" eslint-enable ")])) : $props.icon === "close" ? ((0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("g", _hoisted_4, [..._hoisted_7])) : ((0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("g", _hoisted_8, [..._hoisted_10]))], 8, _hoisted_1); + }, [$props.icon === "lang" ? ((0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("g", _hoisted_2, [(0, import_vue2.createCommentVNode)(" eslint-disable "), _cache[0] || (_cache[0] = (0, import_vue2.createElementVNode)( + "path", + { + d: "M20 18h-1.44a.61.61 0 01-.4-.12.81.81 0 01-.23-.31L17 15h-5l-1 2.54a.77.77 0 01-.22.3.59.59 0 01-.4.14H9l4.55-11.47h1.89zm-3.53-4.31L14.89 9.5a11.62 11.62 0 01-.39-1.24q-.09.37-.19.69l-.19.56-1.58 4.19zm-6.3-1.58a13.43 13.43 0 01-2.91-1.41 11.46 11.46 0 002.81-5.37H12V4H7.31a4 4 0 00-.2-.56C6.87 2.79 6.6 2 6.6 2l-1.47.5s.4.89.6 1.5H0v1.33h2.15A11.23 11.23 0 005 10.7a17.19 17.19 0 01-5 2.1q.56.82.87 1.38a23.28 23.28 0 005.22-2.51 15.64 15.64 0 003.56 1.77zM3.63 5.33h4.91a8.11 8.11 0 01-2.45 4.45 9.11 9.11 0 01-2.46-4.45z" + }, + null, + -1 + /* HOISTED */ + )), (0, import_vue2.createCommentVNode)(" eslint-enable ")])) : $props.icon === "close" ? ((0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("g", _hoisted_3, _cache[1] || (_cache[1] = [(0, import_vue2.createElementVNode)( + "path", + { + d: "m4.34 2.93 12.73 12.73-1.41 1.41L2.93 4.35z" + }, + null, + -1 + /* HOISTED */ + ), (0, import_vue2.createElementVNode)( + "path", + { + d: "M17.07 4.34 4.34 17.07l-1.41-1.41L15.66 2.93z" + }, + null, + -1 + /* HOISTED */ + )]))) : ((0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("g", _hoisted_4, _cache[2] || (_cache[2] = [(0, import_vue2.createElementVNode)( + "path", + { + d: "M8.59 3.42 14.17 9H2v2h12.17l-5.58 5.59L10 18l8-8-8-8z" + }, + null, + -1 + /* HOISTED */ + )])))], 8, _hoisted_1); } //! src/VariantAllyDialog/components/VAIcon.vue VAIcon_default.render = render; @@ -439,25 +433,17 @@ var VAVariantPrompt_default = /* @__PURE__ */ (0, import_vue11.defineComponent)( } }); var import_vue13 = require("vue"); -var _withScopeId = (n) => ((0, import_vue13.pushScopeId)("data-v-5a44cc75"), n = n(), (0, import_vue13.popScopeId)(), n); var _hoisted_13 = ["lang", "aria-labelledby", "aria-describedby"]; var _hoisted_22 = ["id"]; -var _hoisted_32 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ (0, import_vue13.createElementVNode)( - "br", - null, - null, - -1 - /* HOISTED */ -)); -var _hoisted_42 = ["lang"]; -var _hoisted_52 = ["id"]; -var _hoisted_62 = { +var _hoisted_32 = ["lang"]; +var _hoisted_42 = ["id"]; +var _hoisted_5 = { class: "va-variant-prompt__options" }; -var _hoisted_72 = { +var _hoisted_6 = { class: "va-variant-prompt__footer" }; -var _hoisted_82 = { +var _hoisted_7 = { class: "va-para va-para--subtle" }; function render4(_ctx, _cache, $props, $setup, $data, $options) { @@ -489,18 +475,24 @@ function render4(_ctx, _cache, $props, $setup, $data, $options) { (0, import_vue13.toDisplayString)($setup.useI18n($setup.isVariantNarrowed ? "vp.header.alt" : "vp.header")), 1 /* TEXT */ - ), _hoisted_32, (0, import_vue13.createVNode)($setup["VAFadeTransition"], null, { + ), _cache[1] || (_cache[1] = (0, import_vue13.createElementVNode)( + "br", + null, + null, + -1 + /* HOISTED */ + )), (0, import_vue13.createVNode)($setup["VAFadeTransition"], null, { default: (0, import_vue13.withCtx)(() => [!$setup.isVariantNarrowed ? ((0, import_vue13.openBlock)(), (0, import_vue13.createElementBlock)("span", { key: $setup.shuffledVariant, lang: "zh-".concat($setup.shuffledVariant), class: "va-variant-prompt__title__variant" - }, (0, import_vue13.toDisplayString)($setup.messages.variants[$setup.shuffledVariant]), 9, _hoisted_42)) : (0, import_vue13.createCommentVNode)("v-if", true)]), + }, (0, import_vue13.toDisplayString)($setup.messages.variants[$setup.shuffledVariant]), 9, _hoisted_32)) : (0, import_vue13.createCommentVNode)("v-if", true)]), _: 1 /* STABLE */ })], 8, _hoisted_22), (0, import_vue13.createElementVNode)("p", { id: $setup.descId, class: "va-variant-prompt__desc va-para" - }, (0, import_vue13.toDisplayString)($setup.useI18n($setup.isVariantNarrowed ? "vp.main.alt" : "vp.main")), 9, _hoisted_52), (0, import_vue13.createElementVNode)("div", _hoisted_62, [(0, import_vue13.createCommentVNode)(" inferredVariant is non-null, guarded by isVariantNarrowed "), ((0, import_vue13.openBlock)(true), (0, import_vue13.createElementBlock)( + }, (0, import_vue13.toDisplayString)($setup.useI18n($setup.isVariantNarrowed ? "vp.main.alt" : "vp.main")), 9, _hoisted_42), (0, import_vue13.createElementVNode)("div", _hoisted_5, [(0, import_vue13.createCommentVNode)(" inferredVariant is non-null, guarded by isVariantNarrowed "), ((0, import_vue13.openBlock)(true), (0, import_vue13.createElementBlock)( import_vue13.Fragment, null, (0, import_vue13.renderList)($setup.isVariantNarrowed && $setup.inferredVariant !== null ? [$setup.inferredVariant] : $setup.VALID_VARIANTS, (variant) => { @@ -543,9 +535,9 @@ function render4(_ctx, _cache, $props, $setup, $data, $options) { )]), _: 1 /* STABLE */ - }, 8, ["disabled"])) : (0, import_vue13.createCommentVNode)("v-if", true)]), (0, import_vue13.createElementVNode)("footer", _hoisted_72, [(0, import_vue13.createElementVNode)( + }, 8, ["disabled"])) : (0, import_vue13.createCommentVNode)("v-if", true)]), (0, import_vue13.createElementVNode)("footer", _hoisted_6, [(0, import_vue13.createElementVNode)( "p", - _hoisted_82, + _hoisted_7, (0, import_vue13.toDisplayString)($setup.useI18n("vp.main.ext")), 1 /* TEXT */ @@ -687,11 +679,11 @@ var _hoisted_33 = ["id"]; var _hoisted_43 = { class: "va-variant-prompt-mobile__main" }; -var _hoisted_53 = ["value", "lang"]; -var _hoisted_63 = { +var _hoisted_52 = ["value", "lang"]; +var _hoisted_62 = { class: "va-variant-prompt-mobile__footer" }; -var _hoisted_73 = { +var _hoisted_72 = { class: "va-para va-para--subtle" }; function render6(_ctx, _cache, $props, $setup, $data, $options) { @@ -734,7 +726,7 @@ function render6(_ctx, _cache, $props, $setup, $data, $options) { key: variant, value: variant, lang: variant - }, (0, import_vue18.toDisplayString)($setup.messages.variants[variant]), 9, _hoisted_53); + }, (0, import_vue18.toDisplayString)($setup.messages.variants[variant]), 9, _hoisted_52); }), 128 /* KEYED_FRAGMENT */ @@ -755,9 +747,9 @@ function render6(_ctx, _cache, $props, $setup, $data, $options) { )]), _: 1 /* STABLE */ - }, 8, ["disabled"])]), (0, import_vue18.createElementVNode)("footer", _hoisted_63, [(0, import_vue18.createElementVNode)( + }, 8, ["disabled"])]), (0, import_vue18.createElementVNode)("footer", _hoisted_62, [(0, import_vue18.createElementVNode)( "p", - _hoisted_73, + _hoisted_72, (0, import_vue18.toDisplayString)($setup.useI18n("vp.main.ext")), 1 /* TEXT */ @@ -856,4 +848,4 @@ document.body.append(root); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL1ZhcmlhbnRBbGx5RGlhbG9nLnRzIiwgImRpc3QvVmFyaWFudEFsbHlEaWFsb2cvc3JjL1ZhcmlhbnRBbGx5RGlhbG9nL0FwcC52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVZhcmlhbnRQcm9tcHQudnVlIiwgImRpc3QvVmFyaWFudEFsbHlEaWFsb2cvc2ZjLXRlbXBsYXRlOkU6L2doUmVwby9Zc0FyY2hpdmVzLUdhZGdldHMvc3JjL1ZhcmlhbnRBbGx5RGlhbG9nL2NvbXBvbmVudHMvVkFJY29uLnZ1ZT90eXBlPXRlbXBsYXRlIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb25lbnRzL1ZBSWNvbi52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQUJ1dHRvbi52dWU/dHlwZT10ZW1wbGF0ZSIsICJzcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQUJ1dHRvbi52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQUZhZGVUcmFuc2l0aW9uLnZ1ZT90eXBlPXRlbXBsYXRlIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb25lbnRzL1ZBRmFkZVRyYW5zaXRpb24udnVlIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb3NhYmxlcy91c2VJMThuLnRzIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9tZXNzYWdlcy5qc29uIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9tb2R1bGVzL3V0aWxzLnRzIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb3NhYmxlcy91c2VVbmlxdWVJZC50cyIsICJzcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9zYWJsZXMvdXNlU2h1ZmZsZWRWYXJpYW50LnRzIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb3NhYmxlcy91c2VNb2RlbFdyYXBwZXIudHMiLCAic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL2NvbXBvc2FibGVzL3VzZURlZmF1bHQudHMiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVZhcmlhbnRQcm9tcHQudnVlP3R5cGU9dGVtcGxhdGUiLCAic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL2NvbXBvbmVudHMvVkFWYXJpYW50UHJvbXB0LnZ1ZSIsICJkaXN0L1ZhcmlhbnRBbGx5RGlhbG9nL3NyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb25lbnRzL1ZBVmFyaWFudFByb21wdE1vYmlsZS52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVNlbGVjdC52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVNlbGVjdC52dWU/dHlwZT10ZW1wbGF0ZSIsICJzcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVNlbGVjdC52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVZhcmlhbnRQcm9tcHRNb2JpbGUudnVlP3R5cGU9dGVtcGxhdGUiLCAic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL2NvbXBvbmVudHMvVkFWYXJpYW50UHJvbXB0TW9iaWxlLnZ1ZSIsICJkaXN0L1ZhcmlhbnRBbGx5RGlhbG9nL3NmYy10ZW1wbGF0ZTpFOi9naFJlcG8vWXNBcmNoaXZlcy1HYWRnZXRzL3NyYy9WYXJpYW50QWxseURpYWxvZy9BcHAudnVlP3R5cGU9dGVtcGxhdGUiLCAic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL0FwcC52dWUiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7Y3JlYXRlQXBwfSBmcm9tICd2dWUnO1xuaW1wb3J0IEFwcCBmcm9tICcuL0FwcC52dWUnO1xuXG5jb25zdCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5kb2N1bWVudC5ib2R5LmFwcGVuZChyb290KTtcbmNyZWF0ZUFwcChBcHApLm1vdW50KHJvb3QpO1xuIiwgIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQge3JlZn0gZnJvbSAndnVlJztcbmltcG9ydCB7c2V0TG9jYWxWYXJpYW50LCByZWRpcmVjdCwgVmFsaWRWYXJpYW50LCBzZXRPcHRPdXR9IGZyb20gJ2V4dC5nYWRnZXQuVmFyaWFudEFsbHknO1xuaW1wb3J0IFZBVmFyaWFudFByb21wdCBmcm9tICcuL2NvbXBvbmVudHMvVkFWYXJpYW50UHJvbXB0LnZ1ZSc7XG5pbXBvcnQgVkFWYXJpYW50UHJvbXB0TW9iaWxlIGZyb20gJy4vY29tcG9uZW50cy9WQVZhcmlhbnRQcm9tcHRNb2JpbGUudnVlJztcbmltcG9ydCB7Z2V0TW91bnRQb2ludCwgaXNNb2JpbGVEZXZpY2V9IGZyb20gJy4vbW9kdWxlcy91dGlscyc7XG5cbmNvbnN0IGlzT3BlbiA9IHJlZih0cnVlKTtcbmNvbnN0IGlzRGlzYWJsZWQgPSByZWYoZmFsc2UpO1xuY29uc3QgaXNNb2JpbGUgPSBpc01vYmlsZURldmljZSgpO1xuY29uc3QgZGVza3RvcE1vdW50UG9pbnQgPSBnZXRNb3VudFBvaW50KCk7XG5cbmZ1bmN0aW9uIHNldFZhcmlhbnQodmFyaWFudDogVmFsaWRWYXJpYW50KSB7XG5cdHNldExvY2FsVmFyaWFudCh2YXJpYW50KTtcblx0cmVkaXJlY3QodmFyaWFudCwge2ZvcmNlZDogdHJ1ZX0pO1xufVxuXG4vLyBCcm93c2VyIHN1cHBvcnQ6IGlPUyBTYWZhcmkgPCAxNVxuLy8gV29yayBhcm91bmQgU2FmYXJpIGZpcmluZyBzY3JvbGwgZXZlbnQgYXQgdW5leHBlY3RlZCBjb25kaXRpb25zIChlLmcuIHBvcHBpbmcgdXAgU2VsZWN0KVxuYWRkRXZlbnRMaXN0ZW5lcihpc01vYmlsZSA/ICd0b3VjaG1vdmUnIDogJ3Njcm9sbCcsICgpID0+IHtcblx0aWYgKCFpc0Rpc2FibGVkLnZhbHVlKSB7XG5cdFx0aXNPcGVuLnZhbHVlID0gZmFsc2U7XG5cdH1cbn0pO1xuXG5mdW5jdGlvbiBvbk9wdE91dCgpIHtcblx0c2V0T3B0T3V0KCk7XG59XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8VGVsZXBvcnQgOnRvPVwiZGVza3RvcE1vdW50UG9pbnRcIj5cblx0XHQ8VkFWYXJpYW50UHJvbXB0XG5cdFx0XHR2LWlmPVwiIWlzTW9iaWxlXCJcblx0XHRcdHYtbW9kZWw6b3Blbj1cImlzT3BlblwiXG5cdFx0XHR2LW1vZGVsOmRpc2FibGVkPVwiaXNEaXNhYmxlZFwiXG5cdFx0XHQ6YXV0by1jbG9zZT1cImZhbHNlXCJcblx0XHRcdEBvcHRvdXQ9XCJvbk9wdE91dFwiXG5cdFx0XHRAc2VsZWN0PVwic2V0VmFyaWFudFwiXG5cdFx0Lz5cblx0PC9UZWxlcG9ydD5cblxuXHQ8IS0tIFRlbGVwb3J0IHRvIGJvZHkgYmVjYXVzZSB0aGV5IGFyZSBhbHdheXMgZmxvYXRlZCBhdCBib3R0b20gLS0+XG5cdDxUZWxlcG9ydCB0bz1cImJvZHlcIj5cblx0XHQ8VkFWYXJpYW50UHJvbXB0TW9iaWxlXG5cdFx0XHR2LWlmPVwiaXNNb2JpbGVcIlxuXHRcdFx0di1tb2RlbDpvcGVuPVwiaXNPcGVuXCJcblx0XHRcdHYtbW9kZWw6ZGlzYWJsZWQ9XCJpc0Rpc2FibGVkXCJcblx0XHRcdEBvcHRvdXQ9XCJvbk9wdE91dFwiXG5cdFx0XHRAc2VsZWN0PVwic2V0VmFyaWFudFwiXG5cdFx0Lz5cblx0PC9UZWxlcG9ydD5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwibGVzc1wiPlxuQGltcG9ydCAocmVmZXJlbmNlKSAnLi9zdHlsZXMvdG9rZW5zLmxlc3MnO1xuXG4udmEtdmFyaWFudC1wcm9tcHQge1xuXHQvLyBWZWN0b3IgMjAyMiBzcGVjaWZpYyBhZGp1c3RtZW50c1xuXHQuc2tpbi12ZWN0b3ItMjAyMiAmIHtcblx0XHQvLyBDYWxjdWxhdGVkIGZyb20gVmVjdG9yIDIwMjIgc291cmNlIGNvZGVcblx0XHRAdmVjdG9yLTIwMjItaGVhZGVyLWhlaWdodDogNTBweCArIDIgKiA4cHg7XG5cdFx0bWF4LWhlaWdodDogY2FsYygxMDAlIC0gQHNwYWNpbmctdmVydGljYWwtZGlhbG9nIC0gQHZlY3Rvci0yMDIyLWhlYWRlci1oZWlnaHQpO1xuXG5cdFx0LnZlY3Rvci10b2MtYXZhaWxhYmxlLnZlY3Rvci1mZWF0dXJlLXRvYy1waW5uZWQtY2xpZW50cHJlZi0xICYsXG5cdFx0LnZlY3Rvci1mZWF0dXJlLW1haW4tbWVudS1waW5uZWQtZW5hYmxlZCAmIHtcblx0XHRcdEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMDBweCkgYW5kIChtYXgtd2lkdGg6IDEyMDBweCkge1xuXHRcdFx0XHRsZWZ0OiB1bnNldDtcblxuXHRcdFx0XHQvLyBDYWxjdWxhdGVkIGZyb20gVmVjdG9yIDIwMjIgc291cmNlIGNvZGVcblx0XHRcdFx0Ly8gSW4gdGhpcyB3aWR0aCB0aGlzIHByb21wdCB3aWxsIG5vdCBvYnNjdXJlIGFydGljbGUgY29udGVudFxuXHRcdFx0XHRAdmVjdG9yLTIwMjItbGVmdC1wYWRkaW5nOiAyLjc1ZW07XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OiAtKEB2ZWN0b3ItMjAyMi1sZWZ0LXBhZGRpbmcgLyAzICogMik7XG5cdFx0XHRcdG1heC13aWR0aDogY2FsYygxMi4yNWVtICsgMzZweCk7XG5cdFx0XHRcdHBhZGRpbmc6IEBzcGFjaW5nLTEwMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcblx0XHRcdEB2ZWN0b3ItMjAyMi1sZWZ0LXBhZGRpbmc6IDMuMjVlbTtcblx0XHRcdGxlZnQ6IHVuc2V0O1xuXHRcdFx0bWFyZ2luLWxlZnQ6IC0oQHZlY3Rvci0yMDIyLWxlZnQtcGFkZGluZyAvIDMgKiAyKTtcblx0XHRcdG1heC13aWR0aDogY2FsYygxNS43NWVtICsgMzZweCk7XG5cdFx0fVxuXHR9XG59XG48L3N0eWxlPlxuLi9tb2R1bGVzL3V0aWxzXG4iLCAiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cbmltcG9ydCB7cmVmLCB3YXRjaH0gZnJvbSAndnVlJztcbmltcG9ydCB7dHlwZSBWYWxpZFZhcmlhbnR9IGZyb20gJ2V4dC5nYWRnZXQuVmFyaWFudEFsbHknO1xuaW1wb3J0IFZBQnV0dG9uIGZyb20gJy4vVkFCdXR0b24udnVlJztcbmltcG9ydCBWQUZhZGVUcmFuc2l0aW9uIGZyb20gJy4vVkFGYWRlVHJhbnNpdGlvbi52dWUnO1xuaW1wb3J0IHVzZUkxOG4sIHtpMThuVmFyaWFudH0gZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlSTE4bic7XG5pbXBvcnQgdXNlVW5pcXVlSWQgZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlVW5pcXVlSWQnO1xuaW1wb3J0IHVzZVNodWZmbGVkVmFyaWFudCBmcm9tICcuLi9jb21wb3NhYmxlcy91c2VTaHVmZmxlZFZhcmlhbnQnO1xuaW1wb3J0IHtWQUxJRF9WQVJJQU5UUywgaW5mZXJyZWRWYXJpYW50fSBmcm9tICcuLi9tb2R1bGVzL3V0aWxzJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcy5qc29uJztcbmltcG9ydCB1c2VNb2RlbFdyYXBwZXIgZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlTW9kZWxXcmFwcGVyJztcbmltcG9ydCB1c2VEZWZhdWx0IGZyb20gJy4uL2NvbXBvc2FibGVzL3VzZURlZmF1bHQnO1xuXG5jb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhcblx0ZGVmaW5lUHJvcHM8e1xuXHRcdG9wZW46IGJvb2xlYW47XG5cdFx0ZGlzYWJsZWQ/OiBib29sZWFuO1xuXHRcdGF1dG9DbG9zZT86IGJvb2xlYW47XG5cdH0+KCksXG5cdHtcblx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0YXV0b0Nsb3NlOiBmYWxzZSxcblx0fVxuKTtcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XG5cdChlOiAndXBkYXRlOm9wZW4nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG5cdChlOiAndXBkYXRlOmRpc2FibGVkJywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuXHQoZTogJ3NlbGVjdCcsIHZhcmlhbnQ6IFZhbGlkVmFyaWFudCk6IHZvaWQ7XG5cdChlOiAnb3B0b3V0Jyk6IHZvaWQ7XG59PigpO1xuXG5jb25zdCBwcm9tcHQgPSByZWY8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbmNvbnN0IHRpdGxlSWQgPSB1c2VVbmlxdWVJZCgpO1xuY29uc3QgZGVzY0lkID0gdXNlVW5pcXVlSWQoKTtcbmNvbnN0IGlzT3BlbiA9IHVzZU1vZGVsV3JhcHBlcihwcm9wcywgZW1pdCwgJ29wZW4nKTtcbmNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNb2RlbFdyYXBwZXIocHJvcHMsIGVtaXQsICdkaXNhYmxlZCcpO1xuY29uc3QgaXNWYXJpYW50TmFycm93ZWQgPSB1c2VEZWZhdWx0KCgpID0+IGluZmVycmVkVmFyaWFudC52YWx1ZSAhPT0gbnVsbCk7XG5jb25zdCBzaHVmZmxlZFZhcmlhbnQgPSB1c2VTaHVmZmxlZFZhcmlhbnQoaXNWYXJpYW50TmFycm93ZWQpO1xuXG5mdW5jdGlvbiBvcHRPdXRBbmRDbG9zZSgpIHtcblx0ZW1pdCgnb3B0b3V0Jyk7XG5cdGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZWxlY3QodmFyaWFudDogVmFsaWRWYXJpYW50KSB7XG5cdGlzRGlzYWJsZWQudmFsdWUgPSB0cnVlO1xuXHRlbWl0KCdzZWxlY3QnLCB2YXJpYW50KTtcbn1cblxud2F0Y2gocHJvbXB0LCAoKSA9PiB7XG5cdGNvbnN0IGVsZW1lbnQgPSBwcm9tcHQudmFsdWU7XG5cdGlmIChlbGVtZW50ICE9PSBudWxsKSB7XG5cdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKGV2KSA9PiB7XG5cdFx0XHQvLyBEbyBub3QgZGlzbWlzcyBpZiBhbnkgYnV0dG9uIGlzIHByZXNzZWQgb3IgdGhlIHByb21wdCBpcyBkaXNhYmxlZFxuXHRcdFx0aWYgKGV2LmJ1dHRvbnMgPT09IDAgJiYgcHJvcHMuYXV0b0Nsb3NlICYmICFwcm9wcy5kaXNhYmxlZCkge1xuXHRcdFx0XHRpc09wZW4udmFsdWUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8VHJhbnNpdGlvbiBuYW1lPVwidmEtdmFyaWFudC1wcm9tcHRcIiBhcHBlYXI+XG5cdFx0PGRpdlxuXHRcdFx0di1pZj1cIm9wZW5cIlxuXHRcdFx0cmVmPVwicHJvbXB0XCJcblx0XHRcdDpsYW5nPVwiYHpoLSR7aTE4blZhcmlhbnR9YFwiXG5cdFx0XHRjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0XCJcblx0XHRcdHJvbGU9XCJkaWFsb2dcIlxuXHRcdFx0YXJpYS1tb2RhbD1cImZhbHNlXCJcblx0XHRcdDphcmlhLWxhYmVsbGVkYnk9XCJ0aXRsZUlkXCJcblx0XHRcdDphcmlhLWRlc2NyaWJlZGJ5PVwiZGVzY0lkXCJcblx0XHQ+XG5cdFx0XHQ8VkFCdXR0b25cblx0XHRcdFx0Y2xhc3M9XCJ2YS12YXJpYW50LXByb21wdF9fY2xvc2VcIlxuXHRcdFx0XHR3ZWlnaHQ9XCJxdWlldFwiXG5cdFx0XHRcdGljb249XCJjbG9zZVwiXG5cdFx0XHRcdDp0aXRsZT1cInVzZUkxOG4oJ2Nsb3NlJylcIlxuXHRcdFx0XHQ6YXJpYS1sYWJlbD1cInVzZUkxOG4oJ2Nsb3NlJylcIlxuXHRcdFx0XHQ6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdEBjbGljaz1cIm9wdE91dEFuZENsb3NlXCJcblx0XHRcdC8+XG5cdFx0XHQ8aDIgOmlkPVwidGl0bGVJZFwiIGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHRfX3RpdGxlIHZhLXRpdGxlXCI+XG5cdFx0XHRcdHt7IHVzZUkxOG4oaXNWYXJpYW50TmFycm93ZWQgPyAndnAuaGVhZGVyLmFsdCcgOiAndnAuaGVhZGVyJykgfX08YnIgLz5cblx0XHRcdFx0PFZBRmFkZVRyYW5zaXRpb24+XG5cdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdHYtaWY9XCIhaXNWYXJpYW50TmFycm93ZWRcIlxuXHRcdFx0XHRcdFx0OmtleT1cInNodWZmbGVkVmFyaWFudFwiXG5cdFx0XHRcdFx0XHQ6bGFuZz1cImB6aC0ke3NodWZmbGVkVmFyaWFudH1gXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHRfX3RpdGxlX192YXJpYW50XCJcblx0XHRcdFx0XHRcdD57eyBtZXNzYWdlcy52YXJpYW50c1tzaHVmZmxlZFZhcmlhbnRdIH19PC9zcGFuXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHQ8L1ZBRmFkZVRyYW5zaXRpb24+XG5cdFx0XHQ8L2gyPlxuXHRcdFx0PHAgOmlkPVwiZGVzY0lkXCIgY2xhc3M9XCJ2YS12YXJpYW50LXByb21wdF9fZGVzYyB2YS1wYXJhXCI+XG5cdFx0XHRcdHt7IHVzZUkxOG4oaXNWYXJpYW50TmFycm93ZWQgPyAndnAubWFpbi5hbHQnIDogJ3ZwLm1haW4nKSB9fVxuXHRcdFx0PC9wPlxuXHRcdFx0PGRpdiBjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0X19vcHRpb25zXCI+XG5cdFx0XHRcdDwhLS0gaW5mZXJyZWRWYXJpYW50IGlzIG5vbi1udWxsLCBndWFyZGVkIGJ5IGlzVmFyaWFudE5hcnJvd2VkIC0tPlxuXHRcdFx0XHQ8VkFCdXR0b25cblx0XHRcdFx0XHR2LWZvcj1cInZhcmlhbnQgaW4gaXNWYXJpYW50TmFycm93ZWQgJiYgaW5mZXJyZWRWYXJpYW50ICE9PSBudWxsXG5cdFx0XHRcdFx0XHQ/IFtpbmZlcnJlZFZhcmlhbnRdXG5cdFx0XHRcdFx0XHQ6IFZBTElEX1ZBUklBTlRTXCJcblx0XHRcdFx0XHQ6a2V5PVwidmFyaWFudFwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJ2YS12YXJpYW50LXByb21wdF9fb3B0aW9uc19fYnV0dG9uXCJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJ7J3ZhLXZhcmlhbnQtcHJvbXB0X19vcHRpb25zX19idXR0b24tLXByaW1hcnknOiBpc1ZhcmlhbnROYXJyb3dlZH1cIlxuXHRcdFx0XHRcdGluZGljYXRvcj1cImFycm93TmV4dFwiXG5cdFx0XHRcdFx0d2VpZ2h0PVwicXVpZXRcIlxuXHRcdFx0XHRcdGFjdGlvbj1cInByb2dyZXNzaXZlXCJcblx0XHRcdFx0XHQ6bGFuZz1cInZhcmlhbnRcIlxuXHRcdFx0XHRcdDpkaXNhYmxlZD1cImRpc2FibGVkXCJcblx0XHRcdFx0XHRAY2xpY2s9XCJzZWxlY3QodmFyaWFudClcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3sgbWVzc2FnZXMudmFyaWFudHNbdmFyaWFudF0gfX1cblx0XHRcdFx0PC9WQUJ1dHRvbj5cblx0XHRcdFx0PFZBQnV0dG9uXG5cdFx0XHRcdFx0di1pZj1cImlzVmFyaWFudE5hcnJvd2VkXCJcblx0XHRcdFx0XHRjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0X19vcHRpb25zX19idXR0b25cIlxuXHRcdFx0XHRcdGluZGljYXRvcj1cImFycm93TmV4dFwiXG5cdFx0XHRcdFx0d2VpZ2h0PVwicXVpZXRcIlxuXHRcdFx0XHRcdGFjdGlvbj1cInByb2dyZXNzaXZlXCJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0QGNsaWNrPVwiaXNWYXJpYW50TmFycm93ZWQgPSBmYWxzZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eyB1c2VJMThuKCd2cC5idXR0b24ub3RoZXInKSB9fVxuXHRcdFx0XHQ8L1ZBQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8Zm9vdGVyIGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHRfX2Zvb3RlclwiPlxuXHRcdFx0XHQ8cCBjbGFzcz1cInZhLXBhcmEgdmEtcGFyYS0tc3VidGxlXCI+XG5cdFx0XHRcdFx0e3sgdXNlSTE4bigndnAubWFpbi5leHQnKSB9fVxuXHRcdFx0XHQ8L3A+XG5cdFx0XHQ8L2Zvb3Rlcj5cblx0XHQ8L2Rpdj5cblx0PC9UcmFuc2l0aW9uPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZCBsYW5nPVwibGVzc1wiPlxuQGltcG9ydCAocmVmZXJlbmNlKSAnLi4vc3R5bGVzL21peGlucy5sZXNzJztcbkBpbXBvcnQgKHJlZmVyZW5jZSkgJy4uL3N0eWxlcy90b2tlbnMubGVzcyc7XG5cbi52YS10aXRsZSB7XG5cdGJvcmRlcjogMDsgLy8gUmVzZXRcblx0cGFkZGluZzogMDsgLy8gUmVzZXRcblx0b3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcblxuXHRmb250LXNpemU6IEBmb250LXNpemUteHgtbGFyZ2U7XG5cdGZvbnQtd2VpZ2h0OiBAZm9udC13ZWlnaHQtYm9sZDtcblx0bWFyZ2luOiBAc3BhY2luZy01MCBAc3BhY2luZy0wO1xuXHRjb2xvcjogQGNvbG9yLWJhc2U7XG59XG5cbi52YS1wYXJhIHtcblx0b3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcblx0bWFyZ2luLXRvcDogQHNwYWNpbmctNTA7XG5cdG1hcmdpbi1ib3R0b206IEBzcGFjaW5nLTUwO1xuXHRjb2xvcjogQGNvbG9yLWJhc2U7XG5cblx0Ji0tc3VidGxlIHtcblx0XHRjb2xvcjogQGNvbG9yLXN1YnRsZTtcblx0XHRmb250LXNpemU6IEBmb250LXNpemUteC1zbWFsbDtcblx0XHRtYXJnaW4tYm90dG9tOiBAc3BhY2luZy0zNTtcblx0fVxufVxuXG4udmEtdmFyaWFudC1wcm9tcHQge1xuXHRib3gtc2l6aW5nOiBAYm94LXNpemluZy1iYXNlO1xuXHR6LWluZGV4OiBAei1pbmRleC1vdmVybGF5O1xuXHRwYWRkaW5nOiBAc3BhY2luZy0xMDAgQHNwYWNpbmctMTUwO1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGxlZnQ6IEBzcGFjaW5nLWhvcml6b250YWwtZGlhbG9nO1xuXHRib3R0b206IEBzcGFjaW5nLXZlcnRpY2FsLWRpYWxvZztcblx0d2lkdGg6IGNhbGMoMTAwJSAtIEBzcGFjaW5nLWhvcml6b250YWwtZGlhbG9nICogMik7XG5cdG1heC13aWR0aDogMThlbTtcblx0bWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDJlbSk7XG5cblx0b3ZlcmZsb3c6IGF1dG87XG5cdG92ZXJzY3JvbGwtYmVoYXZpb3I6IG5vbmU7XG5cdGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kLWNvbG9yLWJhc2U7XG5cdGJvcmRlcjogQGJvcmRlci1iYXNlO1xuXHRib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuXHRib3gtc2hhZG93OiBAYm94LXNoYWRvdy1kcm9wLW1lZGl1bTtcblx0Zm9udC1mYW1pbHk6IEBmb250LWZhbWlseS1zeXN0ZW0tc2Fucztcblx0Zm9udC1zaXplOiAxcmVtOyAvLyBSZXNldFxuXHRsaW5lLWhlaWdodDogbm9ybWFsOyAvLyBSZXNldFxuXG5cdCZfX2Nsb3NlIHtcblx0XHRwYWRkaW5nOiBAc3BhY2luZy1zaG9ydGhhbmQtYnV0dG9uLWljb24tb25seTtcblx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0bWFyZ2luLXRvcDogQHNwYWNpbmctNTA7XG5cdFx0bWFyZ2luLXJpZ2h0OiAtKEBzcGFjaW5nLWhvcml6b250YWwtYnV0dG9uLWljb24tb25seSArIDFweCk7XG5cdH1cblxuXHQmX190aXRsZSB7XG5cdFx0Jl9fdmFyaWFudCB7XG5cdFx0XHRjb2xvcjogQGNvbG9yLXByb2dyZXNzaXZlO1xuXHRcdH1cblx0fVxuXG5cdCZfX29wdGlvbnMge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdG1hcmdpbjogQHNwYWNpbmctNzUgQHNwYWNpbmctMDtcblxuXHRcdGJvcmRlcjogMXB4IHNvbGlkIEBib3JkZXItY29sb3ItYmFzZTtcblx0XHRib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG5cdFx0Jl9fYnV0dG9uIHtcblx0XHRcdGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1zbWFsbDtcblx0XHRcdGNvbG9yOiBAY29sb3ItYmFzZTtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kLWNvbG9yLWludGVyYWN0aXZlLXN1YnRsZTtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDA7XG5cblx0XHRcdCYtLXByaW1hcnkge1xuXHRcdFx0XHRjb2xvcjogQGNvbG9yLXByb2dyZXNzaXZlO1xuXHRcdFx0fVxuXG5cdFx0XHQmOmhvdmVyLFxuXHRcdFx0JjphY3RpdmUge1xuXHRcdFx0XHRib3JkZXItY29sb3I6IEBib3JkZXItY29sb3ItdHJhbnNwYXJlbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qIFByb21wdCB0cmFuc2l0aW9uIGVmZmVjdCAqL1xuLnZhLXZhcmlhbnQtcHJvbXB0LWVudGVyLWFjdGl2ZSxcbi52YS12YXJpYW50LXByb21wdC1sZWF2ZS1hY3RpdmUge1xuXHR0cmFuc2l0aW9uLXByb3BlcnR5OiBAdHJhbnNpdGlvbi1wcm9wZXJ0eS1mYWRlO1xuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiBAdHJhbnNpdGlvbi1kdXJhdGlvbi1tZWRpdW07XG5cdHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24tc3lzdGVtO1xufVxuXG4udmEtdmFyaWFudC1wcm9tcHQtZW50ZXItZnJvbSxcbi52YS12YXJpYW50LXByb21wdC1sZWF2ZS10byB7XG5cdG9wYWNpdHk6IDA7XG59XG48L3N0eWxlPlxuIiwgImltcG9ydCB7IGNyZWF0ZUNvbW1lbnRWTm9kZSBhcyBfY3JlYXRlQ29tbWVudFZOb2RlLCBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSBbXCJ3aWR0aFwiLCBcImhlaWdodFwiXVxuY29uc3QgX2hvaXN0ZWRfMiA9IHsga2V5OiAwIH1cbmNvbnN0IF9ob2lzdGVkXzMgPSAvKiNfX1BVUkVfXyovX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIk0yMCAxOGgtMS40NGEuNjEuNjEgMCAwMS0uNC0uMTIuODEuODEgMCAwMS0uMjMtLjMxTDE3IDE1aC01bC0xIDIuNTRhLjc3Ljc3IDAgMDEtLjIyLjMuNTkuNTkgMCAwMS0uNC4xNEg5bDQuNTUtMTEuNDdoMS44OXptLTMuNTMtNC4zMUwxNC44OSA5LjVhMTEuNjIgMTEuNjIgMCAwMS0uMzktMS4yNHEtLjA5LjM3LS4xOS42OWwtLjE5LjU2LTEuNTggNC4xOXptLTYuMy0xLjU4YTEzLjQzIDEzLjQzIDAgMDEtMi45MS0xLjQxIDExLjQ2IDExLjQ2IDAgMDAyLjgxLTUuMzdIMTJWNEg3LjMxYTQgNCAwIDAwLS4yLS41NkM2Ljg3IDIuNzkgNi42IDIgNi42IDJsLTEuNDcuNXMuNC44OS42IDEuNUgwdjEuMzNoMi4xNUExMS4yMyAxMS4yMyAwIDAwNSAxMC43YTE3LjE5IDE3LjE5IDAgMDEtNSAyLjFxLjU2LjgyLjg3IDEuMzhhMjMuMjggMjMuMjggMCAwMDUuMjItMi41MSAxNS42NCAxNS42NCAwIDAwMy41NiAxLjc3ek0zLjYzIDUuMzNoNC45MWE4LjExIDguMTEgMCAwMS0yLjQ1IDQuNDUgOS4xMSA5LjExIDAgMDEtMi40Ni00LjQ1elwiIH0sIG51bGwsIC0xIC8qIEhPSVNURUQgKi8pXG5jb25zdCBfaG9pc3RlZF80ID0geyBrZXk6IDEgfVxuY29uc3QgX2hvaXN0ZWRfNSA9IC8qI19fUFVSRV9fKi9fY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7IGQ6IFwibTQuMzQgMi45MyAxMi43MyAxMi43My0xLjQxIDEuNDFMMi45MyA0LjM1elwiIH0sIG51bGwsIC0xIC8qIEhPSVNURUQgKi8pXG5jb25zdCBfaG9pc3RlZF82ID0gLyojX19QVVJFX18qL19jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHsgZDogXCJNMTcuMDcgNC4zNCA0LjM0IDE3LjA3bC0xLjQxLTEuNDFMMTUuNjYgMi45M3pcIiB9LCBudWxsLCAtMSAvKiBIT0lTVEVEICovKVxuY29uc3QgX2hvaXN0ZWRfNyA9IFtcbiAgX2hvaXN0ZWRfNSxcbiAgX2hvaXN0ZWRfNlxuXVxuY29uc3QgX2hvaXN0ZWRfOCA9IHsga2V5OiAyIH1cbmNvbnN0IF9ob2lzdGVkXzkgPSAvKiNfX1BVUkVfXyovX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIk04LjU5IDMuNDIgMTQuMTcgOUgydjJoMTIuMTdsLTUuNTggNS41OUwxMCAxOGw4LTgtOC04elwiIH0sIG51bGwsIC0xIC8qIEhPSVNURUQgKi8pXG5jb25zdCBfaG9pc3RlZF8xMCA9IFtcbiAgX2hvaXN0ZWRfOVxuXVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCB7XG4gICAgY2xhc3M6IFwidmEtaWNvbi1idXR0b25fX2ljb25cIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwieG1sbnM6eGxpbmtcIjogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6ICRwcm9wcy5zaXplLFxuICAgIGhlaWdodDogJHByb3BzLnNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjAgMjBcIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG4gIH0sIFtcbiAgICAoJHByb3BzLmljb24gPT09ICdsYW5nJylcbiAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImdcIiwgX2hvaXN0ZWRfMiwgW1xuICAgICAgICAgIF9jcmVhdGVDb21tZW50Vk5vZGUoXCIgZXNsaW50LWRpc2FibGUgXCIpLFxuICAgICAgICAgIF9ob2lzdGVkXzMsXG4gICAgICAgICAgX2NyZWF0ZUNvbW1lbnRWTm9kZShcIiBlc2xpbnQtZW5hYmxlIFwiKVxuICAgICAgICBdKSlcbiAgICAgIDogKCRwcm9wcy5pY29uID09PSAnY2xvc2UnKVxuICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJnXCIsIF9ob2lzdGVkXzQsIFsuLi5faG9pc3RlZF83XSkpXG4gICAgICAgIDogKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImdcIiwgX2hvaXN0ZWRfOCwgWy4uLl9ob2lzdGVkXzEwXSkpXG4gIF0sIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzEpKVxufSIsICJpbXBvcnQgc2NyaXB0IGZyb20gXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBSWNvbi52dWU/dHlwZT1zY3JpcHRcIjtpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQUljb24udnVlP3R5cGU9dGVtcGxhdGVcIjsgc2NyaXB0LnJlbmRlciA9IHJlbmRlcjtzY3JpcHQuX19maWxlID0gXCJzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQUljb24udnVlXCI7ZXhwb3J0IGRlZmF1bHQgc2NyaXB0OyIsICJpbXBvcnQgeyBvcGVuQmxvY2sgYXMgX29wZW5CbG9jaywgY3JlYXRlQmxvY2sgYXMgX2NyZWF0ZUJsb2NrLCBjcmVhdGVDb21tZW50Vk5vZGUgYXMgX2NyZWF0ZUNvbW1lbnRWTm9kZSwgcmVuZGVyU2xvdCBhcyBfcmVuZGVyU2xvdCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2ssIG5vcm1hbGl6ZUNsYXNzIGFzIF9ub3JtYWxpemVDbGFzcywgcHVzaFNjb3BlSWQgYXMgX3B1c2hTY29wZUlkLCBwb3BTY29wZUlkIGFzIF9wb3BTY29wZUlkIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF93aXRoU2NvcGVJZCA9IG4gPT4gKF9wdXNoU2NvcGVJZChcImRhdGEtdi1iYjc3MzRiMVwiKSxuPW4oKSxfcG9wU2NvcGVJZCgpLG4pXG5jb25zdCBfaG9pc3RlZF8xID0ge1xuICBrZXk6IDEsXG4gIGNsYXNzOiBcInZhLWJ1dHRvbl9fdGV4dFwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiYnV0dG9uXCIsIHtcbiAgICBjbGFzczogX25vcm1hbGl6ZUNsYXNzKFtcInZhLWJ1dHRvblwiLCB7XG5cdFx0XHQndmEtYnV0dG9uLS1hY3Rpb24tcHJvZ3Jlc3NpdmUnOiAkcHJvcHMuYWN0aW9uID09PSAncHJvZ3Jlc3NpdmUnLFxuXHRcdFx0J3ZhLWJ1dHRvbi0td2VpZ2h0LXF1aWV0JzogJHByb3BzLndlaWdodCA9PT0gJ3F1aWV0Jyxcblx0XHR9XSksXG4gICAgb25DbGljazogX2NhY2hlWzBdIHx8IChfY2FjaGVbMF0gPSAkZXZlbnQgPT4gKF9jdHguJGVtaXQoJ2NsaWNrJykpKVxuICB9LCBbXG4gICAgKCRwcm9wcy5pY29uICE9PSB1bmRlZmluZWQpXG4gICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jaygkc2V0dXBbXCJWQUljb25cIl0sIHtcbiAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgY2xhc3M6IFwidmEtYnV0dG9uX19pY29uXCIsXG4gICAgICAgICAgaWNvbjogJHByb3BzLmljb25cbiAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wiaWNvblwiXSkpXG4gICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgIChfY3R4LiRzbG90c1snZGVmYXVsdCddKVxuICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwic3BhblwiLCBfaG9pc3RlZF8xLCBbXG4gICAgICAgICAgX3JlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiZGVmYXVsdFwiLCB7fSwgdW5kZWZpbmVkLCB0cnVlKVxuICAgICAgICBdKSlcbiAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgKCRwcm9wcy5pbmRpY2F0b3IgIT09IHVuZGVmaW5lZClcbiAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUJsb2NrKCRzZXR1cFtcIlZBSWNvblwiXSwge1xuICAgICAgICAgIGtleTogMixcbiAgICAgICAgICBjbGFzczogXCJ2YS1idXR0b25fX2luZGljYXRvclwiLFxuICAgICAgICAgIGljb246ICRwcm9wcy5pbmRpY2F0b3IsXG4gICAgICAgICAgc2l6ZTogMTZcbiAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wiaWNvblwiXSkpXG4gICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpXG4gIF0sIDIgLyogQ0xBU1MgKi8pKVxufSIsICJpbXBvcnQgc2NyaXB0IGZyb20gXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBQnV0dG9uLnZ1ZT90eXBlPXNjcmlwdFwiO2ltcG9ydCBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFCdXR0b24udnVlP3R5cGU9c3R5bGUmaW5kZXg9MFwiO2ltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBQnV0dG9uLnZ1ZT90eXBlPXRlbXBsYXRlXCI7IHNjcmlwdC5yZW5kZXIgPSByZW5kZXI7c2NyaXB0Ll9fZmlsZSA9IFwic3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFCdXR0b24udnVlXCI7c2NyaXB0Ll9fc2NvcGVJZCA9IFwiZGF0YS12LWJiNzczNGIxXCI7ZXhwb3J0IGRlZmF1bHQgc2NyaXB0OyIsICJpbXBvcnQgeyByZW5kZXJTbG90IGFzIF9yZW5kZXJTbG90LCBUcmFuc2l0aW9uIGFzIF9UcmFuc2l0aW9uLCB3aXRoQ3R4IGFzIF93aXRoQ3R4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jaywgY3JlYXRlQmxvY2sgYXMgX2NyZWF0ZUJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlKSB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soX1RyYW5zaXRpb24sIHtcbiAgICBuYW1lOiBcInZhLWZhZGVcIixcbiAgICBtb2RlOiBcIm91dC1pblwiXG4gIH0sIHtcbiAgICBkZWZhdWx0OiBfd2l0aEN0eCgoKSA9PiBbXG4gICAgICBfcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJkZWZhdWx0XCIsIHt9LCB1bmRlZmluZWQsIHRydWUpXG4gICAgXSksXG4gICAgXzogMyAvKiBGT1JXQVJERUQgKi9cbiAgfSkpXG59IiwgImNvbnN0IHNjcmlwdCA9IHt9O2ltcG9ydCBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFGYWRlVHJhbnNpdGlvbi52dWU/dHlwZT1zdHlsZSZpbmRleD0wXCI7aW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFGYWRlVHJhbnNpdGlvbi52dWU/dHlwZT10ZW1wbGF0ZVwiOyBzY3JpcHQucmVuZGVyID0gcmVuZGVyO3NjcmlwdC5fX2ZpbGUgPSBcInNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBRmFkZVRyYW5zaXRpb24udnVlXCI7c2NyaXB0Ll9fc2NvcGVJZCA9IFwiZGF0YS12LWJiOWM1NzUxXCI7ZXhwb3J0IGRlZmF1bHQgc2NyaXB0OyIsICJpbXBvcnQge2NvbXB1dGVkfSBmcm9tICd2dWUnO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzLmpzb24nO1xuaW1wb3J0IHt3Z1VzZXJWYXJpYW50fSBmcm9tICcuLi9tb2R1bGVzL3V0aWxzJztcblxuLy8gSW50ZXJmYWNlIHZhcmlhbnQgb2YgdmFyaWFudCBwcm9tcHRcbmNvbnN0IGkxOG5WYXJpYW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRpZiAod2dVc2VyVmFyaWFudC52YWx1ZSA9PT0gJ3poJykge1xuXHRcdC8vIE5vIGNvbnZlcnNpb246IHVzZSByYW5kb21seSBzZWxlY3RlZCB2YXJpYW50XG5cdFx0cmV0dXJuIE1hdGgucmFuZG9tKCkgPiAwLjUgPyAnaGFucycgOiAnaGFudCc7XG5cdH1cblx0aWYgKFsnemgtaGFudCcsICd6aC10dycsICd6aC1oaycsICd6aC1tbyddLmluY2x1ZGVzKHdnVXNlclZhcmlhbnQudmFsdWUpKSB7XG5cdFx0cmV0dXJuICdoYW50Jztcblx0fVxuXG5cdHJldHVybiAnaGFucyc7XG59KTtcblxuZnVuY3Rpb24gdXNlSTE4bihrZXk6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IGN1cnJlbnRNc2dzR3JvdXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBtZXNzYWdlc1tpMThuVmFyaWFudC52YWx1ZV07XG5cdHJldHVybiBjdXJyZW50TXNnc0dyb3VwW2tleV0gPz8ga2V5O1xufVxuXG5leHBvcnQge3VzZUkxOG4gYXMgZGVmYXVsdCwgaTE4blZhcmlhbnR9O1xuIiwgIntcblx0XCJ2YXJpYW50c1wiOiB7XG5cdFx0XCJ6aC1jblwiOiBcIuS4reWbveWkp+mZhueugOS9k1wiLFxuXHRcdFwiemgtc2dcIjogXCLmlrDliqDlnaHnroDkvZNcIixcblx0XHRcInpoLW15XCI6IFwi6ams5p2l6KW/5Lqa566A5L2TXCIsXG5cdFx0XCJ6aC1oa1wiOiBcIuS4reWci+mmmea4r+e5gemrlFwiLFxuXHRcdFwiemgtbW9cIjogXCLkuK3lnIvmvrPploDnuYHpq5RcIixcblx0XHRcInpoLXR3XCI6IFwi5Lit5ZyL6Ie654Gj57mB6auUXCJcblx0fSxcblx0XCJoYW5zXCI6IHtcblx0XHRcInNwYWNlXCI6IFwiXCIsXG5cdFx0XCJjbG9zZVwiOiBcIuWFs+mXrVwiLFxuXHRcdFwidnAuaGVhZGVyXCI6IFwi5oiR5Lus5pSv5oyBXCIsXG5cdFx0XCJ2cC5oZWFkZXIuYWx0XCI6IFwi6K6w5L2P5q2k5Y+Y5L2T77yfXCIsXG5cdFx0XCJ2cC5tYWluXCI6IFwi6YCJ5Y+W5YaF5a6555qE6K+t6KiA5Y+Y5L2TXCIsXG5cdFx0XCJ2cC5tYWluLmFsdFwiOiBcIuS7peWQjumDveS9v+eUqOatpOWPmOS9k+WRiOeOsOWGheWuuVwiLFxuXHRcdFwidnAubWFpbi5leHRcIjogXCLkv53lrZjmgqjlgY/lpb3nmoTkuK3mlofor63oqIDlj5jkvZPvvIzku6Xpgb/lhY3mmL7npLrnroDnuYHmt7fmnYLnmoTlhoXlrrnvvIzmj5DkvpvmnIDkvbPnmoTpmIXor7vkvZPpqozjgIJcIixcblx0XHRcInZwLmJ1dHRvbi5va1wiOiBcIuehruWumlwiLFxuXHRcdFwidnAuYnV0dG9uLm90aGVyXCI6IFwi5YW25LuWXCJcblx0fSxcblx0XCJoYW50XCI6IHtcblx0XHRcInNwYWNlXCI6IFwiXCIsXG5cdFx0XCJjbG9zZVwiOiBcIumXnOmWiVwiLFxuXHRcdFwidnAuaGVhZGVyXCI6IFwi5oiR5YCR5pSv5o+0XCIsXG5cdFx0XCJ2cC5oZWFkZXIuYWx0XCI6IFwi6KiY5L2P5q2k6K6K6auU77yfXCIsXG5cdFx0XCJ2cC5tYWluXCI6IFwi6YG45Y+W5YWn5a6555qE6Kqe6KiA6K6K6auUXCIsXG5cdFx0XCJ2cC5tYWluLmFsdFwiOiBcIuS7peW+jOmDveS9v+eUqOatpOiuiumrlOWRiOePvuWFp+WuuVwiLFxuXHRcdFwidnAubWFpbi5leHRcIjogXCLlhLLlrZjmgqjlgY/lpb3nmoTkuK3mlofoqp7oqIDororpq5TvvIzku6Xpgb/lhY3poa/npLrnsKHnuYHmt7fpm5znmoTlhaflrrnvvIzmj5DkvpvmnIDkvbPnmoTplrHoroDpq5TpqZfjgIJcIixcblx0XHRcInZwLmJ1dHRvbi5va1wiOiBcIueiuuWumlwiLFxuXHRcdFwidnAuYnV0dG9uLm90aGVyXCI6IFwi5YW25LuWXCJcblx0fVxufVxuIiwgImltcG9ydCB7dHlwZSBWYWxpZFZhcmlhbnR9IGZyb20gJ2V4dC5nYWRnZXQuVmFyaWFudEFsbHknO1xuaW1wb3J0IHtjb21wdXRlZCwgcmVmfSBmcm9tICd2dWUnO1xuXG5jb25zdCBWQUxJRF9WQVJJQU5UUyA9IFsnemgtY24nLCAnemgtc2cnLCAnemgtbXknLCAnemgtdHcnLCAnemgtaGsnLCAnemgtbW8nXSBhcyBjb25zdDtcblxuLy8gV3JhcCB3Z1VzZXJWYXJpYW50IGluIGEgcmVmIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4vLyBJdCBoYXMgbm8gcmVhY3Rpdml0eSBpbiBwcm9kdWN0aW9uLiAoY2hhbmdlcyB0byB3Z1VzZXJWYXJpYW50IHdpbGwgbm90IGJlIHJlZmxlY3RlZClcbi8vIHdnVXNlclZhcmlhbnQgY2FuIGJlIG51bGwsIHNvIGZhbGxzIGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nLlxuY29uc3Qgd2dVc2VyVmFyaWFudCA9IHJlZihtdy5jb25maWcuZ2V0KCd3Z1VzZXJWYXJpYW50JykgPz8gJycpO1xuXG5mdW5jdGlvbiBpc01vYmlsZURldmljZSgpOiBib29sZWFuIHtcblx0Ly8gQnJvd3NlciBzdXBwb3J0OlxuXHQvLyBDaHJvbWl1bSBvbiBzb21lIEFuZHJvaWQgZGV2aWNlIChlLmcuIFNhbXN1bmcpIGhhcyBcIihob3ZlcjogaG92ZXIpXCIgc2V0XG5cdC8vIFNvIGNoZWNrIHBvaW50ZXIgdG9nZXRoZXJcblx0cmV0dXJuIG1hdGNoTWVkaWEoJyhob3Zlcjogbm9uZSksIChwb2ludGVyOiBjb2Fyc2UpJykubWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gZ2V0TW91bnRQb2ludCgpOiBFbGVtZW50IHtcblx0c3dpdGNoIChtdy5jb25maWcuZ2V0KCdza2luJykpIHtcblx0XHRjYXNlICd2ZWN0b3ItMjAyMic6XG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm13LXBhZ2UtY29udGFpbmVyJylbMF0gPz8gZG9jdW1lbnQuYm9keTtcblx0XHRjYXNlICdnb25nYmknOlxuXHRcdFx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtdy1jb250ZW50LWJsb2NrJykgPz8gZG9jdW1lbnQuYm9keTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGRvY3VtZW50LmJvZHk7XG5cdH1cbn1cblxuY29uc3QgaW5mZXJyZWRWYXJpYW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRpZiAoKFZBTElEX1ZBUklBTlRTIGFzIFJlYWRvbmx5QXJyYXk8c3RyaW5nPikuaW5jbHVkZXMod2dVc2VyVmFyaWFudC52YWx1ZSkpIHtcblx0XHRyZXR1cm4gd2dVc2VyVmFyaWFudC52YWx1ZSBhcyBWYWxpZFZhcmlhbnQ7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59KTtcblxuLyoqXG4gKiBTaHVmZmxlIGJldHdlZW4gYWxsIHZhbGlkIHZhcmlhbnRzLlxuICpcbiAqIEBwYXJhbSBsYXN0IGxhc3Qgc2h1ZmZsZWQgdmFyaWFudCwgdXNlZCB0byBwcmV2ZW50IGR1cGxpY2F0aW9uc1xuICogQHJldHVybnMgc2h1ZmZsZWQgdmFyaWFudFxuICovXG5mdW5jdGlvbiBzaHVmZmxlVmFyaWFudChsYXN0PzogVmFsaWRWYXJpYW50KTogVmFsaWRWYXJpYW50IHtcblx0Y29uc3QgdGFyZ2V0QXJyYXkgPSBbLi4uVkFMSURfVkFSSUFOVFNdLmZpbHRlcigoaSkgPT4ge1xuXHRcdHJldHVybiBpICE9PSBsYXN0O1xuXHR9KTtcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0YXJnZXRBcnJheS5sZW5ndGgpO1xuXHRyZXR1cm4gdGFyZ2V0QXJyYXlbcmFuZG9tSW5kZXhdITtcbn1cblxuZXhwb3J0IHtWQUxJRF9WQVJJQU5UUywgd2dVc2VyVmFyaWFudCwgaXNNb2JpbGVEZXZpY2UsIGdldE1vdW50UG9pbnQsIGluZmVycmVkVmFyaWFudCwgc2h1ZmZsZVZhcmlhbnR9O1xuIiwgImxldCBjb3VudGVyID0gMDtcblxuLyoqXG4gKiBSZXR1cm4gYSB1bmlxdWUgZWxlbWVudCBJRCBvbiBlYWNoIGNhbGwuXG4gKlxuICogQHJldHVybnMgaWRcbiAqL1xuZnVuY3Rpb24gdXNlVW5pcXVlSWQoKTogc3RyaW5nIHtcblx0cmV0dXJuIGB2YS0ke2NvdW50ZXIrK31gO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VVbmlxdWVJZDtcbiIsICJpbXBvcnQge1JlZiwgcmVmLCB3YXRjaH0gZnJvbSAndnVlJztcbmltcG9ydCB7dHlwZSBWYWxpZFZhcmlhbnR9IGZyb20gJ2V4dC5nYWRnZXQuVmFyaWFudEFsbHknO1xuaW1wb3J0IHtpbmZlcnJlZFZhcmlhbnQsIHNodWZmbGVWYXJpYW50fSBmcm9tICcuLi9tb2R1bGVzL3V0aWxzJztcblxuY29uc3QgSU5URVJWQUwgPSAzICogMTAwMDtcblxuLyoqXG4gKiBSZXR1cm4gYSByZWYgd2hpY2ggc2h1ZmZsZSBiZXR3ZWVuIGFsbCBwb3NzaWJsZSB2YXJpYW50cy5cbiAqXG4gKiBAcGFyYW0gaXNGcmVlemVkIHNob3VsZCBzaHVmZmxpbmcgcGF1c2Ugb3Igbm90XG4gKi9cbmZ1bmN0aW9uIHVzZVNodWZmbGVkVmFyaWFudChpc0ZyZWV6ZWQ6IFJlZjxib29sZWFuPik6IFJlZjxWYWxpZFZhcmlhbnQ+IHtcblx0Y29uc3QgcmVzdWx0ID0gcmVmPFZhbGlkVmFyaWFudD4oc2h1ZmZsZVZhcmlhbnQoKSk7XG5cdGxldCBpZDogbnVtYmVyO1xuXG5cdHdhdGNoKFxuXHRcdGlzRnJlZXplZCxcblx0XHQobmV3VmFsdWUpID0+IHtcblx0XHRcdGlmIChuZXdWYWx1ZSkge1xuXHRcdFx0XHRjbGVhckludGVydmFsKGlkKTtcblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBmcmVlemUgYXQgaW5mZXJyZWQgdmFyaWFudCBhdCBhIGJlc3QgZWZmb3J0XG5cdFx0XHRcdC8vIFRoaXMgc2hvdWxkIGJlIG1vc3QgY2FzZXNcblx0XHRcdFx0cmVzdWx0LnZhbHVlID0gaW5mZXJyZWRWYXJpYW50LnZhbHVlID8/IHNodWZmbGVWYXJpYW50KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdFx0cmVzdWx0LnZhbHVlID0gc2h1ZmZsZVZhcmlhbnQocmVzdWx0LnZhbHVlKTtcblx0XHRcdFx0fSwgSU5URVJWQUwpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e2ltbWVkaWF0ZTogdHJ1ZX1cblx0KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VTaHVmZmxlZFZhcmlhbnQ7XG4iLCAiaW1wb3J0IHtXcml0YWJsZUNvbXB1dGVkUmVmLCBjb21wdXRlZH0gZnJvbSAndnVlJztcblxuLyoqXG4gKiBSZXR1cm4gYSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcCB2YWx1ZSB3aGVuIGlzIGFjY2Vzc2VkXG4gKiBhbmQgZmlyZXMgYW4gZXZlbnQgd2hlbiBpcyBzZXQuIFVzZWQgd2l0aCB2LW1vZGVsLlxuICpcbiAqIEBwYXJhbSBwcm9wcyBwcm9wcyBmaWVsZCBvZiBhIGNvbXBvbmVudFxuICogQHBhcmFtIGVtaXQgZW1pdCBmdW5jdGlvbiBvZiBhIGNvbXBvbmVudFxuICogQHBhcmFtIG5hbWUgbmFtZSBvZiB0aGUgcHJvcFxuICogQHJldHVybiB3cmFwcGVkIGNvbXB1dGVyIHByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIHVzZU1vZGVsV3JhcHBlcjxUIGV4dGVuZHMgc3RyaW5nLCBQIGV4dGVuZHMgUmVjb3JkPFQsIHVua25vd24+Pihcblx0cHJvcHM6IFAsXG5cdGVtaXQ6IChldmVudDogYHVwZGF0ZToke1R9YCwgdmFsdWU6IFBbVF0pID0+IHZvaWQsXG5cdG5hbWU6IFQgPSAnbW9kZWxWYWx1ZScgYXMgVFxuKTogV3JpdGFibGVDb21wdXRlZFJlZjxQW1RdPiB7XG5cdHJldHVybiBjb21wdXRlZCh7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHByb3BzW25hbWVdO1xuXHRcdH0sXG5cdFx0c2V0KHZhbHVlKSB7XG5cdFx0XHRlbWl0KGB1cGRhdGU6JHtuYW1lfWAsIHZhbHVlKTtcblx0XHR9LFxuXHR9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlTW9kZWxXcmFwcGVyO1xuIiwgImltcG9ydCB7UmVmLCBXYXRjaFNvdXJjZSwgY29tcHV0ZWQsIHNoYWxsb3dSZWYsIHdhdGNofSBmcm9tICd2dWUnO1xuXG4vKipcbiAqIENyZWF0ZSBhIHJlZiB0aGF0LCBjYW4gYmUgaW5kZXBlbmRlbnRseSB1cGRhdGVkLCBidXQgd2hlbiBpdHMgZGVmYXVsdFxuICogdmFsdWUgY2hhbmdlcywgaXQgaXMgcmVzdG9yZWQgdG8gaXRzIChuZXcpIGRlZmF1bHQgdmFsdWUuXG4gKlxuICogVXNlZCBmb3IgZGVidWdnaW5nLlxuICovXG5mdW5jdGlvbiB1c2VEZWZhdWx0PFQ+KGRlZmF1bHRWYWx1ZTogV2F0Y2hTb3VyY2U8VD4pOiBSZWY8VD4ge1xuXHRjb25zdCByZWFsUmVmID0gc2hhbGxvd1JlZjxUPih0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnZnVuY3Rpb24nID8gZGVmYXVsdFZhbHVlKCkgOiBkZWZhdWx0VmFsdWUudmFsdWUpO1xuXG5cdHdhdGNoKFxuXHRcdGRlZmF1bHRWYWx1ZSxcblx0XHQobmV3VmFsdWUpID0+IHtcblx0XHRcdHJlYWxSZWYudmFsdWUgPSBuZXdWYWx1ZTtcblx0XHR9LFxuXHRcdHtkZWVwOiB0cnVlfVxuXHQpO1xuXG5cdHJldHVybiBjb21wdXRlZCh7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHJlYWxSZWYudmFsdWU7XG5cdFx0fSxcblx0XHRzZXQobmV3VmFsdWUpIHtcblx0XHRcdHJlYWxSZWYudmFsdWUgPSBuZXdWYWx1ZTtcblx0XHR9LFxuXHR9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlRGVmYXVsdDtcbiIsICJpbXBvcnQgeyBjcmVhdGVWTm9kZSBhcyBfY3JlYXRlVk5vZGUsIHRvRGlzcGxheVN0cmluZyBhcyBfdG9EaXNwbGF5U3RyaW5nLCBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrLCBjcmVhdGVDb21tZW50Vk5vZGUgYXMgX2NyZWF0ZUNvbW1lbnRWTm9kZSwgd2l0aEN0eCBhcyBfd2l0aEN0eCwgY3JlYXRlVGV4dFZOb2RlIGFzIF9jcmVhdGVUZXh0Vk5vZGUsIHJlbmRlckxpc3QgYXMgX3JlbmRlckxpc3QsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwgbm9ybWFsaXplQ2xhc3MgYXMgX25vcm1hbGl6ZUNsYXNzLCBjcmVhdGVCbG9jayBhcyBfY3JlYXRlQmxvY2ssIFRyYW5zaXRpb24gYXMgX1RyYW5zaXRpb24sIHB1c2hTY29wZUlkIGFzIF9wdXNoU2NvcGVJZCwgcG9wU2NvcGVJZCBhcyBfcG9wU2NvcGVJZCB9IGZyb20gXCJ2dWVcIlxuXG5jb25zdCBfd2l0aFNjb3BlSWQgPSBuID0+IChfcHVzaFNjb3BlSWQoXCJkYXRhLXYtNWE0NGNjNzVcIiksbj1uKCksX3BvcFNjb3BlSWQoKSxuKVxuY29uc3QgX2hvaXN0ZWRfMSA9IFtcImxhbmdcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCJdXG5jb25zdCBfaG9pc3RlZF8yID0gW1wiaWRcIl1cbmNvbnN0IF9ob2lzdGVkXzMgPSAvKiNfX1BVUkVfXyovIF93aXRoU2NvcGVJZCgoKSA9PiAvKiNfX1BVUkVfXyovX2NyZWF0ZUVsZW1lbnRWTm9kZShcImJyXCIsIG51bGwsIG51bGwsIC0xIC8qIEhPSVNURUQgKi8pKVxuY29uc3QgX2hvaXN0ZWRfNCA9IFtcImxhbmdcIl1cbmNvbnN0IF9ob2lzdGVkXzUgPSBbXCJpZFwiXVxuY29uc3QgX2hvaXN0ZWRfNiA9IHsgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHRfX29wdGlvbnNcIiB9XG5jb25zdCBfaG9pc3RlZF83ID0geyBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdF9fZm9vdGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfOCA9IHsgY2xhc3M6IFwidmEtcGFyYSB2YS1wYXJhLS1zdWJ0bGVcIiB9XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soX1RyYW5zaXRpb24sIHtcbiAgICBuYW1lOiBcInZhLXZhcmlhbnQtcHJvbXB0XCIsXG4gICAgYXBwZWFyOiBcIlwiXG4gIH0sIHtcbiAgICBkZWZhdWx0OiBfd2l0aEN0eCgoKSA9PiBbXG4gICAgICAoJHByb3BzLm9wZW4pXG4gICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImRpdlwiLCB7XG4gICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICByZWY6IFwicHJvbXB0XCIsXG4gICAgICAgICAgICBsYW5nOiBgemgtJHskc2V0dXAuaTE4blZhcmlhbnR9YCxcbiAgICAgICAgICAgIGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0XCIsXG4gICAgICAgICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6ICRzZXR1cC50aXRsZUlkLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6ICRzZXR1cC5kZXNjSWRcbiAgICAgICAgICB9LCBbXG4gICAgICAgICAgICBfY3JlYXRlVk5vZGUoJHNldHVwW1wiVkFCdXR0b25cIl0sIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHRfX2Nsb3NlXCIsXG4gICAgICAgICAgICAgIHdlaWdodDogXCJxdWlldFwiLFxuICAgICAgICAgICAgICBpY29uOiBcImNsb3NlXCIsXG4gICAgICAgICAgICAgIHRpdGxlOiAkc2V0dXAudXNlSTE4bignY2xvc2UnKSxcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6ICRzZXR1cC51c2VJMThuKCdjbG9zZScpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgICAgICBvbkNsaWNrOiAkc2V0dXAub3B0T3V0QW5kQ2xvc2VcbiAgICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcInRpdGxlXCIsIFwiYXJpYS1sYWJlbFwiLCBcImRpc2FibGVkXCJdKSxcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJoMlwiLCB7XG4gICAgICAgICAgICAgIGlkOiAkc2V0dXAudGl0bGVJZCxcbiAgICAgICAgICAgICAgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHRfX3RpdGxlIHZhLXRpdGxlXCJcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZVRleHRWTm9kZShfdG9EaXNwbGF5U3RyaW5nKCRzZXR1cC51c2VJMThuKCRzZXR1cC5pc1ZhcmlhbnROYXJyb3dlZCA/ICd2cC5oZWFkZXIuYWx0JyA6ICd2cC5oZWFkZXInKSksIDEgLyogVEVYVCAqLyksXG4gICAgICAgICAgICAgIF9ob2lzdGVkXzMsXG4gICAgICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJWQUZhZGVUcmFuc2l0aW9uXCJdLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgKCEkc2V0dXAuaXNWYXJpYW50TmFycm93ZWQpXG4gICAgICAgICAgICAgICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAkc2V0dXAuc2h1ZmZsZWRWYXJpYW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZzogYHpoLSR7JHNldHVwLnNodWZmbGVkVmFyaWFudH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHRfX3RpdGxlX192YXJpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICB9LCBfdG9EaXNwbGF5U3RyaW5nKCRzZXR1cC5tZXNzYWdlcy52YXJpYW50c1skc2V0dXAuc2h1ZmZsZWRWYXJpYW50XSksIDkgLyogVEVYVCwgUFJPUFMgKi8sIF9ob2lzdGVkXzQpKVxuICAgICAgICAgICAgICAgICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgXzogMSAvKiBTVEFCTEUgKi9cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzIpLFxuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBcIiwge1xuICAgICAgICAgICAgICBpZDogJHNldHVwLmRlc2NJZCxcbiAgICAgICAgICAgICAgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHRfX2Rlc2MgdmEtcGFyYVwiXG4gICAgICAgICAgICB9LCBfdG9EaXNwbGF5U3RyaW5nKCRzZXR1cC51c2VJMThuKCRzZXR1cC5pc1ZhcmlhbnROYXJyb3dlZCA/ICd2cC5tYWluLmFsdCcgOiAndnAubWFpbicpKSwgOSAvKiBURVhULCBQUk9QUyAqLywgX2hvaXN0ZWRfNSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzYsIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUNvbW1lbnRWTm9kZShcIiBpbmZlcnJlZFZhcmlhbnQgaXMgbm9uLW51bGwsIGd1YXJkZWQgYnkgaXNWYXJpYW50TmFycm93ZWQgXCIpLFxuICAgICAgICAgICAgICAoX29wZW5CbG9jayh0cnVlKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhfRnJhZ21lbnQsIG51bGwsIF9yZW5kZXJMaXN0KCRzZXR1cC5pc1ZhcmlhbnROYXJyb3dlZCAmJiAkc2V0dXAuaW5mZXJyZWRWYXJpYW50ICE9PSBudWxsXG5cdFx0XHRcdFx0XHQ/IFskc2V0dXAuaW5mZXJyZWRWYXJpYW50XVxuXHRcdFx0XHRcdFx0OiAkc2V0dXAuVkFMSURfVkFSSUFOVFMsICh2YXJpYW50KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jaygkc2V0dXBbXCJWQUJ1dHRvblwiXSwge1xuICAgICAgICAgICAgICAgICAga2V5OiB2YXJpYW50LFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IF9ub3JtYWxpemVDbGFzcyhbXCJ2YS12YXJpYW50LXByb21wdF9fb3B0aW9uc19fYnV0dG9uXCIsIHsndmEtdmFyaWFudC1wcm9tcHRfX29wdGlvbnNfX2J1dHRvbi0tcHJpbWFyeSc6ICRzZXR1cC5pc1ZhcmlhbnROYXJyb3dlZH1dKSxcbiAgICAgICAgICAgICAgICAgIGluZGljYXRvcjogXCJhcnJvd05leHRcIixcbiAgICAgICAgICAgICAgICAgIHdlaWdodDogXCJxdWlldFwiLFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcInByb2dyZXNzaXZlXCIsXG4gICAgICAgICAgICAgICAgICBsYW5nOiB2YXJpYW50LFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICRldmVudCA9PiAoJHNldHVwLnNlbGVjdCh2YXJpYW50KSlcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBfd2l0aEN0eCgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVUZXh0Vk5vZGUoX3RvRGlzcGxheVN0cmluZygkc2V0dXAubWVzc2FnZXMudmFyaWFudHNbdmFyaWFudF0pLCAxIC8qIFRFWFQgKi8pXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF86IDIgLyogRFlOQU1JQyAqL1xuICAgICAgICAgICAgICAgIH0sIDEwMzIgLyogUFJPUFMsIERZTkFNSUNfU0xPVFMgKi8sIFtcImNsYXNzXCIsIFwibGFuZ1wiLCBcImRpc2FibGVkXCIsIFwib25DbGlja1wiXSkpXG4gICAgICAgICAgICAgIH0pLCAxMjggLyogS0VZRURfRlJBR01FTlQgKi8pKSxcbiAgICAgICAgICAgICAgKCRzZXR1cC5pc1ZhcmlhbnROYXJyb3dlZClcbiAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jaygkc2V0dXBbXCJWQUJ1dHRvblwiXSwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0X19vcHRpb25zX19idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yOiBcImFycm93TmV4dFwiLFxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IFwicXVpZXRcIixcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcInByb2dyZXNzaXZlXCIsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gJGV2ZW50ID0+ICgkc2V0dXAuaXNWYXJpYW50TmFycm93ZWQgPSBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IF93aXRoQ3R4KCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlVGV4dFZOb2RlKF90b0Rpc3BsYXlTdHJpbmcoJHNldHVwLnVzZUkxOG4oJ3ZwLmJ1dHRvbi5vdGhlcicpKSwgMSAvKiBURVhUICovKVxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgXzogMSAvKiBTVEFCTEUgKi9cbiAgICAgICAgICAgICAgICAgIH0sIDggLyogUFJPUFMgKi8sIFtcImRpc2FibGVkXCJdKSlcbiAgICAgICAgICAgICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJmb290ZXJcIiwgX2hvaXN0ZWRfNywgW1xuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicFwiLCBfaG9pc3RlZF84LCBfdG9EaXNwbGF5U3RyaW5nKCRzZXR1cC51c2VJMThuKCd2cC5tYWluLmV4dCcpKSwgMSAvKiBURVhUICovKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8xKSlcbiAgICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICAgIF0pLFxuICAgIF86IDEgLyogU1RBQkxFICovXG4gIH0pKVxufSIsICJpbXBvcnQgc2NyaXB0IGZyb20gXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBVmFyaWFudFByb21wdC52dWU/dHlwZT1zY3JpcHRcIjtpbXBvcnQgXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBVmFyaWFudFByb21wdC52dWU/dHlwZT1zdHlsZSZpbmRleD0wXCI7aW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFWYXJpYW50UHJvbXB0LnZ1ZT90eXBlPXRlbXBsYXRlXCI7IHNjcmlwdC5yZW5kZXIgPSByZW5kZXI7c2NyaXB0Ll9fZmlsZSA9IFwic3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFWYXJpYW50UHJvbXB0LnZ1ZVwiO3NjcmlwdC5fX3Njb3BlSWQgPSBcImRhdGEtdi01YTQ0Y2M3NVwiO2V4cG9ydCBkZWZhdWx0IHNjcmlwdDsiLCAiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cbmltcG9ydCB7cmVmfSBmcm9tICd2dWUnO1xuaW1wb3J0IHt0eXBlIFZhbGlkVmFyaWFudH0gZnJvbSAnZXh0LmdhZGdldC5WYXJpYW50QWxseSc7XG5pbXBvcnQgVkFCdXR0b24gZnJvbSAnLi9WQUJ1dHRvbi52dWUnO1xuaW1wb3J0IFZBU2VsZWN0IGZyb20gJy4vVkFTZWxlY3QudnVlJztcbmltcG9ydCB1c2VJMThuLCB7aTE4blZhcmlhbnR9IGZyb20gJy4uL2NvbXBvc2FibGVzL3VzZUkxOG4nO1xuaW1wb3J0IHVzZVVuaXF1ZUlkIGZyb20gJy4uL2NvbXBvc2FibGVzL3VzZVVuaXF1ZUlkJztcbmltcG9ydCB7VkFMSURfVkFSSUFOVFMsIGluZmVycmVkVmFyaWFudCwgc2h1ZmZsZVZhcmlhbnR9IGZyb20gJy4uL21vZHVsZXMvdXRpbHMnO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzLmpzb24nO1xuaW1wb3J0IHVzZU1vZGVsV3JhcHBlciBmcm9tICcuLi9jb21wb3NhYmxlcy91c2VNb2RlbFdyYXBwZXInO1xuaW1wb3J0IHVzZURlZmF1bHQgZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlRGVmYXVsdCc7XG5cbmNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKFxuXHRkZWZpbmVQcm9wczx7XG5cdFx0b3BlbjogYm9vbGVhbjtcblx0XHRkaXNhYmxlZD86IGJvb2xlYW47XG5cdH0+KCksXG5cdHtcblx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdH1cbik7XG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8e1xuXHQoZTogJ3VwZGF0ZTpvcGVuJywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuXHQoZTogJ3VwZGF0ZTpkaXNhYmxlZCcsIHZhbHVlOiBib29sZWFuKTogdm9pZDtcblx0KGU6ICdzZWxlY3QnLCB2YXJpYW50OiBWYWxpZFZhcmlhbnQpOiB2b2lkO1xuXHQoZTogJ29wdG91dCcpOiB2b2lkO1xufT4oKTtcblxuY29uc3QgcHJvbXB0ID0gcmVmPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5jb25zdCB0aXRsZUlkID0gdXNlVW5pcXVlSWQoKTtcbmNvbnN0IHNlbGVjdGVkVmFyaWFudCA9IHVzZURlZmF1bHQoKCkgPT4gaW5mZXJyZWRWYXJpYW50LnZhbHVlID8/IHNodWZmbGVWYXJpYW50KCkpO1xuY29uc3QgaXNPcGVuID0gdXNlTW9kZWxXcmFwcGVyKHByb3BzLCBlbWl0LCAnb3BlbicpO1xuY29uc3QgaXNEaXNhYmxlZCA9IHVzZU1vZGVsV3JhcHBlcihwcm9wcywgZW1pdCwgJ2Rpc2FibGVkJyk7XG5cbmZ1bmN0aW9uIG9wdE91dEFuZENsb3NlKCkge1xuXHRlbWl0KCdvcHRvdXQnKTtcblx0aXNPcGVuLnZhbHVlID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdCh2YXJpYW50OiBWYWxpZFZhcmlhbnQpIHtcblx0aXNEaXNhYmxlZC52YWx1ZSA9IHRydWU7XG5cdGVtaXQoJ3NlbGVjdCcsIHZhcmlhbnQpO1xufVxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cblx0PFRyYW5zaXRpb24gbmFtZT1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZVwiIGFwcGVhcj5cblx0XHQ8ZGl2XG5cdFx0XHR2LWlmPVwib3BlblwiXG5cdFx0XHRyZWY9XCJwcm9tcHRcIlxuXHRcdFx0Omxhbmc9XCJgemgtJHtpMThuVmFyaWFudH1gXCJcblx0XHRcdGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlXCJcblx0XHRcdHJvbGU9XCJkaWFsb2dcIlxuXHRcdFx0YXJpYS1tb2RhbD1cImZhbHNlXCJcblx0XHRcdDphcmlhLWxhYmVsbGVkYnk9XCJ0aXRsZUlkXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlX19oZWFkZXJcIj5cblx0XHRcdFx0PGgyIDppZD1cInRpdGxlSWRcIiBjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9faGVhZGVyX190aXRsZSB2YS10aXRsZVwiPlxuXHRcdFx0XHRcdHt7IHVzZUkxOG4oJ3ZwLm1haW4nKSB9fVxuXHRcdFx0XHQ8L2gyPlxuXHRcdFx0XHQ8VkFCdXR0b25cblx0XHRcdFx0XHRjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9faGVhZGVyX19jbG9zZVwiXG5cdFx0XHRcdFx0d2VpZ2h0PVwicXVpZXRcIlxuXHRcdFx0XHRcdGljb249XCJjbG9zZVwiXG5cdFx0XHRcdFx0OnRpdGxlPVwidXNlSTE4bignY2xvc2UnKVwiXG5cdFx0XHRcdFx0OmFyaWEtbGFiZWw9XCJ1c2VJMThuKCdjbG9zZScpXCJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0QGNsaWNrPVwib3B0T3V0QW5kQ2xvc2VcIlxuXHRcdFx0XHQvPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlX19tYWluXCI+XG5cdFx0XHRcdDxWQVNlbGVjdFxuXHRcdFx0XHRcdHYtbW9kZWw9XCJzZWxlY3RlZFZhcmlhbnRcIlxuXHRcdFx0XHRcdGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlX19tYWluX19zZWxlY3RcIlxuXHRcdFx0XHRcdDpsYW5nPVwic2VsZWN0ZWRWYXJpYW50XCJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0OmFyaWEtbGFiZWxsZWRieT1cInRpdGxlSWRcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PG9wdGlvbiB2LWZvcj1cInZhcmlhbnQgaW4gVkFMSURfVkFSSUFOVFNcIiA6a2V5PVwidmFyaWFudFwiIDp2YWx1ZT1cInZhcmlhbnRcIiA6bGFuZz1cInZhcmlhbnRcIj5cblx0XHRcdFx0XHRcdHt7IG1lc3NhZ2VzLnZhcmlhbnRzW3ZhcmlhbnRdIH19XG5cdFx0XHRcdFx0PC9vcHRpb24+XG5cdFx0XHRcdDwvVkFTZWxlY3Q+XG5cdFx0XHRcdDxWQUJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlX19tYWluX19hY3Rpb25cIlxuXHRcdFx0XHRcdGFjdGlvbj1cInByb2dyZXNzaXZlXCJcblx0XHRcdFx0XHRpY29uPVwiYXJyb3dOZXh0XCJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0QGNsaWNrPVwic2VsZWN0KHNlbGVjdGVkVmFyaWFudClcIlxuXHRcdFx0XHRcdD57eyB1c2VJMThuKCd2cC5idXR0b24ub2snKSB9fTwvVkFCdXR0b25cblx0XHRcdFx0PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8Zm9vdGVyIGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlX19mb290ZXJcIj5cblx0XHRcdFx0PHAgY2xhc3M9XCJ2YS1wYXJhIHZhLXBhcmEtLXN1YnRsZVwiPlxuXHRcdFx0XHRcdHt7IHVzZUkxOG4oJ3ZwLm1haW4uZXh0JykgfX1cblx0XHRcdFx0PC9wPlxuXHRcdFx0PC9mb290ZXI+XG5cdFx0PC9kaXY+XG5cdDwvVHJhbnNpdGlvbj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQgbGFuZz1cImxlc3NcIj5cbkBpbXBvcnQgKHJlZmVyZW5jZSkgJy4uL3N0eWxlcy9taXhpbnMubGVzcyc7XG5AaW1wb3J0IChyZWZlcmVuY2UpICcuLi9zdHlsZXMvdG9rZW5zLmxlc3MnO1xuXG4udmEtdGl0bGUge1xuXHRib3JkZXI6IDA7IC8vIFJlc2V0XG5cdHBhZGRpbmc6IDA7IC8vIFJlc2V0XG5cdG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG5cblx0Zm9udC1zaXplOiBAZm9udC1zaXplLXh4LWxhcmdlO1xuXHRmb250LXdlaWdodDogQGZvbnQtd2VpZ2h0LWJvbGQ7XG5cdG1hcmdpbjogQHNwYWNpbmctNTAgQHNwYWNpbmctMDtcblx0Y29sb3I6IEBjb2xvci1iYXNlO1xufVxuXG4udmEtcGFyYSB7XG5cdG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG5cdG1hcmdpbi10b3A6IEBzcGFjaW5nLTUwO1xuXHRjb2xvcjogQGNvbG9yLWJhc2U7XG5cblx0Ji0tc3VidGxlIHtcblx0XHRjb2xvcjogQGNvbG9yLXN1YnRsZTtcblx0XHRmb250LXNpemU6IEBmb250LXNpemUteC1zbWFsbDtcblx0XHRtYXJnaW4tYm90dG9tOiBAc3BhY2luZy0zNTtcblx0fVxufVxuXG4udmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlIHtcblx0Ym94LXNpemluZzogQGJveC1zaXppbmctYmFzZTtcblx0ei1pbmRleDogQHotaW5kZXgtb3ZlcmxheTtcblx0cGFkZGluZzogQHNwYWNpbmctNTAgQHNwYWNpbmctMTAwO1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGxlZnQ6IEBzcGFjaW5nLTA7XG5cdHJpZ2h0OiBAc3BhY2luZy0wO1xuXHRib3R0b206IEBzcGFjaW5nLTA7XG5cdG1hcmdpbjogQHNwYWNpbmctMCBhdXRvO1xuXHR3aWR0aDogMTAwJTtcblx0bWF4LXdpZHRoOiA2MDBweDtcblx0bWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDJlbSk7XG5cblx0b3ZlcmZsb3c6IGF1dG87XG5cdG92ZXJzY3JvbGwtYmVoYXZpb3I6IG5vbmU7XG5cdGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kLWNvbG9yLWJhc2U7XG5cdGJvcmRlcjogQGJvcmRlci1iYXNlO1xuXHRib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuXHRib3gtc2hhZG93OiBAYm94LXNoYWRvdy1kcm9wLW1lZGl1bTtcblx0Zm9udC1mYW1pbHk6IEBmb250LWZhbWlseS1zeXN0ZW0tc2Fucztcblx0Zm9udC1zaXplOiAxcmVtOyAvLyBSZXNldFxuXHRsaW5lLWhlaWdodDogbm9ybWFsOyAvLyBSZXNldFxuXG5cdCZfX2hlYWRlciB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXG5cdFx0Jl9fdGl0bGUge1xuXHRcdFx0ZmxleDogMTtcblx0XHRcdGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1tZWRpdW07XG5cdFx0fVxuXG5cdFx0Jl9fY2xvc2Uge1xuXHRcdFx0cGFkZGluZzogQHNwYWNpbmctc2hvcnRoYW5kLWJ1dHRvbi1pY29uLW9ubHk7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IC0oQHNwYWNpbmctaG9yaXpvbnRhbC1idXR0b24taWNvbi1vbmx5ICsgMXB4KTtcblx0XHR9XG5cdH1cblxuXHQmX19tYWluIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdG1hcmdpbi10b3A6IEBzcGFjaW5nLTI1O1xuXG5cdFx0Jl9fc2VsZWN0IHtcblx0XHRcdG1hcmdpbi1yaWdodDogQHNwYWNpbmctNzU7XG5cdFx0XHRmbGV4OiAxO1xuXHRcdH1cblxuXHRcdCZfX2FjdGlvbiB7XG5cdFx0XHRmbGV4LXNocmluazogMDtcblx0XHR9XG5cdH1cblxuXHQmX19jbG9zZSB7XG5cdFx0cGFkZGluZzogQHNwYWNpbmctc2hvcnRoYW5kLWJ1dHRvbi1pY29uLW9ubHk7XG5cdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdG1hcmdpbi1yaWdodDogLShAc3BhY2luZy1ob3Jpem9udGFsLWJ1dHRvbi1pY29uLW9ubHkgKyAxcHgpO1xuXHR9XG59XG5cbi8qIFByb21wdCB0cmFuc2l0aW9uIGVmZmVjdCAqL1xuLnZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZS1lbnRlci1hY3RpdmUsXG4udmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlLWxlYXZlLWFjdGl2ZSB7XG5cdHRyYW5zaXRpb24tcHJvcGVydHk6IEB0cmFuc2l0aW9uLXByb3BlcnR5LWxheW91dDtcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogQHRyYW5zaXRpb24tZHVyYXRpb24tbWVkaXVtO1xuXHR0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogQHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLXN5c3RlbTtcbn1cblxuLnZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZS1lbnRlci1mcm9tLFxuLnZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZS1sZWF2ZS10byB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbn1cbjwvc3R5bGU+XG4uLi9tb2R1bGVzL3V0aWxzXG4iLCAiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cbmltcG9ydCB1c2VNb2RlbFdyYXBwZXIgZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlTW9kZWxXcmFwcGVyJztcblxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XG5cdG1vZGVsVmFsdWU6IHN0cmluZztcbn0+KCk7XG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8e1xuXHQoZTogJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG59PigpO1xuXG5jb25zdCBtb2RlbFZhbHVlID0gdXNlTW9kZWxXcmFwcGVyKHByb3BzLCBlbWl0KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG5cdDxzZWxlY3Qgdi1tb2RlbD1cIm1vZGVsVmFsdWVcIiBjbGFzcz1cInZhLXNlbGVjdFwiPlxuXHRcdDxzbG90IC8+XG5cdDwvc2VsZWN0PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZCBsYW5nPVwibGVzc1wiPlxuQGltcG9ydCAocmVmZXJlbmNlKSAnLi4vc3R5bGVzL21peGlucy5sZXNzJztcbkBpbXBvcnQgKHJlZmVyZW5jZSkgJy4uL3N0eWxlcy90b2tlbnMubGVzcyc7XG5cbi52YS1zZWxlY3Qge1xuXHQuc2VsZWN0X19oYW5kbGUoKTtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0IEBzcGFjaW5nLTc1O1xuXHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBAaWNvbi1leHBhbmQ7XG5cdGJhY2tncm91bmQtc2l6ZTogQHNpemUtaWNvbi14LXNtYWxsO1xuXG5cdCY6ZGlzYWJsZWQge1xuXHRcdC5zZWxlY3RfX2hhbmRsZS0tZGlzYWJsZWQoKTtcblx0XHRiYWNrZ3JvdW5kLWltYWdlOiBAaWNvbi1leHBhbmQtZGlzYWJsZWQ7XG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lLCB3aGljaCBzZXRzIGFuIG9wYWNpdHkgbGVzcyB0aGFuIDEgZm9yIGRpc2FibGVkIHNlbGVjdCBlbGVtZW50cy5cblx0XHRvcGFjaXR5OiBAb3BhY2l0eS1iYXNlO1xuXHRcdGN1cnNvcjogQGN1cnNvci1ub3QtYWxsb3dlZDtcblx0fVxuXG5cdCY6ZW5hYmxlZCB7XG5cdFx0LnNlbGVjdF9faGFuZGxlLS1lbmFibGVkKCk7XG5cdH1cbn1cbjwvc3R5bGU+XG4iLCAiaW1wb3J0IHsgcmVuZGVyU2xvdCBhcyBfcmVuZGVyU2xvdCwgdk1vZGVsU2VsZWN0IGFzIF92TW9kZWxTZWxlY3QsIHdpdGhEaXJlY3RpdmVzIGFzIF93aXRoRGlyZWN0aXZlcywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiBfd2l0aERpcmVjdGl2ZXMoKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcInNlbGVjdFwiLCB7XG4gICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gJGV2ZW50ID0+ICgoJHNldHVwLm1vZGVsVmFsdWUpID0gJGV2ZW50KSksXG4gICAgY2xhc3M6IFwidmEtc2VsZWN0XCJcbiAgfSwgW1xuICAgIF9yZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImRlZmF1bHRcIiwge30sIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgXSwgNTEyIC8qIE5FRURfUEFUQ0ggKi8pKSwgW1xuICAgIFtfdk1vZGVsU2VsZWN0LCAkc2V0dXAubW9kZWxWYWx1ZV1cbiAgXSlcbn0iLCAiaW1wb3J0IHNjcmlwdCBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQVNlbGVjdC52dWU/dHlwZT1zY3JpcHRcIjtpbXBvcnQgXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBU2VsZWN0LnZ1ZT90eXBlPXN0eWxlJmluZGV4PTBcIjtpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQVNlbGVjdC52dWU/dHlwZT10ZW1wbGF0ZVwiOyBzY3JpcHQucmVuZGVyID0gcmVuZGVyO3NjcmlwdC5fX2ZpbGUgPSBcInNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBU2VsZWN0LnZ1ZVwiO3NjcmlwdC5fX3Njb3BlSWQgPSBcImRhdGEtdi1jOWI0NjQ2MFwiO2V4cG9ydCBkZWZhdWx0IHNjcmlwdDsiLCAiaW1wb3J0IHsgdG9EaXNwbGF5U3RyaW5nIGFzIF90b0Rpc3BsYXlTdHJpbmcsIGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlLCBjcmVhdGVWTm9kZSBhcyBfY3JlYXRlVk5vZGUsIHJlbmRlckxpc3QgYXMgX3JlbmRlckxpc3QsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrLCB3aXRoQ3R4IGFzIF93aXRoQ3R4LCBjcmVhdGVUZXh0Vk5vZGUgYXMgX2NyZWF0ZVRleHRWTm9kZSwgY3JlYXRlQ29tbWVudFZOb2RlIGFzIF9jcmVhdGVDb21tZW50Vk5vZGUsIFRyYW5zaXRpb24gYXMgX1RyYW5zaXRpb24sIGNyZWF0ZUJsb2NrIGFzIF9jcmVhdGVCbG9jaywgcHVzaFNjb3BlSWQgYXMgX3B1c2hTY29wZUlkLCBwb3BTY29wZUlkIGFzIF9wb3BTY29wZUlkIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF93aXRoU2NvcGVJZCA9IG4gPT4gKF9wdXNoU2NvcGVJZChcImRhdGEtdi01Y2M3ODY1YlwiKSxuPW4oKSxfcG9wU2NvcGVJZCgpLG4pXG5jb25zdCBfaG9pc3RlZF8xID0gW1wibGFuZ1wiLCBcImFyaWEtbGFiZWxsZWRieVwiXVxuY29uc3QgX2hvaXN0ZWRfMiA9IHsgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlX19oZWFkZXJcIiB9XG5jb25zdCBfaG9pc3RlZF8zID0gW1wiaWRcIl1cbmNvbnN0IF9ob2lzdGVkXzQgPSB7IGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9fbWFpblwiIH1cbmNvbnN0IF9ob2lzdGVkXzUgPSBbXCJ2YWx1ZVwiLCBcImxhbmdcIl1cbmNvbnN0IF9ob2lzdGVkXzYgPSB7IGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9fZm9vdGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfNyA9IHsgY2xhc3M6IFwidmEtcGFyYSB2YS1wYXJhLS1zdWJ0bGVcIiB9XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soX1RyYW5zaXRpb24sIHtcbiAgICBuYW1lOiBcInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZVwiLFxuICAgIGFwcGVhcjogXCJcIlxuICB9LCB7XG4gICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgKCRwcm9wcy5vcGVuKVxuICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgcmVmOiBcInByb21wdFwiLFxuICAgICAgICAgICAgbGFuZzogYHpoLSR7JHNldHVwLmkxOG5WYXJpYW50fWAsXG4gICAgICAgICAgICBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVcIixcbiAgICAgICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgICAgICBcImFyaWEtbW9kYWxcIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogJHNldHVwLnRpdGxlSWRcbiAgICAgICAgICB9LCBbXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzIsIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImgyXCIsIHtcbiAgICAgICAgICAgICAgICBpZDogJHNldHVwLnRpdGxlSWQsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlX19oZWFkZXJfX3RpdGxlIHZhLXRpdGxlXCJcbiAgICAgICAgICAgICAgfSwgX3RvRGlzcGxheVN0cmluZygkc2V0dXAudXNlSTE4bigndnAubWFpbicpKSwgOSAvKiBURVhULCBQUk9QUyAqLywgX2hvaXN0ZWRfMyksXG4gICAgICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJWQUJ1dHRvblwiXSwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9faGVhZGVyX19jbG9zZVwiLFxuICAgICAgICAgICAgICAgIHdlaWdodDogXCJxdWlldFwiLFxuICAgICAgICAgICAgICAgIGljb246IFwiY2xvc2VcIixcbiAgICAgICAgICAgICAgICB0aXRsZTogJHNldHVwLnVzZUkxOG4oJ2Nsb3NlJyksXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6ICRzZXR1cC51c2VJMThuKCdjbG9zZScpLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgb25DbGljazogJHNldHVwLm9wdE91dEFuZENsb3NlXG4gICAgICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcInRpdGxlXCIsIFwiYXJpYS1sYWJlbFwiLCBcImRpc2FibGVkXCJdKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzQsIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZVZOb2RlKCRzZXR1cFtcIlZBU2VsZWN0XCJdLCB7XG4gICAgICAgICAgICAgICAgbW9kZWxWYWx1ZTogJHNldHVwLnNlbGVjdGVkVmFyaWFudCxcbiAgICAgICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogX2NhY2hlWzBdIHx8IChfY2FjaGVbMF0gPSAkZXZlbnQgPT4gKCgkc2V0dXAuc2VsZWN0ZWRWYXJpYW50KSA9ICRldmVudCkpLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9fbWFpbl9fc2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgbGFuZzogJHNldHVwLnNlbGVjdGVkVmFyaWFudCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6ICRzZXR1cC50aXRsZUlkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBfd2l0aEN0eCgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAoX29wZW5CbG9jayh0cnVlKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhfRnJhZ21lbnQsIG51bGwsIF9yZW5kZXJMaXN0KCRzZXR1cC5WQUxJRF9WQVJJQU5UUywgKHZhcmlhbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJvcHRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogdmFyaWFudCxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFyaWFudCxcbiAgICAgICAgICAgICAgICAgICAgICBsYW5nOiB2YXJpYW50XG4gICAgICAgICAgICAgICAgICAgIH0sIF90b0Rpc3BsYXlTdHJpbmcoJHNldHVwLm1lc3NhZ2VzLnZhcmlhbnRzW3ZhcmlhbnRdKSwgOSAvKiBURVhULCBQUk9QUyAqLywgX2hvaXN0ZWRfNSkpXG4gICAgICAgICAgICAgICAgICB9KSwgMTI4IC8qIEtFWUVEX0ZSQUdNRU5UICovKSlcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBfOiAxIC8qIFNUQUJMRSAqL1xuICAgICAgICAgICAgICB9LCA4IC8qIFBST1BTICovLCBbXCJtb2RlbFZhbHVlXCIsIFwibGFuZ1wiLCBcImRpc2FibGVkXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCJdKSxcbiAgICAgICAgICAgICAgX2NyZWF0ZVZOb2RlKCRzZXR1cFtcIlZBQnV0dG9uXCJdLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlX19tYWluX19hY3Rpb25cIixcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwicHJvZ3Jlc3NpdmVcIixcbiAgICAgICAgICAgICAgICBpY29uOiBcImFycm93TmV4dFwiLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgb25DbGljazogX2NhY2hlWzFdIHx8IChfY2FjaGVbMV0gPSAkZXZlbnQgPT4gKCRzZXR1cC5zZWxlY3QoJHNldHVwLnNlbGVjdGVkVmFyaWFudCkpKVxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgX2NyZWF0ZVRleHRWTm9kZShfdG9EaXNwbGF5U3RyaW5nKCRzZXR1cC51c2VJMThuKCd2cC5idXR0b24ub2snKSksIDEgLyogVEVYVCAqLylcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBfOiAxIC8qIFNUQUJMRSAqL1xuICAgICAgICAgICAgICB9LCA4IC8qIFBST1BTICovLCBbXCJkaXNhYmxlZFwiXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImZvb3RlclwiLCBfaG9pc3RlZF82LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwXCIsIF9ob2lzdGVkXzcsIF90b0Rpc3BsYXlTdHJpbmcoJHNldHVwLnVzZUkxOG4oJ3ZwLm1haW4uZXh0JykpLCAxIC8qIFRFWFQgKi8pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0sIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzEpKVxuICAgICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpXG4gICAgXSksXG4gICAgXzogMSAvKiBTVEFCTEUgKi9cbiAgfSkpXG59IiwgImltcG9ydCBzY3JpcHQgZnJvbSBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFWYXJpYW50UHJvbXB0TW9iaWxlLnZ1ZT90eXBlPXNjcmlwdFwiO2ltcG9ydCBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFWYXJpYW50UHJvbXB0TW9iaWxlLnZ1ZT90eXBlPXN0eWxlJmluZGV4PTBcIjtpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQVZhcmlhbnRQcm9tcHRNb2JpbGUudnVlP3R5cGU9dGVtcGxhdGVcIjsgc2NyaXB0LnJlbmRlciA9IHJlbmRlcjtzY3JpcHQuX19maWxlID0gXCJzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQVZhcmlhbnRQcm9tcHRNb2JpbGUudnVlXCI7c2NyaXB0Ll9fc2NvcGVJZCA9IFwiZGF0YS12LTVjYzc4NjViXCI7ZXhwb3J0IGRlZmF1bHQgc2NyaXB0OyIsICJpbXBvcnQgeyBvcGVuQmxvY2sgYXMgX29wZW5CbG9jaywgY3JlYXRlQmxvY2sgYXMgX2NyZWF0ZUJsb2NrLCBjcmVhdGVDb21tZW50Vk5vZGUgYXMgX2NyZWF0ZUNvbW1lbnRWTm9kZSwgVGVsZXBvcnQgYXMgX1RlbGVwb3J0LCBGcmFnbWVudCBhcyBfRnJhZ21lbnQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKF9GcmFnbWVudCwgbnVsbCwgW1xuICAgIChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jayhfVGVsZXBvcnQsIHsgdG86ICRzZXR1cC5kZXNrdG9wTW91bnRQb2ludCB9LCBbXG4gICAgICAoISRzZXR1cC5pc01vYmlsZSlcbiAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soJHNldHVwW1wiVkFWYXJpYW50UHJvbXB0XCJdLCB7XG4gICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICBvcGVuOiAkc2V0dXAuaXNPcGVuLFxuICAgICAgICAgICAgXCJvblVwZGF0ZTpvcGVuXCI6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gJGV2ZW50ID0+ICgoJHNldHVwLmlzT3BlbikgPSAkZXZlbnQpKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiAkc2V0dXAuaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIFwib25VcGRhdGU6ZGlzYWJsZWRcIjogX2NhY2hlWzFdIHx8IChfY2FjaGVbMV0gPSAkZXZlbnQgPT4gKCgkc2V0dXAuaXNEaXNhYmxlZCkgPSAkZXZlbnQpKSxcbiAgICAgICAgICAgIFwiYXV0by1jbG9zZVwiOiBmYWxzZSxcbiAgICAgICAgICAgIG9uT3B0b3V0OiAkc2V0dXAub25PcHRPdXQsXG4gICAgICAgICAgICBvblNlbGVjdDogJHNldHVwLnNldFZhcmlhbnRcbiAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBbXCJvcGVuXCIsIFwiZGlzYWJsZWRcIl0pKVxuICAgICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpXG4gICAgXSwgOCAvKiBQUk9QUyAqLywgW1widG9cIl0pKSxcbiAgICBfY3JlYXRlQ29tbWVudFZOb2RlKFwiIFRlbGVwb3J0IHRvIGJvZHkgYmVjYXVzZSB0aGV5IGFyZSBhbHdheXMgZmxvYXRlZCBhdCBib3R0b20gXCIpLFxuICAgIChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jayhfVGVsZXBvcnQsIHsgdG86IFwiYm9keVwiIH0sIFtcbiAgICAgICgkc2V0dXAuaXNNb2JpbGUpXG4gICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUJsb2NrKCRzZXR1cFtcIlZBVmFyaWFudFByb21wdE1vYmlsZVwiXSwge1xuICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgb3BlbjogJHNldHVwLmlzT3BlbixcbiAgICAgICAgICAgIFwib25VcGRhdGU6b3BlblwiOiBfY2FjaGVbMl0gfHwgKF9jYWNoZVsyXSA9ICRldmVudCA9PiAoKCRzZXR1cC5pc09wZW4pID0gJGV2ZW50KSksXG4gICAgICAgICAgICBkaXNhYmxlZDogJHNldHVwLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICBcIm9uVXBkYXRlOmRpc2FibGVkXCI6IF9jYWNoZVszXSB8fCAoX2NhY2hlWzNdID0gJGV2ZW50ID0+ICgoJHNldHVwLmlzRGlzYWJsZWQpID0gJGV2ZW50KSksXG4gICAgICAgICAgICBvbk9wdG91dDogJHNldHVwLm9uT3B0T3V0LFxuICAgICAgICAgICAgb25TZWxlY3Q6ICRzZXR1cC5zZXRWYXJpYW50XG4gICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wib3BlblwiLCBcImRpc2FibGVkXCJdKSlcbiAgICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICAgIF0pKVxuICBdLCA2NCAvKiBTVEFCTEVfRlJBR01FTlQgKi8pKVxufSIsICJpbXBvcnQgc2NyaXB0IGZyb20gXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxBcHAudnVlP3R5cGU9c2NyaXB0XCI7aW1wb3J0IFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcQXBwLnZ1ZT90eXBlPXN0eWxlJmluZGV4PTBcIjtpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcQXBwLnZ1ZT90eXBlPXRlbXBsYXRlXCI7IHNjcmlwdC5yZW5kZXIgPSByZW5kZXI7c2NyaXB0Ll9fZmlsZSA9IFwic3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXEFwcC52dWVcIjtleHBvcnQgZGVmYXVsdCBzY3JpcHQ7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLGVBQXdCQyxRQUFBLEtBQUE7O0FDQ3hCLElBQUFDLGVBQWtCRCxRQUFBLEtBQUE7QUFDbEIsSUFBQUUsb0JBQWlFRixRQUFBLHdCQUFBOztBQ0RqRSxJQUFBRyxlQUF5QkgsUUFBQSxLQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRHpCLElBQUFJLGNBQXlLSixRQUFBLEtBQUE7QUFFekssSUFBTUssYUFBYSxDQUFDLFNBQVMsUUFBUTtBQUNyQyxJQUFNQyxhQUFhO0VBQUVDLEtBQUs7QUFBRTtBQUM1QixJQUFNQyxhQUEwQixvQkFBQUosWUFBQUs7RUFBb0I7RUFBUTtJQUFFQyxHQUFHO0VBQWdoQjtFQUFHO0VBQU07O0FBQWdCO0FBQzFtQixJQUFNQyxhQUFhO0VBQUVKLEtB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QyxJQUFJeUIsWUFBWXZCLE9BQU8wSCxhQUFjbkc7TUFDaEYySyxVQUFVbE0sT0FBTzRMO01BQ2pCTyxVQUFVbk0sT0FBT3dMO0lBQ25CLEdBQUcsTUFBTSxHQUFlLENBQUMsUUFBUSxVQUFVLENBQUMsTUFBQSxHQUM1Q00sYUFBQWxMLG9CQUFvQixRQUFRLElBQUksQ0FBQSxDQUNyQyxFQUFBO0lBQ0E7O0VBQXdCO0FBQzdCOztBQ2pDcVN3TCxZQUFPeE0sU0FBU21NO0FBQU9LLFlBQU90TCxTQUFTO0FBQWtDLElBQU91TCxlQUFRRDs7QXpCRzdYLElBQU1FLE9BQU92SSxTQUFTd0ksY0FBYyxLQUFLO0FBQ3pDeEksU0FBU0UsS0FBS3VJLE9BQU9GLElBQUk7Q0FBQSxHQUN6QjdOLGFBQUFnTyxXQUFVSixZQUFHLEVBQUVLLE1BQU1KLElBQUk7IiwKICAibmFtZXMiOiBbImltcG9ydF92dWUyMiIsICJyZXF1aXJlIiwgImltcG9ydF92dWUyMCIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJpbXBvcnRfdnVlMTIiLCAiaW1wb3J0X3Z1ZTIiLCAiX2hvaXN0ZWRfMSIsICJfaG9pc3RlZF8yIiwgImtleSIsICJfaG9pc3RlZF8zIiwgImNyZWF0ZUVsZW1lbnRWTm9kZSIsICJkIiwgIl9ob2lzdGVkXzQiLCAiX2hvaXN0ZWRfNSIsICJfaG9pc3RlZF82IiwgIl9ob2lzdGVkXzciLCAiX2hvaXN0ZWRfOCIsICJfaG9pc3RlZF85IiwgIl9ob2lzdGVkXzEwIiwgInJlbmRlciIsICJfY3R4IiwgIl9jYWNoZSIsICIkcHJvcHMiLCAiJHNldHVwIiwgIiRkYXRhIiwgIiRvcHRpb25zIiwgIm9wZW5CbG9jayIsICJjcmVhdGVFbGVtZW50QmxvY2siLCAiY2xhc3MiLCAieG1sbnMiLCAid2lkdGgiLCAic2l6ZSIsICJoZWlnaHQiLCAidmlld0JveCIsICJpY29uIiwgImNyZWF0ZUNvbW1lbnRWTm9kZSIsICJWQUljb25fZGVmYXVsdCIsICJfX2ZpbGUiLCAiVkFJY29uX2RlZmF1bHQyIiwgImltcG9ydF92dWU0IiwgIl9ob2lzdGVkXzEyIiwgInJlbmRlcjIiLCAibm9ybWFsaXplQ2xhc3MiLCAiYWN0aW9uIiwgIndlaWdodCIsICJvbkNsaWNrIiwgIiRldmVudCIsICIkZW1pdCIsICJjcmVhdGVCbG9jayIsICIkc2xvdHMiLCAicmVuZGVyU2xvdCIsICJpbmRpY2F0b3IiLCAiVkFCdXR0b25fZGVmYXVsdCIsICJfX3Njb3BlSWQiLCAiVkFCdXR0b25fZGVmYXVsdDIiLCAiaW1wb3J0X3Z1ZTUiLCAicmVuZGVyMyIsICJUcmFuc2l0aW9uIiwgIm5hbWUiLCAibW9kZSIsICJkZWZhdWx0IiwgIndpdGhDdHgiLCAiXyIsICJzY3JpcHQiLCAiVkFGYWRlVHJhbnNpdGlvbl9kZWZhdWx0IiwgImltcG9ydF92dWU3IiwgIm1lc3NhZ2VzX2RlZmF1bHQiLCAidmFyaWFudHMiLCAiaGFucyIsICJzcGFjZSIsICJjbG9zZSIsICJoYW50IiwgImltcG9ydF92dWU2IiwgIlZBTElEX1ZBUklBTlRTIiwgIndnVXNlclZhcmlhbnQiLCAicmVmIiwgIl9tdyRjb25maWckZ2V0IiwgIm13IiwgImNvbmZpZyIsICJnZXQiLCAiaXNNb2JpbGVEZXZpY2UiLCAibWF0Y2hNZWRpYSIsICJtYXRjaGVzIiwgImdldE1vdW50UG9pbnQiLCAiX2RvY3VtZW50JHF1ZXJ5U2VsZWN0IiwgIl9kb2N1bWVudCRxdWVyeVNlbGVjdDIiLCAiZG9jdW1lbnQiLCAicXVlcnlTZWxlY3RvckFsbCIsICJib2R5IiwgInF1ZXJ5U2VsZWN0b3IiLCAiaW5mZXJyZWRWYXJpYW50IiwgImNvbXB1dGVkIiwgImluY2x1ZGVzIiwgInZhbHVlIiwgInNodWZmbGVWYXJpYW50IiwgImxhc3QiLCAidGFyZ2V0QXJyYXkiLCAiZmlsdGVyIiwgImkiLCAicmFuZG9tSW5kZXgiLCAiTWF0aCIsICJmbG9vciIsICJyYW5kb20iLCAibGVuZ3RoIiwgImkxOG5WYXJpYW50IiwgInVzZUkxOG4iLCAiX2N1cnJlbnRNc2dzR3JvdXAka2V5IiwgImN1cnJlbnRNc2dzR3JvdXAiLCAiY291bnRlciIsICJ1c2VVbmlxdWVJZCIsICJjb25jYXQiLCAidXNlVW5pcXVlSWRfZGVmYXVsdCIsICJpbXBvcnRfdnVlOCIsICJJTlRFUlZBTCIsICJ1c2VTaHVmZmxlZFZhcmlhbnQiLCAiaXNGcmVlemVkIiwgInJlc3VsdCIsICJpZCIsICJ3YXRjaCIsICJuZXdWYWx1ZSIsICJfaW5mZXJyZWRWYXJpYW50JHZhbHUiLCAiY2xlYXJJbnRlcnZhbCIsICJ3aW5kb3ciLCAic2V0SW50ZXJ2YWwiLCAiaW1tZWRpYXRlIiwgInVzZVNodWZmbGVkVmFyaWFudF9kZWZhdWx0IiwgImltcG9ydF92dWU5IiwgInVzZU1vZGVsV3JhcHBlciIsICJwcm9wcyIsICJlbWl0IiwgInNldCIsICJ1c2VNb2RlbFdyYXBwZXJfZGVmYXVsdCIsICJpbXBvcnRfdnVlMTAiLCAidXNlRGVmYXVsdCIsICJkZWZhdWx0VmFsdWUiLCAicmVhbFJlZiIsICJzaGFsbG93UmVmIiwgImRlZXAiLCAidXNlRGVmYXVsdF9kZWZhdWx0IiwgIl9fcHJvcHMiLCAiX19lbWl0IiwgInByb21wdCIsICJ0aXRsZUlkIiwgImRlc2NJZCIsICJpc09wZW4iLCAiaXNEaXNhYmxlZCIsICJpc1ZhcmlhbnROYXJyb3dlZCIsICJzaHVmZmxlZFZhcmlhbnQiLCAib3B0T3V0QW5kQ2xvc2UiLCAic2VsZWN0IiwgInZhcmlhbnQiLCAiZWxlbWVudCIsICJhZGRFdmVudExpc3RlbmVyIiwgImV2IiwgImJ1dHRvbnMiLCAiYXV0b0Nsb3NlIiwgImRpc2FibGVkIiwgImltcG9ydF92dWUxMyIsICJfd2l0aFNjb3BlSWQiLCAibiIsICJwdXNoU2NvcGVJZCIsICJwb3BTY29wZUlkIiwgIl9ob2lzdGVkXzEzIiwgIl9ob2lzdGVkXzIyIiwgIl9ob2lzdGVkXzMyIiwgIl9ob2lzdGVkXzQyIiwgIl9ob2lzdGVkXzUyIiwgIl9ob2lzdGVkXzYyIiwgIl9ob2lzdGVkXzcyIiwgIl9ob2lzdGVkXzgyIiwgInJlbmRlcjQiLCAiYXBwZWFyIiwgIm9wZW4iLCAibGFuZyIsICJyb2xlIiwgImNyZWF0ZVZOb2RlIiwgInRpdGxlIiwgImNyZWF0ZVRleHRWTm9kZSIsICJ0b0Rpc3BsYXlTdHJpbmciLCAibWVzc2FnZXMiLCAiRnJhZ21lbnQiLCAicmVuZGVyTGlzdCIsICJWQVZhcmlhbnRQcm9tcHRfZGVmYXVsdCIsICJWQVZhcmlhbnRQcm9tcHRfZGVmYXVsdDIiLCAiaW1wb3J0X3Z1ZTE3IiwgIm1vZGVsVmFsdWUiLCAiaW1wb3J0X3Z1ZTE1IiwgInJlbmRlcjUiLCAid2l0aERpcmVjdGl2ZXMiLCAidk1vZGVsU2VsZWN0IiwgIlZBU2VsZWN0X2RlZmF1bHQiLCAiVkFTZWxlY3RfZGVmYXVsdDIiLCAic2VsZWN0ZWRWYXJpYW50IiwgIl9pbmZlcnJlZFZhcmlhbnQkdmFsdTIiLCAiaW1wb3J0X3Z1ZTE4IiwgIl9ob2lzdGVkXzE0IiwgIl9ob2lzdGVkXzIzIiwgIl9ob2lzdGVkXzMzIiwgIl9ob2lzdGVkXzQzIiwgIl9ob2lzdGVkXzUzIiwgIl9ob2lzdGVkXzYzIiwgIl9ob2lzdGVkXzczIiwgInJlbmRlcjYiLCAiVkFWYXJpYW50UHJvbXB0TW9iaWxlX2RlZmF1bHQiLCAiVkFWYXJpYW50UHJvbXB0TW9iaWxlX2RlZmF1bHQyIiwgImlzTW9iaWxlIiwgImRlc2t0b3BNb3VudFBvaW50IiwgInNldFZhcmlhbnQiLCAic2V0TG9jYWxWYXJpYW50IiwgInJlZGlyZWN0IiwgImZvcmNlZCIsICJvbk9wdE91dCIsICJzZXRPcHRPdXQiLCAiaW1wb3J0X3Z1ZTIxIiwgInJlbmRlcjciLCAiVGVsZXBvcnQiLCAidG8iLCAib25PcHRvdXQiLCAib25TZWxlY3QiLCAiQXBwX2RlZmF1bHQiLCAiQXBwX2RlZmF1bHQyIiwgInJvb3QiLCAiY3JlYXRlRWxlbWVudCIsICJhcHBlbmQiLCAiY3JlYXRlQXBwIiwgIm1vdW50Il0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL1ZhcmlhbnRBbGx5RGlhbG9nLnRzIiwgImRpc3QvVmFyaWFudEFsbHlEaWFsb2cvc3JjL1ZhcmlhbnRBbGx5RGlhbG9nL0FwcC52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVZhcmlhbnRQcm9tcHQudnVlIiwgImRpc3QvVmFyaWFudEFsbHlEaWFsb2cvc2ZjLXRlbXBsYXRlOkU6L2doUmVwby9Zc0FyY2hpdmVzLUdhZGdldHMvc3JjL1ZhcmlhbnRBbGx5RGlhbG9nL2NvbXBvbmVudHMvVkFJY29uLnZ1ZT90eXBlPXRlbXBsYXRlIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb25lbnRzL1ZBSWNvbi52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQUJ1dHRvbi52dWU/dHlwZT10ZW1wbGF0ZSIsICJzcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQUJ1dHRvbi52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQUZhZGVUcmFuc2l0aW9uLnZ1ZT90eXBlPXRlbXBsYXRlIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb25lbnRzL1ZBRmFkZVRyYW5zaXRpb24udnVlIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb3NhYmxlcy91c2VJMThuLnRzIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9tZXNzYWdlcy5qc29uIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9tb2R1bGVzL3V0aWxzLnRzIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb3NhYmxlcy91c2VVbmlxdWVJZC50cyIsICJzcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9zYWJsZXMvdXNlU2h1ZmZsZWRWYXJpYW50LnRzIiwgInNyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb3NhYmxlcy91c2VNb2RlbFdyYXBwZXIudHMiLCAic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL2NvbXBvc2FibGVzL3VzZURlZmF1bHQudHMiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVZhcmlhbnRQcm9tcHQudnVlP3R5cGU9dGVtcGxhdGUiLCAic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL2NvbXBvbmVudHMvVkFWYXJpYW50UHJvbXB0LnZ1ZSIsICJkaXN0L1ZhcmlhbnRBbGx5RGlhbG9nL3NyYy9WYXJpYW50QWxseURpYWxvZy9jb21wb25lbnRzL1ZBVmFyaWFudFByb21wdE1vYmlsZS52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVNlbGVjdC52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVNlbGVjdC52dWU/dHlwZT10ZW1wbGF0ZSIsICJzcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVNlbGVjdC52dWUiLCAiZGlzdC9WYXJpYW50QWxseURpYWxvZy9zZmMtdGVtcGxhdGU6RTovZ2hSZXBvL1lzQXJjaGl2ZXMtR2FkZ2V0cy9zcmMvVmFyaWFudEFsbHlEaWFsb2cvY29tcG9uZW50cy9WQVZhcmlhbnRQcm9tcHRNb2JpbGUudnVlP3R5cGU9dGVtcGxhdGUiLCAic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL2NvbXBvbmVudHMvVkFWYXJpYW50UHJvbXB0TW9iaWxlLnZ1ZSIsICJkaXN0L1ZhcmlhbnRBbGx5RGlhbG9nL3NmYy10ZW1wbGF0ZTpFOi9naFJlcG8vWXNBcmNoaXZlcy1HYWRnZXRzL3NyYy9WYXJpYW50QWxseURpYWxvZy9BcHAudnVlP3R5cGU9dGVtcGxhdGUiLCAic3JjL1ZhcmlhbnRBbGx5RGlhbG9nL0FwcC52dWUiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7Y3JlYXRlQXBwfSBmcm9tICd2dWUnO1xuaW1wb3J0IEFwcCBmcm9tICcuL0FwcC52dWUnO1xuXG5jb25zdCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5kb2N1bWVudC5ib2R5LmFwcGVuZChyb290KTtcbmNyZWF0ZUFwcChBcHApLm1vdW50KHJvb3QpO1xuIiwgIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQge3JlZn0gZnJvbSAndnVlJztcbmltcG9ydCB7c2V0TG9jYWxWYXJpYW50LCByZWRpcmVjdCwgVmFsaWRWYXJpYW50LCBzZXRPcHRPdXR9IGZyb20gJ2V4dC5nYWRnZXQuVmFyaWFudEFsbHknO1xuaW1wb3J0IFZBVmFyaWFudFByb21wdCBmcm9tICcuL2NvbXBvbmVudHMvVkFWYXJpYW50UHJvbXB0LnZ1ZSc7XG5pbXBvcnQgVkFWYXJpYW50UHJvbXB0TW9iaWxlIGZyb20gJy4vY29tcG9uZW50cy9WQVZhcmlhbnRQcm9tcHRNb2JpbGUudnVlJztcbmltcG9ydCB7Z2V0TW91bnRQb2ludCwgaXNNb2JpbGVEZXZpY2V9IGZyb20gJy4vbW9kdWxlcy91dGlscyc7XG5cbmNvbnN0IGlzT3BlbiA9IHJlZih0cnVlKTtcbmNvbnN0IGlzRGlzYWJsZWQgPSByZWYoZmFsc2UpO1xuY29uc3QgaXNNb2JpbGUgPSBpc01vYmlsZURldmljZSgpO1xuY29uc3QgZGVza3RvcE1vdW50UG9pbnQgPSBnZXRNb3VudFBvaW50KCk7XG5cbmZ1bmN0aW9uIHNldFZhcmlhbnQodmFyaWFudDogVmFsaWRWYXJpYW50KSB7XG5cdHNldExvY2FsVmFyaWFudCh2YXJpYW50KTtcblx0cmVkaXJlY3QodmFyaWFudCwge2ZvcmNlZDogdHJ1ZX0pO1xufVxuXG4vLyBCcm93c2VyIHN1cHBvcnQ6IGlPUyBTYWZhcmkgPCAxNVxuLy8gV29yayBhcm91bmQgU2FmYXJpIGZpcmluZyBzY3JvbGwgZXZlbnQgYXQgdW5leHBlY3RlZCBjb25kaXRpb25zIChlLmcuIHBvcHBpbmcgdXAgU2VsZWN0KVxuYWRkRXZlbnRMaXN0ZW5lcihpc01vYmlsZSA/ICd0b3VjaG1vdmUnIDogJ3Njcm9sbCcsICgpID0+IHtcblx0aWYgKCFpc0Rpc2FibGVkLnZhbHVlKSB7XG5cdFx0aXNPcGVuLnZhbHVlID0gZmFsc2U7XG5cdH1cbn0pO1xuXG5mdW5jdGlvbiBvbk9wdE91dCgpIHtcblx0c2V0T3B0T3V0KCk7XG59XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8VGVsZXBvcnQgOnRvPVwiZGVza3RvcE1vdW50UG9pbnRcIj5cblx0XHQ8VkFWYXJpYW50UHJvbXB0XG5cdFx0XHR2LWlmPVwiIWlzTW9iaWxlXCJcblx0XHRcdHYtbW9kZWw6b3Blbj1cImlzT3BlblwiXG5cdFx0XHR2LW1vZGVsOmRpc2FibGVkPVwiaXNEaXNhYmxlZFwiXG5cdFx0XHQ6YXV0by1jbG9zZT1cImZhbHNlXCJcblx0XHRcdEBvcHRvdXQ9XCJvbk9wdE91dFwiXG5cdFx0XHRAc2VsZWN0PVwic2V0VmFyaWFudFwiXG5cdFx0Lz5cblx0PC9UZWxlcG9ydD5cblxuXHQ8IS0tIFRlbGVwb3J0IHRvIGJvZHkgYmVjYXVzZSB0aGV5IGFyZSBhbHdheXMgZmxvYXRlZCBhdCBib3R0b20gLS0+XG5cdDxUZWxlcG9ydCB0bz1cImJvZHlcIj5cblx0XHQ8VkFWYXJpYW50UHJvbXB0TW9iaWxlXG5cdFx0XHR2LWlmPVwiaXNNb2JpbGVcIlxuXHRcdFx0di1tb2RlbDpvcGVuPVwiaXNPcGVuXCJcblx0XHRcdHYtbW9kZWw6ZGlzYWJsZWQ9XCJpc0Rpc2FibGVkXCJcblx0XHRcdEBvcHRvdXQ9XCJvbk9wdE91dFwiXG5cdFx0XHRAc2VsZWN0PVwic2V0VmFyaWFudFwiXG5cdFx0Lz5cblx0PC9UZWxlcG9ydD5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwibGVzc1wiPlxuQGltcG9ydCAocmVmZXJlbmNlKSAnLi9zdHlsZXMvdG9rZW5zLmxlc3MnO1xuXG4udmEtdmFyaWFudC1wcm9tcHQge1xuXHQvLyBWZWN0b3IgMjAyMiBzcGVjaWZpYyBhZGp1c3RtZW50c1xuXHQuc2tpbi12ZWN0b3ItMjAyMiAmIHtcblx0XHQvLyBDYWxjdWxhdGVkIGZyb20gVmVjdG9yIDIwMjIgc291cmNlIGNvZGVcblx0XHRAdmVjdG9yLTIwMjItaGVhZGVyLWhlaWdodDogNTBweCArIDIgKiA4cHg7XG5cdFx0bWF4LWhlaWdodDogY2FsYygxMDAlIC0gQHNwYWNpbmctdmVydGljYWwtZGlhbG9nIC0gQHZlY3Rvci0yMDIyLWhlYWRlci1oZWlnaHQpO1xuXG5cdFx0LnZlY3Rvci10b2MtYXZhaWxhYmxlLnZlY3Rvci1mZWF0dXJlLXRvYy1waW5uZWQtY2xpZW50cHJlZi0xICYsXG5cdFx0LnZlY3Rvci1mZWF0dXJlLW1haW4tbWVudS1waW5uZWQtZW5hYmxlZCAmIHtcblx0XHRcdEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMDBweCkgYW5kIChtYXgtd2lkdGg6IDEyMDBweCkge1xuXHRcdFx0XHRsZWZ0OiB1bnNldDtcblxuXHRcdFx0XHQvLyBDYWxjdWxhdGVkIGZyb20gVmVjdG9yIDIwMjIgc291cmNlIGNvZGVcblx0XHRcdFx0Ly8gSW4gdGhpcyB3aWR0aCB0aGlzIHByb21wdCB3aWxsIG5vdCBvYnNjdXJlIGFydGljbGUgY29udGVudFxuXHRcdFx0XHRAdmVjdG9yLTIwMjItbGVmdC1wYWRkaW5nOiAyLjc1ZW07XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OiAtKEB2ZWN0b3ItMjAyMi1sZWZ0LXBhZGRpbmcgLyAzICogMik7XG5cdFx0XHRcdG1heC13aWR0aDogY2FsYygxMi4yNWVtICsgMzZweCk7XG5cdFx0XHRcdHBhZGRpbmc6IEBzcGFjaW5nLTEwMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcblx0XHRcdEB2ZWN0b3ItMjAyMi1sZWZ0LXBhZGRpbmc6IDMuMjVlbTtcblx0XHRcdGxlZnQ6IHVuc2V0O1xuXHRcdFx0bWFyZ2luLWxlZnQ6IC0oQHZlY3Rvci0yMDIyLWxlZnQtcGFkZGluZyAvIDMgKiAyKTtcblx0XHRcdG1heC13aWR0aDogY2FsYygxNS43NWVtICsgMzZweCk7XG5cdFx0fVxuXHR9XG59XG48L3N0eWxlPlxuLi9tb2R1bGVzL3V0aWxzXG4iLCAiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cbmltcG9ydCB7cmVmLCB3YXRjaH0gZnJvbSAndnVlJztcbmltcG9ydCB7dHlwZSBWYWxpZFZhcmlhbnR9IGZyb20gJ2V4dC5nYWRnZXQuVmFyaWFudEFsbHknO1xuaW1wb3J0IFZBQnV0dG9uIGZyb20gJy4vVkFCdXR0b24udnVlJztcbmltcG9ydCBWQUZhZGVUcmFuc2l0aW9uIGZyb20gJy4vVkFGYWRlVHJhbnNpdGlvbi52dWUnO1xuaW1wb3J0IHVzZUkxOG4sIHtpMThuVmFyaWFudH0gZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlSTE4bic7XG5pbXBvcnQgdXNlVW5pcXVlSWQgZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlVW5pcXVlSWQnO1xuaW1wb3J0IHVzZVNodWZmbGVkVmFyaWFudCBmcm9tICcuLi9jb21wb3NhYmxlcy91c2VTaHVmZmxlZFZhcmlhbnQnO1xuaW1wb3J0IHtWQUxJRF9WQVJJQU5UUywgaW5mZXJyZWRWYXJpYW50fSBmcm9tICcuLi9tb2R1bGVzL3V0aWxzJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcy5qc29uJztcbmltcG9ydCB1c2VNb2RlbFdyYXBwZXIgZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlTW9kZWxXcmFwcGVyJztcbmltcG9ydCB1c2VEZWZhdWx0IGZyb20gJy4uL2NvbXBvc2FibGVzL3VzZURlZmF1bHQnO1xuXG5jb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhcblx0ZGVmaW5lUHJvcHM8e1xuXHRcdG9wZW46IGJvb2xlYW47XG5cdFx0ZGlzYWJsZWQ/OiBib29sZWFuO1xuXHRcdGF1dG9DbG9zZT86IGJvb2xlYW47XG5cdH0+KCksXG5cdHtcblx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0YXV0b0Nsb3NlOiBmYWxzZSxcblx0fVxuKTtcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XG5cdChlOiAndXBkYXRlOm9wZW4nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG5cdChlOiAndXBkYXRlOmRpc2FibGVkJywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuXHQoZTogJ3NlbGVjdCcsIHZhcmlhbnQ6IFZhbGlkVmFyaWFudCk6IHZvaWQ7XG5cdChlOiAnb3B0b3V0Jyk6IHZvaWQ7XG59PigpO1xuXG5jb25zdCBwcm9tcHQgPSByZWY8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbmNvbnN0IHRpdGxlSWQgPSB1c2VVbmlxdWVJZCgpO1xuY29uc3QgZGVzY0lkID0gdXNlVW5pcXVlSWQoKTtcbmNvbnN0IGlzT3BlbiA9IHVzZU1vZGVsV3JhcHBlcihwcm9wcywgZW1pdCwgJ29wZW4nKTtcbmNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNb2RlbFdyYXBwZXIocHJvcHMsIGVtaXQsICdkaXNhYmxlZCcpO1xuY29uc3QgaXNWYXJpYW50TmFycm93ZWQgPSB1c2VEZWZhdWx0KCgpID0+IGluZmVycmVkVmFyaWFudC52YWx1ZSAhPT0gbnVsbCk7XG5jb25zdCBzaHVmZmxlZFZhcmlhbnQgPSB1c2VTaHVmZmxlZFZhcmlhbnQoaXNWYXJpYW50TmFycm93ZWQpO1xuXG5mdW5jdGlvbiBvcHRPdXRBbmRDbG9zZSgpIHtcblx0ZW1pdCgnb3B0b3V0Jyk7XG5cdGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZWxlY3QodmFyaWFudDogVmFsaWRWYXJpYW50KSB7XG5cdGlzRGlzYWJsZWQudmFsdWUgPSB0cnVlO1xuXHRlbWl0KCdzZWxlY3QnLCB2YXJpYW50KTtcbn1cblxud2F0Y2gocHJvbXB0LCAoKSA9PiB7XG5cdGNvbnN0IGVsZW1lbnQgPSBwcm9tcHQudmFsdWU7XG5cdGlmIChlbGVtZW50ICE9PSBudWxsKSB7XG5cdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKGV2KSA9PiB7XG5cdFx0XHQvLyBEbyBub3QgZGlzbWlzcyBpZiBhbnkgYnV0dG9uIGlzIHByZXNzZWQgb3IgdGhlIHByb21wdCBpcyBkaXNhYmxlZFxuXHRcdFx0aWYgKGV2LmJ1dHRvbnMgPT09IDAgJiYgcHJvcHMuYXV0b0Nsb3NlICYmICFwcm9wcy5kaXNhYmxlZCkge1xuXHRcdFx0XHRpc09wZW4udmFsdWUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8VHJhbnNpdGlvbiBuYW1lPVwidmEtdmFyaWFudC1wcm9tcHRcIiBhcHBlYXI+XG5cdFx0PGRpdlxuXHRcdFx0di1pZj1cIm9wZW5cIlxuXHRcdFx0cmVmPVwicHJvbXB0XCJcblx0XHRcdDpsYW5nPVwiYHpoLSR7aTE4blZhcmlhbnR9YFwiXG5cdFx0XHRjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0XCJcblx0XHRcdHJvbGU9XCJkaWFsb2dcIlxuXHRcdFx0YXJpYS1tb2RhbD1cImZhbHNlXCJcblx0XHRcdDphcmlhLWxhYmVsbGVkYnk9XCJ0aXRsZUlkXCJcblx0XHRcdDphcmlhLWRlc2NyaWJlZGJ5PVwiZGVzY0lkXCJcblx0XHQ+XG5cdFx0XHQ8VkFCdXR0b25cblx0XHRcdFx0Y2xhc3M9XCJ2YS12YXJpYW50LXByb21wdF9fY2xvc2VcIlxuXHRcdFx0XHR3ZWlnaHQ9XCJxdWlldFwiXG5cdFx0XHRcdGljb249XCJjbG9zZVwiXG5cdFx0XHRcdDp0aXRsZT1cInVzZUkxOG4oJ2Nsb3NlJylcIlxuXHRcdFx0XHQ6YXJpYS1sYWJlbD1cInVzZUkxOG4oJ2Nsb3NlJylcIlxuXHRcdFx0XHQ6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdEBjbGljaz1cIm9wdE91dEFuZENsb3NlXCJcblx0XHRcdC8+XG5cdFx0XHQ8aDIgOmlkPVwidGl0bGVJZFwiIGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHRfX3RpdGxlIHZhLXRpdGxlXCI+XG5cdFx0XHRcdHt7IHVzZUkxOG4oaXNWYXJpYW50TmFycm93ZWQgPyAndnAuaGVhZGVyLmFsdCcgOiAndnAuaGVhZGVyJykgfX08YnIgLz5cblx0XHRcdFx0PFZBRmFkZVRyYW5zaXRpb24+XG5cdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdHYtaWY9XCIhaXNWYXJpYW50TmFycm93ZWRcIlxuXHRcdFx0XHRcdFx0OmtleT1cInNodWZmbGVkVmFyaWFudFwiXG5cdFx0XHRcdFx0XHQ6bGFuZz1cImB6aC0ke3NodWZmbGVkVmFyaWFudH1gXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHRfX3RpdGxlX192YXJpYW50XCJcblx0XHRcdFx0XHRcdD57eyBtZXNzYWdlcy52YXJpYW50c1tzaHVmZmxlZFZhcmlhbnRdIH19PC9zcGFuXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHQ8L1ZBRmFkZVRyYW5zaXRpb24+XG5cdFx0XHQ8L2gyPlxuXHRcdFx0PHAgOmlkPVwiZGVzY0lkXCIgY2xhc3M9XCJ2YS12YXJpYW50LXByb21wdF9fZGVzYyB2YS1wYXJhXCI+XG5cdFx0XHRcdHt7IHVzZUkxOG4oaXNWYXJpYW50TmFycm93ZWQgPyAndnAubWFpbi5hbHQnIDogJ3ZwLm1haW4nKSB9fVxuXHRcdFx0PC9wPlxuXHRcdFx0PGRpdiBjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0X19vcHRpb25zXCI+XG5cdFx0XHRcdDwhLS0gaW5mZXJyZWRWYXJpYW50IGlzIG5vbi1udWxsLCBndWFyZGVkIGJ5IGlzVmFyaWFudE5hcnJvd2VkIC0tPlxuXHRcdFx0XHQ8VkFCdXR0b25cblx0XHRcdFx0XHR2LWZvcj1cInZhcmlhbnQgaW4gaXNWYXJpYW50TmFycm93ZWQgJiYgaW5mZXJyZWRWYXJpYW50ICE9PSBudWxsXG5cdFx0XHRcdFx0XHQ/IFtpbmZlcnJlZFZhcmlhbnRdXG5cdFx0XHRcdFx0XHQ6IFZBTElEX1ZBUklBTlRTXCJcblx0XHRcdFx0XHQ6a2V5PVwidmFyaWFudFwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJ2YS12YXJpYW50LXByb21wdF9fb3B0aW9uc19fYnV0dG9uXCJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJ7J3ZhLXZhcmlhbnQtcHJvbXB0X19vcHRpb25zX19idXR0b24tLXByaW1hcnknOiBpc1ZhcmlhbnROYXJyb3dlZH1cIlxuXHRcdFx0XHRcdGluZGljYXRvcj1cImFycm93TmV4dFwiXG5cdFx0XHRcdFx0d2VpZ2h0PVwicXVpZXRcIlxuXHRcdFx0XHRcdGFjdGlvbj1cInByb2dyZXNzaXZlXCJcblx0XHRcdFx0XHQ6bGFuZz1cInZhcmlhbnRcIlxuXHRcdFx0XHRcdDpkaXNhYmxlZD1cImRpc2FibGVkXCJcblx0XHRcdFx0XHRAY2xpY2s9XCJzZWxlY3QodmFyaWFudClcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3sgbWVzc2FnZXMudmFyaWFudHNbdmFyaWFudF0gfX1cblx0XHRcdFx0PC9WQUJ1dHRvbj5cblx0XHRcdFx0PFZBQnV0dG9uXG5cdFx0XHRcdFx0di1pZj1cImlzVmFyaWFudE5hcnJvd2VkXCJcblx0XHRcdFx0XHRjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0X19vcHRpb25zX19idXR0b25cIlxuXHRcdFx0XHRcdGluZGljYXRvcj1cImFycm93TmV4dFwiXG5cdFx0XHRcdFx0d2VpZ2h0PVwicXVpZXRcIlxuXHRcdFx0XHRcdGFjdGlvbj1cInByb2dyZXNzaXZlXCJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0QGNsaWNrPVwiaXNWYXJpYW50TmFycm93ZWQgPSBmYWxzZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eyB1c2VJMThuKCd2cC5idXR0b24ub3RoZXInKSB9fVxuXHRcdFx0XHQ8L1ZBQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8Zm9vdGVyIGNsYXNzPVwidmEtdmFyaWFudC1wcm9tcHRfX2Zvb3RlclwiPlxuXHRcdFx0XHQ8cCBjbGFzcz1cInZhLXBhcmEgdmEtcGFyYS0tc3VidGxlXCI+XG5cdFx0XHRcdFx0e3sgdXNlSTE4bigndnAubWFpbi5leHQnKSB9fVxuXHRcdFx0XHQ8L3A+XG5cdFx0XHQ8L2Zvb3Rlcj5cblx0XHQ8L2Rpdj5cblx0PC9UcmFuc2l0aW9uPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZCBsYW5nPVwibGVzc1wiPlxuQGltcG9ydCAocmVmZXJlbmNlKSAnLi4vc3R5bGVzL21peGlucy5sZXNzJztcbkBpbXBvcnQgKHJlZmVyZW5jZSkgJy4uL3N0eWxlcy90b2tlbnMubGVzcyc7XG5cbi52YS10aXRsZSB7XG5cdGJvcmRlcjogMDsgLy8gUmVzZXRcblx0cGFkZGluZzogMDsgLy8gUmVzZXRcblx0b3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcblxuXHRmb250LXNpemU6IEBmb250LXNpemUteHgtbGFyZ2U7XG5cdGZvbnQtd2VpZ2h0OiBAZm9udC13ZWlnaHQtYm9sZDtcblx0bWFyZ2luOiBAc3BhY2luZy01MCBAc3BhY2luZy0wO1xuXHRjb2xvcjogQGNvbG9yLWJhc2U7XG59XG5cbi52YS1wYXJhIHtcblx0b3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcblx0bWFyZ2luLXRvcDogQHNwYWNpbmctNTA7XG5cdG1hcmdpbi1ib3R0b206IEBzcGFjaW5nLTUwO1xuXHRjb2xvcjogQGNvbG9yLWJhc2U7XG5cblx0Ji0tc3VidGxlIHtcblx0XHRjb2xvcjogQGNvbG9yLXN1YnRsZTtcblx0XHRmb250LXNpemU6IEBmb250LXNpemUteC1zbWFsbDtcblx0XHRtYXJnaW4tYm90dG9tOiBAc3BhY2luZy0zNTtcblx0fVxufVxuXG4udmEtdmFyaWFudC1wcm9tcHQge1xuXHRib3gtc2l6aW5nOiBAYm94LXNpemluZy1iYXNlO1xuXHR6LWluZGV4OiBAei1pbmRleC1vdmVybGF5O1xuXHRwYWRkaW5nOiBAc3BhY2luZy0xMDAgQHNwYWNpbmctMTUwO1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGxlZnQ6IEBzcGFjaW5nLWhvcml6b250YWwtZGlhbG9nO1xuXHRib3R0b206IEBzcGFjaW5nLXZlcnRpY2FsLWRpYWxvZztcblx0d2lkdGg6IGNhbGMoMTAwJSAtIEBzcGFjaW5nLWhvcml6b250YWwtZGlhbG9nICogMik7XG5cdG1heC13aWR0aDogMThlbTtcblx0bWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDJlbSk7XG5cblx0b3ZlcmZsb3c6IGF1dG87XG5cdG92ZXJzY3JvbGwtYmVoYXZpb3I6IG5vbmU7XG5cdGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kLWNvbG9yLWJhc2U7XG5cdGJvcmRlcjogQGJvcmRlci1iYXNlO1xuXHRib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuXHRib3gtc2hhZG93OiBAYm94LXNoYWRvdy1kcm9wLW1lZGl1bTtcblx0Zm9udC1mYW1pbHk6IEBmb250LWZhbWlseS1zeXN0ZW0tc2Fucztcblx0Zm9udC1zaXplOiAxcmVtOyAvLyBSZXNldFxuXHRsaW5lLWhlaWdodDogbm9ybWFsOyAvLyBSZXNldFxuXG5cdCZfX2Nsb3NlIHtcblx0XHRwYWRkaW5nOiBAc3BhY2luZy1zaG9ydGhhbmQtYnV0dG9uLWljb24tb25seTtcblx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0bWFyZ2luLXRvcDogQHNwYWNpbmctNTA7XG5cdFx0bWFyZ2luLXJpZ2h0OiAtKEBzcGFjaW5nLWhvcml6b250YWwtYnV0dG9uLWljb24tb25seSArIDFweCk7XG5cdH1cblxuXHQmX190aXRsZSB7XG5cdFx0Jl9fdmFyaWFudCB7XG5cdFx0XHRjb2xvcjogQGNvbG9yLXByb2dyZXNzaXZlO1xuXHRcdH1cblx0fVxuXG5cdCZfX29wdGlvbnMge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdG1hcmdpbjogQHNwYWNpbmctNzUgQHNwYWNpbmctMDtcblxuXHRcdGJvcmRlcjogMXB4IHNvbGlkIEBib3JkZXItY29sb3ItYmFzZTtcblx0XHRib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG5cdFx0Jl9fYnV0dG9uIHtcblx0XHRcdGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1zbWFsbDtcblx0XHRcdGNvbG9yOiBAY29sb3ItYmFzZTtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kLWNvbG9yLWludGVyYWN0aXZlLXN1YnRsZTtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDA7XG5cblx0XHRcdCYtLXByaW1hcnkge1xuXHRcdFx0XHRjb2xvcjogQGNvbG9yLXByb2dyZXNzaXZlO1xuXHRcdFx0fVxuXG5cdFx0XHQmOmhvdmVyLFxuXHRcdFx0JjphY3RpdmUge1xuXHRcdFx0XHRib3JkZXItY29sb3I6IEBib3JkZXItY29sb3ItdHJhbnNwYXJlbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qIFByb21wdCB0cmFuc2l0aW9uIGVmZmVjdCAqL1xuLnZhLXZhcmlhbnQtcHJvbXB0LWVudGVyLWFjdGl2ZSxcbi52YS12YXJpYW50LXByb21wdC1sZWF2ZS1hY3RpdmUge1xuXHR0cmFuc2l0aW9uLXByb3BlcnR5OiBAdHJhbnNpdGlvbi1wcm9wZXJ0eS1mYWRlO1xuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiBAdHJhbnNpdGlvbi1kdXJhdGlvbi1tZWRpdW07XG5cdHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24tc3lzdGVtO1xufVxuXG4udmEtdmFyaWFudC1wcm9tcHQtZW50ZXItZnJvbSxcbi52YS12YXJpYW50LXByb21wdC1sZWF2ZS10byB7XG5cdG9wYWNpdHk6IDA7XG59XG48L3N0eWxlPlxuIiwgImltcG9ydCB7IGNyZWF0ZUNvbW1lbnRWTm9kZSBhcyBfY3JlYXRlQ29tbWVudFZOb2RlLCBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSBbXCJ3aWR0aFwiLCBcImhlaWdodFwiXVxuY29uc3QgX2hvaXN0ZWRfMiA9IHsga2V5OiAwIH1cbmNvbnN0IF9ob2lzdGVkXzMgPSB7IGtleTogMSB9XG5jb25zdCBfaG9pc3RlZF80ID0geyBrZXk6IDIgfVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCB7XG4gICAgY2xhc3M6IFwidmEtaWNvbi1idXR0b25fX2ljb25cIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwieG1sbnM6eGxpbmtcIjogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6ICRwcm9wcy5zaXplLFxuICAgIGhlaWdodDogJHByb3BzLnNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjAgMjBcIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG4gIH0sIFtcbiAgICAoJHByb3BzLmljb24gPT09ICdsYW5nJylcbiAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImdcIiwgX2hvaXN0ZWRfMiwgW1xuICAgICAgICAgIF9jcmVhdGVDb21tZW50Vk5vZGUoXCIgZXNsaW50LWRpc2FibGUgXCIpLFxuICAgICAgICAgIF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIk0yMCAxOGgtMS40NGEuNjEuNjEgMCAwMS0uNC0uMTIuODEuODEgMCAwMS0uMjMtLjMxTDE3IDE1aC01bC0xIDIuNTRhLjc3Ljc3IDAgMDEtLjIyLjMuNTkuNTkgMCAwMS0uNC4xNEg5bDQuNTUtMTEuNDdoMS44OXptLTMuNTMtNC4zMUwxNC44OSA5LjVhMTEuNjIgMTEuNjIgMCAwMS0uMzktMS4yNHEtLjA5LjM3LS4xOS42OWwtLjE5LjU2LTEuNTggNC4xOXptLTYuMy0xLjU4YTEzLjQzIDEzLjQzIDAgMDEtMi45MS0xLjQxIDExLjQ2IDExLjQ2IDAgMDAyLjgxLTUuMzdIMTJWNEg3LjMxYTQgNCAwIDAwLS4yLS41NkM2Ljg3IDIuNzkgNi42IDIgNi42IDJsLTEuNDcuNXMuNC44OS42IDEuNUgwdjEuMzNoMi4xNUExMS4yMyAxMS4yMyAwIDAwNSAxMC43YTE3LjE5IDE3LjE5IDAgMDEtNSAyLjFxLjU2LjgyLjg3IDEuMzhhMjMuMjggMjMuMjggMCAwMDUuMjItMi41MSAxNS42NCAxNS42NCAwIDAwMy41NiAxLjc3ek0zLjYzIDUuMzNoNC45MWE4LjExIDguMTEgMCAwMS0yLjQ1IDQuNDUgOS4xMSA5LjExIDAgMDEtMi40Ni00LjQ1elwiIH0sIG51bGwsIC0xIC8qIEhPSVNURUQgKi8pKSxcbiAgICAgICAgICBfY3JlYXRlQ29tbWVudFZOb2RlKFwiIGVzbGludC1lbmFibGUgXCIpXG4gICAgICAgIF0pKVxuICAgICAgOiAoJHByb3BzLmljb24gPT09ICdjbG9zZScpXG4gICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImdcIiwgX2hvaXN0ZWRfMywgX2NhY2hlWzFdIHx8IChfY2FjaGVbMV0gPSBbXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7IGQ6IFwibTQuMzQgMi45MyAxMi43MyAxMi43My0xLjQxIDEuNDFMMi45MyA0LjM1elwiIH0sIG51bGwsIC0xIC8qIEhPSVNURUQgKi8pLFxuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIk0xNy4wNyA0LjM0IDQuMzQgMTcuMDdsLTEuNDEtMS40MUwxNS42NiAyLjkzelwiIH0sIG51bGwsIC0xIC8qIEhPSVNURUQgKi8pXG4gICAgICAgICAgXSkpKVxuICAgICAgICA6IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJnXCIsIF9ob2lzdGVkXzQsIF9jYWNoZVsyXSB8fCAoX2NhY2hlWzJdID0gW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIk04LjU5IDMuNDIgMTQuMTcgOUgydjJoMTIuMTdsLTUuNTggNS41OUwxMCAxOGw4LTgtOC04elwiIH0sIG51bGwsIC0xIC8qIEhPSVNURUQgKi8pXG4gICAgICAgICAgXSkpKVxuICBdLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8xKSlcbn0iLCAiaW1wb3J0IHNjcmlwdCBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQUljb24udnVlP3R5cGU9c2NyaXB0XCI7aW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFJY29uLnZ1ZT90eXBlPXRlbXBsYXRlXCI7IHNjcmlwdC5yZW5kZXIgPSByZW5kZXI7c2NyaXB0Ll9fZmlsZSA9IFwic3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFJY29uLnZ1ZVwiO2V4cG9ydCBkZWZhdWx0IHNjcmlwdDsiLCAiaW1wb3J0IHsgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUJsb2NrIGFzIF9jcmVhdGVCbG9jaywgY3JlYXRlQ29tbWVudFZOb2RlIGFzIF9jcmVhdGVDb21tZW50Vk5vZGUsIHJlbmRlclNsb3QgYXMgX3JlbmRlclNsb3QsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrLCBub3JtYWxpemVDbGFzcyBhcyBfbm9ybWFsaXplQ2xhc3MgfSBmcm9tIFwidnVlXCJcblxuY29uc3QgX2hvaXN0ZWRfMSA9IHtcbiAga2V5OiAxLFxuICBjbGFzczogXCJ2YS1idXR0b25fX3RleHRcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcImJ1dHRvblwiLCB7XG4gICAgY2xhc3M6IF9ub3JtYWxpemVDbGFzcyhbXCJ2YS1idXR0b25cIiwge1xuXHRcdFx0J3ZhLWJ1dHRvbi0tYWN0aW9uLXByb2dyZXNzaXZlJzogJHByb3BzLmFjdGlvbiA9PT0gJ3Byb2dyZXNzaXZlJyxcblx0XHRcdCd2YS1idXR0b24tLXdlaWdodC1xdWlldCc6ICRwcm9wcy53ZWlnaHQgPT09ICdxdWlldCcsXG5cdFx0fV0pLFxuICAgIG9uQ2xpY2s6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gJGV2ZW50ID0+IChfY3R4LiRlbWl0KCdjbGljaycpKSlcbiAgfSwgW1xuICAgICgkcHJvcHMuaWNvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soJHNldHVwW1wiVkFJY29uXCJdLCB7XG4gICAgICAgICAga2V5OiAwLFxuICAgICAgICAgIGNsYXNzOiBcInZhLWJ1dHRvbl9faWNvblwiLFxuICAgICAgICAgIGljb246ICRwcm9wcy5pY29uXG4gICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImljb25cIl0pKVxuICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKSxcbiAgICAoX2N0eC4kc2xvdHNbJ2RlZmF1bHQnXSlcbiAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcInNwYW5cIiwgX2hvaXN0ZWRfMSwgW1xuICAgICAgICAgIF9yZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImRlZmF1bHRcIiwge30sIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICAgICAgXSkpXG4gICAgICA6IF9jcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgICgkcHJvcHMuaW5kaWNhdG9yICE9PSB1bmRlZmluZWQpXG4gICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jaygkc2V0dXBbXCJWQUljb25cIl0sIHtcbiAgICAgICAgICBrZXk6IDIsXG4gICAgICAgICAgY2xhc3M6IFwidmEtYnV0dG9uX19pbmRpY2F0b3JcIixcbiAgICAgICAgICBpY29uOiAkcHJvcHMuaW5kaWNhdG9yLFxuICAgICAgICAgIHNpemU6IDE2XG4gICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImljb25cIl0pKVxuICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICBdLCAyIC8qIENMQVNTICovKSlcbn0iLCAiaW1wb3J0IHNjcmlwdCBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQUJ1dHRvbi52dWU/dHlwZT1zY3JpcHRcIjtpbXBvcnQgXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBQnV0dG9uLnZ1ZT90eXBlPXN0eWxlJmluZGV4PTBcIjtpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQUJ1dHRvbi52dWU/dHlwZT10ZW1wbGF0ZVwiOyBzY3JpcHQucmVuZGVyID0gcmVuZGVyO3NjcmlwdC5fX2ZpbGUgPSBcInNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBQnV0dG9uLnZ1ZVwiO3NjcmlwdC5fX3Njb3BlSWQgPSBcImRhdGEtdi1iYjc3MzRiMVwiO2V4cG9ydCBkZWZhdWx0IHNjcmlwdDsiLCAiaW1wb3J0IHsgcmVuZGVyU2xvdCBhcyBfcmVuZGVyU2xvdCwgVHJhbnNpdGlvbiBhcyBfVHJhbnNpdGlvbiwgd2l0aEN0eCBhcyBfd2l0aEN0eCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUJsb2NrIGFzIF9jcmVhdGVCbG9jayB9IGZyb20gXCJ2dWVcIlxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSkge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUJsb2NrKF9UcmFuc2l0aW9uLCB7XG4gICAgbmFtZTogXCJ2YS1mYWRlXCIsXG4gICAgbW9kZTogXCJvdXQtaW5cIlxuICB9LCB7XG4gICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgX3JlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiZGVmYXVsdFwiLCB7fSwgdW5kZWZpbmVkLCB0cnVlKVxuICAgIF0pLFxuICAgIF86IDMgLyogRk9SV0FSREVEICovXG4gIH0pKVxufSIsICJjb25zdCBzY3JpcHQgPSB7fTtpbXBvcnQgXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBRmFkZVRyYW5zaXRpb24udnVlP3R5cGU9c3R5bGUmaW5kZXg9MFwiO2ltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBRmFkZVRyYW5zaXRpb24udnVlP3R5cGU9dGVtcGxhdGVcIjsgc2NyaXB0LnJlbmRlciA9IHJlbmRlcjtzY3JpcHQuX19maWxlID0gXCJzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQUZhZGVUcmFuc2l0aW9uLnZ1ZVwiO3NjcmlwdC5fX3Njb3BlSWQgPSBcImRhdGEtdi1iYjljNTc1MVwiO2V4cG9ydCBkZWZhdWx0IHNjcmlwdDsiLCAiaW1wb3J0IHtjb21wdXRlZH0gZnJvbSAndnVlJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcy5qc29uJztcbmltcG9ydCB7d2dVc2VyVmFyaWFudH0gZnJvbSAnLi4vbW9kdWxlcy91dGlscyc7XG5cbi8vIEludGVyZmFjZSB2YXJpYW50IG9mIHZhcmlhbnQgcHJvbXB0XG5jb25zdCBpMThuVmFyaWFudCA9IGNvbXB1dGVkKCgpID0+IHtcblx0aWYgKHdnVXNlclZhcmlhbnQudmFsdWUgPT09ICd6aCcpIHtcblx0XHQvLyBObyBjb252ZXJzaW9uOiB1c2UgcmFuZG9tbHkgc2VsZWN0ZWQgdmFyaWFudFxuXHRcdHJldHVybiBNYXRoLnJhbmRvbSgpID4gMC41ID8gJ2hhbnMnIDogJ2hhbnQnO1xuXHR9XG5cdGlmIChbJ3poLWhhbnQnLCAnemgtdHcnLCAnemgtaGsnLCAnemgtbW8nXS5pbmNsdWRlcyh3Z1VzZXJWYXJpYW50LnZhbHVlKSkge1xuXHRcdHJldHVybiAnaGFudCc7XG5cdH1cblxuXHRyZXR1cm4gJ2hhbnMnO1xufSk7XG5cbmZ1bmN0aW9uIHVzZUkxOG4oa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBjdXJyZW50TXNnc0dyb3VwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gbWVzc2FnZXNbaTE4blZhcmlhbnQudmFsdWVdO1xuXHRyZXR1cm4gY3VycmVudE1zZ3NHcm91cFtrZXldID8/IGtleTtcbn1cblxuZXhwb3J0IHt1c2VJMThuIGFzIGRlZmF1bHQsIGkxOG5WYXJpYW50fTtcbiIsICJ7XG5cdFwidmFyaWFudHNcIjoge1xuXHRcdFwiemgtY25cIjogXCLkuK3lm73lpKfpmYbnroDkvZNcIixcblx0XHRcInpoLXNnXCI6IFwi5paw5Yqg5Z2h566A5L2TXCIsXG5cdFx0XCJ6aC1teVwiOiBcIumprOadpeilv+S6mueugOS9k1wiLFxuXHRcdFwiemgtaGtcIjogXCLkuK3lnIvpppnmuK/nuYHpq5RcIixcblx0XHRcInpoLW1vXCI6IFwi5Lit5ZyL5r6z6ZaA57mB6auUXCIsXG5cdFx0XCJ6aC10d1wiOiBcIuS4reWci+iHuueBo+e5gemrlFwiXG5cdH0sXG5cdFwiaGFuc1wiOiB7XG5cdFx0XCJzcGFjZVwiOiBcIlwiLFxuXHRcdFwiY2xvc2VcIjogXCLlhbPpl61cIixcblx0XHRcInZwLmhlYWRlclwiOiBcIuaIkeS7rOaUr+aMgVwiLFxuXHRcdFwidnAuaGVhZGVyLmFsdFwiOiBcIuiusOS9j+atpOWPmOS9k++8n1wiLFxuXHRcdFwidnAubWFpblwiOiBcIumAieWPluWGheWuueeahOivreiogOWPmOS9k1wiLFxuXHRcdFwidnAubWFpbi5hbHRcIjogXCLku6XlkI7pg73kvb/nlKjmraTlj5jkvZPlkYjnjrDlhoXlrrlcIixcblx0XHRcInZwLm1haW4uZXh0XCI6IFwi5L+d5a2Y5oKo5YGP5aW955qE5Lit5paH6K+t6KiA5Y+Y5L2T77yM5Lul6YG/5YWN5pi+56S6566A57mB5re35p2C55qE5YaF5a6577yM5o+Q5L6b5pyA5L2z55qE6ZiF6K+75L2T6aqM44CCXCIsXG5cdFx0XCJ2cC5idXR0b24ub2tcIjogXCLnoa7lrppcIixcblx0XHRcInZwLmJ1dHRvbi5vdGhlclwiOiBcIuWFtuS7llwiXG5cdH0sXG5cdFwiaGFudFwiOiB7XG5cdFx0XCJzcGFjZVwiOiBcIlwiLFxuXHRcdFwiY2xvc2VcIjogXCLpl5zplolcIixcblx0XHRcInZwLmhlYWRlclwiOiBcIuaIkeWAkeaUr+aPtFwiLFxuXHRcdFwidnAuaGVhZGVyLmFsdFwiOiBcIuiomOS9j+atpOiuiumrlO+8n1wiLFxuXHRcdFwidnAubWFpblwiOiBcIumBuOWPluWFp+WuueeahOiqnuiogOiuiumrlFwiLFxuXHRcdFwidnAubWFpbi5hbHRcIjogXCLku6Xlvozpg73kvb/nlKjmraTororpq5TlkYjnj77lhaflrrlcIixcblx0XHRcInZwLm1haW4uZXh0XCI6IFwi5YSy5a2Y5oKo5YGP5aW955qE5Lit5paH6Kqe6KiA6K6K6auU77yM5Lul6YG/5YWN6aGv56S657Ch57mB5re36Zuc55qE5YWn5a6577yM5o+Q5L6b5pyA5L2z55qE6Zax6K6A6auU6amX44CCXCIsXG5cdFx0XCJ2cC5idXR0b24ub2tcIjogXCLnorrlrppcIixcblx0XHRcInZwLmJ1dHRvbi5vdGhlclwiOiBcIuWFtuS7llwiXG5cdH1cbn1cbiIsICJpbXBvcnQge3R5cGUgVmFsaWRWYXJpYW50fSBmcm9tICdleHQuZ2FkZ2V0LlZhcmlhbnRBbGx5JztcbmltcG9ydCB7Y29tcHV0ZWQsIHJlZn0gZnJvbSAndnVlJztcblxuY29uc3QgVkFMSURfVkFSSUFOVFMgPSBbJ3poLWNuJywgJ3poLXNnJywgJ3poLW15JywgJ3poLXR3JywgJ3poLWhrJywgJ3poLW1vJ10gYXMgY29uc3Q7XG5cbi8vIFdyYXAgd2dVc2VyVmFyaWFudCBpbiBhIHJlZiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuLy8gSXQgaGFzIG5vIHJlYWN0aXZpdHkgaW4gcHJvZHVjdGlvbi4gKGNoYW5nZXMgdG8gd2dVc2VyVmFyaWFudCB3aWxsIG5vdCBiZSByZWZsZWN0ZWQpXG4vLyB3Z1VzZXJWYXJpYW50IGNhbiBiZSBudWxsLCBzbyBmYWxscyBiYWNrIHRvIGFuIGVtcHR5IHN0cmluZy5cbmNvbnN0IHdnVXNlclZhcmlhbnQgPSByZWYobXcuY29uZmlnLmdldCgnd2dVc2VyVmFyaWFudCcpID8/ICcnKTtcblxuZnVuY3Rpb24gaXNNb2JpbGVEZXZpY2UoKTogYm9vbGVhbiB7XG5cdC8vIEJyb3dzZXIgc3VwcG9ydDpcblx0Ly8gQ2hyb21pdW0gb24gc29tZSBBbmRyb2lkIGRldmljZSAoZS5nLiBTYW1zdW5nKSBoYXMgXCIoaG92ZXI6IGhvdmVyKVwiIHNldFxuXHQvLyBTbyBjaGVjayBwb2ludGVyIHRvZ2V0aGVyXG5cdHJldHVybiBtYXRjaE1lZGlhKCcoaG92ZXI6IG5vbmUpLCAocG9pbnRlcjogY29hcnNlKScpLm1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIGdldE1vdW50UG9pbnQoKTogRWxlbWVudCB7XG5cdHN3aXRjaCAobXcuY29uZmlnLmdldCgnc2tpbicpKSB7XG5cdFx0Y2FzZSAndmVjdG9yLTIwMjInOlxuXHRcdFx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tdy1wYWdlLWNvbnRhaW5lcicpWzBdID8/IGRvY3VtZW50LmJvZHk7XG5cdFx0Y2FzZSAnZ29uZ2JpJzpcblx0XHRcdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctY29udGVudC1ibG9jaycpID8/IGRvY3VtZW50LmJvZHk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBkb2N1bWVudC5ib2R5O1xuXHR9XG59XG5cbmNvbnN0IGluZmVycmVkVmFyaWFudCA9IGNvbXB1dGVkKCgpID0+IHtcblx0aWYgKChWQUxJRF9WQVJJQU5UUyBhcyBSZWFkb25seUFycmF5PHN0cmluZz4pLmluY2x1ZGVzKHdnVXNlclZhcmlhbnQudmFsdWUpKSB7XG5cdFx0cmV0dXJuIHdnVXNlclZhcmlhbnQudmFsdWUgYXMgVmFsaWRWYXJpYW50O1xuXHR9XG5cdHJldHVybiBudWxsO1xufSk7XG5cbi8qKlxuICogU2h1ZmZsZSBiZXR3ZWVuIGFsbCB2YWxpZCB2YXJpYW50cy5cbiAqXG4gKiBAcGFyYW0gbGFzdCBsYXN0IHNodWZmbGVkIHZhcmlhbnQsIHVzZWQgdG8gcHJldmVudCBkdXBsaWNhdGlvbnNcbiAqIEByZXR1cm5zIHNodWZmbGVkIHZhcmlhbnRcbiAqL1xuZnVuY3Rpb24gc2h1ZmZsZVZhcmlhbnQobGFzdD86IFZhbGlkVmFyaWFudCk6IFZhbGlkVmFyaWFudCB7XG5cdGNvbnN0IHRhcmdldEFycmF5ID0gWy4uLlZBTElEX1ZBUklBTlRTXS5maWx0ZXIoKGkpID0+IHtcblx0XHRyZXR1cm4gaSAhPT0gbGFzdDtcblx0fSk7XG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGFyZ2V0QXJyYXkubGVuZ3RoKTtcblx0cmV0dXJuIHRhcmdldEFycmF5W3JhbmRvbUluZGV4XSE7XG59XG5cbmV4cG9ydCB7VkFMSURfVkFSSUFOVFMsIHdnVXNlclZhcmlhbnQsIGlzTW9iaWxlRGV2aWNlLCBnZXRNb3VudFBvaW50LCBpbmZlcnJlZFZhcmlhbnQsIHNodWZmbGVWYXJpYW50fTtcbiIsICJsZXQgY291bnRlciA9IDA7XG5cbi8qKlxuICogUmV0dXJuIGEgdW5pcXVlIGVsZW1lbnQgSUQgb24gZWFjaCBjYWxsLlxuICpcbiAqIEByZXR1cm5zIGlkXG4gKi9cbmZ1bmN0aW9uIHVzZVVuaXF1ZUlkKCk6IHN0cmluZyB7XG5cdHJldHVybiBgdmEtJHtjb3VudGVyKyt9YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlVW5pcXVlSWQ7XG4iLCAiaW1wb3J0IHtSZWYsIHJlZiwgd2F0Y2h9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQge3R5cGUgVmFsaWRWYXJpYW50fSBmcm9tICdleHQuZ2FkZ2V0LlZhcmlhbnRBbGx5JztcbmltcG9ydCB7aW5mZXJyZWRWYXJpYW50LCBzaHVmZmxlVmFyaWFudH0gZnJvbSAnLi4vbW9kdWxlcy91dGlscyc7XG5cbmNvbnN0IElOVEVSVkFMID0gMyAqIDEwMDA7XG5cbi8qKlxuICogUmV0dXJuIGEgcmVmIHdoaWNoIHNodWZmbGUgYmV0d2VlbiBhbGwgcG9zc2libGUgdmFyaWFudHMuXG4gKlxuICogQHBhcmFtIGlzRnJlZXplZCBzaG91bGQgc2h1ZmZsaW5nIHBhdXNlIG9yIG5vdFxuICovXG5mdW5jdGlvbiB1c2VTaHVmZmxlZFZhcmlhbnQoaXNGcmVlemVkOiBSZWY8Ym9vbGVhbj4pOiBSZWY8VmFsaWRWYXJpYW50PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHJlZjxWYWxpZFZhcmlhbnQ+KHNodWZmbGVWYXJpYW50KCkpO1xuXHRsZXQgaWQ6IG51bWJlcjtcblxuXHR3YXRjaChcblx0XHRpc0ZyZWV6ZWQsXG5cdFx0KG5ld1ZhbHVlKSA9PiB7XG5cdFx0XHRpZiAobmV3VmFsdWUpIHtcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbChpZCk7XG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZnJlZXplIGF0IGluZmVycmVkIHZhcmlhbnQgYXQgYSBiZXN0IGVmZm9ydFxuXHRcdFx0XHQvLyBUaGlzIHNob3VsZCBiZSBtb3N0IGNhc2VzXG5cdFx0XHRcdHJlc3VsdC52YWx1ZSA9IGluZmVycmVkVmFyaWFudC52YWx1ZSA/PyBzaHVmZmxlVmFyaWFudCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0XHRcdHJlc3VsdC52YWx1ZSA9IHNodWZmbGVWYXJpYW50KHJlc3VsdC52YWx1ZSk7XG5cdFx0XHRcdH0sIElOVEVSVkFMKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHtpbW1lZGlhdGU6IHRydWV9XG5cdCk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlU2h1ZmZsZWRWYXJpYW50O1xuIiwgImltcG9ydCB7V3JpdGFibGVDb21wdXRlZFJlZiwgY29tcHV0ZWR9IGZyb20gJ3Z1ZSc7XG5cbi8qKlxuICogUmV0dXJuIGEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHByb3AgdmFsdWUgd2hlbiBpcyBhY2Nlc3NlZFxuICogYW5kIGZpcmVzIGFuIGV2ZW50IHdoZW4gaXMgc2V0LiBVc2VkIHdpdGggdi1tb2RlbC5cbiAqXG4gKiBAcGFyYW0gcHJvcHMgcHJvcHMgZmllbGQgb2YgYSBjb21wb25lbnRcbiAqIEBwYXJhbSBlbWl0IGVtaXQgZnVuY3Rpb24gb2YgYSBjb21wb25lbnRcbiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHByb3BcbiAqIEByZXR1cm4gd3JhcHBlZCBjb21wdXRlciBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiB1c2VNb2RlbFdyYXBwZXI8VCBleHRlbmRzIHN0cmluZywgUCBleHRlbmRzIFJlY29yZDxULCB1bmtub3duPj4oXG5cdHByb3BzOiBQLFxuXHRlbWl0OiAoZXZlbnQ6IGB1cGRhdGU6JHtUfWAsIHZhbHVlOiBQW1RdKSA9PiB2b2lkLFxuXHRuYW1lOiBUID0gJ21vZGVsVmFsdWUnIGFzIFRcbik6IFdyaXRhYmxlQ29tcHV0ZWRSZWY8UFtUXT4ge1xuXHRyZXR1cm4gY29tcHV0ZWQoe1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBwcm9wc1tuYW1lXTtcblx0XHR9LFxuXHRcdHNldCh2YWx1ZSkge1xuXHRcdFx0ZW1pdChgdXBkYXRlOiR7bmFtZX1gLCB2YWx1ZSk7XG5cdFx0fSxcblx0fSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZU1vZGVsV3JhcHBlcjtcbiIsICJpbXBvcnQge1JlZiwgV2F0Y2hTb3VyY2UsIGNvbXB1dGVkLCBzaGFsbG93UmVmLCB3YXRjaH0gZnJvbSAndnVlJztcblxuLyoqXG4gKiBDcmVhdGUgYSByZWYgdGhhdCwgY2FuIGJlIGluZGVwZW5kZW50bHkgdXBkYXRlZCwgYnV0IHdoZW4gaXRzIGRlZmF1bHRcbiAqIHZhbHVlIGNoYW5nZXMsIGl0IGlzIHJlc3RvcmVkIHRvIGl0cyAobmV3KSBkZWZhdWx0IHZhbHVlLlxuICpcbiAqIFVzZWQgZm9yIGRlYnVnZ2luZy5cbiAqL1xuZnVuY3Rpb24gdXNlRGVmYXVsdDxUPihkZWZhdWx0VmFsdWU6IFdhdGNoU291cmNlPFQ+KTogUmVmPFQ+IHtcblx0Y29uc3QgcmVhbFJlZiA9IHNoYWxsb3dSZWY8VD4odHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlLnZhbHVlKTtcblxuXHR3YXRjaChcblx0XHRkZWZhdWx0VmFsdWUsXG5cdFx0KG5ld1ZhbHVlKSA9PiB7XG5cdFx0XHRyZWFsUmVmLnZhbHVlID0gbmV3VmFsdWU7XG5cdFx0fSxcblx0XHR7ZGVlcDogdHJ1ZX1cblx0KTtcblxuXHRyZXR1cm4gY29tcHV0ZWQoe1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiByZWFsUmVmLnZhbHVlO1xuXHRcdH0sXG5cdFx0c2V0KG5ld1ZhbHVlKSB7XG5cdFx0XHRyZWFsUmVmLnZhbHVlID0gbmV3VmFsdWU7XG5cdFx0fSxcblx0fSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZURlZmF1bHQ7XG4iLCAiaW1wb3J0IHsgY3JlYXRlVk5vZGUgYXMgX2NyZWF0ZVZOb2RlLCB0b0Rpc3BsYXlTdHJpbmcgYXMgX3RvRGlzcGxheVN0cmluZywgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jaywgY3JlYXRlQ29tbWVudFZOb2RlIGFzIF9jcmVhdGVDb21tZW50Vk5vZGUsIHdpdGhDdHggYXMgX3dpdGhDdHgsIGNyZWF0ZVRleHRWTm9kZSBhcyBfY3JlYXRlVGV4dFZOb2RlLCByZW5kZXJMaXN0IGFzIF9yZW5kZXJMaXN0LCBGcmFnbWVudCBhcyBfRnJhZ21lbnQsIG5vcm1hbGl6ZUNsYXNzIGFzIF9ub3JtYWxpemVDbGFzcywgY3JlYXRlQmxvY2sgYXMgX2NyZWF0ZUJsb2NrLCBUcmFuc2l0aW9uIGFzIF9UcmFuc2l0aW9uIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSBbXCJsYW5nXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiYXJpYS1kZXNjcmliZWRieVwiXVxuY29uc3QgX2hvaXN0ZWRfMiA9IFtcImlkXCJdXG5jb25zdCBfaG9pc3RlZF8zID0gW1wibGFuZ1wiXVxuY29uc3QgX2hvaXN0ZWRfNCA9IFtcImlkXCJdXG5jb25zdCBfaG9pc3RlZF81ID0geyBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdF9fb3B0aW9uc1wiIH1cbmNvbnN0IF9ob2lzdGVkXzYgPSB7IGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0X19mb290ZXJcIiB9XG5jb25zdCBfaG9pc3RlZF83ID0geyBjbGFzczogXCJ2YS1wYXJhIHZhLXBhcmEtLXN1YnRsZVwiIH1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihfY3R4LCBfY2FjaGUsICRwcm9wcywgJHNldHVwLCAkZGF0YSwgJG9wdGlvbnMpIHtcbiAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jayhfVHJhbnNpdGlvbiwge1xuICAgIG5hbWU6IFwidmEtdmFyaWFudC1wcm9tcHRcIixcbiAgICBhcHBlYXI6IFwiXCJcbiAgfSwge1xuICAgIGRlZmF1bHQ6IF93aXRoQ3R4KCgpID0+IFtcbiAgICAgICgkcHJvcHMub3BlbilcbiAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgIHJlZjogXCJwcm9tcHRcIixcbiAgICAgICAgICAgIGxhbmc6IGB6aC0keyRzZXR1cC5pMThuVmFyaWFudH1gLFxuICAgICAgICAgICAgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHRcIixcbiAgICAgICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgICAgICBcImFyaWEtbW9kYWxcIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogJHNldHVwLnRpdGxlSWQsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogJHNldHVwLmRlc2NJZFxuICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJWQUJ1dHRvblwiXSwge1xuICAgICAgICAgICAgICBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdF9fY2xvc2VcIixcbiAgICAgICAgICAgICAgd2VpZ2h0OiBcInF1aWV0XCIsXG4gICAgICAgICAgICAgIGljb246IFwiY2xvc2VcIixcbiAgICAgICAgICAgICAgdGl0bGU6ICRzZXR1cC51c2VJMThuKCdjbG9zZScpLFxuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogJHNldHVwLnVzZUkxOG4oJ2Nsb3NlJyksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgICAgIG9uQ2xpY2s6ICRzZXR1cC5vcHRPdXRBbmRDbG9zZVxuICAgICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1widGl0bGVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiZGlzYWJsZWRcIl0pLFxuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImgyXCIsIHtcbiAgICAgICAgICAgICAgaWQ6ICRzZXR1cC50aXRsZUlkLFxuICAgICAgICAgICAgICBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdF9fdGl0bGUgdmEtdGl0bGVcIlxuICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICBfY3JlYXRlVGV4dFZOb2RlKF90b0Rpc3BsYXlTdHJpbmcoJHNldHVwLnVzZUkxOG4oJHNldHVwLmlzVmFyaWFudE5hcnJvd2VkID8gJ3ZwLmhlYWRlci5hbHQnIDogJ3ZwLmhlYWRlcicpKSwgMSAvKiBURVhUICovKSxcbiAgICAgICAgICAgICAgX2NhY2hlWzFdIHx8IChfY2FjaGVbMV0gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwiYnJcIiwgbnVsbCwgbnVsbCwgLTEgLyogSE9JU1RFRCAqLykpLFxuICAgICAgICAgICAgICBfY3JlYXRlVk5vZGUoJHNldHVwW1wiVkFGYWRlVHJhbnNpdGlvblwiXSwgbnVsbCwge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IF93aXRoQ3R4KCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICghJHNldHVwLmlzVmFyaWFudE5hcnJvd2VkKVxuICAgICAgICAgICAgICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJHNldHVwLnNodWZmbGVkVmFyaWFudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmc6IGB6aC0keyRzZXR1cC5zaHVmZmxlZFZhcmlhbnR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0X190aXRsZV9fdmFyaWFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgfSwgX3RvRGlzcGxheVN0cmluZygkc2V0dXAubWVzc2FnZXMudmFyaWFudHNbJHNldHVwLnNodWZmbGVkVmFyaWFudF0pLCA5IC8qIFRFWFQsIFBST1BTICovLCBfaG9pc3RlZF8zKSlcbiAgICAgICAgICAgICAgICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF86IDEgLyogU1RBQkxFICovXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8yKSxcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwXCIsIHtcbiAgICAgICAgICAgICAgaWQ6ICRzZXR1cC5kZXNjSWQsXG4gICAgICAgICAgICAgIGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0X19kZXNjIHZhLXBhcmFcIlxuICAgICAgICAgICAgfSwgX3RvRGlzcGxheVN0cmluZygkc2V0dXAudXNlSTE4bigkc2V0dXAuaXNWYXJpYW50TmFycm93ZWQgPyAndnAubWFpbi5hbHQnIDogJ3ZwLm1haW4nKSksIDkgLyogVEVYVCwgUFJPUFMgKi8sIF9ob2lzdGVkXzQpLFxuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF81LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVDb21tZW50Vk5vZGUoXCIgaW5mZXJyZWRWYXJpYW50IGlzIG5vbi1udWxsLCBndWFyZGVkIGJ5IGlzVmFyaWFudE5hcnJvd2VkIFwiKSxcbiAgICAgICAgICAgICAgKF9vcGVuQmxvY2sodHJ1ZSksIF9jcmVhdGVFbGVtZW50QmxvY2soX0ZyYWdtZW50LCBudWxsLCBfcmVuZGVyTGlzdCgkc2V0dXAuaXNWYXJpYW50TmFycm93ZWQgJiYgJHNldHVwLmluZmVycmVkVmFyaWFudCAhPT0gbnVsbFxuXHRcdFx0XHRcdFx0PyBbJHNldHVwLmluZmVycmVkVmFyaWFudF1cblx0XHRcdFx0XHRcdDogJHNldHVwLlZBTElEX1ZBUklBTlRTLCAodmFyaWFudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soJHNldHVwW1wiVkFCdXR0b25cIl0sIHtcbiAgICAgICAgICAgICAgICAgIGtleTogdmFyaWFudCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfbm9ybWFsaXplQ2xhc3MoW1widmEtdmFyaWFudC1wcm9tcHRfX29wdGlvbnNfX2J1dHRvblwiLCB7J3ZhLXZhcmlhbnQtcHJvbXB0X19vcHRpb25zX19idXR0b24tLXByaW1hcnknOiAkc2V0dXAuaXNWYXJpYW50TmFycm93ZWR9XSksXG4gICAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IFwiYXJyb3dOZXh0XCIsXG4gICAgICAgICAgICAgICAgICB3ZWlnaHQ6IFwicXVpZXRcIixcbiAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJwcm9ncmVzc2l2ZVwiLFxuICAgICAgICAgICAgICAgICAgbGFuZzogdmFyaWFudCxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiAkZXZlbnQgPT4gKCRzZXR1cC5zZWxlY3QodmFyaWFudCkpXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICBfY3JlYXRlVGV4dFZOb2RlKF90b0Rpc3BsYXlTdHJpbmcoJHNldHVwLm1lc3NhZ2VzLnZhcmlhbnRzW3ZhcmlhbnRdKSwgMSAvKiBURVhUICovKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfOiAyIC8qIERZTkFNSUMgKi9cbiAgICAgICAgICAgICAgICB9LCAxMDMyIC8qIFBST1BTLCBEWU5BTUlDX1NMT1RTICovLCBbXCJjbGFzc1wiLCBcImxhbmdcIiwgXCJkaXNhYmxlZFwiLCBcIm9uQ2xpY2tcIl0pKVxuICAgICAgICAgICAgICB9KSwgMTI4IC8qIEtFWUVEX0ZSQUdNRU5UICovKSksXG4gICAgICAgICAgICAgICgkc2V0dXAuaXNWYXJpYW50TmFycm93ZWQpXG4gICAgICAgICAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soJHNldHVwW1wiVkFCdXR0b25cIl0sIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdF9fb3B0aW9uc19fYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIGluZGljYXRvcjogXCJhcnJvd05leHRcIixcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiBcInF1aWV0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJwcm9ncmVzc2l2ZVwiLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBfY2FjaGVbMF0gfHwgKF9jYWNoZVswXSA9ICRldmVudCA9PiAoJHNldHVwLmlzVmFyaWFudE5hcnJvd2VkID0gZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBfd2l0aEN0eCgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZVRleHRWTm9kZShfdG9EaXNwbGF5U3RyaW5nKCRzZXR1cC51c2VJMThuKCd2cC5idXR0b24ub3RoZXInKSksIDEgLyogVEVYVCAqLylcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF86IDEgLyogU1RBQkxFICovXG4gICAgICAgICAgICAgICAgICB9LCA4IC8qIFBST1BTICovLCBbXCJkaXNhYmxlZFwiXSkpXG4gICAgICAgICAgICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZm9vdGVyXCIsIF9ob2lzdGVkXzYsIFtcbiAgICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBcIiwgX2hvaXN0ZWRfNywgX3RvRGlzcGxheVN0cmluZygkc2V0dXAudXNlSTE4bigndnAubWFpbi5leHQnKSksIDEgLyogVEVYVCAqLylcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSwgOCAvKiBQUk9QUyAqLywgX2hvaXN0ZWRfMSkpXG4gICAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSlcbiAgICBdKSxcbiAgICBfOiAxIC8qIFNUQUJMRSAqL1xuICB9KSlcbn0iLCAiaW1wb3J0IHNjcmlwdCBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQVZhcmlhbnRQcm9tcHQudnVlP3R5cGU9c2NyaXB0XCI7aW1wb3J0IFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQVZhcmlhbnRQcm9tcHQudnVlP3R5cGU9c3R5bGUmaW5kZXg9MFwiO2ltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBVmFyaWFudFByb21wdC52dWU/dHlwZT10ZW1wbGF0ZVwiOyBzY3JpcHQucmVuZGVyID0gcmVuZGVyO3NjcmlwdC5fX2ZpbGUgPSBcInNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBVmFyaWFudFByb21wdC52dWVcIjtzY3JpcHQuX19zY29wZUlkID0gXCJkYXRhLXYtNWE0NGNjNzVcIjtleHBvcnQgZGVmYXVsdCBzY3JpcHQ7IiwgIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQge3JlZn0gZnJvbSAndnVlJztcbmltcG9ydCB7dHlwZSBWYWxpZFZhcmlhbnR9IGZyb20gJ2V4dC5nYWRnZXQuVmFyaWFudEFsbHknO1xuaW1wb3J0IFZBQnV0dG9uIGZyb20gJy4vVkFCdXR0b24udnVlJztcbmltcG9ydCBWQVNlbGVjdCBmcm9tICcuL1ZBU2VsZWN0LnZ1ZSc7XG5pbXBvcnQgdXNlSTE4biwge2kxOG5WYXJpYW50fSBmcm9tICcuLi9jb21wb3NhYmxlcy91c2VJMThuJztcbmltcG9ydCB1c2VVbmlxdWVJZCBmcm9tICcuLi9jb21wb3NhYmxlcy91c2VVbmlxdWVJZCc7XG5pbXBvcnQge1ZBTElEX1ZBUklBTlRTLCBpbmZlcnJlZFZhcmlhbnQsIHNodWZmbGVWYXJpYW50fSBmcm9tICcuLi9tb2R1bGVzL3V0aWxzJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcy5qc29uJztcbmltcG9ydCB1c2VNb2RlbFdyYXBwZXIgZnJvbSAnLi4vY29tcG9zYWJsZXMvdXNlTW9kZWxXcmFwcGVyJztcbmltcG9ydCB1c2VEZWZhdWx0IGZyb20gJy4uL2NvbXBvc2FibGVzL3VzZURlZmF1bHQnO1xuXG5jb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhcblx0ZGVmaW5lUHJvcHM8e1xuXHRcdG9wZW46IGJvb2xlYW47XG5cdFx0ZGlzYWJsZWQ/OiBib29sZWFuO1xuXHR9PigpLFxuXHR7XG5cdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHR9XG4pO1xuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcblx0KGU6ICd1cGRhdGU6b3BlbicsIHZhbHVlOiBib29sZWFuKTogdm9pZDtcblx0KGU6ICd1cGRhdGU6ZGlzYWJsZWQnLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG5cdChlOiAnc2VsZWN0JywgdmFyaWFudDogVmFsaWRWYXJpYW50KTogdm9pZDtcblx0KGU6ICdvcHRvdXQnKTogdm9pZDtcbn0+KCk7XG5cbmNvbnN0IHByb21wdCA9IHJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuY29uc3QgdGl0bGVJZCA9IHVzZVVuaXF1ZUlkKCk7XG5jb25zdCBzZWxlY3RlZFZhcmlhbnQgPSB1c2VEZWZhdWx0KCgpID0+IGluZmVycmVkVmFyaWFudC52YWx1ZSA/PyBzaHVmZmxlVmFyaWFudCgpKTtcbmNvbnN0IGlzT3BlbiA9IHVzZU1vZGVsV3JhcHBlcihwcm9wcywgZW1pdCwgJ29wZW4nKTtcbmNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNb2RlbFdyYXBwZXIocHJvcHMsIGVtaXQsICdkaXNhYmxlZCcpO1xuXG5mdW5jdGlvbiBvcHRPdXRBbmRDbG9zZSgpIHtcblx0ZW1pdCgnb3B0b3V0Jyk7XG5cdGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZWxlY3QodmFyaWFudDogVmFsaWRWYXJpYW50KSB7XG5cdGlzRGlzYWJsZWQudmFsdWUgPSB0cnVlO1xuXHRlbWl0KCdzZWxlY3QnLCB2YXJpYW50KTtcbn1cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG5cdDxUcmFuc2l0aW9uIG5hbWU9XCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVcIiBhcHBlYXI+XG5cdFx0PGRpdlxuXHRcdFx0di1pZj1cIm9wZW5cIlxuXHRcdFx0cmVmPVwicHJvbXB0XCJcblx0XHRcdDpsYW5nPVwiYHpoLSR7aTE4blZhcmlhbnR9YFwiXG5cdFx0XHRjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZVwiXG5cdFx0XHRyb2xlPVwiZGlhbG9nXCJcblx0XHRcdGFyaWEtbW9kYWw9XCJmYWxzZVwiXG5cdFx0XHQ6YXJpYS1sYWJlbGxlZGJ5PVwidGl0bGVJZFwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9faGVhZGVyXCI+XG5cdFx0XHRcdDxoMiA6aWQ9XCJ0aXRsZUlkXCIgY2xhc3M9XCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVfX2hlYWRlcl9fdGl0bGUgdmEtdGl0bGVcIj5cblx0XHRcdFx0XHR7eyB1c2VJMThuKCd2cC5tYWluJykgfX1cblx0XHRcdFx0PC9oMj5cblx0XHRcdFx0PFZBQnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3M9XCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVfX2hlYWRlcl9fY2xvc2VcIlxuXHRcdFx0XHRcdHdlaWdodD1cInF1aWV0XCJcblx0XHRcdFx0XHRpY29uPVwiY2xvc2VcIlxuXHRcdFx0XHRcdDp0aXRsZT1cInVzZUkxOG4oJ2Nsb3NlJylcIlxuXHRcdFx0XHRcdDphcmlhLWxhYmVsPVwidXNlSTE4bignY2xvc2UnKVwiXG5cdFx0XHRcdFx0OmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdEBjbGljaz1cIm9wdE91dEFuZENsb3NlXCJcblx0XHRcdFx0Lz5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9fbWFpblwiPlxuXHRcdFx0XHQ8VkFTZWxlY3Rcblx0XHRcdFx0XHR2LW1vZGVsPVwic2VsZWN0ZWRWYXJpYW50XCJcblx0XHRcdFx0XHRjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9fbWFpbl9fc2VsZWN0XCJcblx0XHRcdFx0XHQ6bGFuZz1cInNlbGVjdGVkVmFyaWFudFwiXG5cdFx0XHRcdFx0OmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdDphcmlhLWxhYmVsbGVkYnk9XCJ0aXRsZUlkXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxvcHRpb24gdi1mb3I9XCJ2YXJpYW50IGluIFZBTElEX1ZBUklBTlRTXCIgOmtleT1cInZhcmlhbnRcIiA6dmFsdWU9XCJ2YXJpYW50XCIgOmxhbmc9XCJ2YXJpYW50XCI+XG5cdFx0XHRcdFx0XHR7eyBtZXNzYWdlcy52YXJpYW50c1t2YXJpYW50XSB9fVxuXHRcdFx0XHRcdDwvb3B0aW9uPlxuXHRcdFx0XHQ8L1ZBU2VsZWN0PlxuXHRcdFx0XHQ8VkFCdXR0b25cblx0XHRcdFx0XHRjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9fbWFpbl9fYWN0aW9uXCJcblx0XHRcdFx0XHRhY3Rpb249XCJwcm9ncmVzc2l2ZVwiXG5cdFx0XHRcdFx0aWNvbj1cImFycm93TmV4dFwiXG5cdFx0XHRcdFx0OmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdEBjbGljaz1cInNlbGVjdChzZWxlY3RlZFZhcmlhbnQpXCJcblx0XHRcdFx0XHQ+e3sgdXNlSTE4bigndnAuYnV0dG9uLm9rJykgfX08L1ZBQnV0dG9uXG5cdFx0XHRcdD5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGZvb3RlciBjbGFzcz1cInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9fZm9vdGVyXCI+XG5cdFx0XHRcdDxwIGNsYXNzPVwidmEtcGFyYSB2YS1wYXJhLS1zdWJ0bGVcIj5cblx0XHRcdFx0XHR7eyB1c2VJMThuKCd2cC5tYWluLmV4dCcpIH19XG5cdFx0XHRcdDwvcD5cblx0XHRcdDwvZm9vdGVyPlxuXHRcdDwvZGl2PlxuXHQ8L1RyYW5zaXRpb24+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkIGxhbmc9XCJsZXNzXCI+XG5AaW1wb3J0IChyZWZlcmVuY2UpICcuLi9zdHlsZXMvbWl4aW5zLmxlc3MnO1xuQGltcG9ydCAocmVmZXJlbmNlKSAnLi4vc3R5bGVzL3Rva2Vucy5sZXNzJztcblxuLnZhLXRpdGxlIHtcblx0Ym9yZGVyOiAwOyAvLyBSZXNldFxuXHRwYWRkaW5nOiAwOyAvLyBSZXNldFxuXHRvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuXG5cdGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS14eC1sYXJnZTtcblx0Zm9udC13ZWlnaHQ6IEBmb250LXdlaWdodC1ib2xkO1xuXHRtYXJnaW46IEBzcGFjaW5nLTUwIEBzcGFjaW5nLTA7XG5cdGNvbG9yOiBAY29sb3ItYmFzZTtcbn1cblxuLnZhLXBhcmEge1xuXHRvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuXHRtYXJnaW4tdG9wOiBAc3BhY2luZy01MDtcblx0Y29sb3I6IEBjb2xvci1iYXNlO1xuXG5cdCYtLXN1YnRsZSB7XG5cdFx0Y29sb3I6IEBjb2xvci1zdWJ0bGU7XG5cdFx0Zm9udC1zaXplOiBAZm9udC1zaXplLXgtc21hbGw7XG5cdFx0bWFyZ2luLWJvdHRvbTogQHNwYWNpbmctMzU7XG5cdH1cbn1cblxuLnZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZSB7XG5cdGJveC1zaXppbmc6IEBib3gtc2l6aW5nLWJhc2U7XG5cdHotaW5kZXg6IEB6LWluZGV4LW92ZXJsYXk7XG5cdHBhZGRpbmc6IEBzcGFjaW5nLTUwIEBzcGFjaW5nLTEwMDtcblx0cG9zaXRpb246IGZpeGVkO1xuXHRsZWZ0OiBAc3BhY2luZy0wO1xuXHRyaWdodDogQHNwYWNpbmctMDtcblx0Ym90dG9tOiBAc3BhY2luZy0wO1xuXHRtYXJnaW46IEBzcGFjaW5nLTAgYXV0bztcblx0d2lkdGg6IDEwMCU7XG5cdG1heC13aWR0aDogNjAwcHg7XG5cdG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAyZW0pO1xuXG5cdG92ZXJmbG93OiBhdXRvO1xuXHRvdmVyc2Nyb2xsLWJlaGF2aW9yOiBub25lO1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiBAYmFja2dyb3VuZC1jb2xvci1iYXNlO1xuXHRib3JkZXI6IEBib3JkZXItYmFzZTtcblx0Ym9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcblx0Ym94LXNoYWRvdzogQGJveC1zaGFkb3ctZHJvcC1tZWRpdW07XG5cdGZvbnQtZmFtaWx5OiBAZm9udC1mYW1pbHktc3lzdGVtLXNhbnM7XG5cdGZvbnQtc2l6ZTogMXJlbTsgLy8gUmVzZXRcblx0bGluZS1oZWlnaHQ6IG5vcm1hbDsgLy8gUmVzZXRcblxuXHQmX19oZWFkZXIge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblxuXHRcdCZfX3RpdGxlIHtcblx0XHRcdGZsZXg6IDE7XG5cdFx0XHRmb250LXNpemU6IEBmb250LXNpemUtbWVkaXVtO1xuXHRcdH1cblxuXHRcdCZfX2Nsb3NlIHtcblx0XHRcdHBhZGRpbmc6IEBzcGFjaW5nLXNob3J0aGFuZC1idXR0b24taWNvbi1vbmx5O1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiAtKEBzcGFjaW5nLWhvcml6b250YWwtYnV0dG9uLWljb24tb25seSArIDFweCk7XG5cdFx0fVxuXHR9XG5cblx0Jl9fbWFpbiB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRtYXJnaW4tdG9wOiBAc3BhY2luZy0yNTtcblxuXHRcdCZfX3NlbGVjdCB7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IEBzcGFjaW5nLTc1O1xuXHRcdFx0ZmxleDogMTtcblx0XHR9XG5cblx0XHQmX19hY3Rpb24ge1xuXHRcdFx0ZmxleC1zaHJpbms6IDA7XG5cdFx0fVxuXHR9XG5cblx0Jl9fY2xvc2Uge1xuXHRcdHBhZGRpbmc6IEBzcGFjaW5nLXNob3J0aGFuZC1idXR0b24taWNvbi1vbmx5O1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRtYXJnaW4tcmlnaHQ6IC0oQHNwYWNpbmctaG9yaXpvbnRhbC1idXR0b24taWNvbi1vbmx5ICsgMXB4KTtcblx0fVxufVxuXG4vKiBQcm9tcHQgdHJhbnNpdGlvbiBlZmZlY3QgKi9cbi52YS12YXJpYW50LXByb21wdC1tb2JpbGUtZW50ZXItYWN0aXZlLFxuLnZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZS1sZWF2ZS1hY3RpdmUge1xuXHR0cmFuc2l0aW9uLXByb3BlcnR5OiBAdHJhbnNpdGlvbi1wcm9wZXJ0eS1sYXlvdXQ7XG5cdHRyYW5zaXRpb24tZHVyYXRpb246IEB0cmFuc2l0aW9uLWR1cmF0aW9uLW1lZGl1bTtcblx0dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IEB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi1zeXN0ZW07XG59XG5cbi52YS12YXJpYW50LXByb21wdC1tb2JpbGUtZW50ZXItZnJvbSxcbi52YS12YXJpYW50LXByb21wdC1tb2JpbGUtbGVhdmUtdG8ge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG59XG48L3N0eWxlPlxuLi4vbW9kdWxlcy91dGlsc1xuIiwgIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgdXNlTW9kZWxXcmFwcGVyIGZyb20gJy4uL2NvbXBvc2FibGVzL3VzZU1vZGVsV3JhcHBlcic7XG5cbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xuXHRtb2RlbFZhbHVlOiBzdHJpbmc7XG59PigpO1xuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcblx0KGU6ICd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xufT4oKTtcblxuY29uc3QgbW9kZWxWYWx1ZSA9IHVzZU1vZGVsV3JhcHBlcihwcm9wcywgZW1pdCk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8c2VsZWN0IHYtbW9kZWw9XCJtb2RlbFZhbHVlXCIgY2xhc3M9XCJ2YS1zZWxlY3RcIj5cblx0XHQ8c2xvdCAvPlxuXHQ8L3NlbGVjdD5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQgbGFuZz1cImxlc3NcIj5cbkBpbXBvcnQgKHJlZmVyZW5jZSkgJy4uL3N0eWxlcy9taXhpbnMubGVzcyc7XG5AaW1wb3J0IChyZWZlcmVuY2UpICcuLi9zdHlsZXMvdG9rZW5zLmxlc3MnO1xuXG4udmEtc2VsZWN0IHtcblx0LnNlbGVjdF9faGFuZGxlKCk7XG5cdGFwcGVhcmFuY2U6IG5vbmU7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciByaWdodCBAc3BhY2luZy03NTtcblx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1pbWFnZTogQGljb24tZXhwYW5kO1xuXHRiYWNrZ3JvdW5kLXNpemU6IEBzaXplLWljb24teC1zbWFsbDtcblxuXHQmOmRpc2FibGVkIHtcblx0XHQuc2VsZWN0X19oYW5kbGUtLWRpc2FibGVkKCk7XG5cdFx0YmFja2dyb3VuZC1pbWFnZTogQGljb24tZXhwYW5kLWRpc2FibGVkO1xuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSwgd2hpY2ggc2V0cyBhbiBvcGFjaXR5IGxlc3MgdGhhbiAxIGZvciBkaXNhYmxlZCBzZWxlY3QgZWxlbWVudHMuXG5cdFx0b3BhY2l0eTogQG9wYWNpdHktYmFzZTtcblx0XHRjdXJzb3I6IEBjdXJzb3Itbm90LWFsbG93ZWQ7XG5cdH1cblxuXHQmOmVuYWJsZWQge1xuXHRcdC5zZWxlY3RfX2hhbmRsZS0tZW5hYmxlZCgpO1xuXHR9XG59XG48L3N0eWxlPlxuIiwgImltcG9ydCB7IHJlbmRlclNsb3QgYXMgX3JlbmRlclNsb3QsIHZNb2RlbFNlbGVjdCBhcyBfdk1vZGVsU2VsZWN0LCB3aXRoRGlyZWN0aXZlcyBhcyBfd2l0aERpcmVjdGl2ZXMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jayB9IGZyb20gXCJ2dWVcIlxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gX3dpdGhEaXJlY3RpdmVzKChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJzZWxlY3RcIiwge1xuICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBfY2FjaGVbMF0gfHwgKF9jYWNoZVswXSA9ICRldmVudCA9PiAoKCRzZXR1cC5tb2RlbFZhbHVlKSA9ICRldmVudCkpLFxuICAgIGNsYXNzOiBcInZhLXNlbGVjdFwiXG4gIH0sIFtcbiAgICBfcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJkZWZhdWx0XCIsIHt9LCB1bmRlZmluZWQsIHRydWUpXG4gIF0sIDUxMiAvKiBORUVEX1BBVENIICovKSksIFtcbiAgICBbX3ZNb2RlbFNlbGVjdCwgJHNldHVwLm1vZGVsVmFsdWVdXG4gIF0pXG59IiwgImltcG9ydCBzY3JpcHQgZnJvbSBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFTZWxlY3QudnVlP3R5cGU9c2NyaXB0XCI7aW1wb3J0IFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQVNlbGVjdC52dWU/dHlwZT1zdHlsZSZpbmRleD0wXCI7aW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFTZWxlY3QudnVlP3R5cGU9dGVtcGxhdGVcIjsgc2NyaXB0LnJlbmRlciA9IHJlbmRlcjtzY3JpcHQuX19maWxlID0gXCJzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcY29tcG9uZW50c1xcXFxWQVNlbGVjdC52dWVcIjtzY3JpcHQuX19zY29wZUlkID0gXCJkYXRhLXYtYzliNDY0NjBcIjtleHBvcnQgZGVmYXVsdCBzY3JpcHQ7IiwgImltcG9ydCB7IHRvRGlzcGxheVN0cmluZyBhcyBfdG9EaXNwbGF5U3RyaW5nLCBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgY3JlYXRlVk5vZGUgYXMgX2NyZWF0ZVZOb2RlLCByZW5kZXJMaXN0IGFzIF9yZW5kZXJMaXN0LCBGcmFnbWVudCBhcyBfRnJhZ21lbnQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jaywgd2l0aEN0eCBhcyBfd2l0aEN0eCwgY3JlYXRlVGV4dFZOb2RlIGFzIF9jcmVhdGVUZXh0Vk5vZGUsIGNyZWF0ZUNvbW1lbnRWTm9kZSBhcyBfY3JlYXRlQ29tbWVudFZOb2RlLCBUcmFuc2l0aW9uIGFzIF9UcmFuc2l0aW9uLCBjcmVhdGVCbG9jayBhcyBfY3JlYXRlQmxvY2sgfSBmcm9tIFwidnVlXCJcblxuY29uc3QgX2hvaXN0ZWRfMSA9IFtcImxhbmdcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIl1cbmNvbnN0IF9ob2lzdGVkXzIgPSB7IGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9faGVhZGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMyA9IFtcImlkXCJdXG5jb25zdCBfaG9pc3RlZF80ID0geyBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVfX21haW5cIiB9XG5jb25zdCBfaG9pc3RlZF81ID0gW1widmFsdWVcIiwgXCJsYW5nXCJdXG5jb25zdCBfaG9pc3RlZF82ID0geyBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVfX2Zvb3RlclwiIH1cbmNvbnN0IF9ob2lzdGVkXzcgPSB7IGNsYXNzOiBcInZhLXBhcmEgdmEtcGFyYS0tc3VidGxlXCIgfVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUJsb2NrKF9UcmFuc2l0aW9uLCB7XG4gICAgbmFtZTogXCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVcIixcbiAgICBhcHBlYXI6IFwiXCJcbiAgfSwge1xuICAgIGRlZmF1bHQ6IF93aXRoQ3R4KCgpID0+IFtcbiAgICAgICgkcHJvcHMub3BlbilcbiAgICAgICAgPyAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgIHJlZjogXCJwcm9tcHRcIixcbiAgICAgICAgICAgIGxhbmc6IGB6aC0keyRzZXR1cC5pMThuVmFyaWFudH1gLFxuICAgICAgICAgICAgY2xhc3M6IFwidmEtdmFyaWFudC1wcm9tcHQtbW9iaWxlXCIsXG4gICAgICAgICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6ICRzZXR1cC50aXRsZUlkXG4gICAgICAgICAgfSwgW1xuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yLCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgaWQ6ICRzZXR1cC50aXRsZUlkLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9faGVhZGVyX190aXRsZSB2YS10aXRsZVwiXG4gICAgICAgICAgICAgIH0sIF90b0Rpc3BsYXlTdHJpbmcoJHNldHVwLnVzZUkxOG4oJ3ZwLm1haW4nKSksIDkgLyogVEVYVCwgUFJPUFMgKi8sIF9ob2lzdGVkXzMpLFxuICAgICAgICAgICAgICBfY3JlYXRlVk5vZGUoJHNldHVwW1wiVkFCdXR0b25cIl0sIHtcbiAgICAgICAgICAgICAgICBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVfX2hlYWRlcl9fY2xvc2VcIixcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6IFwicXVpZXRcIixcbiAgICAgICAgICAgICAgICBpY29uOiBcImNsb3NlXCIsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICRzZXR1cC51c2VJMThuKCdjbG9zZScpLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiAkc2V0dXAudXNlSTE4bignY2xvc2UnKSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICRzZXR1cC5vcHRPdXRBbmRDbG9zZVxuICAgICAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBbXCJ0aXRsZVwiLCBcImFyaWEtbGFiZWxcIiwgXCJkaXNhYmxlZFwiXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF80LCBbXG4gICAgICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJWQVNlbGVjdFwiXSwge1xuICAgICAgICAgICAgICAgIG1vZGVsVmFsdWU6ICRzZXR1cC5zZWxlY3RlZFZhcmlhbnQsXG4gICAgICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gJGV2ZW50ID0+ICgoJHNldHVwLnNlbGVjdGVkVmFyaWFudCkgPSAkZXZlbnQpKSxcbiAgICAgICAgICAgICAgICBjbGFzczogXCJ2YS12YXJpYW50LXByb21wdC1tb2JpbGVfX21haW5fX3NlbGVjdFwiLFxuICAgICAgICAgICAgICAgIGxhbmc6ICRzZXR1cC5zZWxlY3RlZFZhcmlhbnQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiAkc2V0dXAudGl0bGVJZFxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgKF9vcGVuQmxvY2sodHJ1ZSksIF9jcmVhdGVFbGVtZW50QmxvY2soX0ZyYWdtZW50LCBudWxsLCBfcmVuZGVyTGlzdCgkc2V0dXAuVkFMSURfVkFSSUFOVFMsICh2YXJpYW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwib3B0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHZhcmlhbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhcmlhbnQsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZzogdmFyaWFudFxuICAgICAgICAgICAgICAgICAgICB9LCBfdG9EaXNwbGF5U3RyaW5nKCRzZXR1cC5tZXNzYWdlcy52YXJpYW50c1t2YXJpYW50XSksIDkgLyogVEVYVCwgUFJPUFMgKi8sIF9ob2lzdGVkXzUpKVxuICAgICAgICAgICAgICAgICAgfSksIDEyOCAvKiBLRVlFRF9GUkFHTUVOVCAqLykpXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgXzogMSAvKiBTVEFCTEUgKi9cbiAgICAgICAgICAgICAgfSwgOCAvKiBQUk9QUyAqLywgW1wibW9kZWxWYWx1ZVwiLCBcImxhbmdcIiwgXCJkaXNhYmxlZFwiLCBcImFyaWEtbGFiZWxsZWRieVwiXSksXG4gICAgICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJWQUJ1dHRvblwiXSwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcInZhLXZhcmlhbnQtcHJvbXB0LW1vYmlsZV9fbWFpbl9fYWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcInByb2dyZXNzaXZlXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJhcnJvd05leHRcIixcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVsxXSB8fCAoX2NhY2hlWzFdID0gJGV2ZW50ID0+ICgkc2V0dXAuc2VsZWN0KCRzZXR1cC5zZWxlY3RlZFZhcmlhbnQpKSlcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IF93aXRoQ3R4KCgpID0+IFtcbiAgICAgICAgICAgICAgICAgIF9jcmVhdGVUZXh0Vk5vZGUoX3RvRGlzcGxheVN0cmluZygkc2V0dXAudXNlSTE4bigndnAuYnV0dG9uLm9rJykpLCAxIC8qIFRFWFQgKi8pXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgXzogMSAvKiBTVEFCTEUgKi9cbiAgICAgICAgICAgICAgfSwgOCAvKiBQUk9QUyAqLywgW1wiZGlzYWJsZWRcIl0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJmb290ZXJcIiwgX2hvaXN0ZWRfNiwgW1xuICAgICAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicFwiLCBfaG9pc3RlZF83LCBfdG9EaXNwbGF5U3RyaW5nKCRzZXR1cC51c2VJMThuKCd2cC5tYWluLmV4dCcpKSwgMSAvKiBURVhUICovKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8xKSlcbiAgICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICAgIF0pLFxuICAgIF86IDEgLyogU1RBQkxFICovXG4gIH0pKVxufSIsICJpbXBvcnQgc2NyaXB0IGZyb20gXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBVmFyaWFudFByb21wdE1vYmlsZS52dWU/dHlwZT1zY3JpcHRcIjtpbXBvcnQgXCJFOlxcXFxnaFJlcG9cXFxcWXNBcmNoaXZlcy1HYWRnZXRzXFxcXHNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxjb21wb25lbnRzXFxcXFZBVmFyaWFudFByb21wdE1vYmlsZS52dWU/dHlwZT1zdHlsZSZpbmRleD0wXCI7aW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFWYXJpYW50UHJvbXB0TW9iaWxlLnZ1ZT90eXBlPXRlbXBsYXRlXCI7IHNjcmlwdC5yZW5kZXIgPSByZW5kZXI7c2NyaXB0Ll9fZmlsZSA9IFwic3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXGNvbXBvbmVudHNcXFxcVkFWYXJpYW50UHJvbXB0TW9iaWxlLnZ1ZVwiO3NjcmlwdC5fX3Njb3BlSWQgPSBcImRhdGEtdi01Y2M3ODY1YlwiO2V4cG9ydCBkZWZhdWx0IHNjcmlwdDsiLCAiaW1wb3J0IHsgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUJsb2NrIGFzIF9jcmVhdGVCbG9jaywgY3JlYXRlQ29tbWVudFZOb2RlIGFzIF9jcmVhdGVDb21tZW50Vk5vZGUsIFRlbGVwb3J0IGFzIF9UZWxlcG9ydCwgRnJhZ21lbnQgYXMgX0ZyYWdtZW50LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jayB9IGZyb20gXCJ2dWVcIlxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhfRnJhZ21lbnQsIG51bGwsIFtcbiAgICAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soX1RlbGVwb3J0LCB7IHRvOiAkc2V0dXAuZGVza3RvcE1vdW50UG9pbnQgfSwgW1xuICAgICAgKCEkc2V0dXAuaXNNb2JpbGUpXG4gICAgICAgID8gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUJsb2NrKCRzZXR1cFtcIlZBVmFyaWFudFByb21wdFwiXSwge1xuICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgb3BlbjogJHNldHVwLmlzT3BlbixcbiAgICAgICAgICAgIFwib25VcGRhdGU6b3BlblwiOiBfY2FjaGVbMF0gfHwgKF9jYWNoZVswXSA9ICRldmVudCA9PiAoKCRzZXR1cC5pc09wZW4pID0gJGV2ZW50KSksXG4gICAgICAgICAgICBkaXNhYmxlZDogJHNldHVwLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICBcIm9uVXBkYXRlOmRpc2FibGVkXCI6IF9jYWNoZVsxXSB8fCAoX2NhY2hlWzFdID0gJGV2ZW50ID0+ICgoJHNldHVwLmlzRGlzYWJsZWQpID0gJGV2ZW50KSksXG4gICAgICAgICAgICBcImF1dG8tY2xvc2VcIjogZmFsc2UsXG4gICAgICAgICAgICBvbk9wdG91dDogJHNldHVwLm9uT3B0T3V0LFxuICAgICAgICAgICAgb25TZWxlY3Q6ICRzZXR1cC5zZXRWYXJpYW50XG4gICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wib3BlblwiLCBcImRpc2FibGVkXCJdKSlcbiAgICAgICAgOiBfY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICAgIF0sIDggLyogUFJPUFMgKi8sIFtcInRvXCJdKSksXG4gICAgX2NyZWF0ZUNvbW1lbnRWTm9kZShcIiBUZWxlcG9ydCB0byBib2R5IGJlY2F1c2UgdGhleSBhcmUgYWx3YXlzIGZsb2F0ZWQgYXQgYm90dG9tIFwiKSxcbiAgICAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soX1RlbGVwb3J0LCB7IHRvOiBcImJvZHlcIiB9LCBbXG4gICAgICAoJHNldHVwLmlzTW9iaWxlKVxuICAgICAgICA/IChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jaygkc2V0dXBbXCJWQVZhcmlhbnRQcm9tcHRNb2JpbGVcIl0sIHtcbiAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgIG9wZW46ICRzZXR1cC5pc09wZW4sXG4gICAgICAgICAgICBcIm9uVXBkYXRlOm9wZW5cIjogX2NhY2hlWzJdIHx8IChfY2FjaGVbMl0gPSAkZXZlbnQgPT4gKCgkc2V0dXAuaXNPcGVuKSA9ICRldmVudCkpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICRzZXR1cC5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgXCJvblVwZGF0ZTpkaXNhYmxlZFwiOiBfY2FjaGVbM10gfHwgKF9jYWNoZVszXSA9ICRldmVudCA9PiAoKCRzZXR1cC5pc0Rpc2FibGVkKSA9ICRldmVudCkpLFxuICAgICAgICAgICAgb25PcHRvdXQ6ICRzZXR1cC5vbk9wdE91dCxcbiAgICAgICAgICAgIG9uU2VsZWN0OiAkc2V0dXAuc2V0VmFyaWFudFxuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcIm9wZW5cIiwgXCJkaXNhYmxlZFwiXSkpXG4gICAgICAgIDogX2NyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSlcbiAgICBdKSlcbiAgXSwgNjQgLyogU1RBQkxFX0ZSQUdNRU5UICovKSlcbn0iLCAiaW1wb3J0IHNjcmlwdCBmcm9tIFwiRTpcXFxcZ2hSZXBvXFxcXFlzQXJjaGl2ZXMtR2FkZ2V0c1xcXFxzcmNcXFxcVmFyaWFudEFsbHlEaWFsb2dcXFxcQXBwLnZ1ZT90eXBlPXNjcmlwdFwiO2ltcG9ydCBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXEFwcC52dWU/dHlwZT1zdHlsZSZpbmRleD0wXCI7aW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIkU6XFxcXGdoUmVwb1xcXFxZc0FyY2hpdmVzLUdhZGdldHNcXFxcc3JjXFxcXFZhcmlhbnRBbGx5RGlhbG9nXFxcXEFwcC52dWU/dHlwZT10ZW1wbGF0ZVwiOyBzY3JpcHQucmVuZGVyID0gcmVuZGVyO3NjcmlwdC5fX2ZpbGUgPSBcInNyY1xcXFxWYXJpYW50QWxseURpYWxvZ1xcXFxBcHAudnVlXCI7ZXhwb3J0IGRlZmF1bHQgc2NyaXB0OyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxlQUF3QkMsUUFBQSxLQUFBOztBQ0N4QixJ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QUFNbEosT0FBTzJIO01BQ2IsaUJBQWlCN0gsT0FBTyxDQUFDLE1BQU1BLE9BQU8sQ0FBQyxJQUFJMkIsWUFBWXpCLE9BQU8ySCxTQUFVbEc7TUFDeEU4RyxVQUFVdkksT0FBTzRIO01BQ2pCLHFCQUFxQjlILE9BQU8sQ0FBQyxNQUFNQSxPQUFPLENBQUMsSUFBSTJCLFlBQVl6QixPQUFPNEgsYUFBY25HO01BQ2hGc0ssVUFBVS9MLE9BQU95TDtNQUNqQk8sVUFBVWhNLE9BQU9xTDtJQUNuQixHQUFHLE1BQU0sR0FBZSxDQUFDLFFBQVEsVUFBVSxDQUFDLE1BQUEsR0FDNUNNLGFBQUEvSyxvQkFBb0IsUUFBUSxJQUFJLENBQUEsQ0FDckMsRUFBQTtJQUNBOztFQUF3QjtBQUM3Qjs7QUNqQ3FTcUwsWUFBT3JNLFNBQVNnTTtBQUFPSyxZQUFPakwsU0FBUztBQUFrQyxJQUFPa0wsZUFBUUQ7O0F6Qkc3WCxJQUFNRSxPQUFPbEksU0FBU21JLGNBQWMsS0FBSztBQUN6Q25JLFNBQVNFLEtBQUtrSSxPQUFPRixJQUFJO0NBQUEsR0FDekJsTixhQUFBcU4sV0FBVUosWUFBRyxFQUFFSyxNQUFNSixJQUFJOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfdnVlMjIiLCAicmVxdWlyZSIsICJpbXBvcnRfdnVlMjAiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiaW1wb3J0X3Z1ZTEyIiwgImltcG9ydF92dWUyIiwgIl9ob2lzdGVkXzEiLCAiX2hvaXN0ZWRfMiIsICJrZXkiLCAiX2hvaXN0ZWRfMyIsICJfaG9pc3RlZF80IiwgInJlbmRlciIsICJfY3R4IiwgIl9jYWNoZSIsICIkcHJvcHMiLCAiJHNldHVwIiwgIiRkYXRhIiwgIiRvcHRpb25zIiwgIm9wZW5CbG9jayIsICJjcmVhdGVFbGVtZW50QmxvY2siLCAiY2xhc3MiLCAieG1sbnMiLCAid2lkdGgiLCAic2l6ZSIsICJoZWlnaHQiLCAidmlld0JveCIsICJpY29uIiwgImNyZWF0ZUNvbW1lbnRWTm9kZSIsICJjcmVhdGVFbGVtZW50Vk5vZGUiLCAiZCIsICJWQUljb25fZGVmYXVsdCIsICJfX2ZpbGUiLCAiVkFJY29uX2RlZmF1bHQyIiwgImltcG9ydF92dWU0IiwgIl9ob2lzdGVkXzEyIiwgInJlbmRlcjIiLCAibm9ybWFsaXplQ2xhc3MiLCAiYWN0aW9uIiwgIndlaWdodCIsICJvbkNsaWNrIiwgIiRldmVudCIsICIkZW1pdCIsICJjcmVhdGVCbG9jayIsICIkc2xvdHMiLCAicmVuZGVyU2xvdCIsICJpbmRpY2F0b3IiLCAiVkFCdXR0b25fZGVmYXVsdCIsICJfX3Njb3BlSWQiLCAiVkFCdXR0b25fZGVmYXVsdDIiLCAiaW1wb3J0X3Z1ZTUiLCAicmVuZGVyMyIsICJUcmFuc2l0aW9uIiwgIm5hbWUiLCAibW9kZSIsICJkZWZhdWx0IiwgIndpdGhDdHgiLCAiXyIsICJzY3JpcHQiLCAiVkFGYWRlVHJhbnNpdGlvbl9kZWZhdWx0IiwgImltcG9ydF92dWU3IiwgIm1lc3NhZ2VzX2RlZmF1bHQiLCAidmFyaWFudHMiLCAiaGFucyIsICJzcGFjZSIsICJjbG9zZSIsICJoYW50IiwgImltcG9ydF92dWU2IiwgIlZBTElEX1ZBUklBTlRTIiwgIndnVXNlclZhcmlhbnQiLCAicmVmIiwgIl9tdyRjb25maWckZ2V0IiwgIm13IiwgImNvbmZpZyIsICJnZXQiLCAiaXNNb2JpbGVEZXZpY2UiLCAibWF0Y2hNZWRpYSIsICJtYXRjaGVzIiwgImdldE1vdW50UG9pbnQiLCAiX2RvY3VtZW50JHF1ZXJ5U2VsZWN0IiwgIl9kb2N1bWVudCRxdWVyeVNlbGVjdDIiLCAiZG9jdW1lbnQiLCAicXVlcnlTZWxlY3RvckFsbCIsICJib2R5IiwgInF1ZXJ5U2VsZWN0b3IiLCAiaW5mZXJyZWRWYXJpYW50IiwgImNvbXB1dGVkIiwgImluY2x1ZGVzIiwgInZhbHVlIiwgInNodWZmbGVWYXJpYW50IiwgImxhc3QiLCAidGFyZ2V0QXJyYXkiLCAiZmlsdGVyIiwgImkiLCAicmFuZG9tSW5kZXgiLCAiTWF0aCIsICJmbG9vciIsICJyYW5kb20iLCAibGVuZ3RoIiwgImkxOG5WYXJpYW50IiwgInVzZUkxOG4iLCAiX2N1cnJlbnRNc2dzR3JvdXAka2V5IiwgImN1cnJlbnRNc2dzR3JvdXAiLCAiY291bnRlciIsICJ1c2VVbmlxdWVJZCIsICJjb25jYXQiLCAidXNlVW5pcXVlSWRfZGVmYXVsdCIsICJpbXBvcnRfdnVlOCIsICJJTlRFUlZBTCIsICJ1c2VTaHVmZmxlZFZhcmlhbnQiLCAiaXNGcmVlemVkIiwgInJlc3VsdCIsICJpZCIsICJ3YXRjaCIsICJuZXdWYWx1ZSIsICJfaW5mZXJyZWRWYXJpYW50JHZhbHUiLCAiY2xlYXJJbnRlcnZhbCIsICJ3aW5kb3ciLCAic2V0SW50ZXJ2YWwiLCAiaW1tZWRpYXRlIiwgInVzZVNodWZmbGVkVmFyaWFudF9kZWZhdWx0IiwgImltcG9ydF92dWU5IiwgInVzZU1vZGVsV3JhcHBlciIsICJwcm9wcyIsICJlbWl0IiwgInNldCIsICJ1c2VNb2RlbFdyYXBwZXJfZGVmYXVsdCIsICJpbXBvcnRfdnVlMTAiLCAidXNlRGVmYXVsdCIsICJkZWZhdWx0VmFsdWUiLCAicmVhbFJlZiIsICJzaGFsbG93UmVmIiwgImRlZXAiLCAidXNlRGVmYXVsdF9kZWZhdWx0IiwgIl9fcHJvcHMiLCAiX19lbWl0IiwgInByb21wdCIsICJ0aXRsZUlkIiwgImRlc2NJZCIsICJpc09wZW4iLCAiaXNEaXNhYmxlZCIsICJpc1ZhcmlhbnROYXJyb3dlZCIsICJzaHVmZmxlZFZhcmlhbnQiLCAib3B0T3V0QW5kQ2xvc2UiLCAic2VsZWN0IiwgInZhcmlhbnQiLCAiZWxlbWVudCIsICJhZGRFdmVudExpc3RlbmVyIiwgImV2IiwgImJ1dHRvbnMiLCAiYXV0b0Nsb3NlIiwgImRpc2FibGVkIiwgImltcG9ydF92dWUxMyIsICJfaG9pc3RlZF8xMyIsICJfaG9pc3RlZF8yMiIsICJfaG9pc3RlZF8zMiIsICJfaG9pc3RlZF80MiIsICJfaG9pc3RlZF81IiwgIl9ob2lzdGVkXzYiLCAiX2hvaXN0ZWRfNyIsICJyZW5kZXI0IiwgImFwcGVhciIsICJvcGVuIiwgImxhbmciLCAicm9sZSIsICJjcmVhdGVWTm9kZSIsICJ0aXRsZSIsICJjcmVhdGVUZXh0Vk5vZGUiLCAidG9EaXNwbGF5U3RyaW5nIiwgIm1lc3NhZ2VzIiwgIkZyYWdtZW50IiwgInJlbmRlckxpc3QiLCAiVkFWYXJpYW50UHJvbXB0X2RlZmF1bHQiLCAiVkFWYXJpYW50UHJvbXB0X2RlZmF1bHQyIiwgImltcG9ydF92dWUxNyIsICJtb2RlbFZhbHVlIiwgImltcG9ydF92dWUxNSIsICJyZW5kZXI1IiwgIndpdGhEaXJlY3RpdmVzIiwgInZNb2RlbFNlbGVjdCIsICJWQVNlbGVjdF9kZWZhdWx0IiwgIlZBU2VsZWN0X2RlZmF1bHQyIiwgInNlbGVjdGVkVmFyaWFudCIsICJfaW5mZXJyZWRWYXJpYW50JHZhbHUyIiwgImltcG9ydF92dWUxOCIsICJfaG9pc3RlZF8xNCIsICJfaG9pc3RlZF8yMyIsICJfaG9pc3RlZF8zMyIsICJfaG9pc3RlZF80MyIsICJfaG9pc3RlZF81MiIsICJfaG9pc3RlZF82MiIsICJfaG9pc3RlZF83MiIsICJyZW5kZXI2IiwgIlZBVmFyaWFudFByb21wdE1vYmlsZV9kZWZhdWx0IiwgIlZBVmFyaWFudFByb21wdE1vYmlsZV9kZWZhdWx0MiIsICJpc01vYmlsZSIsICJkZXNrdG9wTW91bnRQb2ludCIsICJzZXRWYXJpYW50IiwgInNldExvY2FsVmFyaWFudCIsICJyZWRpcmVjdCIsICJmb3JjZWQiLCAib25PcHRPdXQiLCAic2V0T3B0T3V0IiwgImltcG9ydF92dWUyMSIsICJyZW5kZXI3IiwgIlRlbGVwb3J0IiwgInRvIiwgIm9uT3B0b3V0IiwgIm9uU2VsZWN0IiwgIkFwcF9kZWZhdWx0IiwgIkFwcF9kZWZhdWx0MiIsICJyb290IiwgImNyZWF0ZUVsZW1lbnQiLCAiYXBwZW5kIiwgImNyZWF0ZUFwcCIsICJtb3VudCJdCn0K diff --git a/dist/WhoIsActive/WhoIsActive.js b/dist/WhoIsActive/WhoIsActive.js index 2ee1ed51..4eac66e8 100644 --- a/dist/WhoIsActive/WhoIsActive.js +++ b/dist/WhoIsActive/WhoIsActive.js @@ -27,9 +27,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -43,9 +43,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -57,9 +57,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -70,9 +70,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -83,9 +83,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -95,9 +95,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -109,9 +109,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -124,9 +124,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -140,9 +140,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -153,9 +153,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -170,9 +170,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -180,9 +180,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -193,9 +193,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -205,9 +205,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -218,9 +218,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -229,9 +229,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -244,18 +244,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -264,9 +264,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -291,9 +291,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -307,18 +307,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -334,9 +334,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -349,9 +349,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -363,9 +363,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -376,9 +376,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -394,17 +394,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -419,9 +419,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -429,18 +429,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -449,9 +449,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -461,9 +461,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -474,9 +474,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -488,9 +488,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -510,9 +510,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -538,9 +538,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -551,9 +551,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -565,9 +565,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -582,9 +582,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -607,9 +607,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -623,9 +623,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -637,9 +637,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -683,9 +683,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -699,9 +699,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -719,9 +719,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -736,9 +736,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -747,9 +747,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -760,17 +760,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -843,9 +843,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -898,9 +898,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -933,9 +933,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -946,9 +946,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -958,9 +958,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -972,9 +972,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -985,9 +985,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -996,9 +996,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1031,9 +1031,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1055,9 +1055,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1071,9 +1071,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1084,17 +1084,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1110,9 +1110,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1132,9 +1132,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1153,9 +1153,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1196,9 +1196,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js var require_set_helpers = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var SetPrototype = Set.prototype; @@ -1213,9 +1213,9 @@ var require_set_helpers = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js var require_a_set = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js"(exports, module2) { "use strict"; var has = require_set_helpers().has; module2.exports = function(it) { @@ -1225,9 +1225,9 @@ var require_a_set = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js var require_iterate_simple = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js"(exports, module2) { "use strict"; var call = require_function_call(); module2.exports = function(record, fn, ITERATOR_INSTEAD_OF_RECORD) { @@ -1242,9 +1242,9 @@ var require_iterate_simple = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js var require_set_iterate = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var iterateSimple = require_iterate_simple(); @@ -1260,9 +1260,9 @@ var require_set_iterate = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js var require_set_clone = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js"(exports, module2) { "use strict"; var SetHelpers = require_set_helpers(); var iterate = require_set_iterate(); @@ -1278,9 +1278,9 @@ var require_set_clone = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js var require_function_uncurry_this_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var aCallable = require_a_callable(); @@ -1293,9 +1293,9 @@ var require_function_uncurry_this_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js var require_set_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js"(exports, module2) { "use strict"; var uncurryThisAccessor = require_function_uncurry_this_accessor(); var SetHelpers = require_set_helpers(); @@ -1305,9 +1305,9 @@ var require_set_size = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js var require_get_iterator_direct = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) { "use strict"; module2.exports = function(obj) { return { @@ -1319,9 +1319,9 @@ var require_get_iterator_direct = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js var require_get_set_record = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var anObject = require_an_object(); @@ -1357,9 +1357,9 @@ var require_get_set_record = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js var require_set_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1385,9 +1385,9 @@ var require_set_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js var require_set_method_accept_set_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var createSetLike = function(size) { @@ -1422,9 +1422,9 @@ var require_set_method_accept_set_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js var require_es_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js"() { "use strict"; var $2 = require_export(); var difference = require_set_difference(); @@ -1435,17 +1435,9 @@ var require_es_set_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js -var require_esnext_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js"() { - "use strict"; - require_es_set_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js var require_set_intersection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1474,9 +1466,9 @@ var require_set_intersection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js var require_es_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js"() { "use strict"; var $2 = require_export(); var fails = require_fails(); @@ -1491,17 +1483,9 @@ var require_es_set_intersection_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js -var require_esnext_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js"() { - "use strict"; - require_es_set_intersection_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js var require_iterator_close = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js"(exports, module2) { "use strict"; var call = require_function_call(); var anObject = require_an_object(); @@ -1528,9 +1512,9 @@ var require_iterator_close = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js var require_set_is_disjoint_from = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1553,9 +1537,9 @@ var require_set_is_disjoint_from = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js var require_es_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { "use strict"; var $2 = require_export(); var isDisjointFrom = require_set_is_disjoint_from(); @@ -1566,17 +1550,9 @@ var require_es_set_is_disjoint_from_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js -var require_esnext_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"() { - "use strict"; - require_es_set_is_disjoint_from_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js var require_set_is_subset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var size = require_set_size(); @@ -1593,9 +1569,9 @@ var require_set_is_subset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js var require_es_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSubsetOf = require_set_is_subset_of(); @@ -1606,17 +1582,9 @@ var require_es_set_is_subset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js -var require_esnext_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"() { - "use strict"; - require_es_set_is_subset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js var require_set_is_superset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1636,9 +1604,9 @@ var require_set_is_superset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js var require_es_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { "use strict"; var $2 = require_export(); var isSupersetOf = require_set_is_superset_of(); @@ -1649,17 +1617,9 @@ var require_es_set_is_superset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js -var require_esnext_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"() { - "use strict"; - require_es_set_is_superset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js var require_set_symmetric_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1682,9 +1642,9 @@ var require_set_symmetric_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js var require_es_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { "use strict"; var $2 = require_export(); var symmetricDifference = require_set_symmetric_difference(); @@ -1695,17 +1655,9 @@ var require_es_set_symmetric_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js -var require_esnext_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"() { - "use strict"; - require_es_set_symmetric_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js var require_set_union = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js"(exports, module2) { "use strict"; var aSet = require_a_set(); var add = require_set_helpers().add; @@ -1724,9 +1676,9 @@ var require_set_union = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js var require_es_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js"() { "use strict"; var $2 = require_export(); var union = require_set_union(); @@ -1737,22 +1689,14 @@ var require_es_set_union_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js -var require_esnext_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js"() { - "use strict"; - require_es_set_union_v2(); - } -}); - // dist/WhoIsActive/WhoIsActive.js -require_esnext_set_difference_v2(); -require_esnext_set_intersection_v2(); -require_esnext_set_is_disjoint_from_v2(); -require_esnext_set_is_subset_of_v2(); -require_esnext_set_is_superset_of_v2(); -require_esnext_set_symmetric_difference_v2(); -require_esnext_set_union_v2(); +require_es_set_difference_v2(); +require_es_set_intersection_v2(); +require_es_set_is_disjoint_from_v2(); +require_es_set_is_subset_of_v2(); +require_es_set_is_superset_of_v2(); +require_es_set_symmetric_difference_v2(); +require_es_set_union_v2(); var _mw$config$get; var _mw$config$get2; var _mw$config$get3; @@ -2121,4 +2065,4 @@ var whoIsActiveUserPage = /* @__PURE__ */ function() { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanMiLCAic3JjL1dob0lzQWN0aXZlL29wdGlvbnMuanNvbiIsICJzcmMvR2VvTG9jYXRpb24vbW9kdWxlcy9jb25zdGFudC50cyIsICJzcmMvV2hvSXNBY3RpdmUvbW9kdWxlcy9hcGkudHMiLCAic3JjL1dob0lzQWN0aXZlL21vZHVsZXMvZ2V0TGFzdEFjdGl2ZU1hcmtlci50c3giLCAic3JjL1dob0lzQWN0aXZlL21vZHVsZXMvaTE4bi50cyIsICJzcmMvV2hvSXNBY3RpdmUvbW9kdWxlcy9jb3JlLnRzIiwgInNyYy9XaG9Jc0FjdGl2ZS9XaG9Jc0FjdGl2ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjAvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxudmFyIFNldFByb3RvdHlwZSA9IFNldC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbiAgU2V0OiBTZXQsXG4gIGFkZDogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmFkZCksXG4gIGhhczogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmhhcyksXG4gIHJlbW92ZTogdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlWydkZWxldGUnXSksXG4gIHByb3RvOiBTZXRQcm90b3R5cGVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcblxuLy8gUGVyZm9ybSA/IFJlcXVpcmVJbnRlcm5hbFNsb3QoTSwgW1tTZXREYXRhXV0pXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBoYXMoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVjb3JkLCBmbiwgSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQpIHtcbiAgdmFyIGl0ZXJhdG9yID0gSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQgPyByZWNvcmQgOiByZWNvcmQuaXRlcmF0b3I7XG4gIHZhciBuZXh0ID0gcmVjb3JkLm5leHQ7XG4gIHZhciBzdGVwLCByZXN1bHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGZuKHN0ZXAudmFsdWUpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIFNldFByb3RvdHlwZSA9IFNldEhlbHBlcnMucHJvdG87XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBrZXlzID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmtleXMpO1xudmFyIG5leHQgPSBrZXlzKG5ldyBTZXQoKSkubmV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoeyBpdGVyYXRvcjoga2V5cyhzZXQpLCBuZXh0OiBuZXh0IH0sIGZuKSA6IGZvckVhY2goc2V0LCBmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzQWNjZXNzb3IoU2V0SGVscGVycy5wcm90bywgJ3NpemUnLCAnZ2V0JykgfHwgZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gc2V0LnNpemU7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBHZXRJdGVyYXRvckRpcmVjdChvYmopYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzLyNzZWMtZ2V0aXRlcmF0b3JkaXJlY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIGl0ZXJhdG9yOiBvYmosXG4gICAgbmV4dDogb2JqLm5leHQsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG52YXIgSU5WQUxJRF9TSVpFID0gJ0ludmFsaWQgc2l6ZSc7XG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBTZXRSZWNvcmQgPSBmdW5jdGlvbiAoc2V0LCBpbnRTaXplKSB7XG4gIHRoaXMuc2V0ID0gc2V0O1xuICB0aGlzLnNpemUgPSBtYXgoaW50U2l6ZSwgMCk7XG4gIHRoaXMuaGFzID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICB0aGlzLmtleXMgPSBhQ2FsbGFibGUoc2V0LmtleXMpO1xufTtcblxuU2V0UmVjb3JkLnByb3RvdHlwZSA9IHtcbiAgZ2V0SXRlcmF0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SXRlcmF0b3JEaXJlY3QoYW5PYmplY3QoY2FsbCh0aGlzLmtleXMsIHRoaXMuc2V0KSkpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGNhbGwodGhpcy5oYXMsIHRoaXMuc2V0LCBpdCk7XG4gIH1cbn07XG5cbi8vIGBHZXRTZXRSZWNvcmRgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNzZWMtZ2V0c2V0cmVjb3JkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgYW5PYmplY3Qob2JqKTtcbiAgdmFyIG51bVNpemUgPSArb2JqLnNpemU7XG4gIC8vIE5PVEU6IElmIHNpemUgaXMgdW5kZWZpbmVkLCB0aGVuIG51bVNpemUgd2lsbCBiZSBOYU5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bVNpemUgIT09IG51bVNpemUpIHRocm93IG5ldyAkVHlwZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHZhciBpbnRTaXplID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1TaXplKTtcbiAgaWYgKGludFNpemUgPCAwKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgcmV0dXJuIG5ldyBTZXRSZWNvcmQob2JqLCBpbnRTaXplKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIGVsc2UgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbnZhciBjcmVhdGVTZXRMaWtlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIHtcbiAgICBzaXplOiBzaXplLFxuICAgIGhhczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcbiAgdHJ5IHtcbiAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgwKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGxhdGUgc3BlYyBjaGFuZ2UsIGVhcmx5IFdlYktpdCB+IFNhZmFyaSAxNy4wIGJldGEgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcGFzcyBpdFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHMvcHVsbC84OFxuICAgICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoLTEpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdkaWZmZXJlbmNlJykgfSwge1xuICBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGlzam9pbnRGcm9tKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0Rpc2pvaW50RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNEaXNqb2ludEZyb20nKSB9LCB7XG4gIGlzRGlzam9pbnRGcm9tOiBpc0Rpc2pvaW50RnJvbVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmlzLWRpc2pvaW50LWZyb20udjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3Vic2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhdGUoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3VwZXJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDwgb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIWhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdXBlcnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3VwZXJzZXRPZicpIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBpc1N1cGVyc2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN5bW1ldHJpY0RpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgICBlbHNlIGFkZChyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc3ltbWV0cmljRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnc3ltbWV0cmljRGlmZmVyZW5jZScpIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogc3ltbWV0cmljRGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdW5pb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3VuaW9uJykgfSwge1xuICB1bmlvbjogdW5pb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC51bmlvbi52MicpO1xuIiwgIntcblx0XCJtb3VudFBvaW50U2VsZWN0b3JcIjogXCIjZm9vdGVyLWluZm8sLnBhZ2UtaW5mb1wiLFxuXHRcInZlcnNpb25cIjogXCIyLjBcIlxufVxuIiwgImNvbnN0IFNZU1RFTV9TQ1JJUFRfTElTVDogc3RyaW5nW10gPSBbXG5cdCfmu6XnlKjov4fmu6TlmagnLFxuXHQnRXhhbXBsZScsXG5cdCdFeHRlcm5hbCBjb250cmlidXRvcnMnLFxuXHQnTWFpbnRlbmFuY2Ugc2NyaXB0Jyxcblx0J01lZGlhV2lraSBkZWZhdWx0Jyxcblx0J01lZGlhV2lraSBtZXNzYWdlIGRlbGl2ZXJ5Jyxcblx0J05ldyB1c2VyIHBhZ2UnLFxuXTtcbmNvbnN0IFdFQk1BU1RFUl9MSVNUOiBzdHJpbmdbXSA9IFsnUWl1V2VuJywgJ1FpdVdlbiBmb3IgQWNjb3VudHMnLCAnUWl1d2VuU29jaWFsTWVkaWEnXTtcblxuY29uc3QgV0dfVVNFUl9HUk9VUFM6IHN0cmluZ1tdID0gbXcuY29uZmlnLmdldCgnd2dVc2VyR3JvdXBzJykgPz8gW107XG5jb25zdCBXR19VU0VSX05BTUU6IHN0cmluZyA9IG13LmNvbmZpZy5nZXQoJ3dnVXNlck5hbWUnKSA/PyAnJztcbmNvbnN0IFdHX1VTRVJfRURJVF9DT1VOVDogbnVtYmVyID0gbXcuY29uZmlnLmdldCgnd2dVc2VyRWRpdENvdW50JykgPz8gMDtcblxuZXhwb3J0IHtTWVNURU1fU0NSSVBUX0xJU1QsIFdFQk1BU1RFUl9MSVNULCBXR19VU0VSX0VESVRfQ09VTlQsIFdHX1VTRVJfR1JPVVBTLCBXR19VU0VSX05BTUV9O1xuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi4vb3B0aW9ucy5qc29uJztcbmltcG9ydCB7aW5pdE13QXBpfSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBhcGk6IG13LkFwaSA9IGluaXRNd0FwaShgV2hvSXNBY3RpdmUvJHtPUFRJT05TLnZlcnNpb259YCk7XG5cbmV4cG9ydCB7YXBpfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAnZXh0LmdhZGdldC5SZWFjdCc7XG5pbXBvcnQge2dldE1lc3NhZ2V9IGZyb20gJy4vaTE4bic7XG5cbnR5cGUgVGltZVNwYW4gPSAnVGhpc1dlZWsnIHwgJ1RoaXNNb250aCcgfCAnVGhpc1NlYXNvbicgfCAnVGhpc1NlbWl5ZWFyJyB8ICdUaGlzWWVhcicgfCAnT3ZlckFZZWFyJztcblxuZnVuY3Rpb24gV3JhcHBlcihwcm9wczoge3RpbWVTcGFuOiBUaW1lU3BhbjsgaW5uZXJFbGVtZW50OiBSZWFjdC5SZWFjdEVsZW1lbnR9KSB7XG5cdGNvbnN0IHt0aW1lU3BhbiwgaW5uZXJFbGVtZW50fSA9IHByb3BzO1xuXG5cdGNvbnN0IGNsYXNzTmFtZTogc3RyaW5nW10gPSBbJ2dhZGdldC13aG9pc2FjdGl2ZScsIGBnYWRnZXQtd2hvaXNhY3RpdmVfXyR7dGltZVNwYW59YF07XG5cdGNvbnN0IHtza2lufSA9IG13LmNvbmZpZy5nZXQoKTtcblxuXHRpZiAoc2tpbiA9PT0gJ2NpdGl6ZW4nKSB7XG5cdFx0cmV0dXJuIDxzZWN0aW9uIGNsYXNzTmFtZT17Y2xhc3NOYW1lfT57aW5uZXJFbGVtZW50fTwvc2VjdGlvbj47XG5cdH0gZWxzZSBpZiAoWydnb25nYmknLCAndmVjdG9yJywgJ3ZlY3Rvci0yMDIyJ10uaW5jbHVkZXMoc2tpbikgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndWwjZm9vdGVyLWluZm8nKSkge1xuXHRcdHJldHVybiA8bGkgY2xhc3NOYW1lPXtjbGFzc05hbWV9Pntpbm5lckVsZW1lbnR9PC9saT47XG5cdH1cblxuXHRyZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+e2lubmVyRWxlbWVudH08L2Rpdj47XG59XG5cbmZ1bmN0aW9uIFRhZyhwcm9wczoge3RpbWVTcGFuOiBUaW1lU3BhbjsgaW5kaWNhdG9yOiBib29sZWFufSkge1xuXHRjb25zdCB7dGltZVNwYW4sIGluZGljYXRvcn0gPSBwcm9wcztcblxuXHRjb25zdCBpY29uQ2xhc3NOYW1lOiBzdHJpbmdbXSA9IFsnZ2FkZ2V0LXdob2lzYWN0aXZlX19pY29uJywgYGdhZGdldC13aG9pc2FjdGl2ZV9faWNvbl9fJHt0aW1lU3Bhbn1gXTtcblx0Y29uc3QgdGV4dENsYXNzTmFtZTogc3RyaW5nW10gPSBbXG5cdFx0J2dhZGdldC13aG9pc2FjdGl2ZV9fdGV4dCcsXG5cdFx0aW5kaWNhdG9yID09PSB0cnVlID8gJywgZ2FkZ2V0LXdob2lzYWN0aXZlX19ub3RleHQnIDogJycsXG5cdF07XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPXtpY29uQ2xhc3NOYW1lfSB0aXRsZT17Z2V0TWVzc2FnZSh0aW1lU3Bhbil9IC8+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9e3RleHRDbGFzc05hbWV9PntnZXRNZXNzYWdlKHRpbWVTcGFuKSA/PyAnJ308L3NwYW4+XG5cdFx0PC8+XG5cdCk7XG59XG5cbmNvbnN0IGdldExhc3RBY3RpdmVNYXJrZXIgPSAodGltZXN0YW1wOiBzdHJpbmcsIGluZGljYXRvcjogYm9vbGVhbik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG5cdGNvbnN0IGRhdGU6IG51bWJlciA9IERhdGUucGFyc2UodGltZXN0YW1wKTtcblx0Y29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuXHRjb25zdCBkaWZmOiBudW1iZXIgPSBNYXRoLmZsb29yKChub3cgLSBkYXRlKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XG5cblx0bGV0IHRpbWVTcGFuOiBUaW1lU3BhbiA9ICdUaGlzV2Vlayc7XG5cdGlmIChkaWZmID4gMzY1KSB7XG5cdFx0dGltZVNwYW4gPSAnT3ZlckFZZWFyJztcblx0fSBlbHNlIGlmIChkaWZmID4gMTgzKSB7XG5cdFx0dGltZVNwYW4gPSAnVGhpc1llYXInO1xuXHR9IGVsc2UgaWYgKGRpZmYgPiA5Mikge1xuXHRcdHRpbWVTcGFuID0gJ1RoaXNTZW1peWVhcic7XG5cdH0gZWxzZSBpZiAoZGlmZiA+IDMxKSB7XG5cdFx0dGltZVNwYW4gPSAnVGhpc1NlYXNvbic7XG5cdH0gZWxzZSBpZiAoZGlmZiA+IDcpIHtcblx0XHR0aW1lU3BhbiA9ICdUaGlzTW9udGgnO1xuXHR9XG5cblx0cmV0dXJuIDxXcmFwcGVyIHRpbWVTcGFuPXt0aW1lU3Bhbn0gaW5uZXJFbGVtZW50PXs8VGFnIHRpbWVTcGFuPXt0aW1lU3Bhbn0gaW5kaWNhdG9yPXtpbmRpY2F0b3J9IC8+fSAvPjtcbn07XG5cbmV4cG9ydCB0eXBlIHtUaW1lU3Bhbn07XG5leHBvcnQge2dldExhc3RBY3RpdmVNYXJrZXJ9O1xuIiwgImltcG9ydCB0eXBlIHtUaW1lU3Bhbn0gZnJvbSAnLi9nZXRMYXN0QWN0aXZlTWFya2VyJztcbmltcG9ydCB7bG9jYWxpemV9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cbmNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0cmV0dXJuIHtcblx0XHRPdmVyQVllYXI6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRWRpdGVkIG92ZXIgYSB5ZWFyIGFnbycsXG5cdFx0XHQnemgtaGFucyc6ICfkuIDlubTmnKrmnInnvJbovpEnLFxuXHRcdFx0J3poLWhhbnQnOiAn5LiA5bm05pyq5pyJ57eo6LyvJyxcblx0XHR9KSxcblx0XHRUaGlzV2VlazogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdFZGl0ZWQgdGhpcyB3ZWVrJyxcblx0XHRcdCd6aC1oYW5zJzogJ+S4gOWRqOWGheaciee8lui+kScsXG5cdFx0XHQnemgtaGFudCc6ICfkuIDlkajlhafmnInnt6jovK8nLFxuXHRcdH0pLFxuXHRcdFRoaXNNb250aDogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdFZGl0ZWQgdGhpcyBtb250aCcsXG5cdFx0XHQnemgtaGFucyc6ICfkuIDmnIjlhoXmnInnvJbovpEnLFxuXHRcdFx0J3poLWhhbnQnOiAn5LiA5pyI5YWn5pyJ57eo6LyvJyxcblx0XHR9KSxcblx0XHRUaGlzU2Vhc29uOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0VkaXRlZCBpbiAzIG1vbnRocycsXG5cdFx0XHQnemgtaGFucyc6ICfkuInmnIjlhoXmnInnvJbovpEnLFxuXHRcdFx0J3poLWhhbnQnOiAn5LiJ5pyI5YWn5pyJ57eo6LyvJyxcblx0XHR9KSxcblx0XHRUaGlzU2VtaXllYXI6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRWRpdGVkIGluIGhhbGYgYSB5ZWFyJyxcblx0XHRcdCd6aC1oYW5zJzogJ+WNiuW5tOWGheaciee8lui+kScsXG5cdFx0XHQnemgtaGFudCc6ICfljYrlubTlhafmnInnt6jovK8nLFxuXHRcdH0pLFxuXHRcdFRoaXNZZWFyOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0VkaXRlZCB0aGlzIHllYXInLFxuXHRcdFx0J3poLWhhbnMnOiAn5LiA5bm05YaF5pyJ57yW6L6RJyxcblx0XHRcdCd6aC1oYW50JzogJ+S4gOW5tOWFp+aciee3qOi8rycsXG5cdFx0fSksXG5cdH0gc2F0aXNmaWVzIFJlY29yZDxUaW1lU3Bhbiwgc3RyaW5nPiAmIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5jb25zdCBpMThuTWVzc2FnZXMgPSBnZXRJMThuTWVzc2FnZXMoKTtcblxuY29uc3QgZ2V0TWVzc2FnZTogR2V0TWVzc2FnZXM8dHlwZW9mIGkxOG5NZXNzYWdlcz4gPSAoa2V5KSA9PiB7XG5cdHJldHVybiBpMThuTWVzc2FnZXNba2V5XSB8fCBrZXk7XG59O1xuXG5leHBvcnQge2dldE1lc3NhZ2V9O1xuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi4vb3B0aW9ucy5qc29uJztcbmltcG9ydCB7U1lTVEVNX1NDUklQVF9MSVNUfSBmcm9tICcuL2NvbnN0YW50JztcbmltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge2dldExhc3RBY3RpdmVNYXJrZXJ9IGZyb20gJy4vZ2V0TGFzdEFjdGl2ZU1hcmtlcic7XG5cbmNvbnN0IGJhc2VQYXJhbXM6IEFwaVF1ZXJ5VXNlckNvbnRyaWJzUGFyYW1zID0ge1xuXHRhY3Rpb246ICdxdWVyeScsXG5cdGZvcm1hdDogJ2pzb24nLFxuXHRsaXN0OiAndXNlcmNvbnRyaWJzJyxcblx0dWNsaW1pdDogMSxcbn07XG50eXBlIFVzZXJjb250cmlicyA9IHtcblx0dXNlcmNvbnRyaWJzOiBBcnJheTx7XG5cdFx0dGltZXN0YW1wOiBzdHJpbmc7XG5cdH0+O1xufTtcblxuY29uc3Qgd2hvSXNBY3RpdmUgPSBhc3luYyAoJGNvbnRlbnQ6IEpRdWVyeTxIVE1MRWxlbWVudD4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0Y29uc3QgdXNlcm5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCAkZWxlbWVudHM6IEpRdWVyeTxIVE1MQW5jaG9yRWxlbWVudD5bXSA9IFtdO1xuXG5cdGNvbnN0IHt3Z0Zvcm1hdHRlZE5hbWVzcGFjZXN9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5cdGNvbnN0IHsyOiBsb2NhbGl6ZWRVc2VyTmFtZXNwYWNlfSA9IHdnRm9ybWF0dGVkTmFtZXNwYWNlcztcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mICRjb250ZW50LmZpbmQ8SFRNTEFuY2hvckVsZW1lbnQ+KFxuXHRcdFtcblx0XHRcdCdhW3RpdGxlXj1cIlVzZXI6XCJdOm5vdCgubXctY2hhbmdlc2xpc3QtZGF0ZSk6bm90KFtocmVmKj1cInVuZG9cIl0pJyxcblx0XHRcdGBhW3RpdGxlXj1cIiR7bG9jYWxpemVkVXNlck5hbWVzcGFjZX06XCJdOm5vdCgubXctY2hhbmdlc2xpc3QtZGF0ZSk6bm90KFtocmVmKj1cInVuZG9cIl0pYCxcblx0XHRdLmpvaW4oJywnKVxuXHQpKSB7XG5cdFx0Y29uc3QgJGVsZW1lbnQ6IEpRdWVyeTxIVE1MQW5jaG9yRWxlbWVudD4gPSAkKGVsZW1lbnQpO1xuXG5cdFx0Y29uc3QgdXNlclJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKGAoKFVzZXIpfCgke2xvY2FsaXplZFVzZXJOYW1lc3BhY2V9KSk6KC4qPykoPz0mfCQpYCk7XG5cdFx0Y29uc3QgdXNlcm5hbWVNYXRjaEFycmF5OiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCA9IGRlY29kZVVSSSgkZWxlbWVudC5hdHRyKCdocmVmJykgPz8gJycpLm1hdGNoKHVzZXJSZWdleCk7XG5cdFx0aWYgKCF1c2VybmFtZU1hdGNoQXJyYXkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGxldCBbdXNlcm5hbWVdID0gdXNlcm5hbWVNYXRjaEFycmF5O1xuXHRcdHVzZXJuYW1lID0gdXNlcm5hbWUucmVwbGFjZShuZXcgUmVnRXhwKGBeKChVc2VyKXwoJHtsb2NhbGl6ZWRVc2VyTmFtZXNwYWNlfSkpOmAsICdpJyksICcnKTtcblx0XHRjb25zdCBpbmRleDogbnVtYmVyID0gdXNlcm5hbWUuaW5kZXhPZignLycpO1xuXHRcdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRcdCRlbGVtZW50LmRhdGEoJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuXHRcdFx0dXNlcm5hbWVzW3VzZXJuYW1lcy5sZW5ndGhdID0gdXNlcm5hbWU7XG5cdFx0XHQkZWxlbWVudHNbJGVsZW1lbnRzLmxlbmd0aF0gPSAkZWxlbWVudDtcblx0XHR9XG5cdH1cblxuXHRpZiAoIXVzZXJuYW1lcy5sZW5ndGggfHwgISRlbGVtZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmb3IgKGNvbnN0IHVzZXJuYW1lIG9mIG5ldyBTZXQodXNlcm5hbWVzKSkge1xuXHRcdGlmIChTWVNURU1fU0NSSVBUX0xJU1QuaW5jbHVkZXModXNlcm5hbWUpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbXM6IEFwaVF1ZXJ5VXNlckNvbnRyaWJzUGFyYW1zID0ge1xuXHRcdFx0Li4uYmFzZVBhcmFtcyxcblx0XHRcdHVjdXNlcjogdXNlcm5hbWUsXG5cdFx0fTtcblxuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaS5nZXQocGFyYW1zKTtcblxuXHRcdGNvbnN0IHt1c2VyY29udHJpYnN9ID0gcmVzdWx0WydxdWVyeSddIGFzIFVzZXJjb250cmlicztcblx0XHRpZiAoIXVzZXJjb250cmlicy5sZW5ndGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB7dGltZXN0YW1wfSA9IHVzZXJjb250cmlic1swXSE7XG5cblx0XHRmb3IgKGNvbnN0ICRlbGVtZW50IG9mICRlbGVtZW50cykge1xuXHRcdFx0aWYgKCRlbGVtZW50LmRhdGEoJ3VzZXJuYW1lJykgPT09IHVzZXJuYW1lKSB7XG5cdFx0XHRcdCQoZ2V0TGFzdEFjdGl2ZU1hcmtlcih0aW1lc3RhbXAsIHRydWUpKS5pbnNlcnRBZnRlcigkZWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5jb25zdCB3aG9Jc0FjdGl2ZVVzZXJQYWdlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRjb25zdCB7d2dBY3Rpb24sIHdnTmFtZXNwYWNlTnVtYmVyLCB3Z1BhZ2VOYW1lLCB3Z1JlbGV2YW50VXNlck5hbWV9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5cdGlmICh3Z1JlbGV2YW50VXNlck5hbWUgJiYgd2dOYW1lc3BhY2VOdW1iZXIgPT09IDIgJiYgd2dBY3Rpb24gPT09ICd2aWV3Jykge1xuXHRcdGNvbnN0IHJlbGV2YW50VXNlclBhZ2VOYW1lOiBzdHJpbmcgPSBuZXcgbXcuVGl0bGUod2dSZWxldmFudFVzZXJOYW1lLCAyKS50b1RleHQoKTtcblx0XHRjb25zdCBwYWdlTmFtZTogc3RyaW5nID0gbmV3IG13LlRpdGxlKHdnUGFnZU5hbWUpLnRvVGV4dCgpO1xuXHRcdGlmIChyZWxldmFudFVzZXJQYWdlTmFtZSAhPT0gcGFnZU5hbWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbXM6IEFwaVF1ZXJ5VXNlckNvbnRyaWJzUGFyYW1zID0ge1xuXHRcdFx0Li4uYmFzZVBhcmFtcyxcblx0XHRcdHVjdXNlcjogd2dSZWxldmFudFVzZXJOYW1lLFxuXHRcdH07XG5cblx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBhcGkuZ2V0KHBhcmFtcyk7XG5cblx0XHRjb25zdCB7dXNlcmNvbnRyaWJzfSA9IHJlc3VsdFsncXVlcnknXSBhcyBVc2VyY29udHJpYnM7XG5cdFx0aWYgKCF1c2VyY29udHJpYnMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qge3RpbWVzdGFtcH0gPSB1c2VyY29udHJpYnNbMF0hO1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihPUFRJT05TLm1vdW50UG9pbnRTZWxlY3RvcikpIHtcblx0XHRcdGVsZW1lbnQucHJlcGVuZChnZXRMYXN0QWN0aXZlTWFya2VyKHRpbWVzdGFtcCwgZmFsc2UpKTtcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCB7d2hvSXNBY3RpdmUsIHdob0lzQWN0aXZlVXNlclBhZ2V9O1xuIiwgImltcG9ydCB7d2hvSXNBY3RpdmUsIHdob0lzQWN0aXZlVXNlclBhZ2V9IGZyb20gJy4vbW9kdWxlcy9jb3JlJztcblxuKGZ1bmN0aW9uIHdob0lzQWN0aXZlTG9hZCgpIHtcblx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPCAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bXcuaG9vaygnd2lraXBhZ2UuY29udGVudCcpLmFkZCh3aG9Jc0FjdGl2ZSk7XG5cdHZvaWQgd2hvSXNBY3RpdmVVc2VyUGFnZSgpO1xufSkoKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFB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U0FBQUYsV0FBQTdDLEVBQUEsR0FBQUMsUUFBMEY7QUFBQSxnQkFBL0VFLFVBQUE0QyxPQUFBM0M7QUFDVkQsa0JBQVE2QyxRQUFRNUUsb0JBQW9CQyxXQUFXLEtBQUssQ0FBQztRQUN0RDtNQUFBLFNBQUE4QyxLQUFBO0FBQUEwQixtQkFBQXpCLEVBQUFELEdBQUE7TUFBQSxVQUFBO0FBQUEwQixtQkFBQXhCLEVBQUE7TUFBQTtJQUNEO0VBQ0QsQ0FBQTtBQUFBLFNBQUEsU0EzQk1jLHVCQUFBO0FBQUEsV0FBQUMsTUFBQUgsTUFBQSxNQUFBQyxTQUFBO0VBQUE7QUFBQSxFQUFBOztDQzdFTCxTQUFTZSxrQkFBa0I7QUFDM0IsTUFBSTFILEdBQUdDLE9BQU9DLElBQUksbUJBQW1CLElBQUksR0FBRztBQUMzQztFQUNEO0FBRUFGLEtBQUcySCxLQUFLLGtCQUFrQixFQUFFQyxJQUFJakUsV0FBVztBQUMzQyxPQUFLaUQsb0JBQW9CO0FBQzFCLEdBQUc7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgInZlcnNpb24iLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICJtb2R1bGUiLCAiU2V0IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIlNldCIsICIkIiwgIm1vZHVsZSIsICJTZXQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibW91bnRQb2ludFNlbGVjdG9yIiwgInZlcnNpb24iLCAiU1lTVEVNX1NDUklQVF9MSVNUIiwgIldHX1VTRVJfR1JPVVBTIiwgIl9tdyRjb25maWckZ2V0IiwgIm13IiwgImNvbmZpZyIsICJnZXQiLCAiV0dfVVNFUl9OQU1FIiwgIl9tdyRjb25maWckZ2V0MiIsICJXR19VU0VSX0VESVRfQ09VTlQiLCAiX213JGNvbmZpZyRnZXQzIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgInJlcXVpcmUiLCAiYXBpIiwgImluaXRNd0FwaSIsICJjb25jYXQiLCAiaW1wb3J0X2V4dF9nYWRnZXQzIiwgIl9fdG9FU00iLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgImdldEkxOG5NZXNzYWdlcyIsICJPdmVyQVllYXIiLCAibG9jYWxpemUiLCAiZW4iLCAiVGhpc1dlZWsiLCAiVGhpc01vbnRoIiwgIlRoaXNTZWFzb24iLCAiVGhpc1NlbWl5ZWFyIiwgIlRoaXNZZWFyIiwgImkxOG5NZXNzYWdlcyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJXcmFwcGVyIiwgInByb3BzIiwgInRpbWVTcGFuIiwgImlubmVyRWxlbWVudCIsICJjbGFzc05hbWUiLCAic2tpbiIsICJkZWZhdWx0IiwgImNyZWF0ZUVsZW1lbnQiLCAiaW5jbHVkZXMiLCAiZG9jdW1lbnQiLCAicXVlcnlTZWxlY3RvciIsICJUYWciLCAiX2dldE1lc3NhZ2UiLCAiaW5kaWNhdG9yIiwgImljb25DbGFzc05hbWUiLCAidGV4dENsYXNzTmFtZSIsICJGcmFnbWVudCIsICJ0aXRsZSIsICJnZXRMYXN0QWN0aXZlTWFya2VyIiwgInRpbWVzdGFtcCIsICJkYXRlIiwgIkRhdGUiLCAicGFyc2UiLCAibm93IiwgImRpZmYiLCAiTWF0aCIsICJmbG9vciIsICJiYXNlUGFyYW1zIiwgImFjdGlvbiIsICJmb3JtYXQiLCAibGlzdCIsICJ1Y2xpbWl0IiwgIndob0lzQWN0aXZlIiwgIl9yZWYiLCAiX2FzeW5jVG9HZW5lcmF0b3IiLCAiJGNvbnRlbnQiLCAidXNlcm5hbWVzIiwgIiRlbGVtZW50cyIsICJ3Z0Zvcm1hdHRlZE5hbWVzcGFjZXMiLCAibG9jYWxpemVkVXNlck5hbWVzcGFjZSIsICJfaXRlcmF0b3IyIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgImZpbmQiLCAiam9pbiIsICJfc3RlcDIiLCAicyIsICJuIiwgImRvbmUiLCAiXyRlbGVtZW50JGF0dHIiLCAiZWxlbWVudCIsICJ2YWx1ZSIsICIkZWxlbWVudCIsICIkIiwgInVzZXJSZWdleCIsICJSZWdFeHAiLCAidXNlcm5hbWVNYXRjaEFycmF5IiwgImRlY29kZVVSSSIsICJhdHRyIiwgIm1hdGNoIiwgInVzZXJuYW1lIiwgInJlcGxhY2UiLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJkYXRhIiwgImxlbmd0aCIsICJlcnIiLCAiZSIsICJmIiwgIl9pdGVyYXRvcjMiLCAiU2V0IiwgIl9zdGVwMyIsICJwYXJhbXMiLCAidWN1c2VyIiwgInJlc3VsdCIsICJ1c2VyY29udHJpYnMiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAiaW5zZXJ0QWZ0ZXIiLCAiX3giLCAiYXBwbHkiLCAiYXJndW1lbnRzIiwgIndob0lzQWN0aXZlVXNlclBhZ2UiLCAiX3JlZjIiLCAid2dBY3Rpb24iLCAid2dOYW1lc3BhY2VOdW1iZXIiLCAid2dQYWdlTmFtZSIsICJ3Z1JlbGV2YW50VXNlck5hbWUiLCAicmVsZXZhbnRVc2VyUGFnZU5hbWUiLCAiVGl0bGUiLCAidG9UZXh0IiwgInBhZ2VOYW1lIiwgIl9pdGVyYXRvcjUiLCAicXVlcnlTZWxlY3RvckFsbCIsICJfc3RlcDUiLCAicHJlcGVuZCIsICJ3aG9Jc0FjdGl2ZUxvYWQiLCAiaG9vayIsICJhZGQiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgInNyYy9XaG9Jc0FjdGl2ZS9vcHRpb25zLmpzb24iLCAic3JjL0dlb0xvY2F0aW9uL21vZHVsZXMvY29uc3RhbnQudHMiLCAic3JjL1dob0lzQWN0aXZlL21vZHVsZXMvYXBpLnRzIiwgInNyYy9XaG9Jc0FjdGl2ZS9tb2R1bGVzL2dldExhc3RBY3RpdmVNYXJrZXIudHN4IiwgInNyYy9XaG9Jc0FjdGl2ZS9tb2R1bGVzL2kxOG4udHMiLCAic3JjL1dob0lzQWN0aXZlL21vZHVsZXMvY29yZS50cyIsICJzcmMvV2hvSXNBY3RpdmUvV2hvSXNBY3RpdmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG4gIFNldDogU2V0LFxuICBhZGQ6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5hZGQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5oYXMpLFxuICByZW1vdmU6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZVsnZGVsZXRlJ10pLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBTZXRQcm90b3R5cGUgPSBTZXRIZWxwZXJzLnByb3RvO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuZm9yRWFjaCk7XG52YXIga2V5cyA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5rZXlzKTtcbnZhciBuZXh0ID0ga2V5cyhuZXcgU2V0KCkpLm5leHQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwgZm4sIGludGVycnVwdGlibGUpIHtcbiAgcmV0dXJuIGludGVycnVwdGlibGUgPyBpdGVyYXRlU2ltcGxlKHsgaXRlcmF0b3I6IGtleXMoc2V0KSwgbmV4dDogbmV4dCB9LCBmbikgOiBmb3JFYWNoKHNldCwgZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKFNldEhlbHBlcnMucHJvdG8sICdzaXplJywgJ2dldCcpIHx8IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIHNldC5zaXplO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgR2V0SXRlcmF0b3JEaXJlY3Qob2JqKWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVycy8jc2VjLWdldGl0ZXJhdG9yZGlyZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICBpdGVyYXRvcjogb2JqLFxuICAgIG5leHQ6IG9iai5uZXh0LFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgaW50U2l6ZSkge1xuICB0aGlzLnNldCA9IHNldDtcbiAgdGhpcy5zaXplID0gbWF4KGludFNpemUsIDApO1xuICB0aGlzLmhhcyA9IGFDYWxsYWJsZShzZXQuaGFzKTtcbiAgdGhpcy5rZXlzID0gYUNhbGxhYmxlKHNldC5rZXlzKTtcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihJTlZBTElEX1NJWkUpO1xuICB2YXIgaW50U2l6ZSA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtU2l6ZSk7XG4gIGlmIChpbnRTaXplIDwgMCkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHJldHVybiBuZXcgU2V0UmVjb3JkKG9iaiwgaW50U2l6ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICBlbHNlIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG52YXIgY3JlYXRlU2V0TGlrZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiB7XG4gICAgc2l6ZTogc2l6ZSxcbiAgICBoYXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgU2V0ID0gZ2V0QnVpbHRJbignU2V0Jyk7XG4gIHRyeSB7XG4gICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoMCkpO1xuICAgIHRyeSB7XG4gICAgICAvLyBsYXRlIHNwZWMgY2hhbmdlLCBlYXJseSBXZWJLaXQgfiBTYWZhcmkgMTcuMCBiZXRhIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHBhc3MgaXRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzL3B1bGwvODhcbiAgICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKC0xKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG5cbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSB7XG4gICAgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGhhcyhPLCBlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJzZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbnZhciBJTkNPUlJFQ1QgPSAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaW50ZXJzZWN0aW9uJykgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgZXMvbm8tc2V0IC0tIHRlc3RpbmdcbiAgcmV0dXJuIFN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsIDIsIDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywgMl0pKSkpICE9PSAnMywyJztcbn0pO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1QgfSwge1xuICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIHJldHVybiBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3Vic2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdWJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXRlcmF0ZShPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghb3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1YnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdWJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdWJzZXRPZicpIH0sIHtcbiAgaXNTdWJzZXRPZjogaXNTdWJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3VwZXJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1cGVyc2V0T2YnKSB9LCB7XG4gIGlzU3VwZXJzZXRPZjogaXNTdXBlcnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gICAgZWxzZSBhZGQocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHN5bW1ldHJpY0RpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3N5bW1ldHJpY0RpZmZlcmVuY2UnKSB9LCB7XG4gIHN5bW1ldHJpY0RpZmZlcmVuY2U6IHN5bW1ldHJpY0RpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgYWRkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuYWRkO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXVuaW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCd1bmlvbicpIH0sIHtcbiAgdW5pb246IHVuaW9uXG59KTtcbiIsICJ7XG5cdFwibW91bnRQb2ludFNlbGVjdG9yXCI6IFwiI2Zvb3Rlci1pbmZvLC5wYWdlLWluZm9cIixcblx0XCJ2ZXJzaW9uXCI6IFwiMi4wXCJcbn1cbiIsICJjb25zdCBTWVNURU1fU0NSSVBUX0xJU1Q6IHN0cmluZ1tdID0gW1xuXHQn5rul55So6L+H5ruk5ZmoJyxcblx0J0V4YW1wbGUnLFxuXHQnRXh0ZXJuYWwgY29udHJpYnV0b3JzJyxcblx0J01haW50ZW5hbmNlIHNjcmlwdCcsXG5cdCdNZWRpYVdpa2kgZGVmYXVsdCcsXG5cdCdNZWRpYVdpa2kgbWVzc2FnZSBkZWxpdmVyeScsXG5cdCdOZXcgdXNlciBwYWdlJyxcbl07XG5jb25zdCBXRUJNQVNURVJfTElTVDogc3RyaW5nW10gPSBbJ1FpdVdlbicsICdRaXVXZW4gZm9yIEFjY291bnRzJywgJ1FpdXdlblNvY2lhbE1lZGlhJ107XG5cbmNvbnN0IFdHX1VTRVJfR1JPVVBTOiBzdHJpbmdbXSA9IG13LmNvbmZpZy5nZXQoJ3dnVXNlckdyb3VwcycpID8/IFtdO1xuY29uc3QgV0dfVVNFUl9OQU1FOiBzdHJpbmcgPSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJOYW1lJykgPz8gJyc7XG5jb25zdCBXR19VU0VSX0VESVRfQ09VTlQ6IG51bWJlciA9IG13LmNvbmZpZy5nZXQoJ3dnVXNlckVkaXRDb3VudCcpID8/IDA7XG5cbmV4cG9ydCB7U1lTVEVNX1NDUklQVF9MSVNULCBXRUJNQVNURVJfTElTVCwgV0dfVVNFUl9FRElUX0NPVU5ULCBXR19VU0VSX0dST1VQUywgV0dfVVNFUl9OQU1FfTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoYFdob0lzQWN0aXZlLyR7T1BUSU9OUy52ZXJzaW9ufWApO1xuXG5leHBvcnQge2FwaX07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuL2kxOG4nO1xuXG50eXBlIFRpbWVTcGFuID0gJ1RoaXNXZWVrJyB8ICdUaGlzTW9udGgnIHwgJ1RoaXNTZWFzb24nIHwgJ1RoaXNTZW1peWVhcicgfCAnVGhpc1llYXInIHwgJ092ZXJBWWVhcic7XG5cbmZ1bmN0aW9uIFdyYXBwZXIocHJvcHM6IHt0aW1lU3BhbjogVGltZVNwYW47IGlubmVyRWxlbWVudDogUmVhY3QuUmVhY3RFbGVtZW50fSkge1xuXHRjb25zdCB7dGltZVNwYW4sIGlubmVyRWxlbWVudH0gPSBwcm9wcztcblxuXHRjb25zdCBjbGFzc05hbWU6IHN0cmluZ1tdID0gWydnYWRnZXQtd2hvaXNhY3RpdmUnLCBgZ2FkZ2V0LXdob2lzYWN0aXZlX18ke3RpbWVTcGFufWBdO1xuXHRjb25zdCB7c2tpbn0gPSBtdy5jb25maWcuZ2V0KCk7XG5cblx0aWYgKHNraW4gPT09ICdjaXRpemVuJykge1xuXHRcdHJldHVybiA8c2VjdGlvbiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+e2lubmVyRWxlbWVudH08L3NlY3Rpb24+O1xuXHR9IGVsc2UgaWYgKFsnZ29uZ2JpJywgJ3ZlY3RvcicsICd2ZWN0b3ItMjAyMiddLmluY2x1ZGVzKHNraW4pIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3VsI2Zvb3Rlci1pbmZvJykpIHtcblx0XHRyZXR1cm4gPGxpIGNsYXNzTmFtZT17Y2xhc3NOYW1lfT57aW5uZXJFbGVtZW50fTwvbGk+O1xuXHR9XG5cblx0cmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9Pntpbm5lckVsZW1lbnR9PC9kaXY+O1xufVxuXG5mdW5jdGlvbiBUYWcocHJvcHM6IHt0aW1lU3BhbjogVGltZVNwYW47IGluZGljYXRvcjogYm9vbGVhbn0pIHtcblx0Y29uc3Qge3RpbWVTcGFuLCBpbmRpY2F0b3J9ID0gcHJvcHM7XG5cblx0Y29uc3QgaWNvbkNsYXNzTmFtZTogc3RyaW5nW10gPSBbJ2dhZGdldC13aG9pc2FjdGl2ZV9faWNvbicsIGBnYWRnZXQtd2hvaXNhY3RpdmVfX2ljb25fXyR7dGltZVNwYW59YF07XG5cdGNvbnN0IHRleHRDbGFzc05hbWU6IHN0cmluZ1tdID0gW1xuXHRcdCdnYWRnZXQtd2hvaXNhY3RpdmVfX3RleHQnLFxuXHRcdGluZGljYXRvciA9PT0gdHJ1ZSA/ICcsIGdhZGdldC13aG9pc2FjdGl2ZV9fbm90ZXh0JyA6ICcnLFxuXHRdO1xuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT17aWNvbkNsYXNzTmFtZX0gdGl0bGU9e2dldE1lc3NhZ2UodGltZVNwYW4pfSAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPXt0ZXh0Q2xhc3NOYW1lfT57Z2V0TWVzc2FnZSh0aW1lU3BhbikgPz8gJyd9PC9zcGFuPlxuXHRcdDwvPlxuXHQpO1xufVxuXG5jb25zdCBnZXRMYXN0QWN0aXZlTWFya2VyID0gKHRpbWVzdGFtcDogc3RyaW5nLCBpbmRpY2F0b3I6IGJvb2xlYW4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuXHRjb25zdCBkYXRlOiBudW1iZXIgPSBEYXRlLnBhcnNlKHRpbWVzdGFtcCk7XG5cdGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcblx0Y29uc3QgZGlmZjogbnVtYmVyID0gTWF0aC5mbG9vcigobm93IC0gZGF0ZSkgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuXG5cdGxldCB0aW1lU3BhbjogVGltZVNwYW4gPSAnVGhpc1dlZWsnO1xuXHRpZiAoZGlmZiA+IDM2NSkge1xuXHRcdHRpbWVTcGFuID0gJ092ZXJBWWVhcic7XG5cdH0gZWxzZSBpZiAoZGlmZiA+IDE4Mykge1xuXHRcdHRpbWVTcGFuID0gJ1RoaXNZZWFyJztcblx0fSBlbHNlIGlmIChkaWZmID4gOTIpIHtcblx0XHR0aW1lU3BhbiA9ICdUaGlzU2VtaXllYXInO1xuXHR9IGVsc2UgaWYgKGRpZmYgPiAzMSkge1xuXHRcdHRpbWVTcGFuID0gJ1RoaXNTZWFzb24nO1xuXHR9IGVsc2UgaWYgKGRpZmYgPiA3KSB7XG5cdFx0dGltZVNwYW4gPSAnVGhpc01vbnRoJztcblx0fVxuXG5cdHJldHVybiA8V3JhcHBlciB0aW1lU3Bhbj17dGltZVNwYW59IGlubmVyRWxlbWVudD17PFRhZyB0aW1lU3Bhbj17dGltZVNwYW59IGluZGljYXRvcj17aW5kaWNhdG9yfSAvPn0gLz47XG59O1xuXG5leHBvcnQgdHlwZSB7VGltZVNwYW59O1xuZXhwb3J0IHtnZXRMYXN0QWN0aXZlTWFya2VyfTtcbiIsICJpbXBvcnQgdHlwZSB7VGltZVNwYW59IGZyb20gJy4vZ2V0TGFzdEFjdGl2ZU1hcmtlcic7XG5pbXBvcnQge2xvY2FsaXplfSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXG5jb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0T3ZlckFZZWFyOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0VkaXRlZCBvdmVyIGEgeWVhciBhZ28nLFxuXHRcdFx0J3poLWhhbnMnOiAn5LiA5bm05pyq5pyJ57yW6L6RJyxcblx0XHRcdCd6aC1oYW50JzogJ+S4gOW5tOacquaciee3qOi8rycsXG5cdFx0fSksXG5cdFx0VGhpc1dlZWs6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRWRpdGVkIHRoaXMgd2VlaycsXG5cdFx0XHQnemgtaGFucyc6ICfkuIDlkajlhoXmnInnvJbovpEnLFxuXHRcdFx0J3poLWhhbnQnOiAn5LiA5ZGo5YWn5pyJ57eo6LyvJyxcblx0XHR9KSxcblx0XHRUaGlzTW9udGg6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnRWRpdGVkIHRoaXMgbW9udGgnLFxuXHRcdFx0J3poLWhhbnMnOiAn5LiA5pyI5YaF5pyJ57yW6L6RJyxcblx0XHRcdCd6aC1oYW50JzogJ+S4gOaciOWFp+aciee3qOi8rycsXG5cdFx0fSksXG5cdFx0VGhpc1NlYXNvbjogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdFZGl0ZWQgaW4gMyBtb250aHMnLFxuXHRcdFx0J3poLWhhbnMnOiAn5LiJ5pyI5YaF5pyJ57yW6L6RJyxcblx0XHRcdCd6aC1oYW50JzogJ+S4ieaciOWFp+aciee3qOi8rycsXG5cdFx0fSksXG5cdFx0VGhpc1NlbWl5ZWFyOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ0VkaXRlZCBpbiBoYWxmIGEgeWVhcicsXG5cdFx0XHQnemgtaGFucyc6ICfljYrlubTlhoXmnInnvJbovpEnLFxuXHRcdFx0J3poLWhhbnQnOiAn5Y2K5bm05YWn5pyJ57eo6LyvJyxcblx0XHR9KSxcblx0XHRUaGlzWWVhcjogbG9jYWxpemUoe1xuXHRcdFx0ZW46ICdFZGl0ZWQgdGhpcyB5ZWFyJyxcblx0XHRcdCd6aC1oYW5zJzogJ+S4gOW5tOWGheaciee8lui+kScsXG5cdFx0XHQnemgtaGFudCc6ICfkuIDlubTlhafmnInnt6jovK8nLFxuXHRcdH0pLFxuXHR9IHNhdGlzZmllcyBSZWNvcmQ8VGltZVNwYW4sIHN0cmluZz4gJiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuY29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cbmNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge1NZU1RFTV9TQ1JJUFRfTElTVH0gZnJvbSAnLi9jb25zdGFudCc7XG5pbXBvcnQge2FwaX0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtnZXRMYXN0QWN0aXZlTWFya2VyfSBmcm9tICcuL2dldExhc3RBY3RpdmVNYXJrZXInO1xuXG5jb25zdCBiYXNlUGFyYW1zOiBBcGlRdWVyeVVzZXJDb250cmlic1BhcmFtcyA9IHtcblx0YWN0aW9uOiAncXVlcnknLFxuXHRmb3JtYXQ6ICdqc29uJyxcblx0bGlzdDogJ3VzZXJjb250cmlicycsXG5cdHVjbGltaXQ6IDEsXG59O1xudHlwZSBVc2VyY29udHJpYnMgPSB7XG5cdHVzZXJjb250cmliczogQXJyYXk8e1xuXHRcdHRpbWVzdGFtcDogc3RyaW5nO1xuXHR9Pjtcbn07XG5cbmNvbnN0IHdob0lzQWN0aXZlID0gYXN5bmMgKCRjb250ZW50OiBKUXVlcnk8SFRNTEVsZW1lbnQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdGNvbnN0IHVzZXJuYW1lczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgJGVsZW1lbnRzOiBKUXVlcnk8SFRNTEFuY2hvckVsZW1lbnQ+W10gPSBbXTtcblxuXHRjb25zdCB7d2dGb3JtYXR0ZWROYW1lc3BhY2VzfSA9IG13LmNvbmZpZy5nZXQoKTtcblxuXHRjb25zdCB7MjogbG9jYWxpemVkVXNlck5hbWVzcGFjZX0gPSB3Z0Zvcm1hdHRlZE5hbWVzcGFjZXM7XG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiAkY29udGVudC5maW5kPEhUTUxBbmNob3JFbGVtZW50Pihcblx0XHRbXG5cdFx0XHQnYVt0aXRsZV49XCJVc2VyOlwiXTpub3QoLm13LWNoYW5nZXNsaXN0LWRhdGUpOm5vdChbaHJlZio9XCJ1bmRvXCJdKScsXG5cdFx0XHRgYVt0aXRsZV49XCIke2xvY2FsaXplZFVzZXJOYW1lc3BhY2V9OlwiXTpub3QoLm13LWNoYW5nZXNsaXN0LWRhdGUpOm5vdChbaHJlZio9XCJ1bmRvXCJdKWAsXG5cdFx0XS5qb2luKCcsJylcblx0KSkge1xuXHRcdGNvbnN0ICRlbGVtZW50OiBKUXVlcnk8SFRNTEFuY2hvckVsZW1lbnQ+ID0gJChlbGVtZW50KTtcblxuXHRcdGNvbnN0IHVzZXJSZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cChgKChVc2VyKXwoJHtsb2NhbGl6ZWRVc2VyTmFtZXNwYWNlfSkpOiguKj8pKD89JnwkKWApO1xuXHRcdGNvbnN0IHVzZXJuYW1lTWF0Y2hBcnJheTogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSBkZWNvZGVVUkkoJGVsZW1lbnQuYXR0cignaHJlZicpID8/ICcnKS5tYXRjaCh1c2VyUmVnZXgpO1xuXHRcdGlmICghdXNlcm5hbWVNYXRjaEFycmF5KSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRsZXQgW3VzZXJuYW1lXSA9IHVzZXJuYW1lTWF0Y2hBcnJheTtcblx0XHR1c2VybmFtZSA9IHVzZXJuYW1lLnJlcGxhY2UobmV3IFJlZ0V4cChgXigoVXNlcil8KCR7bG9jYWxpemVkVXNlck5hbWVzcGFjZX0pKTpgLCAnaScpLCAnJyk7XG5cdFx0Y29uc3QgaW5kZXg6IG51bWJlciA9IHVzZXJuYW1lLmluZGV4T2YoJy8nKTtcblx0XHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0XHQkZWxlbWVudC5kYXRhKCd1c2VybmFtZScsIHVzZXJuYW1lKTtcblx0XHRcdHVzZXJuYW1lc1t1c2VybmFtZXMubGVuZ3RoXSA9IHVzZXJuYW1lO1xuXHRcdFx0JGVsZW1lbnRzWyRlbGVtZW50cy5sZW5ndGhdID0gJGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCF1c2VybmFtZXMubGVuZ3RoIHx8ICEkZWxlbWVudHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Zm9yIChjb25zdCB1c2VybmFtZSBvZiBuZXcgU2V0KHVzZXJuYW1lcykpIHtcblx0XHRpZiAoU1lTVEVNX1NDUklQVF9MSVNULmluY2x1ZGVzKHVzZXJuYW1lKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyYW1zOiBBcGlRdWVyeVVzZXJDb250cmlic1BhcmFtcyA9IHtcblx0XHRcdC4uLmJhc2VQYXJhbXMsXG5cdFx0XHR1Y3VzZXI6IHVzZXJuYW1lLFxuXHRcdH07XG5cblx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBhcGkuZ2V0KHBhcmFtcyk7XG5cblx0XHRjb25zdCB7dXNlcmNvbnRyaWJzfSA9IHJlc3VsdFsncXVlcnknXSBhcyBVc2VyY29udHJpYnM7XG5cdFx0aWYgKCF1c2VyY29udHJpYnMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qge3RpbWVzdGFtcH0gPSB1c2VyY29udHJpYnNbMF0hO1xuXG5cdFx0Zm9yIChjb25zdCAkZWxlbWVudCBvZiAkZWxlbWVudHMpIHtcblx0XHRcdGlmICgkZWxlbWVudC5kYXRhKCd1c2VybmFtZScpID09PSB1c2VybmFtZSkge1xuXHRcdFx0XHQkKGdldExhc3RBY3RpdmVNYXJrZXIodGltZXN0YW1wLCB0cnVlKSkuaW5zZXJ0QWZ0ZXIoJGVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuY29uc3Qgd2hvSXNBY3RpdmVVc2VyUGFnZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0Y29uc3Qge3dnQWN0aW9uLCB3Z05hbWVzcGFjZU51bWJlciwgd2dQYWdlTmFtZSwgd2dSZWxldmFudFVzZXJOYW1lfSA9IG13LmNvbmZpZy5nZXQoKTtcblxuXHRpZiAod2dSZWxldmFudFVzZXJOYW1lICYmIHdnTmFtZXNwYWNlTnVtYmVyID09PSAyICYmIHdnQWN0aW9uID09PSAndmlldycpIHtcblx0XHRjb25zdCByZWxldmFudFVzZXJQYWdlTmFtZTogc3RyaW5nID0gbmV3IG13LlRpdGxlKHdnUmVsZXZhbnRVc2VyTmFtZSwgMikudG9UZXh0KCk7XG5cdFx0Y29uc3QgcGFnZU5hbWU6IHN0cmluZyA9IG5ldyBtdy5UaXRsZSh3Z1BhZ2VOYW1lKS50b1RleHQoKTtcblx0XHRpZiAocmVsZXZhbnRVc2VyUGFnZU5hbWUgIT09IHBhZ2VOYW1lKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyYW1zOiBBcGlRdWVyeVVzZXJDb250cmlic1BhcmFtcyA9IHtcblx0XHRcdC4uLmJhc2VQYXJhbXMsXG5cdFx0XHR1Y3VzZXI6IHdnUmVsZXZhbnRVc2VyTmFtZSxcblx0XHR9O1xuXG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpLmdldChwYXJhbXMpO1xuXG5cdFx0Y29uc3Qge3VzZXJjb250cmlic30gPSByZXN1bHRbJ3F1ZXJ5J10gYXMgVXNlcmNvbnRyaWJzO1xuXHRcdGlmICghdXNlcmNvbnRyaWJzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHt0aW1lc3RhbXB9ID0gdXNlcmNvbnRyaWJzWzBdITtcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oT1BUSU9OUy5tb3VudFBvaW50U2VsZWN0b3IpKSB7XG5cdFx0XHRlbGVtZW50LnByZXBlbmQoZ2V0TGFzdEFjdGl2ZU1hcmtlcih0aW1lc3RhbXAsIGZhbHNlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQge3dob0lzQWN0aXZlLCB3aG9Jc0FjdGl2ZVVzZXJQYWdlfTtcbiIsICJpbXBvcnQge3dob0lzQWN0aXZlLCB3aG9Jc0FjdGl2ZVVzZXJQYWdlfSBmcm9tICcuL21vZHVsZXMvY29yZSc7XG5cbihmdW5jdGlvbiB3aG9Jc0FjdGl2ZUxvYWQoKSB7XG5cdGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdG13Lmhvb2soJ3dpa2lwYWdlLmNvbnRlbnQnKS5hZGQod2hvSXNBY3RpdmUpO1xuXHR2b2lkIHdob0lzQWN0aXZlVXNlclBhZ2UoKTtcbn0pKCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FB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QU8sT0FBTztBQUNyQyxVQUFJLENBQUNDLGFBQWFWLFFBQVE7QUFDekI7TUFDRDtBQUVBLFlBQU07UUFBQzdDO01BQVMsSUFBSXVELGFBQWEsQ0FBQztBQUFBLFVBQUFpQixhQUFBbEQsMkJBQ1poQyxTQUFTbUYsaUJBQXNDNUgsa0JBQWtCLENBQUEsR0FBQTZIO0FBQUEsVUFBQTtBQUF2RixhQUFBRixXQUFBOUMsRUFBQSxHQUFBLEVBQUFnRCxTQUFBRixXQUFBN0MsRUFBQSxHQUFBQyxRQUEwRjtBQUFBLGdCQUEvRUUsVUFBQTRDLE9BQUEzQztBQUNWRCxrQkFBUTZDLFFBQVE1RSxvQkFBb0JDLFdBQVcsS0FBSyxDQUFDO1FBQ3REO01BQUEsU0FBQThDLEtBQUE7QUFBQTBCLG1CQUFBekIsRUFBQUQsR0FBQTtNQUFBLFVBQUE7QUFBQTBCLG1CQUFBeEIsRUFBQTtNQUFBO0lBQ0Q7RUFDRCxDQUFBO0FBQUEsU0FBQSxTQTNCTWMsdUJBQUE7QUFBQSxXQUFBQyxNQUFBSCxNQUFBLE1BQUFDLFNBQUE7RUFBQTtBQUFBLEVBQUE7O0NDN0VMLFNBQVNlLGtCQUFrQjtBQUMzQixNQUFJMUgsR0FBR0MsT0FBT0MsSUFBSSxtQkFBbUIsSUFBSSxHQUFHO0FBQzNDO0VBQ0Q7QUFFQUYsS0FBRzJILEtBQUssa0JBQWtCLEVBQUVDLElBQUlqRSxXQUFXO0FBQzNDLE9BQUtpRCxvQkFBb0I7QUFDMUIsR0FBRzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAidmVyc2lvbiIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlN5bWJvbCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImRvY3VtZW50IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiU2V0IiwgIm1vZHVsZSIsICJTZXQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiU2V0IiwgIiQiLCAibW9kdWxlIiwgIlNldCIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb3VudFBvaW50U2VsZWN0b3IiLCAidmVyc2lvbiIsICJTWVNURU1fU0NSSVBUX0xJU1QiLCAiV0dfVVNFUl9HUk9VUFMiLCAiX213JGNvbmZpZyRnZXQiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJXR19VU0VSX05BTUUiLCAiX213JGNvbmZpZyRnZXQyIiwgIldHX1VTRVJfRURJVF9DT1VOVCIsICJfbXckY29uZmlnJGdldDMiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAicmVxdWlyZSIsICJhcGkiLCAiaW5pdE13QXBpIiwgImNvbmNhdCIsICJpbXBvcnRfZXh0X2dhZGdldDMiLCAiX190b0VTTSIsICJpbXBvcnRfZXh0X2dhZGdldDIiLCAiZ2V0STE4bk1lc3NhZ2VzIiwgIk92ZXJBWWVhciIsICJsb2NhbGl6ZSIsICJlbiIsICJUaGlzV2VlayIsICJUaGlzTW9udGgiLCAiVGhpc1NlYXNvbiIsICJUaGlzU2VtaXllYXIiLCAiVGhpc1llYXIiLCAiaTE4bk1lc3NhZ2VzIiwgImdldE1lc3NhZ2UiLCAia2V5IiwgIldyYXBwZXIiLCAicHJvcHMiLCAidGltZVNwYW4iLCAiaW5uZXJFbGVtZW50IiwgImNsYXNzTmFtZSIsICJza2luIiwgImRlZmF1bHQiLCAiY3JlYXRlRWxlbWVudCIsICJpbmNsdWRlcyIsICJkb2N1bWVudCIsICJxdWVyeVNlbGVjdG9yIiwgIlRhZyIsICJfZ2V0TWVzc2FnZSIsICJpbmRpY2F0b3IiLCAiaWNvbkNsYXNzTmFtZSIsICJ0ZXh0Q2xhc3NOYW1lIiwgIkZyYWdtZW50IiwgInRpdGxlIiwgImdldExhc3RBY3RpdmVNYXJrZXIiLCAidGltZXN0YW1wIiwgImRhdGUiLCAiRGF0ZSIsICJwYXJzZSIsICJub3ciLCAiZGlmZiIsICJNYXRoIiwgImZsb29yIiwgImJhc2VQYXJhbXMiLCAiYWN0aW9uIiwgImZvcm1hdCIsICJsaXN0IiwgInVjbGltaXQiLCAid2hvSXNBY3RpdmUiLCAiX3JlZiIsICJfYXN5bmNUb0dlbmVyYXRvciIsICIkY29udGVudCIsICJ1c2VybmFtZXMiLCAiJGVsZW1lbnRzIiwgIndnRm9ybWF0dGVkTmFtZXNwYWNlcyIsICJsb2NhbGl6ZWRVc2VyTmFtZXNwYWNlIiwgIl9pdGVyYXRvcjIiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiZmluZCIsICJqb2luIiwgIl9zdGVwMiIsICJzIiwgIm4iLCAiZG9uZSIsICJfJGVsZW1lbnQkYXR0ciIsICJlbGVtZW50IiwgInZhbHVlIiwgIiRlbGVtZW50IiwgIiQiLCAidXNlclJlZ2V4IiwgIlJlZ0V4cCIsICJ1c2VybmFtZU1hdGNoQXJyYXkiLCAiZGVjb2RlVVJJIiwgImF0dHIiLCAibWF0Y2giLCAidXNlcm5hbWUiLCAicmVwbGFjZSIsICJpbmRleCIsICJpbmRleE9mIiwgImRhdGEiLCAibGVuZ3RoIiwgImVyciIsICJlIiwgImYiLCAiX2l0ZXJhdG9yMyIsICJTZXQiLCAiX3N0ZXAzIiwgInBhcmFtcyIsICJ1Y3VzZXIiLCAicmVzdWx0IiwgInVzZXJjb250cmlicyIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJpbnNlcnRBZnRlciIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAid2hvSXNBY3RpdmVVc2VyUGFnZSIsICJfcmVmMiIsICJ3Z0FjdGlvbiIsICJ3Z05hbWVzcGFjZU51bWJlciIsICJ3Z1BhZ2VOYW1lIiwgIndnUmVsZXZhbnRVc2VyTmFtZSIsICJyZWxldmFudFVzZXJQYWdlTmFtZSIsICJUaXRsZSIsICJ0b1RleHQiLCAicGFnZU5hbWUiLCAiX2l0ZXJhdG9yNSIsICJxdWVyeVNlbGVjdG9yQWxsIiwgIl9zdGVwNSIsICJwcmVwZW5kIiwgIndob0lzQWN0aXZlTG9hZCIsICJob29rIiwgImFkZCJdCn0K diff --git a/dist/Wikiplus/Wikiplus.js b/dist/Wikiplus/Wikiplus.js index 1b87fe50..315664f4 100644 --- a/dist/Wikiplus/Wikiplus.js +++ b/dist/Wikiplus/Wikiplus.js @@ -51,9 +51,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -67,9 +67,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -81,9 +81,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -94,9 +94,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -107,9 +107,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -119,9 +119,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -133,9 +133,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -148,9 +148,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -164,9 +164,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -177,9 +177,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -194,9 +194,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -204,9 +204,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -217,9 +217,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -229,9 +229,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -242,9 +242,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -253,9 +253,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -268,18 +268,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator2 = globalThis2.navigator; @@ -288,9 +288,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -315,9 +315,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -331,18 +331,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -358,9 +358,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -373,9 +373,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -387,9 +387,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -400,9 +400,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -418,17 +418,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -443,9 +443,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -453,18 +453,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -473,9 +473,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -485,9 +485,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -498,9 +498,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -512,9 +512,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -534,9 +534,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -562,9 +562,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -575,9 +575,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -589,9 +589,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -606,9 +606,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -631,9 +631,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -647,9 +647,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -661,9 +661,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -707,9 +707,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -723,9 +723,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -743,9 +743,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -760,9 +760,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -771,9 +771,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -784,17 +784,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -867,9 +867,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -922,9 +922,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -957,9 +957,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -970,9 +970,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -982,9 +982,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -996,9 +996,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -1009,9 +1009,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -1020,9 +1020,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1055,9 +1055,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1079,9 +1079,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1095,9 +1095,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1108,17 +1108,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1134,9 +1134,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1156,9 +1156,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1177,9 +1177,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1220,9 +1220,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1231,9 +1231,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1258,9 +1258,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1271,9 +1271,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -1310,9 +1310,9 @@ var require_es_array_push = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-string-tag-support.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-string-tag-support.js var require_to_string_tag_support = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-string-tag-support.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-string-tag-support.js"(exports, module2) { "use strict"; var wellKnownSymbol = require_well_known_symbol(); var TO_STRING_TAG = wellKnownSymbol("toStringTag"); @@ -1322,9 +1322,9 @@ var require_to_string_tag_support = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof.js var require_classof = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof.js"(exports, module2) { "use strict"; var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); var isCallable = require_is_callable(); @@ -1348,9 +1348,9 @@ var require_classof = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-string.js var require_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-string.js"(exports, module2) { "use strict"; var classof = require_classof(); var $String = String; @@ -1361,9 +1361,9 @@ var require_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/validate-arguments-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/validate-arguments-length.js var require_validate_arguments_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/validate-arguments-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/validate-arguments-length.js"(exports, module2) { "use strict"; var $TypeError = TypeError; module2.exports = function(passed, required) { @@ -1373,9 +1373,9 @@ var require_validate_arguments_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.delete.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.delete.js var require_web_url_search_params_delete = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.delete.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.delete.js"() { "use strict"; var defineBuiltIn = require_define_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1423,9 +1423,9 @@ var require_web_url_search_params_delete = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.has.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.has.js var require_web_url_search_params_has = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.has.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.has.js"() { "use strict"; var defineBuiltIn = require_define_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1454,9 +1454,9 @@ var require_web_url_search_params_has = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in-accessor.js var require_define_built_in_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in-accessor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in-accessor.js"(exports, module2) { "use strict"; var makeBuiltIn = require_make_built_in(); var defineProperty = require_object_define_property(); @@ -1468,9 +1468,9 @@ var require_define_built_in_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.size.js var require_web_url_search_params_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/web.url-search-params.size.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/web.url-search-params.size.js"() { "use strict"; var DESCRIPTORS = require_descriptors(); var uncurryThis = require_function_uncurry_this(); @@ -3010,4 +3010,4 @@ _asyncToGenerator(function* () { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuaGFzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5zaXplLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3V0aWxzL2NvbnN0YW50cy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9yZXF1ZXN0cy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9pMThuLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3V0aWxzL2xvZy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy9zZXJ2aWNlcy93aWtpLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL2NvcmUvcGFnZS5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy9jb3JlL25vdGlmaWNhdGlvbi5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9zbGVlcC5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9oZWxwZXJzLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL2NvcmUvdWkuanMiLCAic3JjL1dpa2lwbHVzL21vZHVsZXMvdXRpbHMvc2V0dGluZ3MuanMiLCAic3JjL1dpa2lwbHVzL21vZHVsZXMvaW5kZXguanMiLCAic3JjL1dpa2lwbHVzL1dpa2lwbHVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyICRVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXM7XG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gJFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgYXBwZW5kID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmFwcGVuZCk7XG52YXIgJGRlbGV0ZSA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZVsnZGVsZXRlJ10pO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZm9yRWFjaCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHBhcmFtcyA9IG5ldyAkVVJMU2VhcmNoUGFyYW1zKCdhPTEmYT0yJmI9MycpO1xuXG5wYXJhbXNbJ2RlbGV0ZSddKCdhJywgMSk7XG4vLyBgdW5kZWZpbmVkYCBjYXNlIGlzIGEgQ2hyb21pdW0gMTE3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQyMjJcbnBhcmFtc1snZGVsZXRlJ10oJ2InLCB1bmRlZmluZWQpO1xuXG5pZiAocGFyYW1zICsgJycgIT09ICdhPTInKSB7XG4gIGRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAnZGVsZXRlJywgZnVuY3Rpb24gKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGlmIChsZW5ndGggJiYgJHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAkZGVsZXRlKHRoaXMsIG5hbWUpO1xuICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgZm9yRWFjaCh0aGlzLCBmdW5jdGlvbiAodiwgaykgeyAvLyBhbHNvIHZhbGlkYXRlcyBgdGhpc2BcbiAgICAgIHB1c2goZW50cmllcywgeyBrZXk6IGssIHZhbHVlOiB2IH0pO1xuICAgIH0pO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGxlbmd0aCwgMSk7XG4gICAgdmFyIGtleSA9IHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciB2YWx1ZSA9IHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZGluZGV4ID0gMDtcbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICB2YXIgZW50cmllc0xlbmd0aCA9IGVudHJpZXMubGVuZ3RoO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzTGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBpZiAoZm91bmQgfHwgZW50cnkua2V5ID09PSBrZXkpIHtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAkZGVsZXRlKHRoaXMsIGVudHJ5LmtleSk7XG4gICAgICB9IGVsc2UgZGluZGV4Kys7XG4gICAgfVxuICAgIHdoaWxlIChkaW5kZXggPCBlbnRyaWVzTGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbZGluZGV4KytdO1xuICAgICAgaWYgKCEoZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgPT09IHZhbHVlKSkgYXBwZW5kKHRoaXMsIGVudHJ5LmtleSwgZW50cnkudmFsdWUpO1xuICAgIH1cbiAgfSwgeyBlbnVtZXJhYmxlOiB0cnVlLCB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgJFVSTFNlYXJjaFBhcmFtcyA9IFVSTFNlYXJjaFBhcmFtcztcbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSAkVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcbnZhciBnZXRBbGwgPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZ2V0QWxsKTtcbnZhciAkaGFzID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmhhcyk7XG52YXIgcGFyYW1zID0gbmV3ICRVUkxTZWFyY2hQYXJhbXMoJ2E9MScpO1xuXG4vLyBgdW5kZWZpbmVkYCBjYXNlIGlzIGEgQ2hyb21pdW0gMTE3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQyMjJcbmlmIChwYXJhbXMuaGFzKCdhJywgMikgfHwgIXBhcmFtcy5oYXMoJ2EnLCB1bmRlZmluZWQpKSB7XG4gIGRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAnaGFzJywgZnVuY3Rpb24gaGFzKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGlmIChsZW5ndGggJiYgJHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAkaGFzKHRoaXMsIG5hbWUpO1xuICAgIHZhciB2YWx1ZXMgPSBnZXRBbGwodGhpcywgbmFtZSk7IC8vIGFsc28gdmFsaWRhdGVzIGB0aGlzYFxuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGxlbmd0aCwgMSk7XG4gICAgdmFyIHZhbHVlID0gdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIGlmICh2YWx1ZXNbaW5kZXgrK10gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICB9IHJldHVybiBmYWxzZTtcbiAgfSwgeyBlbnVtZXJhYmxlOiB0cnVlLCB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5nZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3IuZ2V0LCBuYW1lLCB7IGdldHRlcjogdHJ1ZSB9KTtcbiAgaWYgKGRlc2NyaXB0b3Iuc2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLnNldCwgbmFtZSwgeyBzZXR0ZXI6IHRydWUgfSk7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9IFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5mb3JFYWNoKTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2l6ZWAgZ2V0dGVyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3VybC9wdWxsLzczNFxuaWYgKERFU0NSSVBUT1JTICYmICEoJ3NpemUnIGluIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSkpIHtcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgIGZvckVhY2godGhpcywgZnVuY3Rpb24gKCkgeyBjb3VudCsrOyB9KTtcbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuIiwgImNsYXNzIENvbnN0YW50cyB7XG5cdHZlcnNpb24gPSAnNC4wLjEyJztcblx0Z2V0IGlzQXJ0aWNsZSgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnSXNBcnRpY2xlJyk7XG5cdH1cblx0Z2V0IGN1cnJlbnRQYWdlTmFtZSgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKS5yZXBsYWNlKC8gL2csICdfJyk7XG5cdH1cblx0Z2V0IGFydGljbGVJZCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJyk7XG5cdH1cblx0Z2V0IHJldmlzaW9uSWQoKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5tdy5jb25maWcuZ2V0KCd3Z1JldmlzaW9uSWQnKTtcblx0fVxuXHRnZXQgbGF0ZXN0UmV2aXNpb25JZCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpO1xuXHR9XG5cdGdldCBhcnRpY2xlUGF0aCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZVBhdGgnKTtcblx0fVxuXHRnZXQgc2NyaXB0UGF0aCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnU2NyaXB0UGF0aCcpO1xuXHR9XG5cdGdldCBhY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5tdy5jb25maWcuZ2V0KCd3Z0FjdGlvbicpO1xuXHR9XG5cdGdldCBza2luKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnc2tpbicpO1xuXHR9XG5cdGdldCB1c2VyR3JvdXBzKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dVc2VyR3JvdXBzJyk7XG5cdH1cblx0Z2V0IHdpa2lJZCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnV2lraUlEJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IENvbnN0YW50cygpO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5cbmNvbnN0IFJlcXVlc3RzID0ge1xuXHRiYXNlOiBgJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdH0ke0NvbnN0YW50cy5zY3JpcHRQYXRofS9hcGkucGhwYCxcblx0YXN5bmMgZ2V0KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgdXJsID0gbmV3IFVSTChSZXF1ZXN0cy5iYXNlKTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhxdWVyeSkpIHtcblx0XHRcdHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgcXVlcnlba2V5XSk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG5cdFx0XHRjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcblx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0J0FwaS1Vc2VyLUFnZW50JzogYFdpa2lwbHVzLyR7Q29uc3RhbnRzLnZlcnNpb259ICgke0NvbnN0YW50cy53aWtpSWR9KWAsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHRcdHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cdH0sXG5cdGFzeW5jIHBvc3QocGF5bG9hZCkge1xuXHRcdGNvbnN0IHVybCA9IG5ldyBVUkwoUmVxdWVzdHMuYmFzZSk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpO1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQpKSB7XG5cdFx0XHRmb3JtLmFwcGVuZChrZXksIHZhbHVlKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0Ym9keTogZm9ybSxcblx0XHRcdGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHQnQXBpLVVzZXItQWdlbnQnOiBgV2lraXBsdXMvJHtDb25zdGFudHMudmVyc2lvbn0gKCR7Q29uc3RhbnRzLndpa2lJZH0pYCxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblx0fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RzO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5jbGFzcyBJMThuIHtcblx0bGFuZ3VhZ2U7XG5cdGkxOG5EYXRhID0ge307XG5cdHNlc3Npb25VcGRhdGVMb2cgPSBbXTtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGxhbmd1YWdlO1xuXHRcdHRyeSB7XG5cdFx0XHRsYW5ndWFnZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlWydXaWtpcGx1c19TZXR0aW5ncyddKVsnbGFuZ3VhZ2UnXSB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGxhbmd1YWdlID0gKG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlKVxuXHRcdFx0XHQucmVwbGFjZSgvaGFuW3N0XS0/L2ksICcnKSAvLyBmb3IgbGFuZ3VhZ2VzIGxpa2UgemgtSGFucy1DTlxuXHRcdFx0XHQudG9Mb3dlckNhc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuXHRcdC8vIE1lcmdlIHdpdGggbG9jYWxTdG9yYWdlIGkxOG4gY2FjaGVcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaTE4bkNhY2hlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnV2lraXBsdXNfaTE4bkNhY2hlJykpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaTE4bkNhY2hlKSkge1xuXHRcdFx0XHR0aGlzLmkxOG5EYXRhW2tleV0gPSBpMThuQ2FjaGVba2V5XTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIEZhaWwgdG8gcGFyc2UgaTE4biBjYWNoZSwgcmVzZXRcblx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdXaWtpcGx1c19pMThuQ2FjaGUnLCAne30nKTtcblx0XHR9XG5cdH1cblx0dHJhbnNsYXRlKGtleSwgcGxhY2Vob2xkZXJzID0gW10pIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMubGFuZ3VhZ2UgaW4gdGhpcy5pMThuRGF0YSkge1xuXHRcdFx0aWYgKGtleSBpbiB0aGlzLmkxOG5EYXRhW3RoaXMubGFuZ3VhZ2VdKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuaTE4bkRhdGFbdGhpcy5sYW5ndWFnZV1ba2V5XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHRyeSB1cGRhdGUgbGFuZ3VhZ2UgdmVyaXNvblxuXHRcdFx0XHR0aGlzLmxvYWRMYW5ndWFnZSh0aGlzLmxhbmd1YWdlKTtcblx0XHRcdFx0aWYgKGtleSBpbiB0aGlzLmkxOG5EYXRhWydlbi11cyddKSB7XG5cdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gRW5nbGlzaFxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuaTE4bkRhdGFbJ2VuLXVzJ11ba2V5XTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBrZXk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sb2FkTGFuZ3VhZ2UodGhpcy5sYW5ndWFnZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHBsYWNlaG9sZGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgcGxhY2Vob2xkZXJdIG9mIHBsYWNlaG9sZGVycy5lbnRyaWVzKCkpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoYCQke2luZGV4ICsgMX1gLCBwbGFjZWhvbGRlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0YXN5bmMgbG9hZExhbmd1YWdlKGxhbmd1YWdlKSB7XG5cdFx0aWYgKHRoaXMuc2Vzc2lvblVwZGF0ZUxvZy5pbmNsdWRlcyhsYW5ndWFnZSkpIHtcblx0XHRcdC8vIEhhcyBiZWVuIHVwZGF0ZWQgdGhpcyBzZXNzaW9uLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoXG5cdFx0XHRcdGF3YWl0IGZldGNoKFxuXHRcdFx0XHRcdGBodHRwczovL2dpdGNkbi5xaXV3ZW4ubmV0LmNuL0ludGVyZmFjZUFkbWluL1dpa2lwbHVzL3Jhdy9icmFuY2gvZGV2L2xhbmd1YWdlcy8ke2xhbmd1YWdlfS5qc29uYFxuXHRcdFx0XHQpXG5cdFx0XHQpLmpzb24oKTtcblx0XHRcdGNvbnN0IG5vd1ZlcnNpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnV2lraXBsdXNfTGFuZ3VhZ2VWZXJzaW9uJykgfHwgJzAwMCc7XG5cdFx0XHR0aGlzLnNlc3Npb25VcGRhdGVMb2cucHVzaChsYW5ndWFnZSk7XG5cdFx0XHRpZiAocmVzcG9uc2UuX192ZXJzaW9uICE9PSBub3dWZXJzaW9uIHx8ICEobGFuZ3VhZ2UgaW4gdGhpcy5pMThuRGF0YSkpIHtcblx0XHRcdFx0Ly8gTGFuZ3VhZ2UgZ2V0IHVwZGF0ZWRcblx0XHRcdFx0Y29uc29sZS5pbmZvKGBVcGRhdGUgJHtsYW5ndWFnZX0gc3VwcG9ydCB0byB2ZXJzaW9uICR7cmVzcG9uc2UuX192ZXJzaW9ufWApO1xuXHRcdFx0XHR0aGlzLmkxOG5EYXRhW2xhbmd1YWdlXSA9IHJlc3BvbnNlO1xuXHRcdFx0XHQvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIGNhY2hlXG5cdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdXaWtpcGx1c19pMThuQ2FjaGUnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmkxOG5EYXRhKSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBVbnN1cHBvcnRlZCBsYW5ndWFnZVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgSTE4bigpO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nO1xuXG5jbGFzcyBXaWtpcGx1c0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5jb2RlID0gY29kZTtcblx0fVxufVxuXG5jb25zdCBMb2cgPSB7XG5cdGRlYnVnKG1lc3NhZ2UgPSAnJykge1xuXHRcdGNvbnNvbGUuZGVidWcoYFtXaWtpcGx1cy1ERUJVR10gJHttZXNzYWdlfWApO1xuXHR9LFxuXHRpbmZvKG1lc3NhZ2UgPSAnJykge1xuXHRcdGNvbnNvbGUuaW5mbyhgW1dpa2lwbHVzLUlORk9dICR7bWVzc2FnZX1gKTtcblx0fSxcblx0ZXJyb3IoZXJyb3JDb2RlLCBwYXlsb2FkcyA9IFtdKSB7XG5cdFx0bGV0IHRlbXBsYXRlID0gaTE4bi50cmFuc2xhdGUoZXJyb3JDb2RlKTtcblx0XHRpZiAocGF5bG9hZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gRmlsbFxuXHRcdFx0Zm9yIChjb25zdCBbaSwgdl0gb2YgcGF5bG9hZHMuZW50cmllcygpKSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcJHtpICsgMX1gLCAnaWcnKSwgdik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnNvbGUuZXJyb3IoYFtXaWtpcGx1cy1FUlJPUl0gJHt0ZW1wbGF0ZX1gKTtcblx0XHR0aHJvdyBuZXcgV2lraXBsdXNFcnJvcihgJHt0ZW1wbGF0ZX1gLCBlcnJvckNvZGUpO1xuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgcmVxdWVzdHMgZnJvbSAnLi4vdXRpbHMvcmVxdWVzdHMnO1xuaW1wb3J0IExvZyBmcm9tICcuLi91dGlscy9sb2cnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5cbmNsYXNzIFdpa2kge1xuXHRwYWdlSW5mb0NhY2hlID0ge307XG5cdC8qKlxuXHQgKiDojrflvpcgRWRpdCBUb2tlblxuXHQgKiBHZXQgRWRpdCBUb2tlblxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuXHQgKi9cblx0YXN5bmMgZ2V0RWRpdFRva2VuKCkge1xuXHRcdC8vIOWwneivleS7jiBBUEkg6I635b6XIEVkaXRUb2tlblxuXHRcdC8vIFRyeSB0byBnZXQgRWRpdFRva2VuIGZyb20gQVBJXG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5nZXQoe1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0bWV0YTogJ3Rva2VucycsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHR9KTtcblx0XHRpZiAoXG5cdFx0XHRyZXNwb25zZS5xdWVyeSAmJlxuXHRcdFx0cmVzcG9uc2UucXVlcnkudG9rZW5zICYmXG5cdFx0XHRyZXNwb25zZS5xdWVyeS50b2tlbnMuY3NyZnRva2VuICYmXG5cdFx0XHRyZXNwb25zZS5xdWVyeS50b2tlbnMuY3NyZnRva2VuICE9PSAnK1xcXFwnXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2UucXVlcnkudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHR9XG5cdFx0cmV0dXJuIExvZy5lcnJvcignZmFpbF90b19nZXRfZWRpdHRva2VuJyk7XG5cdH1cblx0LyoqXG5cdCAqIOiOt+W+l+mhtemdouS4iuS4gOeJiOacrOaXtumXtOaIs1xuXHQgKiBHZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZXZpc2lvbiBvZiBwYWdlIHNwZWNpZmllZC5cblx0ICpcblx0ICogQHBhcmFtIHtwYXJhbXMuc3RyaW5nfSB0aXRsZSDpobXpnaLlkI0gLyBQYWdlbmFtZVxuXHQgKiBAcGFyYW0ge3BhcmFtcy5yZXZpc2lvbklkfSByZXZpc2lvbklkIOS/ruiuoueJiOacrOWPtyAvIFJldmlzaW9uIElEXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG5cdCAqL1xuXHRhc3luYyBnZXRQYWdlSW5mbyh7dGl0bGUsIHJldmlzaW9uSWR9KSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRwcm9wOiAncmV2aXNpb25zfGluZm8nLFxuXHRcdFx0XHRydnByb3A6ICd0aW1lc3RhbXB8aWRzJyxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHJldmlzaW9uSWQpIHtcblx0XHRcdFx0cGFyYW1zLnJldmlkcyA9IHJldmlzaW9uSWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHRpdGxlKSB7XG5cdFx0XHRcdGlmICh0aGlzLnBhZ2VJbmZvQ2FjaGVbdGl0bGVdKSB7XG5cdFx0XHRcdFx0Ly8gSGl0IGNhY2hlXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHRpbWVzdGFtcDogdGhpcy5wYWdlSW5mb0NhY2hlW3RpdGxlXS50aW1lc3RhbXAsXG5cdFx0XHRcdFx0XHRyZXZpc2lvbklkOiB0aGlzLnBhZ2VJbmZvQ2FjaGVbdGl0bGVdLnJldmlkLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFyYW1zLnRpdGxlcyA9IHRpdGxlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5nZXQocGFyYW1zKTtcblx0XHRcdGlmIChyZXNwb25zZS5xdWVyeSAmJiByZXNwb25zZS5xdWVyeS5wYWdlcykge1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMocmVzcG9uc2UucXVlcnkucGFnZXMpWzBdID09PSAnLTEnKSB7XG5cdFx0XHRcdFx0Ly8g5LiN5a2Y5Zyo6L+Z5LiA6aG16Z2iXG5cdFx0XHRcdFx0Ly8gUGFnZSBub3QgZm91bmQuXG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHBhZ2VJbmZvID0gcmVzcG9uc2UucXVlcnkucGFnZXNbT2JqZWN0LmtleXMocmVzcG9uc2UucXVlcnkucGFnZXMpWzBdXS5yZXZpc2lvbnNbMF07XG5cdFx0XHRcdGlmICh0aXRsZSkge1xuXHRcdFx0XHRcdHRoaXMucGFnZUluZm9DYWNoZVt0aXRsZV0gPSBwYWdlSW5mbztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRpbWVzdGFtcDogcGFnZUluZm8udGltZXN0YW1wLFxuXHRcdFx0XHRcdHJldmlzaW9uSWQ6IHBhZ2VJbmZvLnJldmlkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0TG9nLmVycm9yKCdmYWlsX3RvX2dldF9lZGl0dG9rZW4nKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIOiOt+W+l+mhtemdoueahCBXaWtpdGV4dFxuXHQgKiBHZXQgd2lraXRleHQgb2YgdGhlIHBhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSB0aXRsZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucmV2aXNpb25JZCDniYjmnKzlj7dcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5zZWN0aW9uIOauteiQveWPt1xuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IHdpa2l0ZXh05YaF5a65XG5cdCAqL1xuXHRhc3luYyBnZXRXaWtpVGV4dCh7c2VjdGlvbiwgcmV2aXNpb25JZH0pIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoXG5cdFx0XHRcdGF3YWl0IGZldGNoKFxuXHRcdFx0XHRcdGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0fSR7Q29uc3RhbnRzLnNjcmlwdFBhdGh9L2luZGV4LnBocD9vbGRpZD0ke3JldmlzaW9uSWR9JnNlY3Rpb249JHtzZWN0aW9ufSZhY3Rpb249cmF3YFxuXHRcdFx0XHQpXG5cdFx0XHQpLnRleHQoKTtcblx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcignZmFpbF90b19nZXRfd2lraXRleHQnKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIOino+aekCBXaWtpdGV4dFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gd2lraXRleHQgd2lraXRleHRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIOmhtemdouagh+mimFxuXHQgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIOiuvue9rlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IOino+aekOe7k+aenCBIVE1MXG5cdCAqL1xuXHRhc3luYyBwYXJzZVdpa2lUZXh0KHdpa2l0ZXh0LCB0aXRsZSA9ICcnLCBjb25maWcgPSB7fSkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RzLnBvc3Qoe1xuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0YWN0aW9uOiAncGFyc2UnLFxuXHRcdFx0XHR0ZXh0OiB3aWtpdGV4dCxcblx0XHRcdFx0dGl0bGUsXG5cdFx0XHRcdHBzdDogJ3RydWUnLFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAocmVzcG9uc2UucGFyc2UgJiYgcmVzcG9uc2UucGFyc2UudGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UucGFyc2UudGV4dFsnKiddO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0TG9nLmVycm9yKCdjYW50X3BhcnNlX3dpa2l0ZXh0Jyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIOe8lui+kemhtemdolxuXHQgKlxuXHQgKiBAcGFyYW0gcm9vdDBcblx0ICogQHBhcmFtIHJvb3QwLnRpdGxlXG5cdCAqIEBwYXJhbSByb290MC5jb250ZW50XG5cdCAqIEBwYXJhbSByb290MC5lZGl0VG9rZW5cblx0ICogQHBhcmFtIHJvb3QwLnRpbWVzdGFtcFxuXHQgKiBAcGFyYW0gcm9vdDAuY29uZmlnXG5cdCAqIEBwYXJhbSByb290MC5hZGRpdGlvbmFsQ29uZmlnXG5cdCAqL1xuXHRhc3luYyBlZGl0KHt0aXRsZSwgY29udGVudCwgZWRpdFRva2VuLCB0aW1lc3RhbXAsIGNvbmZpZyA9IHt9LCBhZGRpdGlvbmFsQ29uZmlnID0ge319ID0ge30pIHtcblx0XHRsZXQgcmVzcG9uc2U7XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdHMucG9zdCh7XG5cdFx0XHRcdGFjdGlvbjogJ2VkaXQnLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0dGV4dDogY29udGVudCxcblx0XHRcdFx0dGl0bGUsXG5cdFx0XHRcdHRva2VuOiBlZGl0VG9rZW4sXG5cdFx0XHRcdC4uLih0aW1lc3RhbXAgPyB7YmFzZXRpbWVzdGFtcDogdGltZXN0YW1wfSA6IHt9KSxcblx0XHRcdFx0Li4uY29uZmlnLFxuXHRcdFx0XHQuLi5hZGRpdGlvbmFsQ29uZmlnLFxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRMb2cuZXJyb3IoJ25ldHdvcmtfZWRpdF9lcnJvcicpO1xuXHRcdH1cblx0XHRpZiAocmVzcG9uc2UuZWRpdCkge1xuXHRcdFx0aWYgKHJlc3BvbnNlLmVkaXQucmVzdWx0ID09PSAnU3VjY2VzcycpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVzcG9uc2UuZWRpdC5jb2RlKSB7XG5cdFx0XHRcdC8vIEFidXNlIEZpbHRlclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgICAgICAgICAgJHtpMThuLnRyYW5zbGF0ZSgnaGl0X2FidXNlZmlsdGVyJyl9OiR7cmVzcG9uc2UuZWRpdC5pbmZvLnJlcGxhY2UoJy9IaXQgQWJ1c2VGaWx0ZXI6IC9pZycsICcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IHNtYWxsZXI7XCI+JHtyZXNwb25zZS5lZGl0Lndhcm5pbmd9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIGApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmVycm9yKCd1bmtub3duX2VkaXRfZXJyb3InKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHJlc3BvbnNlLmVycm9yICYmIHJlc3BvbnNlLmVycm9yLmNvZGUpIHtcblx0XHRcdExvZy5lcnJvcihyZXNwb25zZS5lcnJvci5jb2RlKTtcblx0XHR9IGVsc2UgaWYgKHJlc3BvbnNlLmNvZGUpIHtcblx0XHRcdExvZy5lcnJvcihyZXNwb25zZS5jb2RlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKCd1bmtub3duX2VkaXRfZXJyb3InKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog6I635b6X5oyH5a6a6aG16Z2i5pyA5paw5L+u6K6i57yW5Y+3XG5cdCAqIEdldCBsYXRlc3QgcmV2aXNpb25JZCBvZiBhIHBhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdGl0bGVcblx0ICovXG5cdGFzeW5jIGdldExhdGVzdFJldmlzaW9uSWRGb3JQYWdlKHRpdGxlKSB7XG5cdFx0Y29uc3Qge3JldmlzaW9uSWR9ID0gYXdhaXQgdGhpcy5nZXRQYWdlSW5mbyh7dGl0bGV9KTtcblx0XHRyZXR1cm4gcmV2aXNpb25JZDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2lraSgpO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgV2lraSBmcm9tICcuLi9zZXJ2aWNlcy93aWtpJztcbmltcG9ydCBMb2cgZnJvbSAnLi4vdXRpbHMvbG9nJztcblxuY2xhc3MgUGFnZSB7XG5cdHRpbWVzdGFtcDtcblx0ZWRpdFRva2VuO1xuXHR0aXRsZTtcblx0cmV2aXNpb25JZDtcblxuXHRpbml0ZWQgPSBmYWxzZTtcblx0aXNOZXdQYWdlID0gZmFsc2U7XG5cblx0c2VjdGlvbkNhY2hlID0ge307XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7cGFyYW1zLnRpdGxlfSDpobXpnaLmoIfpopggUGFnZSBOYW1lIChvcHRpb25hbClcblx0ICogQHBhcmFtIHtwYXJhbXMucmV2aXNpb25JZH0g6aG16Z2i5L+u6K6i57yW5Y+3IFJldmlzaW9uIElkXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih7dGl0bGUsIHJldmlzaW9uSWR9KSB7XG5cdFx0dGhpcy50aXRsZSA9IHRpdGxlO1xuXHRcdHRoaXMucmV2aXNpb25JZCA9IHJldmlzaW9uSWQ7XG5cdFx0dGhpcy5pc05ld1BhZ2UgPSAhcmV2aXNpb25JZDtcblx0fVxuXG5cdC8qKlxuXHQgKiDliJ3lp4vljJYg6I635b6X6aG16Z2iRWRpdFRva2Vu5ZKM5Yid5aeLVGltZVN0YW1wXG5cdCAqIEluaXRpYWxpemF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZWRpdFRva2VuIChvcHRpb25hbCkg5aaC5p6c5o+Q5L6b5LqGZWRpdFRva2Vu77yM5bCG5LiN5Lya5YaN6I635Y+WXG5cdCAqL1xuXHRhc3luYyBpbml0KHtlZGl0VG9rZW4gPSAnJ30gPSB7fSkge1xuXHRcdGNvbnN0IHByb21pc2VBcnIgPSBbdGhpcy5nZXRUaW1lc3RhbXAoKV07XG5cdFx0aWYgKCFlZGl0VG9rZW4pIHtcblx0XHRcdHByb21pc2VBcnIucHVzaCh0aGlzLmdldEVkaXRUb2tlbigpKTtcblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycik7XG5cdFx0dGhpcy5pbml0ZWQgPSB0cnVlO1xuXHRcdExvZy5pbmZvKGBQYWdlIGluaXRpYWxpemF0aW9uIGZvciAke3RoaXMudGl0bGV9IyR7dGhpcy5yZXZpc2lvbklkfSBmaW5pc2hlZC5gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiDojrflvpcgRWRpdFRva2VuXG5cdCAqIEdldCBFZGl0VG9rZW5cblx0ICovXG5cdGFzeW5jIGdldEVkaXRUb2tlbigpIHtcblx0XHRhd2FpdCBtdy5sb2FkZXIudXNpbmcoJ21lZGlhd2lraS51c2VyJyk7XG5cdFx0aWYgKG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJykgJiYgbXcudXNlci50b2tlbnMuZ2V0KCdjc3JmVG9rZW4nKSAhPT0gJytcXFxcJykge1xuXHRcdFx0Ly8g5aaC5p6cIE1lZGlhV2lraSBKYXZhU2NyaXB0IEFQSSDlj6/ku6Xnm7TmjqXojrflvpcgRWRpdFRva2VuIOWImeebtOaOpei/lOWbnlxuXHRcdFx0Ly8gUmV0dXJuIEVkaXRUb2tlbiByZXRyaWV2ZWQgZnJvbSBNZWRpYVdpa2kgSmF2YVNjcmlwdCBBUEkgaWYgYWNjZXNzaWJsZVxuXHRcdFx0dGhpcy5lZGl0VG9rZW4gPSBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyDku45BUEnojrflvpdFZGl0VG9rZW5cblx0XHQvLyBHZXQgRWRpdFRva2VuIGZyb20gTWVkaWFXaWtpIEFQSVxuXHRcdHRoaXMuZWRpdFRva2VuID0gYXdhaXQgV2lraS5nZXRFZGl0VG9rZW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiDojrflvpfnvJbovpHln7rlh4bml7bpl7TmiLNcblx0ICogR2V0IEJhc2UgVGltZXN0YW1wXG5cdCAqL1xuXHRhc3luYyBnZXRUaW1lc3RhbXAoKSB7XG5cdFx0Y29uc3Qge3RpbWVzdGFtcCwgcmV2aXNpb25JZH0gPSBhd2FpdCBXaWtpLmdldFBhZ2VJbmZvKHtcblx0XHRcdHJldmlzaW9uSWQ6IHRoaXMucmV2aXNpb25JZCxcblx0XHRcdHRpdGxlOiB0aGlzLnRpdGxlLFxuXHRcdH0pO1xuXHRcdHRoaXMudGltZXN0YW1wID0gdGltZXN0YW1wO1xuXHRcdGlmIChyZXZpc2lvbklkKSB7XG5cdFx0XHR0aGlzLnJldmlzaW9uSWQgPSByZXZpc2lvbklkO1xuXHRcdFx0dGhpcy5pc05ld1BhZ2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog6I635b6XIFdpa2lUZXh0XG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5zZWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucmV2aXNpb25JZFxuXHQgKi9cblx0YXN5bmMgZ2V0V2lraVRleHQoe3NlY3Rpb24gPSAnJ30gPSB7fSkge1xuXHRcdGNvbnN0IHNlYyA9IHNlY3Rpb24gPT09IC0xID8gJycgOiBzZWN0aW9uO1xuXHRcdGlmICh0aGlzLnNlY3Rpb25DYWNoZVtzZWNdKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZWN0aW9uQ2FjaGVbc2VjXTtcblx0XHR9XG5cdFx0Y29uc3Qgd2lraVRleHQgPSBhd2FpdCBXaWtpLmdldFdpa2lUZXh0KHtcblx0XHRcdHNlY3Rpb246IHNlYyxcblx0XHRcdHJldmlzaW9uSWQ6IHRoaXMucmV2aXNpb25JZCxcblx0XHR9KTtcblx0XHRMb2cuaW5mbyhgV2lraXRleHQgb2YgJHt0aGlzLnRpdGxlfSMke3NlY3Rpb259IGZldGNoZWQuYCk7XG5cdFx0dGhpcy5zZWN0aW9uQ2FjaGVbc2VjXSA9IHdpa2lUZXh0O1xuXHRcdHJldHVybiB3aWtpVGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiDop6PmnpAgV2lraVRleHRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHdpa2l0ZXh0XG5cdCAqL1xuXHRhc3luYyBwYXJzZVdpa2lUZXh0KHdpa2l0ZXh0KSB7XG5cdFx0cmV0dXJuIFdpa2kucGFyc2VXaWtpVGV4dCh3aWtpdGV4dCwgdGhpcy50aXRsZSk7XG5cdH1cblxuXHQvKipcblx0ICog57yW6L6R6aG16Z2iXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gY29uZmlnXG5cdCAqIEBwYXJhbSBwYXlsb2FkXG5cdCAqL1xuXHRhc3luYyBlZGl0KHBheWxvYWQpIHtcblx0XHRpZiAoIXRoaXMuZWRpdFRva2VuKSB7XG5cdFx0XHRMb2cuZXJyb3IoJ2ZhaWxfdG9fZ2V0X2VkaXR0b2tlbicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMudGltZXN0YW1wICYmICF0aGlzLmlzTmV3UGFnZSkge1xuXHRcdFx0Ly8g5aaC5p6c5LiN5piv5Yib5bu65paw6aG16Z2iIOWPiOayoeacieWfuuWHhuaXtumXtOaIsyDliJnmnInlj6/og73pgKDmiJDnvJbovpHopobnm5Yg5L+d6Zmp6LW36KeB55u05o6l5ouS57udXG5cdFx0XHRMb2cuZXJyb3IoJ2ZhaWxfdG9fZ2V0X3RpbWVzdGFtcCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gV2lraS5lZGl0KHtcblx0XHRcdHRpdGxlOiB0aGlzLnRpdGxlLFxuXHRcdFx0ZWRpdFRva2VuOiB0aGlzLmVkaXRUb2tlbixcblx0XHRcdC4uLih0aGlzLnRpbWVzdGFtcCA/IHt0aW1lc3RhbXA6IHRoaXMudGltZXN0YW1wfSA6IHt9KSxcblx0XHRcdC4uLnBheWxvYWQsXG5cdFx0XHRhZGRpdGlvbmFsQ29uZmlnOiB7XG5cdFx0XHRcdC4uLih0aGlzLmlzTmV3UGFnZSA/IHtjcmVhdGVvbmx5OiB0aGlzLmlzTmV3UGFnZX0gOiB7fSksXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2U7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmNsYXNzIE5vdGlmaWNhdGlvbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cdGluaXQoKSB7XG5cdFx0JCgnYm9keScpLmFwcGVuZCgnPGRpdiBpZD1cIk1vZU5vdGlmaWNhdGlvblwiPjwvZGl2PicpO1xuXHR9XG5cdGRpc3BsYXkodGV4dCA9ICfllrV+JywgdHlwZSA9ICdzdWNjZXNzJywgY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xuXHRcdCQoJyNNb2VOb3RpZmljYXRpb24nKS5hcHBlbmQoXG5cdFx0XHQkKCc8ZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygnTW9lTm90aWZpY2F0aW9uLW5vdGljZScpXG5cdFx0XHRcdC5hZGRDbGFzcyhgTW9lTm90aWZpY2F0aW9uLW5vdGljZS0ke3R5cGV9YClcblx0XHRcdFx0LmFwcGVuZChgPHNwYW4+JHt0ZXh0fTwvc3Bhbj5gKVxuXHRcdCk7XG5cdFx0JCgnI01vZU5vdGlmaWNhdGlvbicpLmZpbmQoJy5Nb2VOb3RpZmljYXRpb24tbm90aWNlJykubGFzdCgpLmZhZGVJbigzMDApO1xuXHRcdHRoaXMuYmluZCgpO1xuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHRjYWxsYmFjaygkKCcjTW9lTm90aWZpY2F0aW9uJykuZmluZCgnLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2UnKS5sYXN0KCkpO1xuXHR9XG5cdGJpbmQoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0JCgnLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2UnKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0c2VsZi5zbGlkZUxlZnQoJCh0aGlzKSk7XG5cdFx0fSk7XG5cdH1cblx0c3VjY2Vzcyh0ZXh0LCBjYWxsYmFjaykge1xuXHRcdHRoaXMuZGlzcGxheSh0ZXh0LCAnc3VjY2VzcycsIGNhbGxiYWNrKTtcblx0fVxuXHR3YXJuaW5nKHRleHQsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kaXNwbGF5KHRleHQsICd3YXJuaW5nJywgY2FsbGJhY2spO1xuXHR9XG5cdGVycm9yKHRleHQsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kaXNwbGF5KHRleHQsICdlcnJvcicsIGNhbGxiYWNrKTtcblx0fVxuXHRjbGVhcigpIHtcblx0XHRpZiAoJCgnLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2UnKS5sZW5ndGggPj0gMTApIHtcblx0XHRcdCQoJyNNb2VOb3RpZmljYXRpb24nKVxuXHRcdFx0XHQuY2hpbGRyZW4oKVxuXHRcdFx0XHQuZmlyc3QoKVxuXHRcdFx0XHQuZmFkZU91dCgxNTAsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQkKHRoaXMpLnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHNldFRpbWVvdXQodGhpcy5jbGVhciwgMzAwKTtcblx0XHR9XG5cdH1cblx0ZW1wdHkoZikge1xuXHRcdCQoJy5Nb2VOb3RpZmljYXRpb24tbm90aWNlJykuZWFjaChmdW5jdGlvbiAoaSkge1xuXHRcdFx0aWYgKHR5cGVvZiBmID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGNvbnN0IGVsZSA9ICQodGhpcyk7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGYoZWxlKTtcblx0XHRcdFx0fSwgMjAwICogaSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKHRoaXMpXG5cdFx0XHRcdFx0LmRlbGF5KGkgKiAyMDApXG5cdFx0XHRcdFx0LmZhZGVPdXQoJ2Zhc3QnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQkKHRoaXMpLnJlbW92ZSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHNsaWRlTGVmdChlbGUsIHNwZWVkKSB7XG5cdFx0ZWxlLmNzcygncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcblx0XHRlbGUuYW5pbWF0ZShcblx0XHRcdHtcblx0XHRcdFx0bGVmdDogJy0yMDAlJyxcblx0XHRcdH0sXG5cdFx0XHRzcGVlZCB8fCAxNTAsXG5cdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdCQodGhpcykuZmFkZU91dCgnZmFzdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQkKHRoaXMpLnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBOb3RpZmljYXRpb24oKTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuY29uc3Qgc2xlZXAgPSAodGltZSkgPT4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRyZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lKTtcblx0fSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgc2xlZXA7XG4iLCAiLyoqXG4gKiDop6PmnpBVUkzlj4LmlbDliJfooahcbiAqIFBhcnNlIFVSTCBxdWVyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ319IHVybFxuICogQHBhcmFtIHVybFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnkodXJsKSB7XG5cdGNvbnN0IHJlZyA9IC8oKFtePyY9XSspKD86PShbXj8mPV0qKSkqKS9nO1xuXHRjb25zdCBwYXJhbXMgPSB7fTtcblx0bGV0IG1hdGNoO1xuXHR3aGlsZSAoKG1hdGNoID0gcmVnLmV4ZWModXJsKSkpIHtcblx0XHR0cnkge1xuXHRcdFx0cGFyYW1zW21hdGNoWzJdXSA9IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRwYXJhbXNbbWF0Y2hbMl1dID0gbWF0Y2hbM107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJhbXM7XG59XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCBDb25zdGFudHMgZnJvbSAnLi4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCBOb3RpZmljYXRpb24gZnJvbSAnLi9ub3RpZmljYXRpb24nO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5pbXBvcnQgTG9nIGZyb20gJy4uL3V0aWxzL2xvZyc7XG5pbXBvcnQgc2xlZXAgZnJvbSAnLi4vdXRpbHMvc2xlZXAnO1xuaW1wb3J0IHtwYXJzZVF1ZXJ5fSBmcm9tICcuLi91dGlscy9oZWxwZXJzJztcblxuY2xhc3MgVUkge1xuXHRxdWlja0VkaXRQYW5lbFZpc2libGUgPSBmYWxzZTtcblx0c2Nyb2xsVG9wID0gMDtcblxuXHQvKipcblx0ICog5Yib5bu65bGF5Lit5a+56K+d5qGGXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSDnqpflj6PmoIfpophcblx0ICogQHBhcmFtIHtzdHJpbmcgfCBKUXVlcnk8SFRNTEVsZW1lbnQ+fSBjb250ZW50IOWGheWuuVxuXHQgKiBAcGFyYW0geyp9IHdpZHRoIOWuveW6plxuXHQgKiBAcGFyYW0geyp9IGNhbGxiYWNrIOWbnuiwg+WHveaVsFxuXHQgKi9cblx0Y3JlYXRlRGlhbG9nQm94KHRpdGxlID0gJ1dpa2lwbHVzJywgY29udGVudCA9ICcnLCB3aWR0aCA9IDYwMCwgY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xuXHRcdGlmICgkKCcuV2lraXBsdXMtSW50ZXJCb3gnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gnKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0JCh0aGlzKS5yZW1vdmUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCBjbGllbnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdGNvbnN0IGNsaWVudEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRjb25zdCBkaWFsb2dXaWR0aCA9IE1hdGgubWluKGNsaWVudFdpZHRoLCB3aWR0aCk7XG5cdFx0Y29uc3QgZGlhbG9nQm94ID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveCcpXG5cdFx0XHQuY3NzKHtcblx0XHRcdFx0J21hcmdpbi1sZWZ0JzogY2xpZW50V2lkdGggLyAyIC0gZGlhbG9nV2lkdGggLyAyLFxuXHRcdFx0XHR0b3A6ICQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpICsgY2xpZW50SGVpZ2h0ICogMC4yLFxuXHRcdFx0XHRkaXNwbGF5OiAnbm9uZScsXG5cdFx0XHR9KVxuXHRcdFx0LmFwcGVuZCgkKCc8ZGl2PicpLmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveC1IZWFkZXInKS5odG1sKHRpdGxlKSlcblx0XHRcdC5hcHBlbmQoJCgnPGRpdj4nKS5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQ29udGVudCcpLmFwcGVuZChjb250ZW50KSlcblx0XHRcdC5hcHBlbmQoJCgnPHNwYW4+JykudGV4dCgnw5cnKS5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQ2xvc2UnKSk7XG5cdFx0JCgnYm9keScpLmFwcGVuZChkaWFsb2dCb3gpO1xuXHRcdCQoJy5XaWtpcGx1cy1JbnRlckJveCcpLndpZHRoKGRpYWxvZ1dpZHRoKTtcblx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gtQ2xvc2UnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHQkKHRoaXMpXG5cdFx0XHRcdC5wYXJlbnQoKVxuXHRcdFx0XHQuZmFkZU91dCgnZmFzdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gdW5kZWZpbmVkKSk7IC8vIOWPlua2iOmhtemdouWFs+mXreehruiupFxuXHRcdFx0XHRcdCQodGhpcykucmVtb3ZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdC8v5ouW5puzXG5cdFx0Y29uc3QgYmluZERyYWdnaW5nID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdGVsZW1lbnQubW91c2Vkb3duKChlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJhc2VYID0gZS5jbGllbnRYO1xuXHRcdFx0XHRjb25zdCBiYXNlWSA9IGUuY2xpZW50WTtcblx0XHRcdFx0Y29uc3QgYmFzZU9mZnNldFggPSBlbGVtZW50LnBhcmVudCgpLm9mZnNldCgpLmxlZnQ7XG5cdFx0XHRcdGNvbnN0IGJhc2VPZmZzZXRZID0gZWxlbWVudC5wYXJlbnQoKS5vZmZzZXQoKS50b3A7XG5cdFx0XHRcdCQoZG9jdW1lbnQpLm9uKCdtb3VzZW1vdmUnLCAoZSkgPT4ge1xuXHRcdFx0XHRcdGVsZW1lbnQucGFyZW50KCkuY3NzKHtcblx0XHRcdFx0XHRcdCdtYXJnaW4tbGVmdCc6IGJhc2VPZmZzZXRYICsgZS5jbGllbnRYIC0gYmFzZVgsXG5cdFx0XHRcdFx0XHR0b3A6IGJhc2VPZmZzZXRZICsgZS5jbGllbnRZIC0gYmFzZVksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkKGRvY3VtZW50KS5vbignbW91c2V1cCcsICgpID0+IHtcblx0XHRcdFx0XHRlbGVtZW50LnVuYmluZCgnbW91c2Vkb3duJyk7XG5cdFx0XHRcdFx0JChkb2N1bWVudCkub2ZmKCdtb3VzZW1vdmUnKTtcblx0XHRcdFx0XHQkKGRvY3VtZW50KS5vZmYoJ21vdXNldXAnKTtcblx0XHRcdFx0XHRiaW5kRHJhZ2dpbmcoZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRiaW5kRHJhZ2dpbmcoJCgnLldpa2lwbHVzLUludGVyQm94LUhlYWRlcicpKTtcblx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gnKS5mYWRlSW4oNTAwKTtcblx0XHRjYWxsYmFjaygpO1xuXHRcdHJldHVybiBkaWFsb2dCb3g7XG5cdH1cblxuXHQvKipcblx0ICog5Zyo5pCc57Si5qGG5bem5L6n44CM5pu05aSa44CN6I+c5Y2V5YaF5re75Yqg5oyJ6ZKuXG5cdCAqIEFkZCBhIGJ1dHRvbiBpbiBcIk1vcmVcIiBtZW51IChsZWZ0IG9mIHRoZSBzZWFyY2ggYmFyKVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCDmjInpkq7lkI0gQnV0dG9uIHRleHRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIOaMiemSrmlkIEJ1dHRvbiBpZFxuXHQgKiBAcmV0dXJuIHtKUXVlcnk8SFRNTEVsZW1lbnQ+fSBidXR0b25cblx0ICovXG5cdGFkZEZ1bmN0aW9uQnV0dG9uKHRleHQsIGlkKSB7XG5cdFx0bGV0IGJ1dHRvbjtcblx0XHRzd2l0Y2ggKENvbnN0YW50cy5za2luKSB7XG5cdFx0XHRjYXNlICdtaW5lcnZhJzpcblx0XHRcdFx0YnV0dG9uID0gJCgnPGxpPicpXG5cdFx0XHRcdFx0LmF0dHIoJ2lkJywgaWQpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd0b2dnbGUtbGlzdC1pdGVtJylcblx0XHRcdFx0XHQuYXBwZW5kKFxuXHRcdFx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKCdtdy11aS1pY29uIG13LXVpLWljb24tYmVmb3JlIHRvZ2dsZS1saXN0LWl0ZW1fX2FuY2hvcicpXG5cdFx0XHRcdFx0XHRcdC5hcHBlbmQoXG5cdFx0XHRcdFx0XHRcdFx0JCgnPHNwYW4+Jylcblx0XHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKTsnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKCd0b2dnbGUtbGlzdC1pdGVtX19sYWJlbCcpXG5cdFx0XHRcdFx0XHRcdFx0XHQudGV4dCh0ZXh0KVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ21vZXNraW4nOlxuXHRcdFx0XHRidXR0b24gPSAkKCc8bGk+Jylcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ1dpa2lwbHVzLU1vcmUtRnVuY3Rpb24tQnV0dG9uJylcblx0XHRcdFx0XHQuYXR0cignaWQnLCBpZClcblx0XHRcdFx0XHQuYXBwZW5kKCQoJzxhPicpLmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApOycpLnRleHQodGV4dCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnV0dG9uID0gJCgnPGxpPicpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCdtdy1saXN0LWl0ZW0nKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndmVjdG9yLXRhYi1ub2ljb24nKVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsIGlkKVxuXHRcdFx0XHRcdC5hcHBlbmQoJCgnPGE+JykuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCk7JykudGV4dCh0ZXh0KSk7XG5cdFx0fVxuXHRcdGlmIChDb25zdGFudHMuc2tpbiA9PT0gJ21pbmVydmEnICYmICQoJyNwLXRiJykubGVuZ3RoID4gMCkge1xuXHRcdFx0JCgnI3AtdGInKS5hcHBlbmQoYnV0dG9uKTtcblx0XHRcdHJldHVybiAkKGAjJHtpZH1gKTtcblx0XHR9IGVsc2UgaWYgKENvbnN0YW50cy5za2luID09PSAnbW9lc2tpbicpIHtcblx0XHRcdCQoJy5tb3JlLWFjdGlvbnMtbGlzdCcpLmZpcnN0KCkuYXBwZW5kKGJ1dHRvbik7XG5cdFx0XHRyZXR1cm4gJChgIyR7aWR9YCk7XG5cdFx0fSBlbHNlIGlmICgkKCcjcC1jYWN0aW9ucycpLmxlbmd0aCA+IDApIHtcblx0XHRcdCQoJyNwLWNhY3Rpb25zIHVsJykuYXBwZW5kKGJ1dHRvbik7XG5cdFx0XHRyZXR1cm4gJChgIyR7aWR9YCk7XG5cdFx0fVxuXHRcdExvZy5pbmZvKGkxOG4udHJhbnNsYXRlKCdjYW50X2FkZF9mdW5jYnRuJykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIOaPkuWFpeW/q+mAn+mHjeWumuWQkeaMiemSrlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IG9uQ2xpY2tcblx0ICovXG5cdGluc2VydFNpbXBsZVJlZGlyZWN0QnV0dG9uKG9uQ2xpY2sgPSAoKSA9PiB7fSkge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHRoaXMuYWRkRnVuY3Rpb25CdXR0b24oaTE4bi50cmFuc2xhdGUoJ3JlZGlyZWN0X2Zyb20nKSwgJ1dpa2lwbHVzLVNSLUludHJvJyk7XG5cdFx0aWYgKGJ1dHRvbikge1xuXHRcdFx0YnV0dG9uLm9uKCdjbGljaycsIG9uQ2xpY2spO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiDmj5LlhaXorr7nva7pnaLmnb/mjInpkq5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBvbkNsaWNrXG5cdCAqL1xuXHRpbnNlcnRTZXR0aW5nc1BhbmVsQnV0dG9uKG9uQ2xpY2sgPSAoKSA9PiB7fSkge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHRoaXMuYWRkRnVuY3Rpb25CdXR0b24oaTE4bi50cmFuc2xhdGUoJ3dpa2lwbHVzX3NldHRpbmdzJyksICdXaWtpcGx1cy1TZXR0aW5ncy1JbnRybycpO1xuXHRcdGlmIChidXR0b24pIHtcblx0XHRcdGJ1dHRvbi5vbignY2xpY2snLCBvbkNsaWNrKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog5o+S5YWl6aG26YOo5b+r6YCf57yW6L6R5oyJ6ZKuXG5cdCAqIEluc2VydCBRdWlja0VkaXQgYnV0dG9uIGJlc2lkZXMgcGFnZSBlZGl0IGJ1dHRvbi5cblx0ICpcblx0ICogQHBhcmFtIG9uQ2xpY2tcblx0ICovXG5cdGluc2VydFRvcFF1aWNrRWRpdEVudHJ5KG9uQ2xpY2spIHtcblx0XHRjb25zdCB0b3BCdG4gPSAkKCc8bGk+JykuYXR0cignaWQnLCAnV2lraXBsdXMtRWRpdC1Ub3BCdG4nKS5hdHRyKCdjbGFzcycsICdtdy1saXN0LWl0ZW0nKTtcblx0XHRjb25zdCB0b3BCdG5MaW5rID0gJCgnPGE+Jylcblx0XHRcdC5hdHRyKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKScpXG5cdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgncXVpY2tlZGl0X3RvcGJ0bicpfWApO1xuXHRcdHRvcEJ0bi5hcHBlbmQodG9wQnRuTGluayk7XG5cdFx0c3dpdGNoIChDb25zdGFudHMuc2tpbikge1xuXHRcdFx0Y2FzZSAnbWluZXJ2YSc6XG5cdFx0XHRcdHRvcEJ0bi5jc3MoeydhbGlnbi1pdGVtcyc6ICdjZW50ZXInLCBkaXNwbGF5OiAnZmxleCd9KTtcblx0XHRcdFx0dG9wQnRuLmZpbmQoJ3NwYW4nKS5hZGRDbGFzcygncGFnZS1hY3Rpb25zLW1lbnVfX2xpc3QtaXRlbScpO1xuXHRcdFx0XHR0b3BCdG5cblx0XHRcdFx0XHQuZmluZCgnYScpXG5cdFx0XHRcdFx0LmFkZENsYXNzKFxuXHRcdFx0XHRcdFx0J213LXVpLWljb24gbXctdWktaWNvbi1lbGVtZW50IG13LXVpLWljb24td2lraW1lZGlhLWVkaXQtYmFzZTIwIG13LXVpLWljb24td2l0aC1sYWJlbC1kZXNrdG9wJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuY3NzKCd2ZXJ0aWNhbC1hbGlnbicsICdtaWRkbGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ3ZlY3Rvci0yMDIyJzpcblx0XHRcdFx0dG9wQnRuLmFkZENsYXNzKCd2ZWN0b3ItdGFiLW5vaWNvbicpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAndmVjdG9yJzpcblx0XHRcdFx0dG9wQnRuLmFwcGVuZCgkKCc8c3Bhbj4nKS5hcHBlbmQodG9wQnRuTGluaykpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cdFx0JCh0b3BCdG4pLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdG9uQ2xpY2soe1xuXHRcdFx0XHRzZWN0aW9uTnVtYmVyOiAtMSxcblx0XHRcdFx0dGFyZ2V0UGFnZU5hbWU6IENvbnN0YW50cy5jdXJyZW50UGFnZU5hbWUsXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRpZiAoJCgnI2NhLWVkaXQnKS5sZW5ndGggPiAwICYmICQoJyNXaWtpcGx1cy1FZGl0LVRvcEJ0bicpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Q29uc3RhbnRzLnNraW4gPT09ICdtaW5lcnZhJyA/ICQoJyNjYS1lZGl0JykucGFyZW50KCkuYWZ0ZXIodG9wQnRuKSA6ICQoJyNjYS1lZGl0JykuYWZ0ZXIodG9wQnRuKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog5o+S5YWl5q616JC95b+r6YCf57yW6L6R5oyJ6ZKuXG5cdCAqIEluc2VydCBRdWlja0VkaXQgYnV0dG9ucyBmb3IgZWFjaCBzZWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gb25DbGlja1xuXHQgKi9cblx0aW5zZXJ0U2VjdGlvblF1aWNrRWRpdEVudHJpZXMob25DbGljayA9ICgpID0+IHt9KSB7XG5cdFx0Y29uc3Qgc2VjdGlvbkJ0biA9XG5cdFx0XHRDb25zdGFudHMuc2tpbiA9PT0gJ21pbmVydmEnXG5cdFx0XHRcdD8gJCgnPHNwYW4+JykuYXBwZW5kKFxuXHRcdFx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKFxuXHRcdFx0XHRcdFx0XHRcdCdXaWtpcGx1cy1FZGl0LVNlY3Rpb25CdG4gbXctdWktaWNvbiBtdy11aS1pY29uLWVsZW1lbnQgbXctdWktaWNvbi13aWtpbWVkaWEtZWRpdC1iYXNlMjAgZWRpdC1wYWdlIG13LXVpLWljb24tZmx1c2gtcmlnaHQnXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0LmNzcygnbWFyZ2luLWxlZnQnLCAnMC43NWVtJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ3RpdGxlJywgaTE4bi50cmFuc2xhdGUoJ3F1aWNrZWRpdF9zZWN0aW9uYnRuJykpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQ6ICQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHQuYXBwZW5kKCQoJzxzcGFuPicpLmFkZENsYXNzKCdtdy1lZGl0c2VjdGlvbi1kaXZpZGVyJykudGV4dCgnIHwgJykpXG5cdFx0XHRcdFx0XHQuYXBwZW5kKFxuXHRcdFx0XHRcdFx0XHQkKCc8YT4nKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtRWRpdC1TZWN0aW9uQnRuJylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCknKVxuXHRcdFx0XHRcdFx0XHRcdC50ZXh0KGkxOG4udHJhbnNsYXRlKCdxdWlja2VkaXRfc2VjdGlvbmJ0bicpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHQkKCcubXctZWRpdHNlY3Rpb24nKS5lYWNoKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBlZGl0VVJMID0gJCh0aGlzKS5maW5kKFwiYVtocmVmKj0nYWN0aW9uPWVkaXQnXVwiKS5maXJzdCgpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbk51bWJlciA9IGVkaXRVUkxcblx0XHRcdFx0XHQubWF0Y2goLyZbdmVdKnNlY3Rpb25cXD0oW14mXSspLylbMV0gLy8gYHZlYCBmb3IgdmlzdWFsIGVkaXRvclxuXHRcdFx0XHRcdC5yZXBsYWNlKC9ULS9naSwgJycpOyAvLyBlbWJlZGRlZCBwYWdlcyB1c2UgVC1zZXJpZXMgc2VjdGlvbiBudW1iZXJcblx0XHRcdFx0Y29uc3Qgc2VjdGlvblRhcmdldE5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoZWRpdFVSTC5tYXRjaCgvdGl0bGU9KC4rPykmLylbMV0pO1xuXHRcdFx0XHRjb25zdCBjbG9uZU5vZGUgPSAkKHRoaXMpLnByZXYoKS5jbG9uZSgpO1xuXHRcdFx0XHRjbG9uZU5vZGUuZmluZCgnLm13LWhlYWRsaW5lLW51bWJlcicpLnJlbW92ZSgpO1xuXHRcdFx0XHRjb25zdCBzZWN0aW9uTmFtZSA9IGNsb25lTm9kZS50ZXh0KCkudHJpbSgpO1xuXHRcdFx0XHRjb25zdCBfc2VjdGlvbkJ0biA9IHNlY3Rpb25CdG4uY2xvbmUoKTtcblx0XHRcdFx0X3NlY3Rpb25CdG4uZmluZCgnLldpa2lwbHVzLUVkaXQtU2VjdGlvbkJ0bicpLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRvbkNsaWNrKHtcblx0XHRcdFx0XHRcdHNlY3Rpb25OdW1iZXIsXG5cdFx0XHRcdFx0XHRzZWN0aW9uTmFtZSxcblx0XHRcdFx0XHRcdHRhcmdldFBhZ2VOYW1lOiBzZWN0aW9uVGFyZ2V0TmFtZSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdENvbnN0YW50cy5za2luID09PSAnbWluZXJ2YSdcblx0XHRcdFx0XHQ/ICQodGhpcykuYXBwZW5kKF9zZWN0aW9uQnRuKVxuXHRcdFx0XHRcdDogJCh0aGlzKS5maW5kKCcubXctZWRpdHNlY3Rpb24tYnJhY2tldCcpLmxhc3QoKS5iZWZvcmUoX3NlY3Rpb25CdG4pO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdExvZy5lcnJvcignZmFpbF90b19pbml0X3F1aWNrZWRpdCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIOaPkuWFpeS7u+aEj+mTvuaOpee8lui+keWFpeWPo1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IG9uQ2xpY2tcblx0ICovXG5cdGluc2VydExpbmtFZGl0RW50cmllcyhvbkNsaWNrID0gKCkgPT4ge30pIHtcblx0XHQkKCcjbXctY29udGVudC10ZXh0IGEuZXh0ZXJuYWwnKS5lYWNoKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRjb25zdCB1cmwgPSAkKHRoaXMpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhcnNlUXVlcnkodXJsKTtcblx0XHRcdGlmIChwYXJhbXMuYWN0aW9uID09PSAnZWRpdCcgJiYgcGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLnNlY3Rpb24gIT09ICduZXcnKSB7XG5cdFx0XHRcdCQodGhpcykuYWZ0ZXIoXG5cdFx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHRcdC5hdHRyKHtcblx0XHRcdFx0XHRcdFx0aHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKScsXG5cdFx0XHRcdFx0XHRcdGNsYXNzOiAnV2lraXBsdXMtRWRpdC1FdmVyeVdoZXJlQnRuJyxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQudGV4dChgKCR7aTE4bi50cmFuc2xhdGUoJ3F1aWNrZWRpdF9zZWN0aW9uYnRuJyl9KWApXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRvbkNsaWNrKHtcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRQYWdlTmFtZTogcGFyYW1zLnRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdHNlY3Rpb25OdW1iZXI6IHBhcmFtcy5zZWN0aW9uID8/IC0xLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRzaG93UXVpY2tFZGl0UGFuZWwoe1xuXHRcdHRpdGxlID0gJycsXG5cdFx0Y29udGVudCA9ICcnLFxuXHRcdHN1bW1hcnkgPSAnJyxcblx0XHRvbkJhY2sgPSAoKSA9PiB7fSxcblx0XHRvblBhcnNlID0gKCkgPT4ge30sXG5cdFx0b25FZGl0ID0gKCkgPT4ge30sXG5cdFx0ZXNjRXhpdCA9IGZhbHNlLFxuXHR9KSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0dGhpcy5zY3JvbGxUb3AgPSAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKTtcblx0XHRpZiAodGhpcy5xdWlja0VkaXRQYW5lbFZpc2libGUpIHtcblx0XHRcdHRoaXMuaGlkZVF1aWNrRWRpdFBhbmVsKCk7XG5cdFx0fVxuXHRcdHRoaXMucXVpY2tFZGl0UGFuZWxWaXNpYmxlID0gdHJ1ZTtcblx0XHQvLyDpmLLmraLmiYvmu5HlhbPpl63pobXpnaJcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbG9zZScsXG5cdFx0XHQod2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gYCR7aTE4bi50cmFuc2xhdGUoJ29uY2xvc2VfY29uZmlybScpfWA7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0Y29uc3QgaXNOZXdQYWdlID0gJCgnLm5vYXJ0aWNsZXRleHQnKS5sZW5ndGggPiAwO1xuXHRcdC8vIERPTSDlrprkuYnlvIDlp4tcblx0XHRjb25zdCBiYWNrQnRuID0gJCgnPHNwYW4+Jylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1RdWlja2VkaXQtQmFjaycpXG5cdFx0XHQuYWRkQ2xhc3MoJ1dpa2lwbHVzLUJ0bicpXG5cdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnYmFjaycpfWApOyAvLyDov5Tlm57mjInpkq5cblx0XHRjb25zdCBqdW1wQnRuID0gJCgnPHNwYW4+Jylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1RdWlja2VkaXQtSnVtcCcpXG5cdFx0XHQuYWRkQ2xhc3MoJ1dpa2lwbHVzLUJ0bicpXG5cdFx0XHQuYXBwZW5kKFxuXHRcdFx0XHQkKCc8YT4nKVxuXHRcdFx0XHRcdC5hdHRyKCdocmVmJywgJyNXaWtpcGx1cy1RdWlja2VkaXQnKVxuXHRcdFx0XHRcdC50ZXh0KGAke2kxOG4udHJhbnNsYXRlKCdnb3RvX2VkaXRib3gnKX1gKVxuXHRcdFx0KTsgLy8g5Yiw57yW6L6R5qGGXG5cdFx0Y29uc3QgaW5wdXRCb3ggPSAkKCc8dGV4dGFyZWE+JykuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0Jyk7IC8vIOS4u+e8lui+keahhlxuXHRcdGNvbnN0IHByZXZpZXdCb3ggPSAkKCc8ZGl2PicpLmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpOyAvLyDpooTop4jovpPlh7pcblx0XHRjb25zdCBzdW1tYXJ5Qm94ID0gJCgnPGlucHV0PicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0LVN1bW1hcnktSW5wdXQnKVxuXHRcdFx0LmF0dHIoJ3BsYWNlaG9sZGVyJywgYCR7aTE4bi50cmFuc2xhdGUoJ3N1bW1hcnlfcGxhY2Vob2xkJyl9YCk7IC8vIOe8lui+keaRmOimgei+k+WFpVxuXHRcdGNvbnN0IGVkaXRTdWJtaXRCdG4gPSAkKCc8YnV0dG9uPicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0LVN1Ym1pdCcpXG5cdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZShpc05ld1BhZ2UgPyAncHVibGlzaF9wYWdlJyA6ICdwdWJsaXNoX2NoYW5nZScpfShDdHJsK1MpYCk7IC8vIOaPkOS6pOaMiemSrlxuXHRcdGNvbnN0IHByZXZpZXdTdWJtaXRCdG4gPSAkKCc8YnV0dG9uPicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctU3VibWl0Jylcblx0XHRcdC50ZXh0KGAke2kxOG4udHJhbnNsYXRlKCdwcmV2aWV3Jyl9YCk7IC8vIOmihOiniOaMiemSrlxuXHRcdGNvbnN0IGlzTWlub3JFZGl0ID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFwcGVuZCgkKCc8aW5wdXQ+JykuYXR0cih7dHlwZTogJ2NoZWNrYm94JywgaWQ6ICdXaWtpcGx1cy1RdWlja2VkaXQtTWlub3JFZGl0J30pKVxuXHRcdFx0LmFwcGVuZChcblx0XHRcdFx0JCgnPGxhYmVsPicpXG5cdFx0XHRcdFx0LmF0dHIoJ2ZvcicsICdXaWtpcGx1cy1RdWlja2VkaXQtTWlub3JFZGl0Jylcblx0XHRcdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnbWFya19taW5vcmVkaXQnKX0oQ3RybCtTaGlmdCtTKWApXG5cdFx0XHQpXG5cdFx0XHQuY3NzKHttYXJnaW46ICc1cHggNXB4IDVweCAtM3B4JywgZGlzcGxheTogJ2lubGluZSd9KTtcblx0XHQvLyBET03lrprkuYnnu5PmnZ9cblx0XHRjb25zdCBlZGl0Qm9keSA9ICQoJzxkaXY+JykuYXBwZW5kKFxuXHRcdFx0YmFja0J0bixcblx0XHRcdGp1bXBCdG4sXG5cdFx0XHRwcmV2aWV3Qm94LFxuXHRcdFx0aW5wdXRCb3gsXG5cdFx0XHRzdW1tYXJ5Qm94LFxuXHRcdFx0JCgnPGJyPicpLFxuXHRcdFx0aXNNaW5vckVkaXQsXG5cdFx0XHRlZGl0U3VibWl0QnRuLFxuXHRcdFx0cHJldmlld1N1Ym1pdEJ0blxuXHRcdCk7XG5cdFx0dGhpcy5jcmVhdGVEaWFsb2dCb3godGl0bGUsIGVkaXRCb2R5LCAxMDAwLCAoKSA9PiB7XG5cdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0JykudmFsKGNvbnRlbnQpO1xuXHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1TdW1tYXJ5LUlucHV0JykudmFsKHN1bW1hcnkpO1xuXHRcdH0pO1xuXHRcdC8vIEJhY2tcblx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LUJhY2snKS5vbignY2xpY2snLCBvbkJhY2spO1xuXHRcdC8vIFByZXZpZXdcblx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctU3VibWl0Jykub24oJ2NsaWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc3QgcHJlbG9hZEJhbm5lciA9ICQoJzxkaXY+Jylcblx0XHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1CYW5uZXInKVxuXHRcdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnbG9hZGluZ19wcmV2aWV3Jyl9YCk7XG5cdFx0XHRjb25zdCB3aWtpVGV4dCA9ICQoJyNXaWtpcGx1cy1RdWlja2VkaXQnKS52YWwoKTtcblx0XHRcdCQodGhpcykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcblx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1PdXRwdXQnKS5mYWRlT3V0KDEwMCwgKCkgPT4ge1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuaHRtbCgnJykuYXBwZW5kKHByZWxvYWRCYW5uZXIpO1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuZmFkZUluKDEwMCk7XG5cdFx0XHR9KTtcblx0XHRcdCQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6IHNlbGYuc2Nyb2xsVG9wfSwgMjAwKTsgLy/ov5Tlm57pobbpg6hcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9uUGFyc2Uod2lraVRleHQpO1xuXHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmZhZGVPdXQoJzEwMCcsICgpID0+IHtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmh0bWwoYDxocj48ZGl2IGNsYXNzPVwibXctYm9keS1jb250ZW50XCI+JHtyZXN1bHR9PC9kaXY+PGhyPmApO1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuZmFkZUluKCcxMDAnKTtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LVN1Ym1pdCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0Ly8gRWRpdFxuXHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtU3VibWl0Jykub24oJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZXIgPSBEYXRlLm5vdygpO1xuXHRcdFx0Y29uc3QgZWRpdEJhbm5lciA9ICQoJzxkaXY+Jylcblx0XHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1CYW5uZXInKVxuXHRcdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnc3VibWl0dGluZ19lZGl0Jyl9YCk7XG5cdFx0XHRjb25zdCBwYXlsb2FkID0ge1xuXHRcdFx0XHRzdW1tYXJ5OiAkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVN1bW1hcnktSW5wdXQnKS52YWwoKSxcblx0XHRcdFx0Y29udGVudDogJCgnI1dpa2lwbHVzLVF1aWNrZWRpdCcpLnZhbCgpLFxuXHRcdFx0XHRpc01pbm9yRWRpdDogJCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1NaW5vckVkaXQnKS5pcygnOmNoZWNrZWQnKSxcblx0XHRcdH07XG5cdFx0XHQvLyDlh4blpIfnvJbovpEg56aB55So5oyJ6ZKuIOaJp+ihjOWKqOeUu1xuXHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1TdWJtaXQsI1dpa2lwbHVzLVF1aWNrZWRpdCwjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctU3VibWl0JykuYXR0cihcblx0XHRcdFx0J2Rpc2FibGVkJyxcblx0XHRcdFx0J2Rpc2FibGVkJ1xuXHRcdFx0KTtcblx0XHRcdCQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6IHNlbGYuc2Nyb2xsVG9wfSwgMjAwKTtcblx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1PdXRwdXQnKS5mYWRlT3V0KDEwMCwgKCkgPT4ge1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuaHRtbCgnJykuYXBwZW5kKGVkaXRCYW5uZXIpO1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuZmFkZUluKDEwMCk7XG5cdFx0XHR9KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IG9uRWRpdChwYXlsb2FkKTtcblx0XHRcdFx0Y29uc3QgdXNlVGltZSA9IERhdGUubm93KCkgLSB0aW1lcjtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpXG5cdFx0XHRcdFx0LmZpbmQoJy5XaWtpcGx1cy1CYW5uZXInKVxuXHRcdFx0XHRcdC5jc3MoJ2JhY2tncm91bmQnLCAncmdiYSg2LCAyMzksIDkyLCAwLjQ0KScpO1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0Jylcblx0XHRcdFx0XHQuZmluZCgnLldpa2lwbHVzLUJhbm5lcicpXG5cdFx0XHRcdFx0LnRleHQoYCR7aTE4bi50cmFuc2xhdGUoJ2VkaXRfc3VjY2VzcycsIFt1c2VUaW1lLnRvU3RyaW5nKCldKX1gKTtcblx0XHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgKHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IHVuZGVmaW5lZCkpOyAvL+WPlua2iOmhtemdouWFs+mXreehruiupFxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRsb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdFx0fSwgNTAwKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGVycm9yKTtcblx0XHRcdFx0JCgnLldpa2lwbHVzLUJhbm5lcicpLmNzcygnYmFja2dyb3VuZCcsICdyZ2JhKDIxOCwgMTQyLCAxNjcsIDAuNjUpJyk7XG5cdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS5odG1sKGVycm9yLm1lc3NhZ2UpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1TdWJtaXQsI1dpa2lwbHVzLVF1aWNrZWRpdCwjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctU3VibWl0JykucHJvcChcblx0XHRcdFx0XHQnZGlzYWJsZWQnLFxuXHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9DdHJsK1Pmj5DkuqQgQ3RybCtTaGlmdCtT5bCP57yW6L6RXG5cdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdCwjV2lraXBsdXMtUXVpY2tlZGl0LVN1bW1hcnktSW5wdXQsI1dpa2lwbHVzLVF1aWNrZWRpdC1NaW5vckVkaXQnKS5vbigna2V5ZG93bicsIChlKSA9PiB7XG5cdFx0XHRpZiAoZS5jdHJsS2V5ICYmIGUud2hpY2ggPT09IDgzKSB7XG5cdFx0XHRcdGlmIChlLnNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1NaW5vckVkaXQnKS50cmlnZ2VyKCdjbGljaycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtU3VibWl0JykudHJpZ2dlcignY2xpY2snKTtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vRXNj6YCA5Ye6XG5cdFx0aWYgKGVzY0V4aXQpIHtcblx0XHRcdCQoZG9jdW1lbnQpLm9uKCdrZXlkb3duJywgKGUpID0+IHtcblx0XHRcdFx0aWYgKGUud2hpY2ggPT09IDI3KSB7XG5cdFx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1CYWNrJykudHJpZ2dlcignY2xpY2snKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aGlkZVF1aWNrRWRpdFBhbmVsKCkge1xuXHRcdHRoaXMucXVpY2tFZGl0UGFuZWxWaXNpYmxlID0gZmFsc2U7XG5cdFx0JCgnLldpa2lwbHVzLUludGVyQm94JykuZmFkZU91dCgnZmFzdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsICh3aW5kb3cub25iZWZvcmV1bmxvYWQgPSB1bmRlZmluZWQpKTsgLy/lj5bmtojpobXpnaLlhbPpl63noa7orqRcblx0XHRcdCQodGhpcykucmVtb3ZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICog5pi+56S65b+r6YCf6YeN5a6a5ZCR5by556qXXG5cdCAqXG5cdCAqIEBwYXJhbSByb290MFxuXHQgKiBAcGFyYW0gcm9vdDAub25FZGl0XG5cdCAqIEBwYXJhbSByb290MC5vblN1Y2Nlc3Ncblx0ICovXG5cdHNob3dTaW1wbGVSZWRpcmVjdFBhbmVsKHtvbkVkaXQgPSAoKSA9PiB7fSwgb25TdWNjZXNzID0gKCkgPT4ge319ID0ge30pIHtcblx0XHRjb25zdCBpbnB1dCA9ICQoJzxpbnB1dD4nKS5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtSW5wdXQnKTtcblx0XHRjb25zdCBhcHBseUJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TUi1BcHBseScpXG5cdFx0XHQudGV4dChpMThuLnRyYW5zbGF0ZSgnc3VibWl0JykpO1xuXHRcdGNvbnN0IGNhbmNlbEJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TUi1DYW5jZWwnKVxuXHRcdFx0LnRleHQoaTE4bi50cmFuc2xhdGUoJ2NhbmNlbCcpKTtcblx0XHRjb25zdCBjb250aW51ZUJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TUi1Db250aW51ZScpXG5cdFx0XHQudGV4dChpMThuLnRyYW5zbGF0ZSgnY29udGludWUnKSk7XG5cdFx0Y29uc3QgY29udGVudCA9ICQoJzxkaXY+JykuYXBwZW5kKGlucHV0KS5hcHBlbmQoJCgnPGhyPicpKS5hcHBlbmQoYXBwbHlCdG4pLmFwcGVuZChjYW5jZWxCdG4pOyAvL+aLvOaOpVxuXHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuY3JlYXRlRGlhbG9nQm94KGkxOG4udHJhbnNsYXRlKCdyZWRpcmVjdF9kZXNjJyksIGNvbnRlbnQsIDYwMCk7XG5cdFx0YXBwbHlCdG4ub24oJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGl0bGUgPSAkKCcuV2lraXBsdXMtSW50ZXJCb3gtSW5wdXQnKS52YWwoKTtcblx0XHRcdCQoJy5XaWtpcGx1cy1JbnRlckJveC1Db250ZW50JykuaHRtbChcblx0XHRcdFx0YDxkaXYgY2xhc3M9XCJXaWtpcGx1cy1CYW5uZXJcIj4ke2kxOG4udHJhbnNsYXRlKCdzdWJtaXR0aW5nX2VkaXQnKX08L2Rpdj5gXG5cdFx0XHQpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgb25FZGl0KHtcblx0XHRcdFx0XHR0aXRsZSxcblx0XHRcdFx0XHRmb3JjZU92ZXJ3cml0ZTogZmFsc2UsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkKCcuV2lraXBsdXMtQmFubmVyJykudGV4dChpMThuLnRyYW5zbGF0ZSgncmVkaXJlY3Rfc2F2ZWQnKSk7XG5cdFx0XHRcdHRoaXMuaGlkZVNpbXBsZVJlZGlyZWN0UGFuZWwoZGlhbG9nKTtcblx0XHRcdFx0b25TdWNjZXNzKHt0aXRsZX0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0JCgnLldpa2lwbHVzLUJhbm5lcicpLmNzcygnYmFja2dyb3VuZCcsICdyZ2JhKDIxOCwgMTQyLCAxNjcsIDAuNjUpJyk7XG5cdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS50ZXh0KGVycm9yLm1lc3NhZ2UpO1xuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gJ2FydGljbGVleGlzdHMnKSB7XG5cdFx0XHRcdFx0JCgnLldpa2lwbHVzLUludGVyQm94LUNvbnRlbnQnKS5hcHBlbmQoJCgnPGhyPicpKS5hcHBlbmQoY29udGludWVCdG4pLmFwcGVuZChjYW5jZWxCdG4pO1xuXHRcdFx0XHRcdGNhbmNlbEJ0bi5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmhpZGVTaW1wbGVSZWRpcmVjdFBhbmVsKGRpYWxvZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Y29udGludWVCdG4ub24oJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0JCgnLldpa2lwbHVzLUludGVyQm94LUNvbnRlbnQnKS5odG1sKFxuXHRcdFx0XHRcdFx0XHRgPGRpdiBjbGFzcz1cIldpa2lwbHVzLUJhbm5lclwiPiR7aTE4bi50cmFuc2xhdGUoJ3N1Ym1pdHRpbmdfZWRpdCcpfTwvZGl2PmBcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBvbkVkaXQoe1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdGZvcmNlT3ZlcndyaXRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0JCgnLldpa2lwbHVzLUJhbm5lcicpLnRleHQoaTE4bi50cmFuc2xhdGUoJ3JlZGlyZWN0X3NhdmVkJykpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVTaW1wbGVSZWRpcmVjdFBhbmVsKGRpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdG9uU3VjY2Vzcyh7dGl0bGV9KTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS5jc3MoJ2JhY2tncm91bmQnLCAncmdiYSgyMTgsIDE0MiwgMTY3LCAwLjY1KScpO1xuXHRcdFx0XHRcdFx0XHQkKCcuV2lraXBsdXMtQmFubmVyJykudGV4dChlcnJvci5tZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNhbmNlbEJ0bi5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVTaW1wbGVSZWRpcmVjdFBhbmVsKGRpYWxvZyk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICog6ZqQ6JeP5b+r6YCf6YeN5a6a5ZCR5by556qXXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gZGlhbG9nXG5cdCAqL1xuXHRoaWRlU2ltcGxlUmVkaXJlY3RQYW5lbChkaWFsb2cgPSAkKCdib2R5JykpIHtcblx0XHRkaWFsb2cuZmluZCgnLldpa2lwbHVzLUludGVyQm94LUNsb3NlJykudHJpZ2dlcignY2xpY2snKTtcblx0fVxuXG5cdHNob3dTZXR0aW5nc1BhbmVsKHtvblN1Ym1pdCA9ICgpID0+IHt9fSA9IHt9KSB7XG5cdFx0Y29uc3QgaW5wdXQgPSAkKCc8dGV4dGFyZWE+JykuYXR0cignaWQnLCAnV2lraXBsdXMtU2V0dGluZy1JbnB1dCcpLmF0dHIoJ3Jvd3MnLCAnMTAnKTtcblx0XHRjb25zdCBhcHBseUJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TZXR0aW5nLUFwcGx5Jylcblx0XHRcdC50ZXh0KGkxOG4udHJhbnNsYXRlKCdzdWJtaXQnKSk7XG5cdFx0Y29uc3QgY2FuY2VsQnRuID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveC1CdG4nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVNldHRpbmctQ2FuY2VsJylcblx0XHRcdC50ZXh0KGkxOG4udHJhbnNsYXRlKCdjYW5jZWwnKSk7XG5cdFx0Y29uc3QgY29udGVudCA9ICQoJzxkaXY+JykuYXBwZW5kKGlucHV0KS5hcHBlbmQoJCgnPGhyPicpKS5hcHBlbmQoYXBwbHlCdG4pLmFwcGVuZChjYW5jZWxCdG4pOyAvL+aLvOaOpVxuXG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5jcmVhdGVEaWFsb2dCb3goaTE4bi50cmFuc2xhdGUoJ3dpa2lwbHVzX3NldHRpbmdzX2Rlc2MnKSwgY29udGVudCwgNjAwLCAoKSA9PiB7XG5cdFx0XHRpZiAobG9jYWxTdG9yYWdlLldpa2lwbHVzX1NldHRpbmdzKSB7XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1TZXR0aW5nLUlucHV0JykudmFsKGxvY2FsU3RvcmFnZS5XaWtpcGx1c19TZXR0aW5ncyk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5XaWtpcGx1c19TZXR0aW5ncyk7XG5cdFx0XHRcdFx0JCgnI1dpa2lwbHVzLVNldHRpbmctSW5wdXQnKS52YWwoSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDIpKTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlXG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1TZXR0aW5nLUlucHV0JykuYXR0cigncGxhY2Vob2xkZXInLCBpMThuLnRyYW5zbGF0ZSgnd2lraXBsdXNfc2V0dGluZ3NfcGxhY2Vob2xkZXInKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0YXBwbHlCdG4ub24oJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2F2ZWRCYW5uZXIgPSAkKCc8ZGl2PicpLmFkZENsYXNzKCdXaWtpcGx1cy1CYW5uZXInKS50ZXh0KGkxOG4udHJhbnNsYXRlKCd3aWtpcGx1c19zZXR0aW5nc19zYXZlZCcpKTtcblx0XHRcdGNvbnN0IHNldHRpbmdzID0gJCgnI1dpa2lwbHVzLVNldHRpbmctSW5wdXQnKS52YWwoKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9uU3VibWl0KHtzZXR0aW5nc30pO1xuXHRcdFx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gtQ29udGVudCcpLmh0bWwoJycpLmFwcGVuZChzYXZlZEJhbm5lcik7XG5cdFx0XHRcdGF3YWl0IHNsZWVwKDE1MDApO1xuXHRcdFx0XHR0aGlzLmhpZGVTZXR0aW5nc1BhbmVsKGRpYWxvZyk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0Tm90aWZpY2F0aW9uLmVycm9yKGkxOG4udHJhbnNsYXRlKCd3aWtpcGx1c19zZXR0aW5nc19ncmFtbWFyX2Vycm9yJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNhbmNlbEJ0bi5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVTZXR0aW5nc1BhbmVsKGRpYWxvZyk7XG5cdFx0fSk7XG5cdH1cblxuXHRoaWRlU2V0dGluZ3NQYW5lbChkaWFsb2cgPSAkKCdib2R5JykpIHtcblx0XHRkaWFsb2cuZmluZCgnLldpa2lwbHVzLUludGVyQm94LUNsb3NlJykudHJpZ2dlcignY2xpY2snKTtcblx0fVxuXG5cdGJpbmRQcmVsb2FkRXZlbnRzKG9uUHJlbG9hZCkge1xuXHRcdCQoJyN0b2MnKVxuXHRcdFx0LmNoaWxkcmVuKCd1bCcpXG5cdFx0XHQuZmluZCgnYScpXG5cdFx0XHQuZWFjaChmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHQkKHRoaXMpLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0JCh0aGlzKS5vZmYoJ21vdXNlb3ZlcicpO1xuXHRcdFx0XHRcdG9uUHJlbG9hZCh7XG5cdFx0XHRcdFx0XHRzZWN0aW9uTnVtYmVyOiBpICsgMSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgVUkoKTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuY2xhc3MgU2V0dGluZ3Mge1xuXHRnZXRTZXR0aW5nKGtleSwgb2JqZWN0ID0ge30pIHtcblx0XHRjb25zdCB3ID0gb2JqZWN0O1xuXHRcdGxldCBzZXR0aW5ncztcblx0XHR0cnkge1xuXHRcdFx0c2V0dGluZ3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVsnV2lraXBsdXNfU2V0dGluZ3MnXSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjdXN0b21TZXR0aW5nRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oYHJldHVybiAke3NldHRpbmdzW2tleV19YCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1c3RvbVNldHRpbmdGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGlmIChjdXN0b21TZXR0aW5nRnVuY3Rpb24oKSh3KSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY3VzdG9tU2V0dGluZ0Z1bmN0aW9uKCkodykgfHwgc2V0dGluZ3Nba2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdHJldHVybiBzZXR0aW5nc1trZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gc2V0dGluZ3Nba2V5XTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCByZXN1bHQgPSBzZXR0aW5nc1trZXldO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoYFxcJHske2tleX19YCwgb2JqZWN0W2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTZXR0aW5ncygpO1xuIiwgIi8qKlxuICogV2lraXBsdXNcbiAqIEVyaWRhbnVzIFNvcmEgPHNvcmFAc291bmQubW9lPlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IFBhZ2UgZnJvbSAnLi9jb3JlL3BhZ2UnO1xuaW1wb3J0IFVJIGZyb20gJy4vY29yZS91aSc7XG5pbXBvcnQgTm90aWZpY2F0aW9uIGZyb20gJy4vY29yZS9ub3RpZmljYXRpb24nO1xuaW1wb3J0IFdpa2kgZnJvbSAnLi9zZXJ2aWNlcy93aWtpJztcbmltcG9ydCBTZXR0aW5ncyBmcm9tICcuL3V0aWxzL3NldHRpbmdzJztcbmltcG9ydCBMb2cgZnJvbSAnLi91dGlscy9sb2cnO1xuaW1wb3J0IENvbnN0YW50cyBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgaTE4biBmcm9tICcuL3V0aWxzL2kxOG4nO1xuXG4kKGFzeW5jICgpID0+IHtcblx0Y29uc3QgUGFnZXMgPSB7fTtcblx0Y29uc3QgaXNDdXJyZW50UGFnZUVtcHR5ID0gJCgnLm5vYXJ0aWNsZXRleHQnKS5sZW5ndGggPiAwICYmIENvbnN0YW50cy5hcnRpY2xlSWQgPT09IDA7XG5cblx0LyoqXG5cdCAqIEdldCBwYWdlIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHBhcmFtc1xuXHQgKiBAcGFyYW0ge251bWJlcn0gcGFyYW1zLnJldmlzaW9uSWQg6aG16Z2i5L+u6K6i54mI5pys5Y+3XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMudGl0bGUg6aG16Z2i5qCH6aKYXG5cdCAqL1xuXHRjb25zdCBnZXRQYWdlID0gYXN5bmMgKHtyZXZpc2lvbklkLCB0aXRsZX0pID0+IHtcblx0XHRpZiAoUGFnZXNbcmV2aXNpb25JZF0pIHtcblx0XHRcdHJldHVybiBQYWdlc1tyZXZpc2lvbklkXTtcblx0XHR9XG5cdFx0Y29uc3QgbmV3UGFnZSA9IG5ldyBQYWdlKHtcblx0XHRcdHJldmlzaW9uSWQsXG5cdFx0XHR0aXRsZSxcblx0XHR9KTtcblx0XHRhd2FpdCBuZXdQYWdlLmluaXQoKTtcblx0XHRQYWdlc1tyZXZpc2lvbklkXSA9IG5ld1BhZ2U7XG5cdFx0cmV0dXJuIFBhZ2VzW3JldmlzaW9uSWRdO1xuXHR9O1xuXG5cdExvZy5pbmZvKGBXaWtpcGx1cyBub3cgbG9hZGluZy4gVmVyc2lvbjogJHtDb25zdGFudHMudmVyc2lvbn1gKTtcblxuXHRpZiAoIXdpbmRvdy5tdykge1xuXHRcdGNvbnNvbGUubG9nKCdNZWRpYXdpa2kgSmF2YVNjcmlwdCBub3QgbG9hZGVkIG9yIG5vdCBhIE1lZGlhd2lraSB3ZWJzaXRlLicpO1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoIUNvbnN0YW50cy51c2VyR3JvdXBzLmluY2x1ZGVzKCdhdXRvY29uZmlybWVkJykgJiYgIUNvbnN0YW50cy51c2VyR3JvdXBzLmluY2x1ZGVzKCdjb25maXJtZWQnKSkge1xuXHRcdE5vdGlmaWNhdGlvbi5lcnJvcihpMThuLnRyYW5zbGF0ZSgnbm90X2F1dG9jb25maXJtZWRfdXNlcicpKTtcblx0XHRMb2cuaW5mbyhpMThuLnRyYW5zbGF0ZSgnbm90X2F1dG9jb25maXJtZWRfdXNlcicpKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIUNvbnN0YW50cy5pc0FydGljbGUgfHwgQ29uc3RhbnRzLmFjdGlvbiAhPT0gJ3ZpZXcnKSB7XG5cdFx0TG9nLmluZm8oJ05vdCBhbiBlZGl0YWJsZSBwYWdlLiBTdG9wIGluaXRpYWxpemF0aW9uLicpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEluaXRpYWxpemUgY3VycmVudCBwYWdlIOm7mOiupOWIneWni+WMluW9k+WJjemhtemdolxuXHR3aW5kb3cuX1dpa2lwbHVzUGFnZXMgPSBQYWdlcztcblx0Y29uc3QgY3VycmVudFBhZ2VOYW1lID0gQ29uc3RhbnRzLmN1cnJlbnRQYWdlTmFtZTtcblx0Y29uc3QgcmV2aXNpb25JZCA9IENvbnN0YW50cy5yZXZpc2lvbklkO1xuXHRjb25zdCBjdXJyZW50UGFnZSA9IGF3YWl0IGdldFBhZ2Uoe1xuXHRcdHJldmlzaW9uSWQsXG5cdFx0dGl0bGU6IGN1cnJlbnRQYWdlTmFtZSxcblx0fSk7XG5cblx0Y29uc3QgaGFuZGxlUXVpY2tFZGl0QnV0dG9uQ2xpY2tlZCA9IGFzeW5jICh7c2VjdGlvbk51bWJlciwgc2VjdGlvbk5hbWUsIHRhcmdldFBhZ2VOYW1lfSA9IHt9KSA9PiB7XG5cdFx0Y29uc3QgaXNPdGhlclBhZ2UgPSB0YXJnZXRQYWdlTmFtZSAhPT0gY3VycmVudFBhZ2VOYW1lO1xuXHRcdGlmIChpc090aGVyUGFnZSAmJiBDb25zdGFudHMubGF0ZXN0UmV2aXNpb25JZCAhPT0gQ29uc3RhbnRzLnJldmlzaW9uSWQpIHtcblx0XHRcdC8vIOWcqOWOhuWPsueJiOacrOe8lui+keWFtuS7lumhtemdouaciemXrumimCDmmoLml7bkuI3mlK/mjIFcblx0XHRcdExvZy5lcnJvcignY3Jvc3NfcGFnZV9oaXN0b3J5X3JldmlzaW9uX2VkaXRfd2FybmluZycpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCByZXZpc2lvbklkID0gaXNPdGhlclBhZ2UgPyBhd2FpdCBXaWtpLmdldExhdGVzdFJldmlzaW9uSWRGb3JQYWdlKHRhcmdldFBhZ2VOYW1lKSA6IENvbnN0YW50cy5yZXZpc2lvbklkO1xuXG5cdFx0Y29uc3QgcGFnZSA9IGF3YWl0IGdldFBhZ2Uoe3JldmlzaW9uSWQsIHRpdGxlOiB0YXJnZXRQYWdlTmFtZX0pO1xuXHRcdGNvbnN0IGN1c3RvbVN1bW1hcnkgPSBTZXR0aW5ncy5nZXRTZXR0aW5nKCdkZWZhdWx0U3VtbWFyeScsIHtcblx0XHRcdHNlY3Rpb25OYW1lLFxuXHRcdFx0c2VjdGlvbk51bWJlcixcblx0XHRcdHNlY3Rpb25UYXJnZXROYW1lOiB0YXJnZXRQYWdlTmFtZSxcblx0XHR9KTtcblx0XHRjb25zdCBzdW1tYXJ5ID1cblx0XHRcdGN1c3RvbVN1bW1hcnkgfHxcblx0XHRcdChzZWN0aW9uTmFtZVxuXHRcdFx0XHQ/IGAvKiAke3NlY3Rpb25OYW1lfSAqLyAke2kxOG4udHJhbnNsYXRlKCdkZWZhdWx0X3N1bW1hcnlfc3VmZml4Jyl9YFxuXHRcdFx0XHQ6IGkxOG4udHJhbnNsYXRlKCdkZWZhdWx0X3N1bW1hcnlfc3VmZml4JykpO1xuXHRcdGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHROb3RpZmljYXRpb24uc3VjY2VzcyhpMThuLnRyYW5zbGF0ZSgnbG9hZGluZycpKTtcblx0XHR9LCAyMDApO1xuXHRcdGNvbnN0IHNlY3Rpb25Db250ZW50ID0gYXdhaXQgcGFnZS5nZXRXaWtpVGV4dCh7XG5cdFx0XHRzZWN0aW9uOiBzZWN0aW9uTnVtYmVyLFxuXHRcdH0pO1xuXHRcdGNvbnN0IGlzRWRpdEhpc3RvcnlSZXZpc2lvbiA9ICFpc090aGVyUGFnZSAmJiBDb25zdGFudHMubGF0ZXN0UmV2aXNpb25JZCAhPT0gQ29uc3RhbnRzLnJldmlzaW9uSWQ7XG5cdFx0Y29uc3QgZXNjVG9FeGl0ID1cblx0XHRcdFNldHRpbmdzLmdldFNldHRpbmcoJ2VzY190b19leGl0X3F1aWNrZWRpdCcpID09PSB0cnVlIHx8IC8vIOWFvOWuueiAgeiuvue9rmtleVxuXHRcdFx0U2V0dGluZ3MuZ2V0U2V0dGluZygnZXNjX3RvX2V4aXRfcXVpY2tlZGl0JykgPT09ICd0cnVlJyB8fFxuXHRcdFx0U2V0dGluZ3MuZ2V0U2V0dGluZygnZXNjVG9FeGl0UXVpY2tFZGl0JykgPT09IHRydWUgfHxcblx0XHRcdFNldHRpbmdzLmdldFNldHRpbmcoJ2VzY1RvRXhpdFF1aWNrRWRpdCcpID09PSAndHJ1ZSc7XG5cdFx0Y29uc3QgY3VzdG9tRWRpdFRhZ3MgPSBTZXR0aW5ncy5nZXRTZXR0aW5nKCdjdXN0b21fZWRpdF90YWdzJyk7XG5cdFx0Y29uc3QgZGVmYXVsdEVkaXRUYWdzID0gW107XG5cdFx0Y29uc3QgZWRpdFRhZ3MgPSBjdXN0b21FZGl0VGFncz8ubGVuZ3RoID8gY3VzdG9tRWRpdFRhZ3MgOiBkZWZhdWx0RWRpdFRhZ3M7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHROb3RpZmljYXRpb24uZW1wdHkoKTtcblxuXHRcdGlmIChpc0VkaXRIaXN0b3J5UmV2aXNpb24pIHtcblx0XHRcdE5vdGlmaWNhdGlvbi53YXJuaW5nKGkxOG4udHJhbnNsYXRlKCdoaXN0b3J5X2VkaXRfd2FybmluZycpKTtcblx0XHR9XG5cblx0XHRjb25zdCBzaG91bGRTaG93Q3JlYXRlUGFnZVRpcCA9IGlzT3RoZXJQYWdlID8gIXJldmlzaW9uSWQgOiBpc0N1cnJlbnRQYWdlRW1wdHk7XG5cblx0XHRVSS5zaG93UXVpY2tFZGl0UGFuZWwoe1xuXHRcdFx0dGl0bGU6IGAke2kxOG4udHJhbnNsYXRlKCdxdWlja2VkaXRfdG9wYnRuJyl9JHtcblx0XHRcdFx0aXNFZGl0SGlzdG9yeVJldmlzaW9uID8gaTE4bi50cmFuc2xhdGUoJ2hpc3RvcnlfZWRpdF93YXJuaW5nJykgOiAnJ1xuXHRcdFx0fWAsXG5cdFx0XHRjb250ZW50OiBzaG91bGRTaG93Q3JlYXRlUGFnZVRpcCA/IGkxOG4udHJhbnNsYXRlKCdjcmVhdGVfcGFnZV90aXAnKSA6IHNlY3Rpb25Db250ZW50LFxuXHRcdFx0c3VtbWFyeSxcblx0XHRcdG9uQmFjazogVUkuaGlkZVF1aWNrRWRpdFBhbmVsLFxuXHRcdFx0b25QYXJzZTogKHdpa2lUZXh0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBwYWdlLnBhcnNlV2lraVRleHQod2lraVRleHQpO1xuXHRcdFx0fSxcblx0XHRcdG9uRWRpdDogYXN5bmMgKHtjb250ZW50LCBzdW1tYXJ5LCBpc01pbm9yRWRpdH0pID0+IHtcblx0XHRcdFx0Y29uc3QgZWRpdFBheWxvYWQgPSB7XG5cdFx0XHRcdFx0Y29udGVudCxcblx0XHRcdFx0XHRjb25maWc6IHtcblx0XHRcdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdFx0XHQuLi4oc2VjdGlvbk51bWJlciA9PT0gLTEgPyB7fSA6IHtzZWN0aW9uOiBzZWN0aW9uTnVtYmVyfSksXG5cdFx0XHRcdFx0XHQuLi4oZWRpdFRhZ3MubGVuZ3RoID8ge3RhZ3M6IGVkaXRUYWdzLmpvaW4oJ3wnKX0gOiB7fSksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGlzTWlub3JFZGl0KSB7XG5cdFx0XHRcdFx0ZWRpdFBheWxvYWQuY29uZmlnLm1pbm9yID0gJ3RydWUnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVkaXRQYXlsb2FkLmNvbmZpZy5ub3RtaW5vciA9ICd0cnVlJztcblx0XHRcdFx0fVxuXHRcdFx0XHRhd2FpdCBwYWdlLmVkaXQoZWRpdFBheWxvYWQpO1xuXHRcdFx0fSxcblx0XHRcdGVzY0V4aXQ6IGVzY1RvRXhpdCxcblx0XHR9KTtcblx0fTtcblxuXHRjb25zdCBoYW5kbGVTaW1wbGVSZWRpcmVjdEJ1dHRvbkNsaWNrZWQgPSBhc3luYyAoKSA9PiB7XG5cdFx0VUkuc2hvd1NpbXBsZVJlZGlyZWN0UGFuZWwoe1xuXHRcdFx0b25FZGl0OiBhc3luYyAoe3RpdGxlLCBmb3JjZU92ZXJ3cml0ZSA9IGZhbHNlfSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYWdlID0gYXdhaXQgZ2V0UGFnZSh7dGl0bGV9KTtcblx0XHRcdFx0Y29uc3QgY3VycmVudFBhZ2VOYW1lID0gQ29uc3RhbnRzLmN1cnJlbnRQYWdlTmFtZTtcblx0XHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcblx0XHRcdFx0XHRjb250ZW50OiBgI1JFRElSRUNUIFtbJHtjdXJyZW50UGFnZU5hbWV9XV1gLFxuXHRcdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdFx0c3VtbWFyeTogaTE4bi50cmFuc2xhdGUoJ3JlZGlyZWN0X2Zyb21fc3VtbWFyeScsIFt0aXRsZSwgY3VycmVudFBhZ2VOYW1lXSksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKCFmb3JjZU92ZXJ3cml0ZSkge1xuXHRcdFx0XHRcdHBheWxvYWQuY29uZmlnLmNyZWF0ZW9ubHkgPSAndHJ1ZSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXdhaXQgcGFnZS5lZGl0KHBheWxvYWQpO1xuXHRcdFx0fSxcblx0XHRcdG9uU3VjY2VzczogKHt0aXRsZX0pID0+IHtcblx0XHRcdFx0bG9jYXRpb24uaHJlZiA9IENvbnN0YW50cy5hcnRpY2xlUGF0aC5yZXBsYWNlKC9cXCQxL2dpLCB0aXRsZSk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9O1xuXG5cdGNvbnN0IGhhbmRsZVNldHRpbmdzQnV0dG9uQ2xpY2tlZCA9IGFzeW5jICgpID0+IHtcblx0XHRVSS5zaG93U2V0dGluZ3NQYW5lbCh7XG5cdFx0XHRvblN1Ym1pdDogKHtzZXR0aW5nc30pID0+IHtcblx0XHRcdFx0SlNPTi5wYXJzZShzZXR0aW5ncyk7XG5cdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdXaWtpcGx1c19TZXR0aW5ncycsIHNldHRpbmdzKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH07XG5cblx0Y29uc3QgaGFuZGxlUHJlbG9hZCA9IGFzeW5jICh7c2VjdGlvbk51bWJlcn0pID0+IHtcblx0XHRhd2FpdCBjdXJyZW50UGFnZS5nZXRXaWtpVGV4dCh7XG5cdFx0XHRzZWN0aW9uOiBzZWN0aW9uTnVtYmVyLFxuXHRcdH0pO1xuXHR9O1xuXG5cdFVJLmluc2VydFRvcFF1aWNrRWRpdEVudHJ5KGhhbmRsZVF1aWNrRWRpdEJ1dHRvbkNsaWNrZWQpO1xuXHRVSS5pbnNlcnRTZWN0aW9uUXVpY2tFZGl0RW50cmllcyhoYW5kbGVRdWlja0VkaXRCdXR0b25DbGlja2VkKTtcblx0VUkuaW5zZXJ0TGlua0VkaXRFbnRyaWVzKGhhbmRsZVF1aWNrRWRpdEJ1dHRvbkNsaWNrZWQpO1xuXHRVSS5pbnNlcnRTaW1wbGVSZWRpcmVjdEJ1dHRvbihoYW5kbGVTaW1wbGVSZWRpcmVjdEJ1dHRvbkNsaWNrZWQpO1xuXHRVSS5pbnNlcnRTZXR0aW5nc1BhbmVsQnV0dG9uKGhhbmRsZVNldHRpbmdzQnV0dG9uQ2xpY2tlZCk7XG5cdFVJLmJpbmRQcmVsb2FkRXZlbnRzKGhhbmRsZVByZWxvYWQpO1xufSk7XG4iLCAiaW1wb3J0ICcuL1dpa2lwbHVzLmxlc3MnO1xuXG4oYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRjb25zdCB7d2dBY3Rpb24sIHdnSXNBcnRpY2xlfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0aWYgKHdnQWN0aW9uICE9PSAndmlldycgfHwgIXdnSXNBcnRpY2xlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgeyd2aXN1YWxlZGl0b3ItZW5hYmxlJzogaXNWZUVuYWJsZX0gPSBtdy51c2VyLm9wdGlvbnMuZ2V0KCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0Y29uc3QgbG9hZGVyID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL2luZGV4Jyk7XG5cdH07XG5cblx0Lyogc2VlIDxodHRwczovL2dpdGh1Yi5jb20vV2lraXBsdXMvV2lraXBsdXMvaXNzdWVzLzY1PiAqL1xuXHRpZiAoaXNWZUVuYWJsZSkge1xuXHRcdGF3YWl0IG13LmxvYWRlci51c2luZygnZXh0LnZpc3VhbEVkaXRvci5jb3JlJyk7XG5cdH1cblxuXHR2b2lkIGxvYWRlcigpO1xufSkoKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLHVGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBR1osSUFBQUEsUUFBTyxVQUFVLENBQUMsTUFBTSxXQUFZO0FBRWxDLGFBQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxXQUFZO0FBQUUsZUFBTztBQUFBLE1BQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQUEsSUFDakYsQ0FBQztBQUFBO0FBQUE7OztBQ1BEO0FBQUEsc0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUVaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxVQUFJLE9BQVEsV0FBWTtBQUFBLE1BQWMsRUFBRyxLQUFLO0FBRTlDLGFBQU8sT0FBTyxRQUFRLGNBQWMsS0FBSyxlQUFlLFdBQVc7QUFBQSxJQUNyRSxDQUFDO0FBQUE7QUFBQTs7O0FDUkQ7QUFBQSwrRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksT0FBTyxTQUFTLFVBQVU7QUFFOUIsSUFBQUEsUUFBTyxVQUFVLGNBQWMsS0FBSyxLQUFLLElBQUksSUFBSSxXQUFZO0FBQzNELGFBQU8sS0FBSyxNQUFNLE1BQU0sU0FBUztBQUFBLElBQ25DO0FBQUE7QUFBQTs7O0FDUEE7QUFBQTtBQUFBO0FBQ0EsUUFBSSx3QkFBd0IsQ0FBQyxFQUFFO0FBRS9CLFFBQUksMkJBQTJCLE9BQU87QUFHdEMsUUFBSSxjQUFjLDRCQUE0QixDQUFDLHNCQUFzQixLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUlyRixZQUFRLElBQUksY0FBYyxTQUFTLHFCQUFxQixHQUFHO0FBQ3pELFVBQUksYUFBYSx5QkFBeUIsTUFBTSxDQUFDO0FBQ2pELGFBQU8sQ0FBQyxDQUFDLGNBQWMsV0FBVztBQUFBLElBQ3BDLElBQUk7QUFBQTtBQUFBOzs7QUNiSjtBQUFBLDRHQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLE9BQU87QUFDeEMsYUFBTztBQUFBLFFBQ0wsWUFBWSxFQUFFLFNBQVM7QUFBQSxRQUN2QixjQUFjLEVBQUUsU0FBUztBQUFBLFFBQ3pCLFVBQVUsRUFBRSxTQUFTO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1JBO0FBQUEsdUdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLG9CQUFvQixTQUFTO0FBQ2pDLFFBQUksT0FBTyxrQkFBa0I7QUFDN0IsUUFBSSxzQkFBc0IsZUFBZSxrQkFBa0IsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUUvRSxJQUFBQSxRQUFPLFVBQVUsY0FBYyxzQkFBc0IsU0FBVSxJQUFJO0FBQ2pFLGFBQU8sV0FBWTtBQUNqQixlQUFPLEtBQUssTUFBTSxJQUFJLFNBQVM7QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLDZGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxXQUFXLFlBQVksQ0FBQyxFQUFFLFFBQVE7QUFDdEMsUUFBSSxjQUFjLFlBQVksR0FBRyxLQUFLO0FBRXRDLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxZQUFZLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRTtBQUFBLElBQ3hDO0FBQUE7QUFBQTs7O0FDUkE7QUFBQSxnR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksVUFBVTtBQUVkLFFBQUksVUFBVTtBQUNkLFFBQUksUUFBUSxZQUFZLEdBQUcsS0FBSztBQUdoQyxJQUFBQSxRQUFPLFVBQVUsTUFBTSxXQUFZO0FBR2pDLGFBQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQztBQUFBLElBQzdDLENBQUMsSUFBSSxTQUFVLElBQUk7QUFDakIsYUFBTyxRQUFRLEVBQUUsTUFBTSxXQUFXLE1BQU0sSUFBSSxFQUFFLElBQUksUUFBUSxFQUFFO0FBQUEsSUFDOUQsSUFBSTtBQUFBO0FBQUE7OztBQ2ZKO0FBQUEsc0dBQUFDLFNBQUE7QUFBQTtBQUdBLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxPQUFPLFFBQVEsT0FBTztBQUFBLElBQy9CO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSwwR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxvQkFBb0I7QUFFeEIsUUFBSSxhQUFhO0FBSWpCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsVUFBSSxrQkFBa0IsRUFBRSxFQUFHLE9BQU0sSUFBSSxXQUFXLDBCQUEwQixFQUFFO0FBQzVFLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSxtR0FBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSx5QkFBeUI7QUFFN0IsSUFBQUEsUUFBTyxVQUFVLFNBQVUsSUFBSTtBQUM3QixhQUFPLGNBQWMsdUJBQXVCLEVBQUUsQ0FBQztBQUFBLElBQ2pEO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxjQUFjLE9BQU8sWUFBWSxZQUFZLFNBQVM7QUFLMUQsSUFBQUEsUUFBTyxVQUFVLE9BQU8sZUFBZSxlQUFlLGdCQUFnQixTQUFZLFNBQVUsVUFBVTtBQUNwRyxhQUFPLE9BQU8sWUFBWSxjQUFjLGFBQWE7QUFBQSxJQUN2RCxJQUFJLFNBQVUsVUFBVTtBQUN0QixhQUFPLE9BQU8sWUFBWTtBQUFBLElBQzVCO0FBQUE7QUFBQTs7O0FDWEE7QUFBQSwyRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBRWpCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxPQUFPLE1BQU0sV0FBVyxPQUFPLE9BQU8sV0FBVyxFQUFFO0FBQUEsSUFDNUQ7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLDhGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksYUFBYTtBQUVqQixRQUFJLFlBQVksU0FBVSxVQUFVO0FBQ2xDLGFBQU8sV0FBVyxRQUFRLElBQUksV0FBVztBQUFBLElBQzNDO0FBRUEsSUFBQUQsUUFBTyxVQUFVLFNBQVUsV0FBVyxRQUFRO0FBQzVDLGFBQU8sVUFBVSxTQUFTLElBQUksVUFBVUMsWUFBVyxTQUFTLENBQUMsSUFBSUEsWUFBVyxTQUFTLEtBQUtBLFlBQVcsU0FBUyxFQUFFLE1BQU07QUFBQSxJQUN4SDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsd0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixJQUFBQSxRQUFPLFVBQVUsWUFBWSxDQUFDLEVBQUUsYUFBYTtBQUFBO0FBQUE7OztBQ0g3QztBQUFBLHdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBRWpCLFFBQUlDLGFBQVlELFlBQVc7QUFDM0IsUUFBSSxZQUFZQyxjQUFhQSxXQUFVO0FBRXZDLElBQUFGLFFBQU8sVUFBVSxZQUFZLE9BQU8sU0FBUyxJQUFJO0FBQUE7QUFBQTs7O0FDTmpEO0FBQUEsd0dBQUFHLFNBQUE7QUFBQTtBQUNBLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxZQUFZO0FBRWhCLFFBQUksVUFBVUEsWUFBVztBQUN6QixRQUFJLE9BQU9BLFlBQVc7QUFDdEIsUUFBSSxXQUFXLFdBQVcsUUFBUSxZQUFZLFFBQVEsS0FBSztBQUMzRCxRQUFJLEtBQUssWUFBWSxTQUFTO0FBQzlCLFFBQUk7QUFBSixRQUFXO0FBRVgsUUFBSSxJQUFJO0FBQ04sY0FBUSxHQUFHLE1BQU0sR0FBRztBQUdwQixnQkFBVSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUFBLElBQ25FO0FBSUEsUUFBSSxDQUFDLFdBQVcsV0FBVztBQUN6QixjQUFRLFVBQVUsTUFBTSxhQUFhO0FBQ3JDLFVBQUksQ0FBQyxTQUFTLE1BQU0sQ0FBQyxLQUFLLElBQUk7QUFDNUIsZ0JBQVEsVUFBVSxNQUFNLGVBQWU7QUFDdkMsWUFBSSxNQUFPLFdBQVUsQ0FBQyxNQUFNLENBQUM7QUFBQSxNQUMvQjtBQUFBLElBQ0Y7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUMzQmpCO0FBQUEsOEdBQUFFLFNBQUE7QUFBQTtBQUVBLFFBQUksYUFBYTtBQUNqQixRQUFJLFFBQVE7QUFDWixRQUFJQyxjQUFhO0FBRWpCLFFBQUksVUFBVUEsWUFBVztBQUd6QixJQUFBRCxRQUFPLFVBQVUsQ0FBQyxDQUFDLE9BQU8seUJBQXlCLENBQUMsTUFBTSxXQUFZO0FBQ3BFLFVBQUksU0FBUyxPQUFPLGtCQUFrQjtBQUt0QyxhQUFPLENBQUMsUUFBUSxNQUFNLEtBQUssRUFBRSxPQUFPLE1BQU0sYUFBYTtBQUFBLE1BRXJELENBQUMsT0FBTyxRQUFRLGNBQWMsYUFBYTtBQUFBLElBQy9DLENBQUM7QUFBQTtBQUFBOzs7QUNsQkQ7QUFBQSxtR0FBQUUsU0FBQTtBQUFBO0FBRUEsUUFBSSxnQkFBZ0I7QUFFcEIsSUFBQUEsUUFBTyxVQUFVLGlCQUNaLENBQUMsT0FBTyxRQUNSLE9BQU8sT0FBTyxZQUFZO0FBQUE7QUFBQTs7O0FDTi9CO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGFBQWE7QUFDakIsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxvQkFBb0I7QUFFeEIsUUFBSSxVQUFVO0FBRWQsSUFBQUEsUUFBTyxVQUFVLG9CQUFvQixTQUFVLElBQUk7QUFDakQsYUFBTyxPQUFPLE1BQU07QUFBQSxJQUN0QixJQUFJLFNBQVUsSUFBSTtBQUNoQixVQUFJLFVBQVUsV0FBVyxRQUFRO0FBQ2pDLGFBQU8sV0FBVyxPQUFPLEtBQUssY0FBYyxRQUFRLFdBQVcsUUFBUSxFQUFFLENBQUM7QUFBQSxJQUM1RTtBQUFBO0FBQUE7OztBQ2JBO0FBQUEsK0ZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksVUFBVTtBQUVkLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSTtBQUNGLGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSw0RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUksY0FBYztBQUVsQixRQUFJLGFBQWE7QUFHakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLFdBQVcsUUFBUSxFQUFHLFFBQU87QUFDakMsWUFBTSxJQUFJLFdBQVcsWUFBWSxRQUFRLElBQUksb0JBQW9CO0FBQUEsSUFDbkU7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLDRGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFlBQVk7QUFDaEIsUUFBSSxvQkFBb0I7QUFJeEIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsR0FBRyxHQUFHO0FBQy9CLFVBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxhQUFPLGtCQUFrQixJQUFJLElBQUksU0FBWSxVQUFVLElBQUk7QUFBQSxJQUM3RDtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsdUdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksYUFBYTtBQUNqQixRQUFJLFdBQVc7QUFFZixRQUFJLGFBQWE7QUFJakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNO0FBQ3RDLFVBQUksSUFBSTtBQUNSLFVBQUksU0FBUyxZQUFZLFdBQVcsS0FBSyxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUNyRyxVQUFJLFdBQVcsS0FBSyxNQUFNLE9BQU8sS0FBSyxDQUFDLFNBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUMvRSxVQUFJLFNBQVMsWUFBWSxXQUFXLEtBQUssTUFBTSxRQUFRLEtBQUssQ0FBQyxTQUFTLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFHLFFBQU87QUFDckcsWUFBTSxJQUFJLFdBQVcseUNBQXlDO0FBQUEsSUFDaEU7QUFBQTtBQUFBOzs7QUNmQTtBQUFBLHlGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNEakI7QUFBQSx3R0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUdqQixRQUFJLGlCQUFpQixPQUFPO0FBRTVCLElBQUFELFFBQU8sVUFBVSxTQUFVLEtBQUssT0FBTztBQUNyQyxVQUFJO0FBQ0YsdUJBQWVDLGFBQVksS0FBSyxFQUFFLE9BQWMsY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDdEYsU0FBUyxPQUFPO0FBQ2QsUUFBQUEsWUFBVyxHQUFHLElBQUk7QUFBQSxNQUNwQjtBQUFFLGFBQU87QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSw4RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxVQUFVO0FBQ2QsUUFBSUMsY0FBYTtBQUNqQixRQUFJLHVCQUF1QjtBQUUzQixRQUFJLFNBQVM7QUFDYixRQUFJLFFBQVFELFFBQU8sVUFBVUMsWUFBVyxNQUFNLEtBQUsscUJBQXFCLFFBQVEsQ0FBQyxDQUFDO0FBRWxGLEtBQUMsTUFBTSxhQUFhLE1BQU0sV0FBVyxDQUFDLElBQUksS0FBSztBQUFBLE1BQzdDLFNBQVM7QUFBQSxNQUNULE1BQU0sVUFBVSxTQUFTO0FBQUEsTUFDekIsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUFBO0FBQUE7OztBQ2REO0FBQUEsd0ZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUVaLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUssT0FBTztBQUNyQyxhQUFPLE1BQU0sR0FBRyxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQy9DO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSwyRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSx5QkFBeUI7QUFFN0IsUUFBSSxVQUFVO0FBSWQsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxhQUFPLFFBQVEsdUJBQXVCLFFBQVEsQ0FBQztBQUFBLElBQ2pEO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSxrR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUVmLFFBQUksaUJBQWlCLFlBQVksQ0FBQyxFQUFFLGNBQWM7QUFLbEQsSUFBQUEsUUFBTyxVQUFVLE9BQU8sVUFBVSxTQUFTLE9BQU8sSUFBSSxLQUFLO0FBQ3pELGFBQU8sZUFBZSxTQUFTLEVBQUUsR0FBRyxHQUFHO0FBQUEsSUFDekM7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLHFGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxLQUFLO0FBQ1QsUUFBSSxVQUFVLEtBQUssT0FBTztBQUMxQixRQUFJLFdBQVcsWUFBWSxHQUFJLFFBQVE7QUFFdkMsSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSztBQUM5QixhQUFPLGFBQWEsUUFBUSxTQUFZLEtBQUssT0FBTyxPQUFPLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRTtBQUFBLElBQ3hGO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSxtR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLFNBQVM7QUFDYixRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFDVixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLG9CQUFvQjtBQUV4QixRQUFJQyxVQUFTRCxZQUFXO0FBQ3hCLFFBQUksd0JBQXdCLE9BQU8sS0FBSztBQUN4QyxRQUFJLHdCQUF3QixvQkFBb0JDLFFBQU8sS0FBSyxLQUFLQSxVQUFTQSxXQUFVQSxRQUFPLGlCQUFpQjtBQUU1RyxJQUFBRixRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUksQ0FBQyxPQUFPLHVCQUF1QixJQUFJLEdBQUc7QUFDeEMsOEJBQXNCLElBQUksSUFBSSxpQkFBaUIsT0FBT0UsU0FBUSxJQUFJLElBQzlEQSxRQUFPLElBQUksSUFDWCxzQkFBc0IsWUFBWSxJQUFJO0FBQUEsTUFDNUM7QUFBRSxhQUFPLHNCQUFzQixJQUFJO0FBQUEsSUFDckM7QUFBQTtBQUFBOzs7QUNsQkE7QUFBQSw4RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxXQUFXO0FBQ2YsUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksc0JBQXNCO0FBQzFCLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWUsZ0JBQWdCLGFBQWE7QUFJaEQsSUFBQUEsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNO0FBQ3RDLFVBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxTQUFTLEtBQUssRUFBRyxRQUFPO0FBQ2hELFVBQUksZUFBZSxVQUFVLE9BQU8sWUFBWTtBQUNoRCxVQUFJO0FBQ0osVUFBSSxjQUFjO0FBQ2hCLFlBQUksU0FBUyxPQUFXLFFBQU87QUFDL0IsaUJBQVMsS0FBSyxjQUFjLE9BQU8sSUFBSTtBQUN2QyxZQUFJLENBQUMsU0FBUyxNQUFNLEtBQUssU0FBUyxNQUFNLEVBQUcsUUFBTztBQUNsRCxjQUFNLElBQUksV0FBVyx5Q0FBeUM7QUFBQSxNQUNoRTtBQUNBLFVBQUksU0FBUyxPQUFXLFFBQU87QUFDL0IsYUFBTyxvQkFBb0IsT0FBTyxJQUFJO0FBQUEsSUFDeEM7QUFBQTtBQUFBOzs7QUN6QkE7QUFBQSxpR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUlmLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxNQUFNLFlBQVksVUFBVSxRQUFRO0FBQ3hDLGFBQU8sU0FBUyxHQUFHLElBQUksTUFBTSxNQUFNO0FBQUEsSUFDckM7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLHlHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksV0FBVztBQUVmLFFBQUlDLFlBQVdELFlBQVc7QUFFMUIsUUFBSSxTQUFTLFNBQVNDLFNBQVEsS0FBSyxTQUFTQSxVQUFTLGFBQWE7QUFFbEUsSUFBQUYsUUFBTyxVQUFVLFNBQVUsSUFBSTtBQUM3QixhQUFPLFNBQVNFLFVBQVMsY0FBYyxFQUFFLElBQUksQ0FBQztBQUFBLElBQ2hEO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSxnR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksZ0JBQWdCO0FBR3BCLElBQUFBLFFBQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLFdBQVk7QUFFbEQsYUFBTyxPQUFPLGVBQWUsY0FBYyxLQUFLLEdBQUcsS0FBSztBQUFBLFFBQ3RELEtBQUssV0FBWTtBQUFFLGlCQUFPO0FBQUEsUUFBRztBQUFBLE1BQy9CLENBQUMsRUFBRSxNQUFNO0FBQUEsSUFDWCxDQUFDO0FBQUE7QUFBQTs7O0FDWEQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksT0FBTztBQUNYLFFBQUksNkJBQTZCO0FBQ2pDLFFBQUksMkJBQTJCO0FBQy9CLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksU0FBUztBQUNiLFFBQUksaUJBQWlCO0FBR3JCLFFBQUksNEJBQTRCLE9BQU87QUFJdkMsWUFBUSxJQUFJLGNBQWMsNEJBQTRCLFNBQVMseUJBQXlCLEdBQUcsR0FBRztBQUM1RixVQUFJLGdCQUFnQixDQUFDO0FBQ3JCLFVBQUksY0FBYyxDQUFDO0FBQ25CLFVBQUksZUFBZ0IsS0FBSTtBQUN0QixlQUFPLDBCQUEwQixHQUFHLENBQUM7QUFBQSxNQUN2QyxTQUFTLE9BQU87QUFBQSxNQUFjO0FBQzlCLFVBQUksT0FBTyxHQUFHLENBQUMsRUFBRyxRQUFPLHlCQUF5QixDQUFDLEtBQUssMkJBQTJCLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFBQSxJQUNuRztBQUFBO0FBQUE7OztBQ3RCQTtBQUFBLHlHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBSVosSUFBQUEsUUFBTyxVQUFVLGVBQWUsTUFBTSxXQUFZO0FBRWhELGFBQU8sT0FBTyxlQUFlLFdBQVk7QUFBQSxNQUFjLEdBQUcsYUFBYTtBQUFBLFFBQ3JFLE9BQU87QUFBQSxRQUNQLFVBQVU7QUFBQSxNQUNaLENBQUMsRUFBRSxjQUFjO0FBQUEsSUFDbkIsQ0FBQztBQUFBO0FBQUE7OztBQ1pEO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksV0FBVztBQUVmLFFBQUksVUFBVTtBQUNkLFFBQUksYUFBYTtBQUdqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUksU0FBUyxRQUFRLEVBQUcsUUFBTztBQUMvQixZQUFNLElBQUksV0FBVyxRQUFRLFFBQVEsSUFBSSxtQkFBbUI7QUFBQSxJQUM5RDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLDBCQUEwQjtBQUM5QixRQUFJLFdBQVc7QUFDZixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLGFBQWE7QUFFakIsUUFBSSxrQkFBa0IsT0FBTztBQUU3QixRQUFJLDRCQUE0QixPQUFPO0FBQ3ZDLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxXQUFXO0FBSWYsWUFBUSxJQUFJLGNBQWMsMEJBQTBCLFNBQVMsZUFBZSxHQUFHLEdBQUcsWUFBWTtBQUM1RixlQUFTLENBQUM7QUFDVixVQUFJLGNBQWMsQ0FBQztBQUNuQixlQUFTLFVBQVU7QUFDbkIsVUFBSSxPQUFPLE1BQU0sY0FBYyxNQUFNLGVBQWUsV0FBVyxjQUFjLFlBQVksY0FBYyxDQUFDLFdBQVcsUUFBUSxHQUFHO0FBQzVILFlBQUksVUFBVSwwQkFBMEIsR0FBRyxDQUFDO0FBQzVDLFlBQUksV0FBVyxRQUFRLFFBQVEsR0FBRztBQUNoQyxZQUFFLENBQUMsSUFBSSxXQUFXO0FBQ2xCLHVCQUFhO0FBQUEsWUFDWCxjQUFjLGdCQUFnQixhQUFhLFdBQVcsWUFBWSxJQUFJLFFBQVEsWUFBWTtBQUFBLFlBQzFGLFlBQVksY0FBYyxhQUFhLFdBQVcsVUFBVSxJQUFJLFFBQVEsVUFBVTtBQUFBLFlBQ2xGLFVBQVU7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBRSxhQUFPLGdCQUFnQixHQUFHLEdBQUcsVUFBVTtBQUFBLElBQzNDLElBQUksa0JBQWtCLFNBQVMsZUFBZSxHQUFHLEdBQUcsWUFBWTtBQUM5RCxlQUFTLENBQUM7QUFDVixVQUFJLGNBQWMsQ0FBQztBQUNuQixlQUFTLFVBQVU7QUFDbkIsVUFBSSxlQUFnQixLQUFJO0FBQ3RCLGVBQU8sZ0JBQWdCLEdBQUcsR0FBRyxVQUFVO0FBQUEsTUFDekMsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLFNBQVMsY0FBYyxTQUFTLFdBQVksT0FBTSxJQUFJLFdBQVcseUJBQXlCO0FBQzlGLFVBQUksV0FBVyxXQUFZLEdBQUUsQ0FBQyxJQUFJLFdBQVc7QUFDN0MsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUMzQ0E7QUFBQSxnSEFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksMkJBQTJCO0FBRS9CLElBQUFBLFFBQU8sVUFBVSxjQUFjLFNBQVUsUUFBUSxLQUFLLE9BQU87QUFDM0QsYUFBTyxxQkFBcUIsRUFBRSxRQUFRLEtBQUsseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBQUEsSUFDL0UsSUFBSSxTQUFVLFFBQVEsS0FBSyxPQUFPO0FBQ2hDLGFBQU8sR0FBRyxJQUFJO0FBQ2QsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLCtGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxTQUFTO0FBRWIsUUFBSSxvQkFBb0IsU0FBUztBQUVqQyxRQUFJLGdCQUFnQixlQUFlLE9BQU87QUFFMUMsUUFBSSxTQUFTLE9BQU8sbUJBQW1CLE1BQU07QUFFN0MsUUFBSSxTQUFTLFVBQVcsU0FBUyxZQUFZO0FBQUEsSUFBYyxFQUFHLFNBQVM7QUFDdkUsUUFBSSxlQUFlLFdBQVcsQ0FBQyxlQUFnQixlQUFlLGNBQWMsbUJBQW1CLE1BQU0sRUFBRTtBQUV2RyxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDakJBO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBRVosUUFBSSxtQkFBbUIsWUFBWSxTQUFTLFFBQVE7QUFHcEQsUUFBSSxDQUFDLFdBQVcsTUFBTSxhQUFhLEdBQUc7QUFDcEMsWUFBTSxnQkFBZ0IsU0FBVSxJQUFJO0FBQ2xDLGVBQU8saUJBQWlCLEVBQUU7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFFQSxJQUFBQSxRQUFPLFVBQVUsTUFBTTtBQUFBO0FBQUE7OztBQ2R2QjtBQUFBLDBHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksYUFBYTtBQUVqQixRQUFJLFVBQVVBLFlBQVc7QUFFekIsSUFBQUQsUUFBTyxVQUFVLFdBQVcsT0FBTyxLQUFLLGNBQWMsS0FBSyxPQUFPLE9BQU8sQ0FBQztBQUFBO0FBQUE7OztBQ04xRTtBQUFBLDRGQUFBRSxTQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFFVixRQUFJLE9BQU8sT0FBTyxNQUFNO0FBRXhCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUs7QUFDOUIsYUFBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUc7QUFBQSxJQUMxQztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsNkZBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVSxDQUFDO0FBQUE7QUFBQTs7O0FDRGxCO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxXQUFXO0FBQ2YsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxTQUFTO0FBQ2IsUUFBSSxTQUFTO0FBQ2IsUUFBSSxZQUFZO0FBQ2hCLFFBQUksYUFBYTtBQUVqQixRQUFJLDZCQUE2QjtBQUNqQyxRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksVUFBVUEsWUFBVztBQUN6QixRQUFJO0FBQUosUUFBUztBQUFULFFBQWM7QUFFZCxRQUFJLFVBQVUsU0FBVSxJQUFJO0FBQzFCLGFBQU8sSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLElBQ3ZDO0FBRUEsUUFBSSxZQUFZLFNBQVUsTUFBTTtBQUM5QixhQUFPLFNBQVUsSUFBSTtBQUNuQixZQUFJO0FBQ0osWUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsU0FBUyxNQUFNO0FBQ3BELGdCQUFNLElBQUlDLFdBQVUsNEJBQTRCLE9BQU8sV0FBVztBQUFBLFFBQ3BFO0FBQUUsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsUUFBSSxtQkFBbUIsT0FBTyxPQUFPO0FBQy9CLGNBQVEsT0FBTyxVQUFVLE9BQU8sUUFBUSxJQUFJLFFBQVE7QUFFeEQsWUFBTSxNQUFNLE1BQU07QUFDbEIsWUFBTSxNQUFNLE1BQU07QUFDbEIsWUFBTSxNQUFNLE1BQU07QUFFbEIsWUFBTSxTQUFVLElBQUksVUFBVTtBQUM1QixZQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUcsT0FBTSxJQUFJQSxXQUFVLDBCQUEwQjtBQUNqRSxpQkFBUyxTQUFTO0FBQ2xCLGNBQU0sSUFBSSxJQUFJLFFBQVE7QUFDdEIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxZQUFNLFNBQVUsSUFBSTtBQUNsQixlQUFPLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQztBQUFBLE1BQzNCO0FBQ0EsWUFBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxNQUFNLElBQUksRUFBRTtBQUFBLE1BQ3JCO0FBQUEsSUFDRixPQUFPO0FBQ0QsY0FBUSxVQUFVLE9BQU87QUFDN0IsaUJBQVcsS0FBSyxJQUFJO0FBQ3BCLFlBQU0sU0FBVSxJQUFJLFVBQVU7QUFDNUIsWUFBSSxPQUFPLElBQUksS0FBSyxFQUFHLE9BQU0sSUFBSUEsV0FBVSwwQkFBMEI7QUFDckUsaUJBQVMsU0FBUztBQUNsQixvQ0FBNEIsSUFBSSxPQUFPLFFBQVE7QUFDL0MsZUFBTztBQUFBLE1BQ1Q7QUFDQSxZQUFNLFNBQVUsSUFBSTtBQUNsQixlQUFPLE9BQU8sSUFBSSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUFBLE1BQzFDO0FBQ0EsWUFBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxPQUFPLElBQUksS0FBSztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQWpDTTtBQW1CQTtBQWdCTixJQUFBRixRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUN0RUE7QUFBQSwrRkFBQUcsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUNaLFFBQUksYUFBYTtBQUNqQixRQUFJLFNBQVM7QUFDYixRQUFJLGNBQWM7QUFDbEIsUUFBSSw2QkFBNkIsd0JBQXNDO0FBQ3ZFLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksc0JBQXNCO0FBRTFCLFFBQUksdUJBQXVCLG9CQUFvQjtBQUMvQyxRQUFJLG1CQUFtQixvQkFBb0I7QUFDM0MsUUFBSSxVQUFVO0FBRWQsUUFBSSxpQkFBaUIsT0FBTztBQUM1QixRQUFJLGNBQWMsWUFBWSxHQUFHLEtBQUs7QUFDdEMsUUFBSSxVQUFVLFlBQVksR0FBRyxPQUFPO0FBQ3BDLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRTlCLFFBQUksc0JBQXNCLGVBQWUsQ0FBQyxNQUFNLFdBQVk7QUFDMUQsYUFBTyxlQUFlLFdBQVk7QUFBQSxNQUFjLEdBQUcsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsV0FBVztBQUFBLElBQ3hGLENBQUM7QUFFRCxRQUFJLFdBQVcsT0FBTyxNQUFNLEVBQUUsTUFBTSxRQUFRO0FBRTVDLFFBQUksY0FBY0EsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNLFNBQVM7QUFDakUsVUFBSSxZQUFZLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLFdBQVc7QUFDbEQsZUFBTyxNQUFNLFFBQVEsUUFBUSxJQUFJLEdBQUcseUJBQXlCLElBQUksSUFBSTtBQUFBLE1BQ3ZFO0FBQ0EsVUFBSSxXQUFXLFFBQVEsT0FBUSxRQUFPLFNBQVM7QUFDL0MsVUFBSSxXQUFXLFFBQVEsT0FBUSxRQUFPLFNBQVM7QUFDL0MsVUFBSSxDQUFDLE9BQU8sT0FBTyxNQUFNLEtBQU0sOEJBQThCLE1BQU0sU0FBUyxNQUFPO0FBQ2pGLFlBQUksWUFBYSxnQkFBZSxPQUFPLFFBQVEsRUFBRSxPQUFPLE1BQU0sY0FBYyxLQUFLLENBQUM7QUFBQSxZQUM3RSxPQUFNLE9BQU87QUFBQSxNQUNwQjtBQUNBLFVBQUksdUJBQXVCLFdBQVcsT0FBTyxTQUFTLE9BQU8sS0FBSyxNQUFNLFdBQVcsUUFBUSxPQUFPO0FBQ2hHLHVCQUFlLE9BQU8sVUFBVSxFQUFFLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFBQSxNQUMxRDtBQUNBLFVBQUk7QUFDRixZQUFJLFdBQVcsT0FBTyxTQUFTLGFBQWEsS0FBSyxRQUFRLGFBQWE7QUFDcEUsY0FBSSxZQUFhLGdCQUFlLE9BQU8sYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQUEsUUFFekUsV0FBVyxNQUFNLFVBQVcsT0FBTSxZQUFZO0FBQUEsTUFDaEQsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLFFBQVEscUJBQXFCLEtBQUs7QUFDdEMsVUFBSSxDQUFDLE9BQU8sT0FBTyxRQUFRLEdBQUc7QUFDNUIsY0FBTSxTQUFTLEtBQUssVUFBVSxPQUFPLFFBQVEsV0FBVyxPQUFPLEVBQUU7QUFBQSxNQUNuRTtBQUFFLGFBQU87QUFBQSxJQUNYO0FBSUEsYUFBUyxVQUFVLFdBQVcsWUFBWSxTQUFTLFdBQVc7QUFDNUQsYUFBTyxXQUFXLElBQUksS0FBSyxpQkFBaUIsSUFBSSxFQUFFLFVBQVUsY0FBYyxJQUFJO0FBQUEsSUFDaEYsR0FBRyxVQUFVO0FBQUE7QUFBQTs7O0FDdERiO0FBQUEsaUdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLGNBQWM7QUFDbEIsUUFBSSx1QkFBdUI7QUFFM0IsSUFBQUEsUUFBTyxVQUFVLFNBQVUsR0FBRyxLQUFLLE9BQU8sU0FBUztBQUNqRCxVQUFJLENBQUMsUUFBUyxXQUFVLENBQUM7QUFDekIsVUFBSSxTQUFTLFFBQVE7QUFDckIsVUFBSSxPQUFPLFFBQVEsU0FBUyxTQUFZLFFBQVEsT0FBTztBQUN2RCxVQUFJLFdBQVcsS0FBSyxFQUFHLGFBQVksT0FBTyxNQUFNLE9BQU87QUFDdkQsVUFBSSxRQUFRLFFBQVE7QUFDbEIsWUFBSSxPQUFRLEdBQUUsR0FBRyxJQUFJO0FBQUEsWUFDaEIsc0JBQXFCLEtBQUssS0FBSztBQUFBLE1BQ3RDLE9BQU87QUFDTCxZQUFJO0FBQ0YsY0FBSSxDQUFDLFFBQVEsT0FBUSxRQUFPLEVBQUUsR0FBRztBQUFBLG1CQUN4QixFQUFFLEdBQUcsRUFBRyxVQUFTO0FBQUEsUUFDNUIsU0FBUyxPQUFPO0FBQUEsUUFBYztBQUM5QixZQUFJLE9BQVEsR0FBRSxHQUFHLElBQUk7QUFBQSxZQUNoQixzQkFBcUIsRUFBRSxHQUFHLEtBQUs7QUFBQSxVQUNsQztBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osY0FBYyxDQUFDLFFBQVE7QUFBQSxVQUN2QixVQUFVLENBQUMsUUFBUTtBQUFBLFFBQ3JCLENBQUM7QUFBQSxNQUNIO0FBQUUsYUFBTztBQUFBLElBQ1g7QUFBQTtBQUFBOzs7QUMzQkE7QUFBQSw0RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPLEtBQUs7QUFDaEIsUUFBSSxRQUFRLEtBQUs7QUFLakIsSUFBQUEsUUFBTyxVQUFVLEtBQUssU0FBUyxTQUFTLE1BQU0sR0FBRztBQUMvQyxVQUFJLElBQUksQ0FBQztBQUNULGNBQVEsSUFBSSxJQUFJLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDakM7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFJWixJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUksU0FBUyxDQUFDO0FBRWQsYUFBTyxXQUFXLFVBQVUsV0FBVyxJQUFJLElBQUksTUFBTSxNQUFNO0FBQUEsSUFDN0Q7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLG1HQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHNCQUFzQjtBQUUxQixRQUFJLE1BQU0sS0FBSztBQUNmLFFBQUksTUFBTSxLQUFLO0FBS2YsSUFBQUEsUUFBTyxVQUFVLFNBQVUsT0FBTyxRQUFRO0FBQ3hDLFVBQUksVUFBVSxvQkFBb0IsS0FBSztBQUN2QyxhQUFPLFVBQVUsSUFBSSxJQUFJLFVBQVUsUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTLE1BQU07QUFBQSxJQUNyRTtBQUFBO0FBQUE7OztBQ1pBO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksc0JBQXNCO0FBRTFCLFFBQUksTUFBTSxLQUFLO0FBSWYsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLE1BQU0sb0JBQW9CLFFBQVE7QUFDdEMsYUFBTyxNQUFNLElBQUksSUFBSSxLQUFLLGdCQUFnQixJQUFJO0FBQUEsSUFDaEQ7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHNHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFdBQVc7QUFJZixJQUFBQSxRQUFPLFVBQVUsU0FBVSxLQUFLO0FBQzlCLGFBQU8sU0FBUyxJQUFJLE1BQU07QUFBQSxJQUM1QjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksb0JBQW9CO0FBR3hCLFFBQUksZUFBZSxTQUFVLGFBQWE7QUFDeEMsYUFBTyxTQUFVLE9BQU8sSUFBSSxXQUFXO0FBQ3JDLFlBQUksSUFBSSxnQkFBZ0IsS0FBSztBQUM3QixZQUFJLFNBQVMsa0JBQWtCLENBQUM7QUFDaEMsWUFBSSxXQUFXLEVBQUcsUUFBTyxDQUFDLGVBQWU7QUFDekMsWUFBSSxRQUFRLGdCQUFnQixXQUFXLE1BQU07QUFDN0MsWUFBSTtBQUdKLFlBQUksZUFBZSxPQUFPLEdBQUksUUFBTyxTQUFTLE9BQU87QUFDbkQsa0JBQVEsRUFBRSxPQUFPO0FBRWpCLGNBQUksVUFBVSxNQUFPLFFBQU87QUFBQSxRQUU5QjtBQUFBLFlBQU8sUUFBTSxTQUFTLE9BQU8sU0FBUztBQUNwQyxlQUFLLGVBQWUsU0FBUyxNQUFNLEVBQUUsS0FBSyxNQUFNLEdBQUksUUFBTyxlQUFlLFNBQVM7QUFBQSxRQUNyRjtBQUFFLGVBQU8sQ0FBQyxlQUFlO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTtBQUFBLE1BR2YsVUFBVSxhQUFhLElBQUk7QUFBQTtBQUFBO0FBQUEsTUFHM0IsU0FBUyxhQUFhLEtBQUs7QUFBQSxJQUM3QjtBQUFBO0FBQUE7OztBQ2pDQTtBQUFBLHNHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSxVQUFVLHlCQUF1QztBQUNyRCxRQUFJLGFBQWE7QUFFakIsUUFBSSxPQUFPLFlBQVksQ0FBQyxFQUFFLElBQUk7QUFFOUIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxPQUFPO0FBQ3hDLFVBQUksSUFBSSxnQkFBZ0IsTUFBTTtBQUM5QixVQUFJLElBQUk7QUFDUixVQUFJLFNBQVMsQ0FBQztBQUNkLFVBQUk7QUFDSixXQUFLLE9BQU8sRUFBRyxFQUFDLE9BQU8sWUFBWSxHQUFHLEtBQUssT0FBTyxHQUFHLEdBQUcsS0FBSyxLQUFLLFFBQVEsR0FBRztBQUU3RSxhQUFPLE1BQU0sU0FBUyxFQUFHLEtBQUksT0FBTyxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRztBQUN4RCxTQUFDLFFBQVEsUUFBUSxHQUFHLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFBQSxNQUMzQztBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDcEJBO0FBQUEsK0ZBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDVkE7QUFBQTtBQUFBO0FBQ0EsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSxjQUFjO0FBRWxCLFFBQUksYUFBYSxZQUFZLE9BQU8sVUFBVSxXQUFXO0FBS3pELFlBQVEsSUFBSSxPQUFPLHVCQUF1QixTQUFTLG9CQUFvQixHQUFHO0FBQ3hFLGFBQU8sbUJBQW1CLEdBQUcsVUFBVTtBQUFBLElBQ3pDO0FBQUE7QUFBQTs7O0FDWEE7QUFBQTtBQUFBO0FBRUEsWUFBUSxJQUFJLE9BQU87QUFBQTtBQUFBOzs7QUNGbkI7QUFBQSwwRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUksY0FBYztBQUNsQixRQUFJLDRCQUE0QjtBQUNoQyxRQUFJLDhCQUE4QjtBQUNsQyxRQUFJLFdBQVc7QUFFZixRQUFJLFNBQVMsWUFBWSxDQUFDLEVBQUUsTUFBTTtBQUdsQyxJQUFBQSxRQUFPLFVBQVUsV0FBVyxXQUFXLFNBQVMsS0FBSyxTQUFTLFFBQVEsSUFBSTtBQUN4RSxVQUFJLE9BQU8sMEJBQTBCLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDbkQsVUFBSSx3QkFBd0IsNEJBQTRCO0FBQ3hELGFBQU8sd0JBQXdCLE9BQU8sTUFBTSxzQkFBc0IsRUFBRSxDQUFDLElBQUk7QUFBQSxJQUMzRTtBQUFBO0FBQUE7OztBQ2RBO0FBQUEsNkdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksU0FBUztBQUNiLFFBQUksVUFBVTtBQUNkLFFBQUksaUNBQWlDO0FBQ3JDLFFBQUksdUJBQXVCO0FBRTNCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsUUFBUSxZQUFZO0FBQ3JELFVBQUksT0FBTyxRQUFRLE1BQU07QUFDekIsVUFBSSxpQkFBaUIscUJBQXFCO0FBQzFDLFVBQUksMkJBQTJCLCtCQUErQjtBQUM5RCxlQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3BDLFlBQUksTUFBTSxLQUFLLENBQUM7QUFDaEIsWUFBSSxDQUFDLE9BQU8sUUFBUSxHQUFHLEtBQUssRUFBRSxjQUFjLE9BQU8sWUFBWSxHQUFHLElBQUk7QUFDcEUseUJBQWUsUUFBUSxLQUFLLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQ25FO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNoQkE7QUFBQSwyRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBQ1osUUFBSSxhQUFhO0FBRWpCLFFBQUksY0FBYztBQUVsQixRQUFJLFdBQVcsU0FBVSxTQUFTLFdBQVc7QUFDM0MsVUFBSSxRQUFRLEtBQUssVUFBVSxPQUFPLENBQUM7QUFDbkMsYUFBTyxVQUFVLFdBQVcsT0FDeEIsVUFBVSxTQUFTLFFBQ25CLFdBQVcsU0FBUyxJQUFJLE1BQU0sU0FBUyxJQUN2QyxDQUFDLENBQUM7QUFBQSxJQUNSO0FBRUEsUUFBSSxZQUFZLFNBQVMsWUFBWSxTQUFVLFFBQVE7QUFDckQsYUFBTyxPQUFPLE1BQU0sRUFBRSxRQUFRLGFBQWEsR0FBRyxFQUFFLFlBQVk7QUFBQSxJQUM5RDtBQUVBLFFBQUksT0FBTyxTQUFTLE9BQU8sQ0FBQztBQUM1QixRQUFJLFNBQVMsU0FBUyxTQUFTO0FBQy9CLFFBQUksV0FBVyxTQUFTLFdBQVc7QUFFbkMsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDdEJqQjtBQUFBLHdGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksMkJBQTJCLDZDQUEyRDtBQUMxRixRQUFJLDhCQUE4QjtBQUNsQyxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLDRCQUE0QjtBQUNoQyxRQUFJLFdBQVc7QUFpQmYsSUFBQUQsUUFBTyxVQUFVLFNBQVUsU0FBUyxRQUFRO0FBQzFDLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksUUFBUSxRQUFRLEtBQUssZ0JBQWdCLGdCQUFnQjtBQUN6RCxVQUFJLFFBQVE7QUFDVixpQkFBU0M7QUFBQSxNQUNYLFdBQVcsUUFBUTtBQUNqQixpQkFBU0EsWUFBVyxNQUFNLEtBQUsscUJBQXFCLFFBQVEsQ0FBQyxDQUFDO0FBQUEsTUFDaEUsT0FBTztBQUNMLGlCQUFTQSxZQUFXLE1BQU0sS0FBS0EsWUFBVyxNQUFNLEVBQUU7QUFBQSxNQUNwRDtBQUNBLFVBQUksT0FBUSxNQUFLLE9BQU8sUUFBUTtBQUM5Qix5QkFBaUIsT0FBTyxHQUFHO0FBQzNCLFlBQUksUUFBUSxnQkFBZ0I7QUFDMUIsdUJBQWEseUJBQXlCLFFBQVEsR0FBRztBQUNqRCwyQkFBaUIsY0FBYyxXQUFXO0FBQUEsUUFDNUMsTUFBTyxrQkFBaUIsT0FBTyxHQUFHO0FBQ2xDLGlCQUFTLFNBQVMsU0FBUyxNQUFNLFVBQVUsU0FBUyxNQUFNLE9BQU8sS0FBSyxRQUFRLE1BQU07QUFFcEYsWUFBSSxDQUFDLFVBQVUsbUJBQW1CLFFBQVc7QUFDM0MsY0FBSSxPQUFPLGtCQUFrQixPQUFPLGVBQWdCO0FBQ3BELG9DQUEwQixnQkFBZ0IsY0FBYztBQUFBLFFBQzFEO0FBRUEsWUFBSSxRQUFRLFFBQVMsa0JBQWtCLGVBQWUsTUFBTztBQUMzRCxzQ0FBNEIsZ0JBQWdCLFFBQVEsSUFBSTtBQUFBLFFBQzFEO0FBQ0Esc0JBQWMsUUFBUSxLQUFLLGdCQUFnQixPQUFPO0FBQUEsTUFDcEQ7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDdERBO0FBQUEsMEZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksVUFBVTtBQUtkLElBQUFBLFFBQU8sVUFBVSxNQUFNLFdBQVcsU0FBUyxRQUFRLFVBQVU7QUFDM0QsYUFBTyxRQUFRLFFBQVEsTUFBTTtBQUFBLElBQy9CO0FBQUE7QUFBQTs7O0FDUkE7QUFBQSxrR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksVUFBVTtBQUVkLFFBQUksYUFBYTtBQUVqQixRQUFJLDJCQUEyQixPQUFPO0FBR3RDLFFBQUksb0NBQW9DLGVBQWUsQ0FBQyxXQUFZO0FBRWxFLFVBQUksU0FBUyxPQUFXLFFBQU87QUFDL0IsVUFBSTtBQUVGLGVBQU8sZUFBZSxDQUFDLEdBQUcsVUFBVSxFQUFFLFVBQVUsTUFBTSxDQUFDLEVBQUUsU0FBUztBQUFBLE1BQ3BFLFNBQVMsT0FBTztBQUNkLGVBQU8saUJBQWlCO0FBQUEsTUFDMUI7QUFBQSxJQUNGLEVBQUU7QUFFRixJQUFBQSxRQUFPLFVBQVUsb0NBQW9DLFNBQVUsR0FBRyxRQUFRO0FBQ3hFLFVBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxRQUFRLEVBQUUsVUFBVTtBQUNqRSxjQUFNLElBQUksV0FBVyw4QkFBOEI7QUFBQSxNQUNyRDtBQUFFLGFBQU8sRUFBRSxTQUFTO0FBQUEsSUFDdEIsSUFBSSxTQUFVLEdBQUcsUUFBUTtBQUN2QixhQUFPLEVBQUUsU0FBUztBQUFBLElBQ3BCO0FBQUE7QUFBQTs7O0FDMUJBO0FBQUEsOEdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLG1CQUFtQjtBQUV2QixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLFVBQUksS0FBSyxpQkFBa0IsT0FBTSxXQUFXLGdDQUFnQztBQUM1RSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ1BBO0FBQUE7QUFBQTtBQUNBLFFBQUlDLEtBQUk7QUFDUixRQUFJLFdBQVc7QUFDZixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLDJCQUEyQjtBQUMvQixRQUFJLFFBQVE7QUFFWixRQUFJLHNCQUFzQixNQUFNLFdBQVk7QUFDMUMsYUFBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLEVBQUUsUUFBUSxXQUFZLEdBQUcsQ0FBQyxNQUFNO0FBQUEsSUFDdEQsQ0FBQztBQUlELFFBQUksaUNBQWlDLFdBQVk7QUFDL0MsVUFBSTtBQUVGLGVBQU8sZUFBZSxDQUFDLEdBQUcsVUFBVSxFQUFFLFVBQVUsTUFBTSxDQUFDLEVBQUUsS0FBSztBQUFBLE1BQ2hFLFNBQVMsT0FBTztBQUNkLGVBQU8saUJBQWlCO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBRUEsUUFBSSxTQUFTLHVCQUF1QixDQUFDLCtCQUErQjtBQUlwRSxJQUFBQSxHQUFFLEVBQUUsUUFBUSxTQUFTLE9BQU8sTUFBTSxPQUFPLEdBQUcsUUFBUSxPQUFPLEdBQUc7QUFBQTtBQUFBLE1BRTVELE1BQU0sU0FBUyxLQUFLLE1BQU07QUFDeEIsWUFBSSxJQUFJLFNBQVMsSUFBSTtBQUNyQixZQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFDN0IsWUFBSSxXQUFXLFVBQVU7QUFDekIsaUNBQXlCLE1BQU0sUUFBUTtBQUN2QyxpQkFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLEtBQUs7QUFDakMsWUFBRSxHQUFHLElBQUksVUFBVSxDQUFDO0FBQ3BCO0FBQUEsUUFDRjtBQUNBLHVCQUFlLEdBQUcsR0FBRztBQUNyQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ3pDRDtBQUFBLHVHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGtCQUFrQjtBQUV0QixRQUFJLGdCQUFnQixnQkFBZ0IsYUFBYTtBQUNqRCxRQUFJLE9BQU8sQ0FBQztBQUVaLFNBQUssYUFBYSxJQUFJO0FBRXRCLElBQUFBLFFBQU8sVUFBVSxPQUFPLElBQUksTUFBTTtBQUFBO0FBQUE7OztBQ1JsQztBQUFBLHlGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHdCQUF3QjtBQUM1QixRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksZ0JBQWdCLGdCQUFnQixhQUFhO0FBQ2pELFFBQUksVUFBVTtBQUdkLFFBQUksb0JBQW9CLFdBQVcsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBVyxFQUFFLENBQUMsTUFBTTtBQUc1RSxRQUFJLFNBQVMsU0FBVSxJQUFJLEtBQUs7QUFDOUIsVUFBSTtBQUNGLGVBQU8sR0FBRyxHQUFHO0FBQUEsTUFDZixTQUFTLE9BQU87QUFBQSxNQUFjO0FBQUEsSUFDaEM7QUFHQSxJQUFBQSxRQUFPLFVBQVUsd0JBQXdCLGFBQWEsU0FBVSxJQUFJO0FBQ2xFLFVBQUksR0FBRyxLQUFLO0FBQ1osYUFBTyxPQUFPLFNBQVksY0FBYyxPQUFPLE9BQU8sU0FFbEQsUUFBUSxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsR0FBRyxhQUFhLE1BQU0sV0FBVyxNQUVwRSxvQkFBb0IsV0FBVyxDQUFDLEtBRS9CLFNBQVMsV0FBVyxDQUFDLE9BQU8sWUFBWSxXQUFXLEVBQUUsTUFBTSxJQUFJLGNBQWM7QUFBQSxJQUNwRjtBQUFBO0FBQUE7OztBQzdCQTtBQUFBLDJGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFFZCxRQUFJLFVBQVU7QUFFZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUksUUFBUSxRQUFRLE1BQU0sU0FBVSxPQUFNLElBQUksVUFBVSwyQ0FBMkM7QUFDbkcsYUFBTyxRQUFRLFFBQVE7QUFBQSxJQUN6QjtBQUFBO0FBQUE7OztBQ1JBO0FBQUEsMkdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUVqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLFVBQVU7QUFDM0MsVUFBSSxTQUFTLFNBQVUsT0FBTSxJQUFJLFdBQVcsc0JBQXNCO0FBQ2xFLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDTkE7QUFBQTtBQUFBO0FBQ0EsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxjQUFjO0FBQ2xCLFFBQUksV0FBVztBQUNmLFFBQUksMEJBQTBCO0FBRTlCLFFBQUksbUJBQW1CO0FBQ3ZCLFFBQUksMkJBQTJCLGlCQUFpQjtBQUNoRCxRQUFJLFNBQVMsWUFBWSx5QkFBeUIsTUFBTTtBQUN4RCxRQUFJLFVBQVUsWUFBWSx5QkFBeUIsUUFBUSxDQUFDO0FBQzVELFFBQUksVUFBVSxZQUFZLHlCQUF5QixPQUFPO0FBQzFELFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBQzlCLFFBQUksU0FBUyxJQUFJLGlCQUFpQixhQUFhO0FBRS9DLFdBQU8sUUFBUSxFQUFFLEtBQUssQ0FBQztBQUd2QixXQUFPLFFBQVEsRUFBRSxLQUFLLE1BQVM7QUFFL0IsUUFBSSxTQUFTLE9BQU8sT0FBTztBQUN6QixvQkFBYywwQkFBMEIsVUFBVSxTQUFVLE1BQW9CO0FBQzlFLFlBQUksU0FBUyxVQUFVO0FBQ3ZCLFlBQUksU0FBUyxTQUFTLElBQUksU0FBWSxVQUFVLENBQUM7QUFDakQsWUFBSSxVQUFVLFdBQVcsT0FBVyxRQUFPLFFBQVEsTUFBTSxJQUFJO0FBQzdELFlBQUksVUFBVSxDQUFDO0FBQ2YsZ0JBQVEsTUFBTSxTQUFVLEdBQUcsR0FBRztBQUM1QixlQUFLLFNBQVMsRUFBRSxLQUFLLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFBQSxRQUNwQyxDQUFDO0FBQ0QsZ0NBQXdCLFFBQVEsQ0FBQztBQUNqQyxZQUFJLE1BQU0sU0FBUyxJQUFJO0FBQ3ZCLFlBQUksUUFBUSxTQUFTLE1BQU07QUFDM0IsWUFBSSxRQUFRO0FBQ1osWUFBSSxTQUFTO0FBQ2IsWUFBSSxRQUFRO0FBQ1osWUFBSSxnQkFBZ0IsUUFBUTtBQUM1QixZQUFJO0FBQ0osZUFBTyxRQUFRLGVBQWU7QUFDNUIsa0JBQVEsUUFBUSxPQUFPO0FBQ3ZCLGNBQUksU0FBUyxNQUFNLFFBQVEsS0FBSztBQUM5QixvQkFBUTtBQUNSLG9CQUFRLE1BQU0sTUFBTSxHQUFHO0FBQUEsVUFDekIsTUFBTztBQUFBLFFBQ1Q7QUFDQSxlQUFPLFNBQVMsZUFBZTtBQUM3QixrQkFBUSxRQUFRLFFBQVE7QUFDeEIsY0FBSSxFQUFFLE1BQU0sUUFBUSxPQUFPLE1BQU0sVUFBVSxPQUFRLFFBQU8sTUFBTSxNQUFNLEtBQUssTUFBTSxLQUFLO0FBQUEsUUFDeEY7QUFBQSxNQUNGLEdBQUcsRUFBRSxZQUFZLE1BQU0sUUFBUSxLQUFLLENBQUM7QUFBQSxJQUN2QztBQUFBO0FBQUE7OztBQ2hEQTtBQUFBO0FBQUE7QUFDQSxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXO0FBQ2YsUUFBSSwwQkFBMEI7QUFFOUIsUUFBSSxtQkFBbUI7QUFDdkIsUUFBSSwyQkFBMkIsaUJBQWlCO0FBQ2hELFFBQUksU0FBUyxZQUFZLHlCQUF5QixNQUFNO0FBQ3hELFFBQUksT0FBTyxZQUFZLHlCQUF5QixHQUFHO0FBQ25ELFFBQUksU0FBUyxJQUFJLGlCQUFpQixLQUFLO0FBSXZDLFFBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssTUFBUyxHQUFHO0FBQ3JELG9CQUFjLDBCQUEwQixPQUFPLFNBQVMsSUFBSSxNQUFvQjtBQUM5RSxZQUFJLFNBQVMsVUFBVTtBQUN2QixZQUFJLFNBQVMsU0FBUyxJQUFJLFNBQVksVUFBVSxDQUFDO0FBQ2pELFlBQUksVUFBVSxXQUFXLE9BQVcsUUFBTyxLQUFLLE1BQU0sSUFBSTtBQUMxRCxZQUFJLFNBQVMsT0FBTyxNQUFNLElBQUk7QUFDOUIsZ0NBQXdCLFFBQVEsQ0FBQztBQUNqQyxZQUFJLFFBQVEsU0FBUyxNQUFNO0FBQzNCLFlBQUksUUFBUTtBQUNaLGVBQU8sUUFBUSxPQUFPLFFBQVE7QUFDNUIsY0FBSSxPQUFPLE9BQU8sTUFBTSxNQUFPLFFBQU87QUFBQSxRQUN4QztBQUFFLGVBQU87QUFBQSxNQUNYLEdBQUcsRUFBRSxZQUFZLE1BQU0sUUFBUSxLQUFLLENBQUM7QUFBQSxJQUN2QztBQUFBO0FBQUE7OztBQzNCQTtBQUFBLDBHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxpQkFBaUI7QUFFckIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxNQUFNLFlBQVk7QUFDbkQsVUFBSSxXQUFXLElBQUssYUFBWSxXQUFXLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDO0FBQ3RFLFVBQUksV0FBVyxJQUFLLGFBQVksV0FBVyxLQUFLLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQztBQUN0RSxhQUFPLGVBQWUsRUFBRSxRQUFRLE1BQU0sVUFBVTtBQUFBLElBQ2xEO0FBQUE7QUFBQTs7O0FDUkE7QUFBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksY0FBYztBQUNsQixRQUFJLHdCQUF3QjtBQUU1QixRQUFJLDJCQUEyQixnQkFBZ0I7QUFDL0MsUUFBSSxVQUFVLFlBQVkseUJBQXlCLE9BQU87QUFJMUQsUUFBSSxlQUFlLEVBQUUsVUFBVSwyQkFBMkI7QUFDeEQsNEJBQXNCLDBCQUEwQixRQUFRO0FBQUEsUUFDdEQsS0FBSyxTQUFTLE9BQU87QUFDbkIsY0FBSSxRQUFRO0FBQ1osa0JBQVEsTUFBTSxXQUFZO0FBQUU7QUFBQSxVQUFTLENBQUM7QUFDdEMsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFDQSxjQUFjO0FBQUEsUUFDZCxZQUFZO0FBQUEsTUFDZCxDQUFDO0FBQUEsSUFDSDtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BCQSxJQUFNQztBQUFOLElBcUNPQztBQXJDUCxJQUFBQyxpQkFBQUMsTUFBQTtFQUFBLDRDQUFBO0FBQUE7QUFBTUgsZ0JBQU4sTUFBZ0I7TUFDZkksVUFBVTtNQUNWLElBQUlDLFlBQVk7QUFDZixlQUFPQyxPQUFPQyxHQUFHQyxPQUFPQyxJQUFJLGFBQWE7TUFDMUM7TUFDQSxJQUFJQyxrQkFBa0I7QUFDckIsZUFBT0osT0FBT0MsR0FBR0MsT0FBT0MsSUFBSSxZQUFZLEVBQUVFLFFBQVEsTUFBTSxHQUFHO01BQzVEO01BQ0EsSUFBSUMsWUFBWTtBQUNmLGVBQU9OLE9BQU9DLEdBQUdDLE9BQU9DLElBQUksYUFBYTtNQUMxQztNQUNBLElBQUlJLGFBQWE7QUFDaEIsZUFBT1AsT0FBT0MsR0FBR0MsT0FBT0MsSUFBSSxjQUFjO01BQzNDO01BQ0EsSUFBSUssbUJBQW1CO0FBQ3RCLGVBQU9SLE9BQU9DLEdBQUdDLE9BQU9DLElBQUksaUJBQWlCO01BQzlDO01BQ0EsSUFBSU0sY0FBYztBQUNqQixlQUFPVCxPQUFPQyxHQUFHQyxPQUFPQyxJQUFJLGVBQWU7TUFDNUM7TUFDQSxJQUFJTyxhQUFhO0FBQ2hCLGVBQU9WLE9BQU9DLEdBQUdDLE9BQU9DLElBQUksY0FBYztNQUMzQztNQUNBLElBQUlRLFNBQVM7QUFDWixlQUFPWCxPQUFPQyxHQUFHQyxPQUFPQyxJQUFJLFVBQVU7TUFDdkM7TUFDQSxJQUFJUyxPQUFPO0FBQ1YsZUFBT1osT0FBT0MsR0FBR0MsT0FBT0MsSUFBSSxNQUFNO01BQ25DO01BQ0EsSUFBSVUsYUFBYTtBQUNoQixlQUFPYixPQUFPQyxHQUFHQyxPQUFPQyxJQUFJLGNBQWM7TUFDM0M7TUFDQSxJQUFJVyxTQUFTO0FBQ1osZUFBT2QsT0FBT0MsR0FBR0MsT0FBT0MsSUFBSSxVQUFVO01BQ3ZDO0lBQ0Q7QUFFT1Isd0JBQVEsSUFBSUQsVUFBVTtFQUFBO0FBQUEsQ0FBQTs7QUNyQzdCLElBSU1xQjtBQUpOLElBcUNPQztBQXJDUCxJQUFBQyxnQkFBQXBCLE1BQUE7RUFBQSwyQ0FBQTtBQUFBO0FBRUFELG1CQUFBO0FBRU1tQixlQUFXO01BQ2hCRyxNQUFBLEdBQUFDLE9BQVNDLFNBQVNDLFVBQVEsSUFBQSxFQUFBRixPQUFLQyxTQUFTRSxJQUFJLEVBQUFILE9BQUd4QixrQkFBVWUsWUFBVSxVQUFBO01BQzdEUCxJQUFJb0IsT0FBTztBQUFBLGVBQUFDLGtCQUFBLGFBQUE7QUFDaEIsZ0JBQU1DLE1BQU0sSUFBSUMsSUFBSVgsU0FBU0csSUFBSTtBQUNqQyxtQkFBQVMsS0FBQSxHQUFBQyxlQUFrQkMsT0FBT0MsS0FBS1AsS0FBSyxHQUFBSSxLQUFBQyxhQUFBRyxRQUFBSixNQUFHO0FBQXRDLGtCQUFXSyxNQUFBSixhQUFBRCxFQUFBO0FBQ1ZGLGdCQUFJUSxhQUFhQyxPQUFPRixLQUFLVCxNQUFNUyxHQUFHLENBQUM7VUFDeEM7QUFDQSxnQkFBTUcsV0FBQSxNQUFpQkMsTUFBTVgsS0FBSztZQUNqQ1ksYUFBYTtZQUNiQyxTQUFTO2NBQ1Isa0JBQUEsWUFBQW5CLE9BQThCeEIsa0JBQVVHLFNBQU8sSUFBQSxFQUFBcUIsT0FBS3hCLGtCQUFVbUIsUUFBTSxHQUFBO1lBQ3JFO1VBQ0QsQ0FBQztBQUNELGlCQUFBLE1BQWFxQixTQUFTSSxLQUFLO1FBQUEsQ0FBQSxFQUFBO01BQzVCO01BQ01DLEtBQUtDLFNBQVM7QUFBQSxlQUFBakIsa0JBQUEsYUFBQTtBQUNuQixnQkFBTUMsTUFBTSxJQUFJQyxJQUFJWCxTQUFTRyxJQUFJO0FBQ2pDLGdCQUFNd0IsT0FBTyxJQUFJQyxTQUFTO0FBQzFCLG1CQUFBQyxNQUFBLEdBQUFDLGtCQUEyQmhCLE9BQU9pQixRQUFRTCxPQUFPLEdBQUFHLE1BQUFDLGdCQUFBZCxRQUFBYSxPQUFHO0FBQXBELGtCQUFXLENBQUNaLEtBQUtlLEtBQUssSUFBQUYsZ0JBQUFELEdBQUE7QUFDckJGLGlCQUFLUixPQUFPRixLQUFLZSxLQUFLO1VBQ3ZCO0FBQ0EsZ0JBQU1aLFdBQUEsTUFBaUJDLE1BQU1YLEtBQUs7WUFDakN1QixRQUFRO1lBQ1JDLE1BQU1QO1lBQ05MLGFBQWE7WUFDYkMsU0FBUztjQUNSLGtCQUFBLFlBQUFuQixPQUE4QnhCLGtCQUFVRyxTQUFPLElBQUEsRUFBQXFCLE9BQUt4QixrQkFBVW1CLFFBQU0sR0FBQTtZQUNyRTtVQUNELENBQUM7QUFDRCxpQkFBQSxNQUFhcUIsU0FBU0ksS0FBSztRQUFBLENBQUEsRUFBQTtNQUM1QjtJQUNEO0FBRU92Qix1QkFBUUQ7RUFBQTtBQUFBLENBQUE7O0FDckNmLElBRU1tQztBQUZOLElBK0VPQztBQS9FUCxJQUFBQyxZQUFBdkQsTUFBQTtFQUFBLHVDQUFBO0FBQUE7QUFFTXFELFdBQU4sTUFBVztNQUNWRztNQUNBQyxXQUFXLENBQUM7TUFDWkMsbUJBQW1CLENBQUE7TUFDbkJDLGNBQWM7QUFDYixZQUFJSDtBQUNKLFlBQUk7QUFDSEEscUJBQVdJLEtBQUtDLE1BQU1DLGFBQWEsbUJBQW1CLENBQUMsRUFBRSxVQUFVLEtBQUtDLFVBQVVQLFNBQVNRLFlBQVk7UUFDeEcsUUFBUTtBQUNQUixzQkFBWU8sVUFBVVAsWUFBWU8sVUFBVUUsaUJBQzFDekQsUUFBUSxjQUFjLEVBQUUsRUFDeEJ3RCxZQUFZO1FBQ2Y7QUFDQSxhQUFLUixXQUFXQTtBQUVoQixZQUFJO0FBQ0gsZ0JBQU1VLFlBQVlOLEtBQUtDLE1BQU1DLGFBQWFLLFFBQVEsb0JBQW9CLENBQUM7QUFDdkUsbUJBQUFDLE1BQUEsR0FBQUMsZ0JBQWtCckMsT0FBT0MsS0FBS2lDLFNBQVMsR0FBQUUsTUFBQUMsY0FBQW5DLFFBQUFrQyxPQUFHO0FBQTFDLGtCQUFXakMsTUFBQWtDLGNBQUFELEdBQUE7QUFDVixpQkFBS1gsU0FBU3RCLEdBQUcsSUFBSStCLFVBQVUvQixHQUFHO1VBQ25DO1FBQ0QsUUFBUTtBQUVQMkIsdUJBQWFRLFFBQVEsc0JBQXNCLElBQUk7UUFDaEQ7TUFDRDtNQUNBQyxVQUFVcEMsS0FBS3FDLGVBQWUsQ0FBQSxHQUFJO0FBQ2pDLFlBQUlDLFNBQVM7QUFDYixZQUFJLEtBQUtqQixZQUFZLEtBQUtDLFVBQVU7QUFDbkMsY0FBSXRCLE9BQU8sS0FBS3NCLFNBQVMsS0FBS0QsUUFBUSxHQUFHO0FBQ3hDaUIscUJBQVMsS0FBS2hCLFNBQVMsS0FBS0QsUUFBUSxFQUFFckIsR0FBRztVQUMxQyxPQUFPO0FBRU4saUJBQUt1QyxhQUFhLEtBQUtsQixRQUFRO0FBQy9CLGdCQUFJckIsT0FBTyxLQUFLc0IsU0FBUyxPQUFPLEdBQUc7QUFFbENnQix1QkFBUyxLQUFLaEIsU0FBUyxPQUFPLEVBQUV0QixHQUFHO1lBQ3BDLE9BQU87QUFDTnNDLHVCQUFTdEM7WUFDVjtVQUNEO1FBQ0QsT0FBTztBQUNOLGVBQUt1QyxhQUFhLEtBQUtsQixRQUFRO1FBQ2hDO0FBRUEsWUFBSWdCLGFBQWF0QyxTQUFTLEdBQUc7QUFBQSxjQUFBeUMsWUFBQUMsMkJBQ09KLGFBQWF2QixRQUFRLENBQUEsR0FBQTRCO0FBQUEsY0FBQTtBQUF4RCxpQkFBQUYsVUFBQUcsRUFBQSxHQUFBLEVBQUFELFFBQUFGLFVBQUFJLEVBQUEsR0FBQUMsUUFBMkQ7QUFBQSxvQkFBaEQsQ0FBQ0MsT0FBT0MsV0FBVyxJQUFBTCxNQUFBM0I7QUFDN0J1Qix1QkFBU0EsT0FBT2pFLFFBQUEsSUFBQWMsT0FBWTJELFFBQVEsQ0FBQyxHQUFJQyxXQUFXO1lBQ3JEO1VBQUEsU0FBQUMsS0FBQTtBQUFBUixzQkFBQVMsRUFBQUQsR0FBQTtVQUFBLFVBQUE7QUFBQVIsc0JBQUFVLEVBQUE7VUFBQTtRQUNEO0FBQ0EsZUFBT1o7TUFDUjtNQUNNQyxhQUFhbEIsVUFBVTtBQUFBLFlBQUE4QixRQUFBO0FBQUEsZUFBQTNELGtCQUFBLGFBQUE7QUFDNUIsY0FBSTJELE1BQUs1QixpQkFBaUI2QixTQUFTL0IsUUFBUSxHQUFHO0FBRTdDO1VBQ0Q7QUFDQSxjQUFJO0FBQ0gsa0JBQU1sQixXQUFBLE9BQVcsTUFDVkMsTUFBQSxpRkFBQWpCLE9BQzRFa0MsVUFBUSxPQUFBLENBQzFGLEdBQ0NkLEtBQUs7QUFDUCxrQkFBTThDLGFBQWExQixhQUFhSyxRQUFRLDBCQUEwQixLQUFLO0FBQ3ZFbUIsa0JBQUs1QixpQkFBaUIrQixLQUFLakMsUUFBUTtBQUNuQyxnQkFBSWxCLFNBQVNvRCxjQUFjRixjQUFjLEVBQUVoQyxZQUFZOEIsTUFBSzdCLFdBQVc7QUFFdEVrQyxzQkFBUUMsS0FBQSxVQUFBdEUsT0FBZWtDLFVBQVEsc0JBQUEsRUFBQWxDLE9BQXVCZ0IsU0FBU29ELFNBQVMsQ0FBRTtBQUMxRUosb0JBQUs3QixTQUFTRCxRQUFRLElBQUlsQjtBQUUxQndCLDJCQUFhUSxRQUFRLHNCQUFzQlYsS0FBS2lDLFVBQVVQLE1BQUs3QixRQUFRLENBQUM7WUFDekU7VUFDRCxRQUFRO1VBRVI7UUFBQSxDQUFBLEVBQUE7TUFDRDtJQUNEO0FBRU9ILG1CQUFRLElBQUlELEtBQUs7RUFBQTtBQUFBLENBQUE7O0FDL0V4QixJQUlNeUM7QUFKTixJQVdNQztBQVhOLElBK0JPQztBQS9CUCxJQUFBQyxXQUFBakcsTUFBQTtFQUFBLHNDQUFBO0FBQUE7QUFFQXVELGNBQUE7QUFFTXVDLG9CQUFOLGNBQTRCSSxNQUFNO01BQ2pDdkMsWUFBWXdDLFNBQVNDLE1BQU07QUFDMUIsY0FBTUQsT0FBTztBQUNiLGFBQUtDLE9BQU9BO01BQ2I7SUFDRDtBQUVNTCxVQUFNO01BQ1hNLE1BQU1GLFVBQVUsSUFBSTtBQUNuQlIsZ0JBQVFVLE1BQUEsb0JBQUEvRSxPQUEwQjZFLE9BQU8sQ0FBRTtNQUM1QztNQUNBUCxLQUFLTyxVQUFVLElBQUk7QUFDbEJSLGdCQUFRQyxLQUFBLG1CQUFBdEUsT0FBd0I2RSxPQUFPLENBQUU7TUFDMUM7TUFDQUcsTUFBTUMsV0FBV0MsV0FBVyxDQUFBLEdBQUk7QUFDL0IsWUFBSUMsV0FBV25ELGFBQUtpQixVQUFVZ0MsU0FBUztBQUN2QyxZQUFJQyxTQUFTdEUsU0FBUyxHQUFHO0FBQUEsY0FBQXdFLGFBQUE5QiwyQkFFSDRCLFNBQVN2RCxRQUFRLENBQUEsR0FBQTBEO0FBQUEsY0FBQTtBQUF0QyxpQkFBQUQsV0FBQTVCLEVBQUEsR0FBQSxFQUFBNkIsU0FBQUQsV0FBQTNCLEVBQUEsR0FBQUMsUUFBeUM7QUFBQSxvQkFBOUIsQ0FBQzRCLEdBQUdDLENBQUMsSUFBQUYsT0FBQXpEO0FBQ2Z1RCx5QkFBV0EsU0FBU2pHLFFBQVEsSUFBSXNHLE9BQUEsS0FBQXhGLE9BQVlzRixJQUFJLENBQUMsR0FBSSxJQUFJLEdBQUdDLENBQUM7WUFDOUQ7VUFBQSxTQUFBMUIsS0FBQTtBQUFBdUIsdUJBQUF0QixFQUFBRCxHQUFBO1VBQUEsVUFBQTtBQUFBdUIsdUJBQUFyQixFQUFBO1VBQUE7UUFDRDtBQUNBTSxnQkFBUVcsTUFBQSxvQkFBQWhGLE9BQTBCbUYsUUFBUSxDQUFFO0FBQzVDLGNBQU0sSUFBSVgsY0FBQSxHQUFBeEUsT0FBaUJtRixRQUFRLEdBQUlGLFNBQVM7TUFDakQ7SUFDRDtBQUVPUCxrQkFBUUQ7RUFBQTtBQUFBLENBQUE7O0FDL0JmLElBT01nQjtBQVBOLElBOExPQztBQTlMUCxJQUFBQyxZQUFBakgsTUFBQTtFQUFBLDBDQUFBO0FBQUE7QUFFQW9CLGtCQUFBO0FBQ0E2RSxhQUFBO0FBQ0ExQyxjQUFBO0FBQ0F4RCxtQkFBQTtBQUVNZ0gsV0FBTixNQUFXO01BQ1ZHLGdCQUFnQixDQUFDOzs7Ozs7O01BT1hDLGVBQWU7QUFBQSxlQUFBeEYsa0JBQUEsYUFBQTtBQUdwQixnQkFBTVcsV0FBQSxNQUFpQm5CLGlCQUFTYixJQUFJO1lBQ25DUSxRQUFRO1lBQ1JzRyxNQUFNO1lBQ05DLFFBQVE7VUFDVCxDQUFDO0FBQ0QsY0FDQy9FLFNBQVNaLFNBQ1RZLFNBQVNaLE1BQU00RixVQUNmaEYsU0FBU1osTUFBTTRGLE9BQU9DLGFBQ3RCakYsU0FBU1osTUFBTTRGLE9BQU9DLGNBQWMsT0FDbkM7QUFDRCxtQkFBT2pGLFNBQVNaLE1BQU00RixPQUFPQztVQUM5QjtBQUNBLGlCQUFPdkIsWUFBSU0sTUFBTSx1QkFBdUI7UUFBQSxDQUFBLEVBQUE7TUFDekM7Ozs7Ozs7OztNQVNNa0IsWUFBWTtRQUFDQztRQUFPL0c7TUFBVSxHQUFHO0FBQUEsWUFBQWdILFNBQUE7QUFBQSxlQUFBL0Ysa0JBQUEsYUFBQTtBQUN0QyxjQUFJO0FBQ0gsa0JBQU1nRyxTQUFTO2NBQ2Q3RyxRQUFRO2NBQ1I4RyxNQUFNO2NBQ05DLFFBQVE7Y0FDUlIsUUFBUTtZQUNUO0FBQ0EsZ0JBQUkzRyxZQUFZO0FBQ2ZpSCxxQkFBT0csU0FBU3BIO1lBQ2pCLFdBQVcrRyxPQUFPO0FBQ2pCLGtCQUFJQyxPQUFLUixjQUFjTyxLQUFLLEdBQUc7QUFFOUIsdUJBQU87a0JBQ05NLFdBQVdMLE9BQUtSLGNBQWNPLEtBQUssRUFBRU07a0JBQ3JDckgsWUFBWWdILE9BQUtSLGNBQWNPLEtBQUssRUFBRU87Z0JBQ3ZDO2NBQ0Q7QUFDQUwscUJBQU9NLFNBQVNSO1lBQ2pCO0FBQ0Esa0JBQU1uRixXQUFBLE1BQWlCbkIsaUJBQVNiLElBQUlxSCxNQUFNO0FBQzFDLGdCQUFJckYsU0FBU1osU0FBU1ksU0FBU1osTUFBTXdHLE9BQU87QUFDM0Msa0JBQUlsRyxPQUFPQyxLQUFLSyxTQUFTWixNQUFNd0csS0FBSyxFQUFFLENBQUMsTUFBTSxNQUFNO0FBR2xELHVCQUFPLENBQUM7Y0FDVDtBQUNBLG9CQUFNQyxXQUFXN0YsU0FBU1osTUFBTXdHLE1BQU1sRyxPQUFPQyxLQUFLSyxTQUFTWixNQUFNd0csS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFRSxVQUFVLENBQUM7QUFDdkYsa0JBQUlYLE9BQU87QUFDVkMsdUJBQUtSLGNBQWNPLEtBQUssSUFBSVU7Y0FDN0I7QUFDQSxxQkFBTztnQkFDTkosV0FBV0ksU0FBU0o7Z0JBQ3BCckgsWUFBWXlILFNBQVNIO2NBQ3RCO1lBQ0Q7VUFDRCxRQUFRO0FBQ1BoQyx3QkFBSU0sTUFBTSx1QkFBdUI7VUFDbEM7UUFBQSxDQUFBLEVBQUE7TUFDRDs7Ozs7Ozs7Ozs7TUFXTStCLFlBQVk7UUFBQ0M7UUFBUzVIO01BQVUsR0FBRztBQUFBLGVBQUFpQixrQkFBQSxhQUFBO0FBQ3hDLGNBQUk7QUFDSCxrQkFBTVcsV0FBQSxPQUFXLE1BQ1ZDLE1BQUEsR0FBQWpCLE9BQ0ZDLFNBQVNDLFVBQVEsSUFBQSxFQUFBRixPQUFLQyxTQUFTRSxJQUFJLEVBQUFILE9BQUd4QixrQkFBVWUsWUFBVSxtQkFBQSxFQUFBUyxPQUFvQlosWUFBVSxXQUFBLEVBQUFZLE9BQVlnSCxTQUFPLGFBQUEsQ0FDL0csR0FDQ0MsS0FBSztBQUNQLG1CQUFPakc7VUFDUixRQUFRO0FBQ1AwRCx3QkFBSU0sTUFBTSxzQkFBc0I7VUFDakM7UUFBQSxDQUFBLEVBQUE7TUFDRDs7Ozs7Ozs7O01BU01rQyxjQUFjQyxVQUFVaEIsUUFBUSxJQUFJcEgsU0FBUyxDQUFDLEdBQUc7QUFBQSxlQUFBc0Isa0JBQUEsYUFBQTtBQUN0RCxjQUFJO0FBQ0gsa0JBQU1XLFdBQUEsTUFBaUJuQixpQkFBU3dCLEtBQUs7Y0FDcEMwRSxRQUFRO2NBQ1J2RyxRQUFRO2NBQ1J5SCxNQUFNRTtjQUNOaEI7Y0FDQWlCLEtBQUs7WUFDTixDQUFDO0FBQ0QsZ0JBQUlwRyxTQUFTdUIsU0FBU3ZCLFNBQVN1QixNQUFNMEUsTUFBTTtBQUMxQyxxQkFBT2pHLFNBQVN1QixNQUFNMEUsS0FBSyxHQUFHO1lBQy9CO1VBQ0QsUUFBUTtBQUNQdkMsd0JBQUlNLE1BQU0scUJBQXFCO1VBQ2hDO1FBQUEsQ0FBQSxFQUFBO01BQ0Q7Ozs7Ozs7Ozs7OztNQWFNcUMsS0FBSztRQUFDbEI7UUFBT21CO1FBQVNDO1FBQVdkO1FBQVcxSCxTQUFTLENBQUM7UUFBR3lJLG1CQUFtQixDQUFDO01BQUMsSUFBSSxDQUFDLEdBQUc7QUFBQSxlQUFBbkgsa0JBQUEsYUFBQTtBQUMzRixjQUFJVztBQUNKLGNBQUk7QUFDSEEsdUJBQUEsTUFBaUJuQixpQkFBU3dCLEtBQUs7Y0FDOUI3QixRQUFRO2NBQ1J1RyxRQUFRO2NBQ1JrQixNQUFNSztjQUNObkI7Y0FDQXNCLE9BQU9GO2NBQ1AsR0FBSWQsWUFBWTtnQkFBQ2lCLGVBQWVqQjtjQUFTLElBQUksQ0FBQztjQUM5QyxHQUFHMUg7Y0FDSCxHQUFHeUk7WUFDSixDQUFDO1VBQ0YsUUFBUTtBQUNQOUMsd0JBQUlNLE1BQU0sb0JBQW9CO1VBQy9CO0FBQ0EsY0FBSWhFLFNBQVNxRyxNQUFNO0FBQ2xCLGdCQUFJckcsU0FBU3FHLEtBQUtsRSxXQUFXLFdBQVc7QUFDdkMscUJBQU87WUFDUjtBQUNBLGdCQUFJbkMsU0FBU3FHLEtBQUt2QyxNQUFNO0FBRXZCLG9CQUFNLElBQUlGLE1BQUEsNkJBQUE1RSxPQUNZZ0MsYUFBS2lCLFVBQVUsaUJBQWlCLEdBQUMsR0FBQSxFQUFBakQsT0FBSWdCLFNBQVNxRyxLQUFLL0MsS0FBS3BGLFFBQVEseUJBQXlCLEVBQUUsR0FBQywyRkFBQSxFQUFBYyxPQUUzRGdCLFNBQVNxRyxLQUFLTSxTQUFPLDhCQUFBLENBQzNEO1lBQ2xCLE9BQU87QUFDTmpELDBCQUFJTSxNQUFNLG9CQUFvQjtZQUMvQjtVQUNELFdBQVdoRSxTQUFTZ0UsU0FBU2hFLFNBQVNnRSxNQUFNRixNQUFNO0FBQ2pESix3QkFBSU0sTUFBTWhFLFNBQVNnRSxNQUFNRixJQUFJO1VBQzlCLFdBQVc5RCxTQUFTOEQsTUFBTTtBQUN6Qkosd0JBQUlNLE1BQU1oRSxTQUFTOEQsSUFBSTtVQUN4QixPQUFPO0FBQ05KLHdCQUFJTSxNQUFNLG9CQUFvQjtVQUMvQjtRQUFBLENBQUEsRUFBQTtNQUNEOzs7Ozs7O01BUU00QywyQkFBMkJ6QixPQUFPO0FBQUEsWUFBQTBCLFNBQUE7QUFBQSxlQUFBeEgsa0JBQUEsYUFBQTtBQUN2QyxnQkFBTTtZQUFDakI7VUFBVSxJQUFBLE1BQVV5SSxPQUFLM0IsWUFBWTtZQUFDQztVQUFLLENBQUM7QUFDbkQsaUJBQU8vRztRQUFBLENBQUEsRUFBQTtNQUNSO0lBQ0Q7QUFFT3NHLG1CQUFRLElBQUlELEtBQUs7RUFBQTtBQUFBLENBQUE7O0FDOUx4QixJQUtNcUM7QUFMTixJQXFJT0M7QUFySVAsSUFBQUMsWUFBQXRKLE1BQUE7RUFBQSxzQ0FBQTtBQUFBO0FBRUFpSCxjQUFBO0FBQ0FoQixhQUFBO0FBRU1tRCxXQUFOLE1BQVc7TUFDVnJCO01BQ0FjO01BQ0FwQjtNQUNBL0c7TUFFQTZJLFNBQVM7TUFDVEMsWUFBWTtNQUVaQyxlQUFlLENBQUM7Ozs7O01BTWhCOUYsWUFBWTtRQUFDOEQ7UUFBTy9HO01BQVUsR0FBRztBQUNoQyxhQUFLK0csUUFBUUE7QUFDYixhQUFLL0csYUFBYUE7QUFDbEIsYUFBSzhJLFlBQVksQ0FBQzlJO01BQ25COzs7Ozs7O01BUU1nSixLQUFLO1FBQUNiLFlBQVk7TUFBRSxJQUFJLENBQUMsR0FBRztBQUFBLFlBQUFjLFNBQUE7QUFBQSxlQUFBaEksa0JBQUEsYUFBQTtBQUNqQyxnQkFBTWlJLGFBQWEsQ0FBQ0QsT0FBS0UsYUFBYSxDQUFDO0FBQ3ZDLGNBQUksQ0FBQ2hCLFdBQVc7QUFDZmUsdUJBQVduRSxLQUFLa0UsT0FBS3hDLGFBQWEsQ0FBQztVQUNwQztBQUNBLGdCQUFNMkMsUUFBUUMsSUFBSUgsVUFBVTtBQUM1QkQsaUJBQUtKLFNBQVM7QUFDZHZELHNCQUFJSixLQUFBLDJCQUFBdEUsT0FBZ0NxSSxPQUFLbEMsT0FBSyxHQUFBLEVBQUFuRyxPQUFJcUksT0FBS2pKLFlBQVUsWUFBQSxDQUFZO1FBQUEsQ0FBQSxFQUFBO01BQzlFOzs7OztNQU1NeUcsZUFBZTtBQUFBLFlBQUE2QyxTQUFBO0FBQUEsZUFBQXJJLGtCQUFBLGFBQUE7QUFDcEIsZ0JBQU12QixHQUFHNkosT0FBT0MsTUFBTSxnQkFBZ0I7QUFDdEMsY0FBSTlKLEdBQUcrSixLQUFLN0MsT0FBT2hILElBQUksV0FBVyxLQUFLRixHQUFHK0osS0FBSzdDLE9BQU9oSCxJQUFJLFdBQVcsTUFBTSxPQUFPO0FBR2pGMEosbUJBQUtuQixZQUFZekksR0FBRytKLEtBQUs3QyxPQUFPaEgsSUFBSSxXQUFXO0FBQy9DO1VBQ0Q7QUFHQTBKLGlCQUFLbkIsWUFBQSxNQUFrQjdCLGFBQUtHLGFBQWE7UUFBQSxDQUFBLEVBQUE7TUFDMUM7Ozs7O01BTU0wQyxlQUFlO0FBQUEsWUFBQU8sU0FBQTtBQUFBLGVBQUF6SSxrQkFBQSxhQUFBO0FBQ3BCLGdCQUFNO1lBQUNvRztZQUFXckg7VUFBVSxJQUFBLE1BQVVzRyxhQUFLUSxZQUFZO1lBQ3REOUcsWUFBWTBKLE9BQUsxSjtZQUNqQitHLE9BQU8yQyxPQUFLM0M7VUFDYixDQUFDO0FBQ0QyQyxpQkFBS3JDLFlBQVlBO0FBQ2pCLGNBQUlySCxZQUFZO0FBQ2YwSixtQkFBSzFKLGFBQWFBO0FBQ2xCMEosbUJBQUtaLFlBQVk7VUFDbEI7UUFBQSxDQUFBLEVBQUE7TUFDRDs7Ozs7Ozs7TUFTTW5CLFlBQVk7UUFBQ0MsVUFBVTtNQUFFLElBQUksQ0FBQyxHQUFHO0FBQUEsWUFBQStCLFNBQUE7QUFBQSxlQUFBMUksa0JBQUEsYUFBQTtBQUN0QyxnQkFBTTJJLE1BQU1oQyxZQUFZLEtBQUssS0FBS0E7QUFDbEMsY0FBSStCLE9BQUtaLGFBQWFhLEdBQUcsR0FBRztBQUMzQixtQkFBT0QsT0FBS1osYUFBYWEsR0FBRztVQUM3QjtBQUNBLGdCQUFNQyxXQUFBLE1BQWlCdkQsYUFBS3FCLFlBQVk7WUFDdkNDLFNBQVNnQztZQUNUNUosWUFBWTJKLE9BQUszSjtVQUNsQixDQUFDO0FBQ0RzRixzQkFBSUosS0FBQSxlQUFBdEUsT0FBb0IrSSxPQUFLNUMsT0FBSyxHQUFBLEVBQUFuRyxPQUFJZ0gsU0FBTyxXQUFBLENBQVc7QUFDeEQrQixpQkFBS1osYUFBYWEsR0FBRyxJQUFJQztBQUN6QixpQkFBT0E7UUFBQSxDQUFBLEVBQUE7TUFDUjs7Ozs7O01BT00vQixjQUFjQyxVQUFVO0FBQUEsWUFBQStCLFNBQUE7QUFBQSxlQUFBN0ksa0JBQUEsYUFBQTtBQUM3QixpQkFBT3FGLGFBQUt3QixjQUFjQyxVQUFVK0IsT0FBSy9DLEtBQUs7UUFBQSxDQUFBLEVBQUE7TUFDL0M7Ozs7Ozs7TUFRTWtCLEtBQUsvRixTQUFTO0FBQUEsWUFBQTZILFNBQUE7QUFBQSxlQUFBOUksa0JBQUEsYUFBQTtBQUNuQixjQUFJLENBQUM4SSxPQUFLNUIsV0FBVztBQUNwQjdDLHdCQUFJTSxNQUFNLHVCQUF1QjtBQUNqQztVQUNEO0FBQ0EsY0FBSSxDQUFDbUUsT0FBSzFDLGFBQWEsQ0FBQzBDLE9BQUtqQixXQUFXO0FBRXZDeEQsd0JBQUlNLE1BQU0sdUJBQXVCO0FBQ2pDO1VBQ0Q7QUFDQSxpQkFBT1UsYUFBSzJCLEtBQUs7WUFDaEJsQixPQUFPZ0QsT0FBS2hEO1lBQ1pvQixXQUFXNEIsT0FBSzVCO1lBQ2hCLEdBQUk0QixPQUFLMUMsWUFBWTtjQUFDQSxXQUFXMEMsT0FBSzFDO1lBQVMsSUFBSSxDQUFDO1lBQ3BELEdBQUduRjtZQUNIa0csa0JBQWtCO2NBQ2pCLEdBQUkyQixPQUFLakIsWUFBWTtnQkFBQ2tCLFlBQVlELE9BQUtqQjtjQUFTLElBQUksQ0FBQztZQUN0RDtVQUNELENBQUM7UUFBQSxDQUFBLEVBQUE7TUFDRjtJQUNEO0FBRU9ILG1CQUFRRDtFQUFBO0FBQUEsQ0FBQTs7QUNySWYsSUFFTXVCO0FBRk4sSUErRU9DO0FBL0VQLElBQUFDLG9CQUFBN0ssTUFBQTtFQUFBLDhDQUFBO0FBQUE7QUFFTTJLLG1CQUFOLE1BQW1CO01BQ2xCaEgsY0FBYztBQUNiLGFBQUsrRixLQUFLO01BQ1g7TUFDQUEsT0FBTztBQUNOb0IsVUFBRSxNQUFNLEVBQUV6SSxPQUFPLGtDQUFrQztNQUNwRDtNQUNBMEksUUFBUXhDLE9BQU8sTUFBTXlDLE9BQU8sV0FBV0MsV0FBV0EsTUFBTTtNQUFDLEdBQUc7QUFDM0RILFVBQUUsa0JBQWtCLEVBQUV6SSxPQUNyQnlJLEVBQUUsT0FBTyxFQUNQSSxTQUFTLHdCQUF3QixFQUNqQ0EsU0FBQSwwQkFBQTVKLE9BQW1DMEosSUFBSSxDQUFFLEVBQ3pDM0ksT0FBQSxTQUFBZixPQUFnQmlILE1BQUksU0FBQSxDQUFTLENBQ2hDO0FBQ0F1QyxVQUFFLGtCQUFrQixFQUFFSyxLQUFLLHlCQUF5QixFQUFFQyxLQUFLLEVBQUVDLE9BQU8sR0FBRztBQUN2RSxhQUFLQyxLQUFLO0FBQ1YsYUFBS0MsTUFBTTtBQUNYTixpQkFBU0gsRUFBRSxrQkFBa0IsRUFBRUssS0FBSyx5QkFBeUIsRUFBRUMsS0FBSyxDQUFDO01BQ3RFO01BQ0FFLE9BQU87QUFDTixjQUFNRSxRQUFPO0FBQ2JWLFVBQUUseUJBQXlCLEVBQUVXLEdBQUcsYUFBYSxXQUFZO0FBQ3hERCxVQUFBQSxNQUFLRSxVQUFVWixFQUFFLElBQUksQ0FBQztRQUN2QixDQUFDO01BQ0Y7TUFDQWEsUUFBUXBELE1BQU0wQyxVQUFVO0FBQ3ZCLGFBQUtGLFFBQVF4QyxNQUFNLFdBQVcwQyxRQUFRO01BQ3ZDO01BQ0FoQyxRQUFRVixNQUFNMEMsVUFBVTtBQUN2QixhQUFLRixRQUFReEMsTUFBTSxXQUFXMEMsUUFBUTtNQUN2QztNQUNBM0UsTUFBTWlDLE1BQU0wQyxVQUFVO0FBQ3JCLGFBQUtGLFFBQVF4QyxNQUFNLFNBQVMwQyxRQUFRO01BQ3JDO01BQ0FNLFFBQVE7QUFDUCxZQUFJVCxFQUFFLHlCQUF5QixFQUFFNUksVUFBVSxJQUFJO0FBQzlDNEksWUFBRSxrQkFBa0IsRUFDbEJjLFNBQVMsRUFDVEMsTUFBTSxFQUNOQyxRQUFRLEtBQUssV0FBWTtBQUN6QmhCLGNBQUUsSUFBSSxFQUFFaUIsT0FBTztVQUNoQixDQUFDO0FBQ0ZDLHFCQUFXLEtBQUtULE9BQU8sR0FBRztRQUMzQjtNQUNEO01BQ0FVLE1BQU01RyxHQUFHO0FBQ1J5RixVQUFFLHlCQUF5QixFQUFFb0IsS0FBSyxTQUFVdEYsR0FBRztBQUM5QyxjQUFJLE9BQU92QixNQUFNLFlBQVk7QUFDNUIsa0JBQU04RyxNQUFNckIsRUFBRSxJQUFJO0FBQ2xCa0IsdUJBQVcsTUFBTTtBQUNoQjNHLGdCQUFFOEcsR0FBRztZQUNOLEdBQUcsTUFBTXZGLENBQUM7VUFDWCxPQUFPO0FBQ05rRSxjQUFFLElBQUksRUFDSnNCLE1BQU14RixJQUFJLEdBQUcsRUFDYmtGLFFBQVEsUUFBUSxXQUFZO0FBQzVCaEIsZ0JBQUUsSUFBSSxFQUFFaUIsT0FBTztZQUNoQixDQUFDO1VBQ0g7UUFDRCxDQUFDO01BQ0Y7TUFDQUwsVUFBVVMsS0FBS0UsT0FBTztBQUNyQkYsWUFBSUcsSUFBSSxZQUFZLFVBQVU7QUFDOUJILFlBQUlJLFFBQ0g7VUFDQ0MsTUFBTTtRQUNQLEdBQ0FILFNBQVMsS0FDVCxXQUFZO0FBQ1h2QixZQUFFLElBQUksRUFBRWdCLFFBQVEsUUFBUSxXQUFZO0FBQ25DaEIsY0FBRSxJQUFJLEVBQUVpQixPQUFPO1VBQ2hCLENBQUM7UUFDRixDQUNEO01BQ0Q7SUFDRDtBQUVPbkIsMkJBQVEsSUFBSUQsYUFBYTtFQUFBO0FBQUEsQ0FBQTs7QUMvRWhDLElBRU04QjtBQUZOLElBT09DO0FBUFAsSUFBQUMsYUFBQTNNLE1BQUE7RUFBQSx3Q0FBQTtBQUFBO0FBRU15TSxZQUFTRyxVQUFTO0FBQ3ZCLGFBQU8sSUFBSTlDLFFBQVMrQyxhQUFZO0FBQy9CLGVBQU9iLFdBQVdhLFNBQVNELElBQUk7TUFDaEMsQ0FBQztJQUNGO0FBQ09GLG9CQUFRRDtFQUFBO0FBQUEsQ0FBQTs7QUNFUixTQUFTSyxXQUFXbEwsS0FBSztBQUMvQixRQUFNbUwsTUFBTTtBQUNaLFFBQU1wRixTQUFTLENBQUM7QUFDaEIsTUFBSXFGO0FBQ0osU0FBUUEsUUFBUUQsSUFBSUUsS0FBS3JMLEdBQUcsR0FBSTtBQUMvQixRQUFJO0FBQ0grRixhQUFPcUYsTUFBTSxDQUFDLENBQUMsSUFBSUUsbUJBQW1CRixNQUFNLENBQUMsQ0FBQztJQUMvQyxRQUFRO0FBQ1ByRixhQUFPcUYsTUFBTSxDQUFDLENBQUMsSUFBSUEsTUFBTSxDQUFDO0lBQzNCO0VBQ0Q7QUFDQSxTQUFPckY7QUFDUjtBQXJCQSxJQUFBd0YsZUFBQW5OLE1BQUE7RUFBQSwwQ0FBQTtBQUFBO0VBQUE7QUFBQSxDQUFBOztBQ0FBLElBU01vTjtBQVROLElBMGtCT0M7QUExa0JQLElBQUFDLFVBQUF0TixNQUFBO0VBQUEsb0NBQUE7QUFBQTtBQUVBRCxtQkFBQTtBQUNBOEssc0JBQUE7QUFDQXRILGNBQUE7QUFDQTBDLGFBQUE7QUFDQTBHLGVBQUE7QUFDQVEsaUJBQUE7QUFFTUMsU0FBTixNQUFTO01BQ1JHLHdCQUF3QjtNQUN4QkMsWUFBWTs7Ozs7Ozs7O01BVVpDLGdCQUFnQmhHLFFBQVEsWUFBWW1CLFVBQVUsSUFBSThFLFFBQVEsS0FBS3pDLFdBQVdBLE1BQU07TUFBQyxHQUFHO0FBQ25GLFlBQUlILEVBQUUsb0JBQW9CLEVBQUU1SSxTQUFTLEdBQUc7QUFDdkM0SSxZQUFFLG9CQUFvQixFQUFFb0IsS0FBSyxXQUFZO0FBQ3hDcEIsY0FBRSxJQUFJLEVBQUVpQixPQUFPO1VBQ2hCLENBQUM7UUFDRjtBQUNBLGNBQU00QixjQUFjeE4sT0FBT3lOO0FBQzNCLGNBQU1DLGVBQWUxTixPQUFPMk47QUFDNUIsY0FBTUMsY0FBY0MsS0FBS0MsSUFBSU4sYUFBYUQsS0FBSztBQUMvQyxjQUFNUSxZQUFZcEQsRUFBRSxPQUFPLEVBQ3pCSSxTQUFTLG1CQUFtQixFQUM1Qm9CLElBQUk7VUFDSixlQUFlcUIsY0FBYyxJQUFJSSxjQUFjO1VBQy9DSSxLQUFLckQsRUFBRXNELFFBQVEsRUFBRVosVUFBVSxJQUFJSyxlQUFlO1VBQzlDOUMsU0FBUztRQUNWLENBQUMsRUFDQTFJLE9BQU95SSxFQUFFLE9BQU8sRUFBRUksU0FBUywwQkFBMEIsRUFBRW1ELEtBQUs1RyxLQUFLLENBQUMsRUFDbEVwRixPQUFPeUksRUFBRSxPQUFPLEVBQUVJLFNBQVMsMkJBQTJCLEVBQUU3SSxPQUFPdUcsT0FBTyxDQUFDLEVBQ3ZFdkcsT0FBT3lJLEVBQUUsUUFBUSxFQUFFdkMsS0FBSyxHQUFHLEVBQUUyQyxTQUFTLHlCQUF5QixDQUFDO0FBQ2xFSixVQUFFLE1BQU0sRUFBRXpJLE9BQU82TCxTQUFTO0FBQzFCcEQsVUFBRSxvQkFBb0IsRUFBRTRDLE1BQU1LLFdBQVc7QUFDekNqRCxVQUFFLDBCQUEwQixFQUFFVyxHQUFHLFNBQVMsV0FBWTtBQUNyRFgsWUFBRSxJQUFJLEVBQ0p3RCxPQUFPLEVBQ1B4QyxRQUFRLFFBQVEsV0FBWTtBQUM1QjNMLG1CQUFPb08saUJBQWlCLFNBQVVwTyxPQUFPcU8saUJBQWlCLE1BQVU7QUFDcEUxRCxjQUFFLElBQUksRUFBRWlCLE9BQU87VUFDaEIsQ0FBQztRQUNILENBQUM7QUFFRCxjQUFNMEMsZUFBZSxTQUFVQyxTQUFTO0FBQ3ZDQSxrQkFBUUMsVUFBV3ZKLE9BQU07QUFDeEIsa0JBQU13SixRQUFReEosRUFBRXlKO0FBQ2hCLGtCQUFNQyxRQUFRMUosRUFBRTJKO0FBQ2hCLGtCQUFNQyxjQUFjTixRQUFRSixPQUFPLEVBQUVXLE9BQU8sRUFBRXpDO0FBQzlDLGtCQUFNMEMsY0FBY1IsUUFBUUosT0FBTyxFQUFFVyxPQUFPLEVBQUVkO0FBQzlDckQsY0FBRXNELFFBQVEsRUFBRTNDLEdBQUcsYUFBYzBELFFBQU07QUFDbENULHNCQUFRSixPQUFPLEVBQUVoQyxJQUFJO2dCQUNwQixlQUFlMEMsY0FBY0csR0FBRU4sVUFBVUQ7Z0JBQ3pDVCxLQUFLZSxjQUFjQyxHQUFFSixVQUFVRDtjQUNoQyxDQUFDO1lBQ0YsQ0FBQztBQUNEaEUsY0FBRXNELFFBQVEsRUFBRTNDLEdBQUcsV0FBVyxNQUFNO0FBQy9CaUQsc0JBQVFVLE9BQU8sV0FBVztBQUMxQnRFLGdCQUFFc0QsUUFBUSxFQUFFaUIsSUFBSSxXQUFXO0FBQzNCdkUsZ0JBQUVzRCxRQUFRLEVBQUVpQixJQUFJLFNBQVM7QUFDekJaLDJCQUFhQyxPQUFPO1lBQ3JCLENBQUM7VUFDRixDQUFDO1FBQ0Y7QUFDQUQscUJBQWEzRCxFQUFFLDJCQUEyQixDQUFDO0FBQzNDQSxVQUFFLG9CQUFvQixFQUFFTyxPQUFPLEdBQUc7QUFDbENKLGlCQUFTO0FBQ1QsZUFBT2lEO01BQ1I7Ozs7Ozs7OztNQVVBb0Isa0JBQWtCL0csTUFBTWdILElBQUk7QUFDM0IsWUFBSUM7QUFDSixnQkFBUTFQLGtCQUFVaUIsTUFBQTtVQUNqQixLQUFLO0FBQ0p5TyxxQkFBUzFFLEVBQUUsTUFBTSxFQUNmMkUsS0FBSyxNQUFNRixFQUFFLEVBQ2JyRSxTQUFTLGtCQUFrQixFQUMzQjdJLE9BQ0F5SSxFQUFFLEtBQUssRUFDTEksU0FBUyx1REFBdUQsRUFDaEU3SSxPQUNBeUksRUFBRSxRQUFRLEVBQ1IyRSxLQUFLLFFBQVEscUJBQXFCLEVBQ2xDdkUsU0FBUyx5QkFBeUIsRUFDbEMzQyxLQUFLQSxJQUFJLENBQ1osQ0FDRjtBQUNEO1VBRUQsS0FBSztBQUNKaUgscUJBQVMxRSxFQUFFLE1BQU0sRUFDZkksU0FBUywrQkFBK0IsRUFDeEN1RSxLQUFLLE1BQU1GLEVBQUUsRUFDYmxOLE9BQU95SSxFQUFFLEtBQUssRUFBRTJFLEtBQUssUUFBUSxxQkFBcUIsRUFBRWxILEtBQUtBLElBQUksQ0FBQztBQUNoRTtVQUVEO0FBQ0NpSCxxQkFBUzFFLEVBQUUsTUFBTSxFQUNmSSxTQUFTLGNBQWMsRUFDdkJBLFNBQVMsbUJBQW1CLEVBQzVCdUUsS0FBSyxNQUFNRixFQUFFLEVBQ2JsTixPQUFPeUksRUFBRSxLQUFLLEVBQUUyRSxLQUFLLFFBQVEscUJBQXFCLEVBQUVsSCxLQUFLQSxJQUFJLENBQUM7UUFDbEU7QUFDQSxZQUFJekksa0JBQVVpQixTQUFTLGFBQWErSixFQUFFLE9BQU8sRUFBRTVJLFNBQVMsR0FBRztBQUMxRDRJLFlBQUUsT0FBTyxFQUFFekksT0FBT21OLE1BQU07QUFDeEIsaUJBQU8xRSxFQUFBLElBQUF4SixPQUFNaU8sRUFBRSxDQUFFO1FBQ2xCLFdBQVd6UCxrQkFBVWlCLFNBQVMsV0FBVztBQUN4QytKLFlBQUUsb0JBQW9CLEVBQUVlLE1BQU0sRUFBRXhKLE9BQU9tTixNQUFNO0FBQzdDLGlCQUFPMUUsRUFBQSxJQUFBeEosT0FBTWlPLEVBQUUsQ0FBRTtRQUNsQixXQUFXekUsRUFBRSxhQUFhLEVBQUU1SSxTQUFTLEdBQUc7QUFDdkM0SSxZQUFFLGdCQUFnQixFQUFFekksT0FBT21OLE1BQU07QUFDakMsaUJBQU8xRSxFQUFBLElBQUF4SixPQUFNaU8sRUFBRSxDQUFFO1FBQ2xCO0FBQ0F2SixvQkFBSUosS0FBS3RDLGFBQUtpQixVQUFVLGtCQUFrQixDQUFDO01BQzVDOzs7Ozs7TUFPQW1MLDJCQUEyQkMsVUFBVUEsTUFBTTtNQUFDLEdBQUc7QUFDOUMsY0FBTUgsU0FBUyxLQUFLRixrQkFBa0JoTSxhQUFLaUIsVUFBVSxlQUFlLEdBQUcsbUJBQW1CO0FBQzFGLFlBQUlpTCxRQUFRO0FBQ1hBLGlCQUFPL0QsR0FBRyxTQUFTa0UsT0FBTztRQUMzQjtNQUNEOzs7Ozs7TUFPQUMsMEJBQTBCRCxVQUFVQSxNQUFNO01BQUMsR0FBRztBQUM3QyxjQUFNSCxTQUFTLEtBQUtGLGtCQUFrQmhNLGFBQUtpQixVQUFVLG1CQUFtQixHQUFHLHlCQUF5QjtBQUNwRyxZQUFJaUwsUUFBUTtBQUNYQSxpQkFBTy9ELEdBQUcsU0FBU2tFLE9BQU87UUFDM0I7TUFDRDs7Ozs7OztNQVFBRSx3QkFBd0JGLFNBQVM7QUFDaEMsY0FBTUcsU0FBU2hGLEVBQUUsTUFBTSxFQUFFMkUsS0FBSyxNQUFNLHNCQUFzQixFQUFFQSxLQUFLLFNBQVMsY0FBYztBQUN4RixjQUFNTSxhQUFhakYsRUFBRSxLQUFLLEVBQ3hCMkUsS0FBSyxRQUFRLG9CQUFvQixFQUNqQ2xILEtBQUEsR0FBQWpILE9BQVFnQyxhQUFLaUIsVUFBVSxrQkFBa0IsQ0FBQyxDQUFFO0FBQzlDdUwsZUFBT3pOLE9BQU8wTixVQUFVO0FBQ3hCLGdCQUFRalEsa0JBQVVpQixNQUFBO1VBQ2pCLEtBQUs7QUFDSitPLG1CQUFPeEQsSUFBSTtjQUFDLGVBQWU7Y0FBVXZCLFNBQVM7WUFBTSxDQUFDO0FBQ3JEK0UsbUJBQU8zRSxLQUFLLE1BQU0sRUFBRUQsU0FBUyw4QkFBOEI7QUFDM0Q0RSxtQkFDRTNFLEtBQUssR0FBRyxFQUNSRCxTQUNBLDhGQUNELEVBQ0NvQixJQUFJLGtCQUFrQixRQUFRO0FBQ2hDO1VBRUQsS0FBSztBQUNKd0QsbUJBQU81RSxTQUFTLG1CQUFtQjtBQUNuQztVQUVELEtBQUs7QUFDSjRFLG1CQUFPek4sT0FBT3lJLEVBQUUsUUFBUSxFQUFFekksT0FBTzBOLFVBQVUsQ0FBQztBQUM1QztVQUVEO1FBQ0Q7QUFDQWpGLFVBQUVnRixNQUFNLEVBQUVyRSxHQUFHLFNBQVMsTUFBTTtBQUMzQmtFLGtCQUFRO1lBQ1BLLGVBQWU7WUFDZkMsZ0JBQWdCblEsa0JBQVVTO1VBQzNCLENBQUM7UUFDRixDQUFDO0FBQ0QsWUFBSXVLLEVBQUUsVUFBVSxFQUFFNUksU0FBUyxLQUFLNEksRUFBRSx1QkFBdUIsRUFBRTVJLFdBQVcsR0FBRztBQUN4RXBDLDRCQUFVaUIsU0FBUyxZQUFZK0osRUFBRSxVQUFVLEVBQUV3RCxPQUFPLEVBQUU0QixNQUFNSixNQUFNLElBQUloRixFQUFFLFVBQVUsRUFBRW9GLE1BQU1KLE1BQU07UUFDakc7TUFDRDs7Ozs7OztNQVFBSyw4QkFBOEJSLFVBQVVBLE1BQU07TUFBQyxHQUFHO0FBQ2pELGNBQU1TLGFBQ0x0USxrQkFBVWlCLFNBQVMsWUFDaEIrSixFQUFFLFFBQVEsRUFBRXpJLE9BQ1p5SSxFQUFFLEtBQUssRUFDTEksU0FDQSwwSEFDRCxFQUNDb0IsSUFBSSxlQUFlLFFBQVEsRUFDM0JtRCxLQUFLLFFBQVEsb0JBQW9CLEVBQ2pDQSxLQUFLLFNBQVNuTSxhQUFLaUIsVUFBVSxzQkFBc0IsQ0FBQyxDQUN2RCxJQUNDdUcsRUFBRSxRQUFRLEVBQ1R6SSxPQUFPeUksRUFBRSxRQUFRLEVBQUVJLFNBQVMsd0JBQXdCLEVBQUUzQyxLQUFLLEtBQUssQ0FBQyxFQUNqRWxHLE9BQ0F5SSxFQUFFLEtBQUssRUFDTEksU0FBUywwQkFBMEIsRUFDbkN1RSxLQUFLLFFBQVEsb0JBQW9CLEVBQ2pDbEgsS0FBS2pGLGFBQUtpQixVQUFVLHNCQUFzQixDQUFDLENBQzlDO0FBQ0p1RyxVQUFFLGlCQUFpQixFQUFFb0IsS0FBSyxTQUFVdEYsR0FBRztBQUN0QyxjQUFJO0FBQ0gsa0JBQU15SixVQUFVdkYsRUFBRSxJQUFJLEVBQUVLLEtBQUssd0JBQXdCLEVBQUVVLE1BQU0sRUFBRTRELEtBQUssTUFBTTtBQUMxRSxrQkFBTU8sZ0JBQWdCSyxRQUNwQnJELE1BQU0sd0JBQXdCLEVBQUUsQ0FBQyxFQUNqQ3hNLFFBQVEsUUFBUSxFQUFFO0FBQ3BCLGtCQUFNOFAsb0JBQW9CcEQsbUJBQW1CbUQsUUFBUXJELE1BQU0sY0FBYyxFQUFFLENBQUMsQ0FBQztBQUM3RSxrQkFBTXVELFlBQVl6RixFQUFFLElBQUksRUFBRTBGLEtBQUssRUFBRUMsTUFBTTtBQUN2Q0Ysc0JBQVVwRixLQUFLLHFCQUFxQixFQUFFWSxPQUFPO0FBQzdDLGtCQUFNMkUsY0FBY0gsVUFBVWhJLEtBQUssRUFBRW9JLEtBQUs7QUFDMUMsa0JBQU1DLGNBQWNSLFdBQVdLLE1BQU07QUFDckNHLHdCQUFZekYsS0FBSywyQkFBMkIsRUFBRU0sR0FBRyxTQUFTLE1BQU07QUFDL0RrRSxzQkFBUTtnQkFDUEs7Z0JBQ0FVO2dCQUNBVCxnQkFBZ0JLO2NBQ2pCLENBQUM7WUFDRixDQUFDO0FBQ0R4USw4QkFBVWlCLFNBQVMsWUFDaEIrSixFQUFFLElBQUksRUFBRXpJLE9BQU91TyxXQUFXLElBQzFCOUYsRUFBRSxJQUFJLEVBQUVLLEtBQUsseUJBQXlCLEVBQUVDLEtBQUssRUFBRXlGLE9BQU9ELFdBQVc7VUFDckUsUUFBUTtBQUNQNUssd0JBQUlNLE1BQU0sd0JBQXdCO1VBQ25DO1FBQ0QsQ0FBQztNQUNGOzs7Ozs7TUFPQXdLLHNCQUFzQm5CLFVBQVVBLE1BQU07TUFBQyxHQUFHO0FBQ3pDN0UsVUFBRSw2QkFBNkIsRUFBRW9CLEtBQUssU0FBVXRGLEdBQUc7QUFDbEQsZ0JBQU1oRixNQUFNa0osRUFBRSxJQUFJLEVBQUUyRSxLQUFLLE1BQU07QUFDL0IsZ0JBQU05SCxTQUFTbUYsV0FBV2xMLEdBQUc7QUFDN0IsY0FBSStGLE9BQU83RyxXQUFXLFVBQVU2RyxPQUFPRixVQUFVLFVBQWFFLE9BQU9XLFlBQVksT0FBTztBQUN2RndDLGNBQUUsSUFBSSxFQUFFb0YsTUFDUHBGLEVBQUUsS0FBSyxFQUNMMkUsS0FBSztjQUNMc0IsTUFBTTtjQUNOQyxPQUFPO1lBQ1IsQ0FBQyxFQUNBekksS0FBQSxJQUFBakgsT0FBU2dDLGFBQUtpQixVQUFVLHNCQUFzQixHQUFDLEdBQUEsQ0FBRyxFQUNsRGtILEdBQUcsU0FBUyxNQUFNO0FBQUEsa0JBQUF3RjtBQUNsQnRCLHNCQUFRO2dCQUNQTSxnQkFBZ0J0SSxPQUFPRjtnQkFDdkJ1SSxnQkFBQWlCLGtCQUFldEosT0FBT1csYUFBQSxRQUFBMkksb0JBQUEsU0FBQUEsa0JBQVc7Y0FDbEMsQ0FBQztZQUNGLENBQUMsQ0FDSDtVQUNEO1FBQ0QsQ0FBQztNQUNGO01BRUFDLG1CQUFtQjtRQUNsQnpKLFFBQVE7UUFDUm1CLFVBQVU7UUFDVnVJLFVBQVU7UUFDVkMsU0FBU0EsTUFBTTtRQUFDO1FBQ2hCQyxVQUFVQSxNQUFNO1FBQUM7UUFDakJDLFNBQVNBLE1BQU07UUFBQztRQUNoQkMsVUFBVTtNQUNYLEdBQUc7QUFDRixjQUFNL0YsUUFBTztBQUNiLGFBQUtnQyxZQUFZMUMsRUFBRXNELFFBQVEsRUFBRVosVUFBVTtBQUN2QyxZQUFJLEtBQUtELHVCQUF1QjtBQUMvQixlQUFLaUUsbUJBQW1CO1FBQ3pCO0FBQ0EsYUFBS2pFLHdCQUF3QjtBQUU3QnBOLGVBQU9vTyxpQkFDTixTQUNDcE8sT0FBT3FPLGlCQUFpQixXQUFZO0FBQ3BDLGlCQUFBLEdBQUFsTixPQUFVZ0MsYUFBS2lCLFVBQVUsaUJBQWlCLENBQUM7UUFDNUMsQ0FDRDtBQUNBLGNBQU1pRixZQUFZc0IsRUFBRSxnQkFBZ0IsRUFBRTVJLFNBQVM7QUFFL0MsY0FBTXVQLFVBQVUzRyxFQUFFLFFBQVEsRUFDeEIyRSxLQUFLLE1BQU0seUJBQXlCLEVBQ3BDdkUsU0FBUyxjQUFjLEVBQ3ZCM0MsS0FBQSxHQUFBakgsT0FBUWdDLGFBQUtpQixVQUFVLE1BQU0sQ0FBQyxDQUFFO0FBQ2xDLGNBQU1tTixVQUFVNUcsRUFBRSxRQUFRLEVBQ3hCMkUsS0FBSyxNQUFNLHlCQUF5QixFQUNwQ3ZFLFNBQVMsY0FBYyxFQUN2QjdJLE9BQ0F5SSxFQUFFLEtBQUssRUFDTDJFLEtBQUssUUFBUSxxQkFBcUIsRUFDbENsSCxLQUFBLEdBQUFqSCxPQUFRZ0MsYUFBS2lCLFVBQVUsY0FBYyxDQUFDLENBQUUsQ0FDM0M7QUFDRCxjQUFNb04sV0FBVzdHLEVBQUUsWUFBWSxFQUFFMkUsS0FBSyxNQUFNLG9CQUFvQjtBQUNoRSxjQUFNbUMsYUFBYTlHLEVBQUUsT0FBTyxFQUFFMkUsS0FBSyxNQUFNLG1DQUFtQztBQUM1RSxjQUFNb0MsYUFBYS9HLEVBQUUsU0FBUyxFQUM1QjJFLEtBQUssTUFBTSxrQ0FBa0MsRUFDN0NBLEtBQUssZUFBQSxHQUFBbk8sT0FBa0JnQyxhQUFLaUIsVUFBVSxtQkFBbUIsQ0FBQyxDQUFFO0FBQzlELGNBQU11TixnQkFBZ0JoSCxFQUFFLFVBQVUsRUFDaEMyRSxLQUFLLE1BQU0sMkJBQTJCLEVBQ3RDbEgsS0FBQSxHQUFBakgsT0FBUWdDLGFBQUtpQixVQUFVaUYsWUFBWSxpQkFBaUIsZ0JBQWdCLEdBQUMsVUFBQSxDQUFVO0FBQ2pGLGNBQU11SSxtQkFBbUJqSCxFQUFFLFVBQVUsRUFDbkMyRSxLQUFLLE1BQU0sbUNBQW1DLEVBQzlDbEgsS0FBQSxHQUFBakgsT0FBUWdDLGFBQUtpQixVQUFVLFNBQVMsQ0FBQyxDQUFFO0FBQ3JDLGNBQU15TixjQUFjbEgsRUFBRSxPQUFPLEVBQzNCekksT0FBT3lJLEVBQUUsU0FBUyxFQUFFMkUsS0FBSztVQUFDekUsTUFBTTtVQUFZdUUsSUFBSTtRQUE4QixDQUFDLENBQUMsRUFDaEZsTixPQUNBeUksRUFBRSxTQUFTLEVBQ1QyRSxLQUFLLE9BQU8sOEJBQThCLEVBQzFDbEgsS0FBQSxHQUFBakgsT0FBUWdDLGFBQUtpQixVQUFVLGdCQUFnQixHQUFDLGdCQUFBLENBQWdCLENBQzNELEVBQ0MrSCxJQUFJO1VBQUMyRixRQUFRO1VBQW9CbEgsU0FBUztRQUFRLENBQUM7QUFFckQsY0FBTW1ILFdBQVdwSCxFQUFFLE9BQU8sRUFBRXpJLE9BQzNCb1AsU0FDQUMsU0FDQUUsWUFDQUQsVUFDQUUsWUFDQS9HLEVBQUUsTUFBTSxHQUNSa0gsYUFDQUYsZUFDQUMsZ0JBQ0Q7QUFDQSxhQUFLdEUsZ0JBQWdCaEcsT0FBT3lLLFVBQVUsS0FBTSxNQUFNO0FBQ2pEcEgsWUFBRSxxQkFBcUIsRUFBRXFILElBQUl2SixPQUFPO0FBQ3BDa0MsWUFBRSxtQ0FBbUMsRUFBRXFILElBQUloQixPQUFPO1FBQ25ELENBQUM7QUFFRHJHLFVBQUUsMEJBQTBCLEVBQUVXLEdBQUcsU0FBUzJGLE1BQU07QUFFaER0RyxVQUFFLG9DQUFvQyxFQUFFVyxHQUFHLFNBQUE5SixrQ0FBUyxhQUFrQjtBQUNyRSxnQkFBTXlRLGdCQUFnQnRILEVBQUUsT0FBTyxFQUM3QkksU0FBUyxpQkFBaUIsRUFDMUIzQyxLQUFBLEdBQUFqSCxPQUFRZ0MsYUFBS2lCLFVBQVUsaUJBQWlCLENBQUMsQ0FBRTtBQUM3QyxnQkFBTWdHLFdBQVdPLEVBQUUscUJBQXFCLEVBQUVxSCxJQUFJO0FBQzlDckgsWUFBRSxJQUFJLEVBQUUyRSxLQUFLLFlBQVksVUFBVTtBQUNuQzNFLFlBQUUsb0NBQW9DLEVBQUVnQixRQUFRLEtBQUssTUFBTTtBQUMxRGhCLGNBQUUsb0NBQW9DLEVBQUV1RCxLQUFLLEVBQUUsRUFBRWhNLE9BQU8rUCxhQUFhO0FBQ3JFdEgsY0FBRSxvQ0FBb0MsRUFBRU8sT0FBTyxHQUFHO1VBQ25ELENBQUM7QUFDRFAsWUFBRSxZQUFZLEVBQUV5QixRQUFRO1lBQUNpQixXQUFXaEMsTUFBS2dDO1VBQVMsR0FBRyxHQUFHO0FBQ3hELGdCQUFNL0ksU0FBQSxNQUFlNE0sUUFBUTlHLFFBQVE7QUFDckNPLFlBQUUsb0NBQW9DLEVBQUVnQixRQUFRLE9BQU8sTUFBTTtBQUM1RGhCLGNBQUUsb0NBQW9DLEVBQUV1RCxLQUFBLG9DQUFBL00sT0FBeUNtRCxRQUFNLFlBQUEsQ0FBWTtBQUNuR3FHLGNBQUUsb0NBQW9DLEVBQUVPLE9BQU8sS0FBSztBQUNwRFAsY0FBRSxvQ0FBb0MsRUFBRWxELEtBQUssWUFBWSxLQUFLO1VBQy9ELENBQUM7UUFDRixDQUFDLENBQUE7QUFFRGtELFVBQUUsNEJBQTRCLEVBQUVXLEdBQUcsU0FBQTlKLGtDQUFTLGFBQVk7QUFDdkQsZ0JBQU0wUSxRQUFRQyxLQUFLQyxJQUFJO0FBQ3ZCLGdCQUFNQyxhQUFhMUgsRUFBRSxPQUFPLEVBQzFCSSxTQUFTLGlCQUFpQixFQUMxQjNDLEtBQUEsR0FBQWpILE9BQVFnQyxhQUFLaUIsVUFBVSxpQkFBaUIsQ0FBQyxDQUFFO0FBQzdDLGdCQUFNM0IsVUFBVTtZQUNmdU8sU0FBU3JHLEVBQUUsbUNBQW1DLEVBQUVxSCxJQUFJO1lBQ3BEdkosU0FBU2tDLEVBQUUscUJBQXFCLEVBQUVxSCxJQUFJO1lBQ3RDSCxhQUFhbEgsRUFBRSwrQkFBK0IsRUFBRTJILEdBQUcsVUFBVTtVQUM5RDtBQUVBM0gsWUFBRSxtRkFBbUYsRUFBRTJFLEtBQ3RGLFlBQ0EsVUFDRDtBQUNBM0UsWUFBRSxZQUFZLEVBQUV5QixRQUFRO1lBQUNpQixXQUFXaEMsTUFBS2dDO1VBQVMsR0FBRyxHQUFHO0FBQ3hEMUMsWUFBRSxvQ0FBb0MsRUFBRWdCLFFBQVEsS0FBSyxNQUFNO0FBQzFEaEIsY0FBRSxvQ0FBb0MsRUFBRXVELEtBQUssRUFBRSxFQUFFaE0sT0FBT21RLFVBQVU7QUFDbEUxSCxjQUFFLG9DQUFvQyxFQUFFTyxPQUFPLEdBQUc7VUFDbkQsQ0FBQztBQUNELGNBQUk7QUFDSCxrQkFBTWlHLE9BQU8xTyxPQUFPO0FBQ3BCLGtCQUFNOFAsVUFBVUosS0FBS0MsSUFBSSxJQUFJRjtBQUM3QnZILGNBQUUsb0NBQW9DLEVBQ3BDSyxLQUFLLGtCQUFrQixFQUN2Qm1CLElBQUksY0FBYyx3QkFBd0I7QUFDNUN4QixjQUFFLG9DQUFvQyxFQUNwQ0ssS0FBSyxrQkFBa0IsRUFDdkI1QyxLQUFBLEdBQUFqSCxPQUFRZ0MsYUFBS2lCLFVBQVUsZ0JBQWdCLENBQUNtTyxRQUFRQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUU7QUFDaEV4UyxtQkFBT29PLGlCQUFpQixTQUFVcE8sT0FBT3FPLGlCQUFpQixNQUFVO0FBQ3BFeEMsdUJBQVcsTUFBTTtBQUNoQnpLLHVCQUFTcVIsT0FBTztZQUNqQixHQUFHLEdBQUc7VUFDUCxTQUFTdE0sT0FBTztBQUNmWCxvQkFBUWtOLElBQUl2TSxLQUFLO0FBQ2pCd0UsY0FBRSxrQkFBa0IsRUFBRXdCLElBQUksY0FBYywyQkFBMkI7QUFDbkV4QixjQUFFLGtCQUFrQixFQUFFdUQsS0FBSy9ILE1BQU1ILE9BQU87VUFDekMsVUFBQTtBQUNDMkUsY0FBRSxtRkFBbUYsRUFBRWxELEtBQ3RGLFlBQ0EsS0FDRDtVQUNEO1FBQ0QsQ0FBQyxDQUFBO0FBRURrRCxVQUFFLHFGQUFxRixFQUFFVyxHQUFHLFdBQVlyRyxPQUFNO0FBQzdHLGNBQUlBLEVBQUUwTixXQUFXMU4sRUFBRTJOLFVBQVUsSUFBSTtBQUNoQyxnQkFBSTNOLEVBQUU0TixVQUFVO0FBQ2ZsSSxnQkFBRSwrQkFBK0IsRUFBRW1JLFFBQVEsT0FBTztZQUNuRDtBQUNBbkksY0FBRSw0QkFBNEIsRUFBRW1JLFFBQVEsT0FBTztBQUMvQzdOLGNBQUU4TixlQUFlO0FBQ2pCOU4sY0FBRStOLGdCQUFnQjtVQUNuQjtRQUNELENBQUM7QUFFRCxZQUFJNUIsU0FBUztBQUNaekcsWUFBRXNELFFBQVEsRUFBRTNDLEdBQUcsV0FBWXJHLE9BQU07QUFDaEMsZ0JBQUlBLEVBQUUyTixVQUFVLElBQUk7QUFDbkJqSSxnQkFBRSwwQkFBMEIsRUFBRW1JLFFBQVEsT0FBTztZQUM5QztVQUNELENBQUM7UUFDRjtNQUNEO01BRUF6QixxQkFBcUI7QUFDcEIsYUFBS2pFLHdCQUF3QjtBQUM3QnpDLFVBQUUsb0JBQW9CLEVBQUVnQixRQUFRLFFBQVEsV0FBWTtBQUNuRDNMLGlCQUFPb08saUJBQWlCLFNBQVVwTyxPQUFPcU8saUJBQWlCLE1BQVU7QUFDcEUxRCxZQUFFLElBQUksRUFBRWlCLE9BQU87UUFDaEIsQ0FBQztNQUNGOzs7Ozs7OztNQVNBcUgsd0JBQXdCO1FBQUM5QixTQUFTQSxNQUFNO1FBQUM7UUFBRytCLFlBQVlBLE1BQU07UUFBQztNQUFDLElBQUksQ0FBQyxHQUFHO0FBQUEsWUFBQUMsVUFBQTtBQUN2RSxjQUFNQyxRQUFRekksRUFBRSxTQUFTLEVBQUVJLFNBQVMseUJBQXlCO0FBQzdELGNBQU1zSSxXQUFXMUksRUFBRSxPQUFPLEVBQ3hCSSxTQUFTLHVCQUF1QixFQUNoQ3VFLEtBQUssTUFBTSxtQkFBbUIsRUFDOUJsSCxLQUFLakYsYUFBS2lCLFVBQVUsUUFBUSxDQUFDO0FBQy9CLGNBQU1rUCxZQUFZM0ksRUFBRSxPQUFPLEVBQ3pCSSxTQUFTLHVCQUF1QixFQUNoQ3VFLEtBQUssTUFBTSxvQkFBb0IsRUFDL0JsSCxLQUFLakYsYUFBS2lCLFVBQVUsUUFBUSxDQUFDO0FBQy9CLGNBQU1tUCxjQUFjNUksRUFBRSxPQUFPLEVBQzNCSSxTQUFTLHVCQUF1QixFQUNoQ3VFLEtBQUssTUFBTSxzQkFBc0IsRUFDakNsSCxLQUFLakYsYUFBS2lCLFVBQVUsVUFBVSxDQUFDO0FBQ2pDLGNBQU1xRSxVQUFVa0MsRUFBRSxPQUFPLEVBQUV6SSxPQUFPa1IsS0FBSyxFQUFFbFIsT0FBT3lJLEVBQUUsTUFBTSxDQUFDLEVBQUV6SSxPQUFPbVIsUUFBUSxFQUFFblIsT0FBT29SLFNBQVM7QUFDNUYsY0FBTUUsU0FBUyxLQUFLbEcsZ0JBQWdCbkssYUFBS2lCLFVBQVUsZUFBZSxHQUFHcUUsU0FBUyxHQUFHO0FBQ2pGNEssaUJBQVMvSCxHQUFHLFNBQUE5SixrQ0FBUyxhQUFZO0FBQ2hDLGdCQUFNOEYsUUFBUXFELEVBQUUsMEJBQTBCLEVBQUVxSCxJQUFJO0FBQ2hEckgsWUFBRSw0QkFBNEIsRUFBRXVELEtBQUEsZ0NBQUEvTSxPQUNDZ0MsYUFBS2lCLFVBQVUsaUJBQWlCLEdBQUMsUUFBQSxDQUNsRTtBQUNBLGNBQUk7QUFDSCxrQkFBTStNLE9BQU87Y0FDWjdKO2NBQ0FtTSxnQkFBZ0I7WUFDakIsQ0FBQztBQUNEOUksY0FBRSxrQkFBa0IsRUFBRXZDLEtBQUtqRixhQUFLaUIsVUFBVSxnQkFBZ0IsQ0FBQztBQUMzRCtPLG9CQUFLTyx3QkFBd0JGLE1BQU07QUFDbkNOLHNCQUFVO2NBQUM1TDtZQUFLLENBQUM7VUFDbEIsU0FBU25CLE9BQU87QUFDZndFLGNBQUUsa0JBQWtCLEVBQUV3QixJQUFJLGNBQWMsMkJBQTJCO0FBQ25FeEIsY0FBRSxrQkFBa0IsRUFBRXZDLEtBQUtqQyxNQUFNSCxPQUFPO0FBQ3hDLGdCQUFJRyxNQUFNRixTQUFTLGlCQUFpQjtBQUNuQzBFLGdCQUFFLDRCQUE0QixFQUFFekksT0FBT3lJLEVBQUUsTUFBTSxDQUFDLEVBQUV6SSxPQUFPcVIsV0FBVyxFQUFFclIsT0FBT29SLFNBQVM7QUFDdEZBLHdCQUFVaEksR0FBRyxTQUFTLE1BQU07QUFDM0I2SCx3QkFBS08sd0JBQXdCRixNQUFNO2NBQ3BDLENBQUM7QUFDREQsMEJBQVlqSSxHQUFHLFNBQUE5SixrQ0FBUyxhQUFZO0FBQ25DbUosa0JBQUUsNEJBQTRCLEVBQUV1RCxLQUFBLGdDQUFBL00sT0FDQ2dDLGFBQUtpQixVQUFVLGlCQUFpQixHQUFDLFFBQUEsQ0FDbEU7QUFDQSxvQkFBSTtBQUNILHdCQUFNK00sT0FBTztvQkFDWjdKO29CQUNBbU0sZ0JBQWdCO2tCQUNqQixDQUFDO0FBQ0Q5SSxvQkFBRSxrQkFBa0IsRUFBRXZDLEtBQUtqRixhQUFLaUIsVUFBVSxnQkFBZ0IsQ0FBQztBQUMzRCtPLDBCQUFLTyx3QkFBd0JGLE1BQU07QUFDbkNOLDRCQUFVO29CQUFDNUw7a0JBQUssQ0FBQztnQkFDbEIsU0FBU3FNLFFBQU87QUFDZmhKLG9CQUFFLGtCQUFrQixFQUFFd0IsSUFBSSxjQUFjLDJCQUEyQjtBQUNuRXhCLG9CQUFFLGtCQUFrQixFQUFFdkMsS0FBS3VMLE9BQU0zTixPQUFPO2dCQUN6QztjQUNELENBQUMsQ0FBQTtZQUNGO1VBQ0Q7UUFDRCxDQUFDLENBQUE7QUFDRHNOLGtCQUFVaEksR0FBRyxTQUFTLE1BQU07QUFDM0IsZUFBS29JLHdCQUF3QkYsTUFBTTtRQUNwQyxDQUFDO01BQ0Y7Ozs7OztNQU9BRSx3QkFBd0JGLFNBQVM3SSxFQUFFLE1BQU0sR0FBRztBQUMzQzZJLGVBQU94SSxLQUFLLDBCQUEwQixFQUFFOEgsUUFBUSxPQUFPO01BQ3hEO01BRUFjLGtCQUFrQjtRQUFDQyxXQUFXQSxNQUFNO1FBQUM7TUFBQyxJQUFJLENBQUMsR0FBRztBQUFBLFlBQUFDLFVBQUE7QUFDN0MsY0FBTVYsUUFBUXpJLEVBQUUsWUFBWSxFQUFFMkUsS0FBSyxNQUFNLHdCQUF3QixFQUFFQSxLQUFLLFFBQVEsSUFBSTtBQUNwRixjQUFNK0QsV0FBVzFJLEVBQUUsT0FBTyxFQUN4QkksU0FBUyx1QkFBdUIsRUFDaEN1RSxLQUFLLE1BQU0sd0JBQXdCLEVBQ25DbEgsS0FBS2pGLGFBQUtpQixVQUFVLFFBQVEsQ0FBQztBQUMvQixjQUFNa1AsWUFBWTNJLEVBQUUsT0FBTyxFQUN6QkksU0FBUyx1QkFBdUIsRUFDaEN1RSxLQUFLLE1BQU0seUJBQXlCLEVBQ3BDbEgsS0FBS2pGLGFBQUtpQixVQUFVLFFBQVEsQ0FBQztBQUMvQixjQUFNcUUsVUFBVWtDLEVBQUUsT0FBTyxFQUFFekksT0FBT2tSLEtBQUssRUFBRWxSLE9BQU95SSxFQUFFLE1BQU0sQ0FBQyxFQUFFekksT0FBT21SLFFBQVEsRUFBRW5SLE9BQU9vUixTQUFTO0FBRTVGLGNBQU1FLFNBQVMsS0FBS2xHLGdCQUFnQm5LLGFBQUtpQixVQUFVLHdCQUF3QixHQUFHcUUsU0FBUyxLQUFLLE1BQU07QUFDakcsY0FBSTlFLGFBQWFvUSxtQkFBbUI7QUFDbkNwSixjQUFFLHlCQUF5QixFQUFFcUgsSUFBSXJPLGFBQWFvUSxpQkFBaUI7QUFDL0QsZ0JBQUk7QUFDSCxvQkFBTUMsV0FBV3ZRLEtBQUtDLE1BQU1DLGFBQWFvUSxpQkFBaUI7QUFDMURwSixnQkFBRSx5QkFBeUIsRUFBRXFILElBQUl2TyxLQUFLaUMsVUFBVXNPLFVBQVUsTUFBTSxDQUFDLENBQUM7WUFDbkUsUUFBUTtZQUVSO1VBQ0QsT0FBTztBQUNOckosY0FBRSx5QkFBeUIsRUFBRTJFLEtBQUssZUFBZW5NLGFBQUtpQixVQUFVLCtCQUErQixDQUFDO1VBQ2pHO1FBQ0QsQ0FBQztBQUNEaVAsaUJBQVMvSCxHQUFHLFNBQUE5SixrQ0FBUyxhQUFZO0FBQ2hDLGdCQUFNeVMsY0FBY3RKLEVBQUUsT0FBTyxFQUFFSSxTQUFTLGlCQUFpQixFQUFFM0MsS0FBS2pGLGFBQUtpQixVQUFVLHlCQUF5QixDQUFDO0FBQ3pHLGdCQUFNNFAsV0FBV3JKLEVBQUUseUJBQXlCLEVBQUVxSCxJQUFJO0FBQ2xELGNBQUk7QUFDSDZCLHFCQUFTO2NBQUNHO1lBQVEsQ0FBQztBQUNuQnJKLGNBQUUsNEJBQTRCLEVBQUV1RCxLQUFLLEVBQUUsRUFBRWhNLE9BQU8rUixXQUFXO0FBQzNELGtCQUFNMUgsY0FBTSxJQUFJO0FBQ2hCdUgsb0JBQUtJLGtCQUFrQlYsTUFBTTtVQUM5QixRQUFRO0FBQ1AvSSxpQ0FBYXRFLE1BQU1oRCxhQUFLaUIsVUFBVSxpQ0FBaUMsQ0FBQztVQUNyRTtRQUNELENBQUMsQ0FBQTtBQUNEa1Asa0JBQVVoSSxHQUFHLFNBQVMsTUFBTTtBQUMzQixlQUFLNEksa0JBQWtCVixNQUFNO1FBQzlCLENBQUM7TUFDRjtNQUVBVSxrQkFBa0JWLFNBQVM3SSxFQUFFLE1BQU0sR0FBRztBQUNyQzZJLGVBQU94SSxLQUFLLDBCQUEwQixFQUFFOEgsUUFBUSxPQUFPO01BQ3hEO01BRUFxQixrQkFBa0JDLFdBQVc7QUFDNUJ6SixVQUFFLE1BQU0sRUFDTmMsU0FBUyxJQUFJLEVBQ2JULEtBQUssR0FBRyxFQUNSZSxLQUFLLFNBQVV0RixHQUFHO0FBQ2xCa0UsWUFBRSxJQUFJLEVBQUVXLEdBQUcsYUFBYSxXQUFZO0FBQ25DWCxjQUFFLElBQUksRUFBRXVFLElBQUksV0FBVztBQUN2QmtGLHNCQUFVO2NBQ1R2RSxlQUFlcEosSUFBSTtZQUNwQixDQUFDO1VBQ0YsQ0FBQztRQUNGLENBQUM7TUFDSDtJQUNEO0FBRU95RyxpQkFBUSxJQUFJRCxHQUFHO0VBQUE7QUFBQSxDQUFBOztBQzFrQnRCLElBRU1vSDtBQUZOLElBcUNPQztBQXJDUCxJQUFBQyxnQkFBQTFVLE1BQUE7RUFBQSwyQ0FBQTtBQUFBO0FBRU13VSxlQUFOLE1BQWU7TUFDZEcsV0FBV3hTLEtBQUt5UyxTQUFTLENBQUMsR0FBRztBQUM1QixjQUFNQyxJQUFJRDtBQUNWLFlBQUlUO0FBQ0osWUFBSTtBQUNIQSxxQkFBV3ZRLEtBQUtDLE1BQU1DLGFBQWEsbUJBQW1CLENBQUM7UUFDeEQsUUFBUTtBQUNQO1FBQ0Q7QUFDQSxZQUFJO0FBQ0gsZ0JBQU1nUix3QkFBd0IsSUFBSUMsU0FBQSxVQUFBelQsT0FBbUI2UyxTQUFTaFMsR0FBRyxDQUFDLENBQUU7QUFDcEUsY0FBSSxPQUFPMlMsMEJBQTBCLFlBQVk7QUFDaEQsZ0JBQUk7QUFDSCxrQkFBSUEsc0JBQXNCLEVBQUVELENBQUMsTUFBTSxNQUFNO2NBQ3pDLE9BQU87QUFDTix1QkFBT0Msc0JBQXNCLEVBQUVELENBQUMsS0FBS1YsU0FBU2hTLEdBQUc7Y0FDbEQ7WUFDRCxRQUFRO0FBQ1AscUJBQU9nUyxTQUFTaFMsR0FBRztZQUNwQjtVQUNELE9BQU87QUFDTixtQkFBT2dTLFNBQVNoUyxHQUFHO1VBQ3BCO1FBQ0QsUUFBUTtBQUNQLGNBQUk7QUFDSCxnQkFBSXNDLFNBQVMwUCxTQUFTaFMsR0FBRztBQUN6QixxQkFBQTZTLE1BQUEsR0FBQUMsZ0JBQWtCalQsT0FBT0MsS0FBSzJTLE1BQU0sR0FBQUksTUFBQUMsY0FBQS9TLFFBQUE4UyxPQUFHO0FBQXZDLG9CQUFXRSxPQUFBRCxjQUFBRCxHQUFBO0FBQ1Z2USx1QkFBU0EsT0FBT2pFLFFBQUEsS0FBQWMsT0FBYzRULE1BQUcsR0FBQSxHQUFLTixPQUFPTSxJQUFHLENBQUM7WUFDbEQ7QUFDQSxtQkFBT3pRO1VBQ1IsUUFBUTtVQUFDO1FBQ1Y7TUFDRDtJQUNEO0FBRU9nUSx1QkFBUSxJQUFJRCxTQUFTO0VBQUE7QUFBQSxDQUFBOztBQ3JDNUIsSUFBQVcsa0JBQUEsQ0FBQTtBQUFBLElBQUFDLGVBQUFwVixNQUFBO0VBQUEsa0NBQUE7QUFBQTtBQU1Bc0osY0FBQTtBQUNBZ0UsWUFBQTtBQUNBekMsc0JBQUE7QUFDQTVELGNBQUE7QUFDQXlOLGtCQUFBO0FBQ0F6TyxhQUFBO0FBQ0FsRyxtQkFBQTtBQUNBd0QsY0FBQTtBQUVBdUgsTUFBQW5KLGtDQUFFLGFBQVk7QUFDYixZQUFNMFQsUUFBUSxDQUFDO0FBQ2YsWUFBTUMscUJBQXFCeEssRUFBRSxnQkFBZ0IsRUFBRTVJLFNBQVMsS0FBS3BDLGtCQUFVVyxjQUFjO0FBU3JGLFlBQU04VSxVQUFBLDJCQUFBO0FBQUEsWUFBQUMsUUFBQTdULGtCQUFVLFdBQU87VUFBQ2pCLFlBQUErVTtVQUFZaE87UUFBSyxHQUFNO0FBQzlDLGNBQUk0TixNQUFNSSxXQUFVLEdBQUc7QUFDdEIsbUJBQU9KLE1BQU1JLFdBQVU7VUFDeEI7QUFDQSxnQkFBTUMsVUFBVSxJQUFJck0sYUFBSztZQUN4QjNJLFlBQUErVTtZQUNBaE87VUFDRCxDQUFDO0FBQ0QsZ0JBQU1pTyxRQUFRaE0sS0FBSztBQUNuQjJMLGdCQUFNSSxXQUFVLElBQUlDO0FBQ3BCLGlCQUFPTCxNQUFNSSxXQUFVO1FBQ3hCLENBQUE7QUFBQSxlQUFBLFNBWE1GLFNBQUFJLElBQUE7QUFBQSxpQkFBQUgsTUFBQUksTUFBQSxNQUFBQyxTQUFBO1FBQUE7TUFBQSxFQUFBO0FBYU43UCxrQkFBSUosS0FBQSxrQ0FBQXRFLE9BQXVDeEIsa0JBQVVHLE9BQU8sQ0FBRTtBQUU5RCxVQUFJLENBQUNFLE9BQU9DLElBQUk7QUFDZnVGLGdCQUFRa04sSUFBSSw2REFBNkQ7QUFDekU7TUFDRDtBQUNBLFVBQUksQ0FBQy9TLGtCQUFVa0IsV0FBV3VFLFNBQVMsZUFBZSxLQUFLLENBQUN6RixrQkFBVWtCLFdBQVd1RSxTQUFTLFdBQVcsR0FBRztBQUNuR3FGLDZCQUFhdEUsTUFBTWhELGFBQUtpQixVQUFVLHdCQUF3QixDQUFDO0FBQzNEeUIsb0JBQUlKLEtBQUt0QyxhQUFLaUIsVUFBVSx3QkFBd0IsQ0FBQztBQUNqRDtNQUNEO0FBRUEsVUFBSSxDQUFDekUsa0JBQVVJLGFBQWFKLGtCQUFVZ0IsV0FBVyxRQUFRO0FBQ3hEa0Ysb0JBQUlKLEtBQUssNENBQTRDO0FBQ3JEO01BQ0Q7QUFHQXpGLGFBQU8yVixpQkFBaUJUO0FBQ3hCLFlBQU05VSxrQkFBa0JULGtCQUFVUztBQUNsQyxZQUFNRyxhQUFhWixrQkFBVVk7QUFDN0IsWUFBTXFWLGNBQUEsTUFBb0JSLFFBQVE7UUFDakM3VTtRQUNBK0csT0FBT2xIO01BQ1IsQ0FBQztBQUVELFlBQU15ViwrQkFBQSwyQkFBQTtBQUFBLFlBQUFDLFFBQUF0VSxrQkFBK0IsV0FBTztVQUFDcU87VUFBZVU7VUFBYVQ7UUFBYyxJQUFJLENBQUMsR0FBTTtBQUNqRyxnQkFBTWlHLGNBQWNqRyxtQkFBbUIxUDtBQUN2QyxjQUFJMlYsZUFBZXBXLGtCQUFVYSxxQkFBcUJiLGtCQUFVWSxZQUFZO0FBRXZFc0Ysd0JBQUlNLE1BQU0sMENBQTBDO0FBQ3BEO1VBQ0Q7QUFDQSxnQkFBTW1QLGNBQWFTLGNBQUEsTUFBb0JsUCxhQUFLa0MsMkJBQTJCK0csY0FBYyxJQUFJblEsa0JBQVVZO0FBRW5HLGdCQUFNeVYsT0FBQSxNQUFhWixRQUFRO1lBQUM3VSxZQUFBK1U7WUFBWWhPLE9BQU93STtVQUFjLENBQUM7QUFDOUQsZ0JBQU1tRyxnQkFBZ0IzQixpQkFBU0UsV0FBVyxrQkFBa0I7WUFDM0RqRTtZQUNBVjtZQUNBTSxtQkFBbUJMO1VBQ3BCLENBQUM7QUFDRCxnQkFBTWtCLFVBQ0xpRixrQkFDQzFGLGNBQUEsTUFBQXBQLE9BQ1FvUCxhQUFXLE1BQUEsRUFBQXBQLE9BQU9nQyxhQUFLaUIsVUFBVSx3QkFBd0IsQ0FBQyxJQUNoRWpCLGFBQUtpQixVQUFVLHdCQUF3QjtBQUMzQyxnQkFBTThOLFFBQVFyRyxXQUFXLE1BQU07QUFDOUJwQixpQ0FBYWUsUUFBUXJJLGFBQUtpQixVQUFVLFNBQVMsQ0FBQztVQUMvQyxHQUFHLEdBQUc7QUFDTixnQkFBTThSLGlCQUFBLE1BQXVCRixLQUFLOU4sWUFBWTtZQUM3Q0MsU0FBUzBIO1VBQ1YsQ0FBQztBQUNELGdCQUFNc0csd0JBQXdCLENBQUNKLGVBQWVwVyxrQkFBVWEscUJBQXFCYixrQkFBVVk7QUFDdkYsZ0JBQU02VixZQUNMOUIsaUJBQVNFLFdBQVcsdUJBQXVCLE1BQU07VUFDakRGLGlCQUFTRSxXQUFXLHVCQUF1QixNQUFNLFVBQ2pERixpQkFBU0UsV0FBVyxvQkFBb0IsTUFBTSxRQUM5Q0YsaUJBQVNFLFdBQVcsb0JBQW9CLE1BQU07QUFDL0MsZ0JBQU02QixpQkFBaUIvQixpQkFBU0UsV0FBVyxrQkFBa0I7QUFDN0QsZ0JBQU04QixrQkFBa0IsQ0FBQTtBQUN4QixnQkFBTUMsV0FBV0YsbUJBQUEsUUFBQUEsbUJBQUEsVUFBQUEsZUFBZ0J0VSxTQUFTc1UsaUJBQWlCQztBQUMzREUsdUJBQWF0RSxLQUFLO0FBQ2xCekgsK0JBQWFxQixNQUFNO0FBRW5CLGNBQUlxSyx1QkFBdUI7QUFDMUIxTCxpQ0FBYTNCLFFBQVEzRixhQUFLaUIsVUFBVSxzQkFBc0IsQ0FBQztVQUM1RDtBQUVBLGdCQUFNcVMsMEJBQTBCVixjQUFjLENBQUNULGNBQWFIO0FBRTVEakkscUJBQUc2RCxtQkFBbUI7WUFDckJ6SixPQUFBLEdBQUFuRyxPQUFVZ0MsYUFBS2lCLFVBQVUsa0JBQWtCLENBQUMsRUFBQWpELE9BQzNDZ1Ysd0JBQXdCaFQsYUFBS2lCLFVBQVUsc0JBQXNCLElBQUksRUFDbEU7WUFDQXFFLFNBQVNnTywwQkFBMEJ0VCxhQUFLaUIsVUFBVSxpQkFBaUIsSUFBSThSO1lBQ3ZFbEY7WUFDQUMsUUFBUS9ELFdBQUdtRTtZQUNYSCxTQUFVOUcsY0FBYTtBQUN0QixxQkFBTzRMLEtBQUszTixjQUFjK0IsUUFBUTtZQUNuQztZQUNBK0csUUFBQSxXQUFBO0FBQUEsa0JBQUF1RixRQUFBbFYsa0JBQVEsV0FBTztnQkFBQ2lIO2dCQUFTdUksU0FBQTJGO2dCQUFTOUU7Y0FBVyxHQUFNO0FBQ2xELHNCQUFNK0UsY0FBYztrQkFDbkJuTztrQkFDQXZJLFFBQVE7b0JBQ1A4USxTQUFBMkY7b0JBQ0EsR0FBSTlHLGtCQUFrQixLQUFLLENBQUMsSUFBSTtzQkFBQzFILFNBQVMwSDtvQkFBYTtvQkFDdkQsR0FBSTBHLFNBQVN4VSxTQUFTO3NCQUFDOFUsTUFBTU4sU0FBU08sS0FBSyxHQUFHO29CQUFDLElBQUksQ0FBQztrQkFDckQ7Z0JBQ0Q7QUFDQSxvQkFBSWpGLGFBQWE7QUFDaEIrRSw4QkFBWTFXLE9BQU82VyxRQUFRO2dCQUM1QixPQUFPO0FBQ05ILDhCQUFZMVcsT0FBTzhXLFdBQVc7Z0JBQy9CO0FBQ0Esc0JBQU1oQixLQUFLeE4sS0FBS29PLFdBQVc7Y0FDNUIsQ0FBQTtBQUFBLHFCQUFBLFNBQUF6RixPQUFBOEYsS0FBQTtBQUFBLHVCQUFBUCxNQUFBakIsTUFBQSxNQUFBQyxTQUFBO2NBQUE7WUFBQSxFQUFBO1lBQ0F0RSxTQUFTZ0Y7VUFDVixDQUFDO1FBQ0YsQ0FBQTtBQUFBLGVBQUEsU0F4RU1QLGdDQUFBO0FBQUEsaUJBQUFDLE1BQUFMLE1BQUEsTUFBQUMsU0FBQTtRQUFBO01BQUEsRUFBQTtBQTBFTixZQUFNd0Isb0NBQUEsMkJBQUE7QUFBQSxZQUFBQyxTQUFBM1Ysa0JBQW9DLGFBQVk7QUFDckQwTCxxQkFBRytGLHdCQUF3QjtZQUMxQjlCLFFBQUEsV0FBQTtBQUFBLGtCQUFBaUcsU0FBQTVWLGtCQUFRLFdBQU87Z0JBQUM4RjtnQkFBT21NLGlCQUFpQjtjQUFLLEdBQU07QUFDbEQsc0JBQU11QyxPQUFBLE1BQWFaLFFBQVE7a0JBQUM5TjtnQkFBSyxDQUFDO0FBQ2xDLHNCQUFNK1AsbUJBQWtCMVgsa0JBQVVTO0FBQ2xDLHNCQUFNcUMsVUFBVTtrQkFDZmdHLFNBQUEsZUFBQXRILE9BQXdCa1csa0JBQWUsSUFBQTtrQkFDdkNuWCxRQUFRO29CQUNQOFEsU0FBUzdOLGFBQUtpQixVQUFVLHlCQUF5QixDQUFDa0QsT0FBTytQLGdCQUFlLENBQUM7a0JBQzFFO2dCQUNEO0FBQ0Esb0JBQUksQ0FBQzVELGdCQUFnQjtBQUNwQmhSLDBCQUFRdkMsT0FBT3FLLGFBQWE7Z0JBQzdCO0FBQ0Esc0JBQU15TCxLQUFLeE4sS0FBSy9GLE9BQU87Y0FDeEIsQ0FBQTtBQUFBLHFCQUFBLFNBQUEwTyxPQUFBbUcsS0FBQTtBQUFBLHVCQUFBRixPQUFBM0IsTUFBQSxNQUFBQyxTQUFBO2NBQUE7WUFBQSxFQUFBO1lBQ0F4QyxXQUFXQSxDQUFDO2NBQUM1TDtZQUFLLE1BQU07QUFDdkJsRyx1QkFBU3dQLE9BQU9qUixrQkFBVWMsWUFBWUosUUFBUSxTQUFTaUgsS0FBSztZQUM3RDtVQUNELENBQUM7UUFDRixDQUFBO0FBQUEsZUFBQSxTQXBCTTRQLHFDQUFBO0FBQUEsaUJBQUFDLE9BQUExQixNQUFBLE1BQUFDLFNBQUE7UUFBQTtNQUFBLEVBQUE7QUFzQk4sWUFBTTZCLDhCQUFBLDJCQUFBO0FBQUEsWUFBQUMsU0FBQWhXLGtCQUE4QixhQUFZO0FBQy9DMEwscUJBQUcwRyxrQkFBa0I7WUFDcEJDLFVBQVVBLENBQUM7Y0FBQ0c7WUFBUSxNQUFNO0FBQ3pCdlEsbUJBQUtDLE1BQU1zUSxRQUFRO0FBQ25CclEsMkJBQWFRLFFBQVEscUJBQXFCNlAsUUFBUTtZQUNuRDtVQUNELENBQUM7UUFDRixDQUFBO0FBQUEsZUFBQSxTQVBNdUQsK0JBQUE7QUFBQSxpQkFBQUMsT0FBQS9CLE1BQUEsTUFBQUMsU0FBQTtRQUFBO01BQUEsRUFBQTtBQVNOLFlBQU0rQixnQkFBQSwyQkFBQTtBQUFBLFlBQUFDLFNBQUFsVyxrQkFBZ0IsV0FBTztVQUFDcU87UUFBYSxHQUFNO0FBQ2hELGdCQUFNK0YsWUFBWTFOLFlBQVk7WUFDN0JDLFNBQVMwSDtVQUNWLENBQUM7UUFDRixDQUFBO0FBQUEsZUFBQSxTQUpNNEgsZUFBQUUsS0FBQTtBQUFBLGlCQUFBRCxPQUFBakMsTUFBQSxNQUFBQyxTQUFBO1FBQUE7TUFBQSxFQUFBO0FBTU54SSxpQkFBR3dDLHdCQUF3Qm1HLDRCQUE0QjtBQUN2RDNJLGlCQUFHOEMsOEJBQThCNkYsNEJBQTRCO0FBQzdEM0ksaUJBQUd5RCxzQkFBc0JrRiw0QkFBNEI7QUFDckQzSSxpQkFBR3FDLDJCQUEyQjJILGlDQUFpQztBQUMvRGhLLGlCQUFHdUMsMEJBQTBCOEgsMkJBQTJCO0FBQ3hEckssaUJBQUdpSCxrQkFBa0JzRCxhQUFhO0lBQ25DLENBQUMsQ0FBQTtFQUFBO0FBQUEsQ0FBQTs7a0JDcExBLGFBQTJCO0FBQzNCLFFBQU07SUFBQ0c7SUFBVUM7RUFBVyxJQUFJNVgsR0FBR0MsT0FBT0MsSUFBSTtBQUM5QyxNQUFJeVgsYUFBYSxVQUFVLENBQUNDLGFBQWE7QUFDeEM7RUFDRDtBQUVBLFFBQU07SUFBQyx1QkFBdUJDO0VBQVUsSUFBSTdYLEdBQUcrSixLQUFLK04sUUFBUTVYLElBQUk7QUFFaEUsUUFBTTJKLFNBQUEsMkJBQUE7QUFBQSxRQUFBa08sU0FBQXhXLGtCQUFTLGFBQTJCO0FBQ3pDLFlBQU1tSSxRQUFBK0MsUUFBQSxFQUFBdUwsS0FBQSxPQUFBaEQsYUFBQSxHQUFBRCxnQkFBQTtJQUNQLENBQUE7QUFBQSxXQUFBLFNBRk1sTCxVQUFBO0FBQUEsYUFBQWtPLE9BQUF2QyxNQUFBLE1BQUFDLFNBQUE7SUFBQTtFQUFBLEVBQUE7QUFLTixNQUFJb0MsWUFBWTtBQUNmLFVBQU03WCxHQUFHNkosT0FBT0MsTUFBTSx1QkFBdUI7RUFDOUM7QUFFQSxPQUFLRCxPQUFPO0FBQ2IsQ0FBQSxFQUFHOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJuYXZpZ2F0b3IiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIkNvbnN0YW50cyIsICJjb25zdGFudHNfZGVmYXVsdCIsICJpbml0X2NvbnN0YW50cyIsICJfX2VzbSIsICJ2ZXJzaW9uIiwgImlzQXJ0aWNsZSIsICJ3aW5kb3ciLCAibXciLCAiY29uZmlnIiwgImdldCIsICJjdXJyZW50UGFnZU5hbWUiLCAicmVwbGFjZSIsICJhcnRpY2xlSWQiLCAicmV2aXNpb25JZCIsICJsYXRlc3RSZXZpc2lvbklkIiwgImFydGljbGVQYXRoIiwgInNjcmlwdFBhdGgiLCAiYWN0aW9uIiwgInNraW4iLCAidXNlckdyb3VwcyIsICJ3aWtpSWQiLCAiUmVxdWVzdHMiLCAicmVxdWVzdHNfZGVmYXVsdCIsICJpbml0X3JlcXVlc3RzIiwgImJhc2UiLCAiY29uY2F0IiwgImxvY2F0aW9uIiwgInByb3RvY29sIiwgImhvc3QiLCAicXVlcnkiLCAiX2FzeW5jVG9HZW5lcmF0b3IiLCAidXJsIiwgIlVSTCIsICJfaSIsICJfT2JqZWN0JGtleXMiLCAiT2JqZWN0IiwgImtleXMiLCAibGVuZ3RoIiwgImtleSIsICJzZWFyY2hQYXJhbXMiLCAiYXBwZW5kIiwgInJlc3BvbnNlIiwgImZldGNoIiwgImNyZWRlbnRpYWxzIiwgImhlYWRlcnMiLCAianNvbiIsICJwb3N0IiwgInBheWxvYWQiLCAiZm9ybSIsICJGb3JtRGF0YSIsICJfaTIiLCAiX09iamVjdCRlbnRyaWVzIiwgImVudHJpZXMiLCAidmFsdWUiLCAibWV0aG9kIiwgImJvZHkiLCAiSTE4biIsICJpMThuX2RlZmF1bHQiLCAiaW5pdF9pMThuIiwgImxhbmd1YWdlIiwgImkxOG5EYXRhIiwgInNlc3Npb25VcGRhdGVMb2ciLCAiY29uc3RydWN0b3IiLCAiSlNPTiIsICJwYXJzZSIsICJsb2NhbFN0b3JhZ2UiLCAibmF2aWdhdG9yIiwgInRvTG93ZXJDYXNlIiwgImJyb3dzZXJMYW5ndWFnZSIsICJpMThuQ2FjaGUiLCAiZ2V0SXRlbSIsICJfaTMiLCAiX09iamVjdCRrZXlzMiIsICJzZXRJdGVtIiwgInRyYW5zbGF0ZSIsICJwbGFjZWhvbGRlcnMiLCAicmVzdWx0IiwgImxvYWRMYW5ndWFnZSIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAiaW5kZXgiLCAicGxhY2Vob2xkZXIiLCAiZXJyIiwgImUiLCAiZiIsICJfdGhpcyIsICJpbmNsdWRlcyIsICJub3dWZXJzaW9uIiwgInB1c2giLCAiX192ZXJzaW9uIiwgImNvbnNvbGUiLCAiaW5mbyIsICJzdHJpbmdpZnkiLCAiV2lraXBsdXNFcnJvciIsICJMb2ciLCAibG9nX2RlZmF1bHQiLCAiaW5pdF9sb2ciLCAiRXJyb3IiLCAibWVzc2FnZSIsICJjb2RlIiwgImRlYnVnIiwgImVycm9yIiwgImVycm9yQ29kZSIsICJwYXlsb2FkcyIsICJ0ZW1wbGF0ZSIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJpIiwgInYiLCAiUmVnRXhwIiwgIldpa2kiLCAid2lraV9kZWZhdWx0IiwgImluaXRfd2lraSIsICJwYWdlSW5mb0NhY2hlIiwgImdldEVkaXRUb2tlbiIsICJtZXRhIiwgImZvcm1hdCIsICJ0b2tlbnMiLCAiY3NyZnRva2VuIiwgImdldFBhZ2VJbmZvIiwgInRpdGxlIiwgIl90aGlzMiIsICJwYXJhbXMiLCAicHJvcCIsICJydnByb3AiLCAicmV2aWRzIiwgInRpbWVzdGFtcCIsICJyZXZpZCIsICJ0aXRsZXMiLCAicGFnZXMiLCAicGFnZUluZm8iLCAicmV2aXNpb25zIiwgImdldFdpa2lUZXh0IiwgInNlY3Rpb24iLCAidGV4dCIsICJwYXJzZVdpa2lUZXh0IiwgIndpa2l0ZXh0IiwgInBzdCIsICJlZGl0IiwgImNvbnRlbnQiLCAiZWRpdFRva2VuIiwgImFkZGl0aW9uYWxDb25maWciLCAidG9rZW4iLCAiYmFzZXRpbWVzdGFtcCIsICJ3YXJuaW5nIiwgImdldExhdGVzdFJldmlzaW9uSWRGb3JQYWdlIiwgIl90aGlzMyIsICJQYWdlIiwgInBhZ2VfZGVmYXVsdCIsICJpbml0X3BhZ2UiLCAiaW5pdGVkIiwgImlzTmV3UGFnZSIsICJzZWN0aW9uQ2FjaGUiLCAiaW5pdCIsICJfdGhpczQiLCAicHJvbWlzZUFyciIsICJnZXRUaW1lc3RhbXAiLCAiUHJvbWlzZSIsICJhbGwiLCAiX3RoaXM1IiwgImxvYWRlciIsICJ1c2luZyIsICJ1c2VyIiwgIl90aGlzNiIsICJfdGhpczciLCAic2VjIiwgIndpa2lUZXh0IiwgIl90aGlzOCIsICJfdGhpczkiLCAiY3JlYXRlb25seSIsICJOb3RpZmljYXRpb24iLCAibm90aWZpY2F0aW9uX2RlZmF1bHQiLCAiaW5pdF9ub3RpZmljYXRpb24iLCAiJCIsICJkaXNwbGF5IiwgInR5cGUiLCAiY2FsbGJhY2siLCAiYWRkQ2xhc3MiLCAiZmluZCIsICJsYXN0IiwgImZhZGVJbiIsICJiaW5kIiwgImNsZWFyIiwgInNlbGYiLCAib24iLCAic2xpZGVMZWZ0IiwgInN1Y2Nlc3MiLCAiY2hpbGRyZW4iLCAiZmlyc3QiLCAiZmFkZU91dCIsICJyZW1vdmUiLCAic2V0VGltZW91dCIsICJlbXB0eSIsICJlYWNoIiwgImVsZSIsICJkZWxheSIsICJzcGVlZCIsICJjc3MiLCAiYW5pbWF0ZSIsICJsZWZ0IiwgInNsZWVwIiwgInNsZWVwX2RlZmF1bHQiLCAiaW5pdF9zbGVlcCIsICJ0aW1lIiwgInJlc29sdmUiLCAicGFyc2VRdWVyeSIsICJyZWciLCAibWF0Y2giLCAiZXhlYyIsICJkZWNvZGVVUklDb21wb25lbnQiLCAiaW5pdF9oZWxwZXJzIiwgIlVJIiwgInVpX2RlZmF1bHQiLCAiaW5pdF91aSIsICJxdWlja0VkaXRQYW5lbFZpc2libGUiLCAic2Nyb2xsVG9wIiwgImNyZWF0ZURpYWxvZ0JveCIsICJ3aWR0aCIsICJjbGllbnRXaWR0aCIsICJpbm5lcldpZHRoIiwgImNsaWVudEhlaWdodCIsICJpbm5lckhlaWdodCIsICJkaWFsb2dXaWR0aCIsICJNYXRoIiwgIm1pbiIsICJkaWFsb2dCb3giLCAidG9wIiwgImRvY3VtZW50IiwgImh0bWwiLCAicGFyZW50IiwgImFkZEV2ZW50TGlzdGVuZXIiLCAib25iZWZvcmV1bmxvYWQiLCAiYmluZERyYWdnaW5nIiwgImVsZW1lbnQiLCAibW91c2Vkb3duIiwgImJhc2VYIiwgImNsaWVudFgiLCAiYmFzZVkiLCAiY2xpZW50WSIsICJiYXNlT2Zmc2V0WCIsICJvZmZzZXQiLCAiYmFzZU9mZnNldFkiLCAiZTIiLCAidW5iaW5kIiwgIm9mZiIsICJhZGRGdW5jdGlvbkJ1dHRvbiIsICJpZCIsICJidXR0b24iLCAiYXR0ciIsICJpbnNlcnRTaW1wbGVSZWRpcmVjdEJ1dHRvbiIsICJvbkNsaWNrIiwgImluc2VydFNldHRpbmdzUGFuZWxCdXR0b24iLCAiaW5zZXJ0VG9wUXVpY2tFZGl0RW50cnkiLCAidG9wQnRuIiwgInRvcEJ0bkxpbmsiLCAic2VjdGlvbk51bWJlciIsICJ0YXJnZXRQYWdlTmFtZSIsICJhZnRlciIsICJpbnNlcnRTZWN0aW9uUXVpY2tFZGl0RW50cmllcyIsICJzZWN0aW9uQnRuIiwgImVkaXRVUkwiLCAic2VjdGlvblRhcmdldE5hbWUiLCAiY2xvbmVOb2RlIiwgInByZXYiLCAiY2xvbmUiLCAic2VjdGlvbk5hbWUiLCAidHJpbSIsICJfc2VjdGlvbkJ0biIsICJiZWZvcmUiLCAiaW5zZXJ0TGlua0VkaXRFbnRyaWVzIiwgImhyZWYiLCAiY2xhc3MiLCAiX3BhcmFtcyRzZWN0aW9uIiwgInNob3dRdWlja0VkaXRQYW5lbCIsICJzdW1tYXJ5IiwgIm9uQmFjayIsICJvblBhcnNlIiwgIm9uRWRpdCIsICJlc2NFeGl0IiwgImhpZGVRdWlja0VkaXRQYW5lbCIsICJiYWNrQnRuIiwgImp1bXBCdG4iLCAiaW5wdXRCb3giLCAicHJldmlld0JveCIsICJzdW1tYXJ5Qm94IiwgImVkaXRTdWJtaXRCdG4iLCAicHJldmlld1N1Ym1pdEJ0biIsICJpc01pbm9yRWRpdCIsICJtYXJnaW4iLCAiZWRpdEJvZHkiLCAidmFsIiwgInByZWxvYWRCYW5uZXIiLCAidGltZXIiLCAiRGF0ZSIsICJub3ciLCAiZWRpdEJhbm5lciIsICJpcyIsICJ1c2VUaW1lIiwgInRvU3RyaW5nIiwgInJlbG9hZCIsICJsb2ciLCAiY3RybEtleSIsICJ3aGljaCIsICJzaGlmdEtleSIsICJ0cmlnZ2VyIiwgInByZXZlbnREZWZhdWx0IiwgInN0b3BQcm9wYWdhdGlvbiIsICJzaG93U2ltcGxlUmVkaXJlY3RQYW5lbCIsICJvblN1Y2Nlc3MiLCAiX3RoaXMxMCIsICJpbnB1dCIsICJhcHBseUJ0biIsICJjYW5jZWxCdG4iLCAiY29udGludWVCdG4iLCAiZGlhbG9nIiwgImZvcmNlT3ZlcndyaXRlIiwgImhpZGVTaW1wbGVSZWRpcmVjdFBhbmVsIiwgImVycm9yMiIsICJzaG93U2V0dGluZ3NQYW5lbCIsICJvblN1Ym1pdCIsICJfdGhpczExIiwgIldpa2lwbHVzX1NldHRpbmdzIiwgInNldHRpbmdzIiwgInNhdmVkQmFubmVyIiwgImhpZGVTZXR0aW5nc1BhbmVsIiwgImJpbmRQcmVsb2FkRXZlbnRzIiwgIm9uUHJlbG9hZCIsICJTZXR0aW5ncyIsICJzZXR0aW5nc19kZWZhdWx0IiwgImluaXRfc2V0dGluZ3MiLCAiZ2V0U2V0dGluZyIsICJvYmplY3QiLCAidyIsICJjdXN0b21TZXR0aW5nRnVuY3Rpb24iLCAiRnVuY3Rpb24iLCAiX2k0IiwgIl9PYmplY3Qka2V5czMiLCAia2V5MiIsICJtb2R1bGVzX2V4cG9ydHMiLCAiaW5pdF9tb2R1bGVzIiwgIlBhZ2VzIiwgImlzQ3VycmVudFBhZ2VFbXB0eSIsICJnZXRQYWdlIiwgIl9yZWY3IiwgInJldmlzaW9uSWQyIiwgIm5ld1BhZ2UiLCAiX3giLCAiYXBwbHkiLCAiYXJndW1lbnRzIiwgIl9XaWtpcGx1c1BhZ2VzIiwgImN1cnJlbnRQYWdlIiwgImhhbmRsZVF1aWNrRWRpdEJ1dHRvbkNsaWNrZWQiLCAiX3JlZjgiLCAiaXNPdGhlclBhZ2UiLCAicGFnZSIsICJjdXN0b21TdW1tYXJ5IiwgInNlY3Rpb25Db250ZW50IiwgImlzRWRpdEhpc3RvcnlSZXZpc2lvbiIsICJlc2NUb0V4aXQiLCAiY3VzdG9tRWRpdFRhZ3MiLCAiZGVmYXVsdEVkaXRUYWdzIiwgImVkaXRUYWdzIiwgImNsZWFyVGltZW91dCIsICJzaG91bGRTaG93Q3JlYXRlUGFnZVRpcCIsICJfcmVmOSIsICJzdW1tYXJ5MiIsICJlZGl0UGF5bG9hZCIsICJ0YWdzIiwgImpvaW4iLCAibWlub3IiLCAibm90bWlub3IiLCAiX3gyIiwgImhhbmRsZVNpbXBsZVJlZGlyZWN0QnV0dG9uQ2xpY2tlZCIsICJfcmVmMTAiLCAiX3JlZjExIiwgImN1cnJlbnRQYWdlTmFtZTIiLCAiX3gzIiwgImhhbmRsZVNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsICJfcmVmMTIiLCAiaGFuZGxlUHJlbG9hZCIsICJfcmVmMTMiLCAiX3g0IiwgIndnQWN0aW9uIiwgIndnSXNBcnRpY2xlIiwgImlzVmVFbmFibGUiLCAib3B0aW9ucyIsICJfcmVmMTUiLCAidGhlbiJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuaGFzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5zaXplLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3V0aWxzL2NvbnN0YW50cy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9yZXF1ZXN0cy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9pMThuLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3V0aWxzL2xvZy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy9zZXJ2aWNlcy93aWtpLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL2NvcmUvcGFnZS5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy9jb3JlL25vdGlmaWNhdGlvbi5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9zbGVlcC5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9oZWxwZXJzLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL2NvcmUvdWkuanMiLCAic3JjL1dpa2lwbHVzL21vZHVsZXMvdXRpbHMvc2V0dGluZ3MuanMiLCAic3JjL1dpa2lwbHVzL21vZHVsZXMvaW5kZXguanMiLCAic3JjL1dpa2lwbHVzL1dpa2lwbHVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIFNhZmFyaSA8IDEzIGRvZXMgbm90IHRocm93IGFuIGVycm9yIGluIHRoaXMgY2FzZVxudmFyIFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA9IERFU0NSSVBUT1JTICYmICFmdW5jdGlvbiAoKSB7XG4gIC8vIG1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgcHJvcGVyIHN0cmljdCBtb2RlIHN1cHBvcnRcbiAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkubGVuZ3RoID0gMTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPyBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIGlmIChpc0FycmF5KE8pICYmICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgJ2xlbmd0aCcpLndyaXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyICRVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXM7XG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gJFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgYXBwZW5kID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmFwcGVuZCk7XG52YXIgJGRlbGV0ZSA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZVsnZGVsZXRlJ10pO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZm9yRWFjaCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHBhcmFtcyA9IG5ldyAkVVJMU2VhcmNoUGFyYW1zKCdhPTEmYT0yJmI9MycpO1xuXG5wYXJhbXNbJ2RlbGV0ZSddKCdhJywgMSk7XG4vLyBgdW5kZWZpbmVkYCBjYXNlIGlzIGEgQ2hyb21pdW0gMTE3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQyMjJcbnBhcmFtc1snZGVsZXRlJ10oJ2InLCB1bmRlZmluZWQpO1xuXG5pZiAocGFyYW1zICsgJycgIT09ICdhPTInKSB7XG4gIGRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAnZGVsZXRlJywgZnVuY3Rpb24gKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGlmIChsZW5ndGggJiYgJHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAkZGVsZXRlKHRoaXMsIG5hbWUpO1xuICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgZm9yRWFjaCh0aGlzLCBmdW5jdGlvbiAodiwgaykgeyAvLyBhbHNvIHZhbGlkYXRlcyBgdGhpc2BcbiAgICAgIHB1c2goZW50cmllcywgeyBrZXk6IGssIHZhbHVlOiB2IH0pO1xuICAgIH0pO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGxlbmd0aCwgMSk7XG4gICAgdmFyIGtleSA9IHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciB2YWx1ZSA9IHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZGluZGV4ID0gMDtcbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICB2YXIgZW50cmllc0xlbmd0aCA9IGVudHJpZXMubGVuZ3RoO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzTGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBpZiAoZm91bmQgfHwgZW50cnkua2V5ID09PSBrZXkpIHtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAkZGVsZXRlKHRoaXMsIGVudHJ5LmtleSk7XG4gICAgICB9IGVsc2UgZGluZGV4Kys7XG4gICAgfVxuICAgIHdoaWxlIChkaW5kZXggPCBlbnRyaWVzTGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbZGluZGV4KytdO1xuICAgICAgaWYgKCEoZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgPT09IHZhbHVlKSkgYXBwZW5kKHRoaXMsIGVudHJ5LmtleSwgZW50cnkudmFsdWUpO1xuICAgIH1cbiAgfSwgeyBlbnVtZXJhYmxlOiB0cnVlLCB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgJFVSTFNlYXJjaFBhcmFtcyA9IFVSTFNlYXJjaFBhcmFtcztcbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSAkVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcbnZhciBnZXRBbGwgPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZ2V0QWxsKTtcbnZhciAkaGFzID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmhhcyk7XG52YXIgcGFyYW1zID0gbmV3ICRVUkxTZWFyY2hQYXJhbXMoJ2E9MScpO1xuXG4vLyBgdW5kZWZpbmVkYCBjYXNlIGlzIGEgQ2hyb21pdW0gMTE3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQyMjJcbmlmIChwYXJhbXMuaGFzKCdhJywgMikgfHwgIXBhcmFtcy5oYXMoJ2EnLCB1bmRlZmluZWQpKSB7XG4gIGRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAnaGFzJywgZnVuY3Rpb24gaGFzKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGlmIChsZW5ndGggJiYgJHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAkaGFzKHRoaXMsIG5hbWUpO1xuICAgIHZhciB2YWx1ZXMgPSBnZXRBbGwodGhpcywgbmFtZSk7IC8vIGFsc28gdmFsaWRhdGVzIGB0aGlzYFxuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGxlbmd0aCwgMSk7XG4gICAgdmFyIHZhbHVlID0gdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIGlmICh2YWx1ZXNbaW5kZXgrK10gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICB9IHJldHVybiBmYWxzZTtcbiAgfSwgeyBlbnVtZXJhYmxlOiB0cnVlLCB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5nZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3IuZ2V0LCBuYW1lLCB7IGdldHRlcjogdHJ1ZSB9KTtcbiAgaWYgKGRlc2NyaXB0b3Iuc2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLnNldCwgbmFtZSwgeyBzZXR0ZXI6IHRydWUgfSk7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9IFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5mb3JFYWNoKTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2l6ZWAgZ2V0dGVyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3VybC9wdWxsLzczNFxuaWYgKERFU0NSSVBUT1JTICYmICEoJ3NpemUnIGluIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSkpIHtcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgIGZvckVhY2godGhpcywgZnVuY3Rpb24gKCkgeyBjb3VudCsrOyB9KTtcbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuIiwgImNsYXNzIENvbnN0YW50cyB7XG5cdHZlcnNpb24gPSAnNC4wLjEyJztcblx0Z2V0IGlzQXJ0aWNsZSgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnSXNBcnRpY2xlJyk7XG5cdH1cblx0Z2V0IGN1cnJlbnRQYWdlTmFtZSgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKS5yZXBsYWNlKC8gL2csICdfJyk7XG5cdH1cblx0Z2V0IGFydGljbGVJZCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZUlkJyk7XG5cdH1cblx0Z2V0IHJldmlzaW9uSWQoKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5tdy5jb25maWcuZ2V0KCd3Z1JldmlzaW9uSWQnKTtcblx0fVxuXHRnZXQgbGF0ZXN0UmV2aXNpb25JZCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnQ3VyUmV2aXNpb25JZCcpO1xuXHR9XG5cdGdldCBhcnRpY2xlUGF0aCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZVBhdGgnKTtcblx0fVxuXHRnZXQgc2NyaXB0UGF0aCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnU2NyaXB0UGF0aCcpO1xuXHR9XG5cdGdldCBhY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5tdy5jb25maWcuZ2V0KCd3Z0FjdGlvbicpO1xuXHR9XG5cdGdldCBza2luKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnc2tpbicpO1xuXHR9XG5cdGdldCB1c2VyR3JvdXBzKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dVc2VyR3JvdXBzJyk7XG5cdH1cblx0Z2V0IHdpa2lJZCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnV2lraUlEJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IENvbnN0YW50cygpO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5cbmNvbnN0IFJlcXVlc3RzID0ge1xuXHRiYXNlOiBgJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdH0ke0NvbnN0YW50cy5zY3JpcHRQYXRofS9hcGkucGhwYCxcblx0YXN5bmMgZ2V0KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgdXJsID0gbmV3IFVSTChSZXF1ZXN0cy5iYXNlKTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhxdWVyeSkpIHtcblx0XHRcdHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgcXVlcnlba2V5XSk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG5cdFx0XHRjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcblx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0J0FwaS1Vc2VyLUFnZW50JzogYFdpa2lwbHVzLyR7Q29uc3RhbnRzLnZlcnNpb259ICgke0NvbnN0YW50cy53aWtpSWR9KWAsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHRcdHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cdH0sXG5cdGFzeW5jIHBvc3QocGF5bG9hZCkge1xuXHRcdGNvbnN0IHVybCA9IG5ldyBVUkwoUmVxdWVzdHMuYmFzZSk7XG5cdFx0Y29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpO1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQpKSB7XG5cdFx0XHRmb3JtLmFwcGVuZChrZXksIHZhbHVlKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0Ym9keTogZm9ybSxcblx0XHRcdGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHQnQXBpLVVzZXItQWdlbnQnOiBgV2lraXBsdXMvJHtDb25zdGFudHMudmVyc2lvbn0gKCR7Q29uc3RhbnRzLndpa2lJZH0pYCxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblx0fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RzO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5jbGFzcyBJMThuIHtcblx0bGFuZ3VhZ2U7XG5cdGkxOG5EYXRhID0ge307XG5cdHNlc3Npb25VcGRhdGVMb2cgPSBbXTtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGxhbmd1YWdlO1xuXHRcdHRyeSB7XG5cdFx0XHRsYW5ndWFnZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlWydXaWtpcGx1c19TZXR0aW5ncyddKVsnbGFuZ3VhZ2UnXSB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGxhbmd1YWdlID0gKG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlKVxuXHRcdFx0XHQucmVwbGFjZSgvaGFuW3N0XS0/L2ksICcnKSAvLyBmb3IgbGFuZ3VhZ2VzIGxpa2UgemgtSGFucy1DTlxuXHRcdFx0XHQudG9Mb3dlckNhc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuXHRcdC8vIE1lcmdlIHdpdGggbG9jYWxTdG9yYWdlIGkxOG4gY2FjaGVcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaTE4bkNhY2hlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnV2lraXBsdXNfaTE4bkNhY2hlJykpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaTE4bkNhY2hlKSkge1xuXHRcdFx0XHR0aGlzLmkxOG5EYXRhW2tleV0gPSBpMThuQ2FjaGVba2V5XTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIEZhaWwgdG8gcGFyc2UgaTE4biBjYWNoZSwgcmVzZXRcblx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdXaWtpcGx1c19pMThuQ2FjaGUnLCAne30nKTtcblx0XHR9XG5cdH1cblx0dHJhbnNsYXRlKGtleSwgcGxhY2Vob2xkZXJzID0gW10pIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMubGFuZ3VhZ2UgaW4gdGhpcy5pMThuRGF0YSkge1xuXHRcdFx0aWYgKGtleSBpbiB0aGlzLmkxOG5EYXRhW3RoaXMubGFuZ3VhZ2VdKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuaTE4bkRhdGFbdGhpcy5sYW5ndWFnZV1ba2V5XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHRyeSB1cGRhdGUgbGFuZ3VhZ2UgdmVyaXNvblxuXHRcdFx0XHR0aGlzLmxvYWRMYW5ndWFnZSh0aGlzLmxhbmd1YWdlKTtcblx0XHRcdFx0aWYgKGtleSBpbiB0aGlzLmkxOG5EYXRhWydlbi11cyddKSB7XG5cdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gRW5nbGlzaFxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuaTE4bkRhdGFbJ2VuLXVzJ11ba2V5XTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBrZXk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sb2FkTGFuZ3VhZ2UodGhpcy5sYW5ndWFnZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHBsYWNlaG9sZGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgcGxhY2Vob2xkZXJdIG9mIHBsYWNlaG9sZGVycy5lbnRyaWVzKCkpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoYCQke2luZGV4ICsgMX1gLCBwbGFjZWhvbGRlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0YXN5bmMgbG9hZExhbmd1YWdlKGxhbmd1YWdlKSB7XG5cdFx0aWYgKHRoaXMuc2Vzc2lvblVwZGF0ZUxvZy5pbmNsdWRlcyhsYW5ndWFnZSkpIHtcblx0XHRcdC8vIEhhcyBiZWVuIHVwZGF0ZWQgdGhpcyBzZXNzaW9uLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoXG5cdFx0XHRcdGF3YWl0IGZldGNoKFxuXHRcdFx0XHRcdGBodHRwczovL2dpdGNkbi5xaXV3ZW4ubmV0LmNuL0ludGVyZmFjZUFkbWluL1dpa2lwbHVzL3Jhdy9icmFuY2gvZGV2L2xhbmd1YWdlcy8ke2xhbmd1YWdlfS5qc29uYFxuXHRcdFx0XHQpXG5cdFx0XHQpLmpzb24oKTtcblx0XHRcdGNvbnN0IG5vd1ZlcnNpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnV2lraXBsdXNfTGFuZ3VhZ2VWZXJzaW9uJykgfHwgJzAwMCc7XG5cdFx0XHR0aGlzLnNlc3Npb25VcGRhdGVMb2cucHVzaChsYW5ndWFnZSk7XG5cdFx0XHRpZiAocmVzcG9uc2UuX192ZXJzaW9uICE9PSBub3dWZXJzaW9uIHx8ICEobGFuZ3VhZ2UgaW4gdGhpcy5pMThuRGF0YSkpIHtcblx0XHRcdFx0Ly8gTGFuZ3VhZ2UgZ2V0IHVwZGF0ZWRcblx0XHRcdFx0Y29uc29sZS5pbmZvKGBVcGRhdGUgJHtsYW5ndWFnZX0gc3VwcG9ydCB0byB2ZXJzaW9uICR7cmVzcG9uc2UuX192ZXJzaW9ufWApO1xuXHRcdFx0XHR0aGlzLmkxOG5EYXRhW2xhbmd1YWdlXSA9IHJlc3BvbnNlO1xuXHRcdFx0XHQvLyBVcGRhdGUgbG9jYWxTdG9yYWdlIGNhY2hlXG5cdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdXaWtpcGx1c19pMThuQ2FjaGUnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmkxOG5EYXRhKSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBVbnN1cHBvcnRlZCBsYW5ndWFnZVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgSTE4bigpO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nO1xuXG5jbGFzcyBXaWtpcGx1c0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5jb2RlID0gY29kZTtcblx0fVxufVxuXG5jb25zdCBMb2cgPSB7XG5cdGRlYnVnKG1lc3NhZ2UgPSAnJykge1xuXHRcdGNvbnNvbGUuZGVidWcoYFtXaWtpcGx1cy1ERUJVR10gJHttZXNzYWdlfWApO1xuXHR9LFxuXHRpbmZvKG1lc3NhZ2UgPSAnJykge1xuXHRcdGNvbnNvbGUuaW5mbyhgW1dpa2lwbHVzLUlORk9dICR7bWVzc2FnZX1gKTtcblx0fSxcblx0ZXJyb3IoZXJyb3JDb2RlLCBwYXlsb2FkcyA9IFtdKSB7XG5cdFx0bGV0IHRlbXBsYXRlID0gaTE4bi50cmFuc2xhdGUoZXJyb3JDb2RlKTtcblx0XHRpZiAocGF5bG9hZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gRmlsbFxuXHRcdFx0Zm9yIChjb25zdCBbaSwgdl0gb2YgcGF5bG9hZHMuZW50cmllcygpKSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcJHtpICsgMX1gLCAnaWcnKSwgdik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnNvbGUuZXJyb3IoYFtXaWtpcGx1cy1FUlJPUl0gJHt0ZW1wbGF0ZX1gKTtcblx0XHR0aHJvdyBuZXcgV2lraXBsdXNFcnJvcihgJHt0ZW1wbGF0ZX1gLCBlcnJvckNvZGUpO1xuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgcmVxdWVzdHMgZnJvbSAnLi4vdXRpbHMvcmVxdWVzdHMnO1xuaW1wb3J0IExvZyBmcm9tICcuLi91dGlscy9sb2cnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5cbmNsYXNzIFdpa2kge1xuXHRwYWdlSW5mb0NhY2hlID0ge307XG5cdC8qKlxuXHQgKiDojrflvpcgRWRpdCBUb2tlblxuXHQgKiBHZXQgRWRpdCBUb2tlblxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuXHQgKi9cblx0YXN5bmMgZ2V0RWRpdFRva2VuKCkge1xuXHRcdC8vIOWwneivleS7jiBBUEkg6I635b6XIEVkaXRUb2tlblxuXHRcdC8vIFRyeSB0byBnZXQgRWRpdFRva2VuIGZyb20gQVBJXG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5nZXQoe1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0bWV0YTogJ3Rva2VucycsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHR9KTtcblx0XHRpZiAoXG5cdFx0XHRyZXNwb25zZS5xdWVyeSAmJlxuXHRcdFx0cmVzcG9uc2UucXVlcnkudG9rZW5zICYmXG5cdFx0XHRyZXNwb25zZS5xdWVyeS50b2tlbnMuY3NyZnRva2VuICYmXG5cdFx0XHRyZXNwb25zZS5xdWVyeS50b2tlbnMuY3NyZnRva2VuICE9PSAnK1xcXFwnXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2UucXVlcnkudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHR9XG5cdFx0cmV0dXJuIExvZy5lcnJvcignZmFpbF90b19nZXRfZWRpdHRva2VuJyk7XG5cdH1cblx0LyoqXG5cdCAqIOiOt+W+l+mhtemdouS4iuS4gOeJiOacrOaXtumXtOaIs1xuXHQgKiBHZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZXZpc2lvbiBvZiBwYWdlIHNwZWNpZmllZC5cblx0ICpcblx0ICogQHBhcmFtIHtwYXJhbXMuc3RyaW5nfSB0aXRsZSDpobXpnaLlkI0gLyBQYWdlbmFtZVxuXHQgKiBAcGFyYW0ge3BhcmFtcy5yZXZpc2lvbklkfSByZXZpc2lvbklkIOS/ruiuoueJiOacrOWPtyAvIFJldmlzaW9uIElEXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG5cdCAqL1xuXHRhc3luYyBnZXRQYWdlSW5mbyh7dGl0bGUsIHJldmlzaW9uSWR9KSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRwcm9wOiAncmV2aXNpb25zfGluZm8nLFxuXHRcdFx0XHRydnByb3A6ICd0aW1lc3RhbXB8aWRzJyxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHJldmlzaW9uSWQpIHtcblx0XHRcdFx0cGFyYW1zLnJldmlkcyA9IHJldmlzaW9uSWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHRpdGxlKSB7XG5cdFx0XHRcdGlmICh0aGlzLnBhZ2VJbmZvQ2FjaGVbdGl0bGVdKSB7XG5cdFx0XHRcdFx0Ly8gSGl0IGNhY2hlXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHRpbWVzdGFtcDogdGhpcy5wYWdlSW5mb0NhY2hlW3RpdGxlXS50aW1lc3RhbXAsXG5cdFx0XHRcdFx0XHRyZXZpc2lvbklkOiB0aGlzLnBhZ2VJbmZvQ2FjaGVbdGl0bGVdLnJldmlkLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFyYW1zLnRpdGxlcyA9IHRpdGxlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5nZXQocGFyYW1zKTtcblx0XHRcdGlmIChyZXNwb25zZS5xdWVyeSAmJiByZXNwb25zZS5xdWVyeS5wYWdlcykge1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMocmVzcG9uc2UucXVlcnkucGFnZXMpWzBdID09PSAnLTEnKSB7XG5cdFx0XHRcdFx0Ly8g5LiN5a2Y5Zyo6L+Z5LiA6aG16Z2iXG5cdFx0XHRcdFx0Ly8gUGFnZSBub3QgZm91bmQuXG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHBhZ2VJbmZvID0gcmVzcG9uc2UucXVlcnkucGFnZXNbT2JqZWN0LmtleXMocmVzcG9uc2UucXVlcnkucGFnZXMpWzBdXS5yZXZpc2lvbnNbMF07XG5cdFx0XHRcdGlmICh0aXRsZSkge1xuXHRcdFx0XHRcdHRoaXMucGFnZUluZm9DYWNoZVt0aXRsZV0gPSBwYWdlSW5mbztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRpbWVzdGFtcDogcGFnZUluZm8udGltZXN0YW1wLFxuXHRcdFx0XHRcdHJldmlzaW9uSWQ6IHBhZ2VJbmZvLnJldmlkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0TG9nLmVycm9yKCdmYWlsX3RvX2dldF9lZGl0dG9rZW4nKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIOiOt+W+l+mhtemdoueahCBXaWtpdGV4dFxuXHQgKiBHZXQgd2lraXRleHQgb2YgdGhlIHBhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSB0aXRsZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucmV2aXNpb25JZCDniYjmnKzlj7dcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5zZWN0aW9uIOauteiQveWPt1xuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IHdpa2l0ZXh05YaF5a65XG5cdCAqL1xuXHRhc3luYyBnZXRXaWtpVGV4dCh7c2VjdGlvbiwgcmV2aXNpb25JZH0pIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoXG5cdFx0XHRcdGF3YWl0IGZldGNoKFxuXHRcdFx0XHRcdGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0fSR7Q29uc3RhbnRzLnNjcmlwdFBhdGh9L2luZGV4LnBocD9vbGRpZD0ke3JldmlzaW9uSWR9JnNlY3Rpb249JHtzZWN0aW9ufSZhY3Rpb249cmF3YFxuXHRcdFx0XHQpXG5cdFx0XHQpLnRleHQoKTtcblx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcignZmFpbF90b19nZXRfd2lraXRleHQnKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIOino+aekCBXaWtpdGV4dFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gd2lraXRleHQgd2lraXRleHRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIOmhtemdouagh+mimFxuXHQgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIOiuvue9rlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IOino+aekOe7k+aenCBIVE1MXG5cdCAqL1xuXHRhc3luYyBwYXJzZVdpa2lUZXh0KHdpa2l0ZXh0LCB0aXRsZSA9ICcnLCBjb25maWcgPSB7fSkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RzLnBvc3Qoe1xuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0YWN0aW9uOiAncGFyc2UnLFxuXHRcdFx0XHR0ZXh0OiB3aWtpdGV4dCxcblx0XHRcdFx0dGl0bGUsXG5cdFx0XHRcdHBzdDogJ3RydWUnLFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAocmVzcG9uc2UucGFyc2UgJiYgcmVzcG9uc2UucGFyc2UudGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UucGFyc2UudGV4dFsnKiddO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0TG9nLmVycm9yKCdjYW50X3BhcnNlX3dpa2l0ZXh0Jyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIOe8lui+kemhtemdolxuXHQgKlxuXHQgKiBAcGFyYW0gcm9vdDBcblx0ICogQHBhcmFtIHJvb3QwLnRpdGxlXG5cdCAqIEBwYXJhbSByb290MC5jb250ZW50XG5cdCAqIEBwYXJhbSByb290MC5lZGl0VG9rZW5cblx0ICogQHBhcmFtIHJvb3QwLnRpbWVzdGFtcFxuXHQgKiBAcGFyYW0gcm9vdDAuY29uZmlnXG5cdCAqIEBwYXJhbSByb290MC5hZGRpdGlvbmFsQ29uZmlnXG5cdCAqL1xuXHRhc3luYyBlZGl0KHt0aXRsZSwgY29udGVudCwgZWRpdFRva2VuLCB0aW1lc3RhbXAsIGNvbmZpZyA9IHt9LCBhZGRpdGlvbmFsQ29uZmlnID0ge319ID0ge30pIHtcblx0XHRsZXQgcmVzcG9uc2U7XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdHMucG9zdCh7XG5cdFx0XHRcdGFjdGlvbjogJ2VkaXQnLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0dGV4dDogY29udGVudCxcblx0XHRcdFx0dGl0bGUsXG5cdFx0XHRcdHRva2VuOiBlZGl0VG9rZW4sXG5cdFx0XHRcdC4uLih0aW1lc3RhbXAgPyB7YmFzZXRpbWVzdGFtcDogdGltZXN0YW1wfSA6IHt9KSxcblx0XHRcdFx0Li4uY29uZmlnLFxuXHRcdFx0XHQuLi5hZGRpdGlvbmFsQ29uZmlnLFxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRMb2cuZXJyb3IoJ25ldHdvcmtfZWRpdF9lcnJvcicpO1xuXHRcdH1cblx0XHRpZiAocmVzcG9uc2UuZWRpdCkge1xuXHRcdFx0aWYgKHJlc3BvbnNlLmVkaXQucmVzdWx0ID09PSAnU3VjY2VzcycpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVzcG9uc2UuZWRpdC5jb2RlKSB7XG5cdFx0XHRcdC8vIEFidXNlIEZpbHRlclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgICAgICAgICAgJHtpMThuLnRyYW5zbGF0ZSgnaGl0X2FidXNlZmlsdGVyJyl9OiR7cmVzcG9uc2UuZWRpdC5pbmZvLnJlcGxhY2UoJy9IaXQgQWJ1c2VGaWx0ZXI6IC9pZycsICcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IHNtYWxsZXI7XCI+JHtyZXNwb25zZS5lZGl0Lndhcm5pbmd9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIGApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmVycm9yKCd1bmtub3duX2VkaXRfZXJyb3InKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHJlc3BvbnNlLmVycm9yICYmIHJlc3BvbnNlLmVycm9yLmNvZGUpIHtcblx0XHRcdExvZy5lcnJvcihyZXNwb25zZS5lcnJvci5jb2RlKTtcblx0XHR9IGVsc2UgaWYgKHJlc3BvbnNlLmNvZGUpIHtcblx0XHRcdExvZy5lcnJvcihyZXNwb25zZS5jb2RlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKCd1bmtub3duX2VkaXRfZXJyb3InKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog6I635b6X5oyH5a6a6aG16Z2i5pyA5paw5L+u6K6i57yW5Y+3XG5cdCAqIEdldCBsYXRlc3QgcmV2aXNpb25JZCBvZiBhIHBhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdGl0bGVcblx0ICovXG5cdGFzeW5jIGdldExhdGVzdFJldmlzaW9uSWRGb3JQYWdlKHRpdGxlKSB7XG5cdFx0Y29uc3Qge3JldmlzaW9uSWR9ID0gYXdhaXQgdGhpcy5nZXRQYWdlSW5mbyh7dGl0bGV9KTtcblx0XHRyZXR1cm4gcmV2aXNpb25JZDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2lraSgpO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgV2lraSBmcm9tICcuLi9zZXJ2aWNlcy93aWtpJztcbmltcG9ydCBMb2cgZnJvbSAnLi4vdXRpbHMvbG9nJztcblxuY2xhc3MgUGFnZSB7XG5cdHRpbWVzdGFtcDtcblx0ZWRpdFRva2VuO1xuXHR0aXRsZTtcblx0cmV2aXNpb25JZDtcblxuXHRpbml0ZWQgPSBmYWxzZTtcblx0aXNOZXdQYWdlID0gZmFsc2U7XG5cblx0c2VjdGlvbkNhY2hlID0ge307XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7cGFyYW1zLnRpdGxlfSDpobXpnaLmoIfpopggUGFnZSBOYW1lIChvcHRpb25hbClcblx0ICogQHBhcmFtIHtwYXJhbXMucmV2aXNpb25JZH0g6aG16Z2i5L+u6K6i57yW5Y+3IFJldmlzaW9uIElkXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih7dGl0bGUsIHJldmlzaW9uSWR9KSB7XG5cdFx0dGhpcy50aXRsZSA9IHRpdGxlO1xuXHRcdHRoaXMucmV2aXNpb25JZCA9IHJldmlzaW9uSWQ7XG5cdFx0dGhpcy5pc05ld1BhZ2UgPSAhcmV2aXNpb25JZDtcblx0fVxuXG5cdC8qKlxuXHQgKiDliJ3lp4vljJYg6I635b6X6aG16Z2iRWRpdFRva2Vu5ZKM5Yid5aeLVGltZVN0YW1wXG5cdCAqIEluaXRpYWxpemF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZWRpdFRva2VuIChvcHRpb25hbCkg5aaC5p6c5o+Q5L6b5LqGZWRpdFRva2Vu77yM5bCG5LiN5Lya5YaN6I635Y+WXG5cdCAqL1xuXHRhc3luYyBpbml0KHtlZGl0VG9rZW4gPSAnJ30gPSB7fSkge1xuXHRcdGNvbnN0IHByb21pc2VBcnIgPSBbdGhpcy5nZXRUaW1lc3RhbXAoKV07XG5cdFx0aWYgKCFlZGl0VG9rZW4pIHtcblx0XHRcdHByb21pc2VBcnIucHVzaCh0aGlzLmdldEVkaXRUb2tlbigpKTtcblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycik7XG5cdFx0dGhpcy5pbml0ZWQgPSB0cnVlO1xuXHRcdExvZy5pbmZvKGBQYWdlIGluaXRpYWxpemF0aW9uIGZvciAke3RoaXMudGl0bGV9IyR7dGhpcy5yZXZpc2lvbklkfSBmaW5pc2hlZC5gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiDojrflvpcgRWRpdFRva2VuXG5cdCAqIEdldCBFZGl0VG9rZW5cblx0ICovXG5cdGFzeW5jIGdldEVkaXRUb2tlbigpIHtcblx0XHRhd2FpdCBtdy5sb2FkZXIudXNpbmcoJ21lZGlhd2lraS51c2VyJyk7XG5cdFx0aWYgKG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJykgJiYgbXcudXNlci50b2tlbnMuZ2V0KCdjc3JmVG9rZW4nKSAhPT0gJytcXFxcJykge1xuXHRcdFx0Ly8g5aaC5p6cIE1lZGlhV2lraSBKYXZhU2NyaXB0IEFQSSDlj6/ku6Xnm7TmjqXojrflvpcgRWRpdFRva2VuIOWImeebtOaOpei/lOWbnlxuXHRcdFx0Ly8gUmV0dXJuIEVkaXRUb2tlbiByZXRyaWV2ZWQgZnJvbSBNZWRpYVdpa2kgSmF2YVNjcmlwdCBBUEkgaWYgYWNjZXNzaWJsZVxuXHRcdFx0dGhpcy5lZGl0VG9rZW4gPSBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyDku45BUEnojrflvpdFZGl0VG9rZW5cblx0XHQvLyBHZXQgRWRpdFRva2VuIGZyb20gTWVkaWFXaWtpIEFQSVxuXHRcdHRoaXMuZWRpdFRva2VuID0gYXdhaXQgV2lraS5nZXRFZGl0VG9rZW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiDojrflvpfnvJbovpHln7rlh4bml7bpl7TmiLNcblx0ICogR2V0IEJhc2UgVGltZXN0YW1wXG5cdCAqL1xuXHRhc3luYyBnZXRUaW1lc3RhbXAoKSB7XG5cdFx0Y29uc3Qge3RpbWVzdGFtcCwgcmV2aXNpb25JZH0gPSBhd2FpdCBXaWtpLmdldFBhZ2VJbmZvKHtcblx0XHRcdHJldmlzaW9uSWQ6IHRoaXMucmV2aXNpb25JZCxcblx0XHRcdHRpdGxlOiB0aGlzLnRpdGxlLFxuXHRcdH0pO1xuXHRcdHRoaXMudGltZXN0YW1wID0gdGltZXN0YW1wO1xuXHRcdGlmIChyZXZpc2lvbklkKSB7XG5cdFx0XHR0aGlzLnJldmlzaW9uSWQgPSByZXZpc2lvbklkO1xuXHRcdFx0dGhpcy5pc05ld1BhZ2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog6I635b6XIFdpa2lUZXh0XG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5zZWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucmV2aXNpb25JZFxuXHQgKi9cblx0YXN5bmMgZ2V0V2lraVRleHQoe3NlY3Rpb24gPSAnJ30gPSB7fSkge1xuXHRcdGNvbnN0IHNlYyA9IHNlY3Rpb24gPT09IC0xID8gJycgOiBzZWN0aW9uO1xuXHRcdGlmICh0aGlzLnNlY3Rpb25DYWNoZVtzZWNdKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZWN0aW9uQ2FjaGVbc2VjXTtcblx0XHR9XG5cdFx0Y29uc3Qgd2lraVRleHQgPSBhd2FpdCBXaWtpLmdldFdpa2lUZXh0KHtcblx0XHRcdHNlY3Rpb246IHNlYyxcblx0XHRcdHJldmlzaW9uSWQ6IHRoaXMucmV2aXNpb25JZCxcblx0XHR9KTtcblx0XHRMb2cuaW5mbyhgV2lraXRleHQgb2YgJHt0aGlzLnRpdGxlfSMke3NlY3Rpb259IGZldGNoZWQuYCk7XG5cdFx0dGhpcy5zZWN0aW9uQ2FjaGVbc2VjXSA9IHdpa2lUZXh0O1xuXHRcdHJldHVybiB3aWtpVGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiDop6PmnpAgV2lraVRleHRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHdpa2l0ZXh0XG5cdCAqL1xuXHRhc3luYyBwYXJzZVdpa2lUZXh0KHdpa2l0ZXh0KSB7XG5cdFx0cmV0dXJuIFdpa2kucGFyc2VXaWtpVGV4dCh3aWtpdGV4dCwgdGhpcy50aXRsZSk7XG5cdH1cblxuXHQvKipcblx0ICog57yW6L6R6aG16Z2iXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gY29uZmlnXG5cdCAqIEBwYXJhbSBwYXlsb2FkXG5cdCAqL1xuXHRhc3luYyBlZGl0KHBheWxvYWQpIHtcblx0XHRpZiAoIXRoaXMuZWRpdFRva2VuKSB7XG5cdFx0XHRMb2cuZXJyb3IoJ2ZhaWxfdG9fZ2V0X2VkaXR0b2tlbicpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMudGltZXN0YW1wICYmICF0aGlzLmlzTmV3UGFnZSkge1xuXHRcdFx0Ly8g5aaC5p6c5LiN5piv5Yib5bu65paw6aG16Z2iIOWPiOayoeacieWfuuWHhuaXtumXtOaIsyDliJnmnInlj6/og73pgKDmiJDnvJbovpHopobnm5Yg5L+d6Zmp6LW36KeB55u05o6l5ouS57udXG5cdFx0XHRMb2cuZXJyb3IoJ2ZhaWxfdG9fZ2V0X3RpbWVzdGFtcCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gV2lraS5lZGl0KHtcblx0XHRcdHRpdGxlOiB0aGlzLnRpdGxlLFxuXHRcdFx0ZWRpdFRva2VuOiB0aGlzLmVkaXRUb2tlbixcblx0XHRcdC4uLih0aGlzLnRpbWVzdGFtcCA/IHt0aW1lc3RhbXA6IHRoaXMudGltZXN0YW1wfSA6IHt9KSxcblx0XHRcdC4uLnBheWxvYWQsXG5cdFx0XHRhZGRpdGlvbmFsQ29uZmlnOiB7XG5cdFx0XHRcdC4uLih0aGlzLmlzTmV3UGFnZSA/IHtjcmVhdGVvbmx5OiB0aGlzLmlzTmV3UGFnZX0gOiB7fSksXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2U7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmNsYXNzIE5vdGlmaWNhdGlvbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cdGluaXQoKSB7XG5cdFx0JCgnYm9keScpLmFwcGVuZCgnPGRpdiBpZD1cIk1vZU5vdGlmaWNhdGlvblwiPjwvZGl2PicpO1xuXHR9XG5cdGRpc3BsYXkodGV4dCA9ICfllrV+JywgdHlwZSA9ICdzdWNjZXNzJywgY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xuXHRcdCQoJyNNb2VOb3RpZmljYXRpb24nKS5hcHBlbmQoXG5cdFx0XHQkKCc8ZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygnTW9lTm90aWZpY2F0aW9uLW5vdGljZScpXG5cdFx0XHRcdC5hZGRDbGFzcyhgTW9lTm90aWZpY2F0aW9uLW5vdGljZS0ke3R5cGV9YClcblx0XHRcdFx0LmFwcGVuZChgPHNwYW4+JHt0ZXh0fTwvc3Bhbj5gKVxuXHRcdCk7XG5cdFx0JCgnI01vZU5vdGlmaWNhdGlvbicpLmZpbmQoJy5Nb2VOb3RpZmljYXRpb24tbm90aWNlJykubGFzdCgpLmZhZGVJbigzMDApO1xuXHRcdHRoaXMuYmluZCgpO1xuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHRjYWxsYmFjaygkKCcjTW9lTm90aWZpY2F0aW9uJykuZmluZCgnLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2UnKS5sYXN0KCkpO1xuXHR9XG5cdGJpbmQoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0JCgnLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2UnKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0c2VsZi5zbGlkZUxlZnQoJCh0aGlzKSk7XG5cdFx0fSk7XG5cdH1cblx0c3VjY2Vzcyh0ZXh0LCBjYWxsYmFjaykge1xuXHRcdHRoaXMuZGlzcGxheSh0ZXh0LCAnc3VjY2VzcycsIGNhbGxiYWNrKTtcblx0fVxuXHR3YXJuaW5nKHRleHQsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kaXNwbGF5KHRleHQsICd3YXJuaW5nJywgY2FsbGJhY2spO1xuXHR9XG5cdGVycm9yKHRleHQsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kaXNwbGF5KHRleHQsICdlcnJvcicsIGNhbGxiYWNrKTtcblx0fVxuXHRjbGVhcigpIHtcblx0XHRpZiAoJCgnLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2UnKS5sZW5ndGggPj0gMTApIHtcblx0XHRcdCQoJyNNb2VOb3RpZmljYXRpb24nKVxuXHRcdFx0XHQuY2hpbGRyZW4oKVxuXHRcdFx0XHQuZmlyc3QoKVxuXHRcdFx0XHQuZmFkZU91dCgxNTAsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQkKHRoaXMpLnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHNldFRpbWVvdXQodGhpcy5jbGVhciwgMzAwKTtcblx0XHR9XG5cdH1cblx0ZW1wdHkoZikge1xuXHRcdCQoJy5Nb2VOb3RpZmljYXRpb24tbm90aWNlJykuZWFjaChmdW5jdGlvbiAoaSkge1xuXHRcdFx0aWYgKHR5cGVvZiBmID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGNvbnN0IGVsZSA9ICQodGhpcyk7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGYoZWxlKTtcblx0XHRcdFx0fSwgMjAwICogaSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKHRoaXMpXG5cdFx0XHRcdFx0LmRlbGF5KGkgKiAyMDApXG5cdFx0XHRcdFx0LmZhZGVPdXQoJ2Zhc3QnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQkKHRoaXMpLnJlbW92ZSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHNsaWRlTGVmdChlbGUsIHNwZWVkKSB7XG5cdFx0ZWxlLmNzcygncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcblx0XHRlbGUuYW5pbWF0ZShcblx0XHRcdHtcblx0XHRcdFx0bGVmdDogJy0yMDAlJyxcblx0XHRcdH0sXG5cdFx0XHRzcGVlZCB8fCAxNTAsXG5cdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdCQodGhpcykuZmFkZU91dCgnZmFzdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQkKHRoaXMpLnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBOb3RpZmljYXRpb24oKTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuY29uc3Qgc2xlZXAgPSAodGltZSkgPT4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRyZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lKTtcblx0fSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgc2xlZXA7XG4iLCAiLyoqXG4gKiDop6PmnpBVUkzlj4LmlbDliJfooahcbiAqIFBhcnNlIFVSTCBxdWVyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ319IHVybFxuICogQHBhcmFtIHVybFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnkodXJsKSB7XG5cdGNvbnN0IHJlZyA9IC8oKFtePyY9XSspKD86PShbXj8mPV0qKSkqKS9nO1xuXHRjb25zdCBwYXJhbXMgPSB7fTtcblx0bGV0IG1hdGNoO1xuXHR3aGlsZSAoKG1hdGNoID0gcmVnLmV4ZWModXJsKSkpIHtcblx0XHR0cnkge1xuXHRcdFx0cGFyYW1zW21hdGNoWzJdXSA9IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRwYXJhbXNbbWF0Y2hbMl1dID0gbWF0Y2hbM107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJhbXM7XG59XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCBDb25zdGFudHMgZnJvbSAnLi4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCBOb3RpZmljYXRpb24gZnJvbSAnLi9ub3RpZmljYXRpb24nO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5pbXBvcnQgTG9nIGZyb20gJy4uL3V0aWxzL2xvZyc7XG5pbXBvcnQgc2xlZXAgZnJvbSAnLi4vdXRpbHMvc2xlZXAnO1xuaW1wb3J0IHtwYXJzZVF1ZXJ5fSBmcm9tICcuLi91dGlscy9oZWxwZXJzJztcblxuY2xhc3MgVUkge1xuXHRxdWlja0VkaXRQYW5lbFZpc2libGUgPSBmYWxzZTtcblx0c2Nyb2xsVG9wID0gMDtcblxuXHQvKipcblx0ICog5Yib5bu65bGF5Lit5a+56K+d5qGGXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSDnqpflj6PmoIfpophcblx0ICogQHBhcmFtIHtzdHJpbmcgfCBKUXVlcnk8SFRNTEVsZW1lbnQ+fSBjb250ZW50IOWGheWuuVxuXHQgKiBAcGFyYW0geyp9IHdpZHRoIOWuveW6plxuXHQgKiBAcGFyYW0geyp9IGNhbGxiYWNrIOWbnuiwg+WHveaVsFxuXHQgKi9cblx0Y3JlYXRlRGlhbG9nQm94KHRpdGxlID0gJ1dpa2lwbHVzJywgY29udGVudCA9ICcnLCB3aWR0aCA9IDYwMCwgY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xuXHRcdGlmICgkKCcuV2lraXBsdXMtSW50ZXJCb3gnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gnKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0JCh0aGlzKS5yZW1vdmUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjb25zdCBjbGllbnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdGNvbnN0IGNsaWVudEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRjb25zdCBkaWFsb2dXaWR0aCA9IE1hdGgubWluKGNsaWVudFdpZHRoLCB3aWR0aCk7XG5cdFx0Y29uc3QgZGlhbG9nQm94ID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveCcpXG5cdFx0XHQuY3NzKHtcblx0XHRcdFx0J21hcmdpbi1sZWZ0JzogY2xpZW50V2lkdGggLyAyIC0gZGlhbG9nV2lkdGggLyAyLFxuXHRcdFx0XHR0b3A6ICQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpICsgY2xpZW50SGVpZ2h0ICogMC4yLFxuXHRcdFx0XHRkaXNwbGF5OiAnbm9uZScsXG5cdFx0XHR9KVxuXHRcdFx0LmFwcGVuZCgkKCc8ZGl2PicpLmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveC1IZWFkZXInKS5odG1sKHRpdGxlKSlcblx0XHRcdC5hcHBlbmQoJCgnPGRpdj4nKS5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQ29udGVudCcpLmFwcGVuZChjb250ZW50KSlcblx0XHRcdC5hcHBlbmQoJCgnPHNwYW4+JykudGV4dCgnw5cnKS5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQ2xvc2UnKSk7XG5cdFx0JCgnYm9keScpLmFwcGVuZChkaWFsb2dCb3gpO1xuXHRcdCQoJy5XaWtpcGx1cy1JbnRlckJveCcpLndpZHRoKGRpYWxvZ1dpZHRoKTtcblx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gtQ2xvc2UnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHQkKHRoaXMpXG5cdFx0XHRcdC5wYXJlbnQoKVxuXHRcdFx0XHQuZmFkZU91dCgnZmFzdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gdW5kZWZpbmVkKSk7IC8vIOWPlua2iOmhtemdouWFs+mXreehruiupFxuXHRcdFx0XHRcdCQodGhpcykucmVtb3ZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdC8v5ouW5puzXG5cdFx0Y29uc3QgYmluZERyYWdnaW5nID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdGVsZW1lbnQubW91c2Vkb3duKChlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJhc2VYID0gZS5jbGllbnRYO1xuXHRcdFx0XHRjb25zdCBiYXNlWSA9IGUuY2xpZW50WTtcblx0XHRcdFx0Y29uc3QgYmFzZU9mZnNldFggPSBlbGVtZW50LnBhcmVudCgpLm9mZnNldCgpLmxlZnQ7XG5cdFx0XHRcdGNvbnN0IGJhc2VPZmZzZXRZID0gZWxlbWVudC5wYXJlbnQoKS5vZmZzZXQoKS50b3A7XG5cdFx0XHRcdCQoZG9jdW1lbnQpLm9uKCdtb3VzZW1vdmUnLCAoZSkgPT4ge1xuXHRcdFx0XHRcdGVsZW1lbnQucGFyZW50KCkuY3NzKHtcblx0XHRcdFx0XHRcdCdtYXJnaW4tbGVmdCc6IGJhc2VPZmZzZXRYICsgZS5jbGllbnRYIC0gYmFzZVgsXG5cdFx0XHRcdFx0XHR0b3A6IGJhc2VPZmZzZXRZICsgZS5jbGllbnRZIC0gYmFzZVksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkKGRvY3VtZW50KS5vbignbW91c2V1cCcsICgpID0+IHtcblx0XHRcdFx0XHRlbGVtZW50LnVuYmluZCgnbW91c2Vkb3duJyk7XG5cdFx0XHRcdFx0JChkb2N1bWVudCkub2ZmKCdtb3VzZW1vdmUnKTtcblx0XHRcdFx0XHQkKGRvY3VtZW50KS5vZmYoJ21vdXNldXAnKTtcblx0XHRcdFx0XHRiaW5kRHJhZ2dpbmcoZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRiaW5kRHJhZ2dpbmcoJCgnLldpa2lwbHVzLUludGVyQm94LUhlYWRlcicpKTtcblx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gnKS5mYWRlSW4oNTAwKTtcblx0XHRjYWxsYmFjaygpO1xuXHRcdHJldHVybiBkaWFsb2dCb3g7XG5cdH1cblxuXHQvKipcblx0ICog5Zyo5pCc57Si5qGG5bem5L6n44CM5pu05aSa44CN6I+c5Y2V5YaF5re75Yqg5oyJ6ZKuXG5cdCAqIEFkZCBhIGJ1dHRvbiBpbiBcIk1vcmVcIiBtZW51IChsZWZ0IG9mIHRoZSBzZWFyY2ggYmFyKVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCDmjInpkq7lkI0gQnV0dG9uIHRleHRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIOaMiemSrmlkIEJ1dHRvbiBpZFxuXHQgKiBAcmV0dXJuIHtKUXVlcnk8SFRNTEVsZW1lbnQ+fSBidXR0b25cblx0ICovXG5cdGFkZEZ1bmN0aW9uQnV0dG9uKHRleHQsIGlkKSB7XG5cdFx0bGV0IGJ1dHRvbjtcblx0XHRzd2l0Y2ggKENvbnN0YW50cy5za2luKSB7XG5cdFx0XHRjYXNlICdtaW5lcnZhJzpcblx0XHRcdFx0YnV0dG9uID0gJCgnPGxpPicpXG5cdFx0XHRcdFx0LmF0dHIoJ2lkJywgaWQpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd0b2dnbGUtbGlzdC1pdGVtJylcblx0XHRcdFx0XHQuYXBwZW5kKFxuXHRcdFx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKCdtdy11aS1pY29uIG13LXVpLWljb24tYmVmb3JlIHRvZ2dsZS1saXN0LWl0ZW1fX2FuY2hvcicpXG5cdFx0XHRcdFx0XHRcdC5hcHBlbmQoXG5cdFx0XHRcdFx0XHRcdFx0JCgnPHNwYW4+Jylcblx0XHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKTsnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKCd0b2dnbGUtbGlzdC1pdGVtX19sYWJlbCcpXG5cdFx0XHRcdFx0XHRcdFx0XHQudGV4dCh0ZXh0KVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ21vZXNraW4nOlxuXHRcdFx0XHRidXR0b24gPSAkKCc8bGk+Jylcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ1dpa2lwbHVzLU1vcmUtRnVuY3Rpb24tQnV0dG9uJylcblx0XHRcdFx0XHQuYXR0cignaWQnLCBpZClcblx0XHRcdFx0XHQuYXBwZW5kKCQoJzxhPicpLmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApOycpLnRleHQodGV4dCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnV0dG9uID0gJCgnPGxpPicpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCdtdy1saXN0LWl0ZW0nKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndmVjdG9yLXRhYi1ub2ljb24nKVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsIGlkKVxuXHRcdFx0XHRcdC5hcHBlbmQoJCgnPGE+JykuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCk7JykudGV4dCh0ZXh0KSk7XG5cdFx0fVxuXHRcdGlmIChDb25zdGFudHMuc2tpbiA9PT0gJ21pbmVydmEnICYmICQoJyNwLXRiJykubGVuZ3RoID4gMCkge1xuXHRcdFx0JCgnI3AtdGInKS5hcHBlbmQoYnV0dG9uKTtcblx0XHRcdHJldHVybiAkKGAjJHtpZH1gKTtcblx0XHR9IGVsc2UgaWYgKENvbnN0YW50cy5za2luID09PSAnbW9lc2tpbicpIHtcblx0XHRcdCQoJy5tb3JlLWFjdGlvbnMtbGlzdCcpLmZpcnN0KCkuYXBwZW5kKGJ1dHRvbik7XG5cdFx0XHRyZXR1cm4gJChgIyR7aWR9YCk7XG5cdFx0fSBlbHNlIGlmICgkKCcjcC1jYWN0aW9ucycpLmxlbmd0aCA+IDApIHtcblx0XHRcdCQoJyNwLWNhY3Rpb25zIHVsJykuYXBwZW5kKGJ1dHRvbik7XG5cdFx0XHRyZXR1cm4gJChgIyR7aWR9YCk7XG5cdFx0fVxuXHRcdExvZy5pbmZvKGkxOG4udHJhbnNsYXRlKCdjYW50X2FkZF9mdW5jYnRuJykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIOaPkuWFpeW/q+mAn+mHjeWumuWQkeaMiemSrlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IG9uQ2xpY2tcblx0ICovXG5cdGluc2VydFNpbXBsZVJlZGlyZWN0QnV0dG9uKG9uQ2xpY2sgPSAoKSA9PiB7fSkge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHRoaXMuYWRkRnVuY3Rpb25CdXR0b24oaTE4bi50cmFuc2xhdGUoJ3JlZGlyZWN0X2Zyb20nKSwgJ1dpa2lwbHVzLVNSLUludHJvJyk7XG5cdFx0aWYgKGJ1dHRvbikge1xuXHRcdFx0YnV0dG9uLm9uKCdjbGljaycsIG9uQ2xpY2spO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiDmj5LlhaXorr7nva7pnaLmnb/mjInpkq5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBvbkNsaWNrXG5cdCAqL1xuXHRpbnNlcnRTZXR0aW5nc1BhbmVsQnV0dG9uKG9uQ2xpY2sgPSAoKSA9PiB7fSkge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHRoaXMuYWRkRnVuY3Rpb25CdXR0b24oaTE4bi50cmFuc2xhdGUoJ3dpa2lwbHVzX3NldHRpbmdzJyksICdXaWtpcGx1cy1TZXR0aW5ncy1JbnRybycpO1xuXHRcdGlmIChidXR0b24pIHtcblx0XHRcdGJ1dHRvbi5vbignY2xpY2snLCBvbkNsaWNrKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog5o+S5YWl6aG26YOo5b+r6YCf57yW6L6R5oyJ6ZKuXG5cdCAqIEluc2VydCBRdWlja0VkaXQgYnV0dG9uIGJlc2lkZXMgcGFnZSBlZGl0IGJ1dHRvbi5cblx0ICpcblx0ICogQHBhcmFtIG9uQ2xpY2tcblx0ICovXG5cdGluc2VydFRvcFF1aWNrRWRpdEVudHJ5KG9uQ2xpY2spIHtcblx0XHRjb25zdCB0b3BCdG4gPSAkKCc8bGk+JykuYXR0cignaWQnLCAnV2lraXBsdXMtRWRpdC1Ub3BCdG4nKS5hdHRyKCdjbGFzcycsICdtdy1saXN0LWl0ZW0nKTtcblx0XHRjb25zdCB0b3BCdG5MaW5rID0gJCgnPGE+Jylcblx0XHRcdC5hdHRyKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKScpXG5cdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgncXVpY2tlZGl0X3RvcGJ0bicpfWApO1xuXHRcdHRvcEJ0bi5hcHBlbmQodG9wQnRuTGluayk7XG5cdFx0c3dpdGNoIChDb25zdGFudHMuc2tpbikge1xuXHRcdFx0Y2FzZSAnbWluZXJ2YSc6XG5cdFx0XHRcdHRvcEJ0bi5jc3MoeydhbGlnbi1pdGVtcyc6ICdjZW50ZXInLCBkaXNwbGF5OiAnZmxleCd9KTtcblx0XHRcdFx0dG9wQnRuLmZpbmQoJ3NwYW4nKS5hZGRDbGFzcygncGFnZS1hY3Rpb25zLW1lbnVfX2xpc3QtaXRlbScpO1xuXHRcdFx0XHR0b3BCdG5cblx0XHRcdFx0XHQuZmluZCgnYScpXG5cdFx0XHRcdFx0LmFkZENsYXNzKFxuXHRcdFx0XHRcdFx0J213LXVpLWljb24gbXctdWktaWNvbi1lbGVtZW50IG13LXVpLWljb24td2lraW1lZGlhLWVkaXQtYmFzZTIwIG13LXVpLWljb24td2l0aC1sYWJlbC1kZXNrdG9wJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuY3NzKCd2ZXJ0aWNhbC1hbGlnbicsICdtaWRkbGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ3ZlY3Rvci0yMDIyJzpcblx0XHRcdFx0dG9wQnRuLmFkZENsYXNzKCd2ZWN0b3ItdGFiLW5vaWNvbicpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAndmVjdG9yJzpcblx0XHRcdFx0dG9wQnRuLmFwcGVuZCgkKCc8c3Bhbj4nKS5hcHBlbmQodG9wQnRuTGluaykpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cdFx0JCh0b3BCdG4pLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdG9uQ2xpY2soe1xuXHRcdFx0XHRzZWN0aW9uTnVtYmVyOiAtMSxcblx0XHRcdFx0dGFyZ2V0UGFnZU5hbWU6IENvbnN0YW50cy5jdXJyZW50UGFnZU5hbWUsXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRpZiAoJCgnI2NhLWVkaXQnKS5sZW5ndGggPiAwICYmICQoJyNXaWtpcGx1cy1FZGl0LVRvcEJ0bicpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Q29uc3RhbnRzLnNraW4gPT09ICdtaW5lcnZhJyA/ICQoJyNjYS1lZGl0JykucGFyZW50KCkuYWZ0ZXIodG9wQnRuKSA6ICQoJyNjYS1lZGl0JykuYWZ0ZXIodG9wQnRuKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog5o+S5YWl5q616JC95b+r6YCf57yW6L6R5oyJ6ZKuXG5cdCAqIEluc2VydCBRdWlja0VkaXQgYnV0dG9ucyBmb3IgZWFjaCBzZWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gb25DbGlja1xuXHQgKi9cblx0aW5zZXJ0U2VjdGlvblF1aWNrRWRpdEVudHJpZXMob25DbGljayA9ICgpID0+IHt9KSB7XG5cdFx0Y29uc3Qgc2VjdGlvbkJ0biA9XG5cdFx0XHRDb25zdGFudHMuc2tpbiA9PT0gJ21pbmVydmEnXG5cdFx0XHRcdD8gJCgnPHNwYW4+JykuYXBwZW5kKFxuXHRcdFx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKFxuXHRcdFx0XHRcdFx0XHRcdCdXaWtpcGx1cy1FZGl0LVNlY3Rpb25CdG4gbXctdWktaWNvbiBtdy11aS1pY29uLWVsZW1lbnQgbXctdWktaWNvbi13aWtpbWVkaWEtZWRpdC1iYXNlMjAgZWRpdC1wYWdlIG13LXVpLWljb24tZmx1c2gtcmlnaHQnXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0LmNzcygnbWFyZ2luLWxlZnQnLCAnMC43NWVtJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ3RpdGxlJywgaTE4bi50cmFuc2xhdGUoJ3F1aWNrZWRpdF9zZWN0aW9uYnRuJykpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQ6ICQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHQuYXBwZW5kKCQoJzxzcGFuPicpLmFkZENsYXNzKCdtdy1lZGl0c2VjdGlvbi1kaXZpZGVyJykudGV4dCgnIHwgJykpXG5cdFx0XHRcdFx0XHQuYXBwZW5kKFxuXHRcdFx0XHRcdFx0XHQkKCc8YT4nKVxuXHRcdFx0XHRcdFx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtRWRpdC1TZWN0aW9uQnRuJylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCknKVxuXHRcdFx0XHRcdFx0XHRcdC50ZXh0KGkxOG4udHJhbnNsYXRlKCdxdWlja2VkaXRfc2VjdGlvbmJ0bicpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHQkKCcubXctZWRpdHNlY3Rpb24nKS5lYWNoKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBlZGl0VVJMID0gJCh0aGlzKS5maW5kKFwiYVtocmVmKj0nYWN0aW9uPWVkaXQnXVwiKS5maXJzdCgpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbk51bWJlciA9IGVkaXRVUkxcblx0XHRcdFx0XHQubWF0Y2goLyZbdmVdKnNlY3Rpb25cXD0oW14mXSspLylbMV0gLy8gYHZlYCBmb3IgdmlzdWFsIGVkaXRvclxuXHRcdFx0XHRcdC5yZXBsYWNlKC9ULS9naSwgJycpOyAvLyBlbWJlZGRlZCBwYWdlcyB1c2UgVC1zZXJpZXMgc2VjdGlvbiBudW1iZXJcblx0XHRcdFx0Y29uc3Qgc2VjdGlvblRhcmdldE5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoZWRpdFVSTC5tYXRjaCgvdGl0bGU9KC4rPykmLylbMV0pO1xuXHRcdFx0XHRjb25zdCBjbG9uZU5vZGUgPSAkKHRoaXMpLnByZXYoKS5jbG9uZSgpO1xuXHRcdFx0XHRjbG9uZU5vZGUuZmluZCgnLm13LWhlYWRsaW5lLW51bWJlcicpLnJlbW92ZSgpO1xuXHRcdFx0XHRjb25zdCBzZWN0aW9uTmFtZSA9IGNsb25lTm9kZS50ZXh0KCkudHJpbSgpO1xuXHRcdFx0XHRjb25zdCBfc2VjdGlvbkJ0biA9IHNlY3Rpb25CdG4uY2xvbmUoKTtcblx0XHRcdFx0X3NlY3Rpb25CdG4uZmluZCgnLldpa2lwbHVzLUVkaXQtU2VjdGlvbkJ0bicpLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRvbkNsaWNrKHtcblx0XHRcdFx0XHRcdHNlY3Rpb25OdW1iZXIsXG5cdFx0XHRcdFx0XHRzZWN0aW9uTmFtZSxcblx0XHRcdFx0XHRcdHRhcmdldFBhZ2VOYW1lOiBzZWN0aW9uVGFyZ2V0TmFtZSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdENvbnN0YW50cy5za2luID09PSAnbWluZXJ2YSdcblx0XHRcdFx0XHQ/ICQodGhpcykuYXBwZW5kKF9zZWN0aW9uQnRuKVxuXHRcdFx0XHRcdDogJCh0aGlzKS5maW5kKCcubXctZWRpdHNlY3Rpb24tYnJhY2tldCcpLmxhc3QoKS5iZWZvcmUoX3NlY3Rpb25CdG4pO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdExvZy5lcnJvcignZmFpbF90b19pbml0X3F1aWNrZWRpdCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIOaPkuWFpeS7u+aEj+mTvuaOpee8lui+keWFpeWPo1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IG9uQ2xpY2tcblx0ICovXG5cdGluc2VydExpbmtFZGl0RW50cmllcyhvbkNsaWNrID0gKCkgPT4ge30pIHtcblx0XHQkKCcjbXctY29udGVudC10ZXh0IGEuZXh0ZXJuYWwnKS5lYWNoKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRjb25zdCB1cmwgPSAkKHRoaXMpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHBhcnNlUXVlcnkodXJsKTtcblx0XHRcdGlmIChwYXJhbXMuYWN0aW9uID09PSAnZWRpdCcgJiYgcGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLnNlY3Rpb24gIT09ICduZXcnKSB7XG5cdFx0XHRcdCQodGhpcykuYWZ0ZXIoXG5cdFx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHRcdC5hdHRyKHtcblx0XHRcdFx0XHRcdFx0aHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKScsXG5cdFx0XHRcdFx0XHRcdGNsYXNzOiAnV2lraXBsdXMtRWRpdC1FdmVyeVdoZXJlQnRuJyxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQudGV4dChgKCR7aTE4bi50cmFuc2xhdGUoJ3F1aWNrZWRpdF9zZWN0aW9uYnRuJyl9KWApXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRvbkNsaWNrKHtcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRQYWdlTmFtZTogcGFyYW1zLnRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdHNlY3Rpb25OdW1iZXI6IHBhcmFtcy5zZWN0aW9uID8/IC0xLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRzaG93UXVpY2tFZGl0UGFuZWwoe1xuXHRcdHRpdGxlID0gJycsXG5cdFx0Y29udGVudCA9ICcnLFxuXHRcdHN1bW1hcnkgPSAnJyxcblx0XHRvbkJhY2sgPSAoKSA9PiB7fSxcblx0XHRvblBhcnNlID0gKCkgPT4ge30sXG5cdFx0b25FZGl0ID0gKCkgPT4ge30sXG5cdFx0ZXNjRXhpdCA9IGZhbHNlLFxuXHR9KSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0dGhpcy5zY3JvbGxUb3AgPSAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKTtcblx0XHRpZiAodGhpcy5xdWlja0VkaXRQYW5lbFZpc2libGUpIHtcblx0XHRcdHRoaXMuaGlkZVF1aWNrRWRpdFBhbmVsKCk7XG5cdFx0fVxuXHRcdHRoaXMucXVpY2tFZGl0UGFuZWxWaXNpYmxlID0gdHJ1ZTtcblx0XHQvLyDpmLLmraLmiYvmu5HlhbPpl63pobXpnaJcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbG9zZScsXG5cdFx0XHQod2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gYCR7aTE4bi50cmFuc2xhdGUoJ29uY2xvc2VfY29uZmlybScpfWA7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0Y29uc3QgaXNOZXdQYWdlID0gJCgnLm5vYXJ0aWNsZXRleHQnKS5sZW5ndGggPiAwO1xuXHRcdC8vIERPTSDlrprkuYnlvIDlp4tcblx0XHRjb25zdCBiYWNrQnRuID0gJCgnPHNwYW4+Jylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1RdWlja2VkaXQtQmFjaycpXG5cdFx0XHQuYWRkQ2xhc3MoJ1dpa2lwbHVzLUJ0bicpXG5cdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnYmFjaycpfWApOyAvLyDov5Tlm57mjInpkq5cblx0XHRjb25zdCBqdW1wQnRuID0gJCgnPHNwYW4+Jylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1RdWlja2VkaXQtSnVtcCcpXG5cdFx0XHQuYWRkQ2xhc3MoJ1dpa2lwbHVzLUJ0bicpXG5cdFx0XHQuYXBwZW5kKFxuXHRcdFx0XHQkKCc8YT4nKVxuXHRcdFx0XHRcdC5hdHRyKCdocmVmJywgJyNXaWtpcGx1cy1RdWlja2VkaXQnKVxuXHRcdFx0XHRcdC50ZXh0KGAke2kxOG4udHJhbnNsYXRlKCdnb3RvX2VkaXRib3gnKX1gKVxuXHRcdFx0KTsgLy8g5Yiw57yW6L6R5qGGXG5cdFx0Y29uc3QgaW5wdXRCb3ggPSAkKCc8dGV4dGFyZWE+JykuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0Jyk7IC8vIOS4u+e8lui+keahhlxuXHRcdGNvbnN0IHByZXZpZXdCb3ggPSAkKCc8ZGl2PicpLmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpOyAvLyDpooTop4jovpPlh7pcblx0XHRjb25zdCBzdW1tYXJ5Qm94ID0gJCgnPGlucHV0PicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0LVN1bW1hcnktSW5wdXQnKVxuXHRcdFx0LmF0dHIoJ3BsYWNlaG9sZGVyJywgYCR7aTE4bi50cmFuc2xhdGUoJ3N1bW1hcnlfcGxhY2Vob2xkJyl9YCk7IC8vIOe8lui+keaRmOimgei+k+WFpVxuXHRcdGNvbnN0IGVkaXRTdWJtaXRCdG4gPSAkKCc8YnV0dG9uPicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0LVN1Ym1pdCcpXG5cdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZShpc05ld1BhZ2UgPyAncHVibGlzaF9wYWdlJyA6ICdwdWJsaXNoX2NoYW5nZScpfShDdHJsK1MpYCk7IC8vIOaPkOS6pOaMiemSrlxuXHRcdGNvbnN0IHByZXZpZXdTdWJtaXRCdG4gPSAkKCc8YnV0dG9uPicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctU3VibWl0Jylcblx0XHRcdC50ZXh0KGAke2kxOG4udHJhbnNsYXRlKCdwcmV2aWV3Jyl9YCk7IC8vIOmihOiniOaMiemSrlxuXHRcdGNvbnN0IGlzTWlub3JFZGl0ID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFwcGVuZCgkKCc8aW5wdXQ+JykuYXR0cih7dHlwZTogJ2NoZWNrYm94JywgaWQ6ICdXaWtpcGx1cy1RdWlja2VkaXQtTWlub3JFZGl0J30pKVxuXHRcdFx0LmFwcGVuZChcblx0XHRcdFx0JCgnPGxhYmVsPicpXG5cdFx0XHRcdFx0LmF0dHIoJ2ZvcicsICdXaWtpcGx1cy1RdWlja2VkaXQtTWlub3JFZGl0Jylcblx0XHRcdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnbWFya19taW5vcmVkaXQnKX0oQ3RybCtTaGlmdCtTKWApXG5cdFx0XHQpXG5cdFx0XHQuY3NzKHttYXJnaW46ICc1cHggNXB4IDVweCAtM3B4JywgZGlzcGxheTogJ2lubGluZSd9KTtcblx0XHQvLyBET03lrprkuYnnu5PmnZ9cblx0XHRjb25zdCBlZGl0Qm9keSA9ICQoJzxkaXY+JykuYXBwZW5kKFxuXHRcdFx0YmFja0J0bixcblx0XHRcdGp1bXBCdG4sXG5cdFx0XHRwcmV2aWV3Qm94LFxuXHRcdFx0aW5wdXRCb3gsXG5cdFx0XHRzdW1tYXJ5Qm94LFxuXHRcdFx0JCgnPGJyPicpLFxuXHRcdFx0aXNNaW5vckVkaXQsXG5cdFx0XHRlZGl0U3VibWl0QnRuLFxuXHRcdFx0cHJldmlld1N1Ym1pdEJ0blxuXHRcdCk7XG5cdFx0dGhpcy5jcmVhdGVEaWFsb2dCb3godGl0bGUsIGVkaXRCb2R5LCAxMDAwLCAoKSA9PiB7XG5cdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0JykudmFsKGNvbnRlbnQpO1xuXHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1TdW1tYXJ5LUlucHV0JykudmFsKHN1bW1hcnkpO1xuXHRcdH0pO1xuXHRcdC8vIEJhY2tcblx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LUJhY2snKS5vbignY2xpY2snLCBvbkJhY2spO1xuXHRcdC8vIFByZXZpZXdcblx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctU3VibWl0Jykub24oJ2NsaWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc3QgcHJlbG9hZEJhbm5lciA9ICQoJzxkaXY+Jylcblx0XHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1CYW5uZXInKVxuXHRcdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnbG9hZGluZ19wcmV2aWV3Jyl9YCk7XG5cdFx0XHRjb25zdCB3aWtpVGV4dCA9ICQoJyNXaWtpcGx1cy1RdWlja2VkaXQnKS52YWwoKTtcblx0XHRcdCQodGhpcykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcblx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1PdXRwdXQnKS5mYWRlT3V0KDEwMCwgKCkgPT4ge1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuaHRtbCgnJykuYXBwZW5kKHByZWxvYWRCYW5uZXIpO1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuZmFkZUluKDEwMCk7XG5cdFx0XHR9KTtcblx0XHRcdCQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6IHNlbGYuc2Nyb2xsVG9wfSwgMjAwKTsgLy/ov5Tlm57pobbpg6hcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9uUGFyc2Uod2lraVRleHQpO1xuXHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmZhZGVPdXQoJzEwMCcsICgpID0+IHtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmh0bWwoYDxocj48ZGl2IGNsYXNzPVwibXctYm9keS1jb250ZW50XCI+JHtyZXN1bHR9PC9kaXY+PGhyPmApO1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuZmFkZUluKCcxMDAnKTtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LVN1Ym1pdCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0Ly8gRWRpdFxuXHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtU3VibWl0Jykub24oJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZXIgPSBEYXRlLm5vdygpO1xuXHRcdFx0Y29uc3QgZWRpdEJhbm5lciA9ICQoJzxkaXY+Jylcblx0XHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1CYW5uZXInKVxuXHRcdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnc3VibWl0dGluZ19lZGl0Jyl9YCk7XG5cdFx0XHRjb25zdCBwYXlsb2FkID0ge1xuXHRcdFx0XHRzdW1tYXJ5OiAkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVN1bW1hcnktSW5wdXQnKS52YWwoKSxcblx0XHRcdFx0Y29udGVudDogJCgnI1dpa2lwbHVzLVF1aWNrZWRpdCcpLnZhbCgpLFxuXHRcdFx0XHRpc01pbm9yRWRpdDogJCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1NaW5vckVkaXQnKS5pcygnOmNoZWNrZWQnKSxcblx0XHRcdH07XG5cdFx0XHQvLyDlh4blpIfnvJbovpEg56aB55So5oyJ6ZKuIOaJp+ihjOWKqOeUu1xuXHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1TdWJtaXQsI1dpa2lwbHVzLVF1aWNrZWRpdCwjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctU3VibWl0JykuYXR0cihcblx0XHRcdFx0J2Rpc2FibGVkJyxcblx0XHRcdFx0J2Rpc2FibGVkJ1xuXHRcdFx0KTtcblx0XHRcdCQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6IHNlbGYuc2Nyb2xsVG9wfSwgMjAwKTtcblx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1PdXRwdXQnKS5mYWRlT3V0KDEwMCwgKCkgPT4ge1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuaHRtbCgnJykuYXBwZW5kKGVkaXRCYW5uZXIpO1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuZmFkZUluKDEwMCk7XG5cdFx0XHR9KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IG9uRWRpdChwYXlsb2FkKTtcblx0XHRcdFx0Y29uc3QgdXNlVGltZSA9IERhdGUubm93KCkgLSB0aW1lcjtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpXG5cdFx0XHRcdFx0LmZpbmQoJy5XaWtpcGx1cy1CYW5uZXInKVxuXHRcdFx0XHRcdC5jc3MoJ2JhY2tncm91bmQnLCAncmdiYSg2LCAyMzksIDkyLCAwLjQ0KScpO1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0Jylcblx0XHRcdFx0XHQuZmluZCgnLldpa2lwbHVzLUJhbm5lcicpXG5cdFx0XHRcdFx0LnRleHQoYCR7aTE4bi50cmFuc2xhdGUoJ2VkaXRfc3VjY2VzcycsIFt1c2VUaW1lLnRvU3RyaW5nKCldKX1gKTtcblx0XHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgKHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IHVuZGVmaW5lZCkpOyAvL+WPlua2iOmhtemdouWFs+mXreehruiupFxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRsb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdFx0fSwgNTAwKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGVycm9yKTtcblx0XHRcdFx0JCgnLldpa2lwbHVzLUJhbm5lcicpLmNzcygnYmFja2dyb3VuZCcsICdyZ2JhKDIxOCwgMTQyLCAxNjcsIDAuNjUpJyk7XG5cdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS5odG1sKGVycm9yLm1lc3NhZ2UpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1TdWJtaXQsI1dpa2lwbHVzLVF1aWNrZWRpdCwjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctU3VibWl0JykucHJvcChcblx0XHRcdFx0XHQnZGlzYWJsZWQnLFxuXHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9DdHJsK1Pmj5DkuqQgQ3RybCtTaGlmdCtT5bCP57yW6L6RXG5cdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdCwjV2lraXBsdXMtUXVpY2tlZGl0LVN1bW1hcnktSW5wdXQsI1dpa2lwbHVzLVF1aWNrZWRpdC1NaW5vckVkaXQnKS5vbigna2V5ZG93bicsIChlKSA9PiB7XG5cdFx0XHRpZiAoZS5jdHJsS2V5ICYmIGUud2hpY2ggPT09IDgzKSB7XG5cdFx0XHRcdGlmIChlLnNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1NaW5vckVkaXQnKS50cmlnZ2VyKCdjbGljaycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtU3VibWl0JykudHJpZ2dlcignY2xpY2snKTtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vRXNj6YCA5Ye6XG5cdFx0aWYgKGVzY0V4aXQpIHtcblx0XHRcdCQoZG9jdW1lbnQpLm9uKCdrZXlkb3duJywgKGUpID0+IHtcblx0XHRcdFx0aWYgKGUud2hpY2ggPT09IDI3KSB7XG5cdFx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1CYWNrJykudHJpZ2dlcignY2xpY2snKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aGlkZVF1aWNrRWRpdFBhbmVsKCkge1xuXHRcdHRoaXMucXVpY2tFZGl0UGFuZWxWaXNpYmxlID0gZmFsc2U7XG5cdFx0JCgnLldpa2lwbHVzLUludGVyQm94JykuZmFkZU91dCgnZmFzdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsICh3aW5kb3cub25iZWZvcmV1bmxvYWQgPSB1bmRlZmluZWQpKTsgLy/lj5bmtojpobXpnaLlhbPpl63noa7orqRcblx0XHRcdCQodGhpcykucmVtb3ZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICog5pi+56S65b+r6YCf6YeN5a6a5ZCR5by556qXXG5cdCAqXG5cdCAqIEBwYXJhbSByb290MFxuXHQgKiBAcGFyYW0gcm9vdDAub25FZGl0XG5cdCAqIEBwYXJhbSByb290MC5vblN1Y2Nlc3Ncblx0ICovXG5cdHNob3dTaW1wbGVSZWRpcmVjdFBhbmVsKHtvbkVkaXQgPSAoKSA9PiB7fSwgb25TdWNjZXNzID0gKCkgPT4ge319ID0ge30pIHtcblx0XHRjb25zdCBpbnB1dCA9ICQoJzxpbnB1dD4nKS5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtSW5wdXQnKTtcblx0XHRjb25zdCBhcHBseUJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TUi1BcHBseScpXG5cdFx0XHQudGV4dChpMThuLnRyYW5zbGF0ZSgnc3VibWl0JykpO1xuXHRcdGNvbnN0IGNhbmNlbEJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TUi1DYW5jZWwnKVxuXHRcdFx0LnRleHQoaTE4bi50cmFuc2xhdGUoJ2NhbmNlbCcpKTtcblx0XHRjb25zdCBjb250aW51ZUJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TUi1Db250aW51ZScpXG5cdFx0XHQudGV4dChpMThuLnRyYW5zbGF0ZSgnY29udGludWUnKSk7XG5cdFx0Y29uc3QgY29udGVudCA9ICQoJzxkaXY+JykuYXBwZW5kKGlucHV0KS5hcHBlbmQoJCgnPGhyPicpKS5hcHBlbmQoYXBwbHlCdG4pLmFwcGVuZChjYW5jZWxCdG4pOyAvL+aLvOaOpVxuXHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuY3JlYXRlRGlhbG9nQm94KGkxOG4udHJhbnNsYXRlKCdyZWRpcmVjdF9kZXNjJyksIGNvbnRlbnQsIDYwMCk7XG5cdFx0YXBwbHlCdG4ub24oJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGl0bGUgPSAkKCcuV2lraXBsdXMtSW50ZXJCb3gtSW5wdXQnKS52YWwoKTtcblx0XHRcdCQoJy5XaWtpcGx1cy1JbnRlckJveC1Db250ZW50JykuaHRtbChcblx0XHRcdFx0YDxkaXYgY2xhc3M9XCJXaWtpcGx1cy1CYW5uZXJcIj4ke2kxOG4udHJhbnNsYXRlKCdzdWJtaXR0aW5nX2VkaXQnKX08L2Rpdj5gXG5cdFx0XHQpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgb25FZGl0KHtcblx0XHRcdFx0XHR0aXRsZSxcblx0XHRcdFx0XHRmb3JjZU92ZXJ3cml0ZTogZmFsc2UsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkKCcuV2lraXBsdXMtQmFubmVyJykudGV4dChpMThuLnRyYW5zbGF0ZSgncmVkaXJlY3Rfc2F2ZWQnKSk7XG5cdFx0XHRcdHRoaXMuaGlkZVNpbXBsZVJlZGlyZWN0UGFuZWwoZGlhbG9nKTtcblx0XHRcdFx0b25TdWNjZXNzKHt0aXRsZX0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0JCgnLldpa2lwbHVzLUJhbm5lcicpLmNzcygnYmFja2dyb3VuZCcsICdyZ2JhKDIxOCwgMTQyLCAxNjcsIDAuNjUpJyk7XG5cdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS50ZXh0KGVycm9yLm1lc3NhZ2UpO1xuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gJ2FydGljbGVleGlzdHMnKSB7XG5cdFx0XHRcdFx0JCgnLldpa2lwbHVzLUludGVyQm94LUNvbnRlbnQnKS5hcHBlbmQoJCgnPGhyPicpKS5hcHBlbmQoY29udGludWVCdG4pLmFwcGVuZChjYW5jZWxCdG4pO1xuXHRcdFx0XHRcdGNhbmNlbEJ0bi5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmhpZGVTaW1wbGVSZWRpcmVjdFBhbmVsKGRpYWxvZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Y29udGludWVCdG4ub24oJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0JCgnLldpa2lwbHVzLUludGVyQm94LUNvbnRlbnQnKS5odG1sKFxuXHRcdFx0XHRcdFx0XHRgPGRpdiBjbGFzcz1cIldpa2lwbHVzLUJhbm5lclwiPiR7aTE4bi50cmFuc2xhdGUoJ3N1Ym1pdHRpbmdfZWRpdCcpfTwvZGl2PmBcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBvbkVkaXQoe1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHRcdFx0XHRcdGZvcmNlT3ZlcndyaXRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0JCgnLldpa2lwbHVzLUJhbm5lcicpLnRleHQoaTE4bi50cmFuc2xhdGUoJ3JlZGlyZWN0X3NhdmVkJykpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVTaW1wbGVSZWRpcmVjdFBhbmVsKGRpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdG9uU3VjY2Vzcyh7dGl0bGV9KTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS5jc3MoJ2JhY2tncm91bmQnLCAncmdiYSgyMTgsIDE0MiwgMTY3LCAwLjY1KScpO1xuXHRcdFx0XHRcdFx0XHQkKCcuV2lraXBsdXMtQmFubmVyJykudGV4dChlcnJvci5tZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNhbmNlbEJ0bi5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVTaW1wbGVSZWRpcmVjdFBhbmVsKGRpYWxvZyk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICog6ZqQ6JeP5b+r6YCf6YeN5a6a5ZCR5by556qXXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gZGlhbG9nXG5cdCAqL1xuXHRoaWRlU2ltcGxlUmVkaXJlY3RQYW5lbChkaWFsb2cgPSAkKCdib2R5JykpIHtcblx0XHRkaWFsb2cuZmluZCgnLldpa2lwbHVzLUludGVyQm94LUNsb3NlJykudHJpZ2dlcignY2xpY2snKTtcblx0fVxuXG5cdHNob3dTZXR0aW5nc1BhbmVsKHtvblN1Ym1pdCA9ICgpID0+IHt9fSA9IHt9KSB7XG5cdFx0Y29uc3QgaW5wdXQgPSAkKCc8dGV4dGFyZWE+JykuYXR0cignaWQnLCAnV2lraXBsdXMtU2V0dGluZy1JbnB1dCcpLmF0dHIoJ3Jvd3MnLCAnMTAnKTtcblx0XHRjb25zdCBhcHBseUJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TZXR0aW5nLUFwcGx5Jylcblx0XHRcdC50ZXh0KGkxOG4udHJhbnNsYXRlKCdzdWJtaXQnKSk7XG5cdFx0Y29uc3QgY2FuY2VsQnRuID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveC1CdG4nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVNldHRpbmctQ2FuY2VsJylcblx0XHRcdC50ZXh0KGkxOG4udHJhbnNsYXRlKCdjYW5jZWwnKSk7XG5cdFx0Y29uc3QgY29udGVudCA9ICQoJzxkaXY+JykuYXBwZW5kKGlucHV0KS5hcHBlbmQoJCgnPGhyPicpKS5hcHBlbmQoYXBwbHlCdG4pLmFwcGVuZChjYW5jZWxCdG4pOyAvL+aLvOaOpVxuXG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5jcmVhdGVEaWFsb2dCb3goaTE4bi50cmFuc2xhdGUoJ3dpa2lwbHVzX3NldHRpbmdzX2Rlc2MnKSwgY29udGVudCwgNjAwLCAoKSA9PiB7XG5cdFx0XHRpZiAobG9jYWxTdG9yYWdlLldpa2lwbHVzX1NldHRpbmdzKSB7XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1TZXR0aW5nLUlucHV0JykudmFsKGxvY2FsU3RvcmFnZS5XaWtpcGx1c19TZXR0aW5ncyk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5XaWtpcGx1c19TZXR0aW5ncyk7XG5cdFx0XHRcdFx0JCgnI1dpa2lwbHVzLVNldHRpbmctSW5wdXQnKS52YWwoSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDIpKTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlXG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1TZXR0aW5nLUlucHV0JykuYXR0cigncGxhY2Vob2xkZXInLCBpMThuLnRyYW5zbGF0ZSgnd2lraXBsdXNfc2V0dGluZ3NfcGxhY2Vob2xkZXInKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0YXBwbHlCdG4ub24oJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2F2ZWRCYW5uZXIgPSAkKCc8ZGl2PicpLmFkZENsYXNzKCdXaWtpcGx1cy1CYW5uZXInKS50ZXh0KGkxOG4udHJhbnNsYXRlKCd3aWtpcGx1c19zZXR0aW5nc19zYXZlZCcpKTtcblx0XHRcdGNvbnN0IHNldHRpbmdzID0gJCgnI1dpa2lwbHVzLVNldHRpbmctSW5wdXQnKS52YWwoKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9uU3VibWl0KHtzZXR0aW5nc30pO1xuXHRcdFx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gtQ29udGVudCcpLmh0bWwoJycpLmFwcGVuZChzYXZlZEJhbm5lcik7XG5cdFx0XHRcdGF3YWl0IHNsZWVwKDE1MDApO1xuXHRcdFx0XHR0aGlzLmhpZGVTZXR0aW5nc1BhbmVsKGRpYWxvZyk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0Tm90aWZpY2F0aW9uLmVycm9yKGkxOG4udHJhbnNsYXRlKCd3aWtpcGx1c19zZXR0aW5nc19ncmFtbWFyX2Vycm9yJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNhbmNlbEJ0bi5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVTZXR0aW5nc1BhbmVsKGRpYWxvZyk7XG5cdFx0fSk7XG5cdH1cblxuXHRoaWRlU2V0dGluZ3NQYW5lbChkaWFsb2cgPSAkKCdib2R5JykpIHtcblx0XHRkaWFsb2cuZmluZCgnLldpa2lwbHVzLUludGVyQm94LUNsb3NlJykudHJpZ2dlcignY2xpY2snKTtcblx0fVxuXG5cdGJpbmRQcmVsb2FkRXZlbnRzKG9uUHJlbG9hZCkge1xuXHRcdCQoJyN0b2MnKVxuXHRcdFx0LmNoaWxkcmVuKCd1bCcpXG5cdFx0XHQuZmluZCgnYScpXG5cdFx0XHQuZWFjaChmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHQkKHRoaXMpLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0JCh0aGlzKS5vZmYoJ21vdXNlb3ZlcicpO1xuXHRcdFx0XHRcdG9uUHJlbG9hZCh7XG5cdFx0XHRcdFx0XHRzZWN0aW9uTnVtYmVyOiBpICsgMSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgVUkoKTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuY2xhc3MgU2V0dGluZ3Mge1xuXHRnZXRTZXR0aW5nKGtleSwgb2JqZWN0ID0ge30pIHtcblx0XHRjb25zdCB3ID0gb2JqZWN0O1xuXHRcdGxldCBzZXR0aW5ncztcblx0XHR0cnkge1xuXHRcdFx0c2V0dGluZ3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVsnV2lraXBsdXNfU2V0dGluZ3MnXSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjdXN0b21TZXR0aW5nRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oYHJldHVybiAke3NldHRpbmdzW2tleV19YCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1c3RvbVNldHRpbmdGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGlmIChjdXN0b21TZXR0aW5nRnVuY3Rpb24oKSh3KSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY3VzdG9tU2V0dGluZ0Z1bmN0aW9uKCkodykgfHwgc2V0dGluZ3Nba2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdHJldHVybiBzZXR0aW5nc1trZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gc2V0dGluZ3Nba2V5XTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCByZXN1bHQgPSBzZXR0aW5nc1trZXldO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoYFxcJHske2tleX19YCwgb2JqZWN0W2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTZXR0aW5ncygpO1xuIiwgIi8qKlxuICogV2lraXBsdXNcbiAqIEVyaWRhbnVzIFNvcmEgPHNvcmFAc291bmQubW9lPlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IFBhZ2UgZnJvbSAnLi9jb3JlL3BhZ2UnO1xuaW1wb3J0IFVJIGZyb20gJy4vY29yZS91aSc7XG5pbXBvcnQgTm90aWZpY2F0aW9uIGZyb20gJy4vY29yZS9ub3RpZmljYXRpb24nO1xuaW1wb3J0IFdpa2kgZnJvbSAnLi9zZXJ2aWNlcy93aWtpJztcbmltcG9ydCBTZXR0aW5ncyBmcm9tICcuL3V0aWxzL3NldHRpbmdzJztcbmltcG9ydCBMb2cgZnJvbSAnLi91dGlscy9sb2cnO1xuaW1wb3J0IENvbnN0YW50cyBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgaTE4biBmcm9tICcuL3V0aWxzL2kxOG4nO1xuXG4kKGFzeW5jICgpID0+IHtcblx0Y29uc3QgUGFnZXMgPSB7fTtcblx0Y29uc3QgaXNDdXJyZW50UGFnZUVtcHR5ID0gJCgnLm5vYXJ0aWNsZXRleHQnKS5sZW5ndGggPiAwICYmIENvbnN0YW50cy5hcnRpY2xlSWQgPT09IDA7XG5cblx0LyoqXG5cdCAqIEdldCBwYWdlIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHBhcmFtc1xuXHQgKiBAcGFyYW0ge251bWJlcn0gcGFyYW1zLnJldmlzaW9uSWQg6aG16Z2i5L+u6K6i54mI5pys5Y+3XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMudGl0bGUg6aG16Z2i5qCH6aKYXG5cdCAqL1xuXHRjb25zdCBnZXRQYWdlID0gYXN5bmMgKHtyZXZpc2lvbklkLCB0aXRsZX0pID0+IHtcblx0XHRpZiAoUGFnZXNbcmV2aXNpb25JZF0pIHtcblx0XHRcdHJldHVybiBQYWdlc1tyZXZpc2lvbklkXTtcblx0XHR9XG5cdFx0Y29uc3QgbmV3UGFnZSA9IG5ldyBQYWdlKHtcblx0XHRcdHJldmlzaW9uSWQsXG5cdFx0XHR0aXRsZSxcblx0XHR9KTtcblx0XHRhd2FpdCBuZXdQYWdlLmluaXQoKTtcblx0XHRQYWdlc1tyZXZpc2lvbklkXSA9IG5ld1BhZ2U7XG5cdFx0cmV0dXJuIFBhZ2VzW3JldmlzaW9uSWRdO1xuXHR9O1xuXG5cdExvZy5pbmZvKGBXaWtpcGx1cyBub3cgbG9hZGluZy4gVmVyc2lvbjogJHtDb25zdGFudHMudmVyc2lvbn1gKTtcblxuXHRpZiAoIXdpbmRvdy5tdykge1xuXHRcdGNvbnNvbGUubG9nKCdNZWRpYXdpa2kgSmF2YVNjcmlwdCBub3QgbG9hZGVkIG9yIG5vdCBhIE1lZGlhd2lraSB3ZWJzaXRlLicpO1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoIUNvbnN0YW50cy51c2VyR3JvdXBzLmluY2x1ZGVzKCdhdXRvY29uZmlybWVkJykgJiYgIUNvbnN0YW50cy51c2VyR3JvdXBzLmluY2x1ZGVzKCdjb25maXJtZWQnKSkge1xuXHRcdE5vdGlmaWNhdGlvbi5lcnJvcihpMThuLnRyYW5zbGF0ZSgnbm90X2F1dG9jb25maXJtZWRfdXNlcicpKTtcblx0XHRMb2cuaW5mbyhpMThuLnRyYW5zbGF0ZSgnbm90X2F1dG9jb25maXJtZWRfdXNlcicpKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIUNvbnN0YW50cy5pc0FydGljbGUgfHwgQ29uc3RhbnRzLmFjdGlvbiAhPT0gJ3ZpZXcnKSB7XG5cdFx0TG9nLmluZm8oJ05vdCBhbiBlZGl0YWJsZSBwYWdlLiBTdG9wIGluaXRpYWxpemF0aW9uLicpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEluaXRpYWxpemUgY3VycmVudCBwYWdlIOm7mOiupOWIneWni+WMluW9k+WJjemhtemdolxuXHR3aW5kb3cuX1dpa2lwbHVzUGFnZXMgPSBQYWdlcztcblx0Y29uc3QgY3VycmVudFBhZ2VOYW1lID0gQ29uc3RhbnRzLmN1cnJlbnRQYWdlTmFtZTtcblx0Y29uc3QgcmV2aXNpb25JZCA9IENvbnN0YW50cy5yZXZpc2lvbklkO1xuXHRjb25zdCBjdXJyZW50UGFnZSA9IGF3YWl0IGdldFBhZ2Uoe1xuXHRcdHJldmlzaW9uSWQsXG5cdFx0dGl0bGU6IGN1cnJlbnRQYWdlTmFtZSxcblx0fSk7XG5cblx0Y29uc3QgaGFuZGxlUXVpY2tFZGl0QnV0dG9uQ2xpY2tlZCA9IGFzeW5jICh7c2VjdGlvbk51bWJlciwgc2VjdGlvbk5hbWUsIHRhcmdldFBhZ2VOYW1lfSA9IHt9KSA9PiB7XG5cdFx0Y29uc3QgaXNPdGhlclBhZ2UgPSB0YXJnZXRQYWdlTmFtZSAhPT0gY3VycmVudFBhZ2VOYW1lO1xuXHRcdGlmIChpc090aGVyUGFnZSAmJiBDb25zdGFudHMubGF0ZXN0UmV2aXNpb25JZCAhPT0gQ29uc3RhbnRzLnJldmlzaW9uSWQpIHtcblx0XHRcdC8vIOWcqOWOhuWPsueJiOacrOe8lui+keWFtuS7lumhtemdouaciemXrumimCDmmoLml7bkuI3mlK/mjIFcblx0XHRcdExvZy5lcnJvcignY3Jvc3NfcGFnZV9oaXN0b3J5X3JldmlzaW9uX2VkaXRfd2FybmluZycpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCByZXZpc2lvbklkID0gaXNPdGhlclBhZ2UgPyBhd2FpdCBXaWtpLmdldExhdGVzdFJldmlzaW9uSWRGb3JQYWdlKHRhcmdldFBhZ2VOYW1lKSA6IENvbnN0YW50cy5yZXZpc2lvbklkO1xuXG5cdFx0Y29uc3QgcGFnZSA9IGF3YWl0IGdldFBhZ2Uoe3JldmlzaW9uSWQsIHRpdGxlOiB0YXJnZXRQYWdlTmFtZX0pO1xuXHRcdGNvbnN0IGN1c3RvbVN1bW1hcnkgPSBTZXR0aW5ncy5nZXRTZXR0aW5nKCdkZWZhdWx0U3VtbWFyeScsIHtcblx0XHRcdHNlY3Rpb25OYW1lLFxuXHRcdFx0c2VjdGlvbk51bWJlcixcblx0XHRcdHNlY3Rpb25UYXJnZXROYW1lOiB0YXJnZXRQYWdlTmFtZSxcblx0XHR9KTtcblx0XHRjb25zdCBzdW1tYXJ5ID1cblx0XHRcdGN1c3RvbVN1bW1hcnkgfHxcblx0XHRcdChzZWN0aW9uTmFtZVxuXHRcdFx0XHQ/IGAvKiAke3NlY3Rpb25OYW1lfSAqLyAke2kxOG4udHJhbnNsYXRlKCdkZWZhdWx0X3N1bW1hcnlfc3VmZml4Jyl9YFxuXHRcdFx0XHQ6IGkxOG4udHJhbnNsYXRlKCdkZWZhdWx0X3N1bW1hcnlfc3VmZml4JykpO1xuXHRcdGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHROb3RpZmljYXRpb24uc3VjY2VzcyhpMThuLnRyYW5zbGF0ZSgnbG9hZGluZycpKTtcblx0XHR9LCAyMDApO1xuXHRcdGNvbnN0IHNlY3Rpb25Db250ZW50ID0gYXdhaXQgcGFnZS5nZXRXaWtpVGV4dCh7XG5cdFx0XHRzZWN0aW9uOiBzZWN0aW9uTnVtYmVyLFxuXHRcdH0pO1xuXHRcdGNvbnN0IGlzRWRpdEhpc3RvcnlSZXZpc2lvbiA9ICFpc090aGVyUGFnZSAmJiBDb25zdGFudHMubGF0ZXN0UmV2aXNpb25JZCAhPT0gQ29uc3RhbnRzLnJldmlzaW9uSWQ7XG5cdFx0Y29uc3QgZXNjVG9FeGl0ID1cblx0XHRcdFNldHRpbmdzLmdldFNldHRpbmcoJ2VzY190b19leGl0X3F1aWNrZWRpdCcpID09PSB0cnVlIHx8IC8vIOWFvOWuueiAgeiuvue9rmtleVxuXHRcdFx0U2V0dGluZ3MuZ2V0U2V0dGluZygnZXNjX3RvX2V4aXRfcXVpY2tlZGl0JykgPT09ICd0cnVlJyB8fFxuXHRcdFx0U2V0dGluZ3MuZ2V0U2V0dGluZygnZXNjVG9FeGl0UXVpY2tFZGl0JykgPT09IHRydWUgfHxcblx0XHRcdFNldHRpbmdzLmdldFNldHRpbmcoJ2VzY1RvRXhpdFF1aWNrRWRpdCcpID09PSAndHJ1ZSc7XG5cdFx0Y29uc3QgY3VzdG9tRWRpdFRhZ3MgPSBTZXR0aW5ncy5nZXRTZXR0aW5nKCdjdXN0b21fZWRpdF90YWdzJyk7XG5cdFx0Y29uc3QgZGVmYXVsdEVkaXRUYWdzID0gW107XG5cdFx0Y29uc3QgZWRpdFRhZ3MgPSBjdXN0b21FZGl0VGFncz8ubGVuZ3RoID8gY3VzdG9tRWRpdFRhZ3MgOiBkZWZhdWx0RWRpdFRhZ3M7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHROb3RpZmljYXRpb24uZW1wdHkoKTtcblxuXHRcdGlmIChpc0VkaXRIaXN0b3J5UmV2aXNpb24pIHtcblx0XHRcdE5vdGlmaWNhdGlvbi53YXJuaW5nKGkxOG4udHJhbnNsYXRlKCdoaXN0b3J5X2VkaXRfd2FybmluZycpKTtcblx0XHR9XG5cblx0XHRjb25zdCBzaG91bGRTaG93Q3JlYXRlUGFnZVRpcCA9IGlzT3RoZXJQYWdlID8gIXJldmlzaW9uSWQgOiBpc0N1cnJlbnRQYWdlRW1wdHk7XG5cblx0XHRVSS5zaG93UXVpY2tFZGl0UGFuZWwoe1xuXHRcdFx0dGl0bGU6IGAke2kxOG4udHJhbnNsYXRlKCdxdWlja2VkaXRfdG9wYnRuJyl9JHtcblx0XHRcdFx0aXNFZGl0SGlzdG9yeVJldmlzaW9uID8gaTE4bi50cmFuc2xhdGUoJ2hpc3RvcnlfZWRpdF93YXJuaW5nJykgOiAnJ1xuXHRcdFx0fWAsXG5cdFx0XHRjb250ZW50OiBzaG91bGRTaG93Q3JlYXRlUGFnZVRpcCA/IGkxOG4udHJhbnNsYXRlKCdjcmVhdGVfcGFnZV90aXAnKSA6IHNlY3Rpb25Db250ZW50LFxuXHRcdFx0c3VtbWFyeSxcblx0XHRcdG9uQmFjazogVUkuaGlkZVF1aWNrRWRpdFBhbmVsLFxuXHRcdFx0b25QYXJzZTogKHdpa2lUZXh0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBwYWdlLnBhcnNlV2lraVRleHQod2lraVRleHQpO1xuXHRcdFx0fSxcblx0XHRcdG9uRWRpdDogYXN5bmMgKHtjb250ZW50LCBzdW1tYXJ5LCBpc01pbm9yRWRpdH0pID0+IHtcblx0XHRcdFx0Y29uc3QgZWRpdFBheWxvYWQgPSB7XG5cdFx0XHRcdFx0Y29udGVudCxcblx0XHRcdFx0XHRjb25maWc6IHtcblx0XHRcdFx0XHRcdHN1bW1hcnksXG5cdFx0XHRcdFx0XHQuLi4oc2VjdGlvbk51bWJlciA9PT0gLTEgPyB7fSA6IHtzZWN0aW9uOiBzZWN0aW9uTnVtYmVyfSksXG5cdFx0XHRcdFx0XHQuLi4oZWRpdFRhZ3MubGVuZ3RoID8ge3RhZ3M6IGVkaXRUYWdzLmpvaW4oJ3wnKX0gOiB7fSksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGlzTWlub3JFZGl0KSB7XG5cdFx0XHRcdFx0ZWRpdFBheWxvYWQuY29uZmlnLm1pbm9yID0gJ3RydWUnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVkaXRQYXlsb2FkLmNvbmZpZy5ub3RtaW5vciA9ICd0cnVlJztcblx0XHRcdFx0fVxuXHRcdFx0XHRhd2FpdCBwYWdlLmVkaXQoZWRpdFBheWxvYWQpO1xuXHRcdFx0fSxcblx0XHRcdGVzY0V4aXQ6IGVzY1RvRXhpdCxcblx0XHR9KTtcblx0fTtcblxuXHRjb25zdCBoYW5kbGVTaW1wbGVSZWRpcmVjdEJ1dHRvbkNsaWNrZWQgPSBhc3luYyAoKSA9PiB7XG5cdFx0VUkuc2hvd1NpbXBsZVJlZGlyZWN0UGFuZWwoe1xuXHRcdFx0b25FZGl0OiBhc3luYyAoe3RpdGxlLCBmb3JjZU92ZXJ3cml0ZSA9IGZhbHNlfSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYWdlID0gYXdhaXQgZ2V0UGFnZSh7dGl0bGV9KTtcblx0XHRcdFx0Y29uc3QgY3VycmVudFBhZ2VOYW1lID0gQ29uc3RhbnRzLmN1cnJlbnRQYWdlTmFtZTtcblx0XHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcblx0XHRcdFx0XHRjb250ZW50OiBgI1JFRElSRUNUIFtbJHtjdXJyZW50UGFnZU5hbWV9XV1gLFxuXHRcdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdFx0c3VtbWFyeTogaTE4bi50cmFuc2xhdGUoJ3JlZGlyZWN0X2Zyb21fc3VtbWFyeScsIFt0aXRsZSwgY3VycmVudFBhZ2VOYW1lXSksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKCFmb3JjZU92ZXJ3cml0ZSkge1xuXHRcdFx0XHRcdHBheWxvYWQuY29uZmlnLmNyZWF0ZW9ubHkgPSAndHJ1ZSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXdhaXQgcGFnZS5lZGl0KHBheWxvYWQpO1xuXHRcdFx0fSxcblx0XHRcdG9uU3VjY2VzczogKHt0aXRsZX0pID0+IHtcblx0XHRcdFx0bG9jYXRpb24uaHJlZiA9IENvbnN0YW50cy5hcnRpY2xlUGF0aC5yZXBsYWNlKC9cXCQxL2dpLCB0aXRsZSk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9O1xuXG5cdGNvbnN0IGhhbmRsZVNldHRpbmdzQnV0dG9uQ2xpY2tlZCA9IGFzeW5jICgpID0+IHtcblx0XHRVSS5zaG93U2V0dGluZ3NQYW5lbCh7XG5cdFx0XHRvblN1Ym1pdDogKHtzZXR0aW5nc30pID0+IHtcblx0XHRcdFx0SlNPTi5wYXJzZShzZXR0aW5ncyk7XG5cdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdXaWtpcGx1c19TZXR0aW5ncycsIHNldHRpbmdzKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH07XG5cblx0Y29uc3QgaGFuZGxlUHJlbG9hZCA9IGFzeW5jICh7c2VjdGlvbk51bWJlcn0pID0+IHtcblx0XHRhd2FpdCBjdXJyZW50UGFnZS5nZXRXaWtpVGV4dCh7XG5cdFx0XHRzZWN0aW9uOiBzZWN0aW9uTnVtYmVyLFxuXHRcdH0pO1xuXHR9O1xuXG5cdFVJLmluc2VydFRvcFF1aWNrRWRpdEVudHJ5KGhhbmRsZVF1aWNrRWRpdEJ1dHRvbkNsaWNrZWQpO1xuXHRVSS5pbnNlcnRTZWN0aW9uUXVpY2tFZGl0RW50cmllcyhoYW5kbGVRdWlja0VkaXRCdXR0b25DbGlja2VkKTtcblx0VUkuaW5zZXJ0TGlua0VkaXRFbnRyaWVzKGhhbmRsZVF1aWNrRWRpdEJ1dHRvbkNsaWNrZWQpO1xuXHRVSS5pbnNlcnRTaW1wbGVSZWRpcmVjdEJ1dHRvbihoYW5kbGVTaW1wbGVSZWRpcmVjdEJ1dHRvbkNsaWNrZWQpO1xuXHRVSS5pbnNlcnRTZXR0aW5nc1BhbmVsQnV0dG9uKGhhbmRsZVNldHRpbmdzQnV0dG9uQ2xpY2tlZCk7XG5cdFVJLmJpbmRQcmVsb2FkRXZlbnRzKGhhbmRsZVByZWxvYWQpO1xufSk7XG4iLCAiaW1wb3J0ICcuL1dpa2lwbHVzLmxlc3MnO1xuXG4oYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRjb25zdCB7d2dBY3Rpb24sIHdnSXNBcnRpY2xlfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0aWYgKHdnQWN0aW9uICE9PSAndmlldycgfHwgIXdnSXNBcnRpY2xlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgeyd2aXN1YWxlZGl0b3ItZW5hYmxlJzogaXNWZUVuYWJsZX0gPSBtdy51c2VyLm9wdGlvbnMuZ2V0KCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0Y29uc3QgbG9hZGVyID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdGF3YWl0IGltcG9ydCgnLi9tb2R1bGVzL2luZGV4Jyk7XG5cdH07XG5cblx0Lyogc2VlIDxodHRwczovL2dpdGh1Yi5jb20vV2lraXBsdXMvV2lraXBsdXMvaXNzdWVzLzY1PiAqL1xuXHRpZiAoaXNWZUVuYWJsZSkge1xuXHRcdGF3YWl0IG13LmxvYWRlci51c2luZygnZXh0LnZpc3VhbEVkaXRvci5jb3JlJyk7XG5cdH1cblxuXHR2b2lkIGxvYWRlcigpO1xufSkoKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87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QUEsR0FBQUQsZ0JBQUE7SUFDUCxDQUFBO0FBQUEsV0FBQSxTQUZNbEwsVUFBQTtBQUFBLGFBQUFrTyxPQUFBdkMsTUFBQSxNQUFBQyxTQUFBO0lBQUE7RUFBQSxFQUFBO0FBS04sTUFBSW9DLFlBQVk7QUFDZixVQUFNN1gsR0FBRzZKLE9BQU9DLE1BQU0sdUJBQXVCO0VBQzlDO0FBRUEsT0FBS0QsT0FBTztBQUNiLENBQUEsRUFBRzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibmF2aWdhdG9yIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJDb25zdGFudHMiLCAiY29uc3RhbnRzX2RlZmF1bHQiLCAiaW5pdF9jb25zdGFudHMiLCAiX19lc20iLCAidmVyc2lvbiIsICJpc0FydGljbGUiLCAid2luZG93IiwgIm13IiwgImNvbmZpZyIsICJnZXQiLCAiY3VycmVudFBhZ2VOYW1lIiwgInJlcGxhY2UiLCAiYXJ0aWNsZUlkIiwgInJldmlzaW9uSWQiLCAibGF0ZXN0UmV2aXNpb25JZCIsICJhcnRpY2xlUGF0aCIsICJzY3JpcHRQYXRoIiwgImFjdGlvbiIsICJza2luIiwgInVzZXJHcm91cHMiLCAid2lraUlkIiwgIlJlcXVlc3RzIiwgInJlcXVlc3RzX2RlZmF1bHQiLCAiaW5pdF9yZXF1ZXN0cyIsICJiYXNlIiwgImNvbmNhdCIsICJsb2NhdGlvbiIsICJwcm90b2NvbCIsICJob3N0IiwgInF1ZXJ5IiwgIl9hc3luY1RvR2VuZXJhdG9yIiwgInVybCIsICJVUkwiLCAiX2kiLCAiX09iamVjdCRrZXlzIiwgIk9iamVjdCIsICJrZXlzIiwgImxlbmd0aCIsICJrZXkiLCAic2VhcmNoUGFyYW1zIiwgImFwcGVuZCIsICJyZXNwb25zZSIsICJmZXRjaCIsICJjcmVkZW50aWFscyIsICJoZWFkZXJzIiwgImpzb24iLCAicG9zdCIsICJwYXlsb2FkIiwgImZvcm0iLCAiRm9ybURhdGEiLCAiX2kyIiwgIl9PYmplY3QkZW50cmllcyIsICJlbnRyaWVzIiwgInZhbHVlIiwgIm1ldGhvZCIsICJib2R5IiwgIkkxOG4iLCAiaTE4bl9kZWZhdWx0IiwgImluaXRfaTE4biIsICJsYW5ndWFnZSIsICJpMThuRGF0YSIsICJzZXNzaW9uVXBkYXRlTG9nIiwgImNvbnN0cnVjdG9yIiwgIkpTT04iLCAicGFyc2UiLCAibG9jYWxTdG9yYWdlIiwgIm5hdmlnYXRvciIsICJ0b0xvd2VyQ2FzZSIsICJicm93c2VyTGFuZ3VhZ2UiLCAiaTE4bkNhY2hlIiwgImdldEl0ZW0iLCAiX2kzIiwgIl9PYmplY3Qka2V5czIiLCAic2V0SXRlbSIsICJ0cmFuc2xhdGUiLCAicGxhY2Vob2xkZXJzIiwgInJlc3VsdCIsICJsb2FkTGFuZ3VhZ2UiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwIiwgInMiLCAibiIsICJkb25lIiwgImluZGV4IiwgInBsYWNlaG9sZGVyIiwgImVyciIsICJlIiwgImYiLCAiX3RoaXMiLCAiaW5jbHVkZXMiLCAibm93VmVyc2lvbiIsICJwdXNoIiwgIl9fdmVyc2lvbiIsICJjb25zb2xlIiwgImluZm8iLCAic3RyaW5naWZ5IiwgIldpa2lwbHVzRXJyb3IiLCAiTG9nIiwgImxvZ19kZWZhdWx0IiwgImluaXRfbG9nIiwgIkVycm9yIiwgIm1lc3NhZ2UiLCAiY29kZSIsICJkZWJ1ZyIsICJlcnJvciIsICJlcnJvckNvZGUiLCAicGF5bG9hZHMiLCAidGVtcGxhdGUiLCAiX2l0ZXJhdG9yMiIsICJfc3RlcDIiLCAiaSIsICJ2IiwgIlJlZ0V4cCIsICJXaWtpIiwgIndpa2lfZGVmYXVsdCIsICJpbml0X3dpa2kiLCAicGFnZUluZm9DYWNoZSIsICJnZXRFZGl0VG9rZW4iLCAibWV0YSIsICJmb3JtYXQiLCAidG9rZW5zIiwgImNzcmZ0b2tlbiIsICJnZXRQYWdlSW5mbyIsICJ0aXRsZSIsICJfdGhpczIiLCAicGFyYW1zIiwgInByb3AiLCAicnZwcm9wIiwgInJldmlkcyIsICJ0aW1lc3RhbXAiLCAicmV2aWQiLCAidGl0bGVzIiwgInBhZ2VzIiwgInBhZ2VJbmZvIiwgInJldmlzaW9ucyIsICJnZXRXaWtpVGV4dCIsICJzZWN0aW9uIiwgInRleHQiLCAicGFyc2VXaWtpVGV4dCIsICJ3aWtpdGV4dCIsICJwc3QiLCAiZWRpdCIsICJjb250ZW50IiwgImVkaXRUb2tlbiIsICJhZGRpdGlvbmFsQ29uZmlnIiwgInRva2VuIiwgImJhc2V0aW1lc3RhbXAiLCAid2FybmluZyIsICJnZXRMYXRlc3RSZXZpc2lvbklkRm9yUGFnZSIsICJfdGhpczMiLCAiUGFnZSIsICJwYWdlX2RlZmF1bHQiLCAiaW5pdF9wYWdlIiwgImluaXRlZCIsICJpc05ld1BhZ2UiLCAic2VjdGlvbkNhY2hlIiwgImluaXQiLCAiX3RoaXM0IiwgInByb21pc2VBcnIiLCAiZ2V0VGltZXN0YW1wIiwgIlByb21pc2UiLCAiYWxsIiwgIl90aGlzNSIsICJsb2FkZXIiLCAidXNpbmciLCAidXNlciIsICJfdGhpczYiLCAiX3RoaXM3IiwgInNlYyIsICJ3aWtpVGV4dCIsICJfdGhpczgiLCAiX3RoaXM5IiwgImNyZWF0ZW9ubHkiLCAiTm90aWZpY2F0aW9uIiwgIm5vdGlmaWNhdGlvbl9kZWZhdWx0IiwgImluaXRfbm90aWZpY2F0aW9uIiwgIiQiLCAiZGlzcGxheSIsICJ0eXBlIiwgImNhbGxiYWNrIiwgImFkZENsYXNzIiwgImZpbmQiLCAibGFzdCIsICJmYWRlSW4iLCAiYmluZCIsICJjbGVhciIsICJzZWxmIiwgIm9uIiwgInNsaWRlTGVmdCIsICJzdWNjZXNzIiwgImNoaWxkcmVuIiwgImZpcnN0IiwgImZhZGVPdXQiLCAicmVtb3ZlIiwgInNldFRpbWVvdXQiLCAiZW1wdHkiLCAiZWFjaCIsICJlbGUiLCAiZGVsYXkiLCAic3BlZWQiLCAiY3NzIiwgImFuaW1hdGUiLCAibGVmdCIsICJzbGVlcCIsICJzbGVlcF9kZWZhdWx0IiwgImluaXRfc2xlZXAiLCAidGltZSIsICJyZXNvbHZlIiwgInBhcnNlUXVlcnkiLCAicmVnIiwgIm1hdGNoIiwgImV4ZWMiLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwgImluaXRfaGVscGVycyIsICJVSSIsICJ1aV9kZWZhdWx0IiwgImluaXRfdWkiLCAicXVpY2tFZGl0UGFuZWxWaXNpYmxlIiwgInNjcm9sbFRvcCIsICJjcmVhdGVEaWFsb2dCb3giLCAid2lkdGgiLCAiY2xpZW50V2lkdGgiLCAiaW5uZXJXaWR0aCIsICJjbGllbnRIZWlnaHQiLCAiaW5uZXJIZWlnaHQiLCAiZGlhbG9nV2lkdGgiLCAiTWF0aCIsICJtaW4iLCAiZGlhbG9nQm94IiwgInRvcCIsICJkb2N1bWVudCIsICJodG1sIiwgInBhcmVudCIsICJhZGRFdmVudExpc3RlbmVyIiwgIm9uYmVmb3JldW5sb2FkIiwgImJpbmREcmFnZ2luZyIsICJlbGVtZW50IiwgIm1vdXNlZG93biIsICJiYXNlWCIsICJjbGllbnRYIiwgImJhc2VZIiwgImNsaWVudFkiLCAiYmFzZU9mZnNldFgiLCAib2Zmc2V0IiwgImJhc2VPZmZzZXRZIiwgImUyIiwgInVuYmluZCIsICJvZmYiLCAiYWRkRnVuY3Rpb25CdXR0b24iLCAiaWQiLCAiYnV0dG9uIiwgImF0dHIiLCAiaW5zZXJ0U2ltcGxlUmVkaXJlY3RCdXR0b24iLCAib25DbGljayIsICJpbnNlcnRTZXR0aW5nc1BhbmVsQnV0dG9uIiwgImluc2VydFRvcFF1aWNrRWRpdEVudHJ5IiwgInRvcEJ0biIsICJ0b3BCdG5MaW5rIiwgInNlY3Rpb25OdW1iZXIiLCAidGFyZ2V0UGFnZU5hbWUiLCAiYWZ0ZXIiLCAiaW5zZXJ0U2VjdGlvblF1aWNrRWRpdEVudHJpZXMiLCAic2VjdGlvbkJ0biIsICJlZGl0VVJMIiwgInNlY3Rpb25UYXJnZXROYW1lIiwgImNsb25lTm9kZSIsICJwcmV2IiwgImNsb25lIiwgInNlY3Rpb25OYW1lIiwgInRyaW0iLCAiX3NlY3Rpb25CdG4iLCAiYmVmb3JlIiwgImluc2VydExpbmtFZGl0RW50cmllcyIsICJocmVmIiwgImNsYXNzIiwgIl9wYXJhbXMkc2VjdGlvbiIsICJzaG93UXVpY2tFZGl0UGFuZWwiLCAic3VtbWFyeSIsICJvbkJhY2siLCAib25QYXJzZSIsICJvbkVkaXQiLCAiZXNjRXhpdCIsICJoaWRlUXVpY2tFZGl0UGFuZWwiLCAiYmFja0J0biIsICJqdW1wQnRuIiwgImlucHV0Qm94IiwgInByZXZpZXdCb3giLCAic3VtbWFyeUJveCIsICJlZGl0U3VibWl0QnRuIiwgInByZXZpZXdTdWJtaXRCdG4iLCAiaXNNaW5vckVkaXQiLCAibWFyZ2luIiwgImVkaXRCb2R5IiwgInZhbCIsICJwcmVsb2FkQmFubmVyIiwgInRpbWVyIiwgIkRhdGUiLCAibm93IiwgImVkaXRCYW5uZXIiLCAiaXMiLCAidXNlVGltZSIsICJ0b1N0cmluZyIsICJyZWxvYWQiLCAibG9nIiwgImN0cmxLZXkiLCAid2hpY2giLCAic2hpZnRLZXkiLCAidHJpZ2dlciIsICJwcmV2ZW50RGVmYXVsdCIsICJzdG9wUHJvcGFnYXRpb24iLCAic2hvd1NpbXBsZVJlZGlyZWN0UGFuZWwiLCAib25TdWNjZXNzIiwgIl90aGlzMTAiLCAiaW5wdXQiLCAiYXBwbHlCdG4iLCAiY2FuY2VsQnRuIiwgImNvbnRpbnVlQnRuIiwgImRpYWxvZyIsICJmb3JjZU92ZXJ3cml0ZSIsICJoaWRlU2ltcGxlUmVkaXJlY3RQYW5lbCIsICJlcnJvcjIiLCAic2hvd1NldHRpbmdzUGFuZWwiLCAib25TdWJtaXQiLCAiX3RoaXMxMSIsICJXaWtpcGx1c19TZXR0aW5ncyIsICJzZXR0aW5ncyIsICJzYXZlZEJhbm5lciIsICJoaWRlU2V0dGluZ3NQYW5lbCIsICJiaW5kUHJlbG9hZEV2ZW50cyIsICJvblByZWxvYWQiLCAiU2V0dGluZ3MiLCAic2V0dGluZ3NfZGVmYXVsdCIsICJpbml0X3NldHRpbmdzIiwgImdldFNldHRpbmciLCAib2JqZWN0IiwgInciLCAiY3VzdG9tU2V0dGluZ0Z1bmN0aW9uIiwgIkZ1bmN0aW9uIiwgIl9pNCIsICJfT2JqZWN0JGtleXMzIiwgImtleTIiLCAibW9kdWxlc19leHBvcnRzIiwgImluaXRfbW9kdWxlcyIsICJQYWdlcyIsICJpc0N1cnJlbnRQYWdlRW1wdHkiLCAiZ2V0UGFnZSIsICJfcmVmNyIsICJyZXZpc2lvbklkMiIsICJuZXdQYWdlIiwgIl94IiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJfV2lraXBsdXNQYWdlcyIsICJjdXJyZW50UGFnZSIsICJoYW5kbGVRdWlja0VkaXRCdXR0b25DbGlja2VkIiwgIl9yZWY4IiwgImlzT3RoZXJQYWdlIiwgInBhZ2UiLCAiY3VzdG9tU3VtbWFyeSIsICJzZWN0aW9uQ29udGVudCIsICJpc0VkaXRIaXN0b3J5UmV2aXNpb24iLCAiZXNjVG9FeGl0IiwgImN1c3RvbUVkaXRUYWdzIiwgImRlZmF1bHRFZGl0VGFncyIsICJlZGl0VGFncyIsICJjbGVhclRpbWVvdXQiLCAic2hvdWxkU2hvd0NyZWF0ZVBhZ2VUaXAiLCAiX3JlZjkiLCAic3VtbWFyeTIiLCAiZWRpdFBheWxvYWQiLCAidGFncyIsICJqb2luIiwgIm1pbm9yIiwgIm5vdG1pbm9yIiwgIl94MiIsICJoYW5kbGVTaW1wbGVSZWRpcmVjdEJ1dHRvbkNsaWNrZWQiLCAiX3JlZjEwIiwgIl9yZWYxMSIsICJjdXJyZW50UGFnZU5hbWUyIiwgIl94MyIsICJoYW5kbGVTZXR0aW5nc0J1dHRvbkNsaWNrZWQiLCAiX3JlZjEyIiwgImhhbmRsZVByZWxvYWQiLCAiX3JlZjEzIiwgIl94NCIsICJ3Z0FjdGlvbiIsICJ3Z0lzQXJ0aWNsZSIsICJpc1ZlRW5hYmxlIiwgIm9wdGlvbnMiLCAiX3JlZjE1IiwgInRoZW4iXQp9Cg== diff --git a/dist/i18n/i18n.js b/dist/i18n/i18n.js index 80509e97..822db53d 100644 --- a/dist/i18n/i18n.js +++ b/dist/i18n/i18n.js @@ -27,9 +27,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports2, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -43,9 +43,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports2, module2) { "use strict"; module2.exports = function(exec) { try { @@ -57,9 +57,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -70,9 +70,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -83,9 +83,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -95,9 +95,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -109,9 +109,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -124,9 +124,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -140,9 +140,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -153,9 +153,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -170,9 +170,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -180,9 +180,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -193,9 +193,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -205,9 +205,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports2, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -218,9 +218,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -229,9 +229,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -244,18 +244,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator2 = globalThis2.navigator; @@ -264,9 +264,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -291,9 +291,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -307,18 +307,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -334,9 +334,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports2, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -349,9 +349,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -363,9 +363,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports2, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -376,9 +376,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -394,17 +394,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports2, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -419,9 +419,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports2, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -429,18 +429,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports2, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -449,9 +449,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports2, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -461,9 +461,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -474,9 +474,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -488,9 +488,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -510,9 +510,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports2, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -538,9 +538,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports2, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -551,9 +551,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -565,9 +565,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -582,9 +582,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -607,9 +607,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -623,9 +623,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports2, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -637,9 +637,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports2) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -683,9 +683,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -699,9 +699,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports2, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -719,9 +719,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -736,9 +736,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -747,9 +747,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports2, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -760,17 +760,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports2, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -843,9 +843,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -898,9 +898,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports2, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -933,9 +933,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports2, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -946,9 +946,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -958,9 +958,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -972,9 +972,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports2, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -985,9 +985,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -996,9 +996,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports2, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1031,9 +1031,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1055,9 +1055,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) { "use strict"; module2.exports = [ "constructor", @@ -1071,9 +1071,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1084,17 +1084,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) { "use strict"; exports2.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1110,9 +1110,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1132,9 +1132,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports2, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1153,9 +1153,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports2, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1196,9 +1196,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js var require_set_helpers = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-helpers.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-helpers.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var SetPrototype = Set.prototype; @@ -1213,9 +1213,9 @@ var require_set_helpers = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js var require_a_set = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-set.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-set.js"(exports2, module2) { "use strict"; var has = require_set_helpers().has; module2.exports = function(it) { @@ -1225,9 +1225,9 @@ var require_a_set = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js var require_iterate_simple = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterate-simple.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterate-simple.js"(exports2, module2) { "use strict"; var call = require_function_call(); module2.exports = function(record, fn, ITERATOR_INSTEAD_OF_RECORD) { @@ -1242,9 +1242,9 @@ var require_iterate_simple = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js var require_set_iterate = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-iterate.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-iterate.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var iterateSimple = require_iterate_simple(); @@ -1260,9 +1260,9 @@ var require_set_iterate = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js var require_set_clone = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-clone.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-clone.js"(exports2, module2) { "use strict"; var SetHelpers = require_set_helpers(); var iterate = require_set_iterate(); @@ -1278,9 +1278,9 @@ var require_set_clone = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js var require_function_uncurry_this_accessor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports2, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var aCallable = require_a_callable(); @@ -1293,9 +1293,9 @@ var require_function_uncurry_this_accessor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js var require_set_size = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-size.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-size.js"(exports2, module2) { "use strict"; var uncurryThisAccessor = require_function_uncurry_this_accessor(); var SetHelpers = require_set_helpers(); @@ -1305,9 +1305,9 @@ var require_set_size = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js var require_get_iterator_direct = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-iterator-direct.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-iterator-direct.js"(exports2, module2) { "use strict"; module2.exports = function(obj) { return { @@ -1319,9 +1319,9 @@ var require_get_iterator_direct = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js var require_get_set_record = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-set-record.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-set-record.js"(exports2, module2) { "use strict"; var aCallable = require_a_callable(); var anObject = require_an_object(); @@ -1357,9 +1357,9 @@ var require_get_set_record = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js var require_set_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-difference.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-difference.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1385,9 +1385,9 @@ var require_set_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js var require_set_method_accept_set_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-method-accept-set-like.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-method-accept-set-like.js"(exports2, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var createSetLike = function(size) { @@ -1422,9 +1422,9 @@ var require_set_method_accept_set_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js var require_es_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.difference.v2.js"() { "use strict"; var $ = require_export(); var difference = require_set_difference(); @@ -1435,17 +1435,9 @@ var require_es_set_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js -var require_esnext_set_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.difference.v2.js"() { - "use strict"; - require_es_set_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js var require_set_intersection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-intersection.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-intersection.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1474,9 +1466,9 @@ var require_set_intersection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js var require_es_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.intersection.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.intersection.v2.js"() { "use strict"; var $ = require_export(); var fails = require_fails(); @@ -1491,17 +1483,9 @@ var require_es_set_intersection_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js -var require_esnext_set_intersection_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.intersection.v2.js"() { - "use strict"; - require_es_set_intersection_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js var require_iterator_close = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/iterator-close.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/iterator-close.js"(exports2, module2) { "use strict"; var call = require_function_call(); var anObject = require_an_object(); @@ -1528,9 +1512,9 @@ var require_iterator_close = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js var require_set_is_disjoint_from = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-disjoint-from.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-disjoint-from.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1553,9 +1537,9 @@ var require_set_is_disjoint_from = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js var require_es_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js"() { "use strict"; var $ = require_export(); var isDisjointFrom = require_set_is_disjoint_from(); @@ -1566,17 +1550,9 @@ var require_es_set_is_disjoint_from_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js -var require_esnext_set_is_disjoint_from_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"() { - "use strict"; - require_es_set_is_disjoint_from_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js var require_set_is_subset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-subset-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-subset-of.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var size = require_set_size(); @@ -1593,9 +1569,9 @@ var require_set_is_subset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js var require_es_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-subset-of.v2.js"() { "use strict"; var $ = require_export(); var isSubsetOf = require_set_is_subset_of(); @@ -1606,17 +1582,9 @@ var require_es_set_is_subset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js -var require_esnext_set_is_subset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"() { - "use strict"; - require_es_set_is_subset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js var require_set_is_superset_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-is-superset-of.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-is-superset-of.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var has = require_set_helpers().has; @@ -1636,9 +1604,9 @@ var require_set_is_superset_of = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js var require_es_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.is-superset-of.v2.js"() { "use strict"; var $ = require_export(); var isSupersetOf = require_set_is_superset_of(); @@ -1649,17 +1617,9 @@ var require_es_set_is_superset_of_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js -var require_esnext_set_is_superset_of_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"() { - "use strict"; - require_es_set_is_superset_of_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js var require_set_symmetric_difference = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-symmetric-difference.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-symmetric-difference.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var SetHelpers = require_set_helpers(); @@ -1682,9 +1642,9 @@ var require_set_symmetric_difference = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js var require_es_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.symmetric-difference.v2.js"() { "use strict"; var $ = require_export(); var symmetricDifference = require_set_symmetric_difference(); @@ -1695,17 +1655,9 @@ var require_es_set_symmetric_difference_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js -var require_esnext_set_symmetric_difference_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"() { - "use strict"; - require_es_set_symmetric_difference_v2(); - } -}); - -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js var require_set_union = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/set-union.js"(exports2, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/set-union.js"(exports2, module2) { "use strict"; var aSet = require_a_set(); var add = require_set_helpers().add; @@ -1724,9 +1676,9 @@ var require_set_union = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js var require_es_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.set.union.v2.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.set.union.v2.js"() { "use strict"; var $ = require_export(); var union = require_set_union(); @@ -1737,22 +1689,14 @@ var require_es_set_union_v2 = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js -var require_esnext_set_union_v2 = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/esnext.set.union.v2.js"() { - "use strict"; - require_es_set_union_v2(); - } -}); - // dist/i18n/i18n.js -require_esnext_set_difference_v2(); -require_esnext_set_intersection_v2(); -require_esnext_set_is_disjoint_from_v2(); -require_esnext_set_is_subset_of_v2(); -require_esnext_set_is_superset_of_v2(); -require_esnext_set_symmetric_difference_v2(); -require_esnext_set_union_v2(); +require_es_set_difference_v2(); +require_es_set_intersection_v2(); +require_es_set_is_disjoint_from_v2(); +require_es_set_is_subset_of_v2(); +require_es_set_is_superset_of_v2(); +require_es_set_symmetric_difference_v2(); +require_es_set_union_v2(); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { @@ -2034,4 +1978,4 @@ var { /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanMiLCAic3JjL2kxOG4vaTE4bi50cyIsICJzcmMvaTE4bi9vcHRpb25zLmpzb24iLCAic3JjL2kxOG4vbW9kdWxlcy9jb25zdGFudC50cyIsICJzcmMvaTE4bi9tb2R1bGVzL3V0aWwvZ2VuZXJhdGVMYW5ndWFnZUNvZGVTcGxpdEFycmF5LnRzIiwgInNyYy9pMThuL21vZHVsZXMvdXRpbC9nZW5lcmF0ZURlZmF1bHRGYWxsYmFja0xpc3QudHMiLCAic3JjL2kxOG4vbW9kdWxlcy9pbml0STE4bk1ldGhvZHMudHMiLCAic3JjL2kxOG4vbW9kdWxlcy9pbml0U2hpbXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKSA6IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpcztcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG4gIFNldDogU2V0LFxuICBhZGQ6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5hZGQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5oYXMpLFxuICByZW1vdmU6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZVsnZGVsZXRlJ10pLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBTZXRQcm90b3R5cGUgPSBTZXRIZWxwZXJzLnByb3RvO1xudmFyIGZvckVhY2ggPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuZm9yRWFjaCk7XG52YXIga2V5cyA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5rZXlzKTtcbnZhciBuZXh0ID0ga2V5cyhuZXcgU2V0KCkpLm5leHQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwgZm4sIGludGVycnVwdGlibGUpIHtcbiAgcmV0dXJuIGludGVycnVwdGlibGUgPyBpdGVyYXRlU2ltcGxlKHsgaXRlcmF0b3I6IGtleXMoc2V0KSwgbmV4dDogbmV4dCB9LCBmbikgOiBmb3JFYWNoKHNldCwgZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKFNldEhlbHBlcnMucHJvdG8sICdzaXplJywgJ2dldCcpIHx8IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIHNldC5zaXplO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgR2V0SXRlcmF0b3JEaXJlY3Qob2JqKWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVycy8jc2VjLWdldGl0ZXJhdG9yZGlyZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICBpdGVyYXRvcjogb2JqLFxuICAgIG5leHQ6IG9iai5uZXh0LFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgaW50U2l6ZSkge1xuICB0aGlzLnNldCA9IHNldDtcbiAgdGhpcy5zaXplID0gbWF4KGludFNpemUsIDApO1xuICB0aGlzLmhhcyA9IGFDYWxsYWJsZShzZXQuaGFzKTtcbiAgdGhpcy5rZXlzID0gYUNhbGxhYmxlKHNldC5rZXlzKTtcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihJTlZBTElEX1NJWkUpO1xuICB2YXIgaW50U2l6ZSA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtU2l6ZSk7XG4gIGlmIChpbnRTaXplIDwgMCkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHJldHVybiBuZXcgU2V0UmVjb3JkKG9iaiwgaW50U2l6ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICBlbHNlIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG52YXIgY3JlYXRlU2V0TGlrZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiB7XG4gICAgc2l6ZTogc2l6ZSxcbiAgICBoYXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgU2V0ID0gZ2V0QnVpbHRJbignU2V0Jyk7XG4gIHRyeSB7XG4gICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoMCkpO1xuICAgIHRyeSB7XG4gICAgICAvLyBsYXRlIHNwZWMgY2hhbmdlLCBlYXJseSBXZWJLaXQgfiBTYWZhcmkgMTcuMCBiZXRhIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHBhc3MgaXRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzL3B1bGwvODhcbiAgICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKC0xKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHtcbiAgICBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoaGFzKE8sIGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcnNlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxudmFyIElOQ09SUkVDVCA9ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpbnRlcnNlY3Rpb24nKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBlcy9uby1zZXQgLS0gdGVzdGluZ1xuICByZXR1cm4gU3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwgMiwgM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLCAyXSkpKSkgIT09ICczLDInO1xufSk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVCB9LCB7XG4gIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIHJldHVybiBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpdGVyYXRlKE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3Vic2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1YnNldE9mJykgfSwge1xuICBpc1N1YnNldE9mOiBpc1N1YnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3VwZXJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1cGVyc2V0T2YnKSB9LCB7XG4gIGlzU3VwZXJzZXRPZjogaXNTdXBlcnNldE9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gICAgZWxzZSBhZGQocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHN5bW1ldHJpY0RpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3N5bW1ldHJpY0RpZmZlcmVuY2UnKSB9LCB7XG4gIHN5bW1ldHJpY0RpZmZlcmVuY2U6IHN5bW1ldHJpY0RpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52MicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgYWRkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuYWRkO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXVuaW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCd1bmlvbicpIH0sIHtcbiAgdW5pb246IHVuaW9uXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQudW5pb24udjInKTtcbiIsICJpbXBvcnQge2luaXRJMThuTWV0aG9kc30gZnJvbSAnLi9tb2R1bGVzL2luaXRJMThuTWV0aG9kcyc7XG5pbXBvcnQge2luaXRTaGltc30gZnJvbSAnLi9tb2R1bGVzL2luaXRTaGltcyc7XG5cbmNvbnN0IGkxOG5NZXRob2RzOiBSZXR1cm5UeXBlPHR5cGVvZiBpbml0STE4bk1ldGhvZHM+ID0gaW5pdEkxOG5NZXRob2RzKCk7XG5pbml0U2hpbXMoaTE4bk1ldGhvZHMpO1xuXG5leHBvcnQgY29uc3Qge2NvbnRlbnQsIGxvY2FsaXplLCB2YXJ5fSA9IGkxOG5NZXRob2RzO1xuXG4vKiFcbi8vIOS7k+W6k+WGheeUqOazlVxuXHQvLyDlrprkuYnlpJrmnaHmtojmga9cblx0Ly8g5pSv5oyB5aSa6K+t6KiA77yM5Y+v6YCJ5YC85a6a5LmJ5ZyobW9kdWxlcy90eXBlcy5kLnRzI0wtMe+8jOWPr+ebtOaOpea3u+WKoOWFtuS7luWAvO+8iFJGQyA1NjQ277yJXG5cdGltcG9ydCB7Y29udGVudCwgbG9jYWxpemUsIHZhcnl9IGZyb20gJ2V4dC5nYWRnZXQuaTE4bic7XG5cdGNvbnN0IGdldEkxOG5NZXNzYWdlcyA9ICgpID0+IHtcblx0XHQvLyBpMThu55qE5LiJ5Liq5pa55rOV5Lya5Yy56YWN5b2T5YmN6K+t6KiA5ZKM5a6D5omA5o6l5pS25a+56LGh5Lit55qE6ZSu77yM5a+55LqObG9jYWxpemXmnaXor7TvvIzlgYforr7lt7LlrprkuYl6aOOAgWVu5ZKMamHvvIzliJlcblx0XHQvLyAgIOW9k+mhtemdouivreiogO+8iHdnVXNlckxhbmd1YWdlID8/IHdnQ29udGVudExhbmd1YWdl77yJ5Li65Lit5paHL+iLseivrS/ml6Xor63ml7bvvIzov5Tlm57pobXpnaLor63oqIDmiYDlr7nlupTnmoTlgLxcblx0XHQvLyAgIOW9k+mhtemdouivreiogOS4uuazleivre+8jOa1j+iniOWZqOivreiogOS4uuS4reaWhy/oi7Hor60v5pel6K+t5pe277yM6L+U5Zue5rWP6KeI5Zmo6K+t6KiA5omA5a+55bqU55qE5YC8XG5cdFx0Ly8gICDlvZPpobXpnaLor63oqIDkuLrms5Xor63vvIzkuJTkuI3lrZjlnKjmtY/op4jlmajor63oqIDmiYDlr7nlupTnmoTplK7vvIzov5Tlm55MLTI15a6a5LmJ55qE6ZSu5omA5a+55bqU55qE5YC844CC6Iul5q2k6ZSu5ZCM5qC35rKh6KKr5a6a5LmJ77yM5YiZ6L+U5Zue56m65a2X56ym5LiyXG5cdFx0cmV0dXJuIHtcblx0XHRcdENhbmNlbDogY29udGVudCh7XG5cdFx0XHRcdGVuOiAnQ2FuY2VsJyxcblx0XHRcdFx0amE6ICfjgq3jg6Pjg7Pjgrvjg6snLFxuXHRcdFx0XHR6aDogJ+WPlua2iCcsXG5cdFx0XHR9KSxcblx0XHRcdFFpdVdlbjogbG9jYWxpemUoe1xuXHRcdFx0XHRlbjogJ1FpdVdlbicsXG5cdFx0XHRcdGphOiAn44Gh44KF44GG44GG44KTJyxcblx0XHRcdFx0J3poLWNuJzogJ+axgumXuycsXG5cdFx0XHRcdCd6aC1oayc6ICfmsYLogZ4nLFxuXHRcdFx0fSksXG5cdFx0XHRMb25nVGV4dDogdmFyeSh7XG5cdFx0XHRcdGVuOiAnVGhpcyBpcyBhIHZlcnkgbG9uZyB0ZXh0Jyxcblx0XHRcdFx0amE6ICfjgZPjgozjga/pnZ7luLjjgavplbfjgYTjg4bjgq3jgrnjg4jjgafjgZknLFxuXHRcdFx0XHQnemgtaGFucyc6ICfov5nmmK/kuIDmrrXpnZ7luLjplb/nmoTmlofmnKwnLFxuXHRcdFx0XHQnemgtaGFudCc6ICfpgJnmmK/kuIDmrrXpnZ7luLjplbfnmoTmloflrZcnLFxuXHRcdFx0fSksXG5cdFx0fTtcblx0fTtcblx0Y29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cdGNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRcdHJldHVybiBpMThuTWVzc2FnZXNba2V5XSB8fCBrZXk7XG5cdH07XG5cdC8vIOiwg+eUqFxuXHRnZXRNZXNzYWdlKCdDYW5jZWwnKTsgLy8gZW46IENhbmNlbCwgamE6IOOCreODo+ODs+OCu+ODqywgemg6IOWPlua2iCwgemgtaGFuczog5Y+W5raILCB6aC1oYW50OiDlj5bmtogsIHpoLWNuOiDlj5bmtogsIHpoLWhrOiDlj5bmtogsIHpoLXR3OiDlj5bmtohcblx0Z2V0TWVzc2FnZSgnUWl1V2VuJyk7IC8vIGVuOiBRaXVXZW4sIGphOiDjgaHjgoXjgYbjgYbjgpMsIHpoOiDmsYLpl7ssIHpoLWhhbnM6IOaxgumXuywgemgtaGFudDog5rGC6IGeLCB6aC1jbjog5rGC6Ze7LCB6aC1oazog5rGC6IGeLCB6aC10dzog5rGC6IGeXG5cdGdldE1lc3NhZ2UoJ0xvbmdUZXh0Jyk7XG5cdFx0Ly8gZW46IFRoaXMgaXMgYSB2ZXJ5IGxvbmcgdGV4dFxuXHRcdC8vIGphOiDjgZPjgozjga/pnZ7luLjjgavplbfjgYTjg4bjgq3jgrnjg4jjgafjgZlcblx0XHQvLyB6aDog6L+Z5piv5LiA5q616Z2e5bi46ZW/55qE5paH5pysXG5cdFx0Ly8gemgtaGFuczog6L+Z5piv5LiA5q616Z2e5bi46ZW/55qE5paH5pysXG5cdFx0Ly8gemgtaGFudDog6YCZ5piv5LiA5q616Z2e5bi46ZW355qE5paH5a2XXG5cdFx0Ly8gemgtY246IOi/meaYr+S4gOautemdnuW4uOmVv+eahOaWh+acrFxuXHRcdC8vIHpoLWhrOiDpgJnmmK/kuIDmrrXpnZ7luLjplbfnmoTmloflrZdcblx0XHQvLyB6aC10dzog6YCZ5piv5LiA5q616Z2e5bi46ZW355qE5paH5a2XXG5cblx0Ly8g55u05o6l6L2s5o2i5Y2V5p2h5raI5oGv77yI5LiN5o6o6I2Q77yM5LuF5Li65YW85a655oCn5L+d55WZ77yJXG5cdC8vIOS7heaUr+aMgeS8oOmAkuS4reaWh+WSjOiLseivreOAguWcqOmdnuS4reaWh+eOr+Wig+S4lOacquS8oOmAkuiLseivreaWh+acrOaXtu+8jOacgOe7iOi/lOWbnnpo55qE5YC8XG5cdHdnVUNTKCfmsYLpl7snLCAn5rGC6IGeJyk7IC8vIGVuOiDmsYLpl7ssIGphOiDmsYLpl7ssIHpoOiDmsYLpl7ssIHpoLWhhbnM6IOaxgumXuywgemgtaGFudDog5rGC6IGeLCB6aC1jbjog5rGC6Ze7LCB6aC1oazog5rGC6IGeLCB6aC10dzog5rGC6IGeXG5cdHdnVUxTKCfmsYLpl7snLCAn5rGC6IGeJyk7IC8vIGVuOiDmsYLpl7ssIGphOiDmsYLpl7ssIHpoOiDmsYLpl7ssIHpoLWhhbnM6IOaxgumXuywgemgtaGFudDog5rGC6IGeLCB6aC1jbjog5rGC6Ze7LCB6aC1oazog5rGC6IGeLCB6aC10dzog5rGC6IGeXG5cdHdnVVZTKCfmsYLpl7snLCAn5rGC6IGeJyk7IC8vIGVuOiDmsYLpl7ssIGphOiDmsYLpl7ssIHpoOiDmsYLpl7ssIHpoLWhhbnM6IOaxgumXuywgemgtaGFudDog5rGC6IGeLCB6aC1jbjog5rGC6Ze7LCB6aC1oazog5rGC6IGeLCB6aC10dzog5rGC6IGeXG5cblx0Ly8g6Z2eTWVkaWFXaWtp5ZG95ZCN56m66Ze055qE6ISa5pys5Y+v5Lul6YCa6L+HbXcubG9hZGVyLnVzaW5n5Yqg6L29ZXh0LmdhZGdldC5pMThu5qih5Z2XXG5cdG13LmxvYWRlci51c2luZygnZXh0LmdhZGdldC5pMThuJykudGhlbigocmVxdWlyZSkgPT4ge1xuXHRcdGNvbnN0IHtjb250ZW50LCBsb2NhbGl6ZSwgdmFyeX0gPSByZXF1aXJlKCdleHQuZ2FkZ2V0LmkxOG4nKTtcblx0fSk7XG4gKi9cbiIsICJ7XG5cdFwiZGVmYXVsdExhbmd1YWdlQ29kZVwiOiBcImVuXCIsXG5cdFwiZmFsbGJhY2tUYWJsZVwiOiB7XG5cdFx0XCJ6aFwiOiBbXCJ6aFwiLCBcInpoLWhhbnNcIiwgXCJ6aC1oYW50XCIsIFwiemgtY25cIiwgXCJ6aC10d1wiLCBcInpoLWhrXCIsIFwiemgtc2dcIiwgXCJ6aC1tb1wiLCBcInpoLW15XCJdLFxuXHRcdFwiemgtaGFuc1wiOiBbXCJ6aC1oYW5zXCIsIFwiemgtY25cIiwgXCJ6aC1zZ1wiLCBcInpoLW15XCIsIFwiemhcIiwgXCJ6aC1oYW50XCIsIFwiemgtdHdcIiwgXCJ6aC1oa1wiLCBcInpoLW1vXCJdLFxuXHRcdFwiemgtaGFudFwiOiBbXCJ6aC1oYW50XCIsIFwiemgtdHdcIiwgXCJ6aC1oa1wiLCBcInpoLW1vXCIsIFwiemhcIiwgXCJ6aC1oYW5zXCIsIFwiemgtY25cIiwgXCJ6aC1zZ1wiLCBcInpoLW15XCJdLFxuXHRcdFwiemgtY25cIjogW1wiemgtY25cIiwgXCJ6aC1oYW5zXCIsIFwiemgtc2dcIiwgXCJ6aC1teVwiLCBcInpoXCIsIFwiemgtaGFudFwiLCBcInpoLXR3XCIsIFwiemgtaGtcIiwgXCJ6aC1tb1wiXSxcblx0XHRcInpoLXNnXCI6IFtcInpoLXNnXCIsIFwiemgtaGFuc1wiLCBcInpoLWNuXCIsIFwiemgtbXlcIiwgXCJ6aFwiLCBcInpoLWhhbnRcIiwgXCJ6aC10d1wiLCBcInpoLWhrXCIsIFwiemgtbW9cIl0sXG5cdFx0XCJ6aC1teVwiOiBbXCJ6aC1teVwiLCBcInpoLWhhbnNcIiwgXCJ6aC1jblwiLCBcInpoLXNnXCIsIFwiemhcIiwgXCJ6aC1oYW50XCIsIFwiemgtdHdcIiwgXCJ6aC1oa1wiLCBcInpoLW1vXCJdLFxuXHRcdFwiemgtdHdcIjogW1wiemgtdHdcIiwgXCJ6aC1oYW50XCIsIFwiemgtaGtcIiwgXCJ6aC1tb1wiLCBcInpoXCIsIFwiemgtaGFuc1wiLCBcInpoLWNuXCIsIFwiemgtc2dcIiwgXCJ6aC1teVwiXSxcblx0XHRcInpoLWhrXCI6IFtcInpoLWhrXCIsIFwiemgtaGFudFwiLCBcInpoLW1vXCIsIFwiemgtdHdcIiwgXCJ6aFwiLCBcInpoLWhhbnNcIiwgXCJ6aC1jblwiLCBcInpoLXNnXCIsIFwiemgtbXlcIl0sXG5cdFx0XCJ6aC1tb1wiOiBbXCJ6aC1tb1wiLCBcInpoLWhhbnRcIiwgXCJ6aC1oa1wiLCBcInpoLXR3XCIsIFwiemhcIiwgXCJ6aC1oYW5zXCIsIFwiemgtY25cIiwgXCJ6aC1zZ1wiLCBcInpoLW15XCJdXG5cdH1cbn1cbiIsICJjb25zdCBXR19DT05URU5UX0xBTkdVQUdFOiBzdHJpbmcgPSBtdy5jb25maWcuZ2V0KCd3Z0NvbnRlbnRMYW5ndWFnZScpO1xuY29uc3QgV0dfVVNFUl9MQU5HVUFHRTogc3RyaW5nID0gbXcuY29uZmlnLmdldCgnd2dVc2VyTGFuZ3VhZ2UnKTtcbmNvbnN0IFdHX1VTRVJfVkFSSUFOVDogc3RyaW5nIHwgbnVsbCA9IG13LmNvbmZpZy5nZXQoJ3dnVXNlclZhcmlhbnQnKTtcblxuZXhwb3J0IHtXR19DT05URU5UX0xBTkdVQUdFLCBXR19VU0VSX0xBTkdVQUdFLCBXR19VU0VSX1ZBUklBTlR9O1xuIiwgImNvbnN0IGdlbmVyYXRlTGFuZ3VhZ2VDb2RlU3BsaXRBcnJheSA9IChvcmlnaW5MYW5ndWFnZUNvZGU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcblx0Y29uc3QgbGFuZ3VhZ2VDb2RlU3BsaXRBcnJheTogc3RyaW5nW10gPSBvcmlnaW5MYW5ndWFnZUNvZGUuc3BsaXQoJy0nKS5tYXAoKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHR9KTtcblxuXHRyZXR1cm4gbGFuZ3VhZ2VDb2RlU3BsaXRBcnJheTtcbn07XG5cbmV4cG9ydCB7Z2VuZXJhdGVMYW5ndWFnZUNvZGVTcGxpdEFycmF5fTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uLy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2dlbmVyYXRlTGFuZ3VhZ2VDb2RlU3BsaXRBcnJheX0gZnJvbSAnLi9nZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXknO1xuaW1wb3J0IHtpc1ZhbGlkS2V5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBnZW5lcmF0ZURlZmF1bHRGYWxsYmFja0xpc3QgPSAoKTogc3RyaW5nW10gPT4ge1xuXHRjb25zdCBkb2N1bWVudExhbmd1YWdlU3BsaXRBcnJheTogc3RyaW5nW10gPSBnZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXkoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcpO1xuXHRjb25zdCBuYXZpZ2F0b3JMYW5ndWFnZVNwbGl0QXJyYXk6IHN0cmluZ1tdID0gZ2VuZXJhdGVMYW5ndWFnZUNvZGVTcGxpdEFycmF5KG5hdmlnYXRvci5sYW5ndWFnZSk7XG5cblx0bGV0IGxhbmd1YWdlQ29kZTogc3RyaW5nID0gT1BUSU9OUy5kZWZhdWx0TGFuZ3VhZ2VDb2RlO1xuXHRmb3IgKGNvbnN0IGxhbmd1YWdlQ29kZVNwbGl0QXJyYXkgb2YgW2RvY3VtZW50TGFuZ3VhZ2VTcGxpdEFycmF5LCBuYXZpZ2F0b3JMYW5ndWFnZVNwbGl0QXJyYXldKSB7XG5cdFx0c3dpdGNoIChsYW5ndWFnZUNvZGVTcGxpdEFycmF5Lmxlbmd0aCkge1xuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRsYW5ndWFnZUNvZGUgPSBgJHtsYW5ndWFnZUNvZGVTcGxpdEFycmF5WzBdfS0ke2xhbmd1YWdlQ29kZVNwbGl0QXJyYXlbMV19YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDM6XG5cdFx0XHRcdGxhbmd1YWdlQ29kZSA9IGAke2xhbmd1YWdlQ29kZVNwbGl0QXJyYXlbMF19LSR7bGFuZ3VhZ2VDb2RlU3BsaXRBcnJheVsyXX1gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGxhbmd1YWdlQ29kZSA9IGxhbmd1YWdlQ29kZVNwbGl0QXJyYXlbMF0gYXMgc3RyaW5nO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0aWYgKGlzVmFsaWRLZXkoT1BUSU9OUy5mYWxsYmFja1RhYmxlLCBsYW5ndWFnZUNvZGUpKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gWy4uLm5ldyBTZXQoW2xhbmd1YWdlQ29kZSwgT1BUSU9OUy5kZWZhdWx0TGFuZ3VhZ2VDb2RlXSldO1xufTtcblxuZXhwb3J0IHtnZW5lcmF0ZURlZmF1bHRGYWxsYmFja0xpc3R9O1xuIiwgImltcG9ydCAqIGFzIE9QVElPTlMgZnJvbSAnLi4vb3B0aW9ucy5qc29uJztcbmltcG9ydCB7V0dfQ09OVEVOVF9MQU5HVUFHRSwgV0dfVVNFUl9MQU5HVUFHRSwgV0dfVVNFUl9WQVJJQU5UfSBmcm9tICcuL2NvbnN0YW50JztcbmltcG9ydCB0eXBlIHtJMThuQ2FuZGlkYXRlc30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2dlbmVyYXRlRGVmYXVsdEZhbGxiYWNrTGlzdH0gZnJvbSAnLi91dGlsL2dlbmVyYXRlRGVmYXVsdEZhbGxiYWNrTGlzdCc7XG5pbXBvcnQge2lzVmFsaWRLZXl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmNvbnN0IGluaXRJMThuTWV0aG9kcyA9ICgpOiB0eXBlb2YgaTE4bk1ldGhvZHMgPT4ge1xuXHRjb25zdCBkZWZhdWx0RmFsbGJhY2tMaXN0OiBzdHJpbmdbXSA9IGdlbmVyYXRlRGVmYXVsdEZhbGxiYWNrTGlzdCgpO1xuXG5cdGNvbnN0IGVsZWN0ID0gKGNhbmRpZGF0ZXM6IEkxOG5DYW5kaWRhdGVzLCBsb2NhbGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0bGV0IGZhbGxiYWNrTGlzdDogc3RyaW5nW10gPSBkZWZhdWx0RmFsbGJhY2tMaXN0O1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIFtsb2NhbGUsIC4uLmZhbGxiYWNrTGlzdF0pIHtcblx0XHRcdGlmIChpc1ZhbGlkS2V5KE9QVElPTlMuZmFsbGJhY2tUYWJsZSwga2V5KSkge1xuXHRcdFx0XHRmYWxsYmFja0xpc3QgPSBPUFRJT05TLmZhbGxiYWNrVGFibGVba2V5XTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgbmV3IFNldChbbG9jYWxlLCAuLi5mYWxsYmFja0xpc3QsIC4uLmRlZmF1bHRGYWxsYmFja0xpc3RdKSkge1xuXHRcdFx0aWYgKGlzVmFsaWRLZXkoY2FuZGlkYXRlcywga2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gY2FuZGlkYXRlc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fTtcblxuXHRjb25zdCBpMThuTWV0aG9kczogdHlwZW9mIGltcG9ydCgnZXh0LmdhZGdldC5pMThuJykgPSB7XG5cdFx0Y29udGVudDogKGNhbmRpZGF0ZXMpID0+IHtcblx0XHRcdHJldHVybiBlbGVjdChjYW5kaWRhdGVzLCBXR19DT05URU5UX0xBTkdVQUdFKTtcblx0XHR9LFxuXHRcdGxvY2FsaXplOiAoY2FuZGlkYXRlcykgPT4ge1xuXHRcdFx0cmV0dXJuIGVsZWN0KGNhbmRpZGF0ZXMsIFdHX1VTRVJfTEFOR1VBR0UpO1xuXHRcdH0sXG5cdFx0dmFyeTogKGNhbmRpZGF0ZXMpID0+IHtcblx0XHRcdHJldHVybiBlbGVjdChjYW5kaWRhdGVzLCBXR19VU0VSX1ZBUklBTlQgPz8gV0dfQ09OVEVOVF9MQU5HVUFHRSk7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gaTE4bk1ldGhvZHM7XG59O1xuXG5leHBvcnQge2luaXRJMThuTWV0aG9kc307XG4iLCAiY29uc3QgaW5pdFNoaW1zID0gKGkxOG5NZXRob2RzOiB0eXBlb2YgaW1wb3J0KCdleHQuZ2FkZ2V0LmkxOG4nKSk6IHZvaWQgPT4ge1xuXHRjb25zdCB3Z1VYUyA9IChcblx0XHRoYW5zOiB1bmtub3duLFxuXHRcdGhhbnQ6IHVua25vd24sXG5cdFx0Y246IHVua25vd24sXG5cdFx0dHc6IHVua25vd24sXG5cdFx0aGs6IHVua25vd24sXG5cdFx0c2c6IHVua25vd24sXG5cdFx0emg6IHVua25vd24sXG5cdFx0bW86IHVua25vd24sXG5cdFx0bXk6IHVua25vd24sXG5cdFx0ZW46IHVua25vd24sXG5cdFx0bWV0aG9kOiAnY29udGVudCcgfCAnbG9jYWxpemUnIHwgJ3ZhcnknXG5cdCk6IHN0cmluZyA9PiB7XG5cdFx0emggPSBTdHJpbmcoemggPz8gaGFucyA/PyBoYW50ID8/IGNuID8/IHR3ID8/IGhrID8/IHNnID8/IG1vID8/IG15ID8/IGVuKTtcblx0XHRoYW5zID0gU3RyaW5nKGhhbnMgPz8gY24gPz8gc2cgPz8gbXkgPz8gemgpO1xuXHRcdGhhbnQgPSBTdHJpbmcoaGFudCA/PyB0dyA/PyBoayA/PyBtbyA/PyB6aCk7XG5cdFx0Y24gPSBTdHJpbmcoY24gPz8gaGFucyk7XG5cdFx0c2cgPSBTdHJpbmcoc2cgPz8gaGFucyk7XG5cdFx0dHcgPSBTdHJpbmcodHcgPz8gaGFudCk7XG5cdFx0aGsgPSBTdHJpbmcoaGsgPz8gaGFudCk7XG5cdFx0bW8gPSBTdHJpbmcobW8gPz8gaGFudCk7XG5cdFx0bXkgPSBTdHJpbmcobXkgPz8gaGFudCk7XG5cdFx0ZW4gPSBTdHJpbmcoZW4gPz8gemgpO1xuXG5cdFx0cmV0dXJuIGkxOG5NZXRob2RzW21ldGhvZF0oe1xuXHRcdFx0ZW46IGVuIGFzIHN0cmluZyxcblx0XHRcdHpoOiB6aCBhcyBzdHJpbmcsXG5cdFx0XHQnemgtaGFucyc6IGhhbnMgYXMgc3RyaW5nLFxuXHRcdFx0J3poLWhhbnQnOiBoYW50IGFzIHN0cmluZyxcblx0XHRcdCd6aC1jbic6IGNuIGFzIHN0cmluZyxcblx0XHRcdCd6aC10dyc6IHR3IGFzIHN0cmluZyxcblx0XHRcdCd6aC1oayc6IGhrIGFzIHN0cmluZyxcblx0XHRcdCd6aC1zZyc6IHNnIGFzIHN0cmluZyxcblx0XHRcdCd6aC1tbyc6IG1vIGFzIHN0cmluZyxcblx0XHRcdCd6aC1teSc6IG15IGFzIHN0cmluZyxcblx0XHR9KTtcblx0fTtcblxuXHR3aW5kb3cud2dVQ1MgPSAoaGFucywgaGFudCwgY24sIHR3LCBoaywgc2csIHpoLCBtbywgbXksIGVuKSA9PiB7XG5cdFx0cmV0dXJuIHdnVVhTKGhhbnMsIGhhbnQsIGNuLCB0dywgaGssIHNnLCB6aCwgbW8sIG15LCBlbiwgJ2NvbnRlbnQnKTtcblx0fTtcblx0d2luZG93LndnVUxTID0gKGhhbnMsIGhhbnQsIGNuLCB0dywgaGssIHNnLCB6aCwgbW8sIG15LCBlbikgPT4ge1xuXHRcdHJldHVybiB3Z1VYUyhoYW5zLCBoYW50LCBjbiwgdHcsIGhrLCBzZywgemgsIG1vLCBteSwgZW4sICdsb2NhbGl6ZScpO1xuXHR9O1xuXHR3aW5kb3cud2dVVlMgPSAoaGFucywgaGFudCwgY24sIHR3LCBoaywgc2csIHpoLCBtbywgbXksIGVuKSA9PiB7XG5cdFx0cmV0dXJuIHdnVVhTKGhhbnMsIGhhbnQsIGNuLCB0dywgaGssIHNnLCB6aCwgbW8sIG15LCBlbiwgJ3ZhcnknKTtcblx0fTtcbn07XG5cbmV4cG9ydCB7aW5pdFNoaW1zfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsb0ZBQUFBLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIs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QyxNQUFNQyxNQUFNQyxJQUFJQyxJQUFJQyxJQUFJQyxJQUFJMUQsSUFBSTJELElBQUlDLElBQUlDLE9BQU87QUFDOUQsV0FBT1QsTUFBTUMsTUFBTUMsTUFBTUMsSUFBSUMsSUFBSUMsSUFBSUMsSUFBSTFELElBQUkyRCxJQUFJQyxJQUFJQyxJQUFJLFNBQVM7RUFDbkU7QUFDQTJCLFNBQU9FLFFBQVEsQ0FBQ3JDLE1BQU1DLE1BQU1DLElBQUlDLElBQUlDLElBQUlDLElBQUkxRCxJQUFJMkQsSUFBSUMsSUFBSUMsT0FBTztBQUM5RCxXQUFPVCxNQUFNQyxNQUFNQyxNQUFNQyxJQUFJQyxJQUFJQyxJQUFJQyxJQUFJMUQsSUFBSTJELElBQUlDLElBQUlDLElBQUksVUFBVTtFQUNwRTtBQUNBMkIsU0FBT0csUUFBUSxDQUFDdEMsTUFBTUMsTUFBTUMsSUFBSUMsSUFBSUMsSUFBSUMsSUFBSTFELElBQUkyRCxJQUFJQyxJQUFJQyxPQUFPO0FBQzlELFdBQU9ULE1BQU1DLE1BQU1DLE1BQU1DLElBQUlDLElBQUlDLElBQUlDLElBQUkxRCxJQUFJMkQsSUFBSUMsSUFBSUMsSUFBSSxNQUFNO0VBQ2hFO0FBQ0Q7O0FON0NBLElBQU0rQixjQUFrRDVELGdCQUFnQjtBQUN4RW1CLFVBQVV5QyxXQUFXO0FBRWQsSUFBTTtFQUFDcEc7RUFBU0M7RUFBVUM7QUFBSSxJQUFJa0c7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm5hdmlnYXRvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2V0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNldCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2V0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImkxOG5fZXhwb3J0cyIsICJfX2V4cG9ydCIsICJjb250ZW50IiwgImxvY2FsaXplIiwgInZhcnkiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiX190b0NvbW1vbkpTIiwgImRlZmF1bHRMYW5ndWFnZUNvZGUiLCAiZmFsbGJhY2tUYWJsZSIsICJ6aCIsICJXR19DT05URU5UX0xBTkdVQUdFIiwgIm13IiwgImNvbmZpZyIsICJnZXQiLCAiV0dfVVNFUl9MQU5HVUFHRSIsICJXR19VU0VSX1ZBUklBTlQiLCAiZ2VuZXJhdGVMYW5ndWFnZUNvZGVTcGxpdEFycmF5IiwgIm9yaWdpbkxhbmd1YWdlQ29kZSIsICJsYW5ndWFnZUNvZGVTcGxpdEFycmF5IiwgInNwbGl0IiwgIm1hcCIsICJ2YWx1ZSIsICJ0b0xvd2VyQ2FzZSIsICJpbXBvcnRfZXh0X2dhZGdldCIsICJyZXF1aXJlIiwgImdlbmVyYXRlRGVmYXVsdEZhbGxiYWNrTGlzdCIsICJkb2N1bWVudExhbmd1YWdlU3BsaXRBcnJheSIsICJkb2N1bWVudCIsICJkb2N1bWVudEVsZW1lbnQiLCAibGFuZyIsICJuYXZpZ2F0b3JMYW5ndWFnZVNwbGl0QXJyYXkiLCAibmF2aWdhdG9yIiwgImxhbmd1YWdlIiwgImxhbmd1YWdlQ29kZSIsICJfaSIsICJfYXJyIiwgImxlbmd0aCIsICJjb25jYXQiLCAiaXNWYWxpZEtleSIsICJTZXQiLCAiaW1wb3J0X2V4dF9nYWRnZXQyIiwgImluaXRJMThuTWV0aG9kcyIsICJkZWZhdWx0RmFsbGJhY2tMaXN0IiwgImVsZWN0IiwgImNhbmRpZGF0ZXMiLCAibG9jYWxlIiwgImZhbGxiYWNrTGlzdCIsICJfaTIiLCAiX2FycjIiLCAia2V5IiwgIl9pdGVyYXRvcjIiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAyIiwgInMiLCAibiIsICJkb25lIiwgImVyciIsICJlIiwgImYiLCAiaTE4bk1ldGhvZHMyIiwgImluaXRTaGltcyIsICJ3Z1VYUyIsICJoYW5zIiwgImhhbnQiLCAiY24iLCAidHciLCAiaGsiLCAic2ciLCAibW8iLCAibXkiLCAiZW4iLCAibWV0aG9kIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAiX3poIiwgIl9yZWY5IiwgIl9yZWYxMCIsICJfcmVmMTEiLCAiX2hhbnMiLCAiX3JlZjEyIiwgIl9yZWYxMyIsICJfcmVmMTQiLCAiX2hhbnQiLCAiX2NuIiwgIl9zZyIsICJfdHciLCAiX2hrIiwgIl9tbyIsICJfbXkiLCAiX2VuIiwgIlN0cmluZyIsICJ3aW5kb3ciLCAid2dVQ1MiLCAid2dVTFMiLCAid2dVVlMiLCAiaTE4bk1ldGhvZHMiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwgInNyYy9pMThuL2kxOG4udHMiLCAic3JjL2kxOG4vb3B0aW9ucy5qc29uIiwgInNyYy9pMThuL21vZHVsZXMvY29uc3RhbnQudHMiLCAic3JjL2kxOG4vbW9kdWxlcy91dGlsL2dlbmVyYXRlTGFuZ3VhZ2VDb2RlU3BsaXRBcnJheS50cyIsICJzcmMvaTE4bi9tb2R1bGVzL3V0aWwvZ2VuZXJhdGVEZWZhdWx0RmFsbGJhY2tMaXN0LnRzIiwgInNyYy9pMThuL21vZHVsZXMvaW5pdEkxOG5NZXRob2RzLnRzIiwgInNyYy9pMThuL21vZHVsZXMvaW5pdFNoaW1zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxuICBTZXQ6IFNldCxcbiAgYWRkOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuYWRkKSxcbiAgaGFzOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGVbJ2RlbGV0ZSddKSxcbiAgcHJvdG86IFNldFByb3RvdHlwZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xuXG4vLyBQZXJmb3JtID8gUmVxdWlyZUludGVybmFsU2xvdChNLCBbW1NldERhdGFdXSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGhhcyhpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWNvcmQsIGZuLCBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCkge1xuICB2YXIgaXRlcmF0b3IgPSBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCA/IHJlY29yZCA6IHJlY29yZC5pdGVyYXRvcjtcbiAgdmFyIG5leHQgPSByZWNvcmQubmV4dDtcbiAgdmFyIHN0ZXAsIHJlc3VsdDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gZm4oc3RlcC52YWx1ZSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgU2V0UHJvdG90eXBlID0gU2V0SGVscGVycy5wcm90bztcbnZhciBmb3JFYWNoID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmZvckVhY2gpO1xudmFyIGtleXMgPSB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUua2V5cyk7XG52YXIgbmV4dCA9IGtleXMobmV3IFNldCgpKS5uZXh0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQsIGZuLCBpbnRlcnJ1cHRpYmxlKSB7XG4gIHJldHVybiBpbnRlcnJ1cHRpYmxlID8gaXRlcmF0ZVNpbXBsZSh7IGl0ZXJhdG9yOiBrZXlzKHNldCksIG5leHQ6IG5leHQgfSwgZm4pIDogZm9yRWFjaChzZXQsIGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGl0ZXJhdGUoc2V0LCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihTZXRIZWxwZXJzLnByb3RvLCAnc2l6ZScsICdnZXQnKSB8fCBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbnZhciBJTlZBTElEX1NJWkUgPSAnSW52YWxpZCBzaXplJztcbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBtYXggPSBNYXRoLm1heDtcblxudmFyIFNldFJlY29yZCA9IGZ1bmN0aW9uIChzZXQsIGludFNpemUpIHtcbiAgdGhpcy5zZXQgPSBzZXQ7XG4gIHRoaXMuc2l6ZSA9IG1heChpbnRTaXplLCAwKTtcbiAgdGhpcy5oYXMgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gIHRoaXMua2V5cyA9IGFDYWxsYWJsZShzZXQua2V5cyk7XG59O1xuXG5TZXRSZWNvcmQucHJvdG90eXBlID0ge1xuICBnZXRJdGVyYXRvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJdGVyYXRvckRpcmVjdChhbk9iamVjdChjYWxsKHRoaXMua2V5cywgdGhpcy5zZXQpKSk7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gY2FsbCh0aGlzLmhhcywgdGhpcy5zZXQsIGl0KTtcbiAgfVxufTtcblxuLy8gYEdldFNldFJlY29yZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc2V0LW1ldGhvZHMvI3NlYy1nZXRzZXRyZWNvcmRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICBhbk9iamVjdChvYmopO1xuICB2YXIgbnVtU2l6ZSA9ICtvYmouc2l6ZTtcbiAgLy8gTk9URTogSWYgc2l6ZSBpcyB1bmRlZmluZWQsIHRoZW4gbnVtU2l6ZSB3aWxsIGJlIE5hTlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtU2l6ZSAhPT0gbnVtU2l6ZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgdmFyIGludFNpemUgPSB0b0ludGVnZXJPckluZmluaXR5KG51bVNpemUpO1xuICBpZiAoaW50U2l6ZSA8IDApIHRocm93IG5ldyAkUmFuZ2VFcnJvcihJTlZBTElEX1NJWkUpO1xuICByZXR1cm4gbmV3IFNldFJlY29yZChvYmosIGludFNpemUpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgZWxzZSBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxudmFyIGNyZWF0ZVNldExpa2UgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIHNpemU6IHNpemUsXG4gICAgaGFzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIFNldCA9IGdldEJ1aWx0SW4oJ1NldCcpO1xuICB0cnkge1xuICAgIG5ldyBTZXQoKVtuYW1lXShjcmVhdGVTZXRMaWtlKDApKTtcbiAgICB0cnkge1xuICAgICAgLy8gbGF0ZSBzcGVjIGNoYW5nZSwgZWFybHkgV2ViS2l0IH4gU2FmYXJpIDE3LjAgYmV0YSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwYXNzIGl0XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kcy9wdWxsLzg4XG4gICAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgtMSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yMikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2RpZmZlcmVuY2UnKSB9LCB7XG4gIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2Vcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEaXNqb2ludEZyb20ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSByZXR1cm4gaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzRGlzam9pbnRGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc0Rpc2pvaW50RnJvbScpIH0sIHtcbiAgaXNEaXNqb2ludEZyb206IGlzRGlzam9pbnRGcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3Vic2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhdGUoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdXBlcnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPCBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1cGVyc2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdXBlcnNldE9mJykgfSwge1xuICBpc1N1cGVyc2V0T2Y6IGlzU3VwZXJzZXRPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICAgIGVsc2UgYWRkKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzeW1tZXRyaWNEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdzeW1tZXRyaWNEaWZmZXJlbmNlJykgfSwge1xuICBzeW1tZXRyaWNEaWZmZXJlbmNlOiBzeW1tZXRyaWNEaWZmZXJlbmNlXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGFkZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmFkZDtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuaW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC11bmlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgndW5pb24nKSB9LCB7XG4gIHVuaW9uOiB1bmlvblxufSk7XG4iLCAiaW1wb3J0IHtpbml0STE4bk1ldGhvZHN9IGZyb20gJy4vbW9kdWxlcy9pbml0STE4bk1ldGhvZHMnO1xuaW1wb3J0IHtpbml0U2hpbXN9IGZyb20gJy4vbW9kdWxlcy9pbml0U2hpbXMnO1xuXG5jb25zdCBpMThuTWV0aG9kczogUmV0dXJuVHlwZTx0eXBlb2YgaW5pdEkxOG5NZXRob2RzPiA9IGluaXRJMThuTWV0aG9kcygpO1xuaW5pdFNoaW1zKGkxOG5NZXRob2RzKTtcblxuZXhwb3J0IGNvbnN0IHtjb250ZW50LCBsb2NhbGl6ZSwgdmFyeX0gPSBpMThuTWV0aG9kcztcblxuLyohXG4vLyDku5PlupPlhoXnlKjms5Vcblx0Ly8g5a6a5LmJ5aSa5p2h5raI5oGvXG5cdC8vIOaUr+aMgeWkmuivreiogO+8jOWPr+mAieWAvOWumuS5ieWcqG1vZHVsZXMvdHlwZXMuZC50cyNMLTHvvIzlj6/nm7TmjqXmt7vliqDlhbbku5blgLzvvIhSRkMgNTY0Nu+8iVxuXHRpbXBvcnQge2NvbnRlbnQsIGxvY2FsaXplLCB2YXJ5fSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXHRjb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdFx0Ly8gaTE4bueahOS4ieS4quaWueazleS8muWMuemFjeW9k+WJjeivreiogOWSjOWug+aJgOaOpeaUtuWvueixoeS4reeahOmUru+8jOWvueS6jmxvY2FsaXpl5p2l6K+077yM5YGH6K6+5bey5a6a5LmJemjjgIFlbuWSjGph77yM5YiZXG5cdFx0Ly8gICDlvZPpobXpnaLor63oqIDvvIh3Z1VzZXJMYW5ndWFnZSA/PyB3Z0NvbnRlbnRMYW5ndWFnZe+8ieS4uuS4reaWhy/oi7Hor60v5pel6K+t5pe277yM6L+U5Zue6aG16Z2i6K+t6KiA5omA5a+55bqU55qE5YC8XG5cdFx0Ly8gICDlvZPpobXpnaLor63oqIDkuLrms5Xor63vvIzmtY/op4jlmajor63oqIDkuLrkuK3mlocv6Iux6K+tL+aXpeivreaXtu+8jOi/lOWbnua1j+iniOWZqOivreiogOaJgOWvueW6lOeahOWAvFxuXHRcdC8vICAg5b2T6aG16Z2i6K+t6KiA5Li65rOV6K+t77yM5LiU5LiN5a2Y5Zyo5rWP6KeI5Zmo6K+t6KiA5omA5a+55bqU55qE6ZSu77yM6L+U5ZueTC0yNeWumuS5ieeahOmUruaJgOWvueW6lOeahOWAvOOAguiLpeatpOmUruWQjOagt+ayoeiiq+WumuS5ie+8jOWImei/lOWbnuepuuWtl+espuS4slxuXHRcdHJldHVybiB7XG5cdFx0XHRDYW5jZWw6IGNvbnRlbnQoe1xuXHRcdFx0XHRlbjogJ0NhbmNlbCcsXG5cdFx0XHRcdGphOiAn44Kt44Oj44Oz44K744OrJyxcblx0XHRcdFx0emg6ICflj5bmtognLFxuXHRcdFx0fSksXG5cdFx0XHRRaXVXZW46IGxvY2FsaXplKHtcblx0XHRcdFx0ZW46ICdRaXVXZW4nLFxuXHRcdFx0XHRqYTogJ+OBoeOCheOBhuOBhuOCkycsXG5cdFx0XHRcdCd6aC1jbic6ICfmsYLpl7snLFxuXHRcdFx0XHQnemgtaGsnOiAn5rGC6IGeJyxcblx0XHRcdH0pLFxuXHRcdFx0TG9uZ1RleHQ6IHZhcnkoe1xuXHRcdFx0XHRlbjogJ1RoaXMgaXMgYSB2ZXJ5IGxvbmcgdGV4dCcsXG5cdFx0XHRcdGphOiAn44GT44KM44Gv6Z2e5bi444Gr6ZW344GE44OG44Kt44K544OI44Gn44GZJyxcblx0XHRcdFx0J3poLWhhbnMnOiAn6L+Z5piv5LiA5q616Z2e5bi46ZW/55qE5paH5pysJyxcblx0XHRcdFx0J3poLWhhbnQnOiAn6YCZ5piv5LiA5q616Z2e5bi46ZW355qE5paH5a2XJyxcblx0XHRcdH0pLFxuXHRcdH07XG5cdH07XG5cdGNvbnN0IGkxOG5NZXNzYWdlcyA9IGdldEkxOG5NZXNzYWdlcygpO1xuXHRjb25zdCBnZXRNZXNzYWdlOiBHZXRNZXNzYWdlczx0eXBlb2YgaTE4bk1lc3NhZ2VzPiA9IChrZXkpID0+IHtcblx0XHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xuXHR9O1xuXHQvLyDosIPnlKhcblx0Z2V0TWVzc2FnZSgnQ2FuY2VsJyk7IC8vIGVuOiBDYW5jZWwsIGphOiDjgq3jg6Pjg7Pjgrvjg6ssIHpoOiDlj5bmtogsIHpoLWhhbnM6IOWPlua2iCwgemgtaGFudDog5Y+W5raILCB6aC1jbjog5Y+W5raILCB6aC1oazog5Y+W5raILCB6aC10dzog5Y+W5raIXG5cdGdldE1lc3NhZ2UoJ1FpdVdlbicpOyAvLyBlbjogUWl1V2VuLCBqYTog44Gh44KF44GG44GG44KTLCB6aDog5rGC6Ze7LCB6aC1oYW5zOiDmsYLpl7ssIHpoLWhhbnQ6IOaxguiBniwgemgtY246IOaxgumXuywgemgtaGs6IOaxguiBniwgemgtdHc6IOaxguiBnlxuXHRnZXRNZXNzYWdlKCdMb25nVGV4dCcpO1xuXHRcdC8vIGVuOiBUaGlzIGlzIGEgdmVyeSBsb25nIHRleHRcblx0XHQvLyBqYTog44GT44KM44Gv6Z2e5bi444Gr6ZW344GE44OG44Kt44K544OI44Gn44GZXG5cdFx0Ly8gemg6IOi/meaYr+S4gOautemdnuW4uOmVv+eahOaWh+acrFxuXHRcdC8vIHpoLWhhbnM6IOi/meaYr+S4gOautemdnuW4uOmVv+eahOaWh+acrFxuXHRcdC8vIHpoLWhhbnQ6IOmAmeaYr+S4gOautemdnuW4uOmVt+eahOaWh+Wtl1xuXHRcdC8vIHpoLWNuOiDov5nmmK/kuIDmrrXpnZ7luLjplb/nmoTmlofmnKxcblx0XHQvLyB6aC1oazog6YCZ5piv5LiA5q616Z2e5bi46ZW355qE5paH5a2XXG5cdFx0Ly8gemgtdHc6IOmAmeaYr+S4gOautemdnuW4uOmVt+eahOaWh+Wtl1xuXG5cdC8vIOebtOaOpei9rOaNouWNleadoea2iOaBr++8iOS4jeaOqOiNkO+8jOS7heS4uuWFvOWuueaAp+S/neeVme+8iVxuXHQvLyDku4XmlK/mjIHkvKDpgJLkuK3mloflkozoi7Hor63jgILlnKjpnZ7kuK3mlofnjq/looPkuJTmnKrkvKDpgJLoi7Hor63mlofmnKzml7bvvIzmnIDnu4jov5Tlm556aOeahOWAvFxuXHR3Z1VDUygn5rGC6Ze7JywgJ+axguiBnicpOyAvLyBlbjog5rGC6Ze7LCBqYTog5rGC6Ze7LCB6aDog5rGC6Ze7LCB6aC1oYW5zOiDmsYLpl7ssIHpoLWhhbnQ6IOaxguiBniwgemgtY246IOaxgumXuywgemgtaGs6IOaxguiBniwgemgtdHc6IOaxguiBnlxuXHR3Z1VMUygn5rGC6Ze7JywgJ+axguiBnicpOyAvLyBlbjog5rGC6Ze7LCBqYTog5rGC6Ze7LCB6aDog5rGC6Ze7LCB6aC1oYW5zOiDmsYLpl7ssIHpoLWhhbnQ6IOaxguiBniwgemgtY246IOaxgumXuywgemgtaGs6IOaxguiBniwgemgtdHc6IOaxguiBnlxuXHR3Z1VWUygn5rGC6Ze7JywgJ+axguiBnicpOyAvLyBlbjog5rGC6Ze7LCBqYTog5rGC6Ze7LCB6aDog5rGC6Ze7LCB6aC1oYW5zOiDmsYLpl7ssIHpoLWhhbnQ6IOaxguiBniwgemgtY246IOaxgumXuywgemgtaGs6IOaxguiBniwgemgtdHc6IOaxguiBnlxuXG5cdC8vIOmdnk1lZGlhV2lraeWRveWQjeepuumXtOeahOiEmuacrOWPr+S7pemAmui/h213LmxvYWRlci51c2luZ+WKoOi9vWV4dC5nYWRnZXQuaTE4buaooeWdl1xuXHRtdy5sb2FkZXIudXNpbmcoJ2V4dC5nYWRnZXQuaTE4bicpLnRoZW4oKHJlcXVpcmUpID0+IHtcblx0XHRjb25zdCB7Y29udGVudCwgbG9jYWxpemUsIHZhcnl9ID0gcmVxdWlyZSgnZXh0LmdhZGdldC5pMThuJyk7XG5cdH0pO1xuICovXG4iLCAie1xuXHRcImRlZmF1bHRMYW5ndWFnZUNvZGVcIjogXCJlblwiLFxuXHRcImZhbGxiYWNrVGFibGVcIjoge1xuXHRcdFwiemhcIjogW1wiemhcIiwgXCJ6aC1oYW5zXCIsIFwiemgtaGFudFwiLCBcInpoLWNuXCIsIFwiemgtdHdcIiwgXCJ6aC1oa1wiLCBcInpoLXNnXCIsIFwiemgtbW9cIiwgXCJ6aC1teVwiXSxcblx0XHRcInpoLWhhbnNcIjogW1wiemgtaGFuc1wiLCBcInpoLWNuXCIsIFwiemgtc2dcIiwgXCJ6aC1teVwiLCBcInpoXCIsIFwiemgtaGFudFwiLCBcInpoLXR3XCIsIFwiemgtaGtcIiwgXCJ6aC1tb1wiXSxcblx0XHRcInpoLWhhbnRcIjogW1wiemgtaGFudFwiLCBcInpoLXR3XCIsIFwiemgtaGtcIiwgXCJ6aC1tb1wiLCBcInpoXCIsIFwiemgtaGFuc1wiLCBcInpoLWNuXCIsIFwiemgtc2dcIiwgXCJ6aC1teVwiXSxcblx0XHRcInpoLWNuXCI6IFtcInpoLWNuXCIsIFwiemgtaGFuc1wiLCBcInpoLXNnXCIsIFwiemgtbXlcIiwgXCJ6aFwiLCBcInpoLWhhbnRcIiwgXCJ6aC10d1wiLCBcInpoLWhrXCIsIFwiemgtbW9cIl0sXG5cdFx0XCJ6aC1zZ1wiOiBbXCJ6aC1zZ1wiLCBcInpoLWhhbnNcIiwgXCJ6aC1jblwiLCBcInpoLW15XCIsIFwiemhcIiwgXCJ6aC1oYW50XCIsIFwiemgtdHdcIiwgXCJ6aC1oa1wiLCBcInpoLW1vXCJdLFxuXHRcdFwiemgtbXlcIjogW1wiemgtbXlcIiwgXCJ6aC1oYW5zXCIsIFwiemgtY25cIiwgXCJ6aC1zZ1wiLCBcInpoXCIsIFwiemgtaGFudFwiLCBcInpoLXR3XCIsIFwiemgtaGtcIiwgXCJ6aC1tb1wiXSxcblx0XHRcInpoLXR3XCI6IFtcInpoLXR3XCIsIFwiemgtaGFudFwiLCBcInpoLWhrXCIsIFwiemgtbW9cIiwgXCJ6aFwiLCBcInpoLWhhbnNcIiwgXCJ6aC1jblwiLCBcInpoLXNnXCIsIFwiemgtbXlcIl0sXG5cdFx0XCJ6aC1oa1wiOiBbXCJ6aC1oa1wiLCBcInpoLWhhbnRcIiwgXCJ6aC1tb1wiLCBcInpoLXR3XCIsIFwiemhcIiwgXCJ6aC1oYW5zXCIsIFwiemgtY25cIiwgXCJ6aC1zZ1wiLCBcInpoLW15XCJdLFxuXHRcdFwiemgtbW9cIjogW1wiemgtbW9cIiwgXCJ6aC1oYW50XCIsIFwiemgtaGtcIiwgXCJ6aC10d1wiLCBcInpoXCIsIFwiemgtaGFuc1wiLCBcInpoLWNuXCIsIFwiemgtc2dcIiwgXCJ6aC1teVwiXVxuXHR9XG59XG4iLCAiY29uc3QgV0dfQ09OVEVOVF9MQU5HVUFHRTogc3RyaW5nID0gbXcuY29uZmlnLmdldCgnd2dDb250ZW50TGFuZ3VhZ2UnKTtcbmNvbnN0IFdHX1VTRVJfTEFOR1VBR0U6IHN0cmluZyA9IG13LmNvbmZpZy5nZXQoJ3dnVXNlckxhbmd1YWdlJyk7XG5jb25zdCBXR19VU0VSX1ZBUklBTlQ6IHN0cmluZyB8IG51bGwgPSBtdy5jb25maWcuZ2V0KCd3Z1VzZXJWYXJpYW50Jyk7XG5cbmV4cG9ydCB7V0dfQ09OVEVOVF9MQU5HVUFHRSwgV0dfVVNFUl9MQU5HVUFHRSwgV0dfVVNFUl9WQVJJQU5UfTtcbiIsICJjb25zdCBnZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXkgPSAob3JpZ2luTGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG5cdGNvbnN0IGxhbmd1YWdlQ29kZVNwbGl0QXJyYXk6IHN0cmluZ1tdID0gb3JpZ2luTGFuZ3VhZ2VDb2RlLnNwbGl0KCctJykubWFwKCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcblx0fSk7XG5cblx0cmV0dXJuIGxhbmd1YWdlQ29kZVNwbGl0QXJyYXk7XG59O1xuXG5leHBvcnQge2dlbmVyYXRlTGFuZ3VhZ2VDb2RlU3BsaXRBcnJheX07XG4iLCAiaW1wb3J0ICogYXMgT1BUSU9OUyBmcm9tICcuLi8uLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtnZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXl9IGZyb20gJy4vZ2VuZXJhdGVMYW5ndWFnZUNvZGVTcGxpdEFycmF5JztcbmltcG9ydCB7aXNWYWxpZEtleX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgZ2VuZXJhdGVEZWZhdWx0RmFsbGJhY2tMaXN0ID0gKCk6IHN0cmluZ1tdID0+IHtcblx0Y29uc3QgZG9jdW1lbnRMYW5ndWFnZVNwbGl0QXJyYXk6IHN0cmluZ1tdID0gZ2VuZXJhdGVMYW5ndWFnZUNvZGVTcGxpdEFycmF5KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5sYW5nKTtcblx0Y29uc3QgbmF2aWdhdG9yTGFuZ3VhZ2VTcGxpdEFycmF5OiBzdHJpbmdbXSA9IGdlbmVyYXRlTGFuZ3VhZ2VDb2RlU3BsaXRBcnJheShuYXZpZ2F0b3IubGFuZ3VhZ2UpO1xuXG5cdGxldCBsYW5ndWFnZUNvZGU6IHN0cmluZyA9IE9QVElPTlMuZGVmYXVsdExhbmd1YWdlQ29kZTtcblx0Zm9yIChjb25zdCBsYW5ndWFnZUNvZGVTcGxpdEFycmF5IG9mIFtkb2N1bWVudExhbmd1YWdlU3BsaXRBcnJheSwgbmF2aWdhdG9yTGFuZ3VhZ2VTcGxpdEFycmF5XSkge1xuXHRcdHN3aXRjaCAobGFuZ3VhZ2VDb2RlU3BsaXRBcnJheS5sZW5ndGgpIHtcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0bGFuZ3VhZ2VDb2RlID0gYCR7bGFuZ3VhZ2VDb2RlU3BsaXRBcnJheVswXX0tJHtsYW5ndWFnZUNvZGVTcGxpdEFycmF5WzFdfWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRsYW5ndWFnZUNvZGUgPSBgJHtsYW5ndWFnZUNvZGVTcGxpdEFycmF5WzBdfS0ke2xhbmd1YWdlQ29kZVNwbGl0QXJyYXlbMl19YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRsYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGVTcGxpdEFycmF5WzBdIGFzIHN0cmluZztcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmIChpc1ZhbGlkS2V5KE9QVElPTlMuZmFsbGJhY2tUYWJsZSwgbGFuZ3VhZ2VDb2RlKSkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFsuLi5uZXcgU2V0KFtsYW5ndWFnZUNvZGUsIE9QVElPTlMuZGVmYXVsdExhbmd1YWdlQ29kZV0pXTtcbn07XG5cbmV4cG9ydCB7Z2VuZXJhdGVEZWZhdWx0RmFsbGJhY2tMaXN0fTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge1dHX0NPTlRFTlRfTEFOR1VBR0UsIFdHX1VTRVJfTEFOR1VBR0UsIFdHX1VTRVJfVkFSSUFOVH0gZnJvbSAnLi9jb25zdGFudCc7XG5pbXBvcnQgdHlwZSB7STE4bkNhbmRpZGF0ZXN9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtnZW5lcmF0ZURlZmF1bHRGYWxsYmFja0xpc3R9IGZyb20gJy4vdXRpbC9nZW5lcmF0ZURlZmF1bHRGYWxsYmFja0xpc3QnO1xuaW1wb3J0IHtpc1ZhbGlkS2V5fSBmcm9tICdleHQuZ2FkZ2V0LlV0aWwnO1xuXG5jb25zdCBpbml0STE4bk1ldGhvZHMgPSAoKTogdHlwZW9mIGkxOG5NZXRob2RzID0+IHtcblx0Y29uc3QgZGVmYXVsdEZhbGxiYWNrTGlzdDogc3RyaW5nW10gPSBnZW5lcmF0ZURlZmF1bHRGYWxsYmFja0xpc3QoKTtcblxuXHRjb25zdCBlbGVjdCA9IChjYW5kaWRhdGVzOiBJMThuQ2FuZGlkYXRlcywgbG9jYWxlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdGxldCBmYWxsYmFja0xpc3Q6IHN0cmluZ1tdID0gZGVmYXVsdEZhbGxiYWNrTGlzdDtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBbbG9jYWxlLCAuLi5mYWxsYmFja0xpc3RdKSB7XG5cdFx0XHRpZiAoaXNWYWxpZEtleShPUFRJT05TLmZhbGxiYWNrVGFibGUsIGtleSkpIHtcblx0XHRcdFx0ZmFsbGJhY2tMaXN0ID0gT1BUSU9OUy5mYWxsYmFja1RhYmxlW2tleV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qga2V5IG9mIG5ldyBTZXQoW2xvY2FsZSwgLi4uZmFsbGJhY2tMaXN0LCAuLi5kZWZhdWx0RmFsbGJhY2tMaXN0XSkpIHtcblx0XHRcdGlmIChpc1ZhbGlkS2V5KGNhbmRpZGF0ZXMsIGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIGNhbmRpZGF0ZXNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cblx0Y29uc3QgaTE4bk1ldGhvZHM6IHR5cGVvZiBpbXBvcnQoJ2V4dC5nYWRnZXQuaTE4bicpID0ge1xuXHRcdGNvbnRlbnQ6IChjYW5kaWRhdGVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gZWxlY3QoY2FuZGlkYXRlcywgV0dfQ09OVEVOVF9MQU5HVUFHRSk7XG5cdFx0fSxcblx0XHRsb2NhbGl6ZTogKGNhbmRpZGF0ZXMpID0+IHtcblx0XHRcdHJldHVybiBlbGVjdChjYW5kaWRhdGVzLCBXR19VU0VSX0xBTkdVQUdFKTtcblx0XHR9LFxuXHRcdHZhcnk6IChjYW5kaWRhdGVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gZWxlY3QoY2FuZGlkYXRlcywgV0dfVVNFUl9WQVJJQU5UID8/IFdHX0NPTlRFTlRfTEFOR1VBR0UpO1xuXHRcdH0sXG5cdH07XG5cblx0cmV0dXJuIGkxOG5NZXRob2RzO1xufTtcblxuZXhwb3J0IHtpbml0STE4bk1ldGhvZHN9O1xuIiwgImNvbnN0IGluaXRTaGltcyA9IChpMThuTWV0aG9kczogdHlwZW9mIGltcG9ydCgnZXh0LmdhZGdldC5pMThuJykpOiB2b2lkID0+IHtcblx0Y29uc3Qgd2dVWFMgPSAoXG5cdFx0aGFuczogdW5rbm93bixcblx0XHRoYW50OiB1bmtub3duLFxuXHRcdGNuOiB1bmtub3duLFxuXHRcdHR3OiB1bmtub3duLFxuXHRcdGhrOiB1bmtub3duLFxuXHRcdHNnOiB1bmtub3duLFxuXHRcdHpoOiB1bmtub3duLFxuXHRcdG1vOiB1bmtub3duLFxuXHRcdG15OiB1bmtub3duLFxuXHRcdGVuOiB1bmtub3duLFxuXHRcdG1ldGhvZDogJ2NvbnRlbnQnIHwgJ2xvY2FsaXplJyB8ICd2YXJ5J1xuXHQpOiBzdHJpbmcgPT4ge1xuXHRcdHpoID0gU3RyaW5nKHpoID8/IGhhbnMgPz8gaGFudCA/PyBjbiA/PyB0dyA/PyBoayA/PyBzZyA/PyBtbyA/PyBteSA/PyBlbik7XG5cdFx0aGFucyA9IFN0cmluZyhoYW5zID8/IGNuID8/IHNnID8/IG15ID8/IHpoKTtcblx0XHRoYW50ID0gU3RyaW5nKGhhbnQgPz8gdHcgPz8gaGsgPz8gbW8gPz8gemgpO1xuXHRcdGNuID0gU3RyaW5nKGNuID8/IGhhbnMpO1xuXHRcdHNnID0gU3RyaW5nKHNnID8/IGhhbnMpO1xuXHRcdHR3ID0gU3RyaW5nKHR3ID8/IGhhbnQpO1xuXHRcdGhrID0gU3RyaW5nKGhrID8/IGhhbnQpO1xuXHRcdG1vID0gU3RyaW5nKG1vID8/IGhhbnQpO1xuXHRcdG15ID0gU3RyaW5nKG15ID8/IGhhbnQpO1xuXHRcdGVuID0gU3RyaW5nKGVuID8/IHpoKTtcblxuXHRcdHJldHVybiBpMThuTWV0aG9kc1ttZXRob2RdKHtcblx0XHRcdGVuOiBlbiBhcyBzdHJpbmcsXG5cdFx0XHR6aDogemggYXMgc3RyaW5nLFxuXHRcdFx0J3poLWhhbnMnOiBoYW5zIGFzIHN0cmluZyxcblx0XHRcdCd6aC1oYW50JzogaGFudCBhcyBzdHJpbmcsXG5cdFx0XHQnemgtY24nOiBjbiBhcyBzdHJpbmcsXG5cdFx0XHQnemgtdHcnOiB0dyBhcyBzdHJpbmcsXG5cdFx0XHQnemgtaGsnOiBoayBhcyBzdHJpbmcsXG5cdFx0XHQnemgtc2cnOiBzZyBhcyBzdHJpbmcsXG5cdFx0XHQnemgtbW8nOiBtbyBhcyBzdHJpbmcsXG5cdFx0XHQnemgtbXknOiBteSBhcyBzdHJpbmcsXG5cdFx0fSk7XG5cdH07XG5cblx0d2luZG93LndnVUNTID0gKGhhbnMsIGhhbnQsIGNuLCB0dywgaGssIHNnLCB6aCwgbW8sIG15LCBlbikgPT4ge1xuXHRcdHJldHVybiB3Z1VYUyhoYW5zLCBoYW50LCBjbiwgdHcsIGhrLCBzZywgemgsIG1vLCBteSwgZW4sICdjb250ZW50Jyk7XG5cdH07XG5cdHdpbmRvdy53Z1VMUyA9IChoYW5zLCBoYW50LCBjbiwgdHcsIGhrLCBzZywgemgsIG1vLCBteSwgZW4pID0+IHtcblx0XHRyZXR1cm4gd2dVWFMoaGFucywgaGFudCwgY24sIHR3LCBoaywgc2csIHpoLCBtbywgbXksIGVuLCAnbG9jYWxpemUnKTtcblx0fTtcblx0d2luZG93LndnVVZTID0gKGhhbnMsIGhhbnQsIGNuLCB0dywgaGssIHNnLCB6aCwgbW8sIG15LCBlbikgPT4ge1xuXHRcdHJldHVybiB3Z1VYUyhoYW5zLCBoYW50LCBjbiwgdHcsIGhrLCBzZywgemgsIG1vLCBteSwgZW4sICd2YXJ5Jyk7XG5cdH07XG59O1xuXG5leHBvcnQge2luaXRTaGltc307XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLG9GQUFBQSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPRCxZQUFRLFlBQVlBLFFBQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFFLGFBQU87QUFBQSxJQUFNLEVBQUcsS0FBSyxTQUFTLGFBQWEsRUFBRTtBQUFBO0FBQUE7OztBQ2Y5RDtBQUFBLDhFQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUk7QUFDRixlQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSxvRkFBQUMsVUFBQUMsU0FB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cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibmF2aWdhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiU2V0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlNldCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaTE4bl9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImNvbnRlbnQiLCAibG9jYWxpemUiLCAidmFyeSIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJfX3RvQ29tbW9uSlMiLCAiZGVmYXVsdExhbmd1YWdlQ29kZSIsICJmYWxsYmFja1RhYmxlIiwgInpoIiwgIldHX0NPTlRFTlRfTEFOR1VBR0UiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJXR19VU0VSX0xBTkdVQUdFIiwgIldHX1VTRVJfVkFSSUFOVCIsICJnZW5lcmF0ZUxhbmd1YWdlQ29kZVNwbGl0QXJyYXkiLCAib3JpZ2luTGFuZ3VhZ2VDb2RlIiwgImxhbmd1YWdlQ29kZVNwbGl0QXJyYXkiLCAic3BsaXQiLCAibWFwIiwgInZhbHVlIiwgInRvTG93ZXJDYXNlIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgInJlcXVpcmUiLCAiZ2VuZXJhdGVEZWZhdWx0RmFsbGJhY2tMaXN0IiwgImRvY3VtZW50TGFuZ3VhZ2VTcGxpdEFycmF5IiwgImRvY3VtZW50IiwgImRvY3VtZW50RWxlbWVudCIsICJsYW5nIiwgIm5hdmlnYXRvckxhbmd1YWdlU3BsaXRBcnJheSIsICJuYXZpZ2F0b3IiLCAibGFuZ3VhZ2UiLCAibGFuZ3VhZ2VDb2RlIiwgIl9pIiwgIl9hcnIiLCAibGVuZ3RoIiwgImNvbmNhdCIsICJpc1ZhbGlkS2V5IiwgIlNldCIsICJpbXBvcnRfZXh0X2dhZGdldDIiLCAiaW5pdEkxOG5NZXRob2RzIiwgImRlZmF1bHRGYWxsYmFja0xpc3QiLCAiZWxlY3QiLCAiY2FuZGlkYXRlcyIsICJsb2NhbGUiLCAiZmFsbGJhY2tMaXN0IiwgIl9pMiIsICJfYXJyMiIsICJrZXkiLCAiX2l0ZXJhdG9yMiIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfc3RlcDIiLCAicyIsICJuIiwgImRvbmUiLCAiZXJyIiwgImUiLCAiZiIsICJpMThuTWV0aG9kczIiLCAiaW5pdFNoaW1zIiwgIndnVVhTIiwgImhhbnMiLCAiaGFudCIsICJjbiIsICJ0dyIsICJoayIsICJzZyIsICJtbyIsICJteSIsICJlbiIsICJtZXRob2QiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJfemgiLCAiX3JlZjkiLCAiX3JlZjEwIiwgIl9yZWYxMSIsICJfaGFucyIsICJfcmVmMTIiLCAiX3JlZjEzIiwgIl9yZWYxNCIsICJfaGFudCIsICJfY24iLCAiX3NnIiwgIl90dyIsICJfaGsiLCAiX21vIiwgIl9teSIsICJfZW4iLCAiU3RyaW5nIiwgIndpbmRvdyIsICJ3Z1VDUyIsICJ3Z1VMUyIsICJ3Z1VWUyIsICJpMThuTWV0aG9kcyJdCn0K diff --git a/dist/morebits/morebits.js b/dist/morebits/morebits.js index 99396885..390ad882 100644 --- a/dist/morebits/morebits.js +++ b/dist/morebits/morebits.js @@ -459,6 +459,7 @@ var import_ext_gadget = require("ext.gadget.Util"); Morebits.checkboxShiftClickSupport(Morebits.quickForm.getElements(node, data.name)); } break; + // input is actually a text-type, so number here inherits the same stuff case "number": case "input": node = document.createElement("div"); @@ -750,6 +751,7 @@ var import_ext_gadget = require("ext.gadget.Util"); result[fieldNameNorm] = $(field).val(); break; case "text": + // falls through case "textarea": result[fieldNameNorm] = field.value.trim(); break; @@ -4139,4 +4141,4 @@ var import_ext_gadget = require("ext.gadget.Util"); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21vcmViaXRzL21vcmViaXRzLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSBtb3JlYml0cy5qcyAqL1xuXG4vKipcbiAqIEEgbGlicmFyeSBmdWxsIG9mIGxvdHMgb2YgZ29vZG5lc3MgZm9yIHVzZXIgc2NyaXB0cyBvbiBNZWRpYVdpa2kgd2lraXMuXG4gKlxuICogVGhlIGhpZ2hsaWdodHMgaW5jbHVkZTpcbiAqIC0ge0BsaW5rIE1vcmViaXRzLndpa2kuYXBpfSAtIG1ha2UgY2FsbHMgdG8gdGhlIE1lZGlhV2lraSBBUElcbiAqIC0ge0BsaW5rIE1vcmViaXRzLndpa2kucGFnZX0gLSBtb2RpZnkgcGFnZXMgb24gdGhlIHdpa2kgKGVkaXQsIHJldmVydCwgZGVsZXRlLCBldGMuKVxuICogLSB7QGxpbmsgTW9yZWJpdHMuZGF0ZX0gLSBlbmhhbmNlZCBkYXRlIG9iamVjdCBwcm9jZXNzaW5nLCBzb3J0IG9mIGEgbGlnaHQgbW9tZW50LmpzXG4gKiAtIHtAbGluayBNb3JlYml0cy5xdWlja0Zvcm19IC0gZ2VuZXJhdGUgcXVpY2sgSFRNTCBmb3JtcyBvbiB0aGUgZmx5XG4gKiAtIHtAbGluayBNb3JlYml0cy5zaW1wbGVXaW5kb3d9IC0gYSB3cmFwcGVyIGZvciBqUXVlcnkgVUkgRGlhbG9nIHdpdGggYSBjdXN0b20gbG9vayBhbmQgZXh0cmEgZmVhdHVyZXNcbiAqIC0ge0BsaW5rIE1vcmViaXRzLnN0YXR1c30gLSBhIHJvdWdoLWFuZC1yZWFkeSBzdGF0dXMgbWVzc2FnZSBkaXNwbGF5ZXIsIHVzZWQgYnkgdGhlIE1vcmViaXRzLndpa2kgY2xhc3Nlc1xuICogLSB7QGxpbmsgTW9yZWJpdHMud2lraXRleHR9IC0gdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggd2lraXRleHRcbiAqIC0ge0BsaW5rIE1vcmViaXRzLnN0cmluZ30gLSB1dGlsaXRpZXMgZm9yIG1hbmlwdWxhdGluZyBzdHJpbmdzXG4gKiAtIHtAbGluayBNb3JlYml0cy5hcnJheX0gLSB1dGlsaXRpZXMgZm9yIG1hbmlwdWxhdGluZyBhcnJheXNcbiAqIC0ge0BsaW5rIE1vcmViaXRzLmlwfSAtIHV0aWxpdGllcyB0byBoZWxwIHByb2Nlc3MgSVAgYWRkcmVzc2VzXG4gKlxuICogRGVwZW5kZW5jaWVzOlxuICogLSBUaGUgd2hvbGUgdGhpbmcgcmVsaWVzIG9uIGpRdWVyeS4gIEJ1dCBtb3N0IHdpa2lzIHNob3VsZCBwcm92aWRlIHRoaXMgYnkgZGVmYXVsdC5cbiAqIC0ge0BsaW5rIE1vcmViaXRzLnF1aWNrRm9ybX0sIHtAbGluayBNb3JlYml0cy5zaW1wbGVXaW5kb3d9LCBhbmQge0BsaW5rIE1vcmViaXRzLnN0YXR1c30gcmVseSBvbiB0aGUgXCJtb3JlYml0cy5jc3NcIiBmaWxlIGZvciB0aGVpciBzdHlsaW5nLlxuICogLSB7QGxpbmsgTW9yZWJpdHMuc2ltcGxlV2luZG93fSBhbmQge0BsaW5rIE1vcmViaXRzLnF1aWNrRm9ybX0gdG9vbHRpcHMgcmVseSBvbiBqUXVlcnkgVUkgRGlhbG9nIChmcm9tIFJlc291cmNlTG9hZGVyIG1vZHVsZSBuYW1lICdqcXVlcnkudWknKS5cbiAqIC0gVG8gY3JlYXRlIGEgZ2FkZ2V0IGJhc2VkIG9uIG1vcmViaXRzLmpzLCB1c2UgdGhpcyBzeW50YXggaW4gTWVkaWFXaWtpOkdhZGdldHMtZGVmaW5pdGlvbjpcbiAqICAgICAtIGAqR2FkZ2V0TmFtZVtSZXNvdXJjZUxvYWRlcnxkZXBlbmRlbmNpZXM9bWVkaWF3aWtpLnVzZXIsbWVkaWF3aWtpLnV0aWwsbWVkaWF3aWtpLlRpdGxlLGpxdWVyeS51aV18bW9yZWJpdHMuanN8bW9yZWJpdHMuY3NzfEdhZGdldE5hbWUuanNgXG4gKiAtIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY29uZmlndXJlIG1vcmViaXRzLmpzIGFzIGEgaGlkZGVuIGdhZGdldCBpbiBNZWRpYVdpa2k6R2FkZ2V0cy1kZWZpbml0aW9uOlxuICogICAgIC0gYCptb3JlYml0c1tSZXNvdXJjZUxvYWRlcnxkZXBlbmRlbmNpZXM9bWVkaWF3aWtpLnVzZXIsbWVkaWF3aWtpLnV0aWwsbWVkaWF3aWtpLlRpdGxlLGpxdWVyeS51aXxoaWRkZW5dfG1vcmViaXRzLmpzfG1vcmViaXRzLmNzc2BcbiAqICAgICBhbmQgdGhlbiBsb2FkIGV4dC5nYWRnZXQubW9yZWJpdHMgYXMgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBuZXcgZ2FkZ2V0LlxuICpcbiAqIEFsbCB0aGUgc3R1ZmYgaGVyZSB3b3JrcyBvbiBhbGwgYnJvd3NlcnMgZm9yIHdoaWNoIE1lZGlhV2lraSBwcm92aWRlcyBKYXZhU2NyaXB0IHN1cHBvcnQuXG4gKlxuICogVGhpcyBsaWJyYXJ5IGlzIG1haW50YWluZWQgYnkgdGhlIG1haW50YWluZXJzIG9mIFR3aW5rbGUuXG4gKiBGb3IgcXVlcmllcywgc3VnZ2VzdGlvbnMsIGhlbHAsIGV0Yy4sIGhlYWQgdG8gW0hlbHA6VHdpbmtsZV0oaHR0cHM6Ly93d3cucWl1d2VuYmFpa2UuY24vd2lraS9IOlRXKS5cbiAqIFRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgc291cmNlIGlzIGF2YWlsYWJsZSBhdCB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3dpa2ltZWRpYS1nYWRnZXRzL3R3aW5rbGUvYmxvYi9tYXN0ZXIvbW9yZWJpdHMuanN8R2l0SHVifS5cbiAqXG4gKiBAcGFyYW0ge0pRdWVyeX0gJFxuICogQG5hbWVzcGFjZSBNb3JlYml0c1xuICovXG5pbXBvcnQgJy4vbW9yZWJpdHMubGVzcyc7XG5pbXBvcnQge2dlbmVyYXRlQXJyYXl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbihmdW5jdGlvbiBtb3JlYml0cygkKSB7XG5cdC8vIFdyYXAgZW50aXJlIGZpbGUgd2l0aCBhbm9ueW1vdXMgZnVuY3Rpb25cblx0LyoqIEBsZW5kcyBNb3JlYml0cyAqL1xuXHRjb25zdCBNb3JlYml0cyA9IHt9O1xuXHR3aW5kb3cuTW9yZWJpdHMgPSBNb3JlYml0czsgLy8gYWxsb3cgZ2xvYmFsIGFjY2Vzc1xuXHQvLyBObyBNb3JlYml0cy5pMThuIGF0IHRoaXMgdGltZVxuXHQvKipcblx0ICogV2lraS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgTW9yZWJpdHNcblx0ICovXG5cdE1vcmViaXRzLmwxMG4gPSB7XG5cdFx0LyoqXG5cdFx0ICogTG9jYWwgYWxpYXNlcyBmb3IgXCJyZWRpcmVjdFwiIG1hZ2ljIHdvcmQuXG5cdFx0ICogQ2hlY2sgdXNpbmcgYXBpLnBocD9hY3Rpb249cXVlcnkmZm9ybWF0PWpzb24mbWV0YT1zaXRlaW5mbyZmb3JtYXR2ZXJzaW9uPTImc2lwcm9wPW1hZ2ljd29yZHNcblx0XHQgKi9cblx0XHRyZWRpcmVjdFRhZ0FsaWFzZXM6IFsnI1JFRElSRUNUJywgJyPph43lrprlkJEnXSxcblx0XHQvKipcblx0XHQgKiBUYWtlcyBhIHN0cmluZyBhcyBhcmd1bWVudCBhbmQgY2hlY2tzIGlmIGl0IGlzIGEgdGltZXN0YW1wIG9yIG5vdFxuXHRcdCAqIElmIG5vdCwgaXQgcmV0dXJucyBudWxsLiBJZiB5ZXMsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgaW50ZWdlcnNcblx0XHQgKiBpbiB0aGUgZm9ybWF0IFt5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWludXRlLCBzZWNvbmRdXG5cdFx0ICogd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBEYXRlLlVUQygpXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG5cdFx0ICogQHJldHVybnMge251bWJlcltdIHwgbnVsbH1cblx0XHQgKi9cblx0XHRzaWduYXR1cmVUaW1lc3RhbXBGb3JtYXQ6IChzdHIpID0+IHtcblx0XHRcdGNvbnN0IHJneFVUQyA9IC8oXFxkezR9KeW5tChcXGR7MSwyfSnmnIgoXFxkezEsMn0p5pelIFxcKC5cXCkgKFxcZHsyfSk6KFxcZHsyfSkgXFwoVVRDXFwpLzsgLy8gWVlZWeW5tE1vbnRo5pyIRETml6UgKHcpIEhIOm1tIChVVEMpXG5cdFx0XHRjb25zdCByZ3hDU1QgPSAvKFxcZHs0fSnlubQoXFxkezEsMn0p5pyIKFxcZHsxLDJ9KeaXpSBcXCguXFwpIChcXGR7Mn0pOihcXGR7Mn0pIFxcKENTVFxcKS87IC8vIFlZWVnlubRNb250aOaciERE5pelICh3KSBISDptbSAoQ1NUKVxuXHRcdFx0Y29uc3QgbWF0Y2ggPSByZ3hVVEMuZXhlYyhzdHIpIHx8IHJneENTVC5leGVjKHN0cik7XG5cdFx0XHRjb25zdCBtYXRjaENTVCA9IHJneENTVC5leGVjKHN0cik7XG5cdFx0XHRpZiAoIW1hdGNoKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbW9udGggPSBNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEubW9udGhzLmluZGV4T2YobWF0Y2hbNF0pO1xuXHRcdFx0aWYgKG1vbnRoID09PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdC8vIC4uLi4uIHllYXIgLi4uLiBtb250aCAuLi4gZGF0ZSAuLi4uIGhvdXIgLi4uIG1pbnV0ZVxuXHRcdFx0cmV0dXJuIG1hdGNoQ1NUXG5cdFx0XHRcdD8gW21hdGNoWzFdLCBtYXRjaFsyXSAtIDEsIG1hdGNoWzNdLCBtYXRjaFs0XSAtIDgsIG1hdGNoWzVdXVxuXHRcdFx0XHQ6IFttYXRjaFsxXSwgbWF0Y2hbMl0gLSAxLCBtYXRjaFszXSwgbWF0Y2hbNF0sIG1hdGNoWzVdXTtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogU2ltcGxlIGhlbHBlciBmdW5jdGlvbiB0byBzZWUgd2hhdCBncm91cHMgYSB1c2VyIG1pZ2h0IGJlbG9uZy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwIC0gZS5nLiBgc3lzb3BgLCBgYXV0b2NvbmZpcm1lZGAsIGV0Yy5cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRNb3JlYml0cy51c2VySXNJbkdyb3VwID0gKGdyb3VwKSA9PiB7XG5cdFx0cmV0dXJuIG13LmNvbmZpZy5nZXQoJ3dnVXNlckdyb3VwcycpLmluY2x1ZGVzKGdyb3VwKTtcblx0fTtcblx0LyoqXG5cdCAqIEhhcmRjb2RlcyB3aGV0aGVyIHRoZSB1c2VyIGlzIGEgc3lzb3AsIHVzZWQgYSBsb3QuXG5cdCAqXG5cdCAqIEB0eXBlIHtib29sZWFufVxuXHQgKi9cblx0TW9yZWJpdHMudXNlcklzU3lzb3AgPVxuXHRcdE1vcmViaXRzLnVzZXJJc0luR3JvdXAoJ3N5c29wJykgfHwgTW9yZWJpdHMudXNlcklzSW5Hcm91cCgnc3Rld2FyZCcpIHx8IE1vcmViaXRzLnVzZXJJc0luR3JvdXAoJ3FpdXdlbicpO1xuXHQvKipcblx0ICogRGVwcmVjYXRlZCBhcyBvZiBGZWJydWFyeSAyMDIxLCB1c2Uge0BsaW5rIE1vcmViaXRzLmlwLnNhbml0aXplSVB2Nn0uXG5cdCAqXG5cdCAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgTW9yZWJpdHMuaXAuc2FuaXRpemVJUHY2fS5cblx0ICogQ29udmVydHMgYW4gSVB2NiBhZGRyZXNzIHRvIHRoZSBjYW5vbmljYWwgZm9ybSBzdG9yZWQgYW5kIHVzZWQgYnkgTWVkaWFXaWtpLlxuXHQgKiBKYXZhU2NyaXB0IHRyYW5zbGF0aW9uIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9nZXJyaXQud2lraW1lZGlhLm9yZy9yL3BsdWdpbnMvZ2l0aWxlcy9tZWRpYXdpa2kvY29yZS8rLzhlYjZhYzNlODRlYTMzMTJkMzkxY2E5NmMxMmM0OWUzYWQwNzUzYmIvaW5jbHVkZXMvdXRpbHMvSVAucGhwIzEzMXxgSVA6OnNhbml0aXplSVAoKWB9XG5cdCAqIGZ1bmN0aW9uIGZyb20gdGhlIElQVXRpbHMgbGlicmFyeS4gIEFkZHJlc3NlcyBhcmUgdmVyYm9zZSwgdXBwZXJjYXNlLFxuXHQgKiBub3JtYWxpemVkLCBhbmQgZXhwYW5kZWQgdG8gOCB3b3Jkcy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgSVB2NiBhZGRyZXNzLCB3aXRoIG9yIHdpdGhvdXQgQ0lEUi5cblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdE1vcmViaXRzLnNhbml0aXplSVB2NiA9IChhZGRyZXNzKSA9PiB7XG5cdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0J1tNb3JlYml0c10gTk9URTogTW9yZWJpdHMuc2FuaXRpemVJUHY2IHdhcyByZW5hbWVkIHRvIE1vcmViaXRzLmlwLnNhbml0aXplSVB2NiBpbiBGZWJydWFyeSAyMDIxLCBwbGVhc2UgdXNlIHRoYXQgaW5zdGVhZCdcblx0XHQpO1xuXHRcdHJldHVybiBNb3JlYml0cy5pcC5zYW5pdGl6ZUlQdjYoYWRkcmVzcyk7XG5cdH07XG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgcGFnZSBpcyBhIHJlZGlyZWN0IG9yIHNvZnQgcmVkaXJlY3QuIEZhaWxzXG5cdCAqIHRvIGRldGVjdCBzb2Z0IHJlZGlyZWN0cyBvbiBlZGl0LCBoaXN0b3J5LCBldGMuIHBhZ2VzLiAgV2lsbCBhdHRlbXB0IHRvXG5cdCAqIGRldGVjdCBNb2R1bGU6UmZELCB3aXRoIHRoZSBzYW1lIGZhaWx1cmUgcG9pbnRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdE1vcmViaXRzLmlzUGFnZVJlZGlyZWN0ID0gKCkgPT4ge1xuXHRcdHJldHVybiAhIShcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnSXNSZWRpcmVjdCcpIHx8XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc29mdHJlZGlyZWN0JykgfHxcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ib3gtUmZEJykgfHxcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ib3gtUmVkaXJlY3RfY2F0ZWdvcnlfc2hlbGwnKVxuXHRcdCk7XG5cdH07XG5cdC8qKlxuXHQgKiBTdG9yZXMgYSBub3JtYWxpemVkICh1bmRlcnNjb3JlcyBjb252ZXJ0ZWQgdG8gc3BhY2VzKSB2ZXJzaW9uIG9mIHRoZVxuXHQgKiBgd2dQYWdlTmFtZWAgdmFyaWFibGUuXG5cdCAqXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykucmVwbGFjZSgvXy9nLCAnICcpO1xuXHQvKipcblx0ICogQ3JlYXRlIGEgc3RyaW5nIGZvciB1c2UgaW4gcmVnZXggbWF0Y2hpbmcgYSBwYWdlIG5hbWUuICBBY2NvdW50cyBmb3Jcblx0ICogbGVhZGluZyBjaGFyYWN0ZXIncyBjYXBpdGFsaXphdGlvbiwgdW5kZXJzY29yZXMgYXMgc3BhY2VzLCBhbmQgc3BlY2lhbFxuXHQgKiBjaGFyYWN0ZXJzIGJlaW5nIGVzY2FwZWQuICBTZWUgYWxzbyB7QGxpbmsgTW9yZWJpdHMubmFtZXNwYWNlUmVnZXh9LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGFnZU5hbWUgLSBQYWdlIG5hbWUgd2l0aG91dCBuYW1lc3BhY2UuXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRm9yIGEgcGFnZSBuYW1lIGBGb28gYmFyYCwgcmV0dXJucyB0aGUgc3RyaW5nIGBbRmZdb29bXyBdYmFyYC5cblx0ICovXG5cdE1vcmViaXRzLnBhZ2VOYW1lUmVnZXggPSAocGFnZU5hbWUpID0+IHtcblx0XHRpZiAocGFnZU5hbWUgPT09ICcnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdGNvbnN0IFtmaXJzdENoYXJdID0gcGFnZU5hbWU7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTW9yZWJpdHMuc3RyaW5nLmVzY2FwZVJlZ0V4cChwYWdlTmFtZS5zbGljZSgxKSk7XG5cdFx0aWYgKG13LlRpdGxlLnBocENoYXJUb1VwcGVyKGZpcnN0Q2hhcikgIT09IGZpcnN0Q2hhci50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRyZXR1cm4gYFske213LlRpdGxlLnBocENoYXJUb1VwcGVyKGZpcnN0Q2hhcil9JHtmaXJzdENoYXIudG9Mb3dlckNhc2UoKX1dJHtyZW1haW5kZXJ9YDtcblx0XHR9XG5cdFx0cmV0dXJuIE1vcmViaXRzLnN0cmluZy5lc2NhcGVSZWdFeHAoZmlyc3RDaGFyKSArIHJlbWFpbmRlcjtcblx0fTtcblx0LyoqXG5cdCAqIENvbnZlcnRzIHN0cmluZyBvciBhcnJheSBvZiBET00gbm9kZXMgaW50byBhbiBIVE1MIGZyYWdtZW50LlxuXHQgKiBXaWtpbGluayBzeW50YXggKGBbWy4uLl1dYCkgaXMgdHJhbnNmb3JtZWQgaW50byBIVE1MIGFuY2hvci5cblx0ICogVXNlZCBpbiBNb3JlYml0cy5xdWlja0Zvcm0gYW5kIE1vcmViaXRzLnN0YXR1c1xuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICogQHBhcmFtIHtzdHJpbmd8Tm9kZXwoc3RyaW5nfE5vZGUpW119IGlucHV0XG5cdCAqIEByZXR1cm5zIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMuY3JlYXRlSHRtbCA9IChpbnB1dCkgPT4ge1xuXHRcdGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdGlmICghaW5wdXQpIHtcblx0XHRcdHJldHVybiBmcmFnbWVudDtcblx0XHR9XG5cdFx0aW5wdXQgPSBnZW5lcmF0ZUFycmF5KGlucHV0KTtcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaW5wdXQpIHtcblx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiAkLnBhcnNlSFRNTChNb3JlYml0cy5jcmVhdGVIdG1sLnJlbmRlcldpa2lsaW5rcyhlbGVtZW50KSkpIHtcblx0XHRcdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZnJhZ21lbnQ7XG5cdH07XG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB3aWtpbGlua3MgdG8gSFRNTCBhbmNob3IgdGFncy5cblx0ICpcblx0ICogQHBhcmFtIHRleHRcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRNb3JlYml0cy5jcmVhdGVIdG1sLnJlbmRlcldpa2lsaW5rcyA9ICh0ZXh0KSA9PiB7XG5cdFx0Y29uc3QgdWIgPSBuZXcgTW9yZWJpdHMudW5iaW5kZXIodGV4dCk7XG5cdFx0Ly8gRG9uJ3QgY29udmVydCB3aWtpbGlua3Mgd2l0aGluIGNvZGUgdGFncyBhcyB0aGV5J3JlIHVzZWQgZm9yIGRpc3BsYXlpbmcgd2lraS1jb2RlXG5cdFx0dWIudW5iaW5kKCc8Y29kZT4nLCAnPC9jb2RlPicpO1xuXHRcdHViLmNvbnRlbnQgPSB1Yi5jb250ZW50LnJlcGxhY2UoL1xcW1xcWzo/KD86KFtefFxcXV0rPylcXHwpPyhbXlxcXXxdKz8pXFxdXFxdL2csIChfLCB0YXJnZXQsIHRleHRfKSA9PiB7XG5cdFx0XHR0YXJnZXQgfHw9IHRleHRfO1xuXHRcdFx0cmV0dXJuIGA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIke213LnV0aWwuZ2V0VXJsKHRhcmdldCl9XCIgdGl0bGU9XCIke3RhcmdldC5yZXBsYWNlKFxuXHRcdFx0XHQvXCIvZyxcblx0XHRcdFx0JyYjMzQ7J1xuXHRcdFx0KX1cIj4ke3RleHRffTwvYT5gO1xuXHRcdH0pO1xuXHRcdHJldHVybiB1Yi5yZWJpbmQoKTtcblx0fTtcblx0LyoqXG5cdCAqIENyZWF0ZSBhIHN0cmluZyBmb3IgdXNlIGluIHJlZ2V4IG1hdGNoaW5nIGFsbCBuYW1lc3BhY2UgYWxpYXNlcywgcmVnYXJkbGVzc1xuXHQgKiBvZiB0aGUgY2FwaXRhbGl6YXRpb24gYW5kIHVuZGVyc2NvcmVzL3NwYWNlcy4gIERvZXNuJ3QgaW5jbHVkZSB0aGUgb3B0aW9uYWxcblx0ICogbGVhZGluZyBgOmAsIGJ1dCBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgaXRlbSwgd3JhcHMgdGhlIGxpc3QgaW4gYVxuXHQgKiBub24tY2FwdHVyaW5nIGdyb3VwLiAgVGhpcyBtZWFucyB5b3UgY2FuIGRvIGBNb3JlYml0cy5uYW1lc3BhY2VSZWdleChbNF0pICtcblx0ICogJzonICsgTW9yZWJpdHMucGFnZU5hbWVSZWdleCgnVHdpbmtsZScpYCB0byBtYXRjaCBhIGZ1bGwgcGFnZS4gIFVzZXNcblx0ICoge0BsaW5rIE1vcmViaXRzLnBhZ2VOYW1lUmVnZXh9LlxuXHQgKlxuXHQgKiBAcGFyYW0ge251bWJlcltdfSBuYW1lc3BhY2VzIC0gQXJyYXkgb2YgbmFtZXNwYWNlIG51bWJlcnMuICBVbnVzZWQvaW52YWxpZFxuXHQgKiBuYW1lc3BhY2UgbnVtYmVycyBhcmUgc2lsZW50bHkgZGlzY2FyZGVkLlxuXHQgKiBAZXhhbXBsZVxuXHQgKiAvLyByZXR1cm5zICcoPzpbRmZdW0lpXVtMbF1bRWVdfFtJaV1bTW1dW0FhXVtHZ11bRWVdKSdcblx0ICogTW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoWzZdKVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlZ2V4LXN1aXRhYmxlIHN0cmluZyBvZiBhbGwgbmFtZXNwYWNlIGFsaWFzZXMuXG5cdCAqL1xuXHRNb3JlYml0cy5uYW1lc3BhY2VSZWdleCA9IChuYW1lc3BhY2VzKSA9PiB7XG5cdFx0bmFtZXNwYWNlcyA9IGdlbmVyYXRlQXJyYXkobmFtZXNwYWNlcyk7XG5cdFx0Y29uc3QgYWxpYXNlcyA9IFtdO1xuXHRcdGxldCByZWdleDtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBudW1iZXJdIG9mIE9iamVjdC5lbnRyaWVzKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlSWRzJykpKSB7XG5cdFx0XHRpZiAobmFtZXNwYWNlcy5pbmNsdWRlcyhudW1iZXIpKSB7XG5cdFx0XHRcdC8vIE5hbWVzcGFjZXMgYXJlIGNvbXBsZXRlbHkgYWdub3N0aWMgYXMgdG8gY2FzZSxcblx0XHRcdFx0Ly8gYW5kIGEgcmVnZXggc3RyaW5nIGlzIG1vcmUgdXNlZnVsL2NvbXBhdGlibGUgdGhhbiBhIFJlZ0V4cCBvYmplY3QsXG5cdFx0XHRcdC8vIHNvIHdlIGFjY2VwdCBhbnkgY2FzaW5nIGZvciBhbnkgbGV0dGVyLlxuXHRcdFx0XHRhbGlhc2VzW2FsaWFzZXMubGVuZ3RoXSA9IFsuLi5uYW1lXVxuXHRcdFx0XHRcdC5tYXAoKGNoYXIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KGNoYXIpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oJycpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRzd2l0Y2ggKGFsaWFzZXMubGVuZ3RoKSB7XG5cdFx0XHRjYXNlIDA6XG5cdFx0XHRcdHJlZ2V4ID0gJyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRbcmVnZXhdID0gYWxpYXNlcztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZWdleCA9IGAoPzoke2FsaWFzZXMuam9pbignfCcpfSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHJlZ2V4O1xuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLnF1aWNrRm9ybSAqKioqKioqKioqKioqKioqICovXG5cdC8qKlxuXHQgKiBDcmVhdGlvbiBvZiBzaW1wbGUgYW5kIHN0YW5kYXJkIGZvcm1zIHdpdGhvdXQgbXVjaCBzcGVjaWZpYyBjb2RpbmcuXG5cdCAqXG5cdCAqIEBuYW1lc3BhY2UgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtldmVudH0gZXZlbnQgLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gZm9ybSBpcyBzdWJtaXR0ZWQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRUeXBlPXN1Ym1pdF0gLSBUeXBlIG9mIHRoZSBldmVudC5cblx0ICovXG5cdE1vcmViaXRzLnF1aWNrRm9ybSA9IGZ1bmN0aW9uIChldmVudCwgZXZlbnRUeXBlKSB7XG5cdFx0dGhpcy5yb290ID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdHR5cGU6ICdmb3JtJyxcblx0XHRcdGV2ZW50LFxuXHRcdFx0ZXZlbnRUeXBlLFxuXHRcdH0pO1xuXHR9O1xuXHQvKipcblx0ICogUmVuZGVycyB0aGUgSFRNTCBvdXRwdXQgb2YgdGhlIHF1aWNrRm9ybS5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRjb25zdCByZXQgPSB0aGlzLnJvb3QucmVuZGVyKCk7XG5cdFx0cmV0Lm5hbWVzID0ge307XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0LyoqXG5cdCAqIEFwcGVuZCBlbGVtZW50IHRvIHRoZSBmb3JtLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7KG9iamVjdHxNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCl9IGRhdGEgLSBBIHF1aWNrZm9ybSBlbGVtZW50LCBvciB0aGUgb2JqZWN0IHdpdGggd2hpY2hcblx0ICogYSBxdWlja2Zvcm0gZWxlbWVudCBpcyBjb25zdHJ1Y3RlZC5cblx0ICogQHJldHVybnMge01vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50fSAtIFNhbWUgYXMgd2hhdCBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdHJldHVybiB0aGlzLnJvb3QuYXBwZW5kKGRhdGEpO1xuXHR9O1xuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGVsZW1lbnQgZm9yIHRoZSB0aGUgZm9ybS5cblx0ICpcblx0ICogSW5kZXggdG8gTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQgdHlwZXM6XG5cdCAqIC0gR2xvYmFsIGF0dHJpYnV0ZXM6IGlkLCBjbGFzc05hbWUsIHN0eWxlLCB0b29sdGlwLCBleHRyYSwgJGRhdGEsIGFkbWlub25seVxuXHQgKiAtIGBzZWxlY3RgOiBBIGNvbWJvIGJveCAoYWthIGRyb3AtZG93bikuXG5cdCAqICAgICAtIEF0dHJpYnV0ZXM6IG5hbWUsIGxhYmVsLCBtdWx0aXBsZSwgc2l6ZSwgbGlzdCwgZXZlbnQsIGRpc2FibGVkXG5cdCAqICAtIGBvcHRpb25gOiBBbiBlbGVtZW50IGZvciBhIGNvbWJvIGJveC5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IHZhbHVlLCBsYWJlbCwgc2VsZWN0ZWQsIGRpc2FibGVkXG5cdCAqICAtIGBvcHRncm91cGA6IEEgZ3JvdXAgb2YgXCJvcHRpb25cInMuXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBsYWJlbCwgbGlzdFxuXHQgKiAgLSBgZmllbGRgOiBBIGZpZWxkc2V0IChha2EgZ3JvdXAgYm94KS5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IG5hbWUsIGxhYmVsLCBkaXNhYmxlZFxuXHQgKiAgLSBgY2hlY2tib3hgOiBBIGNoZWNrYm94LiBNdXN0IHVzZSBcImxpc3RcIiBwYXJhbWV0ZXIuXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCBsaXN0LCBldmVudFxuXHQgKiAgICAgIC0gQXR0cmlidXRlcyAod2l0aGluIGxpc3QpOiBuYW1lLCBsYWJlbCwgdmFsdWUsIGNoZWNrZWQsIGRpc2FibGVkLCBldmVudCwgc3ViZ3JvdXBcblx0ICogIC0gYHJhZGlvYDogQSByYWRpbyBidXR0b24uIE11c3QgdXNlIFwibGlzdFwiIHBhcmFtZXRlci5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IG5hbWUsIGxpc3QsIGV2ZW50XG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzICh3aXRoaW4gbGlzdCk6IG5hbWUsIGxhYmVsLCB2YWx1ZSwgY2hlY2tlZCwgZGlzYWJsZWQsIGV2ZW50LCBzdWJncm91cFxuXHQgKiAgLSBgaW5wdXRgOiBBIHRleHQgaW5wdXQgYm94LlxuXHQgKiAgICAgIC0gQXR0cmlidXRlczogbmFtZSwgbGFiZWwsIHZhbHVlLCBzaXplLCBwbGFjZWhvbGRlciwgbWF4bGVuZ3RoLCBkaXNhYmxlZCwgcmVxdWlyZWQsIHJlYWRvbmx5LCBldmVudFxuXHQgKiAgLSBgbnVtYmVyYDogQSBudW1iZXIgaW5wdXQgYm94LlxuXHQgKiAgICAgIC0gQXR0cmlidXRlczogRXZlcnl0aGluZyB0aGUgdGV4dCBgaW5wdXRgIGhhcywgYXMgd2VsbCBhczogbWluLCBtYXgsIHN0ZXAsIGxpc3Rcblx0ICogIC0gYGR5bmlucHV0YDogQSBzZXQgb2YgdGV4dCBib3hlcyB3aXRoIFwiUmVtb3ZlXCIgYnV0dG9ucyBhbmQgYW4gXCJBZGRcIiBidXR0b24uXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCBsYWJlbCwgbWluLCBtYXgsIHN1YmxhYmVsLCB2YWx1ZSwgc2l6ZSwgbWF4bGVuZ3RoLCBldmVudFxuXHQgKiAgLSBgaGlkZGVuYDogQW4gaW52aXNpYmxlIGZvcm0gZmllbGQuXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCB2YWx1ZVxuXHQgKiAgLSBgaGVhZGVyYDogQSBsZXZlbCA1IGhlYWRlci5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IGxhYmVsXG5cdCAqICAtIGBkaXZgOiBBIGdlbmVyaWMgcGxhY2Vob2xkZXIgZWxlbWVudCBvciBsYWJlbC5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IG5hbWUsIGxhYmVsXG5cdCAqICAtIGBzdWJtaXRgOiBBIHN1Ym1pdCBidXR0b24uIE1vcmViaXRzLnNpbXBsZVdpbmRvdyBtb3ZlcyB0aGVzZSB0byB0aGUgZm9vdGVyIG9mIHRoZSBkaWFsb2cuXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCBsYWJlbCwgZGlzYWJsZWRcblx0ICogIC0gYGJ1dHRvbmA6IEEgZ2VuZXJpYyBidXR0b24uXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCBsYWJlbCwgZGlzYWJsZWQsIGV2ZW50XG5cdCAqICAtIGB0ZXh0YXJlYWA6IEEgYmlnLCBtdWx0aS1saW5lIHRleHQgYm94LlxuXHQgKiAgICAgIC0gQXR0cmlidXRlczogbmFtZSwgbGFiZWwsIHZhbHVlLCBjb2xzLCByb3dzLCBkaXNhYmxlZCwgcmVxdWlyZWQsIHJlYWRvbmx5XG5cdCAqICAtIGBmcmFnbWVudGA6IEEgRG9jdW1lbnRGcmFnbWVudCBvYmplY3QuXG5cdCAqICAgICAgLSBObyBhdHRyaWJ1dGVzLCBhbmQgbm8gZ2xvYmFsIGF0dHJpYnV0ZXMgZXhjZXB0IGFkbWlub25seS5cblx0ICogVGhlcmUgaXMgc29tZSBkaWZmZXJlbmNlIG9uIGhvdyB0eXBlcyBoYW5kbGUgdGhlIGBsYWJlbGAgYXR0cmlidXRlOlxuXHQgKiAtIGBkaXZgLCBgc2VsZWN0YCwgYGZpZWxkYCwgYGNoZWNrYm94YC9gcmFkaW9gLCBgaW5wdXRgLCBgdGV4dGFyZWFgLCBgaGVhZGVyYCwgYW5kIGBkeW5pbnB1dGAgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBpdGVtcyxcblx0ICogYW5kIHRoZSBsYWJlbCBpdGVtKHMpIGNhbiBiZSBgRWxlbWVudGBzLlxuXHQgKiAtIGBvcHRpb25gLCBgb3B0Z3JvdXBgLCBgX2R5bmlucHV0X2VsZW1lbnRgLCBgc3VibWl0YCwgYW5kIGBidXR0b25gIGFjY2VwdCBvbmx5IGEgc2luZ2xlIHN0cmluZy5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBxdWlja2Zvcm0gZWxlbWVudC4gU2hvdWxkXG5cdCAqIHNwZWNpZnkgb25lIG9mIHRoZSBhdmFpbGFibGUgdHlwZXMgZnJvbSB0aGUgaW5kZXggYWJvdmUsIGFzIHdlbGwgYXMgYW55XG5cdCAqIHJlbGV2YW50IGFuZCBhdmFpbGFibGUgYXR0cmlidXRlcy5cblx0ICogQGV4YW1wbGUgbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0ICogICAgIG5hbWU6ICd0YXJnZXQnLFxuXHQgKiAgICAgdHlwZTogJ2lucHV0Jyxcblx0ICogICAgIGxhYmVsOiAnWW91ciB0YXJnZXQ6Jyxcblx0ICogICAgIHRvb2x0aXA6ICdFbnRlciB5b3VyIHRhcmdldC4gUmVxdWlyZWQuJyxcblx0ICogICAgIHJlcXVpcmVkOiB0cnVlXG5cdCAqIH0pO1xuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cdFx0dGhpcy5jaGlsZHMgPSBbXTtcblx0fTtcblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudFxuXHQgKiBAdHlwZSB7bnVtYmVyfVxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQuaWQgPSAwO1xuXHQvKipcblx0ICogQXBwZW5kcyBhbiBlbGVtZW50IHRvIGN1cnJlbnQgZWxlbWVudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50XG5cdCAqIEBwYXJhbSB7TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnR9IGRhdGEgLSBBIHF1aWNrRm9ybSBlbGVtZW50IG9yIHRoZSBvYmplY3QgcmVxdWlyZWQgdG9cblx0ICogY3JlYXRlIHRoZSBxdWlja0Zvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMge01vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50fSBUaGUgc2FtZSBlbGVtZW50IHBhc3NlZCBpbi5cblx0ICovXG5cdE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdGxldCBjaGlsZDtcblx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KSB7XG5cdFx0XHRjaGlsZCA9IGRhdGE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoaWxkID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KGRhdGEpO1xuXHRcdH1cblx0XHR0aGlzLmNoaWxkc1t0aGlzLmNoaWxkcy5sZW5ndGhdID0gY2hpbGQ7XG5cdFx0cmV0dXJuIGNoaWxkO1xuXHR9O1xuXHQvKipcblx0ICogUmVuZGVycyB0aGUgSFRNTCBvdXRwdXQgZm9yIHRoZSBxdWlja0Zvcm0gZWxlbWVudC4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZFxuXHQgKiB3aXRob3V0IHBhcmFtZXRlcnM6IGBmb3JtLnJlbmRlcigpYC5cblx0ICpcblx0ICogQHBhcmFtIHtudW1iZXJ9IGludGVybmFsU3ViZ3JvdXBJZFxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnRcblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChpbnRlcm5hbFN1Ymdyb3VwSWQpIHtcblx0XHRjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMuY29tcHV0ZSh0aGlzLmRhdGEsIGludGVybmFsU3ViZ3JvdXBJZCk7XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcykge1xuXHRcdFx0Ly8gZG8gbm90IHBhc3MgaW50ZXJuYWxfc3ViZ3JvdXBfaWQgdG8gcmVjdXJzaXZlIGNhbGxzXG5cdFx0XHRjdXJyZW50Tm9kZVsxXS5hcHBlbmRDaGlsZChjaGlsZC5yZW5kZXIoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjdXJyZW50Tm9kZVswXTtcblx0fTtcblx0LyoqXG5cdCAqIEBwYXJhbSB7Kn0gZGF0YVxuXHQgKiBAcGFyYW0ge251bWJlcn0gaW5JZFxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnRcblx0ICovXG5cdE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50LnByb3RvdHlwZS5jb21wdXRlID0gZnVuY3Rpb24gKGRhdGEsIGluSWQpIHtcblx0XHRsZXQgbm9kZTtcblx0XHRsZXQgY2hpbGRDb250YWluZXIgPSBudWxsO1xuXHRcdGxldCBsYWJlbDtcblx0XHRjb25zdCBpZCA9IGAke2luSWQgPyBgJHtpbklkfV9gIDogJyd9bm9kZV8ke01vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50LmlkKyt9YDtcblx0XHRpZiAoZGF0YS5hZG1pbm9ubHkgJiYgIU1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHQvLyBoZWxsIGhhY2sgYWxwaGFcblx0XHRcdGRhdGEudHlwZSA9ICdoaWRkZW4nO1xuXHRcdH1cblx0XHRsZXQgaTtcblx0XHRsZXQgY3VycmVudDtcblx0XHRsZXQgc3Vibm9kZTtcblx0XHRzd2l0Y2ggKGRhdGEudHlwZSkge1xuXHRcdFx0Y2FzZSAnZm9ybSc6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG5cdFx0XHRcdG5vZGUuY2xhc3NOYW1lID0gJ3F1aWNrZm9ybSc7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdhY3Rpb24nLCAnamF2YXNjcmlwdDp2b2lkKDApOycpO1xuXHRcdFx0XHRpZiAoZGF0YS5ldmVudCkge1xuXHRcdFx0XHRcdG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihkYXRhLmV2ZW50VHlwZSB8fCAnc3VibWl0JywgZGF0YS5ldmVudCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZnJhZ21lbnQnOlxuXHRcdFx0XHRub2RlID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdFx0XHQvLyBmcmFnbWVudHMgY2FuJ3QgaGF2ZSBhbnkgYXR0cmlidXRlcywgc28ganVzdCByZXR1cm4gaXQgc3RyYWlnaHQgYXdheVxuXHRcdFx0XHRyZXR1cm4gW25vZGUsIG5vZGVdO1xuXHRcdFx0Y2FzZSAnc2VsZWN0Jzoge1xuXHRcdFx0XHRub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdpZCcsIGBkaXZfJHtpZH1gKTtcblx0XHRcdFx0aWYgKGRhdGEubGFiZWwpIHtcblx0XHRcdFx0XHRsYWJlbCA9IG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKSk7XG5cdFx0XHRcdFx0bGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCBpZCk7XG5cdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoTW9yZWJpdHMuY3JlYXRlSHRtbChkYXRhLmxhYmVsKSk7XG5cdFx0XHRcdFx0Ly8gTm8gbWFyZ2luXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzZWxlY3QgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpKTtcblx0XHRcdFx0aWYgKGRhdGEuZXZlbnQpIHtcblx0XHRcdFx0XHRzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZGF0YS5ldmVudCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0c2VsZWN0LnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5zaXplKSB7XG5cdFx0XHRcdFx0c2VsZWN0LnNldEF0dHJpYnV0ZSgnc2l6ZScsIGRhdGEuc2l6ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEuZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRzZWxlY3QuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNlbGVjdC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYXRhLm5hbWUpO1xuXHRcdFx0XHRpZiAoZGF0YS5saXN0KSB7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGlzdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Y3VycmVudCA9IGRhdGEubGlzdFtpXTtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50Lmxpc3QpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudC50eXBlID0gJ29wdGdyb3VwJztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnQudHlwZSA9ICdvcHRpb24nO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c3Vibm9kZSA9IHRoaXMuY29tcHV0ZShjdXJyZW50KTtcblx0XHRcdFx0XHRcdHNlbGVjdC5hcHBlbmRDaGlsZChzdWJub2RlWzBdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBzZWxlY3Q7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnb3B0aW9uJzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXHRcdFx0XHRub2RlLnZhbHVlcyA9IGRhdGEudmFsdWU7XG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEudmFsdWUpO1xuXHRcdFx0XHRpZiAoZGF0YS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0bm9kZS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQWRkIGhpZGRlbiBhdHRyXG5cdFx0XHRcdGlmIChkYXRhLmhpZGRlbikge1xuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoJ2xhYmVsJywgZGF0YS5sYWJlbCk7XG5cdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YS5sYWJlbCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ29wdGdyb3VwJzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJyk7XG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdsYWJlbCcsIGRhdGEubGFiZWwpO1xuXHRcdFx0XHRpZiAoZGF0YS5saXN0KSB7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGlzdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Y3VycmVudCA9IGRhdGEubGlzdFtpXTtcblx0XHRcdFx0XHRcdGN1cnJlbnQudHlwZSA9ICdvcHRpb24nOyAvLyBtdXN0IGJlIG9wdGlvbnMgaGVyZVxuXHRcdFx0XHRcdFx0c3Vibm9kZSA9IHRoaXMuY29tcHV0ZShjdXJyZW50KTtcblx0XHRcdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoc3Vibm9kZVswXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZmllbGQnOlxuXHRcdFx0XHRub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTtcblx0XHRcdFx0bGFiZWwgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xlZ2VuZCcpKTtcblx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoTW9yZWJpdHMuY3JlYXRlSHRtbChkYXRhLmxhYmVsKSk7XG5cdFx0XHRcdGlmIChkYXRhLm5hbWUpIHtcblx0XHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnbmFtZScsIGRhdGEubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEuZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRub2RlLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2NoZWNrYm94Jzpcblx0XHRcdGNhc2UgJ3JhZGlvJzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0XHRpZiAoZGF0YS5saXN0KSB7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGlzdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY3VySWQgPSBgJHtpZH1fJHtpfWA7XG5cdFx0XHRcdFx0XHRjdXJyZW50ID0gZGF0YS5saXN0W2ldO1xuXHRcdFx0XHRcdFx0bGV0IGN1ckRpdjtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50LnR5cGUgPT09ICdoZWFkZXInKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlubGluZSBoYWNrXG5cdFx0XHRcdFx0XHRcdGN1ckRpdiA9IG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDYnKSk7XG5cdFx0XHRcdFx0XHRcdGN1ckRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjdXJyZW50LmxhYmVsKSk7XG5cdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50LnRvb2x0aXApIHtcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudC5nZW5lcmF0ZVRvb2x0aXAoY3VyRGl2LCBjdXJyZW50KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1ckRpdiA9IG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXHRcdFx0XHRcdFx0Ly8gQWRkIGhpZGRlbiBhdHRyXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudC5oaWRkZW4pIHtcblx0XHRcdFx0XHRcdFx0Y3VyRGl2LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c3Vibm9kZSA9IGN1ckRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTtcblx0XHRcdFx0XHRcdHN1Ym5vZGUudmFsdWVzID0gY3VycmVudC52YWx1ZTtcblx0XHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGN1cnJlbnQudmFsdWUpO1xuXHRcdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBkYXRhLnR5cGUpO1xuXHRcdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VySWQpO1xuXHRcdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBjdXJyZW50Lm5hbWUgfHwgZGF0YS5uYW1lKTtcblx0XHRcdFx0XHRcdC8vIElmIG5hbWUgaXMgcHJvdmlkZWQgb24gdGhlIGluZGl2aWR1YWwgY2hlY2tib3gsIGFkZCBhIGRhdGEtc2luZ2xlXG5cdFx0XHRcdFx0XHQvLyBhdHRyaWJ1dGUgd2hpY2ggaW5kaWNhdGVzIGl0IGlzbid0IHBhcnQgb2YgYSBsaXN0IG9mIGNoZWNrYm94ZXMgd2l0aFxuXHRcdFx0XHRcdFx0Ly8gc2FtZSBuYW1lLiBVc2VkIGluIGdldElucHV0RGF0YSgpXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudC5uYW1lKSB7XG5cdFx0XHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXNpbmdsZScsICdkYXRhLXNpbmdsZScpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnQuY2hlY2tlZCkge1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnQuZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdFx0c3Vibm9kZS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsYWJlbCA9IGN1ckRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpKTtcblx0XHRcdFx0XHRcdGxhYmVsLmFwcGVuZENoaWxkKE1vcmViaXRzLmNyZWF0ZUh0bWwoY3VycmVudC5sYWJlbCkpO1xuXHRcdFx0XHRcdFx0bGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCBjdXJJZCk7XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudC50b29sdGlwKSB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50LmdlbmVyYXRlVG9vbHRpcChsYWJlbCwgY3VycmVudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBzdHlsZXMgZ28gb24gdGhlIGxhYmVsLCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gc3R5bGUgYSBjaGVja2JveC9yYWRpb1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnQuc3R5bGUpIHtcblx0XHRcdFx0XHRcdFx0bGFiZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGN1cnJlbnQuc3R5bGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IGV2ZW50O1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnQuc3ViZ3JvdXApIHtcblx0XHRcdFx0XHRcdFx0bGV0IHRtcGdyb3VwID0gY3VycmVudC5zdWJncm91cDtcblx0XHRcdFx0XHRcdFx0dG1wZ3JvdXAgPSBnZW5lcmF0ZUFycmF5KHRtcGdyb3VwKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3ViZ3JvdXBSYXcgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0XHRcdGlkOiBgJHtpZH1fJHtpfV9zdWJncm91cGAsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHRtcGdyb3VwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3RWwgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQuLi5lbCxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdG5ld0VsLnR5cGUgfHw9IGRhdGEudHlwZTtcblx0XHRcdFx0XHRcdFx0XHRuZXdFbC5uYW1lID0gYCR7Y3VycmVudC5uYW1lIHx8IGRhdGEubmFtZX0uJHtuZXdFbC5uYW1lfWA7XG5cdFx0XHRcdFx0XHRcdFx0c3ViZ3JvdXBSYXcuYXBwZW5kKG5ld0VsKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJncm91cCA9IHN1Ymdyb3VwUmF3LnJlbmRlcihjdXJJZCk7XG5cdFx0XHRcdFx0XHRcdHN1Ymdyb3VwLmNsYXNzTmFtZSA9ICdxdWlja2Zvcm1TdWJncm91cCc7XG5cdFx0XHRcdFx0XHRcdHN1Ym5vZGUuc3ViZ3JvdXAgPSBzdWJncm91cDtcblx0XHRcdFx0XHRcdFx0c3Vibm9kZS5zaG93biA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRldmVudCA9IChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGUudGFyZ2V0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZS50YXJnZXQuc3ViZ3JvdXApO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LnR5cGUgPT09ICdyYWRpbycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qge25hbWV9ID0gZS50YXJnZXQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdLnN1Ymdyb3VwXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdID0gZS50YXJnZXQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGUudGFyZ2V0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS50YXJnZXQuc3ViZ3JvdXApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0c3Vibm9kZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBldmVudCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50LmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRzdWJub2RlLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoc3ViZ3JvdXApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ3JhZGlvJykge1xuXHRcdFx0XHRcdFx0XHRldmVudCA9IChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHtuYW1lfSA9IGUudGFyZ2V0O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmZvcm0ubmFtZXNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS50YXJnZXQuZm9ybS5uYW1lc1tuYW1lXS5zdWJncm91cFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGUudGFyZ2V0LmZvcm0ubmFtZXNbbmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGV2ZW50LCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIGFkZCB1c2VycycgZXZlbnQgbGFzdCwgc28gaXQgY2FuIGludGVyYWN0IHdpdGggdGhlIHN1Ymdyb3VwXG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5ldmVudCkge1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGRhdGEuZXZlbnQsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudC5ldmVudCkge1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGN1cnJlbnQuZXZlbnQsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5zaGlmdENsaWNrU3VwcG9ydCAmJiBkYXRhLnR5cGUgPT09ICdjaGVja2JveCcpIHtcblx0XHRcdFx0XHRNb3JlYml0cy5jaGVja2JveFNoaWZ0Q2xpY2tTdXBwb3J0KE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhub2RlLCBkYXRhLm5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIGlucHV0IGlzIGFjdHVhbGx5IGEgdGV4dC10eXBlLCBzbyBudW1iZXIgaGVyZSBpbmhlcml0cyB0aGUgc2FtZSBzdHVmZlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ2lucHV0Jzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnaWQnLCBgZGl2XyR7aWR9YCk7XG5cdFx0XHRcdC8vIEFkZCBoaWRkZW4gYXR0clxuXHRcdFx0XHRpZiAoZGF0YS5oaWRkZW4pIHtcblx0XHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVsKSB7XG5cdFx0XHRcdFx0bGFiZWwgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJykpO1xuXHRcdFx0XHRcdGxhYmVsLmFwcGVuZENoaWxkKE1vcmViaXRzLmNyZWF0ZUh0bWwoZGF0YS5sYWJlbCkpO1xuXHRcdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgZGF0YS5pZCB8fCBpZCk7XG5cdFx0XHRcdFx0Ly8gTm8gbWFyZ2luXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdWJub2RlID0gbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTtcblx0XHRcdFx0Ly8gQWRkIHZhbHVlIGFuZCBwbGFjZWhvbGRlciBhdHRyc1xuXHRcdFx0XHRpZiAoZGF0YS52YWx1ZSkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEudmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnBsYWNlaG9sZGVyKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJywgZGF0YS5wbGFjZWhvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYXRhLm5hbWUpO1xuXHRcdFx0XHRpZiAoZGF0YS50eXBlID09PSAnaW5wdXQnKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgJ251bWJlcicpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYXR0IG9mIFsnbWluJywgJ21heCcsICdzdGVwJywgJ2xpc3QnXSkge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGFbYXR0XSkge1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLnNldEF0dHJpYnV0ZShhdHQsIGRhdGFbYXR0XSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgYXR0IG9mIFsndmFsdWUnLCAnc2l6ZScsICdwbGFjZWhvbGRlcicsICdtYXhsZW5ndGgnXSkge1xuXHRcdFx0XHRcdGlmIChkYXRhW2F0dF0pIHtcblx0XHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKGF0dCwgZGF0YVthdHRdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBhdHQgb2YgWydkaXNhYmxlZCcsICdyZXF1aXJlZCcsICdyZWFkb25seSddKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFbYXR0XSkge1xuXHRcdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoYXR0LCBhdHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5ldmVudCkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBkYXRhLmV2ZW50LCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBzdWJub2RlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2R5bmlucHV0Jzoge1xuXHRcdFx0XHRjb25zdCBtaW4gPSBkYXRhLm1pbiB8fCAxO1xuXHRcdFx0XHRjb25zdCBtYXggPSBkYXRhLm1heCB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0bGFiZWwgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2g1JykpO1xuXHRcdFx0XHRsYWJlbC5hcHBlbmRDaGlsZChNb3JlYml0cy5jcmVhdGVIdG1sKGRhdGEubGFiZWwpKTtcblx0XHRcdFx0Y29uc3QgbGlzdE5vZGUgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblx0XHRcdFx0Y29uc3QgbW9yZSA9IHRoaXMuY29tcHV0ZSh7XG5cdFx0XHRcdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0XHRcdFx0bGFiZWw6ICfmm7TlpJonLFxuXHRcdFx0XHRcdGRpc2FibGVkOiBtaW4gPj0gbWF4LFxuXHRcdFx0XHRcdGV2ZW50OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3Tm9kZSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudChlLnRhcmdldC5zdWJsaXN0KTtcblx0XHRcdFx0XHRcdGUudGFyZ2V0LmFyZWEuYXBwZW5kQ2hpbGQobmV3Tm9kZS5yZW5kZXIoKSk7XG5cdFx0XHRcdFx0XHRpZiAoKytlLnRhcmdldC5jb3VudGVyID49IGUudGFyZ2V0Lm1heCkge1xuXHRcdFx0XHRcdFx0XHRlLnRhcmdldC5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRub2RlLmFwcGVuZENoaWxkKG1vcmVbMF0pO1xuXHRcdFx0XHRjb25zdCBbLCBtb3JlQnV0dG9uXSA9IG1vcmU7XG5cdFx0XHRcdGNvbnN0IHN1Ymxpc3QgPSB7XG5cdFx0XHRcdFx0dHlwZTogJ19keW5pbnB1dF9lbGVtZW50Jyxcblx0XHRcdFx0XHRsYWJlbDogZGF0YS5zdWJsYWJlbCB8fCBkYXRhLmxhYmVsLFxuXHRcdFx0XHRcdG5hbWU6IGRhdGEubmFtZSxcblx0XHRcdFx0XHR2YWx1ZTogZGF0YS52YWx1ZSxcblx0XHRcdFx0XHRzaXplOiBkYXRhLnNpemUsXG5cdFx0XHRcdFx0cmVtb3ZlOiBmYWxzZSxcblx0XHRcdFx0XHRtYXhsZW5ndGg6IGRhdGEubWF4bGVuZ3RoLFxuXHRcdFx0XHRcdGV2ZW50OiBkYXRhLmV2ZW50LFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWluOyArK2kpIHtcblx0XHRcdFx0XHRjb25zdCBlbGVtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHN1Ymxpc3QpO1xuXHRcdFx0XHRcdGxpc3ROb2RlLmFwcGVuZENoaWxkKGVsZW0ucmVuZGVyKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1Ymxpc3QucmVtb3ZlID0gdHJ1ZTtcblx0XHRcdFx0c3VibGlzdC5tb3JlYnV0dG9uID0gbW9yZUJ1dHRvbjtcblx0XHRcdFx0c3VibGlzdC5saXN0bm9kZSA9IGxpc3ROb2RlO1xuXHRcdFx0XHRtb3JlQnV0dG9uLnN1Ymxpc3QgPSBzdWJsaXN0O1xuXHRcdFx0XHRtb3JlQnV0dG9uLmFyZWEgPSBsaXN0Tm9kZTtcblx0XHRcdFx0bW9yZUJ1dHRvbi5tYXggPSBtYXggLSBtaW47XG5cdFx0XHRcdG1vcmVCdXR0b24uY291bnRlciA9IDA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnX2R5bmlucHV0X2VsZW1lbnQnOlxuXHRcdFx0XHQvLyBQcml2YXRlLCBzaW1pbGFyIHRvIG5vcm1hbCBpbnB1dFxuXHRcdFx0XHRub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVsKSB7XG5cdFx0XHRcdFx0bGFiZWwgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJykpO1xuXHRcdFx0XHRcdGxhYmVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRhdGEubGFiZWwpKTtcblx0XHRcdFx0XHRsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsIGlkKTtcblx0XHRcdFx0XHQvLyBObyBtYXJnaW5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN1Ym5vZGUgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpO1xuXHRcdFx0XHRpZiAoZGF0YS52YWx1ZSkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEudmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCduYW1lJywgZGF0YS5uYW1lKTtcblx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuXHRcdFx0XHRpZiAoZGF0YS5zaXplKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3NpemUnLCBkYXRhLnNpemUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLm1heGxlbmd0aCkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCBkYXRhLm1heGxlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEuZXZlbnQpIHtcblx0XHRcdFx0XHRzdWJub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZGF0YS5ldmVudCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnJlbW92ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHJlbW92ZSA9IHRoaXMuY29tcHV0ZSh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdGxhYmVsOiAn56e76ZmkJyxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gZS50YXJnZXQubGlzdG5vZGU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5vZGVfID0gZS50YXJnZXQuaW5wdXRub2RlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtb3JlID0gZS50YXJnZXQubW9yZWJ1dHRvbjtcblx0XHRcdFx0XHRcdFx0bGlzdC5yZW1vdmVDaGlsZChub2RlXyk7XG5cdFx0XHRcdFx0XHRcdC0tbW9yZS5jb3VudGVyO1xuXHRcdFx0XHRcdFx0XHRtb3JlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcblx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChyZW1vdmVbMF0pO1xuXHRcdFx0XHRcdGNvbnN0IFssIHJlbW92ZUJ1dHRvbl0gPSByZW1vdmU7XG5cdFx0XHRcdFx0cmVtb3ZlQnV0dG9uLmlucHV0bm9kZSA9IG5vZGU7XG5cdFx0XHRcdFx0cmVtb3ZlQnV0dG9uLmxpc3Rub2RlID0gZGF0YS5saXN0bm9kZTtcblx0XHRcdFx0XHRyZW1vdmVCdXR0b24ubW9yZWJ1dHRvbiA9IGRhdGEubW9yZWJ1dHRvbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2hpZGRlbic6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcblx0XHRcdFx0bm9kZS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBkYXRhLnZhbHVlKTtcblx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYXRhLm5hbWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2hlYWRlcic6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNScpO1xuXHRcdFx0XHRub2RlLmFwcGVuZENoaWxkKE1vcmViaXRzLmNyZWF0ZUh0bWwoZGF0YS5sYWJlbCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Rpdic6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0aWYgKGRhdGEubmFtZSkge1xuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCduYW1lJywgZGF0YS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5sYWJlbCkge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0XHRyZXN1bHQuY2xhc3NOYW1lID0gJ3F1aWNrZm9ybURlc2NyaXB0aW9uJztcblx0XHRcdFx0XHRyZXN1bHQuYXBwZW5kQ2hpbGQoTW9yZWJpdHMuY3JlYXRlSHRtbChkYXRhLmxhYmVsKSk7XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChyZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc3VibWl0Jzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpO1xuXHRcdFx0XHRjaGlsZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnc3VibWl0Jyk7XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVsKSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEubGFiZWwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNoaWxkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnbmFtZScsIGRhdGEubmFtZSB8fCAnc3VibWl0Jyk7XG5cdFx0XHRcdGlmIChkYXRhLmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYnV0dG9uJzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpO1xuXHRcdFx0XHRjaGlsZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVsKSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEubGFiZWwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNoaWxkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnbmFtZScsIGRhdGEubmFtZSk7XG5cdFx0XHRcdGlmIChkYXRhLmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLmV2ZW50KSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkYXRhLmV2ZW50LCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd0ZXh0YXJlYSc6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJywgYGRpdl8ke2lkfWApO1xuXHRcdFx0XHQvLyBBZGQgaGlkZGVuIGF0dHJcblx0XHRcdFx0aWYgKGRhdGEuaGlkZGVuKSB7XG5cdFx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICcnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5sYWJlbCkge1xuXHRcdFx0XHRcdGxhYmVsID0gbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNScpKTtcblx0XHRcdFx0XHRjb25zdCBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuXHRcdFx0XHRcdGxhYmVsRWxlbWVudC5hcHBlbmRDaGlsZChNb3JlYml0cy5jcmVhdGVIdG1sKGRhdGEubGFiZWwpKTtcblx0XHRcdFx0XHRsYWJlbEVsZW1lbnQuc2V0QXR0cmlidXRlKCdmb3InLCBkYXRhLmlkIHx8IGlkKTtcblx0XHRcdFx0XHRsYWJlbC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1Ym5vZGUgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJykpO1xuXHRcdFx0XHRzdWJub2RlLnNldEF0dHJpYnV0ZSgnbmFtZScsIGRhdGEubmFtZSk7XG5cdFx0XHRcdGlmIChkYXRhLmNvbHMpIHtcblx0XHRcdFx0XHRzdWJub2RlLnNldEF0dHJpYnV0ZSgnY29scycsIGRhdGEuY29scyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEucm93cykge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCdyb3dzJywgZGF0YS5yb3dzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5kaXNhYmxlZCkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnJlcXVpcmVkKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJ3JlcXVpcmVkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEucmVhZG9ubHkpIHtcblx0XHRcdFx0XHRzdWJub2RlLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAncmVhZG9ubHknKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS52YWx1ZSkge1xuXHRcdFx0XHRcdHN1Ym5vZGUudmFsdWUgPSBkYXRhLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEFkZCBwbGFjZWhvbGRlciBhdHRyXG5cdFx0XHRcdGlmIChkYXRhLnBsYWNlaG9sZGVyKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5wbGFjZWhvbGRlciA9IGRhdGEucGxhY2Vob2xkZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBzdWJub2RlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTW9yZWJpdHMucXVpY2tGb3JtOiB1bmtub3duIGVsZW1lbnQgdHlwZSAke2RhdGEudHlwZS50b1N0cmluZygpfWApO1xuXHRcdH1cblx0XHRjaGlsZENvbnRhaW5lciB8fD0gbm9kZTtcblx0XHRpZiAoZGF0YS50b29sdGlwKSB7XG5cdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudC5nZW5lcmF0ZVRvb2x0aXAobGFiZWwgfHwgbm9kZSwgZGF0YSk7XG5cdFx0fVxuXHRcdGlmIChkYXRhLmV4dHJhKSB7XG5cdFx0XHRjaGlsZENvbnRhaW5lci5leHRyYSA9IGRhdGEuZXh0cmE7XG5cdFx0fVxuXHRcdGlmIChkYXRhLiRkYXRhKSB7XG5cdFx0XHQkKGNoaWxkQ29udGFpbmVyKS5kYXRhKGRhdGEuJGRhdGEpO1xuXHRcdH1cblx0XHRpZiAoZGF0YS5zdHlsZSkge1xuXHRcdFx0Y2hpbGRDb250YWluZXIuc2V0QXR0cmlidXRlKCdzdHlsZScsIGRhdGEuc3R5bGUpO1xuXHRcdH1cblx0XHRpZiAoZGF0YS5jbGFzc05hbWUpIHtcblx0XHRcdGNoaWxkQ29udGFpbmVyLmNsYXNzTmFtZSA9IGNoaWxkQ29udGFpbmVyLmNsYXNzTmFtZVxuXHRcdFx0XHQ/IGAke2NoaWxkQ29udGFpbmVyLmNsYXNzTmFtZX0gJHtkYXRhLmNsYXNzTmFtZX1gXG5cdFx0XHRcdDogZGF0YS5jbGFzc05hbWU7XG5cdFx0fVxuXHRcdGNoaWxkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCBkYXRhLmlkIHx8IGlkKTtcblx0XHRyZXR1cm4gW25vZGUsIGNoaWxkQ29udGFpbmVyXTtcblx0fTtcblx0LyoqXG5cdCAqIENyZWF0ZSBhIGpRdWVyeSBVSS1iYXNlZCB0b29sdGlwLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnRcblx0ICogQHJlcXVpcmVzIGpxdWVyeS51aVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIEhUTUwgZWxlbWVudCBiZXNpZGUgd2hpY2ggYSB0b29sdGlwIGlzIHRvIGJlIGdlbmVyYXRlZC5cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUb29sdGlwLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBkYXRhLlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQuZ2VuZXJhdGVUb29sdGlwID0gKG5vZGUsIGRhdGEpID0+IHtcblx0XHRjb25zdCB0b29sdGlwQnV0dG9uID0gbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykpO1xuXHRcdHRvb2x0aXBCdXR0b24uY2xhc3NOYW1lID0gJ21vcmViaXRzLXRvb2x0aXBCdXR0b24nO1xuXHRcdHRvb2x0aXBCdXR0b24udGl0bGUgPSBkYXRhLnRvb2x0aXA7IC8vIFByb3ZpZGVzIHRoZSBjb250ZW50IGZvciBqUXVlcnkgVUlcblx0XHR0b29sdGlwQnV0dG9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCc/JykpO1xuXHRcdCQodG9vbHRpcEJ1dHRvbikudG9vbHRpcCh7XG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRteTogJ2xlZnQgdG9wJyxcblx0XHRcdFx0YXQ6ICdjZW50ZXIgYm90dG9tJyxcblx0XHRcdFx0Y29sbGlzaW9uOiAnZmxpcGZpdCcsXG5cdFx0XHR9LFxuXHRcdFx0Ly8gRGVwcmVjYXRlZCBpbiBVSSAxLjEyLCBidXQgTVcgc3R1Y2sgb24gMS45LjIgaW5kZWZpbml0ZWx5OyBzZWUgIzM5OCBhbmQgVDcxMzg2XG5cdFx0XHR0b29sdGlwQ2xhc3M6ICdtb3JlYml0cy11aS10b29sdGlwJyxcblx0XHR9KTtcblx0fTtcblx0Ly8gU29tZSB1dGlsaXR5IG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBxdWlja0Zvcm1zIGFmdGVyIHRoZWlyIGNyZWF0aW9uOlxuXHQvLyAoTm9uZSBvZiB0aGVzZSB3b3JrIGZvciBcImR5bmlucHV0XCIgdHlwZSBmaWVsZHMgYXQgcHJlc2VudClcblx0LyoqXG5cdCAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGZpbGxlZCBmb3JtIGRhdGEgZW50ZXJlZCBieSB0aGUgdXNlciwgd2l0aCB0aGUgb2JqZWN0XG5cdCAqIGtleXMgYmVpbmcgdGhlIGZvcm0gZWxlbWVudCBuYW1lcy4gRGlzYWJsZWQgZmllbGRzIHdpbGwgYmUgaWdub3JlZCwgYnV0IG5vdCBoaWRkZW4gZmllbGRzLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7SFRNTEZvcm1FbGVtZW50fSBmb3JtXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IFdpdGggZmllbGQgbmFtZXMgYXMga2V5cywgaW5wdXQgZGF0YSBhcyB2YWx1ZXMuXG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0uZ2V0SW5wdXREYXRhID0gKGZvcm0pID0+IHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZvcm0uZWxlbWVudHMpIHtcblx0XHRcdGlmIChmaWVsZC5kaXNhYmxlZCB8fCAhZmllbGQubmFtZSB8fCAhZmllbGQudHlwZSB8fCBmaWVsZC50eXBlID09PSAnc3VibWl0JyB8fCBmaWVsZC50eXBlID09PSAnYnV0dG9uJykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdC8vIEZvciBlbGVtZW50cyBpbiBzdWJncm91cHMsIHF1aWNrZm9ybSBwcmVwZW5kcyBlbGVtZW50IG5hbWVzIHdpdGhcblx0XHRcdC8vIG5hbWUgb2YgdGhlIHBhcmVudCBncm91cCBmb2xsb3dlZCBieSBhIHBlcmlvZCwgZ2V0IHJpZCBvZiB0aGF0LlxuXHRcdFx0Y29uc3QgZmllbGROYW1lTm9ybSA9IGZpZWxkLm5hbWUuc2xpY2UoZmllbGQubmFtZS5pbmRleE9mKCcuJykgKyAxKTtcblx0XHRcdHN3aXRjaCAoZmllbGQudHlwZSkge1xuXHRcdFx0XHRjYXNlICdyYWRpbyc6XG5cdFx0XHRcdFx0aWYgKGZpZWxkLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdHJlc3VsdFtmaWVsZE5hbWVOb3JtXSA9IGZpZWxkLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnY2hlY2tib3gnOlxuXHRcdFx0XHRcdGlmIChmaWVsZC5kYXRhc2V0LnNpbmdsZSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0W2ZpZWxkTmFtZU5vcm1dID0gZmllbGQuY2hlY2tlZDsgLy8gYm9vbGVhblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRbZmllbGROYW1lTm9ybV0gfHw9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0W2ZpZWxkTmFtZU5vcm1dW3Jlc3VsdFtmaWVsZE5hbWVOb3JtXS5sZW5ndGhdID0gZmllbGQudmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdzZWxlY3QtbXVsdGlwbGUnOlxuXHRcdFx0XHRcdHJlc3VsdFtmaWVsZE5hbWVOb3JtXSA9ICQoZmllbGQpLnZhbCgpOyAvLyBmaWVsZC52YWx1ZSBkb2Vzbid0IHdvcmtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndGV4dCc6IC8vIGZhbGxzIHRocm91Z2hcblx0XHRcdFx0Y2FzZSAndGV4dGFyZWEnOlxuXHRcdFx0XHRcdHJlc3VsdFtmaWVsZE5hbWVOb3JtXSA9IGZpZWxkLnZhbHVlLnRyaW0oKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBjb3VsZCBiZSBzZWxlY3Qtb25lLCBkYXRlLCBudW1iZXIsIGVtYWlsLCBldGNcblx0XHRcdFx0XHRpZiAoZmllbGQudmFsdWUpIHtcblx0XHRcdFx0XHRcdHJlc3VsdFtmaWVsZE5hbWVOb3JtXSA9IGZpZWxkLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblx0LyoqXG5cdCAqIFJldHVybnMgYWxsIGZvcm0gZWxlbWVudHMgd2l0aCBhIGdpdmVuIGZpZWxkIG5hbWUgb3IgSUQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5xdWlja0Zvcm1cblx0ICogQHBhcmFtIHtIVE1MRm9ybUVsZW1lbnR9IGZvcm1cblx0ICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSAtIFRoZSBuYW1lIG9yIGlkIG9mIHRoZSBmaWVsZHMuXG5cdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudFtdfSAtIEFycmF5IG9mIG1hdGNoaW5nIGZvcm0gZWxlbWVudHMuXG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMgPSAoZm9ybSwgZmllbGROYW1lKSA9PiB7XG5cdFx0Y29uc3QgJGZvcm0gPSAkKGZvcm0pO1xuXHRcdGZpZWxkTmFtZSA9ICQuZXNjYXBlU2VsZWN0b3IoZmllbGROYW1lKTsgLy8gc2FuaXRpemUgaW5wdXRcblx0XHRsZXQgJGVsZW1lbnRzID0gJGZvcm0uZmluZChgW25hbWU9XCIke2ZpZWxkTmFtZX1cIl1gKTtcblx0XHRpZiAoJGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiAkZWxlbWVudHMudG9BcnJheSgpO1xuXHRcdH1cblx0XHQkZWxlbWVudHMgPSAkZm9ybS5maW5kKGAjJHtmaWVsZE5hbWV9YCk7XG5cdFx0cmV0dXJuICRlbGVtZW50cy50b0FycmF5KCk7XG5cdH07XG5cdC8qKlxuXHQgKiBTZWFyY2hlcyB0aGUgYXJyYXkgb2YgZWxlbWVudHMgZm9yIGEgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uIHdpdGggYSBjZXJ0YWluXG5cdCAqIGB2YWx1ZWAgYXR0cmlidXRlLCBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgc3VjaCBlbGVtZW50LiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudFtdfSBlbGVtZW50QXJyYXkgLSBBcnJheSBvZiBjaGVja2JveCBvciByYWRpbyBlbGVtZW50cy5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVmFsdWUgdG8gc2VhcmNoIGZvci5cblx0ICogQHJldHVybnMge0hUTUxJbnB1dEVsZW1lbnR9XG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0uZ2V0Q2hlY2tib3hPclJhZGlvID0gKGVsZW1lbnRBcnJheSwgdmFsdWUpID0+IHtcblx0XHRjb25zdCBmb3VuZCA9IGVsZW1lbnRBcnJheS5maWx0ZXIoKGVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBlbGVtZW50LnZhbHVlID09PSB2YWx1ZTtcblx0XHR9KTtcblx0XHRpZiAoZm91bmQubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGZvdW5kWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlICZsdDtkaXY+IGNvbnRhaW5pbmcgdGhlIGZvcm0gZWxlbWVudCwgb3IgdGhlIGZvcm0gZWxlbWVudCBpdHNlbGZcblx0ICogTWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkIG9uIGNoZWNrYm94ZXMgb3IgcmFkaW9zLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmdldEVsZW1lbnRDb250YWluZXIgPSAoZWxlbWVudCkgPT4ge1xuXHRcdC8vIGZvciBkaXZzLCBoZWFkaW5ncyBhbmQgZmllbGRzZXRzLCB0aGUgY29udGFpbmVyIGlzIHRoZSBlbGVtZW50IGl0c2VsZlxuXHRcdGlmIChcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRmllbGRTZXRFbGVtZW50IHx8XG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnQgfHxcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnRcblx0XHQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHQvLyBmb3Igb3RoZXJzLCBqdXN0IHJldHVybiB0aGUgcGFyZW50IG5vZGVcblx0XHRyZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlO1xuXHR9O1xuXHQvKipcblx0ICogR2V0cyB0aGUgSFRNTCBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGxhYmVsIG9mIHRoZSBnaXZlbiBmb3JtIGVsZW1lbnRcblx0ICogKG1haW5seSBmb3IgaW50ZXJuYWwgdXNlKS5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCl9IGVsZW1lbnRcblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmdldEVsZW1lbnRMYWJlbE9iamVjdCA9IChlbGVtZW50KSA9PiB7XG5cdFx0Ly8gZm9yIGJ1dHRvbnMsIGRpdnMgYW5kIGhlYWRlcnMsIHRoZSBsYWJlbCBpcyBvbiB0aGUgZWxlbWVudCBpdHNlbGZcblx0XHRpZiAoXG5cdFx0XHRlbGVtZW50LnR5cGUgPT09ICdidXR0b24nIHx8XG5cdFx0XHRlbGVtZW50LnR5cGUgPT09ICdzdWJtaXQnIHx8XG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnQgfHxcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnRcblx0XHQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0Ly8gZm9yIGZpZWxkc2V0cywgdGhlIGxhYmVsIGlzIHRoZSBjaGlsZCA8bGVnZW5kPiBlbGVtZW50XG5cdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEZpZWxkU2V0RWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcignbGVnZW5kJyk7XG5cdFx0XHQvLyBmb3IgdGV4dGFyZWFzLCB0aGUgbGFiZWwgaXMgdGhlIHNpYmxpbmcgPGg1PiBlbGVtZW50XG5cdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCdoNScpO1xuXHRcdH1cblx0XHQvLyBmb3Igb3RoZXJzLCB0aGUgbGFiZWwgaXMgdGhlIHNpYmxpbmcgPGxhYmVsPiBlbGVtZW50XG5cdFx0cmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCdsYWJlbCcpO1xuXHR9O1xuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgdGV4dCBvZiB0aGUgZWxlbWVudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCl9IGVsZW1lbnRcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50TGFiZWwgPSAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IGxhYmVsRWxlbWVudCA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50TGFiZWxPYmplY3QoZWxlbWVudCk7XG5cdFx0aWYgKCFsYWJlbEVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gbGFiZWxFbGVtZW50LmZpcnN0Q2hpbGQudGV4dENvbnRlbnQ7XG5cdH07XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBsYWJlbCBvZiB0aGUgZWxlbWVudCB0byB0aGUgZ2l2ZW4gdGV4dC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCl9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsVGV4dFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBzdWNjZWVkZWQsIGZhbHNlIGlmIHRoZSBsYWJlbCBlbGVtZW50IGlzIHVuYXZhaWxhYmxlLlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRMYWJlbCA9IChlbGVtZW50LCBsYWJlbFRleHQpID0+IHtcblx0XHRjb25zdCBsYWJlbEVsZW1lbnQgPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudExhYmVsT2JqZWN0KGVsZW1lbnQpO1xuXHRcdGlmICghbGFiZWxFbGVtZW50KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGxhYmVsRWxlbWVudC5maXJzdENoaWxkLnRleHRDb250ZW50ID0gbGFiZWxUZXh0O1xuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXHQvKipcblx0ICogU3RvcmVzIHRoZSBlbGVtZW50J3MgY3VycmVudCBsYWJlbCwgYW5kIHRlbXBvcmFyaWx5IHNldHMgdGhlIGxhYmVsIHRvIHRoZSBnaXZlbiB0ZXh0LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KX0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGVtcG9yYXJ5TGFiZWxUZXh0XG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgc3VjY2VlZGVkLCBgZmFsc2VgIGlmIHRoZSBsYWJlbCBlbGVtZW50IGlzIHVuYXZhaWxhYmxlLlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLm92ZXJyaWRlRWxlbWVudExhYmVsID0gKGVsZW1lbnQsIHRlbXBvcmFyeUxhYmVsVGV4dCkgPT4ge1xuXHRcdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtb2xkbGFiZWwnKSkge1xuXHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb2xkbGFiZWwnLCBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudExhYmVsKGVsZW1lbnQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIE1vcmViaXRzLnF1aWNrRm9ybS5zZXRFbGVtZW50TGFiZWwoZWxlbWVudCwgdGVtcG9yYXJ5TGFiZWxUZXh0KTtcblx0fTtcblx0LyoqXG5cdCAqIFJlc3RvcmVzIHRoZSBsYWJlbCBzdG9yZWQgYnkgb3ZlcnJpZGVFbGVtZW50TGFiZWwuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5xdWlja0Zvcm1cblx0ICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQpfSBlbGVtZW50XG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHN1Y2NlZWRlZCwgZmFsc2UgaWYgdGhlIGxhYmVsIGVsZW1lbnQgaXMgdW5hdmFpbGFibGUuXG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0ucmVzZXRFbGVtZW50TGFiZWwgPSAoZWxlbWVudCkgPT4ge1xuXHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1vbGRsYWJlbCcpKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRMYWJlbChlbGVtZW50LCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vbGRsYWJlbCcpKTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cdC8qKlxuXHQgKiBTaG93cyBvciBoaWRlcyBhIGZvcm0gZWxlbWVudCBwbHVzIGl0cyBsYWJlbCBhbmQgdG9vbHRpcC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxqUXVlcnl8c3RyaW5nKX0gZWxlbWVudCAtIEhUTUwvalF1ZXJ5IGVsZW1lbnQsIG9yIGpRdWVyeSBzZWxlY3RvciBzdHJpbmcuXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2liaWxpdHldIC0gU2tpcCB0aGlzIHRvIHRvZ2dsZSB2aXNpYmlsaXR5LlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5ID0gKGVsZW1lbnQsIHZpc2liaWxpdHkpID0+IHtcblx0XHQkKGVsZW1lbnQpLnRvZ2dsZSh2aXNpYmlsaXR5KTtcblx0fTtcblx0LyoqXG5cdCAqIFNob3dzIG9yIGhpZGVzIHRoZSBxdWVzdGlvbiBtYXJrIGljb24gKHdoaWNoIGRpc3BsYXlzIHRoZSB0b29sdGlwKSBuZXh0IHRvIGEgZm9ybSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJpbGl0eV0gLSBTa2lwIHRoaXMgdG8gdG9nZ2xlIHZpc2liaWxpdHkuXG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFRvb2x0aXBWaXNpYmlsaXR5ID0gKGVsZW1lbnQsIHZpc2liaWxpdHkpID0+IHtcblx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50Q29udGFpbmVyKGVsZW1lbnQpKS5maW5kKCcubW9yZWJpdHMtdG9vbHRpcEJ1dHRvbicpLnRvZ2dsZSh2aXNpYmlsaXR5KTtcblx0fTtcblx0LyoqXG5cdCAqIEBleHRlcm5hbCBIVE1MRm9ybUVsZW1lbnRcblx0ICovXG5cdC8qKlxuXHQgKiBHZXQgY2hlY2tlZCBpdGVtcyBpbiB0aGUgZm9ybS5cblx0ICpcblx0ICogQGZ1bmN0aW9uIGV4dGVybmFsOkhUTUxGb3JtRWxlbWVudC5nZXRDaGVja2VkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRmluZCBjaGVja2VkIHByb3BlcnR5IG9mIGVsZW1lbnRzIChpLmUuIGEgY2hlY2tib3hcblx0ICogb3IgYSByYWRpb2J1dHRvbikgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3Igc2VsZWN0IG9wdGlvbnMgdGhhdCBoYXZlIHNlbGVjdGVkXG5cdCAqIHNldCB0byB0cnVlIChkb24ndCB0cnkgdG8gbWl4IHNlbGVjdHMgd2l0aCByYWRpby9jaGVja2JveGVzKS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlXSAtIE9wdGlvbmFsbHkgc3BlY2lmeSBlaXRoZXIgcmFkaW8gb3IgY2hlY2tib3ggKGZvclxuXHQgKiB0aGUgZXZlbnQgdGhhdCBib3RoIGNoZWNrYm94ZXMgYW5kIHJhZGlvYnV0dG9ucyBoYXZlIHRoZSBzYW1lIG5hbWUpLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nW119IC0gQ29udGFpbnMgdGhlIHZhbHVlcyBvZiBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiBuYW1lXG5cdCAqIGNoZWNrZWQgcHJvcGVydHkgc2V0IHRvIHRydWUuXG5cdCAqL1xuXHRIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmdldENoZWNrZWQgPSBmdW5jdGlvbiAobmFtZSwgdHlwZSkge1xuXHRcdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5lbGVtZW50c1tuYW1lXTtcblx0XHRpZiAoIWVsZW1lbnRzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdGNvbnN0IHJldHVybkFycmF5ID0gW107XG5cdFx0bGV0IGk7XG5cdFx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHtvcHRpb25zfSA9IGVsZW1lbnRzO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKG9wdGlvbnNbaV0uc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRpZiAob3B0aW9uc1tpXS52YWx1ZXMpIHtcblx0XHRcdFx0XHRcdHJldHVybkFycmF5W3JldHVybkFycmF5Lmxlbmd0aF0gPSBvcHRpb25zW2ldLnZhbHVlcztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IG9wdGlvbnNbaV0udmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdGlmICh0eXBlICYmIGVsZW1lbnRzLnR5cGUgIT09IHR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50cy5jaGVja2VkKSB7XG5cdFx0XHRcdHJldHVybiBbZWxlbWVudHMudmFsdWVdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGVsZW1lbnRzW2ldLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRpZiAodHlwZSAmJiBlbGVtZW50c1tpXS50eXBlICE9PSB0eXBlKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzW2ldLnZhbHVlcykge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IGVsZW1lbnRzW2ldLnZhbHVlcztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IGVsZW1lbnRzW2ldLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0dXJuQXJyYXk7XG5cdH07XG5cdC8qKlxuXHQgKiBEb2VzIHRoZSBzYW1lIGFzIHtAbGluayBIVE1MRm9ybUVsZW1lbnQuZ2V0Q2hlY2tlZHxnZXRDaGVja2VkfSwgYnV0IHdpdGggdW5jaGVja2VkIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb24gZXh0ZXJuYWw6SFRNTEZvcm1FbGVtZW50LmdldFVuY2hlY2tlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEZpbmQgY2hlY2tlZCBwcm9wZXJ0eSBvZiBlbGVtZW50cyAoaS5lLiBhIGNoZWNrYm94XG5cdCAqIG9yIGEgcmFkaW9idXR0b24pIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIHNlbGVjdCBvcHRpb25zIHRoYXQgaGF2ZSBzZWxlY3RlZFxuXHQgKiBzZXQgdG8gdHJ1ZSAoZG9uJ3QgdHJ5IHRvIG1peCBzZWxlY3RzIHdpdGggcmFkaW8vY2hlY2tib3hlcykuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZV0gLSBPcHRpb25hbGx5IHNwZWNpZnkgZWl0aGVyIHJhZGlvIG9yIGNoZWNrYm94IChmb3Jcblx0ICogdGhlIGV2ZW50IHRoYXQgYm90aCBjaGVja2JveGVzIGFuZCByYWRpb2J1dHRvbnMgaGF2ZSB0aGUgc2FtZSBuYW1lKS5cblx0ICogQHJldHVybnMge3N0cmluZ1tdfSAtIENvbnRhaW5zIHRoZSB2YWx1ZXMgb2YgZWxlbWVudHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZVxuXHQgKiBjaGVja2VkIHByb3BlcnR5IHNldCB0byB0cnVlLlxuXHQgKi9cblx0SFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5nZXRVbmNoZWNrZWQgPSBmdW5jdGlvbiAobmFtZSwgdHlwZSkge1xuXHRcdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5lbGVtZW50c1tuYW1lXTtcblx0XHRpZiAoIWVsZW1lbnRzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdGNvbnN0IHJldHVybkFycmF5ID0gW107XG5cdFx0bGV0IGk7XG5cdFx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHtvcHRpb25zfSA9IGVsZW1lbnRzO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKCFvcHRpb25zW2ldLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnNbaV0udmFsdWVzKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm5BcnJheVtyZXR1cm5BcnJheS5sZW5ndGhdID0gb3B0aW9uc1tpXS52YWx1ZXM7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybkFycmF5W3JldHVybkFycmF5Lmxlbmd0aF0gPSBvcHRpb25zW2ldLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0XHRpZiAodHlwZSAmJiBlbGVtZW50cy50eXBlICE9PSB0eXBlKSB7XG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH0gZWxzZSBpZiAoIWVsZW1lbnRzLmNoZWNrZWQpIHtcblx0XHRcdFx0cmV0dXJuIFtlbGVtZW50cy52YWx1ZV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoIWVsZW1lbnRzW2ldLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRpZiAodHlwZSAmJiBlbGVtZW50c1tpXS50eXBlICE9PSB0eXBlKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzW2ldLnZhbHVlcykge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IGVsZW1lbnRzW2ldLnZhbHVlcztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IGVsZW1lbnRzW2ldLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0dXJuQXJyYXk7XG5cdH07XG5cdC8qKlxuXHQgKiBVdGlsaXRpZXMgdG8gaGVscCBwcm9jZXNzIElQIGFkZHJlc3Nlcy5cblx0ICpcblx0ICogQG5hbWVzcGFjZSBNb3JlYml0cy5pcFxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICovXG5cdE1vcmViaXRzLmlwID0ge1xuXHRcdC8qKlxuXHRcdCAqIENvbnZlcnRzIGFuIElQdjYgYWRkcmVzcyB0byB0aGUgY2Fub25pY2FsIGZvcm0gc3RvcmVkIGFuZCB1c2VkIGJ5IE1lZGlhV2lraS5cblx0XHQgKiBKYXZhU2NyaXB0IHRyYW5zbGF0aW9uIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9nZXJyaXQud2lraW1lZGlhLm9yZy9yL3BsdWdpbnMvZ2l0aWxlcy9tZWRpYXdpa2kvY29yZS8rLzhlYjZhYzNlODRlYTMzMTJkMzkxY2E5NmMxMmM0OWUzYWQwNzUzYmIvaW5jbHVkZXMvdXRpbHMvSVAucGhwIzEzMXxgSVA6OnNhbml0aXplSVAoKWB9XG5cdFx0ICogZnVuY3Rpb24gZnJvbSB0aGUgSVBVdGlscyBsaWJyYXJ5LiAgQWRkcmVzc2VzIGFyZSB2ZXJib3NlLCB1cHBlcmNhc2UsXG5cdFx0ICogbm9ybWFsaXplZCwgYW5kIGV4cGFuZGVkIHRvIDggd29yZHMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBJUHY2IGFkZHJlc3MsIHdpdGggb3Igd2l0aG91dCBDSURSLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0c2FuaXRpemVJUHY2OiAoYWRkcmVzcykgPT4ge1xuXHRcdFx0YWRkcmVzcyA9IGFkZHJlc3MudHJpbSgpO1xuXHRcdFx0aWYgKGFkZHJlc3MgPT09ICcnKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFtdy51dGlsLmlzSVB2NkFkZHJlc3MoYWRkcmVzcywgdHJ1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIGFkZHJlc3M7IC8vIG5vdGhpbmcgZWxzZSB0byBkbyBmb3IgSVB2NCBhZGRyZXNzZXMgb3IgaW52YWxpZCBvbmVzXG5cdFx0XHR9XG5cdFx0XHQvLyBSZW1vdmUgYW55IHdoaXRlc3BhY2VzLCBjb252ZXJ0IHRvIHVwcGVyIGNhc2Vcblx0XHRcdGFkZHJlc3MgPSBhZGRyZXNzLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHQvLyBFeHBhbmQgemVybyBhYmJyZXZpYXRpb25zXG5cdFx0XHRjb25zdCBhYmJyZXZQb3MgPSBhZGRyZXNzLmluZGV4T2YoJzo6Jyk7XG5cdFx0XHRpZiAoYWJicmV2UG9zID4gLTEpIHtcblx0XHRcdFx0Ly8gV2Uga25vdyB0aGlzIGlzIHZhbGlkIElQdjYuIEZpbmQgdGhlIGxhc3QgaW5kZXggb2YgdGhlXG5cdFx0XHRcdC8vIGFkZHJlc3MgYmVmb3JlIGFueSBDSURSIG51bWJlciAoZS5nLiBcImE6YjpjOjovMjRcIikuXG5cdFx0XHRcdGNvbnN0IENJRFJTdGFydCA9IGFkZHJlc3MuaW5kZXhPZignLycpO1xuXHRcdFx0XHRjb25zdCBhZGRyZXNzRW5kID0gQ0lEUlN0YXJ0ID09PSAtMSA/IGFkZHJlc3MubGVuZ3RoIC0gMSA6IENJRFJTdGFydCAtIDE7XG5cdFx0XHRcdC8vIElmIHRoZSAnOjonIGlzIGF0IHRoZSBiZWdpbm5pbmcuLi5cblx0XHRcdFx0bGV0IHJlcGVhdDtcblx0XHRcdFx0bGV0IGV4dHJhO1xuXHRcdFx0XHRsZXQgcGFkO1xuXHRcdFx0XHRpZiAoYWJicmV2UG9zID09PSAwKSB7XG5cdFx0XHRcdFx0cmVwZWF0ID0gJzA6Jztcblx0XHRcdFx0XHRleHRyYSA9IGFkZHJlc3MgPT09ICc6OicgPyAnMCcgOiAnJzsgLy8gZm9yIHRoZSBhZGRyZXNzICc6Oidcblx0XHRcdFx0XHRwYWQgPSA5OyAvLyA3KzIgKGR1ZSB0byAnOjonKVxuXHRcdFx0XHRcdC8vIElmIHRoZSAnOjonIGlzIGF0IHRoZSBlbmQuLi5cblx0XHRcdFx0fSBlbHNlIGlmIChhYmJyZXZQb3MgPT09IGFkZHJlc3NFbmQgLSAxKSB7XG5cdFx0XHRcdFx0cmVwZWF0ID0gJzowJztcblx0XHRcdFx0XHRleHRyYSA9ICcnO1xuXHRcdFx0XHRcdHBhZCA9IDk7IC8vIDcrMiAoZHVlIHRvICc6OicpXG5cdFx0XHRcdFx0Ly8gSWYgdGhlICc6OicgaXMgaW4gdGhlIG1pZGRsZS4uLlxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlcGVhdCA9ICc6MCc7XG5cdFx0XHRcdFx0ZXh0cmEgPSAnOic7XG5cdFx0XHRcdFx0cGFkID0gODsgLy8gNisyIChkdWUgdG8gJzo6Jylcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCByZXBsYWNlbWVudCA9IHJlcGVhdDtcblx0XHRcdFx0cGFkIC09IGFkZHJlc3Muc3BsaXQoJzonKS5sZW5ndGggLSAxO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHBhZDsgaSsrKSB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQgKz0gcmVwZWF0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlcGxhY2VtZW50ICs9IGV4dHJhO1xuXHRcdFx0XHRhZGRyZXNzID0gYWRkcmVzcy5yZXBsYWNlKCc6OicsIHJlcGxhY2VtZW50KTtcblx0XHRcdH1cblx0XHRcdC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGZyb20gZWFjaCBibG9jIGFzIG5lZWRlZFxuXHRcdFx0cmV0dXJuIGFkZHJlc3MucmVwbGFjZSgvKF58OikwKyhbMC05QS1GYS1mXXsxLDR9KS9nLCAnJDEkMicpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBJUCBhZGRyZXNzIGlzIGEgcmFuZ2UuICBKdXN0IGNvbmpvaW5zXG5cdFx0ICogYG13LnV0aWwuaXNJUEFkZHJlc3NgIHdpdGggYW5kIHdpdGhvdXQgdGhlIGBhbGxvd0Jsb2NrYCBvcHRpb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaXBcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUcnVlIGlmIGdpdmVuIGEgdmFsaWQgSVAgYWRkcmVzcyByYW5nZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHRcdCAqL1xuXHRcdGlzUmFuZ2U6IChpcCkgPT4ge1xuXHRcdFx0cmV0dXJuIG13LnV0aWwuaXNJUEFkZHJlc3MoaXAsIHRydWUpICYmICFtdy51dGlsLmlzSVBBZGRyZXNzKGlwKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIENoZWNrIHRoYXQgYW4gSVAgcmFuZ2UgaXMgd2l0aGluIHRoZSBDSURSIGxpbWl0cy4gIE1vc3QgbGlrZWx5IHRvIGJlIHVzZWZ1bFxuXHRcdCAqIGluIGNvbmp1bmN0aW9uIHdpdGggYHdnUmVsZXZhbnRVc2VyTmFtZWAuICBDSURSIGxpbWl0cyBhcmUgaGFyZGNvZGVkIGFzIC8xNlxuXHRcdCAqIGZvciBJUHY0IGFuZCAvMzIgZm9yIElQdjYuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaXBcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUcnVlIGZvciB2YWxpZCByYW5nZXMgd2l0aGluIHRoZSBDSURSIGxpbWl0cyxcblx0XHQgKiBvdGhlcndpc2UgZmFsc2UgKHJhbmdlcyBvdXRzaWRlIHRoZSBsaW1pdCwgc2luZ2xlIElQcywgbm9uLUlQcykuXG5cdFx0ICovXG5cdFx0dmFsaWRDSURSOiAoaXApID0+IHtcblx0XHRcdGlmIChNb3JlYml0cy5pcC5pc1JhbmdlKGlwKSkge1xuXHRcdFx0XHRjb25zdCBzdWJuZXQgPSBOdW1iZXIucGFyc2VJbnQoaXAubWF0Y2goL1xcLyhcXGR7MSwzfSkkLylbMV0sIDEwKTtcblx0XHRcdFx0aWYgKHN1Ym5ldCkge1xuXHRcdFx0XHRcdC8vIFNob3VsZCBiZSByZWR1bmRhbnRcblx0XHRcdFx0XHRpZiAobXcudXRpbC5pc0lQdjZBZGRyZXNzKGlwLCB0cnVlKSkge1xuXHRcdFx0XHRcdFx0aWYgKHN1Ym5ldCA+PSAzMikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKHN1Ym5ldCA+PSAxNikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBHZXQgdGhlIC82NCBzdWJuZXQgZm9yIGFuIElQdjYgYWRkcmVzcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBpcHY2IC0gVGhlIElQdjYgYWRkcmVzcywgd2l0aCBvciB3aXRob3V0IGEgc3VibmV0LlxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufHN0cmluZ30gLSBGYWxzZSBpZiBub3QgSVB2NiBvciBiaWdnZXIgdGhhbiBhIDY0LFxuXHRcdCAqIG90aGVyd2lzZSB0aGUgKHNhbml0aXplZCkgLzY0IGFkZHJlc3MuXG5cdFx0ICovXG5cdFx0Z2V0NjQ6IChpcHY2KSA9PiB7XG5cdFx0XHRpZiAoIWlwdjYgfHwgIW13LnV0aWwuaXNJUHY2QWRkcmVzcyhpcHY2LCB0cnVlKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdWJuZXRNYXRjaCA9IGlwdjYubWF0Y2goL1xcLyhcXGR7MSwzfSkkLyk7XG5cdFx0XHRpZiAoc3VibmV0TWF0Y2ggJiYgTnVtYmVyLnBhcnNlSW50KHN1Ym5ldE1hdGNoWzFdLCAxMCkgPCA2NCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpcHY2ID0gTW9yZWJpdHMuaXAuc2FuaXRpemVJUHY2KGlwdjYpO1xuXHRcdFx0Y29uc3QgaXBSZWdleCA9IC9eKCg/OlswLTlBLUZdezEsNH06KXs0fSkoPzpbMC05QS1GXXsxLDR9Oil7M31bMC05QS1GXXsxLDR9KD86XFwvXFxkezEsM30pPyQvO1xuXHRcdFx0cmV0dXJuIGlwdjYucmVwbGFjZShpcFJlZ2V4LCAnJDEnLmNvbmNhdCgnMDowOjA6MC82NCcpKTtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogSGVscGVyIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHN0cmluZ3MuXG5cdCAqXG5cdCAqIEBuYW1lc3BhY2UgTW9yZWJpdHMuc3RyaW5nXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKi9cblx0TW9yZWJpdHMuc3RyaW5nID0ge1xuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRvVXBwZXJDYXNlRmlyc3RDaGFyOiAoc3RyKSA9PiB7XG5cdFx0XHRzdHIgPSBzdHIudG9TdHJpbmcoKTtcblx0XHRcdHJldHVybiBzdHIuc2xpY2UoMCwgMSkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRvTG93ZXJDYXNlRmlyc3RDaGFyOiAoc3RyKSA9PiB7XG5cdFx0XHRzdHIgPSBzdHIudG9TdHJpbmcoKTtcblx0XHRcdHJldHVybiBzdHIuc2xpY2UoMCwgMSkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEdpdmVzIGFuIGFycmF5IG9mIHN1YnN0cmluZ3Mgb2YgYHN0cmAgLSBzdGFydGluZyB3aXRoIGBzdGFydGAgYW5kXG5cdFx0ICogZW5kaW5nIHdpdGggYGVuZGAgLSB3aGljaCBpcyBub3QgaW4gYHNraXBsaXN0YC4gIEludGVuZGVkIGZvciB1c2Vcblx0XHQgKiBvbiB3aWtpdGV4dCB3aXRoIHRlbXBsYXRlcyBvciBsaW5rcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhcnRcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gZW5kXG5cdFx0ICogQHBhcmFtIHsoc3RyaW5nW118c3RyaW5nKX0gW3NraXBsaXN0XVxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmdbXX1cblx0XHQgKiBAdGhyb3dzIElmIHRoZSBgc3RhcnRgIGFuZCBgZW5kYCBzdHJpbmdzIGFyZW4ndCBvZiB0aGUgc2FtZSBsZW5ndGguXG5cdFx0ICogQHRocm93cyBJZiBgc2tpcGxpc3RgIGlzbid0IGFuIGFycmF5IG9yIHN0cmluZ1xuXHRcdCAqL1xuXHRcdHNwbGl0V2VpZ2h0ZWRCeUtleXM6IChzdHIsIHN0YXJ0LCBlbmQsIHNraXBsaXN0KSA9PiB7XG5cdFx0XHRpZiAoc3RhcnQubGVuZ3RoICE9PSBlbmQubGVuZ3RoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignc3RhcnQgbWFya2VyIGFuZCBlbmQgbWFya2VyIG11c3QgYmUgb2YgdGhlIHNhbWUgbGVuZ3RoJyk7XG5cdFx0XHR9XG5cdFx0XHRsZXQgbGV2ZWwgPSAwO1xuXHRcdFx0bGV0IGluaXRpYWwgPSBudWxsO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc2tpcGxpc3QpKSB7XG5cdFx0XHRcdGlmIChza2lwbGlzdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0c2tpcGxpc3QgPSBbXTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygc2tpcGxpc3QgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0c2tpcGxpc3QgPSBbc2tpcGxpc3RdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ25vbi1hcHBsaWNhYmxlIHNraXBsaXN0IHBhcmFtZXRlcicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc2tpcGxpc3QpIHtcblx0XHRcdFx0XHRpZiAoc3RyLnNsaWNlKGksIGkgKyBlbGVtZW50Lmxlbmd0aCkgPT09IGVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGkgKz0gZWxlbWVudC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzdHIuc2xpY2UoaSwgaSArIHN0YXJ0Lmxlbmd0aCkgPT09IHN0YXJ0KSB7XG5cdFx0XHRcdFx0aWYgKGluaXRpYWwgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGluaXRpYWwgPSBpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQrK2xldmVsO1xuXHRcdFx0XHRcdGkgKz0gc3RhcnQubGVuZ3RoIC0gMTtcblx0XHRcdFx0fSBlbHNlIGlmIChzdHIuc2xpY2UoaSwgaSArIGVuZC5sZW5ndGgpID09PSBlbmQpIHtcblx0XHRcdFx0XHQtLWxldmVsO1xuXHRcdFx0XHRcdGkgKz0gZW5kLmxlbmd0aCAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFsZXZlbCAmJiBpbml0aWFsICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gc3RyLnNsaWNlKGluaXRpYWwsIGkgKyAxKTtcblx0XHRcdFx0XHRpbml0aWFsID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEZvcm1hdHMgZnJlZWZvcm0gXCJyZWFzb25cIiAoZnJvbSBhIHRleHRhcmVhKSBmb3IgZGVsZXRpb24vb3RoZXJcblx0XHQgKiB0ZW1wbGF0ZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgc3Vic3RpdHV0ZWQsIChlLmcuIFBST0QsIFhGRCwgUlBQKS5cblx0XHQgKiBIYW5kbGVzIGB8YCBvdXRzaWRlIGEgbm93aWtpIHRhZy5cblx0XHQgKiBPcHRpb25hbGx5LCBhbHNvIGFkZHMgYSBzaWduYXR1cmUgaWYgbm90IHByZXNlbnQgYWxyZWFkeS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRTaWddXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHQgKi9cblx0XHRmb3JtYXRSZWFzb25UZXh0OiAoc3RyLCBhZGRTaWcpID0+IHtcblx0XHRcdGxldCByZWFzb24gPSAoc3RyIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKTtcblx0XHRcdGNvbnN0IHVuYmluZGVyID0gbmV3IE1vcmViaXRzLnVuYmluZGVyKHJlYXNvbik7XG5cdFx0XHR1bmJpbmRlci51bmJpbmQoJzxubycuY29uY2F0KCd3aWtpJywgJz4nKSwgJzwvbm8nLmNvbmNhdCgnd2lraScsICc+JykpO1xuXHRcdFx0dW5iaW5kZXIuY29udGVudCA9IHVuYmluZGVyLmNvbnRlbnQucmVwbGFjZSgvXFx8L2csICd7eycuY29uY2F0KCdzdWJzdDonLCAnIX19JykpO1xuXHRcdFx0cmVhc29uID0gdW5iaW5kZXIucmViaW5kKCk7XG5cdFx0XHRpZiAoYWRkU2lnKSB7XG5cdFx0XHRcdGNvbnN0IHNpZyA9ICd+ficuY29uY2F0KCd+ficpO1xuXHRcdFx0XHRjb25zdCBzaWdJbmRleCA9IHJlYXNvbi5sYXN0SW5kZXhPZihzaWcpO1xuXHRcdFx0XHRpZiAoc2lnSW5kZXggPT09IC0xIHx8IHNpZ0luZGV4ICE9PSByZWFzb24ubGVuZ3RoIC0gc2lnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJlYXNvbiArPSBgICR7c2lnfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZWFzb24udHJpbSgpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogRm9ybWF0cyBhIFwicmVhc29uXCIgKGZyb20gYSB0ZXh0YXJlYSkgZm9yIGluY2x1c2lvbiBpbiBhIHVzZXJzcGFjZVxuXHRcdCAqIGxvZy4gIFJlcGxhY2VzIG5ld2xpbmVzIHdpdGgge3tQYn19LCBhbmQgYWRkcyBhbiBleHRyYSBgI2AgYmVmb3JlXG5cdFx0ICogbGlzdCBpdGVtcyBmb3IgcHJvcGVyIGZvcm1hdHRpbmcuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHQgKi9cblx0XHRmb3JtYXRSZWFzb25Gb3JMb2c6IChzdHIpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHN0clxuXHRcdFx0XHRcdC8vIGhhbmRsZSBsaW5lIGJyZWFrcywgd2hpY2ggb3RoZXJ3aXNlIGJyZWFrIG51bWJlcmluZ1xuXHRcdFx0XHRcdC5yZXBsYWNlKC9cXG4rL2csICd7e3BifX0nKVxuXHRcdFx0XHRcdC8vIHB1dCBhbiBleHRyYSAjIGluIGZyb250IGJlZm9yZSBidWxsZXRlZCBvciBudW1iZXJlZCBsaXN0IGl0ZW1zXG5cdFx0XHRcdFx0LnJlcGxhY2UoL14oIyspL2dtLCAnIyQxJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXihcXCorKS9nbSwgJyMkMScpXG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogTGlrZSBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKClgLCBidXQgZXNjYXBlcyBhbnkgZG9sbGFyIHNpZ25zIGluXG5cdFx0ICogdGhlIHJlcGxhY2VtZW50IHN0cmluZy4gIFVzZWZ1bCB3aGVuIHRoZSB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIGlzXG5cdFx0ICogYXJiaXRyYXJ5LCBzdWNoIGFzIGEgdXNlcm5hbWUgb3IgZnJlZWZvcm0gdXNlciBpbnB1dCwgYW5kIGNvdWxkXG5cdFx0ICogY29udGFpbiBkb2xsYXIgc2lnbnMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gVGV4dCBpbiB3aGljaCB0byByZXBsYWNlLlxuXHRcdCAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHQgKi9cblx0XHRzYWZlUmVwbGFjZTogKHN0cmluZywgcGF0dGVybiwgcmVwbGFjZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBzdHJpbmcucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQvZywgJyQkJCQnKSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBEZXRlcm1pbmUgaWYgdGhlIHVzZXItcHJvdmlkZWQgZXhwaXJhdGlvbiB3aWxsIGJlIGNvbnNpZGVyZWQgYW5cblx0XHQgKiBpbmZpbml0ZS1sZW5ndGggYnkgTVcuXG5cdFx0ICpcblx0XHQgKiBAc2VlIHtAbGluayBodHRwczovL3BoYWJyaWNhdG9yLndpa2ltZWRpYS5vcmcvVDY4NjQ2fVxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGV4cGlyeVxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGlzSW5maW5pdHk6IChleHBpcnkpID0+IHtcblx0XHRcdHJldHVybiBbJ2luZGVmaW5pdGUnLCAnaW5maW5pdHknLCAnaW5maW5pdGUnLCAnbmV2ZXInXS5pbmNsdWRlcyhleHBpcnkpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogRXNjYXBlcyBhIHN0cmluZyB0byBiZSB1c2VkIGluIGEgUmVnRXhwLCByZXBsYWNpbmcgc3BhY2VzIGFuZFxuXHRcdCAqIHVuZGVyc2NvcmVzIHdpdGggYFtfIF1gIGFzIHRoZXkgYXJlIG9mdGVuIGVxdWl2YWxlbnQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFN0cmluZyB0byBiZSBlc2NhcGVkLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGVzY2FwZWQgdGV4dC5cblx0XHQgKi9cblx0XHRlc2NhcGVSZWdFeHA6ICh0ZXh0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbXcudXRpbC5lc2NhcGVSZWdFeHAodGV4dCkucmVwbGFjZSgvIHxfL2csICdbXyBdJyk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBmb3JtYXRUaW1lXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyp9IHRpbWUgVGhlIHN0cmluZyB0byBmb3JhbXRcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdGZvcm1hdFRpbWU6ICh0aW1lKSA9PiB7XG5cdFx0XHRsZXQgbTtcblx0XHRcdGlmICgobSA9IHRpbWUubWF0Y2goL15cXHMqKFxcZCspXFxzKnNlYyhvbmQpP3M/XFxzKiQvKSkgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGAke21bMV1956eSYDtcblx0XHRcdH1cblx0XHRcdGlmICgobSA9IHRpbWUubWF0Y2goL15cXHMqKFxcZCspXFxzKm1pbih1dGUpP3M/XFxzKiQvKSkgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGAke21bMV195YiGYDtcblx0XHRcdH1cblx0XHRcdGlmICgobSA9IHRpbWUubWF0Y2goL15cXHMqKFxcZCspXFxzKmhvdXJzP1xccyokLykpICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBtWzFdICsgd2luZG93LndnVUxTKCflsI/ml7YnLCAn5bCP5pmCJyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKG0gPSB0aW1lLm1hdGNoKC9eXFxzKihcXGQrKVxccypkYXlzP1xccyokLykpICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBgJHttWzFdfeWkqWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKG0gPSB0aW1lLm1hdGNoKC9eXFxzKihcXGQrKVxccyp3ZWVrcz9cXHMqJC8pKSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gbVsxXSArIHdpbmRvdy53Z1VMUygn5ZGoJywgJ+mAsScpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKChtID0gdGltZS5tYXRjaCgvXlxccyooXFxkKylcXHMqbW9udGhzP1xccyokLykpICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBtWzFdICsgd2luZG93LndnVUxTKCfkuKrmnIgnLCAn5YCL5pyIJyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKG0gPSB0aW1lLm1hdGNoKC9eXFxzKihcXGQrKVxccyp5ZWFycz9cXHMqJC8pKSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gYCR7bVsxXX3lubRgO1xuXHRcdFx0fVxuXHRcdFx0aWYgKE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHRpbWUudHJpbSgpKSkge1xuXHRcdFx0XHRyZXR1cm4gd2luZG93LndnVUxTKCfml6DpmZDmnJ8nLCAn54Sh6ZmQ5pyfJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGltZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEFwcGVuZCBwdW5jdHVhdGlvbiB0byBhIHN0cmluZyB3aGVuIGl0J3MgbWlzc2luZ1xuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHN0clxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBwdW5jdHVhdGlvblxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0YXBwZW5kUHVuY3R1YXRpb246IChzdHIsIHB1bmN0dWF0aW9uKSA9PiB7XG5cdFx0XHRpZiAocHVuY3R1YXRpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwdW5jdHVhdGlvbiA9ICfjgIInO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0ci5zZWFyY2goL1suPyE744CC77yf77yB77ybXSQvKSA9PT0gLTEpIHtcblx0XHRcdFx0c3RyICs9IHB1bmN0dWF0aW9uO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHN0cjtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogSGVscGVyIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIGFycmF5cy5cblx0ICpcblx0ICogQG5hbWVzcGFjZSBNb3JlYml0cy5hcnJheVxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICovXG5cdE1vcmViaXRzLmFycmF5ID0ge1xuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZSBkdXBsaWNhdGVkIGl0ZW1zIGZyb20gYW4gYXJyYXkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBhcnJcblx0XHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgY29weSBvZiB0aGUgYXJyYXkgd2l0aCBkdXBsaWNhdGVzIHJlbW92ZWQuXG5cdFx0ICogQHRocm93cyBXaGVuIHByb3ZpZGVkIGEgbm9uLWFycmF5LlxuXHRcdCAqL1xuXHRcdHVuaXE6IChhcnIpID0+IHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0Egbm9uLWFycmF5IG9iamVjdCBwYXNzZWQgdG8gTW9yZWJpdHMuYXJyYXkudW5pcScpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFyci5maWx0ZXIoKGl0ZW0sIGlkeCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYXJyLmluZGV4T2YoaXRlbSkgPT09IGlkeDtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIG5vbi1kdXBsaWNhdGVkIGl0ZW1zIGZyb20gYW4gYXJyYXkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBhcnJcblx0XHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgY29weSBvZiB0aGUgYXJyYXkgd2l0aCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWFjaCB2YWx1ZVxuXHRcdCAqIHJlbW92ZWQ7IHN1YnNlcXVlbnQgaW5zdGFuY2VzIG9mIHRob3NlIHZhbHVlcyAoZHVwbGljYXRlcykgcmVtYWluLlxuXHRcdCAqIEB0aHJvd3MgV2hlbiBwcm92aWRlZCBhIG5vbi1hcnJheS5cblx0XHQgKi9cblx0XHRkdXBzOiAoYXJyKSA9PiB7XG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdBIG5vbi1hcnJheSBvYmplY3QgcGFzc2VkIHRvIE1vcmViaXRzLmFycmF5LmR1cHMnKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnIuZmlsdGVyKChpdGVtLCBpZHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFyci5pbmRleE9mKGl0ZW0pICE9PSBpZHg7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEJyZWFrIHVwIGFuIGFycmF5IGludG8gc21hbGxlciBhcnJheXMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBhcnJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFNpemUgb2YgZWFjaCBjaHVuayAoZXhjZXB0IHRoZSBsYXN0LCB3aGljaCBjb3VsZCBiZSBkaWZmZXJlbnQpLlxuXHRcdCAqIEByZXR1cm5zIHtBcnJheVtdfSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBzbWFsbGVyLCBjaHVua2VkIGFycmF5cy5cblx0XHQgKiBAdGhyb3dzIFdoZW4gcHJvdmlkZWQgYSBub24tYXJyYXkuXG5cdFx0ICovXG5cdFx0Y2h1bms6IChhcnIsIHNpemUpID0+IHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0Egbm9uLWFycmF5IG9iamVjdCBwYXNzZWQgdG8gTW9yZWJpdHMuYXJyYXkuY2h1bmsnKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicgfHwgc2l6ZSA8PSAwKSB7XG5cdFx0XHRcdC8vIHByZXR0eSBpbXBvc3NpYmxlIHRvIGRvIGFueXRoaW5nIDopXG5cdFx0XHRcdHJldHVybiBbYXJyXTsgLy8gd2UgcmV0dXJuIGFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhpcyBhcnJheS5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbnVtQ2h1bmtzID0gTWF0aC5jZWlsKGFyci5sZW5ndGggLyBzaXplKTtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IEFycmF5LmZyb20oe1xuXHRcdFx0XHRsZW5ndGg6IG51bUNodW5rcyxcblx0XHRcdH0pO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1DaHVua3M7IGkrKykge1xuXHRcdFx0XHRyZXN1bHRbaV0gPSBhcnIuc2xpY2UoaSAqIHNpemUsIChpICsgMSkgKiBzaXplKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0fTtcblx0LyoqXG5cdCAqIFV0aWxpdGllcyB0byBlbmhhbmNlIHNlbGVjdDIgbWVudXMuIFNlZSB0d2lua2xld2FybiwgdHdpbmtsZWJsb2NrXG5cdCAqIGZvciBzYW1wbGUgdXNhZ2VzLlxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL3NlbGVjdDIub3JnL31cblx0ICpcblx0ICogQG5hbWVzcGFjZSBNb3JlYml0cy5zZWxlY3QyXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKiBAcmVxdWlyZXMganF1ZXJ5LnNlbGVjdDJcblx0ICovXG5cdE1vcmViaXRzLnNlbGVjdDIgPSB7XG5cdFx0bWF0Y2hlcnM6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQ3VzdG9tIG1hdGNoZXIgaW4gd2hpY2ggaWYgdGhlIG9wdGdyb3VwIG5hbWUgbWF0Y2hlcywgYWxsIG9wdGlvbnMgaW4gdGhhdFxuXHRcdFx0ICogZ3JvdXAgYXJlIHNob3duLCBsaWtlIGluIGpxdWVyeS5jaG9zZW4uXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHsqfSBwYXJhbXNcblx0XHRcdCAqIEBwYXJhbSB7Kn0gZGF0YVxuXHRcdFx0ICovXG5cdFx0XHRvcHRncm91cEZ1bGw6IChwYXJhbXMsIGRhdGEpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3JpZ2luYWxNYXRjaGVyID0gJC5mbi5zZWxlY3QyLmRlZmF1bHRzLmRlZmF1bHRzLm1hdGNoZXI7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsTWF0Y2hlcihwYXJhbXMsIGRhdGEpO1xuXHRcdFx0XHRpZiAocmVzdWx0ICYmIHBhcmFtcy50ZXJtICYmIGRhdGEudGV4dC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHBhcmFtcy50ZXJtLnRvVXBwZXJDYXNlKCkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmNoaWxkcmVuID0gZGF0YS5jaGlsZHJlbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdC8qKlxuXHRcdFx0ICogQ3VzdG9tIG1hdGNoZXIgdGhhdCBtYXRjaGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB3b3JkcyBvbmx5LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7Kn0gcGFyYW1zXG5cdFx0XHQgKiBAcGFyYW0geyp9IGRhdGFcblx0XHRcdCAqL1xuXHRcdFx0d29yZEJlZ2lubmluZzogKHBhcmFtcywgZGF0YSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5hbE1hdGNoZXIgPSAkLmZuLnNlbGVjdDIuZGVmYXVsdHMuZGVmYXVsdHMubWF0Y2hlcjtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gb3JpZ2luYWxNYXRjaGVyKHBhcmFtcywgZGF0YSk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhcGFyYW1zLnRlcm0gfHxcblx0XHRcdFx0XHQocmVzdWx0ICYmIG5ldyBSZWdFeHAoYFxcXFxiJHttdy51dGlsLmVzY2FwZVJlZ0V4cChwYXJhbXMudGVybSl9YCwgJ2knKS50ZXN0KHJlc3VsdC50ZXh0KSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0sXG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBVbmRlcmxpbmUgbWF0Y2hlZCBwYXJ0IG9mIG9wdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyp9IGRhdGFcblx0XHQgKi9cblx0XHRoaWdobGlnaHRTZWFyY2hNYXRjaGVzOiAoZGF0YSkgPT4ge1xuXHRcdFx0Y29uc3Qgc2VhcmNoVGVybSA9IE1vcmViaXRzLnNlbGVjdDJTZWFyY2hRdWVyeTtcblx0XHRcdGlmICghc2VhcmNoVGVybSB8fCBkYXRhLmxvYWRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGRhdGEudGV4dDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlkeCA9IGRhdGEudGV4dC50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGVybS50b1VwcGVyQ2FzZSgpKTtcblx0XHRcdGlmIChpZHggPCAwKSB7XG5cdFx0XHRcdHJldHVybiBkYXRhLnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJCgnPHNwYW4+JykuYXBwZW5kKFxuXHRcdFx0XHRkYXRhLnRleHQuc2xpY2UoMCwgaWR4KSxcblx0XHRcdFx0JCgnPHNwYW4+Jylcblx0XHRcdFx0XHQuY3NzKCd0ZXh0LWRlY29yYXRpb24nLCAndW5kZXJsaW5lJylcblx0XHRcdFx0XHQudGV4dChkYXRhLnRleHQuc2xpY2UoaWR4LCBpZHggKyBzZWFyY2hUZXJtLmxlbmd0aCkpLFxuXHRcdFx0XHRkYXRhLnRleHQuc2xpY2UoaWR4ICsgc2VhcmNoVGVybS5sZW5ndGgpXG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogSW50ZXJjZXB0IHF1ZXJ5IGFzIGl0IGlzIGhhcHBlbmluZywgZm9yIHVzZSBpbiBoaWdobGlnaHRTZWFyY2hNYXRjaGVzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHsqfSBwYXJhbXNcblx0XHQgKi9cblx0XHRxdWVyeUludGVyY2VwdG9yOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRNb3JlYml0cy5zZWxlY3QyU2VhcmNoUXVlcnkgPSBwYXJhbXMgJiYgcGFyYW1zLnRlcm07XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBPcGVuIGRyb3Bkb3duIGFuZCBiZWdpbiBzZWFyY2ggd2hlbiB0aGUgYC5zZWxlY3QyLXNlbGVjdGlvbmAgaGFzXG5cdFx0ICogZm9jdXMgYW5kIGEga2V5IGlzIHByZXNzZWQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2XG5cdFx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9pc3N1ZXMvMzI3OSNpc3N1ZWNvbW1lbnQtNDQyNTI0MTQ3fVxuXHRcdCAqL1xuXHRcdGF1dG9TdGFydDogKGV2KSA9PiB7XG5cdFx0XHRpZiAoZXYud2hpY2ggPCA0OCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgdGFyZ2V0ID0gJChldi50YXJnZXQpLmNsb3Nlc3QoJy5zZWxlY3QyLWNvbnRhaW5lcicpO1xuXHRcdFx0aWYgKCF0YXJnZXQubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRhcmdldCA9IHRhcmdldC5wcmV2KCk7XG5cdFx0XHR0YXJnZXQuc2VsZWN0Mignb3BlbicpO1xuXHRcdFx0Y29uc3Qgc2VhcmNoID0gdGFyZ2V0LmRhdGEoJ3NlbGVjdDInKS5kcm9wZG93bi4kc2VhcmNoIHx8IHRhcmdldC5kYXRhKCdzZWxlY3QyJykuc2VsZWN0aW9uLiRzZWFyY2g7XG5cdFx0XHQvLyBVc2UgRE9NIC5mb2N1cygpIHRvIHdvcmsgYXJvdW5kIGEgalF1ZXJ5IDMuNi4wIHJlZ3Jlc3Npb24gKGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvaXNzdWVzLzU5OTMpXG5cdFx0XHRzZWFyY2hbMF0uZm9jdXMoKTtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogVGVtcG9yYXJpbHkgaGlkZSBhIHBhcnQgb2YgYSBzdHJpbmcgd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVzdCBvZiBpdC5cblx0ICogVXNlZCBieSB7QGxpbmsgTW9yZWJpdHMud2lraXRleHQucGFnZSNjb21tZW50T3V0SW1hZ2V8TW9yZWJpdHMud2lraXRleHQucGFnZS5jb21tZW50T3V0SW1hZ2V9LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICogQGNsYXNzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBUaGUgaW5pdGlhbCB0ZXh0IHRvIHByb2Nlc3MuXG5cdCAqIEBleGFtcGxlIGNvbnN0IHUgPSBuZXcgTW9yZWJpdHMudW5iaW5kZXIoJ0hlbGxvIHdvcmxkIDwhLS0gd29ybGQgLS0+IHdvcmxkJyk7XG5cdCAqIHUudW5iaW5kKCc8IS0tJywgJy0tPicpOyAvLyB0ZXh0IGluc2lkZSBjb21tZW50IHJlbWFpbnMgaW50YWN0XG5cdCAqIHUuY29udGVudCA9IHUuY29udGVudC5yZXBsYWNlKC93b3JsZC9nLCAnZWFydGgnKTtcblx0ICogdS5yZWJpbmQoKTsgLy8gZ2l2ZXMgJ0hlbGxvIGVhcnRoIDwhLS0gd29ybGQgLS0+IGVhcnRoJ1xuXHQgKi9cblx0TW9yZWJpdHMudW5iaW5kZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdFx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0LyoqIFRoZSB0ZXh0IGJlaW5nIHByb2Nlc3NlZC4gKi9cblx0XHR0aGlzLmNvbnRlbnQgPSBzdHJpbmc7XG5cdFx0dGhpcy5jb3VudGVyID0gMDtcblx0XHR0aGlzLmhpc3RvcnkgPSB7fTtcblx0XHR0aGlzLnByZWZpeCA9IGAlVU5JUTo6JHtNYXRoLnJhbmRvbSgpfTo6YDtcblx0XHR0aGlzLnBvc3RmaXggPSAnOjpVTklRJSc7XG5cdH07XG5cdE1vcmViaXRzLnVuYmluZGVyLnByb3RvdHlwZSA9IHtcblx0XHQvKipcblx0XHQgKiBIaWRlIHRoZSByZWdpb24gZW5jYXBzdWxhdGVkIGJ5IHRoZSBgcHJlZml4YCBhbmQgYHBvc3RmaXhgIGZyb21cblx0XHQgKiBzdHJpbmcgcHJvY2Vzc2luZy4gIGBwcmVmaXhgIGFuZCBgcG9zdGZpeGAgd2lsbCBiZSB1c2VkIGluIGFcblx0XHQgKiBSZWdFeHAsIHNvIGl0ZW1zIHRoYXQgbmVlZCBlc2NhcGluZyBzaG91bGQgYmUgdXNlIGBcXFxcYC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gcG9zdGZpeFxuXHRcdCAqIEB0aHJvd3MgSWYgZWl0aGVyIGBwcmVmaXhgIG9yIGBwb3N0Zml4YCBpcyBtaXNzaW5nLlxuXHRcdCAqL1xuXHRcdHVuYmluZChwcmVmaXgsIHBvc3RmaXgpIHtcblx0XHRcdGlmICghcHJlZml4IHx8ICFwb3N0Zml4KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignQm90aCBwcmVmaXggYW5kIHBvc3RmaXggbXVzdCBiZSBwcm92aWRlZCcpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmUgPSBuZXcgUmVnRXhwKGAke3ByZWZpeH0oW1xcXFxzXFxcXFNdKj8pJHtwb3N0Zml4fWAsICdnJyk7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZShyZSwgTW9yZWJpdHMudW5iaW5kZXIuZ2V0Q2FsbGJhY2sodGhpcykpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogUmVzdG9yZSB0aGUgaGlkZGVuIHBvcnRpb24gb2YgdGhlIGBjb250ZW50YCBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcHJvY2Vzc2VkIG91dHB1dC5cblx0XHQgKi9cblx0XHRyZWJpbmQoKSB7XG5cdFx0XHRsZXQge2NvbnRlbnR9ID0gdGhpcztcblx0XHRcdGZvciAoY29uc3QgY3VycmVudCBpbiB0aGlzLmhpc3RvcnkpIHtcblx0XHRcdFx0aWYgKCFPYmplY3QuaGFzT3duKHRoaXMuaGlzdG9yeSwgY3VycmVudCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250ZW50ID0gY29udGVudC5yZXBsYWNlKGN1cnJlbnQsIHRoaXMuaGlzdG9yeVtjdXJyZW50XSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHR9LFxuXHRcdHByZWZpeDogbnVsbCxcblx0XHQvLyAlVU5JUTo6MC41OTU1OTgxNjQ0OTM4MzI0Ojpcblx0XHRwb3N0Zml4OiBudWxsLFxuXHRcdC8vIDo6VU5JUSVcblx0XHRjb250ZW50OiBudWxsLFxuXHRcdC8vIHN0cmluZ1xuXHRcdGNvdW50ZXI6IG51bGwsXG5cdFx0Ly8gMCsrXG5cdFx0aGlzdG9yeTogbnVsbCwgLy8ge31cblx0fTtcblx0LyoqXG5cdCAqIEBwYXJhbSB7dHlwZW9mIE1vcmViaXRzfSBzZWxmXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy51bmJpbmRlclxuXHQgKi9cblx0TW9yZWJpdHMudW5iaW5kZXIuZ2V0Q2FsbGJhY2sgPSAoc2VsZikgPT4ge1xuXHRcdHJldHVybiAobWF0Y2gpID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBzZWxmLnByZWZpeCArIHNlbGYuY291bnRlciArIHNlbGYucG9zdGZpeDtcblx0XHRcdHNlbGYuaGlzdG9yeVtjdXJyZW50XSA9IG1hdGNoO1xuXHRcdFx0KytzZWxmLmNvdW50ZXI7XG5cdFx0XHRyZXR1cm4gY3VycmVudDtcblx0XHR9O1xuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLmRhdGUgKioqKioqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogQ3JlYXRlIGEgZGF0ZSBvYmplY3Qgd2l0aCBlbmhhbmNlZCBwcm9jZXNzaW5nIGNhcGFiaWxpdGllcywgYSBsYVxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9tb21lbnRqcy5jb20vfG1vbWVudC5qc30uIE1lZGlhV2lraSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFsc29cblx0ICogYWNjZXB0YWJsZSwgaW4gYWRkaXRpb24gdG8gZXZlcnl0aGluZyB0aGF0IEpTIERhdGUoKSBhY2NlcHRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gey4uLmFueX0gYXJnc1xuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICogQGNsYXNzXG5cdCAqL1xuXHRNb3JlYml0cy5kYXRlID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHQvLyBDaGVjayBNZWRpYVdpa2kgZm9ybWF0c1xuXHRcdC8vIE11c3QgYmUgZmlyc3Qgc2luY2UgZmlyZWZveCBlcnJvbmVvdXNseSBhY2NlcHRzIHRoZSB0aW1lc3RhbXBcblx0XHQvLyBmb3JtYXQsIHNhbnMgdGltZXpvbmUgKFNlZSBhbHNvOiAjOTIxLCAjOTM2LCAjMTE3NCwgIzExODcpLCBhbmQgdGhlXG5cdFx0Ly8gMTQtZGlnaXQgc3RyaW5nIHdpbGwgYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkuXG5cdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBbcGFyYW1dID0gYXJncztcblx0XHRcdGlmICgvXlxcZHsxNH0kLy50ZXN0KHBhcmFtKSkge1xuXHRcdFx0XHQvLyBZWVlZTU1EREhIbW1zc1xuXHRcdFx0XHRjb25zdCBkaWdpdE1hdGNoID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS8uZXhlYyhwYXJhbSk7XG5cdFx0XHRcdGlmIChkaWdpdE1hdGNoKSB7XG5cdFx0XHRcdFx0Ly8gLi4uLi4geWVhciAuLi4gbW9udGggLi4gZGF0ZSAuLi4gaG91ciAuLi4uIG1pbnV0ZSAuLi4uLiBzZWNvbmRcblx0XHRcdFx0XHR0aGlzLl9kID0gbmV3IERhdGUoXG5cdFx0XHRcdFx0XHRSZWZsZWN0LmFwcGx5KERhdGUuVVRDLCBudWxsLCBbXG5cdFx0XHRcdFx0XHRcdGRpZ2l0TWF0Y2hbMV0sXG5cdFx0XHRcdFx0XHRcdGRpZ2l0TWF0Y2hbMl0gLSAxLFxuXHRcdFx0XHRcdFx0XHRkaWdpdE1hdGNoWzNdLFxuXHRcdFx0XHRcdFx0XHRkaWdpdE1hdGNoWzRdLFxuXHRcdFx0XHRcdFx0XHRkaWdpdE1hdGNoWzVdLFxuXHRcdFx0XHRcdFx0XHRkaWdpdE1hdGNoWzZdLFxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gV2lraXRleHQgc2lnbmF0dXJlIHRpbWVzdGFtcFxuXHRcdFx0XHRjb25zdCBkYXRlUGFydHMgPSBNb3JlYml0cy5sMTBuLnNpZ25hdHVyZVRpbWVzdGFtcEZvcm1hdChwYXJhbSk7XG5cdFx0XHRcdGlmIChkYXRlUGFydHMpIHtcblx0XHRcdFx0XHR0aGlzLl9kID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgZGF0ZVBhcnRzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gVHJ5IHN0YW5kYXJkIGRhdGVcblx0XHR0aGlzLl9kID8/PSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KERhdGUsIFtEYXRlLCAuLi5nZW5lcmF0ZUFycmF5KGFyZ3MpXSkpKCk7XG5cdFx0Ly8gU3RpbGwgbm8/XG5cdFx0aWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuXHRcdFx0bXcubG9nLndhcm4oJ0ludmFsaWQgTW9yZWJpdHMuZGF0ZSBpbml0aWFsaXNhdGlvbjonLCBhcmdzKTtcblx0XHR9XG5cdH07XG5cdC8qKlxuXHQgKiBMb2NhbGl6ZWQgc3RyaW5ncyBmb3IgZGF0ZSBwcm9jZXNzaW5nLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMuZGF0ZVxuXHQgKiBAdHlwZSB7b2JqZWN0LjxzdHJpbmcsIHN0cmluZz59XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IG1vbnRoc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBtb250aHNTaG9ydFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBkYXlzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGRheXNTaG9ydFxuXHQgKiBAcHJvcGVydHkge29iamVjdC48c3RyaW5nLCBzdHJpbmc+fSByZWxhdGl2ZVRpbWVzXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEgPSB7XG5cdFx0Ly8gbWVzc2FnZSBuYW1lcyBoZXJlIGNvcnJlc3BvbmQgdG8gTWVkaWFXaWtpIG1lc3NhZ2UgbmFtZXNcblx0XHQvLyBObyBpMThuIGF0IHRoaXMgdGltZVxuXHRcdG1vbnRoczogWycx5pyIJywgJzLmnIgnLCAnM+aciCcsICc05pyIJywgJzXmnIgnLCAnNuaciCcsICc35pyIJywgJzjmnIgnLCAnOeaciCcsICcxMOaciCcsICcxMeaciCcsICcxMuaciCddLFxuXHRcdG1vbnRoc1Nob3J0OiBbJzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc25pyIJywgJzfmnIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sXG5cdFx0ZGF5czogWyfmmJ/mnJ/ml6UnLCAn5pif5pyf5LiAJywgJ+aYn+acn+S6jCcsICfmmJ/mnJ/kuIknLCAn5pif5pyf5ZubJywgJ+aYn+acn+S6lCcsICfmmJ/mnJ/lha0nXSxcblx0XHRkYXlzU2hvcnQ6IFsn5pelJywgJ+S4gCcsICfkuownLCAn5LiJJywgJ+WbmycsICfkupQnLCAn5YWtJ10sXG5cdFx0cmVsYXRpdmVUaW1lczoge1xuXHRcdFx0dGhpc0RheTogJ1vku4rlpKldQSBoaDptbScsXG5cdFx0XHRwcmV2RGF5OiAnW+aYqOWkqV1BIGhoOm1tJyxcblx0XHRcdG5leHREYXk6ICdb5piO5aSpXUEgaGg6bW0nLFxuXHRcdFx0dGhpc1dlZWs6ICdkZGRkQSBoaDptbScsXG5cdFx0XHRwYXN0V2VlazogJ1vkuIpdZGRkZEEgaGg6bW0nLFxuXHRcdFx0b3RoZXI6ICdZWVlZLU1NLUREJyxcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogTWFwIHVuaXRzIHdpdGggZ2V0dGVyL3NldHRlciBmdW5jdGlvbiBuYW1lcywgZm9yIGBhZGRgIGFuZCBgc3VidHJhY3RgXG5cdCAqIG1ldGhvZHMuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5kYXRlXG5cdCAqIEB0eXBlIHtvYmplY3QuPHN0cmluZywgc3RyaW5nPn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNlY29uZHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1pbnV0ZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGhvdXJzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXlzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWVrc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9udGhzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB5ZWFyc1xuXHQgKi9cblx0TW9yZWJpdHMuZGF0ZS51bml0TWFwID0ge1xuXHRcdHNlY29uZHM6ICdTZWNvbmRzJyxcblx0XHRtaW51dGVzOiAnTWludXRlcycsXG5cdFx0aG91cnM6ICdIb3VycycsXG5cdFx0ZGF5czogJ0RhdGUnLFxuXHRcdHdlZWtzOiAnV2VlaycsXG5cdFx0Ly8gTm90IGEgZnVuY3Rpb24gYnV0IGhhbmRsZWQgaW4gYGFkZGAgdGhyb3VnaCBjdW5uaW5nIHVzZSBvZiBtdWx0aXBsaWNhdGlvblxuXHRcdG1vbnRoczogJ01vbnRoJyxcblx0XHR5ZWFyczogJ0Z1bGxZZWFyJyxcblx0fTtcblx0TW9yZWJpdHMuZGF0ZS5wcm90b3R5cGUgPSB7XG5cdFx0LyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuXHRcdGlzVmFsaWQoKSB7XG5cdFx0XHRyZXR1cm4gIU51bWJlci5pc05hTih0aGlzLmdldFRpbWUoKSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0geyhEYXRlfE1vcmViaXRzLmRhdGUpfSBkYXRlXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0aXNCZWZvcmUoZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0VGltZSgpIDwgZGF0ZS5nZXRUaW1lKCk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0geyhEYXRlfE1vcmViaXRzLmRhdGUpfSBkYXRlXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0aXNBZnRlcihkYXRlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRUaW1lKCkgPiBkYXRlLmdldFRpbWUoKTtcblx0XHR9LFxuXHRcdC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuXHRcdGdldFVUQ01vbnRoTmFtZSgpIHtcblx0XHRcdHJldHVybiBNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEubW9udGhzW3RoaXMuZ2V0VVRDTW9udGgoKV07XG5cdFx0fSxcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gKi9cblx0XHRnZXRVVENNb250aE5hbWVBYmJyZXYoKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLm1vbnRoc1Nob3J0W3RoaXMuZ2V0VVRDTW9udGgoKV07XG5cdFx0fSxcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gKi9cblx0XHRnZXRNb250aE5hbWUoKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLm1vbnRoc1t0aGlzLmdldE1vbnRoKCldO1xuXHRcdH0sXG5cdFx0LyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG5cdFx0Z2V0TW9udGhOYW1lQWJicmV2KCkge1xuXHRcdFx0cmV0dXJuIE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5tb250aHNTaG9ydFt0aGlzLmdldE1vbnRoKCldO1xuXHRcdH0sXG5cdFx0LyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG5cdFx0Z2V0VVRDRGF5TmFtZSgpIHtcblx0XHRcdHJldHVybiBNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEuZGF5c1t0aGlzLmdldFVUQ0RheSgpXTtcblx0XHR9LFxuXHRcdC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuXHRcdGdldFVUQ0RheU5hbWVBYmJyZXYoKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLmRheXNTaG9ydFt0aGlzLmdldFVUQ0RheSgpXTtcblx0XHR9LFxuXHRcdC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuXHRcdGdldERheU5hbWUoKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLmRheXNbdGhpcy5nZXREYXkoKV07XG5cdFx0fSxcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gKi9cblx0XHRnZXREYXlOYW1lQWJicmV2KCkge1xuXHRcdFx0cmV0dXJuIE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5kYXlzU2hvcnRbdGhpcy5nZXREYXkoKV07XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBBZGQgYSBnaXZlbiBudW1iZXIgb2YgbWludXRlcywgaG91cnMsIGRheXMsIHdlZWtzLCBtb250aHMsIG9yIHllYXJzIHRvIHRoZSBkYXRlLlxuXHRcdCAqIFRoaXMgaXMgZG9uZSBpbi1wbGFjZS4gVGhlIG1vZGlmaWVkIGRhdGUgb2JqZWN0IGlzIGFsc28gcmV0dXJuZWQsIGFsbG93aW5nIGNoYWluaW5nLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciAtIFNob3VsZCBiZSBhbiBpbnRlZ2VyLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB1bml0XG5cdFx0ICogQHRocm93cyBJZiBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHVuaXQgaXMgZ2l2ZW4uXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLmRhdGV9XG5cdFx0ICovXG5cdFx0YWRkKG51bWJlciwgdW5pdCkge1xuXHRcdFx0bGV0IG51bSA9IE51bWJlci5wYXJzZUludChudW1iZXIsIDEwKTsgLy8gbm9ybWFsaXplXG5cdFx0XHRpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBudW1iZXIgXCIke251bWJlcn1cIiBwcm92aWRlZC5gKTtcblx0XHRcdH1cblx0XHRcdHVuaXQgPSB1bml0LnRvTG93ZXJDYXNlKCk7IC8vIG5vcm1hbGl6ZVxuXHRcdFx0Y29uc3Qge3VuaXRNYXB9ID0gTW9yZWJpdHMuZGF0ZTtcblx0XHRcdGxldCB1bml0Tm9ybSA9IHVuaXRNYXBbdW5pdF0gfHwgdW5pdE1hcFtgJHt1bml0fXNgXTsgLy8gc28gdGhhdCBib3RoIHNpbmd1bGFyIGFuZCAgcGx1cmFsIGZvcm1zIHdvcmtcblx0XHRcdGlmICh1bml0Tm9ybSkge1xuXHRcdFx0XHQvLyBObyBidWlsdC1pbiB3ZWVrIGZ1bmN0aW9ucywgc28gcmF0aGVyIHRoYW4gYnVpbGQgb3V0IElTTydzIGdldFdlZWsvc2V0V2VlaywganVzdCBtdWx0aXBseVxuXHRcdFx0XHQvLyBQcm9iYWJseSBjYW4ndCBiZSB1c2VkIGZvciBKdWxpYW4tPkdyZWdvcmlhbiBjaGFuZ2VvdmVycywgZXRjLlxuXHRcdFx0XHRpZiAodW5pdE5vcm0gPT09ICdXZWVrJykge1xuXHRcdFx0XHRcdHVuaXROb3JtID0gJ0RhdGUnO1xuXHRcdFx0XHRcdG51bSAqPSA3O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXNbYHNldCR7dW5pdE5vcm19YF0odGhpc1tgZ2V0JHt1bml0Tm9ybX1gXSgpICsgbnVtKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdW5pdCBcIiR7dW5pdH1cIjogT25seSAke09iamVjdC5rZXlzKHVuaXRNYXApLmpvaW4oJywgJyl9IGFyZSBhbGxvd2VkLmApO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogU3VidHJhY3RzIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pbnV0ZXMsIGhvdXJzLCBkYXlzLCB3ZWVrcywgbW9udGhzLCBvciB5ZWFycyB0byB0aGUgZGF0ZS5cblx0XHQgKiBUaGlzIGlzIGRvbmUgaW4tcGxhY2UuIFRoZSBtb2RpZmllZCBkYXRlIG9iamVjdCBpcyBhbHNvIHJldHVybmVkLCBhbGxvd2luZyBjaGFpbmluZy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgLSBTaG91bGQgYmUgYW4gaW50ZWdlci5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdW5pdFxuXHRcdCAqIEB0aHJvd3MgSWYgaW52YWxpZCBvciB1bnN1cHBvcnRlZCB1bml0IGlzIGdpdmVuLlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy5kYXRlfVxuXHRcdCAqL1xuXHRcdHN1YnRyYWN0KG51bWJlciwgdW5pdCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkKC1udW1iZXIsIHVuaXQpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogRm9ybWF0IHRoZSBkYXRlIGludG8gYSBzdHJpbmcgcGVyIHRoZSBnaXZlbiBmb3JtYXQgc3RyaW5nLlxuXHRcdCAqIFJlcGxhY2VtZW50IHN5bnRheCBpcyBhIHN1YnNldCBvZiB0aGF0IGluIG1vbWVudC5qczpcblx0XHQgKlxuXHRcdCAqIHwgU3ludGF4IHwgT3V0cHV0IHxcblx0XHQgKiB8LS0tLS0tLS18LS0tLS0tLS18XG5cdFx0ICogfCBIIHwgSG91cnMgKDI0LWhvdXIpIHxcblx0XHQgKiB8IEhIIHwgSG91cnMgKDI0LWhvdXIsIHBhZGRlZCB0byAyIGRpZ2l0cykgfFxuXHRcdCAqIHwgaCB8IEhvdXJzICgxMi1ob3VyKSB8XG5cdFx0ICogfCBoaCB8IEhvdXJzICgxMi1ob3VyLCBwYWRkZWQgdG8gMiBkaWdpdHMpIHxcblx0XHQgKiB8IEEgfCBBTSBvciBQTSB8XG5cdFx0ICogfCBtIHwgTWludXRlcyB8XG5cdFx0ICogfCBtbSB8IE1pbnV0ZXMgKHBhZGRlZCB0byAyIGRpZ2l0cykgfFxuXHRcdCAqIHwgcyB8IFNlY29uZHMgfFxuXHRcdCAqIHwgc3MgfCBTZWNvbmRzIChwYWRkZWQgdG8gMiBkaWdpdHMpIHxcblx0XHQgKiB8IFNTUyB8IE1pbGxpc2Vjb25kcyBmcmFnbWVudCwgMyBkaWdpdHMgfFxuXHRcdCAqIHwgZCB8IERheSBudW1iZXIgb2YgdGhlIHdlZWsgKFN1bj0wKSB8XG5cdFx0ICogfCBkZGQgfCBBYmJyZXZpYXRlZCBkYXkgbmFtZSB8XG5cdFx0ICogfCBkZGRkIHwgRnVsbCBkYXkgbmFtZSB8XG5cdFx0ICogfCBEIHwgRGF0ZSB8XG5cdFx0ICogfCBERCB8IERhdGUgKHBhZGRlZCB0byAyIGRpZ2l0cykgfFxuXHRcdCAqIHwgTSB8IE1vbnRoIG51bWJlciAoMS1pbmRleGVkKSB8XG5cdFx0ICogfCBNTSB8IE1vbnRoIG51bWJlciAoMS1pbmRleGVkLCBwYWRkZWQgdG8gMiBkaWdpdHMpIHxcblx0XHQgKiB8IE1NTSB8IEFiYnJldmlhdGVkIG1vbnRoIG5hbWUgfFxuXHRcdCAqIHwgTU1NTSB8IEZ1bGwgbW9udGggbmFtZSB8XG5cdFx0ICogfCBZIHwgWWVhciB8XG5cdFx0ICogfCBZWSB8IEZpbmFsIHR3byBkaWdpdHMgb2YgeWVhciAoMjAgZm9yIDIwMjAsIDQyIGZvciAxOTQyKSB8XG5cdFx0ICogfCBZWVlZIHwgWWVhciAoc2FtZSBhcyBgWWApIHxcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRzdHIgLSBGb3JtYXQgdGhlIGRhdGUgaW50byBhIHN0cmluZywgdXNpbmdcblx0XHQgKiB0aGUgcmVwbGFjZW1lbnQgc3ludGF4LiAgVXNlIGBbYCBhbmQgYF1gIHRvIGVzY2FwZSBpdGVtcy4gIElmIG5vdFxuXHRcdCAqIHByb3ZpZGVkLCB3aWxsIHJldHVybiB0aGUgSVNPLTg2MDEtZm9ybWF0dGVkIHN0cmluZy5cblx0XHQgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gW3pvbmU9c3lzdGVtXSAtIGBzeXN0ZW1gIChmb3IgYnJvd3Nlci1kZWZhdWx0IHRpbWUgem9uZSksXG5cdFx0ICogYHV0Y2AsIG9yIHNwZWNpZnkgYSB0aW1lIHpvbmUgYXMgbnVtYmVyIG9mIG1pbnV0ZXMgcmVsYXRpdmUgdG8gVVRDLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0Zm9ybWF0KGZvcm1hdHN0ciwgem9uZSkge1xuXHRcdFx0aWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuXHRcdFx0XHRyZXR1cm4gJ0ludmFsaWQgZGF0ZSc7IC8vIFB1dCB0aGUgdHJ1dGggb3V0LCBwcmVmZXJhYmxlIHRvIFwiTmFOTmFOTmFuIE5hTjpOYU5cIiBvciB3aGF0ZXZlclxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdWRhdGUgPSB0aGlzO1xuXHRcdFx0Ly8gY3JlYXRlIGEgbmV3IGRhdGUgb2JqZWN0IHRoYXQgd2lsbCBjb250YWluIHRoZSBkYXRlIHRvIGRpc3BsYXkgYXMgc3lzdGVtIHRpbWVcblx0XHRcdGlmICh6b25lID09PSAndXRjJykge1xuXHRcdFx0XHR1ZGF0ZSA9IG5ldyBNb3JlYml0cy5kYXRlKHRoaXMuZ2V0VGltZSgpKS5hZGQodGhpcy5nZXRUaW1lem9uZU9mZnNldCgpLCAnbWludXRlcycpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygem9uZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Ly8gY29udmVydCB0byB1dGMsIHRoZW4gYWRkIHRoZSB1dGMgb2Zmc2V0IGdpdmVuXG5cdFx0XHRcdHVkYXRlID0gbmV3IE1vcmViaXRzLmRhdGUodGhpcy5nZXRUaW1lKCkpLmFkZCh0aGlzLmdldFRpbWV6b25lT2Zmc2V0KCkgKyB6b25lLCAnbWludXRlcycpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZGVmYXVsdCB0byBJU09TdHJpbmdcblx0XHRcdGlmICghZm9ybWF0c3RyKSB7XG5cdFx0XHRcdHJldHVybiB1ZGF0ZS50b0lTT1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFkID0gKG51bSwgbGVuKSA9PiB7XG5cdFx0XHRcdGxlbiB8fD0gMjsgLy8gVXAgdG8gbGVuZ3RoIG9mIDAwICsgMVxuXHRcdFx0XHRyZXR1cm4gYDAwJHtudW19YC50b1N0cmluZygpLnNsaWNlKDAgLSBsZW4pO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGgyNCA9IHVkYXRlLmdldEhvdXJzKCk7XG5cdFx0XHRjb25zdCBtID0gdWRhdGUuZ2V0TWludXRlcygpO1xuXHRcdFx0Y29uc3QgcyA9IHVkYXRlLmdldFNlY29uZHMoKTtcblx0XHRcdGNvbnN0IG1zID0gdWRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG5cdFx0XHRjb25zdCBEID0gdWRhdGUuZ2V0RGF0ZSgpO1xuXHRcdFx0Y29uc3QgTSA9IHVkYXRlLmdldE1vbnRoKCkgKyAxO1xuXHRcdFx0Y29uc3QgWSA9IHVkYXRlLmdldEZ1bGxZZWFyKCk7XG5cdFx0XHRjb25zdCBoMTIgPSBoMjQgJSAxMiB8fCAxMjtcblx0XHRcdGNvbnN0IGFtT3JQbSA9IGgyNCA+PSAxMiA/ICfkuIvljYgnIDogJ+S4iuWNiCc7XG5cdFx0XHRjb25zdCByZXBsYWNlbWVudE1hcCA9IHtcblx0XHRcdFx0SEg6IHBhZChoMjQpLFxuXHRcdFx0XHRIOiBoMjQsXG5cdFx0XHRcdGhoOiBwYWQoaDEyKSxcblx0XHRcdFx0aDogaDEyLFxuXHRcdFx0XHRBOiBhbU9yUG0sXG5cdFx0XHRcdG1tOiBwYWQobSksXG5cdFx0XHRcdG0sXG5cdFx0XHRcdHNzOiBwYWQocyksXG5cdFx0XHRcdHMsXG5cdFx0XHRcdFNTUzogcGFkKG1zLCAzKSxcblx0XHRcdFx0ZGRkZDogdWRhdGUuZ2V0RGF5TmFtZSgpLFxuXHRcdFx0XHRkZGQ6IHVkYXRlLmdldERheU5hbWVBYmJyZXYoKSxcblx0XHRcdFx0ZDogdWRhdGUuZ2V0RGF5KCksXG5cdFx0XHRcdEREOiBwYWQoRCksXG5cdFx0XHRcdEQsXG5cdFx0XHRcdE1NTU06IHVkYXRlLmdldE1vbnRoTmFtZSgpLFxuXHRcdFx0XHRNTU06IHVkYXRlLmdldE1vbnRoTmFtZUFiYnJldigpLFxuXHRcdFx0XHRNTTogcGFkKE0pLFxuXHRcdFx0XHRNLFxuXHRcdFx0XHRZWVlZOiBZLFxuXHRcdFx0XHRZWTogcGFkKFkgJSAxMDApLFxuXHRcdFx0XHRZLFxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHVuYmluZGVyID0gbmV3IE1vcmViaXRzLnVuYmluZGVyKGZvcm1hdHN0cik7IC8vIGVzY2FwZSBzdHVmZiBiZXR3ZWVuIFsuLi5dXG5cdFx0XHR1bmJpbmRlci51bmJpbmQoU3RyaW5nLnJhd2BcXFtgLCBTdHJpbmcucmF3YFxcXWApO1xuXHRcdFx0dW5iaW5kZXIuY29udGVudCA9IHVuYmluZGVyLmNvbnRlbnQucmVwbGFjZShcblx0XHRcdFx0LyogUmVnZXggbm90ZXM6XG5cdFx0XHRcdCAqIGQoZHsyLDN9KT8gbWF0Y2hlcyBleGFjdGx5IDEsIDMgb3IgNCBvY2N1cnJlbmNlcyBvZiAnZCcgKCdkZCcgaXMgdHJlYXRlZCBhcyBhIGRvdWJsZSBtYXRjaCBvZiAnZCcpXG5cdFx0XHRcdCAqIFl7MSwyfShZezJ9KT8gbWF0Y2hlcyBleGFjdGx5IDEsIDIgb3IgNCBvY2N1cnJlbmNlcyBvZiAnWSdcblx0XHRcdFx0ICovXG5cdFx0XHRcdC9IezEsMn18aHsxLDJ9fG17MSwyfXxzezEsMn18U1NTfGQoZHsyLDN9KT98RHsxLDJ9fE17MSw0fXxZezEsMn0oWXsyfSk/fEEvZyxcblx0XHRcdFx0KG1hdGNoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2VtZW50TWFwW21hdGNoXTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB1bmJpbmRlci5yZWJpbmQoKS5yZXBsYWNlKC9cXFsoLio/KVxcXS9nLCAnJDEnKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEdpdmVzIGEgcmVhZGFibGUgcmVsYXRpdmUgdGltZSBzdHJpbmcgc3VjaCBhcyBcIlllc3RlcmRheSBhdCA2OjQzIFBNXCIgb3IgXCJMYXN0IFRodXJzZGF5IGF0IDExOjQ1IEFNXCIuXG5cdFx0ICogU2ltaWxhciB0byBgY2FsZW5kYXJgIGluIG1vbWVudC5qcywgYnV0IHdpdGggdGltZSB6b25lIHN1cHBvcnQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gW3pvbmU9c3lzdGVtXSAtICdzeXN0ZW0nIChmb3IgYnJvd3Nlci1kZWZhdWx0IHRpbWUgem9uZSksXG5cdFx0ICogJ3V0YycgKGZvciBVVEMpLCBvciBzcGVjaWZ5IGEgdGltZSB6b25lIGFzIG51bWJlciBvZiBtaW51dGVzIHBhc3QgVVRDLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0Y2FsZW5kYXIoem9uZSkge1xuXHRcdFx0Ly8gWmVybyBvdXQgdGhlIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIGFuZCBtaWxsaXNlY29uZHMgLSBrZWVwaW5nIG9ubHkgdGhlIGRhdGU7XG5cdFx0XHQvLyBmaW5kIHRoZSBkaWZmZXJlbmNlLiBOb3RlIHRoYXQgc2V0SG91cnMoKSByZXR1cm5zIHRoZSBzYW1lIHRoaW5nIGFzIGdldFRpbWUoKS5cblx0XHRcdGNvbnN0IGRhdGVEaWZmID0gKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkgLSBuZXcgRGF0ZSh0aGlzKS5zZXRIb3VycygwLCAwLCAwLCAwKSkgLyA4LjY0ZTc7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSBkYXRlRGlmZiA9PT0gMDpcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXQoTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLnJlbGF0aXZlVGltZXMudGhpc0RheSwgem9uZSk7XG5cdFx0XHRcdGNhc2UgZGF0ZURpZmYgPT09IDE6XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0KE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5yZWxhdGl2ZVRpbWVzLnByZXZEYXksIHpvbmUpO1xuXHRcdFx0XHRjYXNlIGRhdGVEaWZmID4gMCAmJiBkYXRlRGlmZiA8IDc6XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0KE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5yZWxhdGl2ZVRpbWVzLnBhc3RXZWVrLCB6b25lKTtcblx0XHRcdFx0Y2FzZSBkYXRlRGlmZiA9PT0gLTE6XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0KE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5yZWxhdGl2ZVRpbWVzLm5leHREYXksIHpvbmUpO1xuXHRcdFx0XHRjYXNlIGRhdGVEaWZmIDwgMCAmJiBkYXRlRGlmZiA+IC03OlxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdChNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEucmVsYXRpdmVUaW1lcy50aGlzV2Vlaywgem9uZSk7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0KE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5yZWxhdGl2ZVRpbWVzLm90aGVyLCB6b25lKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEdldCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgd2lraXRleHQgc2VjdGlvbiB0aXRsZXMsIHN1Y2hcblx0XHQgKiBhcyBgPT1EZWNlbWJlciAyMDE5PT1gIG9yIGA9PT0gSmFuIDIwMTggPT09YC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdFx0ICovXG5cdFx0bW9udGhIZWFkZXJSZWdleCgpIHtcblx0XHRcdHJldHVybiBuZXcgUmVnRXhwKFxuXHRcdFx0XHRgXig9PSspXFxcXHMqJHt0aGlzLmdldFVUQ0Z1bGxZZWFyKCl95bm0KD86JHt0aGlzLmdldFVUQ01vbnRoTmFtZSgpfXwke3RoaXMuZ2V0VVRDTW9udGhOYW1lQWJicmV2KCl9KVxcXFxzKlxcXFwxYCxcblx0XHRcdFx0J21nJ1xuXHRcdFx0KTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgYSB3aWtpdGV4dCBzZWN0aW9uIGhlYWRlciB3aXRoIHRoZSBtb250aCBhbmQgeWVhci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbbGV2ZWw9Ml0gLSBIZWFkZXIgbGV2ZWwuICBQYXNzIDAgZm9yIGp1c3QgdGhlIHRleHRcblx0XHQgKiB3aXRoIG5vIHdpa2l0ZXh0IG1hcmtlcnMgKD09KS5cblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdG1vbnRoSGVhZGVyKGxldmVsKSB7XG5cdFx0XHQvLyBEZWZhdWx0IHRvIDIsIGJ1dCBhbGxvdyBmb3IgMCBvciBzdHJpbmd5IG51bWJlcnNcblx0XHRcdGxldmVsID0gTnVtYmVyLnBhcnNlSW50KGxldmVsLCAxMCk7XG5cdFx0XHRsZXZlbCA9IE51bWJlci5pc05hTihsZXZlbCkgPyAyIDogbGV2ZWw7XG5cdFx0XHRjb25zdCBoZWFkZXIgPSAnPScucmVwZWF0KGxldmVsKTtcblx0XHRcdGNvbnN0IHRleHQgPSBgJHt0aGlzLmdldFVUQ0Z1bGxZZWFyKCl95bm0JHt0aGlzLmdldFVUQ01vbnRoTmFtZSgpfWA7XG5cdFx0XHRpZiAoaGVhZGVyLmxlbmd0aCkge1xuXHRcdFx0XHQvLyB3aWtpdGV4dC1mb3JtYXR0ZWQgaGVhZGVyXG5cdFx0XHRcdHJldHVybiBgJHtoZWFkZXJ9ICR7dGV4dH0gJHtoZWFkZXJ9YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0ZXh0OyAvLyBKdXN0IHRoZSBzdHJpbmdcblx0XHR9LFxuXHR9O1xuXHQvLyBBbGxvdyBuYXRpdmUgRGF0ZS5wcm90b3R5cGUgbWV0aG9kcyB0byBiZSB1c2VkIG9uIE1vcmViaXRzLmRhdGUgb2JqZWN0c1xuXHRmb3IgKGNvbnN0IGZ1bmMgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRGF0ZS5wcm90b3R5cGUpKSB7XG5cdFx0Ly8gRXhjbHVkZSBtZXRob2RzIHRoYXQgY29sbGlkZSB3aXRoIFBhZ2VUcmlhZ2UncyBEYXRlLmpzIGV4dGVybmFsLCB3aGljaCBjbG9iYmVycyBuYXRpdmUgRGF0ZVxuXHRcdGlmICghWydhZGQnLCAnZ2V0RGF5TmFtZScsICdnZXRNb250aE5hbWUnXS5pbmNsdWRlcyhmdW5jKSkge1xuXHRcdFx0TW9yZWJpdHMuZGF0ZS5wcm90b3R5cGVbZnVuY10gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZFtmdW5jXSguLi5hcmdzKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8qICoqKioqKioqKioqKioqKiogTW9yZWJpdHMud2lraSAqKioqKioqKioqKioqKioqICovXG5cdC8qKlxuXHQgKiBWYXJpb3VzIG9iamVjdHMgZm9yIHdpa2kgZWRpdGluZyBhbmQgQVBJIGFjY2VzcywgaW5jbHVkaW5nXG5cdCAqIHtAbGluayBNb3JlYml0cy53aWtpLmFwaX0gYW5kIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2V9LlxuXHQgKlxuXHQgKiBAbmFtZXNwYWNlIE1vcmViaXRzLndpa2lcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzXG5cdCAqL1xuXHRNb3JlYml0cy53aWtpID0ge307XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCBhcyBvZiBOb3ZlbWJlciAyMDIwXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0TW9yZWJpdHMud2lraS5pc1BhZ2VSZWRpcmVjdCA9ICgpID0+IHtcblx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHQnW01vcmViaXRzXSBOT1RFOiBNb3JlYml0cy53aWtpLmlzUGFnZVJlZGlyZWN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSBNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCBpbnN0ZWFkLidcblx0XHQpO1xuXHRcdHJldHVybiBNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCgpO1xuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkICoqKioqKioqKioqKioqKiogKi9cblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpXG5cdCAqIEB0eXBlIHtudW1iZXJ9XG5cdCAqL1xuXHRNb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQgPSAwO1xuXHQvKipcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLndpa2lcblx0ICogQHR5cGUge251bWJlcn1cblx0ICovXG5cdE1vcmViaXRzLndpa2kubmJyT2ZDaGVja3BvaW50c0xlZnQgPSAwO1xuXHQvKipcblx0ICogRGlzcGxheSBtZXNzYWdlIGFuZC9vciByZWRpcmVjdCB0byBwYWdlIHVwb24gY29tcGxldGlvbiBvZiB0YXNrcy5cblx0ICpcblx0ICogRXZlcnkgY2FsbCB0byBNb3JlYml0cy53aWtpLmFwaS5wb3N0KCkgcmVzdWx0cyBpbiB0aGUgZGlzcGF0Y2ggb2YgYW5cblx0ICogYXN5bmNocm9ub3VzIGNhbGxiYWNrLiBFYWNoIGNhbGxiYWNrIGNhbiBpbiB0dXJuIG1ha2UgYW4gYWRkaXRpb25hbCBjYWxsIHRvXG5cdCAqIE1vcmViaXRzLndpa2kuYXBpLnBvc3QoKSB0byBjb250aW51ZSBhIHByb2Nlc3Npbmcgc2VxdWVuY2UuIEF0IHRoZVxuXHQgKiBjb25jbHVzaW9uIG9mIHRoZSBmaW5hbCBjYWxsYmFjayBvZiBhIHByb2Nlc3Npbmcgc2VxdWVuY2UsIGl0IGlzIG5vdFxuXHQgKiBwb3NzaWJsZSB0byBzaW1wbHkgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIgYmVjYXVzZSB0aGVyZSBpcyBubyBjYWxsXG5cdCAqIHN0YWNrIGxlYWRpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dC4gSW5zdGVhZCxcblx0ICogTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZXZlbnQoKSBpcyBjYWxsZWQgdG8gZGlzcGxheSB0aGUgcmVzdWx0IHRvXG5cdCAqIHRoZSB1c2VyIGFuZCB0byBwZXJmb3JtIGFuIG9wdGlvbmFsIHBhZ2UgcmVkaXJlY3QuXG5cdCAqXG5cdCAqIFRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZW4gdG8gY2FsbCBNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ldmVudCgpIGlzXG5cdCAqIG1hbmFnZWQgdGhyb3VnaCB0aGUgZ2xvYmFscyBNb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQgYW5kXG5cdCAqIE1vcmViaXRzLndpa2kubmJyT2ZDaGVja3BvaW50c0xlZnQuIE1vcmViaXRzLndpa2kubnVtYmVyT2ZBY3Rpb25zTGVmdCBpc1xuXHQgKiBpbmNyZW1lbnRlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgTW9yZWJpdHMud2lraS5hcGkgY2FsbCBhbmQgZGVjcmVtZW50ZWRcblx0ICogYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgYSBjYWxsYmFjayBmdW5jdGlvbi4gSWYgYSBjYWxsYmFjayBmdW5jdGlvbiBkb2VzXG5cdCAqIG5vdCBjcmVhdGUgYSBuZXcgTW9yZWJpdHMud2lraS5hcGkgb2JqZWN0IGJlZm9yZSBleGl0aW5nLCBpdCBpcyB0aGUgZmluYWxcblx0ICogc3RlcCBpbiB0aGUgcHJvY2Vzc2luZyBjaGFpbiBhbmQgTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZXZlbnQoKSB3aWxsXG5cdCAqIHRoZW4gYmUgY2FsbGVkLlxuXHQgKlxuXHQgKiBPcHRpb25hbGx5LCBjYWxsZXJzIG1heSB1c2UgTW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50KCkgdG8gaW5kaWNhdGUgdGhhdFxuXHQgKiBwcm9jZXNzaW5nIGlzIG5vdCBjb21wbGV0ZSB1cG9uIHRoZSBjb25jbHVzaW9uIG9mIHRoZSBmaW5hbCBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi4gIFRoaXMgaXMgdXNlZCBmb3IgYmF0Y2ggb3BlcmF0aW9ucy4gVGhlIGVuZCBvZiBhIGJhdGNoIGlzXG5cdCAqIHNpZ25hbGVkIGJ5IGNhbGxpbmcgTW9yZWJpdHMud2lraS5yZW1vdmVDaGVja3BvaW50KCkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7dHlwZW9mIE1vcmViaXRzfSBzZWxmXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpXG5cdCAqL1xuXHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZCA9IChzZWxmKSA9PiB7XG5cdFx0aWYgKC0tTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0IDw9IDAgJiYgTW9yZWJpdHMud2lraS5uYnJPZkNoZWNrcG9pbnRzTGVmdCA8PSAwKSB7XG5cdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ldmVudChzZWxmKTtcblx0XHR9XG5cdH07XG5cdC8vIENoYW5nZSBwZXIgYWN0aW9uIHdhbnRlZFxuXHQvKiogQG1lbWJlcm9mIE1vcmViaXRzLndpa2kgKi9cblx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZXZlbnQgPSAoKSA9PiB7XG5cdFx0aWYgKE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSkge1xuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLmFjdGlvbkNvbXBsZXRlZChNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UpO1xuXHRcdH1cblx0XHRpZiAoTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QpIHtcblx0XHRcdC8vIGlmIGl0IGlzbid0IGEgVVJMLCBtYWtlIGl0IG9uZS4gVE9ETzogVGhpcyBicmVha3Mgb24gdGhlIGFydGljbGVzICdodHRwOi8vJywgJ2Z0cDovLycsIGFuZCBzaW1pbGFyIG9uZXMuXG5cdFx0XHRpZiAoIS9eXFx3KzpcXC9cXC8vLnRlc3QoTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QpKSB7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gbXcudXRpbC5nZXRVcmwoTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QpO1xuXHRcdFx0XHRpZiAoTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZm9sbG93UmVkaXJlY3QgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgKz0gJz9yZWRpcmVjdD1ubyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRsb2NhdGlvbiA9IE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0O1xuXHRcdFx0fSwgTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQudGltZU91dCk7XG5cdFx0fVxuXHR9O1xuXHQvKiogQG1lbWJlcm9mIE1vcmViaXRzLndpa2kgKi9cblx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQudGltZU91dCA9XG5cdFx0d2luZG93LndwQWN0aW9uQ29tcGxldGVkVGltZU91dCA9PT0gdW5kZWZpbmVkID8gNTAwMCA6IHdpbmRvdy53cEFjdGlvbkNvbXBsZXRlZFRpbWVPdXQ7XG5cdC8qKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraSAqL1xuXHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG51bGw7XG5cdC8qKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraSAqL1xuXHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSBudWxsO1xuXHQvKiogQG1lbWJlcm9mIE1vcmViaXRzLndpa2kgKi9cblx0TW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50ID0gKCkgPT4ge1xuXHRcdCsrTW9yZWJpdHMud2lraS5uYnJPZkNoZWNrcG9pbnRzTGVmdDtcblx0fTtcblx0LyoqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpICovXG5cdE1vcmViaXRzLndpa2kucmVtb3ZlQ2hlY2twb2ludCA9ICgpID0+IHtcblx0XHRpZiAoLS1Nb3JlYml0cy53aWtpLm5ick9mQ2hlY2twb2ludHNMZWZ0IDw9IDAgJiYgTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0IDw9IDApIHtcblx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLmV2ZW50KCk7XG5cdFx0fVxuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLndpa2kuYXBpICoqKioqKioqKioqKioqKiogKi9cblx0LyoqXG5cdCAqIEFuIGVhc3kgd2F5IHRvIHRhbGsgdG8gdGhlIE1lZGlhV2lraSBBUEkuICBBY2NlcHRzIGVpdGhlciBqc29uIG9yIHhtbFxuXHQgKiAoZGVmYXVsdCkgZm9ybWF0czsgaWYganNvbiBpcyBzZWxlY3RlZCwgd2lsbCBkZWZhdWx0IHRvIGBmb3JtYXR2ZXJzaW9uPTJgXG5cdCAqIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLiAgU2ltaWxhcmx5LCBlbmZvcmNlcyBuZXdlciBgZXJyb3Jmb3JtYXRgcyxcblx0ICogZGVmYXVsdGluZyB0byBgaHRtbGAgaWYgdW5zcGVjaWZpZWQuICBgdXNlbGFuZ2AgZW5mb3JjZWQgdG8gdGhlIHdpa2knc1xuXHQgKiBjb250ZW50IGxhbmd1YWdlLlxuXHQgKlxuXHQgKiBJbiBuZXcgY29kZSwgdGhlIHVzZSBvZiB0aGUgbGFzdCAzIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGF2b2lkZWQsIGluc3RlYWRcblx0ICogdXNlIHtAbGluayBNb3JlYml0cy53aWtpLmFwaSNzZXRTdGF0dXNFbGVtZW50fHNldFN0YXR1c0VsZW1lbnQoKX0gdG8gYmluZFxuXHQgKiB0aGUgc3RhdHVzIGVsZW1lbnQgKGlmIG5lZWRlZCkgYW5kIHVzZSBgLnRoZW4oKWAgb3IgYC5jYXRjaCgpYCBvbiB0aGVcblx0ICogcHJvbWlzZSByZXR1cm5lZCBieSBgcG9zdCgpYCwgcmF0aGVyIHRoYW4gc3BlY2lmeSB0aGUgYG9uU3VjY2Vzc2Agb3Jcblx0ICogYG9uRmFpbHVyZWAgY2FsbGJhY2tzLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraVxuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRBY3Rpb24gLSBUaGUgY3VycmVudCBhY3Rpb24gKHJlcXVpcmVkKS5cblx0ICogQHBhcmFtIHtPYmplY3R9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IChyZXF1aXJlZCkuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Y2Nlc3NdIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwuXG5cdCAqIEBwYXJhbSB7TW9yZWJpdHMuc3RhdHVzfSBbc3RhdHVzRWxlbWVudF0gLSBBIE1vcmViaXRzLnN0YXR1cyBvYmplY3QgdG8gdXNlIGZvciBzdGF0dXMgbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkVycm9yXSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGlmIGFuIGVycm9yIG9jY3Vycy5cblx0ICovXG5cdE1vcmViaXRzLndpa2kuYXBpID0gZnVuY3Rpb24gKGN1cnJlbnRBY3Rpb24sIHF1ZXJ5LCBvblN1Y2Nlc3MsIHN0YXR1c0VsZW1lbnQsIG9uRXJyb3IpIHtcblx0XHR0aGlzLmN1cnJlbnRBY3Rpb24gPSBjdXJyZW50QWN0aW9uO1xuXHRcdHRoaXMucXVlcnkgPSBxdWVyeTtcblx0XHR0aGlzLnF1ZXJ5LmFzc2VydCA9ICd1c2VyJztcblx0XHQvLyBFbmZvcmNlIG5ld2VyIGVycm9yIGZvcm1hdHMsIHByZWZlcnJpbmcgaHRtbFxuXHRcdGlmICghcXVlcnkuZXJyb3Jmb3JtYXQgfHwgIVsnd2lraXRleHQnLCAncGxhaW50ZXh0J10uaW5jbHVkZXMocXVlcnkuZXJyb3Jmb3JtYXQpKSB7XG5cdFx0XHR0aGlzLnF1ZXJ5LmVycm9yZm9ybWF0ID0gJ2h0bWwnO1xuXHRcdH1cblx0XHQvLyBFeHBsaWNpdGx5IHVzZSB0aGUgd2lraSdzIGNvbnRlbnQgbGFuZ3VhZ2UgdG8gbWluaW1pemUgY29uZnVzaW9uLFxuXHRcdC8vIHNlZSAjMTE3OSBmb3IgZGlzY3Vzc2lvblxuXHRcdHRoaXMucXVlcnkudXNlbGFuZyB8fD0gJ2NvbnRlbnQnOyAvLyBVc2Ugd2dVc2VyTGFuZ3VhZ2UgZm9yIHByZXZpZXdcblx0XHR0aGlzLnF1ZXJ5LmVycm9ybGFuZyA9ICd1c2VsYW5nJztcblx0XHR0aGlzLnF1ZXJ5LmVycm9yc3VzZWxvY2FsID0gMTtcblx0XHR0aGlzLm9uU3VjY2VzcyA9IG9uU3VjY2Vzcztcblx0XHR0aGlzLm9uRXJyb3IgPSBvbkVycm9yO1xuXHRcdGlmIChzdGF0dXNFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNldFN0YXR1c0VsZW1lbnQoc3RhdHVzRWxlbWVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc3RhdGVsZW0gPSBuZXcgTW9yZWJpdHMuc3RhdHVzKGN1cnJlbnRBY3Rpb24pO1xuXHRcdH1cblx0XHQvLyBKU09OIGlzIHVzZWQgdGhyb3VnaG91dCBNb3JlYml0cy9Ud2lua2xlLCBidXQgeG1sIHJlbWFpbnMgdGhlIGRlZmF1bHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cdFx0aWYgKCFxdWVyeS5mb3JtYXQpIHtcblx0XHRcdHRoaXMucXVlcnkuZm9ybWF0ID0gJ3htbCc7XG5cdFx0fSBlbHNlIGlmIChxdWVyeS5mb3JtYXQgPT09ICdqc29uJyAmJiAhcXVlcnkuZm9ybWF0dmVyc2lvbikge1xuXHRcdFx0dGhpcy5xdWVyeS5mb3JtYXR2ZXJzaW9uID0gJzInO1xuXHRcdH0gZWxzZSBpZiAoIVsneG1sJywgJ2pzb24nXS5pbmNsdWRlcyhxdWVyeS5mb3JtYXQpKSB7XG5cdFx0XHR0aGlzLnN0YXRlbGVtLmVycm9yKCdJbnZhbGlkIEFQSSBmb3JtYXQ6IG9ubHkgeG1sIGFuZCBqc29uIGFyZSBzdXBwb3J0ZWQuJyk7XG5cdFx0fVxuXHRcdC8vIElnbm9yZSB0YWdzIGZvciBxdWVyaWVzIGFuZCBtb3N0IGNvbW1vbiB1bnN1cHBvcnRlZCBhY3Rpb25zLCBwcm9kdWNlcyB3YXJuaW5nc1xuXHRcdGlmIChxdWVyeS5hY3Rpb24gJiYgWydxdWVyeScsICd3YXRjaCddLmluY2x1ZGVzKHF1ZXJ5LmFjdGlvbikpIHtcblx0XHRcdGRlbGV0ZSBxdWVyeS50YWdzO1xuXHRcdH0gZWxzZSBpZiAoIXF1ZXJ5LnRhZ3MgJiYgbW9yZWJpdHNXaWtpQ2hhbmdlVGFnKSB7XG5cdFx0XHRxdWVyeS50YWdzID0gbW9yZWJpdHNXaWtpQ2hhbmdlVGFnO1xuXHRcdH1cblx0fTtcblx0TW9yZWJpdHMud2lraS5hcGkucHJvdG90eXBlID0ge1xuXHRcdGN1cnJlbnRBY3Rpb246ICcnLFxuXHRcdG9uU3VjY2VzczogbnVsbCxcblx0XHRvbkVycm9yOiBudWxsLFxuXHRcdHBhcmVudDogd2luZG93LFxuXHRcdC8vIHVzZSBnbG9iYWwgY29udGV4dCBpZiB0aGVyZSBpcyBubyBwYXJlbnQgb2JqZWN0XG5cdFx0cXVlcnk6IG51bGwsXG5cdFx0cmVzcG9uc2U6IG51bGwsXG5cdFx0cmVzcG9uc2VYTUw6IG51bGwsXG5cdFx0Ly8gdXNlIGByZXNwb25zZWAgaW5zdGVhZDsgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cdFx0c3RhdGVsZW06IG51bGwsXG5cdFx0Ly8gdGhpcyBub24tc3RhbmRhcmQgbmFtZSBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHRcdHN0YXR1c1RleHQ6IG51bGwsXG5cdFx0Ly8gcmVzdWx0IHJlY2VpdmVkIGZyb20gdGhlIEFQSSwgbm9ybWFsbHkgXCJzdWNjZXNzXCIgb3IgXCJlcnJvclwiXG5cdFx0ZXJyb3JDb2RlOiBudWxsLFxuXHRcdC8vIHNob3J0IHRleHQgZXJyb3IgY29kZSwgaWYgYW55LCBhcyBkb2N1bWVudGVkIGluIHRoZSBNZWRpYVdpa2kgQVBJXG5cdFx0ZXJyb3JUZXh0OiBudWxsLFxuXHRcdC8vIGZ1bGwgZXJyb3IgZGVzY3JpcHRpb24sIGlmIGFueVxuXHRcdGJhZHRva2VuUmV0cnk6IGZhbHNlLFxuXHRcdC8vIHNldCB0byB0cnVlIGlmIHRoaXMgb24gYSByZXRyeSBhdHRlbXB0ZWQgYWZ0ZXIgYSBiYWR0b2tlbiBlcnJvclxuXHRcdC8qKlxuXHRcdCAqIEtlZXAgdHJhY2sgb2YgcGFyZW50IG9iamVjdCBmb3IgY2FsbGJhY2tzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHsqfSBwYXJlbnRcblx0XHQgKi9cblx0XHRzZXRQYXJlbnQocGFyZW50KSB7XG5cdFx0XHR0aGlzLnBhcmVudCA9IHBhcmVudDtcblx0XHR9LFxuXHRcdC8qKiBAcGFyYW0ge01vcmViaXRzLnN0YXR1c30gc3RhdHVzRWxlbWVudCAqL1xuXHRcdHNldFN0YXR1c0VsZW1lbnQoc3RhdHVzRWxlbWVudCkge1xuXHRcdFx0dGhpcy5zdGF0ZWxlbSA9IHN0YXR1c0VsZW1lbnQ7XG5cdFx0XHR0aGlzLnN0YXRlbGVtLnN0YXR1cyh0aGlzLmN1cnJlbnRBY3Rpb24pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogQ2Fycnkgb3V0IHRoZSByZXF1ZXN0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGNhbGxlckFqYXhQYXJhbWV0ZXJzIC0gRG8gbm90IHNwZWNpZnkgYSBwYXJhbWV0ZXIgdW5sZXNzIHlvdSByZWFsbHlcblx0XHQgKiByZWFsbHkgd2FudCB0byBnaXZlIGpRdWVyeSBzb21lIGV4dHJhIHBhcmFtZXRlcnMuXG5cdFx0ICogQHJldHVybnMge3Byb21pc2V9IC0gQSBqUXVlcnkgcHJvbWlzZSBvYmplY3QgdGhhdCBpcyByZXNvbHZlZCBvciByZWplY3RlZCB3aXRoIHRoZSBhcGkgb2JqZWN0LlxuXHRcdCAqL1xuXHRcdHBvc3QoY2FsbGVyQWpheFBhcmFtZXRlcnMpIHtcblx0XHRcdCsrTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0O1xuXHRcdFx0Y29uc3QgcXVlcnlTdHJpbmdBcnIgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgW2ksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5xdWVyeSkpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdFx0XHRcdHF1ZXJ5U3RyaW5nQXJyW3F1ZXJ5U3RyaW5nQXJyLmxlbmd0aF0gPVxuXHRcdFx0XHRcdFx0YCR7ZW5jb2RlVVJJQ29tcG9uZW50KGkpfT0ke3ZhbC5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCd8Jyl9YDtcblx0XHRcdFx0fSBlbHNlIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHF1ZXJ5U3RyaW5nQXJyW3F1ZXJ5U3RyaW5nQXJyLmxlbmd0aF0gPSBgJHtlbmNvZGVVUklDb21wb25lbnQoaSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Fyci5qb2luKCcmJykucmVwbGFjZSgvXiguKj8pKFxcYnRva2VuPVteJl0qKSYoLiopLywgJyQxJDMmJDInKTtcblx0XHRcdC8vIHRva2VuIHNob3VsZCBhbHdheXMgYmUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgcXVlcnkgc3RyaW5nIChidWcgVFctQi0wMDEzKVxuXHRcdFx0Y29uc3QgYWpheHBhcmFtcyA9IHtcblx0XHRcdFx0Y29udGV4dDogdGhpcyxcblx0XHRcdFx0dHlwZTogdGhpcy5xdWVyeS5hY3Rpb24gPT09ICdxdWVyeScgPyAnR0VUJyA6ICdQT1NUJyxcblx0XHRcdFx0dXJsOiBtdy51dGlsLndpa2lTY3JpcHQoJ2FwaScpLFxuXHRcdFx0XHRkYXRhOiBxdWVyeVN0cmluZyxcblx0XHRcdFx0ZGF0YVR5cGU6IHRoaXMucXVlcnkuZm9ybWF0LFxuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0J0FwaS1Vc2VyLUFnZW50JzogbW9yZWJpdHNXaWtpQXBpVXNlckFnZW50LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi5jYWxsZXJBamF4UGFyYW1ldGVycyxcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gJC5hamF4KGFqYXhwYXJhbXMpLnRoZW4oXG5cdFx0XHRcdGZ1bmN0aW9uIG9uQVBJc3VjY2VzcyhyZXNwb25zZSwgc3RhdHVzVGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdFx0dGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuXHRcdFx0XHRcdHRoaXMucmVzcG9uc2VYTUwgPSByZXNwb25zZTtcblx0XHRcdFx0XHQvLyBMaW1pdCB0byBmaXJzdCBlcnJvclxuXHRcdFx0XHRcdGlmICh0aGlzLnF1ZXJ5LmZvcm1hdCA9PT0gJ2pzb24nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVycm9yQ29kZSA9IHJlc3BvbnNlLmVycm9ycyAmJiByZXNwb25zZS5lcnJvcnNbMF0uY29kZTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnF1ZXJ5LmVycm9yZm9ybWF0ID09PSAnaHRtbCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5lcnJvclRleHQgPSByZXNwb25zZS5lcnJvcnMgJiYgcmVzcG9uc2UuZXJyb3JzWzBdLmh0bWw7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMucXVlcnkuZXJyb3Jmb3JtYXQgPT09ICd3aWtpdGV4dCcgfHwgdGhpcy5xdWVyeS5lcnJvcmZvcm1hdCA9PT0gJ3BsYWludGV4dCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5lcnJvclRleHQgPSByZXNwb25zZS5lcnJvcnMgJiYgcmVzcG9uc2UuZXJyb3JzWzBdLnRleHQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JDb2RlID0gJChyZXNwb25zZSkuZmluZCgnZXJyb3JzIGVycm9yJykuZXEoMCkuYXR0cignY29kZScpO1xuXHRcdFx0XHRcdFx0Ly8gU3VmZmljaWVudCBmb3IgaHRtbCwgd2lraXRleHQsIG9yIHBsYWludGV4dCBlcnJvcmZvcm1hdHNcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JUZXh0ID0gJChyZXNwb25zZSkuZmluZCgnZXJyb3JzIGVycm9yJykuZXEoMCkudGV4dCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodHlwZW9mIHRoaXMuZXJyb3JDb2RlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIEFQSSBkaWRuJ3QgbGlrZSB3aGF0IHdlIHRvbGQgaXQsIGUuZy4sIGJhZCBlZGl0IHRva2VuIG9yIGFuIGVycm9yIGNyZWF0aW5nIGEgcGFnZVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmV0dXJuRXJyb3IoY2FsbGVyQWpheFBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBpbnZva2Ugc3VjY2VzcyBjYWxsYmFjayBpZiBvbmUgd2FzIHN1cHBsaWVkXG5cdFx0XHRcdFx0aWYgKHRoaXMub25TdWNjZXNzKSB7XG5cdFx0XHRcdFx0XHQvLyBzZXQgdGhlIGNhbGxiYWNrIGNvbnRleHQgdG8gdGhpcy5wYXJlbnQgZm9yIG5ldyBjb2RlIGFuZCBzdXBwbHkgdGhlIEFQSSBvYmplY3Rcblx0XHRcdFx0XHRcdC8vIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgKGZvciBsZWdhY3kgY29kZSlcblx0XHRcdFx0XHRcdHRoaXMub25TdWNjZXNzLmNhbGwodGhpcy5wYXJlbnQsIHRoaXMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlbGVtLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZCgpO1xuXHRcdFx0XHRcdHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZVdpdGgodGhpcy5wYXJlbnQsIFt0aGlzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIG9ubHkgbmV0d29yayBhbmQgc2VydmVyIGVycm9ycyByZWFjaCBoZXJlIC0gY29tcGxhaW50cyBmcm9tIHRoZSBBUEkgaXRzZWxmIGFyZSBjYXVnaHQgaW4gc3VjY2VzcygpXG5cdFx0XHRcdGZ1bmN0aW9uIG9uQVBJZmFpbHVyZShlcnJvciwgc3RhdHVzVGV4dCwgZXJyb3JUaHJvd24pIHtcblx0XHRcdFx0XHR0aGlzLnN0YXR1c1RleHQgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRcdHRoaXMuZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjsgLy8gZnJlcXVlbnRseSB1bmRlZmluZWRcblx0XHRcdFx0XHR0aGlzLmVycm9yVGV4dCA9XG5cdFx0XHRcdFx0XHRzdGF0dXNUZXh0ICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Zyo6LCD55SoQVBJ5pe25Y+R55Sf5LqG6ZSZ6K+v4oCcJywgJ+WcqOWRvOWPq0FQSeaZgueZvOeUn+S6humMr+iqpOOAjCcpICtcblx0XHRcdFx0XHRcdGVycm9yLnN0YXR1c1RleHQgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfigJ3jgIInLCAn44CN44CCJyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmV0dXJuRXJyb3IoKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9LFxuXHRcdHJldHVybkVycm9yKGNhbGxlckFqYXhQYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAodGhpcy5lcnJvckNvZGUgPT09ICdiYWR0b2tlbicgJiYgIXRoaXMuYmFkdG9rZW5SZXRyeSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlbGVtLndhcm4od2luZG93LndnVUxTKCfml6DmlYjku6TniYzvvIzojrflj5bmlrDnmoTku6TniYzlubbph43or5XigKbigKYnLCAn54Sh5pWI5qyK5p2W77yM5Y+W5b6X5paw55qE5qyK5p2W5Lim6YeN6Kmm4oCm4oCmJykpO1xuXHRcdFx0XHR0aGlzLmJhZHRva2VuUmV0cnkgPSB0cnVlO1xuXHRcdFx0XHQvLyBHZXQgYSBuZXcgQ1NSRiB0b2tlbiBhbmQgcmV0cnkuIElmIHRoZSBvcmlnaW5hbCBhY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnRcblx0XHRcdFx0Ly8gdHlwZSBvZiBhY3Rpb24gdGhhbiBDU1JGLCB3ZSBkbyBvbmUgcG9pbnRsZXNzIHJldHJ5IGJlZm9yZSBiYWlsaW5nIG91dFxuXHRcdFx0XHRyZXR1cm4gTW9yZWJpdHMud2lraS5hcGkuZ2V0VG9rZW4oKS50aGVuKCh0b2tlbikgPT4ge1xuXHRcdFx0XHRcdHRoaXMucXVlcnkudG9rZW4gPSB0b2tlbjtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5wb3N0KGNhbGxlckFqYXhQYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlbGVtLmVycm9yKGAke3RoaXMuZXJyb3JUZXh0fe+8iCR7dGhpcy5lcnJvckNvZGV977yJYCk7XG5cdFx0XHQvLyBpbnZva2UgZmFpbHVyZSBjYWxsYmFjayBpZiBvbmUgd2FzIHN1cHBsaWVkXG5cdFx0XHRpZiAodGhpcy5vbkVycm9yKSB7XG5cdFx0XHRcdC8vIHNldCB0aGUgY2FsbGJhY2sgY29udGV4dCB0byB0aGlzLnBhcmVudCBmb3IgbmV3IGNvZGUgYW5kIHN1cHBseSB0aGUgQVBJIG9iamVjdFxuXHRcdFx0XHQvLyBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIGZvciBsZWdhY3kgY29kZVxuXHRcdFx0XHR0aGlzLm9uRXJyb3IuY2FsbCh0aGlzLnBhcmVudCwgdGhpcyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBkb24ndCBjb21wbGV0ZSB0aGUgYWN0aW9uIHNvIHRoYXQgdGhlIGVycm9yIHJlbWFpbnMgZGlzcGxheWVkXG5cdFx0XHRyZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhpcy5wYXJlbnQsIFt0aGlzXSk7XG5cdFx0fSxcblx0XHRnZXRTdGF0dXNFbGVtZW50KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RhdGVsZW07XG5cdFx0fSxcblx0XHRnZXRFcnJvckNvZGUoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckNvZGU7XG5cdFx0fSxcblx0XHRnZXRFcnJvclRleHQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvclRleHQ7XG5cdFx0fSxcblx0XHRnZXRYTUwoKSB7XG5cdFx0XHQvLyByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHVzZSBnZXRSZXNwb25zZSgpIGluc3RlYWRcblx0XHRcdHJldHVybiB0aGlzLnJlc3BvbnNlWE1MO1xuXHRcdH0sXG5cdFx0Z2V0UmVzcG9uc2UoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNwb25zZTtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogUmV0cmlldmVzIHdpa2l0ZXh0IGZyb20gYSBwYWdlLiBDYWNoaW5nIGVuYWJsZWQsIGR1cmF0aW9uIDEgZGF5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICovXG5cdE1vcmViaXRzLndpa2kuZ2V0Q2FjaGVkSnNvbiA9ICh0aXRsZSkgPT4ge1xuXHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0XHR0aXRsZXM6IHRpdGxlLFxuXHRcdFx0cnZzbG90czogJ21haW4nLFxuXHRcdFx0cnZwcm9wOiAnY29udGVudCcsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdHNtYXhhZ2U6ICczNjAwJyxcblx0XHRcdG1heGFnZTogJzM2MDAnLFxuXHRcdH07XG5cblx0XHRyZXR1cm4gbmV3IE1vcmViaXRzLndpa2kuYXBpKCcnLCBxdWVyeSkucG9zdCgpLnRoZW4oKGFwaW9iaikgPT4ge1xuXHRcdFx0YXBpb2JqLmdldFN0YXR1c0VsZW1lbnQoKS51bmxpbmsoKTtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXBpb2JqLmdldFJlc3BvbnNlKCk7XG5cdFx0XHRjb25zdCB3aWtpdGV4dCA9IHJlc3BvbnNlLnF1ZXJ5LnBhZ2VzWzBdLnJldmlzaW9uc1swXS5zbG90cy5tYWluLmNvbnRlbnQ7XG5cdFx0XHRyZXR1cm4gSlNPTi5wYXJzZSh3aWtpdGV4dCk7XG5cdFx0fSk7XG5cdH07XG5cdGxldCBtb3JlYml0c1dpa2lBcGlVc2VyQWdlbnQgPSAnWXNBcmNoaXZlcy8xLjEgKG1vcmViaXRzLmpzKSc7XG5cdC8qKlxuXHQgKiBTZXQgdGhlIGN1c3RvbSB1c2VyIGFnZW50IGhlYWRlciwgd2hpY2ggaXMgdXNlZCBmb3Igc2VydmVyLXNpZGUgbG9nZ2luZy5cblx0ICogTm90ZSB0aGF0IGRvaW5nIHNvIHdpbGwgc2V0IHRoZSB1c2VyYWdlbnQgZm9yIGV2ZXJ5IGBNb3JlYml0cy53aWtpLmFwaWBcblx0ICogcHJvY2VzcyBwZXJmb3JtZWQgdGhlcmVhZnRlci5cblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9saXN0cy53aWtpbWVkaWEub3JnL3BpcGVybWFpbC9tZWRpYXdpa2ktYXBpLWFubm91bmNlLzIwMTQtTm92ZW1iZXIvMDAwMDc1Lmh0bWx9XG5cdCAqIGZvciBvcmlnaW5hbCBhbm5vdW5jZW1lbnQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpLmFwaVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3VhPVlzQXJjaGl2ZXMvMS4xIChtb3JlYml0cy5qcyldIC0gVXNlciBhZ2VudC4gIFRoZSBkZWZhdWx0XG5cdCAqIHZhbHVlIG9mIGBtb3JlYml0cy5qc2Agd2lsbCBiZSBhcHBlbmRlZCB0byBhbnkgcHJvdmlkZWRcblx0ICogdmFsdWUuXG5cdCAqL1xuXHRNb3JlYml0cy53aWtpLmFwaS5zZXRBcGlVc2VyQWdlbnQgPSAodWEpID0+IHtcblx0XHRtb3JlYml0c1dpa2lBcGlVc2VyQWdlbnQgPSBgWXNBcmNoaXZlcy8xLjEgKG1vcmViaXRzLmpzJHt1YSA/IGA7ICR7dWF9YCA6ICcnfSlgO1xuXHR9O1xuXHQvKipcblx0ICogQ2hhbmdlL3JldmlzaW9uIHRhZyBhcHBsaWVkIHRvIE1vcmViaXRzIGFjdGlvbnMgd2hlbiBubyBvdGhlciB0YWdzIGFyZSBzcGVjaWZpZWQuXG5cdCAqIFVudXNlZCBieSBkZWZhdWx0LlxuXHQgKlxuXHQgKiBAY29uc3RhbnRcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLndpa2kuYXBpXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRjb25zdCBtb3JlYml0c1dpa2lDaGFuZ2VUYWcgPSAnJztcblx0LyoqXG5cdCAqIEdldCBhIG5ldyBDU1JGIHRva2VuIG9uIGVuY291bnRlcmluZyB0b2tlbiBlcnJvcnMuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpLmFwaVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBNZWRpYVdpa2kgQ1NSRiB0b2tlbi5cblx0ICovXG5cdE1vcmViaXRzLndpa2kuYXBpLmdldFRva2VuID0gKCkgPT4ge1xuXHRcdGNvbnN0IHRva2VuQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKHdpbmRvdy53Z1VMUygn6I635Y+W5Luk54mMJywgJ+WPluW+l+asiuadlicpLCB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRtZXRhOiAndG9rZW5zJyxcblx0XHRcdHR5cGU6ICdjc3JmJyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdH0pO1xuXHRcdHJldHVybiB0b2tlbkFwaS5wb3N0KCkudGhlbigoYXBpb2JqKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXBpb2JqLnJlc3BvbnNlLnF1ZXJ5LnRva2Vucy5jc3JmdG9rZW47XG5cdFx0fSk7XG5cdH07XG5cdC8qICoqKioqKioqKioqKioqKiogTW9yZWJpdHMud2lraS5wYWdlICoqKioqKioqKioqKioqKiogKi9cblx0LyoqXG5cdCAqIFVzZSB0aGUgTWVkaWFXaWtpIEFQSSB0byBsb2FkIGEgcGFnZSBhbmQgb3B0aW9uYWxseSBlZGl0IGl0LCBtb3ZlIGl0LCBldGMuXG5cdCAqXG5cdCAqIENhbGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gZGlyZWN0bHkgYWNjZXNzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgY2xhc3MhXG5cdCAqIEFsbCBwcm9wZXJ0eSBhY2Nlc3MgaXMgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgZ2V0X19fKCkgb3Igc2V0X19fKCkgbWV0aG9kLlxuXHQgKlxuXHQgKiBDYWxsZXJzIHNob3VsZCBzZXQge0BsaW5rIE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZX0gYW5kIHtAbGluayBNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdH1cblx0ICogYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2UubG9hZCgpfS5cblx0ICpcblx0ICogRWFjaCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIHRha2VzIG9uZSBwYXJhbWV0ZXIsIHdoaWNoIGlzIGFcblx0ICogcmVmZXJlbmNlIHRvIHRoZSBNb3JlYml0cy53aWtpLnBhZ2Ugb2JqZWN0IHRoYXQgcmVnaXN0ZXJlZCB0aGUgY2FsbGJhY2suXG5cdCAqIENhbGxiYWNrIGZ1bmN0aW9ucyBtYXkgaW52b2tlIGFueSBNb3JlYml0cy53aWtpLnBhZ2UgcHJvdG90eXBlIG1ldGhvZCB1c2luZyB0aGlzIHJlZmVyZW5jZS5cblx0ICpcblx0ICpcblx0ICogQ2FsbCBzZXF1ZW5jZSBmb3IgY29tbW9uIG9wZXJhdGlvbnMgKG9wdGlvbmFsIGZpbmFsIHVzZXIgY2FsbGJhY2tzIG5vdCBzaG93bik6XG5cdCAqXG5cdCAqIC0gRWRpdCBjdXJyZW50IGNvbnRlbnRzIG9mIGEgcGFnZSAobm8gZWRpdCBjb25mbGljdCk6XG5cdCAqIGAubG9hZCh1c2VyVGV4dEVkaXRDYWxsYmFjaykgLT4gY3R4LmxvYWRBcGkucG9zdCgpIC0+XG5cdCAqIGN0eC5sb2FkQXBpLnBvc3Quc3VjY2VzcygpIC0+IGN0eC5mbkxvYWRTdWNjZXNzKCkgLT4gdXNlclRleHRFZGl0Q2FsbGJhY2soKSAtPlxuXHQgKiAuc2F2ZSgpIC0+IGN0eC5zYXZlQXBpLnBvc3QoKSAtPiBjdHgubG9hZEFwaS5wb3N0LnN1Y2Nlc3MoKSAtPiBjdHguZm5TYXZlU3VjY2VzcygpYFxuXHQgKlxuXHQgKiAtIEVkaXQgY3VycmVudCBjb250ZW50cyBvZiBhIHBhZ2UgKHdpdGggZWRpdCBjb25mbGljdCk6XG5cdCAqIGAubG9hZCh1c2VyVGV4dEVkaXRDYWxsYmFjaykgLT4gY3R4LmxvYWRBcGkucG9zdCgpIC0+XG5cdCAqIGN0eC5sb2FkQXBpLnBvc3Quc3VjY2VzcygpIC0+IGN0eC5mbkxvYWRTdWNjZXNzKCkgLT4gdXNlclRleHRFZGl0Q2FsbGJhY2soKSAtPlxuXHQgKiAuc2F2ZSgpIC0+IGN0eC5zYXZlQXBpLnBvc3QoKSAtPiBjdHgubG9hZEFwaS5wb3N0LnN1Y2Nlc3MoKSAtPlxuXHQgKiBjdHguZm5TYXZlRXJyb3IoKSAtPiBjdHgubG9hZEFwaS5wb3N0KCkgLT4gY3R4LmxvYWRBcGkucG9zdC5zdWNjZXNzKCkgLT5cblx0ICogY3R4LmZuTG9hZFN1Y2Nlc3MoKSAtPiB1c2VyVGV4dEVkaXRDYWxsYmFjaygpIC0+IC5zYXZlKCkgLT5cblx0ICogY3R4LnNhdmVBcGkucG9zdCgpIC0+IGN0eC5sb2FkQXBpLnBvc3Quc3VjY2VzcygpIC0+IGN0eC5mblNhdmVTdWNjZXNzKClgXG5cdCAqXG5cdCAqIC0gQXBwZW5kIHRvIGEgcGFnZSAoc2ltaWxhciBmb3IgcHJlcGVuZCBhbmQgbmV3U2VjdGlvbik6XG5cdCAqIGAuYXBwZW5kKCkgLT4gY3R4LmxvYWRBcGkucG9zdCgpIC0+IGN0eC5sb2FkQXBpLnBvc3Quc3VjY2VzcygpIC0+XG5cdCAqIGN0eC5mbkxvYWRTdWNjZXNzKCkgLT4gY3R4LmZuQXV0b1NhdmUoKSAtPiAuc2F2ZSgpIC0+IGN0eC5zYXZlQXBpLnBvc3QoKSAtPlxuXHQgKiBjdHgubG9hZEFwaS5wb3N0LnN1Y2Nlc3MoKSAtPiBjdHguZm5TYXZlU3VjY2VzcygpYFxuXHQgKlxuXHQgKiBOb3Rlczpcblx0ICogMS4gQWxsIGZ1bmN0aW9ucyBmb2xsb3dpbmcgTW9yZWJpdHMud2lraS5hcGkucG9zdCgpIGFyZSBpbnZva2VkIGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIGpRdWVyeSBBSkFYIGxpYnJhcnkuXG5cdCAqIDIuIFRoZSBzZXF1ZW5jZSBmb3IgYXBwZW5kL3ByZXBlbmQvbmV3U2VjdGlvbiBjb3VsZCBiZSBzbGlnaHRseSBzaG9ydGVuZWQsXG5cdCAqIGJ1dCBpdCB3b3VsZCByZXF1aXJlIHNpZ25pZmljYW50IGR1cGxpY2F0aW9uIG9mIGNvZGUgZm9yIGxpdHRsZSBiZW5lZml0LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraVxuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhZ2VOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBhZ2UsIHByZWZpeGVkIGJ5IHRoZSBuYW1lc3BhY2UgKGlmIGFueSkuXG5cdCAqIEZvciB0aGUgY3VycmVudCBwYWdlLCB1c2UgYG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKWAuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfE1vcmViaXRzLnN0YXR1c30gW3N0YXR1c10gLSBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhY3Rpb24gYWJvdXQgdG8gYmUgdW5kZXJ0YWtlbixcblx0ICogb3IgYSBNb3JlYml0cy5zdGF0dXMgb2JqZWN0XG5cdCAqL1xuXHRNb3JlYml0cy53aWtpLnBhZ2UgPSBmdW5jdGlvbiAocGFnZU5hbWUsIHN0YXR1cykge1xuXHRcdHN0YXR1cyB8fD0gd2luZG93LndnVUxTKCfmiZPlvIDpobXpnaLigJwnLCAn5omT6ZaL6aCB6Z2i44CMJykgKyBwYWdlTmFtZSArIHdpbmRvdy53Z1VMUygn4oCdJywgJ+OAjScpO1xuXHRcdC8qKlxuXHRcdCAqIFByaXZhdGUgY29udGV4dCB2YXJpYWJsZXMuXG5cdFx0ICpcblx0XHQgKiBUaGlzIGNvbnRleHQgaXMgbm90IHZpc2libGUgdG8gdGhlIG91dHNpZGUsIHRodXMgYWxsIHRoZSBkYXRhIGhlcmVcblx0XHQgKiBtdXN0IGJlIGFjY2Vzc2VkIHZpYSBnZXR0ZXIgYW5kIHNldHRlciBmdW5jdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGN0eCA9IHtcblx0XHRcdC8vIGJhY2tpbmcgZmllbGRzIGZvciBwdWJsaWMgcHJvcGVydGllc1xuXHRcdFx0cGFnZU5hbWUsXG5cdFx0XHRwYWdlRXhpc3RzOiBmYWxzZSxcblx0XHRcdGVkaXRTdW1tYXJ5OiBudWxsLFxuXHRcdFx0Y2hhbmdlVGFnczogbnVsbCxcblx0XHRcdHRlc3RBY3Rpb25zOiBudWxsLFxuXHRcdFx0Ly8gYXJyYXkgaWYgYW55IHZhbGlkIGFjdGlvbnNcblx0XHRcdGNhbGxiYWNrUGFyYW1ldGVyczogbnVsbCxcblx0XHRcdHN0YXR1c0VsZW1lbnQ6IHN0YXR1cyBpbnN0YW5jZW9mIE1vcmViaXRzLnN0YXR1cyA/IHN0YXR1cyA6IG5ldyBNb3JlYml0cy5zdGF0dXMoc3RhdHVzKSxcblx0XHRcdC8vIC0gZWRpdFxuXHRcdFx0cGFnZVRleHQ6IG51bGwsXG5cdFx0XHRlZGl0TW9kZTogJ2FsbCcsXG5cdFx0XHQvLyBzYXZlKCkgcmVwbGFjZXMgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBwYWdlIGJ5IGRlZmF1bHRcblx0XHRcdGFwcGVuZFRleHQ6IG51bGwsXG5cdFx0XHQvLyBjYW4ndCByZXVzZSBwYWdlVGV4dCBmb3IgdGhpcyBiZWNhdXNlIHBhZ2VUZXh0IGlzIG5lZWRlZCB0byBmb2xsb3cgYSByZWRpcmVjdFxuXHRcdFx0cHJlcGVuZFRleHQ6IG51bGwsXG5cdFx0XHQvLyBjYW4ndCByZXVzZSBwYWdlVGV4dCBmb3IgdGhpcyBiZWNhdXNlIHBhZ2VUZXh0IGlzIG5lZWRlZCB0byBmb2xsb3cgYSByZWRpcmVjdFxuXHRcdFx0bmV3U2VjdGlvblRleHQ6IG51bGwsXG5cdFx0XHRuZXdTZWN0aW9uVGl0bGU6IG51bGwsXG5cdFx0XHRjcmVhdGVPcHRpb246IG51bGwsXG5cdFx0XHRtaW5vckVkaXQ6IGZhbHNlLFxuXHRcdFx0Ym90RWRpdDogZmFsc2UsXG5cdFx0XHRwYWdlU2VjdGlvbjogbnVsbCxcblx0XHRcdG1heENvbmZsaWN0UmV0cmllczogMixcblx0XHRcdG1heFJldHJpZXM6IDIsXG5cdFx0XHRmb2xsb3dSZWRpcmVjdDogZmFsc2UsXG5cdFx0XHRmb2xsb3dDcm9zc05zUmVkaXJlY3Q6IHRydWUsXG5cdFx0XHR3YXRjaGxpc3RPcHRpb246ICdub2NoYW5nZScsXG5cdFx0XHR3YXRjaGxpc3RFeHBpcnk6IG51bGwsXG5cdFx0XHRjcmVhdG9yOiBudWxsLFxuXHRcdFx0dGltZXN0YW1wOiBudWxsLFxuXHRcdFx0Ly8gLSByZXZlcnRcblx0XHRcdHJldmVydE9sZElEOiBudWxsLFxuXHRcdFx0Ly8gLSBtb3ZlXG5cdFx0XHRtb3ZlRGVzdGluYXRpb246IG51bGwsXG5cdFx0XHRtb3ZlVGFsa1BhZ2U6IGZhbHNlLFxuXHRcdFx0bW92ZVN1YnBhZ2VzOiBmYWxzZSxcblx0XHRcdG1vdmVTdXBwcmVzc1JlZGlyZWN0OiBmYWxzZSxcblx0XHRcdC8vIC0gcHJvdGVjdFxuXHRcdFx0cHJvdGVjdEVkaXQ6IG51bGwsXG5cdFx0XHRwcm90ZWN0TW92ZTogbnVsbCxcblx0XHRcdHByb3RlY3RDcmVhdGU6IG51bGwsXG5cdFx0XHRwcm90ZWN0Q2FzY2FkZTogbnVsbCxcblx0XHRcdC8vIC0gY3JlYXRpb24gbG9va3VwXG5cdFx0XHRsb29rdXBOb25SZWRpcmVjdENyZWF0b3I6IGZhbHNlLFxuXHRcdFx0Ly8gaW50ZXJuYWwgc3RhdHVzXG5cdFx0XHRwYWdlTG9hZGVkOiBmYWxzZSxcblx0XHRcdGNzcmZUb2tlbjogbnVsbCxcblx0XHRcdGxvYWRUaW1lOiBudWxsLFxuXHRcdFx0bGFzdEVkaXRUaW1lOiBudWxsLFxuXHRcdFx0cGFnZUlEOiBudWxsLFxuXHRcdFx0Y29udGVudE1vZGVsOiBudWxsLFxuXHRcdFx0cmV2ZXJ0Q3VySUQ6IG51bGwsXG5cdFx0XHRyZXZlcnRVc2VyOiBudWxsLFxuXHRcdFx0d2F0Y2hlZDogZmFsc2UsXG5cdFx0XHRmdWxseVByb3RlY3RlZDogZmFsc2UsXG5cdFx0XHRzdXBwcmVzc1Byb3RlY3RXYXJuaW5nOiBmYWxzZSxcblx0XHRcdGNvbmZsaWN0UmV0cmllczogMCxcblx0XHRcdHJldHJpZXM6IDAsXG5cdFx0XHQvLyBjYWxsYmFja3Ncblx0XHRcdG9uTG9hZFN1Y2Nlc3M6IG51bGwsXG5cdFx0XHRvbkxvYWRGYWlsdXJlOiBudWxsLFxuXHRcdFx0b25TYXZlU3VjY2VzczogbnVsbCxcblx0XHRcdG9uU2F2ZUZhaWx1cmU6IG51bGwsXG5cdFx0XHRvbkxvb2t1cENyZWF0aW9uU3VjY2VzczogbnVsbCxcblx0XHRcdG9uTG9va3VwQ3JlYXRpb25GYWlsdXJlOiBudWxsLFxuXHRcdFx0b25Nb3ZlU3VjY2VzczogbnVsbCxcblx0XHRcdG9uTW92ZUZhaWx1cmU6IG51bGwsXG5cdFx0XHRvbkRlbGV0ZVN1Y2Nlc3M6IG51bGwsXG5cdFx0XHRvbkRlbGV0ZUZhaWx1cmU6IG51bGwsXG5cdFx0XHRvblVuZGVsZXRlU3VjY2VzczogbnVsbCxcblx0XHRcdG9uVW5kZWxldGVGYWlsdXJlOiBudWxsLFxuXHRcdFx0b25Qcm90ZWN0U3VjY2VzczogbnVsbCxcblx0XHRcdG9uUHJvdGVjdEZhaWx1cmU6IG51bGwsXG5cdFx0XHQvLyBpbnRlcm5hbCBvYmplY3RzXG5cdFx0XHRsb2FkUXVlcnk6IG51bGwsXG5cdFx0XHRsb2FkQXBpOiBudWxsLFxuXHRcdFx0c2F2ZUFwaTogbnVsbCxcblx0XHRcdGxvb2t1cENyZWF0aW9uQXBpOiBudWxsLFxuXHRcdFx0bW92ZUFwaTogbnVsbCxcblx0XHRcdG1vdmVQcm9jZXNzQXBpOiBudWxsLFxuXHRcdFx0cGF0cm9sQXBpOiBudWxsLFxuXHRcdFx0cGF0cm9sUHJvY2Vzc0FwaTogbnVsbCxcblx0XHRcdGRlbGV0ZUFwaTogbnVsbCxcblx0XHRcdGRlbGV0ZVByb2Nlc3NBcGk6IG51bGwsXG5cdFx0XHR1bmRlbGV0ZUFwaTogbnVsbCxcblx0XHRcdHVuZGVsZXRlUHJvY2Vzc0FwaTogbnVsbCxcblx0XHRcdHByb3RlY3RBcGk6IG51bGwsXG5cdFx0XHRwcm90ZWN0UHJvY2Vzc0FwaTogbnVsbCxcblx0XHR9O1xuXHRcdGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcblx0XHQvKipcblx0XHQgKiBMb2FkcyB0aGUgdGV4dCBmb3IgdGhlIHBhZ2UuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3MgLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbG9hZCBoYXMgc3VjY2VlZGVkLlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkZhaWx1cmVdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhlIGxvYWQgZmFpbHMuXG5cdFx0ICovXG5cdFx0dGhpcy5sb2FkID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cdFx0XHRjdHgub25Mb2FkU3VjY2VzcyA9IG9uU3VjY2Vzcztcblx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlID0gb25GYWlsdXJlIHx8IGVtcHR5RnVuY3Rpb247XG5cdFx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gZG8gc29tZXRoaW5nIGFmdGVyIHRoZSBwYWdlIGxvYWRzXG5cdFx0XHRpZiAoIW9uU3VjY2Vzcykge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcignSW50ZXJuYWwgZXJyb3I6IG5vIG9uU3VjY2VzcyBjYWxsYmFjayBwcm92aWRlZCB0byBsb2FkKCkhJyk7XG5cdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjdHgubG9hZFF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdHByb3A6ICdpbmZvfHJldmlzaW9ucycsXG5cdFx0XHRcdGlucHJvcDogJ3dhdGNoZWQnLFxuXHRcdFx0XHRpbnRlc3RhY3Rpb25zOiAnZWRpdCcsXG5cdFx0XHRcdC8vIGNhbiBiZSBleHBhbmRlZFxuXHRcdFx0XHRjdXJ0aW1lc3RhbXA6ICcnLFxuXHRcdFx0XHRtZXRhOiAndG9rZW5zJyxcblx0XHRcdFx0dHlwZTogJ2NzcmYnLFxuXHRcdFx0XHR0aXRsZXM6IGN0eC5wYWdlTmFtZSxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdC8vIGRvbid0IG5lZWQgcnZsaW1pdD0xIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCBydnN0YXJ0aWQgaGVyZSBhbmQgb25seSBvbmUgYWN0dWFsIHJldiBpcyByZXR1cm5lZCBieSBkZWZhdWx0XG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoY3R4LmVkaXRNb2RlID09PSAnYWxsJykge1xuXHRcdFx0XHRjdHgubG9hZFF1ZXJ5LnJ2cHJvcCA9ICdjb250ZW50fHRpbWVzdGFtcCc7IC8vIGdldCB0aGUgcGFnZSBjb250ZW50IGF0IHRoZSBzYW1lIHRpbWUsIGlmIG5lZWRlZFxuXHRcdFx0fSBlbHNlIGlmIChjdHguZWRpdE1vZGUgPT09ICdyZXZlcnQnKSB7XG5cdFx0XHRcdGN0eC5sb2FkUXVlcnkucnZwcm9wID0gJ3RpbWVzdGFtcCc7XG5cdFx0XHRcdGN0eC5sb2FkUXVlcnkucnZsaW1pdCA9IDE7XG5cdFx0XHRcdGN0eC5sb2FkUXVlcnkucnZzdGFydGlkID0gY3R4LnJldmVydE9sZElEO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN0eC5mb2xsb3dSZWRpcmVjdCkge1xuXHRcdFx0XHRjdHgubG9hZFF1ZXJ5LnJlZGlyZWN0cyA9ICcnOyAvLyBmb2xsb3cgYWxsIHJlZGlyZWN0c1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIGN0eC5wYWdlU2VjdGlvbiA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y3R4LmxvYWRRdWVyeS5ydnNlY3Rpb24gPSBjdHgucGFnZVNlY3Rpb247XG5cdFx0XHR9XG5cdFx0XHRpZiAoTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0Y3R4LmxvYWRRdWVyeS5pbnByb3AgKz0gJ3xwcm90ZWN0aW9uJztcblx0XHRcdH1cblx0XHRcdGN0eC5sb2FkQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aKk+WPlumhtemdouKApuKApicsICfmipPlj5bpoIHpnaLigKbigKYnKSxcblx0XHRcdFx0Y3R4LmxvYWRRdWVyeSxcblx0XHRcdFx0Zm5Mb2FkU3VjY2Vzcyxcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlXG5cdFx0XHQpO1xuXHRcdFx0Y3R4LmxvYWRBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4LmxvYWRBcGkucG9zdCgpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogU2F2ZXMgdGhlIHRleHQgZm9yIHRoZSBwYWdlIHRvIFdpa2lwZWRpYS5cblx0XHQgKiBNdXN0IGJlIHByZWNlZGVkIGJ5IHN1Y2Nlc3NmdWxseSBjYWxsaW5nIGBsb2FkKClgLlxuXHRcdCAqXG5cdFx0ICogV2FybmluZzogQ2FsbGluZyBgc2F2ZSgpYCBjYW4gcmVzdWx0IGluIGFkZGl0aW9uYWwgY2FsbHMgdG8gdGhlXG5cdFx0ICogcHJldmlvdXMgYGxvYWQoKWAgY2FsbGJhY2tzIHRvIHJlY292ZXIgZnJvbSBlZGl0IGNvbmZsaWN0cyEgSW4gdGhpc1xuXHRcdCAqIGNhc2UsIGNhbGxlcnMgbXVzdCBtYWtlIHRoZSBzYW1lIGVkaXQgdG8gdGhlIG5ldyBwYWdlVGV4dCBhbmRcblx0XHQgKiByZS1pbnZva2UgYHNhdmUoKWAuICBUaGlzIGJlaGF2aW9yIGNhbiBiZSBkaXNhYmxlZCB3aXRoXG5cdFx0ICogYHNldE1heENvbmZsaWN0UmV0cmllcygwKWAuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25TdWNjZXNzXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzYXZlIGhhcyBzdWNjZWVkZWQuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgc2F2ZSBmYWlscy5cblx0XHQgKi9cblx0XHR0aGlzLnNhdmUgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcblx0XHRcdGN0eC5vblNhdmVTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0Y3R4Lm9uU2F2ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdC8vIGFyZSB3ZSBnZXR0aW5nIG91ciBlZGl0aW5nIHRva2VuIGZyb20gbXcudXNlci50b2tlbnM/XG5cdFx0XHRjb25zdCBjYW5Vc2VNd1VzZXJUb2tlbiA9IGZuQ2FuVXNlTXdVc2VyVG9rZW4oJ2VkaXQnKTtcblx0XHRcdGlmICghY3R4LnBhZ2VMb2FkZWQgJiYgIWNhblVzZU13VXNlclRva2VuKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKCdJbnRlcm5hbCBlcnJvcjogYXR0ZW1wdCB0byBzYXZlIGEgcGFnZSB0aGF0IGhhcyBub3QgYmVlbiBsb2FkZWQhJyk7XG5cdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN0eC5lZGl0U3VtbWFyeSkge1xuXHRcdFx0XHQvLyBuZXcgc2VjdGlvbiBtb2RlIGFsbG93cyAobmF5LCBlbmNvdXJhZ2VzKSB1c2luZyB0aGVcblx0XHRcdFx0Ly8gdGl0bGUgYXMgdGhlIGVkaXQgc3VtbWFyeSwgYnV0IHRoZSBxdWVyeSBuZWVkc1xuXHRcdFx0XHQvLyBlZGl0U3VtbWFyeSB0byBiZSB1bmRlZmluZWQgb3IgJycsIG5vdCBudWxsXG5cdFx0XHRcdGlmIChjdHguZWRpdE1vZGUgPT09ICduZXcnICYmIGN0eC5uZXdTZWN0aW9uVGl0bGUpIHtcblx0XHRcdFx0XHRjdHguZWRpdFN1bW1hcnkgPSAnJztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcignSW50ZXJuYWwgZXJyb3I6IGVkaXQgc3VtbWFyeSBub3Qgc2V0IGJlZm9yZSBzYXZlIScpO1xuXHRcdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gc2hvdWxkbid0IGhhcHBlbiBpZiBjYW5Vc2VNd1VzZXJUb2tlbiA9PT0gdHJ1ZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjdHguZnVsbHlQcm90ZWN0ZWQgJiZcblx0XHRcdFx0IWN0eC5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nICYmXG5cdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdGN0eC5mdWxseVByb3RlY3RlZCA9PT0gJ2luZmluaXR5J1xuXHRcdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+aCqOWNs+Wwhue8lui+keWFqOS/neaKpOmhtemdouKAnCcsICfmgqjljbPlsIfnt6jovK/lhajkv53orbfpoIHpnaLjgIwnKSArXG5cdFx0XHRcdFx0XHRcdFx0Y3R4LnBhZ2VOYW1lICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn4oCd77yI5peg6ZmQ5pyf77yJ44CCXFxuXFxu5Y2V5Ye756Gu5a6a5Lul56Gu5a6a77yM5oiW5Y2V5Ye75Y+W5raI5Lul5Y+W5raI5pON5L2c44CCJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfjgI3vvIjnhKHpmZDmnJ/vvInjgIJcXG5cXG7pu57mk4rnorrlrprku6XnorrlrprvvIzmiJbpu57mk4rlj5bmtojku6Xlj5bmtojmk43kvZzjgIInXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0OiBgJHtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aCqOWNs+Wwhue8lui+keWFqOS/neaKpOmhtemdouKAnCcsICfmgqjljbPlsIfnt6jovK/lhajkv53orbfpoIHpnaLjgIwnKSArXG5cdFx0XHRcdFx0XHRcdFx0Y3R4LnBhZ2VOYW1lICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+KAne+8iOWIsOacn++8micsICfjgI3vvIjliLDmnJ/vvJonKSArXG5cdFx0XHRcdFx0XHRcdFx0bmV3IE1vcmViaXRzLmRhdGUoY3R4LmZ1bGx5UHJvdGVjdGVkKS5jYWxlbmRhcigndXRjJylcblx0XHRcdFx0XHRcdFx0fSAoVVRDKe+8ieOAglxcblxcbiR7d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfljZXlh7vnoa7lrprku6Xnoa7lrprvvIzmiJbljZXlh7vlj5bmtojku6Xlj5bmtojmk43kvZzjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfpu57mk4rnorrlrprku6XnorrlrprvvIzmiJbpu57mk4rlj5bmtojku6Xlj5bmtojmk43kvZzjgIInXG5cdFx0XHRcdFx0XHRcdCl9YFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCflt7Llj5bmtojlr7nlhajkv53miqTpobXpnaLnmoTnvJbovpHjgIInLCAn5bey5Y+W5raI5bCN5YWo5L+d6K236aCB6Z2i55qE57eo6Lyv44CCJykpO1xuXHRcdFx0XHRjdHgub25TYXZlRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y3R4LnJldHJpZXMgPSAwO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ2VkaXQnLFxuXHRcdFx0XHR0aXRsZTogY3R4LnBhZ2VOYW1lLFxuXHRcdFx0XHRzdW1tYXJ5OiBjdHguZWRpdFN1bW1hcnksXG5cdFx0XHRcdHRva2VuOiBjYW5Vc2VNd1VzZXJUb2tlbiA/IG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJykgOiBjdHguY3NyZlRva2VuLFxuXHRcdFx0XHR3YXRjaGxpc3Q6IGN0eC53YXRjaGxpc3RPcHRpb24sXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0fTtcblx0XHRcdGlmIChjdHguY2hhbmdlVGFncykge1xuXHRcdFx0XHRxdWVyeS50YWdzID0gY3R4LmNoYW5nZVRhZ3M7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZm5BcHBseVdhdGNobGlzdEV4cGlyeSgpKSB7XG5cdFx0XHRcdHF1ZXJ5LndhdGNobGlzdGV4cGlyeSA9IGN0eC53YXRjaGxpc3RFeHBpcnk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGN0eC5wYWdlU2VjdGlvbiA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0cXVlcnkuc2VjdGlvbiA9IGN0eC5wYWdlU2VjdGlvbjtcblx0XHRcdH1cblx0XHRcdC8vIFNldCBtaW5vciBlZGl0IGF0dHJpYnV0ZS4gSWYgdGhlc2UgcGFyYW1ldGVycyBhcmUgcHJlc2VudCB3aXRoIGFueSB2YWx1ZSwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdHJ1ZVxuXHRcdFx0aWYgKGN0eC5taW5vckVkaXQpIHtcblx0XHRcdFx0cXVlcnkubWlub3IgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cXVlcnkubm90bWlub3IgPSB0cnVlOyAvLyBmb3JjZSBUd2lua2xlIGNvbmZpZyB0byBvdmVycmlkZSB1c2VyIHByZWZlcmVuY2Ugc2V0dGluZyBmb3IgXCJhbGwgZWRpdHMgYXJlIG1pbm9yXCJcblx0XHRcdH1cblx0XHRcdC8vIFNldCBib3QgZWRpdCBhdHRyaWJ1dGUuIElmIHRoaXMgcGFyYW1ldGVyIGlzIHByZXNlbnQgd2l0aCBhbnkgdmFsdWUsIGl0IGlzIGludGVycHJldGVkIGFzIHRydWVcblx0XHRcdGlmIChjdHguYm90RWRpdCkge1xuXHRcdFx0XHRxdWVyeS5ib3QgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChjdHguZWRpdE1vZGUpIHtcblx0XHRcdFx0Y2FzZSAnYXBwZW5kJzpcblx0XHRcdFx0XHRpZiAoY3R4LmFwcGVuZFRleHQgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKCdJbnRlcm5hbCBlcnJvcjogYXBwZW5kIHRleHQgbm90IHNldCBiZWZvcmUgc2F2ZSEnKTtcblx0XHRcdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVyeS5hcHBlbmR0ZXh0ID0gY3R4LmFwcGVuZFRleHQ7IC8vIHVzZSBtb2RlIHRvIGFwcGVuZCB0byBjdXJyZW50IHBhZ2UgY29udGVudHNcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncHJlcGVuZCc6XG5cdFx0XHRcdFx0aWYgKGN0eC5wcmVwZW5kVGV4dCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoJ0ludGVybmFsIGVycm9yOiBwcmVwZW5kIHRleHQgbm90IHNldCBiZWZvcmUgc2F2ZSEnKTtcblx0XHRcdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVyeS5wcmVwZW5kdGV4dCA9IGN0eC5wcmVwZW5kVGV4dDsgLy8gdXNlIG1vZGUgdG8gcHJlcGVuZCB0byBjdXJyZW50IHBhZ2UgY29udGVudHNcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnbmV3Jzpcblx0XHRcdFx0XHRpZiAoIWN0eC5uZXdTZWN0aW9uVGV4dCkge1xuXHRcdFx0XHRcdFx0Ly8gQVBJIGRvZXNuJ3QgYWxsb3cgZW1wdHkgbmV3IHNlY3Rpb24gdGV4dFxuXHRcdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoJ0ludGVybmFsIGVycm9yOiBuZXcgc2VjdGlvbiB0ZXh0IG5vdCBzZXQgYmVmb3JlIHNhdmUhJyk7XG5cdFx0XHRcdFx0XHRjdHgub25TYXZlRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cXVlcnkuc2VjdGlvbiA9ICduZXcnO1xuXHRcdFx0XHRcdHF1ZXJ5LnRleHQgPSBjdHgubmV3U2VjdGlvblRleHQ7IC8vIGFkZCBhIG5ldyBzZWN0aW9uIHRvIGN1cnJlbnQgcGFnZVxuXHRcdFx0XHRcdHF1ZXJ5LnNlY3Rpb250aXRsZSA9IGN0eC5uZXdTZWN0aW9uVGl0bGUgfHwgY3R4LmVkaXRTdW1tYXJ5OyAvLyBkb25lIGJ5IHRoZSBBUEksIGJ1dCBub24tJycgdmFsdWVzIHdvdWxkIGdldCB0cmVhdGVkIGFzIHRleHRcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncmV2ZXJ0Jzpcblx0XHRcdFx0XHRxdWVyeS51bmRvID0gY3R4LnJldmVydEN1cklEO1xuXHRcdFx0XHRcdHF1ZXJ5LnVuZG9hZnRlciA9IGN0eC5yZXZlcnRPbGRJRDtcblx0XHRcdFx0XHRpZiAoY3R4Lmxhc3RFZGl0VGltZSkge1xuXHRcdFx0XHRcdFx0cXVlcnkuYmFzZXRpbWVzdGFtcCA9IGN0eC5sYXN0RWRpdFRpbWU7IC8vIGNoZWNrIHRoYXQgcGFnZSBoYXNuJ3QgYmVlbiBlZGl0ZWQgc2luY2UgaXQgd2FzIGxvYWRlZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHF1ZXJ5LnN0YXJ0dGltZXN0YW1wID0gY3R4LmxvYWRUaW1lOyAvLyBjaGVjayB0aGF0IHBhZ2UgaGFzbid0IGJlZW4gZGVsZXRlZCBzaW5jZSBpdCB3YXMgbG9hZGVkIChkb24ndCByZWNyZWF0ZSBiYWQgc3R1ZmYpXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gJ2FsbCdcblx0XHRcdFx0XHRxdWVyeS50ZXh0ID0gY3R4LnBhZ2VUZXh0OyAvLyByZXBsYWNlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgcGFnZVxuXHRcdFx0XHRcdGlmIChjdHgubGFzdEVkaXRUaW1lKSB7XG5cdFx0XHRcdFx0XHRxdWVyeS5iYXNldGltZXN0YW1wID0gY3R4Lmxhc3RFZGl0VGltZTsgLy8gY2hlY2sgdGhhdCBwYWdlIGhhc24ndCBiZWVuIGVkaXRlZCBzaW5jZSBpdCB3YXMgbG9hZGVkXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cXVlcnkuc3RhcnR0aW1lc3RhbXAgPSBjdHgubG9hZFRpbWU7IC8vIGNoZWNrIHRoYXQgcGFnZSBoYXNuJ3QgYmVlbiBkZWxldGVkIHNpbmNlIGl0IHdhcyBsb2FkZWQgKGRvbid0IHJlY3JlYXRlIGJhZCBzdHVmZilcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChbJ3JlY3JlYXRlJywgJ2NyZWF0ZW9ubHknLCAnbm9jcmVhdGUnXS5pbmNsdWRlcyhjdHguY3JlYXRlT3B0aW9uKSkge1xuXHRcdFx0XHRxdWVyeVtjdHguY3JlYXRlT3B0aW9uXSA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNhblVzZU13VXNlclRva2VuICYmIGN0eC5mb2xsb3dSZWRpcmVjdCkge1xuXHRcdFx0XHRxdWVyeS5yZWRpcmVjdCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRjdHguc2F2ZUFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCfkv53lrZjpobXpnaLigKbigKYnLCAn5YSy5a2Y6aCB6Z2i4oCm4oCmJyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRmblNhdmVTdWNjZXNzLFxuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0Zm5TYXZlRXJyb3Jcblx0XHRcdCk7XG5cdFx0XHRjdHguc2F2ZUFwaS5zZXRQYXJlbnQodGhpcyk7XG5cdFx0XHRjdHguc2F2ZUFwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBBZGRzIHRoZSB0ZXh0IHByb3ZpZGVkIHZpYSBgc2V0QXBwZW5kVGV4dCgpYCB0byB0aGUgZW5kIG9mIHRoZVxuXHRcdCAqIHBhZ2UuICBEb2VzIG5vdCByZXF1aXJlIGNhbGxpbmcgYGxvYWQoKWAgZmlyc3QsIHVubGVzcyBhIHdhdGNobGlzdFxuXHRcdCAqIGV4cGlyeSBpcyB1c2VkLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VjY2Vzc10gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGhhcyBzdWNjZWVkZWQuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGZhaWxzLlxuXHRcdCAqL1xuXHRcdHRoaXMuYXBwZW5kID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAnYXBwZW5kJztcblx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdlZGl0JykpIHtcblx0XHRcdFx0dGhpcy5zYXZlKG9uU3VjY2Vzcywgb25GYWlsdXJlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN0eC5vblNhdmVTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0XHRjdHgub25TYXZlRmFpbHVyZSA9IG9uRmFpbHVyZSB8fCBlbXB0eUZ1bmN0aW9uO1xuXHRcdFx0XHR0aGlzLmxvYWQoZm5BdXRvU2F2ZSwgY3R4Lm9uU2F2ZUZhaWx1cmUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQWRkcyB0aGUgdGV4dCBwcm92aWRlZCB2aWEgYHNldFByZXBlbmRUZXh0KClgIHRvIHRoZSBzdGFydCBvZiB0aGVcblx0XHQgKiBwYWdlLiAgRG9lcyBub3QgcmVxdWlyZSBjYWxsaW5nIGBsb2FkKClgIGZpcnN0LCB1bmxlc3MgYSB3YXRjaGxpc3Rcblx0XHQgKiBleHBpcnkgaXMgdXNlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259ICBbb25TdWNjZXNzXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBtZXRob2QgaGFzIHN1Y2NlZWRlZC5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGZhaWxzLlxuXHRcdCAqL1xuXHRcdHRoaXMucHJlcGVuZCA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuXHRcdFx0Y3R4LmVkaXRNb2RlID0gJ3ByZXBlbmQnO1xuXHRcdFx0aWYgKGZuQ2FuVXNlTXdVc2VyVG9rZW4oJ2VkaXQnKSkge1xuXHRcdFx0XHR0aGlzLnNhdmUob25TdWNjZXNzLCBvbkZhaWx1cmUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4Lm9uU2F2ZVN1Y2Nlc3MgPSBvblN1Y2Nlc3M7XG5cdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlID0gb25GYWlsdXJlIHx8IGVtcHR5RnVuY3Rpb247XG5cdFx0XHRcdHRoaXMubG9hZChmbkF1dG9TYXZlLCBjdHgub25TYXZlRmFpbHVyZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBDcmVhdGVzIGEgbmV3IHNlY3Rpb24gd2l0aCB0aGUgdGV4dCBwcm92aWRlZCBieSBgc2V0TmV3U2VjdGlvblRleHQoKWBcblx0XHQgKiBhbmQgc2VjdGlvbiB0aXRsZSBmcm9tIGBzZXROZXdTZWN0aW9uVGl0bGUoKWAuXG5cdFx0ICogSWYgYGVkaXRTdW1tYXJ5YCBpcyBwcm92aWRlZCwgdGhhdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGVcblx0XHQgKiBhdXRvZ2VuZXJhdGVkIFwiLT5UaXRsZSAobmV3IHNlY3Rpb25cIiBlZGl0IHN1bW1hcnkuXG5cdFx0ICogRG9lcyBub3QgcmVxdWlyZSBjYWxsaW5nIGBsb2FkKClgIGZpcnN0LCB1bmxlc3MgYSB3YXRjaGxpc3QgZXhwaXJ5XG5cdFx0ICogaXMgdXNlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259ICBbb25TdWNjZXNzXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBtZXRob2QgaGFzIHN1Y2NlZWRlZC5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGZhaWxzLlxuXHRcdCAqL1xuXHRcdHRoaXMubmV3U2VjdGlvbiA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuXHRcdFx0Y3R4LmVkaXRNb2RlID0gJ25ldyc7XG5cdFx0XHRpZiAoZm5DYW5Vc2VNd1VzZXJUb2tlbignZWRpdCcpKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZShvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdHgub25TYXZlU3VjY2VzcyA9IG9uU3VjY2Vzcztcblx0XHRcdFx0Y3R4Lm9uU2F2ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdFx0dGhpcy5sb2FkKGZuQXV0b1NhdmUsIGN0eC5vblNhdmVGYWlsdXJlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8qKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgbG9hZGVkIHBhZ2UsIGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlICovXG5cdFx0dGhpcy5nZXRQYWdlTmFtZSA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHgucGFnZU5hbWU7XG5cdFx0fTtcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gVGhlIHRleHQgb2YgdGhlIHBhZ2UgYWZ0ZXIgYSBzdWNjZXNzZnVsIGxvYWQoKSAqL1xuXHRcdHRoaXMuZ2V0UGFnZVRleHQgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnBhZ2VUZXh0O1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7c3RyaW5nfSBwYWdlVGV4dCAtIFVwZGF0ZWQgcGFnZSB0ZXh0IHRoYXQgd2lsbCBiZSBzYXZlZCB3aGVuIGBzYXZlKClgIGlzIGNhbGxlZCAqL1xuXHRcdHRoaXMuc2V0UGFnZVRleHQgPSAocGFnZVRleHQpID0+IHtcblx0XHRcdGN0eC5lZGl0TW9kZSA9ICdhbGwnO1xuXHRcdFx0Y3R4LnBhZ2VUZXh0ID0gcGFnZVRleHQ7XG5cdFx0fTtcblx0XHQvKiogQHBhcmFtIHtzdHJpbmd9IGFwcGVuZFRleHQgLSBUZXh0IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcGFnZSB3aGVuIGBhcHBlbmQoKWAgaXMgY2FsbGVkICovXG5cdFx0dGhpcy5zZXRBcHBlbmRUZXh0ID0gKGFwcGVuZFRleHQpID0+IHtcblx0XHRcdGN0eC5lZGl0TW9kZSA9ICdhcHBlbmQnO1xuXHRcdFx0Y3R4LmFwcGVuZFRleHQgPSBhcHBlbmRUZXh0O1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7c3RyaW5nfSBwcmVwZW5kVGV4dCAtIFRleHQgdGhhdCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgcGFnZSB3aGVuIGBwcmVwZW5kKClgIGlzIGNhbGxlZCAqL1xuXHRcdHRoaXMuc2V0UHJlcGVuZFRleHQgPSAocHJlcGVuZFRleHQpID0+IHtcblx0XHRcdGN0eC5lZGl0TW9kZSA9ICdwcmVwZW5kJztcblx0XHRcdGN0eC5wcmVwZW5kVGV4dCA9IHByZXBlbmRUZXh0O1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7c3RyaW5nfSBuZXdTZWN0aW9uVGV4dCAtIFRleHQgdGhhdCB3aWxsIGJlIGFkZGVkIGluIGEgbmV3IHNlY3Rpb24gb24gdGhlIHBhZ2Ugd2hlbiBgbmV3U2VjdGlvbigpYCBpcyBjYWxsZWQgKi9cblx0XHR0aGlzLnNldE5ld1NlY3Rpb25UZXh0ID0gKG5ld1NlY3Rpb25UZXh0KSA9PiB7XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAnbmV3Jztcblx0XHRcdGN0eC5uZXdTZWN0aW9uVGV4dCA9IG5ld1NlY3Rpb25UZXh0O1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1NlY3Rpb25UaXRsZSAtIFRpdGxlIGZvciB0aGUgbmV3IHNlY3Rpb24gY3JlYXRlZCB3aGVuIGBuZXdTZWN0aW9uKClgIGlzIGNhbGxlZFxuXHRcdCAqIElmIG1pc3NpbmcsIGBjdHguZWRpdFN1bW1hcnlgIHdpbGwgYmUgdXNlZC4gSXNzdWVzIG1heSBvY2N1ciBpZiBhIHN1YnN0aXR1dGVkIHRlbXBsYXRlIGlzIHVzZWQuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXROZXdTZWN0aW9uVGl0bGUgPSAobmV3U2VjdGlvblRpdGxlKSA9PiB7XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAnbmV3Jztcblx0XHRcdGN0eC5uZXdTZWN0aW9uVGl0bGUgPSBuZXdTZWN0aW9uVGl0bGU7XG5cdFx0fTtcblx0XHQvLyBFZGl0LXJlbGF0ZWQgc2V0dGVyIG1ldGhvZHM6XG5cdFx0LyoqXG5cdFx0ICogU2V0IHRoZSBlZGl0IHN1bW1hcnkgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBgc2F2ZSgpYCBpcyBjYWxsZWQuXG5cdFx0ICogVW5uZWNlc3NhcnkgaWYgZWRpdE1vZGUgaXMgJ25ldycgYW5kIG5ld1NlY3Rpb25UaXRsZSBpcyBwcm92aWRlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdW1tYXJ5XG5cdFx0ICovXG5cdFx0dGhpcy5zZXRFZGl0U3VtbWFyeSA9IChzdW1tYXJ5KSA9PiB7XG5cdFx0XHRjdHguZWRpdFN1bW1hcnkgPSBzdW1tYXJ5O1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogU2V0IGFueSBjdXN0b20gdGFnKHMpIHRvIGJlIGFwcGxpZWQgdG8gdGhlIEFQSSBhY3Rpb24uXG5cdFx0ICogQSBudW1iZXIgb2YgYWN0aW9ucyBkb24ndCBzdXBwb3J0IGl0LCBtb3N0IG5vdGFibHkgd2F0Y2guXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gdGFncyAtIFN0cmluZyBvciBhcnJheSBvZiB0YWcocykuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRDaGFuZ2VUYWdzID0gKHRhZ3MpID0+IHtcblx0XHRcdGN0eC5jaGFuZ2VUYWdzID0gdGFncztcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbY3JlYXRlT3B0aW9uPW51bGxdIC0gQ2FuIHRha2UgdGhlIGZvbGxvd2luZyBmb3VyIHZhbHVlczpcblx0XHQgKiAtIHJlY3JlYXRlOiBjcmVhdGUgdGhlIHBhZ2UgaWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGVkaXQgaXQgaWYgaXQgZXhpc3RzLlxuXHRcdCAqIC0gY3JlYXRlb25seTogY3JlYXRlIHRoZSBwYWdlIGlmIGl0IGRvZXMgbm90IGV4aXN0LCBidXQgcmV0dXJuIGFuXG5cdFx0ICogZXJyb3IgaWYgaXQgYWxyZWFkeSBleGlzdHMuXG5cdFx0ICogLSBub2NyZWF0ZTogZG9uJ3QgY3JlYXRlIHRoZSBwYWdlLCBvbmx5IGVkaXQgaXQgaWYgaXQgYWxyZWFkeSBleGlzdHMuXG5cdFx0ICogLSBgbnVsbGA6IGNyZWF0ZSB0aGUgcGFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdCwgdW5sZXNzIGl0IHdhcyBkZWxldGVkXG5cdFx0ICogaW4gdGhlIG1vbWVudCBiZXR3ZWVuIGxvYWRpbmcgdGhlIHBhZ2UgYW5kIHNhdmluZyB0aGUgZWRpdCAoZGVmYXVsdCkuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRDcmVhdGVPcHRpb24gPSAoY3JlYXRlT3B0aW9uKSA9PiB7XG5cdFx0XHRjdHguY3JlYXRlT3B0aW9uID0gY3JlYXRlT3B0aW9uO1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7Ym9vbGVhbn0gbWlub3JFZGl0IC0gU2V0IHRydWUgdG8gbWFyayB0aGUgZWRpdCBhcyBhIG1pbm9yIGVkaXQuICovXG5cdFx0dGhpcy5zZXRNaW5vckVkaXQgPSAobWlub3JFZGl0KSA9PiB7XG5cdFx0XHRjdHgubWlub3JFZGl0ID0gbWlub3JFZGl0O1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7Ym9vbGVhbn0gYm90RWRpdCAtIFNldCB0cnVlIHRvIG1hcmsgdGhlIGVkaXQgYXMgYSBib3QgZWRpdCAqL1xuXHRcdHRoaXMuc2V0Qm90RWRpdCA9IChib3RFZGl0KSA9PiB7XG5cdFx0XHRjdHguYm90RWRpdCA9IGJvdEVkaXQ7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gcGFnZVNlY3Rpb24gLSBJbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIHNlY3Rpb24gbnVtYmVyIHRvIGxvYWQgb3Igc2F2ZS5cblx0XHQgKiBJZiBzcGVjaWZpZWQgYXMgYG51bGxgLCB0aGUgZW50aXJlIHBhZ2Ugd2lsbCBiZSByZXRyaWV2ZWQuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRQYWdlU2VjdGlvbiA9IChwYWdlU2VjdGlvbikgPT4ge1xuXHRcdFx0Y3R4LnBhZ2VTZWN0aW9uID0gcGFnZVNlY3Rpb247XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbWF4Q29uZmxpY3RSZXRyaWVzIC0gTnVtYmVyIG9mIHJldHJpZXMgZm9yIHNhdmUgZXJyb3JzIGludm9sdmluZyBhbiBlZGl0IGNvbmZsaWN0IG9yXG5cdFx0ICogbG9zcyBvZiB0b2tlbi4gRGVmYXVsdDogMi5cblx0XHQgKi9cblx0XHR0aGlzLnNldE1heENvbmZsaWN0UmV0cmllcyA9IChtYXhDb25mbGljdFJldHJpZXMpID0+IHtcblx0XHRcdGN0eC5tYXhDb25mbGljdFJldHJpZXMgPSBtYXhDb25mbGljdFJldHJpZXM7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbWF4UmV0cmllcyAtIE51bWJlciBvZiByZXRyaWVzIGZvciBzYXZlIGVycm9ycyBub3QgaW52b2x2aW5nIGFuIGVkaXQgY29uZmxpY3Qgb3Jcblx0XHQgKiBsb3NzIG9mIHRva2VuLiBEZWZhdWx0OiAyLlxuXHRcdCAqL1xuXHRcdHRoaXMuc2V0TWF4UmV0cmllcyA9IChtYXhSZXRyaWVzKSA9PiB7XG5cdFx0XHRjdHgubWF4UmV0cmllcyA9IG1heFJldHJpZXM7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBTZXQgd2hldGhlciBhbmQgaG93IHRvIHdhdGNoIHRoZSBwYWdlLCBpbmNsdWRpbmcgc2V0dGluZyBhbiBleHBpcnkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW58c3RyaW5nfE1vcmViaXRzLmRhdGV8RGF0ZX0gW3dhdGNobGlzdE9wdGlvbj1mYWxzZV0gLVxuXHRcdCAqIEJhc2ljYWxseSBhIG1peCBvZiBNVyBBUEkgYW5kIFR3aW5rbGV5IG9wdGlvbnMgYXZhaWxhYmxlIHByZS1leHBpcnk6XG5cdFx0ICogLSBgdHJ1ZWB8YCd5ZXMnYHxgJ3dhdGNoJ2A6IHBhZ2Ugd2lsbCBiZSBhZGRlZCB0byB0aGUgdXNlcidzXG5cdFx0ICogd2F0Y2hsaXN0IHdoZW4gdGhlIGFjdGlvbiBpcyBjYWxsZWQuIERlZmF1bHRzIHRvIGFuIGluZGVmaW5pdGVcblx0XHQgKiB3YXRjaCB1bmxlc3MgYHdhdGNobGlzdEV4cGlyeWAgaXMgcHJvdmlkZWQuXG5cdFx0ICogLSBgZmFsc2VgfGAnbm8nYHxgJ25vY2hhbmdlJ2A6IHdhdGNobGlzdCBzdGF0dXMgb2YgdGhlIHBhZ2UgKGluY2x1ZGluZyBleHBpcnkpIHdpbGwgbm90IGJlIGNoYW5nZWQuXG5cdFx0ICogLSBgJ2RlZmF1bHQnYHxgJ3ByZWZlcmVuY2VzJ2A6IHdhdGNobGlzdCBzdGF0dXMgb2YgdGhlIHBhZ2Ugd2lsbCBiZVxuXHRcdCAqIHNldCBiYXNlZCBvbiB0aGUgdXNlcidzIHByZWZlcmVuY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgYWN0aW9uIGlzXG5cdFx0ICogY2FsbGVkLiBEZWZhdWx0cyB0byBhbiBpbmRlZmluaXRlIHdhdGNoIHVubGVzcyBgd2F0Y2hsaXN0RXhwaXJ5YCBpc1xuXHRcdCAqIHByb3ZpZGVkLlxuXHRcdCAqIC0gYCd1bndhdGNoJ2A6IGV4cGxpY2l0bHkgdW53YXRjaCB0aGUgcGFnZS5cblx0XHQgKiAtIEFueSBvdGhlciBgc3RyaW5nYCBvciBgbnVtYmVyYCwgb3IgYSBgTW9yZWJpdHMuZGF0ZWAgb3IgYERhdGVgXG5cdFx0ICogb2JqZWN0OiB3YXRjaCBwYWdlIHVudGlsIHRoZSBzcGVjaWZpZWQgdGltZSwgZGVmZXJyaW5nIHRvXG5cdFx0ICogYHdhdGNobGlzdEV4cGlyeWAgaWYgcHJvdmlkZWQuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfE1vcmViaXRzLmRhdGV8RGF0ZX0gW3dhdGNobGlzdEV4cGlyeT1pbmZpbml0eV0gLVxuXHRcdCAqIEEgZGF0ZS1saWtlIHN0cmluZyBvciBudW1iZXIsIG9yIGEgZGF0ZSBvYmplY3QuICBJZiBhIHN0cmluZyBvciBudW1iZXIsXG5cdFx0ICogY2FuIGJlIHJlbGF0aXZlICgyIHdlZWtzKSBvciBvdGhlciBzaW1pbGFybHkgZGF0ZS1saWtlIChpLmUuIE5PVCBcInBvdGF0b1wiKTpcblx0XHQgKiBJU08gODYwMTogMjAzOC0wMS0wOVQwMzoxNDowN1pcblx0XHQgKiBNZWRpYVdpa2k6IDIwMzgwMTA5MDMxNDA3XG5cdFx0ICogVU5JWDogMjE0NzQ4MzY0N1xuXHRcdCAqIFNRTDogMjAzOC0wMS0wOSAwMzoxNDowN1xuXHRcdCAqIENhbiBhbHNvIGJlIGBpbmZpbml0eWAgb3IgaW5maW5pdHktbGlrZSAoYGluZmluaXRlYCwgYGluZGVmaW5pdGVgLCBhbmQgYG5ldmVyYCkuXG5cdFx0ICogU2VlIHtAbGluayBodHRwczovL3BoYWJyaWNhdG9yLndpa2ltZWRpYS5vcmcvc291cmNlL21lZGlhd2lraS1saWJzLVRpbWVzdGFtcC9icm93c2UvbWFzdGVyL3NyYy9Db252ZXJ0aWJsZVRpbWVzdGFtcC5waHA7NGU1M2I4NTlhOTU4MGM1NTk1ODA3OGY0NmRkNGYzYTQ0ZDBmY2FhMCQ1Ny0xMDk/YXM9c291cmNlJmJsYW1lPW9mZn1cblx0XHQgKi9cblx0XHR0aGlzLnNldFdhdGNobGlzdCA9ICh3YXRjaGxpc3RPcHRpb24sIHdhdGNobGlzdEV4cGlyeSkgPT4ge1xuXHRcdFx0aWYgKHdhdGNobGlzdE9wdGlvbiBpbnN0YW5jZW9mIE1vcmViaXRzLmRhdGUgfHwgd2F0Y2hsaXN0T3B0aW9uIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR3YXRjaGxpc3RPcHRpb24gPSB3YXRjaGxpc3RPcHRpb24udG9JU09TdHJpbmcoKTtcblx0XHRcdH1cblx0XHRcdGlmICh3YXRjaGxpc3RFeHBpcnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR3YXRjaGxpc3RFeHBpcnkgPSAnaW5maW5pdHknO1xuXHRcdFx0fSBlbHNlIGlmICh3YXRjaGxpc3RFeHBpcnkgaW5zdGFuY2VvZiBNb3JlYml0cy5kYXRlIHx8IHdhdGNobGlzdEV4cGlyeSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0d2F0Y2hsaXN0RXhwaXJ5ID0gd2F0Y2hsaXN0RXhwaXJ5LnRvSVNPU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHdhdGNobGlzdE9wdGlvbikge1xuXHRcdFx0XHRjYXNlICdub2NoYW5nZSc6XG5cdFx0XHRcdGNhc2UgJ25vJzpcblx0XHRcdFx0Y2FzZSBmYWxzZTpcblx0XHRcdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRcdFx0Y3R4LndhdGNobGlzdE9wdGlvbiA9ICdub2NoYW5nZSc7XG5cdFx0XHRcdFx0Ly8gVGhlIE1XIEFQSSBhbGxvd3MgZm9yIGNoYW5naW5nIGV4cGlyeSB3aXRoIG5vY2hhbmdlIChhcyBcIm5vY2hhbmdlXCIgcmVmZXJzIHRvIHRoZSBiaW5hcnkgc3RhdHVzKSxcblx0XHRcdFx0XHQvLyBidXQgYnkga2VlcGluZyB0aGlzIG51bGwgaXQgd2lsbCBkZWZhdWx0IHRvIGFueSBleGlzdGluZyBleHBpcnksIGVuc3VyZSB0aGVyZSBpcyBhY3R1YWxseSBcIm5vIGNoYW5nZS5cIlxuXHRcdFx0XHRcdGN0eC53YXRjaGxpc3RFeHBpcnkgPSBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd1bndhdGNoJzpcblx0XHRcdFx0XHQvLyBleHBpcnkgdW5pbXBvcnRhbnRcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0T3B0aW9uID0gJ3Vud2F0Y2gnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdwcmVmZXJlbmNlcyc6XG5cdFx0XHRcdGNhc2UgJ2RlZmF1bHQnOlxuXHRcdFx0XHRcdGN0eC53YXRjaGxpc3RPcHRpb24gPSAncHJlZmVyZW5jZXMnO1xuXHRcdFx0XHRcdC8vIFRoZSBBUEkgYWxsb3dzIGFuIGV4cGlyeSBoZXJlLCBidXQgdGhlcmUgaXMgYXMgb2YgeWV0IChUMjY1NzE2KVxuXHRcdFx0XHRcdC8vIG5vIGV4cGlyeSBwcmVmZXJlbmNlIG9wdGlvbiwgc28gaXQncyBhIGJpdCBkZXZvaWQgb2YgY29udGV4dC5cblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0RXhwaXJ5ID0gd2F0Y2hsaXN0RXhwaXJ5O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd3YXRjaCc6XG5cdFx0XHRcdGNhc2UgJ3llcyc6XG5cdFx0XHRcdGNhc2UgdHJ1ZTpcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0T3B0aW9uID0gJ3dhdGNoJztcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0RXhwaXJ5ID0gd2F0Y2hsaXN0RXhwaXJ5O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIE5vdCByZWFsbHkgYSBcImRlZmF1bHRcIiBwZXIgc2UgYnV0IGNhdGNoZXMgXCJhbnkgb3RoZXIgc3RyaW5nXCJcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0T3B0aW9uID0gJ3dhdGNoJztcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0RXhwaXJ5ID0gd2F0Y2hsaXN0T3B0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogU2V0IGEgd2F0Y2hsaXN0IGV4cGlyeS4gc2V0V2F0Y2hsaXN0IGNhbiBtb3N0bHkgaGFuZGxlIHRoaXMgYnlcblx0XHQgKiBpdHNlbGYsIHNvIHRoaXMgaXMgaGVyZSBsYXJnZWx5IGZvciBjb21wbGV0ZW5lc3MgYW5kIGNvbXBhdGliaWxpdHlcblx0XHQgKiB3aXRoIHRoZSBmdWxsIHN1aXRlIG9mIG9wdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8TW9yZWJpdHMuZGF0ZXxEYXRlfSBbd2F0Y2hsaXN0RXhwaXJ5PWluZmluaXR5XSAtXG5cdFx0ICogQSBkYXRlLWxpa2Ugc3RyaW5nIG9yIG51bWJlciwgb3IgYSBkYXRlIG9iamVjdC4gIElmIGEgc3RyaW5nIG9yIG51bWJlcixcblx0XHQgKiBjYW4gYmUgcmVsYXRpdmUgKDIgd2Vla3MpIG9yIG90aGVyIHNpbWlsYXJseSBkYXRlLWxpa2UgKGkuZS4gTk9UIFwicG90YXRvXCIpOlxuXHRcdCAqIElTTyA4NjAxOiAyMDM4LTAxLTA5VDAzOjE0OjA3WlxuXHRcdCAqIE1lZGlhV2lraTogMjAzODAxMDkwMzE0MDdcblx0XHQgKiBVTklYOiAyMTQ3NDgzNjQ3XG5cdFx0ICogU1FMOiAyMDM4LTAxLTA5IDAzOjE0OjA3XG5cdFx0ICogQ2FuIGFsc28gYmUgYGluZmluaXR5YCBvciBpbmZpbml0eS1saWtlIChgaW5maW5pdGVgLCBgaW5kZWZpbml0ZWAsIGFuZCBgbmV2ZXJgKS5cblx0XHQgKiBTZWUge0BsaW5rIGh0dHBzOi8vcGhhYnJpY2F0b3Iud2lraW1lZGlhLm9yZy9zb3VyY2UvbWVkaWF3aWtpLWxpYnMtVGltZXN0YW1wL2Jyb3dzZS9tYXN0ZXIvc3JjL0NvbnZlcnRpYmxlVGltZXN0YW1wLnBocDs0ZTUzYjg1OWE5NTgwYzU1OTU4MDc4ZjQ2ZGQ0ZjNhNDRkMGZjYWEwJDU3LTEwOT9hcz1zb3VyY2UmYmxhbWU9b2ZmfVxuXHRcdCAqL1xuXHRcdHRoaXMuc2V0V2F0Y2hsaXN0RXhwaXJ5ID0gKHdhdGNobGlzdEV4cGlyeSkgPT4ge1xuXHRcdFx0aWYgKHdhdGNobGlzdEV4cGlyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHdhdGNobGlzdEV4cGlyeSA9ICdpbmZpbml0eSc7XG5cdFx0XHR9IGVsc2UgaWYgKHdhdGNobGlzdEV4cGlyeSBpbnN0YW5jZW9mIE1vcmViaXRzLmRhdGUgfHwgd2F0Y2hsaXN0RXhwaXJ5IGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR3YXRjaGxpc3RFeHBpcnkgPSB3YXRjaGxpc3RFeHBpcnkudG9JU09TdHJpbmcoKTtcblx0XHRcdH1cblx0XHRcdGN0eC53YXRjaGxpc3RFeHBpcnkgPSB3YXRjaGxpc3RFeHBpcnk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAZGVwcmVjYXRlZCBBcyBvZiBEZWNlbWJlciAyMDIwLCB1c2Ugc2V0V2F0Y2hsaXN0LlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dhdGNobGlzdE9wdGlvbj1mYWxzZV0gLVxuXHRcdCAqIC0gYFRydWVgOiBwYWdlIHdhdGNobGlzdCBzdGF0dXMgd2lsbCBiZSBzZXQgYmFzZWQgb24gdGhlIHVzZXInc1xuXHRcdCAqIHByZWZlcmVuY2Ugc2V0dGluZ3Mgd2hlbiBgc2F2ZSgpYCBpcyBjYWxsZWQuXG5cdFx0ICogLSBgRmFsc2VgOiB3YXRjaGxpc3Qgc3RhdHVzIG9mIHRoZSBwYWdlIHdpbGwgbm90IGJlIGNoYW5nZWQuXG5cdFx0ICpcblx0XHQgKiBXYXRjaGxpc3Qgbm90ZXM6XG5cdFx0ICogMS4gVGhlIE1lZGlhV2lraSBBUEkgdmFsdWUgb2YgJ3Vud2F0Y2gnLCB3aGljaCBleHBsaWNpdGx5IHJlbW92ZXNcblx0XHQgKiB0aGUgcGFnZSBmcm9tIHRoZSB1c2VyJ3Mgd2F0Y2hsaXN0LCBpcyBub3QgdXNlZC5cblx0XHQgKiAyLiBJZiBib3RoIGBzZXRXYXRjaGxpc3QoKWAgYW5kIGBzZXRXYXRjaGxpc3RGcm9tUHJlZmVyZW5jZXMoKWAgYXJlXG5cdFx0ICogY2FsbGVkLCB0aGUgbGFzdCBjYWxsIHRha2VzIHByaW9yaXR5LlxuXHRcdCAqIDMuIFR3aW5rbGUgbW9kdWxlcyBzaG91bGQgdXNlIHRoZSBhcHByb3ByaWF0ZSBwcmVmZXJlbmNlIHRvIHNldCB0aGUgd2F0Y2hsaXN0IG9wdGlvbnMuXG5cdFx0ICogNC4gTW9zdCBUd2lua2xlIG1vZHVsZXMgdXNlIGBzZXRXYXRjaGxpc3QoKWAuIGBzZXRXYXRjaGxpc3RGcm9tUHJlZmVyZW5jZXMoKWBcblx0XHQgKiBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIGZldyBUd2lua2xlIHdhdGNobGlzdCBwcmVmZXJlbmNlcyB0aGF0XG5cdFx0ICogYWNjZXB0IGEgc3RyaW5nIHZhbHVlIG9mIGBkZWZhdWx0YC5cblx0XHQgKi9cblx0XHR0aGlzLnNldFdhdGNobGlzdEZyb21QcmVmZXJlbmNlcyA9ICh3YXRjaGxpc3RPcHRpb24pID0+IHtcblx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0J1tNb3JlYml0c10gTk9URTogTW9yZWJpdHMud2lraS5wYWdlLnNldFdhdGNobGlzdEZyb21QcmVmZXJlbmNlcyB3YXMgZGVwcmVjYXRlZCBEZWNlbWJlciAyMDIwLCBwbGVhc2UgdXNlIHNldFdhdGNobGlzdCdcblx0XHRcdCk7XG5cdFx0XHRpZiAod2F0Y2hsaXN0T3B0aW9uKSB7XG5cdFx0XHRcdGN0eC53YXRjaGxpc3RPcHRpb24gPSAncHJlZmVyZW5jZXMnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4LndhdGNobGlzdE9wdGlvbiA9ICdub2NoYW5nZSc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb2xsb3dSZWRpcmVjdD1mYWxzZV0gLVxuXHRcdCAqIC0gYHRydWVgOiBhIG1heGltdW0gb2Ygb25lIHJlZGlyZWN0IHdpbGwgYmUgZm9sbG93ZWQuIEluIHRoZSBldmVudFxuXHRcdCAqIG9mIGEgcmVkaXJlY3QsIGEgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgYW5kIHRoZSByZWRpcmVjdFxuXHRcdCAqIHRhcmdldCBjYW4gYmUgcmV0cmlldmVkIHdpdGggZ2V0UGFnZU5hbWUoKS5cblx0XHQgKiAtIGBmYWxzZWA6IChkZWZhdWx0KSB0aGUgcmVxdWVzdGVkIHBhZ2VOYW1lIHdpbGwgYmUgdXNlZCB3aXRob3V0IHJlZ2FyZCB0byBhbnkgcmVkaXJlY3QuXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbZm9sbG93Q3Jvc3NOc1JlZGlyZWN0PXRydWVdIC0gTm90IGFwcGxpY2FibGUgaWYgYGZvbGxvd1JlZGlyZWN0YCBpcyBub3Qgc2V0IHRydWUuXG5cdFx0ICogLSBgdHJ1ZWA6IChkZWZhdWx0KSBmb2xsb3cgcmVkaXJlY3QgZXZlbiBpZiBpdCBpcyBhIGNyb3NzLW5hbWVzcGFjZSByZWRpcmVjdFxuXHRcdCAqIC0gYGZhbHNlYDogZG9uJ3QgZm9sbG93IHJlZGlyZWN0IGlmIGl0IGlzIGNyb3NzLW5hbWVzcGFjZSwgZWRpdCB0aGUgcmVkaXJlY3QgaXRzZWxmLlxuXHRcdCAqL1xuXHRcdHRoaXMuc2V0Rm9sbG93UmVkaXJlY3QgPSAoZm9sbG93UmVkaXJlY3QsIGZvbGxvd0Nyb3NzTnNSZWRpcmVjdCkgPT4ge1xuXHRcdFx0aWYgKGN0eC5wYWdlTG9hZGVkKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdCdJbnRlcm5hbCBlcnJvcjogY2Fubm90IGNoYW5nZSByZWRpcmVjdCBzZXR0aW5nIGFmdGVyIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCEnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGN0eC5mb2xsb3dSZWRpcmVjdCA9IGZvbGxvd1JlZGlyZWN0O1xuXHRcdFx0Y3R4LmZvbGxvd0Nyb3NzTnNSZWRpcmVjdCA9XG5cdFx0XHRcdGZvbGxvd0Nyb3NzTnNSZWRpcmVjdCA9PT0gdW5kZWZpbmVkID8gY3R4LmZvbGxvd0Nyb3NzTnNSZWRpcmVjdCA6IGZvbGxvd0Nyb3NzTnNSZWRpcmVjdDtcblx0XHR9O1xuXHRcdC8vIGxvb2t1cC1jcmVhdGlvbiBzZXR0ZXIgZnVuY3Rpb25cblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZsYWcgLSBJZiBzZXQgdHJ1ZSwgdGhlIGF1dGhvciBhbmQgdGltZXN0YW1wIG9mXG5cdFx0ICogdGhlIGZpcnN0IG5vbi1yZWRpcmVjdCB2ZXJzaW9uIG9mIHRoZSBwYWdlIGlzIHJldHJpZXZlZC5cblx0XHQgKlxuXHRcdCAqIFdhcm5pbmc6XG5cdFx0ICogMS4gSWYgdGhlcmUgYXJlIG5vIHJldmlzaW9ucyBhbW9uZyB0aGUgZmlyc3QgNTAgdGhhdCBhcmVcblx0XHQgKiBub24tcmVkaXJlY3RzLCBvciBpZiB0aGVyZSBhcmUgbGVzcyA1MCByZXZpc2lvbnMgYW5kIGFsbCBhcmVcblx0XHQgKiByZWRpcmVjdHMsIHRoZSBvcmlnaW5hbCBjcmVhdGlvbiBpcyByZXRyaWV2ZWQuXG5cdFx0ICogMi4gUmV2aXNpb25zIHRoYXQgdGhlIHVzZXIgaXMgbm90IHByaXZpbGVnZWQgdG8gYWNjZXNzXG5cdFx0ICogKHJldmRlbGVkL3N1cHByZXNzZWQpIHdpbGwgYmUgdHJlYXRlZCBhcyBub24tcmVkaXJlY3RzLlxuXHRcdCAqIDMuIE11c3Qgbm90IGJlIHVzZWQgd2hlbiB0aGUgcGFnZSBoYXMgYSBub24td2lraXRleHQgY29udGVudG1vZGVsXG5cdFx0ICogc3VjaCBhcyBNb2R1bGVzcGFjZSBMdWEgb3IgdXNlciBKYXZhU2NyaXB0L0NTUy5cblx0XHQgKi9cblx0XHR0aGlzLnNldExvb2t1cE5vblJlZGlyZWN0Q3JlYXRvciA9IChmbGFnKSA9PiB7XG5cdFx0XHRjdHgubG9va3VwTm9uUmVkaXJlY3RDcmVhdG9yID0gZmxhZztcblx0XHR9O1xuXHRcdC8vIE1vdmUtcmVsYXRlZCBzZXR0ZXIgZnVuY3Rpb25zXG5cdFx0LyoqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiAqL1xuXHRcdHRoaXMuc2V0TW92ZURlc3RpbmF0aW9uID0gKGRlc3RpbmF0aW9uKSA9PiB7XG5cdFx0XHRjdHgubW92ZURlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG5cdFx0fTtcblx0XHQvKiogQHBhcmFtIHtib29sZWFufSBmbGFnICovXG5cdFx0dGhpcy5zZXRNb3ZlVGFsa1BhZ2UgPSAoZmxhZykgPT4ge1xuXHRcdFx0Y3R4Lm1vdmVUYWxrUGFnZSA9ICEhZmxhZztcblx0XHR9O1xuXHRcdC8qKiBAcGFyYW0ge2Jvb2xlYW59IGZsYWcgKi9cblx0XHR0aGlzLnNldE1vdmVTdWJwYWdlcyA9IChmbGFnKSA9PiB7XG5cdFx0XHRjdHgubW92ZVN1YnBhZ2VzID0gISFmbGFnO1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7Ym9vbGVhbn0gZmxhZyAqL1xuXHRcdHRoaXMuc2V0TW92ZVN1cHByZXNzUmVkaXJlY3QgPSAoZmxhZykgPT4ge1xuXHRcdFx0Y3R4Lm1vdmVTdXBwcmVzc1JlZGlyZWN0ID0gISFmbGFnO1xuXHRcdH07XG5cdFx0Ly8gUHJvdGVjdC1yZWxhdGVkIHNldHRlciBmdW5jdGlvbnNcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWwgLSBUaGUgcmlnaHQgcmVxdWlyZWQgZm9yIHRoZSBzcGVjaWZpYyBhY3Rpb25cblx0XHQgKiBlLmcuIHN5c29wLCB0ZW1wbGF0ZWVkaXRvciwgYXV0b2NvbmZpcm1lZFxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwaXJ5PWluZmluaXR5XVxuXHRcdCAqL1xuXHRcdHRoaXMuc2V0RWRpdFByb3RlY3Rpb24gPSAobGV2ZWwsIGV4cGlyeSkgPT4ge1xuXHRcdFx0Y3R4LnByb3RlY3RFZGl0ID0ge1xuXHRcdFx0XHRsZXZlbCxcblx0XHRcdFx0ZXhwaXJ5OiBleHBpcnkgfHwgJ2luZmluaXR5Jyxcblx0XHRcdH07XG5cdFx0fTtcblx0XHR0aGlzLnNldE1vdmVQcm90ZWN0aW9uID0gKGxldmVsLCBleHBpcnkpID0+IHtcblx0XHRcdGN0eC5wcm90ZWN0TW92ZSA9IHtcblx0XHRcdFx0bGV2ZWwsXG5cdFx0XHRcdGV4cGlyeTogZXhwaXJ5IHx8ICdpbmZpbml0eScsXG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0dGhpcy5zZXRDcmVhdGVQcm90ZWN0aW9uID0gKGxldmVsLCBleHBpcnkpID0+IHtcblx0XHRcdGN0eC5wcm90ZWN0Q3JlYXRlID0ge1xuXHRcdFx0XHRsZXZlbCxcblx0XHRcdFx0ZXhwaXJ5OiBleHBpcnkgfHwgJ2luZmluaXR5Jyxcblx0XHRcdH07XG5cdFx0fTtcblx0XHR0aGlzLnNldENhc2NhZGluZ1Byb3RlY3Rpb24gPSAoZmxhZykgPT4ge1xuXHRcdFx0Y3R4LnByb3RlY3RDYXNjYWRlID0gISFmbGFnO1xuXHRcdH07XG5cdFx0dGhpcy5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nID0gKCkgPT4ge1xuXHRcdFx0Y3R4LnN1cHByZXNzUHJvdGVjdFdhcm5pbmcgPSB0cnVlO1xuXHRcdH07XG5cdFx0Ly8gUmV2ZXJ0LXJlbGF0ZWQgZ2V0dGVycy9zZXR0ZXJzOlxuXHRcdHRoaXMuc2V0T2xkSUQgPSAob2xkSUQpID0+IHtcblx0XHRcdGN0eC5yZXZlcnRPbGRJRCA9IG9sZElEO1xuXHRcdH07XG5cdFx0LyoqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IHJldmlzaW9uIElEIG9mIHRoZSBwYWdlICovXG5cdFx0dGhpcy5nZXRDdXJyZW50SUQgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnJldmVydEN1cklEO1xuXHRcdH07XG5cdFx0LyoqIEByZXR1cm5zIHtzdHJpbmd9IExhc3QgZWRpdG9yIG9mIHRoZSBwYWdlICovXG5cdFx0dGhpcy5nZXRSZXZpc2lvblVzZXIgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnJldmVydFVzZXI7XG5cdFx0fTtcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gSVNPIDg2MDEgdGltZXN0YW1wIGF0IHdoaWNoIHRoZSBwYWdlIHdhcyBsYXN0IGVkaXRlZC4gKi9cblx0XHR0aGlzLmdldExhc3RFZGl0VGltZSA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHgubGFzdEVkaXRUaW1lO1xuXHRcdH07XG5cdFx0Ly8gTWlzY2VsbGFuZW91cyBnZXR0ZXJzL3NldHRlcnM6XG5cdFx0LyoqXG5cdFx0ICogRGVmaW5lIGFuIG9iamVjdCBmb3IgdXNlIGluIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBgY2FsbGJhY2tQYXJhbWV0ZXJzYCBpcyBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIgb25seS4gVGhlIHBhcmFtZXRlcnNcblx0XHQgKiBhbGxvdyBhIGNhbGxlciB0byBwYXNzIHRoZSBwcm9wZXIgY29udGV4dCBpbnRvIGl0cyBjYWxsYmFja1xuXHRcdCAqIGZ1bmN0aW9uLiAgQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoZVxuXHRcdCAqIGNhbGxiYWNrUGFyYW1ldGVycyBvYmplY3Qgd2l0aGluIGEgYGxvYWQoKWAgY2FsbGJhY2sgc3RpbGwgcGVybWl0IGFcblx0XHQgKiBwcm9wZXIgcmUtZW50cnkgaW50byB0aGUgYGxvYWQoKWAgY2FsbGJhY2sgaWYgYW4gZWRpdCBjb25mbGljdCBpc1xuXHRcdCAqIGRldGVjdGVkIHVwb24gY2FsbGluZyBgc2F2ZSgpYC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBjYWxsYmFja1BhcmFtZXRlcnNcblx0XHQgKi9cblx0XHR0aGlzLnNldENhbGxiYWNrUGFyYW1ldGVycyA9IChjYWxsYmFja1BhcmFtZXRlcnMpID0+IHtcblx0XHRcdGN0eC5jYWxsYmFja1BhcmFtZXRlcnMgPSBjYWxsYmFja1BhcmFtZXRlcnM7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fSAtIFRoZSBvYmplY3QgcHJldmlvdXNseSBzZXQgYnkgYHNldENhbGxiYWNrUGFyYW1ldGVycygpYC5cblx0XHQgKi9cblx0XHR0aGlzLmdldENhbGxiYWNrUGFyYW1ldGVycyA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHguY2FsbGJhY2tQYXJhbWV0ZXJzO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIHtNb3JlYml0cy5zdGF0dXN9IHN0YXR1c0VsZW1lbnRcblx0XHQgKi9cblx0XHR0aGlzLnNldFN0YXR1c0VsZW1lbnQgPSAoc3RhdHVzRWxlbWVudCkgPT4ge1xuXHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQgPSBzdGF0dXNFbGVtZW50O1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnN0YXR1c30gU3RhdHVzIGVsZW1lbnQgY3JlYXRlZCBieSB0aGUgY29uc3RydWN0b3IuXG5cdFx0ICovXG5cdFx0dGhpcy5nZXRTdGF0dXNFbGVtZW50ID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGN0eC5zdGF0dXNFbGVtZW50O1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhZ2UgZXhpc3RlZCBvbiB0aGUgd2lraSB3aGVuIGl0IHdhcyBsYXN0IGxvYWRlZC5cblx0XHQgKi9cblx0XHR0aGlzLmV4aXN0cyA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHgucGFnZUV4aXN0cztcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFBhZ2UgSUQgb2YgdGhlIHBhZ2UgbG9hZGVkLiAwIGlmIHRoZSBwYWdlIGRvZXNuJ3Rcblx0XHQgKiBleGlzdC5cblx0XHQgKi9cblx0XHR0aGlzLmdldFBhZ2VJRCA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHgucGFnZUlEO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gLSBDb250ZW50IG1vZGVsIG9mIHRoZSBwYWdlLiAgUG9zc2libGUgdmFsdWVzXG5cdFx0ICogaW5jbHVkZSAoYnV0IG1heSBub3QgYmUgbGltaXRlZCB0byk6IGB3aWtpdGV4dGAsIGBqYXZhc2NyaXB0YCxcblx0XHQgKiBgY3NzYCwgYGpzb25gLCBgU2NyaWJ1bnRvYCwgYHNhbml0aXplZC1jc3NgLCBgTWFzc01lc3NhZ2VMaXN0Q29udGVudGAuXG5cdFx0ICogQWxzbyBnZXR0YWJsZSB2aWEgYG13LmNvbmZpZy5nZXQoJ3dnUGFnZUNvbnRlbnRNb2RlbCcpYC5cblx0XHQgKi9cblx0XHR0aGlzLmdldENvbnRlbnRNb2RlbCA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHguY29udGVudE1vZGVsO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW58c3RyaW5nfSAtIFdhdGNoZWQgc3RhdHVzIG9mIHRoZSBwYWdlLiBCb29sZWFuXG5cdFx0ICogdW5sZXNzIGl0J3MgYmVpbmcgd2F0Y2hlZCB0ZW1wb3JhcmlseSwgaW4gd2hpY2ggY2FzZSByZXR1cm5zIHRoZVxuXHRcdCAqIGV4cGlyeSBzdHJpbmcuXG5cdFx0ICovXG5cdFx0dGhpcy5nZXRXYXRjaGVkID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGN0eC53YXRjaGVkO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gSVNPIDg2MDEgdGltZXN0YW1wIGF0IHdoaWNoIHRoZSBwYWdlIHdhcyBsYXN0IGxvYWRlZC5cblx0XHQgKi9cblx0XHR0aGlzLmdldExvYWRUaW1lID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGN0eC5sb2FkVGltZTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSB1c2VyIHdobyBjcmVhdGVkIHRoZSBwYWdlIGZvbGxvd2luZyBgbG9va3VwQ3JlYXRpb24oKWAuXG5cdFx0ICovXG5cdFx0dGhpcy5nZXRDcmVhdG9yID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGN0eC5jcmVhdG9yO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gVGhlIElTT1N0cmluZyB0aW1lc3RhbXAgb2YgcGFnZSBjcmVhdGlvbiBmb2xsb3dpbmcgYGxvb2t1cENyZWF0aW9uKClgLlxuXHRcdCAqL1xuXHRcdHRoaXMuZ2V0Q3JlYXRpb25UaW1lc3RhbXAgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnRpbWVzdGFtcDtcblx0XHR9O1xuXHRcdC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgeW91IGNhbiBlZGl0IHRoZSBwYWdlICovXG5cdFx0dGhpcy5jYW5FZGl0ID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuICEhY3R4LnRlc3RBY3Rpb25zICYmIGN0eC50ZXN0QWN0aW9ucy5pbmNsdWRlcygnZWRpdCcpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogUmV0cmlldmVzIHRoZSB1c2VybmFtZSBvZiB0aGUgdXNlciB3aG8gY3JlYXRlZCB0aGUgcGFnZSBhcyB3ZWxsIGFzXG5cdFx0ICogdGhlIHRpbWVzdGFtcCBvZiBjcmVhdGlvbi4gIFRoZSB1c2VybmFtZSBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZVxuXHRcdCAqIGBnZXRDcmVhdG9yKClgIGZ1bmN0aW9uOyB0aGUgdGltZXN0YW1wIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlXG5cdFx0ICogYGdldENyZWF0aW9uVGltZXN0YW1wKClgIGZ1bmN0aW9uLlxuXHRcdCAqIFByaW9yIHRvIEp1bmUgMjAxOSBrbm93biBhcyBgbG9va3VwQ3JlYXRvcigpYC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU3VjY2VzcyAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuXG5cdFx0ICogdGhlIHVzZXJuYW1lIGFuZCB0aW1lc3RhbXAgYXJlIGZvdW5kIHdpdGhpbiB0aGUgY2FsbGJhY2suXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlblxuXHRcdCAqIHRoZSBsb29rdXAgZmFpbHNcblx0XHQgKi9cblx0XHR0aGlzLmxvb2t1cENyZWF0aW9uID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvblN1Y2Nlc3MgPSBvblN1Y2Nlc3M7XG5cdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvbkZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghb25TdWNjZXNzKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKCdJbnRlcm5hbCBlcnJvcjogbm8gb25TdWNjZXNzIGNhbGxiYWNrIHByb3ZpZGVkIHRvIGxvb2t1cENyZWF0aW9uKCkhJyk7XG5cdFx0XHRcdGN0eC5vbkxvb2t1cENyZWF0aW9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0XHRcdHRpdGxlczogY3R4LnBhZ2VOYW1lLFxuXHRcdFx0XHRydmxpbWl0OiAxLFxuXHRcdFx0XHRydnByb3A6ICd1c2VyfHRpbWVzdGFtcCcsXG5cdFx0XHRcdHJ2ZGlyOiAnbmV3ZXInLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdH07XG5cdFx0XHQvLyBPbmx5IHRoZSB3aWtpdGV4dCBjb250ZW50IG1vZGVsIGNhbiByZWxpYWJseSBoYW5kbGVcblx0XHRcdC8vIHJ2c2VjdGlvbiwgb3RoZXJzIHJldHVybiBhbiBlcnJvciB3aGVuIHBhaXJlZCB3aXRoIHRoZVxuXHRcdFx0Ly8gY29udGVudCBydnByb3AuIFJlbGF0ZWRseSwgbm9uLXdpa2l0ZXh0IG1vZGVscyBkb24ndFxuXHRcdFx0Ly8gdW5kZXJzdGFuZCB0aGUgI1JFRElSRUNUIGNvbmNlcHQsIHNvIHdlIHNob3VsZG4ndCBhdHRlbXB0XG5cdFx0XHQvLyB0aGUgcmVkaXJlY3QgcmVzb2x1dGlvbiBpbiBmbkxvb2t1cENyZWF0aW9uU3VjY2Vzc1xuXHRcdFx0aWYgKGN0eC5sb29rdXBOb25SZWRpcmVjdENyZWF0b3IpIHtcblx0XHRcdFx0cXVlcnkucnZzZWN0aW9uID0gMDtcblx0XHRcdFx0cXVlcnkucnZwcm9wICs9ICd8Y29udGVudCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3R4LmZvbGxvd1JlZGlyZWN0KSB7XG5cdFx0XHRcdHF1ZXJ5LnJlZGlyZWN0cyA9ICcnOyAvLyBmb2xsb3cgYWxsIHJlZGlyZWN0c1xuXHRcdFx0fVxuXG5cdFx0XHRjdHgubG9va3VwQ3JlYXRpb25BcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5oqT5Y+W6aG16Z2i5Yib5bu66ICF5L+h5oGvJywgJ+aKk+WPlumggemdouW7uueri+iAheizh+ioiicpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0Zm5Mb29rdXBDcmVhdGlvblN1Y2Nlc3MsXG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LFxuXHRcdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvbkZhaWx1cmVcblx0XHRcdCk7XG5cdFx0XHRjdHgubG9va3VwQ3JlYXRpb25BcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4Lmxvb2t1cENyZWF0aW9uQXBpLnBvc3QoKTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIFJldmVydHMgYSBwYWdlIHRvIGByZXZlcnRPbGRJRGAgc2V0IGJ5IGBzZXRPbGRJRGAuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25TdWNjZXNzXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJ1biBvbiBzdWNjZXNzLlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkZhaWx1cmVdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuIG9uIGZhaWx1cmUuXG5cdFx0ICovXG5cdFx0dGhpcy5yZXZlcnQgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcblx0XHRcdGN0eC5vblNhdmVTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0Y3R4Lm9uU2F2ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghY3R4LnJldmVydE9sZElEKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKCdJbnRlcm5hbCBlcnJvcjogcmV2aXNpb24gSUQgdG8gcmV2ZXJ0IHRvIHdhcyBub3Qgc2V0IGJlZm9yZSByZXZlcnQhJyk7XG5cdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAncmV2ZXJ0Jztcblx0XHRcdHRoaXMubG9hZChmbkF1dG9TYXZlLCBjdHgub25TYXZlRmFpbHVyZSk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBNb3ZlcyBhIHBhZ2UgdG8gYW5vdGhlciB0aXRsZS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Y2Nlc3NdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuIG9uIHN1Y2Nlc3MuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gb24gZmFpbHVyZS5cblx0XHQgKi9cblx0XHR0aGlzLm1vdmUgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcblx0XHRcdGN0eC5vbk1vdmVTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0Y3R4Lm9uTW92ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghZm5QcmVmbGlnaHRDaGVja3MuY2FsbCh0aGlzLCAnbW92ZScsIGN0eC5vbk1vdmVGYWlsdXJlKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdGlmICghY3R4Lm1vdmVEZXN0aW5hdGlvbikge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcignSW50ZXJuYWwgZXJyb3I6IGRlc3RpbmF0aW9uIHBhZ2UgbmFtZSB3YXMgbm90IHNldCBiZWZvcmUgbW92ZSEnKTtcblx0XHRcdFx0Y3R4Lm9uTW92ZUZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdtb3ZlJykpIHtcblx0XHRcdFx0Zm5Qcm9jZXNzTW92ZS5jYWxsKHRoaXMsIHRoaXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcXVlcnkgPSBmbk5lZWRUb2tlbkluZm9RdWVyeSgnbW92ZScpO1xuXHRcdFx0XHRjdHgubW92ZUFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPluS7pOeJjOKApuKApicsICflj5blvpfmrIrmnZbigKbigKYnKSxcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHRmblByb2Nlc3NNb3ZlLFxuXHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LFxuXHRcdFx0XHRcdGN0eC5vbk1vdmVGYWlsdXJlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGN0eC5tb3ZlQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdFx0Y3R4Lm1vdmVBcGkucG9zdCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogTWFya3MgdGhlIHBhZ2UgYXMgcGF0cm9sbGVkLCB1c2luZyBgcmNpZGAgKGlmIGF2YWlsYWJsZSkgb3IgYHJldmlkYC5cblx0XHQgKlxuXHRcdCAqIFBhdHJvbGxpbmcgYXMgc3VjaCBkb2Vzbid0IG5lZWQgdG8gcmVseSBvbiBsb2FkaW5nIHRoZSBwYWdlIGluXG5cdFx0ICogcXVlc3Rpb247IHNpbXBseSBwYXNzaW5nIGEgcmV2aWQgdG8gdGhlIEFQSSBpcyBzdWZmaWNpZW50LCBzbyBpblxuXHRcdCAqIHRob3NlIGNhc2VzIGp1c3QgdXNpbmcge0BsaW5rIE1vcmViaXRzLndpa2kuYXBpfSBpcyBwcm9iYWJseSBwcmVmZXJhYmxlLlxuXHRcdCAqXG5cdFx0ICogTm8gZXJyb3IgaGFuZGxpbmcgc2luY2Ugd2UgZG9uJ3QgYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgZXJyb3JzLlxuXHRcdCAqL1xuXHRcdHRoaXMucGF0cm9sID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKCFNb3JlYml0cy51c2VySXNTeXNvcCAmJiAhTW9yZWJpdHMudXNlcklzSW5Hcm91cCgncGF0cm9sbGVyJykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdFx0XHQvLyBJZiBhIGxpbmsgaXMgcHJlc2VudCwgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiBpdCdzIHBhdHJvbGxlZFxuXHRcdFx0aWYgKCRib2R5LmZpbmQoJy5wYXRyb2xsaW5rJykubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHBhdHJvbGhyZWYgPSAkYm9keS5maW5kKCcucGF0cm9sbGluayBhJykuYXR0cignaHJlZicpO1xuXHRcdFx0XHRjdHgucmNpZCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgncmNpZCcsIHBhdHJvbGhyZWYpO1xuXHRcdFx0XHRmblByb2Nlc3NQYXRyb2wodGhpcywgdGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwYXRyb2xRdWVyeSA9IHtcblx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0cHJvcDogJ2luZm8nLFxuXHRcdFx0XHRcdG1ldGE6ICd0b2tlbnMnLFxuXHRcdFx0XHRcdHR5cGU6ICdwYXRyb2wnLFxuXHRcdFx0XHRcdC8vIGFzIGxvbmcgYXMgd2UncmUgcXVlcnlpbmcsIG1pZ2h0IGFzIHdlbGwgZ2V0IGEgdG9rZW5cblx0XHRcdFx0XHRsaXN0OiAncmVjZW50Y2hhbmdlcycsXG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdGhlIHBhZ2UgaXMgdW5wYXRyb2xsZWRcblx0XHRcdFx0XHR0aXRsZXM6IGN0eC5wYWdlTmFtZSxcblx0XHRcdFx0XHRyY3Byb3A6ICdwYXRyb2xsZWQnLFxuXHRcdFx0XHRcdHJjdGl0bGU6IGN0eC5wYWdlTmFtZSxcblx0XHRcdFx0XHRyY2xpbWl0OiAxLFxuXHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjdHgucGF0cm9sQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W5Luk54mM4oCm4oCmJywgJ+WPluW+l+asiuadluKApuKApicpLFxuXHRcdFx0XHRcdHBhdHJvbFF1ZXJ5LFxuXHRcdFx0XHRcdGZuUHJvY2Vzc1BhdHJvbFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjdHgucGF0cm9sQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdFx0Y3R4LnBhdHJvbEFwaS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyB8ZGVsZXRlfCBpcyBhIHJlc2VydmVkIHdvcmQgaW4gc29tZSBmbGF2b3VycyBvZiBKU1xuXHRcdC8qKlxuXHRcdCAqIERlbGV0ZXMgYSBwYWdlIChmb3IgYWRtaW5zIG9ubHkpLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VjY2Vzc10gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gb24gc3VjY2Vzcy5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25GYWlsdXJlXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJ1biBvbiBmYWlsdXJlLlxuXHRcdCAqL1xuXHRcdHRoaXMuZGVsZXRlUGFnZSA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuXHRcdFx0Y3R4Lm9uRGVsZXRlU3VjY2VzcyA9IG9uU3VjY2Vzcztcblx0XHRcdGN0eC5vbkRlbGV0ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghZm5QcmVmbGlnaHRDaGVja3MuY2FsbCh0aGlzLCAnZGVsZXRlJywgY3R4Lm9uRGVsZXRlRmFpbHVyZSkpIHtcblx0XHRcdFx0cmV0dXJuOyAvLyBhYm9ydFxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm5DYW5Vc2VNd1VzZXJUb2tlbignZGVsZXRlJykpIHtcblx0XHRcdFx0Zm5Qcm9jZXNzRGVsZXRlLmNhbGwodGhpcywgdGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBxdWVyeSA9IGZuTmVlZFRva2VuSW5mb1F1ZXJ5KCdkZWxldGUnKTtcblx0XHRcdFx0Y3R4LmRlbGV0ZUFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPluS7pOeJjOKApuKApicsICflj5blvpfmrIrmnZbigKbigKYnKSxcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHRmblByb2Nlc3NEZWxldGUsXG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdFx0Y3R4Lm9uRGVsZXRlRmFpbHVyZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjdHguZGVsZXRlQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdFx0Y3R4LmRlbGV0ZUFwaS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBVbmRlbGV0ZXMgYSBwYWdlIChmb3IgYWRtaW5zIG9ubHkpLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VjY2Vzc10gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gb24gc3VjY2Vzcy5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25GYWlsdXJlXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJ1biBvbiBmYWlsdXJlLlxuXHRcdCAqL1xuXHRcdHRoaXMudW5kZWxldGVQYWdlID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cdFx0XHRjdHgub25VbmRlbGV0ZVN1Y2Nlc3MgPSBvblN1Y2Nlc3M7XG5cdFx0XHRjdHgub25VbmRlbGV0ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghZm5QcmVmbGlnaHRDaGVja3MuY2FsbCh0aGlzLCAndW5kZWxldGUnLCBjdHgub25VbmRlbGV0ZUZhaWx1cmUpKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gYWJvcnRcblx0XHRcdH1cblxuXHRcdFx0aWYgKGZuQ2FuVXNlTXdVc2VyVG9rZW4oJ3VuZGVsZXRlJykpIHtcblx0XHRcdFx0Zm5Qcm9jZXNzVW5kZWxldGUuY2FsbCh0aGlzLCB0aGlzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5ID0gZm5OZWVkVG9rZW5JbmZvUXVlcnkoJ3VuZGVsZXRlJyk7XG5cdFx0XHRcdGN0eC51bmRlbGV0ZUFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPluS7pOeJjOKApuKApicsICflj5blvpfmrIrmnZbigKbigKYnKSxcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHRmblByb2Nlc3NVbmRlbGV0ZSxcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0XHRjdHgub25VbmRlbGV0ZUZhaWx1cmVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y3R4LnVuZGVsZXRlQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdFx0Y3R4LnVuZGVsZXRlQXBpLnBvc3QoKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIFByb3RlY3RzIGEgcGFnZSAoZm9yIGFkbWlucyBvbmx5KS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Y2Nlc3NdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuIG9uIHN1Y2Nlc3MuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gb24gZmFpbHVyZS5cblx0XHQgKi9cblx0XHR0aGlzLnByb3RlY3QgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcblx0XHRcdGN0eC5vblByb3RlY3RTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0Y3R4Lm9uUHJvdGVjdEZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghZm5QcmVmbGlnaHRDaGVja3MuY2FsbCh0aGlzLCAncHJvdGVjdCcsIGN0eC5vblByb3RlY3RGYWlsdXJlKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdGlmICghY3R4LnByb3RlY3RFZGl0ICYmICFjdHgucHJvdGVjdE1vdmUgJiYgIWN0eC5wcm90ZWN0Q3JlYXRlKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdCdJbnRlcm5hbCBlcnJvcjogeW91IG11c3Qgc2V0IGVkaXQgYW5kL29yIG1vdmUgYW5kL29yIGNyZWF0ZSBwcm90ZWN0aW9uIGJlZm9yZSBjYWxsaW5nIHByb3RlY3QoKSEnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGN0eC5vblByb3RlY3RGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBiZWNhdXNlIG9mIHRoZSB3YXkgTVcgQVBJIGludGVycHJldHMgcHJvdGVjdGlvbiBsZXZlbHNcblx0XHRcdC8vIChhYnNvbHV0ZSwgbm90IGRpZmZlcmVudGlhbCksIHdlIGFsd2F5cyBuZWVkIHRvIHJlcXVlc3Rcblx0XHRcdC8vIHByb3RlY3Rpb24gbGV2ZWxzIGZyb20gdGhlIHNlcnZlclxuXHRcdFx0Y29uc3QgcXVlcnkgPSBmbk5lZWRUb2tlbkluZm9RdWVyeSgncHJvdGVjdCcpO1xuXHRcdFx0Y3R4LnByb3RlY3RBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W5Luk54mM4oCm4oCmJywgJ+WPluW+l+asiuadluKApuKApicpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0Zm5Qcm9jZXNzUHJvdGVjdCxcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdGN0eC5vblByb3RlY3RGYWlsdXJlXG5cdFx0XHQpO1xuXHRcdFx0Y3R4LnByb3RlY3RBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4LnByb3RlY3RBcGkucG9zdCgpO1xuXHRcdH07XG5cdFx0Lypcblx0XHQgKiBQcml2YXRlIG1lbWJlciBmdW5jdGlvbnNcblx0XHQgKiBUaGVzZSBhcmUgbm90IGV4cG9zZWQgb3V0c2lkZVxuXHRcdCAqL1xuXHRcdC8qKlxuXHRcdCAqIERldGVybWluZXMgd2hldGhlciB3ZSBjYW4gc2F2ZSBhbiBBUEkgY2FsbCBieSB1c2luZyB0aGUgY3NyZiB0b2tlblxuXHRcdCAqIHNlbnQgd2l0aCB0aGUgcGFnZSBIVE1MLCBvciB3aGV0aGVyIHdlIG5lZWQgdG8gYXNrIHRoZSBzZXJ2ZXIgZm9yXG5cdFx0ICogbW9yZSBpbmZvIChlLmcuIHByb3RlY3Rpb24gb3Igd2F0Y2hsaXN0IGV4cGlyeSkuXG5cdFx0ICpcblx0XHQgKiBDdXJyZW50bHkgdXNlZCBmb3IgYGFwcGVuZGAsIGBwcmVwZW5kYCwgYG5ld1NlY3Rpb25gLCBgbW92ZWAsXG5cdFx0ICogYGRlbGV0ZVBhZ2VgLCBhbmQgYHVuZGVsZXRlUGFnZWAuIE5vdCB1c2VkIGZvciBgcHJvdGVjdGBcblx0XHQgKiBzaW5jZSBpdCBhbHdheXMgbmVlZHMgdG8gcmVxdWVzdCBwcm90ZWN0aW9uIHN0YXR1cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbYWN0aW9uPWVkaXRdIC0gVGhlIGFjdGlvbiBiZWluZyB1bmRlcnRha2VuLCBlLmcuXG5cdFx0ICogXCJlZGl0XCIgb3IgXCJkZWxldGVcIi4gSW4gcHJhY3RpY2UsIG9ubHkgXCJlZGl0XCIgb3IgXCJub3RlZGl0XCIgbWF0dGVycy5cblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0XHQgKi9cblx0XHRjb25zdCBmbkNhblVzZU13VXNlclRva2VuID0gKGFjdGlvbikgPT4ge1xuXHRcdFx0YWN0aW9uIHx8PSAnZWRpdCc7XG5cdFx0XHQvLyBJZiBhIHdhdGNobGlzdCBleHBpcnkgaXMgc2V0LCB3ZSBtdXN0IGFsd2F5cyBsb2FkIHRoZSBwYWdlXG5cdFx0XHQvLyB0byBhdm9pZCBvdmVyd3JpdGluZyBpbmRlZmluaXRlIHByb3RlY3Rpb24uICBPZiBjb3Vyc2UsIG5vdFxuXHRcdFx0Ly8gbmVlZGVkIGlmIHNldHRpbmcgaW5kZWZpbml0ZSB3YXRjaGluZyFcblx0XHRcdGlmIChjdHgud2F0Y2hsaXN0RXhwaXJ5ICYmICFNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShjdHgud2F0Y2hsaXN0RXhwaXJ5KSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHQvLyBBUEktYmFzZWQgcmVkaXJlY3QgcmVzb2x1dGlvbiBvbmx5IHdvcmtzIGZvciBhY3Rpb249cXVlcnkgYW5kXG5cdFx0XHQvLyBhY3Rpb249ZWRpdCBpbiBhcHBlbmQvcHJlcGVuZC9uZXcgbW9kZXNcblx0XHRcdGlmIChjdHguZm9sbG93UmVkaXJlY3QpIHtcblx0XHRcdFx0aWYgKCFjdHguZm9sbG93Q3Jvc3NOc1JlZGlyZWN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBtdXN0IGxvYWQgdGhlIHBhZ2UgdG8gY2hlY2sgZm9yIGNyb3NzIG5hbWVzcGFjZSByZWRpcmVjdHNcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhY3Rpb24gIT09ICdlZGl0JyB8fCBjdHguZWRpdE1vZGUgPT09ICdhbGwnIHx8IGN0eC5lZGl0TW9kZSA9PT0gJ3JldmVydCcpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIGRvIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIGVkaXQgcHJvdGVjdGlvbiBleHBpcnk/XG5cdFx0XHRpZiAoTW9yZWJpdHMudXNlcklzU3lzb3AgJiYgIWN0eC5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRuZXcgbXcuVGl0bGUoTW9yZWJpdHMucGFnZU5hbWVOb3JtKS5nZXRQcmVmaXhlZFRleHQoKSAhPT1cblx0XHRcdFx0XHRuZXcgbXcuVGl0bGUoY3R4LnBhZ2VOYW1lKS5nZXRQcmVmaXhlZFRleHQoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gd2dSZXN0cmljdGlvbkVkaXQgaXMgbnVsbCBvbiBub24tZXhpc3RlbnQgcGFnZXMsXG5cdFx0XHRcdC8vIHNvIHRoaXMgbmVhdGx5IGhhbmRsZXMgbm9uZXhpc3RlbnQgcGFnZXNcblx0XHRcdFx0Y29uc3QgZWRpdFJlc3RyaWN0aW9uID0gbXcuY29uZmlnLmdldCgnd2dSZXN0cmljdGlvbkVkaXQnKTtcblx0XHRcdFx0aWYgKCFlZGl0UmVzdHJpY3Rpb24gfHwgZWRpdFJlc3RyaWN0aW9uLmluY2x1ZGVzKCdzeXNvcCcpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gISFtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogV2hlbiBmdW5jdGlvbnMgY2FuJ3QgdXNlXG5cdFx0ICoge0BsaW5rIE1vcmViaXRzLndpa2kucGFnZX5mbkNhblVzZU13VXNlclRva2VufGZuQ2FuVXNlTXdVc2VyVG9rZW59XG5cdFx0ICogb3IgcmVxdWlyZSBjaGVja2luZyBwcm90ZWN0aW9uIG9yIHdhdGNoZWQgc3RhdHVzLCBtYWludGFpbiB0aGUgcXVlcnlcblx0XHQgKiBpbiBvbmUgcGxhY2UuIFVzZWQgZm9yIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2UjZGVsZXRlUGFnZXxkZWxldGV9LFxuXHRcdCAqIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2UjdW5kZWxldGVQYWdlfHVuZGVsZXRlfSxcblx0XHQgKiB7QGxpbmsqIE1vcmViaXRzLndpa2kucGFnZSNwcm90ZWN0fHByb3RlY3R9LFxuXHRcdCAqIGFuZCB7QGxpbmsgTW9yZWJpdHMud2lraS5wYWdlI21vdmV8bW92ZX1cblx0XHQgKiAoYmFzaWNhbGx5LCBqdXN0IG5vdCB7QGxpbmsgTW9yZWJpdHMud2lraS5wYWdlI2xvYWR8bG9hZH0pLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiAtIFRoZSBhY3Rpb24gYmVpbmcgdW5kZXJ0YWtlbiwgZS5nLiBcImVkaXRcIiBvclxuXHRcdCAqIFwiZGVsZXRlXCIuXG5cdFx0ICogQHJldHVybnMge09iamVjdH0gQXBwcm9wcmlhdGUgcXVlcnkuXG5cdFx0ICovXG5cdFx0Y29uc3QgZm5OZWVkVG9rZW5JbmZvUXVlcnkgPSAoYWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRtZXRhOiAndG9rZW5zJyxcblx0XHRcdFx0dHlwZTogJ2NzcmYnLFxuXHRcdFx0XHR0aXRsZXM6IGN0eC5wYWdlTmFtZSxcblx0XHRcdFx0cHJvcDogJ2luZm8nLFxuXHRcdFx0XHRpbnByb3A6ICd3YXRjaGVkJyxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0Ly8gUHJvdGVjdGlvbiBub3QgY2hlY2tlZCBmb3Igbm9uLXN5c29wIG1vdmVzXG5cdFx0XHRpZiAoYWN0aW9uICE9PSAnbW92ZScgfHwgTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0cXVlcnkuaW5wcm9wICs9ICd8cHJvdGVjdGlvbic7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3R4LmZvbGxvd1JlZGlyZWN0ICYmIGFjdGlvbiAhPT0gJ3VuZGVsZXRlJykge1xuXHRcdFx0XHRxdWVyeS5yZWRpcmVjdHMgPSAnJzsgLy8gZm9sbG93IGFsbCByZWRpcmVjdHNcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xuXHRcdH07XG5cdFx0Ly8gY2FsbGJhY2sgZnJvbSBsb2FkU3VjY2VzcygpIGZvciBhcHBlbmQoKSwgcHJlcGVuZCgpLCBhbmQgbmV3U2VjdGlvbigpIHRocmVhZHNcblx0XHRjb25zdCBmbkF1dG9TYXZlID0gKHBhZ2VvYmopID0+IHtcblx0XHRcdHBhZ2VvYmouc2F2ZShjdHgub25TYXZlU3VjY2VzcywgY3R4Lm9uU2F2ZUZhaWx1cmUpO1xuXHRcdH07XG5cdFx0Ly8gY2FsbGJhY2sgZnJvbSBsb2FkQXBpLnBvc3QoKVxuXHRcdGNvbnN0IGZuTG9hZFN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGN0eC5sb2FkQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRpZiAoIWZuQ2hlY2tQYWdlTmFtZShyZXNwb25zZSwgY3R4Lm9uTG9hZEZhaWx1cmUpKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gYWJvcnRcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgW3BhZ2VdID0gcmVzcG9uc2UucGFnZXM7XG5cdFx0XHRsZXQgcmV2O1xuXHRcdFx0Y3R4LnBhZ2VFeGlzdHMgPSAhcGFnZS5taXNzaW5nO1xuXHRcdFx0aWYgKGN0eC5wYWdlRXhpc3RzKSB7XG5cdFx0XHRcdFtyZXZdID0gcGFnZS5yZXZpc2lvbnM7XG5cdFx0XHRcdGN0eC5sYXN0RWRpdFRpbWUgPSByZXYudGltZXN0YW1wO1xuXHRcdFx0XHRjdHgucGFnZVRleHQgPSByZXYuY29udGVudDtcblx0XHRcdFx0Y3R4LnBhZ2VJRCA9IHBhZ2UucGFnZWlkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4LnBhZ2VUZXh0ID0gJyc7IC8vIGFsbG93IGZvciBjb25jYXRlbmF0aW9uLCBldGMuXG5cdFx0XHRcdGN0eC5wYWdlSUQgPSAwOyAvLyBub25leGlzdGVudCBpbiByZXNwb25zZSwgbWF0Y2hlcyB3Z0FydGljbGVJZFxuXHRcdFx0fVxuXG5cdFx0XHRjdHguY3NyZlRva2VuID0gcmVzcG9uc2UudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHRcdGlmICghY3R4LmNzcmZUb2tlbikge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+acquiDveiOt+WPlue8lui+keS7pOeJjOOAgicsICfmnKrog73lj5blvpfnt6jovK/mrIrmnZbjgIInKSk7XG5cdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjdHgubG9hZFRpbWUgPSBjdHgubG9hZEFwaS5nZXRSZXNwb25zZSgpLmN1cnRpbWVzdGFtcDtcblx0XHRcdGlmICghY3R4LmxvYWRUaW1lKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5pyq6IO96I635Y+W5b2T5YmN5pe26Ze05oiz44CCJywgJ+acquiDveWPluW+l+eVtuWJjeaZgumWk+aIs+OAgicpKTtcblx0XHRcdFx0Y3R4Lm9uTG9hZEZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGN0eC5jb250ZW50TW9kZWwgPSBwYWdlLmNvbnRlbnRtb2RlbDtcblx0XHRcdGN0eC53YXRjaGVkID0gcGFnZS53YXRjaGxpc3RleHBpcnkgfHwgcGFnZS53YXRjaGVkO1xuXHRcdFx0Ly8gZXh0cmFjdCBwcm90ZWN0aW9uIGluZm8sIHRvIGFsZXJ0IGFkbWlucyB3aGVuIHRoZXkgYXJlIGFib3V0IHRvIGVkaXQgYSBwcm90ZWN0ZWQgcGFnZVxuXHRcdFx0Ly8gSW5jbHVkZXMgY2FzY2FkaW5nIHByb3RlY3Rpb25cblx0XHRcdGlmIChNb3JlYml0cy51c2VySXNTeXNvcCkge1xuXHRcdFx0XHRjb25zdCBlZGl0UHJvdCA9IHBhZ2UucHJvdGVjdGlvblxuXHRcdFx0XHRcdC5maWx0ZXIoKHByKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcHIudHlwZSA9PT0gJ2VkaXQnICYmIHByLmxldmVsID09PSAnc3lzb3AnO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnBvcCgpO1xuXHRcdFx0XHRpZiAoZWRpdFByb3QpIHtcblx0XHRcdFx0XHRjdHguZnVsbHlQcm90ZWN0ZWQgPSBlZGl0UHJvdC5leHBpcnk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3R4LmZ1bGx5UHJvdGVjdGVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGN0eC5yZXZlcnRDdXJJRCA9IHBhZ2UubGFzdHJldmlkO1xuXHRcdFx0Y29uc3QgdGVzdGFjdGlvbnMgPSBwYWdlLmFjdGlvbnM7XG5cdFx0XHRjdHgudGVzdEFjdGlvbnMgPSBbXTsgLy8gd2FzIG51bGxcblx0XHRcdGZvciAoY29uc3QgYWN0aW9uIG9mIE9iamVjdC5rZXlzKHRlc3RhY3Rpb25zKSkge1xuXHRcdFx0XHRpZiAodGVzdGFjdGlvbnNbYWN0aW9uXSkge1xuXHRcdFx0XHRcdGN0eC50ZXN0QWN0aW9uc1tjdHgudGVzdEFjdGlvbnMubGVuZ3RoXSA9IGFjdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGN0eC5lZGl0TW9kZSA9PT0gJ3JldmVydCcpIHtcblx0XHRcdFx0Y3R4LnJldmVydEN1cklEID0gcmV2ICYmIHJldi5yZXZpZDtcblx0XHRcdFx0aWYgKCFjdHgucmV2ZXJ0Q3VySUQpIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+acquiDveiOt+WPluW9k+WJjeS/ruiuoueJiOacrElE44CCJywgJ+acquiDveWPluW+l+ebruWJjeS/ruiogueJiOacrElE44CCJykpO1xuXHRcdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjdHgucmV2ZXJ0VXNlciA9IHJldiAmJiByZXYudXNlcjtcblx0XHRcdFx0aWYgKCFjdHgucmV2ZXJ0VXNlcikge1xuXHRcdFx0XHRcdGlmIChyZXYgJiYgcmV2LnVzZXJoaWRkZW4pIHtcblx0XHRcdFx0XHRcdC8vIHVzZXJuYW1lIHdhcyBSZXZEZWwnZCBvciBvdmVyc2lnaHRlZFxuXHRcdFx0XHRcdFx0Y3R4LnJldmVydFVzZXIgPSB3aW5kb3cud2dVTFMoJzznlKjmiLflkI3lt7LpmpDol48+JywgJzzkvb/nlKjogIXlkI3nqLHlt7LpmrHol48+Jyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+acquiDveiOt+WPluatpOS/ruiuoueJiOacrOeahOe8lui+keiAheOAgicsICfmnKrog73lj5blvpfmraTkv67oqILniYjmnKznmoTnt6jovK/ogIXjgIInKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBzZXQgcmV2ZXJ0IGVkaXQgc3VtbWFyeVxuXHRcdFx0XHRjdHguZWRpdFN1bW1hcnkgPSBgW1tRVzpVTkRPfOaSpOmUgF1d55SxICR7Y3R4LnJldmVydFVzZXJ9IOaJgOWBmuWHuueahCR7d2luZG93LndnVUxTKCfkv67orqIgJywgJ+S/ruiogiAnKX0ke1xuXHRcdFx0XHRcdGN0eC5yZXZlcnRPbGRJRFxuXHRcdFx0XHR977yaJHtjdHguZWRpdFN1bW1hcnl9YDtcblx0XHRcdH1cblx0XHRcdGN0eC5wYWdlTG9hZGVkID0gdHJ1ZTtcblx0XHRcdC8vIG13Lm5vdGlmeShcIkdlbmVyYXRlIGVkaXQgY29uZmxpY3Qgbm93XCIsIHt0eXBlOiAnd2FybicsIHRhZzogJ21vcmViaXRzJ30pOyAgLy8gZm9yIHRlc3RpbmcgZWRpdCBjb25mbGljdCByZWNvdmVyeSBsb2dpY1xuXHRcdFx0Y3R4Lm9uTG9hZFN1Y2Nlc3ModGhpcyk7IC8vIGludm9rZSBjYWxsYmFja1xuXHRcdH07XG5cdFx0Ly8gaGVscGVyIGZ1bmN0aW9uIHRvIHBhcnNlIHRoZSBwYWdlIG5hbWUgcmV0dXJuZWQgZnJvbSB0aGUgQVBJXG5cdFx0Y29uc3QgZm5DaGVja1BhZ2VOYW1lID0gZnVuY3Rpb24gKHJlc3BvbnNlLCBvbkZhaWx1cmUpIHtcblx0XHRcdG9uRmFpbHVyZSB8fD0gZW1wdHlGdW5jdGlvbjtcblx0XHRcdGNvbnN0IHBhZ2UgPSByZXNwb25zZS5wYWdlcyAmJiByZXNwb25zZS5wYWdlc1swXTtcblx0XHRcdGlmIChwYWdlKSB7XG5cdFx0XHRcdC8vIGNoZWNrIGZvciBpbnZhbGlkIHRpdGxlc1xuXHRcdFx0XHRpZiAocGFnZS5pbnZhbGlkKSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCfmoIfpopjkuI3lkIjms5XvvJonLCBg5qiZ6aGM5LiN5ZCI5rOV77yaJHtjdHgucGFnZU5hbWV9YCkpO1xuXHRcdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGFib3J0XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gcmV0cmlldmUgYWN0dWFsIHRpdGxlIG9mIHRoZSBwYWdlIGFmdGVyIG5vcm1hbGl6YXRpb24gYW5kIHJlZGlyZWN0c1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZE5hbWUgPSBwYWdlLnRpdGxlO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UucmVkaXJlY3RzKSB7XG5cdFx0XHRcdFx0Ly8gY2hlY2sgZm9yIGNyb3NzLW5hbWVzcGFjZSByZWRpcmVjdDpcblx0XHRcdFx0XHRjb25zdCBvcmlnTnMgPSBuZXcgbXcuVGl0bGUoY3R4LnBhZ2VOYW1lKS5uYW1lc3BhY2U7XG5cdFx0XHRcdFx0Y29uc3QgbmV3TnMgPSBuZXcgbXcuVGl0bGUocmVzb2x2ZWROYW1lKS5uYW1lc3BhY2U7XG5cdFx0XHRcdFx0aWYgKG9yaWdOcyAhPT0gbmV3TnMgJiYgIWN0eC5mb2xsb3dDcm9zc05zUmVkaXJlY3QpIHtcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdFx0XHRjdHgucGFnZU5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5piv6Leo5ZG95ZCN56m66Ze06YeN5a6a5ZCR5YiwJywgJ+aYr+i3qOWRveWQjeepuumWk+mHjeaWsOWwjuWQkeWIsCcpICtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZE5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn77yM55Wl6L+HJywgJ++8jOeVpemBjicpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0b25GYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBvbmx5IG5vdGlmeSB1c2VyIGZvciByZWRpcmVjdHMsIG5vdCBub3JtYWxpemF0aW9uXG5cdFx0XHRcdFx0bmV3IE1vcmViaXRzLnN0YXR1cyhcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfku44gJywgJ+W+niAnKSArXG5cdFx0XHRcdFx0XHRcdGN0eC5wYWdlTmFtZSArXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOmHjeWumuWQkeWIsCAnLCAnIOmHjeaWsOWwjuWQkeWIsCAnKSArXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkTmFtZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3R4LnBhZ2VOYW1lID0gcmVzb2x2ZWROYW1lOyAvLyB1cGRhdGUgdG8gcmVkaXJlY3QgdGFyZ2V0IG9yIG5vcm1hbGl6ZWQgbmFtZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gY291bGQgYmUgYSBjaXJjdWxhciByZWRpcmVjdCBvciBvdGhlciBwcm9ibGVtXG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5LiN6IO96Kej5p6Q6aG16Z2i55qE6YeN5a6a5ZCR77yaJywgJ+S4jeiDveino+aekOmggemdoueahOmHjeaWsOWwjuWQke+8micpICsgY3R4LnBhZ2VOYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0Ly8gZm9yY2UgZXJyb3IgdG8gc3RheSBvbiB0aGUgc2NyZWVuXG5cdFx0XHRcdCsrTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0O1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlOyAvLyBhbGwgT0tcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIERldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBwcm92aWRlIGEgd2F0Y2hsaXN0IGV4cGlyeS4gIFdpbGwgbm90XG5cdFx0ICogZG8gc28gaWYgdGhlIHBhZ2UgaXMgY3VycmVudGx5IHBlcm1hbmVudGx5IHdhdGNoZWQsIG9yIHRoZSBjdXJyZW50XG5cdFx0ICogZXhwaXJ5IGlzICphZnRlciogdGhlIG5ldywgcHJvdmlkZWQgZXhwaXJ5LiAgT25seSBoYW5kbGVzIHN0cmluZ3Ncblx0XHQgKiByZWNvZ25pemVkIGJ5IHtAbGluayBNb3JlYml0cy5kYXRlfSBvciByZWxhdGl2ZSB0aW1lZnJhbWVzIHdpdGhcblx0XHQgKiB1bml0IGl0IGNhbiBwcm9jZXNzLiAgUmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgZm5DYW5Vc2VNd1VzZXJUb2tlblxuXHRcdCAqIHJlcXVpcmVzIHBhZ2UgbG9hZGluZyBpZiBhIHdhdGNobGlzdGV4cGlyeSBpcyBwcm92aWRlZCwgc28gd2UgYXJlXG5cdFx0ICogZW5zdXJlZCBvZiBrbm93aW5nIHRoZSB3YXRjaCBzdGF0dXMgYnkgdGhlIHVzZSBvZiB0aGlzLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0Y29uc3QgZm5BcHBseVdhdGNobGlzdEV4cGlyeSA9ICgpID0+IHtcblx0XHRcdGlmIChjdHgud2F0Y2hsaXN0RXhwaXJ5KSB7XG5cdFx0XHRcdGlmICghY3R4LndhdGNoZWQgfHwgTW9yZWJpdHMuc3RyaW5nLmlzSW5maW5pdHkoY3R4LndhdGNobGlzdEV4cGlyeSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY3R4LndhdGNoZWQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0bGV0IG5ld0V4cGlyeTtcblx0XHRcdFx0XHQvLyBBdHRlbXB0IHRvIGRldGVybWluZSBpZiB0aGUgbmV3IGV4cGlyeSBpcyBhXG5cdFx0XHRcdFx0Ly8gcmVsYXRpdmUgKGUuZy4gYDEgbW9udGhgKSBvciBhYnNvbHV0ZSBkYXRldGltZVxuXHRcdFx0XHRcdGNvbnN0IHJlbCA9IGN0eC53YXRjaGxpc3RFeHBpcnkuc3BsaXQoJyAnKTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0bmV3RXhwaXJ5ID0gbmV3IE1vcmViaXRzLmRhdGUoKS5hZGQocmVsWzBdLCByZWxbMV0pO1xuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0bmV3RXhwaXJ5ID0gbmV3IE1vcmViaXRzLmRhdGUoY3R4LndhdGNobGlzdEV4cGlyeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIElmIHRoZSBkYXRlIGlzIHZhbGlkLCBvbmx5IHVzZSBpdCBpZiBpdCBleHRlbmRzIHRoZSBjdXJyZW50IGV4cGlyeVxuXHRcdFx0XHRcdGlmIChuZXdFeHBpcnkuaXNWYWxpZCgpKSB7XG5cdFx0XHRcdFx0XHRpZiAobmV3RXhwaXJ5LmlzQWZ0ZXIobmV3IE1vcmViaXRzLmRhdGUoY3R4LndhdGNoZWQpKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gSWYgaXQncyBzdGlsbCBub3QgdmFsaWQsIGhvcGUgaXQncyBhIHZhbGlkIE1XIGV4cGlyeSBmb3JtYXQgdGhhdFxuXHRcdFx0XHRcdFx0Ly8gTW9yZWJpdHMuZGF0ZSBkb2Vzbid0IHJlY29nbml6ZSwgc28ganVzdCBkZWZhdWx0IHRvIHVzaW5nIGl0LlxuXHRcdFx0XHRcdFx0Ly8gVGhpcyB3aWxsIGFsc28gaW5jbHVkZSBtaW5vciB0eXBvcy5cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cdFx0Ly8gY2FsbGJhY2sgZnJvbSBzYXZlQXBpLnBvc3QoKVxuXHRcdGNvbnN0IGZuU2F2ZVN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAnYWxsJzsgLy8gY2FuY2VsIGFwcGVuZC9wcmVwZW5kL25ld1NlY3Rpb24vcmV2ZXJ0IG1vZGVzXG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGN0eC5zYXZlQXBpLmdldFJlc3BvbnNlKCk7XG5cdFx0XHQvLyBzZWUgaWYgdGhlIEFQSSB0aGlua3Mgd2Ugd2VyZSBzdWNjZXNzZnVsXG5cdFx0XHRpZiAocmVzcG9uc2UuZWRpdC5yZXN1bHQgPT09ICdTdWNjZXNzJykge1xuXHRcdFx0XHQvLyByZWFsIHN1Y2Nlc3Ncblx0XHRcdFx0Ly8gZGVmYXVsdCBvbiBzdWNjZXNzIGFjdGlvbiAtIGRpc3BsYXkgbGluayBmb3IgZWRpdGVkIHBhZ2Vcblx0XHRcdFx0Y29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybChjdHgucGFnZU5hbWUpKTtcblx0XHRcdFx0bGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjdHgucGFnZU5hbWUpKTtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyhbJ+WujOaIkO+8iCcsIGxpbmssICfvvIknXSk7XG5cdFx0XHRcdGlmIChjdHgub25TYXZlU3VjY2Vzcykge1xuXHRcdFx0XHRcdGN0eC5vblNhdmVTdWNjZXNzKHRoaXMpOyAvLyBpbnZva2UgY2FsbGJhY2tcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGVycm9ycyBoZXJlIGFyZSBvbmx5IGdlbmVyYXRlZCBieSBleHRlbnNpb25zIHdoaWNoIGhvb2sgQVBJRWRpdEJlZm9yZVNhdmUgd2l0aGluIE1lZGlhV2lraSxcblx0XHRcdC8vIHdoaWNoIGFzIG9mIDEuMzQuMC13bWYuMjMgKFNlcHQgMjAxOSkgc2hvdWxkIG9ubHkgZW5jb21wYXNzIGNhcHRjaGEgbWVzc2FnZXNcblx0XHRcdGlmIChyZXNwb25zZS5lZGl0LmNhcHRjaGEpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuI3og73kv53lrZjpobXpnaLvvIzlm6DmnI3liqHlmajopoHmsYLmgqjovpPlhaXpqozor4HnoIHjgIInLCAn5LiN6IO95YSy5a2Y6aCB6Z2i77yM5Zug5Ly65pyN5Zmo6KaB5rGC5oKo6Ly45YWl6amX6K2J56K844CCJylcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5L+d5a2Y6aG16Z2i5pe255SxQVBJ5b6X5Yiw5pyq55+l6ZSZ6K+vJywgJ+WEsuWtmOmggemdouaZgueUsUFQSeW+l+WIsOacquefpemMr+iqpCcpKTtcblx0XHRcdH1cblx0XHRcdC8vIGZvcmNlIGVycm9yIHRvIHN0YXkgb24gdGhlIHNjcmVlblxuXHRcdFx0KytNb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQ7XG5cdFx0XHRjdHgub25TYXZlRmFpbHVyZSh0aGlzKTtcblx0XHR9O1xuXHRcdC8vIGNhbGxiYWNrIGZyb20gc2F2ZUFwaS5wb3N0KClcblx0XHRjb25zdCBmblNhdmVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IGVycm9yQ29kZSA9IGN0eC5zYXZlQXBpLmdldEVycm9yQ29kZSgpO1xuXHRcdFx0Ly8gY2hlY2sgZm9yIGVkaXQgY29uZmxpY3Rcblx0XHRcdGlmIChlcnJvckNvZGUgPT09ICdlZGl0Y29uZmxpY3QnICYmIGN0eC5jb25mbGljdFJldHJpZXMrKyA8IGN0eC5tYXhDb25mbGljdFJldHJpZXMpIHtcblx0XHRcdFx0Ly8gZWRpdCBjb25mbGljdHMgY2FuIG9jY3VyIHdoZW4gdGhlIHBhZ2UgbmVlZHMgdG8gYmUgcHVyZ2VkIGZyb20gdGhlIHNlcnZlciBjYWNoZVxuXHRcdFx0XHRjb25zdCBwdXJnZVF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3B1cmdlJyxcblx0XHRcdFx0XHR0aXRsZXM6IGN0eC5wYWdlTmFtZSwgLy8gcmVkaXJlY3RzIGFyZSBhbHJlYWR5IHJlc29sdmVkXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgcHVyZ2VBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmo4DmtYvliLDnvJbovpHlhrLnqoHvvIzmraPlnKjmm7TmlrDmnI3liqHlmajnvJPlrZgnLCAn5qqi5ris5Yiw57eo6Lyv6KGd56qB77yM5q2j5Zyo5pu05paw5Ly65pyN5Zmo5b+r5Y+WJyksXG5cdFx0XHRcdFx0cHVyZ2VRdWVyeSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHQtLU1vcmViaXRzLndpa2kubnVtYmVyT2ZBY3Rpb25zTGVmdDsgLy8gYWxsb3cgZm9yIG5vcm1hbCBjb21wbGV0aW9uIGlmIHJldHJ5IHN1Y2NlZWRzXG5cdFx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5pbmZvKHdpbmRvdy53Z1VMUygn5qOA5rWL5Yiw57yW6L6R5Yay56qB77yM6YeN6K+V5L+u5pS5JywgJ+aqoua4rOWIsOe3qOi8r+ihneeqge+8jOmHjeippuS/ruaUuScpKTtcblx0XHRcdFx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdlZGl0JykpIHtcblx0XHRcdFx0XHRcdFx0Y3R4LnNhdmVBcGkucG9zdCgpOyAvLyBuZWNlc3NhcmlseSBhcHBlbmQsIHByZXBlbmQsIG9yIG5ld1NlY3Rpb24sIHNvIHRoaXMgc2hvdWxkIHdvcmsgYXMgZGVzaXJlZFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y3R4LmxvYWRBcGkucG9zdCgpOyAvLyByZWxvYWQgdGhlIHBhZ2UgYW5kIHJlYXBwbHkgdGhlIGVkaXRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHB1cmdlQXBpLnBvc3QoKTtcblx0XHRcdFx0Ly8gY2hlY2sgZm9yIG5ldHdvcmsgb3Igc2VydmVyIGVycm9yXG5cdFx0XHR9IGVsc2UgaWYgKChlcnJvckNvZGUgPT09IG51bGwgfHwgZXJyb3JDb2RlID09PSB1bmRlZmluZWQpICYmIGN0eC5yZXRyaWVzKysgPCBjdHgubWF4UmV0cmllcykge1xuXHRcdFx0XHQvLyB0aGUgZXJyb3IgbWlnaHQgYmUgdHJhbnNpZW50LCBzbyB0cnkgYWdhaW5cblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyh3aW5kb3cud2dVTFMoJ+S/neWtmOWksei0pe+8jOWcqDLnp5LlkI7ph43or5XigKbigKYnLCAn5YSy5a2Y5aSx5pWX77yM5ZyoMuenkuW+jOmHjeippuKApuKApicpKTtcblx0XHRcdFx0LS1Nb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQ7IC8vIGFsbG93IGZvciBub3JtYWwgY29tcGxldGlvbiBpZiByZXRyeSBzdWNjZWVkc1xuXHRcdFx0XHQvLyB3YWl0IGZvciBzb21ldGltZSBmb3IgY2xpZW50IHRvIHJlZ2FpbiBjb25uZWN0aXZpdHlcblx0XHRcdFx0c2xlZXAoMjAwMCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0Y3R4LnNhdmVBcGkucG9zdCgpOyAvLyBnaXZlIGl0IGFub3RoZXIgZ28hXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQvLyBoYXJkIGVycm9yLCBnaXZlIHVwXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGN0eC5zYXZlQXBpLmdldFJlc3BvbnNlKCk7XG5cdFx0XHRcdGNvbnN0IGVycm9yRGF0YSA9XG5cdFx0XHRcdFx0cmVzcG9uc2UuZXJyb3IgfHxcblx0XHRcdFx0XHQvLyBiYyBlcnJvciBmb3JtYXRcblx0XHRcdFx0XHRyZXNwb25zZS5lcnJvcnNbMF0uZGF0YTsgLy8gaHRtbC93aWtpdGV4dC9wbGFpbnRleHQgZXJyb3IgZm9ybWF0XG5cdFx0XHRcdHN3aXRjaCAoZXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0Y2FzZSAncHJvdGVjdGVkcGFnZSc6XG5cdFx0XHRcdFx0XHQvLyBub24tYWRtaW4gYXR0ZW1wdGluZyB0byBlZGl0IGEgcHJvdGVjdGVkIHBhZ2UgLSB0aGlzIGdpdmVzIGEgZnJpZW5kbGllciBtZXNzYWdlIHRoYW4gdGhlIGRlZmF1bHRcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5LiN6IO95L+d5a2Y5L+u5pS577ya6aG16Z2i6KKr5L+d5oqkJywgJ+S4jeiDveWEsuWtmOS/ruaUue+8mumggemdouiiq+S/neittycpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2FidXNlZmlsdGVyLWRpc2FsbG93ZWQnOlxuXHRcdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn57yW6L6R6KKr6Ziy5rul55So6L+H5ruk5Zmo6KeE5YiZ4oCcJywgJ+e3qOi8r+iiq+mYsua/q+eUqOmBjua/vuWZqOimj+WJh+OAjCcpICtcblx0XHRcdFx0XHRcdFx0XHRlcnJvckRhdGEuYWJ1c2VmaWx0ZXIuZGVzY3JpcHRpb24gK1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfigJ3pmLvmraLjgILoi6XmgqjorqTkuLrmgqjnmoTor6XmrKHnvJbovpHmmK/mnInmhI/kuYnnmoTvvIzor7foh7MgTElCX3RhbGs6566h55CG5ZGY5ZGK56S65p2/IOaPkOaKpeOAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHQn44CN6Zi75q2i44CC6Iul5oKo6KqN54K65oKo55qE6Kmy5qyh57eo6Lyv5piv5pyJ5oSP576p55qE77yM6KuL6IezIExJQl90YWxrOueuoeeQhuWToeWRiuekuuadvyDmj5DloLHjgIInXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2FidXNlZmlsdGVyLXdhcm5pbmcnOlxuXHRcdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoW1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+e8lui+keiiq+mYsua7peeUqOi/h+a7pOWZqOinhOWImeKAnCcsICfnt6jovK/ooqvpmLLmv6vnlKjpgY7mv77lmajopo/liYfjgIwnKSxcblx0XHRcdFx0XHRcdFx0ZXJyb3JEYXRhLmFidXNlZmlsdGVyLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+KAneitpuWRiu+8jOiLpeaCqOS7jeW4jOacm+WBmuWHuuivpee8lui+ke+8jOivt+WwneivlemHjeaWsOaPkOS6pO+8jOagueaNrui/h+a7pOWZqOeahOiuvue9ruaCqOWPr+iDveWPr+S7peS9nOWHuuatpOe8lui+keOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+OAjeitpuWRiu+8jOiLpeaCqOS7jeW4jOacm+WBmuWHuuipsue3qOi8r++8jOiri+WYl+ippumHjeaWsOaPkOS6pO+8jOagueaTmumBjua/vuWZqOeahOioreWumuaCqOWPr+iDveWPr+S7peS9nOWHuuatpOe3qOi8r+OAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhIHdheSB0byBhdXRvbWF0aWNhbGx5IHJldHJ5IHRoZSBhY3Rpb24gaWYgdGhleSBzbyBjaG9vc2UgLVxuXHRcdFx0XHRcdFx0Ly8gSSBjYW4ndCBzZWUgaG93IHRvIGRvIHRoaXMgd2l0aG91dCBjcmVhdGluZyBhIFVJIGRlcGVuZGVuY3kgb24gTW9yZWJpdHMud2lraS5wYWdlIHRob3VnaCAtLSBUVE9cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3NwYW1ibGFja2xpc3QnOiB7XG5cdFx0XHRcdFx0XHQvLyBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgYmxhY2tsaXN0ZWQsIHdlIG9ubHkgcmV0dXJuIHRoZSBmaXJzdFxuXHRcdFx0XHRcdFx0Y29uc3QgW3NwYW1dID0gZXJyb3JEYXRhLnNwYW1ibGFja2xpc3QubWF0Y2hlcztcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S4jeiDveS/neWtmOmhtemdou+8jOWboFVSTCAnLCAn5LiN6IO95YSy5a2Y6aCB6Z2i77yM5ZugVVJMICcpICtcblx0XHRcdFx0XHRcdFx0XHRzcGFtICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDlnKjlnoPlnL7pk77mjqXpu5HlkI3ljZXkuK3jgIInLCAnIOWcqOWeg+WcvumAo+e1kOm7keWQjeWWruS4reOAgicpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcihcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuI3og73kv53lrZjkv67mlLnvvJonLCAn5LiN6IO95YSy5a2Y5L+u5pS577yaJykgKyBjdHguc2F2ZUFwaS5nZXRFcnJvclRleHQoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjdHguZWRpdE1vZGUgPSAnYWxsJzsgLy8gY2FuY2VsIGFwcGVuZC9wcmVwZW5kL25ld1NlY3Rpb24vcmV2ZXJ0IG1vZGVzXG5cdFx0XHRcdGlmIChjdHgub25TYXZlRmFpbHVyZSkge1xuXHRcdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpOyAvLyBpbnZva2UgY2FsbGJhY2tcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBpc1RleHRSZWRpcmVjdCA9ICh0ZXh0KSA9PiB7XG5cdFx0XHRpZiAoIXRleHQpIHtcblx0XHRcdFx0Ly8gbm8gdGV4dCAtIGNvbnRlbnQgZW1wdHkgb3IgaW5hY2Nlc3NpYmxlIChyZXZkZWxsZWQgb3Igc3VwcHJlc3NlZClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE1vcmViaXRzLmwxMG4ucmVkaXJlY3RUYWdBbGlhc2VzLnNvbWUoKHRhZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFJlZ0V4cChgXlxcXFxzKiR7dGFnfVxcXFxXYCwgJ2knKS50ZXN0KHRleHQpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRjb25zdCBmbkxvb2t1cENyZWF0aW9uU3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4Lmxvb2t1cENyZWF0aW9uQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRpZiAoIWZuQ2hlY2tQYWdlTmFtZShyZXNwb25zZSwgY3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJldiA9IHJlc3BvbnNlLnBhZ2VzWzBdLnJldmlzaW9ucyAmJiByZXNwb25zZS5wYWdlc1swXS5yZXZpc2lvbnNbMF07XG5cdFx0XHRpZiAoIXJldikge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aXoOazleaJvuWIsCcsICfnhKHms5Xmib7liLAnKSArXG5cdFx0XHRcdFx0XHRjdHgucGFnZU5hbWUgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfnmoTku7vkvZXkv67orqLniYjmnKwnLCAn55qE5Lu75L2V5L+u6KiC54mI5pysJylcblx0XHRcdFx0KTtcblx0XHRcdFx0Y3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN0eC5sb29rdXBOb25SZWRpcmVjdENyZWF0b3IgfHwgIWlzVGV4dFJlZGlyZWN0KHJldi5jb250ZW50KSkge1xuXHRcdFx0XHRjdHguY3JlYXRvciA9IHJldi51c2VyO1xuXHRcdFx0XHRpZiAoIWN0eC5jcmVhdG9yKSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCfml6Dms5Xojrflj5bpobXpnaLliJvlu7rogIXnmoTlkI3lrZcnLCAn54Sh5rOV5Y+W5b6X6aCB6Z2i5bu656uL6ICF55qE5ZCN5a2XJykpO1xuXHRcdFx0XHRcdGN0eC5vbkxvb2t1cENyZWF0aW9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3R4LnRpbWVzdGFtcCA9IHJldi50aW1lc3RhbXA7XG5cdFx0XHRcdGlmICghY3R4LnRpbWVzdGFtcCkge1xuXHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5peg5rOV6I635Y+W6aG16Z2i5Yib5bu65pe26Ze0JywgJ+eEoeazleWPluW+l+mggemdouW7uueri+aZgumWkycpKTtcblx0XHRcdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvbkZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmluZm8od2luZG93LndnVUxTKCflt7Lojrflj5bpobXpnaLliJvlu7rkv6Hmga8nLCAn5bey5Y+W5b6X6aCB6Z2i5bu656uL6LOH6KiKJykpO1xuXHRcdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvblN1Y2Nlc3ModGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdHgubG9va3VwQ3JlYXRpb25BcGkucXVlcnkucnZsaW1pdCA9IDUwOyAvLyBtb2RpZnkgcHJldmlvdXMgcXVlcnkgdG8gZmV0Y2ggbW9yZSByZXZpc2lvbnNcblx0XHRcdFx0Y3R4Lmxvb2t1cENyZWF0aW9uQXBpLnF1ZXJ5LnRpdGxlcyA9IGN0eC5wYWdlTmFtZTsgLy8gdXBkYXRlIHBhZ2VOYW1lIGlmIHJlZGlyZWN0IHJlc29sdXRpb24gdG9vayBwbGFjZSBpbiBlYXJsaWVyIHF1ZXJ5XG5cdFx0XHRcdGN0eC5sb29rdXBDcmVhdGlvbkFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPlumhtemdouWIm+W7uuS/oeaBrycsICflj5blvpfpoIHpnaLlu7rnq4vos4foqIonKSxcblx0XHRcdFx0XHRjdHgubG9va3VwQ3JlYXRpb25BcGkucXVlcnksXG5cdFx0XHRcdFx0Zm5Mb29rdXBOb25SZWRpcmVjdENyZWF0b3IsXG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdFx0Y3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGN0eC5sb29rdXBDcmVhdGlvbkFwaS5zZXRQYXJlbnQodGhpcyk7XG5cdFx0XHRcdGN0eC5sb29rdXBDcmVhdGlvbkFwaS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBmbkxvb2t1cE5vblJlZGlyZWN0Q3JlYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4Lmxvb2t1cENyZWF0aW9uQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRjb25zdCByZXZzID0gcmVzcG9uc2UucGFnZXNbMF0ucmV2aXNpb25zO1xuXHRcdFx0Zm9yIChjb25zdCByZXYgb2YgcmV2cykge1xuXHRcdFx0XHRpZiAoIWlzVGV4dFJlZGlyZWN0KHJldi5jb250ZW50KSkge1xuXHRcdFx0XHRcdGN0eC5jcmVhdG9yID0gcmV2LnVzZXI7XG5cdFx0XHRcdFx0Y3R4LnRpbWVzdGFtcCA9IHJldi50aW1lc3RhbXA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghY3R4LmNyZWF0b3IpIHtcblx0XHRcdFx0Ly8gZmFsbGJhY2sgdG8gZ2l2ZSBmaXJzdCByZXZpc2lvbiBhdXRob3IgaWYgbm8gbm9uLXJlZGlyZWN0IHZlcnNpb24gaW4gdGhlIGZpcnN0IDUwXG5cdFx0XHRcdGN0eC5jcmVhdG9yID0gcmV2c1swXS51c2VyO1xuXHRcdFx0XHRjdHgudGltZXN0YW1wID0gcmV2c1swXS50aW1lc3RhbXA7XG5cdFx0XHRcdGlmICghY3R4LmNyZWF0b3IpIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+aXoOazleiOt+WPlumhtemdouWIm+W7uuiAheeahOWQjeWtlycsICfnhKHms5Xlj5blvpfpoIHpnaLlu7rnq4vogIXnmoTlkI3lrZcnKSk7XG5cdFx0XHRcdFx0Y3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdHgudGltZXN0YW1wKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5peg5rOV6I635Y+W6aG16Z2i5Yib5bu65pe26Ze0JywgJ+eEoeazleWPluW+l+mggemdouW7uueri+aZgumWkycpKTtcblx0XHRcdFx0Y3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjdHguc3RhdHVzRWxlbWVudC5pbmZvKHdpbmRvdy53Z1VMUygn5bey6I635Y+W6aG16Z2i5Yib5bu65L+h5oGvJywgJ+W3suWPluW+l+mggemdouW7uueri+izh+ioiicpKTtcblx0XHRcdGN0eC5vbkxvb2t1cENyZWF0aW9uU3VjY2Vzcyh0aGlzKTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIENvbW1vbiBjaGVja3MgZm9yIGFjdGlvbiBtZXRob2RzLiBVc2VkIGZvciBtb3ZlLCB1bmRlbGV0ZSwgZGVsZXRlLFxuXHRcdCAqIHByb3RlY3QuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIC0gVGhlIGFjdGlvbiBiZWluZyBjaGVja2VkLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBvbkZhaWx1cmUgLSBGYWlsdXJlIGNhbGxiYWNrLlxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGNvbnN0IGZuUHJlZmxpZ2h0Q2hlY2tzID0gZnVuY3Rpb24gKGFjdGlvbiwgb25GYWlsdXJlKSB7XG5cdFx0XHQvLyBpZiBhIG5vbi1hZG1pbiB0cmllcyB0byBkbyB0aGlzLCBkb24ndCBib3RoZXJcblx0XHRcdGlmICghTW9yZWJpdHMudXNlcklzU3lzb3AgJiYgYWN0aW9uICE9PSAnbW92ZScpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfml6Dms5Xlr7npobXpnaLov5vooYzigJwnLCAn54Sh5rOV5bCN6aCB6Z2i6YCy6KGM44CMJykgK1xuXHRcdFx0XHRcdFx0YWN0aW9uICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCd5pON5L2c77ya5Y+q5pyJ566h55CG5ZGY5Y+v5Lul6L+b6KGM5q2k5pON5L2cJywgJ+OAjeaTjeS9nO+8muWPquacieeuoeeQhuWToeWPr+S7pemAsuihjOatpOaTjeS9nCcpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdHguZWRpdFN1bW1hcnkpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoYEludGVybmFsIGVycm9yOiAke2FjdGlvbn0gcmVhc29uIG5vdCBzZXQgKHVzZSBzZXRFZGl0U3VtbWFyeSBmdW5jdGlvbikhYCk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7IC8vIGFsbCBPS1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQ29tbW9uIGNoZWNrcyBmb3IgZm5Qcm9jZXNzIGZ1bmN0aW9ucyAoYGZuUHJvY2Vzc0RlbGV0ZWAsIGBmblByb2Nlc3NNb3ZlYCwgZXRjLlxuXHRcdCAqIFVzZWQgZm9yIG1vdmUsIHVuZGVsZXRlLCBkZWxldGUsIHByb3RlY3QuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIC0gVGhlIGFjdGlvbiBiZWluZyBjaGVja2VkLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBvbkZhaWx1cmUgLSBGYWlsdXJlIGNhbGxiYWNrLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSByZXNwb25zZSAtIFRoZSByZXNwb25zZSBkb2N1bWVudCBmcm9tIHRoZSBBUEkgY2FsbC5cblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0XHQgKi9cblx0XHRjb25zdCBmblByb2Nlc3NDaGVja3MgPSBmdW5jdGlvbiAoYWN0aW9uLCBvbkZhaWx1cmUsIHJlc3BvbnNlKSB7XG5cdFx0XHRjb25zdCBbe21pc3Npbmd9XSA9IHJlc3BvbnNlLnBhZ2VzO1xuXHRcdFx0Ly8gTm8gdW5kZWxldGUgYXMgYW4gZXhpc3RpbmcgcGFnZSBjb3VsZCBoYXZlIGRlbGV0ZWQgcmV2aXNpb25zXG5cdFx0XHRjb25zdCBhY3Rpb25NaXNzaW5nID0gbWlzc2luZyAmJiBbJ2RlbGV0ZScsICdtb3ZlJ10uaW5jbHVkZXMoYWN0aW9uKTtcblx0XHRcdGNvbnN0IHByb3RlY3RNaXNzaW5nID0gYWN0aW9uID09PSAncHJvdGVjdCcgJiYgbWlzc2luZyAmJiAoY3R4LnByb3RlY3RFZGl0IHx8IGN0eC5wcm90ZWN0TW92ZSk7XG5cdFx0XHRjb25zdCBzYWx0TWlzc2luZyA9IGFjdGlvbiA9PT0gJ3Byb3RlY3QnICYmICFtaXNzaW5nICYmIGN0eC5wcm90ZWN0Q3JlYXRlO1xuXHRcdFx0aWYgKGFjdGlvbk1pc3NpbmcgfHwgcHJvdGVjdE1pc3NpbmcgfHwgc2FsdE1pc3NpbmcpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0YCR7XG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aXoOazleWvuemhtemdoui/m+ihjOKAnCcsICfnhKHms5XlsI3poIHpnaLpgLLooYzjgIwnKSArXG5cdFx0XHRcdFx0XHRhY3Rpb24gK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfigJ3mk43kvZzvvIzlm6DkuLrpobXpnaInLCAn44CN5pON5L2c77yM5Zug54K66aCB6Z2iJykgK1xuXHRcdFx0XHRcdFx0KG1pc3NpbmcgPyAn5bey5LiNJyA6IHdpbmRvdy53Z1VMUygn5bey57uPJywgJ+W3sue2kycpKVxuXHRcdFx0XHRcdH3lrZjlnKhgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRGVsZXRlLCB1bmRlbGV0ZSwgbW92ZVxuXHRcdFx0Ly8gZXh0cmFjdCBwcm90ZWN0aW9uIGluZm9cblx0XHRcdGxldCBlZGl0cHJvdDtcblx0XHRcdGlmIChhY3Rpb24gPT09ICd1bmRlbGV0ZScpIHtcblx0XHRcdFx0ZWRpdHByb3QgPSByZXNwb25zZS5wYWdlc1swXS5wcm90ZWN0aW9uXG5cdFx0XHRcdFx0LmZpbHRlcigocHIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBwci50eXBlID09PSAnY3JlYXRlJyAmJiBwci5sZXZlbCA9PT0gJ3N5c29wJztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZGVsZXRlJyB8fCBhY3Rpb24gPT09ICdtb3ZlJykge1xuXHRcdFx0XHRlZGl0cHJvdCA9IHJlc3BvbnNlLnBhZ2VzWzBdLnByb3RlY3Rpb25cblx0XHRcdFx0XHQuZmlsdGVyKChwcikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHByLnR5cGUgPT09ICdlZGl0JyAmJiBwci5sZXZlbCA9PT0gJ3N5c29wJztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0ZWRpdHByb3QgJiZcblx0XHRcdFx0IWN0eC5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nICYmXG5cdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5oKo5Y2z5bCG5a+55YWo5L+d5oqk6aG16Z2i4oCcJywgJ+aCqOWNs+Wwh+WwjeWFqOS/neitt+mggemdouOAjCcpICtcblx0XHRcdFx0XHRcdGN0eC5wYWdlTmFtZSArXG5cdFx0XHRcdFx0XHQoZWRpdHByb3QuZXhwaXJ5ID09PSAnaW5maW5pdHknXG5cdFx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCfigJ3vvIjmsLjkuYXvvIknLCAn44CN77yI5rC45LmF77yJJylcblx0XHRcdFx0XHRcdFx0OiBgJHtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCd77yI5Yiw5pyf77yaJywgJ+OAje+8iOWIsOacn++8micpICtcblx0XHRcdFx0XHRcdFx0XHRcdG5ldyBNb3JlYml0cy5kYXRlKGVkaXRwcm90LmV4cGlyeSkuY2FsZW5kYXIoJ3V0YycpXG5cdFx0XHRcdFx0XHRcdFx0fSAoVVRDKe+8iWApICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCd6L+b6KGM4oCcJywgJ+OAjemAsuihjOOAjCcpICtcblx0XHRcdFx0XHRcdGFjdGlvbiArXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+KAneaTjeS9nCcsICfjgI3mk43kvZwnKSArXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCfjgIJcXG5cXG7ljZXlh7vnoa7lrprku6Xnu6fnu63mk43kvZzvvIzmiJbljZXlh7vlj5bmtojku6Xlj5bmtojmk43kvZzjgIInLFxuXHRcdFx0XHRcdFx0XHQn44CCXFxuXFxu6bue5pOK56K65a6a5Lul57m857qM5pON5L2c77yM5oiW6bue5pOK5Y+W5raI5Lul5Y+W5raI5pON5L2c44CCJ1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCflt7Llj5bmtojlr7nlhajkv53miqTpobXpnaLnmoTmk43kvZzjgIInLCAn5bey5Y+W5raI5bCN5YWo5L+d6K236aCB6Z2i55qE5pON5L2c44CCJykpO1xuXHRcdFx0XHRvbkZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmICghcmVzcG9uc2UudG9rZW5zLmNzcmZ0b2tlbikge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+aXoOazleiOt+WPluS7pOeJjOOAgicsICfnhKHms5Xlj5blvpfmrIrmnZbjgIInKSk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7IC8vIGFsbCBPS1xuXHRcdH07XG5cblx0XHRjb25zdCBmblByb2Nlc3NNb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0bGV0IHBhZ2VUaXRsZTtcblx0XHRcdGxldCB0b2tlbjtcblx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdtb3ZlJykpIHtcblx0XHRcdFx0dG9rZW4gPSBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdFx0XHRwYWdlVGl0bGUgPSBjdHgucGFnZU5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGN0eC5tb3ZlQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRcdGlmICghZm5Qcm9jZXNzQ2hlY2tzKCdtb3ZlJywgY3R4Lm9uTW92ZUZhaWx1cmUsIHJlc3BvbnNlKSkge1xuXHRcdFx0XHRcdHJldHVybjsgLy8gYWJvcnRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRva2VuID0gcmVzcG9uc2UudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHRcdFx0Y29uc3QgW3BhZ2VdID0gcmVzcG9uc2UucGFnZXM7XG5cdFx0XHRcdHBhZ2VUaXRsZSA9IHBhZ2UudGl0bGU7XG5cdFx0XHRcdGN0eC53YXRjaGVkID0gcGFnZS53YXRjaGxpc3RleHBpcnkgfHwgcGFnZS53YXRjaGVkO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ21vdmUnLFxuXHRcdFx0XHRmcm9tOiBwYWdlVGl0bGUsXG5cdFx0XHRcdHRvOiBjdHgubW92ZURlc3RpbmF0aW9uLFxuXHRcdFx0XHR0b2tlbixcblx0XHRcdFx0cmVhc29uOiBjdHguZWRpdFN1bW1hcnksXG5cdFx0XHRcdHdhdGNobGlzdDogY3R4LndhdGNobGlzdE9wdGlvbixcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGN0eC5jaGFuZ2VUYWdzKSB7XG5cdFx0XHRcdHF1ZXJ5LnRhZ3MgPSBjdHguY2hhbmdlVGFncztcblx0XHRcdH1cblx0XHRcdGlmIChmbkFwcGx5V2F0Y2hsaXN0RXhwaXJ5KCkpIHtcblx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ZXhwaXJ5ID0gY3R4LndhdGNobGlzdEV4cGlyeTtcblx0XHRcdH1cblx0XHRcdGlmIChjdHgubW92ZVRhbGtQYWdlKSB7XG5cdFx0XHRcdHF1ZXJ5Lm1vdmV0YWxrID0gJ3RydWUnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN0eC5tb3ZlU3VicGFnZXMpIHtcblx0XHRcdFx0cXVlcnkubW92ZXN1YnBhZ2VzID0gJ3RydWUnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN0eC5tb3ZlU3VwcHJlc3NSZWRpcmVjdCkge1xuXHRcdFx0XHRxdWVyeS5ub3JlZGlyZWN0ID0gJ3RydWUnO1xuXHRcdFx0fVxuXHRcdFx0Y3R4Lm1vdmVQcm9jZXNzQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+enu+WKqOmhtemdouKApuKApicsICfnp7vli5XpoIHpnaLigKbigKYnKSxcblx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdGN0eC5vbk1vdmVTdWNjZXNzLFxuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0Y3R4Lm9uTW92ZUZhaWx1cmVcblx0XHRcdCk7XG5cdFx0XHRjdHgubW92ZVByb2Nlc3NBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4Lm1vdmVQcm9jZXNzQXBpLnBvc3QoKTtcblx0XHR9O1xuXHRcdGNvbnN0IGZuUHJvY2Vzc1BhdHJvbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdwYXRyb2wnLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdH07XG5cdFx0XHQvLyBEaWRuJ3QgbmVlZCB0byBsb2FkIHRoZSBwYWdlXG5cdFx0XHRpZiAoY3R4LnJjaWQpIHtcblx0XHRcdFx0cXVlcnkucmNpZCA9IGN0eC5yY2lkO1xuXHRcdFx0XHRxdWVyeS50b2tlbiA9IG13LnVzZXIudG9rZW5zLmdldCgncGF0cm9sVG9rZW4nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LnBhdHJvbEFwaS5nZXRSZXNwb25zZSgpLnF1ZXJ5O1xuXHRcdFx0XHQvLyBEb24ndCBwYXRyb2wgaWYgbm90IHVucGF0cm9sbGVkXG5cdFx0XHRcdGlmICghcmVzcG9uc2UucmVjZW50Y2hhbmdlc1swXS51bnBhdHJvbGxlZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBbe2xhc3RyZXZpZH1dID0gcmVzcG9uc2UucGFnZXM7XG5cdFx0XHRcdGlmICghbGFzdHJldmlkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHF1ZXJ5LnJldmlkID0gbGFzdHJldmlkO1xuXHRcdFx0XHRjb25zdCB0b2tlbiA9IHJlc3BvbnNlLnRva2Vucy5jc3JmdG9rZW47XG5cdFx0XHRcdGlmICghdG9rZW4pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cXVlcnkudG9rZW4gPSB0b2tlbjtcblx0XHRcdH1cblx0XHRcdGlmIChjdHguY2hhbmdlVGFncykge1xuXHRcdFx0XHRxdWVyeS50YWdzID0gY3R4LmNoYW5nZVRhZ3M7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwYXRyb2xTdGF0ID0gbmV3IE1vcmViaXRzLnN0YXR1cyh3aW5kb3cud2dVTFMoJ+agh+iusOmhtemdouS4uuW3suW3oeafpScsICfmqJnoqJjpoIHpnaLngrrlt7Llt6Hmn6UnKSk7XG5cdFx0XHRjdHgucGF0cm9sUHJvY2Vzc0FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCflt6Hmn6XpobXpnaLigKbigKYnLCAn5beh5p+l6aCB6Z2i4oCm4oCmJyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRwYXRyb2xTdGF0XG5cdFx0XHQpO1xuXHRcdFx0Y3R4LnBhdHJvbFByb2Nlc3NBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4LnBhdHJvbFByb2Nlc3NBcGkucG9zdCgpO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5Qcm9jZXNzRGVsZXRlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0bGV0IHBhZ2VUaXRsZTtcblx0XHRcdGxldCB0b2tlbjtcblx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdkZWxldGUnKSkge1xuXHRcdFx0XHR0b2tlbiA9IG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJyk7XG5cdFx0XHRcdHBhZ2VUaXRsZSA9IGN0eC5wYWdlTmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LmRlbGV0ZUFwaS5nZXRSZXNwb25zZSgpLnF1ZXJ5O1xuXHRcdFx0XHRpZiAoIWZuUHJvY2Vzc0NoZWNrcygnZGVsZXRlJywgY3R4Lm9uRGVsZXRlRmFpbHVyZSwgcmVzcG9uc2UpKSB7XG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBhYm9ydFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW4gPSByZXNwb25zZS50b2tlbnMuY3NyZnRva2VuO1xuXHRcdFx0XHRjb25zdCBbcGFnZV0gPSByZXNwb25zZS5wYWdlcztcblx0XHRcdFx0cGFnZVRpdGxlID0gcGFnZS50aXRsZTtcblx0XHRcdFx0Y3R4LndhdGNoZWQgPSBwYWdlLndhdGNobGlzdGV4cGlyeSB8fCBwYWdlLndhdGNoZWQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAnZGVsZXRlJyxcblx0XHRcdFx0dGl0bGU6IHBhZ2VUaXRsZSxcblx0XHRcdFx0dG9rZW4sXG5cdFx0XHRcdHJlYXNvbjogY3R4LmVkaXRTdW1tYXJ5LFxuXHRcdFx0XHR3YXRjaGxpc3Q6IGN0eC53YXRjaGxpc3RPcHRpb24sXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0fTtcblx0XHRcdGlmIChjdHguY2hhbmdlVGFncykge1xuXHRcdFx0XHRxdWVyeS50YWdzID0gY3R4LmNoYW5nZVRhZ3M7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZm5BcHBseVdhdGNobGlzdEV4cGlyeSgpKSB7XG5cdFx0XHRcdHF1ZXJ5LndhdGNobGlzdGV4cGlyeSA9IGN0eC53YXRjaGxpc3RFeHBpcnk7XG5cdFx0XHR9XG5cdFx0XHRjdHguZGVsZXRlUHJvY2Vzc0FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCfliKDpmaTpobXpnaLigKbigKYnLCAn5Yiq6Zmk6aCB6Z2i4oCm4oCmJyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRjdHgub25EZWxldGVTdWNjZXNzLFxuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0Zm5Qcm9jZXNzRGVsZXRlRXJyb3Jcblx0XHRcdCk7XG5cdFx0XHRjdHguZGVsZXRlUHJvY2Vzc0FwaS5zZXRQYXJlbnQodGhpcyk7XG5cdFx0XHRjdHguZGVsZXRlUHJvY2Vzc0FwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHQvLyBjYWxsYmFjayBmcm9tIGRlbGV0ZVByb2Nlc3NBcGkucG9zdCgpXG5cdFx0Y29uc3QgZm5Qcm9jZXNzRGVsZXRlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBlcnJvckNvZGUgPSBjdHguZGVsZXRlUHJvY2Vzc0FwaS5nZXRFcnJvckNvZGUoKTtcblx0XHRcdC8vIGNoZWNrIGZvciBcIkRhdGFiYXNlIHF1ZXJ5IGVycm9yXCJcblx0XHRcdGlmIChlcnJvckNvZGUgPT09ICdpbnRlcm5hbF9hcGlfZXJyb3JfREJRdWVyeUVycm9yJyAmJiBjdHgucmV0cmllcysrIDwgY3R4Lm1heFJldHJpZXMpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyh3aW5kb3cud2dVTFMoJ+aVsOaNruW6k+afpeivoumUmeivr++8jOmHjeivlScsICfos4fmlpnluqvmn6XoqaLpjK/oqqTvvIzph43oqaYnKSk7XG5cdFx0XHRcdC0tTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0OyAvLyBhbGxvdyBmb3Igbm9ybWFsIGNvbXBsZXRpb24gaWYgcmV0cnkgc3VjY2VlZHNcblx0XHRcdFx0Y3R4LmRlbGV0ZVByb2Nlc3NBcGkucG9zdCgpOyAvLyBnaXZlIGl0IGFub3RoZXIgZ28hXG5cdFx0XHR9IGVsc2UgaWYgKGVycm9yQ29kZSA9PT0gJ21pc3Npbmd0aXRsZScpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCfkuI3og73liKDpmaTpobXpnaLvvIzlm6Dlhbblt7LkuI3lrZjlnKgnLCAn5LiN6IO95Yiq6Zmk6aCB6Z2i77yM5Zug5YW25bey5LiN5a2Y5ZyoJykpO1xuXHRcdFx0XHRpZiAoY3R4Lm9uRGVsZXRlRmFpbHVyZSkge1xuXHRcdFx0XHRcdGN0eC5vbkRlbGV0ZUZhaWx1cmUuY2FsbCh0aGlzLCBjdHguZGVsZXRlUHJvY2Vzc0FwaSk7IC8vIGludm9rZSBjYWxsYmFja1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGhhcmQgZXJyb3IsIGdpdmUgdXBcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5peg5rOV5Yig6Zmk6aG16Z2i77yaJywgJ+eEoeazleWIqumZpOmggemdou+8micpICsgY3R4LmRlbGV0ZVByb2Nlc3NBcGkuZ2V0RXJyb3JUZXh0KClcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGN0eC5vbkRlbGV0ZUZhaWx1cmUpIHtcblx0XHRcdFx0XHRjdHgub25EZWxldGVGYWlsdXJlLmNhbGwodGhpcywgY3R4LmRlbGV0ZVByb2Nlc3NBcGkpOyAvLyBpbnZva2UgY2FsbGJhY2tcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBmblByb2Nlc3NVbmRlbGV0ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGxldCBwYWdlVGl0bGU7XG5cdFx0XHRsZXQgdG9rZW47XG5cdFx0XHRpZiAoZm5DYW5Vc2VNd1VzZXJUb2tlbigndW5kZWxldGUnKSkge1xuXHRcdFx0XHR0b2tlbiA9IG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJyk7XG5cdFx0XHRcdHBhZ2VUaXRsZSA9IGN0eC5wYWdlTmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LnVuZGVsZXRlQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRcdGlmICghZm5Qcm9jZXNzQ2hlY2tzKCd1bmRlbGV0ZScsIGN0eC5vblVuZGVsZXRlRmFpbHVyZSwgcmVzcG9uc2UpKSB7XG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBhYm9ydFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW4gPSByZXNwb25zZS50b2tlbnMuY3NyZnRva2VuO1xuXHRcdFx0XHRjb25zdCBbcGFnZV0gPSByZXNwb25zZS5wYWdlcztcblx0XHRcdFx0cGFnZVRpdGxlID0gcGFnZS50aXRsZTtcblx0XHRcdFx0Y3R4LndhdGNoZWQgPSBwYWdlLndhdGNobGlzdGV4cGlyeSB8fCBwYWdlLndhdGNoZWQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAndW5kZWxldGUnLFxuXHRcdFx0XHR0aXRsZTogcGFnZVRpdGxlLFxuXHRcdFx0XHR0b2tlbixcblx0XHRcdFx0cmVhc29uOiBjdHguZWRpdFN1bW1hcnksXG5cdFx0XHRcdHdhdGNobGlzdDogY3R4LndhdGNobGlzdE9wdGlvbixcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGN0eC5jaGFuZ2VUYWdzKSB7XG5cdFx0XHRcdHF1ZXJ5LnRhZ3MgPSBjdHguY2hhbmdlVGFncztcblx0XHRcdH1cblx0XHRcdGlmIChmbkFwcGx5V2F0Y2hsaXN0RXhwaXJ5KCkpIHtcblx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ZXhwaXJ5ID0gY3R4LndhdGNobGlzdEV4cGlyeTtcblx0XHRcdH1cblx0XHRcdGN0eC51bmRlbGV0ZVByb2Nlc3NBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn6L+Y5Y6f6aG16Z2i4oCm4oCmJywgJ+mChOWOn+mggemdouKApuKApicpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0Y3R4Lm9uVW5kZWxldGVTdWNjZXNzLFxuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0Zm5Qcm9jZXNzVW5kZWxldGVFcnJvclxuXHRcdFx0KTtcblx0XHRcdGN0eC51bmRlbGV0ZVByb2Nlc3NBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4LnVuZGVsZXRlUHJvY2Vzc0FwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHQvLyBjYWxsYmFjayBmcm9tIHVuZGVsZXRlUHJvY2Vzc0FwaS5wb3N0KClcblx0XHRjb25zdCBmblByb2Nlc3NVbmRlbGV0ZUVycm9yID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc3QgZXJyb3JDb2RlID0gY3R4LnVuZGVsZXRlUHJvY2Vzc0FwaS5nZXRFcnJvckNvZGUoKTtcblx0XHRcdC8vIGNoZWNrIGZvciBcIkRhdGFiYXNlIHF1ZXJ5IGVycm9yXCJcblx0XHRcdGlmIChlcnJvckNvZGUgPT09ICdpbnRlcm5hbF9hcGlfZXJyb3JfREJRdWVyeUVycm9yJykge1xuXHRcdFx0XHRpZiAoY3R4LnJldHJpZXMrKyA8IGN0eC5tYXhSZXRyaWVzKSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyh3aW5kb3cud2dVTFMoJ+aVsOaNruW6k+afpeivoumUmeivr++8jOmHjeivlScsICfos4fmlpnluqvmn6XoqaLpjK/oqqTvvIzph43oqaYnKSk7XG5cdFx0XHRcdFx0LS1Nb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQ7IC8vIGFsbG93IGZvciBub3JtYWwgY29tcGxldGlvbiBpZiByZXRyeSBzdWNjZWVkc1xuXHRcdFx0XHRcdGN0eC51bmRlbGV0ZVByb2Nlc3NBcGkucG9zdCgpOyAvLyBnaXZlIGl0IGFub3RoZXIgZ28hXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCfmjIHnu63nmoTmlbDmja7lupPmn6Xor6LplJnor6/vvIzph43mlrDliqDovb3pobXpnaLlubbph43or5UnLFxuXHRcdFx0XHRcdFx0XHQn5oyB57qM55qE6LOH5paZ5bqr5p+l6Kmi6Yyv6Kqk77yM6YeN5paw6LyJ5YWl6aCB6Z2i5Lim6YeN6KmmJ1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKGN0eC5vblVuZGVsZXRlRmFpbHVyZSkge1xuXHRcdFx0XHRcdFx0Y3R4Lm9uVW5kZWxldGVGYWlsdXJlLmNhbGwodGhpcywgY3R4LnVuZGVsZXRlUHJvY2Vzc0FwaSk7IC8vIGludm9rZSBjYWxsYmFja1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChlcnJvckNvZGUgPT09ICdjYW50dW5kZWxldGUnKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfml6Dms5Xov5jljp/liKDpmaTpobXpnaLvvIzlm6DmsqHmnInniYjmnKzkvpvov5jljp/miJblt7Looqvov5jljp8nLFxuXHRcdFx0XHRcdFx0J+eEoeazlemChOWOn+WIqumZpOmggemdou+8jOWboOaykuacieeJiOacrOS+m+mChOWOn+aIluW3suiiq+mChOWOnydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChjdHgub25VbmRlbGV0ZUZhaWx1cmUpIHtcblx0XHRcdFx0XHRjdHgub25VbmRlbGV0ZUZhaWx1cmUuY2FsbCh0aGlzLCBjdHgudW5kZWxldGVQcm9jZXNzQXBpKTsgLy8gaW52b2tlIGNhbGxiYWNrXG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gaGFyZCBlcnJvciwgZ2l2ZSB1cFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfml6Dms5Xov5jljp/pobXpnaLvvJonLCAn54Sh5rOV6YKE5Y6f6aCB6Z2i77yaJykgKyBjdHgudW5kZWxldGVQcm9jZXNzQXBpLmdldEVycm9yVGV4dCgpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChjdHgub25VbmRlbGV0ZUZhaWx1cmUpIHtcblx0XHRcdFx0XHRjdHgub25VbmRlbGV0ZUZhaWx1cmUuY2FsbCh0aGlzLCBjdHgudW5kZWxldGVQcm9jZXNzQXBpKTsgLy8gaW52b2tlIGNhbGxiYWNrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgZm5Qcm9jZXNzUHJvdGVjdCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LnByb3RlY3RBcGkuZ2V0UmVzcG9uc2UoKS5xdWVyeTtcblx0XHRcdGlmICghZm5Qcm9jZXNzQ2hlY2tzKCdwcm90ZWN0JywgY3R4Lm9uUHJvdGVjdEZhaWx1cmUsIHJlc3BvbnNlKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHRva2VuID0gcmVzcG9uc2UudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHRcdGNvbnN0IFtwYWdlXSA9IHJlc3BvbnNlLnBhZ2VzO1xuXHRcdFx0Y29uc3QgcGFnZVRpdGxlID0gcGFnZS50aXRsZTtcblx0XHRcdGN0eC53YXRjaGVkID0gcGFnZS53YXRjaGxpc3RleHBpcnkgfHwgcGFnZS53YXRjaGVkO1xuXHRcdFx0Ly8gRmV0Y2ggZXhpc3RpbmcgcHJvdGVjdGlvbiBsZXZlbHNcblx0XHRcdGNvbnN0IHBycyA9IHJlc3BvbnNlLnBhZ2VzWzBdLnByb3RlY3Rpb247XG5cdFx0XHRsZXQgZWRpdHByb3Q7XG5cdFx0XHRsZXQgbW92ZXByb3Q7XG5cdFx0XHRsZXQgY3JlYXRlcHJvdDtcblx0XHRcdGZvciAoY29uc3QgcHIgb2YgcHJzKSB7XG5cdFx0XHRcdC8vIEZpbHRlciBvdXQgcHJvdGVjdGlvbiBmcm9tIGNhc2NhZGluZ1xuXHRcdFx0XHRpZiAocHIudHlwZSA9PT0gJ2VkaXQnICYmICFwci5zb3VyY2UpIHtcblx0XHRcdFx0XHRlZGl0cHJvdCA9IHByO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByLnR5cGUgPT09ICdtb3ZlJykge1xuXHRcdFx0XHRcdG1vdmVwcm90ID0gcHI7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHIudHlwZSA9PT0gJ2NyZWF0ZScpIHtcblx0XHRcdFx0XHRjcmVhdGVwcm90ID0gcHI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEZhbGwgYmFjayB0byBjdXJyZW50IGxldmVscyBpZiBub3QgZXhwbGljaXRseSBzZXRcblx0XHRcdGlmICghY3R4LnByb3RlY3RFZGl0ICYmIGVkaXRwcm90KSB7XG5cdFx0XHRcdGN0eC5wcm90ZWN0RWRpdCA9IHtcblx0XHRcdFx0XHRsZXZlbDogZWRpdHByb3QubGV2ZWwsXG5cdFx0XHRcdFx0ZXhwaXJ5OiBlZGl0cHJvdC5leHBpcnksXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN0eC5wcm90ZWN0TW92ZSAmJiBtb3ZlcHJvdCkge1xuXHRcdFx0XHRjdHgucHJvdGVjdE1vdmUgPSB7XG5cdFx0XHRcdFx0bGV2ZWw6IG1vdmVwcm90LmxldmVsLFxuXHRcdFx0XHRcdGV4cGlyeTogbW92ZXByb3QuZXhwaXJ5LFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdHgucHJvdGVjdENyZWF0ZSAmJiBjcmVhdGVwcm90KSB7XG5cdFx0XHRcdGN0eC5wcm90ZWN0Q3JlYXRlID0ge1xuXHRcdFx0XHRcdGxldmVsOiBjcmVhdGVwcm90LmxldmVsLFxuXHRcdFx0XHRcdGV4cGlyeTogY3JlYXRlcHJvdC5leHBpcnksXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHQvLyBEZWZhdWx0IHRvIHByZS1leGlzdGluZyBjYXNjYWRpbmcgcHJvdGVjdGlvbiBpZiB1bmNoYW5nZWQgKHNpbWlsYXIgdG8gYWJvdmUpXG5cdFx0XHRpZiAoY3R4LnByb3RlY3RDYXNjYWRlID09PSBudWxsKSB7XG5cdFx0XHRcdGN0eC5wcm90ZWN0Q2FzY2FkZSA9ICEhcHJzLmZpbHRlcigocHIpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcHIuY2FzY2FkZTtcblx0XHRcdFx0fSkubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0Ly8gV2FybiBpZiBjYXNjYWRpbmcgcHJvdGVjdGlvbiBiZWluZyBhcHBsaWVkIHdpdGggYW4gaW52YWxpZCBwcm90ZWN0aW9uIGxldmVsLFxuXHRcdFx0Ly8gd2hpY2ggZm9yIGVkaXQgcHJvdGVjdGlvbiB3aWxsIGNhdXNlIGNhc2NhZGluZyB0byBiZSBzaWxlbnRseSBzdHJpcHBlZFxuXHRcdFx0aWYgKGN0eC5wcm90ZWN0Q2FzY2FkZSkge1xuXHRcdFx0XHQvLyBPbiBtb3ZlIHByb3RlY3Rpb24sIHRoaXMgaXMgdGVjaG5pY2FsbHkgc3RyaWN0ZXIgdGhhbiB0aGUgTVcgQVBJLFxuXHRcdFx0XHQvLyBidXQgc2VlbXMgcmVhc29uYWJsZSB0byBhdm9pZCBkdW1iIHZhbHVlcyBhbmQgbWlzbGVhZGluZyBsb2cgZW50cmllcyAoVDI2NTYyNilcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghY3R4LnByb3RlY3RFZGl0IHx8XG5cdFx0XHRcdFx0XHRjdHgucHJvdGVjdEVkaXQubGV2ZWwgIT09ICdzeXNvcCcgfHxcblx0XHRcdFx0XHRcdCFjdHgucHJvdGVjdE1vdmUgfHxcblx0XHRcdFx0XHRcdGN0eC5wcm90ZWN0TW92ZS5sZXZlbCAhPT0gJ3N5c29wJykgJiZcblx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5oKo5bey5a+54oCcJywgJ+aCqOW3suWwjeOAjCcpICtcblx0XHRcdFx0XHRcdFx0Y3R4LnBhZ2VOYW1lICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfigJ3lkK/nlKjkuobov57plIHkv53miqQnLCAn44CN5ZWf55So5LqG6YCj6Y6W5L+d6K23JykgK1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J++8jOS9huayoeacieiuvue9ruS7heeuoeeQhuWRmOeahOS/neaKpOe6p+WIq+OAglxcblxcbicsXG5cdFx0XHRcdFx0XHRcdFx0J++8jOS9huaykuacieioreWumuWDheeuoeeQhuWToeeahOS/neitt+e0muWIpeOAglxcblxcbidcblx0XHRcdFx0XHRcdFx0KSArXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Y2V5Ye756Gu6K6k5Lul6Ieq5Yqo6LCD5pW05bm257un57ut6L+e6ZSB5YWo5L+d5oqk77yM5Y2V5Ye75Y+W5raI5Lul6Lez6L+H5q2k5pON5L2cJyxcblx0XHRcdFx0XHRcdFx0XHQn6bue5pOK56K66KqN5Lul6Ieq5YuV6Kq/5pW05Lim57m857qM6YCj6Y6W5YWo5L+d6K2377yM6bue5pOK5Y+W5raI5Lul6Lez6YGO5q2k5pON5L2cJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+i/numUgeS/neaKpOW3suWPlua2iOOAgicsICfpgKPpjpbkv53orbflt7Llj5bmtojjgIInKSk7XG5cdFx0XHRcdFx0Y3R4Lm9uUHJvdGVjdEZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN0eC5wcm90ZWN0RWRpdC5sZXZlbCA9ICdzeXNvcCc7XG5cdFx0XHRcdGN0eC5wcm90ZWN0TW92ZS5sZXZlbCA9ICdzeXNvcCc7XG5cdFx0XHR9XG5cdFx0XHQvLyBCdWlsZCBwcm90ZWN0aW9uIGxldmVscyBhbmQgZXhwaXJ5cyAoZXhwaXJpZXM/KSBmb3IgcXVlcnlcblx0XHRcdGNvbnN0IHByb3RlY3Rpb25zID0gW107XG5cdFx0XHRjb25zdCBleHBpcnlzID0gW107XG5cdFx0XHRpZiAoY3R4LnByb3RlY3RFZGl0KSB7XG5cdFx0XHRcdHByb3RlY3Rpb25zW3Byb3RlY3Rpb25zLmxlbmd0aF0gPSBgZWRpdD0ke2N0eC5wcm90ZWN0RWRpdC5sZXZlbH1gO1xuXHRcdFx0XHRleHBpcnlzW2V4cGlyeXMubGVuZ3RoXSA9IGN0eC5wcm90ZWN0RWRpdC5leHBpcnk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3R4LnByb3RlY3RNb3ZlKSB7XG5cdFx0XHRcdHByb3RlY3Rpb25zW3Byb3RlY3Rpb25zLmxlbmd0aF0gPSBgbW92ZT0ke2N0eC5wcm90ZWN0TW92ZS5sZXZlbH1gO1xuXHRcdFx0XHRleHBpcnlzW2V4cGlyeXMubGVuZ3RoXSA9IGN0eC5wcm90ZWN0TW92ZS5leHBpcnk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3R4LnByb3RlY3RDcmVhdGUpIHtcblx0XHRcdFx0cHJvdGVjdGlvbnNbcHJvdGVjdGlvbnMubGVuZ3RoXSA9IGBjcmVhdGU9JHtjdHgucHJvdGVjdENyZWF0ZS5sZXZlbH1gO1xuXHRcdFx0XHRleHBpcnlzW2V4cGlyeXMubGVuZ3RoXSA9IGN0eC5wcm90ZWN0Q3JlYXRlLmV4cGlyeTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdwcm90ZWN0Jyxcblx0XHRcdFx0dGl0bGU6IHBhZ2VUaXRsZSxcblx0XHRcdFx0dG9rZW4sXG5cdFx0XHRcdHByb3RlY3Rpb25zOiBwcm90ZWN0aW9ucy5qb2luKCd8JyksXG5cdFx0XHRcdGV4cGlyeTogZXhwaXJ5cy5qb2luKCd8JyksXG5cdFx0XHRcdHJlYXNvbjogY3R4LmVkaXRTdW1tYXJ5LFxuXHRcdFx0XHR3YXRjaGxpc3Q6IGN0eC53YXRjaGxpc3RPcHRpb24sXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0fTtcblx0XHRcdC8vIE9ubHkgc2hvd3MgdXAgaW4gbG9ncywgbm90IHBhZ2UgaGlzdG9yeVxuXHRcdFx0aWYgKGN0eC5jaGFuZ2VUYWdzKSB7XG5cdFx0XHRcdHF1ZXJ5LnRhZ3MgPSBjdHguY2hhbmdlVGFncztcblx0XHRcdH1cblx0XHRcdGlmIChmbkFwcGx5V2F0Y2hsaXN0RXhwaXJ5KCkpIHtcblx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ZXhwaXJ5ID0gY3R4LndhdGNobGlzdEV4cGlyeTtcblx0XHRcdH1cblx0XHRcdGlmIChjdHgucHJvdGVjdENhc2NhZGUpIHtcblx0XHRcdFx0cXVlcnkuY2FzY2FkZSA9ICd0cnVlJztcblx0XHRcdH1cblx0XHRcdGN0eC5wcm90ZWN0UHJvY2Vzc0FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCfkv53miqTpobXpnaLigKbigKYnLCAn5L+d6K236aCB6Z2i4oCm4oCmJyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRjdHgub25Qcm90ZWN0U3VjY2Vzcyxcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdGN0eC5vblByb3RlY3RGYWlsdXJlXG5cdFx0XHQpO1xuXHRcdFx0Y3R4LnByb3RlY3RQcm9jZXNzQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdGN0eC5wcm90ZWN0UHJvY2Vzc0FwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHRjb25zdCBzbGVlcCA9IChtaWxsaXNlY29uZHMpID0+IHtcblx0XHRcdGNvbnN0IGRlZmVycmVkID0gJC5EZWZlcnJlZCgpO1xuXHRcdFx0c2V0VGltZW91dChkZWZlcnJlZC5yZXNvbHZlLCBtaWxsaXNlY29uZHMpO1xuXHRcdFx0cmV0dXJuIGRlZmVycmVkO1xuXHRcdH07XG5cdH07IC8vIGVuZCBNb3JlYml0cy53aWtpLnBhZ2Vcblx0LyogKioqKioqKioqKioqKioqKiBNb3JlYml0cy53aWtpLnByZXZpZXcgKioqKioqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogVXNlIHRoZSBBUEkgdG8gcGFyc2UgYSBmcmFnbWVudCBvZiB3aWtpdGV4dCBhbmQgcmVuZGVyIGl0IGFzIEhUTUwuXG5cdCAqXG5cdCAqIFRoZSBzdWdnZXN0ZWQgaW1wbGVtZW50YXRpb24gcGF0dGVybiAoaW4ge0BsaW5rIE1vcmViaXRzLnNpbXBsZVdpbmRvd30gYW5kXG5cdCAqIHtAbGluayBNb3JlYml0cy5xdWlja0Zvcm19IHNpdHVhdGlvbnMpIGlzIHRvIGNvbnN0cnVjdCBhXG5cdCAqIGBNb3JlYml0cy53aWtpLnByZXZpZXdgIG9iamVjdCBhZnRlciByZW5kZXJpbmcgYSBgTW9yZWJpdHMucXVpY2tGb3JtYCwgYW5kXG5cdCAqIGJpbmQgdGhlIG9iamVjdCB0byBhbiBhcmJpdHJhcnkgcHJvcGVydHkgb2YgdGhlIGZvcm0gKGUuZy4gfHByZXZpZXdlcnwpLlxuXHQgKiBGb3IgYW4gZXhhbXBsZSwgc2VlIHR3aW5rbGV3YXJuLmpzLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraVxuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcHJldmlld2JveCAtIFRoZSBlbGVtZW50IHRoYXQgd2lsbCBjb250YWluIHRoZSByZW5kZXJlZCBIVE1MLFxuXHQgKiB1c3VhbGx5IGEgPGRpdj4gZWxlbWVudC5cblx0ICovXG5cdE1vcmViaXRzLndpa2kucHJldmlldyA9IGZ1bmN0aW9uIChwcmV2aWV3Ym94KSB7XG5cdFx0dGhpcy5wcmV2aWV3Ym94ID0gcHJldmlld2JveDtcblx0XHQkKHByZXZpZXdib3gpLmFkZENsYXNzKCdtb3JlYml0cy1wcmV2aWV3Ym94JykuaGlkZSgpO1xuXHRcdC8qKlxuXHRcdCAqIERpc3BsYXlzIHRoZSBwcmV2aWV3IGJveCwgYW5kIGJlZ2lucyBhbiBhc3luY2hyb25vdXMgYXR0ZW1wdFxuXHRcdCAqIHRvIHJlbmRlciB0aGUgc3BlY2lmaWVkIHdpa2l0ZXh0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHdpa2l0ZXh0IC0gV2lraXRleHQgdG8gcmVuZGVyOyBtb3N0IHRoaW5ncyBzaG91bGQgd29yaywgaW5jbHVkaW5nIGBzdWJzdDpgIGFuZCBgfn5+fmAuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IFtwYWdlVGl0bGVdIC0gT3B0aW9uYWwgcGFyYW1ldGVyIGZvciB0aGUgcGFnZSB0aGlzIHNob3VsZCBiZSByZW5kZXJlZCBhcyBiZWluZyBvbiwgaWYgb21pdHRlZCBpdCBpcyB0YWtlbiBhcyB0aGUgY3VycmVudCBwYWdlLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbc2VjdGlvblRpdGxlXSAtIElmIHByb3ZpZGVkLCByZW5kZXIgdGhlIHRleHQgYXMgYSBuZXcgc2VjdGlvbiB1c2luZyB0aGlzIGFzIHRoZSB0aXRsZS5cblx0XHQgKiBAcmV0dXJucyB7alF1ZXJ5LnByb21pc2V9XG5cdFx0ICovXG5cdFx0dGhpcy5iZWdpblJlbmRlciA9ICh3aWtpdGV4dCwgcGFnZVRpdGxlLCBzZWN0aW9uVGl0bGUpID0+IHtcblx0XHRcdCQocHJldmlld2JveCkuc2hvdygpO1xuXHRcdFx0Y29uc3Qgc3RhdHVzc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdHByZXZpZXdib3guYXBwZW5kQ2hpbGQoc3RhdHVzc3Bhbik7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChzdGF0dXNzcGFuKTtcblx0XHRcdC8vIOiLpemhtemdouS4jeaYr3dpa2l0ZXh077yI5L6L5aaCSlPjgIFDU1PnrYnvvInvvIzpgqPkuYjmib7kuIDkuKp3aWtpdGV4dOmhtemdouadpemihOiniOOAglxuXHRcdFx0bGV0IHBhZ2VOYW1lID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZUNvbnRlbnRNb2RlbCcpICE9PSAnd2lraXRleHQnKSB7XG5cdFx0XHRcdHBhZ2VOYW1lID0gYERyYWZ0OiR7cGFnZU5hbWV9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdwYXJzZScsXG5cdFx0XHRcdHByb3A6IFsndGV4dCcsICdtb2R1bGVzJ10sXG5cdFx0XHRcdHBzdDogdHJ1ZSxcblx0XHRcdFx0Ly8gUFNUID0gcHJlLXNhdmUgdHJhbnNmb3JtOyB0aGlzIG1ha2VzIHN1YnN0aXR1dGlvbiB3b3JrIHByb3Blcmx5XG5cdFx0XHRcdHByZXZpZXc6IHRydWUsXG5cdFx0XHRcdHRleHQ6IHdpa2l0ZXh0LFxuXHRcdFx0XHR0aXRsZTogcGFnZVRpdGxlIHx8IHBhZ2VOYW1lLFxuXHRcdFx0XHRkaXNhYmxlbGltaXRyZXBvcnQ6IHRydWUsXG5cdFx0XHRcdGRpc2FibGVlZGl0c2VjdGlvbjogdHJ1ZSxcblx0XHRcdFx0dXNlbGFuZzogbXcuY29uZmlnLmdldCgnd2dVc2VyTGFuZ3VhZ2UnKSxcblx0XHRcdFx0Ly8gVXNlIHdnVXNlckxhbmd1YWdlIGZvciBwcmV2aWV3XG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0fTtcblx0XHRcdGlmIChzZWN0aW9uVGl0bGUpIHtcblx0XHRcdFx0cXVlcnkuc2VjdGlvbiA9ICduZXcnO1xuXHRcdFx0XHRxdWVyeS5zZWN0aW9udGl0bGUgPSBzZWN0aW9uVGl0bGU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCByZW5kZXJBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg6L295Lit4oCm4oCmJywgJ+i8ieWFpeS4reKApuKApicpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0Zm5SZW5kZXJTdWNjZXNzLFxuXHRcdFx0XHRuZXcgTW9yZWJpdHMuc3RhdHVzKHdpbmRvdy53Z1VMUygn6aKE6KeIJywgJ+mgkOimvScpKVxuXHRcdFx0KTtcblx0XHRcdHJlbmRlckFwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHRjb25zdCBmblJlbmRlclN1Y2Nlc3MgPSAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGFwaW9iai5nZXRSZXNwb25zZSgpO1xuXHRcdFx0Y29uc3QgaHRtbCA9IHJlc3BvbnNlLnBhcnNlLnRleHQ7XG5cdFx0XHRpZiAoIWh0bWwpIHtcblx0XHRcdFx0YXBpb2JqLnN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn5Yqg6L296aKE6KeI5aSx6LSl77yM5oiW5qih5p2/5Li656m6JywgJ+i8ieWFpemgkOimveWkseaVl++8jOaIluaooeadv+eCuuepuicpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cHJldmlld2JveC5pbm5lckhUTUwgPSBodG1sO1xuXHRcdFx0bXcubG9hZGVyLmxvYWQocmVzcG9uc2UucGFyc2UubW9kdWxlc3R5bGVzKTtcblx0XHRcdG13LmxvYWRlci5sb2FkKHJlc3BvbnNlLnBhcnNlLm1vZHVsZXMpO1xuXHRcdFx0Ly8gdGhpcyBtYWtlcyBsaW5rcyBvcGVuIGluIG5ldyB0YWJcblx0XHRcdCQocHJldmlld2JveCkuZmluZCgnYScpLmF0dHIoJ3RhcmdldCcsICdfYmxhbmsnKS5hdHRyKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuXHRcdH07XG5cdFx0LyoqIEhpZGVzIHRoZSBwcmV2aWV3IGJveCBhbmQgY2xlYXJzIGl0LiAqL1xuXHRcdHRoaXMuY2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuXHRcdFx0JChwcmV2aWV3Ym94KS5lbXB0eSgpLmhpZGUoKTtcblx0XHR9O1xuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLndpa2l0ZXh0ICoqKioqKioqKioqKioqKiogKi9cblx0LyoqXG5cdCAqIFdpa2l0ZXh0IG1hbmlwdWxhdGlvbi5cblx0ICpcblx0ICogQG5hbWVzcGFjZSBNb3JlYml0cy53aWtpdGV4dFxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICovXG5cdE1vcmViaXRzLndpa2l0ZXh0ID0ge307XG5cdC8qKlxuXHQgKiBHZXQgdGhlIHZhbHVlIG9mIGV2ZXJ5IHBhcmFtZXRlciBmb3VuZCBpbiB0aGUgd2lraXRleHQgb2YgYSBnaXZlbiB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLndpa2l0ZXh0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gV2lraXRleHQgY29udGFpbmluZyBhIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIC0gSW5kZXggbm90aW5nIHdoZXJlIGluIHRoZSB0ZXh0IHRoZSB0ZW1wbGF0ZSBiZWdpbnMuXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IGB7bmFtZTogdGVtcGxhdGVOYW1lLCBwYXJhbWV0ZXJzOiB7a2V5OiB2YWx1ZX19YC5cblx0ICovXG5cdE1vcmViaXRzLndpa2l0ZXh0LnBhcnNlVGVtcGxhdGUgPSAodGV4dCwgc3RhcnQpID0+IHtcblx0XHRzdGFydCB8fD0gMDtcblx0XHRjb25zdCBsZXZlbCA9IFtdOyAvLyBUcmFjayBvZiBob3cgZGVlcCB3ZSBhcmUgKHt7LCB7e3ssIG9yIFtbKVxuXHRcdGxldCBjb3VudCA9IC0xOyAvLyBOdW1iZXIgb2YgcGFyYW1ldGVycyBmb3VuZFxuXHRcdGxldCB1bm5hbWVkID0gMDsgLy8gS2VlcCB0cmFjayBvZiB3aGF0IG51bWJlciBhbiB1bm5hbWVkIHBhcmFtZXRlciBzaG91bGQgcmVjZWl2ZVxuXHRcdGxldCBlcXVhbHMgPSAtMTsgLy8gQWZ0ZXIgZmluZGluZyBcIj1cIiBiZWZvcmUgYSBwYXJhbWV0ZXIsIHRoZSBpbmRleDsgb3RoZXJ3aXNlLCAtMVxuXHRcdGxldCBjdXJyZW50ID0gJyc7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge1xuXHRcdFx0bmFtZTogJycsXG5cdFx0XHRwYXJhbWV0ZXJzOiB7fSxcblx0XHR9O1xuXHRcdGxldCBrZXk7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdC8qKlxuXHRcdCAqIEZ1bmN0aW9uIHRvIGhhbmRsZSBmaW5kaW5nIHBhcmFtZXRlciB2YWx1ZXMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtmaW5hbD1mYWxzZV0gLSBXaGV0aGVyIHRoaXMgaXMgdGhlIGZpbmFsXG5cdFx0ICogcGFyYW1ldGVyIGFuZCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgdHJhaWxpbmcgYH19YC5cblx0XHQgKi9cblx0XHRjb25zdCBmaW5kUGFyYW0gPSAoZmluYWwpID0+IHtcblx0XHRcdC8vIE5vdGhpbmcgZm91bmQgeWV0LCB0aGlzIG11c3QgYmUgdGhlIHRlbXBsYXRlIG5hbWVcblx0XHRcdGlmIChjb3VudCA9PT0gLTEpIHtcblx0XHRcdFx0cmVzdWx0Lm5hbWUgPSBjdXJyZW50LnNsaWNlKDIpLnRyaW0oKTtcblx0XHRcdFx0Kytjb3VudDtcblx0XHRcdH0gZWxzZSBpZiAoZXF1YWxzID09PSAtMSkge1xuXHRcdFx0XHQvLyBJbiBhIHBhcmFtZXRlclxuXHRcdFx0XHQvLyBObyBlcXVhbHMsIHNvIGl0IG11c3QgYmUgdW5uYW1lZDsgbm8gdHJpbSBzaW5jZSB3aGl0ZXNwYWNlIGFsbG93ZWRcblx0XHRcdFx0Y29uc3QgcGFyYW0gPSBmaW5hbCA/IGN1cnJlbnQuc2xpY2UoZXF1YWxzICsgMSwgLTIpIDogY3VycmVudDtcblx0XHRcdFx0aWYgKHBhcmFtKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnBhcmFtZXRlcnNbKyt1bm5hbWVkXSA9IHBhcmFtO1xuXHRcdFx0XHRcdCsrY291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIGZvdW5kIGFuIGVxdWFscywgc28gc2F2ZSB0aGUgcGFyYW1ldGVyIGFzIGtleTogdmFsdWVcblx0XHRcdFx0a2V5ID0gY3VycmVudC5zbGljZSgwLCBNYXRoLm1heCgwLCBlcXVhbHMpKS50cmltKCk7XG5cdFx0XHRcdHZhbHVlID0gZmluYWwgPyBjdXJyZW50LnNsaWNlKGVxdWFscyArIDEsIC0yKS50cmltKCkgOiBjdXJyZW50LnNsaWNlKE1hdGgubWF4KDAsIGVxdWFscyArIDEpKS50cmltKCk7XG5cdFx0XHRcdHJlc3VsdC5wYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0ZXF1YWxzID0gLTE7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCB0ZXh0Lmxlbmd0aDsgKytpKSB7XG5cdFx0XHRjb25zdCB0ZXN0MyA9IHRleHQuc2xpY2UoaSwgaSArIDMpO1xuXHRcdFx0aWYgKHRlc3QzID09PSAne3t7JyB8fCAodGVzdDMgPT09ICd9fX0nICYmIGxldmVsLmF0KC0xKSA9PT0gMykpIHtcblx0XHRcdFx0Y3VycmVudCArPSB0ZXN0Mztcblx0XHRcdFx0aSArPSAyO1xuXHRcdFx0XHRpZiAodGVzdDMgPT09ICd7e3snKSB7XG5cdFx0XHRcdFx0bGV2ZWxbbGV2ZWwubGVuZ3RoXSA9IDM7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGV2ZWwucG9wKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0ZXN0MiA9IHRleHQuc2xpY2UoaSwgaSArIDIpO1xuXHRcdFx0Ly8gRW50ZXJpbmcgYSB0ZW1wbGF0ZSAob3IgbGluaylcblx0XHRcdGlmICh0ZXN0MiA9PT0gJ3t7JyB8fCB0ZXN0MiA9PT0gJ1tbJykge1xuXHRcdFx0XHRjdXJyZW50ICs9IHRlc3QyO1xuXHRcdFx0XHQrK2k7XG5cdFx0XHRcdGlmICh0ZXN0MiA9PT0gJ3t7Jykge1xuXHRcdFx0XHRcdGxldmVsW2xldmVsLmxlbmd0aF0gPSAyO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxldmVsW2xldmVsLmxlbmd0aF0gPSAnd2wnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRWl0aGVyIGxlYXZpbmcgYSBsaW5rIG9yIHRlbXBsYXRlL3BhcnNlciBmdW5jdGlvblxuXHRcdFx0aWYgKCh0ZXN0MiA9PT0gJ319JyAmJiBsZXZlbC5hdCgtMSkgPT09IDIpIHx8ICh0ZXN0MiA9PT0gJ11dJyAmJiBsZXZlbC5hdCgtMSkgPT09ICd3bCcpKSB7XG5cdFx0XHRcdGN1cnJlbnQgKz0gdGVzdDI7XG5cdFx0XHRcdCsraTtcblx0XHRcdFx0bGV2ZWwucG9wKCk7XG5cdFx0XHRcdC8vIEZpbmQgdGhlIGZpbmFsIHBhcmFtZXRlciBpZiB0aGlzIHJlYWxseSBpcyB0aGUgZW5kXG5cdFx0XHRcdGlmICh0ZXN0MiA9PT0gJ319JyAmJiBsZXZlbC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRmaW5kUGFyYW0odHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGV4dC5jaGFyQXQoaSkgPT09ICd8JyAmJiBsZXZlbC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gQW5vdGhlciBwaXBlIGZvdW5kLCB0b3BsZXZlbCwgc28gcGFyYW1ldGVyIGNvbWluZyB1cCFcblx0XHRcdFx0ZmluZFBhcmFtKCk7XG5cdFx0XHRcdGN1cnJlbnQgPSAnJztcblx0XHRcdH0gZWxzZSBpZiAoZXF1YWxzID09PSAtMSAmJiB0ZXh0LmNoYXJBdChpKSA9PT0gJz0nICYmIGxldmVsLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHQvLyBFcXVhbHMgZm91bmQsIHRvcGxldmVsXG5cdFx0XHRcdGVxdWFscyA9IGN1cnJlbnQubGVuZ3RoO1xuXHRcdFx0XHRjdXJyZW50ICs9IHRleHQuY2hhckF0KGkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSnVzdCBhZHZhbmNlIHRoZSBwb3NpdGlvblxuXHRcdFx0XHRjdXJyZW50ICs9IHRleHQuY2hhckF0KGkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXHQvKipcblx0ICogQWRqdXN0IGFuZCBtYW5pcHVsYXRlIHRoZSB3aWtpdGV4dCBvZiBhIHBhZ2UuXG5cdCAqXG5cdCAqIEBjbGFzc1xuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraXRleHRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBXaWtpdGV4dCB0byBiZSBtYW5pcHVsYXRlZC5cblx0ICovXG5cdE1vcmViaXRzLndpa2l0ZXh0LnBhZ2UgPSBmdW5jdGlvbiAodGV4dCkge1xuXHRcdHRoaXMudGV4dCA9IHRleHQ7XG5cdH07XG5cdE1vcmViaXRzLndpa2l0ZXh0LnBhZ2UucHJvdG90eXBlID0ge1xuXHRcdHRleHQ6ICcnLFxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgbGlua3MgdG8gYGxpbmtfdGFyZ2V0YCBmcm9tIHRoZSBwYWdlIHRleHQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGlua1RhcmdldFxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy53aWtpdGV4dC5wYWdlfVxuXHRcdCAqL1xuXHRcdHJlbW92ZUxpbmsobGlua1RhcmdldCkge1xuXHRcdFx0Y29uc3QgbXdUaXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KGxpbmtUYXJnZXQpO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlSUQgPSBtd1RpdGxlLmdldE5hbWVzcGFjZUlkKCk7XG5cdFx0XHRjb25zdCB0aXRsZSA9IG13VGl0bGUuZ2V0TWFpblRleHQoKTtcblx0XHRcdGxldCBsaW5rUmVnZXhTdHJpbmcgPSAnJztcblx0XHRcdGlmIChuYW1lc3BhY2VJRCAhPT0gMCkge1xuXHRcdFx0XHRsaW5rUmVnZXhTdHJpbmcgPSBgJHtNb3JlYml0cy5uYW1lc3BhY2VSZWdleChuYW1lc3BhY2VJRCl9OmA7XG5cdFx0XHR9XG5cdFx0XHRsaW5rUmVnZXhTdHJpbmcgKz0gTW9yZWJpdHMucGFnZU5hbWVSZWdleCh0aXRsZSk7XG5cdFx0XHQvLyBGb3IgbW9zdCBuYW1lc3BhY2VzLCB1bmxpbmsgYm90aCBbW1VzZXI6VGVzdF1dIGFuZCBbWzpVc2VyOlRlc3RdXVxuXHRcdFx0Ly8gRm9yIGZpbGVzIGFuZCBjYXRlZ29yaWVzLCBvbmx5IHVubGluayBbWzpDYXRlZ29yeTpUZXN0XV0uIERvIG5vdCB1bmxpbmsgW1tDYXRlZ29yeTpUZXN0XV1cblx0XHRcdGNvbnN0IGlzRmlsZU9yQ2F0ZWdvcnkgPSBbNiwgMTRdLmluY2x1ZGVzKG5hbWVzcGFjZUlEKTtcblx0XHRcdGNvbnN0IGNvbG9uID0gaXNGaWxlT3JDYXRlZ29yeSA/ICc6JyA6ICc6Pyc7XG5cdFx0XHRjb25zdCBzaW1wbGVMaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcW1xcXFxbJHtjb2xvbn0oJHtsaW5rUmVnZXhTdHJpbmd9KVxcXFxdXFxcXF1gLCAnZycpO1xuXHRcdFx0Y29uc3QgcGlwZWRMaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcW1xcXFxbJHtjb2xvbn0ke2xpbmtSZWdleFN0cmluZ31cXFxcfCguKz8pXFxcXF1cXFxcXWAsICdnJyk7XG5cdFx0XHR0aGlzLnRleHQgPSB0aGlzLnRleHQucmVwbGFjZShzaW1wbGVMaW5rUmVnZXgsICckMScpLnJlcGxhY2UocGlwZWRMaW5rUmVnZXgsICckMScpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBDb21tZW50cyBvdXQgaW1hZ2VzIGZyb20gcGFnZSB0ZXh0OyBpZiB1c2VkIGluIGEgZ2FsbGVyeSwgZGVsZXRlcyB0aGUgd2hvbGUgbGluZS5cblx0XHQgKiBJZiB1c2VkIGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgKG5vdCBuZWNlc3NhcmlseSB3aXRoIGBGaWxlOmAgcHJlZml4KSwgdGhlIHRlbXBsYXRlIHBhcmFtZXRlciBpcyBjb21tZW50ZWQgb3V0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGltYWdlIC0gSW1hZ2UgbmFtZSB3aXRob3V0IGBGaWxlOmAgcHJlZml4LlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIFJlYXNvbiB0byBiZSBpbmNsdWRlZCBpbiBjb21tZW50LCBhbG9uZ3NpZGUgdGhlIGNvbW1lbnRlZC1vdXQgaW1hZ2UuXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLndpa2l0ZXh0LnBhZ2V9XG5cdFx0ICovXG5cdFx0Y29tbWVudE91dEltYWdlKGltYWdlLCByZWFzb24pIHtcblx0XHRcdGNvbnN0IHVuYmluZGVyID0gbmV3IE1vcmViaXRzLnVuYmluZGVyKHRoaXMudGV4dCk7XG5cdFx0XHR1bmJpbmRlci51bmJpbmQoJzwhLS0nLCAnLS0+Jyk7XG5cdFx0XHRyZWFzb24gPSByZWFzb24gPyBgJHtyZWFzb259OiBgIDogJyc7XG5cdFx0XHRjb25zdCBpbWFnZVJlZ2V4U3RyaW5nID0gTW9yZWJpdHMucGFnZU5hbWVSZWdleChpbWFnZSk7XG5cdFx0XHQvLyBDaGVjayBmb3Igbm9ybWFsIGltYWdlIGxpbmtzLCBpLmUuIFtbRmlsZTpGb29iYXIucG5nfC4uLl1dXG5cdFx0XHQvLyBXaWxsIGVhdCB0aGUgd2hvbGUgbGlua1xuXHRcdFx0Y29uc3QgbGlua3NSZWdleCA9IG5ldyBSZWdFeHAoXG5cdFx0XHRcdGBcXFxcW1xcXFxbJHtNb3JlYml0cy5uYW1lc3BhY2VSZWdleCg2KX06XFxcXHMqJHtpbWFnZVJlZ2V4U3RyaW5nfVxcXFxzKltcXFxcfCg/OlxcXFxdXFxcXF0pXWBcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBhbGxMaW5rcyA9IE1vcmViaXRzLnN0cmluZy5zcGxpdFdlaWdodGVkQnlLZXlzKHVuYmluZGVyLmNvbnRlbnQsICdbWycsICddXScpO1xuXHRcdFx0Zm9yIChjb25zdCBhbGxMaW5rIG9mIGFsbExpbmtzKSB7XG5cdFx0XHRcdGlmIChsaW5rc1JlZ2V4LnRlc3QoYWxsTGluaykpIHtcblx0XHRcdFx0XHRjb25zdCByZXBsYWNlbWVudCA9IGA8IS0tICR7cmVhc29ufSR7YWxsTGlua30gLS0+YDtcblx0XHRcdFx0XHR1bmJpbmRlci5jb250ZW50ID0gdW5iaW5kZXIuY29udGVudC5yZXBsYWNlKGFsbExpbmssIHJlcGxhY2VtZW50KTtcblx0XHRcdFx0XHQvLyB1bmJpbmQgdGhlIG5ld2x5IGNyZWF0ZWQgY29tbWVudHNcblx0XHRcdFx0XHR1bmJpbmRlci51bmJpbmQoJzwhLS0nLCAnLS0+Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGZvciBnYWxsZXJ5IGltYWdlcywgaS5lLiBpbnN0YW5jZXMgdGhhdCBtdXN0IHN0YXJ0IG9uIGEgbmV3IGxpbmUsXG5cdFx0XHQvLyBldmVudHVhbGx5IHByZWNlZGVkIHdpdGggc29tZSBzcGFjZSwgYW5kIG11c3QgaW5jbHVkZSBGaWxlOiBwcmVmaXhcblx0XHRcdC8vIFdpbGwgZWF0IHRoZSB3aG9sZSBsaW5lLlxuXHRcdFx0Y29uc3QgZ2FsbGVyeUltYWdlUmVnZXggPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRgKF5cXFxccyoke01vcmViaXRzLm5hbWVzcGFjZVJlZ2V4KDYpfTpcXFxccyoke2ltYWdlUmVnZXhTdHJpbmd9XFxcXHMqKD86XFxcXHwuKj8kfCQpKWAsXG5cdFx0XHRcdCdtZydcblx0XHRcdCk7XG5cdFx0XHR1bmJpbmRlci5jb250ZW50ID0gdW5iaW5kZXIuY29udGVudC5yZXBsYWNlKGdhbGxlcnlJbWFnZVJlZ2V4LCBgPCEtLSAke3JlYXNvbn0kMSAtLT5gKTtcblx0XHRcdC8vIHVuYmluZCB0aGUgbmV3bHkgY3JlYXRlZCBjb21tZW50c1xuXHRcdFx0dW5iaW5kZXIudW5iaW5kKCc8IS0tJywgJy0tPicpO1xuXHRcdFx0Ly8gQ2hlY2sgZnJlZSBpbWFnZSB1c2FnZXMsIGZvciBleGFtcGxlIGFzIHRlbXBsYXRlIGFyZ3VtZW50cywgbWlnaHQgaGF2ZSB0aGUgRmlsZTogcHJlZml4IGV4Y2x1ZGVkLCBidXQgbXVzdCBiZSBwcmVjZWRlZCBieSBhbiB8XG5cdFx0XHQvLyBXaWxsIG9ubHkgZWF0IHRoZSBpbWFnZSBuYW1lIGFuZCB0aGUgcHJlY2VkaW5nIGJhciBhbmQgYW4gZXZlbnR1YWwgbmFtZWQgcGFyYW1ldGVyXG5cdFx0XHRjb25zdCBmcmVlSW1hZ2VSZWdleCA9IG5ldyBSZWdFeHAoXG5cdFx0XHRcdGAoXFxcXHxcXFxccyooPzpbXFxcXHdcXFxcc10rXFxcXD0pP1xcXFxzKig/OiR7TW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoNil9OlxcXFxzKik/JHtpbWFnZVJlZ2V4U3RyaW5nfSlgLFxuXHRcdFx0XHQnbWcnXG5cdFx0XHQpO1xuXHRcdFx0dW5iaW5kZXIuY29udGVudCA9IHVuYmluZGVyLmNvbnRlbnQucmVwbGFjZShmcmVlSW1hZ2VSZWdleCwgYDwhLS0gJHtyZWFzb259JDEgLS0+YCk7XG5cdFx0XHQvLyBSZWJpbmQgdGhlIGNvbnRlbnQgbm93LCB3ZSBhcmUgZG9uZSFcblx0XHRcdHRoaXMudGV4dCA9IHVuYmluZGVyLnJlYmluZCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBDb252ZXJ0cyB1c2VzIG9mIFtbRmlsZTpgaW1hZ2VgXV0gdG8gW1tGaWxlOmBpbWFnZWB8YGRhdGFgXV0uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW1hZ2UgLSBJbWFnZSBuYW1lIHdpdGhvdXQgRmlsZTogcHJlZml4LlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGRpc3BsYXkgb3B0aW9ucy5cblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMud2lraXRleHQucGFnZX1cblx0XHQgKi9cblx0XHRhZGRUb0ltYWdlQ29tbWVudChpbWFnZSwgZGF0YSkge1xuXHRcdFx0Y29uc3QgaW1hZ2VSZWdleFN0cmluZyA9IE1vcmViaXRzLnBhZ2VOYW1lUmVnZXgoaW1hZ2UpO1xuXHRcdFx0Y29uc3QgbGlua3NSZWdleCA9IG5ldyBSZWdFeHAoXG5cdFx0XHRcdGBcXFxcW1xcXFxbJHtNb3JlYml0cy5uYW1lc3BhY2VSZWdleCg2KX06XFxcXHMqJHtpbWFnZVJlZ2V4U3RyaW5nfVxcXFxzKltcXFxcfCg/OlxcXFxdXFxcXF0pXWBcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBhbGxMaW5rcyA9IE1vcmViaXRzLnN0cmluZy5zcGxpdFdlaWdodGVkQnlLZXlzKHRoaXMudGV4dCwgJ1tbJywgJ11dJyk7XG5cdFx0XHRmb3IgKGxldCByZXBsYWNlbWVudCBvZiBhbGxMaW5rcykge1xuXHRcdFx0XHRpZiAobGlua3NSZWdleC50ZXN0KHJlcGxhY2VtZW50KSkge1xuXHRcdFx0XHRcdC8vIGp1c3QgcHV0IGl0IGF0IHRoZSBlbmQ/XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5yZXBsYWNlKC9cXF1cXF0kLywgYHwke2RhdGF9XV1gKTtcblx0XHRcdFx0XHR0aGlzLnRleHQgPSB0aGlzLnRleHQucmVwbGFjZShyZXBsYWNlbWVudCwgcmVwbGFjZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBnYWxsZXJ5UmVnZXggPSBuZXcgUmVnRXhwKGBeKFxcXFxzKiR7aW1hZ2VSZWdleFN0cmluZ30uKj8pXFxcXHw/KC4qPykkYCwgJ21nJyk7XG5cdFx0XHRjb25zdCBuZXd0ZXh0ID0gYCQxfCQyICR7ZGF0YX1gO1xuXHRcdFx0dGhpcy50ZXh0ID0gdGhpcy50ZXh0LnJlcGxhY2UoZ2FsbGVyeVJlZ2V4LCBuZXd0ZXh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIGFsbCB0cmFuc2NsdXNpb25zIG9mIGEgdGVtcGxhdGUgZnJvbSBwYWdlIHRleHQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgLSBQYWdlIG5hbWUgd2hvc2UgdHJhbnNjbHVzaW9ucyBhcmUgdG8gYmUgcmVtb3ZlZCxcblx0XHQgKiBpbmNsdWRlIG5hbWVzcGFjZSBwcmVmaXggb25seSBpZiBub3QgaW4gdGVtcGxhdGUgbmFtZXNwYWNlLlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy53aWtpdGV4dC5wYWdlfVxuXHRcdCAqL1xuXHRcdHJlbW92ZVRlbXBsYXRlKHRlbXBsYXRlKSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVJlZ2V4U3RyaW5nID0gTW9yZWJpdHMucGFnZU5hbWVSZWdleCh0ZW1wbGF0ZSk7XG5cdFx0XHRjb25zdCBsaW5rc1JlZ2V4ID0gbmV3IFJlZ0V4cChcblx0XHRcdFx0YFxcXFx7XFxcXHsoPzoke01vcmViaXRzLm5hbWVzcGFjZVJlZ2V4KDEwKX06KT9cXFxccyoke3RlbXBsYXRlUmVnZXhTdHJpbmd9XFxcXHMqW1xcXFx8KD86XFxcXH1cXFxcfSldYFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFsbFRlbXBsYXRlcyA9IE1vcmViaXRzLnN0cmluZy5zcGxpdFdlaWdodGVkQnlLZXlzKHRoaXMudGV4dCwgJ3t7JywgJ319JywgWyd7e3snLCAnfX19J10pO1xuXHRcdFx0Zm9yIChjb25zdCBhbGxUZW1wbGF0ZSBvZiBhbGxUZW1wbGF0ZXMpIHtcblx0XHRcdFx0aWYgKGxpbmtzUmVnZXgudGVzdChhbGxUZW1wbGF0ZSkpIHtcblx0XHRcdFx0XHR0aGlzLnRleHQgPSB0aGlzLnRleHQucmVwbGFjZShhbGxUZW1wbGF0ZSwgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFNtYXJ0bHkgaW5zZXJ0IGEgdGFnIGF0b3AgcGFnZSB0ZXh0IGJ1dCBhZnRlciBzcGVjaWZpZWQgdGVtcGxhdGVzLFxuXHRcdCAqIHN1Y2ggYXMgaGF0bm90ZXMsIHNob3J0IGRlc2NyaXB0aW9uLCBvciBkZWxldGlvbiBhbmQgcHJvdGVjdGlvbiB0ZW1wbGF0ZXMuXG5cdFx0ICogTm90YWJseSwgZG9lcyAqbm90KiBpbnNlcnQgYSBuZXdsaW5lIGFmdGVyIHRoZSB0YWcuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHRhZyB0byBiZSBpbnNlcnRlZC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcmVnZXggLSBUZW1wbGF0ZXMgYWZ0ZXIgd2hpY2ggdG8gaW5zZXJ0IHRhZyxcblx0XHQgKiBnaXZlbiBhcyBlaXRoZXIgYXMgYSAocmVnZXgtdmFsaWQpIHN0cmluZyBvciBhbiBhcnJheSB0byBiZSBqb2luZWQgYnkgcGlwZXMuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFncz1pXSAtIFJlZ2V4IGZsYWdzIHRvIGFwcGx5LiAgYCcnYCB0byBwcm92aWRlIG5vIGZsYWdzO1xuXHRcdCAqIG90aGVyIGZhbHNleSB2YWx1ZXMgd2lsbCBkZWZhdWx0IHRvIGBpYC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3ByZVJlZ2V4XSAtIE9wdGlvbmFsIHJlZ2V4IHN0cmluZyBvciBhcnJheSB0byBtYXRjaFxuXHRcdCAqIGJlZm9yZSBhbnkgdGVtcGxhdGUgbWF0Y2hlcyAoaS5lLiBiZWZvcmUgYHt7YCksIHN1Y2ggYXMgaHRtbCBjb21tZW50cy5cblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMud2lraXRleHQucGFnZX1cblx0XHQgKi9cblx0XHRpbnNlcnRBZnRlclRlbXBsYXRlcyh0YWcsIHJlZ2V4LCBmbGFncywgcHJlUmVnZXgpIHtcblx0XHRcdGlmICh0YWcgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0YWcgcHJvdmlkZWQnKTtcblx0XHRcdH1cblx0XHRcdC8vIC5sZW5ndGggaXMgb25seSBhIHByb3BlcnR5IG9mIHN0cmluZ3MgYW5kIGFycmF5cyBzbyB3ZVxuXHRcdFx0Ly8gc2hvdWxkbid0IG5lZWQgdG8gY2hlY2sgdHlwZVxuXHRcdFx0aWYgKHJlZ2V4ID09PSB1bmRlZmluZWQgfHwgIXJlZ2V4Lmxlbmd0aCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZ2V4IHByb3ZpZGVkJyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVnZXgpKSB7XG5cdFx0XHRcdHJlZ2V4ID0gcmVnZXguam9pbignfCcpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBmbGFncyAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZmxhZ3MgPSAnaSc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXByZVJlZ2V4IHx8ICFwcmVSZWdleC5sZW5ndGgpIHtcblx0XHRcdFx0cHJlUmVnZXggPSAnJztcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwcmVSZWdleCkpIHtcblx0XHRcdFx0cHJlUmVnZXggPSBwcmVSZWdleC5qb2luKCd8Jyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBSZWdleCBpcyBleHRyYSBjb21wbGljYXRlZCB0byBhbGxvdyBmb3IgdGVtcGxhdGVzIHdpdGhcblx0XHRcdC8vIHBhcmFtZXRlcnMgYW5kIHRvIGhhbmRsZSB3aGl0ZXNwYWNlIHByb3Blcmx5XG5cdFx0XHR0aGlzLnRleHQgPSB0aGlzLnRleHQucmVwbGFjZShcblx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHQvLyBsZWFkaW5nIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBjYXB0dXJlIHRlbXBsYXRlKHMpXG5cdFx0XHRcdFx0Ly8gUHJlLXRlbXBsYXRlIHJlZ2V4LCBzdWNoIGFzIGxlYWRpbmcgaHRtbCBjb21tZW50c1xuXHRcdFx0XHRcdC8vIGJlZ2luIHRlbXBsYXRlIGZvcm1hdFxuXHRcdFx0XHRcdC8vIFRlbXBsYXRlIHJlZ2V4XG5cdFx0XHRcdFx0Ly8gZW5kIG1haW4gdGVtcGxhdGUgbmFtZSwgb3B0aW9uYWxseSB3aXRoIGEgbnVtYmVyXG5cdFx0XHRcdFx0Ly8gUHJvYmFibHkgcmVtb3ZlIHRoZSAoPzopIHRob3VnaFxuXHRcdFx0XHRcdC8vIHRlbXBsYXRlIHBhcmFtZXRlcnNcblx0XHRcdFx0XHQvLyBlbmQgdGVtcGxhdGUgZm9ybWF0XG5cdFx0XHRcdFx0Ly8gZW5kIGNhcHR1cmVcblx0XHRcdFx0XHQvLyB0cmFpbGluZyB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0YF5cXFxccyooPzooKD86XFxcXHMqJHtcblx0XHRcdFx0XHRcdC8vIFByZS10ZW1wbGF0ZSByZWdleCwgc3VjaCBhcyBsZWFkaW5nIGh0bWwgY29tbWVudHNcblx0XHRcdFx0XHRcdHByZVJlZ2V4XG5cdFx0XHRcdFx0fXxcXFxce1xcXFx7XFxcXHMqKD86JHtcblx0XHRcdFx0XHRcdC8vIFRlbXBsYXRlIHJlZ2V4XG5cdFx0XHRcdFx0XHRyZWdleFxuXHRcdFx0XHRcdH0pXFxcXGQqXFxcXHMqKFxcXFx8KD86XFxcXHtcXFxce1tee31dKlxcXFx9XFxcXH18W157fV0pKik/XFxcXH1cXFxcfSkrKD86XFxcXHMqXFxcXG4pPylcXFxccyopP2AsXG5cdFx0XHRcdFx0ZmxhZ3Ncblx0XHRcdFx0KSxcblx0XHRcdFx0YCQxJHt0YWd9YFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogR2V0IHRoZSBtYW5pcHVsYXRlZCB3aWtpdGV4dC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0Z2V0VGV4dCgpIHtcblx0XHRcdHJldHVybiB0aGlzLnRleHQ7XG5cdFx0fSxcblx0fTtcblx0LyogKioqKioqKioqKiogTW9yZWJpdHMudXNlcnNwYWNlTG9nZ2VyICoqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogSGFuZGxlcyBsb2dnaW5nIGFjdGlvbnMgdG8gYSB1c2Vyc3BhY2UgbG9nLlxuXHQgKiBVc2VkIGluIENTRCwgUFJPRCwgYW5kIFhGRC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzXG5cdCAqIEBjbGFzc1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gbG9nUGFnZU5hbWUgLSBUaXRsZSBvZiB0aGUgc3VicGFnZSBvZiB0aGUgY3VycmVudCB1c2VyJ3MgbG9nLlxuXHQgKi9cblx0TW9yZWJpdHMudXNlcnNwYWNlTG9nZ2VyID0gZnVuY3Rpb24gKGxvZ1BhZ2VOYW1lKSB7XG5cdFx0aWYgKCFsb2dQYWdlTmFtZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdubyBsb2cgcGFnZSBuYW1lIHNwZWNpZmllZCcpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBUaGUgdGV4dCB0byBwcmVmaXggdGhlIGxvZyB3aXRoIHVwb24gY3JlYXRpb24sIGRlZmF1bHRzIHRvIGVtcHR5LlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKi9cblx0XHR0aGlzLmluaXRpYWxUZXh0ID0gJyc7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGhlYWRlciBsZXZlbCB0byB1c2UgZm9yIG1vbnRocywgZGVmYXVsdHMgdG8gMyAoYD09PWApLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKi9cblx0XHR0aGlzLmhlYWRlckxldmVsID0gMztcblx0XHR0aGlzLmNoYW5nZVRhZ3MgPSAnJztcblx0XHQvKipcblx0XHQgKiBMb2cgdGhlIGVudHJ5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxvZ1RleHQgLSBEb2Vzbid0IGluY2x1ZGUgbGVhZGluZyBgI2Agb3IgYCpgLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdW1tYXJ5VGV4dCAtIEVkaXQgc3VtbWFyeS5cblx0XHQgKiBAcmV0dXJucyB7SlF1ZXJ5LlByb21pc2V9XG5cdFx0ICovXG5cdFx0dGhpcy5sb2cgPSBmdW5jdGlvbiAobG9nVGV4dCwgc3VtbWFyeVRleHQpIHtcblx0XHRcdGNvbnN0IGRlZiA9ICQuRGVmZXJyZWQoKTtcblx0XHRcdGlmICghbG9nVGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gZGVmLnJlamVjdCgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdGBVc2VyOiR7bXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpfS8ke2xvZ1BhZ2VOYW1lfWAsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG6aG555uu5Yqg5YWl5Yiw55So5oi356m66Ze05pel5b+XJywgJ+Wwh+mgheebruWKoOWFpeWIsOS9v+eUqOiAheepuumWk+aXpeiqjCcpXG5cdFx0XHQpOyAvLyBtYWtlIHRoaXMgJy4uLiB0byAnICsgbG9nUGFnZU5hbWUgP1xuXHRcdFx0cGFnZS5sb2FkKChwYWdlb2JqKSA9PiB7XG5cdFx0XHRcdC8vIGFkZCBibHVyYiBpZiBsb2cgcGFnZSBkb2Vzbid0IGV4aXN0IG9yIGlzIGJsYW5rXG5cdFx0XHRcdGxldCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpIHx8IHRoaXMuaW5pdGlhbFRleHQ7XG5cdFx0XHRcdC8vIGNyZWF0ZSBtb250aGx5IGhlYWRlciBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHlcblx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBNb3JlYml0cy5kYXRlKHBhZ2VvYmouZ2V0TG9hZFRpbWUoKSk7XG5cdFx0XHRcdGlmICghZGF0ZS5tb250aEhlYWRlclJlZ2V4KCkuZXhlYyh0ZXh0KSkge1xuXHRcdFx0XHRcdHRleHQgKz0gYFxcblxcbiR7ZGF0ZS5tb250aEhlYWRlcih0aGlzLmhlYWRlckxldmVsKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQoYCR7dGV4dH1cXG4ke2xvZ1RleHR9YCk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoc3VtbWFyeVRleHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3ModGhpcy5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdHBhZ2VvYmouc2F2ZShkZWYucmVzb2x2ZSwgZGVmLnJlamVjdCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBkZWY7XG5cdFx0fTtcblx0fTtcblx0LyogKioqKioqKioqKioqKioqKiBNb3JlYml0cy5zdGF0dXMgKioqKioqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogQ3JlYXRlIGFuZCBzaG93IHN0YXR1cyBtZXNzYWdlcyBvZiB2YXJ5aW5nIHVyZ2VuY3kuXG5cdCAqIHtAbGluayBNb3JlYml0cy5zdGF0dXMuaW5pdHxNb3JlYml0cy5zdGF0dXMuaW5pdCgpfSBtdXN0IGJlIGNhbGxlZCBiZWZvcmVcblx0ICogYW55IHN0YXR1cyBvYmplY3QgaXMgY3JlYXRlZCwgb3RoZXJ3aXNlIHRob3NlIHN0YXR1c2VzIHdvbid0IGJlIHZpc2libGUuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IGJlZm9yZSB0aGUgdGhlIGNvbG9uIGA6YC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXQgLSBUZXh0IGFmdGVyIHRoZSBjb2xvbiBgOmAuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZT1zdGF0dXNdIC0gRGV0ZXJtaW5lIHRoZSBmb250IGNvbG9yIG9mIHRoZSBzdGF0dXNcblx0ICogbGluZSwgYWxsb3dhYmxlIHZhbHVlcyBhcmU6IGBzdGF0dXNgIChibHVlKSwgYGluZm9gIChncmVlbiksIGB3YXJuYCAocmVkKSxcblx0ICogb3IgYGVycm9yYCAoYm9sZCByZWQpLlxuXHQgKi9cblx0TW9yZWJpdHMuc3RhdHVzID0gZnVuY3Rpb24gKHRleHQsIHN0YXQsIHR5cGUpIHtcblx0XHR0aGlzLnRleHRSYXcgPSB0ZXh0O1xuXHRcdHRoaXMudGV4dCA9IE1vcmViaXRzLmNyZWF0ZUh0bWwodGV4dCk7XG5cdFx0dGhpcy50eXBlID0gdHlwZSB8fCAnc3RhdHVzJztcblx0XHR0aGlzLmdlbmVyYXRlKCk7XG5cdFx0aWYgKHN0YXQpIHtcblx0XHRcdHRoaXMudXBkYXRlKHN0YXQsIHR5cGUpO1xuXHRcdH1cblx0fTtcblx0LyoqXG5cdCAqIFNwZWNpZnkgYW4gYXJlYSBmb3Igc3RhdHVzIG1lc3NhZ2UgZWxlbWVudHMgdG8gYmUgYWRkZWQgdG8uXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdCAtIFVzdWFsbHkgYSBkaXYgZWxlbWVudC5cblx0ICogQHRocm93cyBJZiBgcm9vdGAgaXMgbm90IGFuIGBIVE1MRWxlbWVudGAuXG5cdCAqL1xuXHRNb3JlYml0cy5zdGF0dXMuaW5pdCA9IChyb290KSA9PiB7XG5cdFx0aWYgKCEocm9vdCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIEVsZW1lbnQnKTtcblx0XHR9XG5cdFx0d2hpbGUgKHJvb3QuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRyb290LnJlbW92ZUNoaWxkKHJvb3QuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXHRcdE1vcmViaXRzLnN0YXR1cy5yb290ID0gcm9vdDtcblx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3JFdmVudCA9IG51bGw7XG5cdH07XG5cdE1vcmViaXRzLnN0YXR1cy5yb290ID0gbnVsbDtcblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZXJyb3IuXG5cdCAqIEB0aHJvd3MgV2hlbiBgaGFuZGxlcmAgaXMgbm90IGEgZnVuY3Rpb24uXG5cdCAqL1xuXHRNb3JlYml0cy5zdGF0dXMub25FcnJvciA9IChoYW5kbGVyKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3JFdmVudCA9IGhhbmRsZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ01vcmViaXRzLnN0YXR1cy5vbkVycm9yOiBoYW5kbGVyIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHR9O1xuXHRNb3JlYml0cy5zdGF0dXMucHJvdG90eXBlID0ge1xuXHRcdHN0YXQ6IG51bGwsXG5cdFx0c3RhdFJhdzogbnVsbCxcblx0XHR0ZXh0OiBudWxsLFxuXHRcdHRleHRSYXc6IG51bGwsXG5cdFx0dHlwZTogJ3N0YXR1cycsXG5cdFx0dGFyZ2V0OiBudWxsLFxuXHRcdG5vZGU6IG51bGwsXG5cdFx0bGlua2VkOiBmYWxzZSxcblx0XHQvKiogQWRkIHRoZSBzdGF0dXMgZWxlbWVudCBub2RlIHRvIHRoZSBET00uICovXG5cdFx0bGluaygpIHtcblx0XHRcdGlmICghdGhpcy5saW5rZWQgJiYgTW9yZWJpdHMuc3RhdHVzLnJvb3QpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKTtcblx0XHRcdFx0dGhpcy5saW5rZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqIFJlbW92ZSB0aGUgc3RhdHVzIGVsZW1lbnQgbm9kZSBmcm9tIHRoZSBET00uICovXG5cdFx0dW5saW5rKCkge1xuXHRcdFx0aWYgKHRoaXMubGlua2VkKSB7XG5cdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5yb290LnJlbW92ZUNoaWxkKHRoaXMubm9kZSk7XG5cdFx0XHRcdHRoaXMubGlua2VkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBVcGRhdGUgdGhlIHN0YXR1cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXMgLSBQYXJ0IG9mIHN0YXR1cyBtZXNzYWdlIGFmdGVyIGNvbG9uLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gJ3N0YXR1cycgKGJsdWUpLCAnaW5mbycgKGdyZWVuKSwgJ3dhcm4nXG5cdFx0ICogKHJlZCksIG9yICdlcnJvcicgKGJvbGQgcmVkKS5cblx0XHQgKi9cblx0XHR1cGRhdGUoc3RhdHVzLCB0eXBlKSB7XG5cdFx0XHR0aGlzLnN0YXRSYXcgPSBzdGF0dXM7XG5cdFx0XHR0aGlzLnN0YXQgPSBNb3JlYml0cy5jcmVhdGVIdG1sKHN0YXR1cyk7XG5cdFx0XHRpZiAodHlwZSkge1xuXHRcdFx0XHR0aGlzLnR5cGUgPSB0eXBlO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuXHRcdFx0XHRcdC8vIGhhY2sgdG8gZm9yY2UgdGhlIHBhZ2Ugbm90IHRvIHJlbG9hZCB3aGVuIGFuIGVycm9yIGlzIG91dHB1dCAtIHNlZSBhbHNvIE1vcmViaXRzLnN0YXR1cygpIGFib3ZlXG5cdFx0XHRcdFx0TW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0ID0gMTAwMDtcblx0XHRcdFx0XHQvLyBjYWxsIGVycm9yIGNhbGxiYWNrXG5cdFx0XHRcdFx0aWYgKE1vcmViaXRzLnN0YXR1cy5lcnJvckV2ZW50KSB7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3JFdmVudCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBhbHNvIGxvZyBlcnJvciBtZXNzYWdlcyBpbiB0aGUgYnJvd3NlciBjb25zb2xlXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihgW01vcmViaXRzXSAke3RoaXMudGV4dFJhd306ICR7dGhpcy5zdGF0UmF3fWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdH0sXG5cdFx0LyoqIFByb2R1Y2UgdGhlIGh0bWwgZm9yIGZpcnN0IHBhcnQgb2YgdGhlIHN0YXR1cyBtZXNzYWdlLiAqL1xuXHRcdGdlbmVyYXRlKCkge1xuXHRcdFx0dGhpcy5ub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHR0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKS5hcHBlbmRDaGlsZCh0aGlzLnRleHQpO1xuXHRcdFx0dGhpcy5ub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJzogJykpO1xuXHRcdFx0dGhpcy50YXJnZXQgPSB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKTtcblx0XHRcdHRoaXMudGFyZ2V0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7IC8vIGR1bW15IG5vZGVcblx0XHR9LFxuXG5cdFx0LyoqIENvbXBsZXRlIHRoZSBodG1sLCBmb3IgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBzdGF0dXMgbWVzc2FnZS4gKi9cblx0XHRyZW5kZXIoKSB7XG5cdFx0XHR0aGlzLm5vZGUuY2xhc3NOYW1lID0gYG1vcmViaXRzX3N0YXR1c18ke3RoaXMudHlwZX1gO1xuXHRcdFx0d2hpbGUgKHRoaXMudGFyZ2V0Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHR0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLnRhcmdldC5maXJzdENoaWxkKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudGFyZ2V0LmFwcGVuZENoaWxkKHRoaXMuc3RhdCk7XG5cdFx0XHR0aGlzLmxpbmsoKTtcblx0XHR9LFxuXHRcdHN0YXR1cyhzdGF0dXMpIHtcblx0XHRcdHRoaXMudXBkYXRlKHN0YXR1cywgJ3N0YXR1cycpO1xuXHRcdH0sXG5cdFx0aW5mbyhzdGF0dXMpIHtcblx0XHRcdHRoaXMudXBkYXRlKHN0YXR1cywgJ2luZm8nKTtcblx0XHR9LFxuXHRcdHdhcm4oc3RhdHVzKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZShzdGF0dXMsICd3YXJuJyk7XG5cdFx0fSxcblx0XHRlcnJvcihzdGF0dXMpIHtcblx0XHRcdHRoaXMudXBkYXRlKHN0YXR1cywgJ2Vycm9yJyk7XG5cdFx0fSxcblx0fTtcblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBCZWZvcmUgY29sb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1cyAtIEFmdGVyIGNvbG9uXG5cdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zdGF0dXN9IC0gYHN0YXR1c2AtdHlwZSAoYmx1ZSlcblx0ICovXG5cdE1vcmViaXRzLnN0YXR1cy5zdGF0dXMgPSAodGV4dCwgc3RhdHVzKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb3JlYml0cy5zdGF0dXModGV4dCwgc3RhdHVzKTtcblx0fTtcblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBCZWZvcmUgY29sb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1cyAtIEFmdGVyIGNvbG9uXG5cdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zdGF0dXN9IC0gYGluZm9gLXR5cGUgKGdyZWVuKVxuXHQgKi9cblx0TW9yZWJpdHMuc3RhdHVzLmluZm8gPSAodGV4dCwgc3RhdHVzKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb3JlYml0cy5zdGF0dXModGV4dCwgc3RhdHVzLCAnaW5mbycpO1xuXHR9O1xuXHQvKipcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnN0YXR1c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEJlZm9yZSBjb2xvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzIC0gQWZ0ZXIgY29sb25cblx0ICogQHJldHVybnMge01vcmViaXRzLnN0YXR1c30gLSBgd2FybmAtdHlwZSAocmVkKVxuXHQgKi9cblx0TW9yZWJpdHMuc3RhdHVzLndhcm4gPSAodGV4dCwgc3RhdHVzKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb3JlYml0cy5zdGF0dXModGV4dCwgc3RhdHVzLCAnd2FybicpO1xuXHR9O1xuXHQvKipcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnN0YXR1c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEJlZm9yZSBjb2xvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzIC0gQWZ0ZXIgY29sb25cblx0ICogQHJldHVybnMge01vcmViaXRzLnN0YXR1c30gLSBgZXJyb3JgLXR5cGUgKGJvbGQgcmVkKVxuXHQgKi9cblx0TW9yZWJpdHMuc3RhdHVzLmVycm9yID0gKHRleHQsIHN0YXR1cykgPT4ge1xuXHRcdHJldHVybiBuZXcgTW9yZWJpdHMuc3RhdHVzKHRleHQsIHN0YXR1cywgJ2Vycm9yJyk7XG5cdH07XG5cdC8qKlxuXHQgKiBGb3IgdGhlIGFjdGlvbiBjb21wbGV0ZSBtZXNzYWdlIGF0IHRoZSBlbmQsIGNyZWF0ZSBhIHN0YXR1cyBsaW5lIHdpdGhvdXRcblx0ICogYSBjb2xvbiBzZXBhcmF0b3IuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICovXG5cdE1vcmViaXRzLnN0YXR1cy5hY3Rpb25Db21wbGV0ZWQgPSAodGV4dCkgPT4ge1xuXHRcdGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2InKSkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuXHRcdG5vZGUuY2xhc3NOYW1lID0gJ21vcmViaXRzX3N0YXR1c19pbmZvIG1vcmViaXRzX2FjdGlvbl9jb21wbGV0ZSc7XG5cdFx0aWYgKE1vcmViaXRzLnN0YXR1cy5yb290KSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMucm9vdC5hcHBlbmRDaGlsZChub2RlKTtcblx0XHR9XG5cdH07XG5cdC8qKlxuXHQgKiBEaXNwbGF5IHRoZSB1c2VyJ3MgcmF0aW9uYWxlLCBjb21tZW50cywgZXRjLiBCYWNrIHRvIHRoZW0gYWZ0ZXIgYSBmYWlsdXJlLFxuXHQgKiBzbyB0aGF0IHRoZXkgbWF5IHJlLXVzZSBpdC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnN0YXR1c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29tbWVudHNcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICovXG5cdE1vcmViaXRzLnN0YXR1cy5wcmludFVzZXJUZXh0ID0gKGNvbW1lbnRzLCBtZXNzYWdlKSA9PiB7XG5cdFx0Y29uc3QgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcblx0XHRwLmlubmVySFRNTCA9IG1lc3NhZ2U7XG5cdFx0Y29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0ZGl2LmNsYXNzTmFtZSA9ICdtb3JlYml0cy11c2VydGV4dCc7XG5cdFx0ZGl2LnN0eWxlLm1hcmdpblRvcCA9ICcwJztcblx0XHRkaXYuc3R5bGUud2hpdGVTcGFjZSA9ICdwcmUtd3JhcCc7XG5cdFx0ZGl2LnRleHRDb250ZW50ID0gY29tbWVudHM7XG5cdFx0cC5hcHBlbmRDaGlsZChkaXYpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5yb290LmFwcGVuZENoaWxkKHApO1xuXHR9O1xuXHQvKipcblx0ICogU2ltcGxlIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBzaW1wbGUgbm9kZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUeXBlIG9mIEhUTUwgZWxlbWVudC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBUZXh0IGNvbnRlbnQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbY29sb3JdIC0gRm9udCBjb2xvci5cblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMuaHRtbE5vZGUgPSAodHlwZSwgY29udGVudCwgY29sb3IpID0+IHtcblx0XHRjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcblx0XHRpZiAoY29sb3IpIHtcblx0XHRcdG5vZGUuc3R5bGUuY29sb3IgPSBjb2xvcjtcblx0XHR9XG5cdFx0bm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7XG5cdFx0cmV0dXJuIG5vZGU7XG5cdH07XG5cdC8qKlxuXHQgKiBBZGQgc2hpZnQtY2xpY2sgc3VwcG9ydCBmb3IgY2hlY2tib3hlcy4gVGhlIHdpa2liaXRzIHZlcnNpb25cblx0ICogKGB3aW5kb3cuYWRkQ2hlY2tib3hDbGlja0hhbmRsZXJzYCkgaGFzIHNvbWUgcmVzdHJpY3Rpb25zLCBhbmQgZG9lc24ndCB3b3JrXG5cdCAqIHdpdGggY2hlY2tib3hlcyBpbnNpZGUgYSBzb3J0YWJsZSB0YWJsZSwgc28gbGV0J3MgYnVpbGQgb3VyIG93bi5cblx0ICpcblx0ICogQHBhcmFtIGpRdWVyeVNlbGVjdG9yXG5cdCAqIEBwYXJhbSBqUXVlcnlDb250ZXh0XG5cdCAqL1xuXHRNb3JlYml0cy5jaGVja2JveFNoaWZ0Q2xpY2tTdXBwb3J0ID0gKGpRdWVyeVNlbGVjdG9yLCBqUXVlcnlDb250ZXh0KSA9PiB7XG5cdFx0bGV0IGxhc3RDaGVja2JveCA9IG51bGw7XG5cdFx0Y29uc3QgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gY2xpY2tIYW5kbGVyKGV2ZW50KSB7XG5cdFx0XHRjb25zdCB0aGlzQ2IgPSB0aGlzO1xuXHRcdFx0aWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGxhc3RDaGVja2JveCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBjYnMgPSAkKGpRdWVyeVNlbGVjdG9yLCBqUXVlcnlDb250ZXh0KTsgLy8gY2FuJ3QgY2FjaGUgdGhlbSwgb2J2aW91c2x5LCBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgcmVzb3J0aW5nXG5cdFx0XHRcdGxldCBpbmRleCA9IC0xO1xuXHRcdFx0XHRsZXQgbGFzdEluZGV4ID0gLTE7XG5cdFx0XHRcdGxldCBpO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgY2JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGNic1tpXSA9PT0gdGhpc0NiKSB7XG5cdFx0XHRcdFx0XHRpbmRleCA9IGk7XG5cdFx0XHRcdFx0XHRpZiAobGFzdEluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChjYnNbaV0gPT09IGxhc3RDaGVja2JveCkge1xuXHRcdFx0XHRcdFx0bGFzdEluZGV4ID0gaTtcblx0XHRcdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5kZXggPiAtMSAmJiBsYXN0SW5kZXggPiAtMSkge1xuXHRcdFx0XHRcdC8vIGluc3BpcmVkIGJ5IHdpa2liaXRzXG5cdFx0XHRcdFx0Y29uc3QgZW5kU3RhdGUgPSB0aGlzQ2IuY2hlY2tlZDtcblx0XHRcdFx0XHRsZXQgc3RhcnQ7XG5cdFx0XHRcdFx0bGV0IGZpbmlzaDtcblx0XHRcdFx0XHRpZiAoaW5kZXggPCBsYXN0SW5kZXgpIHtcblx0XHRcdFx0XHRcdHN0YXJ0ID0gaW5kZXggKyAxO1xuXHRcdFx0XHRcdFx0ZmluaXNoID0gbGFzdEluZGV4O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdGFydCA9IGxhc3RJbmRleDtcblx0XHRcdFx0XHRcdGZpbmlzaCA9IGluZGV4IC0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yIChpID0gc3RhcnQ7IGkgPD0gZmluaXNoOyBpKyspIHtcblx0XHRcdFx0XHRcdGlmIChjYnNbaV0uY2hlY2tlZCAhPT0gZW5kU3RhdGUpIHtcblx0XHRcdFx0XHRcdFx0Y2JzW2ldLmNsaWNrKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsYXN0Q2hlY2tib3ggPSB0aGlzQ2I7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdCQoalF1ZXJ5U2VsZWN0b3IsIGpRdWVyeUNvbnRleHQpLm9uKCdjbGljaycsIGNsaWNrSGFuZGxlcik7XG5cdH07XG5cdC8qICoqKioqKioqKioqKioqKiogTW9yZWJpdHMuYmF0Y2hPcGVyYXRpb24gKioqKioqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogSXRlcmF0ZXMgb3ZlciBhIGdyb3VwIG9mIHBhZ2VzIChvciBhcmJpdHJhcnkgb2JqZWN0cykgYW5kIGV4ZWN1dGVzIGEgd29ya2VyIGZ1bmN0aW9uXG5cdCAqIGZvciBlYWNoLlxuXHQgKlxuXHQgKiBgc2V0UGFnZUxpc3QocGFnZUxpc3QpYDogU2V0cyB0aGUgbGlzdCBvZiBwYWdlcyB0byB3b3JrIG9uLiBJdCBzaG91bGQgYmUgYW5cblx0ICogYXJyYXkgb2YgcGFnZSBuYW1lcyBzdHJpbmdzLlxuXHQgKlxuXHQgKiBgc2V0T3B0aW9uKG9wdGlvbk5hbWUsIG9wdGlvblZhbHVlKWA6IFNldHMgYSBrbm93biBvcHRpb246XG5cdCAqIC0gYGNodW5rU2l6ZWAgKGludGVnZXIpOiBUaGUgc2l6ZSBvZiBjaHVua3MgdG8gYnJlYWsgdGhlIGFycmF5IGludG8gKGRlZmF1bHRcblx0ICogNTApLiBTZXR0aW5nIHRoaXMgdG8gYSBzbWFsbCB2YWx1ZSAoPDUpIGNhbiBjYXVzZSBwcm9ibGVtcy5cblx0ICogLSBgcHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXNgIChib29sZWFuKTogS2VlcCBlYWNoIHBhZ2UncyBzdGF0dXMgZWxlbWVudFxuXHQgKiB2aXNpYmxlIHdoZW4gd29ya2VyIGlzIGNvbXBsZXRlPyBTZWUgbm90ZSBiZWxvdy5cblx0ICpcblx0ICogYHJ1bih3b3JrZXIsIHBvc3RGaW5pc2gpYDogUnVucyB0aGUgY2FsbGJhY2sgYHdvcmtlcmAgZm9yIGVhY2ggcGFnZSBpbiB0aGVcblx0ICogbGlzdC4gIFRoZSBjYWxsYmFjayBtdXN0IGNhbGwgYHdvcmtlclN1Y2Nlc3NgIHdoZW4gc3VjY2VlZGluZywgb3Jcblx0ICogYHdvcmtlckZhaWx1cmVgIHdoZW4gZmFpbGluZy4gIElmIHVzaW5nIHtAbGluayBNb3JlYml0cy53aWtpLmFwaX0gb3Jcblx0ICoge0BsaW5rIE1vcmViaXRzLndpa2kucGFnZX0sIHRoaXMgaXMgZWFzaWx5IGRvbmUgYnkgcGFzc2luZyB0aGVzZSB0d29cblx0ICogZnVuY3Rpb25zIGFzIHBhcmFtZXRlcnMgdG8gdGhlIG1ldGhvZHMgb24gdGhvc2Ugb2JqZWN0czogZm9yIGluc3RhbmNlLFxuXHQgKiBgcGFnZS5zYXZlKGJhdGNoT3Aud29ya2VyU3VjY2VzcywgYmF0Y2hPcC53b3JrZXJGYWlsdXJlKWAuICBNYWtlIHN1cmUgdGhlXG5cdCAqIG1ldGhvZHMgYXJlIGNhbGxlZCBkaXJlY3RseSBpZiBzcGVjaWFsIHN1Y2Nlc3MvZmFpbHVyZSBjYXNlcyBhcmlzZS4gIElmIHlvdVxuXHQgKiBvbWl0IHRvIGNhbGwgdGhlc2UgbWV0aG9kcywgdGhlIGJhdGNoIG9wZXJhdGlvbiB3aWxsIHN0YWxsIGFmdGVyIHRoZSBmaXJzdFxuXHQgKiBjaHVuayEgIEFsc28gZW5zdXJlIHRoYXQgZWl0aGVyIHdvcmtlclN1Y2Nlc3Mgb3Igd29ya2VyRmFpbHVyZSBpcyBjYWxsZWQgbm9cblx0ICogbW9yZSB0aGFuIG9uY2UuICBUaGUgc2Vjb25kIGNhbGxiYWNrIGBwb3N0RmluaXNoYCBpcyBleGVjdXRlZCB3aGVuIHRoZVxuXHQgKiBlbnRpcmUgYmF0Y2ggaGFzIGJlZW4gcHJvY2Vzc2VkLlxuXHQgKlxuXHQgKiBJZiB1c2luZyBgcHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXNgLCB5b3Ugc2hvdWxkIHRyeSB0byBlbnN1cmUgdGhhdCB0aGVcblx0ICogYHdvcmtlclN1Y2Nlc3NgIGNhbGxiYWNrIGhhcyBhY2Nlc3MgdG8gdGhlIHBhZ2UgdGl0bGUuICBUaGlzIGlzIG5vIHByb2JsZW0gZm9yXG5cdCAqIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2V9IG9iamVjdHMuICBCdXQgd2hlbiB1c2luZyB0aGUgQVBJLCBwbGVhc2Ugc2V0IHRoZVxuXHQgKiB8cGFnZU5hbWV8IHByb3BlcnR5IG9uIHRoZSB7QGxpbmsgTW9yZWJpdHMud2lraS5hcGl9IG9iamVjdC5cblx0ICpcblx0ICogVGhlcmUgYXJlIHNhbXBsZSBiYXRjaE9wZXJhdGlvbiBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgTW9yZWJpdHMud2lraS5wYWdlIGluXG5cdCAqIHR3aW5rbGViYXRjaGRlbGV0ZS5qcywgdHdpbmtsZWJhdGNodW5kZWxldGUuanMsIGFuZCB0d2lua2xlYmF0Y2hwcm90ZWN0LmpzLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICogQGNsYXNzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbY3VycmVudEFjdGlvbl1cblx0ICovXG5cdE1vcmViaXRzLmJhdGNoT3BlcmF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnRBY3Rpb24pIHtcblx0XHRjb25zdCBjdHggPSB7XG5cdFx0XHQvLyBiYWNraW5nIGZpZWxkcyBmb3IgcHVibGljIHByb3BlcnRpZXNcblx0XHRcdHBhZ2VMaXN0OiBudWxsLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRjaHVua1NpemU6IDUwLFxuXHRcdFx0XHRwcmVzZXJ2ZUluZGl2aWR1YWxTdGF0dXNMaW5lczogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdFx0Ly8gaW50ZXJuYWwgY291bnRlcnMsIGV0Yy5cblx0XHRcdHN0YXR1c0VsZW1lbnQ6IG5ldyBNb3JlYml0cy5zdGF0dXMoY3VycmVudEFjdGlvbiB8fCB3aW5kb3cud2dVTFMoJ+aJp+ihjOaJuemHj+aTjeS9nCcsICfln7fooYzmibnmrKHmk43kvZwnKSksXG5cdFx0XHR3b3JrZXI6IG51bGwsXG5cdFx0XHQvLyBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIGZvciBlYWNoIGl0ZW0gaW4gcGFnZUxpc3Rcblx0XHRcdHBvc3RGaW5pc2g6IG51bGwsXG5cdFx0XHQvLyBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIHdoZW4gdGhlIHdob2xlIGJhdGNoIGhhcyBiZWVuIHByb2Nlc3NlZFxuXHRcdFx0Y291bnRTdGFydGVkOiAwLFxuXHRcdFx0Y291bnRGaW5pc2hlZDogMCxcblx0XHRcdGNvdW50RmluaXNoZWRTdWNjZXNzOiAwLFxuXHRcdFx0Y3VycmVudENodW5rSW5kZXg6IC0xLFxuXHRcdFx0cGFnZUNodW5rczogW10sXG5cdFx0XHRydW5uaW5nOiBmYWxzZSxcblx0XHR9O1xuXHRcdC8vIHNob3VsZG4ndCBiZSBuZWVkZWQgYnkgZXh0ZXJuYWwgdXNlcnMsIGJ1dCBwcm92aWRlZCBhbnl3YXkgZm9yIG1heGltdW0gZmxleGliaWxpdHlcblx0XHR0aGlzLmdldFN0YXR1c0VsZW1lbnQgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnN0YXR1c0VsZW1lbnQ7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBsaXN0IG9mIHBhZ2VzIHRvIHdvcmsgb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBwYWdlTGlzdCAtIEFycmF5IG9mIG9iamVjdHMgb3ZlciB3aGljaCB5b3Ugd2lzaCB0byBleGVjdXRlIHRoZSB3b3JrZXIgZnVuY3Rpb25cblx0XHQgKiBUaGlzIGlzIHVzdWFsbHkgdGhlIGxpc3Qgb2YgcGFnZSBuYW1lcyAoc3RyaW5ncykuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRQYWdlTGlzdCA9IChwYWdlTGlzdCkgPT4ge1xuXHRcdFx0Y3R4LnBhZ2VMaXN0ID0gcGFnZUxpc3Q7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBTZXRzIGEga25vd24gb3B0aW9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBvcHRpb246XG5cdFx0ICogLSBjaHVua1NpemUgKGludGVnZXIpOiBUaGUgc2l6ZSBvZiBjaHVua3MgdG8gYnJlYWsgdGhlIGFycmF5IGludG9cblx0XHQgKiAoZGVmYXVsdCA1MCkuIFNldHRpbmcgdGhpcyB0byBhIHNtYWxsIHZhbHVlICg8NSkgY2FuIGNhdXNlIHByb2JsZW1zLlxuXHRcdCAqIC0gcHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMgKGJvb2xlYW4pOiBLZWVwIGVhY2ggcGFnZSdzIHN0YXR1c1xuXHRcdCAqIGVsZW1lbnQgdmlzaWJsZSB3aGVuIHdvcmtlciBpcyBjb21wbGV0ZT9cblx0XHQgKiBAcGFyYW0ge251bWJlcnxib29sZWFufSBvcHRpb25WYWx1ZSAtIFZhbHVlIHRvIHdoaWNoIHRoZSBvcHRpb24gaXNcblx0XHQgKiB0byBiZSBzZXQuIFNob3VsZCBiZSBhbiBpbnRlZ2VyIGZvciBjaHVua1NpemUgYW5kIGEgYm9vbGVhbiBmb3Jcblx0XHQgKiBwcmVzZXJ2ZUluZGl2aWR1YWxTdGF0dXNMaW5lcy5cblx0XHQgKi9cblx0XHR0aGlzLnNldE9wdGlvbiA9IChvcHRpb25OYW1lLCBvcHRpb25WYWx1ZSkgPT4ge1xuXHRcdFx0Y3R4Lm9wdGlvbnNbb3B0aW9uTmFtZV0gPSBvcHRpb25WYWx1ZTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIFJ1bnMgdGhlIGZpcnN0IGNhbGxiYWNrIGZvciBlYWNoIHBhZ2UgaW4gdGhlIGxpc3QuXG5cdFx0ICogVGhlIGNhbGxiYWNrIG11c3QgY2FsbCB3b3JrZXJTdWNjZXNzIHdoZW4gc3VjY2VlZGluZywgb3Igd29ya2VyRmFpbHVyZSB3aGVuIGZhaWxpbmcuXG5cdFx0ICogUnVucyB0aGUgb3B0aW9uYWwgc2Vjb25kIGNhbGxiYWNrIHdoZW4gdGhlIHdob2xlIGJhdGNoIGhhcyBiZWVuIHByb2Nlc3NlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IHdvcmtlclxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtwb3N0RmluaXNoXVxuXHRcdCAqL1xuXHRcdHRoaXMucnVuID0gKHdvcmtlciwgcG9zdEZpbmlzaCkgPT4ge1xuXHRcdFx0aWYgKGN0eC5ydW5uaW5nKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5om56YeP5pON5L2c5bey5Zyo6L+Q6KGMJywgJ+aJueasoeaTjeS9nOW3suWcqOWft+ihjCcpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y3R4LnJ1bm5pbmcgPSB0cnVlO1xuXHRcdFx0Y3R4LndvcmtlciA9IHdvcmtlcjtcblx0XHRcdGN0eC5wb3N0RmluaXNoID0gcG9zdEZpbmlzaDtcblx0XHRcdGN0eC5jb3VudFN0YXJ0ZWQgPSAwO1xuXHRcdFx0Y3R4LmNvdW50RmluaXNoZWQgPSAwO1xuXHRcdFx0Y3R4LmNvdW50RmluaXNoZWRTdWNjZXNzID0gMDtcblx0XHRcdGN0eC5jdXJyZW50Q2h1bmtJbmRleCA9IC0xO1xuXHRcdFx0Y3R4LnBhZ2VDaHVua3MgPSBbXTtcblx0XHRcdGNvbnN0IHRvdGFsID0gY3R4LnBhZ2VMaXN0Lmxlbmd0aDtcblx0XHRcdGlmICghdG90YWwpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyh3aW5kb3cud2dVTFMoJ+ayoeacieaMh+WumumhtemdoicsICfmspLmnInmjIflrprpoIHpnaInKSk7XG5cdFx0XHRcdGN0eC5ydW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdGlmIChjdHgucG9zdEZpbmlzaCkge1xuXHRcdFx0XHRcdGN0eC5wb3N0RmluaXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2h1bmsgcGFnZSBsaXN0IGludG8gbW9yZSBtYW5hZ2VhYmxlIHVuaXRzXG5cdFx0XHRjdHgucGFnZUNodW5rcyA9IE1vcmViaXRzLmFycmF5LmNodW5rKGN0eC5wYWdlTGlzdCwgY3R4Lm9wdGlvbnMuY2h1bmtTaXplKTtcblx0XHRcdC8vIHN0YXJ0IHRoZSBwcm9jZXNzXG5cdFx0XHRNb3JlYml0cy53aWtpLmFkZENoZWNrcG9pbnQoKTtcblx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LnN0YXR1cygnMCUnKTtcblx0XHRcdGZuU3RhcnROZXdDaHVuaygpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogVG8gYmUgY2FsbGVkIGJ5IHdvcmtlciBiZWZvcmUgaXQgdGVybWluYXRlcyBzdWNjZXNzZnVsbHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyhNb3JlYml0cy53aWtpLnBhZ2V8TW9yZWJpdHMud2lraS5hcGl8c3RyaW5nKX0gYXJnIC1cblx0XHQgKiBUaGlzIHNob3VsZCBiZSB0aGUgYE1vcmViaXRzLndpa2kucGFnZWAgb3IgYE1vcmViaXRzLndpa2kuYXBpYCBvYmplY3QgdXNlZCBieSB3b3JrZXJcblx0XHQgKiAoZm9yIHRoZSBhZGp1c3RtZW50IG9mIHN0YXR1cyBsaW5lcyBlbWl0dGVkIGJ5IHRoZW0pLlxuXHRcdCAqIElmIG5vIE1vcmViaXRzLndpa2kuKiBvYmplY3QgaXMgdXNlZCAoZS5nLiB5b3UncmUgdXNpbmcgYG13LkFwaSgpYCBvciBzb21ldGhpbmcgZWxzZSksIGFuZFxuXHRcdCAqIGBwcmVzZXJ2ZUluZGl2aWR1YWxTdGF0dXNMaW5lc2Agb3B0aW9uIGlzIG9uLCBnaXZlIHRoZSBwYWdlIG5hbWUgKHN0cmluZykgYXMgYXJndW1lbnQuXG5cdFx0ICovXG5cdFx0dGhpcy53b3JrZXJTdWNjZXNzID0gKGFyZykgPT4ge1xuXHRcdFx0aWYgKGFyZyBpbnN0YW5jZW9mIE1vcmViaXRzLndpa2kuYXBpIHx8IGFyZyBpbnN0YW5jZW9mIE1vcmViaXRzLndpa2kucGFnZSkge1xuXHRcdFx0XHQvLyB1cGRhdGUgb3IgcmVtb3ZlIHN0YXR1cyBsaW5lXG5cdFx0XHRcdGNvbnN0IHN0YXRlbGVtID0gYXJnLmdldFN0YXR1c0VsZW1lbnQoKTtcblx0XHRcdFx0aWYgKGN0eC5vcHRpb25zLnByZXNlcnZlSW5kaXZpZHVhbFN0YXR1c0xpbmVzKSB7XG5cdFx0XHRcdFx0aWYgKGFyZy5nZXRQYWdlTmFtZSB8fCBhcmcucGFnZU5hbWUgfHwgKGFyZy5xdWVyeSAmJiBhcmcucXVlcnkudGl0bGUpKSB7XG5cdFx0XHRcdFx0XHQvLyB3ZSBrbm93IHRoZSBwYWdlIHRpdGxlIC0gZGlzcGxheSBhIHJlbGV2YW50IG1lc3NhZ2Vcblx0XHRcdFx0XHRcdGNvbnN0IHBhZ2VOYW1lID0gYXJnLmdldFBhZ2VOYW1lID8gYXJnLmdldFBhZ2VOYW1lKCkgOiBhcmcucGFnZU5hbWUgfHwgYXJnLnF1ZXJ5LnRpdGxlO1xuXHRcdFx0XHRcdFx0c3RhdGVsZW0uaW5mbyhg5a6M5oiQ77yIW1ske3BhZ2VOYW1lfV1d77yJYCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHdlIGRvbid0IGtub3cgdGhlIHBhZ2UgdGl0bGUgLSBqdXN0IGRpc3BsYXkgYSBnZW5lcmljIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdHN0YXRlbGVtLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZW1vdmUgdGhlIHN0YXR1cyBsaW5lIGF1dG9tYXRpY2FsbHkgcHJvZHVjZWQgYnkgTW9yZWJpdHMud2lraS4qXG5cdFx0XHRcdFx0c3RhdGVsZW0udW5saW5rKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgJiYgY3R4Lm9wdGlvbnMucHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMpIHtcblx0XHRcdFx0bmV3IE1vcmViaXRzLnN0YXR1cyhhcmcsIGDlrozmiJDvvIhbWyR7YXJnfV1d77yJYCk7XG5cdFx0XHR9XG5cdFx0XHRjdHguY291bnRGaW5pc2hlZFN1Y2Nlc3MrKztcblx0XHRcdGZuRG9uZU9uZSgpO1xuXHRcdH07XG5cdFx0dGhpcy53b3JrZXJGYWlsdXJlID0gKCkgPT4ge1xuXHRcdFx0Zm5Eb25lT25lKCk7XG5cdFx0fTtcblx0XHQvLyBwcml2YXRlIGZ1bmN0aW9uc1xuXHRcdGNvbnN0IHRoaXNQcm94eSA9IHRoaXM7XG5cdFx0Y29uc3QgZm5TdGFydE5ld0NodW5rID0gKCkgPT4ge1xuXHRcdFx0Y29uc3QgY2h1bmsgPSBjdHgucGFnZUNodW5rc1srK2N0eC5jdXJyZW50Q2h1bmtJbmRleF07XG5cdFx0XHRpZiAoIWNodW5rKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gZG9uZSEgeWF5XG5cdFx0XHR9XG5cdFx0XHQvLyBzdGFydCB3b3JrZXJzIGZvciB0aGUgY3VycmVudCBjaHVua1xuXHRcdFx0Y3R4LmNvdW50U3RhcnRlZCArPSBjaHVuay5sZW5ndGg7XG5cdFx0XHRmb3IgKGNvbnN0IHBhZ2Ugb2YgY2h1bmspIHtcblx0XHRcdFx0Y3R4LndvcmtlcihwYWdlLCB0aGlzUHJveHkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgZm5Eb25lT25lID0gKCkgPT4ge1xuXHRcdFx0Y3R4LmNvdW50RmluaXNoZWQrKztcblx0XHRcdC8vIHVwZGF0ZSBvdmVyYWxsIHN0YXR1cyBsaW5lXG5cdFx0XHRjb25zdCB0b3RhbCA9IGN0eC5wYWdlTGlzdC5sZW5ndGg7XG5cdFx0XHRpZiAoY3R4LmNvdW50RmluaXNoZWQgPCB0b3RhbCkge1xuXHRcdFx0XHRjb25zdCBwcm9ncmVzcyA9IE1hdGgucm91bmQoKDEwMCAqIGN0eC5jb3VudEZpbmlzaGVkKSAvIHRvdGFsKTtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuc3RhdHVzKGAke3Byb2dyZXNzfSVgKTtcblx0XHRcdFx0Ly8gc3RhcnQgYSBuZXcgY2h1bmsgaWYgd2UncmUgY2xvc2UgZW5vdWdoIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGNodW5rLCBhbmRcblx0XHRcdFx0Ly8gd2UgaGF2ZW4ndCBhbHJlYWR5IHN0YXJ0ZWQgdGhlIG5leHQgb25lXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRjdHguY291bnRGaW5pc2hlZCA+PSBjdHguY291bnRTdGFydGVkIC0gTWF0aC5tYXgoY3R4Lm9wdGlvbnMuY2h1bmtTaXplIC8gMTAsIDIpICYmXG5cdFx0XHRcdFx0TWF0aC5mbG9vcihjdHguY291bnRGaW5pc2hlZCAvIGN0eC5vcHRpb25zLmNodW5rU2l6ZSkgPiBjdHguY3VycmVudENodW5rSW5kZXhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Zm5TdGFydE5ld0NodW5rKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY3R4LmNvdW50RmluaXNoZWQgPT09IHRvdGFsKSB7XG5cdFx0XHRcdGNvbnN0IHN0YXR1c1N0cmluZyA9IGDlrozmiJDvvIgke2N0eC5jb3VudEZpbmlzaGVkU3VjY2Vzc30vJHtjdHguY291bnRGaW5pc2hlZH3mk43kvZzmiJDlip/lrozmiJDvvIlgO1xuXHRcdFx0XHRpZiAoY3R4LmNvdW50RmluaXNoZWRTdWNjZXNzIDwgY3R4LmNvdW50RmluaXNoZWQpIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC53YXJuKHN0YXR1c1N0cmluZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyhzdGF0dXNTdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjdHgucG9zdEZpbmlzaCkge1xuXHRcdFx0XHRcdGN0eC5wb3N0RmluaXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0TW9yZWJpdHMud2lraS5yZW1vdmVDaGVja3BvaW50KCk7XG5cdFx0XHRcdGN0eC5ydW5uaW5nID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBjdHguY291bnRGaW5pc2hlZCA+IHRvdGFsXG5cdFx0XHRcdC8vIGp1c3QgZm9yIGdpZ2dsZXMhICh3ZWxsLCBzZXJpb3VzIGRlYnVnZ2luZywgYWN0dWFsbHkpXG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50Lndhcm4oXG5cdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCflrozmiJDvvIjlpJrmiafooYzkuoYnLCAn5a6M5oiQ77yI5aSa5Z+36KGM5LqGJykgKyAoY3R4LmNvdW50RmluaXNoZWQgLSB0b3RhbCl95qyh77yJYFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLnJlbW92ZUNoZWNrcG9pbnQoKTtcblx0XHRcdFx0Y3R4LnJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXHQvKipcblx0ICogQSBzaW1wbGUgZHJhZ2dhYmxlIHdpbmRvdywgbm93IGEgd3JhcHBlciBmb3IgalF1ZXJ5IFVJJ3MgZGlhbG9nIGZlYXR1cmUuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKiBAY2xhc3Ncblx0ICogQHJlcXVpcmVzIGpxdWVyeS51aS5kaWFsb2dcblx0ICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgbWF4aW11bSBhbGxvd2FibGUgaGVpZ2h0IGZvciB0aGUgY29udGVudCBhcmVhLlxuXHQgKi9cblx0TW9yZWJpdHMuc2ltcGxlV2luZG93ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcblx0XHRjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0dGhpcy5jb250ZW50ID0gY29udGVudDtcblx0XHRjb250ZW50LmNsYXNzTmFtZSA9ICdtb3JlYml0cy1kaWFsb2ctY29udGVudCc7XG5cdFx0Y29udGVudC5pZCA9IGBtb3JlYml0cy1kaWFsb2ctY29udGVudC0ke01hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDFlMTUpfWA7XG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0JCh0aGlzLmNvbnRlbnQpLmRpYWxvZyh7XG5cdFx0XHRhdXRvT3BlbjogZmFsc2UsXG5cdFx0XHRidXR0b25zOiB7XG5cdFx0XHRcdCdQbGFjZWhvbGRlciBidXR0b24nOiAoKSA9PiB7fSxcblx0XHRcdH0sXG5cdFx0XHRkaWFsb2dDbGFzczogJ21vcmViaXRzLWRpYWxvZycsXG5cdFx0XHR3aWR0aDogTWF0aC5taW4oTnVtYmVyLnBhcnNlSW50KHdpbmRvdy5pbm5lcldpZHRoLCAxMCksIE51bWJlci5wYXJzZUludCh3aWR0aCB8fCA4MDAsIDEwKSksXG5cdFx0XHQvLyBnaXZlIGpRdWVyeSB0aGUgZ2l2ZW4gaGVpZ2h0IHZhbHVlICh3aGljaCByZXByZXNlbnRzIHRoZSBhbnRpY2lwYXRlZCBoZWlnaHQgb2YgdGhlIGRpYWxvZykgaGVyZSwgc29cblx0XHRcdC8vIGl0IGNhbiBwb3NpdGlvbiB0aGUgZGlhbG9nIGFwcHJvcHJpYXRlbHlcblx0XHRcdC8vIHRoZSAyMCBwaXhlbHMgcmVwcmVzZW50cyBhZGp1c3RtZW50IGZvciB0aGUgZXh0cmEgaGVpZ2h0IG9mIHRoZSBqUXVlcnkgZGlhbG9nIFwiY2hyb21lXCIsIGNvbXBhcmVkXG5cdFx0XHQvLyB0byB0aGF0IG9mIHRoZSBvbGQgU2ltcGxlV2luZG93XG5cdFx0XHRoZWlnaHQ6IGhlaWdodCArIDIwLFxuXHRcdFx0Y2xvc2U6IChldmVudCkgPT4ge1xuXHRcdFx0XHQvLyBkaWFsb2dzIGFuZCB0aGVpciBjb250ZW50IGNhbiBiZSBkZXN0cm95ZWQgb25jZSBjbG9zZWRcblx0XHRcdFx0JChldmVudC50YXJnZXQpLmRpYWxvZygnZGVzdHJveScpLnJlbW92ZSgpO1xuXHRcdFx0fSxcblx0XHRcdHJlc2l6ZVN0YXJ0KCkge1xuXHRcdFx0XHRbdGhpcy5zY3JvbGxib3hdID0gJCh0aGlzKS5maW5kKCcubW9yZWJpdHMtc2Nyb2xsYm94Jyk7XG5cdFx0XHRcdGlmICh0aGlzLnNjcm9sbGJveCkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsYm94LnN0eWxlLm1heEhlaWdodCA9ICdub25lJztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJlc2l6ZVN0b3AoKSB7XG5cdFx0XHRcdHRoaXMuc2Nyb2xsYm94ID0gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRyZXNpemUoKSB7XG5cdFx0XHRcdHRoaXMuc3R5bGUubWF4SGVpZ2h0ID0gJyc7XG5cdFx0XHRcdGlmICh0aGlzLnNjcm9sbGJveCkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsYm94LnN0eWxlLndpZHRoID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fSk7XG5cdFx0Y29uc3QgJHdpZGdldCA9ICQodGhpcy5jb250ZW50KS5kaWFsb2coJ3dpZGdldCcpO1xuXHRcdC8vIGRlbGV0ZSB0aGUgcGxhY2Vob2xkZXIgYnV0dG9uIChpdCdzIG9ubHkgdGhlcmUgc28gdGhlIGJ1dHRvbnBhbmUgZ2V0cyBjcmVhdGVkKVxuXHRcdCR3aWRnZXQuZmluZCgnYnV0dG9uJykuZWFjaCgoa2V5LCB2YWx1ZSkgPT4ge1xuXHRcdFx0dmFsdWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0Ly8gYWRkIGNvbnRhaW5lciBmb3IgdGhlIGJ1dHRvbnMgd2UgYWRkLCBhbmQgdGhlIGZvb3RlciBsaW5rcyAoaWYgYW55KVxuXHRcdGNvbnN0IGJ1dHRvbnNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0YnV0dG9uc3Bhbi5jbGFzc05hbWUgPSAnbW9yZWJpdHMtZGlhbG9nLWJ1dHRvbnMnO1xuXHRcdGNvbnN0IGxpbmtzc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRsaW5rc3NwYW4uY2xhc3NOYW1lID0gJ21vcmViaXRzLWRpYWxvZy1mb290ZXJsaW5rcyc7XG5cdFx0JHdpZGdldC5maW5kKCcudWktZGlhbG9nLWJ1dHRvbnBhbmUnKS5hcHBlbmQoYnV0dG9uc3BhbiwgbGlua3NzcGFuKTtcblx0XHQvLyByZXNpemUgdGhlIHNjcm9sbGJveCB3aXRoIHRoZSBkaWFsb2csIGlmIG9uZSBpcyBwcmVzZW50XG5cdFx0JHdpZGdldC5yZXNpemFibGUoJ29wdGlvbicsICdhbHNvUmVzaXplJywgYCMke3RoaXMuY29udGVudC5pZH0gLm1vcmViaXRzLXNjcm9sbGJveCwgIyR7dGhpcy5jb250ZW50LmlkfWApO1xuXHR9O1xuXHRNb3JlYml0cy5zaW1wbGVXaW5kb3cucHJvdG90eXBlID0ge1xuXHRcdGJ1dHRvbnM6IFtdLFxuXHRcdGhlaWdodDogNjAwLFxuXHRcdGhhc0Zvb3RlckxpbmtzOiBmYWxzZSxcblx0XHRzY3JpcHROYW1lOiBudWxsLFxuXHRcdC8qKlxuXHRcdCAqIEZvY3VzZXMgdGhlIGRpYWxvZy4gVGhpcyBtaWdodCB3b3JrLCBvciBvbiB0aGUgY29udHJhcnksIGl0IG1pZ2h0IG5vdC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zaW1wbGVXaW5kb3d9XG5cdFx0ICovXG5cdFx0Zm9jdXMoKSB7XG5cdFx0XHQkKHRoaXMuY29udGVudCkuZGlhbG9nKCdtb3ZlVG9Ub3AnKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogQ2xvc2VzIHRoZSBkaWFsb2cuIElmIHRoaXMgaXMgc2V0IGFzIGFuIGV2ZW50IGhhbmRsZXIsIGl0IHdpbGwgc3RvcCB0aGUgZXZlbnRcblx0XHQgKiBmcm9tIGRvaW5nIGFueXRoaW5nIG1vcmUuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge2V2ZW50fSBbZXZlbnRdXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRjbG9zZShldmVudCkge1xuXHRcdFx0aWYgKGV2ZW50KSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9XG5cdFx0XHQkKHRoaXMuY29udGVudCkuZGlhbG9nKCdjbG9zZScpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBTaG93cyB0aGUgZGlhbG9nLiBDYWxsaW5nIGRpc3BsYXkoKSBvbiBhIGRpYWxvZyB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gY2xvc2VkXG5cdFx0ICogbWlnaHQgd29yaywgYnV0IGl0IGlzIG5vdCBndWFyYW50ZWVkLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRkaXNwbGF5KCkge1xuXHRcdFx0aWYgKHRoaXMuc2NyaXB0TmFtZSkge1xuXHRcdFx0XHRjb25zdCAkd2lkZ2V0ID0gJCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnd2lkZ2V0Jyk7XG5cdFx0XHRcdCR3aWRnZXQuZmluZCgnLm1vcmViaXRzLWRpYWxvZy1zY3JpcHRuYW1lJykucmVtb3ZlKCk7XG5cdFx0XHRcdGNvbnN0IHNjcmlwdG5hbWVzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdFx0XHRzY3JpcHRuYW1lc3Bhbi5jbGFzc05hbWUgPSAnbW9yZWJpdHMtZGlhbG9nLXNjcmlwdG5hbWUnO1xuXHRcdFx0XHRzY3JpcHRuYW1lc3Bhbi50ZXh0Q29udGVudCA9IGAke3RoaXMuc2NyaXB0TmFtZX0gXFx1MDBCNyBgOyAvLyBVKzAwQjcgTUlERExFIERPVCA9ICZtaWRkb3Q7XG5cdFx0XHRcdCR3aWRnZXQuZmluZCgnLnVpLWRpYWxvZy10aXRsZScpLnByZXBlbmQoc2NyaXB0bmFtZXNwYW4pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZGlhbG9nID0gJCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnb3BlbicpO1xuXHRcdFx0aWYgKHdpbmRvdy5zZXR1cFRvb2x0aXBzICYmIHdpbmRvdy5wZyAmJiB3aW5kb3cucGcucmUgJiYgd2luZG93LnBnLnJlLmRpZmYpIHtcblx0XHRcdFx0Ly8gdGllIGluIHdpdGggTkFWUE9QXG5cdFx0XHRcdGRpYWxvZy5wYXJlbnQoKVswXS5yYW5TZXR1cFRvb2x0aXBzQWxyZWFkeSA9IGZhbHNlO1xuXHRcdFx0XHR3aW5kb3cuc2V0dXBUb29sdGlwcyhkaWFsb2cucGFyZW50KClbMF0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zZXRIZWlnaHQodGhpcy5oZWlnaHQpOyAvLyBpbml0IGhlaWdodCBhbGdvcml0aG1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgZGlhbG9nIHRpdGxlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRzZXRUaXRsZSh0aXRsZSkge1xuXHRcdFx0JCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnb3B0aW9uJywgJ3RpdGxlJywgdGl0bGUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBzY3JpcHQgbmFtZSwgYXBwZWFyaW5nIGFzIGEgcHJlZml4IHRvIHRoZSB0aXRsZSB0byBoZWxwIHVzZXJzIGRldGVybWluZSB3aGljaFxuXHRcdCAqIHVzZXIgc2NyaXB0IGlzIHByb2R1Y2luZyB3aGljaCBkaWFsb2cuIEZvciBpbnN0YW5jZSwgVHdpbmtsZSBtb2R1bGVzIHNldCB0aGlzIHRvIFwiVHdpbmtsZVwiLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMuc2ltcGxlV2luZG93fVxuXHRcdCAqL1xuXHRcdHNldFNjcmlwdE5hbWUobmFtZSkge1xuXHRcdFx0dGhpcy5zY3JpcHROYW1lID0gbmFtZTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgZGlhbG9nIHdpZHRoLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRzZXRXaWR0aCh3aWR0aCkge1xuXHRcdFx0JCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnb3B0aW9uJywgJ3dpZHRoJywgd2lkdGgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBkaWFsb2cncyBtYXhpbXVtIGhlaWdodC4gVGhlIGRpYWxvZyB3aWxsIGF1dG8tc2l6ZSB0byBmaXQgaXRzIGNvbnRlbnRzLFxuXHRcdCAqIGJ1dCB0aGUgY29udGVudCBhcmVhIHdpbGwgZ3JvdyBubyBsYXJnZXIgdGhhbiB0aGUgaGVpZ2h0IGdpdmVuIGhlcmUuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRzZXRIZWlnaHQoaGVpZ2h0KSB7XG5cdFx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdC8vIGZyb20gZGlzcGxheSB0aW1lIG9ud2FyZHMsIGxldCB0aGUgYnJvd3NlciBkZXRlcm1pbmUgdGhlIG9wdGltdW0gaGVpZ2h0LFxuXHRcdFx0Ly8gYW5kIGluc3RlYWQgbGltaXQgdGhlIGhlaWdodCBhdCB0aGUgZ2l2ZW4gdmFsdWVcblx0XHRcdC8vIG5vdGUgdGhhdCB0aGUgZ2l2ZW4gaGVpZ2h0IHdpbGwgZXhjbHVkZSB0aGUgYXBwcm94LiAyMHB4IHRoYXQgdGhlIGpRdWVyeSBVSVxuXHRcdFx0Ly8gY2hyb21lIGhhcyBpbiBoZWlnaHQgaW4gYWRkaXRpb24gdG8gdGhlIGhlaWdodCBvZiBhbiBlcXVpdmFsZW50IFwiY2xhc3NpY1wiXG5cdFx0XHQvLyBNb3JlYml0cy5zaW1wbGVXaW5kb3dcblx0XHRcdGlmIChcblx0XHRcdFx0TnVtYmVyLnBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoJCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnd2lkZ2V0JylbMF0sIG51bGwpLmhlaWdodCwgMTApID5cblx0XHRcdFx0d2luZG93LmlubmVySGVpZ2h0XG5cdFx0XHQpIHtcblx0XHRcdFx0JCh0aGlzLmNvbnRlbnQpXG5cdFx0XHRcdFx0LmRpYWxvZygnb3B0aW9uJywgJ2hlaWdodCcsIHdpbmRvdy5pbm5lckhlaWdodCAtIDIpXG5cdFx0XHRcdFx0LmRpYWxvZygnb3B0aW9uJywgJ3Bvc2l0aW9uJywgJ3RvcCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnb3B0aW9uJywgJ2hlaWdodCcsICdhdXRvJyk7XG5cdFx0XHR9XG5cdFx0XHQkKHRoaXMuY29udGVudCkuZGlhbG9nKCd3aWRnZXQnKS5maW5kKCcubW9yZWJpdHMtZGlhbG9nLWNvbnRlbnQnKVswXS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtOdW1iZXIucGFyc2VJbnQoXG5cdFx0XHRcdHRoaXMuaGVpZ2h0IC0gMzAsXG5cdFx0XHRcdDEwXG5cdFx0XHQpfXB4YDtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgY29udGVudCBvZiB0aGUgZGlhbG9nIHRvIHRoZSBnaXZlbiBlbGVtZW50IG5vZGUsIHVzdWFsbHkgZnJvbSByZW5kZXJpbmdcblx0XHQgKiBhIHtAbGluayBNb3JlYml0cy5xdWlja0Zvcm19LlxuXHRcdCAqIFJlLWVudW1lcmF0ZXMgdGhlIGZvb3RlciBidXR0b25zLCBidXQgbGVhdmVzIHRoZSBmb290ZXIgbGlua3MgYXMgdGhleSBhcmUuXG5cdFx0ICogQmUgc3VyZSB0byBjYWxsIHRoaXMgYXQgbGVhc3Qgb25jZSBiZWZvcmUgdGhlIGRpYWxvZyBpcyBkaXNwbGF5ZWQuLi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRlbnRcblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMuc2ltcGxlV2luZG93fVxuXHRcdCAqL1xuXHRcdHNldENvbnRlbnQoY29udGVudCkge1xuXHRcdFx0dGhpcy5wdXJnZUNvbnRlbnQoKTtcblx0XHRcdHRoaXMuYWRkQ29udGVudChjb250ZW50KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogQWRkcyB0aGUgZ2l2ZW4gZWxlbWVudCBub2RlIHRvIHRoZSBkaWFsb2cgY29udGVudC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRlbnRcblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMuc2ltcGxlV2luZG93fVxuXHRcdCAqL1xuXHRcdGFkZENvbnRlbnQoY29udGVudCkge1xuXHRcdFx0dGhpcy5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuXHRcdFx0Ly8gbG9vayBmb3Igc3VibWl0IGJ1dHRvbnMgaW4gdGhlIGNvbnRlbnQsIGhpZGUgdGhlbSwgYW5kIGFkZCBhIHByb3h5IGJ1dHRvbiB0byB0aGUgYnV0dG9uIHBhbmVcblx0XHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdFx0JCh0aGlzLmNvbnRlbnQpXG5cdFx0XHRcdC5maW5kKCdpbnB1dFt0eXBlPVwic3VibWl0XCJdLCBidXR0b25bdHlwZT1cInN1Ym1pdFwiXScpXG5cdFx0XHRcdC5lYWNoKChrZXksIHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dmFsdWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0XHRjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcblx0XHRcdFx0XHRpZiAodmFsdWUuaGFzQXR0cmlidXRlKCd2YWx1ZScpKSB7XG5cdFx0XHRcdFx0XHRidXR0b24udGV4dENvbnRlbnQgPSB2YWx1ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZS50ZXh0Q29udGVudCkge1xuXHRcdFx0XHRcdFx0YnV0dG9uLnRleHRDb250ZW50ID0gdmFsdWUudGV4dENvbnRlbnQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICfmj5DkuqQnO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRidXR0b24uY2xhc3NOYW1lID0gdmFsdWUuY2xhc3NOYW1lIHx8ICdzdWJtaXRCdXR0b25Qcm94eSc7XG5cdFx0XHRcdFx0Ly8gaGVyZSBpcyBhbiBpbnN0YW5jZSBvZiBjaGVhcCBjb2RpbmcsIHByb2JhYmx5IGEgbWVtb3J5LXVzYWdlIGhpdCBpbiB1c2luZyBhIGNsb3N1cmUgaGVyZVxuXHRcdFx0XHRcdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFx0J2NsaWNrJyxcblx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0dmFsdWUuY2xpY2soKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0c2VsZi5idXR0b25zW3NlbGYuYnV0dG9ucy5sZW5ndGhdID0gYnV0dG9uO1xuXHRcdFx0XHR9KTtcblx0XHRcdC8vIHJlbW92ZSBhbGwgYnV0dG9ucyBmcm9tIHRoZSBidXR0b24gcGFuZSBhbmQgcmUtYWRkIHRoZW1cblx0XHRcdGlmICh0aGlzLmJ1dHRvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQkKHRoaXMuY29udGVudClcblx0XHRcdFx0XHQuZGlhbG9nKCd3aWRnZXQnKVxuXHRcdFx0XHRcdC5maW5kKCcubW9yZWJpdHMtZGlhbG9nLWJ1dHRvbnMnKVxuXHRcdFx0XHRcdC5lbXB0eSgpXG5cdFx0XHRcdFx0LmFwcGVuZCh0aGlzLmJ1dHRvbnMpWzBdXG5cdFx0XHRcdFx0LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1lbXB0eScpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCh0aGlzLmNvbnRlbnQpXG5cdFx0XHRcdFx0LmRpYWxvZygnd2lkZ2V0Jylcblx0XHRcdFx0XHQuZmluZCgnLm1vcmViaXRzLWRpYWxvZy1idXR0b25zJylbMF1cblx0XHRcdFx0XHQuc2V0QXR0cmlidXRlKCdkYXRhLWVtcHR5JywgJ2RhdGEtZW1wdHknKTsgLy8gdXNlZCBieSBDU1Ncblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIGFsbCBjb250ZW50cyBmcm9tIHRoZSBkaWFsb2csIGJhcnJpbmcgYW55IGZvb3RlciBsaW5rcy5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zaW1wbGVXaW5kb3d9XG5cdFx0ICovXG5cdFx0cHVyZ2VDb250ZW50KCkge1xuXHRcdFx0dGhpcy5idXR0b25zID0gW107XG5cdFx0XHQvLyBkZWxldGUgYWxsIGJ1dHRvbnMgaW4gdGhlIGJ1dHRvbnBhbmVcblx0XHRcdCQodGhpcy5jb250ZW50KS5kaWFsb2coJ3dpZGdldCcpLmZpbmQoJy5tb3JlYml0cy1kaWFsb2ctYnV0dG9ucycpLmVtcHR5KCk7XG5cdFx0XHR3aGlsZSAodGhpcy5jb250ZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHR0aGlzLmNvbnRlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBBZGRzIGEgbGluayBpbiB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lciBvZiB0aGUgZGlhbG9nLlxuXHRcdCAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBoZWxwIG9yIHBvbGljeSBsaW5rcy5cblx0XHQgKiBGb3IgZXhhbXBsZSwgVHdpbmtsZSdzIENTRCBtb2R1bGUgYWRkcyBhIGxpbmsgdG8gdGhlIENTRCBwb2xpY3kgcGFnZSxcblx0XHQgKiBhcyB3ZWxsIGFzIGEgbGluayB0byBUd2lua2xlJ3MgZG9jdW1lbnRhdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRGlzcGxheSB0ZXh0LlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB3aWtpUGFnZSAtIExpbmsgdGFyZ2V0LlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZXA9ZmFsc2VdIC0gU2V0IHRydWUgdG8gcHJlcGVuZCByYXRoZXIgdGhhbiBhcHBlbmQuXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRhZGRGb290ZXJMaW5rKHRleHQsIHdpa2lQYWdlLCBwcmVwKSB7XG5cdFx0XHRjb25zdCAkZm9vdGVybGlua3MgPSAkKHRoaXMuY29udGVudCkuZGlhbG9nKCd3aWRnZXQnKS5maW5kKCcubW9yZWJpdHMtZGlhbG9nLWZvb3RlcmxpbmtzJyk7XG5cdFx0XHRpZiAodGhpcy5oYXNGb290ZXJMaW5rcykge1xuXHRcdFx0XHRjb25zdCBidWxsZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0XHRcdGJ1bGxldC50ZXh0Q29udGVudCA9ICcgXFx1MjAyMiAnOyAvLyBVKzIwMjIgQlVMTEVUXG5cdFx0XHRcdGlmIChwcmVwKSB7XG5cdFx0XHRcdFx0JGZvb3RlcmxpbmtzLnByZXBlbmQoYnVsbGV0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkZm9vdGVybGlua3MuYXBwZW5kKGJ1bGxldCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIG13LnV0aWwuZ2V0VXJsKHdpa2lQYWdlKSk7XG5cdFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGl0bGUnLCB3aWtpUGFnZSk7XG5cdFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuXHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lciBub3JlZmVycmVyJyk7XG5cdFx0XHRsaW5rLnRleHRDb250ZW50ID0gdGV4dDtcblx0XHRcdGlmIChwcmVwKSB7XG5cdFx0XHRcdCRmb290ZXJsaW5rcy5wcmVwZW5kKGxpbmspO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JGZvb3RlcmxpbmtzLmFwcGVuZChsaW5rKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGFzRm9vdGVyTGlua3MgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBTZXRzIHdoZXRoZXIgdGhlIHdpbmRvdyBzaG91bGQgYmUgbW9kYWwgb3Igbm90LiBNb2RhbCBkaWFsb2dzIGNyZWF0ZVxuXHRcdCAqIGFuIG92ZXJsYXkgYmVsb3cgdGhlIGRpYWxvZyBidXQgYWJvdmUgb3RoZXIgcGFnZSBlbGVtZW50cy4gVGhpc1xuXHRcdCAqIG11c3QgYmUgdXNlZCAoaWYgbmVjZXNzYXJ5KSBiZWZvcmUgY2FsbGluZyBkaXNwbGF5KCkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttb2RhbD1mYWxzZV0gLSBJZiBzZXQgdG8gdHJ1ZSwgb3RoZXIgaXRlbXMgb24gdGhlXG5cdFx0ICogcGFnZSB3aWxsIGJlIGRpc2FibGVkLCBpLmUuLCBjYW5ub3QgYmUgaW50ZXJhY3RlZCB3aXRoLlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zaW1wbGVXaW5kb3d9XG5cdFx0ICovXG5cdFx0c2V0TW9kYWxpdHkobW9kYWwpIHtcblx0XHRcdCQodGhpcy5jb250ZW50KS5kaWFsb2coJ29wdGlvbicsICdtb2RhbCcsIG1vZGFsKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdH07XG5cdC8qKlxuXHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIGFsbCBmb290ZXIgYnV0dG9ucyBvbiBhbGwge0BsaW5rIE1vcmViaXRzLnNpbXBsZVdpbmRvd31zIGluIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGBmYWxzZWAgd2hlbiB0aGUgYnV0dG9uKHMpIGJlY29tZSBpcnJlbGV2YW50IChlLmcuIGp1c3QgYmVmb3JlXG5cdCAqIHtAbGluayBNb3JlYml0cy5zdGF0dXMuaW5pdH0gaXMgY2FsbGVkKS5cblx0ICogVGhpcyBpcyBub3QgYW4gaW5zdGFuY2UgbWV0aG9kIHNvIHRoYXQgY29uc3VtZXJzIGRvbid0IGhhdmUgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGVcblx0ICogb3JpZ2luYWwgYE1vcmViaXRzLnNpbXBsZVdpbmRvd2Agb2JqZWN0IHNpdHRpbmcgYXJvdW5kIHNvbWV3aGVyZS4gQW55d2F5LCBtb3N0IG9mIHRoZSB0aW1lXG5cdCAqIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgYE1vcmViaXRzLnNpbXBsZVdpbmRvd2Agb3Blbiwgc28gdGhpcyBzaG91bGRuJ3QgbWF0dGVyLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMuc2ltcGxlV2luZG93XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZFxuXHQgKi9cblx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkID0gKGVuYWJsZWQpID0+IHtcblx0XHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0XHQkYm9keS5maW5kKCcubW9yZWJpdHMtZGlhbG9nLWJ1dHRvbnMgYnV0dG9uJykucHJvcCgnZGlzYWJsZWQnLCAhZW5hYmxlZCk7XG5cdH07XG59KShqUXVlcnkpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUNB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Ujs7Ozs7Ozs7OztJQVVBd0IsWUFBWUMsT0FBTztBQUNsQno5QixRQUFFLEtBQUt3RSxPQUFPLEVBQUV1MkIsT0FBTyxVQUFVLFNBQVMwQyxLQUFLO0FBQy9DLGFBQU87SUFDUjtFQUNEO0FBWUF4OUIsV0FBUzI2QixhQUFhOEMsb0JBQXFCQyxhQUFZO0FBQ3RELFVBQU1sUixRQUFRenNCLEVBQUUsTUFBTTtBQUN0QnlzQixVQUFNcGYsS0FBSyxpQ0FBaUMsRUFBRTBULEtBQUssWUFBWSxDQUFDNGMsT0FBTztFQUN4RTtBQUNELEdBQUdDLE1BQU07IiwKICAibmFtZXMiOiBbImltcG9ydF9leHRfZ2FkZ2V0IiwgInJlcXVpcmUiLCAibW9yZWJpdHMiLCAiJCIsICJNb3JlYml0cyIsICJ3aW5kb3ciLCAibDEwbiIsICJyZWRpcmVjdFRhZ0FsaWFzZXMiLCAic2lnbmF0dXJlVGltZXN0YW1wRm9ybWF0IiwgInN0ciIsICJyZ3hVVEMiLCAicmd4Q1NUIiwgIm1hdGNoIiwgImV4ZWMiLCAibWF0Y2hDU1QiLCAibW9udGgiLCAiZGF0ZSIsICJsb2NhbGVEYXRhIiwgIm1vbnRocyIsICJpbmRleE9mIiwgInVzZXJJc0luR3JvdXAiLCAiZ3JvdXAiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJpbmNsdWRlcyIsICJ1c2VySXNTeXNvcCIsICJzYW5pdGl6ZUlQdjYiLCAiYWRkcmVzcyIsICJjb25zb2xlIiwgIndhcm4iLCAiaXAiLCAiaXNQYWdlUmVkaXJlY3QiLCAiZG9jdW1lbnQiLCAicXVlcnlTZWxlY3RvciIsICJwYWdlTmFtZU5vcm0iLCAicmVwbGFjZSIsICJwYWdlTmFtZVJlZ2V4IiwgInBhZ2VOYW1lIiwgImZpcnN0Q2hhciIsICJyZW1haW5kZXIiLCAic3RyaW5nIiwgImVzY2FwZVJlZ0V4cCIsICJzbGljZSIsICJUaXRsZSIsICJwaHBDaGFyVG9VcHBlciIsICJ0b0xvd2VyQ2FzZSIsICJjb25jYXQiLCAiY3JlYXRlSHRtbCIsICJpbnB1dCIsICJmcmFnbWVudCIsICJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwgImdlbmVyYXRlQXJyYXkiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwIiwgInMiLCAibiIsICJkb25lIiwgImVsZW1lbnQiLCAidmFsdWUiLCAiTm9kZSIsICJhcHBlbmRDaGlsZCIsICJfaXRlcmF0b3IyIiwgInBhcnNlSFRNTCIsICJyZW5kZXJXaWtpbGlua3MiLCAiX3N0ZXAyIiwgIm5vZGUiLCAiZXJyIiwgImUiLCAiZiIsICJ0ZXh0IiwgInViIiwgInVuYmluZGVyIiwgInVuYmluZCIsICJjb250ZW50IiwgIl8iLCAidGFyZ2V0IiwgInRleHRfIiwgInV0aWwiLCAiZ2V0VXJsIiwgInJlYmluZCIsICJuYW1lc3BhY2VSZWdleCIsICJuYW1lc3BhY2VzIiwgImFsaWFzZXMiLCAicmVnZXgiLCAiX2kiLCAiX09iamVjdCRlbnRyaWVzIiwgIk9iamVjdCIsICJlbnRyaWVzIiwgImxlbmd0aCIsICJuYW1lIiwgIm51bWJlciIsICJtYXAiLCAiY2hhciIsICJqb2luIiwgInF1aWNrRm9ybSIsICJldmVudCIsICJldmVudFR5cGUiLCAicm9vdCIsICJ0eXBlIiwgInByb3RvdHlwZSIsICJyZW5kZXIiLCAicmV0IiwgIm5hbWVzIiwgImFwcGVuZCIsICJkYXRhIiwgImNoaWxkcyIsICJpZCIsICJjaGlsZCIsICJpbnRlcm5hbFN1Ymdyb3VwSWQiLCAiY3VycmVudE5vZGUiLCAiY29tcHV0ZSIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJpbklkIiwgImNoaWxkQ29udGFpbmVyIiwgImxhYmVsIiwgImFkbWlub25seSIsICJpIiwgImN1cnJlbnQiLCAic3Vibm9kZSIsICJjcmVhdGVFbGVtZW50IiwgImNsYXNzTmFtZSIsICJzZXRBdHRyaWJ1dGUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJzZWxlY3QiLCAibXVsdGlwbGUiLCAic2l6ZSIsICJkaXNhYmxlZCIsICJsaXN0IiwgInZhbHVlcyIsICJzZWxlY3RlZCIsICJoaWRkZW4iLCAiY3JlYXRlVGV4dE5vZGUiLCAiY3VySWQiLCAiY3VyRGl2IiwgInRvb2x0aXAiLCAiZ2VuZXJhdGVUb29sdGlwIiwgImNoZWNrZWQiLCAic3R5bGUiLCAic3ViZ3JvdXAiLCAidG1wZ3JvdXAiLCAic3ViZ3JvdXBSYXciLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAiZWwiLCAibmV3RWwiLCAic2hvd24iLCAicGFyZW50Tm9kZSIsICJmb3JtIiwgInJlbW92ZUNoaWxkIiwgInNoaWZ0Q2xpY2tTdXBwb3J0IiwgImNoZWNrYm94U2hpZnRDbGlja1N1cHBvcnQiLCAiZ2V0RWxlbWVudHMiLCAicGxhY2Vob2xkZXIiLCAiX2kyIiwgIl9hcnIiLCAiYXR0IiwgIl9pMyIsICJfYXJyMiIsICJfaTQiLCAiX2FycjMiLCAibWluIiwgIm1heCIsICJOdW1iZXIiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAibGlzdE5vZGUiLCAibW9yZSIsICJuZXdOb2RlIiwgInN1Ymxpc3QiLCAiYXJlYSIsICJjb3VudGVyIiwgInN0b3BQcm9wYWdhdGlvbiIsICJtb3JlQnV0dG9uIiwgInN1YmxhYmVsIiwgInJlbW92ZSIsICJtYXhsZW5ndGgiLCAiZWxlbSIsICJtb3JlYnV0dG9uIiwgImxpc3Rub2RlIiwgIm5vZGVfIiwgImlucHV0bm9kZSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAicmVtb3ZlQnV0dG9uIiwgInJlc3VsdCIsICJsYWJlbEVsZW1lbnQiLCAiY29scyIsICJyb3dzIiwgInJlcXVpcmVkIiwgInJlYWRvbmx5IiwgIkVycm9yIiwgInRvU3RyaW5nIiwgImV4dHJhIiwgIiRkYXRhIiwgInRvb2x0aXBCdXR0b24iLCAidGl0bGUiLCAicG9zaXRpb24iLCAibXkiLCAiYXQiLCAiY29sbGlzaW9uIiwgInRvb2x0aXBDbGFzcyIsICJnZXRJbnB1dERhdGEiLCAiX2l0ZXJhdG9yNSIsICJlbGVtZW50cyIsICJfc3RlcDUiLCAiZmllbGQiLCAiZmllbGROYW1lTm9ybSIsICJkYXRhc2V0IiwgInNpbmdsZSIsICJ2YWwiLCAidHJpbSIsICJmaWVsZE5hbWUiLCAiJGZvcm0iLCAiZXNjYXBlU2VsZWN0b3IiLCAiJGVsZW1lbnRzIiwgImZpbmQiLCAidG9BcnJheSIsICJnZXRDaGVja2JveE9yUmFkaW8iLCAiZWxlbWVudEFycmF5IiwgImZvdW5kIiwgImZpbHRlciIsICJnZXRFbGVtZW50Q29udGFpbmVyIiwgIkhUTUxGaWVsZFNldEVsZW1lbnQiLCAiSFRNTERpdkVsZW1lbnQiLCAiSFRNTEhlYWRpbmdFbGVtZW50IiwgImdldEVsZW1lbnRMYWJlbE9iamVjdCIsICJIVE1MVGV4dEFyZWFFbGVtZW50IiwgImdldEVsZW1lbnRMYWJlbCIsICJmaXJzdENoaWxkIiwgInRleHRDb250ZW50IiwgInNldEVsZW1lbnRMYWJlbCIsICJsYWJlbFRleHQiLCAib3ZlcnJpZGVFbGVtZW50TGFiZWwiLCAidGVtcG9yYXJ5TGFiZWxUZXh0IiwgImhhc0F0dHJpYnV0ZSIsICJyZXNldEVsZW1lbnRMYWJlbCIsICJnZXRBdHRyaWJ1dGUiLCAic2V0RWxlbWVudFZpc2liaWxpdHkiLCAidmlzaWJpbGl0eSIsICJ0b2dnbGUiLCAic2V0RWxlbWVudFRvb2x0aXBWaXNpYmlsaXR5IiwgIkhUTUxGb3JtRWxlbWVudCIsICJnZXRDaGVja2VkIiwgInJldHVybkFycmF5IiwgIkhUTUxTZWxlY3RFbGVtZW50IiwgIm9wdGlvbnMiLCAiSFRNTElucHV0RWxlbWVudCIsICJnZXRVbmNoZWNrZWQiLCAiaXNJUHY2QWRkcmVzcyIsICJ0b1VwcGVyQ2FzZSIsICJhYmJyZXZQb3MiLCAiQ0lEUlN0YXJ0IiwgImFkZHJlc3NFbmQiLCAicmVwZWF0IiwgInBhZCIsICJyZXBsYWNlbWVudCIsICJzcGxpdCIsICJpc1JhbmdlIiwgImlzSVBBZGRyZXNzIiwgInZhbGlkQ0lEUiIsICJzdWJuZXQiLCAicGFyc2VJbnQiLCAiZ2V0NjQiLCAiaXB2NiIsICJzdWJuZXRNYXRjaCIsICJpcFJlZ2V4IiwgInRvVXBwZXJDYXNlRmlyc3RDaGFyIiwgInRvTG93ZXJDYXNlRmlyc3RDaGFyIiwgInNwbGl0V2VpZ2h0ZWRCeUtleXMiLCAic3RhcnQiLCAiZW5kIiwgInNraXBsaXN0IiwgImxldmVsIiwgImluaXRpYWwiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJUeXBlRXJyb3IiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYiLCAiZm9ybWF0UmVhc29uVGV4dCIsICJhZGRTaWciLCAicmVhc29uIiwgInNpZyIsICJzaWdJbmRleCIsICJsYXN0SW5kZXhPZiIsICJmb3JtYXRSZWFzb25Gb3JMb2ciLCAic2FmZVJlcGxhY2UiLCAicGF0dGVybiIsICJpc0luZmluaXR5IiwgImV4cGlyeSIsICJmb3JtYXRUaW1lIiwgInRpbWUiLCAibSIsICJ3Z1VMUyIsICJhcHBlbmRQdW5jdHVhdGlvbiIsICJwdW5jdHVhdGlvbiIsICJzZWFyY2giLCAiYXJyYXkiLCAidW5pcSIsICJhcnIiLCAiaXRlbSIsICJpZHgiLCAiZHVwcyIsICJjaHVuayIsICJudW1DaHVua3MiLCAiTWF0aCIsICJjZWlsIiwgImZyb20iLCAic2VsZWN0MiIsICJtYXRjaGVycyIsICJvcHRncm91cEZ1bGwiLCAicGFyYW1zIiwgIm9yaWdpbmFsTWF0Y2hlciIsICJmbiIsICJkZWZhdWx0cyIsICJtYXRjaGVyIiwgInRlcm0iLCAiY2hpbGRyZW4iLCAid29yZEJlZ2lubmluZyIsICJSZWdFeHAiLCAidGVzdCIsICJoaWdobGlnaHRTZWFyY2hNYXRjaGVzIiwgInNlYXJjaFRlcm0iLCAic2VsZWN0MlNlYXJjaFF1ZXJ5IiwgImxvYWRpbmciLCAiY3NzIiwgInF1ZXJ5SW50ZXJjZXB0b3IiLCAiYXV0b1N0YXJ0IiwgImV2IiwgIndoaWNoIiwgImNsb3Nlc3QiLCAicHJldiIsICJkcm9wZG93biIsICIkc2VhcmNoIiwgInNlbGVjdGlvbiIsICJmb2N1cyIsICJoaXN0b3J5IiwgInByZWZpeCIsICJyYW5kb20iLCAicG9zdGZpeCIsICJyZSIsICJnZXRDYWxsYmFjayIsICJoYXNPd24iLCAic2VsZiIsICJhcmdzIiwgIl90aGlzJF9kIiwgInBhcmFtIiwgImRpZ2l0TWF0Y2giLCAiX2QiLCAiRGF0ZSIsICJSZWZsZWN0IiwgImFwcGx5IiwgIlVUQyIsICJkYXRlUGFydHMiLCAiRnVuY3Rpb24iLCAiYmluZCIsICJpc1ZhbGlkIiwgImxvZyIsICJtb250aHNTaG9ydCIsICJkYXlzIiwgImRheXNTaG9ydCIsICJyZWxhdGl2ZVRpbWVzIiwgInRoaXNEYXkiLCAicHJldkRheSIsICJuZXh0RGF5IiwgInRoaXNXZWVrIiwgInBhc3RXZWVrIiwgIm90aGVyIiwgInVuaXRNYXAiLCAic2Vjb25kcyIsICJtaW51dGVzIiwgImhvdXJzIiwgIndlZWtzIiwgInllYXJzIiwgImlzTmFOIiwgImdldFRpbWUiLCAiaXNCZWZvcmUiLCAiaXNBZnRlciIsICJnZXRVVENNb250aE5hbWUiLCAiZ2V0VVRDTW9udGgiLCAiZ2V0VVRDTW9udGhOYW1lQWJicmV2IiwgImdldE1vbnRoTmFtZSIsICJnZXRNb250aCIsICJnZXRNb250aE5hbWVBYmJyZXYiLCAiZ2V0VVRDRGF5TmFtZSIsICJnZXRVVENEYXkiLCAiZ2V0VVRDRGF5TmFtZUFiYnJldiIsICJnZXREYXlOYW1lIiwgImdldERheSIsICJnZXREYXlOYW1lQWJicmV2IiwgImFkZCIsICJ1bml0IiwgIm51bSIsICJ1bml0Tm9ybSIsICJrZXlzIiwgInN1YnRyYWN0IiwgImZvcm1hdCIsICJmb3JtYXRzdHIiLCAiem9uZSIsICJ1ZGF0ZSIsICJnZXRUaW1lem9uZU9mZnNldCIsICJ0b0lTT1N0cmluZyIsICJsZW4iLCAiaDI0IiwgImdldEhvdXJzIiwgImdldE1pbnV0ZXMiLCAiZ2V0U2Vjb25kcyIsICJtcyIsICJnZXRNaWxsaXNlY29uZHMiLCAiRCIsICJnZXREYXRlIiwgIk0iLCAiWSIsICJnZXRGdWxsWWVhciIsICJoMTIiLCAiYW1PclBtIiwgInJlcGxhY2VtZW50TWFwIiwgIkhIIiwgIkgiLCAiaGgiLCAiaCIsICJBIiwgIm1tIiwgInNzIiwgIlNTUyIsICJkZGRkIiwgImRkZCIsICJkIiwgIkREIiwgIk1NTU0iLCAiTU1NIiwgIk1NIiwgIllZWVkiLCAiWVkiLCAiU3RyaW5nIiwgInJhdyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJfdGVtcGxhdGVPYmplY3QyIiwgImNhbGVuZGFyIiwgImRhdGVEaWZmIiwgInNldEhvdXJzIiwgIm1vbnRoSGVhZGVyUmVnZXgiLCAiZ2V0VVRDRnVsbFllYXIiLCAibW9udGhIZWFkZXIiLCAiaGVhZGVyIiwgIl9pdGVyYXRvcjciLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJfc3RlcDciLCAiZnVuYyIsICJ3aWtpIiwgIm51bWJlck9mQWN0aW9uc0xlZnQiLCAibmJyT2ZDaGVja3BvaW50c0xlZnQiLCAiYWN0aW9uQ29tcGxldGVkIiwgIm5vdGljZSIsICJzdGF0dXMiLCAicmVkaXJlY3QiLCAiZm9sbG93UmVkaXJlY3QiLCAic2V0VGltZW91dCIsICJsb2NhdGlvbiIsICJ0aW1lT3V0IiwgIndwQWN0aW9uQ29tcGxldGVkVGltZU91dCIsICJhZGRDaGVja3BvaW50IiwgInJlbW92ZUNoZWNrcG9pbnQiLCAiYXBpIiwgImN1cnJlbnRBY3Rpb24iLCAicXVlcnkiLCAib25TdWNjZXNzIiwgInN0YXR1c0VsZW1lbnQiLCAib25FcnJvciIsICJfdGhpcyRxdWVyeSIsICJhc3NlcnQiLCAiZXJyb3Jmb3JtYXQiLCAidXNlbGFuZyIsICJlcnJvcmxhbmciLCAiZXJyb3JzdXNlbG9jYWwiLCAic2V0U3RhdHVzRWxlbWVudCIsICJzdGF0ZWxlbSIsICJmb3JtYXR2ZXJzaW9uIiwgImVycm9yIiwgImFjdGlvbiIsICJ0YWdzIiwgIm1vcmViaXRzV2lraUNoYW5nZVRhZyIsICJwYXJlbnQiLCAicmVzcG9uc2UiLCAicmVzcG9uc2VYTUwiLCAic3RhdHVzVGV4dCIsICJlcnJvckNvZGUiLCAiZXJyb3JUZXh0IiwgImJhZHRva2VuUmV0cnkiLCAic2V0UGFyZW50IiwgInBvc3QiLCAiY2FsbGVyQWpheFBhcmFtZXRlcnMiLCAicXVlcnlTdHJpbmdBcnIiLCAiX2k1IiwgIl9PYmplY3QkZW50cmllczIiLCAiZW5jb2RlVVJJQ29tcG9uZW50IiwgInF1ZXJ5U3RyaW5nIiwgImFqYXhwYXJhbXMiLCAiY29udGV4dCIsICJ1cmwiLCAid2lraVNjcmlwdCIsICJkYXRhVHlwZSIsICJoZWFkZXJzIiwgIm1vcmViaXRzV2lraUFwaVVzZXJBZ2VudCIsICJhamF4IiwgInRoZW4iLCAib25BUElzdWNjZXNzIiwgImVycm9ycyIsICJjb2RlIiwgImh0bWwiLCAiZXEiLCAiYXR0ciIsICJyZXR1cm5FcnJvciIsICJjYWxsIiwgImluZm8iLCAiRGVmZXJyZWQiLCAicmVzb2x2ZVdpdGgiLCAib25BUElmYWlsdXJlIiwgImVycm9yVGhyb3duIiwgImdldFRva2VuIiwgInRva2VuIiwgInJlamVjdFdpdGgiLCAiZ2V0U3RhdHVzRWxlbWVudCIsICJnZXRFcnJvckNvZGUiLCAiZ2V0RXJyb3JUZXh0IiwgImdldFhNTCIsICJnZXRSZXNwb25zZSIsICJnZXRDYWNoZWRKc29uIiwgInByb3AiLCAidGl0bGVzIiwgInJ2c2xvdHMiLCAicnZwcm9wIiwgInNtYXhhZ2UiLCAibWF4YWdlIiwgImFwaW9iaiIsICJ1bmxpbmsiLCAid2lraXRleHQiLCAicGFnZXMiLCAicmV2aXNpb25zIiwgInNsb3RzIiwgIm1haW4iLCAiSlNPTiIsICJwYXJzZSIsICJzZXRBcGlVc2VyQWdlbnQiLCAidWEiLCAidG9rZW5BcGkiLCAibWV0YSIsICJ0b2tlbnMiLCAiY3NyZnRva2VuIiwgInBhZ2UiLCAiY3R4IiwgInBhZ2VFeGlzdHMiLCAiZWRpdFN1bW1hcnkiLCAiY2hhbmdlVGFncyIsICJ0ZXN0QWN0aW9ucyIsICJjYWxsYmFja1BhcmFtZXRlcnMiLCAicGFnZVRleHQiLCAiZWRpdE1vZGUiLCAiYXBwZW5kVGV4dCIsICJwcmVwZW5kVGV4dCIsICJuZXdTZWN0aW9uVGV4dCIsICJuZXdTZWN0aW9uVGl0bGUiLCAiY3JlYXRlT3B0aW9uIiwgIm1pbm9yRWRpdCIsICJib3RFZGl0IiwgInBhZ2VTZWN0aW9uIiwgIm1heENvbmZsaWN0UmV0cmllcyIsICJtYXhSZXRyaWVzIiwgImZvbGxvd0Nyb3NzTnNSZWRpcmVjdCIsICJ3YXRjaGxpc3RPcHRpb24iLCAid2F0Y2hsaXN0RXhwaXJ5IiwgImNyZWF0b3IiLCAidGltZXN0YW1wIiwgInJldmVydE9sZElEIiwgIm1vdmVEZXN0aW5hdGlvbiIsICJtb3ZlVGFsa1BhZ2UiLCAibW92ZVN1YnBhZ2VzIiwgIm1vdmVTdXBwcmVzc1JlZGlyZWN0IiwgInByb3RlY3RFZGl0IiwgInByb3RlY3RNb3ZlIiwgInByb3RlY3RDcmVhdGUiLCAicHJvdGVjdENhc2NhZGUiLCAibG9va3VwTm9uUmVkaXJlY3RDcmVhdG9yIiwgInBhZ2VMb2FkZWQiLCAiY3NyZlRva2VuIiwgImxvYWRUaW1lIiwgImxhc3RFZGl0VGltZSIsICJwYWdlSUQiLCAiY29udGVudE1vZGVsIiwgInJldmVydEN1cklEIiwgInJldmVydFVzZXIiLCAid2F0Y2hlZCIsICJmdWxseVByb3RlY3RlZCIsICJzdXBwcmVzc1Byb3RlY3RXYXJuaW5nIiwgImNvbmZsaWN0UmV0cmllcyIsICJyZXRyaWVzIiwgIm9uTG9hZFN1Y2Nlc3MiLCAib25Mb2FkRmFpbHVyZSIsICJvblNhdmVTdWNjZXNzIiwgIm9uU2F2ZUZhaWx1cmUiLCAib25Mb29rdXBDcmVhdGlvblN1Y2Nlc3MiLCAib25Mb29rdXBDcmVhdGlvbkZhaWx1cmUiLCAib25Nb3ZlU3VjY2VzcyIsICJvbk1vdmVGYWlsdXJlIiwgIm9uRGVsZXRlU3VjY2VzcyIsICJvbkRlbGV0ZUZhaWx1cmUiLCAib25VbmRlbGV0ZVN1Y2Nlc3MiLCAib25VbmRlbGV0ZUZhaWx1cmUiLCAib25Qcm90ZWN0U3VjY2VzcyIsICJvblByb3RlY3RGYWlsdXJlIiwgImxvYWRRdWVyeSIsICJsb2FkQXBpIiwgInNhdmVBcGkiLCAibG9va3VwQ3JlYXRpb25BcGkiLCAibW92ZUFwaSIsICJtb3ZlUHJvY2Vzc0FwaSIsICJwYXRyb2xBcGkiLCAicGF0cm9sUHJvY2Vzc0FwaSIsICJkZWxldGVBcGkiLCAiZGVsZXRlUHJvY2Vzc0FwaSIsICJ1bmRlbGV0ZUFwaSIsICJ1bmRlbGV0ZVByb2Nlc3NBcGkiLCAicHJvdGVjdEFwaSIsICJwcm90ZWN0UHJvY2Vzc0FwaSIsICJlbXB0eUZ1bmN0aW9uIiwgImxvYWQiLCAib25GYWlsdXJlIiwgImlucHJvcCIsICJpbnRlc3RhY3Rpb25zIiwgImN1cnRpbWVzdGFtcCIsICJydmxpbWl0IiwgInJ2c3RhcnRpZCIsICJyZWRpcmVjdHMiLCAicnZzZWN0aW9uIiwgImZuTG9hZFN1Y2Nlc3MiLCAic2F2ZSIsICJjYW5Vc2VNd1VzZXJUb2tlbiIsICJmbkNhblVzZU13VXNlclRva2VuIiwgImNvbmZpcm0iLCAic3VtbWFyeSIsICJ1c2VyIiwgIndhdGNobGlzdCIsICJmbkFwcGx5V2F0Y2hsaXN0RXhwaXJ5IiwgIndhdGNobGlzdGV4cGlyeSIsICJzZWN0aW9uIiwgIm1pbm9yIiwgIm5vdG1pbm9yIiwgImJvdCIsICJhcHBlbmR0ZXh0IiwgInByZXBlbmR0ZXh0IiwgInNlY3Rpb250aXRsZSIsICJ1bmRvIiwgInVuZG9hZnRlciIsICJiYXNldGltZXN0YW1wIiwgInN0YXJ0dGltZXN0YW1wIiwgImZuU2F2ZVN1Y2Nlc3MiLCAiZm5TYXZlRXJyb3IiLCAiZm5BdXRvU2F2ZSIsICJwcmVwZW5kIiwgIm5ld1NlY3Rpb24iLCAiZ2V0UGFnZU5hbWUiLCAiZ2V0UGFnZVRleHQiLCAic2V0UGFnZVRleHQiLCAic2V0QXBwZW5kVGV4dCIsICJzZXRQcmVwZW5kVGV4dCIsICJzZXROZXdTZWN0aW9uVGV4dCIsICJzZXROZXdTZWN0aW9uVGl0bGUiLCAic2V0RWRpdFN1bW1hcnkiLCAic2V0Q2hhbmdlVGFncyIsICJzZXRDcmVhdGVPcHRpb24iLCAic2V0TWlub3JFZGl0IiwgInNldEJvdEVkaXQiLCAic2V0UGFnZVNlY3Rpb24iLCAic2V0TWF4Q29uZmxpY3RSZXRyaWVzIiwgInNldE1heFJldHJpZXMiLCAic2V0V2F0Y2hsaXN0IiwgInNldFdhdGNobGlzdEV4cGlyeSIsICJzZXRXYXRjaGxpc3RGcm9tUHJlZmVyZW5jZXMiLCAic2V0Rm9sbG93UmVkaXJlY3QiLCAic2V0TG9va3VwTm9uUmVkaXJlY3RDcmVhdG9yIiwgImZsYWciLCAic2V0TW92ZURlc3RpbmF0aW9uIiwgImRlc3RpbmF0aW9uIiwgInNldE1vdmVUYWxrUGFnZSIsICJzZXRNb3ZlU3VicGFnZXMiLCAic2V0TW92ZVN1cHByZXNzUmVkaXJlY3QiLCAic2V0RWRpdFByb3RlY3Rpb24iLCAic2V0TW92ZVByb3RlY3Rpb24iLCAic2V0Q3JlYXRlUHJvdGVjdGlvbiIsICJzZXRDYXNjYWRpbmdQcm90ZWN0aW9uIiwgInNldE9sZElEIiwgIm9sZElEIiwgImdldEN1cnJlbnRJRCIsICJnZXRSZXZpc2lvblVzZXIiLCAiZ2V0TGFzdEVkaXRUaW1lIiwgInNldENhbGxiYWNrUGFyYW1ldGVycyIsICJnZXRDYWxsYmFja1BhcmFtZXRlcnMiLCAiZXhpc3RzIiwgImdldFBhZ2VJRCIsICJnZXRDb250ZW50TW9kZWwiLCAiZ2V0V2F0Y2hlZCIsICJnZXRMb2FkVGltZSIsICJnZXRDcmVhdG9yIiwgImdldENyZWF0aW9uVGltZXN0YW1wIiwgImNhbkVkaXQiLCAibG9va3VwQ3JlYXRpb24iLCAicnZkaXIiLCAiZm5Mb29rdXBDcmVhdGlvblN1Y2Nlc3MiLCAicmV2ZXJ0IiwgIm1vdmUiLCAiZm5QcmVmbGlnaHRDaGVja3MiLCAiZm5Qcm9jZXNzTW92ZSIsICJmbk5lZWRUb2tlbkluZm9RdWVyeSIsICJwYXRyb2wiLCAiJGJvZHkiLCAicGF0cm9saHJlZiIsICJyY2lkIiwgImdldFBhcmFtVmFsdWUiLCAiZm5Qcm9jZXNzUGF0cm9sIiwgInBhdHJvbFF1ZXJ5IiwgInJjcHJvcCIsICJyY3RpdGxlIiwgInJjbGltaXQiLCAiZGVsZXRlUGFnZSIsICJmblByb2Nlc3NEZWxldGUiLCAidW5kZWxldGVQYWdlIiwgImZuUHJvY2Vzc1VuZGVsZXRlIiwgInByb3RlY3QiLCAiZm5Qcm9jZXNzUHJvdGVjdCIsICJnZXRQcmVmaXhlZFRleHQiLCAiZWRpdFJlc3RyaWN0aW9uIiwgInBhZ2VvYmoiLCAiZm5DaGVja1BhZ2VOYW1lIiwgInJldiIsICJtaXNzaW5nIiwgInBhZ2VpZCIsICJjb250ZW50bW9kZWwiLCAiZWRpdFByb3QiLCAicHJvdGVjdGlvbiIsICJwciIsICJwb3AiLCAibGFzdHJldmlkIiwgInRlc3RhY3Rpb25zIiwgImFjdGlvbnMiLCAiX2k2IiwgIl9PYmplY3Qka2V5cyIsICJyZXZpZCIsICJ1c2VyaGlkZGVuIiwgImludmFsaWQiLCAicmVzb2x2ZWROYW1lIiwgIm9yaWdOcyIsICJuYW1lc3BhY2UiLCAibmV3TnMiLCAibmV3RXhwaXJ5IiwgInJlbCIsICJlZGl0IiwgImxpbmsiLCAiY2FwdGNoYSIsICJwdXJnZVF1ZXJ5IiwgInB1cmdlQXBpIiwgInNsZWVwIiwgImVycm9yRGF0YSIsICJhYnVzZWZpbHRlciIsICJkZXNjcmlwdGlvbiIsICJzcGFtIiwgInNwYW1ibGFja2xpc3QiLCAibWF0Y2hlcyIsICJpc1RleHRSZWRpcmVjdCIsICJzb21lIiwgInRhZyIsICJmbkxvb2t1cE5vblJlZGlyZWN0Q3JlYXRvciIsICJyZXZzIiwgIl9pdGVyYXRvcjgiLCAiX3N0ZXA4IiwgImZuUHJvY2Vzc0NoZWNrcyIsICJhY3Rpb25NaXNzaW5nIiwgInByb3RlY3RNaXNzaW5nIiwgInNhbHRNaXNzaW5nIiwgImVkaXRwcm90IiwgInBhZ2VUaXRsZSIsICJ0byIsICJtb3ZldGFsayIsICJtb3Zlc3VicGFnZXMiLCAibm9yZWRpcmVjdCIsICJyZWNlbnRjaGFuZ2VzIiwgInVucGF0cm9sbGVkIiwgInBhdHJvbFN0YXQiLCAiZm5Qcm9jZXNzRGVsZXRlRXJyb3IiLCAiZm5Qcm9jZXNzVW5kZWxldGVFcnJvciIsICJwcnMiLCAibW92ZXByb3QiLCAiY3JlYXRlcHJvdCIsICJfaXRlcmF0b3I5IiwgIl9zdGVwOSIsICJzb3VyY2UiLCAiY2FzY2FkZSIsICJwcm90ZWN0aW9ucyIsICJleHBpcnlzIiwgIm1pbGxpc2Vjb25kcyIsICJkZWZlcnJlZCIsICJyZXNvbHZlIiwgInByZXZpZXciLCAicHJldmlld2JveCIsICJhZGRDbGFzcyIsICJoaWRlIiwgImJlZ2luUmVuZGVyIiwgInNlY3Rpb25UaXRsZSIsICJzaG93IiwgInN0YXR1c3NwYW4iLCAiaW5pdCIsICJwc3QiLCAiZGlzYWJsZWxpbWl0cmVwb3J0IiwgImRpc2FibGVlZGl0c2VjdGlvbiIsICJyZW5kZXJBcGkiLCAiZm5SZW5kZXJTdWNjZXNzIiwgImlubmVySFRNTCIsICJsb2FkZXIiLCAibW9kdWxlc3R5bGVzIiwgIm1vZHVsZXMiLCAiY2xvc2VQcmV2aWV3IiwgImVtcHR5IiwgInBhcnNlVGVtcGxhdGUiLCAiY291bnQiLCAidW5uYW1lZCIsICJlcXVhbHMiLCAicGFyYW1ldGVycyIsICJrZXkiLCAiZmluZFBhcmFtIiwgImZpbmFsIiwgInRlc3QzIiwgInRlc3QyIiwgImNoYXJBdCIsICJyZW1vdmVMaW5rIiwgImxpbmtUYXJnZXQiLCAibXdUaXRsZSIsICJuZXdGcm9tVGV4dCIsICJuYW1lc3BhY2VJRCIsICJnZXROYW1lc3BhY2VJZCIsICJnZXRNYWluVGV4dCIsICJsaW5rUmVnZXhTdHJpbmciLCAiaXNGaWxlT3JDYXRlZ29yeSIsICJjb2xvbiIsICJzaW1wbGVMaW5rUmVnZXgiLCAicGlwZWRMaW5rUmVnZXgiLCAiY29tbWVudE91dEltYWdlIiwgImltYWdlIiwgImltYWdlUmVnZXhTdHJpbmciLCAibGlua3NSZWdleCIsICJhbGxMaW5rcyIsICJfaXRlcmF0b3IxMCIsICJfc3RlcDEwIiwgImFsbExpbmsiLCAiZ2FsbGVyeUltYWdlUmVnZXgiLCAiZnJlZUltYWdlUmVnZXgiLCAiYWRkVG9JbWFnZUNvbW1lbnQiLCAiX2l0ZXJhdG9yMTEiLCAiX3N0ZXAxMSIsICJnYWxsZXJ5UmVnZXgiLCAibmV3dGV4dCIsICJyZW1vdmVUZW1wbGF0ZSIsICJ0ZW1wbGF0ZSIsICJ0ZW1wbGF0ZVJlZ2V4U3RyaW5nIiwgImFsbFRlbXBsYXRlcyIsICJfaXRlcmF0b3IxMiIsICJfc3RlcDEyIiwgImFsbFRlbXBsYXRlIiwgImluc2VydEFmdGVyVGVtcGxhdGVzIiwgImZsYWdzIiwgInByZVJlZ2V4IiwgImdldFRleHQiLCAidXNlcnNwYWNlTG9nZ2VyIiwgImxvZ1BhZ2VOYW1lIiwgImluaXRpYWxUZXh0IiwgImhlYWRlckxldmVsIiwgImxvZ1RleHQiLCAic3VtbWFyeVRleHQiLCAiZGVmIiwgInJlamVjdCIsICJzdGF0IiwgInRleHRSYXciLCAiZ2VuZXJhdGUiLCAidXBkYXRlIiwgIkVsZW1lbnQiLCAiaGFzQ2hpbGROb2RlcyIsICJlcnJvckV2ZW50IiwgImhhbmRsZXIiLCAic3RhdFJhdyIsICJsaW5rZWQiLCAicHJpbnRVc2VyVGV4dCIsICJjb21tZW50cyIsICJtZXNzYWdlIiwgInAiLCAiZGl2IiwgIm1hcmdpblRvcCIsICJ3aGl0ZVNwYWNlIiwgImh0bWxOb2RlIiwgImNvbG9yIiwgImpRdWVyeVNlbGVjdG9yIiwgImpRdWVyeUNvbnRleHQiLCAibGFzdENoZWNrYm94IiwgImNsaWNrSGFuZGxlciIsICJjbGlja0hhbmRsZXIyIiwgInRoaXNDYiIsICJzaGlmdEtleSIsICJjYnMiLCAiaW5kZXgiLCAibGFzdEluZGV4IiwgImVuZFN0YXRlIiwgImZpbmlzaCIsICJjbGljayIsICJvbiIsICJiYXRjaE9wZXJhdGlvbiIsICJwYWdlTGlzdCIsICJjaHVua1NpemUiLCAicHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMiLCAid29ya2VyIiwgInBvc3RGaW5pc2giLCAiY291bnRTdGFydGVkIiwgImNvdW50RmluaXNoZWQiLCAiY291bnRGaW5pc2hlZFN1Y2Nlc3MiLCAiY3VycmVudENodW5rSW5kZXgiLCAicGFnZUNodW5rcyIsICJydW5uaW5nIiwgInNldFBhZ2VMaXN0IiwgInNldE9wdGlvbiIsICJvcHRpb25OYW1lIiwgIm9wdGlvblZhbHVlIiwgInJ1biIsICJ0b3RhbCIsICJmblN0YXJ0TmV3Q2h1bmsiLCAid29ya2VyU3VjY2VzcyIsICJhcmciLCAiZm5Eb25lT25lIiwgIndvcmtlckZhaWx1cmUiLCAidGhpc1Byb3h5IiwgIl9pdGVyYXRvcjEzIiwgIl9zdGVwMTMiLCAicHJvZ3Jlc3MiLCAicm91bmQiLCAiZmxvb3IiLCAic3RhdHVzU3RyaW5nIiwgInNpbXBsZVdpbmRvdyIsICJ3aWR0aCIsICJoZWlnaHQiLCAiZGlhbG9nIiwgImF1dG9PcGVuIiwgImJ1dHRvbnMiLCAiUGxhY2Vob2xkZXIgYnV0dG9uIiwgImRpYWxvZ0NsYXNzIiwgImlubmVyV2lkdGgiLCAiY2xvc2UiLCAicmVzaXplU3RhcnQiLCAic2Nyb2xsYm94IiwgIm1heEhlaWdodCIsICJyZXNpemVTdG9wIiwgInJlc2l6ZSIsICIkd2lkZ2V0IiwgImVhY2giLCAiYnV0dG9uc3BhbiIsICJsaW5rc3NwYW4iLCAicmVzaXphYmxlIiwgImhhc0Zvb3RlckxpbmtzIiwgInNjcmlwdE5hbWUiLCAicHJldmVudERlZmF1bHQiLCAiZGlzcGxheSIsICJzY3JpcHRuYW1lc3BhbiIsICJzZXR1cFRvb2x0aXBzIiwgInBnIiwgImRpZmYiLCAicmFuU2V0dXBUb29sdGlwc0FscmVhZHkiLCAic2V0SGVpZ2h0IiwgInNldFRpdGxlIiwgInNldFNjcmlwdE5hbWUiLCAic2V0V2lkdGgiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJpbm5lckhlaWdodCIsICJzZXRDb250ZW50IiwgInB1cmdlQ29udGVudCIsICJhZGRDb250ZW50IiwgImJ1dHRvbiIsICJhZGRGb290ZXJMaW5rIiwgIndpa2lQYWdlIiwgInByZXAiLCAiJGZvb3RlcmxpbmtzIiwgImJ1bGxldCIsICJzZXRNb2RhbGl0eSIsICJtb2RhbCIsICJzZXRCdXR0b25zRW5hYmxlZCIsICJlbmFibGVkIiwgImpRdWVyeSJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21vcmViaXRzL21vcmViaXRzLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuLyohIFR3aW5rbGUuanMgLSBtb3JlYml0cy5qcyAqL1xuXG4vKipcbiAqIEEgbGlicmFyeSBmdWxsIG9mIGxvdHMgb2YgZ29vZG5lc3MgZm9yIHVzZXIgc2NyaXB0cyBvbiBNZWRpYVdpa2kgd2lraXMuXG4gKlxuICogVGhlIGhpZ2hsaWdodHMgaW5jbHVkZTpcbiAqIC0ge0BsaW5rIE1vcmViaXRzLndpa2kuYXBpfSAtIG1ha2UgY2FsbHMgdG8gdGhlIE1lZGlhV2lraSBBUElcbiAqIC0ge0BsaW5rIE1vcmViaXRzLndpa2kucGFnZX0gLSBtb2RpZnkgcGFnZXMgb24gdGhlIHdpa2kgKGVkaXQsIHJldmVydCwgZGVsZXRlLCBldGMuKVxuICogLSB7QGxpbmsgTW9yZWJpdHMuZGF0ZX0gLSBlbmhhbmNlZCBkYXRlIG9iamVjdCBwcm9jZXNzaW5nLCBzb3J0IG9mIGEgbGlnaHQgbW9tZW50LmpzXG4gKiAtIHtAbGluayBNb3JlYml0cy5xdWlja0Zvcm19IC0gZ2VuZXJhdGUgcXVpY2sgSFRNTCBmb3JtcyBvbiB0aGUgZmx5XG4gKiAtIHtAbGluayBNb3JlYml0cy5zaW1wbGVXaW5kb3d9IC0gYSB3cmFwcGVyIGZvciBqUXVlcnkgVUkgRGlhbG9nIHdpdGggYSBjdXN0b20gbG9vayBhbmQgZXh0cmEgZmVhdHVyZXNcbiAqIC0ge0BsaW5rIE1vcmViaXRzLnN0YXR1c30gLSBhIHJvdWdoLWFuZC1yZWFkeSBzdGF0dXMgbWVzc2FnZSBkaXNwbGF5ZXIsIHVzZWQgYnkgdGhlIE1vcmViaXRzLndpa2kgY2xhc3Nlc1xuICogLSB7QGxpbmsgTW9yZWJpdHMud2lraXRleHR9IC0gdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggd2lraXRleHRcbiAqIC0ge0BsaW5rIE1vcmViaXRzLnN0cmluZ30gLSB1dGlsaXRpZXMgZm9yIG1hbmlwdWxhdGluZyBzdHJpbmdzXG4gKiAtIHtAbGluayBNb3JlYml0cy5hcnJheX0gLSB1dGlsaXRpZXMgZm9yIG1hbmlwdWxhdGluZyBhcnJheXNcbiAqIC0ge0BsaW5rIE1vcmViaXRzLmlwfSAtIHV0aWxpdGllcyB0byBoZWxwIHByb2Nlc3MgSVAgYWRkcmVzc2VzXG4gKlxuICogRGVwZW5kZW5jaWVzOlxuICogLSBUaGUgd2hvbGUgdGhpbmcgcmVsaWVzIG9uIGpRdWVyeS4gIEJ1dCBtb3N0IHdpa2lzIHNob3VsZCBwcm92aWRlIHRoaXMgYnkgZGVmYXVsdC5cbiAqIC0ge0BsaW5rIE1vcmViaXRzLnF1aWNrRm9ybX0sIHtAbGluayBNb3JlYml0cy5zaW1wbGVXaW5kb3d9LCBhbmQge0BsaW5rIE1vcmViaXRzLnN0YXR1c30gcmVseSBvbiB0aGUgXCJtb3JlYml0cy5jc3NcIiBmaWxlIGZvciB0aGVpciBzdHlsaW5nLlxuICogLSB7QGxpbmsgTW9yZWJpdHMuc2ltcGxlV2luZG93fSBhbmQge0BsaW5rIE1vcmViaXRzLnF1aWNrRm9ybX0gdG9vbHRpcHMgcmVseSBvbiBqUXVlcnkgVUkgRGlhbG9nIChmcm9tIFJlc291cmNlTG9hZGVyIG1vZHVsZSBuYW1lICdqcXVlcnkudWknKS5cbiAqIC0gVG8gY3JlYXRlIGEgZ2FkZ2V0IGJhc2VkIG9uIG1vcmViaXRzLmpzLCB1c2UgdGhpcyBzeW50YXggaW4gTWVkaWFXaWtpOkdhZGdldHMtZGVmaW5pdGlvbjpcbiAqICAgICAtIGAqR2FkZ2V0TmFtZVtSZXNvdXJjZUxvYWRlcnxkZXBlbmRlbmNpZXM9bWVkaWF3aWtpLnVzZXIsbWVkaWF3aWtpLnV0aWwsbWVkaWF3aWtpLlRpdGxlLGpxdWVyeS51aV18bW9yZWJpdHMuanN8bW9yZWJpdHMuY3NzfEdhZGdldE5hbWUuanNgXG4gKiAtIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY29uZmlndXJlIG1vcmViaXRzLmpzIGFzIGEgaGlkZGVuIGdhZGdldCBpbiBNZWRpYVdpa2k6R2FkZ2V0cy1kZWZpbml0aW9uOlxuICogICAgIC0gYCptb3JlYml0c1tSZXNvdXJjZUxvYWRlcnxkZXBlbmRlbmNpZXM9bWVkaWF3aWtpLnVzZXIsbWVkaWF3aWtpLnV0aWwsbWVkaWF3aWtpLlRpdGxlLGpxdWVyeS51aXxoaWRkZW5dfG1vcmViaXRzLmpzfG1vcmViaXRzLmNzc2BcbiAqICAgICBhbmQgdGhlbiBsb2FkIGV4dC5nYWRnZXQubW9yZWJpdHMgYXMgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBuZXcgZ2FkZ2V0LlxuICpcbiAqIEFsbCB0aGUgc3R1ZmYgaGVyZSB3b3JrcyBvbiBhbGwgYnJvd3NlcnMgZm9yIHdoaWNoIE1lZGlhV2lraSBwcm92aWRlcyBKYXZhU2NyaXB0IHN1cHBvcnQuXG4gKlxuICogVGhpcyBsaWJyYXJ5IGlzIG1haW50YWluZWQgYnkgdGhlIG1haW50YWluZXJzIG9mIFR3aW5rbGUuXG4gKiBGb3IgcXVlcmllcywgc3VnZ2VzdGlvbnMsIGhlbHAsIGV0Yy4sIGhlYWQgdG8gW0hlbHA6VHdpbmtsZV0oaHR0cHM6Ly93d3cucWl1d2VuYmFpa2UuY24vd2lraS9IOlRXKS5cbiAqIFRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgc291cmNlIGlzIGF2YWlsYWJsZSBhdCB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3dpa2ltZWRpYS1nYWRnZXRzL3R3aW5rbGUvYmxvYi9tYXN0ZXIvbW9yZWJpdHMuanN8R2l0SHVifS5cbiAqXG4gKiBAcGFyYW0ge0pRdWVyeX0gJFxuICogQG5hbWVzcGFjZSBNb3JlYml0c1xuICovXG5pbXBvcnQgJy4vbW9yZWJpdHMubGVzcyc7XG5pbXBvcnQge2dlbmVyYXRlQXJyYXl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbihmdW5jdGlvbiBtb3JlYml0cygkKSB7XG5cdC8vIFdyYXAgZW50aXJlIGZpbGUgd2l0aCBhbm9ueW1vdXMgZnVuY3Rpb25cblx0LyoqIEBsZW5kcyBNb3JlYml0cyAqL1xuXHRjb25zdCBNb3JlYml0cyA9IHt9O1xuXHR3aW5kb3cuTW9yZWJpdHMgPSBNb3JlYml0czsgLy8gYWxsb3cgZ2xvYmFsIGFjY2Vzc1xuXHQvLyBObyBNb3JlYml0cy5pMThuIGF0IHRoaXMgdGltZVxuXHQvKipcblx0ICogV2lraS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgTW9yZWJpdHNcblx0ICovXG5cdE1vcmViaXRzLmwxMG4gPSB7XG5cdFx0LyoqXG5cdFx0ICogTG9jYWwgYWxpYXNlcyBmb3IgXCJyZWRpcmVjdFwiIG1hZ2ljIHdvcmQuXG5cdFx0ICogQ2hlY2sgdXNpbmcgYXBpLnBocD9hY3Rpb249cXVlcnkmZm9ybWF0PWpzb24mbWV0YT1zaXRlaW5mbyZmb3JtYXR2ZXJzaW9uPTImc2lwcm9wPW1hZ2ljd29yZHNcblx0XHQgKi9cblx0XHRyZWRpcmVjdFRhZ0FsaWFzZXM6IFsnI1JFRElSRUNUJywgJyPph43lrprlkJEnXSxcblx0XHQvKipcblx0XHQgKiBUYWtlcyBhIHN0cmluZyBhcyBhcmd1bWVudCBhbmQgY2hlY2tzIGlmIGl0IGlzIGEgdGltZXN0YW1wIG9yIG5vdFxuXHRcdCAqIElmIG5vdCwgaXQgcmV0dXJucyBudWxsLiBJZiB5ZXMsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgaW50ZWdlcnNcblx0XHQgKiBpbiB0aGUgZm9ybWF0IFt5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWludXRlLCBzZWNvbmRdXG5cdFx0ICogd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBEYXRlLlVUQygpXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG5cdFx0ICogQHJldHVybnMge251bWJlcltdIHwgbnVsbH1cblx0XHQgKi9cblx0XHRzaWduYXR1cmVUaW1lc3RhbXBGb3JtYXQ6IChzdHIpID0+IHtcblx0XHRcdGNvbnN0IHJneFVUQyA9IC8oXFxkezR9KeW5tChcXGR7MSwyfSnmnIgoXFxkezEsMn0p5pelIFxcKC5cXCkgKFxcZHsyfSk6KFxcZHsyfSkgXFwoVVRDXFwpLzsgLy8gWVlZWeW5tE1vbnRo5pyIRETml6UgKHcpIEhIOm1tIChVVEMpXG5cdFx0XHRjb25zdCByZ3hDU1QgPSAvKFxcZHs0fSnlubQoXFxkezEsMn0p5pyIKFxcZHsxLDJ9KeaXpSBcXCguXFwpIChcXGR7Mn0pOihcXGR7Mn0pIFxcKENTVFxcKS87IC8vIFlZWVnlubRNb250aOaciERE5pelICh3KSBISDptbSAoQ1NUKVxuXHRcdFx0Y29uc3QgbWF0Y2ggPSByZ3hVVEMuZXhlYyhzdHIpIHx8IHJneENTVC5leGVjKHN0cik7XG5cdFx0XHRjb25zdCBtYXRjaENTVCA9IHJneENTVC5leGVjKHN0cik7XG5cdFx0XHRpZiAoIW1hdGNoKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbW9udGggPSBNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEubW9udGhzLmluZGV4T2YobWF0Y2hbNF0pO1xuXHRcdFx0aWYgKG1vbnRoID09PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdC8vIC4uLi4uIHllYXIgLi4uLiBtb250aCAuLi4gZGF0ZSAuLi4uIGhvdXIgLi4uIG1pbnV0ZVxuXHRcdFx0cmV0dXJuIG1hdGNoQ1NUXG5cdFx0XHRcdD8gW21hdGNoWzFdLCBtYXRjaFsyXSAtIDEsIG1hdGNoWzNdLCBtYXRjaFs0XSAtIDgsIG1hdGNoWzVdXVxuXHRcdFx0XHQ6IFttYXRjaFsxXSwgbWF0Y2hbMl0gLSAxLCBtYXRjaFszXSwgbWF0Y2hbNF0sIG1hdGNoWzVdXTtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogU2ltcGxlIGhlbHBlciBmdW5jdGlvbiB0byBzZWUgd2hhdCBncm91cHMgYSB1c2VyIG1pZ2h0IGJlbG9uZy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwIC0gZS5nLiBgc3lzb3BgLCBgYXV0b2NvbmZpcm1lZGAsIGV0Yy5cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRNb3JlYml0cy51c2VySXNJbkdyb3VwID0gKGdyb3VwKSA9PiB7XG5cdFx0cmV0dXJuIG13LmNvbmZpZy5nZXQoJ3dnVXNlckdyb3VwcycpLmluY2x1ZGVzKGdyb3VwKTtcblx0fTtcblx0LyoqXG5cdCAqIEhhcmRjb2RlcyB3aGV0aGVyIHRoZSB1c2VyIGlzIGEgc3lzb3AsIHVzZWQgYSBsb3QuXG5cdCAqXG5cdCAqIEB0eXBlIHtib29sZWFufVxuXHQgKi9cblx0TW9yZWJpdHMudXNlcklzU3lzb3AgPVxuXHRcdE1vcmViaXRzLnVzZXJJc0luR3JvdXAoJ3N5c29wJykgfHwgTW9yZWJpdHMudXNlcklzSW5Hcm91cCgnc3Rld2FyZCcpIHx8IE1vcmViaXRzLnVzZXJJc0luR3JvdXAoJ3FpdXdlbicpO1xuXHQvKipcblx0ICogRGVwcmVjYXRlZCBhcyBvZiBGZWJydWFyeSAyMDIxLCB1c2Uge0BsaW5rIE1vcmViaXRzLmlwLnNhbml0aXplSVB2Nn0uXG5cdCAqXG5cdCAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgTW9yZWJpdHMuaXAuc2FuaXRpemVJUHY2fS5cblx0ICogQ29udmVydHMgYW4gSVB2NiBhZGRyZXNzIHRvIHRoZSBjYW5vbmljYWwgZm9ybSBzdG9yZWQgYW5kIHVzZWQgYnkgTWVkaWFXaWtpLlxuXHQgKiBKYXZhU2NyaXB0IHRyYW5zbGF0aW9uIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9nZXJyaXQud2lraW1lZGlhLm9yZy9yL3BsdWdpbnMvZ2l0aWxlcy9tZWRpYXdpa2kvY29yZS8rLzhlYjZhYzNlODRlYTMzMTJkMzkxY2E5NmMxMmM0OWUzYWQwNzUzYmIvaW5jbHVkZXMvdXRpbHMvSVAucGhwIzEzMXxgSVA6OnNhbml0aXplSVAoKWB9XG5cdCAqIGZ1bmN0aW9uIGZyb20gdGhlIElQVXRpbHMgbGlicmFyeS4gIEFkZHJlc3NlcyBhcmUgdmVyYm9zZSwgdXBwZXJjYXNlLFxuXHQgKiBub3JtYWxpemVkLCBhbmQgZXhwYW5kZWQgdG8gOCB3b3Jkcy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgSVB2NiBhZGRyZXNzLCB3aXRoIG9yIHdpdGhvdXQgQ0lEUi5cblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdE1vcmViaXRzLnNhbml0aXplSVB2NiA9IChhZGRyZXNzKSA9PiB7XG5cdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0J1tNb3JlYml0c10gTk9URTogTW9yZWJpdHMuc2FuaXRpemVJUHY2IHdhcyByZW5hbWVkIHRvIE1vcmViaXRzLmlwLnNhbml0aXplSVB2NiBpbiBGZWJydWFyeSAyMDIxLCBwbGVhc2UgdXNlIHRoYXQgaW5zdGVhZCdcblx0XHQpO1xuXHRcdHJldHVybiBNb3JlYml0cy5pcC5zYW5pdGl6ZUlQdjYoYWRkcmVzcyk7XG5cdH07XG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgcGFnZSBpcyBhIHJlZGlyZWN0IG9yIHNvZnQgcmVkaXJlY3QuIEZhaWxzXG5cdCAqIHRvIGRldGVjdCBzb2Z0IHJlZGlyZWN0cyBvbiBlZGl0LCBoaXN0b3J5LCBldGMuIHBhZ2VzLiAgV2lsbCBhdHRlbXB0IHRvXG5cdCAqIGRldGVjdCBNb2R1bGU6UmZELCB3aXRoIHRoZSBzYW1lIGZhaWx1cmUgcG9pbnRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdE1vcmViaXRzLmlzUGFnZVJlZGlyZWN0ID0gKCkgPT4ge1xuXHRcdHJldHVybiAhIShcblx0XHRcdG13LmNvbmZpZy5nZXQoJ3dnSXNSZWRpcmVjdCcpIHx8XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc29mdHJlZGlyZWN0JykgfHxcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ib3gtUmZEJykgfHxcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ib3gtUmVkaXJlY3RfY2F0ZWdvcnlfc2hlbGwnKVxuXHRcdCk7XG5cdH07XG5cdC8qKlxuXHQgKiBTdG9yZXMgYSBub3JtYWxpemVkICh1bmRlcnNjb3JlcyBjb252ZXJ0ZWQgdG8gc3BhY2VzKSB2ZXJzaW9uIG9mIHRoZVxuXHQgKiBgd2dQYWdlTmFtZWAgdmFyaWFibGUuXG5cdCAqXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRNb3JlYml0cy5wYWdlTmFtZU5vcm0gPSBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykucmVwbGFjZSgvXy9nLCAnICcpO1xuXHQvKipcblx0ICogQ3JlYXRlIGEgc3RyaW5nIGZvciB1c2UgaW4gcmVnZXggbWF0Y2hpbmcgYSBwYWdlIG5hbWUuICBBY2NvdW50cyBmb3Jcblx0ICogbGVhZGluZyBjaGFyYWN0ZXIncyBjYXBpdGFsaXphdGlvbiwgdW5kZXJzY29yZXMgYXMgc3BhY2VzLCBhbmQgc3BlY2lhbFxuXHQgKiBjaGFyYWN0ZXJzIGJlaW5nIGVzY2FwZWQuICBTZWUgYWxzbyB7QGxpbmsgTW9yZWJpdHMubmFtZXNwYWNlUmVnZXh9LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGFnZU5hbWUgLSBQYWdlIG5hbWUgd2l0aG91dCBuYW1lc3BhY2UuXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRm9yIGEgcGFnZSBuYW1lIGBGb28gYmFyYCwgcmV0dXJucyB0aGUgc3RyaW5nIGBbRmZdb29bXyBdYmFyYC5cblx0ICovXG5cdE1vcmViaXRzLnBhZ2VOYW1lUmVnZXggPSAocGFnZU5hbWUpID0+IHtcblx0XHRpZiAocGFnZU5hbWUgPT09ICcnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdGNvbnN0IFtmaXJzdENoYXJdID0gcGFnZU5hbWU7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTW9yZWJpdHMuc3RyaW5nLmVzY2FwZVJlZ0V4cChwYWdlTmFtZS5zbGljZSgxKSk7XG5cdFx0aWYgKG13LlRpdGxlLnBocENoYXJUb1VwcGVyKGZpcnN0Q2hhcikgIT09IGZpcnN0Q2hhci50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRyZXR1cm4gYFske213LlRpdGxlLnBocENoYXJUb1VwcGVyKGZpcnN0Q2hhcil9JHtmaXJzdENoYXIudG9Mb3dlckNhc2UoKX1dJHtyZW1haW5kZXJ9YDtcblx0XHR9XG5cdFx0cmV0dXJuIE1vcmViaXRzLnN0cmluZy5lc2NhcGVSZWdFeHAoZmlyc3RDaGFyKSArIHJlbWFpbmRlcjtcblx0fTtcblx0LyoqXG5cdCAqIENvbnZlcnRzIHN0cmluZyBvciBhcnJheSBvZiBET00gbm9kZXMgaW50byBhbiBIVE1MIGZyYWdtZW50LlxuXHQgKiBXaWtpbGluayBzeW50YXggKGBbWy4uLl1dYCkgaXMgdHJhbnNmb3JtZWQgaW50byBIVE1MIGFuY2hvci5cblx0ICogVXNlZCBpbiBNb3JlYml0cy5xdWlja0Zvcm0gYW5kIE1vcmViaXRzLnN0YXR1c1xuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICogQHBhcmFtIHtzdHJpbmd8Tm9kZXwoc3RyaW5nfE5vZGUpW119IGlucHV0XG5cdCAqIEByZXR1cm5zIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMuY3JlYXRlSHRtbCA9IChpbnB1dCkgPT4ge1xuXHRcdGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdGlmICghaW5wdXQpIHtcblx0XHRcdHJldHVybiBmcmFnbWVudDtcblx0XHR9XG5cdFx0aW5wdXQgPSBnZW5lcmF0ZUFycmF5KGlucHV0KTtcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaW5wdXQpIHtcblx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiAkLnBhcnNlSFRNTChNb3JlYml0cy5jcmVhdGVIdG1sLnJlbmRlcldpa2lsaW5rcyhlbGVtZW50KSkpIHtcblx0XHRcdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZnJhZ21lbnQ7XG5cdH07XG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB3aWtpbGlua3MgdG8gSFRNTCBhbmNob3IgdGFncy5cblx0ICpcblx0ICogQHBhcmFtIHRleHRcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRNb3JlYml0cy5jcmVhdGVIdG1sLnJlbmRlcldpa2lsaW5rcyA9ICh0ZXh0KSA9PiB7XG5cdFx0Y29uc3QgdWIgPSBuZXcgTW9yZWJpdHMudW5iaW5kZXIodGV4dCk7XG5cdFx0Ly8gRG9uJ3QgY29udmVydCB3aWtpbGlua3Mgd2l0aGluIGNvZGUgdGFncyBhcyB0aGV5J3JlIHVzZWQgZm9yIGRpc3BsYXlpbmcgd2lraS1jb2RlXG5cdFx0dWIudW5iaW5kKCc8Y29kZT4nLCAnPC9jb2RlPicpO1xuXHRcdHViLmNvbnRlbnQgPSB1Yi5jb250ZW50LnJlcGxhY2UoL1xcW1xcWzo/KD86KFtefFxcXV0rPylcXHwpPyhbXlxcXXxdKz8pXFxdXFxdL2csIChfLCB0YXJnZXQsIHRleHRfKSA9PiB7XG5cdFx0XHR0YXJnZXQgfHw9IHRleHRfO1xuXHRcdFx0cmV0dXJuIGA8YSByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIke213LnV0aWwuZ2V0VXJsKHRhcmdldCl9XCIgdGl0bGU9XCIke3RhcmdldC5yZXBsYWNlKFxuXHRcdFx0XHQvXCIvZyxcblx0XHRcdFx0JyYjMzQ7J1xuXHRcdFx0KX1cIj4ke3RleHRffTwvYT5gO1xuXHRcdH0pO1xuXHRcdHJldHVybiB1Yi5yZWJpbmQoKTtcblx0fTtcblx0LyoqXG5cdCAqIENyZWF0ZSBhIHN0cmluZyBmb3IgdXNlIGluIHJlZ2V4IG1hdGNoaW5nIGFsbCBuYW1lc3BhY2UgYWxpYXNlcywgcmVnYXJkbGVzc1xuXHQgKiBvZiB0aGUgY2FwaXRhbGl6YXRpb24gYW5kIHVuZGVyc2NvcmVzL3NwYWNlcy4gIERvZXNuJ3QgaW5jbHVkZSB0aGUgb3B0aW9uYWxcblx0ICogbGVhZGluZyBgOmAsIGJ1dCBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgaXRlbSwgd3JhcHMgdGhlIGxpc3QgaW4gYVxuXHQgKiBub24tY2FwdHVyaW5nIGdyb3VwLiAgVGhpcyBtZWFucyB5b3UgY2FuIGRvIGBNb3JlYml0cy5uYW1lc3BhY2VSZWdleChbNF0pICtcblx0ICogJzonICsgTW9yZWJpdHMucGFnZU5hbWVSZWdleCgnVHdpbmtsZScpYCB0byBtYXRjaCBhIGZ1bGwgcGFnZS4gIFVzZXNcblx0ICoge0BsaW5rIE1vcmViaXRzLnBhZ2VOYW1lUmVnZXh9LlxuXHQgKlxuXHQgKiBAcGFyYW0ge251bWJlcltdfSBuYW1lc3BhY2VzIC0gQXJyYXkgb2YgbmFtZXNwYWNlIG51bWJlcnMuICBVbnVzZWQvaW52YWxpZFxuXHQgKiBuYW1lc3BhY2UgbnVtYmVycyBhcmUgc2lsZW50bHkgZGlzY2FyZGVkLlxuXHQgKiBAZXhhbXBsZVxuXHQgKiAvLyByZXR1cm5zICcoPzpbRmZdW0lpXVtMbF1bRWVdfFtJaV1bTW1dW0FhXVtHZ11bRWVdKSdcblx0ICogTW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoWzZdKVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlZ2V4LXN1aXRhYmxlIHN0cmluZyBvZiBhbGwgbmFtZXNwYWNlIGFsaWFzZXMuXG5cdCAqL1xuXHRNb3JlYml0cy5uYW1lc3BhY2VSZWdleCA9IChuYW1lc3BhY2VzKSA9PiB7XG5cdFx0bmFtZXNwYWNlcyA9IGdlbmVyYXRlQXJyYXkobmFtZXNwYWNlcyk7XG5cdFx0Y29uc3QgYWxpYXNlcyA9IFtdO1xuXHRcdGxldCByZWdleDtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBudW1iZXJdIG9mIE9iamVjdC5lbnRyaWVzKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlSWRzJykpKSB7XG5cdFx0XHRpZiAobmFtZXNwYWNlcy5pbmNsdWRlcyhudW1iZXIpKSB7XG5cdFx0XHRcdC8vIE5hbWVzcGFjZXMgYXJlIGNvbXBsZXRlbHkgYWdub3N0aWMgYXMgdG8gY2FzZSxcblx0XHRcdFx0Ly8gYW5kIGEgcmVnZXggc3RyaW5nIGlzIG1vcmUgdXNlZnVsL2NvbXBhdGlibGUgdGhhbiBhIFJlZ0V4cCBvYmplY3QsXG5cdFx0XHRcdC8vIHNvIHdlIGFjY2VwdCBhbnkgY2FzaW5nIGZvciBhbnkgbGV0dGVyLlxuXHRcdFx0XHRhbGlhc2VzW2FsaWFzZXMubGVuZ3RoXSA9IFsuLi5uYW1lXVxuXHRcdFx0XHRcdC5tYXAoKGNoYXIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBNb3JlYml0cy5wYWdlTmFtZVJlZ2V4KGNoYXIpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oJycpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRzd2l0Y2ggKGFsaWFzZXMubGVuZ3RoKSB7XG5cdFx0XHRjYXNlIDA6XG5cdFx0XHRcdHJlZ2V4ID0gJyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRbcmVnZXhdID0gYWxpYXNlcztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZWdleCA9IGAoPzoke2FsaWFzZXMuam9pbignfCcpfSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHJlZ2V4O1xuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLnF1aWNrRm9ybSAqKioqKioqKioqKioqKioqICovXG5cdC8qKlxuXHQgKiBDcmVhdGlvbiBvZiBzaW1wbGUgYW5kIHN0YW5kYXJkIGZvcm1zIHdpdGhvdXQgbXVjaCBzcGVjaWZpYyBjb2RpbmcuXG5cdCAqXG5cdCAqIEBuYW1lc3BhY2UgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtldmVudH0gZXZlbnQgLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gZm9ybSBpcyBzdWJtaXR0ZWQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRUeXBlPXN1Ym1pdF0gLSBUeXBlIG9mIHRoZSBldmVudC5cblx0ICovXG5cdE1vcmViaXRzLnF1aWNrRm9ybSA9IGZ1bmN0aW9uIChldmVudCwgZXZlbnRUeXBlKSB7XG5cdFx0dGhpcy5yb290ID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0XHRcdHR5cGU6ICdmb3JtJyxcblx0XHRcdGV2ZW50LFxuXHRcdFx0ZXZlbnRUeXBlLFxuXHRcdH0pO1xuXHR9O1xuXHQvKipcblx0ICogUmVuZGVycyB0aGUgSFRNTCBvdXRwdXQgb2YgdGhlIHF1aWNrRm9ybS5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRjb25zdCByZXQgPSB0aGlzLnJvb3QucmVuZGVyKCk7XG5cdFx0cmV0Lm5hbWVzID0ge307XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcblx0LyoqXG5cdCAqIEFwcGVuZCBlbGVtZW50IHRvIHRoZSBmb3JtLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7KG9iamVjdHxNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCl9IGRhdGEgLSBBIHF1aWNrZm9ybSBlbGVtZW50LCBvciB0aGUgb2JqZWN0IHdpdGggd2hpY2hcblx0ICogYSBxdWlja2Zvcm0gZWxlbWVudCBpcyBjb25zdHJ1Y3RlZC5cblx0ICogQHJldHVybnMge01vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50fSAtIFNhbWUgYXMgd2hhdCBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdHJldHVybiB0aGlzLnJvb3QuYXBwZW5kKGRhdGEpO1xuXHR9O1xuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGVsZW1lbnQgZm9yIHRoZSB0aGUgZm9ybS5cblx0ICpcblx0ICogSW5kZXggdG8gTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQgdHlwZXM6XG5cdCAqIC0gR2xvYmFsIGF0dHJpYnV0ZXM6IGlkLCBjbGFzc05hbWUsIHN0eWxlLCB0b29sdGlwLCBleHRyYSwgJGRhdGEsIGFkbWlub25seVxuXHQgKiAtIGBzZWxlY3RgOiBBIGNvbWJvIGJveCAoYWthIGRyb3AtZG93bikuXG5cdCAqICAgICAtIEF0dHJpYnV0ZXM6IG5hbWUsIGxhYmVsLCBtdWx0aXBsZSwgc2l6ZSwgbGlzdCwgZXZlbnQsIGRpc2FibGVkXG5cdCAqICAtIGBvcHRpb25gOiBBbiBlbGVtZW50IGZvciBhIGNvbWJvIGJveC5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IHZhbHVlLCBsYWJlbCwgc2VsZWN0ZWQsIGRpc2FibGVkXG5cdCAqICAtIGBvcHRncm91cGA6IEEgZ3JvdXAgb2YgXCJvcHRpb25cInMuXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBsYWJlbCwgbGlzdFxuXHQgKiAgLSBgZmllbGRgOiBBIGZpZWxkc2V0IChha2EgZ3JvdXAgYm94KS5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IG5hbWUsIGxhYmVsLCBkaXNhYmxlZFxuXHQgKiAgLSBgY2hlY2tib3hgOiBBIGNoZWNrYm94LiBNdXN0IHVzZSBcImxpc3RcIiBwYXJhbWV0ZXIuXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCBsaXN0LCBldmVudFxuXHQgKiAgICAgIC0gQXR0cmlidXRlcyAod2l0aGluIGxpc3QpOiBuYW1lLCBsYWJlbCwgdmFsdWUsIGNoZWNrZWQsIGRpc2FibGVkLCBldmVudCwgc3ViZ3JvdXBcblx0ICogIC0gYHJhZGlvYDogQSByYWRpbyBidXR0b24uIE11c3QgdXNlIFwibGlzdFwiIHBhcmFtZXRlci5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IG5hbWUsIGxpc3QsIGV2ZW50XG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzICh3aXRoaW4gbGlzdCk6IG5hbWUsIGxhYmVsLCB2YWx1ZSwgY2hlY2tlZCwgZGlzYWJsZWQsIGV2ZW50LCBzdWJncm91cFxuXHQgKiAgLSBgaW5wdXRgOiBBIHRleHQgaW5wdXQgYm94LlxuXHQgKiAgICAgIC0gQXR0cmlidXRlczogbmFtZSwgbGFiZWwsIHZhbHVlLCBzaXplLCBwbGFjZWhvbGRlciwgbWF4bGVuZ3RoLCBkaXNhYmxlZCwgcmVxdWlyZWQsIHJlYWRvbmx5LCBldmVudFxuXHQgKiAgLSBgbnVtYmVyYDogQSBudW1iZXIgaW5wdXQgYm94LlxuXHQgKiAgICAgIC0gQXR0cmlidXRlczogRXZlcnl0aGluZyB0aGUgdGV4dCBgaW5wdXRgIGhhcywgYXMgd2VsbCBhczogbWluLCBtYXgsIHN0ZXAsIGxpc3Rcblx0ICogIC0gYGR5bmlucHV0YDogQSBzZXQgb2YgdGV4dCBib3hlcyB3aXRoIFwiUmVtb3ZlXCIgYnV0dG9ucyBhbmQgYW4gXCJBZGRcIiBidXR0b24uXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCBsYWJlbCwgbWluLCBtYXgsIHN1YmxhYmVsLCB2YWx1ZSwgc2l6ZSwgbWF4bGVuZ3RoLCBldmVudFxuXHQgKiAgLSBgaGlkZGVuYDogQW4gaW52aXNpYmxlIGZvcm0gZmllbGQuXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCB2YWx1ZVxuXHQgKiAgLSBgaGVhZGVyYDogQSBsZXZlbCA1IGhlYWRlci5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IGxhYmVsXG5cdCAqICAtIGBkaXZgOiBBIGdlbmVyaWMgcGxhY2Vob2xkZXIgZWxlbWVudCBvciBsYWJlbC5cblx0ICogICAgICAtIEF0dHJpYnV0ZXM6IG5hbWUsIGxhYmVsXG5cdCAqICAtIGBzdWJtaXRgOiBBIHN1Ym1pdCBidXR0b24uIE1vcmViaXRzLnNpbXBsZVdpbmRvdyBtb3ZlcyB0aGVzZSB0byB0aGUgZm9vdGVyIG9mIHRoZSBkaWFsb2cuXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCBsYWJlbCwgZGlzYWJsZWRcblx0ICogIC0gYGJ1dHRvbmA6IEEgZ2VuZXJpYyBidXR0b24uXG5cdCAqICAgICAgLSBBdHRyaWJ1dGVzOiBuYW1lLCBsYWJlbCwgZGlzYWJsZWQsIGV2ZW50XG5cdCAqICAtIGB0ZXh0YXJlYWA6IEEgYmlnLCBtdWx0aS1saW5lIHRleHQgYm94LlxuXHQgKiAgICAgIC0gQXR0cmlidXRlczogbmFtZSwgbGFiZWwsIHZhbHVlLCBjb2xzLCByb3dzLCBkaXNhYmxlZCwgcmVxdWlyZWQsIHJlYWRvbmx5XG5cdCAqICAtIGBmcmFnbWVudGA6IEEgRG9jdW1lbnRGcmFnbWVudCBvYmplY3QuXG5cdCAqICAgICAgLSBObyBhdHRyaWJ1dGVzLCBhbmQgbm8gZ2xvYmFsIGF0dHJpYnV0ZXMgZXhjZXB0IGFkbWlub25seS5cblx0ICogVGhlcmUgaXMgc29tZSBkaWZmZXJlbmNlIG9uIGhvdyB0eXBlcyBoYW5kbGUgdGhlIGBsYWJlbGAgYXR0cmlidXRlOlxuXHQgKiAtIGBkaXZgLCBgc2VsZWN0YCwgYGZpZWxkYCwgYGNoZWNrYm94YC9gcmFkaW9gLCBgaW5wdXRgLCBgdGV4dGFyZWFgLCBgaGVhZGVyYCwgYW5kIGBkeW5pbnB1dGAgY2FuIGFjY2VwdCBhbiBhcnJheSBvZiBpdGVtcyxcblx0ICogYW5kIHRoZSBsYWJlbCBpdGVtKHMpIGNhbiBiZSBgRWxlbWVudGBzLlxuXHQgKiAtIGBvcHRpb25gLCBgb3B0Z3JvdXBgLCBgX2R5bmlucHV0X2VsZW1lbnRgLCBgc3VibWl0YCwgYW5kIGBidXR0b25gIGFjY2VwdCBvbmx5IGEgc2luZ2xlIHN0cmluZy5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBxdWlja2Zvcm0gZWxlbWVudC4gU2hvdWxkXG5cdCAqIHNwZWNpZnkgb25lIG9mIHRoZSBhdmFpbGFibGUgdHlwZXMgZnJvbSB0aGUgaW5kZXggYWJvdmUsIGFzIHdlbGwgYXMgYW55XG5cdCAqIHJlbGV2YW50IGFuZCBhdmFpbGFibGUgYXR0cmlidXRlcy5cblx0ICogQGV4YW1wbGUgbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHtcblx0ICogICAgIG5hbWU6ICd0YXJnZXQnLFxuXHQgKiAgICAgdHlwZTogJ2lucHV0Jyxcblx0ICogICAgIGxhYmVsOiAnWW91ciB0YXJnZXQ6Jyxcblx0ICogICAgIHRvb2x0aXA6ICdFbnRlciB5b3VyIHRhcmdldC4gUmVxdWlyZWQuJyxcblx0ICogICAgIHJlcXVpcmVkOiB0cnVlXG5cdCAqIH0pO1xuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cdFx0dGhpcy5jaGlsZHMgPSBbXTtcblx0fTtcblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudFxuXHQgKiBAdHlwZSB7bnVtYmVyfVxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQuaWQgPSAwO1xuXHQvKipcblx0ICogQXBwZW5kcyBhbiBlbGVtZW50IHRvIGN1cnJlbnQgZWxlbWVudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50XG5cdCAqIEBwYXJhbSB7TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnR9IGRhdGEgLSBBIHF1aWNrRm9ybSBlbGVtZW50IG9yIHRoZSBvYmplY3QgcmVxdWlyZWQgdG9cblx0ICogY3JlYXRlIHRoZSBxdWlja0Zvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMge01vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50fSBUaGUgc2FtZSBlbGVtZW50IHBhc3NlZCBpbi5cblx0ICovXG5cdE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdGxldCBjaGlsZDtcblx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KSB7XG5cdFx0XHRjaGlsZCA9IGRhdGE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoaWxkID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KGRhdGEpO1xuXHRcdH1cblx0XHR0aGlzLmNoaWxkc1t0aGlzLmNoaWxkcy5sZW5ndGhdID0gY2hpbGQ7XG5cdFx0cmV0dXJuIGNoaWxkO1xuXHR9O1xuXHQvKipcblx0ICogUmVuZGVycyB0aGUgSFRNTCBvdXRwdXQgZm9yIHRoZSBxdWlja0Zvcm0gZWxlbWVudC4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZFxuXHQgKiB3aXRob3V0IHBhcmFtZXRlcnM6IGBmb3JtLnJlbmRlcigpYC5cblx0ICpcblx0ICogQHBhcmFtIHtudW1iZXJ9IGludGVybmFsU3ViZ3JvdXBJZFxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnRcblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChpbnRlcm5hbFN1Ymdyb3VwSWQpIHtcblx0XHRjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMuY29tcHV0ZSh0aGlzLmRhdGEsIGludGVybmFsU3ViZ3JvdXBJZCk7XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcykge1xuXHRcdFx0Ly8gZG8gbm90IHBhc3MgaW50ZXJuYWxfc3ViZ3JvdXBfaWQgdG8gcmVjdXJzaXZlIGNhbGxzXG5cdFx0XHRjdXJyZW50Tm9kZVsxXS5hcHBlbmRDaGlsZChjaGlsZC5yZW5kZXIoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjdXJyZW50Tm9kZVswXTtcblx0fTtcblx0LyoqXG5cdCAqIEBwYXJhbSB7Kn0gZGF0YVxuXHQgKiBAcGFyYW0ge251bWJlcn0gaW5JZFxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnRcblx0ICovXG5cdE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50LnByb3RvdHlwZS5jb21wdXRlID0gZnVuY3Rpb24gKGRhdGEsIGluSWQpIHtcblx0XHRsZXQgbm9kZTtcblx0XHRsZXQgY2hpbGRDb250YWluZXIgPSBudWxsO1xuXHRcdGxldCBsYWJlbDtcblx0XHRjb25zdCBpZCA9IGAke2luSWQgPyBgJHtpbklkfV9gIDogJyd9bm9kZV8ke01vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50LmlkKyt9YDtcblx0XHRpZiAoZGF0YS5hZG1pbm9ubHkgJiYgIU1vcmViaXRzLnVzZXJJc1N5c29wKSB7XG5cdFx0XHQvLyBoZWxsIGhhY2sgYWxwaGFcblx0XHRcdGRhdGEudHlwZSA9ICdoaWRkZW4nO1xuXHRcdH1cblx0XHRsZXQgaTtcblx0XHRsZXQgY3VycmVudDtcblx0XHRsZXQgc3Vibm9kZTtcblx0XHRzd2l0Y2ggKGRhdGEudHlwZSkge1xuXHRcdFx0Y2FzZSAnZm9ybSc6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG5cdFx0XHRcdG5vZGUuY2xhc3NOYW1lID0gJ3F1aWNrZm9ybSc7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdhY3Rpb24nLCAnamF2YXNjcmlwdDp2b2lkKDApOycpO1xuXHRcdFx0XHRpZiAoZGF0YS5ldmVudCkge1xuXHRcdFx0XHRcdG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihkYXRhLmV2ZW50VHlwZSB8fCAnc3VibWl0JywgZGF0YS5ldmVudCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZnJhZ21lbnQnOlxuXHRcdFx0XHRub2RlID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdFx0XHQvLyBmcmFnbWVudHMgY2FuJ3QgaGF2ZSBhbnkgYXR0cmlidXRlcywgc28ganVzdCByZXR1cm4gaXQgc3RyYWlnaHQgYXdheVxuXHRcdFx0XHRyZXR1cm4gW25vZGUsIG5vZGVdO1xuXHRcdFx0Y2FzZSAnc2VsZWN0Jzoge1xuXHRcdFx0XHRub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdpZCcsIGBkaXZfJHtpZH1gKTtcblx0XHRcdFx0aWYgKGRhdGEubGFiZWwpIHtcblx0XHRcdFx0XHRsYWJlbCA9IG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKSk7XG5cdFx0XHRcdFx0bGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCBpZCk7XG5cdFx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoTW9yZWJpdHMuY3JlYXRlSHRtbChkYXRhLmxhYmVsKSk7XG5cdFx0XHRcdFx0Ly8gTm8gbWFyZ2luXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzZWxlY3QgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpKTtcblx0XHRcdFx0aWYgKGRhdGEuZXZlbnQpIHtcblx0XHRcdFx0XHRzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZGF0YS5ldmVudCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0c2VsZWN0LnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5zaXplKSB7XG5cdFx0XHRcdFx0c2VsZWN0LnNldEF0dHJpYnV0ZSgnc2l6ZScsIGRhdGEuc2l6ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEuZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRzZWxlY3QuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNlbGVjdC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYXRhLm5hbWUpO1xuXHRcdFx0XHRpZiAoZGF0YS5saXN0KSB7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGlzdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Y3VycmVudCA9IGRhdGEubGlzdFtpXTtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50Lmxpc3QpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudC50eXBlID0gJ29wdGdyb3VwJztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnQudHlwZSA9ICdvcHRpb24nO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c3Vibm9kZSA9IHRoaXMuY29tcHV0ZShjdXJyZW50KTtcblx0XHRcdFx0XHRcdHNlbGVjdC5hcHBlbmRDaGlsZChzdWJub2RlWzBdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBzZWxlY3Q7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnb3B0aW9uJzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXHRcdFx0XHRub2RlLnZhbHVlcyA9IGRhdGEudmFsdWU7XG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEudmFsdWUpO1xuXHRcdFx0XHRpZiAoZGF0YS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0bm9kZS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQWRkIGhpZGRlbiBhdHRyXG5cdFx0XHRcdGlmIChkYXRhLmhpZGRlbikge1xuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoJ2xhYmVsJywgZGF0YS5sYWJlbCk7XG5cdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YS5sYWJlbCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ29wdGdyb3VwJzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJyk7XG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdsYWJlbCcsIGRhdGEubGFiZWwpO1xuXHRcdFx0XHRpZiAoZGF0YS5saXN0KSB7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGlzdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Y3VycmVudCA9IGRhdGEubGlzdFtpXTtcblx0XHRcdFx0XHRcdGN1cnJlbnQudHlwZSA9ICdvcHRpb24nOyAvLyBtdXN0IGJlIG9wdGlvbnMgaGVyZVxuXHRcdFx0XHRcdFx0c3Vibm9kZSA9IHRoaXMuY29tcHV0ZShjdXJyZW50KTtcblx0XHRcdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoc3Vibm9kZVswXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnZmllbGQnOlxuXHRcdFx0XHRub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTtcblx0XHRcdFx0bGFiZWwgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xlZ2VuZCcpKTtcblx0XHRcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoTW9yZWJpdHMuY3JlYXRlSHRtbChkYXRhLmxhYmVsKSk7XG5cdFx0XHRcdGlmIChkYXRhLm5hbWUpIHtcblx0XHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnbmFtZScsIGRhdGEubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEuZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRub2RlLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2NoZWNrYm94Jzpcblx0XHRcdGNhc2UgJ3JhZGlvJzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0XHRpZiAoZGF0YS5saXN0KSB7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGlzdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY3VySWQgPSBgJHtpZH1fJHtpfWA7XG5cdFx0XHRcdFx0XHRjdXJyZW50ID0gZGF0YS5saXN0W2ldO1xuXHRcdFx0XHRcdFx0bGV0IGN1ckRpdjtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50LnR5cGUgPT09ICdoZWFkZXInKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlubGluZSBoYWNrXG5cdFx0XHRcdFx0XHRcdGN1ckRpdiA9IG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDYnKSk7XG5cdFx0XHRcdFx0XHRcdGN1ckRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjdXJyZW50LmxhYmVsKSk7XG5cdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50LnRvb2x0aXApIHtcblx0XHRcdFx0XHRcdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudC5nZW5lcmF0ZVRvb2x0aXAoY3VyRGl2LCBjdXJyZW50KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1ckRpdiA9IG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXHRcdFx0XHRcdFx0Ly8gQWRkIGhpZGRlbiBhdHRyXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudC5oaWRkZW4pIHtcblx0XHRcdFx0XHRcdFx0Y3VyRGl2LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c3Vibm9kZSA9IGN1ckRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTtcblx0XHRcdFx0XHRcdHN1Ym5vZGUudmFsdWVzID0gY3VycmVudC52YWx1ZTtcblx0XHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGN1cnJlbnQudmFsdWUpO1xuXHRcdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBkYXRhLnR5cGUpO1xuXHRcdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VySWQpO1xuXHRcdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBjdXJyZW50Lm5hbWUgfHwgZGF0YS5uYW1lKTtcblx0XHRcdFx0XHRcdC8vIElmIG5hbWUgaXMgcHJvdmlkZWQgb24gdGhlIGluZGl2aWR1YWwgY2hlY2tib3gsIGFkZCBhIGRhdGEtc2luZ2xlXG5cdFx0XHRcdFx0XHQvLyBhdHRyaWJ1dGUgd2hpY2ggaW5kaWNhdGVzIGl0IGlzbid0IHBhcnQgb2YgYSBsaXN0IG9mIGNoZWNrYm94ZXMgd2l0aFxuXHRcdFx0XHRcdFx0Ly8gc2FtZSBuYW1lLiBVc2VkIGluIGdldElucHV0RGF0YSgpXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudC5uYW1lKSB7XG5cdFx0XHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXNpbmdsZScsICdkYXRhLXNpbmdsZScpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnQuY2hlY2tlZCkge1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnQuZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdFx0c3Vibm9kZS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsYWJlbCA9IGN1ckRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpKTtcblx0XHRcdFx0XHRcdGxhYmVsLmFwcGVuZENoaWxkKE1vcmViaXRzLmNyZWF0ZUh0bWwoY3VycmVudC5sYWJlbCkpO1xuXHRcdFx0XHRcdFx0bGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCBjdXJJZCk7XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudC50b29sdGlwKSB7XG5cdFx0XHRcdFx0XHRcdE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50LmdlbmVyYXRlVG9vbHRpcChsYWJlbCwgY3VycmVudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBzdHlsZXMgZ28gb24gdGhlIGxhYmVsLCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gc3R5bGUgYSBjaGVja2JveC9yYWRpb1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnQuc3R5bGUpIHtcblx0XHRcdFx0XHRcdFx0bGFiZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGN1cnJlbnQuc3R5bGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IGV2ZW50O1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnQuc3ViZ3JvdXApIHtcblx0XHRcdFx0XHRcdFx0bGV0IHRtcGdyb3VwID0gY3VycmVudC5zdWJncm91cDtcblx0XHRcdFx0XHRcdFx0dG1wZ3JvdXAgPSBnZW5lcmF0ZUFycmF5KHRtcGdyb3VwKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3ViZ3JvdXBSYXcgPSBuZXcgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdkaXYnLFxuXHRcdFx0XHRcdFx0XHRcdGlkOiBgJHtpZH1fJHtpfV9zdWJncm91cGAsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHRtcGdyb3VwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3RWwgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQuLi5lbCxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdG5ld0VsLnR5cGUgfHw9IGRhdGEudHlwZTtcblx0XHRcdFx0XHRcdFx0XHRuZXdFbC5uYW1lID0gYCR7Y3VycmVudC5uYW1lIHx8IGRhdGEubmFtZX0uJHtuZXdFbC5uYW1lfWA7XG5cdFx0XHRcdFx0XHRcdFx0c3ViZ3JvdXBSYXcuYXBwZW5kKG5ld0VsKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJncm91cCA9IHN1Ymdyb3VwUmF3LnJlbmRlcihjdXJJZCk7XG5cdFx0XHRcdFx0XHRcdHN1Ymdyb3VwLmNsYXNzTmFtZSA9ICdxdWlja2Zvcm1TdWJncm91cCc7XG5cdFx0XHRcdFx0XHRcdHN1Ym5vZGUuc3ViZ3JvdXAgPSBzdWJncm91cDtcblx0XHRcdFx0XHRcdFx0c3Vibm9kZS5zaG93biA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRldmVudCA9IChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGUudGFyZ2V0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZS50YXJnZXQuc3ViZ3JvdXApO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LnR5cGUgPT09ICdyYWRpbycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qge25hbWV9ID0gZS50YXJnZXQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdLnN1Ymdyb3VwXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdID0gZS50YXJnZXQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGUudGFyZ2V0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS50YXJnZXQuc3ViZ3JvdXApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0c3Vibm9kZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBldmVudCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50LmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRzdWJub2RlLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoc3ViZ3JvdXApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ3JhZGlvJykge1xuXHRcdFx0XHRcdFx0XHRldmVudCA9IChlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHtuYW1lfSA9IGUudGFyZ2V0O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmZvcm0ubmFtZXNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnRhcmdldC5mb3JtLm5hbWVzW25hbWVdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS50YXJnZXQuZm9ybS5uYW1lc1tuYW1lXS5zdWJncm91cFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGUudGFyZ2V0LmZvcm0ubmFtZXNbbmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGV2ZW50LCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIGFkZCB1c2VycycgZXZlbnQgbGFzdCwgc28gaXQgY2FuIGludGVyYWN0IHdpdGggdGhlIHN1Ymdyb3VwXG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5ldmVudCkge1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGRhdGEuZXZlbnQsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudC5ldmVudCkge1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGN1cnJlbnQuZXZlbnQsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5zaGlmdENsaWNrU3VwcG9ydCAmJiBkYXRhLnR5cGUgPT09ICdjaGVja2JveCcpIHtcblx0XHRcdFx0XHRNb3JlYml0cy5jaGVja2JveFNoaWZ0Q2xpY2tTdXBwb3J0KE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50cyhub2RlLCBkYXRhLm5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIGlucHV0IGlzIGFjdHVhbGx5IGEgdGV4dC10eXBlLCBzbyBudW1iZXIgaGVyZSBpbmhlcml0cyB0aGUgc2FtZSBzdHVmZlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ2lucHV0Jzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnaWQnLCBgZGl2XyR7aWR9YCk7XG5cdFx0XHRcdC8vIEFkZCBoaWRkZW4gYXR0clxuXHRcdFx0XHRpZiAoZGF0YS5oaWRkZW4pIHtcblx0XHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVsKSB7XG5cdFx0XHRcdFx0bGFiZWwgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJykpO1xuXHRcdFx0XHRcdGxhYmVsLmFwcGVuZENoaWxkKE1vcmViaXRzLmNyZWF0ZUh0bWwoZGF0YS5sYWJlbCkpO1xuXHRcdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgZGF0YS5pZCB8fCBpZCk7XG5cdFx0XHRcdFx0Ly8gTm8gbWFyZ2luXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdWJub2RlID0gbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTtcblx0XHRcdFx0Ly8gQWRkIHZhbHVlIGFuZCBwbGFjZWhvbGRlciBhdHRyc1xuXHRcdFx0XHRpZiAoZGF0YS52YWx1ZSkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEudmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnBsYWNlaG9sZGVyKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJywgZGF0YS5wbGFjZWhvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYXRhLm5hbWUpO1xuXHRcdFx0XHRpZiAoZGF0YS50eXBlID09PSAnaW5wdXQnKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgJ251bWJlcicpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYXR0IG9mIFsnbWluJywgJ21heCcsICdzdGVwJywgJ2xpc3QnXSkge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGFbYXR0XSkge1xuXHRcdFx0XHRcdFx0XHRzdWJub2RlLnNldEF0dHJpYnV0ZShhdHQsIGRhdGFbYXR0XSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgYXR0IG9mIFsndmFsdWUnLCAnc2l6ZScsICdwbGFjZWhvbGRlcicsICdtYXhsZW5ndGgnXSkge1xuXHRcdFx0XHRcdGlmIChkYXRhW2F0dF0pIHtcblx0XHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKGF0dCwgZGF0YVthdHRdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBhdHQgb2YgWydkaXNhYmxlZCcsICdyZXF1aXJlZCcsICdyZWFkb25seSddKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGFbYXR0XSkge1xuXHRcdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoYXR0LCBhdHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5ldmVudCkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBkYXRhLmV2ZW50LCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBzdWJub2RlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2R5bmlucHV0Jzoge1xuXHRcdFx0XHRjb25zdCBtaW4gPSBkYXRhLm1pbiB8fCAxO1xuXHRcdFx0XHRjb25zdCBtYXggPSBkYXRhLm1heCB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0bGFiZWwgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2g1JykpO1xuXHRcdFx0XHRsYWJlbC5hcHBlbmRDaGlsZChNb3JlYml0cy5jcmVhdGVIdG1sKGRhdGEubGFiZWwpKTtcblx0XHRcdFx0Y29uc3QgbGlzdE5vZGUgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblx0XHRcdFx0Y29uc3QgbW9yZSA9IHRoaXMuY29tcHV0ZSh7XG5cdFx0XHRcdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0XHRcdFx0bGFiZWw6ICfmm7TlpJonLFxuXHRcdFx0XHRcdGRpc2FibGVkOiBtaW4gPj0gbWF4LFxuXHRcdFx0XHRcdGV2ZW50OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3Tm9kZSA9IG5ldyBNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudChlLnRhcmdldC5zdWJsaXN0KTtcblx0XHRcdFx0XHRcdGUudGFyZ2V0LmFyZWEuYXBwZW5kQ2hpbGQobmV3Tm9kZS5yZW5kZXIoKSk7XG5cdFx0XHRcdFx0XHRpZiAoKytlLnRhcmdldC5jb3VudGVyID49IGUudGFyZ2V0Lm1heCkge1xuXHRcdFx0XHRcdFx0XHRlLnRhcmdldC5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRub2RlLmFwcGVuZENoaWxkKG1vcmVbMF0pO1xuXHRcdFx0XHRjb25zdCBbLCBtb3JlQnV0dG9uXSA9IG1vcmU7XG5cdFx0XHRcdGNvbnN0IHN1Ymxpc3QgPSB7XG5cdFx0XHRcdFx0dHlwZTogJ19keW5pbnB1dF9lbGVtZW50Jyxcblx0XHRcdFx0XHRsYWJlbDogZGF0YS5zdWJsYWJlbCB8fCBkYXRhLmxhYmVsLFxuXHRcdFx0XHRcdG5hbWU6IGRhdGEubmFtZSxcblx0XHRcdFx0XHR2YWx1ZTogZGF0YS52YWx1ZSxcblx0XHRcdFx0XHRzaXplOiBkYXRhLnNpemUsXG5cdFx0XHRcdFx0cmVtb3ZlOiBmYWxzZSxcblx0XHRcdFx0XHRtYXhsZW5ndGg6IGRhdGEubWF4bGVuZ3RoLFxuXHRcdFx0XHRcdGV2ZW50OiBkYXRhLmV2ZW50LFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWluOyArK2kpIHtcblx0XHRcdFx0XHRjb25zdCBlbGVtID0gbmV3IE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KHN1Ymxpc3QpO1xuXHRcdFx0XHRcdGxpc3ROb2RlLmFwcGVuZENoaWxkKGVsZW0ucmVuZGVyKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1Ymxpc3QucmVtb3ZlID0gdHJ1ZTtcblx0XHRcdFx0c3VibGlzdC5tb3JlYnV0dG9uID0gbW9yZUJ1dHRvbjtcblx0XHRcdFx0c3VibGlzdC5saXN0bm9kZSA9IGxpc3ROb2RlO1xuXHRcdFx0XHRtb3JlQnV0dG9uLnN1Ymxpc3QgPSBzdWJsaXN0O1xuXHRcdFx0XHRtb3JlQnV0dG9uLmFyZWEgPSBsaXN0Tm9kZTtcblx0XHRcdFx0bW9yZUJ1dHRvbi5tYXggPSBtYXggLSBtaW47XG5cdFx0XHRcdG1vcmVCdXR0b24uY291bnRlciA9IDA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSAnX2R5bmlucHV0X2VsZW1lbnQnOlxuXHRcdFx0XHQvLyBQcml2YXRlLCBzaW1pbGFyIHRvIG5vcm1hbCBpbnB1dFxuXHRcdFx0XHRub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVsKSB7XG5cdFx0XHRcdFx0bGFiZWwgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJykpO1xuXHRcdFx0XHRcdGxhYmVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRhdGEubGFiZWwpKTtcblx0XHRcdFx0XHRsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsIGlkKTtcblx0XHRcdFx0XHQvLyBObyBtYXJnaW5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN1Ym5vZGUgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpO1xuXHRcdFx0XHRpZiAoZGF0YS52YWx1ZSkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEudmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCduYW1lJywgZGF0YS5uYW1lKTtcblx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuXHRcdFx0XHRpZiAoZGF0YS5zaXplKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3NpemUnLCBkYXRhLnNpemUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLm1heGxlbmd0aCkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCBkYXRhLm1heGxlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEuZXZlbnQpIHtcblx0XHRcdFx0XHRzdWJub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZGF0YS5ldmVudCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnJlbW92ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHJlbW92ZSA9IHRoaXMuY29tcHV0ZSh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHRcdGxhYmVsOiAn56e76ZmkJyxcblx0XHRcdFx0XHRcdGV2ZW50OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gZS50YXJnZXQubGlzdG5vZGU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5vZGVfID0gZS50YXJnZXQuaW5wdXRub2RlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtb3JlID0gZS50YXJnZXQubW9yZWJ1dHRvbjtcblx0XHRcdFx0XHRcdFx0bGlzdC5yZW1vdmVDaGlsZChub2RlXyk7XG5cdFx0XHRcdFx0XHRcdC0tbW9yZS5jb3VudGVyO1xuXHRcdFx0XHRcdFx0XHRtb3JlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcblx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChyZW1vdmVbMF0pO1xuXHRcdFx0XHRcdGNvbnN0IFssIHJlbW92ZUJ1dHRvbl0gPSByZW1vdmU7XG5cdFx0XHRcdFx0cmVtb3ZlQnV0dG9uLmlucHV0bm9kZSA9IG5vZGU7XG5cdFx0XHRcdFx0cmVtb3ZlQnV0dG9uLmxpc3Rub2RlID0gZGF0YS5saXN0bm9kZTtcblx0XHRcdFx0XHRyZW1vdmVCdXR0b24ubW9yZWJ1dHRvbiA9IGRhdGEubW9yZWJ1dHRvbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2hpZGRlbic6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcblx0XHRcdFx0bm9kZS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBkYXRhLnZhbHVlKTtcblx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYXRhLm5hbWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2hlYWRlcic6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNScpO1xuXHRcdFx0XHRub2RlLmFwcGVuZENoaWxkKE1vcmViaXRzLmNyZWF0ZUh0bWwoZGF0YS5sYWJlbCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Rpdic6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0aWYgKGRhdGEubmFtZSkge1xuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCduYW1lJywgZGF0YS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5sYWJlbCkge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0XHRyZXN1bHQuY2xhc3NOYW1lID0gJ3F1aWNrZm9ybURlc2NyaXB0aW9uJztcblx0XHRcdFx0XHRyZXN1bHQuYXBwZW5kQ2hpbGQoTW9yZWJpdHMuY3JlYXRlSHRtbChkYXRhLmxhYmVsKSk7XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChyZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnc3VibWl0Jzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpO1xuXHRcdFx0XHRjaGlsZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnc3VibWl0Jyk7XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVsKSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEubGFiZWwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNoaWxkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnbmFtZScsIGRhdGEubmFtZSB8fCAnc3VibWl0Jyk7XG5cdFx0XHRcdGlmIChkYXRhLmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYnV0dG9uJzpcblx0XHRcdFx0bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpO1xuXHRcdFx0XHRjaGlsZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVsKSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRhdGEubGFiZWwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNoaWxkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnbmFtZScsIGRhdGEubmFtZSk7XG5cdFx0XHRcdGlmIChkYXRhLmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLmV2ZW50KSB7XG5cdFx0XHRcdFx0Y2hpbGRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkYXRhLmV2ZW50LCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd0ZXh0YXJlYSc6XG5cdFx0XHRcdG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJywgYGRpdl8ke2lkfWApO1xuXHRcdFx0XHQvLyBBZGQgaGlkZGVuIGF0dHJcblx0XHRcdFx0aWYgKGRhdGEuaGlkZGVuKSB7XG5cdFx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICcnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5sYWJlbCkge1xuXHRcdFx0XHRcdGxhYmVsID0gbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNScpKTtcblx0XHRcdFx0XHRjb25zdCBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuXHRcdFx0XHRcdGxhYmVsRWxlbWVudC5hcHBlbmRDaGlsZChNb3JlYml0cy5jcmVhdGVIdG1sKGRhdGEubGFiZWwpKTtcblx0XHRcdFx0XHRsYWJlbEVsZW1lbnQuc2V0QXR0cmlidXRlKCdmb3InLCBkYXRhLmlkIHx8IGlkKTtcblx0XHRcdFx0XHRsYWJlbC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1Ym5vZGUgPSBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJykpO1xuXHRcdFx0XHRzdWJub2RlLnNldEF0dHJpYnV0ZSgnbmFtZScsIGRhdGEubmFtZSk7XG5cdFx0XHRcdGlmIChkYXRhLmNvbHMpIHtcblx0XHRcdFx0XHRzdWJub2RlLnNldEF0dHJpYnV0ZSgnY29scycsIGRhdGEuY29scyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEucm93cykge1xuXHRcdFx0XHRcdHN1Ym5vZGUuc2V0QXR0cmlidXRlKCdyb3dzJywgZGF0YS5yb3dzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5kaXNhYmxlZCkge1xuXHRcdFx0XHRcdHN1Ym5vZGUuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnJlcXVpcmVkKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJ3JlcXVpcmVkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGEucmVhZG9ubHkpIHtcblx0XHRcdFx0XHRzdWJub2RlLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAncmVhZG9ubHknKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS52YWx1ZSkge1xuXHRcdFx0XHRcdHN1Ym5vZGUudmFsdWUgPSBkYXRhLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEFkZCBwbGFjZWhvbGRlciBhdHRyXG5cdFx0XHRcdGlmIChkYXRhLnBsYWNlaG9sZGVyKSB7XG5cdFx0XHRcdFx0c3Vibm9kZS5wbGFjZWhvbGRlciA9IGRhdGEucGxhY2Vob2xkZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hpbGRDb250YWluZXIgPSBzdWJub2RlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTW9yZWJpdHMucXVpY2tGb3JtOiB1bmtub3duIGVsZW1lbnQgdHlwZSAke2RhdGEudHlwZS50b1N0cmluZygpfWApO1xuXHRcdH1cblx0XHRjaGlsZENvbnRhaW5lciB8fD0gbm9kZTtcblx0XHRpZiAoZGF0YS50b29sdGlwKSB7XG5cdFx0XHRNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudC5nZW5lcmF0ZVRvb2x0aXAobGFiZWwgfHwgbm9kZSwgZGF0YSk7XG5cdFx0fVxuXHRcdGlmIChkYXRhLmV4dHJhKSB7XG5cdFx0XHRjaGlsZENvbnRhaW5lci5leHRyYSA9IGRhdGEuZXh0cmE7XG5cdFx0fVxuXHRcdGlmIChkYXRhLiRkYXRhKSB7XG5cdFx0XHQkKGNoaWxkQ29udGFpbmVyKS5kYXRhKGRhdGEuJGRhdGEpO1xuXHRcdH1cblx0XHRpZiAoZGF0YS5zdHlsZSkge1xuXHRcdFx0Y2hpbGRDb250YWluZXIuc2V0QXR0cmlidXRlKCdzdHlsZScsIGRhdGEuc3R5bGUpO1xuXHRcdH1cblx0XHRpZiAoZGF0YS5jbGFzc05hbWUpIHtcblx0XHRcdGNoaWxkQ29udGFpbmVyLmNsYXNzTmFtZSA9IGNoaWxkQ29udGFpbmVyLmNsYXNzTmFtZVxuXHRcdFx0XHQ/IGAke2NoaWxkQ29udGFpbmVyLmNsYXNzTmFtZX0gJHtkYXRhLmNsYXNzTmFtZX1gXG5cdFx0XHRcdDogZGF0YS5jbGFzc05hbWU7XG5cdFx0fVxuXHRcdGNoaWxkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCBkYXRhLmlkIHx8IGlkKTtcblx0XHRyZXR1cm4gW25vZGUsIGNoaWxkQ29udGFpbmVyXTtcblx0fTtcblx0LyoqXG5cdCAqIENyZWF0ZSBhIGpRdWVyeSBVSS1iYXNlZCB0b29sdGlwLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnRcblx0ICogQHJlcXVpcmVzIGpxdWVyeS51aVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIEhUTUwgZWxlbWVudCBiZXNpZGUgd2hpY2ggYSB0b29sdGlwIGlzIHRvIGJlIGdlbmVyYXRlZC5cblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUb29sdGlwLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBkYXRhLlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQuZ2VuZXJhdGVUb29sdGlwID0gKG5vZGUsIGRhdGEpID0+IHtcblx0XHRjb25zdCB0b29sdGlwQnV0dG9uID0gbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykpO1xuXHRcdHRvb2x0aXBCdXR0b24uY2xhc3NOYW1lID0gJ21vcmViaXRzLXRvb2x0aXBCdXR0b24nO1xuXHRcdHRvb2x0aXBCdXR0b24udGl0bGUgPSBkYXRhLnRvb2x0aXA7IC8vIFByb3ZpZGVzIHRoZSBjb250ZW50IGZvciBqUXVlcnkgVUlcblx0XHR0b29sdGlwQnV0dG9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCc/JykpO1xuXHRcdCQodG9vbHRpcEJ1dHRvbikudG9vbHRpcCh7XG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRteTogJ2xlZnQgdG9wJyxcblx0XHRcdFx0YXQ6ICdjZW50ZXIgYm90dG9tJyxcblx0XHRcdFx0Y29sbGlzaW9uOiAnZmxpcGZpdCcsXG5cdFx0XHR9LFxuXHRcdFx0Ly8gRGVwcmVjYXRlZCBpbiBVSSAxLjEyLCBidXQgTVcgc3R1Y2sgb24gMS45LjIgaW5kZWZpbml0ZWx5OyBzZWUgIzM5OCBhbmQgVDcxMzg2XG5cdFx0XHR0b29sdGlwQ2xhc3M6ICdtb3JlYml0cy11aS10b29sdGlwJyxcblx0XHR9KTtcblx0fTtcblx0Ly8gU29tZSB1dGlsaXR5IG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBxdWlja0Zvcm1zIGFmdGVyIHRoZWlyIGNyZWF0aW9uOlxuXHQvLyAoTm9uZSBvZiB0aGVzZSB3b3JrIGZvciBcImR5bmlucHV0XCIgdHlwZSBmaWVsZHMgYXQgcHJlc2VudClcblx0LyoqXG5cdCAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGZpbGxlZCBmb3JtIGRhdGEgZW50ZXJlZCBieSB0aGUgdXNlciwgd2l0aCB0aGUgb2JqZWN0XG5cdCAqIGtleXMgYmVpbmcgdGhlIGZvcm0gZWxlbWVudCBuYW1lcy4gRGlzYWJsZWQgZmllbGRzIHdpbGwgYmUgaWdub3JlZCwgYnV0IG5vdCBoaWRkZW4gZmllbGRzLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7SFRNTEZvcm1FbGVtZW50fSBmb3JtXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IFdpdGggZmllbGQgbmFtZXMgYXMga2V5cywgaW5wdXQgZGF0YSBhcyB2YWx1ZXMuXG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0uZ2V0SW5wdXREYXRhID0gKGZvcm0pID0+IHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZvcm0uZWxlbWVudHMpIHtcblx0XHRcdGlmIChmaWVsZC5kaXNhYmxlZCB8fCAhZmllbGQubmFtZSB8fCAhZmllbGQudHlwZSB8fCBmaWVsZC50eXBlID09PSAnc3VibWl0JyB8fCBmaWVsZC50eXBlID09PSAnYnV0dG9uJykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdC8vIEZvciBlbGVtZW50cyBpbiBzdWJncm91cHMsIHF1aWNrZm9ybSBwcmVwZW5kcyBlbGVtZW50IG5hbWVzIHdpdGhcblx0XHRcdC8vIG5hbWUgb2YgdGhlIHBhcmVudCBncm91cCBmb2xsb3dlZCBieSBhIHBlcmlvZCwgZ2V0IHJpZCBvZiB0aGF0LlxuXHRcdFx0Y29uc3QgZmllbGROYW1lTm9ybSA9IGZpZWxkLm5hbWUuc2xpY2UoZmllbGQubmFtZS5pbmRleE9mKCcuJykgKyAxKTtcblx0XHRcdHN3aXRjaCAoZmllbGQudHlwZSkge1xuXHRcdFx0XHRjYXNlICdyYWRpbyc6XG5cdFx0XHRcdFx0aWYgKGZpZWxkLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdHJlc3VsdFtmaWVsZE5hbWVOb3JtXSA9IGZpZWxkLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnY2hlY2tib3gnOlxuXHRcdFx0XHRcdGlmIChmaWVsZC5kYXRhc2V0LnNpbmdsZSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0W2ZpZWxkTmFtZU5vcm1dID0gZmllbGQuY2hlY2tlZDsgLy8gYm9vbGVhblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRbZmllbGROYW1lTm9ybV0gfHw9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0W2ZpZWxkTmFtZU5vcm1dW3Jlc3VsdFtmaWVsZE5hbWVOb3JtXS5sZW5ndGhdID0gZmllbGQudmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdzZWxlY3QtbXVsdGlwbGUnOlxuXHRcdFx0XHRcdHJlc3VsdFtmaWVsZE5hbWVOb3JtXSA9ICQoZmllbGQpLnZhbCgpOyAvLyBmaWVsZC52YWx1ZSBkb2Vzbid0IHdvcmtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAndGV4dCc6IC8vIGZhbGxzIHRocm91Z2hcblx0XHRcdFx0Y2FzZSAndGV4dGFyZWEnOlxuXHRcdFx0XHRcdHJlc3VsdFtmaWVsZE5hbWVOb3JtXSA9IGZpZWxkLnZhbHVlLnRyaW0oKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBjb3VsZCBiZSBzZWxlY3Qtb25lLCBkYXRlLCBudW1iZXIsIGVtYWlsLCBldGNcblx0XHRcdFx0XHRpZiAoZmllbGQudmFsdWUpIHtcblx0XHRcdFx0XHRcdHJlc3VsdFtmaWVsZE5hbWVOb3JtXSA9IGZpZWxkLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblx0LyoqXG5cdCAqIFJldHVybnMgYWxsIGZvcm0gZWxlbWVudHMgd2l0aCBhIGdpdmVuIGZpZWxkIG5hbWUgb3IgSUQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5xdWlja0Zvcm1cblx0ICogQHBhcmFtIHtIVE1MRm9ybUVsZW1lbnR9IGZvcm1cblx0ICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSAtIFRoZSBuYW1lIG9yIGlkIG9mIHRoZSBmaWVsZHMuXG5cdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudFtdfSAtIEFycmF5IG9mIG1hdGNoaW5nIGZvcm0gZWxlbWVudHMuXG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudHMgPSAoZm9ybSwgZmllbGROYW1lKSA9PiB7XG5cdFx0Y29uc3QgJGZvcm0gPSAkKGZvcm0pO1xuXHRcdGZpZWxkTmFtZSA9ICQuZXNjYXBlU2VsZWN0b3IoZmllbGROYW1lKTsgLy8gc2FuaXRpemUgaW5wdXRcblx0XHRsZXQgJGVsZW1lbnRzID0gJGZvcm0uZmluZChgW25hbWU9XCIke2ZpZWxkTmFtZX1cIl1gKTtcblx0XHRpZiAoJGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiAkZWxlbWVudHMudG9BcnJheSgpO1xuXHRcdH1cblx0XHQkZWxlbWVudHMgPSAkZm9ybS5maW5kKGAjJHtmaWVsZE5hbWV9YCk7XG5cdFx0cmV0dXJuICRlbGVtZW50cy50b0FycmF5KCk7XG5cdH07XG5cdC8qKlxuXHQgKiBTZWFyY2hlcyB0aGUgYXJyYXkgb2YgZWxlbWVudHMgZm9yIGEgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uIHdpdGggYSBjZXJ0YWluXG5cdCAqIGB2YWx1ZWAgYXR0cmlidXRlLCBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgc3VjaCBlbGVtZW50LiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudFtdfSBlbGVtZW50QXJyYXkgLSBBcnJheSBvZiBjaGVja2JveCBvciByYWRpbyBlbGVtZW50cy5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVmFsdWUgdG8gc2VhcmNoIGZvci5cblx0ICogQHJldHVybnMge0hUTUxJbnB1dEVsZW1lbnR9XG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0uZ2V0Q2hlY2tib3hPclJhZGlvID0gKGVsZW1lbnRBcnJheSwgdmFsdWUpID0+IHtcblx0XHRjb25zdCBmb3VuZCA9IGVsZW1lbnRBcnJheS5maWx0ZXIoKGVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBlbGVtZW50LnZhbHVlID09PSB2YWx1ZTtcblx0XHR9KTtcblx0XHRpZiAoZm91bmQubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGZvdW5kWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlICZsdDtkaXY+IGNvbnRhaW5pbmcgdGhlIGZvcm0gZWxlbWVudCwgb3IgdGhlIGZvcm0gZWxlbWVudCBpdHNlbGZcblx0ICogTWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkIG9uIGNoZWNrYm94ZXMgb3IgcmFkaW9zLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmdldEVsZW1lbnRDb250YWluZXIgPSAoZWxlbWVudCkgPT4ge1xuXHRcdC8vIGZvciBkaXZzLCBoZWFkaW5ncyBhbmQgZmllbGRzZXRzLCB0aGUgY29udGFpbmVyIGlzIHRoZSBlbGVtZW50IGl0c2VsZlxuXHRcdGlmIChcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRmllbGRTZXRFbGVtZW50IHx8XG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnQgfHxcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnRcblx0XHQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHQvLyBmb3Igb3RoZXJzLCBqdXN0IHJldHVybiB0aGUgcGFyZW50IG5vZGVcblx0XHRyZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlO1xuXHR9O1xuXHQvKipcblx0ICogR2V0cyB0aGUgSFRNTCBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGxhYmVsIG9mIHRoZSBnaXZlbiBmb3JtIGVsZW1lbnRcblx0ICogKG1haW5seSBmb3IgaW50ZXJuYWwgdXNlKS5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCl9IGVsZW1lbnRcblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLmdldEVsZW1lbnRMYWJlbE9iamVjdCA9IChlbGVtZW50KSA9PiB7XG5cdFx0Ly8gZm9yIGJ1dHRvbnMsIGRpdnMgYW5kIGhlYWRlcnMsIHRoZSBsYWJlbCBpcyBvbiB0aGUgZWxlbWVudCBpdHNlbGZcblx0XHRpZiAoXG5cdFx0XHRlbGVtZW50LnR5cGUgPT09ICdidXR0b24nIHx8XG5cdFx0XHRlbGVtZW50LnR5cGUgPT09ICdzdWJtaXQnIHx8XG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnQgfHxcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnRcblx0XHQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0Ly8gZm9yIGZpZWxkc2V0cywgdGhlIGxhYmVsIGlzIHRoZSBjaGlsZCA8bGVnZW5kPiBlbGVtZW50XG5cdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEZpZWxkU2V0RWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcignbGVnZW5kJyk7XG5cdFx0XHQvLyBmb3IgdGV4dGFyZWFzLCB0aGUgbGFiZWwgaXMgdGhlIHNpYmxpbmcgPGg1PiBlbGVtZW50XG5cdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCdoNScpO1xuXHRcdH1cblx0XHQvLyBmb3Igb3RoZXJzLCB0aGUgbGFiZWwgaXMgdGhlIHNpYmxpbmcgPGxhYmVsPiBlbGVtZW50XG5cdFx0cmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCdsYWJlbCcpO1xuXHR9O1xuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgdGV4dCBvZiB0aGUgZWxlbWVudC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCl9IGVsZW1lbnRcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50TGFiZWwgPSAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IGxhYmVsRWxlbWVudCA9IE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50TGFiZWxPYmplY3QoZWxlbWVudCk7XG5cdFx0aWYgKCFsYWJlbEVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gbGFiZWxFbGVtZW50LmZpcnN0Q2hpbGQudGV4dENvbnRlbnQ7XG5cdH07XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBsYWJlbCBvZiB0aGUgZWxlbWVudCB0byB0aGUgZ2l2ZW4gdGV4dC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxNb3JlYml0cy5xdWlja0Zvcm0uZWxlbWVudCl9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsVGV4dFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBzdWNjZWVkZWQsIGZhbHNlIGlmIHRoZSBsYWJlbCBlbGVtZW50IGlzIHVuYXZhaWxhYmxlLlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRMYWJlbCA9IChlbGVtZW50LCBsYWJlbFRleHQpID0+IHtcblx0XHRjb25zdCBsYWJlbEVsZW1lbnQgPSBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudExhYmVsT2JqZWN0KGVsZW1lbnQpO1xuXHRcdGlmICghbGFiZWxFbGVtZW50KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGxhYmVsRWxlbWVudC5maXJzdENoaWxkLnRleHRDb250ZW50ID0gbGFiZWxUZXh0O1xuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXHQvKipcblx0ICogU3RvcmVzIHRoZSBlbGVtZW50J3MgY3VycmVudCBsYWJlbCwgYW5kIHRlbXBvcmFyaWx5IHNldHMgdGhlIGxhYmVsIHRvIHRoZSBnaXZlbiB0ZXh0LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fE1vcmViaXRzLnF1aWNrRm9ybS5lbGVtZW50KX0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGVtcG9yYXJ5TGFiZWxUZXh0XG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgc3VjY2VlZGVkLCBgZmFsc2VgIGlmIHRoZSBsYWJlbCBlbGVtZW50IGlzIHVuYXZhaWxhYmxlLlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLm92ZXJyaWRlRWxlbWVudExhYmVsID0gKGVsZW1lbnQsIHRlbXBvcmFyeUxhYmVsVGV4dCkgPT4ge1xuXHRcdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtb2xkbGFiZWwnKSkge1xuXHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb2xkbGFiZWwnLCBNb3JlYml0cy5xdWlja0Zvcm0uZ2V0RWxlbWVudExhYmVsKGVsZW1lbnQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIE1vcmViaXRzLnF1aWNrRm9ybS5zZXRFbGVtZW50TGFiZWwoZWxlbWVudCwgdGVtcG9yYXJ5TGFiZWxUZXh0KTtcblx0fTtcblx0LyoqXG5cdCAqIFJlc3RvcmVzIHRoZSBsYWJlbCBzdG9yZWQgYnkgb3ZlcnJpZGVFbGVtZW50TGFiZWwuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5xdWlja0Zvcm1cblx0ICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8TW9yZWJpdHMucXVpY2tGb3JtLmVsZW1lbnQpfSBlbGVtZW50XG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHN1Y2NlZWRlZCwgZmFsc2UgaWYgdGhlIGxhYmVsIGVsZW1lbnQgaXMgdW5hdmFpbGFibGUuXG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0ucmVzZXRFbGVtZW50TGFiZWwgPSAoZWxlbWVudCkgPT4ge1xuXHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1vbGRsYWJlbCcpKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRMYWJlbChlbGVtZW50LCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vbGRsYWJlbCcpKTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cdC8qKlxuXHQgKiBTaG93cyBvciBoaWRlcyBhIGZvcm0gZWxlbWVudCBwbHVzIGl0cyBsYWJlbCBhbmQgdG9vbHRpcC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnF1aWNrRm9ybVxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxqUXVlcnl8c3RyaW5nKX0gZWxlbWVudCAtIEhUTUwvalF1ZXJ5IGVsZW1lbnQsIG9yIGpRdWVyeSBzZWxlY3RvciBzdHJpbmcuXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2liaWxpdHldIC0gU2tpcCB0aGlzIHRvIHRvZ2dsZSB2aXNpYmlsaXR5LlxuXHQgKi9cblx0TW9yZWJpdHMucXVpY2tGb3JtLnNldEVsZW1lbnRWaXNpYmlsaXR5ID0gKGVsZW1lbnQsIHZpc2liaWxpdHkpID0+IHtcblx0XHQkKGVsZW1lbnQpLnRvZ2dsZSh2aXNpYmlsaXR5KTtcblx0fTtcblx0LyoqXG5cdCAqIFNob3dzIG9yIGhpZGVzIHRoZSBxdWVzdGlvbiBtYXJrIGljb24gKHdoaWNoIGRpc3BsYXlzIHRoZSB0b29sdGlwKSBuZXh0IHRvIGEgZm9ybSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMucXVpY2tGb3JtXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBbdmlzaWJpbGl0eV0gLSBTa2lwIHRoaXMgdG8gdG9nZ2xlIHZpc2liaWxpdHkuXG5cdCAqL1xuXHRNb3JlYml0cy5xdWlja0Zvcm0uc2V0RWxlbWVudFRvb2x0aXBWaXNpYmlsaXR5ID0gKGVsZW1lbnQsIHZpc2liaWxpdHkpID0+IHtcblx0XHQkKE1vcmViaXRzLnF1aWNrRm9ybS5nZXRFbGVtZW50Q29udGFpbmVyKGVsZW1lbnQpKS5maW5kKCcubW9yZWJpdHMtdG9vbHRpcEJ1dHRvbicpLnRvZ2dsZSh2aXNpYmlsaXR5KTtcblx0fTtcblx0LyoqXG5cdCAqIEBleHRlcm5hbCBIVE1MRm9ybUVsZW1lbnRcblx0ICovXG5cdC8qKlxuXHQgKiBHZXQgY2hlY2tlZCBpdGVtcyBpbiB0aGUgZm9ybS5cblx0ICpcblx0ICogQGZ1bmN0aW9uIGV4dGVybmFsOkhUTUxGb3JtRWxlbWVudC5nZXRDaGVja2VkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRmluZCBjaGVja2VkIHByb3BlcnR5IG9mIGVsZW1lbnRzIChpLmUuIGEgY2hlY2tib3hcblx0ICogb3IgYSByYWRpb2J1dHRvbikgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3Igc2VsZWN0IG9wdGlvbnMgdGhhdCBoYXZlIHNlbGVjdGVkXG5cdCAqIHNldCB0byB0cnVlIChkb24ndCB0cnkgdG8gbWl4IHNlbGVjdHMgd2l0aCByYWRpby9jaGVja2JveGVzKS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlXSAtIE9wdGlvbmFsbHkgc3BlY2lmeSBlaXRoZXIgcmFkaW8gb3IgY2hlY2tib3ggKGZvclxuXHQgKiB0aGUgZXZlbnQgdGhhdCBib3RoIGNoZWNrYm94ZXMgYW5kIHJhZGlvYnV0dG9ucyBoYXZlIHRoZSBzYW1lIG5hbWUpLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nW119IC0gQ29udGFpbnMgdGhlIHZhbHVlcyBvZiBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiBuYW1lXG5cdCAqIGNoZWNrZWQgcHJvcGVydHkgc2V0IHRvIHRydWUuXG5cdCAqL1xuXHRIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmdldENoZWNrZWQgPSBmdW5jdGlvbiAobmFtZSwgdHlwZSkge1xuXHRcdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5lbGVtZW50c1tuYW1lXTtcblx0XHRpZiAoIWVsZW1lbnRzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdGNvbnN0IHJldHVybkFycmF5ID0gW107XG5cdFx0bGV0IGk7XG5cdFx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHtvcHRpb25zfSA9IGVsZW1lbnRzO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKG9wdGlvbnNbaV0uc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRpZiAob3B0aW9uc1tpXS52YWx1ZXMpIHtcblx0XHRcdFx0XHRcdHJldHVybkFycmF5W3JldHVybkFycmF5Lmxlbmd0aF0gPSBvcHRpb25zW2ldLnZhbHVlcztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IG9wdGlvbnNbaV0udmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdGlmICh0eXBlICYmIGVsZW1lbnRzLnR5cGUgIT09IHR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50cy5jaGVja2VkKSB7XG5cdFx0XHRcdHJldHVybiBbZWxlbWVudHMudmFsdWVdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGVsZW1lbnRzW2ldLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRpZiAodHlwZSAmJiBlbGVtZW50c1tpXS50eXBlICE9PSB0eXBlKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzW2ldLnZhbHVlcykge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IGVsZW1lbnRzW2ldLnZhbHVlcztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IGVsZW1lbnRzW2ldLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0dXJuQXJyYXk7XG5cdH07XG5cdC8qKlxuXHQgKiBEb2VzIHRoZSBzYW1lIGFzIHtAbGluayBIVE1MRm9ybUVsZW1lbnQuZ2V0Q2hlY2tlZHxnZXRDaGVja2VkfSwgYnV0IHdpdGggdW5jaGVja2VkIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb24gZXh0ZXJuYWw6SFRNTEZvcm1FbGVtZW50LmdldFVuY2hlY2tlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEZpbmQgY2hlY2tlZCBwcm9wZXJ0eSBvZiBlbGVtZW50cyAoaS5lLiBhIGNoZWNrYm94XG5cdCAqIG9yIGEgcmFkaW9idXR0b24pIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIHNlbGVjdCBvcHRpb25zIHRoYXQgaGF2ZSBzZWxlY3RlZFxuXHQgKiBzZXQgdG8gdHJ1ZSAoZG9uJ3QgdHJ5IHRvIG1peCBzZWxlY3RzIHdpdGggcmFkaW8vY2hlY2tib3hlcykuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZV0gLSBPcHRpb25hbGx5IHNwZWNpZnkgZWl0aGVyIHJhZGlvIG9yIGNoZWNrYm94IChmb3Jcblx0ICogdGhlIGV2ZW50IHRoYXQgYm90aCBjaGVja2JveGVzIGFuZCByYWRpb2J1dHRvbnMgaGF2ZSB0aGUgc2FtZSBuYW1lKS5cblx0ICogQHJldHVybnMge3N0cmluZ1tdfSAtIENvbnRhaW5zIHRoZSB2YWx1ZXMgb2YgZWxlbWVudHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZVxuXHQgKiBjaGVja2VkIHByb3BlcnR5IHNldCB0byB0cnVlLlxuXHQgKi9cblx0SFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5nZXRVbmNoZWNrZWQgPSBmdW5jdGlvbiAobmFtZSwgdHlwZSkge1xuXHRcdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5lbGVtZW50c1tuYW1lXTtcblx0XHRpZiAoIWVsZW1lbnRzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdGNvbnN0IHJldHVybkFycmF5ID0gW107XG5cdFx0bGV0IGk7XG5cdFx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHtvcHRpb25zfSA9IGVsZW1lbnRzO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKCFvcHRpb25zW2ldLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnNbaV0udmFsdWVzKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm5BcnJheVtyZXR1cm5BcnJheS5sZW5ndGhdID0gb3B0aW9uc1tpXS52YWx1ZXM7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybkFycmF5W3JldHVybkFycmF5Lmxlbmd0aF0gPSBvcHRpb25zW2ldLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0XHRpZiAodHlwZSAmJiBlbGVtZW50cy50eXBlICE9PSB0eXBlKSB7XG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH0gZWxzZSBpZiAoIWVsZW1lbnRzLmNoZWNrZWQpIHtcblx0XHRcdFx0cmV0dXJuIFtlbGVtZW50cy52YWx1ZV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoIWVsZW1lbnRzW2ldLmNoZWNrZWQpIHtcblx0XHRcdFx0XHRpZiAodHlwZSAmJiBlbGVtZW50c1tpXS50eXBlICE9PSB0eXBlKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzW2ldLnZhbHVlcykge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IGVsZW1lbnRzW2ldLnZhbHVlcztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuQXJyYXlbcmV0dXJuQXJyYXkubGVuZ3RoXSA9IGVsZW1lbnRzW2ldLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0dXJuQXJyYXk7XG5cdH07XG5cdC8qKlxuXHQgKiBVdGlsaXRpZXMgdG8gaGVscCBwcm9jZXNzIElQIGFkZHJlc3Nlcy5cblx0ICpcblx0ICogQG5hbWVzcGFjZSBNb3JlYml0cy5pcFxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICovXG5cdE1vcmViaXRzLmlwID0ge1xuXHRcdC8qKlxuXHRcdCAqIENvbnZlcnRzIGFuIElQdjYgYWRkcmVzcyB0byB0aGUgY2Fub25pY2FsIGZvcm0gc3RvcmVkIGFuZCB1c2VkIGJ5IE1lZGlhV2lraS5cblx0XHQgKiBKYXZhU2NyaXB0IHRyYW5zbGF0aW9uIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9nZXJyaXQud2lraW1lZGlhLm9yZy9yL3BsdWdpbnMvZ2l0aWxlcy9tZWRpYXdpa2kvY29yZS8rLzhlYjZhYzNlODRlYTMzMTJkMzkxY2E5NmMxMmM0OWUzYWQwNzUzYmIvaW5jbHVkZXMvdXRpbHMvSVAucGhwIzEzMXxgSVA6OnNhbml0aXplSVAoKWB9XG5cdFx0ICogZnVuY3Rpb24gZnJvbSB0aGUgSVBVdGlscyBsaWJyYXJ5LiAgQWRkcmVzc2VzIGFyZSB2ZXJib3NlLCB1cHBlcmNhc2UsXG5cdFx0ICogbm9ybWFsaXplZCwgYW5kIGV4cGFuZGVkIHRvIDggd29yZHMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBJUHY2IGFkZHJlc3MsIHdpdGggb3Igd2l0aG91dCBDSURSLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0c2FuaXRpemVJUHY2OiAoYWRkcmVzcykgPT4ge1xuXHRcdFx0YWRkcmVzcyA9IGFkZHJlc3MudHJpbSgpO1xuXHRcdFx0aWYgKGFkZHJlc3MgPT09ICcnKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFtdy51dGlsLmlzSVB2NkFkZHJlc3MoYWRkcmVzcywgdHJ1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIGFkZHJlc3M7IC8vIG5vdGhpbmcgZWxzZSB0byBkbyBmb3IgSVB2NCBhZGRyZXNzZXMgb3IgaW52YWxpZCBvbmVzXG5cdFx0XHR9XG5cdFx0XHQvLyBSZW1vdmUgYW55IHdoaXRlc3BhY2VzLCBjb252ZXJ0IHRvIHVwcGVyIGNhc2Vcblx0XHRcdGFkZHJlc3MgPSBhZGRyZXNzLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHQvLyBFeHBhbmQgemVybyBhYmJyZXZpYXRpb25zXG5cdFx0XHRjb25zdCBhYmJyZXZQb3MgPSBhZGRyZXNzLmluZGV4T2YoJzo6Jyk7XG5cdFx0XHRpZiAoYWJicmV2UG9zID4gLTEpIHtcblx0XHRcdFx0Ly8gV2Uga25vdyB0aGlzIGlzIHZhbGlkIElQdjYuIEZpbmQgdGhlIGxhc3QgaW5kZXggb2YgdGhlXG5cdFx0XHRcdC8vIGFkZHJlc3MgYmVmb3JlIGFueSBDSURSIG51bWJlciAoZS5nLiBcImE6YjpjOjovMjRcIikuXG5cdFx0XHRcdGNvbnN0IENJRFJTdGFydCA9IGFkZHJlc3MuaW5kZXhPZignLycpO1xuXHRcdFx0XHRjb25zdCBhZGRyZXNzRW5kID0gQ0lEUlN0YXJ0ID09PSAtMSA/IGFkZHJlc3MubGVuZ3RoIC0gMSA6IENJRFJTdGFydCAtIDE7XG5cdFx0XHRcdC8vIElmIHRoZSAnOjonIGlzIGF0IHRoZSBiZWdpbm5pbmcuLi5cblx0XHRcdFx0bGV0IHJlcGVhdDtcblx0XHRcdFx0bGV0IGV4dHJhO1xuXHRcdFx0XHRsZXQgcGFkO1xuXHRcdFx0XHRpZiAoYWJicmV2UG9zID09PSAwKSB7XG5cdFx0XHRcdFx0cmVwZWF0ID0gJzA6Jztcblx0XHRcdFx0XHRleHRyYSA9IGFkZHJlc3MgPT09ICc6OicgPyAnMCcgOiAnJzsgLy8gZm9yIHRoZSBhZGRyZXNzICc6Oidcblx0XHRcdFx0XHRwYWQgPSA5OyAvLyA3KzIgKGR1ZSB0byAnOjonKVxuXHRcdFx0XHRcdC8vIElmIHRoZSAnOjonIGlzIGF0IHRoZSBlbmQuLi5cblx0XHRcdFx0fSBlbHNlIGlmIChhYmJyZXZQb3MgPT09IGFkZHJlc3NFbmQgLSAxKSB7XG5cdFx0XHRcdFx0cmVwZWF0ID0gJzowJztcblx0XHRcdFx0XHRleHRyYSA9ICcnO1xuXHRcdFx0XHRcdHBhZCA9IDk7IC8vIDcrMiAoZHVlIHRvICc6OicpXG5cdFx0XHRcdFx0Ly8gSWYgdGhlICc6OicgaXMgaW4gdGhlIG1pZGRsZS4uLlxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlcGVhdCA9ICc6MCc7XG5cdFx0XHRcdFx0ZXh0cmEgPSAnOic7XG5cdFx0XHRcdFx0cGFkID0gODsgLy8gNisyIChkdWUgdG8gJzo6Jylcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCByZXBsYWNlbWVudCA9IHJlcGVhdDtcblx0XHRcdFx0cGFkIC09IGFkZHJlc3Muc3BsaXQoJzonKS5sZW5ndGggLSAxO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHBhZDsgaSsrKSB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQgKz0gcmVwZWF0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlcGxhY2VtZW50ICs9IGV4dHJhO1xuXHRcdFx0XHRhZGRyZXNzID0gYWRkcmVzcy5yZXBsYWNlKCc6OicsIHJlcGxhY2VtZW50KTtcblx0XHRcdH1cblx0XHRcdC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGZyb20gZWFjaCBibG9jIGFzIG5lZWRlZFxuXHRcdFx0cmV0dXJuIGFkZHJlc3MucmVwbGFjZSgvKF58OikwKyhbMC05QS1GYS1mXXsxLDR9KS9nLCAnJDEkMicpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBJUCBhZGRyZXNzIGlzIGEgcmFuZ2UuICBKdXN0IGNvbmpvaW5zXG5cdFx0ICogYG13LnV0aWwuaXNJUEFkZHJlc3NgIHdpdGggYW5kIHdpdGhvdXQgdGhlIGBhbGxvd0Jsb2NrYCBvcHRpb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaXBcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUcnVlIGlmIGdpdmVuIGEgdmFsaWQgSVAgYWRkcmVzcyByYW5nZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHRcdCAqL1xuXHRcdGlzUmFuZ2U6IChpcCkgPT4ge1xuXHRcdFx0cmV0dXJuIG13LnV0aWwuaXNJUEFkZHJlc3MoaXAsIHRydWUpICYmICFtdy51dGlsLmlzSVBBZGRyZXNzKGlwKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIENoZWNrIHRoYXQgYW4gSVAgcmFuZ2UgaXMgd2l0aGluIHRoZSBDSURSIGxpbWl0cy4gIE1vc3QgbGlrZWx5IHRvIGJlIHVzZWZ1bFxuXHRcdCAqIGluIGNvbmp1bmN0aW9uIHdpdGggYHdnUmVsZXZhbnRVc2VyTmFtZWAuICBDSURSIGxpbWl0cyBhcmUgaGFyZGNvZGVkIGFzIC8xNlxuXHRcdCAqIGZvciBJUHY0IGFuZCAvMzIgZm9yIElQdjYuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaXBcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUcnVlIGZvciB2YWxpZCByYW5nZXMgd2l0aGluIHRoZSBDSURSIGxpbWl0cyxcblx0XHQgKiBvdGhlcndpc2UgZmFsc2UgKHJhbmdlcyBvdXRzaWRlIHRoZSBsaW1pdCwgc2luZ2xlIElQcywgbm9uLUlQcykuXG5cdFx0ICovXG5cdFx0dmFsaWRDSURSOiAoaXApID0+IHtcblx0XHRcdGlmIChNb3JlYml0cy5pcC5pc1JhbmdlKGlwKSkge1xuXHRcdFx0XHRjb25zdCBzdWJuZXQgPSBOdW1iZXIucGFyc2VJbnQoaXAubWF0Y2goL1xcLyhcXGR7MSwzfSkkLylbMV0sIDEwKTtcblx0XHRcdFx0aWYgKHN1Ym5ldCkge1xuXHRcdFx0XHRcdC8vIFNob3VsZCBiZSByZWR1bmRhbnRcblx0XHRcdFx0XHRpZiAobXcudXRpbC5pc0lQdjZBZGRyZXNzKGlwLCB0cnVlKSkge1xuXHRcdFx0XHRcdFx0aWYgKHN1Ym5ldCA+PSAzMikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKHN1Ym5ldCA+PSAxNikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBHZXQgdGhlIC82NCBzdWJuZXQgZm9yIGFuIElQdjYgYWRkcmVzcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBpcHY2IC0gVGhlIElQdjYgYWRkcmVzcywgd2l0aCBvciB3aXRob3V0IGEgc3VibmV0LlxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufHN0cmluZ30gLSBGYWxzZSBpZiBub3QgSVB2NiBvciBiaWdnZXIgdGhhbiBhIDY0LFxuXHRcdCAqIG90aGVyd2lzZSB0aGUgKHNhbml0aXplZCkgLzY0IGFkZHJlc3MuXG5cdFx0ICovXG5cdFx0Z2V0NjQ6IChpcHY2KSA9PiB7XG5cdFx0XHRpZiAoIWlwdjYgfHwgIW13LnV0aWwuaXNJUHY2QWRkcmVzcyhpcHY2LCB0cnVlKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdWJuZXRNYXRjaCA9IGlwdjYubWF0Y2goL1xcLyhcXGR7MSwzfSkkLyk7XG5cdFx0XHRpZiAoc3VibmV0TWF0Y2ggJiYgTnVtYmVyLnBhcnNlSW50KHN1Ym5ldE1hdGNoWzFdLCAxMCkgPCA2NCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpcHY2ID0gTW9yZWJpdHMuaXAuc2FuaXRpemVJUHY2KGlwdjYpO1xuXHRcdFx0Y29uc3QgaXBSZWdleCA9IC9eKCg/OlswLTlBLUZdezEsNH06KXs0fSkoPzpbMC05QS1GXXsxLDR9Oil7M31bMC05QS1GXXsxLDR9KD86XFwvXFxkezEsM30pPyQvO1xuXHRcdFx0cmV0dXJuIGlwdjYucmVwbGFjZShpcFJlZ2V4LCAnJDEnLmNvbmNhdCgnMDowOjA6MC82NCcpKTtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogSGVscGVyIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHN0cmluZ3MuXG5cdCAqXG5cdCAqIEBuYW1lc3BhY2UgTW9yZWJpdHMuc3RyaW5nXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKi9cblx0TW9yZWJpdHMuc3RyaW5nID0ge1xuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRvVXBwZXJDYXNlRmlyc3RDaGFyOiAoc3RyKSA9PiB7XG5cdFx0XHRzdHIgPSBzdHIudG9TdHJpbmcoKTtcblx0XHRcdHJldHVybiBzdHIuc2xpY2UoMCwgMSkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRvTG93ZXJDYXNlRmlyc3RDaGFyOiAoc3RyKSA9PiB7XG5cdFx0XHRzdHIgPSBzdHIudG9TdHJpbmcoKTtcblx0XHRcdHJldHVybiBzdHIuc2xpY2UoMCwgMSkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEdpdmVzIGFuIGFycmF5IG9mIHN1YnN0cmluZ3Mgb2YgYHN0cmAgLSBzdGFydGluZyB3aXRoIGBzdGFydGAgYW5kXG5cdFx0ICogZW5kaW5nIHdpdGggYGVuZGAgLSB3aGljaCBpcyBub3QgaW4gYHNraXBsaXN0YC4gIEludGVuZGVkIGZvciB1c2Vcblx0XHQgKiBvbiB3aWtpdGV4dCB3aXRoIHRlbXBsYXRlcyBvciBsaW5rcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhcnRcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gZW5kXG5cdFx0ICogQHBhcmFtIHsoc3RyaW5nW118c3RyaW5nKX0gW3NraXBsaXN0XVxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmdbXX1cblx0XHQgKiBAdGhyb3dzIElmIHRoZSBgc3RhcnRgIGFuZCBgZW5kYCBzdHJpbmdzIGFyZW4ndCBvZiB0aGUgc2FtZSBsZW5ndGguXG5cdFx0ICogQHRocm93cyBJZiBgc2tpcGxpc3RgIGlzbid0IGFuIGFycmF5IG9yIHN0cmluZ1xuXHRcdCAqL1xuXHRcdHNwbGl0V2VpZ2h0ZWRCeUtleXM6IChzdHIsIHN0YXJ0LCBlbmQsIHNraXBsaXN0KSA9PiB7XG5cdFx0XHRpZiAoc3RhcnQubGVuZ3RoICE9PSBlbmQubGVuZ3RoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignc3RhcnQgbWFya2VyIGFuZCBlbmQgbWFya2VyIG11c3QgYmUgb2YgdGhlIHNhbWUgbGVuZ3RoJyk7XG5cdFx0XHR9XG5cdFx0XHRsZXQgbGV2ZWwgPSAwO1xuXHRcdFx0bGV0IGluaXRpYWwgPSBudWxsO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc2tpcGxpc3QpKSB7XG5cdFx0XHRcdGlmIChza2lwbGlzdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0c2tpcGxpc3QgPSBbXTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygc2tpcGxpc3QgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0c2tpcGxpc3QgPSBbc2tpcGxpc3RdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ25vbi1hcHBsaWNhYmxlIHNraXBsaXN0IHBhcmFtZXRlcicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc2tpcGxpc3QpIHtcblx0XHRcdFx0XHRpZiAoc3RyLnNsaWNlKGksIGkgKyBlbGVtZW50Lmxlbmd0aCkgPT09IGVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGkgKz0gZWxlbWVudC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzdHIuc2xpY2UoaSwgaSArIHN0YXJ0Lmxlbmd0aCkgPT09IHN0YXJ0KSB7XG5cdFx0XHRcdFx0aWYgKGluaXRpYWwgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGluaXRpYWwgPSBpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQrK2xldmVsO1xuXHRcdFx0XHRcdGkgKz0gc3RhcnQubGVuZ3RoIC0gMTtcblx0XHRcdFx0fSBlbHNlIGlmIChzdHIuc2xpY2UoaSwgaSArIGVuZC5sZW5ndGgpID09PSBlbmQpIHtcblx0XHRcdFx0XHQtLWxldmVsO1xuXHRcdFx0XHRcdGkgKz0gZW5kLmxlbmd0aCAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFsZXZlbCAmJiBpbml0aWFsICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gc3RyLnNsaWNlKGluaXRpYWwsIGkgKyAxKTtcblx0XHRcdFx0XHRpbml0aWFsID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEZvcm1hdHMgZnJlZWZvcm0gXCJyZWFzb25cIiAoZnJvbSBhIHRleHRhcmVhKSBmb3IgZGVsZXRpb24vb3RoZXJcblx0XHQgKiB0ZW1wbGF0ZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgc3Vic3RpdHV0ZWQsIChlLmcuIFBST0QsIFhGRCwgUlBQKS5cblx0XHQgKiBIYW5kbGVzIGB8YCBvdXRzaWRlIGEgbm93aWtpIHRhZy5cblx0XHQgKiBPcHRpb25hbGx5LCBhbHNvIGFkZHMgYSBzaWduYXR1cmUgaWYgbm90IHByZXNlbnQgYWxyZWFkeS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRTaWddXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHQgKi9cblx0XHRmb3JtYXRSZWFzb25UZXh0OiAoc3RyLCBhZGRTaWcpID0+IHtcblx0XHRcdGxldCByZWFzb24gPSAoc3RyIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKTtcblx0XHRcdGNvbnN0IHVuYmluZGVyID0gbmV3IE1vcmViaXRzLnVuYmluZGVyKHJlYXNvbik7XG5cdFx0XHR1bmJpbmRlci51bmJpbmQoJzxubycuY29uY2F0KCd3aWtpJywgJz4nKSwgJzwvbm8nLmNvbmNhdCgnd2lraScsICc+JykpO1xuXHRcdFx0dW5iaW5kZXIuY29udGVudCA9IHVuYmluZGVyLmNvbnRlbnQucmVwbGFjZSgvXFx8L2csICd7eycuY29uY2F0KCdzdWJzdDonLCAnIX19JykpO1xuXHRcdFx0cmVhc29uID0gdW5iaW5kZXIucmViaW5kKCk7XG5cdFx0XHRpZiAoYWRkU2lnKSB7XG5cdFx0XHRcdGNvbnN0IHNpZyA9ICd+ficuY29uY2F0KCd+ficpO1xuXHRcdFx0XHRjb25zdCBzaWdJbmRleCA9IHJlYXNvbi5sYXN0SW5kZXhPZihzaWcpO1xuXHRcdFx0XHRpZiAoc2lnSW5kZXggPT09IC0xIHx8IHNpZ0luZGV4ICE9PSByZWFzb24ubGVuZ3RoIC0gc2lnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJlYXNvbiArPSBgICR7c2lnfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZWFzb24udHJpbSgpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogRm9ybWF0cyBhIFwicmVhc29uXCIgKGZyb20gYSB0ZXh0YXJlYSkgZm9yIGluY2x1c2lvbiBpbiBhIHVzZXJzcGFjZVxuXHRcdCAqIGxvZy4gIFJlcGxhY2VzIG5ld2xpbmVzIHdpdGgge3tQYn19LCBhbmQgYWRkcyBhbiBleHRyYSBgI2AgYmVmb3JlXG5cdFx0ICogbGlzdCBpdGVtcyBmb3IgcHJvcGVyIGZvcm1hdHRpbmcuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHQgKi9cblx0XHRmb3JtYXRSZWFzb25Gb3JMb2c6IChzdHIpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHN0clxuXHRcdFx0XHRcdC8vIGhhbmRsZSBsaW5lIGJyZWFrcywgd2hpY2ggb3RoZXJ3aXNlIGJyZWFrIG51bWJlcmluZ1xuXHRcdFx0XHRcdC5yZXBsYWNlKC9cXG4rL2csICd7e3BifX0nKVxuXHRcdFx0XHRcdC8vIHB1dCBhbiBleHRyYSAjIGluIGZyb250IGJlZm9yZSBidWxsZXRlZCBvciBudW1iZXJlZCBsaXN0IGl0ZW1zXG5cdFx0XHRcdFx0LnJlcGxhY2UoL14oIyspL2dtLCAnIyQxJylcblx0XHRcdFx0XHQucmVwbGFjZSgvXihcXCorKS9nbSwgJyMkMScpXG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogTGlrZSBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKClgLCBidXQgZXNjYXBlcyBhbnkgZG9sbGFyIHNpZ25zIGluXG5cdFx0ICogdGhlIHJlcGxhY2VtZW50IHN0cmluZy4gIFVzZWZ1bCB3aGVuIHRoZSB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIGlzXG5cdFx0ICogYXJiaXRyYXJ5LCBzdWNoIGFzIGEgdXNlcm5hbWUgb3IgZnJlZWZvcm0gdXNlciBpbnB1dCwgYW5kIGNvdWxkXG5cdFx0ICogY29udGFpbiBkb2xsYXIgc2lnbnMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gVGV4dCBpbiB3aGljaCB0byByZXBsYWNlLlxuXHRcdCAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHQgKi9cblx0XHRzYWZlUmVwbGFjZTogKHN0cmluZywgcGF0dGVybiwgcmVwbGFjZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBzdHJpbmcucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQvZywgJyQkJCQnKSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBEZXRlcm1pbmUgaWYgdGhlIHVzZXItcHJvdmlkZWQgZXhwaXJhdGlvbiB3aWxsIGJlIGNvbnNpZGVyZWQgYW5cblx0XHQgKiBpbmZpbml0ZS1sZW5ndGggYnkgTVcuXG5cdFx0ICpcblx0XHQgKiBAc2VlIHtAbGluayBodHRwczovL3BoYWJyaWNhdG9yLndpa2ltZWRpYS5vcmcvVDY4NjQ2fVxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGV4cGlyeVxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGlzSW5maW5pdHk6IChleHBpcnkpID0+IHtcblx0XHRcdHJldHVybiBbJ2luZGVmaW5pdGUnLCAnaW5maW5pdHknLCAnaW5maW5pdGUnLCAnbmV2ZXInXS5pbmNsdWRlcyhleHBpcnkpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogRXNjYXBlcyBhIHN0cmluZyB0byBiZSB1c2VkIGluIGEgUmVnRXhwLCByZXBsYWNpbmcgc3BhY2VzIGFuZFxuXHRcdCAqIHVuZGVyc2NvcmVzIHdpdGggYFtfIF1gIGFzIHRoZXkgYXJlIG9mdGVuIGVxdWl2YWxlbnQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFN0cmluZyB0byBiZSBlc2NhcGVkLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGVzY2FwZWQgdGV4dC5cblx0XHQgKi9cblx0XHRlc2NhcGVSZWdFeHA6ICh0ZXh0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbXcudXRpbC5lc2NhcGVSZWdFeHAodGV4dCkucmVwbGFjZSgvIHxfL2csICdbXyBdJyk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBmb3JtYXRUaW1lXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyp9IHRpbWUgVGhlIHN0cmluZyB0byBmb3JhbXRcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdGZvcm1hdFRpbWU6ICh0aW1lKSA9PiB7XG5cdFx0XHRsZXQgbTtcblx0XHRcdGlmICgobSA9IHRpbWUubWF0Y2goL15cXHMqKFxcZCspXFxzKnNlYyhvbmQpP3M/XFxzKiQvKSkgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGAke21bMV1956eSYDtcblx0XHRcdH1cblx0XHRcdGlmICgobSA9IHRpbWUubWF0Y2goL15cXHMqKFxcZCspXFxzKm1pbih1dGUpP3M/XFxzKiQvKSkgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGAke21bMV195YiGYDtcblx0XHRcdH1cblx0XHRcdGlmICgobSA9IHRpbWUubWF0Y2goL15cXHMqKFxcZCspXFxzKmhvdXJzP1xccyokLykpICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBtWzFdICsgd2luZG93LndnVUxTKCflsI/ml7YnLCAn5bCP5pmCJyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKG0gPSB0aW1lLm1hdGNoKC9eXFxzKihcXGQrKVxccypkYXlzP1xccyokLykpICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBgJHttWzFdfeWkqWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKG0gPSB0aW1lLm1hdGNoKC9eXFxzKihcXGQrKVxccyp3ZWVrcz9cXHMqJC8pKSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gbVsxXSArIHdpbmRvdy53Z1VMUygn5ZGoJywgJ+mAsScpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKChtID0gdGltZS5tYXRjaCgvXlxccyooXFxkKylcXHMqbW9udGhzP1xccyokLykpICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBtWzFdICsgd2luZG93LndnVUxTKCfkuKrmnIgnLCAn5YCL5pyIJyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoKG0gPSB0aW1lLm1hdGNoKC9eXFxzKihcXGQrKVxccyp5ZWFycz9cXHMqJC8pKSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gYCR7bVsxXX3lubRgO1xuXHRcdFx0fVxuXHRcdFx0aWYgKE1vcmViaXRzLnN0cmluZy5pc0luZmluaXR5KHRpbWUudHJpbSgpKSkge1xuXHRcdFx0XHRyZXR1cm4gd2luZG93LndnVUxTKCfml6DpmZDmnJ8nLCAn54Sh6ZmQ5pyfJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGltZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEFwcGVuZCBwdW5jdHVhdGlvbiB0byBhIHN0cmluZyB3aGVuIGl0J3MgbWlzc2luZ1xuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHN0clxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBwdW5jdHVhdGlvblxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0YXBwZW5kUHVuY3R1YXRpb246IChzdHIsIHB1bmN0dWF0aW9uKSA9PiB7XG5cdFx0XHRpZiAocHVuY3R1YXRpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwdW5jdHVhdGlvbiA9ICfjgIInO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0ci5zZWFyY2goL1suPyE744CC77yf77yB77ybXSQvKSA9PT0gLTEpIHtcblx0XHRcdFx0c3RyICs9IHB1bmN0dWF0aW9uO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHN0cjtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogSGVscGVyIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIGFycmF5cy5cblx0ICpcblx0ICogQG5hbWVzcGFjZSBNb3JlYml0cy5hcnJheVxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICovXG5cdE1vcmViaXRzLmFycmF5ID0ge1xuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZSBkdXBsaWNhdGVkIGl0ZW1zIGZyb20gYW4gYXJyYXkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBhcnJcblx0XHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgY29weSBvZiB0aGUgYXJyYXkgd2l0aCBkdXBsaWNhdGVzIHJlbW92ZWQuXG5cdFx0ICogQHRocm93cyBXaGVuIHByb3ZpZGVkIGEgbm9uLWFycmF5LlxuXHRcdCAqL1xuXHRcdHVuaXE6IChhcnIpID0+IHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0Egbm9uLWFycmF5IG9iamVjdCBwYXNzZWQgdG8gTW9yZWJpdHMuYXJyYXkudW5pcScpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFyci5maWx0ZXIoKGl0ZW0sIGlkeCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYXJyLmluZGV4T2YoaXRlbSkgPT09IGlkeDtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIG5vbi1kdXBsaWNhdGVkIGl0ZW1zIGZyb20gYW4gYXJyYXkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBhcnJcblx0XHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgY29weSBvZiB0aGUgYXJyYXkgd2l0aCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWFjaCB2YWx1ZVxuXHRcdCAqIHJlbW92ZWQ7IHN1YnNlcXVlbnQgaW5zdGFuY2VzIG9mIHRob3NlIHZhbHVlcyAoZHVwbGljYXRlcykgcmVtYWluLlxuXHRcdCAqIEB0aHJvd3MgV2hlbiBwcm92aWRlZCBhIG5vbi1hcnJheS5cblx0XHQgKi9cblx0XHRkdXBzOiAoYXJyKSA9PiB7XG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdBIG5vbi1hcnJheSBvYmplY3QgcGFzc2VkIHRvIE1vcmViaXRzLmFycmF5LmR1cHMnKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnIuZmlsdGVyKChpdGVtLCBpZHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFyci5pbmRleE9mKGl0ZW0pICE9PSBpZHg7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEJyZWFrIHVwIGFuIGFycmF5IGludG8gc21hbGxlciBhcnJheXMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBhcnJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFNpemUgb2YgZWFjaCBjaHVuayAoZXhjZXB0IHRoZSBsYXN0LCB3aGljaCBjb3VsZCBiZSBkaWZmZXJlbnQpLlxuXHRcdCAqIEByZXR1cm5zIHtBcnJheVtdfSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBzbWFsbGVyLCBjaHVua2VkIGFycmF5cy5cblx0XHQgKiBAdGhyb3dzIFdoZW4gcHJvdmlkZWQgYSBub24tYXJyYXkuXG5cdFx0ICovXG5cdFx0Y2h1bms6IChhcnIsIHNpemUpID0+IHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0Egbm9uLWFycmF5IG9iamVjdCBwYXNzZWQgdG8gTW9yZWJpdHMuYXJyYXkuY2h1bmsnKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicgfHwgc2l6ZSA8PSAwKSB7XG5cdFx0XHRcdC8vIHByZXR0eSBpbXBvc3NpYmxlIHRvIGRvIGFueXRoaW5nIDopXG5cdFx0XHRcdHJldHVybiBbYXJyXTsgLy8gd2UgcmV0dXJuIGFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhpcyBhcnJheS5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbnVtQ2h1bmtzID0gTWF0aC5jZWlsKGFyci5sZW5ndGggLyBzaXplKTtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IEFycmF5LmZyb20oe1xuXHRcdFx0XHRsZW5ndGg6IG51bUNodW5rcyxcblx0XHRcdH0pO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBudW1DaHVua3M7IGkrKykge1xuXHRcdFx0XHRyZXN1bHRbaV0gPSBhcnIuc2xpY2UoaSAqIHNpemUsIChpICsgMSkgKiBzaXplKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0fTtcblx0LyoqXG5cdCAqIFV0aWxpdGllcyB0byBlbmhhbmNlIHNlbGVjdDIgbWVudXMuIFNlZSB0d2lua2xld2FybiwgdHdpbmtsZWJsb2NrXG5cdCAqIGZvciBzYW1wbGUgdXNhZ2VzLlxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL3NlbGVjdDIub3JnL31cblx0ICpcblx0ICogQG5hbWVzcGFjZSBNb3JlYml0cy5zZWxlY3QyXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKiBAcmVxdWlyZXMganF1ZXJ5LnNlbGVjdDJcblx0ICovXG5cdE1vcmViaXRzLnNlbGVjdDIgPSB7XG5cdFx0bWF0Y2hlcnM6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQ3VzdG9tIG1hdGNoZXIgaW4gd2hpY2ggaWYgdGhlIG9wdGdyb3VwIG5hbWUgbWF0Y2hlcywgYWxsIG9wdGlvbnMgaW4gdGhhdFxuXHRcdFx0ICogZ3JvdXAgYXJlIHNob3duLCBsaWtlIGluIGpxdWVyeS5jaG9zZW4uXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHsqfSBwYXJhbXNcblx0XHRcdCAqIEBwYXJhbSB7Kn0gZGF0YVxuXHRcdFx0ICovXG5cdFx0XHRvcHRncm91cEZ1bGw6IChwYXJhbXMsIGRhdGEpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3JpZ2luYWxNYXRjaGVyID0gJC5mbi5zZWxlY3QyLmRlZmF1bHRzLmRlZmF1bHRzLm1hdGNoZXI7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsTWF0Y2hlcihwYXJhbXMsIGRhdGEpO1xuXHRcdFx0XHRpZiAocmVzdWx0ICYmIHBhcmFtcy50ZXJtICYmIGRhdGEudGV4dC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHBhcmFtcy50ZXJtLnRvVXBwZXJDYXNlKCkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmNoaWxkcmVuID0gZGF0YS5jaGlsZHJlbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdC8qKlxuXHRcdFx0ICogQ3VzdG9tIG1hdGNoZXIgdGhhdCBtYXRjaGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB3b3JkcyBvbmx5LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7Kn0gcGFyYW1zXG5cdFx0XHQgKiBAcGFyYW0geyp9IGRhdGFcblx0XHRcdCAqL1xuXHRcdFx0d29yZEJlZ2lubmluZzogKHBhcmFtcywgZGF0YSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5hbE1hdGNoZXIgPSAkLmZuLnNlbGVjdDIuZGVmYXVsdHMuZGVmYXVsdHMubWF0Y2hlcjtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gb3JpZ2luYWxNYXRjaGVyKHBhcmFtcywgZGF0YSk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhcGFyYW1zLnRlcm0gfHxcblx0XHRcdFx0XHQocmVzdWx0ICYmIG5ldyBSZWdFeHAoYFxcXFxiJHttdy51dGlsLmVzY2FwZVJlZ0V4cChwYXJhbXMudGVybSl9YCwgJ2knKS50ZXN0KHJlc3VsdC50ZXh0KSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0sXG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBVbmRlcmxpbmUgbWF0Y2hlZCBwYXJ0IG9mIG9wdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyp9IGRhdGFcblx0XHQgKi9cblx0XHRoaWdobGlnaHRTZWFyY2hNYXRjaGVzOiAoZGF0YSkgPT4ge1xuXHRcdFx0Y29uc3Qgc2VhcmNoVGVybSA9IE1vcmViaXRzLnNlbGVjdDJTZWFyY2hRdWVyeTtcblx0XHRcdGlmICghc2VhcmNoVGVybSB8fCBkYXRhLmxvYWRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGRhdGEudGV4dDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlkeCA9IGRhdGEudGV4dC50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGVybS50b1VwcGVyQ2FzZSgpKTtcblx0XHRcdGlmIChpZHggPCAwKSB7XG5cdFx0XHRcdHJldHVybiBkYXRhLnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJCgnPHNwYW4+JykuYXBwZW5kKFxuXHRcdFx0XHRkYXRhLnRleHQuc2xpY2UoMCwgaWR4KSxcblx0XHRcdFx0JCgnPHNwYW4+Jylcblx0XHRcdFx0XHQuY3NzKCd0ZXh0LWRlY29yYXRpb24nLCAndW5kZXJsaW5lJylcblx0XHRcdFx0XHQudGV4dChkYXRhLnRleHQuc2xpY2UoaWR4LCBpZHggKyBzZWFyY2hUZXJtLmxlbmd0aCkpLFxuXHRcdFx0XHRkYXRhLnRleHQuc2xpY2UoaWR4ICsgc2VhcmNoVGVybS5sZW5ndGgpXG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogSW50ZXJjZXB0IHF1ZXJ5IGFzIGl0IGlzIGhhcHBlbmluZywgZm9yIHVzZSBpbiBoaWdobGlnaHRTZWFyY2hNYXRjaGVzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHsqfSBwYXJhbXNcblx0XHQgKi9cblx0XHRxdWVyeUludGVyY2VwdG9yOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRNb3JlYml0cy5zZWxlY3QyU2VhcmNoUXVlcnkgPSBwYXJhbXMgJiYgcGFyYW1zLnRlcm07XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBPcGVuIGRyb3Bkb3duIGFuZCBiZWdpbiBzZWFyY2ggd2hlbiB0aGUgYC5zZWxlY3QyLXNlbGVjdGlvbmAgaGFzXG5cdFx0ICogZm9jdXMgYW5kIGEga2V5IGlzIHByZXNzZWQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2XG5cdFx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9pc3N1ZXMvMzI3OSNpc3N1ZWNvbW1lbnQtNDQyNTI0MTQ3fVxuXHRcdCAqL1xuXHRcdGF1dG9TdGFydDogKGV2KSA9PiB7XG5cdFx0XHRpZiAoZXYud2hpY2ggPCA0OCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgdGFyZ2V0ID0gJChldi50YXJnZXQpLmNsb3Nlc3QoJy5zZWxlY3QyLWNvbnRhaW5lcicpO1xuXHRcdFx0aWYgKCF0YXJnZXQubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRhcmdldCA9IHRhcmdldC5wcmV2KCk7XG5cdFx0XHR0YXJnZXQuc2VsZWN0Mignb3BlbicpO1xuXHRcdFx0Y29uc3Qgc2VhcmNoID0gdGFyZ2V0LmRhdGEoJ3NlbGVjdDInKS5kcm9wZG93bi4kc2VhcmNoIHx8IHRhcmdldC5kYXRhKCdzZWxlY3QyJykuc2VsZWN0aW9uLiRzZWFyY2g7XG5cdFx0XHQvLyBVc2UgRE9NIC5mb2N1cygpIHRvIHdvcmsgYXJvdW5kIGEgalF1ZXJ5IDMuNi4wIHJlZ3Jlc3Npb24gKGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvaXNzdWVzLzU5OTMpXG5cdFx0XHRzZWFyY2hbMF0uZm9jdXMoKTtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogVGVtcG9yYXJpbHkgaGlkZSBhIHBhcnQgb2YgYSBzdHJpbmcgd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVzdCBvZiBpdC5cblx0ICogVXNlZCBieSB7QGxpbmsgTW9yZWJpdHMud2lraXRleHQucGFnZSNjb21tZW50T3V0SW1hZ2V8TW9yZWJpdHMud2lraXRleHQucGFnZS5jb21tZW50T3V0SW1hZ2V9LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICogQGNsYXNzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBUaGUgaW5pdGlhbCB0ZXh0IHRvIHByb2Nlc3MuXG5cdCAqIEBleGFtcGxlIGNvbnN0IHUgPSBuZXcgTW9yZWJpdHMudW5iaW5kZXIoJ0hlbGxvIHdvcmxkIDwhLS0gd29ybGQgLS0+IHdvcmxkJyk7XG5cdCAqIHUudW5iaW5kKCc8IS0tJywgJy0tPicpOyAvLyB0ZXh0IGluc2lkZSBjb21tZW50IHJlbWFpbnMgaW50YWN0XG5cdCAqIHUuY29udGVudCA9IHUuY29udGVudC5yZXBsYWNlKC93b3JsZC9nLCAnZWFydGgnKTtcblx0ICogdS5yZWJpbmQoKTsgLy8gZ2l2ZXMgJ0hlbGxvIGVhcnRoIDwhLS0gd29ybGQgLS0+IGVhcnRoJ1xuXHQgKi9cblx0TW9yZWJpdHMudW5iaW5kZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG5cdFx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0LyoqIFRoZSB0ZXh0IGJlaW5nIHByb2Nlc3NlZC4gKi9cblx0XHR0aGlzLmNvbnRlbnQgPSBzdHJpbmc7XG5cdFx0dGhpcy5jb3VudGVyID0gMDtcblx0XHR0aGlzLmhpc3RvcnkgPSB7fTtcblx0XHR0aGlzLnByZWZpeCA9IGAlVU5JUTo6JHtNYXRoLnJhbmRvbSgpfTo6YDtcblx0XHR0aGlzLnBvc3RmaXggPSAnOjpVTklRJSc7XG5cdH07XG5cdE1vcmViaXRzLnVuYmluZGVyLnByb3RvdHlwZSA9IHtcblx0XHQvKipcblx0XHQgKiBIaWRlIHRoZSByZWdpb24gZW5jYXBzdWxhdGVkIGJ5IHRoZSBgcHJlZml4YCBhbmQgYHBvc3RmaXhgIGZyb21cblx0XHQgKiBzdHJpbmcgcHJvY2Vzc2luZy4gIGBwcmVmaXhgIGFuZCBgcG9zdGZpeGAgd2lsbCBiZSB1c2VkIGluIGFcblx0XHQgKiBSZWdFeHAsIHNvIGl0ZW1zIHRoYXQgbmVlZCBlc2NhcGluZyBzaG91bGQgYmUgdXNlIGBcXFxcYC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gcG9zdGZpeFxuXHRcdCAqIEB0aHJvd3MgSWYgZWl0aGVyIGBwcmVmaXhgIG9yIGBwb3N0Zml4YCBpcyBtaXNzaW5nLlxuXHRcdCAqL1xuXHRcdHVuYmluZChwcmVmaXgsIHBvc3RmaXgpIHtcblx0XHRcdGlmICghcHJlZml4IHx8ICFwb3N0Zml4KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignQm90aCBwcmVmaXggYW5kIHBvc3RmaXggbXVzdCBiZSBwcm92aWRlZCcpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmUgPSBuZXcgUmVnRXhwKGAke3ByZWZpeH0oW1xcXFxzXFxcXFNdKj8pJHtwb3N0Zml4fWAsICdnJyk7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZShyZSwgTW9yZWJpdHMudW5iaW5kZXIuZ2V0Q2FsbGJhY2sodGhpcykpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogUmVzdG9yZSB0aGUgaGlkZGVuIHBvcnRpb24gb2YgdGhlIGBjb250ZW50YCBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcHJvY2Vzc2VkIG91dHB1dC5cblx0XHQgKi9cblx0XHRyZWJpbmQoKSB7XG5cdFx0XHRsZXQge2NvbnRlbnR9ID0gdGhpcztcblx0XHRcdGZvciAoY29uc3QgY3VycmVudCBpbiB0aGlzLmhpc3RvcnkpIHtcblx0XHRcdFx0aWYgKCFPYmplY3QuaGFzT3duKHRoaXMuaGlzdG9yeSwgY3VycmVudCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250ZW50ID0gY29udGVudC5yZXBsYWNlKGN1cnJlbnQsIHRoaXMuaGlzdG9yeVtjdXJyZW50XSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHR9LFxuXHRcdHByZWZpeDogbnVsbCxcblx0XHQvLyAlVU5JUTo6MC41OTU1OTgxNjQ0OTM4MzI0Ojpcblx0XHRwb3N0Zml4OiBudWxsLFxuXHRcdC8vIDo6VU5JUSVcblx0XHRjb250ZW50OiBudWxsLFxuXHRcdC8vIHN0cmluZ1xuXHRcdGNvdW50ZXI6IG51bGwsXG5cdFx0Ly8gMCsrXG5cdFx0aGlzdG9yeTogbnVsbCwgLy8ge31cblx0fTtcblx0LyoqXG5cdCAqIEBwYXJhbSB7dHlwZW9mIE1vcmViaXRzfSBzZWxmXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy51bmJpbmRlclxuXHQgKi9cblx0TW9yZWJpdHMudW5iaW5kZXIuZ2V0Q2FsbGJhY2sgPSAoc2VsZikgPT4ge1xuXHRcdHJldHVybiAobWF0Y2gpID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBzZWxmLnByZWZpeCArIHNlbGYuY291bnRlciArIHNlbGYucG9zdGZpeDtcblx0XHRcdHNlbGYuaGlzdG9yeVtjdXJyZW50XSA9IG1hdGNoO1xuXHRcdFx0KytzZWxmLmNvdW50ZXI7XG5cdFx0XHRyZXR1cm4gY3VycmVudDtcblx0XHR9O1xuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLmRhdGUgKioqKioqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogQ3JlYXRlIGEgZGF0ZSBvYmplY3Qgd2l0aCBlbmhhbmNlZCBwcm9jZXNzaW5nIGNhcGFiaWxpdGllcywgYSBsYVxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9tb21lbnRqcy5jb20vfG1vbWVudC5qc30uIE1lZGlhV2lraSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFsc29cblx0ICogYWNjZXB0YWJsZSwgaW4gYWRkaXRpb24gdG8gZXZlcnl0aGluZyB0aGF0IEpTIERhdGUoKSBhY2NlcHRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gey4uLmFueX0gYXJnc1xuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICogQGNsYXNzXG5cdCAqL1xuXHRNb3JlYml0cy5kYXRlID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHQvLyBDaGVjayBNZWRpYVdpa2kgZm9ybWF0c1xuXHRcdC8vIE11c3QgYmUgZmlyc3Qgc2luY2UgZmlyZWZveCBlcnJvbmVvdXNseSBhY2NlcHRzIHRoZSB0aW1lc3RhbXBcblx0XHQvLyBmb3JtYXQsIHNhbnMgdGltZXpvbmUgKFNlZSBhbHNvOiAjOTIxLCAjOTM2LCAjMTE3NCwgIzExODcpLCBhbmQgdGhlXG5cdFx0Ly8gMTQtZGlnaXQgc3RyaW5nIHdpbGwgYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkuXG5cdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBbcGFyYW1dID0gYXJncztcblx0XHRcdGlmICgvXlxcZHsxNH0kLy50ZXN0KHBhcmFtKSkge1xuXHRcdFx0XHQvLyBZWVlZTU1EREhIbW1zc1xuXHRcdFx0XHRjb25zdCBkaWdpdE1hdGNoID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS8uZXhlYyhwYXJhbSk7XG5cdFx0XHRcdGlmIChkaWdpdE1hdGNoKSB7XG5cdFx0XHRcdFx0Ly8gLi4uLi4geWVhciAuLi4gbW9udGggLi4gZGF0ZSAuLi4gaG91ciAuLi4uIG1pbnV0ZSAuLi4uLiBzZWNvbmRcblx0XHRcdFx0XHR0aGlzLl9kID0gbmV3IERhdGUoXG5cdFx0XHRcdFx0XHRSZWZsZWN0LmFwcGx5KERhdGUuVVRDLCBudWxsLCBbXG5cdFx0XHRcdFx0XHRcdGRpZ2l0TWF0Y2hbMV0sXG5cdFx0XHRcdFx0XHRcdGRpZ2l0TWF0Y2hbMl0gLSAxLFxuXHRcdFx0XHRcdFx0XHRkaWdpdE1hdGNoWzNdLFxuXHRcdFx0XHRcdFx0XHRkaWdpdE1hdGNoWzRdLFxuXHRcdFx0XHRcdFx0XHRkaWdpdE1hdGNoWzVdLFxuXHRcdFx0XHRcdFx0XHRkaWdpdE1hdGNoWzZdLFxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gV2lraXRleHQgc2lnbmF0dXJlIHRpbWVzdGFtcFxuXHRcdFx0XHRjb25zdCBkYXRlUGFydHMgPSBNb3JlYml0cy5sMTBuLnNpZ25hdHVyZVRpbWVzdGFtcEZvcm1hdChwYXJhbSk7XG5cdFx0XHRcdGlmIChkYXRlUGFydHMpIHtcblx0XHRcdFx0XHR0aGlzLl9kID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgZGF0ZVBhcnRzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gVHJ5IHN0YW5kYXJkIGRhdGVcblx0XHR0aGlzLl9kID8/PSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KERhdGUsIFtEYXRlLCAuLi5nZW5lcmF0ZUFycmF5KGFyZ3MpXSkpKCk7XG5cdFx0Ly8gU3RpbGwgbm8/XG5cdFx0aWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuXHRcdFx0bXcubG9nLndhcm4oJ0ludmFsaWQgTW9yZWJpdHMuZGF0ZSBpbml0aWFsaXNhdGlvbjonLCBhcmdzKTtcblx0XHR9XG5cdH07XG5cdC8qKlxuXHQgKiBMb2NhbGl6ZWQgc3RyaW5ncyBmb3IgZGF0ZSBwcm9jZXNzaW5nLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMuZGF0ZVxuXHQgKiBAdHlwZSB7b2JqZWN0LjxzdHJpbmcsIHN0cmluZz59XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IG1vbnRoc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBtb250aHNTaG9ydFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBkYXlzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGRheXNTaG9ydFxuXHQgKiBAcHJvcGVydHkge29iamVjdC48c3RyaW5nLCBzdHJpbmc+fSByZWxhdGl2ZVRpbWVzXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEgPSB7XG5cdFx0Ly8gbWVzc2FnZSBuYW1lcyBoZXJlIGNvcnJlc3BvbmQgdG8gTWVkaWFXaWtpIG1lc3NhZ2UgbmFtZXNcblx0XHQvLyBObyBpMThuIGF0IHRoaXMgdGltZVxuXHRcdG1vbnRoczogWycx5pyIJywgJzLmnIgnLCAnM+aciCcsICc05pyIJywgJzXmnIgnLCAnNuaciCcsICc35pyIJywgJzjmnIgnLCAnOeaciCcsICcxMOaciCcsICcxMeaciCcsICcxMuaciCddLFxuXHRcdG1vbnRoc1Nob3J0OiBbJzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc25pyIJywgJzfmnIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sXG5cdFx0ZGF5czogWyfmmJ/mnJ/ml6UnLCAn5pif5pyf5LiAJywgJ+aYn+acn+S6jCcsICfmmJ/mnJ/kuIknLCAn5pif5pyf5ZubJywgJ+aYn+acn+S6lCcsICfmmJ/mnJ/lha0nXSxcblx0XHRkYXlzU2hvcnQ6IFsn5pelJywgJ+S4gCcsICfkuownLCAn5LiJJywgJ+WbmycsICfkupQnLCAn5YWtJ10sXG5cdFx0cmVsYXRpdmVUaW1lczoge1xuXHRcdFx0dGhpc0RheTogJ1vku4rlpKldQSBoaDptbScsXG5cdFx0XHRwcmV2RGF5OiAnW+aYqOWkqV1BIGhoOm1tJyxcblx0XHRcdG5leHREYXk6ICdb5piO5aSpXUEgaGg6bW0nLFxuXHRcdFx0dGhpc1dlZWs6ICdkZGRkQSBoaDptbScsXG5cdFx0XHRwYXN0V2VlazogJ1vkuIpdZGRkZEEgaGg6bW0nLFxuXHRcdFx0b3RoZXI6ICdZWVlZLU1NLUREJyxcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogTWFwIHVuaXRzIHdpdGggZ2V0dGVyL3NldHRlciBmdW5jdGlvbiBuYW1lcywgZm9yIGBhZGRgIGFuZCBgc3VidHJhY3RgXG5cdCAqIG1ldGhvZHMuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5kYXRlXG5cdCAqIEB0eXBlIHtvYmplY3QuPHN0cmluZywgc3RyaW5nPn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNlY29uZHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1pbnV0ZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGhvdXJzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXlzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWVrc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9udGhzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB5ZWFyc1xuXHQgKi9cblx0TW9yZWJpdHMuZGF0ZS51bml0TWFwID0ge1xuXHRcdHNlY29uZHM6ICdTZWNvbmRzJyxcblx0XHRtaW51dGVzOiAnTWludXRlcycsXG5cdFx0aG91cnM6ICdIb3VycycsXG5cdFx0ZGF5czogJ0RhdGUnLFxuXHRcdHdlZWtzOiAnV2VlaycsXG5cdFx0Ly8gTm90IGEgZnVuY3Rpb24gYnV0IGhhbmRsZWQgaW4gYGFkZGAgdGhyb3VnaCBjdW5uaW5nIHVzZSBvZiBtdWx0aXBsaWNhdGlvblxuXHRcdG1vbnRoczogJ01vbnRoJyxcblx0XHR5ZWFyczogJ0Z1bGxZZWFyJyxcblx0fTtcblx0TW9yZWJpdHMuZGF0ZS5wcm90b3R5cGUgPSB7XG5cdFx0LyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuXHRcdGlzVmFsaWQoKSB7XG5cdFx0XHRyZXR1cm4gIU51bWJlci5pc05hTih0aGlzLmdldFRpbWUoKSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0geyhEYXRlfE1vcmViaXRzLmRhdGUpfSBkYXRlXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0aXNCZWZvcmUoZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0VGltZSgpIDwgZGF0ZS5nZXRUaW1lKCk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0geyhEYXRlfE1vcmViaXRzLmRhdGUpfSBkYXRlXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0aXNBZnRlcihkYXRlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRUaW1lKCkgPiBkYXRlLmdldFRpbWUoKTtcblx0XHR9LFxuXHRcdC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuXHRcdGdldFVUQ01vbnRoTmFtZSgpIHtcblx0XHRcdHJldHVybiBNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEubW9udGhzW3RoaXMuZ2V0VVRDTW9udGgoKV07XG5cdFx0fSxcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gKi9cblx0XHRnZXRVVENNb250aE5hbWVBYmJyZXYoKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLm1vbnRoc1Nob3J0W3RoaXMuZ2V0VVRDTW9udGgoKV07XG5cdFx0fSxcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gKi9cblx0XHRnZXRNb250aE5hbWUoKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLm1vbnRoc1t0aGlzLmdldE1vbnRoKCldO1xuXHRcdH0sXG5cdFx0LyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG5cdFx0Z2V0TW9udGhOYW1lQWJicmV2KCkge1xuXHRcdFx0cmV0dXJuIE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5tb250aHNTaG9ydFt0aGlzLmdldE1vbnRoKCldO1xuXHRcdH0sXG5cdFx0LyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG5cdFx0Z2V0VVRDRGF5TmFtZSgpIHtcblx0XHRcdHJldHVybiBNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEuZGF5c1t0aGlzLmdldFVUQ0RheSgpXTtcblx0XHR9LFxuXHRcdC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuXHRcdGdldFVUQ0RheU5hbWVBYmJyZXYoKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLmRheXNTaG9ydFt0aGlzLmdldFVUQ0RheSgpXTtcblx0XHR9LFxuXHRcdC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuXHRcdGdldERheU5hbWUoKSB7XG5cdFx0XHRyZXR1cm4gTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLmRheXNbdGhpcy5nZXREYXkoKV07XG5cdFx0fSxcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gKi9cblx0XHRnZXREYXlOYW1lQWJicmV2KCkge1xuXHRcdFx0cmV0dXJuIE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5kYXlzU2hvcnRbdGhpcy5nZXREYXkoKV07XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBBZGQgYSBnaXZlbiBudW1iZXIgb2YgbWludXRlcywgaG91cnMsIGRheXMsIHdlZWtzLCBtb250aHMsIG9yIHllYXJzIHRvIHRoZSBkYXRlLlxuXHRcdCAqIFRoaXMgaXMgZG9uZSBpbi1wbGFjZS4gVGhlIG1vZGlmaWVkIGRhdGUgb2JqZWN0IGlzIGFsc28gcmV0dXJuZWQsIGFsbG93aW5nIGNoYWluaW5nLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciAtIFNob3VsZCBiZSBhbiBpbnRlZ2VyLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB1bml0XG5cdFx0ICogQHRocm93cyBJZiBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHVuaXQgaXMgZ2l2ZW4uXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLmRhdGV9XG5cdFx0ICovXG5cdFx0YWRkKG51bWJlciwgdW5pdCkge1xuXHRcdFx0bGV0IG51bSA9IE51bWJlci5wYXJzZUludChudW1iZXIsIDEwKTsgLy8gbm9ybWFsaXplXG5cdFx0XHRpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBudW1iZXIgXCIke251bWJlcn1cIiBwcm92aWRlZC5gKTtcblx0XHRcdH1cblx0XHRcdHVuaXQgPSB1bml0LnRvTG93ZXJDYXNlKCk7IC8vIG5vcm1hbGl6ZVxuXHRcdFx0Y29uc3Qge3VuaXRNYXB9ID0gTW9yZWJpdHMuZGF0ZTtcblx0XHRcdGxldCB1bml0Tm9ybSA9IHVuaXRNYXBbdW5pdF0gfHwgdW5pdE1hcFtgJHt1bml0fXNgXTsgLy8gc28gdGhhdCBib3RoIHNpbmd1bGFyIGFuZCAgcGx1cmFsIGZvcm1zIHdvcmtcblx0XHRcdGlmICh1bml0Tm9ybSkge1xuXHRcdFx0XHQvLyBObyBidWlsdC1pbiB3ZWVrIGZ1bmN0aW9ucywgc28gcmF0aGVyIHRoYW4gYnVpbGQgb3V0IElTTydzIGdldFdlZWsvc2V0V2VlaywganVzdCBtdWx0aXBseVxuXHRcdFx0XHQvLyBQcm9iYWJseSBjYW4ndCBiZSB1c2VkIGZvciBKdWxpYW4tPkdyZWdvcmlhbiBjaGFuZ2VvdmVycywgZXRjLlxuXHRcdFx0XHRpZiAodW5pdE5vcm0gPT09ICdXZWVrJykge1xuXHRcdFx0XHRcdHVuaXROb3JtID0gJ0RhdGUnO1xuXHRcdFx0XHRcdG51bSAqPSA3O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXNbYHNldCR7dW5pdE5vcm19YF0odGhpc1tgZ2V0JHt1bml0Tm9ybX1gXSgpICsgbnVtKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdW5pdCBcIiR7dW5pdH1cIjogT25seSAke09iamVjdC5rZXlzKHVuaXRNYXApLmpvaW4oJywgJyl9IGFyZSBhbGxvd2VkLmApO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogU3VidHJhY3RzIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pbnV0ZXMsIGhvdXJzLCBkYXlzLCB3ZWVrcywgbW9udGhzLCBvciB5ZWFycyB0byB0aGUgZGF0ZS5cblx0XHQgKiBUaGlzIGlzIGRvbmUgaW4tcGxhY2UuIFRoZSBtb2RpZmllZCBkYXRlIG9iamVjdCBpcyBhbHNvIHJldHVybmVkLCBhbGxvd2luZyBjaGFpbmluZy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgLSBTaG91bGQgYmUgYW4gaW50ZWdlci5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdW5pdFxuXHRcdCAqIEB0aHJvd3MgSWYgaW52YWxpZCBvciB1bnN1cHBvcnRlZCB1bml0IGlzIGdpdmVuLlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy5kYXRlfVxuXHRcdCAqL1xuXHRcdHN1YnRyYWN0KG51bWJlciwgdW5pdCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkKC1udW1iZXIsIHVuaXQpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogRm9ybWF0IHRoZSBkYXRlIGludG8gYSBzdHJpbmcgcGVyIHRoZSBnaXZlbiBmb3JtYXQgc3RyaW5nLlxuXHRcdCAqIFJlcGxhY2VtZW50IHN5bnRheCBpcyBhIHN1YnNldCBvZiB0aGF0IGluIG1vbWVudC5qczpcblx0XHQgKlxuXHRcdCAqIHwgU3ludGF4IHwgT3V0cHV0IHxcblx0XHQgKiB8LS0tLS0tLS18LS0tLS0tLS18XG5cdFx0ICogfCBIIHwgSG91cnMgKDI0LWhvdXIpIHxcblx0XHQgKiB8IEhIIHwgSG91cnMgKDI0LWhvdXIsIHBhZGRlZCB0byAyIGRpZ2l0cykgfFxuXHRcdCAqIHwgaCB8IEhvdXJzICgxMi1ob3VyKSB8XG5cdFx0ICogfCBoaCB8IEhvdXJzICgxMi1ob3VyLCBwYWRkZWQgdG8gMiBkaWdpdHMpIHxcblx0XHQgKiB8IEEgfCBBTSBvciBQTSB8XG5cdFx0ICogfCBtIHwgTWludXRlcyB8XG5cdFx0ICogfCBtbSB8IE1pbnV0ZXMgKHBhZGRlZCB0byAyIGRpZ2l0cykgfFxuXHRcdCAqIHwgcyB8IFNlY29uZHMgfFxuXHRcdCAqIHwgc3MgfCBTZWNvbmRzIChwYWRkZWQgdG8gMiBkaWdpdHMpIHxcblx0XHQgKiB8IFNTUyB8IE1pbGxpc2Vjb25kcyBmcmFnbWVudCwgMyBkaWdpdHMgfFxuXHRcdCAqIHwgZCB8IERheSBudW1iZXIgb2YgdGhlIHdlZWsgKFN1bj0wKSB8XG5cdFx0ICogfCBkZGQgfCBBYmJyZXZpYXRlZCBkYXkgbmFtZSB8XG5cdFx0ICogfCBkZGRkIHwgRnVsbCBkYXkgbmFtZSB8XG5cdFx0ICogfCBEIHwgRGF0ZSB8XG5cdFx0ICogfCBERCB8IERhdGUgKHBhZGRlZCB0byAyIGRpZ2l0cykgfFxuXHRcdCAqIHwgTSB8IE1vbnRoIG51bWJlciAoMS1pbmRleGVkKSB8XG5cdFx0ICogfCBNTSB8IE1vbnRoIG51bWJlciAoMS1pbmRleGVkLCBwYWRkZWQgdG8gMiBkaWdpdHMpIHxcblx0XHQgKiB8IE1NTSB8IEFiYnJldmlhdGVkIG1vbnRoIG5hbWUgfFxuXHRcdCAqIHwgTU1NTSB8IEZ1bGwgbW9udGggbmFtZSB8XG5cdFx0ICogfCBZIHwgWWVhciB8XG5cdFx0ICogfCBZWSB8IEZpbmFsIHR3byBkaWdpdHMgb2YgeWVhciAoMjAgZm9yIDIwMjAsIDQyIGZvciAxOTQyKSB8XG5cdFx0ICogfCBZWVlZIHwgWWVhciAoc2FtZSBhcyBgWWApIHxcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRzdHIgLSBGb3JtYXQgdGhlIGRhdGUgaW50byBhIHN0cmluZywgdXNpbmdcblx0XHQgKiB0aGUgcmVwbGFjZW1lbnQgc3ludGF4LiAgVXNlIGBbYCBhbmQgYF1gIHRvIGVzY2FwZSBpdGVtcy4gIElmIG5vdFxuXHRcdCAqIHByb3ZpZGVkLCB3aWxsIHJldHVybiB0aGUgSVNPLTg2MDEtZm9ybWF0dGVkIHN0cmluZy5cblx0XHQgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gW3pvbmU9c3lzdGVtXSAtIGBzeXN0ZW1gIChmb3IgYnJvd3Nlci1kZWZhdWx0IHRpbWUgem9uZSksXG5cdFx0ICogYHV0Y2AsIG9yIHNwZWNpZnkgYSB0aW1lIHpvbmUgYXMgbnVtYmVyIG9mIG1pbnV0ZXMgcmVsYXRpdmUgdG8gVVRDLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0Zm9ybWF0KGZvcm1hdHN0ciwgem9uZSkge1xuXHRcdFx0aWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuXHRcdFx0XHRyZXR1cm4gJ0ludmFsaWQgZGF0ZSc7IC8vIFB1dCB0aGUgdHJ1dGggb3V0LCBwcmVmZXJhYmxlIHRvIFwiTmFOTmFOTmFuIE5hTjpOYU5cIiBvciB3aGF0ZXZlclxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdWRhdGUgPSB0aGlzO1xuXHRcdFx0Ly8gY3JlYXRlIGEgbmV3IGRhdGUgb2JqZWN0IHRoYXQgd2lsbCBjb250YWluIHRoZSBkYXRlIHRvIGRpc3BsYXkgYXMgc3lzdGVtIHRpbWVcblx0XHRcdGlmICh6b25lID09PSAndXRjJykge1xuXHRcdFx0XHR1ZGF0ZSA9IG5ldyBNb3JlYml0cy5kYXRlKHRoaXMuZ2V0VGltZSgpKS5hZGQodGhpcy5nZXRUaW1lem9uZU9mZnNldCgpLCAnbWludXRlcycpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygem9uZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Ly8gY29udmVydCB0byB1dGMsIHRoZW4gYWRkIHRoZSB1dGMgb2Zmc2V0IGdpdmVuXG5cdFx0XHRcdHVkYXRlID0gbmV3IE1vcmViaXRzLmRhdGUodGhpcy5nZXRUaW1lKCkpLmFkZCh0aGlzLmdldFRpbWV6b25lT2Zmc2V0KCkgKyB6b25lLCAnbWludXRlcycpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZGVmYXVsdCB0byBJU09TdHJpbmdcblx0XHRcdGlmICghZm9ybWF0c3RyKSB7XG5cdFx0XHRcdHJldHVybiB1ZGF0ZS50b0lTT1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFkID0gKG51bSwgbGVuKSA9PiB7XG5cdFx0XHRcdGxlbiB8fD0gMjsgLy8gVXAgdG8gbGVuZ3RoIG9mIDAwICsgMVxuXHRcdFx0XHRyZXR1cm4gYDAwJHtudW19YC50b1N0cmluZygpLnNsaWNlKDAgLSBsZW4pO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGgyNCA9IHVkYXRlLmdldEhvdXJzKCk7XG5cdFx0XHRjb25zdCBtID0gdWRhdGUuZ2V0TWludXRlcygpO1xuXHRcdFx0Y29uc3QgcyA9IHVkYXRlLmdldFNlY29uZHMoKTtcblx0XHRcdGNvbnN0IG1zID0gdWRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG5cdFx0XHRjb25zdCBEID0gdWRhdGUuZ2V0RGF0ZSgpO1xuXHRcdFx0Y29uc3QgTSA9IHVkYXRlLmdldE1vbnRoKCkgKyAxO1xuXHRcdFx0Y29uc3QgWSA9IHVkYXRlLmdldEZ1bGxZZWFyKCk7XG5cdFx0XHRjb25zdCBoMTIgPSBoMjQgJSAxMiB8fCAxMjtcblx0XHRcdGNvbnN0IGFtT3JQbSA9IGgyNCA+PSAxMiA/ICfkuIvljYgnIDogJ+S4iuWNiCc7XG5cdFx0XHRjb25zdCByZXBsYWNlbWVudE1hcCA9IHtcblx0XHRcdFx0SEg6IHBhZChoMjQpLFxuXHRcdFx0XHRIOiBoMjQsXG5cdFx0XHRcdGhoOiBwYWQoaDEyKSxcblx0XHRcdFx0aDogaDEyLFxuXHRcdFx0XHRBOiBhbU9yUG0sXG5cdFx0XHRcdG1tOiBwYWQobSksXG5cdFx0XHRcdG0sXG5cdFx0XHRcdHNzOiBwYWQocyksXG5cdFx0XHRcdHMsXG5cdFx0XHRcdFNTUzogcGFkKG1zLCAzKSxcblx0XHRcdFx0ZGRkZDogdWRhdGUuZ2V0RGF5TmFtZSgpLFxuXHRcdFx0XHRkZGQ6IHVkYXRlLmdldERheU5hbWVBYmJyZXYoKSxcblx0XHRcdFx0ZDogdWRhdGUuZ2V0RGF5KCksXG5cdFx0XHRcdEREOiBwYWQoRCksXG5cdFx0XHRcdEQsXG5cdFx0XHRcdE1NTU06IHVkYXRlLmdldE1vbnRoTmFtZSgpLFxuXHRcdFx0XHRNTU06IHVkYXRlLmdldE1vbnRoTmFtZUFiYnJldigpLFxuXHRcdFx0XHRNTTogcGFkKE0pLFxuXHRcdFx0XHRNLFxuXHRcdFx0XHRZWVlZOiBZLFxuXHRcdFx0XHRZWTogcGFkKFkgJSAxMDApLFxuXHRcdFx0XHRZLFxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHVuYmluZGVyID0gbmV3IE1vcmViaXRzLnVuYmluZGVyKGZvcm1hdHN0cik7IC8vIGVzY2FwZSBzdHVmZiBiZXR3ZWVuIFsuLi5dXG5cdFx0XHR1bmJpbmRlci51bmJpbmQoU3RyaW5nLnJhd2BcXFtgLCBTdHJpbmcucmF3YFxcXWApO1xuXHRcdFx0dW5iaW5kZXIuY29udGVudCA9IHVuYmluZGVyLmNvbnRlbnQucmVwbGFjZShcblx0XHRcdFx0LyogUmVnZXggbm90ZXM6XG5cdFx0XHRcdCAqIGQoZHsyLDN9KT8gbWF0Y2hlcyBleGFjdGx5IDEsIDMgb3IgNCBvY2N1cnJlbmNlcyBvZiAnZCcgKCdkZCcgaXMgdHJlYXRlZCBhcyBhIGRvdWJsZSBtYXRjaCBvZiAnZCcpXG5cdFx0XHRcdCAqIFl7MSwyfShZezJ9KT8gbWF0Y2hlcyBleGFjdGx5IDEsIDIgb3IgNCBvY2N1cnJlbmNlcyBvZiAnWSdcblx0XHRcdFx0ICovXG5cdFx0XHRcdC9IezEsMn18aHsxLDJ9fG17MSwyfXxzezEsMn18U1NTfGQoZHsyLDN9KT98RHsxLDJ9fE17MSw0fXxZezEsMn0oWXsyfSk/fEEvZyxcblx0XHRcdFx0KG1hdGNoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2VtZW50TWFwW21hdGNoXTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB1bmJpbmRlci5yZWJpbmQoKS5yZXBsYWNlKC9cXFsoLio/KVxcXS9nLCAnJDEnKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEdpdmVzIGEgcmVhZGFibGUgcmVsYXRpdmUgdGltZSBzdHJpbmcgc3VjaCBhcyBcIlllc3RlcmRheSBhdCA2OjQzIFBNXCIgb3IgXCJMYXN0IFRodXJzZGF5IGF0IDExOjQ1IEFNXCIuXG5cdFx0ICogU2ltaWxhciB0byBgY2FsZW5kYXJgIGluIG1vbWVudC5qcywgYnV0IHdpdGggdGltZSB6b25lIHN1cHBvcnQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gW3pvbmU9c3lzdGVtXSAtICdzeXN0ZW0nIChmb3IgYnJvd3Nlci1kZWZhdWx0IHRpbWUgem9uZSksXG5cdFx0ICogJ3V0YycgKGZvciBVVEMpLCBvciBzcGVjaWZ5IGEgdGltZSB6b25lIGFzIG51bWJlciBvZiBtaW51dGVzIHBhc3QgVVRDLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0Y2FsZW5kYXIoem9uZSkge1xuXHRcdFx0Ly8gWmVybyBvdXQgdGhlIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIGFuZCBtaWxsaXNlY29uZHMgLSBrZWVwaW5nIG9ubHkgdGhlIGRhdGU7XG5cdFx0XHQvLyBmaW5kIHRoZSBkaWZmZXJlbmNlLiBOb3RlIHRoYXQgc2V0SG91cnMoKSByZXR1cm5zIHRoZSBzYW1lIHRoaW5nIGFzIGdldFRpbWUoKS5cblx0XHRcdGNvbnN0IGRhdGVEaWZmID0gKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkgLSBuZXcgRGF0ZSh0aGlzKS5zZXRIb3VycygwLCAwLCAwLCAwKSkgLyA4LjY0ZTc7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSBkYXRlRGlmZiA9PT0gMDpcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXQoTW9yZWJpdHMuZGF0ZS5sb2NhbGVEYXRhLnJlbGF0aXZlVGltZXMudGhpc0RheSwgem9uZSk7XG5cdFx0XHRcdGNhc2UgZGF0ZURpZmYgPT09IDE6XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0KE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5yZWxhdGl2ZVRpbWVzLnByZXZEYXksIHpvbmUpO1xuXHRcdFx0XHRjYXNlIGRhdGVEaWZmID4gMCAmJiBkYXRlRGlmZiA8IDc6XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0KE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5yZWxhdGl2ZVRpbWVzLnBhc3RXZWVrLCB6b25lKTtcblx0XHRcdFx0Y2FzZSBkYXRlRGlmZiA9PT0gLTE6XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0KE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5yZWxhdGl2ZVRpbWVzLm5leHREYXksIHpvbmUpO1xuXHRcdFx0XHRjYXNlIGRhdGVEaWZmIDwgMCAmJiBkYXRlRGlmZiA+IC03OlxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdChNb3JlYml0cy5kYXRlLmxvY2FsZURhdGEucmVsYXRpdmVUaW1lcy50aGlzV2Vlaywgem9uZSk7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0KE1vcmViaXRzLmRhdGUubG9jYWxlRGF0YS5yZWxhdGl2ZVRpbWVzLm90aGVyLCB6b25lKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEdldCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgd2lraXRleHQgc2VjdGlvbiB0aXRsZXMsIHN1Y2hcblx0XHQgKiBhcyBgPT1EZWNlbWJlciAyMDE5PT1gIG9yIGA9PT0gSmFuIDIwMTggPT09YC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdFx0ICovXG5cdFx0bW9udGhIZWFkZXJSZWdleCgpIHtcblx0XHRcdHJldHVybiBuZXcgUmVnRXhwKFxuXHRcdFx0XHRgXig9PSspXFxcXHMqJHt0aGlzLmdldFVUQ0Z1bGxZZWFyKCl95bm0KD86JHt0aGlzLmdldFVUQ01vbnRoTmFtZSgpfXwke3RoaXMuZ2V0VVRDTW9udGhOYW1lQWJicmV2KCl9KVxcXFxzKlxcXFwxYCxcblx0XHRcdFx0J21nJ1xuXHRcdFx0KTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgYSB3aWtpdGV4dCBzZWN0aW9uIGhlYWRlciB3aXRoIHRoZSBtb250aCBhbmQgeWVhci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbbGV2ZWw9Ml0gLSBIZWFkZXIgbGV2ZWwuICBQYXNzIDAgZm9yIGp1c3QgdGhlIHRleHRcblx0XHQgKiB3aXRoIG5vIHdpa2l0ZXh0IG1hcmtlcnMgKD09KS5cblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdG1vbnRoSGVhZGVyKGxldmVsKSB7XG5cdFx0XHQvLyBEZWZhdWx0IHRvIDIsIGJ1dCBhbGxvdyBmb3IgMCBvciBzdHJpbmd5IG51bWJlcnNcblx0XHRcdGxldmVsID0gTnVtYmVyLnBhcnNlSW50KGxldmVsLCAxMCk7XG5cdFx0XHRsZXZlbCA9IE51bWJlci5pc05hTihsZXZlbCkgPyAyIDogbGV2ZWw7XG5cdFx0XHRjb25zdCBoZWFkZXIgPSAnPScucmVwZWF0KGxldmVsKTtcblx0XHRcdGNvbnN0IHRleHQgPSBgJHt0aGlzLmdldFVUQ0Z1bGxZZWFyKCl95bm0JHt0aGlzLmdldFVUQ01vbnRoTmFtZSgpfWA7XG5cdFx0XHRpZiAoaGVhZGVyLmxlbmd0aCkge1xuXHRcdFx0XHQvLyB3aWtpdGV4dC1mb3JtYXR0ZWQgaGVhZGVyXG5cdFx0XHRcdHJldHVybiBgJHtoZWFkZXJ9ICR7dGV4dH0gJHtoZWFkZXJ9YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0ZXh0OyAvLyBKdXN0IHRoZSBzdHJpbmdcblx0XHR9LFxuXHR9O1xuXHQvLyBBbGxvdyBuYXRpdmUgRGF0ZS5wcm90b3R5cGUgbWV0aG9kcyB0byBiZSB1c2VkIG9uIE1vcmViaXRzLmRhdGUgb2JqZWN0c1xuXHRmb3IgKGNvbnN0IGZ1bmMgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRGF0ZS5wcm90b3R5cGUpKSB7XG5cdFx0Ly8gRXhjbHVkZSBtZXRob2RzIHRoYXQgY29sbGlkZSB3aXRoIFBhZ2VUcmlhZ2UncyBEYXRlLmpzIGV4dGVybmFsLCB3aGljaCBjbG9iYmVycyBuYXRpdmUgRGF0ZVxuXHRcdGlmICghWydhZGQnLCAnZ2V0RGF5TmFtZScsICdnZXRNb250aE5hbWUnXS5pbmNsdWRlcyhmdW5jKSkge1xuXHRcdFx0TW9yZWJpdHMuZGF0ZS5wcm90b3R5cGVbZnVuY10gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZFtmdW5jXSguLi5hcmdzKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8qICoqKioqKioqKioqKioqKiogTW9yZWJpdHMud2lraSAqKioqKioqKioqKioqKioqICovXG5cdC8qKlxuXHQgKiBWYXJpb3VzIG9iamVjdHMgZm9yIHdpa2kgZWRpdGluZyBhbmQgQVBJIGFjY2VzcywgaW5jbHVkaW5nXG5cdCAqIHtAbGluayBNb3JlYml0cy53aWtpLmFwaX0gYW5kIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2V9LlxuXHQgKlxuXHQgKiBAbmFtZXNwYWNlIE1vcmViaXRzLndpa2lcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzXG5cdCAqL1xuXHRNb3JlYml0cy53aWtpID0ge307XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCBhcyBvZiBOb3ZlbWJlciAyMDIwXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0TW9yZWJpdHMud2lraS5pc1BhZ2VSZWRpcmVjdCA9ICgpID0+IHtcblx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHQnW01vcmViaXRzXSBOT1RFOiBNb3JlYml0cy53aWtpLmlzUGFnZVJlZGlyZWN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSBNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCBpbnN0ZWFkLidcblx0XHQpO1xuXHRcdHJldHVybiBNb3JlYml0cy5pc1BhZ2VSZWRpcmVjdCgpO1xuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkICoqKioqKioqKioqKioqKiogKi9cblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpXG5cdCAqIEB0eXBlIHtudW1iZXJ9XG5cdCAqL1xuXHRNb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQgPSAwO1xuXHQvKipcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLndpa2lcblx0ICogQHR5cGUge251bWJlcn1cblx0ICovXG5cdE1vcmViaXRzLndpa2kubmJyT2ZDaGVja3BvaW50c0xlZnQgPSAwO1xuXHQvKipcblx0ICogRGlzcGxheSBtZXNzYWdlIGFuZC9vciByZWRpcmVjdCB0byBwYWdlIHVwb24gY29tcGxldGlvbiBvZiB0YXNrcy5cblx0ICpcblx0ICogRXZlcnkgY2FsbCB0byBNb3JlYml0cy53aWtpLmFwaS5wb3N0KCkgcmVzdWx0cyBpbiB0aGUgZGlzcGF0Y2ggb2YgYW5cblx0ICogYXN5bmNocm9ub3VzIGNhbGxiYWNrLiBFYWNoIGNhbGxiYWNrIGNhbiBpbiB0dXJuIG1ha2UgYW4gYWRkaXRpb25hbCBjYWxsIHRvXG5cdCAqIE1vcmViaXRzLndpa2kuYXBpLnBvc3QoKSB0byBjb250aW51ZSBhIHByb2Nlc3Npbmcgc2VxdWVuY2UuIEF0IHRoZVxuXHQgKiBjb25jbHVzaW9uIG9mIHRoZSBmaW5hbCBjYWxsYmFjayBvZiBhIHByb2Nlc3Npbmcgc2VxdWVuY2UsIGl0IGlzIG5vdFxuXHQgKiBwb3NzaWJsZSB0byBzaW1wbHkgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIgYmVjYXVzZSB0aGVyZSBpcyBubyBjYWxsXG5cdCAqIHN0YWNrIGxlYWRpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dC4gSW5zdGVhZCxcblx0ICogTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZXZlbnQoKSBpcyBjYWxsZWQgdG8gZGlzcGxheSB0aGUgcmVzdWx0IHRvXG5cdCAqIHRoZSB1c2VyIGFuZCB0byBwZXJmb3JtIGFuIG9wdGlvbmFsIHBhZ2UgcmVkaXJlY3QuXG5cdCAqXG5cdCAqIFRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZW4gdG8gY2FsbCBNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ldmVudCgpIGlzXG5cdCAqIG1hbmFnZWQgdGhyb3VnaCB0aGUgZ2xvYmFscyBNb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQgYW5kXG5cdCAqIE1vcmViaXRzLndpa2kubmJyT2ZDaGVja3BvaW50c0xlZnQuIE1vcmViaXRzLndpa2kubnVtYmVyT2ZBY3Rpb25zTGVmdCBpc1xuXHQgKiBpbmNyZW1lbnRlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgTW9yZWJpdHMud2lraS5hcGkgY2FsbCBhbmQgZGVjcmVtZW50ZWRcblx0ICogYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgYSBjYWxsYmFjayBmdW5jdGlvbi4gSWYgYSBjYWxsYmFjayBmdW5jdGlvbiBkb2VzXG5cdCAqIG5vdCBjcmVhdGUgYSBuZXcgTW9yZWJpdHMud2lraS5hcGkgb2JqZWN0IGJlZm9yZSBleGl0aW5nLCBpdCBpcyB0aGUgZmluYWxcblx0ICogc3RlcCBpbiB0aGUgcHJvY2Vzc2luZyBjaGFpbiBhbmQgTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZXZlbnQoKSB3aWxsXG5cdCAqIHRoZW4gYmUgY2FsbGVkLlxuXHQgKlxuXHQgKiBPcHRpb25hbGx5LCBjYWxsZXJzIG1heSB1c2UgTW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50KCkgdG8gaW5kaWNhdGUgdGhhdFxuXHQgKiBwcm9jZXNzaW5nIGlzIG5vdCBjb21wbGV0ZSB1cG9uIHRoZSBjb25jbHVzaW9uIG9mIHRoZSBmaW5hbCBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi4gIFRoaXMgaXMgdXNlZCBmb3IgYmF0Y2ggb3BlcmF0aW9ucy4gVGhlIGVuZCBvZiBhIGJhdGNoIGlzXG5cdCAqIHNpZ25hbGVkIGJ5IGNhbGxpbmcgTW9yZWJpdHMud2lraS5yZW1vdmVDaGVja3BvaW50KCkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7dHlwZW9mIE1vcmViaXRzfSBzZWxmXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpXG5cdCAqL1xuXHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZCA9IChzZWxmKSA9PiB7XG5cdFx0aWYgKC0tTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0IDw9IDAgJiYgTW9yZWJpdHMud2lraS5uYnJPZkNoZWNrcG9pbnRzTGVmdCA8PSAwKSB7XG5cdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ldmVudChzZWxmKTtcblx0XHR9XG5cdH07XG5cdC8vIENoYW5nZSBwZXIgYWN0aW9uIHdhbnRlZFxuXHQvKiogQG1lbWJlcm9mIE1vcmViaXRzLndpa2kgKi9cblx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZXZlbnQgPSAoKSA9PiB7XG5cdFx0aWYgKE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZSkge1xuXHRcdFx0TW9yZWJpdHMuc3RhdHVzLmFjdGlvbkNvbXBsZXRlZChNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UpO1xuXHRcdH1cblx0XHRpZiAoTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QpIHtcblx0XHRcdC8vIGlmIGl0IGlzbid0IGEgVVJMLCBtYWtlIGl0IG9uZS4gVE9ETzogVGhpcyBicmVha3Mgb24gdGhlIGFydGljbGVzICdodHRwOi8vJywgJ2Z0cDovLycsIGFuZCBzaW1pbGFyIG9uZXMuXG5cdFx0XHRpZiAoIS9eXFx3KzpcXC9cXC8vLnRlc3QoTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QpKSB7XG5cdFx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0ID0gbXcudXRpbC5nZXRVcmwoTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QpO1xuXHRcdFx0XHRpZiAoTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQuZm9sbG93UmVkaXJlY3QgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQucmVkaXJlY3QgKz0gJz9yZWRpcmVjdD1ubyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRsb2NhdGlvbiA9IE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLnJlZGlyZWN0O1xuXHRcdFx0fSwgTW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQudGltZU91dCk7XG5cdFx0fVxuXHR9O1xuXHQvKiogQG1lbWJlcm9mIE1vcmViaXRzLndpa2kgKi9cblx0TW9yZWJpdHMud2lraS5hY3Rpb25Db21wbGV0ZWQudGltZU91dCA9XG5cdFx0d2luZG93LndwQWN0aW9uQ29tcGxldGVkVGltZU91dCA9PT0gdW5kZWZpbmVkID8gNTAwMCA6IHdpbmRvdy53cEFjdGlvbkNvbXBsZXRlZFRpbWVPdXQ7XG5cdC8qKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraSAqL1xuXHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdCA9IG51bGw7XG5cdC8qKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraSAqL1xuXHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5ub3RpY2UgPSBudWxsO1xuXHQvKiogQG1lbWJlcm9mIE1vcmViaXRzLndpa2kgKi9cblx0TW9yZWJpdHMud2lraS5hZGRDaGVja3BvaW50ID0gKCkgPT4ge1xuXHRcdCsrTW9yZWJpdHMud2lraS5uYnJPZkNoZWNrcG9pbnRzTGVmdDtcblx0fTtcblx0LyoqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpICovXG5cdE1vcmViaXRzLndpa2kucmVtb3ZlQ2hlY2twb2ludCA9ICgpID0+IHtcblx0XHRpZiAoLS1Nb3JlYml0cy53aWtpLm5ick9mQ2hlY2twb2ludHNMZWZ0IDw9IDAgJiYgTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0IDw9IDApIHtcblx0XHRcdE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLmV2ZW50KCk7XG5cdFx0fVxuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLndpa2kuYXBpICoqKioqKioqKioqKioqKiogKi9cblx0LyoqXG5cdCAqIEFuIGVhc3kgd2F5IHRvIHRhbGsgdG8gdGhlIE1lZGlhV2lraSBBUEkuICBBY2NlcHRzIGVpdGhlciBqc29uIG9yIHhtbFxuXHQgKiAoZGVmYXVsdCkgZm9ybWF0czsgaWYganNvbiBpcyBzZWxlY3RlZCwgd2lsbCBkZWZhdWx0IHRvIGBmb3JtYXR2ZXJzaW9uPTJgXG5cdCAqIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLiAgU2ltaWxhcmx5LCBlbmZvcmNlcyBuZXdlciBgZXJyb3Jmb3JtYXRgcyxcblx0ICogZGVmYXVsdGluZyB0byBgaHRtbGAgaWYgdW5zcGVjaWZpZWQuICBgdXNlbGFuZ2AgZW5mb3JjZWQgdG8gdGhlIHdpa2knc1xuXHQgKiBjb250ZW50IGxhbmd1YWdlLlxuXHQgKlxuXHQgKiBJbiBuZXcgY29kZSwgdGhlIHVzZSBvZiB0aGUgbGFzdCAzIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGF2b2lkZWQsIGluc3RlYWRcblx0ICogdXNlIHtAbGluayBNb3JlYml0cy53aWtpLmFwaSNzZXRTdGF0dXNFbGVtZW50fHNldFN0YXR1c0VsZW1lbnQoKX0gdG8gYmluZFxuXHQgKiB0aGUgc3RhdHVzIGVsZW1lbnQgKGlmIG5lZWRlZCkgYW5kIHVzZSBgLnRoZW4oKWAgb3IgYC5jYXRjaCgpYCBvbiB0aGVcblx0ICogcHJvbWlzZSByZXR1cm5lZCBieSBgcG9zdCgpYCwgcmF0aGVyIHRoYW4gc3BlY2lmeSB0aGUgYG9uU3VjY2Vzc2Agb3Jcblx0ICogYG9uRmFpbHVyZWAgY2FsbGJhY2tzLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraVxuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRBY3Rpb24gLSBUaGUgY3VycmVudCBhY3Rpb24gKHJlcXVpcmVkKS5cblx0ICogQHBhcmFtIHtPYmplY3R9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IChyZXF1aXJlZCkuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Y2Nlc3NdIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwuXG5cdCAqIEBwYXJhbSB7TW9yZWJpdHMuc3RhdHVzfSBbc3RhdHVzRWxlbWVudF0gLSBBIE1vcmViaXRzLnN0YXR1cyBvYmplY3QgdG8gdXNlIGZvciBzdGF0dXMgbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkVycm9yXSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGlmIGFuIGVycm9yIG9jY3Vycy5cblx0ICovXG5cdE1vcmViaXRzLndpa2kuYXBpID0gZnVuY3Rpb24gKGN1cnJlbnRBY3Rpb24sIHF1ZXJ5LCBvblN1Y2Nlc3MsIHN0YXR1c0VsZW1lbnQsIG9uRXJyb3IpIHtcblx0XHR0aGlzLmN1cnJlbnRBY3Rpb24gPSBjdXJyZW50QWN0aW9uO1xuXHRcdHRoaXMucXVlcnkgPSBxdWVyeTtcblx0XHR0aGlzLnF1ZXJ5LmFzc2VydCA9ICd1c2VyJztcblx0XHQvLyBFbmZvcmNlIG5ld2VyIGVycm9yIGZvcm1hdHMsIHByZWZlcnJpbmcgaHRtbFxuXHRcdGlmICghcXVlcnkuZXJyb3Jmb3JtYXQgfHwgIVsnd2lraXRleHQnLCAncGxhaW50ZXh0J10uaW5jbHVkZXMocXVlcnkuZXJyb3Jmb3JtYXQpKSB7XG5cdFx0XHR0aGlzLnF1ZXJ5LmVycm9yZm9ybWF0ID0gJ2h0bWwnO1xuXHRcdH1cblx0XHQvLyBFeHBsaWNpdGx5IHVzZSB0aGUgd2lraSdzIGNvbnRlbnQgbGFuZ3VhZ2UgdG8gbWluaW1pemUgY29uZnVzaW9uLFxuXHRcdC8vIHNlZSAjMTE3OSBmb3IgZGlzY3Vzc2lvblxuXHRcdHRoaXMucXVlcnkudXNlbGFuZyB8fD0gJ2NvbnRlbnQnOyAvLyBVc2Ugd2dVc2VyTGFuZ3VhZ2UgZm9yIHByZXZpZXdcblx0XHR0aGlzLnF1ZXJ5LmVycm9ybGFuZyA9ICd1c2VsYW5nJztcblx0XHR0aGlzLnF1ZXJ5LmVycm9yc3VzZWxvY2FsID0gMTtcblx0XHR0aGlzLm9uU3VjY2VzcyA9IG9uU3VjY2Vzcztcblx0XHR0aGlzLm9uRXJyb3IgPSBvbkVycm9yO1xuXHRcdGlmIChzdGF0dXNFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNldFN0YXR1c0VsZW1lbnQoc3RhdHVzRWxlbWVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc3RhdGVsZW0gPSBuZXcgTW9yZWJpdHMuc3RhdHVzKGN1cnJlbnRBY3Rpb24pO1xuXHRcdH1cblx0XHQvLyBKU09OIGlzIHVzZWQgdGhyb3VnaG91dCBNb3JlYml0cy9Ud2lua2xlLCBidXQgeG1sIHJlbWFpbnMgdGhlIGRlZmF1bHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cdFx0aWYgKCFxdWVyeS5mb3JtYXQpIHtcblx0XHRcdHRoaXMucXVlcnkuZm9ybWF0ID0gJ3htbCc7XG5cdFx0fSBlbHNlIGlmIChxdWVyeS5mb3JtYXQgPT09ICdqc29uJyAmJiAhcXVlcnkuZm9ybWF0dmVyc2lvbikge1xuXHRcdFx0dGhpcy5xdWVyeS5mb3JtYXR2ZXJzaW9uID0gJzInO1xuXHRcdH0gZWxzZSBpZiAoIVsneG1sJywgJ2pzb24nXS5pbmNsdWRlcyhxdWVyeS5mb3JtYXQpKSB7XG5cdFx0XHR0aGlzLnN0YXRlbGVtLmVycm9yKCdJbnZhbGlkIEFQSSBmb3JtYXQ6IG9ubHkgeG1sIGFuZCBqc29uIGFyZSBzdXBwb3J0ZWQuJyk7XG5cdFx0fVxuXHRcdC8vIElnbm9yZSB0YWdzIGZvciBxdWVyaWVzIGFuZCBtb3N0IGNvbW1vbiB1bnN1cHBvcnRlZCBhY3Rpb25zLCBwcm9kdWNlcyB3YXJuaW5nc1xuXHRcdGlmIChxdWVyeS5hY3Rpb24gJiYgWydxdWVyeScsICd3YXRjaCddLmluY2x1ZGVzKHF1ZXJ5LmFjdGlvbikpIHtcblx0XHRcdGRlbGV0ZSBxdWVyeS50YWdzO1xuXHRcdH0gZWxzZSBpZiAoIXF1ZXJ5LnRhZ3MgJiYgbW9yZWJpdHNXaWtpQ2hhbmdlVGFnKSB7XG5cdFx0XHRxdWVyeS50YWdzID0gbW9yZWJpdHNXaWtpQ2hhbmdlVGFnO1xuXHRcdH1cblx0fTtcblx0TW9yZWJpdHMud2lraS5hcGkucHJvdG90eXBlID0ge1xuXHRcdGN1cnJlbnRBY3Rpb246ICcnLFxuXHRcdG9uU3VjY2VzczogbnVsbCxcblx0XHRvbkVycm9yOiBudWxsLFxuXHRcdHBhcmVudDogd2luZG93LFxuXHRcdC8vIHVzZSBnbG9iYWwgY29udGV4dCBpZiB0aGVyZSBpcyBubyBwYXJlbnQgb2JqZWN0XG5cdFx0cXVlcnk6IG51bGwsXG5cdFx0cmVzcG9uc2U6IG51bGwsXG5cdFx0cmVzcG9uc2VYTUw6IG51bGwsXG5cdFx0Ly8gdXNlIGByZXNwb25zZWAgaW5zdGVhZDsgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cdFx0c3RhdGVsZW06IG51bGwsXG5cdFx0Ly8gdGhpcyBub24tc3RhbmRhcmQgbmFtZSBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHRcdHN0YXR1c1RleHQ6IG51bGwsXG5cdFx0Ly8gcmVzdWx0IHJlY2VpdmVkIGZyb20gdGhlIEFQSSwgbm9ybWFsbHkgXCJzdWNjZXNzXCIgb3IgXCJlcnJvclwiXG5cdFx0ZXJyb3JDb2RlOiBudWxsLFxuXHRcdC8vIHNob3J0IHRleHQgZXJyb3IgY29kZSwgaWYgYW55LCBhcyBkb2N1bWVudGVkIGluIHRoZSBNZWRpYVdpa2kgQVBJXG5cdFx0ZXJyb3JUZXh0OiBudWxsLFxuXHRcdC8vIGZ1bGwgZXJyb3IgZGVzY3JpcHRpb24sIGlmIGFueVxuXHRcdGJhZHRva2VuUmV0cnk6IGZhbHNlLFxuXHRcdC8vIHNldCB0byB0cnVlIGlmIHRoaXMgb24gYSByZXRyeSBhdHRlbXB0ZWQgYWZ0ZXIgYSBiYWR0b2tlbiBlcnJvclxuXHRcdC8qKlxuXHRcdCAqIEtlZXAgdHJhY2sgb2YgcGFyZW50IG9iamVjdCBmb3IgY2FsbGJhY2tzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHsqfSBwYXJlbnRcblx0XHQgKi9cblx0XHRzZXRQYXJlbnQocGFyZW50KSB7XG5cdFx0XHR0aGlzLnBhcmVudCA9IHBhcmVudDtcblx0XHR9LFxuXHRcdC8qKiBAcGFyYW0ge01vcmViaXRzLnN0YXR1c30gc3RhdHVzRWxlbWVudCAqL1xuXHRcdHNldFN0YXR1c0VsZW1lbnQoc3RhdHVzRWxlbWVudCkge1xuXHRcdFx0dGhpcy5zdGF0ZWxlbSA9IHN0YXR1c0VsZW1lbnQ7XG5cdFx0XHR0aGlzLnN0YXRlbGVtLnN0YXR1cyh0aGlzLmN1cnJlbnRBY3Rpb24pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogQ2Fycnkgb3V0IHRoZSByZXF1ZXN0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGNhbGxlckFqYXhQYXJhbWV0ZXJzIC0gRG8gbm90IHNwZWNpZnkgYSBwYXJhbWV0ZXIgdW5sZXNzIHlvdSByZWFsbHlcblx0XHQgKiByZWFsbHkgd2FudCB0byBnaXZlIGpRdWVyeSBzb21lIGV4dHJhIHBhcmFtZXRlcnMuXG5cdFx0ICogQHJldHVybnMge3Byb21pc2V9IC0gQSBqUXVlcnkgcHJvbWlzZSBvYmplY3QgdGhhdCBpcyByZXNvbHZlZCBvciByZWplY3RlZCB3aXRoIHRoZSBhcGkgb2JqZWN0LlxuXHRcdCAqL1xuXHRcdHBvc3QoY2FsbGVyQWpheFBhcmFtZXRlcnMpIHtcblx0XHRcdCsrTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0O1xuXHRcdFx0Y29uc3QgcXVlcnlTdHJpbmdBcnIgPSBbXTtcblx0XHRcdGZvciAoY29uc3QgW2ksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5xdWVyeSkpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdFx0XHRcdHF1ZXJ5U3RyaW5nQXJyW3F1ZXJ5U3RyaW5nQXJyLmxlbmd0aF0gPVxuXHRcdFx0XHRcdFx0YCR7ZW5jb2RlVVJJQ29tcG9uZW50KGkpfT0ke3ZhbC5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCd8Jyl9YDtcblx0XHRcdFx0fSBlbHNlIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHF1ZXJ5U3RyaW5nQXJyW3F1ZXJ5U3RyaW5nQXJyLmxlbmd0aF0gPSBgJHtlbmNvZGVVUklDb21wb25lbnQoaSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Fyci5qb2luKCcmJykucmVwbGFjZSgvXiguKj8pKFxcYnRva2VuPVteJl0qKSYoLiopLywgJyQxJDMmJDInKTtcblx0XHRcdC8vIHRva2VuIHNob3VsZCBhbHdheXMgYmUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgcXVlcnkgc3RyaW5nIChidWcgVFctQi0wMDEzKVxuXHRcdFx0Y29uc3QgYWpheHBhcmFtcyA9IHtcblx0XHRcdFx0Y29udGV4dDogdGhpcyxcblx0XHRcdFx0dHlwZTogdGhpcy5xdWVyeS5hY3Rpb24gPT09ICdxdWVyeScgPyAnR0VUJyA6ICdQT1NUJyxcblx0XHRcdFx0dXJsOiBtdy51dGlsLndpa2lTY3JpcHQoJ2FwaScpLFxuXHRcdFx0XHRkYXRhOiBxdWVyeVN0cmluZyxcblx0XHRcdFx0ZGF0YVR5cGU6IHRoaXMucXVlcnkuZm9ybWF0LFxuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0J0FwaS1Vc2VyLUFnZW50JzogbW9yZWJpdHNXaWtpQXBpVXNlckFnZW50LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi5jYWxsZXJBamF4UGFyYW1ldGVycyxcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gJC5hamF4KGFqYXhwYXJhbXMpLnRoZW4oXG5cdFx0XHRcdGZ1bmN0aW9uIG9uQVBJc3VjY2VzcyhyZXNwb25zZSwgc3RhdHVzVGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdFx0dGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuXHRcdFx0XHRcdHRoaXMucmVzcG9uc2VYTUwgPSByZXNwb25zZTtcblx0XHRcdFx0XHQvLyBMaW1pdCB0byBmaXJzdCBlcnJvclxuXHRcdFx0XHRcdGlmICh0aGlzLnF1ZXJ5LmZvcm1hdCA9PT0gJ2pzb24nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVycm9yQ29kZSA9IHJlc3BvbnNlLmVycm9ycyAmJiByZXNwb25zZS5lcnJvcnNbMF0uY29kZTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnF1ZXJ5LmVycm9yZm9ybWF0ID09PSAnaHRtbCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5lcnJvclRleHQgPSByZXNwb25zZS5lcnJvcnMgJiYgcmVzcG9uc2UuZXJyb3JzWzBdLmh0bWw7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMucXVlcnkuZXJyb3Jmb3JtYXQgPT09ICd3aWtpdGV4dCcgfHwgdGhpcy5xdWVyeS5lcnJvcmZvcm1hdCA9PT0gJ3BsYWludGV4dCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5lcnJvclRleHQgPSByZXNwb25zZS5lcnJvcnMgJiYgcmVzcG9uc2UuZXJyb3JzWzBdLnRleHQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JDb2RlID0gJChyZXNwb25zZSkuZmluZCgnZXJyb3JzIGVycm9yJykuZXEoMCkuYXR0cignY29kZScpO1xuXHRcdFx0XHRcdFx0Ly8gU3VmZmljaWVudCBmb3IgaHRtbCwgd2lraXRleHQsIG9yIHBsYWludGV4dCBlcnJvcmZvcm1hdHNcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JUZXh0ID0gJChyZXNwb25zZSkuZmluZCgnZXJyb3JzIGVycm9yJykuZXEoMCkudGV4dCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodHlwZW9mIHRoaXMuZXJyb3JDb2RlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIEFQSSBkaWRuJ3QgbGlrZSB3aGF0IHdlIHRvbGQgaXQsIGUuZy4sIGJhZCBlZGl0IHRva2VuIG9yIGFuIGVycm9yIGNyZWF0aW5nIGEgcGFnZVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmV0dXJuRXJyb3IoY2FsbGVyQWpheFBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBpbnZva2Ugc3VjY2VzcyBjYWxsYmFjayBpZiBvbmUgd2FzIHN1cHBsaWVkXG5cdFx0XHRcdFx0aWYgKHRoaXMub25TdWNjZXNzKSB7XG5cdFx0XHRcdFx0XHQvLyBzZXQgdGhlIGNhbGxiYWNrIGNvbnRleHQgdG8gdGhpcy5wYXJlbnQgZm9yIG5ldyBjb2RlIGFuZCBzdXBwbHkgdGhlIEFQSSBvYmplY3Rcblx0XHRcdFx0XHRcdC8vIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgKGZvciBsZWdhY3kgY29kZSlcblx0XHRcdFx0XHRcdHRoaXMub25TdWNjZXNzLmNhbGwodGhpcy5wYXJlbnQsIHRoaXMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlbGVtLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZCgpO1xuXHRcdFx0XHRcdHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZVdpdGgodGhpcy5wYXJlbnQsIFt0aGlzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIG9ubHkgbmV0d29yayBhbmQgc2VydmVyIGVycm9ycyByZWFjaCBoZXJlIC0gY29tcGxhaW50cyBmcm9tIHRoZSBBUEkgaXRzZWxmIGFyZSBjYXVnaHQgaW4gc3VjY2VzcygpXG5cdFx0XHRcdGZ1bmN0aW9uIG9uQVBJZmFpbHVyZShlcnJvciwgc3RhdHVzVGV4dCwgZXJyb3JUaHJvd24pIHtcblx0XHRcdFx0XHR0aGlzLnN0YXR1c1RleHQgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRcdHRoaXMuZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjsgLy8gZnJlcXVlbnRseSB1bmRlZmluZWRcblx0XHRcdFx0XHR0aGlzLmVycm9yVGV4dCA9XG5cdFx0XHRcdFx0XHRzdGF0dXNUZXh0ICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5Zyo6LCD55SoQVBJ5pe25Y+R55Sf5LqG6ZSZ6K+v4oCcJywgJ+WcqOWRvOWPq0FQSeaZgueZvOeUn+S6humMr+iqpOOAjCcpICtcblx0XHRcdFx0XHRcdGVycm9yLnN0YXR1c1RleHQgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfigJ3jgIInLCAn44CN44CCJyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmV0dXJuRXJyb3IoKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9LFxuXHRcdHJldHVybkVycm9yKGNhbGxlckFqYXhQYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAodGhpcy5lcnJvckNvZGUgPT09ICdiYWR0b2tlbicgJiYgIXRoaXMuYmFkdG9rZW5SZXRyeSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlbGVtLndhcm4od2luZG93LndnVUxTKCfml6DmlYjku6TniYzvvIzojrflj5bmlrDnmoTku6TniYzlubbph43or5XigKbigKYnLCAn54Sh5pWI5qyK5p2W77yM5Y+W5b6X5paw55qE5qyK5p2W5Lim6YeN6Kmm4oCm4oCmJykpO1xuXHRcdFx0XHR0aGlzLmJhZHRva2VuUmV0cnkgPSB0cnVlO1xuXHRcdFx0XHQvLyBHZXQgYSBuZXcgQ1NSRiB0b2tlbiBhbmQgcmV0cnkuIElmIHRoZSBvcmlnaW5hbCBhY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnRcblx0XHRcdFx0Ly8gdHlwZSBvZiBhY3Rpb24gdGhhbiBDU1JGLCB3ZSBkbyBvbmUgcG9pbnRsZXNzIHJldHJ5IGJlZm9yZSBiYWlsaW5nIG91dFxuXHRcdFx0XHRyZXR1cm4gTW9yZWJpdHMud2lraS5hcGkuZ2V0VG9rZW4oKS50aGVuKCh0b2tlbikgPT4ge1xuXHRcdFx0XHRcdHRoaXMucXVlcnkudG9rZW4gPSB0b2tlbjtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5wb3N0KGNhbGxlckFqYXhQYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlbGVtLmVycm9yKGAke3RoaXMuZXJyb3JUZXh0fe+8iCR7dGhpcy5lcnJvckNvZGV977yJYCk7XG5cdFx0XHQvLyBpbnZva2UgZmFpbHVyZSBjYWxsYmFjayBpZiBvbmUgd2FzIHN1cHBsaWVkXG5cdFx0XHRpZiAodGhpcy5vbkVycm9yKSB7XG5cdFx0XHRcdC8vIHNldCB0aGUgY2FsbGJhY2sgY29udGV4dCB0byB0aGlzLnBhcmVudCBmb3IgbmV3IGNvZGUgYW5kIHN1cHBseSB0aGUgQVBJIG9iamVjdFxuXHRcdFx0XHQvLyBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIGZvciBsZWdhY3kgY29kZVxuXHRcdFx0XHR0aGlzLm9uRXJyb3IuY2FsbCh0aGlzLnBhcmVudCwgdGhpcyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBkb24ndCBjb21wbGV0ZSB0aGUgYWN0aW9uIHNvIHRoYXQgdGhlIGVycm9yIHJlbWFpbnMgZGlzcGxheWVkXG5cdFx0XHRyZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhpcy5wYXJlbnQsIFt0aGlzXSk7XG5cdFx0fSxcblx0XHRnZXRTdGF0dXNFbGVtZW50KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RhdGVsZW07XG5cdFx0fSxcblx0XHRnZXRFcnJvckNvZGUoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckNvZGU7XG5cdFx0fSxcblx0XHRnZXRFcnJvclRleHQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvclRleHQ7XG5cdFx0fSxcblx0XHRnZXRYTUwoKSB7XG5cdFx0XHQvLyByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHVzZSBnZXRSZXNwb25zZSgpIGluc3RlYWRcblx0XHRcdHJldHVybiB0aGlzLnJlc3BvbnNlWE1MO1xuXHRcdH0sXG5cdFx0Z2V0UmVzcG9uc2UoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNwb25zZTtcblx0XHR9LFxuXHR9O1xuXHQvKipcblx0ICogUmV0cmlldmVzIHdpa2l0ZXh0IGZyb20gYSBwYWdlLiBDYWNoaW5nIGVuYWJsZWQsIGR1cmF0aW9uIDEgZGF5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICovXG5cdE1vcmViaXRzLndpa2kuZ2V0Q2FjaGVkSnNvbiA9ICh0aXRsZSkgPT4ge1xuXHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0XHR0aXRsZXM6IHRpdGxlLFxuXHRcdFx0cnZzbG90czogJ21haW4nLFxuXHRcdFx0cnZwcm9wOiAnY29udGVudCcsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdHNtYXhhZ2U6ICczNjAwJyxcblx0XHRcdG1heGFnZTogJzM2MDAnLFxuXHRcdH07XG5cblx0XHRyZXR1cm4gbmV3IE1vcmViaXRzLndpa2kuYXBpKCcnLCBxdWVyeSkucG9zdCgpLnRoZW4oKGFwaW9iaikgPT4ge1xuXHRcdFx0YXBpb2JqLmdldFN0YXR1c0VsZW1lbnQoKS51bmxpbmsoKTtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXBpb2JqLmdldFJlc3BvbnNlKCk7XG5cdFx0XHRjb25zdCB3aWtpdGV4dCA9IHJlc3BvbnNlLnF1ZXJ5LnBhZ2VzWzBdLnJldmlzaW9uc1swXS5zbG90cy5tYWluLmNvbnRlbnQ7XG5cdFx0XHRyZXR1cm4gSlNPTi5wYXJzZSh3aWtpdGV4dCk7XG5cdFx0fSk7XG5cdH07XG5cdGxldCBtb3JlYml0c1dpa2lBcGlVc2VyQWdlbnQgPSAnWXNBcmNoaXZlcy8xLjEgKG1vcmViaXRzLmpzKSc7XG5cdC8qKlxuXHQgKiBTZXQgdGhlIGN1c3RvbSB1c2VyIGFnZW50IGhlYWRlciwgd2hpY2ggaXMgdXNlZCBmb3Igc2VydmVyLXNpZGUgbG9nZ2luZy5cblx0ICogTm90ZSB0aGF0IGRvaW5nIHNvIHdpbGwgc2V0IHRoZSB1c2VyYWdlbnQgZm9yIGV2ZXJ5IGBNb3JlYml0cy53aWtpLmFwaWBcblx0ICogcHJvY2VzcyBwZXJmb3JtZWQgdGhlcmVhZnRlci5cblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9saXN0cy53aWtpbWVkaWEub3JnL3BpcGVybWFpbC9tZWRpYXdpa2ktYXBpLWFubm91bmNlLzIwMTQtTm92ZW1iZXIvMDAwMDc1Lmh0bWx9XG5cdCAqIGZvciBvcmlnaW5hbCBhbm5vdW5jZW1lbnQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpLmFwaVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3VhPVlzQXJjaGl2ZXMvMS4xIChtb3JlYml0cy5qcyldIC0gVXNlciBhZ2VudC4gIFRoZSBkZWZhdWx0XG5cdCAqIHZhbHVlIG9mIGBtb3JlYml0cy5qc2Agd2lsbCBiZSBhcHBlbmRlZCB0byBhbnkgcHJvdmlkZWRcblx0ICogdmFsdWUuXG5cdCAqL1xuXHRNb3JlYml0cy53aWtpLmFwaS5zZXRBcGlVc2VyQWdlbnQgPSAodWEpID0+IHtcblx0XHRtb3JlYml0c1dpa2lBcGlVc2VyQWdlbnQgPSBgWXNBcmNoaXZlcy8xLjEgKG1vcmViaXRzLmpzJHt1YSA/IGA7ICR7dWF9YCA6ICcnfSlgO1xuXHR9O1xuXHQvKipcblx0ICogQ2hhbmdlL3JldmlzaW9uIHRhZyBhcHBsaWVkIHRvIE1vcmViaXRzIGFjdGlvbnMgd2hlbiBubyBvdGhlciB0YWdzIGFyZSBzcGVjaWZpZWQuXG5cdCAqIFVudXNlZCBieSBkZWZhdWx0LlxuXHQgKlxuXHQgKiBAY29uc3RhbnRcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLndpa2kuYXBpXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRjb25zdCBtb3JlYml0c1dpa2lDaGFuZ2VUYWcgPSAnJztcblx0LyoqXG5cdCAqIEdldCBhIG5ldyBDU1JGIHRva2VuIG9uIGVuY291bnRlcmluZyB0b2tlbiBlcnJvcnMuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy53aWtpLmFwaVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBNZWRpYVdpa2kgQ1NSRiB0b2tlbi5cblx0ICovXG5cdE1vcmViaXRzLndpa2kuYXBpLmdldFRva2VuID0gKCkgPT4ge1xuXHRcdGNvbnN0IHRva2VuQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKHdpbmRvdy53Z1VMUygn6I635Y+W5Luk54mMJywgJ+WPluW+l+asiuadlicpLCB7XG5cdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRtZXRhOiAndG9rZW5zJyxcblx0XHRcdHR5cGU6ICdjc3JmJyxcblx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdH0pO1xuXHRcdHJldHVybiB0b2tlbkFwaS5wb3N0KCkudGhlbigoYXBpb2JqKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXBpb2JqLnJlc3BvbnNlLnF1ZXJ5LnRva2Vucy5jc3JmdG9rZW47XG5cdFx0fSk7XG5cdH07XG5cdC8qICoqKioqKioqKioqKioqKiogTW9yZWJpdHMud2lraS5wYWdlICoqKioqKioqKioqKioqKiogKi9cblx0LyoqXG5cdCAqIFVzZSB0aGUgTWVkaWFXaWtpIEFQSSB0byBsb2FkIGEgcGFnZSBhbmQgb3B0aW9uYWxseSBlZGl0IGl0LCBtb3ZlIGl0LCBldGMuXG5cdCAqXG5cdCAqIENhbGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gZGlyZWN0bHkgYWNjZXNzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgY2xhc3MhXG5cdCAqIEFsbCBwcm9wZXJ0eSBhY2Nlc3MgaXMgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgZ2V0X19fKCkgb3Igc2V0X19fKCkgbWV0aG9kLlxuXHQgKlxuXHQgKiBDYWxsZXJzIHNob3VsZCBzZXQge0BsaW5rIE1vcmViaXRzLndpa2kuYWN0aW9uQ29tcGxldGVkLm5vdGljZX0gYW5kIHtAbGluayBNb3JlYml0cy53aWtpLmFjdGlvbkNvbXBsZXRlZC5yZWRpcmVjdH1cblx0ICogYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2UubG9hZCgpfS5cblx0ICpcblx0ICogRWFjaCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIHRha2VzIG9uZSBwYXJhbWV0ZXIsIHdoaWNoIGlzIGFcblx0ICogcmVmZXJlbmNlIHRvIHRoZSBNb3JlYml0cy53aWtpLnBhZ2Ugb2JqZWN0IHRoYXQgcmVnaXN0ZXJlZCB0aGUgY2FsbGJhY2suXG5cdCAqIENhbGxiYWNrIGZ1bmN0aW9ucyBtYXkgaW52b2tlIGFueSBNb3JlYml0cy53aWtpLnBhZ2UgcHJvdG90eXBlIG1ldGhvZCB1c2luZyB0aGlzIHJlZmVyZW5jZS5cblx0ICpcblx0ICpcblx0ICogQ2FsbCBzZXF1ZW5jZSBmb3IgY29tbW9uIG9wZXJhdGlvbnMgKG9wdGlvbmFsIGZpbmFsIHVzZXIgY2FsbGJhY2tzIG5vdCBzaG93bik6XG5cdCAqXG5cdCAqIC0gRWRpdCBjdXJyZW50IGNvbnRlbnRzIG9mIGEgcGFnZSAobm8gZWRpdCBjb25mbGljdCk6XG5cdCAqIGAubG9hZCh1c2VyVGV4dEVkaXRDYWxsYmFjaykgLT4gY3R4LmxvYWRBcGkucG9zdCgpIC0+XG5cdCAqIGN0eC5sb2FkQXBpLnBvc3Quc3VjY2VzcygpIC0+IGN0eC5mbkxvYWRTdWNjZXNzKCkgLT4gdXNlclRleHRFZGl0Q2FsbGJhY2soKSAtPlxuXHQgKiAuc2F2ZSgpIC0+IGN0eC5zYXZlQXBpLnBvc3QoKSAtPiBjdHgubG9hZEFwaS5wb3N0LnN1Y2Nlc3MoKSAtPiBjdHguZm5TYXZlU3VjY2VzcygpYFxuXHQgKlxuXHQgKiAtIEVkaXQgY3VycmVudCBjb250ZW50cyBvZiBhIHBhZ2UgKHdpdGggZWRpdCBjb25mbGljdCk6XG5cdCAqIGAubG9hZCh1c2VyVGV4dEVkaXRDYWxsYmFjaykgLT4gY3R4LmxvYWRBcGkucG9zdCgpIC0+XG5cdCAqIGN0eC5sb2FkQXBpLnBvc3Quc3VjY2VzcygpIC0+IGN0eC5mbkxvYWRTdWNjZXNzKCkgLT4gdXNlclRleHRFZGl0Q2FsbGJhY2soKSAtPlxuXHQgKiAuc2F2ZSgpIC0+IGN0eC5zYXZlQXBpLnBvc3QoKSAtPiBjdHgubG9hZEFwaS5wb3N0LnN1Y2Nlc3MoKSAtPlxuXHQgKiBjdHguZm5TYXZlRXJyb3IoKSAtPiBjdHgubG9hZEFwaS5wb3N0KCkgLT4gY3R4LmxvYWRBcGkucG9zdC5zdWNjZXNzKCkgLT5cblx0ICogY3R4LmZuTG9hZFN1Y2Nlc3MoKSAtPiB1c2VyVGV4dEVkaXRDYWxsYmFjaygpIC0+IC5zYXZlKCkgLT5cblx0ICogY3R4LnNhdmVBcGkucG9zdCgpIC0+IGN0eC5sb2FkQXBpLnBvc3Quc3VjY2VzcygpIC0+IGN0eC5mblNhdmVTdWNjZXNzKClgXG5cdCAqXG5cdCAqIC0gQXBwZW5kIHRvIGEgcGFnZSAoc2ltaWxhciBmb3IgcHJlcGVuZCBhbmQgbmV3U2VjdGlvbik6XG5cdCAqIGAuYXBwZW5kKCkgLT4gY3R4LmxvYWRBcGkucG9zdCgpIC0+IGN0eC5sb2FkQXBpLnBvc3Quc3VjY2VzcygpIC0+XG5cdCAqIGN0eC5mbkxvYWRTdWNjZXNzKCkgLT4gY3R4LmZuQXV0b1NhdmUoKSAtPiAuc2F2ZSgpIC0+IGN0eC5zYXZlQXBpLnBvc3QoKSAtPlxuXHQgKiBjdHgubG9hZEFwaS5wb3N0LnN1Y2Nlc3MoKSAtPiBjdHguZm5TYXZlU3VjY2VzcygpYFxuXHQgKlxuXHQgKiBOb3Rlczpcblx0ICogMS4gQWxsIGZ1bmN0aW9ucyBmb2xsb3dpbmcgTW9yZWJpdHMud2lraS5hcGkucG9zdCgpIGFyZSBpbnZva2VkIGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIGpRdWVyeSBBSkFYIGxpYnJhcnkuXG5cdCAqIDIuIFRoZSBzZXF1ZW5jZSBmb3IgYXBwZW5kL3ByZXBlbmQvbmV3U2VjdGlvbiBjb3VsZCBiZSBzbGlnaHRseSBzaG9ydGVuZWQsXG5cdCAqIGJ1dCBpdCB3b3VsZCByZXF1aXJlIHNpZ25pZmljYW50IGR1cGxpY2F0aW9uIG9mIGNvZGUgZm9yIGxpdHRsZSBiZW5lZml0LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraVxuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhZ2VOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBhZ2UsIHByZWZpeGVkIGJ5IHRoZSBuYW1lc3BhY2UgKGlmIGFueSkuXG5cdCAqIEZvciB0aGUgY3VycmVudCBwYWdlLCB1c2UgYG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKWAuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfE1vcmViaXRzLnN0YXR1c30gW3N0YXR1c10gLSBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhY3Rpb24gYWJvdXQgdG8gYmUgdW5kZXJ0YWtlbixcblx0ICogb3IgYSBNb3JlYml0cy5zdGF0dXMgb2JqZWN0XG5cdCAqL1xuXHRNb3JlYml0cy53aWtpLnBhZ2UgPSBmdW5jdGlvbiAocGFnZU5hbWUsIHN0YXR1cykge1xuXHRcdHN0YXR1cyB8fD0gd2luZG93LndnVUxTKCfmiZPlvIDpobXpnaLigJwnLCAn5omT6ZaL6aCB6Z2i44CMJykgKyBwYWdlTmFtZSArIHdpbmRvdy53Z1VMUygn4oCdJywgJ+OAjScpO1xuXHRcdC8qKlxuXHRcdCAqIFByaXZhdGUgY29udGV4dCB2YXJpYWJsZXMuXG5cdFx0ICpcblx0XHQgKiBUaGlzIGNvbnRleHQgaXMgbm90IHZpc2libGUgdG8gdGhlIG91dHNpZGUsIHRodXMgYWxsIHRoZSBkYXRhIGhlcmVcblx0XHQgKiBtdXN0IGJlIGFjY2Vzc2VkIHZpYSBnZXR0ZXIgYW5kIHNldHRlciBmdW5jdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGN0eCA9IHtcblx0XHRcdC8vIGJhY2tpbmcgZmllbGRzIGZvciBwdWJsaWMgcHJvcGVydGllc1xuXHRcdFx0cGFnZU5hbWUsXG5cdFx0XHRwYWdlRXhpc3RzOiBmYWxzZSxcblx0XHRcdGVkaXRTdW1tYXJ5OiBudWxsLFxuXHRcdFx0Y2hhbmdlVGFnczogbnVsbCxcblx0XHRcdHRlc3RBY3Rpb25zOiBudWxsLFxuXHRcdFx0Ly8gYXJyYXkgaWYgYW55IHZhbGlkIGFjdGlvbnNcblx0XHRcdGNhbGxiYWNrUGFyYW1ldGVyczogbnVsbCxcblx0XHRcdHN0YXR1c0VsZW1lbnQ6IHN0YXR1cyBpbnN0YW5jZW9mIE1vcmViaXRzLnN0YXR1cyA/IHN0YXR1cyA6IG5ldyBNb3JlYml0cy5zdGF0dXMoc3RhdHVzKSxcblx0XHRcdC8vIC0gZWRpdFxuXHRcdFx0cGFnZVRleHQ6IG51bGwsXG5cdFx0XHRlZGl0TW9kZTogJ2FsbCcsXG5cdFx0XHQvLyBzYXZlKCkgcmVwbGFjZXMgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBwYWdlIGJ5IGRlZmF1bHRcblx0XHRcdGFwcGVuZFRleHQ6IG51bGwsXG5cdFx0XHQvLyBjYW4ndCByZXVzZSBwYWdlVGV4dCBmb3IgdGhpcyBiZWNhdXNlIHBhZ2VUZXh0IGlzIG5lZWRlZCB0byBmb2xsb3cgYSByZWRpcmVjdFxuXHRcdFx0cHJlcGVuZFRleHQ6IG51bGwsXG5cdFx0XHQvLyBjYW4ndCByZXVzZSBwYWdlVGV4dCBmb3IgdGhpcyBiZWNhdXNlIHBhZ2VUZXh0IGlzIG5lZWRlZCB0byBmb2xsb3cgYSByZWRpcmVjdFxuXHRcdFx0bmV3U2VjdGlvblRleHQ6IG51bGwsXG5cdFx0XHRuZXdTZWN0aW9uVGl0bGU6IG51bGwsXG5cdFx0XHRjcmVhdGVPcHRpb246IG51bGwsXG5cdFx0XHRtaW5vckVkaXQ6IGZhbHNlLFxuXHRcdFx0Ym90RWRpdDogZmFsc2UsXG5cdFx0XHRwYWdlU2VjdGlvbjogbnVsbCxcblx0XHRcdG1heENvbmZsaWN0UmV0cmllczogMixcblx0XHRcdG1heFJldHJpZXM6IDIsXG5cdFx0XHRmb2xsb3dSZWRpcmVjdDogZmFsc2UsXG5cdFx0XHRmb2xsb3dDcm9zc05zUmVkaXJlY3Q6IHRydWUsXG5cdFx0XHR3YXRjaGxpc3RPcHRpb246ICdub2NoYW5nZScsXG5cdFx0XHR3YXRjaGxpc3RFeHBpcnk6IG51bGwsXG5cdFx0XHRjcmVhdG9yOiBudWxsLFxuXHRcdFx0dGltZXN0YW1wOiBudWxsLFxuXHRcdFx0Ly8gLSByZXZlcnRcblx0XHRcdHJldmVydE9sZElEOiBudWxsLFxuXHRcdFx0Ly8gLSBtb3ZlXG5cdFx0XHRtb3ZlRGVzdGluYXRpb246IG51bGwsXG5cdFx0XHRtb3ZlVGFsa1BhZ2U6IGZhbHNlLFxuXHRcdFx0bW92ZVN1YnBhZ2VzOiBmYWxzZSxcblx0XHRcdG1vdmVTdXBwcmVzc1JlZGlyZWN0OiBmYWxzZSxcblx0XHRcdC8vIC0gcHJvdGVjdFxuXHRcdFx0cHJvdGVjdEVkaXQ6IG51bGwsXG5cdFx0XHRwcm90ZWN0TW92ZTogbnVsbCxcblx0XHRcdHByb3RlY3RDcmVhdGU6IG51bGwsXG5cdFx0XHRwcm90ZWN0Q2FzY2FkZTogbnVsbCxcblx0XHRcdC8vIC0gY3JlYXRpb24gbG9va3VwXG5cdFx0XHRsb29rdXBOb25SZWRpcmVjdENyZWF0b3I6IGZhbHNlLFxuXHRcdFx0Ly8gaW50ZXJuYWwgc3RhdHVzXG5cdFx0XHRwYWdlTG9hZGVkOiBmYWxzZSxcblx0XHRcdGNzcmZUb2tlbjogbnVsbCxcblx0XHRcdGxvYWRUaW1lOiBudWxsLFxuXHRcdFx0bGFzdEVkaXRUaW1lOiBudWxsLFxuXHRcdFx0cGFnZUlEOiBudWxsLFxuXHRcdFx0Y29udGVudE1vZGVsOiBudWxsLFxuXHRcdFx0cmV2ZXJ0Q3VySUQ6IG51bGwsXG5cdFx0XHRyZXZlcnRVc2VyOiBudWxsLFxuXHRcdFx0d2F0Y2hlZDogZmFsc2UsXG5cdFx0XHRmdWxseVByb3RlY3RlZDogZmFsc2UsXG5cdFx0XHRzdXBwcmVzc1Byb3RlY3RXYXJuaW5nOiBmYWxzZSxcblx0XHRcdGNvbmZsaWN0UmV0cmllczogMCxcblx0XHRcdHJldHJpZXM6IDAsXG5cdFx0XHQvLyBjYWxsYmFja3Ncblx0XHRcdG9uTG9hZFN1Y2Nlc3M6IG51bGwsXG5cdFx0XHRvbkxvYWRGYWlsdXJlOiBudWxsLFxuXHRcdFx0b25TYXZlU3VjY2VzczogbnVsbCxcblx0XHRcdG9uU2F2ZUZhaWx1cmU6IG51bGwsXG5cdFx0XHRvbkxvb2t1cENyZWF0aW9uU3VjY2VzczogbnVsbCxcblx0XHRcdG9uTG9va3VwQ3JlYXRpb25GYWlsdXJlOiBudWxsLFxuXHRcdFx0b25Nb3ZlU3VjY2VzczogbnVsbCxcblx0XHRcdG9uTW92ZUZhaWx1cmU6IG51bGwsXG5cdFx0XHRvbkRlbGV0ZVN1Y2Nlc3M6IG51bGwsXG5cdFx0XHRvbkRlbGV0ZUZhaWx1cmU6IG51bGwsXG5cdFx0XHRvblVuZGVsZXRlU3VjY2VzczogbnVsbCxcblx0XHRcdG9uVW5kZWxldGVGYWlsdXJlOiBudWxsLFxuXHRcdFx0b25Qcm90ZWN0U3VjY2VzczogbnVsbCxcblx0XHRcdG9uUHJvdGVjdEZhaWx1cmU6IG51bGwsXG5cdFx0XHQvLyBpbnRlcm5hbCBvYmplY3RzXG5cdFx0XHRsb2FkUXVlcnk6IG51bGwsXG5cdFx0XHRsb2FkQXBpOiBudWxsLFxuXHRcdFx0c2F2ZUFwaTogbnVsbCxcblx0XHRcdGxvb2t1cENyZWF0aW9uQXBpOiBudWxsLFxuXHRcdFx0bW92ZUFwaTogbnVsbCxcblx0XHRcdG1vdmVQcm9jZXNzQXBpOiBudWxsLFxuXHRcdFx0cGF0cm9sQXBpOiBudWxsLFxuXHRcdFx0cGF0cm9sUHJvY2Vzc0FwaTogbnVsbCxcblx0XHRcdGRlbGV0ZUFwaTogbnVsbCxcblx0XHRcdGRlbGV0ZVByb2Nlc3NBcGk6IG51bGwsXG5cdFx0XHR1bmRlbGV0ZUFwaTogbnVsbCxcblx0XHRcdHVuZGVsZXRlUHJvY2Vzc0FwaTogbnVsbCxcblx0XHRcdHByb3RlY3RBcGk6IG51bGwsXG5cdFx0XHRwcm90ZWN0UHJvY2Vzc0FwaTogbnVsbCxcblx0XHR9O1xuXHRcdGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcblx0XHQvKipcblx0XHQgKiBMb2FkcyB0aGUgdGV4dCBmb3IgdGhlIHBhZ2UuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3MgLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbG9hZCBoYXMgc3VjY2VlZGVkLlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkZhaWx1cmVdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhlIGxvYWQgZmFpbHMuXG5cdFx0ICovXG5cdFx0dGhpcy5sb2FkID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cdFx0XHRjdHgub25Mb2FkU3VjY2VzcyA9IG9uU3VjY2Vzcztcblx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlID0gb25GYWlsdXJlIHx8IGVtcHR5RnVuY3Rpb247XG5cdFx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gZG8gc29tZXRoaW5nIGFmdGVyIHRoZSBwYWdlIGxvYWRzXG5cdFx0XHRpZiAoIW9uU3VjY2Vzcykge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcignSW50ZXJuYWwgZXJyb3I6IG5vIG9uU3VjY2VzcyBjYWxsYmFjayBwcm92aWRlZCB0byBsb2FkKCkhJyk7XG5cdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjdHgubG9hZFF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdHByb3A6ICdpbmZvfHJldmlzaW9ucycsXG5cdFx0XHRcdGlucHJvcDogJ3dhdGNoZWQnLFxuXHRcdFx0XHRpbnRlc3RhY3Rpb25zOiAnZWRpdCcsXG5cdFx0XHRcdC8vIGNhbiBiZSBleHBhbmRlZFxuXHRcdFx0XHRjdXJ0aW1lc3RhbXA6ICcnLFxuXHRcdFx0XHRtZXRhOiAndG9rZW5zJyxcblx0XHRcdFx0dHlwZTogJ2NzcmYnLFxuXHRcdFx0XHR0aXRsZXM6IGN0eC5wYWdlTmFtZSxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdC8vIGRvbid0IG5lZWQgcnZsaW1pdD0xIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCBydnN0YXJ0aWQgaGVyZSBhbmQgb25seSBvbmUgYWN0dWFsIHJldiBpcyByZXR1cm5lZCBieSBkZWZhdWx0XG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoY3R4LmVkaXRNb2RlID09PSAnYWxsJykge1xuXHRcdFx0XHRjdHgubG9hZFF1ZXJ5LnJ2cHJvcCA9ICdjb250ZW50fHRpbWVzdGFtcCc7IC8vIGdldCB0aGUgcGFnZSBjb250ZW50IGF0IHRoZSBzYW1lIHRpbWUsIGlmIG5lZWRlZFxuXHRcdFx0fSBlbHNlIGlmIChjdHguZWRpdE1vZGUgPT09ICdyZXZlcnQnKSB7XG5cdFx0XHRcdGN0eC5sb2FkUXVlcnkucnZwcm9wID0gJ3RpbWVzdGFtcCc7XG5cdFx0XHRcdGN0eC5sb2FkUXVlcnkucnZsaW1pdCA9IDE7XG5cdFx0XHRcdGN0eC5sb2FkUXVlcnkucnZzdGFydGlkID0gY3R4LnJldmVydE9sZElEO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN0eC5mb2xsb3dSZWRpcmVjdCkge1xuXHRcdFx0XHRjdHgubG9hZFF1ZXJ5LnJlZGlyZWN0cyA9ICcnOyAvLyBmb2xsb3cgYWxsIHJlZGlyZWN0c1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIGN0eC5wYWdlU2VjdGlvbiA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y3R4LmxvYWRRdWVyeS5ydnNlY3Rpb24gPSBjdHgucGFnZVNlY3Rpb247XG5cdFx0XHR9XG5cdFx0XHRpZiAoTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0Y3R4LmxvYWRRdWVyeS5pbnByb3AgKz0gJ3xwcm90ZWN0aW9uJztcblx0XHRcdH1cblx0XHRcdGN0eC5sb2FkQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aKk+WPlumhtemdouKApuKApicsICfmipPlj5bpoIHpnaLigKbigKYnKSxcblx0XHRcdFx0Y3R4LmxvYWRRdWVyeSxcblx0XHRcdFx0Zm5Mb2FkU3VjY2Vzcyxcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlXG5cdFx0XHQpO1xuXHRcdFx0Y3R4LmxvYWRBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4LmxvYWRBcGkucG9zdCgpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogU2F2ZXMgdGhlIHRleHQgZm9yIHRoZSBwYWdlIHRvIFdpa2lwZWRpYS5cblx0XHQgKiBNdXN0IGJlIHByZWNlZGVkIGJ5IHN1Y2Nlc3NmdWxseSBjYWxsaW5nIGBsb2FkKClgLlxuXHRcdCAqXG5cdFx0ICogV2FybmluZzogQ2FsbGluZyBgc2F2ZSgpYCBjYW4gcmVzdWx0IGluIGFkZGl0aW9uYWwgY2FsbHMgdG8gdGhlXG5cdFx0ICogcHJldmlvdXMgYGxvYWQoKWAgY2FsbGJhY2tzIHRvIHJlY292ZXIgZnJvbSBlZGl0IGNvbmZsaWN0cyEgSW4gdGhpc1xuXHRcdCAqIGNhc2UsIGNhbGxlcnMgbXVzdCBtYWtlIHRoZSBzYW1lIGVkaXQgdG8gdGhlIG5ldyBwYWdlVGV4dCBhbmRcblx0XHQgKiByZS1pbnZva2UgYHNhdmUoKWAuICBUaGlzIGJlaGF2aW9yIGNhbiBiZSBkaXNhYmxlZCB3aXRoXG5cdFx0ICogYHNldE1heENvbmZsaWN0UmV0cmllcygwKWAuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25TdWNjZXNzXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzYXZlIGhhcyBzdWNjZWVkZWQuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgc2F2ZSBmYWlscy5cblx0XHQgKi9cblx0XHR0aGlzLnNhdmUgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcblx0XHRcdGN0eC5vblNhdmVTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0Y3R4Lm9uU2F2ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdC8vIGFyZSB3ZSBnZXR0aW5nIG91ciBlZGl0aW5nIHRva2VuIGZyb20gbXcudXNlci50b2tlbnM/XG5cdFx0XHRjb25zdCBjYW5Vc2VNd1VzZXJUb2tlbiA9IGZuQ2FuVXNlTXdVc2VyVG9rZW4oJ2VkaXQnKTtcblx0XHRcdGlmICghY3R4LnBhZ2VMb2FkZWQgJiYgIWNhblVzZU13VXNlclRva2VuKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKCdJbnRlcm5hbCBlcnJvcjogYXR0ZW1wdCB0byBzYXZlIGEgcGFnZSB0aGF0IGhhcyBub3QgYmVlbiBsb2FkZWQhJyk7XG5cdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN0eC5lZGl0U3VtbWFyeSkge1xuXHRcdFx0XHQvLyBuZXcgc2VjdGlvbiBtb2RlIGFsbG93cyAobmF5LCBlbmNvdXJhZ2VzKSB1c2luZyB0aGVcblx0XHRcdFx0Ly8gdGl0bGUgYXMgdGhlIGVkaXQgc3VtbWFyeSwgYnV0IHRoZSBxdWVyeSBuZWVkc1xuXHRcdFx0XHQvLyBlZGl0U3VtbWFyeSB0byBiZSB1bmRlZmluZWQgb3IgJycsIG5vdCBudWxsXG5cdFx0XHRcdGlmIChjdHguZWRpdE1vZGUgPT09ICduZXcnICYmIGN0eC5uZXdTZWN0aW9uVGl0bGUpIHtcblx0XHRcdFx0XHRjdHguZWRpdFN1bW1hcnkgPSAnJztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcignSW50ZXJuYWwgZXJyb3I6IGVkaXQgc3VtbWFyeSBub3Qgc2V0IGJlZm9yZSBzYXZlIScpO1xuXHRcdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gc2hvdWxkbid0IGhhcHBlbiBpZiBjYW5Vc2VNd1VzZXJUb2tlbiA9PT0gdHJ1ZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjdHguZnVsbHlQcm90ZWN0ZWQgJiZcblx0XHRcdFx0IWN0eC5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nICYmXG5cdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdGN0eC5mdWxseVByb3RlY3RlZCA9PT0gJ2luZmluaXR5J1xuXHRcdFx0XHRcdFx0PyB3aW5kb3cud2dVTFMoJ+aCqOWNs+Wwhue8lui+keWFqOS/neaKpOmhtemdouKAnCcsICfmgqjljbPlsIfnt6jovK/lhajkv53orbfpoIHpnaLjgIwnKSArXG5cdFx0XHRcdFx0XHRcdFx0Y3R4LnBhZ2VOYW1lICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0XHQn4oCd77yI5peg6ZmQ5pyf77yJ44CCXFxuXFxu5Y2V5Ye756Gu5a6a5Lul56Gu5a6a77yM5oiW5Y2V5Ye75Y+W5raI5Lul5Y+W5raI5pON5L2c44CCJyxcblx0XHRcdFx0XHRcdFx0XHRcdCfjgI3vvIjnhKHpmZDmnJ/vvInjgIJcXG5cXG7pu57mk4rnorrlrprku6XnorrlrprvvIzmiJbpu57mk4rlj5bmtojku6Xlj5bmtojmk43kvZzjgIInXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0OiBgJHtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aCqOWNs+Wwhue8lui+keWFqOS/neaKpOmhtemdouKAnCcsICfmgqjljbPlsIfnt6jovK/lhajkv53orbfpoIHpnaLjgIwnKSArXG5cdFx0XHRcdFx0XHRcdFx0Y3R4LnBhZ2VOYW1lICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+KAne+8iOWIsOacn++8micsICfjgI3vvIjliLDmnJ/vvJonKSArXG5cdFx0XHRcdFx0XHRcdFx0bmV3IE1vcmViaXRzLmRhdGUoY3R4LmZ1bGx5UHJvdGVjdGVkKS5jYWxlbmRhcigndXRjJylcblx0XHRcdFx0XHRcdFx0fSAoVVRDKe+8ieOAglxcblxcbiR7d2luZG93LndnVUxTKFxuXHRcdFx0XHRcdFx0XHRcdCfljZXlh7vnoa7lrprku6Xnoa7lrprvvIzmiJbljZXlh7vlj5bmtojku6Xlj5bmtojmk43kvZzjgIInLFxuXHRcdFx0XHRcdFx0XHRcdCfpu57mk4rnorrlrprku6XnorrlrprvvIzmiJbpu57mk4rlj5bmtojku6Xlj5bmtojmk43kvZzjgIInXG5cdFx0XHRcdFx0XHRcdCl9YFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCflt7Llj5bmtojlr7nlhajkv53miqTpobXpnaLnmoTnvJbovpHjgIInLCAn5bey5Y+W5raI5bCN5YWo5L+d6K236aCB6Z2i55qE57eo6Lyv44CCJykpO1xuXHRcdFx0XHRjdHgub25TYXZlRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y3R4LnJldHJpZXMgPSAwO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ2VkaXQnLFxuXHRcdFx0XHR0aXRsZTogY3R4LnBhZ2VOYW1lLFxuXHRcdFx0XHRzdW1tYXJ5OiBjdHguZWRpdFN1bW1hcnksXG5cdFx0XHRcdHRva2VuOiBjYW5Vc2VNd1VzZXJUb2tlbiA/IG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJykgOiBjdHguY3NyZlRva2VuLFxuXHRcdFx0XHR3YXRjaGxpc3Q6IGN0eC53YXRjaGxpc3RPcHRpb24sXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0fTtcblx0XHRcdGlmIChjdHguY2hhbmdlVGFncykge1xuXHRcdFx0XHRxdWVyeS50YWdzID0gY3R4LmNoYW5nZVRhZ3M7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZm5BcHBseVdhdGNobGlzdEV4cGlyeSgpKSB7XG5cdFx0XHRcdHF1ZXJ5LndhdGNobGlzdGV4cGlyeSA9IGN0eC53YXRjaGxpc3RFeHBpcnk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGN0eC5wYWdlU2VjdGlvbiA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0cXVlcnkuc2VjdGlvbiA9IGN0eC5wYWdlU2VjdGlvbjtcblx0XHRcdH1cblx0XHRcdC8vIFNldCBtaW5vciBlZGl0IGF0dHJpYnV0ZS4gSWYgdGhlc2UgcGFyYW1ldGVycyBhcmUgcHJlc2VudCB3aXRoIGFueSB2YWx1ZSwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdHJ1ZVxuXHRcdFx0aWYgKGN0eC5taW5vckVkaXQpIHtcblx0XHRcdFx0cXVlcnkubWlub3IgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cXVlcnkubm90bWlub3IgPSB0cnVlOyAvLyBmb3JjZSBUd2lua2xlIGNvbmZpZyB0byBvdmVycmlkZSB1c2VyIHByZWZlcmVuY2Ugc2V0dGluZyBmb3IgXCJhbGwgZWRpdHMgYXJlIG1pbm9yXCJcblx0XHRcdH1cblx0XHRcdC8vIFNldCBib3QgZWRpdCBhdHRyaWJ1dGUuIElmIHRoaXMgcGFyYW1ldGVyIGlzIHByZXNlbnQgd2l0aCBhbnkgdmFsdWUsIGl0IGlzIGludGVycHJldGVkIGFzIHRydWVcblx0XHRcdGlmIChjdHguYm90RWRpdCkge1xuXHRcdFx0XHRxdWVyeS5ib3QgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChjdHguZWRpdE1vZGUpIHtcblx0XHRcdFx0Y2FzZSAnYXBwZW5kJzpcblx0XHRcdFx0XHRpZiAoY3R4LmFwcGVuZFRleHQgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKCdJbnRlcm5hbCBlcnJvcjogYXBwZW5kIHRleHQgbm90IHNldCBiZWZvcmUgc2F2ZSEnKTtcblx0XHRcdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVyeS5hcHBlbmR0ZXh0ID0gY3R4LmFwcGVuZFRleHQ7IC8vIHVzZSBtb2RlIHRvIGFwcGVuZCB0byBjdXJyZW50IHBhZ2UgY29udGVudHNcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncHJlcGVuZCc6XG5cdFx0XHRcdFx0aWYgKGN0eC5wcmVwZW5kVGV4dCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoJ0ludGVybmFsIGVycm9yOiBwcmVwZW5kIHRleHQgbm90IHNldCBiZWZvcmUgc2F2ZSEnKTtcblx0XHRcdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVyeS5wcmVwZW5kdGV4dCA9IGN0eC5wcmVwZW5kVGV4dDsgLy8gdXNlIG1vZGUgdG8gcHJlcGVuZCB0byBjdXJyZW50IHBhZ2UgY29udGVudHNcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnbmV3Jzpcblx0XHRcdFx0XHRpZiAoIWN0eC5uZXdTZWN0aW9uVGV4dCkge1xuXHRcdFx0XHRcdFx0Ly8gQVBJIGRvZXNuJ3QgYWxsb3cgZW1wdHkgbmV3IHNlY3Rpb24gdGV4dFxuXHRcdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoJ0ludGVybmFsIGVycm9yOiBuZXcgc2VjdGlvbiB0ZXh0IG5vdCBzZXQgYmVmb3JlIHNhdmUhJyk7XG5cdFx0XHRcdFx0XHRjdHgub25TYXZlRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cXVlcnkuc2VjdGlvbiA9ICduZXcnO1xuXHRcdFx0XHRcdHF1ZXJ5LnRleHQgPSBjdHgubmV3U2VjdGlvblRleHQ7IC8vIGFkZCBhIG5ldyBzZWN0aW9uIHRvIGN1cnJlbnQgcGFnZVxuXHRcdFx0XHRcdHF1ZXJ5LnNlY3Rpb250aXRsZSA9IGN0eC5uZXdTZWN0aW9uVGl0bGUgfHwgY3R4LmVkaXRTdW1tYXJ5OyAvLyBkb25lIGJ5IHRoZSBBUEksIGJ1dCBub24tJycgdmFsdWVzIHdvdWxkIGdldCB0cmVhdGVkIGFzIHRleHRcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncmV2ZXJ0Jzpcblx0XHRcdFx0XHRxdWVyeS51bmRvID0gY3R4LnJldmVydEN1cklEO1xuXHRcdFx0XHRcdHF1ZXJ5LnVuZG9hZnRlciA9IGN0eC5yZXZlcnRPbGRJRDtcblx0XHRcdFx0XHRpZiAoY3R4Lmxhc3RFZGl0VGltZSkge1xuXHRcdFx0XHRcdFx0cXVlcnkuYmFzZXRpbWVzdGFtcCA9IGN0eC5sYXN0RWRpdFRpbWU7IC8vIGNoZWNrIHRoYXQgcGFnZSBoYXNuJ3QgYmVlbiBlZGl0ZWQgc2luY2UgaXQgd2FzIGxvYWRlZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHF1ZXJ5LnN0YXJ0dGltZXN0YW1wID0gY3R4LmxvYWRUaW1lOyAvLyBjaGVjayB0aGF0IHBhZ2UgaGFzbid0IGJlZW4gZGVsZXRlZCBzaW5jZSBpdCB3YXMgbG9hZGVkIChkb24ndCByZWNyZWF0ZSBiYWQgc3R1ZmYpXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gJ2FsbCdcblx0XHRcdFx0XHRxdWVyeS50ZXh0ID0gY3R4LnBhZ2VUZXh0OyAvLyByZXBsYWNlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgcGFnZVxuXHRcdFx0XHRcdGlmIChjdHgubGFzdEVkaXRUaW1lKSB7XG5cdFx0XHRcdFx0XHRxdWVyeS5iYXNldGltZXN0YW1wID0gY3R4Lmxhc3RFZGl0VGltZTsgLy8gY2hlY2sgdGhhdCBwYWdlIGhhc24ndCBiZWVuIGVkaXRlZCBzaW5jZSBpdCB3YXMgbG9hZGVkXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cXVlcnkuc3RhcnR0aW1lc3RhbXAgPSBjdHgubG9hZFRpbWU7IC8vIGNoZWNrIHRoYXQgcGFnZSBoYXNuJ3QgYmVlbiBkZWxldGVkIHNpbmNlIGl0IHdhcyBsb2FkZWQgKGRvbid0IHJlY3JlYXRlIGJhZCBzdHVmZilcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChbJ3JlY3JlYXRlJywgJ2NyZWF0ZW9ubHknLCAnbm9jcmVhdGUnXS5pbmNsdWRlcyhjdHguY3JlYXRlT3B0aW9uKSkge1xuXHRcdFx0XHRxdWVyeVtjdHguY3JlYXRlT3B0aW9uXSA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNhblVzZU13VXNlclRva2VuICYmIGN0eC5mb2xsb3dSZWRpcmVjdCkge1xuXHRcdFx0XHRxdWVyeS5yZWRpcmVjdCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRjdHguc2F2ZUFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCfkv53lrZjpobXpnaLigKbigKYnLCAn5YSy5a2Y6aCB6Z2i4oCm4oCmJyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRmblNhdmVTdWNjZXNzLFxuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0Zm5TYXZlRXJyb3Jcblx0XHRcdCk7XG5cdFx0XHRjdHguc2F2ZUFwaS5zZXRQYXJlbnQodGhpcyk7XG5cdFx0XHRjdHguc2F2ZUFwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBBZGRzIHRoZSB0ZXh0IHByb3ZpZGVkIHZpYSBgc2V0QXBwZW5kVGV4dCgpYCB0byB0aGUgZW5kIG9mIHRoZVxuXHRcdCAqIHBhZ2UuICBEb2VzIG5vdCByZXF1aXJlIGNhbGxpbmcgYGxvYWQoKWAgZmlyc3QsIHVubGVzcyBhIHdhdGNobGlzdFxuXHRcdCAqIGV4cGlyeSBpcyB1c2VkLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VjY2Vzc10gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGhhcyBzdWNjZWVkZWQuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGZhaWxzLlxuXHRcdCAqL1xuXHRcdHRoaXMuYXBwZW5kID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAnYXBwZW5kJztcblx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdlZGl0JykpIHtcblx0XHRcdFx0dGhpcy5zYXZlKG9uU3VjY2Vzcywgb25GYWlsdXJlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN0eC5vblNhdmVTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0XHRjdHgub25TYXZlRmFpbHVyZSA9IG9uRmFpbHVyZSB8fCBlbXB0eUZ1bmN0aW9uO1xuXHRcdFx0XHR0aGlzLmxvYWQoZm5BdXRvU2F2ZSwgY3R4Lm9uU2F2ZUZhaWx1cmUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQWRkcyB0aGUgdGV4dCBwcm92aWRlZCB2aWEgYHNldFByZXBlbmRUZXh0KClgIHRvIHRoZSBzdGFydCBvZiB0aGVcblx0XHQgKiBwYWdlLiAgRG9lcyBub3QgcmVxdWlyZSBjYWxsaW5nIGBsb2FkKClgIGZpcnN0LCB1bmxlc3MgYSB3YXRjaGxpc3Rcblx0XHQgKiBleHBpcnkgaXMgdXNlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259ICBbb25TdWNjZXNzXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBtZXRob2QgaGFzIHN1Y2NlZWRlZC5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGZhaWxzLlxuXHRcdCAqL1xuXHRcdHRoaXMucHJlcGVuZCA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuXHRcdFx0Y3R4LmVkaXRNb2RlID0gJ3ByZXBlbmQnO1xuXHRcdFx0aWYgKGZuQ2FuVXNlTXdVc2VyVG9rZW4oJ2VkaXQnKSkge1xuXHRcdFx0XHR0aGlzLnNhdmUob25TdWNjZXNzLCBvbkZhaWx1cmUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4Lm9uU2F2ZVN1Y2Nlc3MgPSBvblN1Y2Nlc3M7XG5cdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlID0gb25GYWlsdXJlIHx8IGVtcHR5RnVuY3Rpb247XG5cdFx0XHRcdHRoaXMubG9hZChmbkF1dG9TYXZlLCBjdHgub25TYXZlRmFpbHVyZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBDcmVhdGVzIGEgbmV3IHNlY3Rpb24gd2l0aCB0aGUgdGV4dCBwcm92aWRlZCBieSBgc2V0TmV3U2VjdGlvblRleHQoKWBcblx0XHQgKiBhbmQgc2VjdGlvbiB0aXRsZSBmcm9tIGBzZXROZXdTZWN0aW9uVGl0bGUoKWAuXG5cdFx0ICogSWYgYGVkaXRTdW1tYXJ5YCBpcyBwcm92aWRlZCwgdGhhdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGVcblx0XHQgKiBhdXRvZ2VuZXJhdGVkIFwiLT5UaXRsZSAobmV3IHNlY3Rpb25cIiBlZGl0IHN1bW1hcnkuXG5cdFx0ICogRG9lcyBub3QgcmVxdWlyZSBjYWxsaW5nIGBsb2FkKClgIGZpcnN0LCB1bmxlc3MgYSB3YXRjaGxpc3QgZXhwaXJ5XG5cdFx0ICogaXMgdXNlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259ICBbb25TdWNjZXNzXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBtZXRob2QgaGFzIHN1Y2NlZWRlZC5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSAgW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGZhaWxzLlxuXHRcdCAqL1xuXHRcdHRoaXMubmV3U2VjdGlvbiA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuXHRcdFx0Y3R4LmVkaXRNb2RlID0gJ25ldyc7XG5cdFx0XHRpZiAoZm5DYW5Vc2VNd1VzZXJUb2tlbignZWRpdCcpKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZShvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdHgub25TYXZlU3VjY2VzcyA9IG9uU3VjY2Vzcztcblx0XHRcdFx0Y3R4Lm9uU2F2ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdFx0dGhpcy5sb2FkKGZuQXV0b1NhdmUsIGN0eC5vblNhdmVGYWlsdXJlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8qKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgbG9hZGVkIHBhZ2UsIGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlICovXG5cdFx0dGhpcy5nZXRQYWdlTmFtZSA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHgucGFnZU5hbWU7XG5cdFx0fTtcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gVGhlIHRleHQgb2YgdGhlIHBhZ2UgYWZ0ZXIgYSBzdWNjZXNzZnVsIGxvYWQoKSAqL1xuXHRcdHRoaXMuZ2V0UGFnZVRleHQgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnBhZ2VUZXh0O1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7c3RyaW5nfSBwYWdlVGV4dCAtIFVwZGF0ZWQgcGFnZSB0ZXh0IHRoYXQgd2lsbCBiZSBzYXZlZCB3aGVuIGBzYXZlKClgIGlzIGNhbGxlZCAqL1xuXHRcdHRoaXMuc2V0UGFnZVRleHQgPSAocGFnZVRleHQpID0+IHtcblx0XHRcdGN0eC5lZGl0TW9kZSA9ICdhbGwnO1xuXHRcdFx0Y3R4LnBhZ2VUZXh0ID0gcGFnZVRleHQ7XG5cdFx0fTtcblx0XHQvKiogQHBhcmFtIHtzdHJpbmd9IGFwcGVuZFRleHQgLSBUZXh0IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcGFnZSB3aGVuIGBhcHBlbmQoKWAgaXMgY2FsbGVkICovXG5cdFx0dGhpcy5zZXRBcHBlbmRUZXh0ID0gKGFwcGVuZFRleHQpID0+IHtcblx0XHRcdGN0eC5lZGl0TW9kZSA9ICdhcHBlbmQnO1xuXHRcdFx0Y3R4LmFwcGVuZFRleHQgPSBhcHBlbmRUZXh0O1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7c3RyaW5nfSBwcmVwZW5kVGV4dCAtIFRleHQgdGhhdCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgcGFnZSB3aGVuIGBwcmVwZW5kKClgIGlzIGNhbGxlZCAqL1xuXHRcdHRoaXMuc2V0UHJlcGVuZFRleHQgPSAocHJlcGVuZFRleHQpID0+IHtcblx0XHRcdGN0eC5lZGl0TW9kZSA9ICdwcmVwZW5kJztcblx0XHRcdGN0eC5wcmVwZW5kVGV4dCA9IHByZXBlbmRUZXh0O1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7c3RyaW5nfSBuZXdTZWN0aW9uVGV4dCAtIFRleHQgdGhhdCB3aWxsIGJlIGFkZGVkIGluIGEgbmV3IHNlY3Rpb24gb24gdGhlIHBhZ2Ugd2hlbiBgbmV3U2VjdGlvbigpYCBpcyBjYWxsZWQgKi9cblx0XHR0aGlzLnNldE5ld1NlY3Rpb25UZXh0ID0gKG5ld1NlY3Rpb25UZXh0KSA9PiB7XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAnbmV3Jztcblx0XHRcdGN0eC5uZXdTZWN0aW9uVGV4dCA9IG5ld1NlY3Rpb25UZXh0O1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1NlY3Rpb25UaXRsZSAtIFRpdGxlIGZvciB0aGUgbmV3IHNlY3Rpb24gY3JlYXRlZCB3aGVuIGBuZXdTZWN0aW9uKClgIGlzIGNhbGxlZFxuXHRcdCAqIElmIG1pc3NpbmcsIGBjdHguZWRpdFN1bW1hcnlgIHdpbGwgYmUgdXNlZC4gSXNzdWVzIG1heSBvY2N1ciBpZiBhIHN1YnN0aXR1dGVkIHRlbXBsYXRlIGlzIHVzZWQuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXROZXdTZWN0aW9uVGl0bGUgPSAobmV3U2VjdGlvblRpdGxlKSA9PiB7XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAnbmV3Jztcblx0XHRcdGN0eC5uZXdTZWN0aW9uVGl0bGUgPSBuZXdTZWN0aW9uVGl0bGU7XG5cdFx0fTtcblx0XHQvLyBFZGl0LXJlbGF0ZWQgc2V0dGVyIG1ldGhvZHM6XG5cdFx0LyoqXG5cdFx0ICogU2V0IHRoZSBlZGl0IHN1bW1hcnkgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBgc2F2ZSgpYCBpcyBjYWxsZWQuXG5cdFx0ICogVW5uZWNlc3NhcnkgaWYgZWRpdE1vZGUgaXMgJ25ldycgYW5kIG5ld1NlY3Rpb25UaXRsZSBpcyBwcm92aWRlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdW1tYXJ5XG5cdFx0ICovXG5cdFx0dGhpcy5zZXRFZGl0U3VtbWFyeSA9IChzdW1tYXJ5KSA9PiB7XG5cdFx0XHRjdHguZWRpdFN1bW1hcnkgPSBzdW1tYXJ5O1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogU2V0IGFueSBjdXN0b20gdGFnKHMpIHRvIGJlIGFwcGxpZWQgdG8gdGhlIEFQSSBhY3Rpb24uXG5cdFx0ICogQSBudW1iZXIgb2YgYWN0aW9ucyBkb24ndCBzdXBwb3J0IGl0LCBtb3N0IG5vdGFibHkgd2F0Y2guXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gdGFncyAtIFN0cmluZyBvciBhcnJheSBvZiB0YWcocykuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRDaGFuZ2VUYWdzID0gKHRhZ3MpID0+IHtcblx0XHRcdGN0eC5jaGFuZ2VUYWdzID0gdGFncztcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbY3JlYXRlT3B0aW9uPW51bGxdIC0gQ2FuIHRha2UgdGhlIGZvbGxvd2luZyBmb3VyIHZhbHVlczpcblx0XHQgKiAtIHJlY3JlYXRlOiBjcmVhdGUgdGhlIHBhZ2UgaWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGVkaXQgaXQgaWYgaXQgZXhpc3RzLlxuXHRcdCAqIC0gY3JlYXRlb25seTogY3JlYXRlIHRoZSBwYWdlIGlmIGl0IGRvZXMgbm90IGV4aXN0LCBidXQgcmV0dXJuIGFuXG5cdFx0ICogZXJyb3IgaWYgaXQgYWxyZWFkeSBleGlzdHMuXG5cdFx0ICogLSBub2NyZWF0ZTogZG9uJ3QgY3JlYXRlIHRoZSBwYWdlLCBvbmx5IGVkaXQgaXQgaWYgaXQgYWxyZWFkeSBleGlzdHMuXG5cdFx0ICogLSBgbnVsbGA6IGNyZWF0ZSB0aGUgcGFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdCwgdW5sZXNzIGl0IHdhcyBkZWxldGVkXG5cdFx0ICogaW4gdGhlIG1vbWVudCBiZXR3ZWVuIGxvYWRpbmcgdGhlIHBhZ2UgYW5kIHNhdmluZyB0aGUgZWRpdCAoZGVmYXVsdCkuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRDcmVhdGVPcHRpb24gPSAoY3JlYXRlT3B0aW9uKSA9PiB7XG5cdFx0XHRjdHguY3JlYXRlT3B0aW9uID0gY3JlYXRlT3B0aW9uO1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7Ym9vbGVhbn0gbWlub3JFZGl0IC0gU2V0IHRydWUgdG8gbWFyayB0aGUgZWRpdCBhcyBhIG1pbm9yIGVkaXQuICovXG5cdFx0dGhpcy5zZXRNaW5vckVkaXQgPSAobWlub3JFZGl0KSA9PiB7XG5cdFx0XHRjdHgubWlub3JFZGl0ID0gbWlub3JFZGl0O1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7Ym9vbGVhbn0gYm90RWRpdCAtIFNldCB0cnVlIHRvIG1hcmsgdGhlIGVkaXQgYXMgYSBib3QgZWRpdCAqL1xuXHRcdHRoaXMuc2V0Qm90RWRpdCA9IChib3RFZGl0KSA9PiB7XG5cdFx0XHRjdHguYm90RWRpdCA9IGJvdEVkaXQ7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gcGFnZVNlY3Rpb24gLSBJbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIHNlY3Rpb24gbnVtYmVyIHRvIGxvYWQgb3Igc2F2ZS5cblx0XHQgKiBJZiBzcGVjaWZpZWQgYXMgYG51bGxgLCB0aGUgZW50aXJlIHBhZ2Ugd2lsbCBiZSByZXRyaWV2ZWQuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRQYWdlU2VjdGlvbiA9IChwYWdlU2VjdGlvbikgPT4ge1xuXHRcdFx0Y3R4LnBhZ2VTZWN0aW9uID0gcGFnZVNlY3Rpb247XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbWF4Q29uZmxpY3RSZXRyaWVzIC0gTnVtYmVyIG9mIHJldHJpZXMgZm9yIHNhdmUgZXJyb3JzIGludm9sdmluZyBhbiBlZGl0IGNvbmZsaWN0IG9yXG5cdFx0ICogbG9zcyBvZiB0b2tlbi4gRGVmYXVsdDogMi5cblx0XHQgKi9cblx0XHR0aGlzLnNldE1heENvbmZsaWN0UmV0cmllcyA9IChtYXhDb25mbGljdFJldHJpZXMpID0+IHtcblx0XHRcdGN0eC5tYXhDb25mbGljdFJldHJpZXMgPSBtYXhDb25mbGljdFJldHJpZXM7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbWF4UmV0cmllcyAtIE51bWJlciBvZiByZXRyaWVzIGZvciBzYXZlIGVycm9ycyBub3QgaW52b2x2aW5nIGFuIGVkaXQgY29uZmxpY3Qgb3Jcblx0XHQgKiBsb3NzIG9mIHRva2VuLiBEZWZhdWx0OiAyLlxuXHRcdCAqL1xuXHRcdHRoaXMuc2V0TWF4UmV0cmllcyA9IChtYXhSZXRyaWVzKSA9PiB7XG5cdFx0XHRjdHgubWF4UmV0cmllcyA9IG1heFJldHJpZXM7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBTZXQgd2hldGhlciBhbmQgaG93IHRvIHdhdGNoIHRoZSBwYWdlLCBpbmNsdWRpbmcgc2V0dGluZyBhbiBleHBpcnkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW58c3RyaW5nfE1vcmViaXRzLmRhdGV8RGF0ZX0gW3dhdGNobGlzdE9wdGlvbj1mYWxzZV0gLVxuXHRcdCAqIEJhc2ljYWxseSBhIG1peCBvZiBNVyBBUEkgYW5kIFR3aW5rbGV5IG9wdGlvbnMgYXZhaWxhYmxlIHByZS1leHBpcnk6XG5cdFx0ICogLSBgdHJ1ZWB8YCd5ZXMnYHxgJ3dhdGNoJ2A6IHBhZ2Ugd2lsbCBiZSBhZGRlZCB0byB0aGUgdXNlcidzXG5cdFx0ICogd2F0Y2hsaXN0IHdoZW4gdGhlIGFjdGlvbiBpcyBjYWxsZWQuIERlZmF1bHRzIHRvIGFuIGluZGVmaW5pdGVcblx0XHQgKiB3YXRjaCB1bmxlc3MgYHdhdGNobGlzdEV4cGlyeWAgaXMgcHJvdmlkZWQuXG5cdFx0ICogLSBgZmFsc2VgfGAnbm8nYHxgJ25vY2hhbmdlJ2A6IHdhdGNobGlzdCBzdGF0dXMgb2YgdGhlIHBhZ2UgKGluY2x1ZGluZyBleHBpcnkpIHdpbGwgbm90IGJlIGNoYW5nZWQuXG5cdFx0ICogLSBgJ2RlZmF1bHQnYHxgJ3ByZWZlcmVuY2VzJ2A6IHdhdGNobGlzdCBzdGF0dXMgb2YgdGhlIHBhZ2Ugd2lsbCBiZVxuXHRcdCAqIHNldCBiYXNlZCBvbiB0aGUgdXNlcidzIHByZWZlcmVuY2Ugc2V0dGluZ3Mgd2hlbiB0aGUgYWN0aW9uIGlzXG5cdFx0ICogY2FsbGVkLiBEZWZhdWx0cyB0byBhbiBpbmRlZmluaXRlIHdhdGNoIHVubGVzcyBgd2F0Y2hsaXN0RXhwaXJ5YCBpc1xuXHRcdCAqIHByb3ZpZGVkLlxuXHRcdCAqIC0gYCd1bndhdGNoJ2A6IGV4cGxpY2l0bHkgdW53YXRjaCB0aGUgcGFnZS5cblx0XHQgKiAtIEFueSBvdGhlciBgc3RyaW5nYCBvciBgbnVtYmVyYCwgb3IgYSBgTW9yZWJpdHMuZGF0ZWAgb3IgYERhdGVgXG5cdFx0ICogb2JqZWN0OiB3YXRjaCBwYWdlIHVudGlsIHRoZSBzcGVjaWZpZWQgdGltZSwgZGVmZXJyaW5nIHRvXG5cdFx0ICogYHdhdGNobGlzdEV4cGlyeWAgaWYgcHJvdmlkZWQuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfE1vcmViaXRzLmRhdGV8RGF0ZX0gW3dhdGNobGlzdEV4cGlyeT1pbmZpbml0eV0gLVxuXHRcdCAqIEEgZGF0ZS1saWtlIHN0cmluZyBvciBudW1iZXIsIG9yIGEgZGF0ZSBvYmplY3QuICBJZiBhIHN0cmluZyBvciBudW1iZXIsXG5cdFx0ICogY2FuIGJlIHJlbGF0aXZlICgyIHdlZWtzKSBvciBvdGhlciBzaW1pbGFybHkgZGF0ZS1saWtlIChpLmUuIE5PVCBcInBvdGF0b1wiKTpcblx0XHQgKiBJU08gODYwMTogMjAzOC0wMS0wOVQwMzoxNDowN1pcblx0XHQgKiBNZWRpYVdpa2k6IDIwMzgwMTA5MDMxNDA3XG5cdFx0ICogVU5JWDogMjE0NzQ4MzY0N1xuXHRcdCAqIFNRTDogMjAzOC0wMS0wOSAwMzoxNDowN1xuXHRcdCAqIENhbiBhbHNvIGJlIGBpbmZpbml0eWAgb3IgaW5maW5pdHktbGlrZSAoYGluZmluaXRlYCwgYGluZGVmaW5pdGVgLCBhbmQgYG5ldmVyYCkuXG5cdFx0ICogU2VlIHtAbGluayBodHRwczovL3BoYWJyaWNhdG9yLndpa2ltZWRpYS5vcmcvc291cmNlL21lZGlhd2lraS1saWJzLVRpbWVzdGFtcC9icm93c2UvbWFzdGVyL3NyYy9Db252ZXJ0aWJsZVRpbWVzdGFtcC5waHA7NGU1M2I4NTlhOTU4MGM1NTk1ODA3OGY0NmRkNGYzYTQ0ZDBmY2FhMCQ1Ny0xMDk/YXM9c291cmNlJmJsYW1lPW9mZn1cblx0XHQgKi9cblx0XHR0aGlzLnNldFdhdGNobGlzdCA9ICh3YXRjaGxpc3RPcHRpb24sIHdhdGNobGlzdEV4cGlyeSkgPT4ge1xuXHRcdFx0aWYgKHdhdGNobGlzdE9wdGlvbiBpbnN0YW5jZW9mIE1vcmViaXRzLmRhdGUgfHwgd2F0Y2hsaXN0T3B0aW9uIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR3YXRjaGxpc3RPcHRpb24gPSB3YXRjaGxpc3RPcHRpb24udG9JU09TdHJpbmcoKTtcblx0XHRcdH1cblx0XHRcdGlmICh3YXRjaGxpc3RFeHBpcnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR3YXRjaGxpc3RFeHBpcnkgPSAnaW5maW5pdHknO1xuXHRcdFx0fSBlbHNlIGlmICh3YXRjaGxpc3RFeHBpcnkgaW5zdGFuY2VvZiBNb3JlYml0cy5kYXRlIHx8IHdhdGNobGlzdEV4cGlyeSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0d2F0Y2hsaXN0RXhwaXJ5ID0gd2F0Y2hsaXN0RXhwaXJ5LnRvSVNPU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHdhdGNobGlzdE9wdGlvbikge1xuXHRcdFx0XHRjYXNlICdub2NoYW5nZSc6XG5cdFx0XHRcdGNhc2UgJ25vJzpcblx0XHRcdFx0Y2FzZSBmYWxzZTpcblx0XHRcdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRcdFx0Y3R4LndhdGNobGlzdE9wdGlvbiA9ICdub2NoYW5nZSc7XG5cdFx0XHRcdFx0Ly8gVGhlIE1XIEFQSSBhbGxvd3MgZm9yIGNoYW5naW5nIGV4cGlyeSB3aXRoIG5vY2hhbmdlIChhcyBcIm5vY2hhbmdlXCIgcmVmZXJzIHRvIHRoZSBiaW5hcnkgc3RhdHVzKSxcblx0XHRcdFx0XHQvLyBidXQgYnkga2VlcGluZyB0aGlzIG51bGwgaXQgd2lsbCBkZWZhdWx0IHRvIGFueSBleGlzdGluZyBleHBpcnksIGVuc3VyZSB0aGVyZSBpcyBhY3R1YWxseSBcIm5vIGNoYW5nZS5cIlxuXHRcdFx0XHRcdGN0eC53YXRjaGxpc3RFeHBpcnkgPSBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd1bndhdGNoJzpcblx0XHRcdFx0XHQvLyBleHBpcnkgdW5pbXBvcnRhbnRcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0T3B0aW9uID0gJ3Vud2F0Y2gnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdwcmVmZXJlbmNlcyc6XG5cdFx0XHRcdGNhc2UgJ2RlZmF1bHQnOlxuXHRcdFx0XHRcdGN0eC53YXRjaGxpc3RPcHRpb24gPSAncHJlZmVyZW5jZXMnO1xuXHRcdFx0XHRcdC8vIFRoZSBBUEkgYWxsb3dzIGFuIGV4cGlyeSBoZXJlLCBidXQgdGhlcmUgaXMgYXMgb2YgeWV0IChUMjY1NzE2KVxuXHRcdFx0XHRcdC8vIG5vIGV4cGlyeSBwcmVmZXJlbmNlIG9wdGlvbiwgc28gaXQncyBhIGJpdCBkZXZvaWQgb2YgY29udGV4dC5cblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0RXhwaXJ5ID0gd2F0Y2hsaXN0RXhwaXJ5O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd3YXRjaCc6XG5cdFx0XHRcdGNhc2UgJ3llcyc6XG5cdFx0XHRcdGNhc2UgdHJ1ZTpcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0T3B0aW9uID0gJ3dhdGNoJztcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0RXhwaXJ5ID0gd2F0Y2hsaXN0RXhwaXJ5O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIE5vdCByZWFsbHkgYSBcImRlZmF1bHRcIiBwZXIgc2UgYnV0IGNhdGNoZXMgXCJhbnkgb3RoZXIgc3RyaW5nXCJcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0T3B0aW9uID0gJ3dhdGNoJztcblx0XHRcdFx0XHRjdHgud2F0Y2hsaXN0RXhwaXJ5ID0gd2F0Y2hsaXN0T3B0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogU2V0IGEgd2F0Y2hsaXN0IGV4cGlyeS4gc2V0V2F0Y2hsaXN0IGNhbiBtb3N0bHkgaGFuZGxlIHRoaXMgYnlcblx0XHQgKiBpdHNlbGYsIHNvIHRoaXMgaXMgaGVyZSBsYXJnZWx5IGZvciBjb21wbGV0ZW5lc3MgYW5kIGNvbXBhdGliaWxpdHlcblx0XHQgKiB3aXRoIHRoZSBmdWxsIHN1aXRlIG9mIG9wdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8TW9yZWJpdHMuZGF0ZXxEYXRlfSBbd2F0Y2hsaXN0RXhwaXJ5PWluZmluaXR5XSAtXG5cdFx0ICogQSBkYXRlLWxpa2Ugc3RyaW5nIG9yIG51bWJlciwgb3IgYSBkYXRlIG9iamVjdC4gIElmIGEgc3RyaW5nIG9yIG51bWJlcixcblx0XHQgKiBjYW4gYmUgcmVsYXRpdmUgKDIgd2Vla3MpIG9yIG90aGVyIHNpbWlsYXJseSBkYXRlLWxpa2UgKGkuZS4gTk9UIFwicG90YXRvXCIpOlxuXHRcdCAqIElTTyA4NjAxOiAyMDM4LTAxLTA5VDAzOjE0OjA3WlxuXHRcdCAqIE1lZGlhV2lraTogMjAzODAxMDkwMzE0MDdcblx0XHQgKiBVTklYOiAyMTQ3NDgzNjQ3XG5cdFx0ICogU1FMOiAyMDM4LTAxLTA5IDAzOjE0OjA3XG5cdFx0ICogQ2FuIGFsc28gYmUgYGluZmluaXR5YCBvciBpbmZpbml0eS1saWtlIChgaW5maW5pdGVgLCBgaW5kZWZpbml0ZWAsIGFuZCBgbmV2ZXJgKS5cblx0XHQgKiBTZWUge0BsaW5rIGh0dHBzOi8vcGhhYnJpY2F0b3Iud2lraW1lZGlhLm9yZy9zb3VyY2UvbWVkaWF3aWtpLWxpYnMtVGltZXN0YW1wL2Jyb3dzZS9tYXN0ZXIvc3JjL0NvbnZlcnRpYmxlVGltZXN0YW1wLnBocDs0ZTUzYjg1OWE5NTgwYzU1OTU4MDc4ZjQ2ZGQ0ZjNhNDRkMGZjYWEwJDU3LTEwOT9hcz1zb3VyY2UmYmxhbWU9b2ZmfVxuXHRcdCAqL1xuXHRcdHRoaXMuc2V0V2F0Y2hsaXN0RXhwaXJ5ID0gKHdhdGNobGlzdEV4cGlyeSkgPT4ge1xuXHRcdFx0aWYgKHdhdGNobGlzdEV4cGlyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHdhdGNobGlzdEV4cGlyeSA9ICdpbmZpbml0eSc7XG5cdFx0XHR9IGVsc2UgaWYgKHdhdGNobGlzdEV4cGlyeSBpbnN0YW5jZW9mIE1vcmViaXRzLmRhdGUgfHwgd2F0Y2hsaXN0RXhwaXJ5IGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR3YXRjaGxpc3RFeHBpcnkgPSB3YXRjaGxpc3RFeHBpcnkudG9JU09TdHJpbmcoKTtcblx0XHRcdH1cblx0XHRcdGN0eC53YXRjaGxpc3RFeHBpcnkgPSB3YXRjaGxpc3RFeHBpcnk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAZGVwcmVjYXRlZCBBcyBvZiBEZWNlbWJlciAyMDIwLCB1c2Ugc2V0V2F0Y2hsaXN0LlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dhdGNobGlzdE9wdGlvbj1mYWxzZV0gLVxuXHRcdCAqIC0gYFRydWVgOiBwYWdlIHdhdGNobGlzdCBzdGF0dXMgd2lsbCBiZSBzZXQgYmFzZWQgb24gdGhlIHVzZXInc1xuXHRcdCAqIHByZWZlcmVuY2Ugc2V0dGluZ3Mgd2hlbiBgc2F2ZSgpYCBpcyBjYWxsZWQuXG5cdFx0ICogLSBgRmFsc2VgOiB3YXRjaGxpc3Qgc3RhdHVzIG9mIHRoZSBwYWdlIHdpbGwgbm90IGJlIGNoYW5nZWQuXG5cdFx0ICpcblx0XHQgKiBXYXRjaGxpc3Qgbm90ZXM6XG5cdFx0ICogMS4gVGhlIE1lZGlhV2lraSBBUEkgdmFsdWUgb2YgJ3Vud2F0Y2gnLCB3aGljaCBleHBsaWNpdGx5IHJlbW92ZXNcblx0XHQgKiB0aGUgcGFnZSBmcm9tIHRoZSB1c2VyJ3Mgd2F0Y2hsaXN0LCBpcyBub3QgdXNlZC5cblx0XHQgKiAyLiBJZiBib3RoIGBzZXRXYXRjaGxpc3QoKWAgYW5kIGBzZXRXYXRjaGxpc3RGcm9tUHJlZmVyZW5jZXMoKWAgYXJlXG5cdFx0ICogY2FsbGVkLCB0aGUgbGFzdCBjYWxsIHRha2VzIHByaW9yaXR5LlxuXHRcdCAqIDMuIFR3aW5rbGUgbW9kdWxlcyBzaG91bGQgdXNlIHRoZSBhcHByb3ByaWF0ZSBwcmVmZXJlbmNlIHRvIHNldCB0aGUgd2F0Y2hsaXN0IG9wdGlvbnMuXG5cdFx0ICogNC4gTW9zdCBUd2lua2xlIG1vZHVsZXMgdXNlIGBzZXRXYXRjaGxpc3QoKWAuIGBzZXRXYXRjaGxpc3RGcm9tUHJlZmVyZW5jZXMoKWBcblx0XHQgKiBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIGZldyBUd2lua2xlIHdhdGNobGlzdCBwcmVmZXJlbmNlcyB0aGF0XG5cdFx0ICogYWNjZXB0IGEgc3RyaW5nIHZhbHVlIG9mIGBkZWZhdWx0YC5cblx0XHQgKi9cblx0XHR0aGlzLnNldFdhdGNobGlzdEZyb21QcmVmZXJlbmNlcyA9ICh3YXRjaGxpc3RPcHRpb24pID0+IHtcblx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0J1tNb3JlYml0c10gTk9URTogTW9yZWJpdHMud2lraS5wYWdlLnNldFdhdGNobGlzdEZyb21QcmVmZXJlbmNlcyB3YXMgZGVwcmVjYXRlZCBEZWNlbWJlciAyMDIwLCBwbGVhc2UgdXNlIHNldFdhdGNobGlzdCdcblx0XHRcdCk7XG5cdFx0XHRpZiAod2F0Y2hsaXN0T3B0aW9uKSB7XG5cdFx0XHRcdGN0eC53YXRjaGxpc3RPcHRpb24gPSAncHJlZmVyZW5jZXMnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4LndhdGNobGlzdE9wdGlvbiA9ICdub2NoYW5nZSc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb2xsb3dSZWRpcmVjdD1mYWxzZV0gLVxuXHRcdCAqIC0gYHRydWVgOiBhIG1heGltdW0gb2Ygb25lIHJlZGlyZWN0IHdpbGwgYmUgZm9sbG93ZWQuIEluIHRoZSBldmVudFxuXHRcdCAqIG9mIGEgcmVkaXJlY3QsIGEgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgYW5kIHRoZSByZWRpcmVjdFxuXHRcdCAqIHRhcmdldCBjYW4gYmUgcmV0cmlldmVkIHdpdGggZ2V0UGFnZU5hbWUoKS5cblx0XHQgKiAtIGBmYWxzZWA6IChkZWZhdWx0KSB0aGUgcmVxdWVzdGVkIHBhZ2VOYW1lIHdpbGwgYmUgdXNlZCB3aXRob3V0IHJlZ2FyZCB0byBhbnkgcmVkaXJlY3QuXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbZm9sbG93Q3Jvc3NOc1JlZGlyZWN0PXRydWVdIC0gTm90IGFwcGxpY2FibGUgaWYgYGZvbGxvd1JlZGlyZWN0YCBpcyBub3Qgc2V0IHRydWUuXG5cdFx0ICogLSBgdHJ1ZWA6IChkZWZhdWx0KSBmb2xsb3cgcmVkaXJlY3QgZXZlbiBpZiBpdCBpcyBhIGNyb3NzLW5hbWVzcGFjZSByZWRpcmVjdFxuXHRcdCAqIC0gYGZhbHNlYDogZG9uJ3QgZm9sbG93IHJlZGlyZWN0IGlmIGl0IGlzIGNyb3NzLW5hbWVzcGFjZSwgZWRpdCB0aGUgcmVkaXJlY3QgaXRzZWxmLlxuXHRcdCAqL1xuXHRcdHRoaXMuc2V0Rm9sbG93UmVkaXJlY3QgPSAoZm9sbG93UmVkaXJlY3QsIGZvbGxvd0Nyb3NzTnNSZWRpcmVjdCkgPT4ge1xuXHRcdFx0aWYgKGN0eC5wYWdlTG9hZGVkKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdCdJbnRlcm5hbCBlcnJvcjogY2Fubm90IGNoYW5nZSByZWRpcmVjdCBzZXR0aW5nIGFmdGVyIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCEnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGN0eC5mb2xsb3dSZWRpcmVjdCA9IGZvbGxvd1JlZGlyZWN0O1xuXHRcdFx0Y3R4LmZvbGxvd0Nyb3NzTnNSZWRpcmVjdCA9XG5cdFx0XHRcdGZvbGxvd0Nyb3NzTnNSZWRpcmVjdCA9PT0gdW5kZWZpbmVkID8gY3R4LmZvbGxvd0Nyb3NzTnNSZWRpcmVjdCA6IGZvbGxvd0Nyb3NzTnNSZWRpcmVjdDtcblx0XHR9O1xuXHRcdC8vIGxvb2t1cC1jcmVhdGlvbiBzZXR0ZXIgZnVuY3Rpb25cblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZsYWcgLSBJZiBzZXQgdHJ1ZSwgdGhlIGF1dGhvciBhbmQgdGltZXN0YW1wIG9mXG5cdFx0ICogdGhlIGZpcnN0IG5vbi1yZWRpcmVjdCB2ZXJzaW9uIG9mIHRoZSBwYWdlIGlzIHJldHJpZXZlZC5cblx0XHQgKlxuXHRcdCAqIFdhcm5pbmc6XG5cdFx0ICogMS4gSWYgdGhlcmUgYXJlIG5vIHJldmlzaW9ucyBhbW9uZyB0aGUgZmlyc3QgNTAgdGhhdCBhcmVcblx0XHQgKiBub24tcmVkaXJlY3RzLCBvciBpZiB0aGVyZSBhcmUgbGVzcyA1MCByZXZpc2lvbnMgYW5kIGFsbCBhcmVcblx0XHQgKiByZWRpcmVjdHMsIHRoZSBvcmlnaW5hbCBjcmVhdGlvbiBpcyByZXRyaWV2ZWQuXG5cdFx0ICogMi4gUmV2aXNpb25zIHRoYXQgdGhlIHVzZXIgaXMgbm90IHByaXZpbGVnZWQgdG8gYWNjZXNzXG5cdFx0ICogKHJldmRlbGVkL3N1cHByZXNzZWQpIHdpbGwgYmUgdHJlYXRlZCBhcyBub24tcmVkaXJlY3RzLlxuXHRcdCAqIDMuIE11c3Qgbm90IGJlIHVzZWQgd2hlbiB0aGUgcGFnZSBoYXMgYSBub24td2lraXRleHQgY29udGVudG1vZGVsXG5cdFx0ICogc3VjaCBhcyBNb2R1bGVzcGFjZSBMdWEgb3IgdXNlciBKYXZhU2NyaXB0L0NTUy5cblx0XHQgKi9cblx0XHR0aGlzLnNldExvb2t1cE5vblJlZGlyZWN0Q3JlYXRvciA9IChmbGFnKSA9PiB7XG5cdFx0XHRjdHgubG9va3VwTm9uUmVkaXJlY3RDcmVhdG9yID0gZmxhZztcblx0XHR9O1xuXHRcdC8vIE1vdmUtcmVsYXRlZCBzZXR0ZXIgZnVuY3Rpb25zXG5cdFx0LyoqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiAqL1xuXHRcdHRoaXMuc2V0TW92ZURlc3RpbmF0aW9uID0gKGRlc3RpbmF0aW9uKSA9PiB7XG5cdFx0XHRjdHgubW92ZURlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG5cdFx0fTtcblx0XHQvKiogQHBhcmFtIHtib29sZWFufSBmbGFnICovXG5cdFx0dGhpcy5zZXRNb3ZlVGFsa1BhZ2UgPSAoZmxhZykgPT4ge1xuXHRcdFx0Y3R4Lm1vdmVUYWxrUGFnZSA9ICEhZmxhZztcblx0XHR9O1xuXHRcdC8qKiBAcGFyYW0ge2Jvb2xlYW59IGZsYWcgKi9cblx0XHR0aGlzLnNldE1vdmVTdWJwYWdlcyA9IChmbGFnKSA9PiB7XG5cdFx0XHRjdHgubW92ZVN1YnBhZ2VzID0gISFmbGFnO1xuXHRcdH07XG5cdFx0LyoqIEBwYXJhbSB7Ym9vbGVhbn0gZmxhZyAqL1xuXHRcdHRoaXMuc2V0TW92ZVN1cHByZXNzUmVkaXJlY3QgPSAoZmxhZykgPT4ge1xuXHRcdFx0Y3R4Lm1vdmVTdXBwcmVzc1JlZGlyZWN0ID0gISFmbGFnO1xuXHRcdH07XG5cdFx0Ly8gUHJvdGVjdC1yZWxhdGVkIHNldHRlciBmdW5jdGlvbnNcblx0XHQvKipcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWwgLSBUaGUgcmlnaHQgcmVxdWlyZWQgZm9yIHRoZSBzcGVjaWZpYyBhY3Rpb25cblx0XHQgKiBlLmcuIHN5c29wLCB0ZW1wbGF0ZWVkaXRvciwgYXV0b2NvbmZpcm1lZFxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwaXJ5PWluZmluaXR5XVxuXHRcdCAqL1xuXHRcdHRoaXMuc2V0RWRpdFByb3RlY3Rpb24gPSAobGV2ZWwsIGV4cGlyeSkgPT4ge1xuXHRcdFx0Y3R4LnByb3RlY3RFZGl0ID0ge1xuXHRcdFx0XHRsZXZlbCxcblx0XHRcdFx0ZXhwaXJ5OiBleHBpcnkgfHwgJ2luZmluaXR5Jyxcblx0XHRcdH07XG5cdFx0fTtcblx0XHR0aGlzLnNldE1vdmVQcm90ZWN0aW9uID0gKGxldmVsLCBleHBpcnkpID0+IHtcblx0XHRcdGN0eC5wcm90ZWN0TW92ZSA9IHtcblx0XHRcdFx0bGV2ZWwsXG5cdFx0XHRcdGV4cGlyeTogZXhwaXJ5IHx8ICdpbmZpbml0eScsXG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0dGhpcy5zZXRDcmVhdGVQcm90ZWN0aW9uID0gKGxldmVsLCBleHBpcnkpID0+IHtcblx0XHRcdGN0eC5wcm90ZWN0Q3JlYXRlID0ge1xuXHRcdFx0XHRsZXZlbCxcblx0XHRcdFx0ZXhwaXJ5OiBleHBpcnkgfHwgJ2luZmluaXR5Jyxcblx0XHRcdH07XG5cdFx0fTtcblx0XHR0aGlzLnNldENhc2NhZGluZ1Byb3RlY3Rpb24gPSAoZmxhZykgPT4ge1xuXHRcdFx0Y3R4LnByb3RlY3RDYXNjYWRlID0gISFmbGFnO1xuXHRcdH07XG5cdFx0dGhpcy5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nID0gKCkgPT4ge1xuXHRcdFx0Y3R4LnN1cHByZXNzUHJvdGVjdFdhcm5pbmcgPSB0cnVlO1xuXHRcdH07XG5cdFx0Ly8gUmV2ZXJ0LXJlbGF0ZWQgZ2V0dGVycy9zZXR0ZXJzOlxuXHRcdHRoaXMuc2V0T2xkSUQgPSAob2xkSUQpID0+IHtcblx0XHRcdGN0eC5yZXZlcnRPbGRJRCA9IG9sZElEO1xuXHRcdH07XG5cdFx0LyoqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IHJldmlzaW9uIElEIG9mIHRoZSBwYWdlICovXG5cdFx0dGhpcy5nZXRDdXJyZW50SUQgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnJldmVydEN1cklEO1xuXHRcdH07XG5cdFx0LyoqIEByZXR1cm5zIHtzdHJpbmd9IExhc3QgZWRpdG9yIG9mIHRoZSBwYWdlICovXG5cdFx0dGhpcy5nZXRSZXZpc2lvblVzZXIgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnJldmVydFVzZXI7XG5cdFx0fTtcblx0XHQvKiogQHJldHVybnMge3N0cmluZ30gSVNPIDg2MDEgdGltZXN0YW1wIGF0IHdoaWNoIHRoZSBwYWdlIHdhcyBsYXN0IGVkaXRlZC4gKi9cblx0XHR0aGlzLmdldExhc3RFZGl0VGltZSA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHgubGFzdEVkaXRUaW1lO1xuXHRcdH07XG5cdFx0Ly8gTWlzY2VsbGFuZW91cyBnZXR0ZXJzL3NldHRlcnM6XG5cdFx0LyoqXG5cdFx0ICogRGVmaW5lIGFuIG9iamVjdCBmb3IgdXNlIGluIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBgY2FsbGJhY2tQYXJhbWV0ZXJzYCBpcyBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIgb25seS4gVGhlIHBhcmFtZXRlcnNcblx0XHQgKiBhbGxvdyBhIGNhbGxlciB0byBwYXNzIHRoZSBwcm9wZXIgY29udGV4dCBpbnRvIGl0cyBjYWxsYmFja1xuXHRcdCAqIGZ1bmN0aW9uLiAgQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoZVxuXHRcdCAqIGNhbGxiYWNrUGFyYW1ldGVycyBvYmplY3Qgd2l0aGluIGEgYGxvYWQoKWAgY2FsbGJhY2sgc3RpbGwgcGVybWl0IGFcblx0XHQgKiBwcm9wZXIgcmUtZW50cnkgaW50byB0aGUgYGxvYWQoKWAgY2FsbGJhY2sgaWYgYW4gZWRpdCBjb25mbGljdCBpc1xuXHRcdCAqIGRldGVjdGVkIHVwb24gY2FsbGluZyBgc2F2ZSgpYC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBjYWxsYmFja1BhcmFtZXRlcnNcblx0XHQgKi9cblx0XHR0aGlzLnNldENhbGxiYWNrUGFyYW1ldGVycyA9IChjYWxsYmFja1BhcmFtZXRlcnMpID0+IHtcblx0XHRcdGN0eC5jYWxsYmFja1BhcmFtZXRlcnMgPSBjYWxsYmFja1BhcmFtZXRlcnM7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fSAtIFRoZSBvYmplY3QgcHJldmlvdXNseSBzZXQgYnkgYHNldENhbGxiYWNrUGFyYW1ldGVycygpYC5cblx0XHQgKi9cblx0XHR0aGlzLmdldENhbGxiYWNrUGFyYW1ldGVycyA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHguY2FsbGJhY2tQYXJhbWV0ZXJzO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIHtNb3JlYml0cy5zdGF0dXN9IHN0YXR1c0VsZW1lbnRcblx0XHQgKi9cblx0XHR0aGlzLnNldFN0YXR1c0VsZW1lbnQgPSAoc3RhdHVzRWxlbWVudCkgPT4ge1xuXHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQgPSBzdGF0dXNFbGVtZW50O1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnN0YXR1c30gU3RhdHVzIGVsZW1lbnQgY3JlYXRlZCBieSB0aGUgY29uc3RydWN0b3IuXG5cdFx0ICovXG5cdFx0dGhpcy5nZXRTdGF0dXNFbGVtZW50ID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGN0eC5zdGF0dXNFbGVtZW50O1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhZ2UgZXhpc3RlZCBvbiB0aGUgd2lraSB3aGVuIGl0IHdhcyBsYXN0IGxvYWRlZC5cblx0XHQgKi9cblx0XHR0aGlzLmV4aXN0cyA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHgucGFnZUV4aXN0cztcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFBhZ2UgSUQgb2YgdGhlIHBhZ2UgbG9hZGVkLiAwIGlmIHRoZSBwYWdlIGRvZXNuJ3Rcblx0XHQgKiBleGlzdC5cblx0XHQgKi9cblx0XHR0aGlzLmdldFBhZ2VJRCA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHgucGFnZUlEO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gLSBDb250ZW50IG1vZGVsIG9mIHRoZSBwYWdlLiAgUG9zc2libGUgdmFsdWVzXG5cdFx0ICogaW5jbHVkZSAoYnV0IG1heSBub3QgYmUgbGltaXRlZCB0byk6IGB3aWtpdGV4dGAsIGBqYXZhc2NyaXB0YCxcblx0XHQgKiBgY3NzYCwgYGpzb25gLCBgU2NyaWJ1bnRvYCwgYHNhbml0aXplZC1jc3NgLCBgTWFzc01lc3NhZ2VMaXN0Q29udGVudGAuXG5cdFx0ICogQWxzbyBnZXR0YWJsZSB2aWEgYG13LmNvbmZpZy5nZXQoJ3dnUGFnZUNvbnRlbnRNb2RlbCcpYC5cblx0XHQgKi9cblx0XHR0aGlzLmdldENvbnRlbnRNb2RlbCA9ICgpID0+IHtcblx0XHRcdHJldHVybiBjdHguY29udGVudE1vZGVsO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW58c3RyaW5nfSAtIFdhdGNoZWQgc3RhdHVzIG9mIHRoZSBwYWdlLiBCb29sZWFuXG5cdFx0ICogdW5sZXNzIGl0J3MgYmVpbmcgd2F0Y2hlZCB0ZW1wb3JhcmlseSwgaW4gd2hpY2ggY2FzZSByZXR1cm5zIHRoZVxuXHRcdCAqIGV4cGlyeSBzdHJpbmcuXG5cdFx0ICovXG5cdFx0dGhpcy5nZXRXYXRjaGVkID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGN0eC53YXRjaGVkO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gSVNPIDg2MDEgdGltZXN0YW1wIGF0IHdoaWNoIHRoZSBwYWdlIHdhcyBsYXN0IGxvYWRlZC5cblx0XHQgKi9cblx0XHR0aGlzLmdldExvYWRUaW1lID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGN0eC5sb2FkVGltZTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSB1c2VyIHdobyBjcmVhdGVkIHRoZSBwYWdlIGZvbGxvd2luZyBgbG9va3VwQ3JlYXRpb24oKWAuXG5cdFx0ICovXG5cdFx0dGhpcy5nZXRDcmVhdG9yID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGN0eC5jcmVhdG9yO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gVGhlIElTT1N0cmluZyB0aW1lc3RhbXAgb2YgcGFnZSBjcmVhdGlvbiBmb2xsb3dpbmcgYGxvb2t1cENyZWF0aW9uKClgLlxuXHRcdCAqL1xuXHRcdHRoaXMuZ2V0Q3JlYXRpb25UaW1lc3RhbXAgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnRpbWVzdGFtcDtcblx0XHR9O1xuXHRcdC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgeW91IGNhbiBlZGl0IHRoZSBwYWdlICovXG5cdFx0dGhpcy5jYW5FZGl0ID0gKCkgPT4ge1xuXHRcdFx0cmV0dXJuICEhY3R4LnRlc3RBY3Rpb25zICYmIGN0eC50ZXN0QWN0aW9ucy5pbmNsdWRlcygnZWRpdCcpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogUmV0cmlldmVzIHRoZSB1c2VybmFtZSBvZiB0aGUgdXNlciB3aG8gY3JlYXRlZCB0aGUgcGFnZSBhcyB3ZWxsIGFzXG5cdFx0ICogdGhlIHRpbWVzdGFtcCBvZiBjcmVhdGlvbi4gIFRoZSB1c2VybmFtZSBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZVxuXHRcdCAqIGBnZXRDcmVhdG9yKClgIGZ1bmN0aW9uOyB0aGUgdGltZXN0YW1wIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlXG5cdFx0ICogYGdldENyZWF0aW9uVGltZXN0YW1wKClgIGZ1bmN0aW9uLlxuXHRcdCAqIFByaW9yIHRvIEp1bmUgMjAxOSBrbm93biBhcyBgbG9va3VwQ3JlYXRvcigpYC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU3VjY2VzcyAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuXG5cdFx0ICogdGhlIHVzZXJuYW1lIGFuZCB0aW1lc3RhbXAgYXJlIGZvdW5kIHdpdGhpbiB0aGUgY2FsbGJhY2suXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlblxuXHRcdCAqIHRoZSBsb29rdXAgZmFpbHNcblx0XHQgKi9cblx0XHR0aGlzLmxvb2t1cENyZWF0aW9uID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvblN1Y2Nlc3MgPSBvblN1Y2Nlc3M7XG5cdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvbkZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghb25TdWNjZXNzKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKCdJbnRlcm5hbCBlcnJvcjogbm8gb25TdWNjZXNzIGNhbGxiYWNrIHByb3ZpZGVkIHRvIGxvb2t1cENyZWF0aW9uKCkhJyk7XG5cdFx0XHRcdGN0eC5vbkxvb2t1cENyZWF0aW9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0XHRcdHRpdGxlczogY3R4LnBhZ2VOYW1lLFxuXHRcdFx0XHRydmxpbWl0OiAxLFxuXHRcdFx0XHRydnByb3A6ICd1c2VyfHRpbWVzdGFtcCcsXG5cdFx0XHRcdHJ2ZGlyOiAnbmV3ZXInLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdH07XG5cdFx0XHQvLyBPbmx5IHRoZSB3aWtpdGV4dCBjb250ZW50IG1vZGVsIGNhbiByZWxpYWJseSBoYW5kbGVcblx0XHRcdC8vIHJ2c2VjdGlvbiwgb3RoZXJzIHJldHVybiBhbiBlcnJvciB3aGVuIHBhaXJlZCB3aXRoIHRoZVxuXHRcdFx0Ly8gY29udGVudCBydnByb3AuIFJlbGF0ZWRseSwgbm9uLXdpa2l0ZXh0IG1vZGVscyBkb24ndFxuXHRcdFx0Ly8gdW5kZXJzdGFuZCB0aGUgI1JFRElSRUNUIGNvbmNlcHQsIHNvIHdlIHNob3VsZG4ndCBhdHRlbXB0XG5cdFx0XHQvLyB0aGUgcmVkaXJlY3QgcmVzb2x1dGlvbiBpbiBmbkxvb2t1cENyZWF0aW9uU3VjY2Vzc1xuXHRcdFx0aWYgKGN0eC5sb29rdXBOb25SZWRpcmVjdENyZWF0b3IpIHtcblx0XHRcdFx0cXVlcnkucnZzZWN0aW9uID0gMDtcblx0XHRcdFx0cXVlcnkucnZwcm9wICs9ICd8Y29udGVudCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3R4LmZvbGxvd1JlZGlyZWN0KSB7XG5cdFx0XHRcdHF1ZXJ5LnJlZGlyZWN0cyA9ICcnOyAvLyBmb2xsb3cgYWxsIHJlZGlyZWN0c1xuXHRcdFx0fVxuXG5cdFx0XHRjdHgubG9va3VwQ3JlYXRpb25BcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5oqT5Y+W6aG16Z2i5Yib5bu66ICF5L+h5oGvJywgJ+aKk+WPlumggemdouW7uueri+iAheizh+ioiicpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0Zm5Mb29rdXBDcmVhdGlvblN1Y2Nlc3MsXG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LFxuXHRcdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvbkZhaWx1cmVcblx0XHRcdCk7XG5cdFx0XHRjdHgubG9va3VwQ3JlYXRpb25BcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4Lmxvb2t1cENyZWF0aW9uQXBpLnBvc3QoKTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIFJldmVydHMgYSBwYWdlIHRvIGByZXZlcnRPbGRJRGAgc2V0IGJ5IGBzZXRPbGRJRGAuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25TdWNjZXNzXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJ1biBvbiBzdWNjZXNzLlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkZhaWx1cmVdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuIG9uIGZhaWx1cmUuXG5cdFx0ICovXG5cdFx0dGhpcy5yZXZlcnQgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcblx0XHRcdGN0eC5vblNhdmVTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0Y3R4Lm9uU2F2ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghY3R4LnJldmVydE9sZElEKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKCdJbnRlcm5hbCBlcnJvcjogcmV2aXNpb24gSUQgdG8gcmV2ZXJ0IHRvIHdhcyBub3Qgc2V0IGJlZm9yZSByZXZlcnQhJyk7XG5cdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAncmV2ZXJ0Jztcblx0XHRcdHRoaXMubG9hZChmbkF1dG9TYXZlLCBjdHgub25TYXZlRmFpbHVyZSk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBNb3ZlcyBhIHBhZ2UgdG8gYW5vdGhlciB0aXRsZS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Y2Nlc3NdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuIG9uIHN1Y2Nlc3MuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gb24gZmFpbHVyZS5cblx0XHQgKi9cblx0XHR0aGlzLm1vdmUgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcblx0XHRcdGN0eC5vbk1vdmVTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0Y3R4Lm9uTW92ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghZm5QcmVmbGlnaHRDaGVja3MuY2FsbCh0aGlzLCAnbW92ZScsIGN0eC5vbk1vdmVGYWlsdXJlKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdGlmICghY3R4Lm1vdmVEZXN0aW5hdGlvbikge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcignSW50ZXJuYWwgZXJyb3I6IGRlc3RpbmF0aW9uIHBhZ2UgbmFtZSB3YXMgbm90IHNldCBiZWZvcmUgbW92ZSEnKTtcblx0XHRcdFx0Y3R4Lm9uTW92ZUZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdtb3ZlJykpIHtcblx0XHRcdFx0Zm5Qcm9jZXNzTW92ZS5jYWxsKHRoaXMsIHRoaXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcXVlcnkgPSBmbk5lZWRUb2tlbkluZm9RdWVyeSgnbW92ZScpO1xuXHRcdFx0XHRjdHgubW92ZUFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPluS7pOeJjOKApuKApicsICflj5blvpfmrIrmnZbigKbigKYnKSxcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHRmblByb2Nlc3NNb3ZlLFxuXHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LFxuXHRcdFx0XHRcdGN0eC5vbk1vdmVGYWlsdXJlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGN0eC5tb3ZlQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdFx0Y3R4Lm1vdmVBcGkucG9zdCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogTWFya3MgdGhlIHBhZ2UgYXMgcGF0cm9sbGVkLCB1c2luZyBgcmNpZGAgKGlmIGF2YWlsYWJsZSkgb3IgYHJldmlkYC5cblx0XHQgKlxuXHRcdCAqIFBhdHJvbGxpbmcgYXMgc3VjaCBkb2Vzbid0IG5lZWQgdG8gcmVseSBvbiBsb2FkaW5nIHRoZSBwYWdlIGluXG5cdFx0ICogcXVlc3Rpb247IHNpbXBseSBwYXNzaW5nIGEgcmV2aWQgdG8gdGhlIEFQSSBpcyBzdWZmaWNpZW50LCBzbyBpblxuXHRcdCAqIHRob3NlIGNhc2VzIGp1c3QgdXNpbmcge0BsaW5rIE1vcmViaXRzLndpa2kuYXBpfSBpcyBwcm9iYWJseSBwcmVmZXJhYmxlLlxuXHRcdCAqXG5cdFx0ICogTm8gZXJyb3IgaGFuZGxpbmcgc2luY2Ugd2UgZG9uJ3QgYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgZXJyb3JzLlxuXHRcdCAqL1xuXHRcdHRoaXMucGF0cm9sID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKCFNb3JlYml0cy51c2VySXNTeXNvcCAmJiAhTW9yZWJpdHMudXNlcklzSW5Hcm91cCgncGF0cm9sbGVyJykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cdFx0XHQvLyBJZiBhIGxpbmsgaXMgcHJlc2VudCwgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiBpdCdzIHBhdHJvbGxlZFxuXHRcdFx0aWYgKCRib2R5LmZpbmQoJy5wYXRyb2xsaW5rJykubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHBhdHJvbGhyZWYgPSAkYm9keS5maW5kKCcucGF0cm9sbGluayBhJykuYXR0cignaHJlZicpO1xuXHRcdFx0XHRjdHgucmNpZCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgncmNpZCcsIHBhdHJvbGhyZWYpO1xuXHRcdFx0XHRmblByb2Nlc3NQYXRyb2wodGhpcywgdGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwYXRyb2xRdWVyeSA9IHtcblx0XHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdFx0cHJvcDogJ2luZm8nLFxuXHRcdFx0XHRcdG1ldGE6ICd0b2tlbnMnLFxuXHRcdFx0XHRcdHR5cGU6ICdwYXRyb2wnLFxuXHRcdFx0XHRcdC8vIGFzIGxvbmcgYXMgd2UncmUgcXVlcnlpbmcsIG1pZ2h0IGFzIHdlbGwgZ2V0IGEgdG9rZW5cblx0XHRcdFx0XHRsaXN0OiAncmVjZW50Y2hhbmdlcycsXG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdGhlIHBhZ2UgaXMgdW5wYXRyb2xsZWRcblx0XHRcdFx0XHR0aXRsZXM6IGN0eC5wYWdlTmFtZSxcblx0XHRcdFx0XHRyY3Byb3A6ICdwYXRyb2xsZWQnLFxuXHRcdFx0XHRcdHJjdGl0bGU6IGN0eC5wYWdlTmFtZSxcblx0XHRcdFx0XHRyY2xpbWl0OiAxLFxuXHRcdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjdHgucGF0cm9sQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W5Luk54mM4oCm4oCmJywgJ+WPluW+l+asiuadluKApuKApicpLFxuXHRcdFx0XHRcdHBhdHJvbFF1ZXJ5LFxuXHRcdFx0XHRcdGZuUHJvY2Vzc1BhdHJvbFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjdHgucGF0cm9sQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdFx0Y3R4LnBhdHJvbEFwaS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyB8ZGVsZXRlfCBpcyBhIHJlc2VydmVkIHdvcmQgaW4gc29tZSBmbGF2b3VycyBvZiBKU1xuXHRcdC8qKlxuXHRcdCAqIERlbGV0ZXMgYSBwYWdlIChmb3IgYWRtaW5zIG9ubHkpLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VjY2Vzc10gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gb24gc3VjY2Vzcy5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25GYWlsdXJlXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJ1biBvbiBmYWlsdXJlLlxuXHRcdCAqL1xuXHRcdHRoaXMuZGVsZXRlUGFnZSA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuXHRcdFx0Y3R4Lm9uRGVsZXRlU3VjY2VzcyA9IG9uU3VjY2Vzcztcblx0XHRcdGN0eC5vbkRlbGV0ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghZm5QcmVmbGlnaHRDaGVja3MuY2FsbCh0aGlzLCAnZGVsZXRlJywgY3R4Lm9uRGVsZXRlRmFpbHVyZSkpIHtcblx0XHRcdFx0cmV0dXJuOyAvLyBhYm9ydFxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm5DYW5Vc2VNd1VzZXJUb2tlbignZGVsZXRlJykpIHtcblx0XHRcdFx0Zm5Qcm9jZXNzRGVsZXRlLmNhbGwodGhpcywgdGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBxdWVyeSA9IGZuTmVlZFRva2VuSW5mb1F1ZXJ5KCdkZWxldGUnKTtcblx0XHRcdFx0Y3R4LmRlbGV0ZUFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPluS7pOeJjOKApuKApicsICflj5blvpfmrIrmnZbigKbigKYnKSxcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHRmblByb2Nlc3NEZWxldGUsXG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdFx0Y3R4Lm9uRGVsZXRlRmFpbHVyZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjdHguZGVsZXRlQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdFx0Y3R4LmRlbGV0ZUFwaS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBVbmRlbGV0ZXMgYSBwYWdlIChmb3IgYWRtaW5zIG9ubHkpLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VjY2Vzc10gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gb24gc3VjY2Vzcy5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25GYWlsdXJlXSAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJ1biBvbiBmYWlsdXJlLlxuXHRcdCAqL1xuXHRcdHRoaXMudW5kZWxldGVQYWdlID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cdFx0XHRjdHgub25VbmRlbGV0ZVN1Y2Nlc3MgPSBvblN1Y2Nlc3M7XG5cdFx0XHRjdHgub25VbmRlbGV0ZUZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghZm5QcmVmbGlnaHRDaGVja3MuY2FsbCh0aGlzLCAndW5kZWxldGUnLCBjdHgub25VbmRlbGV0ZUZhaWx1cmUpKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gYWJvcnRcblx0XHRcdH1cblxuXHRcdFx0aWYgKGZuQ2FuVXNlTXdVc2VyVG9rZW4oJ3VuZGVsZXRlJykpIHtcblx0XHRcdFx0Zm5Qcm9jZXNzVW5kZWxldGUuY2FsbCh0aGlzLCB0aGlzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5ID0gZm5OZWVkVG9rZW5JbmZvUXVlcnkoJ3VuZGVsZXRlJyk7XG5cdFx0XHRcdGN0eC51bmRlbGV0ZUFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPluS7pOeJjOKApuKApicsICflj5blvpfmrIrmnZbigKbigKYnKSxcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHRmblByb2Nlc3NVbmRlbGV0ZSxcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0XHRjdHgub25VbmRlbGV0ZUZhaWx1cmVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y3R4LnVuZGVsZXRlQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdFx0Y3R4LnVuZGVsZXRlQXBpLnBvc3QoKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIFByb3RlY3RzIGEgcGFnZSAoZm9yIGFkbWlucyBvbmx5KS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Y2Nlc3NdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuIG9uIHN1Y2Nlc3MuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gb24gZmFpbHVyZS5cblx0XHQgKi9cblx0XHR0aGlzLnByb3RlY3QgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcblx0XHRcdGN0eC5vblByb3RlY3RTdWNjZXNzID0gb25TdWNjZXNzO1xuXHRcdFx0Y3R4Lm9uUHJvdGVjdEZhaWx1cmUgPSBvbkZhaWx1cmUgfHwgZW1wdHlGdW5jdGlvbjtcblx0XHRcdGlmICghZm5QcmVmbGlnaHRDaGVja3MuY2FsbCh0aGlzLCAncHJvdGVjdCcsIGN0eC5vblByb3RlY3RGYWlsdXJlKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdGlmICghY3R4LnByb3RlY3RFZGl0ICYmICFjdHgucHJvdGVjdE1vdmUgJiYgIWN0eC5wcm90ZWN0Q3JlYXRlKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdCdJbnRlcm5hbCBlcnJvcjogeW91IG11c3Qgc2V0IGVkaXQgYW5kL29yIG1vdmUgYW5kL29yIGNyZWF0ZSBwcm90ZWN0aW9uIGJlZm9yZSBjYWxsaW5nIHByb3RlY3QoKSEnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGN0eC5vblByb3RlY3RGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBiZWNhdXNlIG9mIHRoZSB3YXkgTVcgQVBJIGludGVycHJldHMgcHJvdGVjdGlvbiBsZXZlbHNcblx0XHRcdC8vIChhYnNvbHV0ZSwgbm90IGRpZmZlcmVudGlhbCksIHdlIGFsd2F5cyBuZWVkIHRvIHJlcXVlc3Rcblx0XHRcdC8vIHByb3RlY3Rpb24gbGV2ZWxzIGZyb20gdGhlIHNlcnZlclxuXHRcdFx0Y29uc3QgcXVlcnkgPSBmbk5lZWRUb2tlbkluZm9RdWVyeSgncHJvdGVjdCcpO1xuXHRcdFx0Y3R4LnByb3RlY3RBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+W5Luk54mM4oCm4oCmJywgJ+WPluW+l+asiuadluKApuKApicpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0Zm5Qcm9jZXNzUHJvdGVjdCxcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdGN0eC5vblByb3RlY3RGYWlsdXJlXG5cdFx0XHQpO1xuXHRcdFx0Y3R4LnByb3RlY3RBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4LnByb3RlY3RBcGkucG9zdCgpO1xuXHRcdH07XG5cdFx0Lypcblx0XHQgKiBQcml2YXRlIG1lbWJlciBmdW5jdGlvbnNcblx0XHQgKiBUaGVzZSBhcmUgbm90IGV4cG9zZWQgb3V0c2lkZVxuXHRcdCAqL1xuXHRcdC8qKlxuXHRcdCAqIERldGVybWluZXMgd2hldGhlciB3ZSBjYW4gc2F2ZSBhbiBBUEkgY2FsbCBieSB1c2luZyB0aGUgY3NyZiB0b2tlblxuXHRcdCAqIHNlbnQgd2l0aCB0aGUgcGFnZSBIVE1MLCBvciB3aGV0aGVyIHdlIG5lZWQgdG8gYXNrIHRoZSBzZXJ2ZXIgZm9yXG5cdFx0ICogbW9yZSBpbmZvIChlLmcuIHByb3RlY3Rpb24gb3Igd2F0Y2hsaXN0IGV4cGlyeSkuXG5cdFx0ICpcblx0XHQgKiBDdXJyZW50bHkgdXNlZCBmb3IgYGFwcGVuZGAsIGBwcmVwZW5kYCwgYG5ld1NlY3Rpb25gLCBgbW92ZWAsXG5cdFx0ICogYGRlbGV0ZVBhZ2VgLCBhbmQgYHVuZGVsZXRlUGFnZWAuIE5vdCB1c2VkIGZvciBgcHJvdGVjdGBcblx0XHQgKiBzaW5jZSBpdCBhbHdheXMgbmVlZHMgdG8gcmVxdWVzdCBwcm90ZWN0aW9uIHN0YXR1cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbYWN0aW9uPWVkaXRdIC0gVGhlIGFjdGlvbiBiZWluZyB1bmRlcnRha2VuLCBlLmcuXG5cdFx0ICogXCJlZGl0XCIgb3IgXCJkZWxldGVcIi4gSW4gcHJhY3RpY2UsIG9ubHkgXCJlZGl0XCIgb3IgXCJub3RlZGl0XCIgbWF0dGVycy5cblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0XHQgKi9cblx0XHRjb25zdCBmbkNhblVzZU13VXNlclRva2VuID0gKGFjdGlvbikgPT4ge1xuXHRcdFx0YWN0aW9uIHx8PSAnZWRpdCc7XG5cdFx0XHQvLyBJZiBhIHdhdGNobGlzdCBleHBpcnkgaXMgc2V0LCB3ZSBtdXN0IGFsd2F5cyBsb2FkIHRoZSBwYWdlXG5cdFx0XHQvLyB0byBhdm9pZCBvdmVyd3JpdGluZyBpbmRlZmluaXRlIHByb3RlY3Rpb24uICBPZiBjb3Vyc2UsIG5vdFxuXHRcdFx0Ly8gbmVlZGVkIGlmIHNldHRpbmcgaW5kZWZpbml0ZSB3YXRjaGluZyFcblx0XHRcdGlmIChjdHgud2F0Y2hsaXN0RXhwaXJ5ICYmICFNb3JlYml0cy5zdHJpbmcuaXNJbmZpbml0eShjdHgud2F0Y2hsaXN0RXhwaXJ5KSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHQvLyBBUEktYmFzZWQgcmVkaXJlY3QgcmVzb2x1dGlvbiBvbmx5IHdvcmtzIGZvciBhY3Rpb249cXVlcnkgYW5kXG5cdFx0XHQvLyBhY3Rpb249ZWRpdCBpbiBhcHBlbmQvcHJlcGVuZC9uZXcgbW9kZXNcblx0XHRcdGlmIChjdHguZm9sbG93UmVkaXJlY3QpIHtcblx0XHRcdFx0aWYgKCFjdHguZm9sbG93Q3Jvc3NOc1JlZGlyZWN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBtdXN0IGxvYWQgdGhlIHBhZ2UgdG8gY2hlY2sgZm9yIGNyb3NzIG5hbWVzcGFjZSByZWRpcmVjdHNcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhY3Rpb24gIT09ICdlZGl0JyB8fCBjdHguZWRpdE1vZGUgPT09ICdhbGwnIHx8IGN0eC5lZGl0TW9kZSA9PT0gJ3JldmVydCcpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIGRvIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIGVkaXQgcHJvdGVjdGlvbiBleHBpcnk/XG5cdFx0XHRpZiAoTW9yZWJpdHMudXNlcklzU3lzb3AgJiYgIWN0eC5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRuZXcgbXcuVGl0bGUoTW9yZWJpdHMucGFnZU5hbWVOb3JtKS5nZXRQcmVmaXhlZFRleHQoKSAhPT1cblx0XHRcdFx0XHRuZXcgbXcuVGl0bGUoY3R4LnBhZ2VOYW1lKS5nZXRQcmVmaXhlZFRleHQoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gd2dSZXN0cmljdGlvbkVkaXQgaXMgbnVsbCBvbiBub24tZXhpc3RlbnQgcGFnZXMsXG5cdFx0XHRcdC8vIHNvIHRoaXMgbmVhdGx5IGhhbmRsZXMgbm9uZXhpc3RlbnQgcGFnZXNcblx0XHRcdFx0Y29uc3QgZWRpdFJlc3RyaWN0aW9uID0gbXcuY29uZmlnLmdldCgnd2dSZXN0cmljdGlvbkVkaXQnKTtcblx0XHRcdFx0aWYgKCFlZGl0UmVzdHJpY3Rpb24gfHwgZWRpdFJlc3RyaWN0aW9uLmluY2x1ZGVzKCdzeXNvcCcpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gISFtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogV2hlbiBmdW5jdGlvbnMgY2FuJ3QgdXNlXG5cdFx0ICoge0BsaW5rIE1vcmViaXRzLndpa2kucGFnZX5mbkNhblVzZU13VXNlclRva2VufGZuQ2FuVXNlTXdVc2VyVG9rZW59XG5cdFx0ICogb3IgcmVxdWlyZSBjaGVja2luZyBwcm90ZWN0aW9uIG9yIHdhdGNoZWQgc3RhdHVzLCBtYWludGFpbiB0aGUgcXVlcnlcblx0XHQgKiBpbiBvbmUgcGxhY2UuIFVzZWQgZm9yIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2UjZGVsZXRlUGFnZXxkZWxldGV9LFxuXHRcdCAqIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2UjdW5kZWxldGVQYWdlfHVuZGVsZXRlfSxcblx0XHQgKiB7QGxpbmsqIE1vcmViaXRzLndpa2kucGFnZSNwcm90ZWN0fHByb3RlY3R9LFxuXHRcdCAqIGFuZCB7QGxpbmsgTW9yZWJpdHMud2lraS5wYWdlI21vdmV8bW92ZX1cblx0XHQgKiAoYmFzaWNhbGx5LCBqdXN0IG5vdCB7QGxpbmsgTW9yZWJpdHMud2lraS5wYWdlI2xvYWR8bG9hZH0pLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiAtIFRoZSBhY3Rpb24gYmVpbmcgdW5kZXJ0YWtlbiwgZS5nLiBcImVkaXRcIiBvclxuXHRcdCAqIFwiZGVsZXRlXCIuXG5cdFx0ICogQHJldHVybnMge09iamVjdH0gQXBwcm9wcmlhdGUgcXVlcnkuXG5cdFx0ICovXG5cdFx0Y29uc3QgZm5OZWVkVG9rZW5JbmZvUXVlcnkgPSAoYWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRtZXRhOiAndG9rZW5zJyxcblx0XHRcdFx0dHlwZTogJ2NzcmYnLFxuXHRcdFx0XHR0aXRsZXM6IGN0eC5wYWdlTmFtZSxcblx0XHRcdFx0cHJvcDogJ2luZm8nLFxuXHRcdFx0XHRpbnByb3A6ICd3YXRjaGVkJyxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0Ly8gUHJvdGVjdGlvbiBub3QgY2hlY2tlZCBmb3Igbm9uLXN5c29wIG1vdmVzXG5cdFx0XHRpZiAoYWN0aW9uICE9PSAnbW92ZScgfHwgTW9yZWJpdHMudXNlcklzU3lzb3ApIHtcblx0XHRcdFx0cXVlcnkuaW5wcm9wICs9ICd8cHJvdGVjdGlvbic7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3R4LmZvbGxvd1JlZGlyZWN0ICYmIGFjdGlvbiAhPT0gJ3VuZGVsZXRlJykge1xuXHRcdFx0XHRxdWVyeS5yZWRpcmVjdHMgPSAnJzsgLy8gZm9sbG93IGFsbCByZWRpcmVjdHNcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xuXHRcdH07XG5cdFx0Ly8gY2FsbGJhY2sgZnJvbSBsb2FkU3VjY2VzcygpIGZvciBhcHBlbmQoKSwgcHJlcGVuZCgpLCBhbmQgbmV3U2VjdGlvbigpIHRocmVhZHNcblx0XHRjb25zdCBmbkF1dG9TYXZlID0gKHBhZ2VvYmopID0+IHtcblx0XHRcdHBhZ2VvYmouc2F2ZShjdHgub25TYXZlU3VjY2VzcywgY3R4Lm9uU2F2ZUZhaWx1cmUpO1xuXHRcdH07XG5cdFx0Ly8gY2FsbGJhY2sgZnJvbSBsb2FkQXBpLnBvc3QoKVxuXHRcdGNvbnN0IGZuTG9hZFN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGN0eC5sb2FkQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRpZiAoIWZuQ2hlY2tQYWdlTmFtZShyZXNwb25zZSwgY3R4Lm9uTG9hZEZhaWx1cmUpKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gYWJvcnRcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgW3BhZ2VdID0gcmVzcG9uc2UucGFnZXM7XG5cdFx0XHRsZXQgcmV2O1xuXHRcdFx0Y3R4LnBhZ2VFeGlzdHMgPSAhcGFnZS5taXNzaW5nO1xuXHRcdFx0aWYgKGN0eC5wYWdlRXhpc3RzKSB7XG5cdFx0XHRcdFtyZXZdID0gcGFnZS5yZXZpc2lvbnM7XG5cdFx0XHRcdGN0eC5sYXN0RWRpdFRpbWUgPSByZXYudGltZXN0YW1wO1xuXHRcdFx0XHRjdHgucGFnZVRleHQgPSByZXYuY29udGVudDtcblx0XHRcdFx0Y3R4LnBhZ2VJRCA9IHBhZ2UucGFnZWlkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4LnBhZ2VUZXh0ID0gJyc7IC8vIGFsbG93IGZvciBjb25jYXRlbmF0aW9uLCBldGMuXG5cdFx0XHRcdGN0eC5wYWdlSUQgPSAwOyAvLyBub25leGlzdGVudCBpbiByZXNwb25zZSwgbWF0Y2hlcyB3Z0FydGljbGVJZFxuXHRcdFx0fVxuXG5cdFx0XHRjdHguY3NyZlRva2VuID0gcmVzcG9uc2UudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHRcdGlmICghY3R4LmNzcmZUb2tlbikge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+acquiDveiOt+WPlue8lui+keS7pOeJjOOAgicsICfmnKrog73lj5blvpfnt6jovK/mrIrmnZbjgIInKSk7XG5cdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjdHgubG9hZFRpbWUgPSBjdHgubG9hZEFwaS5nZXRSZXNwb25zZSgpLmN1cnRpbWVzdGFtcDtcblx0XHRcdGlmICghY3R4LmxvYWRUaW1lKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5pyq6IO96I635Y+W5b2T5YmN5pe26Ze05oiz44CCJywgJ+acquiDveWPluW+l+eVtuWJjeaZgumWk+aIs+OAgicpKTtcblx0XHRcdFx0Y3R4Lm9uTG9hZEZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGN0eC5jb250ZW50TW9kZWwgPSBwYWdlLmNvbnRlbnRtb2RlbDtcblx0XHRcdGN0eC53YXRjaGVkID0gcGFnZS53YXRjaGxpc3RleHBpcnkgfHwgcGFnZS53YXRjaGVkO1xuXHRcdFx0Ly8gZXh0cmFjdCBwcm90ZWN0aW9uIGluZm8sIHRvIGFsZXJ0IGFkbWlucyB3aGVuIHRoZXkgYXJlIGFib3V0IHRvIGVkaXQgYSBwcm90ZWN0ZWQgcGFnZVxuXHRcdFx0Ly8gSW5jbHVkZXMgY2FzY2FkaW5nIHByb3RlY3Rpb25cblx0XHRcdGlmIChNb3JlYml0cy51c2VySXNTeXNvcCkge1xuXHRcdFx0XHRjb25zdCBlZGl0UHJvdCA9IHBhZ2UucHJvdGVjdGlvblxuXHRcdFx0XHRcdC5maWx0ZXIoKHByKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcHIudHlwZSA9PT0gJ2VkaXQnICYmIHByLmxldmVsID09PSAnc3lzb3AnO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnBvcCgpO1xuXHRcdFx0XHRpZiAoZWRpdFByb3QpIHtcblx0XHRcdFx0XHRjdHguZnVsbHlQcm90ZWN0ZWQgPSBlZGl0UHJvdC5leHBpcnk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3R4LmZ1bGx5UHJvdGVjdGVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGN0eC5yZXZlcnRDdXJJRCA9IHBhZ2UubGFzdHJldmlkO1xuXHRcdFx0Y29uc3QgdGVzdGFjdGlvbnMgPSBwYWdlLmFjdGlvbnM7XG5cdFx0XHRjdHgudGVzdEFjdGlvbnMgPSBbXTsgLy8gd2FzIG51bGxcblx0XHRcdGZvciAoY29uc3QgYWN0aW9uIG9mIE9iamVjdC5rZXlzKHRlc3RhY3Rpb25zKSkge1xuXHRcdFx0XHRpZiAodGVzdGFjdGlvbnNbYWN0aW9uXSkge1xuXHRcdFx0XHRcdGN0eC50ZXN0QWN0aW9uc1tjdHgudGVzdEFjdGlvbnMubGVuZ3RoXSA9IGFjdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGN0eC5lZGl0TW9kZSA9PT0gJ3JldmVydCcpIHtcblx0XHRcdFx0Y3R4LnJldmVydEN1cklEID0gcmV2ICYmIHJldi5yZXZpZDtcblx0XHRcdFx0aWYgKCFjdHgucmV2ZXJ0Q3VySUQpIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+acquiDveiOt+WPluW9k+WJjeS/ruiuoueJiOacrElE44CCJywgJ+acquiDveWPluW+l+ebruWJjeS/ruiogueJiOacrElE44CCJykpO1xuXHRcdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjdHgucmV2ZXJ0VXNlciA9IHJldiAmJiByZXYudXNlcjtcblx0XHRcdFx0aWYgKCFjdHgucmV2ZXJ0VXNlcikge1xuXHRcdFx0XHRcdGlmIChyZXYgJiYgcmV2LnVzZXJoaWRkZW4pIHtcblx0XHRcdFx0XHRcdC8vIHVzZXJuYW1lIHdhcyBSZXZEZWwnZCBvciBvdmVyc2lnaHRlZFxuXHRcdFx0XHRcdFx0Y3R4LnJldmVydFVzZXIgPSB3aW5kb3cud2dVTFMoJzznlKjmiLflkI3lt7LpmpDol48+JywgJzzkvb/nlKjogIXlkI3nqLHlt7LpmrHol48+Jyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+acquiDveiOt+WPluatpOS/ruiuoueJiOacrOeahOe8lui+keiAheOAgicsICfmnKrog73lj5blvpfmraTkv67oqILniYjmnKznmoTnt6jovK/ogIXjgIInKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGN0eC5vbkxvYWRGYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBzZXQgcmV2ZXJ0IGVkaXQgc3VtbWFyeVxuXHRcdFx0XHRjdHguZWRpdFN1bW1hcnkgPSBgW1tRVzpVTkRPfOaSpOmUgF1d55SxICR7Y3R4LnJldmVydFVzZXJ9IOaJgOWBmuWHuueahCR7d2luZG93LndnVUxTKCfkv67orqIgJywgJ+S/ruiogiAnKX0ke1xuXHRcdFx0XHRcdGN0eC5yZXZlcnRPbGRJRFxuXHRcdFx0XHR977yaJHtjdHguZWRpdFN1bW1hcnl9YDtcblx0XHRcdH1cblx0XHRcdGN0eC5wYWdlTG9hZGVkID0gdHJ1ZTtcblx0XHRcdC8vIG13Lm5vdGlmeShcIkdlbmVyYXRlIGVkaXQgY29uZmxpY3Qgbm93XCIsIHt0eXBlOiAnd2FybicsIHRhZzogJ21vcmViaXRzJ30pOyAgLy8gZm9yIHRlc3RpbmcgZWRpdCBjb25mbGljdCByZWNvdmVyeSBsb2dpY1xuXHRcdFx0Y3R4Lm9uTG9hZFN1Y2Nlc3ModGhpcyk7IC8vIGludm9rZSBjYWxsYmFja1xuXHRcdH07XG5cdFx0Ly8gaGVscGVyIGZ1bmN0aW9uIHRvIHBhcnNlIHRoZSBwYWdlIG5hbWUgcmV0dXJuZWQgZnJvbSB0aGUgQVBJXG5cdFx0Y29uc3QgZm5DaGVja1BhZ2VOYW1lID0gZnVuY3Rpb24gKHJlc3BvbnNlLCBvbkZhaWx1cmUpIHtcblx0XHRcdG9uRmFpbHVyZSB8fD0gZW1wdHlGdW5jdGlvbjtcblx0XHRcdGNvbnN0IHBhZ2UgPSByZXNwb25zZS5wYWdlcyAmJiByZXNwb25zZS5wYWdlc1swXTtcblx0XHRcdGlmIChwYWdlKSB7XG5cdFx0XHRcdC8vIGNoZWNrIGZvciBpbnZhbGlkIHRpdGxlc1xuXHRcdFx0XHRpZiAocGFnZS5pbnZhbGlkKSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCfmoIfpopjkuI3lkIjms5XvvJonLCBg5qiZ6aGM5LiN5ZCI5rOV77yaJHtjdHgucGFnZU5hbWV9YCkpO1xuXHRcdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGFib3J0XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gcmV0cmlldmUgYWN0dWFsIHRpdGxlIG9mIHRoZSBwYWdlIGFmdGVyIG5vcm1hbGl6YXRpb24gYW5kIHJlZGlyZWN0c1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZE5hbWUgPSBwYWdlLnRpdGxlO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UucmVkaXJlY3RzKSB7XG5cdFx0XHRcdFx0Ly8gY2hlY2sgZm9yIGNyb3NzLW5hbWVzcGFjZSByZWRpcmVjdDpcblx0XHRcdFx0XHRjb25zdCBvcmlnTnMgPSBuZXcgbXcuVGl0bGUoY3R4LnBhZ2VOYW1lKS5uYW1lc3BhY2U7XG5cdFx0XHRcdFx0Y29uc3QgbmV3TnMgPSBuZXcgbXcuVGl0bGUocmVzb2x2ZWROYW1lKS5uYW1lc3BhY2U7XG5cdFx0XHRcdFx0aWYgKG9yaWdOcyAhPT0gbmV3TnMgJiYgIWN0eC5mb2xsb3dDcm9zc05zUmVkaXJlY3QpIHtcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdFx0XHRjdHgucGFnZU5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5piv6Leo5ZG95ZCN56m66Ze06YeN5a6a5ZCR5YiwJywgJ+aYr+i3qOWRveWQjeepuumWk+mHjeaWsOWwjuWQkeWIsCcpICtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZE5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn77yM55Wl6L+HJywgJ++8jOeVpemBjicpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0b25GYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBvbmx5IG5vdGlmeSB1c2VyIGZvciByZWRpcmVjdHMsIG5vdCBub3JtYWxpemF0aW9uXG5cdFx0XHRcdFx0bmV3IE1vcmViaXRzLnN0YXR1cyhcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5L+h5oGvJywgJ+izh+ioiicpLFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfku44gJywgJ+W+niAnKSArXG5cdFx0XHRcdFx0XHRcdGN0eC5wYWdlTmFtZSArXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOmHjeWumuWQkeWIsCAnLCAnIOmHjeaWsOWwjuWQkeWIsCAnKSArXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkTmFtZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3R4LnBhZ2VOYW1lID0gcmVzb2x2ZWROYW1lOyAvLyB1cGRhdGUgdG8gcmVkaXJlY3QgdGFyZ2V0IG9yIG5vcm1hbGl6ZWQgbmFtZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gY291bGQgYmUgYSBjaXJjdWxhciByZWRpcmVjdCBvciBvdGhlciBwcm9ibGVtXG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5LiN6IO96Kej5p6Q6aG16Z2i55qE6YeN5a6a5ZCR77yaJywgJ+S4jeiDveino+aekOmggemdoueahOmHjeaWsOWwjuWQke+8micpICsgY3R4LnBhZ2VOYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0Ly8gZm9yY2UgZXJyb3IgdG8gc3RheSBvbiB0aGUgc2NyZWVuXG5cdFx0XHRcdCsrTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0O1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlOyAvLyBhbGwgT0tcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIERldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBwcm92aWRlIGEgd2F0Y2hsaXN0IGV4cGlyeS4gIFdpbGwgbm90XG5cdFx0ICogZG8gc28gaWYgdGhlIHBhZ2UgaXMgY3VycmVudGx5IHBlcm1hbmVudGx5IHdhdGNoZWQsIG9yIHRoZSBjdXJyZW50XG5cdFx0ICogZXhwaXJ5IGlzICphZnRlciogdGhlIG5ldywgcHJvdmlkZWQgZXhwaXJ5LiAgT25seSBoYW5kbGVzIHN0cmluZ3Ncblx0XHQgKiByZWNvZ25pemVkIGJ5IHtAbGluayBNb3JlYml0cy5kYXRlfSBvciByZWxhdGl2ZSB0aW1lZnJhbWVzIHdpdGhcblx0XHQgKiB1bml0IGl0IGNhbiBwcm9jZXNzLiAgUmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgZm5DYW5Vc2VNd1VzZXJUb2tlblxuXHRcdCAqIHJlcXVpcmVzIHBhZ2UgbG9hZGluZyBpZiBhIHdhdGNobGlzdGV4cGlyeSBpcyBwcm92aWRlZCwgc28gd2UgYXJlXG5cdFx0ICogZW5zdXJlZCBvZiBrbm93aW5nIHRoZSB3YXRjaCBzdGF0dXMgYnkgdGhlIHVzZSBvZiB0aGlzLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0Y29uc3QgZm5BcHBseVdhdGNobGlzdEV4cGlyeSA9ICgpID0+IHtcblx0XHRcdGlmIChjdHgud2F0Y2hsaXN0RXhwaXJ5KSB7XG5cdFx0XHRcdGlmICghY3R4LndhdGNoZWQgfHwgTW9yZWJpdHMuc3RyaW5nLmlzSW5maW5pdHkoY3R4LndhdGNobGlzdEV4cGlyeSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY3R4LndhdGNoZWQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0bGV0IG5ld0V4cGlyeTtcblx0XHRcdFx0XHQvLyBBdHRlbXB0IHRvIGRldGVybWluZSBpZiB0aGUgbmV3IGV4cGlyeSBpcyBhXG5cdFx0XHRcdFx0Ly8gcmVsYXRpdmUgKGUuZy4gYDEgbW9udGhgKSBvciBhYnNvbHV0ZSBkYXRldGltZVxuXHRcdFx0XHRcdGNvbnN0IHJlbCA9IGN0eC53YXRjaGxpc3RFeHBpcnkuc3BsaXQoJyAnKTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0bmV3RXhwaXJ5ID0gbmV3IE1vcmViaXRzLmRhdGUoKS5hZGQocmVsWzBdLCByZWxbMV0pO1xuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0bmV3RXhwaXJ5ID0gbmV3IE1vcmViaXRzLmRhdGUoY3R4LndhdGNobGlzdEV4cGlyeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIElmIHRoZSBkYXRlIGlzIHZhbGlkLCBvbmx5IHVzZSBpdCBpZiBpdCBleHRlbmRzIHRoZSBjdXJyZW50IGV4cGlyeVxuXHRcdFx0XHRcdGlmIChuZXdFeHBpcnkuaXNWYWxpZCgpKSB7XG5cdFx0XHRcdFx0XHRpZiAobmV3RXhwaXJ5LmlzQWZ0ZXIobmV3IE1vcmViaXRzLmRhdGUoY3R4LndhdGNoZWQpKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gSWYgaXQncyBzdGlsbCBub3QgdmFsaWQsIGhvcGUgaXQncyBhIHZhbGlkIE1XIGV4cGlyeSBmb3JtYXQgdGhhdFxuXHRcdFx0XHRcdFx0Ly8gTW9yZWJpdHMuZGF0ZSBkb2Vzbid0IHJlY29nbml6ZSwgc28ganVzdCBkZWZhdWx0IHRvIHVzaW5nIGl0LlxuXHRcdFx0XHRcdFx0Ly8gVGhpcyB3aWxsIGFsc28gaW5jbHVkZSBtaW5vciB0eXBvcy5cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cdFx0Ly8gY2FsbGJhY2sgZnJvbSBzYXZlQXBpLnBvc3QoKVxuXHRcdGNvbnN0IGZuU2F2ZVN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjdHguZWRpdE1vZGUgPSAnYWxsJzsgLy8gY2FuY2VsIGFwcGVuZC9wcmVwZW5kL25ld1NlY3Rpb24vcmV2ZXJ0IG1vZGVzXG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGN0eC5zYXZlQXBpLmdldFJlc3BvbnNlKCk7XG5cdFx0XHQvLyBzZWUgaWYgdGhlIEFQSSB0aGlua3Mgd2Ugd2VyZSBzdWNjZXNzZnVsXG5cdFx0XHRpZiAocmVzcG9uc2UuZWRpdC5yZXN1bHQgPT09ICdTdWNjZXNzJykge1xuXHRcdFx0XHQvLyByZWFsIHN1Y2Nlc3Ncblx0XHRcdFx0Ly8gZGVmYXVsdCBvbiBzdWNjZXNzIGFjdGlvbiAtIGRpc3BsYXkgbGluayBmb3IgZWRpdGVkIHBhZ2Vcblx0XHRcdFx0Y29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtdy51dGlsLmdldFVybChjdHgucGFnZU5hbWUpKTtcblx0XHRcdFx0bGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjdHgucGFnZU5hbWUpKTtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyhbJ+WujOaIkO+8iCcsIGxpbmssICfvvIknXSk7XG5cdFx0XHRcdGlmIChjdHgub25TYXZlU3VjY2Vzcykge1xuXHRcdFx0XHRcdGN0eC5vblNhdmVTdWNjZXNzKHRoaXMpOyAvLyBpbnZva2UgY2FsbGJhY2tcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGVycm9ycyBoZXJlIGFyZSBvbmx5IGdlbmVyYXRlZCBieSBleHRlbnNpb25zIHdoaWNoIGhvb2sgQVBJRWRpdEJlZm9yZVNhdmUgd2l0aGluIE1lZGlhV2lraSxcblx0XHRcdC8vIHdoaWNoIGFzIG9mIDEuMzQuMC13bWYuMjMgKFNlcHQgMjAxOSkgc2hvdWxkIG9ubHkgZW5jb21wYXNzIGNhcHRjaGEgbWVzc2FnZXNcblx0XHRcdGlmIChyZXNwb25zZS5lZGl0LmNhcHRjaGEpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuI3og73kv53lrZjpobXpnaLvvIzlm6DmnI3liqHlmajopoHmsYLmgqjovpPlhaXpqozor4HnoIHjgIInLCAn5LiN6IO95YSy5a2Y6aCB6Z2i77yM5Zug5Ly65pyN5Zmo6KaB5rGC5oKo6Ly45YWl6amX6K2J56K844CCJylcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5L+d5a2Y6aG16Z2i5pe255SxQVBJ5b6X5Yiw5pyq55+l6ZSZ6K+vJywgJ+WEsuWtmOmggemdouaZgueUsUFQSeW+l+WIsOacquefpemMr+iqpCcpKTtcblx0XHRcdH1cblx0XHRcdC8vIGZvcmNlIGVycm9yIHRvIHN0YXkgb24gdGhlIHNjcmVlblxuXHRcdFx0KytNb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQ7XG5cdFx0XHRjdHgub25TYXZlRmFpbHVyZSh0aGlzKTtcblx0XHR9O1xuXHRcdC8vIGNhbGxiYWNrIGZyb20gc2F2ZUFwaS5wb3N0KClcblx0XHRjb25zdCBmblNhdmVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IGVycm9yQ29kZSA9IGN0eC5zYXZlQXBpLmdldEVycm9yQ29kZSgpO1xuXHRcdFx0Ly8gY2hlY2sgZm9yIGVkaXQgY29uZmxpY3Rcblx0XHRcdGlmIChlcnJvckNvZGUgPT09ICdlZGl0Y29uZmxpY3QnICYmIGN0eC5jb25mbGljdFJldHJpZXMrKyA8IGN0eC5tYXhDb25mbGljdFJldHJpZXMpIHtcblx0XHRcdFx0Ly8gZWRpdCBjb25mbGljdHMgY2FuIG9jY3VyIHdoZW4gdGhlIHBhZ2UgbmVlZHMgdG8gYmUgcHVyZ2VkIGZyb20gdGhlIHNlcnZlciBjYWNoZVxuXHRcdFx0XHRjb25zdCBwdXJnZVF1ZXJ5ID0ge1xuXHRcdFx0XHRcdGFjdGlvbjogJ3B1cmdlJyxcblx0XHRcdFx0XHR0aXRsZXM6IGN0eC5wYWdlTmFtZSwgLy8gcmVkaXJlY3RzIGFyZSBhbHJlYWR5IHJlc29sdmVkXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgcHVyZ2VBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfmo4DmtYvliLDnvJbovpHlhrLnqoHvvIzmraPlnKjmm7TmlrDmnI3liqHlmajnvJPlrZgnLCAn5qqi5ris5Yiw57eo6Lyv6KGd56qB77yM5q2j5Zyo5pu05paw5Ly65pyN5Zmo5b+r5Y+WJyksXG5cdFx0XHRcdFx0cHVyZ2VRdWVyeSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHQtLU1vcmViaXRzLndpa2kubnVtYmVyT2ZBY3Rpb25zTGVmdDsgLy8gYWxsb3cgZm9yIG5vcm1hbCBjb21wbGV0aW9uIGlmIHJldHJ5IHN1Y2NlZWRzXG5cdFx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5pbmZvKHdpbmRvdy53Z1VMUygn5qOA5rWL5Yiw57yW6L6R5Yay56qB77yM6YeN6K+V5L+u5pS5JywgJ+aqoua4rOWIsOe3qOi8r+ihneeqge+8jOmHjeippuS/ruaUuScpKTtcblx0XHRcdFx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdlZGl0JykpIHtcblx0XHRcdFx0XHRcdFx0Y3R4LnNhdmVBcGkucG9zdCgpOyAvLyBuZWNlc3NhcmlseSBhcHBlbmQsIHByZXBlbmQsIG9yIG5ld1NlY3Rpb24sIHNvIHRoaXMgc2hvdWxkIHdvcmsgYXMgZGVzaXJlZFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y3R4LmxvYWRBcGkucG9zdCgpOyAvLyByZWxvYWQgdGhlIHBhZ2UgYW5kIHJlYXBwbHkgdGhlIGVkaXRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHB1cmdlQXBpLnBvc3QoKTtcblx0XHRcdFx0Ly8gY2hlY2sgZm9yIG5ldHdvcmsgb3Igc2VydmVyIGVycm9yXG5cdFx0XHR9IGVsc2UgaWYgKChlcnJvckNvZGUgPT09IG51bGwgfHwgZXJyb3JDb2RlID09PSB1bmRlZmluZWQpICYmIGN0eC5yZXRyaWVzKysgPCBjdHgubWF4UmV0cmllcykge1xuXHRcdFx0XHQvLyB0aGUgZXJyb3IgbWlnaHQgYmUgdHJhbnNpZW50LCBzbyB0cnkgYWdhaW5cblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyh3aW5kb3cud2dVTFMoJ+S/neWtmOWksei0pe+8jOWcqDLnp5LlkI7ph43or5XigKbigKYnLCAn5YSy5a2Y5aSx5pWX77yM5ZyoMuenkuW+jOmHjeippuKApuKApicpKTtcblx0XHRcdFx0LS1Nb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQ7IC8vIGFsbG93IGZvciBub3JtYWwgY29tcGxldGlvbiBpZiByZXRyeSBzdWNjZWVkc1xuXHRcdFx0XHQvLyB3YWl0IGZvciBzb21ldGltZSBmb3IgY2xpZW50IHRvIHJlZ2FpbiBjb25uZWN0aXZpdHlcblx0XHRcdFx0c2xlZXAoMjAwMCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0Y3R4LnNhdmVBcGkucG9zdCgpOyAvLyBnaXZlIGl0IGFub3RoZXIgZ28hXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQvLyBoYXJkIGVycm9yLCBnaXZlIHVwXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGN0eC5zYXZlQXBpLmdldFJlc3BvbnNlKCk7XG5cdFx0XHRcdGNvbnN0IGVycm9yRGF0YSA9XG5cdFx0XHRcdFx0cmVzcG9uc2UuZXJyb3IgfHxcblx0XHRcdFx0XHQvLyBiYyBlcnJvciBmb3JtYXRcblx0XHRcdFx0XHRyZXNwb25zZS5lcnJvcnNbMF0uZGF0YTsgLy8gaHRtbC93aWtpdGV4dC9wbGFpbnRleHQgZXJyb3IgZm9ybWF0XG5cdFx0XHRcdHN3aXRjaCAoZXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0Y2FzZSAncHJvdGVjdGVkcGFnZSc6XG5cdFx0XHRcdFx0XHQvLyBub24tYWRtaW4gYXR0ZW1wdGluZyB0byBlZGl0IGEgcHJvdGVjdGVkIHBhZ2UgLSB0aGlzIGdpdmVzIGEgZnJpZW5kbGllciBtZXNzYWdlIHRoYW4gdGhlIGRlZmF1bHRcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5LiN6IO95L+d5a2Y5L+u5pS577ya6aG16Z2i6KKr5L+d5oqkJywgJ+S4jeiDveWEsuWtmOS/ruaUue+8mumggemdouiiq+S/neittycpKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2FidXNlZmlsdGVyLWRpc2FsbG93ZWQnOlxuXHRcdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn57yW6L6R6KKr6Ziy5rul55So6L+H5ruk5Zmo6KeE5YiZ4oCcJywgJ+e3qOi8r+iiq+mYsua/q+eUqOmBjua/vuWZqOimj+WJh+OAjCcpICtcblx0XHRcdFx0XHRcdFx0XHRlcnJvckRhdGEuYWJ1c2VmaWx0ZXIuZGVzY3JpcHRpb24gK1xuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHRcdCfigJ3pmLvmraLjgILoi6XmgqjorqTkuLrmgqjnmoTor6XmrKHnvJbovpHmmK/mnInmhI/kuYnnmoTvvIzor7foh7MgTElCX3RhbGs6566h55CG5ZGY5ZGK56S65p2/IOaPkOaKpeOAgicsXG5cdFx0XHRcdFx0XHRcdFx0XHQn44CN6Zi75q2i44CC6Iul5oKo6KqN54K65oKo55qE6Kmy5qyh57eo6Lyv5piv5pyJ5oSP576p55qE77yM6KuL6IezIExJQl90YWxrOueuoeeQhuWToeWRiuekuuadvyDmj5DloLHjgIInXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2FidXNlZmlsdGVyLXdhcm5pbmcnOlxuXHRcdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoW1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+e8lui+keiiq+mYsua7peeUqOi/h+a7pOWZqOinhOWImeKAnCcsICfnt6jovK/ooqvpmLLmv6vnlKjpgY7mv77lmajopo/liYfjgIwnKSxcblx0XHRcdFx0XHRcdFx0ZXJyb3JEYXRhLmFidXNlZmlsdGVyLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J+KAneitpuWRiu+8jOiLpeaCqOS7jeW4jOacm+WBmuWHuuivpee8lui+ke+8jOivt+WwneivlemHjeaWsOaPkOS6pO+8jOagueaNrui/h+a7pOWZqOeahOiuvue9ruaCqOWPr+iDveWPr+S7peS9nOWHuuatpOe8lui+keOAgicsXG5cdFx0XHRcdFx0XHRcdFx0J+OAjeitpuWRiu+8jOiLpeaCqOS7jeW4jOacm+WBmuWHuuipsue3qOi8r++8jOiri+WYl+ippumHjeaWsOaPkOS6pO+8jOagueaTmumBjua/vuWZqOeahOioreWumuaCqOWPr+iDveWPr+S7peS9nOWHuuatpOe3qOi8r+OAgidcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhIHdheSB0byBhdXRvbWF0aWNhbGx5IHJldHJ5IHRoZSBhY3Rpb24gaWYgdGhleSBzbyBjaG9vc2UgLVxuXHRcdFx0XHRcdFx0Ly8gSSBjYW4ndCBzZWUgaG93IHRvIGRvIHRoaXMgd2l0aG91dCBjcmVhdGluZyBhIFVJIGRlcGVuZGVuY3kgb24gTW9yZWJpdHMud2lraS5wYWdlIHRob3VnaCAtLSBUVE9cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3NwYW1ibGFja2xpc3QnOiB7XG5cdFx0XHRcdFx0XHQvLyBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgYmxhY2tsaXN0ZWQsIHdlIG9ubHkgcmV0dXJuIHRoZSBmaXJzdFxuXHRcdFx0XHRcdFx0Y29uc3QgW3NwYW1dID0gZXJyb3JEYXRhLnNwYW1ibGFja2xpc3QubWF0Y2hlcztcblx0XHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+S4jeiDveS/neWtmOmhtemdou+8jOWboFVSTCAnLCAn5LiN6IO95YSy5a2Y6aCB6Z2i77yM5ZugVVJMICcpICtcblx0XHRcdFx0XHRcdFx0XHRzcGFtICtcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJyDlnKjlnoPlnL7pk77mjqXpu5HlkI3ljZXkuK3jgIInLCAnIOWcqOWeg+WcvumAo+e1kOm7keWQjeWWruS4reOAgicpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcihcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfkuI3og73kv53lrZjkv67mlLnvvJonLCAn5LiN6IO95YSy5a2Y5L+u5pS577yaJykgKyBjdHguc2F2ZUFwaS5nZXRFcnJvclRleHQoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjdHguZWRpdE1vZGUgPSAnYWxsJzsgLy8gY2FuY2VsIGFwcGVuZC9wcmVwZW5kL25ld1NlY3Rpb24vcmV2ZXJ0IG1vZGVzXG5cdFx0XHRcdGlmIChjdHgub25TYXZlRmFpbHVyZSkge1xuXHRcdFx0XHRcdGN0eC5vblNhdmVGYWlsdXJlKHRoaXMpOyAvLyBpbnZva2UgY2FsbGJhY2tcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBpc1RleHRSZWRpcmVjdCA9ICh0ZXh0KSA9PiB7XG5cdFx0XHRpZiAoIXRleHQpIHtcblx0XHRcdFx0Ly8gbm8gdGV4dCAtIGNvbnRlbnQgZW1wdHkgb3IgaW5hY2Nlc3NpYmxlIChyZXZkZWxsZWQgb3Igc3VwcHJlc3NlZClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE1vcmViaXRzLmwxMG4ucmVkaXJlY3RUYWdBbGlhc2VzLnNvbWUoKHRhZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFJlZ0V4cChgXlxcXFxzKiR7dGFnfVxcXFxXYCwgJ2knKS50ZXN0KHRleHQpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRjb25zdCBmbkxvb2t1cENyZWF0aW9uU3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4Lmxvb2t1cENyZWF0aW9uQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRpZiAoIWZuQ2hlY2tQYWdlTmFtZShyZXNwb25zZSwgY3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJldiA9IHJlc3BvbnNlLnBhZ2VzWzBdLnJldmlzaW9ucyAmJiByZXNwb25zZS5wYWdlc1swXS5yZXZpc2lvbnNbMF07XG5cdFx0XHRpZiAoIXJldikge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcihcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aXoOazleaJvuWIsCcsICfnhKHms5Xmib7liLAnKSArXG5cdFx0XHRcdFx0XHRjdHgucGFnZU5hbWUgK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfnmoTku7vkvZXkv67orqLniYjmnKwnLCAn55qE5Lu75L2V5L+u6KiC54mI5pysJylcblx0XHRcdFx0KTtcblx0XHRcdFx0Y3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN0eC5sb29rdXBOb25SZWRpcmVjdENyZWF0b3IgfHwgIWlzVGV4dFJlZGlyZWN0KHJldi5jb250ZW50KSkge1xuXHRcdFx0XHRjdHguY3JlYXRvciA9IHJldi51c2VyO1xuXHRcdFx0XHRpZiAoIWN0eC5jcmVhdG9yKSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCfml6Dms5Xojrflj5bpobXpnaLliJvlu7rogIXnmoTlkI3lrZcnLCAn54Sh5rOV5Y+W5b6X6aCB6Z2i5bu656uL6ICF55qE5ZCN5a2XJykpO1xuXHRcdFx0XHRcdGN0eC5vbkxvb2t1cENyZWF0aW9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3R4LnRpbWVzdGFtcCA9IHJldi50aW1lc3RhbXA7XG5cdFx0XHRcdGlmICghY3R4LnRpbWVzdGFtcCkge1xuXHRcdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5peg5rOV6I635Y+W6aG16Z2i5Yib5bu65pe26Ze0JywgJ+eEoeazleWPluW+l+mggemdouW7uueri+aZgumWkycpKTtcblx0XHRcdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvbkZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmluZm8od2luZG93LndnVUxTKCflt7Lojrflj5bpobXpnaLliJvlu7rkv6Hmga8nLCAn5bey5Y+W5b6X6aCB6Z2i5bu656uL6LOH6KiKJykpO1xuXHRcdFx0XHRjdHgub25Mb29rdXBDcmVhdGlvblN1Y2Nlc3ModGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdHgubG9va3VwQ3JlYXRpb25BcGkucXVlcnkucnZsaW1pdCA9IDUwOyAvLyBtb2RpZnkgcHJldmlvdXMgcXVlcnkgdG8gZmV0Y2ggbW9yZSByZXZpc2lvbnNcblx0XHRcdFx0Y3R4Lmxvb2t1cENyZWF0aW9uQXBpLnF1ZXJ5LnRpdGxlcyA9IGN0eC5wYWdlTmFtZTsgLy8gdXBkYXRlIHBhZ2VOYW1lIGlmIHJlZGlyZWN0IHJlc29sdXRpb24gdG9vayBwbGFjZSBpbiBlYXJsaWVyIHF1ZXJ5XG5cdFx0XHRcdGN0eC5sb29rdXBDcmVhdGlvbkFwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+iOt+WPlumhtemdouWIm+W7uuS/oeaBrycsICflj5blvpfpoIHpnaLlu7rnq4vos4foqIonKSxcblx0XHRcdFx0XHRjdHgubG9va3VwQ3JlYXRpb25BcGkucXVlcnksXG5cdFx0XHRcdFx0Zm5Mb29rdXBOb25SZWRpcmVjdENyZWF0b3IsXG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdFx0Y3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGN0eC5sb29rdXBDcmVhdGlvbkFwaS5zZXRQYXJlbnQodGhpcyk7XG5cdFx0XHRcdGN0eC5sb29rdXBDcmVhdGlvbkFwaS5wb3N0KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBmbkxvb2t1cE5vblJlZGlyZWN0Q3JlYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4Lmxvb2t1cENyZWF0aW9uQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRjb25zdCByZXZzID0gcmVzcG9uc2UucGFnZXNbMF0ucmV2aXNpb25zO1xuXHRcdFx0Zm9yIChjb25zdCByZXYgb2YgcmV2cykge1xuXHRcdFx0XHRpZiAoIWlzVGV4dFJlZGlyZWN0KHJldi5jb250ZW50KSkge1xuXHRcdFx0XHRcdGN0eC5jcmVhdG9yID0gcmV2LnVzZXI7XG5cdFx0XHRcdFx0Y3R4LnRpbWVzdGFtcCA9IHJldi50aW1lc3RhbXA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghY3R4LmNyZWF0b3IpIHtcblx0XHRcdFx0Ly8gZmFsbGJhY2sgdG8gZ2l2ZSBmaXJzdCByZXZpc2lvbiBhdXRob3IgaWYgbm8gbm9uLXJlZGlyZWN0IHZlcnNpb24gaW4gdGhlIGZpcnN0IDUwXG5cdFx0XHRcdGN0eC5jcmVhdG9yID0gcmV2c1swXS51c2VyO1xuXHRcdFx0XHRjdHgudGltZXN0YW1wID0gcmV2c1swXS50aW1lc3RhbXA7XG5cdFx0XHRcdGlmICghY3R4LmNyZWF0b3IpIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+aXoOazleiOt+WPlumhtemdouWIm+W7uuiAheeahOWQjeWtlycsICfnhKHms5Xlj5blvpfpoIHpnaLlu7rnq4vogIXnmoTlkI3lrZcnKSk7XG5cdFx0XHRcdFx0Y3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdHgudGltZXN0YW1wKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5peg5rOV6I635Y+W6aG16Z2i5Yib5bu65pe26Ze0JywgJ+eEoeazleWPluW+l+mggemdouW7uueri+aZgumWkycpKTtcblx0XHRcdFx0Y3R4Lm9uTG9va3VwQ3JlYXRpb25GYWlsdXJlKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjdHguc3RhdHVzRWxlbWVudC5pbmZvKHdpbmRvdy53Z1VMUygn5bey6I635Y+W6aG16Z2i5Yib5bu65L+h5oGvJywgJ+W3suWPluW+l+mggemdouW7uueri+izh+ioiicpKTtcblx0XHRcdGN0eC5vbkxvb2t1cENyZWF0aW9uU3VjY2Vzcyh0aGlzKTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIENvbW1vbiBjaGVja3MgZm9yIGFjdGlvbiBtZXRob2RzLiBVc2VkIGZvciBtb3ZlLCB1bmRlbGV0ZSwgZGVsZXRlLFxuXHRcdCAqIHByb3RlY3QuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIC0gVGhlIGFjdGlvbiBiZWluZyBjaGVja2VkLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBvbkZhaWx1cmUgLSBGYWlsdXJlIGNhbGxiYWNrLlxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGNvbnN0IGZuUHJlZmxpZ2h0Q2hlY2tzID0gZnVuY3Rpb24gKGFjdGlvbiwgb25GYWlsdXJlKSB7XG5cdFx0XHQvLyBpZiBhIG5vbi1hZG1pbiB0cmllcyB0byBkbyB0aGlzLCBkb24ndCBib3RoZXJcblx0XHRcdGlmICghTW9yZWJpdHMudXNlcklzU3lzb3AgJiYgYWN0aW9uICE9PSAnbW92ZScpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfml6Dms5Xlr7npobXpnaLov5vooYzigJwnLCAn54Sh5rOV5bCN6aCB6Z2i6YCy6KGM44CMJykgK1xuXHRcdFx0XHRcdFx0YWN0aW9uICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCd5pON5L2c77ya5Y+q5pyJ566h55CG5ZGY5Y+v5Lul6L+b6KGM5q2k5pON5L2cJywgJ+OAjeaTjeS9nO+8muWPquacieeuoeeQhuWToeWPr+S7pemAsuihjOatpOaTjeS9nCcpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdHguZWRpdFN1bW1hcnkpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoYEludGVybmFsIGVycm9yOiAke2FjdGlvbn0gcmVhc29uIG5vdCBzZXQgKHVzZSBzZXRFZGl0U3VtbWFyeSBmdW5jdGlvbikhYCk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7IC8vIGFsbCBPS1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogQ29tbW9uIGNoZWNrcyBmb3IgZm5Qcm9jZXNzIGZ1bmN0aW9ucyAoYGZuUHJvY2Vzc0RlbGV0ZWAsIGBmblByb2Nlc3NNb3ZlYCwgZXRjLlxuXHRcdCAqIFVzZWQgZm9yIG1vdmUsIHVuZGVsZXRlLCBkZWxldGUsIHByb3RlY3QuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIC0gVGhlIGFjdGlvbiBiZWluZyBjaGVja2VkLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBvbkZhaWx1cmUgLSBGYWlsdXJlIGNhbGxiYWNrLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSByZXNwb25zZSAtIFRoZSByZXNwb25zZSBkb2N1bWVudCBmcm9tIHRoZSBBUEkgY2FsbC5cblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0XHQgKi9cblx0XHRjb25zdCBmblByb2Nlc3NDaGVja3MgPSBmdW5jdGlvbiAoYWN0aW9uLCBvbkZhaWx1cmUsIHJlc3BvbnNlKSB7XG5cdFx0XHRjb25zdCBbe21pc3Npbmd9XSA9IHJlc3BvbnNlLnBhZ2VzO1xuXHRcdFx0Ly8gTm8gdW5kZWxldGUgYXMgYW4gZXhpc3RpbmcgcGFnZSBjb3VsZCBoYXZlIGRlbGV0ZWQgcmV2aXNpb25zXG5cdFx0XHRjb25zdCBhY3Rpb25NaXNzaW5nID0gbWlzc2luZyAmJiBbJ2RlbGV0ZScsICdtb3ZlJ10uaW5jbHVkZXMoYWN0aW9uKTtcblx0XHRcdGNvbnN0IHByb3RlY3RNaXNzaW5nID0gYWN0aW9uID09PSAncHJvdGVjdCcgJiYgbWlzc2luZyAmJiAoY3R4LnByb3RlY3RFZGl0IHx8IGN0eC5wcm90ZWN0TW92ZSk7XG5cdFx0XHRjb25zdCBzYWx0TWlzc2luZyA9IGFjdGlvbiA9PT0gJ3Byb3RlY3QnICYmICFtaXNzaW5nICYmIGN0eC5wcm90ZWN0Q3JlYXRlO1xuXHRcdFx0aWYgKGFjdGlvbk1pc3NpbmcgfHwgcHJvdGVjdE1pc3NpbmcgfHwgc2FsdE1pc3NpbmcpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0YCR7XG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+aXoOazleWvuemhtemdoui/m+ihjOKAnCcsICfnhKHms5XlsI3poIHpnaLpgLLooYzjgIwnKSArXG5cdFx0XHRcdFx0XHRhY3Rpb24gK1xuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfigJ3mk43kvZzvvIzlm6DkuLrpobXpnaInLCAn44CN5pON5L2c77yM5Zug54K66aCB6Z2iJykgK1xuXHRcdFx0XHRcdFx0KG1pc3NpbmcgPyAn5bey5LiNJyA6IHdpbmRvdy53Z1VMUygn5bey57uPJywgJ+W3sue2kycpKVxuXHRcdFx0XHRcdH3lrZjlnKhgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRGVsZXRlLCB1bmRlbGV0ZSwgbW92ZVxuXHRcdFx0Ly8gZXh0cmFjdCBwcm90ZWN0aW9uIGluZm9cblx0XHRcdGxldCBlZGl0cHJvdDtcblx0XHRcdGlmIChhY3Rpb24gPT09ICd1bmRlbGV0ZScpIHtcblx0XHRcdFx0ZWRpdHByb3QgPSByZXNwb25zZS5wYWdlc1swXS5wcm90ZWN0aW9uXG5cdFx0XHRcdFx0LmZpbHRlcigocHIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBwci50eXBlID09PSAnY3JlYXRlJyAmJiBwci5sZXZlbCA9PT0gJ3N5c29wJztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZGVsZXRlJyB8fCBhY3Rpb24gPT09ICdtb3ZlJykge1xuXHRcdFx0XHRlZGl0cHJvdCA9IHJlc3BvbnNlLnBhZ2VzWzBdLnByb3RlY3Rpb25cblx0XHRcdFx0XHQuZmlsdGVyKChwcikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHByLnR5cGUgPT09ICdlZGl0JyAmJiBwci5sZXZlbCA9PT0gJ3N5c29wJztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0ZWRpdHByb3QgJiZcblx0XHRcdFx0IWN0eC5zdXBwcmVzc1Byb3RlY3RXYXJuaW5nICYmXG5cdFx0XHRcdCFjb25maXJtKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5oKo5Y2z5bCG5a+55YWo5L+d5oqk6aG16Z2i4oCcJywgJ+aCqOWNs+Wwh+WwjeWFqOS/neitt+mggemdouOAjCcpICtcblx0XHRcdFx0XHRcdGN0eC5wYWdlTmFtZSArXG5cdFx0XHRcdFx0XHQoZWRpdHByb3QuZXhwaXJ5ID09PSAnaW5maW5pdHknXG5cdFx0XHRcdFx0XHRcdD8gd2luZG93LndnVUxTKCfigJ3vvIjmsLjkuYXvvIknLCAn44CN77yI5rC45LmF77yJJylcblx0XHRcdFx0XHRcdFx0OiBgJHtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCd77yI5Yiw5pyf77yaJywgJ+OAje+8iOWIsOacn++8micpICtcblx0XHRcdFx0XHRcdFx0XHRcdG5ldyBNb3JlYml0cy5kYXRlKGVkaXRwcm90LmV4cGlyeSkuY2FsZW5kYXIoJ3V0YycpXG5cdFx0XHRcdFx0XHRcdFx0fSAoVVRDKe+8iWApICtcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn4oCd6L+b6KGM4oCcJywgJ+OAjemAsuihjOOAjCcpICtcblx0XHRcdFx0XHRcdGFjdGlvbiArXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoJ+KAneaTjeS9nCcsICfjgI3mk43kvZwnKSArXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCfjgIJcXG5cXG7ljZXlh7vnoa7lrprku6Xnu6fnu63mk43kvZzvvIzmiJbljZXlh7vlj5bmtojku6Xlj5bmtojmk43kvZzjgIInLFxuXHRcdFx0XHRcdFx0XHQn44CCXFxuXFxu6bue5pOK56K65a6a5Lul57m857qM5pON5L2c77yM5oiW6bue5pOK5Y+W5raI5Lul5Y+W5raI5pON5L2c44CCJ1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCflt7Llj5bmtojlr7nlhajkv53miqTpobXpnaLnmoTmk43kvZzjgIInLCAn5bey5Y+W5raI5bCN5YWo5L+d6K236aCB6Z2i55qE5pON5L2c44CCJykpO1xuXHRcdFx0XHRvbkZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmICghcmVzcG9uc2UudG9rZW5zLmNzcmZ0b2tlbikge1xuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+aXoOazleiOt+WPluS7pOeJjOOAgicsICfnhKHms5Xlj5blvpfmrIrmnZbjgIInKSk7XG5cdFx0XHRcdG9uRmFpbHVyZSh0aGlzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7IC8vIGFsbCBPS1xuXHRcdH07XG5cblx0XHRjb25zdCBmblByb2Nlc3NNb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0bGV0IHBhZ2VUaXRsZTtcblx0XHRcdGxldCB0b2tlbjtcblx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdtb3ZlJykpIHtcblx0XHRcdFx0dG9rZW4gPSBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpO1xuXHRcdFx0XHRwYWdlVGl0bGUgPSBjdHgucGFnZU5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGN0eC5tb3ZlQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRcdGlmICghZm5Qcm9jZXNzQ2hlY2tzKCdtb3ZlJywgY3R4Lm9uTW92ZUZhaWx1cmUsIHJlc3BvbnNlKSkge1xuXHRcdFx0XHRcdHJldHVybjsgLy8gYWJvcnRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRva2VuID0gcmVzcG9uc2UudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHRcdFx0Y29uc3QgW3BhZ2VdID0gcmVzcG9uc2UucGFnZXM7XG5cdFx0XHRcdHBhZ2VUaXRsZSA9IHBhZ2UudGl0bGU7XG5cdFx0XHRcdGN0eC53YXRjaGVkID0gcGFnZS53YXRjaGxpc3RleHBpcnkgfHwgcGFnZS53YXRjaGVkO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcXVlcnkgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ21vdmUnLFxuXHRcdFx0XHRmcm9tOiBwYWdlVGl0bGUsXG5cdFx0XHRcdHRvOiBjdHgubW92ZURlc3RpbmF0aW9uLFxuXHRcdFx0XHR0b2tlbixcblx0XHRcdFx0cmVhc29uOiBjdHguZWRpdFN1bW1hcnksXG5cdFx0XHRcdHdhdGNobGlzdDogY3R4LndhdGNobGlzdE9wdGlvbixcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGN0eC5jaGFuZ2VUYWdzKSB7XG5cdFx0XHRcdHF1ZXJ5LnRhZ3MgPSBjdHguY2hhbmdlVGFncztcblx0XHRcdH1cblx0XHRcdGlmIChmbkFwcGx5V2F0Y2hsaXN0RXhwaXJ5KCkpIHtcblx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ZXhwaXJ5ID0gY3R4LndhdGNobGlzdEV4cGlyeTtcblx0XHRcdH1cblx0XHRcdGlmIChjdHgubW92ZVRhbGtQYWdlKSB7XG5cdFx0XHRcdHF1ZXJ5Lm1vdmV0YWxrID0gJ3RydWUnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN0eC5tb3ZlU3VicGFnZXMpIHtcblx0XHRcdFx0cXVlcnkubW92ZXN1YnBhZ2VzID0gJ3RydWUnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN0eC5tb3ZlU3VwcHJlc3NSZWRpcmVjdCkge1xuXHRcdFx0XHRxdWVyeS5ub3JlZGlyZWN0ID0gJ3RydWUnO1xuXHRcdFx0fVxuXHRcdFx0Y3R4Lm1vdmVQcm9jZXNzQXBpID0gbmV3IE1vcmViaXRzLndpa2kuYXBpKFxuXHRcdFx0XHR3aW5kb3cud2dVTFMoJ+enu+WKqOmhtemdouKApuKApicsICfnp7vli5XpoIHpnaLigKbigKYnKSxcblx0XHRcdFx0cXVlcnksXG5cdFx0XHRcdGN0eC5vbk1vdmVTdWNjZXNzLFxuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0Y3R4Lm9uTW92ZUZhaWx1cmVcblx0XHRcdCk7XG5cdFx0XHRjdHgubW92ZVByb2Nlc3NBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4Lm1vdmVQcm9jZXNzQXBpLnBvc3QoKTtcblx0XHR9O1xuXHRcdGNvbnN0IGZuUHJvY2Vzc1BhdHJvbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdwYXRyb2wnLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdH07XG5cdFx0XHQvLyBEaWRuJ3QgbmVlZCB0byBsb2FkIHRoZSBwYWdlXG5cdFx0XHRpZiAoY3R4LnJjaWQpIHtcblx0XHRcdFx0cXVlcnkucmNpZCA9IGN0eC5yY2lkO1xuXHRcdFx0XHRxdWVyeS50b2tlbiA9IG13LnVzZXIudG9rZW5zLmdldCgncGF0cm9sVG9rZW4nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LnBhdHJvbEFwaS5nZXRSZXNwb25zZSgpLnF1ZXJ5O1xuXHRcdFx0XHQvLyBEb24ndCBwYXRyb2wgaWYgbm90IHVucGF0cm9sbGVkXG5cdFx0XHRcdGlmICghcmVzcG9uc2UucmVjZW50Y2hhbmdlc1swXS51bnBhdHJvbGxlZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBbe2xhc3RyZXZpZH1dID0gcmVzcG9uc2UucGFnZXM7XG5cdFx0XHRcdGlmICghbGFzdHJldmlkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHF1ZXJ5LnJldmlkID0gbGFzdHJldmlkO1xuXHRcdFx0XHRjb25zdCB0b2tlbiA9IHJlc3BvbnNlLnRva2Vucy5jc3JmdG9rZW47XG5cdFx0XHRcdGlmICghdG9rZW4pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cXVlcnkudG9rZW4gPSB0b2tlbjtcblx0XHRcdH1cblx0XHRcdGlmIChjdHguY2hhbmdlVGFncykge1xuXHRcdFx0XHRxdWVyeS50YWdzID0gY3R4LmNoYW5nZVRhZ3M7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwYXRyb2xTdGF0ID0gbmV3IE1vcmViaXRzLnN0YXR1cyh3aW5kb3cud2dVTFMoJ+agh+iusOmhtemdouS4uuW3suW3oeafpScsICfmqJnoqJjpoIHpnaLngrrlt7Llt6Hmn6UnKSk7XG5cdFx0XHRjdHgucGF0cm9sUHJvY2Vzc0FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCflt6Hmn6XpobXpnaLigKbigKYnLCAn5beh5p+l6aCB6Z2i4oCm4oCmJyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRwYXRyb2xTdGF0XG5cdFx0XHQpO1xuXHRcdFx0Y3R4LnBhdHJvbFByb2Nlc3NBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4LnBhdHJvbFByb2Nlc3NBcGkucG9zdCgpO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5Qcm9jZXNzRGVsZXRlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0bGV0IHBhZ2VUaXRsZTtcblx0XHRcdGxldCB0b2tlbjtcblx0XHRcdGlmIChmbkNhblVzZU13VXNlclRva2VuKCdkZWxldGUnKSkge1xuXHRcdFx0XHR0b2tlbiA9IG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJyk7XG5cdFx0XHRcdHBhZ2VUaXRsZSA9IGN0eC5wYWdlTmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LmRlbGV0ZUFwaS5nZXRSZXNwb25zZSgpLnF1ZXJ5O1xuXHRcdFx0XHRpZiAoIWZuUHJvY2Vzc0NoZWNrcygnZGVsZXRlJywgY3R4Lm9uRGVsZXRlRmFpbHVyZSwgcmVzcG9uc2UpKSB7XG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBhYm9ydFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW4gPSByZXNwb25zZS50b2tlbnMuY3NyZnRva2VuO1xuXHRcdFx0XHRjb25zdCBbcGFnZV0gPSByZXNwb25zZS5wYWdlcztcblx0XHRcdFx0cGFnZVRpdGxlID0gcGFnZS50aXRsZTtcblx0XHRcdFx0Y3R4LndhdGNoZWQgPSBwYWdlLndhdGNobGlzdGV4cGlyeSB8fCBwYWdlLndhdGNoZWQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAnZGVsZXRlJyxcblx0XHRcdFx0dGl0bGU6IHBhZ2VUaXRsZSxcblx0XHRcdFx0dG9rZW4sXG5cdFx0XHRcdHJlYXNvbjogY3R4LmVkaXRTdW1tYXJ5LFxuXHRcdFx0XHR3YXRjaGxpc3Q6IGN0eC53YXRjaGxpc3RPcHRpb24sXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0fTtcblx0XHRcdGlmIChjdHguY2hhbmdlVGFncykge1xuXHRcdFx0XHRxdWVyeS50YWdzID0gY3R4LmNoYW5nZVRhZ3M7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZm5BcHBseVdhdGNobGlzdEV4cGlyeSgpKSB7XG5cdFx0XHRcdHF1ZXJ5LndhdGNobGlzdGV4cGlyeSA9IGN0eC53YXRjaGxpc3RFeHBpcnk7XG5cdFx0XHR9XG5cdFx0XHRjdHguZGVsZXRlUHJvY2Vzc0FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCfliKDpmaTpobXpnaLigKbigKYnLCAn5Yiq6Zmk6aCB6Z2i4oCm4oCmJyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRjdHgub25EZWxldGVTdWNjZXNzLFxuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0Zm5Qcm9jZXNzRGVsZXRlRXJyb3Jcblx0XHRcdCk7XG5cdFx0XHRjdHguZGVsZXRlUHJvY2Vzc0FwaS5zZXRQYXJlbnQodGhpcyk7XG5cdFx0XHRjdHguZGVsZXRlUHJvY2Vzc0FwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHQvLyBjYWxsYmFjayBmcm9tIGRlbGV0ZVByb2Nlc3NBcGkucG9zdCgpXG5cdFx0Y29uc3QgZm5Qcm9jZXNzRGVsZXRlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBlcnJvckNvZGUgPSBjdHguZGVsZXRlUHJvY2Vzc0FwaS5nZXRFcnJvckNvZGUoKTtcblx0XHRcdC8vIGNoZWNrIGZvciBcIkRhdGFiYXNlIHF1ZXJ5IGVycm9yXCJcblx0XHRcdGlmIChlcnJvckNvZGUgPT09ICdpbnRlcm5hbF9hcGlfZXJyb3JfREJRdWVyeUVycm9yJyAmJiBjdHgucmV0cmllcysrIDwgY3R4Lm1heFJldHJpZXMpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyh3aW5kb3cud2dVTFMoJ+aVsOaNruW6k+afpeivoumUmeivr++8jOmHjeivlScsICfos4fmlpnluqvmn6XoqaLpjK/oqqTvvIzph43oqaYnKSk7XG5cdFx0XHRcdC0tTW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0OyAvLyBhbGxvdyBmb3Igbm9ybWFsIGNvbXBsZXRpb24gaWYgcmV0cnkgc3VjY2VlZHNcblx0XHRcdFx0Y3R4LmRlbGV0ZVByb2Nlc3NBcGkucG9zdCgpOyAvLyBnaXZlIGl0IGFub3RoZXIgZ28hXG5cdFx0XHR9IGVsc2UgaWYgKGVycm9yQ29kZSA9PT0gJ21pc3Npbmd0aXRsZScpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3Iod2luZG93LndnVUxTKCfkuI3og73liKDpmaTpobXpnaLvvIzlm6Dlhbblt7LkuI3lrZjlnKgnLCAn5LiN6IO95Yiq6Zmk6aCB6Z2i77yM5Zug5YW25bey5LiN5a2Y5ZyoJykpO1xuXHRcdFx0XHRpZiAoY3R4Lm9uRGVsZXRlRmFpbHVyZSkge1xuXHRcdFx0XHRcdGN0eC5vbkRlbGV0ZUZhaWx1cmUuY2FsbCh0aGlzLCBjdHguZGVsZXRlUHJvY2Vzc0FwaSk7IC8vIGludm9rZSBjYWxsYmFja1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGhhcmQgZXJyb3IsIGdpdmUgdXBcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5peg5rOV5Yig6Zmk6aG16Z2i77yaJywgJ+eEoeazleWIqumZpOmggemdou+8micpICsgY3R4LmRlbGV0ZVByb2Nlc3NBcGkuZ2V0RXJyb3JUZXh0KClcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGN0eC5vbkRlbGV0ZUZhaWx1cmUpIHtcblx0XHRcdFx0XHRjdHgub25EZWxldGVGYWlsdXJlLmNhbGwodGhpcywgY3R4LmRlbGV0ZVByb2Nlc3NBcGkpOyAvLyBpbnZva2UgY2FsbGJhY2tcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBmblByb2Nlc3NVbmRlbGV0ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGxldCBwYWdlVGl0bGU7XG5cdFx0XHRsZXQgdG9rZW47XG5cdFx0XHRpZiAoZm5DYW5Vc2VNd1VzZXJUb2tlbigndW5kZWxldGUnKSkge1xuXHRcdFx0XHR0b2tlbiA9IG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJyk7XG5cdFx0XHRcdHBhZ2VUaXRsZSA9IGN0eC5wYWdlTmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LnVuZGVsZXRlQXBpLmdldFJlc3BvbnNlKCkucXVlcnk7XG5cdFx0XHRcdGlmICghZm5Qcm9jZXNzQ2hlY2tzKCd1bmRlbGV0ZScsIGN0eC5vblVuZGVsZXRlRmFpbHVyZSwgcmVzcG9uc2UpKSB7XG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBhYm9ydFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW4gPSByZXNwb25zZS50b2tlbnMuY3NyZnRva2VuO1xuXHRcdFx0XHRjb25zdCBbcGFnZV0gPSByZXNwb25zZS5wYWdlcztcblx0XHRcdFx0cGFnZVRpdGxlID0gcGFnZS50aXRsZTtcblx0XHRcdFx0Y3R4LndhdGNoZWQgPSBwYWdlLndhdGNobGlzdGV4cGlyeSB8fCBwYWdlLndhdGNoZWQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBxdWVyeSA9IHtcblx0XHRcdFx0YWN0aW9uOiAndW5kZWxldGUnLFxuXHRcdFx0XHR0aXRsZTogcGFnZVRpdGxlLFxuXHRcdFx0XHR0b2tlbixcblx0XHRcdFx0cmVhc29uOiBjdHguZWRpdFN1bW1hcnksXG5cdFx0XHRcdHdhdGNobGlzdDogY3R4LndhdGNobGlzdE9wdGlvbixcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGN0eC5jaGFuZ2VUYWdzKSB7XG5cdFx0XHRcdHF1ZXJ5LnRhZ3MgPSBjdHguY2hhbmdlVGFncztcblx0XHRcdH1cblx0XHRcdGlmIChmbkFwcGx5V2F0Y2hsaXN0RXhwaXJ5KCkpIHtcblx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ZXhwaXJ5ID0gY3R4LndhdGNobGlzdEV4cGlyeTtcblx0XHRcdH1cblx0XHRcdGN0eC51bmRlbGV0ZVByb2Nlc3NBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn6L+Y5Y6f6aG16Z2i4oCm4oCmJywgJ+mChOWOn+mggemdouKApuKApicpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0Y3R4Lm9uVW5kZWxldGVTdWNjZXNzLFxuXHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudCxcblx0XHRcdFx0Zm5Qcm9jZXNzVW5kZWxldGVFcnJvclxuXHRcdFx0KTtcblx0XHRcdGN0eC51bmRlbGV0ZVByb2Nlc3NBcGkuc2V0UGFyZW50KHRoaXMpO1xuXHRcdFx0Y3R4LnVuZGVsZXRlUHJvY2Vzc0FwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHQvLyBjYWxsYmFjayBmcm9tIHVuZGVsZXRlUHJvY2Vzc0FwaS5wb3N0KClcblx0XHRjb25zdCBmblByb2Nlc3NVbmRlbGV0ZUVycm9yID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc3QgZXJyb3JDb2RlID0gY3R4LnVuZGVsZXRlUHJvY2Vzc0FwaS5nZXRFcnJvckNvZGUoKTtcblx0XHRcdC8vIGNoZWNrIGZvciBcIkRhdGFiYXNlIHF1ZXJ5IGVycm9yXCJcblx0XHRcdGlmIChlcnJvckNvZGUgPT09ICdpbnRlcm5hbF9hcGlfZXJyb3JfREJRdWVyeUVycm9yJykge1xuXHRcdFx0XHRpZiAoY3R4LnJldHJpZXMrKyA8IGN0eC5tYXhSZXRyaWVzKSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyh3aW5kb3cud2dVTFMoJ+aVsOaNruW6k+afpeivoumUmeivr++8jOmHjeivlScsICfos4fmlpnluqvmn6XoqaLpjK/oqqTvvIzph43oqaYnKSk7XG5cdFx0XHRcdFx0LS1Nb3JlYml0cy53aWtpLm51bWJlck9mQWN0aW9uc0xlZnQ7IC8vIGFsbG93IGZvciBub3JtYWwgY29tcGxldGlvbiBpZiByZXRyeSBzdWNjZWVkc1xuXHRcdFx0XHRcdGN0eC51bmRlbGV0ZVByb2Nlc3NBcGkucG9zdCgpOyAvLyBnaXZlIGl0IGFub3RoZXIgZ28hXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdCfmjIHnu63nmoTmlbDmja7lupPmn6Xor6LplJnor6/vvIzph43mlrDliqDovb3pobXpnaLlubbph43or5UnLFxuXHRcdFx0XHRcdFx0XHQn5oyB57qM55qE6LOH5paZ5bqr5p+l6Kmi6Yyv6Kqk77yM6YeN5paw6LyJ5YWl6aCB6Z2i5Lim6YeN6KmmJ1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKGN0eC5vblVuZGVsZXRlRmFpbHVyZSkge1xuXHRcdFx0XHRcdFx0Y3R4Lm9uVW5kZWxldGVGYWlsdXJlLmNhbGwodGhpcywgY3R4LnVuZGVsZXRlUHJvY2Vzc0FwaSk7IC8vIGludm9rZSBjYWxsYmFja1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChlcnJvckNvZGUgPT09ICdjYW50dW5kZWxldGUnKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKFxuXHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdCfml6Dms5Xov5jljp/liKDpmaTpobXpnaLvvIzlm6DmsqHmnInniYjmnKzkvpvov5jljp/miJblt7Looqvov5jljp8nLFxuXHRcdFx0XHRcdFx0J+eEoeazlemChOWOn+WIqumZpOmggemdou+8jOWboOaykuacieeJiOacrOS+m+mChOWOn+aIluW3suiiq+mChOWOnydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChjdHgub25VbmRlbGV0ZUZhaWx1cmUpIHtcblx0XHRcdFx0XHRjdHgub25VbmRlbGV0ZUZhaWx1cmUuY2FsbCh0aGlzLCBjdHgudW5kZWxldGVQcm9jZXNzQXBpKTsgLy8gaW52b2tlIGNhbGxiYWNrXG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gaGFyZCBlcnJvciwgZ2l2ZSB1cFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuZXJyb3IoXG5cdFx0XHRcdFx0d2luZG93LndnVUxTKCfml6Dms5Xov5jljp/pobXpnaLvvJonLCAn54Sh5rOV6YKE5Y6f6aCB6Z2i77yaJykgKyBjdHgudW5kZWxldGVQcm9jZXNzQXBpLmdldEVycm9yVGV4dCgpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChjdHgub25VbmRlbGV0ZUZhaWx1cmUpIHtcblx0XHRcdFx0XHRjdHgub25VbmRlbGV0ZUZhaWx1cmUuY2FsbCh0aGlzLCBjdHgudW5kZWxldGVQcm9jZXNzQXBpKTsgLy8gaW52b2tlIGNhbGxiYWNrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgZm5Qcm9jZXNzUHJvdGVjdCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LnByb3RlY3RBcGkuZ2V0UmVzcG9uc2UoKS5xdWVyeTtcblx0XHRcdGlmICghZm5Qcm9jZXNzQ2hlY2tzKCdwcm90ZWN0JywgY3R4Lm9uUHJvdGVjdEZhaWx1cmUsIHJlc3BvbnNlKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIGFib3J0XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHRva2VuID0gcmVzcG9uc2UudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHRcdGNvbnN0IFtwYWdlXSA9IHJlc3BvbnNlLnBhZ2VzO1xuXHRcdFx0Y29uc3QgcGFnZVRpdGxlID0gcGFnZS50aXRsZTtcblx0XHRcdGN0eC53YXRjaGVkID0gcGFnZS53YXRjaGxpc3RleHBpcnkgfHwgcGFnZS53YXRjaGVkO1xuXHRcdFx0Ly8gRmV0Y2ggZXhpc3RpbmcgcHJvdGVjdGlvbiBsZXZlbHNcblx0XHRcdGNvbnN0IHBycyA9IHJlc3BvbnNlLnBhZ2VzWzBdLnByb3RlY3Rpb247XG5cdFx0XHRsZXQgZWRpdHByb3Q7XG5cdFx0XHRsZXQgbW92ZXByb3Q7XG5cdFx0XHRsZXQgY3JlYXRlcHJvdDtcblx0XHRcdGZvciAoY29uc3QgcHIgb2YgcHJzKSB7XG5cdFx0XHRcdC8vIEZpbHRlciBvdXQgcHJvdGVjdGlvbiBmcm9tIGNhc2NhZGluZ1xuXHRcdFx0XHRpZiAocHIudHlwZSA9PT0gJ2VkaXQnICYmICFwci5zb3VyY2UpIHtcblx0XHRcdFx0XHRlZGl0cHJvdCA9IHByO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByLnR5cGUgPT09ICdtb3ZlJykge1xuXHRcdFx0XHRcdG1vdmVwcm90ID0gcHI7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHIudHlwZSA9PT0gJ2NyZWF0ZScpIHtcblx0XHRcdFx0XHRjcmVhdGVwcm90ID0gcHI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEZhbGwgYmFjayB0byBjdXJyZW50IGxldmVscyBpZiBub3QgZXhwbGljaXRseSBzZXRcblx0XHRcdGlmICghY3R4LnByb3RlY3RFZGl0ICYmIGVkaXRwcm90KSB7XG5cdFx0XHRcdGN0eC5wcm90ZWN0RWRpdCA9IHtcblx0XHRcdFx0XHRsZXZlbDogZWRpdHByb3QubGV2ZWwsXG5cdFx0XHRcdFx0ZXhwaXJ5OiBlZGl0cHJvdC5leHBpcnksXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN0eC5wcm90ZWN0TW92ZSAmJiBtb3ZlcHJvdCkge1xuXHRcdFx0XHRjdHgucHJvdGVjdE1vdmUgPSB7XG5cdFx0XHRcdFx0bGV2ZWw6IG1vdmVwcm90LmxldmVsLFxuXHRcdFx0XHRcdGV4cGlyeTogbW92ZXByb3QuZXhwaXJ5LFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdHgucHJvdGVjdENyZWF0ZSAmJiBjcmVhdGVwcm90KSB7XG5cdFx0XHRcdGN0eC5wcm90ZWN0Q3JlYXRlID0ge1xuXHRcdFx0XHRcdGxldmVsOiBjcmVhdGVwcm90LmxldmVsLFxuXHRcdFx0XHRcdGV4cGlyeTogY3JlYXRlcHJvdC5leHBpcnksXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHQvLyBEZWZhdWx0IHRvIHByZS1leGlzdGluZyBjYXNjYWRpbmcgcHJvdGVjdGlvbiBpZiB1bmNoYW5nZWQgKHNpbWlsYXIgdG8gYWJvdmUpXG5cdFx0XHRpZiAoY3R4LnByb3RlY3RDYXNjYWRlID09PSBudWxsKSB7XG5cdFx0XHRcdGN0eC5wcm90ZWN0Q2FzY2FkZSA9ICEhcHJzLmZpbHRlcigocHIpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcHIuY2FzY2FkZTtcblx0XHRcdFx0fSkubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0Ly8gV2FybiBpZiBjYXNjYWRpbmcgcHJvdGVjdGlvbiBiZWluZyBhcHBsaWVkIHdpdGggYW4gaW52YWxpZCBwcm90ZWN0aW9uIGxldmVsLFxuXHRcdFx0Ly8gd2hpY2ggZm9yIGVkaXQgcHJvdGVjdGlvbiB3aWxsIGNhdXNlIGNhc2NhZGluZyB0byBiZSBzaWxlbnRseSBzdHJpcHBlZFxuXHRcdFx0aWYgKGN0eC5wcm90ZWN0Q2FzY2FkZSkge1xuXHRcdFx0XHQvLyBPbiBtb3ZlIHByb3RlY3Rpb24sIHRoaXMgaXMgdGVjaG5pY2FsbHkgc3RyaWN0ZXIgdGhhbiB0aGUgTVcgQVBJLFxuXHRcdFx0XHQvLyBidXQgc2VlbXMgcmVhc29uYWJsZSB0byBhdm9pZCBkdW1iIHZhbHVlcyBhbmQgbWlzbGVhZGluZyBsb2cgZW50cmllcyAoVDI2NTYyNilcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghY3R4LnByb3RlY3RFZGl0IHx8XG5cdFx0XHRcdFx0XHRjdHgucHJvdGVjdEVkaXQubGV2ZWwgIT09ICdzeXNvcCcgfHxcblx0XHRcdFx0XHRcdCFjdHgucHJvdGVjdE1vdmUgfHxcblx0XHRcdFx0XHRcdGN0eC5wcm90ZWN0TW92ZS5sZXZlbCAhPT0gJ3N5c29wJykgJiZcblx0XHRcdFx0XHQhY29uZmlybShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn5oKo5bey5a+54oCcJywgJ+aCqOW3suWwjeOAjCcpICtcblx0XHRcdFx0XHRcdFx0Y3R4LnBhZ2VOYW1lICtcblx0XHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfigJ3lkK/nlKjkuobov57plIHkv53miqQnLCAn44CN5ZWf55So5LqG6YCj6Y6W5L+d6K23JykgK1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cud2dVTFMoXG5cdFx0XHRcdFx0XHRcdFx0J++8jOS9huayoeacieiuvue9ruS7heeuoeeQhuWRmOeahOS/neaKpOe6p+WIq+OAglxcblxcbicsXG5cdFx0XHRcdFx0XHRcdFx0J++8jOS9huaykuacieioreWumuWDheeuoeeQhuWToeeahOS/neitt+e0muWIpeOAglxcblxcbidcblx0XHRcdFx0XHRcdFx0KSArXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUyhcblx0XHRcdFx0XHRcdFx0XHQn5Y2V5Ye756Gu6K6k5Lul6Ieq5Yqo6LCD5pW05bm257un57ut6L+e6ZSB5YWo5L+d5oqk77yM5Y2V5Ye75Y+W5raI5Lul6Lez6L+H5q2k5pON5L2cJyxcblx0XHRcdFx0XHRcdFx0XHQn6bue5pOK56K66KqN5Lul6Ieq5YuV6Kq/5pW05Lim57m857qM6YCj6Y6W5YWo5L+d6K2377yM6bue5pOK5Y+W5raI5Lul6Lez6YGO5q2k5pON5L2cJ1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC5lcnJvcih3aW5kb3cud2dVTFMoJ+i/numUgeS/neaKpOW3suWPlua2iOOAgicsICfpgKPpjpbkv53orbflt7Llj5bmtojjgIInKSk7XG5cdFx0XHRcdFx0Y3R4Lm9uUHJvdGVjdEZhaWx1cmUodGhpcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN0eC5wcm90ZWN0RWRpdC5sZXZlbCA9ICdzeXNvcCc7XG5cdFx0XHRcdGN0eC5wcm90ZWN0TW92ZS5sZXZlbCA9ICdzeXNvcCc7XG5cdFx0XHR9XG5cdFx0XHQvLyBCdWlsZCBwcm90ZWN0aW9uIGxldmVscyBhbmQgZXhwaXJ5cyAoZXhwaXJpZXM/KSBmb3IgcXVlcnlcblx0XHRcdGNvbnN0IHByb3RlY3Rpb25zID0gW107XG5cdFx0XHRjb25zdCBleHBpcnlzID0gW107XG5cdFx0XHRpZiAoY3R4LnByb3RlY3RFZGl0KSB7XG5cdFx0XHRcdHByb3RlY3Rpb25zW3Byb3RlY3Rpb25zLmxlbmd0aF0gPSBgZWRpdD0ke2N0eC5wcm90ZWN0RWRpdC5sZXZlbH1gO1xuXHRcdFx0XHRleHBpcnlzW2V4cGlyeXMubGVuZ3RoXSA9IGN0eC5wcm90ZWN0RWRpdC5leHBpcnk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3R4LnByb3RlY3RNb3ZlKSB7XG5cdFx0XHRcdHByb3RlY3Rpb25zW3Byb3RlY3Rpb25zLmxlbmd0aF0gPSBgbW92ZT0ke2N0eC5wcm90ZWN0TW92ZS5sZXZlbH1gO1xuXHRcdFx0XHRleHBpcnlzW2V4cGlyeXMubGVuZ3RoXSA9IGN0eC5wcm90ZWN0TW92ZS5leHBpcnk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3R4LnByb3RlY3RDcmVhdGUpIHtcblx0XHRcdFx0cHJvdGVjdGlvbnNbcHJvdGVjdGlvbnMubGVuZ3RoXSA9IGBjcmVhdGU9JHtjdHgucHJvdGVjdENyZWF0ZS5sZXZlbH1gO1xuXHRcdFx0XHRleHBpcnlzW2V4cGlyeXMubGVuZ3RoXSA9IGN0eC5wcm90ZWN0Q3JlYXRlLmV4cGlyeTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdwcm90ZWN0Jyxcblx0XHRcdFx0dGl0bGU6IHBhZ2VUaXRsZSxcblx0XHRcdFx0dG9rZW4sXG5cdFx0XHRcdHByb3RlY3Rpb25zOiBwcm90ZWN0aW9ucy5qb2luKCd8JyksXG5cdFx0XHRcdGV4cGlyeTogZXhwaXJ5cy5qb2luKCd8JyksXG5cdFx0XHRcdHJlYXNvbjogY3R4LmVkaXRTdW1tYXJ5LFxuXHRcdFx0XHR3YXRjaGxpc3Q6IGN0eC53YXRjaGxpc3RPcHRpb24sXG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0fTtcblx0XHRcdC8vIE9ubHkgc2hvd3MgdXAgaW4gbG9ncywgbm90IHBhZ2UgaGlzdG9yeVxuXHRcdFx0aWYgKGN0eC5jaGFuZ2VUYWdzKSB7XG5cdFx0XHRcdHF1ZXJ5LnRhZ3MgPSBjdHguY2hhbmdlVGFncztcblx0XHRcdH1cblx0XHRcdGlmIChmbkFwcGx5V2F0Y2hsaXN0RXhwaXJ5KCkpIHtcblx0XHRcdFx0cXVlcnkud2F0Y2hsaXN0ZXhwaXJ5ID0gY3R4LndhdGNobGlzdEV4cGlyeTtcblx0XHRcdH1cblx0XHRcdGlmIChjdHgucHJvdGVjdENhc2NhZGUpIHtcblx0XHRcdFx0cXVlcnkuY2FzY2FkZSA9ICd0cnVlJztcblx0XHRcdH1cblx0XHRcdGN0eC5wcm90ZWN0UHJvY2Vzc0FwaSA9IG5ldyBNb3JlYml0cy53aWtpLmFwaShcblx0XHRcdFx0d2luZG93LndnVUxTKCfkv53miqTpobXpnaLigKbigKYnLCAn5L+d6K236aCB6Z2i4oCm4oCmJyksXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRjdHgub25Qcm90ZWN0U3VjY2Vzcyxcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQsXG5cdFx0XHRcdGN0eC5vblByb3RlY3RGYWlsdXJlXG5cdFx0XHQpO1xuXHRcdFx0Y3R4LnByb3RlY3RQcm9jZXNzQXBpLnNldFBhcmVudCh0aGlzKTtcblx0XHRcdGN0eC5wcm90ZWN0UHJvY2Vzc0FwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHRjb25zdCBzbGVlcCA9IChtaWxsaXNlY29uZHMpID0+IHtcblx0XHRcdGNvbnN0IGRlZmVycmVkID0gJC5EZWZlcnJlZCgpO1xuXHRcdFx0c2V0VGltZW91dChkZWZlcnJlZC5yZXNvbHZlLCBtaWxsaXNlY29uZHMpO1xuXHRcdFx0cmV0dXJuIGRlZmVycmVkO1xuXHRcdH07XG5cdH07IC8vIGVuZCBNb3JlYml0cy53aWtpLnBhZ2Vcblx0LyogKioqKioqKioqKioqKioqKiBNb3JlYml0cy53aWtpLnByZXZpZXcgKioqKioqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogVXNlIHRoZSBBUEkgdG8gcGFyc2UgYSBmcmFnbWVudCBvZiB3aWtpdGV4dCBhbmQgcmVuZGVyIGl0IGFzIEhUTUwuXG5cdCAqXG5cdCAqIFRoZSBzdWdnZXN0ZWQgaW1wbGVtZW50YXRpb24gcGF0dGVybiAoaW4ge0BsaW5rIE1vcmViaXRzLnNpbXBsZVdpbmRvd30gYW5kXG5cdCAqIHtAbGluayBNb3JlYml0cy5xdWlja0Zvcm19IHNpdHVhdGlvbnMpIGlzIHRvIGNvbnN0cnVjdCBhXG5cdCAqIGBNb3JlYml0cy53aWtpLnByZXZpZXdgIG9iamVjdCBhZnRlciByZW5kZXJpbmcgYSBgTW9yZWJpdHMucXVpY2tGb3JtYCwgYW5kXG5cdCAqIGJpbmQgdGhlIG9iamVjdCB0byBhbiBhcmJpdHJhcnkgcHJvcGVydHkgb2YgdGhlIGZvcm0gKGUuZy4gfHByZXZpZXdlcnwpLlxuXHQgKiBGb3IgYW4gZXhhbXBsZSwgc2VlIHR3aW5rbGV3YXJuLmpzLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraVxuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcHJldmlld2JveCAtIFRoZSBlbGVtZW50IHRoYXQgd2lsbCBjb250YWluIHRoZSByZW5kZXJlZCBIVE1MLFxuXHQgKiB1c3VhbGx5IGEgPGRpdj4gZWxlbWVudC5cblx0ICovXG5cdE1vcmViaXRzLndpa2kucHJldmlldyA9IGZ1bmN0aW9uIChwcmV2aWV3Ym94KSB7XG5cdFx0dGhpcy5wcmV2aWV3Ym94ID0gcHJldmlld2JveDtcblx0XHQkKHByZXZpZXdib3gpLmFkZENsYXNzKCdtb3JlYml0cy1wcmV2aWV3Ym94JykuaGlkZSgpO1xuXHRcdC8qKlxuXHRcdCAqIERpc3BsYXlzIHRoZSBwcmV2aWV3IGJveCwgYW5kIGJlZ2lucyBhbiBhc3luY2hyb25vdXMgYXR0ZW1wdFxuXHRcdCAqIHRvIHJlbmRlciB0aGUgc3BlY2lmaWVkIHdpa2l0ZXh0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHdpa2l0ZXh0IC0gV2lraXRleHQgdG8gcmVuZGVyOyBtb3N0IHRoaW5ncyBzaG91bGQgd29yaywgaW5jbHVkaW5nIGBzdWJzdDpgIGFuZCBgfn5+fmAuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IFtwYWdlVGl0bGVdIC0gT3B0aW9uYWwgcGFyYW1ldGVyIGZvciB0aGUgcGFnZSB0aGlzIHNob3VsZCBiZSByZW5kZXJlZCBhcyBiZWluZyBvbiwgaWYgb21pdHRlZCBpdCBpcyB0YWtlbiBhcyB0aGUgY3VycmVudCBwYWdlLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbc2VjdGlvblRpdGxlXSAtIElmIHByb3ZpZGVkLCByZW5kZXIgdGhlIHRleHQgYXMgYSBuZXcgc2VjdGlvbiB1c2luZyB0aGlzIGFzIHRoZSB0aXRsZS5cblx0XHQgKiBAcmV0dXJucyB7alF1ZXJ5LnByb21pc2V9XG5cdFx0ICovXG5cdFx0dGhpcy5iZWdpblJlbmRlciA9ICh3aWtpdGV4dCwgcGFnZVRpdGxlLCBzZWN0aW9uVGl0bGUpID0+IHtcblx0XHRcdCQocHJldmlld2JveCkuc2hvdygpO1xuXHRcdFx0Y29uc3Qgc3RhdHVzc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdHByZXZpZXdib3guYXBwZW5kQ2hpbGQoc3RhdHVzc3Bhbik7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuaW5pdChzdGF0dXNzcGFuKTtcblx0XHRcdC8vIOiLpemhtemdouS4jeaYr3dpa2l0ZXh077yI5L6L5aaCSlPjgIFDU1PnrYnvvInvvIzpgqPkuYjmib7kuIDkuKp3aWtpdGV4dOmhtemdouadpemihOiniOOAglxuXHRcdFx0bGV0IHBhZ2VOYW1lID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpO1xuXHRcdFx0aWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZUNvbnRlbnRNb2RlbCcpICE9PSAnd2lraXRleHQnKSB7XG5cdFx0XHRcdHBhZ2VOYW1lID0gYERyYWZ0OiR7cGFnZU5hbWV9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHF1ZXJ5ID0ge1xuXHRcdFx0XHRhY3Rpb246ICdwYXJzZScsXG5cdFx0XHRcdHByb3A6IFsndGV4dCcsICdtb2R1bGVzJ10sXG5cdFx0XHRcdHBzdDogdHJ1ZSxcblx0XHRcdFx0Ly8gUFNUID0gcHJlLXNhdmUgdHJhbnNmb3JtOyB0aGlzIG1ha2VzIHN1YnN0aXR1dGlvbiB3b3JrIHByb3Blcmx5XG5cdFx0XHRcdHByZXZpZXc6IHRydWUsXG5cdFx0XHRcdHRleHQ6IHdpa2l0ZXh0LFxuXHRcdFx0XHR0aXRsZTogcGFnZVRpdGxlIHx8IHBhZ2VOYW1lLFxuXHRcdFx0XHRkaXNhYmxlbGltaXRyZXBvcnQ6IHRydWUsXG5cdFx0XHRcdGRpc2FibGVlZGl0c2VjdGlvbjogdHJ1ZSxcblx0XHRcdFx0dXNlbGFuZzogbXcuY29uZmlnLmdldCgnd2dVc2VyTGFuZ3VhZ2UnKSxcblx0XHRcdFx0Ly8gVXNlIHdnVXNlckxhbmd1YWdlIGZvciBwcmV2aWV3XG5cdFx0XHRcdGZvcm1hdDogJ2pzb24nLFxuXHRcdFx0fTtcblx0XHRcdGlmIChzZWN0aW9uVGl0bGUpIHtcblx0XHRcdFx0cXVlcnkuc2VjdGlvbiA9ICduZXcnO1xuXHRcdFx0XHRxdWVyeS5zZWN0aW9udGl0bGUgPSBzZWN0aW9uVGl0bGU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCByZW5kZXJBcGkgPSBuZXcgTW9yZWJpdHMud2lraS5hcGkoXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5Yqg6L295Lit4oCm4oCmJywgJ+i8ieWFpeS4reKApuKApicpLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0Zm5SZW5kZXJTdWNjZXNzLFxuXHRcdFx0XHRuZXcgTW9yZWJpdHMuc3RhdHVzKHdpbmRvdy53Z1VMUygn6aKE6KeIJywgJ+mgkOimvScpKVxuXHRcdFx0KTtcblx0XHRcdHJlbmRlckFwaS5wb3N0KCk7XG5cdFx0fTtcblx0XHRjb25zdCBmblJlbmRlclN1Y2Nlc3MgPSAoYXBpb2JqKSA9PiB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGFwaW9iai5nZXRSZXNwb25zZSgpO1xuXHRcdFx0Y29uc3QgaHRtbCA9IHJlc3BvbnNlLnBhcnNlLnRleHQ7XG5cdFx0XHRpZiAoIWh0bWwpIHtcblx0XHRcdFx0YXBpb2JqLnN0YXRlbGVtLmVycm9yKHdpbmRvdy53Z1VMUygn5Yqg6L296aKE6KeI5aSx6LSl77yM5oiW5qih5p2/5Li656m6JywgJ+i8ieWFpemgkOimveWkseaVl++8jOaIluaooeadv+eCuuepuicpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cHJldmlld2JveC5pbm5lckhUTUwgPSBodG1sO1xuXHRcdFx0bXcubG9hZGVyLmxvYWQocmVzcG9uc2UucGFyc2UubW9kdWxlc3R5bGVzKTtcblx0XHRcdG13LmxvYWRlci5sb2FkKHJlc3BvbnNlLnBhcnNlLm1vZHVsZXMpO1xuXHRcdFx0Ly8gdGhpcyBtYWtlcyBsaW5rcyBvcGVuIGluIG5ldyB0YWJcblx0XHRcdCQocHJldmlld2JveCkuZmluZCgnYScpLmF0dHIoJ3RhcmdldCcsICdfYmxhbmsnKS5hdHRyKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuXHRcdH07XG5cdFx0LyoqIEhpZGVzIHRoZSBwcmV2aWV3IGJveCBhbmQgY2xlYXJzIGl0LiAqL1xuXHRcdHRoaXMuY2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuXHRcdFx0JChwcmV2aWV3Ym94KS5lbXB0eSgpLmhpZGUoKTtcblx0XHR9O1xuXHR9O1xuXHQvKiAqKioqKioqKioqKioqKioqIE1vcmViaXRzLndpa2l0ZXh0ICoqKioqKioqKioqKioqKiogKi9cblx0LyoqXG5cdCAqIFdpa2l0ZXh0IG1hbmlwdWxhdGlvbi5cblx0ICpcblx0ICogQG5hbWVzcGFjZSBNb3JlYml0cy53aWtpdGV4dFxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICovXG5cdE1vcmViaXRzLndpa2l0ZXh0ID0ge307XG5cdC8qKlxuXHQgKiBHZXQgdGhlIHZhbHVlIG9mIGV2ZXJ5IHBhcmFtZXRlciBmb3VuZCBpbiB0aGUgd2lraXRleHQgb2YgYSBnaXZlbiB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLndpa2l0ZXh0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gV2lraXRleHQgY29udGFpbmluZyBhIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIC0gSW5kZXggbm90aW5nIHdoZXJlIGluIHRoZSB0ZXh0IHRoZSB0ZW1wbGF0ZSBiZWdpbnMuXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IGB7bmFtZTogdGVtcGxhdGVOYW1lLCBwYXJhbWV0ZXJzOiB7a2V5OiB2YWx1ZX19YC5cblx0ICovXG5cdE1vcmViaXRzLndpa2l0ZXh0LnBhcnNlVGVtcGxhdGUgPSAodGV4dCwgc3RhcnQpID0+IHtcblx0XHRzdGFydCB8fD0gMDtcblx0XHRjb25zdCBsZXZlbCA9IFtdOyAvLyBUcmFjayBvZiBob3cgZGVlcCB3ZSBhcmUgKHt7LCB7e3ssIG9yIFtbKVxuXHRcdGxldCBjb3VudCA9IC0xOyAvLyBOdW1iZXIgb2YgcGFyYW1ldGVycyBmb3VuZFxuXHRcdGxldCB1bm5hbWVkID0gMDsgLy8gS2VlcCB0cmFjayBvZiB3aGF0IG51bWJlciBhbiB1bm5hbWVkIHBhcmFtZXRlciBzaG91bGQgcmVjZWl2ZVxuXHRcdGxldCBlcXVhbHMgPSAtMTsgLy8gQWZ0ZXIgZmluZGluZyBcIj1cIiBiZWZvcmUgYSBwYXJhbWV0ZXIsIHRoZSBpbmRleDsgb3RoZXJ3aXNlLCAtMVxuXHRcdGxldCBjdXJyZW50ID0gJyc7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge1xuXHRcdFx0bmFtZTogJycsXG5cdFx0XHRwYXJhbWV0ZXJzOiB7fSxcblx0XHR9O1xuXHRcdGxldCBrZXk7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdC8qKlxuXHRcdCAqIEZ1bmN0aW9uIHRvIGhhbmRsZSBmaW5kaW5nIHBhcmFtZXRlciB2YWx1ZXMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtmaW5hbD1mYWxzZV0gLSBXaGV0aGVyIHRoaXMgaXMgdGhlIGZpbmFsXG5cdFx0ICogcGFyYW1ldGVyIGFuZCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgdHJhaWxpbmcgYH19YC5cblx0XHQgKi9cblx0XHRjb25zdCBmaW5kUGFyYW0gPSAoZmluYWwpID0+IHtcblx0XHRcdC8vIE5vdGhpbmcgZm91bmQgeWV0LCB0aGlzIG11c3QgYmUgdGhlIHRlbXBsYXRlIG5hbWVcblx0XHRcdGlmIChjb3VudCA9PT0gLTEpIHtcblx0XHRcdFx0cmVzdWx0Lm5hbWUgPSBjdXJyZW50LnNsaWNlKDIpLnRyaW0oKTtcblx0XHRcdFx0Kytjb3VudDtcblx0XHRcdH0gZWxzZSBpZiAoZXF1YWxzID09PSAtMSkge1xuXHRcdFx0XHQvLyBJbiBhIHBhcmFtZXRlclxuXHRcdFx0XHQvLyBObyBlcXVhbHMsIHNvIGl0IG11c3QgYmUgdW5uYW1lZDsgbm8gdHJpbSBzaW5jZSB3aGl0ZXNwYWNlIGFsbG93ZWRcblx0XHRcdFx0Y29uc3QgcGFyYW0gPSBmaW5hbCA/IGN1cnJlbnQuc2xpY2UoZXF1YWxzICsgMSwgLTIpIDogY3VycmVudDtcblx0XHRcdFx0aWYgKHBhcmFtKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnBhcmFtZXRlcnNbKyt1bm5hbWVkXSA9IHBhcmFtO1xuXHRcdFx0XHRcdCsrY291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIGZvdW5kIGFuIGVxdWFscywgc28gc2F2ZSB0aGUgcGFyYW1ldGVyIGFzIGtleTogdmFsdWVcblx0XHRcdFx0a2V5ID0gY3VycmVudC5zbGljZSgwLCBNYXRoLm1heCgwLCBlcXVhbHMpKS50cmltKCk7XG5cdFx0XHRcdHZhbHVlID0gZmluYWwgPyBjdXJyZW50LnNsaWNlKGVxdWFscyArIDEsIC0yKS50cmltKCkgOiBjdXJyZW50LnNsaWNlKE1hdGgubWF4KDAsIGVxdWFscyArIDEpKS50cmltKCk7XG5cdFx0XHRcdHJlc3VsdC5wYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0ZXF1YWxzID0gLTE7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCB0ZXh0Lmxlbmd0aDsgKytpKSB7XG5cdFx0XHRjb25zdCB0ZXN0MyA9IHRleHQuc2xpY2UoaSwgaSArIDMpO1xuXHRcdFx0aWYgKHRlc3QzID09PSAne3t7JyB8fCAodGVzdDMgPT09ICd9fX0nICYmIGxldmVsLmF0KC0xKSA9PT0gMykpIHtcblx0XHRcdFx0Y3VycmVudCArPSB0ZXN0Mztcblx0XHRcdFx0aSArPSAyO1xuXHRcdFx0XHRpZiAodGVzdDMgPT09ICd7e3snKSB7XG5cdFx0XHRcdFx0bGV2ZWxbbGV2ZWwubGVuZ3RoXSA9IDM7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGV2ZWwucG9wKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0ZXN0MiA9IHRleHQuc2xpY2UoaSwgaSArIDIpO1xuXHRcdFx0Ly8gRW50ZXJpbmcgYSB0ZW1wbGF0ZSAob3IgbGluaylcblx0XHRcdGlmICh0ZXN0MiA9PT0gJ3t7JyB8fCB0ZXN0MiA9PT0gJ1tbJykge1xuXHRcdFx0XHRjdXJyZW50ICs9IHRlc3QyO1xuXHRcdFx0XHQrK2k7XG5cdFx0XHRcdGlmICh0ZXN0MiA9PT0gJ3t7Jykge1xuXHRcdFx0XHRcdGxldmVsW2xldmVsLmxlbmd0aF0gPSAyO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxldmVsW2xldmVsLmxlbmd0aF0gPSAnd2wnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRWl0aGVyIGxlYXZpbmcgYSBsaW5rIG9yIHRlbXBsYXRlL3BhcnNlciBmdW5jdGlvblxuXHRcdFx0aWYgKCh0ZXN0MiA9PT0gJ319JyAmJiBsZXZlbC5hdCgtMSkgPT09IDIpIHx8ICh0ZXN0MiA9PT0gJ11dJyAmJiBsZXZlbC5hdCgtMSkgPT09ICd3bCcpKSB7XG5cdFx0XHRcdGN1cnJlbnQgKz0gdGVzdDI7XG5cdFx0XHRcdCsraTtcblx0XHRcdFx0bGV2ZWwucG9wKCk7XG5cdFx0XHRcdC8vIEZpbmQgdGhlIGZpbmFsIHBhcmFtZXRlciBpZiB0aGlzIHJlYWxseSBpcyB0aGUgZW5kXG5cdFx0XHRcdGlmICh0ZXN0MiA9PT0gJ319JyAmJiBsZXZlbC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRmaW5kUGFyYW0odHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGV4dC5jaGFyQXQoaSkgPT09ICd8JyAmJiBsZXZlbC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gQW5vdGhlciBwaXBlIGZvdW5kLCB0b3BsZXZlbCwgc28gcGFyYW1ldGVyIGNvbWluZyB1cCFcblx0XHRcdFx0ZmluZFBhcmFtKCk7XG5cdFx0XHRcdGN1cnJlbnQgPSAnJztcblx0XHRcdH0gZWxzZSBpZiAoZXF1YWxzID09PSAtMSAmJiB0ZXh0LmNoYXJBdChpKSA9PT0gJz0nICYmIGxldmVsLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHQvLyBFcXVhbHMgZm91bmQsIHRvcGxldmVsXG5cdFx0XHRcdGVxdWFscyA9IGN1cnJlbnQubGVuZ3RoO1xuXHRcdFx0XHRjdXJyZW50ICs9IHRleHQuY2hhckF0KGkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSnVzdCBhZHZhbmNlIHRoZSBwb3NpdGlvblxuXHRcdFx0XHRjdXJyZW50ICs9IHRleHQuY2hhckF0KGkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXHQvKipcblx0ICogQWRqdXN0IGFuZCBtYW5pcHVsYXRlIHRoZSB3aWtpdGV4dCBvZiBhIHBhZ2UuXG5cdCAqXG5cdCAqIEBjbGFzc1xuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMud2lraXRleHRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBXaWtpdGV4dCB0byBiZSBtYW5pcHVsYXRlZC5cblx0ICovXG5cdE1vcmViaXRzLndpa2l0ZXh0LnBhZ2UgPSBmdW5jdGlvbiAodGV4dCkge1xuXHRcdHRoaXMudGV4dCA9IHRleHQ7XG5cdH07XG5cdE1vcmViaXRzLndpa2l0ZXh0LnBhZ2UucHJvdG90eXBlID0ge1xuXHRcdHRleHQ6ICcnLFxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgbGlua3MgdG8gYGxpbmtfdGFyZ2V0YCBmcm9tIHRoZSBwYWdlIHRleHQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGlua1RhcmdldFxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy53aWtpdGV4dC5wYWdlfVxuXHRcdCAqL1xuXHRcdHJlbW92ZUxpbmsobGlua1RhcmdldCkge1xuXHRcdFx0Y29uc3QgbXdUaXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KGxpbmtUYXJnZXQpO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlSUQgPSBtd1RpdGxlLmdldE5hbWVzcGFjZUlkKCk7XG5cdFx0XHRjb25zdCB0aXRsZSA9IG13VGl0bGUuZ2V0TWFpblRleHQoKTtcblx0XHRcdGxldCBsaW5rUmVnZXhTdHJpbmcgPSAnJztcblx0XHRcdGlmIChuYW1lc3BhY2VJRCAhPT0gMCkge1xuXHRcdFx0XHRsaW5rUmVnZXhTdHJpbmcgPSBgJHtNb3JlYml0cy5uYW1lc3BhY2VSZWdleChuYW1lc3BhY2VJRCl9OmA7XG5cdFx0XHR9XG5cdFx0XHRsaW5rUmVnZXhTdHJpbmcgKz0gTW9yZWJpdHMucGFnZU5hbWVSZWdleCh0aXRsZSk7XG5cdFx0XHQvLyBGb3IgbW9zdCBuYW1lc3BhY2VzLCB1bmxpbmsgYm90aCBbW1VzZXI6VGVzdF1dIGFuZCBbWzpVc2VyOlRlc3RdXVxuXHRcdFx0Ly8gRm9yIGZpbGVzIGFuZCBjYXRlZ29yaWVzLCBvbmx5IHVubGluayBbWzpDYXRlZ29yeTpUZXN0XV0uIERvIG5vdCB1bmxpbmsgW1tDYXRlZ29yeTpUZXN0XV1cblx0XHRcdGNvbnN0IGlzRmlsZU9yQ2F0ZWdvcnkgPSBbNiwgMTRdLmluY2x1ZGVzKG5hbWVzcGFjZUlEKTtcblx0XHRcdGNvbnN0IGNvbG9uID0gaXNGaWxlT3JDYXRlZ29yeSA/ICc6JyA6ICc6Pyc7XG5cdFx0XHRjb25zdCBzaW1wbGVMaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcW1xcXFxbJHtjb2xvbn0oJHtsaW5rUmVnZXhTdHJpbmd9KVxcXFxdXFxcXF1gLCAnZycpO1xuXHRcdFx0Y29uc3QgcGlwZWRMaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcW1xcXFxbJHtjb2xvbn0ke2xpbmtSZWdleFN0cmluZ31cXFxcfCguKz8pXFxcXF1cXFxcXWAsICdnJyk7XG5cdFx0XHR0aGlzLnRleHQgPSB0aGlzLnRleHQucmVwbGFjZShzaW1wbGVMaW5rUmVnZXgsICckMScpLnJlcGxhY2UocGlwZWRMaW5rUmVnZXgsICckMScpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBDb21tZW50cyBvdXQgaW1hZ2VzIGZyb20gcGFnZSB0ZXh0OyBpZiB1c2VkIGluIGEgZ2FsbGVyeSwgZGVsZXRlcyB0aGUgd2hvbGUgbGluZS5cblx0XHQgKiBJZiB1c2VkIGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgKG5vdCBuZWNlc3NhcmlseSB3aXRoIGBGaWxlOmAgcHJlZml4KSwgdGhlIHRlbXBsYXRlIHBhcmFtZXRlciBpcyBjb21tZW50ZWQgb3V0LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGltYWdlIC0gSW1hZ2UgbmFtZSB3aXRob3V0IGBGaWxlOmAgcHJlZml4LlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIFJlYXNvbiB0byBiZSBpbmNsdWRlZCBpbiBjb21tZW50LCBhbG9uZ3NpZGUgdGhlIGNvbW1lbnRlZC1vdXQgaW1hZ2UuXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLndpa2l0ZXh0LnBhZ2V9XG5cdFx0ICovXG5cdFx0Y29tbWVudE91dEltYWdlKGltYWdlLCByZWFzb24pIHtcblx0XHRcdGNvbnN0IHVuYmluZGVyID0gbmV3IE1vcmViaXRzLnVuYmluZGVyKHRoaXMudGV4dCk7XG5cdFx0XHR1bmJpbmRlci51bmJpbmQoJzwhLS0nLCAnLS0+Jyk7XG5cdFx0XHRyZWFzb24gPSByZWFzb24gPyBgJHtyZWFzb259OiBgIDogJyc7XG5cdFx0XHRjb25zdCBpbWFnZVJlZ2V4U3RyaW5nID0gTW9yZWJpdHMucGFnZU5hbWVSZWdleChpbWFnZSk7XG5cdFx0XHQvLyBDaGVjayBmb3Igbm9ybWFsIGltYWdlIGxpbmtzLCBpLmUuIFtbRmlsZTpGb29iYXIucG5nfC4uLl1dXG5cdFx0XHQvLyBXaWxsIGVhdCB0aGUgd2hvbGUgbGlua1xuXHRcdFx0Y29uc3QgbGlua3NSZWdleCA9IG5ldyBSZWdFeHAoXG5cdFx0XHRcdGBcXFxcW1xcXFxbJHtNb3JlYml0cy5uYW1lc3BhY2VSZWdleCg2KX06XFxcXHMqJHtpbWFnZVJlZ2V4U3RyaW5nfVxcXFxzKltcXFxcfCg/OlxcXFxdXFxcXF0pXWBcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBhbGxMaW5rcyA9IE1vcmViaXRzLnN0cmluZy5zcGxpdFdlaWdodGVkQnlLZXlzKHVuYmluZGVyLmNvbnRlbnQsICdbWycsICddXScpO1xuXHRcdFx0Zm9yIChjb25zdCBhbGxMaW5rIG9mIGFsbExpbmtzKSB7XG5cdFx0XHRcdGlmIChsaW5rc1JlZ2V4LnRlc3QoYWxsTGluaykpIHtcblx0XHRcdFx0XHRjb25zdCByZXBsYWNlbWVudCA9IGA8IS0tICR7cmVhc29ufSR7YWxsTGlua30gLS0+YDtcblx0XHRcdFx0XHR1bmJpbmRlci5jb250ZW50ID0gdW5iaW5kZXIuY29udGVudC5yZXBsYWNlKGFsbExpbmssIHJlcGxhY2VtZW50KTtcblx0XHRcdFx0XHQvLyB1bmJpbmQgdGhlIG5ld2x5IGNyZWF0ZWQgY29tbWVudHNcblx0XHRcdFx0XHR1bmJpbmRlci51bmJpbmQoJzwhLS0nLCAnLS0+Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGZvciBnYWxsZXJ5IGltYWdlcywgaS5lLiBpbnN0YW5jZXMgdGhhdCBtdXN0IHN0YXJ0IG9uIGEgbmV3IGxpbmUsXG5cdFx0XHQvLyBldmVudHVhbGx5IHByZWNlZGVkIHdpdGggc29tZSBzcGFjZSwgYW5kIG11c3QgaW5jbHVkZSBGaWxlOiBwcmVmaXhcblx0XHRcdC8vIFdpbGwgZWF0IHRoZSB3aG9sZSBsaW5lLlxuXHRcdFx0Y29uc3QgZ2FsbGVyeUltYWdlUmVnZXggPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRgKF5cXFxccyoke01vcmViaXRzLm5hbWVzcGFjZVJlZ2V4KDYpfTpcXFxccyoke2ltYWdlUmVnZXhTdHJpbmd9XFxcXHMqKD86XFxcXHwuKj8kfCQpKWAsXG5cdFx0XHRcdCdtZydcblx0XHRcdCk7XG5cdFx0XHR1bmJpbmRlci5jb250ZW50ID0gdW5iaW5kZXIuY29udGVudC5yZXBsYWNlKGdhbGxlcnlJbWFnZVJlZ2V4LCBgPCEtLSAke3JlYXNvbn0kMSAtLT5gKTtcblx0XHRcdC8vIHVuYmluZCB0aGUgbmV3bHkgY3JlYXRlZCBjb21tZW50c1xuXHRcdFx0dW5iaW5kZXIudW5iaW5kKCc8IS0tJywgJy0tPicpO1xuXHRcdFx0Ly8gQ2hlY2sgZnJlZSBpbWFnZSB1c2FnZXMsIGZvciBleGFtcGxlIGFzIHRlbXBsYXRlIGFyZ3VtZW50cywgbWlnaHQgaGF2ZSB0aGUgRmlsZTogcHJlZml4IGV4Y2x1ZGVkLCBidXQgbXVzdCBiZSBwcmVjZWRlZCBieSBhbiB8XG5cdFx0XHQvLyBXaWxsIG9ubHkgZWF0IHRoZSBpbWFnZSBuYW1lIGFuZCB0aGUgcHJlY2VkaW5nIGJhciBhbmQgYW4gZXZlbnR1YWwgbmFtZWQgcGFyYW1ldGVyXG5cdFx0XHRjb25zdCBmcmVlSW1hZ2VSZWdleCA9IG5ldyBSZWdFeHAoXG5cdFx0XHRcdGAoXFxcXHxcXFxccyooPzpbXFxcXHdcXFxcc10rXFxcXD0pP1xcXFxzKig/OiR7TW9yZWJpdHMubmFtZXNwYWNlUmVnZXgoNil9OlxcXFxzKik/JHtpbWFnZVJlZ2V4U3RyaW5nfSlgLFxuXHRcdFx0XHQnbWcnXG5cdFx0XHQpO1xuXHRcdFx0dW5iaW5kZXIuY29udGVudCA9IHVuYmluZGVyLmNvbnRlbnQucmVwbGFjZShmcmVlSW1hZ2VSZWdleCwgYDwhLS0gJHtyZWFzb259JDEgLS0+YCk7XG5cdFx0XHQvLyBSZWJpbmQgdGhlIGNvbnRlbnQgbm93LCB3ZSBhcmUgZG9uZSFcblx0XHRcdHRoaXMudGV4dCA9IHVuYmluZGVyLnJlYmluZCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBDb252ZXJ0cyB1c2VzIG9mIFtbRmlsZTpgaW1hZ2VgXV0gdG8gW1tGaWxlOmBpbWFnZWB8YGRhdGFgXV0uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW1hZ2UgLSBJbWFnZSBuYW1lIHdpdGhvdXQgRmlsZTogcHJlZml4LlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGRpc3BsYXkgb3B0aW9ucy5cblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMud2lraXRleHQucGFnZX1cblx0XHQgKi9cblx0XHRhZGRUb0ltYWdlQ29tbWVudChpbWFnZSwgZGF0YSkge1xuXHRcdFx0Y29uc3QgaW1hZ2VSZWdleFN0cmluZyA9IE1vcmViaXRzLnBhZ2VOYW1lUmVnZXgoaW1hZ2UpO1xuXHRcdFx0Y29uc3QgbGlua3NSZWdleCA9IG5ldyBSZWdFeHAoXG5cdFx0XHRcdGBcXFxcW1xcXFxbJHtNb3JlYml0cy5uYW1lc3BhY2VSZWdleCg2KX06XFxcXHMqJHtpbWFnZVJlZ2V4U3RyaW5nfVxcXFxzKltcXFxcfCg/OlxcXFxdXFxcXF0pXWBcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBhbGxMaW5rcyA9IE1vcmViaXRzLnN0cmluZy5zcGxpdFdlaWdodGVkQnlLZXlzKHRoaXMudGV4dCwgJ1tbJywgJ11dJyk7XG5cdFx0XHRmb3IgKGxldCByZXBsYWNlbWVudCBvZiBhbGxMaW5rcykge1xuXHRcdFx0XHRpZiAobGlua3NSZWdleC50ZXN0KHJlcGxhY2VtZW50KSkge1xuXHRcdFx0XHRcdC8vIGp1c3QgcHV0IGl0IGF0IHRoZSBlbmQ/XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5yZXBsYWNlKC9cXF1cXF0kLywgYHwke2RhdGF9XV1gKTtcblx0XHRcdFx0XHR0aGlzLnRleHQgPSB0aGlzLnRleHQucmVwbGFjZShyZXBsYWNlbWVudCwgcmVwbGFjZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBnYWxsZXJ5UmVnZXggPSBuZXcgUmVnRXhwKGBeKFxcXFxzKiR7aW1hZ2VSZWdleFN0cmluZ30uKj8pXFxcXHw/KC4qPykkYCwgJ21nJyk7XG5cdFx0XHRjb25zdCBuZXd0ZXh0ID0gYCQxfCQyICR7ZGF0YX1gO1xuXHRcdFx0dGhpcy50ZXh0ID0gdGhpcy50ZXh0LnJlcGxhY2UoZ2FsbGVyeVJlZ2V4LCBuZXd0ZXh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIGFsbCB0cmFuc2NsdXNpb25zIG9mIGEgdGVtcGxhdGUgZnJvbSBwYWdlIHRleHQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgLSBQYWdlIG5hbWUgd2hvc2UgdHJhbnNjbHVzaW9ucyBhcmUgdG8gYmUgcmVtb3ZlZCxcblx0XHQgKiBpbmNsdWRlIG5hbWVzcGFjZSBwcmVmaXggb25seSBpZiBub3QgaW4gdGVtcGxhdGUgbmFtZXNwYWNlLlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy53aWtpdGV4dC5wYWdlfVxuXHRcdCAqL1xuXHRcdHJlbW92ZVRlbXBsYXRlKHRlbXBsYXRlKSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVJlZ2V4U3RyaW5nID0gTW9yZWJpdHMucGFnZU5hbWVSZWdleCh0ZW1wbGF0ZSk7XG5cdFx0XHRjb25zdCBsaW5rc1JlZ2V4ID0gbmV3IFJlZ0V4cChcblx0XHRcdFx0YFxcXFx7XFxcXHsoPzoke01vcmViaXRzLm5hbWVzcGFjZVJlZ2V4KDEwKX06KT9cXFxccyoke3RlbXBsYXRlUmVnZXhTdHJpbmd9XFxcXHMqW1xcXFx8KD86XFxcXH1cXFxcfSldYFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFsbFRlbXBsYXRlcyA9IE1vcmViaXRzLnN0cmluZy5zcGxpdFdlaWdodGVkQnlLZXlzKHRoaXMudGV4dCwgJ3t7JywgJ319JywgWyd7e3snLCAnfX19J10pO1xuXHRcdFx0Zm9yIChjb25zdCBhbGxUZW1wbGF0ZSBvZiBhbGxUZW1wbGF0ZXMpIHtcblx0XHRcdFx0aWYgKGxpbmtzUmVnZXgudGVzdChhbGxUZW1wbGF0ZSkpIHtcblx0XHRcdFx0XHR0aGlzLnRleHQgPSB0aGlzLnRleHQucmVwbGFjZShhbGxUZW1wbGF0ZSwgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFNtYXJ0bHkgaW5zZXJ0IGEgdGFnIGF0b3AgcGFnZSB0ZXh0IGJ1dCBhZnRlciBzcGVjaWZpZWQgdGVtcGxhdGVzLFxuXHRcdCAqIHN1Y2ggYXMgaGF0bm90ZXMsIHNob3J0IGRlc2NyaXB0aW9uLCBvciBkZWxldGlvbiBhbmQgcHJvdGVjdGlvbiB0ZW1wbGF0ZXMuXG5cdFx0ICogTm90YWJseSwgZG9lcyAqbm90KiBpbnNlcnQgYSBuZXdsaW5lIGFmdGVyIHRoZSB0YWcuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHRhZyB0byBiZSBpbnNlcnRlZC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcmVnZXggLSBUZW1wbGF0ZXMgYWZ0ZXIgd2hpY2ggdG8gaW5zZXJ0IHRhZyxcblx0XHQgKiBnaXZlbiBhcyBlaXRoZXIgYXMgYSAocmVnZXgtdmFsaWQpIHN0cmluZyBvciBhbiBhcnJheSB0byBiZSBqb2luZWQgYnkgcGlwZXMuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFncz1pXSAtIFJlZ2V4IGZsYWdzIHRvIGFwcGx5LiAgYCcnYCB0byBwcm92aWRlIG5vIGZsYWdzO1xuXHRcdCAqIG90aGVyIGZhbHNleSB2YWx1ZXMgd2lsbCBkZWZhdWx0IHRvIGBpYC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3ByZVJlZ2V4XSAtIE9wdGlvbmFsIHJlZ2V4IHN0cmluZyBvciBhcnJheSB0byBtYXRjaFxuXHRcdCAqIGJlZm9yZSBhbnkgdGVtcGxhdGUgbWF0Y2hlcyAoaS5lLiBiZWZvcmUgYHt7YCksIHN1Y2ggYXMgaHRtbCBjb21tZW50cy5cblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMud2lraXRleHQucGFnZX1cblx0XHQgKi9cblx0XHRpbnNlcnRBZnRlclRlbXBsYXRlcyh0YWcsIHJlZ2V4LCBmbGFncywgcHJlUmVnZXgpIHtcblx0XHRcdGlmICh0YWcgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0YWcgcHJvdmlkZWQnKTtcblx0XHRcdH1cblx0XHRcdC8vIC5sZW5ndGggaXMgb25seSBhIHByb3BlcnR5IG9mIHN0cmluZ3MgYW5kIGFycmF5cyBzbyB3ZVxuXHRcdFx0Ly8gc2hvdWxkbid0IG5lZWQgdG8gY2hlY2sgdHlwZVxuXHRcdFx0aWYgKHJlZ2V4ID09PSB1bmRlZmluZWQgfHwgIXJlZ2V4Lmxlbmd0aCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZ2V4IHByb3ZpZGVkJyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVnZXgpKSB7XG5cdFx0XHRcdHJlZ2V4ID0gcmVnZXguam9pbignfCcpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBmbGFncyAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZmxhZ3MgPSAnaSc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXByZVJlZ2V4IHx8ICFwcmVSZWdleC5sZW5ndGgpIHtcblx0XHRcdFx0cHJlUmVnZXggPSAnJztcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwcmVSZWdleCkpIHtcblx0XHRcdFx0cHJlUmVnZXggPSBwcmVSZWdleC5qb2luKCd8Jyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBSZWdleCBpcyBleHRyYSBjb21wbGljYXRlZCB0byBhbGxvdyBmb3IgdGVtcGxhdGVzIHdpdGhcblx0XHRcdC8vIHBhcmFtZXRlcnMgYW5kIHRvIGhhbmRsZSB3aGl0ZXNwYWNlIHByb3Blcmx5XG5cdFx0XHR0aGlzLnRleHQgPSB0aGlzLnRleHQucmVwbGFjZShcblx0XHRcdFx0bmV3IFJlZ0V4cChcblx0XHRcdFx0XHQvLyBsZWFkaW5nIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBjYXB0dXJlIHRlbXBsYXRlKHMpXG5cdFx0XHRcdFx0Ly8gUHJlLXRlbXBsYXRlIHJlZ2V4LCBzdWNoIGFzIGxlYWRpbmcgaHRtbCBjb21tZW50c1xuXHRcdFx0XHRcdC8vIGJlZ2luIHRlbXBsYXRlIGZvcm1hdFxuXHRcdFx0XHRcdC8vIFRlbXBsYXRlIHJlZ2V4XG5cdFx0XHRcdFx0Ly8gZW5kIG1haW4gdGVtcGxhdGUgbmFtZSwgb3B0aW9uYWxseSB3aXRoIGEgbnVtYmVyXG5cdFx0XHRcdFx0Ly8gUHJvYmFibHkgcmVtb3ZlIHRoZSAoPzopIHRob3VnaFxuXHRcdFx0XHRcdC8vIHRlbXBsYXRlIHBhcmFtZXRlcnNcblx0XHRcdFx0XHQvLyBlbmQgdGVtcGxhdGUgZm9ybWF0XG5cdFx0XHRcdFx0Ly8gZW5kIGNhcHR1cmVcblx0XHRcdFx0XHQvLyB0cmFpbGluZyB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0YF5cXFxccyooPzooKD86XFxcXHMqJHtcblx0XHRcdFx0XHRcdC8vIFByZS10ZW1wbGF0ZSByZWdleCwgc3VjaCBhcyBsZWFkaW5nIGh0bWwgY29tbWVudHNcblx0XHRcdFx0XHRcdHByZVJlZ2V4XG5cdFx0XHRcdFx0fXxcXFxce1xcXFx7XFxcXHMqKD86JHtcblx0XHRcdFx0XHRcdC8vIFRlbXBsYXRlIHJlZ2V4XG5cdFx0XHRcdFx0XHRyZWdleFxuXHRcdFx0XHRcdH0pXFxcXGQqXFxcXHMqKFxcXFx8KD86XFxcXHtcXFxce1tee31dKlxcXFx9XFxcXH18W157fV0pKik/XFxcXH1cXFxcfSkrKD86XFxcXHMqXFxcXG4pPylcXFxccyopP2AsXG5cdFx0XHRcdFx0ZmxhZ3Ncblx0XHRcdFx0KSxcblx0XHRcdFx0YCQxJHt0YWd9YFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogR2V0IHRoZSBtYW5pcHVsYXRlZCB3aWtpdGV4dC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0Z2V0VGV4dCgpIHtcblx0XHRcdHJldHVybiB0aGlzLnRleHQ7XG5cdFx0fSxcblx0fTtcblx0LyogKioqKioqKioqKiogTW9yZWJpdHMudXNlcnNwYWNlTG9nZ2VyICoqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogSGFuZGxlcyBsb2dnaW5nIGFjdGlvbnMgdG8gYSB1c2Vyc3BhY2UgbG9nLlxuXHQgKiBVc2VkIGluIENTRCwgUFJPRCwgYW5kIFhGRC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzXG5cdCAqIEBjbGFzc1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gbG9nUGFnZU5hbWUgLSBUaXRsZSBvZiB0aGUgc3VicGFnZSBvZiB0aGUgY3VycmVudCB1c2VyJ3MgbG9nLlxuXHQgKi9cblx0TW9yZWJpdHMudXNlcnNwYWNlTG9nZ2VyID0gZnVuY3Rpb24gKGxvZ1BhZ2VOYW1lKSB7XG5cdFx0aWYgKCFsb2dQYWdlTmFtZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdubyBsb2cgcGFnZSBuYW1lIHNwZWNpZmllZCcpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBUaGUgdGV4dCB0byBwcmVmaXggdGhlIGxvZyB3aXRoIHVwb24gY3JlYXRpb24sIGRlZmF1bHRzIHRvIGVtcHR5LlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKi9cblx0XHR0aGlzLmluaXRpYWxUZXh0ID0gJyc7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGhlYWRlciBsZXZlbCB0byB1c2UgZm9yIG1vbnRocywgZGVmYXVsdHMgdG8gMyAoYD09PWApLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKi9cblx0XHR0aGlzLmhlYWRlckxldmVsID0gMztcblx0XHR0aGlzLmNoYW5nZVRhZ3MgPSAnJztcblx0XHQvKipcblx0XHQgKiBMb2cgdGhlIGVudHJ5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxvZ1RleHQgLSBEb2Vzbid0IGluY2x1ZGUgbGVhZGluZyBgI2Agb3IgYCpgLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdW1tYXJ5VGV4dCAtIEVkaXQgc3VtbWFyeS5cblx0XHQgKiBAcmV0dXJucyB7SlF1ZXJ5LlByb21pc2V9XG5cdFx0ICovXG5cdFx0dGhpcy5sb2cgPSBmdW5jdGlvbiAobG9nVGV4dCwgc3VtbWFyeVRleHQpIHtcblx0XHRcdGNvbnN0IGRlZiA9ICQuRGVmZXJyZWQoKTtcblx0XHRcdGlmICghbG9nVGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gZGVmLnJlamVjdCgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcGFnZSA9IG5ldyBNb3JlYml0cy53aWtpLnBhZ2UoXG5cdFx0XHRcdGBVc2VyOiR7bXcuY29uZmlnLmdldCgnd2dVc2VyTmFtZScpfS8ke2xvZ1BhZ2VOYW1lfWAsXG5cdFx0XHRcdHdpbmRvdy53Z1VMUygn5bCG6aG555uu5Yqg5YWl5Yiw55So5oi356m66Ze05pel5b+XJywgJ+Wwh+mgheebruWKoOWFpeWIsOS9v+eUqOiAheepuumWk+aXpeiqjCcpXG5cdFx0XHQpOyAvLyBtYWtlIHRoaXMgJy4uLiB0byAnICsgbG9nUGFnZU5hbWUgP1xuXHRcdFx0cGFnZS5sb2FkKChwYWdlb2JqKSA9PiB7XG5cdFx0XHRcdC8vIGFkZCBibHVyYiBpZiBsb2cgcGFnZSBkb2Vzbid0IGV4aXN0IG9yIGlzIGJsYW5rXG5cdFx0XHRcdGxldCB0ZXh0ID0gcGFnZW9iai5nZXRQYWdlVGV4dCgpIHx8IHRoaXMuaW5pdGlhbFRleHQ7XG5cdFx0XHRcdC8vIGNyZWF0ZSBtb250aGx5IGhlYWRlciBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHlcblx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBNb3JlYml0cy5kYXRlKHBhZ2VvYmouZ2V0TG9hZFRpbWUoKSk7XG5cdFx0XHRcdGlmICghZGF0ZS5tb250aEhlYWRlclJlZ2V4KCkuZXhlYyh0ZXh0KSkge1xuXHRcdFx0XHRcdHRleHQgKz0gYFxcblxcbiR7ZGF0ZS5tb250aEhlYWRlcih0aGlzLmhlYWRlckxldmVsKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhZ2VvYmouc2V0UGFnZVRleHQoYCR7dGV4dH1cXG4ke2xvZ1RleHR9YCk7XG5cdFx0XHRcdHBhZ2VvYmouc2V0RWRpdFN1bW1hcnkoc3VtbWFyeVRleHQpO1xuXHRcdFx0XHRwYWdlb2JqLnNldENoYW5nZVRhZ3ModGhpcy5jaGFuZ2VUYWdzKTtcblx0XHRcdFx0cGFnZW9iai5zZXRDcmVhdGVPcHRpb24oJ3JlY3JlYXRlJyk7XG5cdFx0XHRcdHBhZ2VvYmouc2F2ZShkZWYucmVzb2x2ZSwgZGVmLnJlamVjdCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBkZWY7XG5cdFx0fTtcblx0fTtcblx0LyogKioqKioqKioqKioqKioqKiBNb3JlYml0cy5zdGF0dXMgKioqKioqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogQ3JlYXRlIGFuZCBzaG93IHN0YXR1cyBtZXNzYWdlcyBvZiB2YXJ5aW5nIHVyZ2VuY3kuXG5cdCAqIHtAbGluayBNb3JlYml0cy5zdGF0dXMuaW5pdHxNb3JlYml0cy5zdGF0dXMuaW5pdCgpfSBtdXN0IGJlIGNhbGxlZCBiZWZvcmVcblx0ICogYW55IHN0YXR1cyBvYmplY3QgaXMgY3JlYXRlZCwgb3RoZXJ3aXNlIHRob3NlIHN0YXR1c2VzIHdvbid0IGJlIHZpc2libGUuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKiBAY2xhc3Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IGJlZm9yZSB0aGUgdGhlIGNvbG9uIGA6YC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXQgLSBUZXh0IGFmdGVyIHRoZSBjb2xvbiBgOmAuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZT1zdGF0dXNdIC0gRGV0ZXJtaW5lIHRoZSBmb250IGNvbG9yIG9mIHRoZSBzdGF0dXNcblx0ICogbGluZSwgYWxsb3dhYmxlIHZhbHVlcyBhcmU6IGBzdGF0dXNgIChibHVlKSwgYGluZm9gIChncmVlbiksIGB3YXJuYCAocmVkKSxcblx0ICogb3IgYGVycm9yYCAoYm9sZCByZWQpLlxuXHQgKi9cblx0TW9yZWJpdHMuc3RhdHVzID0gZnVuY3Rpb24gKHRleHQsIHN0YXQsIHR5cGUpIHtcblx0XHR0aGlzLnRleHRSYXcgPSB0ZXh0O1xuXHRcdHRoaXMudGV4dCA9IE1vcmViaXRzLmNyZWF0ZUh0bWwodGV4dCk7XG5cdFx0dGhpcy50eXBlID0gdHlwZSB8fCAnc3RhdHVzJztcblx0XHR0aGlzLmdlbmVyYXRlKCk7XG5cdFx0aWYgKHN0YXQpIHtcblx0XHRcdHRoaXMudXBkYXRlKHN0YXQsIHR5cGUpO1xuXHRcdH1cblx0fTtcblx0LyoqXG5cdCAqIFNwZWNpZnkgYW4gYXJlYSBmb3Igc3RhdHVzIG1lc3NhZ2UgZWxlbWVudHMgdG8gYmUgYWRkZWQgdG8uXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdCAtIFVzdWFsbHkgYSBkaXYgZWxlbWVudC5cblx0ICogQHRocm93cyBJZiBgcm9vdGAgaXMgbm90IGFuIGBIVE1MRWxlbWVudGAuXG5cdCAqL1xuXHRNb3JlYml0cy5zdGF0dXMuaW5pdCA9IChyb290KSA9PiB7XG5cdFx0aWYgKCEocm9vdCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIEVsZW1lbnQnKTtcblx0XHR9XG5cdFx0d2hpbGUgKHJvb3QuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRyb290LnJlbW92ZUNoaWxkKHJvb3QuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXHRcdE1vcmViaXRzLnN0YXR1cy5yb290ID0gcm9vdDtcblx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3JFdmVudCA9IG51bGw7XG5cdH07XG5cdE1vcmViaXRzLnN0YXR1cy5yb290ID0gbnVsbDtcblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZXJyb3IuXG5cdCAqIEB0aHJvd3MgV2hlbiBgaGFuZGxlcmAgaXMgbm90IGEgZnVuY3Rpb24uXG5cdCAqL1xuXHRNb3JlYml0cy5zdGF0dXMub25FcnJvciA9IChoYW5kbGVyKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3JFdmVudCA9IGhhbmRsZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ01vcmViaXRzLnN0YXR1cy5vbkVycm9yOiBoYW5kbGVyIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHR9O1xuXHRNb3JlYml0cy5zdGF0dXMucHJvdG90eXBlID0ge1xuXHRcdHN0YXQ6IG51bGwsXG5cdFx0c3RhdFJhdzogbnVsbCxcblx0XHR0ZXh0OiBudWxsLFxuXHRcdHRleHRSYXc6IG51bGwsXG5cdFx0dHlwZTogJ3N0YXR1cycsXG5cdFx0dGFyZ2V0OiBudWxsLFxuXHRcdG5vZGU6IG51bGwsXG5cdFx0bGlua2VkOiBmYWxzZSxcblx0XHQvKiogQWRkIHRoZSBzdGF0dXMgZWxlbWVudCBub2RlIHRvIHRoZSBET00uICovXG5cdFx0bGluaygpIHtcblx0XHRcdGlmICghdGhpcy5saW5rZWQgJiYgTW9yZWJpdHMuc3RhdHVzLnJvb3QpIHtcblx0XHRcdFx0TW9yZWJpdHMuc3RhdHVzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKTtcblx0XHRcdFx0dGhpcy5saW5rZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqIFJlbW92ZSB0aGUgc3RhdHVzIGVsZW1lbnQgbm9kZSBmcm9tIHRoZSBET00uICovXG5cdFx0dW5saW5rKCkge1xuXHRcdFx0aWYgKHRoaXMubGlua2VkKSB7XG5cdFx0XHRcdE1vcmViaXRzLnN0YXR1cy5yb290LnJlbW92ZUNoaWxkKHRoaXMubm9kZSk7XG5cdFx0XHRcdHRoaXMubGlua2VkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBVcGRhdGUgdGhlIHN0YXR1cy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXMgLSBQYXJ0IG9mIHN0YXR1cyBtZXNzYWdlIGFmdGVyIGNvbG9uLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gJ3N0YXR1cycgKGJsdWUpLCAnaW5mbycgKGdyZWVuKSwgJ3dhcm4nXG5cdFx0ICogKHJlZCksIG9yICdlcnJvcicgKGJvbGQgcmVkKS5cblx0XHQgKi9cblx0XHR1cGRhdGUoc3RhdHVzLCB0eXBlKSB7XG5cdFx0XHR0aGlzLnN0YXRSYXcgPSBzdGF0dXM7XG5cdFx0XHR0aGlzLnN0YXQgPSBNb3JlYml0cy5jcmVhdGVIdG1sKHN0YXR1cyk7XG5cdFx0XHRpZiAodHlwZSkge1xuXHRcdFx0XHR0aGlzLnR5cGUgPSB0eXBlO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuXHRcdFx0XHRcdC8vIGhhY2sgdG8gZm9yY2UgdGhlIHBhZ2Ugbm90IHRvIHJlbG9hZCB3aGVuIGFuIGVycm9yIGlzIG91dHB1dCAtIHNlZSBhbHNvIE1vcmViaXRzLnN0YXR1cygpIGFib3ZlXG5cdFx0XHRcdFx0TW9yZWJpdHMud2lraS5udW1iZXJPZkFjdGlvbnNMZWZ0ID0gMTAwMDtcblx0XHRcdFx0XHQvLyBjYWxsIGVycm9yIGNhbGxiYWNrXG5cdFx0XHRcdFx0aWYgKE1vcmViaXRzLnN0YXR1cy5lcnJvckV2ZW50KSB7XG5cdFx0XHRcdFx0XHRNb3JlYml0cy5zdGF0dXMuZXJyb3JFdmVudCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBhbHNvIGxvZyBlcnJvciBtZXNzYWdlcyBpbiB0aGUgYnJvd3NlciBjb25zb2xlXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihgW01vcmViaXRzXSAke3RoaXMudGV4dFJhd306ICR7dGhpcy5zdGF0UmF3fWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdH0sXG5cdFx0LyoqIFByb2R1Y2UgdGhlIGh0bWwgZm9yIGZpcnN0IHBhcnQgb2YgdGhlIHN0YXR1cyBtZXNzYWdlLiAqL1xuXHRcdGdlbmVyYXRlKCkge1xuXHRcdFx0dGhpcy5ub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHR0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKS5hcHBlbmRDaGlsZCh0aGlzLnRleHQpO1xuXHRcdFx0dGhpcy5ub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJzogJykpO1xuXHRcdFx0dGhpcy50YXJnZXQgPSB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKTtcblx0XHRcdHRoaXMudGFyZ2V0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7IC8vIGR1bW15IG5vZGVcblx0XHR9LFxuXG5cdFx0LyoqIENvbXBsZXRlIHRoZSBodG1sLCBmb3IgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBzdGF0dXMgbWVzc2FnZS4gKi9cblx0XHRyZW5kZXIoKSB7XG5cdFx0XHR0aGlzLm5vZGUuY2xhc3NOYW1lID0gYG1vcmViaXRzX3N0YXR1c18ke3RoaXMudHlwZX1gO1xuXHRcdFx0d2hpbGUgKHRoaXMudGFyZ2V0Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHR0aGlzLnRhcmdldC5yZW1vdmVDaGlsZCh0aGlzLnRhcmdldC5maXJzdENoaWxkKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudGFyZ2V0LmFwcGVuZENoaWxkKHRoaXMuc3RhdCk7XG5cdFx0XHR0aGlzLmxpbmsoKTtcblx0XHR9LFxuXHRcdHN0YXR1cyhzdGF0dXMpIHtcblx0XHRcdHRoaXMudXBkYXRlKHN0YXR1cywgJ3N0YXR1cycpO1xuXHRcdH0sXG5cdFx0aW5mbyhzdGF0dXMpIHtcblx0XHRcdHRoaXMudXBkYXRlKHN0YXR1cywgJ2luZm8nKTtcblx0XHR9LFxuXHRcdHdhcm4oc3RhdHVzKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZShzdGF0dXMsICd3YXJuJyk7XG5cdFx0fSxcblx0XHRlcnJvcihzdGF0dXMpIHtcblx0XHRcdHRoaXMudXBkYXRlKHN0YXR1cywgJ2Vycm9yJyk7XG5cdFx0fSxcblx0fTtcblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBCZWZvcmUgY29sb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1cyAtIEFmdGVyIGNvbG9uXG5cdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zdGF0dXN9IC0gYHN0YXR1c2AtdHlwZSAoYmx1ZSlcblx0ICovXG5cdE1vcmViaXRzLnN0YXR1cy5zdGF0dXMgPSAodGV4dCwgc3RhdHVzKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb3JlYml0cy5zdGF0dXModGV4dCwgc3RhdHVzKTtcblx0fTtcblx0LyoqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBCZWZvcmUgY29sb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1cyAtIEFmdGVyIGNvbG9uXG5cdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zdGF0dXN9IC0gYGluZm9gLXR5cGUgKGdyZWVuKVxuXHQgKi9cblx0TW9yZWJpdHMuc3RhdHVzLmluZm8gPSAodGV4dCwgc3RhdHVzKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb3JlYml0cy5zdGF0dXModGV4dCwgc3RhdHVzLCAnaW5mbycpO1xuXHR9O1xuXHQvKipcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnN0YXR1c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEJlZm9yZSBjb2xvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzIC0gQWZ0ZXIgY29sb25cblx0ICogQHJldHVybnMge01vcmViaXRzLnN0YXR1c30gLSBgd2FybmAtdHlwZSAocmVkKVxuXHQgKi9cblx0TW9yZWJpdHMuc3RhdHVzLndhcm4gPSAodGV4dCwgc3RhdHVzKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb3JlYml0cy5zdGF0dXModGV4dCwgc3RhdHVzLCAnd2FybicpO1xuXHR9O1xuXHQvKipcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnN0YXR1c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEJlZm9yZSBjb2xvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzIC0gQWZ0ZXIgY29sb25cblx0ICogQHJldHVybnMge01vcmViaXRzLnN0YXR1c30gLSBgZXJyb3JgLXR5cGUgKGJvbGQgcmVkKVxuXHQgKi9cblx0TW9yZWJpdHMuc3RhdHVzLmVycm9yID0gKHRleHQsIHN0YXR1cykgPT4ge1xuXHRcdHJldHVybiBuZXcgTW9yZWJpdHMuc3RhdHVzKHRleHQsIHN0YXR1cywgJ2Vycm9yJyk7XG5cdH07XG5cdC8qKlxuXHQgKiBGb3IgdGhlIGFjdGlvbiBjb21wbGV0ZSBtZXNzYWdlIGF0IHRoZSBlbmQsIGNyZWF0ZSBhIHN0YXR1cyBsaW5lIHdpdGhvdXRcblx0ICogYSBjb2xvbiBzZXBhcmF0b3IuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0cy5zdGF0dXNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICovXG5cdE1vcmViaXRzLnN0YXR1cy5hY3Rpb25Db21wbGV0ZWQgPSAodGV4dCkgPT4ge1xuXHRcdGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2InKSkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuXHRcdG5vZGUuY2xhc3NOYW1lID0gJ21vcmViaXRzX3N0YXR1c19pbmZvIG1vcmViaXRzX2FjdGlvbl9jb21wbGV0ZSc7XG5cdFx0aWYgKE1vcmViaXRzLnN0YXR1cy5yb290KSB7XG5cdFx0XHRNb3JlYml0cy5zdGF0dXMucm9vdC5hcHBlbmRDaGlsZChub2RlKTtcblx0XHR9XG5cdH07XG5cdC8qKlxuXHQgKiBEaXNwbGF5IHRoZSB1c2VyJ3MgcmF0aW9uYWxlLCBjb21tZW50cywgZXRjLiBCYWNrIHRvIHRoZW0gYWZ0ZXIgYSBmYWlsdXJlLFxuXHQgKiBzbyB0aGF0IHRoZXkgbWF5IHJlLXVzZSBpdC5cblx0ICpcblx0ICogQG1lbWJlcm9mIE1vcmViaXRzLnN0YXR1c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29tbWVudHNcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICovXG5cdE1vcmViaXRzLnN0YXR1cy5wcmludFVzZXJUZXh0ID0gKGNvbW1lbnRzLCBtZXNzYWdlKSA9PiB7XG5cdFx0Y29uc3QgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcblx0XHRwLmlubmVySFRNTCA9IG1lc3NhZ2U7XG5cdFx0Y29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0ZGl2LmNsYXNzTmFtZSA9ICdtb3JlYml0cy11c2VydGV4dCc7XG5cdFx0ZGl2LnN0eWxlLm1hcmdpblRvcCA9ICcwJztcblx0XHRkaXYuc3R5bGUud2hpdGVTcGFjZSA9ICdwcmUtd3JhcCc7XG5cdFx0ZGl2LnRleHRDb250ZW50ID0gY29tbWVudHM7XG5cdFx0cC5hcHBlbmRDaGlsZChkaXYpO1xuXHRcdE1vcmViaXRzLnN0YXR1cy5yb290LmFwcGVuZENoaWxkKHApO1xuXHR9O1xuXHQvKipcblx0ICogU2ltcGxlIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBzaW1wbGUgbm9kZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUeXBlIG9mIEhUTUwgZWxlbWVudC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBUZXh0IGNvbnRlbnQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbY29sb3JdIC0gRm9udCBjb2xvci5cblx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuXHQgKi9cblx0TW9yZWJpdHMuaHRtbE5vZGUgPSAodHlwZSwgY29udGVudCwgY29sb3IpID0+IHtcblx0XHRjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcblx0XHRpZiAoY29sb3IpIHtcblx0XHRcdG5vZGUuc3R5bGUuY29sb3IgPSBjb2xvcjtcblx0XHR9XG5cdFx0bm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7XG5cdFx0cmV0dXJuIG5vZGU7XG5cdH07XG5cdC8qKlxuXHQgKiBBZGQgc2hpZnQtY2xpY2sgc3VwcG9ydCBmb3IgY2hlY2tib3hlcy4gVGhlIHdpa2liaXRzIHZlcnNpb25cblx0ICogKGB3aW5kb3cuYWRkQ2hlY2tib3hDbGlja0hhbmRsZXJzYCkgaGFzIHNvbWUgcmVzdHJpY3Rpb25zLCBhbmQgZG9lc24ndCB3b3JrXG5cdCAqIHdpdGggY2hlY2tib3hlcyBpbnNpZGUgYSBzb3J0YWJsZSB0YWJsZSwgc28gbGV0J3MgYnVpbGQgb3VyIG93bi5cblx0ICpcblx0ICogQHBhcmFtIGpRdWVyeVNlbGVjdG9yXG5cdCAqIEBwYXJhbSBqUXVlcnlDb250ZXh0XG5cdCAqL1xuXHRNb3JlYml0cy5jaGVja2JveFNoaWZ0Q2xpY2tTdXBwb3J0ID0gKGpRdWVyeVNlbGVjdG9yLCBqUXVlcnlDb250ZXh0KSA9PiB7XG5cdFx0bGV0IGxhc3RDaGVja2JveCA9IG51bGw7XG5cdFx0Y29uc3QgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gY2xpY2tIYW5kbGVyKGV2ZW50KSB7XG5cdFx0XHRjb25zdCB0aGlzQ2IgPSB0aGlzO1xuXHRcdFx0aWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGxhc3RDaGVja2JveCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBjYnMgPSAkKGpRdWVyeVNlbGVjdG9yLCBqUXVlcnlDb250ZXh0KTsgLy8gY2FuJ3QgY2FjaGUgdGhlbSwgb2J2aW91c2x5LCBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgcmVzb3J0aW5nXG5cdFx0XHRcdGxldCBpbmRleCA9IC0xO1xuXHRcdFx0XHRsZXQgbGFzdEluZGV4ID0gLTE7XG5cdFx0XHRcdGxldCBpO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgY2JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGNic1tpXSA9PT0gdGhpc0NiKSB7XG5cdFx0XHRcdFx0XHRpbmRleCA9IGk7XG5cdFx0XHRcdFx0XHRpZiAobGFzdEluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChjYnNbaV0gPT09IGxhc3RDaGVja2JveCkge1xuXHRcdFx0XHRcdFx0bGFzdEluZGV4ID0gaTtcblx0XHRcdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5kZXggPiAtMSAmJiBsYXN0SW5kZXggPiAtMSkge1xuXHRcdFx0XHRcdC8vIGluc3BpcmVkIGJ5IHdpa2liaXRzXG5cdFx0XHRcdFx0Y29uc3QgZW5kU3RhdGUgPSB0aGlzQ2IuY2hlY2tlZDtcblx0XHRcdFx0XHRsZXQgc3RhcnQ7XG5cdFx0XHRcdFx0bGV0IGZpbmlzaDtcblx0XHRcdFx0XHRpZiAoaW5kZXggPCBsYXN0SW5kZXgpIHtcblx0XHRcdFx0XHRcdHN0YXJ0ID0gaW5kZXggKyAxO1xuXHRcdFx0XHRcdFx0ZmluaXNoID0gbGFzdEluZGV4O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdGFydCA9IGxhc3RJbmRleDtcblx0XHRcdFx0XHRcdGZpbmlzaCA9IGluZGV4IC0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yIChpID0gc3RhcnQ7IGkgPD0gZmluaXNoOyBpKyspIHtcblx0XHRcdFx0XHRcdGlmIChjYnNbaV0uY2hlY2tlZCAhPT0gZW5kU3RhdGUpIHtcblx0XHRcdFx0XHRcdFx0Y2JzW2ldLmNsaWNrKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsYXN0Q2hlY2tib3ggPSB0aGlzQ2I7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdCQoalF1ZXJ5U2VsZWN0b3IsIGpRdWVyeUNvbnRleHQpLm9uKCdjbGljaycsIGNsaWNrSGFuZGxlcik7XG5cdH07XG5cdC8qICoqKioqKioqKioqKioqKiogTW9yZWJpdHMuYmF0Y2hPcGVyYXRpb24gKioqKioqKioqKioqKioqKiAqL1xuXHQvKipcblx0ICogSXRlcmF0ZXMgb3ZlciBhIGdyb3VwIG9mIHBhZ2VzIChvciBhcmJpdHJhcnkgb2JqZWN0cykgYW5kIGV4ZWN1dGVzIGEgd29ya2VyIGZ1bmN0aW9uXG5cdCAqIGZvciBlYWNoLlxuXHQgKlxuXHQgKiBgc2V0UGFnZUxpc3QocGFnZUxpc3QpYDogU2V0cyB0aGUgbGlzdCBvZiBwYWdlcyB0byB3b3JrIG9uLiBJdCBzaG91bGQgYmUgYW5cblx0ICogYXJyYXkgb2YgcGFnZSBuYW1lcyBzdHJpbmdzLlxuXHQgKlxuXHQgKiBgc2V0T3B0aW9uKG9wdGlvbk5hbWUsIG9wdGlvblZhbHVlKWA6IFNldHMgYSBrbm93biBvcHRpb246XG5cdCAqIC0gYGNodW5rU2l6ZWAgKGludGVnZXIpOiBUaGUgc2l6ZSBvZiBjaHVua3MgdG8gYnJlYWsgdGhlIGFycmF5IGludG8gKGRlZmF1bHRcblx0ICogNTApLiBTZXR0aW5nIHRoaXMgdG8gYSBzbWFsbCB2YWx1ZSAoPDUpIGNhbiBjYXVzZSBwcm9ibGVtcy5cblx0ICogLSBgcHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXNgIChib29sZWFuKTogS2VlcCBlYWNoIHBhZ2UncyBzdGF0dXMgZWxlbWVudFxuXHQgKiB2aXNpYmxlIHdoZW4gd29ya2VyIGlzIGNvbXBsZXRlPyBTZWUgbm90ZSBiZWxvdy5cblx0ICpcblx0ICogYHJ1bih3b3JrZXIsIHBvc3RGaW5pc2gpYDogUnVucyB0aGUgY2FsbGJhY2sgYHdvcmtlcmAgZm9yIGVhY2ggcGFnZSBpbiB0aGVcblx0ICogbGlzdC4gIFRoZSBjYWxsYmFjayBtdXN0IGNhbGwgYHdvcmtlclN1Y2Nlc3NgIHdoZW4gc3VjY2VlZGluZywgb3Jcblx0ICogYHdvcmtlckZhaWx1cmVgIHdoZW4gZmFpbGluZy4gIElmIHVzaW5nIHtAbGluayBNb3JlYml0cy53aWtpLmFwaX0gb3Jcblx0ICoge0BsaW5rIE1vcmViaXRzLndpa2kucGFnZX0sIHRoaXMgaXMgZWFzaWx5IGRvbmUgYnkgcGFzc2luZyB0aGVzZSB0d29cblx0ICogZnVuY3Rpb25zIGFzIHBhcmFtZXRlcnMgdG8gdGhlIG1ldGhvZHMgb24gdGhvc2Ugb2JqZWN0czogZm9yIGluc3RhbmNlLFxuXHQgKiBgcGFnZS5zYXZlKGJhdGNoT3Aud29ya2VyU3VjY2VzcywgYmF0Y2hPcC53b3JrZXJGYWlsdXJlKWAuICBNYWtlIHN1cmUgdGhlXG5cdCAqIG1ldGhvZHMgYXJlIGNhbGxlZCBkaXJlY3RseSBpZiBzcGVjaWFsIHN1Y2Nlc3MvZmFpbHVyZSBjYXNlcyBhcmlzZS4gIElmIHlvdVxuXHQgKiBvbWl0IHRvIGNhbGwgdGhlc2UgbWV0aG9kcywgdGhlIGJhdGNoIG9wZXJhdGlvbiB3aWxsIHN0YWxsIGFmdGVyIHRoZSBmaXJzdFxuXHQgKiBjaHVuayEgIEFsc28gZW5zdXJlIHRoYXQgZWl0aGVyIHdvcmtlclN1Y2Nlc3Mgb3Igd29ya2VyRmFpbHVyZSBpcyBjYWxsZWQgbm9cblx0ICogbW9yZSB0aGFuIG9uY2UuICBUaGUgc2Vjb25kIGNhbGxiYWNrIGBwb3N0RmluaXNoYCBpcyBleGVjdXRlZCB3aGVuIHRoZVxuXHQgKiBlbnRpcmUgYmF0Y2ggaGFzIGJlZW4gcHJvY2Vzc2VkLlxuXHQgKlxuXHQgKiBJZiB1c2luZyBgcHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXNgLCB5b3Ugc2hvdWxkIHRyeSB0byBlbnN1cmUgdGhhdCB0aGVcblx0ICogYHdvcmtlclN1Y2Nlc3NgIGNhbGxiYWNrIGhhcyBhY2Nlc3MgdG8gdGhlIHBhZ2UgdGl0bGUuICBUaGlzIGlzIG5vIHByb2JsZW0gZm9yXG5cdCAqIHtAbGluayBNb3JlYml0cy53aWtpLnBhZ2V9IG9iamVjdHMuICBCdXQgd2hlbiB1c2luZyB0aGUgQVBJLCBwbGVhc2Ugc2V0IHRoZVxuXHQgKiB8cGFnZU5hbWV8IHByb3BlcnR5IG9uIHRoZSB7QGxpbmsgTW9yZWJpdHMud2lraS5hcGl9IG9iamVjdC5cblx0ICpcblx0ICogVGhlcmUgYXJlIHNhbXBsZSBiYXRjaE9wZXJhdGlvbiBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgTW9yZWJpdHMud2lraS5wYWdlIGluXG5cdCAqIHR3aW5rbGViYXRjaGRlbGV0ZS5qcywgdHdpbmtsZWJhdGNodW5kZWxldGUuanMsIGFuZCB0d2lua2xlYmF0Y2hwcm90ZWN0LmpzLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHNcblx0ICogQGNsYXNzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbY3VycmVudEFjdGlvbl1cblx0ICovXG5cdE1vcmViaXRzLmJhdGNoT3BlcmF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnRBY3Rpb24pIHtcblx0XHRjb25zdCBjdHggPSB7XG5cdFx0XHQvLyBiYWNraW5nIGZpZWxkcyBmb3IgcHVibGljIHByb3BlcnRpZXNcblx0XHRcdHBhZ2VMaXN0OiBudWxsLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRjaHVua1NpemU6IDUwLFxuXHRcdFx0XHRwcmVzZXJ2ZUluZGl2aWR1YWxTdGF0dXNMaW5lczogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdFx0Ly8gaW50ZXJuYWwgY291bnRlcnMsIGV0Yy5cblx0XHRcdHN0YXR1c0VsZW1lbnQ6IG5ldyBNb3JlYml0cy5zdGF0dXMoY3VycmVudEFjdGlvbiB8fCB3aW5kb3cud2dVTFMoJ+aJp+ihjOaJuemHj+aTjeS9nCcsICfln7fooYzmibnmrKHmk43kvZwnKSksXG5cdFx0XHR3b3JrZXI6IG51bGwsXG5cdFx0XHQvLyBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIGZvciBlYWNoIGl0ZW0gaW4gcGFnZUxpc3Rcblx0XHRcdHBvc3RGaW5pc2g6IG51bGwsXG5cdFx0XHQvLyBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIHdoZW4gdGhlIHdob2xlIGJhdGNoIGhhcyBiZWVuIHByb2Nlc3NlZFxuXHRcdFx0Y291bnRTdGFydGVkOiAwLFxuXHRcdFx0Y291bnRGaW5pc2hlZDogMCxcblx0XHRcdGNvdW50RmluaXNoZWRTdWNjZXNzOiAwLFxuXHRcdFx0Y3VycmVudENodW5rSW5kZXg6IC0xLFxuXHRcdFx0cGFnZUNodW5rczogW10sXG5cdFx0XHRydW5uaW5nOiBmYWxzZSxcblx0XHR9O1xuXHRcdC8vIHNob3VsZG4ndCBiZSBuZWVkZWQgYnkgZXh0ZXJuYWwgdXNlcnMsIGJ1dCBwcm92aWRlZCBhbnl3YXkgZm9yIG1heGltdW0gZmxleGliaWxpdHlcblx0XHR0aGlzLmdldFN0YXR1c0VsZW1lbnQgPSAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3R4LnN0YXR1c0VsZW1lbnQ7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBsaXN0IG9mIHBhZ2VzIHRvIHdvcmsgb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBwYWdlTGlzdCAtIEFycmF5IG9mIG9iamVjdHMgb3ZlciB3aGljaCB5b3Ugd2lzaCB0byBleGVjdXRlIHRoZSB3b3JrZXIgZnVuY3Rpb25cblx0XHQgKiBUaGlzIGlzIHVzdWFsbHkgdGhlIGxpc3Qgb2YgcGFnZSBuYW1lcyAoc3RyaW5ncykuXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRQYWdlTGlzdCA9IChwYWdlTGlzdCkgPT4ge1xuXHRcdFx0Y3R4LnBhZ2VMaXN0ID0gcGFnZUxpc3Q7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBTZXRzIGEga25vd24gb3B0aW9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBvcHRpb246XG5cdFx0ICogLSBjaHVua1NpemUgKGludGVnZXIpOiBUaGUgc2l6ZSBvZiBjaHVua3MgdG8gYnJlYWsgdGhlIGFycmF5IGludG9cblx0XHQgKiAoZGVmYXVsdCA1MCkuIFNldHRpbmcgdGhpcyB0byBhIHNtYWxsIHZhbHVlICg8NSkgY2FuIGNhdXNlIHByb2JsZW1zLlxuXHRcdCAqIC0gcHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMgKGJvb2xlYW4pOiBLZWVwIGVhY2ggcGFnZSdzIHN0YXR1c1xuXHRcdCAqIGVsZW1lbnQgdmlzaWJsZSB3aGVuIHdvcmtlciBpcyBjb21wbGV0ZT9cblx0XHQgKiBAcGFyYW0ge251bWJlcnxib29sZWFufSBvcHRpb25WYWx1ZSAtIFZhbHVlIHRvIHdoaWNoIHRoZSBvcHRpb24gaXNcblx0XHQgKiB0byBiZSBzZXQuIFNob3VsZCBiZSBhbiBpbnRlZ2VyIGZvciBjaHVua1NpemUgYW5kIGEgYm9vbGVhbiBmb3Jcblx0XHQgKiBwcmVzZXJ2ZUluZGl2aWR1YWxTdGF0dXNMaW5lcy5cblx0XHQgKi9cblx0XHR0aGlzLnNldE9wdGlvbiA9IChvcHRpb25OYW1lLCBvcHRpb25WYWx1ZSkgPT4ge1xuXHRcdFx0Y3R4Lm9wdGlvbnNbb3B0aW9uTmFtZV0gPSBvcHRpb25WYWx1ZTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIFJ1bnMgdGhlIGZpcnN0IGNhbGxiYWNrIGZvciBlYWNoIHBhZ2UgaW4gdGhlIGxpc3QuXG5cdFx0ICogVGhlIGNhbGxiYWNrIG11c3QgY2FsbCB3b3JrZXJTdWNjZXNzIHdoZW4gc3VjY2VlZGluZywgb3Igd29ya2VyRmFpbHVyZSB3aGVuIGZhaWxpbmcuXG5cdFx0ICogUnVucyB0aGUgb3B0aW9uYWwgc2Vjb25kIGNhbGxiYWNrIHdoZW4gdGhlIHdob2xlIGJhdGNoIGhhcyBiZWVuIHByb2Nlc3NlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IHdvcmtlclxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtwb3N0RmluaXNoXVxuXHRcdCAqL1xuXHRcdHRoaXMucnVuID0gKHdvcmtlciwgcG9zdEZpbmlzaCkgPT4ge1xuXHRcdFx0aWYgKGN0eC5ydW5uaW5nKSB7XG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LmVycm9yKHdpbmRvdy53Z1VMUygn5om56YeP5pON5L2c5bey5Zyo6L+Q6KGMJywgJ+aJueasoeaTjeS9nOW3suWcqOWft+ihjCcpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y3R4LnJ1bm5pbmcgPSB0cnVlO1xuXHRcdFx0Y3R4LndvcmtlciA9IHdvcmtlcjtcblx0XHRcdGN0eC5wb3N0RmluaXNoID0gcG9zdEZpbmlzaDtcblx0XHRcdGN0eC5jb3VudFN0YXJ0ZWQgPSAwO1xuXHRcdFx0Y3R4LmNvdW50RmluaXNoZWQgPSAwO1xuXHRcdFx0Y3R4LmNvdW50RmluaXNoZWRTdWNjZXNzID0gMDtcblx0XHRcdGN0eC5jdXJyZW50Q2h1bmtJbmRleCA9IC0xO1xuXHRcdFx0Y3R4LnBhZ2VDaHVua3MgPSBbXTtcblx0XHRcdGNvbnN0IHRvdGFsID0gY3R4LnBhZ2VMaXN0Lmxlbmd0aDtcblx0XHRcdGlmICghdG90YWwpIHtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyh3aW5kb3cud2dVTFMoJ+ayoeacieaMh+WumumhtemdoicsICfmspLmnInmjIflrprpoIHpnaInKSk7XG5cdFx0XHRcdGN0eC5ydW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdGlmIChjdHgucG9zdEZpbmlzaCkge1xuXHRcdFx0XHRcdGN0eC5wb3N0RmluaXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2h1bmsgcGFnZSBsaXN0IGludG8gbW9yZSBtYW5hZ2VhYmxlIHVuaXRzXG5cdFx0XHRjdHgucGFnZUNodW5rcyA9IE1vcmViaXRzLmFycmF5LmNodW5rKGN0eC5wYWdlTGlzdCwgY3R4Lm9wdGlvbnMuY2h1bmtTaXplKTtcblx0XHRcdC8vIHN0YXJ0IHRoZSBwcm9jZXNzXG5cdFx0XHRNb3JlYml0cy53aWtpLmFkZENoZWNrcG9pbnQoKTtcblx0XHRcdGN0eC5zdGF0dXNFbGVtZW50LnN0YXR1cygnMCUnKTtcblx0XHRcdGZuU3RhcnROZXdDaHVuaygpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogVG8gYmUgY2FsbGVkIGJ5IHdvcmtlciBiZWZvcmUgaXQgdGVybWluYXRlcyBzdWNjZXNzZnVsbHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyhNb3JlYml0cy53aWtpLnBhZ2V8TW9yZWJpdHMud2lraS5hcGl8c3RyaW5nKX0gYXJnIC1cblx0XHQgKiBUaGlzIHNob3VsZCBiZSB0aGUgYE1vcmViaXRzLndpa2kucGFnZWAgb3IgYE1vcmViaXRzLndpa2kuYXBpYCBvYmplY3QgdXNlZCBieSB3b3JrZXJcblx0XHQgKiAoZm9yIHRoZSBhZGp1c3RtZW50IG9mIHN0YXR1cyBsaW5lcyBlbWl0dGVkIGJ5IHRoZW0pLlxuXHRcdCAqIElmIG5vIE1vcmViaXRzLndpa2kuKiBvYmplY3QgaXMgdXNlZCAoZS5nLiB5b3UncmUgdXNpbmcgYG13LkFwaSgpYCBvciBzb21ldGhpbmcgZWxzZSksIGFuZFxuXHRcdCAqIGBwcmVzZXJ2ZUluZGl2aWR1YWxTdGF0dXNMaW5lc2Agb3B0aW9uIGlzIG9uLCBnaXZlIHRoZSBwYWdlIG5hbWUgKHN0cmluZykgYXMgYXJndW1lbnQuXG5cdFx0ICovXG5cdFx0dGhpcy53b3JrZXJTdWNjZXNzID0gKGFyZykgPT4ge1xuXHRcdFx0aWYgKGFyZyBpbnN0YW5jZW9mIE1vcmViaXRzLndpa2kuYXBpIHx8IGFyZyBpbnN0YW5jZW9mIE1vcmViaXRzLndpa2kucGFnZSkge1xuXHRcdFx0XHQvLyB1cGRhdGUgb3IgcmVtb3ZlIHN0YXR1cyBsaW5lXG5cdFx0XHRcdGNvbnN0IHN0YXRlbGVtID0gYXJnLmdldFN0YXR1c0VsZW1lbnQoKTtcblx0XHRcdFx0aWYgKGN0eC5vcHRpb25zLnByZXNlcnZlSW5kaXZpZHVhbFN0YXR1c0xpbmVzKSB7XG5cdFx0XHRcdFx0aWYgKGFyZy5nZXRQYWdlTmFtZSB8fCBhcmcucGFnZU5hbWUgfHwgKGFyZy5xdWVyeSAmJiBhcmcucXVlcnkudGl0bGUpKSB7XG5cdFx0XHRcdFx0XHQvLyB3ZSBrbm93IHRoZSBwYWdlIHRpdGxlIC0gZGlzcGxheSBhIHJlbGV2YW50IG1lc3NhZ2Vcblx0XHRcdFx0XHRcdGNvbnN0IHBhZ2VOYW1lID0gYXJnLmdldFBhZ2VOYW1lID8gYXJnLmdldFBhZ2VOYW1lKCkgOiBhcmcucGFnZU5hbWUgfHwgYXJnLnF1ZXJ5LnRpdGxlO1xuXHRcdFx0XHRcdFx0c3RhdGVsZW0uaW5mbyhg5a6M5oiQ77yIW1ske3BhZ2VOYW1lfV1d77yJYCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIHdlIGRvbid0IGtub3cgdGhlIHBhZ2UgdGl0bGUgLSBqdXN0IGRpc3BsYXkgYSBnZW5lcmljIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdHN0YXRlbGVtLmluZm8oJ+WujOaIkCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZW1vdmUgdGhlIHN0YXR1cyBsaW5lIGF1dG9tYXRpY2FsbHkgcHJvZHVjZWQgYnkgTW9yZWJpdHMud2lraS4qXG5cdFx0XHRcdFx0c3RhdGVsZW0udW5saW5rKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgJiYgY3R4Lm9wdGlvbnMucHJlc2VydmVJbmRpdmlkdWFsU3RhdHVzTGluZXMpIHtcblx0XHRcdFx0bmV3IE1vcmViaXRzLnN0YXR1cyhhcmcsIGDlrozmiJDvvIhbWyR7YXJnfV1d77yJYCk7XG5cdFx0XHR9XG5cdFx0XHRjdHguY291bnRGaW5pc2hlZFN1Y2Nlc3MrKztcblx0XHRcdGZuRG9uZU9uZSgpO1xuXHRcdH07XG5cdFx0dGhpcy53b3JrZXJGYWlsdXJlID0gKCkgPT4ge1xuXHRcdFx0Zm5Eb25lT25lKCk7XG5cdFx0fTtcblx0XHQvLyBwcml2YXRlIGZ1bmN0aW9uc1xuXHRcdGNvbnN0IHRoaXNQcm94eSA9IHRoaXM7XG5cdFx0Y29uc3QgZm5TdGFydE5ld0NodW5rID0gKCkgPT4ge1xuXHRcdFx0Y29uc3QgY2h1bmsgPSBjdHgucGFnZUNodW5rc1srK2N0eC5jdXJyZW50Q2h1bmtJbmRleF07XG5cdFx0XHRpZiAoIWNodW5rKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gZG9uZSEgeWF5XG5cdFx0XHR9XG5cdFx0XHQvLyBzdGFydCB3b3JrZXJzIGZvciB0aGUgY3VycmVudCBjaHVua1xuXHRcdFx0Y3R4LmNvdW50U3RhcnRlZCArPSBjaHVuay5sZW5ndGg7XG5cdFx0XHRmb3IgKGNvbnN0IHBhZ2Ugb2YgY2h1bmspIHtcblx0XHRcdFx0Y3R4LndvcmtlcihwYWdlLCB0aGlzUHJveHkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgZm5Eb25lT25lID0gKCkgPT4ge1xuXHRcdFx0Y3R4LmNvdW50RmluaXNoZWQrKztcblx0XHRcdC8vIHVwZGF0ZSBvdmVyYWxsIHN0YXR1cyBsaW5lXG5cdFx0XHRjb25zdCB0b3RhbCA9IGN0eC5wYWdlTGlzdC5sZW5ndGg7XG5cdFx0XHRpZiAoY3R4LmNvdW50RmluaXNoZWQgPCB0b3RhbCkge1xuXHRcdFx0XHRjb25zdCBwcm9ncmVzcyA9IE1hdGgucm91bmQoKDEwMCAqIGN0eC5jb3VudEZpbmlzaGVkKSAvIHRvdGFsKTtcblx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuc3RhdHVzKGAke3Byb2dyZXNzfSVgKTtcblx0XHRcdFx0Ly8gc3RhcnQgYSBuZXcgY2h1bmsgaWYgd2UncmUgY2xvc2UgZW5vdWdoIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGNodW5rLCBhbmRcblx0XHRcdFx0Ly8gd2UgaGF2ZW4ndCBhbHJlYWR5IHN0YXJ0ZWQgdGhlIG5leHQgb25lXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRjdHguY291bnRGaW5pc2hlZCA+PSBjdHguY291bnRTdGFydGVkIC0gTWF0aC5tYXgoY3R4Lm9wdGlvbnMuY2h1bmtTaXplIC8gMTAsIDIpICYmXG5cdFx0XHRcdFx0TWF0aC5mbG9vcihjdHguY291bnRGaW5pc2hlZCAvIGN0eC5vcHRpb25zLmNodW5rU2l6ZSkgPiBjdHguY3VycmVudENodW5rSW5kZXhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Zm5TdGFydE5ld0NodW5rKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY3R4LmNvdW50RmluaXNoZWQgPT09IHRvdGFsKSB7XG5cdFx0XHRcdGNvbnN0IHN0YXR1c1N0cmluZyA9IGDlrozmiJDvvIgke2N0eC5jb3VudEZpbmlzaGVkU3VjY2Vzc30vJHtjdHguY291bnRGaW5pc2hlZH3mk43kvZzmiJDlip/lrozmiJDvvIlgO1xuXHRcdFx0XHRpZiAoY3R4LmNvdW50RmluaXNoZWRTdWNjZXNzIDwgY3R4LmNvdW50RmluaXNoZWQpIHtcblx0XHRcdFx0XHRjdHguc3RhdHVzRWxlbWVudC53YXJuKHN0YXR1c1N0cmluZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3R4LnN0YXR1c0VsZW1lbnQuaW5mbyhzdGF0dXNTdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjdHgucG9zdEZpbmlzaCkge1xuXHRcdFx0XHRcdGN0eC5wb3N0RmluaXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0TW9yZWJpdHMud2lraS5yZW1vdmVDaGVja3BvaW50KCk7XG5cdFx0XHRcdGN0eC5ydW5uaW5nID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBjdHguY291bnRGaW5pc2hlZCA+IHRvdGFsXG5cdFx0XHRcdC8vIGp1c3QgZm9yIGdpZ2dsZXMhICh3ZWxsLCBzZXJpb3VzIGRlYnVnZ2luZywgYWN0dWFsbHkpXG5cdFx0XHRcdGN0eC5zdGF0dXNFbGVtZW50Lndhcm4oXG5cdFx0XHRcdFx0YCR7d2luZG93LndnVUxTKCflrozmiJDvvIjlpJrmiafooYzkuoYnLCAn5a6M5oiQ77yI5aSa5Z+36KGM5LqGJykgKyAoY3R4LmNvdW50RmluaXNoZWQgLSB0b3RhbCl95qyh77yJYFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRNb3JlYml0cy53aWtpLnJlbW92ZUNoZWNrcG9pbnQoKTtcblx0XHRcdFx0Y3R4LnJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXHQvKipcblx0ICogQSBzaW1wbGUgZHJhZ2dhYmxlIHdpbmRvdywgbm93IGEgd3JhcHBlciBmb3IgalF1ZXJ5IFVJJ3MgZGlhbG9nIGZlYXR1cmUuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBNb3JlYml0c1xuXHQgKiBAY2xhc3Ncblx0ICogQHJlcXVpcmVzIGpxdWVyeS51aS5kaWFsb2dcblx0ICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgbWF4aW11bSBhbGxvd2FibGUgaGVpZ2h0IGZvciB0aGUgY29udGVudCBhcmVhLlxuXHQgKi9cblx0TW9yZWJpdHMuc2ltcGxlV2luZG93ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcblx0XHRjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0dGhpcy5jb250ZW50ID0gY29udGVudDtcblx0XHRjb250ZW50LmNsYXNzTmFtZSA9ICdtb3JlYml0cy1kaWFsb2ctY29udGVudCc7XG5cdFx0Y29udGVudC5pZCA9IGBtb3JlYml0cy1kaWFsb2ctY29udGVudC0ke01hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDFlMTUpfWA7XG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0JCh0aGlzLmNvbnRlbnQpLmRpYWxvZyh7XG5cdFx0XHRhdXRvT3BlbjogZmFsc2UsXG5cdFx0XHRidXR0b25zOiB7XG5cdFx0XHRcdCdQbGFjZWhvbGRlciBidXR0b24nOiAoKSA9PiB7fSxcblx0XHRcdH0sXG5cdFx0XHRkaWFsb2dDbGFzczogJ21vcmViaXRzLWRpYWxvZycsXG5cdFx0XHR3aWR0aDogTWF0aC5taW4oTnVtYmVyLnBhcnNlSW50KHdpbmRvdy5pbm5lcldpZHRoLCAxMCksIE51bWJlci5wYXJzZUludCh3aWR0aCB8fCA4MDAsIDEwKSksXG5cdFx0XHQvLyBnaXZlIGpRdWVyeSB0aGUgZ2l2ZW4gaGVpZ2h0IHZhbHVlICh3aGljaCByZXByZXNlbnRzIHRoZSBhbnRpY2lwYXRlZCBoZWlnaHQgb2YgdGhlIGRpYWxvZykgaGVyZSwgc29cblx0XHRcdC8vIGl0IGNhbiBwb3NpdGlvbiB0aGUgZGlhbG9nIGFwcHJvcHJpYXRlbHlcblx0XHRcdC8vIHRoZSAyMCBwaXhlbHMgcmVwcmVzZW50cyBhZGp1c3RtZW50IGZvciB0aGUgZXh0cmEgaGVpZ2h0IG9mIHRoZSBqUXVlcnkgZGlhbG9nIFwiY2hyb21lXCIsIGNvbXBhcmVkXG5cdFx0XHQvLyB0byB0aGF0IG9mIHRoZSBvbGQgU2ltcGxlV2luZG93XG5cdFx0XHRoZWlnaHQ6IGhlaWdodCArIDIwLFxuXHRcdFx0Y2xvc2U6IChldmVudCkgPT4ge1xuXHRcdFx0XHQvLyBkaWFsb2dzIGFuZCB0aGVpciBjb250ZW50IGNhbiBiZSBkZXN0cm95ZWQgb25jZSBjbG9zZWRcblx0XHRcdFx0JChldmVudC50YXJnZXQpLmRpYWxvZygnZGVzdHJveScpLnJlbW92ZSgpO1xuXHRcdFx0fSxcblx0XHRcdHJlc2l6ZVN0YXJ0KCkge1xuXHRcdFx0XHRbdGhpcy5zY3JvbGxib3hdID0gJCh0aGlzKS5maW5kKCcubW9yZWJpdHMtc2Nyb2xsYm94Jyk7XG5cdFx0XHRcdGlmICh0aGlzLnNjcm9sbGJveCkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsYm94LnN0eWxlLm1heEhlaWdodCA9ICdub25lJztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJlc2l6ZVN0b3AoKSB7XG5cdFx0XHRcdHRoaXMuc2Nyb2xsYm94ID0gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRyZXNpemUoKSB7XG5cdFx0XHRcdHRoaXMuc3R5bGUubWF4SGVpZ2h0ID0gJyc7XG5cdFx0XHRcdGlmICh0aGlzLnNjcm9sbGJveCkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsYm94LnN0eWxlLndpZHRoID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fSk7XG5cdFx0Y29uc3QgJHdpZGdldCA9ICQodGhpcy5jb250ZW50KS5kaWFsb2coJ3dpZGdldCcpO1xuXHRcdC8vIGRlbGV0ZSB0aGUgcGxhY2Vob2xkZXIgYnV0dG9uIChpdCdzIG9ubHkgdGhlcmUgc28gdGhlIGJ1dHRvbnBhbmUgZ2V0cyBjcmVhdGVkKVxuXHRcdCR3aWRnZXQuZmluZCgnYnV0dG9uJykuZWFjaCgoa2V5LCB2YWx1ZSkgPT4ge1xuXHRcdFx0dmFsdWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0Ly8gYWRkIGNvbnRhaW5lciBmb3IgdGhlIGJ1dHRvbnMgd2UgYWRkLCBhbmQgdGhlIGZvb3RlciBsaW5rcyAoaWYgYW55KVxuXHRcdGNvbnN0IGJ1dHRvbnNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0YnV0dG9uc3Bhbi5jbGFzc05hbWUgPSAnbW9yZWJpdHMtZGlhbG9nLWJ1dHRvbnMnO1xuXHRcdGNvbnN0IGxpbmtzc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRsaW5rc3NwYW4uY2xhc3NOYW1lID0gJ21vcmViaXRzLWRpYWxvZy1mb290ZXJsaW5rcyc7XG5cdFx0JHdpZGdldC5maW5kKCcudWktZGlhbG9nLWJ1dHRvbnBhbmUnKS5hcHBlbmQoYnV0dG9uc3BhbiwgbGlua3NzcGFuKTtcblx0XHQvLyByZXNpemUgdGhlIHNjcm9sbGJveCB3aXRoIHRoZSBkaWFsb2csIGlmIG9uZSBpcyBwcmVzZW50XG5cdFx0JHdpZGdldC5yZXNpemFibGUoJ29wdGlvbicsICdhbHNvUmVzaXplJywgYCMke3RoaXMuY29udGVudC5pZH0gLm1vcmViaXRzLXNjcm9sbGJveCwgIyR7dGhpcy5jb250ZW50LmlkfWApO1xuXHR9O1xuXHRNb3JlYml0cy5zaW1wbGVXaW5kb3cucHJvdG90eXBlID0ge1xuXHRcdGJ1dHRvbnM6IFtdLFxuXHRcdGhlaWdodDogNjAwLFxuXHRcdGhhc0Zvb3RlckxpbmtzOiBmYWxzZSxcblx0XHRzY3JpcHROYW1lOiBudWxsLFxuXHRcdC8qKlxuXHRcdCAqIEZvY3VzZXMgdGhlIGRpYWxvZy4gVGhpcyBtaWdodCB3b3JrLCBvciBvbiB0aGUgY29udHJhcnksIGl0IG1pZ2h0IG5vdC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zaW1wbGVXaW5kb3d9XG5cdFx0ICovXG5cdFx0Zm9jdXMoKSB7XG5cdFx0XHQkKHRoaXMuY29udGVudCkuZGlhbG9nKCdtb3ZlVG9Ub3AnKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogQ2xvc2VzIHRoZSBkaWFsb2cuIElmIHRoaXMgaXMgc2V0IGFzIGFuIGV2ZW50IGhhbmRsZXIsIGl0IHdpbGwgc3RvcCB0aGUgZXZlbnRcblx0XHQgKiBmcm9tIGRvaW5nIGFueXRoaW5nIG1vcmUuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge2V2ZW50fSBbZXZlbnRdXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRjbG9zZShldmVudCkge1xuXHRcdFx0aWYgKGV2ZW50KSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9XG5cdFx0XHQkKHRoaXMuY29udGVudCkuZGlhbG9nKCdjbG9zZScpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBTaG93cyB0aGUgZGlhbG9nLiBDYWxsaW5nIGRpc3BsYXkoKSBvbiBhIGRpYWxvZyB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gY2xvc2VkXG5cdFx0ICogbWlnaHQgd29yaywgYnV0IGl0IGlzIG5vdCBndWFyYW50ZWVkLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRkaXNwbGF5KCkge1xuXHRcdFx0aWYgKHRoaXMuc2NyaXB0TmFtZSkge1xuXHRcdFx0XHRjb25zdCAkd2lkZ2V0ID0gJCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnd2lkZ2V0Jyk7XG5cdFx0XHRcdCR3aWRnZXQuZmluZCgnLm1vcmViaXRzLWRpYWxvZy1zY3JpcHRuYW1lJykucmVtb3ZlKCk7XG5cdFx0XHRcdGNvbnN0IHNjcmlwdG5hbWVzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdFx0XHRzY3JpcHRuYW1lc3Bhbi5jbGFzc05hbWUgPSAnbW9yZWJpdHMtZGlhbG9nLXNjcmlwdG5hbWUnO1xuXHRcdFx0XHRzY3JpcHRuYW1lc3Bhbi50ZXh0Q29udGVudCA9IGAke3RoaXMuc2NyaXB0TmFtZX0gXFx1MDBCNyBgOyAvLyBVKzAwQjcgTUlERExFIERPVCA9ICZtaWRkb3Q7XG5cdFx0XHRcdCR3aWRnZXQuZmluZCgnLnVpLWRpYWxvZy10aXRsZScpLnByZXBlbmQoc2NyaXB0bmFtZXNwYW4pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZGlhbG9nID0gJCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnb3BlbicpO1xuXHRcdFx0aWYgKHdpbmRvdy5zZXR1cFRvb2x0aXBzICYmIHdpbmRvdy5wZyAmJiB3aW5kb3cucGcucmUgJiYgd2luZG93LnBnLnJlLmRpZmYpIHtcblx0XHRcdFx0Ly8gdGllIGluIHdpdGggTkFWUE9QXG5cdFx0XHRcdGRpYWxvZy5wYXJlbnQoKVswXS5yYW5TZXR1cFRvb2x0aXBzQWxyZWFkeSA9IGZhbHNlO1xuXHRcdFx0XHR3aW5kb3cuc2V0dXBUb29sdGlwcyhkaWFsb2cucGFyZW50KClbMF0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zZXRIZWlnaHQodGhpcy5oZWlnaHQpOyAvLyBpbml0IGhlaWdodCBhbGdvcml0aG1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgZGlhbG9nIHRpdGxlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRzZXRUaXRsZSh0aXRsZSkge1xuXHRcdFx0JCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnb3B0aW9uJywgJ3RpdGxlJywgdGl0bGUpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBzY3JpcHQgbmFtZSwgYXBwZWFyaW5nIGFzIGEgcHJlZml4IHRvIHRoZSB0aXRsZSB0byBoZWxwIHVzZXJzIGRldGVybWluZSB3aGljaFxuXHRcdCAqIHVzZXIgc2NyaXB0IGlzIHByb2R1Y2luZyB3aGljaCBkaWFsb2cuIEZvciBpbnN0YW5jZSwgVHdpbmtsZSBtb2R1bGVzIHNldCB0aGlzIHRvIFwiVHdpbmtsZVwiLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMuc2ltcGxlV2luZG93fVxuXHRcdCAqL1xuXHRcdHNldFNjcmlwdE5hbWUobmFtZSkge1xuXHRcdFx0dGhpcy5zY3JpcHROYW1lID0gbmFtZTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgZGlhbG9nIHdpZHRoLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRzZXRXaWR0aCh3aWR0aCkge1xuXHRcdFx0JCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnb3B0aW9uJywgJ3dpZHRoJywgd2lkdGgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBkaWFsb2cncyBtYXhpbXVtIGhlaWdodC4gVGhlIGRpYWxvZyB3aWxsIGF1dG8tc2l6ZSB0byBmaXQgaXRzIGNvbnRlbnRzLFxuXHRcdCAqIGJ1dCB0aGUgY29udGVudCBhcmVhIHdpbGwgZ3JvdyBubyBsYXJnZXIgdGhhbiB0aGUgaGVpZ2h0IGdpdmVuIGhlcmUuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRzZXRIZWlnaHQoaGVpZ2h0KSB7XG5cdFx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHRcdC8vIGZyb20gZGlzcGxheSB0aW1lIG9ud2FyZHMsIGxldCB0aGUgYnJvd3NlciBkZXRlcm1pbmUgdGhlIG9wdGltdW0gaGVpZ2h0LFxuXHRcdFx0Ly8gYW5kIGluc3RlYWQgbGltaXQgdGhlIGhlaWdodCBhdCB0aGUgZ2l2ZW4gdmFsdWVcblx0XHRcdC8vIG5vdGUgdGhhdCB0aGUgZ2l2ZW4gaGVpZ2h0IHdpbGwgZXhjbHVkZSB0aGUgYXBwcm94LiAyMHB4IHRoYXQgdGhlIGpRdWVyeSBVSVxuXHRcdFx0Ly8gY2hyb21lIGhhcyBpbiBoZWlnaHQgaW4gYWRkaXRpb24gdG8gdGhlIGhlaWdodCBvZiBhbiBlcXVpdmFsZW50IFwiY2xhc3NpY1wiXG5cdFx0XHQvLyBNb3JlYml0cy5zaW1wbGVXaW5kb3dcblx0XHRcdGlmIChcblx0XHRcdFx0TnVtYmVyLnBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoJCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnd2lkZ2V0JylbMF0sIG51bGwpLmhlaWdodCwgMTApID5cblx0XHRcdFx0d2luZG93LmlubmVySGVpZ2h0XG5cdFx0XHQpIHtcblx0XHRcdFx0JCh0aGlzLmNvbnRlbnQpXG5cdFx0XHRcdFx0LmRpYWxvZygnb3B0aW9uJywgJ2hlaWdodCcsIHdpbmRvdy5pbm5lckhlaWdodCAtIDIpXG5cdFx0XHRcdFx0LmRpYWxvZygnb3B0aW9uJywgJ3Bvc2l0aW9uJywgJ3RvcCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCh0aGlzLmNvbnRlbnQpLmRpYWxvZygnb3B0aW9uJywgJ2hlaWdodCcsICdhdXRvJyk7XG5cdFx0XHR9XG5cdFx0XHQkKHRoaXMuY29udGVudCkuZGlhbG9nKCd3aWRnZXQnKS5maW5kKCcubW9yZWJpdHMtZGlhbG9nLWNvbnRlbnQnKVswXS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtOdW1iZXIucGFyc2VJbnQoXG5cdFx0XHRcdHRoaXMuaGVpZ2h0IC0gMzAsXG5cdFx0XHRcdDEwXG5cdFx0XHQpfXB4YDtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgY29udGVudCBvZiB0aGUgZGlhbG9nIHRvIHRoZSBnaXZlbiBlbGVtZW50IG5vZGUsIHVzdWFsbHkgZnJvbSByZW5kZXJpbmdcblx0XHQgKiBhIHtAbGluayBNb3JlYml0cy5xdWlja0Zvcm19LlxuXHRcdCAqIFJlLWVudW1lcmF0ZXMgdGhlIGZvb3RlciBidXR0b25zLCBidXQgbGVhdmVzIHRoZSBmb290ZXIgbGlua3MgYXMgdGhleSBhcmUuXG5cdFx0ICogQmUgc3VyZSB0byBjYWxsIHRoaXMgYXQgbGVhc3Qgb25jZSBiZWZvcmUgdGhlIGRpYWxvZyBpcyBkaXNwbGF5ZWQuLi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRlbnRcblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMuc2ltcGxlV2luZG93fVxuXHRcdCAqL1xuXHRcdHNldENvbnRlbnQoY29udGVudCkge1xuXHRcdFx0dGhpcy5wdXJnZUNvbnRlbnQoKTtcblx0XHRcdHRoaXMuYWRkQ29udGVudChjb250ZW50KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogQWRkcyB0aGUgZ2l2ZW4gZWxlbWVudCBub2RlIHRvIHRoZSBkaWFsb2cgY29udGVudC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRlbnRcblx0XHQgKiBAcmV0dXJucyB7TW9yZWJpdHMuc2ltcGxlV2luZG93fVxuXHRcdCAqL1xuXHRcdGFkZENvbnRlbnQoY29udGVudCkge1xuXHRcdFx0dGhpcy5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuXHRcdFx0Ly8gbG9vayBmb3Igc3VibWl0IGJ1dHRvbnMgaW4gdGhlIGNvbnRlbnQsIGhpZGUgdGhlbSwgYW5kIGFkZCBhIHByb3h5IGJ1dHRvbiB0byB0aGUgYnV0dG9uIHBhbmVcblx0XHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdFx0JCh0aGlzLmNvbnRlbnQpXG5cdFx0XHRcdC5maW5kKCdpbnB1dFt0eXBlPVwic3VibWl0XCJdLCBidXR0b25bdHlwZT1cInN1Ym1pdFwiXScpXG5cdFx0XHRcdC5lYWNoKChrZXksIHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dmFsdWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0XHRjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcblx0XHRcdFx0XHRpZiAodmFsdWUuaGFzQXR0cmlidXRlKCd2YWx1ZScpKSB7XG5cdFx0XHRcdFx0XHRidXR0b24udGV4dENvbnRlbnQgPSB2YWx1ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZS50ZXh0Q29udGVudCkge1xuXHRcdFx0XHRcdFx0YnV0dG9uLnRleHRDb250ZW50ID0gdmFsdWUudGV4dENvbnRlbnQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICfmj5DkuqQnO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRidXR0b24uY2xhc3NOYW1lID0gdmFsdWUuY2xhc3NOYW1lIHx8ICdzdWJtaXRCdXR0b25Qcm94eSc7XG5cdFx0XHRcdFx0Ly8gaGVyZSBpcyBhbiBpbnN0YW5jZSBvZiBjaGVhcCBjb2RpbmcsIHByb2JhYmx5IGEgbWVtb3J5LXVzYWdlIGhpdCBpbiB1c2luZyBhIGNsb3N1cmUgaGVyZVxuXHRcdFx0XHRcdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFx0J2NsaWNrJyxcblx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0dmFsdWUuY2xpY2soKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0c2VsZi5idXR0b25zW3NlbGYuYnV0dG9ucy5sZW5ndGhdID0gYnV0dG9uO1xuXHRcdFx0XHR9KTtcblx0XHRcdC8vIHJlbW92ZSBhbGwgYnV0dG9ucyBmcm9tIHRoZSBidXR0b24gcGFuZSBhbmQgcmUtYWRkIHRoZW1cblx0XHRcdGlmICh0aGlzLmJ1dHRvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQkKHRoaXMuY29udGVudClcblx0XHRcdFx0XHQuZGlhbG9nKCd3aWRnZXQnKVxuXHRcdFx0XHRcdC5maW5kKCcubW9yZWJpdHMtZGlhbG9nLWJ1dHRvbnMnKVxuXHRcdFx0XHRcdC5lbXB0eSgpXG5cdFx0XHRcdFx0LmFwcGVuZCh0aGlzLmJ1dHRvbnMpWzBdXG5cdFx0XHRcdFx0LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1lbXB0eScpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCh0aGlzLmNvbnRlbnQpXG5cdFx0XHRcdFx0LmRpYWxvZygnd2lkZ2V0Jylcblx0XHRcdFx0XHQuZmluZCgnLm1vcmViaXRzLWRpYWxvZy1idXR0b25zJylbMF1cblx0XHRcdFx0XHQuc2V0QXR0cmlidXRlKCdkYXRhLWVtcHR5JywgJ2RhdGEtZW1wdHknKTsgLy8gdXNlZCBieSBDU1Ncblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIGFsbCBjb250ZW50cyBmcm9tIHRoZSBkaWFsb2csIGJhcnJpbmcgYW55IGZvb3RlciBsaW5rcy5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zaW1wbGVXaW5kb3d9XG5cdFx0ICovXG5cdFx0cHVyZ2VDb250ZW50KCkge1xuXHRcdFx0dGhpcy5idXR0b25zID0gW107XG5cdFx0XHQvLyBkZWxldGUgYWxsIGJ1dHRvbnMgaW4gdGhlIGJ1dHRvbnBhbmVcblx0XHRcdCQodGhpcy5jb250ZW50KS5kaWFsb2coJ3dpZGdldCcpLmZpbmQoJy5tb3JlYml0cy1kaWFsb2ctYnV0dG9ucycpLmVtcHR5KCk7XG5cdFx0XHR3aGlsZSAodGhpcy5jb250ZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHR0aGlzLmNvbnRlbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBBZGRzIGEgbGluayBpbiB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lciBvZiB0aGUgZGlhbG9nLlxuXHRcdCAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBoZWxwIG9yIHBvbGljeSBsaW5rcy5cblx0XHQgKiBGb3IgZXhhbXBsZSwgVHdpbmtsZSdzIENTRCBtb2R1bGUgYWRkcyBhIGxpbmsgdG8gdGhlIENTRCBwb2xpY3kgcGFnZSxcblx0XHQgKiBhcyB3ZWxsIGFzIGEgbGluayB0byBUd2lua2xlJ3MgZG9jdW1lbnRhdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRGlzcGxheSB0ZXh0LlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB3aWtpUGFnZSAtIExpbmsgdGFyZ2V0LlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZXA9ZmFsc2VdIC0gU2V0IHRydWUgdG8gcHJlcGVuZCByYXRoZXIgdGhhbiBhcHBlbmQuXG5cdFx0ICogQHJldHVybnMge01vcmViaXRzLnNpbXBsZVdpbmRvd31cblx0XHQgKi9cblx0XHRhZGRGb290ZXJMaW5rKHRleHQsIHdpa2lQYWdlLCBwcmVwKSB7XG5cdFx0XHRjb25zdCAkZm9vdGVybGlua3MgPSAkKHRoaXMuY29udGVudCkuZGlhbG9nKCd3aWRnZXQnKS5maW5kKCcubW9yZWJpdHMtZGlhbG9nLWZvb3RlcmxpbmtzJyk7XG5cdFx0XHRpZiAodGhpcy5oYXNGb290ZXJMaW5rcykge1xuXHRcdFx0XHRjb25zdCBidWxsZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0XHRcdGJ1bGxldC50ZXh0Q29udGVudCA9ICcgXFx1MjAyMiAnOyAvLyBVKzIwMjIgQlVMTEVUXG5cdFx0XHRcdGlmIChwcmVwKSB7XG5cdFx0XHRcdFx0JGZvb3RlcmxpbmtzLnByZXBlbmQoYnVsbGV0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkZm9vdGVybGlua3MuYXBwZW5kKGJ1bGxldCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIG13LnV0aWwuZ2V0VXJsKHdpa2lQYWdlKSk7XG5cdFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGl0bGUnLCB3aWtpUGFnZSk7XG5cdFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuXHRcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lciBub3JlZmVycmVyJyk7XG5cdFx0XHRsaW5rLnRleHRDb250ZW50ID0gdGV4dDtcblx0XHRcdGlmIChwcmVwKSB7XG5cdFx0XHRcdCRmb290ZXJsaW5rcy5wcmVwZW5kKGxpbmspO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JGZvb3RlcmxpbmtzLmFwcGVuZChsaW5rKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGFzRm9vdGVyTGlua3MgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBTZXRzIHdoZXRoZXIgdGhlIHdpbmRvdyBzaG91bGQgYmUgbW9kYWwgb3Igbm90LiBNb2RhbCBkaWFsb2dzIGNyZWF0ZVxuXHRcdCAqIGFuIG92ZXJsYXkgYmVsb3cgdGhlIGRpYWxvZyBidXQgYWJvdmUgb3RoZXIgcGFnZSBlbGVtZW50cy4gVGhpc1xuXHRcdCAqIG11c3QgYmUgdXNlZCAoaWYgbmVjZXNzYXJ5KSBiZWZvcmUgY2FsbGluZyBkaXNwbGF5KCkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFttb2RhbD1mYWxzZV0gLSBJZiBzZXQgdG8gdHJ1ZSwgb3RoZXIgaXRlbXMgb24gdGhlXG5cdFx0ICogcGFnZSB3aWxsIGJlIGRpc2FibGVkLCBpLmUuLCBjYW5ub3QgYmUgaW50ZXJhY3RlZCB3aXRoLlxuXHRcdCAqIEByZXR1cm5zIHtNb3JlYml0cy5zaW1wbGVXaW5kb3d9XG5cdFx0ICovXG5cdFx0c2V0TW9kYWxpdHkobW9kYWwpIHtcblx0XHRcdCQodGhpcy5jb250ZW50KS5kaWFsb2coJ29wdGlvbicsICdtb2RhbCcsIG1vZGFsKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdH07XG5cdC8qKlxuXHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIGFsbCBmb290ZXIgYnV0dG9ucyBvbiBhbGwge0BsaW5rIE1vcmViaXRzLnNpbXBsZVdpbmRvd31zIGluIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGBmYWxzZWAgd2hlbiB0aGUgYnV0dG9uKHMpIGJlY29tZSBpcnJlbGV2YW50IChlLmcuIGp1c3QgYmVmb3JlXG5cdCAqIHtAbGluayBNb3JlYml0cy5zdGF0dXMuaW5pdH0gaXMgY2FsbGVkKS5cblx0ICogVGhpcyBpcyBub3QgYW4gaW5zdGFuY2UgbWV0aG9kIHNvIHRoYXQgY29uc3VtZXJzIGRvbid0IGhhdmUgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGVcblx0ICogb3JpZ2luYWwgYE1vcmViaXRzLnNpbXBsZVdpbmRvd2Agb2JqZWN0IHNpdHRpbmcgYXJvdW5kIHNvbWV3aGVyZS4gQW55d2F5LCBtb3N0IG9mIHRoZSB0aW1lXG5cdCAqIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgYE1vcmViaXRzLnNpbXBsZVdpbmRvd2Agb3Blbiwgc28gdGhpcyBzaG91bGRuJ3QgbWF0dGVyLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2YgTW9yZWJpdHMuc2ltcGxlV2luZG93XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZFxuXHQgKi9cblx0TW9yZWJpdHMuc2ltcGxlV2luZG93LnNldEJ1dHRvbnNFbmFibGVkID0gKGVuYWJsZWQpID0+IHtcblx0XHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblx0XHQkYm9keS5maW5kKCcubW9yZWJpdHMtZGlhbG9nLWJ1dHRvbnMgYnV0dG9uJykucHJvcCgnZGlzYWJsZWQnLCAhZW5hYmxlZCk7XG5cdH07XG59KShqUXVlcnkpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUNB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QUNSOzs7Ozs7Ozs7O0lBVUF3QixZQUFZQyxPQUFPO0FBQ2xCejlCLFFBQUUsS0FBS3dFLE9BQU8sRUFBRXUyQixPQUFPLFVBQVUsU0FBUzBDLEtBQUs7QUFDL0MsYUFBTztJQUNSO0VBQ0Q7QUFZQXg5QixXQUFTMjZCLGFBQWE4QyxvQkFBcUJDLGFBQVk7QUFDdEQsVUFBTWxSLFFBQVF6c0IsRUFBRSxNQUFNO0FBQ3RCeXNCLFVBQU1wZixLQUFLLGlDQUFpQyxFQUFFMFQsS0FBSyxZQUFZLENBQUM0YyxPQUFPO0VBQ3hFO0FBQ0QsR0FBR0MsTUFBTTsiLAogICJuYW1lcyI6IFsiaW1wb3J0X2V4dF9nYWRnZXQiLCAicmVxdWlyZSIsICJtb3JlYml0cyIsICIkIiwgIk1vcmViaXRzIiwgIndpbmRvdyIsICJsMTBuIiwgInJlZGlyZWN0VGFnQWxpYXNlcyIsICJzaWduYXR1cmVUaW1lc3RhbXBGb3JtYXQiLCAic3RyIiwgInJneFVUQyIsICJyZ3hDU1QiLCAibWF0Y2giLCAiZXhlYyIsICJtYXRjaENTVCIsICJtb250aCIsICJkYXRlIiwgImxvY2FsZURhdGEiLCAibW9udGhzIiwgImluZGV4T2YiLCAidXNlcklzSW5Hcm91cCIsICJncm91cCIsICJtdyIsICJjb25maWciLCAiZ2V0IiwgImluY2x1ZGVzIiwgInVzZXJJc1N5c29wIiwgInNhbml0aXplSVB2NiIsICJhZGRyZXNzIiwgImNvbnNvbGUiLCAid2FybiIsICJpcCIsICJpc1BhZ2VSZWRpcmVjdCIsICJkb2N1bWVudCIsICJxdWVyeVNlbGVjdG9yIiwgInBhZ2VOYW1lTm9ybSIsICJyZXBsYWNlIiwgInBhZ2VOYW1lUmVnZXgiLCAicGFnZU5hbWUiLCAiZmlyc3RDaGFyIiwgInJlbWFpbmRlciIsICJzdHJpbmciLCAiZXNjYXBlUmVnRXhwIiwgInNsaWNlIiwgIlRpdGxlIiwgInBocENoYXJUb1VwcGVyIiwgInRvTG93ZXJDYXNlIiwgImNvbmNhdCIsICJjcmVhdGVIdG1sIiwgImlucHV0IiwgImZyYWdtZW50IiwgImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCAiZ2VuZXJhdGVBcnJheSIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAiZWxlbWVudCIsICJ2YWx1ZSIsICJOb2RlIiwgImFwcGVuZENoaWxkIiwgIl9pdGVyYXRvcjIiLCAicGFyc2VIVE1MIiwgInJlbmRlcldpa2lsaW5rcyIsICJfc3RlcDIiLCAibm9kZSIsICJlcnIiLCAiZSIsICJmIiwgInRleHQiLCAidWIiLCAidW5iaW5kZXIiLCAidW5iaW5kIiwgImNvbnRlbnQiLCAiXyIsICJ0YXJnZXQiLCAidGV4dF8iLCAidXRpbCIsICJnZXRVcmwiLCAicmViaW5kIiwgIm5hbWVzcGFjZVJlZ2V4IiwgIm5hbWVzcGFjZXMiLCAiYWxpYXNlcyIsICJyZWdleCIsICJfaSIsICJfT2JqZWN0JGVudHJpZXMiLCAiT2JqZWN0IiwgImVudHJpZXMiLCAibGVuZ3RoIiwgIm5hbWUiLCAibnVtYmVyIiwgIm1hcCIsICJjaGFyIiwgImpvaW4iLCAicXVpY2tGb3JtIiwgImV2ZW50IiwgImV2ZW50VHlwZSIsICJyb290IiwgInR5cGUiLCAicHJvdG90eXBlIiwgInJlbmRlciIsICJyZXQiLCAibmFtZXMiLCAiYXBwZW5kIiwgImRhdGEiLCAiY2hpbGRzIiwgImlkIiwgImNoaWxkIiwgImludGVybmFsU3ViZ3JvdXBJZCIsICJjdXJyZW50Tm9kZSIsICJjb21wdXRlIiwgIl9pdGVyYXRvcjMiLCAiX3N0ZXAzIiwgImluSWQiLCAiY2hpbGRDb250YWluZXIiLCAibGFiZWwiLCAiYWRtaW5vbmx5IiwgImkiLCAiY3VycmVudCIsICJzdWJub2RlIiwgImNyZWF0ZUVsZW1lbnQiLCAiY2xhc3NOYW1lIiwgInNldEF0dHJpYnV0ZSIsICJhZGRFdmVudExpc3RlbmVyIiwgInNlbGVjdCIsICJtdWx0aXBsZSIsICJzaXplIiwgImRpc2FibGVkIiwgImxpc3QiLCAidmFsdWVzIiwgInNlbGVjdGVkIiwgImhpZGRlbiIsICJjcmVhdGVUZXh0Tm9kZSIsICJjdXJJZCIsICJjdXJEaXYiLCAidG9vbHRpcCIsICJnZW5lcmF0ZVRvb2x0aXAiLCAiY2hlY2tlZCIsICJzdHlsZSIsICJzdWJncm91cCIsICJ0bXBncm91cCIsICJzdWJncm91cFJhdyIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJlbCIsICJuZXdFbCIsICJzaG93biIsICJwYXJlbnROb2RlIiwgImZvcm0iLCAicmVtb3ZlQ2hpbGQiLCAic2hpZnRDbGlja1N1cHBvcnQiLCAiY2hlY2tib3hTaGlmdENsaWNrU3VwcG9ydCIsICJnZXRFbGVtZW50cyIsICJwbGFjZWhvbGRlciIsICJfaTIiLCAiX2FyciIsICJhdHQiLCAiX2kzIiwgIl9hcnIyIiwgIl9pNCIsICJfYXJyMyIsICJtaW4iLCAibWF4IiwgIk51bWJlciIsICJQT1NJVElWRV9JTkZJTklUWSIsICJsaXN0Tm9kZSIsICJtb3JlIiwgIm5ld05vZGUiLCAic3VibGlzdCIsICJhcmVhIiwgImNvdW50ZXIiLCAic3RvcFByb3BhZ2F0aW9uIiwgIm1vcmVCdXR0b24iLCAic3VibGFiZWwiLCAicmVtb3ZlIiwgIm1heGxlbmd0aCIsICJlbGVtIiwgIm1vcmVidXR0b24iLCAibGlzdG5vZGUiLCAibm9kZV8iLCAiaW5wdXRub2RlIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJyZW1vdmVCdXR0b24iLCAicmVzdWx0IiwgImxhYmVsRWxlbWVudCIsICJjb2xzIiwgInJvd3MiLCAicmVxdWlyZWQiLCAicmVhZG9ubHkiLCAiRXJyb3IiLCAidG9TdHJpbmciLCAiZXh0cmEiLCAiJGRhdGEiLCAidG9vbHRpcEJ1dHRvbiIsICJ0aXRsZSIsICJwb3NpdGlvbiIsICJteSIsICJhdCIsICJjb2xsaXNpb24iLCAidG9vbHRpcENsYXNzIiwgImdldElucHV0RGF0YSIsICJfaXRlcmF0b3I1IiwgImVsZW1lbnRzIiwgIl9zdGVwNSIsICJmaWVsZCIsICJmaWVsZE5hbWVOb3JtIiwgImRhdGFzZXQiLCAic2luZ2xlIiwgInZhbCIsICJ0cmltIiwgImZpZWxkTmFtZSIsICIkZm9ybSIsICJlc2NhcGVTZWxlY3RvciIsICIkZWxlbWVudHMiLCAiZmluZCIsICJ0b0FycmF5IiwgImdldENoZWNrYm94T3JSYWRpbyIsICJlbGVtZW50QXJyYXkiLCAiZm91bmQiLCAiZmlsdGVyIiwgImdldEVsZW1lbnRDb250YWluZXIiLCAiSFRNTEZpZWxkU2V0RWxlbWVudCIsICJIVE1MRGl2RWxlbWVudCIsICJIVE1MSGVhZGluZ0VsZW1lbnQiLCAiZ2V0RWxlbWVudExhYmVsT2JqZWN0IiwgIkhUTUxUZXh0QXJlYUVsZW1lbnQiLCAiZ2V0RWxlbWVudExhYmVsIiwgImZpcnN0Q2hpbGQiLCAidGV4dENvbnRlbnQiLCAic2V0RWxlbWVudExhYmVsIiwgImxhYmVsVGV4dCIsICJvdmVycmlkZUVsZW1lbnRMYWJlbCIsICJ0ZW1wb3JhcnlMYWJlbFRleHQiLCAiaGFzQXR0cmlidXRlIiwgInJlc2V0RWxlbWVudExhYmVsIiwgImdldEF0dHJpYnV0ZSIsICJzZXRFbGVtZW50VmlzaWJpbGl0eSIsICJ2aXNpYmlsaXR5IiwgInRvZ2dsZSIsICJzZXRFbGVtZW50VG9vbHRpcFZpc2liaWxpdHkiLCAiSFRNTEZvcm1FbGVtZW50IiwgImdldENoZWNrZWQiLCAicmV0dXJuQXJyYXkiLCAiSFRNTFNlbGVjdEVsZW1lbnQiLCAib3B0aW9ucyIsICJIVE1MSW5wdXRFbGVtZW50IiwgImdldFVuY2hlY2tlZCIsICJpc0lQdjZBZGRyZXNzIiwgInRvVXBwZXJDYXNlIiwgImFiYnJldlBvcyIsICJDSURSU3RhcnQiLCAiYWRkcmVzc0VuZCIsICJyZXBlYXQiLCAicGFkIiwgInJlcGxhY2VtZW50IiwgInNwbGl0IiwgImlzUmFuZ2UiLCAiaXNJUEFkZHJlc3MiLCAidmFsaWRDSURSIiwgInN1Ym5ldCIsICJwYXJzZUludCIsICJnZXQ2NCIsICJpcHY2IiwgInN1Ym5ldE1hdGNoIiwgImlwUmVnZXgiLCAidG9VcHBlckNhc2VGaXJzdENoYXIiLCAidG9Mb3dlckNhc2VGaXJzdENoYXIiLCAic3BsaXRXZWlnaHRlZEJ5S2V5cyIsICJzdGFydCIsICJlbmQiLCAic2tpcGxpc3QiLCAibGV2ZWwiLCAiaW5pdGlhbCIsICJBcnJheSIsICJpc0FycmF5IiwgIlR5cGVFcnJvciIsICJfaXRlcmF0b3I2IiwgIl9zdGVwNiIsICJmb3JtYXRSZWFzb25UZXh0IiwgImFkZFNpZyIsICJyZWFzb24iLCAic2lnIiwgInNpZ0luZGV4IiwgImxhc3RJbmRleE9mIiwgImZvcm1hdFJlYXNvbkZvckxvZyIsICJzYWZlUmVwbGFjZSIsICJwYXR0ZXJuIiwgImlzSW5maW5pdHkiLCAiZXhwaXJ5IiwgImZvcm1hdFRpbWUiLCAidGltZSIsICJtIiwgIndnVUxTIiwgImFwcGVuZFB1bmN0dWF0aW9uIiwgInB1bmN0dWF0aW9uIiwgInNlYXJjaCIsICJhcnJheSIsICJ1bmlxIiwgImFyciIsICJpdGVtIiwgImlkeCIsICJkdXBzIiwgImNodW5rIiwgIm51bUNodW5rcyIsICJNYXRoIiwgImNlaWwiLCAiZnJvbSIsICJzZWxlY3QyIiwgIm1hdGNoZXJzIiwgIm9wdGdyb3VwRnVsbCIsICJwYXJhbXMiLCAib3JpZ2luYWxNYXRjaGVyIiwgImZuIiwgImRlZmF1bHRzIiwgIm1hdGNoZXIiLCAidGVybSIsICJjaGlsZHJlbiIsICJ3b3JkQmVnaW5uaW5nIiwgIlJlZ0V4cCIsICJ0ZXN0IiwgImhpZ2hsaWdodFNlYXJjaE1hdGNoZXMiLCAic2VhcmNoVGVybSIsICJzZWxlY3QyU2VhcmNoUXVlcnkiLCAibG9hZGluZyIsICJjc3MiLCAicXVlcnlJbnRlcmNlcHRvciIsICJhdXRvU3RhcnQiLCAiZXYiLCAid2hpY2giLCAiY2xvc2VzdCIsICJwcmV2IiwgImRyb3Bkb3duIiwgIiRzZWFyY2giLCAic2VsZWN0aW9uIiwgImZvY3VzIiwgImhpc3RvcnkiLCAicHJlZml4IiwgInJhbmRvbSIsICJwb3N0Zml4IiwgInJlIiwgImdldENhbGxiYWNrIiwgImhhc093biIsICJzZWxmIiwgImFyZ3MiLCAiX3RoaXMkX2QiLCAicGFyYW0iLCAiZGlnaXRNYXRjaCIsICJfZCIsICJEYXRlIiwgIlJlZmxlY3QiLCAiYXBwbHkiLCAiVVRDIiwgImRhdGVQYXJ0cyIsICJGdW5jdGlvbiIsICJiaW5kIiwgImlzVmFsaWQiLCAibG9nIiwgIm1vbnRoc1Nob3J0IiwgImRheXMiLCAiZGF5c1Nob3J0IiwgInJlbGF0aXZlVGltZXMiLCAidGhpc0RheSIsICJwcmV2RGF5IiwgIm5leHREYXkiLCAidGhpc1dlZWsiLCAicGFzdFdlZWsiLCAib3RoZXIiLCAidW5pdE1hcCIsICJzZWNvbmRzIiwgIm1pbnV0ZXMiLCAiaG91cnMiLCAid2Vla3MiLCAieWVhcnMiLCAiaXNOYU4iLCAiZ2V0VGltZSIsICJpc0JlZm9yZSIsICJpc0FmdGVyIiwgImdldFVUQ01vbnRoTmFtZSIsICJnZXRVVENNb250aCIsICJnZXRVVENNb250aE5hbWVBYmJyZXYiLCAiZ2V0TW9udGhOYW1lIiwgImdldE1vbnRoIiwgImdldE1vbnRoTmFtZUFiYnJldiIsICJnZXRVVENEYXlOYW1lIiwgImdldFVUQ0RheSIsICJnZXRVVENEYXlOYW1lQWJicmV2IiwgImdldERheU5hbWUiLCAiZ2V0RGF5IiwgImdldERheU5hbWVBYmJyZXYiLCAiYWRkIiwgInVuaXQiLCAibnVtIiwgInVuaXROb3JtIiwgImtleXMiLCAic3VidHJhY3QiLCAiZm9ybWF0IiwgImZvcm1hdHN0ciIsICJ6b25lIiwgInVkYXRlIiwgImdldFRpbWV6b25lT2Zmc2V0IiwgInRvSVNPU3RyaW5nIiwgImxlbiIsICJoMjQiLCAiZ2V0SG91cnMiLCAiZ2V0TWludXRlcyIsICJnZXRTZWNvbmRzIiwgIm1zIiwgImdldE1pbGxpc2Vjb25kcyIsICJEIiwgImdldERhdGUiLCAiTSIsICJZIiwgImdldEZ1bGxZZWFyIiwgImgxMiIsICJhbU9yUG0iLCAicmVwbGFjZW1lbnRNYXAiLCAiSEgiLCAiSCIsICJoaCIsICJoIiwgIkEiLCAibW0iLCAic3MiLCAiU1NTIiwgImRkZGQiLCAiZGRkIiwgImQiLCAiREQiLCAiTU1NTSIsICJNTU0iLCAiTU0iLCAiWVlZWSIsICJZWSIsICJTdHJpbmciLCAicmF3IiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgIl90ZW1wbGF0ZU9iamVjdDIiLCAiY2FsZW5kYXIiLCAiZGF0ZURpZmYiLCAic2V0SG91cnMiLCAibW9udGhIZWFkZXJSZWdleCIsICJnZXRVVENGdWxsWWVhciIsICJtb250aEhlYWRlciIsICJoZWFkZXIiLCAiX2l0ZXJhdG9yNyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIl9zdGVwNyIsICJmdW5jIiwgIndpa2kiLCAibnVtYmVyT2ZBY3Rpb25zTGVmdCIsICJuYnJPZkNoZWNrcG9pbnRzTGVmdCIsICJhY3Rpb25Db21wbGV0ZWQiLCAibm90aWNlIiwgInN0YXR1cyIsICJyZWRpcmVjdCIsICJmb2xsb3dSZWRpcmVjdCIsICJzZXRUaW1lb3V0IiwgImxvY2F0aW9uIiwgInRpbWVPdXQiLCAid3BBY3Rpb25Db21wbGV0ZWRUaW1lT3V0IiwgImFkZENoZWNrcG9pbnQiLCAicmVtb3ZlQ2hlY2twb2ludCIsICJhcGkiLCAiY3VycmVudEFjdGlvbiIsICJxdWVyeSIsICJvblN1Y2Nlc3MiLCAic3RhdHVzRWxlbWVudCIsICJvbkVycm9yIiwgIl90aGlzJHF1ZXJ5IiwgImFzc2VydCIsICJlcnJvcmZvcm1hdCIsICJ1c2VsYW5nIiwgImVycm9ybGFuZyIsICJlcnJvcnN1c2Vsb2NhbCIsICJzZXRTdGF0dXNFbGVtZW50IiwgInN0YXRlbGVtIiwgImZvcm1hdHZlcnNpb24iLCAiZXJyb3IiLCAiYWN0aW9uIiwgInRhZ3MiLCAibW9yZWJpdHNXaWtpQ2hhbmdlVGFnIiwgInBhcmVudCIsICJyZXNwb25zZSIsICJyZXNwb25zZVhNTCIsICJzdGF0dXNUZXh0IiwgImVycm9yQ29kZSIsICJlcnJvclRleHQiLCAiYmFkdG9rZW5SZXRyeSIsICJzZXRQYXJlbnQiLCAicG9zdCIsICJjYWxsZXJBamF4UGFyYW1ldGVycyIsICJxdWVyeVN0cmluZ0FyciIsICJfaTUiLCAiX09iamVjdCRlbnRyaWVzMiIsICJlbmNvZGVVUklDb21wb25lbnQiLCAicXVlcnlTdHJpbmciLCAiYWpheHBhcmFtcyIsICJjb250ZXh0IiwgInVybCIsICJ3aWtpU2NyaXB0IiwgImRhdGFUeXBlIiwgImhlYWRlcnMiLCAibW9yZWJpdHNXaWtpQXBpVXNlckFnZW50IiwgImFqYXgiLCAidGhlbiIsICJvbkFQSXN1Y2Nlc3MiLCAiZXJyb3JzIiwgImNvZGUiLCAiaHRtbCIsICJlcSIsICJhdHRyIiwgInJldHVybkVycm9yIiwgImNhbGwiLCAiaW5mbyIsICJEZWZlcnJlZCIsICJyZXNvbHZlV2l0aCIsICJvbkFQSWZhaWx1cmUiLCAiZXJyb3JUaHJvd24iLCAiZ2V0VG9rZW4iLCAidG9rZW4iLCAicmVqZWN0V2l0aCIsICJnZXRTdGF0dXNFbGVtZW50IiwgImdldEVycm9yQ29kZSIsICJnZXRFcnJvclRleHQiLCAiZ2V0WE1MIiwgImdldFJlc3BvbnNlIiwgImdldENhY2hlZEpzb24iLCAicHJvcCIsICJ0aXRsZXMiLCAicnZzbG90cyIsICJydnByb3AiLCAic21heGFnZSIsICJtYXhhZ2UiLCAiYXBpb2JqIiwgInVubGluayIsICJ3aWtpdGV4dCIsICJwYWdlcyIsICJyZXZpc2lvbnMiLCAic2xvdHMiLCAibWFpbiIsICJKU09OIiwgInBhcnNlIiwgInNldEFwaVVzZXJBZ2VudCIsICJ1YSIsICJ0b2tlbkFwaSIsICJtZXRhIiwgInRva2VucyIsICJjc3JmdG9rZW4iLCAicGFnZSIsICJjdHgiLCAicGFnZUV4aXN0cyIsICJlZGl0U3VtbWFyeSIsICJjaGFuZ2VUYWdzIiwgInRlc3RBY3Rpb25zIiwgImNhbGxiYWNrUGFyYW1ldGVycyIsICJwYWdlVGV4dCIsICJlZGl0TW9kZSIsICJhcHBlbmRUZXh0IiwgInByZXBlbmRUZXh0IiwgIm5ld1NlY3Rpb25UZXh0IiwgIm5ld1NlY3Rpb25UaXRsZSIsICJjcmVhdGVPcHRpb24iLCAibWlub3JFZGl0IiwgImJvdEVkaXQiLCAicGFnZVNlY3Rpb24iLCAibWF4Q29uZmxpY3RSZXRyaWVzIiwgIm1heFJldHJpZXMiLCAiZm9sbG93Q3Jvc3NOc1JlZGlyZWN0IiwgIndhdGNobGlzdE9wdGlvbiIsICJ3YXRjaGxpc3RFeHBpcnkiLCAiY3JlYXRvciIsICJ0aW1lc3RhbXAiLCAicmV2ZXJ0T2xkSUQiLCAibW92ZURlc3RpbmF0aW9uIiwgIm1vdmVUYWxrUGFnZSIsICJtb3ZlU3VicGFnZXMiLCAibW92ZVN1cHByZXNzUmVkaXJlY3QiLCAicHJvdGVjdEVkaXQiLCAicHJvdGVjdE1vdmUiLCAicHJvdGVjdENyZWF0ZSIsICJwcm90ZWN0Q2FzY2FkZSIsICJsb29rdXBOb25SZWRpcmVjdENyZWF0b3IiLCAicGFnZUxvYWRlZCIsICJjc3JmVG9rZW4iLCAibG9hZFRpbWUiLCAibGFzdEVkaXRUaW1lIiwgInBhZ2VJRCIsICJjb250ZW50TW9kZWwiLCAicmV2ZXJ0Q3VySUQiLCAicmV2ZXJ0VXNlciIsICJ3YXRjaGVkIiwgImZ1bGx5UHJvdGVjdGVkIiwgInN1cHByZXNzUHJvdGVjdFdhcm5pbmciLCAiY29uZmxpY3RSZXRyaWVzIiwgInJldHJpZXMiLCAib25Mb2FkU3VjY2VzcyIsICJvbkxvYWRGYWlsdXJlIiwgIm9uU2F2ZVN1Y2Nlc3MiLCAib25TYXZlRmFpbHVyZSIsICJvbkxvb2t1cENyZWF0aW9uU3VjY2VzcyIsICJvbkxvb2t1cENyZWF0aW9uRmFpbHVyZSIsICJvbk1vdmVTdWNjZXNzIiwgIm9uTW92ZUZhaWx1cmUiLCAib25EZWxldGVTdWNjZXNzIiwgIm9uRGVsZXRlRmFpbHVyZSIsICJvblVuZGVsZXRlU3VjY2VzcyIsICJvblVuZGVsZXRlRmFpbHVyZSIsICJvblByb3RlY3RTdWNjZXNzIiwgIm9uUHJvdGVjdEZhaWx1cmUiLCAibG9hZFF1ZXJ5IiwgImxvYWRBcGkiLCAic2F2ZUFwaSIsICJsb29rdXBDcmVhdGlvbkFwaSIsICJtb3ZlQXBpIiwgIm1vdmVQcm9jZXNzQXBpIiwgInBhdHJvbEFwaSIsICJwYXRyb2xQcm9jZXNzQXBpIiwgImRlbGV0ZUFwaSIsICJkZWxldGVQcm9jZXNzQXBpIiwgInVuZGVsZXRlQXBpIiwgInVuZGVsZXRlUHJvY2Vzc0FwaSIsICJwcm90ZWN0QXBpIiwgInByb3RlY3RQcm9jZXNzQXBpIiwgImVtcHR5RnVuY3Rpb24iLCAibG9hZCIsICJvbkZhaWx1cmUiLCAiaW5wcm9wIiwgImludGVzdGFjdGlvbnMiLCAiY3VydGltZXN0YW1wIiwgInJ2bGltaXQiLCAicnZzdGFydGlkIiwgInJlZGlyZWN0cyIsICJydnNlY3Rpb24iLCAiZm5Mb2FkU3VjY2VzcyIsICJzYXZlIiwgImNhblVzZU13VXNlclRva2VuIiwgImZuQ2FuVXNlTXdVc2VyVG9rZW4iLCAiY29uZmlybSIsICJzdW1tYXJ5IiwgInVzZXIiLCAid2F0Y2hsaXN0IiwgImZuQXBwbHlXYXRjaGxpc3RFeHBpcnkiLCAid2F0Y2hsaXN0ZXhwaXJ5IiwgInNlY3Rpb24iLCAibWlub3IiLCAibm90bWlub3IiLCAiYm90IiwgImFwcGVuZHRleHQiLCAicHJlcGVuZHRleHQiLCAic2VjdGlvbnRpdGxlIiwgInVuZG8iLCAidW5kb2FmdGVyIiwgImJhc2V0aW1lc3RhbXAiLCAic3RhcnR0aW1lc3RhbXAiLCAiZm5TYXZlU3VjY2VzcyIsICJmblNhdmVFcnJvciIsICJmbkF1dG9TYXZlIiwgInByZXBlbmQiLCAibmV3U2VjdGlvbiIsICJnZXRQYWdlTmFtZSIsICJnZXRQYWdlVGV4dCIsICJzZXRQYWdlVGV4dCIsICJzZXRBcHBlbmRUZXh0IiwgInNldFByZXBlbmRUZXh0IiwgInNldE5ld1NlY3Rpb25UZXh0IiwgInNldE5ld1NlY3Rpb25UaXRsZSIsICJzZXRFZGl0U3VtbWFyeSIsICJzZXRDaGFuZ2VUYWdzIiwgInNldENyZWF0ZU9wdGlvbiIsICJzZXRNaW5vckVkaXQiLCAic2V0Qm90RWRpdCIsICJzZXRQYWdlU2VjdGlvbiIsICJzZXRNYXhDb25mbGljdFJldHJpZXMiLCAic2V0TWF4UmV0cmllcyIsICJzZXRXYXRjaGxpc3QiLCAic2V0V2F0Y2hsaXN0RXhwaXJ5IiwgInNldFdhdGNobGlzdEZyb21QcmVmZXJlbmNlcyIsICJzZXRGb2xsb3dSZWRpcmVjdCIsICJzZXRMb29rdXBOb25SZWRpcmVjdENyZWF0b3IiLCAiZmxhZyIsICJzZXRNb3ZlRGVzdGluYXRpb24iLCAiZGVzdGluYXRpb24iLCAic2V0TW92ZVRhbGtQYWdlIiwgInNldE1vdmVTdWJwYWdlcyIsICJzZXRNb3ZlU3VwcHJlc3NSZWRpcmVjdCIsICJzZXRFZGl0UHJvdGVjdGlvbiIsICJzZXRNb3ZlUHJvdGVjdGlvbiIsICJzZXRDcmVhdGVQcm90ZWN0aW9uIiwgInNldENhc2NhZGluZ1Byb3RlY3Rpb24iLCAic2V0T2xkSUQiLCAib2xkSUQiLCAiZ2V0Q3VycmVudElEIiwgImdldFJldmlzaW9uVXNlciIsICJnZXRMYXN0RWRpdFRpbWUiLCAic2V0Q2FsbGJhY2tQYXJhbWV0ZXJzIiwgImdldENhbGxiYWNrUGFyYW1ldGVycyIsICJleGlzdHMiLCAiZ2V0UGFnZUlEIiwgImdldENvbnRlbnRNb2RlbCIsICJnZXRXYXRjaGVkIiwgImdldExvYWRUaW1lIiwgImdldENyZWF0b3IiLCAiZ2V0Q3JlYXRpb25UaW1lc3RhbXAiLCAiY2FuRWRpdCIsICJsb29rdXBDcmVhdGlvbiIsICJydmRpciIsICJmbkxvb2t1cENyZWF0aW9uU3VjY2VzcyIsICJyZXZlcnQiLCAibW92ZSIsICJmblByZWZsaWdodENoZWNrcyIsICJmblByb2Nlc3NNb3ZlIiwgImZuTmVlZFRva2VuSW5mb1F1ZXJ5IiwgInBhdHJvbCIsICIkYm9keSIsICJwYXRyb2xocmVmIiwgInJjaWQiLCAiZ2V0UGFyYW1WYWx1ZSIsICJmblByb2Nlc3NQYXRyb2wiLCAicGF0cm9sUXVlcnkiLCAicmNwcm9wIiwgInJjdGl0bGUiLCAicmNsaW1pdCIsICJkZWxldGVQYWdlIiwgImZuUHJvY2Vzc0RlbGV0ZSIsICJ1bmRlbGV0ZVBhZ2UiLCAiZm5Qcm9jZXNzVW5kZWxldGUiLCAicHJvdGVjdCIsICJmblByb2Nlc3NQcm90ZWN0IiwgImdldFByZWZpeGVkVGV4dCIsICJlZGl0UmVzdHJpY3Rpb24iLCAicGFnZW9iaiIsICJmbkNoZWNrUGFnZU5hbWUiLCAicmV2IiwgIm1pc3NpbmciLCAicGFnZWlkIiwgImNvbnRlbnRtb2RlbCIsICJlZGl0UHJvdCIsICJwcm90ZWN0aW9uIiwgInByIiwgInBvcCIsICJsYXN0cmV2aWQiLCAidGVzdGFjdGlvbnMiLCAiYWN0aW9ucyIsICJfaTYiLCAiX09iamVjdCRrZXlzIiwgInJldmlkIiwgInVzZXJoaWRkZW4iLCAiaW52YWxpZCIsICJyZXNvbHZlZE5hbWUiLCAib3JpZ05zIiwgIm5hbWVzcGFjZSIsICJuZXdOcyIsICJuZXdFeHBpcnkiLCAicmVsIiwgImVkaXQiLCAibGluayIsICJjYXB0Y2hhIiwgInB1cmdlUXVlcnkiLCAicHVyZ2VBcGkiLCAic2xlZXAiLCAiZXJyb3JEYXRhIiwgImFidXNlZmlsdGVyIiwgImRlc2NyaXB0aW9uIiwgInNwYW0iLCAic3BhbWJsYWNrbGlzdCIsICJtYXRjaGVzIiwgImlzVGV4dFJlZGlyZWN0IiwgInNvbWUiLCAidGFnIiwgImZuTG9va3VwTm9uUmVkaXJlY3RDcmVhdG9yIiwgInJldnMiLCAiX2l0ZXJhdG9yOCIsICJfc3RlcDgiLCAiZm5Qcm9jZXNzQ2hlY2tzIiwgImFjdGlvbk1pc3NpbmciLCAicHJvdGVjdE1pc3NpbmciLCAic2FsdE1pc3NpbmciLCAiZWRpdHByb3QiLCAicGFnZVRpdGxlIiwgInRvIiwgIm1vdmV0YWxrIiwgIm1vdmVzdWJwYWdlcyIsICJub3JlZGlyZWN0IiwgInJlY2VudGNoYW5nZXMiLCAidW5wYXRyb2xsZWQiLCAicGF0cm9sU3RhdCIsICJmblByb2Nlc3NEZWxldGVFcnJvciIsICJmblByb2Nlc3NVbmRlbGV0ZUVycm9yIiwgInBycyIsICJtb3ZlcHJvdCIsICJjcmVhdGVwcm90IiwgIl9pdGVyYXRvcjkiLCAiX3N0ZXA5IiwgInNvdXJjZSIsICJjYXNjYWRlIiwgInByb3RlY3Rpb25zIiwgImV4cGlyeXMiLCAibWlsbGlzZWNvbmRzIiwgImRlZmVycmVkIiwgInJlc29sdmUiLCAicHJldmlldyIsICJwcmV2aWV3Ym94IiwgImFkZENsYXNzIiwgImhpZGUiLCAiYmVnaW5SZW5kZXIiLCAic2VjdGlvblRpdGxlIiwgInNob3ciLCAic3RhdHVzc3BhbiIsICJpbml0IiwgInBzdCIsICJkaXNhYmxlbGltaXRyZXBvcnQiLCAiZGlzYWJsZWVkaXRzZWN0aW9uIiwgInJlbmRlckFwaSIsICJmblJlbmRlclN1Y2Nlc3MiLCAiaW5uZXJIVE1MIiwgImxvYWRlciIsICJtb2R1bGVzdHlsZXMiLCAibW9kdWxlcyIsICJjbG9zZVByZXZpZXciLCAiZW1wdHkiLCAicGFyc2VUZW1wbGF0ZSIsICJjb3VudCIsICJ1bm5hbWVkIiwgImVxdWFscyIsICJwYXJhbWV0ZXJzIiwgImtleSIsICJmaW5kUGFyYW0iLCAiZmluYWwiLCAidGVzdDMiLCAidGVzdDIiLCAiY2hhckF0IiwgInJlbW92ZUxpbmsiLCAibGlua1RhcmdldCIsICJtd1RpdGxlIiwgIm5ld0Zyb21UZXh0IiwgIm5hbWVzcGFjZUlEIiwgImdldE5hbWVzcGFjZUlkIiwgImdldE1haW5UZXh0IiwgImxpbmtSZWdleFN0cmluZyIsICJpc0ZpbGVPckNhdGVnb3J5IiwgImNvbG9uIiwgInNpbXBsZUxpbmtSZWdleCIsICJwaXBlZExpbmtSZWdleCIsICJjb21tZW50T3V0SW1hZ2UiLCAiaW1hZ2UiLCAiaW1hZ2VSZWdleFN0cmluZyIsICJsaW5rc1JlZ2V4IiwgImFsbExpbmtzIiwgIl9pdGVyYXRvcjEwIiwgIl9zdGVwMTAiLCAiYWxsTGluayIsICJnYWxsZXJ5SW1hZ2VSZWdleCIsICJmcmVlSW1hZ2VSZWdleCIsICJhZGRUb0ltYWdlQ29tbWVudCIsICJfaXRlcmF0b3IxMSIsICJfc3RlcDExIiwgImdhbGxlcnlSZWdleCIsICJuZXd0ZXh0IiwgInJlbW92ZVRlbXBsYXRlIiwgInRlbXBsYXRlIiwgInRlbXBsYXRlUmVnZXhTdHJpbmciLCAiYWxsVGVtcGxhdGVzIiwgIl9pdGVyYXRvcjEyIiwgIl9zdGVwMTIiLCAiYWxsVGVtcGxhdGUiLCAiaW5zZXJ0QWZ0ZXJUZW1wbGF0ZXMiLCAiZmxhZ3MiLCAicHJlUmVnZXgiLCAiZ2V0VGV4dCIsICJ1c2Vyc3BhY2VMb2dnZXIiLCAibG9nUGFnZU5hbWUiLCAiaW5pdGlhbFRleHQiLCAiaGVhZGVyTGV2ZWwiLCAibG9nVGV4dCIsICJzdW1tYXJ5VGV4dCIsICJkZWYiLCAicmVqZWN0IiwgInN0YXQiLCAidGV4dFJhdyIsICJnZW5lcmF0ZSIsICJ1cGRhdGUiLCAiRWxlbWVudCIsICJoYXNDaGlsZE5vZGVzIiwgImVycm9yRXZlbnQiLCAiaGFuZGxlciIsICJzdGF0UmF3IiwgImxpbmtlZCIsICJwcmludFVzZXJUZXh0IiwgImNvbW1lbnRzIiwgIm1lc3NhZ2UiLCAicCIsICJkaXYiLCAibWFyZ2luVG9wIiwgIndoaXRlU3BhY2UiLCAiaHRtbE5vZGUiLCAiY29sb3IiLCAialF1ZXJ5U2VsZWN0b3IiLCAialF1ZXJ5Q29udGV4dCIsICJsYXN0Q2hlY2tib3giLCAiY2xpY2tIYW5kbGVyIiwgImNsaWNrSGFuZGxlcjIiLCAidGhpc0NiIiwgInNoaWZ0S2V5IiwgImNicyIsICJpbmRleCIsICJsYXN0SW5kZXgiLCAiZW5kU3RhdGUiLCAiZmluaXNoIiwgImNsaWNrIiwgIm9uIiwgImJhdGNoT3BlcmF0aW9uIiwgInBhZ2VMaXN0IiwgImNodW5rU2l6ZSIsICJwcmVzZXJ2ZUluZGl2aWR1YWxTdGF0dXNMaW5lcyIsICJ3b3JrZXIiLCAicG9zdEZpbmlzaCIsICJjb3VudFN0YXJ0ZWQiLCAiY291bnRGaW5pc2hlZCIsICJjb3VudEZpbmlzaGVkU3VjY2VzcyIsICJjdXJyZW50Q2h1bmtJbmRleCIsICJwYWdlQ2h1bmtzIiwgInJ1bm5pbmciLCAic2V0UGFnZUxpc3QiLCAic2V0T3B0aW9uIiwgIm9wdGlvbk5hbWUiLCAib3B0aW9uVmFsdWUiLCAicnVuIiwgInRvdGFsIiwgImZuU3RhcnROZXdDaHVuayIsICJ3b3JrZXJTdWNjZXNzIiwgImFyZyIsICJmbkRvbmVPbmUiLCAid29ya2VyRmFpbHVyZSIsICJ0aGlzUHJveHkiLCAiX2l0ZXJhdG9yMTMiLCAiX3N0ZXAxMyIsICJwcm9ncmVzcyIsICJyb3VuZCIsICJmbG9vciIsICJzdGF0dXNTdHJpbmciLCAic2ltcGxlV2luZG93IiwgIndpZHRoIiwgImhlaWdodCIsICJkaWFsb2ciLCAiYXV0b09wZW4iLCAiYnV0dG9ucyIsICJQbGFjZWhvbGRlciBidXR0b24iLCAiZGlhbG9nQ2xhc3MiLCAiaW5uZXJXaWR0aCIsICJjbG9zZSIsICJyZXNpemVTdGFydCIsICJzY3JvbGxib3giLCAibWF4SGVpZ2h0IiwgInJlc2l6ZVN0b3AiLCAicmVzaXplIiwgIiR3aWRnZXQiLCAiZWFjaCIsICJidXR0b25zcGFuIiwgImxpbmtzc3BhbiIsICJyZXNpemFibGUiLCAiaGFzRm9vdGVyTGlua3MiLCAic2NyaXB0TmFtZSIsICJwcmV2ZW50RGVmYXVsdCIsICJkaXNwbGF5IiwgInNjcmlwdG5hbWVzcGFuIiwgInNldHVwVG9vbHRpcHMiLCAicGciLCAiZGlmZiIsICJyYW5TZXR1cFRvb2x0aXBzQWxyZWFkeSIsICJzZXRIZWlnaHQiLCAic2V0VGl0bGUiLCAic2V0U2NyaXB0TmFtZSIsICJzZXRXaWR0aCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlubmVySGVpZ2h0IiwgInNldENvbnRlbnQiLCAicHVyZ2VDb250ZW50IiwgImFkZENvbnRlbnQiLCAiYnV0dG9uIiwgImFkZEZvb3RlckxpbmsiLCAid2lraVBhZ2UiLCAicHJlcCIsICIkZm9vdGVybGlua3MiLCAiYnVsbGV0IiwgInNldE1vZGFsaXR5IiwgIm1vZGFsIiwgInNldEJ1dHRvbnNFbmFibGVkIiwgImVuYWJsZWQiLCAialF1ZXJ5Il0KfQo= diff --git a/dist/select2/select2.js b/dist/select2/select2.js index 1e53ca3d..b2b5a1fb 100644 --- a/dist/select2/select2.js +++ b/dist/select2/select2.js @@ -27,9 +27,9 @@ var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js var require_global_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/global-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/global-this.js"(exports, module2) { "use strict"; var check = function(it) { return it && it.Math === Math && it; @@ -43,9 +43,9 @@ var require_global_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js var require_fails = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/fails.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/fails.js"(exports, module2) { "use strict"; module2.exports = function(exec) { try { @@ -57,9 +57,9 @@ var require_fails = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js var require_descriptors = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/descriptors.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/descriptors.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -70,9 +70,9 @@ var require_descriptors = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js var require_function_bind_native = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-bind-native.js"(exports, module2) { "use strict"; var fails = require_fails(); module2.exports = !fails(function() { @@ -83,9 +83,9 @@ var require_function_bind_native = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js var require_function_call = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-call.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-call.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var call = Function.prototype.call; @@ -95,9 +95,9 @@ var require_function_call = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js var require_object_property_is_enumerable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) { "use strict"; var $propertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; @@ -109,9 +109,9 @@ var require_object_property_is_enumerable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js var require_create_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) { "use strict"; module2.exports = function(bitmap, value) { return { @@ -124,9 +124,9 @@ var require_create_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js var require_function_uncurry_this = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) { "use strict"; var NATIVE_BIND = require_function_bind_native(); var FunctionPrototype = Function.prototype; @@ -140,9 +140,9 @@ var require_function_uncurry_this = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js var require_classof_raw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/classof-raw.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toString = uncurryThis({}.toString); @@ -153,9 +153,9 @@ var require_classof_raw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js var require_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/indexed-object.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -170,9 +170,9 @@ var require_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js var require_is_null_or_undefined = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) { "use strict"; module2.exports = function(it) { return it === null || it === void 0; @@ -180,9 +180,9 @@ var require_is_null_or_undefined = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js var require_require_object_coercible = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) { "use strict"; var isNullOrUndefined = require_is_null_or_undefined(); var $TypeError = TypeError; @@ -193,9 +193,9 @@ var require_require_object_coercible = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js var require_to_indexed_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) { "use strict"; var IndexedObject = require_indexed_object(); var requireObjectCoercible = require_require_object_coercible(); @@ -205,9 +205,9 @@ var require_to_indexed_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js var require_is_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-callable.js"(exports, module2) { "use strict"; var documentAll = typeof document == "object" && document.all; module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) { @@ -218,9 +218,9 @@ var require_is_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js var require_is_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-object.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); module2.exports = function(it) { @@ -229,9 +229,9 @@ var require_is_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js var require_get_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-built-in.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -244,18 +244,18 @@ var require_get_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js var require_object_is_prototype_of = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); module2.exports = uncurryThis({}.isPrototypeOf); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js var require_environment_user_agent = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var navigator = globalThis2.navigator; @@ -264,9 +264,9 @@ var require_environment_user_agent = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js var require_environment_v8_version = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var userAgent = require_environment_user_agent(); @@ -291,9 +291,9 @@ var require_environment_v8_version = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js var require_symbol_constructor_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) { "use strict"; var V8_VERSION = require_environment_v8_version(); var fails = require_fails(); @@ -307,18 +307,18 @@ var require_symbol_constructor_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js var require_use_symbol_as_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) { "use strict"; var NATIVE_SYMBOL = require_symbol_constructor_detection(); module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js var require_is_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-symbol.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var isCallable = require_is_callable(); @@ -334,9 +334,9 @@ var require_is_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js var require_try_to_string = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/try-to-string.js"(exports, module2) { "use strict"; var $String = String; module2.exports = function(argument) { @@ -349,9 +349,9 @@ var require_try_to_string = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js var require_a_callable = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/a-callable.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/a-callable.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var tryToString = require_try_to_string(); @@ -363,9 +363,9 @@ var require_a_callable = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js var require_get_method = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/get-method.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/get-method.js"(exports, module2) { "use strict"; var aCallable = require_a_callable(); var isNullOrUndefined = require_is_null_or_undefined(); @@ -376,9 +376,9 @@ var require_get_method = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js var require_ordinary_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isCallable = require_is_callable(); @@ -394,17 +394,17 @@ var require_ordinary_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js var require_is_pure = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-pure.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-pure.js"(exports, module2) { "use strict"; module2.exports = false; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js var require_define_global_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-global-property.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var defineProperty = Object.defineProperty; @@ -419,9 +419,9 @@ var require_define_global_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js var require_shared_store = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-store.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-store.js"(exports, module2) { "use strict"; var IS_PURE = require_is_pure(); var globalThis2 = require_global_this(); @@ -429,18 +429,18 @@ var require_shared_store = __commonJS({ var SHARED = "__core-js_shared__"; var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {}); (store.versions || (store.versions = [])).push({ - version: "3.38.0", + version: "3.38.1", mode: IS_PURE ? "pure" : "global", copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)", - license: "https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE", + license: "https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE", source: "https://github.com/zloirock/core-js" }); } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js var require_shared = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared.js"(exports, module2) { "use strict"; var store = require_shared_store(); module2.exports = function(key, value) { @@ -449,9 +449,9 @@ var require_shared = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js var require_to_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-object.js"(exports, module2) { "use strict"; var requireObjectCoercible = require_require_object_coercible(); var $Object = Object; @@ -461,9 +461,9 @@ var require_to_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js var require_has_own_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/has-own-property.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var toObject = require_to_object(); @@ -474,9 +474,9 @@ var require_has_own_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js var require_uid = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/uid.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/uid.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var id = 0; @@ -488,9 +488,9 @@ var require_uid = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js var require_well_known_symbol = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var shared = require_shared(); @@ -510,9 +510,9 @@ var require_well_known_symbol = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js var require_to_primitive = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-primitive.js"(exports, module2) { "use strict"; var call = require_function_call(); var isObject = require_is_object(); @@ -538,9 +538,9 @@ var require_to_primitive = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js var require_to_property_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-property-key.js"(exports, module2) { "use strict"; var toPrimitive = require_to_primitive(); var isSymbol = require_is_symbol(); @@ -551,9 +551,9 @@ var require_to_property_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js var require_document_create_element = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/document-create-element.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isObject = require_is_object(); @@ -565,9 +565,9 @@ var require_document_create_element = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js var require_ie8_dom_define = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -582,9 +582,9 @@ var require_ie8_dom_define = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js var require_object_get_own_property_descriptor = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var call = require_function_call(); @@ -607,9 +607,9 @@ var require_object_get_own_property_descriptor = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js var require_v8_prototype_define_bug = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var fails = require_fails(); @@ -623,9 +623,9 @@ var require_v8_prototype_define_bug = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js var require_an_object = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/an-object.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/an-object.js"(exports, module2) { "use strict"; var isObject = require_is_object(); var $String = String; @@ -637,9 +637,9 @@ var require_an_object = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js var require_object_define_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-define-property.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-define-property.js"(exports) { "use strict"; var DESCRIPTORS = require_descriptors(); var IE8_DOM_DEFINE = require_ie8_dom_define(); @@ -683,9 +683,9 @@ var require_object_define_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js var require_create_non_enumerable_property = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var definePropertyModule = require_object_define_property(); @@ -699,9 +699,9 @@ var require_create_non_enumerable_property = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js var require_function_name = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/function-name.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/function-name.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var hasOwn = require_has_own_property(); @@ -719,9 +719,9 @@ var require_function_name = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js var require_inspect_source = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/inspect-source.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var isCallable = require_is_callable(); @@ -736,9 +736,9 @@ var require_inspect_source = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js var require_weak_map_basic_detection = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var isCallable = require_is_callable(); @@ -747,9 +747,9 @@ var require_weak_map_basic_detection = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js var require_shared_key = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/shared-key.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/shared-key.js"(exports, module2) { "use strict"; var shared = require_shared(); var uid = require_uid(); @@ -760,17 +760,17 @@ var require_shared_key = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js var require_hidden_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/hidden-keys.js"(exports, module2) { "use strict"; module2.exports = {}; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js var require_internal_state = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/internal-state.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/internal-state.js"(exports, module2) { "use strict"; var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); var globalThis2 = require_global_this(); @@ -843,9 +843,9 @@ var require_internal_state = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js var require_make_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/make-built-in.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var fails = require_fails(); @@ -898,9 +898,9 @@ var require_make_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js var require_define_built_in = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/define-built-in.js"(exports, module2) { "use strict"; var isCallable = require_is_callable(); var definePropertyModule = require_object_define_property(); @@ -933,9 +933,9 @@ var require_define_built_in = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js var require_math_trunc = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/math-trunc.js"(exports, module2) { "use strict"; var ceil = Math.ceil; var floor = Math.floor; @@ -946,9 +946,9 @@ var require_math_trunc = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js var require_to_integer_or_infinity = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) { "use strict"; var trunc = require_math_trunc(); module2.exports = function(argument) { @@ -958,9 +958,9 @@ var require_to_integer_or_infinity = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js var require_to_absolute_index = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var max = Math.max; @@ -972,9 +972,9 @@ var require_to_absolute_index = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js var require_to_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/to-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/to-length.js"(exports, module2) { "use strict"; var toIntegerOrInfinity = require_to_integer_or_infinity(); var min = Math.min; @@ -985,9 +985,9 @@ var require_to_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js var require_length_of_array_like = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) { "use strict"; var toLength = require_to_length(); module2.exports = function(obj) { @@ -996,9 +996,9 @@ var require_length_of_array_like = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js var require_array_includes = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-includes.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-includes.js"(exports, module2) { "use strict"; var toIndexedObject = require_to_indexed_object(); var toAbsoluteIndex = require_to_absolute_index(); @@ -1031,9 +1031,9 @@ var require_array_includes = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js var require_object_keys_internal = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) { "use strict"; var uncurryThis = require_function_uncurry_this(); var hasOwn = require_has_own_property(); @@ -1055,9 +1055,9 @@ var require_object_keys_internal = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js var require_enum_bug_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) { "use strict"; module2.exports = [ "constructor", @@ -1071,9 +1071,9 @@ var require_enum_bug_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js var require_object_get_own_property_names = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-names.js"(exports) { "use strict"; var internalObjectKeys = require_object_keys_internal(); var enumBugKeys = require_enum_bug_keys(); @@ -1084,17 +1084,17 @@ var require_object_get_own_property_names = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js var require_object_get_own_property_symbols = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) { "use strict"; exports.f = Object.getOwnPropertySymbols; } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js var require_own_keys = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/own-keys.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/own-keys.js"(exports, module2) { "use strict"; var getBuiltIn = require_get_built_in(); var uncurryThis = require_function_uncurry_this(); @@ -1110,9 +1110,9 @@ var require_own_keys = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js var require_copy_constructor_properties = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) { "use strict"; var hasOwn = require_has_own_property(); var ownKeys = require_own_keys(); @@ -1132,9 +1132,9 @@ var require_copy_constructor_properties = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js var require_is_forced = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-forced.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-forced.js"(exports, module2) { "use strict"; var fails = require_fails(); var isCallable = require_is_callable(); @@ -1153,9 +1153,9 @@ var require_is_forced = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js var require_export = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/export.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/export.js"(exports, module2) { "use strict"; var globalThis2 = require_global_this(); var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; @@ -1196,9 +1196,9 @@ var require_export = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js var require_is_array = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/is-array.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/is-array.js"(exports, module2) { "use strict"; var classof = require_classof_raw(); module2.exports = Array.isArray || function isArray(argument) { @@ -1207,9 +1207,9 @@ var require_is_array = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js var require_array_set_length = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/array-set-length.js"(exports, module2) { "use strict"; var DESCRIPTORS = require_descriptors(); var isArray = require_is_array(); @@ -1234,9 +1234,9 @@ var require_array_set_length = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js var require_does_not_exceed_safe_integer = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) { "use strict"; var $TypeError = TypeError; var MAX_SAFE_INTEGER = 9007199254740991; @@ -1247,9 +1247,9 @@ var require_does_not_exceed_safe_integer = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js var require_es_array_push = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.push.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.push.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -1286,9 +1286,9 @@ var require_es_array_push = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/delete-property-or-throw.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/delete-property-or-throw.js var require_delete_property_or_throw = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/internals/delete-property-or-throw.js"(exports, module2) { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/internals/delete-property-or-throw.js"(exports, module2) { "use strict"; var tryToString = require_try_to_string(); var $TypeError = TypeError; @@ -1298,9 +1298,9 @@ var require_delete_property_or_throw = __commonJS({ } }); -// node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.unshift.js +// node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.unshift.js var require_es_array_unshift = __commonJS({ - "node_modules/.pnpm/core-js@3.38.0/node_modules/core-js/modules/es.array.unshift.js"() { + "node_modules/.pnpm/core-js@3.38.1/node_modules/core-js/modules/es.array.unshift.js"() { "use strict"; var $2 = require_export(); var toObject = require_to_object(); @@ -3863,4 +3863,4 @@ require_es_array_unshift(); /* */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2hpZnQuanMiLCAic3JjL3NlbGVjdDIvc2VsZWN0Mi5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjAvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCA8PSAxMjEgYW5kIFNhZmFyaSA8PSAxNS40OyBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcblxuLy8gSUU4LVxudmFyIElOQ09SUkVDVF9SRVNVTFQgPSBbXS51bnNoaWZ0KDApICE9PSAxO1xuXG4vLyBWOCB+IENocm9tZSA8IDcxIGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS51bnNoaWZ0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1JFU1VMVCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUudW5zaGlmdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS51bnNoaWZ0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdW5zaGlmdDogZnVuY3Rpb24gdW5zaGlmdChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnQ291bnQpIHtcbiAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgICB2YXIgayA9IGxlbjtcbiAgICAgIHdoaWxlIChrLS0pIHtcbiAgICAgICAgdmFyIHRvID0gayArIGFyZ0NvdW50O1xuICAgICAgICBpZiAoayBpbiBPKSBPW3RvXSA9IE9ba107XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJnQ291bnQ7IGorKykge1xuICAgICAgICBPW2pdID0gYXJndW1lbnRzW2pdO1xuICAgICAgfVxuICAgIH0gcmV0dXJuIHNldEFycmF5TGVuZ3RoKE8sIGxlbiArIGFyZ0NvdW50KTtcbiAgfVxufSk7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCAnLi9zZWxlY3QyLmxlc3MnO1xuXG4hKGZ1bmN0aW9uIChuKSB7XG5cdCdmdW5jdGlvbicgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kXG5cdFx0PyBkZWZpbmUoWydqcXVlcnknXSwgbilcblx0XHQ6IC8qXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9yZXF1aXJlKFwianF1ZXJ5XCIpOnJlcXVpcmUoXCJqcXVlcnlcIikoZSkpLG4odCksdH06Ki8gbihcblx0XHRcdFx0alF1ZXJ5XG5cdFx0XHQpO1xufSkoZnVuY3Rpb24gKHUpIHtcblx0dmFyIGUgPSAoZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKHUgJiYgdS5mbiAmJiB1LmZuLnNlbGVjdDIgJiYgdS5mbi5zZWxlY3QyLmFtZCkgdmFyIGUgPSB1LmZuLnNlbGVjdDIuYW1kO1xuXHRcdFx0dmFyIHQsIG4sIHIsIGgsIG8sIHMsIGYsIGcsIG0sIHYsIHksIF8sIGksIGEsIHc7XG5cdFx0XHRmdW5jdGlvbiBiKGUsIHQpIHtcblx0XHRcdFx0cmV0dXJuIGkuY2FsbChlLCB0KTtcblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIGwoZSwgdCkge1xuXHRcdFx0XHR2YXIgbixcblx0XHRcdFx0XHRyLFxuXHRcdFx0XHRcdGksXG5cdFx0XHRcdFx0byxcblx0XHRcdFx0XHRzLFxuXHRcdFx0XHRcdGEsXG5cdFx0XHRcdFx0bCxcblx0XHRcdFx0XHRjLFxuXHRcdFx0XHRcdHUsXG5cdFx0XHRcdFx0ZCxcblx0XHRcdFx0XHRwLFxuXHRcdFx0XHRcdGggPSB0ICYmIHQuc3BsaXQoJy8nKSxcblx0XHRcdFx0XHRmID0geS5tYXAsXG5cdFx0XHRcdFx0ZyA9IChmICYmIGZbJyonXSkgfHwge307XG5cdFx0XHRcdGlmIChlKSB7XG5cdFx0XHRcdFx0Zm9yIChcblx0XHRcdFx0XHRcdHMgPSAoZSA9IGUuc3BsaXQoJy8nKSkubGVuZ3RoIC0gMSxcblx0XHRcdFx0XHRcdFx0eS5ub2RlSWRDb21wYXQgJiYgdy50ZXN0KGVbc10pICYmIChlW3NdID0gZVtzXS5yZXBsYWNlKHcsICcnKSksXG5cdFx0XHRcdFx0XHRcdCcuJyA9PT0gZVswXS5jaGFyQXQoMCkgJiYgaCAmJiAoZSA9IGguc2xpY2UoMCwgaC5sZW5ndGggLSAxKS5jb25jYXQoZSkpLFxuXHRcdFx0XHRcdFx0XHR1ID0gMDtcblx0XHRcdFx0XHRcdHUgPCBlLmxlbmd0aDtcblx0XHRcdFx0XHRcdHUrK1xuXHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdGlmICgnLicgPT09IChwID0gZVt1XSkpIGUuc3BsaWNlKHUsIDEpLCAodSAtPSAxKTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKCcuLicgPT09IHApIHtcblx0XHRcdFx0XHRcdFx0aWYgKDAgPT09IHUgfHwgKDEgPT09IHUgJiYgJy4uJyA9PT0gZVsyXSkgfHwgJy4uJyA9PT0gZVt1IC0gMV0pIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0XHQwIDwgdSAmJiAoZS5zcGxpY2UodSAtIDEsIDIpLCAodSAtPSAyKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZSA9IGUuam9pbignLycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgoaCB8fCBnKSAmJiBmKSB7XG5cdFx0XHRcdFx0Zm9yICh1ID0gKG4gPSBlLnNwbGl0KCcvJykpLmxlbmd0aDsgMCA8IHU7IHUgLT0gMSkge1xuXHRcdFx0XHRcdFx0aWYgKCgociA9IG4uc2xpY2UoMCwgdSkuam9pbignLycpKSwgaCkpXG5cdFx0XHRcdFx0XHRcdGZvciAoZCA9IGgubGVuZ3RoOyAwIDwgZDsgZCAtPSAxKVxuXHRcdFx0XHRcdFx0XHRcdGlmICgoaSA9IChpID0gZltoLnNsaWNlKDAsIGQpLmpvaW4oJy8nKV0pICYmIGlbcl0pKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQobyA9IGkpLCAoYSA9IHUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKG8pIGJyZWFrO1xuXHRcdFx0XHRcdFx0IWwgJiYgZyAmJiBnW3JdICYmICgobCA9IGdbcl0pLCAoYyA9IHUpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0IW8gJiYgbCAmJiAoKG8gPSBsKSwgKGEgPSBjKSksIG8gJiYgKG4uc3BsaWNlKDAsIGEsIG8pLCAoZSA9IG4uam9pbignLycpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGU7XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBBKHQsIG4pIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR2YXIgZSA9IGEuY2FsbChhcmd1bWVudHMsIDApO1xuXHRcdFx0XHRcdHJldHVybiAnc3RyaW5nJyAhPSB0eXBlb2YgZVswXSAmJiAxID09PSBlLmxlbmd0aCAmJiBlLnB1c2gobnVsbCksIHMuYXBwbHkoaCwgZS5jb25jYXQoW3QsIG5dKSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiB4KHQpIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0bVt0XSA9IGU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBEKGUpIHtcblx0XHRcdFx0aWYgKGIodiwgZSkpIHtcblx0XHRcdFx0XHR2YXIgdCA9IHZbZV07XG5cdFx0XHRcdFx0ZGVsZXRlIHZbZV0sIChfW2VdID0gITApLCBvLmFwcGx5KGgsIHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghYihtLCBlKSAmJiAhYihfLCBlKSkgdGhyb3cgbmV3IEVycm9yKCdObyAnICsgZSk7XG5cdFx0XHRcdHJldHVybiBtW2VdO1xuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gYyhlKSB7XG5cdFx0XHRcdHZhciB0LFxuXHRcdFx0XHRcdG4gPSBlID8gZS5pbmRleE9mKCchJykgOiAtMTtcblx0XHRcdFx0cmV0dXJuIC0xIDwgbiAmJiAoKHQgPSBlLnN1YnN0cmluZygwLCBuKSksIChlID0gZS5zdWJzdHJpbmcobiArIDEsIGUubGVuZ3RoKSkpLCBbdCwgZV07XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBTKGUpIHtcblx0XHRcdFx0cmV0dXJuIGUgPyBjKGUpIDogW107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQoZSAmJiBlLnJlcXVpcmVqcykgfHxcblx0XHRcdFx0XHQoZSA/IChuID0gZSkgOiAoZSA9IHt9KSxcblx0XHRcdFx0XHQobSA9IHt9KSxcblx0XHRcdFx0XHQodiA9IHt9KSxcblx0XHRcdFx0XHQoeSA9IHt9KSxcblx0XHRcdFx0XHQoXyA9IHt9KSxcblx0XHRcdFx0XHQoaSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLFxuXHRcdFx0XHRcdChhID0gW10uc2xpY2UpLFxuXHRcdFx0XHRcdCh3ID0gL1xcLmpzJC8pLFxuXHRcdFx0XHRcdChmID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdHZhciBuLFxuXHRcdFx0XHRcdFx0XHRyID0gYyhlKSxcblx0XHRcdFx0XHRcdFx0aSA9IHJbMF0sXG5cdFx0XHRcdFx0XHRcdG8gPSB0WzFdO1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0KGUgPSByWzFdKSxcblx0XHRcdFx0XHRcdFx0aSAmJiAobiA9IEQoKGkgPSBsKGksIG8pKSkpLFxuXHRcdFx0XHRcdFx0XHRpXG5cdFx0XHRcdFx0XHRcdFx0PyAoZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4gJiYgbi5ub3JtYWxpemVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IG4ubm9ybWFsaXplKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBsKGUsIHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pKG8pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBsKGUsIG8pKVxuXHRcdFx0XHRcdFx0XHRcdDogKChpID0gKHIgPSBjKChlID0gbChlLCBvKSkpKVswXSksIChlID0gclsxXSksIGkgJiYgKG4gPSBEKGkpKSksXG5cdFx0XHRcdFx0XHRcdHtmOiBpID8gaSArICchJyArIGUgOiBlLCBuOiBlLCBwcjogaSwgcDogbn1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0KGcgPSB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gQShlKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRleHBvcnRzOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IG1bZV07XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2b2lkIDAgIT09IHQgPyB0IDogKG1bZV0gPSB7fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kdWxlOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGlkOiBlLFxuXHRcdFx0XHRcdFx0XHRcdHVyaTogJycsXG5cdFx0XHRcdFx0XHRcdFx0ZXhwb3J0czogbVtlXSxcblx0XHRcdFx0XHRcdFx0XHRjb25maWc6IChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuICh5ICYmIHkuY29uZmlnICYmIHkuY29uZmlnW2VdKSB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0fSkoZSksXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdChvID0gZnVuY3Rpb24gKGUsIHQsIG4sIHIpIHtcblx0XHRcdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdFx0XHRvLFxuXHRcdFx0XHRcdFx0XHRzLFxuXHRcdFx0XHRcdFx0XHRhLFxuXHRcdFx0XHRcdFx0XHRsLFxuXHRcdFx0XHRcdFx0XHRjLFxuXHRcdFx0XHRcdFx0XHR1LFxuXHRcdFx0XHRcdFx0XHRkID0gW10sXG5cdFx0XHRcdFx0XHRcdHAgPSB0eXBlb2Ygbjtcblx0XHRcdFx0XHRcdGlmICgoKGMgPSBTKChyID0gciB8fCBlKSkpLCAndW5kZWZpbmVkJyA9PSBwIHx8ICdmdW5jdGlvbicgPT0gcCkpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChcblx0XHRcdFx0XHRcdFx0XHR0ID0gIXQubGVuZ3RoICYmIG4ubGVuZ3RoID8gWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10gOiB0LCBsID0gMDtcblx0XHRcdFx0XHRcdFx0XHRsIDwgdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0bCArPSAxXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRpZiAoJ3JlcXVpcmUnID09PSAobyA9IChhID0gZih0W2xdLCBjKSkuZikpIGRbbF0gPSBnLnJlcXVpcmUoZSk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoJ2V4cG9ydHMnID09PSBvKSAoZFtsXSA9IGcuZXhwb3J0cyhlKSksICh1ID0gITApO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKCdtb2R1bGUnID09PSBvKSBpID0gZFtsXSA9IGcubW9kdWxlKGUpO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGIobSwgbykgfHwgYih2LCBvKSB8fCBiKF8sIG8pKSBkW2xdID0gRChvKTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghYS5wKSB0aHJvdyBuZXcgRXJyb3IoZSArICcgbWlzc2luZyAnICsgbyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhLnAubG9hZChhLm4sIEEociwgITApLCB4KG8pLCB7fSksIChkW2xdID0gbVtvXSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQocyA9IG4gPyBuLmFwcGx5KG1bZV0sIGQpIDogdm9pZCAwKSxcblx0XHRcdFx0XHRcdFx0XHRlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQoaSAmJiBpLmV4cG9ydHMgIT09IGggJiYgaS5leHBvcnRzICE9PSBtW2VdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gKG1bZV0gPSBpLmV4cG9ydHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogKHMgPT09IGggJiYgdSkgfHwgKG1bZV0gPSBzKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgZSAmJiAobVtlXSA9IG4pO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCh0ID1cblx0XHRcdFx0XHRcdG4gPVxuXHRcdFx0XHRcdFx0cyA9XG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIChlLCB0LCBuLCByLCBpKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCdzdHJpbmcnID09IHR5cGVvZiBlKSByZXR1cm4gZ1tlXSA/IGdbZV0odCkgOiBEKGYoZSwgUyh0KSkuZik7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFlLnNwbGljZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCgoeSA9IGUpLmRlcHMgJiYgcyh5LmRlcHMsIHkuY2FsbGJhY2spLCAhdCkpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdHQuc3BsaWNlID8gKChlID0gdCksICh0ID0gbiksIChuID0gbnVsbCkpIDogKGUgPSBoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdCh0ID0gdCB8fCBmdW5jdGlvbiAoKSB7fSksXG5cdFx0XHRcdFx0XHRcdFx0XHQnZnVuY3Rpb24nID09IHR5cGVvZiBuICYmICgobiA9IHIpLCAociA9IGkpKSxcblx0XHRcdFx0XHRcdFx0XHRcdHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBvKGgsIGUsIHQsIG4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvKGgsIGUsIHQsIG4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0sIDQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0c1xuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdChzLmNvbmZpZyA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcyhlKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHQodC5fZGVmaW5lZCA9IG0pLFxuXHRcdFx0XHRcdCgociA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHRpZiAoJ3N0cmluZycgIT0gdHlwZW9mIGUpXG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignU2VlIGFsbW9uZCBSRUFETUU6IGluY29ycmVjdCBtb2R1bGUgYnVpbGQsIG5vIG1vZHVsZSBuYW1lJyk7XG5cdFx0XHRcdFx0XHR0LnNwbGljZSB8fCAoKG4gPSB0KSwgKHQgPSBbXSkpLCBiKG0sIGUpIHx8IGIodiwgZSkgfHwgKHZbZV0gPSBbZSwgdCwgbl0pO1xuXHRcdFx0XHRcdH0pLmFtZCA9IHtqUXVlcnk6ICEwfSksXG5cdFx0XHRcdFx0KGUucmVxdWlyZWpzID0gdCksXG5cdFx0XHRcdFx0KGUucmVxdWlyZSA9IG4pLFxuXHRcdFx0XHRcdChlLmRlZmluZSA9IHIpKSxcblx0XHRcdFx0ZS5kZWZpbmUoJ2FsbW9uZCcsIGZ1bmN0aW9uICgpIHt9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ2pxdWVyeScsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0dmFyIGUgPSB1IHx8ICQ7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdG51bGwgPT0gZSAmJlxuXHRcdFx0XHRcdFx0XHRjb25zb2xlICYmXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IgJiZcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogQW4gaW5zdGFuY2Ugb2YgalF1ZXJ5IG9yIGEgalF1ZXJ5LWNvbXBhdGlibGUgbGlicmFyeSB3YXMgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhhdCB5b3UgYXJlIGluY2x1ZGluZyBqUXVlcnkgYmVmb3JlIFNlbGVjdDIgb24geW91ciB3ZWIgcGFnZS4nXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL3V0aWxzJywgWydqcXVlcnknXSwgZnVuY3Rpb24gKG8pIHtcblx0XHRcdFx0XHR2YXIgaSA9IHt9O1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHUoZSkge1xuXHRcdFx0XHRcdFx0dmFyIHQgPSBlLnByb3RvdHlwZSxcblx0XHRcdFx0XHRcdFx0biA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgciBpbiB0KSB7XG5cdFx0XHRcdFx0XHRcdCdmdW5jdGlvbicgPT0gdHlwZW9mIHRbcl0gJiYgJ2NvbnN0cnVjdG9yJyAhPT0gciAmJiBuLnB1c2gocik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gbjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KGkuRXh0ZW5kID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdHZhciBuID0ge30uaGFzT3duUHJvcGVydHk7XG5cdFx0XHRcdFx0XHRmdW5jdGlvbiByKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnN0cnVjdG9yID0gZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvciAodmFyIGkgaW4gdCkgbi5jYWxsKHQsIGkpICYmIChlW2ldID0gdFtpXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHIucHJvdG90eXBlID0gdC5wcm90b3R5cGUpLCAoZS5wcm90b3R5cGUgPSBuZXcgcigpKSwgKGUuX19zdXBlcl9fID0gdC5wcm90b3R5cGUpLCBlO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuRGVjb3JhdGUgPSBmdW5jdGlvbiAociwgaSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IHUoaSksXG5cdFx0XHRcdFx0XHRcdFx0dCA9IHUocik7XG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIG8oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBBcnJheS5wcm90b3R5cGUudW5zaGlmdCxcblx0XHRcdFx0XHRcdFx0XHRcdHQgPSBpLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5sZW5ndGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRuID0gci5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cdFx0XHRcdFx0XHRcdFx0MCA8IHQgJiYgKGUuY2FsbChhcmd1bWVudHMsIHIucHJvdG90eXBlLmNvbnN0cnVjdG9yKSwgKG4gPSBpLnByb3RvdHlwZS5jb25zdHJ1Y3RvcikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdChpLmRpc3BsYXlOYW1lID0gci5kaXNwbGF5TmFtZSksXG5cdFx0XHRcdFx0XHRcdFx0KG8ucHJvdG90eXBlID0gbmV3IChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbnN0cnVjdG9yID0gbztcblx0XHRcdFx0XHRcdFx0XHR9KSgpKTtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IDA7IG4gPCB0Lmxlbmd0aDsgbisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHMgPSB0W25dO1xuXHRcdFx0XHRcdFx0XHRcdG8ucHJvdG90eXBlW3NdID0gci5wcm90b3R5cGVbc107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gYShlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBmdW5jdGlvbiAoKSB7fTtcblx0XHRcdFx0XHRcdFx0XHRlIGluIG8ucHJvdG90eXBlICYmICh0ID0gby5wcm90b3R5cGVbZV0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuID0gaS5wcm90b3R5cGVbZV07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKGFyZ3VtZW50cywgdCksIG4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgZS5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBjID0gZVtsXTtcblx0XHRcdFx0XHRcdFx0XHRvLnByb3RvdHlwZVtjXSA9IGEoYyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIG87XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKCkge1xuXHRcdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMgPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdCh0aGlzLmxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzIHx8IHt9KSxcblx0XHRcdFx0XHRcdFx0ZSBpbiB0aGlzLmxpc3RlbmVycyA/IHRoaXMubGlzdGVuZXJzW2VdLnB1c2godCkgOiAodGhpcy5saXN0ZW5lcnNbZV0gPSBbdF0pO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IEFycmF5LnByb3RvdHlwZS5zbGljZSxcblx0XHRcdFx0XHRcdFx0XHRuID0gdC5jYWxsKGFyZ3VtZW50cywgMSk7XG5cdFx0XHRcdFx0XHRcdCh0aGlzLmxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzIHx8IHt9KSxcblx0XHRcdFx0XHRcdFx0XHRudWxsID09IG4gJiYgKG4gPSBbXSksXG5cdFx0XHRcdFx0XHRcdFx0MCA9PT0gbi5sZW5ndGggJiYgbi5wdXNoKHt9KSxcblx0XHRcdFx0XHRcdFx0XHQoblswXS5fdHlwZSA9IGUpIGluIHRoaXMubGlzdGVuZXJzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1tlXSwgdC5jYWxsKGFyZ3VtZW50cywgMSkpLFxuXHRcdFx0XHRcdFx0XHRcdCcqJyBpbiB0aGlzLmxpc3RlbmVycyAmJiB0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1snKiddLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IDAsIHIgPSBlLmxlbmd0aDsgbiA8IHI7IG4rKykgZVtuXS5hcHBseSh0aGlzLCB0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuT2JzZXJ2YWJsZSA9IGUpLFxuXHRcdFx0XHRcdFx0KGkuZ2VuZXJhdGVDaGFycyA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIHQgPSAnJywgbiA9IDA7IG4gPCBlOyBuKyspIHtcblx0XHRcdFx0XHRcdFx0XHR0ICs9IE1hdGguZmxvb3IoMzYgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHQ7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChpLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGUuYXBwbHkodCwgYXJndW1lbnRzKTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuX2NvbnZlcnREYXRhID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdCBpbiBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0LnNwbGl0KCctJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRyID0gZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoMSAhPT0gbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbyA9IG5baV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdChvID0gby5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSArIG8uc3Vic3RyaW5nKDEpKSBpbiByIHx8IChyW29dID0ge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGkgPT0gbi5sZW5ndGggLSAxICYmIChyW29dID0gZVt0XSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHIgPSByW29dKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlW3RdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuaGFzU2Nyb2xsID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSBvKHQpLFxuXHRcdFx0XHRcdFx0XHRcdHIgPSB0LnN0eWxlLm92ZXJmbG93WCxcblx0XHRcdFx0XHRcdFx0XHRpID0gdC5zdHlsZS5vdmVyZmxvd1k7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0KHIgIT09IGkgfHwgKCdoaWRkZW4nICE9PSBpICYmICd2aXNpYmxlJyAhPT0gaSkpICYmXG5cdFx0XHRcdFx0XHRcdFx0KCdzY3JvbGwnID09PSByIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQnc2Nyb2xsJyA9PT0gaSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0bi5pbm5lckhlaWdodCgpIDwgdC5zY3JvbGxIZWlnaHQgfHxcblx0XHRcdFx0XHRcdFx0XHRcdG4uaW5uZXJXaWR0aCgpIDwgdC5zY3JvbGxXaWR0aClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuZXNjYXBlTWFya3VwID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0J1xcXFwnOiAnJiM5MjsnLFxuXHRcdFx0XHRcdFx0XHRcdCcmJzogJyZhbXA7Jyxcblx0XHRcdFx0XHRcdFx0XHQnPCc6ICcmbHQ7Jyxcblx0XHRcdFx0XHRcdFx0XHQnPic6ICcmZ3Q7Jyxcblx0XHRcdFx0XHRcdFx0XHQnXCInOiAnJnF1b3Q7Jyxcblx0XHRcdFx0XHRcdFx0XHRcIidcIjogJyYjMzk7Jyxcblx0XHRcdFx0XHRcdFx0XHQnLyc6ICcmIzQ3OycsXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHJldHVybiAnc3RyaW5nJyAhPSB0eXBlb2YgZVxuXHRcdFx0XHRcdFx0XHRcdD8gZVxuXHRcdFx0XHRcdFx0XHRcdDogU3RyaW5nKGUpLnJlcGxhY2UoL1smPD5cIidcXC9cXFxcXS9nLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdFtlXTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoaS5hcHBlbmRNYW55ID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCcxLjcnID09PSBvLmZuLmpxdWVyeS5zdWJzdHIoMCwgMykpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IG8oKTtcblx0XHRcdFx0XHRcdFx0XHRvLm1hcCh0LCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0biA9IG4uYWRkKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0KHQgPSBuKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlLmFwcGVuZCh0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuX19jYWNoZSA9IHt9KTtcblx0XHRcdFx0XHR2YXIgbiA9IDA7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChpLkdldFVuaXF1ZUVsZW1lbnRJZCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi1pZCcpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgPT0gdCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KGUuaWRcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyAoKHQgPSBlLmlkKSwgZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi1pZCcsIHQpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IChlLnNldEF0dHJpYnV0ZSgnZGF0YS1zZWxlY3QyLWlkJywgKytuKSwgKHQgPSBuLnRvU3RyaW5nKCkpKSksXG5cdFx0XHRcdFx0XHRcdFx0dFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoaS5TdG9yZURhdGEgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IGkuR2V0VW5pcXVlRWxlbWVudElkKGUpO1xuXHRcdFx0XHRcdFx0XHRpLl9fY2FjaGVbcl0gfHwgKGkuX19jYWNoZVtyXSA9IHt9KSwgKGkuX19jYWNoZVtyXVt0XSA9IG4pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoaS5HZXREYXRhID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSBpLkdldFVuaXF1ZUVsZW1lbnRJZChlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRcblx0XHRcdFx0XHRcdFx0XHQ/IGkuX19jYWNoZVtuXSAmJiBudWxsICE9IGkuX19jYWNoZVtuXVt0XVxuXHRcdFx0XHRcdFx0XHRcdFx0PyBpLl9fY2FjaGVbbl1bdF1cblx0XHRcdFx0XHRcdFx0XHRcdDogbyhlKS5kYXRhKHQpXG5cdFx0XHRcdFx0XHRcdFx0OiBpLl9fY2FjaGVbbl07XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChpLlJlbW92ZURhdGEgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IGkuR2V0VW5pcXVlRWxlbWVudElkKGUpO1xuXHRcdFx0XHRcdFx0XHRudWxsICE9IGkuX19jYWNoZVt0XSAmJiBkZWxldGUgaS5fX2NhY2hlW3RdLCBlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1zZWxlY3QyLWlkJyk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvcmVzdWx0cycsIFsnanF1ZXJ5JywgJy4vdXRpbHMnXSwgZnVuY3Rpb24gKGgsIGYpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiByKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdCh0aGlzLiRlbGVtZW50ID0gZSksICh0aGlzLmRhdGEgPSBuKSwgKHRoaXMub3B0aW9ucyA9IHQpLCByLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0Zi5FeHRlbmQociwgZi5PYnNlcnZhYmxlKSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gaCgnPHVsIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zXCIgcm9sZT1cImxpc3Rib3hcIj48L3VsPicpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5nZXQoJ211bHRpcGxlJykgJiYgZS5hdHRyKCdhcmlhLW11bHRpc2VsZWN0YWJsZScsICd0cnVlJyksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuJHJlc3VsdHMgPSBlKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMuZW1wdHkoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmRpc3BsYXlNZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhcigpLCB0aGlzLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gaCgnPGxpIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIj48L2xpPicpLFxuXHRcdFx0XHRcdFx0XHRcdHIgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQoZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0bi5hcHBlbmQodChyKGUuYXJncykpKSxcblx0XHRcdFx0XHRcdFx0XHQoblswXS5jbGFzc05hbWUgKz0gJyBzZWxlY3QyLXJlc3VsdHNfX21lc3NhZ2UnKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRyZXN1bHRzLmFwcGVuZChuKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmhpZGVNZXNzYWdlcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kcmVzdWx0cy5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19tZXNzYWdlJykucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gW107XG5cdFx0XHRcdFx0XHRcdGlmIChudWxsICE9IGUucmVzdWx0cyAmJiAwICE9PSBlLnJlc3VsdHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZS5yZXN1bHRzID0gdGhpcy5zb3J0KGUucmVzdWx0cyk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IDA7IG4gPCBlLnJlc3VsdHMubGVuZ3RoOyBuKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByID0gZS5yZXN1bHRzW25dLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpID0gdGhpcy5vcHRpb24ocik7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LnB1c2goaSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMuYXBwZW5kKHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHQwID09PSB0aGlzLiRyZXN1bHRzLmNoaWxkcmVuKCkubGVuZ3RoICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHttZXNzYWdlOiAnbm9SZXN1bHRzJ30pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR0LmZpbmQoJy5zZWxlY3QyLXJlc3VsdHMnKS5hcHBlbmQoZSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5zb3J0ID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoJ3NvcnRlcicpKGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuaGlnaGxpZ2h0Rmlyc3RJdGVtID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IHRoaXMuJHJlc3VsdHMuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJyksXG5cdFx0XHRcdFx0XHRcdFx0dCA9IGUuZmlsdGVyKCdbYXJpYS1zZWxlY3RlZD10cnVlXScpO1xuXHRcdFx0XHRcdFx0XHQwIDwgdC5sZW5ndGggPyB0LmZpcnN0KCkudHJpZ2dlcignbW91c2VlbnRlcicpIDogZS5maXJzdCgpLnRyaWdnZXIoJ21vdXNlZW50ZXInKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVuc3VyZUhpZ2hsaWdodFZpc2libGUoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLnNldENsYXNzZXMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gdGhpcztcblx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhLmN1cnJlbnQoZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgciA9IGgubWFwKGUsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZS5pZC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHQuJHJlc3VsdHMuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZSA9IGgodGhpcyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHQgPSBmLkdldERhdGEodGhpcywgJ2RhdGEnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0biA9ICcnICsgdC5pZDtcblx0XHRcdFx0XHRcdFx0XHRcdChudWxsICE9IHQuZWxlbWVudCAmJiB0LmVsZW1lbnQuc2VsZWN0ZWQpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQobnVsbCA9PSB0LmVsZW1lbnQgJiYgLTEgPCBoLmluQXJyYXkobiwgcikpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gZS5hdHRyKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IGUuYXR0cignYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLnNob3dMb2FkaW5nID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkOiAhMCxcblx0XHRcdFx0XHRcdFx0XHRcdGxvYWRpbmc6ICEwLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdzZWFyY2hpbmcnKShlKSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdG4gPSB0aGlzLm9wdGlvbih0KTtcblx0XHRcdFx0XHRcdFx0KG4uY2xhc3NOYW1lICs9ICcgbG9hZGluZy1yZXN1bHRzJyksIHRoaXMuJHJlc3VsdHMucHJlcGVuZChuKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmhpZGVMb2FkaW5nID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRyZXN1bHRzLmZpbmQoJy5sb2FkaW5nLXJlc3VsdHMnKS5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLm9wdGlvbiA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcblx0XHRcdFx0XHRcdFx0dC5jbGFzc05hbWUgPSAnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24nO1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHtyb2xlOiAnb3B0aW9uJywgJ2FyaWEtc2VsZWN0ZWQnOiAnZmFsc2UnfSxcblx0XHRcdFx0XHRcdFx0XHRyID1cblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgaW4gKCgobnVsbCAhPSBlLmVsZW1lbnQgJiYgci5jYWxsKGUuZWxlbWVudCwgJzpkaXNhYmxlZCcpKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChudWxsID09IGUuZWxlbWVudCAmJiBlLmRpc2FibGVkKSkgJiZcblx0XHRcdFx0XHRcdFx0XHQoZGVsZXRlIG5bJ2FyaWEtc2VsZWN0ZWQnXSwgKG5bJ2FyaWEtZGlzYWJsZWQnXSA9ICd0cnVlJykpLFxuXHRcdFx0XHRcdFx0XHRudWxsID09IGUuaWQgJiYgZGVsZXRlIG5bJ2FyaWEtc2VsZWN0ZWQnXSxcblx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLl9yZXN1bHRJZCAmJiAodC5pZCA9IGUuX3Jlc3VsdElkKSxcblx0XHRcdFx0XHRcdFx0ZS50aXRsZSAmJiAodC50aXRsZSA9IGUudGl0bGUpLFxuXHRcdFx0XHRcdFx0XHRlLmNoaWxkcmVuICYmICgobi5yb2xlID0gJ2dyb3VwJyksIChuWydhcmlhLWxhYmVsJ10gPSBlLnRleHQpLCBkZWxldGUgblsnYXJpYS1zZWxlY3RlZCddKSxcblx0XHRcdFx0XHRcdFx0bikpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbyA9IG5baV07XG5cdFx0XHRcdFx0XHRcdFx0dC5zZXRBdHRyaWJ1dGUoaSwgbyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGUuY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcyA9IGgodCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Ryb25nJyk7XG5cdFx0XHRcdFx0XHRcdFx0YS5jbGFzc05hbWUgPSAnc2VsZWN0Mi1yZXN1bHRzX19ncm91cCc7XG5cdFx0XHRcdFx0XHRcdFx0aChhKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlKGUsIGEpO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSBbXSwgYyA9IDA7IGMgPCBlLmNoaWxkcmVuLmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdSA9IGUuY2hpbGRyZW5bY10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGQgPSB0aGlzLm9wdGlvbih1KTtcblx0XHRcdFx0XHRcdFx0XHRcdGwucHVzaChkKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHAgPSBoKCc8dWw+PC91bD4nLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzczogJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9ucyBzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMtLW5lc3RlZCcsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0cC5hcHBlbmQobCksIHMuYXBwZW5kKGEpLCBzLmFwcGVuZChwKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHRoaXMudGVtcGxhdGUoZSwgdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmLlN0b3JlRGF0YSh0LCAnZGF0YScsIGUpLCB0O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICh0LCBlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBsID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRuID0gdC5pZCArICctcmVzdWx0cyc7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMuYXR0cignaWQnLCBuKSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOmFsbCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsLmNsZWFyKCksIGwuYXBwZW5kKGUuZGF0YSksIHQuaXNPcGVuKCkgJiYgKGwuc2V0Q2xhc3NlcygpLCBsLmhpZ2hsaWdodEZpcnN0SXRlbSgpKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOmFwcGVuZCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsLmFwcGVuZChlLmRhdGEpLCB0LmlzT3BlbigpICYmIGwuc2V0Q2xhc3NlcygpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3F1ZXJ5JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGwuaGlkZU1lc3NhZ2VzKCksIGwuc2hvd0xvYWRpbmcoZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dC5pc09wZW4oKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQobC5zZXRDbGFzc2VzKCksIGwub3B0aW9ucy5nZXQoJ3Njcm9sbEFmdGVyU2VsZWN0JykgJiYgbC5oaWdobGlnaHRGaXJzdEl0ZW0oKSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigndW5zZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LmlzT3BlbigpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChsLnNldENsYXNzZXMoKSwgbC5vcHRpb25zLmdldCgnc2Nyb2xsQWZ0ZXJTZWxlY3QnKSAmJiBsLmhpZ2hsaWdodEZpcnN0SXRlbSgpKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bC4kcmVzdWx0cy5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bC4kcmVzdWx0cy5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsLnNldENsYXNzZXMoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bC5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsLiRyZXN1bHRzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bC4kcmVzdWx0cy5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGwuJHJlc3VsdHMucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncmVzdWx0czp0b2dnbGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZSA9IGwuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHQwICE9PSBlLmxlbmd0aCAmJiBlLnRyaWdnZXIoJ21vdXNldXAnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOnNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlID0gbC5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICgwICE9PSBlLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IGYuR2V0RGF0YShlWzBdLCAnZGF0YScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQndHJ1ZScgPT0gZS5hdHRyKCdhcmlhLXNlbGVjdGVkJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGwudHJpZ2dlcignY2xvc2UnLCB7fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IGwudHJpZ2dlcignc2VsZWN0Jywge2RhdGE6IHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOnByZXZpb3VzJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBsLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ID0gbC4kcmVzdWx0cy5maW5kKCdbYXJpYS1zZWxlY3RlZF0nKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0biA9IHQuaW5kZXgoZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIShuIDw9IDApKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByID0gbiAtIDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAgPT09IGUubGVuZ3RoICYmIChyID0gMCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpID0gdC5lcShyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aS50cmlnZ2VyKCdtb3VzZWVudGVyJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0gbC4kcmVzdWx0cy5vZmZzZXQoKS50b3AsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cyA9IGkub2Zmc2V0KCkudG9wLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGEgPSBsLiRyZXN1bHRzLnNjcm9sbFRvcCgpICsgKHMgLSBvKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCA9PT0gciA/IGwuJHJlc3VsdHMuc2Nyb2xsVG9wKDApIDogcyAtIG8gPCAwICYmIGwuJHJlc3VsdHMuc2Nyb2xsVG9wKGEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3Jlc3VsdHM6bmV4dCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlID0gbC5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dCA9IGwuJHJlc3VsdHMuZmluZCgnW2FyaWEtc2VsZWN0ZWRdJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4gPSB0LmluZGV4KGUpICsgMTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghKG4gPj0gdC5sZW5ndGgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByID0gdC5lcShuKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci50cmlnZ2VyKCdtb3VzZWVudGVyJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpID0gbC4kcmVzdWx0cy5vZmZzZXQoKS50b3AgKyBsLiRyZXN1bHRzLm91dGVySGVpZ2h0KCExKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvID0gci5vZmZzZXQoKS50b3AgKyByLm91dGVySGVpZ2h0KCExKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzID0gbC4kcmVzdWx0cy5zY3JvbGxUb3AoKSArIG8gLSBpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQwID09PSBuID8gbC4kcmVzdWx0cy5zY3JvbGxUb3AoMCkgOiBpIDwgbyAmJiBsLiRyZXN1bHRzLnNjcm9sbFRvcChzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOmZvY3VzJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGUuZWxlbWVudC5hZGRDbGFzcygnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncmVzdWx0czptZXNzYWdlJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGwuZGlzcGxheU1lc3NhZ2UoZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0aC5mbi5tb3VzZXdoZWVsICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRyZXN1bHRzLm9uKCdtb3VzZXdoZWVsJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBsLiRyZXN1bHRzLnNjcm9sbFRvcCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG4gPSBsLiRyZXN1bHRzLmdldCgwKS5zY3JvbGxIZWlnaHQgLSB0ICsgZS5kZWx0YVksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ciA9IDAgPCBlLmRlbHRhWSAmJiB0IC0gZS5kZWx0YVkgPD0gMCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpID0gZS5kZWx0YVkgPCAwICYmIG4gPD0gbC4kcmVzdWx0cy5oZWlnaHQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKGwuJHJlc3VsdHMuc2Nyb2xsVG9wKDApLCBlLnByZXZlbnREZWZhdWx0KCksIGUuc3RvcFByb3BhZ2F0aW9uKCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQobC4kcmVzdWx0cy5zY3JvbGxUb3AoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGwuJHJlc3VsdHMuZ2V0KDApLnNjcm9sbEhlaWdodCAtIGwuJHJlc3VsdHMuaGVpZ2h0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMub24oJ21vdXNldXAnLCAnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gaCh0aGlzKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0biA9IGYuR2V0RGF0YSh0aGlzLCAnZGF0YScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0J3RydWUnICE9PSB0LmF0dHIoJ2FyaWEtc2VsZWN0ZWQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGwudHJpZ2dlcignc2VsZWN0Jywge29yaWdpbmFsRXZlbnQ6IGUsIGRhdGE6IG59KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IGwub3B0aW9ucy5nZXQoJ211bHRpcGxlJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGwudHJpZ2dlcigndW5zZWxlY3QnLCB7b3JpZ2luYWxFdmVudDogZSwgZGF0YTogbn0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBsLnRyaWdnZXIoJ2Nsb3NlJywge30pO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMub24oJ21vdXNlZW50ZXInLCAnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gZi5HZXREYXRhKHRoaXMsICdkYXRhJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRsLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLnJlbW92ZUNsYXNzKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bC50cmlnZ2VyKCdyZXN1bHRzOmZvY3VzJywge2RhdGE6IHQsIGVsZW1lbnQ6IGgodGhpcyl9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmdldEhpZ2hsaWdodGVkUmVzdWx0cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuJHJlc3VsdHMuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCcpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kcmVzdWx0cy5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmVuc3VyZUhpZ2hsaWdodFZpc2libGUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gdGhpcy5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtcblx0XHRcdFx0XHRcdFx0aWYgKDAgIT09IGUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSB0aGlzLiRyZXN1bHRzLmZpbmQoJ1thcmlhLXNlbGVjdGVkXScpLmluZGV4KGUpLFxuXHRcdFx0XHRcdFx0XHRcdFx0biA9IHRoaXMuJHJlc3VsdHMub2Zmc2V0KCkudG9wLFxuXHRcdFx0XHRcdFx0XHRcdFx0ciA9IGUub2Zmc2V0KCkudG9wLFxuXHRcdFx0XHRcdFx0XHRcdFx0aSA9IHRoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyAociAtIG4pLFxuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHIgLSBuO1xuXHRcdFx0XHRcdFx0XHRcdChpIC09IDIgKiBlLm91dGVySGVpZ2h0KCExKSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0IDw9IDJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcCgwKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IChvID4gdGhpcy4kcmVzdWx0cy5vdXRlckhlaWdodCgpIHx8IG8gPCAwKSAmJiB0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcChpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUudGVtcGxhdGUgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXMub3B0aW9ucy5nZXQoJ3RlbXBsYXRlUmVzdWx0JyksXG5cdFx0XHRcdFx0XHRcdFx0ciA9IHRoaXMub3B0aW9ucy5nZXQoJ2VzY2FwZU1hcmt1cCcpLFxuXHRcdFx0XHRcdFx0XHRcdGkgPSBuKGUsIHQpO1xuXHRcdFx0XHRcdFx0XHRudWxsID09IGlcblx0XHRcdFx0XHRcdFx0XHQ/ICh0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXG5cdFx0XHRcdFx0XHRcdFx0OiAnc3RyaW5nJyA9PSB0eXBlb2YgaVxuXHRcdFx0XHRcdFx0XHRcdFx0PyAodC5pbm5lckhUTUwgPSByKGkpKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBoKHQpLmFwcGVuZChpKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0clxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9rZXlzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0QkFDS1NQQUNFOiA4LFxuXHRcdFx0XHRcdFx0VEFCOiA5LFxuXHRcdFx0XHRcdFx0RU5URVI6IDEzLFxuXHRcdFx0XHRcdFx0U0hJRlQ6IDE2LFxuXHRcdFx0XHRcdFx0Q1RSTDogMTcsXG5cdFx0XHRcdFx0XHRBTFQ6IDE4LFxuXHRcdFx0XHRcdFx0RVNDOiAyNyxcblx0XHRcdFx0XHRcdFNQQUNFOiAzMixcblx0XHRcdFx0XHRcdFBBR0VfVVA6IDMzLFxuXHRcdFx0XHRcdFx0UEFHRV9ET1dOOiAzNCxcblx0XHRcdFx0XHRcdEVORDogMzUsXG5cdFx0XHRcdFx0XHRIT01FOiAzNixcblx0XHRcdFx0XHRcdExFRlQ6IDM3LFxuXHRcdFx0XHRcdFx0VVA6IDM4LFxuXHRcdFx0XHRcdFx0UklHSFQ6IDM5LFxuXHRcdFx0XHRcdFx0RE9XTjogNDAsXG5cdFx0XHRcdFx0XHRERUxFVEU6IDQ2LFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vYmFzZScsIFsnanF1ZXJ5JywgJy4uL3V0aWxzJywgJy4uL2tleXMnXSwgZnVuY3Rpb24gKG4sIHIsIGkpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBvKGUsIHQpIHtcblx0XHRcdFx0XHRcdCh0aGlzLiRlbGVtZW50ID0gZSksICh0aGlzLm9wdGlvbnMgPSB0KSwgby5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdHIuRXh0ZW5kKG8sIHIuT2JzZXJ2YWJsZSksXG5cdFx0XHRcdFx0XHQoby5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IG4oXG5cdFx0XHRcdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25cIiByb2xlPVwiY29tYm9ib3hcIiAgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj48L3NwYW4+J1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLl90YWJpbmRleCA9IDApLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gci5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnKVxuXHRcdFx0XHRcdFx0XHRcdFx0PyAodGhpcy5fdGFiaW5kZXggPSByLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwgJ29sZC10YWJpbmRleCcpKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBudWxsICE9IHRoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQodGhpcy5fdGFiaW5kZXggPSB0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JykpLFxuXHRcdFx0XHRcdFx0XHRcdGUuYXR0cigndGl0bGUnLCB0aGlzLiRlbGVtZW50LmF0dHIoJ3RpdGxlJykpLFxuXHRcdFx0XHRcdFx0XHRcdGUuYXR0cigndGFiaW5kZXgnLCB0aGlzLl90YWJpbmRleCksXG5cdFx0XHRcdFx0XHRcdFx0ZS5hdHRyKCdhcmlhLWRpc2FibGVkJywgJ2ZhbHNlJyksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuJHNlbGVjdGlvbiA9IGUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChvLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdHIgPSBlLmlkICsgJy1yZXN1bHRzJztcblx0XHRcdFx0XHRcdFx0KHRoaXMuY29udGFpbmVyID0gZSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLnRyaWdnZXIoJ2ZvY3VzJywgZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdibHVyJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG4uX2hhbmRsZUJsdXIoZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG4udHJpZ2dlcigna2V5cHJlc3MnLCBlKSwgZS53aGljaCA9PT0gaS5TUEFDRSAmJiBlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24uYXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgZS5kYXRhLl9yZXN1bHRJZCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5vbignc2VsZWN0aW9uOnVwZGF0ZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLnVwZGF0ZShlLmRhdGEpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24uYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4uJHNlbGVjdGlvbi5hdHRyKCdhcmlhLW93bnMnLCByKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bi5fYXR0YWNoQ2xvc2VIYW5kbGVyKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bi4kc2VsZWN0aW9uLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cignYXJpYS1vd25zJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4uJHNlbGVjdGlvbi50cmlnZ2VyKCdmb2N1cycpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLl9kZXRhY2hDbG9zZUhhbmRsZXIoZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4Jywgbi5fdGFiaW5kZXgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24uYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUub24oJ2Rpc2FibGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCAnLTEnKSwgbi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoby5wcm90b3R5cGUuX2hhbmRsZUJsdXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IHQuJHNlbGVjdGlvblswXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0bi5jb250YWlucyh0LiRzZWxlY3Rpb25bMF0sIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0LnRyaWdnZXIoJ2JsdXInLCBlKTtcblx0XHRcdFx0XHRcdFx0fSwgMSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChvLnByb3RvdHlwZS5fYXR0YWNoQ2xvc2VIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0bihkb2N1bWVudC5ib2R5KS5vbignbW91c2Vkb3duLnNlbGVjdDIuJyArIGUuaWQsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBuKGUudGFyZ2V0KS5jbG9zZXN0KCcuc2VsZWN0MicpO1xuXHRcdFx0XHRcdFx0XHRcdG4oJy5zZWxlY3QyLnNlbGVjdDItY29udGFpbmVyLS1vcGVuJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzICE9IHRbMF0gJiYgci5HZXREYXRhKHRoaXMsICdlbGVtZW50Jykuc2VsZWN0MignY2xvc2UnKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChvLnByb3RvdHlwZS5fZGV0YWNoQ2xvc2VIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0bihkb2N1bWVudC5ib2R5KS5vZmYoJ21vdXNlZG93bi5zZWxlY3QyLicgKyBlLmlkKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG8ucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dC5maW5kKCcuc2VsZWN0aW9uJykuYXBwZW5kKGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoby5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fZGV0YWNoQ2xvc2VIYW5kbGVyKHRoaXMuY29udGFpbmVyKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG8ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGB1cGRhdGVgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4nKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0b1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZShcblx0XHRcdFx0XHQnc2VsZWN0Mi9zZWxlY3Rpb24vc2luZ2xlJyxcblx0XHRcdFx0XHRbJ2pxdWVyeScsICcuL2Jhc2UnLCAnLi4vdXRpbHMnLCAnLi4va2V5cyddLFxuXHRcdFx0XHRcdGZ1bmN0aW9uIChlLCB0LCBuLCByKSB7XG5cdFx0XHRcdFx0XHRmdW5jdGlvbiBpKCkge1xuXHRcdFx0XHRcdFx0XHRpLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0bi5FeHRlbmQoaSwgdCksXG5cdFx0XHRcdFx0XHRcdChpLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBpLl9fc3VwZXJfXy5yZW5kZXIuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5odG1sKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3dcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PGIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvYj48L3NwYW4+J1xuXHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0KGkucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAodCwgZSkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRpLl9fc3VwZXJfXy5iaW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0LmlkICsgJy1jb250YWluZXInO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0LmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2lkJywgcilcblx0XHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdyb2xlJywgJ3RleHRib3gnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2FyaWEtcmVhZG9ubHknLCAndHJ1ZScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtbGFiZWxsZWRieScsIHIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQxID09PSBlLndoaWNoICYmIG4udHJpZ2dlcigndG9nZ2xlJywge29yaWdpbmFsRXZlbnQ6IGV9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChlKSB7fSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2JsdXInLCBmdW5jdGlvbiAoZSkge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0dC5vbignZm9jdXMnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0LmlzT3BlbigpIHx8IG4uJHNlbGVjdGlvbi50cmlnZ2VyKCdmb2N1cycpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQoaS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpO1xuXHRcdFx0XHRcdFx0XHRcdGUuZW1wdHkoKSwgZS5yZW1vdmVBdHRyKCd0aXRsZScpO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0KGkucHJvdG90eXBlLmRpc3BsYXkgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuID0gdGhpcy5vcHRpb25zLmdldCgndGVtcGxhdGVTZWxlY3Rpb24nKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmdldCgnZXNjYXBlTWFya3VwJykobihlLCB0KSk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQoaS5wcm90b3R5cGUuc2VsZWN0aW9uQ29udGFpbmVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlKCc8c3Bhbj48L3NwYW4+Jyk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQoaS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoMCAhPT0gZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gZVswXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0biA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIgPSB0aGlzLmRpc3BsYXkodCwgbik7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLmVtcHR5KCkuYXBwZW5kKHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSB0LnRpdGxlIHx8IHQudGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdGkgPyBuLmF0dHIoJ3RpdGxlJywgaSkgOiBuLnJlbW92ZUF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHRoaXMuY2xlYXIoKTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vbXVsdGlwbGUnLCBbJ2pxdWVyeScsICcuL2Jhc2UnLCAnLi4vdXRpbHMnXSwgZnVuY3Rpb24gKGksIGUsIGwpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBuKGUsIHQpIHtcblx0XHRcdFx0XHRcdG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRsLkV4dGVuZChuLCBlKSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gbi5fX3N1cGVyX18ucmVuZGVyLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0ZS5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlJyksXG5cdFx0XHRcdFx0XHRcdFx0ZS5odG1sKCc8dWwgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj48L3VsPicpLFxuXHRcdFx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdG4uX19zdXBlcl9fLmJpbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIudHJpZ2dlcigndG9nZ2xlJywge29yaWdpbmFsRXZlbnQ6IGV9KTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2NsaWNrJywgJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFyLm9wdGlvbnMuZ2V0KCdkaXNhYmxlZCcpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gaSh0aGlzKS5wYXJlbnQoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuID0gbC5HZXREYXRhKHRbMF0sICdkYXRhJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIudHJpZ2dlcigndW5zZWxlY3QnLCB7b3JpZ2luYWxFdmVudDogZSwgZGF0YTogbn0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTtcblx0XHRcdFx0XHRcdFx0ZS5lbXB0eSgpLCBlLnJlbW92ZUF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5kaXNwbGF5ID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzLm9wdGlvbnMuZ2V0KCd0ZW1wbGF0ZVNlbGVjdGlvbicpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmdldCgnZXNjYXBlTWFya3VwJykobihlLCB0KSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpKFxuXHRcdFx0XHRcdFx0XHRcdCc8bGkgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlXCI+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmVcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+JnRpbWVzOzwvc3Bhbj48L2xpPidcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdGlmICgodGhpcy5jbGVhcigpLCAwICE9PSBlLmxlbmd0aCkpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciB0ID0gW10sIG4gPSAwOyBuIDwgZS5sZW5ndGg7IG4rKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSBlW25dLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpID0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0byA9IHRoaXMuZGlzcGxheShyLCBpKTtcblx0XHRcdFx0XHRcdFx0XHRcdGkuYXBwZW5kKG8pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHMgPSByLnRpdGxlIHx8IHIudGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdHMgJiYgaS5hdHRyKCd0aXRsZScsIHMpLCBsLlN0b3JlRGF0YShpWzBdLCAnZGF0YScsIHIpLCB0LnB1c2goaSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHZhciBhID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTtcblx0XHRcdFx0XHRcdFx0XHRsLmFwcGVuZE1hbnkoYSwgdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0blxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vcGxhY2Vob2xkZXInLCBbJy4uL3V0aWxzJ10sIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gdChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIobi5nZXQoJ3BsYWNlaG9sZGVyJykpKSwgZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KHQucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICdzdHJpbmcnID09IHR5cGVvZiB0ICYmICh0ID0ge2lkOiAnJywgdGV4dDogdH0pLCB0O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQodC5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0bi5odG1sKHRoaXMuZGlzcGxheSh0KSksXG5cdFx0XHRcdFx0XHRcdFx0bi5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItc2VsZWN0aW9uX19jaG9pY2UnKSxcblx0XHRcdFx0XHRcdFx0XHRuXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdCh0LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IDEgPT0gdC5sZW5ndGggJiYgdFswXS5pZCAhPSB0aGlzLnBsYWNlaG9sZGVyLmlkO1xuXHRcdFx0XHRcdFx0XHRpZiAoMSA8IHQubGVuZ3RoIHx8IG4pIHJldHVybiBlLmNhbGwodGhpcywgdCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXIoKTtcblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpLmFwcGVuZChyKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0dFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vYWxsb3dDbGVhcicsIFsnanF1ZXJ5JywgJy4uL2tleXMnLCAnLi4vdXRpbHMnXSwgZnVuY3Rpb24gKGksIHIsIGEpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKCkge31cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKSxcblx0XHRcdFx0XHRcdFx0XHRudWxsID09IHRoaXMucGxhY2Vob2xkZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5jb25zb2xlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogVGhlIGBhbGxvd0NsZWFyYCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYHBsYWNlaG9sZGVyYCBvcHRpb24uJ1xuXHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ21vdXNlZG93bicsICcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuX2hhbmRsZUNsZWFyKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ2tleXByZXNzJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuX2hhbmRsZUtleWJvYXJkQ2xlYXIoZSwgdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5faGFuZGxlQ2xlYXIgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJykpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKDAgIT09IG4ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSBhLkdldERhdGEoblswXSwgJ2RhdGEnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aSA9IHRoaXMuJGVsZW1lbnQudmFsKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LnZhbCh0aGlzLnBsYWNlaG9sZGVyLmlkKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0ge2RhdGE6IHJ9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCh0aGlzLnRyaWdnZXIoJ2NsZWFyJywgbyksIG8ucHJldmVudGVkKSkgdGhpcy4kZWxlbWVudC52YWwoaSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCByLmxlbmd0aDsgcysrKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgoKG8gPSB7ZGF0YTogcltzXX0pLCB0aGlzLnRyaWdnZXIoJ3Vuc2VsZWN0JywgbyksIG8ucHJldmVudGVkKSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2b2lkIHRoaXMuJGVsZW1lbnQudmFsKGkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpLCB0aGlzLnRyaWdnZXIoJ3RvZ2dsZScsIHt9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9oYW5kbGVLZXlib2FyZENsZWFyID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0bi5pc09wZW4oKSB8fCAodC53aGljaCAhPSByLkRFTEVURSAmJiB0LndoaWNoICE9IHIuQkFDS1NQQUNFKSB8fCB0aGlzLl9oYW5kbGVDbGVhcih0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHQoZS5jYWxsKHRoaXMsIHQpLFxuXHRcdFx0XHRcdFx0XHRcdCEoMCA8IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyJykubGVuZ3RoIHx8IDAgPT09IHQubGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQoJ3JlbW92ZUFsbEl0ZW1zJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRyID0gaSgnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXJcIiB0aXRsZT1cIicgKyBuKCkgKyAnXCI+JnRpbWVzOzwvc3Bhbj4nKTtcblx0XHRcdFx0XHRcdFx0XHRhLlN0b3JlRGF0YShyWzBdLCAnZGF0YScsIHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5wcmVwZW5kKHIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL3NlYXJjaCcsIFsnanF1ZXJ5JywgJy4uL3V0aWxzJywgJy4uL2tleXMnXSwgZnVuY3Rpb24gKHIsIGEsIGwpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHIoXG5cdFx0XHRcdFx0XHRcdFx0JzxsaSBjbGFzcz1cInNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1pbmxpbmVcIj48aW5wdXQgY2xhc3M9XCJzZWxlY3QyLXNlYXJjaF9fZmllbGRcIiB0eXBlPVwic2VhcmNoXCIgdGFiaW5kZXg9XCItMVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgYXV0b2NhcGl0YWxpemU9XCJub25lXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgcm9sZT1cInNlYXJjaGJveFwiIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiIC8+PC9saT4nXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdCh0aGlzLiRzZWFyY2hDb250YWluZXIgPSB0KSwgKHRoaXMuJHNlYXJjaCA9IHQuZmluZCgnaW5wdXQnKSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gZS5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fdHJhbnNmZXJUYWJJbmRleCgpLCBuO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHRcdHZhciByID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRpID0gdC5pZCArICctcmVzdWx0cyc7XG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBpKSwgci4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gudmFsKCcnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtY29udHJvbHMnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdlbmFibGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gucHJvcCgnZGlzYWJsZWQnLCAhMSksIHIuX3RyYW5zZmVyVGFiSW5kZXgoKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnByb3AoJ2Rpc2FibGVkJywgITApO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ2ZvY3VzJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3Jlc3VsdHM6Zm9jdXMnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5kYXRhLl9yZXN1bHRJZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHIuJHNlYXJjaC5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBlLmRhdGEuX3Jlc3VsdElkKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHIuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2ZvY3VzaW4nLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci50cmlnZ2VyKCdmb2N1cycsIGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlbGVjdGlvbi5vbignZm9jdXNvdXQnLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5faGFuZGxlQmx1cihlKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2tleWRvd24nLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoZS5zdG9wUHJvcGFnYXRpb24oKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci50cmlnZ2VyKCdrZXlwcmVzcycsIGUpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoci5fa2V5VXBQcmV2ZW50ZWQgPSBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS53aGljaCA9PT0gbC5CQUNLU1BBQ0UgJiYgJycgPT09IHIuJHNlYXJjaC52YWwoKSlcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IHIuJHNlYXJjaENvbnRhaW5lci5wcmV2KCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoMCA8IHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSBhLkdldERhdGEodFswXSwgJ2RhdGEnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyLnNlYXJjaFJlbW92ZUNob2ljZShuKSwgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdjbGljaycsICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gudmFsKCkgJiYgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0dmFyIG8gPSBkb2N1bWVudC5kb2N1bWVudE1vZGUsXG5cdFx0XHRcdFx0XHRcdFx0cyA9IG8gJiYgbyA8PSAxMTtcblx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdpbnB1dC5zZWFyY2hjaGVjaycsICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0c1xuXHRcdFx0XHRcdFx0XHRcdFx0PyByLiRzZWxlY3Rpb24ub2ZmKCdpbnB1dC5zZWFyY2ggaW5wdXQuc2VhcmNoY2hlY2snKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiByLiRzZWxlY3Rpb24ub2ZmKCdrZXl1cC5zZWFyY2gnKTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2tleXVwLnNlYXJjaCBpbnB1dC5zZWFyY2gnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Jy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJyxcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzICYmICdpbnB1dCcgPT09IGUudHlwZSkgci4kc2VsZWN0aW9uLm9mZignaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gZS53aGljaDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ICE9IGwuU0hJRlQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHQgIT0gbC5DVFJMICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ICE9IGwuQUxUICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ICE9IGwuVEFCICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyLmhhbmRsZVNlYXJjaChlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5fdHJhbnNmZXJUYWJJbmRleCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaC5hdHRyKCd0YWJpbmRleCcsIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcpKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmNyZWF0ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoLmF0dHIoJ3BsYWNlaG9sZGVyJywgdC50ZXh0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gdGhpcy4kc2VhcmNoWzBdID09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaC5hdHRyKCdwbGFjZWhvbGRlcicsICcnKSxcblx0XHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5hcHBlbmQodGhpcy4kc2VhcmNoQ29udGFpbmVyKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc2l6ZVNlYXJjaCgpLFxuXHRcdFx0XHRcdFx0XHRcdG4gJiYgdGhpcy4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5oYW5kbGVTZWFyY2ggPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGlmICgodGhpcy5yZXNpemVTZWFyY2goKSwgIXRoaXMuX2tleVVwUHJldmVudGVkKSkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlID0gdGhpcy4kc2VhcmNoLnZhbCgpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcigncXVlcnknLCB7dGVybTogZX0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2tleVVwUHJldmVudGVkID0gITE7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5zZWFyY2hSZW1vdmVDaG9pY2UgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3Vuc2VsZWN0Jywge2RhdGE6IHR9KSwgdGhpcy4kc2VhcmNoLnZhbCh0LnRleHQpLCB0aGlzLmhhbmRsZVNlYXJjaCgpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUucmVzaXplU2VhcmNoID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2guY3NzKCd3aWR0aCcsICcyNXB4Jyk7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gJyc7XG5cdFx0XHRcdFx0XHRcdCcnICE9PSB0aGlzLiRzZWFyY2guYXR0cigncGxhY2Vob2xkZXInKVxuXHRcdFx0XHRcdFx0XHRcdD8gKGUgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpLndpZHRoKCkpXG5cdFx0XHRcdFx0XHRcdFx0OiAoZSA9IDAuNzUgKiAodGhpcy4kc2VhcmNoLnZhbCgpLmxlbmd0aCArIDEpICsgJ2VtJyk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaC5jc3MoJ3dpZHRoJywgZSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL2V2ZW50UmVsYXknLCBbJ2pxdWVyeSddLCBmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIGUoKSB7fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHRcdHZhciByID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRpID0gW1xuXHRcdFx0XHRcdFx0XHRcdFx0J29wZW4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0J29wZW5pbmcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J2Nsb3NlJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdjbG9zaW5nJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdzZWxlY3QnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdGluZycsXG5cdFx0XHRcdFx0XHRcdFx0XHQndW5zZWxlY3QnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Vuc2VsZWN0aW5nJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdjbGVhcicsXG5cdFx0XHRcdFx0XHRcdFx0XHQnY2xlYXJpbmcnLFxuXHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0byA9IFsnb3BlbmluZycsICdjbG9zaW5nJywgJ3NlbGVjdGluZycsICd1bnNlbGVjdGluZycsICdjbGVhcmluZyddO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignKicsIGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoLTEgIT09IHMuaW5BcnJheShlLCBpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ID0gdCB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSBzLkV2ZW50KCdzZWxlY3QyOicgKyBlLCB7cGFyYW1zOiB0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuJGVsZW1lbnQudHJpZ2dlcihuKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQtMSAhPT0gcy5pbkFycmF5KGUsIG8pICYmICh0LnByZXZlbnRlZCA9IG4uaXNEZWZhdWx0UHJldmVudGVkKCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL3RyYW5zbGF0aW9uJywgWydqcXVlcnknLCAncmVxdWlyZSddLCBmdW5jdGlvbiAodCwgbikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHIoZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5kaWN0ID0gZSB8fCB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmRpY3Q7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5kaWN0W2VdO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5kaWN0ID0gdC5leHRlbmQoe30sIGUuYWxsKCksIHRoaXMuZGljdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChyLl9jYWNoZSA9IHt9KSxcblx0XHRcdFx0XHRcdChyLmxvYWRQYXRoID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCEoZSBpbiByLl9jYWNoZSkpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IG4oZSk7XG5cdFx0XHRcdFx0XHRcdFx0ci5fY2FjaGVbZV0gPSB0O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuZXcgcihyLl9jYWNoZVtlXSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdHJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGlhY3JpdGljcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdCfikrYnOiAnQScsXG5cdFx0XHRcdFx0XHTvvKE6ICdBJyxcblx0XHRcdFx0XHRcdMOAOiAnQScsXG5cdFx0XHRcdFx0XHTDgTogJ0EnLFxuXHRcdFx0XHRcdFx0w4I6ICdBJyxcblx0XHRcdFx0XHRcdOG6pjogJ0EnLFxuXHRcdFx0XHRcdFx04bqkOiAnQScsXG5cdFx0XHRcdFx0XHThuqo6ICdBJyxcblx0XHRcdFx0XHRcdOG6qDogJ0EnLFxuXHRcdFx0XHRcdFx0w4M6ICdBJyxcblx0XHRcdFx0XHRcdMSAOiAnQScsXG5cdFx0XHRcdFx0XHTEgjogJ0EnLFxuXHRcdFx0XHRcdFx04bqwOiAnQScsXG5cdFx0XHRcdFx0XHThuq46ICdBJyxcblx0XHRcdFx0XHRcdOG6tDogJ0EnLFxuXHRcdFx0XHRcdFx04bqyOiAnQScsXG5cdFx0XHRcdFx0XHTIpjogJ0EnLFxuXHRcdFx0XHRcdFx0x6A6ICdBJyxcblx0XHRcdFx0XHRcdMOEOiAnQScsXG5cdFx0XHRcdFx0XHTHnjogJ0EnLFxuXHRcdFx0XHRcdFx04bqiOiAnQScsXG5cdFx0XHRcdFx0XHTDhTogJ0EnLFxuXHRcdFx0XHRcdFx0x7o6ICdBJyxcblx0XHRcdFx0XHRcdMeNOiAnQScsXG5cdFx0XHRcdFx0XHTIgDogJ0EnLFxuXHRcdFx0XHRcdFx0yII6ICdBJyxcblx0XHRcdFx0XHRcdOG6oDogJ0EnLFxuXHRcdFx0XHRcdFx04bqsOiAnQScsXG5cdFx0XHRcdFx0XHThurY6ICdBJyxcblx0XHRcdFx0XHRcdOG4gDogJ0EnLFxuXHRcdFx0XHRcdFx0xIQ6ICdBJyxcblx0XHRcdFx0XHRcdMi6OiAnQScsXG5cdFx0XHRcdFx0XHTisa86ICdBJyxcblx0XHRcdFx0XHRcdOqcsjogJ0FBJyxcblx0XHRcdFx0XHRcdMOGOiAnQUUnLFxuXHRcdFx0XHRcdFx0x7w6ICdBRScsXG5cdFx0XHRcdFx0XHTHojogJ0FFJyxcblx0XHRcdFx0XHRcdOqctDogJ0FPJyxcblx0XHRcdFx0XHRcdOqctjogJ0FVJyxcblx0XHRcdFx0XHRcdOqcuDogJ0FWJyxcblx0XHRcdFx0XHRcdOqcujogJ0FWJyxcblx0XHRcdFx0XHRcdOqcvDogJ0FZJyxcblx0XHRcdFx0XHRcdCfikrcnOiAnQicsXG5cdFx0XHRcdFx0XHTvvKI6ICdCJyxcblx0XHRcdFx0XHRcdOG4gjogJ0InLFxuXHRcdFx0XHRcdFx04biEOiAnQicsXG5cdFx0XHRcdFx0XHThuIY6ICdCJyxcblx0XHRcdFx0XHRcdMmDOiAnQicsXG5cdFx0XHRcdFx0XHTGgjogJ0InLFxuXHRcdFx0XHRcdFx0xoE6ICdCJyxcblx0XHRcdFx0XHRcdCfikrgnOiAnQycsXG5cdFx0XHRcdFx0XHTvvKM6ICdDJyxcblx0XHRcdFx0XHRcdMSGOiAnQycsXG5cdFx0XHRcdFx0XHTEiDogJ0MnLFxuXHRcdFx0XHRcdFx0xIo6ICdDJyxcblx0XHRcdFx0XHRcdMSMOiAnQycsXG5cdFx0XHRcdFx0XHTDhzogJ0MnLFxuXHRcdFx0XHRcdFx04biIOiAnQycsXG5cdFx0XHRcdFx0XHTGhzogJ0MnLFxuXHRcdFx0XHRcdFx0yLs6ICdDJyxcblx0XHRcdFx0XHRcdOqcvjogJ0MnLFxuXHRcdFx0XHRcdFx0J+KSuSc6ICdEJyxcblx0XHRcdFx0XHRcdO+8pDogJ0QnLFxuXHRcdFx0XHRcdFx04biKOiAnRCcsXG5cdFx0XHRcdFx0XHTEjjogJ0QnLFxuXHRcdFx0XHRcdFx04biMOiAnRCcsXG5cdFx0XHRcdFx0XHThuJA6ICdEJyxcblx0XHRcdFx0XHRcdOG4kjogJ0QnLFxuXHRcdFx0XHRcdFx04biOOiAnRCcsXG5cdFx0XHRcdFx0XHTEkDogJ0QnLFxuXHRcdFx0XHRcdFx0xos6ICdEJyxcblx0XHRcdFx0XHRcdMaKOiAnRCcsXG5cdFx0XHRcdFx0XHTGiTogJ0QnLFxuXHRcdFx0XHRcdFx06p25OiAnRCcsXG5cdFx0XHRcdFx0XHTHsTogJ0RaJyxcblx0XHRcdFx0XHRcdMeEOiAnRFonLFxuXHRcdFx0XHRcdFx0x7I6ICdEeicsXG5cdFx0XHRcdFx0XHTHhTogJ0R6Jyxcblx0XHRcdFx0XHRcdCfikronOiAnRScsXG5cdFx0XHRcdFx0XHTvvKU6ICdFJyxcblx0XHRcdFx0XHRcdMOIOiAnRScsXG5cdFx0XHRcdFx0XHTDiTogJ0UnLFxuXHRcdFx0XHRcdFx0w4o6ICdFJyxcblx0XHRcdFx0XHRcdOG7gDogJ0UnLFxuXHRcdFx0XHRcdFx04bq+OiAnRScsXG5cdFx0XHRcdFx0XHThu4Q6ICdFJyxcblx0XHRcdFx0XHRcdOG7gjogJ0UnLFxuXHRcdFx0XHRcdFx04bq8OiAnRScsXG5cdFx0XHRcdFx0XHTEkjogJ0UnLFxuXHRcdFx0XHRcdFx04biUOiAnRScsXG5cdFx0XHRcdFx0XHThuJY6ICdFJyxcblx0XHRcdFx0XHRcdMSUOiAnRScsXG5cdFx0XHRcdFx0XHTEljogJ0UnLFxuXHRcdFx0XHRcdFx0w4s6ICdFJyxcblx0XHRcdFx0XHRcdOG6ujogJ0UnLFxuXHRcdFx0XHRcdFx0xJo6ICdFJyxcblx0XHRcdFx0XHRcdMiEOiAnRScsXG5cdFx0XHRcdFx0XHTIhjogJ0UnLFxuXHRcdFx0XHRcdFx04bq4OiAnRScsXG5cdFx0XHRcdFx0XHThu4Y6ICdFJyxcblx0XHRcdFx0XHRcdMioOiAnRScsXG5cdFx0XHRcdFx0XHThuJw6ICdFJyxcblx0XHRcdFx0XHRcdMSYOiAnRScsXG5cdFx0XHRcdFx0XHThuJg6ICdFJyxcblx0XHRcdFx0XHRcdOG4mjogJ0UnLFxuXHRcdFx0XHRcdFx0xpA6ICdFJyxcblx0XHRcdFx0XHRcdMaOOiAnRScsXG5cdFx0XHRcdFx0XHQn4pK7JzogJ0YnLFxuXHRcdFx0XHRcdFx077ymOiAnRicsXG5cdFx0XHRcdFx0XHThuJ46ICdGJyxcblx0XHRcdFx0XHRcdMaROiAnRicsXG5cdFx0XHRcdFx0XHTqnbs6ICdGJyxcblx0XHRcdFx0XHRcdCfikrwnOiAnRycsXG5cdFx0XHRcdFx0XHTvvKc6ICdHJyxcblx0XHRcdFx0XHRcdMe0OiAnRycsXG5cdFx0XHRcdFx0XHTEnDogJ0cnLFxuXHRcdFx0XHRcdFx04bigOiAnRycsXG5cdFx0XHRcdFx0XHTEnjogJ0cnLFxuXHRcdFx0XHRcdFx0xKA6ICdHJyxcblx0XHRcdFx0XHRcdMemOiAnRycsXG5cdFx0XHRcdFx0XHTEojogJ0cnLFxuXHRcdFx0XHRcdFx0x6Q6ICdHJyxcblx0XHRcdFx0XHRcdMaTOiAnRycsXG5cdFx0XHRcdFx0XHTqnqA6ICdHJyxcblx0XHRcdFx0XHRcdOqdvTogJ0cnLFxuXHRcdFx0XHRcdFx06p2+OiAnRycsXG5cdFx0XHRcdFx0XHQn4pK9JzogJ0gnLFxuXHRcdFx0XHRcdFx077yoOiAnSCcsXG5cdFx0XHRcdFx0XHTEpDogJ0gnLFxuXHRcdFx0XHRcdFx04biiOiAnSCcsXG5cdFx0XHRcdFx0XHThuKY6ICdIJyxcblx0XHRcdFx0XHRcdMieOiAnSCcsXG5cdFx0XHRcdFx0XHThuKQ6ICdIJyxcblx0XHRcdFx0XHRcdOG4qDogJ0gnLFxuXHRcdFx0XHRcdFx04biqOiAnSCcsXG5cdFx0XHRcdFx0XHTEpjogJ0gnLFxuXHRcdFx0XHRcdFx04rGnOiAnSCcsXG5cdFx0XHRcdFx0XHTisbU6ICdIJyxcblx0XHRcdFx0XHRcdOqejTogJ0gnLFxuXHRcdFx0XHRcdFx0J+KSvic6ICdJJyxcblx0XHRcdFx0XHRcdO+8qTogJ0knLFxuXHRcdFx0XHRcdFx0w4w6ICdJJyxcblx0XHRcdFx0XHRcdMONOiAnSScsXG5cdFx0XHRcdFx0XHTDjjogJ0knLFxuXHRcdFx0XHRcdFx0xKg6ICdJJyxcblx0XHRcdFx0XHRcdMSqOiAnSScsXG5cdFx0XHRcdFx0XHTErDogJ0knLFxuXHRcdFx0XHRcdFx0xLA6ICdJJyxcblx0XHRcdFx0XHRcdMOPOiAnSScsXG5cdFx0XHRcdFx0XHThuK46ICdJJyxcblx0XHRcdFx0XHRcdOG7iDogJ0knLFxuXHRcdFx0XHRcdFx0x486ICdJJyxcblx0XHRcdFx0XHRcdMiIOiAnSScsXG5cdFx0XHRcdFx0XHTIijogJ0knLFxuXHRcdFx0XHRcdFx04buKOiAnSScsXG5cdFx0XHRcdFx0XHTErjogJ0knLFxuXHRcdFx0XHRcdFx04bisOiAnSScsXG5cdFx0XHRcdFx0XHTGlzogJ0knLFxuXHRcdFx0XHRcdFx0J+KSvyc6ICdKJyxcblx0XHRcdFx0XHRcdO+8qjogJ0onLFxuXHRcdFx0XHRcdFx0xLQ6ICdKJyxcblx0XHRcdFx0XHRcdMmIOiAnSicsXG5cdFx0XHRcdFx0XHQn4pOAJzogJ0snLFxuXHRcdFx0XHRcdFx077yrOiAnSycsXG5cdFx0XHRcdFx0XHThuLA6ICdLJyxcblx0XHRcdFx0XHRcdMeoOiAnSycsXG5cdFx0XHRcdFx0XHThuLI6ICdLJyxcblx0XHRcdFx0XHRcdMS2OiAnSycsXG5cdFx0XHRcdFx0XHThuLQ6ICdLJyxcblx0XHRcdFx0XHRcdMaYOiAnSycsXG5cdFx0XHRcdFx0XHTisak6ICdLJyxcblx0XHRcdFx0XHRcdOqdgDogJ0snLFxuXHRcdFx0XHRcdFx06p2COiAnSycsXG5cdFx0XHRcdFx0XHTqnYQ6ICdLJyxcblx0XHRcdFx0XHRcdOqeojogJ0snLFxuXHRcdFx0XHRcdFx0J+KTgSc6ICdMJyxcblx0XHRcdFx0XHRcdO+8rDogJ0wnLFxuXHRcdFx0XHRcdFx0xL86ICdMJyxcblx0XHRcdFx0XHRcdMS5OiAnTCcsXG5cdFx0XHRcdFx0XHTEvTogJ0wnLFxuXHRcdFx0XHRcdFx04bi2OiAnTCcsXG5cdFx0XHRcdFx0XHThuLg6ICdMJyxcblx0XHRcdFx0XHRcdMS7OiAnTCcsXG5cdFx0XHRcdFx0XHThuLw6ICdMJyxcblx0XHRcdFx0XHRcdOG4ujogJ0wnLFxuXHRcdFx0XHRcdFx0xYE6ICdMJyxcblx0XHRcdFx0XHRcdMi9OiAnTCcsXG5cdFx0XHRcdFx0XHTisaI6ICdMJyxcblx0XHRcdFx0XHRcdOKxoDogJ0wnLFxuXHRcdFx0XHRcdFx06p2IOiAnTCcsXG5cdFx0XHRcdFx0XHTqnYY6ICdMJyxcblx0XHRcdFx0XHRcdOqegDogJ0wnLFxuXHRcdFx0XHRcdFx0x4c6ICdMSicsXG5cdFx0XHRcdFx0XHTHiDogJ0xqJyxcblx0XHRcdFx0XHRcdCfik4InOiAnTScsXG5cdFx0XHRcdFx0XHTvvK06ICdNJyxcblx0XHRcdFx0XHRcdOG4vjogJ00nLFxuXHRcdFx0XHRcdFx04bmAOiAnTScsXG5cdFx0XHRcdFx0XHThuYI6ICdNJyxcblx0XHRcdFx0XHRcdOKxrjogJ00nLFxuXHRcdFx0XHRcdFx0xpw6ICdNJyxcblx0XHRcdFx0XHRcdCfik4MnOiAnTicsXG5cdFx0XHRcdFx0XHTvvK46ICdOJyxcblx0XHRcdFx0XHRcdMe4OiAnTicsXG5cdFx0XHRcdFx0XHTFgzogJ04nLFxuXHRcdFx0XHRcdFx0w5E6ICdOJyxcblx0XHRcdFx0XHRcdOG5hDogJ04nLFxuXHRcdFx0XHRcdFx0xYc6ICdOJyxcblx0XHRcdFx0XHRcdOG5hjogJ04nLFxuXHRcdFx0XHRcdFx0xYU6ICdOJyxcblx0XHRcdFx0XHRcdOG5ijogJ04nLFxuXHRcdFx0XHRcdFx04bmIOiAnTicsXG5cdFx0XHRcdFx0XHTIoDogJ04nLFxuXHRcdFx0XHRcdFx0xp06ICdOJyxcblx0XHRcdFx0XHRcdOqekDogJ04nLFxuXHRcdFx0XHRcdFx06p6kOiAnTicsXG5cdFx0XHRcdFx0XHTHijogJ05KJyxcblx0XHRcdFx0XHRcdMeLOiAnTmonLFxuXHRcdFx0XHRcdFx0J+KThCc6ICdPJyxcblx0XHRcdFx0XHRcdO+8rzogJ08nLFxuXHRcdFx0XHRcdFx0w5I6ICdPJyxcblx0XHRcdFx0XHRcdMOTOiAnTycsXG5cdFx0XHRcdFx0XHTDlDogJ08nLFxuXHRcdFx0XHRcdFx04buSOiAnTycsXG5cdFx0XHRcdFx0XHThu5A6ICdPJyxcblx0XHRcdFx0XHRcdOG7ljogJ08nLFxuXHRcdFx0XHRcdFx04buUOiAnTycsXG5cdFx0XHRcdFx0XHTDlTogJ08nLFxuXHRcdFx0XHRcdFx04bmMOiAnTycsXG5cdFx0XHRcdFx0XHTIrDogJ08nLFxuXHRcdFx0XHRcdFx04bmOOiAnTycsXG5cdFx0XHRcdFx0XHTFjDogJ08nLFxuXHRcdFx0XHRcdFx04bmQOiAnTycsXG5cdFx0XHRcdFx0XHThuZI6ICdPJyxcblx0XHRcdFx0XHRcdMWOOiAnTycsXG5cdFx0XHRcdFx0XHTIrjogJ08nLFxuXHRcdFx0XHRcdFx0yLA6ICdPJyxcblx0XHRcdFx0XHRcdMOWOiAnTycsXG5cdFx0XHRcdFx0XHTIqjogJ08nLFxuXHRcdFx0XHRcdFx04buOOiAnTycsXG5cdFx0XHRcdFx0XHTFkDogJ08nLFxuXHRcdFx0XHRcdFx0x5E6ICdPJyxcblx0XHRcdFx0XHRcdMiMOiAnTycsXG5cdFx0XHRcdFx0XHTIjjogJ08nLFxuXHRcdFx0XHRcdFx0xqA6ICdPJyxcblx0XHRcdFx0XHRcdOG7nDogJ08nLFxuXHRcdFx0XHRcdFx04buaOiAnTycsXG5cdFx0XHRcdFx0XHThu6A6ICdPJyxcblx0XHRcdFx0XHRcdOG7njogJ08nLFxuXHRcdFx0XHRcdFx04buiOiAnTycsXG5cdFx0XHRcdFx0XHThu4w6ICdPJyxcblx0XHRcdFx0XHRcdOG7mDogJ08nLFxuXHRcdFx0XHRcdFx0x6o6ICdPJyxcblx0XHRcdFx0XHRcdMesOiAnTycsXG5cdFx0XHRcdFx0XHTDmDogJ08nLFxuXHRcdFx0XHRcdFx0x746ICdPJyxcblx0XHRcdFx0XHRcdMaGOiAnTycsXG5cdFx0XHRcdFx0XHTGnzogJ08nLFxuXHRcdFx0XHRcdFx06p2KOiAnTycsXG5cdFx0XHRcdFx0XHTqnYw6ICdPJyxcblx0XHRcdFx0XHRcdMWSOiAnT0UnLFxuXHRcdFx0XHRcdFx0xqI6ICdPSScsXG5cdFx0XHRcdFx0XHTqnY46ICdPTycsXG5cdFx0XHRcdFx0XHTIojogJ09VJyxcblx0XHRcdFx0XHRcdCfik4UnOiAnUCcsXG5cdFx0XHRcdFx0XHTvvLA6ICdQJyxcblx0XHRcdFx0XHRcdOG5lDogJ1AnLFxuXHRcdFx0XHRcdFx04bmWOiAnUCcsXG5cdFx0XHRcdFx0XHTGpDogJ1AnLFxuXHRcdFx0XHRcdFx04rGjOiAnUCcsXG5cdFx0XHRcdFx0XHTqnZA6ICdQJyxcblx0XHRcdFx0XHRcdOqdkjogJ1AnLFxuXHRcdFx0XHRcdFx06p2UOiAnUCcsXG5cdFx0XHRcdFx0XHQn4pOGJzogJ1EnLFxuXHRcdFx0XHRcdFx077yxOiAnUScsXG5cdFx0XHRcdFx0XHTqnZY6ICdRJyxcblx0XHRcdFx0XHRcdOqdmDogJ1EnLFxuXHRcdFx0XHRcdFx0yYo6ICdRJyxcblx0XHRcdFx0XHRcdCfik4cnOiAnUicsXG5cdFx0XHRcdFx0XHTvvLI6ICdSJyxcblx0XHRcdFx0XHRcdMWUOiAnUicsXG5cdFx0XHRcdFx0XHThuZg6ICdSJyxcblx0XHRcdFx0XHRcdMWYOiAnUicsXG5cdFx0XHRcdFx0XHTIkDogJ1InLFxuXHRcdFx0XHRcdFx0yJI6ICdSJyxcblx0XHRcdFx0XHRcdOG5mjogJ1InLFxuXHRcdFx0XHRcdFx04bmcOiAnUicsXG5cdFx0XHRcdFx0XHTFljogJ1InLFxuXHRcdFx0XHRcdFx04bmeOiAnUicsXG5cdFx0XHRcdFx0XHTJjDogJ1InLFxuXHRcdFx0XHRcdFx04rGkOiAnUicsXG5cdFx0XHRcdFx0XHTqnZo6ICdSJyxcblx0XHRcdFx0XHRcdOqepjogJ1InLFxuXHRcdFx0XHRcdFx06p6COiAnUicsXG5cdFx0XHRcdFx0XHQn4pOIJzogJ1MnLFxuXHRcdFx0XHRcdFx077yzOiAnUycsXG5cdFx0XHRcdFx0XHThup46ICdTJyxcblx0XHRcdFx0XHRcdMWaOiAnUycsXG5cdFx0XHRcdFx0XHThuaQ6ICdTJyxcblx0XHRcdFx0XHRcdMWcOiAnUycsXG5cdFx0XHRcdFx0XHThuaA6ICdTJyxcblx0XHRcdFx0XHRcdMWgOiAnUycsXG5cdFx0XHRcdFx0XHThuaY6ICdTJyxcblx0XHRcdFx0XHRcdOG5ojogJ1MnLFxuXHRcdFx0XHRcdFx04bmoOiAnUycsXG5cdFx0XHRcdFx0XHTImDogJ1MnLFxuXHRcdFx0XHRcdFx0xZ46ICdTJyxcblx0XHRcdFx0XHRcdOKxvjogJ1MnLFxuXHRcdFx0XHRcdFx06p6oOiAnUycsXG5cdFx0XHRcdFx0XHTqnoQ6ICdTJyxcblx0XHRcdFx0XHRcdCfik4knOiAnVCcsXG5cdFx0XHRcdFx0XHTvvLQ6ICdUJyxcblx0XHRcdFx0XHRcdOG5qjogJ1QnLFxuXHRcdFx0XHRcdFx0xaQ6ICdUJyxcblx0XHRcdFx0XHRcdOG5rDogJ1QnLFxuXHRcdFx0XHRcdFx0yJo6ICdUJyxcblx0XHRcdFx0XHRcdMWiOiAnVCcsXG5cdFx0XHRcdFx0XHThubA6ICdUJyxcblx0XHRcdFx0XHRcdOG5rjogJ1QnLFxuXHRcdFx0XHRcdFx0xaY6ICdUJyxcblx0XHRcdFx0XHRcdMasOiAnVCcsXG5cdFx0XHRcdFx0XHTGrjogJ1QnLFxuXHRcdFx0XHRcdFx0yL46ICdUJyxcblx0XHRcdFx0XHRcdOqehjogJ1QnLFxuXHRcdFx0XHRcdFx06pyoOiAnVFonLFxuXHRcdFx0XHRcdFx0J+KTiic6ICdVJyxcblx0XHRcdFx0XHRcdO+8tTogJ1UnLFxuXHRcdFx0XHRcdFx0w5k6ICdVJyxcblx0XHRcdFx0XHRcdMOaOiAnVScsXG5cdFx0XHRcdFx0XHTDmzogJ1UnLFxuXHRcdFx0XHRcdFx0xag6ICdVJyxcblx0XHRcdFx0XHRcdOG5uDogJ1UnLFxuXHRcdFx0XHRcdFx0xao6ICdVJyxcblx0XHRcdFx0XHRcdOG5ujogJ1UnLFxuXHRcdFx0XHRcdFx0xaw6ICdVJyxcblx0XHRcdFx0XHRcdMOcOiAnVScsXG5cdFx0XHRcdFx0XHTHmzogJ1UnLFxuXHRcdFx0XHRcdFx0x5c6ICdVJyxcblx0XHRcdFx0XHRcdMeVOiAnVScsXG5cdFx0XHRcdFx0XHTHmTogJ1UnLFxuXHRcdFx0XHRcdFx04bumOiAnVScsXG5cdFx0XHRcdFx0XHTFrjogJ1UnLFxuXHRcdFx0XHRcdFx0xbA6ICdVJyxcblx0XHRcdFx0XHRcdMeTOiAnVScsXG5cdFx0XHRcdFx0XHTIlDogJ1UnLFxuXHRcdFx0XHRcdFx0yJY6ICdVJyxcblx0XHRcdFx0XHRcdMavOiAnVScsXG5cdFx0XHRcdFx0XHThu6o6ICdVJyxcblx0XHRcdFx0XHRcdOG7qDogJ1UnLFxuXHRcdFx0XHRcdFx04buuOiAnVScsXG5cdFx0XHRcdFx0XHThu6w6ICdVJyxcblx0XHRcdFx0XHRcdOG7sDogJ1UnLFxuXHRcdFx0XHRcdFx04bukOiAnVScsXG5cdFx0XHRcdFx0XHThubI6ICdVJyxcblx0XHRcdFx0XHRcdMWyOiAnVScsXG5cdFx0XHRcdFx0XHThubY6ICdVJyxcblx0XHRcdFx0XHRcdOG5tDogJ1UnLFxuXHRcdFx0XHRcdFx0yYQ6ICdVJyxcblx0XHRcdFx0XHRcdCfik4snOiAnVicsXG5cdFx0XHRcdFx0XHTvvLY6ICdWJyxcblx0XHRcdFx0XHRcdOG5vDogJ1YnLFxuXHRcdFx0XHRcdFx04bm+OiAnVicsXG5cdFx0XHRcdFx0XHTGsjogJ1YnLFxuXHRcdFx0XHRcdFx06p2eOiAnVicsXG5cdFx0XHRcdFx0XHTJhTogJ1YnLFxuXHRcdFx0XHRcdFx06p2gOiAnVlknLFxuXHRcdFx0XHRcdFx0J+KTjCc6ICdXJyxcblx0XHRcdFx0XHRcdO+8tzogJ1cnLFxuXHRcdFx0XHRcdFx04bqAOiAnVycsXG5cdFx0XHRcdFx0XHThuoI6ICdXJyxcblx0XHRcdFx0XHRcdMW0OiAnVycsXG5cdFx0XHRcdFx0XHThuoY6ICdXJyxcblx0XHRcdFx0XHRcdOG6hDogJ1cnLFxuXHRcdFx0XHRcdFx04bqIOiAnVycsXG5cdFx0XHRcdFx0XHTisbI6ICdXJyxcblx0XHRcdFx0XHRcdCfik40nOiAnWCcsXG5cdFx0XHRcdFx0XHTvvLg6ICdYJyxcblx0XHRcdFx0XHRcdOG6ijogJ1gnLFxuXHRcdFx0XHRcdFx04bqMOiAnWCcsXG5cdFx0XHRcdFx0XHQn4pOOJzogJ1knLFxuXHRcdFx0XHRcdFx077y5OiAnWScsXG5cdFx0XHRcdFx0XHThu7I6ICdZJyxcblx0XHRcdFx0XHRcdMOdOiAnWScsXG5cdFx0XHRcdFx0XHTFtjogJ1knLFxuXHRcdFx0XHRcdFx04bu4OiAnWScsXG5cdFx0XHRcdFx0XHTIsjogJ1knLFxuXHRcdFx0XHRcdFx04bqOOiAnWScsXG5cdFx0XHRcdFx0XHTFuDogJ1knLFxuXHRcdFx0XHRcdFx04bu2OiAnWScsXG5cdFx0XHRcdFx0XHThu7Q6ICdZJyxcblx0XHRcdFx0XHRcdMazOiAnWScsXG5cdFx0XHRcdFx0XHTJjjogJ1knLFxuXHRcdFx0XHRcdFx04bu+OiAnWScsXG5cdFx0XHRcdFx0XHQn4pOPJzogJ1onLFxuXHRcdFx0XHRcdFx077y6OiAnWicsXG5cdFx0XHRcdFx0XHTFuTogJ1onLFxuXHRcdFx0XHRcdFx04bqQOiAnWicsXG5cdFx0XHRcdFx0XHTFuzogJ1onLFxuXHRcdFx0XHRcdFx0xb06ICdaJyxcblx0XHRcdFx0XHRcdOG6kjogJ1onLFxuXHRcdFx0XHRcdFx04bqUOiAnWicsXG5cdFx0XHRcdFx0XHTGtTogJ1onLFxuXHRcdFx0XHRcdFx0yKQ6ICdaJyxcblx0XHRcdFx0XHRcdOKxvzogJ1onLFxuXHRcdFx0XHRcdFx04rGrOiAnWicsXG5cdFx0XHRcdFx0XHTqnaI6ICdaJyxcblx0XHRcdFx0XHRcdCfik5AnOiAnYScsXG5cdFx0XHRcdFx0XHTvvYE6ICdhJyxcblx0XHRcdFx0XHRcdOG6mjogJ2EnLFxuXHRcdFx0XHRcdFx0w6A6ICdhJyxcblx0XHRcdFx0XHRcdMOhOiAnYScsXG5cdFx0XHRcdFx0XHTDojogJ2EnLFxuXHRcdFx0XHRcdFx04bqnOiAnYScsXG5cdFx0XHRcdFx0XHThuqU6ICdhJyxcblx0XHRcdFx0XHRcdOG6qzogJ2EnLFxuXHRcdFx0XHRcdFx04bqpOiAnYScsXG5cdFx0XHRcdFx0XHTDozogJ2EnLFxuXHRcdFx0XHRcdFx0xIE6ICdhJyxcblx0XHRcdFx0XHRcdMSDOiAnYScsXG5cdFx0XHRcdFx0XHThurE6ICdhJyxcblx0XHRcdFx0XHRcdOG6rzogJ2EnLFxuXHRcdFx0XHRcdFx04bq1OiAnYScsXG5cdFx0XHRcdFx0XHThurM6ICdhJyxcblx0XHRcdFx0XHRcdMinOiAnYScsXG5cdFx0XHRcdFx0XHTHoTogJ2EnLFxuXHRcdFx0XHRcdFx0w6Q6ICdhJyxcblx0XHRcdFx0XHRcdMefOiAnYScsXG5cdFx0XHRcdFx0XHThuqM6ICdhJyxcblx0XHRcdFx0XHRcdMOlOiAnYScsXG5cdFx0XHRcdFx0XHTHuzogJ2EnLFxuXHRcdFx0XHRcdFx0x446ICdhJyxcblx0XHRcdFx0XHRcdMiBOiAnYScsXG5cdFx0XHRcdFx0XHTIgzogJ2EnLFxuXHRcdFx0XHRcdFx04bqhOiAnYScsXG5cdFx0XHRcdFx0XHThuq06ICdhJyxcblx0XHRcdFx0XHRcdOG6tzogJ2EnLFxuXHRcdFx0XHRcdFx04biBOiAnYScsXG5cdFx0XHRcdFx0XHTEhTogJ2EnLFxuXHRcdFx0XHRcdFx04rGlOiAnYScsXG5cdFx0XHRcdFx0XHTJkDogJ2EnLFxuXHRcdFx0XHRcdFx06pyzOiAnYWEnLFxuXHRcdFx0XHRcdFx0w6Y6ICdhZScsXG5cdFx0XHRcdFx0XHTHvTogJ2FlJyxcblx0XHRcdFx0XHRcdMejOiAnYWUnLFxuXHRcdFx0XHRcdFx06py1OiAnYW8nLFxuXHRcdFx0XHRcdFx06py3OiAnYXUnLFxuXHRcdFx0XHRcdFx06py5OiAnYXYnLFxuXHRcdFx0XHRcdFx06py7OiAnYXYnLFxuXHRcdFx0XHRcdFx06py9OiAnYXknLFxuXHRcdFx0XHRcdFx0J+KTkSc6ICdiJyxcblx0XHRcdFx0XHRcdO+9gjogJ2InLFxuXHRcdFx0XHRcdFx04biDOiAnYicsXG5cdFx0XHRcdFx0XHThuIU6ICdiJyxcblx0XHRcdFx0XHRcdOG4hzogJ2InLFxuXHRcdFx0XHRcdFx0xoA6ICdiJyxcblx0XHRcdFx0XHRcdMaDOiAnYicsXG5cdFx0XHRcdFx0XHTJkzogJ2InLFxuXHRcdFx0XHRcdFx0J+KTkic6ICdjJyxcblx0XHRcdFx0XHRcdO+9gzogJ2MnLFxuXHRcdFx0XHRcdFx0xIc6ICdjJyxcblx0XHRcdFx0XHRcdMSJOiAnYycsXG5cdFx0XHRcdFx0XHTEizogJ2MnLFxuXHRcdFx0XHRcdFx0xI06ICdjJyxcblx0XHRcdFx0XHRcdMOnOiAnYycsXG5cdFx0XHRcdFx0XHThuIk6ICdjJyxcblx0XHRcdFx0XHRcdMaIOiAnYycsXG5cdFx0XHRcdFx0XHTIvDogJ2MnLFxuXHRcdFx0XHRcdFx06py/OiAnYycsXG5cdFx0XHRcdFx0XHTihoQ6ICdjJyxcblx0XHRcdFx0XHRcdCfik5MnOiAnZCcsXG5cdFx0XHRcdFx0XHTvvYQ6ICdkJyxcblx0XHRcdFx0XHRcdOG4izogJ2QnLFxuXHRcdFx0XHRcdFx0xI86ICdkJyxcblx0XHRcdFx0XHRcdOG4jTogJ2QnLFxuXHRcdFx0XHRcdFx04biROiAnZCcsXG5cdFx0XHRcdFx0XHThuJM6ICdkJyxcblx0XHRcdFx0XHRcdOG4jzogJ2QnLFxuXHRcdFx0XHRcdFx0xJE6ICdkJyxcblx0XHRcdFx0XHRcdMaMOiAnZCcsXG5cdFx0XHRcdFx0XHTJljogJ2QnLFxuXHRcdFx0XHRcdFx0yZc6ICdkJyxcblx0XHRcdFx0XHRcdOqdujogJ2QnLFxuXHRcdFx0XHRcdFx0x7M6ICdkeicsXG5cdFx0XHRcdFx0XHTHhjogJ2R6Jyxcblx0XHRcdFx0XHRcdCfik5QnOiAnZScsXG5cdFx0XHRcdFx0XHTvvYU6ICdlJyxcblx0XHRcdFx0XHRcdMOoOiAnZScsXG5cdFx0XHRcdFx0XHTDqTogJ2UnLFxuXHRcdFx0XHRcdFx0w6o6ICdlJyxcblx0XHRcdFx0XHRcdOG7gTogJ2UnLFxuXHRcdFx0XHRcdFx04bq/OiAnZScsXG5cdFx0XHRcdFx0XHThu4U6ICdlJyxcblx0XHRcdFx0XHRcdOG7gzogJ2UnLFxuXHRcdFx0XHRcdFx04bq9OiAnZScsXG5cdFx0XHRcdFx0XHTEkzogJ2UnLFxuXHRcdFx0XHRcdFx04biVOiAnZScsXG5cdFx0XHRcdFx0XHThuJc6ICdlJyxcblx0XHRcdFx0XHRcdMSVOiAnZScsXG5cdFx0XHRcdFx0XHTElzogJ2UnLFxuXHRcdFx0XHRcdFx0w6s6ICdlJyxcblx0XHRcdFx0XHRcdOG6uzogJ2UnLFxuXHRcdFx0XHRcdFx0xJs6ICdlJyxcblx0XHRcdFx0XHRcdMiFOiAnZScsXG5cdFx0XHRcdFx0XHTIhzogJ2UnLFxuXHRcdFx0XHRcdFx04bq5OiAnZScsXG5cdFx0XHRcdFx0XHThu4c6ICdlJyxcblx0XHRcdFx0XHRcdMipOiAnZScsXG5cdFx0XHRcdFx0XHThuJ06ICdlJyxcblx0XHRcdFx0XHRcdMSZOiAnZScsXG5cdFx0XHRcdFx0XHThuJk6ICdlJyxcblx0XHRcdFx0XHRcdOG4mzogJ2UnLFxuXHRcdFx0XHRcdFx0yYc6ICdlJyxcblx0XHRcdFx0XHRcdMmbOiAnZScsXG5cdFx0XHRcdFx0XHTHnTogJ2UnLFxuXHRcdFx0XHRcdFx0J+KTlSc6ICdmJyxcblx0XHRcdFx0XHRcdO+9hjogJ2YnLFxuXHRcdFx0XHRcdFx04bifOiAnZicsXG5cdFx0XHRcdFx0XHTGkjogJ2YnLFxuXHRcdFx0XHRcdFx06p28OiAnZicsXG5cdFx0XHRcdFx0XHQn4pOWJzogJ2cnLFxuXHRcdFx0XHRcdFx0772HOiAnZycsXG5cdFx0XHRcdFx0XHTHtTogJ2cnLFxuXHRcdFx0XHRcdFx0xJ06ICdnJyxcblx0XHRcdFx0XHRcdOG4oTogJ2cnLFxuXHRcdFx0XHRcdFx0xJ86ICdnJyxcblx0XHRcdFx0XHRcdMShOiAnZycsXG5cdFx0XHRcdFx0XHTHpzogJ2cnLFxuXHRcdFx0XHRcdFx0xKM6ICdnJyxcblx0XHRcdFx0XHRcdMelOiAnZycsXG5cdFx0XHRcdFx0XHTJoDogJ2cnLFxuXHRcdFx0XHRcdFx06p6hOiAnZycsXG5cdFx0XHRcdFx0XHThtbk6ICdnJyxcblx0XHRcdFx0XHRcdOqdvzogJ2cnLFxuXHRcdFx0XHRcdFx0J+KTlyc6ICdoJyxcblx0XHRcdFx0XHRcdO+9iDogJ2gnLFxuXHRcdFx0XHRcdFx0xKU6ICdoJyxcblx0XHRcdFx0XHRcdOG4ozogJ2gnLFxuXHRcdFx0XHRcdFx04binOiAnaCcsXG5cdFx0XHRcdFx0XHTInzogJ2gnLFxuXHRcdFx0XHRcdFx04bilOiAnaCcsXG5cdFx0XHRcdFx0XHThuKk6ICdoJyxcblx0XHRcdFx0XHRcdOG4qzogJ2gnLFxuXHRcdFx0XHRcdFx04bqWOiAnaCcsXG5cdFx0XHRcdFx0XHTEpzogJ2gnLFxuXHRcdFx0XHRcdFx04rGoOiAnaCcsXG5cdFx0XHRcdFx0XHTisbY6ICdoJyxcblx0XHRcdFx0XHRcdMmlOiAnaCcsXG5cdFx0XHRcdFx0XHTGlTogJ2h2Jyxcblx0XHRcdFx0XHRcdCfik5gnOiAnaScsXG5cdFx0XHRcdFx0XHTvvYk6ICdpJyxcblx0XHRcdFx0XHRcdMOsOiAnaScsXG5cdFx0XHRcdFx0XHTDrTogJ2knLFxuXHRcdFx0XHRcdFx0w646ICdpJyxcblx0XHRcdFx0XHRcdMSpOiAnaScsXG5cdFx0XHRcdFx0XHTEqzogJ2knLFxuXHRcdFx0XHRcdFx0xK06ICdpJyxcblx0XHRcdFx0XHRcdMOvOiAnaScsXG5cdFx0XHRcdFx0XHThuK86ICdpJyxcblx0XHRcdFx0XHRcdOG7iTogJ2knLFxuXHRcdFx0XHRcdFx0x5A6ICdpJyxcblx0XHRcdFx0XHRcdMiJOiAnaScsXG5cdFx0XHRcdFx0XHTIizogJ2knLFxuXHRcdFx0XHRcdFx04buLOiAnaScsXG5cdFx0XHRcdFx0XHTErzogJ2knLFxuXHRcdFx0XHRcdFx04bitOiAnaScsXG5cdFx0XHRcdFx0XHTJqDogJ2knLFxuXHRcdFx0XHRcdFx0xLE6ICdpJyxcblx0XHRcdFx0XHRcdCfik5knOiAnaicsXG5cdFx0XHRcdFx0XHTvvYo6ICdqJyxcblx0XHRcdFx0XHRcdMS1OiAnaicsXG5cdFx0XHRcdFx0XHTHsDogJ2onLFxuXHRcdFx0XHRcdFx0yYk6ICdqJyxcblx0XHRcdFx0XHRcdCfik5onOiAnaycsXG5cdFx0XHRcdFx0XHTvvYs6ICdrJyxcblx0XHRcdFx0XHRcdOG4sTogJ2snLFxuXHRcdFx0XHRcdFx0x6k6ICdrJyxcblx0XHRcdFx0XHRcdOG4szogJ2snLFxuXHRcdFx0XHRcdFx0xLc6ICdrJyxcblx0XHRcdFx0XHRcdOG4tTogJ2snLFxuXHRcdFx0XHRcdFx0xpk6ICdrJyxcblx0XHRcdFx0XHRcdOKxqjogJ2snLFxuXHRcdFx0XHRcdFx06p2BOiAnaycsXG5cdFx0XHRcdFx0XHTqnYM6ICdrJyxcblx0XHRcdFx0XHRcdOqdhTogJ2snLFxuXHRcdFx0XHRcdFx06p6jOiAnaycsXG5cdFx0XHRcdFx0XHQn4pObJzogJ2wnLFxuXHRcdFx0XHRcdFx0772MOiAnbCcsXG5cdFx0XHRcdFx0XHTFgDogJ2wnLFxuXHRcdFx0XHRcdFx0xLo6ICdsJyxcblx0XHRcdFx0XHRcdMS+OiAnbCcsXG5cdFx0XHRcdFx0XHThuLc6ICdsJyxcblx0XHRcdFx0XHRcdOG4uTogJ2wnLFxuXHRcdFx0XHRcdFx0xLw6ICdsJyxcblx0XHRcdFx0XHRcdOG4vTogJ2wnLFxuXHRcdFx0XHRcdFx04bi7OiAnbCcsXG5cdFx0XHRcdFx0XHTFvzogJ2wnLFxuXHRcdFx0XHRcdFx0xYI6ICdsJyxcblx0XHRcdFx0XHRcdMaaOiAnbCcsXG5cdFx0XHRcdFx0XHTJqzogJ2wnLFxuXHRcdFx0XHRcdFx04rGhOiAnbCcsXG5cdFx0XHRcdFx0XHTqnYk6ICdsJyxcblx0XHRcdFx0XHRcdOqegTogJ2wnLFxuXHRcdFx0XHRcdFx06p2HOiAnbCcsXG5cdFx0XHRcdFx0XHTHiTogJ2xqJyxcblx0XHRcdFx0XHRcdCfik5wnOiAnbScsXG5cdFx0XHRcdFx0XHTvvY06ICdtJyxcblx0XHRcdFx0XHRcdOG4vzogJ20nLFxuXHRcdFx0XHRcdFx04bmBOiAnbScsXG5cdFx0XHRcdFx0XHThuYM6ICdtJyxcblx0XHRcdFx0XHRcdMmxOiAnbScsXG5cdFx0XHRcdFx0XHTJrzogJ20nLFxuXHRcdFx0XHRcdFx0J+KTnSc6ICduJyxcblx0XHRcdFx0XHRcdO+9jjogJ24nLFxuXHRcdFx0XHRcdFx0x7k6ICduJyxcblx0XHRcdFx0XHRcdMWEOiAnbicsXG5cdFx0XHRcdFx0XHTDsTogJ24nLFxuXHRcdFx0XHRcdFx04bmFOiAnbicsXG5cdFx0XHRcdFx0XHTFiDogJ24nLFxuXHRcdFx0XHRcdFx04bmHOiAnbicsXG5cdFx0XHRcdFx0XHTFhjogJ24nLFxuXHRcdFx0XHRcdFx04bmLOiAnbicsXG5cdFx0XHRcdFx0XHThuYk6ICduJyxcblx0XHRcdFx0XHRcdMaeOiAnbicsXG5cdFx0XHRcdFx0XHTJsjogJ24nLFxuXHRcdFx0XHRcdFx0xYk6ICduJyxcblx0XHRcdFx0XHRcdOqekTogJ24nLFxuXHRcdFx0XHRcdFx06p6lOiAnbicsXG5cdFx0XHRcdFx0XHTHjDogJ25qJyxcblx0XHRcdFx0XHRcdCfik54nOiAnbycsXG5cdFx0XHRcdFx0XHTvvY86ICdvJyxcblx0XHRcdFx0XHRcdMOyOiAnbycsXG5cdFx0XHRcdFx0XHTDszogJ28nLFxuXHRcdFx0XHRcdFx0w7Q6ICdvJyxcblx0XHRcdFx0XHRcdOG7kzogJ28nLFxuXHRcdFx0XHRcdFx04buROiAnbycsXG5cdFx0XHRcdFx0XHThu5c6ICdvJyxcblx0XHRcdFx0XHRcdOG7lTogJ28nLFxuXHRcdFx0XHRcdFx0w7U6ICdvJyxcblx0XHRcdFx0XHRcdOG5jTogJ28nLFxuXHRcdFx0XHRcdFx0yK06ICdvJyxcblx0XHRcdFx0XHRcdOG5jzogJ28nLFxuXHRcdFx0XHRcdFx0xY06ICdvJyxcblx0XHRcdFx0XHRcdOG5kTogJ28nLFxuXHRcdFx0XHRcdFx04bmTOiAnbycsXG5cdFx0XHRcdFx0XHTFjzogJ28nLFxuXHRcdFx0XHRcdFx0yK86ICdvJyxcblx0XHRcdFx0XHRcdMixOiAnbycsXG5cdFx0XHRcdFx0XHTDtjogJ28nLFxuXHRcdFx0XHRcdFx0yKs6ICdvJyxcblx0XHRcdFx0XHRcdOG7jzogJ28nLFxuXHRcdFx0XHRcdFx0xZE6ICdvJyxcblx0XHRcdFx0XHRcdMeSOiAnbycsXG5cdFx0XHRcdFx0XHTIjTogJ28nLFxuXHRcdFx0XHRcdFx0yI86ICdvJyxcblx0XHRcdFx0XHRcdMahOiAnbycsXG5cdFx0XHRcdFx0XHThu506ICdvJyxcblx0XHRcdFx0XHRcdOG7mzogJ28nLFxuXHRcdFx0XHRcdFx04buhOiAnbycsXG5cdFx0XHRcdFx0XHThu586ICdvJyxcblx0XHRcdFx0XHRcdOG7ozogJ28nLFxuXHRcdFx0XHRcdFx04buNOiAnbycsXG5cdFx0XHRcdFx0XHThu5k6ICdvJyxcblx0XHRcdFx0XHRcdMerOiAnbycsXG5cdFx0XHRcdFx0XHTHrTogJ28nLFxuXHRcdFx0XHRcdFx0w7g6ICdvJyxcblx0XHRcdFx0XHRcdMe/OiAnbycsXG5cdFx0XHRcdFx0XHTJlDogJ28nLFxuXHRcdFx0XHRcdFx06p2LOiAnbycsXG5cdFx0XHRcdFx0XHTqnY06ICdvJyxcblx0XHRcdFx0XHRcdMm1OiAnbycsXG5cdFx0XHRcdFx0XHTFkzogJ29lJyxcblx0XHRcdFx0XHRcdMajOiAnb2knLFxuXHRcdFx0XHRcdFx0yKM6ICdvdScsXG5cdFx0XHRcdFx0XHTqnY86ICdvbycsXG5cdFx0XHRcdFx0XHQn4pOfJzogJ3AnLFxuXHRcdFx0XHRcdFx0772QOiAncCcsXG5cdFx0XHRcdFx0XHThuZU6ICdwJyxcblx0XHRcdFx0XHRcdOG5lzogJ3AnLFxuXHRcdFx0XHRcdFx0xqU6ICdwJyxcblx0XHRcdFx0XHRcdOG1vTogJ3AnLFxuXHRcdFx0XHRcdFx06p2ROiAncCcsXG5cdFx0XHRcdFx0XHTqnZM6ICdwJyxcblx0XHRcdFx0XHRcdOqdlTogJ3AnLFxuXHRcdFx0XHRcdFx0J+KToCc6ICdxJyxcblx0XHRcdFx0XHRcdO+9kTogJ3EnLFxuXHRcdFx0XHRcdFx0yYs6ICdxJyxcblx0XHRcdFx0XHRcdOqdlzogJ3EnLFxuXHRcdFx0XHRcdFx06p2ZOiAncScsXG5cdFx0XHRcdFx0XHQn4pOhJzogJ3InLFxuXHRcdFx0XHRcdFx0772SOiAncicsXG5cdFx0XHRcdFx0XHTFlTogJ3InLFxuXHRcdFx0XHRcdFx04bmZOiAncicsXG5cdFx0XHRcdFx0XHTFmTogJ3InLFxuXHRcdFx0XHRcdFx0yJE6ICdyJyxcblx0XHRcdFx0XHRcdMiTOiAncicsXG5cdFx0XHRcdFx0XHThuZs6ICdyJyxcblx0XHRcdFx0XHRcdOG5nTogJ3InLFxuXHRcdFx0XHRcdFx0xZc6ICdyJyxcblx0XHRcdFx0XHRcdOG5nzogJ3InLFxuXHRcdFx0XHRcdFx0yY06ICdyJyxcblx0XHRcdFx0XHRcdMm9OiAncicsXG5cdFx0XHRcdFx0XHTqnZs6ICdyJyxcblx0XHRcdFx0XHRcdOqepzogJ3InLFxuXHRcdFx0XHRcdFx06p6DOiAncicsXG5cdFx0XHRcdFx0XHQn4pOiJzogJ3MnLFxuXHRcdFx0XHRcdFx0772TOiAncycsXG5cdFx0XHRcdFx0XHTDnzogJ3MnLFxuXHRcdFx0XHRcdFx0xZs6ICdzJyxcblx0XHRcdFx0XHRcdOG5pTogJ3MnLFxuXHRcdFx0XHRcdFx0xZ06ICdzJyxcblx0XHRcdFx0XHRcdOG5oTogJ3MnLFxuXHRcdFx0XHRcdFx0xaE6ICdzJyxcblx0XHRcdFx0XHRcdOG5pzogJ3MnLFxuXHRcdFx0XHRcdFx04bmjOiAncycsXG5cdFx0XHRcdFx0XHThuak6ICdzJyxcblx0XHRcdFx0XHRcdMiZOiAncycsXG5cdFx0XHRcdFx0XHTFnzogJ3MnLFxuXHRcdFx0XHRcdFx0yL86ICdzJyxcblx0XHRcdFx0XHRcdOqeqTogJ3MnLFxuXHRcdFx0XHRcdFx06p6FOiAncycsXG5cdFx0XHRcdFx0XHThups6ICdzJyxcblx0XHRcdFx0XHRcdCfik6MnOiAndCcsXG5cdFx0XHRcdFx0XHTvvZQ6ICd0Jyxcblx0XHRcdFx0XHRcdOG5qzogJ3QnLFxuXHRcdFx0XHRcdFx04bqXOiAndCcsXG5cdFx0XHRcdFx0XHTFpTogJ3QnLFxuXHRcdFx0XHRcdFx04bmtOiAndCcsXG5cdFx0XHRcdFx0XHTImzogJ3QnLFxuXHRcdFx0XHRcdFx0xaM6ICd0Jyxcblx0XHRcdFx0XHRcdOG5sTogJ3QnLFxuXHRcdFx0XHRcdFx04bmvOiAndCcsXG5cdFx0XHRcdFx0XHTFpzogJ3QnLFxuXHRcdFx0XHRcdFx0xq06ICd0Jyxcblx0XHRcdFx0XHRcdMqIOiAndCcsXG5cdFx0XHRcdFx0XHTisaY6ICd0Jyxcblx0XHRcdFx0XHRcdOqehzogJ3QnLFxuXHRcdFx0XHRcdFx06pypOiAndHonLFxuXHRcdFx0XHRcdFx0J+KTpCc6ICd1Jyxcblx0XHRcdFx0XHRcdO+9lTogJ3UnLFxuXHRcdFx0XHRcdFx0w7k6ICd1Jyxcblx0XHRcdFx0XHRcdMO6OiAndScsXG5cdFx0XHRcdFx0XHTDuzogJ3UnLFxuXHRcdFx0XHRcdFx0xak6ICd1Jyxcblx0XHRcdFx0XHRcdOG5uTogJ3UnLFxuXHRcdFx0XHRcdFx0xas6ICd1Jyxcblx0XHRcdFx0XHRcdOG5uzogJ3UnLFxuXHRcdFx0XHRcdFx0xa06ICd1Jyxcblx0XHRcdFx0XHRcdMO8OiAndScsXG5cdFx0XHRcdFx0XHTHnDogJ3UnLFxuXHRcdFx0XHRcdFx0x5g6ICd1Jyxcblx0XHRcdFx0XHRcdMeWOiAndScsXG5cdFx0XHRcdFx0XHTHmjogJ3UnLFxuXHRcdFx0XHRcdFx04bunOiAndScsXG5cdFx0XHRcdFx0XHTFrzogJ3UnLFxuXHRcdFx0XHRcdFx0xbE6ICd1Jyxcblx0XHRcdFx0XHRcdMeUOiAndScsXG5cdFx0XHRcdFx0XHTIlTogJ3UnLFxuXHRcdFx0XHRcdFx0yJc6ICd1Jyxcblx0XHRcdFx0XHRcdMawOiAndScsXG5cdFx0XHRcdFx0XHThu6s6ICd1Jyxcblx0XHRcdFx0XHRcdOG7qTogJ3UnLFxuXHRcdFx0XHRcdFx04buvOiAndScsXG5cdFx0XHRcdFx0XHThu606ICd1Jyxcblx0XHRcdFx0XHRcdOG7sTogJ3UnLFxuXHRcdFx0XHRcdFx04bulOiAndScsXG5cdFx0XHRcdFx0XHThubM6ICd1Jyxcblx0XHRcdFx0XHRcdMWzOiAndScsXG5cdFx0XHRcdFx0XHThubc6ICd1Jyxcblx0XHRcdFx0XHRcdOG5tTogJ3UnLFxuXHRcdFx0XHRcdFx0yok6ICd1Jyxcblx0XHRcdFx0XHRcdCfik6UnOiAndicsXG5cdFx0XHRcdFx0XHTvvZY6ICd2Jyxcblx0XHRcdFx0XHRcdOG5vTogJ3YnLFxuXHRcdFx0XHRcdFx04bm/OiAndicsXG5cdFx0XHRcdFx0XHTKizogJ3YnLFxuXHRcdFx0XHRcdFx06p2fOiAndicsXG5cdFx0XHRcdFx0XHTKjDogJ3YnLFxuXHRcdFx0XHRcdFx06p2hOiAndnknLFxuXHRcdFx0XHRcdFx0J+KTpic6ICd3Jyxcblx0XHRcdFx0XHRcdO+9lzogJ3cnLFxuXHRcdFx0XHRcdFx04bqBOiAndycsXG5cdFx0XHRcdFx0XHThuoM6ICd3Jyxcblx0XHRcdFx0XHRcdMW1OiAndycsXG5cdFx0XHRcdFx0XHThuoc6ICd3Jyxcblx0XHRcdFx0XHRcdOG6hTogJ3cnLFxuXHRcdFx0XHRcdFx04bqYOiAndycsXG5cdFx0XHRcdFx0XHThuok6ICd3Jyxcblx0XHRcdFx0XHRcdOKxszogJ3cnLFxuXHRcdFx0XHRcdFx0J+KTpyc6ICd4Jyxcblx0XHRcdFx0XHRcdO+9mDogJ3gnLFxuXHRcdFx0XHRcdFx04bqLOiAneCcsXG5cdFx0XHRcdFx0XHThuo06ICd4Jyxcblx0XHRcdFx0XHRcdCfik6gnOiAneScsXG5cdFx0XHRcdFx0XHTvvZk6ICd5Jyxcblx0XHRcdFx0XHRcdOG7szogJ3knLFxuXHRcdFx0XHRcdFx0w706ICd5Jyxcblx0XHRcdFx0XHRcdMW3OiAneScsXG5cdFx0XHRcdFx0XHThu7k6ICd5Jyxcblx0XHRcdFx0XHRcdMizOiAneScsXG5cdFx0XHRcdFx0XHThuo86ICd5Jyxcblx0XHRcdFx0XHRcdMO/OiAneScsXG5cdFx0XHRcdFx0XHThu7c6ICd5Jyxcblx0XHRcdFx0XHRcdOG6mTogJ3knLFxuXHRcdFx0XHRcdFx04bu1OiAneScsXG5cdFx0XHRcdFx0XHTGtDogJ3knLFxuXHRcdFx0XHRcdFx0yY86ICd5Jyxcblx0XHRcdFx0XHRcdOG7vzogJ3knLFxuXHRcdFx0XHRcdFx0J+KTqSc6ICd6Jyxcblx0XHRcdFx0XHRcdO+9mjogJ3onLFxuXHRcdFx0XHRcdFx0xbo6ICd6Jyxcblx0XHRcdFx0XHRcdOG6kTogJ3onLFxuXHRcdFx0XHRcdFx0xbw6ICd6Jyxcblx0XHRcdFx0XHRcdMW+OiAneicsXG5cdFx0XHRcdFx0XHThupM6ICd6Jyxcblx0XHRcdFx0XHRcdOG6lTogJ3onLFxuXHRcdFx0XHRcdFx0xrY6ICd6Jyxcblx0XHRcdFx0XHRcdMilOiAneicsXG5cdFx0XHRcdFx0XHTJgDogJ3onLFxuXHRcdFx0XHRcdFx04rGsOiAneicsXG5cdFx0XHRcdFx0XHTqnaM6ICd6Jyxcblx0XHRcdFx0XHRcdM6GOiAnzpEnLFxuXHRcdFx0XHRcdFx0zog6ICfOlScsXG5cdFx0XHRcdFx0XHTOiTogJ86XJyxcblx0XHRcdFx0XHRcdM6KOiAnzpknLFxuXHRcdFx0XHRcdFx0zqo6ICfOmScsXG5cdFx0XHRcdFx0XHTOjDogJ86fJyxcblx0XHRcdFx0XHRcdM6OOiAnzqUnLFxuXHRcdFx0XHRcdFx0zqs6ICfOpScsXG5cdFx0XHRcdFx0XHTOjzogJ86pJyxcblx0XHRcdFx0XHRcdM6sOiAnzrEnLFxuXHRcdFx0XHRcdFx0zq06ICfOtScsXG5cdFx0XHRcdFx0XHTOrjogJ863Jyxcblx0XHRcdFx0XHRcdM6vOiAnzrknLFxuXHRcdFx0XHRcdFx0z4o6ICfOuScsXG5cdFx0XHRcdFx0XHTOkDogJ865Jyxcblx0XHRcdFx0XHRcdM+MOiAnzr8nLFxuXHRcdFx0XHRcdFx0z406ICfPhScsXG5cdFx0XHRcdFx0XHTPizogJ8+FJyxcblx0XHRcdFx0XHRcdM6wOiAnz4UnLFxuXHRcdFx0XHRcdFx0z446ICfPiScsXG5cdFx0XHRcdFx0XHTPgjogJ8+DJyxcblx0XHRcdFx0XHRcdCfigJknOiBcIidcIixcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9iYXNlJywgWycuLi91dGlscyddLCBmdW5jdGlvbiAocikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIG4oZSwgdCkge1xuXHRcdFx0XHRcdFx0bi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdHIuRXh0ZW5kKG4sIHIuT2JzZXJ2YWJsZSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBjdXJyZW50YCBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXMuJyk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBxdWVyeWAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLicpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlLCB0KSB7fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5nZW5lcmF0ZVJlc3VsdElkID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSBlLmlkICsgJy1yZXN1bHQtJztcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQobiArPSByLmdlbmVyYXRlQ2hhcnMoNCkpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gdC5pZCA/IChuICs9ICctJyArIHQuaWQudG9TdHJpbmcoKSkgOiAobiArPSAnLScgKyByLmdlbmVyYXRlQ2hhcnMoNCkpLFxuXHRcdFx0XHRcdFx0XHRcdG5cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0blxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kYXRhL3NlbGVjdCcsIFsnLi9iYXNlJywgJy4uL3V0aWxzJywgJ2pxdWVyeSddLCBmdW5jdGlvbiAoZSwgYSwgbCkge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIG4oZSwgdCkge1xuXHRcdFx0XHRcdFx0KHRoaXMuJGVsZW1lbnQgPSBlKSwgKHRoaXMub3B0aW9ucyA9IHQpLCBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0YS5FeHRlbmQobiwgZSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gW10sXG5cdFx0XHRcdFx0XHRcdFx0ciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQuZmluZCgnOnNlbGVjdGVkJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBsKHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dCA9IHIuaXRlbShlKTtcblx0XHRcdFx0XHRcdFx0XHRuLnB1c2godCk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUobik7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdGlmICgoKGkuc2VsZWN0ZWQgPSAhMCksIGwoaS5lbGVtZW50KS5pcygnb3B0aW9uJykpKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoaS5lbGVtZW50LnNlbGVjdGVkID0gITApLCB2b2lkIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRlbGVtZW50LnByb3AoJ211bHRpcGxlJykpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jdXJyZW50KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0KGkgPSBbaV0pLnB1c2guYXBwbHkoaSwgZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBuID0gMDsgbiA8IGkubGVuZ3RoOyBuKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSBpW25dLmlkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQtMSA9PT0gbC5pbkFycmF5KHIsIHQpICYmIHQucHVzaChyKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdG8uJGVsZW1lbnQudmFsKHQpLCBvLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZSA9IGkuaWQ7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC52YWwoZSksIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLnVuc2VsZWN0ID0gZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG8gPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy4kZWxlbWVudC5wcm9wKCdtdWx0aXBsZScpKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCgoaS5zZWxlY3RlZCA9ICExKSwgbChpLmVsZW1lbnQpLmlzKCdvcHRpb24nKSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKGkuZWxlbWVudC5zZWxlY3RlZCA9ICExKSwgdm9pZCB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY3VycmVudChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdCA9IFtdLCBuID0gMDsgbiA8IGUubGVuZ3RoOyBuKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSBlW25dLmlkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyICE9PSBpLmlkICYmIC0xID09PSBsLmluQXJyYXkociwgdCkgJiYgdC5wdXNoKHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0by4kZWxlbWVudC52YWwodCksIG8uJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdCh0aGlzLmNvbnRhaW5lciA9IGUpLm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdG4uc2VsZWN0KGUuZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG4udW5zZWxlY3QoZS5kYXRhKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQuZmluZCgnKicpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGEuUmVtb3ZlRGF0YSh0aGlzKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChyLCBlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBpID0gW10sXG5cdFx0XHRcdFx0XHRcdFx0byA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZSA9IGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGUuaXMoJ29wdGlvbicpIHx8IGUuaXMoJ29wdGdyb3VwJykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gby5pdGVtKGUpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuID0gby5tYXRjaGVzKHIsIHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPT0gbiAmJiBpLnB1c2gobik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRlKHtyZXN1bHRzOiBpfSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5hZGRPcHRpb25zID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0YS5hcHBlbmRNYW55KHRoaXMuJGVsZW1lbnQsIGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUub3B0aW9uID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQ7XG5cdFx0XHRcdFx0XHRcdGUuY2hpbGRyZW5cblx0XHRcdFx0XHRcdFx0XHQ/ICgodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJykpLmxhYmVsID0gZS50ZXh0KVxuXHRcdFx0XHRcdFx0XHRcdDogdm9pZCAwICE9PSAodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpKS50ZXh0Q29udGVudFxuXHRcdFx0XHRcdFx0XHRcdFx0PyAodC50ZXh0Q29udGVudCA9IGUudGV4dClcblx0XHRcdFx0XHRcdFx0XHRcdDogKHQuaW5uZXJUZXh0ID0gZS50ZXh0KSxcblx0XHRcdFx0XHRcdFx0XHR2b2lkIDAgIT09IGUuaWQgJiYgKHQudmFsdWUgPSBlLmlkKSxcblx0XHRcdFx0XHRcdFx0XHRlLmRpc2FibGVkICYmICh0LmRpc2FibGVkID0gITApLFxuXHRcdFx0XHRcdFx0XHRcdGUuc2VsZWN0ZWQgJiYgKHQuc2VsZWN0ZWQgPSAhMCksXG5cdFx0XHRcdFx0XHRcdFx0ZS50aXRsZSAmJiAodC50aXRsZSA9IGUudGl0bGUpO1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IGwodCksXG5cdFx0XHRcdFx0XHRcdFx0ciA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0oZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoci5lbGVtZW50ID0gdCksIGEuU3RvcmVEYXRhKHQsICdkYXRhJywgciksIG47XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSB7fTtcblx0XHRcdFx0XHRcdFx0aWYgKG51bGwgIT0gKHQgPSBhLkdldERhdGEoZVswXSwgJ2RhdGEnKSkpIHJldHVybiB0O1xuXHRcdFx0XHRcdFx0XHRpZiAoZS5pcygnb3B0aW9uJykpXG5cdFx0XHRcdFx0XHRcdFx0dCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBlLnZhbCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogZS50ZXh0KCksXG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogZS5wcm9wKCdkaXNhYmxlZCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IGUucHJvcCgnc2VsZWN0ZWQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBlLnByb3AoJ3RpdGxlJyksXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoZS5pcygnb3B0Z3JvdXAnKSkge1xuXHRcdFx0XHRcdFx0XHRcdHQgPSB7dGV4dDogZS5wcm9wKCdsYWJlbCcpLCBjaGlsZHJlbjogW10sIHRpdGxlOiBlLnByb3AoJ3RpdGxlJyl9O1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIG4gPSBlLmNoaWxkcmVuKCdvcHRpb24nKSwgciA9IFtdLCBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0gbChuW2ldKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cyA9IHRoaXMuaXRlbShvKTtcblx0XHRcdFx0XHRcdFx0XHRcdHIucHVzaChzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dC5jaGlsZHJlbiA9IHI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuICgodCA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0odCkpLmVsZW1lbnQgPSBlWzBdKSwgYS5TdG9yZURhdGEoZVswXSwgJ2RhdGEnLCB0KSwgdDtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLl9ub3JtYWxpemVJdGVtID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0ZSAhPT0gT2JqZWN0KGUpICYmIChlID0ge2lkOiBlLCB0ZXh0OiBlfSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSAoZSA9IGwuZXh0ZW5kKHt9LCB7dGV4dDogJyd9LCBlKSkuaWQgJiYgKGUuaWQgPSBlLmlkLnRvU3RyaW5nKCkpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gZS50ZXh0ICYmIChlLnRleHQgPSBlLnRleHQudG9TdHJpbmcoKSksXG5cdFx0XHRcdFx0XHRcdFx0bnVsbCA9PSBlLl9yZXN1bHRJZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5pZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSB0aGlzLmNvbnRhaW5lciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KGUuX3Jlc3VsdElkID0gdGhpcy5nZW5lcmF0ZVJlc3VsdElkKHRoaXMuY29udGFpbmVyLCBlKSksXG5cdFx0XHRcdFx0XHRcdFx0bC5leHRlbmQoe30sIHtzZWxlY3RlZDogITEsIGRpc2FibGVkOiAhMX0sIGUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoJ21hdGNoZXInKShlLCB0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0blxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kYXRhL2FycmF5JywgWycuL3NlbGVjdCcsICcuLi91dGlscycsICdqcXVlcnknXSwgZnVuY3Rpb24gKGUsIGYsIGcpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiByKGUsIHQpIHtcblx0XHRcdFx0XHRcdCh0aGlzLl9kYXRhVG9Db252ZXJ0ID0gdC5nZXQoJ2RhdGEnKSB8fCBbXSksIHIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgZSwgdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRmLkV4dGVuZChyLCBlKSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0ci5fX3N1cGVyX18uYmluZC5jYWxsKHRoaXMsIGUsIHQpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWRkT3B0aW9ucyh0aGlzLmNvbnZlcnRUb09wdGlvbnModGhpcy5fZGF0YVRvQ29udmVydCkpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gKG4pIHtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ29wdGlvbicpLmZpbHRlcihmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0LnZhbHVlID09IG4uaWQudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdDAgPT09IGUubGVuZ3RoICYmICgoZSA9IHRoaXMub3B0aW9uKG4pKSwgdGhpcy5hZGRPcHRpb25zKGUpKSxcblx0XHRcdFx0XHRcdFx0XHRyLl9fc3VwZXJfXy5zZWxlY3QuY2FsbCh0aGlzLCBuKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmNvbnZlcnRUb09wdGlvbnMgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0biA9IHRoaXMuJGVsZW1lbnQuZmluZCgnb3B0aW9uJyksXG5cdFx0XHRcdFx0XHRcdFx0ciA9IG5cblx0XHRcdFx0XHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdC5pdGVtKGcodGhpcykpLmlkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdC5nZXQoKSxcblx0XHRcdFx0XHRcdFx0XHRpID0gW107XG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIG8oZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZyh0aGlzKS52YWwoKSA9PSBlLmlkO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCBlLmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGEgPSB0aGlzLl9ub3JtYWxpemVJdGVtKGVbc10pO1xuXHRcdFx0XHRcdFx0XHRcdGlmICgwIDw9IGcuaW5BcnJheShhLmlkLCByKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGwgPSBuLmZpbHRlcihvKGEpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YyA9IHRoaXMuaXRlbShsKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dSA9IGcuZXh0ZW5kKCEwLCB7fSwgYSwgYyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGQgPSB0aGlzLm9wdGlvbih1KTtcblx0XHRcdFx0XHRcdFx0XHRcdGwucmVwbGFjZVdpdGgoZCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwID0gdGhpcy5vcHRpb24oYSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYS5jaGlsZHJlbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaCA9IHRoaXMuY29udmVydFRvT3B0aW9ucyhhLmNoaWxkcmVuKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zi5hcHBlbmRNYW55KHAsIGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aS5wdXNoKHApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0clxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kYXRhL2FqYXgnLCBbJy4vYXJyYXknLCAnLi4vdXRpbHMnLCAnanF1ZXJ5J10sIGZ1bmN0aW9uIChlLCB0LCBvKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbihlLCB0KSB7XG5cdFx0XHRcdFx0XHQodGhpcy5hamF4T3B0aW9ucyA9IHRoaXMuX2FwcGx5RGVmYXVsdHModC5nZXQoJ2FqYXgnKSkpLFxuXHRcdFx0XHRcdFx0XHRudWxsICE9IHRoaXMuYWpheE9wdGlvbnMucHJvY2Vzc1Jlc3VsdHMgJiZcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5wcm9jZXNzUmVzdWx0cyA9IHRoaXMuYWpheE9wdGlvbnMucHJvY2Vzc1Jlc3VsdHMpLFxuXHRcdFx0XHRcdFx0XHRuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIGUsIHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0dC5FeHRlbmQobiwgZSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHMgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRkYXRhOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG8uZXh0ZW5kKHt9LCBlLCB7cTogZS50ZXJtfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc3BvcnQ6IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgciA9IG8uYWpheChlKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByLnRoZW4odCksIHIuZmFpbChuKSwgcjtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gby5leHRlbmQoe30sIHQsIGUsICEwKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLnByb2Nlc3NSZXN1bHRzID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGU7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChuLCByKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBpID0gdGhpcztcblx0XHRcdFx0XHRcdFx0bnVsbCAhPSB0aGlzLl9yZXF1ZXN0ICYmXG5cdFx0XHRcdFx0XHRcdFx0KG8uaXNGdW5jdGlvbih0aGlzLl9yZXF1ZXN0LmFib3J0KSAmJiB0aGlzLl9yZXF1ZXN0LmFib3J0KCksICh0aGlzLl9yZXF1ZXN0ID0gbnVsbCkpO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IG8uZXh0ZW5kKHt0eXBlOiAnR0VUJ30sIHRoaXMuYWpheE9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiBlKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlID0gdC50cmFuc3BvcnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR0LFxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBpLnByb2Nlc3NSZXN1bHRzKGUsIG4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCh0ICYmIHQucmVzdWx0cyAmJiBvLmlzQXJyYXkodC5yZXN1bHRzKSkgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdTZWxlY3QyOiBUaGUgQUpBWCByZXN1bHRzIGRpZCBub3QgcmV0dXJuIGFuIGFycmF5IGluIHRoZSBgcmVzdWx0c2Aga2V5IG9mIHRoZSByZXNwb25zZS4nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyKHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCdzdGF0dXMnIGluIGUgJiYgKDAgPT09IGUuc3RhdHVzIHx8ICcwJyA9PT0gZS5zdGF0dXMpKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGkudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywge21lc3NhZ2U6ICdlcnJvckxvYWRpbmcnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRpLl9yZXF1ZXN0ID0gZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQnZnVuY3Rpb24nID09IHR5cGVvZiB0LnVybCAmJiAodC51cmwgPSB0LnVybC5jYWxsKHRoaXMuJGVsZW1lbnQsIG4pKSxcblx0XHRcdFx0XHRcdFx0XHQnZnVuY3Rpb24nID09IHR5cGVvZiB0LmRhdGEgJiYgKHQuZGF0YSA9IHQuZGF0YS5jYWxsKHRoaXMuJGVsZW1lbnQsIG4pKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFqYXhPcHRpb25zLmRlbGF5ICYmIG51bGwgIT0gbi50ZXJtXG5cdFx0XHRcdFx0XHRcdFx0XHQ/ICh0aGlzLl9xdWVyeVRpbWVvdXQgJiYgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9xdWVyeVRpbWVvdXQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQodGhpcy5fcXVlcnlUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZSwgdGhpcy5hamF4T3B0aW9ucy5kZWxheSkpKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBlKCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdG5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGF0YS90YWdzJywgWydqcXVlcnknXSwgZnVuY3Rpb24gKHUpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdHZhciByID0gbi5nZXQoJ3RhZ3MnKSxcblx0XHRcdFx0XHRcdFx0aSA9IG4uZ2V0KCdjcmVhdGVUYWcnKTtcblx0XHRcdFx0XHRcdHZvaWQgMCAhPT0gaSAmJiAodGhpcy5jcmVhdGVUYWcgPSBpKTtcblx0XHRcdFx0XHRcdHZhciBvID0gbi5nZXQoJ2luc2VydFRhZycpO1xuXHRcdFx0XHRcdFx0aWYgKCh2b2lkIDAgIT09IG8gJiYgKHRoaXMuaW5zZXJ0VGFnID0gbyksIGUuY2FsbCh0aGlzLCB0LCBuKSwgdS5pc0FycmF5KHIpKSlcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCByLmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGEgPSByW3NdLFxuXHRcdFx0XHRcdFx0XHRcdFx0bCA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0oYSksXG5cdFx0XHRcdFx0XHRcdFx0XHRjID0gdGhpcy5vcHRpb24obCk7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC5hcHBlbmQoYyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChlLCBjLCB1KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBkID0gdGhpcztcblx0XHRcdFx0XHRcdFx0dGhpcy5fcmVtb3ZlT2xkVGFncygpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gYy50ZXJtICYmIG51bGwgPT0gYy5wYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGUuY2FsbCh0aGlzLCBjLCBmdW5jdGlvbiBlKHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciByID0gdC5yZXN1bHRzLCBpID0gMDsgaSA8IHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0gcltpXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cyA9IG51bGwgIT0gby5jaGlsZHJlbiAmJiAhZSh7cmVzdWx0czogby5jaGlsZHJlbn0sICEwKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgoby50ZXh0IHx8ICcnKS50b1VwcGVyQ2FzZSgpID09PSAoYy50ZXJtIHx8ICcnKS50b1VwcGVyQ2FzZSgpIHx8IHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAhbiAmJiAoKHQuZGF0YSA9IHIpLCB2b2lkIHUodCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobikgcmV0dXJuICEwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhID0gZC5jcmVhdGVUYWcoYyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG51bGwgIT0gYSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGwgPSBkLm9wdGlvbihhKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGwuYXR0cignZGF0YS1zZWxlY3QyLXRhZycsICEwKSwgZC5hZGRPcHRpb25zKFtsXSksIGQuaW5zZXJ0VGFnKHIsIGEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQodC5yZXN1bHRzID0gciksIHUodCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGUuY2FsbCh0aGlzLCBjLCB1KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmNyZWF0ZVRhZyA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gdS50cmltKHQudGVybSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJyA9PT0gbiA/IG51bGwgOiB7aWQ6IG4sIHRleHQ6IG59O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuaW5zZXJ0VGFnID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dC51bnNoaWZ0KG4pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX3JlbW92ZU9sZFRhZ3MgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LmZpbmQoJ29wdGlvbltkYXRhLXNlbGVjdDItdGFnXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWQgfHwgdSh0aGlzKS5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGF0YS90b2tlbml6ZXInLCBbJ2pxdWVyeSddLCBmdW5jdGlvbiAoZCkge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIGUoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0dmFyIHIgPSBuLmdldCgndG9rZW5pemVyJyk7XG5cdFx0XHRcdFx0XHR2b2lkIDAgIT09IHIgJiYgKHRoaXMudG9rZW5pemVyID0gciksIGUuY2FsbCh0aGlzLCB0LCBuKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMsIHQsIG4pLFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLiRzZWFyY2ggPVxuXHRcdFx0XHRcdFx0XHRcdFx0dC5kcm9wZG93bi4kc2VhcmNoIHx8IHQuc2VsZWN0aW9uLiRzZWFyY2ggfHwgbi5maW5kKCcuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkJykpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHQudGVybSA9IHQudGVybSB8fCAnJztcblx0XHRcdFx0XHRcdFx0dmFyIGkgPSB0aGlzLnRva2VuaXplcih0LCB0aGlzLm9wdGlvbnMsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSByLl9ub3JtYWxpemVJdGVtKGUpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdCFyLiRlbGVtZW50LmZpbmQoJ29wdGlvbicpLmZpbHRlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBkKHRoaXMpLnZhbCgpID09PSB0LmlkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IHIub3B0aW9uKHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0bi5hdHRyKCdkYXRhLXNlbGVjdDItdGFnJywgITApLCByLl9yZW1vdmVPbGRUYWdzKCksIHIuYWRkT3B0aW9ucyhbbl0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQhKGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLnRyaWdnZXIoJ3NlbGVjdCcsIHtkYXRhOiBlfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSkodCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpLnRlcm0gIT09IHQudGVybSAmJlxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLiRzZWFyY2gubGVuZ3RoICYmICh0aGlzLiRzZWFyY2gudmFsKGkudGVybSksIHRoaXMuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpKSxcblx0XHRcdFx0XHRcdFx0XHQodC50ZXJtID0gaS50ZXJtKSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUudG9rZW5pemVyID0gZnVuY3Rpb24gKGUsIHQsIG4sIHIpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChcblx0XHRcdFx0XHRcdFx0XHR2YXIgaSA9IG4uZ2V0KCd0b2tlblNlcGFyYXRvcnMnKSB8fCBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdG8gPSB0LnRlcm0sXG5cdFx0XHRcdFx0XHRcdFx0XHRzID0gMCxcblx0XHRcdFx0XHRcdFx0XHRcdGEgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZVRhZyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7aWQ6IGUudGVybSwgdGV4dDogZS50ZXJtfTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRzIDwgby5sZW5ndGg7XG5cblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGwgPSBvW3NdO1xuXHRcdFx0XHRcdFx0XHRcdGlmICgtMSAhPT0gZC5pbkFycmF5KGwsIGkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYyA9IG8uc3Vic3RyKDAsIHMpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1ID0gYShkLmV4dGVuZCh7fSwgdCwge3Rlcm06IGN9KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsICE9IHUgPyAocih1KSwgKG8gPSBvLnN1YnN0cihzICsgMSkgfHwgJycpLCAocyA9IDApKSA6IHMrKztcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgcysrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7dGVybTogb307XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIGUoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0KHRoaXMubWluaW11bUlucHV0TGVuZ3RoID0gbi5nZXQoJ21pbmltdW1JbnB1dExlbmd0aCcpKSwgZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0KHQudGVybSA9IHQudGVybSB8fCAnJyksXG5cdFx0XHRcdFx0XHRcdFx0dC50ZXJtLmxlbmd0aCA8IHRoaXMubWluaW11bUlucHV0TGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdpbnB1dFRvb1Nob3J0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzOiB7bWluaW11bTogdGhpcy5taW5pbXVtSW5wdXRMZW5ndGgsIGlucHV0OiB0LnRlcm0sIHBhcmFtczogdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGUuY2FsbCh0aGlzLCB0LCBuKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kYXRhL21heGltdW1JbnB1dExlbmd0aCcsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5tYXhpbXVtSW5wdXRMZW5ndGggPSBuLmdldCgnbWF4aW11bUlucHV0TGVuZ3RoJykpLCBlLmNhbGwodGhpcywgdCwgbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHQodC50ZXJtID0gdC50ZXJtIHx8ICcnKSxcblx0XHRcdFx0XHRcdFx0XHQwIDwgdGhpcy5tYXhpbXVtSW5wdXRMZW5ndGggJiYgdC50ZXJtLmxlbmd0aCA+IHRoaXMubWF4aW11bUlucHV0TGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdpbnB1dFRvb0xvbmcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3M6IHttYXhpbXVtOiB0aGlzLm1heGltdW1JbnB1dExlbmd0aCwgaW5wdXQ6IHQudGVybSwgcGFyYW1zOiB0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdDogZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL2RhdGEvbWF4aW11bVNlbGVjdGlvbkxlbmd0aCcsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoID0gbi5nZXQoJ21heGltdW1TZWxlY3Rpb25MZW5ndGgnKSksIGUuY2FsbCh0aGlzLCB0LCBuKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5fY2hlY2tJZk1heGltdW1TZWxlY3RlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2NoZWNrSWZNYXhpbXVtU2VsZWN0ZWQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGUuY2FsbChyLCB0LCBuKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5fY2hlY2tJZk1heGltdW1TZWxlY3RlZCA9IGZ1bmN0aW9uIChlLCBuKSB7XG5cdFx0XHRcdFx0XHRcdHZhciByID0gdGhpcztcblx0XHRcdFx0XHRcdFx0dGhpcy5jdXJyZW50KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBudWxsICE9IGUgPyBlLmxlbmd0aCA6IDA7XG5cdFx0XHRcdFx0XHRcdFx0MCA8IHIubWF4aW11bVNlbGVjdGlvbkxlbmd0aCAmJiB0ID49IHIubWF4aW11bVNlbGVjdGlvbkxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0PyByLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnbWF4aW11bVNlbGVjdGVkJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzOiB7bWF4aW11bTogci5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RofSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdDogbiAmJiBuKCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duJywgWydqcXVlcnknLCAnLi91dGlscyddLCBmdW5jdGlvbiAodCwgZSkge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIG4oZSwgdCkge1xuXHRcdFx0XHRcdFx0KHRoaXMuJGVsZW1lbnQgPSBlKSwgKHRoaXMub3B0aW9ucyA9IHQpLCBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0ZS5FeHRlbmQobiwgZS5PYnNlcnZhYmxlKSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gdCgnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLWRyb3Bkb3duXCI+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXJlc3VsdHNcIj48L3NwYW4+PC9zcGFuPicpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZS5hdHRyKCdkaXInLCB0aGlzLm9wdGlvbnMuZ2V0KCdkaXInKSksICh0aGlzLiRkcm9wZG93biA9IGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpIHt9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5wb3NpdGlvbiA9IGZ1bmN0aW9uIChlLCB0KSB7fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kZHJvcGRvd24ucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdG5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vc2VhcmNoJywgWydqcXVlcnknLCAnLi4vdXRpbHMnXSwgZnVuY3Rpb24gKG8sIGUpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiB0KCkge31cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KHQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gZS5jYWxsKHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdG4gPSBvKFxuXHRcdFx0XHRcdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWFyY2ggc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duXCI+PGlucHV0IGNsYXNzPVwic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkXCIgdHlwZT1cInNlYXJjaFwiIHRhYmluZGV4PVwiLTFcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIHJvbGU9XCJzZWFyY2hib3hcIiBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIiAvPjwvc3Bhbj4nXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICh0aGlzLiRzZWFyY2hDb250YWluZXIgPSBuKSwgKHRoaXMuJHNlYXJjaCA9IG4uZmluZCgnaW5wdXQnKSksIHQucHJlcGVuZChuKSwgdDtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHQucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0aSA9IHQuaWQgKyAnLXJlc3VsdHMnO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoLm9uKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIudHJpZ2dlcigna2V5cHJlc3MnLCBlKSwgKHIuX2tleVVwUHJldmVudGVkID0gZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoLm9uKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvKHRoaXMpLm9mZigna2V5dXAnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2gub24oJ2tleXVwIGlucHV0JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuaGFuZGxlU2VhcmNoKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2guYXR0cigndGFiaW5kZXgnLCAwKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2guYXR0cigndGFiaW5kZXgnLCAtMSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWNvbnRyb2xzJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnZhbCgnJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuJHNlYXJjaC50cmlnZ2VyKCdibHVyJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LmlzT3BlbigpIHx8IHIuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3Jlc3VsdHM6YWxsJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdChudWxsICE9IGUucXVlcnkudGVybSAmJiAnJyAhPT0gZS5xdWVyeS50ZXJtKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoci5zaG93U2VhcmNoKGUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyByLiRzZWFyY2hDb250YWluZXIucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItc2VhcmNoLS1oaWRlJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHIuJHNlYXJjaENvbnRhaW5lci5hZGRDbGFzcygnc2VsZWN0Mi1zZWFyY2gtLWhpZGUnKSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlLmRhdGEuX3Jlc3VsdElkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gci4kc2VhcmNoLmF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIGUuZGF0YS5fcmVzdWx0SWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogci4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQodC5wcm90b3R5cGUuaGFuZGxlU2VhcmNoID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLl9rZXlVcFByZXZlbnRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gdGhpcy4kc2VhcmNoLnZhbCgpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcigncXVlcnknLCB7dGVybTogdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2tleVVwUHJldmVudGVkID0gITE7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdCh0LnByb3RvdHlwZS5zaG93U2VhcmNoID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICEwO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2hpZGVQbGFjZWhvbGRlcicsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuLCByKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIobi5nZXQoJ3BsYWNlaG9sZGVyJykpKSwgZS5jYWxsKHRoaXMsIHQsIG4sIHIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdCh0LnJlc3VsdHMgPSB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyKHQucmVzdWx0cykpLCBlLmNhbGwodGhpcywgdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5ub3JtYWxpemVQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAnc3RyaW5nJyA9PSB0eXBlb2YgdCAmJiAodCA9IHtpZDogJycsIHRleHQ6IHR9KSwgdDtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnJlbW92ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IHQuc2xpY2UoMCksIHIgPSB0Lmxlbmd0aCAtIDE7IDAgPD0gcjsgci0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSB0W3JdO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGxhY2Vob2xkZXIuaWQgPT09IGkuaWQgJiYgbi5zcGxpY2UociwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIG47XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vaW5maW5pdGVTY3JvbGwnLCBbJ2pxdWVyeSddLCBmdW5jdGlvbiAobikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIGUoZSwgdCwgbiwgcikge1xuXHRcdFx0XHRcdFx0KHRoaXMubGFzdFBhcmFtcyA9IHt9KSxcblx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMsIHQsIG4sIHIpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy4kbG9hZGluZ01vcmUgPSB0aGlzLmNyZWF0ZUxvYWRpbmdNb3JlKCkpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy5sb2FkaW5nID0gITEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGxvYWRpbmdNb3JlLnJlbW92ZSgpLFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLmxvYWRpbmcgPSAhMSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMsIHQpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2hvd0xvYWRpbmdNb3JlKHQpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQodGhpcy4kcmVzdWx0cy5hcHBlbmQodGhpcy4kbG9hZGluZ01vcmUpLCB0aGlzLmxvYWRNb3JlSWZOZWVkZWQoKSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncXVlcnknLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0KHIubGFzdFBhcmFtcyA9IGUpLCAoci5sb2FkaW5nID0gITApO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3F1ZXJ5OmFwcGVuZCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQoci5sYXN0UGFyYW1zID0gZSksIChyLmxvYWRpbmcgPSAhMCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kcmVzdWx0cy5vbignc2Nyb2xsJywgdGhpcy5sb2FkTW9yZUlmTmVlZGVkLmJpbmQodGhpcykpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUubG9hZE1vcmVJZk5lZWRlZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPSBuLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy4kbG9hZGluZ01vcmVbMF0pO1xuXHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMubG9hZGluZyAmJiBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSB0aGlzLiRyZXN1bHRzLm9mZnNldCgpLnRvcCArIHRoaXMuJHJlc3VsdHMub3V0ZXJIZWlnaHQoITEpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGxvYWRpbmdNb3JlLm9mZnNldCgpLnRvcCArIHRoaXMuJGxvYWRpbmdNb3JlLm91dGVySGVpZ2h0KCExKSA8PSB0ICsgNTAgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMubG9hZE1vcmUoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUubG9hZE1vcmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMubG9hZGluZyA9ICEwO1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IG4uZXh0ZW5kKHt9LCB7cGFnZTogMX0sIHRoaXMubGFzdFBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdGUucGFnZSsrLCB0aGlzLnRyaWdnZXIoJ3F1ZXJ5OmFwcGVuZCcsIGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuc2hvd0xvYWRpbmdNb3JlID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHQucGFnaW5hdGlvbiAmJiB0LnBhZ2luYXRpb24ubW9yZTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmNyZWF0ZUxvYWRpbmdNb3JlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IG4oXG5cdFx0XHRcdFx0XHRcdFx0XHQnPGxpIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWxvYWQtbW9yZVwicm9sZT1cIm9wdGlvblwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+PC9saT4nXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHR0ID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdsb2FkaW5nTW9yZScpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZS5odG1sKHQodGhpcy5sYXN0UGFyYW1zKSksIGU7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vYXR0YWNoQm9keScsIFsnanF1ZXJ5JywgJy4uL3V0aWxzJ10sIGZ1bmN0aW9uIChmLCBhKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHQodGhpcy4kZHJvcGRvd25QYXJlbnQgPSBmKG4uZ2V0KCdkcm9wZG93blBhcmVudCcpIHx8IGRvY3VtZW50LmJvZHkpKSwgZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5fc2hvd0Ryb3Bkb3duKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlcih0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci5fYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzKHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5faGlkZURyb3Bkb3duKCksIHIuX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlcih0KTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5vbignbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMpLCB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dC5hdHRyKCdjbGFzcycsIG4uYXR0cignY2xhc3MnKSksXG5cdFx0XHRcdFx0XHRcdFx0dC5yZW1vdmVDbGFzcygnc2VsZWN0MicpLFxuXHRcdFx0XHRcdFx0XHRcdHQuYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyksXG5cdFx0XHRcdFx0XHRcdFx0dC5jc3Moe3Bvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IC05OTk5OTl9KSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy4kY29udGFpbmVyID0gbik7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IGYoJzxzcGFuPjwvc3Bhbj4nKSxcblx0XHRcdFx0XHRcdFx0XHRuID0gZS5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdC5hcHBlbmQobiksICh0aGlzLiRkcm9wZG93bkNvbnRhaW5lciA9IHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX2hpZGVEcm9wZG93biA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmRldGFjaCgpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX2JpbmRDb250YWluZXJSZXN1bHRIYW5kbGVycyA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdGlmICghdGhpcy5fY29udGFpbmVyUmVzdWx0c0hhbmRsZXJzQm91bmQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncmVzdWx0czphbGwnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLl9wb3NpdGlvbkRyb3Bkb3duKCksIG4uX3Jlc2l6ZURyb3Bkb3duKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOmFwcGVuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bi5fcG9zaXRpb25Ecm9wZG93bigpLCBuLl9yZXNpemVEcm9wZG93bigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOm1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4uX3Bvc2l0aW9uRHJvcGRvd24oKSwgbi5fcmVzaXplRHJvcGRvd24oKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0dC5vbignc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLl9wb3NpdGlvbkRyb3Bkb3duKCksIG4uX3Jlc2l6ZURyb3Bkb3duKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRcdHQub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLl9wb3NpdGlvbkRyb3Bkb3duKCksIG4uX3Jlc2l6ZURyb3Bkb3duKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLl9jb250YWluZXJSZXN1bHRzSGFuZGxlcnNCb3VuZCA9ICEwKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlciA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRyID0gJ3Njcm9sbC5zZWxlY3QyLicgKyB0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdGkgPSAncmVzaXplLnNlbGVjdDIuJyArIHQuaWQsXG5cdFx0XHRcdFx0XHRcdFx0byA9ICdvcmllbnRhdGlvbmNoYW5nZS5zZWxlY3QyLicgKyB0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdHMgPSB0aGlzLiRjb250YWluZXIucGFyZW50cygpLmZpbHRlcihhLmhhc1Njcm9sbCk7XG5cdFx0XHRcdFx0XHRcdHMuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YS5TdG9yZURhdGEodGhpcywgJ3NlbGVjdDItc2Nyb2xsLXBvc2l0aW9uJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0eDogZih0aGlzKS5zY3JvbGxMZWZ0KCksXG5cdFx0XHRcdFx0XHRcdFx0XHR5OiBmKHRoaXMpLnNjcm9sbFRvcCgpLFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRzLm9uKHIsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IGEuR2V0RGF0YSh0aGlzLCAnc2VsZWN0Mi1zY3JvbGwtcG9zaXRpb24nKTtcblx0XHRcdFx0XHRcdFx0XHRcdGYodGhpcykuc2Nyb2xsVG9wKHQueSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0Zih3aW5kb3cpLm9uKHIgKyAnICcgKyBpICsgJyAnICsgbywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG4uX3Bvc2l0aW9uRHJvcGRvd24oKSwgbi5fcmVzaXplRHJvcGRvd24oKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9kZXRhY2hQb3NpdGlvbmluZ0hhbmRsZXIgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9ICdzY3JvbGwuc2VsZWN0Mi4nICsgdC5pZCxcblx0XHRcdFx0XHRcdFx0XHRyID0gJ3Jlc2l6ZS5zZWxlY3QyLicgKyB0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdGkgPSAnb3JpZW50YXRpb25jaGFuZ2Uuc2VsZWN0Mi4nICsgdC5pZDtcblx0XHRcdFx0XHRcdFx0dGhpcy4kY29udGFpbmVyLnBhcmVudHMoKS5maWx0ZXIoYS5oYXNTY3JvbGwpLm9mZihuKSwgZih3aW5kb3cpLm9mZihuICsgJyAnICsgciArICcgJyArIGkpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX3Bvc2l0aW9uRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gZih3aW5kb3cpLFxuXHRcdFx0XHRcdFx0XHRcdHQgPSB0aGlzLiRkcm9wZG93bi5oYXNDbGFzcygnc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUnKSxcblx0XHRcdFx0XHRcdFx0XHRuID0gdGhpcy4kZHJvcGRvd24uaGFzQ2xhc3MoJ3NlbGVjdDItZHJvcGRvd24tLWJlbG93JyksXG5cdFx0XHRcdFx0XHRcdFx0ciA9IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aSA9IHRoaXMuJGNvbnRhaW5lci5vZmZzZXQoKTtcblx0XHRcdFx0XHRcdFx0aS5ib3R0b20gPSBpLnRvcCArIHRoaXMuJGNvbnRhaW5lci5vdXRlckhlaWdodCghMSk7XG5cdFx0XHRcdFx0XHRcdHZhciBvID0ge2hlaWdodDogdGhpcy4kY29udGFpbmVyLm91dGVySGVpZ2h0KCExKX07XG5cdFx0XHRcdFx0XHRcdChvLnRvcCA9IGkudG9wKSwgKG8uYm90dG9tID0gaS50b3AgKyBvLmhlaWdodCk7XG5cdFx0XHRcdFx0XHRcdHZhciBzID0gdGhpcy4kZHJvcGRvd24ub3V0ZXJIZWlnaHQoITEpLFxuXHRcdFx0XHRcdFx0XHRcdGEgPSBlLnNjcm9sbFRvcCgpLFxuXHRcdFx0XHRcdFx0XHRcdGwgPSBlLnNjcm9sbFRvcCgpICsgZS5oZWlnaHQoKSxcblx0XHRcdFx0XHRcdFx0XHRjID0gYSA8IGkudG9wIC0gcyxcblx0XHRcdFx0XHRcdFx0XHR1ID0gbCA+IGkuYm90dG9tICsgcyxcblx0XHRcdFx0XHRcdFx0XHRkID0ge2xlZnQ6IGkubGVmdCwgdG9wOiBvLmJvdHRvbX0sXG5cdFx0XHRcdFx0XHRcdFx0cCA9IHRoaXMuJGRyb3Bkb3duUGFyZW50O1xuXHRcdFx0XHRcdFx0XHQnc3RhdGljJyA9PT0gcC5jc3MoJ3Bvc2l0aW9uJykgJiYgKHAgPSBwLm9mZnNldFBhcmVudCgpKTtcblx0XHRcdFx0XHRcdFx0dmFyIGggPSB7dG9wOiAwLCBsZWZ0OiAwfTtcblx0XHRcdFx0XHRcdFx0KGYuY29udGFpbnMoZG9jdW1lbnQuYm9keSwgcFswXSkgfHwgcFswXS5pc0Nvbm5lY3RlZCkgJiYgKGggPSBwLm9mZnNldCgpKSxcblx0XHRcdFx0XHRcdFx0XHQoZC50b3AgLT0gaC50b3ApLFxuXHRcdFx0XHRcdFx0XHRcdChkLmxlZnQgLT0gaC5sZWZ0KSxcblx0XHRcdFx0XHRcdFx0XHR0IHx8IG4gfHwgKHIgPSAnYmVsb3cnKSxcblx0XHRcdFx0XHRcdFx0XHR1IHx8ICFjIHx8IHQgPyAhYyAmJiB1ICYmIHQgJiYgKHIgPSAnYmVsb3cnKSA6IChyID0gJ2Fib3ZlJyksXG5cdFx0XHRcdFx0XHRcdFx0KCdhYm92ZScgPT0gciB8fCAodCAmJiAnYmVsb3cnICE9PSByKSkgJiYgKGQudG9wID0gby50b3AgLSBoLnRvcCAtIHMpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KHRoaXMuJGRyb3Bkb3duXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1kcm9wZG93bi0tYmVsb3cgc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3NlbGVjdDItZHJvcGRvd24tLScgKyByKSxcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGNvbnRhaW5lclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1iZWxvdyBzZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS0nICsgcikpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmNzcyhkKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9yZXNpemVEcm9wZG93biA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPSB7d2lkdGg6IHRoaXMuJGNvbnRhaW5lci5vdXRlcldpZHRoKCExKSArICdweCd9O1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuZ2V0KCdkcm9wZG93bkF1dG9XaWR0aCcpICYmXG5cdFx0XHRcdFx0XHRcdFx0KChlLm1pbldpZHRoID0gZS53aWR0aCksIChlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJyksIChlLndpZHRoID0gJ2F1dG8nKSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZHJvcGRvd24uY3NzKGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX3Nob3dEcm9wZG93biA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZFRvKHRoaXMuJGRyb3Bkb3duUGFyZW50KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9wb3NpdGlvbkRyb3Bkb3duKCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fcmVzaXplRHJvcGRvd24oKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuLCByKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCA9IG4uZ2V0KCdtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcpKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCA8IDAgJiYgKHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggPSAxIC8gMCksXG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuLCByKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5zaG93U2VhcmNoID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQhKFxuXHRcdFx0XHRcdFx0XHRcdFx0KGZ1bmN0aW9uIGUodCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBuID0gMCwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgcisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSB0W3JdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGkuY2hpbGRyZW4gPyAobiArPSBlKGkuY2hpbGRyZW4pKSA6IG4rKztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbjtcblx0XHRcdFx0XHRcdFx0XHRcdH0pKHQuZGF0YS5yZXN1bHRzKSA8IHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2hcblx0XHRcdFx0XHRcdFx0XHQpICYmIGUuY2FsbCh0aGlzLCB0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL3NlbGVjdE9uQ2xvc2UnLCBbJy4uL3V0aWxzJ10sIGZ1bmN0aW9uIChvKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZSgpIHt9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5faGFuZGxlU2VsZWN0T25DbG9zZShlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9oYW5kbGVTZWxlY3RPbkNsb3NlID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHQgJiYgbnVsbCAhPSB0Lm9yaWdpbmFsU2VsZWN0MkV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0Lm9yaWdpbmFsU2VsZWN0MkV2ZW50O1xuXHRcdFx0XHRcdFx0XHRcdGlmICgnc2VsZWN0JyA9PT0gbi5fdHlwZSB8fCAndW5zZWxlY3QnID09PSBuLl90eXBlKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO1xuXHRcdFx0XHRcdFx0XHRpZiAoIShyLmxlbmd0aCA8IDEpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSBvLkdldERhdGEoclswXSwgJ2RhdGEnKTtcblx0XHRcdFx0XHRcdFx0XHQobnVsbCAhPSBpLmVsZW1lbnQgJiYgaS5lbGVtZW50LnNlbGVjdGVkKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG51bGwgPT0gaS5lbGVtZW50ICYmIGkuc2VsZWN0ZWQpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3NlbGVjdCcsIHtkYXRhOiBpfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9jbG9zZU9uU2VsZWN0JywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKCkge31cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5fc2VsZWN0VHJpZ2dlcmVkKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuX3NlbGVjdFRyaWdnZXJlZChlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9zZWxlY3RUcmlnZ2VyZWQgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHQub3JpZ2luYWxFdmVudDtcblx0XHRcdFx0XHRcdFx0KG4gJiYgKG4uY3RybEtleSB8fCBuLm1ldGFLZXkpKSB8fFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcignY2xvc2UnLCB7b3JpZ2luYWxFdmVudDogbiwgb3JpZ2luYWxTZWxlY3QyRXZlbnQ6IHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9pMThuL2VuJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZXJyb3JMb2FkaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAnVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4nO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlucHV0VG9vTG9uZzogZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSBlLmlucHV0Lmxlbmd0aCAtIGUubWF4aW11bSxcblx0XHRcdFx0XHRcdFx0XHRuID0gJ1BsZWFzZSBkZWxldGUgJyArIHQgKyAnIGNoYXJhY3Rlcic7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxICE9IHQgJiYgKG4gKz0gJ3MnKSwgbjtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ1BsZWFzZSBlbnRlciAnICsgKGUubWluaW11bSAtIGUuaW5wdXQubGVuZ3RoKSArICcgb3IgbW9yZSBjaGFyYWN0ZXJzJztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsb2FkaW5nTW9yZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ0xvYWRpbmcgbW9yZSByZXN1bHRz4oCmJztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtYXhpbXVtU2VsZWN0ZWQ6IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gJ1lvdSBjYW4gb25seSBzZWxlY3QgJyArIGUubWF4aW11bSArICcgaXRlbSc7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxICE9IGUubWF4aW11bSAmJiAodCArPSAncycpLCB0O1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG5vUmVzdWx0czogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ05vIHJlc3VsdHMgZm91bmQnO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNlYXJjaGluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ1NlYXJjaGluZ+KApic7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cmVtb3ZlQWxsSXRlbXM6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICdSZW1vdmUgYWxsIGl0ZW1zJztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKFxuXHRcdFx0XHRcdCdzZWxlY3QyL2RlZmF1bHRzJyxcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHQnanF1ZXJ5Jyxcblx0XHRcdFx0XHRcdCdyZXF1aXJlJyxcblx0XHRcdFx0XHRcdCcuL3Jlc3VsdHMnLFxuXHRcdFx0XHRcdFx0Jy4vc2VsZWN0aW9uL3NpbmdsZScsXG5cdFx0XHRcdFx0XHQnLi9zZWxlY3Rpb24vbXVsdGlwbGUnLFxuXHRcdFx0XHRcdFx0Jy4vc2VsZWN0aW9uL3BsYWNlaG9sZGVyJyxcblx0XHRcdFx0XHRcdCcuL3NlbGVjdGlvbi9hbGxvd0NsZWFyJyxcblx0XHRcdFx0XHRcdCcuL3NlbGVjdGlvbi9zZWFyY2gnLFxuXHRcdFx0XHRcdFx0Jy4vc2VsZWN0aW9uL2V2ZW50UmVsYXknLFxuXHRcdFx0XHRcdFx0Jy4vdXRpbHMnLFxuXHRcdFx0XHRcdFx0Jy4vdHJhbnNsYXRpb24nLFxuXHRcdFx0XHRcdFx0Jy4vZGlhY3JpdGljcycsXG5cdFx0XHRcdFx0XHQnLi9kYXRhL3NlbGVjdCcsXG5cdFx0XHRcdFx0XHQnLi9kYXRhL2FycmF5Jyxcblx0XHRcdFx0XHRcdCcuL2RhdGEvYWpheCcsXG5cdFx0XHRcdFx0XHQnLi9kYXRhL3RhZ3MnLFxuXHRcdFx0XHRcdFx0Jy4vZGF0YS90b2tlbml6ZXInLFxuXHRcdFx0XHRcdFx0Jy4vZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgnLFxuXHRcdFx0XHRcdFx0Jy4vZGF0YS9tYXhpbXVtSW5wdXRMZW5ndGgnLFxuXHRcdFx0XHRcdFx0Jy4vZGF0YS9tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoJyxcblx0XHRcdFx0XHRcdCcuL2Ryb3Bkb3duJyxcblx0XHRcdFx0XHRcdCcuL2Ryb3Bkb3duL3NlYXJjaCcsXG5cdFx0XHRcdFx0XHQnLi9kcm9wZG93bi9oaWRlUGxhY2Vob2xkZXInLFxuXHRcdFx0XHRcdFx0Jy4vZHJvcGRvd24vaW5maW5pdGVTY3JvbGwnLFxuXHRcdFx0XHRcdFx0Jy4vZHJvcGRvd24vYXR0YWNoQm9keScsXG5cdFx0XHRcdFx0XHQnLi9kcm9wZG93bi9taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcsXG5cdFx0XHRcdFx0XHQnLi9kcm9wZG93bi9zZWxlY3RPbkNsb3NlJyxcblx0XHRcdFx0XHRcdCcuL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3QnLFxuXHRcdFx0XHRcdFx0Jy4vaTE4bi9lbicsXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRmdW5jdGlvbiAoYywgdSwgZCwgcCwgaCwgZiwgZywgbSwgdiwgeSwgcywgdCwgXywgJCwgdywgYiwgQSwgeCwgRCwgUywgRSwgQywgTywgVCwgcSwgTCwgSSwgaiwgZSkge1xuXHRcdFx0XHRcdFx0ZnVuY3Rpb24gbigpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5yZXNldCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAobnVsbCA9PSAoZSA9IGMuZXh0ZW5kKCEwLCB7fSwgdGhpcy5kZWZhdWx0cywgZSkpLmRhdGFBZGFwdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChudWxsICE9IGUuYWpheFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKGUuZGF0YUFkYXB0ZXIgPSB3KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbCAhPSBlLmRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKGUuZGF0YUFkYXB0ZXIgPSAkKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiAoZS5kYXRhQWRhcHRlciA9IF8pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwIDwgZS5taW5pbXVtSW5wdXRMZW5ndGggJiYgKGUuZGF0YUFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsIHgpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCA8IGUubWF4aW11bUlucHV0TGVuZ3RoICYmIChlLmRhdGFBZGFwdGVyID0geS5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLCBEKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAgPCBlLm1heGltdW1TZWxlY3Rpb25MZW5ndGggJiYgKGUuZGF0YUFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsIFMpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS50YWdzICYmIChlLmRhdGFBZGFwdGVyID0geS5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLCBiKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChudWxsID09IGUudG9rZW5TZXBhcmF0b3JzICYmIG51bGwgPT0gZS50b2tlbml6ZXIpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGUuZGF0YUFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsIEEpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLnF1ZXJ5KVxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gdShlLmFtZEJhc2UgKyAnY29tcGF0L3F1ZXJ5Jyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuZGF0YUFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsIHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG51bGwgIT0gZS5pbml0U2VsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBuID0gdShlLmFtZEJhc2UgKyAnY29tcGF0L2luaXRTZWxlY3Rpb24nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5kYXRhQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5kYXRhQWRhcHRlciwgbik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdChudWxsID09IGUucmVzdWx0c0FkYXB0ZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KChlLnJlc3VsdHNBZGFwdGVyID0gZCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gZS5hamF4ICYmIChlLnJlc3VsdHNBZGFwdGVyID0geS5EZWNvcmF0ZShlLnJlc3VsdHNBZGFwdGVyLCBUKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gZS5wbGFjZWhvbGRlciAmJiAoZS5yZXN1bHRzQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5yZXN1bHRzQWRhcHRlciwgTykpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnNlbGVjdE9uQ2xvc2UgJiYgKGUucmVzdWx0c0FkYXB0ZXIgPSB5LkRlY29yYXRlKGUucmVzdWx0c0FkYXB0ZXIsIEkpKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsID09IGUuZHJvcGRvd25BZGFwdGVyKVxuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUubXVsdGlwbGUpIGUuZHJvcGRvd25BZGFwdGVyID0gRTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgciA9IHkuRGVjb3JhdGUoRSwgQyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuZHJvcGRvd25BZGFwdGVyID0gcjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0KDAgIT09IGUubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZS5kcm9wZG93bkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZHJvcGRvd25BZGFwdGVyLCBMKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuY2xvc2VPblNlbGVjdCAmJiAoZS5kcm9wZG93bkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZHJvcGRvd25BZGFwdGVyLCBqKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gZS5kcm9wZG93bkNzc0NsYXNzIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLmRyb3Bkb3duQ3NzIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLmFkYXB0RHJvcGRvd25Dc3NDbGFzcylcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaSA9IHUoZS5hbWRCYXNlICsgJ2NvbXBhdC9kcm9wZG93bkNzcycpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLmRyb3Bkb3duQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5kcm9wZG93bkFkYXB0ZXIsIGkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5kcm9wZG93bkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZHJvcGRvd25BZGFwdGVyLCBxKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bGwgPT0gZS5zZWxlY3Rpb25BZGFwdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChlLm11bHRpcGxlID8gKGUuc2VsZWN0aW9uQWRhcHRlciA9IGgpIDogKGUuc2VsZWN0aW9uQWRhcHRlciA9IHApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsICE9IGUucGxhY2Vob2xkZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZS5zZWxlY3Rpb25BZGFwdGVyID0geS5EZWNvcmF0ZShlLnNlbGVjdGlvbkFkYXB0ZXIsIGYpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5hbGxvd0NsZWFyICYmIChlLnNlbGVjdGlvbkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuc2VsZWN0aW9uQWRhcHRlciwgZykpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLm11bHRpcGxlICYmIChlLnNlbGVjdGlvbkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuc2VsZWN0aW9uQWRhcHRlciwgbSkpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsICE9IGUuY29udGFpbmVyQ3NzQ2xhc3MgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsICE9IGUuY29udGFpbmVyQ3NzIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLmFkYXB0Q29udGFpbmVyQ3NzQ2xhc3MpXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG8gPSB1KGUuYW1kQmFzZSArICdjb21wYXQvY29udGFpbmVyQ3NzJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuc2VsZWN0aW9uQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5zZWxlY3Rpb25BZGFwdGVyLCBvKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGUuc2VsZWN0aW9uQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5zZWxlY3Rpb25BZGFwdGVyLCB2KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0KGUubGFuZ3VhZ2UgPSB0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UoZS5sYW5ndWFnZSkpLCBlLmxhbmd1YWdlLnB1c2goJ2VuJyk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IFtdLCBhID0gMDsgYSA8IGUubGFuZ3VhZ2UubGVuZ3RoOyBhKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsID0gZS5sYW5ndWFnZVthXTtcblx0XHRcdFx0XHRcdFx0XHRcdC0xID09PSBzLmluZGV4T2YobCkgJiYgcy5wdXNoKGwpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0KGUubGFuZ3VhZ2UgPSBzKSxcblx0XHRcdFx0XHRcdFx0XHRcdChlLnRyYW5zbGF0aW9ucyA9IHRoaXMuX3Byb2Nlc3NUcmFuc2xhdGlvbnMoZS5sYW5ndWFnZSwgZS5kZWJ1ZykpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQobi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gYShlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZS5yZXBsYWNlKC9bXlxcdTAwMDAtXFx1MDA3RV0vZywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRbZV0gfHwgZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRlZmF1bHRzID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0YW1kQmFzZTogJy4vJyxcblx0XHRcdFx0XHRcdFx0XHRcdGFtZExhbmd1YWdlQmFzZTogJy4vaTE4bi8nLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdDogITAsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWJ1ZzogITEsXG5cdFx0XHRcdFx0XHRcdFx0XHRkcm9wZG93bkF1dG9XaWR0aDogITEsXG5cdFx0XHRcdFx0XHRcdFx0XHRlc2NhcGVNYXJrdXA6IHkuZXNjYXBlTWFya3VwLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFuZ3VhZ2U6IHt9LFxuXHRcdFx0XHRcdFx0XHRcdFx0bWF0Y2hlcjogZnVuY3Rpb24gZSh0LCBuKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgnJyA9PT0gYy50cmltKHQudGVybSkpIHJldHVybiBuO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobi5jaGlsZHJlbiAmJiAwIDwgbi5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciByID0gYy5leHRlbmQoITAsIHt9LCBuKSwgaSA9IG4uY2hpbGRyZW4ubGVuZ3RoIC0gMTsgMCA8PSBpOyBpLS0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsID09IGUodCwgbi5jaGlsZHJlbltpXSkgJiYgci5jaGlsZHJlbi5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIDAgPCByLmNoaWxkcmVuLmxlbmd0aCA/IHIgOiBlKHQsIHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0gYShuLnRleHQpLnRvVXBwZXJDYXNlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cyA9IGEodC50ZXJtKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gLTEgPCBvLmluZGV4T2YocykgPyBuIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW5pbXVtSW5wdXRMZW5ndGg6IDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXhpbXVtSW5wdXRMZW5ndGg6IDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOiAwLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPbkNsb3NlOiAhMSxcblx0XHRcdFx0XHRcdFx0XHRcdHNjcm9sbEFmdGVyU2VsZWN0OiAhMSxcblx0XHRcdFx0XHRcdFx0XHRcdHNvcnRlcjogZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGVSZXN1bHQ6IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBlLnRleHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGVTZWxlY3Rpb246IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBlLnRleHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbWU6ICdkZWZhdWx0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoOiAncmVzb2x2ZScsXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5hcHBseUZyb21FbGVtZW50ID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IGUubGFuZ3VhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRyID0gdGhpcy5kZWZhdWx0cy5sYW5ndWFnZSxcblx0XHRcdFx0XHRcdFx0XHRcdGkgPSB0LnByb3AoJ2xhbmcnKSxcblx0XHRcdFx0XHRcdFx0XHRcdG8gPSB0LmNsb3Nlc3QoJ1tsYW5nXScpLnByb3AoJ2xhbmcnKSxcblx0XHRcdFx0XHRcdFx0XHRcdHMgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3Jlc29sdmVMYW5ndWFnZShpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fcmVzb2x2ZUxhbmd1YWdlKG4pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UociksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3Jlc29sdmVMYW5ndWFnZShvKVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKGUubGFuZ3VhZ2UgPSBzKSwgZTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5fcmVzb2x2ZUxhbmd1YWdlID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWUpIHJldHVybiBbXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYy5pc0VtcHR5T2JqZWN0KGUpKSByZXR1cm4gW107XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGMuaXNQbGFpbk9iamVjdChlKSkgcmV0dXJuIFtlXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgdDtcblx0XHRcdFx0XHRcdFx0XHR0ID0gYy5pc0FycmF5KGUpID8gZSA6IFtlXTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBuID0gW10sIHIgPSAwOyByIDwgdC5sZW5ndGg7IHIrKylcblx0XHRcdFx0XHRcdFx0XHRcdGlmICgobi5wdXNoKHRbcl0pLCAnc3RyaW5nJyA9PSB0eXBlb2YgdFtyXSAmJiAwIDwgdFtyXS5pbmRleE9mKCctJykpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpID0gdFtyXS5zcGxpdCgnLScpWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLnB1c2goaSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG47XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuX3Byb2Nlc3NUcmFuc2xhdGlvbnMgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIG4gPSBuZXcgcygpLCByID0gMDsgciA8IGUubGVuZ3RoOyByKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBpID0gbmV3IHMoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0byA9IGVbcl07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoJ3N0cmluZycgPT0gdHlwZW9mIG8pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aSA9IHMubG9hZFBhdGgobyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG8gPSB0aGlzLmRlZmF1bHRzLmFtZExhbmd1YWdlQmFzZSArIG8pLCAoaSA9IHMubG9hZFBhdGgobykpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogVGhlIGxhbmd1YWdlIGZpbGUgZm9yIFwiJyArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdcIiBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBsb2FkZWQuIEEgZmFsbGJhY2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpID0gYy5pc1BsYWluT2JqZWN0KG8pID8gbmV3IHMobykgOiBvO1xuXHRcdFx0XHRcdFx0XHRcdFx0bi5leHRlbmQoaSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBuO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRuW2MuY2FtZWxDYXNlKGUpXSA9IHQ7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSB5Ll9jb252ZXJ0RGF0YShuKTtcblx0XHRcdFx0XHRcdFx0XHRjLmV4dGVuZCghMCwgdGhpcy5kZWZhdWx0cywgcik7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRuZXcgbigpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvb3B0aW9ucycsIFsncmVxdWlyZScsICdqcXVlcnknLCAnLi9kZWZhdWx0cycsICcuL3V0aWxzJ10sIGZ1bmN0aW9uIChyLCBkLCBpLCBwKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0KSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdCgodGhpcy5vcHRpb25zID0gZSksXG5cdFx0XHRcdFx0XHRcdG51bGwgIT0gdCAmJiB0aGlzLmZyb21FbGVtZW50KHQpLFxuXHRcdFx0XHRcdFx0XHRudWxsICE9IHQgJiYgKHRoaXMub3B0aW9ucyA9IGkuYXBwbHlGcm9tRWxlbWVudCh0aGlzLm9wdGlvbnMsIHQpKSxcblx0XHRcdFx0XHRcdFx0KHRoaXMub3B0aW9ucyA9IGkuYXBwbHkodGhpcy5vcHRpb25zKSksXG5cdFx0XHRcdFx0XHRcdHQgJiYgdC5pcygnaW5wdXQnKSlcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHIodGhpcy5nZXQoJ2FtZEJhc2UnKSArICdjb21wYXQvaW5wdXREYXRhJyk7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5kYXRhQWRhcHRlciA9IHAuRGVjb3JhdGUodGhpcy5vcHRpb25zLmRhdGFBZGFwdGVyLCBuKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5mcm9tRWxlbWVudCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gWydzZWxlY3QyJ107XG5cdFx0XHRcdFx0XHRcdG51bGwgPT0gdGhpcy5vcHRpb25zLm11bHRpcGxlICYmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPSBlLnByb3AoJ211bHRpcGxlJykpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgPT0gdGhpcy5vcHRpb25zLmRpc2FibGVkICYmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSBlLnByb3AoJ2Rpc2FibGVkJykpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgPT0gdGhpcy5vcHRpb25zLmRpciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KGUucHJvcCgnZGlyJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyAodGhpcy5vcHRpb25zLmRpciA9IGUucHJvcCgnZGlyJykpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogZS5jbG9zZXN0KCdbZGlyXScpLnByb3AoJ2RpcicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAodGhpcy5vcHRpb25zLmRpciA9IGUuY2xvc2VzdCgnW2Rpcl0nKS5wcm9wKCdkaXInKSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICh0aGlzLm9wdGlvbnMuZGlyID0gJ2x0cicpKSxcblx0XHRcdFx0XHRcdFx0XHRlLnByb3AoJ2Rpc2FibGVkJywgdGhpcy5vcHRpb25zLmRpc2FibGVkKSxcblx0XHRcdFx0XHRcdFx0XHRlLnByb3AoJ211bHRpcGxlJywgdGhpcy5vcHRpb25zLm11bHRpcGxlKSxcblx0XHRcdFx0XHRcdFx0XHRwLkdldERhdGEoZVswXSwgJ3NlbGVjdDJUYWdzJykgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLm9wdGlvbnMuZGVidWcgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogVGhlIGBkYXRhLXNlbGVjdDItdGFnc2AgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSBgZGF0YS1kYXRhYCBhbmQgYGRhdGEtdGFncz1cInRydWVcImAgYXR0cmlidXRlcyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLidcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdHAuU3RvcmVEYXRhKGVbMF0sICdkYXRhJywgcC5HZXREYXRhKGVbMF0sICdzZWxlY3QyVGFncycpKSxcblx0XHRcdFx0XHRcdFx0XHRcdHAuU3RvcmVEYXRhKGVbMF0sICd0YWdzJywgITApKSxcblx0XHRcdFx0XHRcdFx0XHRwLkdldERhdGEoZVswXSwgJ2FqYXhVcmwnKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KHRoaXMub3B0aW9ucy5kZWJ1ZyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuY29uc29sZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdTZWxlY3QyOiBUaGUgYGRhdGEtYWpheC11cmxgIGF0dHJpYnV0ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvIGBkYXRhLWFqYXgtLXVybGAgYW5kIHN1cHBvcnQgZm9yIHRoZSBvbGQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgU2VsZWN0Mi4nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRlLmF0dHIoJ2FqYXgtLXVybCcsIHAuR2V0RGF0YShlWzBdLCAnYWpheFVybCcpKSxcblx0XHRcdFx0XHRcdFx0XHRcdHAuU3RvcmVEYXRhKGVbMF0sICdhamF4LVVybCcsIHAuR2V0RGF0YShlWzBdLCAnYWpheFVybCcpKSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0ge307XG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIHIoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0LnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlWzBdLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbyA9IGVbMF0uYXR0cmlidXRlc1tpXS5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0cyA9ICdkYXRhLSc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG8uc3Vic3RyKDAsIHMubGVuZ3RoKSA9PSBzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYSA9IG8uc3Vic3RyaW5nKHMubGVuZ3RoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bCA9IHAuR2V0RGF0YShlWzBdLCBhKTtcblx0XHRcdFx0XHRcdFx0XHRcdG5bYS5yZXBsYWNlKC8tKFthLXpdKS9nLCByKV0gPSBsO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRkLmZuLmpxdWVyeSAmJlxuXHRcdFx0XHRcdFx0XHRcdCcxLicgPT0gZC5mbi5qcXVlcnkuc3Vic3RyKDAsIDIpICYmXG5cdFx0XHRcdFx0XHRcdFx0ZVswXS5kYXRhc2V0ICYmXG5cdFx0XHRcdFx0XHRcdFx0KG4gPSBkLmV4dGVuZCghMCwge30sIGVbMF0uZGF0YXNldCwgbikpO1xuXHRcdFx0XHRcdFx0XHR2YXIgYyA9IGQuZXh0ZW5kKCEwLCB7fSwgcC5HZXREYXRhKGVbMF0pLCBuKTtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdSBpbiAoYyA9IHAuX2NvbnZlcnREYXRhKGMpKSlcblx0XHRcdFx0XHRcdFx0XHQtMSA8IGQuaW5BcnJheSh1LCB0KSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGQuaXNQbGFpbk9iamVjdCh0aGlzLm9wdGlvbnNbdV0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gZC5leHRlbmQodGhpcy5vcHRpb25zW3VdLCBjW3VdKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICh0aGlzLm9wdGlvbnNbdV0gPSBjW3VdKSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uc1tlXTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc1tlXSA9IHQ7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvY29yZScsIFsnanF1ZXJ5JywgJy4vb3B0aW9ucycsICcuL3V0aWxzJywgJy4va2V5cyddLCBmdW5jdGlvbiAoaSwgYywgdSwgcikge1xuXHRcdFx0XHRcdHZhciBkID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdG51bGwgIT0gdS5HZXREYXRhKGVbMF0sICdzZWxlY3QyJykgJiYgdS5HZXREYXRhKGVbMF0sICdzZWxlY3QyJykuZGVzdHJveSgpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy4kZWxlbWVudCA9IGUpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy5pZCA9IHRoaXMuX2dlbmVyYXRlSWQoZSkpLFxuXHRcdFx0XHRcdFx0XHQodCA9IHQgfHwge30pLFxuXHRcdFx0XHRcdFx0XHQodGhpcy5vcHRpb25zID0gbmV3IGModCwgZSkpLFxuXHRcdFx0XHRcdFx0XHRkLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0dmFyIG4gPSBlLmF0dHIoJ3RhYmluZGV4JykgfHwgMDtcblx0XHRcdFx0XHRcdHUuU3RvcmVEYXRhKGVbMF0sICdvbGQtdGFiaW5kZXgnLCBuKSwgZS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuXHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdkYXRhQWRhcHRlcicpO1xuXHRcdFx0XHRcdFx0dGhpcy5kYXRhQWRhcHRlciA9IG5ldyByKGUsIHRoaXMub3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR2YXIgaSA9IHRoaXMucmVuZGVyKCk7XG5cdFx0XHRcdFx0XHR0aGlzLl9wbGFjZUNvbnRhaW5lcihpKTtcblx0XHRcdFx0XHRcdHZhciBvID0gdGhpcy5vcHRpb25zLmdldCgnc2VsZWN0aW9uQWRhcHRlcicpO1xuXHRcdFx0XHRcdFx0KHRoaXMuc2VsZWN0aW9uID0gbmV3IG8oZSwgdGhpcy5vcHRpb25zKSksXG5cdFx0XHRcdFx0XHRcdCh0aGlzLiRzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5yZW5kZXIoKSksXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0aW9uLnBvc2l0aW9uKHRoaXMuJHNlbGVjdGlvbiwgaSk7XG5cdFx0XHRcdFx0XHR2YXIgcyA9IHRoaXMub3B0aW9ucy5nZXQoJ2Ryb3Bkb3duQWRhcHRlcicpO1xuXHRcdFx0XHRcdFx0KHRoaXMuZHJvcGRvd24gPSBuZXcgcyhlLCB0aGlzLm9wdGlvbnMpKSxcblx0XHRcdFx0XHRcdFx0KHRoaXMuJGRyb3Bkb3duID0gdGhpcy5kcm9wZG93bi5yZW5kZXIoKSksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZHJvcGRvd24ucG9zaXRpb24odGhpcy4kZHJvcGRvd24sIGkpO1xuXHRcdFx0XHRcdFx0dmFyIGEgPSB0aGlzLm9wdGlvbnMuZ2V0KCdyZXN1bHRzQWRhcHRlcicpO1xuXHRcdFx0XHRcdFx0KHRoaXMucmVzdWx0cyA9IG5ldyBhKGUsIHRoaXMub3B0aW9ucywgdGhpcy5kYXRhQWRhcHRlcikpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy4kcmVzdWx0cyA9IHRoaXMucmVzdWx0cy5yZW5kZXIoKSksXG5cdFx0XHRcdFx0XHRcdHRoaXMucmVzdWx0cy5wb3NpdGlvbih0aGlzLiRyZXN1bHRzLCB0aGlzLiRkcm9wZG93bik7XG5cdFx0XHRcdFx0XHR2YXIgbCA9IHRoaXM7XG5cdFx0XHRcdFx0XHR0aGlzLl9iaW5kQWRhcHRlcnMoKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJEb21FdmVudHMoKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJEYXRhRXZlbnRzKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3JlZ2lzdGVyRHJvcGRvd25FdmVudHMoKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3JlZ2lzdGVyRXZlbnRzKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdGwudHJpZ2dlcignc2VsZWN0aW9uOnVwZGF0ZScsIHtkYXRhOiBlfSk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRlLmFkZENsYXNzKCdzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlJyksXG5cdFx0XHRcdFx0XHRcdGUuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpLFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9zeW5jQXR0cmlidXRlcygpLFxuXHRcdFx0XHRcdFx0XHR1LlN0b3JlRGF0YShlWzBdLCAnc2VsZWN0MicsIHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRlLmRhdGEoJ3NlbGVjdDInLCB0aGlzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHR1LkV4dGVuZChkLCB1Lk9ic2VydmFibGUpLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9nZW5lcmF0ZUlkID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0Mi0nICtcblx0XHRcdFx0XHRcdFx0XHQobnVsbCAhPSBlLmF0dHIoJ2lkJylcblx0XHRcdFx0XHRcdFx0XHRcdD8gZS5hdHRyKCdpZCcpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IG51bGwgIT0gZS5hdHRyKCduYW1lJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBlLmF0dHIoJ25hbWUnKSArICctJyArIHUuZ2VuZXJhdGVDaGFycygyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHUuZ2VuZXJhdGVDaGFycyg0KVxuXHRcdFx0XHRcdFx0XHRcdCkucmVwbGFjZSgvKDp8XFwufFxcW3xcXF18LCkvZywgJycpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5fcGxhY2VDb250YWluZXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRlLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHRoaXMuX3Jlc29sdmVXaWR0aCh0aGlzLiRlbGVtZW50LCB0aGlzLm9wdGlvbnMuZ2V0KCd3aWR0aCcpKTtcblx0XHRcdFx0XHRcdFx0bnVsbCAhPSB0ICYmIGUuY3NzKCd3aWR0aCcsIHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3Jlc29sdmVXaWR0aCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gL153aWR0aDooKFstK10/KFswLTldKlxcLik/WzAtOV0rKShweHxlbXxleHwlfGlufGNtfG1tfHB0fHBjKSkvaTtcblx0XHRcdFx0XHRcdFx0aWYgKCdyZXNvbHZlJyA9PSB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzLl9yZXNvbHZlV2lkdGgoZSwgJ3N0eWxlJyk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGwgIT0gciA/IHIgOiB0aGlzLl9yZXNvbHZlV2lkdGgoZSwgJ2VsZW1lbnQnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoJ2VsZW1lbnQnID09IHQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgaSA9IGUub3V0ZXJXaWR0aCghMSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGkgPD0gMCA/ICdhdXRvJyA6IGkgKyAncHgnO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmICgnc3R5bGUnICE9IHQpIHJldHVybiAnY29tcHV0ZWRzdHlsZScgIT0gdCA/IHQgOiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlWzBdKS53aWR0aDtcblx0XHRcdFx0XHRcdFx0dmFyIG8gPSBlLmF0dHIoJ3N0eWxlJyk7XG5cdFx0XHRcdFx0XHRcdGlmICgnc3RyaW5nJyAhPSB0eXBlb2YgbykgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSBvLnNwbGl0KCc7JyksIGEgPSAwLCBsID0gcy5sZW5ndGg7IGEgPCBsOyBhICs9IDEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYyA9IHNbYV0ucmVwbGFjZSgvXFxzL2csICcnKS5tYXRjaChuKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobnVsbCAhPT0gYyAmJiAxIDw9IGMubGVuZ3RoKSByZXR1cm4gY1sxXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9iaW5kQWRhcHRlcnMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZGF0YUFkYXB0ZXIuYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0aW9uLmJpbmQodGhpcywgdGhpcy4kY29udGFpbmVyKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRyb3Bkb3duLmJpbmQodGhpcywgdGhpcy4kY29udGFpbmVyKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc3VsdHMuYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3JlZ2lzdGVyRG9tRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQub24oJ2NoYW5nZS5zZWxlY3QyJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHQuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dC50cmlnZ2VyKCdzZWxlY3Rpb246dXBkYXRlJywge2RhdGE6IGV9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC5vbignZm9jdXMuc2VsZWN0MicsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LnRyaWdnZXIoJ2ZvY3VzJywgZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuX3N5bmNBID0gdS5iaW5kKHRoaXMuX3N5bmNBdHRyaWJ1dGVzLCB0aGlzKSksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuX3N5bmNTID0gdS5iaW5kKHRoaXMuX3N5bmNTdWJ0cmVlLCB0aGlzKSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudFswXS5hdHRhY2hFdmVudCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudFswXS5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIHRoaXMuX3N5bmNBKTtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5Nb3pNdXRhdGlvbk9ic2VydmVyO1xuXHRcdFx0XHRcdFx0XHRudWxsICE9IGVcblx0XHRcdFx0XHRcdFx0XHQ/ICgodGhpcy5fb2JzZXJ2ZXIgPSBuZXcgZShmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpLmVhY2goZSwgdC5fc3luY0EpLCBpLmVhY2goZSwgdC5fc3luY1MpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSkpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLiRlbGVtZW50WzBdLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6ICEwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGlsZExpc3Q6ICEwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdWJ0cmVlOiAhMSxcblx0XHRcdFx0XHRcdFx0XHRcdH0pKVxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQodGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCdET01BdHRyTW9kaWZpZWQnLCB0Ll9zeW5jQSwgITEpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCdET01Ob2RlSW5zZXJ0ZWQnLCB0Ll9zeW5jUywgITEpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCdET01Ob2RlUmVtb3ZlZCcsIHQuX3N5bmNTLCAhMSkpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3JlZ2lzdGVyRGF0YUV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmRhdGFBZGFwdGVyLm9uKCcqJywgZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0XHRuLnRyaWdnZXIoZSwgdCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0ciA9IFsndG9nZ2xlJywgJ2ZvY3VzJ107XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0aW9uLm9uKCd0b2dnbGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0bi50b2dnbGVEcm9wZG93bigpO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGlvbi5vbignZm9jdXMnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi5mb2N1cyhlKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGlvbi5vbignKicsIGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQtMSA9PT0gaS5pbkFycmF5KGUsIHIpICYmIG4udHJpZ2dlcihlLCB0KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZHJvcGRvd24ub24oJyonLCBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdG4udHJpZ2dlcihlLCB0KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVzdWx0cy5vbignKicsIGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0bi50cmlnZ2VyKGUsIHQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9yZWdpc3RlckV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdG4uJGNvbnRhaW5lci5hZGRDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLW9wZW4nKTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kY29udGFpbmVyLnJlbW92ZUNsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWQnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kY29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWQnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uKCdibHVyJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kY29udGFpbmVyLnJlbW92ZUNsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uKCdxdWVyeScsIGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLmlzT3BlbigpIHx8IG4udHJpZ2dlcignb3BlbicsIHt9KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhQWRhcHRlci5xdWVyeSh0LCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG4udHJpZ2dlcigncmVzdWx0czphbGwnLCB7ZGF0YTogZSwgcXVlcnk6IHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbigncXVlcnk6YXBwZW5kJywgZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZGF0YUFkYXB0ZXIucXVlcnkodCwgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bi50cmlnZ2VyKCdyZXN1bHRzOmFwcGVuZCcsIHtkYXRhOiBlLCBxdWVyeTogdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbigna2V5cHJlc3MnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBlLndoaWNoO1xuXHRcdFx0XHRcdFx0XHRcdFx0bi5pc09wZW4oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHQgPT09IHIuRVNDIHx8IHQgPT09IHIuVEFCIHx8ICh0ID09PSByLlVQICYmIGUuYWx0S2V5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKG4uY2xvc2UoKSwgZS5wcmV2ZW50RGVmYXVsdCgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdCA9PT0gci5FTlRFUlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAobi50cmlnZ2VyKCdyZXN1bHRzOnNlbGVjdCcsIHt9KSwgZS5wcmV2ZW50RGVmYXVsdCgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiB0ID09PSByLlNQQUNFICYmIGUuY3RybEtleVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IChuLnRyaWdnZXIoJ3Jlc3VsdHM6dG9nZ2xlJywge30pLCBlLnByZXZlbnREZWZhdWx0KCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdCA9PT0gci5VUFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKG4udHJpZ2dlcigncmVzdWx0czpwcmV2aW91cycsIHt9KSwgZS5wcmV2ZW50RGVmYXVsdCgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdCA9PT0gci5ET1dOICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQobi50cmlnZ2VyKCdyZXN1bHRzOm5leHQnLCB7fSksIGUucHJldmVudERlZmF1bHQoKSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiAodCA9PT0gci5FTlRFUiB8fCB0ID09PSByLlNQQUNFIHx8ICh0ID09PSByLkRPV04gJiYgZS5hbHRLZXkpKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChuLm9wZW4oKSwgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9zeW5jQXR0cmlidXRlcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNldCgnZGlzYWJsZWQnLCB0aGlzLiRlbGVtZW50LnByb3AoJ2Rpc2FibGVkJykpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJylcblx0XHRcdFx0XHRcdFx0XHRcdD8gKHRoaXMuaXNPcGVuKCkgJiYgdGhpcy5jbG9zZSgpLCB0aGlzLnRyaWdnZXIoJ2Rpc2FibGUnLCB7fSkpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMudHJpZ2dlcignZW5hYmxlJywge30pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3N5bmNTdWJ0cmVlID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSAhMSxcblx0XHRcdFx0XHRcdFx0XHRyID0gdGhpcztcblx0XHRcdFx0XHRcdFx0aWYgKCFlIHx8ICFlLnRhcmdldCB8fCAnT1BUSU9OJyA9PT0gZS50YXJnZXQubm9kZU5hbWUgfHwgJ09QVEdST1VQJyA9PT0gZS50YXJnZXQubm9kZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodClcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0LmFkZGVkTm9kZXMgJiYgMCA8IHQuYWRkZWROb2Rlcy5sZW5ndGgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdC5hZGRlZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dC5hZGRlZE5vZGVzW2ldLnNlbGVjdGVkICYmIChuID0gITApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHQucmVtb3ZlZE5vZGVzICYmIDAgPCB0LnJlbW92ZWROb2Rlcy5sZW5ndGggJiYgKG4gPSAhMCk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBuID0gITA7XG5cdFx0XHRcdFx0XHRcdFx0biAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIudHJpZ2dlcignc2VsZWN0aW9uOnVwZGF0ZScsIHtkYXRhOiBlfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gZC5fX3N1cGVyX18udHJpZ2dlcixcblx0XHRcdFx0XHRcdFx0XHRyID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3BlbjogJ29wZW5pbmcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2U6ICdjbG9zaW5nJyxcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdDogJ3NlbGVjdGluZycsXG5cdFx0XHRcdFx0XHRcdFx0XHR1bnNlbGVjdDogJ3Vuc2VsZWN0aW5nJyxcblx0XHRcdFx0XHRcdFx0XHRcdGNsZWFyOiAnY2xlYXJpbmcnLFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGlmICgodm9pZCAwID09PSB0ICYmICh0ID0ge30pLCBlIGluIHIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSByW2VdLFxuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHtwcmV2ZW50ZWQ6ICExLCBuYW1lOiBlLCBhcmdzOiB0fTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoKG4uY2FsbCh0aGlzLCBpLCBvKSwgby5wcmV2ZW50ZWQpKSByZXR1cm4gdm9pZCAodC5wcmV2ZW50ZWQgPSAhMCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bi5jYWxsKHRoaXMsIGUsIHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUudG9nZ2xlRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJykgfHwgKHRoaXMuaXNPcGVuKCkgPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmlzT3BlbigpIHx8IHRoaXMudHJpZ2dlcigncXVlcnknLCB7fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5pc09wZW4oKSAmJiB0aGlzLnRyaWdnZXIoJ2Nsb3NlJywge30pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuaXNPcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy4kY29udGFpbmVyLmhhc0NsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuaGFzRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLiRjb250YWluZXIuaGFzQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1mb2N1cycpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhhc0ZvY3VzKCkgfHxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy4kY29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKSwgdGhpcy50cmlnZ2VyKCdmb2N1cycsIHt9KSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4gJiZcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogVGhlIGBzZWxlY3QyKFwiZW5hYmxlXCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIikgaW5zdGVhZC4nXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHQobnVsbCAhPSBlICYmIDAgIT09IGUubGVuZ3RoKSB8fCAoZSA9IFshMF0pO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9ICFlWzBdO1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5kYXRhID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmXG5cdFx0XHRcdFx0XHRcdFx0MCA8IGFyZ3VtZW50cy5sZW5ndGggJiZcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuY29uc29sZSAmJlxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybiAmJlxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0XHRcdFx0XHRcdCdTZWxlY3QyOiBEYXRhIGNhbiBubyBsb25nZXIgYmUgc2V0IHVzaW5nIGBzZWxlY3QyKFwiZGF0YVwiKWAuIFlvdSBzaG91bGQgY29uc2lkZXIgc2V0dGluZyB0aGUgdmFsdWUgaW5zdGVhZCB1c2luZyBgJGVsZW1lbnQudmFsKClgLidcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dCA9IGU7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUudmFsID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuY29uc29sZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdTZWxlY3QyOiBUaGUgYHNlbGVjdDIoXCJ2YWxcIilgIG1ldGhvZCBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbGF0ZXIgU2VsZWN0MiB2ZXJzaW9ucy4gVXNlICRlbGVtZW50LnZhbCgpIGluc3RlYWQuJ1xuXHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRudWxsID09IGUgfHwgMCA9PT0gZS5sZW5ndGgpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy4kZWxlbWVudC52YWwoKTtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSBlWzBdO1xuXHRcdFx0XHRcdFx0XHRpLmlzQXJyYXkodCkgJiZcblx0XHRcdFx0XHRcdFx0XHQodCA9IGkubWFwKHQsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZS50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH0pKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LnZhbCh0KS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50WzBdLmRldGFjaEV2ZW50ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50WzBdLmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgdGhpcy5fc3luY0EpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gdGhpcy5fb2JzZXJ2ZXJcblx0XHRcdFx0XHRcdFx0XHRcdD8gKHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKSwgKHRoaXMuX29ic2VydmVyID0gbnVsbCkpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQodGhpcy4kZWxlbWVudFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCdET01BdHRyTW9kaWZpZWQnLCB0aGlzLl9zeW5jQSwgITEpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50WzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTU5vZGVJbnNlcnRlZCcsIHRoaXMuX3N5bmNTLCAhMSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NTm9kZVJlbW92ZWQnLCB0aGlzLl9zeW5jUywgITEpKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5fc3luY0EgPSBudWxsKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5fc3luY1MgPSBudWxsKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50Lm9mZignLnNlbGVjdDInKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JywgdS5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnKSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZScpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKSxcblx0XHRcdFx0XHRcdFx0XHR1LlJlbW92ZURhdGEodGhpcy4kZWxlbWVudFswXSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCdzZWxlY3QyJyksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhQWRhcHRlci5kZXN0cm95KCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZHJvcGRvd24uZGVzdHJveSgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVzdWx0cy5kZXN0cm95KCksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuZGF0YUFkYXB0ZXIgPSBudWxsKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5zZWxlY3Rpb24gPSBudWxsKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5kcm9wZG93biA9IG51bGwpLFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLnJlc3VsdHMgPSBudWxsKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPSBpKFxuXHRcdFx0XHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cInNlbGVjdDIgc2VsZWN0Mi1jb250YWluZXJcIj48c3BhbiBjbGFzcz1cInNlbGVjdGlvblwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cImRyb3Bkb3duLXdyYXBwZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+PC9zcGFuPidcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRlLmF0dHIoJ2RpcicsIHRoaXMub3B0aW9ucy5nZXQoJ2RpcicpKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy4kY29udGFpbmVyID0gZSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kY29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tJyArIHRoaXMub3B0aW9ucy5nZXQoJ3RoZW1lJykpLFxuXHRcdFx0XHRcdFx0XHRcdHUuU3RvcmVEYXRhKGVbMF0sICdlbGVtZW50JywgdGhpcy4kZWxlbWVudCksXG5cdFx0XHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdqcXVlcnktbW91c2V3aGVlbCcsIFsnanF1ZXJ5J10sIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGU7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZShcblx0XHRcdFx0XHQnanF1ZXJ5LnNlbGVjdDInLFxuXHRcdFx0XHRcdFsnanF1ZXJ5JywgJ2pxdWVyeS1tb3VzZXdoZWVsJywgJy4vc2VsZWN0Mi9jb3JlJywgJy4vc2VsZWN0Mi9kZWZhdWx0cycsICcuL3NlbGVjdDIvdXRpbHMnXSxcblx0XHRcdFx0XHRmdW5jdGlvbiAoaSwgZSwgbywgdCwgcykge1xuXHRcdFx0XHRcdFx0aWYgKG51bGwgPT0gaS5mbi5zZWxlY3QyKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhID0gWydvcGVuJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knXTtcblx0XHRcdFx0XHRcdFx0aS5mbi5zZWxlY3QyID0gZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoJ29iamVjdCcgPT0gdHlwZW9mICh0ID0gdCB8fCB7fSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlID0gaS5leHRlbmQoITAsIHt9LCB0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXcgbyhpKHRoaXMpLCBlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCdzdHJpbmcnICE9IHR5cGVvZiB0KSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIGZvciBTZWxlY3QyOiAnICsgdCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4sXG5cdFx0XHRcdFx0XHRcdFx0XHRyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBzLkdldERhdGEodGhpcywgJ3NlbGVjdDInKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCA9PSBlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiVGhlIHNlbGVjdDIoJ1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dCArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiJykgbWV0aG9kIHdhcyBjYWxsZWQgb24gYW4gZWxlbWVudCB0aGF0IGlzIG5vdCB1c2luZyBTZWxlY3QyLlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQobiA9IGVbdF0uYXBwbHkoZSwgcikpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHQtMSA8IGkuaW5BcnJheSh0LCBhKSA/IHRoaXMgOiBuXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBudWxsID09IGkuZm4uc2VsZWN0Mi5kZWZhdWx0cyAmJiAoaS5mbi5zZWxlY3QyLmRlZmF1bHRzID0gdCksIG87XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR7ZGVmaW5lOiBlLmRlZmluZSwgcmVxdWlyZTogZS5yZXF1aXJlfVxuXHRcdFx0KTtcblx0XHR9KSgpLFxuXHRcdHQgPSBlLnJlcXVpcmUoJ2pxdWVyeS5zZWxlY3QyJyk7XG5cdHJldHVybiAodS5mbi5zZWxlY3QyLmFtZCA9IGUpLCB0O1xufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPLFdBQVEsWUFBWSxPQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtB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QyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FB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MEMsR0FBRUQsRUFBQyxFQUFFYixNQUFNYyxJQUFHekMsRUFBQztVQUN0QixDQUFDLEdBQ0QsS0FBS0MsR0FBRXlJLFFBQVFsRyxJQUFHcEMsRUFBQyxJQUFJLE9BQU9MO1FBRWhDO01BQ0Q7QUFDQSxhQUFPLFFBQVFFLEdBQUV4QixHQUFHQyxRQUFRb2hDLGFBQWE3L0IsR0FBRXhCLEdBQUdDLFFBQVFvaEMsV0FBV2xnQyxLQUFJTTtJQUN0RSxDQUNELEdBQ0E7TUFBQzlCLFFBQVFPLEdBQUVQO01BQVF1RSxTQUFTaEUsR0FBRWdFO0lBQU87RUFFdkMsRUFBRyxHQUNId2lDLElBQUkzbUMsRUFBRW1FLFFBQVEsZ0JBQWdCO0FBQy9CLFNBQVFwRSxFQUFFRSxHQUFHQyxRQUFRTCxNQUFNRyxHQUFJMm1DO0FBQ2hDLENBQUM7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibiIsICJkZWZpbmUiLCAiYW1kIiwgImpRdWVyeSIsICJ1IiwgImUiLCAiZm4iLCAic2VsZWN0MiIsICJlMiIsICJ0MiIsICJyIiwgImgiLCAibyIsICJzIiwgImYiLCAiZyIsICJtIiwgInYiLCAieSIsICJfIiwgImkiLCAiYSIsICJ3IiwgImIiLCAiZTMiLCAidDMiLCAiY2FsbCIsICJsIiwgIm4yIiwgInIyIiwgImkyIiwgIm8yIiwgInMyIiwgImEyIiwgImwyIiwgImMyIiwgInUyIiwgImQiLCAicCIsICJoMiIsICJzcGxpdCIsICJmMiIsICJtYXAiLCAiZzIiLCAibGVuZ3RoIiwgIm5vZGVJZENvbXBhdCIsICJ0ZXN0IiwgInJlcGxhY2UiLCAiY2hhckF0IiwgInNsaWNlIiwgImNvbmNhdCIsICJzcGxpY2UiLCAiam9pbiIsICJBIiwgImFyZ3VtZW50cyIsICJwdXNoIiwgImFwcGx5IiwgIngiLCAiRCIsICJFcnJvciIsICJjIiwgImluZGV4T2YiLCAic3Vic3RyaW5nIiwgIlMiLCAicmVxdWlyZWpzIiwgIk9iamVjdCIsICJwcm90b3R5cGUiLCAiaGFzT3duUHJvcGVydHkiLCAibm9ybWFsaXplIiwgInQ0IiwgImU0IiwgInByIiwgInJlcXVpcmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaWQiLCAidXJpIiwgImNvbmZpZyIsICJsb2FkIiwgImRlcHMiLCAiY2FsbGJhY2siLCAic2V0VGltZW91dCIsICJfZGVmaW5lZCIsICIkIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAibjMiLCAiRXh0ZW5kIiwgImNvbnN0cnVjdG9yIiwgImkzIiwgIl9fc3VwZXJfXyIsICJEZWNvcmF0ZSIsICJvMyIsICJlNSIsICJBcnJheSIsICJ1bnNoaWZ0IiwgIm40IiwgImRpc3BsYXlOYW1lIiwgImxpc3RlbmVycyIsICJvbiIsICJ0cmlnZ2VyIiwgIl90eXBlIiwgImludm9rZSIsICJPYnNlcnZhYmxlIiwgImdlbmVyYXRlQ2hhcnMiLCAiTWF0aCIsICJmbG9vciIsICJyYW5kb20iLCAidG9TdHJpbmciLCAiYmluZCIsICJfY29udmVydERhdGEiLCAidG9Mb3dlckNhc2UiLCAiaGFzU2Nyb2xsIiwgInN0eWxlIiwgIm92ZXJmbG93WCIsICJvdmVyZmxvd1kiLCAiaW5uZXJIZWlnaHQiLCAic2Nyb2xsSGVpZ2h0IiwgImlubmVyV2lkdGgiLCAic2Nyb2xsV2lkdGgiLCAiZXNjYXBlTWFya3VwIiwgIlN0cmluZyIsICJhcHBlbmRNYW55IiwgImpxdWVyeSIsICJzdWJzdHIiLCAiYWRkIiwgImFwcGVuZCIsICJfX2NhY2hlIiwgIkdldFVuaXF1ZUVsZW1lbnRJZCIsICJnZXRBdHRyaWJ1dGUiLCAic2V0QXR0cmlidXRlIiwgIlN0b3JlRGF0YSIsICJHZXREYXRhIiwgImRhdGEiLCAiUmVtb3ZlRGF0YSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAiJGVsZW1lbnQiLCAib3B0aW9ucyIsICJyZW5kZXIiLCAiZ2V0IiwgImF0dHIiLCAiJHJlc3VsdHMiLCAiY2xlYXIiLCAiZW1wdHkiLCAiZGlzcGxheU1lc3NhZ2UiLCAiaGlkZUxvYWRpbmciLCAicjMiLCAibWVzc2FnZSIsICJhcmdzIiwgImNsYXNzTmFtZSIsICJoaWRlTWVzc2FnZXMiLCAiZmluZCIsICJyZW1vdmUiLCAicmVzdWx0cyIsICJzb3J0IiwgIm9wdGlvbiIsICJjaGlsZHJlbiIsICJwb3NpdGlvbiIsICJoaWdobGlnaHRGaXJzdEl0ZW0iLCAiZmlsdGVyIiwgImZpcnN0IiwgImVuc3VyZUhpZ2hsaWdodFZpc2libGUiLCAic2V0Q2xhc3NlcyIsICJjdXJyZW50IiwgImVhY2giLCAiZWxlbWVudCIsICJzZWxlY3RlZCIsICJpbkFycmF5IiwgInNob3dMb2FkaW5nIiwgImRpc2FibGVkIiwgImxvYWRpbmciLCAidGV4dCIsICJwcmVwZW5kIiwgImRvY3VtZW50IiwgImNyZWF0ZUVsZW1lbnQiLCAicm9sZSIsICJ3aW5kb3ciLCAiRWxlbWVudCIsICJtYXRjaGVzIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsICJfcmVzdWx0SWQiLCAidGl0bGUiLCAidGVtcGxhdGUiLCAiY2xhc3MiLCAiaXNPcGVuIiwgInJlbW92ZUF0dHIiLCAiZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzIiwgImluZGV4IiwgImVxIiwgIm9mZnNldCIsICJ0b3AiLCAic2Nyb2xsVG9wIiwgIm91dGVySGVpZ2h0IiwgImFkZENsYXNzIiwgIm1vdXNld2hlZWwiLCAiZGVsdGFZIiwgImhlaWdodCIsICJwcmV2ZW50RGVmYXVsdCIsICJzdG9wUHJvcGFnYXRpb24iLCAib3JpZ2luYWxFdmVudCIsICJyZW1vdmVDbGFzcyIsICJkZXN0cm95IiwgImRpc3BsYXkiLCAiaW5uZXJIVE1MIiwgIkJBQ0tTUEFDRSIsICJUQUIiLCAiRU5URVIiLCAiU0hJRlQiLCAiQ1RSTCIsICJBTFQiLCAiRVNDIiwgIlNQQUNFIiwgIlBBR0VfVVAiLCAiUEFHRV9ET1dOIiwgIkVORCIsICJIT01FIiwgIkxFRlQiLCAiVVAiLCAiUklHSFQiLCAiRE9XTiIsICJERUxFVEUiLCAiX3RhYmluZGV4IiwgIiRzZWxlY3Rpb24iLCAiY29udGFpbmVyIiwgIl9oYW5kbGVCbHVyIiwgIndoaWNoIiwgInVwZGF0ZSIsICJfYXR0YWNoQ2xvc2VIYW5kbGVyIiwgIl9kZXRhY2hDbG9zZUhhbmRsZXIiLCAiYWN0aXZlRWxlbWVudCIsICJjb250YWlucyIsICJib2R5IiwgInRhcmdldCIsICJjbG9zZXN0IiwgIm9mZiIsICJodG1sIiwgInNlbGVjdGlvbkNvbnRhaW5lciIsICJwYXJlbnQiLCAicGxhY2Vob2xkZXIiLCAibm9ybWFsaXplUGxhY2Vob2xkZXIiLCAiY3JlYXRlUGxhY2Vob2xkZXIiLCAiX2hhbmRsZUNsZWFyIiwgIl9oYW5kbGVLZXlib2FyZENsZWFyIiwgInZhbCIsICJwcmV2ZW50ZWQiLCAiJHNlYXJjaENvbnRhaW5lciIsICIkc2VhcmNoIiwgIl90cmFuc2ZlclRhYkluZGV4IiwgInByb3AiLCAiX2tleVVwUHJldmVudGVkIiwgImlzRGVmYXVsdFByZXZlbnRlZCIsICJwcmV2IiwgInNlYXJjaFJlbW92ZUNob2ljZSIsICJkb2N1bWVudE1vZGUiLCAidHlwZSIsICJoYW5kbGVTZWFyY2giLCAicmVzaXplU2VhcmNoIiwgInRlcm0iLCAiY3NzIiwgIndpZHRoIiwgIkV2ZW50IiwgInBhcmFtcyIsICJkaWN0IiwgImFsbCIsICJleHRlbmQiLCAiX2NhY2hlIiwgImxvYWRQYXRoIiwgIu+8oSIsICLDgCIsICLDgSIsICLDgiIsICLhuqYiLCAi4bqkIiwgIuG6qiIsICLhuqgiLCAiw4MiLCAixIAiLCAixIIiLCAi4bqwIiwgIuG6riIsICLhurQiLCAi4bqyIiwgIsimIiwgIsegIiwgIsOEIiwgIseeIiwgIuG6oiIsICLDhSIsICLHuiIsICLHjSIsICLIgCIsICLIgiIsICLhuqAiLCAi4bqsIiwgIuG6tiIsICLhuIAiLCAixIQiLCAiw4YiLCAix7wiLCAix6IiLCAi77yiIiwgIuG4giIsICLhuIQiLCAi4biGIiwgIsaCIiwgIsaBIiwgIu+8oyIsICLEhiIsICLEiCIsICLEiiIsICLEjCIsICLDhyIsICLhuIgiLCAixociLCAi77ykIiwgIuG4iiIsICLEjiIsICLhuIwiLCAi4biQIiwgIuG4kiIsICLhuI4iLCAixJAiLCAixosiLCAixooiLCAixokiLCAix7EiLCAix4QiLCAix7IiLCAix4UiLCAi77ylIiwgIsOIIiwgIsOJIiwgIsOKIiwgIuG7gCIsICLhur4iLCAi4buEIiwgIuG7giIsICLhurwiLCAixJIiLCAi4biUIiwgIuG4liIsICLElCIsICLEliIsICLDiyIsICLhuroiLCAixJoiLCAiyIQiLCAiyIYiLCAi4bq4IiwgIuG7hiIsICLIqCIsICLhuJwiLCAixJgiLCAi4biYIiwgIuG4miIsICLGkCIsICLGjiIsICLvvKYiLCAi4bieIiwgIsaRIiwgIu+8pyIsICLHtCIsICLEnCIsICLhuKAiLCAixJ4iLCAixKAiLCAix6YiLCAixKIiLCAix6QiLCAixpMiLCAi77yoIiwgIsSkIiwgIuG4oiIsICLhuKYiLCAiyJ4iLCAi4bikIiwgIuG4qCIsICLhuKoiLCAixKYiLCAi77ypIiwgIsOMIiwgIsONIiwgIsOOIiwgIsSoIiwgIsSqIiwgIsSsIiwgIsSwIiwgIsOPIiwgIuG4riIsICLhu4giLCAix48iLCAiyIgiLCAiyIoiLCAi4buKIiwgIsSuIiwgIuG4rCIsICLGlyIsICLvvKoiLCAixLQiLCAi77yrIiwgIuG4sCIsICLHqCIsICLhuLIiLCAixLYiLCAi4bi0IiwgIsaYIiwgIu+8rCIsICLEvyIsICLEuSIsICLEvSIsICLhuLYiLCAi4bi4IiwgIsS7IiwgIuG4vCIsICLhuLoiLCAixYEiLCAix4ciLCAix4giLCAi77ytIiwgIuG4viIsICLhuYAiLCAi4bmCIiwgIsacIiwgIu+8riIsICLHuCIsICLFgyIsICLDkSIsICLhuYQiLCAixYciLCAi4bmGIiwgIsWFIiwgIuG5iiIsICLhuYgiLCAixp0iLCAix4oiLCAix4siLCAi77yvIiwgIsOSIiwgIsOTIiwgIsOUIiwgIuG7kiIsICLhu5AiLCAi4buWIiwgIuG7lCIsICLDlSIsICLhuYwiLCAiyKwiLCAi4bmOIiwgIsWMIiwgIuG5kCIsICLhuZIiLCAixY4iLCAiyK4iLCAiyLAiLCAiw5YiLCAiyKoiLCAi4buOIiwgIsWQIiwgIseRIiwgIsiMIiwgIsiOIiwgIsagIiwgIuG7nCIsICLhu5oiLCAi4bugIiwgIuG7niIsICLhu6IiLCAi4buMIiwgIuG7mCIsICLHqiIsICLHrCIsICLDmCIsICLHviIsICLGhiIsICLGnyIsICLFkiIsICLGoiIsICLIoiIsICLvvLAiLCAi4bmUIiwgIuG5liIsICLGpCIsICLvvLEiLCAi77yyIiwgIsWUIiwgIuG5mCIsICLFmCIsICLIkCIsICLIkiIsICLhuZoiLCAi4bmcIiwgIsWWIiwgIuG5niIsICLvvLMiLCAixZoiLCAi4bmkIiwgIsWcIiwgIuG5oCIsICLFoCIsICLhuaYiLCAi4bmiIiwgIuG5qCIsICLImCIsICLFniIsICLvvLQiLCAi4bmqIiwgIsWkIiwgIuG5rCIsICLImiIsICLFoiIsICLhubAiLCAi4bmuIiwgIsWmIiwgIsasIiwgIsauIiwgIu+8tSIsICLDmSIsICLDmiIsICLDmyIsICLFqCIsICLhubgiLCAixaoiLCAi4bm6IiwgIsWsIiwgIsOcIiwgIsebIiwgIseXIiwgIseVIiwgIseZIiwgIuG7piIsICLFriIsICLFsCIsICLHkyIsICLIlCIsICLIliIsICLGryIsICLhu6oiLCAi4buoIiwgIuG7riIsICLhu6wiLCAi4buwIiwgIuG7pCIsICLhubIiLCAixbIiLCAi4bm2IiwgIuG5tCIsICLvvLYiLCAi4bm8IiwgIuG5viIsICLGsiIsICLvvLciLCAi4bqAIiwgIuG6giIsICLFtCIsICLhuoYiLCAi4bqEIiwgIuG6iCIsICLvvLgiLCAi4bqKIiwgIuG6jCIsICLvvLkiLCAi4buyIiwgIsOdIiwgIsW2IiwgIuG7uCIsICLIsiIsICLhuo4iLCAixbgiLCAi4bu2IiwgIuG7tCIsICLGsyIsICLvvLoiLCAixbkiLCAi4bqQIiwgIsW7IiwgIsW9IiwgIuG6kiIsICLhupQiLCAixrUiLCAiyKQiLCAi772BIiwgIuG6miIsICLDoCIsICLDoSIsICLDoiIsICLhuqciLCAi4bqlIiwgIuG6qyIsICLhuqkiLCAiw6MiLCAixIEiLCAixIMiLCAi4bqxIiwgIuG6ryIsICLhurUiLCAi4bqzIiwgIsinIiwgIsehIiwgIsOkIiwgIsefIiwgIuG6oyIsICLDpSIsICLHuyIsICLHjiIsICLIgSIsICLIgyIsICLhuqEiLCAi4bqtIiwgIuG6tyIsICLhuIEiLCAixIUiLCAiyZAiLCAiw6YiLCAix70iLCAix6MiLCAi772CIiwgIuG4gyIsICLhuIUiLCAi4biHIiwgIsaAIiwgIsaDIiwgIsmTIiwgIu+9gyIsICLEhyIsICLEiSIsICLEiyIsICLEjSIsICLDpyIsICLhuIkiLCAixogiLCAi772EIiwgIuG4iyIsICLEjyIsICLhuI0iLCAi4biRIiwgIuG4kyIsICLhuI8iLCAixJEiLCAixowiLCAiyZYiLCAiyZciLCAix7MiLCAix4YiLCAi772FIiwgIsOoIiwgIsOpIiwgIsOqIiwgIuG7gSIsICLhur8iLCAi4buFIiwgIuG7gyIsICLhur0iLCAixJMiLCAi4biVIiwgIuG4lyIsICLElSIsICLElyIsICLDqyIsICLhursiLCAixJsiLCAiyIUiLCAiyIciLCAi4bq5IiwgIuG7hyIsICLIqSIsICLhuJ0iLCAixJkiLCAi4biZIiwgIuG4myIsICLJmyIsICLHnSIsICLvvYYiLCAi4bifIiwgIsaSIiwgIu+9hyIsICLHtSIsICLEnSIsICLhuKEiLCAixJ8iLCAixKEiLCAix6ciLCAixKMiLCAix6UiLCAiyaAiLCAi772IIiwgIsSlIiwgIuG4oyIsICLhuKciLCAiyJ8iLCAi4bilIiwgIuG4qSIsICLhuKsiLCAi4bqWIiwgIsSnIiwgIsmlIiwgIsaVIiwgIu+9iSIsICLDrCIsICLDrSIsICLDriIsICLEqSIsICLEqyIsICLErSIsICLDryIsICLhuK8iLCAi4buJIiwgIseQIiwgIsiJIiwgIsiLIiwgIuG7iyIsICLEryIsICLhuK0iLCAiyagiLCAixLEiLCAi772KIiwgIsS1IiwgIsewIiwgIu+9iyIsICLhuLEiLCAix6kiLCAi4bizIiwgIsS3IiwgIuG4tSIsICLGmSIsICLvvYwiLCAixYAiLCAixLoiLCAixL4iLCAi4bi3IiwgIuG4uSIsICLEvCIsICLhuL0iLCAi4bi7IiwgIsW/IiwgIsWCIiwgIsaaIiwgIsmrIiwgIseJIiwgIu+9jSIsICLhuL8iLCAi4bmBIiwgIuG5gyIsICLJsSIsICLJryIsICLvvY4iLCAix7kiLCAixYQiLCAiw7EiLCAi4bmFIiwgIsWIIiwgIuG5hyIsICLFhiIsICLhuYsiLCAi4bmJIiwgIsaeIiwgIsmyIiwgIsWJIiwgIseMIiwgIu+9jyIsICLDsiIsICLDsyIsICLDtCIsICLhu5MiLCAi4buRIiwgIuG7lyIsICLhu5UiLCAiw7UiLCAi4bmNIiwgIsitIiwgIuG5jyIsICLFjSIsICLhuZEiLCAi4bmTIiwgIsWPIiwgIsivIiwgIsixIiwgIsO2IiwgIsirIiwgIuG7jyIsICLFkSIsICLHkiIsICLIjSIsICLIjyIsICLGoSIsICLhu50iLCAi4bubIiwgIuG7oSIsICLhu58iLCAi4bujIiwgIuG7jSIsICLhu5kiLCAix6siLCAix60iLCAiw7giLCAix78iLCAiyZQiLCAiybUiLCAixZMiLCAixqMiLCAiyKMiLCAi772QIiwgIuG5lSIsICLhuZciLCAixqUiLCAi772RIiwgIu+9kiIsICLFlSIsICLhuZkiLCAixZkiLCAiyJEiLCAiyJMiLCAi4bmbIiwgIuG5nSIsICLFlyIsICLhuZ8iLCAiyb0iLCAi772TIiwgIsOfIiwgIsWbIiwgIuG5pSIsICLFnSIsICLhuaEiLCAixaEiLCAi4bmnIiwgIuG5oyIsICLhuakiLCAiyJkiLCAixZ8iLCAi4bqbIiwgIu+9lCIsICLhuasiLCAi4bqXIiwgIsWlIiwgIuG5rSIsICLImyIsICLFoyIsICLhubEiLCAi4bmvIiwgIsWnIiwgIsatIiwgIsqIIiwgIu+9lSIsICLDuSIsICLDuiIsICLDuyIsICLFqSIsICLhubkiLCAixasiLCAi4bm7IiwgIsWtIiwgIsO8IiwgIsecIiwgIseYIiwgIseWIiwgIseaIiwgIuG7pyIsICLFryIsICLFsSIsICLHlCIsICLIlSIsICLIlyIsICLGsCIsICLhu6siLCAi4bupIiwgIuG7ryIsICLhu60iLCAi4buxIiwgIuG7pSIsICLhubMiLCAixbMiLCAi4bm3IiwgIuG5tSIsICLKiSIsICLvvZYiLCAi4bm9IiwgIuG5vyIsICLKiyIsICLKjCIsICLvvZciLCAi4bqBIiwgIuG6gyIsICLFtSIsICLhuociLCAi4bqFIiwgIuG6mCIsICLhuokiLCAi772YIiwgIuG6iyIsICLhuo0iLCAi772ZIiwgIuG7syIsICLDvSIsICLFtyIsICLhu7kiLCAiyLMiLCAi4bqPIiwgIsO/IiwgIuG7tyIsICLhupkiLCAi4bu1IiwgIsa0IiwgIu+9miIsICLFuiIsICLhupEiLCAixbwiLCAixb4iLCAi4bqTIiwgIuG6lSIsICLGtiIsICLIpSIsICLOhiIsICLOiCIsICLOiSIsICLOiiIsICLOqiIsICLOjCIsICLOjiIsICLOqyIsICLOjyIsICLOrCIsICLOrSIsICLOriIsICLOryIsICLPiiIsICLOkCIsICLPjCIsICLPjSIsICLPiyIsICLOsCIsICLPjiIsICLPgiIsICJxdWVyeSIsICJnZW5lcmF0ZVJlc3VsdElkIiwgIml0ZW0iLCAic2VsZWN0IiwgImlzIiwgInVuc2VsZWN0IiwgImFkZE9wdGlvbnMiLCAibGFiZWwiLCAidGV4dENvbnRlbnQiLCAiaW5uZXJUZXh0IiwgInZhbHVlIiwgIl9ub3JtYWxpemVJdGVtIiwgIl9kYXRhVG9Db252ZXJ0IiwgImNvbnZlcnRUb09wdGlvbnMiLCAicmVwbGFjZVdpdGgiLCAiYWpheE9wdGlvbnMiLCAiX2FwcGx5RGVmYXVsdHMiLCAicHJvY2Vzc1Jlc3VsdHMiLCAicSIsICJ0cmFuc3BvcnQiLCAidDUiLCAiYWpheCIsICJ0aGVuIiwgImZhaWwiLCAiX3JlcXVlc3QiLCAiaXNGdW5jdGlvbiIsICJhYm9ydCIsICJlNiIsICJpc0FycmF5IiwgInN0YXR1cyIsICJ1cmwiLCAiZGVsYXkiLCAiX3F1ZXJ5VGltZW91dCIsICJjbGVhclRpbWVvdXQiLCAiY3JlYXRlVGFnIiwgImluc2VydFRhZyIsICJ1MyIsICJfcmVtb3ZlT2xkVGFncyIsICJwYWdlIiwgInRvVXBwZXJDYXNlIiwgInRyaW0iLCAidG9rZW5pemVyIiwgImRyb3Bkb3duIiwgInNlbGVjdGlvbiIsICJtaW5pbXVtSW5wdXRMZW5ndGgiLCAibWluaW11bSIsICJpbnB1dCIsICJtYXhpbXVtSW5wdXRMZW5ndGgiLCAibWF4aW11bSIsICJtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIiwgIl9jaGVja0lmTWF4aW11bVNlbGVjdGVkIiwgIiRkcm9wZG93biIsICJzaG93U2VhcmNoIiwgInJlbW92ZVBsYWNlaG9sZGVyIiwgImxhc3RQYXJhbXMiLCAiJGxvYWRpbmdNb3JlIiwgImNyZWF0ZUxvYWRpbmdNb3JlIiwgInNob3dMb2FkaW5nTW9yZSIsICJsb2FkTW9yZUlmTmVlZGVkIiwgImRvY3VtZW50RWxlbWVudCIsICJsb2FkTW9yZSIsICJwYWdpbmF0aW9uIiwgIm1vcmUiLCAiJGRyb3Bkb3duUGFyZW50IiwgIl9zaG93RHJvcGRvd24iLCAiX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlciIsICJfYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzIiwgIl9oaWRlRHJvcGRvd24iLCAiX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlciIsICIkZHJvcGRvd25Db250YWluZXIiLCAiJGNvbnRhaW5lciIsICJkZXRhY2giLCAiX2NvbnRhaW5lclJlc3VsdHNIYW5kbGVyc0JvdW5kIiwgIl9wb3NpdGlvbkRyb3Bkb3duIiwgIl9yZXNpemVEcm9wZG93biIsICJwYXJlbnRzIiwgInNjcm9sbExlZnQiLCAiaGFzQ2xhc3MiLCAiYm90dG9tIiwgImEzIiwgImxlZnQiLCAib2Zmc2V0UGFyZW50IiwgImlzQ29ubmVjdGVkIiwgIm91dGVyV2lkdGgiLCAibWluV2lkdGgiLCAiYXBwZW5kVG8iLCAibWluaW11bVJlc3VsdHNGb3JTZWFyY2giLCAiX2hhbmRsZVNlbGVjdE9uQ2xvc2UiLCAib3JpZ2luYWxTZWxlY3QyRXZlbnQiLCAiX3NlbGVjdFRyaWdnZXJlZCIsICJjdHJsS2V5IiwgIm1ldGFLZXkiLCAiZXJyb3JMb2FkaW5nIiwgImlucHV0VG9vTG9uZyIsICJpbnB1dFRvb1Nob3J0IiwgImxvYWRpbmdNb3JlIiwgIm1heGltdW1TZWxlY3RlZCIsICJub1Jlc3VsdHMiLCAic2VhcmNoaW5nIiwgInJlbW92ZUFsbEl0ZW1zIiwgIm0yIiwgInYyIiwgInkyIiwgIl8yIiwgIiQyIiwgIncyIiwgImIyIiwgIkEyIiwgIngyIiwgIkQyIiwgIlMyIiwgIkUiLCAiQyIsICJPIiwgIlQiLCAiTCIsICJJIiwgImoiLCAicmVzZXQiLCAiZGVmYXVsdHMiLCAiZGF0YUFkYXB0ZXIiLCAidGFncyIsICJ0b2tlblNlcGFyYXRvcnMiLCAiYW1kQmFzZSIsICJpbml0U2VsZWN0aW9uIiwgInJlc3VsdHNBZGFwdGVyIiwgInNlbGVjdE9uQ2xvc2UiLCAiZHJvcGRvd25BZGFwdGVyIiwgIm11bHRpcGxlIiwgImNsb3NlT25TZWxlY3QiLCAiZHJvcGRvd25Dc3NDbGFzcyIsICJkcm9wZG93bkNzcyIsICJhZGFwdERyb3Bkb3duQ3NzQ2xhc3MiLCAic2VsZWN0aW9uQWRhcHRlciIsICJhbGxvd0NsZWFyIiwgImNvbnRhaW5lckNzc0NsYXNzIiwgImNvbnRhaW5lckNzcyIsICJhZGFwdENvbnRhaW5lckNzc0NsYXNzIiwgImxhbmd1YWdlIiwgIl9yZXNvbHZlTGFuZ3VhZ2UiLCAiczMiLCAidHJhbnNsYXRpb25zIiwgIl9wcm9jZXNzVHJhbnNsYXRpb25zIiwgImRlYnVnIiwgImFtZExhbmd1YWdlQmFzZSIsICJkcm9wZG93bkF1dG9XaWR0aCIsICJtYXRjaGVyIiwgInNjcm9sbEFmdGVyU2VsZWN0IiwgInNvcnRlciIsICJ0ZW1wbGF0ZVJlc3VsdCIsICJ0ZW1wbGF0ZVNlbGVjdGlvbiIsICJ0aGVtZSIsICJhcHBseUZyb21FbGVtZW50IiwgImlzRW1wdHlPYmplY3QiLCAiaXNQbGFpbk9iamVjdCIsICJ3YXJuIiwgInNldCIsICJjYW1lbENhc2UiLCAiZnJvbUVsZW1lbnQiLCAiZGlyIiwgImF0dHJpYnV0ZXMiLCAibmFtZSIsICJkYXRhc2V0IiwgIl9nZW5lcmF0ZUlkIiwgIl9wbGFjZUNvbnRhaW5lciIsICJfYmluZEFkYXB0ZXJzIiwgIl9yZWdpc3RlckRvbUV2ZW50cyIsICJfcmVnaXN0ZXJEYXRhRXZlbnRzIiwgIl9yZWdpc3RlclNlbGVjdGlvbkV2ZW50cyIsICJfcmVnaXN0ZXJEcm9wZG93bkV2ZW50cyIsICJfcmVnaXN0ZXJSZXN1bHRzRXZlbnRzIiwgIl9yZWdpc3RlckV2ZW50cyIsICJfc3luY0F0dHJpYnV0ZXMiLCAiaW5zZXJ0QWZ0ZXIiLCAiX3Jlc29sdmVXaWR0aCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImMzIiwgIm1hdGNoIiwgIl9zeW5jQSIsICJfc3luY1MiLCAiX3N5bmNTdWJ0cmVlIiwgImF0dGFjaEV2ZW50IiwgIk11dGF0aW9uT2JzZXJ2ZXIiLCAiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsICJNb3pNdXRhdGlvbk9ic2VydmVyIiwgIl9vYnNlcnZlciIsICJvYnNlcnZlIiwgImNoaWxkTGlzdCIsICJzdWJ0cmVlIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAidG9nZ2xlRHJvcGRvd24iLCAiZm9jdXMiLCAiYWx0S2V5IiwgImNsb3NlIiwgIm9wZW4iLCAibm9kZU5hbWUiLCAiYWRkZWROb2RlcyIsICJyZW1vdmVkTm9kZXMiLCAiaGFzRm9jdXMiLCAiZW5hYmxlIiwgImRldGFjaEV2ZW50IiwgImRpc2Nvbm5lY3QiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJyZW1vdmVEYXRhIiwgInQiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy4zOC4xL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjM4LjEvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuMzguMS9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2hpZnQuanMiLCAic3JjL3NlbGVjdDIvc2VsZWN0Mi5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjEnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjEvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCA8PSAxMjEgYW5kIFNhZmFyaSA8PSAxNS40OyBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcblxuLy8gSUU4LVxudmFyIElOQ09SUkVDVF9SRVNVTFQgPSBbXS51bnNoaWZ0KDApICE9PSAxO1xuXG4vLyBWOCB+IENocm9tZSA8IDcxIGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS51bnNoaWZ0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1JFU1VMVCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUudW5zaGlmdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS51bnNoaWZ0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdW5zaGlmdDogZnVuY3Rpb24gdW5zaGlmdChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnQ291bnQpIHtcbiAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgICB2YXIgayA9IGxlbjtcbiAgICAgIHdoaWxlIChrLS0pIHtcbiAgICAgICAgdmFyIHRvID0gayArIGFyZ0NvdW50O1xuICAgICAgICBpZiAoayBpbiBPKSBPW3RvXSA9IE9ba107XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJnQ291bnQ7IGorKykge1xuICAgICAgICBPW2pdID0gYXJndW1lbnRzW2pdO1xuICAgICAgfVxuICAgIH0gcmV0dXJuIHNldEFycmF5TGVuZ3RoKE8sIGxlbiArIGFyZ0NvdW50KTtcbiAgfVxufSk7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCAnLi9zZWxlY3QyLmxlc3MnO1xuXG4hKGZ1bmN0aW9uIChuKSB7XG5cdCdmdW5jdGlvbicgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kXG5cdFx0PyBkZWZpbmUoWydqcXVlcnknXSwgbilcblx0XHQ6IC8qXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9yZXF1aXJlKFwianF1ZXJ5XCIpOnJlcXVpcmUoXCJqcXVlcnlcIikoZSkpLG4odCksdH06Ki8gbihcblx0XHRcdFx0alF1ZXJ5XG5cdFx0XHQpO1xufSkoZnVuY3Rpb24gKHUpIHtcblx0dmFyIGUgPSAoZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKHUgJiYgdS5mbiAmJiB1LmZuLnNlbGVjdDIgJiYgdS5mbi5zZWxlY3QyLmFtZCkgdmFyIGUgPSB1LmZuLnNlbGVjdDIuYW1kO1xuXHRcdFx0dmFyIHQsIG4sIHIsIGgsIG8sIHMsIGYsIGcsIG0sIHYsIHksIF8sIGksIGEsIHc7XG5cdFx0XHRmdW5jdGlvbiBiKGUsIHQpIHtcblx0XHRcdFx0cmV0dXJuIGkuY2FsbChlLCB0KTtcblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIGwoZSwgdCkge1xuXHRcdFx0XHR2YXIgbixcblx0XHRcdFx0XHRyLFxuXHRcdFx0XHRcdGksXG5cdFx0XHRcdFx0byxcblx0XHRcdFx0XHRzLFxuXHRcdFx0XHRcdGEsXG5cdFx0XHRcdFx0bCxcblx0XHRcdFx0XHRjLFxuXHRcdFx0XHRcdHUsXG5cdFx0XHRcdFx0ZCxcblx0XHRcdFx0XHRwLFxuXHRcdFx0XHRcdGggPSB0ICYmIHQuc3BsaXQoJy8nKSxcblx0XHRcdFx0XHRmID0geS5tYXAsXG5cdFx0XHRcdFx0ZyA9IChmICYmIGZbJyonXSkgfHwge307XG5cdFx0XHRcdGlmIChlKSB7XG5cdFx0XHRcdFx0Zm9yIChcblx0XHRcdFx0XHRcdHMgPSAoZSA9IGUuc3BsaXQoJy8nKSkubGVuZ3RoIC0gMSxcblx0XHRcdFx0XHRcdFx0eS5ub2RlSWRDb21wYXQgJiYgdy50ZXN0KGVbc10pICYmIChlW3NdID0gZVtzXS5yZXBsYWNlKHcsICcnKSksXG5cdFx0XHRcdFx0XHRcdCcuJyA9PT0gZVswXS5jaGFyQXQoMCkgJiYgaCAmJiAoZSA9IGguc2xpY2UoMCwgaC5sZW5ndGggLSAxKS5jb25jYXQoZSkpLFxuXHRcdFx0XHRcdFx0XHR1ID0gMDtcblx0XHRcdFx0XHRcdHUgPCBlLmxlbmd0aDtcblx0XHRcdFx0XHRcdHUrK1xuXHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdGlmICgnLicgPT09IChwID0gZVt1XSkpIGUuc3BsaWNlKHUsIDEpLCAodSAtPSAxKTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKCcuLicgPT09IHApIHtcblx0XHRcdFx0XHRcdFx0aWYgKDAgPT09IHUgfHwgKDEgPT09IHUgJiYgJy4uJyA9PT0gZVsyXSkgfHwgJy4uJyA9PT0gZVt1IC0gMV0pIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0XHQwIDwgdSAmJiAoZS5zcGxpY2UodSAtIDEsIDIpLCAodSAtPSAyKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZSA9IGUuam9pbignLycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgoaCB8fCBnKSAmJiBmKSB7XG5cdFx0XHRcdFx0Zm9yICh1ID0gKG4gPSBlLnNwbGl0KCcvJykpLmxlbmd0aDsgMCA8IHU7IHUgLT0gMSkge1xuXHRcdFx0XHRcdFx0aWYgKCgociA9IG4uc2xpY2UoMCwgdSkuam9pbignLycpKSwgaCkpXG5cdFx0XHRcdFx0XHRcdGZvciAoZCA9IGgubGVuZ3RoOyAwIDwgZDsgZCAtPSAxKVxuXHRcdFx0XHRcdFx0XHRcdGlmICgoaSA9IChpID0gZltoLnNsaWNlKDAsIGQpLmpvaW4oJy8nKV0pICYmIGlbcl0pKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQobyA9IGkpLCAoYSA9IHUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKG8pIGJyZWFrO1xuXHRcdFx0XHRcdFx0IWwgJiYgZyAmJiBnW3JdICYmICgobCA9IGdbcl0pLCAoYyA9IHUpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0IW8gJiYgbCAmJiAoKG8gPSBsKSwgKGEgPSBjKSksIG8gJiYgKG4uc3BsaWNlKDAsIGEsIG8pLCAoZSA9IG4uam9pbignLycpKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGU7XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBBKHQsIG4pIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR2YXIgZSA9IGEuY2FsbChhcmd1bWVudHMsIDApO1xuXHRcdFx0XHRcdHJldHVybiAnc3RyaW5nJyAhPSB0eXBlb2YgZVswXSAmJiAxID09PSBlLmxlbmd0aCAmJiBlLnB1c2gobnVsbCksIHMuYXBwbHkoaCwgZS5jb25jYXQoW3QsIG5dKSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiB4KHQpIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0bVt0XSA9IGU7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBEKGUpIHtcblx0XHRcdFx0aWYgKGIodiwgZSkpIHtcblx0XHRcdFx0XHR2YXIgdCA9IHZbZV07XG5cdFx0XHRcdFx0ZGVsZXRlIHZbZV0sIChfW2VdID0gITApLCBvLmFwcGx5KGgsIHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghYihtLCBlKSAmJiAhYihfLCBlKSkgdGhyb3cgbmV3IEVycm9yKCdObyAnICsgZSk7XG5cdFx0XHRcdHJldHVybiBtW2VdO1xuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gYyhlKSB7XG5cdFx0XHRcdHZhciB0LFxuXHRcdFx0XHRcdG4gPSBlID8gZS5pbmRleE9mKCchJykgOiAtMTtcblx0XHRcdFx0cmV0dXJuIC0xIDwgbiAmJiAoKHQgPSBlLnN1YnN0cmluZygwLCBuKSksIChlID0gZS5zdWJzdHJpbmcobiArIDEsIGUubGVuZ3RoKSkpLCBbdCwgZV07XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBTKGUpIHtcblx0XHRcdFx0cmV0dXJuIGUgPyBjKGUpIDogW107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQoZSAmJiBlLnJlcXVpcmVqcykgfHxcblx0XHRcdFx0XHQoZSA/IChuID0gZSkgOiAoZSA9IHt9KSxcblx0XHRcdFx0XHQobSA9IHt9KSxcblx0XHRcdFx0XHQodiA9IHt9KSxcblx0XHRcdFx0XHQoeSA9IHt9KSxcblx0XHRcdFx0XHQoXyA9IHt9KSxcblx0XHRcdFx0XHQoaSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLFxuXHRcdFx0XHRcdChhID0gW10uc2xpY2UpLFxuXHRcdFx0XHRcdCh3ID0gL1xcLmpzJC8pLFxuXHRcdFx0XHRcdChmID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdHZhciBuLFxuXHRcdFx0XHRcdFx0XHRyID0gYyhlKSxcblx0XHRcdFx0XHRcdFx0aSA9IHJbMF0sXG5cdFx0XHRcdFx0XHRcdG8gPSB0WzFdO1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0KGUgPSByWzFdKSxcblx0XHRcdFx0XHRcdFx0aSAmJiAobiA9IEQoKGkgPSBsKGksIG8pKSkpLFxuXHRcdFx0XHRcdFx0XHRpXG5cdFx0XHRcdFx0XHRcdFx0PyAoZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4gJiYgbi5ub3JtYWxpemVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IG4ubm9ybWFsaXplKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBsKGUsIHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pKG8pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBsKGUsIG8pKVxuXHRcdFx0XHRcdFx0XHRcdDogKChpID0gKHIgPSBjKChlID0gbChlLCBvKSkpKVswXSksIChlID0gclsxXSksIGkgJiYgKG4gPSBEKGkpKSksXG5cdFx0XHRcdFx0XHRcdHtmOiBpID8gaSArICchJyArIGUgOiBlLCBuOiBlLCBwcjogaSwgcDogbn1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0KGcgPSB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gQShlKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRleHBvcnRzOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IG1bZV07XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2b2lkIDAgIT09IHQgPyB0IDogKG1bZV0gPSB7fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kdWxlOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGlkOiBlLFxuXHRcdFx0XHRcdFx0XHRcdHVyaTogJycsXG5cdFx0XHRcdFx0XHRcdFx0ZXhwb3J0czogbVtlXSxcblx0XHRcdFx0XHRcdFx0XHRjb25maWc6IChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuICh5ICYmIHkuY29uZmlnICYmIHkuY29uZmlnW2VdKSB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0fSkoZSksXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdChvID0gZnVuY3Rpb24gKGUsIHQsIG4sIHIpIHtcblx0XHRcdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdFx0XHRvLFxuXHRcdFx0XHRcdFx0XHRzLFxuXHRcdFx0XHRcdFx0XHRhLFxuXHRcdFx0XHRcdFx0XHRsLFxuXHRcdFx0XHRcdFx0XHRjLFxuXHRcdFx0XHRcdFx0XHR1LFxuXHRcdFx0XHRcdFx0XHRkID0gW10sXG5cdFx0XHRcdFx0XHRcdHAgPSB0eXBlb2Ygbjtcblx0XHRcdFx0XHRcdGlmICgoKGMgPSBTKChyID0gciB8fCBlKSkpLCAndW5kZWZpbmVkJyA9PSBwIHx8ICdmdW5jdGlvbicgPT0gcCkpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChcblx0XHRcdFx0XHRcdFx0XHR0ID0gIXQubGVuZ3RoICYmIG4ubGVuZ3RoID8gWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10gOiB0LCBsID0gMDtcblx0XHRcdFx0XHRcdFx0XHRsIDwgdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0bCArPSAxXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRpZiAoJ3JlcXVpcmUnID09PSAobyA9IChhID0gZih0W2xdLCBjKSkuZikpIGRbbF0gPSBnLnJlcXVpcmUoZSk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoJ2V4cG9ydHMnID09PSBvKSAoZFtsXSA9IGcuZXhwb3J0cyhlKSksICh1ID0gITApO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKCdtb2R1bGUnID09PSBvKSBpID0gZFtsXSA9IGcubW9kdWxlKGUpO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGIobSwgbykgfHwgYih2LCBvKSB8fCBiKF8sIG8pKSBkW2xdID0gRChvKTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghYS5wKSB0aHJvdyBuZXcgRXJyb3IoZSArICcgbWlzc2luZyAnICsgbyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhLnAubG9hZChhLm4sIEEociwgITApLCB4KG8pLCB7fSksIChkW2xdID0gbVtvXSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQocyA9IG4gPyBuLmFwcGx5KG1bZV0sIGQpIDogdm9pZCAwKSxcblx0XHRcdFx0XHRcdFx0XHRlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQoaSAmJiBpLmV4cG9ydHMgIT09IGggJiYgaS5leHBvcnRzICE9PSBtW2VdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gKG1bZV0gPSBpLmV4cG9ydHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogKHMgPT09IGggJiYgdSkgfHwgKG1bZV0gPSBzKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgZSAmJiAobVtlXSA9IG4pO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCh0ID1cblx0XHRcdFx0XHRcdG4gPVxuXHRcdFx0XHRcdFx0cyA9XG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIChlLCB0LCBuLCByLCBpKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCdzdHJpbmcnID09IHR5cGVvZiBlKSByZXR1cm4gZ1tlXSA/IGdbZV0odCkgOiBEKGYoZSwgUyh0KSkuZik7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFlLnNwbGljZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCgoeSA9IGUpLmRlcHMgJiYgcyh5LmRlcHMsIHkuY2FsbGJhY2spLCAhdCkpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdHQuc3BsaWNlID8gKChlID0gdCksICh0ID0gbiksIChuID0gbnVsbCkpIDogKGUgPSBoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdCh0ID0gdCB8fCBmdW5jdGlvbiAoKSB7fSksXG5cdFx0XHRcdFx0XHRcdFx0XHQnZnVuY3Rpb24nID09IHR5cGVvZiBuICYmICgobiA9IHIpLCAociA9IGkpKSxcblx0XHRcdFx0XHRcdFx0XHRcdHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBvKGgsIGUsIHQsIG4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvKGgsIGUsIHQsIG4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0sIDQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0c1xuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdChzLmNvbmZpZyA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcyhlKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHQodC5fZGVmaW5lZCA9IG0pLFxuXHRcdFx0XHRcdCgociA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHRpZiAoJ3N0cmluZycgIT0gdHlwZW9mIGUpXG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignU2VlIGFsbW9uZCBSRUFETUU6IGluY29ycmVjdCBtb2R1bGUgYnVpbGQsIG5vIG1vZHVsZSBuYW1lJyk7XG5cdFx0XHRcdFx0XHR0LnNwbGljZSB8fCAoKG4gPSB0KSwgKHQgPSBbXSkpLCBiKG0sIGUpIHx8IGIodiwgZSkgfHwgKHZbZV0gPSBbZSwgdCwgbl0pO1xuXHRcdFx0XHRcdH0pLmFtZCA9IHtqUXVlcnk6ICEwfSksXG5cdFx0XHRcdFx0KGUucmVxdWlyZWpzID0gdCksXG5cdFx0XHRcdFx0KGUucmVxdWlyZSA9IG4pLFxuXHRcdFx0XHRcdChlLmRlZmluZSA9IHIpKSxcblx0XHRcdFx0ZS5kZWZpbmUoJ2FsbW9uZCcsIGZ1bmN0aW9uICgpIHt9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ2pxdWVyeScsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0dmFyIGUgPSB1IHx8ICQ7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdG51bGwgPT0gZSAmJlxuXHRcdFx0XHRcdFx0XHRjb25zb2xlICYmXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IgJiZcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogQW4gaW5zdGFuY2Ugb2YgalF1ZXJ5IG9yIGEgalF1ZXJ5LWNvbXBhdGlibGUgbGlicmFyeSB3YXMgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhhdCB5b3UgYXJlIGluY2x1ZGluZyBqUXVlcnkgYmVmb3JlIFNlbGVjdDIgb24geW91ciB3ZWIgcGFnZS4nXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL3V0aWxzJywgWydqcXVlcnknXSwgZnVuY3Rpb24gKG8pIHtcblx0XHRcdFx0XHR2YXIgaSA9IHt9O1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHUoZSkge1xuXHRcdFx0XHRcdFx0dmFyIHQgPSBlLnByb3RvdHlwZSxcblx0XHRcdFx0XHRcdFx0biA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgciBpbiB0KSB7XG5cdFx0XHRcdFx0XHRcdCdmdW5jdGlvbicgPT0gdHlwZW9mIHRbcl0gJiYgJ2NvbnN0cnVjdG9yJyAhPT0gciAmJiBuLnB1c2gocik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gbjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KGkuRXh0ZW5kID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdHZhciBuID0ge30uaGFzT3duUHJvcGVydHk7XG5cdFx0XHRcdFx0XHRmdW5jdGlvbiByKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnN0cnVjdG9yID0gZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvciAodmFyIGkgaW4gdCkgbi5jYWxsKHQsIGkpICYmIChlW2ldID0gdFtpXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHIucHJvdG90eXBlID0gdC5wcm90b3R5cGUpLCAoZS5wcm90b3R5cGUgPSBuZXcgcigpKSwgKGUuX19zdXBlcl9fID0gdC5wcm90b3R5cGUpLCBlO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuRGVjb3JhdGUgPSBmdW5jdGlvbiAociwgaSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IHUoaSksXG5cdFx0XHRcdFx0XHRcdFx0dCA9IHUocik7XG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIG8oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBBcnJheS5wcm90b3R5cGUudW5zaGlmdCxcblx0XHRcdFx0XHRcdFx0XHRcdHQgPSBpLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5sZW5ndGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRuID0gci5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cdFx0XHRcdFx0XHRcdFx0MCA8IHQgJiYgKGUuY2FsbChhcmd1bWVudHMsIHIucHJvdG90eXBlLmNvbnN0cnVjdG9yKSwgKG4gPSBpLnByb3RvdHlwZS5jb25zdHJ1Y3RvcikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdChpLmRpc3BsYXlOYW1lID0gci5kaXNwbGF5TmFtZSksXG5cdFx0XHRcdFx0XHRcdFx0KG8ucHJvdG90eXBlID0gbmV3IChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbnN0cnVjdG9yID0gbztcblx0XHRcdFx0XHRcdFx0XHR9KSgpKTtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IDA7IG4gPCB0Lmxlbmd0aDsgbisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHMgPSB0W25dO1xuXHRcdFx0XHRcdFx0XHRcdG8ucHJvdG90eXBlW3NdID0gci5wcm90b3R5cGVbc107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gYShlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBmdW5jdGlvbiAoKSB7fTtcblx0XHRcdFx0XHRcdFx0XHRlIGluIG8ucHJvdG90eXBlICYmICh0ID0gby5wcm90b3R5cGVbZV0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuID0gaS5wcm90b3R5cGVbZV07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKGFyZ3VtZW50cywgdCksIG4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSAwOyBsIDwgZS5sZW5ndGg7IGwrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBjID0gZVtsXTtcblx0XHRcdFx0XHRcdFx0XHRvLnByb3RvdHlwZVtjXSA9IGEoYyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIG87XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKCkge1xuXHRcdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMgPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdCh0aGlzLmxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzIHx8IHt9KSxcblx0XHRcdFx0XHRcdFx0ZSBpbiB0aGlzLmxpc3RlbmVycyA/IHRoaXMubGlzdGVuZXJzW2VdLnB1c2godCkgOiAodGhpcy5saXN0ZW5lcnNbZV0gPSBbdF0pO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IEFycmF5LnByb3RvdHlwZS5zbGljZSxcblx0XHRcdFx0XHRcdFx0XHRuID0gdC5jYWxsKGFyZ3VtZW50cywgMSk7XG5cdFx0XHRcdFx0XHRcdCh0aGlzLmxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzIHx8IHt9KSxcblx0XHRcdFx0XHRcdFx0XHRudWxsID09IG4gJiYgKG4gPSBbXSksXG5cdFx0XHRcdFx0XHRcdFx0MCA9PT0gbi5sZW5ndGggJiYgbi5wdXNoKHt9KSxcblx0XHRcdFx0XHRcdFx0XHQoblswXS5fdHlwZSA9IGUpIGluIHRoaXMubGlzdGVuZXJzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1tlXSwgdC5jYWxsKGFyZ3VtZW50cywgMSkpLFxuXHRcdFx0XHRcdFx0XHRcdCcqJyBpbiB0aGlzLmxpc3RlbmVycyAmJiB0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1snKiddLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IDAsIHIgPSBlLmxlbmd0aDsgbiA8IHI7IG4rKykgZVtuXS5hcHBseSh0aGlzLCB0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuT2JzZXJ2YWJsZSA9IGUpLFxuXHRcdFx0XHRcdFx0KGkuZ2VuZXJhdGVDaGFycyA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIHQgPSAnJywgbiA9IDA7IG4gPCBlOyBuKyspIHtcblx0XHRcdFx0XHRcdFx0XHR0ICs9IE1hdGguZmxvb3IoMzYgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHQ7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChpLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGUuYXBwbHkodCwgYXJndW1lbnRzKTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuX2NvbnZlcnREYXRhID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdCBpbiBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0LnNwbGl0KCctJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRyID0gZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoMSAhPT0gbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbyA9IG5baV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdChvID0gby5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSArIG8uc3Vic3RyaW5nKDEpKSBpbiByIHx8IChyW29dID0ge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGkgPT0gbi5sZW5ndGggLSAxICYmIChyW29dID0gZVt0XSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHIgPSByW29dKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlW3RdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuaGFzU2Nyb2xsID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSBvKHQpLFxuXHRcdFx0XHRcdFx0XHRcdHIgPSB0LnN0eWxlLm92ZXJmbG93WCxcblx0XHRcdFx0XHRcdFx0XHRpID0gdC5zdHlsZS5vdmVyZmxvd1k7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0KHIgIT09IGkgfHwgKCdoaWRkZW4nICE9PSBpICYmICd2aXNpYmxlJyAhPT0gaSkpICYmXG5cdFx0XHRcdFx0XHRcdFx0KCdzY3JvbGwnID09PSByIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQnc2Nyb2xsJyA9PT0gaSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0bi5pbm5lckhlaWdodCgpIDwgdC5zY3JvbGxIZWlnaHQgfHxcblx0XHRcdFx0XHRcdFx0XHRcdG4uaW5uZXJXaWR0aCgpIDwgdC5zY3JvbGxXaWR0aClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuZXNjYXBlTWFya3VwID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0J1xcXFwnOiAnJiM5MjsnLFxuXHRcdFx0XHRcdFx0XHRcdCcmJzogJyZhbXA7Jyxcblx0XHRcdFx0XHRcdFx0XHQnPCc6ICcmbHQ7Jyxcblx0XHRcdFx0XHRcdFx0XHQnPic6ICcmZ3Q7Jyxcblx0XHRcdFx0XHRcdFx0XHQnXCInOiAnJnF1b3Q7Jyxcblx0XHRcdFx0XHRcdFx0XHRcIidcIjogJyYjMzk7Jyxcblx0XHRcdFx0XHRcdFx0XHQnLyc6ICcmIzQ3OycsXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHJldHVybiAnc3RyaW5nJyAhPSB0eXBlb2YgZVxuXHRcdFx0XHRcdFx0XHRcdD8gZVxuXHRcdFx0XHRcdFx0XHRcdDogU3RyaW5nKGUpLnJlcGxhY2UoL1smPD5cIidcXC9cXFxcXS9nLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdFtlXTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoaS5hcHBlbmRNYW55ID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCcxLjcnID09PSBvLmZuLmpxdWVyeS5zdWJzdHIoMCwgMykpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IG8oKTtcblx0XHRcdFx0XHRcdFx0XHRvLm1hcCh0LCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0biA9IG4uYWRkKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0KHQgPSBuKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlLmFwcGVuZCh0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGkuX19jYWNoZSA9IHt9KTtcblx0XHRcdFx0XHR2YXIgbiA9IDA7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChpLkdldFVuaXF1ZUVsZW1lbnRJZCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi1pZCcpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgPT0gdCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KGUuaWRcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyAoKHQgPSBlLmlkKSwgZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi1pZCcsIHQpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IChlLnNldEF0dHJpYnV0ZSgnZGF0YS1zZWxlY3QyLWlkJywgKytuKSwgKHQgPSBuLnRvU3RyaW5nKCkpKSksXG5cdFx0XHRcdFx0XHRcdFx0dFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoaS5TdG9yZURhdGEgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IGkuR2V0VW5pcXVlRWxlbWVudElkKGUpO1xuXHRcdFx0XHRcdFx0XHRpLl9fY2FjaGVbcl0gfHwgKGkuX19jYWNoZVtyXSA9IHt9KSwgKGkuX19jYWNoZVtyXVt0XSA9IG4pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoaS5HZXREYXRhID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSBpLkdldFVuaXF1ZUVsZW1lbnRJZChlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRcblx0XHRcdFx0XHRcdFx0XHQ/IGkuX19jYWNoZVtuXSAmJiBudWxsICE9IGkuX19jYWNoZVtuXVt0XVxuXHRcdFx0XHRcdFx0XHRcdFx0PyBpLl9fY2FjaGVbbl1bdF1cblx0XHRcdFx0XHRcdFx0XHRcdDogbyhlKS5kYXRhKHQpXG5cdFx0XHRcdFx0XHRcdFx0OiBpLl9fY2FjaGVbbl07XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChpLlJlbW92ZURhdGEgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IGkuR2V0VW5pcXVlRWxlbWVudElkKGUpO1xuXHRcdFx0XHRcdFx0XHRudWxsICE9IGkuX19jYWNoZVt0XSAmJiBkZWxldGUgaS5fX2NhY2hlW3RdLCBlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1zZWxlY3QyLWlkJyk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvcmVzdWx0cycsIFsnanF1ZXJ5JywgJy4vdXRpbHMnXSwgZnVuY3Rpb24gKGgsIGYpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiByKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdCh0aGlzLiRlbGVtZW50ID0gZSksICh0aGlzLmRhdGEgPSBuKSwgKHRoaXMub3B0aW9ucyA9IHQpLCByLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0Zi5FeHRlbmQociwgZi5PYnNlcnZhYmxlKSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gaCgnPHVsIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zXCIgcm9sZT1cImxpc3Rib3hcIj48L3VsPicpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5nZXQoJ211bHRpcGxlJykgJiYgZS5hdHRyKCdhcmlhLW11bHRpc2VsZWN0YWJsZScsICd0cnVlJyksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuJHJlc3VsdHMgPSBlKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMuZW1wdHkoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmRpc3BsYXlNZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhcigpLCB0aGlzLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gaCgnPGxpIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIj48L2xpPicpLFxuXHRcdFx0XHRcdFx0XHRcdHIgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQoZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0bi5hcHBlbmQodChyKGUuYXJncykpKSxcblx0XHRcdFx0XHRcdFx0XHQoblswXS5jbGFzc05hbWUgKz0gJyBzZWxlY3QyLXJlc3VsdHNfX21lc3NhZ2UnKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRyZXN1bHRzLmFwcGVuZChuKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmhpZGVNZXNzYWdlcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kcmVzdWx0cy5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19tZXNzYWdlJykucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVMb2FkaW5nKCk7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gW107XG5cdFx0XHRcdFx0XHRcdGlmIChudWxsICE9IGUucmVzdWx0cyAmJiAwICE9PSBlLnJlc3VsdHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZS5yZXN1bHRzID0gdGhpcy5zb3J0KGUucmVzdWx0cyk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IDA7IG4gPCBlLnJlc3VsdHMubGVuZ3RoOyBuKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByID0gZS5yZXN1bHRzW25dLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpID0gdGhpcy5vcHRpb24ocik7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LnB1c2goaSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMuYXBwZW5kKHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHQwID09PSB0aGlzLiRyZXN1bHRzLmNoaWxkcmVuKCkubGVuZ3RoICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHttZXNzYWdlOiAnbm9SZXN1bHRzJ30pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR0LmZpbmQoJy5zZWxlY3QyLXJlc3VsdHMnKS5hcHBlbmQoZSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5zb3J0ID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoJ3NvcnRlcicpKGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuaGlnaGxpZ2h0Rmlyc3RJdGVtID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IHRoaXMuJHJlc3VsdHMuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJyksXG5cdFx0XHRcdFx0XHRcdFx0dCA9IGUuZmlsdGVyKCdbYXJpYS1zZWxlY3RlZD10cnVlXScpO1xuXHRcdFx0XHRcdFx0XHQwIDwgdC5sZW5ndGggPyB0LmZpcnN0KCkudHJpZ2dlcignbW91c2VlbnRlcicpIDogZS5maXJzdCgpLnRyaWdnZXIoJ21vdXNlZW50ZXInKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVuc3VyZUhpZ2hsaWdodFZpc2libGUoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLnNldENsYXNzZXMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gdGhpcztcblx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhLmN1cnJlbnQoZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgciA9IGgubWFwKGUsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZS5pZC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHQuJHJlc3VsdHMuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZSA9IGgodGhpcyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHQgPSBmLkdldERhdGEodGhpcywgJ2RhdGEnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0biA9ICcnICsgdC5pZDtcblx0XHRcdFx0XHRcdFx0XHRcdChudWxsICE9IHQuZWxlbWVudCAmJiB0LmVsZW1lbnQuc2VsZWN0ZWQpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQobnVsbCA9PSB0LmVsZW1lbnQgJiYgLTEgPCBoLmluQXJyYXkobiwgcikpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gZS5hdHRyKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IGUuYXR0cignYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLnNob3dMb2FkaW5nID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5oaWRlTG9hZGluZygpO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkOiAhMCxcblx0XHRcdFx0XHRcdFx0XHRcdGxvYWRpbmc6ICEwLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdzZWFyY2hpbmcnKShlKSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdG4gPSB0aGlzLm9wdGlvbih0KTtcblx0XHRcdFx0XHRcdFx0KG4uY2xhc3NOYW1lICs9ICcgbG9hZGluZy1yZXN1bHRzJyksIHRoaXMuJHJlc3VsdHMucHJlcGVuZChuKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmhpZGVMb2FkaW5nID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRyZXN1bHRzLmZpbmQoJy5sb2FkaW5nLXJlc3VsdHMnKS5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLm9wdGlvbiA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcblx0XHRcdFx0XHRcdFx0dC5jbGFzc05hbWUgPSAnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24nO1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHtyb2xlOiAnb3B0aW9uJywgJ2FyaWEtc2VsZWN0ZWQnOiAnZmFsc2UnfSxcblx0XHRcdFx0XHRcdFx0XHRyID1cblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgaW4gKCgobnVsbCAhPSBlLmVsZW1lbnQgJiYgci5jYWxsKGUuZWxlbWVudCwgJzpkaXNhYmxlZCcpKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChudWxsID09IGUuZWxlbWVudCAmJiBlLmRpc2FibGVkKSkgJiZcblx0XHRcdFx0XHRcdFx0XHQoZGVsZXRlIG5bJ2FyaWEtc2VsZWN0ZWQnXSwgKG5bJ2FyaWEtZGlzYWJsZWQnXSA9ICd0cnVlJykpLFxuXHRcdFx0XHRcdFx0XHRudWxsID09IGUuaWQgJiYgZGVsZXRlIG5bJ2FyaWEtc2VsZWN0ZWQnXSxcblx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLl9yZXN1bHRJZCAmJiAodC5pZCA9IGUuX3Jlc3VsdElkKSxcblx0XHRcdFx0XHRcdFx0ZS50aXRsZSAmJiAodC50aXRsZSA9IGUudGl0bGUpLFxuXHRcdFx0XHRcdFx0XHRlLmNoaWxkcmVuICYmICgobi5yb2xlID0gJ2dyb3VwJyksIChuWydhcmlhLWxhYmVsJ10gPSBlLnRleHQpLCBkZWxldGUgblsnYXJpYS1zZWxlY3RlZCddKSxcblx0XHRcdFx0XHRcdFx0bikpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbyA9IG5baV07XG5cdFx0XHRcdFx0XHRcdFx0dC5zZXRBdHRyaWJ1dGUoaSwgbyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGUuY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcyA9IGgodCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Ryb25nJyk7XG5cdFx0XHRcdFx0XHRcdFx0YS5jbGFzc05hbWUgPSAnc2VsZWN0Mi1yZXN1bHRzX19ncm91cCc7XG5cdFx0XHRcdFx0XHRcdFx0aChhKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlKGUsIGEpO1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGwgPSBbXSwgYyA9IDA7IGMgPCBlLmNoaWxkcmVuLmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdSA9IGUuY2hpbGRyZW5bY10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGQgPSB0aGlzLm9wdGlvbih1KTtcblx0XHRcdFx0XHRcdFx0XHRcdGwucHVzaChkKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHAgPSBoKCc8dWw+PC91bD4nLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzczogJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9ucyBzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMtLW5lc3RlZCcsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0cC5hcHBlbmQobCksIHMuYXBwZW5kKGEpLCBzLmFwcGVuZChwKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHRoaXMudGVtcGxhdGUoZSwgdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmLlN0b3JlRGF0YSh0LCAnZGF0YScsIGUpLCB0O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICh0LCBlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBsID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRuID0gdC5pZCArICctcmVzdWx0cyc7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMuYXR0cignaWQnLCBuKSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOmFsbCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsLmNsZWFyKCksIGwuYXBwZW5kKGUuZGF0YSksIHQuaXNPcGVuKCkgJiYgKGwuc2V0Q2xhc3NlcygpLCBsLmhpZ2hsaWdodEZpcnN0SXRlbSgpKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOmFwcGVuZCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsLmFwcGVuZChlLmRhdGEpLCB0LmlzT3BlbigpICYmIGwuc2V0Q2xhc3NlcygpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3F1ZXJ5JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGwuaGlkZU1lc3NhZ2VzKCksIGwuc2hvd0xvYWRpbmcoZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dC5pc09wZW4oKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQobC5zZXRDbGFzc2VzKCksIGwub3B0aW9ucy5nZXQoJ3Njcm9sbEFmdGVyU2VsZWN0JykgJiYgbC5oaWdobGlnaHRGaXJzdEl0ZW0oKSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigndW5zZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LmlzT3BlbigpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChsLnNldENsYXNzZXMoKSwgbC5vcHRpb25zLmdldCgnc2Nyb2xsQWZ0ZXJTZWxlY3QnKSAmJiBsLmhpZ2hsaWdodEZpcnN0SXRlbSgpKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bC4kcmVzdWx0cy5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bC4kcmVzdWx0cy5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsLnNldENsYXNzZXMoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bC5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsLiRyZXN1bHRzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bC4kcmVzdWx0cy5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGwuJHJlc3VsdHMucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncmVzdWx0czp0b2dnbGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZSA9IGwuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHQwICE9PSBlLmxlbmd0aCAmJiBlLnRyaWdnZXIoJ21vdXNldXAnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOnNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlID0gbC5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICgwICE9PSBlLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IGYuR2V0RGF0YShlWzBdLCAnZGF0YScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQndHJ1ZScgPT0gZS5hdHRyKCdhcmlhLXNlbGVjdGVkJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGwudHJpZ2dlcignY2xvc2UnLCB7fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IGwudHJpZ2dlcignc2VsZWN0Jywge2RhdGE6IHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOnByZXZpb3VzJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBsLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ID0gbC4kcmVzdWx0cy5maW5kKCdbYXJpYS1zZWxlY3RlZF0nKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0biA9IHQuaW5kZXgoZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIShuIDw9IDApKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByID0gbiAtIDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAgPT09IGUubGVuZ3RoICYmIChyID0gMCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpID0gdC5lcShyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aS50cmlnZ2VyKCdtb3VzZWVudGVyJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0gbC4kcmVzdWx0cy5vZmZzZXQoKS50b3AsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cyA9IGkub2Zmc2V0KCkudG9wLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGEgPSBsLiRyZXN1bHRzLnNjcm9sbFRvcCgpICsgKHMgLSBvKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCA9PT0gciA/IGwuJHJlc3VsdHMuc2Nyb2xsVG9wKDApIDogcyAtIG8gPCAwICYmIGwuJHJlc3VsdHMuc2Nyb2xsVG9wKGEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3Jlc3VsdHM6bmV4dCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlID0gbC5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dCA9IGwuJHJlc3VsdHMuZmluZCgnW2FyaWEtc2VsZWN0ZWRdJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4gPSB0LmluZGV4KGUpICsgMTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghKG4gPj0gdC5sZW5ndGgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByID0gdC5lcShuKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci50cmlnZ2VyKCdtb3VzZWVudGVyJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpID0gbC4kcmVzdWx0cy5vZmZzZXQoKS50b3AgKyBsLiRyZXN1bHRzLm91dGVySGVpZ2h0KCExKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvID0gci5vZmZzZXQoKS50b3AgKyByLm91dGVySGVpZ2h0KCExKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzID0gbC4kcmVzdWx0cy5zY3JvbGxUb3AoKSArIG8gLSBpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQwID09PSBuID8gbC4kcmVzdWx0cy5zY3JvbGxUb3AoMCkgOiBpIDwgbyAmJiBsLiRyZXN1bHRzLnNjcm9sbFRvcChzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOmZvY3VzJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGUuZWxlbWVudC5hZGRDbGFzcygnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncmVzdWx0czptZXNzYWdlJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGwuZGlzcGxheU1lc3NhZ2UoZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0aC5mbi5tb3VzZXdoZWVsICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRyZXN1bHRzLm9uKCdtb3VzZXdoZWVsJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBsLiRyZXN1bHRzLnNjcm9sbFRvcCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG4gPSBsLiRyZXN1bHRzLmdldCgwKS5zY3JvbGxIZWlnaHQgLSB0ICsgZS5kZWx0YVksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ciA9IDAgPCBlLmRlbHRhWSAmJiB0IC0gZS5kZWx0YVkgPD0gMCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpID0gZS5kZWx0YVkgPCAwICYmIG4gPD0gbC4kcmVzdWx0cy5oZWlnaHQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKGwuJHJlc3VsdHMuc2Nyb2xsVG9wKDApLCBlLnByZXZlbnREZWZhdWx0KCksIGUuc3RvcFByb3BhZ2F0aW9uKCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQobC4kcmVzdWx0cy5zY3JvbGxUb3AoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGwuJHJlc3VsdHMuZ2V0KDApLnNjcm9sbEhlaWdodCAtIGwuJHJlc3VsdHMuaGVpZ2h0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMub24oJ21vdXNldXAnLCAnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gaCh0aGlzKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0biA9IGYuR2V0RGF0YSh0aGlzLCAnZGF0YScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0J3RydWUnICE9PSB0LmF0dHIoJ2FyaWEtc2VsZWN0ZWQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGwudHJpZ2dlcignc2VsZWN0Jywge29yaWdpbmFsRXZlbnQ6IGUsIGRhdGE6IG59KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IGwub3B0aW9ucy5nZXQoJ211bHRpcGxlJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGwudHJpZ2dlcigndW5zZWxlY3QnLCB7b3JpZ2luYWxFdmVudDogZSwgZGF0YTogbn0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBsLnRyaWdnZXIoJ2Nsb3NlJywge30pO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHJlc3VsdHMub24oJ21vdXNlZW50ZXInLCAnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gZi5HZXREYXRhKHRoaXMsICdkYXRhJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRsLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLnJlbW92ZUNsYXNzKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bC50cmlnZ2VyKCdyZXN1bHRzOmZvY3VzJywge2RhdGE6IHQsIGVsZW1lbnQ6IGgodGhpcyl9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmdldEhpZ2hsaWdodGVkUmVzdWx0cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuJHJlc3VsdHMuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCcpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kcmVzdWx0cy5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmVuc3VyZUhpZ2hsaWdodFZpc2libGUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gdGhpcy5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtcblx0XHRcdFx0XHRcdFx0aWYgKDAgIT09IGUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSB0aGlzLiRyZXN1bHRzLmZpbmQoJ1thcmlhLXNlbGVjdGVkXScpLmluZGV4KGUpLFxuXHRcdFx0XHRcdFx0XHRcdFx0biA9IHRoaXMuJHJlc3VsdHMub2Zmc2V0KCkudG9wLFxuXHRcdFx0XHRcdFx0XHRcdFx0ciA9IGUub2Zmc2V0KCkudG9wLFxuXHRcdFx0XHRcdFx0XHRcdFx0aSA9IHRoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyAociAtIG4pLFxuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHIgLSBuO1xuXHRcdFx0XHRcdFx0XHRcdChpIC09IDIgKiBlLm91dGVySGVpZ2h0KCExKSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0IDw9IDJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcCgwKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IChvID4gdGhpcy4kcmVzdWx0cy5vdXRlckhlaWdodCgpIHx8IG8gPCAwKSAmJiB0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcChpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUudGVtcGxhdGUgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXMub3B0aW9ucy5nZXQoJ3RlbXBsYXRlUmVzdWx0JyksXG5cdFx0XHRcdFx0XHRcdFx0ciA9IHRoaXMub3B0aW9ucy5nZXQoJ2VzY2FwZU1hcmt1cCcpLFxuXHRcdFx0XHRcdFx0XHRcdGkgPSBuKGUsIHQpO1xuXHRcdFx0XHRcdFx0XHRudWxsID09IGlcblx0XHRcdFx0XHRcdFx0XHQ/ICh0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXG5cdFx0XHRcdFx0XHRcdFx0OiAnc3RyaW5nJyA9PSB0eXBlb2YgaVxuXHRcdFx0XHRcdFx0XHRcdFx0PyAodC5pbm5lckhUTUwgPSByKGkpKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBoKHQpLmFwcGVuZChpKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0clxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9rZXlzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0QkFDS1NQQUNFOiA4LFxuXHRcdFx0XHRcdFx0VEFCOiA5LFxuXHRcdFx0XHRcdFx0RU5URVI6IDEzLFxuXHRcdFx0XHRcdFx0U0hJRlQ6IDE2LFxuXHRcdFx0XHRcdFx0Q1RSTDogMTcsXG5cdFx0XHRcdFx0XHRBTFQ6IDE4LFxuXHRcdFx0XHRcdFx0RVNDOiAyNyxcblx0XHRcdFx0XHRcdFNQQUNFOiAzMixcblx0XHRcdFx0XHRcdFBBR0VfVVA6IDMzLFxuXHRcdFx0XHRcdFx0UEFHRV9ET1dOOiAzNCxcblx0XHRcdFx0XHRcdEVORDogMzUsXG5cdFx0XHRcdFx0XHRIT01FOiAzNixcblx0XHRcdFx0XHRcdExFRlQ6IDM3LFxuXHRcdFx0XHRcdFx0VVA6IDM4LFxuXHRcdFx0XHRcdFx0UklHSFQ6IDM5LFxuXHRcdFx0XHRcdFx0RE9XTjogNDAsXG5cdFx0XHRcdFx0XHRERUxFVEU6IDQ2LFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vYmFzZScsIFsnanF1ZXJ5JywgJy4uL3V0aWxzJywgJy4uL2tleXMnXSwgZnVuY3Rpb24gKG4sIHIsIGkpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBvKGUsIHQpIHtcblx0XHRcdFx0XHRcdCh0aGlzLiRlbGVtZW50ID0gZSksICh0aGlzLm9wdGlvbnMgPSB0KSwgby5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdHIuRXh0ZW5kKG8sIHIuT2JzZXJ2YWJsZSksXG5cdFx0XHRcdFx0XHQoby5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IG4oXG5cdFx0XHRcdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25cIiByb2xlPVwiY29tYm9ib3hcIiAgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj48L3NwYW4+J1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLl90YWJpbmRleCA9IDApLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gci5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnKVxuXHRcdFx0XHRcdFx0XHRcdFx0PyAodGhpcy5fdGFiaW5kZXggPSByLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwgJ29sZC10YWJpbmRleCcpKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBudWxsICE9IHRoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQodGhpcy5fdGFiaW5kZXggPSB0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JykpLFxuXHRcdFx0XHRcdFx0XHRcdGUuYXR0cigndGl0bGUnLCB0aGlzLiRlbGVtZW50LmF0dHIoJ3RpdGxlJykpLFxuXHRcdFx0XHRcdFx0XHRcdGUuYXR0cigndGFiaW5kZXgnLCB0aGlzLl90YWJpbmRleCksXG5cdFx0XHRcdFx0XHRcdFx0ZS5hdHRyKCdhcmlhLWRpc2FibGVkJywgJ2ZhbHNlJyksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuJHNlbGVjdGlvbiA9IGUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChvLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdHIgPSBlLmlkICsgJy1yZXN1bHRzJztcblx0XHRcdFx0XHRcdFx0KHRoaXMuY29udGFpbmVyID0gZSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLnRyaWdnZXIoJ2ZvY3VzJywgZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdibHVyJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG4uX2hhbmRsZUJsdXIoZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG4udHJpZ2dlcigna2V5cHJlc3MnLCBlKSwgZS53aGljaCA9PT0gaS5TUEFDRSAmJiBlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24uYXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgZS5kYXRhLl9yZXN1bHRJZCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5vbignc2VsZWN0aW9uOnVwZGF0ZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLnVwZGF0ZShlLmRhdGEpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24uYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4uJHNlbGVjdGlvbi5hdHRyKCdhcmlhLW93bnMnLCByKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bi5fYXR0YWNoQ2xvc2VIYW5kbGVyKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bi4kc2VsZWN0aW9uLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cignYXJpYS1vd25zJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4uJHNlbGVjdGlvbi50cmlnZ2VyKCdmb2N1cycpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLl9kZXRhY2hDbG9zZUhhbmRsZXIoZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4Jywgbi5fdGFiaW5kZXgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24uYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUub24oJ2Rpc2FibGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCAnLTEnKSwgbi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoby5wcm90b3R5cGUuX2hhbmRsZUJsdXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IHQuJHNlbGVjdGlvblswXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0bi5jb250YWlucyh0LiRzZWxlY3Rpb25bMF0sIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0LnRyaWdnZXIoJ2JsdXInLCBlKTtcblx0XHRcdFx0XHRcdFx0fSwgMSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChvLnByb3RvdHlwZS5fYXR0YWNoQ2xvc2VIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0bihkb2N1bWVudC5ib2R5KS5vbignbW91c2Vkb3duLnNlbGVjdDIuJyArIGUuaWQsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBuKGUudGFyZ2V0KS5jbG9zZXN0KCcuc2VsZWN0MicpO1xuXHRcdFx0XHRcdFx0XHRcdG4oJy5zZWxlY3QyLnNlbGVjdDItY29udGFpbmVyLS1vcGVuJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzICE9IHRbMF0gJiYgci5HZXREYXRhKHRoaXMsICdlbGVtZW50Jykuc2VsZWN0MignY2xvc2UnKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChvLnByb3RvdHlwZS5fZGV0YWNoQ2xvc2VIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0bihkb2N1bWVudC5ib2R5KS5vZmYoJ21vdXNlZG93bi5zZWxlY3QyLicgKyBlLmlkKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG8ucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dC5maW5kKCcuc2VsZWN0aW9uJykuYXBwZW5kKGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoby5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fZGV0YWNoQ2xvc2VIYW5kbGVyKHRoaXMuY29udGFpbmVyKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG8ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGB1cGRhdGVgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4nKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0b1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZShcblx0XHRcdFx0XHQnc2VsZWN0Mi9zZWxlY3Rpb24vc2luZ2xlJyxcblx0XHRcdFx0XHRbJ2pxdWVyeScsICcuL2Jhc2UnLCAnLi4vdXRpbHMnLCAnLi4va2V5cyddLFxuXHRcdFx0XHRcdGZ1bmN0aW9uIChlLCB0LCBuLCByKSB7XG5cdFx0XHRcdFx0XHRmdW5jdGlvbiBpKCkge1xuXHRcdFx0XHRcdFx0XHRpLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0bi5FeHRlbmQoaSwgdCksXG5cdFx0XHRcdFx0XHRcdChpLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBpLl9fc3VwZXJfXy5yZW5kZXIuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5odG1sKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3dcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PGIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvYj48L3NwYW4+J1xuXHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0KGkucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAodCwgZSkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRpLl9fc3VwZXJfXy5iaW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0LmlkICsgJy1jb250YWluZXInO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0LmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2lkJywgcilcblx0XHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdyb2xlJywgJ3RleHRib3gnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2FyaWEtcmVhZG9ubHknLCAndHJ1ZScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtbGFiZWxsZWRieScsIHIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQxID09PSBlLndoaWNoICYmIG4udHJpZ2dlcigndG9nZ2xlJywge29yaWdpbmFsRXZlbnQ6IGV9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChlKSB7fSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2JsdXInLCBmdW5jdGlvbiAoZSkge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0dC5vbignZm9jdXMnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0LmlzT3BlbigpIHx8IG4uJHNlbGVjdGlvbi50cmlnZ2VyKCdmb2N1cycpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQoaS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpO1xuXHRcdFx0XHRcdFx0XHRcdGUuZW1wdHkoKSwgZS5yZW1vdmVBdHRyKCd0aXRsZScpO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0KGkucHJvdG90eXBlLmRpc3BsYXkgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuID0gdGhpcy5vcHRpb25zLmdldCgndGVtcGxhdGVTZWxlY3Rpb24nKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmdldCgnZXNjYXBlTWFya3VwJykobihlLCB0KSk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQoaS5wcm90b3R5cGUuc2VsZWN0aW9uQ29udGFpbmVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlKCc8c3Bhbj48L3NwYW4+Jyk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQoaS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoMCAhPT0gZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gZVswXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0biA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIgPSB0aGlzLmRpc3BsYXkodCwgbik7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLmVtcHR5KCkuYXBwZW5kKHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSB0LnRpdGxlIHx8IHQudGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdGkgPyBuLmF0dHIoJ3RpdGxlJywgaSkgOiBuLnJlbW92ZUF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHRoaXMuY2xlYXIoKTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vbXVsdGlwbGUnLCBbJ2pxdWVyeScsICcuL2Jhc2UnLCAnLi4vdXRpbHMnXSwgZnVuY3Rpb24gKGksIGUsIGwpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBuKGUsIHQpIHtcblx0XHRcdFx0XHRcdG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRsLkV4dGVuZChuLCBlKSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gbi5fX3N1cGVyX18ucmVuZGVyLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0ZS5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlJyksXG5cdFx0XHRcdFx0XHRcdFx0ZS5odG1sKCc8dWwgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj48L3VsPicpLFxuXHRcdFx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdG4uX19zdXBlcl9fLmJpbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIudHJpZ2dlcigndG9nZ2xlJywge29yaWdpbmFsRXZlbnQ6IGV9KTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2NsaWNrJywgJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFyLm9wdGlvbnMuZ2V0KCdkaXNhYmxlZCcpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gaSh0aGlzKS5wYXJlbnQoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuID0gbC5HZXREYXRhKHRbMF0sICdkYXRhJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIudHJpZ2dlcigndW5zZWxlY3QnLCB7b3JpZ2luYWxFdmVudDogZSwgZGF0YTogbn0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTtcblx0XHRcdFx0XHRcdFx0ZS5lbXB0eSgpLCBlLnJlbW92ZUF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5kaXNwbGF5ID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzLm9wdGlvbnMuZ2V0KCd0ZW1wbGF0ZVNlbGVjdGlvbicpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmdldCgnZXNjYXBlTWFya3VwJykobihlLCB0KSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpKFxuXHRcdFx0XHRcdFx0XHRcdCc8bGkgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlXCI+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmVcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+JnRpbWVzOzwvc3Bhbj48L2xpPidcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdGlmICgodGhpcy5jbGVhcigpLCAwICE9PSBlLmxlbmd0aCkpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciB0ID0gW10sIG4gPSAwOyBuIDwgZS5sZW5ndGg7IG4rKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSBlW25dLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpID0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0byA9IHRoaXMuZGlzcGxheShyLCBpKTtcblx0XHRcdFx0XHRcdFx0XHRcdGkuYXBwZW5kKG8pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHMgPSByLnRpdGxlIHx8IHIudGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdHMgJiYgaS5hdHRyKCd0aXRsZScsIHMpLCBsLlN0b3JlRGF0YShpWzBdLCAnZGF0YScsIHIpLCB0LnB1c2goaSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHZhciBhID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTtcblx0XHRcdFx0XHRcdFx0XHRsLmFwcGVuZE1hbnkoYSwgdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0blxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vcGxhY2Vob2xkZXInLCBbJy4uL3V0aWxzJ10sIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gdChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIobi5nZXQoJ3BsYWNlaG9sZGVyJykpKSwgZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KHQucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICdzdHJpbmcnID09IHR5cGVvZiB0ICYmICh0ID0ge2lkOiAnJywgdGV4dDogdH0pLCB0O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQodC5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0bi5odG1sKHRoaXMuZGlzcGxheSh0KSksXG5cdFx0XHRcdFx0XHRcdFx0bi5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItc2VsZWN0aW9uX19jaG9pY2UnKSxcblx0XHRcdFx0XHRcdFx0XHRuXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdCh0LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IDEgPT0gdC5sZW5ndGggJiYgdFswXS5pZCAhPSB0aGlzLnBsYWNlaG9sZGVyLmlkO1xuXHRcdFx0XHRcdFx0XHRpZiAoMSA8IHQubGVuZ3RoIHx8IG4pIHJldHVybiBlLmNhbGwodGhpcywgdCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXIoKTtcblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpLmFwcGVuZChyKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0dFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vYWxsb3dDbGVhcicsIFsnanF1ZXJ5JywgJy4uL2tleXMnLCAnLi4vdXRpbHMnXSwgZnVuY3Rpb24gKGksIHIsIGEpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKCkge31cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKSxcblx0XHRcdFx0XHRcdFx0XHRudWxsID09IHRoaXMucGxhY2Vob2xkZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5jb25zb2xlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogVGhlIGBhbGxvd0NsZWFyYCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYHBsYWNlaG9sZGVyYCBvcHRpb24uJ1xuXHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ21vdXNlZG93bicsICcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuX2hhbmRsZUNsZWFyKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ2tleXByZXNzJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuX2hhbmRsZUtleWJvYXJkQ2xlYXIoZSwgdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5faGFuZGxlQ2xlYXIgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJykpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKDAgIT09IG4ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSBhLkdldERhdGEoblswXSwgJ2RhdGEnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aSA9IHRoaXMuJGVsZW1lbnQudmFsKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LnZhbCh0aGlzLnBsYWNlaG9sZGVyLmlkKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0ge2RhdGE6IHJ9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCh0aGlzLnRyaWdnZXIoJ2NsZWFyJywgbyksIG8ucHJldmVudGVkKSkgdGhpcy4kZWxlbWVudC52YWwoaSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCByLmxlbmd0aDsgcysrKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgoKG8gPSB7ZGF0YTogcltzXX0pLCB0aGlzLnRyaWdnZXIoJ3Vuc2VsZWN0JywgbyksIG8ucHJldmVudGVkKSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2b2lkIHRoaXMuJGVsZW1lbnQudmFsKGkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpLCB0aGlzLnRyaWdnZXIoJ3RvZ2dsZScsIHt9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9oYW5kbGVLZXlib2FyZENsZWFyID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0bi5pc09wZW4oKSB8fCAodC53aGljaCAhPSByLkRFTEVURSAmJiB0LndoaWNoICE9IHIuQkFDS1NQQUNFKSB8fCB0aGlzLl9oYW5kbGVDbGVhcih0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHQoZS5jYWxsKHRoaXMsIHQpLFxuXHRcdFx0XHRcdFx0XHRcdCEoMCA8IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyJykubGVuZ3RoIHx8IDAgPT09IHQubGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQoJ3JlbW92ZUFsbEl0ZW1zJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRyID0gaSgnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXJcIiB0aXRsZT1cIicgKyBuKCkgKyAnXCI+JnRpbWVzOzwvc3Bhbj4nKTtcblx0XHRcdFx0XHRcdFx0XHRhLlN0b3JlRGF0YShyWzBdLCAnZGF0YScsIHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5wcmVwZW5kKHIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL3NlYXJjaCcsIFsnanF1ZXJ5JywgJy4uL3V0aWxzJywgJy4uL2tleXMnXSwgZnVuY3Rpb24gKHIsIGEsIGwpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHIoXG5cdFx0XHRcdFx0XHRcdFx0JzxsaSBjbGFzcz1cInNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1pbmxpbmVcIj48aW5wdXQgY2xhc3M9XCJzZWxlY3QyLXNlYXJjaF9fZmllbGRcIiB0eXBlPVwic2VhcmNoXCIgdGFiaW5kZXg9XCItMVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgYXV0b2NhcGl0YWxpemU9XCJub25lXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgcm9sZT1cInNlYXJjaGJveFwiIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiIC8+PC9saT4nXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdCh0aGlzLiRzZWFyY2hDb250YWluZXIgPSB0KSwgKHRoaXMuJHNlYXJjaCA9IHQuZmluZCgnaW5wdXQnKSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gZS5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fdHJhbnNmZXJUYWJJbmRleCgpLCBuO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHRcdHZhciByID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRpID0gdC5pZCArICctcmVzdWx0cyc7XG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBpKSwgci4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gudmFsKCcnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtY29udHJvbHMnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdlbmFibGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gucHJvcCgnZGlzYWJsZWQnLCAhMSksIHIuX3RyYW5zZmVyVGFiSW5kZXgoKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnByb3AoJ2Rpc2FibGVkJywgITApO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ2ZvY3VzJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3Jlc3VsdHM6Zm9jdXMnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5kYXRhLl9yZXN1bHRJZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHIuJHNlYXJjaC5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBlLmRhdGEuX3Jlc3VsdElkKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHIuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2ZvY3VzaW4nLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci50cmlnZ2VyKCdmb2N1cycsIGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlbGVjdGlvbi5vbignZm9jdXNvdXQnLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5faGFuZGxlQmx1cihlKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24ub24oJ2tleWRvd24nLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoZS5zdG9wUHJvcGFnYXRpb24oKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci50cmlnZ2VyKCdrZXlwcmVzcycsIGUpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoci5fa2V5VXBQcmV2ZW50ZWQgPSBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS53aGljaCA9PT0gbC5CQUNLU1BBQ0UgJiYgJycgPT09IHIuJHNlYXJjaC52YWwoKSlcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IHIuJHNlYXJjaENvbnRhaW5lci5wcmV2KCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoMCA8IHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSBhLkdldERhdGEodFswXSwgJ2RhdGEnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyLnNlYXJjaFJlbW92ZUNob2ljZShuKSwgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdjbGljaycsICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gudmFsKCkgJiYgZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0dmFyIG8gPSBkb2N1bWVudC5kb2N1bWVudE1vZGUsXG5cdFx0XHRcdFx0XHRcdFx0cyA9IG8gJiYgbyA8PSAxMTtcblx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKCdpbnB1dC5zZWFyY2hjaGVjaycsICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0c1xuXHRcdFx0XHRcdFx0XHRcdFx0PyByLiRzZWxlY3Rpb24ub2ZmKCdpbnB1dC5zZWFyY2ggaW5wdXQuc2VhcmNoY2hlY2snKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiByLiRzZWxlY3Rpb24ub2ZmKCdrZXl1cC5zZWFyY2gnKTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLm9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2tleXVwLnNlYXJjaCBpbnB1dC5zZWFyY2gnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Jy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJyxcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzICYmICdpbnB1dCcgPT09IGUudHlwZSkgci4kc2VsZWN0aW9uLm9mZignaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gZS53aGljaDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ICE9IGwuU0hJRlQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHQgIT0gbC5DVFJMICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ICE9IGwuQUxUICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ICE9IGwuVEFCICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyLmhhbmRsZVNlYXJjaChlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5fdHJhbnNmZXJUYWJJbmRleCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaC5hdHRyKCd0YWJpbmRleCcsIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcpKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmNyZWF0ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoLmF0dHIoJ3BsYWNlaG9sZGVyJywgdC50ZXh0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gdGhpcy4kc2VhcmNoWzBdID09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaC5hdHRyKCdwbGFjZWhvbGRlcicsICcnKSxcblx0XHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5hcHBlbmQodGhpcy4kc2VhcmNoQ29udGFpbmVyKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc2l6ZVNlYXJjaCgpLFxuXHRcdFx0XHRcdFx0XHRcdG4gJiYgdGhpcy4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5oYW5kbGVTZWFyY2ggPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGlmICgodGhpcy5yZXNpemVTZWFyY2goKSwgIXRoaXMuX2tleVVwUHJldmVudGVkKSkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlID0gdGhpcy4kc2VhcmNoLnZhbCgpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcigncXVlcnknLCB7dGVybTogZX0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2tleVVwUHJldmVudGVkID0gITE7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5zZWFyY2hSZW1vdmVDaG9pY2UgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3Vuc2VsZWN0Jywge2RhdGE6IHR9KSwgdGhpcy4kc2VhcmNoLnZhbCh0LnRleHQpLCB0aGlzLmhhbmRsZVNlYXJjaCgpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUucmVzaXplU2VhcmNoID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2guY3NzKCd3aWR0aCcsICcyNXB4Jyk7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gJyc7XG5cdFx0XHRcdFx0XHRcdCcnICE9PSB0aGlzLiRzZWFyY2guYXR0cigncGxhY2Vob2xkZXInKVxuXHRcdFx0XHRcdFx0XHRcdD8gKGUgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpLndpZHRoKCkpXG5cdFx0XHRcdFx0XHRcdFx0OiAoZSA9IDAuNzUgKiAodGhpcy4kc2VhcmNoLnZhbCgpLmxlbmd0aCArIDEpICsgJ2VtJyk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaC5jc3MoJ3dpZHRoJywgZSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL2V2ZW50UmVsYXknLCBbJ2pxdWVyeSddLCBmdW5jdGlvbiAocykge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIGUoKSB7fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHRcdHZhciByID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRpID0gW1xuXHRcdFx0XHRcdFx0XHRcdFx0J29wZW4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0J29wZW5pbmcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J2Nsb3NlJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdjbG9zaW5nJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdzZWxlY3QnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J3NlbGVjdGluZycsXG5cdFx0XHRcdFx0XHRcdFx0XHQndW5zZWxlY3QnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Vuc2VsZWN0aW5nJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdjbGVhcicsXG5cdFx0XHRcdFx0XHRcdFx0XHQnY2xlYXJpbmcnLFxuXHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0byA9IFsnb3BlbmluZycsICdjbG9zaW5nJywgJ3NlbGVjdGluZycsICd1bnNlbGVjdGluZycsICdjbGVhcmluZyddO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignKicsIGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoLTEgIT09IHMuaW5BcnJheShlLCBpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ID0gdCB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSBzLkV2ZW50KCdzZWxlY3QyOicgKyBlLCB7cGFyYW1zOiB0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuJGVsZW1lbnQudHJpZ2dlcihuKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQtMSAhPT0gcy5pbkFycmF5KGUsIG8pICYmICh0LnByZXZlbnRlZCA9IG4uaXNEZWZhdWx0UHJldmVudGVkKCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL3RyYW5zbGF0aW9uJywgWydqcXVlcnknLCAncmVxdWlyZSddLCBmdW5jdGlvbiAodCwgbikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHIoZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5kaWN0ID0gZSB8fCB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmRpY3Q7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5kaWN0W2VdO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5kaWN0ID0gdC5leHRlbmQoe30sIGUuYWxsKCksIHRoaXMuZGljdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChyLl9jYWNoZSA9IHt9KSxcblx0XHRcdFx0XHRcdChyLmxvYWRQYXRoID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCEoZSBpbiByLl9jYWNoZSkpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IG4oZSk7XG5cdFx0XHRcdFx0XHRcdFx0ci5fY2FjaGVbZV0gPSB0O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuZXcgcihyLl9jYWNoZVtlXSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdHJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGlhY3JpdGljcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdCfikrYnOiAnQScsXG5cdFx0XHRcdFx0XHTvvKE6ICdBJyxcblx0XHRcdFx0XHRcdMOAOiAnQScsXG5cdFx0XHRcdFx0XHTDgTogJ0EnLFxuXHRcdFx0XHRcdFx0w4I6ICdBJyxcblx0XHRcdFx0XHRcdOG6pjogJ0EnLFxuXHRcdFx0XHRcdFx04bqkOiAnQScsXG5cdFx0XHRcdFx0XHThuqo6ICdBJyxcblx0XHRcdFx0XHRcdOG6qDogJ0EnLFxuXHRcdFx0XHRcdFx0w4M6ICdBJyxcblx0XHRcdFx0XHRcdMSAOiAnQScsXG5cdFx0XHRcdFx0XHTEgjogJ0EnLFxuXHRcdFx0XHRcdFx04bqwOiAnQScsXG5cdFx0XHRcdFx0XHThuq46ICdBJyxcblx0XHRcdFx0XHRcdOG6tDogJ0EnLFxuXHRcdFx0XHRcdFx04bqyOiAnQScsXG5cdFx0XHRcdFx0XHTIpjogJ0EnLFxuXHRcdFx0XHRcdFx0x6A6ICdBJyxcblx0XHRcdFx0XHRcdMOEOiAnQScsXG5cdFx0XHRcdFx0XHTHnjogJ0EnLFxuXHRcdFx0XHRcdFx04bqiOiAnQScsXG5cdFx0XHRcdFx0XHTDhTogJ0EnLFxuXHRcdFx0XHRcdFx0x7o6ICdBJyxcblx0XHRcdFx0XHRcdMeNOiAnQScsXG5cdFx0XHRcdFx0XHTIgDogJ0EnLFxuXHRcdFx0XHRcdFx0yII6ICdBJyxcblx0XHRcdFx0XHRcdOG6oDogJ0EnLFxuXHRcdFx0XHRcdFx04bqsOiAnQScsXG5cdFx0XHRcdFx0XHThurY6ICdBJyxcblx0XHRcdFx0XHRcdOG4gDogJ0EnLFxuXHRcdFx0XHRcdFx0xIQ6ICdBJyxcblx0XHRcdFx0XHRcdMi6OiAnQScsXG5cdFx0XHRcdFx0XHTisa86ICdBJyxcblx0XHRcdFx0XHRcdOqcsjogJ0FBJyxcblx0XHRcdFx0XHRcdMOGOiAnQUUnLFxuXHRcdFx0XHRcdFx0x7w6ICdBRScsXG5cdFx0XHRcdFx0XHTHojogJ0FFJyxcblx0XHRcdFx0XHRcdOqctDogJ0FPJyxcblx0XHRcdFx0XHRcdOqctjogJ0FVJyxcblx0XHRcdFx0XHRcdOqcuDogJ0FWJyxcblx0XHRcdFx0XHRcdOqcujogJ0FWJyxcblx0XHRcdFx0XHRcdOqcvDogJ0FZJyxcblx0XHRcdFx0XHRcdCfikrcnOiAnQicsXG5cdFx0XHRcdFx0XHTvvKI6ICdCJyxcblx0XHRcdFx0XHRcdOG4gjogJ0InLFxuXHRcdFx0XHRcdFx04biEOiAnQicsXG5cdFx0XHRcdFx0XHThuIY6ICdCJyxcblx0XHRcdFx0XHRcdMmDOiAnQicsXG5cdFx0XHRcdFx0XHTGgjogJ0InLFxuXHRcdFx0XHRcdFx0xoE6ICdCJyxcblx0XHRcdFx0XHRcdCfikrgnOiAnQycsXG5cdFx0XHRcdFx0XHTvvKM6ICdDJyxcblx0XHRcdFx0XHRcdMSGOiAnQycsXG5cdFx0XHRcdFx0XHTEiDogJ0MnLFxuXHRcdFx0XHRcdFx0xIo6ICdDJyxcblx0XHRcdFx0XHRcdMSMOiAnQycsXG5cdFx0XHRcdFx0XHTDhzogJ0MnLFxuXHRcdFx0XHRcdFx04biIOiAnQycsXG5cdFx0XHRcdFx0XHTGhzogJ0MnLFxuXHRcdFx0XHRcdFx0yLs6ICdDJyxcblx0XHRcdFx0XHRcdOqcvjogJ0MnLFxuXHRcdFx0XHRcdFx0J+KSuSc6ICdEJyxcblx0XHRcdFx0XHRcdO+8pDogJ0QnLFxuXHRcdFx0XHRcdFx04biKOiAnRCcsXG5cdFx0XHRcdFx0XHTEjjogJ0QnLFxuXHRcdFx0XHRcdFx04biMOiAnRCcsXG5cdFx0XHRcdFx0XHThuJA6ICdEJyxcblx0XHRcdFx0XHRcdOG4kjogJ0QnLFxuXHRcdFx0XHRcdFx04biOOiAnRCcsXG5cdFx0XHRcdFx0XHTEkDogJ0QnLFxuXHRcdFx0XHRcdFx0xos6ICdEJyxcblx0XHRcdFx0XHRcdMaKOiAnRCcsXG5cdFx0XHRcdFx0XHTGiTogJ0QnLFxuXHRcdFx0XHRcdFx06p25OiAnRCcsXG5cdFx0XHRcdFx0XHTHsTogJ0RaJyxcblx0XHRcdFx0XHRcdMeEOiAnRFonLFxuXHRcdFx0XHRcdFx0x7I6ICdEeicsXG5cdFx0XHRcdFx0XHTHhTogJ0R6Jyxcblx0XHRcdFx0XHRcdCfikronOiAnRScsXG5cdFx0XHRcdFx0XHTvvKU6ICdFJyxcblx0XHRcdFx0XHRcdMOIOiAnRScsXG5cdFx0XHRcdFx0XHTDiTogJ0UnLFxuXHRcdFx0XHRcdFx0w4o6ICdFJyxcblx0XHRcdFx0XHRcdOG7gDogJ0UnLFxuXHRcdFx0XHRcdFx04bq+OiAnRScsXG5cdFx0XHRcdFx0XHThu4Q6ICdFJyxcblx0XHRcdFx0XHRcdOG7gjogJ0UnLFxuXHRcdFx0XHRcdFx04bq8OiAnRScsXG5cdFx0XHRcdFx0XHTEkjogJ0UnLFxuXHRcdFx0XHRcdFx04biUOiAnRScsXG5cdFx0XHRcdFx0XHThuJY6ICdFJyxcblx0XHRcdFx0XHRcdMSUOiAnRScsXG5cdFx0XHRcdFx0XHTEljogJ0UnLFxuXHRcdFx0XHRcdFx0w4s6ICdFJyxcblx0XHRcdFx0XHRcdOG6ujogJ0UnLFxuXHRcdFx0XHRcdFx0xJo6ICdFJyxcblx0XHRcdFx0XHRcdMiEOiAnRScsXG5cdFx0XHRcdFx0XHTIhjogJ0UnLFxuXHRcdFx0XHRcdFx04bq4OiAnRScsXG5cdFx0XHRcdFx0XHThu4Y6ICdFJyxcblx0XHRcdFx0XHRcdMioOiAnRScsXG5cdFx0XHRcdFx0XHThuJw6ICdFJyxcblx0XHRcdFx0XHRcdMSYOiAnRScsXG5cdFx0XHRcdFx0XHThuJg6ICdFJyxcblx0XHRcdFx0XHRcdOG4mjogJ0UnLFxuXHRcdFx0XHRcdFx0xpA6ICdFJyxcblx0XHRcdFx0XHRcdMaOOiAnRScsXG5cdFx0XHRcdFx0XHQn4pK7JzogJ0YnLFxuXHRcdFx0XHRcdFx077ymOiAnRicsXG5cdFx0XHRcdFx0XHThuJ46ICdGJyxcblx0XHRcdFx0XHRcdMaROiAnRicsXG5cdFx0XHRcdFx0XHTqnbs6ICdGJyxcblx0XHRcdFx0XHRcdCfikrwnOiAnRycsXG5cdFx0XHRcdFx0XHTvvKc6ICdHJyxcblx0XHRcdFx0XHRcdMe0OiAnRycsXG5cdFx0XHRcdFx0XHTEnDogJ0cnLFxuXHRcdFx0XHRcdFx04bigOiAnRycsXG5cdFx0XHRcdFx0XHTEnjogJ0cnLFxuXHRcdFx0XHRcdFx0xKA6ICdHJyxcblx0XHRcdFx0XHRcdMemOiAnRycsXG5cdFx0XHRcdFx0XHTEojogJ0cnLFxuXHRcdFx0XHRcdFx0x6Q6ICdHJyxcblx0XHRcdFx0XHRcdMaTOiAnRycsXG5cdFx0XHRcdFx0XHTqnqA6ICdHJyxcblx0XHRcdFx0XHRcdOqdvTogJ0cnLFxuXHRcdFx0XHRcdFx06p2+OiAnRycsXG5cdFx0XHRcdFx0XHQn4pK9JzogJ0gnLFxuXHRcdFx0XHRcdFx077yoOiAnSCcsXG5cdFx0XHRcdFx0XHTEpDogJ0gnLFxuXHRcdFx0XHRcdFx04biiOiAnSCcsXG5cdFx0XHRcdFx0XHThuKY6ICdIJyxcblx0XHRcdFx0XHRcdMieOiAnSCcsXG5cdFx0XHRcdFx0XHThuKQ6ICdIJyxcblx0XHRcdFx0XHRcdOG4qDogJ0gnLFxuXHRcdFx0XHRcdFx04biqOiAnSCcsXG5cdFx0XHRcdFx0XHTEpjogJ0gnLFxuXHRcdFx0XHRcdFx04rGnOiAnSCcsXG5cdFx0XHRcdFx0XHTisbU6ICdIJyxcblx0XHRcdFx0XHRcdOqejTogJ0gnLFxuXHRcdFx0XHRcdFx0J+KSvic6ICdJJyxcblx0XHRcdFx0XHRcdO+8qTogJ0knLFxuXHRcdFx0XHRcdFx0w4w6ICdJJyxcblx0XHRcdFx0XHRcdMONOiAnSScsXG5cdFx0XHRcdFx0XHTDjjogJ0knLFxuXHRcdFx0XHRcdFx0xKg6ICdJJyxcblx0XHRcdFx0XHRcdMSqOiAnSScsXG5cdFx0XHRcdFx0XHTErDogJ0knLFxuXHRcdFx0XHRcdFx0xLA6ICdJJyxcblx0XHRcdFx0XHRcdMOPOiAnSScsXG5cdFx0XHRcdFx0XHThuK46ICdJJyxcblx0XHRcdFx0XHRcdOG7iDogJ0knLFxuXHRcdFx0XHRcdFx0x486ICdJJyxcblx0XHRcdFx0XHRcdMiIOiAnSScsXG5cdFx0XHRcdFx0XHTIijogJ0knLFxuXHRcdFx0XHRcdFx04buKOiAnSScsXG5cdFx0XHRcdFx0XHTErjogJ0knLFxuXHRcdFx0XHRcdFx04bisOiAnSScsXG5cdFx0XHRcdFx0XHTGlzogJ0knLFxuXHRcdFx0XHRcdFx0J+KSvyc6ICdKJyxcblx0XHRcdFx0XHRcdO+8qjogJ0onLFxuXHRcdFx0XHRcdFx0xLQ6ICdKJyxcblx0XHRcdFx0XHRcdMmIOiAnSicsXG5cdFx0XHRcdFx0XHQn4pOAJzogJ0snLFxuXHRcdFx0XHRcdFx077yrOiAnSycsXG5cdFx0XHRcdFx0XHThuLA6ICdLJyxcblx0XHRcdFx0XHRcdMeoOiAnSycsXG5cdFx0XHRcdFx0XHThuLI6ICdLJyxcblx0XHRcdFx0XHRcdMS2OiAnSycsXG5cdFx0XHRcdFx0XHThuLQ6ICdLJyxcblx0XHRcdFx0XHRcdMaYOiAnSycsXG5cdFx0XHRcdFx0XHTisak6ICdLJyxcblx0XHRcdFx0XHRcdOqdgDogJ0snLFxuXHRcdFx0XHRcdFx06p2COiAnSycsXG5cdFx0XHRcdFx0XHTqnYQ6ICdLJyxcblx0XHRcdFx0XHRcdOqeojogJ0snLFxuXHRcdFx0XHRcdFx0J+KTgSc6ICdMJyxcblx0XHRcdFx0XHRcdO+8rDogJ0wnLFxuXHRcdFx0XHRcdFx0xL86ICdMJyxcblx0XHRcdFx0XHRcdMS5OiAnTCcsXG5cdFx0XHRcdFx0XHTEvTogJ0wnLFxuXHRcdFx0XHRcdFx04bi2OiAnTCcsXG5cdFx0XHRcdFx0XHThuLg6ICdMJyxcblx0XHRcdFx0XHRcdMS7OiAnTCcsXG5cdFx0XHRcdFx0XHThuLw6ICdMJyxcblx0XHRcdFx0XHRcdOG4ujogJ0wnLFxuXHRcdFx0XHRcdFx0xYE6ICdMJyxcblx0XHRcdFx0XHRcdMi9OiAnTCcsXG5cdFx0XHRcdFx0XHTisaI6ICdMJyxcblx0XHRcdFx0XHRcdOKxoDogJ0wnLFxuXHRcdFx0XHRcdFx06p2IOiAnTCcsXG5cdFx0XHRcdFx0XHTqnYY6ICdMJyxcblx0XHRcdFx0XHRcdOqegDogJ0wnLFxuXHRcdFx0XHRcdFx0x4c6ICdMSicsXG5cdFx0XHRcdFx0XHTHiDogJ0xqJyxcblx0XHRcdFx0XHRcdCfik4InOiAnTScsXG5cdFx0XHRcdFx0XHTvvK06ICdNJyxcblx0XHRcdFx0XHRcdOG4vjogJ00nLFxuXHRcdFx0XHRcdFx04bmAOiAnTScsXG5cdFx0XHRcdFx0XHThuYI6ICdNJyxcblx0XHRcdFx0XHRcdOKxrjogJ00nLFxuXHRcdFx0XHRcdFx0xpw6ICdNJyxcblx0XHRcdFx0XHRcdCfik4MnOiAnTicsXG5cdFx0XHRcdFx0XHTvvK46ICdOJyxcblx0XHRcdFx0XHRcdMe4OiAnTicsXG5cdFx0XHRcdFx0XHTFgzogJ04nLFxuXHRcdFx0XHRcdFx0w5E6ICdOJyxcblx0XHRcdFx0XHRcdOG5hDogJ04nLFxuXHRcdFx0XHRcdFx0xYc6ICdOJyxcblx0XHRcdFx0XHRcdOG5hjogJ04nLFxuXHRcdFx0XHRcdFx0xYU6ICdOJyxcblx0XHRcdFx0XHRcdOG5ijogJ04nLFxuXHRcdFx0XHRcdFx04bmIOiAnTicsXG5cdFx0XHRcdFx0XHTIoDogJ04nLFxuXHRcdFx0XHRcdFx0xp06ICdOJyxcblx0XHRcdFx0XHRcdOqekDogJ04nLFxuXHRcdFx0XHRcdFx06p6kOiAnTicsXG5cdFx0XHRcdFx0XHTHijogJ05KJyxcblx0XHRcdFx0XHRcdMeLOiAnTmonLFxuXHRcdFx0XHRcdFx0J+KThCc6ICdPJyxcblx0XHRcdFx0XHRcdO+8rzogJ08nLFxuXHRcdFx0XHRcdFx0w5I6ICdPJyxcblx0XHRcdFx0XHRcdMOTOiAnTycsXG5cdFx0XHRcdFx0XHTDlDogJ08nLFxuXHRcdFx0XHRcdFx04buSOiAnTycsXG5cdFx0XHRcdFx0XHThu5A6ICdPJyxcblx0XHRcdFx0XHRcdOG7ljogJ08nLFxuXHRcdFx0XHRcdFx04buUOiAnTycsXG5cdFx0XHRcdFx0XHTDlTogJ08nLFxuXHRcdFx0XHRcdFx04bmMOiAnTycsXG5cdFx0XHRcdFx0XHTIrDogJ08nLFxuXHRcdFx0XHRcdFx04bmOOiAnTycsXG5cdFx0XHRcdFx0XHTFjDogJ08nLFxuXHRcdFx0XHRcdFx04bmQOiAnTycsXG5cdFx0XHRcdFx0XHThuZI6ICdPJyxcblx0XHRcdFx0XHRcdMWOOiAnTycsXG5cdFx0XHRcdFx0XHTIrjogJ08nLFxuXHRcdFx0XHRcdFx0yLA6ICdPJyxcblx0XHRcdFx0XHRcdMOWOiAnTycsXG5cdFx0XHRcdFx0XHTIqjogJ08nLFxuXHRcdFx0XHRcdFx04buOOiAnTycsXG5cdFx0XHRcdFx0XHTFkDogJ08nLFxuXHRcdFx0XHRcdFx0x5E6ICdPJyxcblx0XHRcdFx0XHRcdMiMOiAnTycsXG5cdFx0XHRcdFx0XHTIjjogJ08nLFxuXHRcdFx0XHRcdFx0xqA6ICdPJyxcblx0XHRcdFx0XHRcdOG7nDogJ08nLFxuXHRcdFx0XHRcdFx04buaOiAnTycsXG5cdFx0XHRcdFx0XHThu6A6ICdPJyxcblx0XHRcdFx0XHRcdOG7njogJ08nLFxuXHRcdFx0XHRcdFx04buiOiAnTycsXG5cdFx0XHRcdFx0XHThu4w6ICdPJyxcblx0XHRcdFx0XHRcdOG7mDogJ08nLFxuXHRcdFx0XHRcdFx0x6o6ICdPJyxcblx0XHRcdFx0XHRcdMesOiAnTycsXG5cdFx0XHRcdFx0XHTDmDogJ08nLFxuXHRcdFx0XHRcdFx0x746ICdPJyxcblx0XHRcdFx0XHRcdMaGOiAnTycsXG5cdFx0XHRcdFx0XHTGnzogJ08nLFxuXHRcdFx0XHRcdFx06p2KOiAnTycsXG5cdFx0XHRcdFx0XHTqnYw6ICdPJyxcblx0XHRcdFx0XHRcdMWSOiAnT0UnLFxuXHRcdFx0XHRcdFx0xqI6ICdPSScsXG5cdFx0XHRcdFx0XHTqnY46ICdPTycsXG5cdFx0XHRcdFx0XHTIojogJ09VJyxcblx0XHRcdFx0XHRcdCfik4UnOiAnUCcsXG5cdFx0XHRcdFx0XHTvvLA6ICdQJyxcblx0XHRcdFx0XHRcdOG5lDogJ1AnLFxuXHRcdFx0XHRcdFx04bmWOiAnUCcsXG5cdFx0XHRcdFx0XHTGpDogJ1AnLFxuXHRcdFx0XHRcdFx04rGjOiAnUCcsXG5cdFx0XHRcdFx0XHTqnZA6ICdQJyxcblx0XHRcdFx0XHRcdOqdkjogJ1AnLFxuXHRcdFx0XHRcdFx06p2UOiAnUCcsXG5cdFx0XHRcdFx0XHQn4pOGJzogJ1EnLFxuXHRcdFx0XHRcdFx077yxOiAnUScsXG5cdFx0XHRcdFx0XHTqnZY6ICdRJyxcblx0XHRcdFx0XHRcdOqdmDogJ1EnLFxuXHRcdFx0XHRcdFx0yYo6ICdRJyxcblx0XHRcdFx0XHRcdCfik4cnOiAnUicsXG5cdFx0XHRcdFx0XHTvvLI6ICdSJyxcblx0XHRcdFx0XHRcdMWUOiAnUicsXG5cdFx0XHRcdFx0XHThuZg6ICdSJyxcblx0XHRcdFx0XHRcdMWYOiAnUicsXG5cdFx0XHRcdFx0XHTIkDogJ1InLFxuXHRcdFx0XHRcdFx0yJI6ICdSJyxcblx0XHRcdFx0XHRcdOG5mjogJ1InLFxuXHRcdFx0XHRcdFx04bmcOiAnUicsXG5cdFx0XHRcdFx0XHTFljogJ1InLFxuXHRcdFx0XHRcdFx04bmeOiAnUicsXG5cdFx0XHRcdFx0XHTJjDogJ1InLFxuXHRcdFx0XHRcdFx04rGkOiAnUicsXG5cdFx0XHRcdFx0XHTqnZo6ICdSJyxcblx0XHRcdFx0XHRcdOqepjogJ1InLFxuXHRcdFx0XHRcdFx06p6COiAnUicsXG5cdFx0XHRcdFx0XHQn4pOIJzogJ1MnLFxuXHRcdFx0XHRcdFx077yzOiAnUycsXG5cdFx0XHRcdFx0XHThup46ICdTJyxcblx0XHRcdFx0XHRcdMWaOiAnUycsXG5cdFx0XHRcdFx0XHThuaQ6ICdTJyxcblx0XHRcdFx0XHRcdMWcOiAnUycsXG5cdFx0XHRcdFx0XHThuaA6ICdTJyxcblx0XHRcdFx0XHRcdMWgOiAnUycsXG5cdFx0XHRcdFx0XHThuaY6ICdTJyxcblx0XHRcdFx0XHRcdOG5ojogJ1MnLFxuXHRcdFx0XHRcdFx04bmoOiAnUycsXG5cdFx0XHRcdFx0XHTImDogJ1MnLFxuXHRcdFx0XHRcdFx0xZ46ICdTJyxcblx0XHRcdFx0XHRcdOKxvjogJ1MnLFxuXHRcdFx0XHRcdFx06p6oOiAnUycsXG5cdFx0XHRcdFx0XHTqnoQ6ICdTJyxcblx0XHRcdFx0XHRcdCfik4knOiAnVCcsXG5cdFx0XHRcdFx0XHTvvLQ6ICdUJyxcblx0XHRcdFx0XHRcdOG5qjogJ1QnLFxuXHRcdFx0XHRcdFx0xaQ6ICdUJyxcblx0XHRcdFx0XHRcdOG5rDogJ1QnLFxuXHRcdFx0XHRcdFx0yJo6ICdUJyxcblx0XHRcdFx0XHRcdMWiOiAnVCcsXG5cdFx0XHRcdFx0XHThubA6ICdUJyxcblx0XHRcdFx0XHRcdOG5rjogJ1QnLFxuXHRcdFx0XHRcdFx0xaY6ICdUJyxcblx0XHRcdFx0XHRcdMasOiAnVCcsXG5cdFx0XHRcdFx0XHTGrjogJ1QnLFxuXHRcdFx0XHRcdFx0yL46ICdUJyxcblx0XHRcdFx0XHRcdOqehjogJ1QnLFxuXHRcdFx0XHRcdFx06pyoOiAnVFonLFxuXHRcdFx0XHRcdFx0J+KTiic6ICdVJyxcblx0XHRcdFx0XHRcdO+8tTogJ1UnLFxuXHRcdFx0XHRcdFx0w5k6ICdVJyxcblx0XHRcdFx0XHRcdMOaOiAnVScsXG5cdFx0XHRcdFx0XHTDmzogJ1UnLFxuXHRcdFx0XHRcdFx0xag6ICdVJyxcblx0XHRcdFx0XHRcdOG5uDogJ1UnLFxuXHRcdFx0XHRcdFx0xao6ICdVJyxcblx0XHRcdFx0XHRcdOG5ujogJ1UnLFxuXHRcdFx0XHRcdFx0xaw6ICdVJyxcblx0XHRcdFx0XHRcdMOcOiAnVScsXG5cdFx0XHRcdFx0XHTHmzogJ1UnLFxuXHRcdFx0XHRcdFx0x5c6ICdVJyxcblx0XHRcdFx0XHRcdMeVOiAnVScsXG5cdFx0XHRcdFx0XHTHmTogJ1UnLFxuXHRcdFx0XHRcdFx04bumOiAnVScsXG5cdFx0XHRcdFx0XHTFrjogJ1UnLFxuXHRcdFx0XHRcdFx0xbA6ICdVJyxcblx0XHRcdFx0XHRcdMeTOiAnVScsXG5cdFx0XHRcdFx0XHTIlDogJ1UnLFxuXHRcdFx0XHRcdFx0yJY6ICdVJyxcblx0XHRcdFx0XHRcdMavOiAnVScsXG5cdFx0XHRcdFx0XHThu6o6ICdVJyxcblx0XHRcdFx0XHRcdOG7qDogJ1UnLFxuXHRcdFx0XHRcdFx04buuOiAnVScsXG5cdFx0XHRcdFx0XHThu6w6ICdVJyxcblx0XHRcdFx0XHRcdOG7sDogJ1UnLFxuXHRcdFx0XHRcdFx04bukOiAnVScsXG5cdFx0XHRcdFx0XHThubI6ICdVJyxcblx0XHRcdFx0XHRcdMWyOiAnVScsXG5cdFx0XHRcdFx0XHThubY6ICdVJyxcblx0XHRcdFx0XHRcdOG5tDogJ1UnLFxuXHRcdFx0XHRcdFx0yYQ6ICdVJyxcblx0XHRcdFx0XHRcdCfik4snOiAnVicsXG5cdFx0XHRcdFx0XHTvvLY6ICdWJyxcblx0XHRcdFx0XHRcdOG5vDogJ1YnLFxuXHRcdFx0XHRcdFx04bm+OiAnVicsXG5cdFx0XHRcdFx0XHTGsjogJ1YnLFxuXHRcdFx0XHRcdFx06p2eOiAnVicsXG5cdFx0XHRcdFx0XHTJhTogJ1YnLFxuXHRcdFx0XHRcdFx06p2gOiAnVlknLFxuXHRcdFx0XHRcdFx0J+KTjCc6ICdXJyxcblx0XHRcdFx0XHRcdO+8tzogJ1cnLFxuXHRcdFx0XHRcdFx04bqAOiAnVycsXG5cdFx0XHRcdFx0XHThuoI6ICdXJyxcblx0XHRcdFx0XHRcdMW0OiAnVycsXG5cdFx0XHRcdFx0XHThuoY6ICdXJyxcblx0XHRcdFx0XHRcdOG6hDogJ1cnLFxuXHRcdFx0XHRcdFx04bqIOiAnVycsXG5cdFx0XHRcdFx0XHTisbI6ICdXJyxcblx0XHRcdFx0XHRcdCfik40nOiAnWCcsXG5cdFx0XHRcdFx0XHTvvLg6ICdYJyxcblx0XHRcdFx0XHRcdOG6ijogJ1gnLFxuXHRcdFx0XHRcdFx04bqMOiAnWCcsXG5cdFx0XHRcdFx0XHQn4pOOJzogJ1knLFxuXHRcdFx0XHRcdFx077y5OiAnWScsXG5cdFx0XHRcdFx0XHThu7I6ICdZJyxcblx0XHRcdFx0XHRcdMOdOiAnWScsXG5cdFx0XHRcdFx0XHTFtjogJ1knLFxuXHRcdFx0XHRcdFx04bu4OiAnWScsXG5cdFx0XHRcdFx0XHTIsjogJ1knLFxuXHRcdFx0XHRcdFx04bqOOiAnWScsXG5cdFx0XHRcdFx0XHTFuDogJ1knLFxuXHRcdFx0XHRcdFx04bu2OiAnWScsXG5cdFx0XHRcdFx0XHThu7Q6ICdZJyxcblx0XHRcdFx0XHRcdMazOiAnWScsXG5cdFx0XHRcdFx0XHTJjjogJ1knLFxuXHRcdFx0XHRcdFx04bu+OiAnWScsXG5cdFx0XHRcdFx0XHQn4pOPJzogJ1onLFxuXHRcdFx0XHRcdFx077y6OiAnWicsXG5cdFx0XHRcdFx0XHTFuTogJ1onLFxuXHRcdFx0XHRcdFx04bqQOiAnWicsXG5cdFx0XHRcdFx0XHTFuzogJ1onLFxuXHRcdFx0XHRcdFx0xb06ICdaJyxcblx0XHRcdFx0XHRcdOG6kjogJ1onLFxuXHRcdFx0XHRcdFx04bqUOiAnWicsXG5cdFx0XHRcdFx0XHTGtTogJ1onLFxuXHRcdFx0XHRcdFx0yKQ6ICdaJyxcblx0XHRcdFx0XHRcdOKxvzogJ1onLFxuXHRcdFx0XHRcdFx04rGrOiAnWicsXG5cdFx0XHRcdFx0XHTqnaI6ICdaJyxcblx0XHRcdFx0XHRcdCfik5AnOiAnYScsXG5cdFx0XHRcdFx0XHTvvYE6ICdhJyxcblx0XHRcdFx0XHRcdOG6mjogJ2EnLFxuXHRcdFx0XHRcdFx0w6A6ICdhJyxcblx0XHRcdFx0XHRcdMOhOiAnYScsXG5cdFx0XHRcdFx0XHTDojogJ2EnLFxuXHRcdFx0XHRcdFx04bqnOiAnYScsXG5cdFx0XHRcdFx0XHThuqU6ICdhJyxcblx0XHRcdFx0XHRcdOG6qzogJ2EnLFxuXHRcdFx0XHRcdFx04bqpOiAnYScsXG5cdFx0XHRcdFx0XHTDozogJ2EnLFxuXHRcdFx0XHRcdFx0xIE6ICdhJyxcblx0XHRcdFx0XHRcdMSDOiAnYScsXG5cdFx0XHRcdFx0XHThurE6ICdhJyxcblx0XHRcdFx0XHRcdOG6rzogJ2EnLFxuXHRcdFx0XHRcdFx04bq1OiAnYScsXG5cdFx0XHRcdFx0XHThurM6ICdhJyxcblx0XHRcdFx0XHRcdMinOiAnYScsXG5cdFx0XHRcdFx0XHTHoTogJ2EnLFxuXHRcdFx0XHRcdFx0w6Q6ICdhJyxcblx0XHRcdFx0XHRcdMefOiAnYScsXG5cdFx0XHRcdFx0XHThuqM6ICdhJyxcblx0XHRcdFx0XHRcdMOlOiAnYScsXG5cdFx0XHRcdFx0XHTHuzogJ2EnLFxuXHRcdFx0XHRcdFx0x446ICdhJyxcblx0XHRcdFx0XHRcdMiBOiAnYScsXG5cdFx0XHRcdFx0XHTIgzogJ2EnLFxuXHRcdFx0XHRcdFx04bqhOiAnYScsXG5cdFx0XHRcdFx0XHThuq06ICdhJyxcblx0XHRcdFx0XHRcdOG6tzogJ2EnLFxuXHRcdFx0XHRcdFx04biBOiAnYScsXG5cdFx0XHRcdFx0XHTEhTogJ2EnLFxuXHRcdFx0XHRcdFx04rGlOiAnYScsXG5cdFx0XHRcdFx0XHTJkDogJ2EnLFxuXHRcdFx0XHRcdFx06pyzOiAnYWEnLFxuXHRcdFx0XHRcdFx0w6Y6ICdhZScsXG5cdFx0XHRcdFx0XHTHvTogJ2FlJyxcblx0XHRcdFx0XHRcdMejOiAnYWUnLFxuXHRcdFx0XHRcdFx06py1OiAnYW8nLFxuXHRcdFx0XHRcdFx06py3OiAnYXUnLFxuXHRcdFx0XHRcdFx06py5OiAnYXYnLFxuXHRcdFx0XHRcdFx06py7OiAnYXYnLFxuXHRcdFx0XHRcdFx06py9OiAnYXknLFxuXHRcdFx0XHRcdFx0J+KTkSc6ICdiJyxcblx0XHRcdFx0XHRcdO+9gjogJ2InLFxuXHRcdFx0XHRcdFx04biDOiAnYicsXG5cdFx0XHRcdFx0XHThuIU6ICdiJyxcblx0XHRcdFx0XHRcdOG4hzogJ2InLFxuXHRcdFx0XHRcdFx0xoA6ICdiJyxcblx0XHRcdFx0XHRcdMaDOiAnYicsXG5cdFx0XHRcdFx0XHTJkzogJ2InLFxuXHRcdFx0XHRcdFx0J+KTkic6ICdjJyxcblx0XHRcdFx0XHRcdO+9gzogJ2MnLFxuXHRcdFx0XHRcdFx0xIc6ICdjJyxcblx0XHRcdFx0XHRcdMSJOiAnYycsXG5cdFx0XHRcdFx0XHTEizogJ2MnLFxuXHRcdFx0XHRcdFx0xI06ICdjJyxcblx0XHRcdFx0XHRcdMOnOiAnYycsXG5cdFx0XHRcdFx0XHThuIk6ICdjJyxcblx0XHRcdFx0XHRcdMaIOiAnYycsXG5cdFx0XHRcdFx0XHTIvDogJ2MnLFxuXHRcdFx0XHRcdFx06py/OiAnYycsXG5cdFx0XHRcdFx0XHTihoQ6ICdjJyxcblx0XHRcdFx0XHRcdCfik5MnOiAnZCcsXG5cdFx0XHRcdFx0XHTvvYQ6ICdkJyxcblx0XHRcdFx0XHRcdOG4izogJ2QnLFxuXHRcdFx0XHRcdFx0xI86ICdkJyxcblx0XHRcdFx0XHRcdOG4jTogJ2QnLFxuXHRcdFx0XHRcdFx04biROiAnZCcsXG5cdFx0XHRcdFx0XHThuJM6ICdkJyxcblx0XHRcdFx0XHRcdOG4jzogJ2QnLFxuXHRcdFx0XHRcdFx0xJE6ICdkJyxcblx0XHRcdFx0XHRcdMaMOiAnZCcsXG5cdFx0XHRcdFx0XHTJljogJ2QnLFxuXHRcdFx0XHRcdFx0yZc6ICdkJyxcblx0XHRcdFx0XHRcdOqdujogJ2QnLFxuXHRcdFx0XHRcdFx0x7M6ICdkeicsXG5cdFx0XHRcdFx0XHTHhjogJ2R6Jyxcblx0XHRcdFx0XHRcdCfik5QnOiAnZScsXG5cdFx0XHRcdFx0XHTvvYU6ICdlJyxcblx0XHRcdFx0XHRcdMOoOiAnZScsXG5cdFx0XHRcdFx0XHTDqTogJ2UnLFxuXHRcdFx0XHRcdFx0w6o6ICdlJyxcblx0XHRcdFx0XHRcdOG7gTogJ2UnLFxuXHRcdFx0XHRcdFx04bq/OiAnZScsXG5cdFx0XHRcdFx0XHThu4U6ICdlJyxcblx0XHRcdFx0XHRcdOG7gzogJ2UnLFxuXHRcdFx0XHRcdFx04bq9OiAnZScsXG5cdFx0XHRcdFx0XHTEkzogJ2UnLFxuXHRcdFx0XHRcdFx04biVOiAnZScsXG5cdFx0XHRcdFx0XHThuJc6ICdlJyxcblx0XHRcdFx0XHRcdMSVOiAnZScsXG5cdFx0XHRcdFx0XHTElzogJ2UnLFxuXHRcdFx0XHRcdFx0w6s6ICdlJyxcblx0XHRcdFx0XHRcdOG6uzogJ2UnLFxuXHRcdFx0XHRcdFx0xJs6ICdlJyxcblx0XHRcdFx0XHRcdMiFOiAnZScsXG5cdFx0XHRcdFx0XHTIhzogJ2UnLFxuXHRcdFx0XHRcdFx04bq5OiAnZScsXG5cdFx0XHRcdFx0XHThu4c6ICdlJyxcblx0XHRcdFx0XHRcdMipOiAnZScsXG5cdFx0XHRcdFx0XHThuJ06ICdlJyxcblx0XHRcdFx0XHRcdMSZOiAnZScsXG5cdFx0XHRcdFx0XHThuJk6ICdlJyxcblx0XHRcdFx0XHRcdOG4mzogJ2UnLFxuXHRcdFx0XHRcdFx0yYc6ICdlJyxcblx0XHRcdFx0XHRcdMmbOiAnZScsXG5cdFx0XHRcdFx0XHTHnTogJ2UnLFxuXHRcdFx0XHRcdFx0J+KTlSc6ICdmJyxcblx0XHRcdFx0XHRcdO+9hjogJ2YnLFxuXHRcdFx0XHRcdFx04bifOiAnZicsXG5cdFx0XHRcdFx0XHTGkjogJ2YnLFxuXHRcdFx0XHRcdFx06p28OiAnZicsXG5cdFx0XHRcdFx0XHQn4pOWJzogJ2cnLFxuXHRcdFx0XHRcdFx0772HOiAnZycsXG5cdFx0XHRcdFx0XHTHtTogJ2cnLFxuXHRcdFx0XHRcdFx0xJ06ICdnJyxcblx0XHRcdFx0XHRcdOG4oTogJ2cnLFxuXHRcdFx0XHRcdFx0xJ86ICdnJyxcblx0XHRcdFx0XHRcdMShOiAnZycsXG5cdFx0XHRcdFx0XHTHpzogJ2cnLFxuXHRcdFx0XHRcdFx0xKM6ICdnJyxcblx0XHRcdFx0XHRcdMelOiAnZycsXG5cdFx0XHRcdFx0XHTJoDogJ2cnLFxuXHRcdFx0XHRcdFx06p6hOiAnZycsXG5cdFx0XHRcdFx0XHThtbk6ICdnJyxcblx0XHRcdFx0XHRcdOqdvzogJ2cnLFxuXHRcdFx0XHRcdFx0J+KTlyc6ICdoJyxcblx0XHRcdFx0XHRcdO+9iDogJ2gnLFxuXHRcdFx0XHRcdFx0xKU6ICdoJyxcblx0XHRcdFx0XHRcdOG4ozogJ2gnLFxuXHRcdFx0XHRcdFx04binOiAnaCcsXG5cdFx0XHRcdFx0XHTInzogJ2gnLFxuXHRcdFx0XHRcdFx04bilOiAnaCcsXG5cdFx0XHRcdFx0XHThuKk6ICdoJyxcblx0XHRcdFx0XHRcdOG4qzogJ2gnLFxuXHRcdFx0XHRcdFx04bqWOiAnaCcsXG5cdFx0XHRcdFx0XHTEpzogJ2gnLFxuXHRcdFx0XHRcdFx04rGoOiAnaCcsXG5cdFx0XHRcdFx0XHTisbY6ICdoJyxcblx0XHRcdFx0XHRcdMmlOiAnaCcsXG5cdFx0XHRcdFx0XHTGlTogJ2h2Jyxcblx0XHRcdFx0XHRcdCfik5gnOiAnaScsXG5cdFx0XHRcdFx0XHTvvYk6ICdpJyxcblx0XHRcdFx0XHRcdMOsOiAnaScsXG5cdFx0XHRcdFx0XHTDrTogJ2knLFxuXHRcdFx0XHRcdFx0w646ICdpJyxcblx0XHRcdFx0XHRcdMSpOiAnaScsXG5cdFx0XHRcdFx0XHTEqzogJ2knLFxuXHRcdFx0XHRcdFx0xK06ICdpJyxcblx0XHRcdFx0XHRcdMOvOiAnaScsXG5cdFx0XHRcdFx0XHThuK86ICdpJyxcblx0XHRcdFx0XHRcdOG7iTogJ2knLFxuXHRcdFx0XHRcdFx0x5A6ICdpJyxcblx0XHRcdFx0XHRcdMiJOiAnaScsXG5cdFx0XHRcdFx0XHTIizogJ2knLFxuXHRcdFx0XHRcdFx04buLOiAnaScsXG5cdFx0XHRcdFx0XHTErzogJ2knLFxuXHRcdFx0XHRcdFx04bitOiAnaScsXG5cdFx0XHRcdFx0XHTJqDogJ2knLFxuXHRcdFx0XHRcdFx0xLE6ICdpJyxcblx0XHRcdFx0XHRcdCfik5knOiAnaicsXG5cdFx0XHRcdFx0XHTvvYo6ICdqJyxcblx0XHRcdFx0XHRcdMS1OiAnaicsXG5cdFx0XHRcdFx0XHTHsDogJ2onLFxuXHRcdFx0XHRcdFx0yYk6ICdqJyxcblx0XHRcdFx0XHRcdCfik5onOiAnaycsXG5cdFx0XHRcdFx0XHTvvYs6ICdrJyxcblx0XHRcdFx0XHRcdOG4sTogJ2snLFxuXHRcdFx0XHRcdFx0x6k6ICdrJyxcblx0XHRcdFx0XHRcdOG4szogJ2snLFxuXHRcdFx0XHRcdFx0xLc6ICdrJyxcblx0XHRcdFx0XHRcdOG4tTogJ2snLFxuXHRcdFx0XHRcdFx0xpk6ICdrJyxcblx0XHRcdFx0XHRcdOKxqjogJ2snLFxuXHRcdFx0XHRcdFx06p2BOiAnaycsXG5cdFx0XHRcdFx0XHTqnYM6ICdrJyxcblx0XHRcdFx0XHRcdOqdhTogJ2snLFxuXHRcdFx0XHRcdFx06p6jOiAnaycsXG5cdFx0XHRcdFx0XHQn4pObJzogJ2wnLFxuXHRcdFx0XHRcdFx0772MOiAnbCcsXG5cdFx0XHRcdFx0XHTFgDogJ2wnLFxuXHRcdFx0XHRcdFx0xLo6ICdsJyxcblx0XHRcdFx0XHRcdMS+OiAnbCcsXG5cdFx0XHRcdFx0XHThuLc6ICdsJyxcblx0XHRcdFx0XHRcdOG4uTogJ2wnLFxuXHRcdFx0XHRcdFx0xLw6ICdsJyxcblx0XHRcdFx0XHRcdOG4vTogJ2wnLFxuXHRcdFx0XHRcdFx04bi7OiAnbCcsXG5cdFx0XHRcdFx0XHTFvzogJ2wnLFxuXHRcdFx0XHRcdFx0xYI6ICdsJyxcblx0XHRcdFx0XHRcdMaaOiAnbCcsXG5cdFx0XHRcdFx0XHTJqzogJ2wnLFxuXHRcdFx0XHRcdFx04rGhOiAnbCcsXG5cdFx0XHRcdFx0XHTqnYk6ICdsJyxcblx0XHRcdFx0XHRcdOqegTogJ2wnLFxuXHRcdFx0XHRcdFx06p2HOiAnbCcsXG5cdFx0XHRcdFx0XHTHiTogJ2xqJyxcblx0XHRcdFx0XHRcdCfik5wnOiAnbScsXG5cdFx0XHRcdFx0XHTvvY06ICdtJyxcblx0XHRcdFx0XHRcdOG4vzogJ20nLFxuXHRcdFx0XHRcdFx04bmBOiAnbScsXG5cdFx0XHRcdFx0XHThuYM6ICdtJyxcblx0XHRcdFx0XHRcdMmxOiAnbScsXG5cdFx0XHRcdFx0XHTJrzogJ20nLFxuXHRcdFx0XHRcdFx0J+KTnSc6ICduJyxcblx0XHRcdFx0XHRcdO+9jjogJ24nLFxuXHRcdFx0XHRcdFx0x7k6ICduJyxcblx0XHRcdFx0XHRcdMWEOiAnbicsXG5cdFx0XHRcdFx0XHTDsTogJ24nLFxuXHRcdFx0XHRcdFx04bmFOiAnbicsXG5cdFx0XHRcdFx0XHTFiDogJ24nLFxuXHRcdFx0XHRcdFx04bmHOiAnbicsXG5cdFx0XHRcdFx0XHTFhjogJ24nLFxuXHRcdFx0XHRcdFx04bmLOiAnbicsXG5cdFx0XHRcdFx0XHThuYk6ICduJyxcblx0XHRcdFx0XHRcdMaeOiAnbicsXG5cdFx0XHRcdFx0XHTJsjogJ24nLFxuXHRcdFx0XHRcdFx0xYk6ICduJyxcblx0XHRcdFx0XHRcdOqekTogJ24nLFxuXHRcdFx0XHRcdFx06p6lOiAnbicsXG5cdFx0XHRcdFx0XHTHjDogJ25qJyxcblx0XHRcdFx0XHRcdCfik54nOiAnbycsXG5cdFx0XHRcdFx0XHTvvY86ICdvJyxcblx0XHRcdFx0XHRcdMOyOiAnbycsXG5cdFx0XHRcdFx0XHTDszogJ28nLFxuXHRcdFx0XHRcdFx0w7Q6ICdvJyxcblx0XHRcdFx0XHRcdOG7kzogJ28nLFxuXHRcdFx0XHRcdFx04buROiAnbycsXG5cdFx0XHRcdFx0XHThu5c6ICdvJyxcblx0XHRcdFx0XHRcdOG7lTogJ28nLFxuXHRcdFx0XHRcdFx0w7U6ICdvJyxcblx0XHRcdFx0XHRcdOG5jTogJ28nLFxuXHRcdFx0XHRcdFx0yK06ICdvJyxcblx0XHRcdFx0XHRcdOG5jzogJ28nLFxuXHRcdFx0XHRcdFx0xY06ICdvJyxcblx0XHRcdFx0XHRcdOG5kTogJ28nLFxuXHRcdFx0XHRcdFx04bmTOiAnbycsXG5cdFx0XHRcdFx0XHTFjzogJ28nLFxuXHRcdFx0XHRcdFx0yK86ICdvJyxcblx0XHRcdFx0XHRcdMixOiAnbycsXG5cdFx0XHRcdFx0XHTDtjogJ28nLFxuXHRcdFx0XHRcdFx0yKs6ICdvJyxcblx0XHRcdFx0XHRcdOG7jzogJ28nLFxuXHRcdFx0XHRcdFx0xZE6ICdvJyxcblx0XHRcdFx0XHRcdMeSOiAnbycsXG5cdFx0XHRcdFx0XHTIjTogJ28nLFxuXHRcdFx0XHRcdFx0yI86ICdvJyxcblx0XHRcdFx0XHRcdMahOiAnbycsXG5cdFx0XHRcdFx0XHThu506ICdvJyxcblx0XHRcdFx0XHRcdOG7mzogJ28nLFxuXHRcdFx0XHRcdFx04buhOiAnbycsXG5cdFx0XHRcdFx0XHThu586ICdvJyxcblx0XHRcdFx0XHRcdOG7ozogJ28nLFxuXHRcdFx0XHRcdFx04buNOiAnbycsXG5cdFx0XHRcdFx0XHThu5k6ICdvJyxcblx0XHRcdFx0XHRcdMerOiAnbycsXG5cdFx0XHRcdFx0XHTHrTogJ28nLFxuXHRcdFx0XHRcdFx0w7g6ICdvJyxcblx0XHRcdFx0XHRcdMe/OiAnbycsXG5cdFx0XHRcdFx0XHTJlDogJ28nLFxuXHRcdFx0XHRcdFx06p2LOiAnbycsXG5cdFx0XHRcdFx0XHTqnY06ICdvJyxcblx0XHRcdFx0XHRcdMm1OiAnbycsXG5cdFx0XHRcdFx0XHTFkzogJ29lJyxcblx0XHRcdFx0XHRcdMajOiAnb2knLFxuXHRcdFx0XHRcdFx0yKM6ICdvdScsXG5cdFx0XHRcdFx0XHTqnY86ICdvbycsXG5cdFx0XHRcdFx0XHQn4pOfJzogJ3AnLFxuXHRcdFx0XHRcdFx0772QOiAncCcsXG5cdFx0XHRcdFx0XHThuZU6ICdwJyxcblx0XHRcdFx0XHRcdOG5lzogJ3AnLFxuXHRcdFx0XHRcdFx0xqU6ICdwJyxcblx0XHRcdFx0XHRcdOG1vTogJ3AnLFxuXHRcdFx0XHRcdFx06p2ROiAncCcsXG5cdFx0XHRcdFx0XHTqnZM6ICdwJyxcblx0XHRcdFx0XHRcdOqdlTogJ3AnLFxuXHRcdFx0XHRcdFx0J+KToCc6ICdxJyxcblx0XHRcdFx0XHRcdO+9kTogJ3EnLFxuXHRcdFx0XHRcdFx0yYs6ICdxJyxcblx0XHRcdFx0XHRcdOqdlzogJ3EnLFxuXHRcdFx0XHRcdFx06p2ZOiAncScsXG5cdFx0XHRcdFx0XHQn4pOhJzogJ3InLFxuXHRcdFx0XHRcdFx0772SOiAncicsXG5cdFx0XHRcdFx0XHTFlTogJ3InLFxuXHRcdFx0XHRcdFx04bmZOiAncicsXG5cdFx0XHRcdFx0XHTFmTogJ3InLFxuXHRcdFx0XHRcdFx0yJE6ICdyJyxcblx0XHRcdFx0XHRcdMiTOiAncicsXG5cdFx0XHRcdFx0XHThuZs6ICdyJyxcblx0XHRcdFx0XHRcdOG5nTogJ3InLFxuXHRcdFx0XHRcdFx0xZc6ICdyJyxcblx0XHRcdFx0XHRcdOG5nzogJ3InLFxuXHRcdFx0XHRcdFx0yY06ICdyJyxcblx0XHRcdFx0XHRcdMm9OiAncicsXG5cdFx0XHRcdFx0XHTqnZs6ICdyJyxcblx0XHRcdFx0XHRcdOqepzogJ3InLFxuXHRcdFx0XHRcdFx06p6DOiAncicsXG5cdFx0XHRcdFx0XHQn4pOiJzogJ3MnLFxuXHRcdFx0XHRcdFx0772TOiAncycsXG5cdFx0XHRcdFx0XHTDnzogJ3MnLFxuXHRcdFx0XHRcdFx0xZs6ICdzJyxcblx0XHRcdFx0XHRcdOG5pTogJ3MnLFxuXHRcdFx0XHRcdFx0xZ06ICdzJyxcblx0XHRcdFx0XHRcdOG5oTogJ3MnLFxuXHRcdFx0XHRcdFx0xaE6ICdzJyxcblx0XHRcdFx0XHRcdOG5pzogJ3MnLFxuXHRcdFx0XHRcdFx04bmjOiAncycsXG5cdFx0XHRcdFx0XHThuak6ICdzJyxcblx0XHRcdFx0XHRcdMiZOiAncycsXG5cdFx0XHRcdFx0XHTFnzogJ3MnLFxuXHRcdFx0XHRcdFx0yL86ICdzJyxcblx0XHRcdFx0XHRcdOqeqTogJ3MnLFxuXHRcdFx0XHRcdFx06p6FOiAncycsXG5cdFx0XHRcdFx0XHThups6ICdzJyxcblx0XHRcdFx0XHRcdCfik6MnOiAndCcsXG5cdFx0XHRcdFx0XHTvvZQ6ICd0Jyxcblx0XHRcdFx0XHRcdOG5qzogJ3QnLFxuXHRcdFx0XHRcdFx04bqXOiAndCcsXG5cdFx0XHRcdFx0XHTFpTogJ3QnLFxuXHRcdFx0XHRcdFx04bmtOiAndCcsXG5cdFx0XHRcdFx0XHTImzogJ3QnLFxuXHRcdFx0XHRcdFx0xaM6ICd0Jyxcblx0XHRcdFx0XHRcdOG5sTogJ3QnLFxuXHRcdFx0XHRcdFx04bmvOiAndCcsXG5cdFx0XHRcdFx0XHTFpzogJ3QnLFxuXHRcdFx0XHRcdFx0xq06ICd0Jyxcblx0XHRcdFx0XHRcdMqIOiAndCcsXG5cdFx0XHRcdFx0XHTisaY6ICd0Jyxcblx0XHRcdFx0XHRcdOqehzogJ3QnLFxuXHRcdFx0XHRcdFx06pypOiAndHonLFxuXHRcdFx0XHRcdFx0J+KTpCc6ICd1Jyxcblx0XHRcdFx0XHRcdO+9lTogJ3UnLFxuXHRcdFx0XHRcdFx0w7k6ICd1Jyxcblx0XHRcdFx0XHRcdMO6OiAndScsXG5cdFx0XHRcdFx0XHTDuzogJ3UnLFxuXHRcdFx0XHRcdFx0xak6ICd1Jyxcblx0XHRcdFx0XHRcdOG5uTogJ3UnLFxuXHRcdFx0XHRcdFx0xas6ICd1Jyxcblx0XHRcdFx0XHRcdOG5uzogJ3UnLFxuXHRcdFx0XHRcdFx0xa06ICd1Jyxcblx0XHRcdFx0XHRcdMO8OiAndScsXG5cdFx0XHRcdFx0XHTHnDogJ3UnLFxuXHRcdFx0XHRcdFx0x5g6ICd1Jyxcblx0XHRcdFx0XHRcdMeWOiAndScsXG5cdFx0XHRcdFx0XHTHmjogJ3UnLFxuXHRcdFx0XHRcdFx04bunOiAndScsXG5cdFx0XHRcdFx0XHTFrzogJ3UnLFxuXHRcdFx0XHRcdFx0xbE6ICd1Jyxcblx0XHRcdFx0XHRcdMeUOiAndScsXG5cdFx0XHRcdFx0XHTIlTogJ3UnLFxuXHRcdFx0XHRcdFx0yJc6ICd1Jyxcblx0XHRcdFx0XHRcdMawOiAndScsXG5cdFx0XHRcdFx0XHThu6s6ICd1Jyxcblx0XHRcdFx0XHRcdOG7qTogJ3UnLFxuXHRcdFx0XHRcdFx04buvOiAndScsXG5cdFx0XHRcdFx0XHThu606ICd1Jyxcblx0XHRcdFx0XHRcdOG7sTogJ3UnLFxuXHRcdFx0XHRcdFx04bulOiAndScsXG5cdFx0XHRcdFx0XHThubM6ICd1Jyxcblx0XHRcdFx0XHRcdMWzOiAndScsXG5cdFx0XHRcdFx0XHThubc6ICd1Jyxcblx0XHRcdFx0XHRcdOG5tTogJ3UnLFxuXHRcdFx0XHRcdFx0yok6ICd1Jyxcblx0XHRcdFx0XHRcdCfik6UnOiAndicsXG5cdFx0XHRcdFx0XHTvvZY6ICd2Jyxcblx0XHRcdFx0XHRcdOG5vTogJ3YnLFxuXHRcdFx0XHRcdFx04bm/OiAndicsXG5cdFx0XHRcdFx0XHTKizogJ3YnLFxuXHRcdFx0XHRcdFx06p2fOiAndicsXG5cdFx0XHRcdFx0XHTKjDogJ3YnLFxuXHRcdFx0XHRcdFx06p2hOiAndnknLFxuXHRcdFx0XHRcdFx0J+KTpic6ICd3Jyxcblx0XHRcdFx0XHRcdO+9lzogJ3cnLFxuXHRcdFx0XHRcdFx04bqBOiAndycsXG5cdFx0XHRcdFx0XHThuoM6ICd3Jyxcblx0XHRcdFx0XHRcdMW1OiAndycsXG5cdFx0XHRcdFx0XHThuoc6ICd3Jyxcblx0XHRcdFx0XHRcdOG6hTogJ3cnLFxuXHRcdFx0XHRcdFx04bqYOiAndycsXG5cdFx0XHRcdFx0XHThuok6ICd3Jyxcblx0XHRcdFx0XHRcdOKxszogJ3cnLFxuXHRcdFx0XHRcdFx0J+KTpyc6ICd4Jyxcblx0XHRcdFx0XHRcdO+9mDogJ3gnLFxuXHRcdFx0XHRcdFx04bqLOiAneCcsXG5cdFx0XHRcdFx0XHThuo06ICd4Jyxcblx0XHRcdFx0XHRcdCfik6gnOiAneScsXG5cdFx0XHRcdFx0XHTvvZk6ICd5Jyxcblx0XHRcdFx0XHRcdOG7szogJ3knLFxuXHRcdFx0XHRcdFx0w706ICd5Jyxcblx0XHRcdFx0XHRcdMW3OiAneScsXG5cdFx0XHRcdFx0XHThu7k6ICd5Jyxcblx0XHRcdFx0XHRcdMizOiAneScsXG5cdFx0XHRcdFx0XHThuo86ICd5Jyxcblx0XHRcdFx0XHRcdMO/OiAneScsXG5cdFx0XHRcdFx0XHThu7c6ICd5Jyxcblx0XHRcdFx0XHRcdOG6mTogJ3knLFxuXHRcdFx0XHRcdFx04bu1OiAneScsXG5cdFx0XHRcdFx0XHTGtDogJ3knLFxuXHRcdFx0XHRcdFx0yY86ICd5Jyxcblx0XHRcdFx0XHRcdOG7vzogJ3knLFxuXHRcdFx0XHRcdFx0J+KTqSc6ICd6Jyxcblx0XHRcdFx0XHRcdO+9mjogJ3onLFxuXHRcdFx0XHRcdFx0xbo6ICd6Jyxcblx0XHRcdFx0XHRcdOG6kTogJ3onLFxuXHRcdFx0XHRcdFx0xbw6ICd6Jyxcblx0XHRcdFx0XHRcdMW+OiAneicsXG5cdFx0XHRcdFx0XHThupM6ICd6Jyxcblx0XHRcdFx0XHRcdOG6lTogJ3onLFxuXHRcdFx0XHRcdFx0xrY6ICd6Jyxcblx0XHRcdFx0XHRcdMilOiAneicsXG5cdFx0XHRcdFx0XHTJgDogJ3onLFxuXHRcdFx0XHRcdFx04rGsOiAneicsXG5cdFx0XHRcdFx0XHTqnaM6ICd6Jyxcblx0XHRcdFx0XHRcdM6GOiAnzpEnLFxuXHRcdFx0XHRcdFx0zog6ICfOlScsXG5cdFx0XHRcdFx0XHTOiTogJ86XJyxcblx0XHRcdFx0XHRcdM6KOiAnzpknLFxuXHRcdFx0XHRcdFx0zqo6ICfOmScsXG5cdFx0XHRcdFx0XHTOjDogJ86fJyxcblx0XHRcdFx0XHRcdM6OOiAnzqUnLFxuXHRcdFx0XHRcdFx0zqs6ICfOpScsXG5cdFx0XHRcdFx0XHTOjzogJ86pJyxcblx0XHRcdFx0XHRcdM6sOiAnzrEnLFxuXHRcdFx0XHRcdFx0zq06ICfOtScsXG5cdFx0XHRcdFx0XHTOrjogJ863Jyxcblx0XHRcdFx0XHRcdM6vOiAnzrknLFxuXHRcdFx0XHRcdFx0z4o6ICfOuScsXG5cdFx0XHRcdFx0XHTOkDogJ865Jyxcblx0XHRcdFx0XHRcdM+MOiAnzr8nLFxuXHRcdFx0XHRcdFx0z406ICfPhScsXG5cdFx0XHRcdFx0XHTPizogJ8+FJyxcblx0XHRcdFx0XHRcdM6wOiAnz4UnLFxuXHRcdFx0XHRcdFx0z446ICfPiScsXG5cdFx0XHRcdFx0XHTPgjogJ8+DJyxcblx0XHRcdFx0XHRcdCfigJknOiBcIidcIixcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9iYXNlJywgWycuLi91dGlscyddLCBmdW5jdGlvbiAocikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIG4oZSwgdCkge1xuXHRcdFx0XHRcdFx0bi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdHIuRXh0ZW5kKG4sIHIuT2JzZXJ2YWJsZSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBjdXJyZW50YCBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXMuJyk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBxdWVyeWAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLicpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlLCB0KSB7fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5nZW5lcmF0ZVJlc3VsdElkID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSBlLmlkICsgJy1yZXN1bHQtJztcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQobiArPSByLmdlbmVyYXRlQ2hhcnMoNCkpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gdC5pZCA/IChuICs9ICctJyArIHQuaWQudG9TdHJpbmcoKSkgOiAobiArPSAnLScgKyByLmdlbmVyYXRlQ2hhcnMoNCkpLFxuXHRcdFx0XHRcdFx0XHRcdG5cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0blxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kYXRhL3NlbGVjdCcsIFsnLi9iYXNlJywgJy4uL3V0aWxzJywgJ2pxdWVyeSddLCBmdW5jdGlvbiAoZSwgYSwgbCkge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIG4oZSwgdCkge1xuXHRcdFx0XHRcdFx0KHRoaXMuJGVsZW1lbnQgPSBlKSwgKHRoaXMub3B0aW9ucyA9IHQpLCBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0YS5FeHRlbmQobiwgZSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gW10sXG5cdFx0XHRcdFx0XHRcdFx0ciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQuZmluZCgnOnNlbGVjdGVkJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBsKHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dCA9IHIuaXRlbShlKTtcblx0XHRcdFx0XHRcdFx0XHRuLnB1c2godCk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUobik7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbyA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdGlmICgoKGkuc2VsZWN0ZWQgPSAhMCksIGwoaS5lbGVtZW50KS5pcygnb3B0aW9uJykpKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoaS5lbGVtZW50LnNlbGVjdGVkID0gITApLCB2b2lkIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLiRlbGVtZW50LnByb3AoJ211bHRpcGxlJykpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jdXJyZW50KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0KGkgPSBbaV0pLnB1c2guYXBwbHkoaSwgZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBuID0gMDsgbiA8IGkubGVuZ3RoOyBuKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSBpW25dLmlkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQtMSA9PT0gbC5pbkFycmF5KHIsIHQpICYmIHQucHVzaChyKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdG8uJGVsZW1lbnQudmFsKHQpLCBvLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZSA9IGkuaWQ7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC52YWwoZSksIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLnVuc2VsZWN0ID0gZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG8gPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy4kZWxlbWVudC5wcm9wKCdtdWx0aXBsZScpKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCgoaS5zZWxlY3RlZCA9ICExKSwgbChpLmVsZW1lbnQpLmlzKCdvcHRpb24nKSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKGkuZWxlbWVudC5zZWxlY3RlZCA9ICExKSwgdm9pZCB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY3VycmVudChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdCA9IFtdLCBuID0gMDsgbiA8IGUubGVuZ3RoOyBuKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSBlW25dLmlkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyICE9PSBpLmlkICYmIC0xID09PSBsLmluQXJyYXkociwgdCkgJiYgdC5wdXNoKHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0by4kZWxlbWVudC52YWwodCksIG8uJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdCh0aGlzLmNvbnRhaW5lciA9IGUpLm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdG4uc2VsZWN0KGUuZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdGUub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG4udW5zZWxlY3QoZS5kYXRhKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQuZmluZCgnKicpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGEuUmVtb3ZlRGF0YSh0aGlzKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChyLCBlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBpID0gW10sXG5cdFx0XHRcdFx0XHRcdFx0byA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZSA9IGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGUuaXMoJ29wdGlvbicpIHx8IGUuaXMoJ29wdGdyb3VwJykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gby5pdGVtKGUpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuID0gby5tYXRjaGVzKHIsIHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPT0gbiAmJiBpLnB1c2gobik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRlKHtyZXN1bHRzOiBpfSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5hZGRPcHRpb25zID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0YS5hcHBlbmRNYW55KHRoaXMuJGVsZW1lbnQsIGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUub3B0aW9uID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQ7XG5cdFx0XHRcdFx0XHRcdGUuY2hpbGRyZW5cblx0XHRcdFx0XHRcdFx0XHQ/ICgodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJykpLmxhYmVsID0gZS50ZXh0KVxuXHRcdFx0XHRcdFx0XHRcdDogdm9pZCAwICE9PSAodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpKS50ZXh0Q29udGVudFxuXHRcdFx0XHRcdFx0XHRcdFx0PyAodC50ZXh0Q29udGVudCA9IGUudGV4dClcblx0XHRcdFx0XHRcdFx0XHRcdDogKHQuaW5uZXJUZXh0ID0gZS50ZXh0KSxcblx0XHRcdFx0XHRcdFx0XHR2b2lkIDAgIT09IGUuaWQgJiYgKHQudmFsdWUgPSBlLmlkKSxcblx0XHRcdFx0XHRcdFx0XHRlLmRpc2FibGVkICYmICh0LmRpc2FibGVkID0gITApLFxuXHRcdFx0XHRcdFx0XHRcdGUuc2VsZWN0ZWQgJiYgKHQuc2VsZWN0ZWQgPSAhMCksXG5cdFx0XHRcdFx0XHRcdFx0ZS50aXRsZSAmJiAodC50aXRsZSA9IGUudGl0bGUpO1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IGwodCksXG5cdFx0XHRcdFx0XHRcdFx0ciA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0oZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoci5lbGVtZW50ID0gdCksIGEuU3RvcmVEYXRhKHQsICdkYXRhJywgciksIG47XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSB7fTtcblx0XHRcdFx0XHRcdFx0aWYgKG51bGwgIT0gKHQgPSBhLkdldERhdGEoZVswXSwgJ2RhdGEnKSkpIHJldHVybiB0O1xuXHRcdFx0XHRcdFx0XHRpZiAoZS5pcygnb3B0aW9uJykpXG5cdFx0XHRcdFx0XHRcdFx0dCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBlLnZhbCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogZS50ZXh0KCksXG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogZS5wcm9wKCdkaXNhYmxlZCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IGUucHJvcCgnc2VsZWN0ZWQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBlLnByb3AoJ3RpdGxlJyksXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoZS5pcygnb3B0Z3JvdXAnKSkge1xuXHRcdFx0XHRcdFx0XHRcdHQgPSB7dGV4dDogZS5wcm9wKCdsYWJlbCcpLCBjaGlsZHJlbjogW10sIHRpdGxlOiBlLnByb3AoJ3RpdGxlJyl9O1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIG4gPSBlLmNoaWxkcmVuKCdvcHRpb24nKSwgciA9IFtdLCBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0gbChuW2ldKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cyA9IHRoaXMuaXRlbShvKTtcblx0XHRcdFx0XHRcdFx0XHRcdHIucHVzaChzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dC5jaGlsZHJlbiA9IHI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuICgodCA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0odCkpLmVsZW1lbnQgPSBlWzBdKSwgYS5TdG9yZURhdGEoZVswXSwgJ2RhdGEnLCB0KSwgdDtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLl9ub3JtYWxpemVJdGVtID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0ZSAhPT0gT2JqZWN0KGUpICYmIChlID0ge2lkOiBlLCB0ZXh0OiBlfSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSAoZSA9IGwuZXh0ZW5kKHt9LCB7dGV4dDogJyd9LCBlKSkuaWQgJiYgKGUuaWQgPSBlLmlkLnRvU3RyaW5nKCkpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gZS50ZXh0ICYmIChlLnRleHQgPSBlLnRleHQudG9TdHJpbmcoKSksXG5cdFx0XHRcdFx0XHRcdFx0bnVsbCA9PSBlLl9yZXN1bHRJZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5pZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSB0aGlzLmNvbnRhaW5lciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KGUuX3Jlc3VsdElkID0gdGhpcy5nZW5lcmF0ZVJlc3VsdElkKHRoaXMuY29udGFpbmVyLCBlKSksXG5cdFx0XHRcdFx0XHRcdFx0bC5leHRlbmQoe30sIHtzZWxlY3RlZDogITEsIGRpc2FibGVkOiAhMX0sIGUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoJ21hdGNoZXInKShlLCB0KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0blxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kYXRhL2FycmF5JywgWycuL3NlbGVjdCcsICcuLi91dGlscycsICdqcXVlcnknXSwgZnVuY3Rpb24gKGUsIGYsIGcpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiByKGUsIHQpIHtcblx0XHRcdFx0XHRcdCh0aGlzLl9kYXRhVG9Db252ZXJ0ID0gdC5nZXQoJ2RhdGEnKSB8fCBbXSksIHIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgZSwgdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRmLkV4dGVuZChyLCBlKSxcblx0XHRcdFx0XHRcdChyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0ci5fX3N1cGVyX18uYmluZC5jYWxsKHRoaXMsIGUsIHQpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWRkT3B0aW9ucyh0aGlzLmNvbnZlcnRUb09wdGlvbnModGhpcy5fZGF0YVRvQ29udmVydCkpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoci5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gKG4pIHtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ29wdGlvbicpLmZpbHRlcihmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0LnZhbHVlID09IG4uaWQudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdDAgPT09IGUubGVuZ3RoICYmICgoZSA9IHRoaXMub3B0aW9uKG4pKSwgdGhpcy5hZGRPcHRpb25zKGUpKSxcblx0XHRcdFx0XHRcdFx0XHRyLl9fc3VwZXJfXy5zZWxlY3QuY2FsbCh0aGlzLCBuKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHIucHJvdG90eXBlLmNvbnZlcnRUb09wdGlvbnMgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0biA9IHRoaXMuJGVsZW1lbnQuZmluZCgnb3B0aW9uJyksXG5cdFx0XHRcdFx0XHRcdFx0ciA9IG5cblx0XHRcdFx0XHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdC5pdGVtKGcodGhpcykpLmlkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdC5nZXQoKSxcblx0XHRcdFx0XHRcdFx0XHRpID0gW107XG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIG8oZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZyh0aGlzKS52YWwoKSA9PSBlLmlkO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCBlLmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGEgPSB0aGlzLl9ub3JtYWxpemVJdGVtKGVbc10pO1xuXHRcdFx0XHRcdFx0XHRcdGlmICgwIDw9IGcuaW5BcnJheShhLmlkLCByKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGwgPSBuLmZpbHRlcihvKGEpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YyA9IHRoaXMuaXRlbShsKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dSA9IGcuZXh0ZW5kKCEwLCB7fSwgYSwgYyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGQgPSB0aGlzLm9wdGlvbih1KTtcblx0XHRcdFx0XHRcdFx0XHRcdGwucmVwbGFjZVdpdGgoZCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwID0gdGhpcy5vcHRpb24oYSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYS5jaGlsZHJlbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaCA9IHRoaXMuY29udmVydFRvT3B0aW9ucyhhLmNoaWxkcmVuKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zi5hcHBlbmRNYW55KHAsIGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aS5wdXNoKHApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0clxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kYXRhL2FqYXgnLCBbJy4vYXJyYXknLCAnLi4vdXRpbHMnLCAnanF1ZXJ5J10sIGZ1bmN0aW9uIChlLCB0LCBvKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbihlLCB0KSB7XG5cdFx0XHRcdFx0XHQodGhpcy5hamF4T3B0aW9ucyA9IHRoaXMuX2FwcGx5RGVmYXVsdHModC5nZXQoJ2FqYXgnKSkpLFxuXHRcdFx0XHRcdFx0XHRudWxsICE9IHRoaXMuYWpheE9wdGlvbnMucHJvY2Vzc1Jlc3VsdHMgJiZcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5wcm9jZXNzUmVzdWx0cyA9IHRoaXMuYWpheE9wdGlvbnMucHJvY2Vzc1Jlc3VsdHMpLFxuXHRcdFx0XHRcdFx0XHRuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIGUsIHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0dC5FeHRlbmQobiwgZSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHMgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRkYXRhOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG8uZXh0ZW5kKHt9LCBlLCB7cTogZS50ZXJtfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc3BvcnQ6IGZ1bmN0aW9uIChlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgciA9IG8uYWpheChlKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByLnRoZW4odCksIHIuZmFpbChuKSwgcjtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gby5leHRlbmQoe30sIHQsIGUsICEwKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLnByb2Nlc3NSZXN1bHRzID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGU7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChuLCByKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBpID0gdGhpcztcblx0XHRcdFx0XHRcdFx0bnVsbCAhPSB0aGlzLl9yZXF1ZXN0ICYmXG5cdFx0XHRcdFx0XHRcdFx0KG8uaXNGdW5jdGlvbih0aGlzLl9yZXF1ZXN0LmFib3J0KSAmJiB0aGlzLl9yZXF1ZXN0LmFib3J0KCksICh0aGlzLl9yZXF1ZXN0ID0gbnVsbCkpO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IG8uZXh0ZW5kKHt0eXBlOiAnR0VUJ30sIHRoaXMuYWpheE9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRmdW5jdGlvbiBlKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlID0gdC50cmFuc3BvcnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR0LFxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBpLnByb2Nlc3NSZXN1bHRzKGUsIG4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCh0ICYmIHQucmVzdWx0cyAmJiBvLmlzQXJyYXkodC5yZXN1bHRzKSkgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdTZWxlY3QyOiBUaGUgQUpBWCByZXN1bHRzIGRpZCBub3QgcmV0dXJuIGFuIGFycmF5IGluIHRoZSBgcmVzdWx0c2Aga2V5IG9mIHRoZSByZXNwb25zZS4nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyKHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCdzdGF0dXMnIGluIGUgJiYgKDAgPT09IGUuc3RhdHVzIHx8ICcwJyA9PT0gZS5zdGF0dXMpKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGkudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywge21lc3NhZ2U6ICdlcnJvckxvYWRpbmcnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRpLl9yZXF1ZXN0ID0gZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQnZnVuY3Rpb24nID09IHR5cGVvZiB0LnVybCAmJiAodC51cmwgPSB0LnVybC5jYWxsKHRoaXMuJGVsZW1lbnQsIG4pKSxcblx0XHRcdFx0XHRcdFx0XHQnZnVuY3Rpb24nID09IHR5cGVvZiB0LmRhdGEgJiYgKHQuZGF0YSA9IHQuZGF0YS5jYWxsKHRoaXMuJGVsZW1lbnQsIG4pKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFqYXhPcHRpb25zLmRlbGF5ICYmIG51bGwgIT0gbi50ZXJtXG5cdFx0XHRcdFx0XHRcdFx0XHQ/ICh0aGlzLl9xdWVyeVRpbWVvdXQgJiYgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9xdWVyeVRpbWVvdXQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQodGhpcy5fcXVlcnlUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZSwgdGhpcy5hamF4T3B0aW9ucy5kZWxheSkpKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBlKCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdG5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGF0YS90YWdzJywgWydqcXVlcnknXSwgZnVuY3Rpb24gKHUpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdHZhciByID0gbi5nZXQoJ3RhZ3MnKSxcblx0XHRcdFx0XHRcdFx0aSA9IG4uZ2V0KCdjcmVhdGVUYWcnKTtcblx0XHRcdFx0XHRcdHZvaWQgMCAhPT0gaSAmJiAodGhpcy5jcmVhdGVUYWcgPSBpKTtcblx0XHRcdFx0XHRcdHZhciBvID0gbi5nZXQoJ2luc2VydFRhZycpO1xuXHRcdFx0XHRcdFx0aWYgKCh2b2lkIDAgIT09IG8gJiYgKHRoaXMuaW5zZXJ0VGFnID0gbyksIGUuY2FsbCh0aGlzLCB0LCBuKSwgdS5pc0FycmF5KHIpKSlcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IDA7IHMgPCByLmxlbmd0aDsgcysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGEgPSByW3NdLFxuXHRcdFx0XHRcdFx0XHRcdFx0bCA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0oYSksXG5cdFx0XHRcdFx0XHRcdFx0XHRjID0gdGhpcy5vcHRpb24obCk7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC5hcHBlbmQoYyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChlLCBjLCB1KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBkID0gdGhpcztcblx0XHRcdFx0XHRcdFx0dGhpcy5fcmVtb3ZlT2xkVGFncygpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gYy50ZXJtICYmIG51bGwgPT0gYy5wYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGUuY2FsbCh0aGlzLCBjLCBmdW5jdGlvbiBlKHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciByID0gdC5yZXN1bHRzLCBpID0gMDsgaSA8IHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0gcltpXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cyA9IG51bGwgIT0gby5jaGlsZHJlbiAmJiAhZSh7cmVzdWx0czogby5jaGlsZHJlbn0sICEwKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgoby50ZXh0IHx8ICcnKS50b1VwcGVyQ2FzZSgpID09PSAoYy50ZXJtIHx8ICcnKS50b1VwcGVyQ2FzZSgpIHx8IHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAhbiAmJiAoKHQuZGF0YSA9IHIpLCB2b2lkIHUodCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobikgcmV0dXJuICEwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhID0gZC5jcmVhdGVUYWcoYyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG51bGwgIT0gYSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGwgPSBkLm9wdGlvbihhKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGwuYXR0cignZGF0YS1zZWxlY3QyLXRhZycsICEwKSwgZC5hZGRPcHRpb25zKFtsXSksIGQuaW5zZXJ0VGFnKHIsIGEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQodC5yZXN1bHRzID0gciksIHUodCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGUuY2FsbCh0aGlzLCBjLCB1KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmNyZWF0ZVRhZyA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gdS50cmltKHQudGVybSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJyA9PT0gbiA/IG51bGwgOiB7aWQ6IG4sIHRleHQ6IG59O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuaW5zZXJ0VGFnID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dC51bnNoaWZ0KG4pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX3JlbW92ZU9sZFRhZ3MgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LmZpbmQoJ29wdGlvbltkYXRhLXNlbGVjdDItdGFnXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWQgfHwgdSh0aGlzKS5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGF0YS90b2tlbml6ZXInLCBbJ2pxdWVyeSddLCBmdW5jdGlvbiAoZCkge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIGUoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0dmFyIHIgPSBuLmdldCgndG9rZW5pemVyJyk7XG5cdFx0XHRcdFx0XHR2b2lkIDAgIT09IHIgJiYgKHRoaXMudG9rZW5pemVyID0gciksIGUuY2FsbCh0aGlzLCB0LCBuKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMsIHQsIG4pLFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLiRzZWFyY2ggPVxuXHRcdFx0XHRcdFx0XHRcdFx0dC5kcm9wZG93bi4kc2VhcmNoIHx8IHQuc2VsZWN0aW9uLiRzZWFyY2ggfHwgbi5maW5kKCcuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkJykpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHQudGVybSA9IHQudGVybSB8fCAnJztcblx0XHRcdFx0XHRcdFx0dmFyIGkgPSB0aGlzLnRva2VuaXplcih0LCB0aGlzLm9wdGlvbnMsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSByLl9ub3JtYWxpemVJdGVtKGUpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdCFyLiRlbGVtZW50LmZpbmQoJ29wdGlvbicpLmZpbHRlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBkKHRoaXMpLnZhbCgpID09PSB0LmlkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IHIub3B0aW9uKHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0bi5hdHRyKCdkYXRhLXNlbGVjdDItdGFnJywgITApLCByLl9yZW1vdmVPbGRUYWdzKCksIHIuYWRkT3B0aW9ucyhbbl0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQhKGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLnRyaWdnZXIoJ3NlbGVjdCcsIHtkYXRhOiBlfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSkodCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpLnRlcm0gIT09IHQudGVybSAmJlxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLiRzZWFyY2gubGVuZ3RoICYmICh0aGlzLiRzZWFyY2gudmFsKGkudGVybSksIHRoaXMuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpKSxcblx0XHRcdFx0XHRcdFx0XHQodC50ZXJtID0gaS50ZXJtKSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUudG9rZW5pemVyID0gZnVuY3Rpb24gKGUsIHQsIG4sIHIpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChcblx0XHRcdFx0XHRcdFx0XHR2YXIgaSA9IG4uZ2V0KCd0b2tlblNlcGFyYXRvcnMnKSB8fCBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdG8gPSB0LnRlcm0sXG5cdFx0XHRcdFx0XHRcdFx0XHRzID0gMCxcblx0XHRcdFx0XHRcdFx0XHRcdGEgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZVRhZyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7aWQ6IGUudGVybSwgdGV4dDogZS50ZXJtfTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRzIDwgby5sZW5ndGg7XG5cblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGwgPSBvW3NdO1xuXHRcdFx0XHRcdFx0XHRcdGlmICgtMSAhPT0gZC5pbkFycmF5KGwsIGkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYyA9IG8uc3Vic3RyKDAsIHMpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1ID0gYShkLmV4dGVuZCh7fSwgdCwge3Rlcm06IGN9KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsICE9IHUgPyAocih1KSwgKG8gPSBvLnN1YnN0cihzICsgMSkgfHwgJycpLCAocyA9IDApKSA6IHMrKztcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgcysrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7dGVybTogb307XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIGUoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0KHRoaXMubWluaW11bUlucHV0TGVuZ3RoID0gbi5nZXQoJ21pbmltdW1JbnB1dExlbmd0aCcpKSwgZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0KHQudGVybSA9IHQudGVybSB8fCAnJyksXG5cdFx0XHRcdFx0XHRcdFx0dC50ZXJtLmxlbmd0aCA8IHRoaXMubWluaW11bUlucHV0TGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdpbnB1dFRvb1Nob3J0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzOiB7bWluaW11bTogdGhpcy5taW5pbXVtSW5wdXRMZW5ndGgsIGlucHV0OiB0LnRlcm0sIHBhcmFtczogdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGUuY2FsbCh0aGlzLCB0LCBuKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kYXRhL21heGltdW1JbnB1dExlbmd0aCcsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5tYXhpbXVtSW5wdXRMZW5ndGggPSBuLmdldCgnbWF4aW11bUlucHV0TGVuZ3RoJykpLCBlLmNhbGwodGhpcywgdCwgbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHQodC50ZXJtID0gdC50ZXJtIHx8ICcnKSxcblx0XHRcdFx0XHRcdFx0XHQwIDwgdGhpcy5tYXhpbXVtSW5wdXRMZW5ndGggJiYgdC50ZXJtLmxlbmd0aCA+IHRoaXMubWF4aW11bUlucHV0TGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdpbnB1dFRvb0xvbmcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3M6IHttYXhpbXVtOiB0aGlzLm1heGltdW1JbnB1dExlbmd0aCwgaW5wdXQ6IHQudGVybSwgcGFyYW1zOiB0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdDogZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL2RhdGEvbWF4aW11bVNlbGVjdGlvbkxlbmd0aCcsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoID0gbi5nZXQoJ21heGltdW1TZWxlY3Rpb25MZW5ndGgnKSksIGUuY2FsbCh0aGlzLCB0LCBuKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5fY2hlY2tJZk1heGltdW1TZWxlY3RlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2NoZWNrSWZNYXhpbXVtU2VsZWN0ZWQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGUuY2FsbChyLCB0LCBuKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5fY2hlY2tJZk1heGltdW1TZWxlY3RlZCA9IGZ1bmN0aW9uIChlLCBuKSB7XG5cdFx0XHRcdFx0XHRcdHZhciByID0gdGhpcztcblx0XHRcdFx0XHRcdFx0dGhpcy5jdXJyZW50KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBudWxsICE9IGUgPyBlLmxlbmd0aCA6IDA7XG5cdFx0XHRcdFx0XHRcdFx0MCA8IHIubWF4aW11bVNlbGVjdGlvbkxlbmd0aCAmJiB0ID49IHIubWF4aW11bVNlbGVjdGlvbkxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0PyByLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnbWF4aW11bVNlbGVjdGVkJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzOiB7bWF4aW11bTogci5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RofSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdDogbiAmJiBuKCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duJywgWydqcXVlcnknLCAnLi91dGlscyddLCBmdW5jdGlvbiAodCwgZSkge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIG4oZSwgdCkge1xuXHRcdFx0XHRcdFx0KHRoaXMuJGVsZW1lbnQgPSBlKSwgKHRoaXMub3B0aW9ucyA9IHQpLCBuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0ZS5FeHRlbmQobiwgZS5PYnNlcnZhYmxlKSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gdCgnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLWRyb3Bkb3duXCI+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXJlc3VsdHNcIj48L3NwYW4+PC9zcGFuPicpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZS5hdHRyKCdkaXInLCB0aGlzLm9wdGlvbnMuZ2V0KCdkaXInKSksICh0aGlzLiRkcm9wZG93biA9IGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpIHt9KSxcblx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5wb3NpdGlvbiA9IGZ1bmN0aW9uIChlLCB0KSB7fSksXG5cdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kZHJvcGRvd24ucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdG5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vc2VhcmNoJywgWydqcXVlcnknLCAnLi4vdXRpbHMnXSwgZnVuY3Rpb24gKG8sIGUpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiB0KCkge31cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KHQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gZS5jYWxsKHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdG4gPSBvKFxuXHRcdFx0XHRcdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWFyY2ggc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duXCI+PGlucHV0IGNsYXNzPVwic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkXCIgdHlwZT1cInNlYXJjaFwiIHRhYmluZGV4PVwiLTFcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIHJvbGU9XCJzZWFyY2hib3hcIiBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIiAvPjwvc3Bhbj4nXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICh0aGlzLiRzZWFyY2hDb250YWluZXIgPSBuKSwgKHRoaXMuJHNlYXJjaCA9IG4uZmluZCgnaW5wdXQnKSksIHQucHJlcGVuZChuKSwgdDtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KHQucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0aSA9IHQuaWQgKyAnLXJlc3VsdHMnO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoLm9uKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIudHJpZ2dlcigna2V5cHJlc3MnLCBlKSwgKHIuX2tleVVwUHJldmVudGVkID0gZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoLm9uKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvKHRoaXMpLm9mZigna2V5dXAnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2gub24oJ2tleXVwIGlucHV0JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuaGFuZGxlU2VhcmNoKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2guYXR0cigndGFiaW5kZXgnLCAwKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyLiRzZWFyY2guYXR0cigndGFiaW5kZXgnLCAtMSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWNvbnRyb2xzJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci4kc2VhcmNoLnZhbCgnJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuJHNlYXJjaC50cmlnZ2VyKCdibHVyJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LmlzT3BlbigpIHx8IHIuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3Jlc3VsdHM6YWxsJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdChudWxsICE9IGUucXVlcnkudGVybSAmJiAnJyAhPT0gZS5xdWVyeS50ZXJtKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoci5zaG93U2VhcmNoKGUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyByLiRzZWFyY2hDb250YWluZXIucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItc2VhcmNoLS1oaWRlJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHIuJHNlYXJjaENvbnRhaW5lci5hZGRDbGFzcygnc2VsZWN0Mi1zZWFyY2gtLWhpZGUnKSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlLmRhdGEuX3Jlc3VsdElkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gci4kc2VhcmNoLmF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIGUuZGF0YS5fcmVzdWx0SWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogci4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQodC5wcm90b3R5cGUuaGFuZGxlU2VhcmNoID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLl9rZXlVcFByZXZlbnRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gdGhpcy4kc2VhcmNoLnZhbCgpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcigncXVlcnknLCB7dGVybTogdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2tleVVwUHJldmVudGVkID0gITE7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdCh0LnByb3RvdHlwZS5zaG93U2VhcmNoID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICEwO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2hpZGVQbGFjZWhvbGRlcicsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuLCByKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIobi5nZXQoJ3BsYWNlaG9sZGVyJykpKSwgZS5jYWxsKHRoaXMsIHQsIG4sIHIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdCh0LnJlc3VsdHMgPSB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyKHQucmVzdWx0cykpLCBlLmNhbGwodGhpcywgdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5ub3JtYWxpemVQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAnc3RyaW5nJyA9PSB0eXBlb2YgdCAmJiAodCA9IHtpZDogJycsIHRleHQ6IHR9KSwgdDtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnJlbW92ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IHQuc2xpY2UoMCksIHIgPSB0Lmxlbmd0aCAtIDE7IDAgPD0gcjsgci0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSB0W3JdO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGxhY2Vob2xkZXIuaWQgPT09IGkuaWQgJiYgbi5zcGxpY2UociwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIG47XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vaW5maW5pdGVTY3JvbGwnLCBbJ2pxdWVyeSddLCBmdW5jdGlvbiAobikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uIGUoZSwgdCwgbiwgcikge1xuXHRcdFx0XHRcdFx0KHRoaXMubGFzdFBhcmFtcyA9IHt9KSxcblx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMsIHQsIG4sIHIpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy4kbG9hZGluZ01vcmUgPSB0aGlzLmNyZWF0ZUxvYWRpbmdNb3JlKCkpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy5sb2FkaW5nID0gITEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGxvYWRpbmdNb3JlLnJlbW92ZSgpLFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLmxvYWRpbmcgPSAhMSksXG5cdFx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMsIHQpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2hvd0xvYWRpbmdNb3JlKHQpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQodGhpcy4kcmVzdWx0cy5hcHBlbmQodGhpcy4kbG9hZGluZ01vcmUpLCB0aGlzLmxvYWRNb3JlSWZOZWVkZWQoKSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncXVlcnknLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0KHIubGFzdFBhcmFtcyA9IGUpLCAoci5sb2FkaW5nID0gITApO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3F1ZXJ5OmFwcGVuZCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQoci5sYXN0UGFyYW1zID0gZSksIChyLmxvYWRpbmcgPSAhMCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kcmVzdWx0cy5vbignc2Nyb2xsJywgdGhpcy5sb2FkTW9yZUlmTmVlZGVkLmJpbmQodGhpcykpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUubG9hZE1vcmVJZk5lZWRlZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPSBuLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy4kbG9hZGluZ01vcmVbMF0pO1xuXHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMubG9hZGluZyAmJiBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSB0aGlzLiRyZXN1bHRzLm9mZnNldCgpLnRvcCArIHRoaXMuJHJlc3VsdHMub3V0ZXJIZWlnaHQoITEpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGxvYWRpbmdNb3JlLm9mZnNldCgpLnRvcCArIHRoaXMuJGxvYWRpbmdNb3JlLm91dGVySGVpZ2h0KCExKSA8PSB0ICsgNTAgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMubG9hZE1vcmUoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUubG9hZE1vcmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMubG9hZGluZyA9ICEwO1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IG4uZXh0ZW5kKHt9LCB7cGFnZTogMX0sIHRoaXMubGFzdFBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdGUucGFnZSsrLCB0aGlzLnRyaWdnZXIoJ3F1ZXJ5OmFwcGVuZCcsIGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuc2hvd0xvYWRpbmdNb3JlID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHQucGFnaW5hdGlvbiAmJiB0LnBhZ2luYXRpb24ubW9yZTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmNyZWF0ZUxvYWRpbmdNb3JlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZSA9IG4oXG5cdFx0XHRcdFx0XHRcdFx0XHQnPGxpIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWxvYWQtbW9yZVwicm9sZT1cIm9wdGlvblwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+PC9saT4nXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHR0ID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdsb2FkaW5nTW9yZScpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZS5odG1sKHQodGhpcy5sYXN0UGFyYW1zKSksIGU7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vYXR0YWNoQm9keScsIFsnanF1ZXJ5JywgJy4uL3V0aWxzJ10sIGZ1bmN0aW9uIChmLCBhKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuKSB7XG5cdFx0XHRcdFx0XHQodGhpcy4kZHJvcGRvd25QYXJlbnQgPSBmKG4uZ2V0KCdkcm9wZG93blBhcmVudCcpIHx8IGRvY3VtZW50LmJvZHkpKSwgZS5jYWxsKHRoaXMsIHQsIG4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5fc2hvd0Ryb3Bkb3duKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlcih0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ci5fYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzKHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5faGlkZURyb3Bkb3duKCksIHIuX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlcih0KTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5vbignbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0ZS5jYWxsKHRoaXMpLCB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dC5hdHRyKCdjbGFzcycsIG4uYXR0cignY2xhc3MnKSksXG5cdFx0XHRcdFx0XHRcdFx0dC5yZW1vdmVDbGFzcygnc2VsZWN0MicpLFxuXHRcdFx0XHRcdFx0XHRcdHQuYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyksXG5cdFx0XHRcdFx0XHRcdFx0dC5jc3Moe3Bvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IC05OTk5OTl9KSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy4kY29udGFpbmVyID0gbik7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IGYoJzxzcGFuPjwvc3Bhbj4nKSxcblx0XHRcdFx0XHRcdFx0XHRuID0gZS5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdC5hcHBlbmQobiksICh0aGlzLiRkcm9wZG93bkNvbnRhaW5lciA9IHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX2hpZGVEcm9wZG93biA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmRldGFjaCgpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX2JpbmRDb250YWluZXJSZXN1bHRIYW5kbGVycyA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdGlmICghdGhpcy5fY29udGFpbmVyUmVzdWx0c0hhbmRsZXJzQm91bmQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0dC5vbigncmVzdWx0czphbGwnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLl9wb3NpdGlvbkRyb3Bkb3duKCksIG4uX3Jlc2l6ZURyb3Bkb3duKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOmFwcGVuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bi5fcG9zaXRpb25Ecm9wZG93bigpLCBuLl9yZXNpemVEcm9wZG93bigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdyZXN1bHRzOm1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG4uX3Bvc2l0aW9uRHJvcGRvd24oKSwgbi5fcmVzaXplRHJvcGRvd24oKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0dC5vbignc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLl9wb3NpdGlvbkRyb3Bkb3duKCksIG4uX3Jlc2l6ZURyb3Bkb3duKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRcdHQub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLl9wb3NpdGlvbkRyb3Bkb3duKCksIG4uX3Jlc2l6ZURyb3Bkb3duKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLl9jb250YWluZXJSZXN1bHRzSGFuZGxlcnNCb3VuZCA9ICEwKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlciA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRyID0gJ3Njcm9sbC5zZWxlY3QyLicgKyB0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdGkgPSAncmVzaXplLnNlbGVjdDIuJyArIHQuaWQsXG5cdFx0XHRcdFx0XHRcdFx0byA9ICdvcmllbnRhdGlvbmNoYW5nZS5zZWxlY3QyLicgKyB0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdHMgPSB0aGlzLiRjb250YWluZXIucGFyZW50cygpLmZpbHRlcihhLmhhc1Njcm9sbCk7XG5cdFx0XHRcdFx0XHRcdHMuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YS5TdG9yZURhdGEodGhpcywgJ3NlbGVjdDItc2Nyb2xsLXBvc2l0aW9uJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0eDogZih0aGlzKS5zY3JvbGxMZWZ0KCksXG5cdFx0XHRcdFx0XHRcdFx0XHR5OiBmKHRoaXMpLnNjcm9sbFRvcCgpLFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHRzLm9uKHIsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdCA9IGEuR2V0RGF0YSh0aGlzLCAnc2VsZWN0Mi1zY3JvbGwtcG9zaXRpb24nKTtcblx0XHRcdFx0XHRcdFx0XHRcdGYodGhpcykuc2Nyb2xsVG9wKHQueSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0Zih3aW5kb3cpLm9uKHIgKyAnICcgKyBpICsgJyAnICsgbywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG4uX3Bvc2l0aW9uRHJvcGRvd24oKSwgbi5fcmVzaXplRHJvcGRvd24oKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9kZXRhY2hQb3NpdGlvbmluZ0hhbmRsZXIgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9ICdzY3JvbGwuc2VsZWN0Mi4nICsgdC5pZCxcblx0XHRcdFx0XHRcdFx0XHRyID0gJ3Jlc2l6ZS5zZWxlY3QyLicgKyB0LmlkLFxuXHRcdFx0XHRcdFx0XHRcdGkgPSAnb3JpZW50YXRpb25jaGFuZ2Uuc2VsZWN0Mi4nICsgdC5pZDtcblx0XHRcdFx0XHRcdFx0dGhpcy4kY29udGFpbmVyLnBhcmVudHMoKS5maWx0ZXIoYS5oYXNTY3JvbGwpLm9mZihuKSwgZih3aW5kb3cpLm9mZihuICsgJyAnICsgciArICcgJyArIGkpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX3Bvc2l0aW9uRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlID0gZih3aW5kb3cpLFxuXHRcdFx0XHRcdFx0XHRcdHQgPSB0aGlzLiRkcm9wZG93bi5oYXNDbGFzcygnc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUnKSxcblx0XHRcdFx0XHRcdFx0XHRuID0gdGhpcy4kZHJvcGRvd24uaGFzQ2xhc3MoJ3NlbGVjdDItZHJvcGRvd24tLWJlbG93JyksXG5cdFx0XHRcdFx0XHRcdFx0ciA9IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aSA9IHRoaXMuJGNvbnRhaW5lci5vZmZzZXQoKTtcblx0XHRcdFx0XHRcdFx0aS5ib3R0b20gPSBpLnRvcCArIHRoaXMuJGNvbnRhaW5lci5vdXRlckhlaWdodCghMSk7XG5cdFx0XHRcdFx0XHRcdHZhciBvID0ge2hlaWdodDogdGhpcy4kY29udGFpbmVyLm91dGVySGVpZ2h0KCExKX07XG5cdFx0XHRcdFx0XHRcdChvLnRvcCA9IGkudG9wKSwgKG8uYm90dG9tID0gaS50b3AgKyBvLmhlaWdodCk7XG5cdFx0XHRcdFx0XHRcdHZhciBzID0gdGhpcy4kZHJvcGRvd24ub3V0ZXJIZWlnaHQoITEpLFxuXHRcdFx0XHRcdFx0XHRcdGEgPSBlLnNjcm9sbFRvcCgpLFxuXHRcdFx0XHRcdFx0XHRcdGwgPSBlLnNjcm9sbFRvcCgpICsgZS5oZWlnaHQoKSxcblx0XHRcdFx0XHRcdFx0XHRjID0gYSA8IGkudG9wIC0gcyxcblx0XHRcdFx0XHRcdFx0XHR1ID0gbCA+IGkuYm90dG9tICsgcyxcblx0XHRcdFx0XHRcdFx0XHRkID0ge2xlZnQ6IGkubGVmdCwgdG9wOiBvLmJvdHRvbX0sXG5cdFx0XHRcdFx0XHRcdFx0cCA9IHRoaXMuJGRyb3Bkb3duUGFyZW50O1xuXHRcdFx0XHRcdFx0XHQnc3RhdGljJyA9PT0gcC5jc3MoJ3Bvc2l0aW9uJykgJiYgKHAgPSBwLm9mZnNldFBhcmVudCgpKTtcblx0XHRcdFx0XHRcdFx0dmFyIGggPSB7dG9wOiAwLCBsZWZ0OiAwfTtcblx0XHRcdFx0XHRcdFx0KGYuY29udGFpbnMoZG9jdW1lbnQuYm9keSwgcFswXSkgfHwgcFswXS5pc0Nvbm5lY3RlZCkgJiYgKGggPSBwLm9mZnNldCgpKSxcblx0XHRcdFx0XHRcdFx0XHQoZC50b3AgLT0gaC50b3ApLFxuXHRcdFx0XHRcdFx0XHRcdChkLmxlZnQgLT0gaC5sZWZ0KSxcblx0XHRcdFx0XHRcdFx0XHR0IHx8IG4gfHwgKHIgPSAnYmVsb3cnKSxcblx0XHRcdFx0XHRcdFx0XHR1IHx8ICFjIHx8IHQgPyAhYyAmJiB1ICYmIHQgJiYgKHIgPSAnYmVsb3cnKSA6IChyID0gJ2Fib3ZlJyksXG5cdFx0XHRcdFx0XHRcdFx0KCdhYm92ZScgPT0gciB8fCAodCAmJiAnYmVsb3cnICE9PSByKSkgJiYgKGQudG9wID0gby50b3AgLSBoLnRvcCAtIHMpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KHRoaXMuJGRyb3Bkb3duXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1kcm9wZG93bi0tYmVsb3cgc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3NlbGVjdDItZHJvcGRvd24tLScgKyByKSxcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGNvbnRhaW5lclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1iZWxvdyBzZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS0nICsgcikpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmNzcyhkKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9yZXNpemVEcm9wZG93biA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPSB7d2lkdGg6IHRoaXMuJGNvbnRhaW5lci5vdXRlcldpZHRoKCExKSArICdweCd9O1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuZ2V0KCdkcm9wZG93bkF1dG9XaWR0aCcpICYmXG5cdFx0XHRcdFx0XHRcdFx0KChlLm1pbldpZHRoID0gZS53aWR0aCksIChlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJyksIChlLndpZHRoID0gJ2F1dG8nKSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZHJvcGRvd24uY3NzKGUpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuX3Nob3dEcm9wZG93biA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZFRvKHRoaXMuJGRyb3Bkb3duUGFyZW50KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9wb3NpdGlvbkRyb3Bkb3duKCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fcmVzaXplRHJvcGRvd24oKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0LCBuLCByKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCA9IG4uZ2V0KCdtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcpKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCA8IDAgJiYgKHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggPSAxIC8gMCksXG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuLCByKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5zaG93U2VhcmNoID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQhKFxuXHRcdFx0XHRcdFx0XHRcdFx0KGZ1bmN0aW9uIGUodCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBuID0gMCwgciA9IDA7IHIgPCB0Lmxlbmd0aDsgcisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSB0W3JdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGkuY2hpbGRyZW4gPyAobiArPSBlKGkuY2hpbGRyZW4pKSA6IG4rKztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbjtcblx0XHRcdFx0XHRcdFx0XHRcdH0pKHQuZGF0YS5yZXN1bHRzKSA8IHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2hcblx0XHRcdFx0XHRcdFx0XHQpICYmIGUuY2FsbCh0aGlzLCB0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL3NlbGVjdE9uQ2xvc2UnLCBbJy4uL3V0aWxzJ10sIGZ1bmN0aW9uIChvKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZSgpIHt9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGUsIHQsIG4pIHtcblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRlLmNhbGwodGhpcywgdCwgbiksXG5cdFx0XHRcdFx0XHRcdFx0dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5faGFuZGxlU2VsZWN0T25DbG9zZShlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9oYW5kbGVTZWxlY3RPbkNsb3NlID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHQgJiYgbnVsbCAhPSB0Lm9yaWdpbmFsU2VsZWN0MkV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0Lm9yaWdpbmFsU2VsZWN0MkV2ZW50O1xuXHRcdFx0XHRcdFx0XHRcdGlmICgnc2VsZWN0JyA9PT0gbi5fdHlwZSB8fCAndW5zZWxlY3QnID09PSBuLl90eXBlKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO1xuXHRcdFx0XHRcdFx0XHRpZiAoIShyLmxlbmd0aCA8IDEpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSBvLkdldERhdGEoclswXSwgJ2RhdGEnKTtcblx0XHRcdFx0XHRcdFx0XHQobnVsbCAhPSBpLmVsZW1lbnQgJiYgaS5lbGVtZW50LnNlbGVjdGVkKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG51bGwgPT0gaS5lbGVtZW50ICYmIGkuc2VsZWN0ZWQpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3NlbGVjdCcsIHtkYXRhOiBpfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9jbG9zZU9uU2VsZWN0JywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRmdW5jdGlvbiBlKCkge31cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZSwgdCwgbikge1xuXHRcdFx0XHRcdFx0XHR2YXIgciA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdGUuY2FsbCh0aGlzLCB0LCBuKSxcblx0XHRcdFx0XHRcdFx0XHR0Lm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ci5fc2VsZWN0VHJpZ2dlcmVkKGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdHQub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHIuX3NlbGVjdFRyaWdnZXJlZChlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLl9zZWxlY3RUcmlnZ2VyZWQgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHQub3JpZ2luYWxFdmVudDtcblx0XHRcdFx0XHRcdFx0KG4gJiYgKG4uY3RybEtleSB8fCBuLm1ldGFLZXkpKSB8fFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcignY2xvc2UnLCB7b3JpZ2luYWxFdmVudDogbiwgb3JpZ2luYWxTZWxlY3QyRXZlbnQ6IHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZSgnc2VsZWN0Mi9pMThuL2VuJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZXJyb3JMb2FkaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAnVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4nO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlucHV0VG9vTG9uZzogZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSBlLmlucHV0Lmxlbmd0aCAtIGUubWF4aW11bSxcblx0XHRcdFx0XHRcdFx0XHRuID0gJ1BsZWFzZSBkZWxldGUgJyArIHQgKyAnIGNoYXJhY3Rlcic7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxICE9IHQgJiYgKG4gKz0gJ3MnKSwgbjtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ1BsZWFzZSBlbnRlciAnICsgKGUubWluaW11bSAtIGUuaW5wdXQubGVuZ3RoKSArICcgb3IgbW9yZSBjaGFyYWN0ZXJzJztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRsb2FkaW5nTW9yZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ0xvYWRpbmcgbW9yZSByZXN1bHRz4oCmJztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtYXhpbXVtU2VsZWN0ZWQ6IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gJ1lvdSBjYW4gb25seSBzZWxlY3QgJyArIGUubWF4aW11bSArICcgaXRlbSc7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxICE9IGUubWF4aW11bSAmJiAodCArPSAncycpLCB0O1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG5vUmVzdWx0czogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ05vIHJlc3VsdHMgZm91bmQnO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNlYXJjaGluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ1NlYXJjaGluZ+KApic7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cmVtb3ZlQWxsSXRlbXM6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICdSZW1vdmUgYWxsIGl0ZW1zJztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKFxuXHRcdFx0XHRcdCdzZWxlY3QyL2RlZmF1bHRzJyxcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHQnanF1ZXJ5Jyxcblx0XHRcdFx0XHRcdCdyZXF1aXJlJyxcblx0XHRcdFx0XHRcdCcuL3Jlc3VsdHMnLFxuXHRcdFx0XHRcdFx0Jy4vc2VsZWN0aW9uL3NpbmdsZScsXG5cdFx0XHRcdFx0XHQnLi9zZWxlY3Rpb24vbXVsdGlwbGUnLFxuXHRcdFx0XHRcdFx0Jy4vc2VsZWN0aW9uL3BsYWNlaG9sZGVyJyxcblx0XHRcdFx0XHRcdCcuL3NlbGVjdGlvbi9hbGxvd0NsZWFyJyxcblx0XHRcdFx0XHRcdCcuL3NlbGVjdGlvbi9zZWFyY2gnLFxuXHRcdFx0XHRcdFx0Jy4vc2VsZWN0aW9uL2V2ZW50UmVsYXknLFxuXHRcdFx0XHRcdFx0Jy4vdXRpbHMnLFxuXHRcdFx0XHRcdFx0Jy4vdHJhbnNsYXRpb24nLFxuXHRcdFx0XHRcdFx0Jy4vZGlhY3JpdGljcycsXG5cdFx0XHRcdFx0XHQnLi9kYXRhL3NlbGVjdCcsXG5cdFx0XHRcdFx0XHQnLi9kYXRhL2FycmF5Jyxcblx0XHRcdFx0XHRcdCcuL2RhdGEvYWpheCcsXG5cdFx0XHRcdFx0XHQnLi9kYXRhL3RhZ3MnLFxuXHRcdFx0XHRcdFx0Jy4vZGF0YS90b2tlbml6ZXInLFxuXHRcdFx0XHRcdFx0Jy4vZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgnLFxuXHRcdFx0XHRcdFx0Jy4vZGF0YS9tYXhpbXVtSW5wdXRMZW5ndGgnLFxuXHRcdFx0XHRcdFx0Jy4vZGF0YS9tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoJyxcblx0XHRcdFx0XHRcdCcuL2Ryb3Bkb3duJyxcblx0XHRcdFx0XHRcdCcuL2Ryb3Bkb3duL3NlYXJjaCcsXG5cdFx0XHRcdFx0XHQnLi9kcm9wZG93bi9oaWRlUGxhY2Vob2xkZXInLFxuXHRcdFx0XHRcdFx0Jy4vZHJvcGRvd24vaW5maW5pdGVTY3JvbGwnLFxuXHRcdFx0XHRcdFx0Jy4vZHJvcGRvd24vYXR0YWNoQm9keScsXG5cdFx0XHRcdFx0XHQnLi9kcm9wZG93bi9taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcsXG5cdFx0XHRcdFx0XHQnLi9kcm9wZG93bi9zZWxlY3RPbkNsb3NlJyxcblx0XHRcdFx0XHRcdCcuL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3QnLFxuXHRcdFx0XHRcdFx0Jy4vaTE4bi9lbicsXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRmdW5jdGlvbiAoYywgdSwgZCwgcCwgaCwgZiwgZywgbSwgdiwgeSwgcywgdCwgXywgJCwgdywgYiwgQSwgeCwgRCwgUywgRSwgQywgTywgVCwgcSwgTCwgSSwgaiwgZSkge1xuXHRcdFx0XHRcdFx0ZnVuY3Rpb24gbigpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5yZXNldCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAobnVsbCA9PSAoZSA9IGMuZXh0ZW5kKCEwLCB7fSwgdGhpcy5kZWZhdWx0cywgZSkpLmRhdGFBZGFwdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChudWxsICE9IGUuYWpheFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKGUuZGF0YUFkYXB0ZXIgPSB3KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbCAhPSBlLmRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKGUuZGF0YUFkYXB0ZXIgPSAkKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiAoZS5kYXRhQWRhcHRlciA9IF8pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwIDwgZS5taW5pbXVtSW5wdXRMZW5ndGggJiYgKGUuZGF0YUFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsIHgpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCA8IGUubWF4aW11bUlucHV0TGVuZ3RoICYmIChlLmRhdGFBZGFwdGVyID0geS5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLCBEKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAgPCBlLm1heGltdW1TZWxlY3Rpb25MZW5ndGggJiYgKGUuZGF0YUFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsIFMpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS50YWdzICYmIChlLmRhdGFBZGFwdGVyID0geS5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLCBiKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChudWxsID09IGUudG9rZW5TZXBhcmF0b3JzICYmIG51bGwgPT0gZS50b2tlbml6ZXIpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGUuZGF0YUFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsIEEpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLnF1ZXJ5KVxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0ID0gdShlLmFtZEJhc2UgKyAnY29tcGF0L3F1ZXJ5Jyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuZGF0YUFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsIHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG51bGwgIT0gZS5pbml0U2VsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBuID0gdShlLmFtZEJhc2UgKyAnY29tcGF0L2luaXRTZWxlY3Rpb24nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5kYXRhQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5kYXRhQWRhcHRlciwgbik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdChudWxsID09IGUucmVzdWx0c0FkYXB0ZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KChlLnJlc3VsdHNBZGFwdGVyID0gZCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gZS5hamF4ICYmIChlLnJlc3VsdHNBZGFwdGVyID0geS5EZWNvcmF0ZShlLnJlc3VsdHNBZGFwdGVyLCBUKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gZS5wbGFjZWhvbGRlciAmJiAoZS5yZXN1bHRzQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5yZXN1bHRzQWRhcHRlciwgTykpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnNlbGVjdE9uQ2xvc2UgJiYgKGUucmVzdWx0c0FkYXB0ZXIgPSB5LkRlY29yYXRlKGUucmVzdWx0c0FkYXB0ZXIsIEkpKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsID09IGUuZHJvcGRvd25BZGFwdGVyKVxuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUubXVsdGlwbGUpIGUuZHJvcGRvd25BZGFwdGVyID0gRTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgciA9IHkuRGVjb3JhdGUoRSwgQyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuZHJvcGRvd25BZGFwdGVyID0gcjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0KDAgIT09IGUubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZS5kcm9wZG93bkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZHJvcGRvd25BZGFwdGVyLCBMKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuY2xvc2VPblNlbGVjdCAmJiAoZS5kcm9wZG93bkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZHJvcGRvd25BZGFwdGVyLCBqKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gZS5kcm9wZG93bkNzc0NsYXNzIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLmRyb3Bkb3duQ3NzIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLmFkYXB0RHJvcGRvd25Dc3NDbGFzcylcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaSA9IHUoZS5hbWRCYXNlICsgJ2NvbXBhdC9kcm9wZG93bkNzcycpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLmRyb3Bkb3duQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5kcm9wZG93bkFkYXB0ZXIsIGkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5kcm9wZG93bkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuZHJvcGRvd25BZGFwdGVyLCBxKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bGwgPT0gZS5zZWxlY3Rpb25BZGFwdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChlLm11bHRpcGxlID8gKGUuc2VsZWN0aW9uQWRhcHRlciA9IGgpIDogKGUuc2VsZWN0aW9uQWRhcHRlciA9IHApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsICE9IGUucGxhY2Vob2xkZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZS5zZWxlY3Rpb25BZGFwdGVyID0geS5EZWNvcmF0ZShlLnNlbGVjdGlvbkFkYXB0ZXIsIGYpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5hbGxvd0NsZWFyICYmIChlLnNlbGVjdGlvbkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuc2VsZWN0aW9uQWRhcHRlciwgZykpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLm11bHRpcGxlICYmIChlLnNlbGVjdGlvbkFkYXB0ZXIgPSB5LkRlY29yYXRlKGUuc2VsZWN0aW9uQWRhcHRlciwgbSkpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsICE9IGUuY29udGFpbmVyQ3NzQ2xhc3MgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsICE9IGUuY29udGFpbmVyQ3NzIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCAhPSBlLmFkYXB0Q29udGFpbmVyQ3NzQ2xhc3MpXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG8gPSB1KGUuYW1kQmFzZSArICdjb21wYXQvY29udGFpbmVyQ3NzJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuc2VsZWN0aW9uQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5zZWxlY3Rpb25BZGFwdGVyLCBvKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGUuc2VsZWN0aW9uQWRhcHRlciA9IHkuRGVjb3JhdGUoZS5zZWxlY3Rpb25BZGFwdGVyLCB2KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0KGUubGFuZ3VhZ2UgPSB0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UoZS5sYW5ndWFnZSkpLCBlLmxhbmd1YWdlLnB1c2goJ2VuJyk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgcyA9IFtdLCBhID0gMDsgYSA8IGUubGFuZ3VhZ2UubGVuZ3RoOyBhKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBsID0gZS5sYW5ndWFnZVthXTtcblx0XHRcdFx0XHRcdFx0XHRcdC0xID09PSBzLmluZGV4T2YobCkgJiYgcy5wdXNoKGwpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0KGUubGFuZ3VhZ2UgPSBzKSxcblx0XHRcdFx0XHRcdFx0XHRcdChlLnRyYW5zbGF0aW9ucyA9IHRoaXMuX3Byb2Nlc3NUcmFuc2xhdGlvbnMoZS5sYW5ndWFnZSwgZS5kZWJ1ZykpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQobi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24gYShlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZS5yZXBsYWNlKC9bXlxcdTAwMDAtXFx1MDA3RV0vZywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRbZV0gfHwgZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRlZmF1bHRzID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0YW1kQmFzZTogJy4vJyxcblx0XHRcdFx0XHRcdFx0XHRcdGFtZExhbmd1YWdlQmFzZTogJy4vaTE4bi8nLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdDogITAsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWJ1ZzogITEsXG5cdFx0XHRcdFx0XHRcdFx0XHRkcm9wZG93bkF1dG9XaWR0aDogITEsXG5cdFx0XHRcdFx0XHRcdFx0XHRlc2NhcGVNYXJrdXA6IHkuZXNjYXBlTWFya3VwLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFuZ3VhZ2U6IHt9LFxuXHRcdFx0XHRcdFx0XHRcdFx0bWF0Y2hlcjogZnVuY3Rpb24gZSh0LCBuKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgnJyA9PT0gYy50cmltKHQudGVybSkpIHJldHVybiBuO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobi5jaGlsZHJlbiAmJiAwIDwgbi5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciByID0gYy5leHRlbmQoITAsIHt9LCBuKSwgaSA9IG4uY2hpbGRyZW4ubGVuZ3RoIC0gMTsgMCA8PSBpOyBpLS0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWxsID09IGUodCwgbi5jaGlsZHJlbltpXSkgJiYgci5jaGlsZHJlbi5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIDAgPCByLmNoaWxkcmVuLmxlbmd0aCA/IHIgOiBlKHQsIHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBvID0gYShuLnRleHQpLnRvVXBwZXJDYXNlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cyA9IGEodC50ZXJtKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gLTEgPCBvLmluZGV4T2YocykgPyBuIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW5pbXVtSW5wdXRMZW5ndGg6IDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXhpbXVtSW5wdXRMZW5ndGg6IDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOiAwLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPbkNsb3NlOiAhMSxcblx0XHRcdFx0XHRcdFx0XHRcdHNjcm9sbEFmdGVyU2VsZWN0OiAhMSxcblx0XHRcdFx0XHRcdFx0XHRcdHNvcnRlcjogZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGVSZXN1bHQ6IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBlLnRleHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGVTZWxlY3Rpb246IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBlLnRleHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbWU6ICdkZWZhdWx0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoOiAncmVzb2x2ZScsXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5hcHBseUZyb21FbGVtZW50ID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbiA9IGUubGFuZ3VhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRyID0gdGhpcy5kZWZhdWx0cy5sYW5ndWFnZSxcblx0XHRcdFx0XHRcdFx0XHRcdGkgPSB0LnByb3AoJ2xhbmcnKSxcblx0XHRcdFx0XHRcdFx0XHRcdG8gPSB0LmNsb3Nlc3QoJ1tsYW5nXScpLnByb3AoJ2xhbmcnKSxcblx0XHRcdFx0XHRcdFx0XHRcdHMgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3Jlc29sdmVMYW5ndWFnZShpKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fcmVzb2x2ZUxhbmd1YWdlKG4pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UociksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3Jlc29sdmVMYW5ndWFnZShvKVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKGUubGFuZ3VhZ2UgPSBzKSwgZTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdChuLnByb3RvdHlwZS5fcmVzb2x2ZUxhbmd1YWdlID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWUpIHJldHVybiBbXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYy5pc0VtcHR5T2JqZWN0KGUpKSByZXR1cm4gW107XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGMuaXNQbGFpbk9iamVjdChlKSkgcmV0dXJuIFtlXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgdDtcblx0XHRcdFx0XHRcdFx0XHR0ID0gYy5pc0FycmF5KGUpID8gZSA6IFtlXTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBuID0gW10sIHIgPSAwOyByIDwgdC5sZW5ndGg7IHIrKylcblx0XHRcdFx0XHRcdFx0XHRcdGlmICgobi5wdXNoKHRbcl0pLCAnc3RyaW5nJyA9PSB0eXBlb2YgdFtyXSAmJiAwIDwgdFtyXS5pbmRleE9mKCctJykpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpID0gdFtyXS5zcGxpdCgnLScpWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuLnB1c2goaSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG47XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHQobi5wcm90b3R5cGUuX3Byb2Nlc3NUcmFuc2xhdGlvbnMgPSBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIG4gPSBuZXcgcygpLCByID0gMDsgciA8IGUubGVuZ3RoOyByKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBpID0gbmV3IHMoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0byA9IGVbcl07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoJ3N0cmluZycgPT0gdHlwZW9mIG8pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aSA9IHMubG9hZFBhdGgobyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG8gPSB0aGlzLmRlZmF1bHRzLmFtZExhbmd1YWdlQmFzZSArIG8pLCAoaSA9IHMubG9hZFBhdGgobykpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogVGhlIGxhbmd1YWdlIGZpbGUgZm9yIFwiJyArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdcIiBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBsb2FkZWQuIEEgZmFsbGJhY2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpID0gYy5pc1BsYWluT2JqZWN0KG8pID8gbmV3IHMobykgOiBvO1xuXHRcdFx0XHRcdFx0XHRcdFx0bi5leHRlbmQoaSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBuO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0KG4ucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRuW2MuY2FtZWxDYXNlKGUpXSA9IHQ7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSB5Ll9jb252ZXJ0RGF0YShuKTtcblx0XHRcdFx0XHRcdFx0XHRjLmV4dGVuZCghMCwgdGhpcy5kZWZhdWx0cywgcik7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRuZXcgbigpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvb3B0aW9ucycsIFsncmVxdWlyZScsICdqcXVlcnknLCAnLi9kZWZhdWx0cycsICcuL3V0aWxzJ10sIGZ1bmN0aW9uIChyLCBkLCBpLCBwKSB7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gZShlLCB0KSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdCgodGhpcy5vcHRpb25zID0gZSksXG5cdFx0XHRcdFx0XHRcdG51bGwgIT0gdCAmJiB0aGlzLmZyb21FbGVtZW50KHQpLFxuXHRcdFx0XHRcdFx0XHRudWxsICE9IHQgJiYgKHRoaXMub3B0aW9ucyA9IGkuYXBwbHlGcm9tRWxlbWVudCh0aGlzLm9wdGlvbnMsIHQpKSxcblx0XHRcdFx0XHRcdFx0KHRoaXMub3B0aW9ucyA9IGkuYXBwbHkodGhpcy5vcHRpb25zKSksXG5cdFx0XHRcdFx0XHRcdHQgJiYgdC5pcygnaW5wdXQnKSlcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHIodGhpcy5nZXQoJ2FtZEJhc2UnKSArICdjb21wYXQvaW5wdXREYXRhJyk7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5kYXRhQWRhcHRlciA9IHAuRGVjb3JhdGUodGhpcy5vcHRpb25zLmRhdGFBZGFwdGVyLCBuKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChlLnByb3RvdHlwZS5mcm9tRWxlbWVudCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gWydzZWxlY3QyJ107XG5cdFx0XHRcdFx0XHRcdG51bGwgPT0gdGhpcy5vcHRpb25zLm11bHRpcGxlICYmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPSBlLnByb3AoJ211bHRpcGxlJykpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgPT0gdGhpcy5vcHRpb25zLmRpc2FibGVkICYmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSBlLnByb3AoJ2Rpc2FibGVkJykpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgPT0gdGhpcy5vcHRpb25zLmRpciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KGUucHJvcCgnZGlyJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyAodGhpcy5vcHRpb25zLmRpciA9IGUucHJvcCgnZGlyJykpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogZS5jbG9zZXN0KCdbZGlyXScpLnByb3AoJ2RpcicpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAodGhpcy5vcHRpb25zLmRpciA9IGUuY2xvc2VzdCgnW2Rpcl0nKS5wcm9wKCdkaXInKSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICh0aGlzLm9wdGlvbnMuZGlyID0gJ2x0cicpKSxcblx0XHRcdFx0XHRcdFx0XHRlLnByb3AoJ2Rpc2FibGVkJywgdGhpcy5vcHRpb25zLmRpc2FibGVkKSxcblx0XHRcdFx0XHRcdFx0XHRlLnByb3AoJ211bHRpcGxlJywgdGhpcy5vcHRpb25zLm11bHRpcGxlKSxcblx0XHRcdFx0XHRcdFx0XHRwLkdldERhdGEoZVswXSwgJ3NlbGVjdDJUYWdzJykgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLm9wdGlvbnMuZGVidWcgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogVGhlIGBkYXRhLXNlbGVjdDItdGFnc2AgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSBgZGF0YS1kYXRhYCBhbmQgYGRhdGEtdGFncz1cInRydWVcImAgYXR0cmlidXRlcyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLidcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdHAuU3RvcmVEYXRhKGVbMF0sICdkYXRhJywgcC5HZXREYXRhKGVbMF0sICdzZWxlY3QyVGFncycpKSxcblx0XHRcdFx0XHRcdFx0XHRcdHAuU3RvcmVEYXRhKGVbMF0sICd0YWdzJywgITApKSxcblx0XHRcdFx0XHRcdFx0XHRwLkdldERhdGEoZVswXSwgJ2FqYXhVcmwnKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0KHRoaXMub3B0aW9ucy5kZWJ1ZyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuY29uc29sZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdTZWxlY3QyOiBUaGUgYGRhdGEtYWpheC11cmxgIGF0dHJpYnV0ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvIGBkYXRhLWFqYXgtLXVybGAgYW5kIHN1cHBvcnQgZm9yIHRoZSBvbGQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgU2VsZWN0Mi4nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRlLmF0dHIoJ2FqYXgtLXVybCcsIHAuR2V0RGF0YShlWzBdLCAnYWpheFVybCcpKSxcblx0XHRcdFx0XHRcdFx0XHRcdHAuU3RvcmVEYXRhKGVbMF0sICdhamF4LVVybCcsIHAuR2V0RGF0YShlWzBdLCAnYWpheFVybCcpKSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0ge307XG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIHIoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0LnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlWzBdLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbyA9IGVbMF0uYXR0cmlidXRlc1tpXS5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0cyA9ICdkYXRhLSc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG8uc3Vic3RyKDAsIHMubGVuZ3RoKSA9PSBzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYSA9IG8uc3Vic3RyaW5nKHMubGVuZ3RoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bCA9IHAuR2V0RGF0YShlWzBdLCBhKTtcblx0XHRcdFx0XHRcdFx0XHRcdG5bYS5yZXBsYWNlKC8tKFthLXpdKS9nLCByKV0gPSBsO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRkLmZuLmpxdWVyeSAmJlxuXHRcdFx0XHRcdFx0XHRcdCcxLicgPT0gZC5mbi5qcXVlcnkuc3Vic3RyKDAsIDIpICYmXG5cdFx0XHRcdFx0XHRcdFx0ZVswXS5kYXRhc2V0ICYmXG5cdFx0XHRcdFx0XHRcdFx0KG4gPSBkLmV4dGVuZCghMCwge30sIGVbMF0uZGF0YXNldCwgbikpO1xuXHRcdFx0XHRcdFx0XHR2YXIgYyA9IGQuZXh0ZW5kKCEwLCB7fSwgcC5HZXREYXRhKGVbMF0pLCBuKTtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdSBpbiAoYyA9IHAuX2NvbnZlcnREYXRhKGMpKSlcblx0XHRcdFx0XHRcdFx0XHQtMSA8IGQuaW5BcnJheSh1LCB0KSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGQuaXNQbGFpbk9iamVjdCh0aGlzLm9wdGlvbnNbdV0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gZC5leHRlbmQodGhpcy5vcHRpb25zW3VdLCBjW3VdKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICh0aGlzLm9wdGlvbnNbdV0gPSBjW3VdKSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uc1tlXTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc1tlXSA9IHQ7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZS5kZWZpbmUoJ3NlbGVjdDIvY29yZScsIFsnanF1ZXJ5JywgJy4vb3B0aW9ucycsICcuL3V0aWxzJywgJy4va2V5cyddLCBmdW5jdGlvbiAoaSwgYywgdSwgcikge1xuXHRcdFx0XHRcdHZhciBkID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdG51bGwgIT0gdS5HZXREYXRhKGVbMF0sICdzZWxlY3QyJykgJiYgdS5HZXREYXRhKGVbMF0sICdzZWxlY3QyJykuZGVzdHJveSgpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy4kZWxlbWVudCA9IGUpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy5pZCA9IHRoaXMuX2dlbmVyYXRlSWQoZSkpLFxuXHRcdFx0XHRcdFx0XHQodCA9IHQgfHwge30pLFxuXHRcdFx0XHRcdFx0XHQodGhpcy5vcHRpb25zID0gbmV3IGModCwgZSkpLFxuXHRcdFx0XHRcdFx0XHRkLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0dmFyIG4gPSBlLmF0dHIoJ3RhYmluZGV4JykgfHwgMDtcblx0XHRcdFx0XHRcdHUuU3RvcmVEYXRhKGVbMF0sICdvbGQtdGFiaW5kZXgnLCBuKSwgZS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuXHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdkYXRhQWRhcHRlcicpO1xuXHRcdFx0XHRcdFx0dGhpcy5kYXRhQWRhcHRlciA9IG5ldyByKGUsIHRoaXMub3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR2YXIgaSA9IHRoaXMucmVuZGVyKCk7XG5cdFx0XHRcdFx0XHR0aGlzLl9wbGFjZUNvbnRhaW5lcihpKTtcblx0XHRcdFx0XHRcdHZhciBvID0gdGhpcy5vcHRpb25zLmdldCgnc2VsZWN0aW9uQWRhcHRlcicpO1xuXHRcdFx0XHRcdFx0KHRoaXMuc2VsZWN0aW9uID0gbmV3IG8oZSwgdGhpcy5vcHRpb25zKSksXG5cdFx0XHRcdFx0XHRcdCh0aGlzLiRzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5yZW5kZXIoKSksXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0aW9uLnBvc2l0aW9uKHRoaXMuJHNlbGVjdGlvbiwgaSk7XG5cdFx0XHRcdFx0XHR2YXIgcyA9IHRoaXMub3B0aW9ucy5nZXQoJ2Ryb3Bkb3duQWRhcHRlcicpO1xuXHRcdFx0XHRcdFx0KHRoaXMuZHJvcGRvd24gPSBuZXcgcyhlLCB0aGlzLm9wdGlvbnMpKSxcblx0XHRcdFx0XHRcdFx0KHRoaXMuJGRyb3Bkb3duID0gdGhpcy5kcm9wZG93bi5yZW5kZXIoKSksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZHJvcGRvd24ucG9zaXRpb24odGhpcy4kZHJvcGRvd24sIGkpO1xuXHRcdFx0XHRcdFx0dmFyIGEgPSB0aGlzLm9wdGlvbnMuZ2V0KCdyZXN1bHRzQWRhcHRlcicpO1xuXHRcdFx0XHRcdFx0KHRoaXMucmVzdWx0cyA9IG5ldyBhKGUsIHRoaXMub3B0aW9ucywgdGhpcy5kYXRhQWRhcHRlcikpLFxuXHRcdFx0XHRcdFx0XHQodGhpcy4kcmVzdWx0cyA9IHRoaXMucmVzdWx0cy5yZW5kZXIoKSksXG5cdFx0XHRcdFx0XHRcdHRoaXMucmVzdWx0cy5wb3NpdGlvbih0aGlzLiRyZXN1bHRzLCB0aGlzLiRkcm9wZG93bik7XG5cdFx0XHRcdFx0XHR2YXIgbCA9IHRoaXM7XG5cdFx0XHRcdFx0XHR0aGlzLl9iaW5kQWRhcHRlcnMoKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJEb21FdmVudHMoKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJEYXRhRXZlbnRzKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3JlZ2lzdGVyRHJvcGRvd25FdmVudHMoKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuX3JlZ2lzdGVyRXZlbnRzKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdGwudHJpZ2dlcignc2VsZWN0aW9uOnVwZGF0ZScsIHtkYXRhOiBlfSk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRlLmFkZENsYXNzKCdzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlJyksXG5cdFx0XHRcdFx0XHRcdGUuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpLFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9zeW5jQXR0cmlidXRlcygpLFxuXHRcdFx0XHRcdFx0XHR1LlN0b3JlRGF0YShlWzBdLCAnc2VsZWN0MicsIHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRlLmRhdGEoJ3NlbGVjdDInLCB0aGlzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHR1LkV4dGVuZChkLCB1Lk9ic2VydmFibGUpLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9nZW5lcmF0ZUlkID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0Mi0nICtcblx0XHRcdFx0XHRcdFx0XHQobnVsbCAhPSBlLmF0dHIoJ2lkJylcblx0XHRcdFx0XHRcdFx0XHRcdD8gZS5hdHRyKCdpZCcpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IG51bGwgIT0gZS5hdHRyKCduYW1lJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBlLmF0dHIoJ25hbWUnKSArICctJyArIHUuZ2VuZXJhdGVDaGFycygyKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHUuZ2VuZXJhdGVDaGFycyg0KVxuXHRcdFx0XHRcdFx0XHRcdCkucmVwbGFjZSgvKDp8XFwufFxcW3xcXF18LCkvZywgJycpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5fcGxhY2VDb250YWluZXIgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRlLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHRoaXMuX3Jlc29sdmVXaWR0aCh0aGlzLiRlbGVtZW50LCB0aGlzLm9wdGlvbnMuZ2V0KCd3aWR0aCcpKTtcblx0XHRcdFx0XHRcdFx0bnVsbCAhPSB0ICYmIGUuY3NzKCd3aWR0aCcsIHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3Jlc29sdmVXaWR0aCA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gL153aWR0aDooKFstK10/KFswLTldKlxcLik/WzAtOV0rKShweHxlbXxleHwlfGlufGNtfG1tfHB0fHBjKSkvaTtcblx0XHRcdFx0XHRcdFx0aWYgKCdyZXNvbHZlJyA9PSB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHIgPSB0aGlzLl9yZXNvbHZlV2lkdGgoZSwgJ3N0eWxlJyk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGwgIT0gciA/IHIgOiB0aGlzLl9yZXNvbHZlV2lkdGgoZSwgJ2VsZW1lbnQnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoJ2VsZW1lbnQnID09IHQpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgaSA9IGUub3V0ZXJXaWR0aCghMSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGkgPD0gMCA/ICdhdXRvJyA6IGkgKyAncHgnO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmICgnc3R5bGUnICE9IHQpIHJldHVybiAnY29tcHV0ZWRzdHlsZScgIT0gdCA/IHQgOiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlWzBdKS53aWR0aDtcblx0XHRcdFx0XHRcdFx0dmFyIG8gPSBlLmF0dHIoJ3N0eWxlJyk7XG5cdFx0XHRcdFx0XHRcdGlmICgnc3RyaW5nJyAhPSB0eXBlb2YgbykgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIHMgPSBvLnNwbGl0KCc7JyksIGEgPSAwLCBsID0gcy5sZW5ndGg7IGEgPCBsOyBhICs9IDEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYyA9IHNbYV0ucmVwbGFjZSgvXFxzL2csICcnKS5tYXRjaChuKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobnVsbCAhPT0gYyAmJiAxIDw9IGMubGVuZ3RoKSByZXR1cm4gY1sxXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9iaW5kQWRhcHRlcnMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZGF0YUFkYXB0ZXIuYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0aW9uLmJpbmQodGhpcywgdGhpcy4kY29udGFpbmVyKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRyb3Bkb3duLmJpbmQodGhpcywgdGhpcy4kY29udGFpbmVyKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc3VsdHMuYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3JlZ2lzdGVyRG9tRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQub24oJ2NoYW5nZS5zZWxlY3QyJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHQuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dC50cmlnZ2VyKCdzZWxlY3Rpb246dXBkYXRlJywge2RhdGE6IGV9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC5vbignZm9jdXMuc2VsZWN0MicsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0LnRyaWdnZXIoJ2ZvY3VzJywgZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuX3N5bmNBID0gdS5iaW5kKHRoaXMuX3N5bmNBdHRyaWJ1dGVzLCB0aGlzKSksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuX3N5bmNTID0gdS5iaW5kKHRoaXMuX3N5bmNTdWJ0cmVlLCB0aGlzKSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudFswXS5hdHRhY2hFdmVudCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudFswXS5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIHRoaXMuX3N5bmNBKTtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5Nb3pNdXRhdGlvbk9ic2VydmVyO1xuXHRcdFx0XHRcdFx0XHRudWxsICE9IGVcblx0XHRcdFx0XHRcdFx0XHQ/ICgodGhpcy5fb2JzZXJ2ZXIgPSBuZXcgZShmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpLmVhY2goZSwgdC5fc3luY0EpLCBpLmVhY2goZSwgdC5fc3luY1MpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSkpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLiRlbGVtZW50WzBdLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6ICEwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGlsZExpc3Q6ICEwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdWJ0cmVlOiAhMSxcblx0XHRcdFx0XHRcdFx0XHRcdH0pKVxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQodGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCdET01BdHRyTW9kaWZpZWQnLCB0Ll9zeW5jQSwgITEpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCdET01Ob2RlSW5zZXJ0ZWQnLCB0Ll9zeW5jUywgITEpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCdET01Ob2RlUmVtb3ZlZCcsIHQuX3N5bmNTLCAhMSkpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3JlZ2lzdGVyRGF0YUV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmRhdGFBZGFwdGVyLm9uKCcqJywgZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0XHRuLnRyaWdnZXIoZSwgdCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0ciA9IFsndG9nZ2xlJywgJ2ZvY3VzJ107XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0aW9uLm9uKCd0b2dnbGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0bi50b2dnbGVEcm9wZG93bigpO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGlvbi5vbignZm9jdXMnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi5mb2N1cyhlKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGlvbi5vbignKicsIGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQtMSA9PT0gaS5pbkFycmF5KGUsIHIpICYmIG4udHJpZ2dlcihlLCB0KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZHJvcGRvd24ub24oJyonLCBmdW5jdGlvbiAoZSwgdCkge1xuXHRcdFx0XHRcdFx0XHRcdG4udHJpZ2dlcihlLCB0KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgbiA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVzdWx0cy5vbignKicsIGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0bi50cmlnZ2VyKGUsIHQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9yZWdpc3RlckV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdG4uJGNvbnRhaW5lci5hZGRDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLW9wZW4nKTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kY29udGFpbmVyLnJlbW92ZUNsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWQnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kY29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWQnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uKCdibHVyJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bi4kY29udGFpbmVyLnJlbW92ZUNsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKTtcblx0XHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uKCdxdWVyeScsIGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuLmlzT3BlbigpIHx8IG4udHJpZ2dlcignb3BlbicsIHt9KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhQWRhcHRlci5xdWVyeSh0LCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG4udHJpZ2dlcigncmVzdWx0czphbGwnLCB7ZGF0YTogZSwgcXVlcnk6IHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbigncXVlcnk6YXBwZW5kJywgZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZGF0YUFkYXB0ZXIucXVlcnkodCwgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bi50cmlnZ2VyKCdyZXN1bHRzOmFwcGVuZCcsIHtkYXRhOiBlLCBxdWVyeTogdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbigna2V5cHJlc3MnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHQgPSBlLndoaWNoO1xuXHRcdFx0XHRcdFx0XHRcdFx0bi5pc09wZW4oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHQgPT09IHIuRVNDIHx8IHQgPT09IHIuVEFCIHx8ICh0ID09PSByLlVQICYmIGUuYWx0S2V5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKG4uY2xvc2UoKSwgZS5wcmV2ZW50RGVmYXVsdCgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdCA9PT0gci5FTlRFUlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAobi50cmlnZ2VyKCdyZXN1bHRzOnNlbGVjdCcsIHt9KSwgZS5wcmV2ZW50RGVmYXVsdCgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiB0ID09PSByLlNQQUNFICYmIGUuY3RybEtleVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IChuLnRyaWdnZXIoJ3Jlc3VsdHM6dG9nZ2xlJywge30pLCBlLnByZXZlbnREZWZhdWx0KCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdCA9PT0gci5VUFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKG4udHJpZ2dlcigncmVzdWx0czpwcmV2aW91cycsIHt9KSwgZS5wcmV2ZW50RGVmYXVsdCgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdCA9PT0gci5ET1dOICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQobi50cmlnZ2VyKCdyZXN1bHRzOm5leHQnLCB7fSksIGUucHJldmVudERlZmF1bHQoKSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiAodCA9PT0gci5FTlRFUiB8fCB0ID09PSByLlNQQUNFIHx8ICh0ID09PSByLkRPV04gJiYgZS5hbHRLZXkpKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChuLm9wZW4oKSwgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLl9zeW5jQXR0cmlidXRlcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLnNldCgnZGlzYWJsZWQnLCB0aGlzLiRlbGVtZW50LnByb3AoJ2Rpc2FibGVkJykpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJylcblx0XHRcdFx0XHRcdFx0XHRcdD8gKHRoaXMuaXNPcGVuKCkgJiYgdGhpcy5jbG9zZSgpLCB0aGlzLnRyaWdnZXIoJ2Rpc2FibGUnLCB7fSkpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMudHJpZ2dlcignZW5hYmxlJywge30pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuX3N5bmNTdWJ0cmVlID0gZnVuY3Rpb24gKGUsIHQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG4gPSAhMSxcblx0XHRcdFx0XHRcdFx0XHRyID0gdGhpcztcblx0XHRcdFx0XHRcdFx0aWYgKCFlIHx8ICFlLnRhcmdldCB8fCAnT1BUSU9OJyA9PT0gZS50YXJnZXQubm9kZU5hbWUgfHwgJ09QVEdST1VQJyA9PT0gZS50YXJnZXQubm9kZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodClcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0LmFkZGVkTm9kZXMgJiYgMCA8IHQuYWRkZWROb2Rlcy5sZW5ndGgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdC5hZGRlZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dC5hZGRlZE5vZGVzW2ldLnNlbGVjdGVkICYmIChuID0gITApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHQucmVtb3ZlZE5vZGVzICYmIDAgPCB0LnJlbW92ZWROb2Rlcy5sZW5ndGggJiYgKG4gPSAhMCk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBuID0gITA7XG5cdFx0XHRcdFx0XHRcdFx0biAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHIudHJpZ2dlcignc2VsZWN0aW9uOnVwZGF0ZScsIHtkYXRhOiBlfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uIChlLCB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBuID0gZC5fX3N1cGVyX18udHJpZ2dlcixcblx0XHRcdFx0XHRcdFx0XHRyID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3BlbjogJ29wZW5pbmcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2U6ICdjbG9zaW5nJyxcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdDogJ3NlbGVjdGluZycsXG5cdFx0XHRcdFx0XHRcdFx0XHR1bnNlbGVjdDogJ3Vuc2VsZWN0aW5nJyxcblx0XHRcdFx0XHRcdFx0XHRcdGNsZWFyOiAnY2xlYXJpbmcnLFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGlmICgodm9pZCAwID09PSB0ICYmICh0ID0ge30pLCBlIGluIHIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGkgPSByW2VdLFxuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHtwcmV2ZW50ZWQ6ICExLCBuYW1lOiBlLCBhcmdzOiB0fTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoKG4uY2FsbCh0aGlzLCBpLCBvKSwgby5wcmV2ZW50ZWQpKSByZXR1cm4gdm9pZCAodC5wcmV2ZW50ZWQgPSAhMCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bi5jYWxsKHRoaXMsIGUsIHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUudG9nZ2xlRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJykgfHwgKHRoaXMuaXNPcGVuKCkgPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmlzT3BlbigpIHx8IHRoaXMudHJpZ2dlcigncXVlcnknLCB7fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5pc09wZW4oKSAmJiB0aGlzLnRyaWdnZXIoJ2Nsb3NlJywge30pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuaXNPcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy4kY29udGFpbmVyLmhhc0NsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuaGFzRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLiRjb250YWluZXIuaGFzQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1mb2N1cycpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhhc0ZvY3VzKCkgfHxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy4kY29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKSwgdGhpcy50cmlnZ2VyKCdmb2N1cycsIHt9KSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4gJiZcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFx0XHRcdFx0XHQnU2VsZWN0MjogVGhlIGBzZWxlY3QyKFwiZW5hYmxlXCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIikgaW5zdGVhZC4nXG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHQobnVsbCAhPSBlICYmIDAgIT09IGUubGVuZ3RoKSB8fCAoZSA9IFshMF0pO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9ICFlWzBdO1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgdCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdChkLnByb3RvdHlwZS5kYXRhID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmXG5cdFx0XHRcdFx0XHRcdFx0MCA8IGFyZ3VtZW50cy5sZW5ndGggJiZcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuY29uc29sZSAmJlxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybiAmJlxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0XHRcdFx0XHRcdCdTZWxlY3QyOiBEYXRhIGNhbiBubyBsb25nZXIgYmUgc2V0IHVzaW5nIGBzZWxlY3QyKFwiZGF0YVwiKWAuIFlvdSBzaG91bGQgY29uc2lkZXIgc2V0dGluZyB0aGUgdmFsdWUgaW5zdGVhZCB1c2luZyBgJGVsZW1lbnQudmFsKClgLidcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR2YXIgdCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dCA9IGU7XG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0dFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHQoZC5wcm90b3R5cGUudmFsID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuY29uc29sZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdTZWxlY3QyOiBUaGUgYHNlbGVjdDIoXCJ2YWxcIilgIG1ldGhvZCBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbGF0ZXIgU2VsZWN0MiB2ZXJzaW9ucy4gVXNlICRlbGVtZW50LnZhbCgpIGluc3RlYWQuJ1xuXHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRudWxsID09IGUgfHwgMCA9PT0gZS5sZW5ndGgpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy4kZWxlbWVudC52YWwoKTtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSBlWzBdO1xuXHRcdFx0XHRcdFx0XHRpLmlzQXJyYXkodCkgJiZcblx0XHRcdFx0XHRcdFx0XHQodCA9IGkubWFwKHQsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZS50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH0pKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LnZhbCh0KS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50WzBdLmRldGFjaEV2ZW50ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50WzBdLmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgdGhpcy5fc3luY0EpLFxuXHRcdFx0XHRcdFx0XHRcdG51bGwgIT0gdGhpcy5fb2JzZXJ2ZXJcblx0XHRcdFx0XHRcdFx0XHRcdD8gKHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKSwgKHRoaXMuX29ic2VydmVyID0gbnVsbCkpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQodGhpcy4kZWxlbWVudFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCdET01BdHRyTW9kaWZpZWQnLCB0aGlzLl9zeW5jQSwgITEpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50WzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTU5vZGVJbnNlcnRlZCcsIHRoaXMuX3N5bmNTLCAhMSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NTm9kZVJlbW92ZWQnLCB0aGlzLl9zeW5jUywgITEpKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5fc3luY0EgPSBudWxsKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5fc3luY1MgPSBudWxsKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50Lm9mZignLnNlbGVjdDInKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JywgdS5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnKSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZScpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKSxcblx0XHRcdFx0XHRcdFx0XHR1LlJlbW92ZURhdGEodGhpcy4kZWxlbWVudFswXSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCdzZWxlY3QyJyksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXRhQWRhcHRlci5kZXN0cm95KCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZHJvcGRvd24uZGVzdHJveSgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVzdWx0cy5kZXN0cm95KCksXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuZGF0YUFkYXB0ZXIgPSBudWxsKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5zZWxlY3Rpb24gPSBudWxsKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy5kcm9wZG93biA9IG51bGwpLFxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLnJlc3VsdHMgPSBudWxsKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KGQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGUgPSBpKFxuXHRcdFx0XHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cInNlbGVjdDIgc2VsZWN0Mi1jb250YWluZXJcIj48c3BhbiBjbGFzcz1cInNlbGVjdGlvblwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cImRyb3Bkb3duLXdyYXBwZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+PC9zcGFuPidcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRlLmF0dHIoJ2RpcicsIHRoaXMub3B0aW9ucy5nZXQoJ2RpcicpKSxcblx0XHRcdFx0XHRcdFx0XHQodGhpcy4kY29udGFpbmVyID0gZSksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy4kY29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tJyArIHRoaXMub3B0aW9ucy5nZXQoJ3RoZW1lJykpLFxuXHRcdFx0XHRcdFx0XHRcdHUuU3RvcmVEYXRhKGVbMF0sICdlbGVtZW50JywgdGhpcy4kZWxlbWVudCksXG5cdFx0XHRcdFx0XHRcdFx0ZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdGUuZGVmaW5lKCdqcXVlcnktbW91c2V3aGVlbCcsIFsnanF1ZXJ5J10sIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGU7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlLmRlZmluZShcblx0XHRcdFx0XHQnanF1ZXJ5LnNlbGVjdDInLFxuXHRcdFx0XHRcdFsnanF1ZXJ5JywgJ2pxdWVyeS1tb3VzZXdoZWVsJywgJy4vc2VsZWN0Mi9jb3JlJywgJy4vc2VsZWN0Mi9kZWZhdWx0cycsICcuL3NlbGVjdDIvdXRpbHMnXSxcblx0XHRcdFx0XHRmdW5jdGlvbiAoaSwgZSwgbywgdCwgcykge1xuXHRcdFx0XHRcdFx0aWYgKG51bGwgPT0gaS5mbi5zZWxlY3QyKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhID0gWydvcGVuJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knXTtcblx0XHRcdFx0XHRcdFx0aS5mbi5zZWxlY3QyID0gZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoJ29iamVjdCcgPT0gdHlwZW9mICh0ID0gdCB8fCB7fSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlID0gaS5leHRlbmQoITAsIHt9LCB0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXcgbyhpKHRoaXMpLCBlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCdzdHJpbmcnICE9IHR5cGVvZiB0KSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIGZvciBTZWxlY3QyOiAnICsgdCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG4sXG5cdFx0XHRcdFx0XHRcdFx0XHRyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGUgPSBzLkdldERhdGEodGhpcywgJ3NlbGVjdDInKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCA9PSBlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LmNvbnNvbGUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiVGhlIHNlbGVjdDIoJ1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dCArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiJykgbWV0aG9kIHdhcyBjYWxsZWQgb24gYW4gZWxlbWVudCB0aGF0IGlzIG5vdCB1c2luZyBTZWxlY3QyLlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQobiA9IGVbdF0uYXBwbHkoZSwgcikpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdFx0XHQtMSA8IGkuaW5BcnJheSh0LCBhKSA/IHRoaXMgOiBuXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBudWxsID09IGkuZm4uc2VsZWN0Mi5kZWZhdWx0cyAmJiAoaS5mbi5zZWxlY3QyLmRlZmF1bHRzID0gdCksIG87XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR7ZGVmaW5lOiBlLmRlZmluZSwgcmVxdWlyZTogZS5yZXF1aXJlfVxuXHRcdFx0KTtcblx0XHR9KSgpLFxuXHRcdHQgPSBlLnJlcXVpcmUoJ2pxdWVyeS5zZWxlY3QyJyk7XG5cdHJldHVybiAodS5mbi5zZWxlY3QyLmFtZCA9IGUpLCB0O1xufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDZGQUFBQSxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3hCLGFBQU8sTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUFBLElBQ25DO0FBR0EsSUFBQUEsUUFBTztBQUFBLElBRUwsTUFBTSxPQUFPLGNBQWMsWUFBWSxVQUFVLEtBQ2pELE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTTtBQUFBLElBRXpDLE1BQU0sT0FBTyxRQUFRLFlBQVksSUFBSSxLQUNyQyxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FDekMsTUFBTSxPQUFPLFdBQVEsWUFBWSxPQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSx1RkFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsNkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUdaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxhQUFPLE9BQU8sZUFBZSxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssV0FBWTtBQUFFLGVBQU87QUFBQSxNQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTTtBQUFBLElBQ2pGLENBQUM7QUFBQTtBQUFBOzs7QUNQRDtBQUFBLHNHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFFWixJQUFBQSxRQUFPLFVBQVUsQ0FBQyxNQUFNLFdBQVk7QUFFbEMsVUFBSSxPQUFRLFdBQVk7QUFBQSxNQUFjLEVBQUcsS0FBSztBQUU5QyxhQUFPLE9BQU8sUUFBUSxjQUFjLEtBQUssZUFBZSxXQUFXO0FBQUEsSUFDckUsQ0FBQztBQUFBO0FBQUE7OztBQ1JEO0FBQUEsK0ZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLE9BQU8sU0FBUyxVQUFVO0FBRTlCLElBQUFBLFFBQU8sVUFBVSxjQUFjLEtBQUssS0FBSyxJQUFJLElBQUksV0FBWTtBQUMzRCxhQUFPLEtBQUssTUFBTSxNQUFNLFNBQVM7QUFBQSxJQUNuQztBQUFBO0FBQUE7OztBQ1BBO0FBQUE7QUFBQTtBQUNBLFFBQUksd0JBQXdCLENBQUMsRUFBRTtBQUUvQixRQUFJLDJCQUEyQixPQUFPO0FBR3RDLFFBQUksY0FBYyw0QkFBNEIsQ0FBQyxzQkFBc0IsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFJckYsWUFBUSxJQUFJLGNBQWMsU0FBUyxxQkFBcUIsR0FBRztBQUN6RCxVQUFJLGFBQWEseUJBQXlCLE1BQU0sQ0FBQztBQUNqRCxhQUFPLENBQUMsQ0FBQyxjQUFjLFdBQVc7QUFBQSxJQUNwQyxJQUFJO0FBQUE7QUFBQTs7O0FDYko7QUFBQSw0R0FBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxPQUFPO0FBQ3hDLGFBQU87QUFBQSxRQUNMLFlBQVksRUFBRSxTQUFTO0FBQUEsUUFDdkIsY0FBYyxFQUFFLFNBQVM7QUFBQSxRQUN6QixVQUFVLEVBQUUsU0FBUztBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNSQTtBQUFBLHVHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxvQkFBb0IsU0FBUztBQUNqQyxRQUFJLE9BQU8sa0JBQWtCO0FBQzdCLFFBQUksc0JBQXNCLGVBQWUsa0JBQWtCLEtBQUssS0FBSyxNQUFNLElBQUk7QUFFL0UsSUFBQUEsUUFBTyxVQUFVLGNBQWMsc0JBQXNCLFNBQVUsSUFBSTtBQUNqRSxhQUFPLFdBQVk7QUFDakIsZUFBTyxLQUFLLE1BQU0sSUFBSSxTQUFTO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDWEE7QUFBQSw2RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksV0FBVyxZQUFZLENBQUMsRUFBRSxRQUFRO0FBQ3RDLFFBQUksY0FBYyxZQUFZLEdBQUcsS0FBSztBQUV0QyxJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sWUFBWSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUU7QUFBQSxJQUN4QztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFDWixRQUFJLFVBQVU7QUFFZCxRQUFJLFVBQVU7QUFDZCxRQUFJLFFBQVEsWUFBWSxHQUFHLEtBQUs7QUFHaEMsSUFBQUEsUUFBTyxVQUFVLE1BQU0sV0FBWTtBQUdqQyxhQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUscUJBQXFCLENBQUM7QUFBQSxJQUM3QyxDQUFDLElBQUksU0FBVSxJQUFJO0FBQ2pCLGFBQU8sUUFBUSxFQUFFLE1BQU0sV0FBVyxNQUFNLElBQUksRUFBRSxJQUFJLFFBQVEsRUFBRTtBQUFBLElBQzlELElBQUk7QUFBQTtBQUFBOzs7QUNmSjtBQUFBLHNHQUFBQyxTQUFBO0FBQUE7QUFHQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sT0FBTyxRQUFRLE9BQU87QUFBQSxJQUMvQjtBQUFBO0FBQUE7OztBQ0xBO0FBQUEsMEdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksb0JBQW9CO0FBRXhCLFFBQUksYUFBYTtBQUlqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLFVBQUksa0JBQWtCLEVBQUUsRUFBRyxPQUFNLElBQUksV0FBVywwQkFBMEIsRUFBRTtBQUM1RSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsbUdBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUkseUJBQXlCO0FBRTdCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxjQUFjLHVCQUF1QixFQUFFLENBQUM7QUFBQSxJQUNqRDtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsNkZBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksY0FBYyxPQUFPLFlBQVksWUFBWSxTQUFTO0FBSzFELElBQUFBLFFBQU8sVUFBVSxPQUFPLGVBQWUsZUFBZSxnQkFBZ0IsU0FBWSxTQUFVLFVBQVU7QUFDcEcsYUFBTyxPQUFPLFlBQVksY0FBYyxhQUFhO0FBQUEsSUFDdkQsSUFBSSxTQUFVLFVBQVU7QUFDdEIsYUFBTyxPQUFPLFlBQVk7QUFBQSxJQUM1QjtBQUFBO0FBQUE7OztBQ1hBO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUVqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sT0FBTyxNQUFNLFdBQVcsT0FBTyxPQUFPLFdBQVcsRUFBRTtBQUFBLElBQzVEO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSw4RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLGFBQWE7QUFFakIsUUFBSSxZQUFZLFNBQVUsVUFBVTtBQUNsQyxhQUFPLFdBQVcsUUFBUSxJQUFJLFdBQVc7QUFBQSxJQUMzQztBQUVBLElBQUFELFFBQU8sVUFBVSxTQUFVLFdBQVcsUUFBUTtBQUM1QyxhQUFPLFVBQVUsU0FBUyxJQUFJLFVBQVVDLFlBQVcsU0FBUyxDQUFDLElBQUlBLFlBQVcsU0FBUyxLQUFLQSxZQUFXLFNBQVMsRUFBRSxNQUFNO0FBQUEsSUFDeEg7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsSUFBQUEsUUFBTyxVQUFVLFlBQVksQ0FBQyxFQUFFLGFBQWE7QUFBQTtBQUFBOzs7QUNIN0M7QUFBQSx3R0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUVqQixRQUFJLFlBQVlBLFlBQVc7QUFDM0IsUUFBSSxZQUFZLGFBQWEsVUFBVTtBQUV2QyxJQUFBRCxRQUFPLFVBQVUsWUFBWSxPQUFPLFNBQVMsSUFBSTtBQUFBO0FBQUE7OztBQ05qRDtBQUFBLHdHQUFBRSxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksWUFBWTtBQUVoQixRQUFJLFVBQVVBLFlBQVc7QUFDekIsUUFBSSxPQUFPQSxZQUFXO0FBQ3RCLFFBQUksV0FBVyxXQUFXLFFBQVEsWUFBWSxRQUFRLEtBQUs7QUFDM0QsUUFBSSxLQUFLLFlBQVksU0FBUztBQUM5QixRQUFJO0FBQUosUUFBVztBQUVYLFFBQUksSUFBSTtBQUNOLGNBQVEsR0FBRyxNQUFNLEdBQUc7QUFHcEIsZ0JBQVUsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUM7QUFBQSxJQUNuRTtBQUlBLFFBQUksQ0FBQyxXQUFXLFdBQVc7QUFDekIsY0FBUSxVQUFVLE1BQU0sYUFBYTtBQUNyQyxVQUFJLENBQUMsU0FBUyxNQUFNLENBQUMsS0FBSyxJQUFJO0FBQzVCLGdCQUFRLFVBQVUsTUFBTSxlQUFlO0FBQ3ZDLFlBQUksTUFBTyxXQUFVLENBQUMsTUFBTSxDQUFDO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDM0JqQjtBQUFBLDhHQUFBRSxTQUFBO0FBQUE7QUFFQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBQ1osUUFBSUMsY0FBYTtBQUVqQixRQUFJLFVBQVVBLFlBQVc7QUFHekIsSUFBQUQsUUFBTyxVQUFVLENBQUMsQ0FBQyxPQUFPLHlCQUF5QixDQUFDLE1BQU0sV0FBWTtBQUNwRSxVQUFJLFNBQVMsT0FBTyxrQkFBa0I7QUFLdEMsYUFBTyxDQUFDLFFBQVEsTUFBTSxLQUFLLEVBQUUsT0FBTyxNQUFNLGFBQWE7QUFBQSxNQUVyRCxDQUFDLE9BQU8sUUFBUSxjQUFjLGFBQWE7QUFBQSxJQUMvQyxDQUFDO0FBQUE7QUFBQTs7O0FDbEJEO0FBQUEsbUdBQUFFLFNBQUE7QUFBQTtBQUVBLFFBQUksZ0JBQWdCO0FBRXBCLElBQUFBLFFBQU8sVUFBVSxpQkFDWixDQUFDLE9BQU8sUUFDUixPQUFPLE9BQU8sWUFBWTtBQUFBO0FBQUE7OztBQ04vQjtBQUFBLDJGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksb0JBQW9CO0FBRXhCLFFBQUksVUFBVTtBQUVkLElBQUFBLFFBQU8sVUFBVSxvQkFBb0IsU0FBVSxJQUFJO0FBQ2pELGFBQU8sT0FBTyxNQUFNO0FBQUEsSUFDdEIsSUFBSSxTQUFVLElBQUk7QUFDaEIsVUFBSSxVQUFVLFdBQVcsUUFBUTtBQUNqQyxhQUFPLFdBQVcsT0FBTyxLQUFLLGNBQWMsUUFBUSxXQUFXLFFBQVEsRUFBRSxDQUFDO0FBQUEsSUFDNUU7QUFBQTtBQUFBOzs7QUNiQTtBQUFBLCtGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFFZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUk7QUFDRixlQUFPLFFBQVEsUUFBUTtBQUFBLE1BQ3pCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsNEZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxhQUFhO0FBR2pCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxXQUFXLFFBQVEsRUFBRyxRQUFPO0FBQ2pDLFlBQU0sSUFBSSxXQUFXLFlBQVksUUFBUSxJQUFJLG9CQUFvQjtBQUFBLElBQ25FO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSw0RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxZQUFZO0FBQ2hCLFFBQUksb0JBQW9CO0FBSXhCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEdBQUcsR0FBRztBQUMvQixVQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsYUFBTyxrQkFBa0IsSUFBSSxJQUFJLFNBQVksVUFBVSxJQUFJO0FBQUEsSUFDN0Q7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLHVHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLGFBQWE7QUFDakIsUUFBSSxXQUFXO0FBRWYsUUFBSSxhQUFhO0FBSWpCLElBQUFBLFFBQU8sVUFBVSxTQUFVLE9BQU8sTUFBTTtBQUN0QyxVQUFJLElBQUk7QUFDUixVQUFJLFNBQVMsWUFBWSxXQUFXLEtBQUssTUFBTSxRQUFRLEtBQUssQ0FBQyxTQUFTLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFHLFFBQU87QUFDckcsVUFBSSxXQUFXLEtBQUssTUFBTSxPQUFPLEtBQUssQ0FBQyxTQUFTLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFHLFFBQU87QUFDL0UsVUFBSSxTQUFTLFlBQVksV0FBVyxLQUFLLE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRyxRQUFPO0FBQ3JHLFlBQU0sSUFBSSxXQUFXLHlDQUF5QztBQUFBLElBQ2hFO0FBQUE7QUFBQTs7O0FDZkE7QUFBQSx5RkFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDRGpCO0FBQUEsd0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUlDLGNBQWE7QUFHakIsUUFBSSxpQkFBaUIsT0FBTztBQUU1QixJQUFBRCxRQUFPLFVBQVUsU0FBVSxLQUFLLE9BQU87QUFDckMsVUFBSTtBQUNGLHVCQUFlQyxhQUFZLEtBQUssRUFBRSxPQUFjLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLE1BQ3RGLFNBQVMsT0FBTztBQUNkLFFBQUFBLFlBQVcsR0FBRyxJQUFJO0FBQUEsTUFDcEI7QUFBRSxhQUFPO0FBQUEsSUFDWDtBQUFBO0FBQUE7OztBQ1pBO0FBQUEsOEZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksVUFBVTtBQUNkLFFBQUlDLGNBQWE7QUFDakIsUUFBSSx1QkFBdUI7QUFFM0IsUUFBSSxTQUFTO0FBQ2IsUUFBSSxRQUFRRCxRQUFPLFVBQVVDLFlBQVcsTUFBTSxLQUFLLHFCQUFxQixRQUFRLENBQUMsQ0FBQztBQUVsRixLQUFDLE1BQU0sYUFBYSxNQUFNLFdBQVcsQ0FBQyxJQUFJLEtBQUs7QUFBQSxNQUM3QyxTQUFTO0FBQUEsTUFDVCxNQUFNLFVBQVUsU0FBUztBQUFBLE1BQ3pCLFdBQVc7QUFBQSxNQUNYLFNBQVM7QUFBQSxNQUNULFFBQVE7QUFBQSxJQUNWLENBQUM7QUFBQTtBQUFBOzs7QUNkRDtBQUFBLHdGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFFWixJQUFBQSxRQUFPLFVBQVUsU0FBVSxLQUFLLE9BQU87QUFDckMsYUFBTyxNQUFNLEdBQUcsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUM7QUFBQSxJQUMvQztBQUFBO0FBQUE7OztBQ0xBO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUkseUJBQXlCO0FBRTdCLFFBQUksVUFBVTtBQUlkLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsYUFBTyxRQUFRLHVCQUF1QixRQUFRLENBQUM7QUFBQSxJQUNqRDtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsa0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFdBQVc7QUFFZixRQUFJLGlCQUFpQixZQUFZLENBQUMsRUFBRSxjQUFjO0FBS2xELElBQUFBLFFBQU8sVUFBVSxPQUFPLFVBQVUsU0FBUyxPQUFPLElBQUksS0FBSztBQUN6RCxhQUFPLGVBQWUsU0FBUyxFQUFFLEdBQUcsR0FBRztBQUFBLElBQ3pDO0FBQUE7QUFBQTs7O0FDWEE7QUFBQSxxRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksS0FBSztBQUNULFFBQUksVUFBVSxLQUFLLE9BQU87QUFDMUIsUUFBSSxXQUFXLFlBQVksR0FBSSxRQUFRO0FBRXZDLElBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUs7QUFDOUIsYUFBTyxhQUFhLFFBQVEsU0FBWSxLQUFLLE9BQU8sT0FBTyxTQUFTLEVBQUUsS0FBSyxTQUFTLEVBQUU7QUFBQSxJQUN4RjtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsbUdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxTQUFTO0FBQ2IsUUFBSSxNQUFNO0FBQ1YsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxvQkFBb0I7QUFFeEIsUUFBSUMsVUFBU0QsWUFBVztBQUN4QixRQUFJLHdCQUF3QixPQUFPLEtBQUs7QUFDeEMsUUFBSSx3QkFBd0Isb0JBQW9CQyxRQUFPLEtBQUssS0FBS0EsVUFBU0EsV0FBVUEsUUFBTyxpQkFBaUI7QUFFNUcsSUFBQUYsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJLENBQUMsT0FBTyx1QkFBdUIsSUFBSSxHQUFHO0FBQ3hDLDhCQUFzQixJQUFJLElBQUksaUJBQWlCLE9BQU9FLFNBQVEsSUFBSSxJQUM5REEsUUFBTyxJQUFJLElBQ1gsc0JBQXNCLFlBQVksSUFBSTtBQUFBLE1BQzVDO0FBQUUsYUFBTyxzQkFBc0IsSUFBSTtBQUFBLElBQ3JDO0FBQUE7QUFBQTs7O0FDbEJBO0FBQUEsOEZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksV0FBVztBQUNmLFFBQUksV0FBVztBQUNmLFFBQUksWUFBWTtBQUNoQixRQUFJLHNCQUFzQjtBQUMxQixRQUFJLGtCQUFrQjtBQUV0QixRQUFJLGFBQWE7QUFDakIsUUFBSSxlQUFlLGdCQUFnQixhQUFhO0FBSWhELElBQUFBLFFBQU8sVUFBVSxTQUFVLE9BQU8sTUFBTTtBQUN0QyxVQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLLEVBQUcsUUFBTztBQUNoRCxVQUFJLGVBQWUsVUFBVSxPQUFPLFlBQVk7QUFDaEQsVUFBSTtBQUNKLFVBQUksY0FBYztBQUNoQixZQUFJLFNBQVMsT0FBVyxRQUFPO0FBQy9CLGlCQUFTLEtBQUssY0FBYyxPQUFPLElBQUk7QUFDdkMsWUFBSSxDQUFDLFNBQVMsTUFBTSxLQUFLLFNBQVMsTUFBTSxFQUFHLFFBQU87QUFDbEQsY0FBTSxJQUFJLFdBQVcseUNBQXlDO0FBQUEsTUFDaEU7QUFDQSxVQUFJLFNBQVMsT0FBVyxRQUFPO0FBQy9CLGFBQU8sb0JBQW9CLE9BQU8sSUFBSTtBQUFBLElBQ3hDO0FBQUE7QUFBQTs7O0FDekJBO0FBQUEsaUdBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFdBQVc7QUFJZixJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUksTUFBTSxZQUFZLFVBQVUsUUFBUTtBQUN4QyxhQUFPLFNBQVMsR0FBRyxJQUFJLE1BQU0sTUFBTTtBQUFBLElBQ3JDO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSx5R0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLFdBQVc7QUFFZixRQUFJQyxZQUFXRCxZQUFXO0FBRTFCLFFBQUksU0FBUyxTQUFTQyxTQUFRLEtBQUssU0FBU0EsVUFBUyxhQUFhO0FBRWxFLElBQUFGLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxTQUFTRSxVQUFTLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFBQSxJQUNoRDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsZ0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFDWixRQUFJLGdCQUFnQjtBQUdwQixJQUFBQSxRQUFPLFVBQVUsQ0FBQyxlQUFlLENBQUMsTUFBTSxXQUFZO0FBRWxELGFBQU8sT0FBTyxlQUFlLGNBQWMsS0FBSyxHQUFHLEtBQUs7QUFBQSxRQUN0RCxLQUFLLFdBQVk7QUFBRSxpQkFBTztBQUFBLFFBQUc7QUFBQSxNQUMvQixDQUFDLEVBQUUsTUFBTTtBQUFBLElBQ1gsQ0FBQztBQUFBO0FBQUE7OztBQ1hEO0FBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLE9BQU87QUFDWCxRQUFJLDZCQUE2QjtBQUNqQyxRQUFJLDJCQUEyQjtBQUMvQixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFNBQVM7QUFDYixRQUFJLGlCQUFpQjtBQUdyQixRQUFJLDRCQUE0QixPQUFPO0FBSXZDLFlBQVEsSUFBSSxjQUFjLDRCQUE0QixTQUFTLHlCQUF5QixHQUFHLEdBQUc7QUFDNUYsVUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixVQUFJLGNBQWMsQ0FBQztBQUNuQixVQUFJLGVBQWdCLEtBQUk7QUFDdEIsZUFBTywwQkFBMEIsR0FBRyxDQUFDO0FBQUEsTUFDdkMsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUcsUUFBTyx5QkFBeUIsQ0FBQyxLQUFLLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDbkc7QUFBQTtBQUFBOzs7QUN0QkE7QUFBQSx5R0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUlaLElBQUFBLFFBQU8sVUFBVSxlQUFlLE1BQU0sV0FBWTtBQUVoRCxhQUFPLE9BQU8sZUFBZSxXQUFZO0FBQUEsTUFBYyxHQUFHLGFBQWE7QUFBQSxRQUNyRSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsTUFDWixDQUFDLEVBQUUsY0FBYztBQUFBLElBQ25CLENBQUM7QUFBQTtBQUFBOzs7QUNaRDtBQUFBLDJGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFdBQVc7QUFFZixRQUFJLFVBQVU7QUFDZCxRQUFJLGFBQWE7QUFHakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLFNBQVMsUUFBUSxFQUFHLFFBQU87QUFDL0IsWUFBTSxJQUFJLFdBQVcsUUFBUSxRQUFRLElBQUksbUJBQW1CO0FBQUEsSUFDOUQ7QUFBQTtBQUFBOzs7QUNWQTtBQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSwwQkFBMEI7QUFDOUIsUUFBSSxXQUFXO0FBQ2YsUUFBSSxnQkFBZ0I7QUFFcEIsUUFBSSxhQUFhO0FBRWpCLFFBQUksa0JBQWtCLE9BQU87QUFFN0IsUUFBSSw0QkFBNEIsT0FBTztBQUN2QyxRQUFJLGFBQWE7QUFDakIsUUFBSSxlQUFlO0FBQ25CLFFBQUksV0FBVztBQUlmLFlBQVEsSUFBSSxjQUFjLDBCQUEwQixTQUFTLGVBQWUsR0FBRyxHQUFHLFlBQVk7QUFDNUYsZUFBUyxDQUFDO0FBQ1YsVUFBSSxjQUFjLENBQUM7QUFDbkIsZUFBUyxVQUFVO0FBQ25CLFVBQUksT0FBTyxNQUFNLGNBQWMsTUFBTSxlQUFlLFdBQVcsY0FBYyxZQUFZLGNBQWMsQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUM1SCxZQUFJLFVBQVUsMEJBQTBCLEdBQUcsQ0FBQztBQUM1QyxZQUFJLFdBQVcsUUFBUSxRQUFRLEdBQUc7QUFDaEMsWUFBRSxDQUFDLElBQUksV0FBVztBQUNsQix1QkFBYTtBQUFBLFlBQ1gsY0FBYyxnQkFBZ0IsYUFBYSxXQUFXLFlBQVksSUFBSSxRQUFRLFlBQVk7QUFBQSxZQUMxRixZQUFZLGNBQWMsYUFBYSxXQUFXLFVBQVUsSUFBSSxRQUFRLFVBQVU7QUFBQSxZQUNsRixVQUFVO0FBQUEsVUFDWjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUUsYUFBTyxnQkFBZ0IsR0FBRyxHQUFHLFVBQVU7QUFBQSxJQUMzQyxJQUFJLGtCQUFrQixTQUFTLGVBQWUsR0FBRyxHQUFHLFlBQVk7QUFDOUQsZUFBUyxDQUFDO0FBQ1YsVUFBSSxjQUFjLENBQUM7QUFDbkIsZUFBUyxVQUFVO0FBQ25CLFVBQUksZUFBZ0IsS0FBSTtBQUN0QixlQUFPLGdCQUFnQixHQUFHLEdBQUcsVUFBVTtBQUFBLE1BQ3pDLFNBQVMsT0FBTztBQUFBLE1BQWM7QUFDOUIsVUFBSSxTQUFTLGNBQWMsU0FBUyxXQUFZLE9BQU0sSUFBSSxXQUFXLHlCQUF5QjtBQUM5RixVQUFJLFdBQVcsV0FBWSxHQUFFLENBQUMsSUFBSSxXQUFXO0FBQzdDLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDM0NBO0FBQUEsZ0hBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLDJCQUEyQjtBQUUvQixJQUFBQSxRQUFPLFVBQVUsY0FBYyxTQUFVLFFBQVEsS0FBSyxPQUFPO0FBQzNELGFBQU8scUJBQXFCLEVBQUUsUUFBUSxLQUFLLHlCQUF5QixHQUFHLEtBQUssQ0FBQztBQUFBLElBQy9FLElBQUksU0FBVSxRQUFRLEtBQUssT0FBTztBQUNoQyxhQUFPLEdBQUcsSUFBSTtBQUNkLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSwrRkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUViLFFBQUksb0JBQW9CLFNBQVM7QUFFakMsUUFBSSxnQkFBZ0IsZUFBZSxPQUFPO0FBRTFDLFFBQUksU0FBUyxPQUFPLG1CQUFtQixNQUFNO0FBRTdDLFFBQUksU0FBUyxVQUFXLFNBQVMsWUFBWTtBQUFBLElBQWMsRUFBRyxTQUFTO0FBQ3ZFLFFBQUksZUFBZSxXQUFXLENBQUMsZUFBZ0IsZUFBZSxjQUFjLG1CQUFtQixNQUFNLEVBQUU7QUFFdkcsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ2pCQTtBQUFBLGdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksUUFBUTtBQUVaLFFBQUksbUJBQW1CLFlBQVksU0FBUyxRQUFRO0FBR3BELFFBQUksQ0FBQyxXQUFXLE1BQU0sYUFBYSxHQUFHO0FBQ3BDLFlBQU0sZ0JBQWdCLFNBQVUsSUFBSTtBQUNsQyxlQUFPLGlCQUFpQixFQUFFO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBRUEsSUFBQUEsUUFBTyxVQUFVLE1BQU07QUFBQTtBQUFBOzs7QUNkdkI7QUFBQSwwR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLGFBQWE7QUFFakIsUUFBSSxVQUFVQSxZQUFXO0FBRXpCLElBQUFELFFBQU8sVUFBVSxXQUFXLE9BQU8sS0FBSyxjQUFjLEtBQUssT0FBTyxPQUFPLENBQUM7QUFBQTtBQUFBOzs7QUNOMUU7QUFBQSw0RkFBQUUsU0FBQTtBQUFBO0FBQ0EsUUFBSSxTQUFTO0FBQ2IsUUFBSSxNQUFNO0FBRVYsUUFBSSxPQUFPLE9BQU8sTUFBTTtBQUV4QixJQUFBQSxRQUFPLFVBQVUsU0FBVSxLQUFLO0FBQzlCLGFBQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHO0FBQUEsSUFDMUM7QUFBQTtBQUFBOzs7QUNSQTtBQUFBLDZGQUFBQyxTQUFBO0FBQUE7QUFDQSxJQUFBQSxRQUFPLFVBQVUsQ0FBQztBQUFBO0FBQUE7OztBQ0RsQjtBQUFBLGdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGtCQUFrQjtBQUN0QixRQUFJQyxjQUFhO0FBQ2pCLFFBQUksV0FBVztBQUNmLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUNoQixRQUFJLGFBQWE7QUFFakIsUUFBSSw2QkFBNkI7QUFDakMsUUFBSUMsYUFBWUQsWUFBVztBQUMzQixRQUFJLFVBQVVBLFlBQVc7QUFDekIsUUFBSTtBQUFKLFFBQVM7QUFBVCxRQUFjO0FBRWQsUUFBSSxVQUFVLFNBQVUsSUFBSTtBQUMxQixhQUFPLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxJQUN2QztBQUVBLFFBQUksWUFBWSxTQUFVLE1BQU07QUFDOUIsYUFBTyxTQUFVLElBQUk7QUFDbkIsWUFBSTtBQUNKLFlBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxRQUFRLElBQUksRUFBRSxHQUFHLFNBQVMsTUFBTTtBQUNwRCxnQkFBTSxJQUFJQyxXQUFVLDRCQUE0QixPQUFPLFdBQVc7QUFBQSxRQUNwRTtBQUFFLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUVBLFFBQUksbUJBQW1CLE9BQU8sT0FBTztBQUMvQixjQUFRLE9BQU8sVUFBVSxPQUFPLFFBQVEsSUFBSSxRQUFRO0FBRXhELFlBQU0sTUFBTSxNQUFNO0FBQ2xCLFlBQU0sTUFBTSxNQUFNO0FBQ2xCLFlBQU0sTUFBTSxNQUFNO0FBRWxCLFlBQU0sU0FBVSxJQUFJLFVBQVU7QUFDNUIsWUFBSSxNQUFNLElBQUksRUFBRSxFQUFHLE9BQU0sSUFBSUEsV0FBVSwwQkFBMEI7QUFDakUsaUJBQVMsU0FBUztBQUNsQixjQUFNLElBQUksSUFBSSxRQUFRO0FBQ3RCLGVBQU87QUFBQSxNQUNUO0FBQ0EsWUFBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxNQUFNLElBQUksRUFBRSxLQUFLLENBQUM7QUFBQSxNQUMzQjtBQUNBLFlBQU0sU0FBVSxJQUFJO0FBQ2xCLGVBQU8sTUFBTSxJQUFJLEVBQUU7QUFBQSxNQUNyQjtBQUFBLElBQ0YsT0FBTztBQUNELGNBQVEsVUFBVSxPQUFPO0FBQzdCLGlCQUFXLEtBQUssSUFBSTtBQUNwQixZQUFNLFNBQVUsSUFBSSxVQUFVO0FBQzVCLFlBQUksT0FBTyxJQUFJLEtBQUssRUFBRyxPQUFNLElBQUlBLFdBQVUsMEJBQTBCO0FBQ3JFLGlCQUFTLFNBQVM7QUFDbEIsb0NBQTRCLElBQUksT0FBTyxRQUFRO0FBQy9DLGVBQU87QUFBQSxNQUNUO0FBQ0EsWUFBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxPQUFPLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUMxQztBQUNBLFlBQU0sU0FBVSxJQUFJO0FBQ2xCLGVBQU8sT0FBTyxJQUFJLEtBQUs7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFqQ007QUFtQkE7QUFnQk4sSUFBQUYsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDdEVBO0FBQUEsK0ZBQUFHLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFDWixRQUFJLGFBQWE7QUFDakIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksNkJBQTZCLHdCQUFzQztBQUN2RSxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLHNCQUFzQjtBQUUxQixRQUFJLHVCQUF1QixvQkFBb0I7QUFDL0MsUUFBSSxtQkFBbUIsb0JBQW9CO0FBQzNDLFFBQUksVUFBVTtBQUVkLFFBQUksaUJBQWlCLE9BQU87QUFDNUIsUUFBSSxjQUFjLFlBQVksR0FBRyxLQUFLO0FBQ3RDLFFBQUksVUFBVSxZQUFZLEdBQUcsT0FBTztBQUNwQyxRQUFJLE9BQU8sWUFBWSxDQUFDLEVBQUUsSUFBSTtBQUU5QixRQUFJLHNCQUFzQixlQUFlLENBQUMsTUFBTSxXQUFZO0FBQzFELGFBQU8sZUFBZSxXQUFZO0FBQUEsTUFBYyxHQUFHLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVc7QUFBQSxJQUN4RixDQUFDO0FBRUQsUUFBSSxXQUFXLE9BQU8sTUFBTSxFQUFFLE1BQU0sUUFBUTtBQUU1QyxRQUFJLGNBQWNBLFFBQU8sVUFBVSxTQUFVLE9BQU8sTUFBTSxTQUFTO0FBQ2pFLFVBQUksWUFBWSxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxXQUFXO0FBQ2xELGVBQU8sTUFBTSxRQUFRLFFBQVEsSUFBSSxHQUFHLHlCQUF5QixJQUFJLElBQUk7QUFBQSxNQUN2RTtBQUNBLFVBQUksV0FBVyxRQUFRLE9BQVEsUUFBTyxTQUFTO0FBQy9DLFVBQUksV0FBVyxRQUFRLE9BQVEsUUFBTyxTQUFTO0FBQy9DLFVBQUksQ0FBQyxPQUFPLE9BQU8sTUFBTSxLQUFNLDhCQUE4QixNQUFNLFNBQVMsTUFBTztBQUNqRixZQUFJLFlBQWEsZ0JBQWUsT0FBTyxRQUFRLEVBQUUsT0FBTyxNQUFNLGNBQWMsS0FBSyxDQUFDO0FBQUEsWUFDN0UsT0FBTSxPQUFPO0FBQUEsTUFDcEI7QUFDQSxVQUFJLHVCQUF1QixXQUFXLE9BQU8sU0FBUyxPQUFPLEtBQUssTUFBTSxXQUFXLFFBQVEsT0FBTztBQUNoRyx1QkFBZSxPQUFPLFVBQVUsRUFBRSxPQUFPLFFBQVEsTUFBTSxDQUFDO0FBQUEsTUFDMUQ7QUFDQSxVQUFJO0FBQ0YsWUFBSSxXQUFXLE9BQU8sU0FBUyxhQUFhLEtBQUssUUFBUSxhQUFhO0FBQ3BFLGNBQUksWUFBYSxnQkFBZSxPQUFPLGFBQWEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUFBLFFBRXpFLFdBQVcsTUFBTSxVQUFXLE9BQU0sWUFBWTtBQUFBLE1BQ2hELFNBQVMsT0FBTztBQUFBLE1BQWM7QUFDOUIsVUFBSSxRQUFRLHFCQUFxQixLQUFLO0FBQ3RDLFVBQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxHQUFHO0FBQzVCLGNBQU0sU0FBUyxLQUFLLFVBQVUsT0FBTyxRQUFRLFdBQVcsT0FBTyxFQUFFO0FBQUEsTUFDbkU7QUFBRSxhQUFPO0FBQUEsSUFDWDtBQUlBLGFBQVMsVUFBVSxXQUFXLFlBQVksU0FBUyxXQUFXO0FBQzVELGFBQU8sV0FBVyxJQUFJLEtBQUssaUJBQWlCLElBQUksRUFBRSxVQUFVLGNBQWMsSUFBSTtBQUFBLElBQ2hGLEdBQUcsVUFBVTtBQUFBO0FBQUE7OztBQ3REYjtBQUFBLGlHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSx1QkFBdUI7QUFDM0IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksdUJBQXVCO0FBRTNCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEdBQUcsS0FBSyxPQUFPLFNBQVM7QUFDakQsVUFBSSxDQUFDLFFBQVMsV0FBVSxDQUFDO0FBQ3pCLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksT0FBTyxRQUFRLFNBQVMsU0FBWSxRQUFRLE9BQU87QUFDdkQsVUFBSSxXQUFXLEtBQUssRUFBRyxhQUFZLE9BQU8sTUFBTSxPQUFPO0FBQ3ZELFVBQUksUUFBUSxRQUFRO0FBQ2xCLFlBQUksT0FBUSxHQUFFLEdBQUcsSUFBSTtBQUFBLFlBQ2hCLHNCQUFxQixLQUFLLEtBQUs7QUFBQSxNQUN0QyxPQUFPO0FBQ0wsWUFBSTtBQUNGLGNBQUksQ0FBQyxRQUFRLE9BQVEsUUFBTyxFQUFFLEdBQUc7QUFBQSxtQkFDeEIsRUFBRSxHQUFHLEVBQUcsVUFBUztBQUFBLFFBQzVCLFNBQVMsT0FBTztBQUFBLFFBQWM7QUFDOUIsWUFBSSxPQUFRLEdBQUUsR0FBRyxJQUFJO0FBQUEsWUFDaEIsc0JBQXFCLEVBQUUsR0FBRyxLQUFLO0FBQUEsVUFDbEM7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGNBQWMsQ0FBQyxRQUFRO0FBQUEsVUFDdkIsVUFBVSxDQUFDLFFBQVE7QUFBQSxRQUNyQixDQUFDO0FBQUEsTUFDSDtBQUFFLGFBQU87QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDM0JBO0FBQUEsNEZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTyxLQUFLO0FBQ2hCLFFBQUksUUFBUSxLQUFLO0FBS2pCLElBQUFBLFFBQU8sVUFBVSxLQUFLLFNBQVMsU0FBUyxNQUFNLEdBQUc7QUFDL0MsVUFBSSxJQUFJLENBQUM7QUFDVCxjQUFRLElBQUksSUFBSSxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQ2pDO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSx3R0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBSVosSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLFNBQVMsQ0FBQztBQUVkLGFBQU8sV0FBVyxVQUFVLFdBQVcsSUFBSSxJQUFJLE1BQU0sTUFBTTtBQUFBLElBQzdEO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSxtR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxzQkFBc0I7QUFFMUIsUUFBSSxNQUFNLEtBQUs7QUFDZixRQUFJLE1BQU0sS0FBSztBQUtmLElBQUFBLFFBQU8sVUFBVSxTQUFVLE9BQU8sUUFBUTtBQUN4QyxVQUFJLFVBQVUsb0JBQW9CLEtBQUs7QUFDdkMsYUFBTyxVQUFVLElBQUksSUFBSSxVQUFVLFFBQVEsQ0FBQyxJQUFJLElBQUksU0FBUyxNQUFNO0FBQUEsSUFDckU7QUFBQTtBQUFBOzs7QUNaQTtBQUFBLDJGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHNCQUFzQjtBQUUxQixRQUFJLE1BQU0sS0FBSztBQUlmLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxNQUFNLG9CQUFvQixRQUFRO0FBQ3RDLGFBQU8sTUFBTSxJQUFJLElBQUksS0FBSyxnQkFBZ0IsSUFBSTtBQUFBLElBQ2hEO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSxzR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxXQUFXO0FBSWYsSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSztBQUM5QixhQUFPLFNBQVMsSUFBSSxNQUFNO0FBQUEsSUFDNUI7QUFBQTtBQUFBOzs7QUNQQTtBQUFBLGdHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLG9CQUFvQjtBQUd4QixRQUFJLGVBQWUsU0FBVSxhQUFhO0FBQ3hDLGFBQU8sU0FBVSxPQUFPLElBQUksV0FBVztBQUNyQyxZQUFJLElBQUksZ0JBQWdCLEtBQUs7QUFDN0IsWUFBSSxTQUFTLGtCQUFrQixDQUFDO0FBQ2hDLFlBQUksV0FBVyxFQUFHLFFBQU8sQ0FBQyxlQUFlO0FBQ3pDLFlBQUksUUFBUSxnQkFBZ0IsV0FBVyxNQUFNO0FBQzdDLFlBQUk7QUFHSixZQUFJLGVBQWUsT0FBTyxHQUFJLFFBQU8sU0FBUyxPQUFPO0FBQ25ELGtCQUFRLEVBQUUsT0FBTztBQUVqQixjQUFJLFVBQVUsTUFBTyxRQUFPO0FBQUEsUUFFOUI7QUFBQSxZQUFPLFFBQU0sU0FBUyxPQUFPLFNBQVM7QUFDcEMsZUFBSyxlQUFlLFNBQVMsTUFBTSxFQUFFLEtBQUssTUFBTSxHQUFJLFFBQU8sZUFBZSxTQUFTO0FBQUEsUUFDckY7QUFBRSxlQUFPLENBQUMsZUFBZTtBQUFBLE1BQzNCO0FBQUEsSUFDRjtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7QUFBQSxNQUdmLFVBQVUsYUFBYSxJQUFJO0FBQUE7QUFBQTtBQUFBLE1BRzNCLFNBQVMsYUFBYSxLQUFLO0FBQUEsSUFDN0I7QUFBQTtBQUFBOzs7QUNqQ0E7QUFBQSxzR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUNiLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksVUFBVSx5QkFBdUM7QUFDckQsUUFBSSxhQUFhO0FBRWpCLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRTlCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsT0FBTztBQUN4QyxVQUFJLElBQUksZ0JBQWdCLE1BQU07QUFDOUIsVUFBSSxJQUFJO0FBQ1IsVUFBSSxTQUFTLENBQUM7QUFDZCxVQUFJO0FBQ0osV0FBSyxPQUFPLEVBQUcsRUFBQyxPQUFPLFlBQVksR0FBRyxLQUFLLE9BQU8sR0FBRyxHQUFHLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFFN0UsYUFBTyxNQUFNLFNBQVMsRUFBRyxLQUFJLE9BQU8sR0FBRyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUc7QUFDeEQsU0FBQyxRQUFRLFFBQVEsR0FBRyxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQUEsTUFDM0M7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ3BCQTtBQUFBLCtGQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1ZBO0FBQUE7QUFBQTtBQUNBLFFBQUkscUJBQXFCO0FBQ3pCLFFBQUksY0FBYztBQUVsQixRQUFJLGFBQWEsWUFBWSxPQUFPLFVBQVUsV0FBVztBQUt6RCxZQUFRLElBQUksT0FBTyx1QkFBdUIsU0FBUyxvQkFBb0IsR0FBRztBQUN4RSxhQUFPLG1CQUFtQixHQUFHLFVBQVU7QUFBQSxJQUN6QztBQUFBO0FBQUE7OztBQ1hBO0FBQUE7QUFBQTtBQUVBLFlBQVEsSUFBSSxPQUFPO0FBQUE7QUFBQTs7O0FDRm5CO0FBQUEsMEZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGNBQWM7QUFDbEIsUUFBSSw0QkFBNEI7QUFDaEMsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxXQUFXO0FBRWYsUUFBSSxTQUFTLFlBQVksQ0FBQyxFQUFFLE1BQU07QUFHbEMsSUFBQUEsUUFBTyxVQUFVLFdBQVcsV0FBVyxTQUFTLEtBQUssU0FBUyxRQUFRLElBQUk7QUFDeEUsVUFBSSxPQUFPLDBCQUEwQixFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ25ELFVBQUksd0JBQXdCLDRCQUE0QjtBQUN4RCxhQUFPLHdCQUF3QixPQUFPLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQyxJQUFJO0FBQUEsSUFDM0U7QUFBQTtBQUFBOzs7QUNkQTtBQUFBLDZHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVM7QUFDYixRQUFJLFVBQVU7QUFDZCxRQUFJLGlDQUFpQztBQUNyQyxRQUFJLHVCQUF1QjtBQUUzQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLFFBQVEsWUFBWTtBQUNyRCxVQUFJLE9BQU8sUUFBUSxNQUFNO0FBQ3pCLFVBQUksaUJBQWlCLHFCQUFxQjtBQUMxQyxVQUFJLDJCQUEyQiwrQkFBK0I7QUFDOUQsZUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztBQUNwQyxZQUFJLE1BQU0sS0FBSyxDQUFDO0FBQ2hCLFlBQUksQ0FBQyxPQUFPLFFBQVEsR0FBRyxLQUFLLEVBQUUsY0FBYyxPQUFPLFlBQVksR0FBRyxJQUFJO0FBQ3BFLHlCQUFlLFFBQVEsS0FBSyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUNuRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDaEJBO0FBQUEsMkZBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUNaLFFBQUksYUFBYTtBQUVqQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxXQUFXLFNBQVUsU0FBUyxXQUFXO0FBQzNDLFVBQUksUUFBUSxLQUFLLFVBQVUsT0FBTyxDQUFDO0FBQ25DLGFBQU8sVUFBVSxXQUFXLE9BQ3hCLFVBQVUsU0FBUyxRQUNuQixXQUFXLFNBQVMsSUFBSSxNQUFNLFNBQVMsSUFDdkMsQ0FBQyxDQUFDO0FBQUEsSUFDUjtBQUVBLFFBQUksWUFBWSxTQUFTLFlBQVksU0FBVSxRQUFRO0FBQ3JELGFBQU8sT0FBTyxNQUFNLEVBQUUsUUFBUSxhQUFhLEdBQUcsRUFBRSxZQUFZO0FBQUEsSUFDOUQ7QUFFQSxRQUFJLE9BQU8sU0FBUyxPQUFPLENBQUM7QUFDNUIsUUFBSSxTQUFTLFNBQVMsU0FBUztBQUMvQixRQUFJLFdBQVcsU0FBUyxXQUFXO0FBRW5DLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3RCakI7QUFBQSx3RkFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLDJCQUEyQiw2Q0FBMkQ7QUFDMUYsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSx1QkFBdUI7QUFDM0IsUUFBSSw0QkFBNEI7QUFDaEMsUUFBSSxXQUFXO0FBaUJmLElBQUFELFFBQU8sVUFBVSxTQUFVLFNBQVMsUUFBUTtBQUMxQyxVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFFBQVEsUUFBUSxLQUFLLGdCQUFnQixnQkFBZ0I7QUFDekQsVUFBSSxRQUFRO0FBQ1YsaUJBQVNDO0FBQUEsTUFDWCxXQUFXLFFBQVE7QUFDakIsaUJBQVNBLFlBQVcsTUFBTSxLQUFLLHFCQUFxQixRQUFRLENBQUMsQ0FBQztBQUFBLE1BQ2hFLE9BQU87QUFDTCxpQkFBU0EsWUFBVyxNQUFNLEtBQUtBLFlBQVcsTUFBTSxFQUFFO0FBQUEsTUFDcEQ7QUFDQSxVQUFJLE9BQVEsTUFBSyxPQUFPLFFBQVE7QUFDOUIseUJBQWlCLE9BQU8sR0FBRztBQUMzQixZQUFJLFFBQVEsZ0JBQWdCO0FBQzFCLHVCQUFhLHlCQUF5QixRQUFRLEdBQUc7QUFDakQsMkJBQWlCLGNBQWMsV0FBVztBQUFBLFFBQzVDLE1BQU8sa0JBQWlCLE9BQU8sR0FBRztBQUNsQyxpQkFBUyxTQUFTLFNBQVMsTUFBTSxVQUFVLFNBQVMsTUFBTSxPQUFPLEtBQUssUUFBUSxNQUFNO0FBRXBGLFlBQUksQ0FBQyxVQUFVLG1CQUFtQixRQUFXO0FBQzNDLGNBQUksT0FBTyxrQkFBa0IsT0FBTyxlQUFnQjtBQUNwRCxvQ0FBMEIsZ0JBQWdCLGNBQWM7QUFBQSxRQUMxRDtBQUVBLFlBQUksUUFBUSxRQUFTLGtCQUFrQixlQUFlLE1BQU87QUFDM0Qsc0NBQTRCLGdCQUFnQixRQUFRLElBQUk7QUFBQSxRQUMxRDtBQUNBLHNCQUFjLFFBQVEsS0FBSyxnQkFBZ0IsT0FBTztBQUFBLE1BQ3BEO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3REQTtBQUFBLDBGQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFLZCxJQUFBQSxRQUFPLFVBQVUsTUFBTSxXQUFXLFNBQVMsUUFBUSxVQUFVO0FBQzNELGFBQU8sUUFBUSxRQUFRLE1BQU07QUFBQSxJQUMvQjtBQUFBO0FBQUE7OztBQ1JBO0FBQUEsa0dBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFVBQVU7QUFFZCxRQUFJLGFBQWE7QUFFakIsUUFBSSwyQkFBMkIsT0FBTztBQUd0QyxRQUFJLG9DQUFvQyxlQUFlLENBQUMsV0FBWTtBQUVsRSxVQUFJLFNBQVMsT0FBVyxRQUFPO0FBQy9CLFVBQUk7QUFFRixlQUFPLGVBQWUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxVQUFVLE1BQU0sQ0FBQyxFQUFFLFNBQVM7QUFBQSxNQUNwRSxTQUFTLE9BQU87QUFDZCxlQUFPLGlCQUFpQjtBQUFBLE1BQzFCO0FBQUEsSUFDRixFQUFFO0FBRUYsSUFBQUEsUUFBTyxVQUFVLG9DQUFvQyxTQUFVLEdBQUcsUUFBUTtBQUN4RSxVQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsUUFBUSxFQUFFLFVBQVU7QUFDakUsY0FBTSxJQUFJLFdBQVcsOEJBQThCO0FBQUEsTUFDckQ7QUFBRSxhQUFPLEVBQUUsU0FBUztBQUFBLElBQ3RCLElBQUksU0FBVSxHQUFHLFFBQVE7QUFDdkIsYUFBTyxFQUFFLFNBQVM7QUFBQSxJQUNwQjtBQUFBO0FBQUE7OztBQzFCQTtBQUFBLDhHQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxtQkFBbUI7QUFFdkIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsSUFBSTtBQUM3QixVQUFJLEtBQUssaUJBQWtCLE9BQU0sV0FBVyxnQ0FBZ0M7QUFDNUUsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNQQTtBQUFBO0FBQUE7QUFDQSxRQUFJQyxLQUFJO0FBQ1IsUUFBSSxXQUFXO0FBQ2YsUUFBSSxvQkFBb0I7QUFDeEIsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSwyQkFBMkI7QUFDL0IsUUFBSSxRQUFRO0FBRVosUUFBSSxzQkFBc0IsTUFBTSxXQUFZO0FBQzFDLGFBQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxFQUFFLFFBQVEsV0FBWSxHQUFHLENBQUMsTUFBTTtBQUFBLElBQ3RELENBQUM7QUFJRCxRQUFJLGlDQUFpQyxXQUFZO0FBQy9DLFVBQUk7QUFFRixlQUFPLGVBQWUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxVQUFVLE1BQU0sQ0FBQyxFQUFFLEtBQUs7QUFBQSxNQUNoRSxTQUFTLE9BQU87QUFDZCxlQUFPLGlCQUFpQjtBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUVBLFFBQUksU0FBUyx1QkFBdUIsQ0FBQywrQkFBK0I7QUFJcEUsSUFBQUEsR0FBRSxFQUFFLFFBQVEsU0FBUyxPQUFPLE1BQU0sT0FBTyxHQUFHLFFBQVEsT0FBTyxHQUFHO0FBQUE7QUFBQSxNQUU1RCxNQUFNLFNBQVMsS0FBSyxNQUFNO0FBQ3hCLFlBQUksSUFBSSxTQUFTLElBQUk7QUFDckIsWUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQzdCLFlBQUksV0FBVyxVQUFVO0FBQ3pCLGlDQUF5QixNQUFNLFFBQVE7QUFDdkMsaUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxLQUFLO0FBQ2pDLFlBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQztBQUNwQjtBQUFBLFFBQ0Y7QUFDQSx1QkFBZSxHQUFHLEdBQUc7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUN6Q0Q7QUFBQSwwR0FBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksYUFBYTtBQUVqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxHQUFHLEdBQUc7QUFDL0IsVUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUcsT0FBTSxJQUFJLFdBQVcsNEJBQTRCLFlBQVksQ0FBQyxJQUFJLFNBQVMsWUFBWSxDQUFDLENBQUM7QUFBQSxJQUM3RztBQUFBO0FBQUE7OztBQ1BBO0FBQUE7QUFBQTtBQUNBLFFBQUlDLEtBQUk7QUFDUixRQUFJLFdBQVc7QUFDZixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLHdCQUF3QjtBQUM1QixRQUFJLDJCQUEyQjtBQUcvQixRQUFJLG1CQUFtQixDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU07QUFHekMsUUFBSSxpQ0FBaUMsV0FBWTtBQUMvQyxVQUFJO0FBRUYsZUFBTyxlQUFlLENBQUMsR0FBRyxVQUFVLEVBQUUsVUFBVSxNQUFNLENBQUMsRUFBRSxRQUFRO0FBQUEsTUFDbkUsU0FBUyxPQUFPO0FBQ2QsZUFBTyxpQkFBaUI7QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFNBQVMsb0JBQW9CLENBQUMsK0JBQStCO0FBSWpFLElBQUFBLEdBQUUsRUFBRSxRQUFRLFNBQVMsT0FBTyxNQUFNLE9BQU8sR0FBRyxRQUFRLE9BQU8sR0FBRztBQUFBO0FBQUEsTUFFNUQsU0FBUyxTQUFTLFFBQVEsTUFBTTtBQUM5QixZQUFJLElBQUksU0FBUyxJQUFJO0FBQ3JCLFlBQUksTUFBTSxrQkFBa0IsQ0FBQztBQUM3QixZQUFJLFdBQVcsVUFBVTtBQUN6QixZQUFJLFVBQVU7QUFDWixtQ0FBeUIsTUFBTSxRQUFRO0FBQ3ZDLGNBQUksSUFBSTtBQUNSLGlCQUFPLEtBQUs7QUFDVixnQkFBSSxLQUFLLElBQUk7QUFDYixnQkFBSSxLQUFLLEVBQUcsR0FBRSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQUEsZ0JBQ2xCLHVCQUFzQixHQUFHLEVBQUU7QUFBQSxVQUNsQztBQUNBLG1CQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsS0FBSztBQUNqQyxjQUFFLENBQUMsSUFBSSxVQUFVLENBQUM7QUFBQSxVQUNwQjtBQUFBLFFBQ0Y7QUFBRSxlQUFPLGVBQWUsR0FBRyxNQUFNLFFBQVE7QUFBQSxNQUMzQztBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7Ozs7OztBQ3hDRCxDQUFFLFNBQVVDLEdBQUc7QUFDZCxnQkFBYyxPQUFPQyxVQUFVQSxPQUFPQyxNQUNuQ0QsT0FBTyxDQUFDLFFBQVEsR0FBR0QsQ0FBQzs7SUFDdUpBLEVBQzNLRyxNQUNEOztBQUNILEVBQUcsU0FBVUMsR0FBRztBQUNmLE1BQUlDLElBQUssV0FBWTtBQUNuQixRQUFJRCxLQUFLQSxFQUFFRSxNQUFNRixFQUFFRSxHQUFHQyxXQUFXSCxFQUFFRSxHQUFHQyxRQUFRTCxJQUFLLEtBQUlNLEtBQUlKLEVBQUVFLEdBQUdDLFFBQVFMO0FBQ3hFLFFBQUlPLElBQUdULEdBQUdVLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUdDO0FBQzlDLGFBQVNDLEVBQUVDLElBQUdDLElBQUc7QUFDaEIsYUFBT0wsRUFBRU0sS0FBS0YsSUFBR0MsRUFBQztJQUNuQjtBQUNBLGFBQVNFLEVBQUVILElBQUdDLElBQUc7QUFDaEIsVUFBSUcsSUFDSEMsSUFDQUMsSUFDQUMsSUFDQUMsSUFDQUMsSUFDQUMsSUFDQUMsSUFDQUMsSUFDQUMsR0FDQUMsR0FDQUMsS0FBSWQsTUFBS0EsR0FBRWUsTUFBTSxHQUFHLEdBQ3BCQyxLQUFJdkIsRUFBRXdCLEtBQ05DLEtBQUtGLE1BQUtBLEdBQUUsR0FBRyxLQUFNLENBQUM7QUFDdkIsVUFBSWpCLElBQUc7QUFDTixhQUNDUSxNQUFLUixLQUFJQSxHQUFFZ0IsTUFBTSxHQUFHLEdBQUdJLFNBQVMsR0FDL0IxQixFQUFFMkIsZ0JBQWdCdkIsRUFBRXdCLEtBQUt0QixHQUFFUSxFQUFDLENBQUMsTUFBTVIsR0FBRVEsRUFBQyxJQUFJUixHQUFFUSxFQUFDLEVBQUVlLFFBQVF6QixHQUFHLEVBQUUsSUFDNUQsUUFBUUUsR0FBRSxDQUFDLEVBQUV3QixPQUFPLENBQUMsS0FBS1QsT0FBTWYsS0FBSWUsR0FBRVUsTUFBTSxHQUFHVixHQUFFSyxTQUFTLENBQUMsRUFBRU0sT0FBTzFCLEVBQUMsSUFDckVZLEtBQUksR0FDTEEsS0FBSVosR0FBRW9CLFFBQ05SLEtBRUEsS0FBSSxTQUFTRSxJQUFJZCxHQUFFWSxFQUFDLEdBQUlaLElBQUUyQixPQUFPZixJQUFHLENBQUMsR0FBSUEsTUFBSztpQkFDckMsU0FBU0UsR0FBRztBQUNwQixjQUFJLE1BQU1GLE1BQU0sTUFBTUEsTUFBSyxTQUFTWixHQUFFLENBQUMsS0FBTSxTQUFTQSxHQUFFWSxLQUFJLENBQUMsRUFBRztBQUNoRSxjQUFJQSxPQUFNWixHQUFFMkIsT0FBT2YsS0FBSSxHQUFHLENBQUMsR0FBSUEsTUFBSztRQUNyQztBQUNEWixhQUFJQSxHQUFFNEIsS0FBSyxHQUFHO01BQ2Y7QUFDQSxXQUFLYixNQUFLSSxPQUFNRixJQUFHO0FBQ2xCLGFBQUtMLE1BQUtSLEtBQUlKLEdBQUVnQixNQUFNLEdBQUcsR0FBR0ksUUFBUSxJQUFJUixJQUFHQSxNQUFLLEdBQUc7QUFDbEQsY0FBTVAsS0FBSUQsR0FBRXFCLE1BQU0sR0FBR2IsRUFBQyxFQUFFZ0IsS0FBSyxHQUFHLEdBQUliLElBQUE7QUFDbkMsaUJBQUtGLElBQUlFLEdBQUVLLFFBQVEsSUFBSVAsR0FBR0EsS0FBSyxFQUM5QixLQUFLUCxNQUFLQSxLQUFJVyxHQUFFRixHQUFFVSxNQUFNLEdBQUdaLENBQUMsRUFBRWUsS0FBSyxHQUFHLENBQUMsTUFBTXRCLEdBQUVELEVBQUMsR0FBSTtBQUNsREUsbUJBQUlELElBQUtHLEtBQUlHO0FBQ2Q7WUFDRDtVQUFBO0FBQ0YsY0FBSUwsR0FBRztBQUNQLFdBQUNHLE1BQUtTLE1BQUtBLEdBQUVkLEVBQUMsTUFBT0ssS0FBSVMsR0FBRWQsRUFBQyxHQUFLTSxLQUFJQztRQUN0QztBQUNBLFNBQUNMLE1BQUtHLE9BQU9ILEtBQUlHLElBQUtELEtBQUlFLEtBQUtKLE9BQU1ILEdBQUV1QixPQUFPLEdBQUdsQixJQUFHRixFQUFDLEdBQUlQLEtBQUlJLEdBQUV3QixLQUFLLEdBQUc7TUFDeEU7QUFDQSxhQUFPNUI7SUFDUjtBQUNBLGFBQVM2QixFQUFFNUIsSUFBR0csSUFBRztBQUNoQixhQUFPLFdBQVk7QUFDbEIsWUFBSUosS0FBSUgsRUFBRUssS0FBSzRCLFdBQVcsQ0FBQztBQUMzQixlQUFPLFlBQVksT0FBTzlCLEdBQUUsQ0FBQyxLQUFLLE1BQU1BLEdBQUVvQixVQUFVcEIsR0FBRStCLEtBQUssSUFBSSxHQUFHMUMsRUFBRTJDLE1BQU03QyxHQUFHYSxHQUFFMEIsT0FBTyxDQUFDekIsSUFBR0csRUFBQyxDQUFDLENBQUM7TUFDOUY7SUFDRDtBQUNBLGFBQVM2QixFQUFFaEMsSUFBRztBQUNiLGFBQU8sU0FBVUQsSUFBRztBQUNuQlIsVUFBRVMsRUFBQyxJQUFJRDtNQUNSO0lBQ0Q7QUFDQSxhQUFTa0MsRUFBRWxDLElBQUc7QUFDYixVQUFJRCxFQUFFTixHQUFHTyxFQUFDLEdBQUc7QUFDWixZQUFJQyxLQUFJUixFQUFFTyxFQUFDO0FBQ1gsZUFBT1AsRUFBRU8sRUFBQyxHQUFJTCxFQUFFSyxFQUFDLElBQUksTUFBS1osRUFBRTRDLE1BQU03QyxHQUFHYyxFQUFDO01BQ3ZDO0FBQ0EsVUFBSSxDQUFDRixFQUFFUCxHQUFHUSxFQUFDLEtBQUssQ0FBQ0QsRUFBRUosR0FBR0ssRUFBQyxFQUFHLE9BQU0sSUFBSW1DLE1BQU0sUUFBUW5DLEVBQUM7QUFDbkQsYUFBT1IsRUFBRVEsRUFBQztJQUNYO0FBQ0EsYUFBU29DLEVBQUVwQyxJQUFHO0FBQ2IsVUFBSUMsSUFDSEcsS0FBSUosS0FBSUEsR0FBRXFDLFFBQVEsR0FBRyxJQUFJO0FBQzFCLGFBQU8sS0FBS2pDLE9BQU9ILEtBQUlELEdBQUVzQyxVQUFVLEdBQUdsQyxFQUFDLEdBQUtKLEtBQUlBLEdBQUVzQyxVQUFVbEMsS0FBSSxHQUFHSixHQUFFb0IsTUFBTSxJQUFLLENBQUNuQixJQUFHRCxFQUFDO0lBQ3RGO0FBQ0EsYUFBU3VDLEVBQUV2QyxJQUFHO0FBQ2IsYUFBT0EsS0FBSW9DLEVBQUVwQyxFQUFDLElBQUksQ0FBQTtJQUNuQjtBQUNBLFdBQ0VoQixNQUFLQSxHQUFFd0QsY0FDTnhELEtBQUtSLElBQUlRLEtBQU1BLEtBQUksQ0FBQyxHQUNwQlEsSUFBSSxDQUFDLEdBQ0xDLElBQUksQ0FBQyxHQUNMQyxJQUFJLENBQUMsR0FDTEMsSUFBSSxDQUFDLEdBQ0xDLElBQUk2QyxPQUFPQyxVQUFVQyxnQkFDckI5QyxJQUFJLENBQUEsRUFBRzRCLE9BQ1AzQixJQUFJLFNBQ0pSLElBQUksU0FBVVUsSUFBR0MsSUFBRztBQUNwQixVQUFJRyxJQUNIQyxLQUFJK0IsRUFBRXBDLEVBQUMsR0FDUE0sS0FBSUQsR0FBRSxDQUFDLEdBQ1BFLEtBQUlOLEdBQUUsQ0FBQztBQUNSLGFBQ0VELEtBQUlLLEdBQUUsQ0FBQyxHQUNSQyxPQUFNRixLQUFJOEIsRUFBRzVCLEtBQUlILEVBQUVHLElBQUdDLEVBQUMsQ0FBRSxJQUN6QkQsS0FDSU4sS0FDREksTUFBS0EsR0FBRXdDLFlBQ0p4QyxHQUFFd0MsVUFDRjVDLElBQ0MseUJBQVU2QyxJQUFHO0FBQ2IsZUFBTyxTQUFVQyxJQUFHO0FBQ25CLGlCQUFPM0MsRUFBRTJDLElBQUdELEVBQUM7UUFDZDtNQUNELEVBQUd0QyxFQUFDLENBQ0wsSUFDQ0osRUFBRUgsSUFBR08sRUFBQyxLQUNQRCxNQUFLRCxLQUFJK0IsRUFBR3BDLEtBQUlHLEVBQUVILElBQUdPLEVBQUMsQ0FBRSxHQUFHLENBQUMsR0FBS1AsS0FBSUssR0FBRSxDQUFDLEdBQUlDLE9BQU1GLEtBQUk4QixFQUFFNUIsRUFBQyxLQUM5RDtRQUFDaEIsR0FBR2dCLEtBQUlBLEtBQUksTUFBTU4sS0FBSUE7UUFBR3hCLEdBQUd3QjtRQUFHK0MsSUFBSXpDO1FBQUdRLEdBQUdWO01BQUM7SUFFNUMsR0FDQ2IsSUFBSTtNQUNKeUQsU0FBUyxTQUFVaEQsSUFBRztBQUNyQixlQUFPNkIsRUFBRTdCLEVBQUM7TUFDWDtNQUNBaUQsU0FBUyxTQUFVakQsSUFBRztBQUNyQixZQUFJQyxLQUFJVCxFQUFFUSxFQUFDO0FBQ1gsZUFBTyxXQUFXQyxLQUFJQSxLQUFLVCxFQUFFUSxFQUFDLElBQUksQ0FBQztNQUNwQztNQUNBa0QsUUFBUSxTQUFVbEQsSUFBRztBQUNwQixlQUFPO1VBQ05tRCxJQUFJbkQ7VUFDSm9ELEtBQUs7VUFDTEgsU0FBU3pELEVBQUVRLEVBQUM7VUFDWnFELFFBQVMseUJBQVVQLElBQUc7QUFDckIsbUJBQU8sV0FBWTtBQUNsQixxQkFBUXBELEtBQUtBLEVBQUUyRCxVQUFVM0QsRUFBRTJELE9BQU9QLEVBQUMsS0FBTSxDQUFDO1lBQzNDO1VBQ0QsRUFBRzlDLEVBQUM7UUFDTDtNQUNEO0lBQ0QsR0FDQ1osSUFBSSxTQUFVWSxJQUFHQyxJQUFHRyxJQUFHQyxJQUFHO0FBQzFCLFVBQUlDLElBQ0hDLElBQ0FDLElBQ0FDLElBQ0FDLElBQ0FDLElBQ0FDLElBQ0FDLElBQUksQ0FBQSxHQUNKQyxJQUFJLE9BQU9WO0FBQ1osVUFBTU8sS0FBSTRCLEVBQUdsQyxLQUFJQSxNQUFLTCxFQUFFLEdBQUksZUFBZWMsS0FBSyxjQUFjQSxHQUFJO0FBQ2pFLGFBQ0NiLEtBQUksQ0FBQ0EsR0FBRW1CLFVBQVVoQixHQUFFZ0IsU0FBUyxDQUFDLFdBQVcsV0FBVyxRQUFRLElBQUluQixJQUFHUyxLQUFJLEdBQ3RFQSxLQUFJVCxHQUFFbUIsUUFDTlYsTUFBSyxFQUVMLEtBQUksZUFBZUgsTUFBS0UsS0FBSW5CLEVBQUVXLEdBQUVTLEVBQUMsR0FBR0MsRUFBQyxHQUFHckIsR0FBSXVCLEdBQUVILEVBQUMsSUFBSW5CLEVBQUV5RCxRQUFRaEQsRUFBQztpQkFDckQsY0FBY08sR0FBSU0sR0FBRUgsRUFBQyxJQUFJbkIsRUFBRTBELFFBQVFqRCxFQUFDLEdBQUtZLEtBQUk7aUJBQzdDLGFBQWFMLEdBQUdELE1BQUlPLEVBQUVILEVBQUMsSUFBSW5CLEVBQUUyRCxPQUFPbEQsRUFBQztpQkFDckNELEVBQUVQLEdBQUdlLEVBQUMsS0FBS1IsRUFBRU4sR0FBR2MsRUFBQyxLQUFLUixFQUFFSixHQUFHWSxFQUFDLEVBQUdNLEdBQUVILEVBQUMsSUFBSXdCLEVBQUUzQixFQUFDO2FBQzdDO0FBQ0osY0FBSSxDQUFDRSxHQUFFSyxFQUFHLE9BQU0sSUFBSXFCLE1BQU1uQyxLQUFJLGNBQWNPLEVBQUM7QUFDN0NFLGFBQUVLLEVBQUV3QyxLQUFLN0MsR0FBRWpDLEdBQUdxRCxFQUFFeEIsSUFBRyxJQUFFLEdBQUc0QixFQUFFMUIsRUFBQyxHQUFHLENBQUMsQ0FBQyxHQUFJTSxFQUFFSCxFQUFDLElBQUlsQixFQUFFZSxFQUFDO1FBQy9DO0FBQ0FDLGFBQUlKLEtBQUlBLEdBQUU0QixNQUFNeEMsRUFBRVEsRUFBQyxHQUFHYSxDQUFDLElBQUksUUFDM0JiLE9BQ0VNLE1BQUtBLEdBQUUyQyxZQUFZOUQsS0FBS21CLEdBQUUyQyxZQUFZekQsRUFBRVEsRUFBQyxJQUN0Q1IsRUFBRVEsRUFBQyxJQUFJTSxHQUFFMkMsVUFDVHpDLE9BQU1yQixLQUFLeUIsT0FBT3BCLEVBQUVRLEVBQUMsSUFBSVE7TUFDaEMsTUFBT1IsUUFBTVIsRUFBRVEsRUFBQyxJQUFJSTtJQUNyQixHQUNDbkIsS0FDQVQsSUFDQWEsSUFDQyxTQUFVVyxJQUFHQyxJQUFHRyxJQUFHQyxJQUFHQyxJQUFHO0FBQ3hCLFVBQUksWUFBWSxPQUFPTixHQUFHLFFBQU9ULEVBQUVTLEVBQUMsSUFBSVQsRUFBRVMsRUFBQyxFQUFFQyxFQUFDLElBQUlpQyxFQUFFNUMsRUFBRVUsSUFBR3VDLEVBQUV0QyxFQUFDLENBQUMsRUFBRVgsQ0FBQztBQUNoRSxVQUFJLENBQUNVLEdBQUUyQixRQUFRO0FBQ2QsYUFBTWpDLElBQUlNLElBQUd1RCxRQUFRbEUsRUFBRUssRUFBRTZELE1BQU03RCxFQUFFOEQsUUFBUSxHQUFHLENBQUN2RCxHQUFJO0FBQ2pEQSxXQUFFMEIsVUFBVzNCLEtBQUlDLElBQUtBLEtBQUlHLElBQUtBLEtBQUksUUFBVUosS0FBSWI7TUFDbEQ7QUFDQSxhQUNFYyxLQUFJQSxNQUFLLFdBQVk7TUFBQyxHQUN2QixjQUFjLE9BQU9HLE9BQU9BLEtBQUlDLElBQUtBLEtBQUlDLEtBQ3pDRCxLQUNHakIsRUFBRUQsR0FBR2EsSUFBR0MsSUFBR0csRUFBQyxJQUNacUQsV0FBVyxXQUFZO0FBQ3ZCckUsVUFBRUQsR0FBR2EsSUFBR0MsSUFBR0csRUFBQztNQUNiLEdBQUcsQ0FBQyxHQUNOZjtJQUVGLEdBQ0RBLEVBQUVnRSxTQUFTLFNBQVVyRCxJQUFHO0FBQ3hCLGFBQU9YLEVBQUVXLEVBQUM7SUFDWCxHQUNDZixHQUFFeUUsV0FBV2xFLElBQ1pOLElBQUksU0FBVWMsSUFBR0MsSUFBR0csSUFBRztBQUN4QixVQUFJLFlBQVksT0FBT0osR0FDdEIsT0FBTSxJQUFJbUMsTUFBTSwyREFBMkQ7QUFDNUVsQyxTQUFFMEIsV0FBWXZCLEtBQUlILElBQUtBLEtBQUksQ0FBQSxJQUFNRixFQUFFUCxHQUFHUSxFQUFDLEtBQUtELEVBQUVOLEdBQUdPLEVBQUMsTUFBTVAsRUFBRU8sRUFBQyxJQUFJLENBQUNBLElBQUdDLElBQUdHLEVBQUM7SUFDeEUsR0FBRzFCLE1BQU07TUFBQ0MsUUFBUTtJQUFFLEdBQ25CSyxHQUFFd0QsWUFBWXZELElBQ2RELEdBQUVnRSxVQUFVeEUsR0FDWlEsR0FBRVAsU0FBU1MsSUFDYkYsR0FBRVAsT0FBTyxVQUFVLFdBQVk7SUFBQyxDQUFDLEdBQ2pDTyxHQUFFUCxPQUFPLFVBQVUsQ0FBQSxHQUFJLFdBQVk7QUFDbEMsVUFBSXVCLEtBQUlwQixLQUFLK0U7QUFDYixhQUNDLFFBQVEzRCxNQUNQNEQsV0FDQUEsUUFBUUMsU0FDUkQsUUFBUUMsTUFDUCx1SkFDRCxHQUNEN0Q7SUFFRixDQUFDLEdBQ0RoQixHQUFFUCxPQUFPLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxTQUFVOEIsSUFBRztBQUNsRCxVQUFJRCxLQUFJLENBQUM7QUFDVCxlQUFTTSxHQUFFa0MsSUFBRztBQUNiLFlBQUk3QyxLQUFJNkMsR0FBRUosV0FDVG9CLEtBQUksQ0FBQTtBQUNMLGlCQUFTekQsTUFBS0osSUFBRztBQUNoQix3QkFBYyxPQUFPQSxHQUFFSSxFQUFDLEtBQUssa0JBQWtCQSxNQUFLeUQsR0FBRS9CLEtBQUsxQixFQUFDO1FBQzdEO0FBQ0EsZUFBT3lEO01BQ1I7QUFDQ3hELFNBQUV5RCxTQUFTLFNBQVVqQixJQUFHN0MsSUFBRztBQUMzQixZQUFJNkQsS0FBSSxDQUFDLEVBQUVuQjtBQUNYLGlCQUFTdEMsS0FBSTtBQUNaLGVBQUsyRCxjQUFjbEI7UUFDcEI7QUFDQSxpQkFBU21CLE1BQUtoRSxHQUFHNkQsSUFBRTVELEtBQUtELElBQUdnRSxFQUFDLE1BQU1uQixHQUFFbUIsRUFBQyxJQUFJaEUsR0FBRWdFLEVBQUM7QUFDNUMsZUFBUTVELEdBQUVxQyxZQUFZekMsR0FBRXlDLFdBQWFJLEdBQUVKLFlBQVksSUFBSXJDLEdBQUUsR0FBS3lDLEdBQUVvQixZQUFZakUsR0FBRXlDLFdBQVlJO01BQzNGLEdBQ0V4QyxHQUFFNkQsV0FBVyxTQUFVOUQsSUFBRzRELElBQUc7QUFDN0IsWUFBSW5CLEtBQUlsQyxHQUFFcUQsRUFBQyxHQUNWaEUsS0FBSVcsR0FBRVAsRUFBQztBQUNSLGlCQUFTK0QsS0FBSTtBQUNaLGNBQUlDLEtBQUlDLE1BQU01QixVQUFVNkIsU0FDdkIxQixLQUFJb0IsR0FBRXZCLFVBQVVzQixZQUFZNUMsUUFDNUJvRCxLQUFJbkUsR0FBRXFDLFVBQVVzQjtBQUNqQixjQUFJbkIsT0FBTXdCLEdBQUVuRSxLQUFLNEIsV0FBV3pCLEdBQUVxQyxVQUFVc0IsV0FBVyxHQUFJUSxLQUFJUCxHQUFFdkIsVUFBVXNCLGNBQ3RFUSxHQUFFeEMsTUFBTSxNQUFNRixTQUFTO1FBQ3pCO0FBQ0NtQyxXQUFFUSxjQUFjcEUsR0FBRW9FLGFBQ2pCTCxHQUFFMUIsWUFBWSxJQUFLLFdBQVk7QUFDL0IsZUFBS3NCLGNBQWNJO1FBQ3BCLEVBQUc7QUFDSixpQkFBU04sS0FBSSxHQUFHQSxLQUFJN0QsR0FBRW1CLFFBQVEwQyxNQUFLO0FBQ2xDLGNBQUl0RCxLQUFJUCxHQUFFNkQsRUFBQztBQUNYTSxhQUFFMUIsVUFBVWxDLEVBQUMsSUFBSUgsR0FBRXFDLFVBQVVsQyxFQUFDO1FBQy9CO0FBQ0EsaUJBQVNDLEdBQUU0RCxJQUFHO0FBQ2IsY0FBSXhCLEtBQUksV0FBWTtVQUFDO0FBQ3JCd0IsZ0JBQUtELEdBQUUxQixjQUFjRyxLQUFJdUIsR0FBRTFCLFVBQVUyQixFQUFDO0FBQ3RDLGNBQUlHLEtBQUlQLEdBQUV2QixVQUFVMkIsRUFBQztBQUNyQixpQkFBTyxXQUFZO0FBQ2xCLG1CQUFPQyxNQUFNNUIsVUFBVTZCLFFBQVFyRSxLQUFLNEIsV0FBV2UsRUFBQyxHQUFHMkIsR0FBRXhDLE1BQU0sTUFBTUYsU0FBUztVQUMzRTtRQUNEO0FBQ0EsaUJBQVNwQixLQUFJLEdBQUdBLEtBQUlvQyxHQUFFMUIsUUFBUVYsTUFBSztBQUNsQyxjQUFJQyxLQUFJbUMsR0FBRXBDLEVBQUM7QUFDWDBELGFBQUUxQixVQUFVL0IsRUFBQyxJQUFJRixHQUFFRSxFQUFDO1FBQ3JCO0FBQ0EsZUFBT3lEO01BQ1I7QUFDRCxlQUFTcEUsS0FBSTtBQUNaLGFBQUswRSxZQUFZLENBQUM7TUFDbkI7QUFDQzFFLFNBQUUwQyxVQUFVaUMsS0FBSyxTQUFVN0IsSUFBRzdDLElBQUc7QUFDaEMsYUFBS3lFLFlBQVksS0FBS0EsYUFBYSxDQUFDLEdBQ3BDNUIsTUFBSyxLQUFLNEIsWUFBWSxLQUFLQSxVQUFVNUIsRUFBQyxFQUFFZixLQUFLOUIsRUFBQyxJQUFLLEtBQUt5RSxVQUFVNUIsRUFBQyxJQUFJLENBQUM3QyxFQUFDO01BQzNFLEdBQ0VELEdBQUUwQyxVQUFVa0MsVUFBVSxTQUFVOUIsSUFBRztBQUNuQyxZQUFJN0MsS0FBSXFFLE1BQU01QixVQUFVakIsT0FDdkJxQyxLQUFJN0QsR0FBRUMsS0FBSzRCLFdBQVcsQ0FBQztBQUN2QixhQUFLNEMsWUFBWSxLQUFLQSxhQUFhLENBQUMsR0FDcEMsUUFBUVosT0FBTUEsS0FBSSxDQUFBLElBQ2xCLE1BQU1BLEdBQUUxQyxVQUFVMEMsR0FBRS9CLEtBQUssQ0FBQyxDQUFDLElBQzFCK0IsR0FBRSxDQUFDLEVBQUVlLFFBQVEvQixPQUFNLEtBQUs0QixhQUN4QixLQUFLSSxPQUFPLEtBQUtKLFVBQVU1QixFQUFDLEdBQUc3QyxHQUFFQyxLQUFLNEIsV0FBVyxDQUFDLENBQUMsR0FDcEQsT0FBTyxLQUFLNEMsYUFBYSxLQUFLSSxPQUFPLEtBQUtKLFVBQVUsR0FBRyxHQUFHNUMsU0FBUztNQUNyRSxHQUNDOUIsR0FBRTBDLFVBQVVvQyxTQUFTLFNBQVVoQyxJQUFHN0MsSUFBRztBQUNyQyxpQkFBUzZELEtBQUksR0FBR3pELEtBQUl5QyxHQUFFMUIsUUFBUTBDLEtBQUl6RCxJQUFHeUQsS0FBS2hCLElBQUVnQixFQUFDLEVBQUU5QixNQUFNLE1BQU0vQixFQUFDO01BQzdELEdBQ0NLLEdBQUV5RSxhQUFhL0UsSUFDZk0sR0FBRTBFLGdCQUFnQixTQUFVbEMsSUFBRztBQUMvQixpQkFBUzdDLEtBQUksSUFBSTZELEtBQUksR0FBR0EsS0FBSWhCLElBQUdnQixNQUFLO0FBQ25DN0QsZ0JBQUtnRixLQUFLQyxNQUFNLEtBQUtELEtBQUtFLE9BQU8sQ0FBQyxFQUFFQyxTQUFTLEVBQUU7UUFDaEQ7QUFDQSxlQUFPbkY7TUFDUixHQUNDSyxHQUFFK0UsT0FBTyxTQUFVdkMsSUFBRzdDLElBQUc7QUFDekIsZUFBTyxXQUFZO0FBQ2xCNkMsYUFBRWQsTUFBTS9CLElBQUc2QixTQUFTO1FBQ3JCO01BQ0QsR0FDQ3hCLEdBQUVnRixlQUFlLFNBQVV4QyxJQUFHO0FBQzlCLGlCQUFTN0MsTUFBSzZDLElBQUc7QUFDaEIsY0FBSWdCLEtBQUk3RCxHQUFFZSxNQUFNLEdBQUcsR0FDbEJYLEtBQUl5QztBQUNMLGNBQUksTUFBTWdCLEdBQUUxQyxRQUFRO0FBQ25CLHFCQUFTNkMsS0FBSSxHQUFHQSxLQUFJSCxHQUFFMUMsUUFBUTZDLE1BQUs7QUFDbEMsa0JBQUlHLEtBQUlOLEdBQUVHLEVBQUM7QUFDWCxlQUFDRyxLQUFJQSxHQUFFOUIsVUFBVSxHQUFHLENBQUMsRUFBRWlELFlBQVksSUFBSW5CLEdBQUU5QixVQUFVLENBQUMsTUFBTWpDLE9BQU1BLEdBQUUrRCxFQUFDLElBQUksQ0FBQyxJQUN2RUgsTUFBS0gsR0FBRTFDLFNBQVMsTUFBTWYsR0FBRStELEVBQUMsSUFBSXRCLEdBQUU3QyxFQUFDLElBQy9CSSxLQUFJQSxHQUFFK0QsRUFBQztZQUNWO0FBQ0EsbUJBQU90QixHQUFFN0MsRUFBQztVQUNYO1FBQ0Q7QUFDQSxlQUFPNkM7TUFDUixHQUNDeEMsR0FBRWtGLFlBQVksU0FBVTFDLElBQUc3QyxJQUFHO0FBQzlCLFlBQUk2RCxLQUFJdkQsR0FBRU4sRUFBQyxHQUNWSSxLQUFJSixHQUFFd0YsTUFBTUMsV0FDWnpCLEtBQUloRSxHQUFFd0YsTUFBTUU7QUFDYixnQkFDRXRGLE9BQU00RCxNQUFNLGFBQWFBLE1BQUssY0FBY0EsUUFDNUMsYUFBYTVELE1BQ2IsYUFBYTRELE1BQ2JILEdBQUU4QixZQUFZLElBQUkzRixHQUFFNEYsZ0JBQ3BCL0IsR0FBRWdDLFdBQVcsSUFBSTdGLEdBQUU4RjtNQUV0QixHQUNDekYsR0FBRTBGLGVBQWUsU0FBVWxELElBQUc7QUFDOUIsWUFBSTdDLEtBQUk7VUFDUCxNQUFNO1VBQ04sS0FBSztVQUNMLEtBQUs7VUFDTCxLQUFLO1VBQ0wsS0FBSztVQUNMLEtBQUs7VUFDTCxLQUFLO1FBQ047QUFDQSxlQUFPLFlBQVksT0FBTzZDLEtBQ3ZCQSxLQUNBbUQsT0FBT25ELEVBQUMsRUFBRXZCLFFBQVEsZ0JBQWdCLFNBQVU4QyxJQUFHO0FBQy9DLGlCQUFPcEUsR0FBRW9FLEVBQUM7UUFDWCxDQUFDO01BQ0osR0FDQy9ELEdBQUU0RixhQUFhLFNBQVVwRCxJQUFHN0MsSUFBRztBQUMvQixZQUFJLFVBQVVNLEdBQUV6QixHQUFHcUgsT0FBT0MsT0FBTyxHQUFHLENBQUMsR0FBRztBQUN2QyxjQUFJdEMsS0FBSXZELEdBQUU7QUFDVkEsYUFBRVcsSUFBSWpCLElBQUcsU0FBVW9FLElBQUc7QUFDckJQLGlCQUFJQSxHQUFFdUMsSUFBSWhDLEVBQUM7VUFDWixDQUFDLEdBQ0NwRSxLQUFJNkQ7UUFDUDtBQUNBaEIsV0FBRXdELE9BQU9yRyxFQUFDO01BQ1gsR0FDQ0ssR0FBRWlHLFVBQVUsQ0FBQztBQUNmLFVBQUluRyxLQUFJO0FBQ1IsYUFDRUUsR0FBRWtHLHFCQUFxQixTQUFVMUQsSUFBRztBQUNwQyxZQUFJN0MsS0FBSTZDLEdBQUUyRCxhQUFhLGlCQUFpQjtBQUN4QyxlQUNDLFFBQVF4RyxPQUNONkMsR0FBRUssTUFDRWxELEtBQUk2QyxHQUFFSyxJQUFLTCxHQUFFNEQsYUFBYSxtQkFBbUJ6RyxFQUFDLE1BQy9DNkMsR0FBRTRELGFBQWEsbUJBQW1CLEVBQUV0RyxFQUFDLEdBQUlILEtBQUlHLEdBQUVnRixTQUFTLEtBQzdEbkY7TUFFRixHQUNDSyxHQUFFcUcsWUFBWSxTQUFVN0QsSUFBRzdDLElBQUc2RCxJQUFHO0FBQ2pDLFlBQUl6RCxLQUFJQyxHQUFFa0csbUJBQW1CMUQsRUFBQztBQUM5QnhDLFdBQUVpRyxRQUFRbEcsRUFBQyxNQUFNQyxHQUFFaUcsUUFBUWxHLEVBQUMsSUFBSSxDQUFDLElBQUtDLEdBQUVpRyxRQUFRbEcsRUFBQyxFQUFFSixFQUFDLElBQUk2RDtNQUN6RCxHQUNDeEQsR0FBRXNHLFVBQVUsU0FBVTlELElBQUc3QyxJQUFHO0FBQzVCLFlBQUk2RCxLQUFJeEQsR0FBRWtHLG1CQUFtQjFELEVBQUM7QUFDOUIsZUFBTzdDLEtBQ0pLLEdBQUVpRyxRQUFRekMsRUFBQyxLQUFLLFFBQVF4RCxHQUFFaUcsUUFBUXpDLEVBQUMsRUFBRTdELEVBQUMsSUFDckNLLEdBQUVpRyxRQUFRekMsRUFBQyxFQUFFN0QsRUFBQyxJQUNkTSxHQUFFdUMsRUFBQyxFQUFFK0QsS0FBSzVHLEVBQUMsSUFDWkssR0FBRWlHLFFBQVF6QyxFQUFDO01BQ2YsR0FDQ3hELEdBQUV3RyxhQUFhLFNBQVVoRSxJQUFHO0FBQzVCLFlBQUk3QyxLQUFJSyxHQUFFa0csbUJBQW1CMUQsRUFBQztBQUM5QixnQkFBUXhDLEdBQUVpRyxRQUFRdEcsRUFBQyxLQUFLLE9BQU9LLEdBQUVpRyxRQUFRdEcsRUFBQyxHQUFHNkMsR0FBRWlFLGdCQUFnQixpQkFBaUI7TUFDakYsR0FDQXpHO0lBRUYsQ0FBQyxHQUNEdEIsR0FBRVAsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLFNBQVMsR0FBRyxTQUFVc0MsSUFBR0UsSUFBRztBQUNsRSxlQUFTWixHQUFFTCxJQUFHQyxJQUFHRyxJQUFHO0FBQ2xCLGFBQUs0RyxXQUFXaEgsSUFBSyxLQUFLNkcsT0FBT3pHLElBQUssS0FBSzZHLFVBQVVoSCxJQUFJSSxHQUFFNkQsVUFBVUYsWUFBWTlELEtBQUssSUFBSTtNQUM1RjtBQUNBLGFBQ0NlLEdBQUU4QyxPQUFPMUQsSUFBR1ksR0FBRThELFVBQVUsR0FDdkIxRSxHQUFFcUMsVUFBVXdFLFNBQVMsV0FBWTtBQUNqQyxZQUFJbEgsS0FBSWUsR0FBRSwyREFBMkQ7QUFDckUsZUFDQyxLQUFLa0csUUFBUUUsSUFBSSxVQUFVLEtBQUtuSCxHQUFFb0gsS0FBSyx3QkFBd0IsTUFBTSxHQUNwRSxLQUFLQyxXQUFXckg7TUFFbkIsR0FDQ0ssR0FBRXFDLFVBQVU0RSxRQUFRLFdBQVk7QUFDaEMsYUFBS0QsU0FBU0UsTUFBTTtNQUNyQixHQUNDbEgsR0FBRXFDLFVBQVU4RSxpQkFBaUIsU0FBVXhILElBQUc7QUFDMUMsWUFBSUMsS0FBSSxLQUFLZ0gsUUFBUUUsSUFBSSxjQUFjO0FBQ3ZDLGFBQUtHLE1BQU0sR0FBRyxLQUFLRyxZQUFZO0FBQy9CLFlBQUlySCxLQUFJVyxHQUFFLDhFQUE4RSxHQUN2RjJHLEtBQUksS0FBS1QsUUFBUUUsSUFBSSxjQUFjLEVBQUVBLElBQUluSCxHQUFFMkgsT0FBTztBQUNuRHZILFdBQUVrRyxPQUFPckcsR0FBRXlILEdBQUUxSCxHQUFFNEgsSUFBSSxDQUFDLENBQUMsR0FDbkJ4SCxHQUFFLENBQUMsRUFBRXlILGFBQWEsNkJBQ25CLEtBQUtSLFNBQVNmLE9BQU9sRyxFQUFDO01BQ3hCLEdBQ0NDLEdBQUVxQyxVQUFVb0YsZUFBZSxXQUFZO0FBQ3ZDLGFBQUtULFNBQVNVLEtBQUssMkJBQTJCLEVBQUVDLE9BQU87TUFDeEQsR0FDQzNILEdBQUVxQyxVQUFVNEQsU0FBUyxTQUFVdEcsSUFBRztBQUNsQyxhQUFLeUgsWUFBWTtBQUNqQixZQUFJeEgsS0FBSSxDQUFBO0FBQ1IsWUFBSSxRQUFRRCxHQUFFaUksV0FBVyxNQUFNakksR0FBRWlJLFFBQVE3RyxRQUFRO0FBQ2hEcEIsYUFBRWlJLFVBQVUsS0FBS0MsS0FBS2xJLEdBQUVpSSxPQUFPO0FBQy9CLG1CQUFTN0gsS0FBSSxHQUFHQSxLQUFJSixHQUFFaUksUUFBUTdHLFFBQVFoQixNQUFLO0FBQzFDLGdCQUFJc0gsS0FBSTFILEdBQUVpSSxRQUFRN0gsRUFBQyxHQUNsQkUsS0FBSSxLQUFLNkgsT0FBT1QsRUFBQztBQUNsQnpILGVBQUU4QixLQUFLekIsRUFBQztVQUNUO0FBQ0EsZUFBSytHLFNBQVNmLE9BQU9yRyxFQUFDO1FBQ3ZCLE1BQ0MsT0FBTSxLQUFLb0gsU0FBU2UsU0FBUyxFQUFFaEgsVUFDOUIsS0FBS3dELFFBQVEsbUJBQW1CO1VBQUMrQyxTQUFTO1FBQVcsQ0FBQztNQUN6RCxHQUNDdEgsR0FBRXFDLFVBQVUyRixXQUFXLFNBQVVySSxJQUFHQyxJQUFHO0FBQ3ZDQSxXQUFFOEgsS0FBSyxrQkFBa0IsRUFBRXpCLE9BQU90RyxFQUFDO01BQ3BDLEdBQ0NLLEdBQUVxQyxVQUFVd0YsT0FBTyxTQUFVbEksSUFBRztBQUNoQyxlQUFPLEtBQUtpSCxRQUFRRSxJQUFJLFFBQVEsRUFBRW5ILEVBQUM7TUFDcEMsR0FDQ0ssR0FBRXFDLFVBQVU0RixxQkFBcUIsV0FBWTtBQUM3QyxZQUFJdEksS0FBSSxLQUFLcUgsU0FBU1UsS0FBSyx5Q0FBeUMsR0FDbkU5SCxLQUFJRCxHQUFFdUksT0FBTyxzQkFBc0I7QUFDcEMsWUFBSXRJLEdBQUVtQixTQUFTbkIsR0FBRXVJLE1BQU0sRUFBRTVELFFBQVEsWUFBWSxJQUFJNUUsR0FBRXdJLE1BQU0sRUFBRTVELFFBQVEsWUFBWSxHQUM5RSxLQUFLNkQsdUJBQXVCO01BQzlCLEdBQ0NwSSxHQUFFcUMsVUFBVWdHLGFBQWEsV0FBWTtBQUNyQyxZQUFJekksS0FBSTtBQUNSLGFBQUs0RyxLQUFLOEIsUUFBUSxTQUFVM0ksSUFBRztBQUM5QixjQUFJMEgsS0FBSTNHLEdBQUVHLElBQUlsQixJQUFHLFNBQVU4QyxJQUFHO0FBQzdCLG1CQUFPQSxHQUFFSyxHQUFHaUMsU0FBUztVQUN0QixDQUFDO0FBQ0RuRixhQUFFb0gsU0FBU1UsS0FBSyx5Q0FBeUMsRUFBRWEsS0FBSyxXQUFZO0FBQzNFLGdCQUFJOUYsS0FBSS9CLEdBQUUsSUFBSSxHQUNiOEIsS0FBSTVCLEdBQUUyRixRQUFRLE1BQU0sTUFBTSxHQUMxQnhHLEtBQUksS0FBS3lDLEdBQUVNO0FBQ1gsb0JBQVFOLEdBQUVnRyxXQUFXaEcsR0FBRWdHLFFBQVFDLFlBQy9CLFFBQVFqRyxHQUFFZ0csV0FBVyxLQUFLOUgsR0FBRWdJLFFBQVEzSSxJQUFHc0gsRUFBQyxJQUN0QzVFLEdBQUVzRSxLQUFLLGlCQUFpQixNQUFNLElBQzlCdEUsR0FBRXNFLEtBQUssaUJBQWlCLE9BQU87VUFDbkMsQ0FBQztRQUNGLENBQUM7TUFDRixHQUNDL0csR0FBRXFDLFVBQVVzRyxjQUFjLFNBQVVoSixJQUFHO0FBQ3ZDLGFBQUt5SCxZQUFZO0FBQ2pCLFlBQUl4SCxLQUFJO1VBQ05nSixVQUFVO1VBQ1ZDLFNBQVM7VUFDVEMsTUFBTSxLQUFLbEMsUUFBUUUsSUFBSSxjQUFjLEVBQUVBLElBQUksV0FBVyxFQUFFbkgsRUFBQztRQUMxRCxHQUNBSSxLQUFJLEtBQUsrSCxPQUFPbEksRUFBQztBQUNqQkcsV0FBRXlILGFBQWEsb0JBQXFCLEtBQUtSLFNBQVMrQixRQUFRaEosRUFBQztNQUM3RCxHQUNDQyxHQUFFcUMsVUFBVStFLGNBQWMsV0FBWTtBQUN0QyxhQUFLSixTQUFTVSxLQUFLLGtCQUFrQixFQUFFQyxPQUFPO01BQy9DLEdBQ0MzSCxHQUFFcUMsVUFBVXlGLFNBQVMsU0FBVW5JLElBQUc7QUFDbEMsWUFBSUMsS0FBSW9KLFNBQVNDLGNBQWMsSUFBSTtBQUNuQ3JKLFdBQUU0SCxZQUFZO0FBQ2QsWUFBSXpILEtBQUk7VUFBQ21KLE1BQU07VUFBVSxpQkFBaUI7UUFBTyxHQUNoRDdCLEtBQ0M4QixPQUFPQyxRQUFRL0csVUFBVWdILFdBQ3pCRixPQUFPQyxRQUFRL0csVUFBVWlILHFCQUN6QkgsT0FBT0MsUUFBUS9HLFVBQVVrSDtBQUMzQixpQkFBU3RKLE9BQVEsUUFBUU4sR0FBRTZJLFdBQVduQixHQUFFeEgsS0FBS0YsR0FBRTZJLFNBQVMsV0FBVyxLQUNqRSxRQUFRN0ksR0FBRTZJLFdBQVc3SSxHQUFFaUosY0FDdkIsT0FBTzdJLEdBQUUsZUFBZSxHQUFJQSxHQUFFLGVBQWUsSUFBSSxTQUNuRCxRQUFRSixHQUFFbUQsTUFBTSxPQUFPL0MsR0FBRSxlQUFlLEdBQ3hDLFFBQVFKLEdBQUU2SixjQUFjNUosR0FBRWtELEtBQUtuRCxHQUFFNkosWUFDakM3SixHQUFFOEosVUFBVTdKLEdBQUU2SixRQUFROUosR0FBRThKLFFBQ3hCOUosR0FBRW9JLGFBQWNoSSxHQUFFbUosT0FBTyxTQUFXbkosR0FBRSxZQUFZLElBQUlKLEdBQUVtSixNQUFPLE9BQU8vSSxHQUFFLGVBQWUsSUFDdkZBLElBQUk7QUFDSCxjQUFJRyxLQUFJSCxHQUFFRSxFQUFDO0FBQ1hMLGFBQUV5RyxhQUFhcEcsSUFBR0MsRUFBQztRQUNwQjtBQUNBLFlBQUlQLEdBQUVvSSxVQUFVO0FBQ2YsY0FBSTVILEtBQUlPLEdBQUVkLEVBQUMsR0FDVlEsS0FBSTRJLFNBQVNDLGNBQWMsUUFBUTtBQUNwQzdJLGFBQUVvSCxZQUFZO0FBQ2Q5RyxhQUFFTixFQUFDO0FBQ0gsZUFBS3NKLFNBQVMvSixJQUFHUyxFQUFDO0FBQ2xCLG1CQUFTQyxLQUFJLENBQUEsR0FBSUMsS0FBSSxHQUFHQSxLQUFJWCxHQUFFb0ksU0FBU2hILFFBQVFULE1BQUs7QUFDbkQsZ0JBQUlDLEtBQUlaLEdBQUVvSSxTQUFTekgsRUFBQyxHQUNuQkUsSUFBSSxLQUFLc0gsT0FBT3ZILEVBQUM7QUFDbEJGLGVBQUVxQixLQUFLbEIsQ0FBQztVQUNUO0FBQ0EsY0FBSUMsSUFBSUMsR0FBRSxhQUFhO1lBQ3RCaUosT0FBTztVQUNSLENBQUM7QUFDRGxKLFlBQUV3RixPQUFPNUYsRUFBQyxHQUFHRixHQUFFOEYsT0FBTzdGLEVBQUMsR0FBR0QsR0FBRThGLE9BQU94RixDQUFDO1FBQ3JDLE1BQU8sTUFBS2lKLFNBQVMvSixJQUFHQyxFQUFDO0FBQ3pCLGVBQU9nQixHQUFFMEYsVUFBVTFHLElBQUcsUUFBUUQsRUFBQyxHQUFHQztNQUNuQyxHQUNDSSxHQUFFcUMsVUFBVTJDLE9BQU8sU0FBVXBGLElBQUdELElBQUc7QUFDbkMsWUFBSVUsS0FBSSxNQUNQTixLQUFJSCxHQUFFa0QsS0FBSztBQUNaLGFBQUtrRSxTQUFTRCxLQUFLLE1BQU1oSCxFQUFDLEdBQ3pCSCxHQUFFMEUsR0FBRyxlQUFlLFNBQVU3QixJQUFHO0FBQ2hDcEMsYUFBRTRHLE1BQU0sR0FBRzVHLEdBQUU0RixPQUFPeEQsR0FBRStELElBQUksR0FBRzVHLEdBQUVnSyxPQUFPLE1BQU12SixHQUFFZ0ksV0FBVyxHQUFHaEksR0FBRTRILG1CQUFtQjtRQUNsRixDQUFDLEdBQ0RySSxHQUFFMEUsR0FBRyxrQkFBa0IsU0FBVTdCLElBQUc7QUFDbkNwQyxhQUFFNEYsT0FBT3hELEdBQUUrRCxJQUFJLEdBQUc1RyxHQUFFZ0ssT0FBTyxLQUFLdkosR0FBRWdJLFdBQVc7UUFDOUMsQ0FBQyxHQUNEekksR0FBRTBFLEdBQUcsU0FBUyxTQUFVN0IsSUFBRztBQUMxQnBDLGFBQUVvSCxhQUFhLEdBQUdwSCxHQUFFc0ksWUFBWWxHLEVBQUM7UUFDbEMsQ0FBQyxHQUNEN0MsR0FBRTBFLEdBQUcsVUFBVSxXQUFZO0FBQzFCMUUsYUFBRWdLLE9BQU8sTUFDUHZKLEdBQUVnSSxXQUFXLEdBQUdoSSxHQUFFdUcsUUFBUUUsSUFBSSxtQkFBbUIsS0FBS3pHLEdBQUU0SCxtQkFBbUI7UUFDOUUsQ0FBQyxHQUNEckksR0FBRTBFLEdBQUcsWUFBWSxXQUFZO0FBQzVCMUUsYUFBRWdLLE9BQU8sTUFDUHZKLEdBQUVnSSxXQUFXLEdBQUdoSSxHQUFFdUcsUUFBUUUsSUFBSSxtQkFBbUIsS0FBS3pHLEdBQUU0SCxtQkFBbUI7UUFDOUUsQ0FBQyxHQUNEckksR0FBRTBFLEdBQUcsUUFBUSxXQUFZO0FBQ3hCakUsYUFBRTJHLFNBQVNELEtBQUssaUJBQWlCLE1BQU0sR0FDdEMxRyxHQUFFMkcsU0FBU0QsS0FBSyxlQUFlLE9BQU8sR0FDdEMxRyxHQUFFZ0ksV0FBVyxHQUNiaEksR0FBRStILHVCQUF1QjtRQUMzQixDQUFDLEdBQ0R4SSxHQUFFMEUsR0FBRyxTQUFTLFdBQVk7QUFDekJqRSxhQUFFMkcsU0FBU0QsS0FBSyxpQkFBaUIsT0FBTyxHQUN2QzFHLEdBQUUyRyxTQUFTRCxLQUFLLGVBQWUsTUFBTSxHQUNyQzFHLEdBQUUyRyxTQUFTNkMsV0FBVyx1QkFBdUI7UUFDL0MsQ0FBQyxHQUNEakssR0FBRTBFLEdBQUcsa0JBQWtCLFdBQVk7QUFDbEMsY0FBSTdCLEtBQUlwQyxHQUFFeUosc0JBQXNCO0FBQ2hDLGdCQUFNckgsR0FBRTFCLFVBQVUwQixHQUFFOEIsUUFBUSxTQUFTO1FBQ3RDLENBQUMsR0FDRDNFLEdBQUUwRSxHQUFHLGtCQUFrQixXQUFZO0FBQ2xDLGNBQUk3QixLQUFJcEMsR0FBRXlKLHNCQUFzQjtBQUNoQyxjQUFJLE1BQU1ySCxHQUFFMUIsUUFBUTtBQUNuQixnQkFBSXlCLEtBQUk1QixHQUFFMkYsUUFBUTlELEdBQUUsQ0FBQyxHQUFHLE1BQU07QUFDOUIsc0JBQVVBLEdBQUVzRSxLQUFLLGVBQWUsSUFDN0IxRyxHQUFFa0UsUUFBUSxTQUFTLENBQUMsQ0FBQyxJQUNyQmxFLEdBQUVrRSxRQUFRLFVBQVU7Y0FBQ2lDLE1BQU1oRTtZQUFDLENBQUM7VUFDakM7UUFDRCxDQUFDLEdBQ0Q1QyxHQUFFMEUsR0FBRyxvQkFBb0IsV0FBWTtBQUNwQyxjQUFJN0IsS0FBSXBDLEdBQUV5SixzQkFBc0IsR0FDL0J0SCxLQUFJbkMsR0FBRTJHLFNBQVNVLEtBQUssaUJBQWlCLEdBQ3JDakUsS0FBSWpCLEdBQUV1SCxNQUFNdEgsRUFBQztBQUNkLGNBQUksRUFBRWdCLE1BQUssSUFBSTtBQUNkLGdCQUFJNEQsS0FBSTVELEtBQUk7QUFDWixrQkFBTWhCLEdBQUUxQixXQUFXc0csS0FBSTtBQUN2QixnQkFBSXBILEtBQUl1QyxHQUFFd0gsR0FBRzNDLEVBQUM7QUFDZHBILGVBQUVzRSxRQUFRLFlBQVk7QUFDdEIsZ0JBQUlyRSxLQUFJRyxHQUFFMkcsU0FBU2lELE9BQU8sRUFBRUMsS0FDM0IvSixLQUFJRixHQUFFZ0ssT0FBTyxFQUFFQyxLQUNmOUosS0FBSUMsR0FBRTJHLFNBQVNtRCxVQUFVLEtBQUtoSyxLQUFJRDtBQUNuQyxrQkFBTW1ILEtBQUloSCxHQUFFMkcsU0FBU21ELFVBQVUsQ0FBQyxJQUFJaEssS0FBSUQsS0FBSSxLQUFLRyxHQUFFMkcsU0FBU21ELFVBQVUvSixFQUFDO1VBQ3hFO1FBQ0QsQ0FBQyxHQUNEUixHQUFFMEUsR0FBRyxnQkFBZ0IsV0FBWTtBQUNoQyxjQUFJN0IsS0FBSXBDLEdBQUV5SixzQkFBc0IsR0FDL0J0SCxLQUFJbkMsR0FBRTJHLFNBQVNVLEtBQUssaUJBQWlCLEdBQ3JDakUsS0FBSWpCLEdBQUV1SCxNQUFNdEgsRUFBQyxJQUFJO0FBQ2xCLGNBQUksRUFBRWdCLE1BQUtqQixHQUFFekIsU0FBUztBQUNyQixnQkFBSXNHLEtBQUk3RSxHQUFFd0gsR0FBR3ZHLEVBQUM7QUFDZDRELGVBQUU5QyxRQUFRLFlBQVk7QUFDdEIsZ0JBQUl0RSxLQUFJSSxHQUFFMkcsU0FBU2lELE9BQU8sRUFBRUMsTUFBTTdKLEdBQUUyRyxTQUFTb0QsWUFBWSxLQUFFLEdBQzFEbEssS0FBSW1ILEdBQUU0QyxPQUFPLEVBQUVDLE1BQU03QyxHQUFFK0MsWUFBWSxLQUFFLEdBQ3JDakssS0FBSUUsR0FBRTJHLFNBQVNtRCxVQUFVLElBQUlqSyxLQUFJRDtBQUNsQyxrQkFBTXdELEtBQUlwRCxHQUFFMkcsU0FBU21ELFVBQVUsQ0FBQyxJQUFJbEssS0FBSUMsTUFBS0csR0FBRTJHLFNBQVNtRCxVQUFVaEssRUFBQztVQUNwRTtRQUNELENBQUMsR0FDRFAsR0FBRTBFLEdBQUcsaUJBQWlCLFNBQVU3QixJQUFHO0FBQ2xDQSxhQUFFK0YsUUFBUTZCLFNBQVMsc0NBQXNDO1FBQzFELENBQUMsR0FDRHpLLEdBQUUwRSxHQUFHLG1CQUFtQixTQUFVN0IsSUFBRztBQUNwQ3BDLGFBQUU4RyxlQUFlMUUsRUFBQztRQUNuQixDQUFDLEdBQ0QvQixHQUFFakMsR0FBRzZMLGNBQ0osS0FBS3RELFNBQVMxQyxHQUFHLGNBQWMsU0FBVTdCLElBQUc7QUFDM0MsY0FBSUQsS0FBSW5DLEdBQUUyRyxTQUFTbUQsVUFBVSxHQUM1QjFHLEtBQUlwRCxHQUFFMkcsU0FBU0YsSUFBSSxDQUFDLEVBQUV0QixlQUFlaEQsS0FBSUMsR0FBRThILFFBQzNDbEQsS0FBSSxJQUFJNUUsR0FBRThILFVBQVUvSCxLQUFJQyxHQUFFOEgsVUFBVSxHQUNwQ3RLLEtBQUl3QyxHQUFFOEgsU0FBUyxLQUFLOUcsTUFBS3BELEdBQUUyRyxTQUFTd0QsT0FBTztBQUM1Q25ELGdCQUNJaEgsR0FBRTJHLFNBQVNtRCxVQUFVLENBQUMsR0FBRzFILEdBQUVnSSxlQUFlLEdBQUdoSSxHQUFFaUksZ0JBQWdCLEtBQ2hFekssT0FDQUksR0FBRTJHLFNBQVNtRCxVQUNYOUosR0FBRTJHLFNBQVNGLElBQUksQ0FBQyxFQUFFdEIsZUFBZW5GLEdBQUUyRyxTQUFTd0QsT0FBTyxDQUNwRCxHQUNBL0gsR0FBRWdJLGVBQWUsR0FDakJoSSxHQUFFaUksZ0JBQWdCO1FBQ3JCLENBQUMsR0FDRixLQUFLMUQsU0FBUzFDLEdBQUcsV0FBVywyQ0FBMkMsU0FBVTdCLElBQUc7QUFDbkYsY0FBSUQsS0FBSTlCLEdBQUUsSUFBSSxHQUNiK0MsS0FBSTdDLEdBQUUyRixRQUFRLE1BQU0sTUFBTTtBQUMzQixxQkFBVy9ELEdBQUV1RSxLQUFLLGVBQWUsSUFDOUIxRyxHQUFFa0UsUUFBUSxVQUFVO1lBQUNvRyxlQUFlbEk7WUFBRytELE1BQU0vQztVQUFDLENBQUMsSUFDL0NwRCxHQUFFdUcsUUFBUUUsSUFBSSxVQUFVLElBQ3ZCekcsR0FBRWtFLFFBQVEsWUFBWTtZQUFDb0csZUFBZWxJO1lBQUcrRCxNQUFNL0M7VUFBQyxDQUFDLElBQ2pEcEQsR0FBRWtFLFFBQVEsU0FBUyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxHQUNELEtBQUt5QyxTQUFTMUMsR0FBRyxjQUFjLDJDQUEyQyxTQUFVN0IsSUFBRztBQUN0RixjQUFJRCxLQUFJNUIsR0FBRTJGLFFBQVEsTUFBTSxNQUFNO0FBQzlCbEcsYUFBRXlKLHNCQUFzQixFQUFFYyxZQUFZLHNDQUFzQyxHQUMzRXZLLEdBQUVrRSxRQUFRLGlCQUFpQjtZQUFDaUMsTUFBTWhFO1lBQUdnRyxTQUFTOUgsR0FBRSxJQUFJO1VBQUMsQ0FBQztRQUN4RCxDQUFDO01BQ0gsR0FDQ1YsR0FBRXFDLFVBQVV5SCx3QkFBd0IsV0FBWTtBQUNoRCxlQUFPLEtBQUs5QyxTQUFTVSxLQUFLLHVDQUF1QztNQUNsRSxHQUNDMUgsR0FBRXFDLFVBQVV3SSxVQUFVLFdBQVk7QUFDbEMsYUFBSzdELFNBQVNXLE9BQU87TUFDdEIsR0FDQzNILEdBQUVxQyxVQUFVK0YseUJBQXlCLFdBQVk7QUFDakQsWUFBSXpJLEtBQUksS0FBS21LLHNCQUFzQjtBQUNuQyxZQUFJLE1BQU1uSyxHQUFFb0IsUUFBUTtBQUNuQixjQUFJbkIsS0FBSSxLQUFLb0gsU0FBU1UsS0FBSyxpQkFBaUIsRUFBRXFDLE1BQU1wSyxFQUFDLEdBQ3BESSxLQUFJLEtBQUtpSCxTQUFTaUQsT0FBTyxFQUFFQyxLQUMzQjdDLEtBQUkxSCxHQUFFc0ssT0FBTyxFQUFFQyxLQUNmakssS0FBSSxLQUFLK0csU0FBU21ELFVBQVUsS0FBSzlDLEtBQUl0SCxLQUNyQ0csS0FBSW1ILEtBQUl0SDtBQUNSRSxnQkFBSyxJQUFJTixHQUFFeUssWUFBWSxLQUFFLEdBQ3pCeEssTUFBSyxJQUNGLEtBQUtvSCxTQUFTbUQsVUFBVSxDQUFDLEtBQ3hCakssS0FBSSxLQUFLOEcsU0FBU29ELFlBQVksS0FBS2xLLEtBQUksTUFBTSxLQUFLOEcsU0FBU21ELFVBQVVsSyxFQUFDO1FBQzVFO01BQ0QsR0FDQ0QsR0FBRXFDLFVBQVVxSCxXQUFXLFNBQVUvSixJQUFHQyxJQUFHO0FBQ3ZDLFlBQUlHLEtBQUksS0FBSzZHLFFBQVFFLElBQUksZ0JBQWdCLEdBQ3hDTyxLQUFJLEtBQUtULFFBQVFFLElBQUksY0FBYyxHQUNuQzdHLEtBQUlGLEdBQUVKLElBQUdDLEVBQUM7QUFDWCxnQkFBUUssS0FDSkwsR0FBRXdGLE1BQU0wRixVQUFVLFNBQ25CLFlBQVksT0FBTzdLLEtBQ2pCTCxHQUFFbUwsWUFBWTFELEdBQUVwSCxFQUFDLElBQ2xCUyxHQUFFZCxFQUFDLEVBQUVxRyxPQUFPaEcsRUFBQztNQUNsQixHQUNBRDtJQUVGLENBQUMsR0FDRHJCLEdBQUVQLE9BQU8sZ0JBQWdCLENBQUEsR0FBSSxXQUFZO0FBQ3hDLGFBQU87UUFDTjRNLFdBQVc7UUFDWEMsS0FBSztRQUNMQyxPQUFPO1FBQ1BDLE9BQU87UUFDUEMsTUFBTTtRQUNOQyxLQUFLO1FBQ0xDLEtBQUs7UUFDTEMsT0FBTztRQUNQQyxTQUFTO1FBQ1RDLFdBQVc7UUFDWEMsS0FBSztRQUNMQyxNQUFNO1FBQ05DLE1BQU07UUFDTkMsSUFBSTtRQUNKQyxPQUFPO1FBQ1BDLE1BQU07UUFDTkMsUUFBUTtNQUNUO0lBQ0QsQ0FBQyxHQUNEck4sR0FBRVAsT0FBTywwQkFBMEIsQ0FBQyxVQUFVLFlBQVksU0FBUyxHQUFHLFNBQVUyQixJQUFHQyxJQUFHQyxJQUFHO0FBQ3hGLGVBQVNDLEdBQUVQLElBQUdDLElBQUc7QUFDZixhQUFLK0csV0FBV2hILElBQUssS0FBS2lILFVBQVVoSCxJQUFJTSxHQUFFMkQsVUFBVUYsWUFBWTlELEtBQUssSUFBSTtNQUMzRTtBQUNBLGFBQ0NHLEdBQUUwRCxPQUFPeEQsSUFBR0YsR0FBRTBFLFVBQVUsR0FDdkJ4RSxHQUFFbUMsVUFBVXdFLFNBQVMsV0FBWTtBQUNqQyxZQUFJbEgsS0FBSUksR0FDUCxxR0FDRDtBQUNBLGVBQ0UsS0FBS2tNLFlBQVksR0FDbEIsUUFBUWpNLEdBQUV1RyxRQUFRLEtBQUtJLFNBQVMsQ0FBQyxHQUFHLGNBQWMsSUFDOUMsS0FBS3NGLFlBQVlqTSxHQUFFdUcsUUFBUSxLQUFLSSxTQUFTLENBQUMsR0FBRyxjQUFjLElBQzVELFFBQVEsS0FBS0EsU0FBU0ksS0FBSyxVQUFVLE1BQ3JDLEtBQUtrRixZQUFZLEtBQUt0RixTQUFTSSxLQUFLLFVBQVUsSUFDakRwSCxHQUFFb0gsS0FBSyxTQUFTLEtBQUtKLFNBQVNJLEtBQUssT0FBTyxDQUFDLEdBQzNDcEgsR0FBRW9ILEtBQUssWUFBWSxLQUFLa0YsU0FBUyxHQUNqQ3RNLEdBQUVvSCxLQUFLLGlCQUFpQixPQUFPLEdBQzlCLEtBQUttRixhQUFhdk07TUFFckIsR0FDQ08sR0FBRW1DLFVBQVUyQyxPQUFPLFNBQVVyRixJQUFHQyxJQUFHO0FBQ25DLFlBQUk2RCxLQUFJLE1BQ1A0RCxLQUFJMUgsR0FBRW1ELEtBQUs7QUFDWCxhQUFLcUosWUFBWXhNLElBQ2pCLEtBQUt1TSxXQUFXNUgsR0FBRyxTQUFTLFNBQVU3QixJQUFHO0FBQ3hDZ0IsYUFBRWMsUUFBUSxTQUFTOUIsRUFBQztRQUNyQixDQUFDLEdBQ0QsS0FBS3lKLFdBQVc1SCxHQUFHLFFBQVEsU0FBVTdCLElBQUc7QUFDdkNnQixhQUFFMkksWUFBWTNKLEVBQUM7UUFDaEIsQ0FBQyxHQUNELEtBQUt5SixXQUFXNUgsR0FBRyxXQUFXLFNBQVU3QixJQUFHO0FBQzFDZ0IsYUFBRWMsUUFBUSxZQUFZOUIsRUFBQyxHQUFHQSxHQUFFNEosVUFBVXBNLEdBQUVzTCxTQUFTOUksR0FBRWdJLGVBQWU7UUFDbkUsQ0FBQyxHQUNEOUssR0FBRTJFLEdBQUcsaUJBQWlCLFNBQVU3QixJQUFHO0FBQ2xDZ0IsYUFBRXlJLFdBQVduRixLQUFLLHlCQUF5QnRFLEdBQUUrRCxLQUFLZ0QsU0FBUztRQUM1RCxDQUFDLEdBQ0Q3SixHQUFFMkUsR0FBRyxvQkFBb0IsU0FBVTdCLElBQUc7QUFDckNnQixhQUFFNkksT0FBTzdKLEdBQUUrRCxJQUFJO1FBQ2hCLENBQUMsR0FDRDdHLEdBQUUyRSxHQUFHLFFBQVEsV0FBWTtBQUN4QmIsYUFBRXlJLFdBQVduRixLQUFLLGlCQUFpQixNQUFNLEdBQ3hDdEQsR0FBRXlJLFdBQVduRixLQUFLLGFBQWFNLEVBQUMsR0FDaEM1RCxHQUFFOEksb0JBQW9CNU0sRUFBQztRQUN6QixDQUFDLEdBQ0RBLEdBQUUyRSxHQUFHLFNBQVMsV0FBWTtBQUN6QmIsYUFBRXlJLFdBQVduRixLQUFLLGlCQUFpQixPQUFPLEdBQ3pDdEQsR0FBRXlJLFdBQVdyQyxXQUFXLHVCQUF1QixHQUMvQ3BHLEdBQUV5SSxXQUFXckMsV0FBVyxXQUFXLEdBQ25DcEcsR0FBRXlJLFdBQVczSCxRQUFRLE9BQU8sR0FDNUJkLEdBQUUrSSxvQkFBb0I3TSxFQUFDO1FBQ3pCLENBQUMsR0FDREEsR0FBRTJFLEdBQUcsVUFBVSxXQUFZO0FBQzFCYixhQUFFeUksV0FBV25GLEtBQUssWUFBWXRELEdBQUV3SSxTQUFTLEdBQ3hDeEksR0FBRXlJLFdBQVduRixLQUFLLGlCQUFpQixPQUFPO1FBQzVDLENBQUMsR0FDRHBILEdBQUUyRSxHQUFHLFdBQVcsV0FBWTtBQUMzQmIsYUFBRXlJLFdBQVduRixLQUFLLFlBQVksSUFBSSxHQUFHdEQsR0FBRXlJLFdBQVduRixLQUFLLGlCQUFpQixNQUFNO1FBQy9FLENBQUM7TUFDSCxHQUNDN0csR0FBRW1DLFVBQVUrSixjQUFjLFNBQVV6TSxJQUFHO0FBQ3ZDLFlBQUlDLEtBQUk7QUFDUnVKLGVBQU8vRixXQUFXLFdBQVk7QUFDN0I0RixtQkFBU3lELGlCQUFpQjdNLEdBQUVzTSxXQUFXLENBQUMsS0FDdkNuTSxHQUFFMk0sU0FBUzlNLEdBQUVzTSxXQUFXLENBQUMsR0FBR2xELFNBQVN5RCxhQUFhLEtBQ2xEN00sR0FBRTJFLFFBQVEsUUFBUTVFLEVBQUM7UUFDckIsR0FBRyxDQUFDO01BQ0wsR0FDQ08sR0FBRW1DLFVBQVVrSyxzQkFBc0IsU0FBVTVNLElBQUc7QUFDL0NJLFdBQUVpSixTQUFTMkQsSUFBSSxFQUFFckksR0FBRyx1QkFBdUIzRSxHQUFFbUQsSUFBSSxTQUFVTCxJQUFHO0FBQzdELGNBQUk3QyxLQUFJRyxHQUFFMEMsR0FBRW1LLE1BQU0sRUFBRUMsUUFBUSxVQUFVO0FBQ3RDOU0sYUFBRSxrQ0FBa0MsRUFBRXdJLEtBQUssV0FBWTtBQUN0RCxvQkFBUTNJLEdBQUUsQ0FBQyxLQUFLSSxHQUFFdUcsUUFBUSxNQUFNLFNBQVMsRUFBRTdILFFBQVEsT0FBTztVQUMzRCxDQUFDO1FBQ0YsQ0FBQztNQUNGLEdBQ0N3QixHQUFFbUMsVUFBVW1LLHNCQUFzQixTQUFVN00sSUFBRztBQUMvQ0ksV0FBRWlKLFNBQVMyRCxJQUFJLEVBQUVHLElBQUksdUJBQXVCbk4sR0FBRW1ELEVBQUU7TUFDakQsR0FDQzVDLEdBQUVtQyxVQUFVMkYsV0FBVyxTQUFVckksSUFBR0MsSUFBRztBQUN2Q0EsV0FBRThILEtBQUssWUFBWSxFQUFFekIsT0FBT3RHLEVBQUM7TUFDOUIsR0FDQ08sR0FBRW1DLFVBQVV3SSxVQUFVLFdBQVk7QUFDbEMsYUFBSzJCLG9CQUFvQixLQUFLTCxTQUFTO01BQ3hDLEdBQ0NqTSxHQUFFbUMsVUFBVWlLLFNBQVMsU0FBVTNNLElBQUc7QUFDbEMsY0FBTSxJQUFJbUMsTUFBTSx1REFBdUQ7TUFDeEUsR0FDQTVCO0lBRUYsQ0FBQyxHQUNEdkIsR0FBRVAsT0FDRCw0QkFDQSxDQUFDLFVBQVUsVUFBVSxZQUFZLFNBQVMsR0FDMUMsU0FBVXVCLElBQUdDLElBQUdHLElBQUdDLElBQUc7QUFDckIsZUFBU0MsS0FBSTtBQUNaQSxXQUFFNEQsVUFBVUYsWUFBWWhDLE1BQU0sTUFBTUYsU0FBUztNQUM5QztBQUNBLGFBQ0MxQixHQUFFMkQsT0FBT3pELElBQUdMLEVBQUMsR0FDWkssR0FBRW9DLFVBQVV3RSxTQUFTLFdBQVk7QUFDakMsWUFBSXBFLEtBQUl4QyxHQUFFNEQsVUFBVWdELE9BQU9oSCxLQUFLLElBQUk7QUFDcEMsZUFDQzRDLEdBQUU0SCxTQUFTLDJCQUEyQixHQUN0QzVILEdBQUVzSyxLQUNELGdKQUNELEdBQ0F0SztNQUVGLEdBQ0N4QyxHQUFFb0MsVUFBVTJDLE9BQU8sU0FBVXhDLElBQUdDLElBQUc7QUFDbkMsWUFBSWdCLEtBQUk7QUFDUnhELFdBQUU0RCxVQUFVbUIsS0FBS3JELE1BQU0sTUFBTUYsU0FBUztBQUN0QyxZQUFJNEYsS0FBSTdFLEdBQUVNLEtBQUs7QUFDZixhQUFLb0osV0FDSHhFLEtBQUssOEJBQThCLEVBQ25DWCxLQUFLLE1BQU1NLEVBQUMsRUFDWk4sS0FBSyxRQUFRLFNBQVMsRUFDdEJBLEtBQUssaUJBQWlCLE1BQU0sR0FDN0IsS0FBS21GLFdBQVduRixLQUFLLG1CQUFtQk0sRUFBQyxHQUN6QyxLQUFLNkUsV0FBVzVILEdBQUcsYUFBYSxTQUFVTixJQUFHO0FBQzVDLGdCQUFNQSxHQUFFcUksU0FBUzVJLEdBQUVjLFFBQVEsVUFBVTtZQUFDb0csZUFBZTNHO1VBQUMsQ0FBQztRQUN4RCxDQUFDLEdBQ0QsS0FBS2tJLFdBQVc1SCxHQUFHLFNBQVMsU0FBVU4sSUFBRztRQUFDLENBQUMsR0FDM0MsS0FBS2tJLFdBQVc1SCxHQUFHLFFBQVEsU0FBVU4sSUFBRztRQUFDLENBQUMsR0FDMUN4QixHQUFFOEIsR0FBRyxTQUFTLFNBQVVOLElBQUc7QUFDMUJ4QixhQUFFb0gsT0FBTyxLQUFLbkcsR0FBRXlJLFdBQVczSCxRQUFRLE9BQU87UUFDM0MsQ0FBQztNQUNILEdBQ0N0RSxHQUFFb0MsVUFBVTRFLFFBQVEsV0FBWTtBQUNoQyxZQUFJeEUsS0FBSSxLQUFLeUosV0FBV3hFLEtBQUssOEJBQThCO0FBQzNEakYsV0FBRXlFLE1BQU0sR0FBR3pFLEdBQUVvSCxXQUFXLE9BQU87TUFDaEMsR0FDQzVKLEdBQUVvQyxVQUFVeUksVUFBVSxTQUFVckksSUFBR0QsSUFBRztBQUN0QyxZQUFJaUIsS0FBSSxLQUFLbUQsUUFBUUUsSUFBSSxtQkFBbUI7QUFDNUMsZUFBTyxLQUFLRixRQUFRRSxJQUFJLGNBQWMsRUFBRXJELEdBQUVoQixJQUFHRCxFQUFDLENBQUM7TUFDaEQsR0FDQ3ZDLEdBQUVvQyxVQUFVMksscUJBQXFCLFdBQVk7QUFDN0MsZUFBT3JOLEdBQUUsZUFBZTtNQUN6QixHQUNDTSxHQUFFb0MsVUFBVWlLLFNBQVMsU0FBVTdKLElBQUc7QUFDbEMsWUFBSSxNQUFNQSxHQUFFMUIsUUFBUTtBQUNuQixjQUFJeUIsS0FBSUMsR0FBRSxDQUFDLEdBQ1ZnQixLQUFJLEtBQUt5SSxXQUFXeEUsS0FBSyw4QkFBOEIsR0FDdkRMLEtBQUksS0FBS3lELFFBQVF0SSxJQUFHaUIsRUFBQztBQUN0QkEsYUFBRXlELE1BQU0sRUFBRWpCLE9BQU9vQixFQUFDO0FBQ2xCLGNBQUl6RCxLQUFJcEIsR0FBRWlILFNBQVNqSCxHQUFFc0c7QUFDckJsRixlQUFJSCxHQUFFc0QsS0FBSyxTQUFTbkQsRUFBQyxJQUFJSCxHQUFFb0csV0FBVyxPQUFPO1FBQzlDLE1BQU8sTUFBSzVDLE1BQU07TUFDbkIsR0FDQWhIO0lBRUYsQ0FDRCxHQUNBdEIsR0FBRVAsT0FBTyw4QkFBOEIsQ0FBQyxVQUFVLFVBQVUsVUFBVSxHQUFHLFNBQVU2QixJQUFHTixJQUFHVSxJQUFHO0FBQzNGLGVBQVNOLEdBQUUwQyxJQUFHN0MsSUFBRztBQUNoQkcsV0FBRThELFVBQVVGLFlBQVloQyxNQUFNLE1BQU1GLFNBQVM7TUFDOUM7QUFDQSxhQUNDcEIsR0FBRXFELE9BQU8zRCxJQUFHSixFQUFDLEdBQ1pJLEdBQUVzQyxVQUFVd0UsU0FBUyxXQUFZO0FBQ2pDLFlBQUlwRSxLQUFJMUMsR0FBRThELFVBQVVnRCxPQUFPaEgsS0FBSyxJQUFJO0FBQ3BDLGVBQ0M0QyxHQUFFNEgsU0FBUyw2QkFBNkIsR0FDeEM1SCxHQUFFc0ssS0FBSywrQ0FBK0MsR0FDdER0SztNQUVGLEdBQ0MxQyxHQUFFc0MsVUFBVTJDLE9BQU8sU0FBVXZDLElBQUc3QyxJQUFHO0FBQ25DLFlBQUlJLEtBQUk7QUFDUkQsV0FBRThELFVBQVVtQixLQUFLckQsTUFBTSxNQUFNRixTQUFTLEdBQ3JDLEtBQUt5SyxXQUFXNUgsR0FBRyxTQUFTLFNBQVVOLElBQUc7QUFDeENoRSxhQUFFdUUsUUFBUSxVQUFVO1lBQUNvRyxlQUFlM0c7VUFBQyxDQUFDO1FBQ3ZDLENBQUMsR0FDRCxLQUFLa0ksV0FBVzVILEdBQUcsU0FBUyxzQ0FBc0MsU0FBVU4sSUFBRztBQUM5RSxjQUFJLENBQUNoRSxHQUFFNEcsUUFBUUUsSUFBSSxVQUFVLEdBQUc7QUFDL0IsZ0JBQUl0RSxLQUFJdkMsR0FBRSxJQUFJLEVBQUVnTixPQUFPLEdBQ3RCeEosS0FBSXBELEdBQUVrRyxRQUFRL0QsR0FBRSxDQUFDLEdBQUcsTUFBTTtBQUMzQnhDLGVBQUV1RSxRQUFRLFlBQVk7Y0FBQ29HLGVBQWUzRztjQUFHd0MsTUFBTS9DO1lBQUMsQ0FBQztVQUNsRDtRQUNELENBQUM7TUFDSCxHQUNDMUQsR0FBRXNDLFVBQVU0RSxRQUFRLFdBQVk7QUFDaEMsWUFBSXhFLEtBQUksS0FBS3lKLFdBQVd4RSxLQUFLLDhCQUE4QjtBQUMzRGpGLFdBQUV5RSxNQUFNLEdBQUd6RSxHQUFFb0gsV0FBVyxPQUFPO01BQ2hDLEdBQ0M5SixHQUFFc0MsVUFBVXlJLFVBQVUsU0FBVXJJLElBQUc3QyxJQUFHO0FBQ3RDLFlBQUk2RCxLQUFJLEtBQUttRCxRQUFRRSxJQUFJLG1CQUFtQjtBQUM1QyxlQUFPLEtBQUtGLFFBQVFFLElBQUksY0FBYyxFQUFFckQsR0FBRWhCLElBQUc3QyxFQUFDLENBQUM7TUFDaEQsR0FDQ0csR0FBRXNDLFVBQVUySyxxQkFBcUIsV0FBWTtBQUM3QyxlQUFPL00sR0FDTiwrSEFDRDtNQUNELEdBQ0NGLEdBQUVzQyxVQUFVaUssU0FBUyxTQUFVN0osSUFBRztBQUNsQyxZQUFLLEtBQUt3RSxNQUFNLEdBQUcsTUFBTXhFLEdBQUUxQixRQUFTO0FBQ25DLG1CQUFTbkIsS0FBSSxDQUFBLEdBQUk2RCxLQUFJLEdBQUdBLEtBQUloQixHQUFFMUIsUUFBUTBDLE1BQUs7QUFDMUMsZ0JBQUl6RCxLQUFJeUMsR0FBRWdCLEVBQUMsR0FDVkcsS0FBSSxLQUFLb0osbUJBQW1CLEdBQzVCOU0sS0FBSSxLQUFLNEssUUFBUTlLLElBQUc0RCxFQUFDO0FBQ3RCQSxlQUFFcUMsT0FBTy9GLEVBQUM7QUFDVixnQkFBSUMsS0FBSUgsR0FBRXlKLFNBQVN6SixHQUFFOEk7QUFDckIzSSxrQkFBS3lELEdBQUVtRCxLQUFLLFNBQVM1RyxFQUFDLEdBQUdFLEdBQUVpRyxVQUFVMUMsR0FBRSxDQUFDLEdBQUcsUUFBUTVELEVBQUMsR0FBR0osR0FBRThCLEtBQUtrQyxFQUFDO1VBQ2hFO0FBQ0EsY0FBSXhELEtBQUksS0FBSzhMLFdBQVd4RSxLQUFLLDhCQUE4QjtBQUMzRHJILGFBQUV3RixXQUFXekYsSUFBR1IsRUFBQztRQUNsQjtNQUNELEdBQ0FHO0lBRUYsQ0FBQyxHQUNEcEIsR0FBRVAsT0FBTyxpQ0FBaUMsQ0FBQyxVQUFVLEdBQUcsU0FBVXVCLElBQUc7QUFDcEUsZUFBU0MsR0FBRTZDLElBQUdELElBQUd6QyxJQUFHO0FBQ2xCLGFBQUttTixjQUFjLEtBQUtDLHFCQUFxQnBOLEdBQUUrRyxJQUFJLGFBQWEsQ0FBQyxHQUFJckUsR0FBRTVDLEtBQUssTUFBTTJDLElBQUd6QyxFQUFDO01BQ3hGO0FBQ0EsYUFDRUgsR0FBRXlDLFVBQVU4Syx1QkFBdUIsU0FBVTFLLElBQUdELElBQUc7QUFDbkQsZUFBTyxZQUFZLE9BQU9BLE9BQU1BLEtBQUk7VUFBQ00sSUFBSTtVQUFJZ0csTUFBTXRHO1FBQUMsSUFBSUE7TUFDekQsR0FDQzVDLEdBQUV5QyxVQUFVK0ssb0JBQW9CLFNBQVUzSyxJQUFHRCxJQUFHO0FBQ2hELFlBQUl6QyxLQUFJLEtBQUtpTixtQkFBbUI7QUFDaEMsZUFDQ2pOLEdBQUVnTixLQUFLLEtBQUtqQyxRQUFRdEksRUFBQyxDQUFDLEdBQ3RCekMsR0FBRXNLLFNBQVMsZ0NBQWdDLEVBQUVPLFlBQVksMkJBQTJCLEdBQ3BGN0s7TUFFRixHQUNDSCxHQUFFeUMsVUFBVWlLLFNBQVMsU0FBVTdKLElBQUdELElBQUc7QUFDckMsWUFBSXpDLEtBQUksS0FBS3lDLEdBQUV6QixVQUFVeUIsR0FBRSxDQUFDLEVBQUVNLE1BQU0sS0FBS29LLFlBQVlwSztBQUNyRCxZQUFJLElBQUlOLEdBQUV6QixVQUFVaEIsR0FBRyxRQUFPMEMsR0FBRTVDLEtBQUssTUFBTTJDLEVBQUM7QUFDNUMsYUFBS3lFLE1BQU07QUFDWCxZQUFJakgsS0FBSSxLQUFLb04sa0JBQWtCLEtBQUtGLFdBQVc7QUFDL0MsYUFBS2hCLFdBQVd4RSxLQUFLLDhCQUE4QixFQUFFekIsT0FBT2pHLEVBQUM7TUFDOUQsR0FDQUo7SUFFRixDQUFDLEdBQ0RqQixHQUFFUCxPQUFPLGdDQUFnQyxDQUFDLFVBQVUsV0FBVyxVQUFVLEdBQUcsU0FBVTZCLElBQUdELElBQUdJLElBQUc7QUFDOUYsZUFBU1QsS0FBSTtNQUFDO0FBQ2QsYUFDRUEsR0FBRTBDLFVBQVUyQyxPQUFPLFNBQVV2QyxJQUFHN0MsSUFBR0csSUFBRztBQUN0QyxZQUFJc0gsS0FBSTtBQUNSNUUsV0FBRTVDLEtBQUssTUFBTUQsSUFBR0csRUFBQyxHQUNoQixRQUFRLEtBQUttTixlQUNaLEtBQUt0RyxRQUFRRSxJQUFJLE9BQU8sS0FDeEJxQyxPQUFPNUYsV0FDUEEsUUFBUUMsU0FDUkQsUUFBUUMsTUFDUCwrRkFDRCxHQUNELEtBQUswSSxXQUFXNUgsR0FBRyxhQUFhLDZCQUE2QixTQUFVTixJQUFHO0FBQ3pFcUQsYUFBRWdHLGFBQWFySixFQUFDO1FBQ2pCLENBQUMsR0FDRHBFLEdBQUUwRSxHQUFHLFlBQVksU0FBVU4sSUFBRztBQUM3QnFELGFBQUVpRyxxQkFBcUJ0SixJQUFHcEUsRUFBQztRQUM1QixDQUFDO01BQ0gsR0FDQ0QsR0FBRTBDLFVBQVVnTCxlQUFlLFNBQVU1SyxJQUFHN0MsSUFBRztBQUMzQyxZQUFJLENBQUMsS0FBS2dILFFBQVFFLElBQUksVUFBVSxHQUFHO0FBQ2xDLGNBQUkvRyxLQUFJLEtBQUttTSxXQUFXeEUsS0FBSywyQkFBMkI7QUFDeEQsY0FBSSxNQUFNM0gsR0FBRWdCLFFBQVE7QUFDbkJuQixlQUFFOEssZ0JBQWdCO0FBQ2xCLGdCQUFJckQsS0FBSWpILEdBQUVtRyxRQUFReEcsR0FBRSxDQUFDLEdBQUcsTUFBTSxHQUM3QjZELEtBQUksS0FBSytDLFNBQVM0RyxJQUFJO0FBQ3ZCLGlCQUFLNUcsU0FBUzRHLElBQUksS0FBS0wsWUFBWXBLLEVBQUU7QUFDckMsZ0JBQUk1QyxLQUFJO2NBQUNzRyxNQUFNYTtZQUFDO0FBQ2hCLGdCQUFLLEtBQUs5QyxRQUFRLFNBQVNyRSxFQUFDLEdBQUdBLEdBQUVzTixVQUFZLE1BQUs3RyxTQUFTNEcsSUFBSTNKLEVBQUM7aUJBQzNEO0FBQ0osdUJBQVN6RCxLQUFJLEdBQUdBLEtBQUlrSCxHQUFFdEcsUUFBUVosS0FDN0IsS0FBTUQsS0FBSTtnQkFBQ3NHLE1BQU1hLEdBQUVsSCxFQUFDO2NBQUMsR0FBSSxLQUFLb0UsUUFBUSxZQUFZckUsRUFBQyxHQUFHQSxHQUFFc04sVUFDdkQsUUFBTyxLQUFLLEtBQUs3RyxTQUFTNEcsSUFBSTNKLEVBQUM7QUFDakMsbUJBQUsrQyxTQUFTcEMsUUFBUSxRQUFRLEdBQUcsS0FBS0EsUUFBUSxVQUFVLENBQUMsQ0FBQztZQUMzRDtVQUNEO1FBQ0Q7TUFDRCxHQUNDNUUsR0FBRTBDLFVBQVVpTCx1QkFBdUIsU0FBVTdLLElBQUc3QyxJQUFHRyxJQUFHO0FBQ3REQSxXQUFFNkosT0FBTyxLQUFNaEssR0FBRXlNLFNBQVNyTSxHQUFFZ00sVUFBVXBNLEdBQUV5TSxTQUFTck0sR0FBRWdMLGFBQWMsS0FBS3FDLGFBQWF6TixFQUFDO01BQ3JGLEdBQ0NELEdBQUUwQyxVQUFVaUssU0FBUyxTQUFVN0osSUFBRzdDLElBQUc7QUFDckMsWUFDRTZDLEdBQUU1QyxLQUFLLE1BQU1ELEVBQUMsR0FDZixFQUFFLElBQUksS0FBS3NNLFdBQVd4RSxLQUFLLGlDQUFpQyxFQUFFM0csVUFBVSxNQUFNbkIsR0FBRW1CLFNBQy9FO0FBQ0QsY0FBSWhCLEtBQUksS0FBSzZHLFFBQVFFLElBQUksY0FBYyxFQUFFQSxJQUFJLGdCQUFnQixHQUM1RE8sS0FBSXBILEdBQUUsbURBQW1ERixHQUFFLElBQUksa0JBQWtCO0FBQ2xGSyxhQUFFa0csVUFBVWUsR0FBRSxDQUFDLEdBQUcsUUFBUXpILEVBQUMsR0FDMUIsS0FBS3NNLFdBQVd4RSxLQUFLLDhCQUE4QixFQUFFcUIsUUFBUTFCLEVBQUM7UUFDaEU7TUFDRCxHQUNBMUg7SUFFRixDQUFDLEdBQ0RoQixHQUFFUCxPQUFPLDRCQUE0QixDQUFDLFVBQVUsWUFBWSxTQUFTLEdBQUcsU0FBVTRCLElBQUdJLElBQUdDLElBQUc7QUFDMUYsZUFBU1YsR0FBRThDLElBQUc3QyxJQUFHRyxJQUFHO0FBQ25CMEMsV0FBRTVDLEtBQUssTUFBTUQsSUFBR0csRUFBQztNQUNsQjtBQUNBLGFBQ0VKLEdBQUUwQyxVQUFVd0UsU0FBUyxTQUFVcEUsSUFBRztBQUNsQyxZQUFJN0MsS0FBSUksR0FDUCxvUEFDRDtBQUNDLGFBQUt5TixtQkFBbUI3TixJQUFLLEtBQUs4TixVQUFVOU4sR0FBRThILEtBQUssT0FBTztBQUMzRCxZQUFJM0gsS0FBSTBDLEdBQUU1QyxLQUFLLElBQUk7QUFDbkIsZUFBTyxLQUFLOE4sa0JBQWtCLEdBQUc1TjtNQUNsQyxHQUNDSixHQUFFMEMsVUFBVTJDLE9BQU8sU0FBVXZDLElBQUc3QyxJQUFHRyxJQUFHO0FBQ3RDLFlBQUlzSCxLQUFJLE1BQ1BwSCxLQUFJTCxHQUFFa0QsS0FBSztBQUNaTCxXQUFFNUMsS0FBSyxNQUFNRCxJQUFHRyxFQUFDLEdBQ2hCSCxHQUFFMEUsR0FBRyxRQUFRLFdBQVk7QUFDeEIrQyxhQUFFcUcsUUFBUTNHLEtBQUssaUJBQWlCOUcsRUFBQyxHQUFHb0gsR0FBRXFHLFFBQVFuSixRQUFRLE9BQU87UUFDOUQsQ0FBQyxHQUNEM0UsR0FBRTBFLEdBQUcsU0FBUyxXQUFZO0FBQ3pCK0MsYUFBRXFHLFFBQVFILElBQUksRUFBRSxHQUNmbEcsR0FBRXFHLFFBQVE3RCxXQUFXLGVBQWUsR0FDcEN4QyxHQUFFcUcsUUFBUTdELFdBQVcsdUJBQXVCLEdBQzVDeEMsR0FBRXFHLFFBQVFuSixRQUFRLE9BQU87UUFDM0IsQ0FBQyxHQUNEM0UsR0FBRTBFLEdBQUcsVUFBVSxXQUFZO0FBQzFCK0MsYUFBRXFHLFFBQVFFLEtBQUssWUFBWSxLQUFFLEdBQUd2RyxHQUFFc0csa0JBQWtCO1FBQ3JELENBQUMsR0FDRC9OLEdBQUUwRSxHQUFHLFdBQVcsV0FBWTtBQUMzQitDLGFBQUVxRyxRQUFRRSxLQUFLLFlBQVksSUFBRTtRQUM5QixDQUFDLEdBQ0RoTyxHQUFFMEUsR0FBRyxTQUFTLFNBQVVOLElBQUc7QUFDMUJxRCxhQUFFcUcsUUFBUW5KLFFBQVEsT0FBTztRQUMxQixDQUFDLEdBQ0QzRSxHQUFFMEUsR0FBRyxpQkFBaUIsU0FBVU4sSUFBRztBQUNsQ0EsYUFBRXdDLEtBQUtnRCxZQUNKbkMsR0FBRXFHLFFBQVEzRyxLQUFLLHlCQUF5Qi9DLEdBQUV3QyxLQUFLZ0QsU0FBUyxJQUN4RG5DLEdBQUVxRyxRQUFRN0QsV0FBVyx1QkFBdUI7UUFDaEQsQ0FBQyxHQUNELEtBQUtxQyxXQUFXNUgsR0FBRyxXQUFXLDJCQUEyQixTQUFVTixJQUFHO0FBQ3JFcUQsYUFBRTlDLFFBQVEsU0FBU1AsRUFBQztRQUNyQixDQUFDLEdBQ0QsS0FBS2tJLFdBQVc1SCxHQUFHLFlBQVksMkJBQTJCLFNBQVVOLElBQUc7QUFDdEVxRCxhQUFFK0UsWUFBWXBJLEVBQUM7UUFDaEIsQ0FBQyxHQUNELEtBQUtrSSxXQUFXNUgsR0FBRyxXQUFXLDJCQUEyQixTQUFVTixJQUFHO0FBQ3JFLGNBQ0VBLEdBQUUwRyxnQkFBZ0IsR0FDbkJyRCxHQUFFOUMsUUFBUSxZQUFZUCxFQUFDLEdBQ3RCcUQsR0FBRXdHLGtCQUFrQjdKLEdBQUU4SixtQkFBbUIsR0FDMUM5SixHQUFFcUksVUFBVWhNLEdBQUUySyxhQUFhLE9BQU8zRCxHQUFFcUcsUUFBUUgsSUFBSSxHQUMvQztBQUNELGdCQUFJL0ssS0FBSTZFLEdBQUVvRyxpQkFBaUJNLEtBQUssNEJBQTRCO0FBQzVELGdCQUFJLElBQUl2TCxHQUFFekIsUUFBUTtBQUNqQixrQkFBSTBDLEtBQUlyRCxHQUFFbUcsUUFBUS9ELEdBQUUsQ0FBQyxHQUFHLE1BQU07QUFDOUI2RSxpQkFBRTJHLG1CQUFtQnZLLEVBQUMsR0FBR08sR0FBRXlHLGVBQWU7WUFDM0M7VUFDRDtRQUNELENBQUMsR0FDRCxLQUFLeUIsV0FBVzVILEdBQUcsU0FBUywyQkFBMkIsU0FBVU4sSUFBRztBQUNuRXFELGFBQUVxRyxRQUFRSCxJQUFJLEtBQUt2SixHQUFFMEcsZ0JBQWdCO1FBQ3RDLENBQUM7QUFDRixZQUFJeEssS0FBSThJLFNBQVNpRixjQUNoQjlOLEtBQUlELE1BQUtBLE1BQUs7QUFDZixhQUFLZ00sV0FBVzVILEdBQUcscUJBQXFCLDJCQUEyQixTQUFVTixJQUFHO0FBQy9FN0QsZUFDR2tILEdBQUU2RSxXQUFXWSxJQUFJLGdDQUFnQyxJQUNqRHpGLEdBQUU2RSxXQUFXWSxJQUFJLGNBQWM7UUFDbkMsQ0FBQyxHQUNBLEtBQUtaLFdBQVc1SCxHQUNmLDZCQUNBLDJCQUNBLFNBQVVOLElBQUc7QUFDWixjQUFJN0QsTUFBSyxZQUFZNkQsR0FBRWtLLEtBQU03RyxJQUFFNkUsV0FBV1ksSUFBSSxnQ0FBZ0M7ZUFDekU7QUFDSixnQkFBSXRLLEtBQUl3QixHQUFFcUk7QUFDVjdKLGtCQUFLbkMsR0FBRThLLFNBQ04zSSxNQUFLbkMsR0FBRStLLFFBQ1A1SSxNQUFLbkMsR0FBRWdMLE9BQ1A3SSxNQUFLbkMsR0FBRTRLLE9BQ1A1RCxHQUFFOEcsYUFBYW5LLEVBQUM7VUFDbEI7UUFDRCxDQUNEO01BQ0YsR0FDQ3JFLEdBQUUwQyxVQUFVc0wsb0JBQW9CLFNBQVVsTCxJQUFHO0FBQzdDLGFBQUtpTCxRQUFRM0csS0FBSyxZQUFZLEtBQUttRixXQUFXbkYsS0FBSyxVQUFVLENBQUMsR0FDN0QsS0FBS21GLFdBQVduRixLQUFLLFlBQVksSUFBSTtNQUN2QyxHQUNDcEgsR0FBRTBDLFVBQVUrSyxvQkFBb0IsU0FBVTNLLElBQUc3QyxJQUFHO0FBQ2hELGFBQUs4TixRQUFRM0csS0FBSyxlQUFlbkgsR0FBRWtKLElBQUk7TUFDeEMsR0FDQ25KLEdBQUUwQyxVQUFVaUssU0FBUyxTQUFVN0osSUFBRzdDLElBQUc7QUFDckMsWUFBSUcsS0FBSSxLQUFLMk4sUUFBUSxDQUFDLEtBQUsxRSxTQUFTeUQ7QUFDcEMsYUFBS2lCLFFBQVEzRyxLQUFLLGVBQWUsRUFBRSxHQUNsQ3RFLEdBQUU1QyxLQUFLLE1BQU1ELEVBQUMsR0FDZCxLQUFLc00sV0FBV3hFLEtBQUssOEJBQThCLEVBQUV6QixPQUFPLEtBQUt3SCxnQkFBZ0IsR0FDakYsS0FBS1csYUFBYSxHQUNsQnJPLE1BQUssS0FBSzJOLFFBQVFuSixRQUFRLE9BQU87TUFDbkMsR0FDQzVFLEdBQUUwQyxVQUFVOEwsZUFBZSxXQUFZO0FBQ3ZDLFlBQUssS0FBS0MsYUFBYSxHQUFHLENBQUMsS0FBS1AsaUJBQWtCO0FBQ2pELGNBQUlwTCxLQUFJLEtBQUtpTCxRQUFRSCxJQUFJO0FBQ3pCLGVBQUtoSixRQUFRLFNBQVM7WUFBQzhKLE1BQU01TDtVQUFDLENBQUM7UUFDaEM7QUFDQSxhQUFLb0wsa0JBQWtCO01BQ3hCLEdBQ0NsTyxHQUFFMEMsVUFBVTJMLHFCQUFxQixTQUFVdkwsSUFBRzdDLElBQUc7QUFDakQsYUFBSzJFLFFBQVEsWUFBWTtVQUFDaUMsTUFBTTVHO1FBQUMsQ0FBQyxHQUFHLEtBQUs4TixRQUFRSCxJQUFJM04sR0FBRWtKLElBQUksR0FBRyxLQUFLcUYsYUFBYTtNQUNsRixHQUNDeE8sR0FBRTBDLFVBQVUrTCxlQUFlLFdBQVk7QUFDdkMsYUFBS1YsUUFBUVksSUFBSSxTQUFTLE1BQU07QUFDaEMsWUFBSTdMLEtBQUk7QUFDUixlQUFPLEtBQUtpTCxRQUFRM0csS0FBSyxhQUFhLElBQ2xDdEUsS0FBSSxLQUFLeUosV0FBV3hFLEtBQUssOEJBQThCLEVBQUU2RyxNQUFNLElBQy9EOUwsS0FBSSxRQUFRLEtBQUtpTCxRQUFRSCxJQUFJLEVBQUV4TSxTQUFTLEtBQUs7QUFDakQsYUFBSzJNLFFBQVFZLElBQUksU0FBUzdMLEVBQUM7TUFDNUIsR0FDQTlDO0lBRUYsQ0FBQyxHQUNEaEIsR0FBRVAsT0FBTyxnQ0FBZ0MsQ0FBQyxRQUFRLEdBQUcsU0FBVStCLElBQUc7QUFDakUsZUFBU1IsS0FBSTtNQUFDO0FBQ2QsYUFDRUEsR0FBRTBDLFVBQVUyQyxPQUFPLFNBQVV2QyxJQUFHN0MsSUFBR0csSUFBRztBQUN0QyxZQUFJQyxLQUFJLE1BQ1BDLEtBQUksQ0FDSCxRQUNBLFdBQ0EsU0FDQSxXQUNBLFVBQ0EsYUFDQSxZQUNBLGVBQ0EsU0FDQSxVQUFBLEdBRURDLEtBQUksQ0FBQyxXQUFXLFdBQVcsYUFBYSxlQUFlLFVBQVU7QUFDbEV1QyxXQUFFNUMsS0FBSyxNQUFNRCxJQUFHRyxFQUFDLEdBQ2hCSCxHQUFFMEUsR0FBRyxLQUFLLFNBQVVOLElBQUd4QixJQUFHO0FBQ3pCLGNBQUksT0FBT3JDLEdBQUV1SSxRQUFRMUUsSUFBRy9ELEVBQUMsR0FBRztBQUMzQnVDLGlCQUFJQSxNQUFLLENBQUM7QUFDVixnQkFBSWlCLEtBQUl0RCxHQUFFcU8sTUFBTSxhQUFheEssSUFBRztjQUFDeUssUUFBUWpNO1lBQUMsQ0FBQztBQUMzQ3hDLGVBQUUyRyxTQUFTcEMsUUFBUWQsRUFBQyxHQUNuQixPQUFPdEQsR0FBRXVJLFFBQVExRSxJQUFHOUQsRUFBQyxNQUFNc0MsR0FBRWdMLFlBQVkvSixHQUFFcUssbUJBQW1CO1VBQ2hFO1FBQ0QsQ0FBQztNQUNILEdBQ0FuTztJQUVGLENBQUMsR0FDRGhCLEdBQUVQLE9BQU8sdUJBQXVCLENBQUMsVUFBVSxTQUFTLEdBQUcsU0FBVXdCLElBQUdHLElBQUc7QUFDdEUsZUFBU0MsR0FBRUwsSUFBRztBQUNiLGFBQUsrTyxPQUFPL08sTUFBSyxDQUFDO01BQ25CO0FBQ0EsYUFDRUssR0FBRXFDLFVBQVVzTSxNQUFNLFdBQVk7QUFDOUIsZUFBTyxLQUFLRDtNQUNiLEdBQ0MxTyxHQUFFcUMsVUFBVXlFLE1BQU0sU0FBVW5ILElBQUc7QUFDL0IsZUFBTyxLQUFLK08sS0FBSy9PLEVBQUM7TUFDbkIsR0FDQ0ssR0FBRXFDLFVBQVV1TSxTQUFTLFNBQVVqUCxJQUFHO0FBQ2xDLGFBQUsrTyxPQUFPOU8sR0FBRWdQLE9BQU8sQ0FBQyxHQUFHalAsR0FBRWdQLElBQUksR0FBRyxLQUFLRCxJQUFJO01BQzVDLEdBQ0MxTyxHQUFFNk8sU0FBUyxDQUFDLEdBQ1o3TyxHQUFFOE8sV0FBVyxTQUFVblAsSUFBRztBQUMxQixZQUFJLEVBQUVBLE1BQUtLLEdBQUU2TyxTQUFTO0FBQ3JCLGNBQUlyTSxLQUFJekMsR0FBRUosRUFBQztBQUNYSyxhQUFFNk8sT0FBT2xQLEVBQUMsSUFBSTZDO1FBQ2Y7QUFDQSxlQUFPLElBQUl4QyxHQUFFQSxHQUFFNk8sT0FBT2xQLEVBQUMsQ0FBQztNQUN6QixHQUNBSztJQUVGLENBQUMsR0FDRHJCLEdBQUVQLE9BQU8sc0JBQXNCLENBQUEsR0FBSSxXQUFZO0FBQzlDLGFBQU87UUFDTixLQUFLO1FBQ0wyUSxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSEMsR0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0gsS0FBRztRQUNILEtBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFLO1FBQ0xDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSCxLQUFHO1FBQ0gsS0FBSztRQUNMQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNILEtBQUs7UUFDTEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FBQ0hDLEdBQUc7UUFDSEMsR0FBRztRQUNIQyxHQUFHO1FB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MEMsR0FBRUQsRUFBQyxFQUFFYixNQUFNYyxJQUFHekMsRUFBQztVQUN0QixDQUFDLEdBQ0QsS0FBS0MsR0FBRXlJLFFBQVFsRyxJQUFHcEMsRUFBQyxJQUFJLE9BQU9MO1FBRWhDO01BQ0Q7QUFDQSxhQUFPLFFBQVFFLEdBQUV4QixHQUFHQyxRQUFRb2hDLGFBQWE3L0IsR0FBRXhCLEdBQUdDLFFBQVFvaEMsV0FBV2xnQyxLQUFJTTtJQUN0RSxDQUNELEdBQ0E7TUFBQzlCLFFBQVFPLEdBQUVQO01BQVF1RSxTQUFTaEUsR0FBRWdFO0lBQU87RUFFdkMsRUFBRyxHQUNId2lDLElBQUkzbUMsRUFBRW1FLFFBQVEsZ0JBQWdCO0FBQy9CLFNBQVFwRSxFQUFFRSxHQUFHQyxRQUFRTCxNQUFNRyxHQUFJMm1DO0FBQ2hDLENBQUM7IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZG9jdW1lbnQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAibiIsICJkZWZpbmUiLCAiYW1kIiwgImpRdWVyeSIsICJ1IiwgImUiLCAiZm4iLCAic2VsZWN0MiIsICJlMiIsICJ0MiIsICJyIiwgImgiLCAibyIsICJzIiwgImYiLCAiZyIsICJtIiwgInYiLCAieSIsICJfIiwgImkiLCAiYSIsICJ3IiwgImIiLCAiZTMiLCAidDMiLCAiY2FsbCIsICJsIiwgIm4yIiwgInIyIiwgImkyIiwgIm8yIiwgInMyIiwgImEyIiwgImwyIiwgImMyIiwgInUyIiwgImQiLCAicCIsICJoMiIsICJzcGxpdCIsICJmMiIsICJtYXAiLCAiZzIiLCAibGVuZ3RoIiwgIm5vZGVJZENvbXBhdCIsICJ0ZXN0IiwgInJlcGxhY2UiLCAiY2hhckF0IiwgInNsaWNlIiwgImNvbmNhdCIsICJzcGxpY2UiLCAiam9pbiIsICJBIiwgImFyZ3VtZW50cyIsICJwdXNoIiwgImFwcGx5IiwgIngiLCAiRCIsICJFcnJvciIsICJjIiwgImluZGV4T2YiLCAic3Vic3RyaW5nIiwgIlMiLCAicmVxdWlyZWpzIiwgIk9iamVjdCIsICJwcm90b3R5cGUiLCAiaGFzT3duUHJvcGVydHkiLCAibm9ybWFsaXplIiwgInQ0IiwgImU0IiwgInByIiwgInJlcXVpcmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaWQiLCAidXJpIiwgImNvbmZpZyIsICJsb2FkIiwgImRlcHMiLCAiY2FsbGJhY2siLCAic2V0VGltZW91dCIsICJfZGVmaW5lZCIsICIkIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAibjMiLCAiRXh0ZW5kIiwgImNvbnN0cnVjdG9yIiwgImkzIiwgIl9fc3VwZXJfXyIsICJEZWNvcmF0ZSIsICJvMyIsICJlNSIsICJBcnJheSIsICJ1bnNoaWZ0IiwgIm40IiwgImRpc3BsYXlOYW1lIiwgImxpc3RlbmVycyIsICJvbiIsICJ0cmlnZ2VyIiwgIl90eXBlIiwgImludm9rZSIsICJPYnNlcnZhYmxlIiwgImdlbmVyYXRlQ2hhcnMiLCAiTWF0aCIsICJmbG9vciIsICJyYW5kb20iLCAidG9TdHJpbmciLCAiYmluZCIsICJfY29udmVydERhdGEiLCAidG9Mb3dlckNhc2UiLCAiaGFzU2Nyb2xsIiwgInN0eWxlIiwgIm92ZXJmbG93WCIsICJvdmVyZmxvd1kiLCAiaW5uZXJIZWlnaHQiLCAic2Nyb2xsSGVpZ2h0IiwgImlubmVyV2lkdGgiLCAic2Nyb2xsV2lkdGgiLCAiZXNjYXBlTWFya3VwIiwgIlN0cmluZyIsICJhcHBlbmRNYW55IiwgImpxdWVyeSIsICJzdWJzdHIiLCAiYWRkIiwgImFwcGVuZCIsICJfX2NhY2hlIiwgIkdldFVuaXF1ZUVsZW1lbnRJZCIsICJnZXRBdHRyaWJ1dGUiLCAic2V0QXR0cmlidXRlIiwgIlN0b3JlRGF0YSIsICJHZXREYXRhIiwgImRhdGEiLCAiUmVtb3ZlRGF0YSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAiJGVsZW1lbnQiLCAib3B0aW9ucyIsICJyZW5kZXIiLCAiZ2V0IiwgImF0dHIiLCAiJHJlc3VsdHMiLCAiY2xlYXIiLCAiZW1wdHkiLCAiZGlzcGxheU1lc3NhZ2UiLCAiaGlkZUxvYWRpbmciLCAicjMiLCAibWVzc2FnZSIsICJhcmdzIiwgImNsYXNzTmFtZSIsICJoaWRlTWVzc2FnZXMiLCAiZmluZCIsICJyZW1vdmUiLCAicmVzdWx0cyIsICJzb3J0IiwgIm9wdGlvbiIsICJjaGlsZHJlbiIsICJwb3NpdGlvbiIsICJoaWdobGlnaHRGaXJzdEl0ZW0iLCAiZmlsdGVyIiwgImZpcnN0IiwgImVuc3VyZUhpZ2hsaWdodFZpc2libGUiLCAic2V0Q2xhc3NlcyIsICJjdXJyZW50IiwgImVhY2giLCAiZWxlbWVudCIsICJzZWxlY3RlZCIsICJpbkFycmF5IiwgInNob3dMb2FkaW5nIiwgImRpc2FibGVkIiwgImxvYWRpbmciLCAidGV4dCIsICJwcmVwZW5kIiwgImRvY3VtZW50IiwgImNyZWF0ZUVsZW1lbnQiLCAicm9sZSIsICJ3aW5kb3ciLCAiRWxlbWVudCIsICJtYXRjaGVzIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsICJfcmVzdWx0SWQiLCAidGl0bGUiLCAidGVtcGxhdGUiLCAiY2xhc3MiLCAiaXNPcGVuIiwgInJlbW92ZUF0dHIiLCAiZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzIiwgImluZGV4IiwgImVxIiwgIm9mZnNldCIsICJ0b3AiLCAic2Nyb2xsVG9wIiwgIm91dGVySGVpZ2h0IiwgImFkZENsYXNzIiwgIm1vdXNld2hlZWwiLCAiZGVsdGFZIiwgImhlaWdodCIsICJwcmV2ZW50RGVmYXVsdCIsICJzdG9wUHJvcGFnYXRpb24iLCAib3JpZ2luYWxFdmVudCIsICJyZW1vdmVDbGFzcyIsICJkZXN0cm95IiwgImRpc3BsYXkiLCAiaW5uZXJIVE1MIiwgIkJBQ0tTUEFDRSIsICJUQUIiLCAiRU5URVIiLCAiU0hJRlQiLCAiQ1RSTCIsICJBTFQiLCAiRVNDIiwgIlNQQUNFIiwgIlBBR0VfVVAiLCAiUEFHRV9ET1dOIiwgIkVORCIsICJIT01FIiwgIkxFRlQiLCAiVVAiLCAiUklHSFQiLCAiRE9XTiIsICJERUxFVEUiLCAiX3RhYmluZGV4IiwgIiRzZWxlY3Rpb24iLCAiY29udGFpbmVyIiwgIl9oYW5kbGVCbHVyIiwgIndoaWNoIiwgInVwZGF0ZSIsICJfYXR0YWNoQ2xvc2VIYW5kbGVyIiwgIl9kZXRhY2hDbG9zZUhhbmRsZXIiLCAiYWN0aXZlRWxlbWVudCIsICJjb250YWlucyIsICJib2R5IiwgInRhcmdldCIsICJjbG9zZXN0IiwgIm9mZiIsICJodG1sIiwgInNlbGVjdGlvbkNvbnRhaW5lciIsICJwYXJlbnQiLCAicGxhY2Vob2xkZXIiLCAibm9ybWFsaXplUGxhY2Vob2xkZXIiLCAiY3JlYXRlUGxhY2Vob2xkZXIiLCAiX2hhbmRsZUNsZWFyIiwgIl9oYW5kbGVLZXlib2FyZENsZWFyIiwgInZhbCIsICJwcmV2ZW50ZWQiLCAiJHNlYXJjaENvbnRhaW5lciIsICIkc2VhcmNoIiwgIl90cmFuc2ZlclRhYkluZGV4IiwgInByb3AiLCAiX2tleVVwUHJldmVudGVkIiwgImlzRGVmYXVsdFByZXZlbnRlZCIsICJwcmV2IiwgInNlYXJjaFJlbW92ZUNob2ljZSIsICJkb2N1bWVudE1vZGUiLCAidHlwZSIsICJoYW5kbGVTZWFyY2giLCAicmVzaXplU2VhcmNoIiwgInRlcm0iLCAiY3NzIiwgIndpZHRoIiwgIkV2ZW50IiwgInBhcmFtcyIsICJkaWN0IiwgImFsbCIsICJleHRlbmQiLCAiX2NhY2hlIiwgImxvYWRQYXRoIiwgIu+8oSIsICLDgCIsICLDgSIsICLDgiIsICLhuqYiLCAi4bqkIiwgIuG6qiIsICLhuqgiLCAiw4MiLCAixIAiLCAixIIiLCAi4bqwIiwgIuG6riIsICLhurQiLCAi4bqyIiwgIsimIiwgIsegIiwgIsOEIiwgIseeIiwgIuG6oiIsICLDhSIsICLHuiIsICLHjSIsICLIgCIsICLIgiIsICLhuqAiLCAi4bqsIiwgIuG6tiIsICLhuIAiLCAixIQiLCAiw4YiLCAix7wiLCAix6IiLCAi77yiIiwgIuG4giIsICLhuIQiLCAi4biGIiwgIsaCIiwgIsaBIiwgIu+8oyIsICLEhiIsICLEiCIsICLEiiIsICLEjCIsICLDhyIsICLhuIgiLCAixociLCAi77ykIiwgIuG4iiIsICLEjiIsICLhuIwiLCAi4biQIiwgIuG4kiIsICLhuI4iLCAixJAiLCAixosiLCAixooiLCAixokiLCAix7EiLCAix4QiLCAix7IiLCAix4UiLCAi77ylIiwgIsOIIiwgIsOJIiwgIsOKIiwgIuG7gCIsICLhur4iLCAi4buEIiwgIuG7giIsICLhurwiLCAixJIiLCAi4biUIiwgIuG4liIsICLElCIsICLEliIsICLDiyIsICLhuroiLCAixJoiLCAiyIQiLCAiyIYiLCAi4bq4IiwgIuG7hiIsICLIqCIsICLhuJwiLCAixJgiLCAi4biYIiwgIuG4miIsICLGkCIsICLGjiIsICLvvKYiLCAi4bieIiwgIsaRIiwgIu+8pyIsICLHtCIsICLEnCIsICLhuKAiLCAixJ4iLCAixKAiLCAix6YiLCAixKIiLCAix6QiLCAixpMiLCAi77yoIiwgIsSkIiwgIuG4oiIsICLhuKYiLCAiyJ4iLCAi4bikIiwgIuG4qCIsICLhuKoiLCAixKYiLCAi77ypIiwgIsOMIiwgIsONIiwgIsOOIiwgIsSoIiwgIsSqIiwgIsSsIiwgIsSwIiwgIsOPIiwgIuG4riIsICLhu4giLCAix48iLCAiyIgiLCAiyIoiLCAi4buKIiwgIsSuIiwgIuG4rCIsICLGlyIsICLvvKoiLCAixLQiLCAi77yrIiwgIuG4sCIsICLHqCIsICLhuLIiLCAixLYiLCAi4bi0IiwgIsaYIiwgIu+8rCIsICLEvyIsICLEuSIsICLEvSIsICLhuLYiLCAi4bi4IiwgIsS7IiwgIuG4vCIsICLhuLoiLCAixYEiLCAix4ciLCAix4giLCAi77ytIiwgIuG4viIsICLhuYAiLCAi4bmCIiwgIsacIiwgIu+8riIsICLHuCIsICLFgyIsICLDkSIsICLhuYQiLCAixYciLCAi4bmGIiwgIsWFIiwgIuG5iiIsICLhuYgiLCAixp0iLCAix4oiLCAix4siLCAi77yvIiwgIsOSIiwgIsOTIiwgIsOUIiwgIuG7kiIsICLhu5AiLCAi4buWIiwgIuG7lCIsICLDlSIsICLhuYwiLCAiyKwiLCAi4bmOIiwgIsWMIiwgIuG5kCIsICLhuZIiLCAixY4iLCAiyK4iLCAiyLAiLCAiw5YiLCAiyKoiLCAi4buOIiwgIsWQIiwgIseRIiwgIsiMIiwgIsiOIiwgIsagIiwgIuG7nCIsICLhu5oiLCAi4bugIiwgIuG7niIsICLhu6IiLCAi4buMIiwgIuG7mCIsICLHqiIsICLHrCIsICLDmCIsICLHviIsICLGhiIsICLGnyIsICLFkiIsICLGoiIsICLIoiIsICLvvLAiLCAi4bmUIiwgIuG5liIsICLGpCIsICLvvLEiLCAi77yyIiwgIsWUIiwgIuG5mCIsICLFmCIsICLIkCIsICLIkiIsICLhuZoiLCAi4bmcIiwgIsWWIiwgIuG5niIsICLvvLMiLCAixZoiLCAi4bmkIiwgIsWcIiwgIuG5oCIsICLFoCIsICLhuaYiLCAi4bmiIiwgIuG5qCIsICLImCIsICLFniIsICLvvLQiLCAi4bmqIiwgIsWkIiwgIuG5rCIsICLImiIsICLFoiIsICLhubAiLCAi4bmuIiwgIsWmIiwgIsasIiwgIsauIiwgIu+8tSIsICLDmSIsICLDmiIsICLDmyIsICLFqCIsICLhubgiLCAixaoiLCAi4bm6IiwgIsWsIiwgIsOcIiwgIsebIiwgIseXIiwgIseVIiwgIseZIiwgIuG7piIsICLFriIsICLFsCIsICLHkyIsICLIlCIsICLIliIsICLGryIsICLhu6oiLCAi4buoIiwgIuG7riIsICLhu6wiLCAi4buwIiwgIuG7pCIsICLhubIiLCAixbIiLCAi4bm2IiwgIuG5tCIsICLvvLYiLCAi4bm8IiwgIuG5viIsICLGsiIsICLvvLciLCAi4bqAIiwgIuG6giIsICLFtCIsICLhuoYiLCAi4bqEIiwgIuG6iCIsICLvvLgiLCAi4bqKIiwgIuG6jCIsICLvvLkiLCAi4buyIiwgIsOdIiwgIsW2IiwgIuG7uCIsICLIsiIsICLhuo4iLCAixbgiLCAi4bu2IiwgIuG7tCIsICLGsyIsICLvvLoiLCAixbkiLCAi4bqQIiwgIsW7IiwgIsW9IiwgIuG6kiIsICLhupQiLCAixrUiLCAiyKQiLCAi772BIiwgIuG6miIsICLDoCIsICLDoSIsICLDoiIsICLhuqciLCAi4bqlIiwgIuG6qyIsICLhuqkiLCAiw6MiLCAixIEiLCAixIMiLCAi4bqxIiwgIuG6ryIsICLhurUiLCAi4bqzIiwgIsinIiwgIsehIiwgIsOkIiwgIsefIiwgIuG6oyIsICLDpSIsICLHuyIsICLHjiIsICLIgSIsICLIgyIsICLhuqEiLCAi4bqtIiwgIuG6tyIsICLhuIEiLCAixIUiLCAiyZAiLCAiw6YiLCAix70iLCAix6MiLCAi772CIiwgIuG4gyIsICLhuIUiLCAi4biHIiwgIsaAIiwgIsaDIiwgIsmTIiwgIu+9gyIsICLEhyIsICLEiSIsICLEiyIsICLEjSIsICLDpyIsICLhuIkiLCAixogiLCAi772EIiwgIuG4iyIsICLEjyIsICLhuI0iLCAi4biRIiwgIuG4kyIsICLhuI8iLCAixJEiLCAixowiLCAiyZYiLCAiyZciLCAix7MiLCAix4YiLCAi772FIiwgIsOoIiwgIsOpIiwgIsOqIiwgIuG7gSIsICLhur8iLCAi4buFIiwgIuG7gyIsICLhur0iLCAixJMiLCAi4biVIiwgIuG4lyIsICLElSIsICLElyIsICLDqyIsICLhursiLCAixJsiLCAiyIUiLCAiyIciLCAi4bq5IiwgIuG7hyIsICLIqSIsICLhuJ0iLCAixJkiLCAi4biZIiwgIuG4myIsICLJmyIsICLHnSIsICLvvYYiLCAi4bifIiwgIsaSIiwgIu+9hyIsICLHtSIsICLEnSIsICLhuKEiLCAixJ8iLCAixKEiLCAix6ciLCAixKMiLCAix6UiLCAiyaAiLCAi772IIiwgIsSlIiwgIuG4oyIsICLhuKciLCAiyJ8iLCAi4bilIiwgIuG4qSIsICLhuKsiLCAi4bqWIiwgIsSnIiwgIsmlIiwgIsaVIiwgIu+9iSIsICLDrCIsICLDrSIsICLDriIsICLEqSIsICLEqyIsICLErSIsICLDryIsICLhuK8iLCAi4buJIiwgIseQIiwgIsiJIiwgIsiLIiwgIuG7iyIsICLEryIsICLhuK0iLCAiyagiLCAixLEiLCAi772KIiwgIsS1IiwgIsewIiwgIu+9iyIsICLhuLEiLCAix6kiLCAi4bizIiwgIsS3IiwgIuG4tSIsICLGmSIsICLvvYwiLCAixYAiLCAixLoiLCAixL4iLCAi4bi3IiwgIuG4uSIsICLEvCIsICLhuL0iLCAi4bi7IiwgIsW/IiwgIsWCIiwgIsaaIiwgIsmrIiwgIseJIiwgIu+9jSIsICLhuL8iLCAi4bmBIiwgIuG5gyIsICLJsSIsICLJryIsICLvvY4iLCAix7kiLCAixYQiLCAiw7EiLCAi4bmFIiwgIsWIIiwgIuG5hyIsICLFhiIsICLhuYsiLCAi4bmJIiwgIsaeIiwgIsmyIiwgIsWJIiwgIseMIiwgIu+9jyIsICLDsiIsICLDsyIsICLDtCIsICLhu5MiLCAi4buRIiwgIuG7lyIsICLhu5UiLCAiw7UiLCAi4bmNIiwgIsitIiwgIuG5jyIsICLFjSIsICLhuZEiLCAi4bmTIiwgIsWPIiwgIsivIiwgIsixIiwgIsO2IiwgIsirIiwgIuG7jyIsICLFkSIsICLHkiIsICLIjSIsICLIjyIsICLGoSIsICLhu50iLCAi4bubIiwgIuG7oSIsICLhu58iLCAi4bujIiwgIuG7jSIsICLhu5kiLCAix6siLCAix60iLCAiw7giLCAix78iLCAiyZQiLCAiybUiLCAixZMiLCAixqMiLCAiyKMiLCAi772QIiwgIuG5lSIsICLhuZciLCAixqUiLCAi772RIiwgIu+9kiIsICLFlSIsICLhuZkiLCAixZkiLCAiyJEiLCAiyJMiLCAi4bmbIiwgIuG5nSIsICLFlyIsICLhuZ8iLCAiyb0iLCAi772TIiwgIsOfIiwgIsWbIiwgIuG5pSIsICLFnSIsICLhuaEiLCAixaEiLCAi4bmnIiwgIuG5oyIsICLhuakiLCAiyJkiLCAixZ8iLCAi4bqbIiwgIu+9lCIsICLhuasiLCAi4bqXIiwgIsWlIiwgIuG5rSIsICLImyIsICLFoyIsICLhubEiLCAi4bmvIiwgIsWnIiwgIsatIiwgIsqIIiwgIu+9lSIsICLDuSIsICLDuiIsICLDuyIsICLFqSIsICLhubkiLCAixasiLCAi4bm7IiwgIsWtIiwgIsO8IiwgIsecIiwgIseYIiwgIseWIiwgIseaIiwgIuG7pyIsICLFryIsICLFsSIsICLHlCIsICLIlSIsICLIlyIsICLGsCIsICLhu6siLCAi4bupIiwgIuG7ryIsICLhu60iLCAi4buxIiwgIuG7pSIsICLhubMiLCAixbMiLCAi4bm3IiwgIuG5tSIsICLKiSIsICLvvZYiLCAi4bm9IiwgIuG5vyIsICLKiyIsICLKjCIsICLvvZciLCAi4bqBIiwgIuG6gyIsICLFtSIsICLhuociLCAi4bqFIiwgIuG6mCIsICLhuokiLCAi772YIiwgIuG6iyIsICLhuo0iLCAi772ZIiwgIuG7syIsICLDvSIsICLFtyIsICLhu7kiLCAiyLMiLCAi4bqPIiwgIsO/IiwgIuG7tyIsICLhupkiLCAi4bu1IiwgIsa0IiwgIu+9miIsICLFuiIsICLhupEiLCAixbwiLCAixb4iLCAi4bqTIiwgIuG6lSIsICLGtiIsICLIpSIsICLOhiIsICLOiCIsICLOiSIsICLOiiIsICLOqiIsICLOjCIsICLOjiIsICLOqyIsICLOjyIsICLOrCIsICLOrSIsICLOriIsICLOryIsICLPiiIsICLOkCIsICLPjCIsICLPjSIsICLPiyIsICLOsCIsICLPjiIsICLPgiIsICJxdWVyeSIsICJnZW5lcmF0ZVJlc3VsdElkIiwgIml0ZW0iLCAic2VsZWN0IiwgImlzIiwgInVuc2VsZWN0IiwgImFkZE9wdGlvbnMiLCAibGFiZWwiLCAidGV4dENvbnRlbnQiLCAiaW5uZXJUZXh0IiwgInZhbHVlIiwgIl9ub3JtYWxpemVJdGVtIiwgIl9kYXRhVG9Db252ZXJ0IiwgImNvbnZlcnRUb09wdGlvbnMiLCAicmVwbGFjZVdpdGgiLCAiYWpheE9wdGlvbnMiLCAiX2FwcGx5RGVmYXVsdHMiLCAicHJvY2Vzc1Jlc3VsdHMiLCAicSIsICJ0cmFuc3BvcnQiLCAidDUiLCAiYWpheCIsICJ0aGVuIiwgImZhaWwiLCAiX3JlcXVlc3QiLCAiaXNGdW5jdGlvbiIsICJhYm9ydCIsICJlNiIsICJpc0FycmF5IiwgInN0YXR1cyIsICJ1cmwiLCAiZGVsYXkiLCAiX3F1ZXJ5VGltZW91dCIsICJjbGVhclRpbWVvdXQiLCAiY3JlYXRlVGFnIiwgImluc2VydFRhZyIsICJ1MyIsICJfcmVtb3ZlT2xkVGFncyIsICJwYWdlIiwgInRvVXBwZXJDYXNlIiwgInRyaW0iLCAidG9rZW5pemVyIiwgImRyb3Bkb3duIiwgInNlbGVjdGlvbiIsICJtaW5pbXVtSW5wdXRMZW5ndGgiLCAibWluaW11bSIsICJpbnB1dCIsICJtYXhpbXVtSW5wdXRMZW5ndGgiLCAibWF4aW11bSIsICJtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIiwgIl9jaGVja0lmTWF4aW11bVNlbGVjdGVkIiwgIiRkcm9wZG93biIsICJzaG93U2VhcmNoIiwgInJlbW92ZVBsYWNlaG9sZGVyIiwgImxhc3RQYXJhbXMiLCAiJGxvYWRpbmdNb3JlIiwgImNyZWF0ZUxvYWRpbmdNb3JlIiwgInNob3dMb2FkaW5nTW9yZSIsICJsb2FkTW9yZUlmTmVlZGVkIiwgImRvY3VtZW50RWxlbWVudCIsICJsb2FkTW9yZSIsICJwYWdpbmF0aW9uIiwgIm1vcmUiLCAiJGRyb3Bkb3duUGFyZW50IiwgIl9zaG93RHJvcGRvd24iLCAiX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlciIsICJfYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzIiwgIl9oaWRlRHJvcGRvd24iLCAiX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlciIsICIkZHJvcGRvd25Db250YWluZXIiLCAiJGNvbnRhaW5lciIsICJkZXRhY2giLCAiX2NvbnRhaW5lclJlc3VsdHNIYW5kbGVyc0JvdW5kIiwgIl9wb3NpdGlvbkRyb3Bkb3duIiwgIl9yZXNpemVEcm9wZG93biIsICJwYXJlbnRzIiwgInNjcm9sbExlZnQiLCAiaGFzQ2xhc3MiLCAiYm90dG9tIiwgImEzIiwgImxlZnQiLCAib2Zmc2V0UGFyZW50IiwgImlzQ29ubmVjdGVkIiwgIm91dGVyV2lkdGgiLCAibWluV2lkdGgiLCAiYXBwZW5kVG8iLCAibWluaW11bVJlc3VsdHNGb3JTZWFyY2giLCAiX2hhbmRsZVNlbGVjdE9uQ2xvc2UiLCAib3JpZ2luYWxTZWxlY3QyRXZlbnQiLCAiX3NlbGVjdFRyaWdnZXJlZCIsICJjdHJsS2V5IiwgIm1ldGFLZXkiLCAiZXJyb3JMb2FkaW5nIiwgImlucHV0VG9vTG9uZyIsICJpbnB1dFRvb1Nob3J0IiwgImxvYWRpbmdNb3JlIiwgIm1heGltdW1TZWxlY3RlZCIsICJub1Jlc3VsdHMiLCAic2VhcmNoaW5nIiwgInJlbW92ZUFsbEl0ZW1zIiwgIm0yIiwgInYyIiwgInkyIiwgIl8yIiwgIiQyIiwgIncyIiwgImIyIiwgIkEyIiwgIngyIiwgIkQyIiwgIlMyIiwgIkUiLCAiQyIsICJPIiwgIlQiLCAiTCIsICJJIiwgImoiLCAicmVzZXQiLCAiZGVmYXVsdHMiLCAiZGF0YUFkYXB0ZXIiLCAidGFncyIsICJ0b2tlblNlcGFyYXRvcnMiLCAiYW1kQmFzZSIsICJpbml0U2VsZWN0aW9uIiwgInJlc3VsdHNBZGFwdGVyIiwgInNlbGVjdE9uQ2xvc2UiLCAiZHJvcGRvd25BZGFwdGVyIiwgIm11bHRpcGxlIiwgImNsb3NlT25TZWxlY3QiLCAiZHJvcGRvd25Dc3NDbGFzcyIsICJkcm9wZG93bkNzcyIsICJhZGFwdERyb3Bkb3duQ3NzQ2xhc3MiLCAic2VsZWN0aW9uQWRhcHRlciIsICJhbGxvd0NsZWFyIiwgImNvbnRhaW5lckNzc0NsYXNzIiwgImNvbnRhaW5lckNzcyIsICJhZGFwdENvbnRhaW5lckNzc0NsYXNzIiwgImxhbmd1YWdlIiwgIl9yZXNvbHZlTGFuZ3VhZ2UiLCAiczMiLCAidHJhbnNsYXRpb25zIiwgIl9wcm9jZXNzVHJhbnNsYXRpb25zIiwgImRlYnVnIiwgImFtZExhbmd1YWdlQmFzZSIsICJkcm9wZG93bkF1dG9XaWR0aCIsICJtYXRjaGVyIiwgInNjcm9sbEFmdGVyU2VsZWN0IiwgInNvcnRlciIsICJ0ZW1wbGF0ZVJlc3VsdCIsICJ0ZW1wbGF0ZVNlbGVjdGlvbiIsICJ0aGVtZSIsICJhcHBseUZyb21FbGVtZW50IiwgImlzRW1wdHlPYmplY3QiLCAiaXNQbGFpbk9iamVjdCIsICJ3YXJuIiwgInNldCIsICJjYW1lbENhc2UiLCAiZnJvbUVsZW1lbnQiLCAiZGlyIiwgImF0dHJpYnV0ZXMiLCAibmFtZSIsICJkYXRhc2V0IiwgIl9nZW5lcmF0ZUlkIiwgIl9wbGFjZUNvbnRhaW5lciIsICJfYmluZEFkYXB0ZXJzIiwgIl9yZWdpc3RlckRvbUV2ZW50cyIsICJfcmVnaXN0ZXJEYXRhRXZlbnRzIiwgIl9yZWdpc3RlclNlbGVjdGlvbkV2ZW50cyIsICJfcmVnaXN0ZXJEcm9wZG93bkV2ZW50cyIsICJfcmVnaXN0ZXJSZXN1bHRzRXZlbnRzIiwgIl9yZWdpc3RlckV2ZW50cyIsICJfc3luY0F0dHJpYnV0ZXMiLCAiaW5zZXJ0QWZ0ZXIiLCAiX3Jlc29sdmVXaWR0aCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImMzIiwgIm1hdGNoIiwgIl9zeW5jQSIsICJfc3luY1MiLCAiX3N5bmNTdWJ0cmVlIiwgImF0dGFjaEV2ZW50IiwgIk11dGF0aW9uT2JzZXJ2ZXIiLCAiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsICJNb3pNdXRhdGlvbk9ic2VydmVyIiwgIl9vYnNlcnZlciIsICJvYnNlcnZlIiwgImNoaWxkTGlzdCIsICJzdWJ0cmVlIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAidG9nZ2xlRHJvcGRvd24iLCAiZm9jdXMiLCAiYWx0S2V5IiwgImNsb3NlIiwgIm9wZW4iLCAibm9kZU5hbWUiLCAiYWRkZWROb2RlcyIsICJyZW1vdmVkTm9kZXMiLCAiaGFzRm9jdXMiLCAiZW5hYmxlIiwgImRldGFjaEV2ZW50IiwgImRpc2Nvbm5lY3QiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJyZW1vdmVEYXRhIiwgInQiXQp9Cg== diff --git a/src/StickyTableHeaders/modules/core.ts b/src/StickyTableHeaders/modules/core.ts index 413c311a..0eb71930 100644 --- a/src/StickyTableHeaders/modules/core.ts +++ b/src/StickyTableHeaders/modules/core.ts @@ -7,7 +7,7 @@ export const stickyTableHeaders = (): void => { .find('tbody>tr>th') .parent() .eq(0) as JQuery; - const $trTd: JQuery = $table.find('tbody>tr>td').parent() as JQuery; + const $trTd: JQuery = $table.find('tbody>tr>td').parent(); const $target: JQuery | JQuery | null = $thead.length ? $thead : $trTh.length